You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-23 22:36:32 +02:00
1 line
3.3 MiB
1 line
3.3 MiB
module.exports = `InVzZSBzdHJpY3QiO3ZhciBfX2VzYnVpbGRfZXNtX21lcm1haWQ9KCgpPT57dmFyIGN4ZT1PYmplY3QuY3JlYXRlO3ZhciBSMT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHV4ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBoeGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIGZ4ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsZHhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIG89KHQsZSk9PlIxKHQsIm5hbWUiLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBNPSh0LGUpPT4oKT0+KHQmJihlPXQodD0wKSksZSk7dmFyIE5pPSh0LGUpPT4oKT0+KGV8fHQoKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0cyksdnI9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSlSMSh0LHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX0sQ2I9KHQsZSxyLG4pPT57aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIilmb3IobGV0IGkgb2YgaHhlKGUpKSFkeGUuY2FsbCh0LGkpJiZpIT09ciYmUjEodCxpLHtnZXQ6KCk9PmVbaV0sZW51bWVyYWJsZTohKG49dXhlKGUsaSkpfHxuLmVudW1lcmFibGV9KTtyZXR1cm4gdH0sRXI9KHQsZSxyKT0+KENiKHQsZSwiZGVmYXVsdCIpLHImJkNiKHIsZSwiZGVmYXVsdCIpKSxrYT0odCxlLHIpPT4ocj10IT1udWxsP2N4ZShmeGUodCkpOnt9LENiKGV8fCF0fHwhdC5fX2VzTW9kdWxlP1IxKHIsImRlZmF1bHQiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITB9KTpyLHQpKSxweGU9dD0+Q2IoUjEoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQpO3ZhciBBYj1OaSgod1MsVFMpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiB3Uz09Im9iamVjdCImJnR5cGVvZiBUUzwidSI/VFMuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anM9ZSgpfSkod1MsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9MWUzLGU9NmU0LHI9MzZlNSxuPSJtaWxsaXNlY29uZCIsaT0ic2Vjb25kIixhPSJtaW51dGUiLHM9ImhvdXIiLGw9ImRheSIsdT0id2VlayIsaD0ibW9udGgiLGY9InF1YXJ0ZXIiLGQ9InllYXIiLHA9ImRhdGUiLG09IkludmFsaWQgRGF0ZSIsZz0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyx5PS9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csdj17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpvKGZ1bmN0aW9uKGspe3ZhciBSPVsidGgiLCJzdCIsIm5kIiwicmQiXSxTPWslMTAwO3JldHVybiJbIitrKyhSWyhTLTIwKSUxMF18fFJbU118fFJbMF0pKyJdIn0sIm9yZGluYWwiKX0seD1vKGZ1bmN0aW9uKGssUixTKXt2YXIgTz1TdHJpbmcoayk7cmV0dXJuIU98fE8ubGVuZ3RoPj1SP2s6IiIrQXJyYXkoUisxLU8ubGVuZ3RoKS5qb2luKFMpK2t9LCJtIiksYj17czp4LHo6byhmdW5jdGlvbihrKXt2YXIgUj0tay51dGNPZmZzZXQoKSxTPU1hdGguYWJzKFIpLE89TWF0aC5mbG9vcihTLzYwKSxOPVMlNjA7cmV0dXJuKFI8PTA/IisiOiItIikreChPLDIsIjAiKSsiOiIreChOLDIsIjAiKX0sInoiKSxtOm8oZnVuY3Rpb24gayhSLFMpe2lmKFIuZGF0ZSgpPFMuZGF0ZSgpKXJldHVybi1rKFMsUik7dmFyIE89MTIqKFMueWVhcigpLVIueWVhcigpKSsoUy5tb250aCgpLVIubW9udGgoKSksTj1SLmNsb25lKCkuYWRkKE8saCksUD1TLU48MCxGPVIuY2xvbmUoKS5hZGQoTysoUD8tMToxKSxoKTtyZXR1cm4rKC0oTysoUy1OKS8oUD9OLUY6Ri1OKSl8fDApfSwidCIpLGE6byhmdW5jdGlvbihrKXtyZXR1cm4gazwwP01hdGguY2VpbChrKXx8MDpNYXRoLmZsb29yKGspfSwiYSIpLHA6byhmdW5jdGlvbihrKXtyZXR1cm57TTpoLHk6ZCx3OnUsZDpsLEQ6cCxoOnMsbTphLHM6aSxtczpuLFE6Zn1ba118fFN0cmluZyhrfHwiIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sIiIpfSwicCIpLHU6byhmdW5jdGlvbihrKXtyZXR1cm4gaz09PXZvaWQgMH0sInUiKX0sdz0iZW4iLF89e307X1t3XT12O3ZhciBUPSIkaXNEYXlqc09iamVjdCIsRT1vKGZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgSXx8ISgha3x8IWtbVF0pfSwiUyIpLEw9byhmdW5jdGlvbiBrKFIsUyxPKXt2YXIgTjtpZighUilyZXR1cm4gdztpZih0eXBlb2YgUj09InN0cmluZyIpe3ZhciBQPVIudG9Mb3dlckNhc2UoKTtfW1BdJiYoTj1QKSxTJiYoX1tQXT1TLE49UCk7dmFyIEY9Ui5zcGxpdCgiLSIpO2lmKCFOJiZGLmxlbmd0aD4xKXJldHVybiBrKEZbMF0pfWVsc2V7dmFyIEI9Ui5uYW1lO19bQl09UixOPUJ9cmV0dXJuIU8mJk4mJih3PU4pLE58fCFPJiZ3fSwidCIpLEM9byhmdW5jdGlvbihrLFIpe2lmKEUoaykpcmV0dXJuIGsuY2xvbmUoKTt2YXIgUz10eXBlb2YgUj09Im9iamVjdCI/Ujp7fTtyZXR1cm4gUy5kYXRlPWssUy5hcmdzPWFyZ3VtZW50cyxuZXcgSShTKX0sIk8iKSxBPWI7QS5sPUwsQS5pPUUsQS53PWZ1bmN0aW9uKGssUil7cmV0dXJuIEMoayx7bG9jYWxlOlIuJEwsdXRjOlIuJHUseDpSLiR4LCRvZmZzZXQ6Ui4kb2Zmc2V0fSl9O3ZhciBJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhTKXt0aGlzLiRMPUwoUy5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShTKSx0aGlzLiR4PXRoaXMuJHh8fFMueHx8e30sdGhpc1tUXT0hMH1vKGssIk0iKTt2YXIgUj1rLnByb3RvdHlwZTtyZXR1cm4gUi5wYXJzZT1mdW5jdGlvbihTKXt0aGlzLiRkPWZ1bmN0aW9uKE8pe3ZhciBOPU8uZGF0ZSxQPU8udXRjO2lmKE49PT1udWxsKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKEEudShOKSlyZXR1cm4gbmV3IERhdGU7aWYoTiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKE4pO2lmKHR5cGVvZiBOPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoTikpe3ZhciBGPU4ubWF0Y2goZyk7aWYoRil7dmFyIEI9RlsyXS0xfHwwLCQ9KEZbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIFA/bmV3IERhdGUoRGF0ZS5VVEMoRlsxXSxCLEZbM118fDEsRls0XXx8MCxGWzVdfHwwLEZbNl18fDAsJCkpOm5ldyBEYXRlKEZbMV0sQixGWzNdfHwxLEZbNF18fDAsRls1XXx8MCxGWzZdfHwwLCQpfX1yZXR1cm4gbmV3IERhdGUoTil9KFMpLHRoaXMuaW5pdCgpfSxSLmluaXQ9ZnVuY3Rpb24oKXt2YXIgUz10aGlzLiRkO3RoaXMuJHk9Uy5nZXRGdWxsWWVhcigpLHRoaXMuJE09Uy5nZXRNb250aCgpLHRoaXMuJEQ9Uy5nZXREYXRlKCksdGhpcy4kVz1TLmdldERheSgpLHRoaXMuJEg9Uy5nZXRIb3VycygpLHRoaXMuJG09Uy5nZXRNaW51dGVzKCksdGhpcy4kcz1TLmdldFNlY29uZHMoKSx0aGlzLiRtcz1TLmdldE1pbGxpc2Vjb25kcygpfSxSLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBBfSxSLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1N0cmluZygpIT09bX0sUi5pc1NhbWU9ZnVuY3Rpb24oUyxPKXt2YXIgTj1DKFMpO3JldHVybiB0aGlzLnN0YXJ0T2YoTyk8PU4mJk48PXRoaXMuZW5kT2YoTyl9LFIuaXNBZnRlcj1mdW5jdGlvbihTLE8pe3JldHVybiBDKFMpPHRoaXMuc3RhcnRPZihPKX0sUi5pc0JlZm9yZT1mdW5jdGlvbihTLE8pe3JldHVybiB0aGlzLmVuZE9mKE8pPEMoUyl9LFIuJGc9ZnVuY3Rpb24oUyxPLE4pe3JldHVybiBBLnUoUyk/dGhpc1tPXTp0aGlzLnNldChOLFMpfSxSLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxSLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LFIuc3RhcnRPZj1mdW5jdGlvbihTLE8pe3ZhciBOPXRoaXMsUD0hIUEudShPKXx8TyxGPUEucChTKSxCPW8oZnVuY3Rpb24oZWUsSil7dmFyIEg9QS53KE4uJHU/RGF0ZS5VVEMoTi4keSxKLGVlKTpuZXcgRGF0ZShOLiR5LEosZWUpLE4pO3JldHVybiBQP0g6SC5lbmRPZihsKX0sImwiKSwkPW8oZnVuY3Rpb24oZWUsSil7cmV0dXJuIEEudyhOLnRvRGF0ZSgpW2VlXS5hcHBseShOLnRvRGF0ZSgicyIpLChQP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoSikpLE4pfSwiJCIpLHo9dGhpcy4kVyxXPXRoaXMuJE0saj10aGlzLiRELEs9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpO3N3aXRjaChGKXtjYXNlIGQ6cmV0dXJuIFA/QigxLDApOkIoMzEsMTEpO2Nhc2UgaDpyZXR1cm4gUD9CKDEsVyk6QigwLFcrMSk7Y2FzZSB1OnZhciBpZT10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsUT0oejxpZT96Kzc6eiktaWU7cmV0dXJuIEIoUD9qLVE6aisoNi1RKSxXKTtjYXNlIGw6Y2FzZSBwOnJldHVybiAkKEsrIkhvdXJzIiwwKTtjYXNlIHM6cmV0dXJuICQoSysiTWludXRlcyIsMSk7Y2FzZSBhOnJldHVybiAkKEsrIlNlY29uZHMiLDIpO2Nhc2UgaTpyZXR1cm4gJChLKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LFIuZW5kT2Y9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuc3RhcnRPZihTLCExKX0sUi4kc2V0PWZ1bmN0aW9uKFMsTyl7dmFyIE4sUD1BLnAoUyksRj0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksQj0oTj17fSxOW2xdPUYrIkRhdGUiLE5bcF09RisiRGF0ZSIsTltoXT1GKyJNb250aCIsTltkXT1GKyJGdWxsWWVhciIsTltzXT1GKyJIb3VycyIsTlthXT1GKyJNaW51dGVzIixOW2ldPUYrIlNlY29uZHMiLE5bbl09RisiTWlsbGlzZWNvbmRzIixOKVtQXSwkPVA9PT1sP3RoaXMuJEQrKE8tdGhpcy4kVyk6TztpZihQPT09aHx8UD09PWQpe3ZhciB6PXRoaXMuY2xvbmUoKS5zZXQocCwxKTt6LiRkW0JdKCQpLHouaW5pdCgpLHRoaXMuJGQ9ei5zZXQocCxNYXRoLm1pbih0aGlzLiRELHouZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgQiYmdGhpcy4kZFtCXSgkKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sUi5zZXQ9ZnVuY3Rpb24oUyxPKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoUyxPKX0sUi5nZXQ9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXNbQS5wKFMpXSgpfSxSLmFkZD1mdW5jdGlvbihTLE8pe3ZhciBOLFA9dGhpcztTPU51bWJlcihTKTt2YXIgRj1BLnAoTyksQj1vKGZ1bmN0aW9uKFcpe3ZhciBqPUMoUCk7cmV0dXJuIEEudyhqLmRhdGUoai5kYXRlKCkrTWF0aC5yb3VuZChXKlMpKSxQKX0sInkiKTtpZihGPT09aClyZXR1cm4gdGhpcy5zZXQoaCx0aGlzLiRNK1MpO2lmKEY9PT1kKXJldHVybiB0aGlzLnNldChkLHRoaXMuJHkrUyk7aWYoRj09PWwpcmV0dXJuIEIoMSk7aWYoRj09PXUpcmV0dXJuIEIoNyk7dmFyICQ9KE49e30sTlthXT1lLE5bc109cixOW2ldPXQsTilbRl18fDEsej10aGlzLiRkLmdldFRpbWUoKStTKiQ7cmV0dXJuIEEudyh6LHRoaXMpfSxSLnN1YnRyYWN0PWZ1bmN0aW9uKFMsTyl7cmV0dXJuIHRoaXMuYWRkKC0xKlMsTyl9LFIuZm9ybWF0PWZ1bmN0aW9uKFMpe3ZhciBPPXRoaXMsTj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE4uaW52YWxpZERhdGV8fG07dmFyIFA9U3x8IllZWVktTU0tRERUSEg6bW06c3NaIixGPUEueih0aGlzKSxCPXRoaXMuJEgsJD10aGlzLiRtLHo9dGhpcy4kTSxXPU4ud2Vla2RheXMsaj1OLm1vbnRocyxLPU4ubWVyaWRpZW0saWU9byhmdW5jdGlvbihKLEgscSxaKXtyZXR1cm4gSiYmKEpbSF18fEooTyxQKSl8fHFbSF0uc2xpY2UoMCxaKX0sImgiKSxRPW8oZnVuY3Rpb24oSil7cmV0dXJuIEEucyhCJTEyfHwxMixKLCIwIil9LCJkIiksZWU9S3x8ZnVuY3Rpb24oSixILHEpe3ZhciBaPUo8MTI/IkFNIjoiUE0iO3JldHVybiBxP1oudG9Mb3dlckNhc2UoKTpafTtyZXR1cm4gUC5yZXBsYWNlKHksZnVuY3Rpb24oSixIKXtyZXR1cm4gSHx8ZnVuY3Rpb24ocSl7c3dpdGNoKHEpe2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoTy4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIEEucyhPLiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiB6KzE7Y2FzZSJNTSI6cmV0dXJuIEEucyh6KzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gaWUoTi5tb250aHNTaG9ydCx6LGosMyk7Y2FzZSJNTU1NIjpyZXR1cm4gaWUoaix6KTtjYXNlIkQiOnJldHVybiBPLiREO2Nhc2UiREQiOnJldHVybiBBLnMoTy4kRCwyLCIwIik7Y2FzZSJkIjpyZXR1cm4gU3RyaW5nKE8uJFcpO2Nhc2UiZGQiOnJldHVybiBpZShOLndlZWtkYXlzTWluLE8uJFcsVywyKTtjYXNlImRkZCI6cmV0dXJuIGllKE4ud2Vla2RheXNTaG9ydCxPLiRXLFcsMyk7Y2FzZSJkZGRkIjpyZXR1cm4gV1tPLiRXXTtjYXNlIkgiOnJldHVybiBTdHJpbmcoQik7Y2FzZSJISCI6cmV0dXJuIEEucyhCLDIsIjAiKTtjYXNlImgiOnJldHVybiBRKDEpO2Nhc2UiaGgiOnJldHVybiBRKDIpO2Nhc2UiYSI6cmV0dXJuIGVlKEIsJCwhMCk7Y2FzZSJBIjpyZXR1cm4gZWUoQiwkLCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoJCk7Y2FzZSJtbSI6cmV0dXJuIEEucygkLDIsIjAiKTtjYXNlInMiOnJldHVybiBTdHJpbmcoTy4kcyk7Y2FzZSJzcyI6cmV0dXJuIEEucyhPLiRzLDIsIjAiKTtjYXNlIlNTUyI6cmV0dXJuIEEucyhPLiRtcywzLCIwIik7Y2FzZSJaIjpyZXR1cm4gRn1yZXR1cm4gbnVsbH0oSil8fEYucmVwbGFjZSgiOiIsIiIpfSl9LFIudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LFIuZGlmZj1mdW5jdGlvbihTLE8sTil7dmFyIFAsRj10aGlzLEI9QS5wKE8pLCQ9QyhTKSx6PSgkLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsVz10aGlzLSQsaj1vKGZ1bmN0aW9uKCl7cmV0dXJuIEEubShGLCQpfSwiRCIpO3N3aXRjaChCKXtjYXNlIGQ6UD1qKCkvMTI7YnJlYWs7Y2FzZSBoOlA9aigpO2JyZWFrO2Nhc2UgZjpQPWooKS8zO2JyZWFrO2Nhc2UgdTpQPShXLXopLzYwNDhlNTticmVhaztjYXNlIGw6UD0oVy16KS84NjRlNTticmVhaztjYXNlIHM6UD1XL3I7YnJlYWs7Y2FzZSBhOlA9Vy9lO2JyZWFrO2Nhc2UgaTpQPVcvdDticmVhaztkZWZhdWx0OlA9V31yZXR1cm4gTj9QOkEuYShQKX0sUi5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGgpLiREfSxSLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gX1t0aGlzLiRMXX0sUi5sb2NhbGU9ZnVuY3Rpb24oUyxPKXtpZighUylyZXR1cm4gdGhpcy4kTDt2YXIgTj10aGlzLmNsb25lKCksUD1MKFMsTywhMCk7cmV0dXJuIFAmJihOLiRMPVApLE59LFIuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gQS53KHRoaXMuJGQsdGhpcyl9LFIudG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sUi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LFIudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxSLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sa30oKSxEPUkucHJvdG90eXBlO3JldHVybiBDLnByb3RvdHlwZT1ELFtbIiRtcyIsbl0sWyIkcyIsaV0sWyIkbSIsYV0sWyIkSCIsc10sWyIkVyIsbF0sWyIkTSIsaF0sWyIkeSIsZF0sWyIkRCIscF1dLmZvckVhY2goZnVuY3Rpb24oayl7RFtrWzFdXT1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy4kZyhSLGtbMF0sa1sxXSl9fSksQy5leHRlbmQ9ZnVuY3Rpb24oayxSKXtyZXR1cm4gay4kaXx8KGsoUixJLEMpLGsuJGk9ITApLEN9LEMubG9jYWxlPUwsQy5pc0RheWpzPUUsQy51bml4PWZ1bmN0aW9uKGspe3JldHVybiBDKDFlMyprKX0sQy5lbj1fW3ddLEMuTHM9XyxDLnA9e30sQ30pfSk7dmFyIEVGLGpjLFksTTEsYm8saHQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFRj1rYShBYigpLDEpLGpjPXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFk9e3RyYWNlOm8oKC4uLnQpPT57fSwidHJhY2UiKSxkZWJ1ZzpvKCguLi50KT0+e30sImRlYnVnIiksaW5mbzpvKCguLi50KT0+e30sImluZm8iKSx3YXJuOm8oKC4uLnQpPT57fSwid2FybiIpLGVycm9yOm8oKC4uLnQpPT57fSwiZXJyb3IiKSxmYXRhbDpvKCguLi50KT0+e30sImZhdGFsIil9LE0xPW8oZnVuY3Rpb24odD0iZmF0YWwiKXtsZXQgZT1qYy5mYXRhbDt0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpaW4gamMmJihlPWpjW3RdKTp0eXBlb2YgdD09Im51bWJlciImJihlPXQpLFkudHJhY2U9KCk9Pnt9LFkuZGVidWc9KCk9Pnt9LFkuaW5mbz0oKT0+e30sWS53YXJuPSgpPT57fSxZLmVycm9yPSgpPT57fSxZLmZhdGFsPSgpPT57fSxlPD1qYy5mYXRhbCYmKFkuZmF0YWw9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxibygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszNW0iLGJvKCJGQVRBTCIpKSksZTw9amMuZXJyb3ImJihZLmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsYm8oIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzFtIixibygiRVJST1IiKSkpLGU8PWpjLndhcm4mJihZLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsYm8oIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLGJvKCJXQVJOIikpKSxlPD1qYy5pbmZvJiYoWS5pbmZvPWNvbnNvbGUuaW5mbz9jb25zb2xlLmluZm8uYmluZChjb25zb2xlLGJvKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzRtIixibygiSU5GTyIpKSksZTw9amMuZGVidWcmJihZLmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsYm8oIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMybSIsYm8oIkRFQlVHIikpKSxlPD1qYy50cmFjZSYmKFkudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxibygiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixibygiVFJBQ0UiKSkpfSwic2V0TG9nTGV2ZWwiKSxibz1vKHQ9PmAlYyR7KDAsRUYuZGVmYXVsdCkoKS5mb3JtYXQoInNzLlNTUyIpfSA6ICR7dH0gOiBgLCJmb3JtYXQiKX0pO3ZhciBteGUsWjAsa1MsU0YsX2I9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtteGU9T2JqZWN0LmZyZWV6ZSh7bGVmdDowLHRvcDowLHdpZHRoOjE2LGhlaWdodDoxNn0pLFowPU9iamVjdC5mcmVlemUoe3JvdGF0ZTowLHZGbGlwOiExLGhGbGlwOiExfSksa1M9T2JqZWN0LmZyZWV6ZSh7Li4ubXhlLC4uLlowfSksU0Y9T2JqZWN0LmZyZWV6ZSh7Li4ua1MsYm9keToiIixoaWRkZW46ITF9KX0pO3ZhciBneGUsQ0YsQUY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtfYigpO2d4ZT1PYmplY3QuZnJlZXplKHt3aWR0aDpudWxsLGhlaWdodDpudWxsfSksQ0Y9T2JqZWN0LmZyZWV6ZSh7Li4uZ3hlLC4uLlowfSl9KTt2YXIgTGIsRVMsRGIsX0Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMYj0vXlthLXowLTldKygtW2EtejAtOV0rKSokLyxFUz1vKCh0LGUscixuPSIiKT0+e2xldCBpPXQuc3BsaXQoIjoiKTtpZih0LnNsaWNlKDAsMSk9PT0iQCIpe2lmKGkubGVuZ3RoPDJ8fGkubGVuZ3RoPjMpcmV0dXJuIG51bGw7bj1pLnNoaWZ0KCkuc2xpY2UoMSl9aWYoaS5sZW5ndGg+M3x8IWkubGVuZ3RoKXJldHVybiBudWxsO2lmKGkubGVuZ3RoPjEpe2xldCBsPWkucG9wKCksdT1pLnBvcCgpLGg9e3Byb3ZpZGVyOmkubGVuZ3RoPjA/aVswXTpuLHByZWZpeDp1LG5hbWU6bH07cmV0dXJuIGUmJiFEYihoKT9udWxsOmh9bGV0IGE9aVswXSxzPWEuc3BsaXQoIi0iKTtpZihzLmxlbmd0aD4xKXtsZXQgbD17cHJvdmlkZXI6bixwcmVmaXg6cy5zaGlmdCgpLG5hbWU6cy5qb2luKCItIil9O3JldHVybiBlJiYhRGIobCk/bnVsbDpsfWlmKHImJm49PT0iIil7bGV0IGw9e3Byb3ZpZGVyOm4scHJlZml4OiIiLG5hbWU6YX07cmV0dXJuIGUmJiFEYihsLHIpP251bGw6bH1yZXR1cm4gbnVsbH0sInN0cmluZ1RvSWNvbiIpLERiPW8oKHQsZSk9PnQ/ISEoKHQucHJvdmlkZXI9PT0iInx8dC5wcm92aWRlci5tYXRjaChMYikpJiYoZSYmdC5wcmVmaXg9PT0iInx8dC5wcmVmaXgubWF0Y2goTGIpKSYmdC5uYW1lLm1hdGNoKExiKSk6ITEsInZhbGlkYXRlSWNvbk5hbWUiKX0pO2Z1bmN0aW9uIExGKHQsZSl7bGV0IHI9e307IXQuaEZsaXAhPSFlLmhGbGlwJiYoci5oRmxpcD0hMCksIXQudkZsaXAhPSFlLnZGbGlwJiYoci52RmxpcD0hMCk7bGV0IG49KCh0LnJvdGF0ZXx8MCkrKGUucm90YXRlfHwwKSklNDtyZXR1cm4gbiYmKHIucm90YXRlPW4pLHJ9dmFyIERGPU0oKCk9PnsidXNlIHN0cmljdCI7byhMRiwibWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zIil9KTtmdW5jdGlvbiBTUyh0LGUpe2xldCByPUxGKHQsZSk7Zm9yKGxldCBuIGluIFNGKW4gaW4gWjA/biBpbiB0JiYhKG4gaW4gcikmJihyW25dPVowW25dKTpuIGluIGU/cltuXT1lW25dOm4gaW4gdCYmKHJbbl09dFtuXSk7cmV0dXJuIHJ9dmFyIE5GPU0oKCk9PnsidXNlIHN0cmljdCI7X2IoKTtERigpO28oU1MsIm1lcmdlSWNvbkRhdGEiKX0pO2Z1bmN0aW9uIFJGKHQsZSl7bGV0IHI9dC5pY29ucyxuPXQuYWxpYXNlc3x8T2JqZWN0LmNyZWF0ZShudWxsKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gYShzKXtpZihyW3NdKXJldHVybiBpW3NdPVtdO2lmKCEocyBpbiBpKSl7aVtzXT1udWxsO2xldCBsPW5bc10mJm5bc10ucGFyZW50LHU9bCYmYShsKTt1JiYoaVtzXT1bbF0uY29uY2F0KHUpKX1yZXR1cm4gaVtzXX1yZXR1cm4gbyhhLCJyZXNvbHZlIiksKGV8fE9iamVjdC5rZXlzKHIpLmNvbmNhdChPYmplY3Qua2V5cyhuKSkpLmZvckVhY2goYSksaX12YXIgTUY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFJGLCJnZXRJY29uc1RyZWUiKX0pO2Z1bmN0aW9uIElGKHQsZSxyKXtsZXQgbj10Lmljb25zLGk9dC5hbGlhc2VzfHxPYmplY3QuY3JlYXRlKG51bGwpLGE9e307ZnVuY3Rpb24gcyhsKXthPVNTKG5bbF18fGlbbF0sYSl9cmV0dXJuIG8ocywicGFyc2UiKSxzKGUpLHIuZm9yRWFjaChzKSxTUyh0LGEpfWZ1bmN0aW9uIENTKHQsZSl7aWYodC5pY29uc1tlXSlyZXR1cm4gSUYodCxlLFtdKTtsZXQgcj1SRih0LFtlXSlbZV07cmV0dXJuIHI/SUYodCxlLHIpOm51bGx9dmFyIE9GPU0oKCk9PnsidXNlIHN0cmljdCI7TkYoKTtNRigpO28oSUYsImludGVybmFsR2V0SWNvbkRhdGEiKTtvKENTLCJnZXRJY29uRGF0YSIpfSk7ZnVuY3Rpb24gQVModCxlLHIpe2lmKGU9PT0xKXJldHVybiB0O2lmKHI9cnx8MTAwLHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gTWF0aC5jZWlsKHQqZSpyKS9yO2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdDtsZXQgbj10LnNwbGl0KHl4ZSk7aWYobj09PW51bGx8fCFuLmxlbmd0aClyZXR1cm4gdDtsZXQgaT1bXSxhPW4uc2hpZnQoKSxzPXZ4ZS50ZXN0KGEpO2Zvcig7Oyl7aWYocyl7bGV0IGw9cGFyc2VGbG9hdChhKTtpc05hTihsKT9pLnB1c2goYSk6aS5wdXNoKE1hdGguY2VpbChsKmUqcikvcil9ZWxzZSBpLnB1c2goYSk7aWYoYT1uLnNoaWZ0KCksYT09PXZvaWQgMClyZXR1cm4gaS5qb2luKCIiKTtzPSFzfX12YXIgeXhlLHZ4ZSxQRj1NKCgpPT57InVzZSBzdHJpY3QiO3l4ZT0vKC0/WzAtOS5dKlswLTldK1swLTkuXSopL2csdnhlPS9eLT9bMC05Ll0qWzAtOV0rWzAtOS5dKiQvZztvKEFTLCJjYWxjdWxhdGVTaXplIil9KTtmdW5jdGlvbiB4eGUodCxlPSJkZWZzIil7bGV0IHI9IiIsbj10LmluZGV4T2YoIjwiK2UpO2Zvcig7bj49MDspe2xldCBpPXQuaW5kZXhPZigiPiIsbiksYT10LmluZGV4T2YoIjwvIitlKTtpZihpPT09LTF8fGE9PT0tMSlicmVhaztsZXQgcz10LmluZGV4T2YoIj4iLGEpO2lmKHM9PT0tMSlicmVhaztyKz10LnNsaWNlKGkrMSxhKS50cmltKCksdD10LnNsaWNlKDAsbikudHJpbSgpK3Quc2xpY2UocysxKX1yZXR1cm57ZGVmczpyLGNvbnRlbnQ6dH19ZnVuY3Rpb24gYnhlKHQsZSl7cmV0dXJuIHQ/IjxkZWZzPiIrdCsiPC9kZWZzPiIrZTplfWZ1bmN0aW9uIEJGKHQsZSxyKXtsZXQgbj14eGUodCk7cmV0dXJuIGJ4ZShuLmRlZnMsZStuLmNvbnRlbnQrcil9dmFyIEZGPU0oKCk9PnsidXNlIHN0cmljdCI7byh4eGUsInNwbGl0U1ZHRGVmcyIpO28oYnhlLCJtZXJnZURlZnNBbmRDb250ZW50Iik7byhCRiwid3JhcFNWR0NvbnRlbnQiKX0pO2Z1bmN0aW9uIF9TKHQsZSl7bGV0IHI9ey4uLmtTLC4uLnR9LG49ey4uLkNGLC4uLmV9LGk9e2xlZnQ6ci5sZWZ0LHRvcDpyLnRvcCx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0sYT1yLmJvZHk7W3Isbl0uZm9yRWFjaCh5PT57bGV0IHY9W10seD15LmhGbGlwLGI9eS52RmxpcCx3PXkucm90YXRlO3g/Yj93Kz0yOih2LnB1c2goInRyYW5zbGF0ZSgiKyhpLndpZHRoK2kubGVmdCkudG9TdHJpbmcoKSsiICIrKDAtaS50b3ApLnRvU3RyaW5nKCkrIikiKSx2LnB1c2goInNjYWxlKC0xIDEpIiksaS50b3A9aS5sZWZ0PTApOmImJih2LnB1c2goInRyYW5zbGF0ZSgiKygwLWkubGVmdCkudG9TdHJpbmcoKSsiICIrKGkuaGVpZ2h0K2kudG9wKS50b1N0cmluZygpKyIpIiksdi5wdXNoKCJzY2FsZSgxIC0xKSIpLGkudG9wPWkubGVmdD0wKTtsZXQgXztzd2l0Y2godzwwJiYody09TWF0aC5mbG9vcih3LzQpKjQpLHc9dyU0LHcpe2Nhc2UgMTpfPWkuaGVpZ2h0LzIraS50b3Asdi51bnNoaWZ0KCJyb3RhdGUoOTAgIitfLnRvU3RyaW5nKCkrIiAiK18udG9TdHJpbmcoKSsiKSIpO2JyZWFrO2Nhc2UgMjp2LnVuc2hpZnQoInJvdGF0ZSgxODAgIisoaS53aWR0aC8yK2kubGVmdCkudG9TdHJpbmcoKSsiICIrKGkuaGVpZ2h0LzIraS50b3ApLnRvU3RyaW5nKCkrIikiKTticmVhaztjYXNlIDM6Xz1pLndpZHRoLzIraS5sZWZ0LHYudW5zaGlmdCgicm90YXRlKC05MCAiK18udG9TdHJpbmcoKSsiICIrXy50b1N0cmluZygpKyIpIik7YnJlYWt9dyUyPT09MSYmKGkubGVmdCE9PWkudG9wJiYoXz1pLmxlZnQsaS5sZWZ0PWkudG9wLGkudG9wPV8pLGkud2lkdGghPT1pLmhlaWdodCYmKF89aS53aWR0aCxpLndpZHRoPWkuaGVpZ2h0LGkuaGVpZ2h0PV8pKSx2Lmxlbmd0aCYmKGE9QkYoYSwnPGcgdHJhbnNmb3JtPSInK3Yuam9pbigiICIpKyciPicsIjwvZz4iKSl9KTtsZXQgcz1uLndpZHRoLGw9bi5oZWlnaHQsdT1pLndpZHRoLGg9aS5oZWlnaHQsZixkO3M9PT1udWxsPyhkPWw9PT1udWxsPyIxZW0iOmw9PT0iYXV0byI/aDpsLGY9QVMoZCx1L2gpKTooZj1zPT09ImF1dG8iP3U6cyxkPWw9PT1udWxsP0FTKGYsaC91KTpsPT09ImF1dG8iP2g6bCk7bGV0IHA9e30sbT1vKCh5LHYpPT57d3hlKHYpfHwocFt5XT12LnRvU3RyaW5nKCkpfSwic2V0QXR0ciIpO20oIndpZHRoIixmKSxtKCJoZWlnaHQiLGQpO2xldCBnPVtpLmxlZnQsaS50b3AsdSxoXTtyZXR1cm4gcC52aWV3Qm94PWcuam9pbigiICIpLHthdHRyaWJ1dGVzOnAsdmlld0JveDpnLGJvZHk6YX19dmFyIHd4ZSx6Rj1NKCgpPT57InVzZSBzdHJpY3QiO19iKCk7QUYoKTtQRigpO0ZGKCk7d3hlPW8odD0+dD09PSJ1bnNldCJ8fHQ9PT0idW5kZWZpbmVkInx8dD09PSJub25lIiwiaXNVbnNldEtleXdvcmQiKTtvKF9TLCJpY29uVG9TVkciKX0pO2Z1bmN0aW9uIExTKHQsZT1reGUpe2xldCByPVtdLG47Zm9yKDtuPVR4ZS5leGVjKHQpOylyLnB1c2goblsxXSk7aWYoIXIubGVuZ3RoKXJldHVybiB0O2xldCBpPSJzdWZmaXgiKyhNYXRoLnJhbmRvbSgpKjE2Nzc3MjE2fERhdGUubm93KCkpLnRvU3RyaW5nKDE2KTtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKGEpOmUrKEV4ZSsrKS50b1N0cmluZygpLGw9YS5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpO3Q9dC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbIzsiXSkoJytsKycpKFsiKV18XFwuW2Etel0pJywiZyIpLCIkMSIrcytpKyIkMyIpfSksdD10LnJlcGxhY2UobmV3IFJlZ0V4cChpLCJnIiksIiIpLHR9dmFyIFR4ZSxreGUsRXhlLEdGPU0oKCk9PnsidXNlIHN0cmljdCI7VHhlPS9cc2lkPSIoXFMrKSIvZyxreGU9Ikljb25pZnlJZCIrRGF0ZS5ub3coKS50b1N0cmluZygxNikrKE1hdGgucmFuZG9tKCkqMTY3NzcyMTZ8MCkudG9TdHJpbmcoMTYpLEV4ZT0wO28oTFMsInJlcGxhY2VJRHMiKX0pO2Z1bmN0aW9uIERTKHQsZSl7bGV0IHI9dC5pbmRleE9mKCJ4bGluazoiKT09PS0xPyIiOicgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiJztmb3IobGV0IG4gaW4gZSlyKz0iICIrbisnPSInK2Vbbl0rJyInO3JldHVybic8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyInK3IrIj4iK3QrIjwvc3ZnPiJ9dmFyICRGPU0oKCk9PnsidXNlIHN0cmljdCI7byhEUywiaWNvblRvSFRNTCIpfSk7dmFyIFVGPU5pKChsc3QsVkYpPT57InVzZSBzdHJpY3QiO3ZhciBKMD0xZTMsZXA9SjAqNjAsdHA9ZXAqNjAsRmY9dHAqMjQsU3hlPUZmKjcsQ3hlPUZmKjM2NS4yNTtWRi5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10eXBlb2YgdDtpZihyPT09InN0cmluZyImJnQubGVuZ3RoPjApcmV0dXJuIEF4ZSh0KTtpZihyPT09Im51bWJlciImJmlzRmluaXRlKHQpKXJldHVybiBlLmxvbmc/THhlKHQpOl94ZSh0KTt0aHJvdyBuZXcgRXJyb3IoInZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9IitKU09OLnN0cmluZ2lmeSh0KSl9O2Z1bmN0aW9uIEF4ZSh0KXtpZih0PVN0cmluZyh0KSwhKHQubGVuZ3RoPjEwMCkpe3ZhciBlPS9eKC0/KD86XGQrKT9cLj9cZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyh0KTtpZihlKXt2YXIgcj1wYXJzZUZsb2F0KGVbMV0pLG49KGVbMl18fCJtcyIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKG4pe2Nhc2UieWVhcnMiOmNhc2UieWVhciI6Y2FzZSJ5cnMiOmNhc2UieXIiOmNhc2UieSI6cmV0dXJuIHIqQ3hlO2Nhc2Uid2Vla3MiOmNhc2Uid2VlayI6Y2FzZSJ3IjpyZXR1cm4gcipTeGU7Y2FzZSJkYXlzIjpjYXNlImRheSI6Y2FzZSJkIjpyZXR1cm4gcipGZjtjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKnRwO2Nhc2UibWludXRlcyI6Y2FzZSJtaW51dGUiOmNhc2UibWlucyI6Y2FzZSJtaW4iOmNhc2UibSI6cmV0dXJuIHIqZXA7Y2FzZSJzZWNvbmRzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNzIjpjYXNlInNlYyI6Y2FzZSJzIjpyZXR1cm4gcipKMDtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19fX1vKEF4ZSwicGFyc2UiKTtmdW5jdGlvbiBfeGUodCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PUZmP01hdGgucm91bmQodC9GZikrImQiOmU+PXRwP01hdGgucm91bmQodC90cCkrImgiOmU+PWVwP01hdGgucm91bmQodC9lcCkrIm0iOmU+PUowP01hdGgucm91bmQodC9KMCkrInMiOnQrIm1zIn1vKF94ZSwiZm10U2hvcnQiKTtmdW5jdGlvbiBMeGUodCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PUZmP05iKHQsZSxGZiwiZGF5Iik6ZT49dHA/TmIodCxlLHRwLCJob3VyIik6ZT49ZXA/TmIodCxlLGVwLCJtaW51dGUiKTplPj1KMD9OYih0LGUsSjAsInNlY29uZCIpOnQrIiBtcyJ9byhMeGUsImZtdExvbmciKTtmdW5jdGlvbiBOYih0LGUscixuKXt2YXIgaT1lPj1yKjEuNTtyZXR1cm4gTWF0aC5yb3VuZCh0L3IpKyIgIituKyhpPyJzIjoiIil9byhOYiwicGx1cmFsIil9KTt2YXIgV0Y9TmkoKHVzdCxIRik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRHhlKHQpe3IuZGVidWc9cixyLmRlZmF1bHQ9cixyLmNvZXJjZT11LHIuZGlzYWJsZT1hLHIuZW5hYmxlPWksci5lbmFibGVkPXMsci5odW1hbml6ZT1VRigpLHIuZGVzdHJveT1oLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZj0+e3JbZl09dFtmXX0pLHIubmFtZXM9W10sci5za2lwcz1bXSxyLmZvcm1hdHRlcnM9e307ZnVuY3Rpb24gZShmKXtsZXQgZD0wO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWQ9KGQ8PDUpLWQrZi5jaGFyQ29kZUF0KHApLGR8PTA7cmV0dXJuIHIuY29sb3JzW01hdGguYWJzKGQpJXIuY29sb3JzLmxlbmd0aF19byhlLCJzZWxlY3RDb2xvciIpLHIuc2VsZWN0Q29sb3I9ZTtmdW5jdGlvbiByKGYpe2xldCBkLHA9bnVsbCxtLGc7ZnVuY3Rpb24geSguLi52KXtpZigheS5lbmFibGVkKXJldHVybjtsZXQgeD15LGI9TnVtYmVyKG5ldyBEYXRlKSx3PWItKGR8fGIpO3guZGlmZj13LHgucHJldj1kLHguY3Vycj1iLGQ9Yix2WzBdPXIuY29lcmNlKHZbMF0pLHR5cGVvZiB2WzBdIT0ic3RyaW5nIiYmdi51bnNoaWZ0KCIlTyIpO2xldCBfPTA7dlswXT12WzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLChFLEwpPT57aWYoRT09PSIlJSIpcmV0dXJuIiUiO18rKztsZXQgQz1yLmZvcm1hdHRlcnNbTF07aWYodHlwZW9mIEM9PSJmdW5jdGlvbiIpe2xldCBBPXZbX107RT1DLmNhbGwoeCxBKSx2LnNwbGljZShfLDEpLF8tLX1yZXR1cm4gRX0pLHIuZm9ybWF0QXJncy5jYWxsKHgsdiksKHgubG9nfHxyLmxvZykuYXBwbHkoeCx2KX1yZXR1cm4gbyh5LCJkZWJ1ZyIpLHkubmFtZXNwYWNlPWYseS51c2VDb2xvcnM9ci51c2VDb2xvcnMoKSx5LmNvbG9yPXIuc2VsZWN0Q29sb3IoZikseS5leHRlbmQ9bix5LmRlc3Ryb3k9ci5kZXN0cm95LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJlbmFibGVkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0Om8oKCk9PnAhPT1udWxsP3A6KG0hPT1yLm5hbWVzcGFjZXMmJihtPXIubmFtZXNwYWNlcyxnPXIuZW5hYmxlZChmKSksZyksImdldCIpLHNldDpvKHY9PntwPXZ9LCJzZXQiKX0pLHR5cGVvZiByLmluaXQ9PSJmdW5jdGlvbiImJnIuaW5pdCh5KSx5fW8ociwiY3JlYXRlRGVidWciKTtmdW5jdGlvbiBuKGYsZCl7bGV0IHA9cih0aGlzLm5hbWVzcGFjZSsodHlwZW9mIGQ+InUiPyI6IjpkKStmKTtyZXR1cm4gcC5sb2c9dGhpcy5sb2cscH1vKG4sImV4dGVuZCIpO2Z1bmN0aW9uIGkoZil7ci5zYXZlKGYpLHIubmFtZXNwYWNlcz1mLHIubmFtZXM9W10sci5za2lwcz1bXTtsZXQgZCxwPSh0eXBlb2YgZj09InN0cmluZyI/ZjoiIikuc3BsaXQoL1tccyxdKy8pLG09cC5sZW5ndGg7Zm9yKGQ9MDtkPG07ZCsrKXBbZF0mJihmPXBbZF0ucmVwbGFjZSgvXCovZywiLio/IiksZlswXT09PSItIj9yLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIrZi5zbGljZSgxKSsiJCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgiXiIrZisiJCIpKSl9byhpLCJlbmFibGUiKTtmdW5jdGlvbiBhKCl7bGV0IGY9Wy4uLnIubmFtZXMubWFwKGwpLC4uLnIuc2tpcHMubWFwKGwpLm1hcChkPT4iLSIrZCldLmpvaW4oIiwiKTtyZXR1cm4gci5lbmFibGUoIiIpLGZ9byhhLCJkaXNhYmxlIik7ZnVuY3Rpb24gcyhmKXtpZihmW2YubGVuZ3RoLTFdPT09IioiKXJldHVybiEwO2xldCBkLHA7Zm9yKGQ9MCxwPXIuc2tpcHMubGVuZ3RoO2Q8cDtkKyspaWYoci5za2lwc1tkXS50ZXN0KGYpKXJldHVybiExO2ZvcihkPTAscD1yLm5hbWVzLmxlbmd0aDtkPHA7ZCsrKWlmKHIubmFtZXNbZF0udGVzdChmKSlyZXR1cm4hMDtyZXR1cm4hMX1vKHMsImVuYWJsZWQiKTtmdW5jdGlvbiBsKGYpe3JldHVybiBmLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsZi50b1N0cmluZygpLmxlbmd0aC0yKS5yZXBsYWNlKC9cLlwqXD8kLywiKiIpfW8obCwidG9OYW1lc3BhY2UiKTtmdW5jdGlvbiB1KGYpe3JldHVybiBmIGluc3RhbmNlb2YgRXJyb3I/Zi5zdGFja3x8Zi5tZXNzYWdlOmZ9byh1LCJjb2VyY2UiKTtmdW5jdGlvbiBoKCl7Y29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIil9cmV0dXJuIG8oaCwiZGVzdHJveSIpLHIuZW5hYmxlKHIubG9hZCgpKSxyfW8oRHhlLCJzZXR1cCIpO0hGLmV4cG9ydHM9RHhlfSk7dmFyIFlGPU5pKChVcyxSYik9PnsidXNlIHN0cmljdCI7VXMuZm9ybWF0QXJncz1SeGU7VXMuc2F2ZT1NeGU7VXMubG9hZD1JeGU7VXMudXNlQ29sb3JzPU54ZTtVcy5zdG9yYWdlPU94ZSgpO1VzLmRlc3Ryb3k9KCgpPT57bGV0IHQ9ITE7cmV0dXJuKCk9Pnt0fHwodD0hMCxjb25zb2xlLndhcm4oIkluc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4iKSl9fSkoKTtVcy5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl07ZnVuY3Rpb24gTnhlKCl7aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5wcm9jZXNzJiYod2luZG93LnByb2Nlc3MudHlwZT09PSJyZW5kZXJlciJ8fHdpbmRvdy5wcm9jZXNzLl9fbndqcykpcmV0dXJuITA7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcLyhcZCspLykpcmV0dXJuITE7bGV0IHQ7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlJiYod2luZG93LmNvbnNvbGUuZmlyZWJ1Z3x8d2luZG93LmNvbnNvbGUuZXhjZXB0aW9uJiZ3aW5kb3cuY29uc29sZS50YWJsZSl8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiYodD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcLyhcZCspLykpJiZwYXJzZUludCh0WzFdLDEwKT49MzF8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XC8oXGQrKS8pfW8oTnhlLCJ1c2VDb2xvcnMiKTtmdW5jdGlvbiBSeGUodCl7aWYodFswXT0odGhpcy51c2VDb2xvcnM/IiVjIjoiIikrdGhpcy5uYW1lc3BhY2UrKHRoaXMudXNlQ29sb3JzPyIgJWMiOiIgIikrdFswXSsodGhpcy51c2VDb2xvcnM/IiVjICI6IiAiKSsiKyIrUmIuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpLCF0aGlzLnVzZUNvbG9ycylyZXR1cm47bGV0IGU9ImNvbG9yOiAiK3RoaXMuY29sb3I7dC5zcGxpY2UoMSwwLGUsImNvbG9yOiBpbmhlcml0Iik7bGV0IHI9MCxuPTA7dFswXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csaT0+e2khPT0iJSUiJiYocisrLGk9PT0iJWMiJiYobj1yKSl9KSx0LnNwbGljZShuLDAsZSl9byhSeGUsImZvcm1hdEFyZ3MiKTtVcy5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIE14ZSh0KXt0cnl7dD9Vcy5zdG9yYWdlLnNldEl0ZW0oImRlYnVnIix0KTpVcy5zdG9yYWdlLnJlbW92ZUl0ZW0oImRlYnVnIil9Y2F0Y2h7fX1vKE14ZSwic2F2ZSIpO2Z1bmN0aW9uIEl4ZSgpe2xldCB0O3RyeXt0PVVzLnN0b3JhZ2UuZ2V0SXRlbSgiZGVidWciKX1jYXRjaHt9cmV0dXJuIXQmJnR5cGVvZiBwcm9jZXNzPCJ1IiYmImVudiJpbiBwcm9jZXNzJiYodD1wcm9jZXNzLmVudi5ERUJVRyksdH1vKEl4ZSwibG9hZCIpO2Z1bmN0aW9uIE94ZSgpe3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlfWNhdGNoe319byhPeGUsImxvY2Fsc3RvcmFnZSIpO1JiLmV4cG9ydHM9V0YoKShVcyk7dmFye2Zvcm1hdHRlcnM6UHhlfT1SYi5leHBvcnRzO1B4ZS5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2goZSl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK2UubWVzc2FnZX19fSk7dmFyIGRzdCxxRj1NKCgpPT57InVzZSBzdHJpY3QiO19GKCk7T0YoKTt6RigpO0dGKCk7JEYoKTtkc3Q9a2EoWUYoKSwxKX0pO3ZhciBSUyxOUyxYRixNYixCeGUsd28sS2M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO3FGKCk7UlM9e2JvZHk6JzxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjE2IDY0LjY3KSIgc3R5bGU9ImZpbGw6ICNmZmY7IGZvbnQtZmFtaWx5OiBBcmlhbE1ULCBBcmlhbDsgZm9udC1zaXplOiA2Ny43NXB4OyI+PHRzcGFuIHg9IjAiIHk9IjAiPj88L3RzcGFuPjwvdGV4dD48L2c+JyxoZWlnaHQ6ODAsd2lkdGg6ODB9LE5TPW5ldyBNYXAsWEY9bmV3IE1hcCxNYj1vKHQ9Pntmb3IobGV0IGUgb2YgdCl7aWYoIWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBhICJuYW1lIiBwcm9wZXJ0eSB3aXRoIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuJyk7aWYoWS5kZWJ1ZygiUmVnaXN0ZXJpbmcgaWNvbiBwYWNrOiIsZS5uYW1lKSwibG9hZGVyImluIGUpWEYuc2V0KGUubmFtZSxlLmxvYWRlcik7ZWxzZSBpZigiaWNvbnMiaW4gZSlOUy5zZXQoZS5uYW1lLGUuaWNvbnMpO2Vsc2UgdGhyb3cgWS5lcnJvcigiSW52YWxpZCBpY29uIGxvYWRlcjoiLGUpLG5ldyBFcnJvcignSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGVpdGhlciAiaWNvbnMiIG9yICJsb2FkZXIiIHByb3BlcnR5LicpfX0sInJlZ2lzdGVySWNvblBhY2tzIiksQnhlPW8oYXN5bmModCxlKT0+e2xldCByPUVTKHQsITAsZSE9PXZvaWQgMCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogJHt0fWApO2xldCBuPXIucHJlZml4fHxlO2lmKCFuKXRocm93IG5ldyBFcnJvcihgSWNvbiBuYW1lIG11c3QgY29udGFpbiBhIHByZWZpeDogJHt0fWApO2xldCBpPU5TLmdldChuKTtpZighaSl7bGV0IHM9WEYuZ2V0KG4pO2lmKCFzKXRocm93IG5ldyBFcnJvcihgSWNvbiBzZXQgbm90IGZvdW5kOiAke3IucHJlZml4fWApO3RyeXtpPXsuLi5hd2FpdCBzKCkscHJlZml4Om59LE5TLnNldChuLGkpfWNhdGNoKGwpe3Rocm93IFkuZXJyb3IobCksbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBpY29uIHNldDogJHtyLnByZWZpeH1gKX19bGV0IGE9Q1MoaSxyLm5hbWUpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSWNvbiBub3QgZm91bmQ6ICR7dH1gKTtyZXR1cm4gYX0sImdldFJlZ2lzdGVyZWRJY29uRGF0YSIpLHdvPW8oYXN5bmModCxlKT0+e2xldCByO3RyeXtyPWF3YWl0IEJ4ZSh0LGU/LmZhbGxiYWNrUHJlZml4KX1jYXRjaChhKXtZLmVycm9yKGEpLHI9UlN9bGV0IG49X1MocixlKTtyZXR1cm4gRFMoTFMobi5ib2R5KSxuLmF0dHJpYnV0ZXMpfSwiZ2V0SWNvblNWRyIpfSk7ZnVuY3Rpb24gSWIodCl7Zm9yKHZhciBlPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dmFyIG49QXJyYXkuZnJvbSh0eXBlb2YgdD09InN0cmluZyI/W3RdOnQpO25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5yZXBsYWNlKC9ccj9cbihbXHQgXSopJC8sIiIpO3ZhciBpPW4ucmVkdWNlKGZ1bmN0aW9uKGwsdSl7dmFyIGg9dS5tYXRjaCgvXG4oW1x0IF0rfCg/IVxzKS4pL2cpO3JldHVybiBoP2wuY29uY2F0KGgubWFwKGZ1bmN0aW9uKGYpe3ZhciBkLHA7cmV0dXJuKHA9KGQ9Zi5tYXRjaCgvW1x0IF0vZykpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC5sZW5ndGgpIT09bnVsbCYmcCE9PXZvaWQgMD9wOjB9KSk6bH0sW10pO2lmKGkubGVuZ3RoKXt2YXIgYT1uZXcgUmVnRXhwKGAKWwkgXXtgK01hdGgubWluLmFwcGx5KE1hdGgsaSkrIn0iLCJnIik7bj1uLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKGEsYApgKX0pfW5bMF09blswXS5yZXBsYWNlKC9eXHI/XG4vLCIiKTt2YXIgcz1uWzBdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obCx1KXt2YXIgaD1zLm1hdGNoKC8oPzpefFxuKSggKikkLyksZj1oP2hbMV06IiIsZD1sO3R5cGVvZiBsPT0ic3RyaW5nIiYmbC5pbmNsdWRlcyhgCmApJiYoZD1TdHJpbmcobCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24ocCxtKXtyZXR1cm4gbT09PTA/cDoiIitmK3B9KS5qb2luKGAKYCkpLHMrPWQrblt1KzFdfSksc312YXIgTVM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEliLCJkZWRlbnQiKX0pO3ZhciBPYix6ZixqRixQYj1NKCgpPT57InVzZSBzdHJpY3QiO09iPS9eLXszfVxzKltcblxyXSguKj8pW1xuXHJdLXszfVxzKltcblxyXSsvcyx6Zj0vJXsyfXtccyooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksakY9L1xzKiUlLipcbi9nbX0pO3ZhciBycCxJUz1NKCgpPT57InVzZSBzdHJpY3QiO3JwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVW5rbm93bkRpYWdyYW1FcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fX0pO3ZhciBHZixucCxCYixPUyxLRiwkZj1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7UGIoKTtJUygpO0dmPXt9LG5wPW8oZnVuY3Rpb24odCxlKXt0PXQucmVwbGFjZShPYiwiIikucmVwbGFjZSh6ZiwiIikucmVwbGFjZShqRixgCmApO2ZvcihsZXRbcix7ZGV0ZWN0b3I6bn1db2YgT2JqZWN0LmVudHJpZXMoR2YpKWlmKG4odCxlKSlyZXR1cm4gcjt0aHJvdyBuZXcgcnAoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke3R9YCl9LCJkZXRlY3RUeXBlIiksQmI9bygoLi4udCk9Pntmb3IobGV0e2lkOmUsZGV0ZWN0b3I6cixsb2FkZXI6bn1vZiB0KU9TKGUscixuKX0sInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zIiksT1M9bygodCxlLHIpPT57R2ZbdF0mJlkud2FybihgRGV0ZWN0b3Igd2l0aCBrZXkgJHt0fSBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRpbmcuYCksR2ZbdF09e2RldGVjdG9yOmUsbG9hZGVyOnJ9LFkuZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7dH0gYWRkZWQke3I/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LCJhZGREZXRlY3RvciIpLEtGPW8odD0+R2ZbdF0ubG9hZGVyLCJnZXREaWFncmFtTG9hZGVyIil9KTt2YXIgSTEsUUYsUFM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJMT1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oSGUseGUsWCxmZSl7Zm9yKFg9WHx8e30sZmU9SGUubGVuZ3RoO2ZlLS07WFtIZVtmZV1dPXhlKTtyZXR1cm4gWH0sIm8iKSxlPVsxLDI0XSxyPVsxLDI1XSxuPVsxLDI2XSxpPVsxLDI3XSxhPVsxLDI4XSxzPVsxLDYzXSxsPVsxLDY0XSx1PVsxLDY1XSxoPVsxLDY2XSxmPVsxLDY3XSxkPVsxLDY4XSxwPVsxLDY5XSxtPVsxLDI5XSxnPVsxLDMwXSx5PVsxLDMxXSx2PVsxLDMyXSx4PVsxLDMzXSxiPVsxLDM0XSx3PVsxLDM1XSxfPVsxLDM2XSxUPVsxLDM3XSxFPVsxLDM4XSxMPVsxLDM5XSxDPVsxLDQwXSxBPVsxLDQxXSxJPVsxLDQyXSxEPVsxLDQzXSxrPVsxLDQ0XSxSPVsxLDQ1XSxTPVsxLDQ2XSxPPVsxLDQ3XSxOPVsxLDQ4XSxQPVsxLDUwXSxGPVsxLDUxXSxCPVsxLDUyXSwkPVsxLDUzXSx6PVsxLDU0XSxXPVsxLDU1XSxqPVsxLDU2XSxLPVsxLDU3XSxpZT1bMSw1OF0sUT1bMSw1OV0sZWU9WzEsNjBdLEo9WzE0LDQyXSxIPVsxNCwzNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0scT1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLFo9WzEsODJdLGFlPVsxLDgzXSx1ZT1bMSw4NF0sY2U9WzEsODVdLHRlPVsxMiwxNCw0Ml0sRGU9WzEyLDE0LDMzLDQyXSxvZT1bMTIsMTQsMzMsNDIsNzYsNzcsNzksODBdLGtlPVsxMiwzM10sRmU9WzM0LDM2LDM3LDM4LDM5LDQwLDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxCZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHhlLFgsZmUsaGUsZ2UsbmUseWUpe3ZhciBVPW5lLmxlbmd0aC0xO3N3aXRjaChnZSl7Y2FzZSAzOmhlLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDQ6aGUuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTpoZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2OmhlLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmhlLnNldEM0VHlwZShuZVtVLTNdKTticmVhaztjYXNlIDE5OmhlLnNldFRpdGxlKG5lW1VdLnN1YnN0cmluZyg2KSksdGhpcy4kPW5lW1VdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOmhlLnNldEFjY0Rlc2NyaXB0aW9uKG5lW1VdLnN1YnN0cmluZygxNSkpLHRoaXMuJD1uZVtVXS5zdWJzdHJpbmcoMTUpO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPW5lW1VdLnRyaW0oKSxoZS5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp0aGlzLiQ9bmVbVV0udHJpbSgpLGhlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpuZVtVXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksaGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMjk6bmVbVV0uc3BsaWNlKDIsMCwiU1lTVEVNIiksaGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzA6aGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzE6bmVbVV0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIiksaGUuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDMyOmhlLmFkZERlcGxveW1lbnROb2RlKCJub2RlIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzM6aGUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzQ6aGUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVSIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzU6aGUucG9wQm91bmRhcnlQYXJzZVN0YWNrKCk7YnJlYWs7Y2FzZSAzOTpoZS5hZGRQZXJzb25PclN5c3RlbSgicGVyc29uIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDA6aGUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQxOmhlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW0iLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0MjpoZS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX2RiIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDM6aGUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQ0OmhlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW0iLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0NTpoZS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX2RiIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDY6aGUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQ3OmhlLmFkZENvbnRhaW5lcigiY29udGFpbmVyIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDg6aGUuYWRkQ29udGFpbmVyKCJjb250YWluZXJfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0OTpoZS5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDUwOmhlLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTE6aGUuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1MjpoZS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDUzOmhlLmFkZENvbXBvbmVudCgiY29tcG9uZW50IiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTQ6aGUuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1NTpoZS5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDU2OmhlLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50IiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTc6aGUuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1ODpoZS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDYwOmhlLmFkZFJlbCgicmVsIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjE6aGUuYWRkUmVsKCJiaXJlbCIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDYyOmhlLmFkZFJlbCgicmVsX3UiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2MzpoZS5hZGRSZWwoInJlbF9kIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjQ6aGUuYWRkUmVsKCJyZWxfbCIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDY1OmhlLmFkZFJlbCgicmVsX3IiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2NjpoZS5hZGRSZWwoInJlbF9iIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjc6bmVbVV0uc3BsaWNlKDAsMSksaGUuYWRkUmVsKCJyZWwiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2ODpoZS51cGRhdGVFbFN0eWxlKCJ1cGRhdGVfZWxfc3R5bGUiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2OTpoZS51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDcwOmhlLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9W25lW1VdXTticmVhaztjYXNlIDcyOm5lW1VdLnVuc2hpZnQobmVbVS0xXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9bmVbVV0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IFRlPXt9O1RlW25lW1UtMV0udHJpbSgpXT1uZVtVXS50cmltKCksdGhpcy4kPVRlO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw3OlsxLDZdLDg6WzEsN10sOTpbMSw4XSwxMDo0LDExOlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMV0sMTc6WzEsMTJdLDE4OlsxLDEzXX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDddfSx7MTpbMiwzXX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezEyOlsxLDE0XX0sezEyOlsxLDE1XX0sezEyOlsxLDE2XX0sezEyOlsxLDE3XX0sezEyOlsxLDE4XX0sezEzOjE5LDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpDLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpTLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzokLDY4OnosNjk6Vyw3MDpqLDcxOkssNzI6aWUsNzM6USw3NDplZX0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpDLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpTLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzokLDY4OnosNjk6Vyw3MDpqLDcxOkssNzI6aWUsNzM6USw3NDplZX0sezEzOjcxLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpDLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpTLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzokLDY4OnosNjk6Vyw3MDpqLDcxOkssNzI6aWUsNzM6USw3NDplZX0sezEzOjcyLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpDLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpTLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzokLDY4OnosNjk6Vyw3MDpqLDcxOkssNzI6aWUsNzM6USw3NDplZX0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpDLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpTLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzokLDY4OnosNjk6Vyw3MDpqLDcxOkssNzI6aWUsNzM6USw3NDplZX0sezE0OlsxLDc0XX0sdChKLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOl8sNTI6VCw1MzpFLDU0OkwsNTU6Qyw1NjpBLDU3OkksNTg6RCw1OTprLDYwOlIsNjE6Uyw2MjpPLDYzOk4sNjQ6UCw2NTpGLDY2OkIsNjc6JCw2ODp6LDY5OlcsNzA6aiw3MTpLLDcyOmllLDczOlEsNzQ6ZWV9KSx0KEosWzIsMTRdKSx0KEgsWzIsMTZdLHsxMjpbMSw3Nl19KSx0KEosWzIsMzZdLHsxMjpbMSw3N119KSx0KHEsWzIsMTldKSx0KHEsWzIsMjBdKSx7MjU6WzEsNzhdfSx7Mjc6WzEsNzldfSx0KHEsWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojg2LDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo4Nyw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6ODgsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojg5LDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5MCw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTEsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjkyLDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5Myw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTQsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojk1LDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5Niw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTcsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojk4LDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5OSw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTAwLDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDEsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwMiw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTAzLDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDQsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sdCh0ZSxbMiw1OV0pLHszNToxMDUsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwNiw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTA3LDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDgsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwOSw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTEwLDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMTEsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjExMiw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTEzLDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMTQsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjExNSw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDM6MjMsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6dyw1MTpfLDUyOlQsNTM6RSw1NDpMLDU1OkMsNTY6QSw1NzpJLDU4OkQsNTk6ayw2MDpSLDYxOlMsNjI6Tyw2MzpOLDY0OlAsNjU6Riw2NjpCLDY3OiQsNjg6eiw2OTpXLDcwOmosNzE6Syw3MjppZSw3MzpRLDc0OmVlfSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMjAsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEyMSw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTIyLDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMjMsNzU6ODEsNzY6Wiw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEyNCw3NTo4MSw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTI1LDc1OjgxLDc2OlosNzc6YWUsNzk6dWUsODA6Y2V9LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0sdChKLFsyLDE1XSksdChILFsyLDE3XSx7MjE6MjIsMTk6MTMwLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YX0pLHQoSixbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmEsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOl8sNTI6VCw1MzpFLDU0OkwsNTU6Qyw1NjpBLDU3OkksNTg6RCw1OTprLDYwOlIsNjE6Uyw2MjpPLDYzOk4sNjQ6UCw2NTpGLDY2OkIsNjc6JCw2ODp6LDY5OlcsNzA6aiw3MTpLLDcyOmllLDczOlEsNzQ6ZWV9KSx0KHEsWzIsMjFdKSx0KHEsWzIsMjJdKSx0KHRlLFsyLDM5XSksdChEZSxbMiw3MV0sezc1OjgxLDM1OjEzMiw3NjpaLDc3OmFlLDc5OnVlLDgwOmNlfSksdChvZSxbMiw3M10pLHs3ODpbMSwxMzNdfSx0KG9lLFsyLDc1XSksdChvZSxbMiw3Nl0pLHQodGUsWzIsNDBdKSx0KHRlLFsyLDQxXSksdCh0ZSxbMiw0Ml0pLHQodGUsWzIsNDNdKSx0KHRlLFsyLDQ0XSksdCh0ZSxbMiw0NV0pLHQodGUsWzIsNDZdKSx0KHRlLFsyLDQ3XSksdCh0ZSxbMiw0OF0pLHQodGUsWzIsNDldKSx0KHRlLFsyLDUwXSksdCh0ZSxbMiw1MV0pLHQodGUsWzIsNTJdKSx0KHRlLFsyLDUzXSksdCh0ZSxbMiw1NF0pLHQodGUsWzIsNTVdKSx0KHRlLFsyLDU2XSksdCh0ZSxbMiw1N10pLHQodGUsWzIsNThdKSx0KHRlLFsyLDYwXSksdCh0ZSxbMiw2MV0pLHQodGUsWzIsNjJdKSx0KHRlLFsyLDYzXSksdCh0ZSxbMiw2NF0pLHQodGUsWzIsNjVdKSx0KHRlLFsyLDY2XSksdCh0ZSxbMiw2N10pLHQodGUsWzIsNjhdKSx0KHRlLFsyLDY5XSksdCh0ZSxbMiw3MF0pLHszMToxMzQsNDI6WzEsMTM1XX0sezEyOlsxLDEzNl19LHszMzpbMSwxMzddfSx0KGtlLFsyLDI4XSksdChrZSxbMiwyOV0pLHQoa2UsWzIsMzBdKSx0KGtlLFsyLDMxXSksdChrZSxbMiwzMl0pLHQoa2UsWzIsMzNdKSx0KGtlLFsyLDM0XSksezE6WzIsOV19LHsxOlsyLDEwXX0sezE6WzIsMTFdfSx7MTpbMiwxMl19LHQoSCxbMiwxOF0pLHQoSixbMiwzOF0pLHQoRGUsWzIsNzJdKSx0KG9lLFsyLDc0XSksdCh0ZSxbMiwyNF0pLHQodGUsWzIsMzVdKSx0KEZlLFsyLDI1XSksdChGZSxbMiwyNl0sezEyOlsxLDEzOF19KSx0KEZlLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiw3XSw1OlsyLDNdLDY6WzIsNF0sNzpbMiw1XSw4OlsyLDZdLDc0OlsyLDhdLDEyNjpbMiw5XSwxMjc6WzIsMTBdLDEyODpbMiwxMV0sMTI5OlsyLDEyXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHhlLFgpe2lmKFgucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh4ZSk7ZWxzZXt2YXIgZmU9bmV3IEVycm9yKHhlKTt0aHJvdyBmZS5oYXNoPVgsZmV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oeGUpe3ZhciBYPXRoaXMsZmU9WzBdLGhlPVtdLGdlPVtudWxsXSxuZT1bXSx5ZT10aGlzLnRhYmxlLFU9IiIsVGU9MCxzZT0wLEVlPTAsQWU9MixQZT0xLE1lPW5lLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG1lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksV2U9e3l5Ont9fTtmb3IodmFyIFJlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksUmUpJiYoV2UueXlbUmVdPXRoaXMueXlbUmVdKTttZS5zZXRJbnB1dCh4ZSxXZS55eSksV2UueXkubGV4ZXI9bWUsV2UueXkucGFyc2VyPXRoaXMsdHlwZW9mIG1lLnl5bGxvYz4idSImJihtZS55eWxsb2M9e30pO3ZhciB0dD1tZS55eWxsb2M7bmUucHVzaCh0dCk7dmFyIGd0PW1lLm9wdGlvbnMmJm1lLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBXZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1XZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBFdCh6dCl7ZmUubGVuZ3RoPWZlLmxlbmd0aC0yKnp0LGdlLmxlbmd0aD1nZS5sZW5ndGgtenQsbmUubGVuZ3RoPW5lLmxlbmd0aC16dH1vKEV0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIHZ0KCl7dmFyIHp0O3JldHVybiB6dD1oZS5wb3AoKXx8bWUubGV4KCl8fFBlLHR5cGVvZiB6dCE9Im51bWJlciImJih6dCBpbnN0YW5jZW9mIEFycmF5JiYoaGU9enQsenQ9aGUucG9wKCkpLHp0PVguc3ltYm9sc19benRdfHx6dCksenR9byh2dCwibGV4Iik7Zm9yKHZhciBZZSxUdCwkZSxydCxmdCxrdCxlcj17fSxkdCxYZSxjdCxMdDs7KXtpZigkZT1mZVtmZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1skZV0/cnQ9dGhpcy5kZWZhdWx0QWN0aW9uc1skZV06KChZZT09PW51bGx8fHR5cGVvZiBZZT4idSIpJiYoWWU9dnQoKSkscnQ9eWVbJGVdJiZ5ZVskZV1bWWVdKSx0eXBlb2YgcnQ+InUifHwhcnQubGVuZ3RofHwhcnRbMF0pe3ZhciBSdD0iIjtMdD1bXTtmb3IoZHQgaW4geWVbJGVdKXRoaXMudGVybWluYWxzX1tkdF0mJmR0PkFlJiZMdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZHRdKyInIik7bWUuc2hvd1Bvc2l0aW9uP1J0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFRlKzEpK2A6CmArbWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtMdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1llXXx8WWUpKyInIjpSdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhUZSsxKSsiOiBVbmV4cGVjdGVkICIrKFllPT1QZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tZZV18fFllKSsiJyIpLHRoaXMucGFyc2VFcnJvcihSdCx7dGV4dDptZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWWVdfHxZZSxsaW5lOm1lLnl5bGluZW5vLGxvYzp0dCxleHBlY3RlZDpMdH0pfWlmKHJ0WzBdaW5zdGFuY2VvZiBBcnJheSYmcnQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIiskZSsiLCB0b2tlbjogIitZZSk7c3dpdGNoKHJ0WzBdKXtjYXNlIDE6ZmUucHVzaChZZSksZ2UucHVzaChtZS55eXRleHQpLG5lLnB1c2gobWUueXlsbG9jKSxmZS5wdXNoKHJ0WzFdKSxZZT1udWxsLFR0PyhZZT1UdCxUdD1udWxsKTooc2U9bWUueXlsZW5nLFU9bWUueXl0ZXh0LFRlPW1lLnl5bGluZW5vLHR0PW1lLnl5bGxvYyxFZT4wJiZFZS0tKTticmVhaztjYXNlIDI6aWYoWGU9dGhpcy5wcm9kdWN0aW9uc19bcnRbMV1dWzFdLGVyLiQ9Z2VbZ2UubGVuZ3RoLVhlXSxlci5fJD17Zmlyc3RfbGluZTpuZVtuZS5sZW5ndGgtKFhlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bmVbbmUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bmVbbmUubGVuZ3RoLShYZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuZVtuZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGd0JiYoZXIuXyQucmFuZ2U9W25lW25lLmxlbmd0aC0oWGV8fDEpXS5yYW5nZVswXSxuZVtuZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxrdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoZXIsW1Usc2UsVGUsV2UueXkscnRbMV0sZ2UsbmVdLmNvbmNhdChNZSkpLHR5cGVvZiBrdDwidSIpcmV0dXJuIGt0O1hlJiYoZmU9ZmUuc2xpY2UoMCwtMSpYZSoyKSxnZT1nZS5zbGljZSgwLC0xKlhlKSxuZT1uZS5zbGljZSgwLC0xKlhlKSksZmUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tydFsxXV1bMF0pLGdlLnB1c2goZXIuJCksbmUucHVzaChlci5fJCksY3Q9eWVbZmVbZmUubGVuZ3RoLTJdXVtmZVtmZS5sZW5ndGgtMV1dLGZlLnB1c2goY3QpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxWZT1mdW5jdGlvbigpe3ZhciBIZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFgsZmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoWCxmZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoWCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih4ZSxYKXtyZXR1cm4gdGhpcy55eT1YfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD14ZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciB4ZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eGUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXhlLHRoaXMubWF0Y2hlZCs9eGU7dmFyIFg9eGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBYPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx4ZX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbih4ZSl7dmFyIFg9eGUubGVuZ3RoLGZlPXhlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9eGUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVgpLHRoaXMub2Zmc2V0LT1YO3ZhciBoZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxmZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWZlLmxlbmd0aC0xKTt2YXIgZ2U9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmZlPyhmZS5sZW5ndGg9PT1oZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK2hlW2hlLmxlbmd0aC1mZS5sZW5ndGhdLmxlbmd0aC1mZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVh9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZ2VbMF0sZ2VbMF0rdGhpcy55eWxlbmctWF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHhlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoeGUpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciB4ZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikreGUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5tYXRjaDtyZXR1cm4geGUubGVuZ3RoPDIwJiYoeGUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXhlLmxlbmd0aCkpLCh4ZS5zdWJzdHIoMCwyMCkrKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMucGFzdElucHV0KCksWD1uZXcgQXJyYXkoeGUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4geGUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1grIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHhlLFgpe3ZhciBmZSxoZSxnZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZ2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZ2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaGU9eGVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGhlJiYodGhpcy55eWxpbmVubys9aGUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46aGU/aGVbaGUubGVuZ3RoLTFdLmxlbmd0aC1oZVtoZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit4ZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz14ZVswXSx0aGlzLm1hdGNoKz14ZVswXSx0aGlzLm1hdGNoZXM9eGUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoeGVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXhlWzBdLGZlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFgsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksZmUpcmV0dXJuIGZlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBuZSBpbiBnZSl0aGlzW25lXT1nZVtuZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHhlLFgsZmUsaGU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZ2U9dGhpcy5fY3VycmVudFJ1bGVzKCksbmU9MDtuZTxnZS5sZW5ndGg7bmUrKylpZihmZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2dlW25lXV0pLGZlJiYoIVh8fGZlWzBdLmxlbmd0aD5YWzBdLmxlbmd0aCkpe2lmKFg9ZmUsaGU9bmUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeGU9dGhpcy50ZXN0X21hdGNoKGZlLGdlW25lXSkseGUhPT0hMSlyZXR1cm4geGU7aWYodGhpcy5fYmFja3RyYWNrKXtYPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFg/KHhlPXRoaXMudGVzdF9tYXRjaChYLGdlW2hlXSkseGUhPT0hMT94ZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBYPXRoaXMubmV4dCgpO3JldHVybiBYfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihYKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goWCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgWD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBYPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oWCl7cmV0dXJuIFg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhYfHwwKSxYPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbWF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihYKXt0aGlzLmJlZ2luKFgpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oWCxmZSxoZSxnZSl7dmFyIG5lPWdlO3N3aXRjaChoZSl7Y2FzZSAwOnJldHVybiA2O2Nhc2UgMTpyZXR1cm4gNztjYXNlIDI6cmV0dXJuIDg7Y2FzZSAzOnJldHVybiA5O2Nhc2UgNDpyZXR1cm4gMjI7Y2FzZSA1OnJldHVybiAyMztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI0O2JyZWFrO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjY7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmM7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gMTI7Y2FzZSAxNjpicmVhaztjYXNlIDE3OnJldHVybiAxMTtjYXNlIDE4OnJldHVybiAxNTtjYXNlIDE5OnJldHVybiAxNjtjYXNlIDIwOnJldHVybiAxNztjYXNlIDIxOnJldHVybiAxODtjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJwZXJzb25fZXh0IiksNDU7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uIiksNDQ7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dF9xdWV1ZSIpLDUxO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfZGIiKSw1MDticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0IiksNDk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX3F1ZXVlIiksNDg7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2RiIiksNDc7YnJlYWs7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtIiksNDY7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigiYm91bmRhcnkiKSwzNzticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLmJlZ2luKCJlbnRlcnByaXNlX2JvdW5kYXJ5IiksMzQ7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2JvdW5kYXJ5IiksMzY7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dF9xdWV1ZSIpLDU3O2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfZGIiKSw1NjticmVhaztjYXNlIDM1OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0IiksNTU7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX3F1ZXVlIiksNTQ7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2RiIiksNTM7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyIiksNTI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2JvdW5kYXJ5IiksMzg7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9xdWV1ZSIpLDYzO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfZGIiKSw2MjticmVhaztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0IiksNjE7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X3F1ZXVlIiksNjA7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2RiIiksNTk7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50IiksNTg7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5iZWdpbigibm9kZSIpLDM5O2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX2wiKSw0MDticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX3IiKSw0MTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLmJlZ2luKCJyZWwiKSw2NDticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLmJlZ2luKCJiaXJlbCIpLDY1O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSw2NjticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksNjc7YnJlYWs7Y2FzZSA1NjpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODticmVhaztjYXNlIDU3OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLDY4O2JyZWFrO2Nhc2UgNTg6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSw2OTticmVhaztjYXNlIDYwOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfYiIpLDcwO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9pbmRleCIpLDcxO2JyZWFrO2Nhc2UgNjI6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9lbF9zdHlsZSIpLDcyO2JyZWFrO2Nhc2UgNjM6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9yZWxfc3R5bGUiKSw3MzticmVhaztjYXNlIDY0OnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIpLDc0O2JyZWFrO2Nhc2UgNjU6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNjY6cmV0dXJuIHRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpLCJBVFRSSUJVVEVfRU1QVFkiO2JyZWFrO2Nhc2UgNjc6dGhpcy5iZWdpbigiYXR0cmlidXRlIik7YnJlYWs7Y2FzZSA2ODp0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjk6cmV0dXJuIDgwO2Nhc2UgNzA6YnJlYWs7Y2FzZSA3MTpyZXR1cm4gODA7Y2FzZSA3Mjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDczOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc0OnJldHVybiJTVFIiO2Nhc2UgNzU6dGhpcy5iZWdpbigic3RyaW5nX2t2Iik7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gdGhpcy5iZWdpbigic3RyaW5nX2t2X2tleSIpLCJTVFJfS0VZIjticmVhaztjYXNlIDc3OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJzdHJpbmdfa3ZfdmFsdWUiKTticmVhaztjYXNlIDc4OnJldHVybiJTVFJfVkFMVUUiO2Nhc2UgNzk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgwOnJldHVybiJTVFIiO2Nhc2UgODE6cmV0dXJuIkxCUkFDRSI7Y2FzZSA4MjpyZXR1cm4iUkJSQUNFIjtjYXNlIDgzOnJldHVybiJTUEFDRSI7Y2FzZSA4NDpyZXR1cm4iRU9MIjtjYXNlIDg1OnJldHVybiAxNH19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gSGV9KCk7QmUubGV4ZXI9VmU7ZnVuY3Rpb24gR2UoKXt0aGlzLnl5PXt9fXJldHVybiBvKEdlLCJQYXJzZXIiKSxHZS5wcm90b3R5cGU9QmUsQmUuUGFyc2VyPUdlLG5ldyBHZX0oKTtJMS5wYXJzZXI9STE7UUY9STF9KTt2YXIgQlMsR24saXA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCUz1vKCh0LGUse2RlcHRoOnI9MixjbG9iYmVyOm49ITF9PXt9KT0+e2xldCBpPXtkZXB0aDpyLGNsb2JiZXI6bn07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJiFBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+QlModCxhLGkpKSx0KTpBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+e3QuaW5jbHVkZXMoYSl8fHQucHVzaChhKX0pLHQpOnQ9PT12b2lkIDB8fHI8PTA/dCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0eXBlb2YgZT09Im9iamVjdCI/T2JqZWN0LmFzc2lnbih0LGUpOmU6KGUhPT12b2lkIDAmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdHlwZW9mIGU9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGE9Pnt0eXBlb2YgZVthXT09Im9iamVjdCImJih0W2FdPT09dm9pZCAwfHx0eXBlb2YgdFthXT09Im9iamVjdCIpPyh0W2FdPT09dm9pZCAwJiYodFthXT1BcnJheS5pc0FycmF5KGVbYV0pP1tdOnt9KSx0W2FdPUJTKHRbYV0sZVthXSx7ZGVwdGg6ci0xLGNsb2JiZXI6bn0pKToobnx8dHlwZW9mIHRbYV0hPSJvYmplY3QiJiZ0eXBlb2YgZVthXSE9Im9iamVjdCIpJiYodFthXT1lW2FdKX0pLHQpfSwiYXNzaWduV2l0aERlcHRoIiksR249QlN9KTt2YXIgRmIsWkYsSkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGYj17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOm8odD0+dD49MjU1PzI1NTp0PDA/MDp0LCJyIiksZzpvKHQ9PnQ+PTI1NT8yNTU6dDwwPzA6dCwiZyIpLGI6byh0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsImIiKSxoOm8odD0+dCUzNjAsImgiKSxzOm8odD0+dD49MTAwPzEwMDp0PDA/MDp0LCJzIiksbDpvKHQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCwibCIpLGE6byh0PT50Pj0xPzE6dDwwPzA6dCwiYSIpfSx0b0xpbmVhcjpvKHQ9PntsZXQgZT10LzI1NTtyZXR1cm4gdD4uMDM5Mjg/TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KTplLzEyLjkyfSwidG9MaW5lYXIiKSxodWUycmdiOm8oKHQsZSxyKT0+KHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8LjE2NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqNipyOnI8LjU/ZTpyPC42NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqKC42NjY2NjY2NjY2NjY2NjY2LXIpKjY6dCksImh1ZTJyZ2IiKSxoc2wycmdiOm8oKHtoOnQsczplLGw6cn0sbik9PntpZighZSlyZXR1cm4gcioyLjU1O3QvPTM2MCxlLz0xMDAsci89MTAwO2xldCBpPXI8LjU/ciooMStlKTpyK2UtciplLGE9MipyLWk7c3dpdGNoKG4pe2Nhc2UiciI6cmV0dXJuIEZiLmh1ZTJyZ2IoYSxpLHQrLjMzMzMzMzMzMzMzMzMzMzMpKjI1NTtjYXNlImciOnJldHVybiBGYi5odWUycmdiKGEsaSx0KSoyNTU7Y2FzZSJiIjpyZXR1cm4gRmIuaHVlMnJnYihhLGksdC0uMzMzMzMzMzMzMzMzMzMzMykqMjU1fX0sImhzbDJyZ2IiKSxyZ2IyaHNsOm8oKHtyOnQsZzplLGI6cn0sbik9Pnt0Lz0yNTUsZS89MjU1LHIvPTI1NTtsZXQgaT1NYXRoLm1heCh0LGUsciksYT1NYXRoLm1pbih0LGUscikscz0oaSthKS8yO2lmKG49PT0ibCIpcmV0dXJuIHMqMTAwO2lmKGk9PT1hKXJldHVybiAwO2xldCBsPWktYSx1PXM+LjU/bC8oMi1pLWEpOmwvKGkrYSk7aWYobj09PSJzIilyZXR1cm4gdSoxMDA7c3dpdGNoKGkpe2Nhc2UgdDpyZXR1cm4oKGUtcikvbCsoZTxyPzY6MCkpKjYwO2Nhc2UgZTpyZXR1cm4oKHItdCkvbCsyKSo2MDtjYXNlIHI6cmV0dXJuKCh0LWUpL2wrNCkqNjA7ZGVmYXVsdDpyZXR1cm4tMX19LCJyZ2IyaHNsIil9LFpGPUZifSk7dmFyIEZ4ZSxleix0ej1NKCgpPT57InVzZSBzdHJpY3QiO0Z4ZT17Y2xhbXA6bygodCxlLHIpPT5lPnI/TWF0aC5taW4oZSxNYXRoLm1heChyLHQpKTpNYXRoLm1pbihyLE1hdGgubWF4KGUsdCkpLCJjbGFtcCIpLHJvdW5kOm8odD0+TWF0aC5yb3VuZCh0KjFlMTApLzFlMTAsInJvdW5kIil9LGV6PUZ4ZX0pO3ZhciB6eGUscnosbno9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt6eGU9e2RlYzJoZXg6byh0PT57bGV0IGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZTpgMCR7ZX1gfSwiZGVjMmhleCIpfSxyej16eGV9KTt2YXIgR3hlLFl0LGpsPU0oKCk9PnsidXNlIHN0cmljdCI7SkYoKTt0eigpO256KCk7R3hlPXtjaGFubmVsOlpGLGxhbmc6ZXosdW5pdDpyen0sWXQ9R3hlfSk7dmFyIFFjLFJpLE8xPU0oKCk9PnsidXNlIHN0cmljdCI7amwoKTtRYz17fTtmb3IobGV0IHQ9MDt0PD0yNTU7dCsrKVFjW3RdPVl0LnVuaXQuZGVjMmhleCh0KTtSaT17QUxMOjAsUkdCOjEsSFNMOjJ9fSk7dmFyIEZTLGl6LGF6PU0oKCk9PnsidXNlIHN0cmljdCI7TzEoKTtGUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUeXBlIil9Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9UmkuQUxMfWdldCgpe3JldHVybiB0aGlzLnR5cGV9c2V0KGUpe2lmKHRoaXMudHlwZSYmdGhpcy50eXBlIT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjaGFuZ2UgYm90aCBSR0IgYW5kIEhTTCBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lIik7dGhpcy50eXBlPWV9cmVzZXQoKXt0aGlzLnR5cGU9UmkuQUxMfWlzKGUpe3JldHVybiB0aGlzLnR5cGU9PT1lfX0saXo9RlN9KTt2YXIgelMsc3osb3o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqbCgpO2F6KCk7TzEoKTt6Uz1jbGFzc3tzdGF0aWN7byh0aGlzLCJDaGFubmVscyIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5jb2xvcj1yLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9ZSx0aGlzLnR5cGU9bmV3IGl6fXNldChlLHIpe3JldHVybiB0aGlzLmNvbG9yPXIsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1lLHRoaXMudHlwZS50eXBlPVJpLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtsZXQgZT10aGlzLmRhdGEse2g6cixzOm4sbDppfT1lO3I9PT12b2lkIDAmJihlLmg9WXQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSksbj09PXZvaWQgMCYmKGUucz1ZdC5jaGFubmVsLnJnYjJoc2woZSwicyIpKSxpPT09dm9pZCAwJiYoZS5sPVl0LmNoYW5uZWwucmdiMmhzbChlLCJsIikpfV9lbnN1cmVSR0IoKXtsZXQgZT10aGlzLmRhdGEse3IsZzpuLGI6aX09ZTtyPT09dm9pZCAwJiYoZS5yPVl0LmNoYW5uZWwuaHNsMnJnYihlLCJyIikpLG49PT12b2lkIDAmJihlLmc9WXQuY2hhbm5lbC5oc2wycmdiKGUsImciKSksaT09PXZvaWQgMCYmKGUuYj1ZdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgcigpe2xldCBlPXRoaXMuZGF0YSxyPWUucjtyZXR1cm4hdGhpcy50eXBlLmlzKFJpLkhTTCkmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlSFNMKCksWXQuY2hhbm5lbC5oc2wycmdiKGUsInIiKSl9Z2V0IGcoKXtsZXQgZT10aGlzLmRhdGEscj1lLmc7cmV0dXJuIXRoaXMudHlwZS5pcyhSaS5IU0wpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZUhTTCgpLFl0LmNoYW5uZWwuaHNsMnJnYihlLCJnIikpfWdldCBiKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5iO3JldHVybiF0aGlzLnR5cGUuaXMoUmkuSFNMKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVIU0woKSxZdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgaCgpe2xldCBlPXRoaXMuZGF0YSxyPWUuaDtyZXR1cm4hdGhpcy50eXBlLmlzKFJpLlJHQikmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlUkdCKCksWXQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSl9Z2V0IHMoKXtsZXQgZT10aGlzLmRhdGEscj1lLnM7cmV0dXJuIXRoaXMudHlwZS5pcyhSaS5SR0IpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZVJHQigpLFl0LmNoYW5uZWwucmdiMmhzbChlLCJzIikpfWdldCBsKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5sO3JldHVybiF0aGlzLnR5cGUuaXMoUmkuUkdCKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVSR0IoKSxZdC5jaGFubmVsLnJnYjJoc2woZSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihlKXt0aGlzLnR5cGUuc2V0KFJpLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWV9c2V0IGcoZSl7dGhpcy50eXBlLnNldChSaS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1lfXNldCBiKGUpe3RoaXMudHlwZS5zZXQoUmkuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9ZX1zZXQgaChlKXt0aGlzLnR5cGUuc2V0KFJpLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWV9c2V0IHMoZSl7dGhpcy50eXBlLnNldChSaS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1lfXNldCBsKGUpe3RoaXMudHlwZS5zZXQoUmkuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9ZX1zZXQgYShlKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9ZX19LHN6PXpTfSk7dmFyICR4ZSx0aCxQMT1NKCgpPT57InVzZSBzdHJpY3QiO296KCk7JHhlPW5ldyBzeih7cjowLGc6MCxiOjAsYTowfSwidHJhbnNwYXJlbnQiKSx0aD0keGV9KTt2YXIgbHosVmYsR1M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQMSgpO08xKCk7bHo9e3JlOi9eIygoPzpbYS1mMC05XXsyfSl7Miw0fXxbYS1mMC05XXszfSkkL2kscGFyc2U6byh0PT57aWYodC5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2xldCBlPXQubWF0Y2gobHoucmUpO2lmKCFlKXJldHVybjtsZXQgcj1lWzFdLG49cGFyc2VJbnQociwxNiksaT1yLmxlbmd0aCxhPWklND09PTAscz1pPjQsbD1zPzE6MTcsdT1zPzg6NCxoPWE/MDotMSxmPXM/MjU1OjE1O3JldHVybiB0aC5zZXQoe3I6KG4+PnUqKGgrMykmZikqbCxnOihuPj51KihoKzIpJmYpKmwsYjoobj4+dSooaCsxKSZmKSpsLGE6YT8obiZmKSpsLzI1NToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gIyR7UWNbTWF0aC5yb3VuZChlKV19JHtRY1tNYXRoLnJvdW5kKHIpXX0ke1FjW01hdGgucm91bmQobildfSR7UWNbTWF0aC5yb3VuZChpKjI1NSldfWA6YCMke1FjW01hdGgucm91bmQoZSldfSR7UWNbTWF0aC5yb3VuZChyKV19JHtRY1tNYXRoLnJvdW5kKG4pXX1gfSwic3RyaW5naWZ5Iil9LFZmPWx6fSk7dmFyIHpiLEIxLGN6PU0oKCk9PnsidXNlIHN0cmljdCI7amwoKTtQMSgpO3piPXtyZTovXmhzbGE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oJSk/KSk/XHMqP1wpJC9pLGh1ZVJlOi9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLF9odWUyZGVnOm8odD0+e2xldCBlPXQubWF0Y2goemIuaHVlUmUpO2lmKGUpe2xldFsscixuXT1lO3N3aXRjaChuKXtjYXNlImdyYWQiOnJldHVybiBZdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSouOSk7Y2FzZSJyYWQiOnJldHVybiBZdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSoxODAvTWF0aC5QSSk7Y2FzZSJ0dXJuIjpyZXR1cm4gWXQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqMzYwKX19cmV0dXJuIFl0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0sIl9odWUyZGVnIikscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMDQmJmUhPT03MilyZXR1cm47bGV0IHI9dC5tYXRjaCh6Yi5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsXT1yO3JldHVybiB0aC5zZXQoe2g6emIuX2h1ZTJkZWcobiksczpZdC5jaGFubmVsLmNsYW1wLnMocGFyc2VGbG9hdChpKSksbDpZdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChhKSksYTpzP1l0LmNoYW5uZWwuY2xhbXAuYShsP3BhcnNlRmxvYXQocykvMTAwOnBhcnNlRmxvYXQocykpOjF9LHQpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0e2g6ZSxzOnIsbDpuLGE6aX09dDtyZXR1cm4gaTwxP2Boc2xhKCR7WXQubGFuZy5yb3VuZChlKX0sICR7WXQubGFuZy5yb3VuZChyKX0lLCAke1l0Lmxhbmcucm91bmQobil9JSwgJHtpfSlgOmBoc2woJHtZdC5sYW5nLnJvdW5kKGUpfSwgJHtZdC5sYW5nLnJvdW5kKHIpfSUsICR7WXQubGFuZy5yb3VuZChuKX0lKWB9LCJzdHJpbmdpZnkiKX0sQjE9emJ9KTt2YXIgR2IsJFMsdXo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHUygpO0diPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6byh0PT57dD10LnRvTG93ZXJDYXNlKCk7bGV0IGU9R2IuY29sb3JzW3RdO2lmKGUpcmV0dXJuIFZmLnBhcnNlKGUpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0IGU9VmYuc3RyaW5naWZ5KHQpO2ZvcihsZXQgciBpbiBHYi5jb2xvcnMpaWYoR2IuY29sb3JzW3JdPT09ZSlyZXR1cm4gcn0sInN0cmluZ2lmeSIpfSwkUz1HYn0pO3ZhciBoeixGMSxmej1NKCgpPT57InVzZSBzdHJpY3QiO2psKCk7UDEoKTtoej17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMTQmJmUhPT04MilyZXR1cm47bGV0IHI9dC5tYXRjaChoei5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsLHUsaCxmXT1yO3JldHVybiB0aC5zZXQoe3I6WXQuY2hhbm5lbC5jbGFtcC5yKGk/cGFyc2VGbG9hdChuKSoyLjU1OnBhcnNlRmxvYXQobikpLGc6WXQuY2hhbm5lbC5jbGFtcC5nKHM/cGFyc2VGbG9hdChhKSoyLjU1OnBhcnNlRmxvYXQoYSkpLGI6WXQuY2hhbm5lbC5jbGFtcC5iKHU/cGFyc2VGbG9hdChsKSoyLjU1OnBhcnNlRmxvYXQobCkpLGE6aD9ZdC5jaGFubmVsLmNsYW1wLmEoZj9wYXJzZUZsb2F0KGgpLzEwMDpwYXJzZUZsb2F0KGgpKToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gcmdiYSgke1l0Lmxhbmcucm91bmQoZSl9LCAke1l0Lmxhbmcucm91bmQocil9LCAke1l0Lmxhbmcucm91bmQobil9LCAke1l0Lmxhbmcucm91bmQoaSl9KWA6YHJnYigke1l0Lmxhbmcucm91bmQoZSl9LCAke1l0Lmxhbmcucm91bmQocil9LCAke1l0Lmxhbmcucm91bmQobil9KWB9LCJzdHJpbmdpZnkiKX0sRjE9aHp9KTt2YXIgVnhlLE1pLFpjPU0oKCk9PnsidXNlIHN0cmljdCI7R1MoKTtjeigpO3V6KCk7ZnooKTtPMSgpO1Z4ZT17Zm9ybWF0OntrZXl3b3JkOiRTLGhleDpWZixyZ2I6RjEscmdiYTpGMSxoc2w6QjEsaHNsYTpCMX0scGFyc2U6byh0PT57aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0O2xldCBlPVZmLnBhcnNlKHQpfHxGMS5wYXJzZSh0KXx8QjEucGFyc2UodCl8fCRTLnBhcnNlKHQpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb2xvciBmb3JtYXQ6ICIke3R9ImApfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKFJpLkhTTCl8fHQuZGF0YS5yPT09dm9pZCAwP0IxLnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9GMS5zdHJpbmdpZnkodCk6VmYuc3RyaW5naWZ5KHQpLCJzdHJpbmdpZnkiKX0sTWk9VnhlfSk7dmFyIFV4ZSwkYixWUz1NKCgpPT57InVzZSBzdHJpY3QiO2psKCk7WmMoKTtVeGU9bygodCxlKT0+e2xldCByPU1pLnBhcnNlKHQpO2ZvcihsZXQgbiBpbiBlKXJbbl09WXQuY2hhbm5lbC5jbGFtcFtuXShlW25dKTtyZXR1cm4gTWkuc3RyaW5naWZ5KHIpfSwiY2hhbmdlIiksJGI9VXhlfSk7dmFyIEh4ZSxIcyxVUz1NKCgpPT57InVzZSBzdHJpY3QiO2psKCk7UDEoKTtaYygpO1ZTKCk7SHhlPW8oKHQsZSxyPTAsbj0xKT0+e2lmKHR5cGVvZiB0IT0ibnVtYmVyIilyZXR1cm4gJGIodCx7YTplfSk7bGV0IGk9dGguc2V0KHtyOll0LmNoYW5uZWwuY2xhbXAucih0KSxnOll0LmNoYW5uZWwuY2xhbXAuZyhlKSxiOll0LmNoYW5uZWwuY2xhbXAuYihyKSxhOll0LmNoYW5uZWwuY2xhbXAuYShuKX0pO3JldHVybiBNaS5zdHJpbmdpZnkoaSl9LCJyZ2JhIiksSHM9SHhlfSk7dmFyIFd4ZSx6MSxkej1NKCgpPT57InVzZSBzdHJpY3QiO2psKCk7WmMoKTtXeGU9bygodCxlKT0+WXQubGFuZy5yb3VuZChNaS5wYXJzZSh0KVtlXSksImNoYW5uZWwiKSx6MT1XeGV9KTt2YXIgWXhlLHB6LG16PU0oKCk9PnsidXNlIHN0cmljdCI7amwoKTtaYygpO1l4ZT1vKHQ9PntsZXR7cjplLGc6cixiOm59PU1pLnBhcnNlKHQpLGk9LjIxMjYqWXQuY2hhbm5lbC50b0xpbmVhcihlKSsuNzE1MipZdC5jaGFubmVsLnRvTGluZWFyKHIpKy4wNzIyKll0LmNoYW5uZWwudG9MaW5lYXIobik7cmV0dXJuIFl0Lmxhbmcucm91bmQoaSl9LCJsdW1pbmFuY2UiKSxwej1ZeGV9KTt2YXIgcXhlLGd6LHl6PU0oKCk9PnsidXNlIHN0cmljdCI7bXooKTtxeGU9byh0PT5weih0KT49LjUsImlzTGlnaHQiKSxnej1xeGV9KTt2YXIgWHhlLGFhLHZ6PU0oKCk9PnsidXNlIHN0cmljdCI7eXooKTtYeGU9byh0PT4hZ3oodCksImlzRGFyayIpLGFhPVh4ZX0pO3ZhciBqeGUsVmIsSFM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqbCgpO1pjKCk7anhlPW8oKHQsZSxyKT0+e2xldCBuPU1pLnBhcnNlKHQpLGk9bltlXSxhPVl0LmNoYW5uZWwuY2xhbXBbZV0oaStyKTtyZXR1cm4gaSE9PWEmJihuW2VdPWEpLE1pLnN0cmluZ2lmeShuKX0sImFkanVzdENoYW5uZWwiKSxWYj1qeGV9KTt2YXIgS3hlLER0LHh6PU0oKCk9PnsidXNlIHN0cmljdCI7SFMoKTtLeGU9bygodCxlKT0+VmIodCwibCIsZSksImxpZ2h0ZW4iKSxEdD1LeGV9KTt2YXIgUXhlLEJ0LGJ6PU0oKCk9PnsidXNlIHN0cmljdCI7SFMoKTtReGU9bygodCxlKT0+VmIodCwibCIsLWUpLCJkYXJrZW4iKSxCdD1ReGV9KTt2YXIgWnhlLE5lLHd6PU0oKCk9PnsidXNlIHN0cmljdCI7WmMoKTtWUygpO1p4ZT1vKCh0LGUpPT57bGV0IHI9TWkucGFyc2UodCksbj17fTtmb3IobGV0IGkgaW4gZSllW2ldJiYobltpXT1yW2ldK2VbaV0pO3JldHVybiAkYih0LG4pfSwiYWRqdXN0IiksTmU9WnhlfSk7dmFyIEp4ZSxUeixrej1NKCgpPT57InVzZSBzdHJpY3QiO1pjKCk7VVMoKTtKeGU9bygodCxlLHI9NTApPT57bGV0e3I6bixnOmksYjphLGE6c309TWkucGFyc2UodCkse3I6bCxnOnUsYjpoLGE6Zn09TWkucGFyc2UoZSksZD1yLzEwMCxwPWQqMi0xLG09cy1mLHk9KChwKm09PT0tMT9wOihwK20pLygxK3AqbSkpKzEpLzIsdj0xLXkseD1uKnkrbCp2LGI9aSp5K3Uqdix3PWEqeStoKnYsXz1zKmQrZiooMS1kKTtyZXR1cm4gSHMoeCxiLHcsXyl9LCJtaXgiKSxUej1KeGV9KTt2YXIgZWJlLHB0LEV6PU0oKCk9PnsidXNlIHN0cmljdCI7WmMoKTtreigpO2ViZT1vKCh0LGU9MTAwKT0+e2xldCByPU1pLnBhcnNlKHQpO3JldHVybiByLnI9MjU1LXIucixyLmc9MjU1LXIuZyxyLmI9MjU1LXIuYixUeihyLHQsZSl9LCJpbnZlcnQiKSxwdD1lYmV9KTt2YXIgU3o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVUygpO2R6KCk7dnooKTt4eigpO2J6KCk7d3ooKTtFeigpfSk7dmFyIFRvPU0oKCk9PnsidXNlIHN0cmljdCI7U3ooKX0pO3ZhciByaCxuaCxHMT1NKCgpPT57InVzZSBzdHJpY3QiO3JoPSIjZmZmZmZmIixuaD0iI2YyZjJmMiJ9KTt2YXIgd2ksYXA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbygpO3dpPW8oKHQsZSk9PmU/TmUodCx7czotNDAsbDoxMH0pOk5lKHQse3M6LTQwLGw6LTEwfSksIm1rQm9yZGVyIil9KTt2YXIgV1MsQXosX3o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbygpO0cxKCk7YXAoKTtXUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2ZmZjRkZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dXBkYXRlQ29sb3JzKCl7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHx3aSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fHdpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8d2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHx3aSh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8cHQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxwdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxwdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/QnQodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8QnQodGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8cHQodGhpcy5saW5lQ29sb3IpLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5hbHRTZWN0aW9uQmtnQ29sb3J8fCJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPXRoaXMuc2VjdGlvbkJrZ0NvbG9yMnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5leGNsdWRlQmtnQ29sb3I9dGhpcy5leGNsdWRlQmtnQ29sb3J8fCIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8RHQodGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wZXJzb25Cb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMucGVyc29uQmtnfHx0aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTAsbDoxNTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpcy5kYXJrTW9kZSlmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09QnQodGhpc1siY1NjYWxlIityXSw3NSk7ZWxzZSBmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09QnQodGhpc1siY1NjYWxlIityXSwyNSk7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzWyJjU2NhbGVJbnYiK3JdPXRoaXNbImNTY2FsZUludiIrcl18fHB0KHRoaXNbImNTY2FsZSIrcl0pO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIityXT10aGlzWyJjU2NhbGVQZWVyIityXXx8RHQodGhpc1siY1NjYWxlIityXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrcl09dGhpc1siY1NjYWxlUGVlciIrcl18fEJ0KHRoaXNbImNTY2FsZSIrcl0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlTGFiZWwiK3JdPXRoaXNbImNTY2FsZUxhYmVsIityXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7bGV0IGU9dGhpcy5kYXJrTW9kZT8tNDotMTtmb3IobGV0IHI9MDtyPDU7cisrKXRoaXNbInN1cmZhY2UiK3JdPXRoaXNbInN1cmZhY2UiK3JdfHxOZSh0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6ZSooNStyKjMpfSksdGhpc1sic3VyZmFjZVBlZXIiK3JdPXRoaXNbInN1cmZhY2VQZWVyIityXXx8TmUodGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOmUqKDgrciozKX0pO3RoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9dGhpcy5maWxsVHlwZTN8fE5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9dGhpcy5maWxsVHlwZTZ8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHxOZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TmUodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMuYXJjaEVkZ2VDb2xvcnx8IiM3NzciLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yfHwiIzc3NyIsdGhpcy5hcmNoRWRnZVdpZHRoPXRoaXMuYXJjaEVkZ2VXaWR0aHx8IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcnx8IiMwMDAiLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9dGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aHx8IjJweCIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxOZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxOZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxOZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxhYSh0aGlzLnF1YWRyYW50MUZpbGwpP0R0KHRoaXMucXVhZHJhbnQxRmlsbCk6QnQodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNGRkY0REQsI0ZGRDhCMSwjRkZBMDdBLCNFQ0VGRjEsI0Q2REJERiwjQzNFMEE4LCNGRkI2QTQsI0ZGRDc0RCwjNzM4RkE3LCNGRkZGRjAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP0J0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPUR0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPUR0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPUR0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPUR0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PUR0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PUR0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PUR0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PUR0KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9QnQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9QnQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9QnQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9QnQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9QnQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9QnQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9QnQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9QnQodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8cHQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxwdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fHB0KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8cHQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxwdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fHB0KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8cHQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxwdCh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8cmgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8bmh9Y2FsY3VsYXRlKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59bGV0IHI9T2JqZWN0LmtleXMoZSk7ci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLHIuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSl9fSxBej1vKHQ9PntsZXQgZT1uZXcgV1M7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9LCJnZXRUaGVtZVZhcmlhYmxlcyIpfSk7dmFyIFlTLEx6LER6PU0oKCk9PnsidXNlIHN0cmljdCI7VG8oKTthcCgpO1lTPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPUR0KHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXB0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj13aSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj13aSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPXB0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1wdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXB0KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1wdCh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPUR0KHB0KCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiNjY2MiLHRoaXMuYm9yZGVyMj1IcygyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9QnQoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1CdCh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9SHMoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPUhzKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFyY2hFZGdlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlV2lkdGg9IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD0iMnB4Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5zZWNvbmRCa2c9RHQodGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1EdCh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1EdCh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjNTU1Iix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TmUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TmUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHwiIzBiMDAwMCIsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8IiM0ZDEwMzciLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fCIjM2Y1MjU4Iix0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHwiIzRmMmYxYiIsdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8IiM2ZTBhMGEiLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fCIjM2IwMDQ4Iix0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHwiIzk5NWEwMSIsdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8IiMxNTQ3MDYiLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fCIjMTYxNzIyIix0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fCIjMDAyOTZmIix0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fCIjMDE2MjljIix0aGlzLmNTY2FsZTEyPXRoaXMuY1NjYWxlMTJ8fCIjMDEwMDI5Iix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fHB0KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fER0KHRoaXNbImNTY2FsZSIrZV0sMTApO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE5lKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oLTEwK2UqNCl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxOZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC03K2UqNCl9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1sicGllIitlXT10aGlzWyJjU2NhbGUiK2VdO3RoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TmUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TmUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TmUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8YWEodGhpcy5xdWFkcmFudDFGaWxsKT9EdCh0aGlzLnF1YWRyYW50MUZpbGwpOkJ0KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjMzQ5OGRiLCMyZWNjNzEsI2U3NGMzYywjZjFjNDBmLCNiZGMzYzcsI2ZmZmZmZiwjMzQ0OTVlLCM5YjU5YjYsIzFhYmM5YywjZTY3ZTIyIn0sdGhpcy5wYWNrZXQ9e3N0YXJ0Qnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixlbmRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGxhYmVsQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRpdGxlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrU3Ryb2tlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrRmlsbENvbG9yOnRoaXMuYmFja2dyb3VuZH0sdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/QnQodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPUR0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0MT1EdCh0aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mj1EdCh0aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvciwyMCksdGhpcy5naXQzPUR0KHRoaXMucGllNHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksMjApLHRoaXMuZ2l0ND1EdCh0aGlzLnBpZTV8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLDIwKSx0aGlzLmdpdDU9RHQodGhpcy5waWU2fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSwxMCksdGhpcy5naXQ2PUR0KHRoaXMucGllN3x8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSwxMCksdGhpcy5naXQ3PUR0KHRoaXMucGllOHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksMjApLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fHB0KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8cHQodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxwdCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fHB0KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8cHQodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxwdCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fHB0KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8cHQodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8cHQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHB0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8RHQodGhpcy5iYWNrZ3JvdW5kLDEyKSx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxEdCh0aGlzLmJhY2tncm91bmQsMiksdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8IiM5OTkifWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sTHo9byh0PT57bGV0IGU9bmV3IFlTO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBxUyxzcCxVYj1NKCgpPT57InVzZSBzdHJpY3QiO1RvKCk7YXAoKTtHMSgpO3FTPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPU5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj1OZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9d2kodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj13aSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj13aSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPXB0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1wdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXB0KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1wdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSJyZ2JhKDIzMiwyMzIsMjMyLCAwLjgpIix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9SHMoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fEJ0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8QnQodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09QnQodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEJ0KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxOZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE5lKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNStlKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2VdPXRoaXNbInN1cmZhY2VQZWVyIitlXXx8TmUodGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K2UqNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8cHQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fHB0KHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1EdCh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFyY2hFZGdlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1OZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1OZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1OZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxOZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8TmUodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxOZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TmUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TmUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TmUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8YWEodGhpcy5xdWFkcmFudDFGaWxsKT9EdCh0aGlzLnF1YWRyYW50MUZpbGwpOkJ0KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjRUNFQ0ZGLCM4NDkzQTYsI0ZGQzNBMCwjRENEREUxLCNCOEU5OTQsI0QxQTM2RiwjQzNDREU2LCNGRkI2QzEsIzQ5NjA3OCwjRjhGM0UzIn0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1EdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1EdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1EdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1EdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1EdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1EdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1EdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1EdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPUJ0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPUJ0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPUJ0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPUJ0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PUJ0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PUJ0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PUJ0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PUJ0KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fEJ0KHB0KHRoaXMuZ2l0MCksMjUpLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHB0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8cHQodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxwdCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHB0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8cHQodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxwdCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHB0KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHB0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHxwdCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fHJoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fG5ofWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sc3A9byh0PT57bGV0IGU9bmV3IHFTO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBYUyxOeixSej1NKCgpPT57InVzZSBzdHJpY3QiO1RvKCk7RzEoKTthcCgpO1hTPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1EdCgiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXdpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9d2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9d2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1wdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9cHQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1wdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1wdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VXaWR0aD0iMyIsdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFyY2hHcm91cEJvcmRlcldpZHRoPSIycHgiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5hY3RvckJvcmRlcj1CdCh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fEJ0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8QnQodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09QnQodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEJ0KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxOZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBlPTA7ZTw1O2UrKyl0aGlzWyJzdXJmYWNlIitlXT10aGlzWyJzdXJmYWNlIitlXXx8TmUodGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg1K2UqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxOZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1OZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9TmUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1OZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1OZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TmUodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE5lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE5lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE5lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGFhKHRoaXMucXVhZHJhbnQxRmlsbCk/RHQodGhpcy5xdWFkcmFudDFGaWxsKTpCdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnBhY2tldD17c3RhcnRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGVuZEJ5dGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsbGFiZWxDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGl0bGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tTdHJva2VDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tGaWxsQ29sb3I6dGhpcy5tYWluQmtnfSx0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0NERTQ5OCwjRkY2QjZCLCNBMEQyREIsI0Q3QkRFMiwjRjBGMEYwLCNGRkMzQTAsIzdGRDhCRSwjRkY5QThCLCNGQUYzRTAsI0ZGRjE3NiJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPUR0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPUR0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPUR0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPUR0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PUR0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PUR0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PUR0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PUR0KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9QnQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9QnQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9QnQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9QnQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9QnQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9QnQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9QnQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9QnQodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8cHQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxwdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fHB0KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8cHQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxwdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fHB0KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8cHQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxwdCh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxwdCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8cHQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxyaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxuaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LE56PW8odD0+e2xldCBlPW5ldyBYUztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgalMsTXosSXo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbygpO2FwKCk7RzEoKTtqUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9RHQodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXdpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9d2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9d2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1wdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9cHQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1wdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXB0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0id2hpdGUiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1EdCh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPUR0KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHwiIzU1NSIsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiNGNEY0RjQiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNTU1Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiI0JCQiIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM3NzciLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjOTk5Iix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiI0RERCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiNGRkYiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjREREIix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiI0JCQiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzk5OSIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzc3NyI7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fHB0KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8RHQodGhpc1siY1NjYWxlIitlXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEJ0KHRoaXNbImNTY2FsZSIrZV0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx0aGlzLmNTY2FsZTEsdGhpcy5jU2NhbGVMYWJlbDI9dGhpcy5jU2NhbGVMYWJlbDJ8fHRoaXMuY1NjYWxlMTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE5lKHRoaXMubWFpbkJrZyx7bDotKDUrZSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitlXT10aGlzWyJzdXJmYWNlUGVlciIrZV18fE5lKHRoaXMubWFpbkJrZyx7bDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLnNlY3Rpb25Ca2dDb2xvcj1EdCh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9RHQodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9QnQodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1EdCh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9QnQodGhpcy5jcml0QmtnQ29sb3IsMTApLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy5jcml0QmtnQ29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TmUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU5lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TmUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TmUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbInBpZSIrZV09dGhpc1siY1NjYWxlIitlXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxOZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE5lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE5lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE5lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGFhKHRoaXMucXVhZHJhbnQxRmlsbCk/RHQodGhpcy5xdWFkcmFudDFGaWxsKTpCdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0VFRSwjNkJCOEU0LCM4QUNCODgsI0M3QUNENiwjRThEQ0MyLCNGRkIyQTgsI0ZGRjM4MCwjN0U4RDkxLCNGRkQ4QjEsI0ZBRjNFMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD1CdCh0aGlzLnBpZTEsMjUpfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5waWU0fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5waWU1fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5waWU2fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5waWU3fHxOZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLnBpZTh8fE5lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fHB0KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8cHQodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxwdCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fHB0KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8cHQodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxwdCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fHB0KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8cHQodGhpcy5naXQ3KSx0aGlzLmJyYW5jaExhYmVsQ29sb3I9dGhpcy5icmFuY2hMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fHJoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fG5ofWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sTXo9byh0PT57bGV0IGU9bmV3IGpTO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBrbyxIYj1NKCgpPT57InVzZSBzdHJpY3QiO196KCk7RHooKTtVYigpO1J6KCk7SXooKTtrbz17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6QXp9LGRhcms6e2dldFRoZW1lVmFyaWFibGVzOkx6fSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpzcH0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpOen0sbmV1dHJhbDp7Z2V0VGhlbWVWYXJpYWJsZXM6TXp9fX0pO3ZhciBKYyxPej1NKCgpPT57InVzZSBzdHJpY3QiO0pjPXtmbG93Y2hhcnQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LHN1YkdyYXBoVGl0bGVNYXJnaW46e3RvcDowLGJvdHRvbTowfSxkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciIsd3JhcHBpbmdXaWR0aDoyMDB9LHNlcXVlbmNlOnt1c2VNYXhXaWR0aDohMCxoaWRlVW51c2VkUGFydGljaXBhbnRzOiExLGFjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMH0sZ2FudHQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix0b3BBeGlzOiExLGRpc3BsYXlNb2RlOiIiLHdlZWtkYXk6InN1bmRheSJ9LGpvdXJuZXk6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxhcnJvd01hcmtlckFic29sdXRlOiExLGRpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIixodG1sTGFiZWxzOiExLGhpZGVFbXB0eU1lbWJlcnNCb3g6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSxrYW5iYW46e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6OCxzZWN0aW9uV2lkdGg6MjAwLHRpY2tldEJhc2VVcmw6IiJ9LHRpbWVsaW5lOnt1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdLGRpc2FibGVNdWx0aWNvbG9yOiExfSxnaXRHcmFwaDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6OCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfSxtYWluQnJhbmNoTmFtZToibWFpbiIsbWFpbkJyYW5jaE9yZGVyOjAsc2hvd0NvbW1pdExhYmVsOiEwLHNob3dCcmFuY2hlczohMCxyb3RhdGVDb21taXRMYWJlbDohMCxwYXJhbGxlbENvbW1pdHM6ITEsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMX0sYzQ6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGM0U2hhcGVNYXJnaW46NTAsYzRTaGFwZVBhZGRpbmc6MjAsd2lkdGg6MjE2LGhlaWdodDo2MCxib3hNYXJnaW46MTAsYzRTaGFwZUluUm93OjQsbmV4dExpbmVQYWRkaW5nWDowLGM0Qm91bmRhcnlJblJvdzoyLHBlcnNvbkZvbnRTaXplOjE0LHBlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxwZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3BlcnNvbkZvbnRTaXplOjE0LGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbUZvbnRTaXplOjE0LHN5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9kYkZvbnRTaXplOjE0LHN5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LHN5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGJvdW5kYXJ5Rm9udFNpemU6MTQsYm91bmRhcnlGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYm91bmRhcnlGb250V2VpZ2h0OiJub3JtYWwiLG1lc3NhZ2VGb250U2l6ZToxMixtZXNzYWdlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lckZvbnRTaXplOjE0LGNvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGNvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudEZvbnRTaXplOjE0LGNvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9kYkZvbnRTaXplOjE0LGNvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLHdyYXA6ITAsd3JhcFBhZGRpbmc6MTAscGVyc29uX2JnX2NvbG9yOiIjMDg0MjdCIixwZXJzb25fYm9yZGVyX2NvbG9yOiIjMDczQjZGIixleHRlcm5hbF9wZXJzb25fYmdfY29sb3I6IiM2ODY4NjgiLGV4dGVybmFsX3BlcnNvbl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLHN5c3RlbV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX2RiX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fcXVldWVfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX3N5c3RlbV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGNvbnRhaW5lcl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfcXVldWVfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGNvbXBvbmVudF9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiNCRkJGQkYifSxzYW5rZXk6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjYwMCxoZWlnaHQ6NDAwLGxpbmtDb2xvcjoiZ3JhZGllbnQiLG5vZGVBbGlnbm1lbnQ6Imp1c3RpZnkiLHNob3dWYWx1ZXM6ITAscHJlZml4OiIiLHN1ZmZpeDoiIn0sYmxvY2s6e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6OH0scGFja2V0Ont1c2VNYXhXaWR0aDohMCxyb3dIZWlnaHQ6MzIsYml0V2lkdGg6MzIsYml0c1BlclJvdzozMixzaG93Qml0czohMCxwYWRkaW5nWDo1LHBhZGRpbmdZOjV9LGFyY2hpdGVjdHVyZTp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzo0MCxpY29uU2l6ZTo4MCxmb250U2l6ZToxNn0sdGhlbWU6ImRlZmF1bHQiLGxvb2s6ImNsYXNzaWMiLGhhbmREcmF3blNlZWQ6MCxsYXlvdXQ6ImRhZ3JlIixtYXhUZXh0U2l6ZTo1ZTQsbWF4RWRnZXM6NTAwLGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIiwic3VwcHJlc3NFcnJvclJlbmRlcmluZyIsIm1heEVkZ2VzIl0sbGVnYWN5TWF0aE1MOiExLGZvcmNlTGVnYWN5TWF0aE1MOiExLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTYsbWFya2Rvd25BdXRvV3JhcDohMCxzdXBwcmVzc0Vycm9yUmVuZGVyaW5nOiExfX0pO3ZhciBQeixCeixGeix1cixocz1NKCgpPT57InVzZSBzdHJpY3QiO0hiKCk7T3ooKTtQej17Li4uSmMsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZWxrOnttZXJnZUVkZ2VzOiExLG5vZGVQbGFjZW1lbnRTdHJhdGVneToiQlJBTkRFU19LT0VQRiJ9LHRoZW1lQ1NTOnZvaWQgMCx0aGVtZVZhcmlhYmxlczprby5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksc2VxdWVuY2U6ey4uLkpjLnNlcXVlbmNlLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpLG5vdGVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LCJub3RlRm9udCIpLGFjdG9yRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fSwiYWN0b3JGb250Iil9LGNsYXNzOntoaWRlRW1wdHlNZW1iZXJzQm94OiExfSxnYW50dDp7Li4uSmMuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi5KYy5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMucGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnBlcnNvbkZvbnRXZWlnaHR9fSwicGVyc29uRm9udCIpLGV4dGVybmFsX3BlcnNvbkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sImV4dGVybmFsX3BlcnNvbkZvbnQiKSxzeXN0ZW1Gb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtRm9udFdlaWdodH19LCJzeXN0ZW1Gb250IiksZXh0ZXJuYWxfc3lzdGVtRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfc3lzdGVtRm9udCIpLHN5c3RlbV9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sInN5c3RlbV9kYkZvbnQiKSxleHRlcm5hbF9zeXN0ZW1fZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9zeXN0ZW1fZGJGb250Iiksc3lzdGVtX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSwic3lzdGVtX3F1ZXVlRm9udCIpLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQiKSxjb250YWluZXJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyRm9udFdlaWdodH19LCJjb250YWluZXJGb250IiksZXh0ZXJuYWxfY29udGFpbmVyRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29udGFpbmVyRm9udCIpLGNvbnRhaW5lcl9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sImNvbnRhaW5lcl9kYkZvbnQiKSxleHRlcm5hbF9jb250YWluZXJfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb250YWluZXJfZGJGb250IiksY29udGFpbmVyX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSwiY29udGFpbmVyX3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQiKSxjb21wb25lbnRGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50Rm9udFdlaWdodH19LCJjb21wb25lbnRGb250IiksZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udCIpLGNvbXBvbmVudF9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sImNvbXBvbmVudF9kYkZvbnQiKSxleHRlcm5hbF9jb21wb25lbnRfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb21wb25lbnRfZGJGb250IiksY29tcG9uZW50X3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSwiY29tcG9uZW50X3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQiKSxib3VuZGFyeUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYm91bmRhcnlGb250V2VpZ2h0fX0sImJvdW5kYXJ5Rm9udCIpLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpfSxwaWU6ey4uLkpjLnBpZSx1c2VXaWR0aDo5ODR9LHh5Q2hhcnQ6ey4uLkpjLnh5Q2hhcnQsdXNlV2lkdGg6dm9pZCAwfSxyZXF1aXJlbWVudDp7Li4uSmMucmVxdWlyZW1lbnQsdXNlV2lkdGg6dm9pZCAwfSxwYWNrZXQ6ey4uLkpjLnBhY2tldH19LEJ6PW8oKHQsZT0iIik9Pk9iamVjdC5rZXlzKHQpLnJlZHVjZSgocixuKT0+QXJyYXkuaXNBcnJheSh0W25dKT9yOnR5cGVvZiB0W25dPT0ib2JqZWN0IiYmdFtuXSE9PW51bGw/Wy4uLnIsZStuLC4uLkJ6KHRbbl0sIiIpXTpbLi4ucixlK25dLFtdKSwia2V5aWZ5IiksRno9bmV3IFNldChCeihQeiwiIikpLHVyPVB6fSk7dmFyIG9wLHRiZSxLUz1NKCgpPT57InVzZSBzdHJpY3QiO2hzKCk7aHQoKTtvcD1vKHQ9PntpZihZLmRlYnVnKCJzYW5pdGl6ZURpcmVjdGl2ZSBjYWxsZWQgd2l0aCIsdCksISh0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PW51bGwpKXtpZihBcnJheS5pc0FycmF5KHQpKXt0LmZvckVhY2goZT0+b3AoZSkpO3JldHVybn1mb3IobGV0IGUgb2YgT2JqZWN0LmtleXModCkpe2lmKFkuZGVidWcoIkNoZWNraW5nIGtleSIsZSksZS5zdGFydHNXaXRoKCJfXyIpfHxlLmluY2x1ZGVzKCJwcm90byIpfHxlLmluY2x1ZGVzKCJjb25zdHIiKXx8IUZ6LmhhcyhlKXx8dFtlXT09bnVsbCl7WS5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLGUpLGRlbGV0ZSB0W2VdO2NvbnRpbnVlfWlmKHR5cGVvZiB0W2VdPT0ib2JqZWN0Iil7WS5kZWJ1Zygic2FuaXRpemluZyBvYmplY3QiLGUpLG9wKHRbZV0pO2NvbnRpbnVlfWxldCByPVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2ZvcihsZXQgbiBvZiByKWUuaW5jbHVkZXMobikmJihZLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLGUpLHRbZV09dGJlKHRbZV0pKX1pZih0LnRoZW1lVmFyaWFibGVzKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0LnRoZW1lVmFyaWFibGVzKSl7bGV0IHI9dC50aGVtZVZhcmlhYmxlc1tlXTtyPy5tYXRjaCYmIXIubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKHQudGhlbWVWYXJpYWJsZXNbZV09IiIpfVkuZGVidWcoIkFmdGVyIHNhbml0aXphdGlvbiIsdCl9fSwic2FuaXRpemVEaXJlY3RpdmUiKSx0YmU9byh0PT57bGV0IGU9MCxyPTA7Zm9yKGxldCBuIG9mIHQpe2lmKGU8cilyZXR1cm4ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI7bj09PSJ7Ij9lKys6bj09PSJ9IiYmcisrfXJldHVybiBlIT09cj8ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI6dH0sInNhbml0aXplQ3NzIil9KTt2YXIgaWgsZnMsR3osbHAsJDEsV2IsUVMsJHosVnosWlMsWWIsU3IsVXosSHosVjEscmJlLHp6LG5iZSxXeixVYT1NKCgpPT57InVzZSBzdHJpY3QiO2lwKCk7aHQoKTtIYigpO2hzKCk7S1MoKTtpaD1PYmplY3QuZnJlZXplKHVyKSxmcz1Hbih7fSxpaCksbHA9W10sJDE9R24oe30saWgpLFdiPW8oKHQsZSk9PntsZXQgcj1Hbih7fSx0KSxuPXt9O2ZvcihsZXQgaSBvZiBlKVV6KGkpLG49R24obixpKTtpZihyPUduKHIsbiksbi50aGVtZSYmbi50aGVtZSBpbiBrbyl7bGV0IGk9R24oe30sR3opLGE9R24oaS50aGVtZVZhcmlhYmxlc3x8e30sbi50aGVtZVZhcmlhYmxlcyk7ci50aGVtZSYmci50aGVtZSBpbiBrbyYmKHIudGhlbWVWYXJpYWJsZXM9a29bci50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoYSkpfXJldHVybiAkMT1yLFd6KCQxKSwkMX0sInVwZGF0ZUN1cnJlbnRDb25maWciKSxRUz1vKHQ9Pihmcz1Hbih7fSxpaCksZnM9R24oZnMsdCksdC50aGVtZSYma29bdC50aGVtZV0mJihmcy50aGVtZVZhcmlhYmxlcz1rb1t0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSksV2IoZnMsbHApLGZzKSwic2V0U2l0ZUNvbmZpZyIpLCR6PW8odD0+e0d6PUduKHt9LHQpfSwic2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplIiksVno9byh0PT4oZnM9R24oZnMsdCksV2IoZnMsbHApLGZzKSwidXBkYXRlU2l0ZUNvbmZpZyIpLFpTPW8oKCk9PkduKHt9LGZzKSwiZ2V0U2l0ZUNvbmZpZyIpLFliPW8odD0+KFd6KHQpLEduKCQxLHQpLFNyKCkpLCJzZXRDb25maWciKSxTcj1vKCgpPT5Hbih7fSwkMSksImdldENvbmZpZyIpLFV6PW8odD0+e3QmJihbInNlY3VyZSIsLi4uZnMuc2VjdXJlPz9bXV0uZm9yRWFjaChlPT57T2JqZWN0Lmhhc093bih0LGUpJiYoWS5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke2V9YCx0W2VdKSxkZWxldGUgdFtlXSl9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9PntlLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSB0W2VdfSksT2JqZWN0LmtleXModCkuZm9yRWFjaChlPT57dHlwZW9mIHRbZV09PSJzdHJpbmciJiYodFtlXS5pbmNsdWRlcygiPCIpfHx0W2VdLmluY2x1ZGVzKCI+Iil8fHRbZV0uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIHRbZV0sdHlwZW9mIHRbZV09PSJvYmplY3QiJiZVeih0W2VdKX0pKX0sInNhbml0aXplIiksSHo9byh0PT57b3AodCksdC5mb250RmFtaWx5JiYhdC50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXM9ey4uLnQudGhlbWVWYXJpYWJsZXMsZm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSxscC5wdXNoKHQpLFdiKGZzLGxwKX0sImFkZERpcmVjdGl2ZSIpLFYxPW8oKHQ9ZnMpPT57bHA9W10sV2IodCxscCl9LCJyZXNldCIpLHJiZT17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSx6ej17fSxuYmU9byh0PT57enpbdF18fChZLndhcm4ocmJlW3RdKSx6elt0XT0hMCl9LCJpc3N1ZVdhcm5pbmciKSxXej1vKHQ9Pnt0JiYodC5sYXp5TG9hZGVkRGlhZ3JhbXN8fHQubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZuYmUoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LCJjaGVja0NvbmZpZyIpfSk7ZnVuY3Rpb24gV3ModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gaUModCxlLG4pfX1mdW5jdGlvbiBjYmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGFDKHQscil9fWZ1bmN0aW9uIEFyKHQsZSl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmpiO1l6JiZZeih0LG51bGwpO2xldCBuPWUubGVuZ3RoO2Zvcig7bi0tOyl7bGV0IGk9ZVtuXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2xldCBhPXIoaSk7YSE9PWkmJihpYmUoZSl8fChlW25dPWEpLGk9YSl9dFtpXT0hMH1yZXR1cm4gdH1mdW5jdGlvbiB1YmUodCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdWwodCxlKXx8KHRbZV09bnVsbCk7cmV0dXJuIHR9ZnVuY3Rpb24gVWYodCl7bGV0IGU9dEcobnVsbCk7Zm9yKGxldFtyLG5db2YgZUcodCkpdWwodCxyKSYmKEFycmF5LmlzQXJyYXkobik/ZVtyXT11YmUobik6biYmdHlwZW9mIG49PSJvYmplY3QiJiZuLmNvbnN0cnVjdG9yPT09T2JqZWN0P2Vbcl09VWYobik6ZVtyXT1uKTtyZXR1cm4gZX1mdW5jdGlvbiBZMSh0LGUpe2Zvcig7dCE9PW51bGw7KXtsZXQgbj1zYmUodCxlKTtpZihuKXtpZihuLmdldClyZXR1cm4gV3Mobi5nZXQpO2lmKHR5cGVvZiBuLnZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiBXcyhuLnZhbHVlKX10PWFiZSh0KX1mdW5jdGlvbiByKCl7cmV0dXJuIG51bGx9cmV0dXJuIG8ociwiZmFsbGJhY2tWYWx1ZSIpLHJ9ZnVuY3Rpb24gaUcoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06d2JlKCksZT1vKHl0PT5pRyh5dCksIkRPTVB1cmlmeSIpO2lmKGUudmVyc2lvbj0iMy4yLjEiLGUucmVtb3ZlZD1bXSwhdHx8IXQuZG9jdW1lbnR8fHQuZG9jdW1lbnQubm9kZVR5cGUhPT1xMS5kb2N1bWVudClyZXR1cm4gZS5pc1N1cHBvcnRlZD0hMSxlO2xldHtkb2N1bWVudDpyfT10LG49cixpPW4uY3VycmVudFNjcmlwdCx7RG9jdW1lbnRGcmFnbWVudDphLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6cyxOb2RlOmwsRWxlbWVudDp1LE5vZGVGaWx0ZXI6aCxOYW1lZE5vZGVNYXA6Zj10Lk5hbWVkTm9kZU1hcHx8dC5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZvcm1FbGVtZW50OmQsRE9NUGFyc2VyOnAsdHJ1c3RlZFR5cGVzOm19PXQsZz11LnByb3RvdHlwZSx5PVkxKGcsImNsb25lTm9kZSIpLHY9WTEoZywicmVtb3ZlIikseD1ZMShnLCJuZXh0U2libGluZyIpLGI9WTEoZywiY2hpbGROb2RlcyIpLHc9WTEoZywicGFyZW50Tm9kZSIpO2lmKHR5cGVvZiBzPT0iZnVuY3Rpb24iKXtsZXQgeXQ9ci5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3l0LmNvbnRlbnQmJnl0LmNvbnRlbnQub3duZXJEb2N1bWVudCYmKHI9eXQuY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgXyxUPSIiLHtpbXBsZW1lbnRhdGlvbjpFLGNyZWF0ZU5vZGVJdGVyYXRvcjpMLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6QyxnZXRFbGVtZW50c0J5VGFnTmFtZTpBfT1yLHtpbXBvcnROb2RlOkl9PW4sRD17fTtlLmlzU3VwcG9ydGVkPXR5cGVvZiBlRz09ImZ1bmN0aW9uIiYmdHlwZW9mIHc9PSJmdW5jdGlvbiImJkUmJkUuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2xldHtNVVNUQUNIRV9FWFBSOmssRVJCX0VYUFI6UixUTVBMSVRfRVhQUjpTLERBVEFfQVRUUjpPLEFSSUFfQVRUUjpOLElTX1NDUklQVF9PUl9EQVRBOlAsQVRUUl9XSElURVNQQUNFOkYsQ1VTVE9NX0VMRU1FTlQ6Qn09Snose0lTX0FMTE9XRURfVVJJOiR9PUp6LHo9bnVsbCxXPUFyKHt9LFsuLi5qeiwuLi5lQywuLi50QywuLi5yQywuLi5Lel0pLGo9bnVsbCxLPUFyKHt9LFsuLi5ReiwuLi5uQywuLi5aeiwuLi5YYl0pLGllPU9iamVjdC5zZWFsKHRHKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxRPW51bGwsZWU9bnVsbCxKPSEwLEg9ITAscT0hMSxaPSEwLGFlPSExLHVlPSEwLGNlPSExLHRlPSExLERlPSExLG9lPSExLGtlPSExLEZlPSExLEJlPSEwLFZlPSExLEdlPSJ1c2VyLWNvbnRlbnQtIixIZT0hMCx4ZT0hMSxYPXt9LGZlPW51bGwsaGU9QXIoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKSxnZT1udWxsLG5lPUFyKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSkseWU9bnVsbCxVPUFyKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksVGU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsRWU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEFlPUVlLFBlPSExLE1lPW51bGwsbWU9QXIoe30sW1RlLHNlLEVlXSxKUyksV2U9QXIoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLFJlPUFyKHt9LFsiYW5ub3RhdGlvbi14bWwiXSksdHQ9QXIoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksZ3Q9bnVsbCxFdD1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLHZ0PSJ0ZXh0L2h0bWwiLFllPW51bGwsVHQ9bnVsbCwkZT1yLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxydD1vKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU2UgaW5zdGFuY2VvZiBSZWdFeHB8fFNlIGluc3RhbmNlb2YgRnVuY3Rpb259LCJpc1JlZ2V4T3JGdW5jdGlvbiIpLGZ0PW8oZnVuY3Rpb24oKXtsZXQgU2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O2lmKCEoVHQmJlR0PT09U2UpKXtpZigoIVNlfHx0eXBlb2YgU2UhPSJvYmplY3QiKSYmKFNlPXt9KSxTZT1VZihTZSksZ3Q9RXQuaW5kZXhPZihTZS5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT92dDpTZS5QQVJTRVJfTUVESUFfVFlQRSxZZT1ndD09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP0pTOmpiLHo9dWwoU2UsIkFMTE9XRURfVEFHUyIpP0FyKHt9LFNlLkFMTE9XRURfVEFHUyxZZSk6VyxqPXVsKFNlLCJBTExPV0VEX0FUVFIiKT9Bcih7fSxTZS5BTExPV0VEX0FUVFIsWWUpOkssTWU9dWwoU2UsIkFMTE9XRURfTkFNRVNQQUNFUyIpP0FyKHt9LFNlLkFMTE9XRURfTkFNRVNQQUNFUyxKUyk6bWUseWU9dWwoU2UsIkFERF9VUklfU0FGRV9BVFRSIik/QXIoVWYoVSksU2UuQUREX1VSSV9TQUZFX0FUVFIsWWUpOlUsZ2U9dWwoU2UsIkFERF9EQVRBX1VSSV9UQUdTIik/QXIoVWYobmUpLFNlLkFERF9EQVRBX1VSSV9UQUdTLFllKTpuZSxmZT11bChTZSwiRk9SQklEX0NPTlRFTlRTIik/QXIoe30sU2UuRk9SQklEX0NPTlRFTlRTLFllKTpoZSxRPXVsKFNlLCJGT1JCSURfVEFHUyIpP0FyKHt9LFNlLkZPUkJJRF9UQUdTLFllKTp7fSxlZT11bChTZSwiRk9SQklEX0FUVFIiKT9Bcih7fSxTZS5GT1JCSURfQVRUUixZZSk6e30sWD11bChTZSwiVVNFX1BST0ZJTEVTIik/U2UuVVNFX1BST0ZJTEVTOiExLEo9U2UuQUxMT1dfQVJJQV9BVFRSIT09ITEsSD1TZS5BTExPV19EQVRBX0FUVFIhPT0hMSxxPVNlLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSxaPVNlLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiE9PSExLGFlPVNlLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEsdWU9U2UuU0FGRV9GT1JfWE1MIT09ITEsY2U9U2UuV0hPTEVfRE9DVU1FTlR8fCExLG9lPVNlLlJFVFVSTl9ET018fCExLGtlPVNlLlJFVFVSTl9ET01fRlJBR01FTlR8fCExLEZlPVNlLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLERlPVNlLkZPUkNFX0JPRFl8fCExLEJlPVNlLlNBTklUSVpFX0RPTSE9PSExLFZlPVNlLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxIZT1TZS5LRUVQX0NPTlRFTlQhPT0hMSx4ZT1TZS5JTl9QTEFDRXx8ITEsJD1TZS5BTExPV0VEX1VSSV9SRUdFWFB8fHJHLEFlPVNlLk5BTUVTUEFDRXx8RWUsV2U9U2UuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTfHxXZSxSZT1TZS5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UU3x8UmUsaWU9U2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LFNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZydChTZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoaWUudGFnTmFtZUNoZWNrPVNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksU2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJnJ0KFNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihpZS5hdHRyaWJ1dGVOYW1lQ2hlY2s9U2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxTZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIFNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYoaWUuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPVNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksYWUmJihIPSExKSxrZSYmKG9lPSEwKSxYJiYoej1Bcih7fSxLeiksaj1bXSxYLmh0bWw9PT0hMCYmKEFyKHosanopLEFyKGosUXopKSxYLnN2Zz09PSEwJiYoQXIoeixlQyksQXIoaixuQyksQXIoaixYYikpLFguc3ZnRmlsdGVycz09PSEwJiYoQXIoeix0QyksQXIoaixuQyksQXIoaixYYikpLFgubWF0aE1sPT09ITAmJihBcih6LHJDKSxBcihqLFp6KSxBcihqLFhiKSkpLFNlLkFERF9UQUdTJiYoej09PVcmJih6PVVmKHopKSxBcih6LFNlLkFERF9UQUdTLFllKSksU2UuQUREX0FUVFImJihqPT09SyYmKGo9VWYoaikpLEFyKGosU2UuQUREX0FUVFIsWWUpKSxTZS5BRERfVVJJX1NBRkVfQVRUUiYmQXIoeWUsU2UuQUREX1VSSV9TQUZFX0FUVFIsWWUpLFNlLkZPUkJJRF9DT05URU5UUyYmKGZlPT09aGUmJihmZT1VZihmZSkpLEFyKGZlLFNlLkZPUkJJRF9DT05URU5UUyxZZSkpLEhlJiYoelsiI3RleHQiXT0hMCksY2UmJkFyKHosWyJodG1sIiwiaGVhZCIsImJvZHkiXSksei50YWJsZSYmKEFyKHosWyJ0Ym9keSJdKSxkZWxldGUgUS50Ym9keSksU2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKHR5cGVvZiBTZS5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT0iZnVuY3Rpb24iKXRocm93IFcxKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2YgU2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IFcxKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO189U2UuVFJVU1RFRF9UWVBFU19QT0xJQ1ksVD1fLmNyZWF0ZUhUTUwoIiIpfWVsc2UgXz09PXZvaWQgMCYmKF89VGJlKG0saSkpLF8hPT1udWxsJiZ0eXBlb2YgVD09InN0cmluZyImJihUPV8uY3JlYXRlSFRNTCgiIikpO1dhJiZXYShTZSksVHQ9U2V9fSwiX3BhcnNlQ29uZmlnIiksa3Q9QXIoe30sWy4uLmVDLC4uLnRDLC4uLmhiZV0pLGVyPUFyKHt9LFsuLi5yQywuLi5mYmVdKSxkdD1vKGZ1bmN0aW9uKFNlKXtsZXQgYXQ9dyhTZSk7KCFhdHx8IWF0LnRhZ05hbWUpJiYoYXQ9e25hbWVzcGFjZVVSSTpBZSx0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTtsZXQgQXQ9amIoU2UudGFnTmFtZSkscHI9amIoYXQudGFnTmFtZSk7cmV0dXJuIE1lW1NlLm5hbWVzcGFjZVVSSV0/U2UubmFtZXNwYWNlVVJJPT09c2U/YXQubmFtZXNwYWNlVVJJPT09RWU/QXQ9PT0ic3ZnIjphdC5uYW1lc3BhY2VVUkk9PT1UZT9BdD09PSJzdmciJiYocHI9PT0iYW5ub3RhdGlvbi14bWwifHxXZVtwcl0pOiEha3RbQXRdOlNlLm5hbWVzcGFjZVVSST09PVRlP2F0Lm5hbWVzcGFjZVVSST09PUVlP0F0PT09Im1hdGgiOmF0Lm5hbWVzcGFjZVVSST09PXNlP0F0PT09Im1hdGgiJiZSZVtwcl06ISFlcltBdF06U2UubmFtZXNwYWNlVVJJPT09RWU/YXQubmFtZXNwYWNlVVJJPT09c2UmJiFSZVtwcl18fGF0Lm5hbWVzcGFjZVVSST09PVRlJiYhV2VbcHJdPyExOiFlcltBdF0mJih0dFtBdF18fCFrdFtBdF0pOiEhKGd0PT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJk1lW1NlLm5hbWVzcGFjZVVSSV0pOiExfSwiX2NoZWNrVmFsaWROYW1lc3BhY2UiKSxYZT1vKGZ1bmN0aW9uKFNlKXtVMShlLnJlbW92ZWQse2VsZW1lbnQ6U2V9KTt0cnl7dyhTZSkucmVtb3ZlQ2hpbGQoU2UpfWNhdGNoe3YoU2UpfX0sIl9mb3JjZVJlbW92ZSIpLGN0PW8oZnVuY3Rpb24oU2UsYXQpe3RyeXtVMShlLnJlbW92ZWQse2F0dHJpYnV0ZTphdC5nZXRBdHRyaWJ1dGVOb2RlKFNlKSxmcm9tOmF0fSl9Y2F0Y2h7VTEoZS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmF0fSl9aWYoYXQucmVtb3ZlQXR0cmlidXRlKFNlKSxTZT09PSJpcyImJiFqW1NlXSlpZihvZXx8a2UpdHJ5e1hlKGF0KX1jYXRjaHt9ZWxzZSB0cnl7YXQuc2V0QXR0cmlidXRlKFNlLCIiKX1jYXRjaHt9fSwiX3JlbW92ZUF0dHJpYnV0ZSIpLEx0PW8oZnVuY3Rpb24oU2Upe2xldCBhdD1udWxsLEF0PW51bGw7aWYoRGUpU2U9IjxyZW1vdmU+PC9yZW1vdmU+IitTZTtlbHNle2xldCBPbj1YeihTZSwvXltcclxuXHQgXSsvKTtBdD1PbiYmT25bMF19Z3Q9PT0iYXBwbGljYXRpb24veGh0bWwreG1sIiYmQWU9PT1FZSYmKFNlPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrU2UrIjwvYm9keT48L2h0bWw+Iik7bGV0IHByPV8/Xy5jcmVhdGVIVE1MKFNlKTpTZTtpZihBZT09PUVlKXRyeXthdD1uZXcgcCgpLnBhcnNlRnJvbVN0cmluZyhwcixndCl9Y2F0Y2h7fWlmKCFhdHx8IWF0LmRvY3VtZW50RWxlbWVudCl7YXQ9RS5jcmVhdGVEb2N1bWVudChBZSwidGVtcGxhdGUiLG51bGwpO3RyeXthdC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPVBlP1Q6cHJ9Y2F0Y2h7fX1sZXQgSW49YXQuYm9keXx8YXQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBTZSYmQXQmJkluLmluc2VydEJlZm9yZShyLmNyZWF0ZVRleHROb2RlKEF0KSxJbi5jaGlsZE5vZGVzWzBdfHxudWxsKSxBZT09PUVlP0EuY2FsbChhdCxjZT8iaHRtbCI6ImJvZHkiKVswXTpjZT9hdC5kb2N1bWVudEVsZW1lbnQ6SW59LCJfaW5pdERvY3VtZW50IiksUnQ9byhmdW5jdGlvbihTZSl7cmV0dXJuIEwuY2FsbChTZS5vd25lckRvY3VtZW50fHxTZSxTZSxoLlNIT1dfRUxFTUVOVHxoLlNIT1dfQ09NTUVOVHxoLlNIT1dfVEVYVHxoLlNIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTnxoLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sIl9jcmVhdGVOb2RlSXRlcmF0b3IiKSx6dD1vKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU2UgaW5zdGFuY2VvZiBkJiYodHlwZW9mIFNlLm5vZGVOYW1lIT0ic3RyaW5nInx8dHlwZW9mIFNlLnRleHRDb250ZW50IT0ic3RyaW5nInx8dHlwZW9mIFNlLnJlbW92ZUNoaWxkIT0iZnVuY3Rpb24ifHwhKFNlLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBmKXx8dHlwZW9mIFNlLnJlbW92ZUF0dHJpYnV0ZSE9ImZ1bmN0aW9uInx8dHlwZW9mIFNlLnNldEF0dHJpYnV0ZSE9ImZ1bmN0aW9uInx8dHlwZW9mIFNlLm5hbWVzcGFjZVVSSSE9InN0cmluZyJ8fHR5cGVvZiBTZS5pbnNlcnRCZWZvcmUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBTZS5oYXNDaGlsZE5vZGVzIT0iZnVuY3Rpb24iKX0sIl9pc0Nsb2JiZXJlZCIpLFhuPW8oZnVuY3Rpb24oU2Upe3JldHVybiB0eXBlb2YgbD09ImZ1bmN0aW9uIiYmU2UgaW5zdGFuY2VvZiBsfSwiX2lzTm9kZSIpO2Z1bmN0aW9uIG9yKHl0LFNlLGF0KXtEW3l0XSYmcWIoRFt5dF0sQXQ9PntBdC5jYWxsKGUsU2UsYXQsVHQpfSl9byhvciwiX2V4ZWN1dGVIb29rIik7bGV0IGhuPW8oZnVuY3Rpb24oU2Upe2xldCBhdD1udWxsO2lmKG9yKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIixTZSxudWxsKSx6dChTZSkpcmV0dXJuIFhlKFNlKSwhMDtsZXQgQXQ9WWUoU2Uubm9kZU5hbWUpO2lmKG9yKCJ1cG9uU2FuaXRpemVFbGVtZW50IixTZSx7dGFnTmFtZTpBdCxhbGxvd2VkVGFnczp6fSksU2UuaGFzQ2hpbGROb2RlcygpJiYhWG4oU2UuZmlyc3RFbGVtZW50Q2hpbGQpJiZIYSgvPFsvXHddL2csU2UuaW5uZXJIVE1MKSYmSGEoLzxbL1x3XS9nLFNlLnRleHRDb250ZW50KXx8U2Uubm9kZVR5cGU9PT1xMS5wcm9ncmVzc2luZ0luc3RydWN0aW9ufHx1ZSYmU2Uubm9kZVR5cGU9PT1xMS5jb21tZW50JiZIYSgvPFsvXHddL2csU2UuZGF0YSkpcmV0dXJuIFhlKFNlKSwhMDtpZigheltBdF18fFFbQXRdKXtpZighUVtBdF0mJlVyKEF0KSYmKGllLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmSGEoaWUudGFnTmFtZUNoZWNrLEF0KXx8aWUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJmllLnRhZ05hbWVDaGVjayhBdCkpKXJldHVybiExO2lmKEhlJiYhZmVbQXRdKXtsZXQgcHI9dyhTZSl8fFNlLnBhcmVudE5vZGUsSW49YihTZSl8fFNlLmNoaWxkTm9kZXM7aWYoSW4mJnByKXtsZXQgT249SW4ubGVuZ3RoO2ZvcihsZXQgSXI9T24tMTtJcj49MDstLUlyKXtsZXQga249eShJbltJcl0sITApO2tuLl9fcmVtb3ZhbENvdW50PShTZS5fX3JlbW92YWxDb3VudHx8MCkrMSxwci5pbnNlcnRCZWZvcmUoa24seChTZSkpfX19cmV0dXJuIFhlKFNlKSwhMH1yZXR1cm4gU2UgaW5zdGFuY2VvZiB1JiYhZHQoU2UpfHwoQXQ9PT0ibm9zY3JpcHQifHxBdD09PSJub2VtYmVkInx8QXQ9PT0ibm9mcmFtZXMiKSYmSGEoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksU2UuaW5uZXJIVE1MKT8oWGUoU2UpLCEwKTooYWUmJlNlLm5vZGVUeXBlPT09cTEudGV4dCYmKGF0PVNlLnRleHRDb250ZW50LHFiKFtrLFIsU10scHI9PnthdD1IMShhdCxwciwiICIpfSksU2UudGV4dENvbnRlbnQhPT1hdCYmKFUxKGUucmVtb3ZlZCx7ZWxlbWVudDpTZS5jbG9uZU5vZGUoKX0pLFNlLnRleHRDb250ZW50PWF0KSksb3IoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsU2UsbnVsbCksITEpfSwiX3Nhbml0aXplRWxlbWVudHMiKSxUbj1vKGZ1bmN0aW9uKFNlLGF0LEF0KXtpZihCZSYmKGF0PT09ImlkInx8YXQ9PT0ibmFtZSIpJiYoQXQgaW4gcnx8QXQgaW4gJGUpKXJldHVybiExO2lmKCEoSCYmIWVlW2F0XSYmSGEoTyxhdCkpKXtpZighKEomJkhhKE4sYXQpKSl7aWYoIWpbYXRdfHxlZVthdF0pe2lmKCEoVXIoU2UpJiYoaWUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZIYShpZS50YWdOYW1lQ2hlY2ssU2UpfHxpZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmaWUudGFnTmFtZUNoZWNrKFNlKSkmJihpZS5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkhhKGllLmF0dHJpYnV0ZU5hbWVDaGVjayxhdCl8fGllLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZpZS5hdHRyaWJ1dGVOYW1lQ2hlY2soYXQpKXx8YXQ9PT0iaXMiJiZpZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihpZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkhhKGllLnRhZ05hbWVDaGVjayxBdCl8fGllLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZpZS50YWdOYW1lQ2hlY2soQXQpKSkpcmV0dXJuITF9ZWxzZSBpZigheWVbYXRdKXtpZighSGEoJCxIMShBdCxGLCIiKSkpe2lmKCEoKGF0PT09InNyYyJ8fGF0PT09InhsaW5rOmhyZWYifHxhdD09PSJocmVmIikmJlNlIT09InNjcmlwdCImJm9iZShBdCwiZGF0YToiKT09PTAmJmdlW1NlXSkpe2lmKCEocSYmIUhhKFAsSDEoQXQsRiwiIikpKSl7aWYoQXQpcmV0dXJuITF9fX19fX1yZXR1cm4hMH0sIl9pc1ZhbGlkQXR0cmlidXRlIiksVXI9byhmdW5jdGlvbihTZSl7cmV0dXJuIFNlIT09ImFubm90YXRpb24teG1sIiYmWHooU2UsQil9LCJfaXNCYXNpY0N1c3RvbUVsZW1lbnQiKSxyaT1vKGZ1bmN0aW9uKFNlKXtvcigiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIixTZSxudWxsKTtsZXR7YXR0cmlidXRlczphdH09U2U7aWYoIWF0KXJldHVybjtsZXQgQXQ9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpqLGZvcmNlS2VlcEF0dHI6dm9pZCAwfSxwcj1hdC5sZW5ndGg7Zm9yKDtwci0tOyl7bGV0IEluPWF0W3ByXSx7bmFtZTpPbixuYW1lc3BhY2VVUkk6SXIsdmFsdWU6a259PUluLF90PVllKE9uKSxTdD1Pbj09PSJ2YWx1ZSI/a246bGJlKGtuKTtpZihBdC5hdHRyTmFtZT1fdCxBdC5hdHRyVmFsdWU9U3QsQXQua2VlcEF0dHI9ITAsQXQuZm9yY2VLZWVwQXR0cj12b2lkIDAsb3IoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsU2UsQXQpLFN0PUF0LmF0dHJWYWx1ZSxWZSYmKF90PT09ImlkInx8X3Q9PT0ibmFtZSIpJiYoY3QoT24sU2UpLFN0PUdlK1N0KSx1ZSYmSGEoLygoLS0hP3xdKT4pfDxcLyhzdHlsZXx0aXRsZSkvaSxTdCkpe2N0KE9uLFNlKTtjb250aW51ZX1pZihBdC5mb3JjZUtlZXBBdHRyfHwoY3QoT24sU2UpLCFBdC5rZWVwQXR0cikpY29udGludWU7aWYoIVomJkhhKC9cLz4vaSxTdCkpe2N0KE9uLFNlKTtjb250aW51ZX1hZSYmcWIoW2ssUixTXSxVZT0+e1N0PUgxKFN0LFVlLCIgIil9KTtsZXQgYnQ9WWUoU2Uubm9kZU5hbWUpO2lmKFRuKGJ0LF90LFN0KSl7aWYoXyYmdHlwZW9mIG09PSJvYmplY3QiJiZ0eXBlb2YgbS5nZXRBdHRyaWJ1dGVUeXBlPT0iZnVuY3Rpb24iJiYhSXIpc3dpdGNoKG0uZ2V0QXR0cmlidXRlVHlwZShidCxfdCkpe2Nhc2UiVHJ1c3RlZEhUTUwiOntTdD1fLmNyZWF0ZUhUTUwoU3QpO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1N0PV8uY3JlYXRlU2NyaXB0VVJMKFN0KTticmVha319dHJ5e0lyP1NlLnNldEF0dHJpYnV0ZU5TKElyLE9uLFN0KTpTZS5zZXRBdHRyaWJ1dGUoT24sU3QpLHp0KFNlKT9YZShTZSk6cXooZS5yZW1vdmVkKX1jYXRjaHt9fX1vcigiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLFNlLG51bGwpfSwiX3Nhbml0aXplQXR0cmlidXRlcyIpLE1uPW8oZnVuY3Rpb24geXQoU2Upe2xldCBhdD1udWxsLEF0PVJ0KFNlKTtmb3Iob3IoImJlZm9yZVNhbml0aXplU2hhZG93RE9NIixTZSxudWxsKTthdD1BdC5uZXh0Tm9kZSgpOylvcigidXBvblNhbml0aXplU2hhZG93Tm9kZSIsYXQsbnVsbCksIWhuKGF0KSYmKGF0LmNvbnRlbnQgaW5zdGFuY2VvZiBhJiZ5dChhdC5jb250ZW50KSxyaShhdCkpO29yKCJhZnRlclNhbml0aXplU2hhZG93RE9NIixTZSxudWxsKX0sIl9zYW5pdGl6ZVNoYWRvd0RPTSIpO3JldHVybiBlLnNhbml0aXplPWZ1bmN0aW9uKHl0KXtsZXQgU2U9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGF0PW51bGwsQXQ9bnVsbCxwcj1udWxsLEluPW51bGw7aWYoUGU9IXl0LFBlJiYoeXQ9IjwhLS0+IiksdHlwZW9mIHl0IT0ic3RyaW5nIiYmIVhuKHl0KSlpZih0eXBlb2YgeXQudG9TdHJpbmc9PSJmdW5jdGlvbiIpe2lmKHl0PXl0LnRvU3RyaW5nKCksdHlwZW9mIHl0IT0ic3RyaW5nIil0aHJvdyBXMSgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWVsc2UgdGhyb3cgVzEoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIWUuaXNTdXBwb3J0ZWQpcmV0dXJuIHl0O2lmKHRlfHxmdChTZSksZS5yZW1vdmVkPVtdLHR5cGVvZiB5dD09InN0cmluZyImJih4ZT0hMSkseGUpe2lmKHl0Lm5vZGVOYW1lKXtsZXQga249WWUoeXQubm9kZU5hbWUpO2lmKCF6W2tuXXx8UVtrbl0pdGhyb3cgVzEoInJvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UiKX19ZWxzZSBpZih5dCBpbnN0YW5jZW9mIGwpYXQ9THQoIjwhLS0tLT4iKSxBdD1hdC5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoeXQsITApLEF0Lm5vZGVUeXBlPT09cTEuZWxlbWVudCYmQXQubm9kZU5hbWU9PT0iQk9EWSJ8fEF0Lm5vZGVOYW1lPT09IkhUTUwiP2F0PUF0OmF0LmFwcGVuZENoaWxkKEF0KTtlbHNle2lmKCFvZSYmIWFlJiYhY2UmJnl0LmluZGV4T2YoIjwiKT09PS0xKXJldHVybiBfJiZGZT9fLmNyZWF0ZUhUTUwoeXQpOnl0O2lmKGF0PUx0KHl0KSwhYXQpcmV0dXJuIG9lP251bGw6RmU/VDoiIn1hdCYmRGUmJlhlKGF0LmZpcnN0Q2hpbGQpO2xldCBPbj1SdCh4ZT95dDphdCk7Zm9yKDtwcj1Pbi5uZXh0Tm9kZSgpOylobihwcil8fChwci5jb250ZW50IGluc3RhbmNlb2YgYSYmTW4ocHIuY29udGVudCkscmkocHIpKTtpZih4ZSlyZXR1cm4geXQ7aWYob2Upe2lmKGtlKWZvcihJbj1DLmNhbGwoYXQub3duZXJEb2N1bWVudCk7YXQuZmlyc3RDaGlsZDspSW4uYXBwZW5kQ2hpbGQoYXQuZmlyc3RDaGlsZCk7ZWxzZSBJbj1hdDtyZXR1cm4oai5zaGFkb3dyb290fHxqLnNoYWRvd3Jvb3Rtb2RlKSYmKEluPUkuY2FsbChuLEluLCEwKSksSW59bGV0IElyPWNlP2F0Lm91dGVySFRNTDphdC5pbm5lckhUTUw7cmV0dXJuIGNlJiZ6WyIhZG9jdHlwZSJdJiZhdC5vd25lckRvY3VtZW50JiZhdC5vd25lckRvY3VtZW50LmRvY3R5cGUmJmF0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZIYShuRyxhdC5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihJcj0iPCFET0NUWVBFICIrYXQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtJciksYWUmJnFiKFtrLFIsU10sa249PntJcj1IMShJcixrbiwiICIpfSksXyYmRmU/Xy5jcmVhdGVIVE1MKElyKTpJcn0sZS5zZXRDb25maWc9ZnVuY3Rpb24oKXtsZXQgeXQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O2Z0KHl0KSx0ZT0hMH0sZS5jbGVhckNvbmZpZz1mdW5jdGlvbigpe1R0PW51bGwsdGU9ITF9LGUuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbih5dCxTZSxhdCl7VHR8fGZ0KHt9KTtsZXQgQXQ9WWUoeXQpLHByPVllKFNlKTtyZXR1cm4gVG4oQXQscHIsYXQpfSxlLmFkZEhvb2s9ZnVuY3Rpb24oeXQsU2Upe3R5cGVvZiBTZT09ImZ1bmN0aW9uIiYmKERbeXRdPURbeXRdfHxbXSxVMShEW3l0XSxTZSkpfSxlLnJlbW92ZUhvb2s9ZnVuY3Rpb24oeXQpe2lmKERbeXRdKXJldHVybiBxeihEW3l0XSl9LGUucmVtb3ZlSG9va3M9ZnVuY3Rpb24oeXQpe0RbeXRdJiYoRFt5dF09W10pfSxlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7RD17fX0sZX12YXIgZUcsWXosaWJlLGFiZSxzYmUsV2EsRW8sdEcsaUMsYUMscWIscXosVTEsamIsSlMsWHosSDEsb2JlLGxiZSx1bCxIYSxXMSxqeixlQyx0QyxoYmUsckMsZmJlLEt6LFF6LG5DLFp6LFhiLGRiZSxwYmUsbWJlLGdiZSx5YmUsckcsdmJlLHhiZSxuRyxiYmUsSnoscTEsd2JlLFRiZSxhaCxzQz1NKCgpPT57InVzZSBzdHJpY3QiOyh7ZW50cmllczplRyxzZXRQcm90b3R5cGVPZjpZeixpc0Zyb3plbjppYmUsZ2V0UHJvdG90eXBlT2Y6YWJlLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpzYmV9PU9iamVjdCkse2ZyZWV6ZTpXYSxzZWFsOkVvLGNyZWF0ZTp0R309T2JqZWN0LHthcHBseTppQyxjb25zdHJ1Y3Q6YUN9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtXYXx8KFdhPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGV9LCJmcmVlemUiKSk7RW98fChFbz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwic2VhbCIpKTtpQ3x8KGlDPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlLmFwcGx5KHIsbil9LCJhcHBseSIpKTthQ3x8KGFDPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGUoLi4ucil9LCJjb25zdHJ1Y3QiKSk7cWI9V3MoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLHF6PVdzKEFycmF5LnByb3RvdHlwZS5wb3ApLFUxPVdzKEFycmF5LnByb3RvdHlwZS5wdXNoKSxqYj1XcyhTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxKUz1XcyhTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxYej1XcyhTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxIMT1XcyhTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLG9iZT1XcyhTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGxiZT1XcyhTdHJpbmcucHJvdG90eXBlLnRyaW0pLHVsPVdzKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLEhhPVdzKFJlZ0V4cC5wcm90b3R5cGUudGVzdCksVzE9Y2JlKFR5cGVFcnJvcik7byhXcywidW5hcHBseSIpO28oY2JlLCJ1bmNvbnN0cnVjdCIpO28oQXIsImFkZFRvU2V0Iik7byh1YmUsImNsZWFuQXJyYXkiKTtvKFVmLCJjbG9uZSIpO28oWTEsImxvb2t1cEdldHRlciIpO2p6PVdhKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxlQz1XYShbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksdEM9V2EoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksaGJlPVdhKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxyQz1XYShbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksZmJlPVdhKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxLej1XYShbIiN0ZXh0Il0pLFF6PVdhKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvcG92ZXIiLCJwb3BvdmVydGFyZ2V0IiwicG9wb3ZlcnRhcmdldGFjdGlvbiIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsIndyYXAiLCJ4bWxucyIsInNsb3QiXSksbkM9V2EoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYW1wbGl0dWRlIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJleHBvbmVudCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJpbnRlcmNlcHQiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzbG9wZSIsInNwZWN1bGFyY29uc3RhbnQiLCJzcGVjdWxhcmV4cG9uZW50Iiwic3ByZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJzdGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9rZS1saW5lam9pbiIsInN0cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2VzY2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0YWJsZXZhbHVlcyIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxaej1XYShbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxYYj1XYShbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLGRiZT1FbygvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLHBiZT1FbygvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksbWJlPUVvKC9cJHtbXHdcV10qfS9nbSksZ2JlPUVvKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLHliZT1FbygvXmFyaWEtW1wtXHddKyQvKSxyRz1FbygvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHApOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSx2YmU9RW8oL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLHhiZT1FbygvW1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxuRz1FbygvXmh0bWwkL2kpLGJiZT1FbygvXlthLXpdWy5cd10qKC1bLlx3XSspKyQvaSksSno9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQVJJQV9BVFRSOnliZSxBVFRSX1dISVRFU1BBQ0U6eGJlLENVU1RPTV9FTEVNRU5UOmJiZSxEQVRBX0FUVFI6Z2JlLERPQ1RZUEVfTkFNRTpuRyxFUkJfRVhQUjpwYmUsSVNfQUxMT1dFRF9VUkk6ckcsSVNfU0NSSVBUX09SX0RBVEE6dmJlLE1VU1RBQ0hFX0VYUFI6ZGJlLFRNUExJVF9FWFBSOm1iZX0pLHExPXtlbGVtZW50OjEsYXR0cmlidXRlOjIsdGV4dDozLGNkYXRhU2VjdGlvbjo0LGVudGl0eVJlZmVyZW5jZTo1LGVudGl0eU5vZGU6Nixwcm9ncmVzc2luZ0luc3RydWN0aW9uOjcsY29tbWVudDo4LGRvY3VtZW50OjksZG9jdW1lbnRUeXBlOjEwLGRvY3VtZW50RnJhZ21lbnQ6MTEsbm90YXRpb246MTJ9LHdiZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93fSwiZ2V0R2xvYmFsIiksVGJlPW8oZnVuY3Rpb24oZSxyKXtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fHR5cGVvZiBlLmNyZWF0ZVBvbGljeSE9ImZ1bmN0aW9uIilyZXR1cm4gbnVsbDtsZXQgbj1udWxsLGk9ImRhdGEtdHQtcG9saWN5LXN1ZmZpeCI7ciYmci5oYXNBdHRyaWJ1dGUoaSkmJihuPXIuZ2V0QXR0cmlidXRlKGkpKTtsZXQgYT0iZG9tcHVyaWZ5Iisobj8iIyIrbjoiIik7dHJ5e3JldHVybiBlLmNyZWF0ZVBvbGljeShhLHtjcmVhdGVIVE1MKHMpe3JldHVybiBzfSxjcmVhdGVTY3JpcHRVUkwocyl7cmV0dXJuIHN9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK2ErIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX0sIl9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kiKTtvKGlHLCJjcmVhdGVET01QdXJpZnkiKTthaD1pRygpfSk7dmFyIE4kPXt9O3ZyKE4kLHtkZWZhdWx0OigpPT5nM2V9KTtmdW5jdGlvbiBMYmUodCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKF9iZSxlPT5BYmVbZV0pfWZ1bmN0aW9uIE1iZSh0KXtpZih0LmRlZmF1bHQpcmV0dXJuIHQuZGVmYXVsdDt2YXIgZT10LnR5cGUscj1BcnJheS5pc0FycmF5KGUpP2VbMF06ZTtpZih0eXBlb2YgciE9InN0cmluZyIpcmV0dXJuIHIuZW51bVswXTtzd2l0Y2gocil7Y2FzZSJib29sZWFuIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6cmV0dXJuIiI7Y2FzZSJudW1iZXIiOnJldHVybiAwO2Nhc2Uib2JqZWN0IjpyZXR1cm57fX19ZnVuY3Rpb24gR2JlKHQpe2Zvcih2YXIgZT0wO2U8eEMubGVuZ3RoO2UrKylmb3IodmFyIHI9eENbZV0sbj0wO248ci5ibG9ja3MubGVuZ3RoO24rKyl7dmFyIGk9ci5ibG9ja3Nbbl07aWYodD49aVswXSYmdDw9aVsxXSlyZXR1cm4gci5uYW1lfXJldHVybiBudWxsfWZ1bmN0aW9uIEJHKHQpe2Zvcih2YXIgZT0wO2U8bDQubGVuZ3RoO2UrPTIpaWYodD49bDRbZV0mJnQ8PWw0W2UrMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUWJlKHQsZSl7WmxbdF09ZX1mdW5jdGlvbiBSQyh0LGUscil7aWYoIVpsW2VdKXRocm93IG5ldyBFcnJvcigiRm9udCBtZXRyaWNzIG5vdCBmb3VuZCBmb3IgZm9udDogIitlKyIuIik7dmFyIG49dC5jaGFyQ29kZUF0KDApLGk9WmxbZV1bbl07aWYoIWkmJnRbMF1pbiBzRyYmKG49c0dbdFswXV0uY2hhckNvZGVBdCgwKSxpPVpsW2VdW25dKSwhaSYmcj09PSJ0ZXh0IiYmQkcobikmJihpPVpsW2VdWzc3XSksaSlyZXR1cm57ZGVwdGg6aVswXSxoZWlnaHQ6aVsxXSxpdGFsaWM6aVsyXSxza2V3OmlbM10sd2lkdGg6aVs0XX19ZnVuY3Rpb24gWmJlKHQpe3ZhciBlO2lmKHQ+PTU/ZT0wOnQ+PTM/ZT0xOmU9Miwhb0NbZV0pe3ZhciByPW9DW2VdPXtjc3NFbVBlck11OktiLnF1YWRbZV0vMTh9O2Zvcih2YXIgbiBpbiBLYilLYi5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09S2Jbbl1bZV0pfXJldHVybiBvQ1tlXX1mdW5jdGlvbiBjRyh0KXtpZih0IGluc3RhbmNlb2YgbXMpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgIitTdHJpbmcodCkrIi4iKX1mdW5jdGlvbiByNGUodCl7aWYodCBpbnN0YW5jZW9mIHFmKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCAiK1N0cmluZyh0KSsiLiIpfWZ1bmN0aW9uIEcodCxlLHIsbixpLGEpe0VuW3RdW2ldPXtmb250OmUsZ3JvdXA6cixyZXBsYWNlOm59LGEmJm4mJihFblt0XVtuXT1Fblt0XVtpXSl9ZnVuY3Rpb24gQ3QodCl7Zm9yKHZhcnt0eXBlOmUsbmFtZXM6cixwcm9wczpuLGhhbmRsZXI6aSxodG1sQnVpbGRlcjphLG1hdGhtbEJ1aWxkZXI6c309dCxsPXt0eXBlOmUsbnVtQXJnczpuLm51bUFyZ3MsYXJnVHlwZXM6bi5hcmdUeXBlcyxhbGxvd2VkSW5Bcmd1bWVudDohIW4uYWxsb3dlZEluQXJndW1lbnQsYWxsb3dlZEluVGV4dDohIW4uYWxsb3dlZEluVGV4dCxhbGxvd2VkSW5NYXRoOm4uYWxsb3dlZEluTWF0aD09PXZvaWQgMD8hMDpuLmFsbG93ZWRJbk1hdGgsbnVtT3B0aW9uYWxBcmdzOm4ubnVtT3B0aW9uYWxBcmdzfHwwLGluZml4OiEhbi5pbmZpeCxwcmltaXRpdmU6ISFuLnByaW1pdGl2ZSxoYW5kbGVyOml9LHU9MDt1PHIubGVuZ3RoOysrdSlxR1tyW3VdXT1sO2UmJihhJiYoZjRbZV09YSkscyYmKGQ0W2VdPXMpKX1mdW5jdGlvbiBYZih0KXt2YXJ7dHlwZTplLGh0bWxCdWlsZGVyOnIsbWF0aG1sQnVpbGRlcjpufT10O0N0KHt0eXBlOmUsbmFtZXM6W10scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcigpe3Rocm93IG5ldyBFcnJvcigiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4iKX0saHRtbEJ1aWxkZXI6cixtYXRobWxCdWlsZGVyOm59KX1mdW5jdGlvbiBuNCh0LGUpe3ZhciByPWl1KFsiYmFzZSJdLHQsZSksbj1pdShbInN0cnV0Il0pO3JldHVybiBuLnN0eWxlLmhlaWdodD1tdChyLmhlaWdodCtyLmRlcHRoKSxyLmRlcHRoJiYobi5zdHlsZS52ZXJ0aWNhbEFsaWduPW10KC1yLmRlcHRoKSksci5jaGlsZHJlbi51bnNoaWZ0KG4pLHJ9ZnVuY3Rpb24gRUModCxlKXt2YXIgcj1udWxsO3QubGVuZ3RoPT09MSYmdFswXS50eXBlPT09InRhZyImJihyPXRbMF0udGFnLHQ9dFswXS5ib2R5KTt2YXIgbj1JaSh0LGUsInJvb3QiKSxpO24ubGVuZ3RoPT09MiYmblsxXS5oYXNDbGFzcygidGFnIikmJihpPW4ucG9wKCkpO2Zvcih2YXIgYT1bXSxzPVtdLGw9MDtsPG4ubGVuZ3RoO2wrKylpZihzLnB1c2gobltsXSksbltsXS5oYXNDbGFzcygibWJpbiIpfHxuW2xdLmhhc0NsYXNzKCJtcmVsIil8fG5bbF0uaGFzQ2xhc3MoImFsbG93YnJlYWsiKSl7Zm9yKHZhciB1PSExO2w8bi5sZW5ndGgtMSYmbltsKzFdLmhhc0NsYXNzKCJtc3BhY2UiKSYmIW5bbCsxXS5oYXNDbGFzcygibmV3bGluZSIpOylsKysscy5wdXNoKG5bbF0pLG5bbF0uaGFzQ2xhc3MoIm5vYnJlYWsiKSYmKHU9ITApO3V8fChhLnB1c2gobjQocyxlKSkscz1bXSl9ZWxzZSBuW2xdLmhhc0NsYXNzKCJuZXdsaW5lIikmJihzLnBvcCgpLHMubGVuZ3RoPjAmJihhLnB1c2gobjQocyxlKSkscz1bXSksYS5wdXNoKG5bbF0pKTtzLmxlbmd0aD4wJiZhLnB1c2gobjQocyxlKSk7dmFyIGg7cj8oaD1uNChJaShyLGUsITApKSxoLmNsYXNzZXM9WyJ0YWciXSxhLnB1c2goaCkpOmkmJmEucHVzaChpKTt2YXIgZj1pdShbImthdGV4LWh0bWwiXSxhKTtpZihmLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksaCl7dmFyIGQ9aC5jaGlsZHJlblswXTtkLnN0eWxlLmhlaWdodD1tdChmLmhlaWdodCtmLmRlcHRoKSxmLmRlcHRoJiYoZC5zdHlsZS52ZXJ0aWNhbEFsaWduPW10KC1mLmRlcHRoKSl9cmV0dXJuIGZ9ZnVuY3Rpb24gakcodCl7cmV0dXJuIG5ldyBZZih0KX1mdW5jdGlvbiBwRyh0LGUscixuLGkpe3ZhciBhPWdzKHQsciksczthLmxlbmd0aD09PTEmJmFbMF1pbnN0YW5jZW9mIHBzJiZKdC5jb250YWlucyhbIm1yb3ciLCJtdGFibGUiXSxhWzBdLnR5cGUpP3M9YVswXTpzPW5ldyBzdC5NYXRoTm9kZSgibXJvdyIsYSk7dmFyIGw9bmV3IHN0Lk1hdGhOb2RlKCJhbm5vdGF0aW9uIixbbmV3IHN0LlRleHROb2RlKGUpXSk7bC5zZXRBdHRyaWJ1dGUoImVuY29kaW5nIiwiYXBwbGljYXRpb24veC10ZXgiKTt2YXIgdT1uZXcgc3QuTWF0aE5vZGUoInNlbWFudGljcyIsW3MsbF0pLGg9bmV3IHN0Lk1hdGhOb2RlKCJtYXRoIixbdV0pO2guc2V0QXR0cmlidXRlKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiKSxuJiZoLnNldEF0dHJpYnV0ZSgiZGlzcGxheSIsImJsb2NrIik7dmFyIGY9aT8ia2F0ZXgiOiJrYXRleC1tYXRobWwiO3JldHVybiBJZS5tYWtlU3BhbihbZl0sW2hdKX1mdW5jdGlvbiB5cih0LGUpe2lmKCF0fHx0LnR5cGUhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlICIrZSsiLCBidXQgZ290ICIrKHQ/Im5vZGUgb2YgdHlwZSAiK3QudHlwZTpTdHJpbmcodCkpKTtyZXR1cm4gdH1mdW5jdGlvbiBQQyh0KXt2YXIgZT14NCh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUgb2Ygc3ltYm9sIGdyb3VwIHR5cGUsIGJ1dCBnb3QgIisodD8ibm9kZSBvZiB0eXBlICIrdC50eXBlOlN0cmluZyh0KSkpO3JldHVybiBlfWZ1bmN0aW9uIHg0KHQpe3JldHVybiB0JiYodC50eXBlPT09ImF0b20ifHxpNGUuaGFzT3duUHJvcGVydHkodC50eXBlKSk/dDpudWxsfWZ1bmN0aW9uIEpHKHQsZSl7dmFyIHI9SWkodC5ib2R5LGUsITApO3JldHVybiBJNGUoW3QubWNsYXNzXSxyLGUpfWZ1bmN0aW9uIGUkKHQsZSl7dmFyIHIsbj1ncyh0LmJvZHksZSk7cmV0dXJuIHQubWNsYXNzPT09Im1pbm5lciI/cj1uZXcgc3QuTWF0aE5vZGUoIm1wYWRkZWQiLG4pOnQubWNsYXNzPT09Im1vcmQiP3QuaXNDaGFyYWN0ZXJCb3g/KHI9blswXSxyLnR5cGU9Im1pIik6cj1uZXcgc3QuTWF0aE5vZGUoIm1pIixuKToodC5pc0NoYXJhY3RlckJveD8ocj1uWzBdLHIudHlwZT0ibW8iKTpyPW5ldyBzdC5NYXRoTm9kZSgibW8iLG4pLHQubWNsYXNzPT09Im1iaW4iPyhyLmF0dHJpYnV0ZXMubHNwYWNlPSIwLjIyZW0iLHIuYXR0cmlidXRlcy5yc3BhY2U9IjAuMjJlbSIpOnQubWNsYXNzPT09Im1wdW5jdCI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4xN2VtIik6dC5tY2xhc3M9PT0ibW9wZW4ifHx0Lm1jbGFzcz09PSJtY2xvc2UiPyhyLmF0dHJpYnV0ZXMubHNwYWNlPSIwZW0iLHIuYXR0cmlidXRlcy5yc3BhY2U9IjBlbSIpOnQubWNsYXNzPT09Im1pbm5lciImJihyLmF0dHJpYnV0ZXMubHNwYWNlPSIwLjA1NTZlbSIsci5hdHRyaWJ1dGVzLndpZHRoPSIrMC4xMTExZW0iKSkscn1mdW5jdGlvbiBCNGUodCxlLHIpe3ZhciBuPU80ZVt0XTtzd2l0Y2gobil7Y2FzZSJcXFxcY2RyaWdodGFycm93IjpjYXNlIlxcXFxjZGxlZnRhcnJvdyI6cmV0dXJuIHIuY2FsbEZ1bmN0aW9uKG4sW2VbMF1dLFtlWzFdXSk7Y2FzZSJcXHVwYXJyb3ciOmNhc2UiXFxkb3duYXJyb3ciOnt2YXIgaT1yLmNhbGxGdW5jdGlvbigiXFxcXGNkbGVmdCIsW2VbMF1dLFtdKSxhPXt0eXBlOiJhdG9tIix0ZXh0Om4sbW9kZToibWF0aCIsZmFtaWx5OiJyZWwifSxzPXIuY2FsbEZ1bmN0aW9uKCJcXEJpZyIsW2FdLFtdKSxsPXIuY2FsbEZ1bmN0aW9uKCJcXFxcY2RyaWdodCIsW2VbMV1dLFtdKSx1PXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbaSxzLGxdfTtyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcXFxjZHBhcmVudCIsW3VdLFtdKX1jYXNlIlxcXFxjZGxvbmdlcXVhbCI6cmV0dXJuIHIuY2FsbEZ1bmN0aW9uKCJcXFxcY2Rsb25nZXF1YWwiLFtdLFtdKTtjYXNlIlxcVmVydCI6e3ZhciBoPXt0eXBlOiJ0ZXh0b3JkIix0ZXh0OiJcXFZlcnQiLG1vZGU6Im1hdGgifTtyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcQmlnIixbaF0sW10pfWRlZmF1bHQ6cmV0dXJue3R5cGU6InRleHRvcmQiLHRleHQ6IiAiLG1vZGU6Im1hdGgifX19ZnVuY3Rpb24gRjRlKHQpe3ZhciBlPVtdO2Zvcih0Lmd1bGxldC5iZWdpbkdyb3VwKCksdC5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksdC5ndWxsZXQuYmVnaW5Hcm91cCgpOzspe2UucHVzaCh0LnBhcnNlRXhwcmVzc2lvbighMSwiXFxcXCIpKSx0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgcj10LmZldGNoKCkudGV4dDtpZihyPT09IiYifHxyPT09IlxcXFwiKXQuY29uc3VtZSgpO2Vsc2UgaWYocj09PSJcXGVuZCIpe2VbZS5sZW5ndGgtMV0ubGVuZ3RoPT09MCYmZS5wb3AoKTticmVha31lbHNlIHRocm93IG5ldyB1dCgiRXhwZWN0ZWQgXFxcXCBvciBcXGNyIG9yIFxcZW5kIix0Lm5leHRUb2tlbil9Zm9yKHZhciBuPVtdLGk9W25dLGE9MDthPGUubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPWVbYV0sbD1tRygpLHU9MDt1PHMubGVuZ3RoO3UrKylpZighZ0coc1t1XSkpbC5ib2R5LnB1c2goc1t1XSk7ZWxzZXtuLnB1c2gobCksdSs9MTt2YXIgaD1QQyhzW3VdKS50ZXh0LGY9bmV3IEFycmF5KDIpO2lmKGZbMF09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSxmWzFdPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbXX0sISgiPXwuIi5pbmRleE9mKGgpPi0xKSlpZigiPD5BViIuaW5kZXhPZihoKT4tMSlmb3IodmFyIGQ9MDtkPDI7ZCsrKXtmb3IodmFyIHA9ITAsbT11KzE7bTxzLmxlbmd0aDttKyspe2lmKFA0ZShzW21dLGgpKXtwPSExLHU9bTticmVha31pZihnRyhzW21dKSl0aHJvdyBuZXcgdXQoIk1pc3NpbmcgYSAiK2grIiBjaGFyYWN0ZXIgdG8gY29tcGxldGUgYSBDRCBhcnJvdy4iLHNbbV0pO2ZbZF0uYm9keS5wdXNoKHNbbV0pfWlmKHApdGhyb3cgbmV3IHV0KCJNaXNzaW5nIGEgIitoKyIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuIixzW3VdKX1lbHNlIHRocm93IG5ldyB1dCgnRXhwZWN0ZWQgb25lIG9mICI8PkFWPXwuIiBhZnRlciBAJyxzW3VdKTt2YXIgZz1CNGUoaCxmLHQpLHk9e3R5cGU6InN0eWxpbmciLGJvZHk6W2ddLG1vZGU6Im1hdGgiLHN0eWxlOiJkaXNwbGF5In07bi5wdXNoKHkpLGw9bUcoKX1hJTI9PT0wP24ucHVzaChsKTpuLnNoaWZ0KCksbj1bXSxpLnB1c2gobil9dC5ndWxsZXQuZW5kR3JvdXAoKSx0Lmd1bGxldC5lbmRHcm91cCgpO3ZhciB2PW5ldyBBcnJheShpWzBdLmxlbmd0aCkuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOiJjIixwcmVnYXA6LjI1LHBvc3RnYXA6LjI1fSk7cmV0dXJue3R5cGU6ImFycmF5Iixtb2RlOiJtYXRoIixib2R5OmksYXJyYXlzdHJldGNoOjEsYWRkSm90OiEwLHJvd0dhcHM6W251bGxdLGNvbHM6dixjb2xTZXBhcmF0aW9uVHlwZToiQ0QiLGhMaW5lc0JlZm9yZVJvdzpuZXcgQXJyYXkoaS5sZW5ndGgrMSkuZmlsbChbXSl9fWZ1bmN0aW9uIHc0KHQsZSl7dmFyIHI9eDQodCk7aWYociYmSnQuY29udGFpbnMoUTRlLHIudGV4dCkpcmV0dXJuIHI7dGhyb3cgcj9uZXcgdXQoIkludmFsaWQgZGVsaW1pdGVyICciK3IudGV4dCsiJyBhZnRlciAnIitlLmZ1bmNOYW1lKyInIix0KTpuZXcgdXQoIkludmFsaWQgZGVsaW1pdGVyIHR5cGUgJyIrdC50eXBlKyInIix0KX1mdW5jdGlvbiB2Ryh0KXtpZighdC5ib2R5KXRocm93IG5ldyBFcnJvcigiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLiIpfWZ1bmN0aW9uIGVjKHQpe2Zvcih2YXJ7dHlwZTplLG5hbWVzOnIscHJvcHM6bixoYW5kbGVyOmksaHRtbEJ1aWxkZXI6YSxtYXRobWxCdWlsZGVyOnN9PXQsbD17dHlwZTplLG51bUFyZ3M6bi5udW1BcmdzfHwwLGFsbG93ZWRJblRleHQ6ITEsbnVtT3B0aW9uYWxBcmdzOjAsaGFuZGxlcjppfSx1PTA7dTxyLmxlbmd0aDsrK3UpZCRbclt1XV09bDthJiYoZjRbZV09YSkscyYmKGQ0W2VdPXMpfWZ1bmN0aW9uIGxlKHQsZSl7cCRbdF09ZX1mdW5jdGlvbiB4Ryh0KXt2YXIgZT1bXTt0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcj10LmZldGNoKCkudGV4dDtmb3Iocj09PSJcXHJlbGF4IiYmKHQuY29uc3VtZSgpLHQuY29uc3VtZVNwYWNlcygpLHI9dC5mZXRjaCgpLnRleHQpO3I9PT0iXFxobGluZSJ8fHI9PT0iXFxoZGFzaGxpbmUiOyl0LmNvbnN1bWUoKSxlLnB1c2gocj09PSJcXGhkYXNobGluZSIpLHQuY29uc3VtZVNwYWNlcygpLHI9dC5mZXRjaCgpLnRleHQ7cmV0dXJuIGV9ZnVuY3Rpb24gJEModCl7aWYodC5pbmRleE9mKCJlZCIpPT09LTEpcmV0dXJuIHQuaW5kZXhPZigiKiIpPT09LTF9ZnVuY3Rpb24gdWgodCxlLHIpe3Zhcntoc2tpcEJlZm9yZUFuZEFmdGVyOm4sYWRkSm90OmksY29sczphLGFycmF5c3RyZXRjaDpzLGNvbFNlcGFyYXRpb25UeXBlOmwsYXV0b1RhZzp1LHNpbmdsZVJvdzpoLGVtcHR5U2luZ2xlUm93OmYsbWF4TnVtQ29sczpkLGxlcW5vOnB9PWU7aWYodC5ndWxsZXQuYmVnaW5Hcm91cCgpLGh8fHQuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3IiLCJcXFxcXFxyZWxheCIpLCFzKXt2YXIgbT10Lmd1bGxldC5leHBhbmRNYWNyb0FzVGV4dCgiXFxhcnJheXN0cmV0Y2giKTtpZihtPT1udWxsKXM9MTtlbHNlIGlmKHM9cGFyc2VGbG9hdChtKSwhc3x8czwwKXRocm93IG5ldyB1dCgiSW52YWxpZCBcXGFycmF5c3RyZXRjaDogIittKX10Lmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGc9W10seT1bZ10sdj1bXSx4PVtdLGI9dSE9bnVsbD9bXTp2b2lkIDA7ZnVuY3Rpb24gdygpe3UmJnQuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcQGVxbnN3IiwiMSIsITApfW8odywiYmVnaW5Sb3ciKTtmdW5jdGlvbiBfKCl7YiYmKHQuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIik/KGIucHVzaCh0LnN1YnBhcnNlKFtuZXcgQ28oIlxcZGZAdGFnIildKSksdC5ndWxsZXQubWFjcm9zLnNldCgiXFxkZkB0YWciLHZvaWQgMCwhMCkpOmIucHVzaCghIXUmJnQuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcQGVxbnN3Iik9PT0iMSIpKX1mb3IobyhfLCJlbmRSb3ciKSx3KCkseC5wdXNoKHhHKHQpKTs7KXt2YXIgVD10LnBhcnNlRXhwcmVzc2lvbighMSxoPyJcXGVuZCI6IlxcXFwiKTt0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmJlZ2luR3JvdXAoKSxUPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0Lm1vZGUsYm9keTpUfSxyJiYoVD17dHlwZToic3R5bGluZyIsbW9kZTp0Lm1vZGUsc3R5bGU6cixib2R5OltUXX0pLGcucHVzaChUKTt2YXIgRT10LmZldGNoKCkudGV4dDtpZihFPT09IiYiKXtpZihkJiZnLmxlbmd0aD09PWQpe2lmKGh8fGwpdGhyb3cgbmV3IHV0KCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJiIsdC5uZXh0VG9rZW4pO3Quc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ0ZXh0RW52IiwiVG9vIGZldyBjb2x1bW5zIHNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuIil9dC5jb25zdW1lKCl9ZWxzZSBpZihFPT09IlxcZW5kIil7XygpLGcubGVuZ3RoPT09MSYmVC50eXBlPT09InN0eWxpbmciJiZULmJvZHlbMF0uYm9keS5sZW5ndGg9PT0wJiYoeS5sZW5ndGg+MXx8IWYpJiZ5LnBvcCgpLHgubGVuZ3RoPHkubGVuZ3RoKzEmJngucHVzaChbXSk7YnJlYWt9ZWxzZSBpZihFPT09IlxcXFwiKXt0LmNvbnN1bWUoKTt2YXIgTD12b2lkIDA7dC5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSIgIiYmKEw9dC5wYXJzZVNpemVHcm91cCghMCkpLHYucHVzaChMP0wudmFsdWU6bnVsbCksXygpLHgucHVzaCh4Ryh0KSksZz1bXSx5LnB1c2goZyksdygpfWVsc2UgdGhyb3cgbmV3IHV0KCJFeHBlY3RlZCAmIG9yIFxcXFwgb3IgXFxjciBvciBcXGVuZCIsdC5uZXh0VG9rZW4pfXJldHVybiB0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmVuZEdyb3VwKCkse3R5cGU6ImFycmF5Iixtb2RlOnQubW9kZSxhZGRKb3Q6aSxhcnJheXN0cmV0Y2g6cyxib2R5OnksY29sczphLHJvd0dhcHM6dixoc2tpcEJlZm9yZUFuZEFmdGVyOm4saExpbmVzQmVmb3JlUm93OngsY29sU2VwYXJhdGlvblR5cGU6bCx0YWdzOmIsbGVxbm86cH19ZnVuY3Rpb24gVkModCl7cmV0dXJuIHQuc2xpY2UoMCwxKT09PSJkIj8iZGlzcGxheSI6InRleHQifWZ1bmN0aW9uIGskKHQsZSxyKXtmb3IodmFyIG49SWkodCxlLCExKSxpPWUuc2l6ZU11bHRpcGxpZXIvci5zaXplTXVsdGlwbGllcixhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0uY2xhc3Nlcy5pbmRleE9mKCJzaXppbmciKTtzPDA/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoblthXS5jbGFzc2VzLGUuc2l6aW5nQ2xhc3NlcyhyKSk6blthXS5jbGFzc2VzW3MrMV09PT0icmVzZXQtc2l6ZSIrZS5zaXplJiYoblthXS5jbGFzc2VzW3MrMV09InJlc2V0LXNpemUiK3Iuc2l6ZSksblthXS5oZWlnaHQqPWksblthXS5kZXB0aCo9aX1yZXR1cm4gSWUubWFrZUZyYWdtZW50KG4pfXZhciBZcyxDbyx1dCxrYmUsRWJlLFNiZSxDYmUsQWJlLF9iZSxQRyxEYmUsTmJlLFJiZSxKdCxvNCxaMSxLbCxOQyxjNCxocCxydSxKMSxTbyxmcCxZYSxRbCxJYmUsT2JlLFBiZSxCYmUsRmJlLHpiZSxycix4QyxsNCx1cCwkYmUsVmJlLFViZSxIYmUsV2JlLFliZSxxYmUsWGJlLGpiZSxhRyxLYmUsWWYsWmwsS2Isc0csb0MsSmJlLG9HLGxHLHU0LGJDLGU0ZSxGRyxRbixtdCxsaCx6RyxHRywkRyxxZixleSx3Qyx0NGUsbXMsZmwsSmwsdHksbjRlLGk0ZSxFbixWLGl0LHJlLHZlLCRuLE50LHFhLGRwLHRyLFRpLHFzLHk0LHdlLHN1LF9lLFZHLHVHLGxDLFFiLGhHLGNDLFpiLGg0LFgxLEpiLHNyLGpuLEVhLGV1LHNoLFRDLGoxLGU0LHQ0LGZHLGE0ZSx2NCxobCxzNGUsbzRlLGw0ZSxjNGUsdTRlLE1DLGRzLFVHLGg0ZSxmNGUsSEcsZDRlLHA0ZSxtNGUsZzRlLHI0LFdHLFlHLHk0ZSxJZSxLbixIZix0dSx2NGUseDRlLHFHLGY0LGQ0LHA0LGRpLGl1LGI0ZSx3NGUsVDRlLGs0ZSxJaSxkRyxYRyxFNGUsa0MscnksT3IscHMsV2YsU0Msc3QsQW8sSUMsT0MsZ3MsY2gsbW4sS0csUUcsUzRlLEM0ZSxBNGUsXzRlLEw0ZSxENGUsTjRlLFI0ZSxhdSxCQyxaRyxNNGUsaTQsSTRlLGI0LE80ZSxtRyxnRyxQNGUsdCQsciQsQ0MsbiQsejRlLGkkLEsxLEZDLGEkLEc0ZSwkNGUscyQsdUMsaEMsQUMsYTQsVjRlLFU0ZSxvJCxmQyxkQyxwQyxINGUsbCQsVzRlLGMkLFExLFk0ZSxxNGUsWDRlLHUkLGo0ZSxoJCxmJCxLNGUsbnUseUcsUTRlLHpDLEdDLGQkLHAkLFQ0LHRjLFo0ZSxyYyxtJCxiRyxnJCx5JCx3Ryx2JCxVQyxIQyxURyxrRyx4JCxKNGUsbUMsRUcsYiQsdyQscHAsbnksZTNlLHQzZSxUJCxyM2UsU0csbjNlLENHLGkzZSxFJCxnQyx5QyxBRyxfRyxMRyxhM2UsREcsTkcsb2gsUyQsczNlLG8zZSxsM2UsYzNlLF9DLHUzZSxoM2UsbTQsTEMsZjNlLFJHLFdDLE1HLFlDLEMkLEEkLF8kLERDLElHLHM0LHZDLE9HLGc0LHFDLEwkLGQzZSxwM2UsRCQsWEMsbTNlLGczZSxSJD1NKCgpPT57InVzZSBzdHJpY3QiO1lzPWNsYXNzIHR7c3RhdGlje28odGhpcywiU291cmNlTG9jYXRpb24iKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9ZSx0aGlzLnN0YXJ0PXIsdGhpcy5lbmQ9bn1zdGF0aWMgcmFuZ2UoZSxyKXtyZXR1cm4gcj8hZXx8IWUubG9jfHwhci5sb2N8fGUubG9jLmxleGVyIT09ci5sb2MubGV4ZXI/bnVsbDpuZXcgdChlLmxvYy5sZXhlcixlLmxvYy5zdGFydCxyLmxvYy5lbmQpOmUmJmUubG9jfX0sQ289Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUb2tlbiIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmxvYz12b2lkIDAsdGhpcy5ub2V4cGFuZD12b2lkIDAsdGhpcy50cmVhdEFzUmVsYXg9dm9pZCAwLHRoaXMudGV4dD1lLHRoaXMubG9jPXJ9cmFuZ2UoZSxyKXtyZXR1cm4gbmV3IHQocixZcy5yYW5nZSh0aGlzLGUpKX19LHV0PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5uYW1lPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLmxlbmd0aD12b2lkIDAsdGhpcy5yYXdNZXNzYWdlPXZvaWQgMDt2YXIgbj0iS2FUZVggcGFyc2UgZXJyb3I6ICIrZSxpLGEscz1yJiZyLmxvYztpZihzJiZzLnN0YXJ0PD1zLmVuZCl7dmFyIGw9cy5sZXhlci5pbnB1dDtpPXMuc3RhcnQsYT1zLmVuZCxpPT09bC5sZW5ndGg/bis9IiBhdCBlbmQgb2YgaW5wdXQ6ICI6bis9IiBhdCBwb3NpdGlvbiAiKyhpKzEpKyI6ICI7dmFyIHU9bC5zbGljZShpLGEpLnJlcGxhY2UoL1teXS9nLCIkJlx1MDMzMiIpLGg7aT4xNT9oPSJcdTIwMjYiK2wuc2xpY2UoaS0xNSxpKTpoPWwuc2xpY2UoMCxpKTt2YXIgZjthKzE1PGwubGVuZ3RoP2Y9bC5zbGljZShhLGErMTUpKyJcdTIwMjYiOmY9bC5zbGljZShhKSxuKz1oK3UrZn12YXIgZD1uZXcgRXJyb3Iobik7cmV0dXJuIGQubmFtZT0iUGFyc2VFcnJvciIsZC5fX3Byb3RvX189dC5wcm90b3R5cGUsZC5wb3NpdGlvbj1pLGkhPW51bGwmJmEhPW51bGwmJihkLmxlbmd0aD1hLWkpLGQucmF3TWVzc2FnZT1lLGR9fTt1dC5wcm90b3R5cGUuX19wcm90b19fPUVycm9yLnByb3RvdHlwZTtrYmU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmluZGV4T2YocikhPT0tMX0sImNvbnRhaW5zIiksRWJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXZvaWQgMD9yOmV9LCJkZWZsdCIpLFNiZT0vKFtBLVpdKS9nLENiZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoU2JlLCItJDEiKS50b0xvd2VyQ2FzZSgpfSwiaHlwaGVuYXRlIiksQWJlPXsiJiI6IiZhbXA7IiwiPiI6IiZndDsiLCI8IjoiJmx0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7In0sX2JlPS9bJj48IiddL2c7byhMYmUsImVzY2FwZSIpO1BHPW8oZnVuY3Rpb24gdChlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwInx8ZS50eXBlPT09ImNvbG9yIj9lLmJvZHkubGVuZ3RoPT09MT90KGUuYm9keVswXSk6ZTplLnR5cGU9PT0iZm9udCI/dChlLmJvZHkpOmV9LCJnZXRCYXNlRWxlbSIpLERiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPVBHKGUpO3JldHVybiByLnR5cGU9PT0ibWF0aG9yZCJ8fHIudHlwZT09PSJ0ZXh0b3JkInx8ci50eXBlPT09ImF0b20ifSwiaXNDaGFyYWN0ZXJCb3giKSxOYmU9byhmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICIrU3RyaW5nKGUpKTtyZXR1cm4gZX0sImFzc2VydCIpLFJiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPS9eW1x4MDAtXHgyMF0qKFteXFwvIz9dKj8pKDp8JiMwKjU4fCYjeDAqM2F8JmNvbG9uKS9pLmV4ZWMoZSk7cmV0dXJuIHI/clsyXSE9PSI6Inx8IS9eW2EtekEtWl1bYS16QS1aMC05K1wtLl0qJC8udGVzdChyWzFdKT9udWxsOnJbMV0udG9Mb3dlckNhc2UoKToiX3JlbGF0aXZlIn0sInByb3RvY29sRnJvbVVybCIpLEp0PXtjb250YWluczprYmUsZGVmbHQ6RWJlLGVzY2FwZTpMYmUsaHlwaGVuYXRlOkNiZSxnZXRCYXNlRWxlbTpQRyxpc0NoYXJhY3RlckJveDpEYmUscHJvdG9jb2xGcm9tVXJsOlJiZX0sbzQ9e2Rpc3BsYXlNb2RlOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIGRpc3BsYXkgc3R5bGUgKHNvIFxcaW50IGFuZCBcXHN1bSBhcmUgbGFyZ2UsIGZvciBleGFtcGxlKSwgYW5kIGNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLiIsY2xpOiItZCwgLS1kaXNwbGF5LW1vZGUifSxvdXRwdXQ6e3R5cGU6e2VudW06WyJodG1sQW5kTWF0aG1sIiwiaHRtbCIsIm1hdGhtbCJdfSxkZXNjcmlwdGlvbjoiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuIixjbGk6Ii1GLCAtLWZvcm1hdCA8dHlwZT4ifSxsZXFubzp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246IlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLiJ9LGZsZXFuOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LiJ9LHRocm93T25FcnJvcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxjbGk6Ii10LCAtLW5vLXRocm93LW9uLWVycm9yIixjbGlEZXNjcmlwdGlvbjoiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBQYXJzZUVycm9yIGV4Y2VwdGlvbiB3aGVuIGVuY291bnRlcmluZyBhbiBlcnJvci4ifSxlcnJvckNvbG9yOnt0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiNjYzAwMDAiLGNsaToiLWMsIC0tZXJyb3ItY29sb3IgPGNvbG9yPiIsY2xpRGVzY3JpcHRpb246IkEgY29sb3Igc3RyaW5nIGdpdmVuIGluIHRoZSBmb3JtYXQgJ3JnYicgb3IgJ3JyZ2diYicgKG5vICMpLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb2xvciBvZiBlcnJvcnMgcmVuZGVyZWQgYnkgdGhlIC10IG9wdGlvbi4iLGNsaVByb2Nlc3NvcjpvKHQ9PiIjIit0LCJjbGlQcm9jZXNzb3IiKX0sbWFjcm9zOnt0eXBlOiJvYmplY3QiLGNsaToiLW0sIC0tbWFjcm8gPGRlZj4iLGNsaURlc2NyaXB0aW9uOiJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXGZvbzpleHBhbnNpb24nICh1c2UgbXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLiIsY2xpRGVmYXVsdDpbXSxjbGlQcm9jZXNzb3I6bygodCxlKT0+KGUucHVzaCh0KSxlKSwiY2xpUHJvY2Vzc29yIil9LG1pblJ1bGVUaGlja25lc3M6e3R5cGU6Im51bWJlciIsZGVzY3JpcHRpb246IlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcywgYFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXGhsaW5lYCwgYFxcaGRhc2hsaW5lYCwgYFxcdW5kZXJsaW5lYCwgYFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgYFxcZmJveGAsIGBcXGJveGVkYCwgYW5kIGBcXGZjb2xvcmJveGAuIixwcm9jZXNzb3I6byh0PT5NYXRoLm1heCgwLHQpLCJwcm9jZXNzb3IiKSxjbGk6Ii0tbWluLXJ1bGUtdGhpY2tuZXNzIDxzaXplPiIsY2xpUHJvY2Vzc29yOnBhcnNlRmxvYXR9LGNvbG9ySXNUZXh0Q29sb3I6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJNYWtlcyBcXGNvbG9yIGJlaGF2ZSBsaWtlIExhVGVYJ3MgMi1hcmd1bWVudCBcXHRleHRjb2xvciwgaW5zdGVhZCBvZiBMYVRlWCdzIG9uZS1hcmd1bWVudCBcXGNvbG9yIG1vZGUgY2hhbmdlLiIsY2xpOiItYiwgLS1jb2xvci1pcy10ZXh0LWNvbG9yIn0sc3RyaWN0Ont0eXBlOlt7ZW51bTpbIndhcm4iLCJpZ25vcmUiLCJlcnJvciJdfSwiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlR1cm4gb24gc3RyaWN0IC8gTGFUZVggZmFpdGhmdWxuZXNzIG1vZGUsIHdoaWNoIHRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgdXNlcyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExhVGVYLiIsY2xpOiItUywgLS1zdHJpY3QiLGNsaURlZmF1bHQ6ITF9LHRydXN0Ont0eXBlOlsiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXHVybC4iLGNsaToiLVQsIC0tdHJ1c3QifSxtYXhTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS8wLGRlc2NyaXB0aW9uOiJJZiBub24temVybywgYWxsIHVzZXItc3BlY2lmaWVkIHNpemVzLCBlLmcuIGluIFxccnVsZXs1MDBlbX17NTAwZW19LCB3aWxsIGJlIGNhcHBlZCB0byBtYXhTaXplIGVtcy4gT3RoZXJ3aXNlLCBlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZSIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItcywgLS1tYXgtc2l6ZSA8bj4iLGNsaVByb2Nlc3NvcjpwYXJzZUludH0sbWF4RXhwYW5kOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MWUzLGRlc2NyaXB0aW9uOiJMaW1pdCB0aGUgbnVtYmVyIG9mIG1hY3JvIGV4cGFuc2lvbnMgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIsIHRvIHByZXZlbnQgZS5nLiBpbmZpbml0ZSBtYWNybyBsb29wcy4gSWYgc2V0IHRvIEluZmluaXR5LCB0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLiIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItZSwgLS1tYXgtZXhwYW5kIDxuPiIsY2xpUHJvY2Vzc29yOm8odD0+dD09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KHQpLCJjbGlQcm9jZXNzb3IiKX0sZ2xvYmFsR3JvdXA6e3R5cGU6ImJvb2xlYW4iLGNsaTohMX19O28oTWJlLCJnZXREZWZhdWx0VmFsdWUiKTtaMT1jbGFzc3tzdGF0aWN7byh0aGlzLCJTZXR0aW5ncyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGlzcGxheU1vZGU9dm9pZCAwLHRoaXMub3V0cHV0PXZvaWQgMCx0aGlzLmxlcW5vPXZvaWQgMCx0aGlzLmZsZXFuPXZvaWQgMCx0aGlzLnRocm93T25FcnJvcj12b2lkIDAsdGhpcy5lcnJvckNvbG9yPXZvaWQgMCx0aGlzLm1hY3Jvcz12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLmNvbG9ySXNUZXh0Q29sb3I9dm9pZCAwLHRoaXMuc3RyaWN0PXZvaWQgMCx0aGlzLnRydXN0PXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWF4RXhwYW5kPXZvaWQgMCx0aGlzLmdsb2JhbEdyb3VwPXZvaWQgMCxlPWV8fHt9O2Zvcih2YXIgciBpbiBvNClpZihvNC5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG49bzRbcl07dGhpc1tyXT1lW3JdIT09dm9pZCAwP24ucHJvY2Vzc29yP24ucHJvY2Vzc29yKGVbcl0pOmVbcl06TWJlKG4pfX1yZXBvcnROb25zdHJpY3QoZSxyLG4pe3ZhciBpPXRoaXMuc3RyaWN0O2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoaT1pKGUscixuKSksISghaXx8aT09PSJpZ25vcmUiKSl7aWYoaT09PSEwfHxpPT09ImVycm9yIil0aHJvdyBuZXcgdXQoIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICdlcnJvcic6ICIrKHIrIiBbIitlKyJdIiksbik7aT09PSJ3YXJuIj90eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKTp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gIisoInVucmVjb2duaXplZCAnIitpKyInOiAiK3IrIiBbIitlKyJdIikpfX11c2VTdHJpY3RCZWhhdmlvcihlLHIsbil7dmFyIGk9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpdHJ5e2k9aShlLHIsbil9Y2F0Y2h7aT0iZXJyb3IifXJldHVybiFpfHxpPT09Imlnbm9yZSI/ITE6aT09PSEwfHxpPT09ImVycm9yIj8hMDppPT09Indhcm4iPyh0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKSwhMSk6KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK2krIic6ICIrcisiIFsiK2UrIl0iKSksITEpfWlzVHJ1c3RlZChlKXtpZihlLnVybCYmIWUucHJvdG9jb2wpe3ZhciByPUp0LnByb3RvY29sRnJvbVVybChlLnVybCk7aWYocj09bnVsbClyZXR1cm4hMTtlLnByb3RvY29sPXJ9dmFyIG49dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChlKTp0aGlzLnRydXN0O3JldHVybiEhbn19LEtsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0eWxlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPWUsdGhpcy5zaXplPXIsdGhpcy5jcmFtcGVkPW59c3VwKCl7cmV0dXJuIFFsW0liZVt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIFFsW09iZVt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBRbFtQYmVbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gUWxbQmJlW3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBRbFtGYmVbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gUWxbemJlW3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19LE5DPTAsYzQ9MSxocD0yLHJ1PTMsSjE9NCxTbz01LGZwPTYsWWE9NyxRbD1bbmV3IEtsKE5DLDAsITEpLG5ldyBLbChjNCwwLCEwKSxuZXcgS2woaHAsMSwhMSksbmV3IEtsKHJ1LDEsITApLG5ldyBLbChKMSwyLCExKSxuZXcgS2woU28sMiwhMCksbmV3IEtsKGZwLDMsITEpLG5ldyBLbChZYSwzLCEwKV0sSWJlPVtKMSxTbyxKMSxTbyxmcCxZYSxmcCxZYV0sT2JlPVtTbyxTbyxTbyxTbyxZYSxZYSxZYSxZYV0sUGJlPVtocCxydSxKMSxTbyxmcCxZYSxmcCxZYV0sQmJlPVtydSxydSxTbyxTbyxZYSxZYSxZYSxZYV0sRmJlPVtjNCxjNCxydSxydSxTbyxTbyxZYSxZYV0semJlPVtOQyxjNCxocCxydSxocCxydSxocCxydV0scnI9e0RJU1BMQVk6UWxbTkNdLFRFWFQ6UWxbaHBdLFNDUklQVDpRbFtKMV0sU0NSSVBUU0NSSVBUOlFsW2ZwXX0seEM9W3tuYW1lOiJsYXRpbiIsYmxvY2tzOltbMjU2LDU5MV0sWzc2OCw4NzldXX0se25hbWU6ImN5cmlsbGljIixibG9ja3M6W1sxMDI0LDEyNzldXX0se25hbWU6ImFybWVuaWFuIixibG9ja3M6W1sxMzI4LDE0MjNdXX0se25hbWU6ImJyYWhtaWMiLGJsb2NrczpbWzIzMDQsNDI1NV1dfSx7bmFtZToiZ2VvcmdpYW4iLGJsb2NrczpbWzQyNTYsNDM1MV1dfSx7bmFtZToiY2prIixibG9ja3M6W1sxMjI4OCwxMjU0M10sWzE5OTY4LDQwODc5XSxbNjUyODAsNjUzNzZdXX0se25hbWU6Imhhbmd1bCIsYmxvY2tzOltbNDQwMzIsNTUyMTVdXX1dO28oR2JlLCJzY3JpcHRGcm9tQ29kZXBvaW50Iik7bDQ9W107eEMuZm9yRWFjaCh0PT50LmJsb2Nrcy5mb3JFYWNoKGU9Pmw0LnB1c2goLi4uZSkpKTtvKEJHLCJzdXBwb3J0ZWRDb2RlcG9pbnQiKTt1cD04MCwkYmU9byhmdW5jdGlvbihlLHIpe3JldHVybiJNOTUsIisoNjIyK2UrcikrYApjLTIuNywwLC03LjE3LC0yLjcsLTEzLjUsLThjLTUuOCwtNS4zLC05LjUsLTEwLC05LjUsLTE0CmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTQKYzQ0LjIsLTMzLjMsNjUuOCwtNTAuMyw2Ni41LC01MWMxLjMsLTEuMywzLC0yLDUsLTJjNC43LDAsOC43LDMuMywxMiwxMApzMTczLDM3OCwxNzMsMzc4YzAuNywwLDM1LjMsLTcxLDEwNCwtMjEzYzY4LjcsLTE0MiwxMzcuNSwtMjg1LDIwNi41LC00MjkKYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjEKbGArZS8yLjA3NSsiIC0iK2UrYApjNS4zLC05LjMsMTIsLTE0LDIwLC0xNApINDAwMDAwdmArKDQwK2UpK2BIODQ1LjI3MjQKcy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksNwpjLTYsMCwtMTAsLTEsLTEyLC0zcy0xOTQsLTQyMiwtMTk0LC00MjJzLTY1LDQ3LC02NSw0N3oKTWArKDgzNCtlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRNYWluIiksVmJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTI2MywiKyg2MDErZStyKStgYzAuNywwLDE4LDM5LjcsNTIsMTE5CmMzNCw3OS4zLDY4LjE2NywxNTguNywxMDIuNSwyMzhjMzQuMyw3OS4zLDUxLjgsMTE5LjMsNTIuNSwxMjAKYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjcKbGArZS8yLjA4NCsiIC0iK2UrYApjNC43LC03LjMsMTEsLTExLDE5LC0xMQpINDAwMDB2YCsoNDArZSkrYEgxMDEyLjMKcy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzIKYy0yMi4zLDQ2LjcsLTMzLjgsNzAuMywtMzQuNSw3MWMtNC43LDQuNywtMTIuMyw3LC0yMyw3cy0xMiwtMSwtMTIsLTEKcy0xMDksLTI1MywtMTA5LC0yNTNjLTcyLjcsLTE2OCwtMTA5LjMsLTI1MiwtMTEwLC0yNTJjLTEwLjcsOCwtMjIsMTYuNywtMzQsMjYKYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwegpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMSIpLFViZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk05ODMgIisoMTArZStyKStgCmxgK2UvMy4xMysiIC0iK2UrYApjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMHZgKyg0MCtlKStgCkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDcKcy0xMiwwLC0xMiwwYy0xLjMsLTMuMywtMy43LC0xMS43LC03LC0yNWMtMzUuMywtMTI1LjMsLTEwNi43LC0zNzMuMywtMjE0LC03NDQKYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMApjMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyCmM1NiwtMTc1LjMsMTI2LjMsLTM5Ny4zLDIxMSwtNjY2Yzg0LjcsLTI2OC43LDE1My44LC00ODguMiwyMDcuNSwtNjU4LjUKYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41egpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMiIpLEhiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00MjQsIisoMjM5OCtlK3IpK2AKYy0xLjMsLTAuNywtMzguNSwtMTcyLC0xMTEuNSwtNTE0Yy03MywtMzQyLC0xMDkuOCwtNTEzLjMsLTExMC41LC01MTQKYzAsLTIsLTEwLjcsMTQuMywtMzIsNDljLTQuNyw3LjMsLTkuOCwxNS43LC0xNS41LDI1Yy01LjcsOS4zLC05LjgsMTYsLTEyLjUsMjAKcy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxCnMyMDksOTY4LDIwOSw5NjhjMCwtMiw4NC43LC0zNjEuNywyNTQsLTEwNzljMTY5LjMsLTcxNy4zLDI1NC43LC0xMDc3LjcsMjU2LC0xMDgxCmxgK2UvNC4yMjMrIiAtIitlK2BjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMAp2YCsoNDArZSkrYEgxMDE0LjYKcy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NQpjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJ6IE1gKygxMDAxK2UpKyIgIityK2AKaDQwMDAwMHZgKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMyIpLFdiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00NzMsIisoMjcxMytlK3IpK2AKYzMzOS4zLC0xNzk5LjMsNTA5LjMsLTI3MDAsNTEwLC0yNzAyIGxgK2UvNS4yOTgrIiAtIitlK2AKYzMuMywtNy4zLDkuMywtMTEsMTgsLTExIEg0MDAwMDB2YCsoNDArZSkrYEgxMDE3LjcKcy05MC41LDQ3OCwtMjc2LjIsMTQ2NmMtMTg1LjcsOTg4LC0yNzkuNSwxNDgzLC0yODEuNSwxNDg1Yy0yLDYsLTEwLDksLTI0LDkKYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDAKYzAsLTEuMywtNS4zLDguNywtMTYsMzBjLTEwLjcsMjEuMywtMjEuMyw0Mi43LC0zMiw2NHMtMTYsMzMsLTE2LDMzcy0yNiwtMjYsLTI2LC0yNgpzNzYsLTE1Myw3NiwtMTUzczc3LC0xNTEsNzcsLTE1MWMwLjcsMC43LDM1LjcsMjAyLDEwNSw2MDRjNjcuMyw0MDAuNywxMDIsNjAyLjcsMTA0LAo2MDZ6TWArKDEwMDErZSkrIiAiK3IrImg0MDAwMDB2IisoNDArZSkrIkgxMDE3Ljd6In0sInNxcnRTaXplNCIpLFliZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUvMjtyZXR1cm4iTTQwMDAwMCAiK2UrIiBIMCBMIityKyIgMCBsNjUgNDUgTDE0NSAiKyhlLTgwKSsiIEg0MDAwMDB6In0sInBoYXNlUGF0aCIpLHFiZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1uLTU0LXItZTtyZXR1cm4iTTcwMiAiKyhlK3IpKyJINDAwMDAwIisoNDArZSkrYApINzQydmAraStgbC00IDQtNCA0Yy0uNjY3LjcgLTIgMS41LTQgMi41cy00LjE2NyAxLjgzMy02LjUgMi41LTUuNSAxLTkuNSAxCmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzAKYy00LTMuMzMzLTguMzMzLTcuNjY3LTEzIC0xM2wtMTMtMTNsNzctMTU1IDc3LTE1NmM2NiAxOTkuMzMzIDEzOSA0MTkuNjY3CjIxOSA2NjEgbDIxOCA2NjF6TTcwMiBgK3IrIkg0MDAwMDB2IisoNDArZSkrIkg3NDJ6In0sInNxcnRUYWxsIiksWGJlPW8oZnVuY3Rpb24oZSxyLG4pe3I9MWUzKnI7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2Uic3FydE1haW4iOmk9JGJlKHIsdXApO2JyZWFrO2Nhc2Uic3FydFNpemUxIjppPVZiZShyLHVwKTticmVhaztjYXNlInNxcnRTaXplMiI6aT1VYmUocix1cCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOmk9SGJlKHIsdXApO2JyZWFrO2Nhc2Uic3FydFNpemU0IjppPVdiZShyLHVwKTticmVhaztjYXNlInNxcnRUYWxsIjppPXFiZShyLHVwLG4pfXJldHVybiBpfSwic3FydFBhdGgiKSxqYmU9byhmdW5jdGlvbihlLHIpe3N3aXRjaChlKXtjYXNlIlx1MjM5QyI6cmV0dXJuIk0yOTEgMCBINDE3IFYiK3IrIiBIMjkxeiBNMjkxIDAgSDQxNyBWIityKyIgSDI5MXoiO2Nhc2UiXHUyMjIzIjpyZXR1cm4iTTE0NSAwIEgxODggViIrcisiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3IrIiBIMTQ1eiI7Y2FzZSJcdTIyMjUiOnJldHVybiJNMTQ1IDAgSDE4OCBWIityKyIgSDE0NXogTTE0NSAwIEgxODggViIrcisiIEgxNDV6IisoIk0zNjcgMCBINDEwIFYiK3IrIiBIMzY3eiBNMzY3IDAgSDQxMCBWIityKyIgSDM2N3oiKTtjYXNlIlx1MjM5RiI6cmV0dXJuIk00NTcgMCBINTgzIFYiK3IrIiBINDU3eiBNNDU3IDAgSDU4MyBWIityKyIgSDQ1N3oiO2Nhc2UiXHUyM0EyIjpyZXR1cm4iTTMxOSAwIEg0MDMgViIrcisiIEgzMTl6IE0zMTkgMCBINDAzIFYiK3IrIiBIMzE5eiI7Y2FzZSJcdTIzQTUiOnJldHVybiJNMjYzIDAgSDM0NyBWIityKyIgSDI2M3ogTTI2MyAwIEgzNDcgViIrcisiIEgyNjN6IjtjYXNlIlx1MjNBQSI6cmV0dXJuIk0zODQgMCBINTA0IFYiK3IrIiBIMzg0eiBNMzg0IDAgSDUwNCBWIityKyIgSDM4NHoiO2Nhc2UiXHUyM0QwIjpyZXR1cm4iTTMxMiAwIEgzNTUgViIrcisiIEgzMTJ6IE0zMTIgMCBIMzU1IFYiK3IrIiBIMzEyeiI7Y2FzZSJcdTIwMTYiOnJldHVybiJNMjU3IDAgSDMwMCBWIityKyIgSDI1N3ogTTI1NyAwIEgzMDAgViIrcisiIEgyNTd6IisoIk00NzggMCBINTIxIFYiK3IrIiBINDc4eiBNNDc4IDAgSDUyMSBWIityKyIgSDQ3OHoiKTtkZWZhdWx0OnJldHVybiIifX0sImlubmVyUGF0aCIpLGFHPXtkb3VibGVsZWZ0YXJyb3c6YE0yNjIgMTU3CmwxMC0xMGMzNC0zNiA2Mi43LTc3IDg2LTEyMyAzLjMtOCA1LTEzLjMgNS0xNiAwLTUuMy02LjctOC0yMC04LTcuMwogMC0xMi4yLjUtMTQuNSAxLjUtMi4zIDEtNC44IDQuNS03LjUgMTAuNS00OS4zIDk3LjMtMTIxLjcgMTY5LjMtMjE3IDIxNi0yOAogMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41CmMyIDEuNyA2LjMgMy41IDEzIDUuNSA2OCAxNy4zIDEyOC4yIDQ3LjggMTgwLjUgOTEuNSA1Mi4zIDQzLjcgOTMuOCA5Ni4yIDEyNC41CiAxNTcuNSA5LjMgOCAxNS4zIDEyLjMgMTggMTNoNmMxMi0uNyAxOC00IDE4LTEwIDAtMi0xLjctNy01LTE1LTIzLjMtNDYtNTItODcKLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjcKLTIgNi0zLjcgMTAtNSAzNi43LTE2IDcyLjMtMzcuMyAxMDctNjRsMTAtOGgzOTk3ODJ2LTQwegptOCAwdjQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxkb3VibGVyaWdodGFycm93OmBNMzk5NzM4IDM5MmwKLTEwIDEwYy0zNCAzNi02Mi43IDc3LTg2IDEyMy0zLjMgOC01IDEzLjMtNSAxNiAwIDUuMyA2LjcgOCAyMCA4IDcuMyAwIDEyLjItLjUKIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OAotMzMgNi43LTIgMTEtMy44IDEzLTUuNSAyLTEuNyAzLTQuMiAzLTcuNXMtMS01LjgtMy03LjVjLTItMS43LTYuMy0zLjUtMTMtNS41LTY4Ci0xNy4zLTEyOC4yLTQ3LjgtMTgwLjUtOTEuNS01Mi4zLTQzLjctOTMuOC05Ni4yLTEyNC41LTE1Ny41LTkuMy04LTE1LjMtMTIuMy0xOAotMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODIKYy0zMjggMCAwIDAgMCAwbDEwIDhjMjYuNyAyMCA2NS43IDQzIDExNyA2OS0yLjcgMi02IDMuNy0xMCA1LTM2LjcgMTYtNzIuMyAzNy4zCi0xMDcgNjRsLTEwIDhIMHY0MHpNMCAxNTd2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpgLGxlZnRhcnJvdzpgTTQwMDAwMCAyNDFIMTEwbDMtM2M2OC43LTUyLjcgMTEzLjctMTIwCiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOAotNS41IDEyLjUtMS4zIDQuNy0yLjcgMTAuMy00IDE3LTEyIDQ4LjctMzQuOCA5Mi02OC41IDEzMFM2NS4zIDIyOC4zIDE4IDI0NwpjLTEwIDQtMTYgNy43LTE4IDExIDAgOC43IDYgMTQuMyAxOCAxNyA0Ny4zIDE4LjcgODcuOCA0NyAxMjEuNSA4NVMxOTYgNDQxLjMgMjA4CiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMKIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxLTMuNyAyMS0xMSAwLTItMi0xMC4zLTYtMjUtMjAtNzkuMy02NS0xNDYuNy0xMzUtMjAyCiBsLTMtM2gzOTk4OTB6TTEwMCAyNDF2NDBoMzk5OTAwdi00MHpgLGxlZnRicmFjZTpgTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExNwotNDUgMTc5LTUwaDM5OTU3N3YxMjBINDAzYy00My4zIDctODEgMTUtMTEzIDI2LTEwMC43IDMzLTE3OS43IDkxLTIzNyAxNzQtMi43CiA1LTYgOS0xMCAxMy0uNyAxLTcuMyAxLTIwIDFINnpgLGxlZnRicmFjZXVuZGVyOmBNMCA2bDYtNmgxN2MxMi42ODggMCAxOS4zMTMuMyAyMCAxIDQgNCA3LjMxMyA4LjMgMTAgMTMKIDM1LjMxMyA1MS4zIDgwLjgxMyA5My44IDEzNi41IDEyNy41IDU1LjY4OCAzMy43IDExNy4xODggNTUuOCAxODQuNSA2Ni41LjY4OAogMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjcKLTMzMS0xNjFDNjAuNjg3IDEzOC43IDMyLjMxMiA5OS4zIDcgNTRMMCA0MVY2emAsbGVmdGdyb3VwOmBNNDAwMDAwIDgwCkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDAKIDQzNSAwaDM5OTU2NXpgLGxlZnRncm91cHVuZGVyOmBNNDAwMDAwIDI2MgpINDM1QzY0IDI2MiAxNjguMyAxMTIuNiAyMSA4MmMtNS45LTEuMi0xOCAwLTE4IDAtMiAwLTMgMS0zIDN2MzhjNzYgMTU4IDI1NyAyMTkKIDQzNSAyMTloMzk5NTY1emAsbGVmdGhhcnBvb246YE0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zCi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1Ci0xOC4zIDMtMjEtMS4zLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43Ci0xOTYgMjI4LTYuNyA0LjctMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwemAsbGVmdGhhcnBvb25wbHVzOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMy0zLjMgMTAuMi05LjUKIDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNS0xOC4zIDMtMjEtMS4zCi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjcKLTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpNMCA0MzV2NDBoNDAwMDAwdi00MHoKbTAgMHY0MGg0MDAwMDB2LTQwemAsbGVmdGhhcnBvb25kb3duOmBNNyAyNDFjLTQgNC02LjMzMyA4LjY2Ny03IDE0IDAgNS4zMzMuNjY3IDkgMiAxMXM1LjMzMwogNS4zMzMgMTIgMTBjOTAuNjY3IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMzMyAxMC42NjcgNi4zMzMgMTYuMzMzIDkgMTcgMiAuNjY3IDUKIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjcKLTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwek05MyAyODEgSDQwMDAwMCB2LTQwTDcgMjQxemAsbGVmdGhhcnBvb25kb3ducGx1czpgTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTIKIDEwYzkwLjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMyAxMC43IDYuMyAxNi4zIDkgMTcgMiAuNyA1IDEgOSAxaDVjMTAuNyAwIDE2LjcKLTIgMTgtNiAyLTIuNyAxLTkuNy0zLTIxLTMyLTg3LjMtODIuNy0xNTcuNy0xNTItMjExbC0zLTNoMzk5OTA3di00MEg3em05MyAwCnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpgLGxlZnRob29rOmBNNDAwMDAwIDI4MSBIMTAzcy0zMy0xMS4yLTYxLTMzLjVTMCAxOTcuMyAwIDE2NHMxNC4yLTYxLjIgNDIuNQotODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuMwotNjguNyAxNS43LTg2IDM3LTEwIDEyLTE1IDI1LjMtMTUgNDAgMCAyMi43IDkuOCA0MC43IDI5LjUgNTQgMTkuNyAxMy4zIDQzLjUgMjEKIDcxLjUgMjNoMzk5ODU5ek0xMDMgMjgxdi00MGgzOTk4OTd2NDB6YCxsZWZ0bGluZXNlZ21lbnQ6YE00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6Ck00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6YCxsZWZ0bWFwc3RvOmBNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwegpNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwemAsbGVmdFRvRnJvbTpgTTAgMTQ3aDQwMDAwMHY0MEgwem0wIDIxNGM2OCA0MCAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzCi0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OS03MC0xMDFsLTctOGgzOTk5MDV2LTQwSDk1bDctOApjMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zCiA2OCAzMjEgMCAzNjF6bTAtMTc0di00MGgzOTk5MDB2NDB6bTEwMCAxNTR2NDBoMzk5OTAwdi00MHpgLGxvbmdlcXVhbDpgTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6Ck0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwemAsbWlkYnJhY2U6YE0yMDA0MjggMzM0CmMtMTAwLjctOC4zLTE5NS4zLTQ0LTI4MC0xMDgtNTUuMy00Mi0xMDEuNy05My0xMzktMTUzbC05LTE0Yy0yLjcgNC01LjcgOC43LTkgMTQKLTUzLjMgODYuNy0xMjMuNyAxNTMtMjExIDE5OS02Ni43IDM2LTEzNy4zIDU2LjMtMjEyIDYySDBWMjE0aDE5OTU2OGMxNzguMy0xMS43CiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMQogMTIgNDQuNyA1OS4zIDEwMS4zIDEwNi4zIDE3MCAxNDFzMTQ1LjMgNTQuMyAyMjkgNjBoMTk5NTcydjEyMHpgLG1pZGJyYWNldW5kZXI6YE0xOTk1NzIgMjE0CmMxMDAuNyA4LjMgMTk1LjMgNDQgMjgwIDEwOCA1NS4zIDQyIDEwMS43IDkzIDEzOSAxNTNsOSAxNGMyLjctNCA1LjctOC43IDktMTQKIDUzLjMtODYuNyAxMjMuNy0xNTMgMjExLTE5OSA2Ni43LTM2IDEzNy4zLTU2LjMgMjEyLTYyaDE5OTU2OHYxMjBIMjAwNDMyYy0xNzguMwogMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDAKLTUtNC0xMS0xMi00NC43LTU5LjMtMTAxLjMtMTA2LjMtMTcwLTE0MXMtMTQ1LjMtNTQuMy0yMjktNjBIMFYyMTR6YCxvaWludFNpemUxOmBNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42Ci0zMjAuMyAxNzcuNlMxOTMuMSAzMjAuNiAxOTMuMSAyNDkuOGMwLTcxLjQgNDYuOS0xNzguMiAzMTkuNS0xNzguMnoKbTM2OC4xIDE3OC4yYzAtODYuNC02MC45LTIxNS40LTM2OC4xLTIxNS40LTMwNi40IDAtMzY3LjMgMTI5LTM2Ny4zIDIxNS40IDAgODUuOAo2MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44emAsb2lpbnRTaXplMjpgTTc1Ny44IDEwMC4xYzM4NC43IDAgNDUxLjEgMTM3LjYgNDUxLjEgMjMwIDAgOTEuMy02Ni40IDIyOC44Ci00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6Cm01MDIuNCAyMzBjMC0xMTEuMi04Mi40LTI3Ny4yLTUwMi40LTI3Ny4ycy01MDQgMTY2LTUwNCAyNzcuMgpjMCAxMTAgODQgMjc2IDUwNCAyNzZzNTAyLjQtMTY2IDUwMi40LTI3NnpgLG9paWludFNpemUxOmBNNjgxLjQgNzEuNmM0MDguOSAwIDQ4MC41IDEwNi44IDQ4MC41IDE3OC4yIDAgNzAuOC03MS42IDE3Ny42Ci00ODAuNSAxNzcuNlMyMDIuMSAzMjAuNiAyMDIuMSAyNDkuOGMwLTcxLjQgNzAuNS0xNzguMiA0NzkuMy0xNzguMnoKbTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDAKODUuOCA4Ni44IDIxNC44IDUyNC43IDIxNC44IDQzOC45IDAgNTI1LjctMTI5IDUyNS43LTIxNC44emAsb2lpaW50U2l6ZTI6YE0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOAotNzA3LjggMjc1LjgtNjA2IDAtNzEwLjItMTY1LjgtNzEwLjItMjc1LjhDMzExIDIxOC44IDQxNS4yIDUzIDEwMjEuMiA1M3oKbTc3MC40IDI3Ny4xYzAtMTMxLjItMTI2LjQtMzI3LjYtNzcwLjUtMzI3LjZTMjQ4LjQgMTk4LjkgMjQ4LjQgMzMwLjEKYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40emAscmlnaHRhcnJvdzpgTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgKLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAKIDExIDggMCAxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNwogMzktODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUKLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CiAxNTEuNyAxMzkgMjA1em0wIDB2NDBoMzk5OTAwdi00MHpgLHJpZ2h0YnJhY2U6YE00MDAwMDAgNTQybAotNiA2aC0xN2MtMTIuNyAwLTE5LjMtLjMtMjAtMS00LTQtNy4zLTguMy0xMC0xMy0zNS4zLTUxLjMtODAuOC05My44LTEzNi41LTEyNy41CnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxCmMxMjQuNyA4IDIzNSA2MS43IDMzMSAxNjEgMzEuMyAzMy4zIDU5LjcgNzIuNyA4NSAxMThsNyAxM3YzNXpgLHJpZ2h0YnJhY2V1bmRlcjpgTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuMwogMjguNy0xMTcgNDUtMTc5IDUwSC0zMDBWMjE0aDM5OTg5N2M0My4zLTcgODEtMTUgMTEzLTI2IDEwMC43LTMzIDE3OS43LTkxIDIzNwotMTc0IDIuNy01IDYtOSAxMC0xMyAuNy0xIDcuMy0xIDIwLTFoMTd6YCxyaWdodGdyb3VwOmBNMCA4MGgzOTk1NjVjMzcxIDAgMjY2LjcgMTQ5LjQgNDE0IDE4MCA1LjkgMS4yIDE4IDAgMTggMCAyIDAKIDMtMSAzLTN2LTM4Yy03Ni0xNTgtMjU3LTIxOS00MzUtMjE5SDB6YCxyaWdodGdyb3VwdW5kZXI6YE0wIDI2MmgzOTk1NjVjMzcxIDAgMjY2LjctMTQ5LjQgNDE0LTE4MCA1LjktMS4yIDE4IDAgMTgKIDAgMiAwIDMgMSAzIDN2MzhjLTc2IDE1OC0yNTcgMjE5LTQzNSAyMTlIMHpgLHJpZ2h0aGFycG9vbjpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMKLTMuNy0xNS4zLTExLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yCi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTgKIDY5LjIgOTIgOTQuNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25wbHVzOmBNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMQotMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTItMTAuNyAwLTE2LjcKIDItMTggNi0yIDIuNy0xIDkuNyAzIDIxIDE1LjMgNDIgMzYuNyA4MS44IDY0IDExOS41IDI3LjMgMzcuNyA1OCA2OS4yIDkyIDk0LjV6Cm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25kb3duOmBNMzk5NzQ3IDUxMWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44IDE1LTIuNXM0LjctNi44CiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNQotNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMtNjQuNyA1Ny05MiA5NQotMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bnBsdXM6YE0zOTk3NDcgNzA1YzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjgKIDE1LTIuNXM0LjctNi44IDgtMTUuNWM0MC05NCA5OS4zLTE2Ni4zIDE3OC0yMTcgMTMuMy04IDIwLjMtMTIuMyAyMS0xMyA1LjMtMy4zCiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMwotNjQuNyA1Ny05MiA5NS0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgNDM1djQwaDM5OTkwMHYtNDB6Cm0wLTE5NHY0MGg0MDAwMDB2LTQwem0wIDB2NDBoNDAwMDAwdi00MHpgLHJpZ2h0aG9vazpgTTM5OTg1OSAyNDFjLTc2NCAwIDAgMCAwIDAgNDAtMy4zIDY4LjctMTUuNyA4Ni0zNyAxMC0xMiAxNS0yNS4zCiAxNS00MCAwLTIyLjctOS44LTQwLjctMjkuNS01NC0xOS43LTEzLjMtNDMuNS0yMS03MS41LTIzLTE3LjMtMS4zLTI2LTgtMjYtMjAgMAotMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxCiA2Ni44cy0xNCA2MS4yLTQyIDgzLjVjLTI4IDIyLjMtNjEgMzMuNS05OSAzMy41TDAgMjQxeiBNMCAyODF2LTQwaDM5OTg1OXY0MHpgLHJpZ2h0bGluZXNlZ21lbnQ6YE0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHoKTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwemAscmlnaHRUb0Zyb206YE00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjMKIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMyA0MS4zIDY5IDcwIDEwMWw3IDhIMHY0MGgzOTk5MDVsLTcgOGMtMjguNyAzMgotNTIgNjUuNy03MCAxMDEtMTAuNyAyMy4zLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIzYzI0LTY5LjMgNzEuMy0xMjUgMTQyCi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6YCx0d29oZWFkbGVmdGFycm93OmBNMCAxNjdjNjggNDAKIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjMtLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjkKLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuMwotNDAtNjcuMy02Ni05NmwtOS05aDM5OTcxNnYtNDBIMjg0bDktOWMyNi0yOC43IDQ4LTYwLjcgNjYtOTYgMTIuNy0yMy4zMzMgMTkKLTM3LjMzMyAxOS00MmgtNDZjLTE4IDU0LTUyLjMgMTAwLjctMTAzIDE0MGwtOSA3SDk1bDctOGMyOC43LTMyIDUyLTY1LjcgNzAtMTAxCiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6YCx0d29oZWFkcmlnaHRhcnJvdzpgTTQwMDAwMCAxNjcKYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zCiA0MS4zIDY5IDcwIDEwMWw3IDhoLTEyNWwtOS03Yy01MC43LTM5LjMtODUtODYtMTAzLTE0MGgtNDZjMCA0LjcgNi4zIDE4LjcgMTkgNDIKIDE4IDM1LjMgNDAgNjcuMyA2NiA5Nmw5IDlIMHY0MGgzOTk3MTZsLTkgOWMtMjYgMjguNy00OCA2MC43LTY2IDk2LTEyLjcgMjMuMzMzCi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwCiAxMDEtMTAuNyAyMy4zMzMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjJjMjcuMy03MS4zIDc1LTEyNyAxNDMtMTY3emAsdGlsZGUxOmBNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTcKLTIuMTc1LTktNS40MzdMMiA5N2MtMS0yLTItNC0yLTYgMC00IDItNyA1LTlsMjAtMTJDMTE2IDEyIDE3MSAwIDIwNyAwYzg2IDAKIDExNCA2OCAxOTEgNjggNzggMCAxNjgtNjggMTc3LTY4IDQgMCA3IDIgOSA1bDEyIDE5YzEgMi4xNzUgMiA0LjM1IDIgNi41MjUgMAogNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOAotNjguMjY3Ljg0Ny0xMTMtNzMuOTUyLTE5MS03My45NTJ6YCx0aWxkZTI6YE0zNDQgNTUuMjY2Yy0xNDIgMC0zMDAuNjM4IDgxLjMxNi0zMTEuNSA4Ni40MTgKLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45CiAzMS45IDI4MyAwIDM1OCAwYzE0OCAwIDE4OCAxMjIgMzMxIDEyMnMzMTQtOTcgMzI2LTk3YzQgMCA4IDIgMTAgN2w3IDIxLjExNApjMSAyLjE0IDEgMy4yMSAxIDQuMjggMCA1LjM0Ny0zIDkuNjI2LTcgMTAuNjk2bC0yMi4zIDEyLjYyMkM4NTIuNiAxNTguMzcyIDc1MQogMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxemAsdGlsZGUzOmBNNzg2IDU5QzQ1NyA1OSAzMiAxNzUuMjQyIDEzIDE3NS4yNDJjLTYgMC0xMC0zLjQ1NwotMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDAKIDQxMS44IDE1NyA3NDYuOCAxNTcgMzI4IDAgNzU0LTExMiA3NzMtMTEyIDUgMCAxMCAzIDExIDlsMSAxNC4wNzVjMSA4LjA2Ni0uNjk3CiAxNi41OTUtNi42OTcgMTcuNDkybC0yMS4wNTIgNy4zMWMtMzY3LjkgOTguMTQ2LTYwOS4xNSAxMjIuNjk2LTc3OC4xNSAxMjIuNjk2CiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6YCx0aWxkZTQ6YE03ODYgNThDNDU3IDU4IDMyIDE3Ny40ODcgMTMgMTc3LjQ4N2MtNiAwLTEwLTMuMzQ1Ci0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOQogMTc3IDc0NCAxNzcgMzI4IDAgNzU0LTEyNyA3NzMtMTI3IDUgMCAxMCAzIDExIDlsMSAxNC43OTRjMSA3LjgwNS0zIDEzLjM4LTkKIDE0LjQ5NWwtMjAuNyA1LjU3NGMtMzY2Ljg1IDk5Ljc5LTYwNy4zIDEzOS4zNzItNzc2LjMgMTM5LjM3Mi0zMzggMC00MDkKIC0xNzUuMjM2LTc0NC0xNzUuMjM2emAsdmVjOmBNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNQozLjMzMyAyLjY2NyA2LjY2NyA5IDEwIDE5IDYuNjY3IDI0LjY2NyAyMC4zMzMgNDMuNjY3IDQxIDU3IDcuMzMzIDQuNjY3IDExCjEwLjY2NyAxMSAxOCAwIDYtMSAxMC0zIDEycy02LjY2NyA1LTE0IDljLTI4LjY2NyAxNC42NjctNTMuNjY3IDM1LjY2Ny03NSA2MwotMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDEKLTcgMWMtNC42NjcgMC05LjE2Ny0xLjgzMy0xMy41LTUuNVMzMzcgMTg0IDMzNyAxNzhjMC0xMi42NjcgMTUuNjY3LTMyLjMzMyA0Ny01OQpIMjEzbC0xNzEtMWMtOC42NjctNi0xMy0xMi4zMzMtMTMtMTkgMC00LjY2NyA0LjMzMy0xMS4zMzMgMTMtMjBoMzU5CmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5emAsd2lkZWhhdDE6YE01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyCmMtMSA1LTUgOS0xMSA5aC0yTDUzMiA2NyAxOSAxNTloLTJjLTUgMC05LTQtMTEtOWwtNS0yMmMtMS02IDItMTIgOC0xM3pgLHdpZGVoYXQyOmBNMTE4MSAwaDJsMTE3MSAxNzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDM6YE0xMTgxIDBoMmwxMTcxIDIzNmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlaGF0NDpgTTExODEgMGgybDExNzEgMjk2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVjaGVjazE6YE01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLAotNSwtNSwtOSwtMTEsLTloLTJsLTUxMiw5MmwtNTEzLC05MmgtMmMtNSwwLC05LDQsLTExLDlsLTUsMjJjLTEsNiwyLDEyLDgsMTN6YCx3aWRlY2hlY2syOmBNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDE1M2wtMTE2NywtMTUzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazM6YE0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjEzbC0xMTY3LC0yMTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsd2lkZWNoZWNrNDpgTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwyNzNsLTExNjcsLTI3M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCxiYXJhYm92ZWxlZnRhcnJvdzpgTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMgpjNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41CmMtMi4zIDEuNyAtNC4yIDUuOCAtNS41IDEyLjVjLTEuMyA0LjcgLTIuNyAxMC4zIC00IDE3Yy0xMiA0OC43IC0zNC44IDkyIC02OC41IDEzMApzLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3CjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNgpzMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMyAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMSAtMy43IDIxIC0xMQpjMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHoKTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6YCxyaWdodGFycm93YWJvdmViYXI6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzIKLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwIDExIDggMAoxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOQotODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNQotMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwemAsYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uOmBNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxNwpjMiwwLjcsNSwxLDksMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMQpjLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwCmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHoKTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6IE0wIDI4MSB2LTQwIEgzOTk5MDggdjQwemAscmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjpgTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwCmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LAotMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2CmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXoKTTAgMjQxIHY0MCBIMzk5OTA4IHYtNDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHpgLHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjpgTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMQpjMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3YzIsMC43LDUsMSw5LAoxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsCi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6Ck05MyA0MzUgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHpgLHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6YE01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck01MDAgMjQxIHY0MCBIMzk5NDA4IHYtNDB6IE01MDAgNDM1IHY0MCBINDAwMDAwIHYtNDB6YH0sS2JlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2goZSl7Y2FzZSJsYnJhY2siOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjE3NTkgaDM0NyB2LTg0Ckg0MDN6IE00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInJicmFjayI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2IityK2AgdjE3NTkgSDAgdjg0IEgzNDd6Ck0zNDcgMTc1OSBWMCBIMjYzIFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInZlcnQiOnJldHVybiJNMTQ1IDE1IHY1ODUgdiIrcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UiZG91YmxldmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2IityK2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstcitgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArcitgIHY1ODUgaDQzegpNMzY3IDE1IHY1ODUgdmArcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE00MTAgMTUgSDM2NyB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UibGZsb29yIjpyZXR1cm4iTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHYiK3IrYCB2MTcxNSBoMjYzIHY4NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3IrIiB2MTcxNSBIMzE5eiI7Y2FzZSJyZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrcitgIHYxNzk5IEgwIHYtODQgSDMxOXoKTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2YCtyKyIgdjE3MTUgSDMxOXoiO2Nhc2UibGNlaWwiOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjYwMiBoODR6Ck00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2NjAyIGg4NHoiO2Nhc2UicmNlaWwiOnJldHVybiJNMzQ3IDE3NTkgVjAgSDAgVjg0IEgyNjMgVjE3NTkgdiIrcitgIHY2MDIgaDg0egpNMzQ3IDE3NTkgVjAgaC04NCBWMTc1OSB2YCtyKyIgdjYwMiBoODR6IjtjYXNlImxwYXJlbiI6cmV0dXJuYE04NjMsOWMwLC0yLC0yLC01LC02LC05YzAsMCwtMTcsMCwtMTcsMGMtMTIuNywwLC0xOS4zLDAuMywtMjAsMQpjLTUuMyw1LjMsLTEwLjMsMTEsLTE1LDE3Yy0yNDIuNywyOTQuNywtMzk1LjMsNjgyLC00NTgsMTE2MmMtMjEuMywxNjMuMywtMzMuMywzNDksCi0zNiw1NTcgbDAsYCsocis4NCkrYGMwLjIsNiwwLDI2LDAsNjBjMiwxNTkuMywxMCwzMTAuNywyNCw0NTRjNTMuMyw1MjgsMjEwLAo5NDkuNyw0NzAsMTI2NWM0LjcsNiw5LjcsMTEuNywxNSwxN2MwLjcsMC43LDcsMSwxOSwxYzAsMCwxOCwwLDE4LDBjNCwtNCw2LC03LDYsLTkKYzAsLTIuNywtMy4zLC04LjcsLTEwLC0xOGMtMTM1LjMsLTE5Mi43LC0yMzUuNSwtNDE0LjMsLTMwMC41LC02NjVjLTY1LC0yNTAuNywtMTAyLjUsCi01NDQuNywtMTEyLjUsLTg4MmMtMiwtMTA0LC0zLC0xNjcsLTMsLTE4OQpsMCwtYCsocis5MikrYGMwLC0xNjIuNyw1LjcsLTMxNCwxNywtNDU0YzIwLjcsLTI3Miw2My43LC01MTMsMTI5LC03MjNjNjUuMywKLTIxMCwxNTUuMywtMzk2LjMsMjcwLC01NTljNi43LC05LjMsMTAsLTE1LjMsMTAsLTE4emA7Y2FzZSJycGFyZW4iOnJldHVybmBNNzYsMGMtMTYuNywwLC0yNSwzLC0yNSw5YzAsMiwyLDYuMyw2LDEzYzIxLjMsMjguNyw0Mi4zLDYwLjMsCjYzLDk1Yzk2LjcsMTU2LjcsMTcyLjgsMzMyLjUsMjI4LjUsNTI3LjVjNTUuNywxOTUsOTIuOCw0MTYuNSwxMTEuNSw2NjQuNQpjMTEuMywxMzkuMywxNywyOTAuNywxNyw0NTRjMCwyOCwxLjcsNDMsMy4zLDQ1bDAsYCsocis5KStgCmMtMyw0LC0zLjMsMTYuNywtMy4zLDM4YzAsMTYyLC01LjcsMzEzLjcsLTE3LDQ1NWMtMTguNywyNDgsLTU1LjgsNDY5LjMsLTExMS41LDY2NApjLTU1LjcsMTk0LjcsLTEzMS44LDM3MC4zLC0yMjguNSw1MjdjLTIwLjcsMzQuNywtNDEuNyw2Ni4zLC02Myw5NWMtMiwzLjMsLTQsNywtNiwxMQpjMCw3LjMsNS43LDExLDE3LDExYzAsMCwxMSwwLDExLDBjOS4zLDAsMTQuMywtMC4zLDE1LC0xYzUuMywtNS4zLDEwLjMsLTExLDE1LC0xNwpjMjQyLjcsLTI5NC43LDM5NS4zLC02ODEuNyw0NTgsLTExNjFjMjEuMywtMTY0LjcsMzMuMywtMzUwLjcsMzYsLTU1OApsMCwtYCsocisxNDQpK2BjLTIsLTE1OS4zLC0xMCwtMzEwLjcsLTI0LC00NTRjLTUzLjMsLTUyOCwtMjEwLC05NDkuNywKLTQ3MCwtMTI2NWMtNC43LC02LC05LjcsLTExLjcsLTE1LC0xN2MtMC43LC0wLjcsLTYuNywtMSwtMTgsLTF6YDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBzdHJldGNoeSBkZWxpbWl0ZXIuIil9fSwidGFsbERlbGltIiksWWY9Y2xhc3N7c3RhdGlje28odGhpcywiRG9jdW1lbnRGcmFnbWVudCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49ZSx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3MoZSl7cmV0dXJuIEp0LmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxlKX10b05vZGUoKXtmb3IodmFyIGU9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcl0udG9Ob2RlKCkpO3JldHVybiBlfXRvTWFya3VwKCl7Zm9yKHZhciBlPSIiLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllKz10aGlzLmNoaWxkcmVuW3JdLnRvTWFya3VwKCk7cmV0dXJuIGV9dG9UZXh0KCl7dmFyIGU9byhyPT5yLnRvVGV4dCgpLCJ0b1RleHQiKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZSkuam9pbigiIil9fSxabD17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sS2I9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sc0c9e1x1MDBDNToiQSIsXHUwMEQwOiJEIixcdTAwREU6Im8iLFx1MDBFNToiYSIsXHUwMEYwOiJkIixcdTAwRkU6Im8iLFx1MDQxMDoiQSIsXHUwNDExOiJCIixcdTA0MTI6IkIiLFx1MDQxMzoiRiIsXHUwNDE0OiJBIixcdTA0MTU6IkUiLFx1MDQxNjoiSyIsXHUwNDE3OiIzIixcdTA0MTg6Ik4iLFx1MDQxOToiTiIsXHUwNDFBOiJLIixcdTA0MUI6Ik4iLFx1MDQxQzoiTSIsXHUwNDFEOiJIIixcdTA0MUU6Ik8iLFx1MDQxRjoiTiIsXHUwNDIwOiJQIixcdTA0MjE6IkMiLFx1MDQyMjoiVCIsXHUwNDIzOiJ5IixcdTA0MjQ6Ik8iLFx1MDQyNToiWCIsXHUwNDI2OiJVIixcdTA0Mjc6ImgiLFx1MDQyODoiVyIsXHUwNDI5OiJXIixcdTA0MkE6IkIiLFx1MDQyQjoiWCIsXHUwNDJDOiJCIixcdTA0MkQ6IjMiLFx1MDQyRToiWCIsXHUwNDJGOiJSIixcdTA0MzA6ImEiLFx1MDQzMToiYiIsXHUwNDMyOiJhIixcdTA0MzM6InIiLFx1MDQzNDoieSIsXHUwNDM1OiJlIixcdTA0MzY6Im0iLFx1MDQzNzoiZSIsXHUwNDM4OiJuIixcdTA0Mzk6Im4iLFx1MDQzQToibiIsXHUwNDNCOiJuIixcdTA0M0M6Im0iLFx1MDQzRDoibiIsXHUwNDNFOiJvIixcdTA0M0Y6Im4iLFx1MDQ0MDoicCIsXHUwNDQxOiJjIixcdTA0NDI6Im8iLFx1MDQ0MzoieSIsXHUwNDQ0OiJiIixcdTA0NDU6IngiLFx1MDQ0NjoibiIsXHUwNDQ3OiJuIixcdTA0NDg6InciLFx1MDQ0OToidyIsXHUwNDRBOiJhIixcdTA0NEI6Im0iLFx1MDQ0QzoiYSIsXHUwNDREOiJlIixcdTA0NEU6Im0iLFx1MDQ0RjoiciJ9O28oUWJlLCJzZXRGb250TWV0cmljcyIpO28oUkMsImdldENoYXJhY3Rlck1ldHJpY3MiKTtvQz17fTtvKFpiZSwiZ2V0R2xvYmFsTWV0cmljcyIpO0piZT1bWzEsMSwxXSxbMiwxLDFdLFszLDEsMV0sWzQsMiwxXSxbNSwyLDFdLFs2LDMsMV0sWzcsNCwyXSxbOCw2LDNdLFs5LDcsNl0sWzEwLDgsN10sWzExLDEwLDldXSxvRz1bLjUsLjYsLjcsLjgsLjksMSwxLjIsMS40NCwxLjcyOCwyLjA3NCwyLjQ4OF0sbEc9byhmdW5jdGlvbihlLHIpe3JldHVybiByLnNpemU8Mj9lOkpiZVtlLTFdW3Iuc2l6ZS0xXX0sInNpemVBdFN0eWxlIiksdTQ9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJPcHRpb25zIil9Y29uc3RydWN0b3IoZSl7dGhpcy5zdHlsZT12b2lkIDAsdGhpcy5jb2xvcj12b2lkIDAsdGhpcy5zaXplPXZvaWQgMCx0aGlzLnRleHRTaXplPXZvaWQgMCx0aGlzLnBoYW50b209dm9pZCAwLHRoaXMuZm9udD12b2lkIDAsdGhpcy5mb250RmFtaWx5PXZvaWQgMCx0aGlzLmZvbnRXZWlnaHQ9dm9pZCAwLHRoaXMuZm9udFNoYXBlPXZvaWQgMCx0aGlzLnNpemVNdWx0aXBsaWVyPXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWluUnVsZVRoaWNrbmVzcz12b2lkIDAsdGhpcy5fZm9udE1ldHJpY3M9dm9pZCAwLHRoaXMuc3R5bGU9ZS5zdHlsZSx0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy5zaXplPWUuc2l6ZXx8dC5CQVNFU0laRSx0aGlzLnRleHRTaXplPWUudGV4dFNpemV8fHRoaXMuc2l6ZSx0aGlzLnBoYW50b209ISFlLnBoYW50b20sdGhpcy5mb250PWUuZm9udHx8IiIsdGhpcy5mb250RmFtaWx5PWUuZm9udEZhbWlseXx8IiIsdGhpcy5mb250V2VpZ2h0PWUuZm9udFdlaWdodHx8IiIsdGhpcy5mb250U2hhcGU9ZS5mb250U2hhcGV8fCIiLHRoaXMuc2l6ZU11bHRpcGxpZXI9b0dbdGhpcy5zaXplLTFdLHRoaXMubWF4U2l6ZT1lLm1heFNpemUsdGhpcy5taW5SdWxlVGhpY2tuZXNzPWUubWluUnVsZVRoaWNrbmVzcyx0aGlzLl9mb250TWV0cmljcz12b2lkIDB9ZXh0ZW5kKGUpe3ZhciByPXtzdHlsZTp0aGlzLnN0eWxlLHNpemU6dGhpcy5zaXplLHRleHRTaXplOnRoaXMudGV4dFNpemUsY29sb3I6dGhpcy5jb2xvcixwaGFudG9tOnRoaXMucGhhbnRvbSxmb250OnRoaXMuZm9udCxmb250RmFtaWx5OnRoaXMuZm9udEZhbWlseSxmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCxmb250U2hhcGU6dGhpcy5mb250U2hhcGUsbWF4U2l6ZTp0aGlzLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczp0aGlzLm1pblJ1bGVUaGlja25lc3N9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJihyW25dPWVbbl0pO3JldHVybiBuZXcgdChyKX1oYXZpbmdTdHlsZShlKXtyZXR1cm4gdGhpcy5zdHlsZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6ZSxzaXplOmxHKHRoaXMudGV4dFNpemUsZSl9KX1oYXZpbmdDcmFtcGVkU3R5bGUoKXtyZXR1cm4gdGhpcy5oYXZpbmdTdHlsZSh0aGlzLnN0eWxlLmNyYW1wKCkpfWhhdmluZ1NpemUoZSl7cmV0dXJuIHRoaXMuc2l6ZT09PWUmJnRoaXMudGV4dFNpemU9PT1lP3RoaXM6dGhpcy5leHRlbmQoe3N0eWxlOnRoaXMuc3R5bGUudGV4dCgpLHNpemU6ZSx0ZXh0U2l6ZTplLHNpemVNdWx0aXBsaWVyOm9HW2UtMV19KX1oYXZpbmdCYXNlU3R5bGUoZSl7ZT1lfHx0aGlzLnN0eWxlLnRleHQoKTt2YXIgcj1sRyh0LkJBU0VTSVpFLGUpO3JldHVybiB0aGlzLnNpemU9PT1yJiZ0aGlzLnRleHRTaXplPT09dC5CQVNFU0laRSYmdGhpcy5zdHlsZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6ZSxzaXplOnJ9KX1oYXZpbmdCYXNlU2l6aW5nKCl7dmFyIGU7c3dpdGNoKHRoaXMuc3R5bGUuaWQpe2Nhc2UgNDpjYXNlIDU6ZT0zO2JyZWFrO2Nhc2UgNjpjYXNlIDc6ZT0xO2JyZWFrO2RlZmF1bHQ6ZT02fXJldHVybiB0aGlzLmV4dGVuZCh7c3R5bGU6dGhpcy5zdHlsZS50ZXh0KCksc2l6ZTplfSl9d2l0aENvbG9yKGUpe3JldHVybiB0aGlzLmV4dGVuZCh7Y29sb3I6ZX0pfXdpdGhQaGFudG9tKCl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtwaGFudG9tOiEwfSl9d2l0aEZvbnQoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250OmV9KX13aXRoVGV4dEZvbnRGYW1pbHkoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250RmFtaWx5OmUsZm9udDoiIn0pfXdpdGhUZXh0Rm9udFdlaWdodChlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRXZWlnaHQ6ZSxmb250OiIifSl9d2l0aFRleHRGb250U2hhcGUoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250U2hhcGU6ZSxmb250OiIifSl9c2l6aW5nQ2xhc3NlcyhlKXtyZXR1cm4gZS5zaXplIT09dGhpcy5zaXplP1sic2l6aW5nIiwicmVzZXQtc2l6ZSIrZS5zaXplLCJzaXplIit0aGlzLnNpemVdOltdfWJhc2VTaXppbmdDbGFzc2VzKCl7cmV0dXJuIHRoaXMuc2l6ZSE9PXQuQkFTRVNJWkU/WyJzaXppbmciLCJyZXNldC1zaXplIit0aGlzLnNpemUsInNpemUiK3QuQkFTRVNJWkVdOltdfWZvbnRNZXRyaWNzKCl7cmV0dXJuIHRoaXMuX2ZvbnRNZXRyaWNzfHwodGhpcy5fZm9udE1ldHJpY3M9WmJlKHRoaXMuc2l6ZSkpLHRoaXMuX2ZvbnRNZXRyaWNzfWdldENvbG9yKCl7cmV0dXJuIHRoaXMucGhhbnRvbT8idHJhbnNwYXJlbnQiOnRoaXMuY29sb3J9fTt1NC5CQVNFU0laRT02O2JDPXtwdDoxLG1tOjcyMjcvMjU0MCxjbTo3MjI3LzI1NCxpbjo3Mi4yNyxicDo4MDMvODAwLHBjOjEyLGRkOjEyMzgvMTE1NyxjYzoxNDg1Ni8xMTU3LG5kOjY4NS82NDIsbmM6MTM3MC8xMDcsc3A6MS82NTUzNixweDo4MDMvODAwfSxlNGU9e2V4OiEwLGVtOiEwLG11OiEwfSxGRz1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihlPWUudW5pdCksZSBpbiBiQ3x8ZSBpbiBlNGV8fGU9PT0iZXgifSwidmFsaWRVbml0IiksUW49byhmdW5jdGlvbihlLHIpe3ZhciBuO2lmKGUudW5pdCBpbiBiQyluPWJDW2UudW5pdF0vci5mb250TWV0cmljcygpLnB0UGVyRW0vci5zaXplTXVsdGlwbGllcjtlbHNlIGlmKGUudW5pdD09PSJtdSIpbj1yLmZvbnRNZXRyaWNzKCkuY3NzRW1QZXJNdTtlbHNle3ZhciBpO2lmKHIuc3R5bGUuaXNUaWdodCgpP2k9ci5oYXZpbmdTdHlsZShyLnN0eWxlLnRleHQoKSk6aT1yLGUudW5pdD09PSJleCIpbj1pLmZvbnRNZXRyaWNzKCkueEhlaWdodDtlbHNlIGlmKGUudW5pdD09PSJlbSIpbj1pLmZvbnRNZXRyaWNzKCkucXVhZDtlbHNlIHRocm93IG5ldyB1dCgiSW52YWxpZCB1bml0OiAnIitlLnVuaXQrIiciKTtpIT09ciYmKG4qPWkuc2l6ZU11bHRpcGxpZXIvci5zaXplTXVsdGlwbGllcil9cmV0dXJuIE1hdGgubWluKGUubnVtYmVyKm4sci5tYXhTaXplKX0sImNhbGN1bGF0ZVNpemUiKSxtdD1vKGZ1bmN0aW9uKGUpe3JldHVybitlLnRvRml4ZWQoNCkrImVtIn0sIm1ha2VFbSIpLGxoPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKHI9PnIpLmpvaW4oIiAiKX0sImNyZWF0ZUNsYXNzIiksekc9byhmdW5jdGlvbihlLHIsbil7aWYodGhpcy5jbGFzc2VzPWV8fFtdLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmhlaWdodD0wLHRoaXMuZGVwdGg9MCx0aGlzLm1heEZvbnRTaXplPTAsdGhpcy5zdHlsZT1ufHx7fSxyKXtyLnN0eWxlLmlzVGlnaHQoKSYmdGhpcy5jbGFzc2VzLnB1c2goIm10aWdodCIpO3ZhciBpPXIuZ2V0Q29sb3IoKTtpJiYodGhpcy5zdHlsZS5jb2xvcj1pKX19LCJpbml0Tm9kZSIpLEdHPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyLmNsYXNzTmFtZT1saCh0aGlzLmNsYXNzZXMpO2Zvcih2YXIgbiBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJihyLnN0eWxlW25dPXRoaXMuc3R5bGVbbl0pO2Zvcih2YXIgaSBpbiB0aGlzLmF0dHJpYnV0ZXMpdGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGkpJiZyLnNldEF0dHJpYnV0ZShpLHRoaXMuYXR0cmlidXRlc1tpXSk7Zm9yKHZhciBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2FdLnRvTm9kZSgpKTtyZXR1cm4gcn0sInRvTm9kZSIpLCRHPW8oZnVuY3Rpb24oZSl7dmFyIHI9IjwiK2U7dGhpcy5jbGFzc2VzLmxlbmd0aCYmKHIrPScgY2xhc3M9IicrSnQuZXNjYXBlKGxoKHRoaXMuY2xhc3NlcykpKyciJyk7dmFyIG49IiI7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShpKSYmKG4rPUp0Lmh5cGhlbmF0ZShpKSsiOiIrdGhpcy5zdHlsZVtpXSsiOyIpO24mJihyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO2Zvcih2YXIgYSBpbiB0aGlzLmF0dHJpYnV0ZXMpdGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGEpJiYocis9IiAiK2ErJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW2FdKSsnIicpO3IrPSI+Ijtmb3IodmFyIHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylyKz10aGlzLmNoaWxkcmVuW3NdLnRvTWFya3VwKCk7cmV0dXJuIHIrPSI8LyIrZSsiPiIscn0sInRvTWFya3VwIikscWY9Y2xhc3N7c3RhdGlje28odGhpcywiU3BhbiIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsekcuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmNoaWxkcmVuPXJ8fFtdfXNldEF0dHJpYnV0ZShlLHIpe3RoaXMuYXR0cmlidXRlc1tlXT1yfWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7cmV0dXJuIEdHLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuICRHLmNhbGwodGhpcywic3BhbiIpfX0sZXk9Y2xhc3N7c3RhdGlje28odGhpcywiQW5jaG9yIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx6Ry5jYWxsKHRoaXMscixpKSx0aGlzLmNoaWxkcmVuPW58fFtdLHRoaXMuc2V0QXR0cmlidXRlKCJocmVmIixlKX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3JldHVybiBHRy5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiAkRy5jYWxsKHRoaXMsImEiKX19LHdDPWNsYXNze3N0YXRpY3tvKHRoaXMsIkltZyIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnNyYz12b2lkIDAsdGhpcy5hbHQ9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuYWx0PXIsdGhpcy5zcmM9ZSx0aGlzLmNsYXNzZXM9WyJtb3JkIl0sdGhpcy5zdHlsZT1ufWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7ZS5zcmM9dGhpcy5zcmMsZS5hbHQ9dGhpcy5hbHQsZS5jbGFzc05hbWU9Im1vcmQiO2Zvcih2YXIgciBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkocikmJihlLnN0eWxlW3JdPXRoaXMuc3R5bGVbcl0pO3JldHVybiBlfXRvTWFya3VwKCl7dmFyIGU9JzxpbWcgc3JjPSInK0p0LmVzY2FwZSh0aGlzLnNyYykrJyInKygnIGFsdD0iJytKdC5lc2NhcGUodGhpcy5hbHQpKyciJykscj0iIjtmb3IodmFyIG4gaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KG4pJiYocis9SnQuaHlwaGVuYXRlKG4pKyI6Iit0aGlzLnN0eWxlW25dKyI7Iik7cmV0dXJuIHImJihlKz0nIHN0eWxlPSInK0p0LmVzY2FwZShyKSsnIicpLGUrPSInLz4iLGV9fSx0NGU9e1x1MDBFRToiXHUwMTMxXHUwMzAyIixcdTAwRUY6Ilx1MDEzMVx1MDMwOCIsXHUwMEVEOiJcdTAxMzFcdTAzMDEiLFx1MDBFQzoiXHUwMTMxXHUwMzAwIn0sbXM9Y2xhc3N7c3RhdGlje28odGhpcywiU3ltYm9sTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuLGksYSxzLGwsdSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5pdGFsaWM9dm9pZCAwLHRoaXMuc2tldz12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLnRleHQ9ZSx0aGlzLmhlaWdodD1yfHwwLHRoaXMuZGVwdGg9bnx8MCx0aGlzLml0YWxpYz1pfHwwLHRoaXMuc2tldz1hfHwwLHRoaXMud2lkdGg9c3x8MCx0aGlzLmNsYXNzZXM9bHx8W10sdGhpcy5zdHlsZT11fHx7fSx0aGlzLm1heEZvbnRTaXplPTA7dmFyIGg9R2JlKHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtoJiZ0aGlzLmNsYXNzZXMucHVzaChoKyJfZmFsbGJhY2siKSwvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpJiYodGhpcy50ZXh0PXQ0ZVt0aGlzLnRleHRdKX1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCkscj1udWxsO3RoaXMuaXRhbGljPjAmJihyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxyLnN0eWxlLm1hcmdpblJpZ2h0PW10KHRoaXMuaXRhbGljKSksdGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksci5jbGFzc05hbWU9bGgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHI9cnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7cmV0dXJuIHI/KHIuYXBwZW5kQ2hpbGQoZSkscik6ZX10b01hcmt1cCgpe3ZhciBlPSExLHI9IjxzcGFuIjt0aGlzLmNsYXNzZXMubGVuZ3RoJiYoZT0hMCxyKz0nIGNsYXNzPSInLHIrPUp0LmVzY2FwZShsaCh0aGlzLmNsYXNzZXMpKSxyKz0nIicpO3ZhciBuPSIiO3RoaXMuaXRhbGljPjAmJihuKz0ibWFyZ2luLXJpZ2h0OiIrdGhpcy5pdGFsaWMrImVtOyIpO2Zvcih2YXIgaSBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJihuKz1KdC5oeXBoZW5hdGUoaSkrIjoiK3RoaXMuc3R5bGVbaV0rIjsiKTtuJiYoZT0hMCxyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO3ZhciBhPUp0LmVzY2FwZSh0aGlzLnRleHQpO3JldHVybiBlPyhyKz0iPiIscis9YSxyKz0iPC9zcGFuPiIscik6YX19LGZsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN2Z05vZGUiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1lfHxbXSx0aGlzLmF0dHJpYnV0ZXM9cnx8e319dG9Ob2RlKCl7dmFyIGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLCJzdmciKTtmb3IodmFyIG4gaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsbikmJnIuc2V0QXR0cmlidXRlKG4sdGhpcy5hdHRyaWJ1dGVzW25dKTtmb3IodmFyIGk9MDtpPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2krKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSsnIicpO2UrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8L3N2Zz4iLGV9fSxKbD1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5wYXRoTmFtZT12b2lkIDAsdGhpcy5hbHRlcm5hdGU9dm9pZCAwLHRoaXMucGF0aE5hbWU9ZSx0aGlzLmFsdGVybmF0ZT1yfXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwicGF0aCIpO3JldHVybiB0aGlzLmFsdGVybmF0ZT9yLnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5hbHRlcm5hdGUpOnIuc2V0QXR0cmlidXRlKCJkIixhR1t0aGlzLnBhdGhOYW1lXSkscn10b01hcmt1cCgpe3JldHVybiB0aGlzLmFsdGVybmF0ZT8nPHBhdGggZD0iJytKdC5lc2NhcGUodGhpcy5hbHRlcm5hdGUpKyciLz4nOic8cGF0aCBkPSInK0p0LmVzY2FwZShhR1t0aGlzLnBhdGhOYW1lXSkrJyIvPid9fSx0eT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaW5lTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPWV8fHt9fXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwibGluZSIpO2Zvcih2YXIgbiBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxuKSYmci5zZXRBdHRyaWJ1dGUobix0aGlzLmF0dHJpYnV0ZXNbbl0pO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9IjxsaW5lIjtmb3IodmFyIHIgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMscikmJihlKz0iICIrcisnPSInK0p0LmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbcl0pKyciJyk7cmV0dXJuIGUrPSIvPiIsZX19O28oY0csImFzc2VydFN5bWJvbERvbU5vZGUiKTtvKHI0ZSwiYXNzZXJ0U3BhbiIpO240ZT17YmluOjEsY2xvc2U6MSxpbm5lcjoxLG9wZW46MSxwdW5jdDoxLHJlbDoxfSxpNGU9eyJhY2NlbnQtdG9rZW4iOjEsbWF0aG9yZDoxLCJvcC10b2tlbiI6MSxzcGFjaW5nOjEsdGV4dG9yZDoxfSxFbj17bWF0aDp7fSx0ZXh0Ont9fTtvKEcsImRlZmluZVN5bWJvbCIpO1Y9Im1hdGgiLGl0PSJ0ZXh0IixyZT0ibWFpbiIsdmU9ImFtcyIsJG49ImFjY2VudC10b2tlbiIsTnQ9ImJpbiIscWE9ImNsb3NlIixkcD0iaW5uZXIiLHRyPSJtYXRob3JkIixUaT0ib3AtdG9rZW4iLHFzPSJvcGVuIix5ND0icHVuY3QiLHdlPSJyZWwiLHN1PSJzcGFjaW5nIixfZT0idGV4dG9yZCI7RyhWLHJlLHdlLCJcdTIyNjEiLCJcXGVxdWl2IiwhMCk7RyhWLHJlLHdlLCJcdTIyN0EiLCJcXHByZWMiLCEwKTtHKFYscmUsd2UsIlx1MjI3QiIsIlxcc3VjYyIsITApO0coVixyZSx3ZSwiXHUyMjNDIiwiXFxzaW0iLCEwKTtHKFYscmUsd2UsIlx1MjJBNSIsIlxccGVycCIpO0coVixyZSx3ZSwiXHUyQUFGIiwiXFxwcmVjZXEiLCEwKTtHKFYscmUsd2UsIlx1MkFCMCIsIlxcc3VjY2VxIiwhMCk7RyhWLHJlLHdlLCJcdTIyNDMiLCJcXHNpbWVxIiwhMCk7RyhWLHJlLHdlLCJcdTIyMjMiLCJcXG1pZCIsITApO0coVixyZSx3ZSwiXHUyMjZBIiwiXFxsbCIsITApO0coVixyZSx3ZSwiXHUyMjZCIiwiXFxnZyIsITApO0coVixyZSx3ZSwiXHUyMjREIiwiXFxhc3ltcCIsITApO0coVixyZSx3ZSwiXHUyMjI1IiwiXFxwYXJhbGxlbCIpO0coVixyZSx3ZSwiXHUyMkM4IiwiXFxib3d0aWUiLCEwKTtHKFYscmUsd2UsIlx1MjMyMyIsIlxcc21pbGUiLCEwKTtHKFYscmUsd2UsIlx1MjI5MSIsIlxcc3FzdWJzZXRlcSIsITApO0coVixyZSx3ZSwiXHUyMjkyIiwiXFxzcXN1cHNldGVxIiwhMCk7RyhWLHJlLHdlLCJcdTIyNTAiLCJcXGRvdGVxIiwhMCk7RyhWLHJlLHdlLCJcdTIzMjIiLCJcXGZyb3duIiwhMCk7RyhWLHJlLHdlLCJcdTIyMEIiLCJcXG5pIiwhMCk7RyhWLHJlLHdlLCJcdTIyMUQiLCJcXHByb3B0byIsITApO0coVixyZSx3ZSwiXHUyMkEyIiwiXFx2ZGFzaCIsITApO0coVixyZSx3ZSwiXHUyMkEzIiwiXFxkYXNodiIsITApO0coVixyZSx3ZSwiXHUyMjBCIiwiXFxvd25zIik7RyhWLHJlLHk0LCIuIiwiXFxsZG90cCIpO0coVixyZSx5NCwiXHUyMkM1IiwiXFxjZG90cCIpO0coVixyZSxfZSwiIyIsIlxcIyIpO0coaXQscmUsX2UsIiMiLCJcXCMiKTtHKFYscmUsX2UsIiYiLCJcXCYiKTtHKGl0LHJlLF9lLCImIiwiXFwmIik7RyhWLHJlLF9lLCJcdTIxMzUiLCJcXGFsZXBoIiwhMCk7RyhWLHJlLF9lLCJcdTIyMDAiLCJcXGZvcmFsbCIsITApO0coVixyZSxfZSwiXHUyMTBGIiwiXFxoYmFyIiwhMCk7RyhWLHJlLF9lLCJcdTIyMDMiLCJcXGV4aXN0cyIsITApO0coVixyZSxfZSwiXHUyMjA3IiwiXFxuYWJsYSIsITApO0coVixyZSxfZSwiXHUyNjZEIiwiXFxmbGF0IiwhMCk7RyhWLHJlLF9lLCJcdTIxMTMiLCJcXGVsbCIsITApO0coVixyZSxfZSwiXHUyNjZFIiwiXFxuYXR1cmFsIiwhMCk7RyhWLHJlLF9lLCJcdTI2NjMiLCJcXGNsdWJzdWl0IiwhMCk7RyhWLHJlLF9lLCJcdTIxMTgiLCJcXHdwIiwhMCk7RyhWLHJlLF9lLCJcdTI2NkYiLCJcXHNoYXJwIiwhMCk7RyhWLHJlLF9lLCJcdTI2NjIiLCJcXGRpYW1vbmRzdWl0IiwhMCk7RyhWLHJlLF9lLCJcdTIxMUMiLCJcXFJlIiwhMCk7RyhWLHJlLF9lLCJcdTI2NjEiLCJcXGhlYXJ0c3VpdCIsITApO0coVixyZSxfZSwiXHUyMTExIiwiXFxJbSIsITApO0coVixyZSxfZSwiXHUyNjYwIiwiXFxzcGFkZXN1aXQiLCEwKTtHKFYscmUsX2UsIlx4QTciLCJcXFMiLCEwKTtHKGl0LHJlLF9lLCJceEE3IiwiXFxTIik7RyhWLHJlLF9lLCJceEI2IiwiXFxQIiwhMCk7RyhpdCxyZSxfZSwiXHhCNiIsIlxcUCIpO0coVixyZSxfZSwiXHUyMDIwIiwiXFxkYWciKTtHKGl0LHJlLF9lLCJcdTIwMjAiLCJcXGRhZyIpO0coaXQscmUsX2UsIlx1MjAyMCIsIlxcdGV4dGRhZ2dlciIpO0coVixyZSxfZSwiXHUyMDIxIiwiXFxkZGFnIik7RyhpdCxyZSxfZSwiXHUyMDIxIiwiXFxkZGFnIik7RyhpdCxyZSxfZSwiXHUyMDIxIiwiXFx0ZXh0ZGFnZ2VyZGJsIik7RyhWLHJlLHFhLCJcdTIzQjEiLCJcXHJtb3VzdGFjaGUiLCEwKTtHKFYscmUscXMsIlx1MjNCMCIsIlxcbG1vdXN0YWNoZSIsITApO0coVixyZSxxYSwiXHUyN0VGIiwiXFxyZ3JvdXAiLCEwKTtHKFYscmUscXMsIlx1MjdFRSIsIlxcbGdyb3VwIiwhMCk7RyhWLHJlLE50LCJcdTIyMTMiLCJcXG1wIiwhMCk7RyhWLHJlLE50LCJcdTIyOTYiLCJcXG9taW51cyIsITApO0coVixyZSxOdCwiXHUyMjhFIiwiXFx1cGx1cyIsITApO0coVixyZSxOdCwiXHUyMjkzIiwiXFxzcWNhcCIsITApO0coVixyZSxOdCwiXHUyMjE3IiwiXFxhc3QiKTtHKFYscmUsTnQsIlx1MjI5NCIsIlxcc3FjdXAiLCEwKTtHKFYscmUsTnQsIlx1MjVFRiIsIlxcYmlnY2lyYyIsITApO0coVixyZSxOdCwiXHUyMjE5IiwiXFxidWxsZXQiLCEwKTtHKFYscmUsTnQsIlx1MjAyMSIsIlxcZGRhZ2dlciIpO0coVixyZSxOdCwiXHUyMjQwIiwiXFx3ciIsITApO0coVixyZSxOdCwiXHUyQTNGIiwiXFxhbWFsZyIpO0coVixyZSxOdCwiJiIsIlxcQW5kIik7RyhWLHJlLHdlLCJcdTI3RjUiLCJcXGxvbmdsZWZ0YXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjFEMCIsIlxcTGVmdGFycm93IiwhMCk7RyhWLHJlLHdlLCJcdTI3RjgiLCJcXExvbmdsZWZ0YXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjdGNiIsIlxcbG9uZ3JpZ2h0YXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjFEMiIsIlxcUmlnaHRhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyN0Y5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyMTk0IiwiXFxsZWZ0cmlnaHRhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyN0Y3IiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjFENCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjdGQSIsIlxcTG9uZ2xlZnRyaWdodGFycm93IiwhMCk7RyhWLHJlLHdlLCJcdTIxQTYiLCJcXG1hcHN0byIsITApO0coVixyZSx3ZSwiXHUyN0ZDIiwiXFxsb25nbWFwc3RvIiwhMCk7RyhWLHJlLHdlLCJcdTIxOTciLCJcXG5lYXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjFBOSIsIlxcaG9va2xlZnRhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyMUFBIiwiXFxob29rcmlnaHRhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyMTk4IiwiXFxzZWFycm93IiwhMCk7RyhWLHJlLHdlLCJcdTIxQkMiLCJcXGxlZnRoYXJwb29udXAiLCEwKTtHKFYscmUsd2UsIlx1MjFDMCIsIlxccmlnaHRoYXJwb29udXAiLCEwKTtHKFYscmUsd2UsIlx1MjE5OSIsIlxcc3dhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyMUJEIiwiXFxsZWZ0aGFycG9vbmRvd24iLCEwKTtHKFYscmUsd2UsIlx1MjFDMSIsIlxccmlnaHRoYXJwb29uZG93biIsITApO0coVixyZSx3ZSwiXHUyMTk2IiwiXFxud2Fycm93IiwhMCk7RyhWLHJlLHdlLCJcdTIxQ0MiLCJcXHJpZ2h0bGVmdGhhcnBvb25zIiwhMCk7RyhWLHZlLHdlLCJcdTIyNkUiLCJcXG5sZXNzIiwhMCk7RyhWLHZlLHdlLCJcdUUwMTAiLCJcXEBubGVxc2xhbnQiKTtHKFYsdmUsd2UsIlx1RTAxMSIsIlxcQG5sZXFxIik7RyhWLHZlLHdlLCJcdTJBODciLCJcXGxuZXEiLCEwKTtHKFYsdmUsd2UsIlx1MjI2OCIsIlxcbG5lcXEiLCEwKTtHKFYsdmUsd2UsIlx1RTAwQyIsIlxcQGx2ZXJ0bmVxcSIpO0coVix2ZSx3ZSwiXHUyMkU2IiwiXFxsbnNpbSIsITApO0coVix2ZSx3ZSwiXHUyQTg5IiwiXFxsbmFwcHJveCIsITApO0coVix2ZSx3ZSwiXHUyMjgwIiwiXFxucHJlYyIsITApO0coVix2ZSx3ZSwiXHUyMkUwIiwiXFxucHJlY2VxIiwhMCk7RyhWLHZlLHdlLCJcdTIyRTgiLCJcXHByZWNuc2ltIiwhMCk7RyhWLHZlLHdlLCJcdTJBQjkiLCJcXHByZWNuYXBwcm94IiwhMCk7RyhWLHZlLHdlLCJcdTIyNDEiLCJcXG5zaW0iLCEwKTtHKFYsdmUsd2UsIlx1RTAwNiIsIlxcQG5zaG9ydG1pZCIpO0coVix2ZSx3ZSwiXHUyMjI0IiwiXFxubWlkIiwhMCk7RyhWLHZlLHdlLCJcdTIyQUMiLCJcXG52ZGFzaCIsITApO0coVix2ZSx3ZSwiXHUyMkFEIiwiXFxudkRhc2giLCEwKTtHKFYsdmUsd2UsIlx1MjJFQSIsIlxcbnRyaWFuZ2xlbGVmdCIpO0coVix2ZSx3ZSwiXHUyMkVDIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKTtHKFYsdmUsd2UsIlx1MjI4QSIsIlxcc3Vic2V0bmVxIiwhMCk7RyhWLHZlLHdlLCJcdUUwMUEiLCJcXEB2YXJzdWJzZXRuZXEiKTtHKFYsdmUsd2UsIlx1MkFDQiIsIlxcc3Vic2V0bmVxcSIsITApO0coVix2ZSx3ZSwiXHVFMDE3IiwiXFxAdmFyc3Vic2V0bmVxcSIpO0coVix2ZSx3ZSwiXHUyMjZGIiwiXFxuZ3RyIiwhMCk7RyhWLHZlLHdlLCJcdUUwMEYiLCJcXEBuZ2Vxc2xhbnQiKTtHKFYsdmUsd2UsIlx1RTAwRSIsIlxcQG5nZXFxIik7RyhWLHZlLHdlLCJcdTJBODgiLCJcXGduZXEiLCEwKTtHKFYsdmUsd2UsIlx1MjI2OSIsIlxcZ25lcXEiLCEwKTtHKFYsdmUsd2UsIlx1RTAwRCIsIlxcQGd2ZXJ0bmVxcSIpO0coVix2ZSx3ZSwiXHUyMkU3IiwiXFxnbnNpbSIsITApO0coVix2ZSx3ZSwiXHUyQThBIiwiXFxnbmFwcHJveCIsITApO0coVix2ZSx3ZSwiXHUyMjgxIiwiXFxuc3VjYyIsITApO0coVix2ZSx3ZSwiXHUyMkUxIiwiXFxuc3VjY2VxIiwhMCk7RyhWLHZlLHdlLCJcdTIyRTkiLCJcXHN1Y2Nuc2ltIiwhMCk7RyhWLHZlLHdlLCJcdTJBQkEiLCJcXHN1Y2NuYXBwcm94IiwhMCk7RyhWLHZlLHdlLCJcdTIyNDYiLCJcXG5jb25nIiwhMCk7RyhWLHZlLHdlLCJcdUUwMDciLCJcXEBuc2hvcnRwYXJhbGxlbCIpO0coVix2ZSx3ZSwiXHUyMjI2IiwiXFxucGFyYWxsZWwiLCEwKTtHKFYsdmUsd2UsIlx1MjJBRiIsIlxcblZEYXNoIiwhMCk7RyhWLHZlLHdlLCJcdTIyRUIiLCJcXG50cmlhbmdsZXJpZ2h0Iik7RyhWLHZlLHdlLCJcdTIyRUQiLCJcXG50cmlhbmdsZXJpZ2h0ZXEiLCEwKTtHKFYsdmUsd2UsIlx1RTAxOCIsIlxcQG5zdXBzZXRlcXEiKTtHKFYsdmUsd2UsIlx1MjI4QiIsIlxcc3Vwc2V0bmVxIiwhMCk7RyhWLHZlLHdlLCJcdUUwMUIiLCJcXEB2YXJzdXBzZXRuZXEiKTtHKFYsdmUsd2UsIlx1MkFDQyIsIlxcc3Vwc2V0bmVxcSIsITApO0coVix2ZSx3ZSwiXHVFMDE5IiwiXFxAdmFyc3Vwc2V0bmVxcSIpO0coVix2ZSx3ZSwiXHUyMkFFIiwiXFxuVmRhc2giLCEwKTtHKFYsdmUsd2UsIlx1MkFCNSIsIlxccHJlY25lcXEiLCEwKTtHKFYsdmUsd2UsIlx1MkFCNiIsIlxcc3VjY25lcXEiLCEwKTtHKFYsdmUsd2UsIlx1RTAxNiIsIlxcQG5zdWJzZXRlcXEiKTtHKFYsdmUsTnQsIlx1MjJCNCIsIlxcdW5saGQiKTtHKFYsdmUsTnQsIlx1MjJCNSIsIlxcdW5yaGQiKTtHKFYsdmUsd2UsIlx1MjE5QSIsIlxcbmxlZnRhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMTlCIiwiXFxucmlnaHRhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMUNEIiwiXFxuTGVmdGFycm93IiwhMCk7RyhWLHZlLHdlLCJcdTIxQ0YiLCJcXG5SaWdodGFycm93IiwhMCk7RyhWLHZlLHdlLCJcdTIxQUUiLCJcXG5sZWZ0cmlnaHRhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMUNFIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKTtHKFYsdmUsd2UsIlx1MjVCMyIsIlxcdmFydHJpYW5nbGUiKTtHKFYsdmUsX2UsIlx1MjEwRiIsIlxcaHNsYXNoIik7RyhWLHZlLF9lLCJcdTI1QkQiLCJcXHRyaWFuZ2xlZG93biIpO0coVix2ZSxfZSwiXHUyNUNBIiwiXFxsb3plbmdlIik7RyhWLHZlLF9lLCJcdTI0QzgiLCJcXGNpcmNsZWRTIik7RyhWLHZlLF9lLCJceEFFIiwiXFxjaXJjbGVkUiIpO0coaXQsdmUsX2UsIlx4QUUiLCJcXGNpcmNsZWRSIik7RyhWLHZlLF9lLCJcdTIyMjEiLCJcXG1lYXN1cmVkYW5nbGUiLCEwKTtHKFYsdmUsX2UsIlx1MjIwNCIsIlxcbmV4aXN0cyIpO0coVix2ZSxfZSwiXHUyMTI3IiwiXFxtaG8iKTtHKFYsdmUsX2UsIlx1MjEzMiIsIlxcRmludiIsITApO0coVix2ZSxfZSwiXHUyMTQxIiwiXFxHYW1lIiwhMCk7RyhWLHZlLF9lLCJcdTIwMzUiLCJcXGJhY2twcmltZSIpO0coVix2ZSxfZSwiXHUyNUIyIiwiXFxibGFja3RyaWFuZ2xlIik7RyhWLHZlLF9lLCJcdTI1QkMiLCJcXGJsYWNrdHJpYW5nbGVkb3duIik7RyhWLHZlLF9lLCJcdTI1QTAiLCJcXGJsYWNrc3F1YXJlIik7RyhWLHZlLF9lLCJcdTI5RUIiLCJcXGJsYWNrbG96ZW5nZSIpO0coVix2ZSxfZSwiXHUyNjA1IiwiXFxiaWdzdGFyIik7RyhWLHZlLF9lLCJcdTIyMjIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCk7RyhWLHZlLF9lLCJcdTIyMDEiLCJcXGNvbXBsZW1lbnQiLCEwKTtHKFYsdmUsX2UsIlx4RjAiLCJcXGV0aCIsITApO0coaXQscmUsX2UsIlx4RjAiLCJceEYwIik7RyhWLHZlLF9lLCJcdTI1NzEiLCJcXGRpYWd1cCIpO0coVix2ZSxfZSwiXHUyNTcyIiwiXFxkaWFnZG93biIpO0coVix2ZSxfZSwiXHUyNUExIiwiXFxzcXVhcmUiKTtHKFYsdmUsX2UsIlx1MjVBMSIsIlxcQm94Iik7RyhWLHZlLF9lLCJcdTI1Q0EiLCJcXERpYW1vbmQiKTtHKFYsdmUsX2UsIlx4QTUiLCJcXHllbiIsITApO0coaXQsdmUsX2UsIlx4QTUiLCJcXHllbiIsITApO0coVix2ZSxfZSwiXHUyNzEzIiwiXFxjaGVja21hcmsiLCEwKTtHKGl0LHZlLF9lLCJcdTI3MTMiLCJcXGNoZWNrbWFyayIpO0coVix2ZSxfZSwiXHUyMTM2IiwiXFxiZXRoIiwhMCk7RyhWLHZlLF9lLCJcdTIxMzgiLCJcXGRhbGV0aCIsITApO0coVix2ZSxfZSwiXHUyMTM3IiwiXFxnaW1lbCIsITApO0coVix2ZSxfZSwiXHUwM0REIiwiXFxkaWdhbW1hIiwhMCk7RyhWLHZlLF9lLCJcdTAzRjAiLCJcXHZhcmthcHBhIik7RyhWLHZlLHFzLCJcdTI1MEMiLCJcXEB1bGNvcm5lciIsITApO0coVix2ZSxxYSwiXHUyNTEwIiwiXFxAdXJjb3JuZXIiLCEwKTtHKFYsdmUscXMsIlx1MjUxNCIsIlxcQGxsY29ybmVyIiwhMCk7RyhWLHZlLHFhLCJcdTI1MTgiLCJcXEBscmNvcm5lciIsITApO0coVix2ZSx3ZSwiXHUyMjY2IiwiXFxsZXFxIiwhMCk7RyhWLHZlLHdlLCJcdTJBN0QiLCJcXGxlcXNsYW50IiwhMCk7RyhWLHZlLHdlLCJcdTJBOTUiLCJcXGVxc2xhbnRsZXNzIiwhMCk7RyhWLHZlLHdlLCJcdTIyNzIiLCJcXGxlc3NzaW0iLCEwKTtHKFYsdmUsd2UsIlx1MkE4NSIsIlxcbGVzc2FwcHJveCIsITApO0coVix2ZSx3ZSwiXHUyMjRBIiwiXFxhcHByb3hlcSIsITApO0coVix2ZSxOdCwiXHUyMkQ2IiwiXFxsZXNzZG90Iik7RyhWLHZlLHdlLCJcdTIyRDgiLCJcXGxsbCIsITApO0coVix2ZSx3ZSwiXHUyMjc2IiwiXFxsZXNzZ3RyIiwhMCk7RyhWLHZlLHdlLCJcdTIyREEiLCJcXGxlc3NlcWd0ciIsITApO0coVix2ZSx3ZSwiXHUyQThCIiwiXFxsZXNzZXFxZ3RyIiwhMCk7RyhWLHZlLHdlLCJcdTIyNTEiLCJcXGRvdGVxZG90Iik7RyhWLHZlLHdlLCJcdTIyNTMiLCJcXHJpc2luZ2RvdHNlcSIsITApO0coVix2ZSx3ZSwiXHUyMjUyIiwiXFxmYWxsaW5nZG90c2VxIiwhMCk7RyhWLHZlLHdlLCJcdTIyM0QiLCJcXGJhY2tzaW0iLCEwKTtHKFYsdmUsd2UsIlx1MjJDRCIsIlxcYmFja3NpbWVxIiwhMCk7RyhWLHZlLHdlLCJcdTJBQzUiLCJcXHN1YnNldGVxcSIsITApO0coVix2ZSx3ZSwiXHUyMkQwIiwiXFxTdWJzZXQiLCEwKTtHKFYsdmUsd2UsIlx1MjI4RiIsIlxcc3FzdWJzZXQiLCEwKTtHKFYsdmUsd2UsIlx1MjI3QyIsIlxccHJlY2N1cmx5ZXEiLCEwKTtHKFYsdmUsd2UsIlx1MjJERSIsIlxcY3VybHllcXByZWMiLCEwKTtHKFYsdmUsd2UsIlx1MjI3RSIsIlxccHJlY3NpbSIsITApO0coVix2ZSx3ZSwiXHUyQUI3IiwiXFxwcmVjYXBwcm94IiwhMCk7RyhWLHZlLHdlLCJcdTIyQjIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpO0coVix2ZSx3ZSwiXHUyMkI0IiwiXFx0cmlhbmdsZWxlZnRlcSIpO0coVix2ZSx3ZSwiXHUyMkE4IiwiXFx2RGFzaCIsITApO0coVix2ZSx3ZSwiXHUyMkFBIiwiXFxWdmRhc2giLCEwKTtHKFYsdmUsd2UsIlx1MjMyMyIsIlxcc21hbGxzbWlsZSIpO0coVix2ZSx3ZSwiXHUyMzIyIiwiXFxzbWFsbGZyb3duIik7RyhWLHZlLHdlLCJcdTIyNEYiLCJcXGJ1bXBlcSIsITApO0coVix2ZSx3ZSwiXHUyMjRFIiwiXFxCdW1wZXEiLCEwKTtHKFYsdmUsd2UsIlx1MjI2NyIsIlxcZ2VxcSIsITApO0coVix2ZSx3ZSwiXHUyQTdFIiwiXFxnZXFzbGFudCIsITApO0coVix2ZSx3ZSwiXHUyQTk2IiwiXFxlcXNsYW50Z3RyIiwhMCk7RyhWLHZlLHdlLCJcdTIyNzMiLCJcXGd0cnNpbSIsITApO0coVix2ZSx3ZSwiXHUyQTg2IiwiXFxndHJhcHByb3giLCEwKTtHKFYsdmUsTnQsIlx1MjJENyIsIlxcZ3RyZG90Iik7RyhWLHZlLHdlLCJcdTIyRDkiLCJcXGdnZyIsITApO0coVix2ZSx3ZSwiXHUyMjc3IiwiXFxndHJsZXNzIiwhMCk7RyhWLHZlLHdlLCJcdTIyREIiLCJcXGd0cmVxbGVzcyIsITApO0coVix2ZSx3ZSwiXHUyQThDIiwiXFxndHJlcXFsZXNzIiwhMCk7RyhWLHZlLHdlLCJcdTIyNTYiLCJcXGVxY2lyYyIsITApO0coVix2ZSx3ZSwiXHUyMjU3IiwiXFxjaXJjZXEiLCEwKTtHKFYsdmUsd2UsIlx1MjI1QyIsIlxcdHJpYW5nbGVxIiwhMCk7RyhWLHZlLHdlLCJcdTIyM0MiLCJcXHRoaWNrc2ltIik7RyhWLHZlLHdlLCJcdTIyNDgiLCJcXHRoaWNrYXBwcm94Iik7RyhWLHZlLHdlLCJcdTJBQzYiLCJcXHN1cHNldGVxcSIsITApO0coVix2ZSx3ZSwiXHUyMkQxIiwiXFxTdXBzZXQiLCEwKTtHKFYsdmUsd2UsIlx1MjI5MCIsIlxcc3FzdXBzZXQiLCEwKTtHKFYsdmUsd2UsIlx1MjI3RCIsIlxcc3VjY2N1cmx5ZXEiLCEwKTtHKFYsdmUsd2UsIlx1MjJERiIsIlxcY3VybHllcXN1Y2MiLCEwKTtHKFYsdmUsd2UsIlx1MjI3RiIsIlxcc3VjY3NpbSIsITApO0coVix2ZSx3ZSwiXHUyQUI4IiwiXFxzdWNjYXBwcm94IiwhMCk7RyhWLHZlLHdlLCJcdTIyQjMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKTtHKFYsdmUsd2UsIlx1MjJCNSIsIlxcdHJpYW5nbGVyaWdodGVxIik7RyhWLHZlLHdlLCJcdTIyQTkiLCJcXFZkYXNoIiwhMCk7RyhWLHZlLHdlLCJcdTIyMjMiLCJcXHNob3J0bWlkIik7RyhWLHZlLHdlLCJcdTIyMjUiLCJcXHNob3J0cGFyYWxsZWwiKTtHKFYsdmUsd2UsIlx1MjI2QyIsIlxcYmV0d2VlbiIsITApO0coVix2ZSx3ZSwiXHUyMkQ0IiwiXFxwaXRjaGZvcmsiLCEwKTtHKFYsdmUsd2UsIlx1MjIxRCIsIlxcdmFycHJvcHRvIik7RyhWLHZlLHdlLCJcdTI1QzAiLCJcXGJsYWNrdHJpYW5nbGVsZWZ0Iik7RyhWLHZlLHdlLCJcdTIyMzQiLCJcXHRoZXJlZm9yZSIsITApO0coVix2ZSx3ZSwiXHUyMjBEIiwiXFxiYWNrZXBzaWxvbiIpO0coVix2ZSx3ZSwiXHUyNUI2IiwiXFxibGFja3RyaWFuZ2xlcmlnaHQiKTtHKFYsdmUsd2UsIlx1MjIzNSIsIlxcYmVjYXVzZSIsITApO0coVix2ZSx3ZSwiXHUyMkQ4IiwiXFxsbGxlc3MiKTtHKFYsdmUsd2UsIlx1MjJEOSIsIlxcZ2dndHIiKTtHKFYsdmUsTnQsIlx1MjJCMiIsIlxcbGhkIik7RyhWLHZlLE50LCJcdTIyQjMiLCJcXHJoZCIpO0coVix2ZSx3ZSwiXHUyMjQyIiwiXFxlcXNpbSIsITApO0coVixyZSx3ZSwiXHUyMkM4IiwiXFxKb2luIik7RyhWLHZlLHdlLCJcdTIyNTEiLCJcXERvdGVxIiwhMCk7RyhWLHZlLE50LCJcdTIyMTQiLCJcXGRvdHBsdXMiLCEwKTtHKFYsdmUsTnQsIlx1MjIxNiIsIlxcc21hbGxzZXRtaW51cyIpO0coVix2ZSxOdCwiXHUyMkQyIiwiXFxDYXAiLCEwKTtHKFYsdmUsTnQsIlx1MjJEMyIsIlxcQ3VwIiwhMCk7RyhWLHZlLE50LCJcdTJBNUUiLCJcXGRvdWJsZWJhcndlZGdlIiwhMCk7RyhWLHZlLE50LCJcdTIyOUYiLCJcXGJveG1pbnVzIiwhMCk7RyhWLHZlLE50LCJcdTIyOUUiLCJcXGJveHBsdXMiLCEwKTtHKFYsdmUsTnQsIlx1MjJDNyIsIlxcZGl2aWRlb250aW1lcyIsITApO0coVix2ZSxOdCwiXHUyMkM5IiwiXFxsdGltZXMiLCEwKTtHKFYsdmUsTnQsIlx1MjJDQSIsIlxccnRpbWVzIiwhMCk7RyhWLHZlLE50LCJcdTIyQ0IiLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCk7RyhWLHZlLE50LCJcdTIyQ0MiLCJcXHJpZ2h0dGhyZWV0aW1lcyIsITApO0coVix2ZSxOdCwiXHUyMkNGIiwiXFxjdXJseXdlZGdlIiwhMCk7RyhWLHZlLE50LCJcdTIyQ0UiLCJcXGN1cmx5dmVlIiwhMCk7RyhWLHZlLE50LCJcdTIyOUQiLCJcXGNpcmNsZWRkYXNoIiwhMCk7RyhWLHZlLE50LCJcdTIyOUIiLCJcXGNpcmNsZWRhc3QiLCEwKTtHKFYsdmUsTnQsIlx1MjJDNSIsIlxcY2VudGVyZG90Iik7RyhWLHZlLE50LCJcdTIyQkEiLCJcXGludGVyY2FsIiwhMCk7RyhWLHZlLE50LCJcdTIyRDIiLCJcXGRvdWJsZWNhcCIpO0coVix2ZSxOdCwiXHUyMkQzIiwiXFxkb3VibGVjdXAiKTtHKFYsdmUsTnQsIlx1MjJBMCIsIlxcYm94dGltZXMiLCEwKTtHKFYsdmUsd2UsIlx1MjFFMiIsIlxcZGFzaHJpZ2h0YXJyb3ciLCEwKTtHKFYsdmUsd2UsIlx1MjFFMCIsIlxcZGFzaGxlZnRhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMUM3IiwiXFxsZWZ0bGVmdGFycm93cyIsITApO0coVix2ZSx3ZSwiXHUyMUM2IiwiXFxsZWZ0cmlnaHRhcnJvd3MiLCEwKTtHKFYsdmUsd2UsIlx1MjFEQSIsIlxcTGxlZnRhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMTlFIiwiXFx0d29oZWFkbGVmdGFycm93IiwhMCk7RyhWLHZlLHdlLCJcdTIxQTIiLCJcXGxlZnRhcnJvd3RhaWwiLCEwKTtHKFYsdmUsd2UsIlx1MjFBQiIsIlxcbG9vcGFycm93bGVmdCIsITApO0coVix2ZSx3ZSwiXHUyMUNCIiwiXFxsZWZ0cmlnaHRoYXJwb29ucyIsITApO0coVix2ZSx3ZSwiXHUyMUI2IiwiXFxjdXJ2ZWFycm93bGVmdCIsITApO0coVix2ZSx3ZSwiXHUyMUJBIiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKTtHKFYsdmUsd2UsIlx1MjFCMCIsIlxcTHNoIiwhMCk7RyhWLHZlLHdlLCJcdTIxQzgiLCJcXHVwdXBhcnJvd3MiLCEwKTtHKFYsdmUsd2UsIlx1MjFCRiIsIlxcdXBoYXJwb29ubGVmdCIsITApO0coVix2ZSx3ZSwiXHUyMUMzIiwiXFxkb3duaGFycG9vbmxlZnQiLCEwKTtHKFYscmUsd2UsIlx1MjJCNiIsIlxcb3JpZ29mIiwhMCk7RyhWLHJlLHdlLCJcdTIyQjciLCJcXGltYWdlb2YiLCEwKTtHKFYsdmUsd2UsIlx1MjJCOCIsIlxcbXVsdGltYXAiLCEwKTtHKFYsdmUsd2UsIlx1MjFBRCIsIlxcbGVmdHJpZ2h0c3F1aWdhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMUM5IiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCk7RyhWLHZlLHdlLCJcdTIxQzQiLCJcXHJpZ2h0bGVmdGFycm93cyIsITApO0coVix2ZSx3ZSwiXHUyMUEwIiwiXFx0d29oZWFkcmlnaHRhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMUEzIiwiXFxyaWdodGFycm93dGFpbCIsITApO0coVix2ZSx3ZSwiXHUyMUFDIiwiXFxsb29wYXJyb3dyaWdodCIsITApO0coVix2ZSx3ZSwiXHUyMUI3IiwiXFxjdXJ2ZWFycm93cmlnaHQiLCEwKTtHKFYsdmUsd2UsIlx1MjFCQiIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApO0coVix2ZSx3ZSwiXHUyMUIxIiwiXFxSc2giLCEwKTtHKFYsdmUsd2UsIlx1MjFDQSIsIlxcZG93bmRvd25hcnJvd3MiLCEwKTtHKFYsdmUsd2UsIlx1MjFCRSIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKTtHKFYsdmUsd2UsIlx1MjFDMiIsIlxcZG93bmhhcnBvb25yaWdodCIsITApO0coVix2ZSx3ZSwiXHUyMUREIiwiXFxyaWdodHNxdWlnYXJyb3ciLCEwKTtHKFYsdmUsd2UsIlx1MjFERCIsIlxcbGVhZHN0byIpO0coVix2ZSx3ZSwiXHUyMURCIiwiXFxScmlnaHRhcnJvdyIsITApO0coVix2ZSx3ZSwiXHUyMUJFIiwiXFxyZXN0cmljdGlvbiIpO0coVixyZSxfZSwiXHUyMDE4IiwiYCIpO0coVixyZSxfZSwiJCIsIlxcJCIpO0coaXQscmUsX2UsIiQiLCJcXCQiKTtHKGl0LHJlLF9lLCIkIiwiXFx0ZXh0ZG9sbGFyIik7RyhWLHJlLF9lLCIlIiwiXFwlIik7RyhpdCxyZSxfZSwiJSIsIlxcJSIpO0coVixyZSxfZSwiXyIsIlxcXyIpO0coaXQscmUsX2UsIl8iLCJcXF8iKTtHKGl0LHJlLF9lLCJfIiwiXFx0ZXh0dW5kZXJzY29yZSIpO0coVixyZSxfZSwiXHUyMjIwIiwiXFxhbmdsZSIsITApO0coVixyZSxfZSwiXHUyMjFFIiwiXFxpbmZ0eSIsITApO0coVixyZSxfZSwiXHUyMDMyIiwiXFxwcmltZSIpO0coVixyZSxfZSwiXHUyNUIzIiwiXFx0cmlhbmdsZSIpO0coVixyZSxfZSwiXHUwMzkzIiwiXFxHYW1tYSIsITApO0coVixyZSxfZSwiXHUwMzk0IiwiXFxEZWx0YSIsITApO0coVixyZSxfZSwiXHUwMzk4IiwiXFxUaGV0YSIsITApO0coVixyZSxfZSwiXHUwMzlCIiwiXFxMYW1iZGEiLCEwKTtHKFYscmUsX2UsIlx1MDM5RSIsIlxcWGkiLCEwKTtHKFYscmUsX2UsIlx1MDNBMCIsIlxcUGkiLCEwKTtHKFYscmUsX2UsIlx1MDNBMyIsIlxcU2lnbWEiLCEwKTtHKFYscmUsX2UsIlx1MDNBNSIsIlxcVXBzaWxvbiIsITApO0coVixyZSxfZSwiXHUwM0E2IiwiXFxQaGkiLCEwKTtHKFYscmUsX2UsIlx1MDNBOCIsIlxcUHNpIiwhMCk7RyhWLHJlLF9lLCJcdTAzQTkiLCJcXE9tZWdhIiwhMCk7RyhWLHJlLF9lLCJBIiwiXHUwMzkxIik7RyhWLHJlLF9lLCJCIiwiXHUwMzkyIik7RyhWLHJlLF9lLCJFIiwiXHUwMzk1Iik7RyhWLHJlLF9lLCJaIiwiXHUwMzk2Iik7RyhWLHJlLF9lLCJIIiwiXHUwMzk3Iik7RyhWLHJlLF9lLCJJIiwiXHUwMzk5Iik7RyhWLHJlLF9lLCJLIiwiXHUwMzlBIik7RyhWLHJlLF9lLCJNIiwiXHUwMzlDIik7RyhWLHJlLF9lLCJOIiwiXHUwMzlEIik7RyhWLHJlLF9lLCJPIiwiXHUwMzlGIik7RyhWLHJlLF9lLCJQIiwiXHUwM0ExIik7RyhWLHJlLF9lLCJUIiwiXHUwM0E0Iik7RyhWLHJlLF9lLCJYIiwiXHUwM0E3Iik7RyhWLHJlLF9lLCJceEFDIiwiXFxuZWciLCEwKTtHKFYscmUsX2UsIlx4QUMiLCJcXGxub3QiKTtHKFYscmUsX2UsIlx1MjJBNCIsIlxcdG9wIik7RyhWLHJlLF9lLCJcdTIyQTUiLCJcXGJvdCIpO0coVixyZSxfZSwiXHUyMjA1IiwiXFxlbXB0eXNldCIpO0coVix2ZSxfZSwiXHUyMjA1IiwiXFx2YXJub3RoaW5nIik7RyhWLHJlLHRyLCJcdTAzQjEiLCJcXGFscGhhIiwhMCk7RyhWLHJlLHRyLCJcdTAzQjIiLCJcXGJldGEiLCEwKTtHKFYscmUsdHIsIlx1MDNCMyIsIlxcZ2FtbWEiLCEwKTtHKFYscmUsdHIsIlx1MDNCNCIsIlxcZGVsdGEiLCEwKTtHKFYscmUsdHIsIlx1MDNGNSIsIlxcZXBzaWxvbiIsITApO0coVixyZSx0ciwiXHUwM0I2IiwiXFx6ZXRhIiwhMCk7RyhWLHJlLHRyLCJcdTAzQjciLCJcXGV0YSIsITApO0coVixyZSx0ciwiXHUwM0I4IiwiXFx0aGV0YSIsITApO0coVixyZSx0ciwiXHUwM0I5IiwiXFxpb3RhIiwhMCk7RyhWLHJlLHRyLCJcdTAzQkEiLCJcXGthcHBhIiwhMCk7RyhWLHJlLHRyLCJcdTAzQkIiLCJcXGxhbWJkYSIsITApO0coVixyZSx0ciwiXHUwM0JDIiwiXFxtdSIsITApO0coVixyZSx0ciwiXHUwM0JEIiwiXFxudSIsITApO0coVixyZSx0ciwiXHUwM0JFIiwiXFx4aSIsITApO0coVixyZSx0ciwiXHUwM0JGIiwiXFxvbWljcm9uIiwhMCk7RyhWLHJlLHRyLCJcdTAzQzAiLCJcXHBpIiwhMCk7RyhWLHJlLHRyLCJcdTAzQzEiLCJcXHJobyIsITApO0coVixyZSx0ciwiXHUwM0MzIiwiXFxzaWdtYSIsITApO0coVixyZSx0ciwiXHUwM0M0IiwiXFx0YXUiLCEwKTtHKFYscmUsdHIsIlx1MDNDNSIsIlxcdXBzaWxvbiIsITApO0coVixyZSx0ciwiXHUwM0Q1IiwiXFxwaGkiLCEwKTtHKFYscmUsdHIsIlx1MDNDNyIsIlxcY2hpIiwhMCk7RyhWLHJlLHRyLCJcdTAzQzgiLCJcXHBzaSIsITApO0coVixyZSx0ciwiXHUwM0M5IiwiXFxvbWVnYSIsITApO0coVixyZSx0ciwiXHUwM0I1IiwiXFx2YXJlcHNpbG9uIiwhMCk7RyhWLHJlLHRyLCJcdTAzRDEiLCJcXHZhcnRoZXRhIiwhMCk7RyhWLHJlLHRyLCJcdTAzRDYiLCJcXHZhcnBpIiwhMCk7RyhWLHJlLHRyLCJcdTAzRjEiLCJcXHZhcnJobyIsITApO0coVixyZSx0ciwiXHUwM0MyIiwiXFx2YXJzaWdtYSIsITApO0coVixyZSx0ciwiXHUwM0M2IiwiXFx2YXJwaGkiLCEwKTtHKFYscmUsTnQsIlx1MjIxNyIsIioiLCEwKTtHKFYscmUsTnQsIisiLCIrIik7RyhWLHJlLE50LCJcdTIyMTIiLCItIiwhMCk7RyhWLHJlLE50LCJcdTIyQzUiLCJcXGNkb3QiLCEwKTtHKFYscmUsTnQsIlx1MjIxOCIsIlxcY2lyYyIsITApO0coVixyZSxOdCwiXHhGNyIsIlxcZGl2IiwhMCk7RyhWLHJlLE50LCJceEIxIiwiXFxwbSIsITApO0coVixyZSxOdCwiXHhENyIsIlxcdGltZXMiLCEwKTtHKFYscmUsTnQsIlx1MjIyOSIsIlxcY2FwIiwhMCk7RyhWLHJlLE50LCJcdTIyMkEiLCJcXGN1cCIsITApO0coVixyZSxOdCwiXHUyMjE2IiwiXFxzZXRtaW51cyIsITApO0coVixyZSxOdCwiXHUyMjI3IiwiXFxsYW5kIik7RyhWLHJlLE50LCJcdTIyMjgiLCJcXGxvciIpO0coVixyZSxOdCwiXHUyMjI3IiwiXFx3ZWRnZSIsITApO0coVixyZSxOdCwiXHUyMjI4IiwiXFx2ZWUiLCEwKTtHKFYscmUsX2UsIlx1MjIxQSIsIlxcc3VyZCIpO0coVixyZSxxcywiXHUyN0U4IiwiXFxsYW5nbGUiLCEwKTtHKFYscmUscXMsIlx1MjIyMyIsIlxcbHZlcnQiKTtHKFYscmUscXMsIlx1MjIyNSIsIlxcbFZlcnQiKTtHKFYscmUscWEsIj8iLCI/Iik7RyhWLHJlLHFhLCIhIiwiISIpO0coVixyZSxxYSwiXHUyN0U5IiwiXFxyYW5nbGUiLCEwKTtHKFYscmUscWEsIlx1MjIyMyIsIlxccnZlcnQiKTtHKFYscmUscWEsIlx1MjIyNSIsIlxcclZlcnQiKTtHKFYscmUsd2UsIj0iLCI9Iik7RyhWLHJlLHdlLCI6IiwiOiIpO0coVixyZSx3ZSwiXHUyMjQ4IiwiXFxhcHByb3giLCEwKTtHKFYscmUsd2UsIlx1MjI0NSIsIlxcY29uZyIsITApO0coVixyZSx3ZSwiXHUyMjY1IiwiXFxnZSIpO0coVixyZSx3ZSwiXHUyMjY1IiwiXFxnZXEiLCEwKTtHKFYscmUsd2UsIlx1MjE5MCIsIlxcZ2V0cyIpO0coVixyZSx3ZSwiPiIsIlxcZ3QiLCEwKTtHKFYscmUsd2UsIlx1MjIwOCIsIlxcaW4iLCEwKTtHKFYscmUsd2UsIlx1RTAyMCIsIlxcQG5vdCIpO0coVixyZSx3ZSwiXHUyMjgyIiwiXFxzdWJzZXQiLCEwKTtHKFYscmUsd2UsIlx1MjI4MyIsIlxcc3Vwc2V0IiwhMCk7RyhWLHJlLHdlLCJcdTIyODYiLCJcXHN1YnNldGVxIiwhMCk7RyhWLHJlLHdlLCJcdTIyODciLCJcXHN1cHNldGVxIiwhMCk7RyhWLHZlLHdlLCJcdTIyODgiLCJcXG5zdWJzZXRlcSIsITApO0coVix2ZSx3ZSwiXHUyMjg5IiwiXFxuc3Vwc2V0ZXEiLCEwKTtHKFYscmUsd2UsIlx1MjJBOCIsIlxcbW9kZWxzIik7RyhWLHJlLHdlLCJcdTIxOTAiLCJcXGxlZnRhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyMjY0IiwiXFxsZSIpO0coVixyZSx3ZSwiXHUyMjY0IiwiXFxsZXEiLCEwKTtHKFYscmUsd2UsIjwiLCJcXGx0IiwhMCk7RyhWLHJlLHdlLCJcdTIxOTIiLCJcXHJpZ2h0YXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjE5MiIsIlxcdG8iKTtHKFYsdmUsd2UsIlx1MjI3MSIsIlxcbmdlcSIsITApO0coVix2ZSx3ZSwiXHUyMjcwIiwiXFxubGVxIiwhMCk7RyhWLHJlLHN1LCJceEEwIiwiXFwgIik7RyhWLHJlLHN1LCJceEEwIiwiXFxzcGFjZSIpO0coVixyZSxzdSwiXHhBMCIsIlxcbm9icmVha3NwYWNlIik7RyhpdCxyZSxzdSwiXHhBMCIsIlxcICIpO0coaXQscmUsc3UsIlx4QTAiLCIgIik7RyhpdCxyZSxzdSwiXHhBMCIsIlxcc3BhY2UiKTtHKGl0LHJlLHN1LCJceEEwIiwiXFxub2JyZWFrc3BhY2UiKTtHKFYscmUsc3UsbnVsbCwiXFxub2JyZWFrIik7RyhWLHJlLHN1LG51bGwsIlxcYWxsb3dicmVhayIpO0coVixyZSx5NCwiLCIsIiwiKTtHKFYscmUseTQsIjsiLCI7Iik7RyhWLHZlLE50LCJcdTIyQkMiLCJcXGJhcndlZGdlIiwhMCk7RyhWLHZlLE50LCJcdTIyQkIiLCJcXHZlZWJhciIsITApO0coVixyZSxOdCwiXHUyMjk5IiwiXFxvZG90IiwhMCk7RyhWLHJlLE50LCJcdTIyOTUiLCJcXG9wbHVzIiwhMCk7RyhWLHJlLE50LCJcdTIyOTciLCJcXG90aW1lcyIsITApO0coVixyZSxfZSwiXHUyMjAyIiwiXFxwYXJ0aWFsIiwhMCk7RyhWLHJlLE50LCJcdTIyOTgiLCJcXG9zbGFzaCIsITApO0coVix2ZSxOdCwiXHUyMjlBIiwiXFxjaXJjbGVkY2lyYyIsITApO0coVix2ZSxOdCwiXHUyMkExIiwiXFxib3hkb3QiLCEwKTtHKFYscmUsTnQsIlx1MjVCMyIsIlxcYmlndHJpYW5nbGV1cCIpO0coVixyZSxOdCwiXHUyNUJEIiwiXFxiaWd0cmlhbmdsZWRvd24iKTtHKFYscmUsTnQsIlx1MjAyMCIsIlxcZGFnZ2VyIik7RyhWLHJlLE50LCJcdTIyQzQiLCJcXGRpYW1vbmQiKTtHKFYscmUsTnQsIlx1MjJDNiIsIlxcc3RhciIpO0coVixyZSxOdCwiXHUyNUMzIiwiXFx0cmlhbmdsZWxlZnQiKTtHKFYscmUsTnQsIlx1MjVCOSIsIlxcdHJpYW5nbGVyaWdodCIpO0coVixyZSxxcywieyIsIlxceyIpO0coaXQscmUsX2UsInsiLCJcXHsiKTtHKGl0LHJlLF9lLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iik7RyhWLHJlLHFhLCJ9IiwiXFx9Iik7RyhpdCxyZSxfZSwifSIsIlxcfSIpO0coaXQscmUsX2UsIn0iLCJcXHRleHRicmFjZXJpZ2h0Iik7RyhWLHJlLHFzLCJ7IiwiXFxsYnJhY2UiKTtHKFYscmUscWEsIn0iLCJcXHJicmFjZSIpO0coVixyZSxxcywiWyIsIlxcbGJyYWNrIiwhMCk7RyhpdCxyZSxfZSwiWyIsIlxcbGJyYWNrIiwhMCk7RyhWLHJlLHFhLCJdIiwiXFxyYnJhY2siLCEwKTtHKGl0LHJlLF9lLCJdIiwiXFxyYnJhY2siLCEwKTtHKFYscmUscXMsIigiLCJcXGxwYXJlbiIsITApO0coVixyZSxxYSwiKSIsIlxccnBhcmVuIiwhMCk7RyhpdCxyZSxfZSwiPCIsIlxcdGV4dGxlc3MiLCEwKTtHKGl0LHJlLF9lLCI+IiwiXFx0ZXh0Z3JlYXRlciIsITApO0coVixyZSxxcywiXHUyMzBBIiwiXFxsZmxvb3IiLCEwKTtHKFYscmUscWEsIlx1MjMwQiIsIlxccmZsb29yIiwhMCk7RyhWLHJlLHFzLCJcdTIzMDgiLCJcXGxjZWlsIiwhMCk7RyhWLHJlLHFhLCJcdTIzMDkiLCJcXHJjZWlsIiwhMCk7RyhWLHJlLF9lLCJcXCIsIlxcYmFja3NsYXNoIik7RyhWLHJlLF9lLCJcdTIyMjMiLCJ8Iik7RyhWLHJlLF9lLCJcdTIyMjMiLCJcXHZlcnQiKTtHKGl0LHJlLF9lLCJ8IiwiXFx0ZXh0YmFyIiwhMCk7RyhWLHJlLF9lLCJcdTIyMjUiLCJcXHwiKTtHKFYscmUsX2UsIlx1MjIyNSIsIlxcVmVydCIpO0coaXQscmUsX2UsIlx1MjIyNSIsIlxcdGV4dGJhcmRibCIpO0coaXQscmUsX2UsIn4iLCJcXHRleHRhc2NpaXRpbGRlIik7RyhpdCxyZSxfZSwiXFwiLCJcXHRleHRiYWNrc2xhc2giKTtHKGl0LHJlLF9lLCJeIiwiXFx0ZXh0YXNjaWljaXJjdW0iKTtHKFYscmUsd2UsIlx1MjE5MSIsIlxcdXBhcnJvdyIsITApO0coVixyZSx3ZSwiXHUyMUQxIiwiXFxVcGFycm93IiwhMCk7RyhWLHJlLHdlLCJcdTIxOTMiLCJcXGRvd25hcnJvdyIsITApO0coVixyZSx3ZSwiXHUyMUQzIiwiXFxEb3duYXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjE5NSIsIlxcdXBkb3duYXJyb3ciLCEwKTtHKFYscmUsd2UsIlx1MjFENSIsIlxcVXBkb3duYXJyb3ciLCEwKTtHKFYscmUsVGksIlx1MjIxMCIsIlxcY29wcm9kIik7RyhWLHJlLFRpLCJcdTIyQzEiLCJcXGJpZ3ZlZSIpO0coVixyZSxUaSwiXHUyMkMwIiwiXFxiaWd3ZWRnZSIpO0coVixyZSxUaSwiXHUyQTA0IiwiXFxiaWd1cGx1cyIpO0coVixyZSxUaSwiXHUyMkMyIiwiXFxiaWdjYXAiKTtHKFYscmUsVGksIlx1MjJDMyIsIlxcYmlnY3VwIik7RyhWLHJlLFRpLCJcdTIyMkIiLCJcXGludCIpO0coVixyZSxUaSwiXHUyMjJCIiwiXFxpbnRvcCIpO0coVixyZSxUaSwiXHUyMjJDIiwiXFxpaW50Iik7RyhWLHJlLFRpLCJcdTIyMkQiLCJcXGlpaW50Iik7RyhWLHJlLFRpLCJcdTIyMEYiLCJcXHByb2QiKTtHKFYscmUsVGksIlx1MjIxMSIsIlxcc3VtIik7RyhWLHJlLFRpLCJcdTJBMDIiLCJcXGJpZ290aW1lcyIpO0coVixyZSxUaSwiXHUyQTAxIiwiXFxiaWdvcGx1cyIpO0coVixyZSxUaSwiXHUyQTAwIiwiXFxiaWdvZG90Iik7RyhWLHJlLFRpLCJcdTIyMkUiLCJcXG9pbnQiKTtHKFYscmUsVGksIlx1MjIyRiIsIlxcb2lpbnQiKTtHKFYscmUsVGksIlx1MjIzMCIsIlxcb2lpaW50Iik7RyhWLHJlLFRpLCJcdTJBMDYiLCJcXGJpZ3NxY3VwIik7RyhWLHJlLFRpLCJcdTIyMkIiLCJcXHNtYWxsaW50Iik7RyhpdCxyZSxkcCwiXHUyMDI2IiwiXFx0ZXh0ZWxsaXBzaXMiKTtHKFYscmUsZHAsIlx1MjAyNiIsIlxcbWF0aGVsbGlwc2lzIik7RyhpdCxyZSxkcCwiXHUyMDI2IiwiXFxsZG90cyIsITApO0coVixyZSxkcCwiXHUyMDI2IiwiXFxsZG90cyIsITApO0coVixyZSxkcCwiXHUyMkVGIiwiXFxAY2RvdHMiLCEwKTtHKFYscmUsZHAsIlx1MjJGMSIsIlxcZGRvdHMiLCEwKTtHKFYscmUsX2UsIlx1MjJFRSIsIlxcdmFydmRvdHMiKTtHKFYscmUsJG4sIlx1MDJDQSIsIlxcYWN1dGUiKTtHKFYscmUsJG4sIlx1MDJDQiIsIlxcZ3JhdmUiKTtHKFYscmUsJG4sIlx4QTgiLCJcXGRkb3QiKTtHKFYscmUsJG4sIn4iLCJcXHRpbGRlIik7RyhWLHJlLCRuLCJcdTAyQzkiLCJcXGJhciIpO0coVixyZSwkbiwiXHUwMkQ4IiwiXFxicmV2ZSIpO0coVixyZSwkbiwiXHUwMkM3IiwiXFxjaGVjayIpO0coVixyZSwkbiwiXiIsIlxcaGF0Iik7RyhWLHJlLCRuLCJcdTIwRDciLCJcXHZlYyIpO0coVixyZSwkbiwiXHUwMkQ5IiwiXFxkb3QiKTtHKFYscmUsJG4sIlx1MDJEQSIsIlxcbWF0aHJpbmciKTtHKFYscmUsdHIsIlx1RTEzMSIsIlxcQGltYXRoIik7RyhWLHJlLHRyLCJcdUUyMzciLCJcXEBqbWF0aCIpO0coVixyZSxfZSwiXHUwMTMxIiwiXHUwMTMxIik7RyhWLHJlLF9lLCJcdTAyMzciLCJcdTAyMzciKTtHKGl0LHJlLF9lLCJcdTAxMzEiLCJcXGkiLCEwKTtHKGl0LHJlLF9lLCJcdTAyMzciLCJcXGoiLCEwKTtHKGl0LHJlLF9lLCJceERGIiwiXFxzcyIsITApO0coaXQscmUsX2UsIlx4RTYiLCJcXGFlIiwhMCk7RyhpdCxyZSxfZSwiXHUwMTUzIiwiXFxvZSIsITApO0coaXQscmUsX2UsIlx4RjgiLCJcXG8iLCEwKTtHKGl0LHJlLF9lLCJceEM2IiwiXFxBRSIsITApO0coaXQscmUsX2UsIlx1MDE1MiIsIlxcT0UiLCEwKTtHKGl0LHJlLF9lLCJceEQ4IiwiXFxPIiwhMCk7RyhpdCxyZSwkbiwiXHUwMkNBIiwiXFwnIik7RyhpdCxyZSwkbiwiXHUwMkNCIiwiXFxgIik7RyhpdCxyZSwkbiwiXHUwMkM2IiwiXFxeIik7RyhpdCxyZSwkbiwiXHUwMkRDIiwiXFx+Iik7RyhpdCxyZSwkbiwiXHUwMkM5IiwiXFw9Iik7RyhpdCxyZSwkbiwiXHUwMkQ4IiwiXFx1Iik7RyhpdCxyZSwkbiwiXHUwMkQ5IiwiXFwuIik7RyhpdCxyZSwkbiwiXHhCOCIsIlxcYyIpO0coaXQscmUsJG4sIlx1MDJEQSIsIlxcciIpO0coaXQscmUsJG4sIlx1MDJDNyIsIlxcdiIpO0coaXQscmUsJG4sIlx4QTgiLCdcXCInKTtHKGl0LHJlLCRuLCJcdTAyREQiLCJcXEgiKTtHKGl0LHJlLCRuLCJcdTI1RUYiLCJcXHRleHRjaXJjbGVkIik7Vkc9eyItLSI6ITAsIi0tLSI6ITAsImBgIjohMCwiJyciOiEwfTtHKGl0LHJlLF9lLCJcdTIwMTMiLCItLSIsITApO0coaXQscmUsX2UsIlx1MjAxMyIsIlxcdGV4dGVuZGFzaCIpO0coaXQscmUsX2UsIlx1MjAxNCIsIi0tLSIsITApO0coaXQscmUsX2UsIlx1MjAxNCIsIlxcdGV4dGVtZGFzaCIpO0coaXQscmUsX2UsIlx1MjAxOCIsImAiLCEwKTtHKGl0LHJlLF9lLCJcdTIwMTgiLCJcXHRleHRxdW90ZWxlZnQiKTtHKGl0LHJlLF9lLCJcdTIwMTkiLCInIiwhMCk7RyhpdCxyZSxfZSwiXHUyMDE5IiwiXFx0ZXh0cXVvdGVyaWdodCIpO0coaXQscmUsX2UsIlx1MjAxQyIsImBgIiwhMCk7RyhpdCxyZSxfZSwiXHUyMDFDIiwiXFx0ZXh0cXVvdGVkYmxsZWZ0Iik7RyhpdCxyZSxfZSwiXHUyMDFEIiwiJyciLCEwKTtHKGl0LHJlLF9lLCJcdTIwMUQiLCJcXHRleHRxdW90ZWRibHJpZ2h0Iik7RyhWLHJlLF9lLCJceEIwIiwiXFxkZWdyZWUiLCEwKTtHKGl0LHJlLF9lLCJceEIwIiwiXFxkZWdyZWUiKTtHKGl0LHJlLF9lLCJceEIwIiwiXFx0ZXh0ZGVncmVlIiwhMCk7RyhWLHJlLF9lLCJceEEzIiwiXFxwb3VuZHMiKTtHKFYscmUsX2UsIlx4QTMiLCJcXG1hdGhzdGVybGluZyIsITApO0coaXQscmUsX2UsIlx4QTMiLCJcXHBvdW5kcyIpO0coaXQscmUsX2UsIlx4QTMiLCJcXHRleHRzdGVybGluZyIsITApO0coVix2ZSxfZSwiXHUyNzIwIiwiXFxtYWx0ZXNlIik7RyhpdCx2ZSxfZSwiXHUyNzIwIiwiXFxtYWx0ZXNlIik7dUc9JzAxMjM0NTY3ODkvQC4iJztmb3IoUWI9MDtRYjx1Ry5sZW5ndGg7UWIrKylsQz11Ry5jaGFyQXQoUWIpLEcoVixyZSxfZSxsQyxsQyk7aEc9JzAxMjM0NTY3ODkhQCooKS09KyI7Oj8vLiwnO2ZvcihaYj0wO1piPGhHLmxlbmd0aDtaYisrKWNDPWhHLmNoYXJBdChaYiksRyhpdCxyZSxfZSxjQyxjQyk7aDQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiO2ZvcihKYj0wO0piPGg0Lmxlbmd0aDtKYisrKVgxPWg0LmNoYXJBdChKYiksRyhWLHJlLHRyLFgxLFgxKSxHKGl0LHJlLF9lLFgxLFgxKTtHKFYsdmUsX2UsIkMiLCJcdTIxMDIiKTtHKGl0LHZlLF9lLCJDIiwiXHUyMTAyIik7RyhWLHZlLF9lLCJIIiwiXHUyMTBEIik7RyhpdCx2ZSxfZSwiSCIsIlx1MjEwRCIpO0coVix2ZSxfZSwiTiIsIlx1MjExNSIpO0coaXQsdmUsX2UsIk4iLCJcdTIxMTUiKTtHKFYsdmUsX2UsIlAiLCJcdTIxMTkiKTtHKGl0LHZlLF9lLCJQIiwiXHUyMTE5Iik7RyhWLHZlLF9lLCJRIiwiXHUyMTFBIik7RyhpdCx2ZSxfZSwiUSIsIlx1MjExQSIpO0coVix2ZSxfZSwiUiIsIlx1MjExRCIpO0coaXQsdmUsX2UsIlIiLCJcdTIxMUQiKTtHKFYsdmUsX2UsIloiLCJcdTIxMjQiKTtHKGl0LHZlLF9lLCJaIiwiXHUyMTI0Iik7RyhWLHJlLHRyLCJoIiwiXHUyMTBFIik7RyhpdCxyZSx0ciwiaCIsIlx1MjEwRSIpO3NyPSIiO2ZvcihFYT0wO0VhPGg0Lmxlbmd0aDtFYSsrKWpuPWg0LmNoYXJBdChFYSksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjMyMCtFYSksRyhWLHJlLHRyLGpuLHNyKSxHKGl0LHJlLF9lLGpuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2MzcyK0VhKSxHKFYscmUsdHIsam4sc3IpLEcoaXQscmUsX2Usam4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY0MjQrRWEpLEcoVixyZSx0cixqbixzciksRyhpdCxyZSxfZSxqbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjU4MCtFYSksRyhWLHJlLHRyLGpuLHNyKSxHKGl0LHJlLF9lLGpuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2Njg0K0VhKSxHKFYscmUsdHIsam4sc3IpLEcoaXQscmUsX2Usam4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY3MzYrRWEpLEcoVixyZSx0cixqbixzciksRyhpdCxyZSxfZSxqbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njc4OCtFYSksRyhWLHJlLHRyLGpuLHNyKSxHKGl0LHJlLF9lLGpuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2ODQwK0VhKSxHKFYscmUsdHIsam4sc3IpLEcoaXQscmUsX2Usam4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY5NDQrRWEpLEcoVixyZSx0cixqbixzciksRyhpdCxyZSxfZSxqbixzciksRWE8MjYmJihzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NjMyK0VhKSxHKFYscmUsdHIsam4sc3IpLEcoaXQscmUsX2Usam4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY0NzYrRWEpLEcoVixyZSx0cixqbixzciksRyhpdCxyZSxfZSxqbixzcikpO3NyPSJcdXsxRDU1Q30iO0coVixyZSx0ciwiayIsc3IpO0coaXQscmUsX2UsImsiLHNyKTtmb3Ioc2g9MDtzaDwxMDtzaCsrKWV1PXNoLnRvU3RyaW5nKCksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzI5NCtzaCksRyhWLHJlLHRyLGV1LHNyKSxHKGl0LHJlLF9lLGV1LHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzE0K3NoKSxHKFYscmUsdHIsZXUsc3IpLEcoaXQscmUsX2UsZXUsc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMjQrc2gpLEcoVixyZSx0cixldSxzciksRyhpdCxyZSxfZSxldSxzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMzNCtzaCksRyhWLHJlLHRyLGV1LHNyKSxHKGl0LHJlLF9lLGV1LHNyKTtUQz0iXHhEMFx4REVceEZFIjtmb3IoZTQ9MDtlNDxUQy5sZW5ndGg7ZTQrKylqMT1UQy5jaGFyQXQoZTQpLEcoVixyZSx0cixqMSxqMSksRyhpdCxyZSxfZSxqMSxqMSk7dDQ9W1sibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsibWF0aG5vcm1hbCIsInRleHRpdCIsIk1hdGgtSXRhbGljIl0sWyJib2xkc3ltYm9sIiwiYm9sZHN5bWJvbCIsIk1haW4tQm9sZEl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbIm1hdGhzY3IiLCJ0ZXh0c2NyIiwiU2NyaXB0LVJlZ3VsYXIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGhmcmFrIiwidGV4dGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhmcmFrIiwidGV4dGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhiYiIsInRleHRiYiIsIkFNUy1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYm9sZGZyYWsiLCJ0ZXh0Ym9sZGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhzZiIsInRleHRzZiIsIlNhbnNTZXJpZi1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aGl0c2YiLCJ0ZXh0aXRzZiIsIlNhbnNTZXJpZi1JdGFsaWMiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl0sWyJtYXRodHQiLCJ0ZXh0dHQiLCJUeXBld3JpdGVyLVJlZ3VsYXIiXV0sZkc9W1sibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyIiLCIiLCIiXSxbIm1hdGhzZiIsInRleHRzZiIsIlNhbnNTZXJpZi1SZWd1bGFyIl0sWyJtYXRoYm9sZHNmIiwidGV4dGJvbGRzZiIsIlNhbnNTZXJpZi1Cb2xkIl0sWyJtYXRodHQiLCJ0ZXh0dHQiLCJUeXBld3JpdGVyLVJlZ3VsYXIiXV0sYTRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmNoYXJDb2RlQXQoMCksaT1lLmNoYXJDb2RlQXQoMSksYT0obi01NTI5NikqMTAyNCsoaS01NjMyMCkrNjU1MzYscz1yPT09Im1hdGgiPzA6MTtpZigxMTk4MDg8PWEmJmE8MTIwNDg0KXt2YXIgbD1NYXRoLmZsb29yKChhLTExOTgwOCkvMjYpO3JldHVyblt0NFtsXVsyXSx0NFtsXVtzXV19ZWxzZSBpZigxMjA3ODI8PWEmJmE8PTEyMDgzMSl7dmFyIHU9TWF0aC5mbG9vcigoYS0xMjA3ODIpLzEwKTtyZXR1cm5bZkdbdV1bMl0sZkdbdV1bc11dfWVsc2V7aWYoYT09PTEyMDQ4NXx8YT09PTEyMDQ4NilyZXR1cm5bdDRbMF1bMl0sdDRbMF1bc11dO2lmKDEyMDQ4NjxhJiZhPDEyMDc4MilyZXR1cm5bIiIsIiJdO3Rocm93IG5ldyB1dCgiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyOiAiK2UpfX0sIndpZGVDaGFyYWN0ZXJGb250IiksdjQ9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIEVuW25dW2VdJiZFbltuXVtlXS5yZXBsYWNlJiYoZT1FbltuXVtlXS5yZXBsYWNlKSx7dmFsdWU6ZSxtZXRyaWNzOlJDKGUscixuKX19LCJsb29rdXBTeW1ib2wiKSxobD1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9djQoZSxyLG4pLGw9cy5tZXRyaWNzO2U9cy52YWx1ZTt2YXIgdTtpZihsKXt2YXIgaD1sLml0YWxpYzsobj09PSJ0ZXh0Inx8aSYmaS5mb250PT09Im1hdGhpdCIpJiYoaD0wKSx1PW5ldyBtcyhlLGwuaGVpZ2h0LGwuZGVwdGgsaCxsLnNrZXcsbC53aWR0aCxhKX1lbHNlIHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJObyBjaGFyYWN0ZXIgbWV0cmljcyAiKygiZm9yICciK2UrIicgaW4gc3R5bGUgJyIrcisiJyBhbmQgbW9kZSAnIituKyInIikpLHU9bmV3IG1zKGUsMCwwLDAsMCwwLGEpO2lmKGkpe3UubWF4Rm9udFNpemU9aS5zaXplTXVsdGlwbGllcixpLnN0eWxlLmlzVGlnaHQoKSYmdS5jbGFzc2VzLnB1c2goIm10aWdodCIpO3ZhciBmPWkuZ2V0Q29sb3IoKTtmJiYodS5zdHlsZS5jb2xvcj1mKX1yZXR1cm4gdX0sIm1ha2VTeW1ib2wiKSxzNGU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9W10pLG4uZm9udD09PSJib2xkc3ltYm9sIiYmdjQoZSwiTWFpbi1Cb2xkIixyKS5tZXRyaWNzP2hsKGUsIk1haW4tQm9sZCIscixuLGkuY29uY2F0KFsibWF0aGJmIl0pKTplPT09IlxcInx8RW5bcl1bZV0uZm9udD09PSJtYWluIj9obChlLCJNYWluLVJlZ3VsYXIiLHIsbixpKTpobChlLCJBTVMtUmVndWxhciIscixuLGkuY29uY2F0KFsiYW1zcm0iXSkpfSwibWF0aHN5bSIpLG80ZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIGEhPT0idGV4dG9yZCImJnY0KGUsIk1hdGgtQm9sZEl0YWxpYyIscikubWV0cmljcz97Zm9udE5hbWU6Ik1hdGgtQm9sZEl0YWxpYyIsZm9udENsYXNzOiJib2xkc3ltYm9sIn06e2ZvbnROYW1lOiJNYWluLUJvbGQiLGZvbnRDbGFzczoibWF0aGJmIn19LCJib2xkc3ltYm9sIiksbDRlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUubW9kZSxhPWUudGV4dCxzPVsibW9yZCJdLGw9aT09PSJtYXRoInx8aT09PSJ0ZXh0IiYmci5mb250LHU9bD9yLmZvbnQ6ci5mb250RmFtaWx5LGg9IiIsZj0iIjtpZihhLmNoYXJDb2RlQXQoMCk9PT01NTM0OSYmKFtoLGZdPWE0ZShhLGkpKSxoLmxlbmd0aD4wKXJldHVybiBobChhLGgsaSxyLHMuY29uY2F0KGYpKTtpZih1KXt2YXIgZCxwO2lmKHU9PT0iYm9sZHN5bWJvbCIpe3ZhciBtPW80ZShhLGkscixzLG4pO2Q9bS5mb250TmFtZSxwPVttLmZvbnRDbGFzc119ZWxzZSBsPyhkPVdHW3VdLmZvbnROYW1lLHA9W3VdKTooZD1yNCh1LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkscD1bdSxyLmZvbnRXZWlnaHQsci5mb250U2hhcGVdKTtpZih2NChhLGQsaSkubWV0cmljcylyZXR1cm4gaGwoYSxkLGkscixzLmNvbmNhdChwKSk7aWYoVkcuaGFzT3duUHJvcGVydHkoYSkmJmQuc2xpY2UoMCwxMCk9PT0iVHlwZXdyaXRlciIpe2Zvcih2YXIgZz1bXSx5PTA7eTxhLmxlbmd0aDt5KyspZy5wdXNoKGhsKGFbeV0sZCxpLHIscy5jb25jYXQocCkpKTtyZXR1cm4gSEcoZyl9fWlmKG49PT0ibWF0aG9yZCIpcmV0dXJuIGhsKGEsIk1hdGgtSXRhbGljIixpLHIscy5jb25jYXQoWyJtYXRobm9ybWFsIl0pKTtpZihuPT09InRleHRvcmQiKXt2YXIgdj1FbltpXVthXSYmRW5baV1bYV0uZm9udDtpZih2PT09ImFtcyIpe3ZhciB4PXI0KCJhbXNybSIsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKTtyZXR1cm4gaGwoYSx4LGkscixzLmNvbmNhdCgiYW1zcm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkpfWVsc2UgaWYodj09PSJtYWluInx8IXYpe3ZhciBiPXI0KCJ0ZXh0cm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIGhsKGEsYixpLHIscy5jb25jYXQoci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKSl9ZWxzZXt2YXIgdz1yNCh2LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIGhsKGEsdyxpLHIscy5jb25jYXQodyxyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpKX19ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdHlwZTogIituKyIgaW4gbWFrZU9yZCIpfSwibWFrZU9yZCIpLGM0ZT1vKCh0LGUpPT57aWYobGgodC5jbGFzc2VzKSE9PWxoKGUuY2xhc3Nlcyl8fHQuc2tldyE9PWUuc2tld3x8dC5tYXhGb250U2l6ZSE9PWUubWF4Rm9udFNpemUpcmV0dXJuITE7aWYodC5jbGFzc2VzLmxlbmd0aD09PTEpe3ZhciByPXQuY2xhc3Nlc1swXTtpZihyPT09Im1iaW4ifHxyPT09Im1vcmQiKXJldHVybiExfWZvcih2YXIgbiBpbiB0LnN0eWxlKWlmKHQuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJnQuc3R5bGVbbl0hPT1lLnN0eWxlW25dKXJldHVybiExO2Zvcih2YXIgaSBpbiBlLnN0eWxlKWlmKGUuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJnQuc3R5bGVbaV0hPT1lLnN0eWxlW2ldKXJldHVybiExO3JldHVybiEwfSwiY2FuQ29tYmluZSIpLHU0ZT1vKHQ9Pntmb3IodmFyIGU9MDtlPHQubGVuZ3RoLTE7ZSsrKXt2YXIgcj10W2VdLG49dFtlKzFdO3IgaW5zdGFuY2VvZiBtcyYmbiBpbnN0YW5jZW9mIG1zJiZjNGUocixuKSYmKHIudGV4dCs9bi50ZXh0LHIuaGVpZ2h0PU1hdGgubWF4KHIuaGVpZ2h0LG4uaGVpZ2h0KSxyLmRlcHRoPU1hdGgubWF4KHIuZGVwdGgsbi5kZXB0aCksci5pdGFsaWM9bi5pdGFsaWMsdC5zcGxpY2UoZSsxLDEpLGUtLSl9cmV0dXJuIHR9LCJ0cnlDb21iaW5lQ2hhcnMiKSxNQz1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49MCxpPTAsYT0wO2E8ZS5jaGlsZHJlbi5sZW5ndGg7YSsrKXt2YXIgcz1lLmNoaWxkcmVuW2FdO3MuaGVpZ2h0PnImJihyPXMuaGVpZ2h0KSxzLmRlcHRoPm4mJihuPXMuZGVwdGgpLHMubWF4Rm9udFNpemU+aSYmKGk9cy5tYXhGb250U2l6ZSl9ZS5oZWlnaHQ9cixlLmRlcHRoPW4sZS5tYXhGb250U2l6ZT1pfSwic2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4iKSxkcz1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBxZihlLHIsbixpKTtyZXR1cm4gTUMoYSksYX0sIm1ha2VTcGFuIiksVUc9bygodCxlLHIsbik9Pm5ldyBxZih0LGUscixuKSwibWFrZVN2Z1NwYW4iKSxoNGU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ZHMoW2VdLFtdLHIpO3JldHVybiBpLmhlaWdodD1NYXRoLm1heChufHxyLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3Msci5taW5SdWxlVGhpY2tuZXNzKSxpLnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPW10KGkuaGVpZ2h0KSxpLm1heEZvbnRTaXplPTEsaX0sIm1ha2VMaW5lU3BhbiIpLGY0ZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBleShlLHIsbixpKTtyZXR1cm4gTUMoYSksYX0sIm1ha2VBbmNob3IiKSxIRz1vKGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBZZihlKTtyZXR1cm4gTUMocikscn0sIm1ha2VGcmFnbWVudCIpLGQ0ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiBZZj9kcyhbXSxbZV0scik6ZX0sIndyYXBGcmFnbWVudCIpLHA0ZT1vKGZ1bmN0aW9uKGUpe2lmKGUucG9zaXRpb25UeXBlPT09ImluZGl2aWR1YWxTaGlmdCIpe2Zvcih2YXIgcj1lLmNoaWxkcmVuLG49W3JbMF1dLGk9LXJbMF0uc2hpZnQtclswXS5lbGVtLmRlcHRoLGE9aSxzPTE7czxyLmxlbmd0aDtzKyspe3ZhciBsPS1yW3NdLnNoaWZ0LWEtcltzXS5lbGVtLmRlcHRoLHU9bC0ocltzLTFdLmVsZW0uaGVpZ2h0K3Jbcy0xXS5lbGVtLmRlcHRoKTthPWErbCxuLnB1c2goe3R5cGU6Imtlcm4iLHNpemU6dX0pLG4ucHVzaChyW3NdKX1yZXR1cm57Y2hpbGRyZW46bixkZXB0aDppfX12YXIgaDtpZihlLnBvc2l0aW9uVHlwZT09PSJ0b3AiKXtmb3IodmFyIGY9ZS5wb3NpdGlvbkRhdGEsZD0wO2Q8ZS5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgcD1lLmNoaWxkcmVuW2RdO2YtPXAudHlwZT09PSJrZXJuIj9wLnNpemU6cC5lbGVtLmhlaWdodCtwLmVsZW0uZGVwdGh9aD1mfWVsc2UgaWYoZS5wb3NpdGlvblR5cGU9PT0iYm90dG9tIiloPS1lLnBvc2l0aW9uRGF0YTtlbHNle3ZhciBtPWUuY2hpbGRyZW5bMF07aWYobS50eXBlIT09ImVsZW0iKXRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgImVsZW0iLicpO2lmKGUucG9zaXRpb25UeXBlPT09InNoaWZ0IiloPS1tLmVsZW0uZGVwdGgtZS5wb3NpdGlvbkRhdGE7ZWxzZSBpZihlLnBvc2l0aW9uVHlwZT09PSJmaXJzdEJhc2VsaW5lIiloPS1tLmVsZW0uZGVwdGg7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcG9zaXRpb25UeXBlICIrZS5wb3NpdGlvblR5cGUrIi4iKX1yZXR1cm57Y2hpbGRyZW46ZS5jaGlsZHJlbixkZXB0aDpofX0sImdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCIpLG00ZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhcntjaGlsZHJlbjpuLGRlcHRoOml9PXA0ZShlKSxhPTAscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1uW3NdO2lmKGwudHlwZT09PSJlbGVtIil7dmFyIHU9bC5lbGVtO2E9TWF0aC5tYXgoYSx1Lm1heEZvbnRTaXplLHUuaGVpZ2h0KX19YSs9Mjt2YXIgaD1kcyhbInBzdHJ1dCJdLFtdKTtoLnN0eWxlLmhlaWdodD1tdChhKTtmb3IodmFyIGY9W10sZD1pLHA9aSxtPWksZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddO2lmKHkudHlwZT09PSJrZXJuIiltKz15LnNpemU7ZWxzZXt2YXIgdj15LmVsZW0seD15LndyYXBwZXJDbGFzc2VzfHxbXSxiPXkud3JhcHBlclN0eWxlfHx7fSx3PWRzKHgsW2gsdl0sdm9pZCAwLGIpO3cuc3R5bGUudG9wPW10KC1hLW0tdi5kZXB0aCkseS5tYXJnaW5MZWZ0JiYody5zdHlsZS5tYXJnaW5MZWZ0PXkubWFyZ2luTGVmdCkseS5tYXJnaW5SaWdodCYmKHcuc3R5bGUubWFyZ2luUmlnaHQ9eS5tYXJnaW5SaWdodCksZi5wdXNoKHcpLG0rPXYuaGVpZ2h0K3YuZGVwdGh9ZD1NYXRoLm1pbihkLG0pLHA9TWF0aC5tYXgocCxtKX12YXIgXz1kcyhbInZsaXN0Il0sZik7Xy5zdHlsZS5oZWlnaHQ9bXQocCk7dmFyIFQ7aWYoZDwwKXt2YXIgRT1kcyhbXSxbXSksTD1kcyhbInZsaXN0Il0sW0VdKTtMLnN0eWxlLmhlaWdodD1tdCgtZCk7dmFyIEM9ZHMoWyJ2bGlzdC1zIl0sW25ldyBtcygiXHUyMDBCIildKTtUPVtkcyhbInZsaXN0LXIiXSxbXyxDXSksZHMoWyJ2bGlzdC1yIl0sW0xdKV19ZWxzZSBUPVtkcyhbInZsaXN0LXIiXSxbX10pXTt2YXIgQT1kcyhbInZsaXN0LXQiXSxUKTtyZXR1cm4gVC5sZW5ndGg9PT0yJiZBLmNsYXNzZXMucHVzaCgidmxpc3QtdDIiKSxBLmhlaWdodD1wLEEuZGVwdGg9LWQsQX0sIm1ha2VWTGlzdCIpLGc0ZT1vKCh0LGUpPT57dmFyIHI9ZHMoWyJtc3BhY2UiXSxbXSxlKSxuPVFuKHQsZSk7cmV0dXJuIHIuc3R5bGUubWFyZ2luUmlnaHQ9bXQobikscn0sIm1ha2VHbHVlIikscjQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2UiYW1zcm0iOmk9IkFNUyI7YnJlYWs7Y2FzZSJ0ZXh0cm0iOmk9Ik1haW4iO2JyZWFrO2Nhc2UidGV4dHNmIjppPSJTYW5zU2VyaWYiO2JyZWFrO2Nhc2UidGV4dHR0IjppPSJUeXBld3JpdGVyIjticmVhaztkZWZhdWx0Omk9ZX12YXIgYTtyZXR1cm4gcj09PSJ0ZXh0YmYiJiZuPT09InRleHRpdCI/YT0iQm9sZEl0YWxpYyI6cj09PSJ0ZXh0YmYiP2E9IkJvbGQiOnI9PT0idGV4dGl0Ij9hPSJJdGFsaWMiOmE9IlJlZ3VsYXIiLGkrIi0iK2F9LCJyZXRyaWV2ZVRleHRGb250TmFtZSIpLFdHPXttYXRoYmY6e3ZhcmlhbnQ6ImJvbGQiLGZvbnROYW1lOiJNYWluLUJvbGQifSxtYXRocm06e3ZhcmlhbnQ6Im5vcm1hbCIsZm9udE5hbWU6Ik1haW4tUmVndWxhciJ9LHRleHRpdDp7dmFyaWFudDoiaXRhbGljIixmb250TmFtZToiTWFpbi1JdGFsaWMifSxtYXRoaXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aG5vcm1hbDp7dmFyaWFudDoiaXRhbGljIixmb250TmFtZToiTWF0aC1JdGFsaWMifSxtYXRoYmI6e3ZhcmlhbnQ6ImRvdWJsZS1zdHJ1Y2siLGZvbnROYW1lOiJBTVMtUmVndWxhciJ9LG1hdGhjYWw6e3ZhcmlhbnQ6InNjcmlwdCIsZm9udE5hbWU6IkNhbGlncmFwaGljLVJlZ3VsYXIifSxtYXRoZnJhazp7dmFyaWFudDoiZnJha3R1ciIsZm9udE5hbWU6IkZyYWt0dXItUmVndWxhciJ9LG1hdGhzY3I6e3ZhcmlhbnQ6InNjcmlwdCIsZm9udE5hbWU6IlNjcmlwdC1SZWd1bGFyIn0sbWF0aHNmOnt2YXJpYW50OiJzYW5zLXNlcmlmIixmb250TmFtZToiU2Fuc1NlcmlmLVJlZ3VsYXIifSxtYXRodHQ6e3ZhcmlhbnQ6Im1vbm9zcGFjZSIsZm9udE5hbWU6IlR5cGV3cml0ZXItUmVndWxhciJ9fSxZRz17dmVjOlsidmVjIiwuNDcxLC43MTRdLG9paW50U2l6ZTE6WyJvaWludFNpemUxIiwuOTU3LC40OTldLG9paW50U2l6ZTI6WyJvaWludFNpemUyIiwxLjQ3MiwuNjU5XSxvaWlpbnRTaXplMTpbIm9paWludFNpemUxIiwxLjMwNCwuNDk5XSxvaWlpbnRTaXplMjpbIm9paWludFNpemUyIiwxLjk4LC42NTldfSx5NGU9byhmdW5jdGlvbihlLHIpe3ZhcltuLGksYV09WUdbZV0scz1uZXcgSmwobiksbD1uZXcgZmwoW3NdLHt3aWR0aDptdChpKSxoZWlnaHQ6bXQoYSksc3R5bGU6IndpZHRoOiIrbXQoaSksdmlld0JveDoiMCAwICIrMWUzKmkrIiAiKzFlMyphLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIn0pLHU9VUcoWyJvdmVybGF5Il0sW2xdLHIpO3JldHVybiB1LmhlaWdodD1hLHUuc3R5bGUuaGVpZ2h0PW10KGEpLHUuc3R5bGUud2lkdGg9bXQoaSksdX0sInN0YXRpY1N2ZyIpLEllPXtmb250TWFwOldHLG1ha2VTeW1ib2w6aGwsbWF0aHN5bTpzNGUsbWFrZVNwYW46ZHMsbWFrZVN2Z1NwYW46VUcsbWFrZUxpbmVTcGFuOmg0ZSxtYWtlQW5jaG9yOmY0ZSxtYWtlRnJhZ21lbnQ6SEcsd3JhcEZyYWdtZW50OmQ0ZSxtYWtlVkxpc3Q6bTRlLG1ha2VPcmQ6bDRlLG1ha2VHbHVlOmc0ZSxzdGF0aWNTdmc6eTRlLHN2Z0RhdGE6WUcsdHJ5Q29tYmluZUNoYXJzOnU0ZX0sS249e251bWJlcjozLHVuaXQ6Im11In0sSGY9e251bWJlcjo0LHVuaXQ6Im11In0sdHU9e251bWJlcjo1LHVuaXQ6Im11In0sdjRlPXttb3JkOnttb3A6S24sbWJpbjpIZixtcmVsOnR1LG1pbm5lcjpLbn0sbW9wOnttb3JkOktuLG1vcDpLbixtcmVsOnR1LG1pbm5lcjpLbn0sbWJpbjp7bW9yZDpIZixtb3A6SGYsbW9wZW46SGYsbWlubmVyOkhmfSxtcmVsOnttb3JkOnR1LG1vcDp0dSxtb3Blbjp0dSxtaW5uZXI6dHV9LG1vcGVuOnt9LG1jbG9zZTp7bW9wOktuLG1iaW46SGYsbXJlbDp0dSxtaW5uZXI6S259LG1wdW5jdDp7bW9yZDpLbixtb3A6S24sbXJlbDp0dSxtb3BlbjpLbixtY2xvc2U6S24sbXB1bmN0OktuLG1pbm5lcjpLbn0sbWlubmVyOnttb3JkOktuLG1vcDpLbixtYmluOkhmLG1yZWw6dHUsbW9wZW46S24sbXB1bmN0OktuLG1pbm5lcjpLbn19LHg0ZT17bW9yZDp7bW9wOktufSxtb3A6e21vcmQ6S24sbW9wOktufSxtYmluOnt9LG1yZWw6e30sbW9wZW46e30sbWNsb3NlOnttb3A6S259LG1wdW5jdDp7fSxtaW5uZXI6e21vcDpLbn19LHFHPXt9LGY0PXt9LGQ0PXt9O28oQ3QsImRlZmluZUZ1bmN0aW9uIik7byhYZiwiZGVmaW5lRnVuY3Rpb25CdWlsZGVycyIpO3A0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCImJmUuYm9keS5sZW5ndGg9PT0xP2UuYm9keVswXTplfSwibm9ybWFsaXplQXJndW1lbnQiKSxkaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ib3JkZ3JvdXAiP2UuYm9keTpbZV19LCJvcmRhcmd1bWVudCIpLGl1PUllLm1ha2VTcGFuLGI0ZT1bImxlZnRtb3N0IiwibWJpbiIsIm1vcGVuIiwibXJlbCIsIm1vcCIsIm1wdW5jdCJdLHc0ZT1bInJpZ2h0bW9zdCIsIm1yZWwiLCJtY2xvc2UiLCJtcHVuY3QiXSxUNGU9e2Rpc3BsYXk6cnIuRElTUExBWSx0ZXh0OnJyLlRFWFQsc2NyaXB0OnJyLlNDUklQVCxzY3JpcHRzY3JpcHQ6cnIuU0NSSVBUU0NSSVBUfSxrNGU9e21vcmQ6Im1vcmQiLG1vcDoibW9wIixtYmluOiJtYmluIixtcmVsOiJtcmVsIixtb3BlbjoibW9wZW4iLG1jbG9zZToibWNsb3NlIixtcHVuY3Q6Im1wdW5jdCIsbWlubmVyOiJtaW5uZXIifSxJaT1vKGZ1bmN0aW9uKGUscixuLGkpe2k9PT12b2lkIDAmJihpPVtudWxsLG51bGxdKTtmb3IodmFyIGE9W10scz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1PcihlW3NdLHIpO2lmKGwgaW5zdGFuY2VvZiBZZil7dmFyIHU9bC5jaGlsZHJlbjthLnB1c2goLi4udSl9ZWxzZSBhLnB1c2gobCl9aWYoSWUudHJ5Q29tYmluZUNoYXJzKGEpLCFuKXJldHVybiBhO3ZhciBoPXI7aWYoZS5sZW5ndGg9PT0xKXt2YXIgZj1lWzBdO2YudHlwZT09PSJzaXppbmciP2g9ci5oYXZpbmdTaXplKGYuc2l6ZSk6Zi50eXBlPT09InN0eWxpbmciJiYoaD1yLmhhdmluZ1N0eWxlKFQ0ZVtmLnN0eWxlXSkpfXZhciBkPWl1KFtpWzBdfHwibGVmdG1vc3QiXSxbXSxyKSxwPWl1KFtpWzFdfHwicmlnaHRtb3N0Il0sW10sciksbT1uPT09InJvb3QiO3JldHVybiBkRyhhLChnLHkpPT57dmFyIHY9eS5jbGFzc2VzWzBdLHg9Zy5jbGFzc2VzWzBdO3Y9PT0ibWJpbiImJkp0LmNvbnRhaW5zKHc0ZSx4KT95LmNsYXNzZXNbMF09Im1vcmQiOng9PT0ibWJpbiImJkp0LmNvbnRhaW5zKGI0ZSx2KSYmKGcuY2xhc3Nlc1swXT0ibW9yZCIpfSx7bm9kZTpkfSxwLG0pLGRHKGEsKGcseSk9Pnt2YXIgdj1rQyh5KSx4PWtDKGcpLGI9diYmeD9nLmhhc0NsYXNzKCJtdGlnaHQiKT94NGVbdl1beF06djRlW3ZdW3hdOm51bGw7aWYoYilyZXR1cm4gSWUubWFrZUdsdWUoYixoKX0se25vZGU6ZH0scCxtKSxhfSwiYnVpbGRFeHByZXNzaW9uIiksZEc9byhmdW5jdGlvbiB0KGUscixuLGksYSl7aSYmZS5wdXNoKGkpO2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLHU9WEcobCk7aWYodSl7dCh1LmNoaWxkcmVuLHIsbixudWxsLGEpO2NvbnRpbnVlfXZhciBoPSFsLmhhc0NsYXNzKCJtc3BhY2UiKTtpZihoKXt2YXIgZj1yKGwsbi5ub2RlKTtmJiYobi5pbnNlcnRBZnRlcj9uLmluc2VydEFmdGVyKGYpOihlLnVuc2hpZnQoZikscysrKSl9aD9uLm5vZGU9bDphJiZsLmhhc0NsYXNzKCJuZXdsaW5lIikmJihuLm5vZGU9aXUoWyJsZWZ0bW9zdCJdKSksbi5pbnNlcnRBZnRlcj0oZD0+cD0+e2Uuc3BsaWNlKGQrMSwwLHApLHMrK30pKHMpfWkmJmUucG9wKCl9LCJ0cmF2ZXJzZU5vblNwYWNlTm9kZXMiKSxYRz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgWWZ8fGUgaW5zdGFuY2VvZiBleXx8ZSBpbnN0YW5jZW9mIHFmJiZlLmhhc0NsYXNzKCJlbmNsb3NpbmciKT9lOm51bGx9LCJjaGVja1BhcnRpYWxHcm91cCIpLEU0ZT1vKGZ1bmN0aW9uIHQoZSxyKXt2YXIgbj1YRyhlKTtpZihuKXt2YXIgaT1uLmNoaWxkcmVuO2lmKGkubGVuZ3RoKXtpZihyPT09InJpZ2h0IilyZXR1cm4gdChpW2kubGVuZ3RoLTFdLCJyaWdodCIpO2lmKHI9PT0ibGVmdCIpcmV0dXJuIHQoaVswXSwibGVmdCIpfX1yZXR1cm4gZX0sImdldE91dGVybW9zdE5vZGUiKSxrQz1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU/KHImJihlPUU0ZShlLHIpKSxrNGVbZS5jbGFzc2VzWzBdXXx8bnVsbCk6bnVsbH0sImdldFR5cGVPZkRvbVRyZWUiKSxyeT1vKGZ1bmN0aW9uKGUscil7dmFyIG49WyJudWxsZGVsaW1pdGVyIl0uY29uY2F0KGUuYmFzZVNpemluZ0NsYXNzZXMoKSk7cmV0dXJuIGl1KHIuY29uY2F0KG4pKX0sIm1ha2VOdWxsRGVsaW1pdGVyIiksT3I9byhmdW5jdGlvbihlLHIsbil7aWYoIWUpcmV0dXJuIGl1KCk7aWYoZjRbZS50eXBlXSl7dmFyIGk9ZjRbZS50eXBlXShlLHIpO2lmKG4mJnIuc2l6ZSE9PW4uc2l6ZSl7aT1pdShyLnNpemluZ0NsYXNzZXMobiksW2ldLHIpO3ZhciBhPXIuc2l6ZU11bHRpcGxpZXIvbi5zaXplTXVsdGlwbGllcjtpLmhlaWdodCo9YSxpLmRlcHRoKj1hfXJldHVybiBpfWVsc2UgdGhyb3cgbmV3IHV0KCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitlLnR5cGUrIiciKX0sImJ1aWxkR3JvdXAiKTtvKG40LCJidWlsZEhUTUxVbmJyZWFrYWJsZSIpO28oRUMsImJ1aWxkSFRNTCIpO28oakcsIm5ld0RvY3VtZW50RnJhZ21lbnQiKTtwcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnR5cGU9dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnR5cGU9ZSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5jaGlsZHJlbj1yfHxbXSx0aGlzLmNsYXNzZXM9bnx8W119c2V0QXR0cmlidXRlKGUscil7dGhpcy5hdHRyaWJ1dGVzW2VdPXJ9Z2V0QXR0cmlidXRlKGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbZV19dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIix0aGlzLnR5cGUpO2Zvcih2YXIgciBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxyKSYmZS5zZXRBdHRyaWJ1dGUocix0aGlzLmF0dHJpYnV0ZXNbcl0pO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKGUuY2xhc3NOYW1lPWxoKHRoaXMuY2xhc3NlcykpO2Zvcih2YXIgbj0wO248dGhpcy5jaGlsZHJlbi5sZW5ndGg7bisrKWUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltuXS50b05vZGUoKSk7cmV0dXJuIGV9dG9NYXJrdXAoKXt2YXIgZT0iPCIrdGhpcy50eXBlO2Zvcih2YXIgciBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxyKSYmKGUrPSIgIityKyc9IicsZSs9SnQuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1tyXSksZSs9JyInKTt0aGlzLmNsYXNzZXMubGVuZ3RoPjAmJihlKz0nIGNsYXNzID0iJytKdC5lc2NhcGUobGgodGhpcy5jbGFzc2VzKSkrJyInKSxlKz0iPiI7Zm9yKHZhciBuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtuKyspZSs9dGhpcy5jaGlsZHJlbltuXS50b01hcmt1cCgpO3JldHVybiBlKz0iPC8iK3RoaXMudHlwZSsiPiIsZX10b1RleHQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZT0+ZS50b1RleHQoKSkuam9pbigiIil9fSxXZj1jbGFzc3tzdGF0aWN7byh0aGlzLCJUZXh0Tm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGV4dD12b2lkIDAsdGhpcy50ZXh0PWV9dG9Ob2RlKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCl9dG9NYXJrdXAoKXtyZXR1cm4gSnQuZXNjYXBlKHRoaXMudG9UZXh0KCkpfXRvVGV4dCgpe3JldHVybiB0aGlzLnRleHR9fSxTQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJTcGFjZU5vZGUiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmNoYXJhY3Rlcj12b2lkIDAsdGhpcy53aWR0aD1lLGU+PS4wNTU1NSYmZTw9LjA1NTU2P3RoaXMuY2hhcmFjdGVyPSJcdTIwMEEiOmU+PS4xNjY2JiZlPD0uMTY2Nz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA5IjplPj0uMjIyMiYmZTw9LjIyMjM/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNSI6ZT49LjI3NzcmJmU8PS4yNzc4P3RoaXMuY2hhcmFjdGVyPSJcdTIwMDVcdTIwMEEiOmU+PS0uMDU1NTYmJmU8PS0uMDU1NTU/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwQVx1MjA2MyI6ZT49LS4xNjY3JiZlPD0tLjE2NjY/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwOVx1MjA2MyI6ZT49LS4yMjIzJiZlPD0tLjIyMjI/dGhpcy5jaGFyYWN0ZXI9Ilx1MjA1Rlx1MjA2MyI6ZT49LS4yNzc4JiZlPD0tLjI3Nzc/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNVx1MjA2MyI6dGhpcy5jaGFyYWN0ZXI9bnVsbH10b05vZGUoKXtpZih0aGlzLmNoYXJhY3RlcilyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5jaGFyYWN0ZXIpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsIm1zcGFjZSIpO3JldHVybiBlLnNldEF0dHJpYnV0ZSgid2lkdGgiLG10KHRoaXMud2lkdGgpKSxlfXRvTWFya3VwKCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyPyI8bXRleHQ+Iit0aGlzLmNoYXJhY3RlcisiPC9tdGV4dD4iOic8bXNwYWNlIHdpZHRoPSInK210KHRoaXMud2lkdGgpKyciLz4nfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoYXJhY3Rlcj90aGlzLmNoYXJhY3RlcjoiICJ9fSxzdD17TWF0aE5vZGU6cHMsVGV4dE5vZGU6V2YsU3BhY2VOb2RlOlNDLG5ld0RvY3VtZW50RnJhZ21lbnQ6akd9LEFvPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBFbltyXVtlXSYmRW5bcl1bZV0ucmVwbGFjZSYmZS5jaGFyQ29kZUF0KDApIT09NTUzNDkmJiEoVkcuaGFzT3duUHJvcGVydHkoZSkmJm4mJihuLmZvbnRGYW1pbHkmJm4uZm9udEZhbWlseS5zbGljZSg0LDYpPT09InR0Inx8bi5mb250JiZuLmZvbnQuc2xpY2UoNCw2KT09PSJ0dCIpKSYmKGU9RW5bcl1bZV0ucmVwbGFjZSksbmV3IHN0LlRleHROb2RlKGUpfSwibWFrZVRleHQiKSxJQz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD09PTE/ZVswXTpuZXcgc3QuTWF0aE5vZGUoIm1yb3ciLGUpfSwibWFrZVJvdyIpLE9DPW8oZnVuY3Rpb24oZSxyKXtpZihyLmZvbnRGYW1pbHk9PT0idGV4dHR0IilyZXR1cm4ibW9ub3NwYWNlIjtpZihyLmZvbnRGYW1pbHk9PT0idGV4dHNmIilyZXR1cm4gci5mb250U2hhcGU9PT0idGV4dGl0IiYmci5mb250V2VpZ2h0PT09InRleHRiZiI/InNhbnMtc2VyaWYtYm9sZC1pdGFsaWMiOnIuZm9udFNoYXBlPT09InRleHRpdCI/InNhbnMtc2VyaWYtaXRhbGljIjpyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8iYm9sZC1zYW5zLXNlcmlmIjoic2Fucy1zZXJpZiI7aWYoci5mb250U2hhcGU9PT0idGV4dGl0IiYmci5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQtaXRhbGljIjtpZihyLmZvbnRTaGFwZT09PSJ0ZXh0aXQiKXJldHVybiJpdGFsaWMiO2lmKHIuZm9udFdlaWdodD09PSJ0ZXh0YmYiKXJldHVybiJib2xkIjt2YXIgbj1yLmZvbnQ7aWYoIW58fG49PT0ibWF0aG5vcm1hbCIpcmV0dXJuIG51bGw7dmFyIGk9ZS5tb2RlO2lmKG49PT0ibWF0aGl0IilyZXR1cm4iaXRhbGljIjtpZihuPT09ImJvbGRzeW1ib2wiKXJldHVybiBlLnR5cGU9PT0idGV4dG9yZCI/ImJvbGQiOiJib2xkLWl0YWxpYyI7aWYobj09PSJtYXRoYmYiKXJldHVybiJib2xkIjtpZihuPT09Im1hdGhiYiIpcmV0dXJuImRvdWJsZS1zdHJ1Y2siO2lmKG49PT0ibWF0aGZyYWsiKXJldHVybiJmcmFrdHVyIjtpZihuPT09Im1hdGhzY3IifHxuPT09Im1hdGhjYWwiKXJldHVybiJzY3JpcHQiO2lmKG49PT0ibWF0aHNmIilyZXR1cm4ic2Fucy1zZXJpZiI7aWYobj09PSJtYXRodHQiKXJldHVybiJtb25vc3BhY2UiO3ZhciBhPWUudGV4dDtpZihKdC5jb250YWlucyhbIlxcaW1hdGgiLCJcXGptYXRoIl0sYSkpcmV0dXJuIG51bGw7RW5baV1bYV0mJkVuW2ldW2FdLnJlcGxhY2UmJihhPUVuW2ldW2FdLnJlcGxhY2UpO3ZhciBzPUllLmZvbnRNYXBbbl0uZm9udE5hbWU7cmV0dXJuIFJDKGEscyxpKT9JZS5mb250TWFwW25dLnZhcmlhbnQ6bnVsbH0sImdldFZhcmlhbnQiKSxncz1vKGZ1bmN0aW9uKGUscixuKXtpZihlLmxlbmd0aD09PTEpe3ZhciBpPW1uKGVbMF0scik7cmV0dXJuIG4mJmkgaW5zdGFuY2VvZiBwcyYmaS50eXBlPT09Im1vIiYmKGkuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwZW0iKSxpLnNldEF0dHJpYnV0ZSgicnNwYWNlIiwiMGVtIikpLFtpXX1mb3IodmFyIGE9W10scyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciB1PW1uKGVbbF0scik7aWYodSBpbnN0YW5jZW9mIHBzJiZzIGluc3RhbmNlb2YgcHMpe2lmKHUudHlwZT09PSJtdGV4dCImJnMudHlwZT09PSJtdGV4dCImJnUuZ2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIpPT09cy5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iikpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtbiImJnMudHlwZT09PSJtbiIpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtaSImJnUuY2hpbGRyZW4ubGVuZ3RoPT09MSYmcy50eXBlPT09Im1uIil7dmFyIGg9dS5jaGlsZHJlblswXTtpZihoIGluc3RhbmNlb2YgV2YmJmgudGV4dD09PSIuIil7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfX1lbHNlIGlmKHMudHlwZT09PSJtaSImJnMuY2hpbGRyZW4ubGVuZ3RoPT09MSl7dmFyIGY9cy5jaGlsZHJlblswXTtpZihmIGluc3RhbmNlb2YgV2YmJmYudGV4dD09PSJcdTAzMzgiJiYodS50eXBlPT09Im1vInx8dS50eXBlPT09Im1pInx8dS50eXBlPT09Im1uIikpe3ZhciBkPXUuY2hpbGRyZW5bMF07ZCBpbnN0YW5jZW9mIFdmJiZkLnRleHQubGVuZ3RoPjAmJihkLnRleHQ9ZC50ZXh0LnNsaWNlKDAsMSkrIlx1MDMzOCIrZC50ZXh0LnNsaWNlKDEpLGEucG9wKCkpfX19YS5wdXNoKHUpLHM9dX1yZXR1cm4gYX0sImJ1aWxkRXhwcmVzc2lvbiIpLGNoPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBJQyhncyhlLHIsbikpfSwiYnVpbGRFeHByZXNzaW9uUm93IiksbW49byhmdW5jdGlvbihlLHIpe2lmKCFlKXJldHVybiBuZXcgc3QuTWF0aE5vZGUoIm1yb3ciKTtpZihkNFtlLnR5cGVdKXt2YXIgbj1kNFtlLnR5cGVdKGUscik7cmV0dXJuIG59ZWxzZSB0aHJvdyBuZXcgdXQoIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICciK2UudHlwZSsiJyIpfSwiYnVpbGRHcm91cCIpO28ocEcsImJ1aWxkTWF0aE1MIik7S0c9byhmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHU0KHtzdHlsZTplLmRpc3BsYXlNb2RlP3JyLkRJU1BMQVk6cnIuVEVYVCxtYXhTaXplOmUubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOmUubWluUnVsZVRoaWNrbmVzc30pfSwib3B0aW9uc0Zyb21TZXR0aW5ncyIpLFFHPW8oZnVuY3Rpb24oZSxyKXtpZihyLmRpc3BsYXlNb2RlKXt2YXIgbj1bImthdGV4LWRpc3BsYXkiXTtyLmxlcW5vJiZuLnB1c2goImxlcW5vIiksci5mbGVxbiYmbi5wdXNoKCJmbGVxbiIpLGU9SWUubWFrZVNwYW4obixbZV0pfXJldHVybiBlfSwiZGlzcGxheVdyYXAiKSxTNGU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9S0cobiksYTtpZihuLm91dHB1dD09PSJtYXRobWwiKXJldHVybiBwRyhlLHIsaSxuLmRpc3BsYXlNb2RlLCEwKTtpZihuLm91dHB1dD09PSJodG1sIil7dmFyIHM9RUMoZSxpKTthPUllLm1ha2VTcGFuKFsia2F0ZXgiXSxbc10pfWVsc2V7dmFyIGw9cEcoZSxyLGksbi5kaXNwbGF5TW9kZSwhMSksdT1FQyhlLGkpO2E9SWUubWFrZVNwYW4oWyJrYXRleCJdLFtsLHVdKX1yZXR1cm4gUUcoYSxuKX0sImJ1aWxkVHJlZSIpLEM0ZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1LRyhuKSxhPUVDKGUsaSkscz1JZS5tYWtlU3BhbihbImthdGV4Il0sW2FdKTtyZXR1cm4gUUcocyxuKX0sImJ1aWxkSFRNTFRyZWUiKSxBNGU9e3dpZGVoYXQ6Il4iLHdpZGVjaGVjazoiXHUwMkM3Iix3aWRldGlsZGU6In4iLHV0aWxkZToifiIsb3ZlcmxlZnRhcnJvdzoiXHUyMTkwIix1bmRlcmxlZnRhcnJvdzoiXHUyMTkwIix4bGVmdGFycm93OiJcdTIxOTAiLG92ZXJyaWdodGFycm93OiJcdTIxOTIiLHVuZGVycmlnaHRhcnJvdzoiXHUyMTkyIix4cmlnaHRhcnJvdzoiXHUyMTkyIix1bmRlcmJyYWNlOiJcdTIzREYiLG92ZXJicmFjZToiXHUyM0RFIixvdmVyZ3JvdXA6Ilx1MjNFMCIsdW5kZXJncm91cDoiXHUyM0UxIixvdmVybGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsdW5kZXJsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0Iix4bGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsT3ZlcnJpZ2h0YXJyb3c6Ilx1MjFEMiIseFJpZ2h0YXJyb3c6Ilx1MjFEMiIsb3ZlcmxlZnRoYXJwb29uOiJcdTIxQkMiLHhsZWZ0aGFycG9vbnVwOiJcdTIxQkMiLG92ZXJyaWdodGhhcnBvb246Ilx1MjFDMCIseHJpZ2h0aGFycG9vbnVwOiJcdTIxQzAiLHhMZWZ0YXJyb3c6Ilx1MjFEMCIseExlZnRyaWdodGFycm93OiJcdTIxRDQiLHhob29rbGVmdGFycm93OiJcdTIxQTkiLHhob29rcmlnaHRhcnJvdzoiXHUyMUFBIix4bWFwc3RvOiJcdTIxQTYiLHhyaWdodGhhcnBvb25kb3duOiJcdTIxQzEiLHhsZWZ0aGFycG9vbmRvd246Ilx1MjFCRCIseHJpZ2h0bGVmdGhhcnBvb25zOiJcdTIxQ0MiLHhsZWZ0cmlnaHRoYXJwb29uczoiXHUyMUNCIix4dHdvaGVhZGxlZnRhcnJvdzoiXHUyMTlFIix4dHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFBMCIseGxvbmdlcXVhbDoiPSIseHRvZnJvbToiXHUyMUM0Iix4cmlnaHRsZWZ0YXJyb3dzOiJcdTIxQzQiLHhyaWdodGVxdWlsaWJyaXVtOiJcdTIxQ0MiLHhsZWZ0ZXF1aWxpYnJpdW06Ilx1MjFDQiIsIlxcY2RyaWdodGFycm93IjoiXHUyMTkyIiwiXFxjZGxlZnRhcnJvdyI6Ilx1MjE5MCIsIlxcY2Rsb25nZXF1YWwiOiI9In0sXzRlPW8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHN0Lk1hdGhOb2RlKCJtbyIsW25ldyBzdC5UZXh0Tm9kZShBNGVbZS5yZXBsYWNlKC9eXFwvLCIiKV0pXSk7cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKSxyfSwibWF0aE1Mbm9kZSIpLEw0ZT17b3ZlcnJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLG92ZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0sdW5kZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSx1bmRlcmxlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciXSwuODg4LDUyMiwieE1pbllNaW4iXSx4cmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sMS40NjksNTIyLCJ4TWF4WU1pbiJdLCJcXGNkcmlnaHRhcnJvdyI6W1sicmlnaHRhcnJvdyJdLDMsNTIyLCJ4TWF4WU1pbiJdLHhsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sMS40NjksNTIyLCJ4TWluWU1pbiJdLCJcXGNkbGVmdGFycm93IjpbWyJsZWZ0YXJyb3ciXSwzLDUyMiwieE1pbllNaW4iXSxPdmVycmlnaHRhcnJvdzpbWyJkb3VibGVyaWdodGFycm93Il0sLjg4OCw1NjAsInhNYXhZTWluIl0seFJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLDEuNTI2LDU2MCwieE1heFlNaW4iXSx4TGVmdGFycm93OltbImRvdWJsZWxlZnRhcnJvdyJdLDEuNTI2LDU2MCwieE1pbllNaW4iXSxvdmVybGVmdGhhcnBvb246W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb251cDpbWyJsZWZ0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHhsZWZ0aGFycG9vbmRvd246W1sibGVmdGhhcnBvb25kb3duIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0sb3ZlcnJpZ2h0aGFycG9vbjpbWyJyaWdodGhhcnBvb24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4cmlnaHRoYXJwb29udXA6W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbmRvd246W1sicmlnaHRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhsb25nZXF1YWw6W1sibG9uZ2VxdWFsIl0sLjg4OCwzMzQsInhNaW5ZTWluIl0sIlxcY2Rsb25nZXF1YWwiOltbImxvbmdlcXVhbCJdLDMsMzM0LCJ4TWluWU1pbiJdLHh0d29oZWFkbGVmdGFycm93OltbInR3b2hlYWRsZWZ0YXJyb3ciXSwuODg4LDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZHJpZ2h0YXJyb3c6W1sidHdvaGVhZHJpZ2h0YXJyb3ciXSwuODg4LDMzNCwieE1heFlNaW4iXSxvdmVybGVmdHJpZ2h0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRhcnJvdyJdLC44ODgsNTIyXSxvdmVyYnJhY2U6W1sibGVmdGJyYWNlIiwibWlkYnJhY2UiLCJyaWdodGJyYWNlIl0sMS42LDU0OF0sdW5kZXJicmFjZTpbWyJsZWZ0YnJhY2V1bmRlciIsIm1pZGJyYWNldW5kZXIiLCJyaWdodGJyYWNldW5kZXIiXSwxLjYsNTQ4XSx1bmRlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0seGxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwxLjc1LDUyMl0seExlZnRyaWdodGFycm93OltbImRvdWJsZWxlZnRhcnJvdyIsImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjc1LDU2MF0seHJpZ2h0bGVmdGhhcnBvb25zOltbImxlZnRoYXJwb29uZG93bnBsdXMiLCJyaWdodGhhcnBvb25wbHVzIl0sMS43NSw3MTZdLHhsZWZ0cmlnaHRoYXJwb29uczpbWyJsZWZ0aGFycG9vbnBsdXMiLCJyaWdodGhhcnBvb25kb3ducGx1cyJdLDEuNzUsNzE2XSx4aG9va2xlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGhvb2siXSwxLjA4LDUyMl0seGhvb2tyaWdodGFycm93OltbImxlZnRob29rIiwicmlnaHRhcnJvdyJdLDEuMDgsNTIyXSxvdmVybGluZXNlZ21lbnQ6W1sibGVmdGxpbmVzZWdtZW50IiwicmlnaHRsaW5lc2VnbWVudCJdLC44ODgsNTIyXSx1bmRlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sb3Zlcmdyb3VwOltbImxlZnRncm91cCIsInJpZ2h0Z3JvdXAiXSwuODg4LDM0Ml0sdW5kZXJncm91cDpbWyJsZWZ0Z3JvdXB1bmRlciIsInJpZ2h0Z3JvdXB1bmRlciJdLC44ODgsMzQyXSx4bWFwc3RvOltbImxlZnRtYXBzdG8iLCJyaWdodGFycm93Il0sMS41LDUyMl0seHRvZnJvbTpbWyJsZWZ0VG9Gcm9tIiwicmlnaHRUb0Zyb20iXSwxLjc1LDUyOF0seHJpZ2h0bGVmdGFycm93czpbWyJiYXJhYm92ZWxlZnRhcnJvdyIsInJpZ2h0YXJyb3dhYm92ZWJhciJdLDEuNzUsOTAxXSx4cmlnaHRlcXVpbGlicml1bTpbWyJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb24iLCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyIl0sMS43NSw3MTZdLHhsZWZ0ZXF1aWxpYnJpdW06W1sic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uIiwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhciJdLDEuNzUsNzE2XX0sRDRlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCI/ZS5ib2R5Lmxlbmd0aDoxfSwiZ3JvdXBMZW5ndGgiKSxONGU9byhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgbD00ZTUsdT1lLmxhYmVsLnNsaWNlKDEpO2lmKEp0LmNvbnRhaW5zKFsid2lkZWhhdCIsIndpZGVjaGVjayIsIndpZGV0aWxkZSIsInV0aWxkZSJdLHUpKXt2YXIgaD1lLGY9RDRlKGguYmFzZSksZCxwLG07aWYoZj41KXU9PT0id2lkZWhhdCJ8fHU9PT0id2lkZWNoZWNrIj8oZD00MjAsbD0yMzY0LG09LjQyLHA9dSsiNCIpOihkPTMxMixsPTIzNDAsbT0uMzQscD0idGlsZGU0Iik7ZWxzZXt2YXIgZz1bMSwxLDIsMiwzLDNdW2ZdO3U9PT0id2lkZWhhdCJ8fHU9PT0id2lkZWNoZWNrIj8obD1bMCwxMDYyLDIzNjQsMjM2NCwyMzY0XVtnXSxkPVswLDIzOSwzMDAsMzYwLDQyMF1bZ10sbT1bMCwuMjQsLjMsLjMsLjM2LC40Ml1bZ10scD11K2cpOihsPVswLDYwMCwxMDMzLDIzMzksMjM0MF1bZ10sZD1bMCwyNjAsMjg2LDMwNiwzMTJdW2ddLG09WzAsLjI2LC4yODYsLjMsLjMwNiwuMzRdW2ddLHA9InRpbGRlIitnKX12YXIgeT1uZXcgSmwocCksdj1uZXcgZmwoW3ldLHt3aWR0aDoiMTAwJSIsaGVpZ2h0Om10KG0pLHZpZXdCb3g6IjAgMCAiK2wrIiAiK2QscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KTtyZXR1cm57c3BhbjpJZS5tYWtlU3ZnU3BhbihbXSxbdl0sciksbWluV2lkdGg6MCxoZWlnaHQ6bX19ZWxzZXt2YXIgeD1bXSxiPUw0ZVt1XSxbdyxfLFRdPWIsRT1ULzFlMyxMPXcubGVuZ3RoLEMsQTtpZihMPT09MSl7dmFyIEk9YlszXTtDPVsiaGlkZS10YWlsIl0sQT1bSV19ZWxzZSBpZihMPT09MilDPVsiaGFsZmFycm93LWxlZnQiLCJoYWxmYXJyb3ctcmlnaHQiXSxBPVsieE1pbllNaW4iLCJ4TWF4WU1pbiJdO2Vsc2UgaWYoTD09PTMpQz1bImJyYWNlLWxlZnQiLCJicmFjZS1jZW50ZXIiLCJicmFjZS1yaWdodCJdLEE9WyJ4TWluWU1pbiIsInhNaWRZTWluIiwieE1heFlNaW4iXTtlbHNlIHRocm93IG5ldyBFcnJvcihgQ29ycmVjdCBrYXRleEltYWdlc0RhdGEgb3IgdXBkYXRlIGNvZGUgaGVyZSB0byBzdXBwb3J0CiAgICAgICAgICAgICAgICAgICAgYCtMKyIgY2hpbGRyZW4uIik7Zm9yKHZhciBEPTA7RDxMO0QrKyl7dmFyIGs9bmV3IEpsKHdbRF0pLFI9bmV3IGZsKFtrXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6bXQoRSksdmlld0JveDoiMCAwICIrbCsiICIrVCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOkFbRF0rIiBzbGljZSJ9KSxTPUllLm1ha2VTdmdTcGFuKFtDW0RdXSxbUl0scik7aWYoTD09PTEpcmV0dXJue3NwYW46UyxtaW5XaWR0aDpfLGhlaWdodDpFfTtTLnN0eWxlLmhlaWdodD1tdChFKSx4LnB1c2goUyl9cmV0dXJue3NwYW46SWUubWFrZVNwYW4oWyJzdHJldGNoeSJdLHgsciksbWluV2lkdGg6XyxoZWlnaHQ6RX19fW8obiwiYnVpbGRTdmdTcGFuXyIpO3ZhcntzcGFuOmksbWluV2lkdGg6YSxoZWlnaHQ6c309bigpO3JldHVybiBpLmhlaWdodD1zLGkuc3R5bGUuaGVpZ2h0PW10KHMpLGE+MCYmKGkuc3R5bGUubWluV2lkdGg9bXQoYSkpLGl9LCJzdmdTcGFuIiksUjRlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcyxsPWUuaGVpZ2h0K2UuZGVwdGgrbitpO2lmKC9mYm94fGNvbG9yfGFuZ2wvLnRlc3Qocikpe2lmKHM9SWUubWFrZVNwYW4oWyJzdHJldGNoeSIscl0sW10sYSkscj09PSJmYm94Iil7dmFyIHU9YS5jb2xvciYmYS5nZXRDb2xvcigpO3UmJihzLnN0eWxlLmJvcmRlckNvbG9yPXUpfX1lbHNle3ZhciBoPVtdOy9eW2J4XWNhbmNlbCQvLnRlc3QocikmJmgucHVzaChuZXcgdHkoe3gxOiIwIix5MToiMCIseDI6IjEwMCUiLHkyOiIxMDAlIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSksL154P2NhbmNlbCQvLnRlc3QocikmJmgucHVzaChuZXcgdHkoe3gxOiIwIix5MToiMTAwJSIseDI6IjEwMCUiLHkyOiIwIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSk7dmFyIGY9bmV3IGZsKGgse3dpZHRoOiIxMDAlIixoZWlnaHQ6bXQobCl9KTtzPUllLm1ha2VTdmdTcGFuKFtdLFtmXSxhKX1yZXR1cm4gcy5oZWlnaHQ9bCxzLnN0eWxlLmhlaWdodD1tdChsKSxzfSwiZW5jbG9zZVNwYW4iKSxhdT17ZW5jbG9zZVNwYW46UjRlLG1hdGhNTG5vZGU6XzRlLHN2Z1NwYW46TjRlfTtvKHlyLCJhc3NlcnROb2RlVHlwZSIpO28oUEMsImFzc2VydFN5bWJvbE5vZGVUeXBlIik7byh4NCwiY2hlY2tTeW1ib2xOb2RlVHlwZSIpO0JDPW8oKHQsZSk9Pnt2YXIgcixuLGk7dCYmdC50eXBlPT09InN1cHN1YiI/KG49eXIodC5iYXNlLCJhY2NlbnQiKSxyPW4uYmFzZSx0LmJhc2U9cixpPXI0ZShPcih0LGUpKSx0LmJhc2U9bik6KG49eXIodCwiYWNjZW50Iikscj1uLmJhc2UpO3ZhciBhPU9yKHIsZS5oYXZpbmdDcmFtcGVkU3R5bGUoKSkscz1uLmlzU2hpZnR5JiZKdC5pc0NoYXJhY3RlckJveChyKSxsPTA7aWYocyl7dmFyIHU9SnQuZ2V0QmFzZUVsZW0ociksaD1Pcih1LGUuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO2w9Y0coaCkuc2tld312YXIgZj1uLmxhYmVsPT09IlxcYyIsZD1mP2EuaGVpZ2h0K2EuZGVwdGg6TWF0aC5taW4oYS5oZWlnaHQsZS5mb250TWV0cmljcygpLnhIZWlnaHQpLHA7aWYobi5pc1N0cmV0Y2h5KXA9YXUuc3ZnU3BhbihuLGUpLHA9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToiZWxlbSIsZWxlbTpwLHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl0sd3JhcHBlclN0eWxlOmw+MD97d2lkdGg6ImNhbGMoMTAwJSAtICIrbXQoMipsKSsiKSIsbWFyZ2luTGVmdDptdCgyKmwpfTp2b2lkIDB9XX0sZSk7ZWxzZXt2YXIgbSxnO24ubGFiZWw9PT0iXFx2ZWMiPyhtPUllLnN0YXRpY1N2ZygidmVjIixlKSxnPUllLnN2Z0RhdGEudmVjWzFdKToobT1JZS5tYWtlT3JkKHttb2RlOm4ubW9kZSx0ZXh0Om4ubGFiZWx9LGUsInRleHRvcmQiKSxtPWNHKG0pLG0uaXRhbGljPTAsZz1tLndpZHRoLGYmJihkKz1tLmRlcHRoKSkscD1JZS5tYWtlU3BhbihbImFjY2VudC1ib2R5Il0sW21dKTt2YXIgeT1uLmxhYmVsPT09IlxcdGV4dGNpcmNsZWQiO3kmJihwLmNsYXNzZXMucHVzaCgiYWNjZW50LWZ1bGwiKSxkPWEuaGVpZ2h0KTt2YXIgdj1sO3l8fCh2LT1nLzIpLHAuc3R5bGUubGVmdD1tdCh2KSxuLmxhYmVsPT09IlxcdGV4dGNpcmNsZWQiJiYocC5zdHlsZS50b3A9Ii4yZW0iKSxwPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06YX0se3R5cGU6Imtlcm4iLHNpemU6LWR9LHt0eXBlOiJlbGVtIixlbGVtOnB9XX0sZSl9dmFyIHg9SWUubWFrZVNwYW4oWyJtb3JkIiwiYWNjZW50Il0sW3BdLGUpO3JldHVybiBpPyhpLmNoaWxkcmVuWzBdPXgsaS5oZWlnaHQ9TWF0aC5tYXgoeC5oZWlnaHQsaS5oZWlnaHQpLGkuY2xhc3Nlc1swXT0ibW9yZCIsaSk6eH0sImh0bWxCdWlsZGVyJGEiKSxaRz1vKCh0LGUpPT57dmFyIHI9dC5pc1N0cmV0Y2h5P2F1Lm1hdGhNTG5vZGUodC5sYWJlbCk6bmV3IHN0Lk1hdGhOb2RlKCJtbyIsW0FvKHQubGFiZWwsdC5tb2RlKV0pLG49bmV3IHN0Lk1hdGhOb2RlKCJtb3ZlciIsW21uKHQuYmFzZSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnQiLCJ0cnVlIiksbn0sIm1hdGhtbEJ1aWxkZXIkOSIpLE00ZT1uZXcgUmVnRXhwKFsiXFxhY3V0ZSIsIlxcZ3JhdmUiLCJcXGRkb3QiLCJcXHRpbGRlIiwiXFxiYXIiLCJcXGJyZXZlIiwiXFxjaGVjayIsIlxcaGF0IiwiXFx2ZWMiLCJcXGRvdCIsIlxcbWF0aHJpbmciXS5tYXAodD0+IlxcIit0KS5qb2luKCJ8IikpO0N0KHt0eXBlOiJhY2NlbnQiLG5hbWVzOlsiXFxhY3V0ZSIsIlxcZ3JhdmUiLCJcXGRkb3QiLCJcXHRpbGRlIiwiXFxiYXIiLCJcXGJyZXZlIiwiXFxjaGVjayIsIlxcaGF0IiwiXFx2ZWMiLCJcXGRvdCIsIlxcbWF0aHJpbmciLCJcXHdpZGVjaGVjayIsIlxcd2lkZWhhdCIsIlxcd2lkZXRpbGRlIiwiXFxvdmVycmlnaHRhcnJvdyIsIlxcb3ZlcmxlZnRhcnJvdyIsIlxcT3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0cmlnaHRhcnJvdyIsIlxcb3Zlcmdyb3VwIiwiXFxvdmVybGluZXNlZ21lbnQiLCJcXG92ZXJsZWZ0aGFycG9vbiIsIlxcb3ZlcnJpZ2h0aGFycG9vbiJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPXA0KGVbMF0pLG49IU00ZS50ZXN0KHQuZnVuY05hbWUpLGk9IW58fHQuZnVuY05hbWU9PT0iXFx3aWRlaGF0Inx8dC5mdW5jTmFtZT09PSJcXHdpZGV0aWxkZSJ8fHQuZnVuY05hbWU9PT0iXFx3aWRlY2hlY2siO3JldHVybnt0eXBlOiJhY2NlbnQiLG1vZGU6dC5wYXJzZXIubW9kZSxsYWJlbDp0LmZ1bmNOYW1lLGlzU3RyZXRjaHk6bixpc1NoaWZ0eTppLGJhc2U6cn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6QkMsbWF0aG1sQnVpbGRlcjpaR30pO0N0KHt0eXBlOiJhY2NlbnQiLG5hbWVzOlsiXFwnIiwiXFxgIiwiXFxeIiwiXFx+IiwiXFw9IiwiXFx1IiwiXFwuIiwnXFwiJywiXFxjIiwiXFxyIiwiXFxIIiwiXFx2IiwiXFx0ZXh0Y2lyY2xlZCJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPWVbMF0sbj10LnBhcnNlci5tb2RlO3JldHVybiBuPT09Im1hdGgiJiYodC5wYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJtYXRoVnNUZXh0QWNjZW50cyIsIkxhVGVYJ3MgYWNjZW50ICIrdC5mdW5jTmFtZSsiIHdvcmtzIG9ubHkgaW4gdGV4dCBtb2RlIiksbj0idGV4dCIpLHt0eXBlOiJhY2NlbnQiLG1vZGU6bixsYWJlbDp0LmZ1bmNOYW1lLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpyfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpCQyxtYXRobWxCdWlsZGVyOlpHfSk7Q3Qoe3R5cGU6ImFjY2VudFVuZGVyIixuYW1lczpbIlxcdW5kZXJsZWZ0YXJyb3ciLCJcXHVuZGVycmlnaHRhcnJvdyIsIlxcdW5kZXJsZWZ0cmlnaHRhcnJvdyIsIlxcdW5kZXJncm91cCIsIlxcdW5kZXJsaW5lc2VnbWVudCIsIlxcdXRpbGRlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJhY2NlbnRVbmRlciIsbW9kZTpyLm1vZGUsbGFiZWw6bixiYXNlOml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1Pcih0LmJhc2UsZSksbj1hdS5zdmdTcGFuKHQsZSksaT10LmxhYmVsPT09IlxcdXRpbGRlIj8uMTI6MCxhPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpyLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06bix3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTppfSx7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpO3JldHVybiBJZS5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnR1bmRlciJdLFthXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9YXUubWF0aE1Mbm9kZSh0LmxhYmVsKSxuPW5ldyBzdC5NYXRoTm9kZSgibXVuZGVyIixbbW4odC5iYXNlLGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTtpND1vKHQ9Pnt2YXIgZT1uZXcgc3QuTWF0aE5vZGUoIm1wYWRkZWQiLHQ/W3RdOltdKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKzAuNmVtIiksZS5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjAuM2VtIiksZX0sInBhZGRlZE5vZGUiKTtDdCh7dHlwZToieEFycm93IixuYW1lczpbIlxceGxlZnRhcnJvdyIsIlxceHJpZ2h0YXJyb3ciLCJcXHhMZWZ0YXJyb3ciLCJcXHhSaWdodGFycm93IiwiXFx4bGVmdHJpZ2h0YXJyb3ciLCJcXHhMZWZ0cmlnaHRhcnJvdyIsIlxceGhvb2tsZWZ0YXJyb3ciLCJcXHhob29rcmlnaHRhcnJvdyIsIlxceG1hcHN0byIsIlxceHJpZ2h0aGFycG9vbmRvd24iLCJcXHhyaWdodGhhcnBvb251cCIsIlxceGxlZnRoYXJwb29uZG93biIsIlxceGxlZnRoYXJwb29udXAiLCJcXHhyaWdodGxlZnRoYXJwb29ucyIsIlxceGxlZnRyaWdodGhhcnBvb25zIiwiXFx4bG9uZ2VxdWFsIiwiXFx4dHdvaGVhZHJpZ2h0YXJyb3ciLCJcXHh0d29oZWFkbGVmdGFycm93IiwiXFx4dG9mcm9tIiwiXFx4cmlnaHRsZWZ0YXJyb3dzIiwiXFx4cmlnaHRlcXVpbGlicml1bSIsIlxceGxlZnRlcXVpbGlicml1bSIsIlxcXFxjZHJpZ2h0YXJyb3ciLCJcXFxcY2RsZWZ0YXJyb3ciLCJcXFxcY2Rsb25nZXF1YWwiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm4sZnVuY05hbWU6aX09dDtyZXR1cm57dHlwZToieEFycm93Iixtb2RlOm4ubW9kZSxsYWJlbDppLGJvZHk6ZVswXSxiZWxvdzpyWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1lLnN0eWxlLG49ZS5oYXZpbmdTdHlsZShyLnN1cCgpKSxpPUllLndyYXBGcmFnbWVudChPcih0LmJvZHksbixlKSxlKSxhPXQubGFiZWwuc2xpY2UoMCwyKT09PSJcXHgiPyJ4IjoiY2QiO2kuY2xhc3Nlcy5wdXNoKGErIi1hcnJvdy1wYWQiKTt2YXIgczt0LmJlbG93JiYobj1lLmhhdmluZ1N0eWxlKHIuc3ViKCkpLHM9SWUud3JhcEZyYWdtZW50KE9yKHQuYmVsb3csbixlKSxlKSxzLmNsYXNzZXMucHVzaChhKyItYXJyb3ctcGFkIikpO3ZhciBsPWF1LnN2Z1NwYW4odCxlKSx1PS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCsuNSpsLmhlaWdodCxoPS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodC0uNSpsLmhlaWdodC0uMTExOyhpLmRlcHRoPi4yNXx8dC5sYWJlbD09PSJcXHhsZWZ0ZXF1aWxpYnJpdW0iKSYmKGgtPWkuZGVwdGgpO3ZhciBmO2lmKHMpe3ZhciBkPS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCtzLmhlaWdodCsuNSpsLmhlaWdodCsuMTExO2Y9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmksc2hpZnQ6aH0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDp1fSx7dHlwZToiZWxlbSIsZWxlbTpzLHNoaWZ0OmR9XX0sZSl9ZWxzZSBmPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTppLHNoaWZ0Omh9LHt0eXBlOiJlbGVtIixlbGVtOmwsc2hpZnQ6dX1dfSxlKTtyZXR1cm4gZi5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpLEllLm1ha2VTcGFuKFsibXJlbCIsIngtYXJyb3ciXSxbZl0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1hdS5tYXRoTUxub2RlKHQubGFiZWwpO3Iuc2V0QXR0cmlidXRlKCJtaW5zaXplIix0LmxhYmVsLmNoYXJBdCgwKT09PSJ4Ij8iMS43NWVtIjoiMy4wZW0iKTt2YXIgbjtpZih0LmJvZHkpe3ZhciBpPWk0KG1uKHQuYm9keSxlKSk7aWYodC5iZWxvdyl7dmFyIGE9aTQobW4odC5iZWxvdyxlKSk7bj1uZXcgc3QuTWF0aE5vZGUoIm11bmRlcm92ZXIiLFtyLGEsaV0pfWVsc2Ugbj1uZXcgc3QuTWF0aE5vZGUoIm1vdmVyIixbcixpXSl9ZWxzZSBpZih0LmJlbG93KXt2YXIgcz1pNChtbih0LmJlbG93LGUpKTtuPW5ldyBzdC5NYXRoTm9kZSgibXVuZGVyIixbcixzXSl9ZWxzZSBuPWk0KCksbj1uZXcgc3QuTWF0aE5vZGUoIm1vdmVyIixbcixuXSk7cmV0dXJuIG59fSk7STRlPUllLm1ha2VTcGFuO28oSkcsImh0bWxCdWlsZGVyJDkiKTtvKGUkLCJtYXRobWxCdWlsZGVyJDgiKTtDdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcbWF0aG9yZCIsIlxcbWF0aGJpbiIsIlxcbWF0aHJlbCIsIlxcbWF0aG9wZW4iLCJcXG1hdGhjbG9zZSIsIlxcbWF0aHB1bmN0IiwiXFxtYXRoaW5uZXIiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnIubW9kZSxtY2xhc3M6Im0iK24uc2xpY2UoNSksYm9keTpkaShpKSxpc0NoYXJhY3RlckJveDpKdC5pc0NoYXJhY3RlckJveChpKX19LGh0bWxCdWlsZGVyOkpHLG1hdGhtbEJ1aWxkZXI6ZSR9KTtiND1vKHQ9Pnt2YXIgZT10LnR5cGU9PT0ib3JkZ3JvdXAiJiZ0LmJvZHkubGVuZ3RoP3QuYm9keVswXTp0O3JldHVybiBlLnR5cGU9PT0iYXRvbSImJihlLmZhbWlseT09PSJiaW4ifHxlLmZhbWlseT09PSJyZWwiKT8ibSIrZS5mYW1pbHk6Im1vcmQifSwiYmlucmVsQ2xhc3MiKTtDdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcQGJpbnJlbCJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOmI0KGVbMF0pLGJvZHk6ZGkoZVsxXSksaXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3goZVsxXSl9fX0pO0N0KHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxzdGFja3JlbCIsIlxcb3ZlcnNldCIsIlxcdW5kZXJzZXQiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzFdLGE9ZVswXSxzO24hPT0iXFxzdGFja3JlbCI/cz1iNChpKTpzPSJtcmVsIjt2YXIgbD17dHlwZToib3AiLG1vZGU6aS5tb2RlLGxpbWl0czohMCxhbHdheXNIYW5kbGVTdXBTdWI6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLHN1cHByZXNzQmFzZVNoaWZ0Om4hPT0iXFxzdGFja3JlbCIsYm9keTpkaShpKX0sdT17dHlwZToic3Vwc3ViIixtb2RlOmEubW9kZSxiYXNlOmwsc3VwOm49PT0iXFx1bmRlcnNldCI/bnVsbDphLHN1YjpuPT09IlxcdW5kZXJzZXQiP2E6bnVsbH07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOnMsYm9keTpbdV0saXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3godSl9fSxodG1sQnVpbGRlcjpKRyxtYXRobWxCdWlsZGVyOmUkfSk7Q3Qoe3R5cGU6InBtYiIsbmFtZXM6WyJcXHBtYiJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToicG1iIixtb2RlOnIubW9kZSxtY2xhc3M6YjQoZVswXSksYm9keTpkaShlWzBdKX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9SWkodC5ib2R5LGUsITApLG49SWUubWFrZVNwYW4oW3QubWNsYXNzXSxyLGUpO3JldHVybiBuLnN0eWxlLnRleHRTaGFkb3c9IjAuMDJlbSAwLjAxZW0gMC4wNHB4IixufSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9Z3ModC5ib2R5LGUpLG49bmV3IHN0Lk1hdGhOb2RlKCJtc3R5bGUiLHIpO3JldHVybiBuLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ0ZXh0LXNoYWRvdzogMC4wMmVtIDAuMDFlbSAwLjA0cHgiKSxufX0pO080ZT17Ij4iOiJcXFxcY2RyaWdodGFycm93IiwiPCI6IlxcXFxjZGxlZnRhcnJvdyIsIj0iOiJcXFxcY2Rsb25nZXF1YWwiLEE6IlxcdXBhcnJvdyIsVjoiXFxkb3duYXJyb3ciLCJ8IjoiXFxWZXJ0IiwiLiI6Im5vIGFycm93In0sbUc9bygoKT0+KHt0eXBlOiJzdHlsaW5nIixib2R5OltdLG1vZGU6Im1hdGgiLHN0eWxlOiJkaXNwbGF5In0pLCJuZXdDZWxsIiksZ0c9byh0PT50LnR5cGU9PT0idGV4dG9yZCImJnQudGV4dD09PSJAIiwiaXNTdGFydE9mQXJyb3ciKSxQNGU9bygodCxlKT0+KHQudHlwZT09PSJtYXRob3JkInx8dC50eXBlPT09ImF0b20iKSYmdC50ZXh0PT09ZSwiaXNMYWJlbEVuZCIpO28oQjRlLCJjZEFycm93Iik7byhGNGUsInBhcnNlQ0QiKTtDdCh7dHlwZToiY2RsYWJlbCIsbmFtZXM6WyJcXFxcY2RsZWZ0IiwiXFxcXGNkcmlnaHQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQ7cmV0dXJue3R5cGU6ImNkbGFiZWwiLG1vZGU6ci5tb2RlLHNpZGU6bi5zbGljZSg0KSxsYWJlbDplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3VwKCkpLG49SWUud3JhcEZyYWdtZW50KE9yKHQubGFiZWwscixlKSxlKTtyZXR1cm4gbi5jbGFzc2VzLnB1c2goImNkLWxhYmVsLSIrdC5zaWRlKSxuLnN0eWxlLmJvdHRvbT1tdCguOC1uLmRlcHRoKSxuLmhlaWdodD0wLG4uZGVwdGg9MCxufSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IHN0Lk1hdGhOb2RlKCJtcm93IixbbW4odC5sYWJlbCxlKV0pO3JldHVybiByPW5ldyBzdC5NYXRoTm9kZSgibXBhZGRlZCIsW3JdKSxyLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwIiksdC5zaWRlPT09ImxlZnQiJiZyLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiLTF3aWR0aCIpLHIuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IiwiMC43ZW0iKSxyPW5ldyBzdC5NYXRoTm9kZSgibXN0eWxlIixbcl0pLHIuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLCJmYWxzZSIpLHIuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSxyfX0pO0N0KHt0eXBlOiJjZGxhYmVscGFyZW50IixuYW1lczpbIlxcXFxjZHBhcmVudCJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6ImNkbGFiZWxwYXJlbnQiLG1vZGU6ci5tb2RlLGZyYWdtZW50OmVbMF19fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUllLndyYXBGcmFnbWVudChPcih0LmZyYWdtZW50LGUpLGUpO3JldHVybiByLmNsYXNzZXMucHVzaCgiY2QtdmVydC1hcnJvdyIpLHJ9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gbmV3IHN0Lk1hdGhOb2RlKCJtcm93IixbbW4odC5mcmFnbWVudCxlKV0pfX0pO0N0KHt0eXBlOiJ0ZXh0b3JkIixuYW1lczpbIlxcQGNoYXIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXtmb3IodmFye3BhcnNlcjpyfT10LG49eXIoZVswXSwib3JkZ3JvdXAiKSxpPW4uYm9keSxhPSIiLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9eXIoaVtzXSwidGV4dG9yZCIpO2ErPWwudGV4dH12YXIgdT1wYXJzZUludChhKSxoO2lmKGlzTmFOKHUpKXRocm93IG5ldyB1dCgiXFxAY2hhciBoYXMgbm9uLW51bWVyaWMgYXJndW1lbnQgIithKTtpZih1PDB8fHU+PTExMTQxMTEpdGhyb3cgbmV3IHV0KCJcXEBjaGFyIHdpdGggaW52YWxpZCBjb2RlIHBvaW50ICIrYSk7cmV0dXJuIHU8PTY1NTM1P2g9U3RyaW5nLmZyb21DaGFyQ29kZSh1KToodS09NjU1MzYsaD1TdHJpbmcuZnJvbUNoYXJDb2RlKCh1Pj4xMCkrNTUyOTYsKHUmMTAyMykrNTYzMjApKSx7dHlwZToidGV4dG9yZCIsbW9kZTpyLm1vZGUsdGV4dDpofX19KTt0JD1vKCh0LGUpPT57dmFyIHI9SWkodC5ib2R5LGUud2l0aENvbG9yKHQuY29sb3IpLCExKTtyZXR1cm4gSWUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIkOCIpLHIkPW8oKHQsZSk9Pnt2YXIgcj1ncyh0LmJvZHksZS53aXRoQ29sb3IodC5jb2xvcikpLG49bmV3IHN0Lk1hdGhOb2RlKCJtc3R5bGUiLHIpO3JldHVybiBuLnNldEF0dHJpYnV0ZSgibWF0aGNvbG9yIix0LmNvbG9yKSxufSwibWF0aG1sQnVpbGRlciQ3Iik7Q3Qoe3R5cGU6ImNvbG9yIixuYW1lczpbIlxcdGV4dGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJvcmlnaW5hbCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49eXIoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixpPWVbMV07cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnIubW9kZSxjb2xvcjpuLGJvZHk6ZGkoaSl9fSxodG1sQnVpbGRlcjp0JCxtYXRobWxCdWlsZGVyOnIkfSk7Q3Qoe3R5cGU6ImNvbG9yIixuYW1lczpbIlxcY29sb3IiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGJyZWFrT25Ub2tlblRleHQ6bn09dCxpPXlyKGVbMF0sImNvbG9yLXRva2VuIikuY29sb3I7ci5ndWxsZXQubWFjcm9zLnNldCgiXFxjdXJyZW50QGNvbG9yIixpKTt2YXIgYT1yLnBhcnNlRXhwcmVzc2lvbighMCxuKTtyZXR1cm57dHlwZToiY29sb3IiLG1vZGU6ci5tb2RlLGNvbG9yOmksYm9keTphfX0saHRtbEJ1aWxkZXI6dCQsbWF0aG1sQnVpbGRlcjpyJH0pO0N0KHt0eXBlOiJjciIsbmFtZXM6WyJcXFxcIl0scHJvcHM6e251bUFyZ3M6MCxudW1PcHRpb25hbEFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1uLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09IlsiP24ucGFyc2VTaXplR3JvdXAoITApOm51bGwsYT0hbi5zZXR0aW5ncy5kaXNwbGF5TW9kZXx8IW4uc2V0dGluZ3MudXNlU3RyaWN0QmVoYXZpb3IoIm5ld0xpbmVJbkRpc3BsYXlNb2RlIiwiSW4gTGFUZVgsIFxcXFwgb3IgXFxuZXdsaW5lIGRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGUiKTtyZXR1cm57dHlwZToiY3IiLG1vZGU6bi5tb2RlLG5ld0xpbmU6YSxzaXplOmkmJnlyKGksInNpemUiKS52YWx1ZX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9SWUubWFrZVNwYW4oWyJtc3BhY2UiXSxbXSxlKTtyZXR1cm4gdC5uZXdMaW5lJiYoci5jbGFzc2VzLnB1c2goIm5ld2xpbmUiKSx0LnNpemUmJihyLnN0eWxlLm1hcmdpblRvcD1tdChRbih0LnNpemUsZSkpKSkscn0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBzdC5NYXRoTm9kZSgibXNwYWNlIik7cmV0dXJuIHQubmV3TGluZSYmKHIuc2V0QXR0cmlidXRlKCJsaW5lYnJlYWsiLCJuZXdsaW5lIiksdC5zaXplJiZyLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixtdChRbih0LnNpemUsZSkpKSkscn19KTtDQz17IlxcZ2xvYmFsIjoiXFxnbG9iYWwiLCJcXGxvbmciOiJcXFxcZ2xvYmFsbG9uZyIsIlxcXFxnbG9iYWxsb25nIjoiXFxcXGdsb2JhbGxvbmciLCJcXGRlZiI6IlxcZ2RlZiIsIlxcZ2RlZiI6IlxcZ2RlZiIsIlxcZWRlZiI6IlxceGRlZiIsIlxceGRlZiI6IlxceGRlZiIsIlxcbGV0IjoiXFxcXGdsb2JhbGxldCIsIlxcZnV0dXJlbGV0IjoiXFxcXGdsb2JhbGZ1dHVyZSJ9LG4kPW8odD0+e3ZhciBlPXQudGV4dDtpZigvXig/OltcXHt9JCYjXl9dfEVPRikkLy50ZXN0KGUpKXRocm93IG5ldyB1dCgiRXhwZWN0ZWQgYSBjb250cm9sIHNlcXVlbmNlIix0KTtyZXR1cm4gZX0sImNoZWNrQ29udHJvbFNlcXVlbmNlIiksejRlPW8odD0+e3ZhciBlPXQuZ3VsbGV0LnBvcFRva2VuKCk7cmV0dXJuIGUudGV4dD09PSI9IiYmKGU9dC5ndWxsZXQucG9wVG9rZW4oKSxlLnRleHQ9PT0iICImJihlPXQuZ3VsbGV0LnBvcFRva2VuKCkpKSxlfSwiZ2V0UkhTIiksaSQ9bygodCxlLHIsbik9Pnt2YXIgaT10Lmd1bGxldC5tYWNyb3MuZ2V0KHIudGV4dCk7aT09bnVsbCYmKHIubm9leHBhbmQ9ITAsaT17dG9rZW5zOltyXSxudW1BcmdzOjAsdW5leHBhbmRhYmxlOiF0Lmd1bGxldC5pc0V4cGFuZGFibGUoci50ZXh0KX0pLHQuZ3VsbGV0Lm1hY3Jvcy5zZXQoZSxpLG4pfSwibGV0Q29tbWFuZCIpO0N0KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGdsb2JhbCIsIlxcbG9uZyIsIlxcXFxnbG9iYWxsb25nIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O2UuY29uc3VtZVNwYWNlcygpO3ZhciBuPWUuZmV0Y2goKTtpZihDQ1tuLnRleHRdKXJldHVybihyPT09IlxcZ2xvYmFsInx8cj09PSJcXFxcZ2xvYmFsbG9uZyIpJiYobi50ZXh0PUNDW24udGV4dF0pLHlyKGUucGFyc2VGdW5jdGlvbigpLCJpbnRlcm5hbCIpO3Rocm93IG5ldyB1dCgiSW52YWxpZCB0b2tlbiBhZnRlciBtYWNybyBwcmVmaXgiLG4pfX0pO0N0KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGRlZiIsIlxcZ2RlZiIsIlxcZWRlZiIsIlxceGRlZiJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1lLmd1bGxldC5wb3BUb2tlbigpLGk9bi50ZXh0O2lmKC9eKD86W1xce30kJiNeX118RU9GKSQvLnRlc3QoaSkpdGhyb3cgbmV3IHV0KCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2UiLG4pO2Zvcih2YXIgYT0wLHMsbD1bW11dO2UuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI7KWlmKG49ZS5ndWxsZXQucG9wVG9rZW4oKSxuLnRleHQ9PT0iIyIpe2lmKGUuZ3VsbGV0LmZ1dHVyZSgpLnRleHQ9PT0ieyIpe3M9ZS5ndWxsZXQuZnV0dXJlKCksbFthXS5wdXNoKCJ7Iik7YnJlYWt9aWYobj1lLmd1bGxldC5wb3BUb2tlbigpLCEvXlsxLTldJC8udGVzdChuLnRleHQpKXRocm93IG5ldyB1dCgnSW52YWxpZCBhcmd1bWVudCBudW1iZXIgIicrbi50ZXh0KyciJyk7aWYocGFyc2VJbnQobi50ZXh0KSE9PWErMSl0aHJvdyBuZXcgdXQoJ0FyZ3VtZW50IG51bWJlciAiJytuLnRleHQrJyIgb3V0IG9mIG9yZGVyJyk7YSsrLGwucHVzaChbXSl9ZWxzZXtpZihuLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgdXQoIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvbiIpO2xbYV0ucHVzaChuLnRleHQpfXZhcnt0b2tlbnM6dX09ZS5ndWxsZXQuY29uc3VtZUFyZygpO3JldHVybiBzJiZ1LnVuc2hpZnQocyksKHI9PT0iXFxlZGVmInx8cj09PSJcXHhkZWYiKSYmKHU9ZS5ndWxsZXQuZXhwYW5kVG9rZW5zKHUpLHUucmV2ZXJzZSgpKSxlLmd1bGxldC5tYWNyb3Muc2V0KGkse3Rva2Vuczp1LG51bUFyZ3M6YSxkZWxpbWl0ZXJzOmx9LHI9PT1DQ1tyXSkse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7Q3Qoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxcbGV0IiwiXFxcXGdsb2JhbGxldCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1uJChlLmd1bGxldC5wb3BUb2tlbigpKTtlLmd1bGxldC5jb25zdW1lU3BhY2VzKCk7dmFyIGk9ejRlKGUpO3JldHVybiBpJChlLG4saSxyPT09IlxcXFxnbG9iYWxsZXQiKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6ZS5tb2RlfX19KTtDdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxmdXR1cmVsZXQiLCJcXFxcZ2xvYmFsZnV0dXJlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPW4kKGUuZ3VsbGV0LnBvcFRva2VuKCkpLGk9ZS5ndWxsZXQucG9wVG9rZW4oKSxhPWUuZ3VsbGV0LnBvcFRva2VuKCk7cmV0dXJuIGkkKGUsbixhLHI9PT0iXFxcXGdsb2JhbGZ1dHVyZSIpLGUuZ3VsbGV0LnB1c2hUb2tlbihhKSxlLmd1bGxldC5wdXNoVG9rZW4oaSkse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7SzE9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9RW4ubWF0aFtlXSYmRW4ubWF0aFtlXS5yZXBsYWNlLGE9UkMoaXx8ZSxyLG4pO2lmKCFhKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3ltYm9sICIrZSsiIGFuZCBmb250IHNpemUgIityKyIuIik7cmV0dXJuIGF9LCJnZXRNZXRyaWNzIiksRkM9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLmhhdmluZ0Jhc2VTdHlsZShyKSxzPUllLm1ha2VTcGFuKGkuY29uY2F0KGEuc2l6aW5nQ2xhc3NlcyhuKSksW2VdLG4pLGw9YS5zaXplTXVsdGlwbGllci9uLnNpemVNdWx0aXBsaWVyO3JldHVybiBzLmhlaWdodCo9bCxzLmRlcHRoKj1sLHMubWF4Rm9udFNpemU9YS5zaXplTXVsdGlwbGllcixzfSwic3R5bGVXcmFwIiksYSQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5oYXZpbmdCYXNlU3R5bGUobiksYT0oMS1yLnNpemVNdWx0aXBsaWVyL2kuc2l6ZU11bHRpcGxpZXIpKnIuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O2UuY2xhc3Nlcy5wdXNoKCJkZWxpbWNlbnRlciIpLGUuc3R5bGUudG9wPW10KGEpLGUuaGVpZ2h0LT1hLGUuZGVwdGgrPWF9LCJjZW50ZXJTcGFuIiksRzRlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPUllLm1ha2VTeW1ib2woZSwiTWFpbi1SZWd1bGFyIixhLGkpLHU9RkMobCxyLGkscyk7cmV0dXJuIG4mJmEkKHUsaSxyKSx1fSwibWFrZVNtYWxsRGVsaW0iKSwkNGU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gSWUubWFrZVN5bWJvbChlLCJTaXplIityKyItUmVndWxhciIsbixpKX0sIm1hdGhybVNpemUiKSxzJD1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD0kNGUoZSxyLGEsaSksdT1GQyhJZS5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwic2l6ZSIrcl0sW2xdLGkpLHJyLlRFWFQsaSxzKTtyZXR1cm4gbiYmYSQodSxpLHJyLlRFWFQpLHV9LCJtYWtlTGFyZ2VEZWxpbSIpLHVDPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpO3I9PT0iU2l6ZTEtUmVndWxhciI/aT0iZGVsaW0tc2l6ZTEiOmk9ImRlbGltLXNpemU0Ijt2YXIgYT1JZS5tYWtlU3BhbihbImRlbGltc2l6aW5naW5uZXIiLGldLFtJZS5tYWtlU3BhbihbXSxbSWUubWFrZVN5bWJvbChlLHIsbildKV0pO3JldHVybnt0eXBlOiJlbGVtIixlbGVtOmF9fSwibWFrZUdseXBoU3BhbiIpLGhDPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVpsWyJTaXplNC1SZWd1bGFyIl1bZS5jaGFyQ29kZUF0KDApXT9abFsiU2l6ZTQtUmVndWxhciJdW2UuY2hhckNvZGVBdCgwKV1bNF06WmxbIlNpemUxLVJlZ3VsYXIiXVtlLmNoYXJDb2RlQXQoMCldWzRdLGE9bmV3IEpsKCJpbm5lciIsamJlKGUsTWF0aC5yb3VuZCgxZTMqcikpKSxzPW5ldyBmbChbYV0se3dpZHRoOm10KGkpLGhlaWdodDptdChyKSxzdHlsZToid2lkdGg6IittdChpKSx2aWV3Qm94OiIwIDAgIisxZTMqaSsiICIrTWF0aC5yb3VuZCgxZTMqcikscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSksbD1JZS5tYWtlU3ZnU3BhbihbXSxbc10sbik7cmV0dXJuIGwuaGVpZ2h0PXIsbC5zdHlsZS5oZWlnaHQ9bXQociksbC5zdHlsZS53aWR0aD1tdChpKSx7dHlwZToiZWxlbSIsZWxlbTpsfX0sIm1ha2VJbm5lciIpLEFDPS4wMDgsYTQ9e3R5cGU6Imtlcm4iLHNpemU6LTEqQUN9LFY0ZT1bInwiLCJcXGx2ZXJ0IiwiXFxydmVydCIsIlxcdmVydCJdLFU0ZT1bIlxcfCIsIlxcbFZlcnQiLCJcXHJWZXJ0IiwiXFxWZXJ0Il0sbyQ9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGwsdSxoLGYsZD0iIixwPTA7bD1oPWY9ZSx1PW51bGw7dmFyIG09IlNpemUxLVJlZ3VsYXIiO2U9PT0iXFx1cGFycm93Ij9oPWY9Ilx1MjNEMCI6ZT09PSJcXFVwYXJyb3ciP2g9Zj0iXHUyMDE2IjplPT09IlxcZG93bmFycm93Ij9sPWg9Ilx1MjNEMCI6ZT09PSJcXERvd25hcnJvdyI/bD1oPSJcdTIwMTYiOmU9PT0iXFx1cGRvd25hcnJvdyI/KGw9IlxcdXBhcnJvdyIsaD0iXHUyM0QwIixmPSJcXGRvd25hcnJvdyIpOmU9PT0iXFxVcGRvd25hcnJvdyI/KGw9IlxcVXBhcnJvdyIsaD0iXHUyMDE2IixmPSJcXERvd25hcnJvdyIpOkp0LmNvbnRhaW5zKFY0ZSxlKT8oaD0iXHUyMjIzIixkPSJ2ZXJ0IixwPTMzMyk6SnQuY29udGFpbnMoVTRlLGUpPyhoPSJcdTIyMjUiLGQ9ImRvdWJsZXZlcnQiLHA9NTU2KTplPT09IlsifHxlPT09IlxcbGJyYWNrIj8obD0iXHUyM0ExIixoPSJcdTIzQTIiLGY9Ilx1MjNBMyIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibGJyYWNrIixwPTY2Nyk6ZT09PSJdInx8ZT09PSJcXHJicmFjayI/KGw9Ilx1MjNBNCIsaD0iXHUyM0E1IixmPSJcdTIzQTYiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJicmFjayIscD02NjcpOmU9PT0iXFxsZmxvb3IifHxlPT09Ilx1MjMwQSI/KGg9bD0iXHUyM0EyIixmPSJcdTIzQTMiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxmbG9vciIscD02NjcpOmU9PT0iXFxsY2VpbCJ8fGU9PT0iXHUyMzA4Ij8obD0iXHUyM0ExIixoPWY9Ilx1MjNBMiIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibGNlaWwiLHA9NjY3KTplPT09IlxccmZsb29yInx8ZT09PSJcdTIzMEIiPyhoPWw9Ilx1MjNBNSIsZj0iXHUyM0E2IixtPSJTaXplNC1SZWd1bGFyIixkPSJyZmxvb3IiLHA9NjY3KTplPT09IlxccmNlaWwifHxlPT09Ilx1MjMwOSI/KGw9Ilx1MjNBNCIsaD1mPSJcdTIzQTUiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJjZWlsIixwPTY2Nyk6ZT09PSIoInx8ZT09PSJcXGxwYXJlbiI/KGw9Ilx1MjM5QiIsaD0iXHUyMzlDIixmPSJcdTIzOUQiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxwYXJlbiIscD04NzUpOmU9PT0iKSJ8fGU9PT0iXFxycGFyZW4iPyhsPSJcdTIzOUUiLGg9Ilx1MjM5RiIsZj0iXHUyM0EwIixtPSJTaXplNC1SZWd1bGFyIixkPSJycGFyZW4iLHA9ODc1KTplPT09IlxceyJ8fGU9PT0iXFxsYnJhY2UiPyhsPSJcdTIzQTciLHU9Ilx1MjNBOCIsZj0iXHUyM0E5IixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcfSJ8fGU9PT0iXFxyYnJhY2UiPyhsPSJcdTIzQUIiLHU9Ilx1MjNBQyIsZj0iXHUyM0FEIixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcbGdyb3VwInx8ZT09PSJcdTI3RUUiPyhsPSJcdTIzQTciLGY9Ilx1MjNBOSIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXHJncm91cCJ8fGU9PT0iXHUyN0VGIj8obD0iXHUyM0FCIixmPSJcdTIzQUQiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOmU9PT0iXFxsbW91c3RhY2hlInx8ZT09PSJcdTIzQjAiPyhsPSJcdTIzQTciLGY9Ilx1MjNBRCIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6KGU9PT0iXFxybW91c3RhY2hlInx8ZT09PSJcdTIzQjEiKSYmKGw9Ilx1MjNBQiIsZj0iXHUyM0E5IixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTt2YXIgZz1LMShsLG0sYSkseT1nLmhlaWdodCtnLmRlcHRoLHY9SzEoaCxtLGEpLHg9di5oZWlnaHQrdi5kZXB0aCxiPUsxKGYsbSxhKSx3PWIuaGVpZ2h0K2IuZGVwdGgsXz0wLFQ9MTtpZih1IT09bnVsbCl7dmFyIEU9SzEodSxtLGEpO189RS5oZWlnaHQrRS5kZXB0aCxUPTJ9dmFyIEw9eSt3K18sQz1NYXRoLm1heCgwLE1hdGguY2VpbCgoci1MKS8oVCp4KSkpLEE9TCtDKlQqeCxJPWkuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O24mJihJKj1pLnNpemVNdWx0aXBsaWVyKTt2YXIgRD1BLzItSSxrPVtdO2lmKGQubGVuZ3RoPjApe3ZhciBSPUEteS13LFM9TWF0aC5yb3VuZChBKjFlMyksTz1LYmUoZCxNYXRoLnJvdW5kKFIqMWUzKSksTj1uZXcgSmwoZCxPKSxQPShwLzFlMykudG9GaXhlZCgzKSsiZW0iLEY9KFMvMWUzKS50b0ZpeGVkKDMpKyJlbSIsQj1uZXcgZmwoW05dLHt3aWR0aDpQLGhlaWdodDpGLHZpZXdCb3g6IjAgMCAiK3ArIiAiK1N9KSwkPUllLm1ha2VTdmdTcGFuKFtdLFtCXSxpKTskLmhlaWdodD1TLzFlMywkLnN0eWxlLndpZHRoPVAsJC5zdHlsZS5oZWlnaHQ9RixrLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06JH0pfWVsc2V7aWYoay5wdXNoKHVDKGYsbSxhKSksay5wdXNoKGE0KSx1PT09bnVsbCl7dmFyIHo9QS15LXcrMipBQztrLnB1c2goaEMoaCx6LGkpKX1lbHNle3ZhciBXPShBLXktdy1fKS8yKzIqQUM7ay5wdXNoKGhDKGgsVyxpKSksay5wdXNoKGE0KSxrLnB1c2godUModSxtLGEpKSxrLnB1c2goYTQpLGsucHVzaChoQyhoLFcsaSkpfWsucHVzaChhNCksay5wdXNoKHVDKGwsbSxhKSl9dmFyIGo9aS5oYXZpbmdCYXNlU3R5bGUocnIuVEVYVCksSz1JZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6RCxjaGlsZHJlbjprfSxqKTtyZXR1cm4gRkMoSWUubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsIm11bHQiXSxbS10saikscnIuVEVYVCxpLHMpfSwibWFrZVN0YWNrZWREZWxpbSIpLGZDPTgwLGRDPS4wOCxwQz1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9WGJlKGUsaSxuKSxsPW5ldyBKbChlLHMpLHU9bmV3IGZsKFtsXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6bXQociksdmlld0JveDoiMCAwIDQwMDAwMCAiK24scHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gc2xpY2UifSk7cmV0dXJuIEllLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW3VdLGEpfSwic3FydFN2ZyIpLEg0ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ci5oYXZpbmdCYXNlU2l6aW5nKCksaT1oJCgiXFxzdXJkIixlKm4uc2l6ZU11bHRpcGxpZXIsdSQsbiksYT1uLnNpemVNdWx0aXBsaWVyLHM9TWF0aC5tYXgoMCxyLm1pblJ1bGVUaGlja25lc3Mtci5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKSxsLHU9MCxoPTAsZj0wLGQ7cmV0dXJuIGkudHlwZT09PSJzbWFsbCI/KGY9MWUzKzFlMypzK2ZDLGU8MT9hPTE6ZTwxLjQmJihhPS43KSx1PSgxK3MrZEMpL2EsaD0oMStzKS9hLGw9cEMoInNxcnRNYWluIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjg1M2VtIixkPS44MzMvYSk6aS50eXBlPT09ImxhcmdlIj8oZj0oMWUzK2ZDKSpRMVtpLnNpemVdLGg9KFExW2kuc2l6ZV0rcykvYSx1PShRMVtpLnNpemVdK3MrZEMpL2EsbD1wQygic3FydFNpemUiK2kuc2l6ZSx1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIxLjAyZW0iLGQ9MS9hKToodT1lK3MrZEMsaD1lK3MsZj1NYXRoLmZsb29yKDFlMyplK3MpK2ZDLGw9cEMoInNxcnRUYWxsIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjc0MmVtIixkPTEuMDU2KSxsLmhlaWdodD1oLGwuc3R5bGUuaGVpZ2h0PW10KHUpLHtzcGFuOmwsYWR2YW5jZVdpZHRoOmQscnVsZVdpZHRoOihyLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MrcykqYX19LCJtYWtlU3FydEltYWdlIiksbCQ9WyIoIiwiXFxscGFyZW4iLCIpIiwiXFxycGFyZW4iLCJbIiwiXFxsYnJhY2siLCJdIiwiXFxyYnJhY2siLCJcXHsiLCJcXGxicmFjZSIsIlxcfSIsIlxccmJyYWNlIiwiXFxsZmxvb3IiLCJcXHJmbG9vciIsIlx1MjMwQSIsIlx1MjMwQiIsIlxcbGNlaWwiLCJcXHJjZWlsIiwiXHUyMzA4IiwiXHUyMzA5IiwiXFxzdXJkIl0sVzRlPVsiXFx1cGFycm93IiwiXFxkb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGFycm93IiwiXFxEb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwifCIsIlxcfCIsIlxcdmVydCIsIlxcVmVydCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwiXHUyN0VFIiwiXHUyN0VGIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwiXHUyM0IwIiwiXHUyM0IxIl0sYyQ9WyI8IiwiPiIsIlxcbGFuZ2xlIiwiXFxyYW5nbGUiLCIvIiwiXFxiYWNrc2xhc2giLCJcXGx0IiwiXFxndCJdLFExPVswLDEuMiwxLjgsMi40LDNdLFk0ZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZT09PSI8Inx8ZT09PSJcXGx0Inx8ZT09PSJcdTI3RTgiP2U9IlxcbGFuZ2xlIjooZT09PSI+Inx8ZT09PSJcXGd0Inx8ZT09PSJcdTI3RTkiKSYmKGU9IlxccmFuZ2xlIiksSnQuY29udGFpbnMobCQsZSl8fEp0LmNvbnRhaW5zKGMkLGUpKXJldHVybiBzJChlLHIsITEsbixpLGEpO2lmKEp0LmNvbnRhaW5zKFc0ZSxlKSlyZXR1cm4gbyQoZSxRMVtyXSwhMSxuLGksYSk7dGhyb3cgbmV3IHV0KCJJbGxlZ2FsIGRlbGltaXRlcjogJyIrZSsiJyIpfSwibWFrZVNpemVkRGVsaW0iKSxxNGU9W3t0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpyci5URVhUfSx7dHlwZToibGFyZ2UiLHNpemU6MX0se3R5cGU6ImxhcmdlIixzaXplOjJ9LHt0eXBlOiJsYXJnZSIsc2l6ZTozfSx7dHlwZToibGFyZ2UiLHNpemU6NH1dLFg0ZT1be3R5cGU6InNtYWxsIixzdHlsZTpyci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlRFWFR9LHt0eXBlOiJzdGFjayJ9XSx1JD1be3R5cGU6InNtYWxsIixzdHlsZTpyci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlRFWFR9LHt0eXBlOiJsYXJnZSIsc2l6ZToxfSx7dHlwZToibGFyZ2UiLHNpemU6Mn0se3R5cGU6ImxhcmdlIixzaXplOjN9LHt0eXBlOiJsYXJnZSIsc2l6ZTo0fSx7dHlwZToic3RhY2sifV0sajRlPW8oZnVuY3Rpb24oZSl7aWYoZS50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitlLnNpemUrIi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK2UudHlwZSsiJyBoZXJlLiIpfSwiZGVsaW1UeXBlVG9Gb250IiksaCQ9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9TWF0aC5taW4oMiwzLWkuc3R5bGUuc2l6ZSkscz1hO3M8bi5sZW5ndGgmJm5bc10udHlwZSE9PSJzdGFjayI7cysrKXt2YXIgbD1LMShlLGo0ZShuW3NdKSwibWF0aCIpLHU9bC5oZWlnaHQrbC5kZXB0aDtpZihuW3NdLnR5cGU9PT0ic21hbGwiKXt2YXIgaD1pLmhhdmluZ0Jhc2VTdHlsZShuW3NdLnN0eWxlKTt1Kj1oLnNpemVNdWx0aXBsaWVyfWlmKHU+cilyZXR1cm4gbltzXX1yZXR1cm4gbltuLmxlbmd0aC0xXX0sInRyYXZlcnNlU2VxdWVuY2UiKSxmJD1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXtlPT09IjwifHxlPT09IlxcbHQifHxlPT09Ilx1MjdFOCI/ZT0iXFxsYW5nbGUiOihlPT09Ij4ifHxlPT09IlxcZ3QifHxlPT09Ilx1MjdFOSIpJiYoZT0iXFxyYW5nbGUiKTt2YXIgbDtKdC5jb250YWlucyhjJCxlKT9sPXE0ZTpKdC5jb250YWlucyhsJCxlKT9sPXUkOmw9WDRlO3ZhciB1PWgkKGUscixsLGkpO3JldHVybiB1LnR5cGU9PT0ic21hbGwiP0c0ZShlLHUuc3R5bGUsbixpLGEscyk6dS50eXBlPT09ImxhcmdlIj9zJChlLHUuc2l6ZSxuLGksYSxzKTpvJChlLHIsbixpLGEscyl9LCJtYWtlQ3VzdG9tU2l6ZWREZWxpbSIpLEs0ZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1pLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCppLnNpemVNdWx0aXBsaWVyLHU9OTAxLGg9NS9pLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxmPU1hdGgubWF4KHItbCxuK2wpLGQ9TWF0aC5tYXgoZi81MDAqdSwyKmYtaCk7cmV0dXJuIGYkKGUsZCwhMCxpLGEscyl9LCJtYWtlTGVmdFJpZ2h0RGVsaW0iKSxudT17c3FydEltYWdlOkg0ZSxzaXplZERlbGltOlk0ZSxzaXplVG9NYXhIZWlnaHQ6UTEsY3VzdG9tU2l6ZWREZWxpbTpmJCxsZWZ0UmlnaHREZWxpbTpLNGV9LHlHPXsiXFxiaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToxfSwiXFxCaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToyfSwiXFxiaWdnbCI6e21jbGFzczoibW9wZW4iLHNpemU6M30sIlxcQmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjR9LCJcXGJpZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZToxfSwiXFxCaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6Mn0sIlxcYmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTozfSwiXFxCaWdnciI6e21jbGFzczoibWNsb3NlIixzaXplOjR9LCJcXGJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6MX0sIlxcQmlnbSI6e21jbGFzczoibXJlbCIsc2l6ZToyfSwiXFxiaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTozfSwiXFxCaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTo0fSwiXFxiaWciOnttY2xhc3M6Im1vcmQiLHNpemU6MX0sIlxcQmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjJ9LCJcXGJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6M30sIlxcQmlnZyI6e21jbGFzczoibW9yZCIsc2l6ZTo0fX0sUTRlPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCJcdTIzMEEiLCJcdTIzMEIiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIlx1MjMwOCIsIlx1MjMwOSIsIjwiLCI+IiwiXFxsYW5nbGUiLCJcdTI3RTgiLCJcXHJhbmdsZSIsIlx1MjdFOSIsIlxcbHQiLCJcXGd0IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcbGdyb3VwIiwiXFxyZ3JvdXAiLCJcdTI3RUUiLCJcdTI3RUYiLCJcXGxtb3VzdGFjaGUiLCJcXHJtb3VzdGFjaGUiLCJcdTIzQjAiLCJcdTIzQjEiLCIvIiwiXFxiYWNrc2xhc2giLCJ8IiwiXFx2ZXJ0IiwiXFx8IiwiXFxWZXJ0IiwiXFx1cGFycm93IiwiXFxVcGFycm93IiwiXFxkb3duYXJyb3ciLCJcXERvd25hcnJvdyIsIlxcdXBkb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwiLiJdO28odzQsImNoZWNrRGVsaW1pdGVyIik7Q3Qoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPXc0KGVbMF0sdCk7cmV0dXJue3R5cGU6ImRlbGltc2l6aW5nIixtb2RlOnQucGFyc2VyLm1vZGUsc2l6ZTp5R1t0LmZ1bmNOYW1lXS5zaXplLG1jbGFzczp5R1t0LmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06ci50ZXh0fX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT50LmRlbGltPT09Ii4iP0llLm1ha2VTcGFuKFt0Lm1jbGFzc10pOm51LnNpemVkRGVsaW0odC5kZWxpbSx0LnNpemUsZSx0Lm1vZGUsW3QubWNsYXNzXSksImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKHQ9Pnt2YXIgZT1bXTt0LmRlbGltIT09Ii4iJiZlLnB1c2goQW8odC5kZWxpbSx0Lm1vZGUpKTt2YXIgcj1uZXcgc3QuTWF0aE5vZGUoIm1vIixlKTt0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/ci5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnIuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBuPW10KG51LnNpemVUb01heEhlaWdodFt0LnNpemVdKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLG4pLHIuc2V0QXR0cmlidXRlKCJtYXhzaXplIixuKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7byh2RywiYXNzZXJ0UGFyc2VkIik7Q3Qoe3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbmFtZXM6WyJcXHJpZ2h0Il0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPXQucGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGN1cnJlbnRAY29sb3IiKTtpZihyJiZ0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IHV0KCJcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxyaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTp3NChlWzBdLHQpLnRleHQsY29sb3I6cn19LCJoYW5kbGVyIil9KTtDdCh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj13NChlWzBdLHQpLG49dC5wYXJzZXI7KytuLmxlZnRyaWdodERlcHRoO3ZhciBpPW4ucGFyc2VFeHByZXNzaW9uKCExKTstLW4ubGVmdHJpZ2h0RGVwdGgsbi5leHBlY3QoIlxccmlnaHQiLCExKTt2YXIgYT15cihuLnBhcnNlRnVuY3Rpb24oKSwibGVmdHJpZ2h0LXJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTpuLm1vZGUsYm9keTppLGxlZnQ6ci50ZXh0LHJpZ2h0OmEuZGVsaW0scmlnaHRDb2xvcjphLmNvbG9yfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dkcodCk7Zm9yKHZhciByPUlpKHQuYm9keSxlLCEwLFsibW9wZW4iLCJtY2xvc2UiXSksbj0wLGk9MCxhPSExLHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdLmlzTWlkZGxlP2E9ITA6KG49TWF0aC5tYXgocltzXS5oZWlnaHQsbiksaT1NYXRoLm1heChyW3NdLmRlcHRoLGkpKTtuKj1lLnNpemVNdWx0aXBsaWVyLGkqPWUuc2l6ZU11bHRpcGxpZXI7dmFyIGw7aWYodC5sZWZ0PT09Ii4iP2w9cnkoZSxbIm1vcGVuIl0pOmw9bnUubGVmdFJpZ2h0RGVsaW0odC5sZWZ0LG4saSxlLHQubW9kZSxbIm1vcGVuIl0pLHIudW5zaGlmdChsKSxhKWZvcih2YXIgdT0xO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLGY9aC5pc01pZGRsZTtmJiYoclt1XT1udS5sZWZ0UmlnaHREZWxpbShmLmRlbGltLG4saSxmLm9wdGlvbnMsdC5tb2RlLFtdKSl9dmFyIGQ7aWYodC5yaWdodD09PSIuIilkPXJ5KGUsWyJtY2xvc2UiXSk7ZWxzZXt2YXIgcD10LnJpZ2h0Q29sb3I/ZS53aXRoQ29sb3IodC5yaWdodENvbG9yKTplO2Q9bnUubGVmdFJpZ2h0RGVsaW0odC5yaWdodCxuLGkscCx0Lm1vZGUsWyJtY2xvc2UiXSl9cmV0dXJuIHIucHVzaChkKSxJZS5tYWtlU3BhbihbIm1pbm5lciJdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZHKHQpO3ZhciByPWdzKHQuYm9keSxlKTtpZih0LmxlZnQhPT0iLiIpe3ZhciBuPW5ldyBzdC5NYXRoTm9kZSgibW8iLFtBbyh0LmxlZnQsdC5tb2RlKV0pO24uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxyLnVuc2hpZnQobil9aWYodC5yaWdodCE9PSIuIil7dmFyIGk9bmV3IHN0Lk1hdGhOb2RlKCJtbyIsW0FvKHQucmlnaHQsdC5tb2RlKV0pO2kuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx0LnJpZ2h0Q29sb3ImJmkuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLHQucmlnaHRDb2xvciksci5wdXNoKGkpfXJldHVybiBJQyhyKX0sIm1hdGhtbEJ1aWxkZXIiKX0pO0N0KHt0eXBlOiJtaWRkbGUiLG5hbWVzOlsiXFxtaWRkbGUiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9dzQoZVswXSx0KTtpZighdC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IHV0KCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHIpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpyLnRleHR9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcjtpZih0LmRlbGltPT09Ii4iKXI9cnkoZSxbXSk7ZWxzZXtyPW51LnNpemVkRGVsaW0odC5kZWxpbSwxLGUsdC5tb2RlLFtdKTt2YXIgbj17ZGVsaW06dC5kZWxpbSxvcHRpb25zOmV9O3IuaXNNaWRkbGU9bn1yZXR1cm4gcn0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9dC5kZWxpbT09PSJcXHZlcnQifHx0LmRlbGltPT09InwiP0FvKCJ8IiwidGV4dCIpOkFvKHQuZGVsaW0sdC5tb2RlKSxuPW5ldyBzdC5NYXRoTm9kZSgibW8iLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxuLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksbi5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTt6Qz1vKCh0LGUpPT57dmFyIHI9SWUud3JhcEZyYWdtZW50KE9yKHQuYm9keSxlKSxlKSxuPXQubGFiZWwuc2xpY2UoMSksaT1lLnNpemVNdWx0aXBsaWVyLGEscz0wLGw9SnQuaXNDaGFyYWN0ZXJCb3godC5ib2R5KTtpZihuPT09InNvdXQiKWE9SWUubWFrZVNwYW4oWyJzdHJldGNoeSIsInNvdXQiXSksYS5oZWlnaHQ9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzL2kscz0tLjUqZS5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihuPT09InBoYXNlIil7dmFyIHU9UW4oe251bWJlcjouNix1bml0OiJwdCJ9LGUpLGg9UW4oe251bWJlcjouMzUsdW5pdDoiZXgifSxlKSxmPWUuaGF2aW5nQmFzZVNpemluZygpO2k9aS9mLnNpemVNdWx0aXBsaWVyO3ZhciBkPXIuaGVpZ2h0K3IuZGVwdGgrdStoO3Iuc3R5bGUucGFkZGluZ0xlZnQ9bXQoZC8yK3UpO3ZhciBwPU1hdGguZmxvb3IoMWUzKmQqaSksbT1ZYmUocCksZz1uZXcgZmwoW25ldyBKbCgicGhhc2UiLG0pXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6bXQocC8xZTMpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitwLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO2E9SWUubWFrZVN2Z1NwYW4oWyJoaWRlLXRhaWwiXSxbZ10sZSksYS5zdHlsZS5oZWlnaHQ9bXQoZCkscz1yLmRlcHRoK3UraH1lbHNley9jYW5jZWwvLnRlc3Qobik/bHx8ci5jbGFzc2VzLnB1c2goImNhbmNlbC1wYWQiKTpuPT09ImFuZ2wiP3IuY2xhc3Nlcy5wdXNoKCJhbmdscGFkIik6ci5jbGFzc2VzLnB1c2goImJveHBhZCIpO3ZhciB5PTAsdj0wLHg9MDsvYm94Ly50ZXN0KG4pPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxlLm1pblJ1bGVUaGlja25lc3MpLHk9ZS5mb250TWV0cmljcygpLmZib3hzZXArKG49PT0iY29sb3Jib3giPzA6eCksdj15KTpuPT09ImFuZ2wiPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxlLm1pblJ1bGVUaGlja25lc3MpLHk9NCp4LHY9TWF0aC5tYXgoMCwuMjUtci5kZXB0aCkpOih5PWw/LjI6MCx2PXkpLGE9YXUuZW5jbG9zZVNwYW4ocixuLHksdixlKSwvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3Qobik/KGEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIixhLnN0eWxlLmJvcmRlcldpZHRoPW10KHgpKTpuPT09ImFuZ2wiJiZ4IT09LjA0OSYmKGEuc3R5bGUuYm9yZGVyVG9wV2lkdGg9bXQoeCksYS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPW10KHgpKSxzPXIuZGVwdGgrdix0LmJhY2tncm91bmRDb2xvciYmKGEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yLHQuYm9yZGVyQ29sb3ImJihhLnN0eWxlLmJvcmRlckNvbG9yPXQuYm9yZGVyQ29sb3IpKX12YXIgYjtpZih0LmJhY2tncm91bmRDb2xvciliPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphLHNoaWZ0OnN9LHt0eXBlOiJlbGVtIixlbGVtOnIsc2hpZnQ6MH1dfSxlKTtlbHNle3ZhciB3PS9jYW5jZWx8cGhhc2UvLnRlc3Qobik/WyJzdmctYWxpZ24iXTpbXTtiPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyLHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOmEsc2hpZnQ6cyx3cmFwcGVyQ2xhc3Nlczp3fV19LGUpfXJldHVybi9jYW5jZWwvLnRlc3QobikmJihiLmhlaWdodD1yLmhlaWdodCxiLmRlcHRoPXIuZGVwdGgpLC9jYW5jZWwvLnRlc3QobikmJiFsP0llLm1ha2VTcGFuKFsibW9yZCIsImNhbmNlbC1sYXAiXSxbYl0sZSk6SWUubWFrZVNwYW4oWyJtb3JkIl0sW2JdLGUpfSwiaHRtbEJ1aWxkZXIkNyIpLEdDPW8oKHQsZSk9Pnt2YXIgcj0wLG49bmV3IHN0Lk1hdGhOb2RlKHQubGFiZWwuaW5kZXhPZigiY29sb3Jib3giKT4tMT8ibXBhZGRlZCI6Im1lbmNsb3NlIixbbW4odC5ib2R5LGUpXSk7c3dpdGNoKHQubGFiZWwpe2Nhc2UiXFxjYW5jZWwiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UiKTticmVhaztjYXNlIlxcYmNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXHBoYXNlIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJwaGFzb3JhbmdsZSIpO2JyZWFrO2Nhc2UiXFxzb3V0IjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJob3Jpem9udGFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGZib3giOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImJveCIpO2JyZWFrO2Nhc2UiXFxhbmdsIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJhY3R1YXJpYWwiKTticmVhaztjYXNlIlxcZmNvbG9yYm94IjpjYXNlIlxcY29sb3Jib3giOmlmKHI9ZS5mb250TWV0cmljcygpLmZib3hzZXAqZS5mb250TWV0cmljcygpLnB0UGVyRW0sbi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKyIrMipyKyJwdCIpLG4uc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIrIisyKnIrInB0Iiksbi5zZXRBdHRyaWJ1dGUoImxzcGFjZSIscisicHQiKSxuLnNldEF0dHJpYnV0ZSgidm9mZnNldCIscisicHQiKSx0LmxhYmVsPT09IlxcZmNvbG9yYm94Iil7dmFyIGk9TWF0aC5tYXgoZS5mb250TWV0cmljcygpLmZib3hydWxlLGUubWluUnVsZVRoaWNrbmVzcyk7bi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAiK2krImVtIHNvbGlkICIrU3RyaW5nKHQuYm9yZGVyQ29sb3IpKX1icmVhaztjYXNlIlxceGNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2UiKTticmVha31yZXR1cm4gdC5iYWNrZ3JvdW5kQ29sb3ImJm4uc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsdC5iYWNrZ3JvdW5kQ29sb3IpLG59LCJtYXRobWxCdWlsZGVyJDYiKTtDdCh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bixmdW5jTmFtZTppfT10LGE9eXIoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixzPWVbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOmEsYm9keTpzfX0saHRtbEJ1aWxkZXI6ekMsbWF0aG1sQnVpbGRlcjpHQ30pO0N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MyxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJjb2xvciIsInRleHQiXX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQsYT15cihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHM9eXIoZVsxXSwiY29sb3ItdG9rZW4iKS5jb2xvcixsPWVbMl07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOnMsYm9yZGVyQ29sb3I6YSxib2R5Omx9fSxodG1sQnVpbGRlcjp6QyxtYXRobWxCdWlsZGVyOkdDfSk7Q3Qoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmYm94Il0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnIubW9kZSxsYWJlbDoiXFxmYm94Iixib2R5OmVbMF19fX0pO0N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcY2FuY2VsIiwiXFxiY2FuY2VsIiwiXFx4Y2FuY2VsIiwiXFxzb3V0IiwiXFxwaGFzZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4sYm9keTppfX0saHRtbEJ1aWxkZXI6ekMsbWF0aG1sQnVpbGRlcjpHQ30pO0N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpyLm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTplWzBdfX19KTtkJD17fTtvKGVjLCJkZWZpbmVFbnZpcm9ubWVudCIpO3AkPXt9O28obGUsImRlZmluZU1hY3JvIik7byh4RywiZ2V0SExpbmVzIik7VDQ9byh0PT57dmFyIGU9dC5wYXJzZXIuc2V0dGluZ3M7aWYoIWUuZGlzcGxheU1vZGUpdGhyb3cgbmV3IHV0KCJ7Iit0LmVudk5hbWUrIn0gY2FuIGJlIHVzZWQgb25seSBpbiBkaXNwbGF5IG1vZGUuIil9LCJ2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCIpO28oJEMsImdldEF1dG9UYWciKTtvKHVoLCJwYXJzZUFycmF5Iik7byhWQywiZENlbGxTdHlsZSIpO3RjPW8oZnVuY3Rpb24oZSxyKXt2YXIgbixpLGE9ZS5ib2R5Lmxlbmd0aCxzPWUuaExpbmVzQmVmb3JlUm93LGw9MCx1PW5ldyBBcnJheShhKSxoPVtdLGY9TWF0aC5tYXgoci5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLHIubWluUnVsZVRoaWNrbmVzcyksZD0xL3IuZm9udE1ldHJpY3MoKS5wdFBlckVtLHA9NSpkO2lmKGUuY29sU2VwYXJhdGlvblR5cGUmJmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiKXt2YXIgbT1yLmhhdmluZ1N0eWxlKHJyLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7cD0uMjc3OCoobS9yLnNpemVNdWx0aXBsaWVyKX12YXIgZz1lLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9Rbih7bnVtYmVyOjMsdW5pdDoiZXgifSxyKToxMipkLHk9MypkLHY9ZS5hcnJheXN0cmV0Y2gqZyx4PS43KnYsYj0uMyp2LHc9MDtmdW5jdGlvbiBfKGtlKXtmb3IodmFyIEZlPTA7RmU8a2UubGVuZ3RoOysrRmUpRmU+MCYmKHcrPS4yNSksaC5wdXNoKHtwb3M6dyxpc0Rhc2hlZDprZVtGZV19KX1mb3IobyhfLCJzZXRITGluZVBvcyIpLF8oc1swXSksbj0wO248ZS5ib2R5Lmxlbmd0aDsrK24pe3ZhciBUPWUuYm9keVtuXSxFPXgsTD1iO2w8VC5sZW5ndGgmJihsPVQubGVuZ3RoKTt2YXIgQz1uZXcgQXJyYXkoVC5sZW5ndGgpO2ZvcihpPTA7aTxULmxlbmd0aDsrK2kpe3ZhciBBPU9yKFRbaV0scik7TDxBLmRlcHRoJiYoTD1BLmRlcHRoKSxFPEEuaGVpZ2h0JiYoRT1BLmhlaWdodCksQ1tpXT1BfXZhciBJPWUucm93R2Fwc1tuXSxEPTA7SSYmKEQ9UW4oSSxyKSxEPjAmJihEKz1iLEw8RCYmKEw9RCksRD0wKSksZS5hZGRKb3QmJihMKz15KSxDLmhlaWdodD1FLEMuZGVwdGg9TCx3Kz1FLEMucG9zPXcsdys9TCtELHVbbl09QyxfKHNbbisxXSl9dmFyIGs9dy8yK3IuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LFI9ZS5jb2xzfHxbXSxTPVtdLE8sTixQPVtdO2lmKGUudGFncyYmZS50YWdzLnNvbWUoa2U9PmtlKSlmb3Iobj0wO248YTsrK24pe3ZhciBGPXVbbl0sQj1GLnBvcy1rLCQ9ZS50YWdzW25dLHo9dm9pZCAwOyQ9PT0hMD96PUllLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHIpOiQ9PT0hMT96PUllLm1ha2VTcGFuKFtdLFtdLHIpOno9SWUubWFrZVNwYW4oW10sSWkoJCxyLCEwKSxyKSx6LmRlcHRoPUYuZGVwdGgsei5oZWlnaHQ9Ri5oZWlnaHQsUC5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOnosc2hpZnQ6Qn0pfWZvcihpPTAsTj0wO2k8bHx8TjxSLmxlbmd0aDsrK2ksKytOKXtmb3IodmFyIFc9UltOXXx8e30saj0hMDtXLnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKGp8fChPPUllLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksTy5zdHlsZS53aWR0aD1tdChyLmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksUy5wdXNoKE8pKSxXLnNlcGFyYXRvcj09PSJ8Inx8Vy5zZXBhcmF0b3I9PT0iOiIpe3ZhciBLPVcuc2VwYXJhdG9yPT09InwiPyJzb2xpZCI6ImRhc2hlZCIsaWU9SWUubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSxyKTtpZS5zdHlsZS5oZWlnaHQ9bXQodyksaWUuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1tdChmKSxpZS5zdHlsZS5ib3JkZXJSaWdodFN0eWxlPUssaWUuc3R5bGUubWFyZ2luPSIwICIrbXQoLWYvMik7dmFyIFE9dy1rO1EmJihpZS5zdHlsZS52ZXJ0aWNhbEFsaWduPW10KC1RKSksUy5wdXNoKGllKX1lbHNlIHRocm93IG5ldyB1dCgiSW52YWxpZCBzZXBhcmF0b3IgdHlwZTogIitXLnNlcGFyYXRvcik7TisrLFc9UltOXXx8e30saj0hMX1pZighKGk+PWwpKXt2YXIgZWU9dm9pZCAwOyhpPjB8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihlZT1KdC5kZWZsdChXLnByZWdhcCxwKSxlZSE9PTAmJihPPUllLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksTy5zdHlsZS53aWR0aD1tdChlZSksUy5wdXNoKE8pKSk7dmFyIEo9W107Zm9yKG49MDtuPGE7KytuKXt2YXIgSD11W25dLHE9SFtpXTtpZihxKXt2YXIgWj1ILnBvcy1rO3EuZGVwdGg9SC5kZXB0aCxxLmhlaWdodD1ILmhlaWdodCxKLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06cSxzaGlmdDpafSl9fUo9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46Sn0sciksSj1JZS5tYWtlU3BhbihbImNvbC1hbGlnbi0iKyhXLmFsaWdufHwiYyIpXSxbSl0pLFMucHVzaChKKSwoaTxsLTF8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihlZT1KdC5kZWZsdChXLnBvc3RnYXAscCksZWUhPT0wJiYoTz1JZS5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLE8uc3R5bGUud2lkdGg9bXQoZWUpLFMucHVzaChPKSkpfX1pZih1PUllLm1ha2VTcGFuKFsibXRhYmxlIl0sUyksaC5sZW5ndGg+MCl7Zm9yKHZhciBhZT1JZS5tYWtlTGluZVNwYW4oImhsaW5lIixyLGYpLHVlPUllLm1ha2VMaW5lU3BhbigiaGRhc2hsaW5lIixyLGYpLGNlPVt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9XTtoLmxlbmd0aD4wOyl7dmFyIHRlPWgucG9wKCksRGU9dGUucG9zLWs7dGUuaXNEYXNoZWQ/Y2UucHVzaCh7dHlwZToiZWxlbSIsZWxlbTp1ZSxzaGlmdDpEZX0pOmNlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06YWUsc2hpZnQ6RGV9KX11PUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmNlfSxyKX1pZihQLmxlbmd0aD09PTApcmV0dXJuIEllLm1ha2VTcGFuKFsibW9yZCJdLFt1XSxyKTt2YXIgb2U9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46UH0scik7cmV0dXJuIG9lPUllLm1ha2VTcGFuKFsidGFnIl0sW29lXSxyKSxJZS5tYWtlRnJhZ21lbnQoW3Usb2VdKX0sImh0bWxCdWlsZGVyIiksWjRlPXtjOiJjZW50ZXIgIixsOiJsZWZ0ICIscjoicmlnaHQgIn0scmM9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPW5ldyBzdC5NYXRoTm9kZSgibXRkIixbXSxbIm10ci1nbHVlIl0pLGE9bmV3IHN0Lk1hdGhOb2RlKCJtdGQiLFtdLFsibW1sLWVxbi1udW0iXSkscz0wO3M8ZS5ib2R5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1lLmJvZHlbc10sdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspdS5wdXNoKG5ldyBzdC5NYXRoTm9kZSgibXRkIixbbW4obFtoXSxyKV0pKTtlLnRhZ3MmJmUudGFnc1tzXSYmKHUudW5zaGlmdChpKSx1LnB1c2goaSksZS5sZXFubz91LnVuc2hpZnQoYSk6dS5wdXNoKGEpKSxuLnB1c2gobmV3IHN0Lk1hdGhOb2RlKCJtdHIiLHUpKX12YXIgZj1uZXcgc3QuTWF0aE5vZGUoIm10YWJsZSIsbiksZD1lLmFycmF5c3RyZXRjaD09PS41Py4xOi4xNitlLmFycmF5c3RyZXRjaC0xKyhlLmFkZEpvdD8uMDk6MCk7Zi5zZXRBdHRyaWJ1dGUoInJvd3NwYWNpbmciLG10KGQpKTt2YXIgcD0iIixtPSIiO2lmKGUuY29scyYmZS5jb2xzLmxlbmd0aD4wKXt2YXIgZz1lLmNvbHMseT0iIix2PSExLHg9MCxiPWcubGVuZ3RoO2dbMF0udHlwZT09PSJzZXBhcmF0b3IiJiYocCs9InRvcCAiLHg9MSksZ1tnLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihwKz0iYm90dG9tICIsYi09MSk7Zm9yKHZhciB3PXg7dzxiO3crKylnW3ddLnR5cGU9PT0iYWxpZ24iPyhtKz1aNGVbZ1t3XS5hbGlnbl0sdiYmKHkrPSJub25lICIpLHY9ITApOmdbd10udHlwZT09PSJzZXBhcmF0b3IiJiZ2JiYoeSs9Z1t3XS5zZXBhcmF0b3I9PT0ifCI/InNvbGlkICI6ImRhc2hlZCAiLHY9ITEpO2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5hbGlnbiIsbS50cmltKCkpLC9bc2RdLy50ZXN0KHkpJiZmLnNldEF0dHJpYnV0ZSgiY29sdW1ubGluZXMiLHkudHJpbSgpKX1pZihlLmNvbFNlcGFyYXRpb25UeXBlPT09ImFsaWduIil7Zm9yKHZhciBfPWUuY29sc3x8W10sVD0iIixFPTE7RTxfLmxlbmd0aDtFKyspVCs9RSUyPyIwZW0gIjoiMWVtICI7Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLFQudHJpbSgpKX1lbHNlIGUuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ25hdCJ8fGUuY29sU2VwYXJhdGlvblR5cGU9PT0iZ2F0aGVyIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjBlbSIpOmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiP2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC4yNzc4ZW0iKTplLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjAuNWVtIik6Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIxZW0iKTt2YXIgTD0iIixDPWUuaExpbmVzQmVmb3JlUm93O3ArPUNbMF0ubGVuZ3RoPjA/ImxlZnQgIjoiIixwKz1DW0MubGVuZ3RoLTFdLmxlbmd0aD4wPyJyaWdodCAiOiIiO2Zvcih2YXIgQT0xO0E8Qy5sZW5ndGgtMTtBKyspTCs9Q1tBXS5sZW5ndGg9PT0wPyJub25lICI6Q1tBXVswXT8iZGFzaGVkICI6InNvbGlkICI7cmV0dXJuL1tzZF0vLnRlc3QoTCkmJmYuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsTC50cmltKCkpLHAhPT0iIiYmKGY9bmV3IHN0Lk1hdGhOb2RlKCJtZW5jbG9zZSIsW2ZdKSxmLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLHAudHJpbSgpKSksZS5hcnJheXN0cmV0Y2gmJmUuYXJyYXlzdHJldGNoPDEmJihmPW5ldyBzdC5NYXRoTm9kZSgibXN0eWxlIixbZl0pLGYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSksZn0sIm1hdGhtbEJ1aWxkZXIiKSxtJD1vKGZ1bmN0aW9uKGUscil7ZS5lbnZOYW1lLmluZGV4T2YoImVkIik9PT0tMSYmVDQoZSk7dmFyIG49W10saT1lLmVudk5hbWUuaW5kZXhPZigiYXQiKT4tMT8iYWxpZ25hdCI6ImFsaWduIixhPWUuZW52TmFtZT09PSJzcGxpdCIscz11aChlLnBhcnNlcix7Y29sczpuLGFkZEpvdDohMCxhdXRvVGFnOmE/dm9pZCAwOiRDKGUuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsY29sU2VwYXJhdGlvblR5cGU6aSxtYXhOdW1Db2xzOmE/Mjp2b2lkIDAsbGVxbm86ZS5wYXJzZXIuc2V0dGluZ3MubGVxbm99LCJkaXNwbGF5IiksbCx1PTAsaD17dHlwZToib3JkZ3JvdXAiLG1vZGU6ZS5tb2RlLGJvZHk6W119O2lmKHJbMF0mJnJbMF0udHlwZT09PSJvcmRncm91cCIpe2Zvcih2YXIgZj0iIixkPTA7ZDxyWzBdLmJvZHkubGVuZ3RoO2QrKyl7dmFyIHA9eXIoclswXS5ib2R5W2RdLCJ0ZXh0b3JkIik7Zis9cC50ZXh0fWw9TnVtYmVyKGYpLHU9bCoyfXZhciBtPSF1O3MuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2Zvcih2YXIgYj0xO2I8eC5sZW5ndGg7Yis9Mil7dmFyIHc9eXIoeFtiXSwic3R5bGluZyIpLF89eXIody5ib2R5WzBdLCJvcmRncm91cCIpO18uYm9keS51bnNoaWZ0KGgpfWlmKG0pdTx4Lmxlbmd0aCYmKHU9eC5sZW5ndGgpO2Vsc2V7dmFyIFQ9eC5sZW5ndGgvMjtpZihsPFQpdGhyb3cgbmV3IHV0KCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIitsKyIsIGJ1dCBnb3QgIitUKSx4WzBdKX19KTtmb3IodmFyIGc9MDtnPHU7KytnKXt2YXIgeT0iciIsdj0wO2clMj09PTE/eT0ibCI6Zz4wJiZtJiYodj0xKSxuW2ddPXt0eXBlOiJhbGlnbiIsYWxpZ246eSxwcmVnYXA6dixwb3N0Z2FwOjB9fXJldHVybiBzLmNvbFNlcGFyYXRpb25UeXBlPW0/ImFsaWduIjoiYWxpZ25hdCIsc30sImFsaWduZWRIYW5kbGVyIik7ZWMoe3R5cGU6ImFycmF5IixuYW1lczpbImFycmF5IiwiZGFycmF5Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhciByPXg0KGVbMF0pLG49cj9bZVswXV06eXIoZVswXSwib3JkZ3JvdXAiKS5ib2R5LGk9bi5tYXAoZnVuY3Rpb24ocyl7dmFyIGw9UEMocyksdT1sLnRleHQ7aWYoImxjciIuaW5kZXhPZih1KSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246dX07aWYodT09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZih1PT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyB1dCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KSxhPXtjb2xzOmksaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOmkubGVuZ3RofTtyZXR1cm4gdWgodC5wYXJzZXIsYSxWQyh0LmVudk5hbWUpKX0saHRtbEJ1aWxkZXI6dGMsbWF0aG1sQnVpbGRlcjpyY30pO2VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJtYXRyaXgiLCJwbWF0cml4IiwiYm1hdHJpeCIsIkJtYXRyaXgiLCJ2bWF0cml4IiwiVm1hdHJpeCIsIm1hdHJpeCoiLCJwbWF0cml4KiIsImJtYXRyaXgqIiwiQm1hdHJpeCoiLCJ2bWF0cml4KiIsIlZtYXRyaXgqIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXIgZT17bWF0cml4Om51bGwscG1hdHJpeDpbIigiLCIpIl0sYm1hdHJpeDpbIlsiLCJdIl0sQm1hdHJpeDpbIlxceyIsIlxcfSJdLHZtYXRyaXg6WyJ8IiwifCJdLFZtYXRyaXg6WyJcXFZlcnQiLCJcXFZlcnQiXX1bdC5lbnZOYW1lLnJlcGxhY2UoIioiLCIiKV0scj0iYyIsbj17aHNraXBCZWZvcmVBbmRBZnRlcjohMSxjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX07aWYodC5lbnZOYW1lLmNoYXJBdCh0LmVudk5hbWUubGVuZ3RoLTEpPT09IioiKXt2YXIgaT10LnBhcnNlcjtpZihpLmNvbnN1bWVTcGFjZXMoKSxpLmZldGNoKCkudGV4dD09PSJbIil7aWYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCkscj1pLmZldGNoKCkudGV4dCwibGNyIi5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IHV0KCJFeHBlY3RlZCBsIG9yIGMgb3IgciIsaS5uZXh0VG9rZW4pO2kuY29uc3VtZSgpLGkuY29uc3VtZVNwYWNlcygpLGkuZXhwZWN0KCJdIiksaS5jb25zdW1lKCksbi5jb2xzPVt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX19dmFyIGE9dWgodC5wYXJzZXIsbixWQyh0LmVudk5hbWUpKSxzPU1hdGgubWF4KDAsLi4uYS5ib2R5Lm1hcChsPT5sLmxlbmd0aCkpO3JldHVybiBhLmNvbHM9bmV3IEFycmF5KHMpLmZpbGwoe3R5cGU6ImFsaWduIixhbGlnbjpyfSksZT97dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OlthXSxsZWZ0OmVbMF0scmlnaHQ6ZVsxXSxyaWdodENvbG9yOnZvaWQgMH06YX0saHRtbEJ1aWxkZXI6dGMsbWF0aG1sQnVpbGRlcjpyY30pO2VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzbWFsbG1hdHJpeCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFyIGU9e2FycmF5c3RyZXRjaDouNX0scj11aCh0LnBhcnNlcixlLCJzY3JpcHQiKTtyZXR1cm4gci5jb2xTZXBhcmF0aW9uVHlwZT0ic21hbGwiLHJ9LGh0bWxCdWlsZGVyOnRjLG1hdGhtbEJ1aWxkZXI6cmN9KTtlYyh7dHlwZToiYXJyYXkiLG5hbWVzOlsic3ViYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFyIHI9eDQoZVswXSksbj1yP1tlWzBdXTp5cihlWzBdLCJvcmRncm91cCIpLmJvZHksaT1uLm1hcChmdW5jdGlvbihzKXt2YXIgbD1QQyhzKSx1PWwudGV4dDtpZigibGMiLmluZGV4T2YodSkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOnV9O3Rocm93IG5ldyB1dCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KTtpZihpLmxlbmd0aD4xKXRocm93IG5ldyB1dCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgYT17Y29sczppLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZihhPXVoKHQucGFyc2VyLGEsInNjcmlwdCIpLGEuYm9keS5sZW5ndGg+MCYmYS5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyB1dCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gYX0saHRtbEJ1aWxkZXI6dGMsbWF0aG1sQnVpbGRlcjpyY30pO2VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhciBlPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHI9dWgodC5wYXJzZXIsZSxWQyh0LmVudk5hbWUpKTtyZXR1cm57dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OltyXSxsZWZ0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/Ii4iOiJcXHsiLHJpZ2h0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/IlxcfSI6Ii4iLHJpZ2h0Q29sb3I6dm9pZCAwfX0saHRtbEJ1aWxkZXI6dGMsbWF0aG1sQnVpbGRlcjpyY30pO2VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJhbGlnbiIsImFsaWduKiIsImFsaWduZWQiLCJzcGxpdCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6bSQsaHRtbEJ1aWxkZXI6dGMsbWF0aG1sQnVpbGRlcjpyY30pO2VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJnYXRoZXJlZCIsImdhdGhlciIsImdhdGhlcioiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe0p0LmNvbnRhaW5zKFsiZ2F0aGVyIiwiZ2F0aGVyKiJdLHQuZW52TmFtZSkmJlQ0KHQpO3ZhciBlPXtjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOiJjIn1dLGFkZEpvdDohMCxjb2xTZXBhcmF0aW9uVHlwZToiZ2F0aGVyIixhdXRvVGFnOiRDKHQuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiB1aCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOnRjLG1hdGhtbEJ1aWxkZXI6cmN9KTtlYyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjptJCxodG1sQnVpbGRlcjp0YyxtYXRobWxCdWlsZGVyOnJjfSk7ZWMoe3R5cGU6ImFycmF5IixuYW1lczpbImVxdWF0aW9uIiwiZXF1YXRpb24qIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXtUNCh0KTt2YXIgZT17YXV0b1RhZzokQyh0LmVudk5hbWUpLGVtcHR5U2luZ2xlUm93OiEwLHNpbmdsZVJvdzohMCxtYXhOdW1Db2xzOjEsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiB1aCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOnRjLG1hdGhtbEJ1aWxkZXI6cmN9KTtlYyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiQ0QiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3JldHVybiBUNCh0KSxGNGUodC5wYXJzZXIpfSxodG1sQnVpbGRlcjp0YyxtYXRobWxCdWlsZGVyOnJjfSk7bGUoIlxcbm9udW1iZXIiLCJcXGdkZWZcXEBlcW5zd3swfSIpO2xlKCJcXG5vdGFnIiwiXFxub251bWJlciIpO0N0KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcaGxpbmUiLCJcXGhkYXNobGluZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IHV0KHQuZnVuY05hbWUrIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudCIpfX0pO2JHPWQkO0N0KHt0eXBlOiJlbnZpcm9ubWVudCIsbmFtZXM6WyJcXGJlZ2luIiwiXFxlbmQiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO2lmKGkudHlwZSE9PSJvcmRncm91cCIpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWUiLGkpO2Zvcih2YXIgYT0iIixzPTA7czxpLmJvZHkubGVuZ3RoOysrcylhKz15cihpLmJvZHlbc10sInRleHRvcmQiKS50ZXh0O2lmKG49PT0iXFxiZWdpbiIpe2lmKCFiRy5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgdXQoIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrYSxpKTt2YXIgbD1iR1thXSx7YXJnczp1LG9wdEFyZ3M6aH09ci5wYXJzZUFyZ3VtZW50cygiXFxiZWdpbnsiK2ErIn0iLGwpLGY9e21vZGU6ci5tb2RlLGVudk5hbWU6YSxwYXJzZXI6cn0sZD1sLmhhbmRsZXIoZix1LGgpO3IuZXhwZWN0KCJcXGVuZCIsITEpO3ZhciBwPXIubmV4dFRva2VuLG09eXIoci5wYXJzZUZ1bmN0aW9uKCksImVudmlyb25tZW50Iik7aWYobS5uYW1lIT09YSl0aHJvdyBuZXcgdXQoIk1pc21hdGNoOiBcXGJlZ2lueyIrYSsifSBtYXRjaGVkIGJ5IFxcZW5keyIrbS5uYW1lKyJ9IixwKTtyZXR1cm4gZH1yZXR1cm57dHlwZToiZW52aXJvbm1lbnQiLG1vZGU6ci5tb2RlLG5hbWU6YSxuYW1lR3JvdXA6aX19fSk7ZyQ9bygodCxlKT0+e3ZhciByPXQuZm9udCxuPWUud2l0aEZvbnQocik7cmV0dXJuIE9yKHQuYm9keSxuKX0sImh0bWxCdWlsZGVyJDUiKSx5JD1vKCh0LGUpPT57dmFyIHI9dC5mb250LG49ZS53aXRoRm9udChyKTtyZXR1cm4gbW4odC5ib2R5LG4pfSwibWF0aG1sQnVpbGRlciQ0Iiksd0c9eyJcXEJiYiI6IlxcbWF0aGJiIiwiXFxib2xkIjoiXFxtYXRoYmYiLCJcXGZyYWsiOiJcXG1hdGhmcmFrIiwiXFxibSI6IlxcYm9sZHN5bWJvbCJ9O0N0KHt0eXBlOiJmb250IixuYW1lczpbIlxcbWF0aHJtIiwiXFxtYXRoaXQiLCJcXG1hdGhiZiIsIlxcbWF0aG5vcm1hbCIsIlxcbWF0aGJiIiwiXFxtYXRoY2FsIiwiXFxtYXRoZnJhayIsIlxcbWF0aHNjciIsIlxcbWF0aHNmIiwiXFxtYXRodHQiLCJcXEJiYiIsIlxcYm9sZCIsIlxcZnJhayJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9cDQoZVswXSksYT1uO3JldHVybiBhIGluIHdHJiYoYT13R1thXSkse3R5cGU6ImZvbnQiLG1vZGU6ci5tb2RlLGZvbnQ6YS5zbGljZSgxKSxib2R5Oml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOmckLG1hdGhtbEJ1aWxkZXI6eSR9KTtDdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcYm9sZHN5bWJvbCIsIlxcYm0iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdLGk9SnQuaXNDaGFyYWN0ZXJCb3gobik7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOmI0KG4pLGJvZHk6W3t0eXBlOiJmb250Iixtb2RlOnIubW9kZSxmb250OiJib2xkc3ltYm9sIixib2R5Om59XSxpc0NoYXJhY3RlckJveDppfX0sImhhbmRsZXIiKX0pO0N0KHt0eXBlOiJmb250IixuYW1lczpbIlxccm0iLCJcXHNmIiwiXFx0dCIsIlxcYmYiLCJcXGl0IiwiXFxjYWwiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLGJyZWFrT25Ub2tlblRleHQ6aX09dCx7bW9kZTphfT1yLHM9ci5wYXJzZUV4cHJlc3Npb24oITAsaSksbD0ibWF0aCIrbi5zbGljZSgxKTtyZXR1cm57dHlwZToiZm9udCIsbW9kZTphLGZvbnQ6bCxib2R5Ont0eXBlOiJvcmRncm91cCIsbW9kZTpyLm1vZGUsYm9keTpzfX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6ZyQsbWF0aG1sQnVpbGRlcjp5JH0pO3YkPW8oKHQsZSk9Pnt2YXIgcj1lO3JldHVybiB0PT09ImRpc3BsYXkiP3I9ci5pZD49cnIuU0NSSVBULmlkP3IudGV4dCgpOnJyLkRJU1BMQVk6dD09PSJ0ZXh0IiYmci5zaXplPT09cnIuRElTUExBWS5zaXplP3I9cnIuVEVYVDp0PT09InNjcmlwdCI/cj1yci5TQ1JJUFQ6dD09PSJzY3JpcHRzY3JpcHQiJiYocj1yci5TQ1JJUFRTQ1JJUFQpLHJ9LCJhZGp1c3RTdHlsZSIpLFVDPW8oKHQsZSk9Pnt2YXIgcj12JCh0LnNpemUsZS5zdHlsZSksbj1yLmZyYWNOdW0oKSxpPXIuZnJhY0RlbigpLGE7YT1lLmhhdmluZ1N0eWxlKG4pO3ZhciBzPU9yKHQubnVtZXIsYSxlKTtpZih0LmNvbnRpbnVlZCl7dmFyIGw9OC41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtLHU9My41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtO3MuaGVpZ2h0PXMuaGVpZ2h0PGw/bDpzLmhlaWdodCxzLmRlcHRoPXMuZGVwdGg8dT91OnMuZGVwdGh9YT1lLmhhdmluZ1N0eWxlKGkpO3ZhciBoPU9yKHQuZGVub20sYSxlKSxmLGQscDt0Lmhhc0JhckxpbmU/KHQuYmFyU2l6ZT8oZD1Rbih0LmJhclNpemUsZSksZj1JZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSxkKSk6Zj1JZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSksZD1mLmhlaWdodCxwPWYuaGVpZ2h0KTooZj1udWxsLGQ9MCxwPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyk7dmFyIG0sZyx5O3Iuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZXx8dC5zaXplPT09ImRpc3BsYXkiPyhtPWUuZm9udE1ldHJpY3MoKS5udW0xLGQ+MD9nPTMqcDpnPTcqcCx5PWUuZm9udE1ldHJpY3MoKS5kZW5vbTEpOihkPjA/KG09ZS5mb250TWV0cmljcygpLm51bTIsZz1wKToobT1lLmZvbnRNZXRyaWNzKCkubnVtMyxnPTMqcCkseT1lLmZvbnRNZXRyaWNzKCkuZGVub20yKTt2YXIgdjtpZihmKXt2YXIgYj1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDttLXMuZGVwdGgtKGIrLjUqZCk8ZyYmKG0rPWctKG0tcy5kZXB0aC0oYisuNSpkKSkpLGItLjUqZC0oaC5oZWlnaHQteSk8ZyYmKHkrPWctKGItLjUqZC0oaC5oZWlnaHQteSkpKTt2YXIgdz0tKGItLjUqZCk7dj1JZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aCxzaGlmdDp5fSx7dHlwZToiZWxlbSIsZWxlbTpmLHNoaWZ0Ond9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9ZWxzZXt2YXIgeD1tLXMuZGVwdGgtKGguaGVpZ2h0LXkpO3g8ZyYmKG0rPS41KihnLXgpLHkrPS41KihnLXgpKSx2PUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpoLHNoaWZ0Onl9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9YT1lLmhhdmluZ1N0eWxlKHIpLHYuaGVpZ2h0Kj1hLnNpemVNdWx0aXBsaWVyL2Uuc2l6ZU11bHRpcGxpZXIsdi5kZXB0aCo9YS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyO3ZhciBfO3Iuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZT9fPWUuZm9udE1ldHJpY3MoKS5kZWxpbTE6ci5zaXplPT09cnIuU0NSSVBUU0NSSVBULnNpemU/Xz1lLmhhdmluZ1N0eWxlKHJyLlNDUklQVCkuZm9udE1ldHJpY3MoKS5kZWxpbTI6Xz1lLmZvbnRNZXRyaWNzKCkuZGVsaW0yO3ZhciBULEU7cmV0dXJuIHQubGVmdERlbGltPT1udWxsP1Q9cnkoZSxbIm1vcGVuIl0pOlQ9bnUuY3VzdG9tU2l6ZWREZWxpbSh0LmxlZnREZWxpbSxfLCEwLGUuaGF2aW5nU3R5bGUociksdC5tb2RlLFsibW9wZW4iXSksdC5jb250aW51ZWQ/RT1JZS5tYWtlU3BhbihbXSk6dC5yaWdodERlbGltPT1udWxsP0U9cnkoZSxbIm1jbG9zZSJdKTpFPW51LmN1c3RvbVNpemVkRGVsaW0odC5yaWdodERlbGltLF8sITAsZS5oYXZpbmdTdHlsZShyKSx0Lm1vZGUsWyJtY2xvc2UiXSksSWUubWFrZVNwYW4oWyJtb3JkIl0uY29uY2F0KGEuc2l6aW5nQ2xhc3NlcyhlKSksW1QsSWUubWFrZVNwYW4oWyJtZnJhYyJdLFt2XSksRV0sZSl9LCJodG1sQnVpbGRlciQ0IiksSEM9bygodCxlKT0+e3ZhciByPW5ldyBzdC5NYXRoTm9kZSgibWZyYWMiLFttbih0Lm51bWVyLGUpLG1uKHQuZGVub20sZSldKTtpZighdC5oYXNCYXJMaW5lKXIuc2V0QXR0cmlidXRlKCJsaW5ldGhpY2tuZXNzIiwiMHB4Iik7ZWxzZSBpZih0LmJhclNpemUpe3ZhciBuPVFuKHQuYmFyU2l6ZSxlKTtyLnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsbXQobikpfXZhciBpPXYkKHQuc2l6ZSxlLnN0eWxlKTtpZihpLnNpemUhPT1lLnN0eWxlLnNpemUpe3I9bmV3IHN0Lk1hdGhOb2RlKCJtc3R5bGUiLFtyXSk7dmFyIGE9aS5zaXplPT09cnIuRElTUExBWS5zaXplPyJ0cnVlIjoiZmFsc2UiO3Iuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLGEpLHIuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjAiKX1pZih0LmxlZnREZWxpbSE9bnVsbHx8dC5yaWdodERlbGltIT1udWxsKXt2YXIgcz1bXTtpZih0LmxlZnREZWxpbSE9bnVsbCl7dmFyIGw9bmV3IHN0Lk1hdGhOb2RlKCJtbyIsW25ldyBzdC5UZXh0Tm9kZSh0LmxlZnREZWxpbS5yZXBsYWNlKCJcXCIsIiIpKV0pO2wuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxzLnB1c2gobCl9aWYocy5wdXNoKHIpLHQucmlnaHREZWxpbSE9bnVsbCl7dmFyIHU9bmV3IHN0Lk1hdGhOb2RlKCJtbyIsW25ldyBzdC5UZXh0Tm9kZSh0LnJpZ2h0RGVsaW0ucmVwbGFjZSgiXFwiLCIiKSldKTt1LnNldEF0dHJpYnV0ZSgiZmVuY2UiLCJ0cnVlIikscy5wdXNoKHUpfXJldHVybiBJQyhzKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMyIpO0N0KHt0eXBlOiJnZW5mcmFjIixuYW1lczpbIlxcZGZyYWMiLCJcXGZyYWMiLCJcXHRmcmFjIiwiXFxkYmlub20iLCJcXGJpbm9tIiwiXFx0Ymlub20iLCJcXFxcYXRvcGZyYWMiLCJcXFxcYnJhY2VmcmFjIiwiXFxcXGJyYWNrZnJhYyJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXSxhPWVbMV0scyxsPW51bGwsdT1udWxsLGg9ImF1dG8iO3N3aXRjaChuKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxmcmFjIjpjYXNlIlxcdGZyYWMiOnM9ITA7YnJlYWs7Y2FzZSJcXFxcYXRvcGZyYWMiOnM9ITE7YnJlYWs7Y2FzZSJcXGRiaW5vbSI6Y2FzZSJcXGJpbm9tIjpjYXNlIlxcdGJpbm9tIjpzPSExLGw9IigiLHU9IikiO2JyZWFrO2Nhc2UiXFxcXGJyYWNlZnJhYyI6cz0hMSxsPSJcXHsiLHU9IlxcfSI7YnJlYWs7Y2FzZSJcXFxcYnJhY2tmcmFjIjpzPSExLGw9IlsiLHU9Il0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZ2VuZnJhYyBjb21tYW5kIil9c3dpdGNoKG4pe2Nhc2UiXFxkZnJhYyI6Y2FzZSJcXGRiaW5vbSI6aD0iZGlzcGxheSI7YnJlYWs7Y2FzZSJcXHRmcmFjIjpjYXNlIlxcdGJpbm9tIjpoPSJ0ZXh0IjticmVha31yZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiExLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOnMsbGVmdERlbGltOmwscmlnaHREZWxpbTp1LHNpemU6aCxiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOlVDLG1hdGhtbEJ1aWxkZXI6SEN9KTtDdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGNmcmFjIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdLGE9ZVsxXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiEwLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOiEwLGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJkaXNwbGF5IixiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpfSk7Q3Qoe3R5cGU6ImluZml4IixuYW1lczpbIlxcb3ZlciIsIlxcY2hvb3NlIiwiXFxhdG9wIiwiXFxicmFjZSIsIlxcYnJhY2siXSxwcm9wczp7bnVtQXJnczowLGluZml4OiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyLHRva2VuOm59PXQsaTtzd2l0Y2gocil7Y2FzZSJcXG92ZXIiOmk9IlxcZnJhYyI7YnJlYWs7Y2FzZSJcXGNob29zZSI6aT0iXFxiaW5vbSI7YnJlYWs7Y2FzZSJcXGF0b3AiOmk9IlxcXFxhdG9wZnJhYyI7YnJlYWs7Y2FzZSJcXGJyYWNlIjppPSJcXFxcYnJhY2VmcmFjIjticmVhaztjYXNlIlxcYnJhY2siOmk9IlxcXFxicmFja2ZyYWMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kIil9cmV0dXJue3R5cGU6ImluZml4Iixtb2RlOmUubW9kZSxyZXBsYWNlV2l0aDppLHRva2VuOm59fX0pO1RHPVsiZGlzcGxheSIsInRleHQiLCJzY3JpcHQiLCJzY3JpcHRzY3JpcHQiXSxrRz1vKGZ1bmN0aW9uKGUpe3ZhciByPW51bGw7cmV0dXJuIGUubGVuZ3RoPjAmJihyPWUscj1yPT09Ii4iP251bGw6cikscn0sImRlbGltRnJvbVZhbHVlIik7Q3Qoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxnZW5mcmFjIl0scHJvcHM6e251bUFyZ3M6NixhbGxvd2VkSW5Bcmd1bWVudDohMCxhcmdUeXBlczpbIm1hdGgiLCJtYXRoIiwic2l6ZSIsInRleHQiLCJtYXRoIiwibWF0aCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49ZVs0XSxpPWVbNV0sYT1wNChlWzBdKSxzPWEudHlwZT09PSJhdG9tIiYmYS5mYW1pbHk9PT0ib3BlbiI/a0coYS50ZXh0KTpudWxsLGw9cDQoZVsxXSksdT1sLnR5cGU9PT0iYXRvbSImJmwuZmFtaWx5PT09ImNsb3NlIj9rRyhsLnRleHQpOm51bGwsaD15cihlWzJdLCJzaXplIiksZixkPW51bGw7aC5pc0JsYW5rP2Y9ITA6KGQ9aC52YWx1ZSxmPWQubnVtYmVyPjApO3ZhciBwPSJhdXRvIixtPWVbM107aWYobS50eXBlPT09Im9yZGdyb3VwIil7aWYobS5ib2R5Lmxlbmd0aD4wKXt2YXIgZz15cihtLmJvZHlbMF0sInRleHRvcmQiKTtwPVRHW051bWJlcihnLnRleHQpXX19ZWxzZSBtPXlyKG0sInRleHRvcmQiKSxwPVRHW051bWJlcihtLnRleHQpXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsbnVtZXI6bixkZW5vbTppLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOmYsYmFyU2l6ZTpkLGxlZnREZWxpbTpzLHJpZ2h0RGVsaW06dSxzaXplOnB9fSxodG1sQnVpbGRlcjpVQyxtYXRobWxCdWlsZGVyOkhDfSk7Q3Qoe3R5cGU6ImluZml4IixuYW1lczpbIlxcYWJvdmUiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSJdLGluZml4OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dDtyZXR1cm57dHlwZToiaW5maXgiLG1vZGU6ci5tb2RlLHJlcGxhY2VXaXRoOiJcXFxcYWJvdmVmcmFjIixzaXplOnlyKGVbMF0sInNpemUiKS52YWx1ZSx0b2tlbjppfX19KTtDdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXFxcYWJvdmVmcmFjIl0scHJvcHM6e251bUFyZ3M6MyxhcmdUeXBlczpbIm1hdGgiLCJzaXplIiwibWF0aCJdfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF0sYT1OYmUoeXIoZVsxXSwiaW5maXgiKS5zaXplKSxzPWVbMl0sbD1hLm51bWJlcj4wO3JldHVybnt0eXBlOiJnZW5mcmFjIixtb2RlOnIubW9kZSxudW1lcjppLGRlbm9tOnMsY29udGludWVkOiExLGhhc0JhckxpbmU6bCxiYXJTaXplOmEsbGVmdERlbGltOm51bGwscmlnaHREZWxpbTpudWxsLHNpemU6ImF1dG8ifX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpVQyxtYXRobWxCdWlsZGVyOkhDfSk7eCQ9bygodCxlKT0+e3ZhciByPWUuc3R5bGUsbixpO3QudHlwZT09PSJzdXBzdWIiPyhuPXQuc3VwP09yKHQuc3VwLGUuaGF2aW5nU3R5bGUoci5zdXAoKSksZSk6T3IodC5zdWIsZS5oYXZpbmdTdHlsZShyLnN1YigpKSxlKSxpPXlyKHQuYmFzZSwiaG9yaXpCcmFjZSIpKTppPXlyKHQsImhvcml6QnJhY2UiKTt2YXIgYT1PcihpLmJhc2UsZS5oYXZpbmdCYXNlU3R5bGUocnIuRElTUExBWSkpLHM9YXUuc3ZnU3BhbihpLGUpLGw7aWYoaS5pc092ZXI/KGw9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06c31dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpOihsPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTphLmRlcHRoKy4xK3MuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpzfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06YX1dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpLG4pe3ZhciB1PUllLm1ha2VTcGFuKFsibW9yZCIsaS5pc092ZXI/Im1vdmVyIjoibXVuZGVyIl0sW2xdLGUpO2kuaXNPdmVyP2w9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1fSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06bn1dfSxlKTpsPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp1LmRlcHRoKy4yK24uaGVpZ2h0K24uZGVwdGgsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOm59LHt0eXBlOiJrZXJuIixzaXplOi4yfSx7dHlwZToiZWxlbSIsZWxlbTp1fV19LGUpfXJldHVybiBJZS5tYWtlU3BhbihbIm1vcmQiLGkuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFtsXSxlKX0sImh0bWxCdWlsZGVyJDMiKSxKNGU9bygodCxlKT0+e3ZhciByPWF1Lm1hdGhNTG5vZGUodC5sYWJlbCk7cmV0dXJuIG5ldyBzdC5NYXRoTm9kZSh0LmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiLFttbih0LmJhc2UsZSkscl0pfSwibWF0aG1sQnVpbGRlciQyIik7Q3Qoe3R5cGU6Imhvcml6QnJhY2UiLG5hbWVzOlsiXFxvdmVyYnJhY2UiLCJcXHVuZGVyYnJhY2UiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQ7cmV0dXJue3R5cGU6Imhvcml6QnJhY2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4saXNPdmVyOi9eXFxvdmVyLy50ZXN0KG4pLGJhc2U6ZVswXX19LGh0bWxCdWlsZGVyOngkLG1hdGhtbEJ1aWxkZXI6SjRlfSk7Q3Qoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFxocmVmIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInVybCIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVsxXSxpPXlyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gci5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaHJlZiIsdXJsOml9KT97dHlwZToiaHJlZiIsbW9kZTpyLm1vZGUsaHJlZjppLGJvZHk6ZGkobil9OnIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoIlxcaHJlZiIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1JaSh0LmJvZHksZSwhMSk7cmV0dXJuIEllLm1ha2VBbmNob3IodC5ocmVmLFtdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWNoKHQuYm9keSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIHBzfHwocj1uZXcgcHMoIm1yb3ciLFtyXSkpLHIuc2V0QXR0cmlidXRlKCJocmVmIix0LmhyZWYpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtDdCh7dHlwZToiaHJlZiIsbmFtZXM6WyJcXHVybCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ1cmwiXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj15cihlWzBdLCJ1cmwiKS51cmw7aWYoIXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXHVybCIsdXJsOm59KSlyZXR1cm4gci5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFx1cmwiKTtmb3IodmFyIGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksaS5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OnN9KX12YXIgbD17dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsZm9udDoiXFx0ZXh0dHQiLGJvZHk6aX07cmV0dXJue3R5cGU6ImhyZWYiLG1vZGU6ci5tb2RlLGhyZWY6bixib2R5OmRpKGwpfX0sImhhbmRsZXIiKX0pO0N0KHt0eXBlOiJoYm94IixuYW1lczpbIlxcaGJveCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6Imhib3giLG1vZGU6ci5tb2RlLGJvZHk6ZGkoZVswXSl9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUlpKHQuYm9keSxlLCExKTtyZXR1cm4gSWUubWFrZUZyYWdtZW50KHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIG5ldyBzdC5NYXRoTm9kZSgibXJvdyIsZ3ModC5ib2R5LGUpKX19KTtDdCh7dHlwZToiaHRtbCIsbmFtZXM6WyJcXGh0bWxDbGFzcyIsIlxcaHRtbElkIiwiXFxodG1sU3R5bGUiLCJcXGh0bWxEYXRhIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInJhdyIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dCxhPXlyKGVbMF0sInJhdyIpLnN0cmluZyxzPWVbMV07ci5zZXR0aW5ncy5zdHJpY3QmJnIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJodG1sRXh0ZW5zaW9uIiwiSFRNTCBleHRlbnNpb24gaXMgZGlzYWJsZWQgb24gc3RyaWN0IG1vZGUiKTt2YXIgbCx1PXt9O3N3aXRjaChuKXtjYXNlIlxcaHRtbENsYXNzIjp1LmNsYXNzPWEsbD17Y29tbWFuZDoiXFxodG1sQ2xhc3MiLGNsYXNzOmF9O2JyZWFrO2Nhc2UiXFxodG1sSWQiOnUuaWQ9YSxsPXtjb21tYW5kOiJcXGh0bWxJZCIsaWQ6YX07YnJlYWs7Y2FzZSJcXGh0bWxTdHlsZSI6dS5zdHlsZT1hLGw9e2NvbW1hbmQ6IlxcaHRtbFN0eWxlIixzdHlsZTphfTticmVhaztjYXNlIlxcaHRtbERhdGEiOntmb3IodmFyIGg9YS5zcGxpdCgiLCIpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXS5zcGxpdCgiPSIpO2lmKGQubGVuZ3RoIT09Mil0aHJvdyBuZXcgdXQoIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXGh0bWxEYXRhIik7dVsiZGF0YS0iK2RbMF0udHJpbSgpXT1kWzFdLnRyaW0oKX1sPXtjb21tYW5kOiJcXGh0bWxEYXRhIixhdHRyaWJ1dGVzOnV9O2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kIil9cmV0dXJuIHIuc2V0dGluZ3MuaXNUcnVzdGVkKGwpP3t0eXBlOiJodG1sIixtb2RlOnIubW9kZSxhdHRyaWJ1dGVzOnUsYm9keTpkaShzKX06ci5mb3JtYXRVbnN1cHBvcnRlZENtZChuKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9SWkodC5ib2R5LGUsITEpLG49WyJlbmNsb3NpbmciXTt0LmF0dHJpYnV0ZXMuY2xhc3MmJm4ucHVzaCguLi50LmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9ccysvKSk7dmFyIGk9SWUubWFrZVNwYW4obixyLGUpO2Zvcih2YXIgYSBpbiB0LmF0dHJpYnV0ZXMpYSE9PSJjbGFzcyImJnQuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhKSYmaS5zZXRBdHRyaWJ1dGUoYSx0LmF0dHJpYnV0ZXNbYV0pO3JldHVybiBpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PmNoKHQuYm9keSxlKSwibWF0aG1sQnVpbGRlciIpfSk7Q3Qoe3R5cGU6Imh0bWxtYXRobWwiLG5hbWVzOlsiXFxodG1sQG1hdGhtbCJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJodG1sbWF0aG1sIixtb2RlOnIubW9kZSxodG1sOmRpKGVbMF0pLG1hdGhtbDpkaShlWzFdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUlpKHQuaHRtbCxlLCExKTtyZXR1cm4gSWUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PmNoKHQubWF0aG1sLGUpLCJtYXRobWxCdWlsZGVyIil9KTttQz1vKGZ1bmN0aW9uKGUpe2lmKC9eWy0rXT8gKihcZCsoXC5cZCopP3xcLlxkKykkLy50ZXN0KGUpKXJldHVybntudW1iZXI6K2UsdW5pdDoiYnAifTt2YXIgcj0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKGUpO2lmKCFyKXRocm93IG5ldyB1dCgiSW52YWxpZCBzaXplOiAnIitlKyInIGluIFxcaW5jbHVkZWdyYXBoaWNzIik7dmFyIG49e251bWJlcjorKHJbMV0rclsyXSksdW5pdDpyWzNdfTtpZighRkcobikpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIHVuaXQ6ICciK24udW5pdCsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKTtyZXR1cm4gbn0sInNpemVEYXRhIik7Q3Qoe3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbmFtZXM6WyJcXGluY2x1ZGVncmFwaGljcyJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjEsYXJnVHlwZXM6WyJyYXciLCJ1cmwiXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPXtudW1iZXI6MCx1bml0OiJlbSJ9LGE9e251bWJlcjouOSx1bml0OiJlbSJ9LHM9e251bWJlcjowLHVuaXQ6ImVtIn0sbD0iIjtpZihyWzBdKWZvcih2YXIgdT15cihyWzBdLCJyYXciKS5zdHJpbmcsaD11LnNwbGl0KCIsIiksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdLnNwbGl0KCI9Iik7aWYoZC5sZW5ndGg9PT0yKXt2YXIgcD1kWzFdLnRyaW0oKTtzd2l0Y2goZFswXS50cmltKCkpe2Nhc2UiYWx0IjpsPXA7YnJlYWs7Y2FzZSJ3aWR0aCI6aT1tQyhwKTticmVhaztjYXNlImhlaWdodCI6YT1tQyhwKTticmVhaztjYXNlInRvdGFsaGVpZ2h0IjpzPW1DKHApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHV0KCJJbnZhbGlkIGtleTogJyIrZFswXSsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKX19fXZhciBtPXlyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gbD09PSIiJiYobD1tLGw9bC5yZXBsYWNlKC9eLipbXFwvXS8sIiIpLGw9bC5zdWJzdHJpbmcoMCxsLmxhc3RJbmRleE9mKCIuIikpKSxuLnNldHRpbmdzLmlzVHJ1c3RlZCh7Y29tbWFuZDoiXFxpbmNsdWRlZ3JhcGhpY3MiLHVybDptfSk/e3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbW9kZTpuLm1vZGUsYWx0Omwsd2lkdGg6aSxoZWlnaHQ6YSx0b3RhbGhlaWdodDpzLHNyYzptfTpuLmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGluY2x1ZGVncmFwaGljcyIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1Rbih0LmhlaWdodCxlKSxuPTA7dC50b3RhbGhlaWdodC5udW1iZXI+MCYmKG49UW4odC50b3RhbGhlaWdodCxlKS1yKTt2YXIgaT0wO3Qud2lkdGgubnVtYmVyPjAmJihpPVFuKHQud2lkdGgsZSkpO3ZhciBhPXtoZWlnaHQ6bXQocituKX07aT4wJiYoYS53aWR0aD1tdChpKSksbj4wJiYoYS52ZXJ0aWNhbEFsaWduPW10KC1uKSk7dmFyIHM9bmV3IHdDKHQuc3JjLHQuYWx0LGEpO3JldHVybiBzLmhlaWdodD1yLHMuZGVwdGg9bixzfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1uZXcgc3QuTWF0aE5vZGUoIm1nbHlwaCIsW10pO3Iuc2V0QXR0cmlidXRlKCJhbHQiLHQuYWx0KTt2YXIgbj1Rbih0LmhlaWdodCxlKSxpPTA7aWYodC50b3RhbGhlaWdodC5udW1iZXI+MCYmKGk9UW4odC50b3RhbGhlaWdodCxlKS1uLHIuc2V0QXR0cmlidXRlKCJ2YWxpZ24iLG10KC1pKSkpLHIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLG10KG4raSkpLHQud2lkdGgubnVtYmVyPjApe3ZhciBhPVFuKHQud2lkdGgsZSk7ci5zZXRBdHRyaWJ1dGUoIndpZHRoIixtdChhKSl9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJzcmMiLHQuc3JjKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7Q3Qoe3R5cGU6Imtlcm4iLG5hbWVzOlsiXFxrZXJuIiwiXFxta2VybiIsIlxcaHNraXAiLCJcXG1za2lwIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxwcmltaXRpdmU6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9eXIoZVswXSwic2l6ZSIpO2lmKHIuc2V0dGluZ3Muc3RyaWN0KXt2YXIgYT1uWzFdPT09Im0iLHM9aS52YWx1ZS51bml0PT09Im11IjthPyhzfHxyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCAiKygibm90ICIraS52YWx1ZS51bml0KyIgdW5pdHMiKSksci5tb2RlIT09Im1hdGgiJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiB3b3JrcyBvbmx5IGluIG1hdGggbW9kZSIpKTpzJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHMiKX1yZXR1cm57dHlwZToia2VybiIsbW9kZTpyLm1vZGUsZGltZW5zaW9uOmkudmFsdWV9fSxodG1sQnVpbGRlcih0LGUpe3JldHVybiBJZS5tYWtlR2x1ZSh0LmRpbWVuc2lvbixlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPVFuKHQuZGltZW5zaW9uLGUpO3JldHVybiBuZXcgc3QuU3BhY2VOb2RlKHIpfX0pO0N0KHt0eXBlOiJsYXAiLG5hbWVzOlsiXFxtYXRobGxhcCIsIlxcbWF0aHJsYXAiLCJcXG1hdGhjbGFwIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImxhcCIsbW9kZTpyLm1vZGUsYWxpZ25tZW50Om4uc2xpY2UoNSksYm9keTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI7dC5hbGlnbm1lbnQ9PT0iY2xhcCI/KHI9SWUubWFrZVNwYW4oW10sW09yKHQuYm9keSxlKV0pLHI9SWUubWFrZVNwYW4oWyJpbm5lciJdLFtyXSxlKSk6cj1JZS5tYWtlU3BhbihbImlubmVyIl0sW09yKHQuYm9keSxlKV0pO3ZhciBuPUllLm1ha2VTcGFuKFsiZml4Il0sW10pLGk9SWUubWFrZVNwYW4oW3QuYWxpZ25tZW50XSxbcixuXSxlKSxhPUllLm1ha2VTcGFuKFsic3RydXQiXSk7cmV0dXJuIGEuc3R5bGUuaGVpZ2h0PW10KGkuaGVpZ2h0K2kuZGVwdGgpLGkuZGVwdGgmJihhLnN0eWxlLnZlcnRpY2FsQWxpZ249bXQoLWkuZGVwdGgpKSxpLmNoaWxkcmVuLnVuc2hpZnQoYSksaT1JZS5tYWtlU3BhbihbInRoaW5ib3giXSxbaV0sZSksSWUubWFrZVNwYW4oWyJtb3JkIiwidmJveCJdLFtpXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IHN0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbW4odC5ib2R5LGUpXSk7aWYodC5hbGlnbm1lbnQhPT0icmxhcCIpe3ZhciBuPXQuYWxpZ25tZW50PT09ImxsYXAiPyItMSI6Ii0wLjUiO3Iuc2V0QXR0cmlidXRlKCJsc3BhY2UiLG4rIndpZHRoIil9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtDdCh7dHlwZToic3R5bGluZyIsbmFtZXM6WyJcXCgiLCIkIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt2YXJ7ZnVuY05hbWU6cixwYXJzZXI6bn09dCxpPW4ubW9kZTtuLnN3aXRjaE1vZGUoIm1hdGgiKTt2YXIgYT1yPT09IlxcKCI/IlxcKSI6IiQiLHM9bi5wYXJzZUV4cHJlc3Npb24oITEsYSk7cmV0dXJuIG4uZXhwZWN0KGEpLG4uc3dpdGNoTW9kZShpKSx7dHlwZToic3R5bGluZyIsbW9kZTpuLm1vZGUsc3R5bGU6InRleHQiLGJvZHk6c319fSk7Q3Qoe3R5cGU6InRleHQiLG5hbWVzOlsiXFwpIiwiXFxdIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt0aHJvdyBuZXcgdXQoIk1pc21hdGNoZWQgIit0LmZ1bmNOYW1lKX19KTtFRz1vKCh0LGUpPT57c3dpdGNoKGUuc3R5bGUuc2l6ZSl7Y2FzZSByci5ESVNQTEFZLnNpemU6cmV0dXJuIHQuZGlzcGxheTtjYXNlIHJyLlRFWFQuc2l6ZTpyZXR1cm4gdC50ZXh0O2Nhc2UgcnIuU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0O2Nhc2UgcnIuU0NSSVBUU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0c2NyaXB0O2RlZmF1bHQ6cmV0dXJuIHQudGV4dH19LCJjaG9vc2VNYXRoU3R5bGUiKTtDdCh7dHlwZToibWF0aGNob2ljZSIsbmFtZXM6WyJcXG1hdGhjaG9pY2UiXSxwcm9wczp7bnVtQXJnczo0LHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJtYXRoY2hvaWNlIixtb2RlOnIubW9kZSxkaXNwbGF5OmRpKGVbMF0pLHRleHQ6ZGkoZVsxXSksc2NyaXB0OmRpKGVbMl0pLHNjcmlwdHNjcmlwdDpkaShlWzNdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUVHKHQsZSksbj1JaShyLGUsITEpO3JldHVybiBJZS5tYWtlRnJhZ21lbnQobil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUVHKHQsZSk7cmV0dXJuIGNoKHIsZSl9LCJtYXRobWxCdWlsZGVyIil9KTtiJD1vKCh0LGUscixuLGksYSxzKT0+e3Q9SWUubWFrZVNwYW4oW10sW3RdKTt2YXIgbD1yJiZKdC5pc0NoYXJhY3RlckJveChyKSx1LGg7aWYoZSl7dmFyIGY9T3IoZSxuLmhhdmluZ1N0eWxlKGkuc3VwKCkpLG4pO2g9e2VsZW06ZixrZXJuOk1hdGgubWF4KG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczLWYuZGVwdGgpfX1pZihyKXt2YXIgZD1PcihyLG4uaGF2aW5nU3R5bGUoaS5zdWIoKSksbik7dT17ZWxlbTpkLGtlcm46TWF0aC5tYXgobi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzIsbi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzQtZC5oZWlnaHQpfX12YXIgcDtpZihoJiZ1KXt2YXIgbT1uLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNSt1LmVsZW0uaGVpZ2h0K3UuZWxlbS5kZXB0aCt1Lmtlcm4rdC5kZXB0aCtzO3A9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImJvdHRvbSIscG9zaXRpb25EYXRhOm0sY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDptdCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH0se3R5cGU6Imtlcm4iLHNpemU6aC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTpoLmVsZW0sbWFyZ2luTGVmdDptdChhKX0se3R5cGU6Imtlcm4iLHNpemU6bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9XX0sbil9ZWxzZSBpZih1KXt2YXIgZz10LmhlaWdodC1zO3A9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOmcsY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDptdCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH1dfSxuKX1lbHNlIGlmKGgpe3ZhciB5PXQuZGVwdGgrcztwPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp5LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp0fSx7dHlwZToia2VybiIsc2l6ZTpoLmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOmguZWxlbSxtYXJnaW5MZWZ0Om10KGEpfSx7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX1dfSxuKX1lbHNlIHJldHVybiB0O3ZhciB2PVtwXTtpZih1JiZhIT09MCYmIWwpe3ZhciB4PUllLm1ha2VTcGFuKFsibXNwYWNlIl0sW10sbik7eC5zdHlsZS5tYXJnaW5SaWdodD1tdChhKSx2LnVuc2hpZnQoeCl9cmV0dXJuIEllLm1ha2VTcGFuKFsibW9wIiwib3AtbGltaXRzIl0sdixuKX0sImFzc2VtYmxlU3VwU3ViIiksdyQ9WyJcXHNtYWxsaW50Il0scHA9bygodCxlKT0+e3ZhciByLG4saT0hMSxhO3QudHlwZT09PSJzdXBzdWIiPyhyPXQuc3VwLG49dC5zdWIsYT15cih0LmJhc2UsIm9wIiksaT0hMCk6YT15cih0LCJvcCIpO3ZhciBzPWUuc3R5bGUsbD0hMTtzLnNpemU9PT1yci5ESVNQTEFZLnNpemUmJmEuc3ltYm9sJiYhSnQuY29udGFpbnModyQsYS5uYW1lKSYmKGw9ITApO3ZhciB1O2lmKGEuc3ltYm9sKXt2YXIgaD1sPyJTaXplMi1SZWd1bGFyIjoiU2l6ZTEtUmVndWxhciIsZj0iIjtpZigoYS5uYW1lPT09Ilxcb2lpbnQifHxhLm5hbWU9PT0iXFxvaWlpbnQiKSYmKGY9YS5uYW1lLnNsaWNlKDEpLGEubmFtZT1mPT09Im9paW50Ij8iXFxpaW50IjoiXFxpaWludCIpLHU9SWUubWFrZVN5bWJvbChhLm5hbWUsaCwibWF0aCIsZSxbIm1vcCIsIm9wLXN5bWJvbCIsbD8ibGFyZ2Utb3AiOiJzbWFsbC1vcCJdKSxmLmxlbmd0aD4wKXt2YXIgZD11Lml0YWxpYyxwPUllLnN0YXRpY1N2ZyhmKyJTaXplIisobD8iMiI6IjEiKSxlKTt1PUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOnAsc2hpZnQ6bD8uMDg6MH1dfSxlKSxhLm5hbWU9IlxcIitmLHUuY2xhc3Nlcy51bnNoaWZ0KCJtb3AiKSx1Lml0YWxpYz1kfX1lbHNlIGlmKGEuYm9keSl7dmFyIG09SWkoYS5ib2R5LGUsITApO20ubGVuZ3RoPT09MSYmbVswXWluc3RhbmNlb2YgbXM/KHU9bVswXSx1LmNsYXNzZXNbMF09Im1vcCIpOnU9SWUubWFrZVNwYW4oWyJtb3AiXSxtLGUpfWVsc2V7Zm9yKHZhciBnPVtdLHk9MTt5PGEubmFtZS5sZW5ndGg7eSsrKWcucHVzaChJZS5tYXRoc3ltKGEubmFtZVt5XSxhLm1vZGUsZSkpO3U9SWUubWFrZVNwYW4oWyJtb3AiXSxnLGUpfXZhciB2PTAseD0wO3JldHVybih1IGluc3RhbmNlb2YgbXN8fGEubmFtZT09PSJcXG9paW50Inx8YS5uYW1lPT09Ilxcb2lpaW50IikmJiFhLnN1cHByZXNzQmFzZVNoaWZ0JiYodj0odS5oZWlnaHQtdS5kZXB0aCkvMi1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCx4PXUuaXRhbGljKSxpP2IkKHUscixuLGUscyx4LHYpOih2JiYodS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHUuc3R5bGUudG9wPW10KHYpKSx1KX0sImh0bWxCdWlsZGVyJDIiKSxueT1vKCh0LGUpPT57dmFyIHI7aWYodC5zeW1ib2wpcj1uZXcgcHMoIm1vIixbQW8odC5uYW1lLHQubW9kZSldKSxKdC5jb250YWlucyh3JCx0Lm5hbWUpJiZyLnNldEF0dHJpYnV0ZSgibGFyZ2VvcCIsImZhbHNlIik7ZWxzZSBpZih0LmJvZHkpcj1uZXcgcHMoIm1vIixncyh0LmJvZHksZSkpO2Vsc2V7cj1uZXcgcHMoIm1pIixbbmV3IFdmKHQubmFtZS5zbGljZSgxKSldKTt2YXIgbj1uZXcgcHMoIm1vIixbQW8oIlx1MjA2MSIsInRleHQiKV0pO3QucGFyZW50SXNTdXBTdWI/cj1uZXcgcHMoIm1yb3ciLFtyLG5dKTpyPWpHKFtyLG5dKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMSIpLGUzZT17Ilx1MjIwRiI6IlxccHJvZCIsIlx1MjIxMCI6IlxcY29wcm9kIiwiXHUyMjExIjoiXFxzdW0iLCJcdTIyQzAiOiJcXGJpZ3dlZGdlIiwiXHUyMkMxIjoiXFxiaWd2ZWUiLCJcdTIyQzIiOiJcXGJpZ2NhcCIsIlx1MjJDMyI6IlxcYmlnY3VwIiwiXHUyQTAwIjoiXFxiaWdvZG90IiwiXHUyQTAxIjoiXFxiaWdvcGx1cyIsIlx1MkEwMiI6IlxcYmlnb3RpbWVzIiwiXHUyQTA0IjoiXFxiaWd1cGx1cyIsIlx1MkEwNiI6IlxcYmlnc3FjdXAifTtDdCh7dHlwZToib3AiLG5hbWVzOlsiXFxjb3Byb2QiLCJcXGJpZ3ZlZSIsIlxcYmlnd2VkZ2UiLCJcXGJpZ3VwbHVzIiwiXFxiaWdjYXAiLCJcXGJpZ2N1cCIsIlxcaW50b3AiLCJcXHByb2QiLCJcXHN1bSIsIlxcYmlnb3RpbWVzIiwiXFxiaWdvcGx1cyIsIlxcYmlnb2RvdCIsIlxcYmlnc3FjdXAiLCJcXHNtYWxsaW50IiwiXHUyMjBGIiwiXHUyMjEwIiwiXHUyMjExIiwiXHUyMkMwIiwiXHUyMkMxIiwiXHUyMkMyIiwiXHUyMkMzIiwiXHUyQTAwIiwiXHUyQTAxIiwiXHUyQTAyIiwiXHUyQTA0IiwiXHUyQTA2Il0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1uO3JldHVybiBpLmxlbmd0aD09PTEmJihpPWUzZVtpXSkse3R5cGU6Im9wIixtb2RlOnIubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6aX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6cHAsbWF0aG1sQnVpbGRlcjpueX0pO0N0KHt0eXBlOiJvcCIsbmFtZXM6WyJcXG1hdGhvcCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJvcCIsbW9kZTpyLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxib2R5OmRpKG4pfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpwcCxtYXRobWxCdWlsZGVyOm55fSk7dDNlPXsiXHUyMjJCIjoiXFxpbnQiLCJcdTIyMkMiOiJcXGlpbnQiLCJcdTIyMkQiOiJcXGlpaW50IiwiXHUyMjJFIjoiXFxvaW50IiwiXHUyMjJGIjoiXFxvaWludCIsIlx1MjIzMCI6Ilxcb2lpaW50In07Q3Qoe3R5cGU6Im9wIixuYW1lczpbIlxcYXJjc2luIiwiXFxhcmNjb3MiLCJcXGFyY3RhbiIsIlxcYXJjdGciLCJcXGFyY2N0ZyIsIlxcYXJnIiwiXFxjaCIsIlxcY29zIiwiXFxjb3NlYyIsIlxcY29zaCIsIlxcY290IiwiXFxjb3RnIiwiXFxjb3RoIiwiXFxjc2MiLCJcXGN0ZyIsIlxcY3RoIiwiXFxkZWciLCJcXGRpbSIsIlxcZXhwIiwiXFxob20iLCJcXGtlciIsIlxcbGciLCJcXGxuIiwiXFxsb2ciLCJcXHNlYyIsIlxcc2luIiwiXFxzaW5oIiwiXFxzaCIsIlxcdGFuIiwiXFx0YW5oIiwiXFx0ZyIsIlxcdGgiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O3JldHVybnt0eXBlOiJvcCIsbW9kZTplLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnJ9fSxodG1sQnVpbGRlcjpwcCxtYXRobWxCdWlsZGVyOm55fSk7Q3Qoe3R5cGU6Im9wIixuYW1lczpbIlxcZGV0IiwiXFxnY2QiLCJcXGluZiIsIlxcbGltIiwiXFxtYXgiLCJcXG1pbiIsIlxcUHIiLCJcXHN1cCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQ7cmV0dXJue3R5cGU6Im9wIixtb2RlOmUubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLG5hbWU6cn19LGh0bWxCdWlsZGVyOnBwLG1hdGhtbEJ1aWxkZXI6bnl9KTtDdCh7dHlwZToib3AiLG5hbWVzOlsiXFxpbnQiLCJcXGlpbnQiLCJcXGlpaW50IiwiXFxvaW50IiwiXFxvaWludCIsIlxcb2lpaW50IiwiXHUyMjJCIiwiXHUyMjJDIiwiXHUyMjJEIiwiXHUyMjJFIiwiXHUyMjJGIiwiXHUyMjMwIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPXI7cmV0dXJuIG4ubGVuZ3RoPT09MSYmKG49dDNlW25dKSx7dHlwZToib3AiLG1vZGU6ZS5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITAsbmFtZTpufX0saHRtbEJ1aWxkZXI6cHAsbWF0aG1sQnVpbGRlcjpueX0pO1QkPW8oKHQsZSk9Pnt2YXIgcixuLGk9ITEsYTt0LnR5cGU9PT0ic3Vwc3ViIj8ocj10LnN1cCxuPXQuc3ViLGE9eXIodC5iYXNlLCJvcGVyYXRvcm5hbWUiKSxpPSEwKTphPXlyKHQsIm9wZXJhdG9ybmFtZSIpO3ZhciBzO2lmKGEuYm9keS5sZW5ndGg+MCl7Zm9yKHZhciBsPWEuYm9keS5tYXAoZD0+e3ZhciBwPWQudGV4dDtyZXR1cm4gdHlwZW9mIHA9PSJzdHJpbmciP3t0eXBlOiJ0ZXh0b3JkIixtb2RlOmQubW9kZSx0ZXh0OnB9OmR9KSx1PUlpKGwsZS53aXRoRm9udCgibWF0aHJtIiksITApLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtmIGluc3RhbmNlb2YgbXMmJihmLnRleHQ9Zi50ZXh0LnJlcGxhY2UoL1x1MjIxMi8sIi0iKS5yZXBsYWNlKC9cdTIyMTcvLCIqIikpfXM9SWUubWFrZVNwYW4oWyJtb3AiXSx1LGUpfWVsc2Ugcz1JZS5tYWtlU3BhbihbIm1vcCJdLFtdLGUpO3JldHVybiBpP2IkKHMscixuLGUsZS5zdHlsZSwwLDApOnN9LCJodG1sQnVpbGRlciQxIikscjNlPW8oKHQsZSk9Pntmb3IodmFyIHI9Z3ModC5ib2R5LGUud2l0aEZvbnQoIm1hdGhybSIpKSxuPSEwLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtpZighKGEgaW5zdGFuY2VvZiBzdC5TcGFjZU5vZGUpKWlmKGEgaW5zdGFuY2VvZiBzdC5NYXRoTm9kZSlzd2l0Y2goYS50eXBlKXtjYXNlIm1pIjpjYXNlIm1uIjpjYXNlIm1zIjpjYXNlIm1zcGFjZSI6Y2FzZSJtdGV4dCI6YnJlYWs7Y2FzZSJtbyI6e3ZhciBzPWEuY2hpbGRyZW5bMF07YS5jaGlsZHJlbi5sZW5ndGg9PT0xJiZzIGluc3RhbmNlb2Ygc3QuVGV4dE5vZGU/cy50ZXh0PXMudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpOm49ITE7YnJlYWt9ZGVmYXVsdDpuPSExfWVsc2Ugbj0hMX1pZihuKXt2YXIgbD1yLm1hcChmPT5mLnRvVGV4dCgpKS5qb2luKCIiKTtyPVtuZXcgc3QuVGV4dE5vZGUobCldfXZhciB1PW5ldyBzdC5NYXRoTm9kZSgibWkiLHIpO3Uuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm5vcm1hbCIpO3ZhciBoPW5ldyBzdC5NYXRoTm9kZSgibW8iLFtBbygiXHUyMDYxIiwidGV4dCIpXSk7cmV0dXJuIHQucGFyZW50SXNTdXBTdWI/bmV3IHN0Lk1hdGhOb2RlKCJtcm93IixbdSxoXSk6c3QubmV3RG9jdW1lbnRGcmFnbWVudChbdSxoXSl9LCJtYXRobWxCdWlsZGVyIik7Q3Qoe3R5cGU6Im9wZXJhdG9ybmFtZSIsbmFtZXM6WyJcXG9wZXJhdG9ybmFtZUAiLCJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6Im9wZXJhdG9ybmFtZSIsbW9kZTpyLm1vZGUsYm9keTpkaShpKSxhbHdheXNIYW5kbGVTdXBTdWI6bj09PSJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6VCQsbWF0aG1sQnVpbGRlcjpyM2V9KTtsZSgiXFxvcGVyYXRvcm5hbWUiLCJcXEBpZnN0YXJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcXG9wZXJhdG9ybmFtZUAiKTtYZih7dHlwZToib3JkZ3JvdXAiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIHQuc2VtaXNpbXBsZT9JZS5tYWtlRnJhZ21lbnQoSWkodC5ib2R5LGUsITEpKTpJZS5tYWtlU3BhbihbIm1vcmQiXSxJaSh0LmJvZHksZSwhMCksZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gY2godC5ib2R5LGUsITApfX0pO0N0KHt0eXBlOiJvdmVybGluZSIsbmFtZXM6WyJcXG92ZXJsaW5lIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6Im92ZXJsaW5lIixtb2RlOnIubW9kZSxib2R5Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPU9yKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxuPUllLm1ha2VMaW5lU3Bhbigib3ZlcmxpbmUtbGluZSIsZSksaT1lLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsYT1JZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9LHt0eXBlOiJrZXJuIixzaXplOjMqaX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6aX1dfSxlKTtyZXR1cm4gSWUubWFrZVNwYW4oWyJtb3JkIiwib3ZlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgc3QuTWF0aE5vZGUoIm1vIixbbmV3IHN0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgc3QuTWF0aE5vZGUoIm1vdmVyIixbbW4odC5ib2R5LGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxufX0pO0N0KHt0eXBlOiJwaGFudG9tIixuYW1lczpbIlxccGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToicGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpkaShuKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUlpKHQuYm9keSxlLndpdGhQaGFudG9tKCksITEpO3JldHVybiBJZS5tYWtlRnJhZ21lbnQocil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWdzKHQuYm9keSxlKTtyZXR1cm4gbmV3IHN0Lk1hdGhOb2RlKCJtcGhhbnRvbSIscil9LCJtYXRobWxCdWlsZGVyIil9KTtDdCh7dHlwZToiaHBoYW50b20iLG5hbWVzOlsiXFxocGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToiaHBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6bn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUllLm1ha2VTcGFuKFtdLFtPcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pO2lmKHIuaGVpZ2h0PTAsci5kZXB0aD0wLHIuY2hpbGRyZW4pZm9yKHZhciBuPTA7bjxyLmNoaWxkcmVuLmxlbmd0aDtuKyspci5jaGlsZHJlbltuXS5oZWlnaHQ9MCxyLmNoaWxkcmVuW25dLmRlcHRoPTA7cmV0dXJuIHI9SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpLEllLm1ha2VTcGFuKFsibW9yZCJdLFtyXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9Z3MoZGkodC5ib2R5KSxlKSxuPW5ldyBzdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IHN0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMHB4IiksaS5zZXRBdHRyaWJ1dGUoImRlcHRoIiwiMHB4IiksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO0N0KHt0eXBlOiJ2cGhhbnRvbSIsbmFtZXM6WyJcXHZwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJ2cGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpufX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9SWUubWFrZVNwYW4oWyJpbm5lciJdLFtPcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pLG49SWUubWFrZVNwYW4oWyJmaXgiXSxbXSk7cmV0dXJuIEllLm1ha2VTcGFuKFsibW9yZCIsInJsYXAiXSxbcixuXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9Z3MoZGkodC5ib2R5KSxlKSxuPW5ldyBzdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IHN0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSxpfSwibWF0aG1sQnVpbGRlciIpfSk7Q3Qoe3R5cGU6InJhaXNlYm94IixuYW1lczpbIlxccmFpc2Vib3giXSxwcm9wczp7bnVtQXJnczoyLGFyZ1R5cGVzOlsic2l6ZSIsImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49eXIoZVswXSwic2l6ZSIpLnZhbHVlLGk9ZVsxXTtyZXR1cm57dHlwZToicmFpc2Vib3giLG1vZGU6ci5tb2RlLGR5Om4sYm9keTppfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Pcih0LmJvZHksZSksbj1Rbih0LmR5LGUpO3JldHVybiBJZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotbixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBzdC5NYXRoTm9kZSgibXBhZGRlZCIsW21uKHQuYm9keSxlKV0pLG49dC5keS5udW1iZXIrdC5keS51bml0O3JldHVybiByLnNldEF0dHJpYnV0ZSgidm9mZnNldCIsbikscn19KTtDdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxyZWxheCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmV9PXQ7cmV0dXJue3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7Q3Qoe3R5cGU6InJ1bGUiLG5hbWVzOlsiXFxydWxlIl0scHJvcHM6e251bUFyZ3M6MixudW1PcHRpb25hbEFyZ3M6MSxhcmdUeXBlczpbInNpemUiLCJzaXplIiwic2l6ZSJdfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9eXIoZVswXSwic2l6ZSIpLHM9eXIoZVsxXSwic2l6ZSIpO3JldHVybnt0eXBlOiJydWxlIixtb2RlOm4ubW9kZSxzaGlmdDppJiZ5cihpLCJzaXplIikudmFsdWUsd2lkdGg6YS52YWx1ZSxoZWlnaHQ6cy52YWx1ZX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9SWUubWFrZVNwYW4oWyJtb3JkIiwicnVsZSJdLFtdLGUpLG49UW4odC53aWR0aCxlKSxpPVFuKHQuaGVpZ2h0LGUpLGE9dC5zaGlmdD9Rbih0LnNoaWZ0LGUpOjA7cmV0dXJuIHIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1tdChuKSxyLnN0eWxlLmJvcmRlclRvcFdpZHRoPW10KGkpLHIuc3R5bGUuYm90dG9tPW10KGEpLHIud2lkdGg9bixyLmhlaWdodD1pK2Esci5kZXB0aD0tYSxyLm1heEZvbnRTaXplPWkqMS4xMjUqZS5zaXplTXVsdGlwbGllcixyfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9UW4odC53aWR0aCxlKSxuPVFuKHQuaGVpZ2h0LGUpLGk9dC5zaGlmdD9Rbih0LnNoaWZ0LGUpOjAsYT1lLmNvbG9yJiZlLmdldENvbG9yKCl8fCJibGFjayIscz1uZXcgc3QuTWF0aE5vZGUoIm1zcGFjZSIpO3Muc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsYSkscy5zZXRBdHRyaWJ1dGUoIndpZHRoIixtdChyKSkscy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbXQobikpO3ZhciBsPW5ldyBzdC5NYXRoTm9kZSgibXBhZGRlZCIsW3NdKTtyZXR1cm4gaT49MD9sLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixtdChpKSk6KGwuc2V0QXR0cmlidXRlKCJoZWlnaHQiLG10KGkpKSxsLnNldEF0dHJpYnV0ZSgiZGVwdGgiLG10KC1pKSkpLGwuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixtdChpKSksbH19KTtvKGskLCJzaXppbmdHcm91cCIpO1NHPVsiXFx0aW55IiwiXFxzaXhwdHNpemUiLCJcXHNjcmlwdHNpemUiLCJcXGZvb3Rub3Rlc2l6ZSIsIlxcc21hbGwiLCJcXG5vcm1hbHNpemUiLCJcXGxhcmdlIiwiXFxMYXJnZSIsIlxcTEFSR0UiLCJcXGh1Z2UiLCJcXEh1Z2UiXSxuM2U9bygodCxlKT0+e3ZhciByPWUuaGF2aW5nU2l6ZSh0LnNpemUpO3JldHVybiBrJCh0LmJvZHkscixlKX0sImh0bWxCdWlsZGVyIik7Q3Qoe3R5cGU6InNpemluZyIsbmFtZXM6U0cscHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7YnJlYWtPblRva2VuVGV4dDpyLGZ1bmNOYW1lOm4scGFyc2VyOml9PXQsYT1pLnBhcnNlRXhwcmVzc2lvbighMSxyKTtyZXR1cm57dHlwZToic2l6aW5nIixtb2RlOmkubW9kZSxzaXplOlNHLmluZGV4T2YobikrMSxib2R5OmF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm4zZSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1lLmhhdmluZ1NpemUodC5zaXplKSxuPWdzKHQuYm9keSxyKSxpPW5ldyBzdC5NYXRoTm9kZSgibXN0eWxlIixuKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoIm1hdGhzaXplIixtdChyLnNpemVNdWx0aXBsaWVyKSksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO0N0KHt0eXBlOiJzbWFzaCIsbmFtZXM6WyJcXHNtYXNoIl0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPSExLGE9ITEscz1yWzBdJiZ5cihyWzBdLCJvcmRncm91cCIpO2lmKHMpZm9yKHZhciBsPSIiLHU9MDt1PHMuYm9keS5sZW5ndGg7Kyt1KXt2YXIgaD1zLmJvZHlbdV07aWYobD1oLnRleHQsbD09PSJ0IilpPSEwO2Vsc2UgaWYobD09PSJiIilhPSEwO2Vsc2V7aT0hMSxhPSExO2JyZWFrfX1lbHNlIGk9ITAsYT0hMDt2YXIgZj1lWzBdO3JldHVybnt0eXBlOiJzbWFzaCIsbW9kZTpuLm1vZGUsYm9keTpmLHNtYXNoSGVpZ2h0Omksc21hc2hEZXB0aDphfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9SWUubWFrZVNwYW4oW10sW09yKHQuYm9keSxlKV0pO2lmKCF0LnNtYXNoSGVpZ2h0JiYhdC5zbWFzaERlcHRoKXJldHVybiByO2lmKHQuc21hc2hIZWlnaHQmJihyLmhlaWdodD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgbj0wO248ci5jaGlsZHJlbi5sZW5ndGg7bisrKXIuY2hpbGRyZW5bbl0uaGVpZ2h0PTA7aWYodC5zbWFzaERlcHRoJiYoci5kZXB0aD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgaT0wO2k8ci5jaGlsZHJlbi5sZW5ndGg7aSsrKXIuY2hpbGRyZW5baV0uZGVwdGg9MDt2YXIgYT1JZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSk7cmV0dXJuIEllLm1ha2VTcGFuKFsibW9yZCJdLFthXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IHN0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbW4odC5ib2R5LGUpXSk7cmV0dXJuIHQuc21hc2hIZWlnaHQmJnIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSx0LnNtYXNoRGVwdGgmJnIuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtDdCh7dHlwZToic3FydCIsbmFtZXM6WyJcXHNxcnQiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9ZVswXTtyZXR1cm57dHlwZToic3FydCIsbW9kZTpuLm1vZGUsYm9keTphLGluZGV4Oml9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPU9yKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTtyLmhlaWdodD09PTAmJihyLmhlaWdodD1lLmZvbnRNZXRyaWNzKCkueEhlaWdodCkscj1JZS53cmFwRnJhZ21lbnQocixlKTt2YXIgbj1lLmZvbnRNZXRyaWNzKCksaT1uLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9aTtlLnN0eWxlLmlkPHJyLlRFWFQuaWQmJihhPWUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTt2YXIgcz1pK2EvNCxsPXIuaGVpZ2h0K3IuZGVwdGgrcytpLHtzcGFuOnUscnVsZVdpZHRoOmgsYWR2YW5jZVdpZHRoOmZ9PW51LnNxcnRJbWFnZShsLGUpLGQ9dS5oZWlnaHQtaDtkPnIuaGVpZ2h0K3IuZGVwdGgrcyYmKHM9KHMrZC1yLmhlaWdodC1yLmRlcHRoKS8yKTt2YXIgcD11LmhlaWdodC1yLmhlaWdodC1zLWg7ci5zdHlsZS5wYWRkaW5nTGVmdD1tdChmKTt2YXIgbT1JZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnIsd3JhcHBlckNsYXNzZXM6WyJzdmctYWxpZ24iXX0se3R5cGU6Imtlcm4iLHNpemU6LShyLmhlaWdodCtwKX0se3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6aH1dfSxlKTtpZih0LmluZGV4KXt2YXIgZz1lLmhhdmluZ1N0eWxlKHJyLlNDUklQVFNDUklQVCkseT1Pcih0LmluZGV4LGcsZSksdj0uNioobS5oZWlnaHQtbS5kZXB0aCkseD1JZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotdixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06eX1dfSxlKSxiPUllLm1ha2VTcGFuKFsicm9vdCJdLFt4XSk7cmV0dXJuIEllLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbYixtXSxlKX1lbHNlIHJldHVybiBJZS5tYWtlU3BhbihbIm1vcmQiLCJzcXJ0Il0sW21dLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFye2JvZHk6cixpbmRleDpufT10O3JldHVybiBuP25ldyBzdC5NYXRoTm9kZSgibXJvb3QiLFttbihyLGUpLG1uKG4sZSldKTpuZXcgc3QuTWF0aE5vZGUoIm1zcXJ0IixbbW4ocixlKV0pfX0pO0NHPXtkaXNwbGF5OnJyLkRJU1BMQVksdGV4dDpyci5URVhULHNjcmlwdDpyci5TQ1JJUFQsc2NyaXB0c2NyaXB0OnJyLlNDUklQVFNDUklQVH07Q3Qoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFxkaXNwbGF5c3R5bGUiLCJcXHRleHRzdHlsZSIsIlxcc2NyaXB0c3R5bGUiLCJcXHNjcmlwdHNjcmlwdHN0eWxlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0LGUpe3ZhcnticmVha09uVG9rZW5UZXh0OnIsZnVuY05hbWU6bixwYXJzZXI6aX09dCxhPWkucGFyc2VFeHByZXNzaW9uKCEwLHIpLHM9bi5zbGljZSgxLG4ubGVuZ3RoLTUpO3JldHVybnt0eXBlOiJzdHlsaW5nIixtb2RlOmkubW9kZSxzdHlsZTpzLGJvZHk6YX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9Q0dbdC5zdHlsZV0sbj1lLmhhdmluZ1N0eWxlKHIpLndpdGhGb250KCIiKTtyZXR1cm4gayQodC5ib2R5LG4sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1DR1t0LnN0eWxlXSxuPWUuaGF2aW5nU3R5bGUociksaT1ncyh0LmJvZHksbiksYT1uZXcgc3QuTWF0aE5vZGUoIm1zdHlsZSIsaSkscz17ZGlzcGxheTpbIjAiLCJ0cnVlIl0sdGV4dDpbIjAiLCJmYWxzZSJdLHNjcmlwdDpbIjEiLCJmYWxzZSJdLHNjcmlwdHNjcmlwdDpbIjIiLCJmYWxzZSJdfSxsPXNbdC5zdHlsZV07cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsbFswXSksYS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsbFsxXSksYX19KTtpM2U9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuYmFzZTtpZihuKWlmKG4udHlwZT09PSJvcCIpe3ZhciBpPW4ubGltaXRzJiYoci5zdHlsZS5zaXplPT09cnIuRElTUExBWS5zaXplfHxuLmFsd2F5c0hhbmRsZVN1cFN1Yik7cmV0dXJuIGk/cHA6bnVsbH1lbHNlIGlmKG4udHlwZT09PSJvcGVyYXRvcm5hbWUiKXt2YXIgYT1uLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHIuc3R5bGUuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZXx8bi5saW1pdHMpO3JldHVybiBhP1QkOm51bGx9ZWxzZXtpZihuLnR5cGU9PT0iYWNjZW50IilyZXR1cm4gSnQuaXNDaGFyYWN0ZXJCb3gobi5iYXNlKT9CQzpudWxsO2lmKG4udHlwZT09PSJob3JpekJyYWNlIil7dmFyIHM9IWUuc3ViO3JldHVybiBzPT09bi5pc092ZXI/eCQ6bnVsbH1lbHNlIHJldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGx9LCJodG1sQnVpbGRlckRlbGVnYXRlIik7WGYoe3R5cGU6InN1cHN1YiIsaHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1pM2UodCxlKTtpZihyKXJldHVybiByKHQsZSk7dmFye2Jhc2U6bixzdXA6aSxzdWI6YX09dCxzPU9yKG4sZSksbCx1LGg9ZS5mb250TWV0cmljcygpLGY9MCxkPTAscD1uJiZKdC5pc0NoYXJhY3RlckJveChuKTtpZihpKXt2YXIgbT1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3VwKCkpO2w9T3IoaSxtLGUpLHB8fChmPXMuaGVpZ2h0LW0uZm9udE1ldHJpY3MoKS5zdXBEcm9wKm0uc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9aWYoYSl7dmFyIGc9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnN1YigpKTt1PU9yKGEsZyxlKSxwfHwoZD1zLmRlcHRoK2cuZm9udE1ldHJpY3MoKS5zdWJEcm9wKmcuc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9dmFyIHk7ZS5zdHlsZT09PXJyLkRJU1BMQVk/eT1oLnN1cDE6ZS5zdHlsZS5jcmFtcGVkP3k9aC5zdXAzOnk9aC5zdXAyO3ZhciB2PWUuc2l6ZU11bHRpcGxpZXIseD1tdCguNS9oLnB0UGVyRW0vdiksYj1udWxsO2lmKHUpe3ZhciB3PXQuYmFzZSYmdC5iYXNlLnR5cGU9PT0ib3AiJiZ0LmJhc2UubmFtZSYmKHQuYmFzZS5uYW1lPT09Ilxcb2lpbnQifHx0LmJhc2UubmFtZT09PSJcXG9paWludCIpOyhzIGluc3RhbmNlb2YgbXN8fHcpJiYoYj1tdCgtcy5pdGFsaWMpKX12YXIgXztpZihsJiZ1KXtmPU1hdGgubWF4KGYseSxsLmRlcHRoKy4yNSpoLnhIZWlnaHQpLGQ9TWF0aC5tYXgoZCxoLnN1YjIpO3ZhciBUPWguZGVmYXVsdFJ1bGVUaGlja25lc3MsRT00KlQ7aWYoZi1sLmRlcHRoLSh1LmhlaWdodC1kKTxFKXtkPUUtKGYtbC5kZXB0aCkrdS5oZWlnaHQ7dmFyIEw9LjgqaC54SGVpZ2h0LShmLWwuZGVwdGgpO0w+MCYmKGYrPUwsZC09TCl9dmFyIEM9W3t0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6ZCxtYXJnaW5SaWdodDp4LG1hcmdpbkxlZnQ6Yn0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDotZixtYXJnaW5SaWdodDp4fV07Xz1JZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpDfSxlKX1lbHNlIGlmKHUpe2Q9TWF0aC5tYXgoZCxoLnN1YjEsdS5oZWlnaHQtLjgqaC54SGVpZ2h0KTt2YXIgQT1be3R5cGU6ImVsZW0iLGVsZW06dSxtYXJnaW5MZWZ0OmIsbWFyZ2luUmlnaHQ6eH1dO189SWUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6ZCxjaGlsZHJlbjpBfSxlKX1lbHNlIGlmKGwpZj1NYXRoLm1heChmLHksbC5kZXB0aCsuMjUqaC54SGVpZ2h0KSxfPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1mLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpsLG1hcmdpblJpZ2h0Onh9XX0sZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInN1cHN1YiBtdXN0IGhhdmUgZWl0aGVyIHN1cCBvciBzdWIuIik7dmFyIEk9a0MocywicmlnaHQiKXx8Im1vcmQiO3JldHVybiBJZS5tYWtlU3BhbihbSV0sW3MsSWUubWFrZVNwYW4oWyJtc3Vwc3ViIl0sW19dKV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj0hMSxuLGk7dC5iYXNlJiZ0LmJhc2UudHlwZT09PSJob3JpekJyYWNlIiYmKGk9ISF0LnN1cCxpPT09dC5iYXNlLmlzT3ZlciYmKHI9ITAsbj10LmJhc2UuaXNPdmVyKSksdC5iYXNlJiYodC5iYXNlLnR5cGU9PT0ib3AifHx0LmJhc2UudHlwZT09PSJvcGVyYXRvcm5hbWUiKSYmKHQuYmFzZS5wYXJlbnRJc1N1cFN1Yj0hMCk7dmFyIGE9W21uKHQuYmFzZSxlKV07dC5zdWImJmEucHVzaChtbih0LnN1YixlKSksdC5zdXAmJmEucHVzaChtbih0LnN1cCxlKSk7dmFyIHM7aWYocilzPW4/Im1vdmVyIjoibXVuZGVyIjtlbHNlIGlmKHQuc3ViKWlmKHQuc3VwKXt2YXIgaD10LmJhc2U7aCYmaC50eXBlPT09Im9wIiYmaC5saW1pdHMmJmUuc3R5bGU9PT1yci5ESVNQTEFZfHxoJiZoLnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmaC5hbHdheXNIYW5kbGVTdXBTdWImJihlLnN0eWxlPT09cnIuRElTUExBWXx8aC5saW1pdHMpP3M9Im11bmRlcm92ZXIiOnM9Im1zdWJzdXAifWVsc2V7dmFyIHU9dC5iYXNlO3UmJnUudHlwZT09PSJvcCImJnUubGltaXRzJiYoZS5zdHlsZT09PXJyLkRJU1BMQVl8fHUuYWx3YXlzSGFuZGxlU3VwU3ViKXx8dSYmdS50eXBlPT09Im9wZXJhdG9ybmFtZSImJnUuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5saW1pdHN8fGUuc3R5bGU9PT1yci5ESVNQTEFZKT9zPSJtdW5kZXIiOnM9Im1zdWIifWVsc2V7dmFyIGw9dC5iYXNlO2wmJmwudHlwZT09PSJvcCImJmwubGltaXRzJiYoZS5zdHlsZT09PXJyLkRJU1BMQVl8fGwuYWx3YXlzSGFuZGxlU3VwU3ViKXx8bCYmbC50eXBlPT09Im9wZXJhdG9ybmFtZSImJmwuYWx3YXlzSGFuZGxlU3VwU3ViJiYobC5saW1pdHN8fGUuc3R5bGU9PT1yci5ESVNQTEFZKT9zPSJtb3ZlciI6cz0ibXN1cCJ9cmV0dXJuIG5ldyBzdC5NYXRoTm9kZShzLGEpfX0pO1hmKHt0eXBlOiJhdG9tIixodG1sQnVpbGRlcih0LGUpe3JldHVybiBJZS5tYXRoc3ltKHQudGV4dCx0Lm1vZGUsZSxbIm0iK3QuZmFtaWx5XSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgc3QuTWF0aE5vZGUoIm1vIixbQW8odC50ZXh0LHQubW9kZSldKTtpZih0LmZhbWlseT09PSJiaW4iKXt2YXIgbj1PQyh0LGUpO249PT0iYm9sZC1pdGFsaWMiJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pfWVsc2UgdC5mYW1pbHk9PT0icHVuY3QiP3Iuc2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiLCJ0cnVlIik6KHQuZmFtaWx5PT09Im9wZW4ifHx0LmZhbWlseT09PSJjbG9zZSIpJiZyLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJmYWxzZSIpO3JldHVybiByfX0pO0UkPXttaToiaXRhbGljIixtbjoibm9ybWFsIixtdGV4dDoibm9ybWFsIn07WGYoe3R5cGU6Im1hdGhvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEllLm1ha2VPcmQodCxlLCJtYXRob3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgc3QuTWF0aE5vZGUoIm1pIixbQW8odC50ZXh0LHQubW9kZSxlKV0pLG49T0ModCxlKXx8Iml0YWxpYyI7cmV0dXJuIG4hPT1FJFtyLnR5cGVdJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pLHJ9fSk7WGYoe3R5cGU6InRleHRvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEllLm1ha2VPcmQodCxlLCJ0ZXh0b3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1Bbyh0LnRleHQsdC5tb2RlLGUpLG49T0ModCxlKXx8Im5vcm1hbCIsaTtyZXR1cm4gdC5tb2RlPT09InRleHQiP2k9bmV3IHN0Lk1hdGhOb2RlKCJtdGV4dCIsW3JdKTovWzAtOV0vLnRlc3QodC50ZXh0KT9pPW5ldyBzdC5NYXRoTm9kZSgibW4iLFtyXSk6dC50ZXh0PT09IlxccHJpbWUiP2k9bmV3IHN0Lk1hdGhOb2RlKCJtbyIsW3JdKTppPW5ldyBzdC5NYXRoTm9kZSgibWkiLFtyXSksbiE9PUUkW2kudHlwZV0mJmkuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbiksaX19KTtnQz17Ilxcbm9icmVhayI6Im5vYnJlYWsiLCJcXGFsbG93YnJlYWsiOiJhbGxvd2JyZWFrIn0seUM9eyIgIjp7fSwiXFwgIjp7fSwifiI6e2NsYXNzTmFtZToibm9icmVhayJ9LCJcXHNwYWNlIjp7fSwiXFxub2JyZWFrc3BhY2UiOntjbGFzc05hbWU6Im5vYnJlYWsifX07WGYoe3R5cGU6InNwYWNpbmciLGh0bWxCdWlsZGVyKHQsZSl7aWYoeUMuaGFzT3duUHJvcGVydHkodC50ZXh0KSl7dmFyIHI9eUNbdC50ZXh0XS5jbGFzc05hbWV8fCIiO2lmKHQubW9kZT09PSJ0ZXh0Iil7dmFyIG49SWUubWFrZU9yZCh0LGUsInRleHRvcmQiKTtyZXR1cm4gbi5jbGFzc2VzLnB1c2gociksbn1lbHNlIHJldHVybiBJZS5tYWtlU3BhbihbIm1zcGFjZSIscl0sW0llLm1hdGhzeW0odC50ZXh0LHQubW9kZSxlKV0sZSl9ZWxzZXtpZihnQy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXJldHVybiBJZS5tYWtlU3BhbihbIm1zcGFjZSIsZ0NbdC50ZXh0XV0sW10sZSk7dGhyb3cgbmV3IHV0KCdVbmtub3duIHR5cGUgb2Ygc3BhY2UgIicrdC50ZXh0KyciJyl9fSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI7aWYoeUMuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyPW5ldyBzdC5NYXRoTm9kZSgibXRleHQiLFtuZXcgc3QuVGV4dE5vZGUoIlx4QTAiKV0pO2Vsc2V7aWYoZ0MuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyZXR1cm4gbmV3IHN0Lk1hdGhOb2RlKCJtc3BhY2UiKTt0aHJvdyBuZXcgdXQoJ1Vua25vd24gdHlwZSBvZiBzcGFjZSAiJyt0LnRleHQrJyInKX1yZXR1cm4gcn19KTtBRz1vKCgpPT57dmFyIHQ9bmV3IHN0Lk1hdGhOb2RlKCJtdGQiLFtdKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiNTAlIiksdH0sInBhZCIpO1hmKHt0eXBlOiJ0YWciLG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgc3QuTWF0aE5vZGUoIm10YWJsZSIsW25ldyBzdC5NYXRoTm9kZSgibXRyIixbQUcoKSxuZXcgc3QuTWF0aE5vZGUoIm10ZCIsW2NoKHQuYm9keSxlKV0pLEFHKCksbmV3IHN0Lk1hdGhOb2RlKCJtdGQiLFtjaCh0LnRhZyxlKV0pXSldKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHJ9fSk7X0c9eyJcXHRleHQiOnZvaWQgMCwiXFx0ZXh0cm0iOiJ0ZXh0cm0iLCJcXHRleHRzZiI6InRleHRzZiIsIlxcdGV4dHR0IjoidGV4dHR0IiwiXFx0ZXh0bm9ybWFsIjoidGV4dHJtIn0sTEc9eyJcXHRleHRiZiI6InRleHRiZiIsIlxcdGV4dG1kIjoidGV4dG1kIn0sYTNlPXsiXFx0ZXh0aXQiOiJ0ZXh0aXQiLCJcXHRleHR1cCI6InRleHR1cCJ9LERHPW8oKHQsZSk9Pnt2YXIgcj10LmZvbnQ7aWYocil7aWYoX0dbcl0pcmV0dXJuIGUud2l0aFRleHRGb250RmFtaWx5KF9HW3JdKTtpZihMR1tyXSlyZXR1cm4gZS53aXRoVGV4dEZvbnRXZWlnaHQoTEdbcl0pO2lmKHI9PT0iXFxlbXBoIilyZXR1cm4gZS5mb250U2hhcGU9PT0idGV4dGl0Ij9lLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0dXAiKTplLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0aXQiKX1lbHNlIHJldHVybiBlO3JldHVybiBlLndpdGhUZXh0Rm9udFNoYXBlKGEzZVtyXSl9LCJvcHRpb25zV2l0aEZvbnQiKTtDdCh7dHlwZToidGV4dCIsbmFtZXM6WyJcXHRleHQiLCJcXHRleHRybSIsIlxcdGV4dHNmIiwiXFx0ZXh0dHQiLCJcXHRleHRub3JtYWwiLCJcXHRleHRiZiIsIlxcdGV4dG1kIiwiXFx0ZXh0aXQiLCJcXHRleHR1cCIsIlxcZW1waCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluQXJndW1lbnQ6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsYm9keTpkaShpKSxmb250Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPURHKHQsZSksbj1JaSh0LmJvZHksciwhMCk7cmV0dXJuIEllLm1ha2VTcGFuKFsibW9yZCIsInRleHQiXSxuLHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9REcodCxlKTtyZXR1cm4gY2godC5ib2R5LHIpfX0pO0N0KHt0eXBlOiJ1bmRlcmxpbmUiLG5hbWVzOlsiXFx1bmRlcmxpbmUiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InVuZGVybGluZSIsbW9kZTpyLm1vZGUsYm9keTplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Pcih0LmJvZHksZSksbj1JZS5tYWtlTGluZVNwYW4oInVuZGVybGluZS1saW5lIixlKSxpPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxhPUllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpyLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6aX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6MyppfSx7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpO3JldHVybiBJZS5tYWtlU3BhbihbIm1vcmQiLCJ1bmRlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgc3QuTWF0aE5vZGUoIm1vIixbbmV3IHN0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgc3QuTWF0aE5vZGUoIm11bmRlciIsW21uKHQuYm9keSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxufX0pO0N0KHt0eXBlOiJ2Y2VudGVyIixuYW1lczpbIlxcdmNlbnRlciJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InZjZW50ZXIiLG1vZGU6ci5tb2RlLGJvZHk6ZVswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9T3IodC5ib2R5LGUpLG49ZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQsaT0uNSooci5oZWlnaHQtbi0oci5kZXB0aCtuKSk7cmV0dXJuIEllLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOmksY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gbmV3IHN0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbW4odC5ib2R5LGUpXSxbInZjZW50ZXIiXSl9fSk7Q3Qoe3R5cGU6InZlcmIiLG5hbWVzOlsiXFx2ZXJiIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSxyKXt0aHJvdyBuZXcgdXQoIlxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlciIpfSxodG1sQnVpbGRlcih0LGUpe2Zvcih2YXIgcj1ORyh0KSxuPVtdLGk9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnRleHQoKSksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksbi5wdXNoKEllLm1ha2VTeW1ib2wocywiVHlwZXdyaXRlci1SZWd1bGFyIix0Lm1vZGUsaSxbIm1vcmQiLCJ0ZXh0dHQiXSkpfXJldHVybiBJZS5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0uY29uY2F0KGkuc2l6aW5nQ2xhc3NlcyhlKSksSWUudHJ5Q29tYmluZUNoYXJzKG4pLGkpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IHN0LlRleHROb2RlKE5HKHQpKSxuPW5ldyBzdC5NYXRoTm9kZSgibXRleHQiLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm1vbm9zcGFjZSIpLG59fSk7Tkc9byh0PT50LmJvZHkucmVwbGFjZSgvIC9nLHQuc3Rhcj8iXHUyNDIzIjoiXHhBMCIpLCJtYWtlVmVyYiIpLG9oPXFHLFMkPWBbIFxyCgldYCxzM2U9IlxcXFxbYS16QS1aQF0rIixvM2U9IlxcXFxbXlx1RDgwMC1cdURGRkZdIixsM2U9IigiK3MzZSsiKSIrUyQrIioiLGMzZT1gXFxcXCgKfFsgXHIJXSsKPylbIFxyCV0qYCxfQz0iW1x1MDMwMC1cdTAzNkZdIix1M2U9bmV3IFJlZ0V4cChfQysiKyQiKSxoM2U9IigiK1MkKyIrKXwiKyhjM2UrInwiKSsiKFshLVxcW1xcXS1cdTIwMjdcdTIwMkEtXHVEN0ZGXHVGOTAwLVx1RkZGRl0iKyhfQysiKiIpKyJ8W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdIisoX0MrIioiKSsifFxcXFx2ZXJiXFwqKFteXSkuKj9cXDR8XFxcXHZlcmIoW14qYS16QS1aXSkuKj9cXDUiKygifCIrbDNlKSsoInwiK28zZSsiKSIpLG00PWNsYXNze3N0YXRpY3tvKHRoaXMsIkxleGVyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlucHV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLnRva2VuUmVnZXg9dm9pZCAwLHRoaXMuY2F0Y29kZXM9dm9pZCAwLHRoaXMuaW5wdXQ9ZSx0aGlzLnNldHRpbmdzPXIsdGhpcy50b2tlblJlZ2V4PW5ldyBSZWdFeHAoaDNlLCJnIiksdGhpcy5jYXRjb2Rlcz17IiUiOjE0LCJ+IjoxM319c2V0Q2F0Y29kZShlLHIpe3RoaXMuY2F0Y29kZXNbZV09cn1sZXgoKXt2YXIgZT10aGlzLmlucHV0LHI9dGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleDtpZihyPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBDbygiRU9GIixuZXcgWXModGhpcyxyLHIpKTt2YXIgbj10aGlzLnRva2VuUmVnZXguZXhlYyhlKTtpZihuPT09bnVsbHx8bi5pbmRleCE9PXIpdGhyb3cgbmV3IHV0KCJVbmV4cGVjdGVkIGNoYXJhY3RlcjogJyIrZVtyXSsiJyIsbmV3IENvKGVbcl0sbmV3IFlzKHRoaXMscixyKzEpKSk7dmFyIGk9bls2XXx8blszXXx8KG5bMl0/IlxcICI6IiAiKTtpZih0aGlzLmNhdGNvZGVzW2ldPT09MTQpe3ZhciBhPWUuaW5kZXhPZihgCmAsdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCk7cmV0dXJuIGE9PT0tMT8odGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleD1lLmxlbmd0aCx0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgiY29tbWVudEF0RW5kIiwiJSBjb21tZW50IGhhcyBubyB0ZXJtaW5hdGluZyBuZXdsaW5lOyBMYVRlWCB3b3VsZCBmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKSIpKTp0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4PWErMSx0aGlzLmxleCgpfXJldHVybiBuZXcgQ28oaSxuZXcgWXModGhpcyxyLHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpKX19LExDPWNsYXNze3N0YXRpY3tvKHRoaXMsIk5hbWVzcGFjZSIpfWNvbnN0cnVjdG9yKGUscil7ZT09PXZvaWQgMCYmKGU9e30pLHI9PT12b2lkIDAmJihyPXt9KSx0aGlzLmN1cnJlbnQ9dm9pZCAwLHRoaXMuYnVpbHRpbnM9dm9pZCAwLHRoaXMudW5kZWZTdGFjaz12b2lkIDAsdGhpcy5jdXJyZW50PXIsdGhpcy5idWlsdGlucz1lLHRoaXMudW5kZWZTdGFjaz1bXX1iZWdpbkdyb3VwKCl7dGhpcy51bmRlZlN0YWNrLnB1c2goe30pfWVuZEdyb3VwKCl7aWYodGhpcy51bmRlZlN0YWNrLmxlbmd0aD09PTApdGhyb3cgbmV3IHV0KCJVbmJhbGFuY2VkIG5hbWVzcGFjZSBkZXN0cnVjdGlvbjogYXR0ZW1wdCB0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIik7dmFyIGU9dGhpcy51bmRlZlN0YWNrLnBvcCgpO2Zvcih2YXIgciBpbiBlKWUuaGFzT3duUHJvcGVydHkocikmJihlW3JdPT1udWxsP2RlbGV0ZSB0aGlzLmN1cnJlbnRbcl06dGhpcy5jdXJyZW50W3JdPWVbcl0pfWVuZEdyb3Vwcygpe2Zvcig7dGhpcy51bmRlZlN0YWNrLmxlbmd0aD4wOyl0aGlzLmVuZEdyb3VwKCl9aGFzKGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSl8fHRoaXMuYnVpbHRpbnMuaGFzT3duUHJvcGVydHkoZSl9Z2V0KGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSk/dGhpcy5jdXJyZW50W2VdOnRoaXMuYnVpbHRpbnNbZV19c2V0KGUscixuKXtpZihuPT09dm9pZCAwJiYobj0hMSksbil7Zm9yKHZhciBpPTA7aTx0aGlzLnVuZGVmU3RhY2subGVuZ3RoO2krKylkZWxldGUgdGhpcy51bmRlZlN0YWNrW2ldW2VdO3RoaXMudW5kZWZTdGFjay5sZW5ndGg+MCYmKHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoLTFdW2VdPXIpfWVsc2V7dmFyIGE9dGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGgtMV07YSYmIWEuaGFzT3duUHJvcGVydHkoZSkmJihhW2VdPXRoaXMuY3VycmVudFtlXSl9cj09bnVsbD9kZWxldGUgdGhpcy5jdXJyZW50W2VdOnRoaXMuY3VycmVudFtlXT1yfX0sZjNlPXAkO2xlKCJcXG5vZXhwYW5kIixmdW5jdGlvbih0KXt2YXIgZT10LnBvcFRva2VuKCk7cmV0dXJuIHQuaXNFeHBhbmRhYmxlKGUudGV4dCkmJihlLm5vZXhwYW5kPSEwLGUudHJlYXRBc1JlbGF4PSEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7bGUoIlxcZXhwYW5kYWZ0ZXIiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9wVG9rZW4oKTtyZXR1cm4gdC5leHBhbmRPbmNlKCEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7bGUoIlxcQGZpcnN0b2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzBdLG51bUFyZ3M6MH19KTtsZSgiXFxAc2Vjb25kb2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzFdLG51bUFyZ3M6MH19KTtsZSgiXFxAaWZuZXh0Y2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygzKTt0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcj10LmZ1dHVyZSgpO3JldHVybiBlWzBdLmxlbmd0aD09PTEmJmVbMF1bMF0udGV4dD09PXIudGV4dD97dG9rZW5zOmVbMV0sbnVtQXJnczowfTp7dG9rZW5zOmVbMl0sbnVtQXJnczowfX0pO2xlKCJcXEBpZnN0YXIiLCJcXEBpZm5leHRjaGFyICp7XFxAZmlyc3RvZnR3b3sjMX19Iik7bGUoIlxcVGV4dE9yTWF0aCIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm4gdC5tb2RlPT09InRleHQiP3t0b2tlbnM6ZVswXSxudW1BcmdzOjB9Ont0b2tlbnM6ZVsxXSxudW1BcmdzOjB9fSk7Ukc9ezA6MCwxOjEsMjoyLDM6Myw0OjQsNTo1LDY6Niw3OjcsODo4LDk6OSxhOjEwLEE6MTAsYjoxMSxCOjExLGM6MTIsQzoxMixkOjEzLEQ6MTMsZToxNCxFOjE0LGY6MTUsRjoxNX07bGUoIlxcY2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5wb3BUb2tlbigpLHIsbj0iIjtpZihlLnRleHQ9PT0iJyIpcj04LGU9dC5wb3BUb2tlbigpO2Vsc2UgaWYoZS50ZXh0PT09JyInKXI9MTYsZT10LnBvcFRva2VuKCk7ZWxzZSBpZihlLnRleHQ9PT0iYCIpaWYoZT10LnBvcFRva2VuKCksZS50ZXh0WzBdPT09IlxcIiluPWUudGV4dC5jaGFyQ29kZUF0KDEpO2Vsc2V7aWYoZS50ZXh0PT09IkVPRiIpdGhyb3cgbmV3IHV0KCJcXGNoYXJgIG1pc3NpbmcgYXJndW1lbnQiKTtuPWUudGV4dC5jaGFyQ29kZUF0KDApfWVsc2Ugcj0xMDtpZihyKXtpZihuPVJHW2UudGV4dF0sbj09bnVsbHx8bj49cil0aHJvdyBuZXcgdXQoIkludmFsaWQgYmFzZS0iK3IrIiBkaWdpdCAiK2UudGV4dCk7Zm9yKHZhciBpOyhpPVJHW3QuZnV0dXJlKCkudGV4dF0pIT1udWxsJiZpPHI7KW4qPXIsbis9aSx0LnBvcFRva2VuKCl9cmV0dXJuIlxcQGNoYXJ7IituKyJ9In0pO1dDPW8oKHQsZSxyKT0+e3ZhciBuPXQuY29uc3VtZUFyZygpLnRva2VucztpZihuLmxlbmd0aCE9PTEpdGhyb3cgbmV3IHV0KCJcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZSIpO3ZhciBpPW5bMF0udGV4dCxhPXQuaXNEZWZpbmVkKGkpO2lmKGEmJiFlKXRocm93IG5ldyB1dCgiXFxuZXdjb21tYW5keyIraSsifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lICIrKGkrIjsgdXNlIFxccmVuZXdjb21tYW5kIikpO2lmKCFhJiYhcil0aHJvdyBuZXcgdXQoIlxccmVuZXdjb21tYW5keyIraSsifSB3aGVuIGNvbW1hbmQgIitpKyIgZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxuZXdjb21tYW5kIik7dmFyIHM9MDtpZihuPXQuY29uc3VtZUFyZygpLnRva2VucyxuLmxlbmd0aD09PTEmJm5bMF0udGV4dD09PSJbIil7Zm9yKHZhciBsPSIiLHU9dC5leHBhbmROZXh0VG9rZW4oKTt1LnRleHQhPT0iXSImJnUudGV4dCE9PSJFT0YiOylsKz11LnRleHQsdT10LmV4cGFuZE5leHRUb2tlbigpO2lmKCFsLm1hdGNoKC9eXHMqWzAtOV0rXHMqJC8pKXRocm93IG5ldyB1dCgiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzOiAiK2wpO3M9cGFyc2VJbnQobCksbj10LmNvbnN1bWVBcmcoKS50b2tlbnN9cmV0dXJuIHQubWFjcm9zLnNldChpLHt0b2tlbnM6bixudW1BcmdzOnN9KSwiIn0sIm5ld2NvbW1hbmQiKTtsZSgiXFxuZXdjb21tYW5kIix0PT5XQyh0LCExLCEwKSk7bGUoIlxccmVuZXdjb21tYW5kIix0PT5XQyh0LCEwLCExKSk7bGUoIlxccHJvdmlkZWNvbW1hbmQiLHQ9PldDKHQsITAsITApKTtsZSgiXFxtZXNzYWdlIix0PT57dmFyIGU9dC5jb25zdW1lQXJncygxKVswXTtyZXR1cm4gY29uc29sZS5sb2coZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7bGUoIlxcZXJybWVzc2FnZSIsdD0+e3ZhciBlPXQuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUuZXJyb3IoZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7bGUoIlxcc2hvdyIsdD0+e3ZhciBlPXQucG9wVG9rZW4oKSxyPWUudGV4dDtyZXR1cm4gY29uc29sZS5sb2coZSx0Lm1hY3Jvcy5nZXQociksb2hbcl0sRW4ubWF0aFtyXSxFbi50ZXh0W3JdKSwiIn0pO2xlKCJcXGJncm91cCIsInsiKTtsZSgiXFxlZ3JvdXAiLCJ9Iik7bGUoIn4iLCJcXG5vYnJlYWtzcGFjZSIpO2xlKCJcXGxxIiwiYCIpO2xlKCJcXHJxIiwiJyIpO2xlKCJcXGFhIiwiXFxyIGEiKTtsZSgiXFxBQSIsIlxcciBBIik7bGUoIlxcdGV4dGNvcHlyaWdodCIsIlxcaHRtbEBtYXRobWx7XFx0ZXh0Y2lyY2xlZHtjfX17XFxjaGFyYFx4QTl9Iik7bGUoIlxcY29weXJpZ2h0IiwiXFxUZXh0T3JNYXRoe1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0e1xcdGV4dGNvcHlyaWdodH19Iik7bGUoIlxcdGV4dHJlZ2lzdGVyZWQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7XFxzY3JpcHRzaXplIFJ9fXtcXGNoYXJgXHhBRX0iKTtsZSgiXHUyMTJDIiwiXFxtYXRoc2Nye0J9Iik7bGUoIlx1MjEzMCIsIlxcbWF0aHNjcntFfSIpO2xlKCJcdTIxMzEiLCJcXG1hdGhzY3J7Rn0iKTtsZSgiXHUyMTBCIiwiXFxtYXRoc2Nye0h9Iik7bGUoIlx1MjExMCIsIlxcbWF0aHNjcntJfSIpO2xlKCJcdTIxMTIiLCJcXG1hdGhzY3J7TH0iKTtsZSgiXHUyMTMzIiwiXFxtYXRoc2Nye019Iik7bGUoIlx1MjExQiIsIlxcbWF0aHNjcntSfSIpO2xlKCJcdTIxMkQiLCJcXG1hdGhmcmFre0N9Iik7bGUoIlx1MjEwQyIsIlxcbWF0aGZyYWt7SH0iKTtsZSgiXHUyMTI4IiwiXFxtYXRoZnJha3tafSIpO2xlKCJcXEJiYmsiLCJcXEJiYntrfSIpO2xlKCJceEI3IiwiXFxjZG90cCIpO2xlKCJcXGxsYXAiLCJcXG1hdGhsbGFwe1xcdGV4dHJteyMxfX0iKTtsZSgiXFxybGFwIiwiXFxtYXRocmxhcHtcXHRleHRybXsjMX19Iik7bGUoIlxcY2xhcCIsIlxcbWF0aGNsYXB7XFx0ZXh0cm17IzF9fSIpO2xlKCJcXG1hdGhzdHJ1dCIsIlxcdnBoYW50b217KH0iKTtsZSgiXFx1bmRlcmJhciIsIlxcdW5kZXJsaW5le1xcdGV4dHsjMX19Iik7bGUoIlxcbm90IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmxhcFxcQG5vdH19e1xcY2hhciIzMzh9Jyk7bGUoIlxcbmVxIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxub3Q9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNjB9fSIpO2xlKCJcXG5lIiwiXFxuZXEiKTtsZSgiXHUyMjYwIiwiXFxuZXEiKTtsZSgiXFxub3RpbiIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse3tcXGlufVxcbWF0aGxsYXB7L1xcbXNraXAxbXV9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyMDl9fSIpO2xlKCJcdTIyMDkiLCJcXG5vdGluIik7bGUoIlx1MjI1OCIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXGtlcm57LTFlbX1cXHJhaXNlYm94ezAuNGVtfXskXFxzY3JpcHRzaXplXFxmcm93biR9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNTh9fSIpO2xlKCJcdTIyNTkiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFx3ZWRnZX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjU4fX0iKTtsZSgiXHUyMjVBIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcdmVlfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUF9fSIpO2xlKCJcdTIyNUIiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFxzY3JpcHRzaXplXFxzdGFyfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUJ9fSIpO2xlKCJcdTIyNUQiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFxtYXRocm17ZGVmfX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVEfX0iKTtsZSgiXHUyMjVFIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte219fXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUV9fSIpO2xlKCJcdTIyNUYiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55P317PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVGfX0iKTtsZSgiXHUyN0MyIiwiXFxwZXJwIik7bGUoIlx1MjAzQyIsIlxcbWF0aGNsb3NleyFcXG1rZXJuLTAuOG11IX0iKTtsZSgiXHUyMjBDIiwiXFxub3RuaSIpO2xlKCJcdTIzMUMiLCJcXHVsY29ybmVyIik7bGUoIlx1MjMxRCIsIlxcdXJjb3JuZXIiKTtsZSgiXHUyMzFFIiwiXFxsbGNvcm5lciIpO2xlKCJcdTIzMUYiLCJcXGxyY29ybmVyIik7bGUoIlx4QTkiLCJcXGNvcHlyaWdodCIpO2xlKCJceEFFIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpO2xlKCJcdUZFMEYiLCJcXHRleHRyZWdpc3RlcmVkIik7bGUoIlxcdWxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxY319Jyk7bGUoIlxcdXJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZH19Jyk7bGUoIlxcbGxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZX19Jyk7bGUoIlxcbHJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZn19Jyk7bGUoIlxcdmRvdHMiLCJcXG1hdGhvcmR7XFx2YXJ2ZG90c1xccnVsZXswcHR9ezE1cHR9fSIpO2xlKCJcdTIyRUUiLCJcXHZkb3RzIik7bGUoIlxcdmFyR2FtbWEiLCJcXG1hdGhpdHtcXEdhbW1hfSIpO2xlKCJcXHZhckRlbHRhIiwiXFxtYXRoaXR7XFxEZWx0YX0iKTtsZSgiXFx2YXJUaGV0YSIsIlxcbWF0aGl0e1xcVGhldGF9Iik7bGUoIlxcdmFyTGFtYmRhIiwiXFxtYXRoaXR7XFxMYW1iZGF9Iik7bGUoIlxcdmFyWGkiLCJcXG1hdGhpdHtcXFhpfSIpO2xlKCJcXHZhclBpIiwiXFxtYXRoaXR7XFxQaX0iKTtsZSgiXFx2YXJTaWdtYSIsIlxcbWF0aGl0e1xcU2lnbWF9Iik7bGUoIlxcdmFyVXBzaWxvbiIsIlxcbWF0aGl0e1xcVXBzaWxvbn0iKTtsZSgiXFx2YXJQaGkiLCJcXG1hdGhpdHtcXFBoaX0iKTtsZSgiXFx2YXJQc2kiLCJcXG1hdGhpdHtcXFBzaX0iKTtsZSgiXFx2YXJPbWVnYSIsIlxcbWF0aGl0e1xcT21lZ2F9Iik7bGUoIlxcc3Vic3RhY2siLCJcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxlbmR7c3ViYXJyYXl9Iik7bGUoIlxcY29sb24iLCJcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbWF0aGNob2ljZXtcXG1rZXJuLTNtdX17XFxta2Vybi0zbXV9e317fXs6fVxcbXNraXA2bXVcXHJlbGF4Iik7bGUoIlxcYm94ZWQiLCJcXGZib3h7JFxcZGlzcGxheXN0eWxleyMxfSR9Iik7bGUoIlxcaWZmIiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7Iik7bGUoIlxcaW1wbGllcyIsIlxcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7Iik7bGUoIlxcaW1wbGllZGJ5IiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcOyIpO01HPXsiLCI6IlxcZG90c2MiLCJcXG5vdCI6IlxcZG90c2IiLCIrIjoiXFxkb3RzYiIsIj0iOiJcXGRvdHNiIiwiPCI6IlxcZG90c2IiLCI+IjoiXFxkb3RzYiIsIi0iOiJcXGRvdHNiIiwiKiI6IlxcZG90c2IiLCI6IjoiXFxkb3RzYiIsIlxcRE9UU0IiOiJcXGRvdHNiIiwiXFxjb3Byb2QiOiJcXGRvdHNiIiwiXFxiaWd2ZWUiOiJcXGRvdHNiIiwiXFxiaWd3ZWRnZSI6IlxcZG90c2IiLCJcXGJpZ3VwbHVzIjoiXFxkb3RzYiIsIlxcYmlnY2FwIjoiXFxkb3RzYiIsIlxcYmlnY3VwIjoiXFxkb3RzYiIsIlxccHJvZCI6IlxcZG90c2IiLCJcXHN1bSI6IlxcZG90c2IiLCJcXGJpZ290aW1lcyI6IlxcZG90c2IiLCJcXGJpZ29wbHVzIjoiXFxkb3RzYiIsIlxcYmlnb2RvdCI6IlxcZG90c2IiLCJcXGJpZ3NxY3VwIjoiXFxkb3RzYiIsIlxcQW5kIjoiXFxkb3RzYiIsIlxcbG9uZ3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXGxvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcTG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbWFwc3RvIjoiXFxkb3RzYiIsIlxcbG9uZ21hcHN0byI6IlxcZG90c2IiLCJcXGhvb2tyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcZG90ZXEiOiJcXGRvdHNiIiwiXFxtYXRoYmluIjoiXFxkb3RzYiIsIlxcbWF0aHJlbCI6IlxcZG90c2IiLCJcXHJlbGJhciI6IlxcZG90c2IiLCJcXFJlbGJhciI6IlxcZG90c2IiLCJcXHhyaWdodGFycm93IjoiXFxkb3RzYiIsIlxceGxlZnRhcnJvdyI6IlxcZG90c2IiLCJcXERPVFNJIjoiXFxkb3RzaSIsIlxcaW50IjoiXFxkb3RzaSIsIlxcb2ludCI6IlxcZG90c2kiLCJcXGlpbnQiOiJcXGRvdHNpIiwiXFxpaWludCI6IlxcZG90c2kiLCJcXGlpaWludCI6IlxcZG90c2kiLCJcXGlkb3RzaW50IjoiXFxkb3RzaSIsIlxcRE9UU1giOiJcXGRvdHN4In07bGUoIlxcZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9IlxcZG90c28iLHI9dC5leHBhbmRBZnRlckZ1dHVyZSgpLnRleHQ7cmV0dXJuIHIgaW4gTUc/ZT1NR1tyXTooci5zbGljZSgwLDQpPT09Ilxcbm90Inx8ciBpbiBFbi5tYXRoJiZKdC5jb250YWlucyhbImJpbiIsInJlbCJdLEVuLm1hdGhbcl0uZ3JvdXApKSYmKGU9IlxcZG90c2IiKSxlfSk7WUM9eyIpIjohMCwiXSI6ITAsIlxccmJyYWNrIjohMCwiXFx9IjohMCwiXFxyYnJhY2UiOiEwLCJcXHJhbmdsZSI6ITAsIlxccmNlaWwiOiEwLCJcXHJmbG9vciI6ITAsIlxccmdyb3VwIjohMCwiXFxybW91c3RhY2hlIjohMCwiXFxyaWdodCI6ITAsIlxcYmlnciI6ITAsIlxcYmlnZ3IiOiEwLCJcXEJpZ3IiOiEwLCJcXEJpZ2dyIjohMCwkOiEwLCI7IjohMCwiLiI6ITAsIiwiOiEwfTtsZSgiXFxkb3RzbyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFlDPyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtsZSgiXFxkb3RzYyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFlDJiZlIT09IiwiPyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtsZSgiXFxjZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFlDPyJcXEBjZG90c1xcLCI6IlxcQGNkb3RzIn0pO2xlKCJcXGRvdHNiIiwiXFxjZG90cyIpO2xlKCJcXGRvdHNtIiwiXFxjZG90cyIpO2xlKCJcXGRvdHNpIiwiXFwhXFxjZG90cyIpO2xlKCJcXGRvdHN4IiwiXFxsZG90c1xcLCIpO2xlKCJcXERPVFNJIiwiXFxyZWxheCIpO2xlKCJcXERPVFNCIiwiXFxyZWxheCIpO2xlKCJcXERPVFNYIiwiXFxyZWxheCIpO2xlKCJcXHRtc3BhY2UiLCJcXFRleHRPck1hdGh7XFxrZXJuIzEjM317XFxtc2tpcCMxIzJ9XFxyZWxheCIpO2xlKCJcXCwiLCJcXHRtc3BhY2UrezNtdX17LjE2NjdlbX0iKTtsZSgiXFx0aGluc3BhY2UiLCJcXCwiKTtsZSgiXFw+IiwiXFxtc2tpcHs0bXV9Iik7bGUoIlxcOiIsIlxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfSIpO2xlKCJcXG1lZHNwYWNlIiwiXFw6Iik7bGUoIlxcOyIsIlxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfSIpO2xlKCJcXHRoaWNrc3BhY2UiLCJcXDsiKTtsZSgiXFwhIiwiXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19Iik7bGUoIlxcbmVndGhpbnNwYWNlIiwiXFwhIik7bGUoIlxcbmVnbWVkc3BhY2UiLCJcXHRtc3BhY2UtezRtdX17LjIyMjJlbX0iKTtsZSgiXFxuZWd0aGlja3NwYWNlIiwiXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX0iKTtsZSgiXFxlbnNwYWNlIiwiXFxrZXJuLjVlbSAiKTtsZSgiXFxlbnNraXAiLCJcXGhza2lwLjVlbVxccmVsYXgiKTtsZSgiXFxxdWFkIiwiXFxoc2tpcDFlbVxccmVsYXgiKTtsZSgiXFxxcXVhZCIsIlxcaHNraXAyZW1cXHJlbGF4Iik7bGUoIlxcdGFnIiwiXFxAaWZzdGFyXFx0YWdAbGl0ZXJhbFxcdGFnQHBhcmVuIik7bGUoIlxcdGFnQHBhcmVuIiwiXFx0YWdAbGl0ZXJhbHsoeyMxfSl9Iik7bGUoIlxcdGFnQGxpdGVyYWwiLHQ9PntpZih0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpdGhyb3cgbmV3IHV0KCJNdWx0aXBsZSBcXHRhZyIpO3JldHVybiJcXGdkZWZcXGRmQHRhZ3tcXHRleHR7IzF9fSJ9KTtsZSgiXFxibW9kIiwiXFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9XFxtYXRoYmlue1xccm0gbW9kfVxcbWF0aGNob2ljZXtcXG1za2lwMW11fXtcXG1za2lwMW11fXtcXG1za2lwNW11fXtcXG1za2lwNW11fSIpO2xlKCJcXHBvZCIsIlxcYWxsb3dicmVha1xcbWF0aGNob2ljZXtcXG1rZXJuMThtdX17XFxta2VybjhtdX17XFxta2VybjhtdX17XFxta2VybjhtdX0oIzEpIik7bGUoIlxccG1vZCIsIlxccG9ke3tcXHJtIG1vZH1cXG1rZXJuNm11IzF9Iik7bGUoIlxcbW9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xcbWtlcm4xMm11fXtcXHJtIG1vZH1cXCxcXCwjMSIpO2xlKCJcXG5ld2xpbmUiLCJcXFxcXFxyZWxheCIpO2xlKCJcXFRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7VFxca2Vybi0uMTY2N2VtXFxyYWlzZWJveHstLjVleH17RX1cXGtlcm4tLjEyNWVtWH17VGVYfX0iKTtDJD1tdChabFsiTWFpbi1SZWd1bGFyIl1bODRdWzFdLS43KlpsWyJNYWluLVJlZ3VsYXIiXVs2NV1bMV0pO2xlKCJcXExhVGVYIiwiXFx0ZXh0cm17XFxodG1sQG1hdGhtbHsiKygiTFxca2Vybi0uMzZlbVxccmFpc2Vib3h7IitDJCsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtMYVRlWH19Iik7bGUoIlxcS2FUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJLXFxrZXJuLS4xN2VtXFxyYWlzZWJveHsiK0MkKyJ9e1xcc2NyaXB0c3R5bGUgQX0iKSsiXFxrZXJuLS4xNWVtXFxUZVh9e0thVGVYfX0iKTtsZSgiXFxoc3BhY2UiLCJcXEBpZnN0YXJcXEBoc3BhY2VyXFxAaHNwYWNlIik7bGUoIlxcQGhzcGFjZSIsIlxcaHNraXAgIzFcXHJlbGF4Iik7bGUoIlxcQGhzcGFjZXIiLCJcXHJ1bGV7MHB0fXswcHR9XFxoc2tpcCAjMVxccmVsYXgiKTtsZSgiXFxvcmRpbmFyeWNvbG9uIiwiOiIpO2xlKCJcXHZjZW50Y29sb24iLCJcXG1hdGhyZWx7XFxtYXRob3BcXG9yZGluYXJ5Y29sb259Iik7bGUoIlxcZGJsY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0uOW11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM3fX0nKTtsZSgiXFxjb2xvbmVxcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19fXtcXG1hdGhvcHtcXGNoYXIiMjI1NH19Jyk7bGUoIlxcQ29sb25lcXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjNkfX0nKTtsZSgiXFxjb2xvbmVxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyMTJ9fScpO2xlKCJcXENvbG9uZXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIxMn19Jyk7bGUoIlxcZXFxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyNTV9fScpO2xlKCJcXEVxcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259fXtcXG1hdGhvcHtcXGNoYXIiM2RcXGNoYXIiMjIzN319Jyk7bGUoIlxcZXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM5fX0nKTtsZSgiXFxFcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjEyXFxjaGFyIjIyMzd9fScpO2xlKCJcXGNvbG9uYXBwcm94IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjI0OH19Jyk7bGUoIlxcQ29sb25hcHByb3giLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjQ4fX0nKTtsZSgiXFxjb2xvbnNpbSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyM2N9fScpO2xlKCJcXENvbG9uc2ltIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIzY319Jyk7bGUoIlx1MjIzNyIsIlxcZGJsY29sb24iKTtsZSgiXHUyMjM5IiwiXFxlcWNvbG9uIik7bGUoIlx1MjI1NCIsIlxcY29sb25lcXEiKTtsZSgiXHUyMjU1IiwiXFxlcXFjb2xvbiIpO2xlKCJcdTJBNzQiLCJcXENvbG9uZXFxIik7bGUoIlxccmF0aW8iLCJcXHZjZW50Y29sb24iKTtsZSgiXFxjb2xvbmNvbG9uIiwiXFxkYmxjb2xvbiIpO2xlKCJcXGNvbG9uZXF1YWxzIiwiXFxjb2xvbmVxcSIpO2xlKCJcXGNvbG9uY29sb25lcXVhbHMiLCJcXENvbG9uZXFxIik7bGUoIlxcZXF1YWxzY29sb24iLCJcXGVxcWNvbG9uIik7bGUoIlxcZXF1YWxzY29sb25jb2xvbiIsIlxcRXFxY29sb24iKTtsZSgiXFxjb2xvbm1pbnVzIiwiXFxjb2xvbmVxIik7bGUoIlxcY29sb25jb2xvbm1pbnVzIiwiXFxDb2xvbmVxIik7bGUoIlxcbWludXNjb2xvbiIsIlxcZXFjb2xvbiIpO2xlKCJcXG1pbnVzY29sb25jb2xvbiIsIlxcRXFjb2xvbiIpO2xlKCJcXGNvbG9uY29sb25hcHByb3giLCJcXENvbG9uYXBwcm94Iik7bGUoIlxcY29sb25jb2xvbnNpbSIsIlxcQ29sb25zaW0iKTtsZSgiXFxzaW1jb2xvbiIsIlxcbWF0aHJlbHtcXHNpbVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtsZSgiXFxzaW1jb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcc2ltXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtsZSgiXFxhcHByb3hjb2xvbiIsIlxcbWF0aHJlbHtcXGFwcHJveFxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtsZSgiXFxhcHByb3hjb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcYXBwcm94XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtsZSgiXFxub3RuaSIsIlxcaHRtbEBtYXRobWx7XFxub3RcXG5pfXtcXG1hdGhyZWx7XFxjaGFyYFx1MjIwQ319Iik7bGUoIlxcbGltc3VwIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxzdXB9Iik7bGUoIlxcbGltaW5mIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxpbmZ9Iik7bGUoIlxcaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntpbmpcXCxsaW19Iik7bGUoIlxccHJvamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7cHJvalxcLGxpbX0iKTtsZSgiXFx2YXJsaW1zdXAiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcb3ZlcmxpbmV7bGltfX0iKTtsZSgiXFx2YXJsaW1pbmYiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsaW5le2xpbX19Iik7bGUoIlxcdmFyaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVycmlnaHRhcnJvd3tsaW19fSIpO2xlKCJcXHZhcnByb2psaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsZWZ0YXJyb3d7bGltfX0iKTtsZSgiXFxndmVydG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQGd2ZXJ0bmVxcX17XHUyMjY5fSIpO2xlKCJcXGx2ZXJ0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbHZlcnRuZXFxfXtcdTIyNjh9Iik7bGUoIlxcbmdlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5nZXFxfXtcdTIyNzF9Iik7bGUoIlxcbmdlcXNsYW50IiwiXFxodG1sQG1hdGhtbHtcXEBuZ2Vxc2xhbnR9e1x1MjI3MX0iKTtsZSgiXFxubGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbmxlcXF9e1x1MjI3MH0iKTtsZSgiXFxubGVxc2xhbnQiLCJcXGh0bWxAbWF0aG1se1xcQG5sZXFzbGFudH17XHUyMjcwfSIpO2xlKCJcXG5zaG9ydG1pZCIsIlxcaHRtbEBtYXRobWx7XFxAbnNob3J0bWlkfXtcdTIyMjR9Iik7bGUoIlxcbnNob3J0cGFyYWxsZWwiLCJcXGh0bWxAbWF0aG1se1xcQG5zaG9ydHBhcmFsbGVsfXtcdTIyMjZ9Iik7bGUoIlxcbnN1YnNldGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbnN1YnNldGVxcX17XHUyMjg4fSIpO2xlKCJcXG5zdXBzZXRlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5zdXBzZXRlcXF9e1x1MjI4OX0iKTtsZSgiXFx2YXJzdWJzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcX17XHUyMjhBfSIpO2xlKCJcXHZhcnN1YnNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcXF9e1x1MkFDQn0iKTtsZSgiXFx2YXJzdXBzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcX17XHUyMjhCfSIpO2xlKCJcXHZhcnN1cHNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcXF9e1x1MkFDQ30iKTtsZSgiXFxpbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAaW1hdGh9e1x1MDEzMX0iKTtsZSgiXFxqbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAam1hdGh9e1x1MDIzN30iKTtsZSgiXFxsbGJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aG9wZW57W1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJgXHUyN0U2fX0iKTtsZSgiXFxycmJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI3RTd9fSIpO2xlKCJcdTI3RTYiLCJcXGxsYnJhY2tldCIpO2xlKCJcdTI3RTciLCJcXHJyYnJhY2tldCIpO2xlKCJcXGxCcmFjZSIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntcXHtcXG1rZXJuLTMuMm11W319e1xcbWF0aG9wZW57XFxjaGFyYFx1Mjk4M319Iik7bGUoIlxcckJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhjbG9zZXtdXFxta2Vybi0zLjJtdVxcfX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI5ODR9fSIpO2xlKCJcdTI5ODMiLCJcXGxCcmFjZSIpO2xlKCJcdTI5ODQiLCJcXHJCcmFjZSIpO2xlKCJcXG1pbnVzbyIsIlxcbWF0aGJpbntcXGh0bWxAbWF0aG1se3tcXG1hdGhybGFwe1xcbWF0aGNob2ljZXtcXGtlcm57MC4xNDVlbX19e1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTAxNWVtfX17XFxrZXJuezAuMDcyNWVtfX1cXGNpcmN9ey19fX17XFxjaGFyYFx1MjlCNX19Iik7bGUoIlx1MjlCNSIsIlxcbWludXNvIik7bGUoIlxcZGFyciIsIlxcZG93bmFycm93Iik7bGUoIlxcZEFyciIsIlxcRG93bmFycm93Iik7bGUoIlxcRGFyciIsIlxcRG93bmFycm93Iik7bGUoIlxcbGFuZyIsIlxcbGFuZ2xlIik7bGUoIlxccmFuZyIsIlxccmFuZ2xlIik7bGUoIlxcdWFyciIsIlxcdXBhcnJvdyIpO2xlKCJcXHVBcnIiLCJcXFVwYXJyb3ciKTtsZSgiXFxVYXJyIiwiXFxVcGFycm93Iik7bGUoIlxcTiIsIlxcbWF0aGJie059Iik7bGUoIlxcUiIsIlxcbWF0aGJie1J9Iik7bGUoIlxcWiIsIlxcbWF0aGJie1p9Iik7bGUoIlxcYWxlZiIsIlxcYWxlcGgiKTtsZSgiXFxhbGVmc3ltIiwiXFxhbGVwaCIpO2xlKCJcXEFscGhhIiwiXFxtYXRocm17QX0iKTtsZSgiXFxCZXRhIiwiXFxtYXRocm17Qn0iKTtsZSgiXFxidWxsIiwiXFxidWxsZXQiKTtsZSgiXFxDaGkiLCJcXG1hdGhybXtYfSIpO2xlKCJcXGNsdWJzIiwiXFxjbHVic3VpdCIpO2xlKCJcXGNudW1zIiwiXFxtYXRoYmJ7Q30iKTtsZSgiXFxDb21wbGV4IiwiXFxtYXRoYmJ7Q30iKTtsZSgiXFxEYWdnZXIiLCJcXGRkYWdnZXIiKTtsZSgiXFxkaWFtb25kcyIsIlxcZGlhbW9uZHN1aXQiKTtsZSgiXFxlbXB0eSIsIlxcZW1wdHlzZXQiKTtsZSgiXFxFcHNpbG9uIiwiXFxtYXRocm17RX0iKTtsZSgiXFxFdGEiLCJcXG1hdGhybXtIfSIpO2xlKCJcXGV4aXN0IiwiXFxleGlzdHMiKTtsZSgiXFxoYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXGhBcnIiLCJcXExlZnRyaWdodGFycm93Iik7bGUoIlxcSGFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKTtsZSgiXFxoZWFydHMiLCJcXGhlYXJ0c3VpdCIpO2xlKCJcXGltYWdlIiwiXFxJbSIpO2xlKCJcXGluZmluIiwiXFxpbmZ0eSIpO2xlKCJcXElvdGEiLCJcXG1hdGhybXtJfSIpO2xlKCJcXGlzaW4iLCJcXGluIik7bGUoIlxcS2FwcGEiLCJcXG1hdGhybXtLfSIpO2xlKCJcXGxhcnIiLCJcXGxlZnRhcnJvdyIpO2xlKCJcXGxBcnIiLCJcXExlZnRhcnJvdyIpO2xlKCJcXExhcnIiLCJcXExlZnRhcnJvdyIpO2xlKCJcXGxyYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXGxyQXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXExyYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXE11IiwiXFxtYXRocm17TX0iKTtsZSgiXFxuYXRudW1zIiwiXFxtYXRoYmJ7Tn0iKTtsZSgiXFxOdSIsIlxcbWF0aHJte059Iik7bGUoIlxcT21pY3JvbiIsIlxcbWF0aHJte099Iik7bGUoIlxccGx1c21uIiwiXFxwbSIpO2xlKCJcXHJhcnIiLCJcXHJpZ2h0YXJyb3ciKTtsZSgiXFxyQXJyIiwiXFxSaWdodGFycm93Iik7bGUoIlxcUmFyciIsIlxcUmlnaHRhcnJvdyIpO2xlKCJcXHJlYWwiLCJcXFJlIik7bGUoIlxccmVhbHMiLCJcXG1hdGhiYntSfSIpO2xlKCJcXFJlYWxzIiwiXFxtYXRoYmJ7Un0iKTtsZSgiXFxSaG8iLCJcXG1hdGhybXtQfSIpO2xlKCJcXHNkb3QiLCJcXGNkb3QiKTtsZSgiXFxzZWN0IiwiXFxTIik7bGUoIlxcc3BhZGVzIiwiXFxzcGFkZXN1aXQiKTtsZSgiXFxzdWIiLCJcXHN1YnNldCIpO2xlKCJcXHN1YmUiLCJcXHN1YnNldGVxIik7bGUoIlxcc3VwZSIsIlxcc3Vwc2V0ZXEiKTtsZSgiXFxUYXUiLCJcXG1hdGhybXtUfSIpO2xlKCJcXHRoZXRhc3ltIiwiXFx2YXJ0aGV0YSIpO2xlKCJcXHdlaWVycCIsIlxcd3AiKTtsZSgiXFxaZXRhIiwiXFxtYXRocm17Wn0iKTtsZSgiXFxhcmdtaW4iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1pbn0iKTtsZSgiXFxhcmdtYXgiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1heH0iKTtsZSgiXFxwbGltIiwiXFxET1RTQlxcbWF0aG9we1xcb3BlcmF0b3JuYW1le3BsaW19fVxcbGltaXRzIik7bGUoIlxcYnJhIiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9fH0iKTtsZSgiXFxrZXQiLCJcXG1hdGhpbm5lcnt8eyMxfVxccmFuZ2xlfSIpO2xlKCJcXGJyYWtldCIsIlxcbWF0aGlubmVye1xcbGFuZ2xleyMxfVxccmFuZ2xlfSIpO2xlKCJcXEJyYSIsIlxcbGVmdFxcbGFuZ2xlIzFcXHJpZ2h0fCIpO2xlKCJcXEtldCIsIlxcbGVmdHwjMVxccmlnaHRcXHJhbmdsZSIpO0EkPW8odD0+ZT0+e3ZhciByPWUuY29uc3VtZUFyZygpLnRva2VucyxuPWUuY29uc3VtZUFyZygpLnRva2VucyxpPWUuY29uc3VtZUFyZygpLnRva2VucyxhPWUuY29uc3VtZUFyZygpLnRva2VucyxzPWUubWFjcm9zLmdldCgifCIpLGw9ZS5tYWNyb3MuZ2V0KCJcXHwiKTtlLm1hY3Jvcy5iZWdpbkdyb3VwKCk7dmFyIHU9byhkPT5wPT57dCYmKHAubWFjcm9zLnNldCgifCIscyksaS5sZW5ndGgmJnAubWFjcm9zLnNldCgiXFx8IixsKSk7dmFyIG09ZDtpZighZCYmaS5sZW5ndGgpe3ZhciBnPXAuZnV0dXJlKCk7Zy50ZXh0PT09InwiJiYocC5wb3BUb2tlbigpLG09ITApfXJldHVybnt0b2tlbnM6bT9pOm4sbnVtQXJnczowfX0sIm1pZE1hY3JvIik7ZS5tYWNyb3Muc2V0KCJ8Iix1KCExKSksaS5sZW5ndGgmJmUubWFjcm9zLnNldCgiXFx8Iix1KCEwKSk7dmFyIGg9ZS5jb25zdW1lQXJnKCkudG9rZW5zLGY9ZS5leHBhbmRUb2tlbnMoWy4uLmEsLi4uaCwuLi5yXSk7cmV0dXJuIGUubWFjcm9zLmVuZEdyb3VwKCkse3Rva2VuczpmLnJldmVyc2UoKSxudW1BcmdzOjB9fSwiYnJha2V0SGVscGVyIik7bGUoIlxcYnJhQGtldCIsQSQoITEpKTtsZSgiXFxicmFAc2V0IixBJCghMCkpO2xlKCJcXEJyYWtldCIsIlxcYnJhQGtldHtcXGxlZnRcXGxhbmdsZX17XFwsXFxtaWRkbGVcXHZlcnRcXCx9e1xcLFxcbWlkZGxlXFx2ZXJ0XFwsfXtcXHJpZ2h0XFxyYW5nbGV9Iik7bGUoIlxcU2V0IiwiXFxicmFAc2V0e1xcbGVmdFxce1xcOn17XFw7XFxtaWRkbGVcXHZlcnRcXDt9e1xcO1xcbWlkZGxlXFxWZXJ0XFw7fXtcXDpcXHJpZ2h0XFx9fSIpO2xlKCJcXHNldCIsIlxcYnJhQHNldHtcXHtcXCx9e1xcbWlkfXt9e1xcLFxcfX0iKTtsZSgiXFxhbmdsbiIsIntcXGFuZ2wgbn0iKTtsZSgiXFxibHVlIiwiXFx0ZXh0Y29sb3J7IyM2NDk1ZWR9eyMxfSIpO2xlKCJcXG9yYW5nZSIsIlxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX0iKTtsZSgiXFxwaW5rIiwiXFx0ZXh0Y29sb3J7IyNmZjAwYWZ9eyMxfSIpO2xlKCJcXHJlZCIsIlxcdGV4dGNvbG9yeyMjZGYwMDMwfXsjMX0iKTtsZSgiXFxncmVlbiIsIlxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX0iKTtsZSgiXFxncmF5IiwiXFx0ZXh0Y29sb3J7Z3JheX17IzF9Iik7bGUoIlxccHVycGxlIiwiXFx0ZXh0Y29sb3J7IyM5ZDM4YmR9eyMxfSIpO2xlKCJcXGJsdWVBIiwiXFx0ZXh0Y29sb3J7IyNjY2ZhZmZ9eyMxfSIpO2xlKCJcXGJsdWVCIiwiXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfSIpO2xlKCJcXGJsdWVDIiwiXFx0ZXh0Y29sb3J7IyM2M2Q5ZWF9eyMxfSIpO2xlKCJcXGJsdWVEIiwiXFx0ZXh0Y29sb3J7IyMxMWFjY2R9eyMxfSIpO2xlKCJcXGJsdWVFIiwiXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfSIpO2xlKCJcXHRlYWxBIiwiXFx0ZXh0Y29sb3J7IyM5NGZmZjV9eyMxfSIpO2xlKCJcXHRlYWxCIiwiXFx0ZXh0Y29sb3J7IyMyNmVkZDV9eyMxfSIpO2xlKCJcXHRlYWxDIiwiXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfSIpO2xlKCJcXHRlYWxEIiwiXFx0ZXh0Y29sb3J7IyMwMWE5OTV9eyMxfSIpO2xlKCJcXHRlYWxFIiwiXFx0ZXh0Y29sb3J7IyMyMDgxNzB9eyMxfSIpO2xlKCJcXGdyZWVuQSIsIlxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX0iKTtsZSgiXFxncmVlbkIiLCJcXHRleHRjb2xvcnsjIzhhZjI4MX17IzF9Iik7bGUoIlxcZ3JlZW5DIiwiXFx0ZXh0Y29sb3J7IyM3NGNmNzB9eyMxfSIpO2xlKCJcXGdyZWVuRCIsIlxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX0iKTtsZSgiXFxncmVlbkUiLCJcXHRleHRjb2xvcnsjIzBkOTIzZn17IzF9Iik7bGUoIlxcZ29sZEEiLCJcXHRleHRjb2xvcnsjI2ZmZDBhOX17IzF9Iik7bGUoIlxcZ29sZEIiLCJcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9Iik7bGUoIlxcZ29sZEMiLCJcXHRleHRjb2xvcnsjI2ZmOWMzOX17IzF9Iik7bGUoIlxcZ29sZEQiLCJcXHRleHRjb2xvcnsjI2UwN2QxMH17IzF9Iik7bGUoIlxcZ29sZEUiLCJcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9Iik7bGUoIlxccmVkQSIsIlxcdGV4dGNvbG9yeyMjZmNhOWE5fXsjMX0iKTtsZSgiXFxyZWRCIiwiXFx0ZXh0Y29sb3J7IyNmZjg0ODJ9eyMxfSIpO2xlKCJcXHJlZEMiLCJcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9Iik7bGUoIlxccmVkRCIsIlxcdGV4dGNvbG9yeyMjZTg0ZDM5fXsjMX0iKTtsZSgiXFxyZWRFIiwiXFx0ZXh0Y29sb3J7IyNiYzI2MTJ9eyMxfSIpO2xlKCJcXG1hcm9vbkEiLCJcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9Iik7bGUoIlxcbWFyb29uQiIsIlxcdGV4dGNvbG9yeyMjZmY5MmM2fXsjMX0iKTtsZSgiXFxtYXJvb25DIiwiXFx0ZXh0Y29sb3J7IyNlZDVmYTZ9eyMxfSIpO2xlKCJcXG1hcm9vbkQiLCJcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9Iik7bGUoIlxcbWFyb29uRSIsIlxcdGV4dGNvbG9yeyMjOWUwMzRlfXsjMX0iKTtsZSgiXFxwdXJwbGVBIiwiXFx0ZXh0Y29sb3J7IyNkZGQ3ZmZ9eyMxfSIpO2xlKCJcXHB1cnBsZUIiLCJcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9Iik7bGUoIlxccHVycGxlQyIsIlxcdGV4dGNvbG9yeyMjYWE4N2ZmfXsjMX0iKTtsZSgiXFxwdXJwbGVEIiwiXFx0ZXh0Y29sb3J7IyM3ODU0YWJ9eyMxfSIpO2xlKCJcXHB1cnBsZUUiLCJcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9Iik7bGUoIlxcbWludEEiLCJcXHRleHRjb2xvcnsjI2Y1ZjllOH17IzF9Iik7bGUoIlxcbWludEIiLCJcXHRleHRjb2xvcnsjI2VkZjJkZn17IzF9Iik7bGUoIlxcbWludEMiLCJcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9Iik7bGUoIlxcZ3JheUEiLCJcXHRleHRjb2xvcnsjI2Y2ZjdmN317IzF9Iik7bGUoIlxcZ3JheUIiLCJcXHRleHRjb2xvcnsjI2YwZjFmMn17IzF9Iik7bGUoIlxcZ3JheUMiLCJcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9Iik7bGUoIlxcZ3JheUQiLCJcXHRleHRjb2xvcnsjI2Q2ZDhkYX17IzF9Iik7bGUoIlxcZ3JheUUiLCJcXHRleHRjb2xvcnsjI2JhYmVjMn17IzF9Iik7bGUoIlxcZ3JheUYiLCJcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9Iik7bGUoIlxcZ3JheUciLCJcXHRleHRjb2xvcnsjIzYyNjU2OX17IzF9Iik7bGUoIlxcZ3JheUgiLCJcXHRleHRjb2xvcnsjIzNiM2U0MH17IzF9Iik7bGUoIlxcZ3JheUkiLCJcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9Iik7bGUoIlxca2FCbHVlIiwiXFx0ZXh0Y29sb3J7IyMzMTQ0NTN9eyMxfSIpO2xlKCJcXGthR3JlZW4iLCJcXHRleHRjb2xvcnsjIzcxQjMwN317IzF9Iik7XyQ9eyJeIjohMCxfOiEwLCJcXGxpbWl0cyI6ITAsIlxcbm9saW1pdHMiOiEwfSxEQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYWNyb0V4cGFuZGVyIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMuZXhwYW5zaW9uQ291bnQ9dm9pZCAwLHRoaXMubGV4ZXI9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLnN0YWNrPXZvaWQgMCx0aGlzLm1vZGU9dm9pZCAwLHRoaXMuc2V0dGluZ3M9cix0aGlzLmV4cGFuc2lvbkNvdW50PTAsdGhpcy5mZWVkKGUpLHRoaXMubWFjcm9zPW5ldyBMQyhmM2Usci5tYWNyb3MpLHRoaXMubW9kZT1uLHRoaXMuc3RhY2s9W119ZmVlZChlKXt0aGlzLmxleGVyPW5ldyBtNChlLHRoaXMuc2V0dGluZ3MpfXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWV9YmVnaW5Hcm91cCgpe3RoaXMubWFjcm9zLmJlZ2luR3JvdXAoKX1lbmRHcm91cCgpe3RoaXMubWFjcm9zLmVuZEdyb3VwKCl9ZW5kR3JvdXBzKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXBzKCl9ZnV0dXJlKCl7cmV0dXJuIHRoaXMuc3RhY2subGVuZ3RoPT09MCYmdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSksdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1wb3BUb2tlbigpe3JldHVybiB0aGlzLmZ1dHVyZSgpLHRoaXMuc3RhY2sucG9wKCl9cHVzaFRva2VuKGUpe3RoaXMuc3RhY2sucHVzaChlKX1wdXNoVG9rZW5zKGUpe3RoaXMuc3RhY2sucHVzaCguLi5lKX1zY2FuQXJndW1lbnQoZSl7dmFyIHIsbixpO2lmKGUpe2lmKHRoaXMuY29uc3VtZVNwYWNlcygpLHRoaXMuZnV0dXJlKCkudGV4dCE9PSJbIilyZXR1cm4gbnVsbDtyPXRoaXMucG9wVG9rZW4oKSx7dG9rZW5zOmksZW5kOm59PXRoaXMuY29uc3VtZUFyZyhbIl0iXSl9ZWxzZSh7dG9rZW5zOmksc3RhcnQ6cixlbmQ6bn09dGhpcy5jb25zdW1lQXJnKCkpO3JldHVybiB0aGlzLnB1c2hUb2tlbihuZXcgQ28oIkVPRiIsbi5sb2MpKSx0aGlzLnB1c2hUb2tlbnMoaSksci5yYW5nZShuLCIiKX1jb25zdW1lU3BhY2VzKCl7Zm9yKDs7KXt2YXIgZT10aGlzLmZ1dHVyZSgpO2lmKGUudGV4dD09PSIgIil0aGlzLnN0YWNrLnBvcCgpO2Vsc2UgYnJlYWt9fWNvbnN1bWVBcmcoZSl7dmFyIHI9W10sbj1lJiZlLmxlbmd0aD4wO258fHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMuZnV0dXJlKCksYSxzPTAsbD0wO2Rve2lmKGE9dGhpcy5wb3BUb2tlbigpLHIucHVzaChhKSxhLnRleHQ9PT0ieyIpKytzO2Vsc2UgaWYoYS50ZXh0PT09In0iKXtpZigtLXMscz09PS0xKXRocm93IG5ldyB1dCgiRXh0cmEgfSIsYSl9ZWxzZSBpZihhLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgdXQoIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluIGEgbWFjcm8gYXJndW1lbnQsIGV4cGVjdGVkICciKyhlJiZuP2VbbF06In0iKSsiJyIsYSk7aWYoZSYmbilpZigocz09PTB8fHM9PT0xJiZlW2xdPT09InsiKSYmYS50ZXh0PT09ZVtsXSl7aWYoKytsLGw9PT1lLmxlbmd0aCl7ci5zcGxpY2UoLWwsbCk7YnJlYWt9fWVsc2UgbD0wfXdoaWxlKHMhPT0wfHxuKTtyZXR1cm4gaS50ZXh0PT09InsiJiZyW3IubGVuZ3RoLTFdLnRleHQ9PT0ifSImJihyLnBvcCgpLHIuc2hpZnQoKSksci5yZXZlcnNlKCkse3Rva2VuczpyLHN0YXJ0OmksZW5kOmF9fWNvbnN1bWVBcmdzKGUscil7aWYocil7aWYoci5sZW5ndGghPT1lKzEpdGhyb3cgbmV3IHV0KCJUaGUgbGVuZ3RoIG9mIGRlbGltaXRlcnMgZG9lc24ndCBtYXRjaCB0aGUgbnVtYmVyIG9mIGFyZ3MhIik7Zm9yKHZhciBuPXJbMF0saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT10aGlzLnBvcFRva2VuKCk7aWYobltpXSE9PWEudGV4dCl0aHJvdyBuZXcgdXQoIlVzZSBvZiB0aGUgbWFjcm8gZG9lc24ndCBtYXRjaCBpdHMgZGVmaW5pdGlvbiIsYSl9fWZvcih2YXIgcz1bXSxsPTA7bDxlO2wrKylzLnB1c2godGhpcy5jb25zdW1lQXJnKHImJnJbbCsxXSkudG9rZW5zKTtyZXR1cm4gc31jb3VudEV4cGFuc2lvbihlKXtpZih0aGlzLmV4cGFuc2lvbkNvdW50Kz1lLHRoaXMuZXhwYW5zaW9uQ291bnQ+dGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpdGhyb3cgbmV3IHV0KCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIG5lZWQgdG8gaW5jcmVhc2UgbWF4RXhwYW5kIHNldHRpbmciKX1leHBhbmRPbmNlKGUpe3ZhciByPXRoaXMucG9wVG9rZW4oKSxuPXIudGV4dCxpPXIubm9leHBhbmQ/bnVsbDp0aGlzLl9nZXRFeHBhbnNpb24obik7aWYoaT09bnVsbHx8ZSYmaS51bmV4cGFuZGFibGUpe2lmKGUmJmk9PW51bGwmJm5bMF09PT0iXFwiJiYhdGhpcy5pc0RlZmluZWQobikpdGhyb3cgbmV3IHV0KCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogIituKTtyZXR1cm4gdGhpcy5wdXNoVG9rZW4ociksITF9dGhpcy5jb3VudEV4cGFuc2lvbigxKTt2YXIgYT1pLnRva2VucyxzPXRoaXMuY29uc3VtZUFyZ3MoaS5udW1BcmdzLGkuZGVsaW1pdGVycyk7aWYoaS5udW1BcmdzKXthPWEuc2xpY2UoKTtmb3IodmFyIGw9YS5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHU9YVtsXTtpZih1LnRleHQ9PT0iIyIpe2lmKGw9PT0wKXRocm93IG5ldyB1dCgiSW5jb21wbGV0ZSBwbGFjZWhvbGRlciBhdCBlbmQgb2YgbWFjcm8gYm9keSIsdSk7aWYodT1hWy0tbF0sdS50ZXh0PT09IiMiKWEuc3BsaWNlKGwrMSwxKTtlbHNlIGlmKC9eWzEtOV0kLy50ZXN0KHUudGV4dCkpYS5zcGxpY2UobCwyLC4uLnNbK3UudGV4dC0xXSk7ZWxzZSB0aHJvdyBuZXcgdXQoIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlciIsdSl9fX1yZXR1cm4gdGhpcy5wdXNoVG9rZW5zKGEpLGEubGVuZ3RofWV4cGFuZEFmdGVyRnV0dXJlKCl7cmV0dXJuIHRoaXMuZXhwYW5kT25jZSgpLHRoaXMuZnV0dXJlKCl9ZXhwYW5kTmV4dFRva2VuKCl7Zm9yKDs7KWlmKHRoaXMuZXhwYW5kT25jZSgpPT09ITEpe3ZhciBlPXRoaXMuc3RhY2sucG9wKCk7cmV0dXJuIGUudHJlYXRBc1JlbGF4JiYoZS50ZXh0PSJcXHJlbGF4IiksZX10aHJvdyBuZXcgRXJyb3J9ZXhwYW5kTWFjcm8oZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKT90aGlzLmV4cGFuZFRva2VucyhbbmV3IENvKGUpXSk6dm9pZCAwfWV4cGFuZFRva2VucyhlKXt2YXIgcj1bXSxuPXRoaXMuc3RhY2subGVuZ3RoO2Zvcih0aGlzLnB1c2hUb2tlbnMoZSk7dGhpcy5zdGFjay5sZW5ndGg+bjspaWYodGhpcy5leHBhbmRPbmNlKCEwKT09PSExKXt2YXIgaT10aGlzLnN0YWNrLnBvcCgpO2kudHJlYXRBc1JlbGF4JiYoaS5ub2V4cGFuZD0hMSxpLnRyZWF0QXNSZWxheD0hMSksci5wdXNoKGkpfXJldHVybiB0aGlzLmNvdW50RXhwYW5zaW9uKHIubGVuZ3RoKSxyfWV4cGFuZE1hY3JvQXNUZXh0KGUpe3ZhciByPXRoaXMuZXhwYW5kTWFjcm8oZSk7cmV0dXJuIHImJnIubWFwKG49Pm4udGV4dCkuam9pbigiIil9X2dldEV4cGFuc2lvbihlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7aWYocj09bnVsbClyZXR1cm4gcjtpZihlLmxlbmd0aD09PTEpe3ZhciBuPXRoaXMubGV4ZXIuY2F0Y29kZXNbZV07aWYobiE9bnVsbCYmbiE9PTEzKXJldHVybn12YXIgaT10eXBlb2Ygcj09ImZ1bmN0aW9uIj9yKHRoaXMpOnI7aWYodHlwZW9mIGk9PSJzdHJpbmciKXt2YXIgYT0wO2lmKGkuaW5kZXhPZigiIyIpIT09LTEpZm9yKHZhciBzPWkucmVwbGFjZSgvIyMvZywiIik7cy5pbmRleE9mKCIjIisoYSsxKSkhPT0tMTspKythO2Zvcih2YXIgbD1uZXcgbTQoaSx0aGlzLnNldHRpbmdzKSx1PVtdLGg9bC5sZXgoKTtoLnRleHQhPT0iRU9GIjspdS5wdXNoKGgpLGg9bC5sZXgoKTt1LnJldmVyc2UoKTt2YXIgZj17dG9rZW5zOnUsbnVtQXJnczphfTtyZXR1cm4gZn1yZXR1cm4gaX1pc0RlZmluZWQoZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKXx8b2guaGFzT3duUHJvcGVydHkoZSl8fEVuLm1hdGguaGFzT3duUHJvcGVydHkoZSl8fEVuLnRleHQuaGFzT3duUHJvcGVydHkoZSl8fF8kLmhhc093blByb3BlcnR5KGUpfWlzRXhwYW5kYWJsZShlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7cmV0dXJuIHIhPW51bGw/dHlwZW9mIHI9PSJzdHJpbmcifHx0eXBlb2Ygcj09ImZ1bmN0aW9uInx8IXIudW5leHBhbmRhYmxlOm9oLmhhc093blByb3BlcnR5KGUpJiYhb2hbZV0ucHJpbWl0aXZlfX0sSUc9L15b4oKK4oKL4oKM4oKN4oKO4oKA4oKB4oKC4oKD4oKE4oKF4oKG4oKH4oKI4oKJ4oKQ4oKR4oKV4bWi4rG84oKW4oKX4oKY4oKZ4oKS4oKa4bWj4oKb4oKc4bWk4bWl4oKT4bWm4bWn4bWo4bWp4bWqXS8sczQ9T2JqZWN0LmZyZWV6ZSh7Ilx1MjA4QSI6IisiLCJcdTIwOEIiOiItIiwiXHUyMDhDIjoiPSIsIlx1MjA4RCI6IigiLCJcdTIwOEUiOiIpIiwiXHUyMDgwIjoiMCIsIlx1MjA4MSI6IjEiLCJcdTIwODIiOiIyIiwiXHUyMDgzIjoiMyIsIlx1MjA4NCI6IjQiLCJcdTIwODUiOiI1IiwiXHUyMDg2IjoiNiIsIlx1MjA4NyI6IjciLCJcdTIwODgiOiI4IiwiXHUyMDg5IjoiOSIsIlx1MjA5MCI6ImEiLCJcdTIwOTEiOiJlIiwiXHUyMDk1IjoiaCIsIlx1MUQ2MiI6ImkiLCJcdTJDN0MiOiJqIiwiXHUyMDk2IjoiayIsIlx1MjA5NyI6ImwiLCJcdTIwOTgiOiJtIiwiXHUyMDk5IjoibiIsIlx1MjA5MiI6Im8iLCJcdTIwOUEiOiJwIiwiXHUxRDYzIjoiciIsIlx1MjA5QiI6InMiLCJcdTIwOUMiOiJ0IiwiXHUxRDY0IjoidSIsIlx1MUQ2NSI6InYiLCJcdTIwOTMiOiJ4IiwiXHUxRDY2IjoiXHUwM0IyIiwiXHUxRDY3IjoiXHUwM0IzIiwiXHUxRDY4IjoiXHUwM0MxIiwiXHUxRDY5IjoiXHUwM0Q1IiwiXHUxRDZBIjoiXHUwM0M3IiwiXHUyMDdBIjoiKyIsIlx1MjA3QiI6Ii0iLCJcdTIwN0MiOiI9IiwiXHUyMDdEIjoiKCIsIlx1MjA3RSI6IikiLCJcdTIwNzAiOiIwIiwiXHhCOSI6IjEiLCJceEIyIjoiMiIsIlx4QjMiOiIzIiwiXHUyMDc0IjoiNCIsIlx1MjA3NSI6IjUiLCJcdTIwNzYiOiI2IiwiXHUyMDc3IjoiNyIsIlx1MjA3OCI6IjgiLCJcdTIwNzkiOiI5IiwiXHUxRDJDIjoiQSIsIlx1MUQyRSI6IkIiLCJcdTFEMzAiOiJEIiwiXHUxRDMxIjoiRSIsIlx1MUQzMyI6IkciLCJcdTFEMzQiOiJIIiwiXHUxRDM1IjoiSSIsIlx1MUQzNiI6IkoiLCJcdTFEMzciOiJLIiwiXHUxRDM4IjoiTCIsIlx1MUQzOSI6Ik0iLCJcdTFEM0EiOiJOIiwiXHUxRDNDIjoiTyIsIlx1MUQzRSI6IlAiLCJcdTFEM0YiOiJSIiwiXHUxRDQwIjoiVCIsIlx1MUQ0MSI6IlUiLCJcdTJDN0QiOiJWIiwiXHUxRDQyIjoiVyIsIlx1MUQ0MyI6ImEiLCJcdTFENDciOiJiIiwiXHUxRDlDIjoiYyIsIlx1MUQ0OCI6ImQiLCJcdTFENDkiOiJlIiwiXHUxREEwIjoiZiIsIlx1MUQ0RCI6ImciLFx1MDJCMDoiaCIsIlx1MjA3MSI6ImkiLFx1MDJCMjoiaiIsIlx1MUQ0RiI6ImsiLFx1MDJFMToibCIsIlx1MUQ1MCI6Im0iLFx1MjA3RjoibiIsIlx1MUQ1MiI6Im8iLCJcdTFENTYiOiJwIixcdTAyQjM6InIiLFx1MDJFMjoicyIsIlx1MUQ1NyI6InQiLCJcdTFENTgiOiJ1IiwiXHUxRDVCIjoidiIsXHUwMkI3OiJ3IixcdTAyRTM6IngiLFx1MDJCODoieSIsIlx1MURCQiI6InoiLCJcdTFENUQiOiJcdTAzQjIiLCJcdTFENUUiOiJcdTAzQjMiLCJcdTFENUYiOiJcdTAzQjQiLCJcdTFENjAiOiJcdTAzRDUiLCJcdTFENjEiOiJcdTAzQzciLCJcdTFEQkYiOiJcdTAzQjgifSksdkM9eyJcdTAzMDEiOnt0ZXh0OiJcXCciLG1hdGg6IlxcYWN1dGUifSwiXHUwMzAwIjp7dGV4dDoiXFxgIixtYXRoOiJcXGdyYXZlIn0sIlx1MDMwOCI6e3RleHQ6J1xcIicsbWF0aDoiXFxkZG90In0sIlx1MDMwMyI6e3RleHQ6IlxcfiIsbWF0aDoiXFx0aWxkZSJ9LCJcdTAzMDQiOnt0ZXh0OiJcXD0iLG1hdGg6IlxcYmFyIn0sIlx1MDMwNiI6e3RleHQ6IlxcdSIsbWF0aDoiXFxicmV2ZSJ9LCJcdTAzMEMiOnt0ZXh0OiJcXHYiLG1hdGg6IlxcY2hlY2sifSwiXHUwMzAyIjp7dGV4dDoiXFxeIixtYXRoOiJcXGhhdCJ9LCJcdTAzMDciOnt0ZXh0OiJcXC4iLG1hdGg6IlxcZG90In0sIlx1MDMwQSI6e3RleHQ6IlxcciIsbWF0aDoiXFxtYXRocmluZyJ9LCJcdTAzMEIiOnt0ZXh0OiJcXEgifSwiXHUwMzI3Ijp7dGV4dDoiXFxjIn19LE9HPXtcdTAwRTE6ImFcdTAzMDEiLFx1MDBFMDoiYVx1MDMwMCIsXHUwMEU0OiJhXHUwMzA4IixcdTAxREY6ImFcdTAzMDhcdTAzMDQiLFx1MDBFMzoiYVx1MDMwMyIsXHUwMTAxOiJhXHUwMzA0IixcdTAxMDM6ImFcdTAzMDYiLFx1MUVBRjoiYVx1MDMwNlx1MDMwMSIsXHUxRUIxOiJhXHUwMzA2XHUwMzAwIixcdTFFQjU6ImFcdTAzMDZcdTAzMDMiLFx1MDFDRToiYVx1MDMwQyIsXHUwMEUyOiJhXHUwMzAyIixcdTFFQTU6ImFcdTAzMDJcdTAzMDEiLFx1MUVBNzoiYVx1MDMwMlx1MDMwMCIsXHUxRUFCOiJhXHUwMzAyXHUwMzAzIixcdTAyMjc6ImFcdTAzMDciLFx1MDFFMToiYVx1MDMwN1x1MDMwNCIsXHUwMEU1OiJhXHUwMzBBIixcdTAxRkI6ImFcdTAzMEFcdTAzMDEiLFx1MUUwMzoiYlx1MDMwNyIsXHUwMTA3OiJjXHUwMzAxIixcdTFFMDk6ImNcdTAzMjdcdTAzMDEiLFx1MDEwRDoiY1x1MDMwQyIsXHUwMTA5OiJjXHUwMzAyIixcdTAxMEI6ImNcdTAzMDciLFx1MDBFNzoiY1x1MDMyNyIsXHUwMTBGOiJkXHUwMzBDIixcdTFFMEI6ImRcdTAzMDciLFx1MUUxMToiZFx1MDMyNyIsXHUwMEU5OiJlXHUwMzAxIixcdTAwRTg6ImVcdTAzMDAiLFx1MDBFQjoiZVx1MDMwOCIsXHUxRUJEOiJlXHUwMzAzIixcdTAxMTM6ImVcdTAzMDQiLFx1MUUxNzoiZVx1MDMwNFx1MDMwMSIsXHUxRTE1OiJlXHUwMzA0XHUwMzAwIixcdTAxMTU6ImVcdTAzMDYiLFx1MUUxRDoiZVx1MDMyN1x1MDMwNiIsXHUwMTFCOiJlXHUwMzBDIixcdTAwRUE6ImVcdTAzMDIiLFx1MUVCRjoiZVx1MDMwMlx1MDMwMSIsXHUxRUMxOiJlXHUwMzAyXHUwMzAwIixcdTFFQzU6ImVcdTAzMDJcdTAzMDMiLFx1MDExNzoiZVx1MDMwNyIsXHUwMjI5OiJlXHUwMzI3IixcdTFFMUY6ImZcdTAzMDciLFx1MDFGNToiZ1x1MDMwMSIsXHUxRTIxOiJnXHUwMzA0IixcdTAxMUY6ImdcdTAzMDYiLFx1MDFFNzoiZ1x1MDMwQyIsXHUwMTFEOiJnXHUwMzAyIixcdTAxMjE6ImdcdTAzMDciLFx1MDEyMzoiZ1x1MDMyNyIsXHUxRTI3OiJoXHUwMzA4IixcdTAyMUY6ImhcdTAzMEMiLFx1MDEyNToiaFx1MDMwMiIsXHUxRTIzOiJoXHUwMzA3IixcdTFFMjk6ImhcdTAzMjciLFx1MDBFRDoiaVx1MDMwMSIsXHUwMEVDOiJpXHUwMzAwIixcdTAwRUY6ImlcdTAzMDgiLFx1MUUyRjoiaVx1MDMwOFx1MDMwMSIsXHUwMTI5OiJpXHUwMzAzIixcdTAxMkI6ImlcdTAzMDQiLFx1MDEyRDoiaVx1MDMwNiIsXHUwMUQwOiJpXHUwMzBDIixcdTAwRUU6ImlcdTAzMDIiLFx1MDFGMDoialx1MDMwQyIsXHUwMTM1OiJqXHUwMzAyIixcdTFFMzE6ImtcdTAzMDEiLFx1MDFFOToia1x1MDMwQyIsXHUwMTM3OiJrXHUwMzI3IixcdTAxM0E6ImxcdTAzMDEiLFx1MDEzRToibFx1MDMwQyIsXHUwMTNDOiJsXHUwMzI3IixcdTFFM0Y6Im1cdTAzMDEiLFx1MUU0MToibVx1MDMwNyIsXHUwMTQ0OiJuXHUwMzAxIixcdTAxRjk6Im5cdTAzMDAiLFx1MDBGMToiblx1MDMwMyIsXHUwMTQ4OiJuXHUwMzBDIixcdTFFNDU6Im5cdTAzMDciLFx1MDE0Njoiblx1MDMyNyIsXHUwMEYzOiJvXHUwMzAxIixcdTAwRjI6Im9cdTAzMDAiLFx1MDBGNjoib1x1MDMwOCIsXHUwMjJCOiJvXHUwMzA4XHUwMzA0IixcdTAwRjU6Im9cdTAzMDMiLFx1MUU0RDoib1x1MDMwM1x1MDMwMSIsXHUxRTRGOiJvXHUwMzAzXHUwMzA4IixcdTAyMkQ6Im9cdTAzMDNcdTAzMDQiLFx1MDE0RDoib1x1MDMwNCIsXHUxRTUzOiJvXHUwMzA0XHUwMzAxIixcdTFFNTE6Im9cdTAzMDRcdTAzMDAiLFx1MDE0Rjoib1x1MDMwNiIsXHUwMUQyOiJvXHUwMzBDIixcdTAwRjQ6Im9cdTAzMDIiLFx1MUVEMToib1x1MDMwMlx1MDMwMSIsXHUxRUQzOiJvXHUwMzAyXHUwMzAwIixcdTFFRDc6Im9cdTAzMDJcdTAzMDMiLFx1MDIyRjoib1x1MDMwNyIsXHUwMjMxOiJvXHUwMzA3XHUwMzA0IixcdTAxNTE6Im9cdTAzMEIiLFx1MUU1NToicFx1MDMwMSIsXHUxRTU3OiJwXHUwMzA3IixcdTAxNTU6InJcdTAzMDEiLFx1MDE1OToiclx1MDMwQyIsXHUxRTU5OiJyXHUwMzA3IixcdTAxNTc6InJcdTAzMjciLFx1MDE1Qjoic1x1MDMwMSIsXHUxRTY1OiJzXHUwMzAxXHUwMzA3IixcdTAxNjE6InNcdTAzMEMiLFx1MUU2Nzoic1x1MDMwQ1x1MDMwNyIsXHUwMTVEOiJzXHUwMzAyIixcdTFFNjE6InNcdTAzMDciLFx1MDE1Rjoic1x1MDMyNyIsXHUxRTk3OiJ0XHUwMzA4IixcdTAxNjU6InRcdTAzMEMiLFx1MUU2QjoidFx1MDMwNyIsXHUwMTYzOiJ0XHUwMzI3IixcdTAwRkE6InVcdTAzMDEiLFx1MDBGOToidVx1MDMwMCIsXHUwMEZDOiJ1XHUwMzA4IixcdTAxRDg6InVcdTAzMDhcdTAzMDEiLFx1MDFEQzoidVx1MDMwOFx1MDMwMCIsXHUwMUQ2OiJ1XHUwMzA4XHUwMzA0IixcdTAxREE6InVcdTAzMDhcdTAzMEMiLFx1MDE2OToidVx1MDMwMyIsXHUxRTc5OiJ1XHUwMzAzXHUwMzAxIixcdTAxNkI6InVcdTAzMDQiLFx1MUU3QjoidVx1MDMwNFx1MDMwOCIsXHUwMTZEOiJ1XHUwMzA2IixcdTAxRDQ6InVcdTAzMEMiLFx1MDBGQjoidVx1MDMwMiIsXHUwMTZGOiJ1XHUwMzBBIixcdTAxNzE6InVcdTAzMEIiLFx1MUU3RDoidlx1MDMwMyIsXHUxRTgzOiJ3XHUwMzAxIixcdTFFODE6IndcdTAzMDAiLFx1MUU4NToid1x1MDMwOCIsXHUwMTc1OiJ3XHUwMzAyIixcdTFFODc6IndcdTAzMDciLFx1MUU5ODoid1x1MDMwQSIsXHUxRThEOiJ4XHUwMzA4IixcdTFFOEI6InhcdTAzMDciLFx1MDBGRDoieVx1MDMwMSIsXHUxRUYzOiJ5XHUwMzAwIixcdTAwRkY6InlcdTAzMDgiLFx1MUVGOToieVx1MDMwMyIsXHUwMjMzOiJ5XHUwMzA0IixcdTAxNzc6InlcdTAzMDIiLFx1MUU4RjoieVx1MDMwNyIsXHUxRTk5OiJ5XHUwMzBBIixcdTAxN0E6InpcdTAzMDEiLFx1MDE3RToielx1MDMwQyIsXHUxRTkxOiJ6XHUwMzAyIixcdTAxN0M6InpcdTAzMDciLFx1MDBDMToiQVx1MDMwMSIsXHUwMEMwOiJBXHUwMzAwIixcdTAwQzQ6IkFcdTAzMDgiLFx1MDFERToiQVx1MDMwOFx1MDMwNCIsXHUwMEMzOiJBXHUwMzAzIixcdTAxMDA6IkFcdTAzMDQiLFx1MDEwMjoiQVx1MDMwNiIsXHUxRUFFOiJBXHUwMzA2XHUwMzAxIixcdTFFQjA6IkFcdTAzMDZcdTAzMDAiLFx1MUVCNDoiQVx1MDMwNlx1MDMwMyIsXHUwMUNEOiJBXHUwMzBDIixcdTAwQzI6IkFcdTAzMDIiLFx1MUVBNDoiQVx1MDMwMlx1MDMwMSIsXHUxRUE2OiJBXHUwMzAyXHUwMzAwIixcdTFFQUE6IkFcdTAzMDJcdTAzMDMiLFx1MDIyNjoiQVx1MDMwNyIsXHUwMUUwOiJBXHUwMzA3XHUwMzA0IixcdTAwQzU6IkFcdTAzMEEiLFx1MDFGQToiQVx1MDMwQVx1MDMwMSIsXHUxRTAyOiJCXHUwMzA3IixcdTAxMDY6IkNcdTAzMDEiLFx1MUUwODoiQ1x1MDMyN1x1MDMwMSIsXHUwMTBDOiJDXHUwMzBDIixcdTAxMDg6IkNcdTAzMDIiLFx1MDEwQToiQ1x1MDMwNyIsXHUwMEM3OiJDXHUwMzI3IixcdTAxMEU6IkRcdTAzMEMiLFx1MUUwQToiRFx1MDMwNyIsXHUxRTEwOiJEXHUwMzI3IixcdTAwQzk6IkVcdTAzMDEiLFx1MDBDODoiRVx1MDMwMCIsXHUwMENCOiJFXHUwMzA4IixcdTFFQkM6IkVcdTAzMDMiLFx1MDExMjoiRVx1MDMwNCIsXHUxRTE2OiJFXHUwMzA0XHUwMzAxIixcdTFFMTQ6IkVcdTAzMDRcdTAzMDAiLFx1MDExNDoiRVx1MDMwNiIsXHUxRTFDOiJFXHUwMzI3XHUwMzA2IixcdTAxMUE6IkVcdTAzMEMiLFx1MDBDQToiRVx1MDMwMiIsXHUxRUJFOiJFXHUwMzAyXHUwMzAxIixcdTFFQzA6IkVcdTAzMDJcdTAzMDAiLFx1MUVDNDoiRVx1MDMwMlx1MDMwMyIsXHUwMTE2OiJFXHUwMzA3IixcdTAyMjg6IkVcdTAzMjciLFx1MUUxRToiRlx1MDMwNyIsXHUwMUY0OiJHXHUwMzAxIixcdTFFMjA6IkdcdTAzMDQiLFx1MDExRToiR1x1MDMwNiIsXHUwMUU2OiJHXHUwMzBDIixcdTAxMUM6IkdcdTAzMDIiLFx1MDEyMDoiR1x1MDMwNyIsXHUwMTIyOiJHXHUwMzI3IixcdTFFMjY6IkhcdTAzMDgiLFx1MDIxRToiSFx1MDMwQyIsXHUwMTI0OiJIXHUwMzAyIixcdTFFMjI6IkhcdTAzMDciLFx1MUUyODoiSFx1MDMyNyIsXHUwMENEOiJJXHUwMzAxIixcdTAwQ0M6IklcdTAzMDAiLFx1MDBDRjoiSVx1MDMwOCIsXHUxRTJFOiJJXHUwMzA4XHUwMzAxIixcdTAxMjg6IklcdTAzMDMiLFx1MDEyQToiSVx1MDMwNCIsXHUwMTJDOiJJXHUwMzA2IixcdTAxQ0Y6IklcdTAzMEMiLFx1MDBDRToiSVx1MDMwMiIsXHUwMTMwOiJJXHUwMzA3IixcdTAxMzQ6IkpcdTAzMDIiLFx1MUUzMDoiS1x1MDMwMSIsXHUwMUU4OiJLXHUwMzBDIixcdTAxMzY6IktcdTAzMjciLFx1MDEzOToiTFx1MDMwMSIsXHUwMTNEOiJMXHUwMzBDIixcdTAxM0I6IkxcdTAzMjciLFx1MUUzRToiTVx1MDMwMSIsXHUxRTQwOiJNXHUwMzA3IixcdTAxNDM6Ik5cdTAzMDEiLFx1MDFGODoiTlx1MDMwMCIsXHUwMEQxOiJOXHUwMzAzIixcdTAxNDc6Ik5cdTAzMEMiLFx1MUU0NDoiTlx1MDMwNyIsXHUwMTQ1OiJOXHUwMzI3IixcdTAwRDM6Ik9cdTAzMDEiLFx1MDBEMjoiT1x1MDMwMCIsXHUwMEQ2OiJPXHUwMzA4IixcdTAyMkE6Ik9cdTAzMDhcdTAzMDQiLFx1MDBENToiT1x1MDMwMyIsXHUxRTRDOiJPXHUwMzAzXHUwMzAxIixcdTFFNEU6Ik9cdTAzMDNcdTAzMDgiLFx1MDIyQzoiT1x1MDMwM1x1MDMwNCIsXHUwMTRDOiJPXHUwMzA0IixcdTFFNTI6Ik9cdTAzMDRcdTAzMDEiLFx1MUU1MDoiT1x1MDMwNFx1MDMwMCIsXHUwMTRFOiJPXHUwMzA2IixcdTAxRDE6Ik9cdTAzMEMiLFx1MDBENDoiT1x1MDMwMiIsXHUxRUQwOiJPXHUwMzAyXHUwMzAxIixcdTFFRDI6Ik9cdTAzMDJcdTAzMDAiLFx1MUVENjoiT1x1MDMwMlx1MDMwMyIsXHUwMjJFOiJPXHUwMzA3IixcdTAyMzA6Ik9cdTAzMDdcdTAzMDQiLFx1MDE1MDoiT1x1MDMwQiIsXHUxRTU0OiJQXHUwMzAxIixcdTFFNTY6IlBcdTAzMDciLFx1MDE1NDoiUlx1MDMwMSIsXHUwMTU4OiJSXHUwMzBDIixcdTFFNTg6IlJcdTAzMDciLFx1MDE1NjoiUlx1MDMyNyIsXHUwMTVBOiJTXHUwMzAxIixcdTFFNjQ6IlNcdTAzMDFcdTAzMDciLFx1MDE2MDoiU1x1MDMwQyIsXHUxRTY2OiJTXHUwMzBDXHUwMzA3IixcdTAxNUM6IlNcdTAzMDIiLFx1MUU2MDoiU1x1MDMwNyIsXHUwMTVFOiJTXHUwMzI3IixcdTAxNjQ6IlRcdTAzMEMiLFx1MUU2QToiVFx1MDMwNyIsXHUwMTYyOiJUXHUwMzI3IixcdTAwREE6IlVcdTAzMDEiLFx1MDBEOToiVVx1MDMwMCIsXHUwMERDOiJVXHUwMzA4IixcdTAxRDc6IlVcdTAzMDhcdTAzMDEiLFx1MDFEQjoiVVx1MDMwOFx1MDMwMCIsXHUwMUQ1OiJVXHUwMzA4XHUwMzA0IixcdTAxRDk6IlVcdTAzMDhcdTAzMEMiLFx1MDE2ODoiVVx1MDMwMyIsXHUxRTc4OiJVXHUwMzAzXHUwMzAxIixcdTAxNkE6IlVcdTAzMDQiLFx1MUU3QToiVVx1MDMwNFx1MDMwOCIsXHUwMTZDOiJVXHUwMzA2IixcdTAxRDM6IlVcdTAzMEMiLFx1MDBEQjoiVVx1MDMwMiIsXHUwMTZFOiJVXHUwMzBBIixcdTAxNzA6IlVcdTAzMEIiLFx1MUU3QzoiVlx1MDMwMyIsXHUxRTgyOiJXXHUwMzAxIixcdTFFODA6IldcdTAzMDAiLFx1MUU4NDoiV1x1MDMwOCIsXHUwMTc0OiJXXHUwMzAyIixcdTFFODY6IldcdTAzMDciLFx1MUU4QzoiWFx1MDMwOCIsXHUxRThBOiJYXHUwMzA3IixcdTAwREQ6IllcdTAzMDEiLFx1MUVGMjoiWVx1MDMwMCIsXHUwMTc4OiJZXHUwMzA4IixcdTFFRjg6IllcdTAzMDMiLFx1MDIzMjoiWVx1MDMwNCIsXHUwMTc2OiJZXHUwMzAyIixcdTFFOEU6IllcdTAzMDciLFx1MDE3OToiWlx1MDMwMSIsXHUwMTdEOiJaXHUwMzBDIixcdTFFOTA6IlpcdTAzMDIiLFx1MDE3QjoiWlx1MDMwNyIsXHUwM0FDOiJcdTAzQjFcdTAzMDEiLFx1MUY3MDoiXHUwM0IxXHUwMzAwIixcdTFGQjE6Ilx1MDNCMVx1MDMwNCIsXHUxRkIwOiJcdTAzQjFcdTAzMDYiLFx1MDNBRDoiXHUwM0I1XHUwMzAxIixcdTFGNzI6Ilx1MDNCNVx1MDMwMCIsXHUwM0FFOiJcdTAzQjdcdTAzMDEiLFx1MUY3NDoiXHUwM0I3XHUwMzAwIixcdTAzQUY6Ilx1MDNCOVx1MDMwMSIsXHUxRjc2OiJcdTAzQjlcdTAzMDAiLFx1MDNDQToiXHUwM0I5XHUwMzA4IixcdTAzOTA6Ilx1MDNCOVx1MDMwOFx1MDMwMSIsXHUxRkQyOiJcdTAzQjlcdTAzMDhcdTAzMDAiLFx1MUZEMToiXHUwM0I5XHUwMzA0IixcdTFGRDA6Ilx1MDNCOVx1MDMwNiIsXHUwM0NDOiJcdTAzQkZcdTAzMDEiLFx1MUY3ODoiXHUwM0JGXHUwMzAwIixcdTAzQ0Q6Ilx1MDNDNVx1MDMwMSIsXHUxRjdBOiJcdTAzQzVcdTAzMDAiLFx1MDNDQjoiXHUwM0M1XHUwMzA4IixcdTAzQjA6Ilx1MDNDNVx1MDMwOFx1MDMwMSIsXHUxRkUyOiJcdTAzQzVcdTAzMDhcdTAzMDAiLFx1MUZFMToiXHUwM0M1XHUwMzA0IixcdTFGRTA6Ilx1MDNDNVx1MDMwNiIsXHUwM0NFOiJcdTAzQzlcdTAzMDEiLFx1MUY3QzoiXHUwM0M5XHUwMzAwIixcdTAzOEU6Ilx1MDNBNVx1MDMwMSIsXHUxRkVBOiJcdTAzQTVcdTAzMDAiLFx1MDNBQjoiXHUwM0E1XHUwMzA4IixcdTFGRTk6Ilx1MDNBNVx1MDMwNCIsXHUxRkU4OiJcdTAzQTVcdTAzMDYiLFx1MDM4RjoiXHUwM0E5XHUwMzAxIixcdTFGRkE6Ilx1MDNBOVx1MDMwMCJ9LGc0PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm1vZGU9dm9pZCAwLHRoaXMuZ3VsbGV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLmxlZnRyaWdodERlcHRoPXZvaWQgMCx0aGlzLm5leHRUb2tlbj12b2lkIDAsdGhpcy5tb2RlPSJtYXRoIix0aGlzLmd1bGxldD1uZXcgREMoZSxyLHRoaXMubW9kZSksdGhpcy5zZXR0aW5ncz1yLHRoaXMubGVmdHJpZ2h0RGVwdGg9MH1leHBlY3QoZSxyKXtpZihyPT09dm9pZCAwJiYocj0hMCksdGhpcy5mZXRjaCgpLnRleHQhPT1lKXRocm93IG5ldyB1dCgiRXhwZWN0ZWQgJyIrZSsiJywgZ290ICciK3RoaXMuZmV0Y2goKS50ZXh0KyInIix0aGlzLmZldGNoKCkpO3ImJnRoaXMuY29uc3VtZSgpfWNvbnN1bWUoKXt0aGlzLm5leHRUb2tlbj1udWxsfWZldGNoKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuPT1udWxsJiYodGhpcy5uZXh0VG9rZW49dGhpcy5ndWxsZXQuZXhwYW5kTmV4dFRva2VuKCkpLHRoaXMubmV4dFRva2VufXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWUsdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShlKX1wYXJzZSgpe3RoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0aGlzLnNldHRpbmdzLmNvbG9ySXNUZXh0Q29sb3ImJnRoaXMuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY29sb3IiLCJcXHRleHRjb2xvciIpO3RyeXt2YXIgZT10aGlzLnBhcnNlRXhwcmVzc2lvbighMSk7cmV0dXJuIHRoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwfHx0aGlzLmd1bGxldC5lbmRHcm91cCgpLGV9ZmluYWxseXt0aGlzLmd1bGxldC5lbmRHcm91cHMoKX19c3VicGFyc2UoZSl7dmFyIHI9dGhpcy5uZXh0VG9rZW47dGhpcy5jb25zdW1lKCksdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBDbygifSIpKSx0aGlzLmd1bGxldC5wdXNoVG9rZW5zKGUpO3ZhciBuPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLm5leHRUb2tlbj1yLG59cGFyc2VFeHByZXNzaW9uKGUscil7Zm9yKHZhciBuPVtdOzspe3RoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk9dGhpcy5mZXRjaCgpO2lmKHQuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YoaS50ZXh0KSE9PS0xfHxyJiZpLnRleHQ9PT1yfHxlJiZvaFtpLnRleHRdJiZvaFtpLnRleHRdLmluZml4KWJyZWFrO3ZhciBhPXRoaXMucGFyc2VBdG9tKHIpO2lmKGEpe2lmKGEudHlwZT09PSJpbnRlcm5hbCIpY29udGludWV9ZWxzZSBicmVhaztuLnB1c2goYSl9cmV0dXJuIHRoaXMubW9kZT09PSJ0ZXh0IiYmdGhpcy5mb3JtTGlnYXR1cmVzKG4pLHRoaXMuaGFuZGxlSW5maXhOb2RlcyhuKX1oYW5kbGVJbmZpeE5vZGVzKGUpe2Zvcih2YXIgcj0tMSxuLGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLnR5cGU9PT0iaW5maXgiKXtpZihyIT09LTEpdGhyb3cgbmV3IHV0KCJvbmx5IG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXAiLGVbaV0udG9rZW4pO3I9aSxuPWVbaV0ucmVwbGFjZVdpdGh9aWYociE9PS0xJiZuKXt2YXIgYSxzLGw9ZS5zbGljZSgwLHIpLHU9ZS5zbGljZShyKzEpO2wubGVuZ3RoPT09MSYmbFswXS50eXBlPT09Im9yZGdyb3VwIj9hPWxbMF06YT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6bH0sdS5sZW5ndGg9PT0xJiZ1WzBdLnR5cGU9PT0ib3JkZ3JvdXAiP3M9dVswXTpzPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTp1fTt2YXIgaDtyZXR1cm4gbj09PSJcXFxcYWJvdmVmcmFjIj9oPXRoaXMuY2FsbEZ1bmN0aW9uKG4sW2EsZVtyXSxzXSxbXSk6aD10aGlzLmNhbGxGdW5jdGlvbihuLFthLHNdLFtdKSxbaF19ZWxzZSByZXR1cm4gZX1oYW5kbGVTdXBTdWJzY3JpcHQoZSl7dmFyIHI9dGhpcy5mZXRjaCgpLG49ci50ZXh0O3RoaXMuY29uc3VtZSgpLHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMucGFyc2VHcm91cChlKTtpZighaSl0aHJvdyBuZXcgdXQoIkV4cGVjdGVkIGdyb3VwIGFmdGVyICciK24rIiciLHIpO3JldHVybiBpfWZvcm1hdFVuc3VwcG9ydGVkQ21kKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspci5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OmVbbl19KTt2YXIgaT17dHlwZToidGV4dCIsbW9kZTp0aGlzLm1vZGUsYm9keTpyfSxhPXt0eXBlOiJjb2xvciIsbW9kZTp0aGlzLm1vZGUsY29sb3I6dGhpcy5zZXR0aW5ncy5lcnJvckNvbG9yLGJvZHk6W2ldfTtyZXR1cm4gYX1wYXJzZUF0b20oZSl7dmFyIHI9dGhpcy5wYXJzZUdyb3VwKCJhdG9tIixlKTtpZih0aGlzLm1vZGU9PT0idGV4dCIpcmV0dXJuIHI7Zm9yKHZhciBuLGk7Oyl7dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGE9dGhpcy5mZXRjaCgpO2lmKGEudGV4dD09PSJcXGxpbWl0cyJ8fGEudGV4dD09PSJcXG5vbGltaXRzIil7aWYociYmci50eXBlPT09Im9wIil7dmFyIHM9YS50ZXh0PT09IlxcbGltaXRzIjtyLmxpbWl0cz1zLHIuYWx3YXlzSGFuZGxlU3VwU3ViPSEwfWVsc2UgaWYociYmci50eXBlPT09Im9wZXJhdG9ybmFtZSIpci5hbHdheXNIYW5kbGVTdXBTdWImJihyLmxpbWl0cz1hLnRleHQ9PT0iXFxsaW1pdHMiKTtlbHNlIHRocm93IG5ldyB1dCgiTGltaXQgY29udHJvbHMgbXVzdCBmb2xsb3cgYSBtYXRoIG9wZXJhdG9yIixhKTt0aGlzLmNvbnN1bWUoKX1lbHNlIGlmKGEudGV4dD09PSJeIil7aWYobil0aHJvdyBuZXcgdXQoIkRvdWJsZSBzdXBlcnNjcmlwdCIsYSk7bj10aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3VwZXJzY3JpcHQiKX1lbHNlIGlmKGEudGV4dD09PSJfIil7aWYoaSl0aHJvdyBuZXcgdXQoIkRvdWJsZSBzdWJzY3JpcHQiLGEpO2k9dGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1YnNjcmlwdCIpfWVsc2UgaWYoYS50ZXh0PT09IiciKXtpZihuKXRocm93IG5ldyB1dCgiRG91YmxlIHN1cGVyc2NyaXB0IixhKTt2YXIgbD17dHlwZToidGV4dG9yZCIsbW9kZTp0aGlzLm1vZGUsdGV4dDoiXFxwcmltZSJ9LHU9W2xdO2Zvcih0aGlzLmNvbnN1bWUoKTt0aGlzLmZldGNoKCkudGV4dD09PSInIjspdS5wdXNoKGwpLHRoaXMuY29uc3VtZSgpO3RoaXMuZmV0Y2goKS50ZXh0PT09Il4iJiZ1LnB1c2godGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1cGVyc2NyaXB0IikpLG49e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5OnV9fWVsc2UgaWYoczRbYS50ZXh0XSl7dmFyIGg9SUcudGVzdChhLnRleHQpLGY9W107Zm9yKGYucHVzaChuZXcgQ28oczRbYS50ZXh0XSkpLHRoaXMuY29uc3VtZSgpOzspe3ZhciBkPXRoaXMuZmV0Y2goKS50ZXh0O2lmKCFzNFtkXXx8SUcudGVzdChkKSE9PWgpYnJlYWs7Zi51bnNoaWZ0KG5ldyBDbyhzNFtkXSkpLHRoaXMuY29uc3VtZSgpfXZhciBwPXRoaXMuc3VicGFyc2UoZik7aD9pPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfTpuPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfX1lbHNlIGJyZWFrfXJldHVybiBufHxpP3t0eXBlOiJzdXBzdWIiLG1vZGU6dGhpcy5tb2RlLGJhc2U6cixzdXA6bixzdWI6aX06cn1wYXJzZUZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE9b2hbaV07aWYoIWEpcmV0dXJuIG51bGw7aWYodGhpcy5jb25zdW1lKCksciYmciE9PSJhdG9tIiYmIWEuYWxsb3dlZEluQXJndW1lbnQpdGhyb3cgbmV3IHV0KCJHb3QgZnVuY3Rpb24gJyIraSsiJyB3aXRoIG5vIGFyZ3VtZW50cyIrKHI/IiBhcyAiK3I6IiIpLG4pO2lmKHRoaXMubW9kZT09PSJ0ZXh0IiYmIWEuYWxsb3dlZEluVGV4dCl0aHJvdyBuZXcgdXQoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIHRleHQgbW9kZSIsbik7aWYodGhpcy5tb2RlPT09Im1hdGgiJiZhLmFsbG93ZWRJbk1hdGg9PT0hMSl0aHJvdyBuZXcgdXQoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIG1hdGggbW9kZSIsbik7dmFye2FyZ3M6cyxvcHRBcmdzOmx9PXRoaXMucGFyc2VBcmd1bWVudHMoaSxhKTtyZXR1cm4gdGhpcy5jYWxsRnVuY3Rpb24oaSxzLGwsbixlKX1jYWxsRnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz17ZnVuY05hbWU6ZSxwYXJzZXI6dGhpcyx0b2tlbjppLGJyZWFrT25Ub2tlblRleHQ6YX0sbD1vaFtlXTtpZihsJiZsLmhhbmRsZXIpcmV0dXJuIGwuaGFuZGxlcihzLHIsbik7dGhyb3cgbmV3IHV0KCJObyBmdW5jdGlvbiBoYW5kbGVyIGZvciAiK2UpfXBhcnNlQXJndW1lbnRzKGUscil7dmFyIG49ci5udW1BcmdzK3IubnVtT3B0aW9uYWxBcmdzO2lmKG49PT0wKXJldHVybnthcmdzOltdLG9wdEFyZ3M6W119O2Zvcih2YXIgaT1bXSxhPVtdLHM9MDtzPG47cysrKXt2YXIgbD1yLmFyZ1R5cGVzJiZyLmFyZ1R5cGVzW3NdLHU9czxyLm51bU9wdGlvbmFsQXJnczsoci5wcmltaXRpdmUmJmw9PW51bGx8fHIudHlwZT09PSJzcXJ0IiYmcz09PTEmJmFbMF09PW51bGwpJiYobD0icHJpbWl0aXZlIik7dmFyIGg9dGhpcy5wYXJzZUdyb3VwT2ZUeXBlKCJhcmd1bWVudCB0byAnIitlKyInIixsLHUpO2lmKHUpYS5wdXNoKGgpO2Vsc2UgaWYoaCE9bnVsbClpLnB1c2goaCk7ZWxzZSB0aHJvdyBuZXcgdXQoIk51bGwgYXJndW1lbnQsIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyIpfXJldHVybnthcmdzOmksb3B0QXJnczphfX1wYXJzZUdyb3VwT2ZUeXBlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJjb2xvciI6cmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG4pO2Nhc2Uic2l6ZSI6cmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAobik7Y2FzZSJ1cmwiOnJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAobik7Y2FzZSJtYXRoIjpjYXNlInRleHQiOnJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChuLHIpO2Nhc2UiaGJveCI6e3ZhciBpPXRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4sInRleHQiKTtyZXR1cm4gaSE9bnVsbD97dHlwZToic3R5bGluZyIsbW9kZTppLm1vZGUsYm9keTpbaV0sc3R5bGU6InRleHQifTpudWxsfWNhc2UicmF3Ijp7dmFyIGE9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJyYXciLG4pO3JldHVybiBhIT1udWxsP3t0eXBlOiJyYXciLG1vZGU6InRleHQiLHN0cmluZzphLnRleHR9Om51bGx9Y2FzZSJwcmltaXRpdmUiOntpZihuKXRocm93IG5ldyB1dCgiQSBwcmltaXRpdmUgYXJndW1lbnQgY2Fubm90IGJlIG9wdGlvbmFsIik7dmFyIHM9dGhpcy5wYXJzZUdyb3VwKGUpO2lmKHM9PW51bGwpdGhyb3cgbmV3IHV0KCJFeHBlY3RlZCBncm91cCBhcyAiK2UsdGhpcy5mZXRjaCgpKTtyZXR1cm4gc31jYXNlIm9yaWdpbmFsIjpjYXNlIG51bGw6Y2FzZSB2b2lkIDA6cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4pO2RlZmF1bHQ6dGhyb3cgbmV3IHV0KCJVbmtub3duIGdyb3VwIHR5cGUgYXMgIitlLHRoaXMuZmV0Y2goKSl9fWNvbnN1bWVTcGFjZXMoKXtmb3IoO3RoaXMuZmV0Y2goKS50ZXh0PT09IiAiOyl0aGlzLmNvbnN1bWUoKX1wYXJzZVN0cmluZ0dyb3VwKGUscil7dmFyIG49dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KHIpO2lmKG49PW51bGwpcmV0dXJuIG51bGw7Zm9yKHZhciBpPSIiLGE7KGE9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiI7KWkrPWEudGV4dCx0aGlzLmNvbnN1bWUoKTtyZXR1cm4gdGhpcy5jb25zdW1lKCksbi50ZXh0PWksbn1wYXJzZVJlZ2V4R3JvdXAoZSxyKXtmb3IodmFyIG49dGhpcy5mZXRjaCgpLGk9bixhPSIiLHM7KHM9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiImJmUudGVzdChhK3MudGV4dCk7KWk9cyxhKz1pLnRleHQsdGhpcy5jb25zdW1lKCk7aWYoYT09PSIiKXRocm93IG5ldyB1dCgiSW52YWxpZCAiK3IrIjogJyIrbi50ZXh0KyInIixuKTtyZXR1cm4gbi5yYW5nZShpLGEpfXBhcnNlQ29sb3JHcm91cChlKXt2YXIgcj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoImNvbG9yIixlKTtpZihyPT1udWxsKXJldHVybiBudWxsO3ZhciBuPS9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyLnRleHQpO2lmKCFuKXRocm93IG5ldyB1dCgiSW52YWxpZCBjb2xvcjogJyIrci50ZXh0KyInIixyKTt2YXIgaT1uWzBdO3JldHVybi9eWzAtOWEtZl17Nn0kL2kudGVzdChpKSYmKGk9IiMiK2kpLHt0eXBlOiJjb2xvci10b2tlbiIsbW9kZTp0aGlzLm1vZGUsY29sb3I6aX19cGFyc2VTaXplR3JvdXAoZSl7dmFyIHIsbj0hMTtpZih0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCksIWUmJnRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI/cj10aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxkK3xcZCtcLlxkKnxcLlxkKikgKlthLXpdezAsMn0gKiQvLCJzaXplIik6cj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInNpemUiLGUpLCFyKXJldHVybiBudWxsOyFlJiZyLnRleHQubGVuZ3RoPT09MCYmKHIudGV4dD0iMHB0IixuPSEwKTt2YXIgaT0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKHIudGV4dCk7aWYoIWkpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIHNpemU6ICciK3IudGV4dCsiJyIscik7dmFyIGE9e251bWJlcjorKGlbMV0raVsyXSksdW5pdDppWzNdfTtpZighRkcoYSkpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIHVuaXQ6ICciK2EudW5pdCsiJyIscik7cmV0dXJue3R5cGU6InNpemUiLG1vZGU6dGhpcy5tb2RlLHZhbHVlOmEsaXNCbGFuazpufX1wYXJzZVVybEdyb3VwKGUpe3RoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDEzKSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMik7dmFyIHI9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJ1cmwiLGUpO2lmKHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDE0KSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMykscj09bnVsbClyZXR1cm4gbnVsbDt2YXIgbj1yLnRleHQucmVwbGFjZSgvXFwoWyMkJSZ+X157fV0pL2csIiQxIik7cmV0dXJue3R5cGU6InVybCIsbW9kZTp0aGlzLm1vZGUsdXJsOm59fXBhcnNlQXJndW1lbnRHcm91cChlLHIpe3ZhciBuPXRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChlKTtpZihuPT1udWxsKXJldHVybiBudWxsO3ZhciBpPXRoaXMubW9kZTtyJiZ0aGlzLnN3aXRjaE1vZGUociksdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBhPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLCJFT0YiKTt0aGlzLmV4cGVjdCgiRU9GIiksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTt2YXIgcz17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpuLmxvYyxib2R5OmF9O3JldHVybiByJiZ0aGlzLnN3aXRjaE1vZGUoaSksc31wYXJzZUdyb3VwKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE7aWYoaT09PSJ7Inx8aT09PSJcXGJlZ2luZ3JvdXAiKXt0aGlzLmNvbnN1bWUoKTt2YXIgcz1pPT09InsiPyJ9IjoiXFxlbmRncm91cCI7dGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBsPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLHMpLHU9dGhpcy5mZXRjaCgpO3RoaXMuZXhwZWN0KHMpLHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCksYT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpZcy5yYW5nZShuLHUpLGJvZHk6bCxzZW1pc2ltcGxlOmk9PT0iXFxiZWdpbmdyb3VwInx8dm9pZCAwfX1lbHNlIGlmKGE9dGhpcy5wYXJzZUZ1bmN0aW9uKHIsZSl8fHRoaXMucGFyc2VTeW1ib2woKSxhPT1udWxsJiZpWzBdPT09IlxcIiYmIV8kLmhhc093blByb3BlcnR5KGkpKXtpZih0aGlzLnNldHRpbmdzLnRocm93T25FcnJvcil0aHJvdyBuZXcgdXQoIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK2ksbik7YT10aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGkpLHRoaXMuY29uc3VtZSgpfXJldHVybiBhfWZvcm1MaWdhdHVyZXMoZSl7Zm9yKHZhciByPWUubGVuZ3RoLTEsbj0wO248cjsrK24pe3ZhciBpPWVbbl0sYT1pLnRleHQ7YT09PSItIiYmZVtuKzFdLnRleHQ9PT0iLSImJihuKzE8ciYmZVtuKzJdLnRleHQ9PT0iLSI/KGUuc3BsaWNlKG4sMyx7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOllzLnJhbmdlKGksZVtuKzJdKSx0ZXh0OiItLS0ifSksci09Mik6KGUuc3BsaWNlKG4sMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOllzLnJhbmdlKGksZVtuKzFdKSx0ZXh0OiItLSJ9KSxyLT0xKSksKGE9PT0iJyJ8fGE9PT0iYCIpJiZlW24rMV0udGV4dD09PWEmJihlLnNwbGljZShuLDIse3R5cGU6InRleHRvcmQiLG1vZGU6InRleHQiLGxvYzpZcy5yYW5nZShpLGVbbisxXSksdGV4dDphK2F9KSxyLT0xKX19cGFyc2VTeW1ib2woKXt2YXIgZT10aGlzLmZldGNoKCkscj1lLnRleHQ7aWYoL15cXHZlcmJbXmEtekEtWl0vLnRlc3Qocikpe3RoaXMuY29uc3VtZSgpO3ZhciBuPXIuc2xpY2UoNSksaT1uLmNoYXJBdCgwKT09PSIqIjtpZihpJiYobj1uLnNsaWNlKDEpKSxuLmxlbmd0aDwyfHxuLmNoYXJBdCgwKSE9PW4uc2xpY2UoLTEpKXRocm93IG5ldyB1dChgXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS0KICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnYCk7cmV0dXJuIG49bi5zbGljZSgxLC0xKSx7dHlwZToidmVyYiIsbW9kZToidGV4dCIsYm9keTpuLHN0YXI6aX19T0cuaGFzT3duUHJvcGVydHkoclswXSkmJiFFblt0aGlzLm1vZGVdW3JbMF1dJiYodGhpcy5zZXR0aW5ncy5zdHJpY3QmJnRoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInVuaWNvZGVUZXh0SW5NYXRoTW9kZSIsJ0FjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSkscj1PR1tyWzBdXStyLnNsaWNlKDEpKTt2YXIgYT11M2UuZXhlYyhyKTthJiYocj1yLnN1YnN0cmluZygwLGEuaW5kZXgpLHI9PT0iaSI/cj0iXHUwMTMxIjpyPT09ImoiJiYocj0iXHUwMjM3IikpO3ZhciBzO2lmKEVuW3RoaXMubW9kZV1bcl0pe3RoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJlRDLmluZGV4T2Yocik+PTAmJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSk7dmFyIGw9RW5bdGhpcy5tb2RlXVtyXS5ncm91cCx1PVlzLnJhbmdlKGUpLGg7aWYobjRlLmhhc093blByb3BlcnR5KGwpKXt2YXIgZj1sO2g9e3R5cGU6ImF0b20iLG1vZGU6dGhpcy5tb2RlLGZhbWlseTpmLGxvYzp1LHRleHQ6cn19ZWxzZSBoPXt0eXBlOmwsbW9kZTp0aGlzLm1vZGUsbG9jOnUsdGV4dDpyfTtzPWh9ZWxzZSBpZihyLmNoYXJDb2RlQXQoMCk+PTEyOCl0aGlzLnNldHRpbmdzLnN0cmljdCYmKEJHKHIuY2hhckNvZGVBdCgwKSk/dGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKTp0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5rbm93blN5bWJvbCIsJ1VucmVjb2duaXplZCBVbmljb2RlIGNoYXJhY3RlciAiJytyWzBdKyciJysoIiAoIityLmNoYXJDb2RlQXQoMCkrIikiKSxlKSkscz17dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOllzLnJhbmdlKGUpLHRleHQ6cn07ZWxzZSByZXR1cm4gbnVsbDtpZih0aGlzLmNvbnN1bWUoKSxhKWZvcih2YXIgZD0wO2Q8YVswXS5sZW5ndGg7ZCsrKXt2YXIgcD1hWzBdW2RdO2lmKCF2Q1twXSl0aHJvdyBuZXcgdXQoIlVua25vd24gYWNjZW50ICcgIitwKyInIixlKTt2YXIgbT12Q1twXVt0aGlzLm1vZGVdfHx2Q1twXS50ZXh0O2lmKCFtKXRocm93IG5ldyB1dCgiQWNjZW50ICIrcCsiIHVuc3VwcG9ydGVkIGluICIrdGhpcy5tb2RlKyIgbW9kZSIsZSk7cz17dHlwZToiYWNjZW50Iixtb2RlOnRoaXMubW9kZSxsb2M6WXMucmFuZ2UoZSksbGFiZWw6bSxpc1N0cmV0Y2h5OiExLGlzU2hpZnR5OiEwLGJhc2U6c319cmV0dXJuIHN9fTtnNC5lbmRPZkV4cHJlc3Npb249WyJ9IiwiXFxlbmRncm91cCIsIlxcZW5kIiwiXFxyaWdodCIsIiYiXTtxQz1vKGZ1bmN0aW9uKGUscil7aWYoISh0eXBlb2YgZT09InN0cmluZyJ8fGUgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkthVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uIik7dmFyIG49bmV3IGc0KGUscik7ZGVsZXRlIG4uZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGRmQHRhZyJdO3ZhciBpPW4ucGFyc2UoKTtpZihkZWxldGUgbi5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcY3VycmVudEBjb2xvciJdLGRlbGV0ZSBuLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxjb2xvciJdLG4uZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpe2lmKCFyLmRpc3BsYXlNb2RlKXRocm93IG5ldyB1dCgiXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9ucyIpO2k9W3t0eXBlOiJ0YWciLG1vZGU6InRleHQiLGJvZHk6aSx0YWc6bi5zdWJwYXJzZShbbmV3IENvKCJcXGRmQHRhZyIpXSl9XX1yZXR1cm4gaX0sInBhcnNlVHJlZSIpLEwkPW8oZnVuY3Rpb24oZSxyLG4pe3IudGV4dENvbnRlbnQ9IiI7dmFyIGk9WEMoZSxuKS50b05vZGUoKTtyLmFwcGVuZENoaWxkKGkpfSwicmVuZGVyIik7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY29tcGF0TW9kZSE9PSJDU1MxQ29tcGF0IiYmKHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIE1ha2Ugc3VyZSB5b3VyIHdlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS4iKSxMJD1vKGZ1bmN0aW9uKCl7dGhyb3cgbmV3IHV0KCJLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIil9LCJyZW5kZXIiKSk7ZDNlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1YQyhlLHIpLnRvTWFya3VwKCk7cmV0dXJuIG59LCJyZW5kZXJUb1N0cmluZyIpLHAzZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IFoxKHIpO3JldHVybiBxQyhlLG4pfSwiZ2VuZXJhdGVQYXJzZVRyZWUiKSxEJD1vKGZ1bmN0aW9uKGUscixuKXtpZihuLnRocm93T25FcnJvcnx8IShlIGluc3RhbmNlb2YgdXQpKXRocm93IGU7dmFyIGk9SWUubWFrZVNwYW4oWyJrYXRleC1lcnJvciJdLFtuZXcgbXMocildKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoInRpdGxlIixlLnRvU3RyaW5nKCkpLGkuc2V0QXR0cmlidXRlKCJzdHlsZSIsImNvbG9yOiIrbi5lcnJvckNvbG9yKSxpfSwicmVuZGVyRXJyb3IiKSxYQz1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IFoxKHIpO3RyeXt2YXIgaT1xQyhlLG4pO3JldHVybiBTNGUoaSxlLG4pfWNhdGNoKGEpe3JldHVybiBEJChhLGUsbil9fSwicmVuZGVyVG9Eb21UcmVlIiksbTNlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1uZXcgWjEocik7dHJ5e3ZhciBpPXFDKGUsbik7cmV0dXJuIEM0ZShpLGUsbil9Y2F0Y2goYSl7cmV0dXJuIEQkKGEsZSxuKX19LCJyZW5kZXJUb0hUTUxUcmVlIiksZzNlPXt2ZXJzaW9uOiIwLjE2LjExIixyZW5kZXI6TCQscmVuZGVyVG9TdHJpbmc6ZDNlLFBhcnNlRXJyb3I6dXQsU0VUVElOR1NfU0NIRU1BOm80LF9fcGFyc2U6cDNlLF9fcmVuZGVyVG9Eb21UcmVlOlhDLF9fcmVuZGVyVG9IVE1MVHJlZTptM2UsX19zZXRGb250TWV0cmljczpRYmUsX19kZWZpbmVTeW1ib2w6RyxfX2RlZmluZUZ1bmN0aW9uOkN0LF9fZGVmaW5lTWFjcm86bGUsX19kb21UcmVlOntTcGFuOnFmLEFuY2hvcjpleSxTeW1ib2xOb2RlOm1zLFN2Z05vZGU6ZmwsUGF0aE5vZGU6SmwsTGluZU5vZGU6dHl9fX0pO2Z1bmN0aW9uIHgzZSgpe2xldCB0PSJkYXRhLXRlbXAtaHJlZi10YXJnZXQiO2FoLmFkZEhvb2soImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsZT0+e2UgaW5zdGFuY2VvZiBFbGVtZW50JiZlLnRhZ05hbWU9PT0iQSImJmUuaGFzQXR0cmlidXRlKCJ0YXJnZXQiKSYmZS5zZXRBdHRyaWJ1dGUodCxlLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iik/PyIiKX0pLGFoLmFkZEhvb2soImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixlPT57ZSBpbnN0YW5jZW9mIEVsZW1lbnQmJmUudGFnTmFtZT09PSJBIiYmZS5oYXNBdHRyaWJ1dGUodCkmJihlLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixlLmdldEF0dHJpYnV0ZSh0KT8/IiIpLGUucmVtb3ZlQXR0cmlidXRlKHQpLGUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKT09PSJfYmxhbmsiJiZlLnNldEF0dHJpYnV0ZSgicmVsIiwibm9vcGVuZXIiKSl9KX12YXIgamYseTNlLHYzZSxPJCxNJCxUcixiM2UsdzNlLFQzZSxrM2UsUCQsRTNlLHhyLFMzZSxDM2Usb3UsakMsQTNlLF8zZSxJJCxLQyxwaSxLZixoaCxqZSxmcj1NKCgpPT57InVzZSBzdHJpY3QiO3NDKCk7amY9LzxiclxzKlwvPz4vZ2kseTNlPW8odD0+dD9QJCh0KS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpLnNwbGl0KCIjYnIjIik6WyIiXSwiZ2V0Um93cyIpLHYzZT0oKCk9PntsZXQgdD0hMTtyZXR1cm4oKT0+e3R8fCh4M2UoKSx0PSEwKX19KSgpO28oeDNlLCJzZXR1cERvbXB1cmlmeUhvb2tzIik7TyQ9byh0PT4odjNlKCksYWguc2FuaXRpemUodCkpLCJyZW1vdmVTY3JpcHQiKSxNJD1vKCh0LGUpPT57aWYoZS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMhPT0hMSl7bGV0IHI9ZS5zZWN1cml0eUxldmVsO3I9PT0iYW50aXNjcmlwdCJ8fHI9PT0ic3RyaWN0Ij90PU8kKHQpOnIhPT0ibG9vc2UiJiYodD1QJCh0KSx0PXQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksdD10LnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSx0PWszZSh0KSl9cmV0dXJuIHR9LCJzYW5pdGl6ZU1vcmUiKSxUcj1vKCh0LGUpPT50JiYoZS5kb21wdXJpZnlDb25maWc/dD1haC5zYW5pdGl6ZShNJCh0LGUpLGUuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOnQ9YWguc2FuaXRpemUoTSQodCxlKSx7Rk9SQklEX1RBR1M6WyJzdHlsZSJdfSkudG9TdHJpbmcoKSx0KSwic2FuaXRpemVUZXh0IiksYjNlPW8oKHQsZSk9PnR5cGVvZiB0PT0ic3RyaW5nIj9Ucih0LGUpOnQuZmxhdCgpLm1hcChyPT5UcihyLGUpKSwic2FuaXRpemVUZXh0T3JBcnJheSIpLHczZT1vKHQ9PmpmLnRlc3QodCksImhhc0JyZWFrcyIpLFQzZT1vKHQ9PnQuc3BsaXQoamYpLCJzcGxpdEJyZWFrcyIpLGszZT1vKHQ9PnQucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpLCJwbGFjZWhvbGRlclRvQnJlYWsiKSxQJD1vKHQ9PnQucmVwbGFjZShqZiwiI2JyIyIpLCJicmVha1RvUGxhY2Vob2xkZXIiKSxFM2U9byh0PT57bGV0IGU9IiI7cmV0dXJuIHQmJihlPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLGU9ZS5yZXBsYWNlQWxsKC9cKC9nLCJcXCgiKSxlPWUucmVwbGFjZUFsbCgvXCkvZywiXFwpIikpLGV9LCJnZXRVcmwiKSx4cj1vKHQ9PiEodD09PSExfHxbImZhbHNlIiwibnVsbCIsIjAiXS5pbmNsdWRlcyhTdHJpbmcodCkudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSwiZXZhbHVhdGUiKSxTM2U9byhmdW5jdGlvbiguLi50KXtsZXQgZT10LmZpbHRlcihyPT4haXNOYU4ocikpO3JldHVybiBNYXRoLm1heCguLi5lKX0sImdldE1heCIpLEMzZT1vKGZ1bmN0aW9uKC4uLnQpe2xldCBlPXQuZmlsdGVyKHI9PiFpc05hTihyKSk7cmV0dXJuIE1hdGgubWluKC4uLmUpfSwiZ2V0TWluIiksb3U9byhmdW5jdGlvbih0KXtsZXQgZT10LnNwbGl0KC8oLCkvKSxyPVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgaT1lW25dO2lmKGk9PT0iLCImJm4+MCYmbisxPGUubGVuZ3RoKXtsZXQgYT1lW24tMV0scz1lW24rMV07QTNlKGEscykmJihpPWErIiwiK3MsbisrLHIucG9wKCkpfXIucHVzaChfM2UoaSkpfXJldHVybiByLmpvaW4oIiIpfSwicGFyc2VHZW5lcmljVHlwZXMiKSxqQz1vKCh0LGUpPT5NYXRoLm1heCgwLHQuc3BsaXQoZSkubGVuZ3RoLTEpLCJjb3VudE9jY3VycmVuY2UiKSxBM2U9bygodCxlKT0+e2xldCByPWpDKHQsIn4iKSxuPWpDKGUsIn4iKTtyZXR1cm4gcj09PTEmJm49PT0xfSwic2hvdWxkQ29tYmluZVNldHMiKSxfM2U9byh0PT57bGV0IGU9akModCwifiIpLHI9ITE7aWYoZTw9MSlyZXR1cm4gdDtlJTIhPT0wJiZ0LnN0YXJ0c1dpdGgoIn4iKSYmKHQ9dC5zdWJzdHJpbmcoMSkscj0hMCk7bGV0IG49Wy4uLnRdLGk9bi5pbmRleE9mKCJ+IiksYT1uLmxhc3RJbmRleE9mKCJ+Iik7Zm9yKDtpIT09LTEmJmEhPT0tMSYmaSE9PWE7KW5baV09IjwiLG5bYV09Ij4iLGk9bi5pbmRleE9mKCJ+IiksYT1uLmxhc3RJbmRleE9mKCJ+Iik7cmV0dXJuIHImJm4udW5zaGlmdCgifiIpLG4uam9pbigiIil9LCJwcm9jZXNzU2V0IiksSSQ9bygoKT0+d2luZG93Lk1hdGhNTEVsZW1lbnQhPT12b2lkIDAsImlzTWF0aE1MU3VwcG9ydGVkIiksS0M9L1wkXCQoLiopXCRcJC9nLHBpPW8odD0+KHQubWF0Y2goS0MpPy5sZW5ndGg/PzApPjAsImhhc0thdGV4IiksS2Y9byhhc3luYyh0LGUpPT57dD1hd2FpdCBoaCh0LGUpO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuaW5uZXJIVE1MPXQsci5pZD0ia2F0ZXgtdGVtcCIsci5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD0iMCIsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5pbnNlcnRBZGphY2VudEVsZW1lbnQoImJlZm9yZWVuZCIscik7bGV0IGk9e3dpZHRoOnIuY2xpZW50V2lkdGgsaGVpZ2h0OnIuY2xpZW50SGVpZ2h0fTtyZXR1cm4gci5yZW1vdmUoKSxpfSwiY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9ucyIpLGhoPW8oYXN5bmModCxlKT0+e2lmKCFwaSh0KSlyZXR1cm4gdDtpZighKEkkKCl8fGUubGVnYWN5TWF0aE1MfHxlLmZvcmNlTGVnYWN5TWF0aE1MKSlyZXR1cm4gdC5yZXBsYWNlKEtDLCJNYXRoTUwgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4iKTtsZXR7ZGVmYXVsdDpyfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUiQoKSxOJCkpLG49ZS5mb3JjZUxlZ2FjeU1hdGhNTHx8IUkkKCkmJmUubGVnYWN5TWF0aE1MPyJodG1sQW5kTWF0aG1sIjoibWF0aG1sIjtyZXR1cm4gdC5zcGxpdChqZikubWFwKGk9PnBpKGkpP2A8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsiPiR7aX08L2Rpdj5gOmA8ZGl2PiR7aX08L2Rpdj5gKS5qb2luKCIiKS5yZXBsYWNlKEtDLChpLGEpPT5yLnJlbmRlclRvU3RyaW5nKGEse3Rocm93T25FcnJvcjohMCxkaXNwbGF5TW9kZTohMCxvdXRwdXQ6bn0pLnJlcGxhY2UoL1xuL2csIiAiKS5yZXBsYWNlKC88YW5ub3RhdGlvbi4qPFwvYW5ub3RhdGlvbj4vZywiIikpfSwicmVuZGVyS2F0ZXgiKSxqZT17Z2V0Um93czp5M2Usc2FuaXRpemVUZXh0OlRyLHNhbml0aXplVGV4dE9yQXJyYXk6YjNlLGhhc0JyZWFrczp3M2Usc3BsaXRCcmVha3M6VDNlLGxpbmVCcmVha1JlZ2V4OmpmLHJlbW92ZVNjcmlwdDpPJCxnZXRVcmw6RTNlLGV2YWx1YXRlOnhyLGdldE1heDpTM2UsZ2V0TWluOkMzZX19KTt2YXIgTDNlLEQzZSxacixfbyxuaT1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7TDNlPW8oZnVuY3Rpb24odCxlKXtmb3IobGV0IHIgb2YgZSl0LmF0dHIoclswXSxyWzFdKX0sImQzQXR0cnMiKSxEM2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49bmV3IE1hcDtyZXR1cm4gcj8obi5zZXQoIndpZHRoIiwiMTAwJSIpLG4uc2V0KCJzdHlsZSIsYG1heC13aWR0aDogJHtlfXB4O2ApKToobi5zZXQoImhlaWdodCIsdCksbi5zZXQoIndpZHRoIixlKSksbn0sImNhbGN1bGF0ZVN2Z1NpemVBdHRycyIpLFpyPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9RDNlKGUscixuKTtMM2UodCxpKX0sImNvbmZpZ3VyZVN2Z1NpemUiKSxfbz1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPWUubm9kZSgpLmdldEJCb3goKSxhPWkud2lkdGgscz1pLmhlaWdodDtZLmluZm8oYFNWRyBib3VuZHM6ICR7YX14JHtzfWAsaSk7bGV0IGw9MCx1PTA7WS5pbmZvKGBHcmFwaCBib3VuZHM6ICR7bH14JHt1fWAsdCksbD1hK3IqMix1PXMrcioyLFkuaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7bH14JHt1fWApLFpyKGUsdSxsLG4pO2xldCBoPWAke2kueC1yfSAke2kueS1yfSAke2kud2lkdGgrMipyfSAke2kuaGVpZ2h0KzIqcn1gO2UuYXR0cigidmlld0JveCIsaCl9LCJzZXR1cEdyYXBoVmlld2JveCIpfSk7dmFyIGs0LE4zZSxCJCxGJCxRQz1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7azQ9e30sTjNlPW8oKHQsZSxyKT0+e2xldCBuPSIiO3JldHVybiB0IGluIGs0JiZrNFt0XT9uPWs0W3RdKHIpOlkud2FybihgTm8gdGhlbWUgZm91bmQgZm9yICR7dH1gKSxgICYgewogICAgZm9udC1mYW1pbHk6ICR7ci5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtyLmZvbnRTaXplfTsKICAgIGZpbGw6ICR7ci50ZXh0Q29sb3J9CiAgfQoKICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi8KCiAgJiAuZXJyb3ItaWNvbiB7CiAgICBmaWxsOiAke3IuZXJyb3JCa2dDb2xvcn07CiAgfQogICYgLmVycm9yLXRleHQgewogICAgZmlsbDogJHtyLmVycm9yVGV4dENvbG9yfTsKICAgIHN0cm9rZTogJHtyLmVycm9yVGV4dENvbG9yfTsKICB9CgogICYgLmVkZ2UtdGhpY2tuZXNzLW5vcm1hbCB7CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgJiAuZWRnZS10aGlja25lc3MtdGhpY2sgewogICAgc3Ryb2tlLXdpZHRoOiAzLjVweAogIH0KICAmIC5lZGdlLXBhdHRlcm4tc29saWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMDsKICB9CiAgJiAuZWRnZS10aGlja25lc3MtaW52aXNpYmxlIHsKICAgIHN0cm9rZS13aWR0aDogMDsKICAgIGZpbGw6IG5vbmU7CiAgfQogICYgLmVkZ2UtcGF0dGVybi1kYXNoZWR7CiAgICBzdHJva2UtZGFzaGFycmF5OiAzOwogIH0KICAuZWRnZS1wYXR0ZXJuLWRvdHRlZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogIH0KCiAgJiAubWFya2VyIHsKICAgIGZpbGw6ICR7ci5saW5lQ29sb3J9OwogICAgc3Ryb2tlOiAke3IubGluZUNvbG9yfTsKICB9CiAgJiAubWFya2VyLmNyb3NzIHsKICAgIHN0cm9rZTogJHtyLmxpbmVDb2xvcn07CiAgfQoKICAmIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHtyLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke3IuZm9udFNpemV9OwogIH0KICAgJiBwIHsKICAgIG1hcmdpbjogMAogICB9CgogICR7bn0KCiAgJHtlfQpgfSwiZ2V0U3R5bGVzIiksQiQ9bygodCxlKT0+e2UhPT12b2lkIDAmJihrNFt0XT1lKX0sImFkZFN0eWxlc0ZvckRpYWdyYW0iKSxGJD1OM2V9KTt2YXIgaXk9e307dnIoaXkse2NsZWFyOigpPT5fcixnZXRBY2NEZXNjcmlwdGlvbjooKT0+RnIsZ2V0QWNjVGl0bGU6KCk9PlByLGdldERpYWdyYW1UaXRsZTooKT0+SnIsc2V0QWNjRGVzY3JpcHRpb246KCk9PkJyLHNldEFjY1RpdGxlOigpPT5ScixzZXREaWFncmFtVGl0bGU6KCk9PmxufSk7dmFyIFpDLEpDLGU3LHQ3LF9yLFJyLFByLEJyLEZyLGxuLEpyLGtpPU0oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtVYSgpO1pDPSIiLEpDPSIiLGU3PSIiLHQ3PW8odD0+VHIodCxTcigpKSwic2FuaXRpemVUZXh0IiksX3I9bygoKT0+e1pDPSIiLGU3PSIiLEpDPSIifSwiY2xlYXIiKSxScj1vKHQ9PntaQz10Nyh0KS5yZXBsYWNlKC9eXHMrL2csIiIpfSwic2V0QWNjVGl0bGUiKSxQcj1vKCgpPT5aQywiZ2V0QWNjVGl0bGUiKSxCcj1vKHQ9PntlNz10Nyh0KS5yZXBsYWNlKC9cblxzKy9nLGAKYCl9LCJzZXRBY2NEZXNjcmlwdGlvbiIpLEZyPW8oKCk9PmU3LCJnZXRBY2NEZXNjcmlwdGlvbiIpLGxuPW8odD0+e0pDPXQ3KHQpfSwic2V0RGlhZ3JhbVRpdGxlIiksSnI9bygoKT0+SkMsImdldERpYWdyYW1UaXRsZSIpfSk7dmFyIHokLFIzZSxkZSxuNyxTNCxpNyxhNyxNM2UsRTQsUWYsYXkscjcsVnQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjskZigpO2h0KCk7VWEoKTtmcigpO25pKCk7UUMoKTtraSgpO3okPVksUjNlPU0xLGRlPVNyLG43PVliLFM0PWloLGk3PW8odD0+VHIodCxkZSgpKSwic2FuaXRpemVUZXh0IiksYTc9X28sTTNlPW8oKCk9Pml5LCJnZXRDb21tb25EYiIpLEU0PXt9LFFmPW8oKHQsZSxyKT0+e0U0W3RdJiZ6JC53YXJuKGBEaWFncmFtIHdpdGggaWQgJHt0fSBhbHJlYWR5IHJlZ2lzdGVyZWQuIE92ZXJ3cml0aW5nLmApLEU0W3RdPWUsciYmT1ModCxyKSxCJCh0LGUuc3R5bGVzKSxlLmluamVjdFV0aWxzPy4oeiQsUjNlLGRlLGk3LGE3LE0zZSgpLCgpPT57fSl9LCJyZWdpc3RlckRpYWdyYW0iKSxheT1vKHQ9PntpZih0IGluIEU0KXJldHVybiBFNFt0XTt0aHJvdyBuZXcgcjcodCl9LCJnZXREaWFncmFtIikscjc9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJEaWFncmFtTm90Rm91bmRFcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGBEaWFncmFtICR7ZX0gbm90IGZvdW5kLmApfX19KTt2YXIgcGwsZmgsWGEsZGwsbmMsc3ksczcsbzcsQzQsQTQsRyQsSTNlLE8zZSxQM2UsQjNlLEYzZSx6M2UsRzNlLCQzZSxWM2UsVTNlLEgzZSxXM2UsWTNlLHEzZSxYM2UsajNlLEszZSwkJCxRM2UsWjNlLFYkLEozZSxlNWUsdDVlLHI1ZSxkaCxuNWUsaTVlLGE1ZSxzNWUsbzVlLG95LGw3PU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtmcigpO2tpKCk7cGw9W10sZmg9WyIiXSxYYT0iZ2xvYmFsIixkbD0iIixuYz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0sc3k9W10sczc9IiIsbzc9ITEsQzQ9NCxBND0yLEkzZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEckfSwiZ2V0QzRUeXBlIiksTzNlPW8oZnVuY3Rpb24odCl7RyQ9VHIodCxkZSgpKX0sInNldEM0VHlwZSIpLFAzZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1KXtpZih0PT1udWxsfHxlPT09dm9pZCAwfHxlPT09bnVsbHx8cj09PXZvaWQgMHx8cj09PW51bGx8fG49PT12b2lkIDB8fG49PT1udWxsKXJldHVybjtsZXQgaD17fSxmPXN5LmZpbmQoZD0+ZC5mcm9tPT09ZSYmZC50bz09PXIpO2lmKGY/aD1mOnN5LnB1c2goaCksaC50eXBlPXQsaC5mcm9tPWUsaC50bz1yLGgubGFiZWw9e3RleHQ6bn0saT09bnVsbCloLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXMoaSlbMF07aFtkXT17dGV4dDpwfX1lbHNlIGgudGVjaG49e3RleHQ6aX07aWYoYT09bnVsbCloLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXMoYSlbMF07aFtkXT17dGV4dDpwfX1lbHNlIGguZGVzY3I9e3RleHQ6YX07aWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyhzKVswXTtoW2RdPXB9ZWxzZSBoLnNwcml0ZT1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXMobClbMF07aFtkXT1wfWVsc2UgaC50YWdzPWw7aWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyh1KVswXTtoW2RdPXB9ZWxzZSBoLmxpbms9dTtoLndyYXA9ZGgoKX0sImFkZFJlbCIpLEIzZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IGw9e30sdT1wbC5maW5kKGg9PmguYWxpYXM9PT1lKTtpZih1JiZlPT09dS5hbGlhcz9sPXU6KGwuYWxpYXM9ZSxwbC5wdXNoKGwpKSxyPT1udWxsP2wubGFiZWw9e3RleHQ6IiJ9OmwubGFiZWw9e3RleHQ6cn0sbj09bnVsbClsLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMobilbMF07bFtoXT17dGV4dDpmfX1lbHNlIGwuZGVzY3I9e3RleHQ6bn07aWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbaCxmXT1PYmplY3QuZW50cmllcyhpKVswXTtsW2hdPWZ9ZWxzZSBsLnNwcml0ZT1pO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMoYSlbMF07bFtoXT1mfWVsc2UgbC50YWdzPWE7aWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbaCxmXT1PYmplY3QuZW50cmllcyhzKVswXTtsW2hdPWZ9ZWxzZSBsLmxpbms9cztsLnR5cGVDNFNoYXBlPXt0ZXh0OnR9LGwucGFyZW50Qm91bmRhcnk9WGEsbC53cmFwPWRoKCl9LCJhZGRQZXJzb25PclN5c3RlbSIpLEYzZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7aWYoZT09PW51bGx8fHI9PT1udWxsKXJldHVybjtsZXQgdT17fSxoPXBsLmZpbmQoZj0+Zi5hbGlhcz09PWUpO2lmKGgmJmU9PT1oLmFsaWFzP3U9aDoodS5hbGlhcz1lLHBsLnB1c2godSkpLHI9PW51bGw/dS5sYWJlbD17dGV4dDoiIn06dS5sYWJlbD17dGV4dDpyfSxuPT1udWxsKXUudGVjaG49e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhuKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS50ZWNobj17dGV4dDpufTtpZihpPT1udWxsKXUuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhpKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS5kZXNjcj17dGV4dDppfTtpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGEpWzBdO3VbZl09ZH1lbHNlIHUuc3ByaXRlPWE7aWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhzKVswXTt1W2ZdPWR9ZWxzZSB1LnRhZ3M9cztpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGwpWzBdO3VbZl09ZH1lbHNlIHUubGluaz1sO3Uud3JhcD1kaCgpLHUudHlwZUM0U2hhcGU9e3RleHQ6dH0sdS5wYXJlbnRCb3VuZGFyeT1YYX0sImFkZENvbnRhaW5lciIpLHozZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7aWYoZT09PW51bGx8fHI9PT1udWxsKXJldHVybjtsZXQgdT17fSxoPXBsLmZpbmQoZj0+Zi5hbGlhcz09PWUpO2lmKGgmJmU9PT1oLmFsaWFzP3U9aDoodS5hbGlhcz1lLHBsLnB1c2godSkpLHI9PW51bGw/dS5sYWJlbD17dGV4dDoiIn06dS5sYWJlbD17dGV4dDpyfSxuPT1udWxsKXUudGVjaG49e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhuKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS50ZWNobj17dGV4dDpufTtpZihpPT1udWxsKXUuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhpKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS5kZXNjcj17dGV4dDppfTtpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGEpWzBdO3VbZl09ZH1lbHNlIHUuc3ByaXRlPWE7aWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhzKVswXTt1W2ZdPWR9ZWxzZSB1LnRhZ3M9cztpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGwpWzBdO3VbZl09ZH1lbHNlIHUubGluaz1sO3Uud3JhcD1kaCgpLHUudHlwZUM0U2hhcGU9e3RleHQ6dH0sdS5wYXJlbnRCb3VuZGFyeT1YYX0sImFkZENvbXBvbmVudCIpLEczZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodD09PW51bGx8fGU9PT1udWxsKXJldHVybjtsZXQgYT17fSxzPW5jLmZpbmQobD0+bC5hbGlhcz09PXQpO2lmKHMmJnQ9PT1zLmFsaWFzP2E9czooYS5hbGlhcz10LG5jLnB1c2goYSkpLGU9PW51bGw/YS5sYWJlbD17dGV4dDoiIn06YS5sYWJlbD17dGV4dDplfSxyPT1udWxsKWEudHlwZT17dGV4dDoic3lzdGVtIn07ZWxzZSBpZih0eXBlb2Ygcj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKHIpWzBdO2FbbF09e3RleHQ6dX19ZWxzZSBhLnR5cGU9e3RleHQ6cn07aWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhuKVswXTthW2xdPXV9ZWxzZSBhLnRhZ3M9bjtpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2FbbF09dX1lbHNlIGEubGluaz1pO2EucGFyZW50Qm91bmRhcnk9WGEsYS53cmFwPWRoKCksZGw9WGEsWGE9dCxmaC5wdXNoKGRsKX0sImFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkiKSwkM2U9byhmdW5jdGlvbih0LGUscixuLGkpe2lmKHQ9PT1udWxsfHxlPT09bnVsbClyZXR1cm47bGV0IGE9e30scz1uYy5maW5kKGw9PmwuYWxpYXM9PT10KTtpZihzJiZ0PT09cy5hbGlhcz9hPXM6KGEuYWxpYXM9dCxuYy5wdXNoKGEpKSxlPT1udWxsP2EubGFiZWw9e3RleHQ6IiJ9OmEubGFiZWw9e3RleHQ6ZX0scj09bnVsbClhLnR5cGU9e3RleHQ6ImNvbnRhaW5lciJ9O2Vsc2UgaWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhyKVswXTthW2xdPXt0ZXh0OnV9fWVsc2UgYS50eXBlPXt0ZXh0OnJ9O2lmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMobilbMF07YVtsXT11fWVsc2UgYS50YWdzPW47aWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhpKVswXTthW2xdPXV9ZWxzZSBhLmxpbms9aTthLnBhcmVudEJvdW5kYXJ5PVhhLGEud3JhcD1kaCgpLGRsPVhhLFhhPXQsZmgucHVzaChkbCl9LCJhZGRDb250YWluZXJCb3VuZGFyeSIpLFYzZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7aWYoZT09PW51bGx8fHI9PT1udWxsKXJldHVybjtsZXQgdT17fSxoPW5jLmZpbmQoZj0+Zi5hbGlhcz09PWUpO2lmKGgmJmU9PT1oLmFsaWFzP3U9aDoodS5hbGlhcz1lLG5jLnB1c2godSkpLHI9PW51bGw/dS5sYWJlbD17dGV4dDoiIn06dS5sYWJlbD17dGV4dDpyfSxuPT1udWxsKXUudHlwZT17dGV4dDoibm9kZSJ9O2Vsc2UgaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhuKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS50eXBlPXt0ZXh0Om59O2lmKGk9PW51bGwpdS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGkpWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LmRlc2NyPXt0ZXh0Oml9O2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMocylbMF07dVtmXT1kfWVsc2UgdS50YWdzPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhsKVswXTt1W2ZdPWR9ZWxzZSB1Lmxpbms9bDt1Lm5vZGVUeXBlPXQsdS5wYXJlbnRCb3VuZGFyeT1YYSx1LndyYXA9ZGgoKSxkbD1YYSxYYT1lLGZoLnB1c2goZGwpfSwiYWRkRGVwbG95bWVudE5vZGUiKSxVM2U9byhmdW5jdGlvbigpe1hhPWRsLGZoLnBvcCgpLGRsPWZoLnBvcCgpLGZoLnB1c2goZGwpfSwicG9wQm91bmRhcnlQYXJzZVN0YWNrIiksSDNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsLHUsaCxmKXtsZXQgZD1wbC5maW5kKHA9PnAuYWxpYXM9PT1lKTtpZighKGQ9PT12b2lkIDAmJihkPW5jLmZpbmQocD0+cC5hbGlhcz09PWUpLGQ9PT12b2lkIDApKSl7aWYociE9bnVsbClpZih0eXBlb2Ygcj09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKHIpWzBdO2RbcF09bX1lbHNlIGQuYmdDb2xvcj1yO2lmKG4hPW51bGwpaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhuKVswXTtkW3BdPW19ZWxzZSBkLmZvbnRDb2xvcj1uO2lmKGkhPW51bGwpaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhpKVswXTtkW3BdPW19ZWxzZSBkLmJvcmRlckNvbG9yPWk7aWYoYSE9bnVsbClpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGEpWzBdO2RbcF09bX1lbHNlIGQuc2hhZG93aW5nPWE7aWYocyE9bnVsbClpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKHMpWzBdO2RbcF09bX1lbHNlIGQuc2hhcGU9cztpZihsIT1udWxsKWlmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMobClbMF07ZFtwXT1tfWVsc2UgZC5zcHJpdGU9bDtpZih1IT1udWxsKWlmKHR5cGVvZiB1PT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXModSlbMF07ZFtwXT1tfWVsc2UgZC50ZWNobj11O2lmKGghPW51bGwpaWYodHlwZW9mIGg9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhoKVswXTtkW3BdPW19ZWxzZSBkLmxlZ2VuZFRleHQ9aDtpZihmIT1udWxsKWlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoZilbMF07ZFtwXT1tfWVsc2UgZC5sZWdlbmRTcHJpdGU9Zn19LCJ1cGRhdGVFbFN0eWxlIiksVzNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyl7bGV0IGw9c3kuZmluZCh1PT51LmZyb209PT1lJiZ1LnRvPT09cik7aWYobCE9PXZvaWQgMCl7aWYobiE9bnVsbClpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFt1LGhdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2xbdV09aH1lbHNlIGwudGV4dENvbG9yPW47aWYoaSE9bnVsbClpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFt1LGhdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2xbdV09aH1lbHNlIGwubGluZUNvbG9yPWk7aWYoYSE9bnVsbClpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFt1LGhdPU9iamVjdC5lbnRyaWVzKGEpWzBdO2xbdV09cGFyc2VJbnQoaCl9ZWxzZSBsLm9mZnNldFg9cGFyc2VJbnQoYSk7aWYocyE9bnVsbClpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFt1LGhdPU9iamVjdC5lbnRyaWVzKHMpWzBdO2xbdV09cGFyc2VJbnQoaCl9ZWxzZSBsLm9mZnNldFk9cGFyc2VJbnQocyl9fSwidXBkYXRlUmVsU3R5bGUiKSxZM2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49QzQsaT1BNDtpZih0eXBlb2YgZT09Im9iamVjdCIpe2xldCBhPU9iamVjdC52YWx1ZXMoZSlbMF07bj1wYXJzZUludChhKX1lbHNlIG49cGFyc2VJbnQoZSk7aWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXQgYT1PYmplY3QudmFsdWVzKHIpWzBdO2k9cGFyc2VJbnQoYSl9ZWxzZSBpPXBhcnNlSW50KHIpO24+PTEmJihDND1uKSxpPj0xJiYoQTQ9aSl9LCJ1cGRhdGVMYXlvdXRDb25maWciKSxxM2U9byhmdW5jdGlvbigpe3JldHVybiBDNH0sImdldEM0U2hhcGVJblJvdyIpLFgzZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEE0fSwiZ2V0QzRCb3VuZGFyeUluUm93IiksajNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gWGF9LCJnZXRDdXJyZW50Qm91bmRhcnlQYXJzZSIpLEszZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGRsfSwiZ2V0UGFyZW50Qm91bmRhcnlQYXJzZSIpLCQkPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/cGw6cGwuZmlsdGVyKGU9PmUucGFyZW50Qm91bmRhcnk9PT10KX0sImdldEM0U2hhcGVBcnJheSIpLFEzZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBwbC5maW5kKGU9PmUuYWxpYXM9PT10KX0sImdldEM0U2hhcGUiKSxaM2U9byhmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMoJCQodCkpfSwiZ2V0QzRTaGFwZUtleXMiKSxWJD1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP25jOm5jLmZpbHRlcihlPT5lLnBhcmVudEJvdW5kYXJ5PT09dCl9LCJnZXRCb3VuZGFyaWVzIiksSjNlPVYkLGU1ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHN5fSwiZ2V0UmVscyIpLHQ1ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHM3fSwiZ2V0VGl0bGUiKSxyNWU9byhmdW5jdGlvbih0KXtvNz10fSwic2V0V3JhcCIpLGRoPW8oZnVuY3Rpb24oKXtyZXR1cm4gbzd9LCJhdXRvV3JhcCIpLG41ZT1vKGZ1bmN0aW9uKCl7cGw9W10sbmM9W3thbGlhczoiZ2xvYmFsIixsYWJlbDp7dGV4dDoiZ2xvYmFsIn0sdHlwZTp7dGV4dDoiZ2xvYmFsIn0sdGFnczpudWxsLGxpbms6bnVsbCxwYXJlbnRCb3VuZGFyeToiIn1dLGRsPSIiLFhhPSJnbG9iYWwiLGZoPVsiIl0sc3k9W10sZmg9WyIiXSxzNz0iIixvNz0hMSxDND00LEE0PTJ9LCJjbGVhciIpLGk1ZT17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjV9LGE1ZT17RklMTEVEOjAsT1BFTjoxfSxzNWU9e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LG81ZT1vKGZ1bmN0aW9uKHQpe3M3PVRyKHQsZGUoKSl9LCJzZXRUaXRsZSIpLG95PXthZGRQZXJzb25PclN5c3RlbTpCM2UsYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeTpHM2UsYWRkQ29udGFpbmVyOkYzZSxhZGRDb250YWluZXJCb3VuZGFyeTokM2UsYWRkQ29tcG9uZW50OnozZSxhZGREZXBsb3ltZW50Tm9kZTpWM2UscG9wQm91bmRhcnlQYXJzZVN0YWNrOlUzZSxhZGRSZWw6UDNlLHVwZGF0ZUVsU3R5bGU6SDNlLHVwZGF0ZVJlbFN0eWxlOlczZSx1cGRhdGVMYXlvdXRDb25maWc6WTNlLGF1dG9XcmFwOmRoLHNldFdyYXA6cjVlLGdldEM0U2hhcGVBcnJheTokJCxnZXRDNFNoYXBlOlEzZSxnZXRDNFNoYXBlS2V5czpaM2UsZ2V0Qm91bmRhcmllczpWJCxnZXRCb3VuZGFyeXM6SjNlLGdldEN1cnJlbnRCb3VuZGFyeVBhcnNlOmozZSxnZXRQYXJlbnRCb3VuZGFyeVBhcnNlOkszZSxnZXRSZWxzOmU1ZSxnZXRUaXRsZTp0NWUsZ2V0QzRUeXBlOkkzZSxnZXRDNFNoYXBlSW5Sb3c6cTNlLGdldEM0Qm91bmRhcnlJblJvdzpYM2Usc2V0QWNjVGl0bGU6UnIsZ2V0QWNjVGl0bGU6UHIsZ2V0QWNjRGVzY3JpcHRpb246RnIsc2V0QWNjRGVzY3JpcHRpb246QnIsZ2V0Q29uZmlnOm8oKCk9PmRlKCkuYzQsImdldENvbmZpZyIpLGNsZWFyOm41ZSxMSU5FVFlQRTppNWUsQVJST1dUWVBFOmE1ZSxQTEFDRU1FTlQ6czVlLHNldFRpdGxlOm81ZSxzZXRDNFR5cGU6TzNlfX0pO2Z1bmN0aW9uIFpmKHQsZSl7cmV0dXJuIHQ9PW51bGx8fGU9PW51bGw/TmFOOnQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciBjNz1NKCgpPT57InVzZSBzdHJpY3QiO28oWmYsImFzY2VuZGluZyIpfSk7ZnVuY3Rpb24gdTcodCxlKXtyZXR1cm4gdD09bnVsbHx8ZT09bnVsbD9OYU46ZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFUkPU0oKCk9PnsidXNlIHN0cmljdCI7byh1NywiZGVzY2VuZGluZyIpfSk7ZnVuY3Rpb24gSmYodCl7bGV0IGUscixuO3QubGVuZ3RoIT09Mj8oZT1aZixyPW8oKGwsdSk9PlpmKHQobCksdSksImNvbXBhcmUyIiksbj1vKChsLHUpPT50KGwpLXUsImRlbHRhIikpOihlPXQ9PT1aZnx8dD09PXU3P3Q6bDVlLHI9dCxuPXQpO2Z1bmN0aW9uIGkobCx1LGg9MCxmPWwubGVuZ3RoKXtpZihoPGYpe2lmKGUodSx1KSE9PTApcmV0dXJuIGY7ZG97bGV0IGQ9aCtmPj4+MTtyKGxbZF0sdSk8MD9oPWQrMTpmPWR9d2hpbGUoaDxmKX1yZXR1cm4gaH1vKGksImxlZnQiKTtmdW5jdGlvbiBhKGwsdSxoPTAsZj1sLmxlbmd0aCl7aWYoaDxmKXtpZihlKHUsdSkhPT0wKXJldHVybiBmO2Rve2xldCBkPWgrZj4+PjE7cihsW2RdLHUpPD0wP2g9ZCsxOmY9ZH13aGlsZShoPGYpfXJldHVybiBofW8oYSwicmlnaHQiKTtmdW5jdGlvbiBzKGwsdSxoPTAsZj1sLmxlbmd0aCl7bGV0IGQ9aShsLHUsaCxmLTEpO3JldHVybiBkPmgmJm4obFtkLTFdLHUpPi1uKGxbZF0sdSk/ZC0xOmR9cmV0dXJuIG8ocywiY2VudGVyIikse2xlZnQ6aSxjZW50ZXI6cyxyaWdodDphfX1mdW5jdGlvbiBsNWUoKXtyZXR1cm4gMH12YXIgaDc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjNygpO1UkKCk7byhKZiwiYmlzZWN0b3IiKTtvKGw1ZSwiemVybyIpfSk7ZnVuY3Rpb24gZjcodCl7cmV0dXJuIHQ9PT1udWxsP05hTjordH12YXIgSCQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGY3LCJudW1iZXIiKX0pO3ZhciBXJCxZJCxjNWUsdTVlLGQ3LHEkPU0oKCk9PnsidXNlIHN0cmljdCI7YzcoKTtoNygpO0gkKCk7VyQ9SmYoWmYpLFkkPVckLnJpZ2h0LGM1ZT1XJC5sZWZ0LHU1ZT1KZihmNykuY2VudGVyLGQ3PVkkfSk7ZnVuY3Rpb24gWCQoe19pbnRlcm46dCxfa2V5OmV9LHIpe2xldCBuPWUocik7cmV0dXJuIHQuaGFzKG4pP3QuZ2V0KG4pOnJ9ZnVuY3Rpb24gaDVlKHtfaW50ZXJuOnQsX2tleTplfSxyKXtsZXQgbj1lKHIpO3JldHVybiB0LmhhcyhuKT90LmdldChuKToodC5zZXQobixyKSxyKX1mdW5jdGlvbiBmNWUoe19pbnRlcm46dCxfa2V5OmV9LHIpe2xldCBuPWUocik7cmV0dXJuIHQuaGFzKG4pJiYocj10LmdldChuKSx0LmRlbGV0ZShuKSkscn1mdW5jdGlvbiBkNWUodCl7cmV0dXJuIHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCI/dC52YWx1ZU9mKCk6dH12YXIgbXAsaiQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcD1jbGFzcyBleHRlbmRzIE1hcHtzdGF0aWN7byh0aGlzLCJJbnRlcm5NYXAiKX1jb25zdHJ1Y3RvcihlLHI9ZDVlKXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse19pbnRlcm46e3ZhbHVlOm5ldyBNYXB9LF9rZXk6e3ZhbHVlOnJ9fSksZSE9bnVsbClmb3IobGV0W24saV1vZiBlKXRoaXMuc2V0KG4saSl9Z2V0KGUpe3JldHVybiBzdXBlci5nZXQoWCQodGhpcyxlKSl9aGFzKGUpe3JldHVybiBzdXBlci5oYXMoWCQodGhpcyxlKSl9c2V0KGUscil7cmV0dXJuIHN1cGVyLnNldChoNWUodGhpcyxlKSxyKX1kZWxldGUoZSl7cmV0dXJuIHN1cGVyLmRlbGV0ZShmNWUodGhpcyxlKSl9fTtvKFgkLCJpbnRlcm5fZ2V0Iik7byhoNWUsImludGVybl9zZXQiKTtvKGY1ZSwiaW50ZXJuX2RlbGV0ZSIpO28oZDVlLCJrZXlvZiIpfSk7ZnVuY3Rpb24gXzQodCxlLHIpe2xldCBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nMTAobikpLGE9bi9NYXRoLnBvdygxMCxpKSxzPWE+PXA1ZT8xMDphPj1tNWU/NTphPj1nNWU/MjoxLGwsdSxoO3JldHVybiBpPDA/KGg9TWF0aC5wb3coMTAsLWkpL3MsbD1NYXRoLnJvdW5kKHQqaCksdT1NYXRoLnJvdW5kKGUqaCksbC9oPHQmJisrbCx1L2g+ZSYmLS11LGg9LWgpOihoPU1hdGgucG93KDEwLGkpKnMsbD1NYXRoLnJvdW5kKHQvaCksdT1NYXRoLnJvdW5kKGUvaCksbCpoPHQmJisrbCx1Kmg+ZSYmLS11KSx1PGwmJi41PD1yJiZyPDI/XzQodCxlLHIqMik6W2wsdSxoXX1mdW5jdGlvbiBMNCh0LGUscil7aWYoZT0rZSx0PSt0LHI9K3IsIShyPjApKXJldHVybltdO2lmKHQ9PT1lKXJldHVyblt0XTtsZXQgbj1lPHQsW2ksYSxzXT1uP180KGUsdCxyKTpfNCh0LGUscik7aWYoIShhPj1pKSlyZXR1cm5bXTtsZXQgbD1hLWkrMSx1PW5ldyBBcnJheShsKTtpZihuKWlmKHM8MClmb3IobGV0IGg9MDtoPGw7KytoKXVbaF09KGEtaCkvLXM7ZWxzZSBmb3IobGV0IGg9MDtoPGw7KytoKXVbaF09KGEtaCkqcztlbHNlIGlmKHM8MClmb3IobGV0IGg9MDtoPGw7KytoKXVbaF09KGkraCkvLXM7ZWxzZSBmb3IobGV0IGg9MDtoPGw7KytoKXVbaF09KGkraCkqcztyZXR1cm4gdX1mdW5jdGlvbiBseSh0LGUscil7cmV0dXJuIGU9K2UsdD0rdCxyPStyLF80KHQsZSxyKVsyXX1mdW5jdGlvbiBncCh0LGUscil7ZT0rZSx0PSt0LHI9K3I7bGV0IG49ZTx0LGk9bj9seShlLHQscik6bHkodCxlLHIpO3JldHVybihuPy0xOjEpKihpPDA/MS8taTppKX12YXIgcDVlLG01ZSxnNWUsSyQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwNWU9TWF0aC5zcXJ0KDUwKSxtNWU9TWF0aC5zcXJ0KDEwKSxnNWU9TWF0aC5zcXJ0KDIpO28oXzQsInRpY2tTcGVjIik7byhMNCwidGlja3MiKTtvKGx5LCJ0aWNrSW5jcmVtZW50Iik7byhncCwidGlja1N0ZXAiKX0pO2Z1bmN0aW9uIEQ0KHQsZSl7bGV0IHI7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCluIT1udWxsJiYocjxufHxyPT09dm9pZCAwJiZuPj1uKSYmKHI9bik7ZWxzZXtsZXQgbj0tMTtmb3IobGV0IGkgb2YgdCkoaT1lKGksKytuLHQpKSE9bnVsbCYmKHI8aXx8cj09PXZvaWQgMCYmaT49aSkmJihyPWkpfXJldHVybiByfXZhciBRJD1NKCgpPT57InVzZSBzdHJpY3QiO28oRDQsIm1heCIpfSk7ZnVuY3Rpb24gTjQodCxlKXtsZXQgcjtpZihlPT09dm9pZCAwKWZvcihsZXQgbiBvZiB0KW4hPW51bGwmJihyPm58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPWUoaSwrK24sdCkpIT1udWxsJiYocj5pfHxyPT09dm9pZCAwJiZpPj1pKSYmKHI9aSl9cmV0dXJuIHJ9dmFyIFokPU0oKCk9PnsidXNlIHN0cmljdCI7byhONCwibWluIil9KTtmdW5jdGlvbiBSNCh0LGUscil7dD0rdCxlPStlLHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9yKSl8MCxhPW5ldyBBcnJheShpKTsrK248aTspYVtuXT10K24qcjtyZXR1cm4gYX12YXIgSiQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFI0LCJyYW5nZSIpfSk7dmFyIHBoPU0oKCk9PnsidXNlIHN0cmljdCI7cSQoKTtoNygpO1EkKCk7WiQoKTtKJCgpO0skKCk7aiQoKX0pO2Z1bmN0aW9uIHA3KHQpe3JldHVybiB0fXZhciBlVj1NKCgpPT57InVzZSBzdHJpY3QiO28ocDcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHk1ZSh0KXtyZXR1cm4idHJhbnNsYXRlKCIrdCsiLDApIn1mdW5jdGlvbiB2NWUodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrdCsiKSJ9ZnVuY3Rpb24geDVlKHQpe3JldHVybiBlPT4rdChlKX1mdW5jdGlvbiBiNWUodCxlKXtyZXR1cm4gZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktZSoyKS8yLHQucm91bmQoKSYmKGU9TWF0aC5yb3VuZChlKSkscj0+K3QocikrZX1mdW5jdGlvbiB3NWUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gclYodCxlKXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLGE9NixzPTYsbD0zLHU9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvPjE/MDouNSxoPXQ9PT1JNHx8dD09PU00Py0xOjEsZj10PT09TTR8fHQ9PT1tNz8ieCI6InkiLGQ9dD09PUk0fHx0PT09Zzc/eTVlOnY1ZTtmdW5jdGlvbiBwKG0pe3ZhciBnPW4/PyhlLnRpY2tzP2UudGlja3MuYXBwbHkoZSxyKTplLmRvbWFpbigpKSx5PWk/PyhlLnRpY2tGb3JtYXQ/ZS50aWNrRm9ybWF0LmFwcGx5KGUscik6cDcpLHY9TWF0aC5tYXgoYSwwKStsLHg9ZS5yYW5nZSgpLGI9K3hbMF0rdSx3PSt4W3gubGVuZ3RoLTFdK3UsXz0oZS5iYW5kd2lkdGg/YjVlOng1ZSkoZS5jb3B5KCksdSksVD1tLnNlbGVjdGlvbj9tLnNlbGVjdGlvbigpOm0sRT1ULnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxMPVQuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZyxlKS5vcmRlcigpLEM9TC5leGl0KCksQT1MLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksST1MLnNlbGVjdCgibGluZSIpLEQ9TC5zZWxlY3QoInRleHQiKTtFPUUubWVyZ2UoRS5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksTD1MLm1lcmdlKEEpLEk9SS5tZXJnZShBLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoZisiMiIsaCphKSksRD1ELm1lcmdlKEEuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoZixoKnYpLmF0dHIoImR5Iix0PT09STQ/IjBlbSI6dD09PWc3PyIwLjcxZW0iOiIwLjMyZW0iKSksbSE9PVQmJihFPUUudHJhbnNpdGlvbihtKSxMPUwudHJhbnNpdGlvbihtKSxJPUkudHJhbnNpdGlvbihtKSxEPUQudHJhbnNpdGlvbihtKSxDPUMudHJhbnNpdGlvbihtKS5hdHRyKCJvcGFjaXR5Iix0VikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihrKXtyZXR1cm4gaXNGaW5pdGUoaz1fKGspKT9kKGsrdSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksQS5hdHRyKCJvcGFjaXR5Iix0VikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihrKXt2YXIgUj10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBkKChSJiZpc0Zpbml0ZShSPVIoaykpP1I6XyhrKSkrdSl9KSksQy5yZW1vdmUoKSxFLmF0dHIoImQiLHQ9PT1NNHx8dD09PW03P3M/Ik0iK2gqcysiLCIrYisiSCIrdSsiViIrdysiSCIraCpzOiJNIit1KyIsIitiKyJWIit3OnM/Ik0iK2IrIiwiK2gqcysiViIrdSsiSCIrdysiViIraCpzOiJNIitiKyIsIit1KyJIIit3KSxMLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oayl7cmV0dXJuIGQoXyhrKSt1KX0pLEkuYXR0cihmKyIyIixoKmEpLEQuYXR0cihmLGgqdikudGV4dCh5KSxULmZpbHRlcih3NWUpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLHQ9PT1tNz8ic3RhcnQiOnQ9PT1NND8iZW5kIjoibWlkZGxlIiksVC5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9X30pfXJldHVybiBvKHAsImF4aXMiKSxwLnNjYWxlPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW0scCk6ZX0scC50aWNrcz1mdW5jdGlvbigpe3JldHVybiByPUFycmF5LmZyb20oYXJndW1lbnRzKSxwfSxwLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bT09bnVsbD9bXTpBcnJheS5mcm9tKG0pLHApOnIuc2xpY2UoKX0scC50aWNrVmFsdWVzPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW09PW51bGw/bnVsbDpBcnJheS5mcm9tKG0pLHApOm4mJm4uc2xpY2UoKX0scC50aWNrRm9ybWF0PWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW0scCk6aX0scC50aWNrU2l6ZT1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1zPSttLHApOmF9LHAudGlja1NpemVJbm5lcj1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rbSxwKTphfSxwLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K20scCk6c30scC50aWNrUGFkZGluZz1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rbSxwKTpsfSxwLm9mZnNldD1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rbSxwKTp1fSxwfWZ1bmN0aW9uIHk3KHQpe3JldHVybiByVihJNCx0KX1mdW5jdGlvbiB2Nyh0KXtyZXR1cm4gclYoZzcsdCl9dmFyIEk0LG03LGc3LE00LHRWLG5WPU0oKCk9PnsidXNlIHN0cmljdCI7ZVYoKTtJND0xLG03PTIsZzc9MyxNND00LHRWPTFlLTY7byh5NWUsInRyYW5zbGF0ZVgiKTtvKHY1ZSwidHJhbnNsYXRlWSIpO28oeDVlLCJudW1iZXIiKTtvKGI1ZSwiY2VudGVyIik7byh3NWUsImVudGVyaW5nIik7byhyViwiYXhpcyIpO28oeTcsImF4aXNUb3AiKTtvKHY3LCJheGlzQm90dG9tIil9KTt2YXIgaVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtuVigpfSk7ZnVuY3Rpb24gc1YoKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO3Q8ZTsrK3Qpe2lmKCEobj1hcmd1bWVudHNbdF0rIiIpfHxuIGluIHJ8fC9bXHMuXS8udGVzdChuKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIituKTtyW25dPVtdfXJldHVybiBuZXcgTzQocil9ZnVuY3Rpb24gTzQodCl7dGhpcy5fPXR9ZnVuY3Rpb24gazVlKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihyKXt2YXIgbj0iIixpPXIuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXIuc2xpY2UoaSsxKSxyPXIuc2xpY2UoMCxpKSksciYmIWUuaGFzT3duUHJvcGVydHkocikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrcik7cmV0dXJue3R5cGU6cixuYW1lOm59fSl9ZnVuY3Rpb24gRTVlKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpO3I8bjsrK3IpaWYoKGk9dFtyXSkubmFtZT09PWUpcmV0dXJuIGkudmFsdWV9ZnVuY3Rpb24gYVYodCxlLHIpe2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbilpZih0W25dLm5hbWU9PT1lKXt0W25dPVQ1ZSx0PXQuc2xpY2UoMCxuKS5jb25jYXQodC5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6cn0pLHR9dmFyIFQ1ZSx4NyxvVj1NKCgpPT57InVzZSBzdHJpY3QiO1Q1ZT17dmFsdWU6bygoKT0+e30sInZhbHVlIil9O28oc1YsImRpc3BhdGNoIik7byhPNCwiRGlzcGF0Y2giKTtvKGs1ZSwicGFyc2VUeXBlbmFtZXMiKTtPNC5wcm90b3R5cGU9c1YucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPNCxvbjpvKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fLG49azVlKHQrIiIsciksaSxhPS0xLHM9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrYTxzOylpZigoaT0odD1uW2FdKS50eXBlKSYmKGk9RTVlKHJbaV0sdC5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKGUhPW51bGwmJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxzOylpZihpPSh0PW5bYV0pLnR5cGUpcltpXT1hVihyW2ldLHQubmFtZSxlKTtlbHNlIGlmKGU9PW51bGwpZm9yKGkgaW4gcilyW2ldPWFWKHJbaV0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfSwib24iKSxjb3B5Om8oZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IE80KHQpfSwiY29weSIpLGNhbGw6byhmdW5jdGlvbih0LGUpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLGE7bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKGE9dGhpcy5fW3RdLG49MCxpPWEubGVuZ3RoO248aTsrK24pYVtuXS52YWx1ZS5hcHBseShlLHIpfSwiY2FsbCIpLGFwcGx5Om8oZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX0sImFwcGx5Iil9O28oRTVlLCJnZXQiKTtvKGFWLCJzZXQiKTt4Nz1zVn0pO3ZhciBiNz1NKCgpPT57InVzZSBzdHJpY3QiO29WKCl9KTt2YXIgUDQsdzcsVDc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQND0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsdzc9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOlA0LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBpYyh0KXt2YXIgZT10Kz0iIixyPWUuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYoZT10LnNsaWNlKDAscikpIT09InhtbG5zIiYmKHQ9dC5zbGljZShyKzEpKSx3Ny5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6dzdbZV0sbG9jYWw6dH06dH12YXIgQjQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUNygpO28oaWMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFM1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PVA0JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1QND9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMocix0KX19ZnVuY3Rpb24gQzVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGN5KHQpe3ZhciBlPWljKHQpO3JldHVybihlLmxvY2FsP0M1ZTpTNWUpKGUpfXZhciBrNz1NKCgpPT57InVzZSBzdHJpY3QiO0I0KCk7VDcoKTtvKFM1ZSwiY3JlYXRvckluaGVyaXQiKTtvKEM1ZSwiY3JlYXRvckZpeGVkIik7byhjeSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gQTVlKCl7fWZ1bmN0aW9uIG1oKHQpe3JldHVybiB0PT1udWxsP0E1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fXZhciBGND1NKCgpPT57InVzZSBzdHJpY3QiO28oQTVlLCJub25lIik7byhtaCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRTcodCl7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PW1oKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBhPWVbaV0scz1hLmxlbmd0aCxsPW5baV09bmV3IEFycmF5KHMpLHUsaCxmPTA7ZjxzOysrZikodT1hW2ZdKSYmKGg9dC5jYWxsKHUsdS5fX2RhdGFfXyxmLGEpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxsW2ZdPWgpO3JldHVybiBuZXcgaWkobix0aGlzLl9wYXJlbnRzKX12YXIgbFY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttbCgpO0Y0KCk7byhFNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gUzcodCl7cmV0dXJuIHQ9PW51bGw/W106QXJyYXkuaXNBcnJheSh0KT90OkFycmF5LmZyb20odCl9dmFyIGNWPU0oKCk9PnsidXNlIHN0cmljdCI7byhTNywiYXJyYXkiKX0pO2Z1bmN0aW9uIF81ZSgpe3JldHVybltdfWZ1bmN0aW9uIHlwKHQpe3JldHVybiB0PT1udWxsP181ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fXZhciBDNz1NKCgpPT57InVzZSBzdHJpY3QiO28oXzVlLCJlbXB0eSIpO28oeXAsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEw1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUzcodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBBNyh0KXt0eXBlb2YgdD09ImZ1bmN0aW9uIj90PUw1ZSh0KTp0PXlwKHQpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxuPVtdLGk9W10sYT0wO2E8cjsrK2EpZm9yKHZhciBzPWVbYV0sbD1zLmxlbmd0aCx1LGg9MDtoPGw7KytoKSh1PXNbaF0pJiYobi5wdXNoKHQuY2FsbCh1LHUuX19kYXRhX18saCxzKSksaS5wdXNoKHUpKTtyZXR1cm4gbmV3IGlpKG4saSl9dmFyIHVWPU0oKCk9PnsidXNlIHN0cmljdCI7bWwoKTtjVigpO0M3KCk7byhMNWUsImFycmF5QWxsIik7byhBNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdnAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gejQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoZXModCl9fXZhciB1eT1NKCgpPT57InVzZSBzdHJpY3QiO28odnAsImRlZmF1bHQiKTtvKHo0LCJjaGlsZE1hdGNoZXIiKX0pO2Z1bmN0aW9uIE41ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRDVlLmNhbGwodGhpcy5jaGlsZHJlbix0KX19ZnVuY3Rpb24gUjVlKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9ZnVuY3Rpb24gXzcodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ9PW51bGw/UjVlOk41ZSh0eXBlb2YgdD09ImZ1bmN0aW9uIj90Ono0KHQpKSl9dmFyIEQ1ZSxoVj1NKCgpPT57InVzZSBzdHJpY3QiO3V5KCk7RDVlPUFycmF5LnByb3RvdHlwZS5maW5kO28oTjVlLCJjaGlsZEZpbmQiKTtvKFI1ZSwiY2hpbGRGaXJzdCIpO28oXzcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEk1ZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIE81ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTTVlLmNhbGwodGhpcy5jaGlsZHJlbix0KX19ZnVuY3Rpb24gTDcodCl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKHQ9PW51bGw/STVlOk81ZSh0eXBlb2YgdD09ImZ1bmN0aW9uIj90Ono0KHQpKSl9dmFyIE01ZSxmVj1NKCgpPT57InVzZSBzdHJpY3QiO3V5KCk7TTVlPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7byhJNWUsImNoaWxkcmVuIik7byhPNWUsImNoaWxkcmVuRmlsdGVyIik7byhMNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRDcodCl7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PXZwKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBhPWVbaV0scz1hLmxlbmd0aCxsPW5baV09W10sdSxoPTA7aDxzOysraCkodT1hW2hdKSYmdC5jYWxsKHUsdS5fX2RhdGFfXyxoLGEpJiZsLnB1c2godSk7cmV0dXJuIG5ldyBpaShuLHRoaXMuX3BhcmVudHMpfXZhciBkVj1NKCgpPT57InVzZSBzdHJpY3QiO21sKCk7dXkoKTtvKEQ3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBoeSh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX12YXIgTjc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGh5LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBSNygpe3JldHVybiBuZXcgaWkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaHkpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGZ5KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfXZhciBNNz1NKCgpPT57InVzZSBzdHJpY3QiO043KCk7bWwoKTtvKFI3LCJkZWZhdWx0Iik7byhmeSwiRW50ZXJOb2RlIik7ZnkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmeSxhcHBlbmRDaGlsZDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LCJhcHBlbmRDaGlsZCIpLGluc2VydEJlZm9yZTpvKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0sImluc2VydEJlZm9yZSIpLHF1ZXJ5U2VsZWN0b3I6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LCJxdWVyeVNlbGVjdG9yIikscXVlcnlTZWxlY3RvckFsbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX0sInF1ZXJ5U2VsZWN0b3JBbGwiKX19KTtmdW5jdGlvbiBJNyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIHBWPU0oKCk9PnsidXNlIHN0cmljdCI7byhJNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gUDVlKHQsZSxyLG4saSxhKXtmb3IodmFyIHM9MCxsLHU9ZS5sZW5ndGgsaD1hLmxlbmd0aDtzPGg7KytzKShsPWVbc10pPyhsLl9fZGF0YV9fPWFbc10sbltzXT1sKTpyW3NdPW5ldyBmeSh0LGFbc10pO2Zvcig7czx1OysrcykobD1lW3NdKSYmKGlbc109bCl9ZnVuY3Rpb24gQjVlKHQsZSxyLG4saSxhLHMpe3ZhciBsLHUsaD1uZXcgTWFwLGY9ZS5sZW5ndGgsZD1hLmxlbmd0aCxwPW5ldyBBcnJheShmKSxtO2ZvcihsPTA7bDxmOysrbCkodT1lW2xdKSYmKHBbbF09bT1zLmNhbGwodSx1Ll9fZGF0YV9fLGwsZSkrIiIsaC5oYXMobSk/aVtsXT11Omguc2V0KG0sdSkpO2ZvcihsPTA7bDxkOysrbCltPXMuY2FsbCh0LGFbbF0sbCxhKSsiIiwodT1oLmdldChtKSk/KG5bbF09dSx1Ll9fZGF0YV9fPWFbbF0saC5kZWxldGUobSkpOnJbbF09bmV3IGZ5KHQsYVtsXSk7Zm9yKGw9MDtsPGY7KytsKSh1PWVbbF0pJiZoLmdldChwW2xdKT09PXUmJihpW2xdPXUpfWZ1bmN0aW9uIEY1ZSh0KXtyZXR1cm4gdC5fX2RhdGFfX31mdW5jdGlvbiBPNyh0LGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsRjVlKTt2YXIgcj1lP0I1ZTpQNWUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1JNyh0KSk7Zm9yKHZhciBhPWkubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKXt2YXIgZj1uW2hdLGQ9aVtoXSxwPWQubGVuZ3RoLG09ejVlKHQuY2FsbChmLGYmJmYuX19kYXRhX18saCxuKSksZz1tLmxlbmd0aCx5PWxbaF09bmV3IEFycmF5KGcpLHY9c1toXT1uZXcgQXJyYXkoZykseD11W2hdPW5ldyBBcnJheShwKTtyKGYsZCx5LHYseCxtLGUpO2Zvcih2YXIgYj0wLHc9MCxfLFQ7YjxnOysrYilpZihfPXlbYl0pe2ZvcihiPj13JiYodz1iKzEpOyEoVD12W3ddKSYmKyt3PGc7KTtfLl9uZXh0PVR8fG51bGx9fXJldHVybiBzPW5ldyBpaShzLG4pLHMuX2VudGVyPWwscy5fZXhpdD11LHN9ZnVuY3Rpb24gejVlKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9dmFyIG1WPU0oKCk9PnsidXNlIHN0cmljdCI7bWwoKTtNNygpO3BWKCk7byhQNWUsImJpbmRJbmRleCIpO28oQjVlLCJiaW5kS2V5Iik7byhGNWUsImRhdHVtIik7byhPNywiZGVmYXVsdCIpO28oejVlLCJhcnJheWxpa2UiKX0pO2Z1bmN0aW9uIFA3KCl7cmV0dXJuIG5ldyBpaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGh5KSx0aGlzLl9wYXJlbnRzKX12YXIgZ1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtONygpO21sKCk7byhQNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gQjcodCxlLHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KG49dChuKSxuJiYobj1uLnNlbGVjdGlvbigpKSk6bj1uLmFwcGVuZCh0KyIiKSxlIT1udWxsJiYoaT1lKGkpLGkmJihpPWkuc2VsZWN0aW9uKCkpKSxyPT1udWxsP2EucmVtb3ZlKCk6cihhKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciB5Vj1NKCgpPT57InVzZSBzdHJpY3QiO28oQjcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEY3KHQpe2Zvcih2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQscj10aGlzLl9ncm91cHMsbj1lLl9ncm91cHMsaT1yLmxlbmd0aCxhPW4ubGVuZ3RoLHM9TWF0aC5taW4oaSxhKSxsPW5ldyBBcnJheShpKSx1PTA7dTxzOysrdSlmb3IodmFyIGg9clt1XSxmPW5bdV0sZD1oLmxlbmd0aCxwPWxbdV09bmV3IEFycmF5KGQpLG0sZz0wO2c8ZDsrK2cpKG09aFtnXXx8ZltnXSkmJihwW2ddPW0pO2Zvcig7dTxpOysrdSlsW3VdPXJbdV07cmV0dXJuIG5ldyBpaShsLHRoaXMuX3BhcmVudHMpfXZhciB2Vj1NKCgpPT57InVzZSBzdHJpY3QiO21sKCk7byhGNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gejcoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEscj10Lmxlbmd0aDsrK2U8cjspZm9yKHZhciBuPXRbZV0saT1uLmxlbmd0aC0xLGE9bltpXSxzOy0taT49MDspKHM9bltpXSkmJihhJiZzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpXjQmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxhKSxhPXMpO3JldHVybiB0aGlzfXZhciB4Vj1NKCgpPT57InVzZSBzdHJpY3QiO28oejcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEc3KHQpe3R8fCh0PUc1ZSk7ZnVuY3Rpb24gZShkLHApe3JldHVybiBkJiZwP3QoZC5fX2RhdGFfXyxwLl9fZGF0YV9fKTohZC0hcH1vKGUsImNvbXBhcmVOb2RlIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9MDthPG47KythKXtmb3IodmFyIHM9clthXSxsPXMubGVuZ3RoLHU9aVthXT1uZXcgQXJyYXkobCksaCxmPTA7ZjxsOysrZikoaD1zW2ZdKSYmKHVbZl09aCk7dS5zb3J0KGUpfXJldHVybiBuZXcgaWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIEc1ZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIgYlY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttbCgpO28oRzcsImRlZmF1bHQiKTtvKEc1ZSwiYXNjZW5kaW5nIil9KTtmdW5jdGlvbiAkNygpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgd1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKCQ3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBWNygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfXZhciBUVj1NKCgpPT57InVzZSBzdHJpY3QiO28oVjcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFU3KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAscj10Lmxlbmd0aDtlPHI7KytlKWZvcih2YXIgbj10W2VdLGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpe3ZhciBzPW5baV07aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH12YXIga1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFU3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBINygpe2xldCB0PTA7Zm9yKGxldCBlIG9mIHRoaXMpKyt0O3JldHVybiB0fXZhciBFVj1NKCgpPT57InVzZSBzdHJpY3QiO28oSDcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFc3KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBTVj1NKCgpPT57InVzZSBzdHJpY3QiO28oVzcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFk3KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj0wLG49ZS5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9ZVtyXSxhPTAscz1pLmxlbmd0aCxsO2E8czsrK2EpKGw9aVthXSkmJnQuY2FsbChsLGwuX19kYXRhX18sYSxpKTtyZXR1cm4gdGhpc312YXIgQ1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFk3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFY1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIFU1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEg1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBXNWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQscil9fWZ1bmN0aW9uIFk1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLHIpfX1mdW5jdGlvbiBxNyh0LGUpe3ZhciByPWljKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuIHIubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhyLnNwYWNlLHIubG9jYWwpOm4uZ2V0QXR0cmlidXRlKHIpfXJldHVybiB0aGlzLmVhY2goKGU9PW51bGw/ci5sb2NhbD9WNWU6JDVlOnR5cGVvZiBlPT0iZnVuY3Rpb24iP3IubG9jYWw/WTVlOlc1ZTpyLmxvY2FsP0g1ZTpVNWUpKHIsZSkpfXZhciBBVj1NKCgpPT57InVzZSBzdHJpY3QiO0I0KCk7bygkNWUsImF0dHJSZW1vdmUiKTtvKFY1ZSwiYXR0clJlbW92ZU5TIik7byhVNWUsImF0dHJDb25zdGFudCIpO28oSDVlLCJhdHRyQ29uc3RhbnROUyIpO28oVzVlLCJhdHRyRnVuY3Rpb24iKTtvKFk1ZSwiYXR0ckZ1bmN0aW9uTlMiKTtvKHE3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBkeSh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9dmFyIFg3PU0oKCk9PnsidXNlIHN0cmljdCI7byhkeSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIFg1ZSh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUscil9fWZ1bmN0aW9uIGo1ZSh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfX1mdW5jdGlvbiBqNyh0LGUscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGU9PW51bGw/cTVlOnR5cGVvZiBlPT0iZnVuY3Rpb24iP2o1ZTpYNWUpKHQsZSxyPz8iIikpOmdoKHRoaXMubm9kZSgpLHQpfWZ1bmN0aW9uIGdoKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8ZHkodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9dmFyIEs3PU0oKCk9PnsidXNlIHN0cmljdCI7WDcoKTtvKHE1ZSwic3R5bGVSZW1vdmUiKTtvKFg1ZSwic3R5bGVDb25zdGFudCIpO28oajVlLCJzdHlsZUZ1bmN0aW9uIik7byhqNywiZGVmYXVsdCIpO28oZ2gsInN0eWxlVmFsdWUiKX0pO2Z1bmN0aW9uIEs1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gUTVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBaNWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn19ZnVuY3Rpb24gUTcodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoZT09bnVsbD9LNWU6dHlwZW9mIGU9PSJmdW5jdGlvbiI/WjVlOlE1ZSkodCxlKSk6dGhpcy5ub2RlKClbdF19dmFyIF9WPU0oKCk9PnsidXNlIHN0cmljdCI7byhLNWUsInByb3BlcnR5UmVtb3ZlIik7byhRNWUsInByb3BlcnR5Q29uc3RhbnQiKTtvKFo1ZSwicHJvcGVydHlGdW5jdGlvbiIpO28oUTcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIExWKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBaNyh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBEVih0KX1mdW5jdGlvbiBEVih0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9TFYodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBOVih0LGUpe2Zvcih2YXIgcj1aNyh0KSxuPS0xLGk9ZS5sZW5ndGg7KytuPGk7KXIuYWRkKGVbbl0pfWZ1bmN0aW9uIFJWKHQsZSl7Zm9yKHZhciByPVo3KHQpLG49LTEsaT1lLmxlbmd0aDsrK248aTspci5yZW1vdmUoZVtuXSl9ZnVuY3Rpb24gSjVlKHQpe3JldHVybiBmdW5jdGlvbigpe05WKHRoaXMsdCl9fWZ1bmN0aW9uIGV3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtSVih0aGlzLHQpfX1mdW5jdGlvbiB0d2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TlY6UlYpKHRoaXMsdCl9fWZ1bmN0aW9uIEo3KHQsZSl7dmFyIHI9TFYodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WjcodGhpcy5ub2RlKCkpLGk9LTEsYT1yLmxlbmd0aDsrK2k8YTspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/dHdlOmU/SjVlOmV3ZSkocixlKSl9dmFyIE1WPU0oKCk9PnsidXNlIHN0cmljdCI7byhMViwiY2xhc3NBcnJheSIpO28oWjcsImNsYXNzTGlzdCIpO28oRFYsIkNsYXNzTGlzdCIpO0RWLnByb3RvdHlwZT17YWRkOm8oZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LCJhZGQiKSxyZW1vdmU6byhmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSwicmVtb3ZlIiksY29udGFpbnM6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH0sImNvbnRhaW5zIil9O28oTlYsImNsYXNzZWRBZGQiKTtvKFJWLCJjbGFzc2VkUmVtb3ZlIik7byhKNWUsImNsYXNzZWRUcnVlIik7byhld2UsImNsYXNzZWRGYWxzZSIpO28odHdlLCJjbGFzc2VkRnVuY3Rpb24iKTtvKEo3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiByd2UoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG53ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIGl3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWU/PyIifX1mdW5jdGlvbiBlQSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2godD09bnVsbD9yd2U6KHR5cGVvZiB0PT0iZnVuY3Rpb24iP2l3ZTpud2UpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgSVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHJ3ZSwidGV4dFJlbW92ZSIpO28obndlLCJ0ZXh0Q29uc3RhbnQiKTtvKGl3ZSwidGV4dEZ1bmN0aW9uIik7byhlQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gYXdlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gc3dlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIG93ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1lPz8iIn19ZnVuY3Rpb24gdEEodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHQ9PW51bGw/YXdlOih0eXBlb2YgdD09ImZ1bmN0aW9uIj9vd2U6c3dlKSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBPVj1NKCgpPT57InVzZSBzdHJpY3QiO28oYXdlLCJodG1sUmVtb3ZlIik7byhzd2UsImh0bWxDb25zdGFudCIpO28ob3dlLCJodG1sRnVuY3Rpb24iKTtvKHRBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsd2UoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gckEoKXtyZXR1cm4gdGhpcy5lYWNoKGx3ZSl9dmFyIFBWPU0oKCk9PnsidXNlIHN0cmljdCI7byhsd2UsInJhaXNlIik7byhyQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY3dlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbkEoKXtyZXR1cm4gdGhpcy5lYWNoKGN3ZSl9dmFyIEJWPU0oKCk9PnsidXNlIHN0cmljdCI7byhjd2UsImxvd2VyIik7byhuQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaUEodCl7dmFyIGU9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpjeSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRlY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrNygpO28oaUEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHV3ZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGFBKHQsZSl7dmFyIHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpjeSh0KSxuPWU9PW51bGw/dXdlOnR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6bWgoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciB6Vj1NKCgpPT57InVzZSBzdHJpY3QiO2s3KCk7RjQoKTtvKHV3ZSwiY29uc3RhbnROdWxsIik7byhhQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaHdlKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gc0EoKXtyZXR1cm4gdGhpcy5lYWNoKGh3ZSl9dmFyIEdWPU0oKCk9PnsidXNlIHN0cmljdCI7byhod2UsInJlbW92ZSIpO28oc0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGZ3ZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gZHdlKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBvQSh0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9kd2U6ZndlKX12YXIgJFY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ3ZSwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIpO28oZHdlLCJzZWxlY3Rpb25fY2xvbmVEZWVwIik7byhvQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gbEEodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBWVj1NKCgpPT57InVzZSBzdHJpY3QiO28obEEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHB3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSx0aGlzLl9fZGF0YV9fKX19ZnVuY3Rpb24gbXdlKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9IiIsbj1lLmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9ZS5zbGljZShuKzEpLGU9ZS5zbGljZSgwLG4pKSx7dHlwZTplLG5hbWU6cn19KX1mdW5jdGlvbiBnd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgcj0wLG49LTEsaT1lLmxlbmd0aCxhO3I8aTsrK3IpYT1lW3JdLCghdC50eXBlfHxhLnR5cGU9PT10LnR5cGUpJiZhLm5hbWU9PT10Lm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEudHlwZSxhLmxpc3RlbmVyLGEub3B0aW9ucyk6ZVsrK25dPWE7KytuP2UubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIHl3ZSh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX29uLGksYT1wd2UoZSk7aWYobil7Zm9yKHZhciBzPTAsbD1uLmxlbmd0aDtzPGw7KytzKWlmKChpPW5bc10pLnR5cGU9PT10LnR5cGUmJmkubmFtZT09PXQubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGkudHlwZSxpLmxpc3RlbmVyLGkub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGkudHlwZSxpLmxpc3RlbmVyPWEsaS5vcHRpb25zPXIpLGkudmFsdWU9ZTtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYSxyKSxpPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmEsb3B0aW9uczpyfSxuP24ucHVzaChpKTp0aGlzLl9fb249W2ldfX1mdW5jdGlvbiBjQSh0LGUscil7dmFyIG49bXdlKHQrIiIpLGksYT1uLmxlbmd0aCxzO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGw9dGhpcy5ub2RlKCkuX19vbjtpZihsKXtmb3IodmFyIHU9MCxoPWwubGVuZ3RoLGY7dTxoOysrdSlmb3IoaT0wLGY9bFt1XTtpPGE7KytpKWlmKChzPW5baV0pLnR5cGU9PT1mLnR5cGUmJnMubmFtZT09PWYubmFtZSlyZXR1cm4gZi52YWx1ZX1yZXR1cm59Zm9yKGw9ZT95d2U6Z3dlLGk9MDtpPGE7KytpKXRoaXMuZWFjaChsKG5baV0sZSxyKSk7cmV0dXJuIHRoaXN9dmFyIFVWPU0oKCk9PnsidXNlIHN0cmljdCI7byhwd2UsImNvbnRleHRMaXN0ZW5lciIpO28obXdlLCJwYXJzZVR5cGVuYW1lcyIpO28oZ3dlLCJvblJlbW92ZSIpO28oeXdlLCJvbkFkZCIpO28oY0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEhWKHQsZSxyKXt2YXIgbj1keSh0KSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaShlLHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQoZSxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiB2d2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSFYodGhpcyx0LGUpfX1mdW5jdGlvbiB4d2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSFYodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gdUEodCxlKXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj94d2U6dndlKSh0LGUpKX12YXIgV1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYNygpO28oSFYsImRpc3BhdGNoRXZlbnQiKTtvKHZ3ZSwiZGlzcGF0Y2hDb25zdGFudCIpO28oeHdlLCJkaXNwYXRjaEZ1bmN0aW9uIik7byh1QSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24qaEEoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpZm9yKHZhciBuPXRbZV0saT0wLGE9bi5sZW5ndGgscztpPGE7KytpKShzPW5baV0pJiYoeWllbGQgcyl9dmFyIFlWPU0oKCk9PnsidXNlIHN0cmljdCI7byhoQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaWkodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gcVYoKXtyZXR1cm4gbmV3IGlpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sZkEpfWZ1bmN0aW9uIGJ3ZSgpe3JldHVybiB0aGlzfXZhciBmQSxsdSxtbD1NKCgpPT57InVzZSBzdHJpY3QiO2xWKCk7dVYoKTtoVigpO2ZWKCk7ZFYoKTttVigpO003KCk7Z1YoKTt5VigpO3ZWKCk7eFYoKTtiVigpO3dWKCk7VFYoKTtrVigpO0VWKCk7U1YoKTtDVigpO0FWKCk7SzcoKTtfVigpO01WKCk7SVYoKTtPVigpO1BWKCk7QlYoKTtGVigpO3pWKCk7R1YoKTskVigpO1ZWKCk7VVYoKTtXVigpO1lWKCk7ZkE9W251bGxdO28oaWksIlNlbGVjdGlvbiIpO28ocVYsInNlbGVjdGlvbiIpO28oYndlLCJzZWxlY3Rpb25fc2VsZWN0aW9uIik7aWkucHJvdG90eXBlPXFWLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aWksc2VsZWN0OkU3LHNlbGVjdEFsbDpBNyxzZWxlY3RDaGlsZDpfNyxzZWxlY3RDaGlsZHJlbjpMNyxmaWx0ZXI6RDcsZGF0YTpPNyxlbnRlcjpSNyxleGl0OlA3LGpvaW46QjcsbWVyZ2U6Rjcsc2VsZWN0aW9uOmJ3ZSxvcmRlcjp6Nyxzb3J0Okc3LGNhbGw6JDcsbm9kZXM6Vjcsbm9kZTpVNyxzaXplOkg3LGVtcHR5Olc3LGVhY2g6WTcsYXR0cjpxNyxzdHlsZTpqNyxwcm9wZXJ0eTpRNyxjbGFzc2VkOko3LHRleHQ6ZUEsaHRtbDp0QSxyYWlzZTpyQSxsb3dlcjpuQSxhcHBlbmQ6aUEsaW5zZXJ0OmFBLHJlbW92ZTpzQSxjbG9uZTpvQSxkYXR1bTpsQSxvbjpjQSxkaXNwYXRjaDp1QSxbU3ltYm9sLml0ZXJhdG9yXTpoQX07bHU9cVZ9KTtmdW5jdGlvbiB6ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP25ldyBpaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGlpKFtbdF1dLGZBKX12YXIgWFY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttbCgpO28oemUsImRlZmF1bHQiKX0pO3ZhciBnbD1NKCgpPT57InVzZSBzdHJpY3QiO3V5KCk7QjQoKTtYVigpO21sKCk7RjQoKTtDNygpO0s3KCl9KTt2YXIgalY9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIHloKHQsZSxyKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9dH1mdW5jdGlvbiB4cCh0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgZEE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHloLCJkZWZhdWx0Iik7byh4cCwiZXh0ZW5kIil9KTtmdW5jdGlvbiB2aCgpe31mdW5jdGlvbiBRVigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIF93ZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX1mdW5jdGlvbiBMd2UoKXtyZXR1cm4gaVUodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gWlYoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiB2bCh0KXt2YXIgZSxyO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT13d2UuZXhlYyh0KSk/KHI9ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSxyPT09Nj9KVihlKTpyPT09Mz9uZXcgc2EoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fGUmMjQwLChlJjE1KTw8NHxlJjE1LDEpOnI9PT04P0c0KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKGUmMjU1KS8yNTUpOnI9PT00P0c0KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXxlJjI0MCwoKGUmMTUpPDw0fGUmMTUpLzI1NSk6bnVsbCk6KGU9VHdlLmV4ZWModCkpP25ldyBzYShlWzFdLGVbMl0sZVszXSwxKTooZT1rd2UuZXhlYyh0KSk/bmV3IHNhKGVbMV0qMjU1LzEwMCxlWzJdKjI1NS8xMDAsZVszXSoyNTUvMTAwLDEpOihlPUV3ZS5leGVjKHQpKT9HNChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1Td2UuZXhlYyh0KSk/RzQoZVsxXSoyNTUvMTAwLGVbMl0qMjU1LzEwMCxlWzNdKjI1NS8xMDAsZVs0XSk6KGU9Q3dlLmV4ZWModCkpP3JVKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9QXdlLmV4ZWModCkpP3JVKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6S1YuaGFzT3duUHJvcGVydHkodCk/SlYoS1ZbdF0pOnQ9PT0idHJhbnNwYXJlbnQiP25ldyBzYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEpWKHQpe3JldHVybiBuZXcgc2EodD4+MTYmMjU1LHQ+PjgmMjU1LHQmMjU1LDEpfWZ1bmN0aW9uIEc0KHQsZSxyLG4pe3JldHVybiBuPD0wJiYodD1lPXI9TmFOKSxuZXcgc2EodCxlLHIsbil9ZnVuY3Rpb24gbUEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2aHx8KHQ9dmwodCkpLHQ/KHQ9dC5yZ2IoKSxuZXcgc2EodC5yLHQuZyx0LmIsdC5vcGFjaXR5KSk6bmV3IHNhfWZ1bmN0aW9uIHdwKHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9tQSh0KTpuZXcgc2EodCxlLHIsbj8/MSl9ZnVuY3Rpb24gc2EodCxlLHIsbil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGVVKCl7cmV0dXJuYCMke2VkKHRoaXMucil9JHtlZCh0aGlzLmcpfSR7ZWQodGhpcy5iKX1gfWZ1bmN0aW9uIER3ZSgpe3JldHVybmAjJHtlZCh0aGlzLnIpfSR7ZWQodGhpcy5nKX0ke2VkKHRoaXMuYil9JHtlZCgoaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkqMjU1KX1gfWZ1bmN0aW9uIHRVKCl7bGV0IHQ9VTQodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHt0PT09MT8icmdiKCI6InJnYmEoIn0ke3RkKHRoaXMucil9LCAke3RkKHRoaXMuZyl9LCAke3RkKHRoaXMuYil9JHt0PT09MT8iKSI6YCwgJHt0fSlgfWB9ZnVuY3Rpb24gVTQodCl7cmV0dXJuIGlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKX1mdW5jdGlvbiB0ZCh0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpfWZ1bmN0aW9uIGVkKHQpe3JldHVybiB0PXRkKHQpLCh0PDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gclUodCxlLHIsbil7cmV0dXJuIG48PTA/dD1lPXI9TmFOOnI8PTB8fHI+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyB5bCh0LGUscixuKX1mdW5jdGlvbiBpVSh0KXtpZih0IGluc3RhbmNlb2YgeWwpcmV0dXJuIG5ldyB5bCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB2aHx8KHQ9dmwodCkpLCF0KXJldHVybiBuZXcgeWw7aWYodCBpbnN0YW5jZW9mIHlsKXJldHVybiB0O3Q9dC5yZ2IoKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT1NYXRoLm1pbihlLHIsbiksYT1NYXRoLm1heChlLHIsbikscz1OYU4sbD1hLWksdT0oYStpKS8yO3JldHVybiBsPyhlPT09YT9zPShyLW4pL2wrKHI8bikqNjpyPT09YT9zPShuLWUpL2wrMjpzPShlLXIpL2wrNCxsLz11PC41P2EraToyLWEtaSxzKj02MCk6bD11PjAmJnU8MT8wOnMsbmV3IHlsKHMsbCx1LHQub3BhY2l0eSl9ZnVuY3Rpb24gYVUodCxlLHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2lVKHQpOm5ldyB5bCh0LGUscixuPz8xKX1mdW5jdGlvbiB5bCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gblUodCl7cmV0dXJuIHQ9KHR8fDApJTM2MCx0PDA/dCszNjA6dH1mdW5jdGlvbiAkNCh0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLHR8fDApKX1mdW5jdGlvbiBwQSh0LGUscil7cmV0dXJuKHQ8NjA/ZSsoci1lKSp0LzYwOnQ8MTgwP3I6dDwyNDA/ZSsoci1lKSooMjQwLXQpLzYwOmUpKjI1NX12YXIgcHksVjQsYnAsbXksYWMsd3dlLFR3ZSxrd2UsRXdlLFN3ZSxDd2UsQXdlLEtWLGdBPU0oKCk9PnsidXNlIHN0cmljdCI7ZEEoKTtvKHZoLCJDb2xvciIpO3B5PS43LFY0PTEvcHksYnA9IlxccyooWystXT9cXGQrKVxccyoiLG15PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixhYz0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHd3ZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxUd2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7YnB9LCR7YnB9LCR7YnB9XFwpJGApLGt3ZT1uZXcgUmVnRXhwKGBecmdiXFwoJHthY30sJHthY30sJHthY31cXCkkYCksRXdlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHticH0sJHticH0sJHticH0sJHtteX1cXCkkYCksU3dlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHthY30sJHthY30sJHthY30sJHtteX1cXCkkYCksQ3dlPW5ldyBSZWdFeHAoYF5oc2xcXCgke215fSwke2FjfSwke2FjfVxcKSRgKSxBd2U9bmV3IFJlZ0V4cChgXmhzbGFcXCgke215fSwke2FjfSwke2FjfSwke215fVxcKSRgKSxLVj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTt5aCh2aCx2bCx7Y29weSh0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpRVixmb3JtYXRIZXg6UVYsZm9ybWF0SGV4ODpfd2UsZm9ybWF0SHNsOkx3ZSxmb3JtYXRSZ2I6WlYsdG9TdHJpbmc6WlZ9KTtvKFFWLCJjb2xvcl9mb3JtYXRIZXgiKTtvKF93ZSwiY29sb3JfZm9ybWF0SGV4OCIpO28oTHdlLCJjb2xvcl9mb3JtYXRIc2wiKTtvKFpWLCJjb2xvcl9mb3JtYXRSZ2IiKTtvKHZsLCJjb2xvciIpO28oSlYsInJnYm4iKTtvKEc0LCJyZ2JhIik7byhtQSwicmdiQ29udmVydCIpO28od3AsInJnYiIpO28oc2EsIlJnYiIpO3loKHNhLHdwLHhwKHZoLHticmlnaHRlcih0KXtyZXR1cm4gdD10PT1udWxsP1Y0Ok1hdGgucG93KFY0LHQpLG5ldyBzYSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9weTpNYXRoLnBvdyhweSx0KSxuZXcgc2EodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBzYSh0ZCh0aGlzLnIpLHRkKHRoaXMuZyksdGQodGhpcy5iKSxVNCh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmVVLGZvcm1hdEhleDplVSxmb3JtYXRIZXg4OkR3ZSxmb3JtYXRSZ2I6dFUsdG9TdHJpbmc6dFV9KSk7byhlVSwicmdiX2Zvcm1hdEhleCIpO28oRHdlLCJyZ2JfZm9ybWF0SGV4OCIpO28odFUsInJnYl9mb3JtYXRSZ2IiKTtvKFU0LCJjbGFtcGEiKTtvKHRkLCJjbGFtcGkiKTtvKGVkLCJoZXgiKTtvKHJVLCJoc2xhIik7byhpVSwiaHNsQ29udmVydCIpO28oYVUsImhzbCIpO28oeWwsIkhzbCIpO3loKHlsLGFVLHhwKHZoLHticmlnaHRlcih0KXtyZXR1cm4gdD10PT1udWxsP1Y0Ok1hdGgucG93KFY0LHQpLG5ldyB5bCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gdD10PT1udWxsP3B5Ok1hdGgucG93KHB5LHQpLG5ldyB5bCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciB0PXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKmUsaT0yKnItbjtyZXR1cm4gbmV3IHNhKHBBKHQ+PTI0MD90LTI0MDp0KzEyMCxpLG4pLHBBKHQsaSxuKSxwQSh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGNsYW1wKCl7cmV0dXJuIG5ldyB5bChuVSh0aGlzLmgpLCQ0KHRoaXMucyksJDQodGhpcy5sKSxVNCh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2xldCB0PVU0KHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7dD09PTE/ImhzbCgiOiJoc2xhKCJ9JHtuVSh0aGlzLmgpfSwgJHskNCh0aGlzLnMpKjEwMH0lLCAkeyQ0KHRoaXMubCkqMTAwfSUke3Q9PT0xPyIpIjpgLCAke3R9KWB9YH19KSk7byhuVSwiY2xhbXBoIik7bygkNCwiY2xhbXB0Iik7byhwQSwiaHNsMnJnYiIpfSk7dmFyIHNVLG9VLGxVPU0oKCk9PnsidXNlIHN0cmljdCI7c1U9TWF0aC5QSS8xODAsb1U9MTgwL01hdGguUEl9KTtmdW5jdGlvbiBwVSh0KXtpZih0IGluc3RhbmNlb2Ygc2MpcmV0dXJuIG5ldyBzYyh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBjdSlyZXR1cm4gbVUodCk7dCBpbnN0YW5jZW9mIHNhfHwodD1tQSh0KSk7dmFyIGU9YkEodC5yKSxyPWJBKHQuZyksbj1iQSh0LmIpLGk9eUEoKC4yMjI1MDQ1KmUrLjcxNjg3ODYqcisuMDYwNjE2OSpuKS91VSksYSxzO3JldHVybiBlPT09ciYmcj09PW4/YT1zPWk6KGE9eUEoKC40MzYwNzQ3KmUrLjM4NTA2NDkqcisuMTQzMDgwNCpuKS9jVSkscz15QSgoLjAxMzkzMjIqZSsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL2hVKSksbmV3IHNjKDExNippLTE2LDUwMCooYS1pKSwyMDAqKGktcyksdC5vcGFjaXR5KX1mdW5jdGlvbiB3QSh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/cFUodCk6bmV3IHNjKHQsZSxyLG4/PzEpfWZ1bmN0aW9uIHNjKHQsZSxyLG4pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB5QSh0KXtyZXR1cm4gdD5Od2U/TWF0aC5wb3codCwxLzMpOnQvZFUrZlV9ZnVuY3Rpb24gdkEodCl7cmV0dXJuIHQ+VHA/dCp0KnQ6ZFUqKHQtZlUpfWZ1bmN0aW9uIHhBKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYkEodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gUndlKHQpe2lmKHQgaW5zdGFuY2VvZiBjdSlyZXR1cm4gbmV3IGN1KHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHNjfHwodD1wVSh0KSksdC5hPT09MCYmdC5iPT09MClyZXR1cm4gbmV3IGN1KE5hTiwwPHQubCYmdC5sPDEwMD8wOk5hTix0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKm9VO3JldHVybiBuZXcgY3UoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gZ3kodCxlLHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1J3ZSh0KTpuZXcgY3UodCxlLHIsbj8/MSl9ZnVuY3Rpb24gY3UodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG1VKHQpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBzYyh0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKnNVO3JldHVybiBuZXcgc2ModC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX12YXIgSDQsY1UsdVUsaFUsZlUsVHAsZFUsTndlLGdVPU0oKCk9PnsidXNlIHN0cmljdCI7ZEEoKTtnQSgpO2xVKCk7SDQ9MTgsY1U9Ljk2NDIyLHVVPTEsaFU9LjgyNTIxLGZVPTQvMjksVHA9Ni8yOSxkVT0zKlRwKlRwLE53ZT1UcCpUcCpUcDtvKHBVLCJsYWJDb252ZXJ0Iik7byh3QSwibGFiIik7byhzYywiTGFiIik7eWgoc2Msd0EseHAodmgse2JyaWdodGVyKHQpe3JldHVybiBuZXcgc2ModGhpcy5sK0g0Kih0Pz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gbmV3IHNjKHRoaXMubC1INCoodD8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gZT1jVSp2QShlKSx0PXVVKnZBKHQpLHI9aFUqdkEociksbmV3IHNhKHhBKDMuMTMzODU2MSplLTEuNjE2ODY2Nyp0LS40OTA2MTQ2KnIpLHhBKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqcikseEEoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtvKHlBLCJ4eXoybGFiIik7byh2QSwibGFiMnh5eiIpO28oeEEsImxyZ2IycmdiIik7byhiQSwicmdiMmxyZ2IiKTtvKFJ3ZSwiaGNsQ29udmVydCIpO28oZ3ksImhjbCIpO28oY3UsIkhjbCIpO28obVUsImhjbDJsYWIiKTt5aChjdSxneSx4cCh2aCx7YnJpZ2h0ZXIodCl7cmV0dXJuIG5ldyBjdSh0aGlzLmgsdGhpcy5jLHRoaXMubCtINCoodD8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiBuZXcgY3UodGhpcy5oLHRoaXMuYyx0aGlzLmwtSDQqKHQ/PzEpLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiBtVSh0aGlzKS5yZ2IoKX19KSl9KTt2YXIga3A9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtnQSgpO2dVKCl9KTtmdW5jdGlvbiBUQSh0LGUscixuLGkpe3ZhciBhPXQqdCxzPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1zKSplKyg0LTYqYSszKnMpKnIrKDErMyp0KzMqYS0zKnMpKm4rcyppKS82fWZ1bmN0aW9uIGtBKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSxlLTEpOk1hdGguZmxvb3IociplKSxpPXRbbl0sYT10W24rMV0scz1uPjA/dFtuLTFdOjIqaS1hLGw9bjxlLTE/dFtuKzJdOjIqYS1pO3JldHVybiBUQSgoci1uL2UpKmUscyxpLGEsbCl9fXZhciBFQT1NKCgpPT57InVzZSBzdHJpY3QiO28oVEEsImJhc2lzIik7byhrQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gU0EodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSplKSxpPXRbKG4rZS0xKSVlXSxhPXRbbiVlXSxzPXRbKG4rMSklZV0sbD10WyhuKzIpJWVdO3JldHVybiBUQSgoci1uL2UpKmUsaSxhLHMsbCl9fXZhciB5VT1NKCgpPT57InVzZSBzdHJpY3QiO0VBKCk7byhTQSwiZGVmYXVsdCIpfSk7dmFyIEVwLENBPU0oKCk9PnsidXNlIHN0cmljdCI7RXA9byh0PT4oKT0+dCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdlUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBNd2UodCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX1mdW5jdGlvbiB4VSh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj92VSh0LHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6RXAoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBiVSh0KXtyZXR1cm4odD0rdCk9PTE/dXU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gci1lP013ZShlLHIsdCk6RXAoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gdXUodCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/dlUodCxyKTpFcChpc05hTih0KT9lOnQpfXZhciBBQT1NKCgpPT57InVzZSBzdHJpY3QiO0NBKCk7byh2VSwibGluZWFyIik7byhNd2UsImV4cG9uZW50aWFsIik7byh4VSwiaHVlIik7byhiVSwiZ2FtbWEiKTtvKHV1LCJub2dhbW1hIil9KTtmdW5jdGlvbiB3VSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocikscyxsO2ZvcihzPTA7czxyOysrcylsPXdwKGVbc10pLG5bc109bC5yfHwwLGlbc109bC5nfHwwLGFbc109bC5ifHwwO3JldHVybiBuPXQobiksaT10KGkpLGE9dChhKSxsLm9wYWNpdHk9MSxmdW5jdGlvbih1KXtyZXR1cm4gbC5yPW4odSksbC5nPWkodSksbC5iPWEodSksbCsiIn19fXZhciByZCxJd2UsT3dlLF9BPU0oKCk9PnsidXNlIHN0cmljdCI7a3AoKTtFQSgpO3lVKCk7QUEoKTtyZD1vKGZ1bmN0aW9uIHQoZSl7dmFyIHI9YlUoZSk7ZnVuY3Rpb24gbihpLGEpe3ZhciBzPXIoKGk9d3AoaSkpLnIsKGE9d3AoYSkpLnIpLGw9cihpLmcsYS5nKSx1PXIoaS5iLGEuYiksaD11dShpLm9wYWNpdHksYS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGkucj1zKGYpLGkuZz1sKGYpLGkuYj11KGYpLGkub3BhY2l0eT1oKGYpLGkrIiJ9fXJldHVybiBvKG4sInJnYiIpLG4uZ2FtbWE9dCxufSwicmdiR2FtbWEiKSgxKTtvKHdVLCJyZ2JTcGxpbmUiKTtJd2U9d1Uoa0EpLE93ZT13VShTQSl9KTtmdW5jdGlvbiBMQSh0LGUpe2V8fChlPVtdKTt2YXIgcj10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLG49ZS5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihpPTA7aTxyOysraSluW2ldPXRbaV0qKDEtYSkrZVtpXSphO3JldHVybiBufX1mdW5jdGlvbiBUVSh0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIGtVPU0oKCk9PnsidXNlIHN0cmljdCI7byhMQSwiZGVmYXVsdCIpO28oVFUsImlzTnVtYmVyQXJyYXkiKX0pO2Z1bmN0aW9uIEVVKHQsZSl7dmFyIHI9ZT9lLmxlbmd0aDowLG49dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KHIpLHM7Zm9yKHM9MDtzPG47KytzKWlbc109eGgodFtzXSxlW3NdKTtmb3IoO3M8cjsrK3MpYVtzXT1lW3NdO3JldHVybiBmdW5jdGlvbihsKXtmb3Iocz0wO3M8bjsrK3MpYVtzXT1pW3NdKGwpO3JldHVybiBhfX12YXIgU1U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXNCgpO28oRVUsImdlbmVyaWNBcnJheSIpfSk7ZnVuY3Rpb24gREEodCxlKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUodCooMS1uKStlKm4pLHJ9fXZhciBDVT1NKCgpPT57InVzZSBzdHJpY3QiO28oREEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEtpKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fXZhciB5eT1NKCgpPT57InVzZSBzdHJpY3QiO28oS2ksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIE5BKHQsZSl7dmFyIHI9e30sbj17fSxpOyh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pLChlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pO2ZvcihpIGluIGUpaSBpbiB0P3JbaV09eGgodFtpXSxlW2ldKTpuW2ldPWVbaV07cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihpIGluIHIpbltpXT1yW2ldKGEpO3JldHVybiBufX12YXIgQVU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXNCgpO28oTkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFB3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gQndlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19ZnVuY3Rpb24gU3AodCxlKXt2YXIgcj1NQS5sYXN0SW5kZXg9UkEubGFzdEluZGV4PTAsbixpLGEscz0tMSxsPVtdLHU9W107Zm9yKHQ9dCsiIixlPWUrIiI7KG49TUEuZXhlYyh0KSkmJihpPVJBLmV4ZWMoZSkpOykoYT1pLmluZGV4KT5yJiYoYT1lLnNsaWNlKHIsYSksbFtzXT9sW3NdKz1hOmxbKytzXT1hKSwobj1uWzBdKT09PShpPWlbMF0pP2xbc10/bFtzXSs9aTpsWysrc109aToobFsrK3NdPW51bGwsdS5wdXNoKHtpOnMseDpLaShuLGkpfSkpLHI9UkEubGFzdEluZGV4O3JldHVybiByPGUubGVuZ3RoJiYoYT1lLnNsaWNlKHIpLGxbc10/bFtzXSs9YTpsWysrc109YSksbC5sZW5ndGg8Mj91WzBdP0J3ZSh1WzBdLngpOlB3ZShlKTooZT11Lmxlbmd0aCxmdW5jdGlvbihoKXtmb3IodmFyIGY9MCxkO2Y8ZTsrK2YpbFsoZD11W2ZdKS5pXT1kLngoaCk7cmV0dXJuIGwuam9pbigiIil9KX12YXIgTUEsUkEsSUE9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5eSgpO01BPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxSQT1uZXcgUmVnRXhwKE1BLnNvdXJjZSwiZyIpO28oUHdlLCJ6ZXJvIik7byhCd2UsIm9uZSIpO28oU3AsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHhoKHQsZSl7dmFyIHI9dHlwZW9mIGUsbjtyZXR1cm4gZT09bnVsbHx8cj09PSJib29sZWFuIj9FcChlKToocj09PSJudW1iZXIiP0tpOnI9PT0ic3RyaW5nIj8obj12bChlKSk/KGU9bixyZCk6U3A6ZSBpbnN0YW5jZW9mIHZsP3JkOmUgaW5zdGFuY2VvZiBEYXRlP0RBOlRVKGUpP0xBOkFycmF5LmlzQXJyYXkoZSk/RVU6dHlwZW9mIGUudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKGUpP05BOktpKSh0LGUpfXZhciBXND1NKCgpPT57InVzZSBzdHJpY3QiO2twKCk7X0EoKTtTVSgpO0NVKCk7eXkoKTtBVSgpO0lBKCk7Q0EoKTtrVSgpO28oeGgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFk0KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLXIpK2Uqcil9fXZhciBfVT1NKCgpPT57InVzZSBzdHJpY3QiO28oWTQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFg0KHQsZSxyLG4saSxhKXt2YXIgcyxsLHU7cmV0dXJuKHM9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPXMsZS89cyksKHU9dCpyK2UqbikmJihyLT10KnUsbi09ZSp1KSwobD1NYXRoLnNxcnQocipyK24qbikpJiYoci89bCxuLz1sLHUvPWwpLHQqbjxlKnImJih0PS10LGU9LWUsdT0tdSxzPS1zKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKkxVLHNrZXdYOk1hdGguYXRhbih1KSpMVSxzY2FsZVg6cyxzY2FsZVk6bH19dmFyIExVLHE0LERVPU0oKCk9PnsidXNlIHN0cmljdCI7TFU9MTgwL01hdGguUEkscTQ9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07byhYNCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTlUodCl7bGV0IGU9bmV3KHR5cGVvZiBET01NYXRyaXg9PSJmdW5jdGlvbiI/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkodCsiIik7cmV0dXJuIGUuaXNJZGVudGl0eT9xNDpYNChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZil9ZnVuY3Rpb24gUlUodCl7cmV0dXJuIHQ9PW51bGw/cTQ6KGo0fHwoajQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksajQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PWo0LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyh0PXQubWF0cml4LFg0KHQuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKSk6cTQpfXZhciBqNCxNVT1NKCgpPT57InVzZSBzdHJpY3QiO0RVKCk7byhOVSwicGFyc2VDc3MiKTtvKFJVLCJwYXJzZVN2ZyIpfSk7ZnVuY3Rpb24gSVUodCxlLHIsbil7ZnVuY3Rpb24gaShoKXtyZXR1cm4gaC5sZW5ndGg/aC5wb3AoKSsiICI6IiJ9byhpLCJwb3AiKTtmdW5jdGlvbiBhKGgsZixkLHAsbSxnKXtpZihoIT09ZHx8ZiE9PXApe3ZhciB5PW0ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwscik7Zy5wdXNoKHtpOnktNCx4OktpKGgsZCl9LHtpOnktMix4OktpKGYscCl9KX1lbHNlKGR8fHApJiZtLnB1c2goInRyYW5zbGF0ZSgiK2QrZStwK3IpfW8oYSwidHJhbnNsYXRlIik7ZnVuY3Rpb24gcyhoLGYsZCxwKXtoIT09Zj8oaC1mPjE4MD9mKz0zNjA6Zi1oPjE4MCYmKGgrPTM2MCkscC5wdXNoKHtpOmQucHVzaChpKGQpKyJyb3RhdGUoIixudWxsLG4pLTIseDpLaShoLGYpfSkpOmYmJmQucHVzaChpKGQpKyJyb3RhdGUoIitmK24pfW8ocywicm90YXRlIik7ZnVuY3Rpb24gbChoLGYsZCxwKXtoIT09Zj9wLnB1c2goe2k6ZC5wdXNoKGkoZCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6S2koaCxmKX0pOmYmJmQucHVzaChpKGQpKyJza2V3WCgiK2Yrbil9byhsLCJza2V3WCIpO2Z1bmN0aW9uIHUoaCxmLGQscCxtLGcpe2lmKGghPT1kfHxmIT09cCl7dmFyIHk9bS5wdXNoKGkobSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2cucHVzaCh7aTp5LTQseDpLaShoLGQpfSx7aTp5LTIseDpLaShmLHApfSl9ZWxzZShkIT09MXx8cCE9PTEpJiZtLnB1c2goaShtKSsic2NhbGUoIitkKyIsIitwKyIpIil9cmV0dXJuIG8odSwic2NhbGUiKSxmdW5jdGlvbihoLGYpe3ZhciBkPVtdLHA9W107cmV0dXJuIGg9dChoKSxmPXQoZiksYShoLnRyYW5zbGF0ZVgsaC50cmFuc2xhdGVZLGYudHJhbnNsYXRlWCxmLnRyYW5zbGF0ZVksZCxwKSxzKGgucm90YXRlLGYucm90YXRlLGQscCksbChoLnNrZXdYLGYuc2tld1gsZCxwKSx1KGguc2NhbGVYLGguc2NhbGVZLGYuc2NhbGVYLGYuc2NhbGVZLGQscCksaD1mPW51bGwsZnVuY3Rpb24obSl7Zm9yKHZhciBnPS0xLHk9cC5sZW5ndGgsdjsrK2c8eTspZFsodj1wW2ddKS5pXT12LngobSk7cmV0dXJuIGQuam9pbigiIil9fX12YXIgT0EsUEEsT1U9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5eSgpO01VKCk7byhJVSwiaW50ZXJwb2xhdGVUcmFuc2Zvcm0iKTtPQT1JVShOVSwicHgsICIsInB4KSIsImRlZykiKSxQQT1JVShSVSwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gUFUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dCgoZT1neShlKSkuaCwocj1neShyKSkuaCksaT11dShlLmMsci5jKSxhPXV1KGUubCxyLmwpLHM9dXUoZS5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBlLmg9bihsKSxlLmM9aShsKSxlLmw9YShsKSxlLm9wYWNpdHk9cyhsKSxlKyIifX19dmFyIEJBLEZ3ZSxCVT1NKCgpPT57InVzZSBzdHJpY3QiO2twKCk7QUEoKTtvKFBVLCJoY2wiKTtCQT1QVSh4VSksRndlPVBVKHV1KX0pO3ZhciBDcD1NKCgpPT57InVzZSBzdHJpY3QiO1c0KCk7eXkoKTtfVSgpO0lBKCk7T1UoKTtfQSgpO0JVKCl9KTtmdW5jdGlvbiBreSgpe3JldHVybiBuZHx8KEdVKHp3ZSksbmQ9d3kubm93KCkrWjQpfWZ1bmN0aW9uIHp3ZSgpe25kPTB9ZnVuY3Rpb24gVHkoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEo0KHQsZSxyKXt2YXIgbj1uZXcgVHk7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiAkVSgpe2t5KCksKytBcDtmb3IodmFyIHQ9SzQsZTt0OykoZT1uZC10Ll90aW1lKT49MCYmdC5fY2FsbC5jYWxsKHZvaWQgMCxlKSx0PXQuX25leHQ7LS1BcH1mdW5jdGlvbiBGVSgpe25kPShRND13eS5ub3coKSkrWjQsQXA9eHk9MDt0cnl7JFUoKX1maW5hbGx5e0FwPTAsJHdlKCksbmQ9MH19ZnVuY3Rpb24gR3dlKCl7dmFyIHQ9d3kubm93KCksZT10LVE0O2U+elUmJihaNC09ZSxRND10KX1mdW5jdGlvbiAkd2UoKXtmb3IodmFyIHQsZT1LNCxyLG49MS8wO2U7KWUuX2NhbGw/KG4+ZS5fdGltZSYmKG49ZS5fdGltZSksdD1lLGU9ZS5fbmV4dCk6KHI9ZS5fbmV4dCxlLl9uZXh0PW51bGwsZT10P3QuX25leHQ9cjpLND1yKTtieT10LEZBKG4pfWZ1bmN0aW9uIEZBKHQpe2lmKCFBcCl7eHkmJih4eT1jbGVhclRpbWVvdXQoeHkpKTt2YXIgZT10LW5kO2U+MjQ/KHQ8MS8wJiYoeHk9c2V0VGltZW91dChGVSx0LXd5Lm5vdygpLVo0KSksdnkmJih2eT1jbGVhckludGVydmFsKHZ5KSkpOih2eXx8KFE0PXd5Lm5vdygpLHZ5PXNldEludGVydmFsKEd3ZSx6VSkpLEFwPTEsR1UoRlUpKX19dmFyIEFwLHh5LHZ5LHpVLEs0LGJ5LFE0LG5kLFo0LHd5LEdVLHpBPU0oKCk9PnsidXNlIHN0cmljdCI7QXA9MCx4eT0wLHZ5PTAselU9MWUzLFE0PTAsbmQ9MCxaND0wLHd5PXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEdVPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O28oa3ksIm5vdyIpO28oendlLCJjbGVhck5vdyIpO28oVHksIlRpbWVyIik7VHkucHJvdG90eXBlPUo0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VHkscmVzdGFydDpvKGZ1bmN0aW9uKHQsZSxyKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/a3koKTorcikrKGU9PW51bGw/MDorZSksIXRoaXMuX25leHQmJmJ5IT09dGhpcyYmKGJ5P2J5Ll9uZXh0PXRoaXM6SzQ9dGhpcyxieT10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1yLEZBKCl9LCJyZXN0YXJ0Iiksc3RvcDpvKGZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxGQSgpKX0sInN0b3AiKX07byhKNCwidGltZXIiKTtvKCRVLCJ0aW1lckZsdXNoIik7byhGVSwid2FrZSIpO28oR3dlLCJwb2tlIik7bygkd2UsIm5hcCIpO28oRkEsInNsZWVwIil9KTtmdW5jdGlvbiBFeSh0LGUscil7dmFyIG49bmV3IFR5O3JldHVybiBlPWU9PW51bGw/MDorZSxuLnJlc3RhcnQoaT0+e24uc3RvcCgpLHQoaStlKX0sZSxyKSxufXZhciBWVT1NKCgpPT57InVzZSBzdHJpY3QiO3pBKCk7byhFeSwiZGVmYXVsdCIpfSk7dmFyIGUzPU0oKCk9PnsidXNlIHN0cmljdCI7ekEoKTtWVSgpfSk7ZnVuY3Rpb24gaHUodCxlLHIsbixpLGEpe3ZhciBzPXQuX190cmFuc2l0aW9uO2lmKCFzKXQuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBzKXJldHVybjtId2UodCxyLHtuYW1lOmUsaW5kZXg6bixncm91cDppLG9uOlZ3ZSx0d2VlbjpVd2UsdGltZTphLnRpbWUsZGVsYXk6YS5kZWxheSxkdXJhdGlvbjphLmR1cmF0aW9uLGVhc2U6YS5lYXNlLHRpbWVyOm51bGwsc3RhdGU6V1V9KX1mdW5jdGlvbiBDeSh0LGUpe3ZhciByPU9pKHQsZSk7aWYoci5zdGF0ZT5XVSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIG9hKHQsZSl7dmFyIHI9T2kodCxlKTtpZihyLnN0YXRlPnQzKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIE9pKHQsZSl7dmFyIHI9dC5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSHdlKHQsZSxyKXt2YXIgbj10Ll9fdHJhbnNpdGlvbixpO25bZV09cixyLnRpbWVyPUo0KGEsMCxyLnRpbWUpO2Z1bmN0aW9uIGEoaCl7ci5zdGF0ZT1VVSxyLnRpbWVyLnJlc3RhcnQocyxyLmRlbGF5LHIudGltZSksci5kZWxheTw9aCYmcyhoLXIuZGVsYXkpfW8oYSwic2NoZWR1bGUiKTtmdW5jdGlvbiBzKGgpe3ZhciBmLGQscCxtO2lmKHIuc3RhdGUhPT1VVSlyZXR1cm4gdSgpO2ZvcihmIGluIG4paWYobT1uW2ZdLG0ubmFtZT09PXIubmFtZSl7aWYobS5zdGF0ZT09PXQzKXJldHVybiBFeShzKTttLnN0YXRlPT09SFU/KG0uc3RhdGU9U3ksbS50aW1lci5zdG9wKCksbS5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxtLmluZGV4LG0uZ3JvdXApLGRlbGV0ZSBuW2ZdKTorZjxlJiYobS5zdGF0ZT1TeSxtLnRpbWVyLnN0b3AoKSxtLm9uLmNhbGwoImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG0uaW5kZXgsbS5ncm91cCksZGVsZXRlIG5bZl0pfWlmKEV5KGZ1bmN0aW9uKCl7ci5zdGF0ZT09PXQzJiYoci5zdGF0ZT1IVSxyLnRpbWVyLnJlc3RhcnQobCxyLmRlbGF5LHIudGltZSksbChoKSl9KSxyLnN0YXRlPXIzLHIub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLHIuc3RhdGU9PT1yMyl7Zm9yKHIuc3RhdGU9dDMsaT1uZXcgQXJyYXkocD1yLnR3ZWVuLmxlbmd0aCksZj0wLGQ9LTE7ZjxwOysrZikobT1yLnR3ZWVuW2ZdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCkpJiYoaVsrK2RdPW0pO2kubGVuZ3RoPWQrMX19byhzLCJzdGFydCIpO2Z1bmN0aW9uIGwoaCl7Zm9yKHZhciBmPWg8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGgvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydCh1KSxyLnN0YXRlPW4zLDEpLGQ9LTEscD1pLmxlbmd0aDsrK2Q8cDspaVtkXS5jYWxsKHQsZik7ci5zdGF0ZT09PW4zJiYoci5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLHUoKSl9byhsLCJ0aWNrIik7ZnVuY3Rpb24gdSgpe3Iuc3RhdGU9U3ksci50aW1lci5zdG9wKCksZGVsZXRlIG5bZV07Zm9yKHZhciBoIGluIG4pcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1vKHUsInN0b3AiKX12YXIgVndlLFV3ZSxXVSxVVSxyMyx0MyxIVSxuMyxTeSx5cz1NKCgpPT57InVzZSBzdHJpY3QiO2I3KCk7ZTMoKTtWd2U9eDcoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksVXdlPVtdLFdVPTAsVVU9MSxyMz0yLHQzPTMsSFU9NCxuMz01LFN5PTY7byhodSwiZGVmYXVsdCIpO28oQ3ksImluaXQiKTtvKG9hLCJzZXQiKTtvKE9pLCJnZXQiKTtvKEh3ZSwiY3JlYXRlIil9KTtmdW5jdGlvbiBBeSh0LGUpe3ZhciByPXQuX190cmFuc2l0aW9uLG4saSxhPSEwLHM7aWYocil7ZT1lPT1udWxsP251bGw6ZSsiIjtmb3IocyBpbiByKXtpZigobj1yW3NdKS5uYW1lIT09ZSl7YT0hMTtjb250aW51ZX1pPW4uc3RhdGU+cjMmJm4uc3RhdGU8bjMsbi5zdGF0ZT1TeSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgcltzXX1hJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fXZhciBZVT1NKCgpPT57InVzZSBzdHJpY3QiO3lzKCk7byhBeSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gR0EodCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0F5KHRoaXMsdCl9KX12YXIgcVU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZVSgpO28oR0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFd3ZSh0LGUpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9b2EodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PXIpe249cj1hO2Zvcih2YXIgcz0wLGw9bi5sZW5ndGg7czxsOysrcylpZihuW3NdLm5hbWU9PT1lKXtuPW4uc2xpY2UoKSxuLnNwbGljZShzLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIFl3ZSh0LGUscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9b2EodGhpcyx0KSxzPWEudHdlZW47aWYocyE9PW4pe2k9KG49cykuc2xpY2UoKTtmb3IodmFyIGw9e25hbWU6ZSx2YWx1ZTpyfSx1PTAsaD1pLmxlbmd0aDt1PGg7Kyt1KWlmKGlbdV0ubmFtZT09PWUpe2lbdV09bDticmVha311PT09aCYmaS5wdXNoKGwpfWEudHdlZW49aX19ZnVuY3Rpb24gJEEodCxlKXt2YXIgcj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1PaSh0aGlzLm5vZGUoKSxyKS50d2VlbixpPTAsYT1uLmxlbmd0aCxzO2k8YTsrK2kpaWYoKHM9bltpXSkubmFtZT09PXQpcmV0dXJuIHMudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgoZT09bnVsbD9Xd2U6WXdlKShyLHQsZSkpfWZ1bmN0aW9uIF9wKHQsZSxyKXt2YXIgbj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9b2EodGhpcyxuKTsoaS52YWx1ZXx8KGkudmFsdWU9e30pKVtlXT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGkpe3JldHVybiBPaShpLG4pLnZhbHVlW2VdfX12YXIgX3k9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5cygpO28oV3dlLCJ0d2VlblJlbW92ZSIpO28oWXdlLCJ0d2VlbkZ1bmN0aW9uIik7bygkQSwiZGVmYXVsdCIpO28oX3AsInR3ZWVuVmFsdWUiKX0pO2Z1bmN0aW9uIEx5KHQsZSl7dmFyIHI7cmV0dXJuKHR5cGVvZiBlPT0ibnVtYmVyIj9LaTplIGluc3RhbmNlb2Ygdmw/cmQ6KHI9dmwoZSkpPyhlPXIscmQpOlNwKSh0LGUpfXZhciBWQT1NKCgpPT57InVzZSBzdHJpY3QiO2twKCk7Q3AoKTtvKEx5LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBxd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFh3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGp3ZSh0LGUscil7dmFyIG4saT1yKyIiLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIHM9PT1pP251bGw6cz09PW4/YTphPWUobj1zLHIpfX1mdW5jdGlvbiBLd2UodCxlLHIpe3ZhciBuLGk9cisiIixhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gcz09PWk/bnVsbDpzPT09bj9hOmE9ZShuPXMscil9fWZ1bmN0aW9uIFF3ZSh0LGUscil7dmFyIG4saSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGw9cih0aGlzKSx1O3JldHVybiBsPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6KHM9dGhpcy5nZXRBdHRyaWJ1dGUodCksdT1sKyIiLHM9PT11P251bGw6cz09PW4mJnU9PT1pP2E6KGk9dSxhPWUobj1zLGwpKSl9fWZ1bmN0aW9uIFp3ZSh0LGUscil7dmFyIG4saSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGw9cih0aGlzKSx1O3JldHVybiBsPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOihzPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSx1PWwrIiIscz09PXU/bnVsbDpzPT09biYmdT09PWk/YTooaT11LGE9ZShuPXMsbCkpKX19ZnVuY3Rpb24gVUEodCxlKXt2YXIgcj1pYyh0KSxuPXI9PT0idHJhbnNmb3JtIj9QQTpMeTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCx0eXBlb2YgZT09ImZ1bmN0aW9uIj8oci5sb2NhbD9ad2U6UXdlKShyLG4sX3AodGhpcywiYXR0ci4iK3QsZSkpOmU9PW51bGw/KHIubG9jYWw/WHdlOnF3ZSkocik6KHIubG9jYWw/S3dlOmp3ZSkocixuLGUpKX12YXIgWFU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDcCgpO2dsKCk7X3koKTtWQSgpO28ocXdlLCJhdHRyUmVtb3ZlIik7byhYd2UsImF0dHJSZW1vdmVOUyIpO28oandlLCJhdHRyQ29uc3RhbnQiKTtvKEt3ZSwiYXR0ckNvbnN0YW50TlMiKTtvKFF3ZSwiYXR0ckZ1bmN0aW9uIik7byhad2UsImF0dHJGdW5jdGlvbk5TIik7byhVQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSndlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMscikpfX1mdW5jdGlvbiBlVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMscikpfX1mdW5jdGlvbiB0VGUodCxlKXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PW4mJihyPShuPWEpJiZlVGUodCxhKSkscn1yZXR1cm4gbyhpLCJ0d2VlbiIpLGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiByVGUodCxlKXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PW4mJihyPShuPWEpJiZKd2UodCxhKSkscn1yZXR1cm4gbyhpLCJ0d2VlbiIpLGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiBIQSh0LGUpe3ZhciByPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aWModCk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD90VGU6clRlKShuLGUpKX12YXIgalU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtnbCgpO28oSndlLCJhdHRySW50ZXJwb2xhdGUiKTtvKGVUZSwiYXR0ckludGVycG9sYXRlTlMiKTtvKHRUZSwiYXR0clR3ZWVuTlMiKTtvKHJUZSwiYXR0clR3ZWVuIik7byhIQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gblRlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Q3kodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGlUZSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7Q3kodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBXQSh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP25UZTppVGUpKGUsdCkpOk9pKHRoaXMubm9kZSgpLGUpLmRlbGF5fXZhciBLVT1NKCgpPT57InVzZSBzdHJpY3QiO3lzKCk7byhuVGUsImRlbGF5RnVuY3Rpb24iKTtvKGlUZSwiZGVsYXlDb25zdGFudCIpO28oV0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGFUZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe29hKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBzVGUodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe29hKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gWUEodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9hVGU6c1RlKShlLHQpKTpPaSh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn12YXIgUVU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5cygpO28oYVRlLCJkdXJhdGlvbkZ1bmN0aW9uIik7byhzVGUsImR1cmF0aW9uQ29uc3RhbnQiKTtvKFlBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBvVGUodCxlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7b2EodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIHFBKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChvVGUoZSx0KSk6T2kodGhpcy5ub2RlKCksZSkuZWFzZX12YXIgWlU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5cygpO28ob1RlLCJlYXNlQ29uc3RhbnQiKTtvKHFBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7b2EodGhpcyx0KS5lYXNlPXJ9fWZ1bmN0aW9uIFhBKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGxUZSh0aGlzLl9pZCx0KSl9dmFyIEpVPU0oKCk9PnsidXNlIHN0cmljdCI7eXMoKTtvKGxUZSwiZWFzZVZhcnlpbmciKTtvKFhBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBqQSh0KXt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9dnAodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIGE9ZVtpXSxzPWEubGVuZ3RoLGw9bltpXT1bXSx1LGg9MDtoPHM7KytoKSh1PWFbaF0pJiZ0LmNhbGwodSx1Ll9fZGF0YV9fLGgsYSkmJmwucHVzaCh1KTtyZXR1cm4gbmV3IGphKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX12YXIgZUg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtnbCgpO2lkKCk7byhqQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gS0EodCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPXQuX2dyb3VwcyxuPWUubGVuZ3RoLGk9ci5sZW5ndGgsYT1NYXRoLm1pbihuLGkpLHM9bmV3IEFycmF5KG4pLGw9MDtsPGE7KytsKWZvcih2YXIgdT1lW2xdLGg9cltsXSxmPXUubGVuZ3RoLGQ9c1tsXT1uZXcgQXJyYXkoZikscCxtPTA7bTxmOysrbSkocD11W21dfHxoW21dKSYmKGRbbV09cCk7Zm9yKDtsPG47KytsKXNbbF09ZVtsXTtyZXR1cm4gbmV3IGphKHMsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX12YXIgdEg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpZCgpO28oS0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGNUZSh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGUpe3ZhciByPWUuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYoZT1lLnNsaWNlKDAscikpLCFlfHxlPT09InN0YXJ0In0pfWZ1bmN0aW9uIHVUZSh0LGUscil7dmFyIG4saSxhPWNUZShlKT9DeTpvYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1hKHRoaXMsdCksbD1zLm9uO2whPT1uJiYoaT0obj1sKS5jb3B5KCkpLm9uKGUscikscy5vbj1pfX1mdW5jdGlvbiBRQSh0LGUpe3ZhciByPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/T2kodGhpcy5ub2RlKCkscikub24ub24odCk6dGhpcy5lYWNoKHVUZShyLHQsZSkpfXZhciBySD1NKCgpPT57InVzZSBzdHJpY3QiO3lzKCk7byhjVGUsInN0YXJ0Iik7byh1VGUsIm9uRnVuY3Rpb24iKTtvKFFBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBoVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgciBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrciE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpBKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGhUZSh0aGlzLl9pZCkpfXZhciBuSD1NKCgpPT57InVzZSBzdHJpY3QiO28oaFRlLCJyZW1vdmVGdW5jdGlvbiIpO28oWkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEpBKHQpe3ZhciBlPXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9bWgodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPW5ldyBBcnJheShpKSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixkLHA9MDtwPHU7KytwKShmPWxbcF0pJiYoZD10LmNhbGwoZixmLl9fZGF0YV9fLHAsbCkpJiYoIl9fZGF0YV9fImluIGYmJihkLl9fZGF0YV9fPWYuX19kYXRhX18pLGhbcF09ZCxodShoW3BdLGUscixwLGgsT2koZixyKSkpO3JldHVybiBuZXcgamEoYSx0aGlzLl9wYXJlbnRzLGUscil9dmFyIGlIPU0oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtpZCgpO3lzKCk7byhKQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZTgodCl7dmFyIGU9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD15cCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9W10scz1bXSxsPTA7bDxpOysrbClmb3IodmFyIHU9bltsXSxoPXUubGVuZ3RoLGYsZD0wO2Q8aDsrK2QpaWYoZj11W2RdKXtmb3IodmFyIHA9dC5jYWxsKGYsZi5fX2RhdGFfXyxkLHUpLG0sZz1PaShmLHIpLHk9MCx2PXAubGVuZ3RoO3k8djsrK3kpKG09cFt5XSkmJmh1KG0sZSxyLHkscCxnKTthLnB1c2gocCkscy5wdXNoKGYpfXJldHVybiBuZXcgamEoYSxzLGUscil9dmFyIGFIPU0oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtpZCgpO3lzKCk7byhlOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdDgoKXtyZXR1cm4gbmV3IGZUZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIGZUZSxzSD1NKCgpPT57InVzZSBzdHJpY3QiO2dsKCk7ZlRlPWx1LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtvKHQ4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBkVGUodCxlKXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9Z2godGhpcyx0KSxzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGdoKHRoaXMsdCkpO3JldHVybiBhPT09cz9udWxsOmE9PT1yJiZzPT09bj9pOmk9ZShyPWEsbj1zKX19ZnVuY3Rpb24gb0godCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gcFRlKHQsZSxyKXt2YXIgbixpPXIrIiIsYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1naCh0aGlzLHQpO3JldHVybiBzPT09aT9udWxsOnM9PT1uP2E6YT1lKG49cyxyKX19ZnVuY3Rpb24gbVRlKHQsZSxyKXt2YXIgbixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9Z2godGhpcyx0KSxsPXIodGhpcyksdT1sKyIiO3JldHVybiBsPT1udWxsJiYodT1sPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGdoKHRoaXMsdCkpKSxzPT09dT9udWxsOnM9PT1uJiZ1PT09aT9hOihpPXUsYT1lKG49cyxsKSl9fWZ1bmN0aW9uIGdUZSh0LGUpe3ZhciByLG4saSxhPSJzdHlsZS4iK2Uscz0iZW5kLiIrYSxsO3JldHVybiBmdW5jdGlvbigpe3ZhciB1PW9hKHRoaXMsdCksaD11Lm9uLGY9dS52YWx1ZVthXT09bnVsbD9sfHwobD1vSChlKSk6dm9pZCAwOyhoIT09cnx8aSE9PWYpJiYobj0ocj1oKS5jb3B5KCkpLm9uKHMsaT1mKSx1Lm9uPW59fWZ1bmN0aW9uIHI4KHQsZSxyKXt2YXIgbj0odCs9IiIpPT0idHJhbnNmb3JtIj9PQTpMeTtyZXR1cm4gZT09bnVsbD90aGlzLnN0eWxlVHdlZW4odCxkVGUodCxuKSkub24oImVuZC5zdHlsZS4iK3Qsb0godCkpOnR5cGVvZiBlPT0iZnVuY3Rpb24iP3RoaXMuc3R5bGVUd2Vlbih0LG1UZSh0LG4sX3AodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChnVGUodGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LHBUZSh0LG4sZSkscikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9dmFyIGxIPU0oKCk9PnsidXNlIHN0cmljdCI7Q3AoKTtnbCgpO3lzKCk7X3koKTtWQSgpO28oZFRlLCJzdHlsZU51bGwiKTtvKG9ILCJzdHlsZVJlbW92ZSIpO28ocFRlLCJzdHlsZUNvbnN0YW50Iik7byhtVGUsInN0eWxlRnVuY3Rpb24iKTtvKGdUZSwic3R5bGVNYXliZVJlbW92ZSIpO28ocjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHlUZSh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gdlRlKHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEoKXt2YXIgcz1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihuPShpPXMpJiZ5VGUodCxzLHIpKSxufXJldHVybiBvKGEsInR3ZWVuIiksYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIG44KHQsZSxyKXt2YXIgbj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLHZUZSh0LGUscj8/IiIpKX12YXIgY0g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHlUZSwic3R5bGVJbnRlcnBvbGF0ZSIpO28odlRlLCJzdHlsZVR3ZWVuIik7byhuOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24geFRlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYlRlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1lPz8iIn19ZnVuY3Rpb24gaTgodCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiB0PT0iZnVuY3Rpb24iP2JUZShfcCh0aGlzLCJ0ZXh0Iix0KSk6eFRlKHQ9PW51bGw/IiI6dCsiIikpfXZhciB1SD1NKCgpPT57InVzZSBzdHJpY3QiO195KCk7byh4VGUsInRleHRDb25zdGFudCIpO28oYlRlLCJ0ZXh0RnVuY3Rpb24iKTtvKGk4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB3VGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFRUZSh0KXt2YXIgZSxyO2Z1bmN0aW9uIG4oKXt2YXIgaT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihlPShyPWkpJiZ3VGUoaSkpLGV9cmV0dXJuIG8obiwidHdlZW4iKSxuLl92YWx1ZT10LG59ZnVuY3Rpb24gYTgodCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLFRUZSh0KSl9dmFyIGhIPU0oKCk9PnsidXNlIHN0cmljdCI7byh3VGUsInRleHRJbnRlcnBvbGF0ZSIpO28oVFRlLCJ0ZXh0VHdlZW4iKTtvKGE4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzOCgpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQscj1pMygpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCx1LGg9MDtoPGw7KytoKWlmKHU9c1toXSl7dmFyIGY9T2kodSxlKTtodSh1LHQscixoLHMse3RpbWU6Zi50aW1lK2YuZGVsYXkrZi5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmYuZHVyYXRpb24sZWFzZTpmLmVhc2V9KX1yZXR1cm4gbmV3IGphKG4sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBmSD1NKCgpPT57InVzZSBzdHJpY3QiO2lkKCk7eXMoKTtvKHM4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBvOCgpe3ZhciB0LGUscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXt2YXIgbD17dmFsdWU6c30sdT17dmFsdWU6byhmdW5jdGlvbigpey0taT09PTAmJmEoKX0sInZhbHVlIil9O3IuZWFjaChmdW5jdGlvbigpe3ZhciBoPW9hKHRoaXMsbiksZj1oLm9uO2YhPT10JiYoZT0odD1mKS5jb3B5KCksZS5fLmNhbmNlbC5wdXNoKGwpLGUuXy5pbnRlcnJ1cHQucHVzaChsKSxlLl8uZW5kLnB1c2godSkpLGgub249ZX0pLGk9PT0wJiZhKCl9KX12YXIgZEg9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5cygpO28obzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGphKHQsZSxyLG4pe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiBwSCh0KXtyZXR1cm4gbHUoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIGkzKCl7cmV0dXJuKytrVGV9dmFyIGtUZSxmdSxpZD1NKCgpPT57InVzZSBzdHJpY3QiO2dsKCk7WFUoKTtqVSgpO0tVKCk7UVUoKTtaVSgpO0pVKCk7ZUgoKTt0SCgpO3JIKCk7bkgoKTtpSCgpO2FIKCk7c0goKTtsSCgpO2NIKCk7dUgoKTtoSCgpO2ZIKCk7X3koKTtkSCgpO2tUZT0wO28oamEsIlRyYW5zaXRpb24iKTtvKHBILCJ0cmFuc2l0aW9uIik7byhpMywibmV3SWQiKTtmdT1sdS5wcm90b3R5cGU7amEucHJvdG90eXBlPXBILnByb3RvdHlwZT17Y29uc3RydWN0b3I6amEsc2VsZWN0OkpBLHNlbGVjdEFsbDplOCxzZWxlY3RDaGlsZDpmdS5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpmdS5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6akEsbWVyZ2U6S0Esc2VsZWN0aW9uOnQ4LHRyYW5zaXRpb246czgsY2FsbDpmdS5jYWxsLG5vZGVzOmZ1Lm5vZGVzLG5vZGU6ZnUubm9kZSxzaXplOmZ1LnNpemUsZW1wdHk6ZnUuZW1wdHksZWFjaDpmdS5lYWNoLG9uOlFBLGF0dHI6VUEsYXR0clR3ZWVuOkhBLHN0eWxlOnI4LHN0eWxlVHdlZW46bjgsdGV4dDppOCx0ZXh0VHdlZW46YTgscmVtb3ZlOlpBLHR3ZWVuOiRBLGRlbGF5OldBLGR1cmF0aW9uOllBLGVhc2U6cUEsZWFzZVZhcnlpbmc6WEEsZW5kOm84LFtTeW1ib2wuaXRlcmF0b3JdOmZ1W1N5bWJvbC5pdGVyYXRvcl19fSk7ZnVuY3Rpb24gYTModCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9dmFyIG1IPU0oKCk9PnsidXNlIHN0cmljdCI7byhhMywiY3ViaWNJbk91dCIpfSk7dmFyIGw4PU0oKCk9PnsidXNlIHN0cmljdCI7bUgoKX0pO2Z1bmN0aW9uIFNUZSh0LGUpe2Zvcih2YXIgcjshKHI9dC5fX3RyYW5zaXRpb24pfHwhKHI9cltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2V9IG5vdCBmb3VuZGApO3JldHVybiByfWZ1bmN0aW9uIGM4KHQpe3ZhciBlLHI7dCBpbnN0YW5jZW9mIGphPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9aTMoKSwocj1FVGUpLnRpbWU9a3koKSx0PXQ9PW51bGw/bnVsbDp0KyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCx1LGg9MDtoPGw7KytoKSh1PXNbaF0pJiZodSh1LHQsZSxoLHMscnx8U1RlKHUsZSkpO3JldHVybiBuZXcgamEobix0aGlzLl9wYXJlbnRzLHQsZSl9dmFyIEVUZSxnSD1NKCgpPT57InVzZSBzdHJpY3QiO2lkKCk7eXMoKTtsOCgpO2UzKCk7RVRlPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTphM307byhTVGUsImluaGVyaXQiKTtvKGM4LCJkZWZhdWx0Iil9KTt2YXIgeUg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtnbCgpO3FVKCk7Z0goKTtsdS5wcm90b3R5cGUuaW50ZXJydXB0PUdBO2x1LnByb3RvdHlwZS50cmFuc2l0aW9uPWM4fSk7dmFyIHMzPU0oKCk9PnsidXNlIHN0cmljdCI7eUgoKX0pO3ZhciB2SD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIHhIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgYkg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIHdIKHQpe3JldHVyblsrdFswXSwrdFsxXV19ZnVuY3Rpb24gQ1RlKHQpe3JldHVyblt3SCh0WzBdKSx3SCh0WzFdKV19ZnVuY3Rpb24gdTgodCl7cmV0dXJue3R5cGU6dH19dmFyIHQxdCxyMXQsbjF0LGkxdCxhMXQsczF0LFRIPU0oKCk9PnsidXNlIHN0cmljdCI7czMoKTt2SCgpO3hIKCk7YkgoKTsoe2Ficzp0MXQsbWF4OnIxdCxtaW46bjF0fT1NYXRoKTtvKHdILCJudW1iZXIxIik7byhDVGUsIm51bWJlcjIiKTtpMXQ9e25hbWU6IngiLGhhbmRsZXM6WyJ3IiwiZSJdLm1hcCh1OCksaW5wdXQ6byhmdW5jdGlvbih0LGUpe3JldHVybiB0PT1udWxsP251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSwiaW5wdXQiKSxvdXRwdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19LCJvdXRwdXQiKX0sYTF0PXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAodTgpLGlucHV0Om8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09bnVsbD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sImlucHV0Iiksb3V0cHV0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfSwib3V0cHV0Iil9LHMxdD17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAodTgpLGlucHV0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/bnVsbDpDVGUodCl9LCJpbnB1dCIpLG91dHB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0fSwib3V0cHV0Iil9O28odTgsInR5cGUiKX0pO3ZhciBrSD1NKCgpPT57InVzZSBzdHJpY3QiO1RIKCl9KTtmdW5jdGlvbiBFSCh0KXt0aGlzLl8rPXRbMF07Zm9yKGxldCBlPTEscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMuXys9YXJndW1lbnRzW2VdK3RbZV19ZnVuY3Rpb24gX1RlKHQpe2xldCBlPU1hdGguZmxvb3IodCk7aWYoIShlPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke3R9YCk7aWYoZT4xNSlyZXR1cm4gRUg7bGV0IHI9MTAqKmU7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuXys9blswXTtmb3IobGV0IGk9MSxhPW4ubGVuZ3RoO2k8YTsrK2kpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1tpXSpyKS9yK25baV19fWZ1bmN0aW9uIFNIKCl7cmV0dXJuIG5ldyBzZH12YXIgaDgsZjgsYWQsQVRlLHNkLENIPU0oKCk9PnsidXNlIHN0cmljdCI7aDg9TWF0aC5QSSxmOD0yKmg4LGFkPTFlLTYsQVRlPWY4LWFkO28oRUgsImFwcGVuZCIpO28oX1RlLCJhcHBlbmRSb3VuZCIpO3NkPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBhdGgiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9ZT09bnVsbD9FSDpfVGUoZSl9bW92ZVRvKGUscil7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStlfSwke3RoaXMuX3kwPXRoaXMuX3kxPStyfWB9Y2xvc2VQYXRoKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fYXBwZW5kYFpgKX1saW5lVG8oZSxyKXt0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9K2V9LCR7dGhpcy5feTE9K3J9YH1xdWFkcmF0aWNDdXJ2ZVRvKGUscixuLGkpe3RoaXMuX2FwcGVuZGBRJHsrZX0sJHsrcn0sJHt0aGlzLl94MT0rbn0sJHt0aGlzLl95MT0raX1gfWJlemllckN1cnZlVG8oZSxyLG4saSxhLHMpe3RoaXMuX2FwcGVuZGBDJHsrZX0sJHsrcn0sJHsrbn0sJHsraX0sJHt0aGlzLl94MT0rYX0sJHt0aGlzLl95MT0rc31gfWFyY1RvKGUscixuLGksYSl7aWYoZT0rZSxyPStyLG49K24saT0raSxhPSthLGE8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHthfWApO2xldCBzPXRoaXMuX3gxLGw9dGhpcy5feTEsdT1uLWUsaD1pLXIsZj1zLWUsZD1sLXIscD1mKmYrZCpkO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9ZX0sJHt0aGlzLl95MT1yfWA7ZWxzZSBpZihwPmFkKWlmKCEoTWF0aC5hYnMoZCp1LWgqZik+YWQpfHwhYSl0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9ZX0sJHt0aGlzLl95MT1yfWA7ZWxzZXtsZXQgbT1uLXMsZz1pLWwseT11KnUraCpoLHY9bSptK2cqZyx4PU1hdGguc3FydCh5KSxiPU1hdGguc3FydChwKSx3PWEqTWF0aC50YW4oKGg4LU1hdGguYWNvcygoeStwLXYpLygyKngqYikpKS8yKSxfPXcvYixUPXcveDtNYXRoLmFicyhfLTEpPmFkJiZ0aGlzLl9hcHBlbmRgTCR7ZStfKmZ9LCR7citfKmR9YCx0aGlzLl9hcHBlbmRgQSR7YX0sJHthfSwwLDAsJHsrKGQqbT5mKmcpfSwke3RoaXMuX3gxPWUrVCp1fSwke3RoaXMuX3kxPXIrVCpofWB9fWFyYyhlLHIsbixpLGEscyl7aWYoZT0rZSxyPStyLG49K24scz0hIXMsbjwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke259YCk7bGV0IGw9bipNYXRoLmNvcyhpKSx1PW4qTWF0aC5zaW4oaSksaD1lK2wsZj1yK3UsZD0xXnMscD1zP2ktYTphLWk7dGhpcy5feDE9PT1udWxsP3RoaXMuX2FwcGVuZGBNJHtofSwke2Z9YDooTWF0aC5hYnModGhpcy5feDEtaCk+YWR8fE1hdGguYWJzKHRoaXMuX3kxLWYpPmFkKSYmdGhpcy5fYXBwZW5kYEwke2h9LCR7Zn1gLG4mJihwPDAmJihwPXAlZjgrZjgpLHA+QVRlP3RoaXMuX2FwcGVuZGBBJHtufSwke259LDAsMSwke2R9LCR7ZS1sfSwke3ItdX1BJHtufSwke259LDAsMSwke2R9LCR7dGhpcy5feDE9aH0sJHt0aGlzLl95MT1mfWA6cD5hZCYmdGhpcy5fYXBwZW5kYEEke259LCR7bn0sMCwkeysocD49aDgpfSwke2R9LCR7dGhpcy5feDE9ZStuKk1hdGguY29zKGEpfSwke3RoaXMuX3kxPXIrbipNYXRoLnNpbihhKX1gKX1yZWN0KGUscixuLGkpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rZX0sJHt0aGlzLl95MD10aGlzLl95MT0rcn1oJHtuPStufXYkeytpfWgkey1ufVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319O28oU0gsInBhdGgiKTtTSC5wcm90b3R5cGU9c2QucHJvdG90eXBlfSk7dmFyIGQ4PU0oKCk9PnsidXNlIHN0cmljdCI7Q0goKX0pO3ZhciBBSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIF9IPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgTEg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBESD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIE5IPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgUkg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBNSD1NKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gcDgodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfWZ1bmN0aW9uIG9kKHQsZSl7aWYoKHI9KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49dC5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCt0LnNsaWNlKHIrMSldfXZhciBEeT1NKCgpPT57InVzZSBzdHJpY3QiO28ocDgsImRlZmF1bHQiKTtvKG9kLCJmb3JtYXREZWNpbWFsUGFydHMiKX0pO2Z1bmN0aW9uIHhsKHQpe3JldHVybiB0PW9kKE1hdGguYWJzKHQpKSx0P3RbMV06TmFOfXZhciBOeT1NKCgpPT57InVzZSBzdHJpY3QiO0R5KCk7byh4bCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gbTgodCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtmb3IodmFyIGk9ci5sZW5ndGgsYT1bXSxzPTAsbD10WzBdLHU9MDtpPjAmJmw+MCYmKHUrbCsxPm4mJihsPU1hdGgubWF4KDEsbi11KSksYS5wdXNoKHIuc3Vic3RyaW5nKGktPWwsaStsKSksISgodSs9bCsxKT5uKSk7KWw9dFtzPShzKzEpJXQubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihlKX19dmFyIElIPU0oKCk9PnsidXNlIHN0cmljdCI7byhtOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZzgodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIHRbK3JdfSl9fXZhciBPSD1NKCgpPT57InVzZSBzdHJpY3QiO28oZzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGJoKHQpe2lmKCEoZT1MVGUuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IG8zKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIG8zKHQpe3RoaXMuZmlsbD10LmZpbGw9PT12b2lkIDA/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXQuYWxpZ249PT12b2lkIDA/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXQuc2lnbj09PXZvaWQgMD8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXQuc3ltYm9sPT09dm9pZCAwPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXQud2lkdGg9PT12b2lkIDA/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT10LnR5cGU9PT12b2lkIDA/IiI6dC50eXBlKyIifXZhciBMVGUseTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMVGU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7byhiaCwiZm9ybWF0U3BlY2lmaWVyIik7YmgucHJvdG90eXBlPW8zLnByb3RvdHlwZTtvKG8zLCJGb3JtYXRTcGVjaWZpZXIiKTtvMy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHY4KHQpe2U6Zm9yKHZhciBlPXQubGVuZ3RoLHI9MSxuPS0xLGk7cjxlOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjpuPWk9cjticmVhaztjYXNlIjAiOm49PT0wJiYobj1yKSxpPXI7YnJlYWs7ZGVmYXVsdDppZighK3Rbcl0pYnJlYWsgZTtuPjAmJihuPTApO2JyZWFrfXJldHVybiBuPjA/dC5zbGljZSgwLG4pK3Quc2xpY2UoaSsxKTp0fXZhciBQSD1NKCgpPT57InVzZSBzdHJpY3QiO28odjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGI4KHQsZSl7dmFyIHI9b2QodCxlKTtpZighcilyZXR1cm4gdCsiIjt2YXIgbj1yWzBdLGk9clsxXSxhPWktKHg4PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxzPW4ubGVuZ3RoO3JldHVybiBhPT09cz9uOmE+cz9uK25ldyBBcnJheShhLXMrMSkuam9pbigiMCIpOmE+MD9uLnNsaWNlKDAsYSkrIi4iK24uc2xpY2UoYSk6IjAuIituZXcgQXJyYXkoMS1hKS5qb2luKCIwIikrb2QodCxNYXRoLm1heCgwLGUrYS0xKSlbMF19dmFyIHg4LHc4PU0oKCk9PnsidXNlIHN0cmljdCI7RHkoKTtvKGI4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsMyh0LGUpe3ZhciByPW9kKHQsZSk7aWYoIXIpcmV0dXJuIHQrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIEJIPU0oKCk9PnsidXNlIHN0cmljdCI7RHkoKTtvKGwzLCJkZWZhdWx0Iil9KTt2YXIgVDgsRkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEeSgpO3c4KCk7QkgoKTtUOD17IiUiOm8oKHQsZSk9Pih0KjEwMCkudG9GaXhlZChlKSwiJSIpLGI6byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpLCJiIiksYzpvKHQ9PnQrIiIsImMiKSxkOnA4LGU6bygodCxlKT0+dC50b0V4cG9uZW50aWFsKGUpLCJlIiksZjpvKCh0LGUpPT50LnRvRml4ZWQoZSksImYiKSxnOm8oKHQsZSk9PnQudG9QcmVjaXNpb24oZSksImciKSxvOm8odD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KSwibyIpLHA6bygodCxlKT0+bDModCoxMDAsZSksInAiKSxyOmwzLHM6YjgsWDpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksIlgiKSx4Om8odD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNiksIngiKX19KTtmdW5jdGlvbiBjMyh0KXtyZXR1cm4gdH12YXIgekg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGMzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBrOCh0KXt2YXIgZT10Lmdyb3VwaW5nPT09dm9pZCAwfHx0LnRob3VzYW5kcz09PXZvaWQgMD9jMzptOChHSC5jYWxsKHQuZ3JvdXBpbmcsTnVtYmVyKSx0LnRob3VzYW5kcysiIikscj10LmN1cnJlbmN5PT09dm9pZCAwPyIiOnQuY3VycmVuY3lbMF0rIiIsbj10LmN1cnJlbmN5PT09dm9pZCAwPyIiOnQuY3VycmVuY3lbMV0rIiIsaT10LmRlY2ltYWw9PT12b2lkIDA/Ii4iOnQuZGVjaW1hbCsiIixhPXQubnVtZXJhbHM9PT12b2lkIDA/YzM6ZzgoR0guY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLHM9dC5wZXJjZW50PT09dm9pZCAwPyIlIjp0LnBlcmNlbnQrIiIsbD10Lm1pbnVzPT09dm9pZCAwPyJcdTIyMTIiOnQubWludXMrIiIsdT10Lm5hbj09PXZvaWQgMD8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKGQpe2Q9YmgoZCk7dmFyIHA9ZC5maWxsLG09ZC5hbGlnbixnPWQuc2lnbix5PWQuc3ltYm9sLHY9ZC56ZXJvLHg9ZC53aWR0aCxiPWQuY29tbWEsdz1kLnByZWNpc2lvbixfPWQudHJpbSxUPWQudHlwZTtUPT09Im4iPyhiPSEwLFQ9ImciKTpUOFtUXXx8KHc9PT12b2lkIDAmJih3PTEyKSxfPSEwLFQ9ImciKSwodnx8cD09PSIwIiYmbT09PSI9IikmJih2PSEwLHA9IjAiLG09Ij0iKTt2YXIgRT15PT09IiQiP3I6eT09PSIjIiYmL1tib3hYXS8udGVzdChUKT8iMCIrVC50b0xvd2VyQ2FzZSgpOiIiLEw9eT09PSIkIj9uOi9bJXBdLy50ZXN0KFQpP3M6IiIsQz1UOFtUXSxBPS9bZGVmZ3BycyVdLy50ZXN0KFQpO3c9dz09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoVCk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSx3KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCx3KSk7ZnVuY3Rpb24gSShEKXt2YXIgaz1FLFI9TCxTLE8sTjtpZihUPT09ImMiKVI9QyhEKStSLEQ9IiI7ZWxzZXtEPStEO3ZhciBQPUQ8MHx8MS9EPDA7aWYoRD1pc05hTihEKT91OkMoTWF0aC5hYnMoRCksdyksXyYmKEQ9djgoRCkpLFAmJitEPT0wJiZnIT09IisiJiYoUD0hMSksaz0oUD9nPT09IigiP2c6bDpnPT09Ii0ifHxnPT09IigiPyIiOmcpK2ssUj0oVD09PSJzIj8kSFs4K3g4LzNdOiIiKStSKyhQJiZnPT09IigiPyIpIjoiIiksQSl7Zm9yKFM9LTEsTz1ELmxlbmd0aDsrK1M8TzspaWYoTj1ELmNoYXJDb2RlQXQoUyksNDg+Tnx8Tj41Nyl7Uj0oTj09PTQ2P2krRC5zbGljZShTKzEpOkQuc2xpY2UoUykpK1IsRD1ELnNsaWNlKDAsUyk7YnJlYWt9fX1iJiYhdiYmKEQ9ZShELDEvMCkpO3ZhciBGPWsubGVuZ3RoK0QubGVuZ3RoK1IubGVuZ3RoLEI9Rjx4P25ldyBBcnJheSh4LUYrMSkuam9pbihwKToiIjtzd2l0Y2goYiYmdiYmKEQ9ZShCK0QsQi5sZW5ndGg/eC1SLmxlbmd0aDoxLzApLEI9IiIpLG0pe2Nhc2UiPCI6RD1rK0QrUitCO2JyZWFrO2Nhc2UiPSI6RD1rK0IrRCtSO2JyZWFrO2Nhc2UiXiI6RD1CLnNsaWNlKDAsRj1CLmxlbmd0aD4+MSkraytEK1IrQi5zbGljZShGKTticmVhaztkZWZhdWx0OkQ9QitrK0QrUjticmVha31yZXR1cm4gYShEKX1yZXR1cm4gbyhJLCJmb3JtYXQiKSxJLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGQrIiJ9LEl9byhoLCJuZXdGb3JtYXQiKTtmdW5jdGlvbiBmKGQscCl7dmFyIG09aCgoZD1iaChkKSxkLnR5cGU9ImYiLGQpKSxnPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih4bChwKS8zKSkpKjMseT1NYXRoLnBvdygxMCwtZyksdj0kSFs4K2cvM107cmV0dXJuIGZ1bmN0aW9uKHgpe3JldHVybiBtKHkqeCkrdn19cmV0dXJuIG8oZiwiZm9ybWF0UHJlZml4Iikse2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmfX12YXIgR0gsJEgsVkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOeSgpO0lIKCk7T0goKTt5OCgpO1BIKCk7RkgoKTt3OCgpO3pIKCk7R0g9QXJyYXkucHJvdG90eXBlLm1hcCwkSD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtvKGs4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBFOCh0KXtyZXR1cm4gdTM9azgodCksaDM9dTMuZm9ybWF0LGYzPXUzLmZvcm1hdFByZWZpeCx1M312YXIgdTMsaDMsZjMsVUg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWSCgpO0U4KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO28oRTgsImRlZmF1bHRMb2NhbGUiKX0pO2Z1bmN0aW9uIGQzKHQpe3JldHVybiBNYXRoLm1heCgwLC14bChNYXRoLmFicyh0KSkpfXZhciBISD1NKCgpPT57InVzZSBzdHJpY3QiO055KCk7byhkMywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcDModCxlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoeGwoZSkvMykpKSozLXhsKE1hdGguYWJzKHQpKSl9dmFyIFdIPU0oKCk9PnsidXNlIHN0cmljdCI7TnkoKTtvKHAzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBtMyh0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLHhsKGUpLXhsKHQpKSsxfXZhciBZSD1NKCgpPT57InVzZSBzdHJpY3QiO055KCk7byhtMywiZGVmYXVsdCIpfSk7dmFyIFM4PU0oKCk9PnsidXNlIHN0cmljdCI7VUgoKTt5OCgpO0hIKCk7V0goKTtZSCgpfSk7dmFyIHFIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgWEg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBqSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEtIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiB3aCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KTticmVha31yZXR1cm4gdGhpc312YXIgUnk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHdoLCJpbml0UmFuZ2UiKX0pO2Z1bmN0aW9uIGR1KCl7dmFyIHQ9bmV3IG1wLGU9W10scj1bXSxuPUM4O2Z1bmN0aW9uIGkoYSl7bGV0IHM9dC5nZXQoYSk7aWYocz09PXZvaWQgMCl7aWYobiE9PUM4KXJldHVybiBuO3Quc2V0KGEscz1lLnB1c2goYSktMSl9cmV0dXJuIHJbcyVyLmxlbmd0aF19cmV0dXJuIG8oaSwic2NhbGUiKSxpLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1uZXcgbXA7Zm9yKGxldCBzIG9mIGEpdC5oYXMocyl8fHQuc2V0KHMsZS5wdXNoKHMpLTEpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUFycmF5LmZyb20oYSksaSk6ci5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxpKTpufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZHUoZSxyKS51bmtub3duKG4pfSx3aC5hcHBseShpLGFyZ3VtZW50cyksaX12YXIgQzgsQTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwaCgpO1J5KCk7Qzg9U3ltYm9sKCJpbXBsaWNpdCIpO28oZHUsIm9yZGluYWwiKX0pO2Z1bmN0aW9uIExwKCl7dmFyIHQ9ZHUoKS51bmtub3duKHZvaWQgMCksZT10LmRvbWFpbixyPXQucmFuZ2Usbj0wLGk9MSxhLHMsbD0hMSx1PTAsaD0wLGY9LjU7ZGVsZXRlIHQudW5rbm93bjtmdW5jdGlvbiBkKCl7dmFyIHA9ZSgpLmxlbmd0aCxtPWk8bixnPW0/aTpuLHk9bT9uOmk7YT0oeS1nKS9NYXRoLm1heCgxLHAtdStoKjIpLGwmJihhPU1hdGguZmxvb3IoYSkpLGcrPSh5LWctYSoocC11KSkqZixzPWEqKDEtdSksbCYmKGc9TWF0aC5yb3VuZChnKSxzPU1hdGgucm91bmQocykpO3ZhciB2PVI0KHApLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gZythKnh9KTtyZXR1cm4gcihtP3YucmV2ZXJzZSgpOnYpfXJldHVybiBvKGQsInJlc2NhbGUiKSx0LmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShwKSxkKCkpOmUoKX0sdC5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW24saV09cCxuPStuLGk9K2ksZCgpKTpbbixpXX0sdC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHApe3JldHVybltuLGldPXAsbj0rbixpPStpLGw9ITAsZCgpfSx0LmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBzfSx0LnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdC5yb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0hIXAsZCgpKTpsfSx0LnBhZGRpbmc9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9TWF0aC5taW4oMSxoPStwKSxkKCkpOnV9LHQucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWluKDEscCksZCgpKTp1fSx0LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rcCxkKCkpOmh9LHQuYWxpZ249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHApKSxkKCkpOmZ9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBMcChlKCksW24saV0pLnJvdW5kKGwpLnBhZGRpbmdJbm5lcih1KS5wYWRkaW5nT3V0ZXIoaCkuYWxpZ24oZil9LHdoLmFwcGx5KGQoKSxhcmd1bWVudHMpfXZhciBRSD1NKCgpPT57InVzZSBzdHJpY3QiO3BoKCk7UnkoKTtBOCgpO28oTHAsImJhbmQiKX0pO2Z1bmN0aW9uIF84KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgWkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKF84LCJjb25zdGFudHMiKX0pO2Z1bmN0aW9uIEw4KHQpe3JldHVybit0fXZhciBKSD1NKCgpPT57InVzZSBzdHJpY3QiO28oTDgsIm51bWJlciIpfSk7ZnVuY3Rpb24gRHAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gRDgodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX06XzgoaXNOYU4oZSk/TmFOOi41KX1mdW5jdGlvbiBEVGUodCxlKXt2YXIgcjtyZXR1cm4gdD5lJiYocj10LHQ9ZSxlPXIpLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfX1mdW5jdGlvbiBOVGUodCxlLHIpe3ZhciBuPXRbMF0saT10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIGk8bj8obj1EOChpLG4pLGE9cihzLGEpKToobj1EOChuLGkpLGE9cihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShuKGwpKX19ZnVuY3Rpb24gUlRlKHQsZSxyKXt2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxzPS0xO2Zvcih0W25dPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8bjspaVtzXT1EOCh0W3NdLHRbcysxXSksYVtzXT1yKGVbc10sZVtzKzFdKTtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIHU9ZDcodCxsLDEsbiktMTtyZXR1cm4gYVt1XShpW3VdKGwpKX19ZnVuY3Rpb24gZzModCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gTVRlKCl7dmFyIHQ9ZVcsZT1lVyxyPXhoLG4saSxhLHM9RHAsbCx1LGg7ZnVuY3Rpb24gZigpe3ZhciBwPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtyZXR1cm4gcyE9PURwJiYocz1EVGUodFswXSx0W3AtMV0pKSxsPXA+Mj9SVGU6TlRlLHU9aD1udWxsLGR9byhmLCJyZXNjYWxlIik7ZnVuY3Rpb24gZChwKXtyZXR1cm4gcD09bnVsbHx8aXNOYU4ocD0rcCk/YToodXx8KHU9bCh0Lm1hcChuKSxlLHIpKSkobihzKHApKSl9cmV0dXJuIG8oZCwic2NhbGUiKSxkLmludmVydD1mdW5jdGlvbihwKXtyZXR1cm4gcyhpKChofHwoaD1sKGUsdC5tYXAobiksS2kpKSkocCkpKX0sZC5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QXJyYXkuZnJvbShwLEw4KSxmKCkpOnQuc2xpY2UoKX0sZC5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BcnJheS5mcm9tKHApLGYoKSk6ZS5zbGljZSgpfSxkLnJhbmdlUm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGU9QXJyYXkuZnJvbShwKSxyPVk0LGYoKX0sZC5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1wPyEwOkRwLGYoKSk6cyE9PURwfSxkLmludGVycG9sYXRlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZigpKTpyfSxkLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cCxkKTphfSxmdW5jdGlvbihwLG0pe3JldHVybiBuPXAsaT1tLGYoKX19ZnVuY3Rpb24gTXkoKXtyZXR1cm4gTVRlKCkoRHAsRHApfXZhciBlVyxOOD1NKCgpPT57InVzZSBzdHJpY3QiO3BoKCk7Q3AoKTtaSCgpO0pIKCk7ZVc9WzAsMV07byhEcCwiaWRlbnRpdHkiKTtvKEQ4LCJub3JtYWxpemUiKTtvKERUZSwiY2xhbXBlciIpO28oTlRlLCJiaW1hcCIpO28oUlRlLCJwb2x5bWFwIik7byhnMywiY29weSIpO28oTVRlLCJ0cmFuc2Zvcm1lciIpO28oTXksImNvbnRpbnVvdXMiKX0pO2Z1bmN0aW9uIFI4KHQsZSxyLG4pe3ZhciBpPWdwKHQsZSxyKSxhO3N3aXRjaChuPWJoKG4/PyIsZiIpLG4udHlwZSl7Y2FzZSJzIjp7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9cDMoaSxzKSkmJihuLnByZWNpc2lvbj1hKSxmMyhuLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9bTMoaSxNYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpKSYmKG4ucHJlY2lzaW9uPWEtKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihhPWQzKGkpKSYmKG4ucHJlY2lzaW9uPWEtKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiBoMyhuKX12YXIgdFc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwaCgpO1M4KCk7byhSOCwidGlja0Zvcm1hdCIpfSk7ZnVuY3Rpb24gSVRlKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHIpe3ZhciBuPWUoKTtyZXR1cm4gTDQoblswXSxuW24ubGVuZ3RoLTFdLHI/PzEwKX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHIsbil7dmFyIGk9ZSgpO3JldHVybiBSOChpWzBdLGlbaS5sZW5ndGgtMV0scj8/MTAsbil9LHQubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49ZSgpLGk9MCxhPW4ubGVuZ3RoLTEscz1uW2ldLGw9blthXSx1LGgsZj0xMDtmb3IobDxzJiYoaD1zLHM9bCxsPWgsaD1pLGk9YSxhPWgpO2YtLSA+MDspe2lmKGg9bHkocyxsLHIpLGg9PT11KXJldHVybiBuW2ldPXMsblthXT1sLGUobik7aWYoaD4wKXM9TWF0aC5mbG9vcihzL2gpKmgsbD1NYXRoLmNlaWwobC9oKSpoO2Vsc2UgaWYoaDwwKXM9TWF0aC5jZWlsKHMqaCkvaCxsPU1hdGguZmxvb3IobCpoKS9oO2Vsc2UgYnJlYWs7dT1ofXJldHVybiB0fSx0fWZ1bmN0aW9uIGJsKCl7dmFyIHQ9TXkoKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGczKHQsYmwoKSl9LHdoLmFwcGx5KHQsYXJndW1lbnRzKSxJVGUodCl9dmFyIHJXPU0oKCk9PnsidXNlIHN0cmljdCI7cGgoKTtOOCgpO1J5KCk7dFcoKTtvKElUZSwibGluZWFyaXNoIik7byhibCwibGluZWFyIil9KTtmdW5jdGlvbiBNOCh0LGUpe3Q9dC5zbGljZSgpO3ZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFtyXSxhPXRbbl0scztyZXR1cm4gYTxpJiYocz1yLHI9bixuPXMscz1pLGk9YSxhPXMpLHRbcl09ZS5mbG9vcihpKSx0W25dPWUuY2VpbChhKSx0fXZhciBuVz1NKCgpPT57InVzZSBzdHJpY3QiO28oTTgsIm5pY2UiKX0pO2Z1bmN0aW9uIGduKHQsZSxyLG4pe2Z1bmN0aW9uIGkoYSl7cmV0dXJuIHQoYT1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrYSkpLGF9cmV0dXJuIG8oaSwiaW50ZXJ2YWwiKSxpLmZsb29yPWE9Pih0KGE9bmV3IERhdGUoK2EpKSxhKSxpLmNlaWw9YT0+KHQoYT1uZXcgRGF0ZShhLTEpKSxlKGEsMSksdChhKSxhKSxpLnJvdW5kPWE9PntsZXQgcz1pKGEpLGw9aS5jZWlsKGEpO3JldHVybiBhLXM8bC1hP3M6bH0saS5vZmZzZXQ9KGEscyk9PihlKGE9bmV3IERhdGUoK2EpLHM9PW51bGw/MTpNYXRoLmZsb29yKHMpKSxhKSxpLnJhbmdlPShhLHMsbCk9PntsZXQgdT1bXTtpZihhPWkuY2VpbChhKSxsPWw9PW51bGw/MTpNYXRoLmZsb29yKGwpLCEoYTxzKXx8IShsPjApKXJldHVybiB1O2xldCBoO2RvIHUucHVzaChoPW5ldyBEYXRlKCthKSksZShhLGwpLHQoYSk7d2hpbGUoaDxhJiZhPHMpO3JldHVybiB1fSxpLmZpbHRlcj1hPT5nbihzPT57aWYocz49cylmb3IoO3QocyksIWEocyk7KXMuc2V0VGltZShzLTEpfSwocyxsKT0+e2lmKHM+PXMpaWYobDwwKWZvcig7KytsPD0wOylmb3IoO2UocywtMSksIWEocyk7KTtlbHNlIGZvcig7LS1sPj0wOylmb3IoO2UocywxKSwhYShzKTspO30pLHImJihpLmNvdW50PShhLHMpPT4oSTguc2V0VGltZSgrYSksTzguc2V0VGltZSgrcyksdChJOCksdChPOCksTWF0aC5mbG9vcihyKEk4LE84KSkpLGkuZXZlcnk9YT0+KGE9TWF0aC5mbG9vcihhKSwhaXNGaW5pdGUoYSl8fCEoYT4wKT9udWxsOmE+MT9pLmZpbHRlcihuP3M9Pm4ocyklYT09PTA6cz0+aS5jb3VudCgwLHMpJWE9PT0wKTppKSksaX12YXIgSTgsTzgscHU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJOD1uZXcgRGF0ZSxPOD1uZXcgRGF0ZTtvKGduLCJ0aW1lSW50ZXJ2YWwiKX0pO3ZhciBvYyxpVyxQOD1NKCgpPT57InVzZSBzdHJpY3QiO3B1KCk7b2M9Z24oKCk9Pnt9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UpfSwodCxlKT0+ZS10KTtvYy5ldmVyeT10PT4odD1NYXRoLmZsb29yKHQpLCFpc0Zpbml0ZSh0KXx8ISh0PjApP251bGw6dD4xP2duKGU9PntlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSwoZSxyKT0+e2Uuc2V0VGltZSgrZStyKnQpfSwoZSxyKT0+KHItZSkvdCk6b2MpO2lXPW9jLnJhbmdlfSk7dmFyIFhzLGFXLEI4PU0oKCk9PnsidXNlIHN0cmljdCI7cHUoKTtYcz1nbih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqMWUzKX0sKHQsZSk9PihlLXQpLzFlMyx0PT50LmdldFVUQ1NlY29uZHMoKSksYVc9WHMucmFuZ2V9KTt2YXIgbXUsT1RlLHkzLFBUZSxGOD1NKCgpPT57InVzZSBzdHJpY3QiO3B1KCk7bXU9Z24odD0+e3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqMWUzKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSo2ZTQpfSwodCxlKT0+KGUtdCkvNmU0LHQ9PnQuZ2V0TWludXRlcygpKSxPVGU9bXUucmFuZ2UseTM9Z24odD0+e3Quc2V0VVRDU2Vjb25kcygwLDApfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjZlNCl9LCh0LGUpPT4oZS10KS82ZTQsdD0+dC5nZXRVVENNaW51dGVzKCkpLFBUZT15My5yYW5nZX0pO3ZhciBndSxCVGUsdjMsRlRlLHo4PU0oKCk9PnsidXNlIHN0cmljdCI7cHUoKTtndT1nbih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSoxZTMtdC5nZXRNaW51dGVzKCkqNmU0KX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSozNmU1KX0sKHQsZSk9PihlLXQpLzM2ZTUsdD0+dC5nZXRIb3VycygpKSxCVGU9Z3UucmFuZ2UsdjM9Z24odD0+e3Quc2V0VVRDTWludXRlcygwLDAsMCl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqMzZlNSl9LCh0LGUpPT4oZS10KS8zNmU1LHQ9PnQuZ2V0VVRDSG91cnMoKSksRlRlPXYzLnJhbmdlfSk7dmFyIExvLHpUZSxPeSxHVGUseDMsJFRlLEc4PU0oKCk9PnsidXNlIHN0cmljdCI7cHUoKTtMbz1nbih0PT50LnNldEhvdXJzKDAsMCwwLDApLCh0LGUpPT50LnNldERhdGUodC5nZXREYXRlKCkrZSksKHQsZSk9PihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKjZlNCkvODY0ZTUsdD0+dC5nZXREYXRlKCktMSkselRlPUxvLnJhbmdlLE95PWduKHQ9Pnt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sKHQsZSk9PihlLXQpLzg2NGU1LHQ9PnQuZ2V0VVRDRGF0ZSgpLTEpLEdUZT1PeS5yYW5nZSx4Mz1nbih0PT57dC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9LCh0LGUpPT4oZS10KS84NjRlNSx0PT5NYXRoLmZsb29yKHQvODY0ZTUpKSwkVGU9eDMucmFuZ2V9KTtmdW5jdGlvbiB1ZCh0KXtyZXR1cm4gZ24oZT0+e2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3IqNyl9LChlLHIpPT4oci1lLShyLmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSo2ZTQpLzYwNDhlNSl9ZnVuY3Rpb24gaGQodCl7cmV0dXJuIGduKGU9PntlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKStyKjcpfSwoZSxyKT0+KHItZSkvNjA0OGU1KX12YXIgd2wsVGgsYjMsdzMsY2MsVDMsazMsb1csVlRlLFVUZSxIVGUsV1RlLFlUZSxxVGUsZmQsTnAsbFcsY1csa2gsdVcsaFcsZlcsWFRlLGpUZSxLVGUsUVRlLFpUZSxKVGUsJDg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwdSgpO28odWQsInRpbWVXZWVrZGF5Iik7d2w9dWQoMCksVGg9dWQoMSksYjM9dWQoMiksdzM9dWQoMyksY2M9dWQoNCksVDM9dWQoNSksazM9dWQoNiksb1c9d2wucmFuZ2UsVlRlPVRoLnJhbmdlLFVUZT1iMy5yYW5nZSxIVGU9dzMucmFuZ2UsV1RlPWNjLnJhbmdlLFlUZT1UMy5yYW5nZSxxVGU9azMucmFuZ2U7byhoZCwidXRjV2Vla2RheSIpO2ZkPWhkKDApLE5wPWhkKDEpLGxXPWhkKDIpLGNXPWhkKDMpLGtoPWhkKDQpLHVXPWhkKDUpLGhXPWhkKDYpLGZXPWZkLnJhbmdlLFhUZT1OcC5yYW5nZSxqVGU9bFcucmFuZ2UsS1RlPWNXLnJhbmdlLFFUZT1raC5yYW5nZSxaVGU9dVcucmFuZ2UsSlRlPWhXLnJhbmdlfSk7dmFyIHl1LGVrZSxFMyx0a2UsVjg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwdSgpO3l1PWduKHQ9Pnt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sKHQsZSk9PmUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpKjEyLHQ9PnQuZ2V0TW9udGgoKSksZWtlPXl1LnJhbmdlLEUzPWduKHQ9Pnt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0sKHQsZSk9PmUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpKjEyLHQ9PnQuZ2V0VVRDTW9udGgoKSksdGtlPUUzLnJhbmdlfSk7dmFyIGpzLHJrZSxUbCxua2UsVTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwdSgpO2pzPWduKHQ9Pnt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sKHQsZSk9PmUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCksdD0+dC5nZXRGdWxsWWVhcigpKTtqcy5ldmVyeT10PT4haXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKXx8ISh0PjApP251bGw6Z24oZT0+e2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrcip0KX0pO3JrZT1qcy5yYW5nZSxUbD1nbih0PT57dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9LCh0LGUpPT5lLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpLHQ9PnQuZ2V0VVRDRnVsbFllYXIoKSk7VGwuZXZlcnk9dD0+IWlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSl8fCEodD4wKT9udWxsOmduKGU9PntlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3IqdCl9KTtua2U9VGwucmFuZ2V9KTtmdW5jdGlvbiBwVyh0LGUscixuLGksYSl7bGV0IHM9W1tYcywxLDFlM10sW1hzLDUsNSoxZTNdLFtYcywxNSwxNSoxZTNdLFtYcywzMCwzMCoxZTNdLFthLDEsNmU0XSxbYSw1LDUqNmU0XSxbYSwxNSwxNSo2ZTRdLFthLDMwLDMwKjZlNF0sW2ksMSwzNmU1XSxbaSwzLDMqMzZlNV0sW2ksNiw2KjM2ZTVdLFtpLDEyLDEyKjM2ZTVdLFtuLDEsODY0ZTVdLFtuLDIsMio4NjRlNV0sW3IsMSw2MDQ4ZTVdLFtlLDEsMjU5MmU2XSxbZSwzLDMqMjU5MmU2XSxbdCwxLDMxNTM2ZTZdXTtmdW5jdGlvbiBsKGgsZixkKXtsZXQgcD1mPGg7cCYmKFtoLGZdPVtmLGhdKTtsZXQgbT1kJiZ0eXBlb2YgZC5yYW5nZT09ImZ1bmN0aW9uIj9kOnUoaCxmLGQpLGc9bT9tLnJhbmdlKGgsK2YrMSk6W107cmV0dXJuIHA/Zy5yZXZlcnNlKCk6Z31vKGwsInRpY2tzIik7ZnVuY3Rpb24gdShoLGYsZCl7bGV0IHA9TWF0aC5hYnMoZi1oKS9kLG09SmYoKFssLHZdKT0+dikucmlnaHQocyxwKTtpZihtPT09cy5sZW5ndGgpcmV0dXJuIHQuZXZlcnkoZ3AoaC8zMTUzNmU2LGYvMzE1MzZlNixkKSk7aWYobT09PTApcmV0dXJuIG9jLmV2ZXJ5KE1hdGgubWF4KGdwKGgsZixkKSwxKSk7bGV0W2cseV09c1twL3NbbS0xXVsyXTxzW21dWzJdL3A/bS0xOm1dO3JldHVybiBnLmV2ZXJ5KHkpfXJldHVybiBvKHUsInRpY2tJbnRlcnZhbCIpLFtsLHVdfXZhciBha2Usc2tlLEg4LFc4LG1XPU0oKCk9PnsidXNlIHN0cmljdCI7cGgoKTtQOCgpO0I4KCk7RjgoKTt6OCgpO0c4KCk7JDgoKTtWOCgpO1U4KCk7byhwVywidGlja2VyIik7W2FrZSxza2VdPXBXKFRsLEUzLGZkLHgzLHYzLHkzKSxbSDgsVzhdPXBXKGpzLHl1LHdsLExvLGd1LG11KX0pO3ZhciBTMz1NKCgpPT57InVzZSBzdHJpY3QiO1A4KCk7QjgoKTtGOCgpO3o4KCk7RzgoKTskOCgpO1Y4KCk7VTgoKTttVygpfSk7ZnVuY3Rpb24gWTgodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHE4KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFB5KHQsZSxyKXtyZXR1cm57eTp0LG06ZSxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBYOCh0KXt2YXIgZT10LmRhdGVUaW1lLHI9dC5kYXRlLG49dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLHM9dC5zaG9ydERheXMsbD10Lm1vbnRocyx1PXQuc2hvcnRNb250aHMsaD1CeShpKSxmPUZ5KGkpLGQ9QnkoYSkscD1GeShhKSxtPUJ5KHMpLGc9RnkocykseT1CeShsKSx2PUZ5KGwpLHg9QnkodSksYj1GeSh1KSx3PXthOlAsQTpGLGI6QixCOiQsYzpudWxsLGQ6d1csZTp3VyxmOkxrZSxnOnprZSxHOiRrZSxIOkNrZSxJOkFrZSxqOl9rZSxMOkNXLG06RGtlLE06TmtlLHA6eixxOlcsUTpFVyxzOlNXLFM6UmtlLHU6TWtlLFU6SWtlLFY6T2tlLHc6UGtlLFc6QmtlLHg6bnVsbCxYOm51bGwseTpGa2UsWTpHa2UsWjpWa2UsIiUiOmtXfSxfPXthOmosQTpLLGI6aWUsQjpRLGM6bnVsbCxkOlRXLGU6VFcsZjpZa2UsZzpyRWUsRzppRWUsSDpVa2UsSTpIa2UsajpXa2UsTDpfVyxtOnFrZSxNOlhrZSxwOmVlLHE6SixROkVXLHM6U1csUzpqa2UsdTpLa2UsVTpRa2UsVjpaa2UsdzpKa2UsVzplRWUseDpudWxsLFg6bnVsbCx5OnRFZSxZOm5FZSxaOmFFZSwiJSI6a1d9LFQ9e2E6SSxBOkQsYjprLEI6UixjOlMsZDp4VyxlOnhXLGY6VGtlLGc6dlcsRzp5VyxIOmJXLEk6Ylcsajp2a2UsTDp3a2UsbTp5a2UsTTp4a2UscDpBLHE6Z2tlLFE6RWtlLHM6U2tlLFM6YmtlLHU6aGtlLFU6ZmtlLFY6ZGtlLHc6dWtlLFc6cGtlLHg6TyxYOk4seTp2VyxZOnlXLFo6bWtlLCIlIjpra2V9O3cueD1FKHIsdyksdy5YPUUobix3KSx3LmM9RShlLHcpLF8ueD1FKHIsXyksXy5YPUUobixfKSxfLmM9RShlLF8pO2Z1bmN0aW9uIEUoSCxxKXtyZXR1cm4gZnVuY3Rpb24oWil7dmFyIGFlPVtdLHVlPS0xLGNlPTAsdGU9SC5sZW5ndGgsRGUsb2Usa2U7Zm9yKFogaW5zdGFuY2VvZiBEYXRlfHwoWj1uZXcgRGF0ZSgrWikpOysrdWU8dGU7KUguY2hhckNvZGVBdCh1ZSk9PT0zNyYmKGFlLnB1c2goSC5zbGljZShjZSx1ZSkpLChvZT1nV1tEZT1ILmNoYXJBdCgrK3VlKV0pIT1udWxsP0RlPUguY2hhckF0KCsrdWUpOm9lPURlPT09ImUiPyIgIjoiMCIsKGtlPXFbRGVdKSYmKERlPWtlKFosb2UpKSxhZS5wdXNoKERlKSxjZT11ZSsxKTtyZXR1cm4gYWUucHVzaChILnNsaWNlKGNlLHVlKSksYWUuam9pbigiIil9fW8oRSwibmV3Rm9ybWF0Iik7ZnVuY3Rpb24gTChILHEpe3JldHVybiBmdW5jdGlvbihaKXt2YXIgYWU9UHkoMTkwMCx2b2lkIDAsMSksdWU9QyhhZSxILForPSIiLDApLGNlLHRlO2lmKHVlIT1aLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBhZSlyZXR1cm4gbmV3IERhdGUoYWUuUSk7aWYoInMiaW4gYWUpcmV0dXJuIG5ldyBEYXRlKGFlLnMqMWUzKygiTCJpbiBhZT9hZS5MOjApKTtpZihxJiYhKCJaImluIGFlKSYmKGFlLlo9MCksInAiaW4gYWUmJihhZS5IPWFlLkglMTIrYWUucCoxMiksYWUubT09PXZvaWQgMCYmKGFlLm09InEiaW4gYWU/YWUucTowKSwiViJpbiBhZSl7aWYoYWUuVjwxfHxhZS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGFlfHwoYWUudz0xKSwiWiJpbiBhZT8oY2U9cTgoUHkoYWUueSwwLDEpKSx0ZT1jZS5nZXRVVENEYXkoKSxjZT10ZT40fHx0ZT09PTA/TnAuY2VpbChjZSk6TnAoY2UpLGNlPU95Lm9mZnNldChjZSwoYWUuVi0xKSo3KSxhZS55PWNlLmdldFVUQ0Z1bGxZZWFyKCksYWUubT1jZS5nZXRVVENNb250aCgpLGFlLmQ9Y2UuZ2V0VVRDRGF0ZSgpKyhhZS53KzYpJTcpOihjZT1ZOChQeShhZS55LDAsMSkpLHRlPWNlLmdldERheSgpLGNlPXRlPjR8fHRlPT09MD9UaC5jZWlsKGNlKTpUaChjZSksY2U9TG8ub2Zmc2V0KGNlLChhZS5WLTEpKjcpLGFlLnk9Y2UuZ2V0RnVsbFllYXIoKSxhZS5tPWNlLmdldE1vbnRoKCksYWUuZD1jZS5nZXREYXRlKCkrKGFlLncrNiklNyl9ZWxzZSgiVyJpbiBhZXx8IlUiaW4gYWUpJiYoInciaW4gYWV8fChhZS53PSJ1ImluIGFlP2FlLnUlNzoiVyJpbiBhZT8xOjApLHRlPSJaImluIGFlP3E4KFB5KGFlLnksMCwxKSkuZ2V0VVRDRGF5KCk6WTgoUHkoYWUueSwwLDEpKS5nZXREYXkoKSxhZS5tPTAsYWUuZD0iVyJpbiBhZT8oYWUudys2KSU3K2FlLlcqNy0odGUrNSklNzphZS53K2FlLlUqNy0odGUrNiklNyk7cmV0dXJuIloiaW4gYWU/KGFlLkgrPWFlLlovMTAwfDAsYWUuTSs9YWUuWiUxMDAscTgoYWUpKTpZOChhZSl9fW8oTCwibmV3UGFyc2UiKTtmdW5jdGlvbiBDKEgscSxaLGFlKXtmb3IodmFyIHVlPTAsY2U9cS5sZW5ndGgsdGU9Wi5sZW5ndGgsRGUsb2U7dWU8Y2U7KXtpZihhZT49dGUpcmV0dXJuLTE7aWYoRGU9cS5jaGFyQ29kZUF0KHVlKyspLERlPT09Mzcpe2lmKERlPXEuY2hhckF0KHVlKyspLG9lPVRbRGUgaW4gZ1c/cS5jaGFyQXQodWUrKyk6RGVdLCFvZXx8KGFlPW9lKEgsWixhZSkpPDApcmV0dXJuLTF9ZWxzZSBpZihEZSE9Wi5jaGFyQ29kZUF0KGFlKyspKXJldHVybi0xfXJldHVybiBhZX1vKEMsInBhcnNlU3BlY2lmaWVyIik7ZnVuY3Rpb24gQShILHEsWil7dmFyIGFlPWguZXhlYyhxLnNsaWNlKFopKTtyZXR1cm4gYWU/KEgucD1mLmdldChhZVswXS50b0xvd2VyQ2FzZSgpKSxaK2FlWzBdLmxlbmd0aCk6LTF9byhBLCJwYXJzZVBlcmlvZCIpO2Z1bmN0aW9uIEkoSCxxLFope3ZhciBhZT1tLmV4ZWMocS5zbGljZShaKSk7cmV0dXJuIGFlPyhILnc9Zy5nZXQoYWVbMF0udG9Mb3dlckNhc2UoKSksWithZVswXS5sZW5ndGgpOi0xfW8oSSwicGFyc2VTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBEKEgscSxaKXt2YXIgYWU9ZC5leGVjKHEuc2xpY2UoWikpO3JldHVybiBhZT8oSC53PXAuZ2V0KGFlWzBdLnRvTG93ZXJDYXNlKCkpLForYWVbMF0ubGVuZ3RoKTotMX1vKEQsInBhcnNlV2Vla2RheSIpO2Z1bmN0aW9uIGsoSCxxLFope3ZhciBhZT14LmV4ZWMocS5zbGljZShaKSk7cmV0dXJuIGFlPyhILm09Yi5nZXQoYWVbMF0udG9Mb3dlckNhc2UoKSksWithZVswXS5sZW5ndGgpOi0xfW8oaywicGFyc2VTaG9ydE1vbnRoIik7ZnVuY3Rpb24gUihILHEsWil7dmFyIGFlPXkuZXhlYyhxLnNsaWNlKFopKTtyZXR1cm4gYWU/KEgubT12LmdldChhZVswXS50b0xvd2VyQ2FzZSgpKSxaK2FlWzBdLmxlbmd0aCk6LTF9byhSLCJwYXJzZU1vbnRoIik7ZnVuY3Rpb24gUyhILHEsWil7cmV0dXJuIEMoSCxlLHEsWil9byhTLCJwYXJzZUxvY2FsZURhdGVUaW1lIik7ZnVuY3Rpb24gTyhILHEsWil7cmV0dXJuIEMoSCxyLHEsWil9byhPLCJwYXJzZUxvY2FsZURhdGUiKTtmdW5jdGlvbiBOKEgscSxaKXtyZXR1cm4gQyhILG4scSxaKX1vKE4sInBhcnNlTG9jYWxlVGltZSIpO2Z1bmN0aW9uIFAoSCl7cmV0dXJuIHNbSC5nZXREYXkoKV19byhQLCJmb3JtYXRTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBGKEgpe3JldHVybiBhW0guZ2V0RGF5KCldfW8oRiwiZm9ybWF0V2Vla2RheSIpO2Z1bmN0aW9uIEIoSCl7cmV0dXJuIHVbSC5nZXRNb250aCgpXX1vKEIsImZvcm1hdFNob3J0TW9udGgiKTtmdW5jdGlvbiAkKEgpe3JldHVybiBsW0guZ2V0TW9udGgoKV19bygkLCJmb3JtYXRNb250aCIpO2Z1bmN0aW9uIHooSCl7cmV0dXJuIGlbKyhILmdldEhvdXJzKCk+PTEyKV19byh6LCJmb3JtYXRQZXJpb2QiKTtmdW5jdGlvbiBXKEgpe3JldHVybiAxK35+KEguZ2V0TW9udGgoKS8zKX1vKFcsImZvcm1hdFF1YXJ0ZXIiKTtmdW5jdGlvbiBqKEgpe3JldHVybiBzW0guZ2V0VVRDRGF5KCldfW8oaiwiZm9ybWF0VVRDU2hvcnRXZWVrZGF5Iik7ZnVuY3Rpb24gSyhIKXtyZXR1cm4gYVtILmdldFVUQ0RheSgpXX1vKEssImZvcm1hdFVUQ1dlZWtkYXkiKTtmdW5jdGlvbiBpZShIKXtyZXR1cm4gdVtILmdldFVUQ01vbnRoKCldfW8oaWUsImZvcm1hdFVUQ1Nob3J0TW9udGgiKTtmdW5jdGlvbiBRKEgpe3JldHVybiBsW0guZ2V0VVRDTW9udGgoKV19byhRLCJmb3JtYXRVVENNb250aCIpO2Z1bmN0aW9uIGVlKEgpe3JldHVybiBpWysoSC5nZXRVVENIb3VycygpPj0xMildfW8oZWUsImZvcm1hdFVUQ1BlcmlvZCIpO2Z1bmN0aW9uIEooSCl7cmV0dXJuIDErfn4oSC5nZXRVVENNb250aCgpLzMpfXJldHVybiBvKEosImZvcm1hdFVUQ1F1YXJ0ZXIiKSx7Zm9ybWF0Om8oZnVuY3Rpb24oSCl7dmFyIHE9RShIKz0iIix3KTtyZXR1cm4gcS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBIfSxxfSwiZm9ybWF0IikscGFyc2U6byhmdW5jdGlvbihIKXt2YXIgcT1MKEgrPSIiLCExKTtyZXR1cm4gcS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBIfSxxfSwicGFyc2UiKSx1dGNGb3JtYXQ6byhmdW5jdGlvbihIKXt2YXIgcT1FKEgrPSIiLF8pO3JldHVybiBxLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEh9LHF9LCJ1dGNGb3JtYXQiKSx1dGNQYXJzZTpvKGZ1bmN0aW9uKEgpe3ZhciBxPUwoSCs9IiIsITApO3JldHVybiBxLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEh9LHF9LCJ1dGNQYXJzZSIpfX1mdW5jdGlvbiBIcih0LGUscil7dmFyIG49dDwwPyItIjoiIixpPShuPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIG4rKGE8cj9uZXcgQXJyYXkoci1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBja2UodCl7cmV0dXJuIHQucmVwbGFjZShsa2UsIlxcJCYiKX1mdW5jdGlvbiBCeSh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoY2tlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gRnkodCl7cmV0dXJuIG5ldyBNYXAodC5tYXAoKGUscik9PltlLnRvTG93ZXJDYXNlKCkscl0pKX1mdW5jdGlvbiB1a2UodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaGtlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC51PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZrZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBka2UodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlY9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGtlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlXKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHZXKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbWtlKHQsZSxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2tlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC5xPW5bMF0qMy0zLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlrZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geFcodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdmtlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5tPTAsdC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJXKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHhrZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBia2UodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd2tlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFRrZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBra2UodCxlLHIpe3ZhciBuPW9rZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEVrZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFNrZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHdXKHQsZSl7cmV0dXJuIEhyKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gQ2tlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIEFrZSh0LGUpe3JldHVybiBIcih0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gX2tlKHQsZSl7cmV0dXJuIEhyKDErTG8uY291bnQoanModCksdCksZSwzKX1mdW5jdGlvbiBDVyh0LGUpe3JldHVybiBIcih0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gTGtlKHQsZSl7cmV0dXJuIENXKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gRGtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gTmtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gUmtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gTWtlKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU9PT0wPzc6ZX1mdW5jdGlvbiBJa2UodCxlKXtyZXR1cm4gSHIod2wuY291bnQoanModCktMSx0KSxlLDIpfWZ1bmN0aW9uIEFXKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU+PTR8fGU9PT0wP2NjKHQpOmNjLmNlaWwodCl9ZnVuY3Rpb24gT2tlKHQsZSl7cmV0dXJuIHQ9QVcodCksSHIoY2MuY291bnQoanModCksdCkrKGpzKHQpLmdldERheSgpPT09NCksZSwyKX1mdW5jdGlvbiBQa2UodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gQmtlKHQsZSl7cmV0dXJuIEhyKFRoLmNvdW50KGpzKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBGa2UodCxlKXtyZXR1cm4gSHIodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHprZSh0LGUpe3JldHVybiB0PUFXKHQpLEhyKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBHa2UodCxlKXtyZXR1cm4gSHIodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uICRrZSh0LGUpe3ZhciByPXQuZ2V0RGF5KCk7cmV0dXJuIHQ9cj49NHx8cj09PTA/Y2ModCk6Y2MuY2VpbCh0KSxIcih0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gVmtlKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrSHIoZS82MHwwLCIwIiwyKStIcihlJTYwLCIwIiwyKX1mdW5jdGlvbiBUVyh0LGUpe3JldHVybiBIcih0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIFVrZSh0LGUpe3JldHVybiBIcih0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBIa2UodCxlKXtyZXR1cm4gSHIodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIFdrZSh0LGUpe3JldHVybiBIcigxK095LmNvdW50KFRsKHQpLHQpLGUsMyl9ZnVuY3Rpb24gX1codCxlKXtyZXR1cm4gSHIodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFlrZSh0LGUpe3JldHVybiBfVyh0LGUpKyIwMDAifWZ1bmN0aW9uIHFrZSh0LGUpe3JldHVybiBIcih0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIFhrZSh0LGUpe3JldHVybiBIcih0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIGprZSh0LGUpe3JldHVybiBIcih0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIEtrZSh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPT09MD83OmV9ZnVuY3Rpb24gUWtlKHQsZSl7cmV0dXJuIEhyKGZkLmNvdW50KFRsKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBMVyh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHxlPT09MD9raCh0KTpraC5jZWlsKHQpfWZ1bmN0aW9uIFprZSh0LGUpe3JldHVybiB0PUxXKHQpLEhyKGtoLmNvdW50KFRsKHQpLHQpKyhUbCh0KS5nZXRVVENEYXkoKT09PTQpLGUsMil9ZnVuY3Rpb24gSmtlKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIGVFZSh0LGUpe3JldHVybiBIcihOcC5jb3VudChUbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gdEVlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiByRWUodCxlKXtyZXR1cm4gdD1MVyh0KSxIcih0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gbkVlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBpRWUodCxlKXt2YXIgcj10LmdldFVUQ0RheSgpO3JldHVybiB0PXI+PTR8fHI9PT0wP2toKHQpOmtoLmNlaWwodCksSHIodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGFFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24ga1coKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gRVcodCl7cmV0dXJuK3R9ZnVuY3Rpb24gU1codCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX12YXIgZ1csUWksb2tlLGxrZSxEVz1NKCgpPT57InVzZSBzdHJpY3QiO1MzKCk7byhZOCwibG9jYWxEYXRlIik7byhxOCwidXRjRGF0ZSIpO28oUHksIm5ld0RhdGUiKTtvKFg4LCJmb3JtYXRMb2NhbGUiKTtnVz17Ii0iOiIiLF86IiAiLDA6IjAifSxRaT0vXlxzKlxkKy8sb2tlPS9eJS8sbGtlPS9bXFxeJCorP3xbXF0oKS57fV0vZztvKEhyLCJwYWQiKTtvKGNrZSwicmVxdW90ZSIpO28oQnksImZvcm1hdFJlIik7byhGeSwiZm9ybWF0TG9va3VwIik7byh1a2UsInBhcnNlV2Vla2RheU51bWJlclN1bmRheSIpO28oaGtlLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiKTtvKGZrZSwicGFyc2VXZWVrTnVtYmVyU3VuZGF5Iik7byhka2UsInBhcnNlV2Vla051bWJlcklTTyIpO28ocGtlLCJwYXJzZVdlZWtOdW1iZXJNb25kYXkiKTtvKHlXLCJwYXJzZUZ1bGxZZWFyIik7byh2VywicGFyc2VZZWFyIik7byhta2UsInBhcnNlWm9uZSIpO28oZ2tlLCJwYXJzZVF1YXJ0ZXIiKTtvKHlrZSwicGFyc2VNb250aE51bWJlciIpO28oeFcsInBhcnNlRGF5T2ZNb250aCIpO28odmtlLCJwYXJzZURheU9mWWVhciIpO28oYlcsInBhcnNlSG91cjI0Iik7byh4a2UsInBhcnNlTWludXRlcyIpO28oYmtlLCJwYXJzZVNlY29uZHMiKTtvKHdrZSwicGFyc2VNaWxsaXNlY29uZHMiKTtvKFRrZSwicGFyc2VNaWNyb3NlY29uZHMiKTtvKGtrZSwicGFyc2VMaXRlcmFsUGVyY2VudCIpO28oRWtlLCJwYXJzZVVuaXhUaW1lc3RhbXAiKTtvKFNrZSwicGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyIpO28od1csImZvcm1hdERheU9mTW9udGgiKTtvKENrZSwiZm9ybWF0SG91cjI0Iik7byhBa2UsImZvcm1hdEhvdXIxMiIpO28oX2tlLCJmb3JtYXREYXlPZlllYXIiKTtvKENXLCJmb3JtYXRNaWxsaXNlY29uZHMiKTtvKExrZSwiZm9ybWF0TWljcm9zZWNvbmRzIik7byhEa2UsImZvcm1hdE1vbnRoTnVtYmVyIik7byhOa2UsImZvcm1hdE1pbnV0ZXMiKTtvKFJrZSwiZm9ybWF0U2Vjb25kcyIpO28oTWtlLCJmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5Iik7byhJa2UsImZvcm1hdFdlZWtOdW1iZXJTdW5kYXkiKTtvKEFXLCJkSVNPIik7byhPa2UsImZvcm1hdFdlZWtOdW1iZXJJU08iKTtvKFBrZSwiZm9ybWF0V2Vla2RheU51bWJlclN1bmRheSIpO28oQmtlLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5Iik7byhGa2UsImZvcm1hdFllYXIiKTtvKHprZSwiZm9ybWF0WWVhcklTTyIpO28oR2tlLCJmb3JtYXRGdWxsWWVhciIpO28oJGtlLCJmb3JtYXRGdWxsWWVhcklTTyIpO28oVmtlLCJmb3JtYXRab25lIik7byhUVywiZm9ybWF0VVRDRGF5T2ZNb250aCIpO28oVWtlLCJmb3JtYXRVVENIb3VyMjQiKTtvKEhrZSwiZm9ybWF0VVRDSG91cjEyIik7byhXa2UsImZvcm1hdFVUQ0RheU9mWWVhciIpO28oX1csImZvcm1hdFVUQ01pbGxpc2Vjb25kcyIpO28oWWtlLCJmb3JtYXRVVENNaWNyb3NlY29uZHMiKTtvKHFrZSwiZm9ybWF0VVRDTW9udGhOdW1iZXIiKTtvKFhrZSwiZm9ybWF0VVRDTWludXRlcyIpO28oamtlLCJmb3JtYXRVVENTZWNvbmRzIik7byhLa2UsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkiKTtvKFFrZSwiZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSIpO28oTFcsIlVUQ2RJU08iKTtvKFprZSwiZm9ybWF0VVRDV2Vla051bWJlcklTTyIpO28oSmtlLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5Iik7byhlRWUsImZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkiKTtvKHRFZSwiZm9ybWF0VVRDWWVhciIpO28ockVlLCJmb3JtYXRVVENZZWFySVNPIik7byhuRWUsImZvcm1hdFVUQ0Z1bGxZZWFyIik7byhpRWUsImZvcm1hdFVUQ0Z1bGxZZWFySVNPIik7byhhRWUsImZvcm1hdFVUQ1pvbmUiKTtvKGtXLCJmb3JtYXRMaXRlcmFsUGVyY2VudCIpO28oRVcsImZvcm1hdFVuaXhUaW1lc3RhbXAiKTtvKFNXLCJmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyIpfSk7ZnVuY3Rpb24gajgodCl7cmV0dXJuIFJwPVg4KHQpLGRkPVJwLmZvcm1hdCxOVz1ScC5wYXJzZSxSVz1ScC51dGNGb3JtYXQsTVc9UnAudXRjUGFyc2UsUnB9dmFyIFJwLGRkLE5XLFJXLE1XLElXPU0oKCk9PnsidXNlIHN0cmljdCI7RFcoKTtqOCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO28oajgsImRlZmF1bHRMb2NhbGUiKX0pO3ZhciBLOD1NKCgpPT57InVzZSBzdHJpY3QiO0lXKCl9KTtmdW5jdGlvbiBzRWUodCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIG9FZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBPVyh0LGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj1NeSgpLGQ9Zi5pbnZlcnQscD1mLmRvbWFpbixtPWgoIi4lTCIpLGc9aCgiOiVTIikseT1oKCIlSTolTSIpLHY9aCgiJUkgJXAiKSx4PWgoIiVhICVkIiksYj1oKCIlYiAlZCIpLHc9aCgiJUIiKSxfPWgoIiVZIik7ZnVuY3Rpb24gVChFKXtyZXR1cm4odShFKTxFP206bChFKTxFP2c6cyhFKTxFP3k6YShFKTxFP3Y6bihFKTxFP2koRSk8RT94OmI6cihFKTxFP3c6XykoRSl9cmV0dXJuIG8oVCwidGlja0Zvcm1hdCIpLGYuaW52ZXJ0PWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgRGF0ZShkKEUpKX0sZi5kb21haW49ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cChBcnJheS5mcm9tKEUsb0VlKSk6cCgpLm1hcChzRWUpfSxmLnRpY2tzPWZ1bmN0aW9uKEUpe3ZhciBMPXAoKTtyZXR1cm4gdChMWzBdLExbTC5sZW5ndGgtMV0sRT8/MTApfSxmLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oRSxMKXtyZXR1cm4gTD09bnVsbD9UOmgoTCl9LGYubmljZT1mdW5jdGlvbihFKXt2YXIgTD1wKCk7cmV0dXJuKCFFfHx0eXBlb2YgRS5yYW5nZSE9ImZ1bmN0aW9uIikmJihFPWUoTFswXSxMW0wubGVuZ3RoLTFdLEU/PzEwKSksRT9wKE04KEwsRSkpOmZ9LGYuY29weT1mdW5jdGlvbigpe3JldHVybiBnMyhmLE9XKHQsZSxyLG4saSxhLHMsbCx1LGgpKX0sZn1mdW5jdGlvbiBDMygpe3JldHVybiB3aC5hcHBseShPVyhIOCxXOCxqcyx5dSx3bCxMbyxndSxtdSxYcyxkZCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9dmFyIFBXPU0oKCk9PnsidXNlIHN0cmljdCI7UzMoKTtLOCgpO044KCk7UnkoKTtuVygpO28oc0VlLCJkYXRlIik7byhvRWUsIm51bWJlciIpO28oT1csImNhbGVuZGFyIik7byhDMywidGltZSIpfSk7dmFyIEJXPU0oKCk9PnsidXNlIHN0cmljdCI7UUgoKTtyVygpO0E4KCk7UFcoKX0pO2Z1bmN0aW9uIFE4KHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAscj1uZXcgQXJyYXkoZSksbj0wO248ZTspcltuXT0iIyIrdC5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBGVz1NKCgpPT57InVzZSBzdHJpY3QiO28oUTgsImRlZmF1bHQiKX0pO3ZhciBaOCx6Vz1NKCgpPT57InVzZSBzdHJpY3QiO0ZXKCk7Wjg9UTgoIjRlNzlhN2YyOGUyY2UxNTc1OTc2YjdiMjU5YTE0ZmVkYzk0OWFmN2FhMWZmOWRhNzljNzU1ZmJhYjBhYiIpfSk7dmFyIEdXPU0oKCk9PnsidXNlIHN0cmljdCI7elcoKX0pO2Z1bmN0aW9uIFBuKHQpe3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIHR9LCJjb25zdGFudCIpfXZhciBBMz1NKCgpPT57InVzZSBzdHJpY3QiO28oUG4sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFZXKHQpe3JldHVybiB0PjE/MDp0PC0xP01wOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBlXyh0KXtyZXR1cm4gdD49MT96eTp0PD0tMT8tenk6TWF0aC5hc2luKHQpfXZhciBKOCxsYSxFaCwkVyxfMyxrbCxwZCxaaSxNcCx6eSxJcCxMMz1NKCgpPT57InVzZSBzdHJpY3QiO0o4PU1hdGguYWJzLGxhPU1hdGguYXRhbjIsRWg9TWF0aC5jb3MsJFc9TWF0aC5tYXgsXzM9TWF0aC5taW4sa2w9TWF0aC5zaW4scGQ9TWF0aC5zcXJ0LFppPTFlLTEyLE1wPU1hdGguUEksenk9TXAvMixJcD0yKk1wO28oVlcsImFjb3MiKTtvKGVfLCJhc2luIil9KTtmdW5jdGlvbiBEMyh0KXtsZXQgZT0zO3JldHVybiB0LmRpZ2l0cz1mdW5jdGlvbihyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZTtpZihyPT1udWxsKWU9bnVsbDtlbHNle2xldCBuPU1hdGguZmxvb3Iocik7aWYoIShuPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7cn1gKTtlPW59cmV0dXJuIHR9LCgpPT5uZXcgc2QoZSl9dmFyIHRfPU0oKCk9PnsidXNlIHN0cmljdCI7ZDgoKTtvKEQzLCJ3aXRoUGF0aCIpfSk7ZnVuY3Rpb24gbEVlKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIGNFZSh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiB1RWUodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBoRWUodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gZkVlKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGRFZSh0LGUscixuLGksYSxzLGwpe3ZhciB1PXItdCxoPW4tZSxmPXMtaSxkPWwtYSxwPWQqdS1mKmg7aWYoIShwKnA8WmkpKXJldHVybiBwPShmKihlLWEpLWQqKHQtaSkpL3AsW3QrcCp1LGUrcCpoXX1mdW5jdGlvbiBOMyh0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4saD0ocz9hOi1hKS9wZChsKmwrdSp1KSxmPWgqdSxkPS1oKmwscD10K2YsbT1lK2QsZz1yK2YseT1uK2Qsdj0ocCtnKS8yLHg9KG0reSkvMixiPWctcCx3PXktbSxfPWIqYit3KncsVD1pLWEsRT1wKnktZyptLEw9KHc8MD8tMToxKSpwZCgkVygwLFQqVCpfLUUqRSkpLEM9KEUqdy1iKkwpL18sQT0oLUUqYi13KkwpL18sST0oRSp3K2IqTCkvXyxEPSgtRSpiK3cqTCkvXyxrPUMtdixSPUEteCxTPUktdixPPUQteDtyZXR1cm4gayprK1IqUj5TKlMrTypPJiYoQz1JLEE9RCkse2N4OkMsY3k6QSx4MDE6LWYseTAxOi1kLHgxMTpDKihpL1QtMSkseTExOkEqKGkvVC0xKX19ZnVuY3Rpb24gRWwoKXt2YXIgdD1sRWUsZT1jRWUscj1QbigwKSxuPW51bGwsaT11RWUsYT1oRWUscz1mRWUsbD1udWxsLHU9RDMoaCk7ZnVuY3Rpb24gaCgpe3ZhciBmLGQscD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZz1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS16eSx5PWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLXp5LHY9SjgoeS1nKSx4PXk+ZztpZihsfHwobD1mPXUoKSksbTxwJiYoZD1tLG09cCxwPWQpLCEobT5aaSkpbC5tb3ZlVG8oMCwwKTtlbHNlIGlmKHY+SXAtWmkpbC5tb3ZlVG8obSpFaChnKSxtKmtsKGcpKSxsLmFyYygwLDAsbSxnLHksIXgpLHA+WmkmJihsLm1vdmVUbyhwKkVoKHkpLHAqa2woeSkpLGwuYXJjKDAsMCxwLHksZyx4KSk7ZWxzZXt2YXIgYj1nLHc9eSxfPWcsVD15LEU9dixMPXYsQz1zLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEE9Qz5aaSYmKG4/K24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnBkKHAqcCttKm0pKSxJPV8zKEo4KG0tcCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEQ9SSxrPUksUixTO2lmKEE+Wmkpe3ZhciBPPWVfKEEvcCprbChDKSksTj1lXyhBL20qa2woQykpOyhFLT1PKjIpPlppPyhPKj14PzE6LTEsXys9TyxULT1PKTooRT0wLF89VD0oZyt5KS8yKSwoTC09TioyKT5aaT8oTio9eD8xOi0xLGIrPU4sdy09Tik6KEw9MCxiPXc9KGcreSkvMil9dmFyIFA9bSpFaChiKSxGPW0qa2woYiksQj1wKkVoKFQpLCQ9cCprbChUKTtpZihJPlppKXt2YXIgej1tKkVoKHcpLFc9bSprbCh3KSxqPXAqRWgoXyksSz1wKmtsKF8pLGllO2lmKHY8TXApaWYoaWU9ZEVlKFAsRixqLEsseixXLEIsJCkpe3ZhciBRPVAtaWVbMF0sZWU9Ri1pZVsxXSxKPXotaWVbMF0sSD1XLWllWzFdLHE9MS9rbChWVygoUSpKK2VlKkgpLyhwZChRKlErZWUqZWUpKnBkKEoqSitIKkgpKSkvMiksWj1wZChpZVswXSppZVswXStpZVsxXSppZVsxXSk7RD1fMyhJLChwLVopLyhxLTEpKSxrPV8zKEksKG0tWikvKHErMSkpfWVsc2UgRD1rPTB9TD5aaT9rPlppPyhSPU4zKGosSyxQLEYsbSxrLHgpLFM9TjMoeixXLEIsJCxtLGsseCksbC5tb3ZlVG8oUi5jeCtSLngwMSxSLmN5K1IueTAxKSxrPEk/bC5hcmMoUi5jeCxSLmN5LGssbGEoUi55MDEsUi54MDEpLGxhKFMueTAxLFMueDAxKSwheCk6KGwuYXJjKFIuY3gsUi5jeSxrLGxhKFIueTAxLFIueDAxKSxsYShSLnkxMSxSLngxMSksIXgpLGwuYXJjKDAsMCxtLGxhKFIuY3krUi55MTEsUi5jeCtSLngxMSksbGEoUy5jeStTLnkxMSxTLmN4K1MueDExKSwheCksbC5hcmMoUy5jeCxTLmN5LGssbGEoUy55MTEsUy54MTEpLGxhKFMueTAxLFMueDAxKSwheCkpKToobC5tb3ZlVG8oUCxGKSxsLmFyYygwLDAsbSxiLHcsIXgpKTpsLm1vdmVUbyhQLEYpLCEocD5aaSl8fCEoRT5aaSk/bC5saW5lVG8oQiwkKTpEPlppPyhSPU4zKEIsJCx6LFcscCwtRCx4KSxTPU4zKFAsRixqLEsscCwtRCx4KSxsLmxpbmVUbyhSLmN4K1IueDAxLFIuY3krUi55MDEpLEQ8ST9sLmFyYyhSLmN4LFIuY3ksRCxsYShSLnkwMSxSLngwMSksbGEoUy55MDEsUy54MDEpLCF4KToobC5hcmMoUi5jeCxSLmN5LEQsbGEoUi55MDEsUi54MDEpLGxhKFIueTExLFIueDExKSwheCksbC5hcmMoMCwwLHAsbGEoUi5jeStSLnkxMSxSLmN4K1IueDExKSxsYShTLmN5K1MueTExLFMuY3grUy54MTEpLHgpLGwuYXJjKFMuY3gsUy5jeSxELGxhKFMueTExLFMueDExKSxsYShTLnkwMSxTLngwMSksIXgpKSk6bC5hcmMoMCwwLHAsVCxfLHgpfWlmKGwuY2xvc2VQYXRoKCksZilyZXR1cm4gbD1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIG8oaCwiYXJjIiksaC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBmPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixkPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1NcC8yO3JldHVybltFaChkKSpmLGtsKGQpKmZdfSxoLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6UG4oK2YpLGgpOnR9LGgub3V0ZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpQbigrZiksaCk6ZX0saC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpQbigrZiksaCk6cn0saC5wYWRSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOnR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6UG4oK2YpLGgpOm59LGguc3RhcnRBbmdsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlBuKCtmKSxoKTppfSxoLmVuZEFuZ2xlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6UG4oK2YpLGgpOmF9LGgucGFkQW5nbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpQbigrZiksaCk6c30saC5jb250ZXh0PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWY/P251bGwsaCk6bH0saH12YXIgVVc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtBMygpO0wzKCk7dF8oKTtvKGxFZSwiYXJjSW5uZXJSYWRpdXMiKTtvKGNFZSwiYXJjT3V0ZXJSYWRpdXMiKTtvKHVFZSwiYXJjU3RhcnRBbmdsZSIpO28oaEVlLCJhcmNFbmRBbmdsZSIpO28oZkVlLCJhcmNQYWRBbmdsZSIpO28oZEVlLCJpbnRlcnNlY3QiKTtvKE4zLCJjb3JuZXJUYW5nZW50cyIpO28oRWwsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEd5KHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9dmFyIE8ydCxyXz1NKCgpPT57InVzZSBzdHJpY3QiO08ydD1BcnJheS5wcm90b3R5cGUuc2xpY2U7byhHeSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSFcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE9wKHQpe3JldHVybiBuZXcgSFcodCl9dmFyIG5fPU0oKCk9PnsidXNlIHN0cmljdCI7byhIVywiTGluZWFyIik7SFcucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrfX0sInBvaW50Iil9O28oT3AsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFdXKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFlXKHQpe3JldHVybiB0WzFdfXZhciBxVz1NKCgpPT57InVzZSBzdHJpY3QiO28oV1csIngiKTtvKFlXLCJ5Iil9KTtmdW5jdGlvbiBLYSh0LGUpe3ZhciByPVBuKCEwKSxuPW51bGwsaT1PcCxhPW51bGwscz1EMyhsKTt0PXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dD09PXZvaWQgMD9XVzpQbih0KSxlPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6ZT09PXZvaWQgMD9ZVzpQbihlKTtmdW5jdGlvbiBsKHUpe3ZhciBoLGY9KHU9R3kodSkpLmxlbmd0aCxkLHA9ITEsbTtmb3Iobj09bnVsbCYmKGE9aShtPXMoKSkpLGg9MDtoPD1mOysraCkhKGg8ZiYmcihkPXVbaF0saCx1KSk9PT1wJiYoKHA9IXApP2EubGluZVN0YXJ0KCk6YS5saW5lRW5kKCkpLHAmJmEucG9pbnQoK3QoZCxoLHUpLCtlKGQsaCx1KSk7aWYobSlyZXR1cm4gYT1udWxsLG0rIiJ8fG51bGx9cmV0dXJuIG8obCwibGluZSIpLGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgdT09ImZ1bmN0aW9uIj91OlBuKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpQbigrdSksbCk6ZX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6UG4oISF1KSxsKTpyfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXUsbiE9bnVsbCYmKGE9aShuKSksbCk6aX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP249YT1udWxsOmE9aShuPXUpLGwpOm59LGx9dmFyIFhXPU0oKCk9PnsidXNlIHN0cmljdCI7cl8oKTtBMygpO25fKCk7dF8oKTtxVygpO28oS2EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGlfKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBqVz1NKCgpPT57InVzZSBzdHJpY3QiO28oaV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGFfKHQpe3JldHVybiB0fXZhciBLVz1NKCgpPT57InVzZSBzdHJpY3QiO28oYV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFIzKCl7dmFyIHQ9YV8sZT1pXyxyPW51bGwsbj1QbigwKSxpPVBuKElwKSxhPVBuKDApO2Z1bmN0aW9uIHMobCl7dmFyIHUsaD0obD1HeShsKSkubGVuZ3RoLGYsZCxwPTAsbT1uZXcgQXJyYXkoaCksZz1uZXcgQXJyYXkoaCkseT0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdj1NYXRoLm1pbihJcCxNYXRoLm1heCgtSXAsaS5hcHBseSh0aGlzLGFyZ3VtZW50cykteSkpLHgsYj1NYXRoLm1pbihNYXRoLmFicyh2KS9oLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx3PWIqKHY8MD8tMToxKSxfO2Zvcih1PTA7dTxoOysrdSkoXz1nW21bdV09dV09K3QobFt1XSx1LGwpKT4wJiYocCs9Xyk7Zm9yKGUhPW51bGw/bS5zb3J0KGZ1bmN0aW9uKFQsRSl7cmV0dXJuIGUoZ1tUXSxnW0VdKX0pOnIhPW51bGwmJm0uc29ydChmdW5jdGlvbihULEUpe3JldHVybiByKGxbVF0sbFtFXSl9KSx1PTAsZD1wPyh2LWgqdykvcDowO3U8aDsrK3UseT14KWY9bVt1XSxfPWdbZl0seD15KyhfPjA/XypkOjApK3csZ1tmXT17ZGF0YTpsW2ZdLGluZGV4OnUsdmFsdWU6XyxzdGFydEFuZ2xlOnksZW5kQW5nbGU6eCxwYWRBbmdsZTpifTtyZXR1cm4gZ31yZXR1cm4gbyhzLCJwaWUiKSxzLnZhbHVlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6UG4oK2wpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1sLHI9bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bCxlPW51bGwscyk6cn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6UG4oK2wpLHMpOm59LHMuZW5kQW5nbGU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpQbigrbCkscyk6aX0scy5wYWRBbmdsZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlBuKCtsKSxzKTphfSxzfXZhciBRVz1NKCgpPT57InVzZSBzdHJpY3QiO3JfKCk7QTMoKTtqVygpO0tXKCk7TDMoKTtvKFIzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzXyh0KXtyZXR1cm4gbmV3IE0zKHQsITApfWZ1bmN0aW9uIG9fKHQpe3JldHVybiBuZXcgTTModCwhMSl9dmFyIE0zLFpXPU0oKCk9PnsidXNlIHN0cmljdCI7TTM9Y2xhc3N7c3RhdGlje28odGhpcywiQnVtcCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5fY29udGV4dD1lLHRoaXMuX3g9cn1hcmVhU3RhcnQoKXt0aGlzLl9saW5lPTB9YXJlYUVuZCgpe3RoaXMuX2xpbmU9TmFOfWxpbmVTdGFydCgpe3RoaXMuX3BvaW50PTB9bGluZUVuZCgpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX1wb2ludChlLHIpe3N3aXRjaChlPStlLHI9K3IsdGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUscik6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSxyKTticmVha31jYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0Ont0aGlzLl94P3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MD0odGhpcy5feDArZSkvMix0aGlzLl95MCx0aGlzLl94MCxyLGUscik6dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwLHRoaXMuX3kwPSh0aGlzLl95MCtyKS8yLGUsdGhpcy5feTAsZSxyKTticmVha319dGhpcy5feDA9ZSx0aGlzLl95MD1yfX07byhzXywiYnVtcFgiKTtvKG9fLCJidW1wWSIpfSk7ZnVuY3Rpb24gS3MoKXt9dmFyICR5PU0oKCk9PnsidXNlIHN0cmljdCI7byhLcywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gUHAodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK3IpLzYpfWZ1bmN0aW9uIFZ5KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBEbyh0KXtyZXR1cm4gbmV3IFZ5KHQpfXZhciBVeT1NKCgpPT57InVzZSBzdHJpY3QiO28oUHAsInBvaW50Iik7byhWeSwiQmFzaXMiKTtWeS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOlBwKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpQcCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfSwicG9pbnQiKX07byhEbywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSlcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEkzKHQpe3JldHVybiBuZXcgSlcodCl9dmFyIGVZPU0oKCk9PnsidXNlIHN0cmljdCI7JHkoKTtVeSgpO28oSlcsIkJhc2lzQ2xvc2VkIik7SlcucHJvdG90eXBlPXthcmVhU3RhcnQ6S3MsYXJlYUVuZDpLcyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCk7YnJlYWt9fX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OlBwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKEkzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB0WSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gTzModCl7cmV0dXJuIG5ldyB0WSh0KX12YXIgclk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVeSgpO28odFksIkJhc2lzT3BlbiIpO3RZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlBwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKE8zLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBuWSh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBWeSh0KSx0aGlzLl9iZXRhPWV9dmFyIGxfLGlZPU0oKCk9PnsidXNlIHN0cmljdCI7VXkoKTtvKG5ZLCJCdW5kbGUiKTtuWS5wcm90b3R5cGU9e2xpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49dFswXSxpPWVbMF0sYT10W3JdLW4scz1lW3JdLWksbD0tMSx1OysrbDw9cjspdT1sL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2xdKygxLXRoaXMuX2JldGEpKihuK3UqYSksdGhpcy5fYmV0YSplW2xdKygxLXRoaXMuX2JldGEpKihpK3UqcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfSwicG9pbnQiKX07bF89byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU9PT0xP25ldyBWeShuKTpuZXcgblkobixlKX1yZXR1cm4gbyhyLCJidW5kbGUiKSxyLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjg1KX0pO2Z1bmN0aW9uIEJwKHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gUDModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciBjXyxIeT1NKCgpPT57InVzZSBzdHJpY3QiO28oQnAsInBvaW50Iik7byhQMywiQ2FyZGluYWwiKTtQMy5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6QnAodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpCcCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07Y189byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBQMyhuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gQjModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciB1XyxoXz1NKCgpPT57InVzZSBzdHJpY3QiOyR5KCk7SHkoKTtvKEIzLCJDYXJkaW5hbENsb3NlZCIpO0IzLnByb3RvdHlwZT17YXJlYVN0YXJ0OktzLGFyZWFFbmQ6S3MsbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6QnAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX0sInBvaW50Iil9O3VfPW8oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgQjMobixlKX1yZXR1cm4gbyhyLCJjYXJkaW5hbCIpLHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSgwKX0pO2Z1bmN0aW9uIEYzKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn12YXIgZl8sZF89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIeSgpO28oRjMsIkNhcmRpbmFsT3BlbiIpO0YzLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpCcCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07Zl89byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBGMyhuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gV3kodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixzPXQuX3kyO2lmKHQuX2wwMV9hPlppKXt2YXIgbD0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSx1PTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtuPShuKmwtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvdSxpPShpKmwtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvdX1pZih0Ll9sMjNfYT5aaSl7dmFyIGg9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsZj0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSpoK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvZixzPShzKmgrdC5feTEqdC5fbDIzXzJhLXIqdC5fbDEyXzJhKS9mfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLGksYSxzLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBhWSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXZhciBwXyx6Mz1NKCgpPT57InVzZSBzdHJpY3QiO0wzKCk7SHkoKTtvKFd5LCJwb2ludCIpO28oYVksIkNhdG11bGxSb20iKTthWS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpXeSh0aGlzLHQsZSk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX0sInBvaW50Iil9O3BfPW8oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKG4pe3JldHVybiBlP25ldyBhWShuLGUpOm5ldyBQMyhuLDApfXJldHVybiBvKHIsImNhdG11bGxSb20iKSxyLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKC41KX0pO2Z1bmN0aW9uIHNZKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9dmFyIG1fLG9ZPU0oKCk9PnsidXNlIHN0cmljdCI7aF8oKTskeSgpO3ozKCk7byhzWSwiQ2F0bXVsbFJvbUNsb3NlZCIpO3NZLnByb3RvdHlwZT17YXJlYVN0YXJ0OktzLGFyZWFFbmQ6S3MsbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Old5KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07bV89byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IHNZKG4sZSk6bmV3IEIzKG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gbFkodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX12YXIgZ18sY1k9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkXygpO3ozKCk7byhsWSwiQ2F0bXVsbFJvbU9wZW4iKTtsWS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Old5KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07Z189byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IGxZKG4sZSk6bmV3IEYzKG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gdVkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEczKHQpe3JldHVybiBuZXcgdVkodCl9dmFyIGhZPU0oKCk9PnsidXNlIHN0cmljdCI7JHkoKTtvKHVZLCJMaW5lYXJDbG9zZWQiKTt1WS5wcm90b3R5cGU9e2FyZWFTdGFydDpLcyxhcmVhRW5kOktzLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX0sInBvaW50Iil9O28oRzMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGZZKHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBkWSh0LGUscil7dmFyIG49dC5feDEtdC5feDAsaT1lLXQuX3gxLGE9KHQuX3kxLXQuX3kwKS8obnx8aTwwJiYtMCkscz0oci10Ll95MSkvKGl8fG48MCYmLTApLGw9KGEqaStzKm4pLyhuK2kpO3JldHVybihmWShhKStmWShzKSkqTWF0aC5taW4oTWF0aC5hYnMoYSksTWF0aC5hYnMocyksLjUqTWF0aC5hYnMobCkpfHwwfWZ1bmN0aW9uIHBZKHQsZSl7dmFyIHI9dC5feDEtdC5feDA7cmV0dXJuIHI/KDMqKHQuX3kxLXQuX3kwKS9yLWUpLzI6ZX1mdW5jdGlvbiB5Xyh0LGUscil7dmFyIG49dC5feDAsaT10Ll95MCxhPXQuX3gxLHM9dC5feTEsbD0oYS1uKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK2wsaStsKmUsYS1sLHMtbCpyLGEscyl9ZnVuY3Rpb24gJDModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG1ZKHQpe3RoaXMuX2NvbnRleHQ9bmV3IGdZKHQpfWZ1bmN0aW9uIGdZKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB2Xyh0KXtyZXR1cm4gbmV3ICQzKHQpfWZ1bmN0aW9uIHhfKHQpe3JldHVybiBuZXcgbVkodCl9dmFyIHlZPU0oKCk9PnsidXNlIHN0cmljdCI7byhmWSwic2lnbiIpO28oZFksInNsb3BlMyIpO28ocFksInNsb3BlMiIpO28oeV8sInBvaW50Iik7bygkMywiTW9ub3RvbmVYIik7JDMucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOnlfKHRoaXMsdGhpcy5fdDAscFkodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TmFOO2lmKHQ9K3QsZT0rZSwhKHQ9PT10aGlzLl94MSYmZT09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx5Xyh0aGlzLHBZKHRoaXMscj1kWSh0aGlzLHQsZSkpLHIpO2JyZWFrO2RlZmF1bHQ6eV8odGhpcyx0aGlzLl90MCxyPWRZKHRoaXMsdCxlKSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPXJ9fSwicG9pbnQiKX07byhtWSwiTW9ub3RvbmVZIik7KG1ZLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQzLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7JDMucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfTtvKGdZLCJSZWZsZWN0Q29udGV4dCIpO2dZLnByb3RvdHlwZT17bW92ZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSwibW92ZVRvIiksY2xvc2VQYXRoOm8oZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSwiY2xvc2VQYXRoIiksbGluZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSwibGluZVRvIiksYmV6aWVyQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LG4scixhLGkpfSwiYmV6aWVyQ3VydmVUbyIpfTtvKHZfLCJtb25vdG9uZVgiKTtvKHhfLCJtb25vdG9uZVkiKX0pO2Z1bmN0aW9uIHhZKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB2WSh0KXt2YXIgZSxyPXQubGVuZ3RoLTEsbixpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixzWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxzW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsc1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLHNbZV0tPW4qc1tlLTFdO2ZvcihpW3ItMV09c1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShzW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIFYzKHQpe3JldHVybiBuZXcgeFkodCl9dmFyIGJZPU0oKCk9PnsidXNlIHN0cmljdCI7byh4WSwiTmF0dXJhbCIpO3hZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPXZZKHQpLGk9dlkoZSksYT0wLHM9MTtzPHI7KythLCsrcyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W3NdLGVbc10pOyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmcj09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9LCJwb2ludCIpfTtvKHZZLCJjb250cm9sUG9pbnRzIik7byhWMywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVTModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIEgzKHQpe3JldHVybiBuZXcgVTModCwuNSl9ZnVuY3Rpb24gYl8odCl7cmV0dXJuIG5ldyBVMyh0LDApfWZ1bmN0aW9uIHdfKHQpe3JldHVybiBuZXcgVTModCwxKX12YXIgd1k9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFUzLCJTdGVwIik7VTMucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJnRoaXMuX3BvaW50PT09MiYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsZSl9YnJlYWt9fXRoaXMuX3g9dCx0aGlzLl95PWV9LCJwb2ludCIpfTtvKEgzLCJkZWZhdWx0Iik7byhiXywic3RlcEJlZm9yZSIpO28od18sInN0ZXBBZnRlciIpfSk7dmFyIFRZPU0oKCk9PnsidXNlIHN0cmljdCI7VVcoKTtYVygpO1FXKCk7ZVkoKTtyWSgpO1V5KCk7WlcoKTtpWSgpO2hfKCk7ZF8oKTtIeSgpO29ZKCk7Y1koKTt6MygpO2hZKCk7bl8oKTt5WSgpO2JZKCk7d1koKX0pO3ZhciBrWT1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEVZPU0oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBTaCh0LGUscil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PXJ9ZnVuY3Rpb24ga18odCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBUXztyZXR1cm4gdC5fX3pvb219dmFyIFRfLEVfPU0oKCk9PnsidXNlIHN0cmljdCI7byhTaCwiVHJhbnNmb3JtIik7U2gucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTaCxzY2FsZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09MT90aGlzOm5ldyBTaCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sInNjYWxlIiksdHJhbnNsYXRlOm8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PTAmZT09PTA/dGhpczpuZXcgU2godGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSwidHJhbnNsYXRlIiksYXBwbHk6byhmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LCJhcHBseSIpLGFwcGx5WDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LCJhcHBseVgiKSxhcHBseVk6byhmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSwiYXBwbHlZIiksaW52ZXJ0Om8oZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0sImludmVydCIpLGludmVydFg6byhmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30sImludmVydFgiKSxpbnZlcnRZOm8oZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LCJpbnZlcnRZIikscmVzY2FsZVg6byhmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LCJyZXNjYWxlWCIpLHJlc2NhbGVZOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSwicmVzY2FsZVkiKSx0b1N0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn0sInRvU3RyaW5nIil9O1RfPW5ldyBTaCgxLDAsMCk7a18ucHJvdG90eXBlPVNoLnByb3RvdHlwZTtvKGtfLCJ0cmFuc2Zvcm0iKX0pO3ZhciBTWT1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIENZPU0oKCk9PnsidXNlIHN0cmljdCI7czMoKTtrWSgpO0VZKCk7RV8oKTtTWSgpfSk7dmFyIEFZPU0oKCk9PnsidXNlIHN0cmljdCI7Q1koKTtFXygpfSk7dmFyIG1yPU0oKCk9PnsidXNlIHN0cmljdCI7cGgoKTtpVigpO2tIKCk7QUgoKTtrcCgpO19IKCk7TEgoKTtiNygpO2pWKCk7REgoKTtsOCgpO05IKCk7TUgoKTtTOCgpO3FIKCk7WEgoKTtDcCgpO2Q4KCk7akgoKTtSSCgpO0tIKCk7QlcoKTtHVygpO2dsKCk7VFkoKTtTMygpO0s4KCk7ZTMoKTtzMygpO0FZKCl9KTt2YXIgX1k9TmkoSmk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEppLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtKaS5CTEFOS19VUkw9SmkucmVsYXRpdmVGaXJzdENoYXJhY3RlcnM9Smkud2hpdGVzcGFjZUVzY2FwZUNoYXJzUmVnZXg9SmkudXJsU2NoZW1lUmVnZXg9SmkuY3RybENoYXJhY3RlcnNSZWdleD1KaS5odG1sQ3RybEVudGl0eVJlZ2V4PUppLmh0bWxFbnRpdGllc1JlZ2V4PUppLmludmFsaWRQcm90b2NvbFJlZ2V4PXZvaWQgMDtKaS5pbnZhbGlkUHJvdG9jb2xSZWdleD0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW07SmkuaHRtbEVudGl0aWVzUmVnZXg9LyYjKFx3KykoXlx3fDspPy9nO0ppLmh0bWxDdHJsRW50aXR5UmVnZXg9LyYobmV3bGluZXx0YWIpOy9naTtKaS5jdHJsQ2hhcmFjdGVyc1JlZ2V4PS9bXHUwMDAwLVx1MDAxRlx1MDA3Ri1cdTAwOUZcdTIwMDAtXHUyMDBEXHVGRUZGXS9naW07SmkudXJsU2NoZW1lUmVnZXg9L14uKyg6fCZjb2xvbjspL2dpbTtKaS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleD0vKFxcfCU1W2NDXSkoKCUoNltlRV18NzJ8NzQpKXxbbnJ0XSkvZztKaS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycz1bIi4iLCIvIl07SmkuQkxBTktfVVJMPSJhYm91dDpibGFuayJ9KTt2YXIgRnA9TmkoVzM9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFczLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtXMy5zYW5pdGl6ZVVybD12b2lkIDA7dmFyIFNhPV9ZKCk7ZnVuY3Rpb24gcEVlKHQpe3JldHVybiBTYS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycy5pbmRleE9mKHRbMF0pPi0xfW8ocEVlLCJpc1JlbGF0aXZlVXJsV2l0aG91dFByb3RvY29sIik7ZnVuY3Rpb24gbUVlKHQpe3ZhciBlPXQucmVwbGFjZShTYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCIiKTtyZXR1cm4gZS5yZXBsYWNlKFNhLmh0bWxFbnRpdGllc1JlZ2V4LGZ1bmN0aW9uKHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobil9KX1vKG1FZSwiZGVjb2RlSHRtbENoYXJhY3RlcnMiKTtmdW5jdGlvbiBnRWUodCl7cmV0dXJuIFVSTC5jYW5QYXJzZSh0KX1vKGdFZSwiaXNWYWxpZFVybCIpO2Z1bmN0aW9uIExZKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoe3JldHVybiB0fX1vKExZLCJkZWNvZGVVUkkiKTtmdW5jdGlvbiB5RWUodCl7aWYoIXQpcmV0dXJuIFNhLkJMQU5LX1VSTDt2YXIgZSxyPUxZKHQudHJpbSgpKTtkbyByPW1FZShyKS5yZXBsYWNlKFNhLmh0bWxDdHJsRW50aXR5UmVnZXgsIiIpLnJlcGxhY2UoU2EuY3RybENoYXJhY3RlcnNSZWdleCwiIikucmVwbGFjZShTYS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleCwiIikudHJpbSgpLHI9TFkociksZT1yLm1hdGNoKFNhLmN0cmxDaGFyYWN0ZXJzUmVnZXgpfHxyLm1hdGNoKFNhLmh0bWxFbnRpdGllc1JlZ2V4KXx8ci5tYXRjaChTYS5odG1sQ3RybEVudGl0eVJlZ2V4KXx8ci5tYXRjaChTYS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleCk7d2hpbGUoZSYmZS5sZW5ndGg+MCk7dmFyIG49cjtpZighbilyZXR1cm4gU2EuQkxBTktfVVJMO2lmKHBFZShuKSlyZXR1cm4gbjt2YXIgaT1uLnRyaW1TdGFydCgpLGE9aS5tYXRjaChTYS51cmxTY2hlbWVSZWdleCk7aWYoIWEpcmV0dXJuIG47dmFyIHM9YVswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtpZihTYS5pbnZhbGlkUHJvdG9jb2xSZWdleC50ZXN0KHMpKXJldHVybiBTYS5CTEFOS19VUkw7dmFyIGw9aS5yZXBsYWNlKC9cXC9nLCIvIik7aWYocz09PSJtYWlsdG86Inx8cy5pbmNsdWRlcygiOi8vIikpcmV0dXJuIGw7aWYocz09PSJodHRwOiJ8fHM9PT0iaHR0cHM6Iil7aWYoIWdFZShsKSlyZXR1cm4gU2EuQkxBTktfVVJMO3ZhciB1PW5ldyBVUkwobCk7cmV0dXJuIHUucHJvdG9jb2w9dS5wcm90b2NvbC50b0xvd2VyQ2FzZSgpLHUuaG9zdG5hbWU9dS5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLHUudG9TdHJpbmcoKX1yZXR1cm4gbH1vKHlFZSwic2FuaXRpemVVcmwiKTtXMy5zYW5pdGl6ZVVybD15RWV9KTt2YXIgU18sbWQsWTMsRFksTlksUlksU2wsWXkscXk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtTXz1rYShGcCgpLDEpO2ZyKCk7bWQ9bygodCxlKT0+e2xldCByPXQuYXBwZW5kKCJyZWN0Iik7aWYoci5hdHRyKCJ4IixlLngpLHIuYXR0cigieSIsZS55KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksci5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxyLmF0dHIoIndpZHRoIixlLndpZHRoKSxyLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLGUubmFtZSYmci5hdHRyKCJuYW1lIixlLm5hbWUpLGUucngmJnIuYXR0cigicngiLGUucngpLGUucnkmJnIuYXR0cigicnkiLGUucnkpLGUuYXR0cnMhPT12b2lkIDApZm9yKGxldCBuIGluIGUuYXR0cnMpci5hdHRyKG4sZS5hdHRyc1tuXSk7cmV0dXJuIGUuY2xhc3MmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHJ9LCJkcmF3UmVjdCIpLFkzPW8oKHQsZSk9PntsZXQgcj17eDplLnN0YXJ0eCx5OmUuc3RhcnR5LHdpZHRoOmUuc3RvcHgtZS5zdGFydHgsaGVpZ2h0OmUuc3RvcHktZS5zdGFydHksZmlsbDplLmZpbGwsc3Ryb2tlOmUuc3Ryb2tlLGNsYXNzOiJyZWN0In07bWQodCxyKS5sb3dlcigpfSwiZHJhd0JhY2tncm91bmRSZWN0IiksRFk9bygodCxlKT0+e2xldCByPWUudGV4dC5yZXBsYWNlKGpmLCIgIiksbj10LmFwcGVuZCgidGV4dCIpO24uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLG4uc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7bGV0IGk9bi5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54K2UudGV4dE1hcmdpbioyKSxpLnRleHQociksbn0sImRyYXdUZXh0IiksTlk9bygodCxlLHIsbik9PntsZXQgaT10LmFwcGVuZCgiaW1hZ2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIscik7bGV0IGE9KDAsU18uc2FuaXRpemVVcmwpKG4pO2kuYXR0cigieGxpbms6aHJlZiIsYSl9LCJkcmF3SW1hZ2UiKSxSWT1vKCh0LGUscixuKT0+e2xldCBpPXQuYXBwZW5kKCJ1c2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIscik7bGV0IGE9KDAsU18uc2FuaXRpemVVcmwpKG4pO2kuYXR0cigieGxpbms6aHJlZiIsYCMke2F9YCl9LCJkcmF3RW1iZWRkZWRJbWFnZSIpLFNsPW8oKCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLGFuY2hvcjoic3RhcnQiLHJ4OjAscnk6MH0pLCJnZXROb3RlUmVjdCIpLFl5PW8oKCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCwidGV4dC1hbmNob3IiOiJzdGFydCIsc3R5bGU6IiM2NjYiLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITB9KSwiZ2V0VGV4dE9iaiIpfSk7dmFyIE1ZLENfLElZLHZFZSx4RWUsYkVlLHdFZSxURWUsa0VlLEVFZSxTRWUsQ0VlLEFFZSxfRWUsTEVlLHZ1LENsLE9ZPU0oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtxeSgpO01ZPWthKEZwKCksMSksQ189byhmdW5jdGlvbih0LGUpe3JldHVybiBtZCh0LGUpfSwiZHJhd1JlY3QiKSxJWT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtsZXQgcz10LmFwcGVuZCgiaW1hZ2UiKTtzLmF0dHIoIndpZHRoIixlKSxzLmF0dHIoImhlaWdodCIscikscy5hdHRyKCJ4IixuKSxzLmF0dHIoInkiLGkpO2xldCBsPWEuc3RhcnRzV2l0aCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0Iik/YTooMCxNWS5zYW5pdGl6ZVVybCkoYSk7cy5hdHRyKCJ4bGluazpocmVmIixsKX0sImRyYXdJbWFnZSIpLHZFZT1vKCh0LGUscik9PntsZXQgbj10LmFwcGVuZCgiZyIpLGk9MDtmb3IobGV0IGEgb2YgZSl7bGV0IHM9YS50ZXh0Q29sb3I/YS50ZXh0Q29sb3I6IiM0NDQ0NDQiLGw9YS5saW5lQ29sb3I/YS5saW5lQ29sb3I6IiM0NDQ0NDQiLHU9YS5vZmZzZXRYP3BhcnNlSW50KGEub2Zmc2V0WCk6MCxoPWEub2Zmc2V0WT9wYXJzZUludChhLm9mZnNldFkpOjAsZj0iIjtpZihpPT09MCl7bGV0IHA9bi5hcHBlbmQoImxpbmUiKTtwLmF0dHIoIngxIixhLnN0YXJ0UG9pbnQueCkscC5hdHRyKCJ5MSIsYS5zdGFydFBvaW50LnkpLHAuYXR0cigieDIiLGEuZW5kUG9pbnQueCkscC5hdHRyKCJ5MiIsYS5lbmRQb2ludC55KSxwLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKSxwLmF0dHIoInN0cm9rZSIsbCkscC5zdHlsZSgiZmlsbCIsIm5vbmUiKSxhLnR5cGUhPT0icmVsX2IiJiZwLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitmKyIjYXJyb3doZWFkKSIpLChhLnR5cGU9PT0iYmlyZWwifHxhLnR5cGU9PT0icmVsX2IiKSYmcC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitmKyIjYXJyb3dlbmQpIiksaT0tMX1lbHNle2xldCBwPW4uYXBwZW5kKCJwYXRoIik7cC5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKS5hdHRyKCJzdHJva2UiLGwpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eSBRY29udHJvbHgsY29udHJvbHkgc3RvcHgsc3RvcHkgIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEuc3RhcnRQb2ludC54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEuc3RhcnRQb2ludC55KS5yZXBsYWNlQWxsKCJjb250cm9seCIsYS5zdGFydFBvaW50LngrKGEuZW5kUG9pbnQueC1hLnN0YXJ0UG9pbnQueCkvMi0oYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS80KS5yZXBsYWNlQWxsKCJjb250cm9seSIsYS5zdGFydFBvaW50LnkrKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMikucmVwbGFjZUFsbCgic3RvcHgiLGEuZW5kUG9pbnQueCkucmVwbGFjZUFsbCgic3RvcHkiLGEuZW5kUG9pbnQueSkpLGEudHlwZSE9PSJyZWxfYiImJnAuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiNhcnJvd2hlYWQpIiksKGEudHlwZT09PSJiaXJlbCJ8fGEudHlwZT09PSJyZWxfYiIpJiZwLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiNhcnJvd2VuZCkiKX1sZXQgZD1yLm1lc3NhZ2VGb250KCk7dnUocikoYS5sYWJlbC50ZXh0LG4sTWF0aC5taW4oYS5zdGFydFBvaW50LngsYS5lbmRQb2ludC54KStNYXRoLmFicyhhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzIrdSxNYXRoLm1pbihhLnN0YXJ0UG9pbnQueSxhLmVuZFBvaW50LnkpK01hdGguYWJzKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMitoLGEubGFiZWwud2lkdGgsYS5sYWJlbC5oZWlnaHQse2ZpbGw6c30sZCksYS50ZWNobiYmYS50ZWNobi50ZXh0IT09IiImJihkPXIubWVzc2FnZUZvbnQoKSx2dShyKSgiWyIrYS50ZWNobi50ZXh0KyJdIixuLE1hdGgubWluKGEuc3RhcnRQb2ludC54LGEuZW5kUG9pbnQueCkrTWF0aC5hYnMoYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS8yK3UsTWF0aC5taW4oYS5zdGFydFBvaW50LnksYS5lbmRQb2ludC55KStNYXRoLmFicyhhLmVuZFBvaW50LnktYS5zdGFydFBvaW50LnkpLzIrci5tZXNzYWdlRm9udFNpemUrNStoLE1hdGgubWF4KGEubGFiZWwud2lkdGgsYS50ZWNobi53aWR0aCksYS50ZWNobi5oZWlnaHQse2ZpbGw6cywiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGQpKX19LCJkcmF3UmVscyIpLHhFZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9ZS5iZ0NvbG9yP2UuYmdDb2xvcjoibm9uZSIsYT1lLmJvcmRlckNvbG9yP2UuYm9yZGVyQ29sb3I6IiM0NDQ0NDQiLHM9ZS5mb250Q29sb3I/ZS5mb250Q29sb3I6ImJsYWNrIixsPXsic3Ryb2tlLXdpZHRoIjoxLCJzdHJva2UtZGFzaGFycmF5IjoiNy4wLDcuMCJ9O2Uubm9kZVR5cGUmJihsPXsic3Ryb2tlLXdpZHRoIjoxfSk7bGV0IHU9e3g6ZS54LHk6ZS55LGZpbGw6aSxzdHJva2U6YSx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxyeDoyLjUscnk6Mi41LGF0dHJzOmx9O0NfKG4sdSk7bGV0IGg9ci5ib3VuZGFyeUZvbnQoKTtoLmZvbnRXZWlnaHQ9ImJvbGQiLGguZm9udFNpemU9aC5mb250U2l6ZSsyLGguZm9udENvbG9yPXMsdnUocikoZS5sYWJlbC50ZXh0LG4sZS54LGUueStlLmxhYmVsLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LGgpLGUudHlwZSYmZS50eXBlLnRleHQhPT0iIiYmKGg9ci5ib3VuZGFyeUZvbnQoKSxoLmZvbnRDb2xvcj1zLHZ1KHIpKGUudHlwZS50ZXh0LG4sZS54LGUueStlLnR5cGUuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCkpLGUuZGVzY3ImJmUuZGVzY3IudGV4dCE9PSIiJiYoaD1yLmJvdW5kYXJ5Rm9udCgpLGguZm9udFNpemU9aC5mb250U2l6ZS0yLGguZm9udENvbG9yPXMsdnUocikoZS5kZXNjci50ZXh0LG4sZS54LGUueStlLmRlc2NyLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LGgpKX0sImRyYXdCb3VuZGFyeSIpLGJFZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLmJnQ29sb3I/ZS5iZ0NvbG9yOnJbZS50eXBlQzRTaGFwZS50ZXh0KyJfYmdfY29sb3IiXSxpPWUuYm9yZGVyQ29sb3I/ZS5ib3JkZXJDb2xvcjpyW2UudHlwZUM0U2hhcGUudGV4dCsiX2JvcmRlcl9jb2xvciJdLGE9ZS5mb250Q29sb3I/ZS5mb250Q29sb3I6IiNGRkZGRkYiLHM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpzPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9IjticmVhaztjYXNlImV4dGVybmFsX3BlcnNvbiI6cz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQjZFbEVRVlI0WHUyWUxZK0VNQkNHOStkV3IwYWowV2cwR28xR28wK2o4WGR2MnVUQ3Z2MWdwdDBlYkhLUHVoRGFlVzQ2MDVaOW1Kdng0QWRYVXlUVWRkMDh6K3U2ZmxtV1pSbkhzV2thZms5RHB0QXdEUHUrZjBlQVl0dTJQRWFHV3VqNWZDSVpyQkFDMmVMQkFuUkNzRWtreG1lYUpwN2lESjJRTURkSHNMZzhTeEtGRUphQW84bEFYbm11T0ZJaFRNcHh4S0FUZWJvNFVpRmtudU5vNE9uaVNJWFF5UnhFQTNZc25qR0NWRWpWWEQ3eUxVQXF4QkdVeVB2L1k0VzJiZU1nR3VTN2tWUUlCeWNIMGZEK29pNXBlelFFVHhkSEttUUtHazFlUUVZbGRLK2p3NUd4UGZaOXo3TWswUW5oZjFXMW0zdy8vRVVuNUJEbVNac2JSNDRRUUxCRXFyQkhxT3JtU0thUUF4ZG5MQXJDcnhaY003QTdaS3M0aW9ScThMRkMrTnBDM1dDQkpzdnBWdzVlZG05aUVYRnV5TmZ4WEFnU3dmckZRMWMwaU5kYThBZGVqdlVnbmt0T3RKUVF4bWNmRnpHZ2xjNVdWQ2o3b0RnRnFVMThib2VGU3M1MkNVaDhMRThCSVZRRFQxQUJyQjBIdGdTRVlsWDVkb0puQ3d2OVRYb2NLQ2FLYm53aGRES1BxNGxmM1N3VTNITHE0Vi8rV1loSFZNYS8zYjRJbGZ5aWtBZHVDa2NCYzdtUTMvei9RcS9jVHVpa2hrekIxMkFlL21jSkM5VStWbzhFajFnV0F0Z2JlR2dGc0FNSHI1MEJJV09MQ2JlenZocEJGVWRZNkVKdUovUURXMFhvTVg2MHpaMEFBQUFBU1VWT1JLNUNZSUk9IjticmVha31sZXQgbD10LmFwcGVuZCgiZyIpO2wuYXR0cigiY2xhc3MiLCJwZXJzb24tbWFuIik7bGV0IHU9U2woKTtzd2l0Y2goZS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOmNhc2Uic3lzdGVtIjpjYXNlImV4dGVybmFsX3N5c3RlbSI6Y2FzZSJjb250YWluZXIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyIjpjYXNlImNvbXBvbmVudCI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnQiOnUueD1lLngsdS55PWUueSx1LmZpbGw9bix1LndpZHRoPWUud2lkdGgsdS5oZWlnaHQ9ZS5oZWlnaHQsdS5zdHJva2U9aSx1LnJ4PTIuNSx1LnJ5PTIuNSx1LmF0dHJzPXsic3Ryb2tlLXdpZHRoIjouNX0sQ18obCx1KTticmVhaztjYXNlInN5c3RlbV9kYiI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fZGIiOmNhc2UiY29udGFpbmVyX2RiIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9kYiI6Y2FzZSJjb21wb25lbnRfZGIiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X2RiIjpsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLG4pLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsLTEwIGhhbGYsLTEwIGhhbGYsLTEwYzAsMCBoYWxmLDAgaGFsZiwxMGwwLGhlaWdodGMwLDEwIC1oYWxmLDEwIC1oYWxmLDEwYzAsMCAtaGFsZiwwIC1oYWxmLC0xMGwwLC1oZWlnaHQiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGUueSkucmVwbGFjZUFsbCgiaGFsZiIsZS53aWR0aC8yKS5yZXBsYWNlQWxsKCJoZWlnaHQiLGUuaGVpZ2h0KSksbC5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsMTAgaGFsZiwxMCBoYWxmLDEwYzAsMCBoYWxmLDAgaGFsZiwtMTAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGUueSkucmVwbGFjZUFsbCgiaGFsZiIsZS53aWR0aC8yKSk7YnJlYWs7Y2FzZSJzeXN0ZW1fcXVldWUiOmNhc2UiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlIjpjYXNlImNvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9jb250YWluZXJfcXVldWUiOmNhc2UiY29tcG9uZW50X3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSI6bC5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIixuKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWx3aWR0aCwwYzUsMCA1LGhhbGYgNSxoYWxmYzAsMCAwLGhhbGYgLTUsaGFsZmwtd2lkdGgsMGMtNSwwIC01LC1oYWxmIC01LC1oYWxmYzAsMCAwLC1oYWxmIDUsLWhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGUueSkucmVwbGFjZUFsbCgid2lkdGgiLGUud2lkdGgpLnJlcGxhY2VBbGwoImhhbGYiLGUuaGVpZ2h0LzIpKSxsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljLTUsMCAtNSxoYWxmIC01LGhhbGZjMCxoYWxmIDUsaGFsZiA1LGhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54K2Uud2lkdGgpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLmhlaWdodC8yKSk7YnJlYWt9bGV0IGg9TEVlKHIsZS50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2gobC5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIixhKS5hdHRyKCJmb250LWZhbWlseSIsaC5mb250RmFtaWx5KS5hdHRyKCJmb250LXNpemUiLGguZm9udFNpemUtMikuYXR0cigiZm9udC1zdHlsZSIsIml0YWxpYyIpLmF0dHIoImxlbmd0aEFkanVzdCIsInNwYWNpbmciKS5hdHRyKCJ0ZXh0TGVuZ3RoIixlLnR5cGVDNFNoYXBlLndpZHRoKS5hdHRyKCJ4IixlLngrZS53aWR0aC8yLWUudHlwZUM0U2hhcGUud2lkdGgvMikuYXR0cigieSIsZS55K2UudHlwZUM0U2hhcGUuWSkudGV4dCgiPDwiK2UudHlwZUM0U2hhcGUudGV4dCsiPj4iKSxlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6SVkobCw0OCw0OCxlLngrZS53aWR0aC8yLTI0LGUueStlLmltYWdlLlkscyk7YnJlYWt9bGV0IGY9cltlLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpO3JldHVybiBmLmZvbnRXZWlnaHQ9ImJvbGQiLGYuZm9udFNpemU9Zi5mb250U2l6ZSsyLGYuZm9udENvbG9yPWEsdnUocikoZS5sYWJlbC50ZXh0LGwsZS54LGUueStlLmxhYmVsLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDphfSxmKSxmPXJbZS50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKSxmLmZvbnRDb2xvcj1hLGUudGVjaG4mJmUudGVjaG4/LnRleHQhPT0iIj92dShyKShlLnRlY2huLnRleHQsbCxlLngsZS55K2UudGVjaG4uWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmEsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxmKTplLnR5cGUmJmUudHlwZS50ZXh0IT09IiImJnZ1KHIpKGUudHlwZS50ZXh0LGwsZS54LGUueStlLnR5cGUuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmEsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxmKSxlLmRlc2NyJiZlLmRlc2NyLnRleHQhPT0iIiYmKGY9ci5wZXJzb25Gb250KCksZi5mb250Q29sb3I9YSx2dShyKShlLmRlc2NyLnRleHQsbCxlLngsZS55K2UuZGVzY3IuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmF9LGYpKSxlLmhlaWdodH0sImRyYXdDNFNoYXBlIiksd0VlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LCJpbnNlcnREYXRhYmFzZUljb24iKSxURWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSwiaW5zZXJ0Q29tcHV0ZXJJY29uIiksa0VlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sImluc2VydENsb2NrSWNvbiIpLEVFZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0hlYWQiKSxTRWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2VuZCIpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgeiIpfSwiaW5zZXJ0QXJyb3dFbmQiKSxDRWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiaW5zZXJ0QXJyb3dGaWxsZWRIZWFkIiksQUVlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwic2VxdWVuY2VudW1iZXIiKS5hdHRyKCJyZWZYIiwxNSkuYXR0cigicmVmWSIsMTUpLmF0dHIoIm1hcmtlcldpZHRoIiw2MCkuYXR0cigibWFya2VySGVpZ2h0Iiw0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDE1KS5hdHRyKCJjeSIsMTUpLmF0dHIoInIiLDYpfSwiaW5zZXJ0RHluYW1pY051bWJlciIpLF9FZT1vKGZ1bmN0aW9uKHQpe2xldCByPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO3IuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LCJpbnNlcnRBcnJvd0Nyb3NzSGVhZCIpLExFZT1vKCh0LGUpPT4oe2ZvbnRGYW1pbHk6dFtlKyJGb250RmFtaWx5Il0sZm9udFNpemU6dFtlKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6dFtlKyJGb250V2VpZ2h0Il19KSwiZ2V0QzRTaGFwZUZvbnQiKSx2dT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxhLHMsbCx1LGgsZil7bGV0IGQ9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCtoLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChpKTtuKGQsZil9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGksYSxzLGwsdSxoLGYsZCl7bGV0e2ZvbnRTaXplOnAsZm9udEZhbWlseTptLGZvbnRXZWlnaHQ6Z309ZCx5PWkuc3BsaXQoamUubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgdj0wO3Y8eS5sZW5ndGg7disrKXtsZXQgeD12KnAtcCooeS5sZW5ndGgtMSkvMixiPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIscCkuc3R5bGUoImZvbnQtd2VpZ2h0IixnKS5zdHlsZSgiZm9udC1mYW1pbHkiLG0pO2IuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImR5Iix4KS50ZXh0KHlbdl0pLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1hdGhlbWF0aWNhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7Zy5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChpKSxlKGkscCxzLGwsdSxoLGYsZCksbihnLGYpfW8ociwiYnlGbyIpO2Z1bmN0aW9uIG4oaSxhKXtmb3IobGV0IHMgaW4gYSlhLmhhc093blByb3BlcnR5KHMpJiZpLmF0dHIocyxhW3NdKX1yZXR1cm4gbyhuLCJfc2V0VGV4dEF0dHJzIiksZnVuY3Rpb24oaSl7cmV0dXJuIGkudGV4dFBsYWNlbWVudD09PSJmbyI/cjppLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj90OmV9fSgpLENsPXtkcmF3UmVjdDpDXyxkcmF3Qm91bmRhcnk6eEVlLGRyYXdDNFNoYXBlOmJFZSxkcmF3UmVsczp2RWUsZHJhd0ltYWdlOklZLGluc2VydEFycm93SGVhZDpFRWUsaW5zZXJ0QXJyb3dFbmQ6U0VlLGluc2VydEFycm93RmlsbGVkSGVhZDpDRWUsaW5zZXJ0RHluYW1pY051bWJlcjpBRWUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6X0VlLGluc2VydERhdGFiYXNlSWNvbjp3RWUsaW5zZXJ0Q29tcHV0ZXJJY29uOlRFZSxpbnNlcnRDbG9ja0ljb246a0VlfX0pO3ZhciBERWUsWDMsQV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtERWU9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLFgzPURFZX0pO3ZhciBORWUsUkVlLGFpLE5vPU0oKCk9PnsidXNlIHN0cmljdCI7QV8oKTtORWU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixSRWU9WDN8fE5FZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhaT1SRWV9KTt2YXIgTUVlLGVhLGdkPU0oKCk9PnsidXNlIHN0cmljdCI7Tm8oKTtNRWU9YWkuU3ltYm9sLGVhPU1FZX0pO2Z1bmN0aW9uIFBFZSh0KXt2YXIgZT1JRWUuY2FsbCh0LFh5KSxyPXRbWHldO3RyeXt0W1h5XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2h7fXZhciBpPU9FZS5jYWxsKHQpO3JldHVybiBuJiYoZT90W1h5XT1yOmRlbGV0ZSB0W1h5XSksaX12YXIgUFksSUVlLE9FZSxYeSxCWSxGWT1NKCgpPT57InVzZSBzdHJpY3QiO2dkKCk7UFk9T2JqZWN0LnByb3RvdHlwZSxJRWU9UFkuaGFzT3duUHJvcGVydHksT0VlPVBZLnRvU3RyaW5nLFh5PWVhP2VhLnRvU3RyaW5nVGFnOnZvaWQgMDtvKFBFZSwiZ2V0UmF3VGFnIik7Qlk9UEVlfSk7ZnVuY3Rpb24gekVlKHQpe3JldHVybiBGRWUuY2FsbCh0KX12YXIgQkVlLEZFZSx6WSxHWT1NKCgpPT57InVzZSBzdHJpY3QiO0JFZT1PYmplY3QucHJvdG90eXBlLEZFZT1CRWUudG9TdHJpbmc7byh6RWUsIm9iamVjdFRvU3RyaW5nIik7elk9ekVlfSk7ZnVuY3Rpb24gVkVlKHQpe3JldHVybiB0PT1udWxsP3Q9PT12b2lkIDA/JEVlOkdFZTokWSYmJFkgaW4gT2JqZWN0KHQpP0JZKHQpOnpZKHQpfXZhciBHRWUsJEVlLCRZLGNhLHh1PU0oKCk9PnsidXNlIHN0cmljdCI7Z2QoKTtGWSgpO0dZKCk7R0VlPSJbb2JqZWN0IE51bGxdIiwkRWU9IltvYmplY3QgVW5kZWZpbmVkXSIsJFk9ZWE/ZWEudG9TdHJpbmdUYWc6dm9pZCAwO28oVkVlLCJiYXNlR2V0VGFnIik7Y2E9VkVlfSk7ZnVuY3Rpb24gVUVlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiB0IT1udWxsJiYoZT09Im9iamVjdCJ8fGU9PSJmdW5jdGlvbiIpfXZhciB5bixRcz1NKCgpPT57InVzZSBzdHJpY3QiO28oVUVlLCJpc09iamVjdCIpO3luPVVFZX0pO2Z1bmN0aW9uIFhFZSh0KXtpZigheW4odCkpcmV0dXJuITE7dmFyIGU9Y2EodCk7cmV0dXJuIGU9PVdFZXx8ZT09WUVlfHxlPT1IRWV8fGU9PXFFZX12YXIgSEVlLFdFZSxZRWUscUVlLEVpLGp5PU0oKCk9PnsidXNlIHN0cmljdCI7eHUoKTtRcygpO0hFZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsV0VlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsWUVlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIscUVlPSJbb2JqZWN0IFByb3h5XSI7byhYRWUsImlzRnVuY3Rpb24iKTtFaT1YRWV9KTt2YXIgakVlLGozLFZZPU0oKCk9PnsidXNlIHN0cmljdCI7Tm8oKTtqRWU9YWlbIl9fY29yZS1qc19zaGFyZWRfXyJdLGozPWpFZX0pO2Z1bmN0aW9uIEtFZSh0KXtyZXR1cm4hIVVZJiZVWSBpbiB0fXZhciBVWSxIWSxXWT1NKCgpPT57InVzZSBzdHJpY3QiO1ZZKCk7VVk9ZnVuY3Rpb24oKXt2YXIgdD0vW14uXSskLy5leGVjKGozJiZqMy5rZXlzJiZqMy5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIHQ/IlN5bWJvbChzcmMpXzEuIit0OiIifSgpO28oS0VlLCJpc01hc2tlZCIpO0hZPUtFZX0pO2Z1bmN0aW9uIEpFZSh0KXtpZih0IT1udWxsKXt0cnl7cmV0dXJuIFpFZS5jYWxsKHQpfWNhdGNoe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgUUVlLFpFZSxidSxfXz1NKCgpPT57InVzZSBzdHJpY3QiO1FFZT1GdW5jdGlvbi5wcm90b3R5cGUsWkVlPVFFZS50b1N0cmluZztvKEpFZSwidG9Tb3VyY2UiKTtidT1KRWV9KTtmdW5jdGlvbiBvNmUodCl7aWYoIXluKHQpfHxIWSh0KSlyZXR1cm4hMTt2YXIgZT1FaSh0KT9zNmU6dDZlO3JldHVybiBlLnRlc3QoYnUodCkpfXZhciBlNmUsdDZlLHI2ZSxuNmUsaTZlLGE2ZSxzNmUsWVkscVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqeSgpO1dZKCk7UXMoKTtfXygpO2U2ZT0vW1xcXiQuKis/KClbXF17fXxdL2csdDZlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHI2ZT1GdW5jdGlvbi5wcm90b3R5cGUsbjZlPU9iamVjdC5wcm90b3R5cGUsaTZlPXI2ZS50b1N0cmluZyxhNmU9bjZlLmhhc093blByb3BlcnR5LHM2ZT1SZWdFeHAoIl4iK2k2ZS5jYWxsKGE2ZSkucmVwbGFjZShlNmUsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7byhvNmUsImJhc2VJc05hdGl2ZSIpO1lZPW82ZX0pO2Z1bmN0aW9uIGw2ZSh0LGUpe3JldHVybiB0Py5bZV19dmFyIFhZLGpZPU0oKCk9PnsidXNlIHN0cmljdCI7byhsNmUsImdldFZhbHVlIik7WFk9bDZlfSk7ZnVuY3Rpb24gYzZlKHQsZSl7dmFyIHI9WFkodCxlKTtyZXR1cm4gWVkocik/cjp2b2lkIDB9dmFyIHZzLENoPU0oKCk9PnsidXNlIHN0cmljdCI7cVkoKTtqWSgpO28oYzZlLCJnZXROYXRpdmUiKTt2cz1jNmV9KTt2YXIgdTZlLHd1LEt5PU0oKCk9PnsidXNlIHN0cmljdCI7Q2goKTt1NmU9dnMoT2JqZWN0LCJjcmVhdGUiKSx3dT11NmV9KTtmdW5jdGlvbiBoNmUoKXt0aGlzLl9fZGF0YV9fPXd1P3d1KG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBLWSxRWT1NKCgpPT57InVzZSBzdHJpY3QiO0t5KCk7byhoNmUsImhhc2hDbGVhciIpO0tZPWg2ZX0pO2Z1bmN0aW9uIGY2ZSh0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX12YXIgWlksSlk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGY2ZSwiaGFzaERlbGV0ZSIpO1pZPWY2ZX0pO2Z1bmN0aW9uIGc2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKHd1KXt2YXIgcj1lW3RdO3JldHVybiByPT09ZDZlP3ZvaWQgMDpyfXJldHVybiBtNmUuY2FsbChlLHQpP2VbdF06dm9pZCAwfXZhciBkNmUscDZlLG02ZSxlcSx0cT1NKCgpPT57InVzZSBzdHJpY3QiO0t5KCk7ZDZlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixwNmU9T2JqZWN0LnByb3RvdHlwZSxtNmU9cDZlLmhhc093blByb3BlcnR5O28oZzZlLCJoYXNoR2V0Iik7ZXE9ZzZlfSk7ZnVuY3Rpb24geDZlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHd1P2VbdF0hPT12b2lkIDA6djZlLmNhbGwoZSx0KX12YXIgeTZlLHY2ZSxycSxucT1NKCgpPT57InVzZSBzdHJpY3QiO0t5KCk7eTZlPU9iamVjdC5wcm90b3R5cGUsdjZlPXk2ZS5oYXNPd25Qcm9wZXJ0eTtvKHg2ZSwiaGFzaEhhcyIpO3JxPXg2ZX0pO2Z1bmN0aW9uIHc2ZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLHJbdF09d3UmJmU9PT12b2lkIDA/YjZlOmUsdGhpc312YXIgYjZlLGlxLGFxPU0oKCk9PnsidXNlIHN0cmljdCI7S3koKTtiNmU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO28odzZlLCJoYXNoU2V0Iik7aXE9dzZlfSk7ZnVuY3Rpb24genAodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19dmFyIExfLHNxPU0oKCk9PnsidXNlIHN0cmljdCI7UVkoKTtKWSgpO3RxKCk7bnEoKTthcSgpO28oenAsIkhhc2giKTt6cC5wcm90b3R5cGUuY2xlYXI9S1k7enAucHJvdG90eXBlLmRlbGV0ZT1aWTt6cC5wcm90b3R5cGUuZ2V0PWVxO3pwLnByb3RvdHlwZS5oYXM9cnE7enAucHJvdG90eXBlLnNldD1pcTtMXz16cH0pO2Z1bmN0aW9uIFQ2ZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9dmFyIG9xLGxxPU0oKCk9PnsidXNlIHN0cmljdCI7byhUNmUsImxpc3RDYWNoZUNsZWFyIik7b3E9VDZlfSk7ZnVuY3Rpb24gazZlKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT09dCYmZSE9PWV9dmFyIFJvLHlkPU0oKCk9PnsidXNlIHN0cmljdCI7byhrNmUsImVxIik7Um89azZlfSk7ZnVuY3Rpb24gRTZlKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoO3ItLTspaWYoUm8odFtyXVswXSxlKSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgQWgsUXk9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5ZCgpO28oRTZlLCJhc3NvY0luZGV4T2YiKTtBaD1FNmV9KTtmdW5jdGlvbiBBNmUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPUFoKGUsdCk7aWYocjwwKXJldHVybiExO3ZhciBuPWUubGVuZ3RoLTE7cmV0dXJuIHI9PW4/ZS5wb3AoKTpDNmUuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITB9dmFyIFM2ZSxDNmUsY3EsdXE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtReSgpO1M2ZT1BcnJheS5wcm90b3R5cGUsQzZlPVM2ZS5zcGxpY2U7byhBNmUsImxpc3RDYWNoZURlbGV0ZSIpO2NxPUE2ZX0pO2Z1bmN0aW9uIF82ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9QWgoZSx0KTtyZXR1cm4gcjwwP3ZvaWQgMDplW3JdWzFdfXZhciBocSxmcT1NKCgpPT57InVzZSBzdHJpY3QiO1F5KCk7byhfNmUsImxpc3RDYWNoZUdldCIpO2hxPV82ZX0pO2Z1bmN0aW9uIEw2ZSh0KXtyZXR1cm4gQWgodGhpcy5fX2RhdGFfXyx0KT4tMX12YXIgZHEscHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtReSgpO28oTDZlLCJsaXN0Q2FjaGVIYXMiKTtkcT1MNmV9KTtmdW5jdGlvbiBENmUodCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fLG49QWgocix0KTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW3QsZV0pKTpyW25dWzFdPWUsdGhpc312YXIgbXEsZ3E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtReSgpO28oRDZlLCJsaXN0Q2FjaGVTZXQiKTttcT1ENmV9KTtmdW5jdGlvbiBHcCh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX12YXIgX2gsWnk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtscSgpO3VxKCk7ZnEoKTtwcSgpO2dxKCk7byhHcCwiTGlzdENhY2hlIik7R3AucHJvdG90eXBlLmNsZWFyPW9xO0dwLnByb3RvdHlwZS5kZWxldGU9Y3E7R3AucHJvdG90eXBlLmdldD1ocTtHcC5wcm90b3R5cGUuaGFzPWRxO0dwLnByb3RvdHlwZS5zZXQ9bXE7X2g9R3B9KTt2YXIgTjZlLExoLEszPU0oKCk9PnsidXNlIHN0cmljdCI7Q2goKTtObygpO042ZT12cyhhaSwiTWFwIiksTGg9TjZlfSk7ZnVuY3Rpb24gUjZlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTF8sbWFwOm5ldyhMaHx8X2gpLHN0cmluZzpuZXcgTF99fXZhciB5cSx2cT1NKCgpPT57InVzZSBzdHJpY3QiO3NxKCk7WnkoKTtLMygpO28oUjZlLCJtYXBDYWNoZUNsZWFyIik7eXE9UjZlfSk7ZnVuY3Rpb24gTTZlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBlPT0ic3RyaW5nInx8ZT09Im51bWJlciJ8fGU9PSJzeW1ib2wifHxlPT0iYm9vbGVhbiI/dCE9PSJfX3Byb3RvX18iOnQ9PT1udWxsfXZhciB4cSxicT1NKCgpPT57InVzZSBzdHJpY3QiO28oTTZlLCJpc0tleWFibGUiKTt4cT1NNmV9KTtmdW5jdGlvbiBJNmUodCxlKXt2YXIgcj10Ll9fZGF0YV9fO3JldHVybiB4cShlKT9yW3R5cGVvZiBlPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnIubWFwfXZhciBEaCxKeT1NKCgpPT57InVzZSBzdHJpY3QiO2JxKCk7byhJNmUsImdldE1hcERhdGEiKTtEaD1JNmV9KTtmdW5jdGlvbiBPNmUodCl7dmFyIGU9RGgodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX12YXIgd3EsVHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtKeSgpO28oTzZlLCJtYXBDYWNoZURlbGV0ZSIpO3dxPU82ZX0pO2Z1bmN0aW9uIFA2ZSh0KXtyZXR1cm4gRGgodGhpcyx0KS5nZXQodCl9dmFyIGtxLEVxPU0oKCk9PnsidXNlIHN0cmljdCI7SnkoKTtvKFA2ZSwibWFwQ2FjaGVHZXQiKTtrcT1QNmV9KTtmdW5jdGlvbiBCNmUodCl7cmV0dXJuIERoKHRoaXMsdCkuaGFzKHQpfXZhciBTcSxDcT1NKCgpPT57InVzZSBzdHJpY3QiO0p5KCk7byhCNmUsIm1hcENhY2hlSGFzIik7U3E9QjZlfSk7ZnVuY3Rpb24gRjZlKHQsZSl7dmFyIHI9RGgodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc312YXIgQXEsX3E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtKeSgpO28oRjZlLCJtYXBDYWNoZVNldCIpO0FxPUY2ZX0pO2Z1bmN0aW9uICRwKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fXZhciB2ZCxRMz1NKCgpPT57InVzZSBzdHJpY3QiO3ZxKCk7VHEoKTtFcSgpO0NxKCk7X3EoKTtvKCRwLCJNYXBDYWNoZSIpOyRwLnByb3RvdHlwZS5jbGVhcj15cTskcC5wcm90b3R5cGUuZGVsZXRlPXdxOyRwLnByb3RvdHlwZS5nZXQ9a3E7JHAucHJvdG90eXBlLmhhcz1TcTskcC5wcm90b3R5cGUuc2V0PUFxO3ZkPSRwfSk7ZnVuY3Rpb24gRF8odCxlKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uInx8ZSE9bnVsbCYmdHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcih6NmUpO3ZhciByPW8oZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsaT1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLGE9ci5jYWNoZTtpZihhLmhhcyhpKSlyZXR1cm4gYS5nZXQoaSk7dmFyIHM9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPWEuc2V0KGkscyl8fGEsc30sIm1lbW9pemVkIik7cmV0dXJuIHIuY2FjaGU9bmV3KERfLkNhY2hlfHx2ZCkscn12YXIgejZlLFZwLE5fPU0oKCk9PnsidXNlIHN0cmljdCI7UTMoKTt6NmU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO28oRF8sIm1lbW9pemUiKTtEXy5DYWNoZT12ZDtWcD1EX30pO2Z1bmN0aW9uIEc2ZSgpe3RoaXMuX19kYXRhX189bmV3IF9oLHRoaXMuc2l6ZT0wfXZhciBMcSxEcT1NKCgpPT57InVzZSBzdHJpY3QiO1p5KCk7byhHNmUsInN0YWNrQ2xlYXIiKTtMcT1HNmV9KTtmdW5jdGlvbiAkNmUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLHJ9dmFyIE5xLFJxPU0oKCk9PnsidXNlIHN0cmljdCI7bygkNmUsInN0YWNrRGVsZXRlIik7TnE9JDZlfSk7ZnVuY3Rpb24gVjZlKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX12YXIgTXEsSXE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFY2ZSwic3RhY2tHZXQiKTtNcT1WNmV9KTtmdW5jdGlvbiBVNmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfXZhciBPcSxQcT1NKCgpPT57InVzZSBzdHJpY3QiO28oVTZlLCJzdGFja0hhcyIpO09xPVU2ZX0pO2Z1bmN0aW9uIFc2ZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIF9oKXt2YXIgbj1yLl9fZGF0YV9fO2lmKCFMaHx8bi5sZW5ndGg8SDZlLTEpcmV0dXJuIG4ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyB2ZChuKX1yZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemU9ci5zaXplLHRoaXN9dmFyIEg2ZSxCcSxGcT1NKCgpPT57InVzZSBzdHJpY3QiO1p5KCk7SzMoKTtRMygpO0g2ZT0yMDA7byhXNmUsInN0YWNrU2V0Iik7QnE9VzZlfSk7ZnVuY3Rpb24gVXAodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgX2godCk7dGhpcy5zaXplPWUuc2l6ZX12YXIgdWMsZXY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtaeSgpO0RxKCk7UnEoKTtJcSgpO1BxKCk7RnEoKTtvKFVwLCJTdGFjayIpO1VwLnByb3RvdHlwZS5jbGVhcj1McTtVcC5wcm90b3R5cGUuZGVsZXRlPU5xO1VwLnByb3RvdHlwZS5nZXQ9TXE7VXAucHJvdG90eXBlLmhhcz1PcTtVcC5wcm90b3R5cGUuc2V0PUJxO3VjPVVwfSk7dmFyIFk2ZSxIcCxSXz1NKCgpPT57InVzZSBzdHJpY3QiO0NoKCk7WTZlPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXZzKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaHt9fSgpLEhwPVk2ZX0pO2Z1bmN0aW9uIHE2ZSh0LGUscil7ZT09Il9fcHJvdG9fXyImJkhwP0hwKHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cix3cml0YWJsZTohMH0pOnRbZV09cn12YXIgaGMsV3A9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSXygpO28ocTZlLCJiYXNlQXNzaWduVmFsdWUiKTtoYz1xNmV9KTtmdW5jdGlvbiBYNmUodCxlLHIpeyhyIT09dm9pZCAwJiYhUm8odFtlXSxyKXx8cj09PXZvaWQgMCYmIShlIGluIHQpKSYmaGModCxlLHIpfXZhciB0dixNXz1NKCgpPT57InVzZSBzdHJpY3QiO1dwKCk7eWQoKTtvKFg2ZSwiYXNzaWduTWVyZ2VWYWx1ZSIpO3R2PVg2ZX0pO2Z1bmN0aW9uIGo2ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0tMSxhPU9iamVjdChlKSxzPW4oZSksbD1zLmxlbmd0aDtsLS07KXt2YXIgdT1zW3Q/bDorK2ldO2lmKHIoYVt1XSx1LGEpPT09ITEpYnJlYWt9cmV0dXJuIGV9fXZhciB6cSxHcT1NKCgpPT57InVzZSBzdHJpY3QiO28oajZlLCJjcmVhdGVCYXNlRm9yIik7enE9ajZlfSk7dmFyIEs2ZSxZcCxaMz1NKCgpPT57InVzZSBzdHJpY3QiO0dxKCk7SzZlPXpxKCksWXA9SzZlfSk7ZnVuY3Rpb24gWjZlKHQsZSl7aWYoZSlyZXR1cm4gdC5zbGljZSgpO3ZhciByPXQubGVuZ3RoLG49VXE/VXEocik6bmV3IHQuY29uc3RydWN0b3Iocik7cmV0dXJuIHQuY29weShuKSxufXZhciBIcSwkcSxRNmUsVnEsVXEsSjMsSV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtObygpO0hxPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsJHE9SHEmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxRNmU9JHEmJiRxLmV4cG9ydHM9PT1IcSxWcT1RNmU/YWkuQnVmZmVyOnZvaWQgMCxVcT1WcT9WcS5hbGxvY1Vuc2FmZTp2b2lkIDA7byhaNmUsImNsb25lQnVmZmVyIik7SjM9WjZlfSk7dmFyIEo2ZSxxcCxPXz1NKCgpPT57InVzZSBzdHJpY3QiO05vKCk7SjZlPWFpLlVpbnQ4QXJyYXkscXA9SjZlfSk7ZnVuY3Rpb24gZVNlKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBxcChlKS5zZXQobmV3IHFwKHQpKSxlfXZhciBYcCxlNT1NKCgpPT57InVzZSBzdHJpY3QiO09fKCk7byhlU2UsImNsb25lQXJyYXlCdWZmZXIiKTtYcD1lU2V9KTtmdW5jdGlvbiB0U2UodCxlKXt2YXIgcj1lP1hwKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iocix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfXZhciB0NSxQXz1NKCgpPT57InVzZSBzdHJpY3QiO2U1KCk7byh0U2UsImNsb25lVHlwZWRBcnJheSIpO3Q1PXRTZX0pO2Z1bmN0aW9uIHJTZSh0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KG4pKTsrK3I8bjspZVtyXT10W3JdO3JldHVybiBlfXZhciByNSxCXz1NKCgpPT57InVzZSBzdHJpY3QiO28oclNlLCJjb3B5QXJyYXkiKTtyNT1yU2V9KTt2YXIgV3EsblNlLFlxLHFxPU0oKCk9PnsidXNlIHN0cmljdCI7UXMoKTtXcT1PYmplY3QuY3JlYXRlLG5TZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIG8odCwib2JqZWN0IiksZnVuY3Rpb24oZSl7aWYoIXluKGUpKXJldHVybnt9O2lmKFdxKXJldHVybiBXcShlKTt0LnByb3RvdHlwZT1lO3ZhciByPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAscn19KCksWXE9blNlfSk7ZnVuY3Rpb24gaVNlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KGUocikpfX12YXIgbjUsRl89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGlTZSwib3ZlckFyZyIpO241PWlTZX0pO3ZhciBhU2UsanAsaTU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGXygpO2FTZT1uNShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KSxqcD1hU2V9KTtmdW5jdGlvbiBvU2UodCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcixyPXR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlLnByb3RvdHlwZXx8c1NlO3JldHVybiB0PT09cn12YXIgc1NlLGZjLEtwPU0oKCk9PnsidXNlIHN0cmljdCI7c1NlPU9iamVjdC5wcm90b3R5cGU7byhvU2UsImlzUHJvdG90eXBlIik7ZmM9b1NlfSk7ZnVuY3Rpb24gbFNlKHQpe3JldHVybiB0eXBlb2YgdC5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIWZjKHQpP1lxKGpwKHQpKTp7fX12YXIgYTUsel89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtxcSgpO2k1KCk7S3AoKTtvKGxTZSwiaW5pdENsb25lT2JqZWN0Iik7YTU9bFNlfSk7ZnVuY3Rpb24gY1NlKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCJ9dmFyIFpuLE1vPU0oKCk9PnsidXNlIHN0cmljdCI7byhjU2UsImlzT2JqZWN0TGlrZSIpO1puPWNTZX0pO2Z1bmN0aW9uIGhTZSh0KXtyZXR1cm4gWm4odCkmJmNhKHQpPT11U2V9dmFyIHVTZSxHXyxYcT1NKCgpPT57InVzZSBzdHJpY3QiO3h1KCk7TW8oKTt1U2U9IltvYmplY3QgQXJndW1lbnRzXSI7byhoU2UsImJhc2VJc0FyZ3VtZW50cyIpO0dfPWhTZX0pO3ZhciBqcSxmU2UsZFNlLHBTZSxBbCxRcD1NKCgpPT57InVzZSBzdHJpY3QiO1hxKCk7TW8oKTtqcT1PYmplY3QucHJvdG90eXBlLGZTZT1qcS5oYXNPd25Qcm9wZXJ0eSxkU2U9anEucHJvcGVydHlJc0VudW1lcmFibGUscFNlPUdfKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/R186ZnVuY3Rpb24odCl7cmV0dXJuIFpuKHQpJiZmU2UuY2FsbCh0LCJjYWxsZWUiKSYmIWRTZS5jYWxsKHQsImNhbGxlZSIpfSxBbD1wU2V9KTt2YXIgbVNlLE10LFZuPU0oKCk9PnsidXNlIHN0cmljdCI7bVNlPUFycmF5LmlzQXJyYXksTXQ9bVNlfSk7ZnVuY3Rpb24geVNlKHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciImJnQ+LTEmJnQlMT09MCYmdDw9Z1NlfXZhciBnU2UsWnAsczU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtnU2U9OTAwNzE5OTI1NDc0MDk5MTtvKHlTZSwiaXNMZW5ndGgiKTtacD15U2V9KTtmdW5jdGlvbiB2U2UodCl7cmV0dXJuIHQhPW51bGwmJlpwKHQubGVuZ3RoKSYmIUVpKHQpfXZhciBzaSxJbz1NKCgpPT57InVzZSBzdHJpY3QiO2p5KCk7czUoKTtvKHZTZSwiaXNBcnJheUxpa2UiKTtzaT12U2V9KTtmdW5jdGlvbiB4U2UodCl7cmV0dXJuIFpuKHQpJiZzaSh0KX12YXIgeGQsbzU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJbygpO01vKCk7byh4U2UsImlzQXJyYXlMaWtlT2JqZWN0Iik7eGQ9eFNlfSk7ZnVuY3Rpb24gYlNlKCl7cmV0dXJuITF9dmFyIEtxLFFxPU0oKCk9PnsidXNlIHN0cmljdCI7byhiU2UsInN0dWJGYWxzZSIpO0txPWJTZX0pO3ZhciBlWCxacSx3U2UsSnEsVFNlLGtTZSxfbCxKcD1NKCgpPT57InVzZSBzdHJpY3QiO05vKCk7UXEoKTtlWD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFpxPWVYJiZ0eXBlb2YgbW9kdWxlPT0ib2JqZWN0IiYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsd1NlPVpxJiZacS5leHBvcnRzPT09ZVgsSnE9d1NlP2FpLkJ1ZmZlcjp2b2lkIDAsVFNlPUpxP0pxLmlzQnVmZmVyOnZvaWQgMCxrU2U9VFNlfHxLcSxfbD1rU2V9KTtmdW5jdGlvbiBMU2UodCl7aWYoIVpuKHQpfHxjYSh0KSE9RVNlKXJldHVybiExO3ZhciBlPWpwKHQpO2lmKGU9PT1udWxsKXJldHVybiEwO3ZhciByPUFTZS5jYWxsKGUsImNvbnN0cnVjdG9yIikmJmUuY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iJiZyIGluc3RhbmNlb2YgciYmdFguY2FsbChyKT09X1NlfXZhciBFU2UsU1NlLENTZSx0WCxBU2UsX1NlLHJYLG5YPU0oKCk9PnsidXNlIHN0cmljdCI7eHUoKTtpNSgpO01vKCk7RVNlPSJbb2JqZWN0IE9iamVjdF0iLFNTZT1GdW5jdGlvbi5wcm90b3R5cGUsQ1NlPU9iamVjdC5wcm90b3R5cGUsdFg9U1NlLnRvU3RyaW5nLEFTZT1DU2UuaGFzT3duUHJvcGVydHksX1NlPXRYLmNhbGwoT2JqZWN0KTtvKExTZSwiaXNQbGFpbk9iamVjdCIpO3JYPUxTZX0pO2Z1bmN0aW9uIGVDZSh0KXtyZXR1cm4gWm4odCkmJlpwKHQubGVuZ3RoKSYmISFCbltjYSh0KV19dmFyIERTZSxOU2UsUlNlLE1TZSxJU2UsT1NlLFBTZSxCU2UsRlNlLHpTZSxHU2UsJFNlLFZTZSxVU2UsSFNlLFdTZSxZU2UscVNlLFhTZSxqU2UsS1NlLFFTZSxaU2UsSlNlLEJuLGlYLGFYPU0oKCk9PnsidXNlIHN0cmljdCI7eHUoKTtzNSgpO01vKCk7RFNlPSJbb2JqZWN0IEFyZ3VtZW50c10iLE5TZT0iW29iamVjdCBBcnJheV0iLFJTZT0iW29iamVjdCBCb29sZWFuXSIsTVNlPSJbb2JqZWN0IERhdGVdIixJU2U9IltvYmplY3QgRXJyb3JdIixPU2U9IltvYmplY3QgRnVuY3Rpb25dIixQU2U9IltvYmplY3QgTWFwXSIsQlNlPSJbb2JqZWN0IE51bWJlcl0iLEZTZT0iW29iamVjdCBPYmplY3RdIix6U2U9IltvYmplY3QgUmVnRXhwXSIsR1NlPSJbb2JqZWN0IFNldF0iLCRTZT0iW29iamVjdCBTdHJpbmddIixWU2U9IltvYmplY3QgV2Vha01hcF0iLFVTZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEhTZT0iW29iamVjdCBEYXRhVmlld10iLFdTZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixZU2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIscVNlPSJbb2JqZWN0IEludDhBcnJheV0iLFhTZT0iW29iamVjdCBJbnQxNkFycmF5XSIsalNlPSJbb2JqZWN0IEludDMyQXJyYXldIixLU2U9IltvYmplY3QgVWludDhBcnJheV0iLFFTZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFpTZT0iW29iamVjdCBVaW50MTZBcnJheV0iLEpTZT0iW29iamVjdCBVaW50MzJBcnJheV0iLEJuPXt9O0JuW1dTZV09Qm5bWVNlXT1CbltxU2VdPUJuW1hTZV09Qm5balNlXT1CbltLU2VdPUJuW1FTZV09Qm5bWlNlXT1CbltKU2VdPSEwO0JuW0RTZV09Qm5bTlNlXT1CbltVU2VdPUJuW1JTZV09Qm5bSFNlXT1CbltNU2VdPUJuW0lTZV09Qm5bT1NlXT1CbltQU2VdPUJuW0JTZV09Qm5bRlNlXT1Cblt6U2VdPUJuW0dTZV09Qm5bJFNlXT1CbltWU2VdPSExO28oZUNlLCJiYXNlSXNUeXBlZEFycmF5Iik7aVg9ZUNlfSk7ZnVuY3Rpb24gdENlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKX19dmFyIE9vLGJkPU0oKCk9PnsidXNlIHN0cmljdCI7byh0Q2UsImJhc2VVbmFyeSIpO09vPXRDZX0pO3ZhciBzWCxydixyQ2UsJF8sbkNlLFBvLG52PU0oKCk9PnsidXNlIHN0cmljdCI7QV8oKTtzWD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLHJ2PXNYJiZ0eXBlb2YgbW9kdWxlPT0ib2JqZWN0IiYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsckNlPXJ2JiZydi5leHBvcnRzPT09c1gsJF89ckNlJiZYMy5wcm9jZXNzLG5DZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1ydiYmcnYucmVxdWlyZSYmcnYucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHwkXyYmJF8uYmluZGluZyYmJF8uYmluZGluZygidXRpbCIpfWNhdGNoe319KCksUG89bkNlfSk7dmFyIG9YLGlDZSxOaCxpdj1NKCgpPT57InVzZSBzdHJpY3QiO2FYKCk7YmQoKTtudigpO29YPVBvJiZQby5pc1R5cGVkQXJyYXksaUNlPW9YP09vKG9YKTppWCxOaD1pQ2V9KTtmdW5jdGlvbiBhQ2UodCxlKXtpZighKGU9PT0iY29uc3RydWN0b3IiJiZ0eXBlb2YgdFtlXT09ImZ1bmN0aW9uIikmJmUhPSJfX3Byb3RvX18iKXJldHVybiB0W2VdfXZhciBhdixWXz1NKCgpPT57InVzZSBzdHJpY3QiO28oYUNlLCJzYWZlR2V0Iik7YXY9YUNlfSk7ZnVuY3Rpb24gbENlKHQsZSxyKXt2YXIgbj10W2VdOyghKG9DZS5jYWxsKHQsZSkmJlJvKG4scikpfHxyPT09dm9pZCAwJiYhKGUgaW4gdCkpJiZoYyh0LGUscil9dmFyIHNDZSxvQ2UsZGMsZW09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXcCgpO3lkKCk7c0NlPU9iamVjdC5wcm90b3R5cGUsb0NlPXNDZS5oYXNPd25Qcm9wZXJ0eTtvKGxDZSwiYXNzaWduVmFsdWUiKTtkYz1sQ2V9KTtmdW5jdGlvbiBjQ2UodCxlLHIsbil7dmFyIGk9IXI7cnx8KHI9e30pO2Zvcih2YXIgYT0tMSxzPWUubGVuZ3RoOysrYTxzOyl7dmFyIGw9ZVthXSx1PW4/bihyW2xdLHRbbF0sbCxyLHQpOnZvaWQgMDt1PT09dm9pZCAwJiYodT10W2xdKSxpP2hjKHIsbCx1KTpkYyhyLGwsdSl9cmV0dXJuIHJ9dmFyIEJvLHdkPU0oKCk9PnsidXNlIHN0cmljdCI7ZW0oKTtXcCgpO28oY0NlLCJjb3B5T2JqZWN0Iik7Qm89Y0NlfSk7ZnVuY3Rpb24gdUNlKHQsZSl7Zm9yKHZhciByPS0xLG49QXJyYXkodCk7KytyPHQ7KW5bcl09ZShyKTtyZXR1cm4gbn12YXIgbFgsY1g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHVDZSwiYmFzZVRpbWVzIik7bFg9dUNlfSk7ZnVuY3Rpb24gZENlKHQsZSl7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIGU9ZT8/aENlLCEhZSYmKHI9PSJudW1iZXIifHxyIT0ic3ltYm9sIiYmZkNlLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX12YXIgaENlLGZDZSxSaCxzdj1NKCgpPT57InVzZSBzdHJpY3QiO2hDZT05MDA3MTk5MjU0NzQwOTkxLGZDZT0vXig/OjB8WzEtOV1cZCopJC87byhkQ2UsImlzSW5kZXgiKTtSaD1kQ2V9KTtmdW5jdGlvbiBnQ2UodCxlKXt2YXIgcj1NdCh0KSxuPSFyJiZBbCh0KSxpPSFyJiYhbiYmX2wodCksYT0hciYmIW4mJiFpJiZOaCh0KSxzPXJ8fG58fGl8fGEsbD1zP2xYKHQubGVuZ3RoLFN0cmluZyk6W10sdT1sLmxlbmd0aDtmb3IodmFyIGggaW4gdCkoZXx8bUNlLmNhbGwodCxoKSkmJiEocyYmKGg9PSJsZW5ndGgifHxpJiYoaD09Im9mZnNldCJ8fGg9PSJwYXJlbnQiKXx8YSYmKGg9PSJidWZmZXIifHxoPT0iYnl0ZUxlbmd0aCJ8fGg9PSJieXRlT2Zmc2V0Iil8fFJoKGgsdSkpKSYmbC5wdXNoKGgpO3JldHVybiBsfXZhciBwQ2UsbUNlLGw1LFVfPU0oKCk9PnsidXNlIHN0cmljdCI7Y1goKTtRcCgpO1ZuKCk7SnAoKTtzdigpO2l2KCk7cENlPU9iamVjdC5wcm90b3R5cGUsbUNlPXBDZS5oYXNPd25Qcm9wZXJ0eTtvKGdDZSwiYXJyYXlMaWtlS2V5cyIpO2w1PWdDZX0pO2Z1bmN0aW9uIHlDZSh0KXt2YXIgZT1bXTtpZih0IT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QodCkpZS5wdXNoKHIpO3JldHVybiBlfXZhciB1WCxoWD1NKCgpPT57InVzZSBzdHJpY3QiO28oeUNlLCJuYXRpdmVLZXlzSW4iKTt1WD15Q2V9KTtmdW5jdGlvbiBiQ2UodCl7aWYoIXluKHQpKXJldHVybiB1WCh0KTt2YXIgZT1mYyh0KSxyPVtdO2Zvcih2YXIgbiBpbiB0KW49PSJjb25zdHJ1Y3RvciImJihlfHwheENlLmNhbGwodCxuKSl8fHIucHVzaChuKTtyZXR1cm4gcn12YXIgdkNlLHhDZSxmWCxkWD1NKCgpPT57InVzZSBzdHJpY3QiO1FzKCk7S3AoKTtoWCgpO3ZDZT1PYmplY3QucHJvdG90eXBlLHhDZT12Q2UuaGFzT3duUHJvcGVydHk7byhiQ2UsImJhc2VLZXlzSW4iKTtmWD1iQ2V9KTtmdW5jdGlvbiB3Q2UodCl7cmV0dXJuIHNpKHQpP2w1KHQsITApOmZYKHQpfXZhciB4cyxNaD1NKCgpPT57InVzZSBzdHJpY3QiO1VfKCk7ZFgoKTtJbygpO28od0NlLCJrZXlzSW4iKTt4cz13Q2V9KTtmdW5jdGlvbiBUQ2UodCl7cmV0dXJuIEJvKHQseHModCkpfXZhciBwWCxtWD1NKCgpPT57InVzZSBzdHJpY3QiO3dkKCk7TWgoKTtvKFRDZSwidG9QbGFpbk9iamVjdCIpO3BYPVRDZX0pO2Z1bmN0aW9uIGtDZSh0LGUscixuLGksYSxzKXt2YXIgbD1hdih0LHIpLHU9YXYoZSxyKSxoPXMuZ2V0KHUpO2lmKGgpe3R2KHQscixoKTtyZXR1cm59dmFyIGY9YT9hKGwsdSxyKyIiLHQsZSxzKTp2b2lkIDAsZD1mPT09dm9pZCAwO2lmKGQpe3ZhciBwPU10KHUpLG09IXAmJl9sKHUpLGc9IXAmJiFtJiZOaCh1KTtmPXUscHx8bXx8Zz9NdChsKT9mPWw6eGQobCk/Zj1yNShsKTptPyhkPSExLGY9SjModSwhMCkpOmc/KGQ9ITEsZj10NSh1LCEwKSk6Zj1bXTpyWCh1KXx8QWwodSk/KGY9bCxBbChsKT9mPXBYKGwpOigheW4obCl8fEVpKGwpKSYmKGY9YTUodSkpKTpkPSExfWQmJihzLnNldCh1LGYpLGkoZix1LG4sYSxzKSxzLmRlbGV0ZSh1KSksdHYodCxyLGYpfXZhciBnWCx5WD1NKCgpPT57InVzZSBzdHJpY3QiO01fKCk7SV8oKTtQXygpO0JfKCk7el8oKTtRcCgpO1ZuKCk7bzUoKTtKcCgpO2p5KCk7UXMoKTtuWCgpO2l2KCk7Vl8oKTttWCgpO28oa0NlLCJiYXNlTWVyZ2VEZWVwIik7Z1g9a0NlfSk7ZnVuY3Rpb24gdlgodCxlLHIsbixpKXt0IT09ZSYmWXAoZSxmdW5jdGlvbihhLHMpe2lmKGl8fChpPW5ldyB1YykseW4oYSkpZ1godCxlLHMscix2WCxuLGkpO2Vsc2V7dmFyIGw9bj9uKGF2KHQscyksYSxzKyIiLHQsZSxpKTp2b2lkIDA7bD09PXZvaWQgMCYmKGw9YSksdHYodCxzLGwpfX0seHMpfXZhciB4WCxiWD1NKCgpPT57InVzZSBzdHJpY3QiO2V2KCk7TV8oKTtaMygpO3lYKCk7UXMoKTtNaCgpO1ZfKCk7byh2WCwiYmFzZU1lcmdlIik7eFg9dlh9KTtmdW5jdGlvbiBFQ2UodCl7cmV0dXJuIHR9dmFyIHRhLFR1PU0oKCk9PnsidXNlIHN0cmljdCI7byhFQ2UsImlkZW50aXR5Iik7dGE9RUNlfSk7ZnVuY3Rpb24gU0NlKHQsZSxyKXtzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gdC5jYWxsKGUsclswXSk7Y2FzZSAyOnJldHVybiB0LmNhbGwoZSxyWzBdLHJbMV0pO2Nhc2UgMzpyZXR1cm4gdC5jYWxsKGUsclswXSxyWzFdLHJbMl0pfXJldHVybiB0LmFwcGx5KGUscil9dmFyIHdYLFRYPU0oKCk9PnsidXNlIHN0cmljdCI7byhTQ2UsImFwcGx5Iik7d1g9U0NlfSk7ZnVuY3Rpb24gQ0NlKHQsZSxyKXtyZXR1cm4gZT1rWChlPT09dm9pZCAwP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMsaT0tMSxhPWtYKG4ubGVuZ3RoLWUsMCkscz1BcnJheShhKTsrK2k8YTspc1tpXT1uW2UraV07aT0tMTtmb3IodmFyIGw9QXJyYXkoZSsxKTsrK2k8ZTspbFtpXT1uW2ldO3JldHVybiBsW2VdPXIocyksd1godCx0aGlzLGwpfX12YXIga1gsYzUsSF89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUWCgpO2tYPU1hdGgubWF4O28oQ0NlLCJvdmVyUmVzdCIpO2M1PUNDZX0pO2Z1bmN0aW9uIEFDZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIGJzLFdfPU0oKCk9PnsidXNlIHN0cmljdCI7byhBQ2UsImNvbnN0YW50Iik7YnM9QUNlfSk7dmFyIF9DZSxFWCxTWD1NKCgpPT57InVzZSBzdHJpY3QiO1dfKCk7Ul8oKTtUdSgpO19DZT1IcD9mdW5jdGlvbih0LGUpe3JldHVybiBIcCh0LCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmJzKGUpLHdyaXRhYmxlOiEwfSl9OnRhLEVYPV9DZX0pO2Z1bmN0aW9uIFJDZSh0KXt2YXIgZT0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1OQ2UoKSxpPURDZS0obi1yKTtpZihyPW4saT4wKXtpZigrK2U+PUxDZSlyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX12YXIgTENlLERDZSxOQ2UsQ1gsQVg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMQ2U9ODAwLERDZT0xNixOQ2U9RGF0ZS5ub3c7byhSQ2UsInNob3J0T3V0Iik7Q1g9UkNlfSk7dmFyIE1DZSx1NSxZXz1NKCgpPT57InVzZSBzdHJpY3QiO1NYKCk7QVgoKTtNQ2U9Q1goRVgpLHU1PU1DZX0pO2Z1bmN0aW9uIElDZSh0LGUpe3JldHVybiB1NShjNSh0LGUsdGEpLHQrIiIpfXZhciBwYyx0bT1NKCgpPT57InVzZSBzdHJpY3QiO1R1KCk7SF8oKTtZXygpO28oSUNlLCJiYXNlUmVzdCIpO3BjPUlDZX0pO2Z1bmN0aW9uIE9DZSh0LGUscil7aWYoIXluKHIpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybihuPT0ibnVtYmVyIj9zaShyKSYmUmgoZSxyLmxlbmd0aCk6bj09InN0cmluZyImJmUgaW4gcik/Um8ocltlXSx0KTohMX12YXIgWnMsVGQ9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5ZCgpO0lvKCk7c3YoKTtRcygpO28oT0NlLCJpc0l0ZXJhdGVlQ2FsbCIpO1pzPU9DZX0pO2Z1bmN0aW9uIFBDZSh0KXtyZXR1cm4gcGMoZnVuY3Rpb24oZSxyKXt2YXIgbj0tMSxpPXIubGVuZ3RoLGE9aT4xP3JbaS0xXTp2b2lkIDAscz1pPjI/clsyXTp2b2lkIDA7Zm9yKGE9dC5sZW5ndGg+MyYmdHlwZW9mIGE9PSJmdW5jdGlvbiI/KGktLSxhKTp2b2lkIDAscyYmWnMoclswXSxyWzFdLHMpJiYoYT1pPDM/dm9pZCAwOmEsaT0xKSxlPU9iamVjdChlKTsrK248aTspe3ZhciBsPXJbbl07bCYmdChlLGwsbixhKX1yZXR1cm4gZX0pfXZhciBoNSxxXz1NKCgpPT57InVzZSBzdHJpY3QiO3RtKCk7VGQoKTtvKFBDZSwiY3JlYXRlQXNzaWduZXIiKTtoNT1QQ2V9KTt2YXIgQkNlLEloLFhfPU0oKCk9PnsidXNlIHN0cmljdCI7YlgoKTtxXygpO0JDZT1oNShmdW5jdGlvbih0LGUscil7eFgodCxlLHIpfSksSWg9QkNlfSk7ZnVuY3Rpb24gUV8odCxlKXtpZighdClyZXR1cm4gZTtsZXQgcj1gY3VydmUke3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKX1gO3JldHVybiBGQ2Vbcl0/P2V9ZnVuY3Rpb24gVkNlKHQsZSl7bGV0IHI9dC50cmltKCk7aWYocilyZXR1cm4gZS5zZWN1cml0eUxldmVsIT09Imxvb3NlIj8oMCxEWC5zYW5pdGl6ZVVybCkocik6cn1mdW5jdGlvbiBNWCh0LGUpe3JldHVybiF0fHwhZT8wOk1hdGguc3FydChNYXRoLnBvdyhlLngtdC54LDIpK01hdGgucG93KGUueS10LnksMikpfWZ1bmN0aW9uIEhDZSh0KXtsZXQgZSxyPTA7dC5mb3JFYWNoKGk9PntyKz1NWChpLGUpLGU9aX0pO2xldCBuPXIvMjtyZXR1cm4gWl8odCxuKX1mdW5jdGlvbiBXQ2UodCl7cmV0dXJuIHQubGVuZ3RoPT09MT90WzBdOkhDZSh0KX1mdW5jdGlvbiBxQ2UodCxlLHIpe2xldCBuPXN0cnVjdHVyZWRDbG9uZShyKTtZLmluZm8oIm91ciBwb2ludHMiLG4pLGUhPT0ic3RhcnRfbGVmdCImJmUhPT0ic3RhcnRfcmlnaHQiJiZuLnJldmVyc2UoKTtsZXQgaT0yNSt0LGE9Wl8obixpKSxzPTEwK3QqLjUsbD1NYXRoLmF0YW4yKG5bMF0ueS1hLnksblswXS54LWEueCksdT17eDowLHk6MH07cmV0dXJuIGU9PT0ic3RhcnRfbGVmdCI/KHUueD1NYXRoLnNpbihsK01hdGguUEkpKnMrKG5bMF0ueCthLngpLzIsdS55PS1NYXRoLmNvcyhsK01hdGguUEkpKnMrKG5bMF0ueSthLnkpLzIpOmU9PT0iZW5kX3JpZ2h0Ij8odS54PU1hdGguc2luKGwtTWF0aC5QSSkqcysoblswXS54K2EueCkvMi01LHUueT0tTWF0aC5jb3MobC1NYXRoLlBJKSpzKyhuWzBdLnkrYS55KS8yLTUpOmU9PT0iZW5kX2xlZnQiPyh1Lng9TWF0aC5zaW4obCkqcysoblswXS54K2EueCkvMi01LHUueT0tTWF0aC5jb3MobCkqcysoblswXS55K2EueSkvMi01KToodS54PU1hdGguc2luKGwpKnMrKG5bMF0ueCthLngpLzIsdS55PS1NYXRoLmNvcyhsKSpzKyhuWzBdLnkrYS55KS8yKSx1fWZ1bmN0aW9uIEpfKHQpe2xldCBlPSIiLHI9IiI7Zm9yKGxldCBuIG9mIHQpbiE9PXZvaWQgMCYmKG4uc3RhcnRzV2l0aCgiY29sb3I6Iil8fG4uc3RhcnRzV2l0aCgidGV4dC1hbGlnbjoiKT9yPXIrbisiOyI6ZT1lK24rIjsiKTtyZXR1cm57c3R5bGU6ZSxsYWJlbFN0eWxlOnJ9fWZ1bmN0aW9uIFhDZSh0KXtsZXQgZT0iIixyPSIwMTIzNDU2Nzg5YWJjZGVmIixuPXIubGVuZ3RoO2ZvcihsZXQgaT0wO2k8dDtpKyspZSs9ci5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4pKTtyZXR1cm4gZX1mdW5jdGlvbiBkNSh0LGUpe3JldHVybiBuOSh0LGUpLmhlaWdodH1mdW5jdGlvbiBKcyh0LGUpe3JldHVybiBuOSh0LGUpLndpZHRofWZ1bmN0aW9uIGk5KHQpe3JldHVybiJzdHIiaW4gdH1mdW5jdGlvbiB3cyh0LGUpe3JldHVybiBJaCh7fSx0LGUpfWZ1bmN0aW9uIEZuKHQpe3JldHVybiB0Pz9udWxsfXZhciBEWCxLXyxGQ2UsekNlLEdDZSxOWCxSWCwkQ2UsVUNlLF9YLFpfLFlDZSxMWCxlOSx0OSxqQ2UsS0NlLHI5LFFDZSxuOSxqXyxmNSxaQ2UsSkNlLEZvLFV0LElYLENhLHA1LGhyPU0oKCk9PnsidXNlIHN0cmljdCI7RFg9a2EoRnAoKSwxKTttcigpO2ZyKCk7S1MoKTtodCgpOyRmKCk7aXAoKTtOXygpO1hfKCk7UGIoKTtLXz0iXHUyMDBCIixGQ2U9e2N1cnZlQmFzaXM6RG8sY3VydmVCYXNpc0Nsb3NlZDpJMyxjdXJ2ZUJhc2lzT3BlbjpPMyxjdXJ2ZUJ1bXBYOnNfLGN1cnZlQnVtcFk6b18sY3VydmVCdW5kbGU6bF8sY3VydmVDYXJkaW5hbENsb3NlZDp1XyxjdXJ2ZUNhcmRpbmFsT3BlbjpmXyxjdXJ2ZUNhcmRpbmFsOmNfLGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDptXyxjdXJ2ZUNhdG11bGxSb21PcGVuOmdfLGN1cnZlQ2F0bXVsbFJvbTpwXyxjdXJ2ZUxpbmVhcjpPcCxjdXJ2ZUxpbmVhckNsb3NlZDpHMyxjdXJ2ZU1vbm90b25lWDp2XyxjdXJ2ZU1vbm90b25lWTp4XyxjdXJ2ZU5hdHVyYWw6VjMsY3VydmVTdGVwOkgzLGN1cnZlU3RlcEFmdGVyOndfLGN1cnZlU3RlcEJlZm9yZTpiX30sekNlPS9ccyooPzooXHcrKSg/PTopOnwoXHcrKSlccyooPzooXHcrKXwoKD86KD8hfSV7Mn0pLnxccj9cbikqKSk/XHMqKD86fSV7Mn0pPy9naSxHQ2U9byhmdW5jdGlvbih0LGUpe2xldCByPU5YKHQsLyg/OmluaXRcYil8KD86aW5pdGlhbGl6ZVxiKS8pLG49e307aWYoQXJyYXkuaXNBcnJheShyKSl7bGV0IHM9ci5tYXAobD0+bC5hcmdzKTtvcChzKSxuPUduKG4sWy4uLnNdKX1lbHNlIG49ci5hcmdzO2lmKCFuKXJldHVybjtsZXQgaT1ucCh0LGUpLGE9ImNvbmZpZyI7cmV0dXJuIG5bYV0hPT12b2lkIDAmJihpPT09ImZsb3djaGFydC12MiImJihpPSJmbG93Y2hhcnQiKSxuW2ldPW5bYV0sZGVsZXRlIG5bYV0pLG59LCJkZXRlY3RJbml0IiksTlg9byhmdW5jdGlvbih0LGU9bnVsbCl7dHJ5e2xldCByPW5ldyBSZWdFeHAoYFslXXsyfSg/IVt7XSR7ekNlLnNvdXJjZX0pKD89W31dWyVdezJ9KS4qCmAsImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKHIsIiIpLnJlcGxhY2UoLycvZ20sJyInKSxZLmRlYnVnKGBEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUke2UhPT1udWxsPyIgdHlwZToiK2U6IiJ9IGJhc2VkIG9uIHRoZSB0ZXh0OiR7dH1gKTtsZXQgbixpPVtdO2Zvcig7KG49emYuZXhlYyh0KSkhPT1udWxsOylpZihuLmluZGV4PT09emYubGFzdEluZGV4JiZ6Zi5sYXN0SW5kZXgrKyxuJiYhZXx8ZSYmblsxXT8ubWF0Y2goZSl8fGUmJm5bMl0/Lm1hdGNoKGUpKXtsZXQgYT1uWzFdP25bMV06blsyXSxzPW5bM10/blszXS50cmltKCk6bls0XT9KU09OLnBhcnNlKG5bNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6c30pfXJldHVybiBpLmxlbmd0aD09PTA/e3R5cGU6dCxhcmdzOm51bGx9OmkubGVuZ3RoPT09MT9pWzBdOml9Y2F0Y2gocil7cmV0dXJuIFkuZXJyb3IoYEVSUk9SOiAke3IubWVzc2FnZX0gLSBVbmFibGUgdG8gcGFyc2UgZGlyZWN0aXZlIHR5cGU6ICcke2V9JyBiYXNlZCBvbiB0aGUgdGV4dDogJyR7dH0nYCkse3R5cGU6dm9pZCAwLGFyZ3M6bnVsbH19fSwiZGV0ZWN0RGlyZWN0aXZlIiksUlg9byhmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKHpmLCIiKX0sInJlbW92ZURpcmVjdGl2ZXMiKSwkQ2U9byhmdW5jdGlvbih0LGUpe2ZvcihsZXRbcixuXW9mIGUuZW50cmllcygpKWlmKG4ubWF0Y2godCkpcmV0dXJuIHI7cmV0dXJuLTF9LCJpc1N1YnN0cmluZ0luQXJyYXkiKTtvKFFfLCJpbnRlcnBvbGF0ZVRvQ3VydmUiKTtvKFZDZSwiZm9ybWF0VXJsIik7VUNlPW8oKHQsLi4uZSk9PntsZXQgcj10LnNwbGl0KCIuIiksbj1yLmxlbmd0aC0xLGk9cltuXSxhPXdpbmRvdztmb3IobGV0IHM9MDtzPG47cysrKWlmKGE9YVtyW3NdXSwhYSl7WS5lcnJvcihgRnVuY3Rpb24gbmFtZTogJHt0fSBub3QgZm91bmQgaW4gd2luZG93YCk7cmV0dXJufWFbaV0oLi4uZSl9LCJydW5GdW5jIik7byhNWCwiZGlzdGFuY2UiKTtvKEhDZSwidHJhdmVyc2VFZGdlIik7byhXQ2UsImNhbGNMYWJlbFBvc2l0aW9uIik7X1g9bygodCxlPTIpPT57bGV0IHI9TWF0aC5wb3coMTAsZSk7cmV0dXJuIE1hdGgucm91bmQodCpyKS9yfSwicm91bmROdW1iZXIiKSxaXz1vKCh0LGUpPT57bGV0IHIsbj1lO2ZvcihsZXQgaSBvZiB0KXtpZihyKXtsZXQgYT1NWChpLHIpO2lmKGE8biluLT1hO2Vsc2V7bGV0IHM9bi9hO2lmKHM8PTApcmV0dXJuIHI7aWYocz49MSlyZXR1cm57eDppLngseTppLnl9O2lmKHM+MCYmczwxKXJldHVybnt4Ol9YKCgxLXMpKnIueCtzKmkueCw1KSx5Ol9YKCgxLXMpKnIueStzKmkueSw1KX19fXI9aX10aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgcG9pbnQgZm9yIHRoZSBnaXZlbiBkaXN0YW5jZSIpfSwiY2FsY3VsYXRlUG9pbnQiKSxZQ2U9bygodCxlLHIpPT57WS5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksZVswXSE9PXImJihlPWUucmV2ZXJzZSgpKTtsZXQgaT1aXyhlLDI1KSxhPXQ/MTA6NSxzPU1hdGguYXRhbjIoZVswXS55LWkueSxlWzBdLngtaS54KSxsPXt4OjAseTowfTtyZXR1cm4gbC54PU1hdGguc2luKHMpKmErKGVbMF0ueCtpLngpLzIsbC55PS1NYXRoLmNvcyhzKSphKyhlWzBdLnkraS55KS8yLGx9LCJjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbiIpO28ocUNlLCJjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uIik7byhKXywiZ2V0U3R5bGVzRnJvbUFycmF5Iik7TFg9MCxlOT1vKCgpPT4oTFgrKywiaWQtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwxMikrIi0iK0xYKSwiZ2VuZXJhdGVJZCIpO28oWENlLCJtYWtlUmFuZG9tSGV4Iik7dDk9byh0PT5YQ2UodC5sZW5ndGgpLCJyYW5kb20iKSxqQ2U9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjoic3RhcnQiLHN0eWxlOiIjNjY2Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHZhbGlnbjp2b2lkIDAsdGV4dDoiIn19LCJnZXRUZXh0T2JqIiksS0NlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnRleHQucmVwbGFjZShqZS5saW5lQnJlYWtSZWdleCwiICIpLFssbl09Rm8oZS5mb250U2l6ZSksaT10LmFwcGVuZCgidGV4dCIpO2kuYXR0cigieCIsZS54KSxpLmF0dHIoInkiLGUueSksaS5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxpLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxpLnN0eWxlKCJmb250LXNpemUiLG4pLGkuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLGkuYXR0cigiZmlsbCIsZS5maWxsKSxlLmNsYXNzIT09dm9pZCAwJiZpLmF0dHIoImNsYXNzIixlLmNsYXNzKTtsZXQgYT1pLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gYS5hdHRyKCJ4IixlLngrZS50ZXh0TWFyZ2luKjIpLGEuYXR0cigiZmlsbCIsZS5maWxsKSxhLnRleHQociksaX0sImRyYXdTaW1wbGVUZXh0Iikscjk9VnAoKHQsZSxyKT0+e2lmKCF0fHwocj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sciksamUubGluZUJyZWFrUmVnZXgudGVzdCh0KSkpcmV0dXJuIHQ7bGV0IG49dC5zcGxpdCgiICIpLmZpbHRlcihCb29sZWFuKSxpPVtdLGE9IiI7cmV0dXJuIG4uZm9yRWFjaCgocyxsKT0+e2xldCB1PUpzKGAke3N9IGAsciksaD1KcyhhLHIpO2lmKHU+ZSl7bGV0e2h5cGhlbmF0ZWRTdHJpbmdzOnAscmVtYWluaW5nV29yZDptfT1RQ2UocyxlLCItIixyKTtpLnB1c2goYSwuLi5wKSxhPW19ZWxzZSBoK3U+PWU/KGkucHVzaChhKSxhPXMpOmE9W2Esc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtsKzE9PT1uLmxlbmd0aCYmaS5wdXNoKGEpfSksaS5maWx0ZXIocz0+cyE9PSIiKS5qb2luKHIuam9pbldpdGgpfSwodCxlLHIpPT5gJHt0fSR7ZX0ke3IuZm9udFNpemV9JHtyLmZvbnRXZWlnaHR9JHtyLmZvbnRGYW1pbHl9JHtyLmpvaW5XaXRofWApLFFDZT1WcCgodCxlLHI9Ii0iLG4pPT57bj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjB9LG4pO2xldCBpPVsuLi50XSxhPVtdLHM9IiI7cmV0dXJuIGkuZm9yRWFjaCgobCx1KT0+e2xldCBoPWAke3N9JHtsfWA7aWYoSnMoaCxuKT49ZSl7bGV0IGQ9dSsxLHA9aS5sZW5ndGg9PT1kLG09YCR7aH0ke3J9YDthLnB1c2gocD9oOm0pLHM9IiJ9ZWxzZSBzPWh9KSx7aHlwaGVuYXRlZFN0cmluZ3M6YSxyZW1haW5pbmdXb3JkOnN9fSwodCxlLHI9Ii0iLG4pPT5gJHt0fSR7ZX0ke3J9JHtuLmZvbnRTaXplfSR7bi5mb250V2VpZ2h0fSR7bi5mb250RmFtaWx5fWApO28oZDUsImNhbGN1bGF0ZVRleHRIZWlnaHQiKTtvKEpzLCJjYWxjdWxhdGVUZXh0V2lkdGgiKTtuOT1WcCgodCxlKT0+e2xldHtmb250U2l6ZTpyPTEyLGZvbnRGYW1pbHk6bj0iQXJpYWwiLGZvbnRXZWlnaHQ6aT00MDB9PWU7aWYoIXQpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O2xldFssYV09Rm8ocikscz1bInNhbnMtc2VyaWYiLG5dLGw9dC5zcGxpdChqZS5saW5lQnJlYWtSZWdleCksdT1bXSxoPXplKCJib2R5Iik7aWYoIWgucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07bGV0IGY9aC5hcHBlbmQoInN2ZyIpO2ZvcihsZXQgcCBvZiBzKXtsZXQgbT0wLGc9e3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IobGV0IHkgb2YgbCl7bGV0IHY9akNlKCk7di50ZXh0PXl8fEtfO2xldCB4PUtDZShmLHYpLnN0eWxlKCJmb250LXNpemUiLGEpLnN0eWxlKCJmb250LXdlaWdodCIsaSkuc3R5bGUoImZvbnQtZmFtaWx5IixwKSxiPSh4Ll9ncm91cHN8fHgpWzBdWzBdLmdldEJCb3goKTtpZihiLndpZHRoPT09MCYmYi5oZWlnaHQ9PT0wKXRocm93IG5ldyBFcnJvcigic3ZnIGVsZW1lbnQgbm90IGluIHJlbmRlciB0cmVlIik7Zy53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KGcud2lkdGgsYi53aWR0aCkpLG09TWF0aC5yb3VuZChiLmhlaWdodCksZy5oZWlnaHQrPW0sZy5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoZy5saW5lSGVpZ2h0LG0pKX11LnB1c2goZyl9Zi5yZW1vdmUoKTtsZXQgZD1pc05hTih1WzFdLmhlaWdodCl8fGlzTmFOKHVbMV0ud2lkdGgpfHxpc05hTih1WzFdLmxpbmVIZWlnaHQpfHx1WzBdLmhlaWdodD51WzFdLmhlaWdodCYmdVswXS53aWR0aD51WzFdLndpZHRoJiZ1WzBdLmxpbmVIZWlnaHQ+dVsxXS5saW5lSGVpZ2h0PzA6MTtyZXR1cm4gdVtkXX0sKHQsZSk9PmAke3R9JHtlLmZvbnRTaXplfSR7ZS5mb250V2VpZ2h0fSR7ZS5mb250RmFtaWx5fWApLGpfPWNsYXNze2NvbnN0cnVjdG9yKGU9ITEscil7dGhpcy5jb3VudD0wO3RoaXMuY291bnQ9cj9yLmxlbmd0aDowLHRoaXMubmV4dD1lPygpPT50aGlzLmNvdW50Kys6KCk9PkRhdGUubm93KCl9c3RhdGlje28odGhpcywiSW5pdElER2VuZXJhdG9yIil9fSxaQ2U9byhmdW5jdGlvbih0KXtyZXR1cm4gZjU9ZjV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLGY1LmlubmVySFRNTD10LHVuZXNjYXBlKGY1LnRleHRDb250ZW50KX0sImVudGl0eURlY29kZSIpO28oaTksImlzRGV0YWlsZWRFcnJvciIpO0pDZT1vKCh0LGUscixuKT0+e2lmKCFuKXJldHVybjtsZXQgaT10Lm5vZGUoKT8uZ2V0QkJveCgpO2kmJnQuYXBwZW5kKCJ0ZXh0IikudGV4dChuKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLGkueCtpLndpZHRoLzIpLmF0dHIoInkiLC1yKS5hdHRyKCJjbGFzcyIsZSl9LCJpbnNlcnRUaXRsZSIpLEZvPW8odD0+e2lmKHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm5bdCx0KyJweCJdO2xldCBlPXBhcnNlSW50KHQ/PyIiLDEwKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGUpP1t2b2lkIDAsdm9pZCAwXTp0PT09U3RyaW5nKGUpP1tlLHQrInB4Il06W2UsdF19LCJwYXJzZUZvbnRTaXplIik7byh3cywiY2xlYW5BbmRNZXJnZSIpO1V0PXthc3NpZ25XaXRoRGVwdGg6R24sd3JhcExhYmVsOnI5LGNhbGN1bGF0ZVRleHRIZWlnaHQ6ZDUsY2FsY3VsYXRlVGV4dFdpZHRoOkpzLGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOm45LGNsZWFuQW5kTWVyZ2U6d3MsZGV0ZWN0SW5pdDpHQ2UsZGV0ZWN0RGlyZWN0aXZlOk5YLGlzU3Vic3RyaW5nSW5BcnJheTokQ2UsaW50ZXJwb2xhdGVUb0N1cnZlOlFfLGNhbGNMYWJlbFBvc2l0aW9uOldDZSxjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbjpZQ2UsY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbjpxQ2UsZm9ybWF0VXJsOlZDZSxnZXRTdHlsZXNGcm9tQXJyYXk6Sl8sZ2VuZXJhdGVJZDplOSxyYW5kb206dDkscnVuRnVuYzpVQ2UsZW50aXR5RGVjb2RlOlpDZSxpbnNlcnRUaXRsZTpKQ2UscGFyc2VGb250U2l6ZTpGbyxJbml0SURHZW5lcmF0b3I6al99LElYPW8oZnVuY3Rpb24odCl7bGV0IGU9dDtyZXR1cm4gZT1lLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHIpe3JldHVybiByLnN1YnN0cmluZygwLHIubGVuZ3RoLTEpfSksZT1lLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHIpe3JldHVybiByLnN1YnN0cmluZygwLHIubGVuZ3RoLTEpfSksZT1lLnJlcGxhY2UoLyNcdys7L2csZnVuY3Rpb24ocil7bGV0IG49ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3Qobik/Ilx1RkIwMlx4QjBceEIwIituKyJceEI2XHhERiI6Ilx1RkIwMlx4QjAiK24rIlx4QjZceERGIn0pLGV9LCJlbmNvZGVFbnRpdGllcyIpLENhPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgv76yCwrDCsC9nLCImIyIpLnJlcGxhY2UoL++sgsKwL2csIiYiKS5yZXBsYWNlKC/CtsOfL2csIjsiKX0sImRlY29kZUVudGl0aWVzIikscDU9bygodCxlLHtjb3VudGVyOnI9MCxwcmVmaXg6bixzdWZmaXg6aX0pPT5gJHtuP2Ake259X2A6IiJ9JHt0fV8ke2V9XyR7cn0ke2k/YF8ke2l9YDoiIn1gLCJnZXRFZGdlSWQiKTtvKEZuLCJoYW5kbGVVbmRlZmluZWRBdHRyIil9KTtmdW5jdGlvbiBMbCh0LGUscixuLGkpe2lmKCFlW3RdLndpZHRoKWlmKHIpZVt0XS50ZXh0PXI5KGVbdF0udGV4dCxpLG4pLGVbdF0udGV4dExpbmVzPWVbdF0udGV4dC5zcGxpdChqZS5saW5lQnJlYWtSZWdleCkubGVuZ3RoLGVbdF0ud2lkdGg9aSxlW3RdLmhlaWdodD1kNShlW3RdLnRleHQsbik7ZWxzZXtsZXQgYT1lW3RdLnRleHQuc3BsaXQoamUubGluZUJyZWFrUmVnZXgpO2VbdF0udGV4dExpbmVzPWEubGVuZ3RoO2xldCBzPTA7ZVt0XS5oZWlnaHQ9MCxlW3RdLndpZHRoPTA7Zm9yKGxldCBsIG9mIGEpZVt0XS53aWR0aD1NYXRoLm1heChKcyhsLG4pLGVbdF0ud2lkdGgpLHM9ZDUobCxuKSxlW3RdLmhlaWdodD1lW3RdLmhlaWdodCtzfX1mdW5jdGlvbiB6WCh0LGUscixuLGkpe2xldCBhPW5ldyB2NShpKTthLmRhdGEud2lkdGhMaW1pdD1yLmRhdGEud2lkdGhMaW1pdC9NYXRoLm1pbihhOSxuLmxlbmd0aCk7Zm9yKGxldFtzLGxdb2Ygbi5lbnRyaWVzKCkpe2xldCB1PTA7bC5pbWFnZT17d2lkdGg6MCxoZWlnaHQ6MCxZOjB9LGwuc3ByaXRlJiYobC5pbWFnZS53aWR0aD00OCxsLmltYWdlLmhlaWdodD00OCxsLmltYWdlLlk9dSx1PWwuaW1hZ2UuWStsLmltYWdlLmhlaWdodCk7bGV0IGg9bC53cmFwJiZHdC53cmFwLGY9bTUoR3QpO2lmKGYuZm9udFNpemU9Zi5mb250U2l6ZSsyLGYuZm9udFdlaWdodD0iYm9sZCIsTGwoImxhYmVsIixsLGgsZixhLmRhdGEud2lkdGhMaW1pdCksbC5sYWJlbC5ZPXUrOCx1PWwubGFiZWwuWStsLmxhYmVsLmhlaWdodCxsLnR5cGUmJmwudHlwZS50ZXh0IT09IiIpe2wudHlwZS50ZXh0PSJbIitsLnR5cGUudGV4dCsiXSI7bGV0IGc9bTUoR3QpO0xsKCJ0eXBlIixsLGgsZyxhLmRhdGEud2lkdGhMaW1pdCksbC50eXBlLlk9dSs1LHU9bC50eXBlLlkrbC50eXBlLmhlaWdodH1pZihsLmRlc2NyJiZsLmRlc2NyLnRleHQhPT0iIil7bGV0IGc9bTUoR3QpO2cuZm9udFNpemU9Zy5mb250U2l6ZS0yLExsKCJkZXNjciIsbCxoLGcsYS5kYXRhLndpZHRoTGltaXQpLGwuZGVzY3IuWT11KzIwLHU9bC5kZXNjci5ZK2wuZGVzY3IuaGVpZ2h0fWlmKHM9PTB8fHMlYTk9PT0wKXtsZXQgZz1yLmRhdGEuc3RhcnR4K0d0LmRpYWdyYW1NYXJnaW5YLHk9ci5kYXRhLnN0b3B5K0d0LmRpYWdyYW1NYXJnaW5ZK3U7YS5zZXREYXRhKGcsZyx5LHkpfWVsc2V7bGV0IGc9YS5kYXRhLnN0b3B4IT09YS5kYXRhLnN0YXJ0eD9hLmRhdGEuc3RvcHgrR3QuZGlhZ3JhbU1hcmdpblg6YS5kYXRhLnN0YXJ0eCx5PWEuZGF0YS5zdGFydHk7YS5zZXREYXRhKGcsZyx5LHkpfWEubmFtZT1sLmFsaWFzO2xldCBkPWkuZGIuZ2V0QzRTaGFwZUFycmF5KGwuYWxpYXMpLHA9aS5kYi5nZXRDNFNoYXBlS2V5cyhsLmFsaWFzKTtwLmxlbmd0aD4wJiZGWChhLHQsZCxwKSxlPWwuYWxpYXM7bGV0IG09aS5kYi5nZXRCb3VuZGFyeXMoZSk7bS5sZW5ndGg+MCYmelgodCxlLGEsbSxpKSxsLmFsaWFzIT09Imdsb2JhbCImJkJYKHQsbCxhKSxyLmRhdGEuc3RvcHk9TWF0aC5tYXgoYS5kYXRhLnN0b3B5K0d0LmM0U2hhcGVNYXJnaW4sci5kYXRhLnN0b3B5KSxyLmRhdGEuc3RvcHg9TWF0aC5tYXgoYS5kYXRhLnN0b3B4K0d0LmM0U2hhcGVNYXJnaW4sci5kYXRhLnN0b3B4KSxnNT1NYXRoLm1heChnNSxyLmRhdGEuc3RvcHgpLHk1PU1hdGgubWF4KHk1LHIuZGF0YS5zdG9weSl9fXZhciBnNSx5NSxQWCxhOSxHdCx2NSxzOSxvdixtNSxlN2UsQlgsRlgsVHMsT1gsdDdlLHI3ZSxuN2UsbzksR1g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO09ZKCk7aHQoKTtQUygpO2ZyKCk7bDcoKTtWdCgpO2lwKCk7aHIoKTtuaSgpO2c1PTAseTU9MCxQWD00LGE5PTI7STEueXk9b3k7R3Q9e30sdjU9Y2xhc3N7c3RhdGlje28odGhpcywiQm91bmRzIil9Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17fSx0aGlzLmRhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHg9dm9pZCAwLHRoaXMuZGF0YS5zdGFydHk9dm9pZCAwLHRoaXMuZGF0YS5zdG9weT12b2lkIDAsdGhpcy5kYXRhLndpZHRoTGltaXQ9dm9pZCAwLHRoaXMubmV4dERhdGE9e30sdGhpcy5uZXh0RGF0YS5zdGFydHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B5PXZvaWQgMCx0aGlzLm5leHREYXRhLmNudD0wLHM5KGUuZGIuZ2V0Q29uZmlnKCkpfXNldERhdGEoZSxyLG4saSl7dGhpcy5uZXh0RGF0YS5zdGFydHg9dGhpcy5kYXRhLnN0YXJ0eD1lLHRoaXMubmV4dERhdGEuc3RvcHg9dGhpcy5kYXRhLnN0b3B4PXIsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5kYXRhLnN0YXJ0eT1uLHRoaXMubmV4dERhdGEuc3RvcHk9dGhpcy5kYXRhLnN0b3B5PWl9dXBkYXRlVmFsKGUscixuLGkpe2Vbcl09PT12b2lkIDA/ZVtyXT1uOmVbcl09aShuLGVbcl0pfWluc2VydChlKXt0aGlzLm5leHREYXRhLmNudD10aGlzLm5leHREYXRhLmNudCsxO2xldCByPXRoaXMubmV4dERhdGEuc3RhcnR4PT09dGhpcy5uZXh0RGF0YS5zdG9weD90aGlzLm5leHREYXRhLnN0b3B4K2UubWFyZ2luOnRoaXMubmV4dERhdGEuc3RvcHgrZS5tYXJnaW4qMixuPXIrZS53aWR0aCxpPXRoaXMubmV4dERhdGEuc3RhcnR5K2UubWFyZ2luKjIsYT1pK2UuaGVpZ2h0OyhyPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8bj49dGhpcy5kYXRhLndpZHRoTGltaXR8fHRoaXMubmV4dERhdGEuY250PlBYKSYmKHI9dGhpcy5uZXh0RGF0YS5zdGFydHgrZS5tYXJnaW4rR3QubmV4dExpbmVQYWRkaW5nWCxpPXRoaXMubmV4dERhdGEuc3RvcHkrZS5tYXJnaW4qMix0aGlzLm5leHREYXRhLnN0b3B4PW49citlLndpZHRoLHRoaXMubmV4dERhdGEuc3RhcnR5PXRoaXMubmV4dERhdGEuc3RvcHksdGhpcy5uZXh0RGF0YS5zdG9weT1hPWkrZS5oZWlnaHQsdGhpcy5uZXh0RGF0YS5jbnQ9MSksZS54PXIsZS55PWksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHgiLHIsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RhcnR5IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B4IixuLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B5IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdGFydHgiLHIsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eSIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHgiLG4sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0b3B5IixhLE1hdGgubWF4KX1pbml0KGUpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLHdpZHRoTGltaXQ6dm9pZCAwfSx0aGlzLm5leHREYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMCxjbnQ6MH0sczkoZS5kYi5nZXRDb25maWcoKSl9YnVtcExhc3RNYXJnaW4oZSl7dGhpcy5kYXRhLnN0b3B4Kz1lLHRoaXMuZGF0YS5zdG9weSs9ZX19LHM5PW8oZnVuY3Rpb24odCl7R24oR3QsdCksdC5mb250RmFtaWx5JiYoR3QucGVyc29uRm9udEZhbWlseT1HdC5zeXN0ZW1Gb250RmFtaWx5PUd0Lm1lc3NhZ2VGb250RmFtaWx5PXQuZm9udEZhbWlseSksdC5mb250U2l6ZSYmKEd0LnBlcnNvbkZvbnRTaXplPUd0LnN5c3RlbUZvbnRTaXplPUd0Lm1lc3NhZ2VGb250U2l6ZT10LmZvbnRTaXplKSx0LmZvbnRXZWlnaHQmJihHdC5wZXJzb25Gb250V2VpZ2h0PUd0LnN5c3RlbUZvbnRXZWlnaHQ9R3QubWVzc2FnZUZvbnRXZWlnaHQ9dC5mb250V2VpZ2h0KX0sInNldENvbmYiKSxvdj1vKCh0LGUpPT4oe2ZvbnRGYW1pbHk6dFtlKyJGb250RmFtaWx5Il0sZm9udFNpemU6dFtlKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6dFtlKyJGb250V2VpZ2h0Il19KSwiYzRTaGFwZUZvbnQiKSxtNT1vKHQ9Pih7Zm9udEZhbWlseTp0LmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTp0LmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDp0LmJvdW5kYXJ5Rm9udFdlaWdodH0pLCJib3VuZGFyeUZvbnQiKSxlN2U9byh0PT4oe2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9KSwibWVzc2FnZUZvbnQiKTtvKExsLCJjYWxjQzRTaGFwZVRleHRXSCIpO0JYPW8oZnVuY3Rpb24odCxlLHIpe2UueD1yLmRhdGEuc3RhcnR4LGUueT1yLmRhdGEuc3RhcnR5LGUud2lkdGg9ci5kYXRhLnN0b3B4LXIuZGF0YS5zdGFydHgsZS5oZWlnaHQ9ci5kYXRhLnN0b3B5LXIuZGF0YS5zdGFydHksZS5sYWJlbC55PUd0LmM0U2hhcGVNYXJnaW4tMzU7bGV0IG49ZS53cmFwJiZHdC53cmFwLGk9bTUoR3QpO2kuZm9udFNpemU9aS5mb250U2l6ZSsyLGkuZm9udFdlaWdodD0iYm9sZCI7bGV0IGE9SnMoZS5sYWJlbC50ZXh0LGkpO0xsKCJsYWJlbCIsZSxuLGksYSksQ2wuZHJhd0JvdW5kYXJ5KHQsZSxHdCl9LCJkcmF3Qm91bmRhcnkiKSxGWD1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPTA7Zm9yKGxldCBhIG9mIG4pe2k9MDtsZXQgcz1yW2FdLGw9b3YoR3Qscy50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2gobC5mb250U2l6ZT1sLmZvbnRTaXplLTIscy50eXBlQzRTaGFwZS53aWR0aD1KcygiXHhBQiIrcy50eXBlQzRTaGFwZS50ZXh0KyJceEJCIixsKSxzLnR5cGVDNFNoYXBlLmhlaWdodD1sLmZvbnRTaXplKzIscy50eXBlQzRTaGFwZS5ZPUd0LmM0U2hhcGVQYWRkaW5nLGk9cy50eXBlQzRTaGFwZS5ZK3MudHlwZUM0U2hhcGUuaGVpZ2h0LTQscy5pbWFnZT17d2lkdGg6MCxoZWlnaHQ6MCxZOjB9LHMudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpzLmltYWdlLndpZHRoPTQ4LHMuaW1hZ2UuaGVpZ2h0PTQ4LHMuaW1hZ2UuWT1pLGk9cy5pbWFnZS5ZK3MuaW1hZ2UuaGVpZ2h0O2JyZWFrfXMuc3ByaXRlJiYocy5pbWFnZS53aWR0aD00OCxzLmltYWdlLmhlaWdodD00OCxzLmltYWdlLlk9aSxpPXMuaW1hZ2UuWStzLmltYWdlLmhlaWdodCk7bGV0IHU9cy53cmFwJiZHdC53cmFwLGg9R3Qud2lkdGgtR3QuYzRTaGFwZVBhZGRpbmcqMixmPW92KEd0LHMudHlwZUM0U2hhcGUudGV4dCk7aWYoZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250V2VpZ2h0PSJib2xkIixMbCgibGFiZWwiLHMsdSxmLGgpLHMubGFiZWwuWT1pKzgsaT1zLmxhYmVsLlkrcy5sYWJlbC5oZWlnaHQscy50eXBlJiZzLnR5cGUudGV4dCE9PSIiKXtzLnR5cGUudGV4dD0iWyIrcy50eXBlLnRleHQrIl0iO2xldCBtPW92KEd0LHMudHlwZUM0U2hhcGUudGV4dCk7TGwoInR5cGUiLHMsdSxtLGgpLHMudHlwZS5ZPWkrNSxpPXMudHlwZS5ZK3MudHlwZS5oZWlnaHR9ZWxzZSBpZihzLnRlY2huJiZzLnRlY2huLnRleHQhPT0iIil7cy50ZWNobi50ZXh0PSJbIitzLnRlY2huLnRleHQrIl0iO2xldCBtPW92KEd0LHMudGVjaG4udGV4dCk7TGwoInRlY2huIixzLHUsbSxoKSxzLnRlY2huLlk9aSs1LGk9cy50ZWNobi5ZK3MudGVjaG4uaGVpZ2h0fWxldCBkPWkscD1zLmxhYmVsLndpZHRoO2lmKHMuZGVzY3ImJnMuZGVzY3IudGV4dCE9PSIiKXtsZXQgbT1vdihHdCxzLnR5cGVDNFNoYXBlLnRleHQpO0xsKCJkZXNjciIscyx1LG0saCkscy5kZXNjci5ZPWkrMjAsaT1zLmRlc2NyLlkrcy5kZXNjci5oZWlnaHQscD1NYXRoLm1heChzLmxhYmVsLndpZHRoLHMuZGVzY3Iud2lkdGgpLGQ9aS1zLmRlc2NyLnRleHRMaW5lcyo1fXA9cCtHdC5jNFNoYXBlUGFkZGluZyxzLndpZHRoPU1hdGgubWF4KHMud2lkdGh8fEd0LndpZHRoLHAsR3Qud2lkdGgpLHMuaGVpZ2h0PU1hdGgubWF4KHMuaGVpZ2h0fHxHdC5oZWlnaHQsZCxHdC5oZWlnaHQpLHMubWFyZ2luPXMubWFyZ2lufHxHdC5jNFNoYXBlTWFyZ2luLHQuaW5zZXJ0KHMpLENsLmRyYXdDNFNoYXBlKGUscyxHdCl9dC5idW1wTGFzdE1hcmdpbihHdC5jNFNoYXBlTWFyZ2luKX0sImRyYXdDNFNoYXBlQXJyYXkiKSxUcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJQb2ludCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy54PWUsdGhpcy55PXJ9fSxPWD1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC54LG49dC55LGk9ZS54LGE9ZS55LHM9cit0LndpZHRoLzIsbD1uK3QuaGVpZ2h0LzIsdT1NYXRoLmFicyhyLWkpLGg9TWF0aC5hYnMobi1hKSxmPWgvdSxkPXQuaGVpZ2h0L3Qud2lkdGgscD1udWxsO3JldHVybiBuPT1hJiZyPGk/cD1uZXcgVHMocit0LndpZHRoLGwpOm49PWEmJnI+aT9wPW5ldyBUcyhyLGwpOnI9PWkmJm48YT9wPW5ldyBUcyhzLG4rdC5oZWlnaHQpOnI9PWkmJm4+YSYmKHA9bmV3IFRzKHMsbikpLHI+aSYmbjxhP2Q+PWY/cD1uZXcgVHMocixsK2YqdC53aWR0aC8yKTpwPW5ldyBUcyhzLXUvaCp0LmhlaWdodC8yLG4rdC5oZWlnaHQpOnI8aSYmbjxhP2Q+PWY/cD1uZXcgVHMocit0LndpZHRoLGwrZip0LndpZHRoLzIpOnA9bmV3IFRzKHMrdS9oKnQuaGVpZ2h0LzIsbit0LmhlaWdodCk6cjxpJiZuPmE/ZD49Zj9wPW5ldyBUcyhyK3Qud2lkdGgsbC1mKnQud2lkdGgvMik6cD1uZXcgVHMocyt0LmhlaWdodC8yKnUvaCxuKTpyPmkmJm4+YSYmKGQ+PWY/cD1uZXcgVHMocixsLXQud2lkdGgvMipmKTpwPW5ldyBUcyhzLXQuaGVpZ2h0LzIqdS9oLG4pKSxwfSwiZ2V0SW50ZXJzZWN0UG9pbnQiKSx0N2U9byhmdW5jdGlvbih0LGUpe2xldCByPXt4OjAseTowfTtyLng9ZS54K2Uud2lkdGgvMixyLnk9ZS55K2UuaGVpZ2h0LzI7bGV0IG49T1godCxyKTtyLng9dC54K3Qud2lkdGgvMixyLnk9dC55K3QuaGVpZ2h0LzI7bGV0IGk9T1goZSxyKTtyZXR1cm57c3RhcnRQb2ludDpuLGVuZFBvaW50Oml9fSwiZ2V0SW50ZXJzZWN0UG9pbnRzIikscjdlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MDtmb3IobGV0IGEgb2YgZSl7aT1pKzE7bGV0IHM9YS53cmFwJiZHdC53cmFwLGw9ZTdlKEd0KTtuLmRiLmdldEM0VHlwZSgpPT09IkM0RHluYW1pYyImJihhLmxhYmVsLnRleHQ9aSsiOiAiK2EubGFiZWwudGV4dCk7bGV0IGg9SnMoYS5sYWJlbC50ZXh0LGwpO0xsKCJsYWJlbCIsYSxzLGwsaCksYS50ZWNobiYmYS50ZWNobi50ZXh0IT09IiImJihoPUpzKGEudGVjaG4udGV4dCxsKSxMbCgidGVjaG4iLGEscyxsLGgpKSxhLmRlc2NyJiZhLmRlc2NyLnRleHQhPT0iIiYmKGg9SnMoYS5kZXNjci50ZXh0LGwpLExsKCJkZXNjciIsYSxzLGwsaCkpO2xldCBmPXIoYS5mcm9tKSxkPXIoYS50bykscD10N2UoZixkKTthLnN0YXJ0UG9pbnQ9cC5zdGFydFBvaW50LGEuZW5kUG9pbnQ9cC5lbmRQb2ludH1DbC5kcmF3UmVscyh0LGUsR3QpfSwiZHJhd1JlbHMiKTtvKHpYLCJkcmF3SW5zaWRlQm91bmRhcnkiKTtuN2U9byhmdW5jdGlvbih0LGUscixuKXtHdD1kZSgpLmM0O2xldCBpPWRlKCkuc2VjdXJpdHlMZXZlbCxhO2k9PT0ic2FuZGJveCImJihhPXplKCIjaSIrZSkpO2xldCBzPWk9PT0ic2FuZGJveCI/emUoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTp6ZSgiYm9keSIpLGw9bi5kYjtuLmRiLnNldFdyYXAoR3Qud3JhcCksUFg9bC5nZXRDNFNoYXBlSW5Sb3coKSxhOT1sLmdldEM0Qm91bmRhcnlJblJvdygpLFkuZGVidWcoYEM6JHtKU09OLnN0cmluZ2lmeShHdCxudWxsLDIpfWApO2xldCB1PWk9PT0ic2FuZGJveCI/cy5zZWxlY3QoYFtpZD0iJHtlfSJdYCk6emUoYFtpZD0iJHtlfSJdYCk7Q2wuaW5zZXJ0Q29tcHV0ZXJJY29uKHUpLENsLmluc2VydERhdGFiYXNlSWNvbih1KSxDbC5pbnNlcnRDbG9ja0ljb24odSk7bGV0IGg9bmV3IHY1KG4pO2guc2V0RGF0YShHdC5kaWFncmFtTWFyZ2luWCxHdC5kaWFncmFtTWFyZ2luWCxHdC5kaWFncmFtTWFyZ2luWSxHdC5kaWFncmFtTWFyZ2luWSksaC5kYXRhLndpZHRoTGltaXQ9c2NyZWVuLmF2YWlsV2lkdGgsZzU9R3QuZGlhZ3JhbU1hcmdpblgseTU9R3QuZGlhZ3JhbU1hcmdpblk7bGV0IGY9bi5kYi5nZXRUaXRsZSgpLGQ9bi5kYi5nZXRCb3VuZGFyeXMoIiIpO3pYKHUsIiIsaCxkLG4pLENsLmluc2VydEFycm93SGVhZCh1KSxDbC5pbnNlcnRBcnJvd0VuZCh1KSxDbC5pbnNlcnRBcnJvd0Nyb3NzSGVhZCh1KSxDbC5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQodSkscjdlKHUsbi5kYi5nZXRSZWxzKCksbi5kYi5nZXRDNFNoYXBlLG4pLGguZGF0YS5zdG9weD1nNSxoLmRhdGEuc3RvcHk9eTU7bGV0IHA9aC5kYXRhLGc9cC5zdG9weS1wLnN0YXJ0eSsyKkd0LmRpYWdyYW1NYXJnaW5ZLHY9cC5zdG9weC1wLnN0YXJ0eCsyKkd0LmRpYWdyYW1NYXJnaW5YO2YmJnUuYXBwZW5kKCJ0ZXh0IikudGV4dChmKS5hdHRyKCJ4IiwocC5zdG9weC1wLnN0YXJ0eCkvMi00Kkd0LmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IixwLnN0YXJ0eStHdC5kaWFncmFtTWFyZ2luWSksWnIodSxnLHYsR3QudXNlTWF4V2lkdGgpO2xldCB4PWY/NjA6MDt1LmF0dHIoInZpZXdCb3giLHAuc3RhcnR4LUd0LmRpYWdyYW1NYXJnaW5YKyIgLSIrKEd0LmRpYWdyYW1NYXJnaW5ZK3gpKyIgIit2KyIgIisoZyt4KSksWS5kZWJ1ZygibW9kZWxzOiIscCl9LCJkcmF3Iiksbzk9e2RyYXdQZXJzb25PclN5c3RlbUFycmF5OkZYLGRyYXdCb3VuZGFyeTpCWCxzZXRDb25mOnM5LGRyYXc6bjdlfX0pO3ZhciBpN2UsJFgsVlg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpN2U9byh0PT5gLnBlcnNvbiB7CiAgICBzdHJva2U6ICR7dC5wZXJzb25Cb3JkZXJ9OwogICAgZmlsbDogJHt0LnBlcnNvbkJrZ307CiAgfQpgLCJnZXRTdHlsZXMiKSwkWD1pN2V9KTt2YXIgVVg9e307dnIoVVgse2RpYWdyYW06KCk9PmE3ZX0pO3ZhciBhN2UsSFg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQUygpO2w3KCk7R1goKTtWWCgpO2E3ZT17cGFyc2VyOlFGLGRiOm95LHJlbmRlcmVyOm85LHN0eWxlczokWCxpbml0Om8oKHtjNDp0LHdyYXA6ZX0pPT57bzkuc2V0Q29uZih0KSxveS5zZXRXcmFwKGUpfSwiaW5pdCIpfX0pO2Z1bmN0aW9uIHU5KCl7cmV0dXJue2FzeW5jOiExLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhvb2tzOm51bGwscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzaWxlbnQ6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsfX1mdW5jdGlvbiBaWCh0KXtFZD10fWZ1bmN0aW9uIGVvKHQsZSl7aWYoZSl7aWYoSlgudGVzdCh0KSlyZXR1cm4gdC5yZXBsYWNlKGM3ZSxxWCl9ZWxzZSBpZihlai50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2UodTdlLHFYKTtyZXR1cm4gdH1mdW5jdGlvbiBkN2UodCl7cmV0dXJuIHQucmVwbGFjZShmN2UsKGUscik9PihyPXIudG9Mb3dlckNhc2UoKSxyPT09ImNvbG9uIj8iOiI6ci5jaGFyQXQoMCk9PT0iIyI/ci5jaGFyQXQoMSk9PT0ieCI/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChyLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Iuc3Vic3RyaW5nKDEpKToiIikpfWZ1bmN0aW9uIGZuKHQsZSl7bGV0IHI9dHlwZW9mIHQ9PSJzdHJpbmciP3Q6dC5zb3VyY2U7ZT1lfHwiIjtsZXQgbj17cmVwbGFjZTpvKChpLGEpPT57bGV0IHM9dHlwZW9mIGE9PSJzdHJpbmciP2E6YS5zb3VyY2U7cmV0dXJuIHM9cy5yZXBsYWNlKHA3ZSwiJDEiKSxyPXIucmVwbGFjZShpLHMpLG59LCJyZXBsYWNlIiksZ2V0UmVnZXg6bygoKT0+bmV3IFJlZ0V4cChyLGUpLCJnZXRSZWdleCIpfTtyZXR1cm4gbn1mdW5jdGlvbiBYWCh0KXt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gdH1mdW5jdGlvbiBqWCh0LGUpe2xldCByPXQucmVwbGFjZSgvXHwvZywoYSxzLGwpPT57bGV0IHU9ITEsaD1zO2Zvcig7LS1oPj0wJiZsW2hdPT09IlxcIjspdT0hdTtyZXR1cm4gdT8ifCI6IiB8In0pLG49ci5zcGxpdCgvIFx8LyksaT0wO2lmKG5bMF0udHJpbSgpfHxuLnNoaWZ0KCksbi5sZW5ndGg+MCYmIW5bbi5sZW5ndGgtMV0udHJpbSgpJiZuLnBvcCgpLGUpaWYobi5sZW5ndGg+ZSluLnNwbGljZShlKTtlbHNlIGZvcig7bi5sZW5ndGg8ZTspbi5wdXNoKCIiKTtmb3IoO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIG59ZnVuY3Rpb24gbHYodCxlLHIpe2xldCBuPXQubGVuZ3RoO2lmKG49PT0wKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPG47KXtsZXQgYT10LmNoYXJBdChuLWktMSk7aWYoYT09PWUmJiFyKWkrKztlbHNlIGlmKGEhPT1lJiZyKWkrKztlbHNlIGJyZWFrfXJldHVybiB0LnNsaWNlKDAsbi1pKX1mdW5jdGlvbiBtN2UodCxlKXtpZih0LmluZGV4T2YoZVsxXSk9PT0tMSlyZXR1cm4tMTtsZXQgcj0wO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl09PT0iXFwiKW4rKztlbHNlIGlmKHRbbl09PT1lWzBdKXIrKztlbHNlIGlmKHRbbl09PT1lWzFdJiYoci0tLHI8MCkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gS1godCxlLHIsbil7bGV0IGk9ZS5ocmVmLGE9ZS50aXRsZT9lbyhlLnRpdGxlKTpudWxsLHM9dFsxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYodFswXS5jaGFyQXQoMCkhPT0iISIpe24uc3RhdGUuaW5MaW5rPSEwO2xldCBsPXt0eXBlOiJsaW5rIixyYXc6cixocmVmOmksdGl0bGU6YSx0ZXh0OnMsdG9rZW5zOm4uaW5saW5lVG9rZW5zKHMpfTtyZXR1cm4gbi5zdGF0ZS5pbkxpbms9ITEsbH1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzpyLGhyZWY6aSx0aXRsZTphLHRleHQ6ZW8ocyl9fWZ1bmN0aW9uIGc3ZSh0LGUpe2xldCByPXQubWF0Y2goL14oXHMrKSg/OmBgYCkvKTtpZihyPT09bnVsbClyZXR1cm4gZTtsZXQgbj1yWzFdO3JldHVybiBlLnNwbGl0KGAKYCkubWFwKGk9PntsZXQgYT1pLm1hdGNoKC9eXHMrLyk7aWYoYT09PW51bGwpcmV0dXJuIGk7bGV0W3NdPWE7cmV0dXJuIHMubGVuZ3RoPj1uLmxlbmd0aD9pLnNsaWNlKG4ubGVuZ3RoKTppfSkuam9pbihgCmApfWZ1bmN0aW9uIGVuKHQsZSl7cmV0dXJuIGtkLnBhcnNlKHQsZSl9dmFyIEVkLEpYLGM3ZSxlaix1N2UsaDdlLHFYLGY3ZSxwN2UsdXYsbm0seTdlLHY3ZSx4N2UsZnYsYjdlLHRqLHJqLGg5LHc3ZSxmOSxUN2UsazdlLHc1LGQ5LEU3ZSxuaixTN2UscDksUVgsQzdlLEE3ZSxpaixfN2UsYWosTDdlLGR2LEQ3ZSxON2UsUjdlLE03ZSxJN2UsTzdlLFA3ZSxCN2UsRjdlLGI1LHo3ZSxzaixvaixHN2UsbTksJDdlLGw5LFY3ZSx4NSxjdixrdSxpbSxodixFdSxybSxjOSxrZCx1NnQsaDZ0LGY2dCxkNnQscDZ0LG02dCxnNnQsbGo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHU5LCJfZ2V0RGVmYXVsdHMiKTtFZD11OSgpO28oWlgsImNoYW5nZURlZmF1bHRzIik7Slg9L1smPD4iJ10vLGM3ZT1uZXcgUmVnRXhwKEpYLnNvdXJjZSwiZyIpLGVqPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyx1N2U9bmV3IFJlZ0V4cChlai5zb3VyY2UsImciKSxoN2U9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LHFYPW8odD0+aDdlW3RdLCJnZXRFc2NhcGVSZXBsYWNlbWVudCIpO28oZW8sImVzY2FwZSQxIik7ZjdlPS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2lnO28oZDdlLCJ1bmVzY2FwZSIpO3A3ZT0vKF58W15cW10pXF4vZztvKGZuLCJlZGl0Iik7byhYWCwiY2xlYW5VcmwiKTt1dj17ZXhlYzpvKCgpPT5udWxsLCJleGVjIil9O28oalgsInNwbGl0Q2VsbHMiKTtvKGx2LCJydHJpbSIpO28obTdlLCJmaW5kQ2xvc2luZ0JyYWNrZXQiKTtvKEtYLCJvdXRwdXRMaW5rIik7byhnN2UsImluZGVudENvZGVDb21wZW5zYXRpb24iKTtubT1jbGFzc3tzdGF0aWN7byh0aGlzLCJfVG9rZW5pemVyIil9b3B0aW9ucztydWxlcztsZXhlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8RWR9c3BhY2UoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoZSk7aWYociYmclswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzpyWzBdfX1jb2RlKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGUpO2lmKHIpe2xldCBuPXJbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpyWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/bjpsdihuLGAKYCl9fX1mZW5jZXMoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzBdLGk9ZzdlKG4sclszXXx8IiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6bixsYW5nOnJbMl0/clsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTpyWzJdLHRleHQ6aX19fWhlYWRpbmcoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMoZSk7aWYocil7bGV0IG49clsyXS50cmltKCk7aWYoLyMkLy50ZXN0KG4pKXtsZXQgaT1sdihuLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWl8fC8gJC8udGVzdChpKSkmJihuPWkudHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OnJbMF0sZGVwdGg6clsxXS5sZW5ndGgsdGV4dDpuLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuKX19fWhyKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJociIscmF3Omx2KHJbMF0sYApgKX19YmxvY2txdW90ZShlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhlKTtpZihyKXtsZXQgbj1sdihyWzBdLGAKYCkuc3BsaXQoYApgKSxpPSIiLGE9IiIscz1bXTtmb3IoO24ubGVuZ3RoPjA7KXtsZXQgbD0hMSx1PVtdLGg7Zm9yKGg9MDtoPG4ubGVuZ3RoO2grKylpZigvXiB7MCwzfT4vLnRlc3QobltoXSkpdS5wdXNoKG5baF0pLGw9ITA7ZWxzZSBpZighbCl1LnB1c2gobltoXSk7ZWxzZSBicmVhaztuPW4uc2xpY2UoaCk7bGV0IGY9dS5qb2luKGAKYCksZD1mLnJlcGxhY2UoL1xuIHswLDN9KCg/Oj0rfC0rKSAqKSg/PVxufCQpL2csYAogICAgJDFgKS5yZXBsYWNlKC9eIHswLDN9PlsgXHRdPy9nbSwiIik7aT1pP2Ake2l9CiR7Zn1gOmYsYT1hP2Ake2F9CiR7ZH1gOmQ7bGV0IHA9dGhpcy5sZXhlci5zdGF0ZS50b3A7aWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITAsdGhpcy5sZXhlci5ibG9ja1Rva2VucyhkLHMsITApLHRoaXMubGV4ZXIuc3RhdGUudG9wPXAsbi5sZW5ndGg9PT0wKWJyZWFrO2xldCBtPXNbcy5sZW5ndGgtMV07aWYobT8udHlwZT09PSJjb2RlIilicmVhaztpZihtPy50eXBlPT09ImJsb2NrcXVvdGUiKXtsZXQgZz1tLHk9Zy5yYXcrYApgK24uam9pbihgCmApLHY9dGhpcy5ibG9ja3F1b3RlKHkpO3Nbcy5sZW5ndGgtMV09dixpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtZy5yYXcubGVuZ3RoKSt2LnJhdyxhPWEuc3Vic3RyaW5nKDAsYS5sZW5ndGgtZy50ZXh0Lmxlbmd0aCkrdi50ZXh0O2JyZWFrfWVsc2UgaWYobT8udHlwZT09PSJsaXN0Iil7bGV0IGc9bSx5PWcucmF3K2AKYCtuLmpvaW4oYApgKSx2PXRoaXMubGlzdCh5KTtzW3MubGVuZ3RoLTFdPXYsaT1pLnN1YnN0cmluZygwLGkubGVuZ3RoLW0ucmF3Lmxlbmd0aCkrdi5yYXcsYT1hLnN1YnN0cmluZygwLGEubGVuZ3RoLWcucmF3Lmxlbmd0aCkrdi5yYXcsbj15LnN1YnN0cmluZyhzW3MubGVuZ3RoLTFdLnJhdy5sZW5ndGgpLnNwbGl0KGAKYCk7Y29udGludWV9fXJldHVybnt0eXBlOiJibG9ja3F1b3RlIixyYXc6aSx0b2tlbnM6cyx0ZXh0OmF9fX1saXN0KGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGUpO2lmKHIpe2xldCBuPXJbMV0udHJpbSgpLGk9bi5sZW5ndGg+MSxhPXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDppLHN0YXJ0Omk/K24uc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O249aT9gXFxkezEsOX1cXCR7bi5zbGljZSgtMSl9YDpgXFwke259YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihuPWk/bjoiWyorLV0iKTtsZXQgcz1uZXcgUmVnRXhwKGBeKCB7MCwzfSR7bn0pKCg/OlsJIF1bXlxcbl0qKT8oPzpcXG58JCkpYCksbD0hMTtmb3IoO2U7KXtsZXQgdT0hMSxoPSIiLGY9IiI7aWYoIShyPXMuZXhlYyhlKSl8fHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChlKSlicmVhaztoPXJbMF0sZT1lLnN1YnN0cmluZyhoLmxlbmd0aCk7bGV0IGQ9clsyXS5zcGxpdChgCmAsMSlbMF0ucmVwbGFjZSgvXlx0Ky8seD0+IiAiLnJlcGVhdCgzKngubGVuZ3RoKSkscD1lLnNwbGl0KGAKYCwxKVswXSxtPSFkLnRyaW0oKSxnPTA7aWYodGhpcy5vcHRpb25zLnBlZGFudGljPyhnPTIsZj1kLnRyaW1TdGFydCgpKTptP2c9clsxXS5sZW5ndGgrMTooZz1yWzJdLnNlYXJjaCgvW14gXS8pLGc9Zz40PzE6ZyxmPWQuc2xpY2UoZyksZys9clsxXS5sZW5ndGgpLG0mJi9eICokLy50ZXN0KHApJiYoaCs9cCtgCmAsZT1lLnN1YnN0cmluZyhwLmxlbmd0aCsxKSx1PSEwKSwhdSl7bGV0IHg9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZy0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIAldW15cXG5dKik/KD86XFxufCQpKWApLGI9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZy0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLHc9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZy0xKX19KD86XGBcYFxgfH5+filgKSxfPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGctMSl9fSNgKTtmb3IoO2U7KXtsZXQgVD1lLnNwbGl0KGAKYCwxKVswXTtpZihwPVQsdGhpcy5vcHRpb25zLnBlZGFudGljJiYocD1wLnJlcGxhY2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksdy50ZXN0KHApfHxfLnRlc3QocCl8fHgudGVzdChwKXx8Yi50ZXN0KGUpKWJyZWFrO2lmKHAuc2VhcmNoKC9bXiBdLyk+PWd8fCFwLnRyaW0oKSlmKz1gCmArcC5zbGljZShnKTtlbHNle2lmKG18fGQuc2VhcmNoKC9bXiBdLyk+PTR8fHcudGVzdChkKXx8Xy50ZXN0KGQpfHxiLnRlc3QoZCkpYnJlYWs7Zis9YApgK3B9IW0mJiFwLnRyaW0oKSYmKG09ITApLGgrPVQrYApgLGU9ZS5zdWJzdHJpbmcoVC5sZW5ndGgrMSksZD1wLnNsaWNlKGcpfX1hLmxvb3NlfHwobD9hLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoaCkmJihsPSEwKSk7bGV0IHk9bnVsbCx2O3RoaXMub3B0aW9ucy5nZm0mJih5PS9eXFtbIHhYXVxdIC8uZXhlYyhmKSx5JiYodj15WzBdIT09IlsgXSAiLGY9Zi5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLGEuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6aCx0YXNrOiEheSxjaGVja2VkOnYsbG9vc2U6ITEsdGV4dDpmLHRva2VuczpbXX0pLGEucmF3Kz1ofWEuaXRlbXNbYS5pdGVtcy5sZW5ndGgtMV0ucmF3PWEuaXRlbXNbYS5pdGVtcy5sZW5ndGgtMV0ucmF3LnRyaW1FbmQoKSxhLml0ZW1zW2EuaXRlbXMubGVuZ3RoLTFdLnRleHQ9YS5pdGVtc1thLml0ZW1zLmxlbmd0aC0xXS50ZXh0LnRyaW1FbmQoKSxhLnJhdz1hLnJhdy50cmltRW5kKCk7Zm9yKGxldCB1PTA7dTxhLml0ZW1zLmxlbmd0aDt1KyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsYS5pdGVtc1t1XS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhhLml0ZW1zW3VdLnRleHQsW10pLCFhLmxvb3NlKXtsZXQgaD1hLml0ZW1zW3VdLnRva2Vucy5maWx0ZXIoZD0+ZC50eXBlPT09InNwYWNlIiksZj1oLmxlbmd0aD4wJiZoLnNvbWUoZD0+L1xuLipcbi8udGVzdChkLnJhdykpO2EubG9vc2U9Zn1pZihhLmxvb3NlKWZvcihsZXQgdT0wO3U8YS5pdGVtcy5sZW5ndGg7dSsrKWEuaXRlbXNbdV0ubG9vc2U9ITA7cmV0dXJuIGF9fWh0bWwoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMoZSk7aWYocilyZXR1cm57dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3OnJbMF0scHJlOnJbMV09PT0icHJlInx8clsxXT09PSJzY3JpcHQifHxyWzFdPT09InN0eWxlIix0ZXh0OnJbMF19fWRlZihlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGUpO2lmKHIpe2xldCBuPXJbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGk9clsyXT9yWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOiIiLGE9clszXT9yWzNdLnN1YnN0cmluZygxLHJbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6clszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6bixyYXc6clswXSxocmVmOmksdGl0bGU6YX19fXRhYmxlKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhlKTtpZighcnx8IS9bOnxdLy50ZXN0KHJbMl0pKXJldHVybjtsZXQgbj1qWChyWzFdKSxpPXJbMl0ucmVwbGFjZSgvXlx8fFx8ICokL2csIiIpLnNwbGl0KCJ8IiksYT1yWzNdJiZyWzNdLnRyaW0oKT9yWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KGAKYCk6W10scz17dHlwZToidGFibGUiLHJhdzpyWzBdLGhlYWRlcjpbXSxhbGlnbjpbXSxyb3dzOltdfTtpZihuLmxlbmd0aD09PWkubGVuZ3RoKXtmb3IobGV0IGwgb2YgaSkvXiAqLSs6ICokLy50ZXN0KGwpP3MuYWxpZ24ucHVzaCgicmlnaHQiKTovXiAqOi0rOiAqJC8udGVzdChsKT9zLmFsaWduLnB1c2goImNlbnRlciIpOi9eICo6LSsgKiQvLnRlc3QobCk/cy5hbGlnbi5wdXNoKCJsZWZ0Iik6cy5hbGlnbi5wdXNoKG51bGwpO2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7bCsrKXMuaGVhZGVyLnB1c2goe3RleHQ6bltsXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUobltsXSksaGVhZGVyOiEwLGFsaWduOnMuYWxpZ25bbF19KTtmb3IobGV0IGwgb2YgYSlzLnJvd3MucHVzaChqWChsLHMuaGVhZGVyLmxlbmd0aCkubWFwKCh1LGgpPT4oe3RleHQ6dSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodSksaGVhZGVyOiExLGFsaWduOnMuYWxpZ25baF19KSkpO3JldHVybiBzfX1saGVhZGluZyhlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWMoZSk7aWYocilyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OnJbMF0sZGVwdGg6clsyXS5jaGFyQXQoMCk9PT0iPSI/MToyLHRleHQ6clsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoclsxXSl9fXBhcmFncmFwaChlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGUpO2lmKHIpe2xldCBuPXJbMV0uY2hhckF0KHJbMV0ubGVuZ3RoLTEpPT09YApgP3JbMV0uc2xpY2UoMCwtMSk6clsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6clswXSx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19dGV4dChlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6clswXSx0ZXh0OnJbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHJbMF0pfX1lc2NhcGUoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWMoZSk7aWYocilyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6clswXSx0ZXh0OmVvKHJbMV0pfX10YWcoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoZSk7aWYocilyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChyWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoclswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChyWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoclswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOiJodG1sIixyYXc6clswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDpyWzBdfX1saW5rKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3Qobikpe2lmKCEvPiQvLnRlc3QobikpcmV0dXJuO2xldCBzPWx2KG4uc2xpY2UoMCwtMSksIlxcIik7aWYoKG4ubGVuZ3RoLXMubGVuZ3RoKSUyPT09MClyZXR1cm59ZWxzZXtsZXQgcz1tN2UoclsyXSwiKCkiKTtpZihzPi0xKXtsZXQgdT0oclswXS5pbmRleE9mKCIhIik9PT0wPzU6NCkrclsxXS5sZW5ndGgrcztyWzJdPXJbMl0uc3Vic3RyaW5nKDAscyksclswXT1yWzBdLnN1YnN0cmluZygwLHUpLnRyaW0oKSxyWzNdPSIifX1sZXQgaT1yWzJdLGE9IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtsZXQgcz0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaSk7cyYmKGk9c1sxXSxhPXNbM10pfWVsc2UgYT1yWzNdP3JbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGk9aS50cmltKCksL148Ly50ZXN0KGkpJiYodGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KG4pP2k9aS5zbGljZSgxKTppPWkuc2xpY2UoMSwtMSkpLEtYKHIse2hyZWY6aSYmaS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpLHRpdGxlOmEmJmEucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKX0sclswXSx0aGlzLmxleGVyKX19cmVmbGluayhlLHIpe2xldCBuO2lmKChuPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhlKSl8fChuPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGUpKSl7bGV0IGk9KG5bMl18fG5bMV0pLnJlcGxhY2UoL1xzKy9nLCIgIiksYT1yW2kudG9Mb3dlckNhc2UoKV07aWYoIWEpe2xldCBzPW5bMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6cyx0ZXh0OnN9fXJldHVybiBLWChuLGEsblswXSx0aGlzLmxleGVyKX19ZW1TdHJvbmcoZSxyLG49IiIpe2xldCBpPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nTERlbGltLmV4ZWMoZSk7aWYoIWl8fGlbM10mJm4ubWF0Y2goL1tccHtMfVxwe059XS91KSlyZXR1cm47aWYoIShpWzFdfHxpWzJdfHwiIil8fCFufHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKG4pKXtsZXQgcz1bLi4uaVswXV0ubGVuZ3RoLTEsbCx1LGg9cyxmPTAsZD1pWzBdWzBdPT09IioiP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nUkRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nUkRlbGltVW5kO2ZvcihkLmxhc3RJbmRleD0wLHI9ci5zbGljZSgtMSplLmxlbmd0aCtzKTsoaT1kLmV4ZWMocikpIT1udWxsOyl7aWYobD1pWzFdfHxpWzJdfHxpWzNdfHxpWzRdfHxpWzVdfHxpWzZdLCFsKWNvbnRpbnVlO2lmKHU9Wy4uLmxdLmxlbmd0aCxpWzNdfHxpWzRdKXtoKz11O2NvbnRpbnVlfWVsc2UgaWYoKGlbNV18fGlbNl0pJiZzJTMmJiEoKHMrdSklMykpe2YrPXU7Y29udGludWV9aWYoaC09dSxoPjApY29udGludWU7dT1NYXRoLm1pbih1LHUraCtmKTtsZXQgcD1bLi4uaVswXV1bMF0ubGVuZ3RoLG09ZS5zbGljZSgwLHMraS5pbmRleCtwK3UpO2lmKE1hdGgubWluKHMsdSklMil7bGV0IHk9bS5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzptLHRleHQ6eSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoeSl9fWxldCBnPW0uc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3Om0sdGV4dDpnLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhnKX19fX1jb2Rlc3BhbihlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMoZSk7aWYocil7bGV0IG49clsyXS5yZXBsYWNlKC9cbi9nLCIgIiksaT0vW14gXS8udGVzdChuKSxhPS9eIC8udGVzdChuKSYmLyAkLy50ZXN0KG4pO3JldHVybiBpJiZhJiYobj1uLnN1YnN0cmluZygxLG4ubGVuZ3RoLTEpKSxuPWVvKG4sITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3OnJbMF0sdGV4dDpufX19YnIoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJiciIscmF3OnJbMF19fWRlbChlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJkZWwiLHJhdzpyWzBdLHRleHQ6clsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoclsyXSl9fWF1dG9saW5rKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoZSk7aWYocil7bGV0IG4saTtyZXR1cm4gclsyXT09PSJAIj8obj1lbyhyWzFdKSxpPSJtYWlsdG86IituKToobj1lbyhyWzFdKSxpPW4pLHt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0Om4saHJlZjppLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpuLHRleHQ6bn1dfX19dXJsKGUpe2xldCByO2lmKHI9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMoZSkpe2xldCBuLGk7aWYoclsyXT09PSJAIiluPWVvKHJbMF0pLGk9Im1haWx0bzoiK247ZWxzZXtsZXQgYTtkbyBhPXJbMF0sclswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoclswXSk/LlswXT8/IiI7d2hpbGUoYSE9PXJbMF0pO249ZW8oclswXSksclsxXT09PSJ3d3cuIj9pPSJodHRwOi8vIityWzBdOmk9clswXX1yZXR1cm57dHlwZToibGluayIscmF3OnJbMF0sdGV4dDpuLGhyZWY6aSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6bix0ZXh0Om59XX19fWlubGluZVRleHQoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGUpO2lmKHIpe2xldCBuO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s/bj1yWzBdOm49ZW8oclswXSkse3R5cGU6InRleHQiLHJhdzpyWzBdLHRleHQ6bn19fX0seTdlPS9eKD86ICooPzpcbnwkKSkrLyx2N2U9L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8seDdlPS9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8sZnY9L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8sYjdlPS9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLHRqPS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLHJqPWZuKC9eKD8hYnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbCkoKD86Lnxcbig/IVxzKj9cbnxidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8pLnJlcGxhY2UoL2J1bGwvZyx0aikucmVwbGFjZSgvYmxvY2tDb2RlL2csLyB7NH0vKS5yZXBsYWNlKC9mZW5jZXMvZywvIHswLDN9KD86YHszLH18fnszLH0pLykucmVwbGFjZSgvYmxvY2txdW90ZS9nLC8gezAsM30+LykucmVwbGFjZSgvaGVhZGluZy9nLC8gezAsM30jezEsNn0vKS5yZXBsYWNlKC9odG1sL2csLyB7MCwzfTxbXlxuPl0rPlxuLykuZ2V0UmVnZXgoKSxoOT0vXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx3N2U9L15bXlxuXSsvLGY5PS8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLFQ3ZT1mbigvXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvKS5yZXBsYWNlKCJsYWJlbCIsZjkpLnJlcGxhY2UoInRpdGxlIiwvKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpLykuZ2V0UmVnZXgoKSxrN2U9Zm4oL14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8pLnJlcGxhY2UoL2J1bGwvZyx0aikuZ2V0UmVnZXgoKSx3NT0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VhcmNofHNlY3Rpb258c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsZDk9LzwhLS0oPzotPz58W1xzXFNdKj8oPzotLT58JCkpLyxFN2U9Zm4oIl4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIiwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLGQ5KS5yZXBsYWNlKCJ0YWciLHc1KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLG5qPWZuKGg5KS5yZXBsYWNlKCJociIsZnYpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsdzUpLmdldFJlZ2V4KCksUzdlPWZuKC9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLG5qKS5nZXRSZWdleCgpLHA5PXtibG9ja3F1b3RlOlM3ZSxjb2RlOnY3ZSxkZWY6VDdlLGZlbmNlczp4N2UsaGVhZGluZzpiN2UsaHI6ZnYsaHRtbDpFN2UsbGhlYWRpbmc6cmosbGlzdDprN2UsbmV3bGluZTp5N2UscGFyYWdyYXBoOm5qLHRhYmxlOnV2LHRleHQ6dzdlfSxRWD1mbigiXiAqKFteXFxuIF0uKilcXG4gezAsM30oKD86XFx8ICopPzo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKD86XFx8ICopPykoPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkiKS5yZXBsYWNlKCJociIsZnYpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIix3NSkuZ2V0UmVnZXgoKSxDN2U9ey4uLnA5LHRhYmxlOlFYLHBhcmFncmFwaDpmbihoOSkucmVwbGFjZSgiaHIiLGZ2KS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLFFYKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsdzUpLmdldFJlZ2V4KCl9LEE3ZT17Li4ucDksaHRtbDpmbihgXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86IlteIl0qInwnW14nXSonfFxcc1teJyIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSlgKS5yZXBsYWNlKCJjb21tZW50IixkOSkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6dXYsbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6Zm4oaDkpLnJlcGxhY2UoImhyIixmdikucmVwbGFjZSgiaGVhZGluZyIsYCAqI3sxLDZ9ICpbXgpdYCkucmVwbGFjZSgibGhlYWRpbmciLHJqKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikucmVwbGFjZSgifHRhZyIsIiIpLmdldFJlZ2V4KCl9LGlqPS9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxfN2U9L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxhaj0vXiggezIsfXxcXClcbig/IVxzKiQpLyxMN2U9L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8sZHY9IlxccHtQfVxccHtTfSIsRDdlPWZuKC9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS8sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9nLGR2KS5nZXRSZWdleCgpLE43ZT0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxSN2U9Zm4oL14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLywidSIpLnJlcGxhY2UoL3B1bmN0L2csZHYpLmdldFJlZ2V4KCksTTdlPWZuKCJeW15fKl0qP19fW15fKl0qP1xcKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcXCopW3B1bmN0XShcXCorKSg/PVtcXHNdfCQpfFtecHVuY3RcXHNdKFxcKispKD8hXFwqKSg/PVtwdW5jdFxcc118JCl8KD8hXFwqKVtwdW5jdFxcc10oXFwqKykoPz1bXnB1bmN0XFxzXSl8W1xcc10oXFwqKykoPyFcXCopKD89W3B1bmN0XSl8KD8hXFwqKVtwdW5jdF0oXFwqKykoPyFcXCopKD89W3B1bmN0XSl8W15wdW5jdFxcc10oXFwqKykoPz1bXnB1bmN0XFxzXSkiLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csZHYpLmdldFJlZ2V4KCksSTdlPWZuKCJeW15fKl0qP1xcKlxcKlteXypdKj9fW15fKl0qPyg/PVxcKlxcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xcc118JCl8W15wdW5jdFxcc10oXyspKD8hXykoPz1bcHVuY3RcXHNdfCQpfCg/IV8pW3B1bmN0XFxzXShfKykoPz1bXnB1bmN0XFxzXSl8W1xcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKSIsImd1IikucmVwbGFjZSgvcHVuY3QvZyxkdikuZ2V0UmVnZXgoKSxPN2U9Zm4oL1xcKFtwdW5jdF0pLywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGR2KS5nZXRSZWdleCgpLFA3ZT1mbigvXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vKS5yZXBsYWNlKCJzY2hlbWUiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZSgiZW1haWwiLC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksQjdlPWZuKGQ5KS5yZXBsYWNlKCIoPzotLT58JCkiLCItLT4iKS5nZXRSZWdleCgpLEY3ZT1mbigiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iKS5yZXBsYWNlKCJjb21tZW50IixCN2UpLnJlcGxhY2UoImF0dHJpYnV0ZSIsL1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksYjU9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sejdlPWZuKC9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvKS5yZXBsYWNlKCJsYWJlbCIsYjUpLnJlcGxhY2UoImhyZWYiLC88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovKS5yZXBsYWNlKCJ0aXRsZSIsLyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLykuZ2V0UmVnZXgoKSxzaj1mbigvXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vKS5yZXBsYWNlKCJsYWJlbCIsYjUpLnJlcGxhY2UoInJlZiIsZjkpLmdldFJlZ2V4KCksb2o9Zm4oL14hP1xbKHJlZilcXSg/OlxbXF0pPy8pLnJlcGxhY2UoInJlZiIsZjkpLmdldFJlZ2V4KCksRzdlPWZuKCJyZWZsaW5rfG5vbGluayg/IVxcKCkiLCJnIikucmVwbGFjZSgicmVmbGluayIsc2opLnJlcGxhY2UoIm5vbGluayIsb2opLmdldFJlZ2V4KCksbTk9e19iYWNrcGVkYWw6dXYsYW55UHVuY3R1YXRpb246TzdlLGF1dG9saW5rOlA3ZSxibG9ja1NraXA6TjdlLGJyOmFqLGNvZGU6XzdlLGRlbDp1dixlbVN0cm9uZ0xEZWxpbTpSN2UsZW1TdHJvbmdSRGVsaW1Bc3Q6TTdlLGVtU3Ryb25nUkRlbGltVW5kOkk3ZSxlc2NhcGU6aWosbGluazp6N2Usbm9saW5rOm9qLHB1bmN0dWF0aW9uOkQ3ZSxyZWZsaW5rOnNqLHJlZmxpbmtTZWFyY2g6RzdlLHRhZzpGN2UsdGV4dDpMN2UsdXJsOnV2fSwkN2U9ey4uLm05LGxpbms6Zm4oL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLGI1KS5nZXRSZWdleCgpLHJlZmxpbms6Zm4oL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLGI1KS5nZXRSZWdleCgpfSxsOT17Li4ubTksZXNjYXBlOmZuKGlqKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLHVybDpmbigvXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sImkiKS5yZXBsYWNlKCJlbWFpbCIsL1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvKS5nZXRSZWdleCgpLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LFY3ZT17Li4ubDksYnI6Zm4oYWopLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OmZuKGw5LnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfSx4NT17bm9ybWFsOnA5LGdmbTpDN2UscGVkYW50aWM6QTdlfSxjdj17bm9ybWFsOm05LGdmbTpsOSxicmVha3M6VjdlLHBlZGFudGljOiQ3ZX0sa3U9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJfTGV4ZXIiKX10b2tlbnM7b3B0aW9ucztzdGF0ZTt0b2tlbml6ZXI7aW5saW5lUXVldWU7Y29uc3RydWN0b3IoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8RWQsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgbm0sdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtsZXQgcj17YmxvY2s6eDUubm9ybWFsLGlubGluZTpjdi5ub3JtYWx9O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8oci5ibG9jaz14NS5wZWRhbnRpYyxyLmlubGluZT1jdi5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKHIuYmxvY2s9eDUuZ2ZtLHRoaXMub3B0aW9ucy5icmVha3M/ci5pbmxpbmU9Y3YuYnJlYWtzOnIuaW5saW5lPWN2LmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9cn1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOng1LGlubGluZTpjdn19c3RhdGljIGxleChlLHIpe3JldHVybiBuZXcgdChyKS5sZXgoZSl9c3RhdGljIGxleElubGluZShlLHIpe3JldHVybiBuZXcgdChyKS5pbmxpbmVUb2tlbnMoZSl9bGV4KGUpe2U9ZS5yZXBsYWNlKC9cclxufFxyL2csYApgKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO2ZvcihsZXQgcj0wO3I8dGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZVF1ZXVlW3JdO3RoaXMuaW5saW5lVG9rZW5zKG4uc3JjLG4udG9rZW5zKX1yZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhlLHI9W10sbj0hMSl7dGhpcy5vcHRpb25zLnBlZGFudGljP2U9ZS5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6ZT1lLnJlcGxhY2UoL14oICopKFx0KykvZ20sKGwsdSxoKT0+dSsiICAgICIucmVwZWF0KGgubGVuZ3RoKSk7bGV0IGksYSxzO2Zvcig7ZTspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUobD0+KGk9bC5jYWxsKHtsZXhlcjp0aGlzfSxlLHIpKT8oZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKSwhMCk6ITEpKSl7aWYoaT10aGlzLnRva2VuaXplci5zcGFjZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLGkucmF3Lmxlbmd0aD09PTEmJnIubGVuZ3RoPjA/cltyLmxlbmd0aC0xXS5yYXcrPWAKYDpyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5jb2RlKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksYT1yW3IubGVuZ3RoLTFdLGEmJihhLnR5cGU9PT0icGFyYWdyYXBoInx8YS50eXBlPT09InRleHQiKT8oYS5yYXcrPWAKYCtpLnJhdyxhLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9YS50ZXh0KTpyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5mZW5jZXMoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5oZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuaHIoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIubGlzdChlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmh0bWwoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5kZWYoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxhPXJbci5sZW5ndGgtMV0sYSYmKGEudHlwZT09PSJwYXJhZ3JhcGgifHxhLnR5cGU9PT0idGV4dCIpPyhhLnJhdys9YApgK2kucmF3LGEudGV4dCs9YApgK2kucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWEudGV4dCk6dGhpcy50b2tlbnMubGlua3NbaS50YWddfHwodGhpcy50b2tlbnMubGlua3NbaS50YWddPXtocmVmOmkuaHJlZix0aXRsZTppLnRpdGxlfSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci50YWJsZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKHM9ZSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IGw9MS8wLHU9ZS5zbGljZSgxKSxoO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmPT57aD1mLmNhbGwoe2xleGVyOnRoaXN9LHUpLHR5cGVvZiBoPT0ibnVtYmVyIiYmaD49MCYmKGw9TWF0aC5taW4obCxoKSl9KSxsPDEvMCYmbD49MCYmKHM9ZS5zdWJzdHJpbmcoMCxsKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKGk9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKHMpKSl7YT1yW3IubGVuZ3RoLTFdLG4mJmE/LnR5cGU9PT0icGFyYWdyYXBoIj8oYS5yYXcrPWAKYCtpLnJhdyxhLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1hLnRleHQpOnIucHVzaChpKSxuPXMubGVuZ3RoIT09ZS5sZW5ndGgsZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIudGV4dChlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLGE9cltyLmxlbmd0aC0xXSxhJiZhLnR5cGU9PT0idGV4dCI/KGEucmF3Kz1gCmAraS5yYXcsYS50ZXh0Kz1gCmAraS50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9YS50ZXh0KTpyLnB1c2goaSk7Y29udGludWV9aWYoZSl7bGV0IGw9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihsKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihsKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLHJ9aW5saW5lKGUscj1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmUsdG9rZW5zOnJ9KSxyfWlubGluZVRva2VucyhlLHI9W10pe2xldCBuLGksYSxzPWUsbCx1LGg7aWYodGhpcy50b2tlbnMubGlua3Mpe2xldCBmPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihmLmxlbmd0aD4wKWZvcig7KGw9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhzKSkhPW51bGw7KWYuaW5jbHVkZXMobFswXS5zbGljZShsWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYocz1zLnNsaWNlKDAsbC5pbmRleCkrIlsiKyJhIi5yZXBlYXQobFswXS5sZW5ndGgtMikrIl0iK3Muc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDsobD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMocykpIT1udWxsOylzPXMuc2xpY2UoMCxsLmluZGV4KSsiWyIrImEiLnJlcGVhdChsWzBdLmxlbmd0aC0yKSsiXSIrcy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDsobD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhzKSkhPW51bGw7KXM9cy5zbGljZSgwLGwuaW5kZXgpKyIrKyIrcy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2U7KWlmKHV8fChoPSIiKSx1PSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUoZj0+KG49Zi5jYWxsKHtsZXhlcjp0aGlzfSxlLHIpKT8oZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwhMCk6ITEpKSl7aWYobj10aGlzLnRva2VuaXplci5lc2NhcGUoZSkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci50YWcoZSkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxpPXJbci5sZW5ndGgtMV0saSYmbi50eXBlPT09InRleHQiJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1uLnJhdyxpLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIubGluayhlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihuPXRoaXMudG9rZW5pemVyLnJlZmxpbmsoZSx0aGlzLnRva2Vucy5saW5rcykpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxpPXJbci5sZW5ndGgtMV0saSYmbi50eXBlPT09InRleHQiJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1uLnJhdyxpLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcoZSxzLGgpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIuY29kZXNwYW4oZSkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci5icihlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihuPXRoaXMudG9rZW5pemVyLmRlbChlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihuPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKGUpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKG49dGhpcy50b2tlbml6ZXIudXJsKGUpKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihhPWUsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgZj0xLzAsZD1lLnNsaWNlKDEpLHA7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaChtPT57cD1tLmNhbGwoe2xleGVyOnRoaXN9LGQpLHR5cGVvZiBwPT0ibnVtYmVyIiYmcD49MCYmKGY9TWF0aC5taW4oZixwKSl9KSxmPDEvMCYmZj49MCYmKGE9ZS5zdWJzdHJpbmcoMCxmKzEpKX1pZihuPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoYSkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxuLnJhdy5zbGljZSgtMSkhPT0iXyImJihoPW4ucmF3LnNsaWNlKC0xKSksdT0hMCxpPXJbci5sZW5ndGgtMV0saSYmaS50eXBlPT09InRleHQiPyhpLnJhdys9bi5yYXcsaS50ZXh0Kz1uLnRleHQpOnIucHVzaChuKTtjb250aW51ZX1pZihlKXtsZXQgZj0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGYpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKGYpfX1yZXR1cm4gcn19LGltPWNsYXNze3N0YXRpY3tvKHRoaXMsIl9SZW5kZXJlciIpfW9wdGlvbnM7cGFyc2VyO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxFZH1zcGFjZShlKXtyZXR1cm4iIn1jb2RlKHt0ZXh0OmUsbGFuZzpyLGVzY2FwZWQ6bn0pe2xldCBpPShyfHwiIikubWF0Y2goL15cUyovKT8uWzBdLGE9ZS5yZXBsYWNlKC9cbiQvLCIiKStgCmA7cmV0dXJuIGk/JzxwcmU+PGNvZGUgY2xhc3M9Imxhbmd1YWdlLScrZW8oaSkrJyI+Jysobj9hOmVvKGEsITApKStgPC9jb2RlPjwvcHJlPgpgOiI8cHJlPjxjb2RlPiIrKG4/YTplbyhhLCEwKSkrYDwvY29kZT48L3ByZT4KYH1ibG9ja3F1b3RlKHt0b2tlbnM6ZX0pe3JldHVybmA8YmxvY2txdW90ZT4KJHt0aGlzLnBhcnNlci5wYXJzZShlKX08L2Jsb2NrcXVvdGU+CmB9aHRtbCh7dGV4dDplfSl7cmV0dXJuIGV9aGVhZGluZyh7dG9rZW5zOmUsZGVwdGg6cn0pe3JldHVybmA8aCR7cn0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZShlKX08L2gke3J9PgpgfWhyKGUpe3JldHVybmA8aHI+CmB9bGlzdChlKXtsZXQgcj1lLm9yZGVyZWQsbj1lLnN0YXJ0LGk9IiI7Zm9yKGxldCBsPTA7bDxlLml0ZW1zLmxlbmd0aDtsKyspe2xldCB1PWUuaXRlbXNbbF07aSs9dGhpcy5saXN0aXRlbSh1KX1sZXQgYT1yPyJvbCI6InVsIixzPXImJm4hPT0xPycgc3RhcnQ9IicrbisnIic6IiI7cmV0dXJuIjwiK2ErcytgPgpgK2krIjwvIithK2A+CmB9bGlzdGl0ZW0oZSl7bGV0IHI9IiI7aWYoZS50YXNrKXtsZXQgbj10aGlzLmNoZWNrYm94KHtjaGVja2VkOiEhZS5jaGVja2VkfSk7ZS5sb29zZT9lLnRva2Vucy5sZW5ndGg+MCYmZS50b2tlbnNbMF0udHlwZT09PSJwYXJhZ3JhcGgiPyhlLnRva2Vuc1swXS50ZXh0PW4rIiAiK2UudG9rZW5zWzBdLnRleHQsZS50b2tlbnNbMF0udG9rZW5zJiZlLnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJmUudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlPT09InRleHQiJiYoZS50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9bisiICIrZS50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTplLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0IixyYXc6bisiICIsdGV4dDpuKyIgIn0pOnIrPW4rIiAifXJldHVybiByKz10aGlzLnBhcnNlci5wYXJzZShlLnRva2VucywhIWUubG9vc2UpLGA8bGk+JHtyfTwvbGk+CmB9Y2hlY2tib3goe2NoZWNrZWQ6ZX0pe3JldHVybiI8aW5wdXQgIisoZT8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giPid9cGFyYWdyYXBoKHt0b2tlbnM6ZX0pe3JldHVybmA8cD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvcD4KYH10YWJsZShlKXtsZXQgcj0iIixuPSIiO2ZvcihsZXQgYT0wO2E8ZS5oZWFkZXIubGVuZ3RoO2ErKyluKz10aGlzLnRhYmxlY2VsbChlLmhlYWRlclthXSk7cis9dGhpcy50YWJsZXJvdyh7dGV4dDpufSk7bGV0IGk9IiI7Zm9yKGxldCBhPTA7YTxlLnJvd3MubGVuZ3RoO2ErKyl7bGV0IHM9ZS5yb3dzW2FdO249IiI7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspbis9dGhpcy50YWJsZWNlbGwoc1tsXSk7aSs9dGhpcy50YWJsZXJvdyh7dGV4dDpufSl9cmV0dXJuIGkmJihpPWA8dGJvZHk+JHtpfTwvdGJvZHk+YCksYDx0YWJsZT4KPHRoZWFkPgpgK3IrYDwvdGhlYWQ+CmAraStgPC90YWJsZT4KYH10YWJsZXJvdyh7dGV4dDplfSl7cmV0dXJuYDx0cj4KJHtlfTwvdHI+CmB9dGFibGVjZWxsKGUpe2xldCByPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUudG9rZW5zKSxuPWUuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oZS5hbGlnbj9gPCR7bn0gYWxpZ249IiR7ZS5hbGlnbn0iPmA6YDwke259PmApK3IrYDwvJHtufT4KYH1zdHJvbmcoe3Rva2VuczplfSl7cmV0dXJuYDxzdHJvbmc+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZShlKX08L3N0cm9uZz5gfWVtKHt0b2tlbnM6ZX0pe3JldHVybmA8ZW0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZShlKX08L2VtPmB9Y29kZXNwYW4oe3RleHQ6ZX0pe3JldHVybmA8Y29kZT4ke2V9PC9jb2RlPmB9YnIoZSl7cmV0dXJuIjxicj4ifWRlbCh7dG9rZW5zOmV9KXtyZXR1cm5gPGRlbD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvZGVsPmB9bGluayh7aHJlZjplLHRpdGxlOnIsdG9rZW5zOm59KXtsZXQgaT10aGlzLnBhcnNlci5wYXJzZUlubGluZShuKSxhPVhYKGUpO2lmKGE9PT1udWxsKXJldHVybiBpO2U9YTtsZXQgcz0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gciYmKHMrPScgdGl0bGU9IicrcisnIicpLHMrPSI+IitpKyI8L2E+IixzfWltYWdlKHtocmVmOmUsdGl0bGU6cix0ZXh0Om59KXtsZXQgaT1YWChlKTtpZihpPT09bnVsbClyZXR1cm4gbjtlPWk7bGV0IGE9YDxpbWcgc3JjPSIke2V9IiBhbHQ9IiR7bn0iYDtyZXR1cm4gciYmKGErPWAgdGl0bGU9IiR7cn0iYCksYSs9Ij4iLGF9dGV4dChlKXtyZXR1cm4idG9rZW5zImluIGUmJmUudG9rZW5zP3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUudG9rZW5zKTplLnRleHR9fSxodj1jbGFzc3tzdGF0aWN7byh0aGlzLCJfVGV4dFJlbmRlcmVyIil9c3Ryb25nKHt0ZXh0OmV9KXtyZXR1cm4gZX1lbSh7dGV4dDplfSl7cmV0dXJuIGV9Y29kZXNwYW4oe3RleHQ6ZX0pe3JldHVybiBlfWRlbCh7dGV4dDplfSl7cmV0dXJuIGV9aHRtbCh7dGV4dDplfSl7cmV0dXJuIGV9dGV4dCh7dGV4dDplfSl7cmV0dXJuIGV9bGluayh7dGV4dDplfSl7cmV0dXJuIiIrZX1pbWFnZSh7dGV4dDplfSl7cmV0dXJuIiIrZX1icigpe3JldHVybiIifX0sRXU9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJfUGFyc2VyIil9b3B0aW9ucztyZW5kZXJlcjt0ZXh0UmVuZGVyZXI7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fEVkLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBpbSx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMucmVuZGVyZXIucGFyc2VyPXRoaXMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IGh2fXN0YXRpYyBwYXJzZShlLHIpe3JldHVybiBuZXcgdChyKS5wYXJzZShlKX1zdGF0aWMgcGFyc2VJbmxpbmUoZSxyKXtyZXR1cm4gbmV3IHQocikucGFyc2VJbmxpbmUoZSl9cGFyc2UoZSxyPSEwKXtsZXQgbj0iIjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IGE9ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbYS50eXBlXSl7bGV0IGw9YSx1PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tsLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxsKTtpZih1IT09ITF8fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKGwudHlwZSkpe24rPXV8fCIiO2NvbnRpbnVlfX1sZXQgcz1hO3N3aXRjaChzLnR5cGUpe2Nhc2Uic3BhY2UiOntuKz10aGlzLnJlbmRlcmVyLnNwYWNlKHMpO2NvbnRpbnVlfWNhc2UiaHIiOntuKz10aGlzLnJlbmRlcmVyLmhyKHMpO2NvbnRpbnVlfWNhc2UiaGVhZGluZyI6e24rPXRoaXMucmVuZGVyZXIuaGVhZGluZyhzKTtjb250aW51ZX1jYXNlImNvZGUiOntuKz10aGlzLnJlbmRlcmVyLmNvZGUocyk7Y29udGludWV9Y2FzZSJ0YWJsZSI6e24rPXRoaXMucmVuZGVyZXIudGFibGUocyk7Y29udGludWV9Y2FzZSJibG9ja3F1b3RlIjp7bis9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHMpO2NvbnRpbnVlfWNhc2UibGlzdCI6e24rPXRoaXMucmVuZGVyZXIubGlzdChzKTtjb250aW51ZX1jYXNlImh0bWwiOntuKz10aGlzLnJlbmRlcmVyLmh0bWwocyk7Y29udGludWV9Y2FzZSJwYXJhZ3JhcGgiOntuKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaChzKTtjb250aW51ZX1jYXNlInRleHQiOntsZXQgbD1zLHU9dGhpcy5yZW5kZXJlci50ZXh0KGwpO2Zvcig7aSsxPGUubGVuZ3RoJiZlW2krMV0udHlwZT09PSJ0ZXh0IjspbD1lWysraV0sdSs9YApgK3RoaXMucmVuZGVyZXIudGV4dChsKTtyP24rPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHt0eXBlOiJwYXJhZ3JhcGgiLHJhdzp1LHRleHQ6dSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6dSx0ZXh0OnV9XX0pOm4rPXU7Y29udGludWV9ZGVmYXVsdDp7bGV0IGw9J1Rva2VuIHdpdGggIicrcy50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IobCksIiI7dGhyb3cgbmV3IEVycm9yKGwpfX19cmV0dXJuIG59cGFyc2VJbmxpbmUoZSxyKXtyPXJ8fHRoaXMucmVuZGVyZXI7bGV0IG49IiI7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV07aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2EudHlwZV0pe2xldCBsPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxhKTtpZihsIT09ITF8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoYS50eXBlKSl7bis9bHx8IiI7Y29udGludWV9fWxldCBzPWE7c3dpdGNoKHMudHlwZSl7Y2FzZSJlc2NhcGUiOntuKz1yLnRleHQocyk7YnJlYWt9Y2FzZSJodG1sIjp7bis9ci5odG1sKHMpO2JyZWFrfWNhc2UibGluayI6e24rPXIubGluayhzKTticmVha31jYXNlImltYWdlIjp7bis9ci5pbWFnZShzKTticmVha31jYXNlInN0cm9uZyI6e24rPXIuc3Ryb25nKHMpO2JyZWFrfWNhc2UiZW0iOntuKz1yLmVtKHMpO2JyZWFrfWNhc2UiY29kZXNwYW4iOntuKz1yLmNvZGVzcGFuKHMpO2JyZWFrfWNhc2UiYnIiOntuKz1yLmJyKHMpO2JyZWFrfWNhc2UiZGVsIjp7bis9ci5kZWwocyk7YnJlYWt9Y2FzZSJ0ZXh0Ijp7bis9ci50ZXh0KHMpO2JyZWFrfWRlZmF1bHQ6e2xldCBsPSdUb2tlbiB3aXRoICInK3MudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKGwpLCIiO3Rocm93IG5ldyBFcnJvcihsKX19fXJldHVybiBufX0scm09Y2xhc3N7c3RhdGlje28odGhpcywiX0hvb2tzIil9b3B0aW9ucztjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8RWR9c3RhdGljIHBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyIsInByb2Nlc3NBbGxUb2tlbnMiXSk7cHJlcHJvY2VzcyhlKXtyZXR1cm4gZX1wb3N0cHJvY2VzcyhlKXtyZXR1cm4gZX1wcm9jZXNzQWxsVG9rZW5zKGUpe3JldHVybiBlfX0sYzk9Y2xhc3N7c3RhdGlje28odGhpcywiTWFya2VkIil9ZGVmYXVsdHM9dTkoKTtvcHRpb25zPXRoaXMuc2V0T3B0aW9ucztwYXJzZT10aGlzLiNlKGt1LmxleCxFdS5wYXJzZSk7cGFyc2VJbmxpbmU9dGhpcy4jZShrdS5sZXhJbmxpbmUsRXUucGFyc2VJbmxpbmUpO1BhcnNlcj1FdTtSZW5kZXJlcj1pbTtUZXh0UmVuZGVyZXI9aHY7TGV4ZXI9a3U7VG9rZW5pemVyPW5tO0hvb2tzPXJtO2NvbnN0cnVjdG9yKC4uLmUpe3RoaXMudXNlKC4uLmUpfXdhbGtUb2tlbnMoZSxyKXtsZXQgbj1bXTtmb3IobGV0IGkgb2YgZSlzd2l0Y2gobj1uLmNvbmNhdChyLmNhbGwodGhpcyxpKSksaS50eXBlKXtjYXNlInRhYmxlIjp7bGV0IGE9aTtmb3IobGV0IHMgb2YgYS5oZWFkZXIpbj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMocy50b2tlbnMscikpO2ZvcihsZXQgcyBvZiBhLnJvd3MpZm9yKGxldCBsIG9mIHMpbj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMobC50b2tlbnMscikpO2JyZWFrfWNhc2UibGlzdCI6e2xldCBhPWk7bj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS5pdGVtcyxyKSk7YnJlYWt9ZGVmYXVsdDp7bGV0IGE9aTt0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnM/LmNoaWxkVG9rZW5zPy5bYS50eXBlXT90aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbYS50eXBlXS5mb3JFYWNoKHM9PntsZXQgbD1hW3NdLmZsYXQoMS8wKTtuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhsLHIpKX0pOmEudG9rZW5zJiYobj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS50b2tlbnMscikpKX19cmV0dXJuIG59dXNlKC4uLmUpe2xldCByPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGUuZm9yRWFjaChuPT57bGV0IGk9ey4uLm59O2lmKGkuYXN5bmM9dGhpcy5kZWZhdWx0cy5hc3luY3x8aS5hc3luY3x8ITEsbi5leHRlbnNpb25zJiYobi5leHRlbnNpb25zLmZvckVhY2goYT0+e2lmKCFhLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbmFtZSByZXF1aXJlZCIpO2lmKCJyZW5kZXJlciJpbiBhKXtsZXQgcz1yLnJlbmRlcmVyc1thLm5hbWVdO3M/ci5yZW5kZXJlcnNbYS5uYW1lXT1mdW5jdGlvbiguLi5sKXtsZXQgdT1hLnJlbmRlcmVyLmFwcGx5KHRoaXMsbCk7cmV0dXJuIHU9PT0hMSYmKHU9cy5hcHBseSh0aGlzLGwpKSx1fTpyLnJlbmRlcmVyc1thLm5hbWVdPWEucmVuZGVyZXJ9aWYoInRva2VuaXplciJpbiBhKXtpZighYS5sZXZlbHx8YS5sZXZlbCE9PSJibG9jayImJmEubGV2ZWwhPT0iaW5saW5lIil0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTtsZXQgcz1yW2EubGV2ZWxdO3M/cy51bnNoaWZ0KGEudG9rZW5pemVyKTpyW2EubGV2ZWxdPVthLnRva2VuaXplcl0sYS5zdGFydCYmKGEubGV2ZWw9PT0iYmxvY2siP3Iuc3RhcnRCbG9jaz9yLnN0YXJ0QmxvY2sucHVzaChhLnN0YXJ0KTpyLnN0YXJ0QmxvY2s9W2Euc3RhcnRdOmEubGV2ZWw9PT0iaW5saW5lIiYmKHIuc3RhcnRJbmxpbmU/ci5zdGFydElubGluZS5wdXNoKGEuc3RhcnQpOnIuc3RhcnRJbmxpbmU9W2Euc3RhcnRdKSl9ImNoaWxkVG9rZW5zImluIGEmJmEuY2hpbGRUb2tlbnMmJihyLmNoaWxkVG9rZW5zW2EubmFtZV09YS5jaGlsZFRva2Vucyl9KSxpLmV4dGVuc2lvbnM9ciksbi5yZW5kZXJlcil7bGV0IGE9dGhpcy5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IGltKHRoaXMuZGVmYXVsdHMpO2ZvcihsZXQgcyBpbiBuLnJlbmRlcmVyKXtpZighKHMgaW4gYSkpdGhyb3cgbmV3IEVycm9yKGByZW5kZXJlciAnJHtzfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJwYXJzZXIiXS5pbmNsdWRlcyhzKSljb250aW51ZTtsZXQgbD1zLHU9bi5yZW5kZXJlcltsXTtuLnVzZU5ld1JlbmRlcmVyfHwodT10aGlzLiN0KHUsbCxhKSk7bGV0IGg9YVtsXTthW2xdPSguLi5mKT0+e2xldCBkPXUuYXBwbHkoYSxmKTtyZXR1cm4gZD09PSExJiYoZD1oLmFwcGx5KGEsZikpLGR8fCIifX1pLnJlbmRlcmVyPWF9aWYobi50b2tlbml6ZXIpe2xldCBhPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgbm0odGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBzIGluIG4udG9rZW5pemVyKXtpZighKHMgaW4gYSkpdGhyb3cgbmV3IEVycm9yKGB0b2tlbml6ZXIgJyR7c30nIGRvZXMgbm90IGV4aXN0YCk7aWYoWyJvcHRpb25zIiwicnVsZXMiLCJsZXhlciJdLmluY2x1ZGVzKHMpKWNvbnRpbnVlO2xldCBsPXMsdT1uLnRva2VuaXplcltsXSxoPWFbbF07YVtsXT0oLi4uZik9PntsZXQgZD11LmFwcGx5KGEsZik7cmV0dXJuIGQ9PT0hMSYmKGQ9aC5hcHBseShhLGYpKSxkfX1pLnRva2VuaXplcj1hfWlmKG4uaG9va3Mpe2xldCBhPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5ldyBybTtmb3IobGV0IHMgaW4gbi5ob29rcyl7aWYoIShzIGluIGEpKXRocm93IG5ldyBFcnJvcihgaG9vayAnJHtzfScgZG9lcyBub3QgZXhpc3RgKTtpZihzPT09Im9wdGlvbnMiKWNvbnRpbnVlO2xldCBsPXMsdT1uLmhvb2tzW2xdLGg9YVtsXTtybS5wYXNzVGhyb3VnaEhvb2tzLmhhcyhzKT9hW2xdPWY9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUodS5jYWxsKGEsZikpLnRoZW4ocD0+aC5jYWxsKGEscCkpO2xldCBkPXUuY2FsbChhLGYpO3JldHVybiBoLmNhbGwoYSxkKX06YVtsXT0oLi4uZik9PntsZXQgZD11LmFwcGx5KGEsZik7cmV0dXJuIGQ9PT0hMSYmKGQ9aC5hcHBseShhLGYpKSxkfX1pLmhvb2tzPWF9aWYobi53YWxrVG9rZW5zKXtsZXQgYT10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnMscz1uLndhbGtUb2tlbnM7aS53YWxrVG9rZW5zPWZ1bmN0aW9uKGwpe2xldCB1PVtdO3JldHVybiB1LnB1c2gocy5jYWxsKHRoaXMsbCkpLGEmJih1PXUuY29uY2F0KGEuY2FsbCh0aGlzLGwpKSksdX19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5pfX0pLHRoaXN9I3QoZSxyLG4pe3N3aXRjaChyKXtjYXNlImhlYWRpbmciOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLG4ucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zKSxpLmRlcHRoLGQ3ZShuLnBhcnNlci5wYXJzZUlubGluZShpLnRva2VucyxuLnBhcnNlci50ZXh0UmVuZGVyZXIpKSl9O2Nhc2UiY29kZSI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsaS50ZXh0LGkubGFuZywhIWkuZXNjYXBlZCl9O2Nhc2UidGFibGUiOnJldHVybiBmdW5jdGlvbihpKXtpZighaS50eXBlfHxpLnR5cGUhPT1yKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtsZXQgYT0iIixzPSIiO2ZvcihsZXQgdT0wO3U8aS5oZWFkZXIubGVuZ3RoO3UrKylzKz10aGlzLnRhYmxlY2VsbCh7dGV4dDppLmhlYWRlclt1XS50ZXh0LHRva2VuczppLmhlYWRlclt1XS50b2tlbnMsaGVhZGVyOiEwLGFsaWduOmkuYWxpZ25bdV19KTthKz10aGlzLnRhYmxlcm93KHt0ZXh0OnN9KTtsZXQgbD0iIjtmb3IobGV0IHU9MDt1PGkucm93cy5sZW5ndGg7dSsrKXtsZXQgaD1pLnJvd3NbdV07cz0iIjtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylzKz10aGlzLnRhYmxlY2VsbCh7dGV4dDpoW2ZdLnRleHQsdG9rZW5zOmhbZl0udG9rZW5zLGhlYWRlcjohMSxhbGlnbjppLmFsaWduW2ZdfSk7bCs9dGhpcy50YWJsZXJvdyh7dGV4dDpzfSl9cmV0dXJuIGUuY2FsbCh0aGlzLGEsbCl9O2Nhc2UiYmxvY2txdW90ZSI6cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKCFpLnR5cGV8fGkudHlwZSE9PXIpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2xldCBhPXRoaXMucGFyc2VyLnBhcnNlKGkudG9rZW5zKTtyZXR1cm4gZS5jYWxsKHRoaXMsYSl9O2Nhc2UibGlzdCI6cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKCFpLnR5cGV8fGkudHlwZSE9PXIpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2xldCBhPWkub3JkZXJlZCxzPWkuc3RhcnQsbD1pLmxvb3NlLHU9IiI7Zm9yKGxldCBoPTA7aDxpLml0ZW1zLmxlbmd0aDtoKyspe2xldCBmPWkuaXRlbXNbaF0sZD1mLmNoZWNrZWQscD1mLnRhc2ssbT0iIjtpZihmLnRhc2spe2xldCBnPXRoaXMuY2hlY2tib3goe2NoZWNrZWQ6ISFkfSk7bD9mLnRva2Vucy5sZW5ndGg+MCYmZi50b2tlbnNbMF0udHlwZT09PSJwYXJhZ3JhcGgiPyhmLnRva2Vuc1swXS50ZXh0PWcrIiAiK2YudG9rZW5zWzBdLnRleHQsZi50b2tlbnNbMF0udG9rZW5zJiZmLnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJmYudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlPT09InRleHQiJiYoZi50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9ZysiICIrZi50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpmLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OmcrIiAifSk6bSs9ZysiICJ9bSs9dGhpcy5wYXJzZXIucGFyc2UoZi50b2tlbnMsbCksdSs9dGhpcy5saXN0aXRlbSh7dHlwZToibGlzdF9pdGVtIixyYXc6bSx0ZXh0Om0sdGFzazpwLGNoZWNrZWQ6ISFkLGxvb3NlOmwsdG9rZW5zOmYudG9rZW5zfSl9cmV0dXJuIGUuY2FsbCh0aGlzLHUsYSxzKX07Y2FzZSJodG1sIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQsaS5ibG9jayl9O2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyx0aGlzLnBhcnNlci5wYXJzZUlubGluZShpLnRva2VucykpfTtjYXNlImVzY2FwZSI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsaS50ZXh0KX07Y2FzZSJsaW5rIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLmhyZWYsaS50aXRsZSx0aGlzLnBhcnNlci5wYXJzZUlubGluZShpLnRva2VucykpfTtjYXNlImltYWdlIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLmhyZWYsaS50aXRsZSxpLnRleHQpfTtjYXNlInN0cm9uZyI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoaS50b2tlbnMpKX07Y2FzZSJlbSI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoaS50b2tlbnMpKX07Y2FzZSJjb2Rlc3BhbiI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsaS50ZXh0KX07Y2FzZSJkZWwiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zKSl9O2Nhc2UidGV4dCI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsaS50ZXh0KX19cmV0dXJuIGV9c2V0T3B0aW9ucyhlKXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5lfSx0aGlzfWxleGVyKGUscil7cmV0dXJuIGt1LmxleChlLHI/P3RoaXMuZGVmYXVsdHMpfXBhcnNlcihlLHIpe3JldHVybiBFdS5wYXJzZShlLHI/P3RoaXMuZGVmYXVsdHMpfSNlKGUscil7cmV0dXJuKG4saSk9PntsZXQgYT17Li4uaX0scz17Li4udGhpcy5kZWZhdWx0cywuLi5hfTt0aGlzLmRlZmF1bHRzLmFzeW5jPT09ITAmJmEuYXN5bmM9PT0hMSYmKHMuc2lsZW50fHxjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFRoZSBhc3luYzogZmFsc2Ugb3B0aW9uIHNlbnQgdG8gcGFyc2Ugd2lsbCBiZSBpZ25vcmVkLiIpLHMuYXN5bmM9ITApO2xldCBsPXRoaXMuI3IoISFzLnNpbGVudCwhIXMuYXN5bmMpO2lmKHR5cGVvZiBuPiJ1Inx8bj09PW51bGwpcmV0dXJuIGwobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKHR5cGVvZiBuIT0ic3RyaW5nIilyZXR1cm4gbChuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYocy5ob29rcyYmKHMuaG9va3Mub3B0aW9ucz1zKSxzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUocy5ob29rcz9zLmhvb2tzLnByZXByb2Nlc3Mobik6bikudGhlbih1PT5lKHUscykpLnRoZW4odT0+cy5ob29rcz9zLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModSk6dSkudGhlbih1PT5zLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKHUscy53YWxrVG9rZW5zKSkudGhlbigoKT0+dSk6dSkudGhlbih1PT5yKHUscykpLnRoZW4odT0+cy5ob29rcz9zLmhvb2tzLnBvc3Rwcm9jZXNzKHUpOnUpLmNhdGNoKGwpO3RyeXtzLmhvb2tzJiYobj1zLmhvb2tzLnByZXByb2Nlc3MobikpO2xldCB1PWUobixzKTtzLmhvb2tzJiYodT1zLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModSkpLHMud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKHUscy53YWxrVG9rZW5zKTtsZXQgaD1yKHUscyk7cmV0dXJuIHMuaG9va3MmJihoPXMuaG9va3MucG9zdHByb2Nlc3MoaCkpLGh9Y2F0Y2godSl7cmV0dXJuIGwodSl9fX0jcihlLHIpe3JldHVybiBuPT57aWYobi5tZXNzYWdlKz1gClBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLmAsZSl7bGV0IGk9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIrZW8obi5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gcj9Qcm9taXNlLnJlc29sdmUoaSk6aX1pZihyKXJldHVybiBQcm9taXNlLnJlamVjdChuKTt0aHJvdyBufX19LGtkPW5ldyBjOTtvKGVuLCJtYXJrZWQiKTtlbi5vcHRpb25zPWVuLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGtkLnNldE9wdGlvbnModCksZW4uZGVmYXVsdHM9a2QuZGVmYXVsdHMsWlgoZW4uZGVmYXVsdHMpLGVufTtlbi5nZXREZWZhdWx0cz11OTtlbi5kZWZhdWx0cz1FZDtlbi51c2U9ZnVuY3Rpb24oLi4udCl7cmV0dXJuIGtkLnVzZSguLi50KSxlbi5kZWZhdWx0cz1rZC5kZWZhdWx0cyxaWChlbi5kZWZhdWx0cyksZW59O2VuLndhbGtUb2tlbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4ga2Qud2Fsa1Rva2Vucyh0LGUpfTtlbi5wYXJzZUlubGluZT1rZC5wYXJzZUlubGluZTtlbi5QYXJzZXI9RXU7ZW4ucGFyc2VyPUV1LnBhcnNlO2VuLlJlbmRlcmVyPWltO2VuLlRleHRSZW5kZXJlcj1odjtlbi5MZXhlcj1rdTtlbi5sZXhlcj1rdS5sZXg7ZW4uVG9rZW5pemVyPW5tO2VuLkhvb2tzPXJtO2VuLnBhcnNlPWVuO3U2dD1lbi5vcHRpb25zLGg2dD1lbi5zZXRPcHRpb25zLGY2dD1lbi51c2UsZDZ0PWVuLndhbGtUb2tlbnMscDZ0PWVuLnBhcnNlSW5saW5lLG02dD1FdS5wYXJzZSxnNnQ9a3UubGV4fSk7ZnVuY3Rpb24gVTdlKHQse21hcmtkb3duQXV0b1dyYXA6ZX0pe2xldCBuPXQucmVwbGFjZSgvPGJyXC8+L2csYApgKS5yZXBsYWNlKC9cbnsyLH0vZyxgCmApLGk9SWIobik7cmV0dXJuIGU9PT0hMT9pLnJlcGxhY2UoLyAvZywiJm5ic3A7Iik6aX1mdW5jdGlvbiBjaih0LGU9e30pe2xldCByPVU3ZSh0LGUpLG49ZW4ubGV4ZXIociksaT1bW11dLGE9MDtmdW5jdGlvbiBzKGwsdT0ibm9ybWFsIil7bC50eXBlPT09InRleHQiP2wudGV4dC5zcGxpdChgCmApLmZvckVhY2goKGYsZCk9PntkIT09MCYmKGErKyxpLnB1c2goW10pKSxmLnNwbGl0KCIgIikuZm9yRWFjaChwPT57cD1wLnJlcGxhY2UoLyYjMzk7L2csIiciKSxwJiZpW2FdLnB1c2goe2NvbnRlbnQ6cCx0eXBlOnV9KX0pfSk6bC50eXBlPT09InN0cm9uZyJ8fGwudHlwZT09PSJlbSI/bC50b2tlbnMuZm9yRWFjaChoPT57cyhoLGwudHlwZSl9KTpsLnR5cGU9PT0iaHRtbCImJmlbYV0ucHVzaCh7Y29udGVudDpsLnRleHQsdHlwZToibm9ybWFsIn0pfXJldHVybiBvKHMsInByb2Nlc3NOb2RlIiksbi5mb3JFYWNoKGw9PntsLnR5cGU9PT0icGFyYWdyYXBoIj9sLnRva2Vucz8uZm9yRWFjaCh1PT57cyh1KX0pOmwudHlwZT09PSJodG1sIiYmaVthXS5wdXNoKHtjb250ZW50OmwudGV4dCx0eXBlOiJub3JtYWwifSl9KSxpfWZ1bmN0aW9uIHVqKHQse21hcmtkb3duQXV0b1dyYXA6ZX09e30pe2xldCByPWVuLmxleGVyKHQpO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIGkudHlwZT09PSJ0ZXh0Ij9lPT09ITE/aS50ZXh0LnJlcGxhY2UoL1xuICovZywiPGJyLz4iKS5yZXBsYWNlKC8gL2csIiZuYnNwOyIpOmkudGV4dC5yZXBsYWNlKC9cbiAqL2csIjxici8+Iik6aS50eXBlPT09InN0cm9uZyI/YDxzdHJvbmc+JHtpLnRva2Vucz8ubWFwKG4pLmpvaW4oIiIpfTwvc3Ryb25nPmA6aS50eXBlPT09ImVtIj9gPGVtPiR7aS50b2tlbnM/Lm1hcChuKS5qb2luKCIiKX08L2VtPmA6aS50eXBlPT09InBhcmFncmFwaCI/YDxwPiR7aS50b2tlbnM/Lm1hcChuKS5qb2luKCIiKX08L3A+YDppLnR5cGU9PT0ic3BhY2UiPyIiOmkudHlwZT09PSJodG1sIj9gJHtpLnRleHR9YDppLnR5cGU9PT0iZXNjYXBlIj9pLnRleHQ6YFVuc3VwcG9ydGVkIG1hcmtkb3duOiAke2kudHlwZX1gfXJldHVybiBvKG4sIm91dHB1dCIpLHIubWFwKG4pLmpvaW4oIiIpfXZhciBoaj1NKCgpPT57InVzZSBzdHJpY3QiO2xqKCk7TVMoKTtvKFU3ZSwicHJlcHJvY2Vzc01hcmtkb3duIik7byhjaiwibWFya2Rvd25Ub0xpbmVzIik7byh1aiwibWFya2Rvd25Ub0hUTUwiKX0pO2Z1bmN0aW9uIEg3ZSh0KXtyZXR1cm4gSW50bC5TZWdtZW50ZXI/Wy4uLm5ldyBJbnRsLlNlZ21lbnRlcigpLnNlZ21lbnQodCldLm1hcChlPT5lLnNlZ21lbnQpOlsuLi50XX1mdW5jdGlvbiBXN2UodCxlKXtsZXQgcj1IN2UoZS5jb250ZW50KTtyZXR1cm4gZmoodCxbXSxyLGUudHlwZSl9ZnVuY3Rpb24gZmoodCxlLHIsbil7aWYoci5sZW5ndGg9PT0wKXJldHVyblt7Y29udGVudDplLmpvaW4oIiIpLHR5cGU6bn0se2NvbnRlbnQ6IiIsdHlwZTpufV07bGV0W2ksLi4uYV09cixzPVsuLi5lLGldO3JldHVybiB0KFt7Y29udGVudDpzLmpvaW4oIiIpLHR5cGU6bn1dKT9maih0LHMsYSxuKTooZS5sZW5ndGg9PT0wJiZpJiYoZS5wdXNoKGkpLHIuc2hpZnQoKSksW3tjb250ZW50OmUuam9pbigiIiksdHlwZTpufSx7Y29udGVudDpyLmpvaW4oIiIpLHR5cGU6bn1dKX1mdW5jdGlvbiBkaih0LGUpe2lmKHQuc29tZSgoe2NvbnRlbnQ6cn0pPT5yLmluY2x1ZGVzKGAKYCkpKXRocm93IG5ldyBFcnJvcigic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lIik7cmV0dXJuIGc5KHQsZSl9ZnVuY3Rpb24gZzkodCxlLHI9W10sbj1bXSl7aWYodC5sZW5ndGg9PT0wKXJldHVybiBuLmxlbmd0aD4wJiZyLnB1c2gobiksci5sZW5ndGg+MD9yOltdO2xldCBpPSIiO3RbMF0uY29udGVudD09PSIgIiYmKGk9IiAiLHQuc2hpZnQoKSk7bGV0IGE9dC5zaGlmdCgpPz97Y29udGVudDoiICIsdHlwZToibm9ybWFsIn0scz1bLi4ubl07aWYoaSE9PSIiJiZzLnB1c2goe2NvbnRlbnQ6aSx0eXBlOiJub3JtYWwifSkscy5wdXNoKGEpLGUocykpcmV0dXJuIGc5KHQsZSxyLHMpO2lmKG4ubGVuZ3RoPjApci5wdXNoKG4pLHQudW5zaGlmdChhKTtlbHNlIGlmKGEuY29udGVudCl7bGV0W2wsdV09VzdlKGUsYSk7ci5wdXNoKFtsXSksdS5jb250ZW50JiZ0LnVuc2hpZnQodSl9cmV0dXJuIGc5KHQsZSxyKX12YXIgcGo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEg3ZSwic3BsaXRUZXh0VG9DaGFycyIpO28oVzdlLCJzcGxpdFdvcmRUb0ZpdFdpZHRoIik7byhmaiwic3BsaXRXb3JkVG9GaXRXaWR0aFJlY3Vyc2lvbiIpO28oZGosInNwbGl0TGluZVRvRml0V2lkdGgiKTtvKGc5LCJzcGxpdExpbmVUb0ZpdFdpZHRoUmVjdXJzaW9uIil9KTtmdW5jdGlvbiBtaih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfWFzeW5jIGZ1bmN0aW9uIFk3ZSh0LGUscixuLGk9ITEpe2xldCBhPXQuYXBwZW5kKCJmb3JlaWduT2JqZWN0Iik7YS5hdHRyKCJ3aWR0aCIsYCR7MTAqcn1weGApLGEuYXR0cigiaGVpZ2h0IixgJHsxMCpyfXB4YCk7bGV0IHM9YS5hcHBlbmQoInhodG1sOmRpdiIpLGw9ZS5sYWJlbDtlLmxhYmVsJiZwaShlLmxhYmVsKSYmKGw9YXdhaXQgaGgoZS5sYWJlbC5yZXBsYWNlKGplLmxpbmVCcmVha1JlZ2V4LGAKYCksZGUoKSkpO2xldCB1PWUuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiLGg9cy5hcHBlbmQoInNwYW4iKTtoLmh0bWwobCksbWooaCxlLmxhYmVsU3R5bGUpLGguYXR0cigiY2xhc3MiLGAke3V9ICR7bn1gKSxtaihzLGUubGFiZWxTdHlsZSkscy5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKSxzLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLHMuc3R5bGUoImxpbmUtaGVpZ2h0IiwiMS41Iikscy5zdHlsZSgibWF4LXdpZHRoIixyKyJweCIpLHMuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKSxzLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGkmJnMuYXR0cigiY2xhc3MiLCJsYWJlbEJrZyIpO2xldCBmPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBmLndpZHRoPT09ciYmKHMuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLHMuc3R5bGUoIndoaXRlLXNwYWNlIiwiYnJlYWstc3BhY2VzIikscy5zdHlsZSgid2lkdGgiLHIrInB4IiksZj1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYS5ub2RlKCl9ZnVuY3Rpb24geTkodCxlLHIpe3JldHVybiB0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJjbGFzcyIsInRleHQtb3V0ZXItdHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixlKnItLjErImVtIikuYXR0cigiZHkiLHIrImVtIil9ZnVuY3Rpb24gcTdlKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgidGV4dCIpLGk9eTkobiwxLGUpO3Y5KGkscik7bGV0IGE9aS5ub2RlKCkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7cmV0dXJuIG4ucmVtb3ZlKCksYX1mdW5jdGlvbiBnaih0LGUscil7bGV0IG49dC5hcHBlbmQoInRleHQiKSxpPXk5KG4sMSxlKTt2OShpLFt7Y29udGVudDpyLHR5cGU6Im5vcm1hbCJ9XSk7bGV0IGE9aS5ub2RlKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBhJiZuLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWDdlKHQsZSxyLG49ITEpe2xldCBhPWUuYXBwZW5kKCJnIikscz1hLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLmF0dHIoInN0eWxlIiwic3Ryb2tlOiBub25lIiksbD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpLHU9MDtmb3IobGV0IGggb2Ygcil7bGV0IGY9byhwPT5xN2UoYSwxLjEscCk8PXQsImNoZWNrV2lkdGgiKSxkPWYoaCk/W2hdOmRqKGgsZik7Zm9yKGxldCBwIG9mIGQpe2xldCBtPXk5KGwsdSwxLjEpO3Y5KG0scCksdSsrfX1pZihuKXtsZXQgaD1sLm5vZGUoKS5nZXRCQm94KCksZj0yO3JldHVybiBzLmF0dHIoIngiLGgueC1mKS5hdHRyKCJ5IixoLnktZikuYXR0cigid2lkdGgiLGgud2lkdGgrMipmKS5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KzIqZiksYS5ub2RlKCl9ZWxzZSByZXR1cm4gbC5ub2RlKCl9ZnVuY3Rpb24gdjkodCxlKXt0LnRleHQoIiIpLGUuZm9yRWFjaCgocixuKT0+e2xldCBpPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImZvbnQtc3R5bGUiLHIudHlwZT09PSJlbSI/Iml0YWxpYyI6Im5vcm1hbCIpLmF0dHIoImNsYXNzIiwidGV4dC1pbm5lci10c3BhbiIpLmF0dHIoImZvbnQtd2VpZ2h0IixyLnR5cGU9PT0ic3Ryb25nIj8iYm9sZCI6Im5vcm1hbCIpO249PT0wP2kudGV4dChyLmNvbnRlbnQpOmkudGV4dCgiICIrci5jb250ZW50KX0pfWZ1bmN0aW9uIHg5KHQpe3JldHVybiB0LnJlcGxhY2UoL2ZhW2JrbHJzXT86ZmEtW1x3LV0rL2csZT0+YDxpIGNsYXNzPScke2UucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKX12YXIgU2ksRGw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7bXIoKTtodCgpO2hqKCk7aHIoKTtwaigpO28obWosImFwcGx5U3R5bGUiKTtvKFk3ZSwiYWRkSHRtbFNwYW4iKTtvKHk5LCJjcmVhdGVUc3BhbiIpO28ocTdlLCJjb21wdXRlV2lkdGhPZlRleHQiKTtvKGdqLCJjb21wdXRlRGltZW5zaW9uT2ZUZXh0Iik7byhYN2UsImNyZWF0ZUZvcm1hdHRlZFRleHQiKTtvKHY5LCJ1cGRhdGVUZXh0Q29udGVudEFuZFN0eWxlcyIpO28oeDksInJlcGxhY2VJY29uU3Vic3RyaW5nIik7U2k9byhhc3luYyh0LGU9IiIse3N0eWxlOnI9IiIsaXNUaXRsZTpuPSExLGNsYXNzZXM6aT0iIix1c2VIdG1sTGFiZWxzOmE9ITAsaXNOb2RlOnM9ITAsd2lkdGg6bD0yMDAsYWRkU3ZnQmFja2dyb3VuZDp1PSExfT17fSxoKT0+e2lmKFkuZGVidWcoIlhZWiBjcmVhdGVUZXh0IixlLHIsbixpLGEscywiYWRkU3ZnQmFja2dyb3VuZDogIix1KSxhKXtsZXQgZj11aihlLGgpLGQ9eDkoQ2EoZikpLHA9ZS5yZXBsYWNlKC9cXFxcL2csIlxcIiksbT17aXNOb2RlOnMsbGFiZWw6cGkoZSk/cDpkLGxhYmVsU3R5bGU6ci5yZXBsYWNlKCJmaWxsOiIsImNvbG9yOiIpfTtyZXR1cm4gYXdhaXQgWTdlKHQsbSxsLGksdSl9ZWxzZXtsZXQgZj1lLnJlcGxhY2UoLzxiclxzKlwvPz4vZywiPGJyLz4iKSxkPWNqKGYucmVwbGFjZSgiPGJyPiIsIjxici8+IiksaCkscD1YN2UobCx0LGQsZT91OiExKTtpZihzKXsvc3Ryb2tlOi8uZXhlYyhyKSYmKHI9ci5yZXBsYWNlKCJzdHJva2U6IiwibGluZUNvbG9yOiIpKTtsZXQgbT1yLnJlcGxhY2UoL3N0cm9rZTpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL3N0cm9rZS13aWR0aDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2ZpbGw6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9jb2xvcjovZywiZmlsbDoiKTt6ZShwKS5hdHRyKCJzdHlsZSIsbSl9ZWxzZXtsZXQgbT1yLnJlcGxhY2UoL3N0cm9rZTpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL3N0cm9rZS13aWR0aDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2ZpbGw6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9iYWNrZ3JvdW5kOi9nLCJmaWxsOiIpO3plKHApLnNlbGVjdCgicmVjdCIpLmF0dHIoInN0eWxlIixtLnJlcGxhY2UoL2JhY2tncm91bmQ6L2csImZpbGw6IikpO2xldCBnPXIucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywiIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywiIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2NvbG9yOi9nLCJmaWxsOiIpO3plKHApLnNlbGVjdCgidGV4dCIpLmF0dHIoInN0eWxlIixnKX1yZXR1cm4gcH19LCJjcmVhdGVUZXh0Iil9KTtmdW5jdGlvbiBXdCh0KXtsZXQgZT10Lm1hcCgocixuKT0+YCR7bj09PTA/Ik0iOiJMIn0ke3IueH0sJHtyLnl9YCk7cmV0dXJuIGUucHVzaCgiWiIpLGUuam9pbigiICIpfWZ1bmN0aW9uIHpvKHQsZSxyLG4saSxhKXtsZXQgcz1bXSx1PXItdCxoPW4tZSxmPXUvYSxkPTIqTWF0aC5QSS9mLHA9ZStoLzI7Zm9yKGxldCBtPTA7bTw9NTA7bSsrKXtsZXQgZz1tLzUwLHk9dCtnKnUsdj1wK2kqTWF0aC5zaW4oZCooeS10KSk7cy5wdXNoKHt4OnkseTp2fSl9cmV0dXJuIHN9ZnVuY3Rpb24gazUodCxlLHIsbixpLGEpe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDotbSx5Oi1nfSl9cmV0dXJuIHN9dmFyIG90LFQ1LFFlLGx0LEZ0PU0oKCk9PnsidXNlIHN0cmljdCI7RGwoKTtWdCgpO21yKCk7aHMoKTtmcigpO2hyKCk7b3Q9byhhc3luYyh0LGUscik9PntsZXQgbixpPWUudXNlSHRtbExhYmVsc3x8eHIoZGUoKT8uaHRtbExhYmVscyk7cj9uPXI6bj0ibm9kZSBkZWZhdWx0IjtsZXQgYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixuKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsRm4oZS5sYWJlbFN0eWxlKSksbDtlLmxhYmVsPT09dm9pZCAwP2w9IiI6bD10eXBlb2YgZS5sYWJlbD09InN0cmluZyI/ZS5sYWJlbDplLmxhYmVsWzBdO2xldCB1PWF3YWl0IFNpKHMsVHIoQ2EobCksZGUoKSkse3VzZUh0bWxMYWJlbHM6aSx3aWR0aDplLndpZHRofHxkZSgpLmZsb3djaGFydD8ud3JhcHBpbmdXaWR0aCxjc3NDbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIixzdHlsZTplLmxhYmVsU3R5bGUsYWRkU3ZnQmFja2dyb3VuZDohIWUuaWNvbnx8ISFlLmltZ30pLGg9dS5nZXRCQm94KCksZj0oZT8ucGFkZGluZz8/MCkvMjtpZihpKXtsZXQgZD11LmNoaWxkcmVuWzBdLHA9emUodSksbT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbWciKTtpZihtKXtsZXQgZz1sLnJlcGxhY2UoLzxpbWdbXj5dKj4vZywiIikudHJpbSgpPT09IiI7YXdhaXQgUHJvbWlzZS5hbGwoWy4uLm1dLm1hcCh5PT5uZXcgUHJvbWlzZSh2PT57ZnVuY3Rpb24geCgpe2lmKHkuc3R5bGUuZGlzcGxheT0iZmxleCIseS5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGcpe2xldCBiPWRlKCkuZm9udFNpemU/ZGUoKS5mb250U2l6ZTp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5mb250U2l6ZSx3PTUsW189dXIuZm9udFNpemVdPUZvKGIpLFQ9Xyp3KyJweCI7eS5zdHlsZS5taW5XaWR0aD1ULHkuc3R5bGUubWF4V2lkdGg9VH1lbHNlIHkuc3R5bGUud2lkdGg9IjEwMCUiO3YoeSl9byh4LCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e3kuY29tcGxldGUmJngoKX0pLHkuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCl9KSkpfWg9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwLmF0dHIoIndpZHRoIixoLndpZHRoKSxwLmF0dHIoImhlaWdodCIsaC5oZWlnaHQpfXJldHVybiBpP3MuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWgud2lkdGgvMisiLCAiKy1oLmhlaWdodC8yKyIpIik6cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistaC5oZWlnaHQvMisiKSIpLGUuY2VudGVyTGFiZWwmJnMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWgud2lkdGgvMisiLCAiKy1oLmhlaWdodC8yKyIpIikscy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YSxiYm94OmgsaGFsZlBhZGRpbmc6ZixsYWJlbDpzfX0sImxhYmVsSGVscGVyIiksVDU9byhhc3luYyh0LGUscik9PntsZXQgbj1yLnVzZUh0bWxMYWJlbHN8fHhyKGRlKCk/LmZsb3djaGFydD8uaHRtbExhYmVscyksaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsci5sYWJlbFN0eWxlfHwiIiksYT1hd2FpdCBTaShpLFRyKENhKGUpLGRlKCkpLHt1c2VIdG1sTGFiZWxzOm4sd2lkdGg6ci53aWR0aHx8ZGUoKT8uZmxvd2NoYXJ0Py53cmFwcGluZ1dpZHRoLHN0eWxlOnIubGFiZWxTdHlsZSxhZGRTdmdCYWNrZ3JvdW5kOiEhci5pY29ufHwhIXIuaW1nfSkscz1hLmdldEJCb3goKSxsPXIucGFkZGluZy8yO2lmKHhyKGRlKCk/LmZsb3djaGFydD8uaHRtbExhYmVscykpe2xldCB1PWEuY2hpbGRyZW5bMF0saD16ZShhKTtzPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaC5hdHRyKCJ3aWR0aCIscy53aWR0aCksaC5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1yZXR1cm4gbj9pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1zLndpZHRoLzIrIiwgIistcy5oZWlnaHQvMisiKSIpOmkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrLXMuaGVpZ2h0LzIrIikiKSxyLmNlbnRlckxhYmVsJiZpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1zLndpZHRoLzIrIiwgIistcy5oZWlnaHQvMisiKSIpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikse3NoYXBlU3ZnOnQsYmJveDpzLGhhbGZQYWRkaW5nOmwsbGFiZWw6aX19LCJpbnNlcnRMYWJlbCIpLFFlPW8oKHQsZSk9PntsZXQgcj1lLm5vZGUoKS5nZXRCQm94KCk7dC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0fSwidXBkYXRlTm9kZUJvdW5kcyIpLGx0PW8oKHQsZSk9Pih0Lmxvb2s9PT0iaGFuZERyYXduIj8icm91Z2gtbm9kZSI6Im5vZGUiKSsiICIrdC5jc3NDbGFzc2VzKyIgIisoZXx8IiIpLCJnZXROb2RlQ2xhc3NlcyIpO28oV3QsImNyZWF0ZVBhdGhGcm9tUG9pbnRzIik7byh6bywiZ2VuZXJhdGVGdWxsU2luZVdhdmVQb2ludHMiKTtvKGs1LCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpfSk7ZnVuY3Rpb24gajdlKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfXZhciB5aix2aj1NKCgpPT57InVzZSBzdHJpY3QiO28oajdlLCJpbnRlcnNlY3ROb2RlIik7eWo9ajdlfSk7ZnVuY3Rpb24gSzdlKHQsZSxyLG4pe3ZhciBpPXQueCxhPXQueSxzPWktbi54LGw9YS1uLnksdT1NYXRoLnNxcnQoZSplKmwqbCtyKnIqcypzKSxoPU1hdGguYWJzKGUqcipzL3UpO24ueDxpJiYoaD0taCk7dmFyIGY9TWF0aC5hYnMoZSpyKmwvdSk7cmV0dXJuIG4ueTxhJiYoZj0tZikse3g6aStoLHk6YStmfX12YXIgRTUsYjk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEs3ZSwiaW50ZXJzZWN0RWxsaXBzZSIpO0U1PUs3ZX0pO2Z1bmN0aW9uIFE3ZSh0LGUscil7cmV0dXJuIEU1KHQsZSxlLHIpfXZhciB4aixiaj1NKCgpPT57InVzZSBzdHJpY3QiO2I5KCk7byhRN2UsImludGVyc2VjdENpcmNsZSIpO3hqPVE3ZX0pO2Z1bmN0aW9uIFo3ZSh0LGUscixuKXt2YXIgaSxhLHMsbCx1LGgsZixkLHAsbSxnLHksdix4LGI7aWYoaT1lLnktdC55LHM9dC54LWUueCx1PWUueCp0LnktdC54KmUueSxwPWkqci54K3Mqci55K3UsbT1pKm4ueCtzKm4ueSt1LCEocCE9PTAmJm0hPT0wJiZ3aihwLG0pKSYmKGE9bi55LXIueSxsPXIueC1uLngsaD1uLngqci55LXIueCpuLnksZj1hKnQueCtsKnQueStoLGQ9YSplLngrbCplLnkraCwhKGYhPT0wJiZkIT09MCYmd2ooZixkKSkmJihnPWkqbC1hKnMsZyE9PTApKSlyZXR1cm4geT1NYXRoLmFicyhnLzIpLHY9cypoLWwqdSx4PXY8MD8odi15KS9nOih2K3kpL2csdj1hKnUtaSpoLGI9djwwPyh2LXkpL2c6KHYreSkvZyx7eCx5OmJ9fWZ1bmN0aW9uIHdqKHQsZSl7cmV0dXJuIHQqZT4wfXZhciBUaixraj1NKCgpPT57InVzZSBzdHJpY3QiO28oWjdlLCJpbnRlcnNlY3RMaW5lIik7byh3aiwic2FtZVNpZ24iKTtUaj1aN2V9KTtmdW5jdGlvbiBKN2UodCxlLHIpe2xldCBuPXQueCxpPXQueSxhPVtdLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBlLmZvckVhY2g9PSJmdW5jdGlvbiI/ZS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3M9TWF0aC5taW4ocyxmLngpLGw9TWF0aC5taW4obCxmLnkpfSk6KHM9TWF0aC5taW4ocyxlLngpLGw9TWF0aC5taW4obCxlLnkpKTtsZXQgdT1uLXQud2lkdGgvMi1zLGg9aS10LmhlaWdodC8yLWw7Zm9yKGxldCBmPTA7ZjxlLmxlbmd0aDtmKyspe2xldCBkPWVbZl0scD1lW2Y8ZS5sZW5ndGgtMT9mKzE6MF0sbT1Uaih0LHIse3g6dStkLngseTpoK2QueX0se3g6dStwLngseTpoK3AueX0pO20mJmEucHVzaChtKX1yZXR1cm4gYS5sZW5ndGg/KGEubGVuZ3RoPjEmJmEuc29ydChmdW5jdGlvbihmLGQpe2xldCBwPWYueC1yLngsbT1mLnktci55LGc9TWF0aC5zcXJ0KHAqcCttKm0pLHk9ZC54LXIueCx2PWQueS1yLnkseD1NYXRoLnNxcnQoeSp5K3Yqdik7cmV0dXJuIGc8eD8tMTpnPT09eD8wOjF9KSxhWzBdKTp0fXZhciBFaixTaj1NKCgpPT57InVzZSBzdHJpY3QiO2tqKCk7byhKN2UsImludGVyc2VjdFBvbHlnb24iKTtFaj1KN2V9KTt2YXIgZUFlLE9oLHc5PU0oKCk9PnsidXNlIHN0cmljdCI7ZUFlPW8oKHQsZSk9Pnt2YXIgcj10Lngsbj10LnksaT1lLngtcixhPWUueS1uLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMix1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1hPT09MD8wOmwqaS9hLGg9bCk6KGk8MCYmKHM9LXMpLHU9cyxoPWk9PT0wPzA6cyphL2kpLHt4OnIrdSx5Om4raH19LCJpbnRlcnNlY3RSZWN0IiksT2g9ZUFlfSk7dmFyIHFlLHF0PU0oKCk9PnsidXNlIHN0cmljdCI7dmooKTtiaigpO2I5KCk7U2ooKTt3OSgpO3FlPXtub2RlOnlqLGNpcmNsZTp4aixlbGxpcHNlOkU1LHBvbHlnb246RWoscmVjdDpPaH19KTt2YXIgQ2osbWMsdEFlLGV0LFplLFh0PU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtDaj1vKHQ9PntsZXR7aGFuZERyYXduU2VlZDplfT1kZSgpO3JldHVybntmaWxsOnQsaGFjaHVyZUFuZ2xlOjEyMCxoYWNodXJlR2FwOjQsZmlsbFdlaWdodDoyLHJvdWdobmVzczouNyxzdHJva2U6dCxzZWVkOmV9fSwic29saWRTdGF0ZUZpbGwiKSxtYz1vKHQ9PntsZXQgZT10QWUoWy4uLnQuY3NzQ29tcGlsZWRTdHlsZXN8fFtdLC4uLnQuY3NzU3R5bGVzfHxbXV0pO3JldHVybntzdHlsZXNNYXA6ZSxzdHlsZXNBcnJheTpbLi4uZV19fSwiY29tcGlsZVN0eWxlcyIpLHRBZT1vKHQ9PntsZXQgZT1uZXcgTWFwO3JldHVybiB0LmZvckVhY2gocj0+e2xldFtuLGldPXIuc3BsaXQoIjoiKTtlLnNldChuLnRyaW0oKSxpPy50cmltKCkpfSksZX0sInN0eWxlczJNYXAiKSxldD1vKHQ9PntsZXR7c3R5bGVzQXJyYXk6ZX09bWModCkscj1bXSxuPVtdLGk9W10sYT1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgbD1zWzBdO2w9PT0iY29sb3IifHxsPT09ImZvbnQtc2l6ZSJ8fGw9PT0iZm9udC1mYW1pbHkifHxsPT09ImZvbnQtd2VpZ2h0Inx8bD09PSJmb250LXN0eWxlInx8bD09PSJ0ZXh0LWRlY29yYXRpb24ifHxsPT09InRleHQtYWxpZ24ifHxsPT09InRleHQtdHJhbnNmb3JtInx8bD09PSJsaW5lLWhlaWdodCJ8fGw9PT0ibGV0dGVyLXNwYWNpbmcifHxsPT09IndvcmQtc3BhY2luZyJ8fGw9PT0idGV4dC1zaGFkb3cifHxsPT09InRleHQtb3ZlcmZsb3cifHxsPT09IndoaXRlLXNwYWNlInx8bD09PSJ3b3JkLXdyYXAifHxsPT09IndvcmQtYnJlYWsifHxsPT09Im92ZXJmbG93LXdyYXAifHxsPT09Imh5cGhlbnMiP3IucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKToobi5wdXNoKHMuam9pbigiOiIpKyIgIWltcG9ydGFudCIpLGwuaW5jbHVkZXMoInN0cm9rZSIpJiZpLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50IiksbD09PSJmaWxsIiYmYS5wdXNoKHMuam9pbigiOiIpKyIgIWltcG9ydGFudCIpKX0pLHtsYWJlbFN0eWxlczpyLmpvaW4oIjsiKSxub2RlU3R5bGVzOm4uam9pbigiOyIpLHN0eWxlc0FycmF5OmUsYm9yZGVyU3R5bGVzOmksYmFja2dyb3VuZFN0eWxlczphfX0sInN0eWxlczJTdHJpbmciKSxaZT1vKCh0LGUpPT57bGV0e3RoZW1lVmFyaWFibGVzOnIsaGFuZERyYXduU2VlZDpufT1kZSgpLHtub2RlQm9yZGVyOmksbWFpbkJrZzphfT1yLHtzdHlsZXNNYXA6c309bWModCk7cmV0dXJuIE9iamVjdC5hc3NpZ24oe3JvdWdobmVzczouNyxmaWxsOnMuZ2V0KCJmaWxsIil8fGEsZmlsbFN0eWxlOiJoYWNodXJlIixmaWxsV2VpZ2h0OjQsaGFjaHVyZUdhcDo1LjIsc3Ryb2tlOnMuZ2V0KCJzdHJva2UiKXx8aSxzZWVkOm4sc3Ryb2tlV2lkdGg6cy5nZXQoInN0cm9rZS13aWR0aCIpPy5yZXBsYWNlKCJweCIsIiIpfHwxLjMsZmlsbExpbmVEYXNoOlswLDBdfSxlKX0sInVzZXJOb2RlT3ZlcnJpZGVzIil9KTtmdW5jdGlvbiBUOSh0LGUscil7aWYodCYmdC5sZW5ndGgpe2xldFtuLGldPWUsYT1NYXRoLlBJLzE4MCpyLHM9TWF0aC5jb3MoYSksbD1NYXRoLnNpbihhKTtmb3IobGV0IHUgb2YgdCl7bGV0W2gsZl09dTt1WzBdPShoLW4pKnMtKGYtaSkqbCtuLHVbMV09KGgtbikqbCsoZi1pKSpzK2l9fX1mdW5jdGlvbiByQWUodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdfWZ1bmN0aW9uIG5BZSh0LGUscixuPTEpe2xldCBpPXIsYT1NYXRoLm1heChlLC4xKSxzPXRbMF0mJnRbMF1bMF0mJnR5cGVvZiB0WzBdWzBdPT0ibnVtYmVyIj9bdF06dCxsPVswLDBdO2lmKGkpZm9yKGxldCBoIG9mIHMpVDkoaCxsLGkpO2xldCB1PWZ1bmN0aW9uKGgsZixkKXtsZXQgcD1bXTtmb3IobGV0IGIgb2YgaCl7bGV0IHc9Wy4uLmJdO3JBZSh3WzBdLHdbdy5sZW5ndGgtMV0pfHx3LnB1c2goW3dbMF1bMF0sd1swXVsxXV0pLHcubGVuZ3RoPjImJnAucHVzaCh3KX1sZXQgbT1bXTtmPU1hdGgubWF4KGYsLjEpO2xldCBnPVtdO2ZvcihsZXQgYiBvZiBwKWZvcihsZXQgdz0wO3c8Yi5sZW5ndGgtMTt3Kyspe2xldCBfPWJbd10sVD1iW3crMV07aWYoX1sxXSE9PVRbMV0pe2xldCBFPU1hdGgubWluKF9bMV0sVFsxXSk7Zy5wdXNoKHt5bWluOkUseW1heDpNYXRoLm1heChfWzFdLFRbMV0pLHg6RT09PV9bMV0/X1swXTpUWzBdLGlzbG9wZTooVFswXS1fWzBdKS8oVFsxXS1fWzFdKX0pfX1pZihnLnNvcnQoKGIsdyk9PmIueW1pbjx3LnltaW4/LTE6Yi55bWluPncueW1pbj8xOmIueDx3Lng/LTE6Yi54PncueD8xOmIueW1heD09PXcueW1heD8wOihiLnltYXgtdy55bWF4KS9NYXRoLmFicyhiLnltYXgtdy55bWF4KSksIWcubGVuZ3RoKXJldHVybiBtO2xldCB5PVtdLHY9Z1swXS55bWluLHg9MDtmb3IoO3kubGVuZ3RofHxnLmxlbmd0aDspe2lmKGcubGVuZ3RoKXtsZXQgYj0tMTtmb3IobGV0IHc9MDt3PGcubGVuZ3RoJiYhKGdbd10ueW1pbj52KTt3KyspYj13O2cuc3BsaWNlKDAsYisxKS5mb3JFYWNoKHc9Pnt5LnB1c2goe3M6dixlZGdlOnd9KX0pfWlmKHk9eS5maWx0ZXIoYj0+IShiLmVkZ2UueW1heDw9dikpLHkuc29ydCgoYix3KT0+Yi5lZGdlLng9PT13LmVkZ2UueD8wOihiLmVkZ2UueC13LmVkZ2UueCkvTWF0aC5hYnMoYi5lZGdlLngtdy5lZGdlLngpKSwoZCE9PTF8fHglZj09MCkmJnkubGVuZ3RoPjEpZm9yKGxldCBiPTA7Yjx5Lmxlbmd0aDtiKz0yKXtsZXQgdz1iKzE7aWYodz49eS5sZW5ndGgpYnJlYWs7bGV0IF89eVtiXS5lZGdlLFQ9eVt3XS5lZGdlO20ucHVzaChbW01hdGgucm91bmQoXy54KSx2XSxbTWF0aC5yb3VuZChULngpLHZdXSl9dis9ZCx5LmZvckVhY2goYj0+e2IuZWRnZS54PWIuZWRnZS54K2QqYi5lZGdlLmlzbG9wZX0pLHgrK31yZXR1cm4gbX0ocyxhLG4pO2lmKGkpe2ZvcihsZXQgaCBvZiBzKVQ5KGgsbCwtaSk7KGZ1bmN0aW9uKGgsZixkKXtsZXQgcD1bXTtoLmZvckVhY2gobT0+cC5wdXNoKC4uLm0pKSxUOShwLGYsZCl9KSh1LGwsLWkpfXJldHVybiB1fWZ1bmN0aW9uIHl2KHQsZSl7dmFyIHI7bGV0IG49ZS5oYWNodXJlQW5nbGUrOTAsaT1lLmhhY2h1cmVHYXA7aTwwJiYoaT00KmUuc3Ryb2tlV2lkdGgpLGk9TWF0aC5yb3VuZChNYXRoLm1heChpLC4xKSk7bGV0IGE9MTtyZXR1cm4gZS5yb3VnaG5lc3M+PTEmJigoKHI9ZS5yYW5kb21pemVyKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIubmV4dCgpKXx8TWF0aC5yYW5kb20oKSk+LjcmJihhPWkpLG5BZSh0LGksbixhfHwxKX1mdW5jdGlvbiBNNSh0KXtsZXQgZT10WzBdLHI9dFsxXTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGVbMF0tclswXSwyKStNYXRoLnBvdyhlWzFdLXJbMV0sMikpfWZ1bmN0aW9uIEU5KHQsZSl7cmV0dXJuIHQudHlwZT09PWV9ZnVuY3Rpb24gRjkodCl7bGV0IGU9W10scj1mdW5jdGlvbihzKXtsZXQgbD1uZXcgQXJyYXk7Zm9yKDtzIT09IiI7KWlmKHMubWF0Y2goL14oWyBcdFxyXG4sXSspLykpcz1zLnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKTtlbHNlIGlmKHMubWF0Y2goL14oW2FBY0NoSGxMbU1xUXNTdFR2VnpaXSkvKSlsW2wubGVuZ3RoXT17dHlwZTppQWUsdGV4dDpSZWdFeHAuJDF9LHM9cy5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCk7ZWxzZXtpZighcy5tYXRjaCgvXigoWy0rXT9bMC05XSsoXC5bMC05XSopP3xbLStdP1wuWzAtOV0rKShbZUVdWy0rXT9bMC05XSspPykvKSlyZXR1cm5bXTtsW2wubGVuZ3RoXT17dHlwZTprOSx0ZXh0OmAke3BhcnNlRmxvYXQoUmVnRXhwLiQxKX1gfSxzPXMuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpfXJldHVybiBsW2wubGVuZ3RoXT17dHlwZTpBaix0ZXh0OiIifSxsfSh0KSxuPSJCT0QiLGk9MCxhPXJbaV07Zm9yKDshRTkoYSxBaik7KXtsZXQgcz0wLGw9W107aWYobj09PSJCT0QiKXtpZihhLnRleHQhPT0iTSImJmEudGV4dCE9PSJtIilyZXR1cm4gRjkoIk0wLDAiK3QpO2krKyxzPVM1W2EudGV4dF0sbj1hLnRleHR9ZWxzZSBFOShhLGs5KT9zPVM1W25dOihpKysscz1TNVthLnRleHRdLG49YS50ZXh0KTtpZighKGkrczxyLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJQYXRoIGRhdGEgZW5kZWQgc2hvcnQiKTtmb3IobGV0IHU9aTt1PGkrczt1Kyspe2xldCBoPXJbdV07aWYoIUU5KGgsazkpKXRocm93IG5ldyBFcnJvcigiUGFyYW0gbm90IGEgbnVtYmVyOiAiK24rIiwiK2gudGV4dCk7bFtsLmxlbmd0aF09K2gudGV4dH1pZih0eXBlb2YgUzVbbl0hPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcigiQmFkIHNlZ21lbnQ6ICIrbik7e2xldCB1PXtrZXk6bixkYXRhOmx9O2UucHVzaCh1KSxpKz1zLGE9cltpXSxuPT09Ik0iJiYobj0iTCIpLG49PT0ibSImJihuPSJsIil9fXJldHVybiBlfWZ1bmN0aW9uIE9qKHQpe2xldCBlPTAscj0wLG49MCxpPTAsYT1bXTtmb3IobGV0e2tleTpzLGRhdGE6bH1vZiB0KXN3aXRjaChzKXtjYXNlIk0iOmEucHVzaCh7a2V5OiJNIixkYXRhOlsuLi5sXX0pLFtlLHJdPWwsW24saV09bDticmVhaztjYXNlIm0iOmUrPWxbMF0scis9bFsxXSxhLnB1c2goe2tleToiTSIsZGF0YTpbZSxyXX0pLG49ZSxpPXI7YnJlYWs7Y2FzZSJMIjphLnB1c2goe2tleToiTCIsZGF0YTpbLi4ubF19KSxbZSxyXT1sO2JyZWFrO2Nhc2UibCI6ZSs9bFswXSxyKz1sWzFdLGEucHVzaCh7a2V5OiJMIixkYXRhOltlLHJdfSk7YnJlYWs7Y2FzZSJDIjphLnB1c2goe2tleToiQyIsZGF0YTpbLi4ubF19KSxlPWxbNF0scj1sWzVdO2JyZWFrO2Nhc2UiYyI6e2xldCB1PWwubWFwKChoLGYpPT5mJTI/aCtyOmgrZSk7YS5wdXNoKHtrZXk6IkMiLGRhdGE6dX0pLGU9dVs0XSxyPXVbNV07YnJlYWt9Y2FzZSJRIjphLnB1c2goe2tleToiUSIsZGF0YTpbLi4ubF19KSxlPWxbMl0scj1sWzNdO2JyZWFrO2Nhc2UicSI6e2xldCB1PWwubWFwKChoLGYpPT5mJTI/aCtyOmgrZSk7YS5wdXNoKHtrZXk6IlEiLGRhdGE6dX0pLGU9dVsyXSxyPXVbM107YnJlYWt9Y2FzZSJBIjphLnB1c2goe2tleToiQSIsZGF0YTpbLi4ubF19KSxlPWxbNV0scj1sWzZdO2JyZWFrO2Nhc2UiYSI6ZSs9bFs1XSxyKz1sWzZdLGEucHVzaCh7a2V5OiJBIixkYXRhOltsWzBdLGxbMV0sbFsyXSxsWzNdLGxbNF0sZSxyXX0pO2JyZWFrO2Nhc2UiSCI6YS5wdXNoKHtrZXk6IkgiLGRhdGE6Wy4uLmxdfSksZT1sWzBdO2JyZWFrO2Nhc2UiaCI6ZSs9bFswXSxhLnB1c2goe2tleToiSCIsZGF0YTpbZV19KTticmVhaztjYXNlIlYiOmEucHVzaCh7a2V5OiJWIixkYXRhOlsuLi5sXX0pLHI9bFswXTticmVhaztjYXNlInYiOnIrPWxbMF0sYS5wdXNoKHtrZXk6IlYiLGRhdGE6W3JdfSk7YnJlYWs7Y2FzZSJTIjphLnB1c2goe2tleToiUyIsZGF0YTpbLi4ubF19KSxlPWxbMl0scj1sWzNdO2JyZWFrO2Nhc2UicyI6e2xldCB1PWwubWFwKChoLGYpPT5mJTI/aCtyOmgrZSk7YS5wdXNoKHtrZXk6IlMiLGRhdGE6dX0pLGU9dVsyXSxyPXVbM107YnJlYWt9Y2FzZSJUIjphLnB1c2goe2tleToiVCIsZGF0YTpbLi4ubF19KSxlPWxbMF0scj1sWzFdO2JyZWFrO2Nhc2UidCI6ZSs9bFswXSxyKz1sWzFdLGEucHVzaCh7a2V5OiJUIixkYXRhOltlLHJdfSk7YnJlYWs7Y2FzZSJaIjpjYXNlInoiOmEucHVzaCh7a2V5OiJaIixkYXRhOltdfSksZT1uLHI9aX1yZXR1cm4gYX1mdW5jdGlvbiBQaih0KXtsZXQgZT1bXSxyPSIiLG49MCxpPTAsYT0wLHM9MCxsPTAsdT0wO2ZvcihsZXR7a2V5OmgsZGF0YTpmfW9mIHQpe3N3aXRjaChoKXtjYXNlIk0iOmUucHVzaCh7a2V5OiJNIixkYXRhOlsuLi5mXX0pLFtuLGldPWYsW2Esc109ZjticmVhaztjYXNlIkMiOmUucHVzaCh7a2V5OiJDIixkYXRhOlsuLi5mXX0pLG49Zls0XSxpPWZbNV0sbD1mWzJdLHU9ZlszXTticmVhaztjYXNlIkwiOmUucHVzaCh7a2V5OiJMIixkYXRhOlsuLi5mXX0pLFtuLGldPWY7YnJlYWs7Y2FzZSJIIjpuPWZbMF0sZS5wdXNoKHtrZXk6IkwiLGRhdGE6W24saV19KTticmVhaztjYXNlIlYiOmk9ZlswXSxlLnB1c2goe2tleToiTCIsZGF0YTpbbixpXX0pO2JyZWFrO2Nhc2UiUyI6e2xldCBkPTAscD0wO3I9PT0iQyJ8fHI9PT0iUyI/KGQ9bisobi1sKSxwPWkrKGktdSkpOihkPW4scD1pKSxlLnB1c2goe2tleToiQyIsZGF0YTpbZCxwLC4uLmZdfSksbD1mWzBdLHU9ZlsxXSxuPWZbMl0saT1mWzNdO2JyZWFrfWNhc2UiVCI6e2xldFtkLHBdPWYsbT0wLGc9MDtyPT09IlEifHxyPT09IlQiPyhtPW4rKG4tbCksZz1pKyhpLXUpKToobT1uLGc9aSk7bGV0IHk9bisyKihtLW4pLzMsdj1pKzIqKGctaSkvMyx4PWQrMioobS1kKS8zLGI9cCsyKihnLXApLzM7ZS5wdXNoKHtrZXk6IkMiLGRhdGE6W3ksdix4LGIsZCxwXX0pLGw9bSx1PWcsbj1kLGk9cDticmVha31jYXNlIlEiOntsZXRbZCxwLG0sZ109Zix5PW4rMiooZC1uKS8zLHY9aSsyKihwLWkpLzMseD1tKzIqKGQtbSkvMyxiPWcrMioocC1nKS8zO2UucHVzaCh7a2V5OiJDIixkYXRhOlt5LHYseCxiLG0sZ119KSxsPWQsdT1wLG49bSxpPWc7YnJlYWt9Y2FzZSJBIjp7bGV0IGQ9TWF0aC5hYnMoZlswXSkscD1NYXRoLmFicyhmWzFdKSxtPWZbMl0sZz1mWzNdLHk9Zls0XSx2PWZbNV0seD1mWzZdO2Q9PT0wfHxwPT09MD8oZS5wdXNoKHtrZXk6IkMiLGRhdGE6W24saSx2LHgsdix4XX0pLG49dixpPXgpOihuIT09dnx8aSE9PXgpJiYoQmoobixpLHYseCxkLHAsbSxnLHkpLmZvckVhY2goZnVuY3Rpb24oYil7ZS5wdXNoKHtrZXk6IkMiLGRhdGE6Yn0pfSksbj12LGk9eCk7YnJlYWt9Y2FzZSJaIjplLnB1c2goe2tleToiWiIsZGF0YTpbXX0pLG49YSxpPXN9cj1ofXJldHVybiBlfWZ1bmN0aW9uIHB2KHQsZSxyKXtyZXR1cm5bdCpNYXRoLmNvcyhyKS1lKk1hdGguc2luKHIpLHQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKV19ZnVuY3Rpb24gQmoodCxlLHIsbixpLGEscyxsLHUsaCl7bGV0IGY9KGQ9cyxNYXRoLlBJKmQvMTgwKTt2YXIgZDtsZXQgcD1bXSxtPTAsZz0wLHk9MCx2PTA7aWYoaClbbSxnLHksdl09aDtlbHNle1t0LGVdPXB2KHQsZSwtZiksW3Isbl09cHYocixuLC1mKTtsZXQgUj0odC1yKS8yLFM9KGUtbikvMixPPVIqUi8oaSppKStTKlMvKGEqYSk7Tz4xJiYoTz1NYXRoLnNxcnQoTyksaSo9TyxhKj1PKTtsZXQgTj1pKmksUD1hKmEsRj1OKlAtTipTKlMtUCpSKlIsQj1OKlMqUytQKlIqUiwkPShsPT09dT8tMToxKSpNYXRoLnNxcnQoTWF0aC5hYnMoRi9CKSk7eT0kKmkqUy9hKyh0K3IpLzIsdj0kKi1hKlIvaSsoZStuKS8yLG09TWF0aC5hc2luKHBhcnNlRmxvYXQoKChlLXYpL2EpLnRvRml4ZWQoOSkpKSxnPU1hdGguYXNpbihwYXJzZUZsb2F0KCgobi12KS9hKS50b0ZpeGVkKDkpKSksdDx5JiYobT1NYXRoLlBJLW0pLHI8eSYmKGc9TWF0aC5QSS1nKSxtPDAmJihtPTIqTWF0aC5QSSttKSxnPDAmJihnPTIqTWF0aC5QSStnKSx1JiZtPmcmJihtLT0yKk1hdGguUEkpLCF1JiZnPm0mJihnLT0yKk1hdGguUEkpfWxldCB4PWctbTtpZihNYXRoLmFicyh4KT4xMjAqTWF0aC5QSS8xODApe2xldCBSPWcsUz1yLE89bjtnPXUmJmc+bT9tKzEyMCpNYXRoLlBJLzE4MCoxOm0rMTIwKk1hdGguUEkvMTgwKi0xLHA9Qmoocj15K2kqTWF0aC5jb3MoZyksbj12K2EqTWF0aC5zaW4oZyksUyxPLGksYSxzLDAsdSxbZyxSLHksdl0pfXg9Zy1tO2xldCBiPU1hdGguY29zKG0pLHc9TWF0aC5zaW4obSksXz1NYXRoLmNvcyhnKSxUPU1hdGguc2luKGcpLEU9TWF0aC50YW4oeC80KSxMPTQvMyppKkUsQz00LzMqYSpFLEE9W3QsZV0sST1bdCtMKncsZS1DKmJdLEQ9W3IrTCpULG4tQypfXSxrPVtyLG5dO2lmKElbMF09MipBWzBdLUlbMF0sSVsxXT0yKkFbMV0tSVsxXSxoKXJldHVybltJLEQsa10uY29uY2F0KHApO3twPVtJLEQsa10uY29uY2F0KHApO2xldCBSPVtdO2ZvcihsZXQgUz0wO1M8cC5sZW5ndGg7Uys9Myl7bGV0IE89cHYocFtTXVswXSxwW1NdWzFdLGYpLE49cHYocFtTKzFdWzBdLHBbUysxXVsxXSxmKSxQPXB2KHBbUysyXVswXSxwW1MrMl1bMV0sZik7Ui5wdXNoKFtPWzBdLE9bMV0sTlswXSxOWzFdLFBbMF0sUFsxXV0pfXJldHVybiBSfX1mdW5jdGlvbiBGaih0LGUscixuLGkpe3JldHVybnt0eXBlOiJwYXRoIixvcHM6UGgodCxlLHIsbixpKX19ZnVuY3Rpb24gXzUodCxlLHIpe2xldCBuPSh0fHxbXSkubGVuZ3RoO2lmKG4+Mil7bGV0IGk9W107Zm9yKGxldCBhPTA7YTxuLTE7YSsrKWkucHVzaCguLi5QaCh0W2FdWzBdLHRbYV1bMV0sdFthKzFdWzBdLHRbYSsxXVsxXSxyKSk7cmV0dXJuIGUmJmkucHVzaCguLi5QaCh0W24tMV1bMF0sdFtuLTFdWzFdLHRbMF1bMF0sdFswXVsxXSxyKSkse3R5cGU6InBhdGgiLG9wczppfX1yZXR1cm4gbj09PTI/RmoodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSxyKTp7dHlwZToicGF0aCIsb3BzOltdfX1mdW5jdGlvbiBzQWUodCxlLHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSxzKXtyZXR1cm4gXzUoYSwhMCxzKX0oW1t0LGVdLFt0K3IsZV0sW3QrcixlK25dLFt0LGUrbl1dLGkpfWZ1bmN0aW9uIF9qKHQsZSl7aWYodC5sZW5ndGgpe2xldCByPXR5cGVvZiB0WzBdWzBdPT0ibnVtYmVyIj9bdF06dCxuPUM1KHJbMF0sMSooMSsuMiplLnJvdWdobmVzcyksZSksaT1lLmRpc2FibGVNdWx0aVN0cm9rZT9bXTpDNShyWzBdLDEuNSooMSsuMjIqZS5yb3VnaG5lc3MpLE5qKGUpKTtmb3IobGV0IGE9MTthPHIubGVuZ3RoO2ErKyl7bGV0IHM9clthXTtpZihzLmxlbmd0aCl7bGV0IGw9QzUocywxKigxKy4yKmUucm91Z2huZXNzKSxlKSx1PWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOkM1KHMsMS41KigxKy4yMiplLnJvdWdobmVzcyksTmooZSkpO2ZvcihsZXQgaCBvZiBsKWgub3AhPT0ibW92ZSImJm4ucHVzaChoKTtmb3IobGV0IGggb2YgdSloLm9wIT09Im1vdmUiJiZpLnB1c2goaCl9fXJldHVybnt0eXBlOiJwYXRoIixvcHM6bi5jb25jYXQoaSl9fXJldHVybnt0eXBlOiJwYXRoIixvcHM6W119fWZ1bmN0aW9uIHpqKHQsZSxyKXtsZXQgbj1NYXRoLnNxcnQoMipNYXRoLlBJKk1hdGguc3FydCgoTWF0aC5wb3codC8yLDIpK01hdGgucG93KGUvMiwyKSkvMikpLGk9TWF0aC5jZWlsKE1hdGgubWF4KHIuY3VydmVTdGVwQ291bnQsci5jdXJ2ZVN0ZXBDb3VudC9NYXRoLnNxcnQoMjAwKSpuKSksYT0yKk1hdGguUEkvaSxzPU1hdGguYWJzKHQvMiksbD1NYXRoLmFicyhlLzIpLHU9MS1yLmN1cnZlRml0dGluZztyZXR1cm4gcys9bnIocyp1LHIpLGwrPW5yKGwqdSxyKSx7aW5jcmVtZW50OmEscng6cyxyeTpsfX1mdW5jdGlvbiBNOSh0LGUscixuKXtsZXRbaSxhXT1SaihuLmluY3JlbWVudCx0LGUsbi5yeCxuLnJ5LDEsbi5pbmNyZW1lbnQqRDUoLjEsRDUoLjQsMSxyKSxyKSxyKSxzPU41KGksbnVsbCxyKTtpZighci5kaXNhYmxlTXVsdGlTdHJva2UmJnIucm91Z2huZXNzIT09MCl7bGV0W2xdPVJqKG4uaW5jcmVtZW50LHQsZSxuLnJ4LG4ucnksMS41LDAsciksdT1ONShsLG51bGwscik7cz1zLmNvbmNhdCh1KX1yZXR1cm57ZXN0aW1hdGVkUG9pbnRzOmEsb3BzZXQ6e3R5cGU6InBhdGgiLG9wczpzfX19ZnVuY3Rpb24gTGoodCxlLHIsbixpLGEscyxsLHUpe2xldCBoPXQsZj1lLGQ9TWF0aC5hYnMoci8yKSxwPU1hdGguYWJzKG4vMik7ZCs9bnIoLjAxKmQsdSkscCs9bnIoLjAxKnAsdSk7bGV0IG09aSxnPWE7Zm9yKDttPDA7KW0rPTIqTWF0aC5QSSxnKz0yKk1hdGguUEk7Zy1tPjIqTWF0aC5QSSYmKG09MCxnPTIqTWF0aC5QSSk7bGV0IHk9MipNYXRoLlBJL3UuY3VydmVTdGVwQ291bnQsdj1NYXRoLm1pbih5LzIsKGctbSkvMikseD1Naih2LGgsZixkLHAsbSxnLDEsdSk7aWYoIXUuZGlzYWJsZU11bHRpU3Ryb2tlKXtsZXQgYj1Naih2LGgsZixkLHAsbSxnLDEuNSx1KTt4LnB1c2goLi4uYil9cmV0dXJuIHMmJihsP3gucHVzaCguLi5QaChoLGYsaCtkKk1hdGguY29zKG0pLGYrcCpNYXRoLnNpbihtKSx1KSwuLi5QaChoLGYsaCtkKk1hdGguY29zKGcpLGYrcCpNYXRoLnNpbihnKSx1KSk6eC5wdXNoKHtvcDoibGluZVRvIixkYXRhOltoLGZdfSx7b3A6ImxpbmVUbyIsZGF0YTpbaCtkKk1hdGguY29zKG0pLGYrcCpNYXRoLnNpbihtKV19KSkse3R5cGU6InBhdGgiLG9wczp4fX1mdW5jdGlvbiBEaih0LGUpe2xldCByPVBqKE9qKEY5KHQpKSksbj1bXSxpPVswLDBdLGE9WzAsMF07Zm9yKGxldHtrZXk6cyxkYXRhOmx9b2Ygcilzd2l0Y2gocyl7Y2FzZSJNIjphPVtsWzBdLGxbMV1dLGk9W2xbMF0sbFsxXV07YnJlYWs7Y2FzZSJMIjpuLnB1c2goLi4uUGgoYVswXSxhWzFdLGxbMF0sbFsxXSxlKSksYT1bbFswXSxsWzFdXTticmVhaztjYXNlIkMiOntsZXRbdSxoLGYsZCxwLG1dPWw7bi5wdXNoKC4uLm9BZSh1LGgsZixkLHAsbSxhLGUpKSxhPVtwLG1dO2JyZWFrfWNhc2UiWiI6bi5wdXNoKC4uLlBoKGFbMF0sYVsxXSxpWzBdLGlbMV0sZSkpLGE9W2lbMF0saVsxXV19cmV0dXJue3R5cGU6InBhdGgiLG9wczpufX1mdW5jdGlvbiBTOSh0LGUpe2xldCByPVtdO2ZvcihsZXQgbiBvZiB0KWlmKG4ubGVuZ3RoKXtsZXQgaT1lLm1heFJhbmRvbW5lc3NPZmZzZXR8fDAsYT1uLmxlbmd0aDtpZihhPjIpe3IucHVzaCh7b3A6Im1vdmUiLGRhdGE6W25bMF1bMF0rbnIoaSxlKSxuWzBdWzFdK25yKGksZSldfSk7Zm9yKGxldCBzPTE7czxhO3MrKylyLnB1c2goe29wOiJsaW5lVG8iLGRhdGE6W25bc11bMF0rbnIoaSxlKSxuW3NdWzFdK25yKGksZSldfSl9fXJldHVybnt0eXBlOiJmaWxsUGF0aCIsb3BzOnJ9fWZ1bmN0aW9uIGFtKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7bGV0IGk9ci5maWxsU3R5bGV8fCJoYWNodXJlIjtpZigha3NbaV0pc3dpdGNoKGkpe2Nhc2UiemlnemFnIjprc1tpXXx8KGtzW2ldPW5ldyBBOShuKSk7YnJlYWs7Y2FzZSJjcm9zcy1oYXRjaCI6a3NbaV18fChrc1tpXT1uZXcgXzkobikpO2JyZWFrO2Nhc2UiZG90cyI6a3NbaV18fChrc1tpXT1uZXcgTDkobikpO2JyZWFrO2Nhc2UiZGFzaGVkIjprc1tpXXx8KGtzW2ldPW5ldyBEOShuKSk7YnJlYWs7Y2FzZSJ6aWd6YWctbGluZSI6a3NbaV18fChrc1tpXT1uZXcgTjkobikpO2JyZWFrO2RlZmF1bHQ6aT0iaGFjaHVyZSIsa3NbaV18fChrc1tpXT1uZXcgZ3YobikpfXJldHVybiBrc1tpXX0oZSxhQWUpLmZpbGxQb2x5Z29ucyh0LGUpfWZ1bmN0aW9uIE5qKHQpe2xldCBlPU9iamVjdC5hc3NpZ24oe30sdCk7cmV0dXJuIGUucmFuZG9taXplcj12b2lkIDAsdC5zZWVkJiYoZS5zZWVkPXQuc2VlZCsxKSxlfWZ1bmN0aW9uIEdqKHQpe3JldHVybiB0LnJhbmRvbWl6ZXJ8fCh0LnJhbmRvbWl6ZXI9bmV3IFI5KHQuc2VlZHx8MCkpLHQucmFuZG9taXplci5uZXh0KCl9ZnVuY3Rpb24gRDUodCxlLHIsbj0xKXtyZXR1cm4gci5yb3VnaG5lc3MqbiooR2oocikqKGUtdCkrdCl9ZnVuY3Rpb24gbnIodCxlLHI9MSl7cmV0dXJuIEQ1KC10LHQsZSxyKX1mdW5jdGlvbiBQaCh0LGUscixuLGksYT0hMSl7bGV0IHM9YT9pLmRpc2FibGVNdWx0aVN0cm9rZUZpbGw6aS5kaXNhYmxlTXVsdGlTdHJva2UsbD1JOSh0LGUscixuLGksITAsITEpO2lmKHMpcmV0dXJuIGw7bGV0IHU9STkodCxlLHIsbixpLCEwLCEwKTtyZXR1cm4gbC5jb25jYXQodSl9ZnVuY3Rpb24gSTkodCxlLHIsbixpLGEscyl7bGV0IGw9TWF0aC5wb3codC1yLDIpK01hdGgucG93KGUtbiwyKSx1PU1hdGguc3FydChsKSxoPTE7aD11PDIwMD8xOnU+NTAwPy40Oi0uMDAxNjY2OCp1KzEuMjMzMzM0O2xldCBmPWkubWF4UmFuZG9tbmVzc09mZnNldHx8MDtmKmYqMTAwPmwmJihmPXUvMTApO2xldCBkPWYvMixwPS4yKy4yKkdqKGkpLG09aS5ib3dpbmcqaS5tYXhSYW5kb21uZXNzT2Zmc2V0KihuLWUpLzIwMCxnPWkuYm93aW5nKmkubWF4UmFuZG9tbmVzc09mZnNldCoodC1yKS8yMDA7bT1ucihtLGksaCksZz1ucihnLGksaCk7bGV0IHk9W10sdj1vKCgpPT5ucihkLGksaCksIk0iKSx4PW8oKCk9Pm5yKGYsaSxoKSwiayIpLGI9aS5wcmVzZXJ2ZVZlcnRpY2VzO3JldHVybiBhJiYocz95LnB1c2goe29wOiJtb3ZlIixkYXRhOlt0KyhiPzA6digpKSxlKyhiPzA6digpKV19KTp5LnB1c2goe29wOiJtb3ZlIixkYXRhOlt0KyhiPzA6bnIoZixpLGgpKSxlKyhiPzA6bnIoZixpLGgpKV19KSkscz95LnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbbSt0KyhyLXQpKnArdigpLGcrZSsobi1lKSpwK3YoKSxtK3QrMiooci10KSpwK3YoKSxnK2UrMioobi1lKSpwK3YoKSxyKyhiPzA6digpKSxuKyhiPzA6digpKV19KTp5LnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbbSt0KyhyLXQpKnAreCgpLGcrZSsobi1lKSpwK3goKSxtK3QrMiooci10KSpwK3goKSxnK2UrMioobi1lKSpwK3goKSxyKyhiPzA6eCgpKSxuKyhiPzA6eCgpKV19KSx5fWZ1bmN0aW9uIEM1KHQsZSxyKXtpZighdC5sZW5ndGgpcmV0dXJuW107bGV0IG49W107bi5wdXNoKFt0WzBdWzBdK25yKGUsciksdFswXVsxXStucihlLHIpXSksbi5wdXNoKFt0WzBdWzBdK25yKGUsciksdFswXVsxXStucihlLHIpXSk7Zm9yKGxldCBpPTE7aTx0Lmxlbmd0aDtpKyspbi5wdXNoKFt0W2ldWzBdK25yKGUsciksdFtpXVsxXStucihlLHIpXSksaT09PXQubGVuZ3RoLTEmJm4ucHVzaChbdFtpXVswXStucihlLHIpLHRbaV1bMV0rbnIoZSxyKV0pO3JldHVybiBONShuLG51bGwscil9ZnVuY3Rpb24gTjUodCxlLHIpe2xldCBuPXQubGVuZ3RoLGk9W107aWYobj4zKXtsZXQgYT1bXSxzPTEtci5jdXJ2ZVRpZ2h0bmVzcztpLnB1c2goe29wOiJtb3ZlIixkYXRhOlt0WzFdWzBdLHRbMV1bMV1dfSk7Zm9yKGxldCBsPTE7bCsyPG47bCsrKXtsZXQgdT10W2xdO2FbMF09W3VbMF0sdVsxXV0sYVsxXT1bdVswXSsocyp0W2wrMV1bMF0tcyp0W2wtMV1bMF0pLzYsdVsxXSsocyp0W2wrMV1bMV0tcyp0W2wtMV1bMV0pLzZdLGFbMl09W3RbbCsxXVswXSsocyp0W2xdWzBdLXMqdFtsKzJdWzBdKS82LHRbbCsxXVsxXSsocyp0W2xdWzFdLXMqdFtsKzJdWzFdKS82XSxhWzNdPVt0W2wrMV1bMF0sdFtsKzFdWzFdXSxpLnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbYVsxXVswXSxhWzFdWzFdLGFbMl1bMF0sYVsyXVsxXSxhWzNdWzBdLGFbM11bMV1dfSl9aWYoZSYmZS5sZW5ndGg9PT0yKXtsZXQgbD1yLm1heFJhbmRvbW5lc3NPZmZzZXQ7aS5wdXNoKHtvcDoibGluZVRvIixkYXRhOltlWzBdK25yKGwsciksZVsxXStucihsLHIpXX0pfX1lbHNlIG49PT0zPyhpLnB1c2goe29wOiJtb3ZlIixkYXRhOlt0WzFdWzBdLHRbMV1bMV1dfSksaS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W3RbMV1bMF0sdFsxXVsxXSx0WzJdWzBdLHRbMl1bMV0sdFsyXVswXSx0WzJdWzFdXX0pKTpuPT09MiYmaS5wdXNoKC4uLkk5KHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0sciwhMCwhMCkpO3JldHVybiBpfWZ1bmN0aW9uIFJqKHQsZSxyLG4saSxhLHMsbCl7bGV0IHU9W10saD1bXTtpZihsLnJvdWdobmVzcz09PTApe3QvPTQsaC5wdXNoKFtlK24qTWF0aC5jb3MoLXQpLHIraSpNYXRoLnNpbigtdCldKTtmb3IobGV0IGY9MDtmPD0yKk1hdGguUEk7Zis9dCl7bGV0IGQ9W2UrbipNYXRoLmNvcyhmKSxyK2kqTWF0aC5zaW4oZildO3UucHVzaChkKSxoLnB1c2goZCl9aC5wdXNoKFtlK24qTWF0aC5jb3MoMCkscitpKk1hdGguc2luKDApXSksaC5wdXNoKFtlK24qTWF0aC5jb3ModCkscitpKk1hdGguc2luKHQpXSl9ZWxzZXtsZXQgZj1uciguNSxsKS1NYXRoLlBJLzI7aC5wdXNoKFtucihhLGwpK2UrLjkqbipNYXRoLmNvcyhmLXQpLG5yKGEsbCkrcisuOSppKk1hdGguc2luKGYtdCldKTtsZXQgZD0yKk1hdGguUEkrZi0uMDE7Zm9yKGxldCBwPWY7cDxkO3ArPXQpe2xldCBtPVtucihhLGwpK2UrbipNYXRoLmNvcyhwKSxucihhLGwpK3IraSpNYXRoLnNpbihwKV07dS5wdXNoKG0pLGgucHVzaChtKX1oLnB1c2goW25yKGEsbCkrZStuKk1hdGguY29zKGYrMipNYXRoLlBJKy41KnMpLG5yKGEsbCkrcitpKk1hdGguc2luKGYrMipNYXRoLlBJKy41KnMpXSksaC5wdXNoKFtucihhLGwpK2UrLjk4Km4qTWF0aC5jb3MoZitzKSxucihhLGwpK3IrLjk4KmkqTWF0aC5zaW4oZitzKV0pLGgucHVzaChbbnIoYSxsKStlKy45Km4qTWF0aC5jb3MoZisuNSpzKSxucihhLGwpK3IrLjkqaSpNYXRoLnNpbihmKy41KnMpXSl9cmV0dXJuW2gsdV19ZnVuY3Rpb24gTWoodCxlLHIsbixpLGEscyxsLHUpe2xldCBoPWErbnIoLjEsdSksZj1bXTtmLnB1c2goW25yKGwsdSkrZSsuOSpuKk1hdGguY29zKGgtdCksbnIobCx1KStyKy45KmkqTWF0aC5zaW4oaC10KV0pO2ZvcihsZXQgZD1oO2Q8PXM7ZCs9dClmLnB1c2goW25yKGwsdSkrZStuKk1hdGguY29zKGQpLG5yKGwsdSkrcitpKk1hdGguc2luKGQpXSk7cmV0dXJuIGYucHVzaChbZStuKk1hdGguY29zKHMpLHIraSpNYXRoLnNpbihzKV0pLGYucHVzaChbZStuKk1hdGguY29zKHMpLHIraSpNYXRoLnNpbihzKV0pLE41KGYsbnVsbCx1KX1mdW5jdGlvbiBvQWUodCxlLHIsbixpLGEscyxsKXtsZXQgdT1bXSxoPVtsLm1heFJhbmRvbW5lc3NPZmZzZXR8fDEsKGwubWF4UmFuZG9tbmVzc09mZnNldHx8MSkrLjNdLGY9WzAsMF0sZD1sLmRpc2FibGVNdWx0aVN0cm9rZT8xOjIscD1sLnByZXNlcnZlVmVydGljZXM7Zm9yKGxldCBtPTA7bTxkO20rKyltPT09MD91LnB1c2goe29wOiJtb3ZlIixkYXRhOltzWzBdLHNbMV1dfSk6dS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbc1swXSsocD8wOm5yKGhbMF0sbCkpLHNbMV0rKHA/MDpucihoWzBdLGwpKV19KSxmPXA/W2ksYV06W2krbnIoaFttXSxsKSxhK25yKGhbbV0sbCldLHUucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlt0K25yKGhbbV0sbCksZStucihoW21dLGwpLHIrbnIoaFttXSxsKSxuK25yKGhbbV0sbCksZlswXSxmWzFdXX0pO3JldHVybiB1fWZ1bmN0aW9uIG12KHQpe3JldHVyblsuLi50XX1mdW5jdGlvbiBJaih0LGU9MCl7bGV0IHI9dC5sZW5ndGg7aWYocjwzKXRocm93IG5ldyBFcnJvcigiQSBjdXJ2ZSBtdXN0IGhhdmUgYXQgbGVhc3QgdGhyZWUgcG9pbnRzLiIpO2xldCBuPVtdO2lmKHI9PT0zKW4ucHVzaChtdih0WzBdKSxtdih0WzFdKSxtdih0WzJdKSxtdih0WzJdKSk7ZWxzZXtsZXQgaT1bXTtpLnB1c2godFswXSx0WzBdKTtmb3IobGV0IGw9MTtsPHQubGVuZ3RoO2wrKylpLnB1c2godFtsXSksbD09PXQubGVuZ3RoLTEmJmkucHVzaCh0W2xdKTtsZXQgYT1bXSxzPTEtZTtuLnB1c2gobXYoaVswXSkpO2ZvcihsZXQgbD0xO2wrMjxpLmxlbmd0aDtsKyspe2xldCB1PWlbbF07YVswXT1bdVswXSx1WzFdXSxhWzFdPVt1WzBdKyhzKmlbbCsxXVswXS1zKmlbbC0xXVswXSkvNix1WzFdKyhzKmlbbCsxXVsxXS1zKmlbbC0xXVsxXSkvNl0sYVsyXT1baVtsKzFdWzBdKyhzKmlbbF1bMF0tcyppW2wrMl1bMF0pLzYsaVtsKzFdWzFdKyhzKmlbbF1bMV0tcyppW2wrMl1bMV0pLzZdLGFbM109W2lbbCsxXVswXSxpW2wrMV1bMV1dLG4ucHVzaChhWzFdLGFbMl0sYVszXSl9fXJldHVybiBufWZ1bmN0aW9uIEw1KHQsZSl7cmV0dXJuIE1hdGgucG93KHRbMF0tZVswXSwyKStNYXRoLnBvdyh0WzFdLWVbMV0sMil9ZnVuY3Rpb24gbEFlKHQsZSxyKXtsZXQgbj1MNShlLHIpO2lmKG49PT0wKXJldHVybiBMNSh0LGUpO2xldCBpPSgodFswXS1lWzBdKSooclswXS1lWzBdKSsodFsxXS1lWzFdKSooclsxXS1lWzFdKSkvbjtyZXR1cm4gaT1NYXRoLm1heCgwLE1hdGgubWluKDEsaSkpLEw1KHQsU2QoZSxyLGkpKX1mdW5jdGlvbiBTZCh0LGUscil7cmV0dXJuW3RbMF0rKGVbMF0tdFswXSkqcix0WzFdKyhlWzFdLXRbMV0pKnJdfWZ1bmN0aW9uIE85KHQsZSxyLG4pe2xldCBpPW58fFtdO2lmKGZ1bmN0aW9uKGwsdSl7bGV0IGg9bFt1KzBdLGY9bFt1KzFdLGQ9bFt1KzJdLHA9bFt1KzNdLG09MypmWzBdLTIqaFswXS1wWzBdO20qPW07bGV0IGc9MypmWzFdLTIqaFsxXS1wWzFdO2cqPWc7bGV0IHk9MypkWzBdLTIqcFswXS1oWzBdO3kqPXk7bGV0IHY9MypkWzFdLTIqcFsxXS1oWzFdO3JldHVybiB2Kj12LG08eSYmKG09eSksZzx2JiYoZz12KSxtK2d9KHQsZSk8cil7bGV0IGw9dFtlKzBdO2kubGVuZ3RoPyhhPWlbaS5sZW5ndGgtMV0scz1sLE1hdGguc3FydChMNShhLHMpKT4xJiZpLnB1c2gobCkpOmkucHVzaChsKSxpLnB1c2godFtlKzNdKX1lbHNle2xldCB1PXRbZSswXSxoPXRbZSsxXSxmPXRbZSsyXSxkPXRbZSszXSxwPVNkKHUsaCwuNSksbT1TZChoLGYsLjUpLGc9U2QoZixkLC41KSx5PVNkKHAsbSwuNSksdj1TZChtLGcsLjUpLHg9U2QoeSx2LC41KTtPOShbdSxwLHkseF0sMCxyLGkpLE85KFt4LHYsZyxkXSwwLHIsaSl9dmFyIGEscztyZXR1cm4gaX1mdW5jdGlvbiBjQWUodCxlKXtyZXR1cm4gUjUodCwwLHQubGVuZ3RoLGUpfWZ1bmN0aW9uIFI1KHQsZSxyLG4saSl7bGV0IGE9aXx8W10scz10W2VdLGw9dFtyLTFdLHU9MCxoPTE7Zm9yKGxldCBmPWUrMTtmPHItMTsrK2Ype2xldCBkPWxBZSh0W2ZdLHMsbCk7ZD51JiYodT1kLGg9Zil9cmV0dXJuIE1hdGguc3FydCh1KT5uPyhSNSh0LGUsaCsxLG4sYSksUjUodCxoLHIsbixhKSk6KGEubGVuZ3RofHxhLnB1c2gocyksYS5wdXNoKGwpKSxhfWZ1bmN0aW9uIEM5KHQsZT0uMTUscil7bGV0IG49W10saT0odC5sZW5ndGgtMSkvMztmb3IobGV0IGE9MDthPGk7YSsrKU85KHQsMyphLGUsbik7cmV0dXJuIHImJnI+MD9SNShuLDAsbi5sZW5ndGgscik6bn12YXIgZ3YsQTksXzksTDksRDksTjksa3MsUjksaUFlLGs5LEFqLFM1LGFBZSx0byxzbSxQOSxBNSxCOSxLZSxqdD1NKCgpPT57InVzZSBzdHJpY3QiO28oVDksInQiKTtvKHJBZSwiZSIpO28obkFlLCJzIik7byh5diwibiIpO2d2PWNsYXNze3N0YXRpY3tvKHRoaXMsIm8iKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe3JldHVybiB0aGlzLl9maWxsUG9seWdvbnMoZSxyKX1fZmlsbFBvbHlnb25zKGUscil7bGV0IG49eXYoZSxyKTtyZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOnRoaXMucmVuZGVyTGluZXMobixyKX19cmVuZGVyTGluZXMoZSxyKXtsZXQgbj1bXTtmb3IobGV0IGkgb2YgZSluLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyhpWzBdWzBdLGlbMF1bMV0saVsxXVswXSxpWzFdWzFdLHIpKTtyZXR1cm4gbn19O28oTTUsImEiKTtBOT1jbGFzcyBleHRlbmRzIGd2e3N0YXRpY3tvKHRoaXMsImgiKX1maWxsUG9seWdvbnMoZSxyKXtsZXQgbj1yLmhhY2h1cmVHYXA7bjwwJiYobj00KnIuc3Ryb2tlV2lkdGgpLG49TWF0aC5tYXgobiwuMSk7bGV0IGk9eXYoZSxPYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVHYXA6bn0pKSxhPU1hdGguUEkvMTgwKnIuaGFjaHVyZUFuZ2xlLHM9W10sbD0uNSpuKk1hdGguY29zKGEpLHU9LjUqbipNYXRoLnNpbihhKTtmb3IobGV0W2gsZl1vZiBpKU01KFtoLGZdKSYmcy5wdXNoKFtbaFswXS1sLGhbMV0rdV0sWy4uLmZdXSxbW2hbMF0rbCxoWzFdLXVdLFsuLi5mXV0pO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy5yZW5kZXJMaW5lcyhzLHIpfX19LF85PWNsYXNzIGV4dGVuZHMgZ3Z7c3RhdGlje28odGhpcywiciIpfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPXRoaXMuX2ZpbGxQb2x5Z29ucyhlLHIpLGk9T2JqZWN0LmFzc2lnbih7fSxyLHtoYWNodXJlQW5nbGU6ci5oYWNodXJlQW5nbGUrOTB9KSxhPXRoaXMuX2ZpbGxQb2x5Z29ucyhlLGkpO3JldHVybiBuLm9wcz1uLm9wcy5jb25jYXQoYS5vcHMpLG59fSxMOT1jbGFzc3tzdGF0aWN7byh0aGlzLCJpIil9Y29uc3RydWN0b3IoZSl7dGhpcy5oZWxwZXI9ZX1maWxsUG9seWdvbnMoZSxyKXtsZXQgbj15dihlLHI9T2JqZWN0LmFzc2lnbih7fSxyLHtoYWNodXJlQW5nbGU6MH0pKTtyZXR1cm4gdGhpcy5kb3RzT25MaW5lcyhuLHIpfWRvdHNPbkxpbmVzKGUscil7bGV0IG49W10saT1yLmhhY2h1cmVHYXA7aTwwJiYoaT00KnIuc3Ryb2tlV2lkdGgpLGk9TWF0aC5tYXgoaSwuMSk7bGV0IGE9ci5maWxsV2VpZ2h0O2E8MCYmKGE9ci5zdHJva2VXaWR0aC8yKTtsZXQgcz1pLzQ7Zm9yKGxldCBsIG9mIGUpe2xldCB1PU01KGwpLGg9dS9pLGY9TWF0aC5jZWlsKGgpLTEsZD11LWYqaSxwPShsWzBdWzBdK2xbMV1bMF0pLzItaS80LG09TWF0aC5taW4obFswXVsxXSxsWzFdWzFdKTtmb3IobGV0IGc9MDtnPGY7ZysrKXtsZXQgeT1tK2QrZyppLHY9cC1zKzIqTWF0aC5yYW5kb20oKSpzLHg9eS1zKzIqTWF0aC5yYW5kb20oKSpzLGI9dGhpcy5oZWxwZXIuZWxsaXBzZSh2LHgsYSxhLHIpO24ucHVzaCguLi5iLm9wcyl9fXJldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6bn19fSxEOT1jbGFzc3tzdGF0aWN7byh0aGlzLCJjIil9Y29uc3RydWN0b3IoZSl7dGhpcy5oZWxwZXI9ZX1maWxsUG9seWdvbnMoZSxyKXtsZXQgbj15dihlLHIpO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy5kYXNoZWRMaW5lKG4scil9fWRhc2hlZExpbmUoZSxyKXtsZXQgbj1yLmRhc2hPZmZzZXQ8MD9yLmhhY2h1cmVHYXA8MD80KnIuc3Ryb2tlV2lkdGg6ci5oYWNodXJlR2FwOnIuZGFzaE9mZnNldCxpPXIuZGFzaEdhcDwwP3IuaGFjaHVyZUdhcDwwPzQqci5zdHJva2VXaWR0aDpyLmhhY2h1cmVHYXA6ci5kYXNoR2FwLGE9W107cmV0dXJuIGUuZm9yRWFjaChzPT57bGV0IGw9TTUocyksdT1NYXRoLmZsb29yKGwvKG4raSkpLGg9KGwraS11KihuK2kpKS8yLGY9c1swXSxkPXNbMV07ZlswXT5kWzBdJiYoZj1zWzFdLGQ9c1swXSk7bGV0IHA9TWF0aC5hdGFuKChkWzFdLWZbMV0pLyhkWzBdLWZbMF0pKTtmb3IobGV0IG09MDttPHU7bSsrKXtsZXQgZz1tKihuK2kpLHk9ZytuLHY9W2ZbMF0rZypNYXRoLmNvcyhwKStoKk1hdGguY29zKHApLGZbMV0rZypNYXRoLnNpbihwKStoKk1hdGguc2luKHApXSx4PVtmWzBdK3kqTWF0aC5jb3MocCkraCpNYXRoLmNvcyhwKSxmWzFdK3kqTWF0aC5zaW4ocCkraCpNYXRoLnNpbihwKV07YS5wdXNoKC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHModlswXSx2WzFdLHhbMF0seFsxXSxyKSl9fSksYX19LE45PWNsYXNze3N0YXRpY3tvKHRoaXMsImwiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPXIuaGFjaHVyZUdhcDwwPzQqci5zdHJva2VXaWR0aDpyLmhhY2h1cmVHYXAsaT1yLnppZ3phZ09mZnNldDwwP246ci56aWd6YWdPZmZzZXQsYT15dihlLHI9T2JqZWN0LmFzc2lnbih7fSxyLHtoYWNodXJlR2FwOm4raX0pKTtyZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOnRoaXMuemlnemFnTGluZXMoYSxpLHIpfX16aWd6YWdMaW5lcyhlLHIsbil7bGV0IGk9W107cmV0dXJuIGUuZm9yRWFjaChhPT57bGV0IHM9TTUoYSksbD1NYXRoLnJvdW5kKHMvKDIqcikpLHU9YVswXSxoPWFbMV07dVswXT5oWzBdJiYodT1hWzFdLGg9YVswXSk7bGV0IGY9TWF0aC5hdGFuKChoWzFdLXVbMV0pLyhoWzBdLXVbMF0pKTtmb3IobGV0IGQ9MDtkPGw7ZCsrKXtsZXQgcD0yKmQqcixtPTIqKGQrMSkqcixnPU1hdGguc3FydCgyKk1hdGgucG93KHIsMikpLHk9W3VbMF0rcCpNYXRoLmNvcyhmKSx1WzFdK3AqTWF0aC5zaW4oZildLHY9W3VbMF0rbSpNYXRoLmNvcyhmKSx1WzFdK20qTWF0aC5zaW4oZildLHg9W3lbMF0rZypNYXRoLmNvcyhmK01hdGguUEkvNCkseVsxXStnKk1hdGguc2luKGYrTWF0aC5QSS80KV07aS5wdXNoKC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHMoeVswXSx5WzFdLHhbMF0seFsxXSxuKSwuLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKHhbMF0seFsxXSx2WzBdLHZbMV0sbikpfX0pLGl9fSxrcz17fSxSOT1jbGFzc3tzdGF0aWN7byh0aGlzLCJwIil9Y29uc3RydWN0b3IoZSl7dGhpcy5zZWVkPWV9bmV4dCgpe3JldHVybiB0aGlzLnNlZWQ/KDIqKjMxLTEmKHRoaXMuc2VlZD1NYXRoLmltdWwoNDgyNzEsdGhpcy5zZWVkKSkpLzIqKjMxOk1hdGgucmFuZG9tKCl9fSxpQWU9MCxrOT0xLEFqPTIsUzU9e0E6NyxhOjcsQzo2LGM6NixIOjEsaDoxLEw6MixsOjIsTToyLG06MixROjQscTo0LFM6NCxzOjQsVDoyLHQ6MixWOjEsdjoxLFo6MCx6OjB9O28oRTksImsiKTtvKEY5LCJiIik7byhPaiwieSIpO28oUGosIm0iKTtvKHB2LCJ3Iik7byhCaiwieCIpO2FBZT17cmFuZE9mZnNldDpvKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5yKHQsZSl9LCJyYW5kT2Zmc2V0IikscmFuZE9mZnNldFdpdGhSYW5nZTpvKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRDUodCxlLHIpfSwicmFuZE9mZnNldFdpdGhSYW5nZSIpLGVsbGlwc2U6byhmdW5jdGlvbih0LGUscixuLGkpe2xldCBhPXpqKHIsbixpKTtyZXR1cm4gTTkodCxlLGksYSkub3BzZXR9LCJlbGxpcHNlIiksZG91YmxlTGluZU9wczpvKGZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIFBoKHQsZSxyLG4saSwhMCl9LCJkb3VibGVMaW5lT3BzIil9O28oRmosInYiKTtvKF81LCJTIik7byhzQWUsIk8iKTtvKF9qLCJMIik7byh6aiwiVCIpO28oTTksIkQiKTtvKExqLCJBIik7byhEaiwiXyIpO28oUzksIkkiKTtvKGFtLCJDIik7byhOaiwieiIpO28oR2osIlciKTtvKEQ1LCJFIik7byhuciwiRyIpO28oUGgsIiQiKTtvKEk5LCJSIik7byhDNSwiaiIpO28oTjUsInEiKTtvKFJqLCJGIik7byhNaiwiViIpO28ob0FlLCJaIik7byhtdiwiUSIpO28oSWosIkgiKTtvKEw1LCJOIik7byhsQWUsIkIiKTtvKFNkLCJKIik7byhPOSwiSyIpO28oY0FlLCJVIik7byhSNSwiWCIpO28oQzksIlkiKTt0bz0ibm9uZSIsc209Y2xhc3N7c3RhdGlje28odGhpcywiZXQiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRPcHRpb25zPXttYXhSYW5kb21uZXNzT2Zmc2V0OjIscm91Z2huZXNzOjEsYm93aW5nOjEsc3Ryb2tlOiIjMDAwIixzdHJva2VXaWR0aDoxLGN1cnZlVGlnaHRuZXNzOjAsY3VydmVGaXR0aW5nOi45NSxjdXJ2ZVN0ZXBDb3VudDo5LGZpbGxTdHlsZToiaGFjaHVyZSIsZmlsbFdlaWdodDotMSxoYWNodXJlQW5nbGU6LTQxLGhhY2h1cmVHYXA6LTEsZGFzaE9mZnNldDotMSxkYXNoR2FwOi0xLHppZ3phZ09mZnNldDotMSxzZWVkOjAsZGlzYWJsZU11bHRpU3Ryb2tlOiExLGRpc2FibGVNdWx0aVN0cm9rZUZpbGw6ITEscHJlc2VydmVWZXJ0aWNlczohMSxmaWxsU2hhcGVSb3VnaG5lc3NHYWluOi44fSx0aGlzLmNvbmZpZz1lfHx7fSx0aGlzLmNvbmZpZy5vcHRpb25zJiYodGhpcy5kZWZhdWx0T3B0aW9ucz10aGlzLl9vKHRoaXMuY29uZmlnLm9wdGlvbnMpKX1zdGF0aWMgbmV3U2VlZCgpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMioqMzEpfV9vKGUpe3JldHVybiBlP09iamVjdC5hc3NpZ24oe30sdGhpcy5kZWZhdWx0T3B0aW9ucyxlKTp0aGlzLmRlZmF1bHRPcHRpb25zfV9kKGUscixuKXtyZXR1cm57c2hhcGU6ZSxzZXRzOnJ8fFtdLG9wdGlvbnM6bnx8dGhpcy5kZWZhdWx0T3B0aW9uc319bGluZShlLHIsbixpLGEpe2xldCBzPXRoaXMuX28oYSk7cmV0dXJuIHRoaXMuX2QoImxpbmUiLFtGaihlLHIsbixpLHMpXSxzKX1yZWN0YW5nbGUoZSxyLG4saSxhKXtsZXQgcz10aGlzLl9vKGEpLGw9W10sdT1zQWUoZSxyLG4saSxzKTtpZihzLmZpbGwpe2xldCBoPVtbZSxyXSxbZStuLHJdLFtlK24scitpXSxbZSxyK2ldXTtzLmZpbGxTdHlsZT09PSJzb2xpZCI/bC5wdXNoKFM5KFtoXSxzKSk6bC5wdXNoKGFtKFtoXSxzKSl9cmV0dXJuIHMuc3Ryb2tlIT09dG8mJmwucHVzaCh1KSx0aGlzLl9kKCJyZWN0YW5nbGUiLGwscyl9ZWxsaXBzZShlLHIsbixpLGEpe2xldCBzPXRoaXMuX28oYSksbD1bXSx1PXpqKG4saSxzKSxoPU05KGUscixzLHUpO2lmKHMuZmlsbClpZihzLmZpbGxTdHlsZT09PSJzb2xpZCIpe2xldCBmPU05KGUscixzLHUpLm9wc2V0O2YudHlwZT0iZmlsbFBhdGgiLGwucHVzaChmKX1lbHNlIGwucHVzaChhbShbaC5lc3RpbWF0ZWRQb2ludHNdLHMpKTtyZXR1cm4gcy5zdHJva2UhPT10byYmbC5wdXNoKGgub3BzZXQpLHRoaXMuX2QoImVsbGlwc2UiLGwscyl9Y2lyY2xlKGUscixuLGkpe2xldCBhPXRoaXMuZWxsaXBzZShlLHIsbixuLGkpO3JldHVybiBhLnNoYXBlPSJjaXJjbGUiLGF9bGluZWFyUGF0aChlLHIpe2xldCBuPXRoaXMuX28ocik7cmV0dXJuIHRoaXMuX2QoImxpbmVhclBhdGgiLFtfNShlLCExLG4pXSxuKX1hcmMoZSxyLG4saSxhLHMsbD0hMSx1KXtsZXQgaD10aGlzLl9vKHUpLGY9W10sZD1MaihlLHIsbixpLGEscyxsLCEwLGgpO2lmKGwmJmguZmlsbClpZihoLmZpbGxTdHlsZT09PSJzb2xpZCIpe2xldCBwPU9iamVjdC5hc3NpZ24oe30saCk7cC5kaXNhYmxlTXVsdGlTdHJva2U9ITA7bGV0IG09TGooZSxyLG4saSxhLHMsITAsITEscCk7bS50eXBlPSJmaWxsUGF0aCIsZi5wdXNoKG0pfWVsc2UgZi5wdXNoKGZ1bmN0aW9uKHAsbSxnLHksdix4LGIpe2xldCB3PXAsXz1tLFQ9TWF0aC5hYnMoZy8yKSxFPU1hdGguYWJzKHkvMik7VCs9bnIoLjAxKlQsYiksRSs9bnIoLjAxKkUsYik7bGV0IEw9dixDPXg7Zm9yKDtMPDA7KUwrPTIqTWF0aC5QSSxDKz0yKk1hdGguUEk7Qy1MPjIqTWF0aC5QSSYmKEw9MCxDPTIqTWF0aC5QSSk7bGV0IEE9KEMtTCkvYi5jdXJ2ZVN0ZXBDb3VudCxJPVtdO2ZvcihsZXQgRD1MO0Q8PUM7RCs9QSlJLnB1c2goW3crVCpNYXRoLmNvcyhEKSxfK0UqTWF0aC5zaW4oRCldKTtyZXR1cm4gSS5wdXNoKFt3K1QqTWF0aC5jb3MoQyksXytFKk1hdGguc2luKEMpXSksSS5wdXNoKFt3LF9dKSxhbShbSV0sYil9KGUscixuLGksYSxzLGgpKTtyZXR1cm4gaC5zdHJva2UhPT10byYmZi5wdXNoKGQpLHRoaXMuX2QoImFyYyIsZixoKX1jdXJ2ZShlLHIpe2xldCBuPXRoaXMuX28ociksaT1bXSxhPV9qKGUsbik7aWYobi5maWxsJiZuLmZpbGwhPT10bylpZihuLmZpbGxTdHlsZT09PSJzb2xpZCIpe2xldCBzPV9qKGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtkaXNhYmxlTXVsdGlTdHJva2U6ITAscm91Z2huZXNzOm4ucm91Z2huZXNzP24ucm91Z2huZXNzK24uZmlsbFNoYXBlUm91Z2huZXNzR2FpbjowfSkpO2kucHVzaCh7dHlwZToiZmlsbFBhdGgiLG9wczp0aGlzLl9tZXJnZWRTaGFwZShzLm9wcyl9KX1lbHNle2xldCBzPVtdLGw9ZTtpZihsLmxlbmd0aCl7bGV0IHU9dHlwZW9mIGxbMF1bMF09PSJudW1iZXIiP1tsXTpsO2ZvcihsZXQgaCBvZiB1KWgubGVuZ3RoPDM/cy5wdXNoKC4uLmgpOmgubGVuZ3RoPT09Mz9zLnB1c2goLi4uQzkoSWooW2hbMF0saFswXSxoWzFdLGhbMl1dKSwxMCwoMStuLnJvdWdobmVzcykvMikpOnMucHVzaCguLi5DOShJaihoKSwxMCwoMStuLnJvdWdobmVzcykvMikpfXMubGVuZ3RoJiZpLnB1c2goYW0oW3NdLG4pKX1yZXR1cm4gbi5zdHJva2UhPT10byYmaS5wdXNoKGEpLHRoaXMuX2QoImN1cnZlIixpLG4pfXBvbHlnb24oZSxyKXtsZXQgbj10aGlzLl9vKHIpLGk9W10sYT1fNShlLCEwLG4pO3JldHVybiBuLmZpbGwmJihuLmZpbGxTdHlsZT09PSJzb2xpZCI/aS5wdXNoKFM5KFtlXSxuKSk6aS5wdXNoKGFtKFtlXSxuKSkpLG4uc3Ryb2tlIT09dG8mJmkucHVzaChhKSx0aGlzLl9kKCJwb2x5Z29uIixpLG4pfXBhdGgoZSxyKXtsZXQgbj10aGlzLl9vKHIpLGk9W107aWYoIWUpcmV0dXJuIHRoaXMuX2QoInBhdGgiLGksbik7ZT0oZXx8IiIpLnJlcGxhY2UoL1xuL2csIiAiKS5yZXBsYWNlKC8oLVxzKS9nLCItIikucmVwbGFjZSgiLyhzcykvZyIsIiAiKTtsZXQgYT1uLmZpbGwmJm4uZmlsbCE9PSJ0cmFuc3BhcmVudCImJm4uZmlsbCE9PXRvLHM9bi5zdHJva2UhPT10byxsPSEhKG4uc2ltcGxpZmljYXRpb24mJm4uc2ltcGxpZmljYXRpb248MSksdT1mdW5jdGlvbihmLGQscCl7bGV0IG09UGooT2ooRjkoZikpKSxnPVtdLHk9W10sdj1bMCwwXSx4PVtdLGI9bygoKT0+e3gubGVuZ3RoPj00JiZ5LnB1c2goLi4uQzkoeCxkKSkseD1bXX0sImkiKSx3PW8oKCk9PntiKCkseS5sZW5ndGgmJihnLnB1c2goeSkseT1bXSl9LCJjIik7Zm9yKGxldHtrZXk6VCxkYXRhOkV9b2YgbSlzd2l0Y2goVCl7Y2FzZSJNIjp3KCksdj1bRVswXSxFWzFdXSx5LnB1c2godik7YnJlYWs7Y2FzZSJMIjpiKCkseS5wdXNoKFtFWzBdLEVbMV1dKTticmVhaztjYXNlIkMiOmlmKCF4Lmxlbmd0aCl7bGV0IEw9eS5sZW5ndGg/eVt5Lmxlbmd0aC0xXTp2O3gucHVzaChbTFswXSxMWzFdXSl9eC5wdXNoKFtFWzBdLEVbMV1dKSx4LnB1c2goW0VbMl0sRVszXV0pLHgucHVzaChbRVs0XSxFWzVdXSk7YnJlYWs7Y2FzZSJaIjpiKCkseS5wdXNoKFt2WzBdLHZbMV1dKX1pZih3KCksIXApcmV0dXJuIGc7bGV0IF89W107Zm9yKGxldCBUIG9mIGcpe2xldCBFPWNBZShULHApO0UubGVuZ3RoJiZfLnB1c2goRSl9cmV0dXJuIF99KGUsMSxsPzQtNCoobi5zaW1wbGlmaWNhdGlvbnx8MSk6KDErbi5yb3VnaG5lc3MpLzIpLGg9RGooZSxuKTtpZihhKWlmKG4uZmlsbFN0eWxlPT09InNvbGlkIilpZih1Lmxlbmd0aD09PTEpe2xldCBmPURqKGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtkaXNhYmxlTXVsdGlTdHJva2U6ITAscm91Z2huZXNzOm4ucm91Z2huZXNzP24ucm91Z2huZXNzK24uZmlsbFNoYXBlUm91Z2huZXNzR2FpbjowfSkpO2kucHVzaCh7dHlwZToiZmlsbFBhdGgiLG9wczp0aGlzLl9tZXJnZWRTaGFwZShmLm9wcyl9KX1lbHNlIGkucHVzaChTOSh1LG4pKTtlbHNlIGkucHVzaChhbSh1LG4pKTtyZXR1cm4gcyYmKGw/dS5mb3JFYWNoKGY9PntpLnB1c2goXzUoZiwhMSxuKSl9KTppLnB1c2goaCkpLHRoaXMuX2QoInBhdGgiLGksbil9b3BzVG9QYXRoKGUscil7bGV0IG49IiI7Zm9yKGxldCBpIG9mIGUub3BzKXtsZXQgYT10eXBlb2Ygcj09Im51bWJlciImJnI+PTA/aS5kYXRhLm1hcChzPT4rcy50b0ZpeGVkKHIpKTppLmRhdGE7c3dpdGNoKGkub3Ape2Nhc2UibW92ZSI6bis9YE0ke2FbMF19ICR7YVsxXX0gYDticmVhaztjYXNlImJjdXJ2ZVRvIjpuKz1gQyR7YVswXX0gJHthWzFdfSwgJHthWzJdfSAke2FbM119LCAke2FbNF19ICR7YVs1XX0gYDticmVhaztjYXNlImxpbmVUbyI6bis9YEwke2FbMF19ICR7YVsxXX0gYH19cmV0dXJuIG4udHJpbSgpfXRvUGF0aHMoZSl7bGV0IHI9ZS5zZXRzfHxbXSxuPWUub3B0aW9uc3x8dGhpcy5kZWZhdWx0T3B0aW9ucyxpPVtdO2ZvcihsZXQgYSBvZiByKXtsZXQgcz1udWxsO3N3aXRjaChhLnR5cGUpe2Nhc2UicGF0aCI6cz17ZDp0aGlzLm9wc1RvUGF0aChhKSxzdHJva2U6bi5zdHJva2Usc3Ryb2tlV2lkdGg6bi5zdHJva2VXaWR0aCxmaWxsOnRvfTticmVhaztjYXNlImZpbGxQYXRoIjpzPXtkOnRoaXMub3BzVG9QYXRoKGEpLHN0cm9rZTp0byxzdHJva2VXaWR0aDowLGZpbGw6bi5maWxsfHx0b307YnJlYWs7Y2FzZSJmaWxsU2tldGNoIjpzPXRoaXMuZmlsbFNrZXRjaChhLG4pfXMmJmkucHVzaChzKX1yZXR1cm4gaX1maWxsU2tldGNoKGUscil7bGV0IG49ci5maWxsV2VpZ2h0O3JldHVybiBuPDAmJihuPXIuc3Ryb2tlV2lkdGgvMikse2Q6dGhpcy5vcHNUb1BhdGgoZSksc3Ryb2tlOnIuZmlsbHx8dG8sc3Ryb2tlV2lkdGg6bixmaWxsOnRvfX1fbWVyZ2VkU2hhcGUoZSl7cmV0dXJuIGUuZmlsdGVyKChyLG4pPT5uPT09MHx8ci5vcCE9PSJtb3ZlIil9fSxQOT1jbGFzc3tzdGF0aWN7byh0aGlzLCJzdCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5jYW52YXM9ZSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMuZ2VuPW5ldyBzbShyKX1kcmF3KGUpe2xldCByPWUuc2V0c3x8W10sbj1lLm9wdGlvbnN8fHRoaXMuZ2V0RGVmYXVsdE9wdGlvbnMoKSxpPXRoaXMuY3R4LGE9ZS5vcHRpb25zLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzO2ZvcihsZXQgcyBvZiByKXN3aXRjaChzLnR5cGUpe2Nhc2UicGF0aCI6aS5zYXZlKCksaS5zdHJva2VTdHlsZT1uLnN0cm9rZT09PSJub25lIj8idHJhbnNwYXJlbnQiOm4uc3Ryb2tlLGkubGluZVdpZHRoPW4uc3Ryb2tlV2lkdGgsbi5zdHJva2VMaW5lRGFzaCYmaS5zZXRMaW5lRGFzaChuLnN0cm9rZUxpbmVEYXNoKSxuLnN0cm9rZUxpbmVEYXNoT2Zmc2V0JiYoaS5saW5lRGFzaE9mZnNldD1uLnN0cm9rZUxpbmVEYXNoT2Zmc2V0KSx0aGlzLl9kcmF3VG9Db250ZXh0KGkscyxhKSxpLnJlc3RvcmUoKTticmVhaztjYXNlImZpbGxQYXRoIjp7aS5zYXZlKCksaS5maWxsU3R5bGU9bi5maWxsfHwiIjtsZXQgbD1lLnNoYXBlPT09ImN1cnZlInx8ZS5zaGFwZT09PSJwb2x5Z29uInx8ZS5zaGFwZT09PSJwYXRoIj8iZXZlbm9kZCI6Im5vbnplcm8iO3RoaXMuX2RyYXdUb0NvbnRleHQoaSxzLGEsbCksaS5yZXN0b3JlKCk7YnJlYWt9Y2FzZSJmaWxsU2tldGNoIjp0aGlzLmZpbGxTa2V0Y2goaSxzLG4pfX1maWxsU2tldGNoKGUscixuKXtsZXQgaT1uLmZpbGxXZWlnaHQ7aTwwJiYoaT1uLnN0cm9rZVdpZHRoLzIpLGUuc2F2ZSgpLG4uZmlsbExpbmVEYXNoJiZlLnNldExpbmVEYXNoKG4uZmlsbExpbmVEYXNoKSxuLmZpbGxMaW5lRGFzaE9mZnNldCYmKGUubGluZURhc2hPZmZzZXQ9bi5maWxsTGluZURhc2hPZmZzZXQpLGUuc3Ryb2tlU3R5bGU9bi5maWxsfHwiIixlLmxpbmVXaWR0aD1pLHRoaXMuX2RyYXdUb0NvbnRleHQoZSxyLG4uZml4ZWREZWNpbWFsUGxhY2VEaWdpdHMpLGUucmVzdG9yZSgpfV9kcmF3VG9Db250ZXh0KGUscixuLGk9Im5vbnplcm8iKXtlLmJlZ2luUGF0aCgpO2ZvcihsZXQgYSBvZiByLm9wcyl7bGV0IHM9dHlwZW9mIG49PSJudW1iZXIiJiZuPj0wP2EuZGF0YS5tYXAobD0+K2wudG9GaXhlZChuKSk6YS5kYXRhO3N3aXRjaChhLm9wKXtjYXNlIm1vdmUiOmUubW92ZVRvKHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSJiY3VydmVUbyI6ZS5iZXppZXJDdXJ2ZVRvKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlImxpbmVUbyI6ZS5saW5lVG8oc1swXSxzWzFdKX19ci50eXBlPT09ImZpbGxQYXRoIj9lLmZpbGwoaSk6ZS5zdHJva2UoKX1nZXQgZ2VuZXJhdG9yKCl7cmV0dXJuIHRoaXMuZ2VufWdldERlZmF1bHRPcHRpb25zKCl7cmV0dXJuIHRoaXMuZ2VuLmRlZmF1bHRPcHRpb25zfWxpbmUoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5saW5lKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfXJlY3RhbmdsZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLnJlY3RhbmdsZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyksc31lbGxpcHNlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4uZWxsaXBzZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyksc31jaXJjbGUoZSxyLG4saSl7bGV0IGE9dGhpcy5nZW4uY2lyY2xlKGUscixuLGkpO3JldHVybiB0aGlzLmRyYXcoYSksYX1saW5lYXJQYXRoKGUscil7bGV0IG49dGhpcy5nZW4ubGluZWFyUGF0aChlLHIpO3JldHVybiB0aGlzLmRyYXcobiksbn1wb2x5Z29uKGUscil7bGV0IG49dGhpcy5nZW4ucG9seWdvbihlLHIpO3JldHVybiB0aGlzLmRyYXcobiksbn1hcmMoZSxyLG4saSxhLHMsbD0hMSx1KXtsZXQgaD10aGlzLmdlbi5hcmMoZSxyLG4saSxhLHMsbCx1KTtyZXR1cm4gdGhpcy5kcmF3KGgpLGh9Y3VydmUoZSxyKXtsZXQgbj10aGlzLmdlbi5jdXJ2ZShlLHIpO3JldHVybiB0aGlzLmRyYXcobiksbn1wYXRoKGUscil7bGV0IG49dGhpcy5nZW4ucGF0aChlLHIpO3JldHVybiB0aGlzLmRyYXcobiksbn19LEE1PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsQjk9Y2xhc3N7c3RhdGlje28odGhpcywib3QiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuc3ZnPWUsdGhpcy5nZW49bmV3IHNtKHIpfWRyYXcoZSl7bGV0IHI9ZS5zZXRzfHxbXSxuPWUub3B0aW9uc3x8dGhpcy5nZXREZWZhdWx0T3B0aW9ucygpLGk9dGhpcy5zdmcub3duZXJEb2N1bWVudHx8d2luZG93LmRvY3VtZW50LGE9aS5jcmVhdGVFbGVtZW50TlMoQTUsImciKSxzPWUub3B0aW9ucy5maXhlZERlY2ltYWxQbGFjZURpZ2l0cztmb3IobGV0IGwgb2Ygcil7bGV0IHU9bnVsbDtzd2l0Y2gobC50eXBlKXtjYXNlInBhdGgiOnU9aS5jcmVhdGVFbGVtZW50TlMoQTUsInBhdGgiKSx1LnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5vcHNUb1BhdGgobCxzKSksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsbi5zdHJva2UpLHUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG4uc3Ryb2tlV2lkdGgrIiIpLHUuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uc3Ryb2tlTGluZURhc2gmJnUuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IixuLnN0cm9rZUxpbmVEYXNoLmpvaW4oIiAiKS50cmltKCkpLG4uc3Ryb2tlTGluZURhc2hPZmZzZXQmJnUuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIsYCR7bi5zdHJva2VMaW5lRGFzaE9mZnNldH1gKTticmVhaztjYXNlImZpbGxQYXRoIjp1PWkuY3JlYXRlRWxlbWVudE5TKEE1LCJwYXRoIiksdS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMub3BzVG9QYXRoKGwscykpLHUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJub25lIiksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsIjAiKSx1LnNldEF0dHJpYnV0ZSgiZmlsbCIsbi5maWxsfHwiIiksZS5zaGFwZSE9PSJjdXJ2ZSImJmUuc2hhcGUhPT0icG9seWdvbiJ8fHUuc2V0QXR0cmlidXRlKCJmaWxsLXJ1bGUiLCJldmVub2RkIik7YnJlYWs7Y2FzZSJmaWxsU2tldGNoIjp1PXRoaXMuZmlsbFNrZXRjaChpLGwsbil9dSYmYS5hcHBlbmRDaGlsZCh1KX1yZXR1cm4gYX1maWxsU2tldGNoKGUscixuKXtsZXQgaT1uLmZpbGxXZWlnaHQ7aTwwJiYoaT1uLnN0cm9rZVdpZHRoLzIpO2xldCBhPWUuY3JlYXRlRWxlbWVudE5TKEE1LCJwYXRoIik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJkIix0aGlzLm9wc1RvUGF0aChyLG4uZml4ZWREZWNpbWFsUGxhY2VEaWdpdHMpKSxhLnNldEF0dHJpYnV0ZSgic3Ryb2tlIixuLmZpbGx8fCIiKSxhLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixpKyIiKSxhLnNldEF0dHJpYnV0ZSgiZmlsbCIsIm5vbmUiKSxuLmZpbGxMaW5lRGFzaCYmYS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLG4uZmlsbExpbmVEYXNoLmpvaW4oIiAiKS50cmltKCkpLG4uZmlsbExpbmVEYXNoT2Zmc2V0JiZhLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hvZmZzZXQiLGAke24uZmlsbExpbmVEYXNoT2Zmc2V0fWApLGF9Z2V0IGdlbmVyYXRvcigpe3JldHVybiB0aGlzLmdlbn1nZXREZWZhdWx0T3B0aW9ucygpe3JldHVybiB0aGlzLmdlbi5kZWZhdWx0T3B0aW9uc31vcHNUb1BhdGgoZSxyKXtyZXR1cm4gdGhpcy5nZW4ub3BzVG9QYXRoKGUscil9bGluZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLmxpbmUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpfXJlY3RhbmdsZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLnJlY3RhbmdsZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyl9ZWxsaXBzZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLmVsbGlwc2UoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpfWNpcmNsZShlLHIsbixpKXtsZXQgYT10aGlzLmdlbi5jaXJjbGUoZSxyLG4saSk7cmV0dXJuIHRoaXMuZHJhdyhhKX1saW5lYXJQYXRoKGUscil7bGV0IG49dGhpcy5nZW4ubGluZWFyUGF0aChlLHIpO3JldHVybiB0aGlzLmRyYXcobil9cG9seWdvbihlLHIpe2xldCBuPXRoaXMuZ2VuLnBvbHlnb24oZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pfWFyYyhlLHIsbixpLGEscyxsPSExLHUpe2xldCBoPXRoaXMuZ2VuLmFyYyhlLHIsbixpLGEscyxsLHUpO3JldHVybiB0aGlzLmRyYXcoaCl9Y3VydmUoZSxyKXtsZXQgbj10aGlzLmdlbi5jdXJ2ZShlLHIpO3JldHVybiB0aGlzLmRyYXcobil9cGF0aChlLHIpe2xldCBuPXRoaXMuZ2VuLnBhdGgoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pfX0sS2U9e2NhbnZhczpvKCh0LGUpPT5uZXcgUDkodCxlKSwiY2FudmFzIiksc3ZnOm8oKHQsZSk9Pm5ldyBCOSh0LGUpLCJzdmciKSxnZW5lcmF0b3I6byh0PT5uZXcgc20odCksImdlbmVyYXRvciIpLG5ld1NlZWQ6bygoKT0+c20ubmV3U2VlZCgpLCJuZXdTZWVkIil9fSk7ZnVuY3Rpb24gJGoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0IG49bHQoZSksaT1uO258fChpPSJhbmNob3IiKTtsZXQgYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscz0xLHtjc3NTdHlsZXM6bH09ZSx1PUtlLnN2ZyhhKSxoPVplKGUse2ZpbGw6ImJsYWNrIixzdHJva2U6Im5vbmUiLGZpbGxTdHlsZToic29saWQifSk7ZS5sb29rIT09ImhhbmREcmF3biImJihoLnJvdWdobmVzcz0wKTtsZXQgZj11LmNpcmNsZSgwLDAscyoyLGgpLGQ9YS5pbnNlcnQoKCk9PmYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBkLmF0dHIoImNsYXNzIiwiYW5jaG9yIikuYXR0cigic3R5bGUiLEZuKGwpKSxRZShlLGQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUscyxwKSxxZS5jaXJjbGUoZSxzLHApfSxhfXZhciBWaj1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7RnQoKTtxdCgpO1h0KCk7anQoKTtocigpO28oJGosImFuY2hvciIpfSk7ZnVuY3Rpb24gVWoodCxlLHIsbixpLGEscyl7bGV0IHU9KHQrcikvMixoPShlK24pLzIsZj1NYXRoLmF0YW4yKG4tZSxyLXQpLGQ9KHItdCkvMixwPShuLWUpLzIsbT1kL2ksZz1wL2EseT1NYXRoLnNxcnQobSoqMitnKioyKTtpZih5PjEpdGhyb3cgbmV3IEVycm9yKCJUaGUgZ2l2ZW4gcmFkaWkgYXJlIHRvbyBzbWFsbCB0byBjcmVhdGUgYW4gYXJjIGJldHdlZW4gdGhlIHBvaW50cy4iKTtsZXQgdj1NYXRoLnNxcnQoMS15KioyKSx4PXUrdiphKk1hdGguc2luKGYpKihzPy0xOjEpLGI9aC12KmkqTWF0aC5jb3MoZikqKHM/LTE6MSksdz1NYXRoLmF0YW4yKChlLWIpL2EsKHQteCkvaSksVD1NYXRoLmF0YW4yKChuLWIpL2EsKHIteCkvaSktdztzJiZUPDAmJihUKz0yKk1hdGguUEkpLCFzJiZUPjAmJihULT0yKk1hdGguUEkpO2xldCBFPVtdO2ZvcihsZXQgTD0wO0w8MjA7TCsrKXtsZXQgQz1MLzE5LEE9dytDKlQsST14K2kqTWF0aC5jb3MoQSksRD1iK2EqTWF0aC5zaW4oQSk7RS5wdXNoKHt4OkkseTpEfSl9cmV0dXJuIEV9YXN5bmMgZnVuY3Rpb24gSGoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PWV0KGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgb3QodCxlLGx0KGUpKSxzPWEud2lkdGgrZS5wYWRkaW5nKzIwLGw9YS5oZWlnaHQrZS5wYWRkaW5nLHU9bC8yLGg9dS8oMi41K2wvNTApLHtjc3NTdHlsZXM6Zn09ZSxkPVt7eDpzLzIseTotbC8yfSx7eDotcy8yLHk6LWwvMn0sLi4uVWooLXMvMiwtbC8yLC1zLzIsbC8yLGgsdSwhMSkse3g6cy8yLHk6bC8yfSwuLi5VaihzLzIsbC8yLHMvMiwtbC8yLGgsdSwhMCldLHA9S2Uuc3ZnKGkpLG09WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVd0KGQpLHk9cC5wYXRoKGcsbSksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aC8yfSwgMClgKSxRZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBxZS5wb2x5Z29uKGUsZCx4KX0saX12YXIgV2o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO3F0KCk7WHQoKTtqdCgpO28oVWosImdlbmVyYXRlQXJjUG9pbnRzIik7byhIaiwiYm93VGllUmVjdCIpfSk7ZnVuY3Rpb24gQWEodCxlLHIsbil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS54KyIsIitpLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrci8yKyIpIil9dmFyIFN1PU0oKCk9PnsidXNlIHN0cmljdCI7byhBYSwiaW5zZXJ0UG9seWdvblNoYXBlIil9KTthc3luYyBmdW5jdGlvbiBZaih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBvdCh0LGUsbHQoZSkpLHM9YS5oZWlnaHQrZS5wYWRkaW5nLGw9MTIsdT1hLndpZHRoK2UucGFkZGluZytsLGg9MCxmPXUsZD0tcyxwPTAsbT1be3g6aCtsLHk6ZH0se3g6Zix5OmR9LHt4OmYseTpwfSx7eDpoLHk6cH0se3g6aCx5OmQrbH0se3g6aCtsLHk6ZH1dLGcse2Nzc1N0eWxlczp5fT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgdj1LZS5zdmcoaSkseD1aZShlLHt9KSxiPVd0KG0pLHc9di5wYXRoKGIseCk7Zz1pLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMn0sICR7cy8yfSlgKSx5JiZnLmF0dHIoInN0eWxlIix5KX1lbHNlIGc9QWEoaSx1LHMsbSk7cmV0dXJuIG4mJmcuYXR0cigic3R5bGUiLG4pLFFlKGUsZyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIHFlLnBvbHlnb24oZSxtLHYpfSxpfXZhciBxaj1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7U3UoKTtGdCgpO28oWWosImNhcmQiKX0pO2Z1bmN0aW9uIFhqKHQsZSl7bGV0e25vZGVTdHlsZXM6cn09ZXQoZSk7ZS5sYWJlbD0iIjtsZXQgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixsdChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLHtjc3NTdHlsZXM6aX09ZSxhPU1hdGgubWF4KDI4LGUud2lkdGg/PzApLHM9W3t4OjAseTphLzJ9LHt4OmEvMix5OjB9LHt4OjAseTotYS8yfSx7eDotYS8yLHk6MH1dLGw9S2Uuc3ZnKG4pLHU9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih1LnJvdWdobmVzcz0wLHUuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBoPVd0KHMpLGY9bC5wYXRoKGgsdSksZD1uLmluc2VydCgoKT0+ZiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZkLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxyJiZlLmxvb2shPT0iaGFuZERyYXduIiYmZC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsciksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gcWUucG9seWdvbihlLHMscCl9LG59dmFyIGpqPU0oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtqdCgpO1h0KCk7RnQoKTtvKFhqLCJjaG9pY2UiKX0pO2FzeW5jIGZ1bmN0aW9uIEtqKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsaGFsZlBhZGRpbmc6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPWEud2lkdGgvMitzLHUse2Nzc1N0eWxlczpofT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZj1LZS5zdmcoaSksZD1aZShlLHt9KSxwPWYuY2lyY2xlKDAsMCxsKjIsZCk7dT1pLmluc2VydCgoKT0+cCwiOmZpcnN0LWNoaWxkIiksdS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixGbihoKSl9ZWxzZSB1PWkuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyIixsKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApO3JldHVybiBRZShlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBZLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsbCxmKSxxZS5jaXJjbGUoZSxsLGYpfSxpfXZhciBRaj1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7RnQoKTtxdCgpO1h0KCk7anQoKTtocigpO28oS2osImNpcmNsZSIpfSk7ZnVuY3Rpb24gdUFlKHQpe2xldCBlPU1hdGguY29zKE1hdGguUEkvNCkscj1NYXRoLnNpbihNYXRoLlBJLzQpLG49dCoyLGk9e3g6bi8yKmUseTpuLzIqcn0sYT17eDotKG4vMikqZSx5Om4vMipyfSxzPXt4Oi0obi8yKSplLHk6LShuLzIpKnJ9LGw9e3g6bi8yKmUseTotKG4vMikqcn07cmV0dXJuYE0gJHthLnh9LCR7YS55fSBMICR7bC54fSwke2wueX0KICAgICAgICAgICAgICAgICAgIE0gJHtpLnh9LCR7aS55fSBMICR7cy54fSwke3MueX1gfWZ1bmN0aW9uIFpqKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cixlLmxhYmVsPSIiO2xldCBpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGx0KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCksYT1NYXRoLm1heCgzMCxlPy53aWR0aD8/MCkse2Nzc1N0eWxlczpzfT1lLGw9S2Uuc3ZnKGkpLHU9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih1LnJvdWdobmVzcz0wLHUuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBoPWwuY2lyY2xlKDAsMCxhKjIsdSksZj11QWUoYSksZD1sLnBhdGgoZix1KSxwPWkuaW5zZXJ0KCgpPT5oLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcC5pbnNlcnQoKCk9PmQpLHMmJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixzKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUWUoZSxwKSxlLmludGVyc2VjdD1mdW5jdGlvbihtKXtyZXR1cm4gWS5pbmZvKCJjcm9zc2VkQ2lyY2xlIGludGVyc2VjdCIsZSx7cmFkaXVzOmEscG9pbnQ6bX0pLHFlLmNpcmNsZShlLGEsbSl9LGl9dmFyIEpqPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtGdCgpO1h0KCk7anQoKTtxdCgpO28odUFlLCJjcmVhdGVMaW5lIik7byhaaiwiY3Jvc3NlZENpcmNsZSIpfSk7ZnVuY3Rpb24gQmgodCxlLHIsbj0xMDAsaT0wLGE9MTgwKXtsZXQgcz1bXSxsPWkqTWF0aC5QSS8xODAsZj0oYSpNYXRoLlBJLzE4MC1sKS8obi0xKTtmb3IobGV0IGQ9MDtkPG47ZCsrKXtsZXQgcD1sK2QqZixtPXQrcipNYXRoLmNvcyhwKSxnPWUrcipNYXRoLnNpbihwKTtzLnB1c2goe3g6LW0seTotZ30pfXJldHVybiBzfWFzeW5jIGZ1bmN0aW9uIGVLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1hLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxoPU1hdGgubWF4KDUsdSouMSkse2Nzc1N0eWxlczpmfT1lLGQ9Wy4uLkJoKGwvMiwtdS8yLGgsMzAsLTkwLDApLHt4Oi1sLzItaCx5Omh9LC4uLkJoKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLkJoKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDotbC8yLWgseTotdS8yfSwuLi5CaChsLzIsdS8yLGgsMjAsMCw5MCldLHA9W3t4OmwvMix5Oi11LzItaH0se3g6LWwvMix5Oi11LzItaH0sLi4uQmgobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6LWwvMi1oLHk6LWh9LC4uLkJoKGwvMitsKi4xLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5CaChsLzIrbCouMSxoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5OnUvMn0sLi4uQmgobC8yLHUvMixoLDIwLDAsOTApLHt4Oi1sLzIseTp1LzIraH0se3g6bC8yLHk6dS8yK2h9XSxtPUtlLnN2ZyhpKSxnPVplKGUse2ZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB2PVd0KGQpLnJlcGxhY2UoIloiLCIiKSx4PW0ucGF0aCh2LGcpLGI9V3QocCksdz1tLnBhdGgoYix7Li4uZ30pLF89aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gXy5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKSxfLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksXy5hdHRyKCJjbGFzcyIsInRleHQiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmXy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLF8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aH0sIDApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yK2gtKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LXUvMisoZS5wYWRkaW5nPz8wKS8yLShhLnktKGEudG9wPz8wKSl9KWApLFFlKGUsXyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHFlLnBvbHlnb24oZSxwLFQpfSxpfXZhciB0Sz1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7byhCaCwiZ2VuZXJhdGVDaXJjbGVQb2ludHMiKTtvKGVLLCJjdXJseUJyYWNlTGVmdCIpfSk7ZnVuY3Rpb24gRmgodCxlLHIsbj0xMDAsaT0wLGE9MTgwKXtsZXQgcz1bXSxsPWkqTWF0aC5QSS8xODAsZj0oYSpNYXRoLlBJLzE4MC1sKS8obi0xKTtmb3IobGV0IGQ9MDtkPG47ZCsrKXtsZXQgcD1sK2QqZixtPXQrcipNYXRoLmNvcyhwKSxnPWUrcipNYXRoLnNpbihwKTtzLnB1c2goe3g6bSx5Omd9KX1yZXR1cm4gc31hc3luYyBmdW5jdGlvbiBySyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG90KHQsZSxsdChlKSksbD1hLndpZHRoKyhlLnBhZGRpbmc/PzApLHU9YS5oZWlnaHQrKGUucGFkZGluZz8/MCksaD1NYXRoLm1heCg1LHUqLjEpLHtjc3NTdHlsZXM6Zn09ZSxkPVsuLi5GaChsLzIsLXUvMixoLDIwLC05MCwwKSx7eDpsLzIraCx5Oi1ofSwuLi5GaChsLzIraCoyLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5GaChsLzIraCoyLGgsaCwyMCwtOTAsLTE4MCkse3g6bC8yK2gseTp1LzJ9LC4uLkZoKGwvMix1LzIsaCwyMCwwLDkwKV0scD1be3g6LWwvMix5Oi11LzItaH0se3g6bC8yLHk6LXUvMi1ofSwuLi5GaChsLzIsLXUvMixoLDIwLC05MCwwKSx7eDpsLzIraCx5Oi1ofSwuLi5GaChsLzIraCoyLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5GaChsLzIraCoyLGgsaCwyMCwtOTAsLTE4MCkse3g6bC8yK2gseTp1LzJ9LC4uLkZoKGwvMix1LzIsaCwyMCwwLDkwKSx7eDpsLzIseTp1LzIraH0se3g6LWwvMix5OnUvMitofV0sbT1LZS5zdmcoaSksZz1aZShlLHtmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1XdChkKS5yZXBsYWNlKCJaIiwiIikseD1tLnBhdGgodixnKSxiPVd0KHApLHc9bS5wYXRoKGIsey4uLmd9KSxfPWkuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIF8uaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCksXy5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpLF8uYXR0cigiY2xhc3MiLCJ0ZXh0IiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZfLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxfLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1ofSwgMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCkvMi0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksUWUoZSxfKSxlLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4gcWUucG9seWdvbihlLHAsVCl9LGl9dmFyIG5LPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7anQoKTtvKEZoLCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpO28ockssImN1cmx5QnJhY2VSaWdodCIpfSk7ZnVuY3Rpb24gX2EodCxlLHIsbj0xMDAsaT0wLGE9MTgwKXtsZXQgcz1bXSxsPWkqTWF0aC5QSS8xODAsZj0oYSpNYXRoLlBJLzE4MC1sKS8obi0xKTtmb3IobGV0IGQ9MDtkPG47ZCsrKXtsZXQgcD1sK2QqZixtPXQrcipNYXRoLmNvcyhwKSxnPWUrcipNYXRoLnNpbihwKTtzLnB1c2goe3g6LW0seTotZ30pfXJldHVybiBzfWFzeW5jIGZ1bmN0aW9uIGlLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1hLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxoPU1hdGgubWF4KDUsdSouMSkse2Nzc1N0eWxlczpmfT1lLGQ9Wy4uLl9hKGwvMiwtdS8yLGgsMzAsLTkwLDApLHt4Oi1sLzItaCx5Omh9LC4uLl9hKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLl9hKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDotbC8yLWgseTotdS8yfSwuLi5fYShsLzIsdS8yLGgsMjAsMCw5MCldLHA9Wy4uLl9hKC1sLzIraCtoLzIsLXUvMixoLDIwLC05MCwtMTgwKSx7eDpsLzItaC8yLHk6aH0sLi4uX2EoLWwvMi1oLzIsLWgsaCwyMCwwLDkwKSwuLi5fYSgtbC8yLWgvMixoLGgsMjAsLTkwLDApLHt4OmwvMi1oLzIseTotaH0sLi4uX2EoLWwvMitoK2gvMix1LzIsaCwzMCwtMTgwLC0yNzApXSxtPVt7eDpsLzIseTotdS8yLWh9LHt4Oi1sLzIseTotdS8yLWh9LC4uLl9hKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4Oi1sLzItaCx5Oi1ofSwuLi5fYShsLzIraCoyLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5fYShsLzIraCoyLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6dS8yfSwuLi5fYShsLzIsdS8yLGgsMjAsMCw5MCkse3g6LWwvMix5OnUvMitofSx7eDpsLzItaC1oLzIseTp1LzIraH0sLi4uX2EoLWwvMitoK2gvMiwtdS8yLGgsMjAsLTkwLC0xODApLHt4OmwvMi1oLzIseTpofSwuLi5fYSgtbC8yLWgvMiwtaCxoLDIwLDAsOTApLC4uLl9hKC1sLzItaC8yLGgsaCwyMCwtOTAsMCkse3g6bC8yLWgvMix5Oi1ofSwuLi5fYSgtbC8yK2graC8yLHUvMixoLDMwLC0xODAsLTI3MCldLGc9S2Uuc3ZnKGkpLHk9WmUoZSx7ZmlsbDoibm9uZSJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHkucm91Z2huZXNzPTAseS5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9V3QoZCkucmVwbGFjZSgiWiIsIiIpLGI9Zy5wYXRoKHgseSksXz1XdChwKS5yZXBsYWNlKCJaIiwiIiksVD1nLnBhdGgoXyx5KSxFPVd0KG0pLEw9Zy5wYXRoKEUsey4uLnl9KSxDPWkuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIEMuaW5zZXJ0KCgpPT5MLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCksQy5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLEMuaW5zZXJ0KCgpPT5ULCI6Zmlyc3QtY2hpbGQiKSxDLmF0dHIoImNsYXNzIiwidGV4dCIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZDLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksQy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtoLWgvNH0sIDApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LXUvMisoZS5wYWRkaW5nPz8wKS8yLShhLnktKGEudG9wPz8wKSl9KWApLFFlKGUsQyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQSl7cmV0dXJuIHFlLnBvbHlnb24oZSxtLEEpfSxpfXZhciBhSz1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7byhfYSwiZ2VuZXJhdGVDaXJjbGVQb2ludHMiKTtvKGlLLCJjdXJseUJyYWNlcyIpfSk7YXN5bmMgZnVuY3Rpb24gc0sodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PWV0KGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgb3QodCxlLGx0KGUpKSxzPTgwLGw9MjAsdT1NYXRoLm1heChzLChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIpKjEuMjUsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgobCxhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZj1oLzIse2Nzc1N0eWxlczpkfT1lLHA9S2Uuc3ZnKGkpLG09WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPXUseT1oLHY9Zy1mLHg9eS80LGI9W3t4OnYseTowfSx7eCx5OjB9LHt4OjAseTp5LzJ9LHt4LHl9LHt4OnYseX0sLi4uazUoLXYsLXkvMixmLDUwLDI3MCw5MCldLHc9V3QoYiksXz1wLnBhdGgodyxtKSxUPWkuaW5zZXJ0KCgpPT5fLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gVC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLFQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMn0sICR7LWgvMn0pYCksUWUoZSxUKSxlLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gcWUucG9seWdvbihlLGIsRSl9LGl9dmFyIG9LPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7anQoKTtvKHNLLCJjdXJ2ZWRUcmFwZXpvaWQiKX0pO2FzeW5jIGZ1bmN0aW9uIGxLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrZS5wYWRkaW5nLGUud2lkdGg/PzApLHU9bC8yLGg9dS8oMi41K2wvNTApLGY9TWF0aC5tYXgoYS5oZWlnaHQraCtlLnBhZGRpbmcsZS5oZWlnaHQ/PzApLGQse2Nzc1N0eWxlczpwfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgbT1LZS5zdmcoaSksZz1mQWUoMCwwLGwsZix1LGgpLHk9ZEFlKDAsaCxsLGYsdSxoKSx2PW0ucGF0aChnLFplKGUse30pKSx4PW0ucGF0aCh5LFplKGUse2ZpbGw6Im5vbmUifSkpO2Q9aS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpLGQ9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpLGQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZkLmF0dHIoInN0eWxlIixwKX1lbHNle2xldCBtPWhBZSgwLDAsbCxmLHUsaCk7ZD1pLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLG0pLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEZuKHApKS5hdHRyKCJzdHlsZSIsbil9cmV0dXJuIGQuYXR0cigibGFiZWwtb2Zmc2V0LXkiLGgpLGQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMn0sICR7LShmLzIraCl9KWApLFFlKGUsZCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikrKGUucGFkZGluZz8/MCkvMS41LShhLnktKGEudG9wPz8wKSl9KWApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe2xldCBnPXFlLnJlY3QoZSxtKSx5PWcueC0oZS54Pz8wKTtpZih1IT0wJiYoTWF0aC5hYnMoeSk8KGUud2lkdGg/PzApLzJ8fE1hdGguYWJzKHkpPT0oZS53aWR0aD8/MCkvMiYmTWF0aC5hYnMoZy55LShlLnk/PzApKT4oZS5oZWlnaHQ/PzApLzItaCkpe2xldCB2PWgqaCooMS15KnkvKHUqdSkpO3Y+MCYmKHY9TWF0aC5zcXJ0KHYpKSx2PWgtdixtLnktKGUueT8/MCk+MCYmKHY9LXYpLGcueSs9dn1yZXR1cm4gZ30saX12YXIgaEFlLGZBZSxkQWUsY0s9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7aEFlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0fSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGEke2l9LCR7YX0gMCwwLDAgJHstcn0sMGAsYGwwLCR7bn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGwwLCR7LW59YF0uam9pbigiICIpLCJjcmVhdGVDeWxpbmRlclBhdGhEIiksZkFlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0fSwke2UrYX1gLGBNJHt0K3J9LCR7ZSthfWAsYGEke2l9LCR7YX0gMCwwLDAgJHstcn0sMGAsYGwwLCR7bn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGwwLCR7LW59YF0uam9pbigiICIpLCJjcmVhdGVPdXRlckN5bGluZGVyUGF0aEQiKSxkQWU9bygodCxlLHIsbixpLGEpPT5bYE0ke3Qtci8yfSwkey1uLzJ9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZUlubmVyQ3lsaW5kZXJQYXRoRCIpO28obEssImN5bGluZGVyIil9KTthc3luYyBmdW5jdGlvbiB1Syh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG90KHQsZSxsdChlKSksbD1hLndpZHRoK2UucGFkZGluZyx1PWEuaGVpZ2h0K2UucGFkZGluZyxoPXUqLjIsZj0tbC8yLGQ9LXUvMi1oLzIse2Nzc1N0eWxlczpwfT1lLG09S2Uuc3ZnKGkpLGc9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PVt7eDpmLHk6ZCtofSx7eDotZix5OmQraH0se3g6LWYseTotZH0se3g6Zix5Oi1kfSx7eDpmLHk6ZH0se3g6LWYseTpkfSx7eDotZix5OmQraH1dLHY9bS5wb2x5Z29uKHkubWFwKGI9PltiLngsYi55XSksZykseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHguYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZisoZS5wYWRkaW5nPz8wKS8yLShhLngtKGEubGVmdD8/MCkpfSwgJHtkK2grKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxRZShlLHgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBxZS5yZWN0KGUsYil9LGl9dmFyIGhLPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7anQoKTtvKHVLLCJkaXZpZGVkUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBmSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGhhbGZQYWRkaW5nOnN9PWF3YWl0IG90KHQsZSxsdChlKSksdT1hLndpZHRoLzIrcys1LGg9YS53aWR0aC8yK3MsZix7Y3NzU3R5bGVzOmR9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBwPUtlLnN2ZyhpKSxtPVplKGUse3JvdWdobmVzczouMixzdHJva2VXaWR0aDoyLjV9KSxnPVplKGUse3JvdWdobmVzczouMixzdHJva2VXaWR0aDoxLjV9KSx5PXAuY2lyY2xlKDAsMCx1KjIsbSksdj1wLmNpcmNsZSgwLDAsaCoyLGcpO2Y9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSxmLmF0dHIoImNsYXNzIixGbihlLmNzc0NsYXNzZXMpKS5hdHRyKCJzdHlsZSIsRm4oZCkpLGYubm9kZSgpPy5hcHBlbmRDaGlsZCh5KSxmLm5vZGUoKT8uYXBwZW5kQ2hpbGQodil9ZWxzZXtmPWkuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIik7bGV0IHA9Zi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLG09Zi5pbnNlcnQoImNpcmNsZSIpO2YuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsbikscC5hdHRyKCJjbGFzcyIsIm91dGVyLWNpcmNsZSIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyIix1KS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApLG0uYXR0cigiY2xhc3MiLCJpbm5lci1jaXJjbGUiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigiciIsaCkuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKX1yZXR1cm4gUWUoZSxmKSxlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWS5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixlLHUscCkscWUuY2lyY2xlKGUsdSxwKX0saX12YXIgZEs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO0Z0KCk7cXQoKTtYdCgpO2p0KCk7aHIoKTtvKGZLLCJkb3VibGVjaXJjbGUiKX0pO2Z1bmN0aW9uIHBLKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsYWJlbFN0eWxlczpuLG5vZGVTdHlsZXM6aX09ZXQoZSk7ZS5sYWJlbD0iIixlLmxhYmVsU3R5bGU9bjtsZXQgYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixsdChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLHM9Nyx7Y3NzU3R5bGVzOmx9PWUsdT1LZS5zdmcoYSkse25vZGVCb3JkZXI6aH09cixmPVplKGUse2ZpbGxTdHlsZToic29saWQifSk7ZS5sb29rIT09ImhhbmREcmF3biImJihmLnJvdWdobmVzcz0wKTtsZXQgZD11LmNpcmNsZSgwLDAscyoyLGYpLHA9YS5pbnNlcnQoKCk9PmQsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixgZmlsbDogJHtofSAhaW1wb3J0YW50O2ApLGwmJmwubGVuZ3RoPjAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixsKSxpJiZlLmxvb2shPT0iaGFuZERyYXduIiYmcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsaSksUWUoZSxwKSxlLmludGVyc2VjdD1mdW5jdGlvbihtKXtyZXR1cm4gWS5pbmZvKCJmaWxsZWRDaXJjbGUgaW50ZXJzZWN0IixlLHtyYWRpdXM6cyxwb2ludDptfSkscWUuY2lyY2xlKGUscyxtKX0sYX12YXIgbUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO2h0KCk7cXQoKTtYdCgpO0Z0KCk7byhwSywiZmlsbGVkQ2lyY2xlIil9KTthc3luYyBmdW5jdGlvbiBnSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG90KHQsZSxsdChlKSksbD1hLndpZHRoKyhlLnBhZGRpbmc/PzApLHU9bCthLmhlaWdodCxoPWwrYS5oZWlnaHQsZj1be3g6MCx5Oi11fSx7eDpoLHk6LXV9LHt4OmgvMix5OjB9XSx7Y3NzU3R5bGVzOmR9PWUscD1LZS5zdmcoaSksbT1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9V3QoZikseT1wLnBhdGgoZyxtKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHt1LzJ9KWApO3JldHVybiBkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPWwsZS5oZWlnaHQ9dSxRZShlLHYpLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWEud2lkdGgvMi0oYS54LShhLmxlZnQ/PzApKX0sICR7LXUvMisoZS5wYWRkaW5nPz8wKS8yKyhhLnktKGEudG9wPz8wKSl9KWApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBZLmluZm8oIlRyaWFuZ2xlIGludGVyc2VjdCIsZSxmLHgpLHFlLnBvbHlnb24oZSxmLHgpfSxpfXZhciB5Sz1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7RnQoKTtxdCgpO1h0KCk7anQoKTtGdCgpO28oZ0ssImZsaXBwZWRUcmlhbmdsZSIpfSk7ZnVuY3Rpb24gdksodCxlLHtkaXI6cixjb25maWc6e3N0YXRlOm4sdGhlbWVWYXJpYWJsZXM6aX19KXtsZXR7bm9kZVN0eWxlczphfT1ldChlKTtlLmxhYmVsPSIiO2xldCBzPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGx0KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkse2Nzc1N0eWxlczpsfT1lLHU9TWF0aC5tYXgoNzAsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoMTAsZT8uaGVpZ2h0Pz8wKTtyPT09IkxSIiYmKHU9TWF0aC5tYXgoMTAsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoNzAsZT8uaGVpZ2h0Pz8wKSk7bGV0IGY9LTEqdS8yLGQ9LTEqaC8yLHA9S2Uuc3ZnKHMpLG09WmUoZSx7c3Ryb2tlOmkubGluZUNvbG9yLGZpbGw6aS5saW5lQ29sb3J9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9cC5yZWN0YW5nbGUoZixkLHUsaCxtKSx5PXMuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKTtsJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbCksYSYmZS5sb29rIT09ImhhbmREcmF3biImJnkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGEpLFFlKGUseSk7bGV0IHY9bj8ucGFkZGluZz8/MDtyZXR1cm4gZS53aWR0aCYmZS5oZWlnaHQmJihlLndpZHRoKz12LzJ8fDAsZS5oZWlnaHQrPXYvMnx8MCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIHFlLnJlY3QoZSx4KX0sc312YXIgeEs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO3F0KCk7WHQoKTtGdCgpO28odkssImZvcmtKb2luIil9KTthc3luYyBmdW5jdGlvbiBiSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0IGk9ODAsYT01MCx7c2hhcGVTdmc6cyxiYm94Omx9PWF3YWl0IG90KHQsZSxsdChlKSksdT1NYXRoLm1heChpLGwud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksaD1NYXRoLm1heChhLGwuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPWgvMix7Y3NzU3R5bGVzOmR9PWUscD1LZS5zdmcocyksbT1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9W3t4Oi11LzIseTotaC8yfSx7eDp1LzItZix5Oi1oLzJ9LC4uLms1KC11LzIrZiwwLGYsNTAsOTAsMjcwKSx7eDp1LzItZix5OmgvMn0se3g6LXUvMix5OmgvMn1dLHk9V3QoZyksdj1wLnBhdGgoeSxtKSx4PXMuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLFFlKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFkuaW5mbygiUGlsbCBpbnRlcnNlY3QiLGUse3JhZGl1czpmLHBvaW50OmJ9KSxxZS5wb2x5Z29uKGUsZyxiKX0sc312YXIgd0s9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO0Z0KCk7cXQoKTtYdCgpO2p0KCk7byhiSywiaGFsZlJvdW5kZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIFRLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz00LGw9YS5oZWlnaHQrZS5wYWRkaW5nLHU9bC9zLGg9YS53aWR0aCsyKnUrZS5wYWRkaW5nLGY9W3t4OnUseTowfSx7eDpoLXUseTowfSx7eDpoLHk6LWwvMn0se3g6aC11LHk6LWx9LHt4OnUseTotbH0se3g6MCx5Oi1sLzJ9XSxkLHtjc3NTdHlsZXM6cH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IG09S2Uuc3ZnKGkpLGc9WmUoZSx7fSkseT1wQWUoMCwwLGgsbCx1KSx2PW0ucGF0aCh5LGcpO2Q9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1oLzJ9LCAke2wvMn0pYCkscCYmZC5hdHRyKCJzdHlsZSIscCl9ZWxzZSBkPUFhKGksaCxsLGYpO3JldHVybiBuJiZkLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPWgsZS5oZWlnaHQ9bCxRZShlLGQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBxZS5wb2x5Z29uKGUsZixtKX0saX12YXIgcEFlLGtLPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7anQoKTtTdSgpO3BBZT1vKCh0LGUscixuLGkpPT5bYE0ke3QraX0sJHtlfWAsYEwke3Qrci1pfSwke2V9YCxgTCR7dCtyfSwke2Utbi8yfWAsYEwke3Qrci1pfSwke2Utbn1gLGBMJHt0K2l9LCR7ZS1ufWAsYEwke3R9LCR7ZS1uLzJ9YCwiWiJdLmpvaW4oIiAiKSwiY3JlYXRlSGV4YWdvblBhdGhEIik7byhUSywiaGV4YWdvbiIpfSk7YXN5bmMgZnVuY3Rpb24gRUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PWV0KGUpO2UubGFiZWw9IiIsZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOml9PWF3YWl0IG90KHQsZSxsdChlKSksYT1NYXRoLm1heCgzMCxlPy53aWR0aD8/MCkscz1NYXRoLm1heCgzMCxlPy5oZWlnaHQ/PzApLHtjc3NTdHlsZXM6bH09ZSx1PUtlLnN2ZyhpKSxoPVplKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoaC5yb3VnaG5lc3M9MCxoLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZj1be3g6MCx5OjB9LHt4OmEseTowfSx7eDowLHk6c30se3g6YSx5OnN9XSxkPVd0KGYpLHA9dS5wYXRoKGQsaCksbT1pLmluc2VydCgoKT0+cCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG0uYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxsJiZlLmxvb2shPT0iaGFuZERyYXduIiYmbS5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixsKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmbS5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1hLzJ9LCAkey1zLzJ9KWApLFFlKGUsbSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIFkuaW5mbygiUGlsbCBpbnRlcnNlY3QiLGUse3BvaW50czpmfSkscWUucG9seWdvbihlLGYsZyl9LGl9dmFyIFNLPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtGdCgpO3F0KCk7WHQoKTtqdCgpO28oRUssImhvdXJnbGFzcyIpfSk7YXN5bmMgZnVuY3Rpb24gQ0sodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PWV0KGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsbGFiZWw6ZH09YXdhaXQgb3QodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxwPWUucG9zPT09InQiLG09bCxnPWwse25vZGVCb3JkZXI6eX09cix7c3R5bGVzTWFwOnZ9PW1jKGUpLHg9LWcvMixiPS1tLzIsdz1lLmxhYmVsPzg6MCxfPUtlLnN2ZyhoKSxUPVplKGUse3N0cm9rZToibm9uZSIsZmlsbDoibm9uZSJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKFQucm91Z2huZXNzPTAsVC5maWxsU3R5bGU9InNvbGlkIik7bGV0IEU9Xy5yZWN0YW5nbGUoeCxiLGcsbSxUKSxMPU1hdGgubWF4KGcsZi53aWR0aCksQz1tK2YuaGVpZ2h0K3csQT1fLnJlY3RhbmdsZSgtTC8yLC1DLzIsTCxDLHsuLi5ULGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6Im5vbmUifSksST1oLmluc2VydCgoKT0+RSwiOmZpcnN0LWNoaWxkIiksRD1oLmluc2VydCgoKT0+QSk7aWYoZS5pY29uKXtsZXQgaz1oLmFwcGVuZCgiZyIpO2suaHRtbChgPGc+JHthd2FpdCB3byhlLmljb24se2hlaWdodDpsLHdpZHRoOmwsZmFsbGJhY2tQcmVmaXg6IiJ9KX08L2c+YCk7bGV0IFI9ay5ub2RlKCkuZ2V0QkJveCgpLFM9Ui53aWR0aCxPPVIuaGVpZ2h0LE49Ui54LFA9Ui55O2suYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LVMvMi1OfSwke3A/Zi5oZWlnaHQvMit3LzItTy8yLVA6LWYuaGVpZ2h0LzItdy8yLU8vMi1QfSlgKSxrLmF0dHIoInN0eWxlIixgY29sb3I6ICR7di5nZXQoInN0cm9rZSIpPz95fTtgKX1yZXR1cm4gZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZi53aWR0aC8yLShmLngtKGYubGVmdD8/MCkpfSwke3A/LUMvMjpDLzItZi5oZWlnaHR9KWApLEkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHtwP2YuaGVpZ2h0LzIrdy8yOi1mLmhlaWdodC8yLXcvMn0pYCksUWUoZSxEKSxlLmludGVyc2VjdD1mdW5jdGlvbihrKXtpZihZLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLGspLCFlLmxhYmVsKXJldHVybiBxZS5yZWN0KGUsayk7bGV0IFI9ZS54Pz8wLFM9ZS55Pz8wLE89ZS5oZWlnaHQ/PzAsTj1bXTtyZXR1cm4gcD9OPVt7eDpSLWYud2lkdGgvMix5OlMtTy8yfSx7eDpSK2Yud2lkdGgvMix5OlMtTy8yfSx7eDpSK2Yud2lkdGgvMix5OlMtTy8yK2YuaGVpZ2h0K3d9LHt4OlIrZy8yLHk6Uy1PLzIrZi5oZWlnaHQrd30se3g6UitnLzIseTpTK08vMn0se3g6Ui1nLzIseTpTK08vMn0se3g6Ui1nLzIseTpTLU8vMitmLmhlaWdodCt3fSx7eDpSLWYud2lkdGgvMix5OlMtTy8yK2YuaGVpZ2h0K3d9XTpOPVt7eDpSLWcvMix5OlMtTy8yfSx7eDpSK2cvMix5OlMtTy8yfSx7eDpSK2cvMix5OlMtTy8yK219LHt4OlIrZi53aWR0aC8yLHk6Uy1PLzIrbX0se3g6UitmLndpZHRoLzIvMix5OlMrTy8yfSx7eDpSLWYud2lkdGgvMix5OlMrTy8yfSx7eDpSLWYud2lkdGgvMix5OlMtTy8yK219LHt4OlItZy8yLHk6Uy1PLzIrbX1dLHFlLnBvbHlnb24oZSxOLGspfSxofXZhciBBSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7aHQoKTtLYygpO3F0KCk7WHQoKTtGdCgpO28oQ0ssImljb24iKX0pO2FzeW5jIGZ1bmN0aW9uIF9LKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyLGZsb3djaGFydDpufX0pe2xldHtsYWJlbFN0eWxlczppfT1ldChlKTtlLmxhYmVsU3R5bGU9aTtsZXQgYT1lLmFzc2V0SGVpZ2h0Pz80OCxzPWUuYXNzZXRXaWR0aD8/NDgsbD1NYXRoLm1heChhLHMpLHU9bj8ud3JhcHBpbmdXaWR0aDtlLndpZHRoPU1hdGgubWF4KGwsdT8/MCk7bGV0e3NoYXBlU3ZnOmgsYmJveDpmLGxhYmVsOmR9PWF3YWl0IG90KHQsZSwiaWNvbi1zaGFwZSBkZWZhdWx0IikscD0yMCxtPWUubGFiZWw/ODowLGc9ZS5wb3M9PT0idCIse25vZGVCb3JkZXI6eSxtYWluQmtnOnZ9PXIse3N0eWxlc01hcDp4fT1tYyhlKSxiPUtlLnN2ZyhoKSx3PVplKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYody5yb3VnaG5lc3M9MCx3LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgXz14LmdldCgiZmlsbCIpO3cuc3Ryb2tlPV8/P3Y7bGV0IFQ9aC5hcHBlbmQoImciKTtlLmljb24mJlQuaHRtbChgPGc+JHthd2FpdCB3byhlLmljb24se2hlaWdodDpsLHdpZHRoOmwsZmFsbGJhY2tQcmVmaXg6IiJ9KX08L2c+YCk7bGV0IEU9VC5ub2RlKCkuZ2V0QkJveCgpLEw9RS53aWR0aCxDPUUuaGVpZ2h0LEE9RS54LEk9RS55LEQ9TWF0aC5tYXgoTCxDKSpNYXRoLlNRUlQyK3AqMixrPWIuY2lyY2xlKDAsMCxELHcpLFI9TWF0aC5tYXgoRCxmLndpZHRoKSxTPUQrZi5oZWlnaHQrbSxPPWIucmVjdGFuZ2xlKC1SLzIsLVMvMixSLFMsey4uLncsZmlsbDoidHJhbnNwYXJlbnQiLHN0cm9rZToibm9uZSJ9KSxOPWguaW5zZXJ0KCgpPT5rLCI6Zmlyc3QtY2hpbGQiKSxQPWguaW5zZXJ0KCgpPT5PKTtyZXR1cm4gVC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstTC8yLUF9LCR7Zz9mLmhlaWdodC8yK20vMi1DLzItSTotZi5oZWlnaHQvMi1tLzItQy8yLUl9KWApLFQuYXR0cigic3R5bGUiLGBjb2xvcjogJHt4LmdldCgic3Ryb2tlIik/P3l9O2ApLGQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHtnPy1TLzI6Uy8yLWYuaGVpZ2h0fSlgKSxOLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7Zz9mLmhlaWdodC8yK20vMjotZi5oZWlnaHQvMi1tLzJ9KWApLFFlKGUsUCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRil7cmV0dXJuIFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsRikscWUucmVjdChlLEYpfSxofXZhciBMSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7aHQoKTtLYygpO3F0KCk7WHQoKTtGdCgpO28oX0ssImljb25DaXJjbGUiKX0pO3ZhciBMYSx6aD1NKCgpPT57InVzZSBzdHJpY3QiO0xhPW8oKHQsZSxyLG4saSk9PlsiTSIsdCtpLGUsIkgiLHQrci1pLCJBIixpLGksMCwwLDEsdCtyLGUraSwiViIsZStuLWksIkEiLGksaSwwLDAsMSx0K3ItaSxlK24sIkgiLHQraSwiQSIsaSxpLDAsMCwxLHQsZStuLWksIlYiLGUraSwiQSIsaSxpLDAsMCwxLHQraSxlLCJaIl0uam9pbigiICIpLCJjcmVhdGVSb3VuZGVkUmVjdFBhdGhEIil9KTthc3luYyBmdW5jdGlvbiBESyh0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09ZXQoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixoYWxmUGFkZGluZzpkLGxhYmVsOnB9PWF3YWl0IG90KHQsZSwiaWNvbi1zaGFwZSBkZWZhdWx0IiksbT1lLnBvcz09PSJ0IixnPWwrZCoyLHk9bCtkKjIse25vZGVCb3JkZXI6dixtYWluQmtnOnh9PXIse3N0eWxlc01hcDpifT1tYyhlKSx3PS15LzIsXz0tZy8yLFQ9ZS5sYWJlbD84OjAsRT1LZS5zdmcoaCksTD1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKEwucm91Z2huZXNzPTAsTC5maWxsU3R5bGU9InNvbGlkIik7bGV0IEM9Yi5nZXQoImZpbGwiKTtMLnN0cm9rZT1DPz94O2xldCBBPUUucGF0aChMYSh3LF8seSxnLDUpLEwpLEk9TWF0aC5tYXgoeSxmLndpZHRoKSxEPWcrZi5oZWlnaHQrVCxrPUUucmVjdGFuZ2xlKC1JLzIsLUQvMixJLEQsey4uLkwsZmlsbDoidHJhbnNwYXJlbnQiLHN0cm9rZToibm9uZSJ9KSxSPWguaW5zZXJ0KCgpPT5BLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImljb24tc2hhcGUyIiksUz1oLmluc2VydCgoKT0+ayk7aWYoZS5pY29uKXtsZXQgTz1oLmFwcGVuZCgiZyIpO08uaHRtbChgPGc+JHthd2FpdCB3byhlLmljb24se2hlaWdodDpsLHdpZHRoOmwsZmFsbGJhY2tQcmVmaXg6IiJ9KX08L2c+YCk7bGV0IE49Ty5ub2RlKCkuZ2V0QkJveCgpLFA9Ti53aWR0aCxGPU4uaGVpZ2h0LEI9Ti54LCQ9Ti55O08uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LVAvMi1CfSwke20/Zi5oZWlnaHQvMitULzItRi8yLSQ6LWYuaGVpZ2h0LzItVC8yLUYvMi0kfSlgKSxPLmF0dHIoInN0eWxlIixgY29sb3I6ICR7Yi5nZXQoInN0cm9rZSIpPz92fTtgKX1yZXR1cm4gcC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZi53aWR0aC8yLShmLngtKGYubGVmdD8/MCkpfSwke20/LUQvMjpELzItZi5oZWlnaHR9KWApLFIuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHttP2YuaGVpZ2h0LzIrVC8yOi1mLmhlaWdodC8yLVQvMn0pYCksUWUoZSxTKSxlLmludGVyc2VjdD1mdW5jdGlvbihPKXtpZihZLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLE8pLCFlLmxhYmVsKXJldHVybiBxZS5yZWN0KGUsTyk7bGV0IE49ZS54Pz8wLFA9ZS55Pz8wLEY9ZS5oZWlnaHQ/PzAsQj1bXTtyZXR1cm4gbT9CPVt7eDpOLWYud2lkdGgvMix5OlAtRi8yfSx7eDpOK2Yud2lkdGgvMix5OlAtRi8yfSx7eDpOK2Yud2lkdGgvMix5OlAtRi8yK2YuaGVpZ2h0K1R9LHt4Ok4reS8yLHk6UC1GLzIrZi5oZWlnaHQrVH0se3g6Tit5LzIseTpQK0YvMn0se3g6Ti15LzIseTpQK0YvMn0se3g6Ti15LzIseTpQLUYvMitmLmhlaWdodCtUfSx7eDpOLWYud2lkdGgvMix5OlAtRi8yK2YuaGVpZ2h0K1R9XTpCPVt7eDpOLXkvMix5OlAtRi8yfSx7eDpOK3kvMix5OlAtRi8yfSx7eDpOK3kvMix5OlAtRi8yK2d9LHt4Ok4rZi53aWR0aC8yLHk6UC1GLzIrZ30se3g6TitmLndpZHRoLzIvMix5OlArRi8yfSx7eDpOLWYud2lkdGgvMix5OlArRi8yfSx7eDpOLWYud2lkdGgvMix5OlAtRi8yK2d9LHt4Ok4teS8yLHk6UC1GLzIrZ31dLHFlLnBvbHlnb24oZSxCLE8pfSxofXZhciBOSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7aHQoKTtLYygpO3F0KCk7WHQoKTt6aCgpO0Z0KCk7byhESywiaWNvblJvdW5kZWQiKX0pO2FzeW5jIGZ1bmN0aW9uIFJLKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyLGZsb3djaGFydDpufX0pe2xldHtsYWJlbFN0eWxlczppfT1ldChlKTtlLmxhYmVsU3R5bGU9aTtsZXQgYT1lLmFzc2V0SGVpZ2h0Pz80OCxzPWUuYXNzZXRXaWR0aD8/NDgsbD1NYXRoLm1heChhLHMpLHU9bj8ud3JhcHBpbmdXaWR0aDtlLndpZHRoPU1hdGgubWF4KGwsdT8/MCk7bGV0e3NoYXBlU3ZnOmgsYmJveDpmLGhhbGZQYWRkaW5nOmQsbGFiZWw6cH09YXdhaXQgb3QodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxtPWUucG9zPT09InQiLGc9bCtkKjIseT1sK2QqMix7bm9kZUJvcmRlcjp2LG1haW5Ca2c6eH09cix7c3R5bGVzTWFwOmJ9PW1jKGUpLHc9LXkvMixfPS1nLzIsVD1lLmxhYmVsPzg6MCxFPUtlLnN2ZyhoKSxMPVplKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoTC5yb3VnaG5lc3M9MCxMLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgQz1iLmdldCgiZmlsbCIpO0wuc3Ryb2tlPUM/P3g7bGV0IEE9RS5wYXRoKExhKHcsXyx5LGcsLjEpLEwpLEk9TWF0aC5tYXgoeSxmLndpZHRoKSxEPWcrZi5oZWlnaHQrVCxrPUUucmVjdGFuZ2xlKC1JLzIsLUQvMixJLEQsey4uLkwsZmlsbDoidHJhbnNwYXJlbnQiLHN0cm9rZToibm9uZSJ9KSxSPWguaW5zZXJ0KCgpPT5BLCI6Zmlyc3QtY2hpbGQiKSxTPWguaW5zZXJ0KCgpPT5rKTtpZihlLmljb24pe2xldCBPPWguYXBwZW5kKCJnIik7Ty5odG1sKGA8Zz4ke2F3YWl0IHdvKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgTj1PLm5vZGUoKS5nZXRCQm94KCksUD1OLndpZHRoLEY9Ti5oZWlnaHQsQj1OLngsJD1OLnk7Ty5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstUC8yLUJ9LCR7bT9mLmhlaWdodC8yK1QvMi1GLzItJDotZi5oZWlnaHQvMi1ULzItRi8yLSR9KWApLE8uYXR0cigic3R5bGUiLGBjb2xvcjogJHtiLmdldCgic3Ryb2tlIik/P3Z9O2ApfXJldHVybiBwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7bT8tRC8yOkQvMi1mLmhlaWdodH0pYCksUi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke20/Zi5oZWlnaHQvMitULzI6LWYuaGVpZ2h0LzItVC8yfSlgKSxRZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKE8pe2lmKFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsTyksIWUubGFiZWwpcmV0dXJuIHFlLnJlY3QoZSxPKTtsZXQgTj1lLng/PzAsUD1lLnk/PzAsRj1lLmhlaWdodD8/MCxCPVtdO3JldHVybiBtP0I9W3t4Ok4tZi53aWR0aC8yLHk6UC1GLzJ9LHt4Ok4rZi53aWR0aC8yLHk6UC1GLzJ9LHt4Ok4rZi53aWR0aC8yLHk6UC1GLzIrZi5oZWlnaHQrVH0se3g6Tit5LzIseTpQLUYvMitmLmhlaWdodCtUfSx7eDpOK3kvMix5OlArRi8yfSx7eDpOLXkvMix5OlArRi8yfSx7eDpOLXkvMix5OlAtRi8yK2YuaGVpZ2h0K1R9LHt4Ok4tZi53aWR0aC8yLHk6UC1GLzIrZi5oZWlnaHQrVH1dOkI9W3t4Ok4teS8yLHk6UC1GLzJ9LHt4Ok4reS8yLHk6UC1GLzJ9LHt4Ok4reS8yLHk6UC1GLzIrZ30se3g6TitmLndpZHRoLzIseTpQLUYvMitnfSx7eDpOK2Yud2lkdGgvMi8yLHk6UCtGLzJ9LHt4Ok4tZi53aWR0aC8yLHk6UCtGLzJ9LHt4Ok4tZi53aWR0aC8yLHk6UC1GLzIrZ30se3g6Ti15LzIseTpQLUYvMitnfV0scWUucG9seWdvbihlLEIsTyl9LGh9dmFyIE1LPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTtodCgpO0tjKCk7cXQoKTt6aCgpO1h0KCk7RnQoKTtvKFJLLCJpY29uU3F1YXJlIil9KTthc3luYyBmdW5jdGlvbiBJSyh0LGUse2NvbmZpZzp7Zmxvd2NoYXJ0OnJ9fSl7bGV0IG49bmV3IEltYWdlO24uc3JjPWU/LmltZz8/IiIsYXdhaXQgbi5kZWNvZGUoKTtsZXQgaT1OdW1iZXIobi5uYXR1cmFsV2lkdGgudG9TdHJpbmcoKS5yZXBsYWNlKCJweCIsIiIpKSxhPU51bWJlcihuLm5hdHVyYWxIZWlnaHQudG9TdHJpbmcoKS5yZXBsYWNlKCJweCIsIiIpKTtlLmltYWdlQXNwZWN0UmF0aW89aS9hO2xldHtsYWJlbFN0eWxlczpzfT1ldChlKTtlLmxhYmVsU3R5bGU9cztsZXQgbD1yPy53cmFwcGluZ1dpZHRoO2UuZGVmYXVsdFdpZHRoPXI/LndyYXBwaW5nV2lkdGg7bGV0IHU9TWF0aC5tYXgoZS5sYWJlbD9sPz8wOjAsZT8uYXNzZXRXaWR0aD8/aSksaD1lLmNvbnN0cmFpbnQ9PT0ib24iJiZlPy5hc3NldEhlaWdodD9lLmFzc2V0SGVpZ2h0KmUuaW1hZ2VBc3BlY3RSYXRpbzp1LGY9ZS5jb25zdHJhaW50PT09Im9uIj9oL2UuaW1hZ2VBc3BlY3RSYXRpbzplPy5hc3NldEhlaWdodD8/YTtlLndpZHRoPU1hdGgubWF4KGgsbD8/MCk7bGV0e3NoYXBlU3ZnOmQsYmJveDpwLGxhYmVsOm19PWF3YWl0IG90KHQsZSwiaW1hZ2Utc2hhcGUgZGVmYXVsdCIpLGc9ZS5wb3M9PT0idCIseT0taC8yLHY9LWYvMix4PWUubGFiZWw/ODowLGI9S2Uuc3ZnKGQpLHc9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih3LnJvdWdobmVzcz0wLHcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBfPWIucmVjdGFuZ2xlKHksdixoLGYsdyksVD1NYXRoLm1heChoLHAud2lkdGgpLEU9ZitwLmhlaWdodCt4LEw9Yi5yZWN0YW5nbGUoLVQvMiwtRS8yLFQsRSx7Li4udyxmaWxsOiJub25lIixzdHJva2U6Im5vbmUifSksQz1kLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIiksQT1kLmluc2VydCgoKT0+TCk7aWYoZS5pbWcpe2xldCBJPWQuYXBwZW5kKCJpbWFnZSIpO0kuYXR0cigiaHJlZiIsZS5pbWcpLEkuYXR0cigid2lkdGgiLGgpLEkuYXR0cigiaGVpZ2h0IixmKSxJLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJub25lIiksSS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstaC8yfSwke2c/RS8yLWY6LUUvMn0pYCl9cmV0dXJuIG0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXAud2lkdGgvMi0ocC54LShwLmxlZnQ/PzApKX0sJHtnPy1mLzItcC5oZWlnaHQvMi14LzI6Zi8yLXAuaGVpZ2h0LzIreC8yfSlgKSxDLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7Zz9wLmhlaWdodC8yK3gvMjotcC5oZWlnaHQvMi14LzJ9KWApLFFlKGUsQSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7aWYoWS5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxJKSwhZS5sYWJlbClyZXR1cm4gcWUucmVjdChlLEkpO2xldCBEPWUueD8/MCxrPWUueT8/MCxSPWUuaGVpZ2h0Pz8wLFM9W107cmV0dXJuIGc/Uz1be3g6RC1wLndpZHRoLzIseTprLVIvMn0se3g6RCtwLndpZHRoLzIseTprLVIvMn0se3g6RCtwLndpZHRoLzIseTprLVIvMitwLmhlaWdodCt4fSx7eDpEK2gvMix5OmstUi8yK3AuaGVpZ2h0K3h9LHt4OkQraC8yLHk6aytSLzJ9LHt4OkQtaC8yLHk6aytSLzJ9LHt4OkQtaC8yLHk6ay1SLzIrcC5oZWlnaHQreH0se3g6RC1wLndpZHRoLzIseTprLVIvMitwLmhlaWdodCt4fV06Uz1be3g6RC1oLzIseTprLVIvMn0se3g6RCtoLzIseTprLVIvMn0se3g6RCtoLzIseTprLVIvMitmfSx7eDpEK3Aud2lkdGgvMix5OmstUi8yK2Z9LHt4OkQrcC53aWR0aC8yLzIseTprK1IvMn0se3g6RC1wLndpZHRoLzIseTprK1IvMn0se3g6RC1wLndpZHRoLzIseTprLVIvMitmfSx7eDpELWgvMix5OmstUi8yK2Z9XSxxZS5wb2x5Z29uKGUsUyxJKX0sZH12YXIgT0s9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO2h0KCk7cXQoKTtYdCgpO0Z0KCk7byhJSywiaW1hZ2VTcXVhcmUiKX0pO2FzeW5jIGZ1bmN0aW9uIFBLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGw9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLHU9W3t4OjAseTowfSx7eDpzLHk6MH0se3g6cyszKmwvNix5Oi1sfSx7eDotMypsLzYseTotbH1dLGgse2Nzc1N0eWxlczpmfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZD1LZS5zdmcoaSkscD1aZShlLHt9KSxtPVd0KHUpLGc9ZC5wYXRoKG0scCk7aD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXMvMn0sICR7bC8yfSlgKSxmJiZoLmF0dHIoInN0eWxlIixmKX1lbHNlIGg9QWEoaSxzLGwsdSk7cmV0dXJuIG4mJmguYXR0cigic3R5bGUiLG4pLGUud2lkdGg9cyxlLmhlaWdodD1sLFFlKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIHFlLnBvbHlnb24oZSx1LGQpfSxpfXZhciBCSz1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7U3UoKTtvKFBLLCJpbnZfdHJhcGV6b2lkIil9KTthc3luYyBmdW5jdGlvbiBDZCh0LGUscil7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1ldChlKTtlLmxhYmVsU3R5bGU9bjtsZXR7c2hhcGVTdmc6YSxiYm94OnN9PWF3YWl0IG90KHQsZSxsdChlKSksbD1NYXRoLm1heChzLndpZHRoK3IubGFiZWxQYWRkaW5nWCoyLGU/LndpZHRofHwwKSx1PU1hdGgubWF4KHMuaGVpZ2h0K3IubGFiZWxQYWRkaW5nWSoyLGU/LmhlaWdodHx8MCksaD0tbC8yLGY9LXUvMixkLHtyeDpwLHJ5Om19PWUse2Nzc1N0eWxlczpnfT1lO2lmKHI/LnJ4JiZyLnJ5JiYocD1yLnJ4LG09ci5yeSksZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB5PUtlLnN2ZyhhKSx2PVplKGUse30pLHg9cHx8bT95LnBhdGgoTGEoaCxmLGwsdSxwfHwwKSx2KTp5LnJlY3RhbmdsZShoLGYsbCx1LHYpO2Q9YS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpLGQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsRm4oZykpfWVsc2UgZD1hLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsaSkuYXR0cigicngiLEZuKHApKS5hdHRyKCJyeSIsRm4obSkpLmF0dHIoIngiLGgpLmF0dHIoInkiLGYpLmF0dHIoIndpZHRoIixsKS5hdHRyKCJoZWlnaHQiLHUpO3JldHVybiBRZShlLGQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBxZS5yZWN0KGUseSl9LGF9dmFyIHZ2PU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO3poKCk7WHQoKTtqdCgpO2hyKCk7byhDZCwiZHJhd1JlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIEZLKHQsZSl7bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGxhYmVsOml9PWF3YWl0IG90KHQsZSwibGFiZWwiKSxhPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGEuYXR0cigid2lkdGgiLC4xKS5hdHRyKCJoZWlnaHQiLC4xKSxyLmF0dHIoImNsYXNzIiwibGFiZWwgZWRnZUxhYmVsIiksaS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKG4ud2lkdGgvMiktKG4ueC0obi5sZWZ0Pz8wKSl9LCAkey0obi5oZWlnaHQvMiktKG4ueS0obi50b3A/PzApKX0pYCksUWUoZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gcWUucmVjdChlLHUpfSxyfXZhciB6Sz1NKCgpPT57InVzZSBzdHJpY3QiO3Z2KCk7RnQoKTtxdCgpO28oRkssImxhYmVsUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gR0sodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PWV0KGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgb3QodCxlLGx0KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCksZT8ud2lkdGg/PzApLGw9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCksZT8uaGVpZ2h0Pz8wKSx1PVt7eDowLHk6MH0se3g6cyszKmwvNix5OjB9LHt4OnMseTotbH0se3g6LSgzKmwpLzYseTotbH1dLGgse2Nzc1N0eWxlczpmfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZD1LZS5zdmcoaSkscD1aZShlLHt9KSxtPVd0KHUpLGc9ZC5wYXRoKG0scCk7aD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXMvMn0sICR7bC8yfSlgKSxmJiZoLmF0dHIoInN0eWxlIixmKX1lbHNlIGg9QWEoaSxzLGwsdSk7cmV0dXJuIG4mJmguYXR0cigic3R5bGUiLG4pLGUud2lkdGg9cyxlLmhlaWdodD1sLFFlKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIHFlLnBvbHlnb24oZSx1LGQpfSxpfXZhciAkSz1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7U3UoKTtvKEdLLCJsZWFuX2xlZnQiKX0pO2FzeW5jIGZ1bmN0aW9uIFZLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApLGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGU/LmhlaWdodD8/MCksdT1be3g6LTMqbC82LHk6MH0se3g6cyx5OjB9LHt4OnMrMypsLzYseTotbH0se3g6MCx5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPUtlLnN2ZyhpKSxwPVplKGUse30pLG09V3QodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1BYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsUWUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gcWUucG9seWdvbihlLHUsZCl9LGl9dmFyIFVLPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7anQoKTtTdSgpO28oVkssImxlYW5fcmlnaHQiKX0pO2Z1bmN0aW9uIEhLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsPSIiLGUubGFiZWxTdHlsZT1yO2xldCBpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGx0KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkse2Nzc1N0eWxlczphfT1lLHM9TWF0aC5tYXgoMzUsZT8ud2lkdGg/PzApLGw9TWF0aC5tYXgoMzUsZT8uaGVpZ2h0Pz8wKSx1PTcsaD1be3g6cyx5OjB9LHt4OjAseTpsK3UvMn0se3g6cy0yKnUseTpsK3UvMn0se3g6MCx5OjIqbH0se3g6cyx5OmwtdS8yfSx7eDoyKnUseTpsLXUvMn1dLGY9S2Uuc3ZnKGkpLGQ9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihkLnJvdWdobmVzcz0wLGQuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBwPVd0KGgpLG09Zi5wYXRoKHAsZCksZz1pLmluc2VydCgoKT0+bSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGEmJmUubG9vayE9PSJoYW5kRHJhd24iJiZnLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixhKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmZy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksZy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoLSR7cy8yfSwkey1sfSlgKSxRZShlLGcpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBZLmluZm8oImxpZ2h0bmluZ0JvbHQgaW50ZXJzZWN0IixlLHkpLHFlLnBvbHlnb24oZSxoLHkpfSxpfXZhciBXSz1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7RnQoKTtYdCgpO2p0KCk7cXQoKTtGdCgpO28oSEssImxpZ2h0bmluZ0JvbHQiKX0pO2FzeW5jIGZ1bmN0aW9uIFlLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCksZS53aWR0aD8/MCksdT1sLzIsaD11LygyLjUrbC81MCksZj1NYXRoLm1heChhLmhlaWdodCtoKyhlLnBhZGRpbmc/PzApLGUuaGVpZ2h0Pz8wKSxkPWYqLjEscCx7Y3NzU3R5bGVzOm19PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBnPUtlLnN2ZyhpKSx5PWdBZSgwLDAsbCxmLHUsaCxkKSx2PXlBZSgwLGgsbCxmLHUsaCkseD1aZShlLHt9KSxiPWcucGF0aCh5LHgpLHc9Zy5wYXRoKHYseCk7aS5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwibGluZSIpLHA9aS5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLHAuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxtJiZwLmF0dHIoInN0eWxlIixtKX1lbHNle2xldCBnPW1BZSgwLDAsbCxmLHUsaCxkKTtwPWkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIsZykuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsRm4obSkpLmF0dHIoInN0eWxlIixuKX1yZXR1cm4gcC5hdHRyKCJsYWJlbC1vZmZzZXQteSIsaCkscC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yfSwgJHstKGYvMitoKX0pYCksUWUoZSxwKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKStoLShhLnktKGEudG9wPz8wKSl9KWApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGcpe2xldCB5PXFlLnJlY3QoZSxnKSx2PXkueC0oZS54Pz8wKTtpZih1IT0wJiYoTWF0aC5hYnModik8KGUud2lkdGg/PzApLzJ8fE1hdGguYWJzKHYpPT0oZS53aWR0aD8/MCkvMiYmTWF0aC5hYnMoeS55LShlLnk/PzApKT4oZS5oZWlnaHQ/PzApLzItaCkpe2xldCB4PWgqaCooMS12KnYvKHUqdSkpO3g+MCYmKHg9TWF0aC5zcXJ0KHgpKSx4PWgteCxnLnktKGUueT8/MCk+MCYmKHg9LXgpLHkueSs9eH1yZXR1cm4geX0saX12YXIgbUFlLGdBZSx5QWUscUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7bUFlPW8oKHQsZSxyLG4saSxhLHMpPT5bYE0ke3R9LCR7ZSthfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gLGBNJHt0fSwke2UrYStzfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYF0uam9pbigiICIpLCJjcmVhdGVDeWxpbmRlclBhdGhEIiksZ0FlPW8oKHQsZSxyLG4saSxhLHMpPT5bYE0ke3R9LCR7ZSthfWAsYE0ke3Qrcn0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gLGBNJHt0fSwke2UrYStzfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYF0uam9pbigiICIpLCJjcmVhdGVPdXRlckN5bGluZGVyUGF0aEQiKSx5QWU9bygodCxlLHIsbixpLGEpPT5bYE0ke3Qtci8yfSwkey1uLzJ9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZUlubmVyQ3lsaW5kZXJQYXRoRCIpO28oWUssImxpbmVkQ3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIFhLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD11LzQsZj11K2gse2Nzc1N0eWxlczpkfT1lLHA9S2Uuc3ZnKGkpLG09WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVt7eDotbC8yLWwvMiouMSx5Oi1mLzJ9LHt4Oi1sLzItbC8yKi4xLHk6Zi8yfSwuLi56bygtbC8yLWwvMiouMSxmLzIsbC8yK2wvMiouMSxmLzIsaCwuOCkse3g6bC8yK2wvMiouMSx5Oi1mLzJ9LHt4Oi1sLzItbC8yKi4xLHk6LWYvMn0se3g6LWwvMix5Oi1mLzJ9LHt4Oi1sLzIseTpmLzIqMS4xfSx7eDotbC8yLHk6LWYvMn1dLHk9cC5wb2x5Z29uKGcubWFwKHg9Plt4LngseC55XSksbSksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHstaC8yfSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCkrbC8yKi4xLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LXUvMisoZS5wYWRkaW5nPz8wKS1oLzItKGEueS0oYS50b3A/PzApKX0pYCksUWUoZSx2KSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gcWUucG9seWdvbihlLGcseCl9LGl9dmFyIGpLPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO2p0KCk7WHQoKTtvKFhLLCJsaW5lZFdhdmVFZGdlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIEtLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD01LGY9LWwvMixkPS11LzIse2Nzc1N0eWxlczpwfT1lLG09S2Uuc3ZnKGkpLGc9WmUoZSx7fSkseT1be3g6Zi1oLHk6ZCtofSx7eDpmLWgseTpkK3UraH0se3g6ZitsLWgseTpkK3UraH0se3g6ZitsLWgseTpkK3V9LHt4OmYrbCx5OmQrdX0se3g6ZitsLHk6ZCt1LWh9LHt4OmYrbCtoLHk6ZCt1LWh9LHt4OmYrbCtoLHk6ZC1ofSx7eDpmK2gseTpkLWh9LHt4OmYraCx5OmR9LHt4OmYseTpkfSx7eDpmLHk6ZCtofV0sdj1be3g6Zix5OmQraH0se3g6ZitsLWgseTpkK2h9LHt4OmYrbC1oLHk6ZCt1fSx7eDpmK2wseTpkK3V9LHt4OmYrbCx5OmR9LHt4OmYseTpkfV07ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PVd0KHkpLGI9bS5wYXRoKHgsZyksdz1XdCh2KSxfPW0ucGF0aCh3LHsuLi5nLGZpbGw6Im5vbmUifSksVD1pLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFQuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS1oLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK2gtKGEueS0oYS50b3A/PzApKX0pYCksUWUoZSxUKSxlLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gcWUucG9seWdvbihlLHksRSl9LGl9dmFyIFFLPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtYdCgpO2p0KCk7cXQoKTtvKEtLLCJtdWx0aVJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIFpLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD11LzQsZj11K2gsZD0tbC8yLHA9LWYvMixtPTUse2Nzc1N0eWxlczpnfT1lLHk9em8oZC1tLHArZittLGQrbC1tLHArZittLGgsLjgpLHY9eT8uW3kubGVuZ3RoLTFdLHg9W3t4OmQtbSx5OnArbX0se3g6ZC1tLHk6cCtmK219LC4uLnkse3g6ZCtsLW0seTp2LnktbX0se3g6ZCtsLHk6di55LW19LHt4OmQrbCx5OnYueS0yKm19LHt4OmQrbCttLHk6di55LTIqbX0se3g6ZCtsK20seTpwLW19LHt4OmQrbSx5OnAtbX0se3g6ZCttLHk6cH0se3g6ZCx5OnB9LHt4OmQseTpwK219XSxiPVt7eDpkLHk6cCttfSx7eDpkK2wtbSx5OnArbX0se3g6ZCtsLW0seTp2LnktbX0se3g6ZCtsLHk6di55LW19LHt4OmQrbCx5OnB9LHt4OmQseTpwfV0sdz1LZS5zdmcoaSksXz1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKF8ucm91Z2huZXNzPTAsXy5maWxsU3R5bGU9InNvbGlkIik7bGV0IFQ9V3QoeCksRT13LnBhdGgoVCxfKSxMPVd0KGIpLEM9dy5wYXRoKEwsXyksQT1pLmluc2VydCgoKT0+RSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIEEuaW5zZXJ0KCgpPT5DKSxBLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZyYmZS5sb29rIT09ImhhbmREcmF3biImJkEuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGcpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZBLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxBLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktbS0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKSttLWgvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxRZShlLEEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEkpe3JldHVybiBxZS5wb2x5Z29uKGUseCxJKX0saX12YXIgSks9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO3F0KCk7anQoKTtYdCgpO28oWkssIm11bHRpV2F2ZUVkZ2VkUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBlUSh0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cn19KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PWV0KGUpO2UubGFiZWxTdHlsZT1uLGUudXNlSHRtbExhYmVsc3x8U3IoKS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMhPT0hMXx8KGUuY2VudGVyTGFiZWw9ITApO2xldHtzaGFwZVN2ZzpzLGJib3g6bH09YXdhaXQgb3QodCxlLGx0KGUpKSx1PU1hdGgubWF4KGwud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksaD1NYXRoLm1heChsLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZj0tdS8yLGQ9LWgvMix7Y3NzU3R5bGVzOnB9PWUsbT1LZS5zdmcocyksZz1aZShlLHtmaWxsOnIubm90ZUJrZ0NvbG9yLHN0cm9rZTpyLm5vdGVCb3JkZXJDb2xvcn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeT1tLnJlY3RhbmdsZShmLGQsdSxoLGcpLHY9cy5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpO3JldHVybiB2LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLGkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxRZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBxZS5yZWN0KGUseCl9LHN9dmFyIHRRPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTtxdCgpO1h0KCk7RnQoKTtVYSgpO28oZVEsIm5vdGUiKX0pO2FzeW5jIGZ1bmN0aW9uIHJRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz1hLndpZHRoK2UucGFkZGluZyxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PXMrbCxoPVt7eDp1LzIseTowfSx7eDp1LHk6LXUvMn0se3g6dS8yLHk6LXV9LHt4OjAseTotdS8yfV0sZix7Y3NzU3R5bGVzOmR9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBwPUtlLnN2ZyhpKSxtPVplKGUse30pLGc9dkFlKDAsMCx1KSx5PXAucGF0aChnLG0pO2Y9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAke3UvMn0pYCksZCYmZi5hdHRyKCJzdHlsZSIsZCl9ZWxzZSBmPUFhKGksdSx1LGgpO3JldHVybiBuJiZmLmF0dHIoInN0eWxlIixuKSxRZShlLGYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZLmRlYnVnKGBBUEExMiBJbnRlcnNlY3QgY2FsbGVkIFNQTElUCnBvaW50OmAscCxgCm5vZGU6CmAsZSxgCnJlczpgLHFlLnBvbHlnb24oZSxoLHApKSxxZS5wb2x5Z29uKGUsaCxwKX0saX12YXIgdkFlLG5RPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtGdCgpO3F0KCk7WHQoKTtqdCgpO1N1KCk7dkFlPW8oKHQsZSxyKT0+W2BNJHt0K3IvMn0sJHtlfWAsYEwke3Qrcn0sJHtlLXIvMn1gLGBMJHt0K3IvMn0sJHtlLXJ9YCxgTCR7dH0sJHtlLXIvMn1gLCJaIl0uam9pbigiICIpLCJjcmVhdGVEZWNpc2lvbkJveFBhdGhEIik7byhyUSwicXVlc3Rpb24iKX0pO2FzeW5jIGZ1bmN0aW9uIGlRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCksZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCksZT8uaGVpZ2h0Pz8wKSxoPS1sLzIsZj0tdS8yLGQ9Zi8yLHA9W3t4OmgrZCx5OmZ9LHt4OmgseTowfSx7eDpoK2QseTotZn0se3g6LWgseTotZn0se3g6LWgseTpmfV0se2Nzc1N0eWxlczptfT1lLGc9S2Uuc3ZnKGkpLHk9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih5LnJvdWdobmVzcz0wLHkuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB2PVd0KHApLHg9Zy5wYXRoKHYseSksYj1pLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGIuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxtJiZlLmxvb2shPT0iaGFuZERyYXduIiYmYi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGIuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWQvMn0sMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1kLzItYS53aWR0aC8yLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpLShhLnktKGEudG9wPz8wKSl9KWApLFFlKGUsYiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHFlLnBvbHlnb24oZSxwLHcpfSxpfXZhciBhUT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7byhpUSwicmVjdF9sZWZ0X2ludl9hcnJvdyIpfSk7ZnVuY3Rpb24geEFlKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9YXN5bmMgZnVuY3Rpb24gYkFlKHQpe2xldCBlPXplKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLHI9ZS5hcHBlbmQoInhodG1sOmRpdiIpLG49dC5sYWJlbDt0LmxhYmVsJiZwaSh0LmxhYmVsKSYmKG49YXdhaXQgaGgodC5sYWJlbC5yZXBsYWNlKGplLmxpbmVCcmVha1JlZ2V4LGAKYCksZGUoKSkpO2xldCBpPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiByLmh0bWwoJzxzcGFuIGNsYXNzPSInK2krJyIgJysodC5sYWJlbFN0eWxlPydzdHlsZT0iJyt0LmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrbisiPC9zcGFuPiIpLHhBZShyLHQubGFiZWxTdHlsZSksci5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLHIuc3R5bGUoInBhZGRpbmctcmlnaHQiLCIxcHgiKSxyLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLHIuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksZS5ub2RlKCl9dmFyIHdBZSxnYyxJNT1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7aHQoKTtWdCgpO2ZyKCk7aHIoKTtvKHhBZSwiYXBwbHlTdHlsZSIpO28oYkFlLCJhZGRIdG1sTGFiZWwiKTt3QWU9byhhc3luYyh0LGUscixuKT0+e2xldCBpPXR8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0IiYmKGk9aVswXSkseHIoZGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2k9aS5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksWS5pbmZvKCJ2ZXJ0ZXhUZXh0IitpKTtsZXQgYT17aXNOb2RlOm4sbGFiZWw6Q2EoaSkucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLGw9PmA8aSBjbGFzcz0nJHtsLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTplJiZlLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBhd2FpdCBiQWUoYSl9ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtsZXQgcz1bXTt0eXBlb2YgaT09InN0cmluZyI/cz1pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT9zPWk6cz1bXTtmb3IobGV0IGwgb2Ygcyl7bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7dS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSx1LnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSx1LnNldEF0dHJpYnV0ZSgieCIsIjAiKSxyP3Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOnUuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHUudGV4dENvbnRlbnQ9bC50cmltKCksYS5hcHBlbmRDaGlsZCh1KX1yZXR1cm4gYX19LCJjcmVhdGVMYWJlbCIpLGdjPXdBZX0pO2FzeW5jIGZ1bmN0aW9uIHNRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXQgaTtlLmNzc0NsYXNzZXM/aT0ibm9kZSAiK2UuY3NzQ2xhc3NlczppPSJub2RlIGRlZmF1bHQiO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxzPWEuaW5zZXJ0KCJnIiksbD1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsbiksdT1lLmRlc2NyaXB0aW9uLGg9ZS5sYWJlbCxmPWwubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IGdjKGgsZS5sYWJlbFN0eWxlLCEwLCEwKSksZD17d2lkdGg6MCxoZWlnaHQ6MH07aWYoeHIoZGUoKT8uZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSl7bGV0IEM9Zi5jaGlsZHJlblswXSxBPXplKGYpO2Q9Qy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBLmF0dHIoIndpZHRoIixkLndpZHRoKSxBLmF0dHIoImhlaWdodCIsZC5oZWlnaHQpfVkuaW5mbygiVGV4dCAyIix1KTtsZXQgcD11fHxbXSxtPWYuZ2V0QkJveCgpLGc9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgZ2MocC5qb2luP3Auam9pbigiPGJyLz4iKTpwLGUubGFiZWxTdHlsZSwhMCwhMCkpLHk9Zy5jaGlsZHJlblswXSx2PXplKGcpO2Q9eS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2LmF0dHIoIndpZHRoIixkLndpZHRoKSx2LmF0dHIoImhlaWdodCIsZC5oZWlnaHQpO2xldCB4PShlLnBhZGRpbmd8fDApLzI7emUoZykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKyhkLndpZHRoPm0ud2lkdGg/MDoobS53aWR0aC1kLndpZHRoKS8yKSsiLCAiKyhtLmhlaWdodCt4KzUpKyIpIiksemUoZikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKyhkLndpZHRoPG0ud2lkdGg/MDotKG0ud2lkdGgtZC53aWR0aCkvMikrIiwgMCkiKSxkPWwubm9kZSgpLmdldEJCb3goKSxsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIisoLWQuaGVpZ2h0LzIteCszKSsiKSIpO2xldCBiPWQud2lkdGgrKGUucGFkZGluZ3x8MCksdz1kLmhlaWdodCsoZS5wYWRkaW5nfHwwKSxfPS1kLndpZHRoLzIteCxUPS1kLmhlaWdodC8yLXgsRSxMO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgQz1LZS5zdmcoYSksQT1aZShlLHt9KSxJPUMucGF0aChMYShfLFQsYix3LGUucnh8fDApLEEpLEQ9Qy5saW5lKC1kLndpZHRoLzIteCwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gsZC53aWR0aC8yK3gsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4LEEpO0w9YS5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEkpLEQpLCI6Zmlyc3QtY2hpbGQiKSxFPWEuaW5zZXJ0KCgpPT4oWS5kZWJ1ZygiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDIixJKSxJKSwiOmZpcnN0LWNoaWxkIil9ZWxzZSBFPXMuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksTD1zLmluc2VydCgibGluZSIpLEUuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJ4IiwtZC53aWR0aC8yLXgpLmF0dHIoInkiLC1kLmhlaWdodC8yLXgpLmF0dHIoIndpZHRoIixkLndpZHRoKyhlLnBhZGRpbmd8fDApKS5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0KyhlLnBhZGRpbmd8fDApKSxMLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtZC53aWR0aC8yLXgpLmF0dHIoIngyIixkLndpZHRoLzIreCkuYXR0cigieTEiLC1kLmhlaWdodC8yLXgrbS5oZWlnaHQreCkuYXR0cigieTIiLC1kLmhlaWdodC8yLXgrbS5oZWlnaHQreCk7cmV0dXJuIFFlKGUsRSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHFlLnJlY3QoZSxDKX0sYX12YXIgb1E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO2ZyKCk7RnQoKTtJNSgpO3F0KCk7WHQoKTtqdCgpO1Z0KCk7emgoKTtodCgpO28oc1EsInJlY3RXaXRoVGl0bGUiKX0pO2FzeW5jIGZ1bmN0aW9uIGxRKHQsZSl7bGV0IHI9e3J4OjUscnk6NSxjbGFzc2VzOiIiLGxhYmVsUGFkZGluZ1g6KGU/LnBhZGRpbmd8fDApKjEsbGFiZWxQYWRkaW5nWTooZT8ucGFkZGluZ3x8MCkqMX07cmV0dXJuIENkKHQsZSxyKX12YXIgY1E9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2digpO28obFEsInJvdW5kZWRSZWN0Iil9KTthc3luYyBmdW5jdGlvbiB1USh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG90KHQsZSxsdChlKSksbD1lPy5wYWRkaW5nPz8wLHU9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPS1hLndpZHRoLzItbCxkPS1hLmhlaWdodC8yLWwse2Nzc1N0eWxlczpwfT1lLG09S2Uuc3ZnKGkpLGc9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PVt7eDpmLHk6ZH0se3g6Zit1KzgseTpkfSx7eDpmK3UrOCx5OmQraH0se3g6Zi04LHk6ZCtofSx7eDpmLTgseTpkfSx7eDpmLHk6ZH0se3g6Zix5OmQraH1dLHY9bS5wb2x5Z29uKHkubWFwKGI9PltiLngsYi55XSksZykseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHguYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsRm4ocCkpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yKzQrKGUucGFkZGluZz8/MCktKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LWgvMisoZS5wYWRkaW5nPz8wKS0oYS55LShhLnRvcD8/MCkpfSlgKSxRZShlLHgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBxZS5yZWN0KGUsYil9LGl9dmFyIGhRPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7anQoKTtocigpO28odVEsInNoYWRlZFByb2Nlc3MiKX0pO2FzeW5jIGZ1bmN0aW9uIGZRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD0tbC8yLGY9LXUvMix7Y3NzU3R5bGVzOmR9PWUscD1LZS5zdmcoaSksbT1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9W3t4OmgseTpmfSx7eDpoLHk6Zit1fSx7eDpoK2wseTpmK3V9LHt4OmgrbCx5OmYtdS8yfV0seT1XdChnKSx2PXAucGF0aCh5LG0pLHg9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbikseC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwgJHt1LzR9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sICR7LXUvNCsoZS5wYWRkaW5nPz8wKS0oYS55LShhLnRvcD8/MCkpfSlgKSxRZShlLHgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBxZS5wb2x5Z29uKGUsZyxiKX0saX12YXIgZFE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO3F0KCk7WHQoKTtqdCgpO28oZlEsInNsb3BlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIHBRKHQsZSl7bGV0IHI9e3J4OjAscnk6MCxjbGFzc2VzOiIiLGxhYmVsUGFkZGluZ1g6KGU/LnBhZGRpbmd8fDApKjIsbGFiZWxQYWRkaW5nWTooZT8ucGFkZGluZ3x8MCkqMX07cmV0dXJuIENkKHQsZSxyKX12YXIgbVE9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2digpO28ocFEsInNxdWFyZVJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIGdRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz1hLmhlaWdodCtlLnBhZGRpbmcsbD1hLndpZHRoK3MvNCtlLnBhZGRpbmcsdSx7Y3NzU3R5bGVzOmh9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBmPUtlLnN2ZyhpKSxkPVplKGUse30pLHA9TGEoLWwvMiwtcy8yLGwscyxzLzIpLG09Zi5wYXRoKHAsZCk7dT1pLmluc2VydCgoKT0+bSwiOmZpcnN0LWNoaWxkIiksdS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixGbihoKSl9ZWxzZSB1PWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksdS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyeCIscy8yKS5hdHRyKCJyeSIscy8yKS5hdHRyKCJ4IiwtbC8yKS5hdHRyKCJ5Iiwtcy8yKS5hdHRyKCJ3aWR0aCIsbCkuYXR0cigiaGVpZ2h0IixzKTtyZXR1cm4gUWUoZSx1KSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gcWUucmVjdChlLGYpfSxpfXZhciB5UT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7emgoKTtocigpO28oZ1EsInN0YWRpdW0iKX0pO2FzeW5jIGZ1bmN0aW9uIHZRKHQsZSl7cmV0dXJuIENkKHQsZSx7cng6NSxyeTo1LGNsYXNzZXM6ImZsb3djaGFydC1ub2RlIn0pfXZhciB4UT1NKCgpPT57InVzZSBzdHJpY3QiO3Z2KCk7byh2USwic3RhdGUiKX0pO2Z1bmN0aW9uIGJRKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsYWJlbFN0eWxlczpuLG5vZGVTdHlsZXM6aX09ZXQoZSk7ZS5sYWJlbFN0eWxlPW47bGV0e2Nzc1N0eWxlczphfT1lLHtsaW5lQ29sb3I6cyxzdGF0ZUJvcmRlcjpsLG5vZGVCb3JkZXI6dX09cixoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksZj1LZS5zdmcoaCksZD1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGQucm91Z2huZXNzPTAsZC5maWxsU3R5bGU9InNvbGlkIik7bGV0IHA9Zi5jaXJjbGUoMCwwLDE0LHsuLi5kLHN0cm9rZTpzLHN0cm9rZVdpZHRoOjJ9KSxtPWw/P3UsZz1mLmNpcmNsZSgwLDAsNSx7Li4uZCxmaWxsOm0sc3Ryb2tlOm0sc3Ryb2tlV2lkdGg6MixmaWxsU3R5bGU6InNvbGlkIn0pLHk9aC5pbnNlcnQoKCk9PnAsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB5Lmluc2VydCgoKT0+ZyksYSYmeS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYSksaSYmeS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsaSksUWUoZSx5KSxlLmludGVyc2VjdD1mdW5jdGlvbih2KXtyZXR1cm4gcWUuY2lyY2xlKGUsNyx2KX0saH12YXIgd1E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO3F0KCk7WHQoKTtGdCgpO28oYlEsInN0YXRlRW5kIil9KTtmdW5jdGlvbiBUUSh0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cn19KXtsZXR7bGluZUNvbG9yOm59PXIsaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBsPUtlLnN2ZyhpKS5jaXJjbGUoMCwwLDE0LENqKG4pKTthPWkuaW5zZXJ0KCgpPT5sKSxhLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpfWVsc2UgYT1pLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksYS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KTtyZXR1cm4gUWUoZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gcWUuY2lyY2xlKGUsNyxzKX0saX12YXIga1E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO3F0KCk7WHQoKTtGdCgpO28oVFEsInN0YXRlU3RhcnQiKX0pO2FzeW5jIGZ1bmN0aW9uIEVRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz0oZT8ucGFkZGluZ3x8MCkvMixsPWEud2lkdGgrZS5wYWRkaW5nLHU9YS5oZWlnaHQrZS5wYWRkaW5nLGg9LWEud2lkdGgvMi1zLGY9LWEuaGVpZ2h0LzItcyxkPVt7eDowLHk6MH0se3g6bCx5OjB9LHt4OmwseTotdX0se3g6MCx5Oi11fSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpsKzgseTowfSx7eDpsKzgseTotdX0se3g6LTgseTotdX0se3g6LTgseTowfV07aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBwPUtlLnN2ZyhpKSxtPVplKGUse30pLGc9cC5yZWN0YW5nbGUoaC04LGYsbCsxNix1LG0pLHk9cC5saW5lKGgsZixoLGYrdSxtKSx2PXAubGluZShoK2wsZixoK2wsZit1LG0pO2kuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKSxpLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7bGV0IHg9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLHtjc3NTdHlsZXM6Yn09ZTt4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEZuKGIpKSxRZShlLHgpfWVsc2V7bGV0IHA9QWEoaSxsLHUsZCk7biYmcC5hdHRyKCJzdHlsZSIsbiksUWUoZSxwKX1yZXR1cm4gZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHFlLnBvbHlnb24oZSxkLHApfSxpfXZhciBTUT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7U3UoKTtocigpO28oRVEsInN1YnJvdXRpbmUiKX0pO2FzeW5jIGZ1bmN0aW9uIENRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGw9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLHU9LXMvMixoPS1sLzIsZj0uMipsLGQ9LjIqbCx7Y3NzU3R5bGVzOnB9PWUsbT1LZS5zdmcoaSksZz1aZShlLHt9KSx5PVt7eDp1LWYvMix5Omh9LHt4OnUrcytmLzIseTpofSx7eDp1K3MrZi8yLHk6aCtsfSx7eDp1LWYvMix5OmgrbH1dLHY9W3t4OnUrcy1mLzIseTpoK2x9LHt4OnUrcytmLzIseTpoK2x9LHt4OnUrcytmLzIseTpoK2wtZH1dO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1XdCh5KSxiPW0ucGF0aCh4LGcpLHc9V3QodiksXz1tLnBhdGgodyx7Li4uZyxmaWxsU3R5bGU6InNvbGlkIn0pLFQ9aS5pbnNlcnQoKCk9Pl8sIjpmaXJzdC1jaGlsZCIpO3JldHVybiBULmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksVC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmVC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUWUoZSxUKSxlLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gcWUucG9seWdvbihlLHksRSl9LGl9dmFyIEFRPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtYdCgpO2p0KCk7cXQoKTtvKENRLCJ0YWdnZWRSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBfUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG90KHQsZSxsdChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS80LGY9LjIqbCxkPS4yKnUscD11K2gse2Nzc1N0eWxlczptfT1lLGc9S2Uuc3ZnKGkpLHk9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih5LnJvdWdobmVzcz0wLHkuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB2PVt7eDotbC8yLWwvMiouMSx5OnAvMn0sLi4uem8oLWwvMi1sLzIqLjEscC8yLGwvMitsLzIqLjEscC8yLGgsLjgpLHt4OmwvMitsLzIqLjEseTotcC8yfSx7eDotbC8yLWwvMiouMSx5Oi1wLzJ9XSx4PS1sLzIrbC8yKi4xLGI9LXAvMi1kKi40LHc9W3t4OngrbC1mLHk6KGIrdSkqMS40fSx7eDp4K2wseTpiK3UtZH0se3g6eCtsLHk6KGIrdSkqLjl9LC4uLnpvKHgrbCwoYit1KSoxLjMseCtsLWYsKGIrdSkqMS41LC11Ki4wMywuNSldLF89V3QodiksVD1nLnBhdGgoXyx5KSxFPVd0KHcpLEw9Zy5wYXRoKEUsey4uLnksZmlsbFN0eWxlOiJzb2xpZCJ9KSxDPWkuaW5zZXJ0KCgpPT5MLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gQy5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpLEMuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxtJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJkMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHstaC8yfSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCktKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LXUvMisoZS5wYWRkaW5nPz8wKS1oLzItKGEueS0oYS50b3A/PzApKX0pYCksUWUoZSxDKSxlLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4gcWUucG9seWdvbihlLHYsQSl9LGl9dmFyIExRPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO2p0KCk7WHQoKTtvKF9RLCJ0YWdnZWRXYXZlRWRnZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIERRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz1NYXRoLm1heChhLndpZHRoK2UucGFkZGluZyxlPy53aWR0aHx8MCksbD1NYXRoLm1heChhLmhlaWdodCtlLnBhZGRpbmcsZT8uaGVpZ2h0fHwwKSx1PS1zLzIsaD0tbC8yLGY9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gZi5hdHRyKCJjbGFzcyIsInRleHQiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigicngiLDApLmF0dHIoInJ5IiwwKS5hdHRyKCJ4Iix1KS5hdHRyKCJ5IixoKS5hdHRyKCJ3aWR0aCIscykuYXR0cigiaGVpZ2h0IixsKSxRZShlLGYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBxZS5yZWN0KGUsZCl9LGl9dmFyIE5RPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7byhEUSwidGV4dCIpfSk7YXN5bmMgZnVuY3Rpb24gUlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PWV0KGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzLGhhbGZQYWRkaW5nOmx9PWF3YWl0IG90KHQsZSxsdChlKSksdT1lLmxvb2s9PT0ibmVvIj9sKjI6bCxoPWEuaGVpZ2h0K3UsZj1oLzIsZD1mLygyLjUraC81MCkscD1hLndpZHRoK2QrdSx7Y3NzU3R5bGVzOm19PWUsZztpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHk9S2Uuc3ZnKGkpLHY9a0FlKDAsMCxwLGgsZCxmKSx4PUVBZSgwLDAscCxoLGQsZiksYj15LnBhdGgodixaZShlLHt9KSksdz15LnBhdGgoeCxaZShlLHtmaWxsOiJub25lIn0pKTtnPWkuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKSxnPWkuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxnLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZy5hdHRyKCJzdHlsZSIsbSl9ZWxzZXtsZXQgeT1UQWUoMCwwLHAsaCxkLGYpO2c9aS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIix5KS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixGbihtKSkuYXR0cigic3R5bGUiLG4pLGcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxtJiZnLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixtKSxuJiZnLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKX1yZXR1cm4gZy5hdHRyKCJsYWJlbC1vZmZzZXQteCIsZCksZy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcC8yfSwgJHtoLzJ9IClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS1kLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpLShhLnktKGEudG9wPz8wKSl9KWApLFFlKGUsZyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7bGV0IHY9cWUucmVjdChlLHkpLHg9di55LShlLnk/PzApO2lmKGYhPTAmJihNYXRoLmFicyh4KTwoZS5oZWlnaHQ/PzApLzJ8fE1hdGguYWJzKHgpPT0oZS5oZWlnaHQ/PzApLzImJk1hdGguYWJzKHYueC0oZS54Pz8wKSk+KGUud2lkdGg/PzApLzItZCkpe2xldCBiPWQqZCooMS14KngvKGYqZikpO2IhPTAmJihiPU1hdGguc3FydChNYXRoLmFicyhiKSkpLGI9ZC1iLHkueC0oZS54Pz8wKT4wJiYoYj0tYiksdi54Kz1ifXJldHVybiB2fSxpfXZhciBUQWUsa0FlLEVBZSxNUT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7WHQoKTtqdCgpO3F0KCk7aHIoKTtUQWU9bygodCxlLHIsbixpLGEpPT5gTSR7dH0sJHtlfQogICAgYSR7aX0sJHthfSAwLDAsMSAwLCR7LW59CiAgICBsJHtyfSwwCiAgICBhJHtpfSwke2F9IDAsMCwxIDAsJHtufQogICAgTSR7cn0sJHstbn0KICAgIGEke2l9LCR7YX0gMCwwLDAgMCwke259CiAgICBsJHstcn0sMGAsImNyZWF0ZUN5bGluZGVyUGF0aEQiKSxrQWU9bygodCxlLHIsbixpLGEpPT5bYE0ke3R9LCR7ZX1gLGBNJHt0K3J9LCR7ZX1gLGBhJHtpfSwke2F9IDAsMCwwIDAsJHstbn1gLGBsJHstcn0sMGAsYGEke2l9LCR7YX0gMCwwLDAgMCwke259YCxgbCR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEIiksRUFlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0K3IvMn0sJHstbi8yfWAsYGEke2l9LCR7YX0gMCwwLDAgMCwke259YF0uam9pbigiICIpLCJjcmVhdGVJbm5lckN5bGluZGVyUGF0aEQiKTtvKFJRLCJ0aWx0ZWRDeWxpbmRlciIpfSk7YXN5bmMgZnVuY3Rpb24gSVEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PWV0KGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgb3QodCxlLGx0KGUpKSxzPWEud2lkdGgrZS5wYWRkaW5nLGw9YS5oZWlnaHQrZS5wYWRkaW5nLHU9W3t4Oi0zKmwvNix5OjB9LHt4OnMrMypsLzYseTowfSx7eDpzLHk6LWx9LHt4OjAseTotbH1dLGgse2Nzc1N0eWxlczpmfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZD1LZS5zdmcoaSkscD1aZShlLHt9KSxtPVd0KHUpLGc9ZC5wYXRoKG0scCk7aD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXMvMn0sICR7bC8yfSlgKSxmJiZoLmF0dHIoInN0eWxlIixmKX1lbHNlIGg9QWEoaSxzLGwsdSk7cmV0dXJuIG4mJmguYXR0cigic3R5bGUiLG4pLGUud2lkdGg9cyxlLmhlaWdodD1sLFFlKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIHFlLnBvbHlnb24oZSx1LGQpfSxpfXZhciBPUT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7U3UoKTtvKElRLCJ0cmFwZXpvaWQiKX0pO2FzeW5jIGZ1bmN0aW9uIFBRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG90KHQsZSxsdChlKSkscz02MCxsPTIwLHU9TWF0aC5tYXgocyxhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgobCxhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCkse2Nzc1N0eWxlczpmfT1lLGQ9S2Uuc3ZnKGkpLHA9WmUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihwLnJvdWdobmVzcz0wLHAuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBtPVt7eDotdS8yKi44LHk6LWgvMn0se3g6dS8yKi44LHk6LWgvMn0se3g6dS8yLHk6LWgvMiouNn0se3g6dS8yLHk6aC8yfSx7eDotdS8yLHk6aC8yfSx7eDotdS8yLHk6LWgvMiouNn1dLGc9V3QobSkseT1kLnBhdGgoZyxwKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLFFlKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIHFlLnBvbHlnb24oZSxtLHgpfSxpfXZhciBCUT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtYdCgpO2p0KCk7byhQUSwidHJhcGV6b2lkYWxQZW50YWdvbiIpfSk7YXN5bmMgZnVuY3Rpb24gRlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PWV0KGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBvdCh0LGUsbHQoZSkpLGw9eHIoZGUoKS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpLHU9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSxoPXUrYS5oZWlnaHQsZj11K2EuaGVpZ2h0LGQ9W3t4OjAseTowfSx7eDpmLHk6MH0se3g6Zi8yLHk6LWh9XSx7Y3NzU3R5bGVzOnB9PWUsbT1LZS5zdmcoaSksZz1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9V3QoZCksdj1tLnBhdGgoeSxnKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstaC8yfSwgJHtoLzJ9KWApO3JldHVybiBwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXUsZS5oZWlnaHQ9aCxRZShlLHgpLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWEud2lkdGgvMi0oYS54LShhLmxlZnQ/PzApKX0sICR7aC8yLShhLmhlaWdodCsoZS5wYWRkaW5nPz8wKS8obD8yOjEpLShhLnktKGEudG9wPz8wKSkpfSlgKSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWS5pbmZvKCJUcmlhbmdsZSBpbnRlcnNlY3QiLGUsZCxiKSxxZS5wb2x5Z29uKGUsZCxiKX0saX12YXIgelE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO0Z0KCk7cXQoKTtYdCgpO2p0KCk7RnQoKTtmcigpO1Z0KCk7byhGUSwidHJpYW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIEdRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ldChlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgb3QodCxlLGx0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD11LzgsZj11K2gse2Nzc1N0eWxlczpkfT1lLG09NzAtbCxnPW0+MD9tLzI6MCx5PUtlLnN2ZyhpKSx2PVplKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYodi5yb3VnaG5lc3M9MCx2LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1be3g6LWwvMi1nLHk6Zi8yfSwuLi56bygtbC8yLWcsZi8yLGwvMitnLGYvMixoLC44KSx7eDpsLzIrZyx5Oi1mLzJ9LHt4Oi1sLzItZyx5Oi1mLzJ9XSxiPVd0KHgpLHc9eS5wYXRoKGIsdiksXz1pLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIF8uYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmXy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLF8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHstaC8yfSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCktKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LXUvMisoZS5wYWRkaW5nPz8wKS1oLShhLnktKGEudG9wPz8wKSl9KWApLFFlKGUsXyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHFlLnBvbHlnb24oZSx4LFQpfSxpfXZhciAkUT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTtqdCgpO1h0KCk7byhHUSwid2F2ZUVkZ2VkUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBWUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBvdCh0LGUsbHQoZSkpLHM9MTAwLGw9NTAsdT1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9dS9oLGQ9dSxwPWg7ZD5wKmY/cD1kL2Y6ZD1wKmYsZD1NYXRoLm1heChkLHMpLHA9TWF0aC5tYXgocCxsKTtsZXQgbT1NYXRoLm1pbihwKi4yLHAvNCksZz1wK20qMix7Y3NzU3R5bGVzOnl9PWUsdj1LZS5zdmcoaSkseD1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHgucm91Z2huZXNzPTAseC5maWxsU3R5bGU9InNvbGlkIik7bGV0IGI9W3t4Oi1kLzIseTpnLzJ9LC4uLnpvKC1kLzIsZy8yLGQvMixnLzIsbSwxKSx7eDpkLzIseTotZy8yfSwuLi56byhkLzIsLWcvMiwtZC8yLC1nLzIsbSwtMSldLHc9V3QoYiksXz12LnBhdGgodyx4KSxUPWkuaW5zZXJ0KCgpPT5fLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gVC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIix5KSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmVC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUWUoZSxUKSxlLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gcWUucG9seWdvbihlLGIsRSl9LGl9dmFyIFVRPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtxdCgpO1h0KCk7anQoKTtvKFZRLCJ3YXZlUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBIUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09ZXQoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG90KHQsZSxsdChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9NSxmPS1sLzIsZD0tdS8yLHtjc3NTdHlsZXM6cH09ZSxtPUtlLnN2ZyhpKSxnPVplKGUse30pLHk9W3t4OmYtaCx5OmQtaH0se3g6Zi1oLHk6ZCt1fSx7eDpmK2wseTpkK3V9LHt4OmYrbCx5OmQtaH1dLHY9YE0ke2YtaH0sJHtkLWh9IEwke2YrbH0sJHtkLWh9IEwke2YrbH0sJHtkK3V9IEwke2YtaH0sJHtkK3V9IEwke2YtaH0sJHtkLWh9CiAgICAgICAgICAgICAgICBNJHtmLWh9LCR7ZH0gTCR7ZitsfSwke2R9CiAgICAgICAgICAgICAgICBNJHtmfSwke2QtaH0gTCR7Zn0sJHtkK3V9YDtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9bS5wYXRoKHYsZyksYj1pLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGIuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aC8yfSwgJHtoLzJ9KWApLGIuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmYi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpK2gvMi0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKStoLzItKGEueS0oYS50b3A/PzApKX0pYCksUWUoZSxiKSxlLmludGVyc2VjdD1mdW5jdGlvbih3KXtyZXR1cm4gcWUucG9seWdvbihlLHksdyl9LGl9dmFyIFdRPU0oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtYdCgpO2p0KCk7cXQoKTtvKEhRLCJ3aW5kb3dQYW5lIil9KTthc3luYyBmdW5jdGlvbiBZUSh0LGUscixuLGk9ci5jbGFzcy5wYWRkaW5nPz8xMil7bGV0IGE9bj8wOjMscz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixsdChlKSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGw9bnVsbCx1PW51bGwsaD1udWxsLGY9bnVsbCxkPTAscD0wLG09MDtpZihsPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJhbm5vdGF0aW9uLWdyb3VwIHRleHQiKSxlLmFubm90YXRpb25zLmxlbmd0aD4wKXtsZXQgYj1lLmFubm90YXRpb25zWzBdO2F3YWl0IE81KGwse3RleHQ6YFx4QUIke2J9XHhCQmB9LDApLGQ9bC5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodH11PXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbC1ncm91cCB0ZXh0IiksYXdhaXQgTzUodSxlLDAsWyJmb250LXdlaWdodDogYm9sZGVyIl0pO2xldCBnPXUubm9kZSgpLmdldEJCb3goKTtwPWcuaGVpZ2h0LGg9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm1lbWJlcnMtZ3JvdXAgdGV4dCIpO2xldCB5PTA7Zm9yKGxldCBiIG9mIGUubWVtYmVycyl7bGV0IHc9YXdhaXQgTzUoaCxiLHksW2IucGFyc2VDbGFzc2lmaWVyKCldKTt5Kz13K2F9bT1oLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LG08PTAmJihtPWkvMiksZj1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibWV0aG9kcy1ncm91cCB0ZXh0Iik7bGV0IHY9MDtmb3IobGV0IGIgb2YgZS5tZXRob2RzKXtsZXQgdz1hd2FpdCBPNShmLGIsdixbYi5wYXJzZUNsYXNzaWZpZXIoKV0pO3YrPXcrYX1sZXQgeD1zLm5vZGUoKS5nZXRCQm94KCk7aWYobCE9PW51bGwpe2xldCBiPWwubm9kZSgpLmdldEJCb3goKTtsLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1iLndpZHRoLzJ9KWApfXJldHVybiB1LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1nLndpZHRoLzJ9LCAke2R9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLGguYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsICR7ZCtwK2kqMn0pYCkseD1zLm5vZGUoKS5nZXRCQm94KCksZi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwgJHtkK3ArKG0/bStpKjQ6aSoyKX0pYCkseD1zLm5vZGUoKS5nZXRCQm94KCkse3NoYXBlU3ZnOnMsYmJveDp4fX1hc3luYyBmdW5jdGlvbiBPNSh0LGUscixuPVtdKXtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsbi5qb2luKCI7ICIpKSxhPVNyKCkscz0idXNlSHRtbExhYmVscyJpbiBlP2UudXNlSHRtbExhYmVsczp4cihhLmh0bWxMYWJlbHMpPz8hMCxsPSIiOyJ0ZXh0ImluIGU/bD1lLnRleHQ6bD1lLmxhYmVsLCFzJiZsLnN0YXJ0c1dpdGgoIlxcIikmJihsPWwuc3Vic3RyaW5nKDEpKSxwaShsKSYmKHM9ITApO2xldCB1PWF3YWl0IFNpKGksaTcoQ2EobCkpLHt3aWR0aDpKcyhsLGEpKzUwLGNsYXNzZXM6Im1hcmtkb3duLW5vZGUtbGFiZWwiLHVzZUh0bWxMYWJlbHM6c30sYSksaCxmPTE7aWYocyl7bGV0IGQ9dS5jaGlsZHJlblswXSxwPXplKHUpO2Y9ZC5pbm5lckhUTUwuc3BsaXQoIjxicj4iKS5sZW5ndGgsZC5pbm5lckhUTUwuaW5jbHVkZXMoIjwvbWF0aD4iKSYmKGYrPWQuaW5uZXJIVE1MLnNwbGl0KCI8bXJvdz4iKS5sZW5ndGgtMSk7bGV0IG09ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYobSl7bGV0IGc9bC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5tXS5tYXAoeT0+bmV3IFByb21pc2Uodj0+e2Z1bmN0aW9uIHgoKXtpZih5LnN0eWxlLmRpc3BsYXk9ImZsZXgiLHkuc3R5bGUuZmxleERpcmVjdGlvbj0iY29sdW1uIixnKXtsZXQgYj1hLmZvbnRTaXplPy50b1N0cmluZygpPz93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5mb250U2l6ZSxfPXBhcnNlSW50KGIsMTApKjUrInB4Ijt5LnN0eWxlLm1pbldpZHRoPV8seS5zdHlsZS5tYXhXaWR0aD1ffWVsc2UgeS5zdHlsZS53aWR0aD0iMTAwJSI7dih5KX1vKHgsInNldHVwSW1hZ2UiKSxzZXRUaW1lb3V0KCgpPT57eS5jb21wbGV0ZSYmeCgpfSkseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIseCkseS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KX0pKSl9aD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHAuYXR0cigid2lkdGgiLGgud2lkdGgpLHAuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9ZWxzZXtuLmluY2x1ZGVzKCJmb250LXdlaWdodDogYm9sZGVyIikmJnplKHUpLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsIiIpLGY9dS5jaGlsZHJlbi5sZW5ndGg7bGV0IGQ9dS5jaGlsZHJlblswXTsodS50ZXh0Q29udGVudD09PSIifHx1LnRleHRDb250ZW50LmluY2x1ZGVzKCImZ3QiKSkmJihkLnRleHRDb250ZW50PWxbMF0rbC5zdWJzdHJpbmcoMSkucmVwbGFjZUFsbCgiJmd0OyIsIj4iKS5yZXBsYWNlQWxsKCImbHQ7IiwiPCIpLnRyaW0oKSxsWzFdPT09IiAiJiYoZC50ZXh0Q29udGVudD1kLnRleHRDb250ZW50WzBdKyIgIitkLnRleHRDb250ZW50LnN1YnN0cmluZygxKSkpLGQudGV4dENvbnRlbnQ9PT0idW5kZWZpbmVkIiYmKGQudGV4dENvbnRlbnQ9IiIpLGg9dS5nZXRCQm94KCl9cmV0dXJuIGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisoLWguaGVpZ2h0LygyKmYpK3IpKyIpIiksaC5oZWlnaHR9dmFyIHFRPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTtVYSgpO0Z0KCk7aHIoKTtWdCgpO0RsKCk7ZnIoKTtvKFlRLCJ0ZXh0SGVscGVyIik7byhPNSwiYWRkVGV4dCIpfSk7YXN5bmMgZnVuY3Rpb24gWFEodCxlKXtsZXQgcj1kZSgpLG49ci5jbGFzcy5wYWRkaW5nPz8xMixpPW4sYT1lLnVzZUh0bWxMYWJlbHM/P3hyKHIuaHRtbExhYmVscyk/PyEwLHM9ZTtzLmFubm90YXRpb25zPXMuYW5ub3RhdGlvbnM/P1tdLHMubWVtYmVycz1zLm1lbWJlcnM/P1tdLHMubWV0aG9kcz1zLm1ldGhvZHM/P1tdO2xldHtzaGFwZVN2ZzpsLGJib3g6dX09YXdhaXQgWVEodCxlLHIsYSxpKSx7bGFiZWxTdHlsZXM6aCxub2RlU3R5bGVzOmZ9PWV0KGUpO2UubGFiZWxTdHlsZT1oLGUuY3NzU3R5bGVzPXMuc3R5bGVzfHwiIjtsZXQgZD1zLnN0eWxlcz8uam9pbigiOyIpfHxmfHwiIjtlLmNzc1N0eWxlc3x8KGUuY3NzU3R5bGVzPWQucmVwbGFjZUFsbCgiIWltcG9ydGFudCIsIiIpLnNwbGl0KCI7IikpO2xldCBwPXMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MCYmIXIuY2xhc3M/LmhpZGVFbXB0eU1lbWJlcnNCb3gsbT1LZS5zdmcobCksZz1aZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9dS53aWR0aCx2PXUuaGVpZ2h0O3MubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD92Kz1pOnMubWVtYmVycy5sZW5ndGg+MCYmcy5tZXRob2RzLmxlbmd0aD09PTAmJih2Kz1pKjIpO2xldCB4PS15LzIsYj0tdi8yLHc9bS5yZWN0YW5nbGUoeC1uLGItbi0ocD9uOnMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD8tbi8yOjApLHkrMipuLHYrMipuKyhwP24qMjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW46MCksZyksXz1sLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIik7Xy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpO2xldCBUPV8ubm9kZSgpLmdldEJCb3goKTtsLnNlbGVjdEFsbCgiLnRleHQiKS5lYWNoKChBLEksRCk9PntsZXQgaz16ZShEW0ldKSxSPWsuYXR0cigidHJhbnNmb3JtIiksUz0wO2lmKFIpe2xldCBGPVJlZ0V4cCgvdHJhbnNsYXRlXCgoW14sXSspLChbXildKylcKS8pLmV4ZWMoUik7RiYmKFM9cGFyc2VGbG9hdChGWzJdKSl9bGV0IE89UytiK24tKHA/bjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW4vMjowKTthfHwoTy09NCk7bGV0IE49eDsoay5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJsYWJlbC1ncm91cCIpfHxrLmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImFubm90YXRpb24tZ3JvdXAiKSkmJihOPS1rLm5vZGUoKT8uZ2V0QkJveCgpLndpZHRoLzJ8fDAsbC5zZWxlY3RBbGwoInRleHQiKS5lYWNoKGZ1bmN0aW9uKFAsRixCKXt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShCW0ZdKS50ZXh0QW5jaG9yPT09Im1pZGRsZSImJihOPTApfSkpLGsuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Tn0sICR7T30pYCl9KTtsZXQgRT1sLnNlbGVjdCgiLmFubm90YXRpb24tZ3JvdXAiKS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodC0ocD9uLzI6MCl8fDAsTD1sLnNlbGVjdCgiLmxhYmVsLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwLEM9bC5zZWxlY3QoIi5tZW1iZXJzLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwO2lmKHMubWVtYmVycy5sZW5ndGg+MHx8cy5tZXRob2RzLmxlbmd0aD4wfHxwKXtsZXQgQT1tLmxpbmUoVC54LEUrTCtiK24sVC54K1Qud2lkdGgsRStMK2IrbixnKTtsLmluc2VydCgoKT0+QSkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigic3R5bGUiLGQpfWlmKHB8fHMubWVtYmVycy5sZW5ndGg+MHx8cy5tZXRob2RzLmxlbmd0aD4wKXtsZXQgQT1tLmxpbmUoVC54LEUrTCtDK2IraSoyK24sVC54K1Qud2lkdGgsRStMK0MrYituK2kqMixnKTtsLmluc2VydCgoKT0+QSkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigic3R5bGUiLGQpfWlmKHMubG9vayE9PSJoYW5kRHJhd24iJiZsLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxfLnNlbGVjdCgiOm50aC1jaGlsZCgyKSIpLmF0dHIoInN0eWxlIixkKSxsLnNlbGVjdEFsbCgiLmRpdmlkZXIiKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksZS5sYWJlbFN0eWxlP2wuc2VsZWN0QWxsKCJzcGFuIikuYXR0cigic3R5bGUiLGUubGFiZWxTdHlsZSk6bC5zZWxlY3RBbGwoInNwYW4iKS5hdHRyKCJzdHlsZSIsZCksIWEpe2xldCBBPVJlZ0V4cCgvY29sb3Jccyo6XHMqKFteO10qKS8pLEk9QS5leGVjKGQpO2lmKEkpe2xldCBEPUlbMF0ucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7bC5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigic3R5bGUiLEQpfWVsc2UgaWYoaCl7bGV0IEQ9QS5leGVjKGgpO2lmKEQpe2xldCBrPURbMF0ucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7bC5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigic3R5bGUiLGspfX19cmV0dXJuIFFlKGUsXyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQSl7cmV0dXJuIHFlLnJlY3QoZSxBKX0sbH12YXIgalE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO1Z0KCk7bXIoKTtqdCgpO1h0KCk7cXQoKTtxUSgpO2ZyKCk7byhYUSwiY2xhc3NCb3giKX0pO2FzeW5jIGZ1bmN0aW9uIEtRKHQsZSx7Y29uZmlnOnJ9KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PWV0KGUpO2UubGFiZWxTdHlsZT1ufHwiIjtsZXQgYT0xMCxzPWUud2lkdGg7ZS53aWR0aD0oZS53aWR0aD8/MjAwKS0xMDtsZXR7c2hhcGVTdmc6bCxiYm94OnUsbGFiZWw6aH09YXdhaXQgb3QodCxlLGx0KGUpKSxmPWUucGFkZGluZ3x8MTAsZD0iIixwOyJ0aWNrZXQiaW4gZSYmZS50aWNrZXQmJnI/LmthbmJhbj8udGlja2V0QmFzZVVybCYmKGQ9cj8ua2FuYmFuPy50aWNrZXRCYXNlVXJsLnJlcGxhY2UoIiNUSUNLRVQjIixlLnRpY2tldCkscD1sLmluc2VydCgic3ZnOmEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImthbmJhbi10aWNrZXQtbGluayIpLmF0dHIoInhsaW5rOmhyZWYiLGQpLmF0dHIoInRhcmdldCIsIl9ibGFuayIpKTtsZXQgbT17dXNlSHRtbExhYmVsczplLnVzZUh0bWxMYWJlbHMsbGFiZWxTdHlsZTplLmxhYmVsU3R5bGV8fCIiLHdpZHRoOmUud2lkdGgsaW1nOmUuaW1nLHBhZGRpbmc6ZS5wYWRkaW5nfHw4LGNlbnRlckxhYmVsOiExfSxnLHk7cD97bGFiZWw6ZyxiYm94Onl9PWF3YWl0IFQ1KHAsInRpY2tldCJpbiBlJiZlLnRpY2tldHx8IiIsbSk6e2xhYmVsOmcsYmJveDp5fT1hd2FpdCBUNShsLCJ0aWNrZXQiaW4gZSYmZS50aWNrZXR8fCIiLG0pO2xldHtsYWJlbDp2LGJib3g6eH09YXdhaXQgVDUobCwiYXNzaWduZWQiaW4gZSYmZS5hc3NpZ25lZHx8IiIsbSk7ZS53aWR0aD1zO2xldCBiPTEwLHc9ZT8ud2lkdGh8fDAsXz1NYXRoLm1heCh5LmhlaWdodCx4LmhlaWdodCkvMixUPU1hdGgubWF4KHUuaGVpZ2h0K2IqMixlPy5oZWlnaHR8fDApK18sRT0tdy8yLEw9LVQvMjtoLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmLXcvMikrIiwgIisoLV8tdS5oZWlnaHQvMikrIikiKSxnLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmLXcvMikrIiwgIisoLV8rdS5oZWlnaHQvMikrIikiKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmK3cvMi14LndpZHRoLTIqYSkrIiwgIisoLV8rdS5oZWlnaHQvMikrIikiKTtsZXQgQyx7cng6QSxyeTpJfT1lLHtjc3NTdHlsZXM6RH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGs9S2Uuc3ZnKGwpLFI9WmUoZSx7fSksUz1BfHxJP2sucGF0aChMYShFLEwsdyxULEF8fDApLFIpOmsucmVjdGFuZ2xlKEUsTCx3LFQsUik7Qz1sLmluc2VydCgoKT0+UywiOmZpcnN0LWNoaWxkIiksQy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixEfHxudWxsKX1lbHNle0M9bC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxDLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIF9fQVBBX18iKS5hdHRyKCJzdHlsZSIsaSkuYXR0cigicngiLEE/PzUpLmF0dHIoInJ5IixJPz81KS5hdHRyKCJ4IixFKS5hdHRyKCJ5IixMKS5hdHRyKCJ3aWR0aCIsdykuYXR0cigiaGVpZ2h0IixUKTtsZXQgaz0icHJpb3JpdHkiaW4gZSYmZS5wcmlvcml0eTtpZihrKXtsZXQgUj1sLmFwcGVuZCgibGluZSIpLFM9RSsyLE89TCtNYXRoLmZsb29yKChBPz8wKS8yKSxOPUwrVC1NYXRoLmZsb29yKChBPz8wKS8yKTtSLmF0dHIoIngxIixTKS5hdHRyKCJ5MSIsTykuYXR0cigieDIiLFMpLmF0dHIoInkyIixOKS5hdHRyKCJzdHJva2Utd2lkdGgiLCI0IikuYXR0cigic3Ryb2tlIixTQWUoaykpfX1yZXR1cm4gUWUoZSxDKSxlLmhlaWdodD1ULGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGspe3JldHVybiBxZS5yZWN0KGUsayl9LGx9dmFyIFNBZSxRUT1NKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7cXQoKTt6aCgpO1h0KCk7anQoKTtTQWU9byh0PT57c3dpdGNoKHQpe2Nhc2UiVmVyeSBIaWdoIjpyZXR1cm4icmVkIjtjYXNlIkhpZ2giOnJldHVybiJvcmFuZ2UiO2Nhc2UiTWVkaXVtIjpyZXR1cm4gbnVsbDtjYXNlIkxvdyI6cmV0dXJuImJsdWUiO2Nhc2UiVmVyeSBMb3ciOnJldHVybiJsaWdodGJsdWUifX0sImNvbG9yRnJvbVByaW9yaXR5Iik7byhLUSwia2FuYmFuSXRlbSIpfSk7ZnVuY3Rpb24gWlEodCl7cmV0dXJuIHQgaW4gejl9dmFyIENBZSxBQWUsejksRzk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWaigpO1dqKCk7cWooKTtqaigpO1FqKCk7SmooKTt0SygpO25LKCk7YUsoKTtvSygpO2NLKCk7aEsoKTtkSygpO21LKCk7eUsoKTt4SygpO3dLKCk7a0soKTtTSygpO0FLKCk7TEsoKTtOSygpO01LKCk7T0soKTtCSygpO3pLKCk7JEsoKTtVSygpO1dLKCk7cUsoKTtqSygpO1FLKCk7SksoKTt0USgpO25RKCk7YVEoKTtvUSgpO2NRKCk7aFEoKTtkUSgpO21RKCk7eVEoKTt4USgpO3dRKCk7a1EoKTtTUSgpO0FRKCk7TFEoKTtOUSgpO01RKCk7T1EoKTtCUSgpO3pRKCk7JFEoKTtVUSgpO1dRKCk7alEoKTtRUSgpO0NBZT1be3NlbWFudGljTmFtZToiUHJvY2VzcyIsbmFtZToiUmVjdGFuZ2xlIixzaG9ydE5hbWU6InJlY3QiLGRlc2NyaXB0aW9uOiJTdGFuZGFyZCBwcm9jZXNzIHNoYXBlIixhbGlhc2VzOlsicHJvYyIsInByb2Nlc3MiLCJyZWN0YW5nbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJzcXVhcmVSZWN0Il0saGFuZGxlcjpwUX0se3NlbWFudGljTmFtZToiRXZlbnQiLG5hbWU6IlJvdW5kZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6InJvdW5kZWQiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGFuIGV2ZW50IixhbGlhc2VzOlsiZXZlbnQiXSxpbnRlcm5hbEFsaWFzZXM6WyJyb3VuZGVkUmVjdCJdLGhhbmRsZXI6bFF9LHtzZW1hbnRpY05hbWU6IlRlcm1pbmFsIFBvaW50IixuYW1lOiJTdGFkaXVtIixzaG9ydE5hbWU6InN0YWRpdW0iLGRlc2NyaXB0aW9uOiJUZXJtaW5hbCBwb2ludCIsYWxpYXNlczpbInRlcm1pbmFsIiwicGlsbCJdLGhhbmRsZXI6Z1F9LHtzZW1hbnRpY05hbWU6IlN1YnByb2Nlc3MiLG5hbWU6IkZyYW1lZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZnItcmVjdCIsZGVzY3JpcHRpb246IlN1YnByb2Nlc3MiLGFsaWFzZXM6WyJzdWJwcm9jZXNzIiwic3VicHJvYyIsImZyYW1lZC1yZWN0YW5nbGUiLCJzdWJyb3V0aW5lIl0saGFuZGxlcjpFUX0se3NlbWFudGljTmFtZToiRGF0YWJhc2UiLG5hbWU6IkN5bGluZGVyIixzaG9ydE5hbWU6ImN5bCIsZGVzY3JpcHRpb246IkRhdGFiYXNlIHN0b3JhZ2UiLGFsaWFzZXM6WyJkYiIsImRhdGFiYXNlIiwiY3lsaW5kZXIiXSxoYW5kbGVyOmxLfSx7c2VtYW50aWNOYW1lOiJTdGFydCIsbmFtZToiQ2lyY2xlIixzaG9ydE5hbWU6ImNpcmNsZSIsZGVzY3JpcHRpb246IlN0YXJ0aW5nIHBvaW50IixhbGlhc2VzOlsiY2lyYyJdLGhhbmRsZXI6S2p9LHtzZW1hbnRpY05hbWU6IkRlY2lzaW9uIixuYW1lOiJEaWFtb25kIixzaG9ydE5hbWU6ImRpYW0iLGRlc2NyaXB0aW9uOiJEZWNpc2lvbi1tYWtpbmcgc3RlcCIsYWxpYXNlczpbImRlY2lzaW9uIiwiZGlhbW9uZCIsInF1ZXN0aW9uIl0saGFuZGxlcjpyUX0se3NlbWFudGljTmFtZToiUHJlcGFyZSBDb25kaXRpb25hbCIsbmFtZToiSGV4YWdvbiIsc2hvcnROYW1lOiJoZXgiLGRlc2NyaXB0aW9uOiJQcmVwYXJhdGlvbiBvciBjb25kaXRpb24gc3RlcCIsYWxpYXNlczpbImhleGFnb24iLCJwcmVwYXJlIl0saGFuZGxlcjpUS30se3NlbWFudGljTmFtZToiRGF0YSBJbnB1dC9PdXRwdXQiLG5hbWU6IkxlYW4gUmlnaHQiLHNob3J0TmFtZToibGVhbi1yIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBpbnB1dCBvciBvdXRwdXQiLGFsaWFzZXM6WyJsZWFuLXJpZ2h0IiwiaW4tb3V0Il0saW50ZXJuYWxBbGlhc2VzOlsibGVhbl9yaWdodCJdLGhhbmRsZXI6Vkt9LHtzZW1hbnRpY05hbWU6IkRhdGEgSW5wdXQvT3V0cHV0IixuYW1lOiJMZWFuIExlZnQiLHNob3J0TmFtZToibGVhbi1sIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBvdXRwdXQgb3IgaW5wdXQiLGFsaWFzZXM6WyJsZWFuLWxlZnQiLCJvdXQtaW4iXSxpbnRlcm5hbEFsaWFzZXM6WyJsZWFuX2xlZnQiXSxoYW5kbGVyOkdLfSx7c2VtYW50aWNOYW1lOiJQcmlvcml0eSBBY3Rpb24iLG5hbWU6IlRyYXBlem9pZCBCYXNlIEJvdHRvbSIsc2hvcnROYW1lOiJ0cmFwLWIiLGRlc2NyaXB0aW9uOiJQcmlvcml0eSBhY3Rpb24iLGFsaWFzZXM6WyJwcmlvcml0eSIsInRyYXBlem9pZC1ib3R0b20iLCJ0cmFwZXpvaWQiXSxoYW5kbGVyOklRfSx7c2VtYW50aWNOYW1lOiJNYW51YWwgT3BlcmF0aW9uIixuYW1lOiJUcmFwZXpvaWQgQmFzZSBUb3AiLHNob3J0TmFtZToidHJhcC10IixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIG1hbnVhbCB0YXNrIixhbGlhc2VzOlsibWFudWFsIiwidHJhcGV6b2lkLXRvcCIsImludi10cmFwZXpvaWQiXSxpbnRlcm5hbEFsaWFzZXM6WyJpbnZfdHJhcGV6b2lkIl0saGFuZGxlcjpQS30se3NlbWFudGljTmFtZToiU3RvcCIsbmFtZToiRG91YmxlIENpcmNsZSIsc2hvcnROYW1lOiJkYmwtY2lyYyIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBzdG9wIHBvaW50IixhbGlhc2VzOlsiZG91YmxlLWNpcmNsZSJdLGludGVybmFsQWxpYXNlczpbImRvdWJsZWNpcmNsZSJdLGhhbmRsZXI6Zkt9LHtzZW1hbnRpY05hbWU6IlRleHQgQmxvY2siLG5hbWU6IlRleHQgQmxvY2siLHNob3J0TmFtZToidGV4dCIsZGVzY3JpcHRpb246IlRleHQgYmxvY2siLGhhbmRsZXI6RFF9LHtzZW1hbnRpY05hbWU6IkNhcmQiLG5hbWU6Ik5vdGNoZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6Im5vdGNoLXJlY3QiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgY2FyZCIsYWxpYXNlczpbImNhcmQiLCJub3RjaGVkLXJlY3RhbmdsZSJdLGhhbmRsZXI6WWp9LHtzZW1hbnRpY05hbWU6IkxpbmVkL1NoYWRlZCBQcm9jZXNzIixuYW1lOiJMaW5lZCBSZWN0YW5nbGUiLHNob3J0TmFtZToibGluLXJlY3QiLGRlc2NyaXB0aW9uOiJMaW5lZCBwcm9jZXNzIHNoYXBlIixhbGlhc2VzOlsibGluZWQtcmVjdGFuZ2xlIiwibGluZWQtcHJvY2VzcyIsImxpbi1wcm9jIiwic2hhZGVkLXByb2Nlc3MiXSxoYW5kbGVyOnVRfSx7c2VtYW50aWNOYW1lOiJTdGFydCIsbmFtZToiU21hbGwgQ2lyY2xlIixzaG9ydE5hbWU6InNtLWNpcmMiLGRlc2NyaXB0aW9uOiJTbWFsbCBzdGFydGluZyBwb2ludCIsYWxpYXNlczpbInN0YXJ0Iiwic21hbGwtY2lyY2xlIl0saW50ZXJuYWxBbGlhc2VzOlsic3RhdGVTdGFydCJdLGhhbmRsZXI6VFF9LHtzZW1hbnRpY05hbWU6IlN0b3AiLG5hbWU6IkZyYW1lZCBDaXJjbGUiLHNob3J0TmFtZToiZnItY2lyYyIsZGVzY3JpcHRpb246IlN0b3AgcG9pbnQiLGFsaWFzZXM6WyJzdG9wIiwiZnJhbWVkLWNpcmNsZSJdLGludGVybmFsQWxpYXNlczpbInN0YXRlRW5kIl0saGFuZGxlcjpiUX0se3NlbWFudGljTmFtZToiRm9yay9Kb2luIixuYW1lOiJGaWxsZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImZvcmsiLGRlc2NyaXB0aW9uOiJGb3JrIG9yIGpvaW4gaW4gcHJvY2VzcyBmbG93IixhbGlhc2VzOlsiam9pbiJdLGludGVybmFsQWxpYXNlczpbImZvcmtKb2luIl0saGFuZGxlcjp2S30se3NlbWFudGljTmFtZToiQ29sbGF0ZSIsbmFtZToiSG91cmdsYXNzIixzaG9ydE5hbWU6ImhvdXJnbGFzcyIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBjb2xsYXRlIG9wZXJhdGlvbiIsYWxpYXNlczpbImhvdXJnbGFzcyIsImNvbGxhdGUiXSxoYW5kbGVyOkVLfSx7c2VtYW50aWNOYW1lOiJDb21tZW50IixuYW1lOiJDdXJseSBCcmFjZSIsc2hvcnROYW1lOiJicmFjZSIsZGVzY3JpcHRpb246IkFkZHMgYSBjb21tZW50IixhbGlhc2VzOlsiY29tbWVudCIsImJyYWNlLWwiXSxoYW5kbGVyOmVLfSx7c2VtYW50aWNOYW1lOiJDb21tZW50IFJpZ2h0IixuYW1lOiJDdXJseSBCcmFjZSIsc2hvcnROYW1lOiJicmFjZS1yIixkZXNjcmlwdGlvbjoiQWRkcyBhIGNvbW1lbnQiLGhhbmRsZXI6ckt9LHtzZW1hbnRpY05hbWU6IkNvbW1lbnQgd2l0aCBicmFjZXMgb24gYm90aCBzaWRlcyIsbmFtZToiQ3VybHkgQnJhY2VzIixzaG9ydE5hbWU6ImJyYWNlcyIsZGVzY3JpcHRpb246IkFkZHMgYSBjb21tZW50IixoYW5kbGVyOmlLfSx7c2VtYW50aWNOYW1lOiJDb20gTGluayIsbmFtZToiTGlnaHRuaW5nIEJvbHQiLHNob3J0TmFtZToiYm9sdCIsZGVzY3JpcHRpb246IkNvbW11bmljYXRpb24gbGluayIsYWxpYXNlczpbImNvbS1saW5rIiwibGlnaHRuaW5nLWJvbHQiXSxoYW5kbGVyOkhLfSx7c2VtYW50aWNOYW1lOiJEb2N1bWVudCIsbmFtZToiRG9jdW1lbnQiLHNob3J0TmFtZToiZG9jIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGRvY3VtZW50IixhbGlhc2VzOlsiZG9jIiwiZG9jdW1lbnQiXSxoYW5kbGVyOkdRfSx7c2VtYW50aWNOYW1lOiJEZWxheSIsbmFtZToiSGFsZi1Sb3VuZGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJkZWxheSIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBkZWxheSIsYWxpYXNlczpbImhhbGYtcm91bmRlZC1yZWN0YW5nbGUiXSxoYW5kbGVyOmJLfSx7c2VtYW50aWNOYW1lOiJEaXJlY3QgQWNjZXNzIFN0b3JhZ2UiLG5hbWU6Ikhvcml6b250YWwgQ3lsaW5kZXIiLHNob3J0TmFtZToiaC1jeWwiLGRlc2NyaXB0aW9uOiJEaXJlY3QgYWNjZXNzIHN0b3JhZ2UiLGFsaWFzZXM6WyJkYXMiLCJob3Jpem9udGFsLWN5bGluZGVyIl0saGFuZGxlcjpSUX0se3NlbWFudGljTmFtZToiRGlzayBTdG9yYWdlIixuYW1lOiJMaW5lZCBDeWxpbmRlciIsc2hvcnROYW1lOiJsaW4tY3lsIixkZXNjcmlwdGlvbjoiRGlzayBzdG9yYWdlIixhbGlhc2VzOlsiZGlzayIsImxpbmVkLWN5bGluZGVyIl0saGFuZGxlcjpZS30se3NlbWFudGljTmFtZToiRGlzcGxheSIsbmFtZToiQ3VydmVkIFRyYXBlem9pZCIsc2hvcnROYW1lOiJjdXJ2LXRyYXAiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgZGlzcGxheSIsYWxpYXNlczpbImN1cnZlZC10cmFwZXpvaWQiLCJkaXNwbGF5Il0saGFuZGxlcjpzS30se3NlbWFudGljTmFtZToiRGl2aWRlZCBQcm9jZXNzIixuYW1lOiJEaXZpZGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJkaXYtcmVjdCIsZGVzY3JpcHRpb246IkRpdmlkZWQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbImRpdi1wcm9jIiwiZGl2aWRlZC1yZWN0YW5nbGUiLCJkaXZpZGVkLXByb2Nlc3MiXSxoYW5kbGVyOnVLfSx7c2VtYW50aWNOYW1lOiJFeHRyYWN0IixuYW1lOiJUcmlhbmdsZSIsc2hvcnROYW1lOiJ0cmkiLGRlc2NyaXB0aW9uOiJFeHRyYWN0aW9uIHByb2Nlc3MiLGFsaWFzZXM6WyJleHRyYWN0IiwidHJpYW5nbGUiXSxoYW5kbGVyOkZRfSx7c2VtYW50aWNOYW1lOiJJbnRlcm5hbCBTdG9yYWdlIixuYW1lOiJXaW5kb3cgUGFuZSIsc2hvcnROYW1lOiJ3aW4tcGFuZSIsZGVzY3JpcHRpb246IkludGVybmFsIHN0b3JhZ2UiLGFsaWFzZXM6WyJpbnRlcm5hbC1zdG9yYWdlIiwid2luZG93LXBhbmUiXSxoYW5kbGVyOkhRfSx7c2VtYW50aWNOYW1lOiJKdW5jdGlvbiIsbmFtZToiRmlsbGVkIENpcmNsZSIsc2hvcnROYW1lOiJmLWNpcmMiLGRlc2NyaXB0aW9uOiJKdW5jdGlvbiBwb2ludCIsYWxpYXNlczpbImp1bmN0aW9uIiwiZmlsbGVkLWNpcmNsZSJdLGhhbmRsZXI6cEt9LHtzZW1hbnRpY05hbWU6Ikxvb3AgTGltaXQiLG5hbWU6IlRyYXBlem9pZGFsIFBlbnRhZ29uIixzaG9ydE5hbWU6Im5vdGNoLXBlbnQiLGRlc2NyaXB0aW9uOiJMb29wIGxpbWl0IHN0ZXAiLGFsaWFzZXM6WyJsb29wLWxpbWl0Iiwibm90Y2hlZC1wZW50YWdvbiJdLGhhbmRsZXI6UFF9LHtzZW1hbnRpY05hbWU6Ik1hbnVhbCBGaWxlIixuYW1lOiJGbGlwcGVkIFRyaWFuZ2xlIixzaG9ydE5hbWU6ImZsaXAtdHJpIixkZXNjcmlwdGlvbjoiTWFudWFsIGZpbGUgb3BlcmF0aW9uIixhbGlhc2VzOlsibWFudWFsLWZpbGUiLCJmbGlwcGVkLXRyaWFuZ2xlIl0saGFuZGxlcjpnS30se3NlbWFudGljTmFtZToiTWFudWFsIElucHV0IixuYW1lOiJTbG9wZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6InNsLXJlY3QiLGRlc2NyaXB0aW9uOiJNYW51YWwgaW5wdXQgc3RlcCIsYWxpYXNlczpbIm1hbnVhbC1pbnB1dCIsInNsb3BlZC1yZWN0YW5nbGUiXSxoYW5kbGVyOmZRfSx7c2VtYW50aWNOYW1lOiJNdWx0aS1Eb2N1bWVudCIsbmFtZToiU3RhY2tlZCBEb2N1bWVudCIsc2hvcnROYW1lOiJkb2NzIixkZXNjcmlwdGlvbjoiTXVsdGlwbGUgZG9jdW1lbnRzIixhbGlhc2VzOlsiZG9jdW1lbnRzIiwic3QtZG9jIiwic3RhY2tlZC1kb2N1bWVudCJdLGhhbmRsZXI6Wkt9LHtzZW1hbnRpY05hbWU6Ik11bHRpLVByb2Nlc3MiLG5hbWU6IlN0YWNrZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6InN0LXJlY3QiLGRlc2NyaXB0aW9uOiJNdWx0aXBsZSBwcm9jZXNzZXMiLGFsaWFzZXM6WyJwcm9jcyIsInByb2Nlc3NlcyIsInN0YWNrZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjpLS30se3NlbWFudGljTmFtZToiU3RvcmVkIERhdGEiLG5hbWU6IkJvdyBUaWUgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImJvdy1yZWN0IixkZXNjcmlwdGlvbjoiU3RvcmVkIGRhdGEiLGFsaWFzZXM6WyJzdG9yZWQtZGF0YSIsImJvdy10aWUtcmVjdGFuZ2xlIl0saGFuZGxlcjpIan0se3NlbWFudGljTmFtZToiU3VtbWFyeSIsbmFtZToiQ3Jvc3NlZCBDaXJjbGUiLHNob3J0TmFtZToiY3Jvc3MtY2lyYyIsZGVzY3JpcHRpb246IlN1bW1hcnkiLGFsaWFzZXM6WyJzdW1tYXJ5IiwiY3Jvc3NlZC1jaXJjbGUiXSxoYW5kbGVyOlpqfSx7c2VtYW50aWNOYW1lOiJUYWdnZWQgRG9jdW1lbnQiLG5hbWU6IlRhZ2dlZCBEb2N1bWVudCIsc2hvcnROYW1lOiJ0YWctZG9jIixkZXNjcmlwdGlvbjoiVGFnZ2VkIGRvY3VtZW50IixhbGlhc2VzOlsidGFnLWRvYyIsInRhZ2dlZC1kb2N1bWVudCJdLGhhbmRsZXI6X1F9LHtzZW1hbnRpY05hbWU6IlRhZ2dlZCBQcm9jZXNzIixuYW1lOiJUYWdnZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6InRhZy1yZWN0IixkZXNjcmlwdGlvbjoiVGFnZ2VkIHByb2Nlc3MiLGFsaWFzZXM6WyJ0YWdnZWQtcmVjdGFuZ2xlIiwidGFnLXByb2MiLCJ0YWdnZWQtcHJvY2VzcyJdLGhhbmRsZXI6Q1F9LHtzZW1hbnRpY05hbWU6IlBhcGVyIFRhcGUiLG5hbWU6IkZsYWciLHNob3J0TmFtZToiZmxhZyIsZGVzY3JpcHRpb246IlBhcGVyIHRhcGUiLGFsaWFzZXM6WyJwYXBlci10YXBlIl0saGFuZGxlcjpWUX0se3NlbWFudGljTmFtZToiT2RkIixuYW1lOiJPZGQiLHNob3J0TmFtZToib2RkIixkZXNjcmlwdGlvbjoiT2RkIHNoYXBlIixpbnRlcm5hbEFsaWFzZXM6WyJyZWN0X2xlZnRfaW52X2Fycm93Il0saGFuZGxlcjppUX0se3NlbWFudGljTmFtZToiTGluZWQgRG9jdW1lbnQiLG5hbWU6IkxpbmVkIERvY3VtZW50IixzaG9ydE5hbWU6Imxpbi1kb2MiLGRlc2NyaXB0aW9uOiJMaW5lZCBkb2N1bWVudCIsYWxpYXNlczpbImxpbmVkLWRvY3VtZW50Il0saGFuZGxlcjpYS31dLEFBZT1vKCgpPT57bGV0IGU9Wy4uLk9iamVjdC5lbnRyaWVzKHtzdGF0ZTp2USxjaG9pY2U6WGosbm90ZTplUSxyZWN0V2l0aFRpdGxlOnNRLGxhYmVsUmVjdDpGSyxpY29uU3F1YXJlOlJLLGljb25DaXJjbGU6X0ssaWNvbjpDSyxpY29uUm91bmRlZDpESyxpbWFnZVNxdWFyZTpJSyxhbmNob3I6JGosa2FuYmFuSXRlbTpLUSxjbGFzc0JveDpYUX0pLC4uLkNBZS5mbGF0TWFwKHI9PltyLnNob3J0TmFtZSwuLi4iYWxpYXNlcyJpbiByP3IuYWxpYXNlczpbXSwuLi4iaW50ZXJuYWxBbGlhc2VzImluIHI/ci5pbnRlcm5hbEFsaWFzZXM6W11dLm1hcChpPT5baSxyLmhhbmRsZXJdKSldO3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZSl9LCJnZW5lcmF0ZVNoYXBlTWFwIiksejk9QUFlKCk7byhaUSwiaXNWYWxpZFNoYXBlIil9KTtmdW5jdGlvbiBwWih0KXtyZXR1cm4gdHlwZW9mIHQ+InUifHx0PT09bnVsbH1mdW5jdGlvbiBfQWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGx9ZnVuY3Rpb24gTEFlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6cFoodCk/W106W3RdfWZ1bmN0aW9uIERBZSh0LGUpe3ZhciByLG4saSxhO2lmKGUpZm9yKGE9T2JqZWN0LmtleXMoZSkscj0wLG49YS5sZW5ndGg7cjxuO3IrPTEpaT1hW3JdLHRbaV09ZVtpXTtyZXR1cm4gdH1mdW5jdGlvbiBOQWUodCxlKXt2YXIgcj0iIixuO2ZvcihuPTA7bjxlO24rPTEpcis9dDtyZXR1cm4gcn1mdW5jdGlvbiBSQWUodCl7cmV0dXJuIHQ9PT0wJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL3R9ZnVuY3Rpb24gbVoodCxlKXt2YXIgcj0iIixuPXQucmVhc29ufHwiKHVua25vd24gcmVhc29uKSI7cmV0dXJuIHQubWFyaz8odC5tYXJrLm5hbWUmJihyKz0naW4gIicrdC5tYXJrLm5hbWUrJyIgJykscis9IigiKyh0Lm1hcmsubGluZSsxKSsiOiIrKHQubWFyay5jb2x1bW4rMSkrIikiLCFlJiZ0Lm1hcmsuc25pcHBldCYmKHIrPWAKCmArdC5tYXJrLnNuaXBwZXQpLG4rIiAiK3IpOm59ZnVuY3Rpb24gYnYodCxlKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubmFtZT0iWUFNTEV4Y2VwdGlvbiIsdGhpcy5yZWFzb249dCx0aGlzLm1hcms9ZSx0aGlzLm1lc3NhZ2U9bVoodGhpcywhMSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrfHwiIn1mdW5jdGlvbiAkOSh0LGUscixuLGkpe3ZhciBhPSIiLHM9IiIsbD1NYXRoLmZsb29yKGkvMiktMTtyZXR1cm4gbi1lPmwmJihhPSIgLi4uICIsZT1uLWwrYS5sZW5ndGgpLHItbj5sJiYocz0iIC4uLiIscj1uK2wtcy5sZW5ndGgpLHtzdHI6YSt0LnNsaWNlKGUscikucmVwbGFjZSgvXHQvZywiXHUyMTkyIikrcyxwb3M6bi1lK2EubGVuZ3RofX1mdW5jdGlvbiBWOSh0LGUpe3JldHVybiBQaS5yZXBlYXQoIiAiLGUtdC5sZW5ndGgpK3R9ZnVuY3Rpb24gekFlKHQsZSl7aWYoZT1PYmplY3QuY3JlYXRlKGV8fG51bGwpLCF0LmJ1ZmZlcilyZXR1cm4gbnVsbDtlLm1heExlbmd0aHx8KGUubWF4TGVuZ3RoPTc5KSx0eXBlb2YgZS5pbmRlbnQhPSJudW1iZXIiJiYoZS5pbmRlbnQ9MSksdHlwZW9mIGUubGluZXNCZWZvcmUhPSJudW1iZXIiJiYoZS5saW5lc0JlZm9yZT0zKSx0eXBlb2YgZS5saW5lc0FmdGVyIT0ibnVtYmVyIiYmKGUubGluZXNBZnRlcj0yKTtmb3IodmFyIHI9L1xyP1xufFxyfFwwL2csbj1bMF0saT1bXSxhLHM9LTE7YT1yLmV4ZWModC5idWZmZXIpOylpLnB1c2goYS5pbmRleCksbi5wdXNoKGEuaW5kZXgrYVswXS5sZW5ndGgpLHQucG9zaXRpb248PWEuaW5kZXgmJnM8MCYmKHM9bi5sZW5ndGgtMik7czwwJiYocz1uLmxlbmd0aC0xKTt2YXIgbD0iIix1LGgsZj1NYXRoLm1pbih0LmxpbmUrZS5saW5lc0FmdGVyLGkubGVuZ3RoKS50b1N0cmluZygpLmxlbmd0aCxkPWUubWF4TGVuZ3RoLShlLmluZGVudCtmKzMpO2Zvcih1PTE7dTw9ZS5saW5lc0JlZm9yZSYmIShzLXU8MCk7dSsrKWg9JDkodC5idWZmZXIsbltzLXVdLGlbcy11XSx0LnBvc2l0aW9uLShuW3NdLW5bcy11XSksZCksbD1QaS5yZXBlYXQoIiAiLGUuaW5kZW50KStWOSgodC5saW5lLXUrMSkudG9TdHJpbmcoKSxmKSsiIHwgIitoLnN0citgCmArbDtmb3IoaD0kOSh0LmJ1ZmZlcixuW3NdLGlbc10sdC5wb3NpdGlvbixkKSxsKz1QaS5yZXBlYXQoIiAiLGUuaW5kZW50KStWOSgodC5saW5lKzEpLnRvU3RyaW5nKCksZikrIiB8ICIraC5zdHIrYApgLGwrPVBpLnJlcGVhdCgiLSIsZS5pbmRlbnQrZiszK2gucG9zKStgXgpgLHU9MTt1PD1lLmxpbmVzQWZ0ZXImJiEocyt1Pj1pLmxlbmd0aCk7dSsrKWg9JDkodC5idWZmZXIsbltzK3VdLGlbcyt1XSx0LnBvc2l0aW9uLShuW3NdLW5bcyt1XSksZCksbCs9UGkucmVwZWF0KCIgIixlLmluZGVudCkrVjkoKHQubGluZSt1KzEpLnRvU3RyaW5nKCksZikrIiB8ICIraC5zdHIrYApgO3JldHVybiBsLnJlcGxhY2UoL1xuJC8sIiIpfWZ1bmN0aW9uIFVBZSh0KXt2YXIgZT17fTtyZXR1cm4gdCE9PW51bGwmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7dFtyXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2VbU3RyaW5nKG4pXT1yfSl9KSxlfWZ1bmN0aW9uIEhBZSh0LGUpe2lmKGU9ZXx8e30sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihyKXtpZigkQWUuaW5kZXhPZihyKT09PS0xKXRocm93IG5ldyBFcygnVW5rbm93biBvcHRpb24gIicrcisnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJyt0KyciIFlBTUwgdHlwZS4nKX0pLHRoaXMub3B0aW9ucz1lLHRoaXMudGFnPXQsdGhpcy5raW5kPWUua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9ZS5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD1lLmNvbnN0cnVjdHx8ZnVuY3Rpb24ocil7cmV0dXJuIHJ9LHRoaXMuaW5zdGFuY2VPZj1lLmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9ZS5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9ZS5yZXByZXNlbnR8fG51bGwsdGhpcy5yZXByZXNlbnROYW1lPWUucmVwcmVzZW50TmFtZXx8bnVsbCx0aGlzLmRlZmF1bHRTdHlsZT1lLmRlZmF1bHRTdHlsZXx8bnVsbCx0aGlzLm11bHRpPWUubXVsdGl8fCExLHRoaXMuc3R5bGVBbGlhc2VzPVVBZShlLnN0eWxlQWxpYXNlc3x8bnVsbCksVkFlLmluZGV4T2YodGhpcy5raW5kKT09PS0xKXRocm93IG5ldyBFcygnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK3QrJyIgWUFNTCB0eXBlLicpfWZ1bmN0aW9uIEpRKHQsZSl7dmFyIHI9W107cmV0dXJuIHRbZV0uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1yLmxlbmd0aDtyLmZvckVhY2goZnVuY3Rpb24oYSxzKXthLnRhZz09PW4udGFnJiZhLmtpbmQ9PT1uLmtpbmQmJmEubXVsdGk9PT1uLm11bHRpJiYoaT1zKX0pLHJbaV09bn0pLHJ9ZnVuY3Rpb24gV0FlKCl7dmFyIHQ9e3NjYWxhcjp7fSxzZXF1ZW5jZTp7fSxtYXBwaW5nOnt9LGZhbGxiYWNrOnt9LG11bHRpOntzY2FsYXI6W10sc2VxdWVuY2U6W10sbWFwcGluZzpbXSxmYWxsYmFjazpbXX19LGUscjtmdW5jdGlvbiBuKGkpe2kubXVsdGk/KHQubXVsdGlbaS5raW5kXS5wdXNoKGkpLHQubXVsdGkuZmFsbGJhY2sucHVzaChpKSk6dFtpLmtpbmRdW2kudGFnXT10LmZhbGxiYWNrW2kudGFnXT1pfWZvcihvKG4sImNvbGxlY3RUeXBlIiksZT0wLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSs9MSlhcmd1bWVudHNbZV0uZm9yRWFjaChuKTtyZXR1cm4gdH1mdW5jdGlvbiBIOSh0KXtyZXR1cm4gdGhpcy5leHRlbmQodCl9ZnVuY3Rpb24gUUFlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlPXQubGVuZ3RoO3JldHVybiBlPT09MSYmdD09PSJ+Inx8ZT09PTQmJih0PT09Im51bGwifHx0PT09Ik51bGwifHx0PT09Ik5VTEwiKX1mdW5jdGlvbiBaQWUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKQWUodCl7cmV0dXJuIHQ9PT1udWxsfWZ1bmN0aW9uIHQ4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT09PTQmJih0PT09InRydWUifHx0PT09IlRydWUifHx0PT09IlRSVUUiKXx8ZT09PTUmJih0PT09ImZhbHNlInx8dD09PSJGYWxzZSJ8fHQ9PT0iRkFMU0UiKX1mdW5jdGlvbiByOGUodCl7cmV0dXJuIHQ9PT0idHJ1ZSJ8fHQ9PT0iVHJ1ZSJ8fHQ9PT0iVFJVRSJ9ZnVuY3Rpb24gbjhlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBCb29sZWFuXSJ9ZnVuY3Rpb24gYThlKHQpe3JldHVybiA0ODw9dCYmdDw9NTd8fDY1PD10JiZ0PD03MHx8OTc8PXQmJnQ8PTEwMn1mdW5jdGlvbiBzOGUodCl7cmV0dXJuIDQ4PD10JiZ0PD01NX1mdW5jdGlvbiBvOGUodCl7cmV0dXJuIDQ4PD10JiZ0PD01N31mdW5jdGlvbiBsOGUodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGU9dC5sZW5ndGgscj0wLG49ITEsaTtpZighZSlyZXR1cm4hMTtpZihpPXRbcl0sKGk9PT0iLSJ8fGk9PT0iKyIpJiYoaT10Wysrcl0pLGk9PT0iMCIpe2lmKHIrMT09PWUpcmV0dXJuITA7aWYoaT10Wysrcl0saT09PSJiIil7Zm9yKHIrKztyPGU7cisrKWlmKGk9dFtyXSxpIT09Il8iKXtpZihpIT09IjAiJiZpIT09IjEiKXJldHVybiExO249ITB9cmV0dXJuIG4mJmkhPT0iXyJ9aWYoaT09PSJ4Iil7Zm9yKHIrKztyPGU7cisrKWlmKGk9dFtyXSxpIT09Il8iKXtpZighYThlKHQuY2hhckNvZGVBdChyKSkpcmV0dXJuITE7bj0hMH1yZXR1cm4gbiYmaSE9PSJfIn1pZihpPT09Im8iKXtmb3IocisrO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKCFzOGUodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4hMTtuPSEwfXJldHVybiBuJiZpIT09Il8ifX1pZihpPT09Il8iKXJldHVybiExO2Zvcig7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoIW84ZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiExO249ITB9cmV0dXJuISghbnx8aT09PSJfIil9ZnVuY3Rpb24gYzhlKHQpe3ZhciBlPXQscj0xLG47aWYoZS5pbmRleE9mKCJfIikhPT0tMSYmKGU9ZS5yZXBsYWNlKC9fL2csIiIpKSxuPWVbMF0sKG49PT0iLSJ8fG49PT0iKyIpJiYobj09PSItIiYmKHI9LTEpLGU9ZS5zbGljZSgxKSxuPWVbMF0pLGU9PT0iMCIpcmV0dXJuIDA7aWYobj09PSIwIil7aWYoZVsxXT09PSJiIilyZXR1cm4gcipwYXJzZUludChlLnNsaWNlKDIpLDIpO2lmKGVbMV09PT0ieCIpcmV0dXJuIHIqcGFyc2VJbnQoZS5zbGljZSgyKSwxNik7aWYoZVsxXT09PSJvIilyZXR1cm4gcipwYXJzZUludChlLnNsaWNlKDIpLDgpfXJldHVybiByKnBhcnNlSW50KGUsMTApfWZ1bmN0aW9uIHU4ZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgTnVtYmVyXSImJnQlMT09PTAmJiFQaS5pc05lZ2F0aXZlWmVybyh0KX1mdW5jdGlvbiBkOGUodCl7cmV0dXJuISh0PT09bnVsbHx8IWY4ZS50ZXN0KHQpfHx0W3QubGVuZ3RoLTFdPT09Il8iKX1mdW5jdGlvbiBwOGUodCl7dmFyIGUscjtyZXR1cm4gZT10LnJlcGxhY2UoL18vZywiIikudG9Mb3dlckNhc2UoKSxyPWVbMF09PT0iLSI/LTE6MSwiKy0iLmluZGV4T2YoZVswXSk+PTAmJihlPWUuc2xpY2UoMSkpLGU9PT0iLmluZiI/cj09PTE/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk51bWJlci5ORUdBVElWRV9JTkZJTklUWTplPT09Ii5uYW4iP05hTjpyKnBhcnNlRmxvYXQoZSwxMCl9ZnVuY3Rpb24gZzhlKHQsZSl7dmFyIHI7aWYoaXNOYU4odCkpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLm5hbiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuTkFOIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5OYU4ifWVsc2UgaWYoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPT09dClzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIuaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLkluZiJ9ZWxzZSBpZihOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT10KXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi0uaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi0uSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi0uSW5mIn1lbHNlIGlmKFBpLmlzTmVnYXRpdmVaZXJvKHQpKXJldHVybiItMC4wIjtyZXR1cm4gcj10LnRvU3RyaW5nKDEwKSxtOGUudGVzdChyKT9yLnJlcGxhY2UoImUiLCIuZSIpOnJ9ZnVuY3Rpb24geThlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBOdW1iZXJdIiYmKHQlMSE9PTB8fFBpLmlzTmVnYXRpdmVaZXJvKHQpKX1mdW5jdGlvbiBiOGUodCl7cmV0dXJuIHQ9PT1udWxsPyExOnlaLmV4ZWModCkhPT1udWxsfHx2Wi5leGVjKHQpIT09bnVsbH1mdW5jdGlvbiB3OGUodCl7dmFyIGUscixuLGksYSxzLGwsdT0wLGg9bnVsbCxmLGQscDtpZihlPXlaLmV4ZWModCksZT09PW51bGwmJihlPXZaLmV4ZWModCkpLGU9PT1udWxsKXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYocj0rZVsxXSxuPStlWzJdLTEsaT0rZVszXSwhZVs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMocixuLGkpKTtpZihhPStlWzRdLHM9K2VbNV0sbD0rZVs2XSxlWzddKXtmb3IodT1lWzddLnNsaWNlKDAsMyk7dS5sZW5ndGg8MzspdSs9IjAiO3U9K3V9cmV0dXJuIGVbOV0mJihmPStlWzEwXSxkPSsoZVsxMV18fDApLGg9KGYqNjArZCkqNmU0LGVbOV09PT0iLSImJihoPS1oKSkscD1uZXcgRGF0ZShEYXRlLlVUQyhyLG4saSxhLHMsbCx1KSksaCYmcC5zZXRUaW1lKHAuZ2V0VGltZSgpLWgpLHB9ZnVuY3Rpb24gVDhlKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gRThlKHQpe3JldHVybiB0PT09Ijw8Inx8dD09PW51bGx9ZnVuY3Rpb24gQzhlKHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlLHIsbj0wLGk9dC5sZW5ndGgsYT1qOTtmb3Iocj0wO3I8aTtyKyspaWYoZT1hLmluZGV4T2YodC5jaGFyQXQocikpLCEoZT42NCkpe2lmKGU8MClyZXR1cm4hMTtuKz02fXJldHVybiBuJTg9PT0wfWZ1bmN0aW9uIEE4ZSh0KXt2YXIgZSxyLG49dC5yZXBsYWNlKC9bXHJcbj1dL2csIiIpLGk9bi5sZW5ndGgsYT1qOSxzPTAsbD1bXTtmb3IoZT0wO2U8aTtlKyspZSU0PT09MCYmZSYmKGwucHVzaChzPj4xNiYyNTUpLGwucHVzaChzPj44JjI1NSksbC5wdXNoKHMmMjU1KSkscz1zPDw2fGEuaW5kZXhPZihuLmNoYXJBdChlKSk7cmV0dXJuIHI9aSU0KjYscj09PTA/KGwucHVzaChzPj4xNiYyNTUpLGwucHVzaChzPj44JjI1NSksbC5wdXNoKHMmMjU1KSk6cj09PTE4PyhsLnB1c2gocz4+MTAmMjU1KSxsLnB1c2gocz4+MiYyNTUpKTpyPT09MTImJmwucHVzaChzPj40JjI1NSksbmV3IFVpbnQ4QXJyYXkobCl9ZnVuY3Rpb24gXzhlKHQpe3ZhciBlPSIiLHI9MCxuLGksYT10Lmxlbmd0aCxzPWo5O2ZvcihuPTA7bjxhO24rKyluJTM9PT0wJiZuJiYoZSs9c1tyPj4xOCY2M10sZSs9c1tyPj4xMiY2M10sZSs9c1tyPj42JjYzXSxlKz1zW3ImNjNdKSxyPShyPDw4KSt0W25dO3JldHVybiBpPWElMyxpPT09MD8oZSs9c1tyPj4xOCY2M10sZSs9c1tyPj4xMiY2M10sZSs9c1tyPj42JjYzXSxlKz1zW3ImNjNdKTppPT09Mj8oZSs9c1tyPj4xMCY2M10sZSs9c1tyPj40JjYzXSxlKz1zW3I8PDImNjNdLGUrPXNbNjRdKTppPT09MSYmKGUrPXNbcj4+MiY2M10sZSs9c1tyPDw0JjYzXSxlKz1zWzY0XSxlKz1zWzY0XSksZX1mdW5jdGlvbiBMOGUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IFVpbnQ4QXJyYXldIn1mdW5jdGlvbiBNOGUodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGU9W10scixuLGksYSxzLGw9dDtmb3Iocj0wLG49bC5sZW5ndGg7cjxuO3IrPTEpe2lmKGk9bFtyXSxzPSExLFI4ZS5jYWxsKGkpIT09IltvYmplY3QgT2JqZWN0XSIpcmV0dXJuITE7Zm9yKGEgaW4gaSlpZihOOGUuY2FsbChpLGEpKWlmKCFzKXM9ITA7ZWxzZSByZXR1cm4hMTtpZighcylyZXR1cm4hMTtpZihlLmluZGV4T2YoYSk9PT0tMSllLnB1c2goYSk7ZWxzZSByZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBJOGUodCl7cmV0dXJuIHQhPT1udWxsP3Q6W119ZnVuY3Rpb24gQjhlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlLHIsbixpLGEscz10O2ZvcihhPW5ldyBBcnJheShzLmxlbmd0aCksZT0wLHI9cy5sZW5ndGg7ZTxyO2UrPTEpe2lmKG49c1tlXSxQOGUuY2FsbChuKSE9PSJbb2JqZWN0IE9iamVjdF0ifHwoaT1PYmplY3Qua2V5cyhuKSxpLmxlbmd0aCE9PTEpKXJldHVybiExO2FbZV09W2lbMF0sbltpWzBdXV19cmV0dXJuITB9ZnVuY3Rpb24gRjhlKHQpe2lmKHQ9PT1udWxsKXJldHVybltdO3ZhciBlLHIsbixpLGEscz10O2ZvcihhPW5ldyBBcnJheShzLmxlbmd0aCksZT0wLHI9cy5sZW5ndGg7ZTxyO2UrPTEpbj1zW2VdLGk9T2JqZWN0LmtleXMobiksYVtlXT1baVswXSxuW2lbMF1dXTtyZXR1cm4gYX1mdW5jdGlvbiAkOGUodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGUscj10O2ZvcihlIGluIHIpaWYoRzhlLmNhbGwocixlKSYmcltlXSE9PW51bGwpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVjhlKHQpe3JldHVybiB0IT09bnVsbD90Ont9fWZ1bmN0aW9uIHRaKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24geWModCl7cmV0dXJuIHQ9PT0xMHx8dD09PTEzfWZ1bmN0aW9uIF9kKHQpe3JldHVybiB0PT09OXx8dD09PTMyfWZ1bmN0aW9uIFNzKHQpe3JldHVybiB0PT09OXx8dD09PTMyfHx0PT09MTB8fHQ9PT0xM31mdW5jdGlvbiBsbSh0KXtyZXR1cm4gdD09PTQ0fHx0PT09OTF8fHQ9PT05M3x8dD09PTEyM3x8dD09PTEyNX1mdW5jdGlvbiBYOGUodCl7dmFyIGU7cmV0dXJuIDQ4PD10JiZ0PD01Nz90LTQ4OihlPXR8MzIsOTc8PWUmJmU8PTEwMj9lLTk3KzEwOi0xKX1mdW5jdGlvbiBqOGUodCl7cmV0dXJuIHQ9PT0xMjA/Mjp0PT09MTE3PzQ6dD09PTg1Pzg6MH1mdW5jdGlvbiBLOGUodCl7cmV0dXJuIDQ4PD10JiZ0PD01Nz90LTQ4Oi0xfWZ1bmN0aW9uIHJaKHQpe3JldHVybiB0PT09NDg/IlwwIjp0PT09OTc/Ilx4MDciOnQ9PT05OD8iXGIiOnQ9PT0xMTZ8fHQ9PT05PyIJIjp0PT09MTEwP2AKYDp0PT09MTE4PyJcdiI6dD09PTEwMj8iXGYiOnQ9PT0xMTQ/IlxyIjp0PT09MTAxPyJceDFCIjp0PT09MzI/IiAiOnQ9PT0zND8nIic6dD09PTQ3PyIvIjp0PT09OTI/IlxcIjp0PT09Nzg/Ilx4ODUiOnQ9PT05NT8iXHhBMCI6dD09PTc2PyJcdTIwMjgiOnQ9PT04MD8iXHUyMDI5IjoiIn1mdW5jdGlvbiBROGUodCl7cmV0dXJuIHQ8PTY1NTM1P1N0cmluZy5mcm9tQ2hhckNvZGUodCk6U3RyaW5nLmZyb21DaGFyQ29kZSgodC02NTUzNj4+MTApKzU1Mjk2LCh0LTY1NTM2JjEwMjMpKzU2MzIwKX1mdW5jdGlvbiBaOGUodCxlKXt0aGlzLmlucHV0PXQsdGhpcy5maWxlbmFtZT1lLmZpbGVuYW1lfHxudWxsLHRoaXMuc2NoZW1hPWUuc2NoZW1hfHx4Wix0aGlzLm9uV2FybmluZz1lLm9uV2FybmluZ3x8bnVsbCx0aGlzLmxlZ2FjeT1lLmxlZ2FjeXx8ITEsdGhpcy5qc29uPWUuanNvbnx8ITEsdGhpcy5saXN0ZW5lcj1lLmxpc3RlbmVyfHxudWxsLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMudHlwZU1hcD10aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXAsdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5wb3NpdGlvbj0wLHRoaXMubGluZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lSW5kZW50PTAsdGhpcy5maXJzdFRhYkluTGluZT0tMSx0aGlzLmRvY3VtZW50cz1bXX1mdW5jdGlvbiBDWih0LGUpe3ZhciByPXtuYW1lOnQuZmlsZW5hbWUsYnVmZmVyOnQuaW5wdXQuc2xpY2UoMCwtMSkscG9zaXRpb246dC5wb3NpdGlvbixsaW5lOnQubGluZSxjb2x1bW46dC5wb3NpdGlvbi10LmxpbmVTdGFydH07cmV0dXJuIHIuc25pcHBldD1HQWUociksbmV3IEVzKGUscil9ZnVuY3Rpb24gUXQodCxlKXt0aHJvdyBDWih0LGUpfWZ1bmN0aW9uIEY1KHQsZSl7dC5vbldhcm5pbmcmJnQub25XYXJuaW5nLmNhbGwobnVsbCxDWih0LGUpKX1mdW5jdGlvbiBHaCh0LGUscixuKXt2YXIgaSxhLHMsbDtpZihlPHIpe2lmKGw9dC5pbnB1dC5zbGljZShlLHIpLG4pZm9yKGk9MCxhPWwubGVuZ3RoO2k8YTtpKz0xKXM9bC5jaGFyQ29kZUF0KGkpLHM9PT05fHwzMjw9cyYmczw9MTExNDExMXx8UXQodCwiZXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXIiKTtlbHNlIFc4ZS50ZXN0KGwpJiZRdCh0LCJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpO3QucmVzdWx0Kz1sfX1mdW5jdGlvbiBpWih0LGUscixuKXt2YXIgaSxhLHMsbDtmb3IoUGkuaXNPYmplY3Qocil8fFF0KHQsImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlIiksaT1PYmplY3Qua2V5cyhyKSxzPTAsbD1pLmxlbmd0aDtzPGw7cys9MSlhPWlbc10sJGguY2FsbChlLGEpfHwoZVthXT1yW2FdLG5bYV09ITApfWZ1bmN0aW9uIGNtKHQsZSxyLG4saSxhLHMsbCx1KXt2YXIgaCxmO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSksaD0wLGY9aS5sZW5ndGg7aDxmO2grPTEpQXJyYXkuaXNBcnJheShpW2hdKSYmUXQodCwibmVzdGVkIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUga2V5cyIpLHR5cGVvZiBpPT0ib2JqZWN0IiYmdFooaVtoXSk9PT0iW29iamVjdCBPYmplY3RdIiYmKGlbaF09IltvYmplY3QgT2JqZWN0XSIpO2lmKHR5cGVvZiBpPT0ib2JqZWN0IiYmdFooaSk9PT0iW29iamVjdCBPYmplY3RdIiYmKGk9IltvYmplY3QgT2JqZWN0XSIpLGk9U3RyaW5nKGkpLGU9PT1udWxsJiYoZT17fSksbj09PSJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIpaWYoQXJyYXkuaXNBcnJheShhKSlmb3IoaD0wLGY9YS5sZW5ndGg7aDxmO2grPTEpaVoodCxlLGFbaF0scik7ZWxzZSBpWih0LGUsYSxyKTtlbHNlIXQuanNvbiYmISRoLmNhbGwocixpKSYmJGguY2FsbChlLGkpJiYodC5saW5lPXN8fHQubGluZSx0LmxpbmVTdGFydD1sfHx0LmxpbmVTdGFydCx0LnBvc2l0aW9uPXV8fHQucG9zaXRpb24sUXQodCwiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpKSxpPT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6YX0pOmVbaV09YSxkZWxldGUgcltpXTtyZXR1cm4gZX1mdW5jdGlvbiBLOSh0KXt2YXIgZTtlPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxlPT09MTA/dC5wb3NpdGlvbisrOmU9PT0xMz8odC5wb3NpdGlvbisrLHQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTEwJiZ0LnBvc2l0aW9uKyspOlF0KHQsImEgbGluZSBicmVhayBpcyBleHBlY3RlZCIpLHQubGluZSs9MSx0LmxpbmVTdGFydD10LnBvc2l0aW9uLHQuZmlyc3RUYWJJbkxpbmU9LTF9ZnVuY3Rpb24gQ2kodCxlLHIpe2Zvcih2YXIgbj0wLGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2khPT0wOyl7Zm9yKDtfZChpKTspaT09PTkmJnQuZmlyc3RUYWJJbkxpbmU9PT0tMSYmKHQuZmlyc3RUYWJJbkxpbmU9dC5wb3NpdGlvbiksaT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZihlJiZpPT09MzUpZG8gaT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShpIT09MTAmJmkhPT0xMyYmaSE9PTApO2lmKHljKGkpKWZvcihLOSh0KSxpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxuKyssdC5saW5lSW5kZW50PTA7aT09PTMyOyl0LmxpbmVJbmRlbnQrKyxpPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2Vsc2UgYnJlYWt9cmV0dXJuIHIhPT0tMSYmbiE9PTAmJnQubGluZUluZGVudDxyJiZGNSh0LCJkZWZpY2llbnQgaW5kZW50YXRpb24iKSxufWZ1bmN0aW9uICQ1KHQpe3ZhciBlPXQucG9zaXRpb24scjtyZXR1cm4gcj10LmlucHV0LmNoYXJDb2RlQXQoZSksISEoKHI9PT00NXx8cj09PTQ2KSYmcj09PXQuaW5wdXQuY2hhckNvZGVBdChlKzEpJiZyPT09dC5pbnB1dC5jaGFyQ29kZUF0KGUrMikmJihlKz0zLHI9dC5pbnB1dC5jaGFyQ29kZUF0KGUpLHI9PT0wfHxTcyhyKSkpfWZ1bmN0aW9uIFE5KHQsZSl7ZT09PTE/dC5yZXN1bHQrPSIgIjplPjEmJih0LnJlc3VsdCs9UGkucmVwZWF0KGAKYCxlLTEpKX1mdW5jdGlvbiBKOGUodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxoLGYsZD10LmtpbmQscD10LnJlc3VsdCxtO2lmKG09dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLFNzKG0pfHxsbShtKXx8bT09PTM1fHxtPT09Mzh8fG09PT00Mnx8bT09PTMzfHxtPT09MTI0fHxtPT09NjJ8fG09PT0zOXx8bT09PTM0fHxtPT09Mzd8fG09PT02NHx8bT09PTk2fHwobT09PTYzfHxtPT09NDUpJiYoaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSxTcyhpKXx8ciYmbG0oaSkpKXJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiIsYT1zPXQucG9zaXRpb24sbD0hMTttIT09MDspe2lmKG09PT01OCl7aWYoaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSxTcyhpKXx8ciYmbG0oaSkpYnJlYWt9ZWxzZSBpZihtPT09MzUpe2lmKG49dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24tMSksU3MobikpYnJlYWt9ZWxzZXtpZih0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJiQ1KHQpfHxyJiZsbShtKSlicmVhaztpZih5YyhtKSlpZih1PXQubGluZSxoPXQubGluZVN0YXJ0LGY9dC5saW5lSW5kZW50LENpKHQsITEsLTEpLHQubGluZUluZGVudD49ZSl7bD0hMCxtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtjb250aW51ZX1lbHNle3QucG9zaXRpb249cyx0LmxpbmU9dSx0LmxpbmVTdGFydD1oLHQubGluZUluZGVudD1mO2JyZWFrfX1sJiYoR2godCxhLHMsITEpLFE5KHQsdC5saW5lLXUpLGE9cz10LnBvc2l0aW9uLGw9ITEpLF9kKG0pfHwocz10LnBvc2l0aW9uKzEpLG09dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbil9cmV0dXJuIEdoKHQsYSxzLCExKSx0LnJlc3VsdD8hMDoodC5raW5kPWQsdC5yZXN1bHQ9cCwhMSl9ZnVuY3Rpb24gZV9lKHQsZSl7dmFyIHIsbixpO2lmKHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLHIhPT0zOSlyZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiLHQucG9zaXRpb24rKyxuPWk9dC5wb3NpdGlvbjsocj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikpIT09MDspaWYocj09PTM5KWlmKEdoKHQsbix0LnBvc2l0aW9uLCEwKSxyPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHI9PT0zOSluPXQucG9zaXRpb24sdC5wb3NpdGlvbisrLGk9dC5wb3NpdGlvbjtlbHNlIHJldHVybiEwO2Vsc2UgeWMocik/KEdoKHQsbixpLCEwKSxROSh0LENpKHQsITEsZSkpLG49aT10LnBvc2l0aW9uKTp0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJiQ1KHQpP1F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOih0LnBvc2l0aW9uKyssaT10LnBvc2l0aW9uKTtRdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gdF9lKHQsZSl7dmFyIHIsbixpLGEscyxsO2lmKGw9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGwhPT0zNClyZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiLHQucG9zaXRpb24rKyxyPW49dC5wb3NpdGlvbjsobD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikpIT09MDspe2lmKGw9PT0zNClyZXR1cm4gR2godCxyLHQucG9zaXRpb24sITApLHQucG9zaXRpb24rKywhMDtpZihsPT09OTIpe2lmKEdoKHQscix0LnBvc2l0aW9uLCEwKSxsPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHljKGwpKUNpKHQsITEsZSk7ZWxzZSBpZihsPDI1NiYmRVpbbF0pdC5yZXN1bHQrPVNaW2xdLHQucG9zaXRpb24rKztlbHNlIGlmKChzPWo4ZShsKSk+MCl7Zm9yKGk9cyxhPTA7aT4wO2ktLSlsPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLChzPVg4ZShsKSk+PTA/YT0oYTw8NCkrczpRdCh0LCJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIiKTt0LnJlc3VsdCs9UThlKGEpLHQucG9zaXRpb24rK31lbHNlIFF0KHQsInVua25vd24gZXNjYXBlIHNlcXVlbmNlIik7cj1uPXQucG9zaXRpb259ZWxzZSB5YyhsKT8oR2godCxyLG4sITApLFE5KHQsQ2kodCwhMSxlKSkscj1uPXQucG9zaXRpb24pOnQucG9zaXRpb249PT10LmxpbmVTdGFydCYmJDUodCk/UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik6KHQucG9zaXRpb24rKyxuPXQucG9zaXRpb24pfVF0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiByX2UodCxlKXt2YXIgcj0hMCxuLGksYSxzPXQudGFnLGwsdT10LmFuY2hvcixoLGYsZCxwLG0sZz1PYmplY3QuY3JlYXRlKG51bGwpLHksdix4LGI7aWYoYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksYj09PTkxKWY9OTMsbT0hMSxsPVtdO2Vsc2UgaWYoYj09PTEyMylmPTEyNSxtPSEwLGw9e307ZWxzZSByZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPWwpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7YiE9PTA7KXtpZihDaSh0LCEwLGUpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGI9PT1mKXJldHVybiB0LnBvc2l0aW9uKyssdC50YWc9cyx0LmFuY2hvcj11LHQua2luZD1tPyJtYXBwaW5nIjoic2VxdWVuY2UiLHQucmVzdWx0PWwsITA7cj9iPT09NDQmJlF0KHQsImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAnLCciKTpRdCh0LCJtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllcyIpLHY9eT14PW51bGwsZD1wPSExLGI9PT02MyYmKGg9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksU3MoaCkmJihkPXA9ITAsdC5wb3NpdGlvbisrLENpKHQsITAsZSkpKSxuPXQubGluZSxpPXQubGluZVN0YXJ0LGE9dC5wb3NpdGlvbix1bSh0LGUsUDUsITEsITApLHY9dC50YWcseT10LnJlc3VsdCxDaSh0LCEwLGUpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLChwfHx0LmxpbmU9PT1uKSYmYj09PTU4JiYoZD0hMCxiPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLENpKHQsITAsZSksdW0odCxlLFA1LCExLCEwKSx4PXQucmVzdWx0KSxtP2NtKHQsbCxnLHYseSx4LG4saSxhKTpkP2wucHVzaChjbSh0LG51bGwsZyx2LHkseCxuLGksYSkpOmwucHVzaCh5KSxDaSh0LCEwLGUpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGI9PT00ND8ocj0hMCxiPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTpyPSExfVF0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uIil9ZnVuY3Rpb24gbl9lKHQsZSl7dmFyIHIsbixpPVU5LGE9ITEscz0hMSxsPWUsdT0wLGg9ITEsZixkO2lmKGQ9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGQ9PT0xMjQpbj0hMTtlbHNlIGlmKGQ9PT02MiluPSEwO2Vsc2UgcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIjtkIT09MDspaWYoZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxkPT09NDN8fGQ9PT00NSlVOT09PWk/aT1kPT09NDM/ZVo6SDhlOlF0KHQsInJlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllciIpO2Vsc2UgaWYoKGY9SzhlKGQpKT49MClmPT09MD9RdCh0LCJiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lIik6cz9RdCh0LCJyZXBlYXQgb2YgYW4gaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllciIpOihsPWUrZi0xLHM9ITApO2Vsc2UgYnJlYWs7aWYoX2QoZCkpe2RvIGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUoX2QoZCkpO2lmKGQ9PT0zNSlkbyBkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKCF5YyhkKSYmZCE9PTApfWZvcig7ZCE9PTA7KXtmb3IoSzkodCksdC5saW5lSW5kZW50PTAsZD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7KCFzfHx0LmxpbmVJbmRlbnQ8bCkmJmQ9PT0zMjspdC5saW5lSW5kZW50KyssZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZighcyYmdC5saW5lSW5kZW50PmwmJihsPXQubGluZUluZGVudCkseWMoZCkpe3UrKztjb250aW51ZX1pZih0LmxpbmVJbmRlbnQ8bCl7aT09PWVaP3QucmVzdWx0Kz1QaS5yZXBlYXQoYApgLGE/MSt1OnUpOmk9PT1VOSYmYSYmKHQucmVzdWx0Kz1gCmApO2JyZWFrfWZvcihuP19kKGQpPyhoPSEwLHQucmVzdWx0Kz1QaS5yZXBlYXQoYApgLGE/MSt1OnUpKTpoPyhoPSExLHQucmVzdWx0Kz1QaS5yZXBlYXQoYApgLHUrMSkpOnU9PT0wP2EmJih0LnJlc3VsdCs9IiAiKTp0LnJlc3VsdCs9UGkucmVwZWF0KGAKYCx1KTp0LnJlc3VsdCs9UGkucmVwZWF0KGAKYCxhPzErdTp1KSxhPSEwLHM9ITAsdT0wLHI9dC5wb3NpdGlvbjsheWMoZCkmJmQhPT0wOylkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO0doKHQscix0LnBvc2l0aW9uLCExKX1yZXR1cm4hMH1mdW5jdGlvbiBhWih0LGUpe3ZhciByLG49dC50YWcsaT10LmFuY2hvcixhPVtdLHMsbD0hMSx1O2lmKHQuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPWEpLHU9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO3UhPT0wJiYodC5maXJzdFRhYkluTGluZSE9PS0xJiYodC5wb3NpdGlvbj10LmZpcnN0VGFiSW5MaW5lLFF0KHQsInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24iKSksISh1IT09NDV8fChzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLCFTcyhzKSkpKTspe2lmKGw9ITAsdC5wb3NpdGlvbisrLENpKHQsITAsLTEpJiZ0LmxpbmVJbmRlbnQ8PWUpe2EucHVzaChudWxsKSx1PXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtjb250aW51ZX1pZihyPXQubGluZSx1bSh0LGUsd1osITEsITApLGEucHVzaCh0LnJlc3VsdCksQ2kodCwhMCwtMSksdT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksKHQubGluZT09PXJ8fHQubGluZUluZGVudD5lKSYmdSE9PTApUXQodCwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKHQubGluZUluZGVudDxlKWJyZWFrfXJldHVybiBsPyh0LnRhZz1uLHQuYW5jaG9yPWksdC5raW5kPSJzZXF1ZW5jZSIsdC5yZXN1bHQ9YSwhMCk6ITF9ZnVuY3Rpb24gaV9lKHQsZSxyKXt2YXIgbixpLGEscyxsLHUsaD10LnRhZyxmPXQuYW5jaG9yLGQ9e30scD1PYmplY3QuY3JlYXRlKG51bGwpLG09bnVsbCxnPW51bGwseT1udWxsLHY9ITEseD0hMSxiO2lmKHQuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPWQpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2IhPT0wOyl7aWYoIXYmJnQuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKHQucG9zaXRpb249dC5maXJzdFRhYkluTGluZSxRdCh0LCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLG49dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksYT10LmxpbmUsKGI9PT02M3x8Yj09PTU4KSYmU3MobikpYj09PTYzPyh2JiYoY20odCxkLHAsbSxnLG51bGwscyxsLHUpLG09Zz15PW51bGwpLHg9ITAsdj0hMCxpPSEwKTp2Pyh2PSExLGk9ITApOlF0KHQsImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmUiKSx0LnBvc2l0aW9uKz0xLGI9bjtlbHNle2lmKHM9dC5saW5lLGw9dC5saW5lU3RhcnQsdT10LnBvc2l0aW9uLCF1bSh0LHIsYlosITEsITApKWJyZWFrO2lmKHQubGluZT09PWEpe2ZvcihiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtfZChiKTspYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZihiPT09NTgpYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxTcyhiKXx8UXQodCwiYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nIiksdiYmKGNtKHQsZCxwLG0sZyxudWxsLHMsbCx1KSxtPWc9eT1udWxsKSx4PSEwLHY9ITEsaT0hMSxtPXQudGFnLGc9dC5yZXN1bHQ7ZWxzZSBpZih4KVF0KHQsImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIik7ZWxzZSByZXR1cm4gdC50YWc9aCx0LmFuY2hvcj1mLCEwfWVsc2UgaWYoeClRdCh0LCJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTtlbHNlIHJldHVybiB0LnRhZz1oLHQuYW5jaG9yPWYsITB9aWYoKHQubGluZT09PWF8fHQubGluZUluZGVudD5lKSYmKHYmJihzPXQubGluZSxsPXQubGluZVN0YXJ0LHU9dC5wb3NpdGlvbiksdW0odCxlLEI1LCEwLGkpJiYodj9nPXQucmVzdWx0Onk9dC5yZXN1bHQpLHZ8fChjbSh0LGQscCxtLGcseSxzLGwsdSksbT1nPXk9bnVsbCksQ2kodCwhMCwtMSksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikpLCh0LmxpbmU9PT1hfHx0LmxpbmVJbmRlbnQ+ZSkmJmIhPT0wKVF0KHQsImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTtlbHNlIGlmKHQubGluZUluZGVudDxlKWJyZWFrfXJldHVybiB2JiZjbSh0LGQscCxtLGcsbnVsbCxzLGwsdSkseCYmKHQudGFnPWgsdC5hbmNob3I9Zix0LmtpbmQ9Im1hcHBpbmciLHQucmVzdWx0PWQpLHh9ZnVuY3Rpb24gYV9lKHQpe3ZhciBlLHI9ITEsbj0hMSxpLGEscztpZihzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxzIT09MzMpcmV0dXJuITE7aWYodC50YWchPT1udWxsJiZRdCh0LCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eSIpLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikscz09PTYwPyhyPSEwLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOnM9PT0zMz8obj0hMCxpPSIhISIscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6aT0iISIsZT10LnBvc2l0aW9uLHIpe2RvIHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUocyE9PTAmJnMhPT02Mik7dC5wb3NpdGlvbjx0Lmxlbmd0aD8oYT10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbikscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKX1lbHNle2Zvcig7cyE9PTAmJiFTcyhzKTspcz09PTMzJiYobj9RdCh0LCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik6KGk9dC5pbnB1dC5zbGljZShlLTEsdC5wb3NpdGlvbisxKSxUWi50ZXN0KGkpfHxRdCh0LCJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpLG49ITAsZT10LnBvc2l0aW9uKzEpKSxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2E9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLHE4ZS50ZXN0KGEpJiZRdCh0LCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKX1hJiYha1oudGVzdChhKSYmUXQodCwidGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAiK2EpO3RyeXthPWRlY29kZVVSSUNvbXBvbmVudChhKX1jYXRjaHtRdCh0LCJ0YWcgbmFtZSBpcyBtYWxmb3JtZWQ6ICIrYSl9cmV0dXJuIHI/dC50YWc9YTokaC5jYWxsKHQudGFnTWFwLGkpP3QudGFnPXQudGFnTWFwW2ldK2E6aT09PSIhIj90LnRhZz0iISIrYTppPT09IiEhIj90LnRhZz0idGFnOnlhbWwub3JnLDIwMDI6IithOlF0KHQsJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJytpKyciJyksITB9ZnVuY3Rpb24gc19lKHQpe3ZhciBlLHI7aWYocj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksciE9PTM4KXJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJlF0KHQsImR1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eSIpLHI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksZT10LnBvc2l0aW9uO3IhPT0wJiYhU3MocikmJiFsbShyKTspcj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtyZXR1cm4gdC5wb3NpdGlvbj09PWUmJlF0KHQsIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSx0LmFuY2hvcj10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksITB9ZnVuY3Rpb24gb19lKHQpe3ZhciBlLHIsbjtpZihuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxuIT09NDIpcmV0dXJuITE7Zm9yKG49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksZT10LnBvc2l0aW9uO24hPT0wJiYhU3MobikmJiFsbShuKTspbj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtyZXR1cm4gdC5wb3NpdGlvbj09PWUmJlF0KHQsIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLHI9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLCRoLmNhbGwodC5hbmNob3JNYXAscil8fFF0KHQsJ3VuaWRlbnRpZmllZCBhbGlhcyAiJytyKyciJyksdC5yZXN1bHQ9dC5hbmNob3JNYXBbcl0sQ2kodCwhMCwtMSksITB9ZnVuY3Rpb24gdW0odCxlLHIsbixpKXt2YXIgYSxzLGwsdT0xLGg9ITEsZj0hMSxkLHAsbSxnLHksdjtpZih0Lmxpc3RlbmVyIT09bnVsbCYmdC5saXN0ZW5lcigib3BlbiIsdCksdC50YWc9bnVsbCx0LmFuY2hvcj1udWxsLHQua2luZD1udWxsLHQucmVzdWx0PW51bGwsYT1zPWw9QjU9PT1yfHx3Wj09PXIsbiYmQ2kodCwhMCwtMSkmJihoPSEwLHQubGluZUluZGVudD5lP3U9MTp0LmxpbmVJbmRlbnQ9PT1lP3U9MDp0LmxpbmVJbmRlbnQ8ZSYmKHU9LTEpKSx1PT09MSlmb3IoO2FfZSh0KXx8c19lKHQpOylDaSh0LCEwLC0xKT8oaD0hMCxsPWEsdC5saW5lSW5kZW50PmU/dT0xOnQubGluZUluZGVudD09PWU/dT0wOnQubGluZUluZGVudDxlJiYodT0tMSkpOmw9ITE7aWYobCYmKGw9aHx8aSksKHU9PT0xfHxCNT09PXIpJiYoUDU9PT1yfHxiWj09PXI/eT1lOnk9ZSsxLHY9dC5wb3NpdGlvbi10LmxpbmVTdGFydCx1PT09MT9sJiYoYVoodCx2KXx8aV9lKHQsdix5KSl8fHJfZSh0LHkpP2Y9ITA6KHMmJm5fZSh0LHkpfHxlX2UodCx5KXx8dF9lKHQseSk/Zj0hMDpvX2UodCk/KGY9ITAsKHQudGFnIT09bnVsbHx8dC5hbmNob3IhPT1udWxsKSYmUXQodCwiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKSk6SjhlKHQseSxQNT09PXIpJiYoZj0hMCx0LnRhZz09PW51bGwmJih0LnRhZz0iPyIpKSx0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09dC5yZXN1bHQpKTp1PT09MCYmKGY9bCYmYVoodCx2KSkpLHQudGFnPT09bnVsbCl0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09dC5yZXN1bHQpO2Vsc2UgaWYodC50YWc9PT0iPyIpe2Zvcih0LnJlc3VsdCE9PW51bGwmJnQua2luZCE9PSJzY2FsYXIiJiZRdCh0LCd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPD8+IHRhZzsgaXQgc2hvdWxkIGJlICJzY2FsYXIiLCBub3QgIicrdC5raW5kKyciJyksZD0wLHA9dC5pbXBsaWNpdFR5cGVzLmxlbmd0aDtkPHA7ZCs9MSlpZihnPXQuaW1wbGljaXRUeXBlc1tkXSxnLnJlc29sdmUodC5yZXN1bHQpKXt0LnJlc3VsdD1nLmNvbnN0cnVjdCh0LnJlc3VsdCksdC50YWc9Zy50YWcsdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KTticmVha319ZWxzZSBpZih0LnRhZyE9PSIhIil7aWYoJGguY2FsbCh0LnR5cGVNYXBbdC5raW5kfHwiZmFsbGJhY2siXSx0LnRhZykpZz10LnR5cGVNYXBbdC5raW5kfHwiZmFsbGJhY2siXVt0LnRhZ107ZWxzZSBmb3IoZz1udWxsLG09dC50eXBlTWFwLm11bHRpW3Qua2luZHx8ImZhbGxiYWNrIl0sZD0wLHA9bS5sZW5ndGg7ZDxwO2QrPTEpaWYodC50YWcuc2xpY2UoMCxtW2RdLnRhZy5sZW5ndGgpPT09bVtkXS50YWcpe2c9bVtkXTticmVha31nfHxRdCh0LCJ1bmtub3duIHRhZyAhPCIrdC50YWcrIj4iKSx0LnJlc3VsdCE9PW51bGwmJmcua2luZCE9PXQua2luZCYmUXQodCwidW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwiK3QudGFnKyc+IHRhZzsgaXQgc2hvdWxkIGJlICInK2cua2luZCsnIiwgbm90ICInK3Qua2luZCsnIicpLGcucmVzb2x2ZSh0LnJlc3VsdCx0LnRhZyk/KHQucmVzdWx0PWcuY29uc3RydWN0KHQucmVzdWx0LHQudGFnKSx0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09dC5yZXN1bHQpKTpRdCh0LCJjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCIrdC50YWcrIj4gZXhwbGljaXQgdGFnIil9cmV0dXJuIHQubGlzdGVuZXIhPT1udWxsJiZ0Lmxpc3RlbmVyKCJjbG9zZSIsdCksdC50YWchPT1udWxsfHx0LmFuY2hvciE9PW51bGx8fGZ9ZnVuY3Rpb24gbF9lKHQpe3ZhciBlPXQucG9zaXRpb24scixuLGksYT0hMSxzO2Zvcih0LnZlcnNpb249bnVsbCx0LmNoZWNrTGluZUJyZWFrcz10LmxlZ2FjeSx0LnRhZ01hcD1PYmplY3QuY3JlYXRlKG51bGwpLHQuYW5jaG9yTWFwPU9iamVjdC5jcmVhdGUobnVsbCk7KHM9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTAmJihDaSh0LCEwLC0xKSxzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwhKHQubGluZUluZGVudD4wfHxzIT09MzcpKTspe2ZvcihhPSEwLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikscj10LnBvc2l0aW9uO3MhPT0wJiYhU3Mocyk7KXM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7Zm9yKG49dC5pbnB1dC5zbGljZShyLHQucG9zaXRpb24pLGk9W10sbi5sZW5ndGg8MSYmUXQodCwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7cyE9PTA7KXtmb3IoO19kKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKHM9PT0zNSl7ZG8gcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShzIT09MCYmIXljKHMpKTticmVha31pZih5YyhzKSlicmVhaztmb3Iocj10LnBvc2l0aW9uO3MhPT0wJiYhU3Mocyk7KXM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aS5wdXNoKHQuaW5wdXQuc2xpY2Uocix0LnBvc2l0aW9uKSl9cyE9PTAmJks5KHQpLCRoLmNhbGwoblosbik/blpbbl0odCxuLGkpOkY1KHQsJ3Vua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlICInK24rJyInKX1pZihDaSh0LCEwLC0xKSx0LmxpbmVJbmRlbnQ9PT0wJiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT00NSYmdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSk9PT00NSYmdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMik9PT00NT8odC5wb3NpdGlvbis9MyxDaSh0LCEwLC0xKSk6YSYmUXQodCwiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpLHVtKHQsdC5saW5lSW5kZW50LTEsQjUsITEsITApLENpKHQsITAsLTEpLHQuY2hlY2tMaW5lQnJlYWtzJiZZOGUudGVzdCh0LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbikpJiZGNSh0LCJub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnQiKSx0LmRvY3VtZW50cy5wdXNoKHQucmVzdWx0KSx0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJiQ1KHQpKXt0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT00NiYmKHQucG9zaXRpb24rPTMsQ2kodCwhMCwtMSkpO3JldHVybn1pZih0LnBvc2l0aW9uPHQubGVuZ3RoLTEpUXQodCwiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKTtlbHNlIHJldHVybn1mdW5jdGlvbiBBWih0LGUpe3Q9U3RyaW5nKHQpLGU9ZXx8e30sdC5sZW5ndGghPT0wJiYodC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpIT09MTAmJnQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSE9PTEzJiYodCs9YApgKSx0LmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKHQ9dC5zbGljZSgxKSkpO3ZhciByPW5ldyBaOGUodCxlKSxuPXQuaW5kZXhPZigiXDAiKTtmb3IobiE9PS0xJiYoci5wb3NpdGlvbj1uLFF0KHIsIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpKSxyLmlucHV0Kz0iXDAiO3IuaW5wdXQuY2hhckNvZGVBdChyLnBvc2l0aW9uKT09PTMyOylyLmxpbmVJbmRlbnQrPTEsci5wb3NpdGlvbis9MTtmb3IoO3IucG9zaXRpb248ci5sZW5ndGgtMTspbF9lKHIpO3JldHVybiByLmRvY3VtZW50c31mdW5jdGlvbiBjX2UodCxlLHIpe2UhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJnR5cGVvZiByPiJ1IiYmKHI9ZSxlPW51bGwpO3ZhciBuPUFaKHQscik7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuIG47Zm9yKHZhciBpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSllKG5baV0pfWZ1bmN0aW9uIHVfZSh0LGUpe3ZhciByPUFaKHQsZSk7aWYoci5sZW5ndGghPT0wKXtpZihyLmxlbmd0aD09PTEpcmV0dXJuIHJbMF07dGhyb3cgbmV3IEVzKCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZSIpfX1mdW5jdGlvbiBOX2UodCxlKXt2YXIgcixuLGksYSxzLGwsdTtpZihlPT09bnVsbClyZXR1cm57fTtmb3Iocj17fSxuPU9iamVjdC5rZXlzKGUpLGk9MCxhPW4ubGVuZ3RoO2k8YTtpKz0xKXM9bltpXSxsPVN0cmluZyhlW3NdKSxzLnNsaWNlKDAsMik9PT0iISEiJiYocz0idGFnOnlhbWwub3JnLDIwMDI6IitzLnNsaWNlKDIpKSx1PXQuY29tcGlsZWRUeXBlTWFwLmZhbGxiYWNrW3NdLHUmJkRaLmNhbGwodS5zdHlsZUFsaWFzZXMsbCkmJihsPXUuc3R5bGVBbGlhc2VzW2xdKSxyW3NdPWw7cmV0dXJuIHJ9ZnVuY3Rpb24gUl9lKHQpe3ZhciBlLHIsbjtpZihlPXQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksdDw9MjU1KXI9IngiLG49MjtlbHNlIGlmKHQ8PTY1NTM1KXI9InUiLG49NDtlbHNlIGlmKHQ8PTQyOTQ5NjcyOTUpcj0iVSIsbj04O2Vsc2UgdGhyb3cgbmV3IEVzKCJjb2RlIHBvaW50IHdpdGhpbiBhIHN0cmluZyBtYXkgbm90IGJlIGdyZWF0ZXIgdGhhbiAweEZGRkZGRkZGIik7cmV0dXJuIlxcIityK1BpLnJlcGVhdCgiMCIsbi1lLmxlbmd0aCkrZX1mdW5jdGlvbiBJX2UodCl7dGhpcy5zY2hlbWE9dC5zY2hlbWF8fHhaLHRoaXMuaW5kZW50PU1hdGgubWF4KDEsdC5pbmRlbnR8fDIpLHRoaXMubm9BcnJheUluZGVudD10Lm5vQXJyYXlJbmRlbnR8fCExLHRoaXMuc2tpcEludmFsaWQ9dC5za2lwSW52YWxpZHx8ITEsdGhpcy5mbG93TGV2ZWw9UGkuaXNOb3RoaW5nKHQuZmxvd0xldmVsKT8tMTp0LmZsb3dMZXZlbCx0aGlzLnN0eWxlTWFwPU5fZSh0aGlzLnNjaGVtYSx0LnN0eWxlc3x8bnVsbCksdGhpcy5zb3J0S2V5cz10LnNvcnRLZXlzfHwhMSx0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aHx8ODAsdGhpcy5ub1JlZnM9dC5ub1JlZnN8fCExLHRoaXMubm9Db21wYXRNb2RlPXQubm9Db21wYXRNb2RlfHwhMSx0aGlzLmNvbmRlbnNlRmxvdz10LmNvbmRlbnNlRmxvd3x8ITEsdGhpcy5xdW90aW5nVHlwZT10LnF1b3RpbmdUeXBlPT09JyInP1R2Ok1fZSx0aGlzLmZvcmNlUXVvdGVzPXQuZm9yY2VRdW90ZXN8fCExLHRoaXMucmVwbGFjZXI9dHlwZW9mIHQucmVwbGFjZXI9PSJmdW5jdGlvbiI/dC5yZXBsYWNlcjpudWxsLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMuZXhwbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0LHRoaXMudGFnPW51bGwsdGhpcy5yZXN1bHQ9IiIsdGhpcy5kdXBsaWNhdGVzPVtdLHRoaXMudXNlZER1cGxpY2F0ZXM9bnVsbH1mdW5jdGlvbiBzWih0LGUpe2Zvcih2YXIgcj1QaS5yZXBlYXQoIiAiLGUpLG49MCxpPS0xLGE9IiIscyxsPXQubGVuZ3RoO248bDspaT10LmluZGV4T2YoYApgLG4pLGk9PT0tMT8ocz10LnNsaWNlKG4pLG49bCk6KHM9dC5zbGljZShuLGkrMSksbj1pKzEpLHMubGVuZ3RoJiZzIT09YApgJiYoYSs9ciksYSs9cztyZXR1cm4gYX1mdW5jdGlvbiBZOSh0LGUpe3JldHVybmAKYCtQaS5yZXBlYXQoIiAiLHQuaW5kZW50KmUpfWZ1bmN0aW9uIE9fZSh0LGUpe3ZhciByLG4saTtmb3Iocj0wLG49dC5pbXBsaWNpdFR5cGVzLmxlbmd0aDtyPG47cis9MSlpZihpPXQuaW1wbGljaXRUeXBlc1tyXSxpLnJlc29sdmUoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRzUodCl7cmV0dXJuIHQ9PT1tX2V8fHQ9PT1kX2V9ZnVuY3Rpb24ga3YodCl7cmV0dXJuIDMyPD10JiZ0PD0xMjZ8fDE2MTw9dCYmdDw9NTUyOTUmJnQhPT04MjMyJiZ0IT09ODIzM3x8NTczNDQ8PXQmJnQ8PTY1NTMzJiZ0IT09Wjl8fDY1NTM2PD10JiZ0PD0xMTE0MTExfWZ1bmN0aW9uIG9aKHQpe3JldHVybiBrdih0KSYmdCE9PVo5JiZ0IT09cF9lJiZ0IT09d3Z9ZnVuY3Rpb24gbFoodCxlLHIpe3ZhciBuPW9aKHQpLGk9biYmIUc1KHQpO3JldHVybihyP246biYmdCE9PU5aJiZ0IT09UlomJnQhPT1NWiYmdCE9PUlaJiZ0IT09T1opJiZ0IT09VzkmJiEoZT09PXo1JiYhaSl8fG9aKGUpJiYhRzUoZSkmJnQ9PT1XOXx8ZT09PXo1JiZpfWZ1bmN0aW9uIFBfZSh0KXtyZXR1cm4ga3YodCkmJnQhPT1aOSYmIUc1KHQpJiZ0IT09VF9lJiZ0IT09U19lJiZ0IT09ejUmJnQhPT1OWiYmdCE9PVJaJiZ0IT09TVomJnQhPT1JWiYmdCE9PU9aJiZ0IT09VzkmJnQhPT14X2UmJnQhPT13X2UmJnQhPT1nX2UmJnQhPT1fX2UmJnQhPT1rX2UmJnQhPT1FX2UmJnQhPT1iX2UmJnQhPT15X2UmJnQhPT12X2UmJnQhPT1DX2UmJnQhPT1BX2V9ZnVuY3Rpb24gQl9lKHQpe3JldHVybiFHNSh0KSYmdCE9PXo1fWZ1bmN0aW9uIHh2KHQsZSl7dmFyIHI9dC5jaGFyQ29kZUF0KGUpLG47cmV0dXJuIHI+PTU1Mjk2JiZyPD01NjMxOSYmZSsxPHQubGVuZ3RoJiYobj10LmNoYXJDb2RlQXQoZSsxKSxuPj01NjMyMCYmbjw9NTczNDMpPyhyLTU1Mjk2KSoxMDI0K24tNTYzMjArNjU1MzY6cn1mdW5jdGlvbiBQWih0KXt2YXIgZT0vXlxuKiAvO3JldHVybiBlLnRlc3QodCl9ZnVuY3Rpb24gRl9lKHQsZSxyLG4saSxhLHMsbCl7dmFyIHUsaD0wLGY9bnVsbCxkPSExLHA9ITEsbT1uIT09LTEsZz0tMSx5PVBfZSh4dih0LDApKSYmQl9lKHh2KHQsdC5sZW5ndGgtMSkpO2lmKGV8fHMpZm9yKHU9MDt1PHQubGVuZ3RoO2g+PTY1NTM2P3UrPTI6dSsrKXtpZihoPXh2KHQsdSksIWt2KGgpKXJldHVybiBvbTt5PXkmJmxaKGgsZixsKSxmPWh9ZWxzZXtmb3IodT0wO3U8dC5sZW5ndGg7aD49NjU1MzY/dSs9Mjp1Kyspe2lmKGg9eHYodCx1KSxoPT09d3YpZD0hMCxtJiYocD1wfHx1LWctMT5uJiZ0W2crMV0hPT0iICIsZz11KTtlbHNlIGlmKCFrdihoKSlyZXR1cm4gb207eT15JiZsWihoLGYsbCksZj1ofXA9cHx8bSYmdS1nLTE+biYmdFtnKzFdIT09IiAifXJldHVybiFkJiYhcD95JiYhcyYmIWkodCk/Qlo6YT09PVR2P29tOnE5OnI+OSYmUFoodCk/b206cz9hPT09VHY/b206cTk6cD96WjpGWn1mdW5jdGlvbiB6X2UodCxlLHIsbixpKXt0LmR1bXA9ZnVuY3Rpb24oKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQucXVvdGluZ1R5cGU9PT1Udj8nIiInOiInJyI7aWYoIXQubm9Db21wYXRNb2RlJiYoTF9lLmluZGV4T2YoZSkhPT0tMXx8RF9lLnRlc3QoZSkpKXJldHVybiB0LnF1b3RpbmdUeXBlPT09VHY/JyInK2UrJyInOiInIitlKyInIjt2YXIgYT10LmluZGVudCpNYXRoLm1heCgxLHIpLHM9dC5saW5lV2lkdGg9PT0tMT8tMTpNYXRoLm1heChNYXRoLm1pbih0LmxpbmVXaWR0aCw0MCksdC5saW5lV2lkdGgtYSksbD1ufHx0LmZsb3dMZXZlbD4tMSYmcj49dC5mbG93TGV2ZWw7ZnVuY3Rpb24gdShoKXtyZXR1cm4gT19lKHQsaCl9c3dpdGNoKG8odSwidGVzdEFtYmlndWl0eSIpLEZfZShlLGwsdC5pbmRlbnQscyx1LHQucXVvdGluZ1R5cGUsdC5mb3JjZVF1b3RlcyYmIW4saSkpe2Nhc2UgQlo6cmV0dXJuIGU7Y2FzZSBxOTpyZXR1cm4iJyIrZS5yZXBsYWNlKC8nL2csIicnIikrIiciO2Nhc2UgRlo6cmV0dXJuInwiK2NaKGUsdC5pbmRlbnQpK3VaKHNaKGUsYSkpO2Nhc2Ugelo6cmV0dXJuIj4iK2NaKGUsdC5pbmRlbnQpK3VaKHNaKEdfZShlLHMpLGEpKTtjYXNlIG9tOnJldHVybiciJyskX2UoZSkrJyInO2RlZmF1bHQ6dGhyb3cgbmV3IEVzKCJpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZSIpfX0oKX1mdW5jdGlvbiBjWih0LGUpe3ZhciByPVBaKHQpP1N0cmluZyhlKToiIixuPXRbdC5sZW5ndGgtMV09PT1gCmAsaT1uJiYodFt0Lmxlbmd0aC0yXT09PWAKYHx8dD09PWAKYCksYT1pPyIrIjpuPyIiOiItIjtyZXR1cm4gcithK2AKYH1mdW5jdGlvbiB1Wih0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXT09PWAKYD90LnNsaWNlKDAsLTEpOnR9ZnVuY3Rpb24gR19lKHQsZSl7Zm9yKHZhciByPS8oXG4rKShbXlxuXSopL2csbj1mdW5jdGlvbigpe3ZhciBoPXQuaW5kZXhPZihgCmApO3JldHVybiBoPWghPT0tMT9oOnQubGVuZ3RoLHIubGFzdEluZGV4PWgsaFoodC5zbGljZSgwLGgpLGUpfSgpLGk9dFswXT09PWAKYHx8dFswXT09PSIgIixhLHM7cz1yLmV4ZWModCk7KXt2YXIgbD1zWzFdLHU9c1syXTthPXVbMF09PT0iICIsbis9bCsoIWkmJiFhJiZ1IT09IiI/YApgOiIiKStoWih1LGUpLGk9YX1yZXR1cm4gbn1mdW5jdGlvbiBoWih0LGUpe2lmKHQ9PT0iInx8dFswXT09PSIgIilyZXR1cm4gdDtmb3IodmFyIHI9LyBbXiBdL2csbixpPTAsYSxzPTAsbD0wLHU9IiI7bj1yLmV4ZWModCk7KWw9bi5pbmRleCxsLWk+ZSYmKGE9cz5pP3M6bCx1Kz1gCmArdC5zbGljZShpLGEpLGk9YSsxKSxzPWw7cmV0dXJuIHUrPWAKYCx0Lmxlbmd0aC1pPmUmJnM+aT91Kz10LnNsaWNlKGkscykrYApgK3Quc2xpY2UocysxKTp1Kz10LnNsaWNlKGkpLHUuc2xpY2UoMSl9ZnVuY3Rpb24gJF9lKHQpe2Zvcih2YXIgZT0iIixyPTAsbixpPTA7aTx0Lmxlbmd0aDtyPj02NTUzNj9pKz0yOmkrKylyPXh2KHQsaSksbj1OYVtyXSwhbiYma3Yocik/KGUrPXRbaV0scj49NjU1MzYmJihlKz10W2krMV0pKTplKz1ufHxSX2Uocik7cmV0dXJuIGV9ZnVuY3Rpb24gVl9lKHQsZSxyKXt2YXIgbj0iIixpPXQudGFnLGEscyxsO2ZvcihhPTAscz1yLmxlbmd0aDthPHM7YSs9MSlsPXJbYV0sdC5yZXBsYWNlciYmKGw9dC5yZXBsYWNlci5jYWxsKHIsU3RyaW5nKGEpLGwpKSwoQ3UodCxlLGwsITEsITEpfHx0eXBlb2YgbD4idSImJkN1KHQsZSxudWxsLCExLCExKSkmJihuIT09IiImJihuKz0iLCIrKHQuY29uZGVuc2VGbG93PyIiOiIgIikpLG4rPXQuZHVtcCk7dC50YWc9aSx0LmR1bXA9IlsiK24rIl0ifWZ1bmN0aW9uIGZaKHQsZSxyLG4pe3ZhciBpPSIiLGE9dC50YWcscyxsLHU7Zm9yKHM9MCxsPXIubGVuZ3RoO3M8bDtzKz0xKXU9cltzXSx0LnJlcGxhY2VyJiYodT10LnJlcGxhY2VyLmNhbGwocixTdHJpbmcocyksdSkpLChDdSh0LGUrMSx1LCEwLCEwLCExLCEwKXx8dHlwZW9mIHU+InUiJiZDdSh0LGUrMSxudWxsLCEwLCEwLCExLCEwKSkmJigoIW58fGkhPT0iIikmJihpKz1ZOSh0LGUpKSx0LmR1bXAmJnd2PT09dC5kdW1wLmNoYXJDb2RlQXQoMCk/aSs9Ii0iOmkrPSItICIsaSs9dC5kdW1wKTt0LnRhZz1hLHQuZHVtcD1pfHwiW10ifWZ1bmN0aW9uIFVfZSh0LGUscil7dmFyIG49IiIsaT10LnRhZyxhPU9iamVjdC5rZXlzKHIpLHMsbCx1LGgsZjtmb3Iocz0wLGw9YS5sZW5ndGg7czxsO3MrPTEpZj0iIixuIT09IiImJihmKz0iLCAiKSx0LmNvbmRlbnNlRmxvdyYmKGYrPSciJyksdT1hW3NdLGg9clt1XSx0LnJlcGxhY2VyJiYoaD10LnJlcGxhY2VyLmNhbGwocix1LGgpKSxDdSh0LGUsdSwhMSwhMSkmJih0LmR1bXAubGVuZ3RoPjEwMjQmJihmKz0iPyAiKSxmKz10LmR1bXArKHQuY29uZGVuc2VGbG93PyciJzoiIikrIjoiKyh0LmNvbmRlbnNlRmxvdz8iIjoiICIpLEN1KHQsZSxoLCExLCExKSYmKGYrPXQuZHVtcCxuKz1mKSk7dC50YWc9aSx0LmR1bXA9InsiK24rIn0ifWZ1bmN0aW9uIEhfZSh0LGUscixuKXt2YXIgaT0iIixhPXQudGFnLHM9T2JqZWN0LmtleXMociksbCx1LGgsZixkLHA7aWYodC5zb3J0S2V5cz09PSEwKXMuc29ydCgpO2Vsc2UgaWYodHlwZW9mIHQuc29ydEtleXM9PSJmdW5jdGlvbiIpcy5zb3J0KHQuc29ydEtleXMpO2Vsc2UgaWYodC5zb3J0S2V5cyl0aHJvdyBuZXcgRXMoInNvcnRLZXlzIG11c3QgYmUgYSBib29sZWFuIG9yIGEgZnVuY3Rpb24iKTtmb3IobD0wLHU9cy5sZW5ndGg7bDx1O2wrPTEpcD0iIiwoIW58fGkhPT0iIikmJihwKz1ZOSh0LGUpKSxoPXNbbF0sZj1yW2hdLHQucmVwbGFjZXImJihmPXQucmVwbGFjZXIuY2FsbChyLGgsZikpLEN1KHQsZSsxLGgsITAsITAsITApJiYoZD10LnRhZyE9PW51bGwmJnQudGFnIT09Ij8ifHx0LmR1bXAmJnQuZHVtcC5sZW5ndGg+MTAyNCxkJiYodC5kdW1wJiZ3dj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP3ArPSI/IjpwKz0iPyAiKSxwKz10LmR1bXAsZCYmKHArPVk5KHQsZSkpLEN1KHQsZSsxLGYsITAsZCkmJih0LmR1bXAmJnd2PT09dC5kdW1wLmNoYXJDb2RlQXQoMCk/cCs9IjoiOnArPSI6ICIscCs9dC5kdW1wLGkrPXApKTt0LnRhZz1hLHQuZHVtcD1pfHwie30ifWZ1bmN0aW9uIGRaKHQsZSxyKXt2YXIgbixpLGEscyxsLHU7Zm9yKGk9cj90LmV4cGxpY2l0VHlwZXM6dC5pbXBsaWNpdFR5cGVzLGE9MCxzPWkubGVuZ3RoO2E8czthKz0xKWlmKGw9aVthXSwobC5pbnN0YW5jZU9mfHxsLnByZWRpY2F0ZSkmJighbC5pbnN0YW5jZU9mfHx0eXBlb2YgZT09Im9iamVjdCImJmUgaW5zdGFuY2VvZiBsLmluc3RhbmNlT2YpJiYoIWwucHJlZGljYXRlfHxsLnByZWRpY2F0ZShlKSkpe2lmKHI/bC5tdWx0aSYmbC5yZXByZXNlbnROYW1lP3QudGFnPWwucmVwcmVzZW50TmFtZShlKTp0LnRhZz1sLnRhZzp0LnRhZz0iPyIsbC5yZXByZXNlbnQpe2lmKHU9dC5zdHlsZU1hcFtsLnRhZ118fGwuZGVmYXVsdFN0eWxlLExaLmNhbGwobC5yZXByZXNlbnQpPT09IltvYmplY3QgRnVuY3Rpb25dIiluPWwucmVwcmVzZW50KGUsdSk7ZWxzZSBpZihEWi5jYWxsKGwucmVwcmVzZW50LHUpKW49bC5yZXByZXNlbnRbdV0oZSx1KTtlbHNlIHRocm93IG5ldyBFcygiITwiK2wudGFnKyc+IHRhZyByZXNvbHZlciBhY2NlcHRzIG5vdCAiJyt1KyciIHN0eWxlJyk7dC5kdW1wPW59cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gQ3UodCxlLHIsbixpLGEscyl7dC50YWc9bnVsbCx0LmR1bXA9cixkWih0LHIsITEpfHxkWih0LHIsITApO3ZhciBsPUxaLmNhbGwodC5kdW1wKSx1PW4saDtuJiYobj10LmZsb3dMZXZlbDwwfHx0LmZsb3dMZXZlbD5lKTt2YXIgZj1sPT09IltvYmplY3QgT2JqZWN0XSJ8fGw9PT0iW29iamVjdCBBcnJheV0iLGQscDtpZihmJiYoZD10LmR1cGxpY2F0ZXMuaW5kZXhPZihyKSxwPWQhPT0tMSksKHQudGFnIT09bnVsbCYmdC50YWchPT0iPyJ8fHB8fHQuaW5kZW50IT09MiYmZT4wKSYmKGk9ITEpLHAmJnQudXNlZER1cGxpY2F0ZXNbZF0pdC5kdW1wPSIqcmVmXyIrZDtlbHNle2lmKGYmJnAmJiF0LnVzZWREdXBsaWNhdGVzW2RdJiYodC51c2VkRHVwbGljYXRlc1tkXT0hMCksbD09PSJbb2JqZWN0IE9iamVjdF0iKW4mJk9iamVjdC5rZXlzKHQuZHVtcCkubGVuZ3RoIT09MD8oSF9lKHQsZSx0LmR1bXAsaSkscCYmKHQuZHVtcD0iJnJlZl8iK2QrdC5kdW1wKSk6KFVfZSh0LGUsdC5kdW1wKSxwJiYodC5kdW1wPSImcmVmXyIrZCsiICIrdC5kdW1wKSk7ZWxzZSBpZihsPT09IltvYmplY3QgQXJyYXldIiluJiZ0LmR1bXAubGVuZ3RoIT09MD8odC5ub0FycmF5SW5kZW50JiYhcyYmZT4wP2ZaKHQsZS0xLHQuZHVtcCxpKTpmWih0LGUsdC5kdW1wLGkpLHAmJih0LmR1bXA9IiZyZWZfIitkK3QuZHVtcCkpOihWX2UodCxlLHQuZHVtcCkscCYmKHQuZHVtcD0iJnJlZl8iK2QrIiAiK3QuZHVtcCkpO2Vsc2UgaWYobD09PSJbb2JqZWN0IFN0cmluZ10iKXQudGFnIT09Ij8iJiZ6X2UodCx0LmR1bXAsZSxhLHUpO2Vsc2V7aWYobD09PSJbb2JqZWN0IFVuZGVmaW5lZF0iKXJldHVybiExO2lmKHQuc2tpcEludmFsaWQpcmV0dXJuITE7dGhyb3cgbmV3IEVzKCJ1bmFjY2VwdGFibGUga2luZCBvZiBhbiBvYmplY3QgdG8gZHVtcCAiK2wpfXQudGFnIT09bnVsbCYmdC50YWchPT0iPyImJihoPWVuY29kZVVSSSh0LnRhZ1swXT09PSIhIj90LnRhZy5zbGljZSgxKTp0LnRhZykucmVwbGFjZSgvIS9nLCIlMjEiKSx0LnRhZ1swXT09PSIhIj9oPSIhIitoOmguc2xpY2UoMCwxOCk9PT0idGFnOnlhbWwub3JnLDIwMDI6Ij9oPSIhISIraC5zbGljZSgxOCk6aD0iITwiK2grIj4iLHQuZHVtcD1oKyIgIit0LmR1bXApfXJldHVybiEwfWZ1bmN0aW9uIFdfZSh0LGUpe3ZhciByPVtdLG49W10saSxhO2ZvcihYOSh0LHIsbiksaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpZS5kdXBsaWNhdGVzLnB1c2gocltuW2ldXSk7ZS51c2VkRHVwbGljYXRlcz1uZXcgQXJyYXkoYSl9ZnVuY3Rpb24gWDkodCxlLHIpe3ZhciBuLGksYTtpZih0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiKWlmKGk9ZS5pbmRleE9mKHQpLGkhPT0tMSlyLmluZGV4T2YoaSk9PT0tMSYmci5wdXNoKGkpO2Vsc2UgaWYoZS5wdXNoKHQpLEFycmF5LmlzQXJyYXkodCkpZm9yKGk9MCxhPXQubGVuZ3RoO2k8YTtpKz0xKVg5KHRbaV0sZSxyKTtlbHNlIGZvcihuPU9iamVjdC5rZXlzKHQpLGk9MCxhPW4ubGVuZ3RoO2k8YTtpKz0xKVg5KHRbbltpXV0sZSxyKX1mdW5jdGlvbiBZX2UodCxlKXtlPWV8fHt9O3ZhciByPW5ldyBJX2UoZSk7ci5ub1JlZnN8fFdfZSh0LHIpO3ZhciBuPXQ7cmV0dXJuIHIucmVwbGFjZXImJihuPXIucmVwbGFjZXIuY2FsbCh7IiI6bn0sIiIsbikpLEN1KHIsMCxuLCEwLCEwKT9yLmR1bXArYApgOiIifWZ1bmN0aW9uIEo5KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiB5YW1sLiIrdCsiIGlzIHJlbW92ZWQgaW4ganMteWFtbCA0LiBVc2UgeWFtbC4iK2UrIiBpbnN0ZWFkLCB3aGljaCBpcyBub3cgc2FmZSBieSBkZWZhdWx0LiIpfX12YXIgTUFlLElBZSxPQWUsUEFlLEJBZSxGQWUsUGksRXMsR0FlLCRBZSxWQWUsRGEsWUFlLHFBZSxYQWUsakFlLEtBZSxlOGUsaThlLGg4ZSxmOGUsbThlLHY4ZSxnWix4OGUseVosdlosazhlLFM4ZSxqOSxEOGUsTjhlLFI4ZSxPOGUsUDhlLHo4ZSxHOGUsVThlLHhaLCRoLFA1LGJaLHdaLEI1LFU5LEg4ZSxlWixXOGUsWThlLHE4ZSxUWixrWixFWixTWixBZCxuWixoX2UsZl9lLF9aLExaLERaLFo5LGRfZSx3dixwX2UsbV9lLGdfZSx5X2UsVzksdl9lLHhfZSxiX2Usd19lLE5aLFRfZSx6NSxrX2UsRV9lLFNfZSxDX2UsUlosTVosQV9lLElaLF9fZSxPWixOYSxMX2UsRF9lLE1fZSxUdixCWixxOSxGWix6WixvbSxxX2UsWF9lLGhtLGZtLHVOdCxoTnQsZk50LGROdCxwTnQsVjU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHBaLCJpc05vdGhpbmciKTtvKF9BZSwiaXNPYmplY3QiKTtvKExBZSwidG9BcnJheSIpO28oREFlLCJleHRlbmQiKTtvKE5BZSwicmVwZWF0Iik7byhSQWUsImlzTmVnYXRpdmVaZXJvIik7TUFlPXBaLElBZT1fQWUsT0FlPUxBZSxQQWU9TkFlLEJBZT1SQWUsRkFlPURBZSxQaT17aXNOb3RoaW5nOk1BZSxpc09iamVjdDpJQWUsdG9BcnJheTpPQWUscmVwZWF0OlBBZSxpc05lZ2F0aXZlWmVybzpCQWUsZXh0ZW5kOkZBZX07byhtWiwiZm9ybWF0RXJyb3IiKTtvKGJ2LCJZQU1MRXhjZXB0aW9uJDEiKTtidi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO2J2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1idjtidi5wcm90b3R5cGUudG9TdHJpbmc9byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6ICIrbVoodGhpcyxlKX0sInRvU3RyaW5nIik7RXM9YnY7bygkOSwiZ2V0TGluZSIpO28oVjksInBhZFN0YXJ0Iik7byh6QWUsIm1ha2VTbmlwcGV0Iik7R0FlPXpBZSwkQWU9WyJraW5kIiwibXVsdGkiLCJyZXNvbHZlIiwiY29uc3RydWN0IiwiaW5zdGFuY2VPZiIsInByZWRpY2F0ZSIsInJlcHJlc2VudCIsInJlcHJlc2VudE5hbWUiLCJkZWZhdWx0U3R5bGUiLCJzdHlsZUFsaWFzZXMiXSxWQWU9WyJzY2FsYXIiLCJzZXF1ZW5jZSIsIm1hcHBpbmciXTtvKFVBZSwiY29tcGlsZVN0eWxlQWxpYXNlcyIpO28oSEFlLCJUeXBlJDEiKTtEYT1IQWU7byhKUSwiY29tcGlsZUxpc3QiKTtvKFdBZSwiY29tcGlsZU1hcCIpO28oSDksIlNjaGVtYSQxIik7SDkucHJvdG90eXBlLmV4dGVuZD1vKGZ1bmN0aW9uKGUpe3ZhciByPVtdLG49W107aWYoZSBpbnN0YW5jZW9mIERhKW4ucHVzaChlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpbj1uLmNvbmNhdChlKTtlbHNlIGlmKGUmJihBcnJheS5pc0FycmF5KGUuaW1wbGljaXQpfHxBcnJheS5pc0FycmF5KGUuZXhwbGljaXQpKSllLmltcGxpY2l0JiYocj1yLmNvbmNhdChlLmltcGxpY2l0KSksZS5leHBsaWNpdCYmKG49bi5jb25jYXQoZS5leHBsaWNpdCkpO2Vsc2UgdGhyb3cgbmV3IEVzKCJTY2hlbWEuZXh0ZW5kIGFyZ3VtZW50IHNob3VsZCBiZSBhIFR5cGUsIFsgVHlwZSBdLCBvciBhIHNjaGVtYSBkZWZpbml0aW9uICh7IGltcGxpY2l0OiBbLi4uXSwgZXhwbGljaXQ6IFsuLi5dIH0pIik7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKCEoYSBpbnN0YW5jZW9mIERhKSl0aHJvdyBuZXcgRXMoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTtpZihhLmxvYWRLaW5kJiZhLmxvYWRLaW5kIT09InNjYWxhciIpdGhyb3cgbmV3IEVzKCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKTtpZihhLm11bHRpKXRocm93IG5ldyBFcygiVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC4iKX0pLG4uZm9yRWFjaChmdW5jdGlvbihhKXtpZighKGEgaW5zdGFuY2VvZiBEYSkpdGhyb3cgbmV3IEVzKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIil9KTt2YXIgaT1PYmplY3QuY3JlYXRlKEg5LnByb3RvdHlwZSk7cmV0dXJuIGkuaW1wbGljaXQ9KHRoaXMuaW1wbGljaXR8fFtdKS5jb25jYXQociksaS5leHBsaWNpdD0odGhpcy5leHBsaWNpdHx8W10pLmNvbmNhdChuKSxpLmNvbXBpbGVkSW1wbGljaXQ9SlEoaSwiaW1wbGljaXQiKSxpLmNvbXBpbGVkRXhwbGljaXQ9SlEoaSwiZXhwbGljaXQiKSxpLmNvbXBpbGVkVHlwZU1hcD1XQWUoaS5jb21waWxlZEltcGxpY2l0LGkuY29tcGlsZWRFeHBsaWNpdCksaX0sImV4dGVuZCIpO1lBZT1IOSxxQWU9bmV3IERhKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90OiIifSwiY29uc3RydWN0Iil9KSxYQWU9bmV3IERhKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLHtraW5kOiJzZXF1ZW5jZSIsY29uc3RydWN0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1udWxsP3Q6W119LCJjb25zdHJ1Y3QiKX0pLGpBZT1uZXcgRGEoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90Ont9fSwiY29uc3RydWN0Iil9KSxLQWU9bmV3IFlBZSh7ZXhwbGljaXQ6W3FBZSxYQWUsakFlXX0pO28oUUFlLCJyZXNvbHZlWWFtbE51bGwiKTtvKFpBZSwiY29uc3RydWN0WWFtbE51bGwiKTtvKEpBZSwiaXNOdWxsIik7ZThlPW5ldyBEYSgidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpRQWUsY29uc3RydWN0OlpBZSxwcmVkaWNhdGU6SkFlLHJlcHJlc2VudDp7Y2Fub25pY2FsOm8oZnVuY3Rpb24oKXtyZXR1cm4ifiJ9LCJjYW5vbmljYWwiKSxsb3dlcmNhc2U6byhmdW5jdGlvbigpe3JldHVybiJudWxsIn0sImxvd2VyY2FzZSIpLHVwcGVyY2FzZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIk5VTEwifSwidXBwZXJjYXNlIiksY2FtZWxjYXNlOm8oZnVuY3Rpb24oKXtyZXR1cm4iTnVsbCJ9LCJjYW1lbGNhc2UiKSxlbXB0eTpvKGZ1bmN0aW9uKCl7cmV0dXJuIiJ9LCJlbXB0eSIpfSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KTtvKHQ4ZSwicmVzb2x2ZVlhbWxCb29sZWFuIik7byhyOGUsImNvbnN0cnVjdFlhbWxCb29sZWFuIik7byhuOGUsImlzQm9vbGVhbiIpO2k4ZT1uZXcgRGEoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6dDhlLGNvbnN0cnVjdDpyOGUscHJlZGljYXRlOm44ZSxyZXByZXNlbnQ6e2xvd2VyY2FzZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PyJ0cnVlIjoiZmFsc2UifSwibG93ZXJjYXNlIiksdXBwZXJjYXNlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ/IlRSVUUiOiJGQUxTRSJ9LCJ1cHBlcmNhc2UiKSxjYW1lbGNhc2U6byhmdW5jdGlvbih0KXtyZXR1cm4gdD8iVHJ1ZSI6IkZhbHNlIn0sImNhbWVsY2FzZSIpfSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KTtvKGE4ZSwiaXNIZXhDb2RlIik7byhzOGUsImlzT2N0Q29kZSIpO28obzhlLCJpc0RlY0NvZGUiKTtvKGw4ZSwicmVzb2x2ZVlhbWxJbnRlZ2VyIik7byhjOGUsImNvbnN0cnVjdFlhbWxJbnRlZ2VyIik7byh1OGUsImlzSW50ZWdlciIpO2g4ZT1uZXcgRGEoInRhZzp5YW1sLm9yZywyMDAyOmludCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpsOGUsY29uc3RydWN0OmM4ZSxwcmVkaWNhdGU6dThlLHJlcHJlc2VudDp7YmluYXJ5Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTA/IjBiIit0LnRvU3RyaW5nKDIpOiItMGIiK3QudG9TdHJpbmcoMikuc2xpY2UoMSl9LCJiaW5hcnkiKSxvY3RhbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIwbyIrdC50b1N0cmluZyg4KToiLTBvIit0LnRvU3RyaW5nKDgpLnNsaWNlKDEpfSwib2N0YWwiKSxkZWNpbWFsOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTApfSwiZGVjaW1hbCIpLGhleGFkZWNpbWFsOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTA/IjB4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOiItMHgiK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9LCJoZXhhZGVjaW1hbCIpfSxkZWZhdWx0U3R5bGU6ImRlY2ltYWwiLHN0eWxlQWxpYXNlczp7YmluYXJ5OlsyLCJiaW4iXSxvY3RhbDpbOCwib2N0Il0sZGVjaW1hbDpbMTAsImRlYyJdLGhleGFkZWNpbWFsOlsxNiwiaGV4Il19fSksZjhlPW5ldyBSZWdFeHAoIl4oPzpbLStdPyg/OlswLTldWzAtOV9dKikoPzpcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspP3xcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwuKD86bmFufE5hTnxOQU4pKSQiKTtvKGQ4ZSwicmVzb2x2ZVlhbWxGbG9hdCIpO28ocDhlLCJjb25zdHJ1Y3RZYW1sRmxvYXQiKTttOGU9L15bLStdP1swLTldK2UvO28oZzhlLCJyZXByZXNlbnRZYW1sRmxvYXQiKTtvKHk4ZSwiaXNGbG9hdCIpO3Y4ZT1uZXcgRGEoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOmQ4ZSxjb25zdHJ1Y3Q6cDhlLHByZWRpY2F0ZTp5OGUscmVwcmVzZW50Omc4ZSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KSxnWj1LQWUuZXh0ZW5kKHtpbXBsaWNpdDpbZThlLGk4ZSxoOGUsdjhlXX0pLHg4ZT1nWix5Wj1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIpLHZaPW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldPyktKFswLTldWzAtOV0/KSg/OltUdF18WyBcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXC4oWzAtOV0qKSk/KD86WyBcXHRdKihafChbLStdKShbMC05XVswLTldPykoPzo6KFswLTldWzAtOV0pKT8pKT8kIik7byhiOGUsInJlc29sdmVZYW1sVGltZXN0YW1wIik7byh3OGUsImNvbnN0cnVjdFlhbWxUaW1lc3RhbXAiKTtvKFQ4ZSwicmVwcmVzZW50WWFtbFRpbWVzdGFtcCIpO2s4ZT1uZXcgRGEoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpiOGUsY29uc3RydWN0Onc4ZSxpbnN0YW5jZU9mOkRhdGUscmVwcmVzZW50OlQ4ZX0pO28oRThlLCJyZXNvbHZlWWFtbE1lcmdlIik7UzhlPW5ldyBEYSgidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6RThlfSksajk9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89ClxyYDtvKEM4ZSwicmVzb2x2ZVlhbWxCaW5hcnkiKTtvKEE4ZSwiY29uc3RydWN0WWFtbEJpbmFyeSIpO28oXzhlLCJyZXByZXNlbnRZYW1sQmluYXJ5Iik7byhMOGUsImlzQmluYXJ5Iik7RDhlPW5ldyBEYSgidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOkM4ZSxjb25zdHJ1Y3Q6QThlLHByZWRpY2F0ZTpMOGUscmVwcmVzZW50Ol84ZX0pLE44ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFI4ZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO28oTThlLCJyZXNvbHZlWWFtbE9tYXAiKTtvKEk4ZSwiY29uc3RydWN0WWFtbE9tYXAiKTtPOGU9bmV3IERhKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6TThlLGNvbnN0cnVjdDpJOGV9KSxQOGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztvKEI4ZSwicmVzb2x2ZVlhbWxQYWlycyIpO28oRjhlLCJjb25zdHJ1Y3RZYW1sUGFpcnMiKTt6OGU9bmV3IERhKCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOkI4ZSxjb25zdHJ1Y3Q6RjhlfSksRzhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7bygkOGUsInJlc29sdmVZYW1sU2V0Iik7byhWOGUsImNvbnN0cnVjdFlhbWxTZXQiKTtVOGU9bmV3IERhKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLHtraW5kOiJtYXBwaW5nIixyZXNvbHZlOiQ4ZSxjb25zdHJ1Y3Q6VjhlfSkseFo9eDhlLmV4dGVuZCh7aW1wbGljaXQ6W2s4ZSxTOGVdLGV4cGxpY2l0OltEOGUsTzhlLHo4ZSxVOGVdfSksJGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxQNT0xLGJaPTIsd1o9MyxCNT00LFU5PTEsSDhlPTIsZVo9MyxXOGU9L1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg4NFx4ODYtXHg5Rlx1RkZGRVx1RkZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxZOGU9L1tceDg1XHUyMDI4XHUyMDI5XS8scThlPS9bLFxbXF1ce1x9XS8sVFo9L14oPzohfCEhfCFbYS16XC1dKyEpJC9pLGtaPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7byh0WiwiX2NsYXNzIik7byh5YywiaXNfRU9MIik7byhfZCwiaXNfV0hJVEVfU1BBQ0UiKTtvKFNzLCJpc19XU19PUl9FT0wiKTtvKGxtLCJpc19GTE9XX0lORElDQVRPUiIpO28oWDhlLCJmcm9tSGV4Q29kZSIpO28oajhlLCJlc2NhcGVkSGV4TGVuIik7byhLOGUsImZyb21EZWNpbWFsQ29kZSIpO28oclosInNpbXBsZUVzY2FwZVNlcXVlbmNlIik7byhROGUsImNoYXJGcm9tQ29kZXBvaW50Iik7RVo9bmV3IEFycmF5KDI1NiksU1o9bmV3IEFycmF5KDI1Nik7Zm9yKEFkPTA7QWQ8MjU2O0FkKyspRVpbQWRdPXJaKEFkKT8xOjAsU1pbQWRdPXJaKEFkKTtvKFo4ZSwiU3RhdGUkMSIpO28oQ1osImdlbmVyYXRlRXJyb3IiKTtvKFF0LCJ0aHJvd0Vycm9yIik7byhGNSwidGhyb3dXYXJuaW5nIik7blo9e1lBTUw6byhmdW5jdGlvbihlLHIsbil7dmFyIGksYSxzO2UudmVyc2lvbiE9PW51bGwmJlF0KGUsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLG4ubGVuZ3RoIT09MSYmUXQoZSwiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpLGk9L14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKG5bMF0pLGk9PT1udWxsJiZRdChlLCJpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZSIpLGE9cGFyc2VJbnQoaVsxXSwxMCkscz1wYXJzZUludChpWzJdLDEwKSxhIT09MSYmUXQoZSwidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxlLnZlcnNpb249blswXSxlLmNoZWNrTGluZUJyZWFrcz1zPDIscyE9PTEmJnMhPT0yJiZGNShlLCJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iil9LCJoYW5kbGVZYW1sRGlyZWN0aXZlIiksVEFHOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGE7bi5sZW5ndGghPT0yJiZRdChlLCJUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzIiksaT1uWzBdLGE9blsxXSxUWi50ZXN0KGkpfHxRdChlLCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLCRoLmNhbGwoZS50YWdNYXAsaSkmJlF0KGUsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK2krJyIgdGFnIGhhbmRsZScpLGtaLnRlc3QoYSl8fFF0KGUsImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpO3RyeXthPWRlY29kZVVSSUNvbXBvbmVudChhKX1jYXRjaHtRdChlLCJ0YWcgcHJlZml4IGlzIG1hbGZvcm1lZDogIithKX1lLnRhZ01hcFtpXT1hfSwiaGFuZGxlVGFnRGlyZWN0aXZlIil9O28oR2gsImNhcHR1cmVTZWdtZW50Iik7byhpWiwibWVyZ2VNYXBwaW5ncyIpO28oY20sInN0b3JlTWFwcGluZ1BhaXIiKTtvKEs5LCJyZWFkTGluZUJyZWFrIik7byhDaSwic2tpcFNlcGFyYXRpb25TcGFjZSIpO28oJDUsInRlc3REb2N1bWVudFNlcGFyYXRvciIpO28oUTksIndyaXRlRm9sZGVkTGluZXMiKTtvKEo4ZSwicmVhZFBsYWluU2NhbGFyIik7byhlX2UsInJlYWRTaW5nbGVRdW90ZWRTY2FsYXIiKTtvKHRfZSwicmVhZERvdWJsZVF1b3RlZFNjYWxhciIpO28ocl9lLCJyZWFkRmxvd0NvbGxlY3Rpb24iKTtvKG5fZSwicmVhZEJsb2NrU2NhbGFyIik7byhhWiwicmVhZEJsb2NrU2VxdWVuY2UiKTtvKGlfZSwicmVhZEJsb2NrTWFwcGluZyIpO28oYV9lLCJyZWFkVGFnUHJvcGVydHkiKTtvKHNfZSwicmVhZEFuY2hvclByb3BlcnR5Iik7byhvX2UsInJlYWRBbGlhcyIpO28odW0sImNvbXBvc2VOb2RlIik7byhsX2UsInJlYWREb2N1bWVudCIpO28oQVosImxvYWREb2N1bWVudHMiKTtvKGNfZSwibG9hZEFsbCQxIik7byh1X2UsImxvYWQkMSIpO2hfZT1jX2UsZl9lPXVfZSxfWj17bG9hZEFsbDpoX2UsbG9hZDpmX2V9LExaPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRFo9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxaOT02NTI3OSxkX2U9OSx3dj0xMCxwX2U9MTMsbV9lPTMyLGdfZT0zMyx5X2U9MzQsVzk9MzUsdl9lPTM3LHhfZT0zOCxiX2U9Mzksd19lPTQyLE5aPTQ0LFRfZT00NSx6NT01OCxrX2U9NjEsRV9lPTYyLFNfZT02MyxDX2U9NjQsUlo9OTEsTVo9OTMsQV9lPTk2LElaPTEyMyxfX2U9MTI0LE9aPTEyNSxOYT17fTtOYVswXT0iXFwwIjtOYVs3XT0iXFxhIjtOYVs4XT0iXFxiIjtOYVs5XT0iXFx0IjtOYVsxMF09IlxcbiI7TmFbMTFdPSJcXHYiO05hWzEyXT0iXFxmIjtOYVsxM109IlxcciI7TmFbMjddPSJcXGUiO05hWzM0XT0nXFwiJztOYVs5Ml09IlxcXFwiO05hWzEzM109IlxcTiI7TmFbMTYwXT0iXFxfIjtOYVs4MjMyXT0iXFxMIjtOYVs4MjMzXT0iXFxQIjtMX2U9WyJ5IiwiWSIsInllcyIsIlllcyIsIllFUyIsIm9uIiwiT24iLCJPTiIsIm4iLCJOIiwibm8iLCJObyIsIk5PIiwib2ZmIiwiT2ZmIiwiT0ZGIl0sRF9lPS9eWy0rXT9bMC05X10rKD86OlswLTlfXSspKyg/OlwuWzAtOV9dKik/JC87byhOX2UsImNvbXBpbGVTdHlsZU1hcCIpO28oUl9lLCJlbmNvZGVIZXgiKTtNX2U9MSxUdj0yO28oSV9lLCJTdGF0ZSIpO28oc1osImluZGVudFN0cmluZyIpO28oWTksImdlbmVyYXRlTmV4dExpbmUiKTtvKE9fZSwidGVzdEltcGxpY2l0UmVzb2x2aW5nIik7byhHNSwiaXNXaGl0ZXNwYWNlIik7byhrdiwiaXNQcmludGFibGUiKTtvKG9aLCJpc05zQ2hhck9yV2hpdGVzcGFjZSIpO28obFosImlzUGxhaW5TYWZlIik7byhQX2UsImlzUGxhaW5TYWZlRmlyc3QiKTtvKEJfZSwiaXNQbGFpblNhZmVMYXN0Iik7byh4diwiY29kZVBvaW50QXQiKTtvKFBaLCJuZWVkSW5kZW50SW5kaWNhdG9yIik7Qlo9MSxxOT0yLEZaPTMselo9NCxvbT01O28oRl9lLCJjaG9vc2VTY2FsYXJTdHlsZSIpO28oel9lLCJ3cml0ZVNjYWxhciIpO28oY1osImJsb2NrSGVhZGVyIik7byh1WiwiZHJvcEVuZGluZ05ld2xpbmUiKTtvKEdfZSwiZm9sZFN0cmluZyIpO28oaFosImZvbGRMaW5lIik7bygkX2UsImVzY2FwZVN0cmluZyIpO28oVl9lLCJ3cml0ZUZsb3dTZXF1ZW5jZSIpO28oZlosIndyaXRlQmxvY2tTZXF1ZW5jZSIpO28oVV9lLCJ3cml0ZUZsb3dNYXBwaW5nIik7byhIX2UsIndyaXRlQmxvY2tNYXBwaW5nIik7byhkWiwiZGV0ZWN0VHlwZSIpO28oQ3UsIndyaXRlTm9kZSIpO28oV19lLCJnZXREdXBsaWNhdGVSZWZlcmVuY2VzIik7byhYOSwiaW5zcGVjdE5vZGUiKTtvKFlfZSwiZHVtcCQxIik7cV9lPVlfZSxYX2U9e2R1bXA6cV9lfTtvKEo5LCJyZW5hbWVkIik7aG09Z1osZm09X1oubG9hZCx1TnQ9X1oubG9hZEFsbCxoTnQ9WF9lLmR1bXAsZk50PUo5KCJzYWZlTG9hZCIsImxvYWQiKSxkTnQ9SjkoInNhZmVMb2FkQWxsIiwibG9hZEFsbCIpLHBOdD1KOSgic2FmZUR1bXAiLCJkdW1wIil9KTtmdW5jdGlvbiByTCh0KXtsZXQgZT1bXTtmb3IobGV0IHIgb2YgdCl7bGV0IG49U3YuZ2V0KHIpO24/LnN0eWxlcyYmKGU9Wy4uLmUsLi4ubi5zdHlsZXM/P1tdXS5tYXAoaT0+aS50cmltKCkpKSxuPy50ZXh0U3R5bGVzJiYoZT1bLi4uZSwuLi5uLnRleHRTdHlsZXM/P1tdXS5tYXAoaT0+aS50cmltKCkpKX1yZXR1cm4gZX12YXIgal9lLEdaLGRtLFZoLENzLFN2LEF1LG5MLGlMLFU1LHRMLEdvLEg1LFc1LFk1LHE1LEtfZSxRX2UsWl9lLEpfZSxlOWUsdDllLHI5ZSxhTCxuOWUsaTllLGE5ZSwkWixzOWUsbzllLHNMLFZaLFVaLGw5ZSxIWixjOWUsdTllLGg5ZSxmOWUsZDllLEV2LFdaLFlaLHA5ZSxtOWUscVosZzllLHk5ZSx2OWUseDllLGI5ZSxYWixqWix3OWUsVDllLGs5ZSxFOWUsUzllLEM5ZSxYNSxvTD1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7aHIoKTtWdCgpO2ZyKCk7RzkoKTtodCgpO1Y1KCk7a2koKTtqX2U9ImZsb3djaGFydC0iLEdaPTAsZG09ZGUoKSxWaD1uZXcgTWFwLENzPVtdLFN2PW5ldyBNYXAsQXU9W10sbkw9bmV3IE1hcCxpTD1uZXcgTWFwLFU1PTAsdEw9ITAsVzU9W10sWTU9byh0PT5qZS5zYW5pdGl6ZVRleHQodCxkbSksInNhbml0aXplVGV4dCIpLHE1PW8oZnVuY3Rpb24odCl7Zm9yKGxldCBlIG9mIFZoLnZhbHVlcygpKWlmKGUuaWQ9PT10KXJldHVybiBlLmRvbUlkO3JldHVybiB0fSwibG9va1VwRG9tSWQiKSxLX2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzPXt9LGwpe2lmKCF0fHx0LnRyaW0oKS5sZW5ndGg9PT0wKXJldHVybjtsZXQgdSxoPVZoLmdldCh0KTtpZihoPT09dm9pZCAwJiYoaD17aWQ6dCxsYWJlbFR5cGU6InRleHQiLGRvbUlkOmpfZSt0KyItIitHWixzdHlsZXM6W10sY2xhc3NlczpbXX0sVmguc2V0KHQsaCkpLEdaKyssZSE9PXZvaWQgMD8oZG09ZGUoKSx1PVk1KGUudGV4dC50cmltKCkpLGgubGFiZWxUeXBlPWUudHlwZSx1LnN0YXJ0c1dpdGgoJyInKSYmdS5lbmRzV2l0aCgnIicpJiYodT11LnN1YnN0cmluZygxLHUubGVuZ3RoLTEpKSxoLnRleHQ9dSk6aC50ZXh0PT09dm9pZCAwJiYoaC50ZXh0PXQpLHIhPT12b2lkIDAmJihoLnR5cGU9ciksbj8uZm9yRWFjaChmdW5jdGlvbihmKXtoLnN0eWxlcy5wdXNoKGYpfSksaT8uZm9yRWFjaChmdW5jdGlvbihmKXtoLmNsYXNzZXMucHVzaChmKX0pLGEhPT12b2lkIDAmJihoLmRpcj1hKSxoLnByb3BzPT09dm9pZCAwP2gucHJvcHM9czpzIT09dm9pZCAwJiZPYmplY3QuYXNzaWduKGgucHJvcHMscyksbCE9PXZvaWQgMCl7bGV0IGY7bC5pbmNsdWRlcyhgCmApP2Y9bCtgCmA6Zj1gewpgK2wrYAp9YDtsZXQgZD1mbShmLHtzY2hlbWE6aG19KTtpZihkLnNoYXBlKXtpZihkLnNoYXBlIT09ZC5zaGFwZS50b0xvd2VyQ2FzZSgpfHxkLnNoYXBlLmluY2x1ZGVzKCJfIikpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2Quc2hhcGV9LiBTaGFwZSBuYW1lcyBzaG91bGQgYmUgbG93ZXJjYXNlLmApO2lmKCFaUShkLnNoYXBlKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7ZC5zaGFwZX0uYCk7aC50eXBlPWQ/LnNoYXBlfWQ/LmxhYmVsJiYoaC50ZXh0PWQ/LmxhYmVsKSxkPy5pY29uJiYoaC5pY29uPWQ/Lmljb24sIWQubGFiZWw/LnRyaW0oKSYmaC50ZXh0PT09dCYmKGgudGV4dD0iIikpLGQ/LmZvcm0mJihoLmZvcm09ZD8uZm9ybSksZD8ucG9zJiYoaC5wb3M9ZD8ucG9zKSxkPy5pbWcmJihoLmltZz1kPy5pbWcsIWQubGFiZWw/LnRyaW0oKSYmaC50ZXh0PT09dCYmKGgudGV4dD0iIikpLGQ/LmNvbnN0cmFpbnQmJihoLmNvbnN0cmFpbnQ9ZC5jb25zdHJhaW50KSxkLncmJihoLmFzc2V0V2lkdGg9TnVtYmVyKGQudykpLGQuaCYmKGguYXNzZXRIZWlnaHQ9TnVtYmVyKGQuaCkpfX0sImFkZFZlcnRleCIpLFFfZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgYT17c3RhcnQ6dCxlbmQ6ZSx0eXBlOnZvaWQgMCx0ZXh0OiIiLGxhYmVsVHlwZToidGV4dCJ9O1kuaW5mbygiYWJjNzggR290IGVkZ2UuLi4iLGEpO2xldCBzPXIudGV4dDtpZihzIT09dm9pZCAwJiYoYS50ZXh0PVk1KHMudGV4dC50cmltKCkpLGEudGV4dC5zdGFydHNXaXRoKCciJykmJmEudGV4dC5lbmRzV2l0aCgnIicpJiYoYS50ZXh0PWEudGV4dC5zdWJzdHJpbmcoMSxhLnRleHQubGVuZ3RoLTEpKSxhLmxhYmVsVHlwZT1zLnR5cGUpLHIhPT12b2lkIDAmJihhLnR5cGU9ci50eXBlLGEuc3Ryb2tlPXIuc3Ryb2tlLGEubGVuZ3RoPXIubGVuZ3RoPjEwPzEwOnIubGVuZ3RoKSxDcy5sZW5ndGg8KGRtLm1heEVkZ2VzPz81MDApKVkuaW5mbygiUHVzaGluZyBlZGdlLi4uIiksQ3MucHVzaChhKTtlbHNlIHRocm93IG5ldyBFcnJvcihgRWRnZSBsaW1pdCBleGNlZWRlZC4gJHtDcy5sZW5ndGh9IGVkZ2VzIGZvdW5kLCBidXQgdGhlIGxpbWl0IGlzICR7ZG0ubWF4RWRnZXN9LgoKSW5pdGlhbGl6ZSBtZXJtYWlkIHdpdGggbWF4RWRnZXMgc2V0IHRvIGEgaGlnaGVyIG51bWJlciB0byBhbGxvdyBtb3JlIGVkZ2VzLgpZb3UgY2Fubm90IHNldCB0aGlzIGNvbmZpZyB2aWEgY29uZmlndXJhdGlvbiBpbnNpZGUgdGhlIGRpYWdyYW0gYXMgaXQgaXMgYSBzZWN1cmUgY29uZmlnLgpZb3UgaGF2ZSB0byBjYWxsIG1lcm1haWQuaW5pdGlhbGl6ZS5gKX0sImFkZFNpbmdsZUxpbmsiKSxaX2U9byhmdW5jdGlvbih0LGUscil7WS5pbmZvKCJhZGRMaW5rIix0LGUscik7Zm9yKGxldCBuIG9mIHQpZm9yKGxldCBpIG9mIGUpUV9lKG4saSxyKX0sImFkZExpbmsiKSxKX2U9byhmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbihyKXtyPT09ImRlZmF1bHQiP0NzLmRlZmF1bHRJbnRlcnBvbGF0ZT1lOkNzW3JdLmludGVycG9sYXRlPWV9KX0sInVwZGF0ZUxpbmtJbnRlcnBvbGF0ZSIpLGU5ZT1vKGZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHR5cGVvZiByPT0ibnVtYmVyIiYmcj49Q3MubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGluZGV4ICR7cn0gZm9yIGxpbmtTdHlsZSBpcyBvdXQgb2YgYm91bmRzLiBWYWxpZCBpbmRpY2VzIGZvciBsaW5rU3R5bGUgYXJlIGJldHdlZW4gMCBhbmQgJHtDcy5sZW5ndGgtMX0uIChIZWxwOiBFbnN1cmUgdGhhdCB0aGUgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBlZGdlcy4pYCk7cj09PSJkZWZhdWx0Ij9Dcy5kZWZhdWx0U3R5bGU9ZTooQ3Nbcl0uc3R5bGU9ZSwoQ3Nbcl0/LnN0eWxlPy5sZW5ndGg/PzApPjAmJiFDc1tyXT8uc3R5bGU/LnNvbWUobj0+bj8uc3RhcnRzV2l0aCgiZmlsbCIpKSYmQ3Nbcl0/LnN0eWxlPy5wdXNoKCJmaWxsOm5vbmUiKSl9KX0sInVwZGF0ZUxpbmsiKSx0OWU9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPVN2LmdldChyKTtuPT09dm9pZCAwJiYobj17aWQ6cixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sU3Yuc2V0KHIsbikpLGU/LmZvckVhY2goZnVuY3Rpb24oaSl7aWYoL2NvbG9yLy5leGVjKGkpKXtsZXQgYT1pLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKTtuLnRleHRTdHlsZXMucHVzaChhKX1uLnN0eWxlcy5wdXNoKGkpfSl9KX0sImFkZENsYXNzIikscjllPW8oZnVuY3Rpb24odCl7R289dCwvLio8Ly5leGVjKEdvKSYmKEdvPSJSTCIpLC8uKlxeLy5leGVjKEdvKSYmKEdvPSJCVCIpLC8uKj4vLmV4ZWMoR28pJiYoR289IkxSIiksLy4qdi8uZXhlYyhHbykmJihHbz0iVEIiKSxHbz09PSJURCImJihHbz0iVEIiKX0sInNldERpcmVjdGlvbiIpLGFMPW8oZnVuY3Rpb24odCxlKXtmb3IobGV0IHIgb2YgdC5zcGxpdCgiLCIpKXtsZXQgbj1WaC5nZXQocik7biYmbi5jbGFzc2VzLnB1c2goZSk7bGV0IGk9bkwuZ2V0KHIpO2kmJmkuY2xhc3Nlcy5wdXNoKGUpfX0sInNldENsYXNzIiksbjllPW8oZnVuY3Rpb24odCxlKXtpZihlIT09dm9pZCAwKXtlPVk1KGUpO2ZvcihsZXQgciBvZiB0LnNwbGl0KCIsIikpaUwuc2V0KEg1PT09Imdlbi0xIj9xNShyKTpyLGUpfX0sInNldFRvb2x0aXAiKSxpOWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49cTUodCk7aWYoZGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8ZT09PXZvaWQgMClyZXR1cm47bGV0IGk9W107aWYodHlwZW9mIHI9PSJzdHJpbmciKXtpPXIuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBsPWlbc10udHJpbSgpO2wuc3RhcnRzV2l0aCgnIicpJiZsLmVuZHNXaXRoKCciJykmJihsPWwuc3Vic3RyKDEsbC5sZW5ndGgtMikpLGlbc109bH19aS5sZW5ndGg9PT0wJiZpLnB1c2godCk7bGV0IGE9VmguZ2V0KHQpO2EmJihhLmhhdmVDYWxsYmFjaz0hMCxXNS5wdXNoKGZ1bmN0aW9uKCl7bGV0IHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke259Il1gKTtzIT09bnVsbCYmcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtVdC5ydW5GdW5jKGUsLi4uaSl9LCExKX0pKX0sInNldENsaWNrRnVuIiksYTllPW8oZnVuY3Rpb24odCxlLHIpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2xldCBpPVZoLmdldChuKTtpIT09dm9pZCAwJiYoaS5saW5rPVV0LmZvcm1hdFVybChlLGRtKSxpLmxpbmtUYXJnZXQ9cil9KSxhTCh0LCJjbGlja2FibGUiKX0sInNldExpbmsiKSwkWj1vKGZ1bmN0aW9uKHQpe3JldHVybiBpTC5nZXQodCl9LCJnZXRUb29sdGlwIiksczllPW8oZnVuY3Rpb24odCxlLHIpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2k5ZShuLGUscil9KSxhTCh0LCJjbGlja2FibGUiKX0sInNldENsaWNrRXZlbnQiKSxvOWU9byhmdW5jdGlvbih0KXtXNS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UodCl9KX0sImJpbmRGdW5jdGlvbnMiKSxzTD1vKGZ1bmN0aW9uKCl7cmV0dXJuIEdvLnRyaW0oKX0sImdldERpcmVjdGlvbiIpLFZaPW8oZnVuY3Rpb24oKXtyZXR1cm4gVmh9LCJnZXRWZXJ0aWNlcyIpLFVaPW8oZnVuY3Rpb24oKXtyZXR1cm4gQ3N9LCJnZXRFZGdlcyIpLGw5ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFN2fSwiZ2V0Q2xhc3NlcyIpLEhaPW8oZnVuY3Rpb24odCl7bGV0IGU9emUoIi5tZXJtYWlkVG9vbHRpcCIpOyhlLl9ncm91cHN8fGUpWzBdWzBdPT09bnVsbCYmKGU9emUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibWVybWFpZFRvb2x0aXAiKS5zdHlsZSgib3BhY2l0eSIsMCkpLHplKHQpLnNlbGVjdCgic3ZnIikuc2VsZWN0QWxsKCJnLm5vZGUiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe2xldCBpPXplKHRoaXMpO2lmKGkuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2xldCBzPXRoaXM/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUudGV4dChpLmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtzLmxlZnQrKHMucmlnaHQtcy5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK3MuYm90dG9tKyJweCIpLGUuaHRtbChlLmh0bWwoKS5yZXBsYWNlKC8mbHQ7YnJcLyZndDsvZywiPGJyLz4iKSksaS5jbGFzc2VkKCJob3ZlciIsITApfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLHplKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KX0sInNldHVwVG9vbFRpcHMiKTtXNS5wdXNoKEhaKTtjOWU9byhmdW5jdGlvbih0PSJnZW4tMSIpe1ZoPW5ldyBNYXAsU3Y9bmV3IE1hcCxDcz1bXSxXNT1bSFpdLEF1PVtdLG5MPW5ldyBNYXAsVTU9MCxpTD1uZXcgTWFwLHRMPSEwLEg1PXQsZG09ZGUoKSxfcigpfSwiY2xlYXIiKSx1OWU9byh0PT57SDU9dHx8Imdlbi0yIn0sInNldEdlbiIpLGg5ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7In0sImRlZmF1bHRTdHlsZSIpLGY5ZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LnRleHQudHJpbSgpLGk9ci50ZXh0O3Q9PT1yJiYvXHMvLmV4ZWMoci50ZXh0KSYmKG49dm9pZCAwKTtmdW5jdGlvbiBhKGgpe2xldCBmPXtib29sZWFuOnt9LG51bWJlcjp7fSxzdHJpbmc6e319LGQ9W10scDtyZXR1cm57bm9kZUxpc3Q6aC5maWx0ZXIoZnVuY3Rpb24oZyl7bGV0IHk9dHlwZW9mIGc7cmV0dXJuIGcuc3RtdCYmZy5zdG10PT09ImRpciI/KHA9Zy52YWx1ZSwhMSk6Zy50cmltKCk9PT0iIj8hMTp5IGluIGY/Zlt5XS5oYXNPd25Qcm9wZXJ0eShnKT8hMTpmW3ldW2ddPSEwOmQuaW5jbHVkZXMoZyk/ITE6ZC5wdXNoKGcpfSksZGlyOnB9fW8oYSwidW5pcSIpO2xldHtub2RlTGlzdDpzLGRpcjpsfT1hKGUuZmxhdCgpKTtpZihINT09PSJnZW4tMSIpZm9yKGxldCBoPTA7aDxzLmxlbmd0aDtoKyspc1toXT1xNShzW2hdKTtuPW4/PyJzdWJHcmFwaCIrVTUsaT1pfHwiIixpPVk1KGkpLFU1PVU1KzE7bGV0IHU9e2lkOm4sbm9kZXM6cyx0aXRsZTppLnRyaW0oKSxjbGFzc2VzOltdLGRpcjpsLGxhYmVsVHlwZTpyLnR5cGV9O3JldHVybiBZLmluZm8oIkFkZGluZyIsdS5pZCx1Lm5vZGVzLHUuZGlyKSx1Lm5vZGVzPWpaKHUsQXUpLm5vZGVzLEF1LnB1c2godSksbkwuc2V0KG4sdSksbn0sImFkZFN1YkdyYXBoIiksZDllPW8oZnVuY3Rpb24odCl7Zm9yKGxldFtlLHJdb2YgQXUuZW50cmllcygpKWlmKHIuaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSwiZ2V0UG9zRm9ySWQiKSxFdj0tMSxXWj1bXSxZWj1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9QXVbZV0ubm9kZXM7aWYoRXY9RXYrMSxFdj4yZTMpcmV0dXJue3Jlc3VsdDohMSxjb3VudDowfTtpZihXWltFdl09ZSxBdVtlXS5pZD09PXQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtsZXQgbj0wLGk9MTtmb3IoO248ci5sZW5ndGg7KXtsZXQgYT1kOWUocltuXSk7aWYoYT49MCl7bGV0IHM9WVoodCxhKTtpZihzLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50Omkrcy5jb3VudH07aT1pK3MuY291bnR9bj1uKzF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDppfX0sImluZGV4Tm9kZXMyIikscDllPW8oZnVuY3Rpb24odCl7cmV0dXJuIFdaW3RdfSwiZ2V0RGVwdGhGaXJzdFBvcyIpLG05ZT1vKGZ1bmN0aW9uKCl7RXY9LTEsQXUubGVuZ3RoPjAmJllaKCJub25lIixBdS5sZW5ndGgtMSl9LCJpbmRleE5vZGVzIikscVo9byhmdW5jdGlvbigpe3JldHVybiBBdX0sImdldFN1YkdyYXBocyIpLGc5ZT1vKCgpPT50TD8odEw9ITEsITApOiExLCJmaXJzdEdyYXBoIikseTllPW8odD0+e2xldCBlPXQudHJpbSgpLHI9ImFycm93X29wZW4iO3N3aXRjaChlWzBdKXtjYXNlIjwiOnI9ImFycm93X3BvaW50IixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpyPSJhcnJvd19jcm9zcyIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6cj0iYXJyb3dfY2lyY2xlIixlPWUuc2xpY2UoMSk7YnJlYWt9bGV0IG49Im5vcm1hbCI7cmV0dXJuIGUuaW5jbHVkZXMoIj0iKSYmKG49InRoaWNrIiksZS5pbmNsdWRlcygiLiIpJiYobj0iZG90dGVkIikse3R5cGU6cixzdHJva2U6bn19LCJkZXN0cnVjdFN0YXJ0TGluayIpLHY5ZT1vKCh0LGUpPT57bGV0IHI9ZS5sZW5ndGgsbj0wO2ZvcihsZXQgaT0wO2k8cjsrK2kpZVtpXT09PXQmJisrbjtyZXR1cm4gbn0sImNvdW50Q2hhciIpLHg5ZT1vKHQ9PntsZXQgZT10LnRyaW0oKSxyPWUuc2xpY2UoMCwtMSksbj0iYXJyb3dfb3BlbiI7c3dpdGNoKGUuc2xpY2UoLTEpKXtjYXNlIngiOm49ImFycm93X2Nyb3NzIixlLnN0YXJ0c1dpdGgoIngiKSYmKG49ImRvdWJsZV8iK24scj1yLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOm49ImFycm93X3BvaW50IixlLnN0YXJ0c1dpdGgoIjwiKSYmKG49ImRvdWJsZV8iK24scj1yLnNsaWNlKDEpKTticmVhaztjYXNlIm8iOm49ImFycm93X2NpcmNsZSIsZS5zdGFydHNXaXRoKCJvIikmJihuPSJkb3VibGVfIituLHI9ci5zbGljZSgxKSk7YnJlYWt9bGV0IGk9Im5vcm1hbCIsYT1yLmxlbmd0aC0xO3Iuc3RhcnRzV2l0aCgiPSIpJiYoaT0idGhpY2siKSxyLnN0YXJ0c1dpdGgoIn4iKSYmKGk9ImludmlzaWJsZSIpO2xldCBzPXY5ZSgiLiIscik7cmV0dXJuIHMmJihpPSJkb3R0ZWQiLGE9cykse3R5cGU6bixzdHJva2U6aSxsZW5ndGg6YX19LCJkZXN0cnVjdEVuZExpbmsiKSxiOWU9bygodCxlKT0+e2xldCByPXg5ZSh0KSxuO2lmKGUpe2lmKG49eTllKGUpLG4uc3Ryb2tlIT09ci5zdHJva2UpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2lmKG4udHlwZT09PSJhcnJvd19vcGVuIiluLnR5cGU9ci50eXBlO2Vsc2V7aWYobi50eXBlIT09ci50eXBlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtuLnR5cGU9ImRvdWJsZV8iK24udHlwZX1yZXR1cm4gbi50eXBlPT09ImRvdWJsZV9hcnJvdyImJihuLnR5cGU9ImRvdWJsZV9hcnJvd19wb2ludCIpLG4ubGVuZ3RoPXIubGVuZ3RoLG59cmV0dXJuIHJ9LCJkZXN0cnVjdExpbmsiKSxYWj1vKCh0LGUpPT57Zm9yKGxldCByIG9mIHQpaWYoci5ub2Rlcy5pbmNsdWRlcyhlKSlyZXR1cm4hMDtyZXR1cm4hMX0sImV4aXN0cyIpLGpaPW8oKHQsZSk9PntsZXQgcj1bXTtyZXR1cm4gdC5ub2Rlcy5mb3JFYWNoKChuLGkpPT57WFooZSxuKXx8ci5wdXNoKHQubm9kZXNbaV0pfSkse25vZGVzOnJ9fSwibWFrZVVuaXEiKSx3OWU9e2ZpcnN0R3JhcGg6ZzllfSxUOWU9byh0PT57aWYodC5pbWcpcmV0dXJuImltYWdlU3F1YXJlIjtpZih0Lmljb24pcmV0dXJuIHQuZm9ybT09PSJjaXJjbGUiPyJpY29uQ2lyY2xlIjp0LmZvcm09PT0ic3F1YXJlIj8iaWNvblNxdWFyZSI6dC5mb3JtPT09InJvdW5kZWQiPyJpY29uUm91bmRlZCI6Imljb24iO3N3aXRjaCh0LnR5cGUpe2Nhc2Uic3F1YXJlIjpjYXNlIHZvaWQgMDpyZXR1cm4ic3F1YXJlUmVjdCI7Y2FzZSJyb3VuZCI6cmV0dXJuInJvdW5kZWRSZWN0IjtjYXNlImVsbGlwc2UiOnJldHVybiJlbGxpcHNlIjtkZWZhdWx0OnJldHVybiB0LnR5cGV9fSwiZ2V0VHlwZUZyb21WZXJ0ZXgiKSxrOWU9bygodCxlKT0+dC5maW5kKHI9PnIuaWQ9PT1lKSwiZmluZE5vZGUiKSxFOWU9byh0PT57bGV0IGU9Im5vbmUiLHI9ImFycm93X3BvaW50Ijtzd2l0Y2godCl7Y2FzZSJhcnJvd19wb2ludCI6Y2FzZSJhcnJvd19jaXJjbGUiOmNhc2UiYXJyb3dfY3Jvc3MiOnI9dDticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6ZT10LnJlcGxhY2UoImRvdWJsZV8iLCIiKSxyPWU7YnJlYWt9cmV0dXJue2Fycm93VHlwZVN0YXJ0OmUsYXJyb3dUeXBlRW5kOnJ9fSwiZGVzdHJ1Y3RFZGdlVHlwZSIpLFM5ZT1vKCh0LGUscixuLGksYSk9PntsZXQgcz1yLmdldCh0LmlkKSxsPW4uZ2V0KHQuaWQpPz8hMSx1PWs5ZShlLHQuaWQpO2lmKHUpdS5jc3NTdHlsZXM9dC5zdHlsZXMsdS5jc3NDb21waWxlZFN0eWxlcz1yTCh0LmNsYXNzZXMpLHUuY3NzQ2xhc3Nlcz10LmNsYXNzZXMuam9pbigiICIpO2Vsc2V7bGV0IGg9e2lkOnQuaWQsbGFiZWw6dC50ZXh0LGxhYmVsU3R5bGU6IiIscGFyZW50SWQ6cyxwYWRkaW5nOmkuZmxvd2NoYXJ0Py5wYWRkaW5nfHw4LGNzc1N0eWxlczp0LnN0eWxlcyxjc3NDb21waWxlZFN0eWxlczpyTChbImRlZmF1bHQiLCJub2RlIiwuLi50LmNsYXNzZXNdKSxjc3NDbGFzc2VzOiJkZWZhdWx0ICIrdC5jbGFzc2VzLmpvaW4oIiAiKSxkaXI6dC5kaXIsZG9tSWQ6dC5kb21JZCxsb29rOmEsbGluazp0LmxpbmssbGlua1RhcmdldDp0LmxpbmtUYXJnZXQsdG9vbHRpcDokWih0LmlkKSxpY29uOnQuaWNvbixwb3M6dC5wb3MsaW1nOnQuaW1nLGFzc2V0V2lkdGg6dC5hc3NldFdpZHRoLGFzc2V0SGVpZ2h0OnQuYXNzZXRIZWlnaHQsY29uc3RyYWludDp0LmNvbnN0cmFpbnR9O2w/ZS5wdXNoKHsuLi5oLGlzR3JvdXA6ITAsc2hhcGU6InJlY3QifSk6ZS5wdXNoKHsuLi5oLGlzR3JvdXA6ITEsc2hhcGU6VDllKHQpfSl9fSwiYWRkTm9kZUZyb21WZXJ0ZXgiKTtvKHJMLCJnZXRDb21waWxlZFN0eWxlcyIpO0M5ZT1vKCgpPT57bGV0IHQ9ZGUoKSxlPVtdLHI9W10sbj1xWigpLGk9bmV3IE1hcCxhPW5ldyBNYXA7Zm9yKGxldCB1PW4ubGVuZ3RoLTE7dT49MDt1LS0pe2xldCBoPW5bdV07aC5ub2Rlcy5sZW5ndGg+MCYmYS5zZXQoaC5pZCwhMCk7Zm9yKGxldCBmIG9mIGgubm9kZXMpaS5zZXQoZixoLmlkKX1mb3IobGV0IHU9bi5sZW5ndGgtMTt1Pj0wO3UtLSl7bGV0IGg9blt1XTtlLnB1c2goe2lkOmguaWQsbGFiZWw6aC50aXRsZSxsYWJlbFN0eWxlOiIiLHBhcmVudElkOmkuZ2V0KGguaWQpLHBhZGRpbmc6OCxjc3NDb21waWxlZFN0eWxlczpyTChoLmNsYXNzZXMpLGNzc0NsYXNzZXM6aC5jbGFzc2VzLmpvaW4oIiAiKSxzaGFwZToicmVjdCIsZGlyOmguZGlyLGlzR3JvdXA6ITAsbG9vazp0Lmxvb2t9KX1WWigpLmZvckVhY2godT0+e1M5ZSh1LGUsaSxhLHQsdC5sb29rfHwiY2xhc3NpYyIpfSk7bGV0IGw9VVooKTtyZXR1cm4gbC5mb3JFYWNoKCh1LGgpPT57bGV0e2Fycm93VHlwZVN0YXJ0OmYsYXJyb3dUeXBlRW5kOmR9PUU5ZSh1LnR5cGUpLHA9Wy4uLmwuZGVmYXVsdFN0eWxlPz9bXV07dS5zdHlsZSYmcC5wdXNoKC4uLnUuc3R5bGUpO2xldCBtPXtpZDpwNSh1LnN0YXJ0LHUuZW5kLHtjb3VudGVyOmgscHJlZml4OiJMIn0pLHN0YXJ0OnUuc3RhcnQsZW5kOnUuZW5kLHR5cGU6dS50eXBlPz8ibm9ybWFsIixsYWJlbDp1LnRleHQsbGFiZWxwb3M6ImMiLHRoaWNrbmVzczp1LnN0cm9rZSxtaW5sZW46dS5sZW5ndGgsY2xhc3Nlczp1Py5zdHJva2U9PT0iaW52aXNpYmxlIj8iIjoiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayIsYXJyb3dUeXBlU3RhcnQ6dT8uc3Ryb2tlPT09ImludmlzaWJsZSI/Im5vbmUiOmYsYXJyb3dUeXBlRW5kOnU/LnN0cm9rZT09PSJpbnZpc2libGUiPyJub25lIjpkLGFycm93aGVhZFN0eWxlOiJmaWxsOiAjMzMzIixsYWJlbFN0eWxlOnAsc3R5bGU6cCxwYXR0ZXJuOnUuc3Ryb2tlLGxvb2s6dC5sb29rfTtyLnB1c2gobSl9KSx7bm9kZXM6ZSxlZGdlczpyLG90aGVyOnt9LGNvbmZpZzp0fX0sImdldERhdGEiKSxYNT17ZGVmYXVsdENvbmZpZzpvKCgpPT5TNC5mbG93Y2hhcnQsImRlZmF1bHRDb25maWciKSxzZXRBY2NUaXRsZTpScixnZXRBY2NUaXRsZTpQcixnZXRBY2NEZXNjcmlwdGlvbjpGcixnZXREYXRhOkM5ZSxzZXRBY2NEZXNjcmlwdGlvbjpCcixhZGRWZXJ0ZXg6S19lLGxvb2tVcERvbUlkOnE1LGFkZExpbms6Wl9lLHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpKX2UsdXBkYXRlTGluazplOWUsYWRkQ2xhc3M6dDllLHNldERpcmVjdGlvbjpyOWUsc2V0Q2xhc3M6YUwsc2V0VG9vbHRpcDpuOWUsZ2V0VG9vbHRpcDokWixzZXRDbGlja0V2ZW50OnM5ZSxzZXRMaW5rOmE5ZSxiaW5kRnVuY3Rpb25zOm85ZSxnZXREaXJlY3Rpb246c0wsZ2V0VmVydGljZXM6VlosZ2V0RWRnZXM6VVosZ2V0Q2xhc3NlczpsOWUsY2xlYXI6YzllLHNldEdlbjp1OWUsZGVmYXVsdFN0eWxlOmg5ZSxhZGRTdWJHcmFwaDpmOWUsZ2V0RGVwdGhGaXJzdFBvczpwOWUsaW5kZXhOb2RlczptOWUsZ2V0U3ViR3JhcGhzOnFaLGRlc3RydWN0TGluazpiOWUsbGV4Onc5ZSxleGlzdHM6WFosbWFrZVVuaXE6alosc2V0RGlhZ3JhbVRpdGxlOmxuLGdldERpYWdyYW1UaXRsZTpKcn19KTt2YXIgcG0sajU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO3BtPW8oKHQsZSk9PntsZXQgcjtyZXR1cm4gZT09PSJzYW5kYm94IiYmKHI9emUoIiNpIit0KSksKGU9PT0ic2FuZGJveCI/emUoci5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTp6ZSgiYm9keSIpKS5zZWxlY3QoYFtpZD0iJHt0fSJdYCl9LCJnZXREaWFncmFtRWxlbWVudCIpfSk7dmFyIF91LEN2PU0oKCk9PnsidXNlIHN0cmljdCI7X3U9bygoe2Zsb3djaGFydDp0fSk9PntsZXQgZT10Py5zdWJHcmFwaFRpdGxlTWFyZ2luPy50b3A/PzAscj10Py5zdWJHcmFwaFRpdGxlTWFyZ2luPy5ib3R0b20/PzAsbj1lK3I7cmV0dXJue3N1YkdyYXBoVGl0bGVUb3BNYXJnaW46ZSxzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luOnIsc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOm59fSwiZ2V0U3ViR3JhcGhUaXRsZU1hcmdpbnMiKX0pO3ZhciBLWixBOWUsXzllLEw5ZSxEOWUsTjllLFI5ZSxRWixtbSxaWixLNT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTtodCgpO0N2KCk7bXIoKTtqdCgpO0RsKCk7dzkoKTtJNSgpO3poKCk7WHQoKTtLWj1vKGFzeW5jKHQsZSk9PntZLmluZm8oIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTtsZXQgcj1kZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7Y2x1c3RlckJrZzphLGNsdXN0ZXJCb3JkZXI6c309bix7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnUsYm9yZGVyU3R5bGVzOmgsYmFja2dyb3VuZFN0eWxlczpmfT1ldChlKSxkPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyICIrZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLHA9eHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1kLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCAiKSxnPWF3YWl0IFNpKG0sZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6cCxpc05vZGU6ITB9KSx5PWcuZ2V0QkJveCgpO2lmKHhyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgTD1nLmNoaWxkcmVuWzBdLEM9emUoZyk7eT1MLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEMuYXR0cigid2lkdGgiLHkud2lkdGgpLEMuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCl9bGV0IHY9ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/eS53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD15LndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHYtZS53aWR0aCkvMi1lLnBhZGRpbmc6ZS5kaWZmPS1lLnBhZGRpbmc7bGV0IHg9ZS5oZWlnaHQsYj1lLngtdi8yLHc9ZS55LXgvMjtZLnRyYWNlKCJEYXRhICIsZSxKU09OLnN0cmluZ2lmeShlKSk7bGV0IF87aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBMPUtlLnN2ZyhkKSxDPVplKGUse3JvdWdobmVzczouNyxmaWxsOmEsc3Ryb2tlOnMsZmlsbFdlaWdodDozLHNlZWQ6aX0pLEE9TC5wYXRoKExhKGIsdyx2LHgsMCksQyk7Xz1kLmluc2VydCgoKT0+KFkuZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsQSksQSksIjpmaXJzdC1jaGlsZCIpLF8uc2VsZWN0KCJwYXRoOm50aC1jaGlsZCgyKSIpLmF0dHIoInN0eWxlIixoLmpvaW4oIjsiKSksXy5zZWxlY3QoInBhdGgiKS5hdHRyKCJzdHlsZSIsZi5qb2luKCI7IikucmVwbGFjZSgiZmlsbCIsInN0cm9rZSIpKX1lbHNlIF89ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxfLmF0dHIoInN0eWxlIix1KS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGIpLmF0dHIoInkiLHcpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLHgpO2xldHtzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOlR9PV91KHIpO2lmKG0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZS54LXkud2lkdGgvMn0sICR7ZS55LWUuaGVpZ2h0LzIrVH0pYCksbCl7bGV0IEw9bS5zZWxlY3QoInNwYW4iKTtMJiZMLmF0dHIoInN0eWxlIixsKX1sZXQgRT1fLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUub2Zmc2V0WD0wLGUud2lkdGg9RS53aWR0aCxlLmhlaWdodD1FLmhlaWdodCxlLm9mZnNldFk9eS5oZWlnaHQtZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTCl7cmV0dXJuIE9oKGUsTCl9LHtjbHVzdGVyOmQsbGFiZWxCQm94Onl9fSwicmVjdCIpLEE5ZT1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixlLmlkKSxuPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wKmUucGFkZGluZyxhPWkvMjtuLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsZS54LWUud2lkdGgvMi1hKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpLmF0dHIoImZpbGwiLCJub25lIik7bGV0IHM9bi5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLndpZHRoPXMud2lkdGgsZS5oZWlnaHQ9cy5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIE9oKGUsbCl9LHtjbHVzdGVyOnIsbGFiZWxCQm94Ont3aWR0aDowLGhlaWdodDowfX19LCJub3RlR3JvdXAiKSxfOWU9byhhc3luYyh0LGUpPT57bGV0IHI9ZGUoKSx7dGhlbWVWYXJpYWJsZXM6bixoYW5kRHJhd25TZWVkOml9PXIse2FsdEJhY2tncm91bmQ6YSxjb21wb3NpdGVCYWNrZ3JvdW5kOnMsY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kOmwsbm9kZUJvcmRlcjp1fT1uLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1pZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLGY9aC5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSxkPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIikscD1oLmFwcGVuZCgicmVjdCIpLG09ZC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgZ2MoZS5sYWJlbCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSksZz1tLmdldEJCb3goKTtpZih4cihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEE9bS5jaGlsZHJlblswXSxJPXplKG0pO2c9QS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJLmF0dHIoIndpZHRoIixnLndpZHRoKSxJLmF0dHIoImhlaWdodCIsZy5oZWlnaHQpfWxldCB5PTAqZS5wYWRkaW5nLHY9eS8yLHg9KGUud2lkdGg8PWcud2lkdGgrZS5wYWRkaW5nP2cud2lkdGgrZS5wYWRkaW5nOmUud2lkdGgpK3k7ZS53aWR0aDw9Zy53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh4LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCBiPWUuaGVpZ2h0K3ksdz1lLmhlaWdodCt5LWcuaGVpZ2h0LTYsXz1lLngteC8yLFQ9ZS55LWIvMjtlLndpZHRoPXg7bGV0IEU9ZS55LWUuaGVpZ2h0LzItditnLmhlaWdodCsyLEw7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBBPWUuY3NzQ2xhc3Nlcy5pbmNsdWRlcygic3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IiksST1LZS5zdmcoaCksRD1lLnJ4fHxlLnJ5P0kucGF0aChMYShfLFQseCxiLDEwKSx7cm91Z2huZXNzOi43LGZpbGw6bCxmaWxsU3R5bGU6InNvbGlkIixzdHJva2U6dSxzZWVkOml9KTpJLnJlY3RhbmdsZShfLFQseCxiLHtzZWVkOml9KTtMPWguaW5zZXJ0KCgpPT5ELCI6Zmlyc3QtY2hpbGQiKTtsZXQgaz1JLnJlY3RhbmdsZShfLEUseCx3LHtmaWxsOkE/YTpzLGZpbGxTdHlsZTpBPyJoYWNodXJlIjoic29saWQiLHN0cm9rZTp1LHNlZWQ6aX0pO0w9aC5pbnNlcnQoKCk9PkQsIjpmaXJzdC1jaGlsZCIpLHA9aC5pbnNlcnQoKCk9PmspfWVsc2UgTD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLEwuYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLF8pLmF0dHIoInkiLFQpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxwLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixfKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0Iix3KTtkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC1nLndpZHRoLzJ9LCAke1QrMS0oeHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyk/MDozKX0pYCk7bGV0IEM9TC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1DLmhlaWdodCxlLm9mZnNldFg9MCxlLm9mZnNldFk9Zy5oZWlnaHQtZS5wYWRkaW5nLzIsZS5sYWJlbEJCb3g9ZyxlLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4gT2goZSxBKX0se2NsdXN0ZXI6aCxsYWJlbEJCb3g6Z319LCJyb3VuZGVkV2l0aFRpdGxlIiksTDllPW8oYXN5bmModCxlKT0+e1kuaW5mbygiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO2xldCByPWRlKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHtjbHVzdGVyQmtnOmEsY2x1c3RlckJvcmRlcjpzfT1uLHtsYWJlbFN0eWxlczpsLG5vZGVTdHlsZXM6dSxib3JkZXJTdHlsZXM6aCxiYWNrZ3JvdW5kU3R5bGVzOmZ9PWV0KGUpLGQ9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIgIitlLmNzc0NsYXNzZXMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vaykscD14cihyLmZsb3djaGFydC5odG1sTGFiZWxzKSxtPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsICIpLGc9YXdhaXQgU2kobSxlLmxhYmVsLHtzdHlsZTplLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczpwLGlzTm9kZTohMCx3aWR0aDplLndpZHRofSkseT1nLmdldEJCb3goKTtpZih4cihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEw9Zy5jaGlsZHJlblswXSxDPXplKGcpO3k9TC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxDLmF0dHIoIndpZHRoIix5LndpZHRoKSxDLmF0dHIoImhlaWdodCIseS5oZWlnaHQpfWxldCB2PWUud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP3kud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh2LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCB4PWUuaGVpZ2h0LGI9ZS54LXYvMix3PWUueS14LzI7WS50cmFjZSgiRGF0YSAiLGUsSlNPTi5zdHJpbmdpZnkoZSkpO2xldCBfO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgTD1LZS5zdmcoZCksQz1aZShlLHtyb3VnaG5lc3M6LjcsZmlsbDphLHN0cm9rZTpzLGZpbGxXZWlnaHQ6NCxzZWVkOml9KSxBPUwucGF0aChMYShiLHcsdix4LGUucngpLEMpO189ZC5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEEpLEEpLCI6Zmlyc3QtY2hpbGQiKSxfLnNlbGVjdCgicGF0aDpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsaC5qb2luKCI7IikpLF8uc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGYuam9pbigiOyIpLnJlcGxhY2UoImZpbGwiLCJzdHJva2UiKSl9ZWxzZSBfPWQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksXy5hdHRyKCJzdHlsZSIsdSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixiKS5hdHRyKCJ5Iix3KS5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0Iix4KTtsZXR7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjpUfT1fdShyKTtpZihtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC15LndpZHRoLzJ9LCAke2UueS1lLmhlaWdodC8yK1R9KWApLGwpe2xldCBMPW0uc2VsZWN0KCJzcGFuIik7TCYmTC5hdHRyKCJzdHlsZSIsbCl9bGV0IEU9Xy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLm9mZnNldFg9MCxlLndpZHRoPUUud2lkdGgsZS5oZWlnaHQ9RS5oZWlnaHQsZS5vZmZzZXRZPXkuaGVpZ2h0LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEwpe3JldHVybiBPaChlLEwpfSx7Y2x1c3RlcjpkLGxhYmVsQkJveDp5fX0sImthbmJhblNlY3Rpb24iKSxEOWU9bygodCxlKT0+e2xldCByPWRlKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHtub2RlQm9yZGVyOmF9PW4scz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixlLmNzc0NsYXNzZXMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vayksbD1zLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLHU9MCplLnBhZGRpbmcsaD1lLndpZHRoK3U7ZS5kaWZmPS1lLnBhZGRpbmc7bGV0IGY9ZS5oZWlnaHQrdSxkPWUueC1oLzIscD1lLnktZi8yO2Uud2lkdGg9aDtsZXQgbTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHY9S2Uuc3ZnKHMpLnJlY3RhbmdsZShkLHAsaCxmLHtmaWxsOiJsaWdodGdyZXkiLHJvdWdobmVzczouNSxzdHJva2VMaW5lRGFzaDpbNV0sc3Ryb2tlOmEsc2VlZDppfSk7bT1zLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIil9ZWxzZSBtPWwuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksbS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixwKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vayk7bGV0IGc9bS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1nLmhlaWdodCxlLm9mZnNldFg9MCxlLm9mZnNldFk9MCxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gT2goZSx5KX0se2NsdXN0ZXI6cyxsYWJlbEJCb3g6e319fSwiZGl2aWRlciIpLE45ZT1LWixSOWU9e3JlY3Q6S1osc3F1YXJlUmVjdDpOOWUscm91bmRlZFdpdGhUaXRsZTpfOWUsbm90ZUdyb3VwOkE5ZSxkaXZpZGVyOkQ5ZSxrYW5iYW5TZWN0aW9uOkw5ZX0sUVo9bmV3IE1hcCxtbT1vKGFzeW5jKHQsZSk9PntsZXQgcj1lLnNoYXBlfHwicmVjdCIsbj1hd2FpdCBSOWVbcl0odCxlKTtyZXR1cm4gUVouc2V0KGUuaWQsbiksbn0sImluc2VydENsdXN0ZXIiKSxaWj1vKCgpPT57UVo9bmV3IE1hcH0sImNsZWFyIil9KTtmdW5jdGlvbiBRNSh0LGUpe2lmKHQ9PT12b2lkIDB8fGU9PT12b2lkIDApcmV0dXJue2FuZ2xlOjAsZGVsdGFYOjAsZGVsdGFZOjB9O3Q9VW4odCksZT1VbihlKTtsZXRbcixuXT1bdC54LHQueV0sW2ksYV09W2UueCxlLnldLHM9aS1yLGw9YS1uO3JldHVybnthbmdsZTpNYXRoLmF0YW4obC9zKSxkZWx0YVg6cyxkZWx0YVk6bH19dmFyICRvLFVuLFo1LGxMPU0oKCk9PnsidXNlIHN0cmljdCI7JG89e2FnZ3JlZ2F0aW9uOjE4LGV4dGVuc2lvbjoxOCxjb21wb3NpdGlvbjoxOCxkZXBlbmRlbmN5OjYsbG9sbGlwb3A6MTMuNSxhcnJvd19wb2ludDo0fTtvKFE1LCJjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlIik7VW49byh0PT5BcnJheS5pc0FycmF5KHQpP3t4OnRbMF0seTp0WzFdfTp0LCJwb2ludFRyYW5zZm9ybWVyIiksWjU9byh0PT4oe3g6byhmdW5jdGlvbihlLHIsbil7bGV0IGk9MCxhPVVuKG5bMF0pLng8VW4obltuLmxlbmd0aC0xXSkueD8ibGVmdCI6InJpZ2h0IjtpZihyPT09MCYmT2JqZWN0Lmhhc093bigkbyx0LmFycm93VHlwZVN0YXJ0KSl7bGV0e2FuZ2xlOm0sZGVsdGFYOmd9PVE1KG5bMF0sblsxXSk7aT0kb1t0LmFycm93VHlwZVN0YXJ0XSpNYXRoLmNvcyhtKSooZz49MD8xOi0xKX1lbHNlIGlmKHI9PT1uLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKCRvLHQuYXJyb3dUeXBlRW5kKSl7bGV0e2FuZ2xlOm0sZGVsdGFYOmd9PVE1KG5bbi5sZW5ndGgtMV0sbltuLmxlbmd0aC0yXSk7aT0kb1t0LmFycm93VHlwZUVuZF0qTWF0aC5jb3MobSkqKGc+PTA/MTotMSl9bGV0IHM9TWF0aC5hYnMoVW4oZSkueC1VbihuW24ubGVuZ3RoLTFdKS54KSxsPU1hdGguYWJzKFVuKGUpLnktVW4obltuLmxlbmd0aC0xXSkueSksdT1NYXRoLmFicyhVbihlKS54LVVuKG5bMF0pLngpLGg9TWF0aC5hYnMoVW4oZSkueS1VbihuWzBdKS55KSxmPSRvW3QuYXJyb3dUeXBlU3RhcnRdLGQ9JG9bdC5hcnJvd1R5cGVFbmRdLHA9MTtpZihzPGQmJnM+MCYmbDxkKXtsZXQgbT1kK3AtczttKj1hPT09InJpZ2h0Ij8tMToxLGktPW19aWYodTxmJiZ1PjAmJmg8Zil7bGV0IG09ZitwLXU7bSo9YT09PSJyaWdodCI/LTE6MSxpKz1tfXJldHVybiBVbihlKS54K2l9LCJ4IikseTpvKGZ1bmN0aW9uKGUscixuKXtsZXQgaT0wLGE9VW4oblswXSkueTxVbihuW24ubGVuZ3RoLTFdKS55PyJkb3duIjoidXAiO2lmKHI9PT0wJiZPYmplY3QuaGFzT3duKCRvLHQuYXJyb3dUeXBlU3RhcnQpKXtsZXR7YW5nbGU6bSxkZWx0YVk6Z309UTUoblswXSxuWzFdKTtpPSRvW3QuYXJyb3dUeXBlU3RhcnRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooZz49MD8xOi0xKX1lbHNlIGlmKHI9PT1uLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKCRvLHQuYXJyb3dUeXBlRW5kKSl7bGV0e2FuZ2xlOm0sZGVsdGFZOmd9PVE1KG5bbi5sZW5ndGgtMV0sbltuLmxlbmd0aC0yXSk7aT0kb1t0LmFycm93VHlwZUVuZF0qTWF0aC5hYnMoTWF0aC5zaW4obSkpKihnPj0wPzE6LTEpfWxldCBzPU1hdGguYWJzKFVuKGUpLnktVW4obltuLmxlbmd0aC0xXSkueSksbD1NYXRoLmFicyhVbihlKS54LVVuKG5bbi5sZW5ndGgtMV0pLngpLHU9TWF0aC5hYnMoVW4oZSkueS1VbihuWzBdKS55KSxoPU1hdGguYWJzKFVuKGUpLngtVW4oblswXSkueCksZj0kb1t0LmFycm93VHlwZVN0YXJ0XSxkPSRvW3QuYXJyb3dUeXBlRW5kXSxwPTE7aWYoczxkJiZzPjAmJmw8ZCl7bGV0IG09ZCtwLXM7bSo9YT09PSJ1cCI/LTE6MSxpLT1tfWlmKHU8ZiYmdT4wJiZoPGYpe2xldCBtPWYrcC11O20qPWE9PT0idXAiPy0xOjEsaSs9bX1yZXR1cm4gVW4oZSkueStpfSwieSIpfSksImdldExpbmVGdW5jdGlvbnNXaXRoT2Zmc2V0Iil9KTt2YXIgZUosTTllLEpaLHRKPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtlSj1vKCh0LGUscixuLGkpPT57ZS5hcnJvd1R5cGVTdGFydCYmSloodCwic3RhcnQiLGUuYXJyb3dUeXBlU3RhcnQscixuLGkpLGUuYXJyb3dUeXBlRW5kJiZKWih0LCJlbmQiLGUuYXJyb3dUeXBlRW5kLHIsbixpKX0sImFkZEVkZ2VNYXJrZXJzIiksTTllPXthcnJvd19jcm9zczoiY3Jvc3MiLGFycm93X3BvaW50OiJwb2ludCIsYXJyb3dfYmFyYjoiYmFyYiIsYXJyb3dfY2lyY2xlOiJjaXJjbGUiLGFnZ3JlZ2F0aW9uOiJhZ2dyZWdhdGlvbiIsZXh0ZW5zaW9uOiJleHRlbnNpb24iLGNvbXBvc2l0aW9uOiJjb21wb3NpdGlvbiIsZGVwZW5kZW5jeToiZGVwZW5kZW5jeSIsbG9sbGlwb3A6ImxvbGxpcG9wIn0sSlo9bygodCxlLHIsbixpLGEpPT57bGV0IHM9TTllW3JdO2lmKCFzKXtZLndhcm4oYFVua25vd24gYXJyb3cgdHlwZTogJHtyfWApO3JldHVybn1sZXQgbD1lPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQiO3QuYXR0cihgbWFya2VyLSR7ZX1gLGB1cmwoJHtufSMke2l9XyR7YX0tJHtzfSR7bH0pYCl9LCJhZGRFZGdlTWFya2VyIil9KTtmdW5jdGlvbiBKNSh0LGUpe2RlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPWUubGVuZ3RoKjkrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfWZ1bmN0aW9uIFA5ZSh0KXtsZXQgZT1bXSxyPVtdO2ZvcihsZXQgbj0xO248dC5sZW5ndGgtMTtuKyspe2xldCBpPXRbbi0xXSxhPXRbbl0scz10W24rMV07KGkueD09PWEueCYmYS55PT09cy55JiZNYXRoLmFicyhhLngtcy54KT41JiZNYXRoLmFicyhhLnktaS55KT41fHxpLnk9PT1hLnkmJmEueD09PXMueCYmTWF0aC5hYnMoYS54LWkueCk+NSYmTWF0aC5hYnMoYS55LXMueSk+NSkmJihlLnB1c2goYSksci5wdXNoKG4pKX1yZXR1cm57Y29ybmVyUG9pbnRzOmUsY29ybmVyUG9pbnRQb3NpdGlvbnM6cn19dmFyIGV3LHVhLGlKLEF2LHR3LHJ3LEk5ZSxPOWUsckosbkosQjllLG53LGNMPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtmcigpO2h0KCk7RGwoKTtocigpO2xMKCk7Q3YoKTttcigpO2p0KCk7STUoKTt0SigpO2V3PW5ldyBNYXAsdWE9bmV3IE1hcCxpSj1vKCgpPT57ZXcuY2xlYXIoKSx1YS5jbGVhcigpfSwiY2xlYXIiKSxBdj1vKHQ9PnQ/dC5yZWR1Y2UoKHIsbik9PnIrIjsiK24sIiIpOiIiLCJnZXRMYWJlbFN0eWxlcyIpLHR3PW8oYXN5bmModCxlKT0+e2xldCByPXhyKGRlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLG49YXdhaXQgU2kodCxlLmxhYmVsLHtzdHlsZTpBdihlLmxhYmVsU3R5bGUpLHVzZUh0bWxMYWJlbHM6cixhZGRTdmdCYWNrZ3JvdW5kOiEwLGlzTm9kZTohMX0pO1kuaW5mbygiYWJjODIiLGUsZS5sYWJlbFR5cGUpO2xldCBpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxhPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2Eubm9kZSgpLmFwcGVuZENoaWxkKG4pO2xldCBzPW4uZ2V0QkJveCgpO2lmKHIpe2xldCB1PW4uY2hpbGRyZW5bMF0saD16ZShuKTtzPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaC5hdHRyKCJ3aWR0aCIscy53aWR0aCksaC5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1hLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1zLndpZHRoLzIrIiwgIistcy5oZWlnaHQvMisiKSIpLGV3LnNldChlLmlkLGkpLGUud2lkdGg9cy53aWR0aCxlLmhlaWdodD1zLmhlaWdodDtsZXQgbDtpZihlLnN0YXJ0TGFiZWxMZWZ0KXtsZXQgdT1hd2FpdCBnYyhlLnN0YXJ0TGFiZWxMZWZ0LEF2KGUubGFiZWxTdHlsZSkpLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxmPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2w9Zi5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7bGV0IGQ9dS5nZXRCQm94KCk7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrLWQuaGVpZ2h0LzIrIikiKSx1YS5nZXQoZS5pZCl8fHVhLnNldChlLmlkLHt9KSx1YS5nZXQoZS5pZCkuc3RhcnRMZWZ0PWgsSjUobCxlLnN0YXJ0TGFiZWxMZWZ0KX1pZihlLnN0YXJ0TGFiZWxSaWdodCl7bGV0IHU9YXdhaXQgZ2MoZS5zdGFydExhYmVsUmlnaHQsQXYoZS5sYWJlbFN0eWxlKSksaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGY9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7bD1oLm5vZGUoKS5hcHBlbmRDaGlsZCh1KSxmLm5vZGUoKS5hcHBlbmRDaGlsZCh1KTtsZXQgZD11LmdldEJCb3goKTtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIistZC5oZWlnaHQvMisiKSIpLHVhLmdldChlLmlkKXx8dWEuc2V0KGUuaWQse30pLHVhLmdldChlLmlkKS5zdGFydFJpZ2h0PWgsSjUobCxlLnN0YXJ0TGFiZWxSaWdodCl9aWYoZS5lbmRMYWJlbExlZnQpe2xldCB1PWF3YWl0IGdjKGUuZW5kTGFiZWxMZWZ0LEF2KGUubGFiZWxTdHlsZSkpLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxmPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2w9Zi5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7bGV0IGQ9dS5nZXRCQm94KCk7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrLWQuaGVpZ2h0LzIrIikiKSxoLm5vZGUoKS5hcHBlbmRDaGlsZCh1KSx1YS5nZXQoZS5pZCl8fHVhLnNldChlLmlkLHt9KSx1YS5nZXQoZS5pZCkuZW5kTGVmdD1oLEo1KGwsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7bGV0IHU9YXdhaXQgZ2MoZS5lbmRMYWJlbFJpZ2h0LEF2KGUubGFiZWxTdHlsZSkpLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxmPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2w9Zi5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7bGV0IGQ9dS5nZXRCQm94KCk7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrLWQuaGVpZ2h0LzIrIikiKSxoLm5vZGUoKS5hcHBlbmRDaGlsZCh1KSx1YS5nZXQoZS5pZCl8fHVhLnNldChlLmlkLHt9KSx1YS5nZXQoZS5pZCkuZW5kUmlnaHQ9aCxKNShsLGUuZW5kTGFiZWxSaWdodCl9cmV0dXJuIG59LCJpbnNlcnRFZGdlTGFiZWwiKTtvKEo1LCJzZXRUZXJtaW5hbFdpZHRoIik7cnc9bygodCxlKT0+e1kuZGVidWcoIk1vdmluZyBsYWJlbCBhYmM4OCAiLHQuaWQsdC5sYWJlbCxldy5nZXQodC5pZCksZSk7bGV0IHI9ZS51cGRhdGVkUGF0aD9lLnVwZGF0ZWRQYXRoOmUub3JpZ2luYWxQYXRoLG49ZGUoKSx7c3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOml9PV91KG4pO2lmKHQubGFiZWwpe2xldCBhPWV3LmdldCh0LmlkKSxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjTGFiZWxQb3NpdGlvbihyKTtZLmRlYnVnKCJNb3ZpbmcgbGFiZWwgIit0LmxhYmVsKyIgZnJvbSAoIixzLCIsIixsLCIpIHRvICgiLHUueCwiLCIsdS55LCIpIGFiYzg4IiksZS51cGRhdGVkUGF0aCYmKHM9dS54LGw9dS55KX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2wraS8yfSlgKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXtsZXQgYT11YS5nZXQodC5pZCkuc3RhcnRMZWZ0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9sZWZ0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuc3RhcnRMYWJlbFJpZ2h0KXtsZXQgYT11YS5nZXQodC5pZCkuc3RhcnRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbExlZnQpe2xldCBhPXVhLmdldCh0LmlkKS5lbmRMZWZ0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbFJpZ2h0KXtsZXQgYT11YS5nZXQodC5pZCkuZW5kUmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZUVuZD8xMDowLCJlbmRfcmlnaHQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9fSwicG9zaXRpb25FZGdlTGFiZWwiKSxJOWU9bygodCxlKT0+e2xldCByPXQueCxuPXQueSxpPU1hdGguYWJzKGUueC1yKSxhPU1hdGguYWJzKGUueS1uKSxzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzI7cmV0dXJuIGk+PXN8fGE+PWx9LCJvdXRzaWRlTm9kZSIpLE85ZT1vKCh0LGUscik9PntZLmRlYnVnKGBpbnRlcnNlY3Rpb24gY2FsYyBhYmM4OToKICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkoZSl9CiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KHIpfQogIG5vZGUgICAgICAgIDogeDoke3QueH0geToke3QueX0gdzoke3Qud2lkdGh9IGg6JHt0LmhlaWdodH1gKTtsZXQgbj10LngsaT10LnksYT1NYXRoLmFicyhuLXIueCkscz10LndpZHRoLzIsbD1yLng8ZS54P3MtYTpzK2EsdT10LmhlaWdodC8yLGg9TWF0aC5hYnMoZS55LXIueSksZj1NYXRoLmFicyhlLngtci54KTtpZihNYXRoLmFicyhpLWUueSkqcz5NYXRoLmFicyhuLWUueCkqdSl7bGV0IGQ9ci55PGUueT9lLnktdS1pOmktdS1lLnk7bD1mKmQvaDtsZXQgcD17eDpyLng8ZS54P3IueCtsOnIueC1mK2wseTpyLnk8ZS55P3IueStoLWQ6ci55LWgrZH07cmV0dXJuIGw9PT0wJiYocC54PWUueCxwLnk9ZS55KSxmPT09MCYmKHAueD1lLngpLGg9PT0wJiYocC55PWUueSksWS5kZWJ1ZyhgYWJjODkgdG9wL2JvdHRvbSBjYWxjLCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHApLHB9ZWxzZXtyLng8ZS54P2w9ZS54LXMtbjpsPW4tcy1lLng7bGV0IGQ9aCpsL2YscD1yLng8ZS54P3IueCtmLWw6ci54LWYrbCxtPXIueTxlLnk/ci55K2Q6ci55LWQ7cmV0dXJuIFkuZGVidWcoYHNpZGVzIGNhbGMgYWJjODksIFEgJHtofSwgcSAke2R9LCBSICR7Zn0sIHIgJHtsfWAse194OnAsX3k6bX0pLGw9PT0wJiYocD1lLngsbT1lLnkpLGY9PT0wJiYocD1lLngpLGg9PT0wJiYobT1lLnkpLHt4OnAseTptfX19LCJpbnRlcnNlY3Rpb24iKSxySj1vKCh0LGUpPT57WS53YXJuKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLHQsZSk7bGV0IHI9W10sbj10WzBdLGk9ITE7cmV0dXJuIHQuZm9yRWFjaChhPT57aWYoWS5pbmZvKCJhYmM4OCBjaGVja2luZyBwb2ludCIsYSxlKSwhSTllKGUsYSkmJiFpKXtsZXQgcz1POWUoZSxuLGEpO1kuZGVidWcoImFiYzg4IGluc2lkZSIsYSxuLHMpLFkuZGVidWcoImFiYzg4IGludGVyc2VjdGlvbiIscyxlKTtsZXQgbD0hMTtyLmZvckVhY2godT0+e2w9bHx8dS54PT09cy54JiZ1Lnk9PT1zLnl9KSxyLnNvbWUodT0+dS54PT09cy54JiZ1Lnk9PT1zLnkpP1kud2FybigiYWJjODggbm8gaW50ZXJzZWN0IixzLHIpOnIucHVzaChzKSxpPSEwfWVsc2UgWS53YXJuKCJhYmM4OCBvdXRzaWRlIixhLG4pLG49YSxpfHxyLnB1c2goYSl9KSxZLmRlYnVnKCJyZXR1cm5pbmcgcG9pbnRzIixyKSxyfSwiY3V0UGF0aEF0SW50ZXJzZWN0Iik7byhQOWUsImV4dHJhY3RDb3JuZXJQb2ludHMiKTtuSj1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngtdC54LGk9ZS55LXQueSxhPU1hdGguc3FydChuKm4raSppKSxzPXIvYTtyZXR1cm57eDplLngtcypuLHk6ZS55LXMqaX19LCJmaW5kQWRqYWNlbnRQb2ludCIpLEI5ZT1vKGZ1bmN0aW9uKHQpe2xldHtjb3JuZXJQb2ludFBvc2l0aW9uczplfT1QOWUodCkscj1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZihlLmluY2x1ZGVzKG4pKXtsZXQgaT10W24tMV0sYT10W24rMV0scz10W25dLGw9bkooaSxzLDUpLHU9bkooYSxzLDUpLGg9dS54LWwueCxmPXUueS1sLnk7ci5wdXNoKGwpO2xldCBkPU1hdGguc3FydCgyKSoyLHA9e3g6cy54LHk6cy55fTtpZihNYXRoLmFicyhhLngtaS54KT4xMCYmTWF0aC5hYnMoYS55LWkueSk+PTEwKXtZLmRlYnVnKCJDb3JuZXIgcG9pbnQgZml4aW5nIixNYXRoLmFicyhhLngtaS54KSxNYXRoLmFicyhhLnktaS55KSk7bGV0IG09NTtzLng9PT1sLng/cD17eDpoPDA/bC54LW0rZDpsLngrbS1kLHk6ZjwwP2wueS1kOmwueStkfTpwPXt4Omg8MD9sLngtZDpsLngrZCx5OmY8MD9sLnktbStkOmwueSttLWR9fWVsc2UgWS5kZWJ1ZygiQ29ybmVyIHBvaW50IHNraXBwaW5nIGZpeGluZyIsTWF0aC5hYnMoYS54LWkueCksTWF0aC5hYnMoYS55LWkueSkpO3IucHVzaChwLHUpfWVsc2Ugci5wdXNoKHRbbl0pO3JldHVybiByfSwiZml4Q29ybmVycyIpLG53PW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyl7bGV0e2hhbmREcmF3blNlZWQ6bH09ZGUoKSx1PWUucG9pbnRzLGg9ITEsZj1pO3ZhciBkPWE7ZC5pbnRlcnNlY3QmJmYuaW50ZXJzZWN0JiYodT11LnNsaWNlKDEsZS5wb2ludHMubGVuZ3RoLTEpLHUudW5zaGlmdChmLmludGVyc2VjdCh1WzBdKSksWS5kZWJ1ZygiTGFzdCBwb2ludCBBUEExMiIsZS5zdGFydCwiLS0+IixlLmVuZCx1W3UubGVuZ3RoLTFdLGQsZC5pbnRlcnNlY3QodVt1Lmxlbmd0aC0xXSkpLHUucHVzaChkLmludGVyc2VjdCh1W3UubGVuZ3RoLTFdKSkpLGUudG9DbHVzdGVyJiYoWS5pbmZvKCJ0byBjbHVzdGVyIGFiYzg4IixyLmdldChlLnRvQ2x1c3RlcikpLHU9ckooZS5wb2ludHMsci5nZXQoZS50b0NsdXN0ZXIpLm5vZGUpLGg9ITApLGUuZnJvbUNsdXN0ZXImJihZLmRlYnVnKCJmcm9tIGNsdXN0ZXIgYWJjODgiLHIuZ2V0KGUuZnJvbUNsdXN0ZXIpLEpTT04uc3RyaW5naWZ5KHUsbnVsbCwyKSksdT1ySih1LnJldmVyc2UoKSxyLmdldChlLmZyb21DbHVzdGVyKS5ub2RlKS5yZXZlcnNlKCksaD0hMCk7bGV0IHA9dS5maWx0ZXIoTD0+IU51bWJlci5pc05hTihMLnkpKTtwPUI5ZShwKTtsZXQgbT1EbztlLmN1cnZlJiYobT1lLmN1cnZlKTtsZXR7eDpnLHl9PVo1KGUpLHY9S2EoKS54KGcpLnkoeSkuY3VydmUobSkseDtzd2l0Y2goZS50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjp4PSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwiO2JyZWFrO2Nhc2UidGhpY2siOng9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztjYXNlImludmlzaWJsZSI6eD0iZWRnZS10aGlja25lc3MtaW52aXNpYmxlIjticmVhaztkZWZhdWx0Ong9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCJ9c3dpdGNoKGUucGF0dGVybil7Y2FzZSJzb2xpZCI6eCs9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjp4Kz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjp4Kz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrO2RlZmF1bHQ6eCs9IiBlZGdlLXBhdHRlcm4tc29saWQifWxldCBiLHc9dihwKSxfPUFycmF5LmlzQXJyYXkoZS5zdHlsZSk/ZS5zdHlsZTpbZS5zdHlsZV07aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBMPUtlLnN2Zyh0KTtPYmplY3QuYXNzaWduKFtdLHApO2xldCBDPUwucGF0aCh3LHtyb3VnaG5lc3M6LjMsc2VlZDpsfSk7eCs9IiB0cmFuc2l0aW9uIixiPXplKEMpLnNlbGVjdCgicGF0aCIpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3grKGUuY2xhc3Nlcz8iICIrZS5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLF8/Xy5yZWR1Y2UoKEksRCk9PkkrIjsiK0QsIiIpOiIiKTtsZXQgQT1iLmF0dHIoImQiKTtiLmF0dHIoImQiLEEpLHQubm9kZSgpLmFwcGVuZENoaWxkKGIubm9kZSgpKX1lbHNlIGI9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix3KS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiY2xhc3MiLCIgIit4KyhlLmNsYXNzZXM/IiAiK2UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIixfP18ucmVkdWNlKChMLEMpPT5MKyI7IitDLCIiKToiIik7bGV0IFQ9IiI7KGRlKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fGRlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihUPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLFQ9VC5yZXBsYWNlKC9cKC9nLCJcXCgiKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksWS5pbmZvKCJhcnJvd1R5cGVTdGFydCIsZS5hcnJvd1R5cGVTdGFydCksWS5pbmZvKCJhcnJvd1R5cGVFbmQiLGUuYXJyb3dUeXBlRW5kKSxlSihiLGUsVCxzLG4pO2xldCBFPXt9O3JldHVybiBoJiYoRS51cGRhdGVkUGF0aD11KSxFLm9yaWdpbmFsUGF0aD1lLnBvaW50cyxFfSwiaW5zZXJ0RWRnZSIpfSk7dmFyIEY5ZSx6OWUsRzllLCQ5ZSxWOWUsVTllLEg5ZSxXOWUsWTllLHE5ZSxYOWUsaXcsdUw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO0Y5ZT1vKCh0LGUscixuKT0+e2UuZm9yRWFjaChpPT57WDllW2ldKHQscixuKX0pfSwiaW5zZXJ0TWFya2VycyIpLHo5ZT1vKCh0LGUscik9PntZLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixyKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LCJleHRlbnNpb24iKSxHOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJjb21wb3NpdGlvbiIpLCQ5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sImFnZ3JlZ2F0aW9uIiksVjllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJkZXBlbmRlbmN5IiksVTllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSwibG9sbGlwb3AiKSxIOWU9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sInBvaW50IiksVzllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNpcmNsZSIpLFk5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jcm9zc0VuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLDEyKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jcm9zc1N0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwiY3Jvc3MiKSxxOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sImJhcmIiKSxYOWU9e2V4dGVuc2lvbjp6OWUsY29tcG9zaXRpb246RzllLGFnZ3JlZ2F0aW9uOiQ5ZSxkZXBlbmRlbmN5OlY5ZSxsb2xsaXBvcDpVOWUscG9pbnQ6SDllLGNpcmNsZTpXOWUsY3Jvc3M6WTllLGJhcmI6cTllfSxpdz1GOWV9KTthc3luYyBmdW5jdGlvbiBnbSh0LGUscil7bGV0IG4saTtlLnNoYXBlPT09InJlY3QiJiYoZS5yeCYmZS5yeT9lLnNoYXBlPSJyb3VuZGVkUmVjdCI6ZS5zaGFwZT0ic3F1YXJlUmVjdCIpO2xldCBhPWUuc2hhcGU/ejlbZS5zaGFwZV06dm9pZCAwO2lmKCFhKXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBzaGFwZTogJHtlLnNoYXBlfS4gUGxlYXNlIGNoZWNrIHlvdXIgc3ludGF4LmApO2lmKGUubGluayl7bGV0IHM7ci5jb25maWcuc2VjdXJpdHlMZXZlbD09PSJzYW5kYm94Ij9zPSJfdG9wIjplLmxpbmtUYXJnZXQmJihzPWUubGlua1RhcmdldHx8Il9ibGFuayIpLG49dC5pbnNlcnQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsZS5saW5rKS5hdHRyKCJ0YXJnZXQiLHM/P251bGwpLGk9YXdhaXQgYShuLGUscil9ZWxzZSBpPWF3YWl0IGEodCxlLHIpLG49aTtyZXR1cm4gZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGF3LnNldChlLmlkLG4pLGUuaGF2ZUNhbGxiYWNrJiZuLmF0dHIoImNsYXNzIixuLmF0dHIoImNsYXNzIikrIiBjbGlja2FibGUiKSxufXZhciBhdyxhSixzSixfdixzdz1NKCgpPT57InVzZSBzdHJpY3QiO2h0KCk7RzkoKTthdz1uZXcgTWFwO28oZ20sImluc2VydE5vZGUiKTthSj1vKCh0LGUpPT57YXcuc2V0KGUuaWQsdCl9LCJzZXROb2RlRWxlbSIpLHNKPW8oKCk9Pnthdy5jbGVhcigpfSwiY2xlYXIiKSxfdj1vKHQ9PntsZXQgZT1hdy5nZXQodC5pZCk7WS50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO2xldCByPTgsbj10LmRpZmZ8fDA7cmV0dXJuIHQuY2x1c3Rlck5vZGU/ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodC54K24tdC53aWR0aC8yKSsiLCAiKyh0LnktdC5oZWlnaHQvMi1yKSsiKSIpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIiksbn0sInBvc2l0aW9uTm9kZSIpfSk7dmFyIG9KLGxKPU0oKCk9PnsidXNlIHN0cmljdCI7VWEoKTtmcigpO2h0KCk7SzUoKTtjTCgpO3VMKCk7c3coKTtGdCgpO2hyKCk7b0o9e2NvbW1vbjpqZSxnZXRDb25maWc6U3IsaW5zZXJ0Q2x1c3RlcjptbSxpbnNlcnRFZGdlOm53LGluc2VydEVkZ2VMYWJlbDp0dyxpbnNlcnRNYXJrZXJzOml3LGluc2VydE5vZGU6Z20saW50ZXJwb2xhdGVUb0N1cnZlOlFfLGxhYmVsSGVscGVyOm90LGxvZzpZLHBvc2l0aW9uRWRnZUxhYmVsOnJ3fX0pO2Z1bmN0aW9uIEs5ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxabih0KSYmY2EodCk9PWo5ZX12YXIgajllLHJvLExkPU0oKCk9PnsidXNlIHN0cmljdCI7eHUoKTtNbygpO2o5ZT0iW29iamVjdCBTeW1ib2xdIjtvKEs5ZSwiaXNTeW1ib2wiKTtybz1LOWV9KTtmdW5jdGlvbiBROWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX12YXIgQXMsRGQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFE5ZSwiYXJyYXlNYXAiKTtBcz1ROWV9KTtmdW5jdGlvbiBoSih0KXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ7aWYoTXQodCkpcmV0dXJuIEFzKHQsaEopKyIiO2lmKHJvKHQpKXJldHVybiB1Sj91Si5jYWxsKHQpOiIiO3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tWjllPyItMCI6ZX12YXIgWjllLGNKLHVKLGZKLGRKPU0oKCk9PnsidXNlIHN0cmljdCI7Z2QoKTtEZCgpO1ZuKCk7TGQoKTtaOWU9MS8wLGNKPWVhP2VhLnByb3RvdHlwZTp2b2lkIDAsdUo9Y0o/Y0oudG9TdHJpbmc6dm9pZCAwO28oaEosImJhc2VUb1N0cmluZyIpO2ZKPWhKfSk7ZnVuY3Rpb24gZUxlKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJko5ZS50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfXZhciBKOWUscEosbUo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtKOWU9L1xzLztvKGVMZSwidHJpbW1lZEVuZEluZGV4Iik7cEo9ZUxlfSk7ZnVuY3Rpb24gckxlKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAscEoodCkrMSkucmVwbGFjZSh0TGUsIiIpfXZhciB0TGUsZ0oseUo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttSigpO3RMZT0vXlxzKy87byhyTGUsImJhc2VUcmltIik7Z0o9ckxlfSk7ZnVuY3Rpb24gb0xlKHQpe2lmKHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gdDtpZihybyh0KSlyZXR1cm4gdko7aWYoeW4odCkpe3ZhciBlPXR5cGVvZiB0LnZhbHVlT2Y9PSJmdW5jdGlvbiI/dC52YWx1ZU9mKCk6dDt0PXluKGUpP2UrIiI6ZX1pZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIHQ9PT0wP3Q6K3Q7dD1nSih0KTt2YXIgcj1pTGUudGVzdCh0KTtyZXR1cm4gcnx8YUxlLnRlc3QodCk/c0xlKHQuc2xpY2UoMikscj8yOjgpOm5MZS50ZXN0KHQpP3ZKOit0fXZhciB2SixuTGUsaUxlLGFMZSxzTGUseEosYko9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5SigpO1FzKCk7TGQoKTt2Sj1OYU4sbkxlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGlMZT0vXjBiWzAxXSskL2ksYUxlPS9eMG9bMC03XSskL2ksc0xlPXBhcnNlSW50O28ob0xlLCJ0b051bWJlciIpO3hKPW9MZX0pO2Z1bmN0aW9uIGNMZSh0KXtpZighdClyZXR1cm4gdD09PTA/dDowO2lmKHQ9eEoodCksdD09PXdKfHx0PT09LXdKKXt2YXIgZT10PDA/LTE6MTtyZXR1cm4gZSpsTGV9cmV0dXJuIHQ9PT10P3Q6MH12YXIgd0osbExlLHltLGhMPU0oKCk9PnsidXNlIHN0cmljdCI7YkooKTt3Sj0xLzAsbExlPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtvKGNMZSwidG9GaW5pdGUiKTt5bT1jTGV9KTtmdW5jdGlvbiB1TGUodCl7dmFyIGU9eW0odCkscj1lJTE7cmV0dXJuIGU9PT1lP3I/ZS1yOmU6MH12YXIgdmMsdm09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtoTCgpO28odUxlLCJ0b0ludGVnZXIiKTt2Yz11TGV9KTt2YXIgaExlLG93LFRKPU0oKCk9PnsidXNlIHN0cmljdCI7Q2goKTtObygpO2hMZT12cyhhaSwiV2Vha01hcCIpLG93PWhMZX0pO2Z1bmN0aW9uIGZMZSgpe312YXIgSm4sZkw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZMZSwibm9vcCIpO0puPWZMZX0pO2Z1bmN0aW9uIGRMZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aDsrK3I8biYmZSh0W3JdLHIsdCkhPT0hMTspO3JldHVybiB0fXZhciBsdyxkTD1NKCgpPT57InVzZSBzdHJpY3QiO28oZExlLCJhcnJheUVhY2giKTtsdz1kTGV9KTtmdW5jdGlvbiBwTGUodCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9cisobj8xOi0xKTtuP2EtLTorK2E8aTspaWYoZSh0W2FdLGEsdCkpcmV0dXJuIGE7cmV0dXJuLTF9dmFyIGN3LHBMPU0oKCk9PnsidXNlIHN0cmljdCI7byhwTGUsImJhc2VGaW5kSW5kZXgiKTtjdz1wTGV9KTtmdW5jdGlvbiBtTGUodCl7cmV0dXJuIHQhPT10fXZhciBrSixFSj1NKCgpPT57InVzZSBzdHJpY3QiO28obUxlLCJiYXNlSXNOYU4iKTtrSj1tTGV9KTtmdW5jdGlvbiBnTGUodCxlLHIpe2Zvcih2YXIgbj1yLTEsaT10Lmxlbmd0aDsrK248aTspaWYodFtuXT09PWUpcmV0dXJuIG47cmV0dXJuLTF9dmFyIFNKLENKPU0oKCk9PnsidXNlIHN0cmljdCI7byhnTGUsInN0cmljdEluZGV4T2YiKTtTSj1nTGV9KTtmdW5jdGlvbiB5TGUodCxlLHIpe3JldHVybiBlPT09ZT9TSih0LGUscik6Y3codCxrSixyKX12YXIgeG0sdXc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwTCgpO0VKKCk7Q0ooKTtvKHlMZSwiYmFzZUluZGV4T2YiKTt4bT15TGV9KTtmdW5jdGlvbiB2TGUodCxlKXt2YXIgcj10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuISFyJiZ4bSh0LGUsMCk+LTF9dmFyIGh3LG1MPU0oKCk9PnsidXNlIHN0cmljdCI7dXcoKTtvKHZMZSwiYXJyYXlJbmNsdWRlcyIpO2h3PXZMZX0pO3ZhciB4TGUsQUosX0o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGXygpO3hMZT1uNShPYmplY3Qua2V5cyxPYmplY3QpLEFKPXhMZX0pO2Z1bmN0aW9uIFRMZSh0KXtpZighZmModCkpcmV0dXJuIEFKKHQpO3ZhciBlPVtdO2Zvcih2YXIgciBpbiBPYmplY3QodCkpd0xlLmNhbGwodCxyKSYmciE9ImNvbnN0cnVjdG9yIiYmZS5wdXNoKHIpO3JldHVybiBlfXZhciBiTGUsd0xlLGJtLGZ3PU0oKCk9PnsidXNlIHN0cmljdCI7S3AoKTtfSigpO2JMZT1PYmplY3QucHJvdG90eXBlLHdMZT1iTGUuaGFzT3duUHJvcGVydHk7byhUTGUsImJhc2VLZXlzIik7Ym09VExlfSk7ZnVuY3Rpb24ga0xlKHQpe3JldHVybiBzaSh0KT9sNSh0KTpibSh0KX12YXIgenIseGM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVXygpO2Z3KCk7SW8oKTtvKGtMZSwia2V5cyIpO3pyPWtMZX0pO3ZhciBFTGUsU0xlLENMZSxoYSxMSj1NKCgpPT57InVzZSBzdHJpY3QiO2VtKCk7d2QoKTtxXygpO0lvKCk7S3AoKTt4YygpO0VMZT1PYmplY3QucHJvdG90eXBlLFNMZT1FTGUuaGFzT3duUHJvcGVydHksQ0xlPWg1KGZ1bmN0aW9uKHQsZSl7aWYoZmMoZSl8fHNpKGUpKXtCbyhlLHpyKGUpLHQpO3JldHVybn1mb3IodmFyIHIgaW4gZSlTTGUuY2FsbChlLHIpJiZkYyh0LHIsZVtyXSl9KSxoYT1DTGV9KTtmdW5jdGlvbiBMTGUodCxlKXtpZihNdCh0KSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fHQ9PW51bGx8fHJvKHQpPyEwOl9MZS50ZXN0KHQpfHwhQUxlLnRlc3QodCl8fGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfXZhciBBTGUsX0xlLHdtLGR3PU0oKCk9PnsidXNlIHN0cmljdCI7Vm4oKTtMZCgpO0FMZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxfTGU9L15cdyokLztvKExMZSwiaXNLZXkiKTt3bT1MTGV9KTtmdW5jdGlvbiBOTGUodCl7dmFyIGU9VnAodCxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09RExlJiZyLmNsZWFyKCksbn0pLHI9ZS5jYWNoZTtyZXR1cm4gZX12YXIgRExlLERKLE5KPU0oKCk9PnsidXNlIHN0cmljdCI7Tl8oKTtETGU9NTAwO28oTkxlLCJtZW1vaXplQ2FwcGVkIik7REo9TkxlfSk7dmFyIFJMZSxNTGUsSUxlLFJKLE1KPU0oKCk9PnsidXNlIHN0cmljdCI7TkooKTtSTGU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csTUxlPS9cXChcXCk/L2csSUxlPURKKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0LmNoYXJDb2RlQXQoMCk9PT00NiYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoUkxlLGZ1bmN0aW9uKHIsbixpLGEpe2UucHVzaChpP2EucmVwbGFjZShNTGUsIiQxIik6bnx8cil9KSxlfSksUko9SUxlfSk7ZnVuY3Rpb24gT0xlKHQpe3JldHVybiB0PT1udWxsPyIiOmZKKHQpfXZhciBwdyxnTD1NKCgpPT57InVzZSBzdHJpY3QiO2RKKCk7byhPTGUsInRvU3RyaW5nIik7cHc9T0xlfSk7ZnVuY3Rpb24gUExlKHQsZSl7cmV0dXJuIE10KHQpP3Q6d20odCxlKT9bdF06UkoocHcodCkpfXZhciBVaCxMdj1NKCgpPT57InVzZSBzdHJpY3QiO1ZuKCk7ZHcoKTtNSigpO2dMKCk7byhQTGUsImNhc3RQYXRoIik7VWg9UExlfSk7ZnVuY3Rpb24gRkxlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8cm8odCkpcmV0dXJuIHQ7dmFyIGU9dCsiIjtyZXR1cm4gZT09IjAiJiYxL3Q9PS1CTGU/Ii0wIjplfXZhciBCTGUsYmMsVG09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMZCgpO0JMZT0xLzA7byhGTGUsInRvS2V5Iik7YmM9RkxlfSk7ZnVuY3Rpb24gekxlKHQsZSl7ZT1VaChlLHQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7dCE9bnVsbCYmcjxuOyl0PXRbYmMoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9dmFyIEhoLER2PU0oKCk9PnsidXNlIHN0cmljdCI7THYoKTtUbSgpO28oekxlLCJiYXNlR2V0Iik7SGg9ekxlfSk7ZnVuY3Rpb24gR0xlKHQsZSxyKXt2YXIgbj10PT1udWxsP3ZvaWQgMDpIaCh0LGUpO3JldHVybiBuPT09dm9pZCAwP3I6bn12YXIgSUosT0o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEdigpO28oR0xlLCJnZXQiKTtJSj1HTGV9KTtmdW5jdGlvbiAkTGUodCxlKXtmb3IodmFyIHI9LTEsbj1lLmxlbmd0aCxpPXQubGVuZ3RoOysrcjxuOyl0W2krcl09ZVtyXTtyZXR1cm4gdH12YXIga20sbXc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKCRMZSwiYXJyYXlQdXNoIik7a209JExlfSk7ZnVuY3Rpb24gVkxlKHQpe3JldHVybiBNdCh0KXx8QWwodCl8fCEhKFBKJiZ0JiZ0W1BKXSl9dmFyIFBKLEJKLEZKPU0oKCk9PnsidXNlIHN0cmljdCI7Z2QoKTtRcCgpO1ZuKCk7UEo9ZWE/ZWEuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtvKFZMZSwiaXNGbGF0dGVuYWJsZSIpO0JKPVZMZX0pO2Z1bmN0aW9uIHpKKHQsZSxyLG4saSl7dmFyIGE9LTEscz10Lmxlbmd0aDtmb3Iocnx8KHI9QkopLGl8fChpPVtdKTsrK2E8czspe3ZhciBsPXRbYV07ZT4wJiZyKGwpP2U+MT96SihsLGUtMSxyLG4saSk6a20oaSxsKTpufHwoaVtpLmxlbmd0aF09bCl9cmV0dXJuIGl9dmFyIHdjLEVtPU0oKCk9PnsidXNlIHN0cmljdCI7bXcoKTtGSigpO28oekosImJhc2VGbGF0dGVuIik7d2M9ekp9KTtmdW5jdGlvbiBVTGUodCl7dmFyIGU9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBlP3djKHQsMSk6W119dmFyIFdyLGd3PU0oKCk9PnsidXNlIHN0cmljdCI7RW0oKTtvKFVMZSwiZmxhdHRlbiIpO1dyPVVMZX0pO2Z1bmN0aW9uIEhMZSh0KXtyZXR1cm4gdTUoYzUodCx2b2lkIDAsV3IpLHQrIiIpfXZhciBHSiwkSj1NKCgpPT57InVzZSBzdHJpY3QiO2d3KCk7SF8oKTtZXygpO28oSExlLCJmbGF0UmVzdCIpO0dKPUhMZX0pO2Z1bmN0aW9uIFdMZSh0LGUscil7dmFyIG49LTEsaT10Lmxlbmd0aDtlPDAmJihlPS1lPmk/MDppK2UpLHI9cj5pP2k6cixyPDAmJihyKz1pKSxpPWU+cj8wOnItZT4+PjAsZT4+Pj0wO2Zvcih2YXIgYT1BcnJheShpKTsrK248aTspYVtuXT10W24rZV07cmV0dXJuIGF9dmFyIHl3LHlMPU0oKCk9PnsidXNlIHN0cmljdCI7byhXTGUsImJhc2VTbGljZSIpO3l3PVdMZX0pO2Z1bmN0aW9uIGVEZSh0KXtyZXR1cm4gSkxlLnRlc3QodCl9dmFyIFlMZSxxTGUsWExlLGpMZSxLTGUsUUxlLFpMZSxKTGUsVkosVUo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZTGU9IlxcdWQ4MDAtXFx1ZGZmZiIscUxlPSJcXHUwMzAwLVxcdTAzNmYiLFhMZT0iXFx1ZmUyMC1cXHVmZTJmIixqTGU9IlxcdTIwZDAtXFx1MjBmZiIsS0xlPXFMZStYTGUrakxlLFFMZT0iXFx1ZmUwZVxcdWZlMGYiLFpMZT0iXFx1MjAwZCIsSkxlPVJlZ0V4cCgiWyIrWkxlK1lMZStLTGUrUUxlKyJdIik7byhlRGUsImhhc1VuaWNvZGUiKTtWSj1lRGV9KTtmdW5jdGlvbiB0RGUodCxlLHIsbil7dmFyIGk9LTEsYT10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKG4mJmEmJihyPXRbKytpXSk7KytpPGE7KXI9ZShyLHRbaV0saSx0KTtyZXR1cm4gcn12YXIgSEosV0o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHREZSwiYXJyYXlSZWR1Y2UiKTtISj10RGV9KTtmdW5jdGlvbiByRGUodCxlKXtyZXR1cm4gdCYmQm8oZSx6cihlKSx0KX12YXIgWUoscUo9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3ZCgpO3hjKCk7byhyRGUsImJhc2VBc3NpZ24iKTtZSj1yRGV9KTtmdW5jdGlvbiBuRGUodCxlKXtyZXR1cm4gdCYmQm8oZSx4cyhlKSx0KX12YXIgWEosako9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3ZCgpO01oKCk7byhuRGUsImJhc2VBc3NpZ25JbiIpO1hKPW5EZX0pO2Z1bmN0aW9uIGlEZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aCxpPTAsYT1bXTsrK3I8bjspe3ZhciBzPXRbcl07ZShzLHIsdCkmJihhW2krK109cyl9cmV0dXJuIGF9dmFyIFNtLHZ3PU0oKCk9PnsidXNlIHN0cmljdCI7byhpRGUsImFycmF5RmlsdGVyIik7U209aURlfSk7ZnVuY3Rpb24gYURlKCl7cmV0dXJuW119dmFyIHh3LHZMPU0oKCk9PnsidXNlIHN0cmljdCI7byhhRGUsInN0dWJBcnJheSIpO3h3PWFEZX0pO3ZhciBzRGUsb0RlLEtKLGxEZSxDbSxidz1NKCgpPT57InVzZSBzdHJpY3QiO3Z3KCk7dkwoKTtzRGU9T2JqZWN0LnByb3RvdHlwZSxvRGU9c0RlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEtKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsbERlPUtKP2Z1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP1tdOih0PU9iamVjdCh0KSxTbShLSih0KSxmdW5jdGlvbihlKXtyZXR1cm4gb0RlLmNhbGwodCxlKX0pKX06eHcsQ209bERlfSk7ZnVuY3Rpb24gY0RlKHQsZSl7cmV0dXJuIEJvKHQsQ20odCksZSl9dmFyIFFKLFpKPU0oKCk9PnsidXNlIHN0cmljdCI7d2QoKTtidygpO28oY0RlLCJjb3B5U3ltYm9scyIpO1FKPWNEZX0pO3ZhciB1RGUsaERlLHd3LHhMPU0oKCk9PnsidXNlIHN0cmljdCI7bXcoKTtpNSgpO2J3KCk7dkwoKTt1RGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxoRGU9dURlP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylrbShlLENtKHQpKSx0PWpwKHQpO3JldHVybiBlfTp4dyx3dz1oRGV9KTtmdW5jdGlvbiBmRGUodCxlKXtyZXR1cm4gQm8odCx3dyh0KSxlKX12YXIgSkosZWVlPU0oKCk9PnsidXNlIHN0cmljdCI7d2QoKTt4TCgpO28oZkRlLCJjb3B5U3ltYm9sc0luIik7Sko9ZkRlfSk7ZnVuY3Rpb24gZERlKHQsZSxyKXt2YXIgbj1lKHQpO3JldHVybiBNdCh0KT9uOmttKG4scih0KSl9dmFyIFR3LGJMPU0oKCk9PnsidXNlIHN0cmljdCI7bXcoKTtWbigpO28oZERlLCJiYXNlR2V0QWxsS2V5cyIpO1R3PWREZX0pO2Z1bmN0aW9uIHBEZSh0KXtyZXR1cm4gVHcodCx6cixDbSl9dmFyIE52LHdMPU0oKCk9PnsidXNlIHN0cmljdCI7YkwoKTtidygpO3hjKCk7byhwRGUsImdldEFsbEtleXMiKTtOdj1wRGV9KTtmdW5jdGlvbiBtRGUodCl7cmV0dXJuIFR3KHQseHMsd3cpfXZhciBrdyxUTD1NKCgpPT57InVzZSBzdHJpY3QiO2JMKCk7eEwoKTtNaCgpO28obURlLCJnZXRBbGxLZXlzSW4iKTtrdz1tRGV9KTt2YXIgZ0RlLEV3LHRlZT1NKCgpPT57InVzZSBzdHJpY3QiO0NoKCk7Tm8oKTtnRGU9dnMoYWksIkRhdGFWaWV3IiksRXc9Z0RlfSk7dmFyIHlEZSxTdyxyZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDaCgpO05vKCk7eURlPXZzKGFpLCJQcm9taXNlIiksU3c9eURlfSk7dmFyIHZEZSxXaCxrTD1NKCgpPT57InVzZSBzdHJpY3QiO0NoKCk7Tm8oKTt2RGU9dnMoYWksIlNldCIpLFdoPXZEZX0pO3ZhciBuZWUseERlLGllZSxhZWUsc2VlLG9lZSxiRGUsd0RlLFREZSxrRGUsRURlLE5kLG5vLFJkPU0oKCk9PnsidXNlIHN0cmljdCI7dGVlKCk7SzMoKTtyZWUoKTtrTCgpO1RKKCk7eHUoKTtfXygpO25lZT0iW29iamVjdCBNYXBdIix4RGU9IltvYmplY3QgT2JqZWN0XSIsaWVlPSJbb2JqZWN0IFByb21pc2VdIixhZWU9IltvYmplY3QgU2V0XSIsc2VlPSJbb2JqZWN0IFdlYWtNYXBdIixvZWU9IltvYmplY3QgRGF0YVZpZXddIixiRGU9YnUoRXcpLHdEZT1idShMaCksVERlPWJ1KFN3KSxrRGU9YnUoV2gpLEVEZT1idShvdyksTmQ9Y2E7KEV3JiZOZChuZXcgRXcobmV3IEFycmF5QnVmZmVyKDEpKSkhPW9lZXx8TGgmJk5kKG5ldyBMaCkhPW5lZXx8U3cmJk5kKFN3LnJlc29sdmUoKSkhPWllZXx8V2gmJk5kKG5ldyBXaCkhPWFlZXx8b3cmJk5kKG5ldyBvdykhPXNlZSkmJihOZD1vKGZ1bmN0aW9uKHQpe3ZhciBlPWNhKHQpLHI9ZT09eERlP3QuY29uc3RydWN0b3I6dm9pZCAwLG49cj9idShyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIGJEZTpyZXR1cm4gb2VlO2Nhc2Ugd0RlOnJldHVybiBuZWU7Y2FzZSBURGU6cmV0dXJuIGllZTtjYXNlIGtEZTpyZXR1cm4gYWVlO2Nhc2UgRURlOnJldHVybiBzZWV9cmV0dXJuIGV9LCJnZXRUYWciKSk7bm89TmR9KTtmdW5jdGlvbiBBRGUodCl7dmFyIGU9dC5sZW5ndGgscj1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmdHlwZW9mIHRbMF09PSJzdHJpbmciJiZDRGUuY2FsbCh0LCJpbmRleCIpJiYoci5pbmRleD10LmluZGV4LHIuaW5wdXQ9dC5pbnB1dCkscn12YXIgU0RlLENEZSxsZWUsY2VlPU0oKCk9PnsidXNlIHN0cmljdCI7U0RlPU9iamVjdC5wcm90b3R5cGUsQ0RlPVNEZS5oYXNPd25Qcm9wZXJ0eTtvKEFEZSwiaW5pdENsb25lQXJyYXkiKTtsZWU9QURlfSk7ZnVuY3Rpb24gX0RlKHQsZSl7dmFyIHI9ZT9YcCh0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKHIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9dmFyIHVlZSxoZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtlNSgpO28oX0RlLCJjbG9uZURhdGFWaWV3Iik7dWVlPV9EZX0pO2Z1bmN0aW9uIEREZSh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxMRGUuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9dmFyIExEZSxmZWUsZGVlPU0oKCk9PnsidXNlIHN0cmljdCI7TERlPS9cdyokLztvKEREZSwiY2xvbmVSZWdFeHAiKTtmZWU9RERlfSk7ZnVuY3Rpb24gTkRlKHQpe3JldHVybiBtZWU/T2JqZWN0KG1lZS5jYWxsKHQpKTp7fX12YXIgcGVlLG1lZSxnZWUseWVlPU0oKCk9PnsidXNlIHN0cmljdCI7Z2QoKTtwZWU9ZWE/ZWEucHJvdG90eXBlOnZvaWQgMCxtZWU9cGVlP3BlZS52YWx1ZU9mOnZvaWQgMDtvKE5EZSwiY2xvbmVTeW1ib2wiKTtnZWU9TkRlfSk7ZnVuY3Rpb24gUURlKHQsZSxyKXt2YXIgbj10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIEdEZTpyZXR1cm4gWHAodCk7Y2FzZSBSRGU6Y2FzZSBNRGU6cmV0dXJuIG5ldyBuKCt0KTtjYXNlICREZTpyZXR1cm4gdWVlKHQscik7Y2FzZSBWRGU6Y2FzZSBVRGU6Y2FzZSBIRGU6Y2FzZSBXRGU6Y2FzZSBZRGU6Y2FzZSBxRGU6Y2FzZSBYRGU6Y2FzZSBqRGU6Y2FzZSBLRGU6cmV0dXJuIHQ1KHQscik7Y2FzZSBJRGU6cmV0dXJuIG5ldyBuO2Nhc2UgT0RlOmNhc2UgRkRlOnJldHVybiBuZXcgbih0KTtjYXNlIFBEZTpyZXR1cm4gZmVlKHQpO2Nhc2UgQkRlOnJldHVybiBuZXcgbjtjYXNlIHpEZTpyZXR1cm4gZ2VlKHQpfX12YXIgUkRlLE1EZSxJRGUsT0RlLFBEZSxCRGUsRkRlLHpEZSxHRGUsJERlLFZEZSxVRGUsSERlLFdEZSxZRGUscURlLFhEZSxqRGUsS0RlLHZlZSx4ZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtlNSgpO2hlZSgpO2RlZSgpO3llZSgpO1BfKCk7UkRlPSJbb2JqZWN0IEJvb2xlYW5dIixNRGU9IltvYmplY3QgRGF0ZV0iLElEZT0iW29iamVjdCBNYXBdIixPRGU9IltvYmplY3QgTnVtYmVyXSIsUERlPSJbb2JqZWN0IFJlZ0V4cF0iLEJEZT0iW29iamVjdCBTZXRdIixGRGU9IltvYmplY3QgU3RyaW5nXSIsekRlPSJbb2JqZWN0IFN5bWJvbF0iLEdEZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLCREZT0iW29iamVjdCBEYXRhVmlld10iLFZEZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixVRGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsSERlPSJbb2JqZWN0IEludDhBcnJheV0iLFdEZT0iW29iamVjdCBJbnQxNkFycmF5XSIsWURlPSJbb2JqZWN0IEludDMyQXJyYXldIixxRGU9IltvYmplY3QgVWludDhBcnJheV0iLFhEZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGpEZT0iW29iamVjdCBVaW50MTZBcnJheV0iLEtEZT0iW29iamVjdCBVaW50MzJBcnJheV0iO28oUURlLCJpbml0Q2xvbmVCeVRhZyIpO3ZlZT1RRGV9KTtmdW5jdGlvbiBKRGUodCl7cmV0dXJuIFpuKHQpJiZubyh0KT09WkRlfXZhciBaRGUsYmVlLHdlZT1NKCgpPT57InVzZSBzdHJpY3QiO1JkKCk7TW8oKTtaRGU9IltvYmplY3QgTWFwXSI7byhKRGUsImJhc2VJc01hcCIpO2JlZT1KRGV9KTt2YXIgVGVlLGVOZSxrZWUsRWVlPU0oKCk9PnsidXNlIHN0cmljdCI7d2VlKCk7YmQoKTtudigpO1RlZT1QbyYmUG8uaXNNYXAsZU5lPVRlZT9PbyhUZWUpOmJlZSxrZWU9ZU5lfSk7ZnVuY3Rpb24gck5lKHQpe3JldHVybiBabih0KSYmbm8odCk9PXROZX12YXIgdE5lLFNlZSxDZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSZCgpO01vKCk7dE5lPSJbb2JqZWN0IFNldF0iO28ock5lLCJiYXNlSXNTZXQiKTtTZWU9ck5lfSk7dmFyIEFlZSxuTmUsX2VlLExlZT1NKCgpPT57InVzZSBzdHJpY3QiO0NlZSgpO2JkKCk7bnYoKTtBZWU9UG8mJlBvLmlzU2V0LG5OZT1BZWU/T28oQWVlKTpTZWUsX2VlPW5OZX0pO2Z1bmN0aW9uIEN3KHQsZSxyLG4saSxhKXt2YXIgcyxsPWUmaU5lLHU9ZSZhTmUsaD1lJnNOZTtpZihyJiYocz1pP3IodCxuLGksYSk6cih0KSkscyE9PXZvaWQgMClyZXR1cm4gcztpZigheW4odCkpcmV0dXJuIHQ7dmFyIGY9TXQodCk7aWYoZil7aWYocz1sZWUodCksIWwpcmV0dXJuIHI1KHQscyl9ZWxzZXt2YXIgZD1ubyh0KSxwPWQ9PU5lZXx8ZD09aE5lO2lmKF9sKHQpKXJldHVybiBKMyh0LGwpO2lmKGQ9PVJlZXx8ZD09RGVlfHxwJiYhaSl7aWYocz11fHxwP3t9OmE1KHQpLCFsKXJldHVybiB1P0pKKHQsWEoocyx0KSk6UUoodCxZSihzLHQpKX1lbHNle2lmKCFTbltkXSlyZXR1cm4gaT90Ont9O3M9dmVlKHQsZCxsKX19YXx8KGE9bmV3IHVjKTt2YXIgbT1hLmdldCh0KTtpZihtKXJldHVybiBtO2Euc2V0KHQscyksX2VlKHQpP3QuZm9yRWFjaChmdW5jdGlvbih2KXtzLmFkZChDdyh2LGUscix2LHQsYSkpfSk6a2VlKHQpJiZ0LmZvckVhY2goZnVuY3Rpb24odix4KXtzLnNldCh4LEN3KHYsZSxyLHgsdCxhKSl9KTt2YXIgZz1oP3U/a3c6TnY6dT94czp6cix5PWY/dm9pZCAwOmcodCk7cmV0dXJuIGx3KHl8fHQsZnVuY3Rpb24odix4KXt5JiYoeD12LHY9dFt4XSksZGMocyx4LEN3KHYsZSxyLHgsdCxhKSl9KSxzfXZhciBpTmUsYU5lLHNOZSxEZWUsb05lLGxOZSxjTmUsdU5lLE5lZSxoTmUsZk5lLGROZSxSZWUscE5lLG1OZSxnTmUseU5lLHZOZSx4TmUsYk5lLHdOZSxUTmUsa05lLEVOZSxTTmUsQ05lLEFOZSxfTmUsTE5lLFNuLEF3LEVMPU0oKCk9PnsidXNlIHN0cmljdCI7ZXYoKTtkTCgpO2VtKCk7cUooKTtqSigpO0lfKCk7Ql8oKTtaSigpO2VlZSgpO3dMKCk7VEwoKTtSZCgpO2NlZSgpO3hlZSgpO3pfKCk7Vm4oKTtKcCgpO0VlZSgpO1FzKCk7TGVlKCk7eGMoKTtNaCgpO2lOZT0xLGFOZT0yLHNOZT00LERlZT0iW29iamVjdCBBcmd1bWVudHNdIixvTmU9IltvYmplY3QgQXJyYXldIixsTmU9IltvYmplY3QgQm9vbGVhbl0iLGNOZT0iW29iamVjdCBEYXRlXSIsdU5lPSJbb2JqZWN0IEVycm9yXSIsTmVlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsaE5lPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsZk5lPSJbb2JqZWN0IE1hcF0iLGROZT0iW29iamVjdCBOdW1iZXJdIixSZWU9IltvYmplY3QgT2JqZWN0XSIscE5lPSJbb2JqZWN0IFJlZ0V4cF0iLG1OZT0iW29iamVjdCBTZXRdIixnTmU9IltvYmplY3QgU3RyaW5nXSIseU5lPSJbb2JqZWN0IFN5bWJvbF0iLHZOZT0iW29iamVjdCBXZWFrTWFwXSIseE5lPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsYk5lPSJbb2JqZWN0IERhdGFWaWV3XSIsd05lPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFROZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixrTmU9IltvYmplY3QgSW50OEFycmF5XSIsRU5lPSJbb2JqZWN0IEludDE2QXJyYXldIixTTmU9IltvYmplY3QgSW50MzJBcnJheV0iLENOZT0iW29iamVjdCBVaW50OEFycmF5XSIsQU5lPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsX05lPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsTE5lPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsU249e307U25bRGVlXT1TbltvTmVdPVNuW3hOZV09U25bYk5lXT1TbltsTmVdPVNuW2NOZV09U25bd05lXT1TbltUTmVdPVNuW2tOZV09U25bRU5lXT1TbltTTmVdPVNuW2ZOZV09U25bZE5lXT1TbltSZWVdPVNuW3BOZV09U25bbU5lXT1TbltnTmVdPVNuW3lOZV09U25bQ05lXT1TbltBTmVdPVNuW19OZV09U25bTE5lXT0hMDtTblt1TmVdPVNuW05lZV09U25bdk5lXT0hMTtvKEN3LCJiYXNlQ2xvbmUiKTtBdz1Dd30pO2Z1bmN0aW9uIE5OZSh0KXtyZXR1cm4gQXcodCxETmUpfXZhciBETmUscm4sU0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFTCgpO0ROZT00O28oTk5lLCJjbG9uZSIpO3JuPU5OZX0pO2Z1bmN0aW9uIElOZSh0KXtyZXR1cm4gQXcodCxSTmV8TU5lKX12YXIgUk5lLE1OZSxDTCxNZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFTCgpO1JOZT0xLE1OZT00O28oSU5lLCJjbG9uZURlZXAiKTtDTD1JTmV9KTtmdW5jdGlvbiBPTmUodCl7Zm9yKHZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoLG49MCxpPVtdOysrZTxyOyl7dmFyIGE9dFtlXTthJiYoaVtuKytdPWEpfXJldHVybiBpfXZhciBUYyxJZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKE9OZSwiY29tcGFjdCIpO1RjPU9OZX0pO2Z1bmN0aW9uIEJOZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCxQTmUpLHRoaXN9dmFyIFBOZSxPZWUsUGVlPU0oKCk9PnsidXNlIHN0cmljdCI7UE5lPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtvKEJOZSwic2V0Q2FjaGVBZGQiKTtPZWU9Qk5lfSk7ZnVuY3Rpb24gRk5lKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX12YXIgQmVlLEZlZT1NKCgpPT57InVzZSBzdHJpY3QiO28oRk5lLCJzZXRDYWNoZUhhcyIpO0JlZT1GTmV9KTtmdW5jdGlvbiBfdyh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgdmQ7KytlPHI7KXRoaXMuYWRkKHRbZV0pfXZhciBBbSxMdz1NKCgpPT57InVzZSBzdHJpY3QiO1EzKCk7UGVlKCk7RmVlKCk7byhfdywiU2V0Q2FjaGUiKTtfdy5wcm90b3R5cGUuYWRkPV93LnByb3RvdHlwZS5wdXNoPU9lZTtfdy5wcm90b3R5cGUuaGFzPUJlZTtBbT1fd30pO2Z1bmN0aW9uIHpOZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aDsrK3I8bjspaWYoZSh0W3JdLHIsdCkpcmV0dXJuITA7cmV0dXJuITF9dmFyIER3LEFMPU0oKCk9PnsidXNlIHN0cmljdCI7byh6TmUsImFycmF5U29tZSIpO0R3PXpOZX0pO2Z1bmN0aW9uIEdOZSh0LGUpe3JldHVybiB0LmhhcyhlKX12YXIgX20sTnc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEdOZSwiY2FjaGVIYXMiKTtfbT1HTmV9KTtmdW5jdGlvbiBVTmUodCxlLHIsbixpLGEpe3ZhciBzPXImJE5lLGw9dC5sZW5ndGgsdT1lLmxlbmd0aDtpZihsIT11JiYhKHMmJnU+bCkpcmV0dXJuITE7dmFyIGg9YS5nZXQodCksZj1hLmdldChlKTtpZihoJiZmKXJldHVybiBoPT1lJiZmPT10O3ZhciBkPS0xLHA9ITAsbT1yJlZOZT9uZXcgQW06dm9pZCAwO2ZvcihhLnNldCh0LGUpLGEuc2V0KGUsdCk7KytkPGw7KXt2YXIgZz10W2RdLHk9ZVtkXTtpZihuKXZhciB2PXM/bih5LGcsZCxlLHQsYSk6bihnLHksZCx0LGUsYSk7aWYodiE9PXZvaWQgMCl7aWYodiljb250aW51ZTtwPSExO2JyZWFrfWlmKG0pe2lmKCFEdyhlLGZ1bmN0aW9uKHgsYil7aWYoIV9tKG0sYikmJihnPT09eHx8aShnLHgscixuLGEpKSlyZXR1cm4gbS5wdXNoKGIpfSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoIShnPT09eXx8aShnLHkscixuLGEpKSl7cD0hMTticmVha319cmV0dXJuIGEuZGVsZXRlKHQpLGEuZGVsZXRlKGUpLHB9dmFyICROZSxWTmUsUncsX0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMdygpO0FMKCk7TncoKTskTmU9MSxWTmU9MjtvKFVOZSwiZXF1YWxBcnJheXMiKTtSdz1VTmV9KTtmdW5jdGlvbiBITmUodCl7dmFyIGU9LTEscj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrZV09W2ksbl19KSxyfXZhciB6ZWUsR2VlPU0oKCk9PnsidXNlIHN0cmljdCI7byhITmUsIm1hcFRvQXJyYXkiKTt6ZWU9SE5lfSk7ZnVuY3Rpb24gV05lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JbKytlXT1ufSkscn12YXIgTG0sTXc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFdOZSwic2V0VG9BcnJheSIpO0xtPVdOZX0pO2Z1bmN0aW9uIGFSZSh0LGUscixuLGksYSxzKXtzd2l0Y2gocil7Y2FzZSBpUmU6aWYodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fHQuYnl0ZU9mZnNldCE9ZS5ieXRlT2Zmc2V0KXJldHVybiExO3Q9dC5idWZmZXIsZT1lLmJ1ZmZlcjtjYXNlIG5SZTpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhYShuZXcgcXAodCksbmV3IHFwKGUpKSk7Y2FzZSBYTmU6Y2FzZSBqTmU6Y2FzZSBaTmU6cmV0dXJuIFJvKCt0LCtlKTtjYXNlIEtOZTpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UgSk5lOmNhc2UgdFJlOnJldHVybiB0PT1lKyIiO2Nhc2UgUU5lOnZhciBsPXplZTtjYXNlIGVSZTp2YXIgdT1uJllOZTtpZihsfHwobD1MbSksdC5zaXplIT1lLnNpemUmJiF1KXJldHVybiExO3ZhciBoPXMuZ2V0KHQpO2lmKGgpcmV0dXJuIGg9PWU7bnw9cU5lLHMuc2V0KHQsZSk7dmFyIGY9UncobCh0KSxsKGUpLG4saSxhLHMpO3JldHVybiBzLmRlbGV0ZSh0KSxmO2Nhc2UgclJlOmlmKExMKXJldHVybiBMTC5jYWxsKHQpPT1MTC5jYWxsKGUpfXJldHVybiExfXZhciBZTmUscU5lLFhOZSxqTmUsS05lLFFOZSxaTmUsSk5lLGVSZSx0UmUsclJlLG5SZSxpUmUsJGVlLExMLFZlZSxVZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtnZCgpO09fKCk7eWQoKTtfTCgpO0dlZSgpO013KCk7WU5lPTEscU5lPTIsWE5lPSJbb2JqZWN0IEJvb2xlYW5dIixqTmU9IltvYmplY3QgRGF0ZV0iLEtOZT0iW29iamVjdCBFcnJvcl0iLFFOZT0iW29iamVjdCBNYXBdIixaTmU9IltvYmplY3QgTnVtYmVyXSIsSk5lPSJbb2JqZWN0IFJlZ0V4cF0iLGVSZT0iW29iamVjdCBTZXRdIix0UmU9IltvYmplY3QgU3RyaW5nXSIsclJlPSJbb2JqZWN0IFN5bWJvbF0iLG5SZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGlSZT0iW29iamVjdCBEYXRhVmlld10iLCRlZT1lYT9lYS5wcm90b3R5cGU6dm9pZCAwLExMPSRlZT8kZWUudmFsdWVPZjp2b2lkIDA7byhhUmUsImVxdWFsQnlUYWciKTtWZWU9YVJlfSk7ZnVuY3Rpb24gY1JlKHQsZSxyLG4saSxhKXt2YXIgcz1yJnNSZSxsPU52KHQpLHU9bC5sZW5ndGgsaD1OdihlKSxmPWgubGVuZ3RoO2lmKHUhPWYmJiFzKXJldHVybiExO2Zvcih2YXIgZD11O2QtLTspe3ZhciBwPWxbZF07aWYoIShzP3AgaW4gZTpsUmUuY2FsbChlLHApKSlyZXR1cm4hMX12YXIgbT1hLmdldCh0KSxnPWEuZ2V0KGUpO2lmKG0mJmcpcmV0dXJuIG09PWUmJmc9PXQ7dmFyIHk9ITA7YS5zZXQodCxlKSxhLnNldChlLHQpO2Zvcih2YXIgdj1zOysrZDx1Oyl7cD1sW2RdO3ZhciB4PXRbcF0sYj1lW3BdO2lmKG4pdmFyIHc9cz9uKGIseCxwLGUsdCxhKTpuKHgsYixwLHQsZSxhKTtpZighKHc9PT12b2lkIDA/eD09PWJ8fGkoeCxiLHIsbixhKTp3KSl7eT0hMTticmVha312fHwodj1wPT0iY29uc3RydWN0b3IiKX1pZih5JiYhdil7dmFyIF89dC5jb25zdHJ1Y3RvcixUPWUuY29uc3RydWN0b3I7XyE9VCYmImNvbnN0cnVjdG9yImluIHQmJiJjb25zdHJ1Y3RvciJpbiBlJiYhKHR5cGVvZiBfPT0iZnVuY3Rpb24iJiZfIGluc3RhbmNlb2YgXyYmdHlwZW9mIFQ9PSJmdW5jdGlvbiImJlQgaW5zdGFuY2VvZiBUKSYmKHk9ITEpfXJldHVybiBhLmRlbGV0ZSh0KSxhLmRlbGV0ZShlKSx5fXZhciBzUmUsb1JlLGxSZSxIZWUsV2VlPU0oKCk9PnsidXNlIHN0cmljdCI7d0woKTtzUmU9MSxvUmU9T2JqZWN0LnByb3RvdHlwZSxsUmU9b1JlLmhhc093blByb3BlcnR5O28oY1JlLCJlcXVhbE9iamVjdHMiKTtIZWU9Y1JlfSk7ZnVuY3Rpb24gZlJlKHQsZSxyLG4saSxhKXt2YXIgcz1NdCh0KSxsPU10KGUpLHU9cz9xZWU6bm8odCksaD1sP3FlZTpubyhlKTt1PXU9PVllZT9Jdzp1LGg9aD09WWVlP0l3Omg7dmFyIGY9dT09SXcsZD1oPT1JdyxwPXU9PWg7aWYocCYmX2wodCkpe2lmKCFfbChlKSlyZXR1cm4hMTtzPSEwLGY9ITF9aWYocCYmIWYpcmV0dXJuIGF8fChhPW5ldyB1Yyksc3x8TmgodCk/UncodCxlLHIsbixpLGEpOlZlZSh0LGUsdSxyLG4saSxhKTtpZighKHImdVJlKSl7dmFyIG09ZiYmWGVlLmNhbGwodCwiX193cmFwcGVkX18iKSxnPWQmJlhlZS5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYobXx8Zyl7dmFyIHk9bT90LnZhbHVlKCk6dCx2PWc/ZS52YWx1ZSgpOmU7cmV0dXJuIGF8fChhPW5ldyB1YyksaSh5LHYscixuLGEpfX1yZXR1cm4gcD8oYXx8KGE9bmV3IHVjKSxIZWUodCxlLHIsbixpLGEpKTohMX12YXIgdVJlLFllZSxxZWUsSXcsaFJlLFhlZSxqZWUsS2VlPU0oKCk9PnsidXNlIHN0cmljdCI7ZXYoKTtfTCgpO1VlZSgpO1dlZSgpO1JkKCk7Vm4oKTtKcCgpO2l2KCk7dVJlPTEsWWVlPSJbb2JqZWN0IEFyZ3VtZW50c10iLHFlZT0iW29iamVjdCBBcnJheV0iLEl3PSJbb2JqZWN0IE9iamVjdF0iLGhSZT1PYmplY3QucHJvdG90eXBlLFhlZT1oUmUuaGFzT3duUHJvcGVydHk7byhmUmUsImJhc2VJc0VxdWFsRGVlcCIpO2plZT1mUmV9KTtmdW5jdGlvbiBRZWUodCxlLHIsbixpKXtyZXR1cm4gdD09PWU/ITA6dD09bnVsbHx8ZT09bnVsbHx8IVpuKHQpJiYhWm4oZSk/dCE9PXQmJmUhPT1lOmplZSh0LGUscixuLFFlZSxpKX12YXIgT3csREw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLZWUoKTtNbygpO28oUWVlLCJiYXNlSXNFcXVhbCIpO093PVFlZX0pO2Z1bmN0aW9uIG1SZSh0LGUscixuKXt2YXIgaT1yLmxlbmd0aCxhPWkscz0hbjtpZih0PT1udWxsKXJldHVybiFhO2Zvcih0PU9iamVjdCh0KTtpLS07KXt2YXIgbD1yW2ldO2lmKHMmJmxbMl0/bFsxXSE9PXRbbFswXV06IShsWzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe2w9cltpXTt2YXIgdT1sWzBdLGg9dFt1XSxmPWxbMV07aWYocyYmbFsyXSl7aWYoaD09PXZvaWQgMCYmISh1IGluIHQpKXJldHVybiExfWVsc2V7dmFyIGQ9bmV3IHVjO2lmKG4pdmFyIHA9bihoLGYsdSx0LGUsZCk7aWYoIShwPT09dm9pZCAwP093KGYsaCxkUmV8cFJlLG4sZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfXZhciBkUmUscFJlLFplZSxKZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtldigpO0RMKCk7ZFJlPTEscFJlPTI7byhtUmUsImJhc2VJc01hdGNoIik7WmVlPW1SZX0pO2Z1bmN0aW9uIGdSZSh0KXtyZXR1cm4gdD09PXQmJiF5bih0KX12YXIgUHcsTkw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRcygpO28oZ1JlLCJpc1N0cmljdENvbXBhcmFibGUiKTtQdz1nUmV9KTtmdW5jdGlvbiB5UmUodCl7Zm9yKHZhciBlPXpyKHQpLHI9ZS5sZW5ndGg7ci0tOyl7dmFyIG49ZVtyXSxpPXRbbl07ZVtyXT1bbixpLFB3KGkpXX1yZXR1cm4gZX12YXIgZXRlLHR0ZT1NKCgpPT57InVzZSBzdHJpY3QiO05MKCk7eGMoKTtvKHlSZSwiZ2V0TWF0Y2hEYXRhIik7ZXRlPXlSZX0pO2Z1bmN0aW9uIHZSZSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD8hMTpyW3RdPT09ZSYmKGUhPT12b2lkIDB8fHQgaW4gT2JqZWN0KHIpKX19dmFyIEJ3LFJMPU0oKCk9PnsidXNlIHN0cmljdCI7byh2UmUsIm1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIik7Qnc9dlJlfSk7ZnVuY3Rpb24geFJlKHQpe3ZhciBlPWV0ZSh0KTtyZXR1cm4gZS5sZW5ndGg9PTEmJmVbMF1bMl0/QncoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihyKXtyZXR1cm4gcj09PXR8fFplZShyLHQsZSl9fXZhciBydGUsbnRlPU0oKCk9PnsidXNlIHN0cmljdCI7SmVlKCk7dHRlKCk7UkwoKTtvKHhSZSwiYmFzZU1hdGNoZXMiKTtydGU9eFJlfSk7ZnVuY3Rpb24gYlJlKHQsZSl7cmV0dXJuIHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfXZhciBpdGUsYXRlPU0oKCk9PnsidXNlIHN0cmljdCI7byhiUmUsImJhc2VIYXNJbiIpO2l0ZT1iUmV9KTtmdW5jdGlvbiB3UmUodCxlLHIpe2U9VWgoZSx0KTtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxhPSExOysrbjxpOyl7dmFyIHM9YmMoZVtuXSk7aWYoIShhPXQhPW51bGwmJnIodCxzKSkpYnJlYWs7dD10W3NdfXJldHVybiBhfHwrK24hPWk/YTooaT10PT1udWxsPzA6dC5sZW5ndGgsISFpJiZacChpKSYmUmgocyxpKSYmKE10KHQpfHxBbCh0KSkpfXZhciBGdyxNTD1NKCgpPT57InVzZSBzdHJpY3QiO0x2KCk7UXAoKTtWbigpO3N2KCk7czUoKTtUbSgpO28od1JlLCJoYXNQYXRoIik7Rnc9d1JlfSk7ZnVuY3Rpb24gVFJlKHQsZSl7cmV0dXJuIHQhPW51bGwmJkZ3KHQsZSxpdGUpfXZhciB6dyxJTD1NKCgpPT57InVzZSBzdHJpY3QiO2F0ZSgpO01MKCk7byhUUmUsImhhc0luIik7enc9VFJlfSk7ZnVuY3Rpb24gU1JlKHQsZSl7cmV0dXJuIHdtKHQpJiZQdyhlKT9CdyhiYyh0KSxlKTpmdW5jdGlvbihyKXt2YXIgbj1JSihyLHQpO3JldHVybiBuPT09dm9pZCAwJiZuPT09ZT96dyhyLHQpOk93KGUsbixrUmV8RVJlKX19dmFyIGtSZSxFUmUsc3RlLG90ZT1NKCgpPT57InVzZSBzdHJpY3QiO0RMKCk7T0ooKTtJTCgpO2R3KCk7TkwoKTtSTCgpO1RtKCk7a1JlPTEsRVJlPTI7byhTUmUsImJhc2VNYXRjaGVzUHJvcGVydHkiKTtzdGU9U1JlfSk7ZnVuY3Rpb24gQ1JlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZT8uW3RdfX12YXIgR3csT0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKENSZSwiYmFzZVByb3BlcnR5Iik7R3c9Q1JlfSk7ZnVuY3Rpb24gQVJlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gSGgoZSx0KX19dmFyIGx0ZSxjdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEdigpO28oQVJlLCJiYXNlUHJvcGVydHlEZWVwIik7bHRlPUFSZX0pO2Z1bmN0aW9uIF9SZSh0KXtyZXR1cm4gd20odCk/R3coYmModCkpOmx0ZSh0KX12YXIgdXRlLGh0ZT1NKCgpPT57InVzZSBzdHJpY3QiO09MKCk7Y3RlKCk7ZHcoKTtUbSgpO28oX1JlLCJwcm9wZXJ0eSIpO3V0ZT1fUmV9KTtmdW5jdGlvbiBMUmUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dD09bnVsbD90YTp0eXBlb2YgdD09Im9iamVjdCI/TXQodCk/c3RlKHRbMF0sdFsxXSk6cnRlKHQpOnV0ZSh0KX12YXIgZG4sUWE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtudGUoKTtvdGUoKTtUdSgpO1ZuKCk7aHRlKCk7byhMUmUsImJhc2VJdGVyYXRlZSIpO2RuPUxSZX0pO2Z1bmN0aW9uIERSZSh0LGUscixuKXtmb3IodmFyIGk9LTEsYT10PT1udWxsPzA6dC5sZW5ndGg7KytpPGE7KXt2YXIgcz10W2ldO2UobixzLHIocyksdCl9cmV0dXJuIG59dmFyIGZ0ZSxkdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKERSZSwiYXJyYXlBZ2dyZWdhdG9yIik7ZnRlPURSZX0pO2Z1bmN0aW9uIE5SZSh0LGUpe3JldHVybiB0JiZZcCh0LGUsenIpfXZhciBEbSwkdz1NKCgpPT57InVzZSBzdHJpY3QiO1ozKCk7eGMoKTtvKE5SZSwiYmFzZUZvck93biIpO0RtPU5SZX0pO2Z1bmN0aW9uIFJSZSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIXNpKHIpKXJldHVybiB0KHIsbik7Zm9yKHZhciBpPXIubGVuZ3RoLGE9ZT9pOi0xLHM9T2JqZWN0KHIpOyhlP2EtLTorK2E8aSkmJm4oc1thXSxhLHMpIT09ITE7KTtyZXR1cm4gcn19dmFyIHB0ZSxtdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJbygpO28oUlJlLCJjcmVhdGVCYXNlRWFjaCIpO3B0ZT1SUmV9KTt2YXIgTVJlLF9zLFloPU0oKCk9PnsidXNlIHN0cmljdCI7JHcoKTttdGUoKTtNUmU9cHRlKERtKSxfcz1NUmV9KTtmdW5jdGlvbiBJUmUodCxlLHIsbil7cmV0dXJuIF9zKHQsZnVuY3Rpb24oaSxhLHMpe2UobixpLHIoaSkscyl9KSxufXZhciBndGUseXRlPU0oKCk9PnsidXNlIHN0cmljdCI7WWgoKTtvKElSZSwiYmFzZUFnZ3JlZ2F0b3IiKTtndGU9SVJlfSk7ZnVuY3Rpb24gT1JlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9TXQocik/ZnRlOmd0ZSxhPWU/ZSgpOnt9O3JldHVybiBpKHIsdCxkbihuLDIpLGEpfX12YXIgdnRlLHh0ZT1NKCgpPT57InVzZSBzdHJpY3QiO2R0ZSgpO3l0ZSgpO1FhKCk7Vm4oKTtvKE9SZSwiY3JlYXRlQWdncmVnYXRvciIpO3Z0ZT1PUmV9KTt2YXIgUFJlLFZ3LGJ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO05vKCk7UFJlPW8oZnVuY3Rpb24oKXtyZXR1cm4gYWkuRGF0ZS5ub3coKX0sIm5vdyIpLFZ3PVBSZX0pO3ZhciB3dGUsQlJlLEZSZSxxaCxUdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0bSgpO3lkKCk7VGQoKTtNaCgpO3d0ZT1PYmplY3QucHJvdG90eXBlLEJSZT13dGUuaGFzT3duUHJvcGVydHksRlJlPXBjKGZ1bmN0aW9uKHQsZSl7dD1PYmplY3QodCk7dmFyIHI9LTEsbj1lLmxlbmd0aCxpPW4+Mj9lWzJdOnZvaWQgMDtmb3IoaSYmWnMoZVswXSxlWzFdLGkpJiYobj0xKTsrK3I8bjspZm9yKHZhciBhPWVbcl0scz14cyhhKSxsPS0xLHU9cy5sZW5ndGg7KytsPHU7KXt2YXIgaD1zW2xdLGY9dFtoXTsoZj09PXZvaWQgMHx8Um8oZix3dGVbaF0pJiYhQlJlLmNhbGwodCxoKSkmJih0W2hdPWFbaF0pfXJldHVybiB0fSkscWg9RlJlfSk7ZnVuY3Rpb24gelJlKHQsZSxyKXtmb3IodmFyIG49LTEsaT10PT1udWxsPzA6dC5sZW5ndGg7KytuPGk7KWlmKHIoZSx0W25dKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgVXcsUEw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHpSZSwiYXJyYXlJbmNsdWRlc1dpdGgiKTtVdz16UmV9KTtmdW5jdGlvbiAkUmUodCxlLHIsbil7dmFyIGk9LTEsYT1odyxzPSEwLGw9dC5sZW5ndGgsdT1bXSxoPWUubGVuZ3RoO2lmKCFsKXJldHVybiB1O3ImJihlPUFzKGUsT28ocikpKSxuPyhhPVV3LHM9ITEpOmUubGVuZ3RoPj1HUmUmJihhPV9tLHM9ITEsZT1uZXcgQW0oZSkpO2U6Zm9yKDsrK2k8bDspe3ZhciBmPXRbaV0sZD1yPT1udWxsP2Y6cihmKTtpZihmPW58fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPWg7cC0tOylpZihlW3BdPT09ZCljb250aW51ZSBlO3UucHVzaChmKX1lbHNlIGEoZSxkLG4pfHx1LnB1c2goZil9cmV0dXJuIHV9dmFyIEdSZSxrdGUsRXRlPU0oKCk9PnsidXNlIHN0cmljdCI7THcoKTttTCgpO1BMKCk7RGQoKTtiZCgpO053KCk7R1JlPTIwMDtvKCRSZSwiYmFzZURpZmZlcmVuY2UiKTtrdGU9JFJlfSk7dmFyIFZSZSxYaCxTdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFdGUoKTtFbSgpO3RtKCk7bzUoKTtWUmU9cGMoZnVuY3Rpb24odCxlKXtyZXR1cm4geGQodCk/a3RlKHQsd2MoZSwxLHhkLCEwKSk6W119KSxYaD1WUmV9KTtmdW5jdGlvbiBVUmUodCl7dmFyIGU9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9dmFyIGZhLEN0ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oVVJlLCJsYXN0Iik7ZmE9VVJlfSk7ZnVuY3Rpb24gSFJlKHQsZSxyKXt2YXIgbj10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuIG4/KGU9cnx8ZT09PXZvaWQgMD8xOnZjKGUpLHl3KHQsZTwwPzA6ZSxuKSk6W119dmFyIG1pLEF0ZT1NKCgpPT57InVzZSBzdHJpY3QiO3lMKCk7dm0oKTtvKEhSZSwiZHJvcCIpO21pPUhSZX0pO2Z1bmN0aW9uIFdSZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBuPyhlPXJ8fGU9PT12b2lkIDA/MTp2YyhlKSxlPW4tZSx5dyh0LDAsZTwwPzA6ZSkpOltdfXZhciBMdSxfdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5TCgpO3ZtKCk7byhXUmUsImRyb3BSaWdodCIpO0x1PVdSZX0pO2Z1bmN0aW9uIFlSZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0YX12YXIgTm0sSHc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUdSgpO28oWVJlLCJjYXN0RnVuY3Rpb24iKTtObT1ZUmV9KTtmdW5jdGlvbiBxUmUodCxlKXt2YXIgcj1NdCh0KT9sdzpfcztyZXR1cm4gcih0LE5tKGUpKX12YXIgQ2UsV3c9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkTCgpO1loKCk7SHcoKTtWbigpO28ocVJlLCJmb3JFYWNoIik7Q2U9cVJlfSk7dmFyIEx0ZT1NKCgpPT57InVzZSBzdHJpY3QiO1d3KCl9KTtmdW5jdGlvbiBYUmUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKCFlKHRbcl0scix0KSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgRHRlLE50ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oWFJlLCJhcnJheUV2ZXJ5Iik7RHRlPVhSZX0pO2Z1bmN0aW9uIGpSZSh0LGUpe3ZhciByPSEwO3JldHVybiBfcyh0LGZ1bmN0aW9uKG4saSxhKXtyZXR1cm4gcj0hIWUobixpLGEpLHJ9KSxyfXZhciBSdGUsTXRlPU0oKCk9PnsidXNlIHN0cmljdCI7WWgoKTtvKGpSZSwiYmFzZUV2ZXJ5Iik7UnRlPWpSZX0pO2Z1bmN0aW9uIEtSZSh0LGUscil7dmFyIG49TXQodCk/RHRlOlJ0ZTtyZXR1cm4gciYmWnModCxlLHIpJiYoZT12b2lkIDApLG4odCxkbihlLDMpKX12YXIgUmEsSXRlPU0oKCk9PnsidXNlIHN0cmljdCI7TnRlKCk7TXRlKCk7UWEoKTtWbigpO1RkKCk7byhLUmUsImV2ZXJ5Iik7UmE9S1JlfSk7ZnVuY3Rpb24gUVJlKHQsZSl7dmFyIHI9W107cmV0dXJuIF9zKHQsZnVuY3Rpb24obixpLGEpe2UobixpLGEpJiZyLnB1c2gobil9KSxyfXZhciBZdyxCTD1NKCgpPT57InVzZSBzdHJpY3QiO1loKCk7byhRUmUsImJhc2VGaWx0ZXIiKTtZdz1RUmV9KTtmdW5jdGlvbiBaUmUodCxlKXt2YXIgcj1NdCh0KT9TbTpZdztyZXR1cm4gcih0LGRuKGUsMykpfXZhciBZcixGTD1NKCgpPT57InVzZSBzdHJpY3QiO3Z3KCk7QkwoKTtRYSgpO1ZuKCk7byhaUmUsImZpbHRlciIpO1lyPVpSZX0pO2Z1bmN0aW9uIEpSZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU9iamVjdChlKTtpZighc2koZSkpe3ZhciBhPWRuKHIsMyk7ZT16cihlKSxyPW8oZnVuY3Rpb24obCl7cmV0dXJuIGEoaVtsXSxsLGkpfSwicHJlZGljYXRlIil9dmFyIHM9dChlLHIsbik7cmV0dXJuIHM+LTE/aVthP2Vbc106c106dm9pZCAwfX12YXIgT3RlLFB0ZT1NKCgpPT57InVzZSBzdHJpY3QiO1FhKCk7SW8oKTt4YygpO28oSlJlLCJjcmVhdGVGaW5kIik7T3RlPUpSZX0pO2Z1bmN0aW9uIHRNZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDp2YyhyKTtyZXR1cm4gaTwwJiYoaT1lTWUobitpLDApKSxjdyh0LGRuKGUsMyksaSl9dmFyIGVNZSxCdGUsRnRlPU0oKCk9PnsidXNlIHN0cmljdCI7cEwoKTtRYSgpO3ZtKCk7ZU1lPU1hdGgubWF4O28odE1lLCJmaW5kSW5kZXgiKTtCdGU9dE1lfSk7dmFyIHJNZSxaYSx6dGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQdGUoKTtGdGUoKTtyTWU9T3RlKEJ0ZSksWmE9ck1lfSk7ZnVuY3Rpb24gbk1lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOnZvaWQgMH12YXIgcmEsR3RlPU0oKCk9PnsidXNlIHN0cmljdCI7byhuTWUsImhlYWQiKTtyYT1uTWV9KTt2YXIgJHRlPU0oKCk9PnsidXNlIHN0cmljdCI7R3RlKCl9KTtmdW5jdGlvbiBpTWUodCxlKXt2YXIgcj0tMSxuPXNpKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gX3ModCxmdW5jdGlvbihpLGEscyl7blsrK3JdPWUoaSxhLHMpfSksbn12YXIgcXcsekw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZaCgpO0lvKCk7byhpTWUsImJhc2VNYXAiKTtxdz1pTWV9KTtmdW5jdGlvbiBhTWUodCxlKXt2YXIgcj1NdCh0KT9BczpxdztyZXR1cm4gcih0LGRuKGUsMykpfXZhciBKZSxSbT1NKCgpPT57InVzZSBzdHJpY3QiO0RkKCk7UWEoKTt6TCgpO1ZuKCk7byhhTWUsIm1hcCIpO0plPWFNZX0pO2Z1bmN0aW9uIHNNZSh0LGUpe3JldHVybiB3YyhKZSh0LGUpLDEpfXZhciBkYSxHTD1NKCgpPT57InVzZSBzdHJpY3QiO0VtKCk7Um0oKTtvKHNNZSwiZmxhdE1hcCIpO2RhPXNNZX0pO2Z1bmN0aW9uIG9NZSh0LGUpe3JldHVybiB0PT1udWxsP3Q6WXAodCxObShlKSx4cyl9dmFyICRMLFZ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO1ozKCk7SHcoKTtNaCgpO28ob01lLCJmb3JJbiIpOyRMPW9NZX0pO2Z1bmN0aW9uIGxNZSh0LGUpe3JldHVybiB0JiZEbSh0LE5tKGUpKX12YXIgVkwsVXRlPU0oKCk9PnsidXNlIHN0cmljdCI7JHcoKTtIdygpO28obE1lLCJmb3JPd24iKTtWTD1sTWV9KTt2YXIgY01lLHVNZSxoTWUsVUwsSHRlPU0oKCk9PnsidXNlIHN0cmljdCI7V3AoKTt4dGUoKTtjTWU9T2JqZWN0LnByb3RvdHlwZSx1TWU9Y01lLmhhc093blByb3BlcnR5LGhNZT12dGUoZnVuY3Rpb24odCxlLHIpe3VNZS5jYWxsKHQscik/dFtyXS5wdXNoKGUpOmhjKHQscixbZV0pfSksVUw9aE1lfSk7ZnVuY3Rpb24gZk1lKHQsZSl7cmV0dXJuIHQ+ZX12YXIgV3RlLFl0ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oZk1lLCJiYXNlR3QiKTtXdGU9Zk1lfSk7ZnVuY3Rpb24gbU1lKHQsZSl7cmV0dXJuIHQhPW51bGwmJnBNZS5jYWxsKHQsZSl9dmFyIGRNZSxwTWUscXRlLFh0ZT1NKCgpPT57InVzZSBzdHJpY3QiO2RNZT1PYmplY3QucHJvdG90eXBlLHBNZT1kTWUuaGFzT3duUHJvcGVydHk7byhtTWUsImJhc2VIYXMiKTtxdGU9bU1lfSk7ZnVuY3Rpb24gZ01lKHQsZSl7cmV0dXJuIHQhPW51bGwmJkZ3KHQsZSxxdGUpfXZhciBJdCxqdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYdGUoKTtNTCgpO28oZ01lLCJoYXMiKTtJdD1nTWV9KTtmdW5jdGlvbiB2TWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nInx8IU10KHQpJiZabih0KSYmY2EodCk9PXlNZX12YXIgeU1lLGdpLFh3PU0oKCk9PnsidXNlIHN0cmljdCI7eHUoKTtWbigpO01vKCk7eU1lPSJbb2JqZWN0IFN0cmluZ10iO28odk1lLCJpc1N0cmluZyIpO2dpPXZNZX0pO2Z1bmN0aW9uIHhNZSh0LGUpe3JldHVybiBBcyhlLGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdfSl9dmFyIEt0ZSxRdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEZCgpO28oeE1lLCJiYXNlVmFsdWVzIik7S3RlPXhNZX0pO2Z1bmN0aW9uIGJNZSh0KXtyZXR1cm4gdD09bnVsbD9bXTpLdGUodCx6cih0KSl9dmFyIGJyLEhMPU0oKCk9PnsidXNlIHN0cmljdCI7UXRlKCk7eGMoKTtvKGJNZSwidmFsdWVzIik7YnI9Yk1lfSk7ZnVuY3Rpb24gVE1lKHQsZSxyLG4pe3Q9c2kodCk/dDpicih0KSxyPXImJiFuP3ZjKHIpOjA7dmFyIGk9dC5sZW5ndGg7cmV0dXJuIHI8MCYmKHI9d01lKGkrciwwKSksZ2kodCk/cjw9aSYmdC5pbmRleE9mKGUscik+LTE6ISFpJiZ4bSh0LGUscik+LTF9dmFyIHdNZSxIbixadGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dygpO0lvKCk7WHcoKTt2bSgpO0hMKCk7d01lPU1hdGgubWF4O28oVE1lLCJpbmNsdWRlcyIpO0huPVRNZX0pO2Z1bmN0aW9uIEVNZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDp2YyhyKTtyZXR1cm4gaTwwJiYoaT1rTWUobitpLDApKSx4bSh0LGUsaSl9dmFyIGtNZSxqdyxKdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dygpO3ZtKCk7a01lPU1hdGgubWF4O28oRU1lLCJpbmRleE9mIik7anc9RU1lfSk7ZnVuY3Rpb24gTE1lKHQpe2lmKHQ9PW51bGwpcmV0dXJuITA7aWYoc2kodCkmJihNdCh0KXx8dHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdC5zcGxpY2U9PSJmdW5jdGlvbiJ8fF9sKHQpfHxOaCh0KXx8QWwodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1ubyh0KTtpZihlPT1TTWV8fGU9PUNNZSlyZXR1cm4hdC5zaXplO2lmKGZjKHQpKXJldHVybiFibSh0KS5sZW5ndGg7Zm9yKHZhciByIGluIHQpaWYoX01lLmNhbGwodCxyKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgU01lLENNZSxBTWUsX01lLGNyLEt3PU0oKCk9PnsidXNlIHN0cmljdCI7ZncoKTtSZCgpO1FwKCk7Vm4oKTtJbygpO0pwKCk7S3AoKTtpdigpO1NNZT0iW29iamVjdCBNYXBdIixDTWU9IltvYmplY3QgU2V0XSIsQU1lPU9iamVjdC5wcm90b3R5cGUsX01lPUFNZS5oYXNPd25Qcm9wZXJ0eTtvKExNZSwiaXNFbXB0eSIpO2NyPUxNZX0pO2Z1bmN0aW9uIE5NZSh0KXtyZXR1cm4gWm4odCkmJmNhKHQpPT1ETWV9dmFyIERNZSxlcmUsdHJlPU0oKCk9PnsidXNlIHN0cmljdCI7eHUoKTtNbygpO0RNZT0iW29iamVjdCBSZWdFeHBdIjtvKE5NZSwiYmFzZUlzUmVnRXhwIik7ZXJlPU5NZX0pO3ZhciBycmUsUk1lLFZvLG5yZT1NKCgpPT57InVzZSBzdHJpY3QiO3RyZSgpO2JkKCk7bnYoKTtycmU9UG8mJlBvLmlzUmVnRXhwLFJNZT1ycmU/T28ocnJlKTplcmUsVm89Uk1lfSk7ZnVuY3Rpb24gTU1lKHQpe3JldHVybiB0PT09dm9pZCAwfXZhciBkcixpcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKE1NZSwiaXNVbmRlZmluZWQiKTtkcj1NTWV9KTtmdW5jdGlvbiBJTWUodCxlKXtyZXR1cm4gdDxlfXZhciBRdyxXTD1NKCgpPT57InVzZSBzdHJpY3QiO28oSU1lLCJiYXNlTHQiKTtRdz1JTWV9KTtmdW5jdGlvbiBPTWUodCxlKXt2YXIgcj17fTtyZXR1cm4gZT1kbihlLDMpLERtKHQsZnVuY3Rpb24obixpLGEpe2hjKHIsaSxlKG4saSxhKSl9KSxyfXZhciBNZCxhcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXcCgpOyR3KCk7UWEoKTtvKE9NZSwibWFwVmFsdWVzIik7TWQ9T01lfSk7ZnVuY3Rpb24gUE1lKHQsZSxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aDsrK248aTspe3ZhciBhPXRbbl0scz1lKGEpO2lmKHMhPW51bGwmJihsPT09dm9pZCAwP3M9PT1zJiYhcm8ocyk6cihzLGwpKSl2YXIgbD1zLHU9YX1yZXR1cm4gdX12YXIgTW0sWnc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMZCgpO28oUE1lLCJiYXNlRXh0cmVtdW0iKTtNbT1QTWV9KTtmdW5jdGlvbiBCTWUodCl7cmV0dXJuIHQmJnQubGVuZ3RoP01tKHQsdGEsV3RlKTp2b2lkIDB9dmFyIExzLHNyZT1NKCgpPT57InVzZSBzdHJpY3QiO1p3KCk7WXRlKCk7VHUoKTtvKEJNZSwibWF4Iik7THM9Qk1lfSk7ZnVuY3Rpb24gRk1lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9NbSh0LHRhLFF3KTp2b2lkIDB9dmFyIE5sLFlMPU0oKCk9PnsidXNlIHN0cmljdCI7WncoKTtXTCgpO1R1KCk7byhGTWUsIm1pbiIpO05sPUZNZX0pO2Z1bmN0aW9uIHpNZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9NbSh0LGRuKGUsMiksUXcpOnZvaWQgMH12YXIgSWQsb3JlPU0oKCk9PnsidXNlIHN0cmljdCI7WncoKTtRYSgpO1dMKCk7byh6TWUsIm1pbkJ5Iik7SWQ9ek1lfSk7ZnVuY3Rpb24gJE1lKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoR01lKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXQuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0pO2Nhc2UgMjpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSxlWzJdKX1yZXR1cm4hdC5hcHBseSh0aGlzLGUpfX12YXIgR01lLGxyZSxjcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHTWU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO28oJE1lLCJuZWdhdGUiKTtscmU9JE1lfSk7ZnVuY3Rpb24gVk1lKHQsZSxyLG4pe2lmKCF5bih0KSlyZXR1cm4gdDtlPVVoKGUsdCk7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgscz1hLTEsbD10O2whPW51bGwmJisraTxhOyl7dmFyIHU9YmMoZVtpXSksaD1yO2lmKHU9PT0iX19wcm90b19fInx8dT09PSJjb25zdHJ1Y3RvciJ8fHU9PT0icHJvdG90eXBlIilyZXR1cm4gdDtpZihpIT1zKXt2YXIgZj1sW3VdO2g9bj9uKGYsdSxsKTp2b2lkIDAsaD09PXZvaWQgMCYmKGg9eW4oZik/ZjpSaChlW2krMV0pP1tdOnt9KX1kYyhsLHUsaCksbD1sW3VdfXJldHVybiB0fXZhciB1cmUsaHJlPU0oKCk9PnsidXNlIHN0cmljdCI7ZW0oKTtMdigpO3N2KCk7UXMoKTtUbSgpO28oVk1lLCJiYXNlU2V0Iik7dXJlPVZNZX0pO2Z1bmN0aW9uIFVNZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT17fTsrK248aTspe3ZhciBzPWVbbl0sbD1IaCh0LHMpO3IobCxzKSYmdXJlKGEsVWgocyx0KSxsKX1yZXR1cm4gYX12YXIgSncscUw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEdigpO2hyZSgpO0x2KCk7byhVTWUsImJhc2VQaWNrQnkiKTtKdz1VTWV9KTtmdW5jdGlvbiBITWUodCxlKXtpZih0PT1udWxsKXJldHVybnt9O3ZhciByPUFzKGt3KHQpLGZ1bmN0aW9uKG4pe3JldHVybltuXX0pO3JldHVybiBlPWRuKGUpLEp3KHQscixmdW5jdGlvbihuLGkpe3JldHVybiBlKG4saVswXSl9KX12YXIgRHMsZnJlPU0oKCk9PnsidXNlIHN0cmljdCI7RGQoKTtRYSgpO3FMKCk7VEwoKTtvKEhNZSwicGlja0J5Iik7RHM9SE1lfSk7ZnVuY3Rpb24gV01lKHQsZSl7dmFyIHI9dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtyLS07KXRbcl09dFtyXS52YWx1ZTtyZXR1cm4gdH12YXIgZHJlLHByZT1NKCgpPT57InVzZSBzdHJpY3QiO28oV01lLCJiYXNlU29ydEJ5Iik7ZHJlPVdNZX0pO2Z1bmN0aW9uIFlNZSh0LGUpe2lmKHQhPT1lKXt2YXIgcj10IT09dm9pZCAwLG49dD09PW51bGwsaT10PT09dCxhPXJvKHQpLHM9ZSE9PXZvaWQgMCxsPWU9PT1udWxsLHU9ZT09PWUsaD1ybyhlKTtpZighbCYmIWgmJiFhJiZ0PmV8fGEmJnMmJnUmJiFsJiYhaHx8biYmcyYmdXx8IXImJnV8fCFpKXJldHVybiAxO2lmKCFuJiYhYSYmIWgmJnQ8ZXx8aCYmciYmaSYmIW4mJiFhfHxsJiZyJiZpfHwhcyYmaXx8IXUpcmV0dXJuLTF9cmV0dXJuIDB9dmFyIG1yZSxncmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMZCgpO28oWU1lLCJjb21wYXJlQXNjZW5kaW5nIik7bXJlPVlNZX0pO2Z1bmN0aW9uIHFNZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dC5jcml0ZXJpYSxhPWUuY3JpdGVyaWEscz1pLmxlbmd0aCxsPXIubGVuZ3RoOysrbjxzOyl7dmFyIHU9bXJlKGlbbl0sYVtuXSk7aWYodSl7aWYobj49bClyZXR1cm4gdTt2YXIgaD1yW25dO3JldHVybiB1KihoPT0iZGVzYyI/LTE6MSl9fXJldHVybiB0LmluZGV4LWUuaW5kZXh9dmFyIHlyZSx2cmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtncmUoKTtvKHFNZSwiY29tcGFyZU11bHRpcGxlIik7eXJlPXFNZX0pO2Z1bmN0aW9uIFhNZSh0LGUscil7ZS5sZW5ndGg/ZT1BcyhlLGZ1bmN0aW9uKGEpe3JldHVybiBNdChhKT9mdW5jdGlvbihzKXtyZXR1cm4gSGgocyxhLmxlbmd0aD09PTE/YVswXTphKX06YX0pOmU9W3RhXTt2YXIgbj0tMTtlPUFzKGUsT28oZG4pKTt2YXIgaT1xdyh0LGZ1bmN0aW9uKGEscyxsKXt2YXIgdT1BcyhlLGZ1bmN0aW9uKGgpe3JldHVybiBoKGEpfSk7cmV0dXJue2NyaXRlcmlhOnUsaW5kZXg6KytuLHZhbHVlOmF9fSk7cmV0dXJuIGRyZShpLGZ1bmN0aW9uKGEscyl7cmV0dXJuIHlyZShhLHMscil9KX12YXIgeHJlLGJyZT1NKCgpPT57InVzZSBzdHJpY3QiO0RkKCk7RHYoKTtRYSgpO3pMKCk7cHJlKCk7YmQoKTt2cmUoKTtUdSgpO1ZuKCk7byhYTWUsImJhc2VPcmRlckJ5Iik7eHJlPVhNZX0pO3ZhciBqTWUsd3JlLFRyZT1NKCgpPT57InVzZSBzdHJpY3QiO09MKCk7ak1lPUd3KCJsZW5ndGgiKSx3cmU9ak1lfSk7ZnVuY3Rpb24gb0llKHQpe2Zvcih2YXIgZT1rcmUubGFzdEluZGV4PTA7a3JlLnRlc3QodCk7KSsrZTtyZXR1cm4gZX12YXIgRXJlLEtNZSxRTWUsWk1lLEpNZSxlSWUsdEllLFhMLGpMLHJJZSxTcmUsQ3JlLEFyZSxuSWUsX3JlLExyZSxpSWUsYUllLHNJZSxrcmUsRHJlLE5yZT1NKCgpPT57InVzZSBzdHJpY3QiO0VyZT0iXFx1ZDgwMC1cXHVkZmZmIixLTWU9IlxcdTAzMDAtXFx1MDM2ZiIsUU1lPSJcXHVmZTIwLVxcdWZlMmYiLFpNZT0iXFx1MjBkMC1cXHUyMGZmIixKTWU9S01lK1FNZStaTWUsZUllPSJcXHVmZTBlXFx1ZmUwZiIsdEllPSJbIitFcmUrIl0iLFhMPSJbIitKTWUrIl0iLGpMPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLHJJZT0iKD86IitYTCsifCIrakwrIikiLFNyZT0iW14iK0VyZSsiXSIsQ3JlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixBcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLG5JZT0iXFx1MjAwZCIsX3JlPXJJZSsiPyIsTHJlPSJbIitlSWUrIl0/IixpSWU9Iig/OiIrbkllKyIoPzoiK1tTcmUsQ3JlLEFyZV0uam9pbigifCIpKyIpIitMcmUrX3JlKyIpKiIsYUllPUxyZStfcmUraUllLHNJZT0iKD86IitbU3JlK1hMKyI/IixYTCxDcmUsQXJlLHRJZV0uam9pbigifCIpKyIpIixrcmU9UmVnRXhwKGpMKyIoPz0iK2pMKyIpfCIrc0llK2FJZSwiZyIpO28ob0llLCJ1bmljb2RlU2l6ZSIpO0RyZT1vSWV9KTtmdW5jdGlvbiBsSWUodCl7cmV0dXJuIFZKKHQpP0RyZSh0KTp3cmUodCl9dmFyIFJyZSxNcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUcmUoKTtVSigpO05yZSgpO28obEllLCJzdHJpbmdTaXplIik7UnJlPWxJZX0pO2Z1bmN0aW9uIGNJZSh0LGUpe3JldHVybiBKdyh0LGUsZnVuY3Rpb24ocixuKXtyZXR1cm4gencodCxuKX0pfXZhciBJcmUsT3JlPU0oKCk9PnsidXNlIHN0cmljdCI7cUwoKTtJTCgpO28oY0llLCJiYXNlUGljayIpO0lyZT1jSWV9KTt2YXIgdUllLE9kLFByZT1NKCgpPT57InVzZSBzdHJpY3QiO09yZSgpOyRKKCk7dUllPUdKKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PW51bGw/e306SXJlKHQsZSl9KSxPZD11SWV9KTtmdW5jdGlvbiBkSWUodCxlLHIsbil7Zm9yKHZhciBpPS0xLGE9ZkllKGhJZSgoZS10KS8ocnx8MSkpLDApLHM9QXJyYXkoYSk7YS0tOylzW24/YTorK2ldPXQsdCs9cjtyZXR1cm4gc312YXIgaEllLGZJZSxCcmUsRnJlPU0oKCk9PnsidXNlIHN0cmljdCI7aEllPU1hdGguY2VpbCxmSWU9TWF0aC5tYXg7byhkSWUsImJhc2VSYW5nZSIpO0JyZT1kSWV9KTtmdW5jdGlvbiBwSWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZacyhlLHIsbikmJihyPW49dm9pZCAwKSxlPXltKGUpLHI9PT12b2lkIDA/KHI9ZSxlPTApOnI9eW0ociksbj1uPT09dm9pZCAwP2U8cj8xOi0xOnltKG4pLEJyZShlLHIsbix0KX19dmFyIHpyZSxHcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGcmUoKTtUZCgpO2hMKCk7byhwSWUsImNyZWF0ZVJhbmdlIik7enJlPXBJZX0pO3ZhciBtSWUsVW8sJHJlPU0oKCk9PnsidXNlIHN0cmljdCI7R3JlKCk7bUllPXpyZSgpLFVvPW1JZX0pO2Z1bmN0aW9uIGdJZSh0LGUscixuLGkpe3JldHVybiBpKHQsZnVuY3Rpb24oYSxzLGwpe3I9bj8obj0hMSxhKTplKHIsYSxzLGwpfSkscn12YXIgVnJlLFVyZT1NKCgpPT57InVzZSBzdHJpY3QiO28oZ0llLCJiYXNlUmVkdWNlIik7VnJlPWdJZX0pO2Z1bmN0aW9uIHlJZSh0LGUscil7dmFyIG49TXQodCk/SEo6VnJlLGk9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiBuKHQsZG4oZSw0KSxyLGksX3MpfXZhciBxcixLTD1NKCgpPT57InVzZSBzdHJpY3QiO1dKKCk7WWgoKTtRYSgpO1VyZSgpO1ZuKCk7byh5SWUsInJlZHVjZSIpO3FyPXlJZX0pO2Z1bmN0aW9uIHZJZSh0LGUpe3ZhciByPU10KHQpP1NtOll3O3JldHVybiByKHQsbHJlKGRuKGUsMykpKX12YXIgamgsSHJlPU0oKCk9PnsidXNlIHN0cmljdCI7dncoKTtCTCgpO1FhKCk7Vm4oKTtjcmUoKTtvKHZJZSwicmVqZWN0Iik7amg9dkllfSk7ZnVuY3Rpb24gd0llKHQpe2lmKHQ9PW51bGwpcmV0dXJuIDA7aWYoc2kodCkpcmV0dXJuIGdpKHQpP1JyZSh0KTp0Lmxlbmd0aDt2YXIgZT1ubyh0KTtyZXR1cm4gZT09eEllfHxlPT1iSWU/dC5zaXplOmJtKHQpLmxlbmd0aH12YXIgeEllLGJJZSxRTCxXcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmdygpO1JkKCk7SW8oKTtYdygpO01yZSgpO3hJZT0iW29iamVjdCBNYXBdIixiSWU9IltvYmplY3QgU2V0XSI7byh3SWUsInNpemUiKTtRTD13SWV9KTtmdW5jdGlvbiBUSWUodCxlKXt2YXIgcjtyZXR1cm4gX3ModCxmdW5jdGlvbihuLGksYSl7cmV0dXJuIHI9ZShuLGksYSksIXJ9KSwhIXJ9dmFyIFlyZSxxcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZaCgpO28oVEllLCJiYXNlU29tZSIpO1lyZT1USWV9KTtmdW5jdGlvbiBrSWUodCxlLHIpe3ZhciBuPU10KHQpP0R3OllyZTtyZXR1cm4gciYmWnModCxlLHIpJiYoZT12b2lkIDApLG4odCxkbihlLDMpKX12YXIgUnYsWHJlPU0oKCk9PnsidXNlIHN0cmljdCI7QUwoKTtRYSgpO3FyZSgpO1ZuKCk7VGQoKTtvKGtJZSwic29tZSIpO1J2PWtJZX0pO3ZhciBFSWUsa2MsanJlPU0oKCk9PnsidXNlIHN0cmljdCI7RW0oKTticmUoKTt0bSgpO1RkKCk7RUllPXBjKGZ1bmN0aW9uKHQsZSl7aWYodD09bnVsbClyZXR1cm5bXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gcj4xJiZacyh0LGVbMF0sZVsxXSk/ZT1bXTpyPjImJlpzKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSx4cmUodCx3YyhlLDEpLFtdKX0pLGtjPUVJZX0pO3ZhciBTSWUsQ0llLEtyZSxRcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrTCgpO2ZMKCk7TXcoKTtTSWU9MS8wLENJZT1XaCYmMS9MbShuZXcgV2goWywtMF0pKVsxXT09U0llP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgV2godCl9OkpuLEtyZT1DSWV9KTtmdW5jdGlvbiBfSWUodCxlLHIpe3ZhciBuPS0xLGk9aHcsYT10Lmxlbmd0aCxzPSEwLGw9W10sdT1sO2lmKHIpcz0hMSxpPVV3O2Vsc2UgaWYoYT49QUllKXt2YXIgaD1lP251bGw6S3JlKHQpO2lmKGgpcmV0dXJuIExtKGgpO3M9ITEsaT1fbSx1PW5ldyBBbX1lbHNlIHU9ZT9bXTpsO2U6Zm9yKDsrK248YTspe3ZhciBmPXRbbl0sZD1lP2UoZik6ZjtpZihmPXJ8fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPXUubGVuZ3RoO3AtLTspaWYodVtwXT09PWQpY29udGludWUgZTtlJiZ1LnB1c2goZCksbC5wdXNoKGYpfWVsc2UgaSh1LGQscil8fCh1IT09bCYmdS5wdXNoKGQpLGwucHVzaChmKSl9cmV0dXJuIGx9dmFyIEFJZSxJbSxlVD1NKCgpPT57InVzZSBzdHJpY3QiO0x3KCk7bUwoKTtQTCgpO053KCk7UXJlKCk7TXcoKTtBSWU9MjAwO28oX0llLCJiYXNlVW5pcSIpO0ltPV9JZX0pO3ZhciBMSWUsWkwsWnJlPU0oKCk9PnsidXNlIHN0cmljdCI7RW0oKTt0bSgpO2VUKCk7bzUoKTtMSWU9cGMoZnVuY3Rpb24odCl7cmV0dXJuIEltKHdjKHQsMSx4ZCwhMCkpfSksWkw9TEllfSk7ZnVuY3Rpb24gREllKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9JbSh0KTpbXX12YXIgT20sSnJlPU0oKCk9PnsidXNlIHN0cmljdCI7ZVQoKTtvKERJZSwidW5pcSIpO09tPURJZX0pO2Z1bmN0aW9uIE5JZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9JbSh0LGRuKGUsMikpOltdfXZhciBlbmUsdG5lPU0oKCk9PnsidXNlIHN0cmljdCI7UWEoKTtlVCgpO28oTkllLCJ1bmlxQnkiKTtlbmU9TkllfSk7ZnVuY3Rpb24gTUllKHQpe3ZhciBlPSsrUkllO3JldHVybiBwdyh0KStlfXZhciBSSWUsUGQscm5lPU0oKCk9PnsidXNlIHN0cmljdCI7Z0woKTtSSWU9MDtvKE1JZSwidW5pcXVlSWQiKTtQZD1NSWV9KTtmdW5jdGlvbiBJSWUodCxlLHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgscz17fTsrK248aTspe3ZhciBsPW48YT9lW25dOnZvaWQgMDtyKHMsdFtuXSxsKX1yZXR1cm4gc312YXIgbm5lLGluZT1NKCgpPT57InVzZSBzdHJpY3QiO28oSUllLCJiYXNlWmlwT2JqZWN0Iik7bm5lPUlJZX0pO2Z1bmN0aW9uIE9JZSh0LGUpe3JldHVybiBubmUodHx8W10sZXx8W10sZGMpfXZhciB0VCxhbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtlbSgpO2luZSgpO28oT0llLCJ6aXBPYmplY3QiKTt0VD1PSWV9KTt2YXIgSHQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMSigpO1NMKCk7TWVlKCk7SWVlKCk7V18oKTtUdGUoKTtTdGUoKTtBdGUoKTtfdGUoKTtMdGUoKTtJdGUoKTtGTCgpO3p0ZSgpOyR0ZSgpO0dMKCk7Z3coKTtXdygpO1Z0ZSgpO1V0ZSgpO0h0ZSgpO2p0ZSgpO1R1KCk7WnRlKCk7SnRlKCk7Vm4oKTtLdygpO2p5KCk7UXMoKTtucmUoKTtYdygpO2lyZSgpO3hjKCk7Q3RlKCk7Um0oKTthcmUoKTtzcmUoKTtYXygpO1lMKCk7b3JlKCk7ZkwoKTtidGUoKTtQcmUoKTtmcmUoKTskcmUoKTtLTCgpO0hyZSgpO1dyZSgpO1hyZSgpO2pyZSgpO1pyZSgpO0pyZSgpO3JuZSgpO0hMKCk7YW5lKCk7fSk7ZnVuY3Rpb24gb25lKHQsZSl7dFtlXT90W2VdKys6dFtlXT0xfWZ1bmN0aW9uIGxuZSh0LGUpey0tdFtlXXx8ZGVsZXRlIHRbZV19ZnVuY3Rpb24gTXYodCxlLHIsbil7dmFyIGk9IiIrZSxhPSIiK3I7aWYoIXQmJmk+YSl7dmFyIHM9aTtpPWEsYT1zfXJldHVybiBpK3NuZSthK3NuZSsoZHIobik/UEllOm4pfWZ1bmN0aW9uIEJJZSh0LGUscixuKXt2YXIgaT0iIitlLGE9IiIrcjtpZighdCYmaT5hKXt2YXIgcz1pO2k9YSxhPXN9dmFyIGw9e3Y6aSx3OmF9O3JldHVybiBuJiYobC5uYW1lPW4pLGx9ZnVuY3Rpb24gSkwodCxlKXtyZXR1cm4gTXYodCxlLnYsZS53LGUubmFtZSl9dmFyIFBJZSxCZCxzbmUsTXIsclQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO1BJZT0iXDAiLEJkPSJcMCIsc25lPSIBIixNcj1jbGFzc3tzdGF0aWN7byh0aGlzLCJHcmFwaCIpfWNvbnN0cnVjdG9yKGU9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49YnModm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49YnModm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0JkXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgoZSl7cmV0dXJuIHRoaXMuX2xhYmVsPWUsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKGUpe3JldHVybiBFaShlKXx8KGU9YnMoZSkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1lLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiB6cih0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBlPXRoaXM7cmV0dXJuIFlyKHRoaXMubm9kZXMoKSxmdW5jdGlvbihyKXtyZXR1cm4gY3IoZS5faW5bcl0pfSl9c2lua3MoKXt2YXIgZT10aGlzO3JldHVybiBZcih0aGlzLm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIGNyKGUuX291dFtyXSl9KX1zZXROb2RlcyhlLHIpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIENlKGUsZnVuY3Rpb24oYSl7bi5sZW5ndGg+MT9pLnNldE5vZGUoYSxyKTppLnNldE5vZGUoYSl9KSx0aGlzfXNldE5vZGUoZSxyKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT1yKSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3I6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09QmQsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bQmRdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX1ub2RlKGUpe3JldHVybiB0aGlzLl9ub2Rlc1tlXX1oYXNOb2RlKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fbm9kZXMsZSl9cmVtb3ZlTm9kZShlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fbm9kZXMsZSkpe3ZhciByPW8obj0+dGhpcy5yZW1vdmVFZGdlKHRoaXMuX2VkZ2VPYmpzW25dKSwicmVtb3ZlRWRnZSIpO2RlbGV0ZSB0aGlzLl9ub2Rlc1tlXSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoZSksZGVsZXRlIHRoaXMuX3BhcmVudFtlXSxDZSh0aGlzLmNoaWxkcmVuKGUpLG49Pnt0aGlzLnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksQ2UoenIodGhpcy5faW5bZV0pLHIpLGRlbGV0ZSB0aGlzLl9pbltlXSxkZWxldGUgdGhpcy5fcHJlZHNbZV0sQ2UoenIodGhpcy5fb3V0W2VdKSxyKSxkZWxldGUgdGhpcy5fb3V0W2VdLGRlbGV0ZSB0aGlzLl9zdWNzW2VdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfXNldFBhcmVudChlLHIpe2lmKCF0aGlzLl9pc0NvbXBvdW5kKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBwYXJlbnQgaW4gYSBub24tY29tcG91bmQgZ3JhcGgiKTtpZihkcihyKSlyPUJkO2Vsc2V7cis9IiI7Zm9yKHZhciBuPXI7IWRyKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PWUpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrcisiIGFzIHBhcmVudCBvZiAiK2UrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShyKX1yZXR1cm4gdGhpcy5zZXROb2RlKGUpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpLHRoaXMuX3BhcmVudFtlXT1yLHRoaXMuX2NoaWxkcmVuW3JdW2VdPSEwLHRoaXN9X3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfXBhcmVudChlKXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgcj10aGlzLl9wYXJlbnRbZV07aWYociE9PUJkKXJldHVybiByfX1jaGlsZHJlbihlKXtpZihkcihlKSYmKGU9QmQpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciByPXRoaXMuX2NoaWxkcmVuW2VdO2lmKHIpcmV0dXJuIHpyKHIpfWVsc2V7aWYoZT09PUJkKXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX1wcmVkZWNlc3NvcnMoZSl7dmFyIHI9dGhpcy5fcHJlZHNbZV07aWYocilyZXR1cm4genIocil9c3VjY2Vzc29ycyhlKXt2YXIgcj10aGlzLl9zdWNzW2VdO2lmKHIpcmV0dXJuIHpyKHIpfW5laWdoYm9ycyhlKXt2YXIgcj10aGlzLnByZWRlY2Vzc29ycyhlKTtpZihyKXJldHVybiBaTChyLHRoaXMuc3VjY2Vzc29ycyhlKSl9aXNMZWFmKGUpe3ZhciByO3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT9yPXRoaXMuc3VjY2Vzc29ycyhlKTpyPXRoaXMubmVpZ2hib3JzKGUpLHIubGVuZ3RoPT09MH1maWx0ZXJOb2RlcyhlKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7ci5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBuPXRoaXM7Q2UodGhpcy5fbm9kZXMsZnVuY3Rpb24ocyxsKXtlKGwpJiZyLnNldE5vZGUobCxzKX0pLENlKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKHMpe3IuaGFzTm9kZShzLnYpJiZyLmhhc05vZGUocy53KSYmci5zZXRFZGdlKHMsbi5lZGdlKHMpKX0pO3ZhciBpPXt9O2Z1bmN0aW9uIGEocyl7dmFyIGw9bi5wYXJlbnQocyk7cmV0dXJuIGw9PT12b2lkIDB8fHIuaGFzTm9kZShsKT8oaVtzXT1sLGwpOmwgaW4gaT9pW2xdOmEobCl9cmV0dXJuIG8oYSwiZmluZFBhcmVudCIpLHRoaXMuX2lzQ29tcG91bmQmJkNlKHIubm9kZXMoKSxmdW5jdGlvbihzKXtyLnNldFBhcmVudChzLGEocykpfSkscn1zZXREZWZhdWx0RWRnZUxhYmVsKGUpe3JldHVybiBFaShlKXx8KGU9YnMoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9ZWRnZUNvdW50KCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH1lZGdlcygpe3JldHVybiBicih0aGlzLl9lZGdlT2Jqcyl9c2V0UGF0aChlLHIpe3ZhciBuPXRoaXMsaT1hcmd1bWVudHM7cmV0dXJuIHFyKGUsZnVuY3Rpb24oYSxzKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UoYSxzLHIpOm4uc2V0RWRnZShhLHMpLHN9KSx0aGlzfXNldEVkZ2UoKXt2YXIgZSxyLG4saSxhPSExLHM9YXJndW1lbnRzWzBdO3R5cGVvZiBzPT0ib2JqZWN0IiYmcyE9PW51bGwmJiJ2ImluIHM/KGU9cy52LHI9cy53LG49cy5uYW1lLGFyZ3VtZW50cy5sZW5ndGg9PT0yJiYoaT1hcmd1bWVudHNbMV0sYT0hMCkpOihlPXMscj1hcmd1bWVudHNbMV0sbj1hcmd1bWVudHNbM10sYXJndW1lbnRzLmxlbmd0aD4yJiYoaT1hcmd1bWVudHNbMl0sYT0hMCkpLGU9IiIrZSxyPSIiK3IsZHIobil8fChuPSIiK24pO3ZhciBsPU12KHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9lZGdlTGFiZWxzLGwpKXJldHVybiBhJiYodGhpcy5fZWRnZUxhYmVsc1tsXT1pKSx0aGlzO2lmKCFkcihuKSYmIXRoaXMuX2lzTXVsdGlncmFwaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgYSBuYW1lZCBlZGdlIHdoZW4gaXNNdWx0aWdyYXBoID0gZmFsc2UiKTt0aGlzLnNldE5vZGUoZSksdGhpcy5zZXROb2RlKHIpLHRoaXMuX2VkZ2VMYWJlbHNbbF09YT9pOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbihlLHIsbik7dmFyIHU9QkllKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiBlPXUudixyPXUudyxPYmplY3QuZnJlZXplKHUpLHRoaXMuX2VkZ2VPYmpzW2xdPXUsb25lKHRoaXMuX3ByZWRzW3JdLGUpLG9uZSh0aGlzLl9zdWNzW2VdLHIpLHRoaXMuX2luW3JdW2xdPXUsdGhpcy5fb3V0W2VdW2xdPXUsdGhpcy5fZWRnZUNvdW50KyssdGhpc31lZGdlKGUscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPT09MT9KTCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6TXYodGhpcy5faXNEaXJlY3RlZCxlLHIsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbaV19aGFzRWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/SkwodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOk12KHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZWRnZUxhYmVscyxpKX1yZW1vdmVFZGdlKGUscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPT09MT9KTCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6TXYodGhpcy5faXNEaXJlY3RlZCxlLHIsbiksYT10aGlzLl9lZGdlT2Jqc1tpXTtyZXR1cm4gYSYmKGU9YS52LHI9YS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW2ldLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tpXSxsbmUodGhpcy5fcHJlZHNbcl0sZSksbG5lKHRoaXMuX3N1Y3NbZV0sciksZGVsZXRlIHRoaXMuX2luW3JdW2ldLGRlbGV0ZSB0aGlzLl9vdXRbZV1baV0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhlLHIpe3ZhciBuPXRoaXMuX2luW2VdO2lmKG4pe3ZhciBpPWJyKG4pO3JldHVybiByP1lyKGksZnVuY3Rpb24oYSl7cmV0dXJuIGEudj09PXJ9KTppfX1vdXRFZGdlcyhlLHIpe3ZhciBuPXRoaXMuX291dFtlXTtpZihuKXt2YXIgaT1icihuKTtyZXR1cm4gcj9ZcihpLGZ1bmN0aW9uKGEpe3JldHVybiBhLnc9PT1yfSk6aX19bm9kZUVkZ2VzKGUscil7dmFyIG49dGhpcy5pbkVkZ2VzKGUscik7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyhlLHIpKX19O01yLnByb3RvdHlwZS5fbm9kZUNvdW50PTA7TXIucHJvdG90eXBlLl9lZGdlQ291bnQ9MDtvKG9uZSwiaW5jcmVtZW50T3JJbml0RW50cnkiKTtvKGxuZSwiZGVjcmVtZW50T3JSZW1vdmVFbnRyeSIpO28oTXYsImVkZ2VBcmdzVG9JZCIpO28oQkllLCJlZGdlQXJnc1RvT2JqIik7byhKTCwiZWRnZU9ialRvSWQiKX0pO3ZhciBOcz1NKCgpPT57InVzZSBzdHJpY3QiO3JUKCl9KTtmdW5jdGlvbiBjbmUodCl7dC5fcHJldi5fbmV4dD10Ll9uZXh0LHQuX25leHQuX3ByZXY9dC5fcHJldixkZWxldGUgdC5fbmV4dCxkZWxldGUgdC5fcHJldn1mdW5jdGlvbiBGSWUodCxlKXtpZih0IT09Il9uZXh0IiYmdCE9PSJfcHJldiIpcmV0dXJuIGV9dmFyIG5ULHVuZT1NKCgpPT57InVzZSBzdHJpY3QiO25UPWNsYXNze3N0YXRpY3tvKHRoaXMsIkxpc3QiKX1jb25zdHJ1Y3Rvcigpe3ZhciBlPXt9O2UuX25leHQ9ZS5fcHJldj1lLHRoaXMuX3NlbnRpbmVsPWV9ZGVxdWV1ZSgpe3ZhciBlPXRoaXMuX3NlbnRpbmVsLHI9ZS5fcHJldjtpZihyIT09ZSlyZXR1cm4gY25lKHIpLHJ9ZW5xdWV1ZShlKXt2YXIgcj10aGlzLl9zZW50aW5lbDtlLl9wcmV2JiZlLl9uZXh0JiZjbmUoZSksZS5fbmV4dD1yLl9uZXh0LHIuX25leHQuX3ByZXY9ZSxyLl9uZXh0PWUsZS5fcHJldj1yfXRvU3RyaW5nKCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5fc2VudGluZWwsbj1yLl9wcmV2O24hPT1yOyllLnB1c2goSlNPTi5zdHJpbmdpZnkobixGSWUpKSxuPW4uX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9fTtvKGNuZSwidW5saW5rIik7byhGSWUsImZpbHRlck91dExpbmtzIil9KTtmdW5jdGlvbiBobmUodCxlKXtpZih0Lm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciByPSRJZSh0LGV8fHpJZSksbj1HSWUoci5ncmFwaCxyLmJ1Y2tldHMsci56ZXJvSWR4KTtyZXR1cm4gV3IoSmUobixmdW5jdGlvbihpKXtyZXR1cm4gdC5vdXRFZGdlcyhpLnYsaS53KX0pKX1mdW5jdGlvbiBHSWUodCxlLHIpe2Zvcih2YXIgbj1bXSxpPWVbZS5sZW5ndGgtMV0sYT1lWzBdLHM7dC5ub2RlQ291bnQoKTspe2Zvcig7cz1hLmRlcXVldWUoKTspZUQodCxlLHIscyk7Zm9yKDtzPWkuZGVxdWV1ZSgpOyllRCh0LGUscixzKTtpZih0Lm5vZGVDb3VudCgpKXtmb3IodmFyIGw9ZS5sZW5ndGgtMjtsPjA7LS1sKWlmKHM9ZVtsXS5kZXF1ZXVlKCkscyl7bj1uLmNvbmNhdChlRCh0LGUscixzLCEwKSk7YnJlYWt9fX1yZXR1cm4gbn1mdW5jdGlvbiBlRCh0LGUscixuLGkpe3ZhciBhPWk/W106dm9pZCAwO3JldHVybiBDZSh0LmluRWRnZXMobi52KSxmdW5jdGlvbihzKXt2YXIgbD10LmVkZ2UocyksdT10Lm5vZGUocy52KTtpJiZhLnB1c2goe3Y6cy52LHc6cy53fSksdS5vdXQtPWwsdEQoZSxyLHUpfSksQ2UodC5vdXRFZGdlcyhuLnYpLGZ1bmN0aW9uKHMpe3ZhciBsPXQuZWRnZShzKSx1PXMudyxoPXQubm9kZSh1KTtoLmluLT1sLHREKGUscixoKX0pLHQucmVtb3ZlTm9kZShuLnYpLGF9ZnVuY3Rpb24gJEllKHQsZSl7dmFyIHI9bmV3IE1yLG49MCxpPTA7Q2UodC5ub2RlcygpLGZ1bmN0aW9uKGwpe3Iuc2V0Tm9kZShsLHt2OmwsaW46MCxvdXQ6MH0pfSksQ2UodC5lZGdlcygpLGZ1bmN0aW9uKGwpe3ZhciB1PXIuZWRnZShsLnYsbC53KXx8MCxoPWUobCksZj11K2g7ci5zZXRFZGdlKGwudixsLncsZiksaT1NYXRoLm1heChpLHIubm9kZShsLnYpLm91dCs9aCksbj1NYXRoLm1heChuLHIubm9kZShsLncpLmluKz1oKX0pO3ZhciBhPVVvKGkrbiszKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG5UfSkscz1uKzE7cmV0dXJuIENlKHIubm9kZXMoKSxmdW5jdGlvbihsKXt0RChhLHMsci5ub2RlKGwpKX0pLHtncmFwaDpyLGJ1Y2tldHM6YSx6ZXJvSWR4OnN9fWZ1bmN0aW9uIHREKHQsZSxyKXtyLm91dD9yLmluP3Rbci5vdXQtci5pbitlXS5lbnF1ZXVlKHIpOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShyKTp0WzBdLmVucXVldWUocil9dmFyIHpJZSxmbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO05zKCk7dW5lKCk7ekllPWJzKDEpO28oaG5lLCJncmVlZHlGQVMiKTtvKEdJZSwiZG9HcmVlZHlGQVMiKTtvKGVELCJyZW1vdmVOb2RlIik7bygkSWUsImJ1aWxkU3RhdGUiKTtvKHRELCJhc3NpZ25CdWNrZXQiKX0pO2Z1bmN0aW9uIGRuZSh0KXt2YXIgZT10LmdyYXBoKCkuYWN5Y2xpY2VyPT09ImdyZWVkeSI/aG5lKHQscih0KSk6VkllKHQpO0NlKGUsZnVuY3Rpb24obil7dmFyIGk9dC5lZGdlKG4pO3QucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLHQuc2V0RWRnZShuLncsbi52LGksUGQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX1vKHIsIndlaWdodEZuIil9ZnVuY3Rpb24gVkllKHQpe3ZhciBlPVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKGEpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGEpfHwoblthXT0hMCxyW2FdPSEwLENlKHQub3V0RWRnZXMoYSksZnVuY3Rpb24ocyl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIscy53KT9lLnB1c2gocyk6aShzLncpfSksZGVsZXRlIHJbYV0pfXJldHVybiBvKGksImRmcyIpLENlKHQubm9kZXMoKSxpKSxlfWZ1bmN0aW9uIHBuZSh0KXtDZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKHIucmV2ZXJzZWQpe3QucmVtb3ZlRWRnZShlKTt2YXIgbj1yLmZvcndhcmROYW1lO2RlbGV0ZSByLnJldmVyc2VkLGRlbGV0ZSByLmZvcndhcmROYW1lLHQuc2V0RWRnZShlLncsZS52LHIsbil9fSl9dmFyIHJEPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtmbmUoKTtvKGRuZSwicnVuIik7byhWSWUsImRmc0ZBUyIpO28ocG5lLCJ1bmRvIil9KTtmdW5jdGlvbiBFYyh0LGUscixuKXt2YXIgaTtkbyBpPVBkKG4pO3doaWxlKHQuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9ZSx0LnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIGduZSh0KXt2YXIgZT1uZXcgTXIoKS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiBDZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7ZS5zZXROb2RlKHIsdC5ub2RlKHIpKX0pLENlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uoci52LHIudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uocik7ZS5zZXRFZGdlKHIudixyLncse3dlaWdodDpuLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgobi5taW5sZW4saS5taW5sZW4pfSl9KSxlfWZ1bmN0aW9uIGlUKHQpe3ZhciBlPW5ldyBNcih7bXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gQ2UodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3QuY2hpbGRyZW4ocikubGVuZ3RofHxlLnNldE5vZGUocix0Lm5vZGUocikpfSksQ2UodC5lZGdlcygpLGZ1bmN0aW9uKHIpe2Uuc2V0RWRnZShyLHQuZWRnZShyKSl9KSxlfWZ1bmN0aW9uIG5EKHQsZSl7dmFyIHI9dC54LG49dC55LGk9ZS54LXIsYT1lLnktbixzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzI7aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIHUsaDtyZXR1cm4gTWF0aC5hYnMoYSkqcz5NYXRoLmFicyhpKSpsPyhhPDAmJihsPS1sKSx1PWwqaS9hLGg9bCk6KGk8MCYmKHM9LXMpLHU9cyxoPXMqYS9pKSx7eDpyK3UseTpuK2h9fWZ1bmN0aW9uIEtoKHQpe3ZhciBlPUplKFVvKGFEKHQpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gQ2UodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKSxpPW4ucmFuaztkcihpKXx8KGVbaV1bbi5vcmRlcl09cil9KSxlfWZ1bmN0aW9uIHluZSh0KXt2YXIgZT1ObChKZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIHQubm9kZShyKS5yYW5rfSkpO0NlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUocik7SXQobiwicmFuayIpJiYobi5yYW5rLT1lKX0pfWZ1bmN0aW9uIHZuZSh0KXt2YXIgZT1ObChKZSh0Lm5vZGVzKCksZnVuY3Rpb24oYSl7cmV0dXJuIHQubm9kZShhKS5yYW5rfSkpLHI9W107Q2UodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBzPXQubm9kZShhKS5yYW5rLWU7cltzXXx8KHJbc109W10pLHJbc10ucHVzaChhKX0pO3ZhciBuPTAsaT10LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7Q2UocixmdW5jdGlvbihhLHMpe2RyKGEpJiZzJWkhPT0wPy0tbjpuJiZDZShhLGZ1bmN0aW9uKGwpe3Qubm9kZShsKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBpRCh0LGUscixuKXt2YXIgaT17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihpLnJhbms9cixpLm9yZGVyPW4pLEVjKHQsImJvcmRlciIsaSxlKX1mdW5jdGlvbiBhRCh0KXtyZXR1cm4gTHMoSmUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKS5yYW5rO2lmKCFkcihyKSlyZXR1cm4gcn0pKX1mdW5jdGlvbiB4bmUodCxlKXt2YXIgcj17bGhzOltdLHJoczpbXX07cmV0dXJuIENlKHQsZnVuY3Rpb24obil7ZShuKT9yLmxocy5wdXNoKG4pOnIucmhzLnB1c2gobil9KSxyfWZ1bmN0aW9uIGJuZSh0LGUpe3ZhciByPVZ3KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoVncoKS1yKSsibXMiKX19ZnVuY3Rpb24gd25lKHQsZSl7cmV0dXJuIGUoKX12YXIgU2M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO05zKCk7byhFYywiYWRkRHVtbXlOb2RlIik7byhnbmUsInNpbXBsaWZ5Iik7byhpVCwiYXNOb25Db21wb3VuZEdyYXBoIik7byhuRCwiaW50ZXJzZWN0UmVjdCIpO28oS2gsImJ1aWxkTGF5ZXJNYXRyaXgiKTtvKHluZSwibm9ybWFsaXplUmFua3MiKTtvKHZuZSwicmVtb3ZlRW1wdHlSYW5rcyIpO28oaUQsImFkZEJvcmRlck5vZGUiKTtvKGFELCJtYXhSYW5rIik7byh4bmUsInBhcnRpdGlvbiIpO28oYm5lLCJ0aW1lIik7byh3bmUsIm5vdGltZSIpfSk7ZnVuY3Rpb24ga25lKHQpe2Z1bmN0aW9uIGUocil7dmFyIG49dC5jaGlsZHJlbihyKSxpPXQubm9kZShyKTtpZihuLmxlbmd0aCYmQ2UobixlKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSwibWluUmFuayIpKXtpLmJvcmRlckxlZnQ9W10saS5ib3JkZXJSaWdodD1bXTtmb3IodmFyIGE9aS5taW5SYW5rLHM9aS5tYXhSYW5rKzE7YTxzOysrYSlUbmUodCwiYm9yZGVyTGVmdCIsIl9ibCIscixpLGEpLFRuZSh0LCJib3JkZXJSaWdodCIsIl9iciIscixpLGEpfX1vKGUsImRmcyIpLENlKHQuY2hpbGRyZW4oKSxlKX1mdW5jdGlvbiBUbmUodCxlLHIsbixpLGEpe3ZhciBzPXt3aWR0aDowLGhlaWdodDowLHJhbms6YSxib3JkZXJUeXBlOmV9LGw9aVtlXVthLTFdLHU9RWModCwiYm9yZGVyIixzLHIpO2lbZV1bYV09dSx0LnNldFBhcmVudCh1LG4pLGwmJnQuc2V0RWRnZShsLHUse3dlaWdodDoxfSl9dmFyIEVuZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7U2MoKTtvKGtuZSwiYWRkQm9yZGVyU2VnbWVudHMiKTtvKFRuZSwiYWRkQm9yZGVyTm9kZSIpfSk7ZnVuY3Rpb24gQ25lKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGU9PT0ibHIifHxlPT09InJsIikmJl9uZSh0KX1mdW5jdGlvbiBBbmUodCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsoZT09PSJidCJ8fGU9PT0icmwiKSYmVUllKHQpLChlPT09ImxyInx8ZT09PSJybCIpJiYoSEllKHQpLF9uZSh0KSl9ZnVuY3Rpb24gX25lKHQpe0NlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtTbmUodC5ub2RlKGUpKX0pLENlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtTbmUodC5lZGdlKGUpKX0pfWZ1bmN0aW9uIFNuZSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBVSWUodCl7Q2UodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3NEKHQubm9kZShlKSl9KSxDZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO0NlKHIucG9pbnRzLHNEKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieSIpJiZzRChyKX0pfWZ1bmN0aW9uIHNEKHQpe3QueT0tdC55fWZ1bmN0aW9uIEhJZSh0KXtDZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7b0QodC5ub2RlKGUpKX0pLENlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSk7Q2Uoci5wb2ludHMsb0QpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJ4IikmJm9EKHIpfSl9ZnVuY3Rpb24gb0QodCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dmFyIExuZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhDbmUsImFkanVzdCIpO28oQW5lLCJ1bmRvIik7byhfbmUsInN3YXBXaWR0aEhlaWdodCIpO28oU25lLCJzd2FwV2lkdGhIZWlnaHRPbmUiKTtvKFVJZSwicmV2ZXJzZVkiKTtvKHNELCJyZXZlcnNlWU9uZSIpO28oSEllLCJzd2FwWFkiKTtvKG9ELCJzd2FwWFlPbmUiKX0pO2Z1bmN0aW9uIERuZSh0KXt0LmdyYXBoKCkuZHVtbXlDaGFpbnM9W10sQ2UodC5lZGdlcygpLGZ1bmN0aW9uKGUpe1lJZSh0LGUpfSl9ZnVuY3Rpb24gWUllKHQsZSl7dmFyIHI9ZS52LG49dC5ub2RlKHIpLnJhbmssaT1lLncsYT10Lm5vZGUoaSkucmFuayxzPWUubmFtZSxsPXQuZWRnZShlKSx1PWwubGFiZWxSYW5rO2lmKGEhPT1uKzEpe3QucmVtb3ZlRWRnZShlKTt2YXIgaD12b2lkIDAsZixkO2ZvcihkPTAsKytuO248YTsrK2QsKytuKWwucG9pbnRzPVtdLGg9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmwsZWRnZU9iajplLHJhbms6bn0sZj1FYyh0LCJlZGdlIixoLCJfZCIpLG49PT11JiYoaC53aWR0aD1sLndpZHRoLGguaGVpZ2h0PWwuaGVpZ2h0LGguZHVtbXk9ImVkZ2UtbGFiZWwiLGgubGFiZWxwb3M9bC5sYWJlbHBvcyksdC5zZXRFZGdlKHIsZix7d2VpZ2h0Omwud2VpZ2h0fSxzKSxkPT09MCYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goZikscj1mO3Quc2V0RWRnZShyLGkse3dlaWdodDpsLndlaWdodH0scyl9fWZ1bmN0aW9uIE5uZSh0KXtDZSh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpLG49ci5lZGdlTGFiZWwsaTtmb3IodC5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPXQuc3VjY2Vzc29ycyhlKVswXSx0LnJlbW92ZU5vZGUoZSksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksZT1pLHI9dC5ub2RlKGUpfSl9dmFyIGxEPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtTYygpO28oRG5lLCJydW4iKTtvKFlJZSwibm9ybWFsaXplRWRnZSIpO28oTm5lLCJ1bmRvIil9KTtmdW5jdGlvbiBJdih0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4pe3ZhciBpPXQubm9kZShuKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSlyZXR1cm4gaS5yYW5rO2Vbbl09ITA7dmFyIGE9TmwoSmUodC5vdXRFZGdlcyhuKSxmdW5jdGlvbihzKXtyZXR1cm4gcihzLncpLXQuZWRnZShzKS5taW5sZW59KSk7cmV0dXJuKGE9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fGE9PT12b2lkIDB8fGE9PT1udWxsKSYmKGE9MCksaS5yYW5rPWF9byhyLCJkZnMiKSxDZSh0LnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBGZCh0LGUpe3JldHVybiB0Lm5vZGUoZS53KS5yYW5rLXQubm9kZShlLnYpLnJhbmstdC5lZGdlKGUpLm1pbmxlbn12YXIgYVQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oSXYsImxvbmdlc3RQYXRoIik7byhGZCwic2xhY2siKX0pO2Z1bmN0aW9uIHNUKHQpe3ZhciBlPW5ldyBNcih7ZGlyZWN0ZWQ6ITF9KSxyPXQubm9kZXMoKVswXSxuPXQubm9kZUNvdW50KCk7ZS5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxhO3FJZShlLHQpPG47KWk9WEllKGUsdCksYT1lLmhhc05vZGUoaS52KT9GZCh0LGkpOi1GZCh0LGkpLGpJZShlLHQsYSk7cmV0dXJuIGV9ZnVuY3Rpb24gcUllKHQsZSl7ZnVuY3Rpb24gcihuKXtDZShlLm5vZGVFZGdlcyhuKSxmdW5jdGlvbihpKXt2YXIgYT1pLnYscz1uPT09YT9pLnc6YTshdC5oYXNOb2RlKHMpJiYhRmQoZSxpKSYmKHQuc2V0Tm9kZShzLHt9KSx0LnNldEVkZ2UobixzLHt9KSxyKHMpKX0pfXJldHVybiBvKHIsImRmcyIpLENlKHQubm9kZXMoKSxyKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIFhJZSh0LGUpe3JldHVybiBJZChlLmVkZ2VzKCksZnVuY3Rpb24ocil7aWYodC5oYXNOb2RlKHIudikhPT10Lmhhc05vZGUoci53KSlyZXR1cm4gRmQoZSxyKX0pfWZ1bmN0aW9uIGpJZSh0LGUscil7Q2UodC5ub2RlcygpLGZ1bmN0aW9uKG4pe2Uubm9kZShuKS5yYW5rKz1yfSl9dmFyIGNEPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtOcygpO2FUKCk7byhzVCwiZmVhc2libGVUcmVlIik7byhxSWUsInRpZ2h0VHJlZSIpO28oWEllLCJmaW5kTWluU2xhY2tFZGdlIik7byhqSWUsInNoaWZ0UmFua3MiKX0pO3ZhciBNbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciB1RD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyICRZdCxoRD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7dUQoKTskWXQ9YnMoMSl9KTt2YXIgSW5lPU0oKCk9PnsidXNlIHN0cmljdCI7aEQoKX0pO3ZhciBmRD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIE9uZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZEKCl9KTt2YXIgWll0LFBuZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7Wll0PWJzKDEpfSk7ZnVuY3Rpb24gZEQodCl7dmFyIGU9e30scj17fSxuPVtdO2Z1bmN0aW9uIGkoYSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsYSkpdGhyb3cgbmV3IE92O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGEpfHwoclthXT0hMCxlW2FdPSEwLENlKHQucHJlZGVjZXNzb3JzKGEpLGkpLGRlbGV0ZSByW2FdLG4ucHVzaChhKSl9aWYobyhpLCJ2aXNpdCIpLENlKHQuc2lua3MoKSxpKSxRTChlKSE9PXQubm9kZUNvdW50KCkpdGhyb3cgbmV3IE92O3JldHVybiBufWZ1bmN0aW9uIE92KCl7fXZhciBwRD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7ZEQuQ3ljbGVFeGNlcHRpb249T3Y7byhkRCwidG9wc29ydCIpO28oT3YsIkN5Y2xlRXhjZXB0aW9uIik7T3YucHJvdG90eXBlPW5ldyBFcnJvcn0pO3ZhciBCbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwRCgpfSk7ZnVuY3Rpb24gb1QodCxlLHIpe010KGUpfHwoZT1bZV0pO3ZhciBuPSh0LmlzRGlyZWN0ZWQoKT90LnN1Y2Nlc3NvcnM6dC5uZWlnaGJvcnMpLmJpbmQodCksaT1bXSxhPXt9O3JldHVybiBDZShlLGZ1bmN0aW9uKHMpe2lmKCF0Lmhhc05vZGUocykpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrcyk7Rm5lKHQscyxyPT09InBvc3QiLGEsbixpKX0pLGl9ZnVuY3Rpb24gRm5lKHQsZSxyLG4saSxhKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixlKXx8KG5bZV09ITAscnx8YS5wdXNoKGUpLENlKGkoZSksZnVuY3Rpb24ocyl7Rm5lKHQscyxyLG4saSxhKX0pLHImJmEucHVzaChlKSl9dmFyIG1EPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKG9ULCJkZnMiKTtvKEZuZSwiZG9EZnMiKX0pO2Z1bmN0aW9uIGdEKHQsZSl7cmV0dXJuIG9UKHQsZSwicG9zdCIpfXZhciB6bmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttRCgpO28oZ0QsInBvc3RvcmRlciIpfSk7ZnVuY3Rpb24geUQodCxlKXtyZXR1cm4gb1QodCxlLCJwcmUiKX12YXIgR25lPU0oKCk9PnsidXNlIHN0cmljdCI7bUQoKTtvKHlELCJwcmVvcmRlciIpfSk7dmFyICRuZT1NKCgpPT57InVzZSBzdHJpY3QiO3VEKCk7clQoKX0pO3ZhciBWbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNbmUoKTtoRCgpO0luZSgpO09uZSgpO1BuZSgpO0JuZSgpO3puZSgpO0duZSgpOyRuZSgpO2ZEKCk7cEQoKX0pO2Z1bmN0aW9uIFpoKHQpe3Q9Z25lKHQpLEl2KHQpO3ZhciBlPXNUKHQpO3hEKGUpLHZEKGUsdCk7Zm9yKHZhciByLG47cj1ZbmUoZSk7KW49cW5lKGUsdCxyKSxYbmUoZSx0LHIsbil9ZnVuY3Rpb24gdkQodCxlKXt2YXIgcj1nRCh0LHQubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksQ2UocixmdW5jdGlvbihuKXtlT2UodCxlLG4pfSl9ZnVuY3Rpb24gZU9lKHQsZSxyKXt2YXIgbj10Lm5vZGUociksaT1uLnBhcmVudDt0LmVkZ2UocixpKS5jdXR2YWx1ZT1IbmUodCxlLHIpfWZ1bmN0aW9uIEhuZSh0LGUscil7dmFyIG49dC5ub2RlKHIpLGk9bi5wYXJlbnQsYT0hMCxzPWUuZWRnZShyLGkpLGw9MDtyZXR1cm4gc3x8KGE9ITEscz1lLmVkZ2UoaSxyKSksbD1zLndlaWdodCxDZShlLm5vZGVFZGdlcyhyKSxmdW5jdGlvbih1KXt2YXIgaD11LnY9PT1yLGY9aD91Lnc6dS52O2lmKGYhPT1pKXt2YXIgZD1oPT09YSxwPWUuZWRnZSh1KS53ZWlnaHQ7aWYobCs9ZD9wOi1wLHJPZSh0LHIsZikpe3ZhciBtPXQuZWRnZShyLGYpLmN1dHZhbHVlO2wrPWQ/LW06bX19fSksbH1mdW5jdGlvbiB4RCh0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dC5ub2RlcygpWzBdKSxXbmUodCx7fSwxLGUpfWZ1bmN0aW9uIFduZSh0LGUscixuLGkpe3ZhciBhPXIscz10Lm5vZGUobik7cmV0dXJuIGVbbl09ITAsQ2UodC5uZWlnaGJvcnMobiksZnVuY3Rpb24obCl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbCl8fChyPVduZSh0LGUscixsLG4pKX0pLHMubG93PWEscy5saW09cisrLGk/cy5wYXJlbnQ9aTpkZWxldGUgcy5wYXJlbnQscn1mdW5jdGlvbiBZbmUodCl7cmV0dXJuIFphKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBxbmUodCxlLHIpe3ZhciBuPXIudixpPXIudztlLmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgYT10Lm5vZGUobikscz10Lm5vZGUoaSksbD1hLHU9ITE7YS5saW0+cy5saW0mJihsPXMsdT0hMCk7dmFyIGg9WXIoZS5lZGdlcygpLGZ1bmN0aW9uKGYpe3JldHVybiB1PT09VW5lKHQsdC5ub2RlKGYudiksbCkmJnUhPT1VbmUodCx0Lm5vZGUoZi53KSxsKX0pO3JldHVybiBJZChoLGZ1bmN0aW9uKGYpe3JldHVybiBGZChlLGYpfSl9ZnVuY3Rpb24gWG5lKHQsZSxyLG4pe3ZhciBpPXIudixhPXIudzt0LnJlbW92ZUVkZ2UoaSxhKSx0LnNldEVkZ2Uobi52LG4udyx7fSkseEQodCksdkQodCxlKSx0T2UodCxlKX1mdW5jdGlvbiB0T2UodCxlKXt2YXIgcj1aYSh0Lm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIWUubm9kZShpKS5wYXJlbnR9KSxuPXlEKHQscik7bj1uLnNsaWNlKDEpLENlKG4sZnVuY3Rpb24oaSl7dmFyIGE9dC5ub2RlKGkpLnBhcmVudCxzPWUuZWRnZShpLGEpLGw9ITE7c3x8KHM9ZS5lZGdlKGEsaSksbD0hMCksZS5ub2RlKGkpLnJhbms9ZS5ub2RlKGEpLnJhbmsrKGw/cy5taW5sZW46LXMubWlubGVuKX0pfWZ1bmN0aW9uIHJPZSh0LGUscil7cmV0dXJuIHQuaGFzRWRnZShlLHIpfWZ1bmN0aW9uIFVuZSh0LGUscil7cmV0dXJuIHIubG93PD1lLmxpbSYmZS5saW08PXIubGltfXZhciBqbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO1ZuZSgpO1NjKCk7Y0QoKTthVCgpO1poLmluaXRMb3dMaW1WYWx1ZXM9eEQ7WmguaW5pdEN1dFZhbHVlcz12RDtaaC5jYWxjQ3V0VmFsdWU9SG5lO1poLmxlYXZlRWRnZT1ZbmU7WmguZW50ZXJFZGdlPXFuZTtaaC5leGNoYW5nZUVkZ2VzPVhuZTtvKFpoLCJuZXR3b3JrU2ltcGxleCIpO28odkQsImluaXRDdXRWYWx1ZXMiKTtvKGVPZSwiYXNzaWduQ3V0VmFsdWUiKTtvKEhuZSwiY2FsY0N1dFZhbHVlIik7byh4RCwiaW5pdExvd0xpbVZhbHVlcyIpO28oV25lLCJkZnNBc3NpZ25Mb3dMaW0iKTtvKFluZSwibGVhdmVFZGdlIik7byhxbmUsImVudGVyRWRnZSIpO28oWG5lLCJleGNoYW5nZUVkZ2VzIik7byh0T2UsInVwZGF0ZVJhbmtzIik7byhyT2UsImlzVHJlZUVkZ2UiKTtvKFVuZSwiaXNEZXNjZW5kYW50Iil9KTtmdW5jdGlvbiBiRCh0KXtzd2l0Y2godC5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOktuZSh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOmlPZSh0KTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6bk9lKHQpO2JyZWFrO2RlZmF1bHQ6S25lKHQpfX1mdW5jdGlvbiBpT2UodCl7SXYodCksc1QodCl9ZnVuY3Rpb24gS25lKHQpe1poKHQpfXZhciBuT2Usd0Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjRCgpO2puZSgpO2FUKCk7byhiRCwicmFuayIpO25PZT1JdjtvKGlPZSwidGlnaHRUcmVlUmFua2VyIik7byhLbmUsIm5ldHdvcmtTaW1wbGV4UmFua2VyIil9KTtmdW5jdGlvbiBRbmUodCl7dmFyIGU9RWModCwicm9vdCIse30sIl9yb290Iikscj1hT2UodCksbj1McyhicihyKSktMSxpPTIqbisxO3QuZ3JhcGgoKS5uZXN0aW5nUm9vdD1lLENlKHQuZWRnZXMoKSxmdW5jdGlvbihzKXt0LmVkZ2UocykubWlubGVuKj1pfSk7dmFyIGE9c09lKHQpKzE7Q2UodC5jaGlsZHJlbigpLGZ1bmN0aW9uKHMpe1puZSh0LGUsaSxhLG4scixzKX0pLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1pfWZ1bmN0aW9uIFpuZSh0LGUscixuLGksYSxzKXt2YXIgbD10LmNoaWxkcmVuKHMpO2lmKCFsLmxlbmd0aCl7cyE9PWUmJnQuc2V0RWRnZShlLHMse3dlaWdodDowLG1pbmxlbjpyfSk7cmV0dXJufXZhciB1PWlEKHQsIl9idCIpLGg9aUQodCwiX2JiIiksZj10Lm5vZGUocyk7dC5zZXRQYXJlbnQodSxzKSxmLmJvcmRlclRvcD11LHQuc2V0UGFyZW50KGgscyksZi5ib3JkZXJCb3R0b209aCxDZShsLGZ1bmN0aW9uKGQpe1puZSh0LGUscixuLGksYSxkKTt2YXIgcD10Lm5vZGUoZCksbT1wLmJvcmRlclRvcD9wLmJvcmRlclRvcDpkLGc9cC5ib3JkZXJCb3R0b20/cC5ib3JkZXJCb3R0b206ZCx5PXAuYm9yZGVyVG9wP246MipuLHY9bSE9PWc/MTppLWFbc10rMTt0LnNldEVkZ2UodSxtLHt3ZWlnaHQ6eSxtaW5sZW46dixuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShnLGgse3dlaWdodDp5LG1pbmxlbjp2LG5lc3RpbmdFZGdlOiEwfSl9KSx0LnBhcmVudChzKXx8dC5zZXRFZGdlKGUsdSx7d2VpZ2h0OjAsbWlubGVuOmkrYVtzXX0pfWZ1bmN0aW9uIGFPZSh0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4saSl7dmFyIGE9dC5jaGlsZHJlbihuKTthJiZhLmxlbmd0aCYmQ2UoYSxmdW5jdGlvbihzKXtyKHMsaSsxKX0pLGVbbl09aX1yZXR1cm4gbyhyLCJkZnMiKSxDZSh0LmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksZX1mdW5jdGlvbiBzT2UodCl7cmV0dXJuIHFyKHQuZWRnZXMoKSxmdW5jdGlvbihlLHIpe3JldHVybiBlK3QuZWRnZShyKS53ZWlnaHR9LDApfWZ1bmN0aW9uIEpuZSh0KXt2YXIgZT10LmdyYXBoKCk7dC5yZW1vdmVOb2RlKGUubmVzdGluZ1Jvb3QpLGRlbGV0ZSBlLm5lc3RpbmdSb290LENlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmdC5yZW1vdmVFZGdlKHIpfSl9dmFyIGVpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7U2MoKTtvKFFuZSwicnVuIik7byhabmUsImRmcyIpO28oYU9lLCJ0cmVlRGVwdGhzIik7byhzT2UsInN1bVdlaWdodHMiKTtvKEpuZSwiY2xlYW51cCIpfSk7ZnVuY3Rpb24gdGllKHQsZSxyKXt2YXIgbj17fSxpO0NlKHIsZnVuY3Rpb24oYSl7Zm9yKHZhciBzPXQucGFyZW50KGEpLGwsdTtzOyl7aWYobD10LnBhcmVudChzKSxsPyh1PW5bbF0sbltsXT1zKToodT1pLGk9cyksdSYmdSE9PXMpe2Uuc2V0RWRnZSh1LHMpO3JldHVybn1zPWx9fSl9dmFyIHJpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byh0aWUsImFkZFN1YmdyYXBoQ29uc3RyYWludHMiKX0pO2Z1bmN0aW9uIG5pZSh0LGUscil7dmFyIG49bE9lKHQpLGk9bmV3IE1yKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKGEpe3JldHVybiB0Lm5vZGUoYSl9KTtyZXR1cm4gQ2UodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBzPXQubm9kZShhKSxsPXQucGFyZW50KGEpOyhzLnJhbms9PT1lfHxzLm1pblJhbms8PWUmJmU8PXMubWF4UmFuaykmJihpLnNldE5vZGUoYSksaS5zZXRQYXJlbnQoYSxsfHxuKSxDZSh0W3JdKGEpLGZ1bmN0aW9uKHUpe3ZhciBoPXUudj09PWE/dS53OnUudixmPWkuZWRnZShoLGEpLGQ9ZHIoZik/MDpmLndlaWdodDtpLnNldEVkZ2UoaCxhLHt3ZWlnaHQ6dC5lZGdlKHUpLndlaWdodCtkfSl9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywibWluUmFuayIpJiZpLnNldE5vZGUoYSx7Ym9yZGVyTGVmdDpzLmJvcmRlckxlZnRbZV0sYm9yZGVyUmlnaHQ6cy5ib3JkZXJSaWdodFtlXX0pKX0pLGl9ZnVuY3Rpb24gbE9lKHQpe2Zvcih2YXIgZTt0Lmhhc05vZGUoZT1QZCgiX3Jvb3QiKSk7KTtyZXR1cm4gZX12YXIgaWllPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtOcygpO28obmllLCJidWlsZExheWVyR3JhcGgiKTtvKGxPZSwiY3JlYXRlUm9vdE5vZGUiKX0pO2Z1bmN0aW9uIGFpZSh0LGUpe2Zvcih2YXIgcj0wLG49MTtuPGUubGVuZ3RoOysrbilyKz1jT2UodCxlW24tMV0sZVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gY09lKHQsZSxyKXtmb3IodmFyIG49dFQocixKZShyLGZ1bmN0aW9uKGgsZil7cmV0dXJuIGZ9KSksaT1XcihKZShlLGZ1bmN0aW9uKGgpe3JldHVybiBrYyhKZSh0Lm91dEVkZ2VzKGgpLGZ1bmN0aW9uKGYpe3JldHVybntwb3M6bltmLnddLHdlaWdodDp0LmVkZ2UoZikud2VpZ2h0fX0pLCJwb3MiKX0pKSxhPTE7YTxyLmxlbmd0aDspYTw8PTE7dmFyIHM9MiphLTE7YS09MTt2YXIgbD1KZShuZXcgQXJyYXkocyksZnVuY3Rpb24oKXtyZXR1cm4gMH0pLHU9MDtyZXR1cm4gQ2UoaS5mb3JFYWNoKGZ1bmN0aW9uKGgpe3ZhciBmPWgucG9zK2E7bFtmXSs9aC53ZWlnaHQ7Zm9yKHZhciBkPTA7Zj4wOylmJTImJihkKz1sW2YrMV0pLGY9Zi0xPj4xLGxbZl0rPWgud2VpZ2h0O3UrPWgud2VpZ2h0KmR9KSksdX12YXIgc2llPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKGFpZSwiY3Jvc3NDb3VudCIpO28oY09lLCJ0d29MYXllckNyb3NzQ291bnQiKX0pO2Z1bmN0aW9uIG9pZSh0KXt2YXIgZT17fSxyPVlyKHQubm9kZXMoKSxmdW5jdGlvbihsKXtyZXR1cm4hdC5jaGlsZHJlbihsKS5sZW5ndGh9KSxuPUxzKEplKHIsZnVuY3Rpb24obCl7cmV0dXJuIHQubm9kZShsKS5yYW5rfSkpLGk9SmUoVW8obisxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gYShsKXtpZighSXQoZSxsKSl7ZVtsXT0hMDt2YXIgdT10Lm5vZGUobCk7aVt1LnJhbmtdLnB1c2gobCksQ2UodC5zdWNjZXNzb3JzKGwpLGEpfX1vKGEsImRmcyIpO3ZhciBzPWtjKHIsZnVuY3Rpb24obCl7cmV0dXJuIHQubm9kZShsKS5yYW5rfSk7cmV0dXJuIENlKHMsYSksaX12YXIgbGllPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKG9pZSwiaW5pdE9yZGVyIil9KTtmdW5jdGlvbiBjaWUodCxlKXtyZXR1cm4gSmUoZSxmdW5jdGlvbihyKXt2YXIgbj10LmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPXFyKG4sZnVuY3Rpb24oYSxzKXt2YXIgbD10LmVkZ2UocyksdT10Lm5vZGUocy52KTtyZXR1cm57c3VtOmEuc3VtK2wud2VpZ2h0KnUub3JkZXIsd2VpZ2h0OmEud2VpZ2h0K2wud2VpZ2h0fX0se3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6cixiYXJ5Y2VudGVyOmkuc3VtL2kud2VpZ2h0LHdlaWdodDppLndlaWdodH19ZWxzZSByZXR1cm57djpyfX0pfXZhciB1aWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oY2llLCJiYXJ5Y2VudGVyIil9KTtmdW5jdGlvbiBoaWUodCxlKXt2YXIgcj17fTtDZSh0LGZ1bmN0aW9uKGksYSl7dmFyIHM9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOmF9O2RyKGkuYmFyeWNlbnRlcil8fChzLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLHMud2VpZ2h0PWkud2VpZ2h0KX0pLENlKGUuZWRnZXMoKSxmdW5jdGlvbihpKXt2YXIgYT1yW2kudl0scz1yW2kud107IWRyKGEpJiYhZHIocykmJihzLmluZGVncmVlKyssYS5vdXQucHVzaChyW2kud10pKX0pO3ZhciBuPVlyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gdU9lKG4pfWZ1bmN0aW9uIHVPZSh0KXt2YXIgZT1bXTtmdW5jdGlvbiByKGEpe3JldHVybiBmdW5jdGlvbihzKXtzLm1lcmdlZHx8KGRyKHMuYmFyeWNlbnRlcil8fGRyKGEuYmFyeWNlbnRlcil8fHMuYmFyeWNlbnRlcj49YS5iYXJ5Y2VudGVyKSYmaE9lKGEscyl9fW8ociwiaGFuZGxlSW4iKTtmdW5jdGlvbiBuKGEpe3JldHVybiBmdW5jdGlvbihzKXtzLmluLnB1c2goYSksLS1zLmluZGVncmVlPT09MCYmdC5wdXNoKHMpfX1mb3IobyhuLCJoYW5kbGVPdXQiKTt0Lmxlbmd0aDspe3ZhciBpPXQucG9wKCk7ZS5wdXNoKGkpLENlKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLENlKGkub3V0LG4oaSkpfXJldHVybiBKZShZcihlLGZ1bmN0aW9uKGEpe3JldHVybiFhLm1lcmdlZH0pLGZ1bmN0aW9uKGEpe3JldHVybiBPZChhLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIGhPZSh0LGUpe3ZhciByPTAsbj0wO3Qud2VpZ2h0JiYocis9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LG4rPXQud2VpZ2h0KSxlLndlaWdodCYmKHIrPWUuYmFyeWNlbnRlciplLndlaWdodCxuKz1lLndlaWdodCksdC52cz1lLnZzLmNvbmNhdCh0LnZzKSx0LmJhcnljZW50ZXI9ci9uLHQud2VpZ2h0PW4sdC5pPU1hdGgubWluKGUuaSx0LmkpLGUubWVyZ2VkPSEwfXZhciBmaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oaGllLCJyZXNvbHZlQ29uZmxpY3RzIik7byh1T2UsImRvUmVzb2x2ZUNvbmZsaWN0cyIpO28oaE9lLCJtZXJnZUVudHJpZXMiKX0pO2Z1bmN0aW9uIHBpZSh0LGUpe3ZhciByPXhuZSh0LGZ1bmN0aW9uKGYpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZiwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPWtjKHIucmhzLGZ1bmN0aW9uKGYpe3JldHVybi1mLml9KSxhPVtdLHM9MCxsPTAsdT0wO24uc29ydChmT2UoISFlKSksdT1kaWUoYSxpLHUpLENlKG4sZnVuY3Rpb24oZil7dSs9Zi52cy5sZW5ndGgsYS5wdXNoKGYudnMpLHMrPWYuYmFyeWNlbnRlcipmLndlaWdodCxsKz1mLndlaWdodCx1PWRpZShhLGksdSl9KTt2YXIgaD17dnM6V3IoYSl9O3JldHVybiBsJiYoaC5iYXJ5Y2VudGVyPXMvbCxoLndlaWdodD1sKSxofWZ1bmN0aW9uIGRpZSh0LGUscil7Zm9yKHZhciBuO2UubGVuZ3RoJiYobj1mYShlKSkuaTw9cjspZS5wb3AoKSx0LnB1c2gobi52cykscisrO3JldHVybiByfWZ1bmN0aW9uIGZPZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5iYXJ5Y2VudGVyPHIuYmFyeWNlbnRlcj8tMTplLmJhcnljZW50ZXI+ci5iYXJ5Y2VudGVyPzE6dD9yLmktZS5pOmUuaS1yLml9fXZhciBtaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO1NjKCk7byhwaWUsInNvcnQiKTtvKGRpZSwiY29uc3VtZVVuc29ydGFibGUiKTtvKGZPZSwiY29tcGFyZVdpdGhCaWFzIil9KTtmdW5jdGlvbiBURCh0LGUscixuKXt2YXIgaT10LmNoaWxkcmVuKGUpLGE9dC5ub2RlKGUpLHM9YT9hLmJvcmRlckxlZnQ6dm9pZCAwLGw9YT9hLmJvcmRlclJpZ2h0OnZvaWQgMCx1PXt9O3MmJihpPVlyKGksZnVuY3Rpb24oZyl7cmV0dXJuIGchPT1zJiZnIT09bH0pKTt2YXIgaD1jaWUodCxpKTtDZShoLGZ1bmN0aW9uKGcpe2lmKHQuY2hpbGRyZW4oZy52KS5sZW5ndGgpe3ZhciB5PVREKHQsZy52LHIsbik7dVtnLnZdPXksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksImJhcnljZW50ZXIiKSYmcE9lKGcseSl9fSk7dmFyIGY9aGllKGgscik7ZE9lKGYsdSk7dmFyIGQ9cGllKGYsbik7aWYocyYmKGQudnM9V3IoW3MsZC52cyxsXSksdC5wcmVkZWNlc3NvcnMocykubGVuZ3RoKSl7dmFyIHA9dC5ub2RlKHQucHJlZGVjZXNzb3JzKHMpWzBdKSxtPXQubm9kZSh0LnByZWRlY2Vzc29ycyhsKVswXSk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsImJhcnljZW50ZXIiKXx8KGQuYmFyeWNlbnRlcj0wLGQud2VpZ2h0PTApLGQuYmFyeWNlbnRlcj0oZC5iYXJ5Y2VudGVyKmQud2VpZ2h0K3Aub3JkZXIrbS5vcmRlcikvKGQud2VpZ2h0KzIpLGQud2VpZ2h0Kz0yfXJldHVybiBkfWZ1bmN0aW9uIGRPZSh0LGUpe0NlKHQsZnVuY3Rpb24ocil7ci52cz1XcihyLnZzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT9lW25dLnZzOm59KSl9KX1mdW5jdGlvbiBwT2UodCxlKXtkcih0LmJhcnljZW50ZXIpPyh0LmJhcnljZW50ZXI9ZS5iYXJ5Y2VudGVyLHQud2VpZ2h0PWUud2VpZ2h0KToodC5iYXJ5Y2VudGVyPSh0LmJhcnljZW50ZXIqdC53ZWlnaHQrZS5iYXJ5Y2VudGVyKmUud2VpZ2h0KS8odC53ZWlnaHQrZS53ZWlnaHQpLHQud2VpZ2h0Kz1lLndlaWdodCl9dmFyIGdpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7dWllKCk7ZmllKCk7bWllKCk7byhURCwic29ydFN1YmdyYXBoIik7byhkT2UsImV4cGFuZFN1YmdyYXBocyIpO28ocE9lLCJtZXJnZUJhcnljZW50ZXJzIil9KTtmdW5jdGlvbiB4aWUodCl7dmFyIGU9YUQodCkscj15aWUodCxVbygxLGUrMSksImluRWRnZXMiKSxuPXlpZSh0LFVvKGUtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1vaWUodCk7dmllKHQsaSk7Zm9yKHZhciBhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzLGw9MCx1PTA7dTw0OysrbCwrK3Upe21PZShsJTI/cjpuLGwlND49MiksaT1LaCh0KTt2YXIgaD1haWUodCxpKTtoPGEmJih1PTAscz1DTChpKSxhPWgpfXZpZSh0LHMpfWZ1bmN0aW9uIHlpZSh0LGUscil7cmV0dXJuIEplKGUsZnVuY3Rpb24obil7cmV0dXJuIG5pZSh0LG4scil9KX1mdW5jdGlvbiBtT2UodCxlKXt2YXIgcj1uZXcgTXI7Q2UodCxmdW5jdGlvbihuKXt2YXIgaT1uLmdyYXBoKCkucm9vdCxhPVREKG4saSxyLGUpO0NlKGEudnMsZnVuY3Rpb24ocyxsKXtuLm5vZGUocykub3JkZXI9bH0pLHRpZShuLHIsYS52cyl9KX1mdW5jdGlvbiB2aWUodCxlKXtDZShlLGZ1bmN0aW9uKHIpe0NlKHIsZnVuY3Rpb24obixpKXt0Lm5vZGUobikub3JkZXI9aX0pfSl9dmFyIGJpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7TnMoKTtTYygpO3JpZSgpO2lpZSgpO3NpZSgpO2xpZSgpO2dpZSgpO28oeGllLCJvcmRlciIpO28oeWllLCJidWlsZExheWVyR3JhcGhzIik7byhtT2UsInN3ZWVwTGF5ZXJHcmFwaHMiKTtvKHZpZSwiYXNzaWduT3JkZXIiKX0pO2Z1bmN0aW9uIHdpZSh0KXt2YXIgZT15T2UodCk7Q2UodC5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj10Lm5vZGUociksaT1uLmVkZ2VPYmosYT1nT2UodCxlLGkudixpLncpLHM9YS5wYXRoLGw9YS5sY2EsdT0wLGg9c1t1XSxmPSEwO3IhPT1pLnc7KXtpZihuPXQubm9kZShyKSxmKXtmb3IoOyhoPXNbdV0pIT09bCYmdC5ub2RlKGgpLm1heFJhbms8bi5yYW5rOyl1Kys7aD09PWwmJihmPSExKX1pZighZil7Zm9yKDt1PHMubGVuZ3RoLTEmJnQubm9kZShoPXNbdSsxXSkubWluUmFuazw9bi5yYW5rOyl1Kys7aD1zW3VdfXQuc2V0UGFyZW50KHIsaCkscj10LnN1Y2Nlc3NvcnMocilbMF19fSl9ZnVuY3Rpb24gZ09lKHQsZSxyLG4pe3ZhciBpPVtdLGE9W10scz1NYXRoLm1pbihlW3JdLmxvdyxlW25dLmxvdyksbD1NYXRoLm1heChlW3JdLmxpbSxlW25dLmxpbSksdSxoO3U9cjtkbyB1PXQucGFyZW50KHUpLGkucHVzaCh1KTt3aGlsZSh1JiYoZVt1XS5sb3c+c3x8bD5lW3VdLmxpbSkpO2ZvcihoPXUsdT1uOyh1PXQucGFyZW50KHUpKSE9PWg7KWEucHVzaCh1KTtyZXR1cm57cGF0aDppLmNvbmNhdChhLnJldmVyc2UoKSksbGNhOmh9fWZ1bmN0aW9uIHlPZSh0KXt2YXIgZT17fSxyPTA7ZnVuY3Rpb24gbihpKXt2YXIgYT1yO0NlKHQuY2hpbGRyZW4oaSksbiksZVtpXT17bG93OmEsbGltOnIrK319cmV0dXJuIG8obiwiZGZzIiksQ2UodC5jaGlsZHJlbigpLG4pLGV9dmFyIFRpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byh3aWUsInBhcmVudER1bW15Q2hhaW5zIik7byhnT2UsImZpbmRQYXRoIik7byh5T2UsInBvc3RvcmRlciIpfSk7ZnVuY3Rpb24gdk9lKHQsZSl7dmFyIHI9e307ZnVuY3Rpb24gbihpLGEpe3ZhciBzPTAsbD0wLHU9aS5sZW5ndGgsaD1mYShhKTtyZXR1cm4gQ2UoYSxmdW5jdGlvbihmLGQpe3ZhciBwPWJPZSh0LGYpLG09cD90Lm5vZGUocCkub3JkZXI6dTsocHx8Zj09PWgpJiYoQ2UoYS5zbGljZShsLGQrMSksZnVuY3Rpb24oZyl7Q2UodC5wcmVkZWNlc3NvcnMoZyksZnVuY3Rpb24oeSl7dmFyIHY9dC5ub2RlKHkpLHg9di5vcmRlcjsoeDxzfHxtPHgpJiYhKHYuZHVtbXkmJnQubm9kZShnKS5kdW1teSkmJmtpZShyLHksZyl9KX0pLGw9ZCsxLHM9bSl9KSxhfXJldHVybiBvKG4sInZpc2l0TGF5ZXIiKSxxcihlLG4pLHJ9ZnVuY3Rpb24geE9lKHQsZSl7dmFyIHI9e307ZnVuY3Rpb24gbihhLHMsbCx1LGgpe3ZhciBmO0NlKFVvKHMsbCksZnVuY3Rpb24oZCl7Zj1hW2RdLHQubm9kZShmKS5kdW1teSYmQ2UodC5wcmVkZWNlc3NvcnMoZiksZnVuY3Rpb24ocCl7dmFyIG09dC5ub2RlKHApO20uZHVtbXkmJihtLm9yZGVyPHV8fG0ub3JkZXI+aCkmJmtpZShyLHAsZil9KX0pfW8obiwic2NhbiIpO2Z1bmN0aW9uIGkoYSxzKXt2YXIgbD0tMSx1LGg9MDtyZXR1cm4gQ2UocyxmdW5jdGlvbihmLGQpe2lmKHQubm9kZShmKS5kdW1teT09PSJib3JkZXIiKXt2YXIgcD10LnByZWRlY2Vzc29ycyhmKTtwLmxlbmd0aCYmKHU9dC5ub2RlKHBbMF0pLm9yZGVyLG4ocyxoLGQsbCx1KSxoPWQsbD11KX1uKHMsaCxzLmxlbmd0aCx1LGEubGVuZ3RoKX0pLHN9cmV0dXJuIG8oaSwidmlzaXRMYXllciIpLHFyKGUsaSkscn1mdW5jdGlvbiBiT2UodCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIFphKHQucHJlZGVjZXNzb3JzKGUpLGZ1bmN0aW9uKHIpe3JldHVybiB0Lm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBraWUodCxlLHIpe2lmKGU+cil7dmFyIG49ZTtlPXIscj1ufXZhciBpPXRbZV07aXx8KHRbZV09aT17fSksaVtyXT0hMH1mdW5jdGlvbiB3T2UodCxlLHIpe2lmKGU+cil7dmFyIG49ZTtlPXIscj1ufXJldHVybiEhdFtlXSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRbZV0scil9ZnVuY3Rpb24gVE9lKHQsZSxyLG4pe3ZhciBpPXt9LGE9e30scz17fTtyZXR1cm4gQ2UoZSxmdW5jdGlvbihsKXtDZShsLGZ1bmN0aW9uKHUsaCl7aVt1XT11LGFbdV09dSxzW3VdPWh9KX0pLENlKGUsZnVuY3Rpb24obCl7dmFyIHU9LTE7Q2UobCxmdW5jdGlvbihoKXt2YXIgZj1uKGgpO2lmKGYubGVuZ3RoKXtmPWtjKGYsZnVuY3Rpb24oeSl7cmV0dXJuIHNbeV19KTtmb3IodmFyIGQ9KGYubGVuZ3RoLTEpLzIscD1NYXRoLmZsb29yKGQpLG09TWF0aC5jZWlsKGQpO3A8PW07KytwKXt2YXIgZz1mW3BdO2FbaF09PT1oJiZ1PHNbZ10mJiF3T2UocixoLGcpJiYoYVtnXT1oLGFbaF09aVtoXT1pW2ddLHU9c1tnXSl9fX0pfSkse3Jvb3Q6aSxhbGlnbjphfX1mdW5jdGlvbiBrT2UodCxlLHIsbixpKXt2YXIgYT17fSxzPUVPZSh0LGUscixpKSxsPWk/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gdShkLHApe2Zvcih2YXIgbT1zLm5vZGVzKCksZz1tLnBvcCgpLHk9e307ZzspeVtnXT9kKGcpOih5W2ddPSEwLG0ucHVzaChnKSxtPW0uY29uY2F0KHAoZykpKSxnPW0ucG9wKCl9byh1LCJpdGVyYXRlIik7ZnVuY3Rpb24gaChkKXthW2RdPXMuaW5FZGdlcyhkKS5yZWR1Y2UoZnVuY3Rpb24ocCxtKXtyZXR1cm4gTWF0aC5tYXgocCxhW20udl0rcy5lZGdlKG0pKX0sMCl9byhoLCJwYXNzMSIpO2Z1bmN0aW9uIGYoZCl7dmFyIHA9cy5vdXRFZGdlcyhkKS5yZWR1Y2UoZnVuY3Rpb24oZyx5KXtyZXR1cm4gTWF0aC5taW4oZyxhW3kud10tcy5lZGdlKHkpKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxtPXQubm9kZShkKTtwIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZtLmJvcmRlclR5cGUhPT1sJiYoYVtkXT1NYXRoLm1heChhW2RdLHApKX1yZXR1cm4gbyhmLCJwYXNzMiIpLHUoaCxzLnByZWRlY2Vzc29ycy5iaW5kKHMpKSx1KGYscy5zdWNjZXNzb3JzLmJpbmQocykpLENlKG4sZnVuY3Rpb24oZCl7YVtkXT1hW3JbZF1dfSksYX1mdW5jdGlvbiBFT2UodCxlLHIsbil7dmFyIGk9bmV3IE1yLGE9dC5ncmFwaCgpLHM9X09lKGEubm9kZXNlcCxhLmVkZ2VzZXAsbik7cmV0dXJuIENlKGUsZnVuY3Rpb24obCl7dmFyIHU7Q2UobCxmdW5jdGlvbihoKXt2YXIgZj1yW2hdO2lmKGkuc2V0Tm9kZShmKSx1KXt2YXIgZD1yW3VdLHA9aS5lZGdlKGQsZik7aS5zZXRFZGdlKGQsZixNYXRoLm1heChzKHQsaCx1KSxwfHwwKSl9dT1ofSl9KSxpfWZ1bmN0aW9uIFNPZSh0LGUpe3JldHVybiBJZChicihlKSxmdW5jdGlvbihyKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuICRMKHIsZnVuY3Rpb24oYSxzKXt2YXIgbD1MT2UodCxzKS8yO249TWF0aC5tYXgoYStsLG4pLGk9TWF0aC5taW4oYS1sLGkpfSksbi1pfSl9ZnVuY3Rpb24gQ09lKHQsZSl7dmFyIHI9YnIoZSksbj1ObChyKSxpPUxzKHIpO0NlKFsidSIsImQiXSxmdW5jdGlvbihhKXtDZShbImwiLCJyIl0sZnVuY3Rpb24ocyl7dmFyIGw9YStzLHU9dFtsXSxoO2lmKHUhPT1lKXt2YXIgZj1icih1KTtoPXM9PT0ibCI/bi1ObChmKTppLUxzKGYpLGgmJih0W2xdPU1kKHUsZnVuY3Rpb24oZCl7cmV0dXJuIGQraH0pKX19KX0pfWZ1bmN0aW9uIEFPZSh0LGUpe3JldHVybiBNZCh0LnVsLGZ1bmN0aW9uKHIsbil7aWYoZSlyZXR1cm4gdFtlLnRvTG93ZXJDYXNlKCldW25dO3ZhciBpPWtjKEplKHQsbikpO3JldHVybihpWzFdK2lbMl0pLzJ9KX1mdW5jdGlvbiBFaWUodCl7dmFyIGU9S2godCkscj1JaCh2T2UodCxlKSx4T2UodCxlKSksbj17fSxpO0NlKFsidSIsImQiXSxmdW5jdGlvbihzKXtpPXM9PT0idSI/ZTpicihlKS5yZXZlcnNlKCksQ2UoWyJsIiwiciJdLGZ1bmN0aW9uKGwpe2w9PT0iciImJihpPUplKGksZnVuY3Rpb24oZCl7cmV0dXJuIGJyKGQpLnJldmVyc2UoKX0pKTt2YXIgdT0ocz09PSJ1Ij90LnByZWRlY2Vzc29yczp0LnN1Y2Nlc3NvcnMpLmJpbmQodCksaD1UT2UodCxpLHIsdSksZj1rT2UodCxpLGgucm9vdCxoLmFsaWduLGw9PT0iciIpO2w9PT0iciImJihmPU1kKGYsZnVuY3Rpb24oZCl7cmV0dXJuLWR9KSksbltzK2xdPWZ9KX0pO3ZhciBhPVNPZSh0LG4pO3JldHVybiBDT2UobixhKSxBT2Uobix0LmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIF9PZSh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxhKXt2YXIgcz1uLm5vZGUoaSksbD1uLm5vZGUoYSksdT0wLGg7aWYodSs9cy53aWR0aC8yLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6aD0tcy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6aD1zLndpZHRoLzI7YnJlYWt9aWYoaCYmKHUrPXI/aDotaCksaD0wLHUrPShzLmR1bW15P2U6dCkvMix1Kz0obC5kdW1teT9lOnQpLzIsdSs9bC53aWR0aC8yLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLCJsYWJlbHBvcyIpKXN3aXRjaChsLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6aD1sLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpoPS1sLndpZHRoLzI7YnJlYWt9cmV0dXJuIGgmJih1Kz1yP2g6LWgpLGg9MCx1fX1mdW5jdGlvbiBMT2UodCxlKXtyZXR1cm4gdC5ub2RlKGUpLndpZHRofXZhciBTaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO05zKCk7U2MoKTtvKHZPZSwiZmluZFR5cGUxQ29uZmxpY3RzIik7byh4T2UsImZpbmRUeXBlMkNvbmZsaWN0cyIpO28oYk9lLCJmaW5kT3RoZXJJbm5lclNlZ21lbnROb2RlIik7byhraWUsImFkZENvbmZsaWN0Iik7byh3T2UsImhhc0NvbmZsaWN0Iik7byhUT2UsInZlcnRpY2FsQWxpZ25tZW50Iik7byhrT2UsImhvcml6b250YWxDb21wYWN0aW9uIik7byhFT2UsImJ1aWxkQmxvY2tHcmFwaCIpO28oU09lLCJmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudCIpO28oQ09lLCJhbGlnbkNvb3JkaW5hdGVzIik7byhBT2UsImJhbGFuY2UiKTtvKEVpZSwicG9zaXRpb25YIik7byhfT2UsInNlcCIpO28oTE9lLCJ3aWR0aCIpfSk7ZnVuY3Rpb24gQ2llKHQpe3Q9aVQodCksRE9lKHQpLFZMKEVpZSh0KSxmdW5jdGlvbihlLHIpe3Qubm9kZShyKS54PWV9KX1mdW5jdGlvbiBET2UodCl7dmFyIGU9S2godCkscj10LmdyYXBoKCkucmFua3NlcCxuPTA7Q2UoZSxmdW5jdGlvbihpKXt2YXIgYT1McyhKZShpLGZ1bmN0aW9uKHMpe3JldHVybiB0Lm5vZGUocykuaGVpZ2h0fSkpO0NlKGksZnVuY3Rpb24ocyl7dC5ub2RlKHMpLnk9bithLzJ9KSxuKz1hK3J9KX12YXIgQWllPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtTYygpO1NpZSgpO28oQ2llLCJwb3NpdGlvbiIpO28oRE9lLCJwb3NpdGlvblkiKX0pO2Z1bmN0aW9uIER1KHQsZSl7dmFyIHI9ZSYmZS5kZWJ1Z1RpbWluZz9ibmU6d25lO3IoImxheW91dCIsKCk9Pnt2YXIgbj1yKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLCgpPT4kT2UodCkpO3IoIiAgcnVuTGF5b3V0IiwoKT0+Tk9lKG4scikpLHIoIiAgdXBkYXRlSW5wdXRHcmFwaCIsKCk9PlJPZSh0LG4pKX0pfWZ1bmN0aW9uIE5PZSh0LGUpe2UoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoKT0+Vk9lKHQpKSxlKCIgICAgcmVtb3ZlU2VsZkVkZ2VzIiwoKT0+UU9lKHQpKSxlKCIgICAgYWN5Y2xpYyIsKCk9PmRuZSh0KSksZSgiICAgIG5lc3RpbmdHcmFwaC5ydW4iLCgpPT5RbmUodCkpLGUoIiAgICByYW5rIiwoKT0+YkQoaVQodCkpKSxlKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsKCk9PlVPZSh0KSksZSgiICAgIHJlbW92ZUVtcHR5UmFua3MiLCgpPT52bmUodCkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKCk9PkpuZSh0KSksZSgiICAgIG5vcm1hbGl6ZVJhbmtzIiwoKT0+eW5lKHQpKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKCk9PkhPZSh0KSksZSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLCgpPT5XT2UodCkpLGUoIiAgICBub3JtYWxpemUucnVuIiwoKT0+RG5lKHQpKSxlKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLCgpPT53aWUodCkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKCk9PmtuZSh0KSksZSgiICAgIG9yZGVyIiwoKT0+eGllKHQpKSxlKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIiwoKT0+Wk9lKHQpKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKCk9PkNuZSh0KSksZSgiICAgIHBvc2l0aW9uIiwoKT0+Q2llKHQpKSxlKCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLCgpPT5KT2UodCkpLGUoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsKCk9PktPZSh0KSksZSgiICAgIG5vcm1hbGl6ZS51bmRvIiwoKT0+Tm5lKHQpKSxlKCIgICAgZml4dXBFZGdlTGFiZWxDb29yZHMiLCgpPT5YT2UodCkpLGUoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsKCk9PkFuZSh0KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoKT0+WU9lKHQpKSxlKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLCgpPT5xT2UodCkpLGUoIiAgICByZXZlcnNlUG9pbnRzIiwoKT0+ak9lKHQpKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoKT0+cG5lKHQpKX1mdW5jdGlvbiBST2UodCxlKXtDZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49dC5ub2RlKHIpLGk9ZS5ub2RlKHIpO24mJihuLng9aS54LG4ueT1pLnksZS5jaGlsZHJlbihyKS5sZW5ndGgmJihuLndpZHRoPWkud2lkdGgsbi5oZWlnaHQ9aS5oZWlnaHQpKX0pLENlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2UociksaT1lLmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSx0LmdyYXBoKCkud2lkdGg9ZS5ncmFwaCgpLndpZHRoLHQuZ3JhcGgoKS5oZWlnaHQ9ZS5ncmFwaCgpLmhlaWdodH1mdW5jdGlvbiAkT2UodCl7dmFyIGU9bmV3IE1yKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1FRCh0LmdyYXBoKCkpO3JldHVybiBlLnNldEdyYXBoKEloKHt9LElPZSxrRChyLE1PZSksT2QocixPT2UpKSksQ2UodC5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPUVEKHQubm9kZShuKSk7ZS5zZXROb2RlKG4scWgoa0QoaSxQT2UpLEJPZSkpLGUuc2V0UGFyZW50KG4sdC5wYXJlbnQobikpfSksQ2UodC5lZGdlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPUVEKHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sSWgoe30sek9lLGtEKGksRk9lKSxPZChpLEdPZSkpKX0pLGV9ZnVuY3Rpb24gVk9lKHQpe3ZhciBlPXQuZ3JhcGgoKTtlLnJhbmtzZXAvPTIsQ2UodC5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyKTtuLm1pbmxlbio9MixuLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkhPT0iYyImJihlLnJhbmtkaXI9PT0iVEIifHxlLnJhbmtkaXI9PT0iQlQiP24ud2lkdGgrPW4ubGFiZWxvZmZzZXQ6bi5oZWlnaHQrPW4ubGFiZWxvZmZzZXQpfSl9ZnVuY3Rpb24gVU9lKHQpe0NlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPXQubm9kZShlLnYpLGk9dC5ub2RlKGUudyksYT17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZX07RWModCwiZWRnZS1wcm94eSIsYSwiX2VwIil9fSl9ZnVuY3Rpb24gSE9lKHQpe3ZhciBlPTA7Q2UodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKTtuLmJvcmRlclRvcCYmKG4ubWluUmFuaz10Lm5vZGUobi5ib3JkZXJUb3ApLnJhbmssbi5tYXhSYW5rPXQubm9kZShuLmJvcmRlckJvdHRvbSkucmFuayxlPUxzKGUsbi5tYXhSYW5rKSl9KSx0LmdyYXBoKCkubWF4UmFuaz1lfWZ1bmN0aW9uIFdPZSh0KXtDZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpO3IuZHVtbXk9PT0iZWRnZS1wcm94eSImJih0LmVkZ2Uoci5lKS5sYWJlbFJhbms9ci5yYW5rLHQucmVtb3ZlTm9kZShlKSl9KX1mdW5jdGlvbiBZT2UodCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHI9MCxuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPTAsYT10LmdyYXBoKCkscz1hLm1hcmdpbnh8fDAsbD1hLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdShoKXt2YXIgZj1oLngsZD1oLnkscD1oLndpZHRoLG09aC5oZWlnaHQ7ZT1NYXRoLm1pbihlLGYtcC8yKSxyPU1hdGgubWF4KHIsZitwLzIpLG49TWF0aC5taW4obixkLW0vMiksaT1NYXRoLm1heChpLGQrbS8yKX1vKHUsImdldEV4dHJlbWVzIiksQ2UodC5ub2RlcygpLGZ1bmN0aW9uKGgpe3UodC5ub2RlKGgpKX0pLENlKHQuZWRnZXMoKSxmdW5jdGlvbihoKXt2YXIgZj10LmVkZ2UoaCk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsIngiKSYmdShmKX0pLGUtPXMsbi09bCxDZSh0Lm5vZGVzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5ub2RlKGgpO2YueC09ZSxmLnktPW59KSxDZSh0LmVkZ2VzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5lZGdlKGgpO0NlKGYucG9pbnRzLGZ1bmN0aW9uKGQpe2QueC09ZSxkLnktPW59KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZiwieCIpJiYoZi54LT1lKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZiwieSIpJiYoZi55LT1uKX0pLGEud2lkdGg9ci1lK3MsYS5oZWlnaHQ9aS1uK2x9ZnVuY3Rpb24gcU9lKHQpe0NlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSksbj10Lm5vZGUoZS52KSxpPXQubm9kZShlLncpLGEscztyLnBvaW50cz8oYT1yLnBvaW50c1swXSxzPXIucG9pbnRzW3IucG9pbnRzLmxlbmd0aC0xXSk6KHIucG9pbnRzPVtdLGE9aSxzPW4pLHIucG9pbnRzLnVuc2hpZnQobkQobixhKSksci5wb2ludHMucHVzaChuRChpLHMpKX0pfWZ1bmN0aW9uIFhPZSh0KXtDZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJ4Iikpc3dpdGNoKChyLmxhYmVscG9zPT09ImwifHxyLmxhYmVscG9zPT09InIiKSYmKHIud2lkdGgtPXIubGFiZWxvZmZzZXQpLHIubGFiZWxwb3Mpe2Nhc2UibCI6ci54LT1yLndpZHRoLzIrci5sYWJlbG9mZnNldDticmVhaztjYXNlInIiOnIueCs9ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWt9fSl9ZnVuY3Rpb24gak9lKHQpe0NlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gS09lKHQpe0NlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIHI9dC5ub2RlKGUpLG49dC5ub2RlKHIuYm9yZGVyVG9wKSxpPXQubm9kZShyLmJvcmRlckJvdHRvbSksYT10Lm5vZGUoZmEoci5ib3JkZXJMZWZ0KSkscz10Lm5vZGUoZmEoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMocy54LWEueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PWEueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLENlKHQubm9kZXMoKSxmdW5jdGlvbihlKXt0Lm5vZGUoZSkuZHVtbXk9PT0iYm9yZGVyIiYmdC5yZW1vdmVOb2RlKGUpfSl9ZnVuY3Rpb24gUU9lKHQpe0NlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtpZihlLnY9PT1lLncpe3ZhciByPXQubm9kZShlLnYpO3Iuc2VsZkVkZ2VzfHwoci5zZWxmRWRnZXM9W10pLHIuc2VsZkVkZ2VzLnB1c2goe2UsbGFiZWw6dC5lZGdlKGUpfSksdC5yZW1vdmVFZGdlKGUpfX0pfWZ1bmN0aW9uIFpPZSh0KXt2YXIgZT1LaCh0KTtDZShlLGZ1bmN0aW9uKHIpe3ZhciBuPTA7Q2UocixmdW5jdGlvbihpLGEpe3ZhciBzPXQubm9kZShpKTtzLm9yZGVyPWErbixDZShzLnNlbGZFZGdlcyxmdW5jdGlvbihsKXtFYyh0LCJzZWxmZWRnZSIse3dpZHRoOmwubGFiZWwud2lkdGgsaGVpZ2h0OmwubGFiZWwuaGVpZ2h0LHJhbms6cy5yYW5rLG9yZGVyOmErICsrbixlOmwuZSxsYWJlbDpsLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgcy5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIEpPZSh0KXtDZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpO2lmKHIuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgbj10Lm5vZGUoci5lLnYpLGk9bi54K24ud2lkdGgvMixhPW4ueSxzPXIueC1pLGw9bi5oZWlnaHQvMjt0LnNldEVkZ2Uoci5lLHIubGFiZWwpLHQucmVtb3ZlTm9kZShlKSxyLmxhYmVsLnBvaW50cz1be3g6aSsyKnMvMyx5OmEtbH0se3g6aSs1KnMvNix5OmEtbH0se3g6aStzLHk6YX0se3g6aSs1KnMvNix5OmErbH0se3g6aSsyKnMvMyx5OmErbH1dLHIubGFiZWwueD1yLngsci5sYWJlbC55PXIueX19KX1mdW5jdGlvbiBrRCh0LGUpe3JldHVybiBNZChPZCh0LGUpLE51bWJlcil9ZnVuY3Rpb24gRUQodCl7dmFyIGU9e307cmV0dXJuIENlKHQsZnVuY3Rpb24ocixuKXtlW24udG9Mb3dlckNhc2UoKV09cn0pLGV9dmFyIE1PZSxJT2UsT09lLFBPZSxCT2UsRk9lLHpPZSxHT2UsX2llPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtOcygpO0VuZSgpO0xuZSgpO3JEKCk7bEQoKTt3RCgpO2VpZSgpO2JpZSgpO1RpZSgpO0FpZSgpO1NjKCk7byhEdSwibGF5b3V0Iik7byhOT2UsInJ1bkxheW91dCIpO28oUk9lLCJ1cGRhdGVJbnB1dEdyYXBoIik7TU9lPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxJT2U9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sT09lPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUE9lPVsid2lkdGgiLCJoZWlnaHQiXSxCT2U9e3dpZHRoOjAsaGVpZ2h0OjB9LEZPZT1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSx6T2U9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxHT2U9WyJsYWJlbHBvcyJdO28oJE9lLCJidWlsZExheW91dEdyYXBoIik7byhWT2UsIm1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiKTtvKFVPZSwiaW5qZWN0RWRnZUxhYmVsUHJveGllcyIpO28oSE9lLCJhc3NpZ25SYW5rTWluTWF4Iik7byhXT2UsInJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiKTtvKFlPZSwidHJhbnNsYXRlR3JhcGgiKTtvKHFPZSwiYXNzaWduTm9kZUludGVyc2VjdHMiKTtvKFhPZSwiZml4dXBFZGdlTGFiZWxDb29yZHMiKTtvKGpPZSwicmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMiKTtvKEtPZSwicmVtb3ZlQm9yZGVyTm9kZXMiKTtvKFFPZSwicmVtb3ZlU2VsZkVkZ2VzIik7byhaT2UsImluc2VydFNlbGZFZGdlcyIpO28oSk9lLCJwb3NpdGlvblNlbGZFZGdlcyIpO28oa0QsInNlbGVjdE51bWJlckF0dHJzIik7byhFRCwiY2Fub25pY2FsaXplIil9KTt2YXIgUHY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtyRCgpO19pZSgpO2xEKCk7d0QoKX0pO2Z1bmN0aW9uIEhvKHQpe3ZhciBlPXtvcHRpb25zOntkaXJlY3RlZDp0LmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6dC5pc0NvbXBvdW5kKCl9LG5vZGVzOmVQZSh0KSxlZGdlczp0UGUodCl9O3JldHVybiBkcih0LmdyYXBoKCkpfHwoZS52YWx1ZT1ybih0LmdyYXBoKCkpKSxlfWZ1bmN0aW9uIGVQZSh0KXtyZXR1cm4gSmUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKSxuPXQucGFyZW50KGUpLGk9e3Y6ZX07cmV0dXJuIGRyKHIpfHwoaS52YWx1ZT1yKSxkcihuKXx8KGkucGFyZW50PW4pLGl9KX1mdW5jdGlvbiB0UGUodCl7cmV0dXJuIEplKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSksbj17djplLnYsdzplLnd9O3JldHVybiBkcihlLm5hbWUpfHwobi5uYW1lPWUubmFtZSksZHIocil8fChuLnZhbHVlPXIpLG59KX12YXIgU0Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO3JUKCk7byhIbywid3JpdGUiKTtvKGVQZSwid3JpdGVOb2RlcyIpO28odFBlLCJ3cml0ZUVkZ2VzIil9KTt2YXIgd3IsemQsTmllLFJpZSxsVCxyUGUsTWllLElpZSxuUGUsQm0sRGllLE9pZSxQaWUsQmllLEZpZSx6aWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO05zKCk7U0QoKTt3cj1uZXcgTWFwLHpkPW5ldyBNYXAsTmllPW5ldyBNYXAsUmllPW8oKCk9Pnt6ZC5jbGVhcigpLE5pZS5jbGVhcigpLHdyLmNsZWFyKCl9LCJjbGVhciIpLGxUPW8oKHQsZSk9PntsZXQgcj16ZC5nZXQoZSl8fFtdO3JldHVybiBZLnRyYWNlKCJJbiBpc0Rlc2NlbmRhbnQiLGUsIiAiLHQsIiA9ICIsci5pbmNsdWRlcyh0KSksci5pbmNsdWRlcyh0KX0sImlzRGVzY2VuZGFudCIpLHJQZT1vKCh0LGUpPT57bGV0IHI9emQuZ2V0KGUpfHxbXTtyZXR1cm4gWS5pbmZvKCJEZXNjZW5kYW50cyBvZiAiLGUsIiBpcyAiLHIpLFkuaW5mbygiRWRnZSBpcyAiLHQpLHQudj09PWV8fHQudz09PWU/ITE6cj9yLmluY2x1ZGVzKHQudil8fGxUKHQudixlKXx8bFQodC53LGUpfHxyLmluY2x1ZGVzKHQudyk6KFkuZGVidWcoIlRpbHQsICIsZSwiLG5vdCBpbiBkZXNjZW5kYW50cyIpLCExKX0sImVkZ2VJbkNsdXN0ZXIiKSxNaWU9bygodCxlLHIsbik9PntZLndhcm4oIkNvcHlpbmcgY2hpbGRyZW4gb2YgIix0LCJyb290IixuLCJkYXRhIixlLm5vZGUodCksbik7bGV0IGk9ZS5jaGlsZHJlbih0KXx8W107dCE9PW4mJmkucHVzaCh0KSxZLndhcm4oIkNvcHlpbmcgKG5vZGVzKSBjbHVzdGVySWQiLHQsIm5vZGVzIixpKSxpLmZvckVhY2goYT0+e2lmKGUuY2hpbGRyZW4oYSkubGVuZ3RoPjApTWllKGEsZSxyLG4pO2Vsc2V7bGV0IHM9ZS5ub2RlKGEpO1kuaW5mbygiY3AgIixhLCIgdG8gIixuLCIgd2l0aCBwYXJlbnQgIix0KSxyLnNldE5vZGUoYSxzKSxuIT09ZS5wYXJlbnQoYSkmJihZLndhcm4oIlNldHRpbmcgcGFyZW50IixhLGUucGFyZW50KGEpKSxyLnNldFBhcmVudChhLGUucGFyZW50KGEpKSksdCE9PW4mJmEhPT10PyhZLmRlYnVnKCJTZXR0aW5nIHBhcmVudCIsYSx0KSxyLnNldFBhcmVudChhLHQpKTooWS5pbmZvKCJJbiBjb3B5ICIsdCwicm9vdCIsbiwiZGF0YSIsZS5ub2RlKHQpLG4pLFkuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLGEsImNsdXN0ZXIhPT1yb290SWQiLHQhPT1uLCJub2RlIT09Y2x1c3RlcklkIixhIT09dCkpO2xldCBsPWUuZWRnZXMoYSk7WS5kZWJ1ZygiQ29weWluZyBFZGdlcyIsbCksbC5mb3JFYWNoKHU9PntZLmluZm8oIkVkZ2UiLHUpO2xldCBoPWUuZWRnZSh1LnYsdS53LHUubmFtZSk7WS5pbmZvKCJFZGdlIGRhdGEiLGgsbik7dHJ5e3JQZSh1LG4pPyhZLmluZm8oIkNvcHlpbmcgYXMgIix1LnYsdS53LGgsdS5uYW1lKSxyLnNldEVkZ2UodS52LHUudyxoLHUubmFtZSksWS5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLHIuZWRnZXMoKSxyLmVkZ2Uoci5lZGdlcygpWzBdKSkpOlkuaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdS52LCItLT4iLHUudywiIHJvb3RJZDogIixuLCIgY2x1c3RlcklkOiIsdCl9Y2F0Y2goZil7WS5lcnJvcihmKX19KX1ZLmRlYnVnKCJSZW1vdmluZyBub2RlIixhKSxlLnJlbW92ZU5vZGUoYSl9KX0sImNvcHkiKSxJaWU9bygodCxlKT0+e2xldCByPWUuY2hpbGRyZW4odCksbj1bLi4ucl07Zm9yKGxldCBpIG9mIHIpTmllLnNldChpLHQpLG49Wy4uLm4sLi4uSWllKGksZSldO3JldHVybiBufSwiZXh0cmFjdERlc2NlbmRhbnRzIiksblBlPW8oKHQsZSxyKT0+e2xldCBuPXQuZWRnZXMoKS5maWx0ZXIodT0+dS52PT09ZXx8dS53PT09ZSksaT10LmVkZ2VzKCkuZmlsdGVyKHU9PnUudj09PXJ8fHUudz09PXIpLGE9bi5tYXAodT0+KHt2OnUudj09PWU/cjp1LnYsdzp1Lnc9PT1lP2U6dS53fSkpLHM9aS5tYXAodT0+KHt2OnUudix3OnUud30pKTtyZXR1cm4gYS5maWx0ZXIodT0+cy5zb21lKGg9PnUudj09PWgudiYmdS53PT09aC53KSl9LCJmaW5kQ29tbW9uRWRnZXMiKSxCbT1vKCh0LGUscik9PntsZXQgbj1lLmNoaWxkcmVuKHQpO2lmKFkudHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLHQsbiksbi5sZW5ndGg8MSlyZXR1cm4gdDtsZXQgaTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9Qm0oYSxlLHIpLGw9blBlKGUscixzKTtpZihzKWlmKGwubGVuZ3RoPjApaT1zO2Vsc2UgcmV0dXJuIHN9cmV0dXJuIGl9LCJmaW5kTm9uQ2x1c3RlckNoaWxkIiksRGllPW8odD0+IXdyLmhhcyh0KXx8IXdyLmdldCh0KS5leHRlcm5hbENvbm5lY3Rpb25zP3Q6d3IuaGFzKHQpP3dyLmdldCh0KS5pZDp0LCJnZXRBbmNob3JJZCIpLE9pZT1vKCh0LGUpPT57aWYoIXR8fGU+MTApe1kuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFkuZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIik7dC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ocil7dC5jaGlsZHJlbihyKS5sZW5ndGg+MCYmKFkud2FybigiQ2x1c3RlciBpZGVudGlmaWVkIixyLCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6ICIsQm0ocix0LHIpKSx6ZC5zZXQocixJaWUocix0KSksd3Iuc2V0KHIse2lkOkJtKHIsdCxyKSxjbHVzdGVyRGF0YTp0Lm5vZGUocil9KSl9KSx0Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj10LmNoaWxkcmVuKHIpLGk9dC5lZGdlcygpO24ubGVuZ3RoPjA/KFkuZGVidWcoIkNsdXN0ZXIgaWRlbnRpZmllZCIscix6ZCksaS5mb3JFYWNoKGE9PntsZXQgcz1sVChhLnYsciksbD1sVChhLncscik7c15sJiYoWS53YXJuKCJFZGdlOiAiLGEsIiBsZWF2ZXMgY2x1c3RlciAiLHIpLFkud2FybigiRGVzY2VuZGFudHMgb2YgWFhYICIsciwiOiAiLHpkLmdldChyKSksd3IuZ2V0KHIpLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApfSkpOlkuZGVidWcoIk5vdCBhIGNsdXN0ZXIgIixyLHpkKX0pO2ZvcihsZXQgciBvZiB3ci5rZXlzKCkpe2xldCBuPXdyLmdldChyKS5pZCxpPXQucGFyZW50KG4pO2khPT1yJiZ3ci5oYXMoaSkmJiF3ci5nZXQoaSkuZXh0ZXJuYWxDb25uZWN0aW9ucyYmKHdyLmdldChyKS5pZD1pKX10LmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj10LmVkZ2Uocik7WS53YXJuKCJFZGdlICIrci52KyIgLT4gIityLncrIjogIitKU09OLnN0cmluZ2lmeShyKSksWS53YXJuKCJFZGdlICIrci52KyIgLT4gIityLncrIjogIitKU09OLnN0cmluZ2lmeSh0LmVkZ2UocikpKTtsZXQgaT1yLnYsYT1yLnc7aWYoWS53YXJuKCJGaXggWFhYIix3ciwiaWRzOiIsci52LHIudywiVHJhbnNsYXRpbmc6ICIsd3IuZ2V0KHIudiksIiAtLS0gIix3ci5nZXQoci53KSksd3IuZ2V0KHIudil8fHdyLmdldChyLncpKXtpZihZLndhcm4oIkZpeGluZyBhbmQgdHJ5aW5nIC0gcmVtb3ZpbmcgWFhYIixyLnYsci53LHIubmFtZSksaT1EaWUoci52KSxhPURpZShyLncpLHQucmVtb3ZlRWRnZShyLnYsci53LHIubmFtZSksaSE9PXIudil7bGV0IHM9dC5wYXJlbnQoaSk7d3IuZ2V0KHMpLmV4dGVybmFsQ29ubmVjdGlvbnM9ITAsbi5mcm9tQ2x1c3Rlcj1yLnZ9aWYoYSE9PXIudyl7bGV0IHM9dC5wYXJlbnQoYSk7d3IuZ2V0KHMpLmV4dGVybmFsQ29ubmVjdGlvbnM9ITAsbi50b0NsdXN0ZXI9ci53fVkud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIsaSxhLHIubmFtZSksdC5zZXRFZGdlKGksYSxuLHIubmFtZSl9fSksWS53YXJuKCJBZGp1c3RlZCBHcmFwaCIsSG8odCkpLFBpZSh0LDApLFkudHJhY2Uod3IpfSwiYWRqdXN0Q2x1c3RlcnNBbmRFZGdlcyIpLFBpZT1vKCh0LGUpPT57aWYoWS53YXJuKCJleHRyYWN0b3IgLSAiLGUsSG8odCksdC5jaGlsZHJlbigiRCIpKSxlPjEwKXtZLmVycm9yKCJCYWlsaW5nIG91dCIpO3JldHVybn1sZXQgcj10Lm5vZGVzKCksbj0hMTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dC5jaGlsZHJlbihpKTtuPW58fGEubGVuZ3RoPjB9aWYoIW4pe1kuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIix0Lm5vZGVzKCkpO3JldHVybn1ZLmRlYnVnKCJOb2RlcyA9ICIscixlKTtmb3IobGV0IGkgb2YgcilpZihZLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLGksd3Isd3IuaGFzKGkpJiYhd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMsIXQucGFyZW50KGkpLHQubm9kZShpKSx0LmNoaWxkcmVuKCJEIiksIiBEZXB0aCAiLGUpLCF3ci5oYXMoaSkpWS5kZWJ1ZygiTm90IGEgY2x1c3RlciIsaSxlKTtlbHNlIGlmKCF3ci5nZXQoaSkuZXh0ZXJuYWxDb25uZWN0aW9ucyYmdC5jaGlsZHJlbihpKSYmdC5jaGlsZHJlbihpKS5sZW5ndGg+MCl7WS53YXJuKCJDbHVzdGVyIHdpdGhvdXQgZXh0ZXJuYWwgY29ubmVjdGlvbnMsIHdpdGhvdXQgYSBwYXJlbnQgYW5kIHdpdGggY2hpbGRyZW4iLGksZSk7bGV0IHM9dC5ncmFwaCgpLnJhbmtkaXI9PT0iVEIiPyJMUiI6IlRCIjt3ci5nZXQoaSk/LmNsdXN0ZXJEYXRhPy5kaXImJihzPXdyLmdldChpKS5jbHVzdGVyRGF0YS5kaXIsWS53YXJuKCJGaXhpbmcgZGlyIix3ci5nZXQoaSkuY2x1c3RlckRhdGEuZGlyLHMpKTtsZXQgbD1uZXcgTXIoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpzLG5vZGVzZXA6NTAscmFua3NlcDo1MCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7WS53YXJuKCJPbGQgZ3JhcGggYmVmb3JlIGNvcHkiLEhvKHQpKSxNaWUoaSx0LGwsaSksdC5zZXROb2RlKGkse2NsdXN0ZXJOb2RlOiEwLGlkOmksY2x1c3RlckRhdGE6d3IuZ2V0KGkpLmNsdXN0ZXJEYXRhLGxhYmVsOndyLmdldChpKS5sYWJlbCxncmFwaDpsfSksWS53YXJuKCJOZXcgZ3JhcGggYWZ0ZXIgY29weSBub2RlOiAoIixpLCIpIixIbyhsKSksWS5kZWJ1ZygiT2xkIGdyYXBoIGFmdGVyIGNvcHkiLEhvKHQpKX1lbHNlIFkud2FybigiQ2x1c3RlciAqKiAiLGksIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCF3ci5nZXQoaSkuZXh0ZXJuYWxDb25uZWN0aW9ucywiIG5vIHBhcmVudDogIiwhdC5wYXJlbnQoaSksIiBjaGlsZHJlbiAiLHQuY2hpbGRyZW4oaSkmJnQuY2hpbGRyZW4oaSkubGVuZ3RoPjAsdC5jaGlsZHJlbigiRCIpLGUpLFkuZGVidWcod3IpO3I9dC5ub2RlcygpLFkud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2ZvcihsZXQgaSBvZiByKXtsZXQgYT10Lm5vZGUoaSk7WS53YXJuKCIgTm93IG5leHQgbGV2ZWwiLGksYSksYT8uY2x1c3Rlck5vZGUmJlBpZShhLmdyYXBoLGUrMSl9fSwiZXh0cmFjdG9yIiksQmllPW8oKHQsZSk9PntpZihlLmxlbmd0aD09PTApcmV0dXJuW107bGV0IHI9T2JqZWN0LmFzc2lnbihbXSxlKTtyZXR1cm4gZS5mb3JFYWNoKG49PntsZXQgaT10LmNoaWxkcmVuKG4pLGE9QmllKHQsaSk7cj1bLi4uciwuLi5hXX0pLHJ9LCJzb3J0ZXIiKSxGaWU9byh0PT5CaWUodCx0LmNoaWxkcmVuKCkpLCJzb3J0Tm9kZXNCeUhpZXJhcmNoeSIpfSk7dmFyICRpZT17fTt2cigkaWUse3JlbmRlcjooKT0+aVBlfSk7dmFyIEdpZSxpUGUsVmllPU0oKCk9PnsidXNlIHN0cmljdCI7UHYoKTtTRCgpO05zKCk7dUwoKTtGdCgpO3ppZSgpO3N3KCk7SzUoKTtjTCgpO2h0KCk7Q3YoKTtWdCgpO0dpZT1vKGFzeW5jKHQsZSxyLG4saSxhKT0+e1kud2FybigiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjpYQVgiLEhvKGUpLGkpO2xldCBzPWUuZ3JhcGgoKS5yYW5rZGlyO1kudHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIscyk7bGV0IGw9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTtlLm5vZGVzKCk/WS5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIsZS5ub2RlcygpKTpZLmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsZSksZS5lZGdlcygpLmxlbmd0aD4wJiZZLmluZm8oIlJlY3Vyc2l2ZSBlZGdlcyIsZS5lZGdlKGUuZWRnZXMoKVswXSkpO2xldCB1PWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVycyIpLGg9bC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRocyIpLGY9bC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKSxkPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpO2F3YWl0IFByb21pc2UuYWxsKGUubm9kZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24oeSl7bGV0IHY9ZS5ub2RlKHkpO2lmKGkhPT12b2lkIDApe2xldCB4PUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaS5jbHVzdGVyRGF0YSkpO1kudHJhY2UoYFNldHRpbmcgZGF0YSBmb3IgcGFyZW50IGNsdXN0ZXIgWFhYCiBOb2RlLmlkID0gYCx5LGAKIGRhdGE9YCx4LmhlaWdodCxgClBhcmVudCBjbHVzdGVyYCxpLmhlaWdodCksZS5zZXROb2RlKGkuaWQseCksZS5wYXJlbnQoeSl8fChZLnRyYWNlKCJTZXR0aW5nIHBhcmVudCIseSxpLmlkKSxlLnNldFBhcmVudCh5LGkuaWQseCkpfWlmKFkuaW5mbygiKEluc2VydCkgTm9kZSBYWFgiK3krIjogIitKU09OLnN0cmluZ2lmeShlLm5vZGUoeSkpKSx2Py5jbHVzdGVyTm9kZSl7WS5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQgWEJYIix5LHYud2lkdGgsZS5ub2RlKHkpKTtsZXR7cmFua3NlcDp4LG5vZGVzZXA6Yn09ZS5ncmFwaCgpO3YuZ3JhcGguc2V0R3JhcGgoey4uLnYuZ3JhcGguZ3JhcGgoKSxyYW5rc2VwOngrMjUsbm9kZXNlcDpifSk7bGV0IHc9YXdhaXQgR2llKGQsdi5ncmFwaCxyLG4sZS5ub2RlKHkpLGEpLF89dy5lbGVtO1FlKHYsXyksdi5kaWZmPXcuZGlmZnx8MCxZLmluZm8oIk5ldyBjb21wb3VuZCBub2RlIGFmdGVyIHJlY3Vyc2l2ZSByZW5kZXIgWEFYIix5LCJ3aWR0aCIsdi53aWR0aCwiaGVpZ2h0Iix2LmhlaWdodCksYUooXyx2KX1lbHNlIGUuY2hpbGRyZW4oeSkubGVuZ3RoPjA/KFkudHJhY2UoIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhCWCIseSx2LmlkLHYsdi53aWR0aCwiR3JhcGg6IixlKSxZLnRyYWNlKEJtKHYuaWQsZSkpLHdyLnNldCh2LmlkLHtpZDpCbSh2LmlkLGUpLG5vZGU6dn0pKTooWS50cmFjZSgiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWEFYIix5LGQsZS5ub2RlKHkpLHMpLGF3YWl0IGdtKGQsZS5ub2RlKHkpLHtjb25maWc6YSxkaXI6c30pKX0pKSxhd2FpdCBvKGFzeW5jKCk9PntsZXQgeT1lLmVkZ2VzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKHYpe2xldCB4PWUuZWRnZSh2LnYsdi53LHYubmFtZSk7WS5pbmZvKCJFZGdlICIrdi52KyIgLT4gIit2LncrIjogIitKU09OLnN0cmluZ2lmeSh2KSksWS5pbmZvKCJFZGdlICIrdi52KyIgLT4gIit2LncrIjogIix2LCIgIixKU09OLnN0cmluZ2lmeShlLmVkZ2UodikpKSxZLmluZm8oIkZpeCIsd3IsImlkczoiLHYudix2LncsIlRyYW5zbGF0aW5nOiAiLHdyLmdldCh2LnYpLHdyLmdldCh2LncpKSxhd2FpdCB0dyhmLHgpfSk7YXdhaXQgUHJvbWlzZS5hbGwoeSl9LCJwcm9jZXNzRWRnZXMiKSgpLFkuaW5mbygiR3JhcGggYmVmb3JlIGxheW91dDoiLEpTT04uc3RyaW5naWZ5KEhvKGUpKSksWS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgWFhYIiksWS5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMgWFhYIiksWS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgWFhYIiksRHUoZSksWS5pbmZvKCJHcmFwaCBhZnRlciBsYXlvdXQ6IixKU09OLnN0cmluZ2lmeShIbyhlKSkpO2xldCBtPTAse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpnfT1fdShhKTtyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoRmllKGUpLm1hcChhc3luYyBmdW5jdGlvbih5KXtsZXQgdj1lLm5vZGUoeSk7aWYoWS5pbmZvKCJQb3NpdGlvbiBYQlggPT4gIit5KyI6ICgiK3YueCwiLCIrdi55LCIpIHdpZHRoOiAiLHYud2lkdGgsIiBoZWlnaHQ6ICIsdi5oZWlnaHQpLHY/LmNsdXN0ZXJOb2RlKXYueSs9ZyxZLmluZm8oIkEgdGFpbnRlZCBjbHVzdGVyIG5vZGUgWEJYMSIseSx2LmlkLHYud2lkdGgsdi5oZWlnaHQsdi54LHYueSxlLnBhcmVudCh5KSksd3IuZ2V0KHYuaWQpLm5vZGU9dixfdih2KTtlbHNlIGlmKGUuY2hpbGRyZW4oeSkubGVuZ3RoPjApe1kuaW5mbygiQSBwdXJlIGNsdXN0ZXIgbm9kZSBYQlgxIix5LHYuaWQsdi54LHYueSx2LndpZHRoLHYuaGVpZ2h0LGUucGFyZW50KHkpKSx2LmhlaWdodCs9ZyxlLm5vZGUodi5wYXJlbnRJZCk7bGV0IHg9dj8ucGFkZGluZy8yfHwwLGI9dj8ubGFiZWxCQm94Py5oZWlnaHR8fDAsdz1iLXh8fDA7WS5kZWJ1ZygiT2Zmc2V0WSIsdywibGFiZWxIZWlnaHQiLGIsImhhbGZQYWRkaW5nIix4KSxhd2FpdCBtbSh1LHYpLHdyLmdldCh2LmlkKS5ub2RlPXZ9ZWxzZXtsZXQgeD1lLm5vZGUodi5wYXJlbnRJZCk7di55Kz1nLzIsWS5pbmZvKCJBIHJlZ3VsYXIgbm9kZSBYQlgxIC0gdXNpbmcgdGhlIHBhZGRpbmciLHYuaWQsInBhcmVudCIsdi5wYXJlbnRJZCx2LndpZHRoLHYuaGVpZ2h0LHYueCx2LnksIm9mZnNldFkiLHYub2Zmc2V0WSwicGFyZW50Iix4LHg/Lm9mZnNldFksdiksX3Yodil9fSkpLGUuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2xldCB2PWUuZWRnZSh5KTtZLmluZm8oIkVkZ2UgIit5LnYrIiAtPiAiK3kudysiOiAiK0pTT04uc3RyaW5naWZ5KHYpLHYpLHYucG9pbnRzLmZvckVhY2goXz0+Xy55Kz1nLzIpO2xldCB4PWUubm9kZSh5LnYpO3ZhciBiPWUubm9kZSh5LncpO2xldCB3PW53KGgsdix3cixyLHgsYixuKTtydyh2LHcpfSksZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oeSl7bGV0IHY9ZS5ub2RlKHkpO1kuaW5mbyh5LHYudHlwZSx2LmRpZmYpLHYuaXNHcm91cCYmKG09di5kaWZmKX0pLFkud2FybigiUmV0dXJuaW5nIGZyb20gcmVjdXJzaXZlIHJlbmRlciBYQVgiLGwsbSkse2VsZW06bCxkaWZmOm19fSwicmVjdXJzaXZlUmVuZGVyIiksaVBlPW8oYXN5bmModCxlKT0+e2xldCByPW5ldyBNcih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnQuZGlyZWN0aW9uLG5vZGVzZXA6dC5jb25maWc/Lm5vZGVTcGFjaW5nfHx0LmNvbmZpZz8uZmxvd2NoYXJ0Py5ub2RlU3BhY2luZ3x8dC5ub2RlU3BhY2luZyxyYW5rc2VwOnQuY29uZmlnPy5yYW5rU3BhY2luZ3x8dC5jb25maWc/LmZsb3djaGFydD8ucmFua1NwYWNpbmd8fHQucmFua1NwYWNpbmcsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pLG49ZS5zZWxlY3QoImciKTtpdyhuLHQubWFya2Vycyx0LnR5cGUsdC5kaWFncmFtSWQpLHNKKCksaUooKSxaWigpLFJpZSgpLHQubm9kZXMuZm9yRWFjaChhPT57ci5zZXROb2RlKGEuaWQsey4uLmF9KSxhLnBhcmVudElkJiZyLnNldFBhcmVudChhLmlkLGEucGFyZW50SWQpfSksWS5kZWJ1ZygiRWRnZXM6Iix0LmVkZ2VzKSx0LmVkZ2VzLmZvckVhY2goYT0+e2lmKGEuc3RhcnQ9PT1hLmVuZCl7bGV0IHM9YS5zdGFydCxsPXMrIi0tLSIrcysiLS0tMSIsdT1zKyItLS0iK3MrIi0tLTIiLGg9ci5ub2RlKHMpO3Iuc2V0Tm9kZShsLHtkb21JZDpsLGlkOmwscGFyZW50SWQ6aC5wYXJlbnRJZCxsYWJlbFN0eWxlOiIiLGxhYmVsOiIiLHBhZGRpbmc6MCxzaGFwZToibGFiZWxSZWN0IixzdHlsZToiIix3aWR0aDoxMCxoZWlnaHQ6MTB9KSxyLnNldFBhcmVudChsLGgucGFyZW50SWQpLHIuc2V0Tm9kZSh1LHtkb21JZDp1LGlkOnUscGFyZW50SWQ6aC5wYXJlbnRJZCxsYWJlbFN0eWxlOiIiLHBhZGRpbmc6MCxzaGFwZToibGFiZWxSZWN0IixsYWJlbDoiIixzdHlsZToiIix3aWR0aDoxMCxoZWlnaHQ6MTB9KSxyLnNldFBhcmVudCh1LGgucGFyZW50SWQpO2xldCBmPXN0cnVjdHVyZWRDbG9uZShhKSxkPXN0cnVjdHVyZWRDbG9uZShhKSxwPXN0cnVjdHVyZWRDbG9uZShhKTtmLmxhYmVsPSIiLGYuYXJyb3dUeXBlRW5kPSJub25lIixmLmlkPXMrIi1jeWNsaWMtc3BlY2lhbC0xIixkLmFycm93VHlwZUVuZD0ibm9uZSIsZC5pZD1zKyItY3ljbGljLXNwZWNpYWwtbWlkIixwLmxhYmVsPSIiLGguaXNHcm91cCYmKGYuZnJvbUNsdXN0ZXI9cyxwLnRvQ2x1c3Rlcj1zKSxwLmlkPXMrIi1jeWNsaWMtc3BlY2lhbC0yIixyLnNldEVkZ2UocyxsLGYscysiLWN5Y2xpYy1zcGVjaWFsLTAiKSxyLnNldEVkZ2UobCx1LGQscysiLWN5Y2xpYy1zcGVjaWFsLTEiKSxyLnNldEVkZ2UodSxzLHAscysiLWN5YzxsaWMtc3BlY2lhbC0yIil9ZWxzZSByLnNldEVkZ2UoYS5zdGFydCxhLmVuZCx7Li4uYX0sYS5pZCl9KSxZLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsSlNPTi5zdHJpbmdpZnkoSG8ocikpKSxPaWUociksWS53YXJuKCJHcmFwaCBhZnRlciBYQVg6IixKU09OLnN0cmluZ2lmeShIbyhyKSkpO2xldCBpPWRlKCk7YXdhaXQgR2llKG4scix0LnR5cGUsdC5kaWFncmFtSWQsdm9pZCAwLGkpfSwicmVuZGVyIil9KTt2YXIgQnYsQ0QsYVBlLEZtLGNULEZ2PU0oKCk9PnsidXNlIHN0cmljdCI7bEooKTtodCgpO0J2PXt9LENEPW8odD0+e2ZvcihsZXQgZSBvZiB0KUJ2W2UubmFtZV09ZX0sInJlZ2lzdGVyTGF5b3V0TG9hZGVycyIpLGFQZT1vKCgpPT57Q0QoW3tuYW1lOiJkYWdyZSIsbG9hZGVyOm8oYXN5bmMoKT0+YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFZpZSgpLCRpZSkpLCJsb2FkZXIiKX1dKX0sInJlZ2lzdGVyRGVmYXVsdExheW91dExvYWRlcnMiKTthUGUoKTtGbT1vKGFzeW5jKHQsZSk9PntpZighKHQubGF5b3V0QWxnb3JpdGhtIGluIEJ2KSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGF5b3V0IGFsZ29yaXRobTogJHt0LmxheW91dEFsZ29yaXRobX1gKTtsZXQgcj1Cdlt0LmxheW91dEFsZ29yaXRobV07cmV0dXJuKGF3YWl0IHIubG9hZGVyKCkpLnJlbmRlcih0LGUsb0ose2FsZ29yaXRobTpyLmFsZ29yaXRobX0pfSwicmVuZGVyIiksY1Q9bygodD0iIix7ZmFsbGJhY2s6ZT0iZGFncmUifT17fSk9PntpZih0IGluIEJ2KXJldHVybiB0O2lmKGUgaW4gQnYpcmV0dXJuIFkud2FybihgTGF5b3V0IGFsZ29yaXRobSAke3R9IGlzIG5vdCByZWdpc3RlcmVkLiBVc2luZyAke2V9IGFzIGZhbGxiYWNrLmApLGU7dGhyb3cgbmV3IEVycm9yKGBCb3RoIGxheW91dCBhbGdvcml0aG1zICR7dH0gYW5kICR7ZX0gYXJlIG5vdCByZWdpc3RlcmVkLmApfSwiZ2V0UmVnaXN0ZXJlZExheW91dEFsZ29yaXRobSIpfSk7dmFyIHptLHNQZSxvUGUsdVQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtuaSgpO2h0KCk7em09bygodCxlLHIsbik9Pnt0LmF0dHIoImNsYXNzIixyKTtsZXR7d2lkdGg6aSxoZWlnaHQ6YSx4OnMseTpsfT1zUGUodCxlKTtacih0LGEsaSxuKTtsZXQgdT1vUGUocyxsLGksYSxlKTt0LmF0dHIoInZpZXdCb3giLHUpLFkuZGVidWcoYHZpZXdCb3ggY29uZmlndXJlZDogJHt1fSB3aXRoIHBhZGRpbmc6ICR7ZX1gKX0sInNldHVwVmlld1BvcnRGb3JTVkciKSxzUGU9bygodCxlKT0+e2xldCByPXQubm9kZSgpPy5nZXRCQm94KCl8fHt3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O3JldHVybnt3aWR0aDpyLndpZHRoK2UqMixoZWlnaHQ6ci5oZWlnaHQrZSoyLHg6ci54LHk6ci55fX0sImNhbGN1bGF0ZURpbWVuc2lvbnNXaXRoUGFkZGluZyIpLG9QZT1vKCh0LGUscixuLGkpPT5gJHt0LWl9ICR7ZS1pfSAke3J9ICR7bn1gLCJjcmVhdGVWaWV3Qm94Iil9KTt2YXIgbFBlLGNQZSxVaWUsSGllPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTtWdCgpO2h0KCk7ajUoKTtGdigpO3VUKCk7aHIoKTtvTCgpO2xQZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLGNQZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe1kuaW5mbygiUkVGMDoiKSxZLmluZm8oIkRyYXdpbmcgc3RhdGUgZGlhZ3JhbSAodjIpIixlKTtsZXR7c2VjdXJpdHlMZXZlbDppLGZsb3djaGFydDphLGxheW91dDpzfT1kZSgpLGw7aT09PSJzYW5kYm94IiYmKGw9emUoIiNpIitlKSk7bGV0IHU9aT09PSJzYW5kYm94Ij9sLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1kuZGVidWcoIkJlZm9yZSBnZXREYXRhOiAiKTtsZXQgaD1uLmRiLmdldERhdGEoKTtZLmRlYnVnKCJEYXRhOiAiLGgpO2xldCBmPXBtKGUsaSksZD1zTCgpO2gudHlwZT1uLnR5cGUsaC5sYXlvdXRBbGdvcml0aG09Y1QocyksaC5sYXlvdXRBbGdvcml0aG09PT0iZGFncmUiJiZzPT09ImVsayImJlkud2FybigiZmxvd2NoYXJ0LWVsayB3YXMgbW92ZWQgdG8gYW4gZXh0ZXJuYWwgcGFja2FnZSBpbiBNZXJtYWlkIHYxMS4gUGxlYXNlIHJlZmVyIFtyZWxlYXNlIG5vdGVzXShodHRwczovL2dpdGh1Yi5jb20vbWVybWFpZC1qcy9tZXJtYWlkL3JlbGVhc2VzL3RhZy92MTEuMC4wKSBmb3IgbW9yZSBkZXRhaWxzLiBUaGlzIGRpYWdyYW0gd2lsbCBiZSByZW5kZXJlZCB1c2luZyBgZGFncmVgIGxheW91dCBhcyBhIGZhbGxiYWNrLiIpLGguZGlyZWN0aW9uPWQsaC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZ3x8NTAsaC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZ3x8NTAsaC5tYXJrZXJzPVsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLGguZGlhZ3JhbUlkPWUsWS5kZWJ1ZygiUkVGMToiLGgpLGF3YWl0IEZtKGgsZik7bGV0IHA9aC5jb25maWcuZmxvd2NoYXJ0Py5kaWFncmFtUGFkZGluZz8/ODtVdC5pbnNlcnRUaXRsZShmLCJmbG93Y2hhcnRUaXRsZVRleHQiLGE/LnRpdGxlVG9wTWFyZ2lufHwwLG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLHptKGYscCwiZmxvd2NoYXJ0IixhPy51c2VNYXhXaWR0aHx8ITEpO2ZvcihsZXQgbSBvZiBoLm5vZGVzKXtsZXQgZz16ZShgIyR7ZX0gW2lkPSIke20uaWR9Il1gKTtpZighZ3x8IW0ubGluayljb250aW51ZTtsZXQgeT11LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7eS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsbS5jc3NDbGFzc2VzKSx5LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksaT09PSJzYW5kYm94Ij95LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTptLmxpbmtUYXJnZXQmJnkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixtLmxpbmtUYXJnZXQpO2xldCB2PWcuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHl9LCI6Zmlyc3QtY2hpbGQiKSx4PWcuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7eCYmdi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4geC5ub2RlKCl9KTtsZXQgYj1nLnNlbGVjdCgiLmxhYmVsIik7YiYmdi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gYi5ub2RlKCl9KX19LCJkcmF3IiksVWllPXtnZXRDbGFzc2VzOmxQZSxkcmF3OmNQZX19KTt2YXIgQUQsV2llLFlpZT1NKCgpPT57InVzZSBzdHJpY3QiO0FEPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihrbixfdCxTdCxidCl7Zm9yKFN0PVN0fHx7fSxidD1rbi5sZW5ndGg7YnQtLTtTdFtrbltidF1dPV90KTtyZXR1cm4gU3R9LCJvIiksZT1bMSw0XSxyPVsxLDNdLG49WzEsNV0saT1bMSw4LDksMTAsMTEsMjcsMzQsMzYsMzgsNDQsNjAsODMsODQsODUsODYsODcsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNSwxMjAsMTIxLDEyMiwxMjNdLGE9WzIsMl0scz1bMSwxM10sbD1bMSwxNF0sdT1bMSwxNV0saD1bMSwxNl0sZj1bMSwyM10sZD1bMSwyNV0scD1bMSwyNl0sbT1bMSwyN10sZz1bMSw0OV0seT1bMSw0OF0sdj1bMSwyOV0seD1bMSwzMF0sYj1bMSwzMV0sdz1bMSwzMl0sXz1bMSwzM10sVD1bMSw0NF0sRT1bMSw0Nl0sTD1bMSw0Ml0sQz1bMSw0N10sQT1bMSw0M10sST1bMSw1MF0sRD1bMSw0NV0saz1bMSw1MV0sUj1bMSw1Ml0sUz1bMSwzNF0sTz1bMSwzNV0sTj1bMSwzNl0sUD1bMSwzN10sRj1bMSw1N10sQj1bMSw4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDQsNjAsODMsODQsODUsODYsODcsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNSwxMjAsMTIxLDEyMiwxMjNdLCQ9WzEsNjFdLHo9WzEsNjBdLFc9WzEsNjJdLGo9WzgsOSwxMSw3NSw3N10sSz1bMSw3N10saWU9WzEsOTBdLFE9WzEsOTVdLGVlPVsxLDk0XSxKPVsxLDkxXSxIPVsxLDg3XSxxPVsxLDkzXSxaPVsxLDg5XSxhZT1bMSw5Nl0sdWU9WzEsOTJdLGNlPVsxLDk3XSx0ZT1bMSw4OF0sRGU9WzgsOSwxMCwxMSw0MCw3NSw3N10sb2U9WzgsOSwxMCwxMSw0MCw0Niw3NSw3N10sa2U9WzgsOSwxMCwxMSwyOSw0MCw0NCw0Niw0OCw1MCw1Miw1NCw1Niw1OCw2MCw2Myw2NSw2Nyw2OCw3MCw3NSw3Nyw4OCwxMDEsMTA0LDEwNSwxMDgsMTEwLDExMywxMTQsMTE1XSxGZT1bOCw5LDExLDQ0LDYwLDc1LDc3LDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTVdLEJlPVs0NCw2MCw4OCwxMDEsMTA0LDEwNSwxMDgsMTEwLDExMywxMTQsMTE1XSxWZT1bMSwxMjNdLEdlPVsxLDEyMl0sSGU9WzEsMTMwXSx4ZT1bMSwxNDRdLFg9WzEsMTQ1XSxmZT1bMSwxNDZdLGhlPVsxLDE0N10sZ2U9WzEsMTMyXSxuZT1bMSwxMzRdLHllPVsxLDEzOF0sVT1bMSwxMzldLFRlPVsxLDE0MF0sc2U9WzEsMTQxXSxFZT1bMSwxNDJdLEFlPVsxLDE0M10sUGU9WzEsMTQ4XSxNZT1bMSwxNDldLG1lPVsxLDEyOF0sV2U9WzEsMTI5XSxSZT1bMSwxMzZdLHR0PVsxLDEzMV0sZ3Q9WzEsMTM1XSxFdD1bMSwxMzNdLHZ0PVs4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDQsNjAsODMsODQsODUsODYsODcsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNSwxMjAsMTIxLDEyMiwxMjNdLFllPVsxLDE1MV0sVHQ9WzEsMTUzXSwkZT1bOCw5LDExXSxydD1bOCw5LDEwLDExLDE0LDQ0LDYwLDg4LDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNV0sZnQ9WzEsMTczXSxrdD1bMSwxNjldLGVyPVsxLDE3MF0sZHQ9WzEsMTc0XSxYZT1bMSwxNzFdLGN0PVsxLDE3Ml0sTHQ9Wzc3LDExNSwxMThdLFJ0PVs4LDksMTAsMTEsMTIsMTQsMjcsMjksMzIsNDQsNjAsNzUsODMsODQsODUsODYsODcsODgsODksMTA0LDEwOCwxMTAsMTEzLDExNCwxMTVdLHp0PVsxMCwxMDVdLFhuPVszMSw0OSw1MSw1Myw1NSw1Nyw2Miw2NCw2Niw2Nyw2OSw3MSwxMTUsMTE2LDExN10sb3I9WzEsMjQyXSxobj1bMSwyNDBdLFRuPVsxLDI0NF0sVXI9WzEsMjM4XSxyaT1bMSwyMzldLE1uPVsxLDI0MV0seXQ9WzEsMjQzXSxTZT1bMSwyNDVdLGF0PVsxLDI2M10sQXQ9WzgsOSwxMSwxMDVdLHByPVs4LDksMTAsMTEsNjAsODMsMTA0LDEwNSwxMDgsMTA5LDExMCwxMTFdLEluPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdyYXBoQ29uZmlnOjQsZG9jdW1lbnQ6NSxsaW5lOjYsc3RhdGVtZW50OjcsU0VNSTo4LE5FV0xJTkU6OSxTUEFDRToxMCxFT0Y6MTEsR1JBUEg6MTIsTk9ESVI6MTMsRElSOjE0LEZpcnN0U3RtdFNlcGFyYXRvcjoxNSxlbmRpbmc6MTYsZW5kVG9rZW46MTcsc3BhY2VMaXN0OjE4LHNwYWNlTGlzdE5ld2xpbmU6MTksdmVydGV4U3RhdGVtZW50OjIwLHNlcGFyYXRvcjoyMSxzdHlsZVN0YXRlbWVudDoyMixsaW5rU3R5bGVTdGF0ZW1lbnQ6MjMsY2xhc3NEZWZTdGF0ZW1lbnQ6MjQsY2xhc3NTdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsc3ViZ3JhcGg6MjcsdGV4dE5vVGFnczoyOCxTUVM6MjksdGV4dDozMCxTUUU6MzEsZW5kOjMyLGRpcmVjdGlvbjozMyxhY2NfdGl0bGU6MzQsYWNjX3RpdGxlX3ZhbHVlOjM1LGFjY19kZXNjcjozNixhY2NfZGVzY3JfdmFsdWU6MzcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozOCxzaGFwZURhdGE6MzksU0hBUEVfREFUQTo0MCxsaW5rOjQxLG5vZGU6NDIsc3R5bGVkVmVydGV4OjQzLEFNUDo0NCx2ZXJ0ZXg6NDUsU1RZTEVfU0VQQVJBVE9SOjQ2LGlkU3RyaW5nOjQ3LERPVUJMRUNJUkNMRVNUQVJUOjQ4LERPVUJMRUNJUkNMRUVORDo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQ6NTgsIk5PREVfU1RSSU5HW2ZpZWxkXSI6NTksQ09MT046NjAsIk5PREVfU1RSSU5HW3ZhbHVlXSI6NjEsUElQRTo2MixDWUxJTkRFUlNUQVJUOjYzLENZTElOREVSRU5EOjY0LERJQU1PTkRfU1RBUlQ6NjUsRElBTU9ORF9TVE9QOjY2LFRBR0VORDo2NyxUUkFQU1RBUlQ6NjgsVFJBUEVORDo2OSxJTlZUUkFQU1RBUlQ6NzAsSU5WVFJBUEVORDo3MSxsaW5rU3RhdGVtZW50OjcyLGFycm93VGV4dDo3MyxURVNUU1RSOjc0LFNUQVJUX0xJTks6NzUsZWRnZVRleHQ6NzYsTElOSzo3NyxlZGdlVGV4dFRva2VuOjc4LFNUUjo3OSxNRF9TVFI6ODAsdGV4dFRva2VuOjgxLGtleXdvcmRzOjgyLFNUWUxFOjgzLExJTktTVFlMRTo4NCxDTEFTU0RFRjo4NSxDTEFTUzo4NixDTElDSzo4NyxET1dOOjg4LFVQOjg5LHRleHROb1RhZ3NUb2tlbjo5MCxzdHlsZXNPcHQ6OTEsImlkU3RyaW5nW3ZlcnRleF0iOjkyLCJpZFN0cmluZ1tjbGFzc10iOjkzLENBTExCQUNLTkFNRTo5NCxDQUxMQkFDS0FSR1M6OTUsSFJFRjo5NixMSU5LX1RBUkdFVDo5NywiU1RSW2xpbmtdIjo5OCwiU1RSW3Rvb2x0aXBdIjo5OSxhbHBoYU51bToxMDAsREVGQVVMVDoxMDEsbnVtTGlzdDoxMDIsSU5URVJQT0xBVEU6MTAzLE5VTToxMDQsQ09NTUE6MTA1LHN0eWxlOjEwNixzdHlsZUNvbXBvbmVudDoxMDcsTk9ERV9TVFJJTkc6MTA4LFVOSVQ6MTA5LEJSS1Q6MTEwLFBDVDoxMTEsaWRTdHJpbmdUb2tlbjoxMTIsTUlOVVM6MTEzLE1VTFQ6MTE0LFVOSUNPREVfVEVYVDoxMTUsVEVYVDoxMTYsVEFHU1RBUlQ6MTE3LEVER0VfVEVYVDoxMTgsYWxwaGFOdW1Ub2tlbjoxMTksZGlyZWN0aW9uX3RiOjEyMCxkaXJlY3Rpb25fYnQ6MTIxLGRpcmVjdGlvbl9ybDoxMjIsZGlyZWN0aW9uX2xyOjEyMywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDA6IlNIQVBFX0RBVEEiLDQ0OiJBTVAiLDQ2OiJTVFlMRV9TRVBBUkFUT1IiLDQ4OiJET1VCTEVDSVJDTEVTVEFSVCIsNDk6IkRPVUJMRUNJUkNMRUVORCIsNTA6IlBTIiw1MToiUEUiLDUyOiIoLSIsNTM6Ii0pIiw1NDoiU1RBRElVTVNUQVJUIiw1NToiU1RBRElVTUVORCIsNTY6IlNVQlJPVVRJTkVTVEFSVCIsNTc6IlNVQlJPVVRJTkVFTkQiLDU4OiJWRVJURVhfV0lUSF9QUk9QU19TVEFSVCIsNTk6Ik5PREVfU1RSSU5HW2ZpZWxkXSIsNjA6IkNPTE9OIiw2MToiTk9ERV9TVFJJTkdbdmFsdWVdIiw2MjoiUElQRSIsNjM6IkNZTElOREVSU1RBUlQiLDY0OiJDWUxJTkRFUkVORCIsNjU6IkRJQU1PTkRfU1RBUlQiLDY2OiJESUFNT05EX1NUT1AiLDY3OiJUQUdFTkQiLDY4OiJUUkFQU1RBUlQiLDY5OiJUUkFQRU5EIiw3MDoiSU5WVFJBUFNUQVJUIiw3MToiSU5WVFJBUEVORCIsNzQ6IlRFU1RTVFIiLDc1OiJTVEFSVF9MSU5LIiw3NzoiTElOSyIsNzk6IlNUUiIsODA6Ik1EX1NUUiIsODM6IlNUWUxFIiw4NDoiTElOS1NUWUxFIiw4NToiQ0xBU1NERUYiLDg2OiJDTEFTUyIsODc6IkNMSUNLIiw4ODoiRE9XTiIsODk6IlVQIiw5MjoiaWRTdHJpbmdbdmVydGV4XSIsOTM6ImlkU3RyaW5nW2NsYXNzXSIsOTQ6IkNBTExCQUNLTkFNRSIsOTU6IkNBTExCQUNLQVJHUyIsOTY6IkhSRUYiLDk3OiJMSU5LX1RBUkdFVCIsOTg6IlNUUltsaW5rXSIsOTk6IlNUUlt0b29sdGlwXSIsMTAxOiJERUZBVUxUIiwxMDM6IklOVEVSUE9MQVRFIiwxMDQ6Ik5VTSIsMTA1OiJDT01NQSIsMTA4OiJOT0RFX1NUUklORyIsMTA5OiJVTklUIiwxMTA6IkJSS1QiLDExMToiUENUIiwxMTM6Ik1JTlVTIiwxMTQ6Ik1VTFQiLDExNToiVU5JQ09ERV9URVhUIiwxMTY6IlRFWFQiLDExNzoiVEFHU1RBUlQiLDExODoiRURHRV9URVhUIiwxMjA6ImRpcmVjdGlvbl90YiIsMTIxOiJkaXJlY3Rpb25fYnQiLDEyMjoiZGlyZWN0aW9uX3JsIiwxMjM6ImRpcmVjdGlvbl9sciJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbNSwwXSxbNSwyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbMTYsMl0sWzE2LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNSwxXSxbMTUsMV0sWzE1LDJdLFsxOSwyXSxbMTksMl0sWzE5LDFdLFsxOSwxXSxbMTgsMl0sWzE4LDFdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDldLFs3LDZdLFs3LDRdLFs3LDFdLFs3LDJdLFs3LDJdLFs3LDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFszOSwyXSxbMzksMV0sWzIwLDRdLFsyMCwzXSxbMjAsNF0sWzIwLDJdLFsyMCwyXSxbMjAsMV0sWzQyLDFdLFs0Miw2XSxbNDIsNV0sWzQzLDFdLFs0MywzXSxbNDUsNF0sWzQ1LDRdLFs0NSw2XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsOF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDZdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDFdLFs0MSwyXSxbNDEsM10sWzQxLDNdLFs0MSwxXSxbNDEsM10sWzc2LDFdLFs3NiwyXSxbNzYsMV0sWzc2LDFdLFs3MiwxXSxbNzMsM10sWzMwLDFdLFszMCwyXSxbMzAsMV0sWzMwLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzI4LDFdLFsyOCwyXSxbMjgsMV0sWzI4LDFdLFsyNCw1XSxbMjUsNV0sWzI2LDJdLFsyNiw0XSxbMjYsM10sWzI2LDVdLFsyNiwzXSxbMjYsNV0sWzI2LDVdLFsyNiw3XSxbMjYsMl0sWzI2LDRdLFsyNiwyXSxbMjYsNF0sWzI2LDRdLFsyNiw2XSxbMjIsNV0sWzIzLDVdLFsyMyw1XSxbMjMsOV0sWzIzLDldLFsyMyw3XSxbMjMsN10sWzEwMiwxXSxbMTAyLDNdLFs5MSwxXSxbOTEsM10sWzEwNiwxXSxbMTA2LDJdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzgxLDFdLFs4MSwxXSxbODEsMV0sWzgxLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzc4LDFdLFs3OCwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzQ3LDFdLFs0NywyXSxbMTAwLDFdLFsxMDAsMl0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oX3QsU3QsYnQsVWUsS3QscGUsYmkpe3ZhciBiZT1wZS5sZW5ndGgtMTtzd2l0Y2goS3Qpe2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOighQXJyYXkuaXNBcnJheShwZVtiZV0pfHxwZVtiZV0ubGVuZ3RoPjApJiZwZVtiZS0xXS5wdXNoKHBlW2JlXSksdGhpcy4kPXBlW2JlLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDE4MTp0aGlzLiQ9cGVbYmVdO2JyZWFrO2Nhc2UgMTE6VWUuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMTI6VWUuc2V0RGlyZWN0aW9uKHBlW2JlLTFdKSx0aGlzLiQ9cGVbYmUtMV07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9cGVbYmUtMV0ubm9kZXM7YnJlYWs7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzA6Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD1bXTticmVhaztjYXNlIDMzOnRoaXMuJD1VZS5hZGRTdWJHcmFwaChwZVtiZS02XSxwZVtiZS0xXSxwZVtiZS00XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9VWUuYWRkU3ViR3JhcGgocGVbYmUtM10scGVbYmUtMV0scGVbYmUtM10pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPVVlLmFkZFN1YkdyYXBoKHZvaWQgMCxwZVtiZS0xXSx2b2lkIDApO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXBlW2JlXS50cmltKCksVWUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDM4OmNhc2UgMzk6dGhpcy4kPXBlW2JlXS50cmltKCksVWUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDQzOnRoaXMuJD1wZVtiZS0xXStwZVtiZV07YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9cGVbYmVdO2JyZWFrO2Nhc2UgNDU6VWUuYWRkVmVydGV4KHBlW2JlLTFdWzBdLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHBlW2JlXSksVWUuYWRkTGluayhwZVtiZS0zXS5zdG10LHBlW2JlLTFdLHBlW2JlLTJdKSx0aGlzLiQ9e3N0bXQ6cGVbYmUtMV0sbm9kZXM6cGVbYmUtMV0uY29uY2F0KHBlW2JlLTNdLm5vZGVzKX07YnJlYWs7Y2FzZSA0NjpVZS5hZGRMaW5rKHBlW2JlLTJdLnN0bXQscGVbYmVdLHBlW2JlLTFdKSx0aGlzLiQ9e3N0bXQ6cGVbYmVdLG5vZGVzOnBlW2JlXS5jb25jYXQocGVbYmUtMl0ubm9kZXMpfTticmVhaztjYXNlIDQ3OlVlLmFkZExpbmsocGVbYmUtM10uc3RtdCxwZVtiZS0xXSxwZVtiZS0yXSksdGhpcy4kPXtzdG10OnBlW2JlLTFdLG5vZGVzOnBlW2JlLTFdLmNvbmNhdChwZVtiZS0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXtzdG10OnBlW2JlLTFdLG5vZGVzOnBlW2JlLTFdfTticmVhaztjYXNlIDQ5OlVlLmFkZFZlcnRleChwZVtiZS0xXVswXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxwZVtiZV0pLHRoaXMuJD17c3RtdDpwZVtiZS0xXSxub2RlczpwZVtiZS0xXSxzaGFwZURhdGE6cGVbYmVdfTticmVhaztjYXNlIDUwOnRoaXMuJD17c3RtdDpwZVtiZV0sbm9kZXM6cGVbYmVdfTticmVhaztjYXNlIDUxOnRoaXMuJD1bcGVbYmVdXTticmVhaztjYXNlIDUyOlVlLmFkZFZlcnRleChwZVtiZS01XVswXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxwZVtiZS00XSksdGhpcy4kPXBlW2JlLTVdLmNvbmNhdChwZVtiZV0pO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPXBlW2JlLTRdLmNvbmNhdChwZVtiZV0pO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXBlW2JlXTticmVhaztjYXNlIDU1OnRoaXMuJD1wZVtiZS0yXSxVZS5zZXRDbGFzcyhwZVtiZS0yXSxwZVtiZV0pO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwic3F1YXJlIik7YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9cGVbYmUtM10sVWUuYWRkVmVydGV4KHBlW2JlLTNdLHBlW2JlLTFdLCJkb3VibGVjaXJjbGUiKTticmVhaztjYXNlIDU4OnRoaXMuJD1wZVtiZS01XSxVZS5hZGRWZXJ0ZXgocGVbYmUtNV0scGVbYmUtMl0sImNpcmNsZSIpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwic3RhZGl1bSIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwic3Vicm91dGluZSIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPXBlW2JlLTddLFVlLmFkZFZlcnRleChwZVtiZS03XSxwZVtiZS0xXSwicmVjdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsT2JqZWN0LmZyb21FbnRyaWVzKFtbcGVbYmUtNV0scGVbYmUtM11dXSkpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDY0OnRoaXMuJD1wZVtiZS0zXSxVZS5hZGRWZXJ0ZXgocGVbYmUtM10scGVbYmUtMV0sInJvdW5kIik7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9cGVbYmUtM10sVWUuYWRkVmVydGV4KHBlW2JlLTNdLHBlW2JlLTFdLCJkaWFtb25kIik7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9cGVbYmUtNV0sVWUuYWRkVmVydGV4KHBlW2JlLTVdLHBlW2JlLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9cGVbYmUtM10sVWUuYWRkVmVydGV4KHBlW2JlLTNdLHBlW2JlLTFdLCJvZGQiKTticmVhaztjYXNlIDY4OnRoaXMuJD1wZVtiZS0zXSxVZS5hZGRWZXJ0ZXgocGVbYmUtM10scGVbYmUtMV0sInRyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwibGVhbl9yaWdodCIpO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPXBlW2JlLTNdLFVlLmFkZFZlcnRleChwZVtiZS0zXSxwZVtiZS0xXSwibGVhbl9sZWZ0Iik7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9cGVbYmVdLFVlLmFkZFZlcnRleChwZVtiZV0pO2JyZWFrO2Nhc2UgNzM6cGVbYmUtMV0udGV4dD1wZVtiZV0sdGhpcy4kPXBlW2JlLTFdO2JyZWFrO2Nhc2UgNzQ6Y2FzZSA3NTpwZVtiZS0yXS50ZXh0PXBlW2JlLTFdLHRoaXMuJD1wZVtiZS0yXTticmVhaztjYXNlIDc2OnRoaXMuJD1wZVtiZV07YnJlYWs7Y2FzZSA3Nzp2YXIgdm89VWUuZGVzdHJ1Y3RMaW5rKHBlW2JlXSxwZVtiZS0yXSk7dGhpcy4kPXt0eXBlOnZvLnR5cGUsc3Ryb2tlOnZvLnN0cm9rZSxsZW5ndGg6dm8ubGVuZ3RoLHRleHQ6cGVbYmUtMV19O2JyZWFrO2Nhc2UgNzg6dGhpcy4kPXt0ZXh0OnBlW2JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6cGVbYmUtMV0udGV4dCsiIitwZVtiZV0sdHlwZTpwZVtiZS0xXS50eXBlfTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpwZVtiZV0sdHlwZToic3RyaW5nIn07YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9e3RleHQ6cGVbYmVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA4Mjp2YXIgdm89VWUuZGVzdHJ1Y3RMaW5rKHBlW2JlXSk7dGhpcy4kPXt0eXBlOnZvLnR5cGUsc3Ryb2tlOnZvLnN0cm9rZSxsZW5ndGg6dm8ubGVuZ3RofTticmVhaztjYXNlIDgzOnRoaXMuJD1wZVtiZS0xXTticmVhaztjYXNlIDg0OnRoaXMuJD17dGV4dDpwZVtiZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgODU6dGhpcy4kPXt0ZXh0OnBlW2JlLTFdLnRleHQrIiIrcGVbYmVdLHR5cGU6cGVbYmUtMV0udHlwZX07YnJlYWs7Y2FzZSA4Njp0aGlzLiQ9e3RleHQ6cGVbYmVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgODc6Y2FzZSAxMDI6dGhpcy4kPXt0ZXh0OnBlW2JlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgOTk6dGhpcy4kPXt0ZXh0OnBlW2JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAxMDA6dGhpcy4kPXt0ZXh0OnBlW2JlLTFdLnRleHQrIiIrcGVbYmVdLHR5cGU6cGVbYmUtMV0udHlwZX07YnJlYWs7Y2FzZSAxMDE6dGhpcy4kPXt0ZXh0OnBlW2JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAxMDM6dGhpcy4kPXBlW2JlLTRdLFVlLmFkZENsYXNzKHBlW2JlLTJdLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMDQ6dGhpcy4kPXBlW2JlLTRdLFVlLnNldENsYXNzKHBlW2JlLTJdLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMDU6Y2FzZSAxMTM6dGhpcy4kPXBlW2JlLTFdLFVlLnNldENsaWNrRXZlbnQocGVbYmUtMV0scGVbYmVdKTticmVhaztjYXNlIDEwNjpjYXNlIDExNDp0aGlzLiQ9cGVbYmUtM10sVWUuc2V0Q2xpY2tFdmVudChwZVtiZS0zXSxwZVtiZS0yXSksVWUuc2V0VG9vbHRpcChwZVtiZS0zXSxwZVtiZV0pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1wZVtiZS0yXSxVZS5zZXRDbGlja0V2ZW50KHBlW2JlLTJdLHBlW2JlLTFdLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMDg6dGhpcy4kPXBlW2JlLTRdLFVlLnNldENsaWNrRXZlbnQocGVbYmUtNF0scGVbYmUtM10scGVbYmUtMl0pLFVlLnNldFRvb2x0aXAocGVbYmUtNF0scGVbYmVdKTticmVhaztjYXNlIDEwOTp0aGlzLiQ9cGVbYmUtMl0sVWUuc2V0TGluayhwZVtiZS0yXSxwZVtiZV0pO2JyZWFrO2Nhc2UgMTEwOnRoaXMuJD1wZVtiZS00XSxVZS5zZXRMaW5rKHBlW2JlLTRdLHBlW2JlLTJdKSxVZS5zZXRUb29sdGlwKHBlW2JlLTRdLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMTE6dGhpcy4kPXBlW2JlLTRdLFVlLnNldExpbmsocGVbYmUtNF0scGVbYmUtMl0scGVbYmVdKTticmVhaztjYXNlIDExMjp0aGlzLiQ9cGVbYmUtNl0sVWUuc2V0TGluayhwZVtiZS02XSxwZVtiZS00XSxwZVtiZV0pLFVlLnNldFRvb2x0aXAocGVbYmUtNl0scGVbYmUtMl0pO2JyZWFrO2Nhc2UgMTE1OnRoaXMuJD1wZVtiZS0xXSxVZS5zZXRMaW5rKHBlW2JlLTFdLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPXBlW2JlLTNdLFVlLnNldExpbmsocGVbYmUtM10scGVbYmUtMl0pLFVlLnNldFRvb2x0aXAocGVbYmUtM10scGVbYmVdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9cGVbYmUtM10sVWUuc2V0TGluayhwZVtiZS0zXSxwZVtiZS0yXSxwZVtiZV0pO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1wZVtiZS01XSxVZS5zZXRMaW5rKHBlW2JlLTVdLHBlW2JlLTRdLHBlW2JlXSksVWUuc2V0VG9vbHRpcChwZVtiZS01XSxwZVtiZS0yXSk7YnJlYWs7Y2FzZSAxMTk6dGhpcy4kPXBlW2JlLTRdLFVlLmFkZFZlcnRleChwZVtiZS0yXSx2b2lkIDAsdm9pZCAwLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMjA6dGhpcy4kPXBlW2JlLTRdLFVlLnVwZGF0ZUxpbmsoW3BlW2JlLTJdXSxwZVtiZV0pO2JyZWFrO2Nhc2UgMTIxOnRoaXMuJD1wZVtiZS00XSxVZS51cGRhdGVMaW5rKHBlW2JlLTJdLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMjI6dGhpcy4kPXBlW2JlLThdLFVlLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbcGVbYmUtNl1dLHBlW2JlLTJdKSxVZS51cGRhdGVMaW5rKFtwZVtiZS02XV0scGVbYmVdKTticmVhaztjYXNlIDEyMzp0aGlzLiQ9cGVbYmUtOF0sVWUudXBkYXRlTGlua0ludGVycG9sYXRlKHBlW2JlLTZdLHBlW2JlLTJdKSxVZS51cGRhdGVMaW5rKHBlW2JlLTZdLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMjQ6dGhpcy4kPXBlW2JlLTZdLFVlLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbcGVbYmUtNF1dLHBlW2JlXSk7YnJlYWs7Y2FzZSAxMjU6dGhpcy4kPXBlW2JlLTZdLFVlLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShwZVtiZS00XSxwZVtiZV0pO2JyZWFrO2Nhc2UgMTI2OmNhc2UgMTI4OnRoaXMuJD1bcGVbYmVdXTticmVhaztjYXNlIDEyNzpjYXNlIDEyOTpwZVtiZS0yXS5wdXNoKHBlW2JlXSksdGhpcy4kPXBlW2JlLTJdO2JyZWFrO2Nhc2UgMTMxOnRoaXMuJD1wZVtiZS0xXStwZVtiZV07YnJlYWs7Y2FzZSAxNzk6dGhpcy4kPXBlW2JlXTticmVhaztjYXNlIDE4MDp0aGlzLiQ9cGVbYmUtMV0rIiIrcGVbYmVdO2JyZWFrO2Nhc2UgMTgyOnRoaXMuJD1wZVtiZS0xXSsiIitwZVtiZV07YnJlYWs7Y2FzZSAxODM6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTg0OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE4NTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxODY6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9O2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw5OmUsMTA6ciwxMjpufSx7MTpbM119LHQoaSxhLHs1OjZ9KSx7NDo3LDk6ZSwxMDpyLDEyOm59LHs0OjgsOTplLDEwOnIsMTI6bn0sezEzOlsxLDldLDE0OlsxLDEwXX0sezE6WzIsMV0sNjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDgzOnYsODQ6eCw4NTpiLDg2OncsODc6Xyw4ODpULDEwMTpFLDEwNDpMLDEwNTpDLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6UiwxMjA6UywxMjE6TywxMjI6TiwxMjM6UH0sdChpLFsyLDldKSx0KGksWzIsMTBdKSx0KGksWzIsMTFdKSx7ODpbMSw1NF0sOTpbMSw1NV0sMTA6RiwxNTo1MywxODo1Nn0sdChCLFsyLDNdKSx0KEIsWzIsNF0pLHQoQixbMiw1XSksdChCLFsyLDZdKSx0KEIsWzIsN10pLHQoQixbMiw4XSksezg6JCw5OnosMTE6VywyMTo1OCw0MTo1OSw3Mjo2Myw3NTpbMSw2NF0sNzc6WzEsNjVdfSx7ODokLDk6eiwxMTpXLDIxOjY2fSx7ODokLDk6eiwxMTpXLDIxOjY3fSx7ODokLDk6eiwxMTpXLDIxOjY4fSx7ODokLDk6eiwxMTpXLDIxOjY5fSx7ODokLDk6eiwxMTpXLDIxOjcwfSx7ODokLDk6eiwxMDpbMSw3MV0sMTE6VywyMTo3Mn0sdChCLFsyLDM2XSksezM1OlsxLDczXX0sezM3OlsxLDc0XX0sdChCLFsyLDM5XSksdChqLFsyLDUwXSx7MTg6NzUsMzk6NzYsMTA6Riw0MDpLfSksezEwOlsxLDc4XX0sezEwOlsxLDc5XX0sezEwOlsxLDgwXX0sezEwOlsxLDgxXX0sezE0OmllLDQ0OlEsNjA6ZWUsNzk6WzEsODVdLDg4OkosOTQ6WzEsODJdLDk2OlsxLDgzXSwxMDA6ODQsMTA0OkgsMTA1OnEsMTA4OlosMTEwOmFlLDExMzp1ZSwxMTQ6Y2UsMTE1OnRlLDExOTo4Nn0sdChCLFsyLDE4M10pLHQoQixbMiwxODRdKSx0KEIsWzIsMTg1XSksdChCLFsyLDE4Nl0pLHQoRGUsWzIsNTFdKSx0KERlLFsyLDU0XSx7NDY6WzEsOThdfSksdChvZSxbMiw3Ml0sezExMjoxMTEsMjk6WzEsOTldLDQ0OmcsNDg6WzEsMTAwXSw1MDpbMSwxMDFdLDUyOlsxLDEwMl0sNTQ6WzEsMTAzXSw1NjpbMSwxMDRdLDU4OlsxLDEwNV0sNjA6eSw2MzpbMSwxMDZdLDY1OlsxLDEwN10sNjc6WzEsMTA4XSw2ODpbMSwxMDldLDcwOlsxLDExMF0sODg6VCwxMDE6RSwxMDQ6TCwxMDU6QywxMDg6QSwxMTA6SSwxMTM6RCwxMTQ6aywxMTU6Un0pLHQoa2UsWzIsMTc5XSksdChrZSxbMiwxNDBdKSx0KGtlLFsyLDE0MV0pLHQoa2UsWzIsMTQyXSksdChrZSxbMiwxNDNdKSx0KGtlLFsyLDE0NF0pLHQoa2UsWzIsMTQ1XSksdChrZSxbMiwxNDZdKSx0KGtlLFsyLDE0N10pLHQoa2UsWzIsMTQ4XSksdChrZSxbMiwxNDldKSx0KGtlLFsyLDE1MF0pLHQoaSxbMiwxMl0pLHQoaSxbMiwxOF0pLHQoaSxbMiwxOV0pLHs5OlsxLDExMl19LHQoRmUsWzIsMjZdLHsxODoxMTMsMTA6Rn0pLHQoQixbMiwyN10pLHs0MjoxMTQsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OkMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx0KEIsWzIsNDBdKSx0KEIsWzIsNDFdKSx0KEIsWzIsNDJdKSx0KEJlLFsyLDc2XSx7NzM6MTE1LDYyOlsxLDExN10sNzQ6WzEsMTE2XX0pLHs3NjoxMTgsNzg6MTE5LDc5OlsxLDEyMF0sODA6WzEsMTIxXSwxMTU6VmUsMTE4OkdlfSx0KFs0NCw2MCw2Miw3NCw4OCwxMDEsMTA0LDEwNSwxMDgsMTEwLDExMywxMTQsMTE1XSxbMiw4Ml0pLHQoQixbMiwyOF0pLHQoQixbMiwyOV0pLHQoQixbMiwzMF0pLHQoQixbMiwzMV0pLHQoQixbMiwzMl0pLHsxMDpIZSwxMjp4ZSwxNDpYLDI3OmZlLDI4OjEyNCwzMjpoZSw0NDpnZSw2MDpuZSw3NTp5ZSw3OTpbMSwxMjZdLDgwOlsxLDEyN10sODI6MTM3LDgzOlUsODQ6VGUsODU6c2UsODY6RWUsODc6QWUsODg6UGUsODk6TWUsOTA6MTI1LDEwNDptZSwxMDg6V2UsMTEwOlJlLDExMzp0dCwxMTQ6Z3QsMTE1OkV0fSx0KHZ0LGEsezU6MTUwfSksdChCLFsyLDM3XSksdChCLFsyLDM4XSksdChqLFsyLDQ4XSx7NDQ6WWV9KSx0KGosWzIsNDldLHsxODoxNTIsMTA6Riw0MDpUdH0pLHQoRGUsWzIsNDRdKSx7NDQ6Zyw0NzoxNTQsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpDLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sezEwMTpbMSwxNTVdLDEwMjoxNTYsMTA0OlsxLDE1N119LHs0NDpnLDQ3OjE1OCw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OkMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx7NDQ6Zyw0NzoxNTksNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpDLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sdCgkZSxbMiwxMDVdLHsxMDpbMSwxNjBdLDk1OlsxLDE2MV19KSx7Nzk6WzEsMTYyXX0sdCgkZSxbMiwxMTNdLHsxMTk6MTY0LDEwOlsxLDE2M10sMTQ6aWUsNDQ6USw2MDplZSw4ODpKLDEwNDpILDEwNTpxLDEwODpaLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZX0pLHQoJGUsWzIsMTE1XSx7MTA6WzEsMTY1XX0pLHQocnQsWzIsMTgxXSksdChydCxbMiwxNjhdKSx0KHJ0LFsyLDE2OV0pLHQocnQsWzIsMTcwXSksdChydCxbMiwxNzFdKSx0KHJ0LFsyLDE3Ml0pLHQocnQsWzIsMTczXSksdChydCxbMiwxNzRdKSx0KHJ0LFsyLDE3NV0pLHQocnQsWzIsMTc2XSksdChydCxbMiwxNzddKSx0KHJ0LFsyLDE3OF0pLHs0NDpnLDQ3OjE2Niw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OkMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx7MzA6MTY3LDY3OmZ0LDc5Omt0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sezMwOjE3NSw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHszMDoxNzcsNTA6WzEsMTc2XSw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHszMDoxNzgsNjc6ZnQsNzk6a3QsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6WGUsMTE3OmN0fSx7MzA6MTc5LDY3OmZ0LDc5Omt0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sezMwOjE4MCw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHsxMDg6WzEsMTgxXX0sezMwOjE4Miw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHszMDoxODMsNjU6WzEsMTg0XSw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHszMDoxODUsNjc6ZnQsNzk6a3QsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6WGUsMTE3OmN0fSx7MzA6MTg2LDY3OmZ0LDc5Omt0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sezMwOjE4Nyw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHQoa2UsWzIsMTgwXSksdChpLFsyLDIwXSksdChGZSxbMiwyNV0pLHQoaixbMiw0Nl0sezM5OjE4OCwxODoxODksMTA6Riw0MDpLfSksdChCZSxbMiw3M10sezEwOlsxLDE5MF19KSx7MTA6WzEsMTkxXX0sezMwOjE5Miw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHs3NzpbMSwxOTNdLDc4OjE5NCwxMTU6VmUsMTE4OkdlfSx0KEx0LFsyLDc4XSksdChMdCxbMiw4MF0pLHQoTHQsWzIsODFdKSx0KEx0LFsyLDE2Nl0pLHQoTHQsWzIsMTY3XSksezg6JCw5OnosMTA6SGUsMTE6VywxMjp4ZSwxNDpYLDIxOjE5NiwyNzpmZSwyOTpbMSwxOTVdLDMyOmhlLDQ0OmdlLDYwOm5lLDc1OnllLDgyOjEzNyw4MzpVLDg0OlRlLDg1OnNlLDg2OkVlLDg3OkFlLDg4OlBlLDg5Ok1lLDkwOjE5NywxMDQ6bWUsMTA4OldlLDExMDpSZSwxMTM6dHQsMTE0Omd0LDExNTpFdH0sdChSdCxbMiw5OV0pLHQoUnQsWzIsMTAxXSksdChSdCxbMiwxMDJdKSx0KFJ0LFsyLDE1NV0pLHQoUnQsWzIsMTU2XSksdChSdCxbMiwxNTddKSx0KFJ0LFsyLDE1OF0pLHQoUnQsWzIsMTU5XSksdChSdCxbMiwxNjBdKSx0KFJ0LFsyLDE2MV0pLHQoUnQsWzIsMTYyXSksdChSdCxbMiwxNjNdKSx0KFJ0LFsyLDE2NF0pLHQoUnQsWzIsMTY1XSksdChSdCxbMiw4OF0pLHQoUnQsWzIsODldKSx0KFJ0LFsyLDkwXSksdChSdCxbMiw5MV0pLHQoUnQsWzIsOTJdKSx0KFJ0LFsyLDkzXSksdChSdCxbMiw5NF0pLHQoUnQsWzIsOTVdKSx0KFJ0LFsyLDk2XSksdChSdCxbMiw5N10pLHQoUnQsWzIsOThdKSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMTk4XSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODM6diw4NDp4LDg1OmIsODY6dyw4NzpfLDg4OlQsMTAxOkUsMTA0OkwsMTA1OkMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSLDEyMDpTLDEyMTpPLDEyMjpOLDEyMzpQfSx7MTA6RiwxODoxOTl9LHs0NDpbMSwyMDBdfSx0KERlLFsyLDQzXSksezEwOlsxLDIwMV0sNDQ6Zyw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OkMsMTA4OkEsMTEwOkksMTEyOjExMSwxMTM6RCwxMTQ6aywxMTU6Un0sezEwOlsxLDIwMl19LHsxMDpbMSwyMDNdLDEwNTpbMSwyMDRdfSx0KHp0LFsyLDEyNl0pLHsxMDpbMSwyMDVdLDQ0OmcsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpDLDEwODpBLDExMDpJLDExMjoxMTEsMTEzOkQsMTE0OmssMTE1OlJ9LHsxMDpbMSwyMDZdLDQ0OmcsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpDLDEwODpBLDExMDpJLDExMjoxMTEsMTEzOkQsMTE0OmssMTE1OlJ9LHs3OTpbMSwyMDddfSx0KCRlLFsyLDEwN10sezEwOlsxLDIwOF19KSx0KCRlLFsyLDEwOV0sezEwOlsxLDIwOV19KSx7Nzk6WzEsMjEwXX0sdChydCxbMiwxODJdKSx7Nzk6WzEsMjExXSw5NzpbMSwyMTJdfSx0KERlLFsyLDU1XSx7MTEyOjExMSw0NDpnLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6QywxMDg6QSwxMTA6SSwxMTM6RCwxMTQ6aywxMTU6Un0pLHszMTpbMSwyMTNdLDY3OmZ0LDgxOjIxNCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sdChYbixbMiw4NF0pLHQoWG4sWzIsODZdKSx0KFhuLFsyLDg3XSksdChYbixbMiwxNTFdKSx0KFhuLFsyLDE1Ml0pLHQoWG4sWzIsMTUzXSksdChYbixbMiwxNTRdKSx7NDk6WzEsMjE1XSw2NzpmdCw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHszMDoyMTYsNjc6ZnQsNzk6a3QsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6WGUsMTE3OmN0fSx7NTE6WzEsMjE3XSw2NzpmdCw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHs1MzpbMSwyMThdLDY3OmZ0LDgxOjIxNCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sezU1OlsxLDIxOV0sNjc6ZnQsODE6MjE0LDExNTpkdCwxMTY6WGUsMTE3OmN0fSx7NTc6WzEsMjIwXSw2NzpmdCw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHs2MDpbMSwyMjFdfSx7NjQ6WzEsMjIyXSw2NzpmdCw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHs2NjpbMSwyMjNdLDY3OmZ0LDgxOjIxNCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sezMwOjIyNCw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHszMTpbMSwyMjVdLDY3OmZ0LDgxOjIxNCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sezY3OmZ0LDY5OlsxLDIyNl0sNzE6WzEsMjI3XSw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHs2NzpmdCw2OTpbMSwyMjldLDcxOlsxLDIyOF0sODE6MjE0LDExNTpkdCwxMTY6WGUsMTE3OmN0fSx0KGosWzIsNDVdLHsxODoxNTIsMTA6Riw0MDpUdH0pLHQoaixbMiw0N10sezQ0OlllfSksdChCZSxbMiw3NV0pLHQoQmUsWzIsNzRdKSx7NjI6WzEsMjMwXSw2NzpmdCw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHQoQmUsWzIsNzddKSx0KEx0LFsyLDc5XSksezMwOjIzMSw2NzpmdCw3OTprdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHQodnQsYSx7NToyMzJ9KSx0KFJ0LFsyLDEwMF0pLHQoQixbMiwzNV0pLHs0MzoyMzMsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OkMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx7MTA6RiwxODoyMzR9LHsxMDpvciw2MDpobiw4MzpUbiw5MToyMzUsMTA0OlVyLDEwNjoyMzYsMTA3OjIzNywxMDg6cmksMTA5Ok1uLDExMDp5dCwxMTE6U2V9LHsxMDpvciw2MDpobiw4MzpUbiw5MToyNDYsMTAzOlsxLDI0N10sMTA0OlVyLDEwNjoyMzYsMTA3OjIzNywxMDg6cmksMTA5Ok1uLDExMDp5dCwxMTE6U2V9LHsxMDpvciw2MDpobiw4MzpUbiw5MToyNDgsMTAzOlsxLDI0OV0sMTA0OlVyLDEwNjoyMzYsMTA3OjIzNywxMDg6cmksMTA5Ok1uLDExMDp5dCwxMTE6U2V9LHsxMDQ6WzEsMjUwXX0sezEwOm9yLDYwOmhuLDgzOlRuLDkxOjI1MSwxMDQ6VXIsMTA2OjIzNiwxMDc6MjM3LDEwODpyaSwxMDk6TW4sMTEwOnl0LDExMTpTZX0sezQ0OmcsNDc6MjUyLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6QywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlJ9LHQoJGUsWzIsMTA2XSksezc5OlsxLDI1M119LHs3OTpbMSwyNTRdLDk3OlsxLDI1NV19LHQoJGUsWzIsMTE0XSksdCgkZSxbMiwxMTZdLHsxMDpbMSwyNTZdfSksdCgkZSxbMiwxMTddKSx0KG9lLFsyLDU2XSksdChYbixbMiw4NV0pLHQob2UsWzIsNTddKSx7NTE6WzEsMjU3XSw2NzpmdCw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHQob2UsWzIsNjRdKSx0KG9lLFsyLDU5XSksdChvZSxbMiw2MF0pLHQob2UsWzIsNjFdKSx7MTA4OlsxLDI1OF19LHQob2UsWzIsNjNdKSx0KG9lLFsyLDY1XSksezY2OlsxLDI1OV0sNjc6ZnQsODE6MjE0LDExNTpkdCwxMTY6WGUsMTE3OmN0fSx0KG9lLFsyLDY3XSksdChvZSxbMiw2OF0pLHQob2UsWzIsNzBdKSx0KG9lLFsyLDY5XSksdChvZSxbMiw3MV0pLHQoWzEwLDQ0LDYwLDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTVdLFsyLDgzXSksezMxOlsxLDI2MF0sNjc6ZnQsODE6MjE0LDExNTpkdCwxMTY6WGUsMTE3OmN0fSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMjYxXSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODM6diw4NDp4LDg1OmIsODY6dyw4NzpfLDg4OlQsMTAxOkUsMTA0OkwsMTA1OkMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSLDEyMDpTLDEyMTpPLDEyMjpOLDEyMzpQfSx0KERlLFsyLDUzXSksezQzOjI2Miw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6QywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlJ9LHQoJGUsWzIsMTE5XSx7MTA1OmF0fSksdChBdCxbMiwxMjhdLHsxMDc6MjY0LDEwOm9yLDYwOmhuLDgzOlRuLDEwNDpVciwxMDg6cmksMTA5Ok1uLDExMDp5dCwxMTE6U2V9KSx0KHByLFsyLDEzMF0pLHQocHIsWzIsMTMyXSksdChwcixbMiwxMzNdKSx0KHByLFsyLDEzNF0pLHQocHIsWzIsMTM1XSksdChwcixbMiwxMzZdKSx0KHByLFsyLDEzN10pLHQocHIsWzIsMTM4XSksdChwcixbMiwxMzldKSx0KCRlLFsyLDEyMF0sezEwNTphdH0pLHsxMDpbMSwyNjVdfSx0KCRlLFsyLDEyMV0sezEwNTphdH0pLHsxMDpbMSwyNjZdfSx0KHp0LFsyLDEyN10pLHQoJGUsWzIsMTAzXSx7MTA1OmF0fSksdCgkZSxbMiwxMDRdLHsxMTI6MTExLDQ0OmcsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpDLDEwODpBLDExMDpJLDExMzpELDExNDprLDExNTpSfSksdCgkZSxbMiwxMDhdKSx0KCRlLFsyLDExMF0sezEwOlsxLDI2N119KSx0KCRlLFsyLDExMV0pLHs5NzpbMSwyNjhdfSx7NTE6WzEsMjY5XX0sezYyOlsxLDI3MF19LHs2NjpbMSwyNzFdfSx7ODokLDk6eiwxMTpXLDIxOjI3Mn0sdChCLFsyLDM0XSksdChEZSxbMiw1Ml0pLHsxMDpvciw2MDpobiw4MzpUbiwxMDQ6VXIsMTA2OjI3MywxMDc6MjM3LDEwODpyaSwxMDk6TW4sMTEwOnl0LDExMTpTZX0sdChwcixbMiwxMzFdKSx7MTQ6aWUsNDQ6USw2MDplZSw4ODpKLDEwMDoyNzQsMTA0OkgsMTA1OnEsMTA4OlosMTEwOmFlLDExMzp1ZSwxMTQ6Y2UsMTE1OnRlLDExOTo4Nn0sezE0OmllLDQ0OlEsNjA6ZWUsODg6SiwxMDA6Mjc1LDEwNDpILDEwNTpxLDEwODpaLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZSwxMTk6ODZ9LHs5NzpbMSwyNzZdfSx0KCRlLFsyLDExOF0pLHQob2UsWzIsNThdKSx7MzA6Mjc3LDY3OmZ0LDc5Omt0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OlhlLDExNzpjdH0sdChvZSxbMiw2Nl0pLHQodnQsYSx7NToyNzh9KSx0KEF0LFsyLDEyOV0sezEwNzoyNjQsMTA6b3IsNjA6aG4sODM6VG4sMTA0OlVyLDEwODpyaSwxMDk6TW4sMTEwOnl0LDExMTpTZX0pLHQoJGUsWzIsMTI0XSx7MTE5OjE2NCwxMDpbMSwyNzldLDE0OmllLDQ0OlEsNjA6ZWUsODg6SiwxMDQ6SCwxMDU6cSwxMDg6WiwxMTA6YWUsMTEzOnVlLDExNDpjZSwxMTU6dGV9KSx0KCRlLFsyLDEyNV0sezExOToxNjQsMTA6WzEsMjgwXSwxNDppZSw0NDpRLDYwOmVlLDg4OkosMTA0OkgsMTA1OnEsMTA4OlosMTEwOmFlLDExMzp1ZSwxMTQ6Y2UsMTE1OnRlfSksdCgkZSxbMiwxMTJdKSx7MzE6WzEsMjgxXSw2NzpmdCw4MToyMTQsMTE1OmR0LDExNjpYZSwxMTc6Y3R9LHs2OjExLDc6MTIsODpzLDk6bCwxMDp1LDExOmgsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6ZiwzMjpbMSwyODJdLDMzOjI0LDM0OmQsMzY6cCwzODptLDQyOjI4LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4Mzp2LDg0OngsODU6Yiw4Njp3LDg3Ol8sODg6VCwxMDE6RSwxMDQ6TCwxMDU6QywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlIsMTIwOlMsMTIxOk8sMTIyOk4sMTIzOlB9LHsxMDpvciw2MDpobiw4MzpUbiw5MToyODMsMTA0OlVyLDEwNjoyMzYsMTA3OjIzNywxMDg6cmksMTA5Ok1uLDExMDp5dCwxMTE6U2V9LHsxMDpvciw2MDpobiw4MzpUbiw5MToyODQsMTA0OlVyLDEwNjoyMzYsMTA3OjIzNywxMDg6cmksMTA5Ok1uLDExMDp5dCwxMTE6U2V9LHQob2UsWzIsNjJdKSx0KEIsWzIsMzNdKSx0KCRlLFsyLDEyMl0sezEwNTphdH0pLHQoJGUsWzIsMTIzXSx7MTA1OmF0fSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihfdCxTdCl7aWYoU3QucmVjb3ZlcmFibGUpdGhpcy50cmFjZShfdCk7ZWxzZXt2YXIgYnQ9bmV3IEVycm9yKF90KTt0aHJvdyBidC5oYXNoPVN0LGJ0fX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKF90KXt2YXIgU3Q9dGhpcyxidD1bMF0sVWU9W10sS3Q9W251bGxdLHBlPVtdLGJpPXRoaXMudGFibGUsYmU9IiIsdm89MCxiRj0wLHdGPTAsYXhlPTIsVEY9MSxzeGU9cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksamk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxQZj17eXk6e319O2Zvcih2YXIgZ1MgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnUykmJihQZi55eVtnU109dGhpcy55eVtnU10pO2ppLnNldElucHV0KF90LFBmLnl5KSxQZi55eS5sZXhlcj1qaSxQZi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgamkueXlsbG9jPiJ1IiYmKGppLnl5bGxvYz17fSk7dmFyIHlTPWppLnl5bGxvYztwZS5wdXNoKHlTKTt2YXIgb3hlPWppLm9wdGlvbnMmJmppLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBQZi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1QZi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBTYXQoVnMpe2J0Lmxlbmd0aD1idC5sZW5ndGgtMipWcyxLdC5sZW5ndGg9S3QubGVuZ3RoLVZzLHBlLmxlbmd0aD1wZS5sZW5ndGgtVnN9byhTYXQsInBvcFN0YWNrIik7ZnVuY3Rpb24gbHhlKCl7dmFyIFZzO3JldHVybiBWcz1VZS5wb3AoKXx8amkubGV4KCl8fFRGLHR5cGVvZiBWcyE9Im51bWJlciImJihWcyBpbnN0YW5jZW9mIEFycmF5JiYoVWU9VnMsVnM9VWUucG9wKCkpLFZzPVN0LnN5bWJvbHNfW1ZzXXx8VnMpLFZzfW8obHhlLCJsZXgiKTtmb3IodmFyIFZhLHZTLEJmLHhvLENhdCx4UyxRMD17fSxFYixYYyxrRixTYjs7KXtpZihCZj1idFtidC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tCZl0/eG89dGhpcy5kZWZhdWx0QWN0aW9uc1tCZl06KChWYT09PW51bGx8fHR5cGVvZiBWYT4idSIpJiYoVmE9bHhlKCkpLHhvPWJpW0JmXSYmYmlbQmZdW1ZhXSksdHlwZW9mIHhvPiJ1Inx8IXhvLmxlbmd0aHx8IXhvWzBdKXt2YXIgYlM9IiI7U2I9W107Zm9yKEViIGluIGJpW0JmXSl0aGlzLnRlcm1pbmFsc19bRWJdJiZFYj5heGUmJlNiLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFYl0rIiciKTtqaS5zaG93UG9zaXRpb24/YlM9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodm8rMSkrYDoKYCtqaS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1NiLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bVmFdfHxWYSkrIiciOmJTPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHZvKzEpKyI6IFVuZXhwZWN0ZWQgIisoVmE9PVRGPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1ZhXXx8VmEpKyInIiksdGhpcy5wYXJzZUVycm9yKGJTLHt0ZXh0OmppLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tWYV18fFZhLGxpbmU6amkueXlsaW5lbm8sbG9jOnlTLGV4cGVjdGVkOlNifSl9aWYoeG9bMF1pbnN0YW5jZW9mIEFycmF5JiZ4by5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0JmKyIsIHRva2VuOiAiK1ZhKTtzd2l0Y2goeG9bMF0pe2Nhc2UgMTpidC5wdXNoKFZhKSxLdC5wdXNoKGppLnl5dGV4dCkscGUucHVzaChqaS55eWxsb2MpLGJ0LnB1c2goeG9bMV0pLFZhPW51bGwsdlM/KFZhPXZTLHZTPW51bGwpOihiRj1qaS55eWxlbmcsYmU9amkueXl0ZXh0LHZvPWppLnl5bGluZW5vLHlTPWppLnl5bGxvYyx3Rj4wJiZ3Ri0tKTticmVhaztjYXNlIDI6aWYoWGM9dGhpcy5wcm9kdWN0aW9uc19beG9bMV1dWzFdLFEwLiQ9S3RbS3QubGVuZ3RoLVhjXSxRMC5fJD17Zmlyc3RfbGluZTpwZVtwZS5sZW5ndGgtKFhjfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6cGVbcGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46cGVbcGUubGVuZ3RoLShYY3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpwZVtwZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG94ZSYmKFEwLl8kLnJhbmdlPVtwZVtwZS5sZW5ndGgtKFhjfHwxKV0ucmFuZ2VbMF0scGVbcGUubGVuZ3RoLTFdLnJhbmdlWzFdXSkseFM9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFEwLFtiZSxiRix2byxQZi55eSx4b1sxXSxLdCxwZV0uY29uY2F0KHN4ZSkpLHR5cGVvZiB4UzwidSIpcmV0dXJuIHhTO1hjJiYoYnQ9YnQuc2xpY2UoMCwtMSpYYyoyKSxLdD1LdC5zbGljZSgwLC0xKlhjKSxwZT1wZS5zbGljZSgwLC0xKlhjKSksYnQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t4b1sxXV1bMF0pLEt0LnB1c2goUTAuJCkscGUucHVzaChRMC5fJCksa0Y9YmlbYnRbYnQubGVuZ3RoLTJdXVtidFtidC5sZW5ndGgtMV1dLGJ0LnB1c2goa0YpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxPbj1mdW5jdGlvbigpe3ZhciBrbj17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFN0LGJ0KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFN0LGJ0KTtlbHNlIHRocm93IG5ldyBFcnJvcihTdCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihfdCxTdCl7cmV0dXJuIHRoaXMueXk9U3R8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PV90LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIF90PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1fdCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9X3QsdGhpcy5tYXRjaGVkKz1fdDt2YXIgU3Q9X3QubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBTdD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksX3R9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oX3Qpe3ZhciBTdD1fdC5sZW5ndGgsYnQ9X3Quc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1fdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtU3QpLHRoaXMub2Zmc2V0LT1TdDt2YXIgVWU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksYnQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1idC5sZW5ndGgtMSk7dmFyIEt0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpidD8oYnQubGVuZ3RoPT09VWUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStVZVtVZS5sZW5ndGgtYnQubGVuZ3RoXS5sZW5ndGgtYnRbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1TdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtLdFswXSxLdFswXSt0aGlzLnl5bGVuZy1TdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKF90KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoX3QpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBfdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKF90Lmxlbmd0aD4yMD8iLi4uIjoiIikrX3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgX3Q9dGhpcy5tYXRjaDtyZXR1cm4gX3QubGVuZ3RoPDIwJiYoX3QrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLV90Lmxlbmd0aCkpLChfdC5zdWJzdHIoMCwyMCkrKF90Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIF90PXRoaXMucGFzdElucHV0KCksU3Q9bmV3IEFycmF5KF90Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIF90K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtTdCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oX3QsU3Qpe3ZhciBidCxVZSxLdDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoS3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoS3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksVWU9X3RbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFVlJiYodGhpcy55eWxpbmVubys9VWUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46VWU/VWVbVWUubGVuZ3RoLTFdLmxlbmd0aC1VZVtVZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitfdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1fdFswXSx0aGlzLm1hdGNoKz1fdFswXSx0aGlzLm1hdGNoZXM9X3QsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoX3RbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPV90WzBdLGJ0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFN0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGJ0KXJldHVybiBidDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgcGUgaW4gS3QpdGhpc1twZV09S3RbcGVdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBfdCxTdCxidCxVZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBLdD10aGlzLl9jdXJyZW50UnVsZXMoKSxwZT0wO3BlPEt0Lmxlbmd0aDtwZSsrKWlmKGJ0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbS3RbcGVdXSksYnQmJighU3R8fGJ0WzBdLmxlbmd0aD5TdFswXS5sZW5ndGgpKXtpZihTdD1idCxVZT1wZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihfdD10aGlzLnRlc3RfbWF0Y2goYnQsS3RbcGVdKSxfdCE9PSExKXJldHVybiBfdDtpZih0aGlzLl9iYWNrdHJhY2spe1N0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFN0PyhfdD10aGlzLnRlc3RfbWF0Y2goU3QsS3RbVWVdKSxfdCE9PSExP190OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIFN0PXRoaXMubmV4dCgpO3JldHVybiBTdHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oU3Qpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChTdCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgU3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gU3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihTdCl7cmV0dXJuIFN0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoU3R8fDApLFN0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbU3RdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oU3Qpe3RoaXMuYmVnaW4oU3QpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oU3QsYnQsVWUsS3Qpe3ZhciBwZT1LdDtzd2l0Y2goVWUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJzaGFwZURhdGEiKSxidC55eXRleHQ9IiIsNDA7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhU3RyIiksNDA7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDA7YnJlYWs7Y2FzZSAxMDpsZXQgYmk9L1xuXHMqL2c7cmV0dXJuIGJ0Lnl5dGV4dD1idC55eXRleHQucmVwbGFjZShiaSwiPGJyLz4iKSw0MDticmVhaztjYXNlIDExOnJldHVybiA0MDtjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDk0O2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIDk1O2Nhc2UgMTk6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTp0aGlzLmJlZ2luKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDIyOnJldHVybiJTVFIiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIDgzO2Nhc2UgMjY6cmV0dXJuIDEwMTtjYXNlIDI3OnJldHVybiA4NDtjYXNlIDI4OnJldHVybiAxMDM7Y2FzZSAyOTpyZXR1cm4gODU7Y2FzZSAzMDpyZXR1cm4gODY7Y2FzZSAzMTpyZXR1cm4gOTY7Y2FzZSAzMjp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMzM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIDg3O2Nhc2UgMzU6cmV0dXJuIFN0LmxleC5maXJzdEdyYXBoKCkmJnRoaXMuYmVnaW4oImRpciIpLDEyO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIFN0LmxleC5maXJzdEdyYXBoKCkmJnRoaXMuYmVnaW4oImRpciIpLDEyO2JyZWFrO2Nhc2UgMzc6cmV0dXJuIFN0LmxleC5maXJzdEdyYXBoKCkmJnRoaXMuYmVnaW4oImRpciIpLDEyO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIDI3O2Nhc2UgMzk6cmV0dXJuIDMyO2Nhc2UgNDA6cmV0dXJuIDk3O2Nhc2UgNDE6cmV0dXJuIDk3O2Nhc2UgNDI6cmV0dXJuIDk3O2Nhc2UgNDM6cmV0dXJuIDk3O2Nhc2UgNDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxMzticmVhaztjYXNlIDQ1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA0OTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1NTpyZXR1cm4gMTIwO2Nhc2UgNTY6cmV0dXJuIDEyMTtjYXNlIDU3OnJldHVybiAxMjI7Y2FzZSA1ODpyZXR1cm4gMTIzO2Nhc2UgNTk6cmV0dXJuIDEwNDtjYXNlIDYwOnJldHVybiAxMTA7Y2FzZSA2MTpyZXR1cm4gNDY7Y2FzZSA2MjpyZXR1cm4gNjA7Y2FzZSA2MzpyZXR1cm4gNDQ7Y2FzZSA2NDpyZXR1cm4gODtjYXNlIDY1OnJldHVybiAxMDU7Y2FzZSA2NjpyZXR1cm4gMTE0O2Nhc2UgNjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NzticmVhaztjYXNlIDY4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWRnZVRleHQiKSw3NTticmVhaztjYXNlIDY5OnJldHVybiAxMTg7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc3O2JyZWFrO2Nhc2UgNzE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0aGlja0VkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3MjpyZXR1cm4gMTE4O2Nhc2UgNzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NzticmVhaztjYXNlIDc0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZG90dGVkRWRnZVRleHQiKSw3NTticmVhaztjYXNlIDc1OnJldHVybiAxMTg7Y2FzZSA3NjpyZXR1cm4gNzc7Y2FzZSA3NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUzO2JyZWFrO2Nhc2UgNzg6cmV0dXJuIlRFWFQiO2Nhc2UgNzk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlbGxpcHNlVGV4dCIpLDUyO2JyZWFrO2Nhc2UgODA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1NTticmVhaztjYXNlIDgxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDU0O2JyZWFrO2Nhc2UgODI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1NzticmVhaztjYXNlIDgzOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDU2O2JyZWFrO2Nhc2UgODQ6cmV0dXJuIDU4O2Nhc2UgODU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjc7YnJlYWs7Y2FzZSA4NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY0O2JyZWFrO2Nhc2UgODc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjM7YnJlYWs7Y2FzZSA4ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ5O2JyZWFrO2Nhc2UgODk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNDg7YnJlYWs7Y2FzZSA5MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY5O2JyZWFrO2Nhc2UgOTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3MTticmVhaztjYXNlIDkyOnJldHVybiAxMTY7Y2FzZSA5MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRyYXBUZXh0IiksNjg7YnJlYWs7Y2FzZSA5NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRyYXBUZXh0IiksNzA7YnJlYWs7Y2FzZSA5NTpyZXR1cm4gMTE3O2Nhc2UgOTY6cmV0dXJuIDY3O2Nhc2UgOTc6cmV0dXJuIDg5O2Nhc2UgOTg6cmV0dXJuIlNFUCI7Y2FzZSA5OTpyZXR1cm4gODg7Y2FzZSAxMDA6cmV0dXJuIDExNDtjYXNlIDEwMTpyZXR1cm4gMTEwO2Nhc2UgMTAyOnJldHVybiA0NDtjYXNlIDEwMzpyZXR1cm4gMTA4O2Nhc2UgMTA0OnJldHVybiAxMTM7Y2FzZSAxMDU6cmV0dXJuIDExNTtjYXNlIDEwNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDYyO2JyZWFrO2Nhc2UgMTA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYyO2JyZWFrO2Nhc2UgMTA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTE7YnJlYWs7Y2FzZSAxMDk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTA7YnJlYWs7Y2FzZSAxMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzMTticmVhaztjYXNlIDExMTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSwyOTticmVhaztjYXNlIDExMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY2O2JyZWFrO2Nhc2UgMTEzOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY1O2JyZWFrO2Nhc2UgMTE0OnJldHVybiJURVhUIjtjYXNlIDExNTpyZXR1cm4iUVVPVEUiO2Nhc2UgMTE2OnJldHVybiA5O2Nhc2UgMTE3OnJldHVybiAxMDtjYXNlIDExODpyZXR1cm4gMTF9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OkBceykvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteXCJdKykvLC9eKD86W159XiJdKykvLC9eKD86XH0pLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXVtgXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpzdHlsZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxiKS8sL14oPzpjbGFzc1xiKS8sL14oPzpocmVmW1xzXSkvLC9eKD86Y2xpY2tbXHNdKykvLC9eKD86W1xzXG5dKS8sL14oPzpbXlxzXG5dKikvLC9eKD86Zmxvd2NoYXJ0LWVsa1xiKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpbXi1dfC0oPyEtKSspLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OltePV18PSg/ISkpLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbXlwuXXxcLig/ISkpLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlstL1wpXVtcKV0pLywvXig/OlteXChcKVxbXF1ce1x9XXwhXCkrKS8sL14oPzpcKC0pLywvXig/OlxdXCkpLywvXig/OlwoXFspLywvXig/OlxdXF0pLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/Oj4pLywvXig/OlwpXF0pLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XChcKFwoKS8sL14oPzpbXFwoPz1cXSldW1xdXSkvLC9eKD86XC8oPz1cXSlcXSkvLC9eKD86XC8oPyFcXSl8XFwoPyFcXSl8W15cXFxbXF1cKFwpXHtcfVwvXSspLywvXig/OlxbXC8pLywvXig/OlxbXFwpLywvXig/OjwpLywvXig/Oj4pLywvXig/OlxeKS8sL14oPzpcXFx8KS8sL14oPzp2XGIpLywvXig/OlwqKS8sL14oPzojKS8sL14oPzomKS8sL14oPzooW0EtWmEtejAtOSEiXCMkJSYnKitcLmA/XFxfXC9dfC0oPz1bXlw+XC1cLl0pfCg/ISkpKykvLC9eKD86LSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XHwpLywvXig/OlwpKS8sL14oPzpcKCkvLC9eKD86XF0pLywvXig/OlxbKS8sL14oPzooXH0pKS8sL14oPzpceykvLC9eKD86W15cW1xdXChcKVx7XH1cfFwiXSspLywvXig/OiIpLywvXig/Oihccj9cbikrKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOntzaGFwZURhdGFFbmRCcmFja2V0OntydWxlczpbMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YVN0cjp7cnVsZXM6WzksMTAsMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YTp7cnVsZXM6WzgsMTEsMTIsMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzE3LDE4LDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNCwxNSwxNiwyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzIxLDI0LDMzLDM0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDczLDc1LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMjEsMjQsNzAsNzIsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMjEsMjQsNjcsNjksNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMjEsMjQsNzYsNzksODEsODMsODcsODksOTAsOTEsOTIsOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMjEsMjQsNzYsNzcsNzgsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsyMSwyNCw3Niw3OSw4MCw4MSw4Miw4Myw4Niw4Nyw4OCw4OSw5Myw5NCwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNF0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMjEsMjQsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzE5LDIwLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyMSwyMiwyMywyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTMsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNzAsNzEsNzMsNzQsNzYsNzksODEsODMsODQsODUsODcsODksOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA3LDEwOSwxMTEsMTEzLDExNSwxMTYsMTE3LDExOF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBrbn0oKTtJbi5sZXhlcj1PbjtmdW5jdGlvbiBJcigpe3RoaXMueXk9e319cmV0dXJuIG8oSXIsIlBhcnNlciIpLElyLnByb3RvdHlwZT1JbixJbi5QYXJzZXI9SXIsbmV3IElyfSgpO0FELnBhcnNlcj1BRDtXaWU9QUR9KTt2YXIgdVBlLGhQZSxxaWUsWGllPU0oKCk9PnsidXNlIHN0cmljdCI7VG8oKTt1UGU9bygodCxlKT0+e2xldCByPXoxLG49cih0LCJyIiksaT1yKHQsImciKSxhPXIodCwiYiIpO3JldHVybiBIcyhuLGksYSxlKX0sImZhZGUiKSxoUGU9byh0PT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbiBwIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIH0KCiAgLmxhYmVsIHRleHQsc3BhbiB7CiAgICBmaWxsOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAucm91Z2gtbm9kZSAubGFiZWwgdGV4dCAsIC5ub2RlIC5sYWJlbCB0ZXh0LCAuaW1hZ2Utc2hhcGUgLmxhYmVsLCAuaWNvbi1zaGFwZSAubGFiZWwgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1vdXRlci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIC8vIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LWlubmVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAvLyB9CgogIC5ub2RlIC5rYXRleCBwYXRoIHsKICAgIGZpbGw6ICMwMDA7CiAgICBzdHJva2U6ICMwMDA7CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5yb3VnaC1ub2RlIC5sYWJlbCwubm9kZSAubGFiZWwsIC5pbWFnZS1zaGFwZSAubGFiZWwsIC5pY29uLXNoYXBlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKCiAgLnJvb3QgLmFuY2hvciBwYXRoIHsKICAgIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHt0LmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLyogRm9yIGh0bWwgbGFiZWxzIG9ubHkgKi8KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt1UGUodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLC41KX07CiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOgogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke3QuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7dC5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CgogIHJlY3QudGV4dCB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlLXdpZHRoOiAwOwogIH0KCiAgLmljb24tc2hhcGUsIC5pbWFnZS1zaGFwZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICBwIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBwYWRkaW5nOiAycHg7CiAgICB9CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmAsImdldFN0eWxlcyIpLHFpZT1oUGV9KTt2YXIgaFQ9e307dnIoaFQse2RpYWdyYW06KCk9PmZQZX0pO3ZhciBmUGUsZlQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO29MKCk7SGllKCk7WWllKCk7WGllKCk7ZlBlPXtwYXJzZXI6V2llLGRiOlg1LHJlbmRlcmVyOlVpZSxzdHlsZXM6cWllLGluaXQ6byh0PT57dC5mbG93Y2hhcnR8fCh0LmZsb3djaGFydD17fSksdC5sYXlvdXQmJm43KHtsYXlvdXQ6dC5sYXlvdXR9KSx0LmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxuNyh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOnQuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxYNS5jbGVhcigpLFg1LnNldEdlbigiZ2VuLTIiKX0sImluaXQiKX19KTt2YXIgX0QsSmllLGVhZT1NKCgpPT57InVzZSBzdHJpY3QiO19EPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihDLEEsSSxEKXtmb3IoST1JfHx7fSxEPUMubGVuZ3RoO0QtLTtJW0NbRF1dPUEpO3JldHVybiBJfSwibyIpLGU9WzYsOCwxMCwyMCwyMiwyNCwyNiwyNywyOF0scj1bMSwxMF0sbj1bMSwxMV0saT1bMSwxMl0sYT1bMSwxM10scz1bMSwxNF0sbD1bMSwxNV0sdT1bMSwyMV0saD1bMSwyMl0sZj1bMSwyM10sZD1bMSwyNF0scD1bMSwyNV0sbT1bNiw4LDEwLDEzLDE1LDE4LDE5LDIwLDIyLDI0LDI2LDI3LDI4LDQxLDQyLDQzLDQ0LDQ1XSxnPVsxLDM0XSx5PVsyNywyOCw0Niw0N10sdj1bNDEsNDIsNDMsNDQsNDVdLHg9WzE3LDM0XSxiPVsxLDU0XSx3PVsxLDUzXSxfPVsxNywzNCwzNiwzOF0sVD17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLGVudGl0eU5hbWU6MTEscmVsU3BlYzoxMiwiOiI6MTMscm9sZToxNCxCTE9DS19TVEFSVDoxNSxhdHRyaWJ1dGVzOjE2LEJMT0NLX1NUT1A6MTcsU1FTOjE4LFNRRToxOSx0aXRsZToyMCx0aXRsZV92YWx1ZToyMSxhY2NfdGl0bGU6MjIsYWNjX3RpdGxlX3ZhbHVlOjIzLGFjY19kZXNjcjoyNCxhY2NfZGVzY3JfdmFsdWU6MjUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyNixBTFBIQU5VTToyNyxFTlRJVFlfTkFNRToyOCxhdHRyaWJ1dGU6MjksYXR0cmlidXRlVHlwZTozMCxhdHRyaWJ1dGVOYW1lOjMxLGF0dHJpYnV0ZUtleVR5cGVMaXN0OjMyLGF0dHJpYnV0ZUNvbW1lbnQ6MzMsQVRUUklCVVRFX1dPUkQ6MzQsYXR0cmlidXRlS2V5VHlwZTozNSxDT01NQTozNixBVFRSSUJVVEVfS0VZOjM3LENPTU1FTlQ6MzgsY2FyZGluYWxpdHk6MzkscmVsVHlwZTo0MCxaRVJPX09SX09ORTo0MSxaRVJPX09SX01PUkU6NDIsT05FX09SX01PUkU6NDMsT05MWV9PTkU6NDQsTURfUEFSRU5UOjQ1LE5PTl9JREVOVElGWUlORzo0NixJREVOVElGWUlORzo0NyxXT1JEOjQ4LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJFUl9ESUFHUkFNIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTM6IjoiLDE1OiJCTE9DS19TVEFSVCIsMTc6IkJMT0NLX1NUT1AiLDE4OiJTUVMiLDE5OiJTUUUiLDIwOiJ0aXRsZSIsMjE6InRpdGxlX3ZhbHVlIiwyMjoiYWNjX3RpdGxlIiwyMzoiYWNjX3RpdGxlX3ZhbHVlIiwyNDoiYWNjX2Rlc2NyIiwyNToiYWNjX2Rlc2NyX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjc6IkFMUEhBTlVNIiwyODoiRU5USVRZX05BTUUiLDM0OiJBVFRSSUJVVEVfV09SRCIsMzY6IkNPTU1BIiwzNzoiQVRUUklCVVRFX0tFWSIsMzg6IkNPTU1FTlQiLDQxOiJaRVJPX09SX09ORSIsNDI6IlpFUk9fT1JfTU9SRSIsNDM6Ik9ORV9PUl9NT1JFIiw0NDoiT05MWV9PTkUiLDQ1OiJNRF9QQVJFTlQiLDQ2OiJOT05fSURFTlRJRllJTkciLDQ3OiJJREVOVElGWUlORyIsNDg6IldPUkQifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksNV0sWzksNF0sWzksM10sWzksMV0sWzksN10sWzksNl0sWzksNF0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzExLDFdLFsxMSwxXSxbMTYsMV0sWzE2LDJdLFsyOSwyXSxbMjksM10sWzI5LDNdLFsyOSw0XSxbMzAsMV0sWzMxLDFdLFszMiwxXSxbMzIsM10sWzM1LDFdLFszMywxXSxbMTIsM10sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbNDAsMV0sWzQwLDFdLFsxNCwxXSxbMTQsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oQSxJLEQsayxSLFMsTyl7dmFyIE49Uy5sZW5ndGgtMTtzd2l0Y2goUil7Y2FzZSAxOmJyZWFrO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOlNbTi0xXS5wdXNoKFNbTl0pLHRoaXMuJD1TW04tMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9U1tOXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6ay5hZGRFbnRpdHkoU1tOLTRdKSxrLmFkZEVudGl0eShTW04tMl0pLGsuYWRkUmVsYXRpb25zaGlwKFNbTi00XSxTW05dLFNbTi0yXSxTW04tM10pO2JyZWFrO2Nhc2UgOTprLmFkZEVudGl0eShTW04tM10pLGsuYWRkQXR0cmlidXRlcyhTW04tM10sU1tOLTFdKTticmVhaztjYXNlIDEwOmsuYWRkRW50aXR5KFNbTi0yXSk7YnJlYWs7Y2FzZSAxMTprLmFkZEVudGl0eShTW05dKTticmVhaztjYXNlIDEyOmsuYWRkRW50aXR5KFNbTi02XSxTW04tNF0pLGsuYWRkQXR0cmlidXRlcyhTW04tNl0sU1tOLTFdKTticmVhaztjYXNlIDEzOmsuYWRkRW50aXR5KFNbTi01XSxTW04tM10pO2JyZWFrO2Nhc2UgMTQ6ay5hZGRFbnRpdHkoU1tOLTNdLFNbTi0xXSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE2OnRoaXMuJD1TW05dLnRyaW0oKSxrLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1TW05dLnRyaW0oKSxrLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDQzOnRoaXMuJD1TW05dO2JyZWFrO2Nhc2UgMjA6Y2FzZSA0MTpjYXNlIDQyOnRoaXMuJD1TW05dLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAyMTpjYXNlIDI5OnRoaXMuJD1bU1tOXV07YnJlYWs7Y2FzZSAyMjpTW05dLnB1c2goU1tOLTFdKSx0aGlzLiQ9U1tOXTticmVhaztjYXNlIDIzOnRoaXMuJD17YXR0cmlidXRlVHlwZTpTW04tMV0sYXR0cmlidXRlTmFtZTpTW05dfTticmVhaztjYXNlIDI0OnRoaXMuJD17YXR0cmlidXRlVHlwZTpTW04tMl0sYXR0cmlidXRlTmFtZTpTW04tMV0sYXR0cmlidXRlS2V5VHlwZUxpc3Q6U1tOXX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6U1tOLTJdLGF0dHJpYnV0ZU5hbWU6U1tOLTFdLGF0dHJpYnV0ZUNvbW1lbnQ6U1tOXX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6U1tOLTNdLGF0dHJpYnV0ZU5hbWU6U1tOLTJdLGF0dHJpYnV0ZUtleVR5cGVMaXN0OlNbTi0xXSxhdHRyaWJ1dGVDb21tZW50OlNbTl19O2JyZWFrO2Nhc2UgMjc6Y2FzZSAyODpjYXNlIDMxOnRoaXMuJD1TW05dO2JyZWFrO2Nhc2UgMzA6U1tOLTJdLnB1c2goU1tOXSksdGhpcy4kPVNbTi0yXTticmVhaztjYXNlIDMyOnRoaXMuJD1TW05dLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9e2NhcmRBOlNbTl0scmVsVHlwZTpTW04tMV0sY2FyZEI6U1tOLTJdfTticmVhaztjYXNlIDM0OnRoaXMuJD1rLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPWsuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPWsuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9ay5DYXJkaW5hbGl0eS5PTkxZX09ORTticmVhaztjYXNlIDM4OnRoaXMuJD1rLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDticmVhaztjYXNlIDM5OnRoaXMuJD1rLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDQwOnRoaXMuJD1rLklkZW50aWZpY2F0aW9uLklERU5USUZZSU5HO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sdChlLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6OSwyMDpyLDIyOm4sMjQ6aSwyNjphLDI3OnMsMjg6bH0sdChlLFsyLDddLHsxOlsyLDFdfSksdChlLFsyLDNdKSx7OToxNiwxMTo5LDIwOnIsMjI6biwyNDppLDI2OmEsMjc6cywyODpsfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDExXSx7MTI6MTcsMzk6MjAsMTU6WzEsMThdLDE4OlsxLDE5XSw0MTp1LDQyOmgsNDM6Ziw0NDpkLDQ1OnB9KSx7MjE6WzEsMjZdfSx7MjM6WzEsMjddfSx7MjU6WzEsMjhdfSx0KGUsWzIsMThdKSx0KG0sWzIsMTldKSx0KG0sWzIsMjBdKSx0KGUsWzIsNF0pLHsxMToyOSwyNzpzLDI4Omx9LHsxNjozMCwxNzpbMSwzMV0sMjk6MzIsMzA6MzMsMzQ6Z30sezExOjM1LDI3OnMsMjg6bH0sezQwOjM2LDQ2OlsxLDM3XSw0NzpbMSwzOF19LHQoeSxbMiwzNF0pLHQoeSxbMiwzNV0pLHQoeSxbMiwzNl0pLHQoeSxbMiwzN10pLHQoeSxbMiwzOF0pLHQoZSxbMiwxNV0pLHQoZSxbMiwxNl0pLHQoZSxbMiwxN10pLHsxMzpbMSwzOV19LHsxNzpbMSw0MF19LHQoZSxbMiwxMF0pLHsxNjo0MSwxNzpbMiwyMV0sMjk6MzIsMzA6MzMsMzQ6Z30sezMxOjQyLDM0OlsxLDQzXX0sezM0OlsyLDI3XX0sezE5OlsxLDQ0XX0sezM5OjQ1LDQxOnUsNDI6aCw0MzpmLDQ0OmQsNDU6cH0sdCh2LFsyLDM5XSksdCh2LFsyLDQwXSksezE0OjQ2LDI3OlsxLDQ5XSwyODpbMSw0OF0sNDg6WzEsNDddfSx0KGUsWzIsOV0pLHsxNzpbMiwyMl19LHQoeCxbMiwyM10sezMyOjUwLDMzOjUxLDM1OjUyLDM3OmIsMzg6d30pLHQoWzE3LDM0LDM3LDM4XSxbMiwyOF0pLHQoZSxbMiwxNF0sezE1OlsxLDU1XX0pLHQoWzI3LDI4XSxbMiwzM10pLHQoZSxbMiw4XSksdChlLFsyLDQxXSksdChlLFsyLDQyXSksdChlLFsyLDQzXSksdCh4LFsyLDI0XSx7MzM6NTYsMzY6WzEsNTddLDM4Ond9KSx0KHgsWzIsMjVdKSx0KF8sWzIsMjldKSx0KHgsWzIsMzJdKSx0KF8sWzIsMzFdKSx7MTY6NTgsMTc6WzEsNTldLDI5OjMyLDMwOjMzLDM0Omd9LHQoeCxbMiwyNl0pLHszNTo2MCwzNzpifSx7MTc6WzEsNjFdfSx0KGUsWzIsMTNdKSx0KF8sWzIsMzBdKSx0KGUsWzIsMTJdKV0sZGVmYXVsdEFjdGlvbnM6ezM0OlsyLDI3XSw0MTpbMiwyMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihBLEkpe2lmKEkucmVjb3ZlcmFibGUpdGhpcy50cmFjZShBKTtlbHNle3ZhciBEPW5ldyBFcnJvcihBKTt0aHJvdyBELmhhc2g9SSxEfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKEEpe3ZhciBJPXRoaXMsRD1bMF0saz1bXSxSPVtudWxsXSxTPVtdLE89dGhpcy50YWJsZSxOPSIiLFA9MCxGPTAsQj0wLCQ9Mix6PTEsVz1TLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGo9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxLPXt5eTp7fX07Zm9yKHZhciBpZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGllKSYmKEsueXlbaWVdPXRoaXMueXlbaWVdKTtqLnNldElucHV0KEEsSy55eSksSy55eS5sZXhlcj1qLEsueXkucGFyc2VyPXRoaXMsdHlwZW9mIGoueXlsbG9jPiJ1IiYmKGoueXlsbG9jPXt9KTt2YXIgUT1qLnl5bGxvYztTLnB1c2goUSk7dmFyIGVlPWoub3B0aW9ucyYmai5vcHRpb25zLnJhbmdlczt0eXBlb2YgSy55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1LLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEooR2Upe0QubGVuZ3RoPUQubGVuZ3RoLTIqR2UsUi5sZW5ndGg9Ui5sZW5ndGgtR2UsUy5sZW5ndGg9Uy5sZW5ndGgtR2V9byhKLCJwb3BTdGFjayIpO2Z1bmN0aW9uIEgoKXt2YXIgR2U7cmV0dXJuIEdlPWsucG9wKCl8fGoubGV4KCl8fHosdHlwZW9mIEdlIT0ibnVtYmVyIiYmKEdlIGluc3RhbmNlb2YgQXJyYXkmJihrPUdlLEdlPWsucG9wKCkpLEdlPUkuc3ltYm9sc19bR2VdfHxHZSksR2V9byhILCJsZXgiKTtmb3IodmFyIHEsWixhZSx1ZSxjZSx0ZSxEZT17fSxvZSxrZSxGZSxCZTs7KXtpZihhZT1EW0QubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbYWVdP3VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbYWVdOigocT09PW51bGx8fHR5cGVvZiBxPiJ1IikmJihxPUgoKSksdWU9T1thZV0mJk9bYWVdW3FdKSx0eXBlb2YgdWU+InUifHwhdWUubGVuZ3RofHwhdWVbMF0pe3ZhciBWZT0iIjtCZT1bXTtmb3Iob2UgaW4gT1thZV0pdGhpcy50ZXJtaW5hbHNfW29lXSYmb2U+JCYmQmUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW29lXSsiJyIpO2ouc2hvd1Bvc2l0aW9uP1ZlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFArMSkrYDoKYCtqLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArQmUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txXXx8cSkrIiciOlZlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFArMSkrIjogVW5leHBlY3RlZCAiKyhxPT16PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3FdfHxxKSsiJyIpLHRoaXMucGFyc2VFcnJvcihWZSx7dGV4dDpqLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1txXXx8cSxsaW5lOmoueXlsaW5lbm8sbG9jOlEsZXhwZWN0ZWQ6QmV9KX1pZih1ZVswXWluc3RhbmNlb2YgQXJyYXkmJnVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrYWUrIiwgdG9rZW46ICIrcSk7c3dpdGNoKHVlWzBdKXtjYXNlIDE6RC5wdXNoKHEpLFIucHVzaChqLnl5dGV4dCksUy5wdXNoKGoueXlsbG9jKSxELnB1c2godWVbMV0pLHE9bnVsbCxaPyhxPVosWj1udWxsKTooRj1qLnl5bGVuZyxOPWoueXl0ZXh0LFA9ai55eWxpbmVubyxRPWoueXlsbG9jLEI+MCYmQi0tKTticmVhaztjYXNlIDI6aWYoa2U9dGhpcy5wcm9kdWN0aW9uc19bdWVbMV1dWzFdLERlLiQ9UltSLmxlbmd0aC1rZV0sRGUuXyQ9e2ZpcnN0X2xpbmU6U1tTLmxlbmd0aC0oa2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpTW1MubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46U1tTLmxlbmd0aC0oa2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46U1tTLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sZWUmJihEZS5fJC5yYW5nZT1bU1tTLmxlbmd0aC0oa2V8fDEpXS5yYW5nZVswXSxTW1MubGVuZ3RoLTFdLnJhbmdlWzFdXSksdGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KERlLFtOLEYsUCxLLnl5LHVlWzFdLFIsU10uY29uY2F0KFcpKSx0eXBlb2YgdGU8InUiKXJldHVybiB0ZTtrZSYmKEQ9RC5zbGljZSgwLC0xKmtlKjIpLFI9Ui5zbGljZSgwLC0xKmtlKSxTPVMuc2xpY2UoMCwtMSprZSkpLEQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t1ZVsxXV1bMF0pLFIucHVzaChEZS4kKSxTLnB1c2goRGUuXyQpLEZlPU9bRFtELmxlbmd0aC0yXV1bRFtELmxlbmd0aC0xXV0sRC5wdXNoKEZlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sRT1mdW5jdGlvbigpe3ZhciBDPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oSSxEKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEksRCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoSSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihBLEkpe3JldHVybiB0aGlzLnl5PUl8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUEsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgQT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9QSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9QSx0aGlzLm1hdGNoZWQrPUE7dmFyIEk9QS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEF9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oQSl7dmFyIEk9QS5sZW5ndGgsRD1BLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9QSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtSSksdGhpcy5vZmZzZXQtPUk7dmFyIGs9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksRC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUQubGVuZ3RoLTEpO3ZhciBSPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpEPyhELmxlbmd0aD09PWsubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStrW2subGVuZ3RoLUQubGVuZ3RoXS5sZW5ndGgtRFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUl9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bUlswXSxSWzBdK3RoaXMueXlsZW5nLUldKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihBKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoQSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihBLmxlbmd0aD4yMD8iLi4uIjoiIikrQS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBBPXRoaXMubWF0Y2g7cmV0dXJuIEEubGVuZ3RoPDIwJiYoQSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtQS5sZW5ndGgpKSwoQS5zdWJzdHIoMCwyMCkrKEEubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgQT10aGlzLnBhc3RJbnB1dCgpLEk9bmV3IEFycmF5KEEubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gQSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArSSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oQSxJKXt2YXIgRCxrLFI7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFI9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoUi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxrPUFbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGsmJih0aGlzLnl5bGluZW5vKz1rLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOms/a1trLmxlbmd0aC0xXS5sZW5ndGgta1trLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0FbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9QVswXSx0aGlzLm1hdGNoKz1BWzBdLHRoaXMubWF0Y2hlcz1BLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEFbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUFbMF0sRD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxJLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEQpcmV0dXJuIEQ7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFMgaW4gUil0aGlzW1NdPVJbU107cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEEsSSxELGs7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgUj10aGlzLl9jdXJyZW50UnVsZXMoKSxTPTA7UzxSLmxlbmd0aDtTKyspaWYoRD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1JbU11dKSxEJiYoIUl8fERbMF0ubGVuZ3RoPklbMF0ubGVuZ3RoKSl7aWYoST1ELGs9Uyx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihBPXRoaXMudGVzdF9tYXRjaChELFJbU10pLEEhPT0hMSlyZXR1cm4gQTtpZih0aGlzLl9iYWNrdHJhY2spe0k9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gST8oQT10aGlzLnRlc3RfbWF0Y2goSSxSW2tdKSxBIT09ITE/QTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBJPXRoaXMubmV4dCgpO3JldHVybiBJfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihJKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goSSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgST10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBJPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oSSl7cmV0dXJuIEk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhJfHwwKSxJPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbSV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihJKXt0aGlzLmJlZ2luKEkpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oSSxELGssUil7dmFyIFM9Ujtzd2l0Y2goayl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyMjticmVhaztjYXNlIDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI0O2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gMTA7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gODtjYXNlIDEwOnJldHVybiAyODtjYXNlIDExOnJldHVybiA0ODtjYXNlIDEyOnJldHVybiA0O2Nhc2UgMTM6cmV0dXJuIHRoaXMuYmVnaW4oImJsb2NrIiksMTU7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gMzY7Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiAzNztjYXNlIDE3OnJldHVybiAzNDtjYXNlIDE4OnJldHVybiAzNDtjYXNlIDE5OnJldHVybiAzODtjYXNlIDIwOmJyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNzticmVhaztjYXNlIDIyOnJldHVybiBELnl5dGV4dFswXTtjYXNlIDIzOnJldHVybiAxODtjYXNlIDI0OnJldHVybiAxOTtjYXNlIDI1OnJldHVybiA0MTtjYXNlIDI2OnJldHVybiA0MztjYXNlIDI3OnJldHVybiA0MztjYXNlIDI4OnJldHVybiA0MztjYXNlIDI5OnJldHVybiA0MTtjYXNlIDMwOnJldHVybiA0MTtjYXNlIDMxOnJldHVybiA0MjtjYXNlIDMyOnJldHVybiA0MjtjYXNlIDMzOnJldHVybiA0MjtjYXNlIDM0OnJldHVybiA0MjtjYXNlIDM1OnJldHVybiA0MjtjYXNlIDM2OnJldHVybiA0MztjYXNlIDM3OnJldHVybiA0MjtjYXNlIDM4OnJldHVybiA0MztjYXNlIDM5OnJldHVybiA0NDtjYXNlIDQwOnJldHVybiA0NDtjYXNlIDQxOnJldHVybiA0NDtjYXNlIDQyOnJldHVybiA0NDtjYXNlIDQzOnJldHVybiA0MTtjYXNlIDQ0OnJldHVybiA0MjtjYXNlIDQ1OnJldHVybiA0MztjYXNlIDQ2OnJldHVybiA0NTtjYXNlIDQ3OnJldHVybiA0NjtjYXNlIDQ4OnJldHVybiA0NztjYXNlIDQ5OnJldHVybiA0NztjYXNlIDUwOnJldHVybiA0NjtjYXNlIDUxOnJldHVybiA0NjtjYXNlIDUyOnJldHVybiA0NjtjYXNlIDUzOnJldHVybiAyNztjYXNlIDU0OnJldHVybiBELnl5dGV4dFswXTtjYXNlIDU1OnJldHVybiA2fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzpbXHNdKykvaSwvXig/OiJbXiIlXHJcblx2XGJcXF0rIikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzplckRpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86LCkvaSwvXig/OlxzKykvaSwvXig/OlxiKCg/OlBLKXwoPzpGSyl8KD86VUspKVxiKS9pLC9eKD86KC4qPylbfl0oLio/KSpbfl0pL2ksL14oPzpbXCpBLVphLXpfXVtBLVphLXowLTlcLV9cW1xdXChcKV0qKS9pLC9eKD86IlteIl0qIikvaSwvXig/Oltcbl0rKS9pLC9eKD86XH0pL2ksL14oPzouKS9pLC9eKD86XFspL2ksL14oPzpcXSkvaSwvXig/Om9uZSBvciB6ZXJvXGIpL2ksL14oPzpvbmUgb3IgbW9yZVxiKS9pLC9eKD86b25lIG9yIG1hbnlcYikvaSwvXig/OjFcKykvaSwvXig/Olx8b1xiKS9pLC9eKD86emVybyBvciBvbmVcYikvaSwvXig/Onplcm8gb3IgbW9yZVxiKS9pLC9eKD86emVybyBvciBtYW55XGIpL2ksL14oPzowXCspL2ksL14oPzpcfW9cYikvaSwvXig/Om1hbnlcKDBcKSkvaSwvXig/Om1hbnlcKDFcKSkvaSwvXig/Om1hbnlcYikvaSwvXig/Olx9XHwpL2ksL14oPzpvbmVcYikvaSwvXig/Om9ubHkgb25lXGIpL2ksL14oPzoxXGIpL2ksL14oPzpcfFx8KS9pLC9eKD86b1x8KS9pLC9eKD86b1x7KS9pLC9eKD86XHxceykvaSwvXig/OlxzKnVcYikvaSwvXig/OlwuXC4pL2ksL14oPzotLSkvaSwvXig/OnRvXGIpL2ksL14oPzpvcHRpb25hbGx5IHRvXGIpL2ksL14oPzpcLi0pL2ksL14oPzotXC4pL2ksL14oPzpbQS1aYS16X11bQS1aYS16MC05XC1fXSopL2ksL14oPzouKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzUsNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sYmxvY2s6e3J1bGVzOlsxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwyLDQsNyw4LDksMTAsMTEsMTIsMTMsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gQ30oKTtULmxleGVyPUU7ZnVuY3Rpb24gTCgpe3RoaXMueXk9e319cmV0dXJuIG8oTCwiUGFyc2VyIiksTC5wcm90b3R5cGU9VCxULlBhcnNlcj1MLG5ldyBMfSgpO19ELnBhcnNlcj1fRDtKaWU9X0R9KTt2YXIgR2QsTEQseFBlLGJQZSx0YWUsd1BlLFRQZSxrUGUsRVBlLFNQZSxyYWUsbmFlPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtWdCgpO2tpKCk7R2Q9bmV3IE1hcCxMRD1bXSx4UGU9e1pFUk9fT1JfT05FOiJaRVJPX09SX09ORSIsWkVST19PUl9NT1JFOiJaRVJPX09SX01PUkUiLE9ORV9PUl9NT1JFOiJPTkVfT1JfTU9SRSIsT05MWV9PTkU6Ik9OTFlfT05FIixNRF9QQVJFTlQ6Ik1EX1BBUkVOVCJ9LGJQZT17Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9LHRhZT1vKGZ1bmN0aW9uKHQsZT12b2lkIDApe3JldHVybiBHZC5oYXModCk/IUdkLmdldCh0KS5hbGlhcyYmZSYmKEdkLmdldCh0KS5hbGlhcz1lLFkuaW5mbyhgQWRkIGFsaWFzICcke2V9JyB0byBlbnRpdHkgJyR7dH0nYCkpOihHZC5zZXQodCx7YXR0cmlidXRlczpbXSxhbGlhczplfSksWS5pbmZvKCJBZGRlZCBuZXcgZW50aXR5IDoiLHQpKSxHZC5nZXQodCl9LCJhZGRFbnRpdHkiKSx3UGU9bygoKT0+R2QsImdldEVudGl0aWVzIiksVFBlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10YWUodCksbjtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXIuYXR0cmlidXRlcy5wdXNoKGVbbl0pLFkuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGVbbl0uYXR0cmlidXRlTmFtZSl9LCJhZGRBdHRyaWJ1dGVzIiksa1BlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9e2VudGl0eUE6dCxyb2xlQTplLGVudGl0eUI6cixyZWxTcGVjOm59O0xELnB1c2goaSksWS5kZWJ1ZygiQWRkZWQgbmV3IHJlbGF0aW9uc2hpcCA6IixpKX0sImFkZFJlbGF0aW9uc2hpcCIpLEVQZT1vKCgpPT5MRCwiZ2V0UmVsYXRpb25zaGlwcyIpLFNQZT1vKGZ1bmN0aW9uKCl7R2Q9bmV3IE1hcCxMRD1bXSxfcigpfSwiY2xlYXIiKSxyYWU9e0NhcmRpbmFsaXR5OnhQZSxJZGVudGlmaWNhdGlvbjpiUGUsZ2V0Q29uZmlnOm8oKCk9PmRlKCkuZXIsImdldENvbmZpZyIpLGFkZEVudGl0eTp0YWUsYWRkQXR0cmlidXRlczpUUGUsZ2V0RW50aXRpZXM6d1BlLGFkZFJlbGF0aW9uc2hpcDprUGUsZ2V0UmVsYXRpb25zaGlwczpFUGUsY2xlYXI6U1BlLHNldEFjY1RpdGxlOlJyLGdldEFjY1RpdGxlOlByLHNldEFjY0Rlc2NyaXB0aW9uOkJyLGdldEFjY0Rlc2NyaXB0aW9uOkZyLHNldERpYWdyYW1UaXRsZTpsbixnZXREaWFncmFtVGl0bGU6SnJ9fSk7dmFyIFJsLENQZSxXbyxpYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSbD17T05MWV9PTkVfU1RBUlQ6Ik9OTFlfT05FX1NUQVJUIixPTkxZX09ORV9FTkQ6Ik9OTFlfT05FX0VORCIsWkVST19PUl9PTkVfU1RBUlQ6IlpFUk9fT1JfT05FX1NUQVJUIixaRVJPX09SX09ORV9FTkQ6IlpFUk9fT1JfT05FX0VORCIsT05FX09SX01PUkVfU1RBUlQ6Ik9ORV9PUl9NT1JFX1NUQVJUIixPTkVfT1JfTU9SRV9FTkQ6Ik9ORV9PUl9NT1JFX0VORCIsWkVST19PUl9NT1JFX1NUQVJUOiJaRVJPX09SX01PUkVfU1RBUlQiLFpFUk9fT1JfTU9SRV9FTkQ6IlpFUk9fT1JfTU9SRV9FTkQiLE1EX1BBUkVOVF9FTkQ6Ik1EX1BBUkVOVF9FTkQiLE1EX1BBUkVOVF9TVEFSVDoiTURfUEFSRU5UX1NUQVJUIn0sQ1BlPW8oZnVuY3Rpb24odCxlKXtsZXQgcjt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJsLk1EX1BBUkVOVF9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSbC5NRF9QQVJFTlRfRU5EKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsUmwuT05MWV9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTggTTE1LDAgTDE1LDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSbC5PTkxZX09ORV9FTkQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKSxyPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsUmwuWkVST19PUl9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLHIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTgiKSxyPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsUmwuWkVST19PUl9PTkVfRU5EKS5hdHRyKCJyZWZYIiwzMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMCBMMjEsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJsLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSbC5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpLHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSbC5aRVJPX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDU3KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFExOCwwIDM2LDE4IFExOCwzNiAwLDE4Iikscj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJsLlpFUk9fT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDM5KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDU3KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSwiaW5zZXJ0TWFya2VycyIpLFdvPXtFUk1hcmtlcnM6UmwsaW5zZXJ0TWFya2VyczpDUGV9fSk7dmFyIGFhZSxzYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthYWU9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pfSk7ZnVuY3Rpb24gQVBlKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJmFhZS50ZXN0KHQpfXZhciBvYWUsbGFlPU0oKCk9PnsidXNlIHN0cmljdCI7c2FlKCk7byhBUGUsInZhbGlkYXRlIik7b2FlPUFQZX0pO2Z1bmN0aW9uIGNhZSh0LGU9MCl7cmV0dXJuIHBhW3RbZSswXV0rcGFbdFtlKzFdXStwYVt0W2UrMl1dK3BhW3RbZSszXV0rIi0iK3BhW3RbZSs0XV0rcGFbdFtlKzVdXSsiLSIrcGFbdFtlKzZdXStwYVt0W2UrN11dKyItIitwYVt0W2UrOF1dK3BhW3RbZSs5XV0rIi0iK3BhW3RbZSsxMF1dK3BhW3RbZSsxMV1dK3BhW3RbZSsxMl1dK3BhW3RbZSsxM11dK3BhW3RbZSsxNF1dK3BhW3RbZSsxNV1dfXZhciBwYSx1YWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwYT1bXTtmb3IobGV0IHQ9MDt0PDI1NjsrK3QpcGEucHVzaCgodCsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7byhjYWUsInVuc2FmZVN0cmluZ2lmeSIpfSk7ZnVuY3Rpb24gX1BlKHQpe2lmKCFvYWUodCkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgZSxyPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gclswXT0oZT1wYXJzZUludCh0LnNsaWNlKDAsOCksMTYpKT4+PjI0LHJbMV09ZT4+PjE2JjI1NSxyWzJdPWU+Pj44JjI1NSxyWzNdPWUmMjU1LHJbNF09KGU9cGFyc2VJbnQodC5zbGljZSg5LDEzKSwxNikpPj4+OCxyWzVdPWUmMjU1LHJbNl09KGU9cGFyc2VJbnQodC5zbGljZSgxNCwxOCksMTYpKT4+Pjgscls3XT1lJjI1NSxyWzhdPShlPXBhcnNlSW50KHQuc2xpY2UoMTksMjMpLDE2KSk+Pj44LHJbOV09ZSYyNTUsclsxMF09KGU9cGFyc2VJbnQodC5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxyWzExXT1lLzQyOTQ5NjcyOTYmMjU1LHJbMTJdPWU+Pj4yNCYyNTUsclsxM109ZT4+PjE2JjI1NSxyWzE0XT1lPj4+OCYyNTUsclsxNV09ZSYyNTUscn12YXIgaGFlLGZhZT1NKCgpPT57InVzZSBzdHJpY3QiO2xhZSgpO28oX1BlLCJwYXJzZSIpO2hhZT1fUGV9KTtmdW5jdGlvbiBMUGUodCl7dD11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpO2xldCBlPVtdO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfWZ1bmN0aW9uIEREKHQsZSxyKXtmdW5jdGlvbiBuKGksYSxzLGwpe3ZhciB1O2lmKHR5cGVvZiBpPT0ic3RyaW5nIiYmKGk9TFBlKGkpKSx0eXBlb2YgYT09InN0cmluZyImJihhPWhhZShhKSksKCh1PWEpPT09bnVsbHx8dT09PXZvaWQgMD92b2lkIDA6dS5sZW5ndGgpIT09MTYpdGhyb3cgVHlwZUVycm9yKCJOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpIik7bGV0IGg9bmV3IFVpbnQ4QXJyYXkoMTYraS5sZW5ndGgpO2lmKGguc2V0KGEpLGguc2V0KGksYS5sZW5ndGgpLGg9cihoKSxoWzZdPWhbNl0mMTV8ZSxoWzhdPWhbOF0mNjN8MTI4LHMpe2w9bHx8MDtmb3IobGV0IGY9MDtmPDE2OysrZilzW2wrZl09aFtmXTtyZXR1cm4gc31yZXR1cm4gY2FlKGgpfW8obiwiZ2VuZXJhdGVVVUlEIik7dHJ5e24ubmFtZT10fWNhdGNoe31yZXR1cm4gbi5ETlM9RFBlLG4uVVJMPU5QZSxufXZhciBEUGUsTlBlLGRhZT1NKCgpPT57InVzZSBzdHJpY3QiO3VhZSgpO2ZhZSgpO28oTFBlLCJzdHJpbmdUb0J5dGVzIik7RFBlPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLE5QZT0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtvKERELCJ2MzUiKX0pO2Z1bmN0aW9uIFJQZSh0LGUscixuKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiBlJnJefmUmbjtjYXNlIDE6cmV0dXJuIGVecl5uO2Nhc2UgMjpyZXR1cm4gZSZyXmUmbl5yJm47Y2FzZSAzOnJldHVybiBlXnJebn19ZnVuY3Rpb24gTkQodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX1mdW5jdGlvbiBNUGUodCl7bGV0IGU9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLHI9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgdD09InN0cmluZyIpe2xldCBzPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0KSk7dD1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoOysrbCl0LnB1c2gocy5jaGFyQ29kZUF0KGwpKX1lbHNlIEFycmF5LmlzQXJyYXkodCl8fCh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTt0LnB1c2goMTI4KTtsZXQgbj10Lmxlbmd0aC80KzIsaT1NYXRoLmNlaWwobi8xNiksYT1uZXcgQXJyYXkoaSk7Zm9yKGxldCBzPTA7czxpOysrcyl7bGV0IGw9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IHU9MDt1PDE2OysrdSlsW3VdPXRbcyo2NCt1KjRdPDwyNHx0W3MqNjQrdSo0KzFdPDwxNnx0W3MqNjQrdSo0KzJdPDw4fHRbcyo2NCt1KjQrM107YVtzXT1sfWFbaS0xXVsxNF09KHQubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksYVtpLTFdWzE0XT1NYXRoLmZsb29yKGFbaS0xXVsxNF0pLGFbaS0xXVsxNV09KHQubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IHM9MDtzPGk7KytzKXtsZXQgbD1uZXcgVWludDMyQXJyYXkoODApO2ZvcihsZXQgbT0wO208MTY7KyttKWxbbV09YVtzXVttXTtmb3IobGV0IG09MTY7bTw4MDsrK20pbFttXT1ORChsW20tM11ebFttLThdXmxbbS0xNF1ebFttLTE2XSwxKTtsZXQgdT1yWzBdLGg9clsxXSxmPXJbMl0sZD1yWzNdLHA9cls0XTtmb3IobGV0IG09MDttPDgwOysrbSl7bGV0IGc9TWF0aC5mbG9vcihtLzIwKSx5PU5EKHUsNSkrUlBlKGcsaCxmLGQpK3ArZVtnXStsW21dPj4+MDtwPWQsZD1mLGY9TkQoaCwzMCk+Pj4wLGg9dSx1PXl9clswXT1yWzBdK3U+Pj4wLHJbMV09clsxXStoPj4+MCxyWzJdPXJbMl0rZj4+PjAsclszXT1yWzNdK2Q+Pj4wLHJbNF09cls0XStwPj4+MH1yZXR1cm5bclswXT4+MjQmMjU1LHJbMF0+PjE2JjI1NSxyWzBdPj44JjI1NSxyWzBdJjI1NSxyWzFdPj4yNCYyNTUsclsxXT4+MTYmMjU1LHJbMV0+PjgmMjU1LHJbMV0mMjU1LHJbMl0+PjI0JjI1NSxyWzJdPj4xNiYyNTUsclsyXT4+OCYyNTUsclsyXSYyNTUsclszXT4+MjQmMjU1LHJbM10+PjE2JjI1NSxyWzNdPj44JjI1NSxyWzNdJjI1NSxyWzRdPj4yNCYyNTUscls0XT4+MTYmMjU1LHJbNF0+PjgmMjU1LHJbNF0mMjU1XX12YXIgcGFlLG1hZT1NKCgpPT57InVzZSBzdHJpY3QiO28oUlBlLCJmIik7byhORCwiUk9UTCIpO28oTVBlLCJzaGExIik7cGFlPU1QZX0pO3ZhciBJUGUsUkQsZ2FlPU0oKCk9PnsidXNlIHN0cmljdCI7ZGFlKCk7bWFlKCk7SVBlPUREKCJ2NSIsODAscGFlKSxSRD1JUGV9KTt2YXIgeWFlPU0oKCk9PnsidXNlIHN0cmljdCI7Z2FlKCl9KTtmdW5jdGlvbiBIUGUodD0iIixlPSIiKXtsZXQgcj10LnJlcGxhY2UoT1BlLCIiKTtyZXR1cm5gJHt4YWUoZSl9JHt4YWUocil9JHtSRCh0LFVQZSl9YH1mdW5jdGlvbiB4YWUodD0iIil7cmV0dXJuIHQubGVuZ3RoPjA/YCR7dH0tYDoiIn12YXIgT1BlLEJpLHp2LFBQZSxCUGUsRlBlLHpQZSxiYWUsR1BlLHZhZSwkUGUsVlBlLFVQZSx3YWUsVGFlPU0oKCk9PnsidXNlIHN0cmljdCI7TnMoKTttcigpO1B2KCk7VnQoKTtodCgpO2hyKCk7aWFlKCk7bmkoKTtmcigpO3lhZSgpO09QZT0vW15cZEEtWmEtel0oXFcpKi9nLEJpPXt9LHp2PW5ldyBNYXAsUFBlPW8oZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LmtleXModCk7Zm9yKGxldCByIG9mIGUpQmlbcl09dFtyXX0sInNldENvbmYiKSxCUGU9bygodCxlLHIpPT57bGV0IG49QmkuZW50aXR5UGFkZGluZy8zLGk9QmkuZW50aXR5UGFkZGluZy8zLGE9QmkuZm9udFNpemUqLjg1LHM9ZS5ub2RlKCkuZ2V0QkJveCgpLGw9W10sdT0hMSxoPSExLGY9MCxkPTAscD0wLG09MCxnPXMuaGVpZ2h0K24qMix5PTE7ci5mb3JFYWNoKHc9Pnt3LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZ3LmF0dHJpYnV0ZUtleVR5cGVMaXN0Lmxlbmd0aD4wJiYodT0hMCksdy5hdHRyaWJ1dGVDb21tZW50IT09dm9pZCAwJiYoaD0hMCl9KSxyLmZvckVhY2godz0+e2xldCBfPWAke2Uubm9kZSgpLmlkfS1hdHRyLSR7eX1gLFQ9MCxFPW91KHcuYXR0cmlidXRlVHlwZSksTD10LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLGAke199LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixkZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLGErInB4IikudGV4dChFKSxDPXQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7X30tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLGRlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsYSsicHgiKS50ZXh0KHcuYXR0cmlidXRlTmFtZSksQT17fTtBLnRuPUwsQS5ubj1DO2xldCBJPUwubm9kZSgpLmdldEJCb3goKSxEPUMubm9kZSgpLmdldEJCb3goKTtpZihmPU1hdGgubWF4KGYsSS53aWR0aCksZD1NYXRoLm1heChkLEQud2lkdGgpLFQ9TWF0aC5tYXgoSS5oZWlnaHQsRC5oZWlnaHQpLHUpe2xldCBrPXcuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/dy5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5qb2luKCIsIik6IiIsUj10LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLGAke199LWtleWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLGRlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsYSsicHgiKS50ZXh0KGspO0Eua249UjtsZXQgUz1SLm5vZGUoKS5nZXRCQm94KCk7cD1NYXRoLm1heChwLFMud2lkdGgpLFQ9TWF0aC5tYXgoVCxTLmhlaWdodCl9aWYoaCl7bGV0IGs9dC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtffS1jb21tZW50YCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibGVmdCIpLnN0eWxlKCJmb250LWZhbWlseSIsZGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIixhKyJweCIpLnRleHQody5hdHRyaWJ1dGVDb21tZW50fHwiIik7QS5jbj1rO2xldCBSPWsubm9kZSgpLmdldEJCb3goKTttPU1hdGgubWF4KG0sUi53aWR0aCksVD1NYXRoLm1heChULFIuaGVpZ2h0KX1BLmhlaWdodD1ULGwucHVzaChBKSxnKz1UK24qMix5Kz0xfSk7bGV0IHY9NDt1JiYodis9MiksaCYmKHYrPTIpO2xldCB4PWYrZCtwK20sYj17d2lkdGg6TWF0aC5tYXgoQmkubWluRW50aXR5V2lkdGgsTWF0aC5tYXgocy53aWR0aCtCaS5lbnRpdHlQYWRkaW5nKjIseCtpKnYpKSxoZWlnaHQ6ci5sZW5ndGg+MD9nOk1hdGgubWF4KEJpLm1pbkVudGl0eUhlaWdodCxzLmhlaWdodCtCaS5lbnRpdHlQYWRkaW5nKjIpfTtpZihyLmxlbmd0aD4wKXtsZXQgdz1NYXRoLm1heCgwLChiLndpZHRoLXgtaSp2KS8odi8yKSk7ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitiLndpZHRoLzIrIiwiKyhuK3MuaGVpZ2h0LzIpKyIpIik7bGV0IF89cy5oZWlnaHQrbioyLFQ9ImF0dHJpYnV0ZUJveE9kZCI7bC5mb3JFYWNoKEU9PntsZXQgTD1fK24rRS5oZWlnaHQvMjtFLnRuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2krIiwiK0wrIikiKTtsZXQgQz10Lmluc2VydCgicmVjdCIsIiMiK0UudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke1R9YCwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsXykuYXR0cigid2lkdGgiLGYraSoyK3cpLmF0dHIoImhlaWdodCIsRS5oZWlnaHQrbioyKSxBPXBhcnNlRmxvYXQoQy5hdHRyKCJ4IikpK3BhcnNlRmxvYXQoQy5hdHRyKCJ3aWR0aCIpKTtFLm5uLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhBK2kpKyIsIitMKyIpIik7bGV0IEk9dC5pbnNlcnQoInJlY3QiLCIjIitFLm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHtUfWAsITApLmF0dHIoIngiLEEpLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIixkK2kqMit3KS5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0K24qMiksRD1wYXJzZUZsb2F0KEkuYXR0cigieCIpKStwYXJzZUZsb2F0KEkuYXR0cigid2lkdGgiKSk7aWYodSl7RS5rbi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRCtpKSsiLCIrTCsiKSIpO2xldCBrPXQuaW5zZXJ0KCJyZWN0IiwiIyIrRS5rbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7VH1gLCEwKS5hdHRyKCJ4IixEKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIscCtpKjIrdykuYXR0cigiaGVpZ2h0IixFLmhlaWdodCtuKjIpO0Q9cGFyc2VGbG9hdChrLmF0dHIoIngiKSkrcGFyc2VGbG9hdChrLmF0dHIoIndpZHRoIikpfWgmJihFLmNuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhEK2kpKyIsIitMKyIpIiksdC5pbnNlcnQoInJlY3QiLCIjIitFLmNuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHtUfWAsInRydWUiKS5hdHRyKCJ4IixEKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsbStpKjIrdykuYXR0cigiaGVpZ2h0IixFLmhlaWdodCtuKjIpKSxfKz1FLmhlaWdodCtuKjIsVD1UPT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSBiLmhlaWdodD1NYXRoLm1heChCaS5taW5FbnRpdHlIZWlnaHQsZyksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitiLndpZHRoLzIrIiwiK2IuaGVpZ2h0LzIrIikiKTtyZXR1cm4gYn0sImRyYXdBdHRyaWJ1dGVzIiksRlBlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPVsuLi5lLmtleXMoKV0saTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2xldCBzPUhQZShhLCJlbnRpdHkiKTt6di5zZXQoYSxzKTtsZXQgbD10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixzKTtpPWk9PT12b2lkIDA/czppO2xldCB1PSJ0ZXh0LSIrcyxoPWwuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsdSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixkZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLEJpLmZvbnRTaXplKyJweCIpLnRleHQoZS5nZXQoYSkuYWxpYXM/P2EpLHt3aWR0aDpmLGhlaWdodDpkfT1CUGUobCxoLGUuZ2V0KGEpLmF0dHJpYnV0ZXMpLG09bC5pbnNlcnQoInJlY3QiLCIjIit1KS5jbGFzc2VkKCJlciBlbnRpdHlCb3giLCEwKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixkKS5ub2RlKCkuZ2V0QkJveCgpO3Iuc2V0Tm9kZShzLHt3aWR0aDptLndpZHRoLGhlaWdodDptLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6c30pfSksaX0sImRyYXdFbnRpdGllcyIpLHpQZT1vKGZ1bmN0aW9uKHQsZSl7ZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ocil7ciE9PXZvaWQgMCYmZS5ub2RlKHIpIT09dm9pZCAwJiZ0LnNlbGVjdCgiIyIrcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShyKS54LWUubm9kZShyKS53aWR0aC8yKSsiLCIrKGUubm9kZShyKS55LWUubm9kZShyKS5oZWlnaHQvMikrIiApIil9KX0sImFkanVzdEVudGl0aWVzIiksYmFlPW8oZnVuY3Rpb24odCl7cmV0dXJuKHQuZW50aXR5QSt0LnJvbGVBK3QuZW50aXR5QikucmVwbGFjZSgvXHMvZywiIil9LCJnZXRFZGdlTmFtZSIpLEdQZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihyKXtlLnNldEVkZ2UoenYuZ2V0KHIuZW50aXR5QSksenYuZ2V0KHIuZW50aXR5Qikse3JlbGF0aW9uc2hpcDpyfSxiYWUocikpfSksdH0sImFkZFJlbGF0aW9uc2hpcHMiKSx2YWU9MCwkUGU9byhmdW5jdGlvbih0LGUscixuLGkpe3ZhZSsrO2xldCBhPXIuZWRnZSh6di5nZXQoZS5lbnRpdHlBKSx6di5nZXQoZS5lbnRpdHlCKSxiYWUoZSkpLHM9S2EoKS54KGZ1bmN0aW9uKHkpe3JldHVybiB5Lnh9KS55KGZ1bmN0aW9uKHkpe3JldHVybiB5Lnl9KS5jdXJ2ZShEbyksbD10Lmluc2VydCgicGF0aCIsIiMiK24pLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExpbmUiLCEwKS5hdHRyKCJkIixzKGEucG9pbnRzKSkuc3R5bGUoInN0cm9rZSIsQmkuc3Ryb2tlKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTtlLnJlbFNwZWMucmVsVHlwZT09PWkuZGIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HJiZsLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI4LDgiKTtsZXQgdT0iIjtzd2l0Y2goQmkuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsdT11LnJlcGxhY2UoL1woL2csIlxcKCIpLHU9dS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZS5yZWxTcGVjLmNhcmRBKXtjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6bC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdSsiIyIrV28uRVJNYXJrZXJzLlpFUk9fT1JfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6bC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdSsiIyIrV28uRVJNYXJrZXJzLlpFUk9fT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6bC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdSsiIyIrV28uRVJNYXJrZXJzLk9ORV9PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5PTkxZX09ORTpsLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit1KyIjIitXby5FUk1hcmtlcnMuT05MWV9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDpsLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit1KyIjIitXby5FUk1hcmtlcnMuTURfUEFSRU5UX0VORCsiKSIpO2JyZWFrfXN3aXRjaChlLnJlbFNwZWMuY2FyZEIpe2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3UrIiMiK1dvLkVSTWFya2Vycy5aRVJPX09SX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6bC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1KyIjIitXby5FUk1hcmtlcnMuWkVST19PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOmwuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdSsiIyIrV28uRVJNYXJrZXJzLk9ORV9PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOmwuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdSsiIyIrV28uRVJNYXJrZXJzLk9OTFlfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDpsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3UrIiMiK1dvLkVSTWFya2Vycy5NRF9QQVJFTlRfU1RBUlQrIikiKTticmVha31sZXQgaD1sLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLGY9bC5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChoKi41KSxkPSJyZWwiK3ZhZSxwPWUucm9sZUEuc3BsaXQoLzxiciA/XC8+L2cpLG09dC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciByZWxhdGlvbnNoaXBMYWJlbCIsITApLmF0dHIoImlkIixkKS5hdHRyKCJ4IixmLngpLmF0dHIoInkiLGYueSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixkZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLEJpLmZvbnRTaXplKyJweCIpO2lmKHAubGVuZ3RoPT0xKW0udGV4dChlLnJvbGVBKTtlbHNle2xldCB5PS0ocC5sZW5ndGgtMSkqLjU7cC5mb3JFYWNoKCh2LHgpPT57bS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsZi54KS5hdHRyKCJkeSIsYCR7eD09PTA/eToxfWVtYCkudGV4dCh2KX0pfWxldCBnPW0ubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK2QpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsQm94IiwhMCkuYXR0cigieCIsZi54LWcud2lkdGgvMikuYXR0cigieSIsZi55LWcuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixnLndpZHRoKS5hdHRyKCJoZWlnaHQiLGcuaGVpZ2h0KX0sImRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0IiksVlBlPW8oZnVuY3Rpb24odCxlLHIsbil7Qmk9ZGUoKS5lcixZLmluZm8oIkRyYXdpbmcgRVIgZGlhZ3JhbSIpO2xldCBpPWRlKCkuc2VjdXJpdHlMZXZlbCxhO2k9PT0ic2FuZGJveCImJihhPXplKCIjaSIrZSkpO2xldCBsPShpPT09InNhbmRib3giP3plKGEubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6emUoImJvZHkiKSkuc2VsZWN0KGBbaWQ9JyR7ZX0nXWApO1dvLmluc2VydE1hcmtlcnMobCxCaSk7bGV0IHU7dT1uZXcgTXIoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpCaS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IGg9RlBlKGwsbi5kYi5nZXRFbnRpdGllcygpLHUpLGY9R1BlKG4uZGIuZ2V0UmVsYXRpb25zaGlwcygpLHUpO0R1KHUpLHpQZShsLHUpLGYuZm9yRWFjaChmdW5jdGlvbih5KXskUGUobCx5LHUsaCxuKX0pO2xldCBkPUJpLmRpYWdyYW1QYWRkaW5nO1V0Lmluc2VydFRpdGxlKGwsImVudGl0eVRpdGxlVGV4dCIsQmkudGl0bGVUb3BNYXJnaW4sbi5kYi5nZXREaWFncmFtVGl0bGUoKSk7bGV0IHA9bC5ub2RlKCkuZ2V0QkJveCgpLG09cC53aWR0aCtkKjIsZz1wLmhlaWdodCtkKjI7WnIobCxnLG0sQmkudXNlTWF4V2lkdGgpLGwuYXR0cigidmlld0JveCIsYCR7cC54LWR9ICR7cC55LWR9ICR7bX0gJHtnfWApfSwiZHJhdyIpLFVQZT0iMjhlOWY5ZGItM2M4ZC01YWE1LTlmYWYtNDQyODZhZTU5MzdjIjtvKEhQZSwiZ2VuZXJhdGVJZCIpO28oeGFlLCJzdHJXaXRoSHlwaGVuIik7d2FlPXtzZXRDb25mOlBQZSxkcmF3OlZQZX19KTt2YXIgV1BlLGthZSxFYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXUGU9byh0PT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHt0LmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke3QuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke3QudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmAsImdldFN0eWxlcyIpLGthZT1XUGV9KTt2YXIgU2FlPXt9O3ZyKFNhZSx7ZGlhZ3JhbTooKT0+WVBlfSk7dmFyIFlQZSxDYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtlYWUoKTtuYWUoKTtUYWUoKTtFYWUoKTtZUGU9e3BhcnNlcjpKaWUsZGI6cmFlLHJlbmRlcmVyOndhZSxzdHlsZXM6a2FlfX0pO2Z1bmN0aW9uIGVpKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC4kdHlwZT09InN0cmluZyJ9ZnVuY3Rpb24gbWEodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LiRyZWZUZXh0PT0ic3RyaW5nIn1mdW5jdGlvbiBNRCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdHlwZW9mIHQubmFtZT09InN0cmluZyImJnR5cGVvZiB0LnR5cGU9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIn1mdW5jdGlvbiBWZCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmZWkodC5jb250YWluZXIpJiZtYSh0LnJlZmVyZW5jZSkmJnR5cGVvZiB0Lm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIGlvKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZBcnJheS5pc0FycmF5KHQuY29udGVudCl9ZnVuY3Rpb24gSmgodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRva2VuVHlwZT09Im9iamVjdCJ9ZnVuY3Rpb24gR3YodCl7cmV0dXJuIGlvKHQpJiZ0eXBlb2YgdC5mdWxsVGV4dD09InN0cmluZyJ9dmFyICRkLFlvPU0oKCk9PnsidXNlIHN0cmljdCI7byhlaSwiaXNBc3ROb2RlIik7byhtYSwiaXNSZWZlcmVuY2UiKTtvKE1ELCJpc0FzdE5vZGVEZXNjcmlwdGlvbiIpO28oVmQsImlzTGlua2luZ0Vycm9yIik7JGQ9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RBc3RSZWZsZWN0aW9uIil9Y29uc3RydWN0b3IoKXt0aGlzLnN1YnR5cGVzPXt9LHRoaXMuYWxsU3VidHlwZXM9e319aXNJbnN0YW5jZShlLHIpe3JldHVybiBlaShlKSYmdGhpcy5pc1N1YnR5cGUoZS4kdHlwZSxyKX1pc1N1YnR5cGUoZSxyKXtpZihlPT09cilyZXR1cm4hMDtsZXQgbj10aGlzLnN1YnR5cGVzW2VdO258fChuPXRoaXMuc3VidHlwZXNbZV09e30pO2xldCBpPW5bcl07aWYoaSE9PXZvaWQgMClyZXR1cm4gaTt7bGV0IGE9dGhpcy5jb21wdXRlSXNTdWJ0eXBlKGUscik7cmV0dXJuIG5bcl09YSxhfX1nZXRBbGxTdWJUeXBlcyhlKXtsZXQgcj10aGlzLmFsbFN1YnR5cGVzW2VdO2lmKHIpcmV0dXJuIHI7e2xldCBuPXRoaXMuZ2V0QWxsVHlwZXMoKSxpPVtdO2ZvcihsZXQgYSBvZiBuKXRoaXMuaXNTdWJ0eXBlKGEsZSkmJmkucHVzaChhKTtyZXR1cm4gdGhpcy5hbGxTdWJ0eXBlc1tlXT1pLGl9fX07byhpbywiaXNDb21wb3NpdGVDc3ROb2RlIik7byhKaCwiaXNMZWFmQ3N0Tm9kZSIpO28oR3YsImlzUm9vdENzdE5vZGUiKX0pO2Z1bmN0aW9uIEtQZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6dHlwZW9mIHQ+InUiPyJ1bmRlZmluZWQiOnR5cGVvZiB0LnRvU3RyaW5nPT0iZnVuY3Rpb24iP3QudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gZFQodCl7cmV0dXJuISF0JiZ0eXBlb2YgdFtTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIHRuKC4uLnQpe2lmKHQubGVuZ3RoPT09MSl7bGV0IGU9dFswXTtpZihlIGluc3RhbmNlb2YgYW8pcmV0dXJuIGU7aWYoZFQoZSkpcmV0dXJuIG5ldyBhbygoKT0+ZVtTeW1ib2wuaXRlcmF0b3JdKCkscj0+ci5uZXh0KCkpO2lmKHR5cGVvZiBlLmxlbmd0aD09Im51bWJlciIpcmV0dXJuIG5ldyBhbygoKT0+KHtpbmRleDowfSkscj0+ci5pbmRleDxlLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTplW3IuaW5kZXgrK119OkphKX1yZXR1cm4gdC5sZW5ndGg+MT9uZXcgYW8oKCk9Pih7Y29sbEluZGV4OjAsYXJySW5kZXg6MH0pLGU9Pntkb3tpZihlLml0ZXJhdG9yKXtsZXQgcj1lLml0ZXJhdG9yLm5leHQoKTtpZighci5kb25lKXJldHVybiByO2UuaXRlcmF0b3I9dm9pZCAwfWlmKGUuYXJyYXkpe2lmKGUuYXJySW5kZXg8ZS5hcnJheS5sZW5ndGgpcmV0dXJue2RvbmU6ITEsdmFsdWU6ZS5hcnJheVtlLmFyckluZGV4KytdfTtlLmFycmF5PXZvaWQgMCxlLmFyckluZGV4PTB9aWYoZS5jb2xsSW5kZXg8dC5sZW5ndGgpe2xldCByPXRbZS5jb2xsSW5kZXgrK107ZFQocik/ZS5pdGVyYXRvcj1yW1N5bWJvbC5pdGVyYXRvcl0oKTpyJiZ0eXBlb2Ygci5sZW5ndGg9PSJudW1iZXIiJiYoZS5hcnJheT1yKX19d2hpbGUoZS5pdGVyYXRvcnx8ZS5hcnJheXx8ZS5jb2xsSW5kZXg8dC5sZW5ndGgpO3JldHVybiBKYX0pOiR2fXZhciBhbywkdixKYSxDYyxHbSxScz1NKCgpPT57InVzZSBzdHJpY3QiO2FvPWNsYXNzIHR7c3RhdGlje28odGhpcywiU3RyZWFtSW1wbCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5zdGFydEZuPWUsdGhpcy5uZXh0Rm49cn1pdGVyYXRvcigpe2xldCBlPXtzdGF0ZTp0aGlzLnN0YXJ0Rm4oKSxuZXh0Om8oKCk9PnRoaXMubmV4dEZuKGUuc3RhdGUpLCJuZXh0IiksW1N5bWJvbC5pdGVyYXRvcl06KCk9PmV9O3JldHVybiBlfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoKX1pc0VtcHR5KCl7cmV0dXJuISF0aGlzLml0ZXJhdG9yKCkubmV4dCgpLmRvbmV9Y291bnQoKXtsZXQgZT10aGlzLml0ZXJhdG9yKCkscj0wLG49ZS5uZXh0KCk7Zm9yKDshbi5kb25lOylyKyssbj1lLm5leHQoKTtyZXR1cm4gcn10b0FycmF5KCl7bGV0IGU9W10scj10aGlzLml0ZXJhdG9yKCksbjtkbyBuPXIubmV4dCgpLG4udmFsdWUhPT12b2lkIDAmJmUucHVzaChuLnZhbHVlKTt3aGlsZSghbi5kb25lKTtyZXR1cm4gZX10b1NldCgpe3JldHVybiBuZXcgU2V0KHRoaXMpfXRvTWFwKGUscil7bGV0IG49dGhpcy5tYXAoaT0+W2U/ZShpKTppLHI/cihpKTppXSk7cmV0dXJuIG5ldyBNYXAobil9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5qb2luKCl9Y29uY2F0KGUpe2xldCByPWVbU3ltYm9sLml0ZXJhdG9yXSgpO3JldHVybiBuZXcgdCgoKT0+KHtmaXJzdDp0aGlzLnN0YXJ0Rm4oKSxmaXJzdERvbmU6ITF9KSxuPT57bGV0IGk7aWYoIW4uZmlyc3REb25lKXtkbyBpZihpPXRoaXMubmV4dEZuKG4uZmlyc3QpLCFpLmRvbmUpcmV0dXJuIGk7d2hpbGUoIWkuZG9uZSk7bi5maXJzdERvbmU9ITB9ZG8gaWYoaT1yLm5leHQoKSwhaS5kb25lKXJldHVybiBpO3doaWxlKCFpLmRvbmUpO3JldHVybiBKYX0pfWpvaW4oZT0iLCIpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPSIiLGksYT0hMTtkbyBpPXIubmV4dCgpLGkuZG9uZXx8KGEmJihuKz1lKSxuKz1LUGUoaS52YWx1ZSkpLGE9ITA7d2hpbGUoIWkuZG9uZSk7cmV0dXJuIG59aW5kZXhPZihlLHI9MCl7bGV0IG49dGhpcy5pdGVyYXRvcigpLGk9MCxhPW4ubmV4dCgpO2Zvcig7IWEuZG9uZTspe2lmKGk+PXImJmEudmFsdWU9PT1lKXJldHVybiBpO2E9bi5uZXh0KCksaSsrfXJldHVybi0xfWV2ZXJ5KGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKCFlKG4udmFsdWUpKXJldHVybiExO249ci5uZXh0KCl9cmV0dXJuITB9c29tZShlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj1yLm5leHQoKTtmb3IoOyFuLmRvbmU7KXtpZihlKG4udmFsdWUpKXJldHVybiEwO249ci5uZXh0KCl9cmV0dXJuITF9Zm9yRWFjaChlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj0wLGk9ci5uZXh0KCk7Zm9yKDshaS5kb25lOyllKGkudmFsdWUsbiksaT1yLm5leHQoKSxuKyt9bWFwKGUpe3JldHVybiBuZXcgdCh0aGlzLnN0YXJ0Rm4scj0+e2xldHtkb25lOm4sdmFsdWU6aX09dGhpcy5uZXh0Rm4ocik7cmV0dXJuIG4/SmE6e2RvbmU6ITEsdmFsdWU6ZShpKX19KX1maWx0ZXIoZSl7cmV0dXJuIG5ldyB0KHRoaXMuc3RhcnRGbixyPT57bGV0IG47ZG8gaWYobj10aGlzLm5leHRGbihyKSwhbi5kb25lJiZlKG4udmFsdWUpKXJldHVybiBuO3doaWxlKCFuLmRvbmUpO3JldHVybiBKYX0pfW5vbk51bGxhYmxlKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGU9PmUhPW51bGwpfXJlZHVjZShlLHIpe2xldCBuPXRoaXMuaXRlcmF0b3IoKSxpPXIsYT1uLm5leHQoKTtmb3IoOyFhLmRvbmU7KWk9PT12b2lkIDA/aT1hLnZhbHVlOmk9ZShpLGEudmFsdWUpLGE9bi5uZXh0KCk7cmV0dXJuIGl9cmVkdWNlUmlnaHQoZSxyKXtyZXR1cm4gdGhpcy5yZWN1cnNpdmVSZWR1Y2UodGhpcy5pdGVyYXRvcigpLGUscil9cmVjdXJzaXZlUmVkdWNlKGUscixuKXtsZXQgaT1lLm5leHQoKTtpZihpLmRvbmUpcmV0dXJuIG47bGV0IGE9dGhpcy5yZWN1cnNpdmVSZWR1Y2UoZSxyLG4pO3JldHVybiBhPT09dm9pZCAwP2kudmFsdWU6cihhLGkudmFsdWUpfWZpbmQoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYoZShuLnZhbHVlKSlyZXR1cm4gbi52YWx1ZTtuPXIubmV4dCgpfX1maW5kSW5kZXgoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49MCxpPXIubmV4dCgpO2Zvcig7IWkuZG9uZTspe2lmKGUoaS52YWx1ZSkpcmV0dXJuIG47aT1yLm5leHQoKSxuKyt9cmV0dXJuLTF9aW5jbHVkZXMoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYobi52YWx1ZT09PWUpcmV0dXJuITA7bj1yLm5leHQoKX1yZXR1cm4hMX1mbGF0TWFwKGUpe3JldHVybiBuZXcgdCgoKT0+KHt0aGlzOnRoaXMuc3RhcnRGbigpfSkscj0+e2Rve2lmKHIuaXRlcmF0b3Ipe2xldCBhPXIuaXRlcmF0b3IubmV4dCgpO2lmKGEuZG9uZSlyLml0ZXJhdG9yPXZvaWQgMDtlbHNlIHJldHVybiBhfWxldHtkb25lOm4sdmFsdWU6aX09dGhpcy5uZXh0Rm4oci50aGlzKTtpZighbil7bGV0IGE9ZShpKTtpZihkVChhKSlyLml0ZXJhdG9yPWFbU3ltYm9sLml0ZXJhdG9yXSgpO2Vsc2UgcmV0dXJue2RvbmU6ITEsdmFsdWU6YX19fXdoaWxlKHIuaXRlcmF0b3IpO3JldHVybiBKYX0pfWZsYXQoZSl7aWYoZT09PXZvaWQgMCYmKGU9MSksZTw9MClyZXR1cm4gdGhpcztsZXQgcj1lPjE/dGhpcy5mbGF0KGUtMSk6dGhpcztyZXR1cm4gbmV3IHQoKCk9Pih7dGhpczpyLnN0YXJ0Rm4oKX0pLG49Pntkb3tpZihuLml0ZXJhdG9yKXtsZXQgcz1uLml0ZXJhdG9yLm5leHQoKTtpZihzLmRvbmUpbi5pdGVyYXRvcj12b2lkIDA7ZWxzZSByZXR1cm4gc31sZXR7ZG9uZTppLHZhbHVlOmF9PXIubmV4dEZuKG4udGhpcyk7aWYoIWkpaWYoZFQoYSkpbi5pdGVyYXRvcj1hW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHJldHVybntkb25lOiExLHZhbHVlOmF9fXdoaWxlKG4uaXRlcmF0b3IpO3JldHVybiBKYX0pfWhlYWQoKXtsZXQgcj10aGlzLml0ZXJhdG9yKCkubmV4dCgpO2lmKCFyLmRvbmUpcmV0dXJuIHIudmFsdWV9dGFpbChlPTEpe3JldHVybiBuZXcgdCgoKT0+e2xldCByPXRoaXMuc3RhcnRGbigpO2ZvcihsZXQgbj0wO248ZTtuKyspaWYodGhpcy5uZXh0Rm4ocikuZG9uZSlyZXR1cm4gcjtyZXR1cm4gcn0sdGhpcy5uZXh0Rm4pfWxpbWl0KGUpe3JldHVybiBuZXcgdCgoKT0+KHtzaXplOjAsc3RhdGU6dGhpcy5zdGFydEZuKCl9KSxyPT4oci5zaXplKyssci5zaXplPmU/SmE6dGhpcy5uZXh0Rm4oci5zdGF0ZSkpKX1kaXN0aW5jdChlKXtsZXQgcj1uZXcgU2V0O3JldHVybiB0aGlzLmZpbHRlcihuPT57bGV0IGk9ZT9lKG4pOm47cmV0dXJuIHIuaGFzKGkpPyExOihyLmFkZChpKSwhMCl9KX1leGNsdWRlKGUscil7bGV0IG49bmV3IFNldDtmb3IobGV0IGkgb2YgZSl7bGV0IGE9cj9yKGkpOmk7bi5hZGQoYSl9cmV0dXJuIHRoaXMuZmlsdGVyKGk9PntsZXQgYT1yP3IoaSk6aTtyZXR1cm4hbi5oYXMoYSl9KX19O28oS1BlLCJ0b1N0cmluZyIpO28oZFQsImlzSXRlcmFibGUiKTskdj1uZXcgYW8oKCk9Pnt9LCgpPT5KYSksSmE9T2JqZWN0LmZyZWV6ZSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTtvKHRuLCJzdHJlYW0iKTtDYz1jbGFzcyBleHRlbmRzIGFve3N0YXRpY3tvKHRoaXMsIlRyZWVTdHJlYW1JbXBsIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKCgpPT4oe2l0ZXJhdG9yczpuPy5pbmNsdWRlUm9vdD9bW2VdW1N5bWJvbC5pdGVyYXRvcl0oKV06W3IoZSlbU3ltYm9sLml0ZXJhdG9yXSgpXSxwcnVuZWQ6ITF9KSxpPT57Zm9yKGkucHJ1bmVkJiYoaS5pdGVyYXRvcnMucG9wKCksaS5wcnVuZWQ9ITEpO2kuaXRlcmF0b3JzLmxlbmd0aD4wOyl7bGV0IHM9aS5pdGVyYXRvcnNbaS5pdGVyYXRvcnMubGVuZ3RoLTFdLm5leHQoKTtpZihzLmRvbmUpaS5pdGVyYXRvcnMucG9wKCk7ZWxzZSByZXR1cm4gaS5pdGVyYXRvcnMucHVzaChyKHMudmFsdWUpW1N5bWJvbC5pdGVyYXRvcl0oKSksc31yZXR1cm4gSmF9KX1pdGVyYXRvcigpe2xldCBlPXtzdGF0ZTp0aGlzLnN0YXJ0Rm4oKSxuZXh0Om8oKCk9PnRoaXMubmV4dEZuKGUuc3RhdGUpLCJuZXh0IikscHJ1bmU6bygoKT0+e2Uuc3RhdGUucHJ1bmVkPSEwfSwicHJ1bmUiKSxbU3ltYm9sLml0ZXJhdG9yXTooKT0+ZX07cmV0dXJuIGV9fTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gYS5yZWR1Y2UoKHMsbCk9PnMrbCwwKX1vKGUsInN1bSIpLHQuc3VtPWU7ZnVuY3Rpb24gcihhKXtyZXR1cm4gYS5yZWR1Y2UoKHMsbCk9PnMqbCwwKX1vKHIsInByb2R1Y3QiKSx0LnByb2R1Y3Q9cjtmdW5jdGlvbiBuKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+TWF0aC5taW4ocyxsKSl9byhuLCJtaW4iKSx0Lm1pbj1uO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5NYXRoLm1heChzLGwpKX1vKGksIm1heCIpLHQubWF4PWl9KShHbXx8KEdtPXt9KSl9KTt2YXIgbVQ9e307dnIobVQse0RlZmF1bHROYW1lUmVnZXhwOigpPT5wVCxSYW5nZUNvbXBhcmlzb246KCk9Pk51LGNvbXBhcmVSYW5nZTooKT0+RGFlLGZpbmRDb21tZW50Tm9kZTooKT0+QkQsZmluZERlY2xhcmF0aW9uTm9kZUF0T2Zmc2V0OigpPT5aUGUsZmluZExlYWZOb2RlQXRPZmZzZXQ6KCk9PkZELGZpbmRMZWFmTm9kZUJlZm9yZU9mZnNldDooKT0+TmFlLGZsYXR0ZW5Dc3Q6KCk9PlFQZSxnZXRJbnRlcmlvck5vZGVzOigpPT50QmUsZ2V0TmV4dE5vZGU6KCk9PkpQZSxnZXRQcmV2aW91c05vZGU6KCk9Pk1hZSxnZXRTdGFydGxpbmVOb2RlOigpPT5lQmUsaW5SYW5nZTooKT0+UEQsaXNDaGlsZE5vZGU6KCk9Pk9ELGlzQ29tbWVudE5vZGU6KCk9PklELHN0cmVhbUNzdDooKT0+VWQsdG9Eb2N1bWVudFNlZ21lbnQ6KCk9PkhkLHRva2VuVG9SYW5nZTooKT0+JG19KTtmdW5jdGlvbiBVZCh0KXtyZXR1cm4gbmV3IENjKHQsZT0+aW8oZSk/ZS5jb250ZW50OltdLHtpbmNsdWRlUm9vdDohMH0pfWZ1bmN0aW9uIFFQZSh0KXtyZXR1cm4gVWQodCkuZmlsdGVyKEpoKX1mdW5jdGlvbiBPRCh0LGUpe2Zvcig7dC5jb250YWluZXI7KWlmKHQ9dC5jb250YWluZXIsdD09PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gJG0odCl7cmV0dXJue3N0YXJ0OntjaGFyYWN0ZXI6dC5zdGFydENvbHVtbi0xLGxpbmU6dC5zdGFydExpbmUtMX0sZW5kOntjaGFyYWN0ZXI6dC5lbmRDb2x1bW4sbGluZTp0LmVuZExpbmUtMX19fWZ1bmN0aW9uIEhkKHQpe2lmKCF0KXJldHVybjtsZXR7b2Zmc2V0OmUsZW5kOnIscmFuZ2U6bn09dDtyZXR1cm57cmFuZ2U6bixvZmZzZXQ6ZSxlbmQ6cixsZW5ndGg6ci1lfX1mdW5jdGlvbiBEYWUodCxlKXtpZih0LmVuZC5saW5lPGUuc3RhcnQubGluZXx8dC5lbmQubGluZT09PWUuc3RhcnQubGluZSYmdC5lbmQuY2hhcmFjdGVyPHQuc3RhcnQuY2hhcmFjdGVyKXJldHVybiBOdS5CZWZvcmU7aWYodC5zdGFydC5saW5lPmUuZW5kLmxpbmV8fHQuc3RhcnQubGluZT09PWUuZW5kLmxpbmUmJnQuc3RhcnQuY2hhcmFjdGVyPmUuZW5kLmNoYXJhY3RlcilyZXR1cm4gTnUuQWZ0ZXI7bGV0IHI9dC5zdGFydC5saW5lPmUuc3RhcnQubGluZXx8dC5zdGFydC5saW5lPT09ZS5zdGFydC5saW5lJiZ0LnN0YXJ0LmNoYXJhY3Rlcj49ZS5zdGFydC5jaGFyYWN0ZXIsbj10LmVuZC5saW5lPGUuZW5kLmxpbmV8fHQuZW5kLmxpbmU9PT1lLmVuZC5saW5lJiZ0LmVuZC5jaGFyYWN0ZXI8PWUuZW5kLmNoYXJhY3RlcjtyZXR1cm4gciYmbj9OdS5JbnNpZGU6cj9OdS5PdmVybGFwQmFjazpOdS5PdmVybGFwRnJvbnR9ZnVuY3Rpb24gUEQodCxlKXtyZXR1cm4gRGFlKHQsZSk+TnUuQWZ0ZXJ9ZnVuY3Rpb24gWlBlKHQsZSxyPXBUKXtpZih0KXtpZihlPjApe2xldCBuPWUtdC5vZmZzZXQsaT10LnRleHQuY2hhckF0KG4pO3IudGVzdChpKXx8ZS0tfXJldHVybiBGRCh0LGUpfX1mdW5jdGlvbiBCRCh0LGUpe2lmKHQpe2xldCByPU1hZSh0LCEwKTtpZihyJiZJRChyLGUpKXJldHVybiByO2lmKEd2KHQpKXtsZXQgbj10LmNvbnRlbnQuZmluZEluZGV4KGk9PiFpLmhpZGRlbik7Zm9yKGxldCBpPW4tMTtpPj0wO2ktLSl7bGV0IGE9dC5jb250ZW50W2ldO2lmKElEKGEsZSkpcmV0dXJuIGF9fX19ZnVuY3Rpb24gSUQodCxlKXtyZXR1cm4gSmgodCkmJmUuaW5jbHVkZXModC50b2tlblR5cGUubmFtZSl9ZnVuY3Rpb24gRkQodCxlKXtpZihKaCh0KSlyZXR1cm4gdDtpZihpbyh0KSl7bGV0IHI9UmFlKHQsZSwhMSk7aWYocilyZXR1cm4gRkQocixlKX19ZnVuY3Rpb24gTmFlKHQsZSl7aWYoSmgodCkpcmV0dXJuIHQ7aWYoaW8odCkpe2xldCByPVJhZSh0LGUsITApO2lmKHIpcmV0dXJuIE5hZShyLGUpfX1mdW5jdGlvbiBSYWUodCxlLHIpe2xldCBuPTAsaT10LmNvbnRlbnQubGVuZ3RoLTEsYTtmb3IoO248PWk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpLGw9dC5jb250ZW50W3NdO2lmKGwub2Zmc2V0PD1lJiZsLmVuZD5lKXJldHVybiBsO2wuZW5kPD1lPyhhPXI/bDp2b2lkIDAsbj1zKzEpOmk9cy0xfXJldHVybiBhfWZ1bmN0aW9uIE1hZSh0LGU9ITApe2Zvcig7dC5jb250YWluZXI7KXtsZXQgcj10LmNvbnRhaW5lcixuPXIuY29udGVudC5pbmRleE9mKHQpO2Zvcig7bj4wOyl7bi0tO2xldCBpPXIuY29udGVudFtuXTtpZihlfHwhaS5oaWRkZW4pcmV0dXJuIGl9dD1yfX1mdW5jdGlvbiBKUGUodCxlPSEwKXtmb3IoO3QuY29udGFpbmVyOyl7bGV0IHI9dC5jb250YWluZXIsbj1yLmNvbnRlbnQuaW5kZXhPZih0KSxpPXIuY29udGVudC5sZW5ndGgtMTtmb3IoO248aTspe24rKztsZXQgYT1yLmNvbnRlbnRbbl07aWYoZXx8IWEuaGlkZGVuKXJldHVybiBhfXQ9cn19ZnVuY3Rpb24gZUJlKHQpe2lmKHQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyPT09MClyZXR1cm4gdDtsZXQgZT10LnJhbmdlLnN0YXJ0LmxpbmUscj10LG47Zm9yKDt0LmNvbnRhaW5lcjspe2xldCBpPXQuY29udGFpbmVyLGE9bj8/aS5jb250ZW50LmluZGV4T2YodCk7aWYoYT09PTA/KHQ9aSxuPXZvaWQgMCk6KG49YS0xLHQ9aS5jb250ZW50W25dKSx0LnJhbmdlLnN0YXJ0LmxpbmUhPT1lKWJyZWFrO3I9dH1yZXR1cm4gcn1mdW5jdGlvbiB0QmUodCxlKXtsZXQgcj1yQmUodCxlKTtyZXR1cm4gcj9yLnBhcmVudC5jb250ZW50LnNsaWNlKHIuYSsxLHIuYik6W119ZnVuY3Rpb24gckJlKHQsZSl7bGV0IHI9TGFlKHQpLG49TGFlKGUpLGk7Zm9yKGxldCBhPTA7YTxyLmxlbmd0aCYmYTxuLmxlbmd0aDthKyspe2xldCBzPXJbYV0sbD1uW2FdO2lmKHMucGFyZW50PT09bC5wYXJlbnQpaT17cGFyZW50OnMucGFyZW50LGE6cy5pbmRleCxiOmwuaW5kZXh9O2Vsc2UgYnJlYWt9cmV0dXJuIGl9ZnVuY3Rpb24gTGFlKHQpe2xldCBlPVtdO2Zvcig7dC5jb250YWluZXI7KXtsZXQgcj10LmNvbnRhaW5lcixuPXIuY29udGVudC5pbmRleE9mKHQpO2UucHVzaCh7cGFyZW50OnIsaW5kZXg6bn0pLHQ9cn1yZXR1cm4gZS5yZXZlcnNlKCl9dmFyIE51LHBULE1sPU0oKCk9PnsidXNlIHN0cmljdCI7WW8oKTtScygpO28oVWQsInN0cmVhbUNzdCIpO28oUVBlLCJmbGF0dGVuQ3N0Iik7byhPRCwiaXNDaGlsZE5vZGUiKTtvKCRtLCJ0b2tlblRvUmFuZ2UiKTtvKEhkLCJ0b0RvY3VtZW50U2VnbWVudCIpOyhmdW5jdGlvbih0KXt0W3QuQmVmb3JlPTBdPSJCZWZvcmUiLHRbdC5BZnRlcj0xXT0iQWZ0ZXIiLHRbdC5PdmVybGFwRnJvbnQ9Ml09Ik92ZXJsYXBGcm9udCIsdFt0Lk92ZXJsYXBCYWNrPTNdPSJPdmVybGFwQmFjayIsdFt0Lkluc2lkZT00XT0iSW5zaWRlIn0pKE51fHwoTnU9e30pKTtvKERhZSwiY29tcGFyZVJhbmdlIik7byhQRCwiaW5SYW5nZSIpO3BUPS9eW1x3XHB7TH1dJC91O28oWlBlLCJmaW5kRGVjbGFyYXRpb25Ob2RlQXRPZmZzZXQiKTtvKEJELCJmaW5kQ29tbWVudE5vZGUiKTtvKElELCJpc0NvbW1lbnROb2RlIik7byhGRCwiZmluZExlYWZOb2RlQXRPZmZzZXQiKTtvKE5hZSwiZmluZExlYWZOb2RlQmVmb3JlT2Zmc2V0Iik7byhSYWUsImJpbmFyeVNlYXJjaCIpO28oTWFlLCJnZXRQcmV2aW91c05vZGUiKTtvKEpQZSwiZ2V0TmV4dE5vZGUiKTtvKGVCZSwiZ2V0U3RhcnRsaW5lTm9kZSIpO28odEJlLCJnZXRJbnRlcmlvck5vZGVzIik7byhyQmUsImdldENvbW1vblBhcmVudCIpO28oTGFlLCJnZXRQYXJlbnRDaGFpbiIpfSk7ZnVuY3Rpb24gZWYodCl7dGhyb3cgbmV3IEVycm9yKCJFcnJvciEgVGhlIGlucHV0IHZhbHVlIHdhcyBub3QgaGFuZGxlZC4iKX12YXIgV2QsZ1Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXZD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIkVycm9yV2l0aExvY2F0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlP2Ake3J9IGF0ICR7ZS5yYW5nZS5zdGFydC5saW5lfToke2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyfWA6cil9fTtvKGVmLCJhc3NlcnRVbnJlYWNoYWJsZSIpfSk7dmFyIFl2PXt9O3ZyKFl2LHtBYnN0cmFjdEVsZW1lbnQ6KCk9PkdELEFic3RyYWN0UnVsZTooKT0+VnYsQWJzdHJhY3RUeXBlOigpPT5VdixBY3Rpb246KCk9PnBOLEFsdGVybmF0aXZlczooKT0+bU4sQXJyYXlMaXRlcmFsOigpPT4kRCxBcnJheVR5cGU6KCk9PlZELEFzc2lnbm1lbnQ6KCk9PmdOLEJvb2xlYW5MaXRlcmFsOigpPT5IRCxDaGFyYWN0ZXJSYW5nZTooKT0+eU4sQ29uZGl0aW9uOigpPT55VCxDb25qdW5jdGlvbjooKT0+WUQsQ3Jvc3NSZWZlcmVuY2U6KCk9PnhOLERpc2p1bmN0aW9uOigpPT5YRCxFbmRPZkZpbGU6KCk9PmJOLEdyYW1tYXI6KCk9PktELEdyYW1tYXJJbXBvcnQ6KCk9Pk9hZSxHcm91cDooKT0+VE4sSW5mZXJyZWRUeXBlOigpPT5RRCxJbnRlcmZhY2U6KCk9PlpELEtleXdvcmQ6KCk9PmtOLExhbmdpdW1HcmFtbWFyQXN0UmVmbGVjdGlvbjooKT0+Vm0sTGFuZ2l1bUdyYW1tYXJUZXJtaW5hbHM6KCk9Pm5CZSxOYW1lZEFyZ3VtZW50OigpPT5QYWUsTmVnYXRlZFRva2VuOigpPT5FTixOZWdhdGlvbjooKT0+SkQsTnVtYmVyTGl0ZXJhbDooKT0+dE4sUGFyYW1ldGVyOigpPT5yTixQYXJhbWV0ZXJSZWZlcmVuY2U6KCk9Pm5OLFBhcnNlclJ1bGU6KCk9PmFOLFJlZmVyZW5jZVR5cGU6KCk9PnNOLFJlZ2V4VG9rZW46KCk9PkNOLFJldHVyblR5cGU6KCk9PkJhZSxSdWxlQ2FsbDooKT0+X04sU2ltcGxlVHlwZTooKT0+Y04sU3RyaW5nTGl0ZXJhbDooKT0+dU4sVGVybWluYWxBbHRlcm5hdGl2ZXM6KCk9PkxOLFRlcm1pbmFsR3JvdXA6KCk9Pk5OLFRlcm1pbmFsUnVsZTooKT0+eFQsVGVybWluYWxSdWxlQ2FsbDooKT0+TU4sVHlwZTooKT0+aE4sVHlwZUF0dHJpYnV0ZTooKT0+RmFlLFR5cGVEZWZpbml0aW9uOigpPT56RCxVbmlvblR5cGU6KCk9PmZOLFVub3JkZXJlZEdyb3VwOigpPT5JTixVbnRpbFRva2VuOigpPT5PTixWYWx1ZUxpdGVyYWw6KCk9PnZULFdpbGRjYXJkOigpPT5CTixpc0Fic3RyYWN0RWxlbWVudDooKT0+SHYsaXNBYnN0cmFjdFJ1bGU6KCk9PmlCZSxpc0Fic3RyYWN0VHlwZTooKT0+YUJlLGlzQWN0aW9uOigpPT5SdSxpc0FsdGVybmF0aXZlczooKT0+a1QsaXNBcnJheUxpdGVyYWw6KCk9PnVCZSxpc0FycmF5VHlwZTooKT0+VUQsaXNBc3NpZ25tZW50OigpPT5JbCxpc0Jvb2xlYW5MaXRlcmFsOigpPT5XRCxpc0NoYXJhY3RlclJhbmdlOigpPT52Tixpc0NvbmRpdGlvbjooKT0+c0JlLGlzQ29uanVuY3Rpb246KCk9PnFELGlzQ3Jvc3NSZWZlcmVuY2U6KCk9PllkLGlzRGlzanVuY3Rpb246KCk9PmpELGlzRW5kT2ZGaWxlOigpPT53Tixpc0ZlYXR1cmVOYW1lOigpPT5vQmUsaXNHcmFtbWFyOigpPT5oQmUsaXNHcmFtbWFySW1wb3J0OigpPT5mQmUsaXNHcm91cDooKT0+dGYsaXNJbmZlcnJlZFR5cGU6KCk9PmJULGlzSW50ZXJmYWNlOigpPT53VCxpc0tleXdvcmQ6KCk9PlhvLGlzTmFtZWRBcmd1bWVudDooKT0+ZEJlLGlzTmVnYXRlZFRva2VuOigpPT5TTixpc05lZ2F0aW9uOigpPT5lTixpc051bWJlckxpdGVyYWw6KCk9PnBCZSxpc1BhcmFtZXRlcjooKT0+bUJlLGlzUGFyYW1ldGVyUmVmZXJlbmNlOigpPT5pTixpc1BhcnNlclJ1bGU6KCk9Pk1hLGlzUHJpbWl0aXZlVHlwZTooKT0+SWFlLGlzUmVmZXJlbmNlVHlwZTooKT0+b04saXNSZWdleFRva2VuOigpPT5BTixpc1JldHVyblR5cGU6KCk9PmxOLGlzUnVsZUNhbGw6KCk9Pk9sLGlzU2ltcGxlVHlwZTooKT0+VFQsaXNTdHJpbmdMaXRlcmFsOigpPT5nQmUsaXNUZXJtaW5hbEFsdGVybmF0aXZlczooKT0+RE4saXNUZXJtaW5hbEdyb3VwOigpPT5STixpc1Rlcm1pbmFsUnVsZTooKT0+cW8saXNUZXJtaW5hbFJ1bGVDYWxsOigpPT5FVCxpc1R5cGU6KCk9Pld2LGlzVHlwZUF0dHJpYnV0ZTooKT0+eUJlLGlzVHlwZURlZmluaXRpb246KCk9PmxCZSxpc1VuaW9uVHlwZTooKT0+ZE4saXNVbm9yZGVyZWRHcm91cDooKT0+U1QsaXNVbnRpbFRva2VuOigpPT5QTixpc1ZhbHVlTGl0ZXJhbDooKT0+Y0JlLGlzV2lsZGNhcmQ6KCk9PkZOLHJlZmxlY3Rpb246KCk9PmxyfSk7ZnVuY3Rpb24gaUJlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsVnYpfWZ1bmN0aW9uIGFCZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFV2KX1mdW5jdGlvbiBzQmUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx5VCl9ZnVuY3Rpb24gb0JlKHQpe3JldHVybiBJYWUodCl8fHQ9PT0iY3VycmVudCJ8fHQ9PT0iZW50cnkifHx0PT09ImV4dGVuZHMifHx0PT09ImZhbHNlInx8dD09PSJmcmFnbWVudCJ8fHQ9PT0iZ3JhbW1hciJ8fHQ9PT0iaGlkZGVuInx8dD09PSJpbXBvcnQifHx0PT09ImludGVyZmFjZSJ8fHQ9PT0icmV0dXJucyJ8fHQ9PT0idGVybWluYWwifHx0PT09InRydWUifHx0PT09InR5cGUifHx0PT09ImluZmVyInx8dD09PSJpbmZlcnMifHx0PT09IndpdGgifHx0eXBlb2YgdD09InN0cmluZyImJi9cXj9bX2EtekEtWl1bXHdfXSovLnRlc3QodCl9ZnVuY3Rpb24gSWFlKHQpe3JldHVybiB0PT09InN0cmluZyJ8fHQ9PT0ibnVtYmVyInx8dD09PSJib29sZWFuInx8dD09PSJEYXRlInx8dD09PSJiaWdpbnQifWZ1bmN0aW9uIGxCZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LHpEKX1mdW5jdGlvbiBjQmUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx2VCl9ZnVuY3Rpb24gSHYodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxHRCl9ZnVuY3Rpb24gdUJlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsJEQpfWZ1bmN0aW9uIFVEKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsVkQpfWZ1bmN0aW9uIFdEKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsSEQpfWZ1bmN0aW9uIHFEKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsWUQpfWZ1bmN0aW9uIGpEKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsWEQpfWZ1bmN0aW9uIGhCZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEtEKX1mdW5jdGlvbiBmQmUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxPYWUpfWZ1bmN0aW9uIGJUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsUUQpfWZ1bmN0aW9uIHdUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsWkQpfWZ1bmN0aW9uIGRCZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFBhZSl9ZnVuY3Rpb24gZU4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxKRCl9ZnVuY3Rpb24gcEJlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsdE4pfWZ1bmN0aW9uIG1CZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LHJOKX1mdW5jdGlvbiBpTih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LG5OKX1mdW5jdGlvbiBNYSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGFOKX1mdW5jdGlvbiBvTih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LHNOKX1mdW5jdGlvbiBsTih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEJhZSl9ZnVuY3Rpb24gVFQodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxjTil9ZnVuY3Rpb24gZ0JlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsdU4pfWZ1bmN0aW9uIHFvKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQseFQpfWZ1bmN0aW9uIFd2KHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsaE4pfWZ1bmN0aW9uIHlCZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEZhZSl9ZnVuY3Rpb24gZE4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxmTil9ZnVuY3Rpb24gUnUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxwTil9ZnVuY3Rpb24ga1QodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxtTil9ZnVuY3Rpb24gSWwodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxnTil9ZnVuY3Rpb24gdk4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx5Til9ZnVuY3Rpb24gWWQodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx4Til9ZnVuY3Rpb24gd04odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxiTil9ZnVuY3Rpb24gdGYodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxUTil9ZnVuY3Rpb24gWG8odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxrTil9ZnVuY3Rpb24gU04odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxFTil9ZnVuY3Rpb24gQU4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxDTil9ZnVuY3Rpb24gT2wodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxfTil9ZnVuY3Rpb24gRE4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxMTil9ZnVuY3Rpb24gUk4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxOTil9ZnVuY3Rpb24gRVQodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxNTil9ZnVuY3Rpb24gU1QodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxJTil9ZnVuY3Rpb24gUE4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxPTil9ZnVuY3Rpb24gRk4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxCTil9dmFyIG5CZSxWdixVdix5VCx6RCx2VCxHRCwkRCxWRCxIRCxZRCxYRCxLRCxPYWUsUUQsWkQsUGFlLEpELHROLHJOLG5OLGFOLHNOLEJhZSxjTix1Tix4VCxoTixGYWUsZk4scE4sbU4sZ04seU4seE4sYk4sVE4sa04sRU4sQ04sX04sTE4sTk4sTU4sSU4sT04sQk4sVm0sbHIsQWM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZbygpO25CZT17SUQ6L1xeP1tfYS16QS1aXVtcd19dKi8sU1RSSU5HOi8iKFxcLnxbXiJcXF0pKiJ8JyhcXC58W14nXFxdKSonLyxOVU1CRVI6L05hTnwtPygoXGQqXC5cZCt8XGQrKShbRWVdWystXT9cZCspP3xJbmZpbml0eSkvLFJlZ2V4TGl0ZXJhbDovXC8oPyFbKis/XSkoPzpbXlxyXG5cWy9cXF18XFwufFxbKD86W15cclxuXF1cXF18XFwuKSpcXSkrXC9bYS16XSovLFdTOi9ccysvLE1MX0NPTU1FTlQ6L1wvXCpbXHNcU10qP1wqXC8vLFNMX0NPTU1FTlQ6L1wvXC9bXlxuXHJdKi99LFZ2PSJBYnN0cmFjdFJ1bGUiO28oaUJlLCJpc0Fic3RyYWN0UnVsZSIpO1V2PSJBYnN0cmFjdFR5cGUiO28oYUJlLCJpc0Fic3RyYWN0VHlwZSIpO3lUPSJDb25kaXRpb24iO28oc0JlLCJpc0NvbmRpdGlvbiIpO28ob0JlLCJpc0ZlYXR1cmVOYW1lIik7byhJYWUsImlzUHJpbWl0aXZlVHlwZSIpO3pEPSJUeXBlRGVmaW5pdGlvbiI7byhsQmUsImlzVHlwZURlZmluaXRpb24iKTt2VD0iVmFsdWVMaXRlcmFsIjtvKGNCZSwiaXNWYWx1ZUxpdGVyYWwiKTtHRD0iQWJzdHJhY3RFbGVtZW50IjtvKEh2LCJpc0Fic3RyYWN0RWxlbWVudCIpOyREPSJBcnJheUxpdGVyYWwiO28odUJlLCJpc0FycmF5TGl0ZXJhbCIpO1ZEPSJBcnJheVR5cGUiO28oVUQsImlzQXJyYXlUeXBlIik7SEQ9IkJvb2xlYW5MaXRlcmFsIjtvKFdELCJpc0Jvb2xlYW5MaXRlcmFsIik7WUQ9IkNvbmp1bmN0aW9uIjtvKHFELCJpc0Nvbmp1bmN0aW9uIik7WEQ9IkRpc2p1bmN0aW9uIjtvKGpELCJpc0Rpc2p1bmN0aW9uIik7S0Q9IkdyYW1tYXIiO28oaEJlLCJpc0dyYW1tYXIiKTtPYWU9IkdyYW1tYXJJbXBvcnQiO28oZkJlLCJpc0dyYW1tYXJJbXBvcnQiKTtRRD0iSW5mZXJyZWRUeXBlIjtvKGJULCJpc0luZmVycmVkVHlwZSIpO1pEPSJJbnRlcmZhY2UiO28od1QsImlzSW50ZXJmYWNlIik7UGFlPSJOYW1lZEFyZ3VtZW50IjtvKGRCZSwiaXNOYW1lZEFyZ3VtZW50Iik7SkQ9Ik5lZ2F0aW9uIjtvKGVOLCJpc05lZ2F0aW9uIik7dE49Ik51bWJlckxpdGVyYWwiO28ocEJlLCJpc051bWJlckxpdGVyYWwiKTtyTj0iUGFyYW1ldGVyIjtvKG1CZSwiaXNQYXJhbWV0ZXIiKTtuTj0iUGFyYW1ldGVyUmVmZXJlbmNlIjtvKGlOLCJpc1BhcmFtZXRlclJlZmVyZW5jZSIpO2FOPSJQYXJzZXJSdWxlIjtvKE1hLCJpc1BhcnNlclJ1bGUiKTtzTj0iUmVmZXJlbmNlVHlwZSI7byhvTiwiaXNSZWZlcmVuY2VUeXBlIik7QmFlPSJSZXR1cm5UeXBlIjtvKGxOLCJpc1JldHVyblR5cGUiKTtjTj0iU2ltcGxlVHlwZSI7byhUVCwiaXNTaW1wbGVUeXBlIik7dU49IlN0cmluZ0xpdGVyYWwiO28oZ0JlLCJpc1N0cmluZ0xpdGVyYWwiKTt4VD0iVGVybWluYWxSdWxlIjtvKHFvLCJpc1Rlcm1pbmFsUnVsZSIpO2hOPSJUeXBlIjtvKFd2LCJpc1R5cGUiKTtGYWU9IlR5cGVBdHRyaWJ1dGUiO28oeUJlLCJpc1R5cGVBdHRyaWJ1dGUiKTtmTj0iVW5pb25UeXBlIjtvKGROLCJpc1VuaW9uVHlwZSIpO3BOPSJBY3Rpb24iO28oUnUsImlzQWN0aW9uIik7bU49IkFsdGVybmF0aXZlcyI7byhrVCwiaXNBbHRlcm5hdGl2ZXMiKTtnTj0iQXNzaWdubWVudCI7byhJbCwiaXNBc3NpZ25tZW50Iik7eU49IkNoYXJhY3RlclJhbmdlIjtvKHZOLCJpc0NoYXJhY3RlclJhbmdlIik7eE49IkNyb3NzUmVmZXJlbmNlIjtvKFlkLCJpc0Nyb3NzUmVmZXJlbmNlIik7Yk49IkVuZE9mRmlsZSI7byh3TiwiaXNFbmRPZkZpbGUiKTtUTj0iR3JvdXAiO28odGYsImlzR3JvdXAiKTtrTj0iS2V5d29yZCI7byhYbywiaXNLZXl3b3JkIik7RU49Ik5lZ2F0ZWRUb2tlbiI7byhTTiwiaXNOZWdhdGVkVG9rZW4iKTtDTj0iUmVnZXhUb2tlbiI7byhBTiwiaXNSZWdleFRva2VuIik7X049IlJ1bGVDYWxsIjtvKE9sLCJpc1J1bGVDYWxsIik7TE49IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIjtvKEROLCJpc1Rlcm1pbmFsQWx0ZXJuYXRpdmVzIik7Tk49IlRlcm1pbmFsR3JvdXAiO28oUk4sImlzVGVybWluYWxHcm91cCIpO01OPSJUZXJtaW5hbFJ1bGVDYWxsIjtvKEVULCJpc1Rlcm1pbmFsUnVsZUNhbGwiKTtJTj0iVW5vcmRlcmVkR3JvdXAiO28oU1QsImlzVW5vcmRlcmVkR3JvdXAiKTtPTj0iVW50aWxUb2tlbiI7byhQTiwiaXNVbnRpbFRva2VuIik7Qk49IldpbGRjYXJkIjtvKEZOLCJpc1dpbGRjYXJkIik7Vm09Y2xhc3MgZXh0ZW5kcyAkZHtzdGF0aWN7byh0aGlzLCJMYW5naXVtR3JhbW1hckFzdFJlZmxlY3Rpb24iKX1nZXRBbGxUeXBlcygpe3JldHVyblsiQWJzdHJhY3RFbGVtZW50IiwiQWJzdHJhY3RSdWxlIiwiQWJzdHJhY3RUeXBlIiwiQWN0aW9uIiwiQWx0ZXJuYXRpdmVzIiwiQXJyYXlMaXRlcmFsIiwiQXJyYXlUeXBlIiwiQXNzaWdubWVudCIsIkJvb2xlYW5MaXRlcmFsIiwiQ2hhcmFjdGVyUmFuZ2UiLCJDb25kaXRpb24iLCJDb25qdW5jdGlvbiIsIkNyb3NzUmVmZXJlbmNlIiwiRGlzanVuY3Rpb24iLCJFbmRPZkZpbGUiLCJHcmFtbWFyIiwiR3JhbW1hckltcG9ydCIsIkdyb3VwIiwiSW5mZXJyZWRUeXBlIiwiSW50ZXJmYWNlIiwiS2V5d29yZCIsIk5hbWVkQXJndW1lbnQiLCJOZWdhdGVkVG9rZW4iLCJOZWdhdGlvbiIsIk51bWJlckxpdGVyYWwiLCJQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJSZWZlcmVuY2UiLCJQYXJzZXJSdWxlIiwiUmVmZXJlbmNlVHlwZSIsIlJlZ2V4VG9rZW4iLCJSZXR1cm5UeXBlIiwiUnVsZUNhbGwiLCJTaW1wbGVUeXBlIiwiU3RyaW5nTGl0ZXJhbCIsIlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiVGVybWluYWxHcm91cCIsIlRlcm1pbmFsUnVsZSIsIlRlcm1pbmFsUnVsZUNhbGwiLCJUeXBlIiwiVHlwZUF0dHJpYnV0ZSIsIlR5cGVEZWZpbml0aW9uIiwiVW5pb25UeXBlIiwiVW5vcmRlcmVkR3JvdXAiLCJVbnRpbFRva2VuIiwiVmFsdWVMaXRlcmFsIiwiV2lsZGNhcmQiXX1jb21wdXRlSXNTdWJ0eXBlKGUscil7c3dpdGNoKGUpe2Nhc2UgcE46Y2FzZSBtTjpjYXNlIGdOOmNhc2UgeU46Y2FzZSB4TjpjYXNlIGJOOmNhc2UgVE46Y2FzZSBrTjpjYXNlIEVOOmNhc2UgQ046Y2FzZSBfTjpjYXNlIExOOmNhc2UgTk46Y2FzZSBNTjpjYXNlIElOOmNhc2UgT046Y2FzZSBCTjpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoR0Qscik7Y2FzZSAkRDpjYXNlIHROOmNhc2UgdU46cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKHZULHIpO2Nhc2UgVkQ6Y2FzZSBzTjpjYXNlIGNOOmNhc2UgZk46cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKHpELHIpO2Nhc2UgSEQ6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKHlULHIpfHx0aGlzLmlzU3VidHlwZSh2VCxyKTtjYXNlIFlEOmNhc2UgWEQ6Y2FzZSBKRDpjYXNlIG5OOnJldHVybiB0aGlzLmlzU3VidHlwZSh5VCxyKTtjYXNlIFFEOmNhc2UgWkQ6Y2FzZSBoTjpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoVXYscik7Y2FzZSBhTjpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoVnYscil8fHRoaXMuaXNTdWJ0eXBlKFV2LHIpO2Nhc2UgeFQ6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFZ2LHIpO2RlZmF1bHQ6cmV0dXJuITF9fWdldFJlZmVyZW5jZVR5cGUoZSl7bGV0IHI9YCR7ZS5jb250YWluZXIuJHR5cGV9OiR7ZS5wcm9wZXJ0eX1gO3N3aXRjaChyKXtjYXNlIkFjdGlvbjp0eXBlIjpjYXNlIkNyb3NzUmVmZXJlbmNlOnR5cGUiOmNhc2UiSW50ZXJmYWNlOnN1cGVyVHlwZXMiOmNhc2UiUGFyc2VyUnVsZTpyZXR1cm5UeXBlIjpjYXNlIlNpbXBsZVR5cGU6dHlwZVJlZiI6cmV0dXJuIFV2O2Nhc2UiR3JhbW1hcjpoaWRkZW5Ub2tlbnMiOmNhc2UiUGFyc2VyUnVsZTpoaWRkZW5Ub2tlbnMiOmNhc2UiUnVsZUNhbGw6cnVsZSI6cmV0dXJuIFZ2O2Nhc2UiR3JhbW1hcjp1c2VkR3JhbW1hcnMiOnJldHVybiBLRDtjYXNlIk5hbWVkQXJndW1lbnQ6cGFyYW1ldGVyIjpjYXNlIlBhcmFtZXRlclJlZmVyZW5jZTpwYXJhbWV0ZXIiOnJldHVybiByTjtjYXNlIlRlcm1pbmFsUnVsZUNhbGw6cnVsZSI6cmV0dXJuIHhUO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke3J9IGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSBpZC5gKX19Z2V0VHlwZU1ldGFEYXRhKGUpe3N3aXRjaChlKXtjYXNlIkFic3RyYWN0RWxlbWVudCI6cmV0dXJue25hbWU6IkFic3RyYWN0RWxlbWVudCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSJBcnJheUxpdGVyYWwiOnJldHVybntuYW1lOiJBcnJheUxpdGVyYWwiLHByb3BlcnRpZXM6W3tuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfV19O2Nhc2UiQXJyYXlUeXBlIjpyZXR1cm57bmFtZToiQXJyYXlUeXBlIixwcm9wZXJ0aWVzOlt7bmFtZToiZWxlbWVudFR5cGUifV19O2Nhc2UiQm9vbGVhbkxpdGVyYWwiOnJldHVybntuYW1lOiJCb29sZWFuTGl0ZXJhbCIscHJvcGVydGllczpbe25hbWU6InRydWUiLGRlZmF1bHRWYWx1ZTohMX1dfTtjYXNlIkNvbmp1bmN0aW9uIjpyZXR1cm57bmFtZToiQ29uanVuY3Rpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJsZWZ0In0se25hbWU6InJpZ2h0In1dfTtjYXNlIkRpc2p1bmN0aW9uIjpyZXR1cm57bmFtZToiRGlzanVuY3Rpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJsZWZ0In0se25hbWU6InJpZ2h0In1dfTtjYXNlIkdyYW1tYXIiOnJldHVybntuYW1lOiJHcmFtbWFyIixwcm9wZXJ0aWVzOlt7bmFtZToiZGVmaW5lc0hpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiaGlkZGVuVG9rZW5zIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJpbXBvcnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJpbnRlcmZhY2VzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJpc0RlY2xhcmVkIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJuYW1lIn0se25hbWU6InJ1bGVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0eXBlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidXNlZEdyYW1tYXJzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSJHcmFtbWFySW1wb3J0IjpyZXR1cm57bmFtZToiR3JhbW1hckltcG9ydCIscHJvcGVydGllczpbe25hbWU6InBhdGgifV19O2Nhc2UiSW5mZXJyZWRUeXBlIjpyZXR1cm57bmFtZToiSW5mZXJyZWRUeXBlIixwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9XX07Y2FzZSJJbnRlcmZhY2UiOnJldHVybntuYW1lOiJJbnRlcmZhY2UiLHByb3BlcnRpZXM6W3tuYW1lOiJhdHRyaWJ1dGVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJuYW1lIn0se25hbWU6InN1cGVyVHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIk5hbWVkQXJndW1lbnQiOnJldHVybntuYW1lOiJOYW1lZEFyZ3VtZW50Iixwcm9wZXJ0aWVzOlt7bmFtZToiY2FsbGVkQnlOYW1lIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJwYXJhbWV0ZXIifSx7bmFtZToidmFsdWUifV19O2Nhc2UiTmVnYXRpb24iOnJldHVybntuYW1lOiJOZWdhdGlvbiIscHJvcGVydGllczpbe25hbWU6InZhbHVlIn1dfTtjYXNlIk51bWJlckxpdGVyYWwiOnJldHVybntuYW1lOiJOdW1iZXJMaXRlcmFsIixwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UiUGFyYW1ldGVyIjpyZXR1cm57bmFtZToiUGFyYW1ldGVyIixwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9XX07Y2FzZSJQYXJhbWV0ZXJSZWZlcmVuY2UiOnJldHVybntuYW1lOiJQYXJhbWV0ZXJSZWZlcmVuY2UiLHByb3BlcnRpZXM6W3tuYW1lOiJwYXJhbWV0ZXIifV19O2Nhc2UiUGFyc2VyUnVsZSI6cmV0dXJue25hbWU6IlBhcnNlclJ1bGUiLHByb3BlcnRpZXM6W3tuYW1lOiJkYXRhVHlwZSJ9LHtuYW1lOiJkZWZpbmVzSGlkZGVuVG9rZW5zIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJkZWZpbml0aW9uIn0se25hbWU6ImVudHJ5IixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJmcmFnbWVudCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiaGlkZGVuVG9rZW5zIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJpbmZlcnJlZFR5cGUifSx7bmFtZToibmFtZSJ9LHtuYW1lOiJwYXJhbWV0ZXJzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJyZXR1cm5UeXBlIn0se25hbWU6IndpbGRjYXJkIixkZWZhdWx0VmFsdWU6ITF9XX07Y2FzZSJSZWZlcmVuY2VUeXBlIjpyZXR1cm57bmFtZToiUmVmZXJlbmNlVHlwZSIscHJvcGVydGllczpbe25hbWU6InJlZmVyZW5jZVR5cGUifV19O2Nhc2UiUmV0dXJuVHlwZSI6cmV0dXJue25hbWU6IlJldHVyblR5cGUiLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn1dfTtjYXNlIlNpbXBsZVR5cGUiOnJldHVybntuYW1lOiJTaW1wbGVUeXBlIixwcm9wZXJ0aWVzOlt7bmFtZToicHJpbWl0aXZlVHlwZSJ9LHtuYW1lOiJzdHJpbmdUeXBlIn0se25hbWU6InR5cGVSZWYifV19O2Nhc2UiU3RyaW5nTGl0ZXJhbCI6cmV0dXJue25hbWU6IlN0cmluZ0xpdGVyYWwiLHByb3BlcnRpZXM6W3tuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSJUZXJtaW5hbFJ1bGUiOnJldHVybntuYW1lOiJUZXJtaW5hbFJ1bGUiLHByb3BlcnRpZXM6W3tuYW1lOiJkZWZpbml0aW9uIn0se25hbWU6ImZyYWdtZW50IixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJoaWRkZW4iLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6Im5hbWUifSx7bmFtZToidHlwZSJ9XX07Y2FzZSJUeXBlIjpyZXR1cm57bmFtZToiVHlwZSIscHJvcGVydGllczpbe25hbWU6Im5hbWUifSx7bmFtZToidHlwZSJ9XX07Y2FzZSJUeXBlQXR0cmlidXRlIjpyZXR1cm57bmFtZToiVHlwZUF0dHJpYnV0ZSIscHJvcGVydGllczpbe25hbWU6ImRlZmF1bHRWYWx1ZSJ9LHtuYW1lOiJpc09wdGlvbmFsIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UiVW5pb25UeXBlIjpyZXR1cm57bmFtZToiVW5pb25UeXBlIixwcm9wZXJ0aWVzOlt7bmFtZToidHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIkFjdGlvbiI6cmV0dXJue25hbWU6IkFjdGlvbiIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImZlYXR1cmUifSx7bmFtZToiaW5mZXJyZWRUeXBlIn0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJvcGVyYXRvciJ9LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIkFsdGVybmF0aXZlcyI6cmV0dXJue25hbWU6IkFsdGVybmF0aXZlcyIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiQXNzaWdubWVudCI6cmV0dXJue25hbWU6IkFzc2lnbm1lbnQiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJmZWF0dXJlIn0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJvcGVyYXRvciJ9LHtuYW1lOiJ0ZXJtaW5hbCJ9XX07Y2FzZSJDaGFyYWN0ZXJSYW5nZSI6cmV0dXJue25hbWU6IkNoYXJhY3RlclJhbmdlIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibGVmdCJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToicmlnaHQifV19O2Nhc2UiQ3Jvc3NSZWZlcmVuY2UiOnJldHVybntuYW1lOiJDcm9zc1JlZmVyZW5jZSIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImRlcHJlY2F0ZWRTeW50YXgiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJ0ZXJtaW5hbCJ9LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIkVuZE9mRmlsZSI6cmV0dXJue25hbWU6IkVuZE9mRmlsZSIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSJHcm91cCI6cmV0dXJue25hbWU6Ikdyb3VwIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imd1YXJkQ29uZGl0aW9uIn0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSJLZXl3b3JkIjpyZXR1cm57bmFtZToiS2V5d29yZCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSJOZWdhdGVkVG9rZW4iOnJldHVybntuYW1lOiJOZWdhdGVkVG9rZW4iLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidGVybWluYWwifV19O2Nhc2UiUmVnZXhUb2tlbiI6cmV0dXJue25hbWU6IlJlZ2V4VG9rZW4iLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToicmVnZXgifV19O2Nhc2UiUnVsZUNhbGwiOnJldHVybntuYW1lOiJSdWxlQ2FsbCIscHJvcGVydGllczpbe25hbWU6ImFyZ3VtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJ1bGUifV19O2Nhc2UiVGVybWluYWxBbHRlcm5hdGl2ZXMiOnJldHVybntuYW1lOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiVGVybWluYWxHcm91cCI6cmV0dXJue25hbWU6IlRlcm1pbmFsR3JvdXAiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIlRlcm1pbmFsUnVsZUNhbGwiOnJldHVybntuYW1lOiJUZXJtaW5hbFJ1bGVDYWxsIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJ1bGUifV19O2Nhc2UiVW5vcmRlcmVkR3JvdXAiOnJldHVybntuYW1lOiJVbm9yZGVyZWRHcm91cCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiVW50aWxUb2tlbiI6cmV0dXJue25hbWU6IlVudGlsVG9rZW4iLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidGVybWluYWwifV19O2Nhc2UiV2lsZGNhcmQiOnJldHVybntuYW1lOiJXaWxkY2FyZCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9XX07ZGVmYXVsdDpyZXR1cm57bmFtZTplLHByb3BlcnRpZXM6W119fX19LGxyPW5ldyBWbX0pO3ZhciBBVD17fTt2cihBVCx7YXNzaWduTWFuZGF0b3J5UHJvcGVydGllczooKT0+JE4sY29weUFzdE5vZGU6KCk9PkdOLGZpbmRMb2NhbFJlZmVyZW5jZXM6KCk9PnhCZSxmaW5kUm9vdE5vZGU6KCk9PnphZSxnZXRDb250YWluZXJPZlR5cGU6KCk9PnFkLGdldERvY3VtZW50OigpPT5GaSxoYXNDb250YWluZXJPZlR5cGU6KCk9PnZCZSxsaW5rQ29udGVudFRvQ29udGFpbmVyOigpPT5DVCxzdHJlYW1BbGxDb250ZW50czooKT0+X2Msc3RyZWFtQXN0OigpPT5qbyxzdHJlYW1Db250ZW50czooKT0+cXYsc3RyZWFtUmVmZXJlbmNlczooKT0+VW19KTtmdW5jdGlvbiBDVCh0KXtmb3IobGV0W2Uscl1vZiBPYmplY3QuZW50cmllcyh0KSllLnN0YXJ0c1dpdGgoIiQiKXx8KEFycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKChuLGkpPT57ZWkobikmJihuLiRjb250YWluZXI9dCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLG4uJGNvbnRhaW5lckluZGV4PWkpfSk6ZWkocikmJihyLiRjb250YWluZXI9dCxyLiRjb250YWluZXJQcm9wZXJ0eT1lKSl9ZnVuY3Rpb24gcWQodCxlKXtsZXQgcj10O2Zvcig7cjspe2lmKGUocikpcmV0dXJuIHI7cj1yLiRjb250YWluZXJ9fWZ1bmN0aW9uIHZCZSh0LGUpe2xldCByPXQ7Zm9yKDtyOyl7aWYoZShyKSlyZXR1cm4hMDtyPXIuJGNvbnRhaW5lcn1yZXR1cm4hMX1mdW5jdGlvbiBGaSh0KXtsZXQgcj16YWUodCkuJGRvY3VtZW50O2lmKCFyKXRocm93IG5ldyBFcnJvcigiQVNUIG5vZGUgaGFzIG5vIGRvY3VtZW50LiIpO3JldHVybiByfWZ1bmN0aW9uIHphZSh0KXtmb3IoO3QuJGNvbnRhaW5lcjspdD10LiRjb250YWluZXI7cmV0dXJuIHR9ZnVuY3Rpb24gcXYodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLiIpO2xldCByPWU/LnJhbmdlO3JldHVybiBuZXcgYW8oKCk9Pih7a2V5czpPYmplY3Qua2V5cyh0KSxrZXlJbmRleDowLGFycmF5SW5kZXg6MH0pLG49Pntmb3IoO24ua2V5SW5kZXg8bi5rZXlzLmxlbmd0aDspe2xldCBpPW4ua2V5c1tuLmtleUluZGV4XTtpZighaS5zdGFydHNXaXRoKCIkIikpe2xldCBhPXRbaV07aWYoZWkoYSkpe2lmKG4ua2V5SW5kZXgrKyx6TihhLHIpKXJldHVybntkb25lOiExLHZhbHVlOmF9fWVsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7Zm9yKDtuLmFycmF5SW5kZXg8YS5sZW5ndGg7KXtsZXQgcz1uLmFycmF5SW5kZXgrKyxsPWFbc107aWYoZWkobCkmJnpOKGwscikpcmV0dXJue2RvbmU6ITEsdmFsdWU6bH19bi5hcnJheUluZGV4PTB9fW4ua2V5SW5kZXgrK31yZXR1cm4gSmF9KX1mdW5jdGlvbiBfYyh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiUm9vdCBub2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4iKTtyZXR1cm4gbmV3IENjKHQscj0+cXYocixlKSl9ZnVuY3Rpb24gam8odCxlKXtpZih0KXtpZihlPy5yYW5nZSYmIXpOKHQsZS5yYW5nZSkpcmV0dXJuIG5ldyBDYyh0LCgpPT5bXSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgbm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuIik7cmV0dXJuIG5ldyBDYyh0LHI9PnF2KHIsZSkse2luY2x1ZGVSb290OiEwfSl9ZnVuY3Rpb24gek4odCxlKXt2YXIgcjtpZighZSlyZXR1cm4hMDtsZXQgbj0ocj10LiRjc3ROb2RlKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIucmFuZ2U7cmV0dXJuIG4/UEQobixlKTohMX1mdW5jdGlvbiBVbSh0KXtyZXR1cm4gbmV3IGFvKCgpPT4oe2tleXM6T2JqZWN0LmtleXModCksa2V5SW5kZXg6MCxhcnJheUluZGV4OjB9KSxlPT57Zm9yKDtlLmtleUluZGV4PGUua2V5cy5sZW5ndGg7KXtsZXQgcj1lLmtleXNbZS5rZXlJbmRleF07aWYoIXIuc3RhcnRzV2l0aCgiJCIpKXtsZXQgbj10W3JdO2lmKG1hKG4pKXJldHVybiBlLmtleUluZGV4Kysse2RvbmU6ITEsdmFsdWU6e3JlZmVyZW5jZTpuLGNvbnRhaW5lcjp0LHByb3BlcnR5OnJ9fTtpZihBcnJheS5pc0FycmF5KG4pKXtmb3IoO2UuYXJyYXlJbmRleDxuLmxlbmd0aDspe2xldCBpPWUuYXJyYXlJbmRleCsrLGE9bltpXTtpZihtYShhKSlyZXR1cm57ZG9uZTohMSx2YWx1ZTp7cmVmZXJlbmNlOmEsY29udGFpbmVyOnQscHJvcGVydHk6cixpbmRleDppfX19ZS5hcnJheUluZGV4PTB9fWUua2V5SW5kZXgrK31yZXR1cm4gSmF9KX1mdW5jdGlvbiB4QmUodCxlPUZpKHQpLnBhcnNlUmVzdWx0LnZhbHVlKXtsZXQgcj1bXTtyZXR1cm4gam8oZSkuZm9yRWFjaChuPT57VW0obikuZm9yRWFjaChpPT57aS5yZWZlcmVuY2UucmVmPT09dCYmci5wdXNoKGkucmVmZXJlbmNlKX0pfSksdG4ocil9ZnVuY3Rpb24gJE4odCxlKXtsZXQgcj10LmdldFR5cGVNZXRhRGF0YShlLiR0eXBlKSxuPWU7Zm9yKGxldCBpIG9mIHIucHJvcGVydGllcylpLmRlZmF1bHRWYWx1ZSE9PXZvaWQgMCYmbltpLm5hbWVdPT09dm9pZCAwJiYobltpLm5hbWVdPUdhZShpLmRlZmF1bHRWYWx1ZSkpfWZ1bmN0aW9uIEdhZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9bLi4udC5tYXAoR2FlKV06dH1mdW5jdGlvbiBHTih0LGUpe2xldCByPXskdHlwZTp0LiR0eXBlfTtmb3IobGV0W24saV1vZiBPYmplY3QuZW50cmllcyh0KSlpZighbi5zdGFydHNXaXRoKCIkIikpaWYoZWkoaSkpcltuXT1HTihpLGUpO2Vsc2UgaWYobWEoaSkpcltuXT1lKHIsbixpLiRyZWZOb2RlLGkuJHJlZlRleHQpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7bGV0IGE9W107Zm9yKGxldCBzIG9mIGkpZWkocyk/YS5wdXNoKEdOKHMsZSkpOm1hKHMpP2EucHVzaChlKHIsbixzLiRyZWZOb2RlLHMuJHJlZlRleHQpKTphLnB1c2gocyk7cltuXT1hfWVsc2UgcltuXT1pO3JldHVybiBDVChyKSxyfXZhciBlcz1NKCgpPT57InVzZSBzdHJpY3QiO1lvKCk7UnMoKTtNbCgpO28oQ1QsImxpbmtDb250ZW50VG9Db250YWluZXIiKTtvKHFkLCJnZXRDb250YWluZXJPZlR5cGUiKTtvKHZCZSwiaGFzQ29udGFpbmVyT2ZUeXBlIik7byhGaSwiZ2V0RG9jdW1lbnQiKTtvKHphZSwiZmluZFJvb3ROb2RlIik7byhxdiwic3RyZWFtQ29udGVudHMiKTtvKF9jLCJzdHJlYW1BbGxDb250ZW50cyIpO28oam8sInN0cmVhbUFzdCIpO28oek4sImlzQXN0Tm9kZUluUmFuZ2UiKTtvKFVtLCJzdHJlYW1SZWZlcmVuY2VzIik7byh4QmUsImZpbmRMb2NhbFJlZmVyZW5jZXMiKTtvKCROLCJhc3NpZ25NYW5kYXRvcnlQcm9wZXJ0aWVzIik7byhHYWUsImNvcHlEZWZhdWx0VmFsdWUiKTtvKEdOLCJjb3B5QXN0Tm9kZSIpfSk7ZnVuY3Rpb24gYXIodCl7cmV0dXJuIHQuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBfVCh0LGUpe0FycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe2UucHVzaChyKX0pOmUucHVzaCh0KX1mdW5jdGlvbiBIbSh0LGUpe2lmKHRbZV09PT0hMCl0aHJvdyJkdXBsaWNhdGUgZmxhZyAiK2U7bGV0IHI9dFtlXTt0W2VdPSEwfWZ1bmN0aW9uIFhkKHQpe2lmKHQ9PT12b2lkIDApdGhyb3cgRXJyb3IoIkludGVybmFsIEVycm9yIC0gU2hvdWxkIG5ldmVyIGdldCBoZXJlISIpO3JldHVybiEwfWZ1bmN0aW9uIFh2KCl7dGhyb3cgRXJyb3IoIkludGVybmFsIEVycm9yIC0gU2hvdWxkIG5ldmVyIGdldCBoZXJlISIpfWZ1bmN0aW9uIFZOKHQpe3JldHVybiB0LnR5cGU9PT0iQ2hhcmFjdGVyIn12YXIgVU49TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGFyLCJjYyIpO28oX1QsImluc2VydFRvU2V0Iik7byhIbSwiYWRkRmxhZyIpO28oWGQsIkFTU0VSVF9FWElTVFMiKTtvKFh2LCJBU1NFUlRfTkVWRVJfUkVBQ0hfSEVSRSIpO28oVk4sImlzQ2hhcmFjdGVyIil9KTt2YXIganYsS3YsSE4sJGFlPU0oKCk9PnsidXNlIHN0cmljdCI7VU4oKTtqdj1bXTtmb3IobGV0IHQ9YXIoIjAiKTt0PD1hcigiOSIpO3QrKylqdi5wdXNoKHQpO0t2PVthcigiXyIpXS5jb25jYXQoanYpO2ZvcihsZXQgdD1hcigiYSIpO3Q8PWFyKCJ6Iik7dCsrKUt2LnB1c2godCk7Zm9yKGxldCB0PWFyKCJBIik7dDw9YXIoIloiKTt0KyspS3YucHVzaCh0KTtITj1bYXIoIiAiKSxhcigiXGYiKSxhcihgCmApLGFyKCJcciIpLGFyKCIJIiksYXIoIlx2IiksYXIoIgkiKSxhcigiXHhBMCIpLGFyKCJcdTE2ODAiKSxhcigiXHUyMDAwIiksYXIoIlx1MjAwMSIpLGFyKCJcdTIwMDIiKSxhcigiXHUyMDAzIiksYXIoIlx1MjAwNCIpLGFyKCJcdTIwMDUiKSxhcigiXHUyMDA2IiksYXIoIlx1MjAwNyIpLGFyKCJcdTIwMDgiKSxhcigiXHUyMDA5IiksYXIoIlx1MjAwQSIpLGFyKCJcdTIwMjgiKSxhcigiXHUyMDI5IiksYXIoIlx1MjAyRiIpLGFyKCJcdTIwNUYiKSxhcigiXHUzMDAwIiksYXIoIlx1RkVGRiIpXX0pO3ZhciBiQmUsTFQsd0JlLGpkLFZhZT1NKCgpPT57InVzZSBzdHJpY3QiO1VOKCk7JGFlKCk7YkJlPS9bMC05YS1mQS1GXS8sTFQ9L1swLTldLyx3QmU9L1sxLTldLyxqZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZWdFeHBQYXJzZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuaWR4PTAsdGhpcy5pbnB1dD0iIix0aGlzLmdyb3VwSWR4PTB9c2F2ZVN0YXRlKCl7cmV0dXJue2lkeDp0aGlzLmlkeCxpbnB1dDp0aGlzLmlucHV0LGdyb3VwSWR4OnRoaXMuZ3JvdXBJZHh9fXJlc3RvcmVTdGF0ZShlKXt0aGlzLmlkeD1lLmlkeCx0aGlzLmlucHV0PWUuaW5wdXQsdGhpcy5ncm91cElkeD1lLmdyb3VwSWR4fXBhdHRlcm4oZSl7dGhpcy5pZHg9MCx0aGlzLmlucHV0PWUsdGhpcy5ncm91cElkeD0wLHRoaXMuY29uc3VtZUNoYXIoIi8iKTtsZXQgcj10aGlzLmRpc2p1bmN0aW9uKCk7dGhpcy5jb25zdW1lQ2hhcigiLyIpO2xldCBuPXt0eXBlOiJGbGFncyIsbG9jOntiZWdpbjp0aGlzLmlkeCxlbmQ6ZS5sZW5ndGh9LGdsb2JhbDohMSxpZ25vcmVDYXNlOiExLG11bHRpTGluZTohMSx1bmljb2RlOiExLHN0aWNreTohMX07Zm9yKDt0aGlzLmlzUmVnRXhwRmxhZygpOylzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZyI6SG0obiwiZ2xvYmFsIik7YnJlYWs7Y2FzZSJpIjpIbShuLCJpZ25vcmVDYXNlIik7YnJlYWs7Y2FzZSJtIjpIbShuLCJtdWx0aUxpbmUiKTticmVhaztjYXNlInUiOkhtKG4sInVuaWNvZGUiKTticmVhaztjYXNlInkiOkhtKG4sInN0aWNreSIpO2JyZWFrfWlmKHRoaXMuaWR4IT09dGhpcy5pbnB1dC5sZW5ndGgpdGhyb3cgRXJyb3IoIlJlZHVuZGFudCBpbnB1dDogIit0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLmlkeCkpO3JldHVybnt0eXBlOiJQYXR0ZXJuIixmbGFnczpuLHZhbHVlOnIsbG9jOnRoaXMubG9jKDApfX1kaXNqdW5jdGlvbigpe2xldCBlPVtdLHI9dGhpcy5pZHg7Zm9yKGUucHVzaCh0aGlzLmFsdGVybmF0aXZlKCkpO3RoaXMucGVla0NoYXIoKT09PSJ8IjspdGhpcy5jb25zdW1lQ2hhcigifCIpLGUucHVzaCh0aGlzLmFsdGVybmF0aXZlKCkpO3JldHVybnt0eXBlOiJEaXNqdW5jdGlvbiIsdmFsdWU6ZSxsb2M6dGhpcy5sb2Mocil9fWFsdGVybmF0aXZlKCl7bGV0IGU9W10scj10aGlzLmlkeDtmb3IoO3RoaXMuaXNUZXJtKCk7KWUucHVzaCh0aGlzLnRlcm0oKSk7cmV0dXJue3R5cGU6IkFsdGVybmF0aXZlIix2YWx1ZTplLGxvYzp0aGlzLmxvYyhyKX19dGVybSgpe3JldHVybiB0aGlzLmlzQXNzZXJ0aW9uKCk/dGhpcy5hc3NlcnRpb24oKTp0aGlzLmF0b20oKX1hc3NlcnRpb24oKXtsZXQgZT10aGlzLmlkeDtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiXiI6cmV0dXJue3R5cGU6IlN0YXJ0QW5jaG9yIixsb2M6dGhpcy5sb2MoZSl9O2Nhc2UiJCI6cmV0dXJue3R5cGU6IkVuZEFuY2hvciIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIlxcIjpzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiYiI6cmV0dXJue3R5cGU6IldvcmRCb3VuZGFyeSIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIkIiOnJldHVybnt0eXBlOiJOb25Xb3JkQm91bmRhcnkiLGxvYzp0aGlzLmxvYyhlKX19dGhyb3cgRXJyb3IoIkludmFsaWQgQXNzZXJ0aW9uIEVzY2FwZSIpO2Nhc2UiKCI6dGhpcy5jb25zdW1lQ2hhcigiPyIpO2xldCByO3N3aXRjaCh0aGlzLnBvcENoYXIoKSl7Y2FzZSI9IjpyPSJMb29rYWhlYWQiO2JyZWFrO2Nhc2UiISI6cj0iTmVnYXRpdmVMb29rYWhlYWQiO2JyZWFrfVhkKHIpO2xldCBuPXRoaXMuZGlzanVuY3Rpb24oKTtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiKSIpLHt0eXBlOnIsdmFsdWU6bixsb2M6dGhpcy5sb2MoZSl9fXJldHVybiBYdigpfXF1YW50aWZpZXIoZT0hMSl7bGV0IHIsbj10aGlzLmlkeDtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiKiI6cj17YXRMZWFzdDowLGF0TW9zdDoxLzB9O2JyZWFrO2Nhc2UiKyI6cj17YXRMZWFzdDoxLGF0TW9zdDoxLzB9O2JyZWFrO2Nhc2UiPyI6cj17YXRMZWFzdDowLGF0TW9zdDoxfTticmVhaztjYXNlInsiOmxldCBpPXRoaXMuaW50ZWdlckluY2x1ZGluZ1plcm8oKTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UifSI6cj17YXRMZWFzdDppLGF0TW9zdDppfTticmVhaztjYXNlIiwiOmxldCBhO3RoaXMuaXNEaWdpdCgpPyhhPXRoaXMuaW50ZWdlckluY2x1ZGluZ1plcm8oKSxyPXthdExlYXN0OmksYXRNb3N0OmF9KTpyPXthdExlYXN0OmksYXRNb3N0OjEvMH0sdGhpcy5jb25zdW1lQ2hhcigifSIpO2JyZWFrfWlmKGU9PT0hMCYmcj09PXZvaWQgMClyZXR1cm47WGQocik7YnJlYWt9aWYoIShlPT09ITAmJnI9PT12b2lkIDApJiZYZChyKSlyZXR1cm4gdGhpcy5wZWVrQ2hhcigwKT09PSI/Ij8odGhpcy5jb25zdW1lQ2hhcigiPyIpLHIuZ3JlZWR5PSExKTpyLmdyZWVkeT0hMCxyLnR5cGU9IlF1YW50aWZpZXIiLHIubG9jPXRoaXMubG9jKG4pLHJ9YXRvbSgpe2xldCBlLHI9dGhpcy5pZHg7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSIuIjplPXRoaXMuZG90QWxsKCk7YnJlYWs7Y2FzZSJcXCI6ZT10aGlzLmF0b21Fc2NhcGUoKTticmVhaztjYXNlIlsiOmU9dGhpcy5jaGFyYWN0ZXJDbGFzcygpO2JyZWFrO2Nhc2UiKCI6ZT10aGlzLmdyb3VwKCk7YnJlYWt9cmV0dXJuIGU9PT12b2lkIDAmJnRoaXMuaXNQYXR0ZXJuQ2hhcmFjdGVyKCkmJihlPXRoaXMucGF0dGVybkNoYXJhY3RlcigpKSxYZChlKT8oZS5sb2M9dGhpcy5sb2MociksdGhpcy5pc1F1YW50aWZpZXIoKSYmKGUucXVhbnRpZmllcj10aGlzLnF1YW50aWZpZXIoKSksZSk6WHYoKX1kb3RBbGwoKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiLiIpLHt0eXBlOiJTZXQiLGNvbXBsZW1lbnQ6ITAsdmFsdWU6W2FyKGAKYCksYXIoIlxyIiksYXIoIlx1MjAyOCIpLGFyKCJcdTIwMjkiKV19fWF0b21Fc2NhcGUoKXtzd2l0Y2godGhpcy5jb25zdW1lQ2hhcigiXFwiKSx0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOnJldHVybiB0aGlzLmRlY2ltYWxFc2NhcGVBdG9tKCk7Y2FzZSJkIjpjYXNlIkQiOmNhc2UicyI6Y2FzZSJTIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIHRoaXMuY2hhcmFjdGVyQ2xhc3NFc2NhcGUoKTtjYXNlImYiOmNhc2UibiI6Y2FzZSJyIjpjYXNlInQiOmNhc2UidiI6cmV0dXJuIHRoaXMuY29udHJvbEVzY2FwZUF0b20oKTtjYXNlImMiOnJldHVybiB0aGlzLmNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCk7Y2FzZSIwIjpyZXR1cm4gdGhpcy5udWxDaGFyYWN0ZXJBdG9tKCk7Y2FzZSJ4IjpyZXR1cm4gdGhpcy5oZXhFc2NhcGVTZXF1ZW5jZUF0b20oKTtjYXNlInUiOnJldHVybiB0aGlzLnJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKTtkZWZhdWx0OnJldHVybiB0aGlzLmlkZW50aXR5RXNjYXBlQXRvbSgpfX1kZWNpbWFsRXNjYXBlQXRvbSgpe3JldHVybnt0eXBlOiJHcm91cEJhY2tSZWZlcmVuY2UiLHZhbHVlOnRoaXMucG9zaXRpdmVJbnRlZ2VyKCl9fWNoYXJhY3RlckNsYXNzRXNjYXBlKCl7bGV0IGUscj0hMTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZCI6ZT1qdjticmVhaztjYXNlIkQiOmU9anYscj0hMDticmVhaztjYXNlInMiOmU9SE47YnJlYWs7Y2FzZSJTIjplPUhOLHI9ITA7YnJlYWs7Y2FzZSJ3IjplPUt2O2JyZWFrO2Nhc2UiVyI6ZT1LdixyPSEwO2JyZWFrfXJldHVybiBYZChlKT97dHlwZToiU2V0Iix2YWx1ZTplLGNvbXBsZW1lbnQ6cn06WHYoKX1jb250cm9sRXNjYXBlQXRvbSgpe2xldCBlO3N3aXRjaCh0aGlzLnBvcENoYXIoKSl7Y2FzZSJmIjplPWFyKCJcZiIpO2JyZWFrO2Nhc2UibiI6ZT1hcihgCmApO2JyZWFrO2Nhc2UiciI6ZT1hcigiXHIiKTticmVhaztjYXNlInQiOmU9YXIoIgkiKTticmVhaztjYXNlInYiOmU9YXIoIlx2Iik7YnJlYWt9cmV0dXJuIFhkKGUpP3t0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmV9Olh2KCl9Y29udHJvbExldHRlckVzY2FwZUF0b20oKXt0aGlzLmNvbnN1bWVDaGFyKCJjIik7bGV0IGU9dGhpcy5wb3BDaGFyKCk7aWYoL1thLXpBLVpdLy50ZXN0KGUpPT09ITEpdGhyb3cgRXJyb3IoIkludmFsaWQgIik7cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6ZS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCktNjR9fW51bENoYXJhY3RlckF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiMCIpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKCJcMCIpfX1oZXhFc2NhcGVTZXF1ZW5jZUF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigieCIpLHRoaXMucGFyc2VIZXhEaWdpdHMoMil9cmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlQXRvbSgpe3JldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJ1IiksdGhpcy5wYXJzZUhleERpZ2l0cyg0KX1pZGVudGl0eUVzY2FwZUF0b20oKXtsZXQgZT10aGlzLnBvcENoYXIoKTtyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTphcihlKX19Y2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpjYXNlIlxcIjpjYXNlIl0iOnRocm93IEVycm9yKCJUQkQiKTtkZWZhdWx0OmxldCBlPXRoaXMucG9wQ2hhcigpO3JldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKGUpfX19Y2hhcmFjdGVyQ2xhc3MoKXtsZXQgZT1bXSxyPSExO2Zvcih0aGlzLmNvbnN1bWVDaGFyKCJbIiksdGhpcy5wZWVrQ2hhcigwKT09PSJeIiYmKHRoaXMuY29uc3VtZUNoYXIoIl4iKSxyPSEwKTt0aGlzLmlzQ2xhc3NBdG9tKCk7KXtsZXQgbj10aGlzLmNsYXNzQXRvbSgpLGk9bi50eXBlPT09IkNoYXJhY3RlciI7aWYoVk4obikmJnRoaXMuaXNSYW5nZURhc2goKSl7dGhpcy5jb25zdW1lQ2hhcigiLSIpO2xldCBhPXRoaXMuY2xhc3NBdG9tKCkscz1hLnR5cGU9PT0iQ2hhcmFjdGVyIjtpZihWTihhKSl7aWYoYS52YWx1ZTxuLnZhbHVlKXRocm93IEVycm9yKCJSYW5nZSBvdXQgb2Ygb3JkZXIgaW4gY2hhcmFjdGVyIGNsYXNzIik7ZS5wdXNoKHtmcm9tOm4udmFsdWUsdG86YS52YWx1ZX0pfWVsc2UgX1Qobi52YWx1ZSxlKSxlLnB1c2goYXIoIi0iKSksX1QoYS52YWx1ZSxlKX1lbHNlIF9UKG4udmFsdWUsZSl9cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIl0iKSx7dHlwZToiU2V0Iixjb21wbGVtZW50OnIsdmFsdWU6ZX19Y2xhc3NBdG9tKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSJdIjpjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6dGhyb3cgRXJyb3IoIlRCRCIpO2Nhc2UiXFwiOnJldHVybiB0aGlzLmNsYXNzRXNjYXBlKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbGFzc1BhdHRlcm5DaGFyYWN0ZXJBdG9tKCl9fWNsYXNzRXNjYXBlKCl7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIlxcIiksdGhpcy5wZWVrQ2hhcigpKXtjYXNlImIiOnJldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJiIikse3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6YXIoIlxiIil9O2Nhc2UiZCI6Y2FzZSJEIjpjYXNlInMiOmNhc2UiUyI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7Y2FzZSJmIjpjYXNlIm4iOmNhc2UiciI6Y2FzZSJ0IjpjYXNlInYiOnJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7Y2FzZSJjIjpyZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO2Nhc2UiMCI6cmV0dXJuIHRoaXMubnVsQ2hhcmFjdGVyQXRvbSgpO2Nhc2UieCI6cmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7Y2FzZSJ1IjpyZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pZGVudGl0eUVzY2FwZUF0b20oKX19Z3JvdXAoKXtsZXQgZT0hMDtzd2l0Y2godGhpcy5jb25zdW1lQ2hhcigiKCIpLHRoaXMucGVla0NoYXIoMCkpe2Nhc2UiPyI6dGhpcy5jb25zdW1lQ2hhcigiPyIpLHRoaXMuY29uc3VtZUNoYXIoIjoiKSxlPSExO2JyZWFrO2RlZmF1bHQ6dGhpcy5ncm91cElkeCsrO2JyZWFrfWxldCByPXRoaXMuZGlzanVuY3Rpb24oKTt0aGlzLmNvbnN1bWVDaGFyKCIpIik7bGV0IG49e3R5cGU6Ikdyb3VwIixjYXB0dXJpbmc6ZSx2YWx1ZTpyfTtyZXR1cm4gZSYmKG4uaWR4PXRoaXMuZ3JvdXBJZHgpLG59cG9zaXRpdmVJbnRlZ2VyKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7aWYod0JlLnRlc3QoZSk9PT0hMSl0aHJvdyBFcnJvcigiRXhwZWN0aW5nIGEgcG9zaXRpdmUgaW50ZWdlciIpO2Zvcig7TFQudGVzdCh0aGlzLnBlZWtDaGFyKDApKTspZSs9dGhpcy5wb3BDaGFyKCk7cmV0dXJuIHBhcnNlSW50KGUsMTApfWludGVnZXJJbmNsdWRpbmdaZXJvKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7aWYoTFQudGVzdChlKT09PSExKXRocm93IEVycm9yKCJFeHBlY3RpbmcgYW4gaW50ZWdlciIpO2Zvcig7TFQudGVzdCh0aGlzLnBlZWtDaGFyKDApKTspZSs9dGhpcy5wb3BDaGFyKCk7cmV0dXJuIHBhcnNlSW50KGUsMTApfXBhdHRlcm5DaGFyYWN0ZXIoKXtsZXQgZT10aGlzLnBvcENoYXIoKTtzd2l0Y2goZSl7Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOmNhc2UiXiI6Y2FzZSIkIjpjYXNlIlxcIjpjYXNlIi4iOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIj8iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIlsiOmNhc2UifCI6dGhyb3cgRXJyb3IoIlRCRCIpO2RlZmF1bHQ6cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6YXIoZSl9fX1pc1JlZ0V4cEZsYWcoKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSJnIjpjYXNlImkiOmNhc2UibSI6Y2FzZSJ1IjpjYXNlInkiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWlzUmFuZ2VEYXNoKCl7cmV0dXJuIHRoaXMucGVla0NoYXIoKT09PSItIiYmdGhpcy5pc0NsYXNzQXRvbSgxKX1pc0RpZ2l0KCl7cmV0dXJuIExULnRlc3QodGhpcy5wZWVrQ2hhcigwKSl9aXNDbGFzc0F0b20oZT0wKXtzd2l0Y2godGhpcy5wZWVrQ2hhcihlKSl7Y2FzZSJdIjpjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19aXNUZXJtKCl7cmV0dXJuIHRoaXMuaXNBdG9tKCl8fHRoaXMuaXNBc3NlcnRpb24oKX1pc0F0b20oKXtpZih0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpKXJldHVybiEwO3N3aXRjaCh0aGlzLnBlZWtDaGFyKDApKXtjYXNlIi4iOmNhc2UiXFwiOmNhc2UiWyI6Y2FzZSIoIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1pc0Fzc2VydGlvbigpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKDApKXtjYXNlIl4iOmNhc2UiJCI6cmV0dXJuITA7Y2FzZSJcXCI6c3dpdGNoKHRoaXMucGVla0NoYXIoMSkpe2Nhc2UiYiI6Y2FzZSJCIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfWNhc2UiKCI6cmV0dXJuIHRoaXMucGVla0NoYXIoMSk9PT0iPyImJih0aGlzLnBlZWtDaGFyKDIpPT09Ij0ifHx0aGlzLnBlZWtDaGFyKDIpPT09IiEiKTtkZWZhdWx0OnJldHVybiExfX1pc1F1YW50aWZpZXIoKXtsZXQgZT10aGlzLnNhdmVTdGF0ZSgpO3RyeXtyZXR1cm4gdGhpcy5xdWFudGlmaWVyKCEwKSE9PXZvaWQgMH1jYXRjaHtyZXR1cm4hMX1maW5hbGx5e3RoaXMucmVzdG9yZVN0YXRlKGUpfX1pc1BhdHRlcm5DaGFyYWN0ZXIoKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigpKXtjYXNlIl4iOmNhc2UiJCI6Y2FzZSJcXCI6Y2FzZSIuIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpjYXNlIigiOmNhc2UiKSI6Y2FzZSJbIjpjYXNlInwiOmNhc2UiLyI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fXBhcnNlSGV4RGlnaXRzKGUpe2xldCByPSIiO2ZvcihsZXQgaT0wO2k8ZTtpKyspe2xldCBhPXRoaXMucG9wQ2hhcigpO2lmKGJCZS50ZXN0KGEpPT09ITEpdGhyb3cgRXJyb3IoIkV4cGVjdGluZyBhIEhleERlY2ltYWwgZGlnaXRzIik7cis9YX1yZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpwYXJzZUludChyLDE2KX19cGVla0NoYXIoZT0wKXtyZXR1cm4gdGhpcy5pbnB1dFt0aGlzLmlkeCtlXX1wb3BDaGFyKCl7bGV0IGU9dGhpcy5wZWVrQ2hhcigwKTtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcih2b2lkIDApLGV9Y29uc3VtZUNoYXIoZSl7aWYoZSE9PXZvaWQgMCYmdGhpcy5pbnB1dFt0aGlzLmlkeF0hPT1lKXRocm93IEVycm9yKCJFeHBlY3RlZDogJyIrZSsiJyBidXQgZm91bmQ6ICciK3RoaXMuaW5wdXRbdGhpcy5pZHhdKyInIGF0IG9mZnNldDogIit0aGlzLmlkeCk7aWYodGhpcy5pZHg+PXRoaXMuaW5wdXQubGVuZ3RoKXRocm93IEVycm9yKCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCIpO3RoaXMuaWR4Kyt9bG9jKGUpe3JldHVybntiZWdpbjplLGVuZDp0aGlzLmlkeH19fX0pO3ZhciBMYyxVYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJCYXNlUmVnRXhwVmlzaXRvciIpfXZpc2l0Q2hpbGRyZW4oZSl7Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07ZS5oYXNPd25Qcm9wZXJ0eShyKSYmKG4udHlwZSE9PXZvaWQgMD90aGlzLnZpc2l0KG4pOkFycmF5LmlzQXJyYXkobikmJm4uZm9yRWFjaChpPT57dGhpcy52aXNpdChpKX0sdGhpcykpfX12aXNpdChlKXtzd2l0Y2goZS50eXBlKXtjYXNlIlBhdHRlcm4iOnRoaXMudmlzaXRQYXR0ZXJuKGUpO2JyZWFrO2Nhc2UiRmxhZ3MiOnRoaXMudmlzaXRGbGFncyhlKTticmVhaztjYXNlIkRpc2p1bmN0aW9uIjp0aGlzLnZpc2l0RGlzanVuY3Rpb24oZSk7YnJlYWs7Y2FzZSJBbHRlcm5hdGl2ZSI6dGhpcy52aXNpdEFsdGVybmF0aXZlKGUpO2JyZWFrO2Nhc2UiU3RhcnRBbmNob3IiOnRoaXMudmlzaXRTdGFydEFuY2hvcihlKTticmVhaztjYXNlIkVuZEFuY2hvciI6dGhpcy52aXNpdEVuZEFuY2hvcihlKTticmVhaztjYXNlIldvcmRCb3VuZGFyeSI6dGhpcy52aXNpdFdvcmRCb3VuZGFyeShlKTticmVhaztjYXNlIk5vbldvcmRCb3VuZGFyeSI6dGhpcy52aXNpdE5vbldvcmRCb3VuZGFyeShlKTticmVhaztjYXNlIkxvb2thaGVhZCI6dGhpcy52aXNpdExvb2thaGVhZChlKTticmVhaztjYXNlIk5lZ2F0aXZlTG9va2FoZWFkIjp0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSk7YnJlYWs7Y2FzZSJDaGFyYWN0ZXIiOnRoaXMudmlzaXRDaGFyYWN0ZXIoZSk7YnJlYWs7Y2FzZSJTZXQiOnRoaXMudmlzaXRTZXQoZSk7YnJlYWs7Y2FzZSJHcm91cCI6dGhpcy52aXNpdEdyb3VwKGUpO2JyZWFrO2Nhc2UiR3JvdXBCYWNrUmVmZXJlbmNlIjp0aGlzLnZpc2l0R3JvdXBCYWNrUmVmZXJlbmNlKGUpO2JyZWFrO2Nhc2UiUXVhbnRpZmllciI6dGhpcy52aXNpdFF1YW50aWZpZXIoZSk7YnJlYWt9dGhpcy52aXNpdENoaWxkcmVuKGUpfXZpc2l0UGF0dGVybihlKXt9dmlzaXRGbGFncyhlKXt9dmlzaXREaXNqdW5jdGlvbihlKXt9dmlzaXRBbHRlcm5hdGl2ZShlKXt9dmlzaXRTdGFydEFuY2hvcihlKXt9dmlzaXRFbmRBbmNob3IoZSl7fXZpc2l0V29yZEJvdW5kYXJ5KGUpe312aXNpdE5vbldvcmRCb3VuZGFyeShlKXt9dmlzaXRMb29rYWhlYWQoZSl7fXZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSl7fXZpc2l0Q2hhcmFjdGVyKGUpe312aXNpdFNldChlKXt9dmlzaXRHcm91cChlKXt9dmlzaXRHcm91cEJhY2tSZWZlcmVuY2UoZSl7fXZpc2l0UXVhbnRpZmllcihlKXt9fX0pO3ZhciBRdj1NKCgpPT57InVzZSBzdHJpY3QiO1ZhZSgpO1VhZSgpfSk7dmFyIE5UPXt9O3ZyKE5ULHtORVdMSU5FX1JFR0VYUDooKT0+WU4sZXNjYXBlUmVnRXhwOigpPT5RZCxnZXRDYXNlSW5zZW5zaXRpdmVQYXR0ZXJuOigpPT5YTixnZXRUZXJtaW5hbFBhcnRzOigpPT5UQmUsaXNNdWx0aWxpbmVDb21tZW50OigpPT5xTixpc1doaXRlc3BhY2U6KCk9PkRULHBhcnRpYWxNYXRjaGVzOigpPT5qTixwYXJ0aWFsUmVnRXhwOigpPT5XYWV9KTtmdW5jdGlvbiBUQmUodCl7dHJ5e3R5cGVvZiB0IT0ic3RyaW5nIiYmKHQ9dC5zb3VyY2UpLHQ9YC8ke3R9L2A7bGV0IGU9SGFlLnBhdHRlcm4odCkscj1bXTtmb3IobGV0IG4gb2YgZS52YWx1ZS52YWx1ZSlLZC5yZXNldCh0KSxLZC52aXNpdChuKSxyLnB1c2goe3N0YXJ0OktkLnN0YXJ0UmVnZXhwLGVuZDpLZC5lbmRSZWdleH0pO3JldHVybiByfWNhdGNoe3JldHVybltdfX1mdW5jdGlvbiBxTih0KXt0cnl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9bmV3IFJlZ0V4cCh0KSksdD10LnRvU3RyaW5nKCksS2QucmVzZXQodCksS2QudmlzaXQoSGFlLnBhdHRlcm4odCkpLEtkLm11bHRpbGluZX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gRFQodCl7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj9uZXcgUmVnRXhwKHQpOnQpLnRlc3QoIiAiKX1mdW5jdGlvbiBRZCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpfWZ1bmN0aW9uIFhOKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodCxlPT4vXHcvLnRlc3QoZSk/YFske2UudG9Mb3dlckNhc2UoKX0ke2UudG9VcHBlckNhc2UoKX1dYDpRZChlKSkuam9pbigiIil9ZnVuY3Rpb24gak4odCxlKXtsZXQgcj1XYWUodCksbj1lLm1hdGNoKHIpO3JldHVybiEhbiYmblswXS5sZW5ndGg+MH1mdW5jdGlvbiBXYWUodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD1uZXcgUmVnRXhwKHQpKTtsZXQgZT10LHI9dC5zb3VyY2Usbj0wO2Z1bmN0aW9uIGkoKXtsZXQgYT0iIixzO2Z1bmN0aW9uIGwoaCl7YSs9ci5zdWJzdHIobixoKSxuKz1ofW8obCwiYXBwZW5kUmF3Iik7ZnVuY3Rpb24gdShoKXthKz0iKD86IityLnN1YnN0cihuLGgpKyJ8JCkiLG4rPWh9Zm9yKG8odSwiYXBwZW5kT3B0aW9uYWwiKTtuPHIubGVuZ3RoOylzd2l0Y2gocltuXSl7Y2FzZSJcXCI6c3dpdGNoKHJbbisxXSl7Y2FzZSJjIjp1KDMpO2JyZWFrO2Nhc2UieCI6dSg0KTticmVhaztjYXNlInUiOmUudW5pY29kZT9yW24rMl09PT0ieyI/dShyLmluZGV4T2YoIn0iLG4pLW4rMSk6dSg2KTp1KDIpO2JyZWFrO2Nhc2UicCI6Y2FzZSJQIjplLnVuaWNvZGU/dShyLmluZGV4T2YoIn0iLG4pLW4rMSk6dSgyKTticmVhaztjYXNlImsiOnUoci5pbmRleE9mKCI+IixuKS1uKzEpO2JyZWFrO2RlZmF1bHQ6dSgyKTticmVha31icmVhaztjYXNlIlsiOnM9L1xbKD86XFwufC4pKj9cXS9nLHMubGFzdEluZGV4PW4scz1zLmV4ZWMocil8fFtdLHUoc1swXS5sZW5ndGgpO2JyZWFrO2Nhc2UifCI6Y2FzZSJeIjpjYXNlIiQiOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIj8iOmwoMSk7YnJlYWs7Y2FzZSJ7IjpzPS9ce1xkKyw/XGQqXH0vZyxzLmxhc3RJbmRleD1uLHM9cy5leGVjKHIpLHM/bChzWzBdLmxlbmd0aCk6dSgxKTticmVhaztjYXNlIigiOmlmKHJbbisxXT09PSI/Iilzd2l0Y2gocltuKzJdKXtjYXNlIjoiOmErPSIoPzoiLG4rPTMsYSs9aSgpKyJ8JCkiO2JyZWFrO2Nhc2UiPSI6YSs9Iig/PSIsbis9MyxhKz1pKCkrIikiO2JyZWFrO2Nhc2UiISI6cz1uLG4rPTMsaSgpLGErPXIuc3Vic3RyKHMsbi1zKTticmVhaztjYXNlIjwiOnN3aXRjaChyW24rM10pe2Nhc2UiPSI6Y2FzZSIhIjpzPW4sbis9NCxpKCksYSs9ci5zdWJzdHIocyxuLXMpO2JyZWFrO2RlZmF1bHQ6bChyLmluZGV4T2YoIj4iLG4pLW4rMSksYSs9aSgpKyJ8JCkiO2JyZWFrfWJyZWFrfWVsc2UgbCgxKSxhKz1pKCkrInwkKSI7YnJlYWs7Y2FzZSIpIjpyZXR1cm4rK24sYTtkZWZhdWx0OnUoMSk7YnJlYWt9cmV0dXJuIGF9cmV0dXJuIG8oaSwicHJvY2VzcyIpLG5ldyBSZWdFeHAoaSgpLHQuZmxhZ3MpfXZhciBZTixIYWUsV04sS2QsV209TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRdigpO1lOPS9ccj9cbi9nbSxIYWU9bmV3IGpkLFdOPWNsYXNzIGV4dGVuZHMgTGN7c3RhdGlje28odGhpcywiVGVybWluYWxSZWdFeHBWaXNpdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXNTdGFydGluZz0hMCx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdLHRoaXMubXVsdGlsaW5lPSExfWdldCBlbmRSZWdleCgpe3JldHVybiB0aGlzLmVuZFJlZ2V4cFN0YWNrLmpvaW4oIiIpfXJlc2V0KGUpe3RoaXMubXVsdGlsaW5lPSExLHRoaXMucmVnZXg9ZSx0aGlzLnN0YXJ0UmVnZXhwPSIiLHRoaXMuaXNTdGFydGluZz0hMCx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdfXZpc2l0R3JvdXAoZSl7ZS5xdWFudGlmaWVyJiYodGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W10pfXZpc2l0Q2hhcmFjdGVyKGUpe2xldCByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS52YWx1ZSk7aWYoIXRoaXMubXVsdGlsaW5lJiZyPT09YApgJiYodGhpcy5tdWx0aWxpbmU9ITApLGUucXVhbnRpZmllcil0aGlzLmlzU3RhcnRpbmc9ITEsdGhpcy5lbmRSZWdleHBTdGFjaz1bXTtlbHNle2xldCBuPVFkKHIpO3RoaXMuZW5kUmVnZXhwU3RhY2sucHVzaChuKSx0aGlzLmlzU3RhcnRpbmcmJih0aGlzLnN0YXJ0UmVnZXhwKz1uKX19dmlzaXRTZXQoZSl7aWYoIXRoaXMubXVsdGlsaW5lKXtsZXQgcj10aGlzLnJlZ2V4LnN1YnN0cmluZyhlLmxvYy5iZWdpbixlLmxvYy5lbmQpLG49bmV3IFJlZ0V4cChyKTt0aGlzLm11bHRpbGluZT0hIWAKYC5tYXRjaChuKX1pZihlLnF1YW50aWZpZXIpdGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W107ZWxzZXtsZXQgcj10aGlzLnJlZ2V4LnN1YnN0cmluZyhlLmxvYy5iZWdpbixlLmxvYy5lbmQpO3RoaXMuZW5kUmVnZXhwU3RhY2sucHVzaChyKSx0aGlzLmlzU3RhcnRpbmcmJih0aGlzLnN0YXJ0UmVnZXhwKz1yKX19dmlzaXRDaGlsZHJlbihlKXtlLnR5cGU9PT0iR3JvdXAiJiZlLnF1YW50aWZpZXJ8fHN1cGVyLnZpc2l0Q2hpbGRyZW4oZSl9fSxLZD1uZXcgV047byhUQmUsImdldFRlcm1pbmFsUGFydHMiKTtvKHFOLCJpc011bHRpbGluZUNvbW1lbnQiKTtvKERULCJpc1doaXRlc3BhY2UiKTtvKFFkLCJlc2NhcGVSZWdFeHAiKTtvKFhOLCJnZXRDYXNlSW5zZW5zaXRpdmVQYXR0ZXJuIik7byhqTiwicGFydGlhbE1hdGNoZXMiKTtvKFdhZSwicGFydGlhbFJlZ0V4cCIpfSk7dmFyIE1UPXt9O3ZyKE1ULHtmaW5kQXNzaWdubWVudDooKT0+aVIsZmluZE5hbWVBc3NpZ25tZW50OigpPT5SVCxmaW5kTm9kZUZvcktleXdvcmQ6KCk9PnJSLGZpbmROb2RlRm9yUHJvcGVydHk6KCk9Pkp2LGZpbmROb2Rlc0ZvcktleXdvcmQ6KCk9PmtCZSxmaW5kTm9kZXNGb3JLZXl3b3JkSW50ZXJuYWw6KCk9Pm5SLGZpbmROb2Rlc0ZvclByb3BlcnR5OigpPT5lUixnZXRBY3Rpb25BdEVsZW1lbnQ6KCk9PkthZSxnZXRBY3Rpb25UeXBlOigpPT5aYWUsZ2V0QWxsUmVhY2hhYmxlUnVsZXM6KCk9Plp2LGdldENyb3NzUmVmZXJlbmNlVGVybWluYWw6KCk9PlpOLGdldEVudHJ5UnVsZTooKT0+WWFlLGdldEV4cGxpY2l0UnVsZVR5cGU6KCk9PmFSLGdldEhpZGRlblJ1bGVzOigpPT5xYWUsZ2V0UnVsZVR5cGU6KCk9PnNSLGdldFR5cGVOYW1lOigpPT5aZCxpc0FycmF5Q2FyZGluYWxpdHk6KCk9PlNCZSxpc0FycmF5T3BlcmF0b3I6KCk9PkNCZSxpc0NvbW1lbnRUZXJtaW5hbDooKT0+Sk4saXNEYXRhVHlwZTooKT0+QUJlLGlzRGF0YVR5cGVSdWxlOigpPT5lMixpc09wdGlvbmFsQ2FyZGluYWxpdHk6KCk9PkVCZSx0ZXJtaW5hbFJlZ2V4OigpPT5ZbX0pO2Z1bmN0aW9uIFlhZSh0KXtyZXR1cm4gdC5ydWxlcy5maW5kKGU9Pk1hKGUpJiZlLmVudHJ5KX1mdW5jdGlvbiBxYWUodCl7cmV0dXJuIHQucnVsZXMuZmlsdGVyKGU9PnFvKGUpJiZlLmhpZGRlbil9ZnVuY3Rpb24gWnYodCxlKXtsZXQgcj1uZXcgU2V0LG49WWFlKHQpO2lmKCFuKXJldHVybiBuZXcgU2V0KHQucnVsZXMpO2xldCBpPVtuXS5jb25jYXQocWFlKHQpKTtmb3IobGV0IHMgb2YgaSlYYWUocyxyLGUpO2xldCBhPW5ldyBTZXQ7Zm9yKGxldCBzIG9mIHQucnVsZXMpKHIuaGFzKHMubmFtZSl8fHFvKHMpJiZzLmhpZGRlbikmJmEuYWRkKHMpO3JldHVybiBhfWZ1bmN0aW9uIFhhZSh0LGUscil7ZS5hZGQodC5uYW1lKSxfYyh0KS5mb3JFYWNoKG49PntpZihPbChuKXx8ciYmRVQobikpe2xldCBpPW4ucnVsZS5yZWY7aSYmIWUuaGFzKGkubmFtZSkmJlhhZShpLGUscil9fSl9ZnVuY3Rpb24gWk4odCl7aWYodC50ZXJtaW5hbClyZXR1cm4gdC50ZXJtaW5hbDtpZih0LnR5cGUucmVmKXtsZXQgZT1SVCh0LnR5cGUucmVmKTtyZXR1cm4gZT8udGVybWluYWx9fWZ1bmN0aW9uIEpOKHQpe3JldHVybiB0LmhpZGRlbiYmIVltKHQpLnRlc3QoIiAiKX1mdW5jdGlvbiBlUih0LGUpe3JldHVybiF0fHwhZT9bXTp0Uih0LGUsdC5hc3ROb2RlLCEwKX1mdW5jdGlvbiBKdih0LGUscil7aWYoIXR8fCFlKXJldHVybjtsZXQgbj10Uih0LGUsdC5hc3ROb2RlLCEwKTtpZihuLmxlbmd0aCE9PTApcmV0dXJuIHIhPT12b2lkIDA/cj1NYXRoLm1heCgwLE1hdGgubWluKHIsbi5sZW5ndGgtMSkpOnI9MCxuW3JdfWZ1bmN0aW9uIHRSKHQsZSxyLG4pe2lmKCFuKXtsZXQgaT1xZCh0LmdyYW1tYXJTb3VyY2UsSWwpO2lmKGkmJmkuZmVhdHVyZT09PWUpcmV0dXJuW3RdfXJldHVybiBpbyh0KSYmdC5hc3ROb2RlPT09cj90LmNvbnRlbnQuZmxhdE1hcChpPT50UihpLGUsciwhMSkpOltdfWZ1bmN0aW9uIGtCZSh0LGUpe3JldHVybiB0P25SKHQsZSx0Py5hc3ROb2RlKTpbXX1mdW5jdGlvbiByUih0LGUscil7aWYoIXQpcmV0dXJuO2xldCBuPW5SKHQsZSx0Py5hc3ROb2RlKTtpZihuLmxlbmd0aCE9PTApcmV0dXJuIHIhPT12b2lkIDA/cj1NYXRoLm1heCgwLE1hdGgubWluKHIsbi5sZW5ndGgtMSkpOnI9MCxuW3JdfWZ1bmN0aW9uIG5SKHQsZSxyKXtpZih0LmFzdE5vZGUhPT1yKXJldHVybltdO2lmKFhvKHQuZ3JhbW1hclNvdXJjZSkmJnQuZ3JhbW1hclNvdXJjZS52YWx1ZT09PWUpcmV0dXJuW3RdO2xldCBuPVVkKHQpLml0ZXJhdG9yKCksaSxhPVtdO2RvIGlmKGk9bi5uZXh0KCksIWkuZG9uZSl7bGV0IHM9aS52YWx1ZTtzLmFzdE5vZGU9PT1yP1hvKHMuZ3JhbW1hclNvdXJjZSkmJnMuZ3JhbW1hclNvdXJjZS52YWx1ZT09PWUmJmEucHVzaChzKTpuLnBydW5lKCl9d2hpbGUoIWkuZG9uZSk7cmV0dXJuIGF9ZnVuY3Rpb24gaVIodCl7dmFyIGU7bGV0IHI9dC5hc3ROb2RlO2Zvcig7cj09PSgoZT10LmNvbnRhaW5lcik9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLmFzdE5vZGUpOyl7bGV0IG49cWQodC5ncmFtbWFyU291cmNlLElsKTtpZihuKXJldHVybiBuO3Q9dC5jb250YWluZXJ9fWZ1bmN0aW9uIFJUKHQpe2xldCBlPXQ7cmV0dXJuIGJUKGUpJiYoUnUoZS4kY29udGFpbmVyKT9lPWUuJGNvbnRhaW5lci4kY29udGFpbmVyOk1hKGUuJGNvbnRhaW5lcik/ZT1lLiRjb250YWluZXI6ZWYoZS4kY29udGFpbmVyKSksamFlKHQsZSxuZXcgTWFwKX1mdW5jdGlvbiBqYWUodCxlLHIpe3ZhciBuO2Z1bmN0aW9uIGkoYSxzKXtsZXQgbDtyZXR1cm4gcWQoYSxJbCl8fChsPWphZShzLHMscikpLHIuc2V0KHQsbCksbH1pZihvKGksImdvIiksci5oYXModCkpcmV0dXJuIHIuZ2V0KHQpO3Iuc2V0KHQsdm9pZCAwKTtmb3IobGV0IGEgb2YgX2MoZSkpe2lmKElsKGEpJiZhLmZlYXR1cmUudG9Mb3dlckNhc2UoKT09PSJuYW1lIilyZXR1cm4gci5zZXQodCxhKSxhO2lmKE9sKGEpJiZNYShhLnJ1bGUucmVmKSlyZXR1cm4gaShhLGEucnVsZS5yZWYpO2lmKFRUKGEpJiYoISgobj1hLnR5cGVSZWYpPT09bnVsbHx8bj09PXZvaWQgMCkmJm4ucmVmKSlyZXR1cm4gaShhLGEudHlwZVJlZi5yZWYpfX1mdW5jdGlvbiBLYWUodCl7bGV0IGU9dC4kY29udGFpbmVyO2lmKHRmKGUpKXtsZXQgcj1lLmVsZW1lbnRzLG49ci5pbmRleE9mKHQpO2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pe2xldCBhPXJbaV07aWYoUnUoYSkpcmV0dXJuIGE7e2xldCBzPV9jKHJbaV0pLmZpbmQoUnUpO2lmKHMpcmV0dXJuIHN9fX1pZihIdihlKSlyZXR1cm4gS2FlKGUpfWZ1bmN0aW9uIEVCZSh0LGUpe3JldHVybiB0PT09Ij8ifHx0PT09IioifHx0ZihlKSYmISFlLmd1YXJkQ29uZGl0aW9ufWZ1bmN0aW9uIFNCZSh0KXtyZXR1cm4gdD09PSIqInx8dD09PSIrIn1mdW5jdGlvbiBDQmUodCl7cmV0dXJuIHQ9PT0iKz0ifWZ1bmN0aW9uIGUyKHQpe3JldHVybiBRYWUodCxuZXcgU2V0KX1mdW5jdGlvbiBRYWUodCxlKXtpZihlLmhhcyh0KSlyZXR1cm4hMDtlLmFkZCh0KTtmb3IobGV0IHIgb2YgX2ModCkpaWYoT2wocikpe2lmKCFyLnJ1bGUucmVmfHxNYShyLnJ1bGUucmVmKSYmIVFhZShyLnJ1bGUucmVmLGUpKXJldHVybiExfWVsc2V7aWYoSWwocikpcmV0dXJuITE7aWYoUnUocikpcmV0dXJuITF9cmV0dXJuISF0LmRlZmluaXRpb259ZnVuY3Rpb24gQUJlKHQpe3JldHVybiBRTih0LnR5cGUsbmV3IFNldCl9ZnVuY3Rpb24gUU4odCxlKXtpZihlLmhhcyh0KSlyZXR1cm4hMDtpZihlLmFkZCh0KSxVRCh0KSlyZXR1cm4hMTtpZihvTih0KSlyZXR1cm4hMTtpZihkTih0KSlyZXR1cm4gdC50eXBlcy5ldmVyeShyPT5RTihyLGUpKTtpZihUVCh0KSl7aWYodC5wcmltaXRpdmVUeXBlIT09dm9pZCAwKXJldHVybiEwO2lmKHQuc3RyaW5nVHlwZSE9PXZvaWQgMClyZXR1cm4hMDtpZih0LnR5cGVSZWYhPT12b2lkIDApe2xldCByPXQudHlwZVJlZi5yZWY7cmV0dXJuIFd2KHIpP1FOKHIudHlwZSxlKTohMX1lbHNlIHJldHVybiExfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gYVIodCl7aWYodC5pbmZlcnJlZFR5cGUpcmV0dXJuIHQuaW5mZXJyZWRUeXBlLm5hbWU7aWYodC5kYXRhVHlwZSlyZXR1cm4gdC5kYXRhVHlwZTtpZih0LnJldHVyblR5cGUpe2xldCBlPXQucmV0dXJuVHlwZS5yZWY7aWYoZSl7aWYoTWEoZSkpcmV0dXJuIGUubmFtZTtpZih3VChlKXx8V3YoZSkpcmV0dXJuIGUubmFtZX19fWZ1bmN0aW9uIFpkKHQpe3ZhciBlO2lmKE1hKHQpKXJldHVybiBlMih0KT90Lm5hbWU6KGU9YVIodCkpIT09bnVsbCYmZSE9PXZvaWQgMD9lOnQubmFtZTtpZih3VCh0KXx8V3YodCl8fGxOKHQpKXJldHVybiB0Lm5hbWU7aWYoUnUodCkpe2xldCByPVphZSh0KTtpZihyKXJldHVybiByfWVsc2UgaWYoYlQodCkpcmV0dXJuIHQubmFtZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgbmFtZSBvZiBVbmtub3duIFR5cGUiKX1mdW5jdGlvbiBaYWUodCl7dmFyIGU7aWYodC5pbmZlcnJlZFR5cGUpcmV0dXJuIHQuaW5mZXJyZWRUeXBlLm5hbWU7aWYoISgoZT10LnR5cGUpPT09bnVsbHx8ZT09PXZvaWQgMCkmJmUucmVmKXJldHVybiBaZCh0LnR5cGUucmVmKX1mdW5jdGlvbiBzUih0KXt2YXIgZSxyLG47cmV0dXJuIHFvKHQpPyhyPShlPXQudHlwZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm5hbWUpIT09bnVsbCYmciE9PXZvaWQgMD9yOiJzdHJpbmciOmUyKHQpP3QubmFtZToobj1hUih0KSkhPT1udWxsJiZuIT09dm9pZCAwP246dC5uYW1lfWZ1bmN0aW9uIFltKHQpe2xldCBlPXtzOiExLGk6ITEsdTohMX0scj1xbSh0LmRlZmluaXRpb24sZSksbj1PYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFssaV0pPT5pKS5tYXAoKFtpXSk9PmkpLmpvaW4oIiIpO3JldHVybiBuZXcgUmVnRXhwKHIsbil9ZnVuY3Rpb24gcW0odCxlKXtpZihETih0KSlyZXR1cm4gX0JlKHQpO2lmKFJOKHQpKXJldHVybiBMQmUodCk7aWYodk4odCkpcmV0dXJuIFJCZSh0KTtpZihFVCh0KSl7bGV0IHI9dC5ydWxlLnJlZjtpZighcil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcnVsZSByZWZlcmVuY2UuIik7cmV0dXJuIE11KHFtKHIuZGVmaW5pdGlvbikse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZWxzZXtpZihTTih0KSlyZXR1cm4gTkJlKHQpO2lmKFBOKHQpKXJldHVybiBEQmUodCk7aWYoQU4odCkpe2xldCByPXQucmVnZXgubGFzdEluZGV4T2YoIi8iKSxuPXQucmVnZXguc3Vic3RyaW5nKDEsciksaT10LnJlZ2V4LnN1YnN0cmluZyhyKzEpO3JldHVybiBlJiYoZS5pPWkuaW5jbHVkZXMoImkiKSxlLnM9aS5pbmNsdWRlcygicyIpLGUudT1pLmluY2x1ZGVzKCJ1IikpLE11KG4se2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KX1lbHNle2lmKEZOKHQpKXJldHVybiBNdShvUix7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KTt0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVybWluYWwgZWxlbWVudDogJHt0Py4kdHlwZX1gKX19fWZ1bmN0aW9uIF9CZSh0KXtyZXR1cm4gTXUodC5lbGVtZW50cy5tYXAoZT0+cW0oZSkpLmpvaW4oInwiKSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiBMQmUodCl7cmV0dXJuIE11KHQuZWxlbWVudHMubWFwKGU9PnFtKGUpKS5qb2luKCIiKSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiBEQmUodCl7cmV0dXJuIE11KGAke29SfSo/JHtxbSh0LnRlcm1pbmFsKX1gLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIE5CZSh0KXtyZXR1cm4gTXUoYCg/ISR7cW0odC50ZXJtaW5hbCl9KSR7b1J9Kj9gLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIFJCZSh0KXtyZXR1cm4gdC5yaWdodD9NdShgWyR7S04odC5sZWZ0KX0tJHtLTih0LnJpZ2h0KX1dYCx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWQsd3JhcDohMX0pOk11KEtOKHQubGVmdCkse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KX1mdW5jdGlvbiBLTih0KXtyZXR1cm4gUWQodC52YWx1ZSl9ZnVuY3Rpb24gTXUodCxlKXt2YXIgcjtyZXR1cm4oZS53cmFwIT09ITF8fGUubG9va2FoZWFkKSYmKHQ9YCgkeyhyPWUubG9va2FoZWFkKSE9PW51bGwmJnIhPT12b2lkIDA/cjoiIn0ke3R9KWApLGUuY2FyZGluYWxpdHk/YCR7dH0ke2UuY2FyZGluYWxpdHl9YDp0fXZhciBvUixQbD1NKCgpPT57InVzZSBzdHJpY3QiO2dUKCk7QWMoKTtZbygpO2VzKCk7TWwoKTtXbSgpO28oWWFlLCJnZXRFbnRyeVJ1bGUiKTtvKHFhZSwiZ2V0SGlkZGVuUnVsZXMiKTtvKFp2LCJnZXRBbGxSZWFjaGFibGVSdWxlcyIpO28oWGFlLCJydWxlRGZzIik7byhaTiwiZ2V0Q3Jvc3NSZWZlcmVuY2VUZXJtaW5hbCIpO28oSk4sImlzQ29tbWVudFRlcm1pbmFsIik7byhlUiwiZmluZE5vZGVzRm9yUHJvcGVydHkiKTtvKEp2LCJmaW5kTm9kZUZvclByb3BlcnR5Iik7byh0UiwiZmluZE5vZGVzRm9yUHJvcGVydHlJbnRlcm5hbCIpO28oa0JlLCJmaW5kTm9kZXNGb3JLZXl3b3JkIik7byhyUiwiZmluZE5vZGVGb3JLZXl3b3JkIik7byhuUiwiZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsIik7byhpUiwiZmluZEFzc2lnbm1lbnQiKTtvKFJULCJmaW5kTmFtZUFzc2lnbm1lbnQiKTtvKGphZSwiZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwiKTtvKEthZSwiZ2V0QWN0aW9uQXRFbGVtZW50Iik7byhFQmUsImlzT3B0aW9uYWxDYXJkaW5hbGl0eSIpO28oU0JlLCJpc0FycmF5Q2FyZGluYWxpdHkiKTtvKENCZSwiaXNBcnJheU9wZXJhdG9yIik7byhlMiwiaXNEYXRhVHlwZVJ1bGUiKTtvKFFhZSwiaXNEYXRhVHlwZVJ1bGVJbnRlcm5hbCIpO28oQUJlLCJpc0RhdGFUeXBlIik7byhRTiwiaXNEYXRhVHlwZUludGVybmFsIik7byhhUiwiZ2V0RXhwbGljaXRSdWxlVHlwZSIpO28oWmQsImdldFR5cGVOYW1lIik7byhaYWUsImdldEFjdGlvblR5cGUiKTtvKHNSLCJnZXRSdWxlVHlwZSIpO28oWW0sInRlcm1pbmFsUmVnZXgiKTtvUj0vW1xzXFNdLy5zb3VyY2U7byhxbSwiYWJzdHJhY3RFbGVtZW50VG9SZWdleCIpO28oX0JlLCJ0ZXJtaW5hbEFsdGVybmF0aXZlc1RvUmVnZXgiKTtvKExCZSwidGVybWluYWxHcm91cFRvUmVnZXgiKTtvKERCZSwidW50aWxUb2tlblRvUmVnZXgiKTtvKE5CZSwibmVnYXRlVG9rZW5Ub1JlZ2V4Iik7byhSQmUsImNoYXJhY3RlclJhbmdlVG9SZWdleCIpO28oS04sImtleXdvcmRUb1JlZ2V4Iik7byhNdSwid2l0aENhcmRpbmFsaXR5Iil9KTtmdW5jdGlvbiBsUih0KXtsZXQgZT1bXSxyPXQuR3JhbW1hcjtmb3IobGV0IG4gb2Ygci5ydWxlcylxbyhuKSYmSk4obikmJnFOKFltKG4pKSYmZS5wdXNoKG4ubmFtZSk7cmV0dXJue211bHRpbGluZUNvbW1lbnRSdWxlczplLG5hbWVSZWdleHA6cFR9fXZhciBjUj1NKCgpPT57InVzZSBzdHJpY3QiO01sKCk7UGwoKTtXbSgpO0FjKCk7byhsUiwiY3JlYXRlR3JhbW1hckNvbmZpZyIpfSk7dmFyIHVSPU0oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBYbSh0KXtjb25zb2xlJiZjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKGBFcnJvcjogJHt0fWApfWZ1bmN0aW9uIHQyKHQpe2NvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGBXYXJuaW5nOiAke3R9YCl9dmFyIEphZT1NKCgpPT57InVzZSBzdHJpY3QiO28oWG0sIlBSSU5UX0VSUk9SIik7byh0MiwiUFJJTlRfV0FSTklORyIpfSk7ZnVuY3Rpb24gcjIodCl7bGV0IGU9bmV3IERhdGUoKS5nZXRUaW1lKCkscj10KCk7cmV0dXJue3RpbWU6bmV3IERhdGUoKS5nZXRUaW1lKCktZSx2YWx1ZTpyfX12YXIgZXNlPU0oKCk9PnsidXNlIHN0cmljdCI7byhyMiwidGltZXIiKX0pO2Z1bmN0aW9uIG4yKHQpe2Z1bmN0aW9uIGUoKXt9byhlLCJGYWtlQ29uc3RydWN0b3IiKSxlLnByb3RvdHlwZT10O2xldCByPW5ldyBlO2Z1bmN0aW9uIG4oKXtyZXR1cm4gdHlwZW9mIHIuYmFyfXJldHVybiBvKG4sImZha2VBY2Nlc3MiKSxuKCksbigpLHQ7KDAsZXZhbCkodCl9dmFyIHRzZT1NKCgpPT57InVzZSBzdHJpY3QiO28objIsInRvRmFzdFByb3BlcnRpZXMiKX0pO3ZhciBqbT1NKCgpPT57InVzZSBzdHJpY3QiO0phZSgpO2VzZSgpO3RzZSgpfSk7ZnVuY3Rpb24gTUJlKHQpe3JldHVybiBJQmUodCk/dC5MQUJFTDp0Lm5hbWV9ZnVuY3Rpb24gSUJlKHQpe3JldHVybiBnaSh0LkxBQkVMKSYmdC5MQUJFTCE9PSIifWZ1bmN0aW9uIElUKHQpe3JldHVybiBKZSh0LEttKX1mdW5jdGlvbiBLbSh0KXtmdW5jdGlvbiBlKHIpe3JldHVybiBKZShyLEttKX1pZihvKGUsImNvbnZlcnREZWZpbml0aW9uIiksdCBpbnN0YW5jZW9mIG5uKXtsZXQgcj17dHlwZToiTm9uVGVybWluYWwiLG5hbWU6dC5ub25UZXJtaW5hbE5hbWUsaWR4OnQuaWR4fTtyZXR1cm4gZ2kodC5sYWJlbCkmJihyLmxhYmVsPXQubGFiZWwpLHJ9ZWxzZXtpZih0IGluc3RhbmNlb2YgQ24pcmV0dXJue3R5cGU6IkFsdGVybmF0aXZlIixkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIGFuKXJldHVybnt0eXBlOiJPcHRpb24iLGlkeDp0LmlkeCxkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIEFuKXJldHVybnt0eXBlOiJSZXBldGl0aW9uTWFuZGF0b3J5IixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBfbilyZXR1cm57dHlwZToiUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiLGlkeDp0LmlkeCxzZXBhcmF0b3I6S20obmV3IGtyKHt0ZXJtaW5hbFR5cGU6dC5zZXBhcmF0b3J9KSksZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiB2bilyZXR1cm57dHlwZToiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiLGlkeDp0LmlkeCxzZXBhcmF0b3I6S20obmV3IGtyKHt0ZXJtaW5hbFR5cGU6dC5zZXBhcmF0b3J9KSksZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBMcilyZXR1cm57dHlwZToiUmVwZXRpdGlvbiIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgeG4pcmV0dXJue3R5cGU6IkFsdGVybmF0aW9uIixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBrcil7bGV0IHI9e3R5cGU6IlRlcm1pbmFsIixuYW1lOnQudGVybWluYWxUeXBlLm5hbWUsbGFiZWw6TUJlKHQudGVybWluYWxUeXBlKSxpZHg6dC5pZHh9O2dpKHQubGFiZWwpJiYoci50ZXJtaW5hbExhYmVsPXQubGFiZWwpO2xldCBuPXQudGVybWluYWxUeXBlLlBBVFRFUk47cmV0dXJuIHQudGVybWluYWxUeXBlLlBBVFRFUk4mJihyLnBhdHRlcm49Vm8obik/bi5zb3VyY2U6bikscn1lbHNle2lmKHQgaW5zdGFuY2VvZiB0cylyZXR1cm57dHlwZToiUnVsZSIsbmFtZTp0Lm5hbWUsb3JnVGV4dDp0Lm9yZ1RleHQsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX19dmFyIHNvLG5uLHRzLENuLGFuLEFuLF9uLExyLHZuLHhuLGtyLE9UPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKE1CZSwidG9rZW5MYWJlbCIpO28oSUJlLCJoYXNUb2tlbkxhYmVsIik7c289Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RQcm9kdWN0aW9uIil9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5fZGVmaW5pdGlvbn1zZXQgZGVmaW5pdGlvbihlKXt0aGlzLl9kZWZpbml0aW9uPWV9Y29uc3RydWN0b3IoZSl7dGhpcy5fZGVmaW5pdGlvbj1lfWFjY2VwdChlKXtlLnZpc2l0KHRoaXMpLENlKHRoaXMuZGVmaW5pdGlvbixyPT57ci5hY2NlcHQoZSl9KX19LG5uPWNsYXNzIGV4dGVuZHMgc297c3RhdGlje28odGhpcywiTm9uVGVybWluYWwiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihbXSksdGhpcy5pZHg9MSxoYSh0aGlzLERzKGUscj0+ciE9PXZvaWQgMCkpfXNldCBkZWZpbml0aW9uKGUpe31nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLnJlZmVyZW5jZWRSdWxlIT09dm9pZCAwP3RoaXMucmVmZXJlbmNlZFJ1bGUuZGVmaW5pdGlvbjpbXX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKX19LHRzPWNsYXNzIGV4dGVuZHMgc297c3RhdGlje28odGhpcywiUnVsZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5vcmdUZXh0PSIiLGhhKHRoaXMsRHMoZSxyPT5yIT09dm9pZCAwKSl9fSxDbj1jbGFzcyBleHRlbmRzIHNve3N0YXRpY3tvKHRoaXMsIkFsdGVybmF0aXZlIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlnbm9yZUFtYmlndWl0aWVzPSExLGhhKHRoaXMsRHMoZSxyPT5yIT09dm9pZCAwKSl9fSxhbj1jbGFzcyBleHRlbmRzIHNve3N0YXRpY3tvKHRoaXMsIk9wdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSxoYSh0aGlzLERzKGUscj0+ciE9PXZvaWQgMCkpfX0sQW49Y2xhc3MgZXh0ZW5kcyBzb3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uTWFuZGF0b3J5Iil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLGhhKHRoaXMsRHMoZSxyPT5yIT09dm9pZCAwKSl9fSxfbj1jbGFzcyBleHRlbmRzIHNve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLGhhKHRoaXMsRHMoZSxyPT5yIT09dm9pZCAwKSl9fSxMcj1jbGFzcyBleHRlbmRzIHNve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb24iKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsaGEodGhpcyxEcyhlLHI9PnIhPT12b2lkIDApKX19LHZuPWNsYXNzIGV4dGVuZHMgc297c3RhdGlje28odGhpcywiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsaGEodGhpcyxEcyhlLHI9PnIhPT12b2lkIDApKX19LHhuPWNsYXNzIGV4dGVuZHMgc297c3RhdGlje28odGhpcywiQWx0ZXJuYXRpb24iKX1nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLl9kZWZpbml0aW9ufXNldCBkZWZpbml0aW9uKGUpe3RoaXMuX2RlZmluaXRpb249ZX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsdGhpcy5pZ25vcmVBbWJpZ3VpdGllcz0hMSx0aGlzLmhhc1ByZWRpY2F0ZXM9ITEsaGEodGhpcyxEcyhlLHI9PnIhPT12b2lkIDApKX19LGtyPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRlcm1pbmFsIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pZHg9MSxoYSh0aGlzLERzKGUscj0+ciE9PXZvaWQgMCkpfWFjY2VwdChlKXtlLnZpc2l0KHRoaXMpfX07byhJVCwic2VyaWFsaXplR3JhbW1hciIpO28oS20sInNlcmlhbGl6ZVByb2R1Y3Rpb24iKX0pO3ZhciBycyxyc2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPVCgpO3JzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkdBc3RWaXNpdG9yIil9dmlzaXQoZSl7bGV0IHI9ZTtzd2l0Y2goci5jb25zdHJ1Y3Rvcil7Y2FzZSBubjpyZXR1cm4gdGhpcy52aXNpdE5vblRlcm1pbmFsKHIpO2Nhc2UgQ246cmV0dXJuIHRoaXMudmlzaXRBbHRlcm5hdGl2ZShyKTtjYXNlIGFuOnJldHVybiB0aGlzLnZpc2l0T3B0aW9uKHIpO2Nhc2UgQW46cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KHIpO2Nhc2UgX246cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihyKTtjYXNlIHZuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3Iocik7Y2FzZSBMcjpyZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb24ocik7Y2FzZSB4bjpyZXR1cm4gdGhpcy52aXNpdEFsdGVybmF0aW9uKHIpO2Nhc2Uga3I6cmV0dXJuIHRoaXMudmlzaXRUZXJtaW5hbChyKTtjYXNlIHRzOnJldHVybiB0aGlzLnZpc2l0UnVsZShyKTtkZWZhdWx0OnRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX12aXNpdE5vblRlcm1pbmFsKGUpe312aXNpdEFsdGVybmF0aXZlKGUpe312aXNpdE9wdGlvbihlKXt9dmlzaXRSZXBldGl0aW9uKGUpe312aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7fXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7fXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7fXZpc2l0QWx0ZXJuYXRpb24oZSl7fXZpc2l0VGVybWluYWwoZSl7fXZpc2l0UnVsZShlKXt9fX0pO2Z1bmN0aW9uIGhSKHQpe3JldHVybiB0IGluc3RhbmNlb2YgQ258fHQgaW5zdGFuY2VvZiBhbnx8dCBpbnN0YW5jZW9mIExyfHx0IGluc3RhbmNlb2YgQW58fHQgaW5zdGFuY2VvZiBfbnx8dCBpbnN0YW5jZW9mIHZufHx0IGluc3RhbmNlb2Yga3J8fHQgaW5zdGFuY2VvZiB0c31mdW5jdGlvbiBKZCh0LGU9W10pe3JldHVybiB0IGluc3RhbmNlb2YgYW58fHQgaW5zdGFuY2VvZiBMcnx8dCBpbnN0YW5jZW9mIHZuPyEwOnQgaW5zdGFuY2VvZiB4bj9Sdih0LmRlZmluaXRpb24sbj0+SmQobixlKSk6dCBpbnN0YW5jZW9mIG5uJiZIbihlLHQpPyExOnQgaW5zdGFuY2VvZiBzbz8odCBpbnN0YW5jZW9mIG5uJiZlLnB1c2godCksUmEodC5kZWZpbml0aW9uLG49PkpkKG4sZSkpKTohMX1mdW5jdGlvbiBmUih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHhufWZ1bmN0aW9uIE1zKHQpe2lmKHQgaW5zdGFuY2VvZiBubilyZXR1cm4iU1VCUlVMRSI7aWYodCBpbnN0YW5jZW9mIGFuKXJldHVybiJPUFRJT04iO2lmKHQgaW5zdGFuY2VvZiB4bilyZXR1cm4iT1IiO2lmKHQgaW5zdGFuY2VvZiBBbilyZXR1cm4iQVRfTEVBU1RfT05FIjtpZih0IGluc3RhbmNlb2YgX24pcmV0dXJuIkFUX0xFQVNUX09ORV9TRVAiO2lmKHQgaW5zdGFuY2VvZiB2bilyZXR1cm4iTUFOWV9TRVAiO2lmKHQgaW5zdGFuY2VvZiBMcilyZXR1cm4iTUFOWSI7aWYodCBpbnN0YW5jZW9mIGtyKXJldHVybiJDT05TVU1FIjt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX12YXIgbnNlPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtPVCgpO28oaFIsImlzU2VxdWVuY2VQcm9kIik7byhKZCwiaXNPcHRpb25hbFByb2QiKTtvKGZSLCJpc0JyYW5jaGluZ1Byb2QiKTtvKE1zLCJnZXRQcm9kdWN0aW9uRHNsTmFtZSIpfSk7dmFyIG5zPU0oKCk9PnsidXNlIHN0cmljdCI7T1QoKTtyc2UoKTtuc2UoKX0pO2Z1bmN0aW9uIGlzZSh0LGUscil7cmV0dXJuW25ldyBhbih7ZGVmaW5pdGlvbjpbbmV3IGtyKHt0ZXJtaW5hbFR5cGU6dC5zZXBhcmF0b3J9KV0uY29uY2F0KHQuZGVmaW5pdGlvbil9KV0uY29uY2F0KGUscil9dmFyIEl1LFBUPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtucygpO0l1PWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlc3RXYWxrZXIiKX13YWxrKGUscj1bXSl7Q2UoZS5kZWZpbml0aW9uLChuLGkpPT57bGV0IGE9bWkoZS5kZWZpbml0aW9uLGkrMSk7aWYobiBpbnN0YW5jZW9mIG5uKXRoaXMud2Fsa1Byb2RSZWYobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIGtyKXRoaXMud2Fsa1Rlcm1pbmFsKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBDbil0aGlzLndhbGtGbGF0KG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBhbil0aGlzLndhbGtPcHRpb24obixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIEFuKXRoaXMud2Fsa0F0TGVhc3RPbmUobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIF9uKXRoaXMud2Fsa0F0TGVhc3RPbmVTZXAobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIHZuKXRoaXMud2Fsa01hbnlTZXAobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIExyKXRoaXMud2Fsa01hbnkobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIHhuKXRoaXMud2Fsa09yKG4sYSxyKTtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfSl9d2Fsa1Rlcm1pbmFsKGUscixuKXt9d2Fsa1Byb2RSZWYoZSxyLG4pe313YWxrRmxhdChlLHIsbil7bGV0IGk9ci5jb25jYXQobik7dGhpcy53YWxrKGUsaSl9d2Fsa09wdGlvbihlLHIsbil7bGV0IGk9ci5jb25jYXQobik7dGhpcy53YWxrKGUsaSl9d2Fsa0F0TGVhc3RPbmUoZSxyLG4pe2xldCBpPVtuZXcgYW4oe2RlZmluaXRpb246ZS5kZWZpbml0aW9ufSldLmNvbmNhdChyLG4pO3RoaXMud2FsayhlLGkpfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXtsZXQgaT1pc2UoZSxyLG4pO3RoaXMud2FsayhlLGkpfXdhbGtNYW55KGUscixuKXtsZXQgaT1bbmV3IGFuKHtkZWZpbml0aW9uOmUuZGVmaW5pdGlvbn0pXS5jb25jYXQocixuKTt0aGlzLndhbGsoZSxpKX13YWxrTWFueVNlcChlLHIsbil7bGV0IGk9aXNlKGUscixuKTt0aGlzLndhbGsoZSxpKX13YWxrT3IoZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO0NlKGUuZGVmaW5pdGlvbixhPT57bGV0IHM9bmV3IENuKHtkZWZpbml0aW9uOlthXX0pO3RoaXMud2FsayhzLGkpfSl9fTtvKGlzZSwicmVzdEZvclJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIil9KTtmdW5jdGlvbiBlMCh0KXtpZih0IGluc3RhbmNlb2Ygbm4pcmV0dXJuIGUwKHQucmVmZXJlbmNlZFJ1bGUpO2lmKHQgaW5zdGFuY2VvZiBrcilyZXR1cm4gQkJlKHQpO2lmKGhSKHQpKXJldHVybiBPQmUodCk7aWYoZlIodCkpcmV0dXJuIFBCZSh0KTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1mdW5jdGlvbiBPQmUodCl7bGV0IGU9W10scj10LmRlZmluaXRpb24sbj0wLGk9ci5sZW5ndGg+bixhLHM9ITA7Zm9yKDtpJiZzOylhPXJbbl0scz1KZChhKSxlPWUuY29uY2F0KGUwKGEpKSxuPW4rMSxpPXIubGVuZ3RoPm47cmV0dXJuIE9tKGUpfWZ1bmN0aW9uIFBCZSh0KXtsZXQgZT1KZSh0LmRlZmluaXRpb24scj0+ZTAocikpO3JldHVybiBPbShXcihlKSl9ZnVuY3Rpb24gQkJlKHQpe3JldHVyblt0LnRlcm1pbmFsVHlwZV19dmFyIGRSPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtucygpO28oZTAsImZpcnN0Iik7byhPQmUsImZpcnN0Rm9yU2VxdWVuY2UiKTtvKFBCZSwiZmlyc3RGb3JCcmFuY2hpbmciKTtvKEJCZSwiZmlyc3RGb3JUZXJtaW5hbCIpfSk7dmFyIEJULHBSPU0oKCk9PnsidXNlIHN0cmljdCI7QlQ9Il9+SU5+XyJ9KTtmdW5jdGlvbiBhc2UodCl7bGV0IGU9e307cmV0dXJuIENlKHQscj0+e2xldCBuPW5ldyBtUihyKS5zdGFydFdhbGtpbmcoKTtoYShlLG4pfSksZX1mdW5jdGlvbiBGQmUodCxlKXtyZXR1cm4gdC5uYW1lK2UrQlR9dmFyIG1SLHNzZT1NKCgpPT57InVzZSBzdHJpY3QiO1BUKCk7ZFIoKTtIdCgpO3BSKCk7bnMoKTttUj1jbGFzcyBleHRlbmRzIEl1e3N0YXRpY3tvKHRoaXMsIlJlc3luY0ZvbGxvd3NXYWxrZXIiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudG9wUHJvZD1lLHRoaXMuZm9sbG93cz17fX1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUHJvZCksdGhpcy5mb2xsb3dzfXdhbGtUZXJtaW5hbChlLHIsbil7fXdhbGtQcm9kUmVmKGUscixuKXtsZXQgaT1GQmUoZS5yZWZlcmVuY2VkUnVsZSxlLmlkeCkrdGhpcy50b3BQcm9kLm5hbWUsYT1yLmNvbmNhdChuKSxzPW5ldyBDbih7ZGVmaW5pdGlvbjphfSksbD1lMChzKTt0aGlzLmZvbGxvd3NbaV09bH19O28oYXNlLCJjb21wdXRlQWxsUHJvZHNGb2xsb3dzIik7byhGQmUsImJ1aWxkQmV0d2VlblByb2RzRm9sbG93UHJlZml4Iil9KTtmdW5jdGlvbiBRbSh0KXtsZXQgZT10LnRvU3RyaW5nKCk7aWYoRlQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIEZUW2VdO3tsZXQgcj16QmUucGF0dGVybihlKTtyZXR1cm4gRlRbZV09cixyfX1mdW5jdGlvbiBvc2UoKXtGVD17fX12YXIgRlQsekJlLHpUPU0oKCk9PnsidXNlIHN0cmljdCI7UXYoKTtGVD17fSx6QmU9bmV3IGpkO28oUW0sImdldFJlZ0V4cEFzdCIpO28ob3NlLCJjbGVhclJlZ0V4cFBhcnNlckNhY2hlIil9KTtmdW5jdGlvbiB1c2UodCxlPSExKXt0cnl7bGV0IHI9UW0odCk7cmV0dXJuIGdSKHIudmFsdWUse30sci5mbGFncy5pZ25vcmVDYXNlKX1jYXRjaChyKXtpZihyLm1lc3NhZ2U9PT1jc2UpZSYmdDIoYCR7aTJ9CVVuYWJsZSB0byBvcHRpbWl6ZTogPCAke3QudG9TdHJpbmcoKX0gPgoJQ29tcGxlbWVudCBTZXRzIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IG9wdGltaXplZC4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0NPTVBMRU1FTlQgZm9yIGRldGFpbHMuYCk7ZWxzZXtsZXQgbj0iIjtlJiYobj1gCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNSRUdFWFBfUEFSU0lORyBmb3IgZGV0YWlscy5gKSxYbShgJHtpMn0KCUZhaWxlZCBwYXJzaW5nOiA8ICR7dC50b1N0cmluZygpfSA+CglVc2luZyB0aGUgQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdCBsaWJyYXJ5CglQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdDogaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXNgK24pfX1yZXR1cm5bXX1mdW5jdGlvbiBnUih0LGUscil7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXNqdW5jdGlvbiI6Zm9yKGxldCBpPTA7aTx0LnZhbHVlLmxlbmd0aDtpKyspZ1IodC52YWx1ZVtpXSxlLHIpO2JyZWFrO2Nhc2UiQWx0ZXJuYXRpdmUiOmxldCBuPXQudmFsdWU7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBhPW5baV07c3dpdGNoKGEudHlwZSl7Y2FzZSJFbmRBbmNob3IiOmNhc2UiR3JvdXBCYWNrUmVmZXJlbmNlIjpjYXNlIkxvb2thaGVhZCI6Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6Y2FzZSJTdGFydEFuY2hvciI6Y2FzZSJXb3JkQm91bmRhcnkiOmNhc2UiTm9uV29yZEJvdW5kYXJ5Ijpjb250aW51ZX1sZXQgcz1hO3N3aXRjaChzLnR5cGUpe2Nhc2UiQ2hhcmFjdGVyIjpHVChzLnZhbHVlLGUscik7YnJlYWs7Y2FzZSJTZXQiOmlmKHMuY29tcGxlbWVudD09PSEwKXRocm93IEVycm9yKGNzZSk7Q2Uocy52YWx1ZSx1PT57aWYodHlwZW9mIHU9PSJudW1iZXIiKUdUKHUsZSxyKTtlbHNle2xldCBoPXU7aWYocj09PSEwKWZvcihsZXQgZj1oLmZyb207Zjw9aC50bztmKyspR1QoZixlLHIpO2Vsc2V7Zm9yKGxldCBmPWguZnJvbTtmPD1oLnRvJiZmPFptO2YrKylHVChmLGUscik7aWYoaC50bz49Wm0pe2xldCBmPWguZnJvbT49Wm0/aC5mcm9tOlptLGQ9aC50byxwPURjKGYpLG09RGMoZCk7Zm9yKGxldCBnPXA7Zzw9bTtnKyspZVtnXT1nfX19fSk7YnJlYWs7Y2FzZSJHcm91cCI6Z1Iocy52YWx1ZSxlLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIk5vbiBFeGhhdXN0aXZlIE1hdGNoIil9bGV0IGw9cy5xdWFudGlmaWVyIT09dm9pZCAwJiZzLnF1YW50aWZpZXIuYXRMZWFzdD09PTA7aWYocy50eXBlPT09Ikdyb3VwIiYmeVIocyk9PT0hMXx8cy50eXBlIT09Ikdyb3VwIiYmbD09PSExKWJyZWFrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoISIpfXJldHVybiBicihlKX1mdW5jdGlvbiBHVCh0LGUscil7bGV0IG49RGModCk7ZVtuXT1uLHI9PT0hMCYmR0JlKHQsZSl9ZnVuY3Rpb24gR0JlKHQsZSl7bGV0IHI9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxuPXIudG9VcHBlckNhc2UoKTtpZihuIT09cil7bGV0IGk9RGMobi5jaGFyQ29kZUF0KDApKTtlW2ldPWl9ZWxzZXtsZXQgaT1yLnRvTG93ZXJDYXNlKCk7aWYoaSE9PXIpe2xldCBhPURjKGkuY2hhckNvZGVBdCgwKSk7ZVthXT1hfX19ZnVuY3Rpb24gbHNlKHQsZSl7cmV0dXJuIFphKHQudmFsdWUscj0+e2lmKHR5cGVvZiByPT0ibnVtYmVyIilyZXR1cm4gSG4oZSxyKTt7bGV0IG49cjtyZXR1cm4gWmEoZSxpPT5uLmZyb208PWkmJmk8PW4udG8pIT09dm9pZCAwfX0pfWZ1bmN0aW9uIHlSKHQpe2xldCBlPXQucXVhbnRpZmllcjtyZXR1cm4gZSYmZS5hdExlYXN0PT09MD8hMDp0LnZhbHVlP010KHQudmFsdWUpP1JhKHQudmFsdWUseVIpOnlSKHQudmFsdWUpOiExfWZ1bmN0aW9uICRUKHQsZSl7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl7bGV0IHI9UW0oZSksbj1uZXcgdlIodCk7cmV0dXJuIG4udmlzaXQociksbi5mb3VuZH1lbHNlIHJldHVybiBaYShlLHI9PkhuKHQsci5jaGFyQ29kZUF0KDApKSkhPT12b2lkIDB9dmFyIGNzZSxpMix2Uixoc2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRdigpO0h0KCk7am0oKTt6VCgpO3hSKCk7Y3NlPSJDb21wbGVtZW50IFNldHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9uIixpMj1gVW5hYmxlIHRvIHVzZSAiZmlyc3QgY2hhciIgbGV4ZXIgb3B0aW1pemF0aW9uczoKYDtvKHVzZSwiZ2V0T3B0aW1pemVkU3RhcnRDb2Rlc0luZGljZXMiKTtvKGdSLCJmaXJzdENoYXJPcHRpbWl6ZWRJbmRpY2VzIik7byhHVCwiYWRkT3B0aW1pemVkSWR4VG9SZXN1bHQiKTtvKEdCZSwiaGFuZGxlSWdub3JlQ2FzZSIpO28obHNlLCJmaW5kQ29kZSIpO28oeVIsImlzV2hvbGVPcHRpb25hbCIpO3ZSPWNsYXNzIGV4dGVuZHMgTGN7c3RhdGlje28odGhpcywiQ2hhckNvZGVGaW5kZXIiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudGFyZ2V0Q2hhckNvZGVzPWUsdGhpcy5mb3VuZD0hMX12aXNpdENoaWxkcmVuKGUpe2lmKHRoaXMuZm91bmQhPT0hMCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJMb29rYWhlYWQiOnRoaXMudmlzaXRMb29rYWhlYWQoZSk7cmV0dXJuO2Nhc2UiTmVnYXRpdmVMb29rYWhlYWQiOnRoaXMudmlzaXROZWdhdGl2ZUxvb2thaGVhZChlKTtyZXR1cm59c3VwZXIudmlzaXRDaGlsZHJlbihlKX19dmlzaXRDaGFyYWN0ZXIoZSl7SG4odGhpcy50YXJnZXRDaGFyQ29kZXMsZS52YWx1ZSkmJih0aGlzLmZvdW5kPSEwKX12aXNpdFNldChlKXtlLmNvbXBsZW1lbnQ/bHNlKGUsdGhpcy50YXJnZXRDaGFyQ29kZXMpPT09dm9pZCAwJiYodGhpcy5mb3VuZD0hMCk6bHNlKGUsdGhpcy50YXJnZXRDaGFyQ29kZXMpIT09dm9pZCAwJiYodGhpcy5mb3VuZD0hMCl9fTtvKCRULCJjYW5NYXRjaENoYXJDb2RlIil9KTtmdW5jdGlvbiBwc2UodCxlKXtlPXFoKGUse3VzZVN0aWNreTp3UixkZWJ1ZzohMSxzYWZlTW9kZTohMSxwb3NpdGlvblRyYWNraW5nOiJmdWxsIixsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6WyJcciIsYApgXSx0cmFjZXI6bygoYix3KT0+dygpLCJ0cmFjZXIiKX0pO2xldCByPWUudHJhY2VyO3IoImluaXRDaGFyQ29kZVRvT3B0aW1pemVkSW5kZXhNYXAiLCgpPT57aUZlKCl9KTtsZXQgbjtyKCJSZWplY3QgTGV4ZXIuTkEiLCgpPT57bj1qaCh0LGI9PmJbdDBdPT09b2kuTkEpfSk7bGV0IGk9ITEsYTtyKCJUcmFuc2Zvcm0gUGF0dGVybnMiLCgpPT57aT0hMSxhPUplKG4sYj0+e2xldCB3PWJbdDBdO2lmKFZvKHcpKXtsZXQgXz13LnNvdXJjZTtyZXR1cm4gXy5sZW5ndGg9PT0xJiZfIT09Il4iJiZfIT09IiQiJiZfIT09Ii4iJiYhdy5pZ25vcmVDYXNlP186Xy5sZW5ndGg9PT0yJiZfWzBdPT09IlxcIiYmIUhuKFsiZCIsIkQiLCJzIiwiUyIsInQiLCJyIiwibiIsInQiLCIwIiwiYyIsImIiLCJCIiwiZiIsInYiLCJ3IiwiVyJdLF9bMV0pP19bMV06ZS51c2VTdGlja3k/ZHNlKHcpOmZzZSh3KX1lbHNle2lmKEVpKHcpKXJldHVybiBpPSEwLHtleGVjOnd9O2lmKHR5cGVvZiB3PT0ib2JqZWN0IilyZXR1cm4gaT0hMCx3O2lmKHR5cGVvZiB3PT0ic3RyaW5nIil7aWYody5sZW5ndGg9PT0xKXJldHVybiB3O3tsZXQgXz13LnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIiksVD1uZXcgUmVnRXhwKF8pO3JldHVybiBlLnVzZVN0aWNreT9kc2UoVCk6ZnNlKFQpfX1lbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX0pfSk7bGV0IHMsbCx1LGgsZjtyKCJtaXNjIG1hcHBpbmciLCgpPT57cz1KZShuLGI9PmIudG9rZW5UeXBlSWR4KSxsPUplKG4sYj0+e2xldCB3PWIuR1JPVVA7aWYodyE9PW9pLlNLSVBQRUQpe2lmKGdpKHcpKXJldHVybiB3O2lmKGRyKHcpKXJldHVybiExO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX0pLHU9SmUobixiPT57bGV0IHc9Yi5MT05HRVJfQUxUO2lmKHcpcmV0dXJuIE10KHcpP0plKHcsVD0+ancobixUKSk6W2p3KG4sdyldfSksaD1KZShuLGI9PmIuUFVTSF9NT0RFKSxmPUplKG4sYj0+SXQoYiwiUE9QX01PREUiKSl9KTtsZXQgZDtyKCJMaW5lIFRlcm1pbmF0b3IgSGFuZGxpbmciLCgpPT57bGV0IGI9VHNlKGUubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKTtkPUplKG4sdz0+ITEpLGUucG9zaXRpb25UcmFja2luZyE9PSJvbmx5T2Zmc2V0IiYmKGQ9SmUobix3PT5JdCh3LCJMSU5FX0JSRUFLUyIpPyEhdy5MSU5FX0JSRUFLUzp3c2UodyxiKT09PSExJiYkVChiLHcuUEFUVEVSTikpKX0pO2xldCBwLG0sZyx5O3IoIk1pc2MgTWFwcGluZyAjMiIsKCk9PntwPUplKG4seHNlKSxtPUplKGEsckZlKSxnPXFyKG4sKGIsdyk9PntsZXQgXz13LkdST1VQO3JldHVybiBnaShfKSYmXyE9PW9pLlNLSVBQRUQmJihiW19dPVtdKSxifSx7fSkseT1KZShhLChiLHcpPT4oe3BhdHRlcm46YVt3XSxsb25nZXJBbHQ6dVt3XSxjYW5MaW5lVGVybWluYXRvcjpkW3ddLGlzQ3VzdG9tOnBbd10sc2hvcnQ6bVt3XSxncm91cDpsW3ddLHB1c2g6aFt3XSxwb3A6Zlt3XSx0b2tlblR5cGVJZHg6c1t3XSx0b2tlblR5cGU6blt3XX0pKX0pO2xldCB2PSEwLHg9W107cmV0dXJuIGUuc2FmZU1vZGV8fHIoIkZpcnN0IENoYXIgT3B0aW1pemF0aW9uIiwoKT0+e3g9cXIobiwoYix3LF8pPT57aWYodHlwZW9mIHcuUEFUVEVSTj09InN0cmluZyIpe2xldCBUPXcuUEFUVEVSTi5jaGFyQ29kZUF0KDApLEU9RGMoVCk7YlIoYixFLHlbX10pfWVsc2UgaWYoTXQody5TVEFSVF9DSEFSU19ISU5UKSl7bGV0IFQ7Q2Uody5TVEFSVF9DSEFSU19ISU5ULEU9PntsZXQgTD10eXBlb2YgRT09InN0cmluZyI/RS5jaGFyQ29kZUF0KDApOkUsQz1EYyhMKTtUIT09QyYmKFQ9QyxiUihiLEMseVtfXSkpfSl9ZWxzZSBpZihWbyh3LlBBVFRFUk4pKWlmKHcuUEFUVEVSTi51bmljb2RlKXY9ITEsZS5lbnN1cmVPcHRpbWl6YXRpb25zJiZYbShgJHtpMn0JVW5hYmxlIHRvIGFuYWx5emUgPCAke3cuUEFUVEVSTi50b1N0cmluZygpfSA+IHBhdHRlcm4uCglUaGUgcmVnZXhwIHVuaWNvZGUgZmxhZyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgcmVnZXhwLXRvLWFzdCBsaWJyYXJ5LgoJVGhpcyB3aWxsIGRpc2FibGUgdGhlIGxleGVyJ3MgZmlyc3QgY2hhciBvcHRpbWl6YXRpb25zLgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjVU5JQ09ERV9PUFRJTUlaRWApO2Vsc2V7bGV0IFQ9dXNlKHcuUEFUVEVSTixlLmVuc3VyZU9wdGltaXphdGlvbnMpO2NyKFQpJiYodj0hMSksQ2UoVCxFPT57YlIoYixFLHlbX10pfSl9ZWxzZSBlLmVuc3VyZU9wdGltaXphdGlvbnMmJlhtKGAke2kyfQlUb2tlblR5cGU6IDwke3cubmFtZX0+IGlzIHVzaW5nIGEgY3VzdG9tIHRva2VuIHBhdHRlcm4gd2l0aG91dCBwcm92aWRpbmcgPHN0YXJ0X2NoYXJzX2hpbnQ+IHBhcmFtZXRlci4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0NVU1RPTV9PUFRJTUlaRWApLHY9ITE7cmV0dXJuIGJ9LFtdKX0pLHtlbXB0eUdyb3VwczpnLHBhdHRlcm5JZHhUb0NvbmZpZzp5LGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWc6eCxoYXNDdXN0b206aSxjYW5CZU9wdGltaXplZDp2fX1mdW5jdGlvbiBtc2UodCxlKXtsZXQgcj1bXSxuPVZCZSh0KTtyPXIuY29uY2F0KG4uZXJyb3JzKTtsZXQgaT1VQmUobi52YWxpZCksYT1pLnZhbGlkO3JldHVybiByPXIuY29uY2F0KGkuZXJyb3JzKSxyPXIuY29uY2F0KCRCZShhKSkscj1yLmNvbmNhdChRQmUoYSkpLHI9ci5jb25jYXQoWkJlKGEsZSkpLHI9ci5jb25jYXQoSkJlKGEpKSxyfWZ1bmN0aW9uICRCZSh0KXtsZXQgZT1bXSxyPVlyKHQsbj0+Vm8oblt0MF0pKTtyZXR1cm4gZT1lLmNvbmNhdChXQmUocikpLGU9ZS5jb25jYXQoWEJlKHIpKSxlPWUuY29uY2F0KGpCZShyKSksZT1lLmNvbmNhdChLQmUocikpLGU9ZS5jb25jYXQoWUJlKHIpKSxlfWZ1bmN0aW9uIFZCZSh0KXtsZXQgZT1Zcih0LGk9PiFJdChpLHQwKSkscj1KZShlLGk9Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK2kubmFtZSsiPC0gbWlzc2luZyBzdGF0aWMgJ1BBVFRFUk4nIHByb3BlcnR5Iix0eXBlOlduLk1JU1NJTkdfUEFUVEVSTix0b2tlblR5cGVzOltpXX0pKSxuPVhoKHQsZSk7cmV0dXJue2Vycm9yczpyLHZhbGlkOm59fWZ1bmN0aW9uIFVCZSh0KXtsZXQgZT1Zcih0LGk9PntsZXQgYT1pW3QwXTtyZXR1cm4hVm8oYSkmJiFFaShhKSYmIUl0KGEsImV4ZWMiKSYmIWdpKGEpfSkscj1KZShlLGk9Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK2kubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBjYW4gb25seSBiZSBhIFJlZ0V4cCwgYSBGdW5jdGlvbiBtYXRjaGluZyB0aGUge0N1c3RvbVBhdHRlcm5NYXRjaGVyRnVuY30gdHlwZSBvciBhbiBPYmplY3QgbWF0Y2hpbmcgdGhlIHtJQ3VzdG9tUGF0dGVybn0gaW50ZXJmYWNlLiIsdHlwZTpXbi5JTlZBTElEX1BBVFRFUk4sdG9rZW5UeXBlczpbaV19KSksbj1YaCh0LGUpO3JldHVybntlcnJvcnM6cix2YWxpZDpufX1mdW5jdGlvbiBXQmUodCl7Y2xhc3MgZSBleHRlbmRzIExje3N0YXRpY3tvKHRoaXMsIkVuZEFuY2hvckZpbmRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmZvdW5kPSExfXZpc2l0RW5kQW5jaG9yKGEpe3RoaXMuZm91bmQ9ITB9fWxldCByPVlyKHQsaT0+e2xldCBhPWkuUEFUVEVSTjt0cnl7bGV0IHM9UW0oYSksbD1uZXcgZTtyZXR1cm4gbC52aXNpdChzKSxsLmZvdW5kfWNhdGNoe3JldHVybiBIQmUudGVzdChhLnNvdXJjZSl9fSk7cmV0dXJuIEplKHIsaT0+KHttZXNzYWdlOmBVbmV4cGVjdGVkIFJlZ0V4cCBBbmNob3IgRXJyb3I6CglUb2tlbiBUeXBlOiAtPmAraS5uYW1lK2A8LSBzdGF0aWMgJ1BBVFRFUk4nIGNhbm5vdCBjb250YWluIGVuZCBvZiBpbnB1dCBhbmNob3IgJyQnCglTZWUgY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNBTkNIT1JTCWZvciBkZXRhaWxzLmAsdHlwZTpXbi5FT0lfQU5DSE9SX0ZPVU5ELHRva2VuVHlwZXM6W2ldfSkpfWZ1bmN0aW9uIFlCZSh0KXtsZXQgZT1Zcih0LG49Pm4uUEFUVEVSTi50ZXN0KCIiKSk7cmV0dXJuIEplKGUsbj0+KHttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrbi5uYW1lKyI8LSBzdGF0aWMgJ1BBVFRFUk4nIG11c3Qgbm90IG1hdGNoIGFuIGVtcHR5IHN0cmluZyIsdHlwZTpXbi5FTVBUWV9NQVRDSF9QQVRURVJOLHRva2VuVHlwZXM6W25dfSkpfWZ1bmN0aW9uIFhCZSh0KXtjbGFzcyBlIGV4dGVuZHMgTGN7c3RhdGlje28odGhpcywiU3RhcnRBbmNob3JGaW5kZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5mb3VuZD0hMX12aXNpdFN0YXJ0QW5jaG9yKGEpe3RoaXMuZm91bmQ9ITB9fWxldCByPVlyKHQsaT0+e2xldCBhPWkuUEFUVEVSTjt0cnl7bGV0IHM9UW0oYSksbD1uZXcgZTtyZXR1cm4gbC52aXNpdChzKSxsLmZvdW5kfWNhdGNoe3JldHVybiBxQmUudGVzdChhLnNvdXJjZSl9fSk7cmV0dXJuIEplKHIsaT0+KHttZXNzYWdlOmBVbmV4cGVjdGVkIFJlZ0V4cCBBbmNob3IgRXJyb3I6CglUb2tlbiBUeXBlOiAtPmAraS5uYW1lK2A8LSBzdGF0aWMgJ1BBVFRFUk4nIGNhbm5vdCBjb250YWluIHN0YXJ0IG9mIGlucHV0IGFuY2hvciAnXicKCVNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQU5DSE9SUwlmb3IgZGV0YWlscy5gLHR5cGU6V24uU09JX0FOQ0hPUl9GT1VORCx0b2tlblR5cGVzOltpXX0pKX1mdW5jdGlvbiBqQmUodCl7bGV0IGU9WXIodCxuPT57bGV0IGk9blt0MF07cmV0dXJuIGkgaW5zdGFuY2VvZiBSZWdFeHAmJihpLm11bHRpbGluZXx8aS5nbG9iYWwpfSk7cmV0dXJuIEplKGUsbj0+KHttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrbi5uYW1lKyI8LSBzdGF0aWMgJ1BBVFRFUk4nIG1heSBOT1QgY29udGFpbiBnbG9iYWwoJ2cnKSBvciBtdWx0aWxpbmUoJ20nKSIsdHlwZTpXbi5VTlNVUFBPUlRFRF9GTEFHU19GT1VORCx0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBLQmUodCl7bGV0IGU9W10scj1KZSh0LGE9PnFyKHQsKHMsbCk9PihhLlBBVFRFUk4uc291cmNlPT09bC5QQVRURVJOLnNvdXJjZSYmIUhuKGUsbCkmJmwuUEFUVEVSTiE9PW9pLk5BJiYoZS5wdXNoKGwpLHMucHVzaChsKSkscyksW10pKTtyPVRjKHIpO2xldCBuPVlyKHIsYT0+YS5sZW5ndGg+MSk7cmV0dXJuIEplKG4sYT0+e2xldCBzPUplKGEsdT0+dS5uYW1lKTtyZXR1cm57bWVzc2FnZTpgVGhlIHNhbWUgUmVnRXhwIHBhdHRlcm4gLT4ke3JhKGEpLlBBVFRFUk59PC1oYXMgYmVlbiB1c2VkIGluIGFsbCBvZiB0aGUgZm9sbG93aW5nIFRva2VuIFR5cGVzOiAke3Muam9pbigiLCAiKX0gPC1gLHR5cGU6V24uRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5ELHRva2VuVHlwZXM6YX19KX1mdW5jdGlvbiBRQmUodCl7bGV0IGU9WXIodCxuPT57aWYoIUl0KG4sIkdST1VQIikpcmV0dXJuITE7bGV0IGk9bi5HUk9VUDtyZXR1cm4gaSE9PW9pLlNLSVBQRUQmJmkhPT1vaS5OQSYmIWdpKGkpfSk7cmV0dXJuIEplKGUsbj0+KHttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrbi5uYW1lKyI8LSBzdGF0aWMgJ0dST1VQJyBjYW4gb25seSBiZSBMZXhlci5TS0lQUEVEL0xleGVyLk5BL0EgU3RyaW5nIix0eXBlOlduLklOVkFMSURfR1JPVVBfVFlQRV9GT1VORCx0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBaQmUodCxlKXtsZXQgcj1Zcih0LGk9PmkuUFVTSF9NT0RFIT09dm9pZCAwJiYhSG4oZSxpLlBVU0hfTU9ERSkpO3JldHVybiBKZShyLGk9Pih7bWVzc2FnZTpgVG9rZW4gVHlwZTogLT4ke2kubmFtZX08LSBzdGF0aWMgJ1BVU0hfTU9ERScgdmFsdWUgY2Fubm90IHJlZmVyIHRvIGEgTGV4ZXIgTW9kZSAtPiR7aS5QVVNIX01PREV9PC13aGljaCBkb2VzIG5vdCBleGlzdGAsdHlwZTpXbi5QVVNIX01PREVfRE9FU19OT1RfRVhJU1QsdG9rZW5UeXBlczpbaV19KSl9ZnVuY3Rpb24gSkJlKHQpe2xldCBlPVtdLHI9cXIodCwobixpLGEpPT57bGV0IHM9aS5QQVRURVJOO3JldHVybiBzPT09b2kuTkF8fChnaShzKT9uLnB1c2goe3N0cjpzLGlkeDphLHRva2VuVHlwZTppfSk6Vm8ocykmJnRGZShzKSYmbi5wdXNoKHtzdHI6cy5zb3VyY2UsaWR4OmEsdG9rZW5UeXBlOml9KSksbn0sW10pO3JldHVybiBDZSh0LChuLGkpPT57Q2Uociwoe3N0cjphLGlkeDpzLHRva2VuVHlwZTpsfSk9PntpZihpPHMmJmVGZShhLG4uUEFUVEVSTikpe2xldCB1PWBUb2tlbjogLT4ke2wubmFtZX08LSBjYW4gbmV2ZXIgYmUgbWF0Y2hlZC4KQmVjYXVzZSBpdCBhcHBlYXJzIEFGVEVSIHRoZSBUb2tlbiBUeXBlIC0+JHtuLm5hbWV9PC1pbiB0aGUgbGV4ZXIncyBkZWZpbml0aW9uLgpTZWUgaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI1VOUkVBQ0hBQkxFYDtlLnB1c2goe21lc3NhZ2U6dSx0eXBlOlduLlVOUkVBQ0hBQkxFX1BBVFRFUk4sdG9rZW5UeXBlczpbbixsXX0pfX0pfSksZX1mdW5jdGlvbiBlRmUodCxlKXtpZihWbyhlKSl7bGV0IHI9ZS5leGVjKHQpO3JldHVybiByIT09bnVsbCYmci5pbmRleD09PTB9ZWxzZXtpZihFaShlKSlyZXR1cm4gZSh0LDAsW10se30pO2lmKEl0KGUsImV4ZWMiKSlyZXR1cm4gZS5leGVjKHQsMCxbXSx7fSk7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlPT09dDt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19ZnVuY3Rpb24gdEZlKHQpe3JldHVybiBaYShbIi4iLCJcXCIsIlsiLCJdIiwifCIsIl4iLCIkIiwiKCIsIikiLCI/IiwiKiIsIisiLCJ7Il0scj0+dC5zb3VyY2UuaW5kZXhPZihyKSE9PS0xKT09PXZvaWQgMH1mdW5jdGlvbiBmc2UodCl7bGV0IGU9dC5pZ25vcmVDYXNlPyJpIjoiIjtyZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7dC5zb3VyY2V9KWAsZSl9ZnVuY3Rpb24gZHNlKHQpe2xldCBlPXQuaWdub3JlQ2FzZT8iaXkiOiJ5IjtyZXR1cm4gbmV3IFJlZ0V4cChgJHt0LnNvdXJjZX1gLGUpfWZ1bmN0aW9uIGdzZSh0LGUscil7bGV0IG49W107cmV0dXJuIEl0KHQsSm0pfHxuLnB1c2goe21lc3NhZ2U6IkEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRob3V0IGEgPCIrSm0rYD4gcHJvcGVydHkgaW4gaXRzIGRlZmluaXRpb24KYCx0eXBlOlduLk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9ERUZBVUxUX01PREV9KSxJdCh0LFZUKXx8bi5wdXNoKHttZXNzYWdlOiJBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhIDwiK1ZUK2A+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uCmAsdHlwZTpXbi5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFl9KSxJdCh0LFZUKSYmSXQodCxKbSkmJiFJdCh0Lm1vZGVzLHQuZGVmYXVsdE1vZGUpJiZuLnB1c2goe21lc3NhZ2U6YEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgJHtKbX06IDwke3QuZGVmYXVsdE1vZGV9PndoaWNoIGRvZXMgbm90IGV4aXN0CmAsdHlwZTpXbi5NVUxUSV9NT0RFX0xFWEVSX0RFRkFVTFRfTU9ERV9WQUxVRV9ET0VTX05PVF9FWElTVH0pLEl0KHQsVlQpJiZDZSh0Lm1vZGVzLChpLGEpPT57Q2UoaSwocyxsKT0+e2lmKGRyKHMpKW4ucHVzaCh7bWVzc2FnZTpgQSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgdXNpbmcgYW4gdW5kZWZpbmVkIFRva2VuIFR5cGUuIE1vZGU6PCR7YX0+IGF0IGluZGV4OiA8JHtsfT4KYCx0eXBlOlduLkxFWEVSX0RFRklOSVRJT05fQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEfSk7ZWxzZSBpZihJdChzLCJMT05HRVJfQUxUIikpe2xldCB1PU10KHMuTE9OR0VSX0FMVCk/cy5MT05HRVJfQUxUOltzLkxPTkdFUl9BTFRdO0NlKHUsaD0+eyFkcihoKSYmIUhuKGksaCkmJm4ucHVzaCh7bWVzc2FnZTpgQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGggYSBsb25nZXJfYWx0IDwke2gubmFtZX0+IG9uIHRva2VuIDwke3MubmFtZX0+IG91dHNpZGUgb2YgbW9kZSA8JHthfT4KYCx0eXBlOlduLk1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFfSl9KX19KX0pLG59ZnVuY3Rpb24geXNlKHQsZSxyKXtsZXQgbj1bXSxpPSExLGE9VGMoV3IoYnIodC5tb2RlcykpKSxzPWpoKGEsdT0+dVt0MF09PT1vaS5OQSksbD1Uc2Uocik7cmV0dXJuIGUmJkNlKHMsdT0+e2xldCBoPXdzZSh1LGwpO2lmKGghPT0hMSl7bGV0IGQ9e21lc3NhZ2U6bkZlKHUsaCksdHlwZTpoLmlzc3VlLHRva2VuVHlwZTp1fTtuLnB1c2goZCl9ZWxzZSBJdCh1LCJMSU5FX0JSRUFLUyIpP3UuTElORV9CUkVBS1M9PT0hMCYmKGk9ITApOiRUKGwsdS5QQVRURVJOKSYmKGk9ITApfSksZSYmIWkmJm4ucHVzaCh7bWVzc2FnZTpgV2FybmluZzogTm8gTElORV9CUkVBS1MgRm91bmQuCglUaGlzIExleGVyIGhhcyBiZWVuIGRlZmluZWQgdG8gdHJhY2sgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uLAoJQnV0IG5vbmUgb2YgdGhlIFRva2VuIFR5cGVzIGNhbiBiZSBpZGVudGlmaWVkIGFzIG1hdGNoaW5nIGEgbGluZSB0ZXJtaW5hdG9yLgoJU2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNMSU5FX0JSRUFLUyAKCWZvciBkZXRhaWxzLmAsdHlwZTpXbi5OT19MSU5FX0JSRUFLU19GTEFHU30pLG59ZnVuY3Rpb24gdnNlKHQpe2xldCBlPXt9LHI9enIodCk7cmV0dXJuIENlKHIsbj0+e2xldCBpPXRbbl07aWYoTXQoaSkpZVtuXT1bXTtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfSksZX1mdW5jdGlvbiB4c2UodCl7bGV0IGU9dC5QQVRURVJOO2lmKFZvKGUpKXJldHVybiExO2lmKEVpKGUpKXJldHVybiEwO2lmKEl0KGUsImV4ZWMiKSlyZXR1cm4hMDtpZihnaShlKSlyZXR1cm4hMTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1mdW5jdGlvbiByRmUodCl7cmV0dXJuIGdpKHQpJiZ0Lmxlbmd0aD09PTE/dC5jaGFyQ29kZUF0KDApOiExfWZ1bmN0aW9uIHdzZSh0LGUpe2lmKEl0KHQsIkxJTkVfQlJFQUtTIikpcmV0dXJuITE7aWYoVm8odC5QQVRURVJOKSl7dHJ5eyRUKGUsdC5QQVRURVJOKX1jYXRjaChyKXtyZXR1cm57aXNzdWU6V24uSURFTlRJRllfVEVSTUlOQVRPUixlcnJNc2c6ci5tZXNzYWdlfX1yZXR1cm4hMX1lbHNle2lmKGdpKHQuUEFUVEVSTikpcmV0dXJuITE7aWYoeHNlKHQpKXJldHVybntpc3N1ZTpXbi5DVVNUT01fTElORV9CUkVBS307dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9fWZ1bmN0aW9uIG5GZSh0LGUpe2lmKGUuaXNzdWU9PT1Xbi5JREVOVElGWV9URVJNSU5BVE9SKXJldHVybmBXYXJuaW5nOiB1bmFibGUgdG8gaWRlbnRpZnkgbGluZSB0ZXJtaW5hdG9yIHVzYWdlIGluIHBhdHRlcm4uCglUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dC5uYW1lfT4gVG9rZW4gVHlwZQoJIFJvb3QgY2F1c2U6ICR7ZS5lcnJNc2d9LgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjSURFTlRJRllfVEVSTUlOQVRPUmA7aWYoZS5pc3N1ZT09PVduLkNVU1RPTV9MSU5FX0JSRUFLKXJldHVybmBXYXJuaW5nOiBBIEN1c3RvbSBUb2tlbiBQYXR0ZXJuIHNob3VsZCBzcGVjaWZ5IHRoZSA8bGluZV9icmVha3M+IG9wdGlvbi4KCVRoZSBwcm9ibGVtIGlzIGluIHRoZSA8JHt0Lm5hbWV9PiBUb2tlbiBUeXBlCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fTElORV9CUkVBS2A7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gVHNlKHQpe3JldHVybiBKZSh0LHI9PmdpKHIpP3IuY2hhckNvZGVBdCgwKTpyKX1mdW5jdGlvbiBiUih0LGUscil7dFtlXT09PXZvaWQgMD90W2VdPVtyXTp0W2VdLnB1c2gocil9ZnVuY3Rpb24gRGModCl7cmV0dXJuIHQ8Wm0/dDpVVFt0XX1mdW5jdGlvbiBpRmUoKXtpZihjcihVVCkpe1VUPW5ldyBBcnJheSg2NTUzNik7Zm9yKGxldCB0PTA7dDw2NTUzNjt0KyspVVRbdF09dD4yNTU/MjU1K35+KHQvMjU1KTp0fX12YXIgdDAsSm0sVlQsd1IsSEJlLHFCZSxic2UsWm0sVVQseFI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRdigpO2EyKCk7SHQoKTtqbSgpO2hzZSgpO3pUKCk7dDA9IlBBVFRFUk4iLEptPSJkZWZhdWx0TW9kZSIsVlQ9Im1vZGVzIix3Uj10eXBlb2YgbmV3IFJlZ0V4cCgiKD86KSIpLnN0aWNreT09ImJvb2xlYW4iO28ocHNlLCJhbmFseXplVG9rZW5UeXBlcyIpO28obXNlLCJ2YWxpZGF0ZVBhdHRlcm5zIik7bygkQmUsInZhbGlkYXRlUmVnRXhwUGF0dGVybiIpO28oVkJlLCJmaW5kTWlzc2luZ1BhdHRlcm5zIik7byhVQmUsImZpbmRJbnZhbGlkUGF0dGVybnMiKTtIQmU9L1teXFxdWyRdLztvKFdCZSwiZmluZEVuZE9mSW5wdXRBbmNob3IiKTtvKFlCZSwiZmluZEVtcHR5TWF0Y2hSZWdFeHBzIik7cUJlPS9bXlxcW11bXF5dfF5cXi87byhYQmUsImZpbmRTdGFydE9mSW5wdXRBbmNob3IiKTtvKGpCZSwiZmluZFVuc3VwcG9ydGVkRmxhZ3MiKTtvKEtCZSwiZmluZER1cGxpY2F0ZVBhdHRlcm5zIik7byhRQmUsImZpbmRJbnZhbGlkR3JvdXBUeXBlIik7byhaQmUsImZpbmRNb2Rlc1RoYXREb05vdEV4aXN0Iik7byhKQmUsImZpbmRVbnJlYWNoYWJsZVBhdHRlcm5zIik7byhlRmUsInRlc3RUb2tlblR5cGUiKTtvKHRGZSwibm9NZXRhQ2hhciIpO28oZnNlLCJhZGRTdGFydE9mSW5wdXQiKTtvKGRzZSwiYWRkU3RpY2t5RmxhZyIpO28oZ3NlLCJwZXJmb3JtUnVudGltZUNoZWNrcyIpO28oeXNlLCJwZXJmb3JtV2FybmluZ1J1bnRpbWVDaGVja3MiKTtvKHZzZSwiY2xvbmVFbXB0eUdyb3VwcyIpO28oeHNlLCJpc0N1c3RvbVBhdHRlcm4iKTtvKHJGZSwiaXNTaG9ydFBhdHRlcm4iKTtic2U9e3Rlc3Q6byhmdW5jdGlvbih0KXtsZXQgZT10Lmxlbmd0aDtmb3IobGV0IHI9dGhpcy5sYXN0SW5kZXg7cjxlO3IrKyl7bGV0IG49dC5jaGFyQ29kZUF0KHIpO2lmKG49PT0xMClyZXR1cm4gdGhpcy5sYXN0SW5kZXg9cisxLCEwO2lmKG49PT0xMylyZXR1cm4gdC5jaGFyQ29kZUF0KHIrMSk9PT0xMD90aGlzLmxhc3RJbmRleD1yKzI6dGhpcy5sYXN0SW5kZXg9cisxLCEwfXJldHVybiExfSwidGVzdCIpLGxhc3RJbmRleDowfTtvKHdzZSwiY2hlY2tMaW5lQnJlYWtzSXNzdWVzIik7byhuRmUsImJ1aWxkTGluZUJyZWFrSXNzdWVNZXNzYWdlIik7byhUc2UsImdldENoYXJDb2RlcyIpO28oYlIsImFkZFRvTWFwT2ZBcnJheXMiKTtabT0yNTYsVVQ9W107byhEYywiY2hhckNvZGVUb09wdGltaXplZEluZGV4Iik7byhpRmUsImluaXRDaGFyQ29kZVRvT3B0aW1pemVkSW5kZXhNYXAiKX0pO2Z1bmN0aW9uIE91KHQsZSl7bGV0IHI9dC50b2tlblR5cGVJZHg7cmV0dXJuIHI9PT1lLnRva2VuVHlwZUlkeD8hMDplLmlzUGFyZW50PT09ITAmJmUuY2F0ZWdvcnlNYXRjaGVzTWFwW3JdPT09ITB9ZnVuY3Rpb24gZWcodCxlKXtyZXR1cm4gdC50b2tlblR5cGVJZHg9PT1lLnRva2VuVHlwZUlkeH1mdW5jdGlvbiBQdSh0KXtsZXQgZT1hRmUodCk7c0ZlKGUpLGxGZShlKSxvRmUoZSksQ2UoZSxyPT57ci5pc1BhcmVudD1yLmNhdGVnb3J5TWF0Y2hlcy5sZW5ndGg+MH0pfWZ1bmN0aW9uIGFGZSh0KXtsZXQgZT1ybih0KSxyPXQsbj0hMDtmb3IoO247KXtyPVRjKFdyKEplKHIsYT0+YS5DQVRFR09SSUVTKSkpO2xldCBpPVhoKHIsZSk7ZT1lLmNvbmNhdChpKSxjcihpKT9uPSExOnI9aX1yZXR1cm4gZX1mdW5jdGlvbiBzRmUodCl7Q2UodCxlPT57VFIoZSl8fChTc2Vba3NlXT1lLGUudG9rZW5UeXBlSWR4PWtzZSsrKSxFc2UoZSkmJiFNdChlLkNBVEVHT1JJRVMpJiYoZS5DQVRFR09SSUVTPVtlLkNBVEVHT1JJRVNdKSxFc2UoZSl8fChlLkNBVEVHT1JJRVM9W10pLGNGZShlKXx8KGUuY2F0ZWdvcnlNYXRjaGVzPVtdKSx1RmUoZSl8fChlLmNhdGVnb3J5TWF0Y2hlc01hcD17fSl9KX1mdW5jdGlvbiBvRmUodCl7Q2UodCxlPT57ZS5jYXRlZ29yeU1hdGNoZXM9W10sQ2UoZS5jYXRlZ29yeU1hdGNoZXNNYXAsKHIsbik9PntlLmNhdGVnb3J5TWF0Y2hlcy5wdXNoKFNzZVtuXS50b2tlblR5cGVJZHgpfSl9KX1mdW5jdGlvbiBsRmUodCl7Q2UodCxlPT57Q3NlKFtdLGUpfSl9ZnVuY3Rpb24gQ3NlKHQsZSl7Q2UodCxyPT57ZS5jYXRlZ29yeU1hdGNoZXNNYXBbci50b2tlblR5cGVJZHhdPSEwfSksQ2UoZS5DQVRFR09SSUVTLHI9PntsZXQgbj10LmNvbmNhdChlKTtIbihuLHIpfHxDc2UobixyKX0pfWZ1bmN0aW9uIFRSKHQpe3JldHVybiBJdCh0LCJ0b2tlblR5cGVJZHgiKX1mdW5jdGlvbiBFc2UodCl7cmV0dXJuIEl0KHQsIkNBVEVHT1JJRVMiKX1mdW5jdGlvbiBjRmUodCl7cmV0dXJuIEl0KHQsImNhdGVnb3J5TWF0Y2hlcyIpfWZ1bmN0aW9uIHVGZSh0KXtyZXR1cm4gSXQodCwiY2F0ZWdvcnlNYXRjaGVzTWFwIil9ZnVuY3Rpb24gQXNlKHQpe3JldHVybiBJdCh0LCJ0b2tlblR5cGVJZHgiKX12YXIga3NlLFNzZSxyMD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhPdSwidG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlciIpO28oZWcsInRva2VuU3RydWN0dXJlZE1hdGNoZXJOb0NhdGVnb3JpZXMiKTtrc2U9MSxTc2U9e307byhQdSwiYXVnbWVudFRva2VuVHlwZXMiKTtvKGFGZSwiZXhwYW5kQ2F0ZWdvcmllcyIpO28oc0ZlLCJhc3NpZ25Ub2tlbkRlZmF1bHRQcm9wcyIpO28ob0ZlLCJhc3NpZ25DYXRlZ29yaWVzVG9rZW5zUHJvcCIpO28obEZlLCJhc3NpZ25DYXRlZ29yaWVzTWFwUHJvcCIpO28oQ3NlLCJzaW5nbGVBc3NpZ25DYXRlZ29yaWVzVG9rc01hcCIpO28oVFIsImhhc1Nob3J0S2V5UHJvcGVydHkiKTtvKEVzZSwiaGFzQ2F0ZWdvcmllc1Byb3BlcnR5Iik7byhjRmUsImhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzUHJvcGVydHkiKTtvKHVGZSwiaGFzRXh0ZW5kaW5nVG9rZW5zVHlwZXNNYXBQcm9wZXJ0eSIpO28oQXNlLCJpc1Rva2VuVHlwZSIpfSk7dmFyIGtSLEVSPU0oKCk9PnsidXNlIHN0cmljdCI7a1I9e2J1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKHQpe3JldHVybmBVbmFibGUgdG8gcG9wIExleGVyIE1vZGUgYWZ0ZXIgZW5jb3VudGVyaW5nIFRva2VuIC0+JHt0LmltYWdlfTwtIFRoZSBNb2RlIFN0YWNrIGlzIGVtcHR5YH0sYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UodCxlLHIsbixpKXtyZXR1cm5gdW5leHBlY3RlZCBjaGFyYWN0ZXI6IC0+JHt0LmNoYXJBdChlKX08LSBhdCBvZmZzZXQ6ICR7ZX0sIHNraXBwZWQgJHtyfSBjaGFyYWN0ZXJzLmB9fX0pO3ZhciBXbixzMixvaSxhMj1NKCgpPT57InVzZSBzdHJpY3QiO3hSKCk7SHQoKTtqbSgpO3IwKCk7RVIoKTt6VCgpOyhmdW5jdGlvbih0KXt0W3QuTUlTU0lOR19QQVRURVJOPTBdPSJNSVNTSU5HX1BBVFRFUk4iLHRbdC5JTlZBTElEX1BBVFRFUk49MV09IklOVkFMSURfUEFUVEVSTiIsdFt0LkVPSV9BTkNIT1JfRk9VTkQ9Ml09IkVPSV9BTkNIT1JfRk9VTkQiLHRbdC5VTlNVUFBPUlRFRF9GTEFHU19GT1VORD0zXT0iVU5TVVBQT1JURURfRkxBR1NfRk9VTkQiLHRbdC5EVVBMSUNBVEVfUEFUVEVSTlNfRk9VTkQ9NF09IkRVUExJQ0FURV9QQVRURVJOU19GT1VORCIsdFt0LklOVkFMSURfR1JPVVBfVFlQRV9GT1VORD01XT0iSU5WQUxJRF9HUk9VUF9UWVBFX0ZPVU5EIix0W3QuUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNUPTZdPSJQVVNIX01PREVfRE9FU19OT1RfRVhJU1QiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFPTddPSJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFIix0W3QuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZPThdPSJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFkiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX0RFRkFVTFRfTU9ERV9WQUxVRV9ET0VTX05PVF9FWElTVD05XT0iTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1QiLHRbdC5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRD0xMF09IkxFWEVSX0RFRklOSVRJT05fQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEIix0W3QuU09JX0FOQ0hPUl9GT1VORD0xMV09IlNPSV9BTkNIT1JfRk9VTkQiLHRbdC5FTVBUWV9NQVRDSF9QQVRURVJOPTEyXT0iRU1QVFlfTUFUQ0hfUEFUVEVSTiIsdFt0Lk5PX0xJTkVfQlJFQUtTX0ZMQUdTPTEzXT0iTk9fTElORV9CUkVBS1NfRkxBR1MiLHRbdC5VTlJFQUNIQUJMRV9QQVRURVJOPTE0XT0iVU5SRUFDSEFCTEVfUEFUVEVSTiIsdFt0LklERU5USUZZX1RFUk1JTkFUT1I9MTVdPSJJREVOVElGWV9URVJNSU5BVE9SIix0W3QuQ1VTVE9NX0xJTkVfQlJFQUs9MTZdPSJDVVNUT01fTElORV9CUkVBSyIsdFt0Lk1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFPTE3XT0iTVVMVElfTU9ERV9MRVhFUl9MT05HRVJfQUxUX05PVF9JTl9DVVJSRU5UX01PREUifSkoV258fChXbj17fSkpO3MyPXtkZWZlckRlZmluaXRpb25FcnJvcnNIYW5kbGluZzohMSxwb3NpdGlvblRyYWNraW5nOiJmdWxsIixsaW5lVGVybWluYXRvcnNQYXR0ZXJuOi9cbnxcclxuPy9nLGxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVyczpbYApgLCJcciJdLGVuc3VyZU9wdGltaXphdGlvbnM6ITEsc2FmZU1vZGU6ITEsZXJyb3JNZXNzYWdlUHJvdmlkZXI6a1IsdHJhY2VJbml0UGVyZjohMSxza2lwVmFsaWRhdGlvbnM6ITEscmVjb3ZlcnlFbmFibGVkOiEwfTtPYmplY3QuZnJlZXplKHMyKTtvaT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMZXhlciIpfWNvbnN0cnVjdG9yKGUscj1zMil7aWYodGhpcy5sZXhlckRlZmluaXRpb249ZSx0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycz1bXSx0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmc9W10sdGhpcy5wYXR0ZXJuSWR4VG9Db25maWc9e30sdGhpcy5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnPXt9LHRoaXMubW9kZXM9W10sdGhpcy5lbXB0eUdyb3Vwcz17fSx0aGlzLnRyYWNrU3RhcnRMaW5lcz0hMCx0aGlzLnRyYWNrRW5kTGluZXM9ITAsdGhpcy5oYXNDdXN0b209ITEsdGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWQ9e30sdGhpcy5UUkFDRV9JTklUPShpLGEpPT57aWYodGhpcy50cmFjZUluaXRQZXJmPT09ITApe3RoaXMudHJhY2VJbml0SW5kZW50Kys7bGV0IHM9bmV3IEFycmF5KHRoaXMudHJhY2VJbml0SW5kZW50KzEpLmpvaW4oIgkiKTt0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZjb25zb2xlLmxvZyhgJHtzfS0tPiA8JHtpfT5gKTtsZXR7dGltZTpsLHZhbHVlOnV9PXIyKGEpLGg9bD4xMD9jb25zb2xlLndhcm46Y29uc29sZS5sb2c7cmV0dXJuIHRoaXMudHJhY2VJbml0SW5kZW50PHRoaXMudHJhY2VJbml0TWF4SWRlbnQmJmgoYCR7c308LS0gPCR7aX0+IHRpbWU6ICR7bH1tc2ApLHRoaXMudHJhY2VJbml0SW5kZW50LS0sdX1lbHNlIHJldHVybiBhKCl9LHR5cGVvZiByPT0iYm9vbGVhbiIpdGhyb3cgRXJyb3IoYFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIExleGVyIGNvbnN0cnVjdG9yIGlzIG5vdyBhbiBJTGV4ZXJDb25maWcgT2JqZWN0LgphIGJvb2xlYW4gMm5kIGFyZ3VtZW50IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRgKTt0aGlzLmNvbmZpZz1oYSh7fSxzMixyKTtsZXQgbj10aGlzLmNvbmZpZy50cmFjZUluaXRQZXJmO249PT0hMD8odGhpcy50cmFjZUluaXRNYXhJZGVudD0xLzAsdGhpcy50cmFjZUluaXRQZXJmPSEwKTp0eXBlb2Ygbj09Im51bWJlciImJih0aGlzLnRyYWNlSW5pdE1heElkZW50PW4sdGhpcy50cmFjZUluaXRQZXJmPSEwKSx0aGlzLnRyYWNlSW5pdEluZGVudD0tMSx0aGlzLlRSQUNFX0lOSVQoIkxleGVyIENvbnN0cnVjdG9yIiwoKT0+e2xldCBpLGE9ITA7dGhpcy5UUkFDRV9JTklUKCJMZXhlciBDb25maWcgaGFuZGxpbmciLCgpPT57aWYodGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JzUGF0dGVybj09PXMyLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4pdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JzUGF0dGVybj1ic2U7ZWxzZSBpZih0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnM9PT1zMi5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpdGhyb3cgRXJyb3IoYEVycm9yOiBNaXNzaW5nIDxsaW5lVGVybWluYXRvckNoYXJhY3RlcnM+IHByb3BlcnR5IG9uIHRoZSBMZXhlciBjb25maWcuCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNNSVNTSU5HX0xJTkVfVEVSTV9DSEFSU2ApO2lmKHIuc2FmZU1vZGUmJnIuZW5zdXJlT3B0aW1pemF0aW9ucyl0aHJvdyBFcnJvcignInNhZmVNb2RlIiBhbmQgImVuc3VyZU9wdGltaXphdGlvbnMiIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuJyk7dGhpcy50cmFja1N0YXJ0TGluZXM9L2Z1bGx8b25seVN0YXJ0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSx0aGlzLnRyYWNrRW5kTGluZXM9L2Z1bGwvaS50ZXN0KHRoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpLE10KGUpP2k9e21vZGVzOntkZWZhdWx0TW9kZTpybihlKX0sZGVmYXVsdE1vZGU6Sm19OihhPSExLGk9cm4oZSkpfSksdGhpcy5jb25maWcuc2tpcFZhbGlkYXRpb25zPT09ITEmJih0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1SdW50aW1lQ2hlY2tzIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzPXRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdChnc2UoaSx0aGlzLnRyYWNrU3RhcnRMaW5lcyx0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKX0pLHRoaXMuVFJBQ0VfSU5JVCgicGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZz10aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmcuY29uY2F0KHlzZShpLHRoaXMudHJhY2tTdGFydExpbmVzLHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycykpfSkpLGkubW9kZXM9aS5tb2Rlcz9pLm1vZGVzOnt9LENlKGkubW9kZXMsKGwsdSk9PntpLm1vZGVzW3VdPWpoKGwsaD0+ZHIoaCkpfSk7bGV0IHM9enIoaS5tb2Rlcyk7aWYoQ2UoaS5tb2RlcywobCx1KT0+e3RoaXMuVFJBQ0VfSU5JVChgTW9kZTogPCR7dX0+IHByb2Nlc3NpbmdgLCgpPT57aWYodGhpcy5tb2Rlcy5wdXNoKHUpLHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucz09PSExJiZ0aGlzLlRSQUNFX0lOSVQoInZhbGlkYXRlUGF0dGVybnMiLCgpPT57dGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnM9dGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMuY29uY2F0KG1zZShsLHMpKX0pLGNyKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzKSl7UHUobCk7bGV0IGg7dGhpcy5UUkFDRV9JTklUKCJhbmFseXplVG9rZW5UeXBlcyIsKCk9PntoPXBzZShsLHtsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6dGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzLHBvc2l0aW9uVHJhY2tpbmc6ci5wb3NpdGlvblRyYWNraW5nLGVuc3VyZU9wdGltaXphdGlvbnM6ci5lbnN1cmVPcHRpbWl6YXRpb25zLHNhZmVNb2RlOnIuc2FmZU1vZGUsdHJhY2VyOnRoaXMuVFJBQ0VfSU5JVH0pfSksdGhpcy5wYXR0ZXJuSWR4VG9Db25maWdbdV09aC5wYXR0ZXJuSWR4VG9Db25maWcsdGhpcy5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnW3VdPWguY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZyx0aGlzLmVtcHR5R3JvdXBzPWhhKHt9LHRoaXMuZW1wdHlHcm91cHMsaC5lbXB0eUdyb3VwcyksdGhpcy5oYXNDdXN0b209aC5oYXNDdXN0b218fHRoaXMuaGFzQ3VzdG9tLHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkW3VdPWguY2FuQmVPcHRpbWl6ZWR9fSl9KSx0aGlzLmRlZmF1bHRNb2RlPWkuZGVmYXVsdE1vZGUsIWNyKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzKSYmIXRoaXMuY29uZmlnLmRlZmVyRGVmaW5pdGlvbkVycm9yc0hhbmRsaW5nKXtsZXQgdT1KZSh0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycyxoPT5oLm1lc3NhZ2UpLmpvaW4oYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmApO3Rocm93IG5ldyBFcnJvcihgRXJyb3JzIGRldGVjdGVkIGluIGRlZmluaXRpb24gb2YgTGV4ZXI6CmArdSl9Q2UodGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLGw9Pnt0MihsLm1lc3NhZ2UpfSksdGhpcy5UUkFDRV9JTklUKCJDaG9vc2luZyBzdWItbWV0aG9kcyBpbXBsZW1lbnRhdGlvbnMiLCgpPT57aWYod1I/KHRoaXMuY2hvcElucHV0PXRhLHRoaXMubWF0Y2g9dGhpcy5tYXRjaFdpdGhUZXN0KToodGhpcy51cGRhdGVMYXN0SW5kZXg9Sm4sdGhpcy5tYXRjaD10aGlzLm1hdGNoV2l0aEV4ZWMpLGEmJih0aGlzLmhhbmRsZU1vZGVzPUpuKSx0aGlzLnRyYWNrU3RhcnRMaW5lcz09PSExJiYodGhpcy5jb21wdXRlTmV3Q29sdW1uPXRhKSx0aGlzLnRyYWNrRW5kTGluZXM9PT0hMSYmKHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb249Sm4pLC9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSl0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2U9dGhpcy5jcmVhdGVGdWxsVG9rZW47ZWxzZSBpZigvb25seVN0YXJ0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSl0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2U9dGhpcy5jcmVhdGVTdGFydE9ubHlUb2tlbjtlbHNlIGlmKC9vbmx5T2Zmc2V0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSl0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2U9dGhpcy5jcmVhdGVPZmZzZXRPbmx5VG9rZW47ZWxzZSB0aHJvdyBFcnJvcihgSW52YWxpZCA8cG9zaXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIiR7dGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZ30iYCk7dGhpcy5oYXNDdXN0b20/KHRoaXMuYWRkVG9rZW49dGhpcy5hZGRUb2tlblVzaW5nUHVzaCx0aGlzLmhhbmRsZVBheWxvYWQ9dGhpcy5oYW5kbGVQYXlsb2FkV2l0aEN1c3RvbSk6KHRoaXMuYWRkVG9rZW49dGhpcy5hZGRUb2tlblVzaW5nTWVtYmVyQWNjZXNzLHRoaXMuaGFuZGxlUGF5bG9hZD10aGlzLmhhbmRsZVBheWxvYWROb0N1c3RvbSl9KSx0aGlzLlRSQUNFX0lOSVQoIkZhaWxlZCBPcHRpbWl6YXRpb24gV2FybmluZ3MiLCgpPT57bGV0IGw9cXIodGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWQsKHUsaCxmKT0+KGg9PT0hMSYmdS5wdXNoKGYpLHUpLFtdKTtpZihyLmVuc3VyZU9wdGltaXphdGlvbnMmJiFjcihsKSl0aHJvdyBFcnJvcihgTGV4ZXIgTW9kZXM6IDwgJHtsLmpvaW4oIiwgIil9ID4gY2Fubm90IGJlIG9wdGltaXplZC4KCSBEaXNhYmxlIHRoZSAiZW5zdXJlT3B0aW1pemF0aW9ucyIgbGV4ZXIgY29uZmlnIGZsYWcgdG8gc2lsZW50bHkgaWdub3JlIHRoaXMgYW5kIHJ1biB0aGUgbGV4ZXIgaW4gYW4gdW4tb3B0aW1pemVkIG1vZGUuCgkgT3IgaW5zcGVjdCB0aGUgY29uc29sZSBsb2cgZm9yIGRldGFpbHMgb24gaG93IHRvIHJlc29sdmUgdGhlc2UgaXNzdWVzLmApfSksdGhpcy5UUkFDRV9JTklUKCJjbGVhclJlZ0V4cFBhcnNlckNhY2hlIiwoKT0+e29zZSgpfSksdGhpcy5UUkFDRV9JTklUKCJ0b0Zhc3RQcm9wZXJ0aWVzIiwoKT0+e24yKHRoaXMpfSl9KX10b2tlbml6ZShlLHI9dGhpcy5kZWZhdWx0TW9kZSl7aWYoIWNyKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzKSl7bGV0IGk9SmUodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsYT0+YS5tZXNzYWdlKS5qb2luKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgKTt0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBUb2tlbml6ZSBiZWNhdXNlIEVycm9ycyBkZXRlY3RlZCBpbiBkZWZpbml0aW9uIG9mIExleGVyOgpgK2kpfXJldHVybiB0aGlzLnRva2VuaXplSW50ZXJuYWwoZSxyKX10b2tlbml6ZUludGVybmFsKGUscil7bGV0IG4saSxhLHMsbCx1LGgsZixkLHAsbSxnLHksdix4LGIsdz1lLF89dy5sZW5ndGgsVD0wLEU9MCxMPXRoaXMuaGFzQ3VzdG9tPzA6TWF0aC5mbG9vcihlLmxlbmd0aC8xMCksQz1uZXcgQXJyYXkoTCksQT1bXSxJPXRoaXMudHJhY2tTdGFydExpbmVzPzE6dm9pZCAwLEQ9dGhpcy50cmFja1N0YXJ0TGluZXM/MTp2b2lkIDAsaz12c2UodGhpcy5lbXB0eUdyb3VwcyksUj10aGlzLnRyYWNrU3RhcnRMaW5lcyxTPXRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4sTz0wLE49W10sUD1bXSxGPVtdLEI9W107T2JqZWN0LmZyZWV6ZShCKTtsZXQgJDtmdW5jdGlvbiB6KCl7cmV0dXJuIE59byh6LCJnZXRQb3NzaWJsZVBhdHRlcm5zU2xvdyIpO2Z1bmN0aW9uIFcoZWUpe2xldCBKPURjKGVlKSxIPVBbSl07cmV0dXJuIEg9PT12b2lkIDA/QjpIfW8oVywiZ2V0UG9zc2libGVQYXR0ZXJuc09wdGltaXplZCIpO2xldCBqPW8oZWU9PntpZihGLmxlbmd0aD09PTEmJmVlLnRva2VuVHlwZS5QVVNIX01PREU9PT12b2lkIDApe2xldCBKPXRoaXMuY29uZmlnLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKGVlKTtBLnB1c2goe29mZnNldDplZS5zdGFydE9mZnNldCxsaW5lOmVlLnN0YXJ0TGluZSxjb2x1bW46ZWUuc3RhcnRDb2x1bW4sbGVuZ3RoOmVlLmltYWdlLmxlbmd0aCxtZXNzYWdlOkp9KX1lbHNle0YucG9wKCk7bGV0IEo9ZmEoRik7Tj10aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tKXSxQPXRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tKXSxPPU4ubGVuZ3RoO2xldCBIPXRoaXMuY2FuTW9kZUJlT3B0aW1pemVkW0pdJiZ0aGlzLmNvbmZpZy5zYWZlTW9kZT09PSExO1AmJkg/JD1XOiQ9en19LCJwb3BfbW9kZSIpO2Z1bmN0aW9uIEsoZWUpe0YucHVzaChlZSksUD10aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWdbZWVdLE49dGhpcy5wYXR0ZXJuSWR4VG9Db25maWdbZWVdLE89Ti5sZW5ndGgsTz1OLmxlbmd0aDtsZXQgSj10aGlzLmNhbk1vZGVCZU9wdGltaXplZFtlZV0mJnRoaXMuY29uZmlnLnNhZmVNb2RlPT09ITE7UCYmSj8kPVc6JD16fW8oSywicHVzaF9tb2RlIiksSy5jYWxsKHRoaXMscik7bGV0IGllLFE9dGhpcy5jb25maWcucmVjb3ZlcnlFbmFibGVkO2Zvcig7VDxfOyl7dT1udWxsO2xldCBlZT13LmNoYXJDb2RlQXQoVCksSj0kKGVlKSxIPUoubGVuZ3RoO2ZvcihuPTA7bjxIO24rKyl7aWU9SltuXTtsZXQgcT1pZS5wYXR0ZXJuO2g9bnVsbDtsZXQgWj1pZS5zaG9ydDtpZihaIT09ITE/ZWU9PT1aJiYodT1xKTppZS5pc0N1c3RvbT09PSEwPyhiPXEuZXhlYyh3LFQsQyxrKSxiIT09bnVsbD8odT1iWzBdLGIucGF5bG9hZCE9PXZvaWQgMCYmKGg9Yi5wYXlsb2FkKSk6dT1udWxsKToodGhpcy51cGRhdGVMYXN0SW5kZXgocSxUKSx1PXRoaXMubWF0Y2gocSxlLFQpKSx1IT09bnVsbCl7aWYobD1pZS5sb25nZXJBbHQsbCE9PXZvaWQgMCl7bGV0IGFlPWwubGVuZ3RoO2ZvcihhPTA7YTxhZTthKyspe2xldCB1ZT1OW2xbYV1dLGNlPXVlLnBhdHRlcm47aWYoZj1udWxsLHVlLmlzQ3VzdG9tPT09ITA/KGI9Y2UuZXhlYyh3LFQsQyxrKSxiIT09bnVsbD8ocz1iWzBdLGIucGF5bG9hZCE9PXZvaWQgMCYmKGY9Yi5wYXlsb2FkKSk6cz1udWxsKToodGhpcy51cGRhdGVMYXN0SW5kZXgoY2UsVCkscz10aGlzLm1hdGNoKGNlLGUsVCkpLHMmJnMubGVuZ3RoPnUubGVuZ3RoKXt1PXMsaD1mLGllPXVlO2JyZWFrfX19YnJlYWt9fWlmKHUhPT1udWxsKXtpZihkPXUubGVuZ3RoLHA9aWUuZ3JvdXAscCE9PXZvaWQgMCYmKG09aWUudG9rZW5UeXBlSWR4LGc9dGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlKHUsVCxtLGllLnRva2VuVHlwZSxJLEQsZCksdGhpcy5oYW5kbGVQYXlsb2FkKGcsaCkscD09PSExP0U9dGhpcy5hZGRUb2tlbihDLEUsZyk6a1twXS5wdXNoKGcpKSxlPXRoaXMuY2hvcElucHV0KGUsZCksVD1UK2QsRD10aGlzLmNvbXB1dGVOZXdDb2x1bW4oRCxkKSxSPT09ITAmJmllLmNhbkxpbmVUZXJtaW5hdG9yPT09ITApe2xldCBxPTAsWixhZTtTLmxhc3RJbmRleD0wO2RvIFo9Uy50ZXN0KHUpLFo9PT0hMCYmKGFlPVMubGFzdEluZGV4LTEscSsrKTt3aGlsZShaPT09ITApO3EhPT0wJiYoST1JK3EsRD1kLWFlLHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24oZyxwLGFlLHEsSSxELGQpKX10aGlzLmhhbmRsZU1vZGVzKGllLGosSyxnKX1lbHNle2xldCBxPVQsWj1JLGFlPUQsdWU9UT09PSExO2Zvcig7dWU9PT0hMSYmVDxfOylmb3IoZT10aGlzLmNob3BJbnB1dChlLDEpLFQrKyxpPTA7aTxPO2krKyl7bGV0IGNlPU5baV0sdGU9Y2UucGF0dGVybixEZT1jZS5zaG9ydDtpZihEZSE9PSExP3cuY2hhckNvZGVBdChUKT09PURlJiYodWU9ITApOmNlLmlzQ3VzdG9tPT09ITA/dWU9dGUuZXhlYyh3LFQsQyxrKSE9PW51bGw6KHRoaXMudXBkYXRlTGFzdEluZGV4KHRlLFQpLHVlPXRlLmV4ZWMoZSkhPT1udWxsKSx1ZT09PSEwKWJyZWFrfWlmKHk9VC1xLEQ9dGhpcy5jb21wdXRlTmV3Q29sdW1uKEQseSkseD10aGlzLmNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJzTWVzc2FnZSh3LHEseSxaLGFlKSxBLnB1c2goe29mZnNldDpxLGxpbmU6Wixjb2x1bW46YWUsbGVuZ3RoOnksbWVzc2FnZTp4fSksUT09PSExKWJyZWFrfX1yZXR1cm4gdGhpcy5oYXNDdXN0b218fChDLmxlbmd0aD1FKSx7dG9rZW5zOkMsZ3JvdXBzOmssZXJyb3JzOkF9fWhhbmRsZU1vZGVzKGUscixuLGkpe2lmKGUucG9wPT09ITApe2xldCBhPWUucHVzaDtyKGkpLGEhPT12b2lkIDAmJm4uY2FsbCh0aGlzLGEpfWVsc2UgZS5wdXNoIT09dm9pZCAwJiZuLmNhbGwodGhpcyxlLnB1c2gpfWNob3BJbnB1dChlLHIpe3JldHVybiBlLnN1YnN0cmluZyhyKX11cGRhdGVMYXN0SW5kZXgoZSxyKXtlLmxhc3RJbmRleD1yfXVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uKGUscixuLGksYSxzLGwpe2xldCB1LGg7ciE9PXZvaWQgMCYmKHU9bj09PWwtMSxoPXU/LTE6MCxpPT09MSYmdT09PSEwfHwoZS5lbmRMaW5lPWEraCxlLmVuZENvbHVtbj1zLTErLWgpKX1jb21wdXRlTmV3Q29sdW1uKGUscil7cmV0dXJuIGUrcn1jcmVhdGVPZmZzZXRPbmx5VG9rZW4oZSxyLG4saSl7cmV0dXJue2ltYWdlOmUsc3RhcnRPZmZzZXQ6cix0b2tlblR5cGVJZHg6bix0b2tlblR5cGU6aX19Y3JlYXRlU3RhcnRPbmx5VG9rZW4oZSxyLG4saSxhLHMpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsc3RhcnRMaW5lOmEsc3RhcnRDb2x1bW46cyx0b2tlblR5cGVJZHg6bix0b2tlblR5cGU6aX19Y3JlYXRlRnVsbFRva2VuKGUscixuLGksYSxzLGwpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsZW5kT2Zmc2V0OnIrbC0xLHN0YXJ0TGluZTphLGVuZExpbmU6YSxzdGFydENvbHVtbjpzLGVuZENvbHVtbjpzK2wtMSx0b2tlblR5cGVJZHg6bix0b2tlblR5cGU6aX19YWRkVG9rZW5Vc2luZ1B1c2goZSxyLG4pe3JldHVybiBlLnB1c2gobikscn1hZGRUb2tlblVzaW5nTWVtYmVyQWNjZXNzKGUscixuKXtyZXR1cm4gZVtyXT1uLHIrKyxyfWhhbmRsZVBheWxvYWROb0N1c3RvbShlLHIpe31oYW5kbGVQYXlsb2FkV2l0aEN1c3RvbShlLHIpe3IhPT1udWxsJiYoZS5wYXlsb2FkPXIpfW1hdGNoV2l0aFRlc3QoZSxyLG4pe3JldHVybiBlLnRlc3Qocik9PT0hMD9yLnN1YnN0cmluZyhuLGUubGFzdEluZGV4KTpudWxsfW1hdGNoV2l0aEV4ZWMoZSxyKXtsZXQgbj1lLmV4ZWMocik7cmV0dXJuIG4hPT1udWxsP25bMF06bnVsbH19O29pLlNLSVBQRUQ9IlRoaXMgbWFya3MgYSBza2lwcGVkIFRva2VuIHBhdHRlcm4sIHRoaXMgbWVhbnMgZWFjaCB0b2tlbiBpZGVudGlmaWVkIGJ5IGl0IHdpbGxiZSBjb25zdW1lZCBhbmQgdGhlbiB0aHJvd24gaW50byBvYmxpdmlvbiwgdGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB0byBjb21wbGV0ZWx5IGlnbm9yZSB3aGl0ZXNwYWNlLiI7b2kuTkE9L05PVF9BUFBMSUNBQkxFL30pO2Z1bmN0aW9uIEJ1KHQpe3JldHVybiBTUih0KT90LkxBQkVMOnQubmFtZX1mdW5jdGlvbiBTUih0KXtyZXR1cm4gZ2kodC5MQUJFTCkmJnQuTEFCRUwhPT0iIn1mdW5jdGlvbiBIVCh0KXtyZXR1cm4gZkZlKHQpfWZ1bmN0aW9uIGZGZSh0KXtsZXQgZT10LnBhdHRlcm4scj17fTtpZihyLm5hbWU9dC5uYW1lLGRyKGUpfHwoci5QQVRURVJOPWUpLEl0KHQsaEZlKSl0aHJvd2BUaGUgcGFyZW50IHByb3BlcnR5IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuClNlZTogaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXMvNTY0I2lzc3VlY29tbWVudC0zNDkwNjIzNDYgZm9yIGRldGFpbHMuYDtyZXR1cm4gSXQodCxfc2UpJiYoci5DQVRFR09SSUVTPXRbX3NlXSksUHUoW3JdKSxJdCh0LExzZSkmJihyLkxBQkVMPXRbTHNlXSksSXQodCxEc2UpJiYoci5HUk9VUD10W0RzZV0pLEl0KHQsUnNlKSYmKHIuUE9QX01PREU9dFtSc2VdKSxJdCh0LE5zZSkmJihyLlBVU0hfTU9ERT10W05zZV0pLEl0KHQsTXNlKSYmKHIuTE9OR0VSX0FMVD10W01zZV0pLEl0KHQsSXNlKSYmKHIuTElORV9CUkVBS1M9dFtJc2VdKSxJdCh0LE9zZSkmJihyLlNUQVJUX0NIQVJTX0hJTlQ9dFtPc2VdKSxyfWZ1bmN0aW9uIG4wKHQsZSxyLG4saSxhLHMsbCl7cmV0dXJue2ltYWdlOmUsc3RhcnRPZmZzZXQ6cixlbmRPZmZzZXQ6bixzdGFydExpbmU6aSxlbmRMaW5lOmEsc3RhcnRDb2x1bW46cyxlbmRDb2x1bW46bCx0b2tlblR5cGVJZHg6dC50b2tlblR5cGVJZHgsdG9rZW5UeXBlOnR9fWZ1bmN0aW9uIG8yKHQsZSl7cmV0dXJuIE91KHQsZSl9dmFyIGhGZSxfc2UsTHNlLERzZSxOc2UsUnNlLE1zZSxJc2UsT3NlLG9vLGkwPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTthMigpO3IwKCk7byhCdSwidG9rZW5MYWJlbCIpO28oU1IsImhhc1Rva2VuTGFiZWwiKTtoRmU9InBhcmVudCIsX3NlPSJjYXRlZ29yaWVzIixMc2U9ImxhYmVsIixEc2U9Imdyb3VwIixOc2U9InB1c2hfbW9kZSIsUnNlPSJwb3BfbW9kZSIsTXNlPSJsb25nZXJfYWx0IixJc2U9ImxpbmVfYnJlYWtzIixPc2U9InN0YXJ0X2NoYXJzX2hpbnQiO28oSFQsImNyZWF0ZVRva2VuIik7byhmRmUsImNyZWF0ZVRva2VuSW50ZXJuYWwiKTtvbz1IVCh7bmFtZToiRU9GIixwYXR0ZXJuOm9pLk5BfSk7UHUoW29vXSk7byhuMCwiY3JlYXRlVG9rZW5JbnN0YW5jZSIpO28obzIsInRva2VuTWF0Y2hlciIpfSk7dmFyIEZ1LFBzZSxCbCx0Zz1NKCgpPT57InVzZSBzdHJpY3QiO2kwKCk7SHQoKTtucygpO0Z1PXtidWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtleHBlY3RlZDp0LGFjdHVhbDplLHByZXZpb3VzOnIscnVsZU5hbWU6bn0pe3JldHVybmBFeHBlY3RpbmcgJHtTUih0KT9gLS0+ICR7QnUodCl9IDwtLWA6YHRva2VuIG9mIHR5cGUgLS0+ICR7dC5uYW1lfSA8LS1gfSBidXQgZm91bmQgLS0+ICcke2UuaW1hZ2V9JyA8LS1gfSxidWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZSh7Zmlyc3RSZWR1bmRhbnQ6dCxydWxlTmFtZTplfSl7cmV0dXJuIlJlZHVuZGFudCBpbnB1dCwgZXhwZWN0aW5nIEVPRiBidXQgZm91bmQ6ICIrdC5pbWFnZX0sYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe2V4cGVjdGVkUGF0aHNQZXJBbHQ6dCxhY3R1YWw6ZSxwcmV2aW91czpyLGN1c3RvbVVzZXJEZXNjcmlwdGlvbjpuLHJ1bGVOYW1lOml9KXtsZXQgYT0iRXhwZWN0aW5nOiAiLGw9YApidXQgZm91bmQ6ICdgK3JhKGUpLmltYWdlKyInIjtpZihuKXJldHVybiBhK24rbDt7bGV0IHU9cXIodCwocCxtKT0+cC5jb25jYXQobSksW10pLGg9SmUodSxwPT5gWyR7SmUocCxtPT5CdShtKSkuam9pbigiLCAiKX1dYCksZD1gb25lIG9mIHRoZXNlIHBvc3NpYmxlIFRva2VuIHNlcXVlbmNlczoKJHtKZShoLChwLG0pPT5gICAke20rMX0uICR7cH1gKS5qb2luKGAKYCl9YDtyZXR1cm4gYStkK2x9fSxidWlsZEVhcmx5RXhpdE1lc3NhZ2Uoe2V4cGVjdGVkSXRlcmF0aW9uUGF0aHM6dCxhY3R1YWw6ZSxjdXN0b21Vc2VyRGVzY3JpcHRpb246cixydWxlTmFtZTpufSl7bGV0IGk9IkV4cGVjdGluZzogIixzPWAKYnV0IGZvdW5kOiAnYCtyYShlKS5pbWFnZSsiJyI7aWYocilyZXR1cm4gaStyK3M7e2xldCB1PWBleHBlY3RpbmcgYXQgbGVhc3Qgb25lIGl0ZXJhdGlvbiB3aGljaCBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UgcG9zc2libGUgVG9rZW4gc2VxdWVuY2VzOjoKICA8JHtKZSh0LGg9PmBbJHtKZShoLGY9PkJ1KGYpKS5qb2luKCIsIil9XWApLmpvaW4oIiAsIil9PmA7cmV0dXJuIGkrdStzfX19O09iamVjdC5mcmVlemUoRnUpO1BzZT17YnVpbGRSdWxlTm90Rm91bmRFcnJvcih0LGUpe3JldHVybiJJbnZhbGlkIGdyYW1tYXIsIHJlZmVyZW5jZSB0byBhIHJ1bGUgd2hpY2ggaXMgbm90IGRlZmluZWQ6IC0+IitlLm5vblRlcm1pbmFsTmFtZStgPC0KaW5zaWRlIHRvcCBsZXZlbCBydWxlOiAtPmArdC5uYW1lKyI8LSJ9fSxCbD17YnVpbGREdXBsaWNhdGVGb3VuZEVycm9yKHQsZSl7ZnVuY3Rpb24gcihmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIGtyP2YudGVybWluYWxUeXBlLm5hbWU6ZiBpbnN0YW5jZW9mIG5uP2Yubm9uVGVybWluYWxOYW1lOiIifW8ociwiZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQiKTtsZXQgbj10Lm5hbWUsaT1yYShlKSxhPWkuaWR4LHM9TXMoaSksbD1yKGkpLHU9YT4wLGg9YC0+JHtzfSR7dT9hOiIifTwtICR7bD9gd2l0aCBhcmd1bWVudDogLT4ke2x9PC1gOiIifQogICAgICAgICAgICAgICAgICBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlICgke2UubGVuZ3RofSB0aW1lcykgaW4gdGhlIHRvcCBsZXZlbCBydWxlOiAtPiR7bn08LS4gICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL0ZBUS5odG1sI05VTUVSSUNBTF9TVUZGSVhFUyAKICAgICAgICAgICAgICAgICAgYDtyZXR1cm4gaD1oLnJlcGxhY2UoL1sgXHRdKy9nLCIgIiksaD1oLnJlcGxhY2UoL1xzXHMrL2csYApgKSxofSxidWlsZE5hbWVzcGFjZUNvbmZsaWN0RXJyb3IodCl7cmV0dXJuYE5hbWVzcGFjZSBjb25mbGljdCBmb3VuZCBpbiBncmFtbWFyLgpUaGUgZ3JhbW1hciBoYXMgYm90aCBhIFRlcm1pbmFsKFRva2VuKSBhbmQgYSBOb24tVGVybWluYWwoUnVsZSkgbmFtZWQ6IDwke3QubmFtZX0+LgpUbyByZXNvbHZlIHRoaXMgbWFrZSBzdXJlIGVhY2ggVGVybWluYWwgYW5kIE5vbi1UZXJtaW5hbCBuYW1lcyBhcmUgdW5pcXVlClRoaXMgaXMgZWFzeSB0byBhY2NvbXBsaXNoIGJ5IHVzaW5nIHRoZSBjb252ZW50aW9uIHRoYXQgVGVybWluYWwgbmFtZXMgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyCmFuZCBOb24tVGVybWluYWwgbmFtZXMgc3RhcnQgd2l0aCBhIGxvd2VyIGNhc2UgbGV0dGVyLmB9LGJ1aWxkQWx0ZXJuYXRpb25QcmVmaXhBbWJpZ3VpdHlFcnJvcih0KXtsZXQgZT1KZSh0LnByZWZpeFBhdGgsaT0+QnUoaSkpLmpvaW4oIiwgIikscj10LmFsdGVybmF0aW9uLmlkeD09PTA/IiI6dC5hbHRlcm5hdGlvbi5pZHg7cmV0dXJuYEFtYmlndW91cyBhbHRlcm5hdGl2ZXM6IDwke3QuYW1iaWd1aXR5SW5kaWNlcy5qb2luKCIgLCIpfT4gZHVlIHRvIGNvbW1vbiBsb29rYWhlYWQgcHJlZml4CmluIDxPUiR7cn0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZSwKPCR7ZX0+IG1heSBhcHBlYXJzIGFzIGEgcHJlZml4IHBhdGggaW4gYWxsIHRoZXNlIGFsdGVybmF0aXZlcy4KU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNDT01NT05fUFJFRklYCkZvciBGdXJ0aGVyIGRldGFpbHMuYH0sYnVpbGRBbHRlcm5hdGlvbkFtYmlndWl0eUVycm9yKHQpe2xldCBlPUplKHQucHJlZml4UGF0aCxpPT5CdShpKSkuam9pbigiLCAiKSxyPXQuYWx0ZXJuYXRpb24uaWR4PT09MD8iIjp0LmFsdGVybmF0aW9uLmlkeCxuPWBBbWJpZ3VvdXMgQWx0ZXJuYXRpdmVzIERldGVjdGVkOiA8JHt0LmFtYmlndWl0eUluZGljZXMuam9pbigiICwiKX0+IGluIDxPUiR7cn0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZSwKPCR7ZX0+IG1heSBhcHBlYXJzIGFzIGEgcHJlZml4IHBhdGggaW4gYWxsIHRoZXNlIGFsdGVybmF0aXZlcy4KYDtyZXR1cm4gbj1uK2BTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0FNQklHVU9VU19BTFRFUk5BVElWRVMKRm9yIEZ1cnRoZXIgZGV0YWlscy5gLG59LGJ1aWxkRW1wdHlSZXBldGl0aW9uRXJyb3IodCl7bGV0IGU9TXModC5yZXBldGl0aW9uKTtyZXR1cm4gdC5yZXBldGl0aW9uLmlkeCE9PTAmJihlKz10LnJlcGV0aXRpb24uaWR4KSxgVGhlIHJlcGV0aXRpb24gPCR7ZX0+IHdpdGhpbiBSdWxlIDwke3QudG9wTGV2ZWxSdWxlLm5hbWV9PiBjYW4gbmV2ZXIgY29uc3VtZSBhbnkgdG9rZW5zLgpUaGlzIGNvdWxkIGxlYWQgdG8gYW4gaW5maW5pdGUgbG9vcC5gfSxidWlsZFRva2VuTmFtZUVycm9yKHQpe3JldHVybiJkZXByZWNhdGVkIn0sYnVpbGRFbXB0eUFsdGVybmF0aW9uRXJyb3IodCl7cmV0dXJuYEFtYmlndW91cyBlbXB0eSBhbHRlcm5hdGl2ZTogPCR7dC5lbXB0eUNob2ljZUlkeCsxfT4gaW4gPE9SJHt0LmFsdGVybmF0aW9uLmlkeH0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZS4KT25seSB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBtYXkgYmUgYW4gZW1wdHkgYWx0ZXJuYXRpdmUuYH0sYnVpbGRUb29NYW55QWx0ZXJuYXRpdmVzRXJyb3IodCl7cmV0dXJuYEFuIEFsdGVybmF0aW9uIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyNTYgYWx0ZXJuYXRpdmVzOgo8T1Ike3QuYWx0ZXJuYXRpb24uaWR4fT4gaW5zaWRlIDwke3QudG9wTGV2ZWxSdWxlLm5hbWV9PiBSdWxlLgogaGFzICR7dC5hbHRlcm5hdGlvbi5kZWZpbml0aW9uLmxlbmd0aCsxfSBhbHRlcm5hdGl2ZXMuYH0sYnVpbGRMZWZ0UmVjdXJzaW9uRXJyb3IodCl7bGV0IGU9dC50b3BMZXZlbFJ1bGUubmFtZSxyPUplKHQubGVmdFJlY3Vyc2lvblBhdGgsYT0+YS5uYW1lKSxuPWAke2V9IC0tPiAke3IuY29uY2F0KFtlXSkuam9pbigiIC0tPiAiKX1gO3JldHVybmBMZWZ0IFJlY3Vyc2lvbiBmb3VuZCBpbiBncmFtbWFyLgpydWxlOiA8JHtlfT4gY2FuIGJlIGludm9rZWQgZnJvbSBpdHNlbGYgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpCndpdGhvdXQgY29uc3VtaW5nIGFueSBUb2tlbnMuIFRoZSBncmFtbWFyIHBhdGggdGhhdCBjYXVzZXMgdGhpcyBpczogCiAke259CiBUbyBmaXggdGhpcyByZWZhY3RvciB5b3VyIGdyYW1tYXIgdG8gcmVtb3ZlIHRoZSBsZWZ0IHJlY3Vyc2lvbi4Kc2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MTF9wYXJzZXIjTGVmdF9mYWN0b3JpbmcuYH0sYnVpbGRJbnZhbGlkUnVsZU5hbWVFcnJvcih0KXtyZXR1cm4iZGVwcmVjYXRlZCJ9LGJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih0KXtsZXQgZTtyZXR1cm4gdC50b3BMZXZlbFJ1bGUgaW5zdGFuY2VvZiB0cz9lPXQudG9wTGV2ZWxSdWxlLm5hbWU6ZT10LnRvcExldmVsUnVsZSxgRHVwbGljYXRlIGRlZmluaXRpb24sIHJ1bGU6IC0+JHtlfTwtIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgZ3JhbW1hcjogLT4ke3QuZ3JhbW1hck5hbWV9PC1gfX19KTtmdW5jdGlvbiBCc2UodCxlKXtsZXQgcj1uZXcgQ1IodCxlKTtyZXR1cm4gci5yZXNvbHZlUmVmcygpLHIuZXJyb3JzfXZhciBDUixGc2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJcygpO0h0KCk7bnMoKTtvKEJzZSwicmVzb2x2ZUdyYW1tYXIiKTtDUj1jbGFzcyBleHRlbmRzIHJze3N0YXRpY3tvKHRoaXMsIkdhc3RSZWZSZXNvbHZlclZpc2l0b3IiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKCksdGhpcy5uYW1lVG9Ub3BSdWxlPWUsdGhpcy5lcnJNc2dQcm92aWRlcj1yLHRoaXMuZXJyb3JzPVtdfXJlc29sdmVSZWZzKCl7Q2UoYnIodGhpcy5uYW1lVG9Ub3BSdWxlKSxlPT57dGhpcy5jdXJyVG9wTGV2ZWw9ZSxlLmFjY2VwdCh0aGlzKX0pfXZpc2l0Tm9uVGVybWluYWwoZSl7bGV0IHI9dGhpcy5uYW1lVG9Ub3BSdWxlW2Uubm9uVGVybWluYWxOYW1lXTtpZihyKWUucmVmZXJlbmNlZFJ1bGU9cjtlbHNle2xldCBuPXRoaXMuZXJyTXNnUHJvdmlkZXIuYnVpbGRSdWxlTm90Rm91bmRFcnJvcih0aGlzLmN1cnJUb3BMZXZlbCxlKTt0aGlzLmVycm9ycy5wdXNoKHttZXNzYWdlOm4sdHlwZTp6aS5VTlJFU09MVkVEX1NVQlJVTEVfUkVGLHJ1bGVOYW1lOnRoaXMuY3VyclRvcExldmVsLm5hbWUsdW5yZXNvbHZlZFJlZk5hbWU6ZS5ub25UZXJtaW5hbE5hbWV9KX19fX0pO2Z1bmN0aW9uIFhUKHQsZSxyPVtdKXtyPXJuKHIpO2xldCBuPVtdLGk9MDtmdW5jdGlvbiBhKGwpe3JldHVybiBsLmNvbmNhdChtaSh0LGkrMSkpfW8oYSwicmVtYWluaW5nUGF0aFdpdGgiKTtmdW5jdGlvbiBzKGwpe2xldCB1PVhUKGEobCksZSxyKTtyZXR1cm4gbi5jb25jYXQodSl9Zm9yKG8ocywiZ2V0QWx0ZXJuYXRpdmVzRm9yUHJvZCIpO3IubGVuZ3RoPGUmJmk8dC5sZW5ndGg7KXtsZXQgbD10W2ldO2lmKGwgaW5zdGFuY2VvZiBDbilyZXR1cm4gcyhsLmRlZmluaXRpb24pO2lmKGwgaW5zdGFuY2VvZiBubilyZXR1cm4gcyhsLmRlZmluaXRpb24pO2lmKGwgaW5zdGFuY2VvZiBhbiluPXMobC5kZWZpbml0aW9uKTtlbHNlIGlmKGwgaW5zdGFuY2VvZiBBbil7bGV0IHU9bC5kZWZpbml0aW9uLmNvbmNhdChbbmV3IExyKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pXSk7cmV0dXJuIHModSl9ZWxzZSBpZihsIGluc3RhbmNlb2YgX24pe2xldCB1PVtuZXcgQ24oe2RlZmluaXRpb246bC5kZWZpbml0aW9ufSksbmV3IExyKHtkZWZpbml0aW9uOltuZXcga3Ioe3Rlcm1pbmFsVHlwZTpsLnNlcGFyYXRvcn0pXS5jb25jYXQobC5kZWZpbml0aW9uKX0pXTtyZXR1cm4gcyh1KX1lbHNlIGlmKGwgaW5zdGFuY2VvZiB2bil7bGV0IHU9bC5kZWZpbml0aW9uLmNvbmNhdChbbmV3IExyKHtkZWZpbml0aW9uOltuZXcga3Ioe3Rlcm1pbmFsVHlwZTpsLnNlcGFyYXRvcn0pXS5jb25jYXQobC5kZWZpbml0aW9uKX0pXSk7bj1zKHUpfWVsc2UgaWYobCBpbnN0YW5jZW9mIExyKXtsZXQgdT1sLmRlZmluaXRpb24uY29uY2F0KFtuZXcgTHIoe2RlZmluaXRpb246bC5kZWZpbml0aW9ufSldKTtuPXModSl9ZWxzZXtpZihsIGluc3RhbmNlb2YgeG4pcmV0dXJuIENlKGwuZGVmaW5pdGlvbix1PT57Y3IodS5kZWZpbml0aW9uKT09PSExJiYobj1zKHUuZGVmaW5pdGlvbikpfSksbjtpZihsIGluc3RhbmNlb2Yga3Ipci5wdXNoKGwudGVybWluYWxUeXBlKTtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWkrK31yZXR1cm4gbi5wdXNoKHtwYXJ0aWFsUGF0aDpyLHN1ZmZpeERlZjptaSh0LGkpfSksbn1mdW5jdGlvbiBqVCh0LGUscixuKXtsZXQgaT0iRVhJVF9OT05FX1RFUk1JTkFMIixhPVtpXSxzPSJFWElUX0FMVEVSTkFUSVZFIixsPSExLHU9ZS5sZW5ndGgsaD11LW4tMSxmPVtdLGQ9W107Zm9yKGQucHVzaCh7aWR4Oi0xLGRlZjp0LHJ1bGVTdGFjazpbXSxvY2N1cnJlbmNlU3RhY2s6W119KTshY3IoZCk7KXtsZXQgcD1kLnBvcCgpO2lmKHA9PT1zKXtsJiZmYShkKS5pZHg8PWgmJmQucG9wKCk7Y29udGludWV9bGV0IG09cC5kZWYsZz1wLmlkeCx5PXAucnVsZVN0YWNrLHY9cC5vY2N1cnJlbmNlU3RhY2s7aWYoY3IobSkpY29udGludWU7bGV0IHg9bVswXTtpZih4PT09aSl7bGV0IGI9e2lkeDpnLGRlZjptaShtKSxydWxlU3RhY2s6THUoeSksb2NjdXJyZW5jZVN0YWNrOkx1KHYpfTtkLnB1c2goYil9ZWxzZSBpZih4IGluc3RhbmNlb2Yga3IpaWYoZzx1LTEpe2xldCBiPWcrMSx3PWVbYl07aWYocih3LHgudGVybWluYWxUeXBlKSl7bGV0IF89e2lkeDpiLGRlZjptaShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKF8pfX1lbHNlIGlmKGc9PT11LTEpZi5wdXNoKHtuZXh0VG9rZW5UeXBlOngudGVybWluYWxUeXBlLG5leHRUb2tlbk9jY3VycmVuY2U6eC5pZHgscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9KSxsPSEwO2Vsc2UgdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7ZWxzZSBpZih4IGluc3RhbmNlb2Ygbm4pe2xldCBiPXJuKHkpO2IucHVzaCh4Lm5vblRlcm1pbmFsTmFtZSk7bGV0IHc9cm4odik7dy5wdXNoKHguaWR4KTtsZXQgXz17aWR4OmcsZGVmOnguZGVmaW5pdGlvbi5jb25jYXQoYSxtaShtKSkscnVsZVN0YWNrOmIsb2NjdXJyZW5jZVN0YWNrOnd9O2QucHVzaChfKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBhbil7bGV0IGI9e2lkeDpnLGRlZjptaShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKGIpLGQucHVzaChzKTtsZXQgdz17aWR4OmcsZGVmOnguZGVmaW5pdGlvbi5jb25jYXQobWkobSkpLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2godyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgQW4pe2xldCBiPW5ldyBMcih7ZGVmaW5pdGlvbjp4LmRlZmluaXRpb24saWR4OnguaWR4fSksdz14LmRlZmluaXRpb24uY29uY2F0KFtiXSxtaShtKSksXz17aWR4OmcsZGVmOncscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChfKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBfbil7bGV0IGI9bmV3IGtyKHt0ZXJtaW5hbFR5cGU6eC5zZXBhcmF0b3J9KSx3PW5ldyBMcih7ZGVmaW5pdGlvbjpbYl0uY29uY2F0KHguZGVmaW5pdGlvbiksaWR4OnguaWR4fSksXz14LmRlZmluaXRpb24uY29uY2F0KFt3XSxtaShtKSksVD17aWR4OmcsZGVmOl8scnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChUKX1lbHNlIGlmKHggaW5zdGFuY2VvZiB2bil7bGV0IGI9e2lkeDpnLGRlZjptaShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKGIpLGQucHVzaChzKTtsZXQgdz1uZXcga3Ioe3Rlcm1pbmFsVHlwZTp4LnNlcGFyYXRvcn0pLF89bmV3IExyKHtkZWZpbml0aW9uOlt3XS5jb25jYXQoeC5kZWZpbml0aW9uKSxpZHg6eC5pZHh9KSxUPXguZGVmaW5pdGlvbi5jb25jYXQoW19dLG1pKG0pKSxFPXtpZHg6ZyxkZWY6VCxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKEUpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIExyKXtsZXQgYj17aWR4OmcsZGVmOm1pKG0pLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goYiksZC5wdXNoKHMpO2xldCB3PW5ldyBMcih7ZGVmaW5pdGlvbjp4LmRlZmluaXRpb24saWR4OnguaWR4fSksXz14LmRlZmluaXRpb24uY29uY2F0KFt3XSxtaShtKSksVD17aWR4OmcsZGVmOl8scnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChUKX1lbHNlIGlmKHggaW5zdGFuY2VvZiB4bilmb3IobGV0IGI9eC5kZWZpbml0aW9uLmxlbmd0aC0xO2I+PTA7Yi0tKXtsZXQgdz14LmRlZmluaXRpb25bYl0sXz17aWR4OmcsZGVmOncuZGVmaW5pdGlvbi5jb25jYXQobWkobSkpLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goXyksZC5wdXNoKHMpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIENuKWQucHVzaCh7aWR4OmcsZGVmOnguZGVmaW5pdGlvbi5jb25jYXQobWkobSkpLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fSk7ZWxzZSBpZih4IGluc3RhbmNlb2YgdHMpZC5wdXNoKGRGZSh4LGcseSx2KSk7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1yZXR1cm4gZn1mdW5jdGlvbiBkRmUodCxlLHIsbil7bGV0IGk9cm4ocik7aS5wdXNoKHQubmFtZSk7bGV0IGE9cm4obik7cmV0dXJuIGEucHVzaCgxKSx7aWR4OmUsZGVmOnQuZGVmaW5pdGlvbixydWxlU3RhY2s6aSxvY2N1cnJlbmNlU3RhY2s6YX19dmFyIEFSLFdULHJnLFlULGwyLHFULGMyLHUyPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtkUigpO1BUKCk7bnMoKTtBUj1jbGFzcyBleHRlbmRzIEl1e3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TmV4dFBvc3NpYmxlVG9rZW5zV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMudG9wUHJvZD1lLHRoaXMucGF0aD1yLHRoaXMucG9zc2libGVUb2tUeXBlcz1bXSx0aGlzLm5leHRQcm9kdWN0aW9uTmFtZT0iIix0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT0wLHRoaXMuZm91bmQ9ITEsdGhpcy5pc0F0RW5kT2ZQYXRoPSExfXN0YXJ0V2Fsa2luZygpe2lmKHRoaXMuZm91bmQ9ITEsdGhpcy5wYXRoLnJ1bGVTdGFja1swXSE9PXRoaXMudG9wUHJvZC5uYW1lKXRocm93IEVycm9yKCJUaGUgcGF0aCBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSB3YWxrZXIncyB0b3AgUnVsZSEiKTtyZXR1cm4gdGhpcy5ydWxlU3RhY2s9cm4odGhpcy5wYXRoLnJ1bGVTdGFjaykucmV2ZXJzZSgpLHRoaXMub2NjdXJyZW5jZVN0YWNrPXJuKHRoaXMucGF0aC5vY2N1cnJlbmNlU3RhY2spLnJldmVyc2UoKSx0aGlzLnJ1bGVTdGFjay5wb3AoKSx0aGlzLm9jY3VycmVuY2VTdGFjay5wb3AoKSx0aGlzLnVwZGF0ZUV4cGVjdGVkTmV4dCgpLHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMucG9zc2libGVUb2tUeXBlc313YWxrKGUscj1bXSl7dGhpcy5mb3VuZHx8c3VwZXIud2FsayhlLHIpfXdhbGtQcm9kUmVmKGUscixuKXtpZihlLnJlZmVyZW5jZWRSdWxlLm5hbWU9PT10aGlzLm5leHRQcm9kdWN0aW9uTmFtZSYmZS5pZHg9PT10aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZSl7bGV0IGk9ci5jb25jYXQobik7dGhpcy51cGRhdGVFeHBlY3RlZE5leHQoKSx0aGlzLndhbGsoZS5yZWZlcmVuY2VkUnVsZSxpKX19dXBkYXRlRXhwZWN0ZWROZXh0KCl7Y3IodGhpcy5ydWxlU3RhY2spPyh0aGlzLm5leHRQcm9kdWN0aW9uTmFtZT0iIix0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT0wLHRoaXMuaXNBdEVuZE9mUGF0aD0hMCk6KHRoaXMubmV4dFByb2R1Y3Rpb25OYW1lPXRoaXMucnVsZVN0YWNrLnBvcCgpLHRoaXMubmV4dFByb2R1Y3Rpb25PY2N1cnJlbmNlPXRoaXMub2NjdXJyZW5jZVN0YWNrLnBvcCgpKX19LFdUPWNsYXNzIGV4dGVuZHMgQVJ7c3RhdGlje28odGhpcywiTmV4dEFmdGVyVG9rZW5XYWxrZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUsciksdGhpcy5wYXRoPXIsdGhpcy5uZXh0VGVybWluYWxOYW1lPSIiLHRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZT0wLHRoaXMubmV4dFRlcm1pbmFsTmFtZT10aGlzLnBhdGgubGFzdFRvay5uYW1lLHRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZT10aGlzLnBhdGgubGFzdFRva09jY3VycmVuY2V9d2Fsa1Rlcm1pbmFsKGUscixuKXtpZih0aGlzLmlzQXRFbmRPZlBhdGgmJmUudGVybWluYWxUeXBlLm5hbWU9PT10aGlzLm5leHRUZXJtaW5hbE5hbWUmJmUuaWR4PT09dGhpcy5uZXh0VGVybWluYWxPY2N1cnJlbmNlJiYhdGhpcy5mb3VuZCl7bGV0IGk9ci5jb25jYXQobiksYT1uZXcgQ24oe2RlZmluaXRpb246aX0pO3RoaXMucG9zc2libGVUb2tUeXBlcz1lMChhKSx0aGlzLmZvdW5kPSEwfX19LHJnPWNsYXNzIGV4dGVuZHMgSXV7c3RhdGlje28odGhpcywiQWJzdHJhY3ROZXh0VGVybWluYWxBZnRlclByb2R1Y3Rpb25XYWxrZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKCksdGhpcy50b3BSdWxlPWUsdGhpcy5vY2N1cnJlbmNlPXIsdGhpcy5yZXN1bHQ9e3Rva2VuOnZvaWQgMCxvY2N1cnJlbmNlOnZvaWQgMCxpc0VuZE9mUnVsZTp2b2lkIDB9fXN0YXJ0V2Fsa2luZygpe3JldHVybiB0aGlzLndhbGsodGhpcy50b3BSdWxlKSx0aGlzLnJlc3VsdH19LFlUPWNsYXNzIGV4dGVuZHMgcmd7c3RhdGlje28odGhpcywiTmV4dFRlcm1pbmFsQWZ0ZXJNYW55V2Fsa2VyIil9d2Fsa01hbnkoZSxyLG4pe2lmKGUuaWR4PT09dGhpcy5vY2N1cnJlbmNlKXtsZXQgaT1yYShyLmNvbmNhdChuKSk7dGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGU9aT09PXZvaWQgMCxpIGluc3RhbmNlb2Yga3ImJih0aGlzLnJlc3VsdC50b2tlbj1pLnRlcm1pbmFsVHlwZSx0aGlzLnJlc3VsdC5vY2N1cnJlbmNlPWkuaWR4KX1lbHNlIHN1cGVyLndhbGtNYW55KGUscixuKX19LGwyPWNsYXNzIGV4dGVuZHMgcmd7c3RhdGlje28odGhpcywiTmV4dFRlcm1pbmFsQWZ0ZXJNYW55U2VwV2Fsa2VyIil9d2Fsa01hbnlTZXAoZSxyLG4pe2lmKGUuaWR4PT09dGhpcy5vY2N1cnJlbmNlKXtsZXQgaT1yYShyLmNvbmNhdChuKSk7dGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGU9aT09PXZvaWQgMCxpIGluc3RhbmNlb2Yga3ImJih0aGlzLnJlc3VsdC50b2tlbj1pLnRlcm1pbmFsVHlwZSx0aGlzLnJlc3VsdC5vY2N1cnJlbmNlPWkuaWR4KX1lbHNlIHN1cGVyLndhbGtNYW55U2VwKGUscixuKX19LHFUPWNsYXNzIGV4dGVuZHMgcmd7c3RhdGlje28odGhpcywiTmV4dFRlcm1pbmFsQWZ0ZXJBdExlYXN0T25lV2Fsa2VyIil9d2Fsa0F0TGVhc3RPbmUoZSxyLG4pe2lmKGUuaWR4PT09dGhpcy5vY2N1cnJlbmNlKXtsZXQgaT1yYShyLmNvbmNhdChuKSk7dGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGU9aT09PXZvaWQgMCxpIGluc3RhbmNlb2Yga3ImJih0aGlzLnJlc3VsdC50b2tlbj1pLnRlcm1pbmFsVHlwZSx0aGlzLnJlc3VsdC5vY2N1cnJlbmNlPWkuaWR4KX1lbHNlIHN1cGVyLndhbGtBdExlYXN0T25lKGUscixuKX19LGMyPWNsYXNzIGV4dGVuZHMgcmd7c3RhdGlje28odGhpcywiTmV4dFRlcm1pbmFsQWZ0ZXJBdExlYXN0T25lU2VwV2Fsa2VyIil9d2Fsa0F0TGVhc3RPbmVTZXAoZSxyLG4pe2lmKGUuaWR4PT09dGhpcy5vY2N1cnJlbmNlKXtsZXQgaT1yYShyLmNvbmNhdChuKSk7dGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGU9aT09PXZvaWQgMCxpIGluc3RhbmNlb2Yga3ImJih0aGlzLnJlc3VsdC50b2tlbj1pLnRlcm1pbmFsVHlwZSx0aGlzLnJlc3VsdC5vY2N1cnJlbmNlPWkuaWR4KX1lbHNlIHN1cGVyLndhbGtBdExlYXN0T25lU2VwKGUscixuKX19O28oWFQsInBvc3NpYmxlUGF0aHNGcm9tIik7byhqVCwibmV4dFBvc3NpYmxlVG9rZW5zQWZ0ZXIiKTtvKGRGZSwiZXhwYW5kVG9wTGV2ZWxSdWxlIil9KTtmdW5jdGlvbiBoMih0KXtpZih0IGluc3RhbmNlb2YgYW58fHQ9PT0iT3B0aW9uIilyZXR1cm4gWW4uT1BUSU9OO2lmKHQgaW5zdGFuY2VvZiBMcnx8dD09PSJSZXBldGl0aW9uIilyZXR1cm4gWW4uUkVQRVRJVElPTjtpZih0IGluc3RhbmNlb2YgQW58fHQ9PT0iUmVwZXRpdGlvbk1hbmRhdG9yeSIpcmV0dXJuIFluLlJFUEVUSVRJT05fTUFOREFUT1JZO2lmKHQgaW5zdGFuY2VvZiBfbnx8dD09PSJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciIpcmV0dXJuIFluLlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SO2lmKHQgaW5zdGFuY2VvZiB2bnx8dD09PSJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciIpcmV0dXJuIFluLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1I7aWYodCBpbnN0YW5jZW9mIHhufHx0PT09IkFsdGVybmF0aW9uIilyZXR1cm4gWW4uQUxURVJOQVRJT047dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gUVQodCl7bGV0e29jY3VycmVuY2U6ZSxydWxlOnIscHJvZFR5cGU6bixtYXhMb29rYWhlYWQ6aX09dCxhPWgyKG4pO3JldHVybiBhPT09WW4uQUxURVJOQVRJT04/bmcoZSxyLGkpOmlnKGUscixhLGkpfWZ1bmN0aW9uIEdzZSh0LGUscixuLGksYSl7bGV0IHM9bmcodCxlLHIpLGw9WXNlKHMpP2VnOk91O3JldHVybiBhKHMsbixsLGkpfWZ1bmN0aW9uICRzZSh0LGUscixuLGksYSl7bGV0IHM9aWcodCxlLGksciksbD1Zc2Uocyk/ZWc6T3U7cmV0dXJuIGEoc1swXSxsLG4pfWZ1bmN0aW9uIFZzZSh0LGUscixuKXtsZXQgaT10Lmxlbmd0aCxhPVJhKHQscz0+UmEocyxsPT5sLmxlbmd0aD09PTEpKTtpZihlKXJldHVybiBmdW5jdGlvbihzKXtsZXQgbD1KZShzLHU9PnUuR0FURSk7Zm9yKGxldCB1PTA7dTxpO3UrKyl7bGV0IGg9dFt1XSxmPWgubGVuZ3RoLGQ9bFt1XTtpZighKGQhPT12b2lkIDAmJmQuY2FsbCh0aGlzKT09PSExKSllOmZvcihsZXQgcD0wO3A8ZjtwKyspe2xldCBtPWhbcF0sZz1tLmxlbmd0aDtmb3IobGV0IHk9MDt5PGc7eSsrKXtsZXQgdj10aGlzLkxBKHkrMSk7aWYocih2LG1beV0pPT09ITEpY29udGludWUgZX1yZXR1cm4gdX19fTtpZihhJiYhbil7bGV0IHM9SmUodCx1PT5Xcih1KSksbD1xcihzLCh1LGgsZik9PihDZShoLGQ9PntJdCh1LGQudG9rZW5UeXBlSWR4KXx8KHVbZC50b2tlblR5cGVJZHhdPWYpLENlKGQuY2F0ZWdvcnlNYXRjaGVzLHA9PntJdCh1LHApfHwodVtwXT1mKX0pfSksdSkse30pO3JldHVybiBmdW5jdGlvbigpe2xldCB1PXRoaXMuTEEoMSk7cmV0dXJuIGxbdS50b2tlblR5cGVJZHhdfX1lbHNlIHJldHVybiBmdW5jdGlvbigpe2ZvcihsZXQgcz0wO3M8aTtzKyspe2xldCBsPXRbc10sdT1sLmxlbmd0aDtlOmZvcihsZXQgaD0wO2g8dTtoKyspe2xldCBmPWxbaF0sZD1mLmxlbmd0aDtmb3IobGV0IHA9MDtwPGQ7cCsrKXtsZXQgbT10aGlzLkxBKHArMSk7aWYocihtLGZbcF0pPT09ITEpY29udGludWUgZX1yZXR1cm4gc319fX1mdW5jdGlvbiBVc2UodCxlLHIpe2xldCBuPVJhKHQsYT0+YS5sZW5ndGg9PT0xKSxpPXQubGVuZ3RoO2lmKG4mJiFyKXtsZXQgYT1Xcih0KTtpZihhLmxlbmd0aD09PTEmJmNyKGFbMF0uY2F0ZWdvcnlNYXRjaGVzKSl7bGV0IGw9YVswXS50b2tlblR5cGVJZHg7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTEEoMSkudG9rZW5UeXBlSWR4PT09bH19ZWxzZXtsZXQgcz1xcihhLChsLHUsaCk9PihsW3UudG9rZW5UeXBlSWR4XT0hMCxDZSh1LmNhdGVnb3J5TWF0Y2hlcyxmPT57bFtmXT0hMH0pLGwpLFtdKTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgbD10aGlzLkxBKDEpO3JldHVybiBzW2wudG9rZW5UeXBlSWR4XT09PSEwfX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtlOmZvcihsZXQgYT0wO2E8aTthKyspe2xldCBzPXRbYV0sbD1zLmxlbmd0aDtmb3IobGV0IHU9MDt1PGw7dSsrKXtsZXQgaD10aGlzLkxBKHUrMSk7aWYoZShoLHNbdV0pPT09ITEpY29udGludWUgZX1yZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24genNlKHQpe2xldCBlPW5ldyBBcnJheSh0KTtmb3IobGV0IHI9MDtyPHQ7cisrKWVbcl09W107cmV0dXJuIGV9ZnVuY3Rpb24gX1IodCl7bGV0IGU9WyIiXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXSxpPVtdO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtsZXQgcz1lW2FdO2kucHVzaChzKyJfIituLnRva2VuVHlwZUlkeCk7Zm9yKGxldCBsPTA7bDxuLmNhdGVnb3J5TWF0Y2hlcy5sZW5ndGg7bCsrKXtsZXQgdT0iXyIrbi5jYXRlZ29yeU1hdGNoZXNbbF07aS5wdXNoKHMrdSl9fWU9aX1yZXR1cm4gZX1mdW5jdGlvbiBwRmUodCxlLHIpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtpZihuPT09ciljb250aW51ZTtsZXQgaT10W25dO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtsZXQgcz1lW2FdO2lmKGlbc109PT0hMClyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSHNlKHQsZSl7bGV0IHI9SmUodCxzPT5YVChbc10sMSkpLG49enNlKHIubGVuZ3RoKSxpPUplKHIscz0+e2xldCBsPXt9O3JldHVybiBDZShzLHU9PntsZXQgaD1fUih1LnBhcnRpYWxQYXRoKTtDZShoLGY9PntsW2ZdPSEwfSl9KSxsfSksYT1yO2ZvcihsZXQgcz0xO3M8PWU7cysrKXtsZXQgbD1hO2E9enNlKGwubGVuZ3RoKTtmb3IobGV0IHU9MDt1PGwubGVuZ3RoO3UrKyl7bGV0IGg9bFt1XTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IGQ9aFtmXS5wYXJ0aWFsUGF0aCxwPWhbZl0uc3VmZml4RGVmLG09X1IoZCk7aWYocEZlKGksbSx1KXx8Y3IocCl8fGQubGVuZ3RoPT09ZSl7bGV0IHk9blt1XTtpZihaVCh5LGQpPT09ITEpe3kucHVzaChkKTtmb3IobGV0IHY9MDt2PG0ubGVuZ3RoO3YrKyl7bGV0IHg9bVt2XTtpW3VdW3hdPSEwfX19ZWxzZXtsZXQgeT1YVChwLHMrMSxkKTthW3VdPWFbdV0uY29uY2F0KHkpLENlKHksdj0+e2xldCB4PV9SKHYucGFydGlhbFBhdGgpO0NlKHgsYj0+e2lbdV1bYl09ITB9KX0pfX19fXJldHVybiBufWZ1bmN0aW9uIG5nKHQsZSxyLG4pe2xldCBpPW5ldyBLVCh0LFluLkFMVEVSTkFUSU9OLG4pO3JldHVybiBlLmFjY2VwdChpKSxIc2UoaS5yZXN1bHQscil9ZnVuY3Rpb24gaWcodCxlLHIsbil7bGV0IGk9bmV3IEtUKHQscik7ZS5hY2NlcHQoaSk7bGV0IGE9aS5yZXN1bHQsbD1uZXcgTFIoZSx0LHIpLnN0YXJ0V2Fsa2luZygpLHU9bmV3IENuKHtkZWZpbml0aW9uOmF9KSxoPW5ldyBDbih7ZGVmaW5pdGlvbjpsfSk7cmV0dXJuIEhzZShbdSxoXSxuKX1mdW5jdGlvbiBaVCh0LGUpe2U6Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobi5sZW5ndGg9PT1lLmxlbmd0aCl7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBhPWVbaV0scz1uW2ldO2lmKChhPT09c3x8cy5jYXRlZ29yeU1hdGNoZXNNYXBbYS50b2tlblR5cGVJZHhdIT09dm9pZCAwKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIFdzZSh0LGUpe3JldHVybiB0Lmxlbmd0aDxlLmxlbmd0aCYmUmEodCwocixuKT0+e2xldCBpPWVbbl07cmV0dXJuIHI9PT1pfHxpLmNhdGVnb3J5TWF0Y2hlc01hcFtyLnRva2VuVHlwZUlkeF19KX1mdW5jdGlvbiBZc2UodCl7cmV0dXJuIFJhKHQsZT0+UmEoZSxyPT5SYShyLG49PmNyKG4uY2F0ZWdvcnlNYXRjaGVzKSkpKX12YXIgWW4sTFIsS1QsYWc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO3UyKCk7UFQoKTtyMCgpO25zKCk7KGZ1bmN0aW9uKHQpe3RbdC5PUFRJT049MF09Ik9QVElPTiIsdFt0LlJFUEVUSVRJT049MV09IlJFUEVUSVRJT04iLHRbdC5SRVBFVElUSU9OX01BTkRBVE9SWT0yXT0iUkVQRVRJVElPTl9NQU5EQVRPUlkiLHRbdC5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUj0zXT0iUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IiLHRbdC5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SPTRdPSJSRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SIix0W3QuQUxURVJOQVRJT049NV09IkFMVEVSTkFUSU9OIn0pKFlufHwoWW49e30pKTtvKGgyLCJnZXRQcm9kVHlwZSIpO28oUVQsImdldExvb2thaGVhZFBhdGhzIik7byhHc2UsImJ1aWxkTG9va2FoZWFkRnVuY0Zvck9yIik7bygkc2UsImJ1aWxkTG9va2FoZWFkRnVuY0Zvck9wdGlvbmFsUHJvZCIpO28oVnNlLCJidWlsZEFsdGVybmF0aXZlc0xvb2tBaGVhZEZ1bmMiKTtvKFVzZSwiYnVpbGRTaW5nbGVBbHRlcm5hdGl2ZUxvb2thaGVhZEZ1bmN0aW9uIik7TFI9Y2xhc3MgZXh0ZW5kcyBJdXtzdGF0aWN7byh0aGlzLCJSZXN0RGVmaW5pdGlvbkZpbmRlcldhbGtlciIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcigpLHRoaXMudG9wUHJvZD1lLHRoaXMudGFyZ2V0T2NjdXJyZW5jZT1yLHRoaXMudGFyZ2V0UHJvZFR5cGU9bn1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUHJvZCksdGhpcy5yZXN0RGVmfWNoZWNrSXNUYXJnZXQoZSxyLG4saSl7cmV0dXJuIGUuaWR4PT09dGhpcy50YXJnZXRPY2N1cnJlbmNlJiZ0aGlzLnRhcmdldFByb2RUeXBlPT09cj8odGhpcy5yZXN0RGVmPW4uY29uY2F0KGkpLCEwKTohMX13YWxrT3B0aW9uKGUscixuKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxZbi5PUFRJT04scixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa0F0TGVhc3RPbmUoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFluLlJFUEVUSVRJT05fTUFOREFUT1JZLHIsbil8fHN1cGVyLndhbGtPcHRpb24oZSxyLG4pfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxZbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUixyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX13YWxrTWFueShlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWW4uUkVQRVRJVElPTixyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX13YWxrTWFueVNlcChlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWW4uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUixyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX19LEtUPWNsYXNzIGV4dGVuZHMgcnN7c3RhdGlje28odGhpcywiSW5zaWRlRGVmaW5pdGlvbkZpbmRlclZpc2l0b3IiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKSx0aGlzLnRhcmdldE9jY3VycmVuY2U9ZSx0aGlzLnRhcmdldFByb2RUeXBlPXIsdGhpcy50YXJnZXRSZWY9bix0aGlzLnJlc3VsdD1bXX1jaGVja0lzVGFyZ2V0KGUscil7ZS5pZHg9PT10aGlzLnRhcmdldE9jY3VycmVuY2UmJnRoaXMudGFyZ2V0UHJvZFR5cGU9PT1yJiYodGhpcy50YXJnZXRSZWY9PT12b2lkIDB8fGU9PT10aGlzLnRhcmdldFJlZikmJih0aGlzLnJlc3VsdD1lLmRlZmluaXRpb24pfXZpc2l0T3B0aW9uKGUpe3RoaXMuY2hlY2tJc1RhcmdldChlLFluLk9QVElPTil9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuY2hlY2tJc1RhcmdldChlLFluLlJFUEVUSVRJT04pfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxZbi5SRVBFVElUSU9OX01BTkRBVE9SWSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxZbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUil9dmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxZbi5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SKX12aXNpdEFsdGVybmF0aW9uKGUpe3RoaXMuY2hlY2tJc1RhcmdldChlLFluLkFMVEVSTkFUSU9OKX19O28oenNlLCJpbml0aWFsaXplQXJyYXlPZkFycmF5cyIpO28oX1IsInBhdGhUb0hhc2hLZXlzIik7byhwRmUsImlzVW5pcXVlUHJlZml4SGFzaCIpO28oSHNlLCJsb29rQWhlYWRTZXF1ZW5jZUZyb21BbHRlcm5hdGl2ZXMiKTtvKG5nLCJnZXRMb29rYWhlYWRQYXRoc0Zvck9yIik7byhpZywiZ2V0TG9va2FoZWFkUGF0aHNGb3JPcHRpb25hbFByb2QiKTtvKFpULCJjb250YWluc1BhdGgiKTtvKFdzZSwiaXNTdHJpY3RQcmVmaXhPZlBhdGgiKTtvKFlzZSwiYXJlVG9rZW5DYXRlZ29yaWVzTm90VXNlZCIpfSk7ZnVuY3Rpb24gcXNlKHQpe2xldCBlPXQubG9va2FoZWFkU3RyYXRlZ3kudmFsaWRhdGUoe3J1bGVzOnQucnVsZXMsdG9rZW5UeXBlczp0LnRva2VuVHlwZXMsZ3JhbW1hck5hbWU6dC5ncmFtbWFyTmFtZX0pO3JldHVybiBKZShlLHI9Pk9iamVjdC5hc3NpZ24oe3R5cGU6emkuQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OfSxyKSl9ZnVuY3Rpb24gWHNlKHQsZSxyLG4pe2xldCBpPWRhKHQsdT0+bUZlKHUscikpLGE9d0ZlKHQsZSxyKSxzPWRhKHQsdT0+dkZlKHUscikpLGw9ZGEodCx1PT55RmUodSx0LG4scikpO3JldHVybiBpLmNvbmNhdChhLHMsbCl9ZnVuY3Rpb24gbUZlKHQsZSl7bGV0IHI9bmV3IERSO3QuYWNjZXB0KHIpO2xldCBuPXIuYWxsUHJvZHVjdGlvbnMsaT1VTChuLGdGZSksYT1EcyhpLGw9PmwubGVuZ3RoPjEpO3JldHVybiBKZShicihhKSxsPT57bGV0IHU9cmEobCksaD1lLmJ1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0LGwpLGY9TXModSksZD17bWVzc2FnZTpoLHR5cGU6emkuRFVQTElDQVRFX1BST0RVQ1RJT05TLHJ1bGVOYW1lOnQubmFtZSxkc2xOYW1lOmYsb2NjdXJyZW5jZTp1LmlkeH0scD1qc2UodSk7cmV0dXJuIHAmJihkLnBhcmFtZXRlcj1wKSxkfSl9ZnVuY3Rpb24gZ0ZlKHQpe3JldHVybmAke01zKHQpfV8jXyR7dC5pZHh9XyNfJHtqc2UodCl9YH1mdW5jdGlvbiBqc2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBrcj90LnRlcm1pbmFsVHlwZS5uYW1lOnQgaW5zdGFuY2VvZiBubj90Lm5vblRlcm1pbmFsTmFtZToiIn1mdW5jdGlvbiB5RmUodCxlLHIsbil7bGV0IGk9W107aWYocXIoZSwocyxsKT0+bC5uYW1lPT09dC5uYW1lP3MrMTpzLDApPjEpe2xldCBzPW4uYnVpbGREdXBsaWNhdGVSdWxlTmFtZUVycm9yKHt0b3BMZXZlbFJ1bGU6dCxncmFtbWFyTmFtZTpyfSk7aS5wdXNoKHttZXNzYWdlOnMsdHlwZTp6aS5EVVBMSUNBVEVfUlVMRV9OQU1FLHJ1bGVOYW1lOnQubmFtZX0pfXJldHVybiBpfWZ1bmN0aW9uIEtzZSh0LGUscil7bGV0IG49W10saTtyZXR1cm4gSG4oZSx0KXx8KGk9YEludmFsaWQgcnVsZSBvdmVycmlkZSwgcnVsZTogLT4ke3R9PC0gY2Fubm90IGJlIG92ZXJyaWRkZW4gaW4gdGhlIGdyYW1tYXI6IC0+JHtyfTwtYXMgaXQgaXMgbm90IGRlZmluZWQgaW4gYW55IG9mIHRoZSBzdXBlciBncmFtbWFycyBgLG4ucHVzaCh7bWVzc2FnZTppLHR5cGU6emkuSU5WQUxJRF9SVUxFX09WRVJSSURFLHJ1bGVOYW1lOnR9KSksbn1mdW5jdGlvbiBSUih0LGUscixuPVtdKXtsZXQgaT1bXSxhPUpUKGUuZGVmaW5pdGlvbik7aWYoY3IoYSkpcmV0dXJuW107e2xldCBzPXQubmFtZTtIbihhLHQpJiZpLnB1c2goe21lc3NhZ2U6ci5idWlsZExlZnRSZWN1cnNpb25FcnJvcih7dG9wTGV2ZWxSdWxlOnQsbGVmdFJlY3Vyc2lvblBhdGg6bn0pLHR5cGU6emkuTEVGVF9SRUNVUlNJT04scnVsZU5hbWU6c30pO2xldCB1PVhoKGEsbi5jb25jYXQoW3RdKSksaD1kYSh1LGY9PntsZXQgZD1ybihuKTtyZXR1cm4gZC5wdXNoKGYpLFJSKHQsZixyLGQpfSk7cmV0dXJuIGkuY29uY2F0KGgpfX1mdW5jdGlvbiBKVCh0KXtsZXQgZT1bXTtpZihjcih0KSlyZXR1cm4gZTtsZXQgcj1yYSh0KTtpZihyIGluc3RhbmNlb2Ygbm4pZS5wdXNoKHIucmVmZXJlbmNlZFJ1bGUpO2Vsc2UgaWYociBpbnN0YW5jZW9mIENufHxyIGluc3RhbmNlb2YgYW58fHIgaW5zdGFuY2VvZiBBbnx8ciBpbnN0YW5jZW9mIF9ufHxyIGluc3RhbmNlb2Ygdm58fHIgaW5zdGFuY2VvZiBMcillPWUuY29uY2F0KEpUKHIuZGVmaW5pdGlvbikpO2Vsc2UgaWYociBpbnN0YW5jZW9mIHhuKWU9V3IoSmUoci5kZWZpbml0aW9uLGE9PkpUKGEuZGVmaW5pdGlvbikpKTtlbHNlIGlmKCEociBpbnN0YW5jZW9mIGtyKSl0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKTtsZXQgbj1KZChyKSxpPXQubGVuZ3RoPjE7aWYobiYmaSl7bGV0IGE9bWkodCk7cmV0dXJuIGUuY29uY2F0KEpUKGEpKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIFFzZSh0LGUpe2xldCByPW5ldyBmMjt0LmFjY2VwdChyKTtsZXQgbj1yLmFsdGVybmF0aW9ucztyZXR1cm4gZGEobixhPT57bGV0IHM9THUoYS5kZWZpbml0aW9uKTtyZXR1cm4gZGEocywobCx1KT0+e2xldCBoPWpUKFtsXSxbXSxPdSwxKTtyZXR1cm4gY3IoaCk/W3ttZXNzYWdlOmUuYnVpbGRFbXB0eUFsdGVybmF0aW9uRXJyb3Ioe3RvcExldmVsUnVsZTp0LGFsdGVybmF0aW9uOmEsZW1wdHlDaG9pY2VJZHg6dX0pLHR5cGU6emkuTk9ORV9MQVNUX0VNUFRZX0FMVCxydWxlTmFtZTp0Lm5hbWUsb2NjdXJyZW5jZTphLmlkeCxhbHRlcm5hdGl2ZTp1KzF9XTpbXX0pfSl9ZnVuY3Rpb24gWnNlKHQsZSxyKXtsZXQgbj1uZXcgZjI7dC5hY2NlcHQobik7bGV0IGk9bi5hbHRlcm5hdGlvbnM7cmV0dXJuIGk9amgoaSxzPT5zLmlnbm9yZUFtYmlndWl0aWVzPT09ITApLGRhKGkscz0+e2xldCBsPXMuaWR4LHU9cy5tYXhMb29rYWhlYWR8fGUsaD1uZyhsLHQsdSxzKSxmPXhGZShoLHMsdCxyKSxkPWJGZShoLHMsdCxyKTtyZXR1cm4gZi5jb25jYXQoZCl9KX1mdW5jdGlvbiB2RmUodCxlKXtsZXQgcj1uZXcgZjI7dC5hY2NlcHQocik7bGV0IG49ci5hbHRlcm5hdGlvbnM7cmV0dXJuIGRhKG4sYT0+YS5kZWZpbml0aW9uLmxlbmd0aD4yNTU/W3ttZXNzYWdlOmUuYnVpbGRUb29NYW55QWx0ZXJuYXRpdmVzRXJyb3Ioe3RvcExldmVsUnVsZTp0LGFsdGVybmF0aW9uOmF9KSx0eXBlOnppLlRPT19NQU5ZX0FMVFMscnVsZU5hbWU6dC5uYW1lLG9jY3VycmVuY2U6YS5pZHh9XTpbXSl9ZnVuY3Rpb24gSnNlKHQsZSxyKXtsZXQgbj1bXTtyZXR1cm4gQ2UodCxpPT57bGV0IGE9bmV3IE5SO2kuYWNjZXB0KGEpO2xldCBzPWEuYWxsUHJvZHVjdGlvbnM7Q2UocyxsPT57bGV0IHU9aDIobCksaD1sLm1heExvb2thaGVhZHx8ZSxmPWwuaWR4LHA9aWcoZixpLHUsaClbMF07aWYoY3IoV3IocCkpKXtsZXQgbT1yLmJ1aWxkRW1wdHlSZXBldGl0aW9uRXJyb3Ioe3RvcExldmVsUnVsZTppLHJlcGV0aXRpb246bH0pO24ucHVzaCh7bWVzc2FnZTptLHR5cGU6emkuTk9fTk9OX0VNUFRZX0xPT0tBSEVBRCxydWxlTmFtZTppLm5hbWV9KX19KX0pLG59ZnVuY3Rpb24geEZlKHQsZSxyLG4pe2xldCBpPVtdLGE9cXIodCwobCx1LGgpPT4oZS5kZWZpbml0aW9uW2hdLmlnbm9yZUFtYmlndWl0aWVzPT09ITB8fENlKHUsZj0+e2xldCBkPVtoXTtDZSh0LChwLG0pPT57aCE9PW0mJlpUKHAsZikmJmUuZGVmaW5pdGlvblttXS5pZ25vcmVBbWJpZ3VpdGllcyE9PSEwJiZkLnB1c2gobSl9KSxkLmxlbmd0aD4xJiYhWlQoaSxmKSYmKGkucHVzaChmKSxsLnB1c2goe2FsdHM6ZCxwYXRoOmZ9KSl9KSxsKSxbXSk7cmV0dXJuIEplKGEsbD0+e2xldCB1PUplKGwuYWx0cyxmPT5mKzEpO3JldHVybnttZXNzYWdlOm4uYnVpbGRBbHRlcm5hdGlvbkFtYmlndWl0eUVycm9yKHt0b3BMZXZlbFJ1bGU6cixhbHRlcm5hdGlvbjplLGFtYmlndWl0eUluZGljZXM6dSxwcmVmaXhQYXRoOmwucGF0aH0pLHR5cGU6emkuQU1CSUdVT1VTX0FMVFMscnVsZU5hbWU6ci5uYW1lLG9jY3VycmVuY2U6ZS5pZHgsYWx0ZXJuYXRpdmVzOmwuYWx0c319KX1mdW5jdGlvbiBiRmUodCxlLHIsbil7bGV0IGk9cXIodCwocyxsLHUpPT57bGV0IGg9SmUobCxmPT4oe2lkeDp1LHBhdGg6Zn0pKTtyZXR1cm4gcy5jb25jYXQoaCl9LFtdKTtyZXR1cm4gVGMoZGEoaSxzPT57aWYoZS5kZWZpbml0aW9uW3MuaWR4XS5pZ25vcmVBbWJpZ3VpdGllcz09PSEwKXJldHVybltdO2xldCB1PXMuaWR4LGg9cy5wYXRoLGY9WXIoaSxwPT5lLmRlZmluaXRpb25bcC5pZHhdLmlnbm9yZUFtYmlndWl0aWVzIT09ITAmJnAuaWR4PHUmJldzZShwLnBhdGgsaCkpO3JldHVybiBKZShmLHA9PntsZXQgbT1bcC5pZHgrMSx1KzFdLGc9ZS5pZHg9PT0wPyIiOmUuaWR4O3JldHVybnttZXNzYWdlOm4uYnVpbGRBbHRlcm5hdGlvblByZWZpeEFtYmlndWl0eUVycm9yKHt0b3BMZXZlbFJ1bGU6cixhbHRlcm5hdGlvbjplLGFtYmlndWl0eUluZGljZXM6bSxwcmVmaXhQYXRoOnAucGF0aH0pLHR5cGU6emkuQU1CSUdVT1VTX1BSRUZJWF9BTFRTLHJ1bGVOYW1lOnIubmFtZSxvY2N1cnJlbmNlOmcsYWx0ZXJuYXRpdmVzOm19fSl9KSl9ZnVuY3Rpb24gd0ZlKHQsZSxyKXtsZXQgbj1bXSxpPUplKGUsYT0+YS5uYW1lKTtyZXR1cm4gQ2UodCxhPT57bGV0IHM9YS5uYW1lO2lmKEhuKGkscykpe2xldCBsPXIuYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKGEpO24ucHVzaCh7bWVzc2FnZTpsLHR5cGU6emkuQ09ORkxJQ1RfVE9LRU5TX1JVTEVTX05BTUVTUEFDRSxydWxlTmFtZTpzfSl9fSksbn12YXIgRFIsZjIsTlIsZDI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO0lzKCk7bnMoKTthZygpO3UyKCk7cjAoKTtvKHFzZSwidmFsaWRhdGVMb29rYWhlYWQiKTtvKFhzZSwidmFsaWRhdGVHcmFtbWFyIik7byhtRmUsInZhbGlkYXRlRHVwbGljYXRlUHJvZHVjdGlvbnMiKTtvKGdGZSwiaWRlbnRpZnlQcm9kdWN0aW9uRm9yRHVwbGljYXRlcyIpO28oanNlLCJnZXRFeHRyYVByb2R1Y3Rpb25Bcmd1bWVudCIpO0RSPWNsYXNzIGV4dGVuZHMgcnN7c3RhdGlje28odGhpcywiT2NjdXJyZW5jZVZhbGlkYXRpb25Db2xsZWN0b3IiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hbGxQcm9kdWN0aW9ucz1bXX12aXNpdE5vblRlcm1pbmFsKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdE9wdGlvbihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0QWx0ZXJuYXRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0VGVybWluYWwoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfX07byh5RmUsInZhbGlkYXRlUnVsZURvZXNOb3RBbHJlYWR5RXhpc3QiKTtvKEtzZSwidmFsaWRhdGVSdWxlSXNPdmVycmlkZGVuIik7byhSUiwidmFsaWRhdGVOb0xlZnRSZWN1cnNpb24iKTtvKEpULCJnZXRGaXJzdE5vbmVUZXJtaW5hbCIpO2YyPWNsYXNzIGV4dGVuZHMgcnN7c3RhdGlje28odGhpcywiT3JDb2xsZWN0b3IiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hbHRlcm5hdGlvbnM9W119dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmFsdGVybmF0aW9ucy5wdXNoKGUpfX07byhRc2UsInZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlIik7byhac2UsInZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMiKTtOUj1jbGFzcyBleHRlbmRzIHJze3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb25Db2xsZWN0b3IiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hbGxQcm9kdWN0aW9ucz1bXX12aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9fTtvKHZGZSwidmFsaWRhdGVUb29NYW55QWx0cyIpO28oSnNlLCJ2YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgiKTtvKHhGZSwiY2hlY2tBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyIpO28oYkZlLCJjaGVja1ByZWZpeEFsdGVybmF0aXZlc0FtYmlndWl0aWVzIik7byh3RmUsImNoZWNrVGVybWluYWxBbmROb25lVGVybWluYWxzTmFtZVNwYWNlIil9KTtmdW5jdGlvbiBlb2UodCl7bGV0IGU9cWgodCx7ZXJyTXNnUHJvdmlkZXI6UHNlfSkscj17fTtyZXR1cm4gQ2UodC5ydWxlcyxuPT57cltuLm5hbWVdPW59KSxCc2UocixlLmVyck1zZ1Byb3ZpZGVyKX1mdW5jdGlvbiB0b2UodCl7cmV0dXJuIHQ9cWgodCx7ZXJyTXNnUHJvdmlkZXI6Qmx9KSxYc2UodC5ydWxlcyx0LnRva2VuVHlwZXMsdC5lcnJNc2dQcm92aWRlcix0LmdyYW1tYXJOYW1lKX12YXIgcm9lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtGc2UoKTtkMigpO3RnKCk7byhlb2UsInJlc29sdmVHcmFtbWFyIik7byh0b2UsInZhbGlkYXRlR3JhbW1hciIpfSk7ZnVuY3Rpb24gcmYodCl7cmV0dXJuIEhuKG9vZSx0Lm5hbWUpfXZhciBub2UsaW9lLGFvZSxzb2Usb29lLHNnLGEwLHAyLG0yLGcyLG9nPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtub2U9Ik1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiIsaW9lPSJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiIsYW9lPSJFYXJseUV4aXRFeGNlcHRpb24iLHNvZT0iTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24iLG9vZT1bbm9lLGlvZSxhb2Usc29lXTtPYmplY3QuZnJlZXplKG9vZSk7byhyZiwiaXNSZWNvZ25pdGlvbkV4Y2VwdGlvbiIpO3NnPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiUmVjb2duaXRpb25FeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUpLHRoaXMudG9rZW49cix0aGlzLnJlc3luY2VkVG9rZW5zPVtdLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKX19LGEwPWNsYXNzIGV4dGVuZHMgc2d7c3RhdGlje28odGhpcywiTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPW5vZX19LHAyPWNsYXNzIGV4dGVuZHMgc2d7c3RhdGlje28odGhpcywiTm9WaWFibGVBbHRFeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoZSxyKSx0aGlzLnByZXZpb3VzVG9rZW49bix0aGlzLm5hbWU9aW9lfX0sbTI9Y2xhc3MgZXh0ZW5kcyBzZ3tzdGF0aWN7byh0aGlzLCJOb3RBbGxJbnB1dFBhcnNlZEV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyKSx0aGlzLm5hbWU9c29lfX0sZzI9Y2xhc3MgZXh0ZW5kcyBzZ3tzdGF0aWN7byh0aGlzLCJFYXJseUV4aXRFeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoZSxyKSx0aGlzLnByZXZpb3VzVG9rZW49bix0aGlzLm5hbWU9YW9lfX19KTtmdW5jdGlvbiBURmUodCxlLHIsbixpLGEscyl7bGV0IGw9dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQobixpKSx1PXRoaXMuZmlyc3RBZnRlclJlcE1hcFtsXTtpZih1PT09dm9pZCAwKXtsZXQgcD10aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKSxtPXRoaXMuZ2V0R0FzdFByb2R1Y3Rpb25zKClbcF07dT1uZXcgYShtLGkpLnN0YXJ0V2Fsa2luZygpLHRoaXMuZmlyc3RBZnRlclJlcE1hcFtsXT11fWxldCBoPXUudG9rZW4sZj11Lm9jY3VycmVuY2UsZD11LmlzRW5kT2ZSdWxlO3RoaXMuUlVMRV9TVEFDSy5sZW5ndGg9PT0xJiZkJiZoPT09dm9pZCAwJiYoaD1vbyxmPTEpLCEoaD09PXZvaWQgMHx8Zj09PXZvaWQgMCkmJnRoaXMuc2hvdWxkSW5SZXBldGl0aW9uUmVjb3ZlcnlCZVRyaWVkKGgsZixzKSYmdGhpcy50cnlJblJlcGV0aXRpb25SZWNvdmVyeSh0LGUscixoKX12YXIgTVIsT1IsSVIsZWssUFI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpMCgpO0h0KCk7b2coKTtwUigpO0lzKCk7TVI9e30sT1I9IkluUnVsZVJlY292ZXJ5RXhjZXB0aW9uIixJUj1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIkluUnVsZVJlY292ZXJ5RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5uYW1lPU9SfX0sZWs9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb3ZlcmFibGUiKX1pbml0UmVjb3ZlcmFibGUoZSl7dGhpcy5maXJzdEFmdGVyUmVwTWFwPXt9LHRoaXMucmVzeW5jRm9sbG93cz17fSx0aGlzLnJlY292ZXJ5RW5hYmxlZD1JdChlLCJyZWNvdmVyeUVuYWJsZWQiKT9lLnJlY292ZXJ5RW5hYmxlZDppcy5yZWNvdmVyeUVuYWJsZWQsdGhpcy5yZWNvdmVyeUVuYWJsZWQmJih0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeT1URmUpfWdldFRva2VuVG9JbnNlcnQoZSl7bGV0IHI9bjAoZSwiIixOYU4sTmFOLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIHIuaXNJbnNlcnRlZEluUmVjb3Zlcnk9ITAscn1jYW5Ub2tlblR5cGVCZUluc2VydGVkSW5SZWNvdmVyeShlKXtyZXR1cm4hMH1jYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KGUpe3JldHVybiEwfXRyeUluUmVwZXRpdGlvblJlY292ZXJ5KGUscixuLGkpe2xldCBhPXRoaXMuZmluZFJlU3luY1Rva2VuVHlwZSgpLHM9dGhpcy5leHBvcnRMZXhlclN0YXRlKCksbD1bXSx1PSExLGg9dGhpcy5MQSgxKSxmPXRoaXMuTEEoMSksZD1vKCgpPT57bGV0IHA9dGhpcy5MQSgwKSxtPXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6aSxhY3R1YWw6aCxwcmV2aW91czpwLHJ1bGVOYW1lOnRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpfSksZz1uZXcgYTAobSxoLHRoaXMuTEEoMCkpO2cucmVzeW5jZWRUb2tlbnM9THUobCksdGhpcy5TQVZFX0VSUk9SKGcpfSwiZ2VuZXJhdGVFcnJvck1lc3NhZ2UiKTtmb3IoOyF1OylpZih0aGlzLnRva2VuTWF0Y2hlcihmLGkpKXtkKCk7cmV0dXJufWVsc2UgaWYobi5jYWxsKHRoaXMpKXtkKCksZS5hcHBseSh0aGlzLHIpO3JldHVybn1lbHNlIHRoaXMudG9rZW5NYXRjaGVyKGYsYSk/dT0hMDooZj10aGlzLlNLSVBfVE9LRU4oKSx0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKGYsbCkpO3RoaXMuaW1wb3J0TGV4ZXJTdGF0ZShzKX1zaG91bGRJblJlcGV0aXRpb25SZWNvdmVyeUJlVHJpZWQoZSxyLG4pe3JldHVybiEobj09PSExfHx0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGUpfHx0aGlzLmlzQmFja1RyYWNraW5nKCl8fHRoaXMuY2FuUGVyZm9ybUluUnVsZVJlY292ZXJ5KGUsdGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKSkpfWdldEZvbGxvd3NGb3JJblJ1bGVSZWNvdmVyeShlLHIpe2xldCBuPXRoaXMuZ2V0Q3VycmVudEdyYW1tYXJQYXRoKGUscik7cmV0dXJuIHRoaXMuZ2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhuKX10cnlJblJ1bGVSZWNvdmVyeShlLHIpe2lmKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihlLHIpKXJldHVybiB0aGlzLmdldFRva2VuVG9JbnNlcnQoZSk7aWYodGhpcy5jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuRGVsZXRpb24oZSkpe2xldCBuPXRoaXMuU0tJUF9UT0tFTigpO3JldHVybiB0aGlzLmNvbnN1bWVUb2tlbigpLG59dGhyb3cgbmV3IElSKCJzYWQgc2FkIHBhbmRhIil9Y2FuUGVyZm9ybUluUnVsZVJlY292ZXJ5KGUscil7cmV0dXJuIHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihlLHIpfHx0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihlKX1jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuSW5zZXJ0aW9uKGUscil7aWYoIXRoaXMuY2FuVG9rZW5UeXBlQmVJbnNlcnRlZEluUmVjb3ZlcnkoZSl8fGNyKHIpKXJldHVybiExO2xldCBuPXRoaXMuTEEoMSk7cmV0dXJuIFphKHIsYT0+dGhpcy50b2tlbk1hdGNoZXIobixhKSkhPT12b2lkIDB9Y2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGUpe3JldHVybiB0aGlzLmNhblRva2VuVHlwZUJlRGVsZXRlZEluUmVjb3ZlcnkoZSk/dGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgyKSxlKTohMX1pc0luQ3VycmVudFJ1bGVSZVN5bmNTZXQoZSl7bGV0IHI9dGhpcy5nZXRDdXJyRm9sbG93S2V5KCksbj10aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkocik7cmV0dXJuIEhuKG4sZSl9ZmluZFJlU3luY1Rva2VuVHlwZSgpe2xldCBlPXRoaXMuZmxhdHRlbkZvbGxvd1NldCgpLHI9dGhpcy5MQSgxKSxuPTI7Zm9yKDs7KXtsZXQgaT1aYShlLGE9Pm8yKHIsYSkpO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7cj10aGlzLkxBKG4pLG4rK319Z2V0Q3VyckZvbGxvd0tleSgpe2lmKHRoaXMuUlVMRV9TVEFDSy5sZW5ndGg9PT0xKXJldHVybiBNUjtsZXQgZT10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKSxyPXRoaXMuZ2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleCgpLG49dGhpcy5nZXRQcmV2aW91c0V4cGxpY2l0UnVsZVNob3J0TmFtZSgpO3JldHVybntydWxlTmFtZTp0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGUpLGlkeEluQ2FsbGluZ1J1bGU6cixpblJ1bGU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShuKX19YnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKXtsZXQgZT10aGlzLlJVTEVfU1RBQ0sscj10aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSztyZXR1cm4gSmUoZSwobixpKT0+aT09PTA/TVI6e3J1bGVOYW1lOnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUobiksaWR4SW5DYWxsaW5nUnVsZTpyW2ldLGluUnVsZTp0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGVbaS0xXSl9KX1mbGF0dGVuRm9sbG93U2V0KCl7bGV0IGU9SmUodGhpcy5idWlsZEZ1bGxGb2xsb3dLZXlTdGFjaygpLHI9PnRoaXMuZ2V0Rm9sbG93U2V0RnJvbUZvbGxvd0tleShyKSk7cmV0dXJuIFdyKGUpfWdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkoZSl7aWYoZT09PU1SKXJldHVybltvb107bGV0IHI9ZS5ydWxlTmFtZStlLmlkeEluQ2FsbGluZ1J1bGUrQlQrZS5pblJ1bGU7cmV0dXJuIHRoaXMucmVzeW5jRm9sbG93c1tyXX1hZGRUb1Jlc3luY1Rva2VucyhlLHIpe3JldHVybiB0aGlzLnRva2VuTWF0Y2hlcihlLG9vKXx8ci5wdXNoKGUpLHJ9cmVTeW5jVG8oZSl7bGV0IHI9W10sbj10aGlzLkxBKDEpO2Zvcig7dGhpcy50b2tlbk1hdGNoZXIobixlKT09PSExOyluPXRoaXMuU0tJUF9UT0tFTigpLHRoaXMuYWRkVG9SZXN5bmNUb2tlbnMobixyKTtyZXR1cm4gTHUocil9YXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KGUscixuLGksYSxzLGwpe31nZXRDdXJyZW50R3JhbW1hclBhdGgoZSxyKXtsZXQgbj10aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxpPXJuKHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLKTtyZXR1cm57cnVsZVN0YWNrOm4sb2NjdXJyZW5jZVN0YWNrOmksbGFzdFRvazplLGxhc3RUb2tPY2N1cnJlbmNlOnJ9fWdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKXtyZXR1cm4gSmUodGhpcy5SVUxFX1NUQUNLLGU9PnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoZSkpfX07byhURmUsImF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSIpfSk7ZnVuY3Rpb24gdGsodCxlLHIpe3JldHVybiByfGV8dH12YXIgcms9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHRrLCJnZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQiKX0pO3ZhciB6dSxCUj1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7dGcoKTtJcygpO2QyKCk7YWcoKTt6dT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMTGtMb29rYWhlYWRTdHJhdGVneSIpfWNvbnN0cnVjdG9yKGUpe3ZhciByO3RoaXMubWF4TG9va2FoZWFkPShyPWU/Lm1heExvb2thaGVhZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6aXMubWF4TG9va2FoZWFkfXZhbGlkYXRlKGUpe2xldCByPXRoaXMudmFsaWRhdGVOb0xlZnRSZWN1cnNpb24oZS5ydWxlcyk7aWYoY3Iocikpe2xldCBuPXRoaXMudmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmVzKGUucnVsZXMpLGk9dGhpcy52YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzKGUucnVsZXMsdGhpcy5tYXhMb29rYWhlYWQpLGE9dGhpcy52YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgoZS5ydWxlcyx0aGlzLm1heExvb2thaGVhZCk7cmV0dXJuWy4uLnIsLi4ubiwuLi5pLC4uLmFdfXJldHVybiByfXZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKGUpe3JldHVybiBkYShlLHI9PlJSKHIscixCbCkpfXZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhlKXtyZXR1cm4gZGEoZSxyPT5Rc2UocixCbCkpfXZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMoZSxyKXtyZXR1cm4gZGEoZSxuPT5ac2UobixyLEJsKSl9dmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKGUscil7cmV0dXJuIEpzZShlLHIsQmwpfWJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oZSl7cmV0dXJuIEdzZShlLnByb2RPY2N1cnJlbmNlLGUucnVsZSxlLm1heExvb2thaGVhZCxlLmhhc1ByZWRpY2F0ZXMsZS5keW5hbWljVG9rZW5zRW5hYmxlZCxWc2UpfWJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwoZSl7cmV0dXJuICRzZShlLnByb2RPY2N1cnJlbmNlLGUucnVsZSxlLm1heExvb2thaGVhZCxlLmR5bmFtaWNUb2tlbnNFbmFibGVkLGgyKGUucHJvZFR5cGUpLFVzZSl9fX0pO2Z1bmN0aW9uIGtGZSh0KXtuay5yZXNldCgpLHQuYWNjZXB0KG5rKTtsZXQgZT1uay5kc2xNZXRob2RzO3JldHVybiBuay5yZXNldCgpLGV9dmFyIGlrLEZSLG5rLGxvZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7SXMoKTtyaygpO25zKCk7QlIoKTtpaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJMb29rc0FoZWFkIil9aW5pdExvb2tzQWhlYWQoZSl7dGhpcy5keW5hbWljVG9rZW5zRW5hYmxlZD1JdChlLCJkeW5hbWljVG9rZW5zRW5hYmxlZCIpP2UuZHluYW1pY1Rva2Vuc0VuYWJsZWQ6aXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQsdGhpcy5tYXhMb29rYWhlYWQ9SXQoZSwibWF4TG9va2FoZWFkIik/ZS5tYXhMb29rYWhlYWQ6aXMubWF4TG9va2FoZWFkLHRoaXMubG9va2FoZWFkU3RyYXRlZ3k9SXQoZSwibG9va2FoZWFkU3RyYXRlZ3kiKT9lLmxvb2thaGVhZFN0cmF0ZWd5Om5ldyB6dSh7bWF4TG9va2FoZWFkOnRoaXMubWF4TG9va2FoZWFkfSksdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlPW5ldyBNYXB9cHJlQ29tcHV0ZUxvb2thaGVhZEZ1bmN0aW9ucyhlKXtDZShlLHI9Pnt0aGlzLlRSQUNFX0lOSVQoYCR7ci5uYW1lfSBSdWxlIExvb2thaGVhZGAsKCk9PntsZXR7YWx0ZXJuYXRpb246bixyZXBldGl0aW9uOmksb3B0aW9uOmEscmVwZXRpdGlvbk1hbmRhdG9yeTpzLHJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yOmwscmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6dX09a0ZlKHIpO0NlKG4saD0+e2xldCBmPWguaWR4PT09MD8iIjpoLmlkeDt0aGlzLlRSQUNFX0lOSVQoYCR7TXMoaCl9JHtmfWAsKCk9PntsZXQgZD10aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oe3Byb2RPY2N1cnJlbmNlOmguaWR4LHJ1bGU6cixtYXhMb29rYWhlYWQ6aC5tYXhMb29rYWhlYWR8fHRoaXMubWF4TG9va2FoZWFkLGhhc1ByZWRpY2F0ZXM6aC5oYXNQcmVkaWNhdGVzLGR5bmFtaWNUb2tlbnNFbmFibGVkOnRoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWR9KSxwPXRrKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtyLm5hbWVdLDI1NixoLmlkeCk7dGhpcy5zZXRMYUZ1bmNDYWNoZShwLGQpfSl9KSxDZShpLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsNzY4LCJSZXBldGl0aW9uIixoLm1heExvb2thaGVhZCxNcyhoKSl9KSxDZShhLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsNTEyLCJPcHRpb24iLGgubWF4TG9va2FoZWFkLE1zKGgpKX0pLENlKHMsaD0+e3RoaXMuY29tcHV0ZUxvb2thaGVhZEZ1bmMocixoLmlkeCwxMDI0LCJSZXBldGl0aW9uTWFuZGF0b3J5IixoLm1heExvb2thaGVhZCxNcyhoKSl9KSxDZShsLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTUzNiwiUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiLGgubWF4TG9va2FoZWFkLE1zKGgpKX0pLENlKHUsaD0+e3RoaXMuY29tcHV0ZUxvb2thaGVhZEZ1bmMocixoLmlkeCwxMjgwLCJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciIsaC5tYXhMb29rYWhlYWQsTXMoaCkpfSl9KX0pfWNvbXB1dGVMb29rYWhlYWRGdW5jKGUscixuLGksYSxzKXt0aGlzLlRSQUNFX0lOSVQoYCR7c30ke3I9PT0wPyIiOnJ9YCwoKT0+e2xldCBsPXRoaXMubG9va2FoZWFkU3RyYXRlZ3kuYnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbCh7cHJvZE9jY3VycmVuY2U6cixydWxlOmUsbWF4TG9va2FoZWFkOmF8fHRoaXMubWF4TG9va2FoZWFkLGR5bmFtaWNUb2tlbnNFbmFibGVkOnRoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQscHJvZFR5cGU6aX0pLHU9dGsodGhpcy5mdWxsUnVsZU5hbWVUb1Nob3J0W2UubmFtZV0sbixyKTt0aGlzLnNldExhRnVuY0NhY2hlKHUsbCl9KX1nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoZSxyKXtsZXQgbj10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtyZXR1cm4gdGsobixlLHIpfWdldExhRnVuY0Zyb21DYWNoZShlKXtyZXR1cm4gdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlLmdldChlKX1zZXRMYUZ1bmNDYWNoZShlLHIpe3RoaXMubG9va0FoZWFkRnVuY3NDYWNoZS5zZXQoZSxyKX19LEZSPWNsYXNzIGV4dGVuZHMgcnN7c3RhdGlje28odGhpcywiRHNsTWV0aG9kc0NvbGxlY3RvclZpc2l0b3IiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kc2xNZXRob2RzPXtvcHRpb246W10sYWx0ZXJuYXRpb246W10scmVwZXRpdGlvbjpbXSxyZXBldGl0aW9uV2l0aFNlcGFyYXRvcjpbXSxyZXBldGl0aW9uTWFuZGF0b3J5OltdLHJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yOltdfX1yZXNldCgpe3RoaXMuZHNsTWV0aG9kcz17b3B0aW9uOltdLGFsdGVybmF0aW9uOltdLHJlcGV0aXRpb246W10scmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6W10scmVwZXRpdGlvbk1hbmRhdG9yeTpbXSxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpbXX19dmlzaXRPcHRpb24oZSl7dGhpcy5kc2xNZXRob2RzLm9wdGlvbi5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uTWFuZGF0b3J5LnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihlKXt0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IucHVzaChlKX12aXNpdFJlcGV0aXRpb24oZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb24ucHVzaChlKX12aXNpdEFsdGVybmF0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5hbHRlcm5hdGlvbi5wdXNoKGUpfX0sbms9bmV3IEZSO28oa0ZlLCJjb2xsZWN0TWV0aG9kcyIpfSk7ZnVuY3Rpb24gJFIodCxlKXtpc05hTih0LnN0YXJ0T2Zmc2V0KT09PSEwPyh0LnN0YXJ0T2Zmc2V0PWUuc3RhcnRPZmZzZXQsdC5lbmRPZmZzZXQ9ZS5lbmRPZmZzZXQpOnQuZW5kT2Zmc2V0PGUuZW5kT2Zmc2V0JiYodC5lbmRPZmZzZXQ9ZS5lbmRPZmZzZXQpfWZ1bmN0aW9uIFZSKHQsZSl7aXNOYU4odC5zdGFydE9mZnNldCk9PT0hMD8odC5zdGFydE9mZnNldD1lLnN0YXJ0T2Zmc2V0LHQuc3RhcnRDb2x1bW49ZS5zdGFydENvbHVtbix0LnN0YXJ0TGluZT1lLnN0YXJ0TGluZSx0LmVuZE9mZnNldD1lLmVuZE9mZnNldCx0LmVuZENvbHVtbj1lLmVuZENvbHVtbix0LmVuZExpbmU9ZS5lbmRMaW5lKTp0LmVuZE9mZnNldDxlLmVuZE9mZnNldCYmKHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0LHQuZW5kQ29sdW1uPWUuZW5kQ29sdW1uLHQuZW5kTGluZT1lLmVuZExpbmUpfWZ1bmN0aW9uIGNvZSh0LGUscil7dC5jaGlsZHJlbltyXT09PXZvaWQgMD90LmNoaWxkcmVuW3JdPVtlXTp0LmNoaWxkcmVuW3JdLnB1c2goZSl9ZnVuY3Rpb24gdW9lKHQsZSxyKXt0LmNoaWxkcmVuW2VdPT09dm9pZCAwP3QuY2hpbGRyZW5bZV09W3JdOnQuY2hpbGRyZW5bZV0ucHVzaChyKX12YXIgaG9lPU0oKCk9PnsidXNlIHN0cmljdCI7bygkUiwic2V0Tm9kZUxvY2F0aW9uT25seU9mZnNldCIpO28oVlIsInNldE5vZGVMb2NhdGlvbkZ1bGwiKTtvKGNvZSwiYWRkVGVybWluYWxUb0NzdCIpO28odW9lLCJhZGROb25lVGVybWluYWxUb0NzdCIpfSk7ZnVuY3Rpb24gVVIodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxFRmUse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExLHZhbHVlOmV9KX12YXIgRUZlLGZvZT1NKCgpPT57InVzZSBzdHJpY3QiO0VGZT0ibmFtZSI7byhVUiwiZGVmaW5lTmFtZVByb3AiKX0pO2Z1bmN0aW9uIFNGZSh0LGUpe2xldCByPXpyKHQpLG49ci5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IGE9cltpXSxzPXRbYV0sbD1zLmxlbmd0aDtmb3IobGV0IHU9MDt1PGw7dSsrKXtsZXQgaD1zW3VdO2gudG9rZW5UeXBlSWR4PT09dm9pZCAwJiZ0aGlzW2gubmFtZV0oaC5jaGlsZHJlbixlKX19fWZ1bmN0aW9uIGRvZSh0LGUpe2xldCByPW8oZnVuY3Rpb24oKXt9LCJkZXJpdmVkQ29uc3RydWN0b3IiKTtVUihyLHQrIkJhc2VTZW1hbnRpY3MiKTtsZXQgbj17dmlzaXQ6byhmdW5jdGlvbihpLGEpe2lmKE10KGkpJiYoaT1pWzBdKSwhZHIoaSkpcmV0dXJuIHRoaXNbaS5uYW1lXShpLmNoaWxkcmVuLGEpfSwidmlzaXQiKSx2YWxpZGF0ZVZpc2l0b3I6byhmdW5jdGlvbigpe2xldCBpPUNGZSh0aGlzLGUpO2lmKCFjcihpKSl7bGV0IGE9SmUoaSxzPT5zLm1zZyk7dGhyb3cgRXJyb3IoYEVycm9ycyBEZXRlY3RlZCBpbiBDU1QgVmlzaXRvciA8JHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9PjoKCSR7YS5qb2luKGAKCmApLnJlcGxhY2UoL1xuL2csYAoJYCl9YCl9fSwidmFsaWRhdGVWaXNpdG9yIil9O3JldHVybiByLnByb3RvdHlwZT1uLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5fUlVMRV9OQU1FUz1lLHJ9ZnVuY3Rpb24gcG9lKHQsZSxyKXtsZXQgbj1vKGZ1bmN0aW9uKCl7fSwiZGVyaXZlZENvbnN0cnVjdG9yIik7VVIobix0KyJCYXNlU2VtYW50aWNzV2l0aERlZmF1bHRzIik7bGV0IGk9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSk7cmV0dXJuIENlKGUsYT0+e2lbYV09U0ZlfSksbi5wcm90b3R5cGU9aSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG59ZnVuY3Rpb24gQ0ZlKHQsZSl7cmV0dXJuIEFGZSh0LGUpfWZ1bmN0aW9uIEFGZSh0LGUpe2xldCByPVlyKGUsaT0+RWkodFtpXSk9PT0hMSksbj1KZShyLGk9Pih7bXNnOmBNaXNzaW5nIHZpc2l0b3IgbWV0aG9kOiA8JHtpfT4gb24gJHt0LmNvbnN0cnVjdG9yLm5hbWV9IENTVCBWaXNpdG9yLmAsdHlwZTpIUi5NSVNTSU5HX01FVEhPRCxtZXRob2ROYW1lOml9KSk7cmV0dXJuIFRjKG4pfXZhciBIUixtb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO2ZvZSgpO28oU0ZlLCJkZWZhdWx0VmlzaXQiKTtvKGRvZSwiY3JlYXRlQmFzZVNlbWFudGljVmlzaXRvckNvbnN0cnVjdG9yIik7byhwb2UsImNyZWF0ZUJhc2VWaXNpdG9yQ29uc3RydWN0b3JXaXRoRGVmYXVsdHMiKTsoZnVuY3Rpb24odCl7dFt0LlJFRFVOREFOVF9NRVRIT0Q9MF09IlJFRFVOREFOVF9NRVRIT0QiLHRbdC5NSVNTSU5HX01FVEhPRD0xXT0iTUlTU0lOR19NRVRIT0QifSkoSFJ8fChIUj17fSkpO28oQ0ZlLCJ2YWxpZGF0ZVZpc2l0b3IiKTtvKEFGZSwidmFsaWRhdGVNaXNzaW5nQ3N0TWV0aG9kcyIpfSk7dmFyIGxrLGdvZT1NKCgpPT57InVzZSBzdHJpY3QiO2hvZSgpO0h0KCk7bW9lKCk7SXMoKTtsaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUcmVlQnVpbGRlciIpfWluaXRUcmVlQnVpbGRlcihlKXtpZih0aGlzLkNTVF9TVEFDSz1bXSx0aGlzLm91dHB1dENzdD1lLm91dHB1dENzdCx0aGlzLm5vZGVMb2NhdGlvblRyYWNraW5nPUl0KGUsIm5vZGVMb2NhdGlvblRyYWNraW5nIik/ZS5ub2RlTG9jYXRpb25UcmFja2luZzppcy5ub2RlTG9jYXRpb25UcmFja2luZywhdGhpcy5vdXRwdXRDc3QpdGhpcy5jc3RJbnZvY2F0aW9uU3RhdGVVcGRhdGU9Sm4sdGhpcy5jc3RGaW5hbGx5U3RhdGVVcGRhdGU9Sm4sdGhpcy5jc3RQb3N0VGVybWluYWw9Sm4sdGhpcy5jc3RQb3N0Tm9uVGVybWluYWw9Sm4sdGhpcy5jc3RQb3N0UnVsZT1KbjtlbHNlIGlmKC9mdWxsL2kudGVzdCh0aGlzLm5vZGVMb2NhdGlvblRyYWNraW5nKSl0aGlzLnJlY292ZXJ5RW5hYmxlZD8odGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49VlIsdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1WUix0aGlzLmNzdFBvc3RSdWxlPUpuLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVjb3ZlcnkpOih0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ub2tlbj1Kbix0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlPUpuLHRoaXMuY3N0UG9zdFJ1bGU9dGhpcy5jc3RQb3N0UnVsZUZ1bGwsdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uPXRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWd1bGFyKTtlbHNlIGlmKC9vbmx5T2Zmc2V0L2kudGVzdCh0aGlzLm5vZGVMb2NhdGlvblRyYWNraW5nKSl0aGlzLnJlY292ZXJ5RW5hYmxlZD8odGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49JFIsdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT0kUix0aGlzLmNzdFBvc3RSdWxlPUpuLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25Pbmx5T2Zmc2V0UmVjb3ZlcnkpOih0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ub2tlbj1Kbix0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlPUpuLHRoaXMuY3N0UG9zdFJ1bGU9dGhpcy5jc3RQb3N0UnVsZU9ubHlPZmZzZXQsdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uPXRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKTtlbHNlIGlmKC9ub25lL2kudGVzdCh0aGlzLm5vZGVMb2NhdGlvblRyYWNraW5nKSl0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ub2tlbj1Kbix0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlPUpuLHRoaXMuY3N0UG9zdFJ1bGU9Sm4sdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uPUpuO2Vsc2UgdGhyb3cgRXJyb3IoYEludmFsaWQgPG5vZGVMb2NhdGlvblRyYWNraW5nPiBjb25maWcgb3B0aW9uOiAiJHtlLm5vZGVMb2NhdGlvblRyYWNraW5nfSJgKX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KGUpe2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0Ok5hTixlbmRPZmZzZXQ6TmFOfX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlZ3VsYXIoZSl7ZS5sb2NhdGlvbj17c3RhcnRPZmZzZXQ6dGhpcy5MQSgxKS5zdGFydE9mZnNldCxlbmRPZmZzZXQ6TmFOfX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlY292ZXJ5KGUpe2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0Ok5hTixzdGFydExpbmU6TmFOLHN0YXJ0Q29sdW1uOk5hTixlbmRPZmZzZXQ6TmFOLGVuZExpbmU6TmFOLGVuZENvbHVtbjpOYU59fXNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcihlKXtsZXQgcj10aGlzLkxBKDEpO2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0OnIuc3RhcnRPZmZzZXQsc3RhcnRMaW5lOnIuc3RhcnRMaW5lLHN0YXJ0Q29sdW1uOnIuc3RhcnRDb2x1bW4sZW5kT2Zmc2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX1jc3RJbnZvY2F0aW9uU3RhdGVVcGRhdGUoZSl7bGV0IHI9e25hbWU6ZSxjaGlsZHJlbjpPYmplY3QuY3JlYXRlKG51bGwpfTt0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb24ociksdGhpcy5DU1RfU1RBQ0sucHVzaChyKX1jc3RGaW5hbGx5U3RhdGVVcGRhdGUoKXt0aGlzLkNTVF9TVEFDSy5wb3AoKX1jc3RQb3N0UnVsZUZ1bGwoZSl7bGV0IHI9dGhpcy5MQSgwKSxuPWUubG9jYXRpb247bi5zdGFydE9mZnNldDw9ci5zdGFydE9mZnNldD8obi5lbmRPZmZzZXQ9ci5lbmRPZmZzZXQsbi5lbmRMaW5lPXIuZW5kTGluZSxuLmVuZENvbHVtbj1yLmVuZENvbHVtbik6KG4uc3RhcnRPZmZzZXQ9TmFOLG4uc3RhcnRMaW5lPU5hTixuLnN0YXJ0Q29sdW1uPU5hTil9Y3N0UG9zdFJ1bGVPbmx5T2Zmc2V0KGUpe2xldCByPXRoaXMuTEEoMCksbj1lLmxvY2F0aW9uO24uc3RhcnRPZmZzZXQ8PXIuc3RhcnRPZmZzZXQ/bi5lbmRPZmZzZXQ9ci5lbmRPZmZzZXQ6bi5zdGFydE9mZnNldD1OYU59Y3N0UG9zdFRlcm1pbmFsKGUscil7bGV0IG49dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO2NvZShuLHIsZSksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW4obi5sb2NhdGlvbixyKX1jc3RQb3N0Tm9uVGVybWluYWwoZSxyKXtsZXQgbj10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07dW9lKG4scixlKSx0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlKG4ubG9jYXRpb24sZS5sb2NhdGlvbil9Z2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3Rvcigpe2lmKGRyKHRoaXMuYmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3Rvcikpe2xldCBlPWRvZSh0aGlzLmNsYXNzTmFtZSx6cih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSk7cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3Rvcj1lLGV9cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3Rvcn1nZXRCYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzKCl7aWYoZHIodGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yKSl7bGV0IGU9cG9lKHRoaXMuY2xhc3NOYW1lLHpyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLHRoaXMuZ2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcigpKTtyZXR1cm4gdGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yPWUsZX1yZXR1cm4gdGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yfWdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKXtsZXQgZT10aGlzLlJVTEVfU1RBQ0s7cmV0dXJuIGVbZS5sZW5ndGgtMV19Z2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKXtsZXQgZT10aGlzLlJVTEVfU1RBQ0s7cmV0dXJuIGVbZS5sZW5ndGgtMl19Z2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleCgpe2xldCBlPXRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTFdfX19KTt2YXIgY2sseW9lPU0oKCk9PnsidXNlIHN0cmljdCI7SXMoKTtjaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJMZXhlckFkYXB0ZXIiKX1pbml0TGV4ZXJBZGFwdGVyKCl7dGhpcy50b2tWZWN0b3I9W10sdGhpcy50b2tWZWN0b3JMZW5ndGg9MCx0aGlzLmN1cnJJZHg9LTF9c2V0IGlucHV0KGUpe2lmKHRoaXMuc2VsZkFuYWx5c2lzRG9uZSE9PSEwKXRocm93IEVycm9yKCJNaXNzaW5nIDxwZXJmb3JtU2VsZkFuYWx5c2lzPiBpbnZvY2F0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIFBhcnNlcidzIGNvbnN0cnVjdG9yLiIpO3RoaXMucmVzZXQoKSx0aGlzLnRva1ZlY3Rvcj1lLHRoaXMudG9rVmVjdG9yTGVuZ3RoPWUubGVuZ3RofWdldCBpbnB1dCgpe3JldHVybiB0aGlzLnRva1ZlY3Rvcn1TS0lQX1RPS0VOKCl7cmV0dXJuIHRoaXMuY3VycklkeDw9dGhpcy50b2tWZWN0b3IubGVuZ3RoLTI/KHRoaXMuY29uc3VtZVRva2VuKCksdGhpcy5MQSgxKSk6bGd9TEEoZSl7bGV0IHI9dGhpcy5jdXJySWR4K2U7cmV0dXJuIHI8MHx8dGhpcy50b2tWZWN0b3JMZW5ndGg8PXI/bGc6dGhpcy50b2tWZWN0b3Jbcl19Y29uc3VtZVRva2VuKCl7dGhpcy5jdXJySWR4Kyt9ZXhwb3J0TGV4ZXJTdGF0ZSgpe3JldHVybiB0aGlzLmN1cnJJZHh9aW1wb3J0TGV4ZXJTdGF0ZShlKXt0aGlzLmN1cnJJZHg9ZX1yZXNldExleGVyU3RhdGUoKXt0aGlzLmN1cnJJZHg9LTF9bW92ZVRvVGVybWluYXRlZFN0YXRlKCl7dGhpcy5jdXJySWR4PXRoaXMudG9rVmVjdG9yLmxlbmd0aC0xfWdldExleGVyUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5leHBvcnRMZXhlclN0YXRlKCl9fX0pO3ZhciB1ayx2b2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO29nKCk7SXMoKTt0ZygpO2QyKCk7bnMoKTt1az1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZWNvZ25pemVyQXBpIil9QUNUSU9OKGUpe3JldHVybiBlLmNhbGwodGhpcyl9Y29uc3VtZShlLHIsbil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHIsZSxuKX1zdWJydWxlKGUscixuKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwocixlLG4pfW9wdGlvbihlLHIpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKHIsZSl9b3IoZSxyKXtyZXR1cm4gdGhpcy5vckludGVybmFsKHIsZSl9bWFueShlLHIpe3JldHVybiB0aGlzLm1hbnlJbnRlcm5hbChlLHIpfWF0TGVhc3RPbmUoZSxyKXtyZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoZSxyKX1DT05TVU1FKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsMCxyKX1DT05TVU1FMShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDEscil9Q09OU1VNRTIoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSwyLHIpfUNPTlNVTUUzKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsMyxyKX1DT05TVU1FNChlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDQscil9Q09OU1VNRTUoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw1LHIpfUNPTlNVTUU2KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsNixyKX1DT05TVU1FNyhlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDcscil9Q09OU1VNRTgoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw4LHIpfUNPTlNVTUU5KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsOSxyKX1TVUJSVUxFKGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsMCxyKX1TVUJSVUxFMShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDEscil9U1VCUlVMRTIoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSwyLHIpfVNVQlJVTEUzKGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsMyxyKX1TVUJSVUxFNChlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDQscil9U1VCUlVMRTUoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw1LHIpfVNVQlJVTEU2KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsNixyKX1TVUJSVUxFNyhlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDcscil9U1VCUlVMRTgoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw4LHIpfVNVQlJVTEU5KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsOSxyKX1PUFRJT04oZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSwwKX1PUFRJT04xKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMSl9T1BUSU9OMihlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDIpfU9QVElPTjMoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSwzKX1PUFRJT040KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsNCl9T1BUSU9ONShlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDUpfU9QVElPTjYoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw2KX1PUFRJT043KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsNyl9T1BUSU9OOChlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDgpfU9QVElPTjkoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw5KX1PUihlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsMCl9T1IxKGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSwxKX1PUjIoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDIpfU9SMyhlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsMyl9T1I0KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw0KX1PUjUoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDUpfU9SNihlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNil9T1I3KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw3KX1PUjgoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDgpfU9SOShlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsOSl9TUFOWShlKXt0aGlzLm1hbnlJbnRlcm5hbCgwLGUpfU1BTlkxKGUpe3RoaXMubWFueUludGVybmFsKDEsZSl9TUFOWTIoZSl7dGhpcy5tYW55SW50ZXJuYWwoMixlKX1NQU5ZMyhlKXt0aGlzLm1hbnlJbnRlcm5hbCgzLGUpfU1BTlk0KGUpe3RoaXMubWFueUludGVybmFsKDQsZSl9TUFOWTUoZSl7dGhpcy5tYW55SW50ZXJuYWwoNSxlKX1NQU5ZNihlKXt0aGlzLm1hbnlJbnRlcm5hbCg2LGUpfU1BTlk3KGUpe3RoaXMubWFueUludGVybmFsKDcsZSl9TUFOWTgoZSl7dGhpcy5tYW55SW50ZXJuYWwoOCxlKX1NQU5ZOShlKXt0aGlzLm1hbnlJbnRlcm5hbCg5LGUpfU1BTllfU0VQKGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoMCxlKX1NQU5ZX1NFUDEoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgxLGUpfU1BTllfU0VQMihlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDIsZSl9TUFOWV9TRVAzKGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoMyxlKX1NQU5ZX1NFUDQoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg0LGUpfU1BTllfU0VQNShlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDUsZSl9TUFOWV9TRVA2KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNixlKX1NQU5ZX1NFUDcoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg3LGUpfU1BTllfU0VQOChlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDgsZSl9TUFOWV9TRVA5KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoOSxlKX1BVF9MRUFTVF9PTkUoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMCxlKX1BVF9MRUFTVF9PTkUxKGUpe3JldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgxLGUpfUFUX0xFQVNUX09ORTIoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMixlKX1BVF9MRUFTVF9PTkUzKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDMsZSl9QVRfTEVBU1RfT05FNChlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg0LGUpfUFUX0xFQVNUX09ORTUoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNSxlKX1BVF9MRUFTVF9PTkU2KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDYsZSl9QVRfTEVBU1RfT05FNyhlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg3LGUpfUFUX0xFQVNUX09ORTgoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoOCxlKX1BVF9MRUFTVF9PTkU5KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDksZSl9QVRfTEVBU1RfT05FX1NFUChlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDAsZSl9QVRfTEVBU1RfT05FX1NFUDEoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgxLGUpfUFUX0xFQVNUX09ORV9TRVAyKGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMixlKX1BVF9MRUFTVF9PTkVfU0VQMyhlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDMsZSl9QVRfTEVBU1RfT05FX1NFUDQoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg0LGUpfUFUX0xFQVNUX09ORV9TRVA1KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNSxlKX1BVF9MRUFTVF9PTkVfU0VQNihlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDYsZSl9QVRfTEVBU1RfT05FX1NFUDcoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg3LGUpfUFUX0xFQVNUX09ORV9TRVA4KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoOCxlKX1BVF9MRUFTVF9PTkVfU0VQOShlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDksZSl9UlVMRShlLHIsbj1jZyl7aWYoSG4odGhpcy5kZWZpbmVkUnVsZXNOYW1lcyxlKSl7bGV0IHM9e21lc3NhZ2U6QmwuYnVpbGREdXBsaWNhdGVSdWxlTmFtZUVycm9yKHt0b3BMZXZlbFJ1bGU6ZSxncmFtbWFyTmFtZTp0aGlzLmNsYXNzTmFtZX0pLHR5cGU6emkuRFVQTElDQVRFX1JVTEVfTkFNRSxydWxlTmFtZTplfTt0aGlzLmRlZmluaXRpb25FcnJvcnMucHVzaChzKX10aGlzLmRlZmluZWRSdWxlc05hbWVzLnB1c2goZSk7bGV0IGk9dGhpcy5kZWZpbmVSdWxlKGUscixuKTtyZXR1cm4gdGhpc1tlXT1pLGl9T1ZFUlJJREVfUlVMRShlLHIsbj1jZyl7bGV0IGk9S3NlKGUsdGhpcy5kZWZpbmVkUnVsZXNOYW1lcyx0aGlzLmNsYXNzTmFtZSk7dGhpcy5kZWZpbml0aW9uRXJyb3JzPXRoaXMuZGVmaW5pdGlvbkVycm9ycy5jb25jYXQoaSk7bGV0IGE9dGhpcy5kZWZpbmVSdWxlKGUscixuKTtyZXR1cm4gdGhpc1tlXT1hLGF9QkFDS1RSQUNLKGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLnB1c2goMSk7bGV0IG49dGhpcy5zYXZlUmVjb2dTdGF0ZSgpO3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLHIpLCEwfWNhdGNoKGkpe2lmKHJmKGkpKXJldHVybiExO3Rocm93IGl9ZmluYWxseXt0aGlzLnJlbG9hZFJlY29nU3RhdGUobiksdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLnBvcCgpfX19Z2V0R0FzdFByb2R1Y3Rpb25zKCl7cmV0dXJuIHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGV9Z2V0U2VyaWFsaXplZEdhc3RQcm9kdWN0aW9ucygpe3JldHVybiBJVChicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSl9fX0pO3ZhciBoayx4b2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO3JrKCk7b2coKTthZygpO3UyKCk7SXMoKTtQUigpO2kwKCk7cjAoKTtoaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZWNvZ25pemVyRW5naW5lIil9aW5pdFJlY29nbml6ZXJFbmdpbmUoZSxyKXtpZih0aGlzLmNsYXNzTmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsPXt9LHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydD17fSx0aGlzLnJ1bGVTaG9ydE5hbWVJZHg9MjU2LHRoaXMudG9rZW5NYXRjaGVyPWVnLHRoaXMuc3VicnVsZUlkeD0wLHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXM9W10sdGhpcy50b2tlbnNNYXA9e30sdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrPVtdLHRoaXMuUlVMRV9TVEFDSz1bXSx0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSz1bXSx0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlPXt9LEl0KHIsInNlcmlhbGl6ZWRHcmFtbWFyIikpdGhyb3cgRXJyb3IoYFRoZSBQYXJzZXIncyBjb25maWd1cmF0aW9uIGNhbiBubyBsb25nZXIgY29udGFpbiBhIDxzZXJpYWxpemVkR3JhbW1hcj4gcHJvcGVydHkuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI182LTAtMAoJRm9yIEZ1cnRoZXIgZGV0YWlscy5gKTtpZihNdChlKSl7aWYoY3IoZSkpdGhyb3cgRXJyb3IoYEEgVG9rZW4gVm9jYWJ1bGFyeSBjYW5ub3QgYmUgZW1wdHkuCglOb3RlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IGZvciB0aGUgcGFyc2VyIGNvbnN0cnVjdG9yCglpcyBubyBsb25nZXIgYSBUb2tlbiB2ZWN0b3IgKHNpbmNlIHY0LjApLmApO2lmKHR5cGVvZiBlWzBdLnN0YXJ0T2Zmc2V0PT0ibnVtYmVyIil0aHJvdyBFcnJvcihgVGhlIFBhcnNlciBjb25zdHJ1Y3RvciBubyBsb25nZXIgYWNjZXB0cyBhIHRva2VuIHZlY3RvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI180LTAtMAoJRm9yIEZ1cnRoZXIgZGV0YWlscy5gKX1pZihNdChlKSl0aGlzLnRva2Vuc01hcD1xcihlLChhLHMpPT4oYVtzLm5hbWVdPXMsYSkse30pO2Vsc2UgaWYoSXQoZSwibW9kZXMiKSYmUmEoV3IoYnIoZS5tb2RlcykpLEFzZSkpe2xldCBhPVdyKGJyKGUubW9kZXMpKSxzPU9tKGEpO3RoaXMudG9rZW5zTWFwPXFyKHMsKGwsdSk9PihsW3UubmFtZV09dSxsKSx7fSl9ZWxzZSBpZih5bihlKSl0aGlzLnRva2Vuc01hcD1ybihlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiPHRva2Vuc0RpY3Rpb25hcnk+IGFyZ3VtZW50IG11c3QgYmUgQW4gQXJyYXkgb2YgVG9rZW4gY29uc3RydWN0b3JzLCBBIGRpY3Rpb25hcnkgb2YgVG9rZW4gY29uc3RydWN0b3JzIG9yIGFuIElNdWx0aU1vZGVMZXhlckRlZmluaXRpb24iKTt0aGlzLnRva2Vuc01hcC5FT0Y9b287bGV0IG49SXQoZSwibW9kZXMiKT9XcihicihlLm1vZGVzKSk6YnIoZSksaT1SYShuLGE9PmNyKGEuY2F0ZWdvcnlNYXRjaGVzKSk7dGhpcy50b2tlbk1hdGNoZXI9aT9lZzpPdSxQdShicih0aGlzLnRva2Vuc01hcCkpfWRlZmluZVJ1bGUoZSxyLG4pe2lmKHRoaXMuc2VsZkFuYWx5c2lzRG9uZSl0aHJvdyBFcnJvcihgR3JhbW1hciBydWxlIDwke2V9PiBtYXkgbm90IGJlIGRlZmluZWQgYWZ0ZXIgdGhlICdwZXJmb3JtU2VsZkFuYWx5c2lzJyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkJwpNYWtlIHN1cmUgdGhhdCBhbGwgZ3JhbW1hciBydWxlIGRlZmluaXRpb25zIGFyZSBkb25lIGJlZm9yZSAncGVyZm9ybVNlbGZBbmFseXNpcycgaXMgY2FsbGVkLmApO2xldCBpPUl0KG4sInJlc3luY0VuYWJsZWQiKT9uLnJlc3luY0VuYWJsZWQ6Y2cucmVzeW5jRW5hYmxlZCxhPUl0KG4sInJlY292ZXJ5VmFsdWVGdW5jIik/bi5yZWNvdmVyeVZhbHVlRnVuYzpjZy5yZWNvdmVyeVZhbHVlRnVuYyxzPXRoaXMucnVsZVNob3J0TmFtZUlkeDw8MTI7dGhpcy5ydWxlU2hvcnROYW1lSWR4KyssdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsW3NdPWUsdGhpcy5mdWxsUnVsZU5hbWVUb1Nob3J0W2VdPXM7bGV0IGw7cmV0dXJuIHRoaXMub3V0cHV0Q3N0PT09ITA/bD1vKGZ1bmN0aW9uKC4uLmYpe3RyeXt0aGlzLnJ1bGVJbnZvY2F0aW9uU3RhdGVVcGRhdGUocyxlLHRoaXMuc3VicnVsZUlkeCksci5hcHBseSh0aGlzLGYpO2xldCBkPXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtyZXR1cm4gdGhpcy5jc3RQb3N0UnVsZShkKSxkfWNhdGNoKGQpe3JldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChkLGksYSl9ZmluYWxseXt0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKX19LCJpbnZva2VSdWxlV2l0aFRyeSIpOmw9byhmdW5jdGlvbiguLi5mKXt0cnl7cmV0dXJuIHRoaXMucnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShzLGUsdGhpcy5zdWJydWxlSWR4KSxyLmFwcGx5KHRoaXMsZil9Y2F0Y2goZCl7cmV0dXJuIHRoaXMuaW52b2tlUnVsZUNhdGNoKGQsaSxhKX1maW5hbGx5e3RoaXMucnVsZUZpbmFsbHlTdGF0ZVVwZGF0ZSgpfX0sImludm9rZVJ1bGVXaXRoVHJ5Q3N0IiksT2JqZWN0LmFzc2lnbihsLHtydWxlTmFtZTplLG9yaWdpbmFsR3JhbW1hckFjdGlvbjpyfSl9aW52b2tlUnVsZUNhdGNoKGUscixuKXtsZXQgaT10aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSxhPXImJiF0aGlzLmlzQmFja1RyYWNraW5nKCkmJnRoaXMucmVjb3ZlcnlFbmFibGVkO2lmKHJmKGUpKXtsZXQgcz1lO2lmKGEpe2xldCBsPXRoaXMuZmluZFJlU3luY1Rva2VuVHlwZSgpO2lmKHRoaXMuaXNJbkN1cnJlbnRSdWxlUmVTeW5jU2V0KGwpKWlmKHMucmVzeW5jZWRUb2tlbnM9dGhpcy5yZVN5bmNUbyhsKSx0aGlzLm91dHB1dENzdCl7bGV0IHU9dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO3JldHVybiB1LnJlY292ZXJlZE5vZGU9ITAsdX1lbHNlIHJldHVybiBuKGUpO2Vsc2V7aWYodGhpcy5vdXRwdXRDc3Qpe2xldCB1PXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTt1LnJlY292ZXJlZE5vZGU9ITAscy5wYXJ0aWFsQ3N0UmVzdWx0PXV9dGhyb3cgc319ZWxzZXtpZihpKXJldHVybiB0aGlzLm1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpLG4oZSk7dGhyb3cgc319ZWxzZSB0aHJvdyBlfW9wdGlvbkludGVybmFsKGUscil7bGV0IG49dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoNTEyLHIpO3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsTG9naWMoZSxyLG4pfW9wdGlvbkludGVybmFsTG9naWMoZSxyLG4pe2xldCBpPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLGE7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpe2E9ZS5ERUY7bGV0IHM9ZS5HQVRFO2lmKHMhPT12b2lkIDApe2xldCBsPWk7aT1vKCgpPT5zLmNhbGwodGhpcykmJmwuY2FsbCh0aGlzKSwibG9va0FoZWFkRnVuYyIpfX1lbHNlIGE9ZTtpZihpLmNhbGwodGhpcyk9PT0hMClyZXR1cm4gYS5jYWxsKHRoaXMpfWF0TGVhc3RPbmVJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDEwMjQsZSk7cmV0dXJuIHRoaXMuYXRMZWFzdE9uZUludGVybmFsTG9naWMoZSxyLG4pfWF0TGVhc3RPbmVJbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT10aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKSxhO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXthPXIuREVGO2xldCBzPXIuR0FURTtpZihzIT09dm9pZCAwKXtsZXQgbD1pO2k9bygoKT0+cy5jYWxsKHRoaXMpJiZsLmNhbGwodGhpcyksImxvb2tBaGVhZEZ1bmMiKX19ZWxzZSBhPXI7aWYoaS5jYWxsKHRoaXMpPT09ITApe2xldCBzPXRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGEpO2Zvcig7aS5jYWxsKHRoaXMpPT09ITAmJnM9PT0hMDspcz10aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhKX1lbHNlIHRocm93IHRoaXMucmFpc2VFYXJseUV4aXRFeGNlcHRpb24oZSxZbi5SRVBFVElUSU9OX01BTkRBVE9SWSxyLkVSUl9NU0cpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMuYXRMZWFzdE9uZUludGVybmFsLFtlLHJdLGksMTAyNCxlLHFUKX1hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDE1MzYsZSk7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbExvZ2ljKGUscixuKX1hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT1yLkRFRixhPXIuU0VQO2lmKHRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLmNhbGwodGhpcyk9PT0hMCl7aS5jYWxsKHRoaXMpO2xldCBsPW8oKCk9PnRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksYSksInNlcGFyYXRvckxvb2tBaGVhZEZ1bmMiKTtmb3IoO3RoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksYSk9PT0hMDspdGhpcy5DT05TVU1FKGEpLGkuY2FsbCh0aGlzKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbCxbZSxhLGwsaSxjMl0sbCwxNTM2LGUsYzIpfWVsc2UgdGhyb3cgdGhpcy5yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihlLFluLlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SLHIuRVJSX01TRyl9bWFueUludGVybmFsKGUscil7bGV0IG49dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoNzY4LGUpO3JldHVybiB0aGlzLm1hbnlJbnRlcm5hbExvZ2ljKGUscixuKX1tYW55SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUobiksYTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil7YT1yLkRFRjtsZXQgbD1yLkdBVEU7aWYobCE9PXZvaWQgMCl7bGV0IHU9aTtpPW8oKCk9PmwuY2FsbCh0aGlzKSYmdS5jYWxsKHRoaXMpLCJsb29rYWhlYWRGdW5jdGlvbiIpfX1lbHNlIGE9cjtsZXQgcz0hMDtmb3IoO2kuY2FsbCh0aGlzKT09PSEwJiZzPT09ITA7KXM9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oYSk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5tYW55SW50ZXJuYWwsW2Uscl0saSw3NjgsZSxZVCxzKX1tYW55U2VwRmlyc3RJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDEyODAsZSk7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbExvZ2ljKGUscixuKX1tYW55U2VwRmlyc3RJbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT1yLkRFRixhPXIuU0VQO2lmKHRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLmNhbGwodGhpcyk9PT0hMCl7aS5jYWxsKHRoaXMpO2xldCBsPW8oKCk9PnRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksYSksInNlcGFyYXRvckxvb2tBaGVhZEZ1bmMiKTtmb3IoO3RoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksYSk9PT0hMDspdGhpcy5DT05TVU1FKGEpLGkuY2FsbCh0aGlzKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbCxbZSxhLGwsaSxsMl0sbCwxMjgwLGUsbDIpfX1yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwoZSxyLG4saSxhKXtmb3IoO24oKTspdGhpcy5DT05TVU1FKHIpLGkuY2FsbCh0aGlzKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbCxbZSxyLG4saSxhXSxuLDE1MzYsZSxhKX1kb1NpbmdsZVJlcGV0aXRpb24oZSl7bGV0IHI9dGhpcy5nZXRMZXhlclBvc2l0aW9uKCk7cmV0dXJuIGUuY2FsbCh0aGlzKSx0aGlzLmdldExleGVyUG9zaXRpb24oKT5yfW9ySW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgyNTYsciksaT1NdChlKT9lOmUuREVGLHM9dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUobikuY2FsbCh0aGlzLGkpO2lmKHMhPT12b2lkIDApcmV0dXJuIGlbc10uQUxULmNhbGwodGhpcyk7dGhpcy5yYWlzZU5vQWx0RXhjZXB0aW9uKHIsZS5FUlJfTVNHKX1ydWxlRmluYWxseVN0YXRlVXBkYXRlKCl7aWYodGhpcy5SVUxFX1NUQUNLLnBvcCgpLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLLnBvcCgpLHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlKCksdGhpcy5SVUxFX1NUQUNLLmxlbmd0aD09PTAmJnRoaXMuaXNBdEVuZE9mSW5wdXQoKT09PSExKXtsZXQgZT10aGlzLkxBKDEpLHI9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZSh7Zmlyc3RSZWR1bmRhbnQ6ZSxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKX0pO3RoaXMuU0FWRV9FUlJPUihuZXcgbTIocixlKSl9fXN1YnJ1bGVJbnRlcm5hbChlLHIsbil7bGV0IGk7dHJ5e2xldCBhPW4hPT12b2lkIDA/bi5BUkdTOnZvaWQgMDtyZXR1cm4gdGhpcy5zdWJydWxlSWR4PXIsaT1lLmFwcGx5KHRoaXMsYSksdGhpcy5jc3RQb3N0Tm9uVGVybWluYWwoaSxuIT09dm9pZCAwJiZuLkxBQkVMIT09dm9pZCAwP24uTEFCRUw6ZS5ydWxlTmFtZSksaX1jYXRjaChhKXt0aHJvdyB0aGlzLnN1YnJ1bGVJbnRlcm5hbEVycm9yKGEsbixlLnJ1bGVOYW1lKX19c3VicnVsZUludGVybmFsRXJyb3IoZSxyLG4pe3Rocm93IHJmKGUpJiZlLnBhcnRpYWxDc3RSZXN1bHQhPT12b2lkIDAmJih0aGlzLmNzdFBvc3ROb25UZXJtaW5hbChlLnBhcnRpYWxDc3RSZXN1bHQsciE9PXZvaWQgMCYmci5MQUJFTCE9PXZvaWQgMD9yLkxBQkVMOm4pLGRlbGV0ZSBlLnBhcnRpYWxDc3RSZXN1bHQpLGV9Y29uc3VtZUludGVybmFsKGUscixuKXtsZXQgaTt0cnl7bGV0IGE9dGhpcy5MQSgxKTt0aGlzLnRva2VuTWF0Y2hlcihhLGUpPT09ITA/KHRoaXMuY29uc3VtZVRva2VuKCksaT1hKTp0aGlzLmNvbnN1bWVJbnRlcm5hbEVycm9yKGUsYSxuKX1jYXRjaChhKXtpPXRoaXMuY29uc3VtZUludGVybmFsUmVjb3ZlcnkoZSxyLGEpfXJldHVybiB0aGlzLmNzdFBvc3RUZXJtaW5hbChuIT09dm9pZCAwJiZuLkxBQkVMIT09dm9pZCAwP24uTEFCRUw6ZS5uYW1lLGkpLGl9Y29uc3VtZUludGVybmFsRXJyb3IoZSxyLG4pe2xldCBpLGE9dGhpcy5MQSgwKTt0aHJvdyBuIT09dm9pZCAwJiZuLkVSUl9NU0c/aT1uLkVSUl9NU0c6aT10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmUsYWN0dWFsOnIscHJldmlvdXM6YSxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKX0pLHRoaXMuU0FWRV9FUlJPUihuZXcgYTAoaSxyLGEpKX1jb25zdW1lSW50ZXJuYWxSZWNvdmVyeShlLHIsbil7aWYodGhpcy5yZWNvdmVyeUVuYWJsZWQmJm4ubmFtZT09PSJNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24iJiYhdGhpcy5pc0JhY2tUcmFja2luZygpKXtsZXQgaT10aGlzLmdldEZvbGxvd3NGb3JJblJ1bGVSZWNvdmVyeShlLHIpO3RyeXtyZXR1cm4gdGhpcy50cnlJblJ1bGVSZWNvdmVyeShlLGkpfWNhdGNoKGEpe3Rocm93IGEubmFtZT09PU9SP246YX19ZWxzZSB0aHJvdyBufXNhdmVSZWNvZ1N0YXRlKCl7bGV0IGU9dGhpcy5lcnJvcnMscj1ybih0aGlzLlJVTEVfU1RBQ0spO3JldHVybntlcnJvcnM6ZSxsZXhlclN0YXRlOnRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpLFJVTEVfU1RBQ0s6cixDU1RfU1RBQ0s6dGhpcy5DU1RfU1RBQ0t9fXJlbG9hZFJlY29nU3RhdGUoZSl7dGhpcy5lcnJvcnM9ZS5lcnJvcnMsdGhpcy5pbXBvcnRMZXhlclN0YXRlKGUubGV4ZXJTdGF0ZSksdGhpcy5SVUxFX1NUQUNLPWUuUlVMRV9TVEFDS31ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKGUscixuKXt0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSy5wdXNoKG4pLHRoaXMuUlVMRV9TVEFDSy5wdXNoKGUpLHRoaXMuY3N0SW52b2NhdGlvblN0YXRlVXBkYXRlKHIpfWlzQmFja1RyYWNraW5nKCl7cmV0dXJuIHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5sZW5ndGghPT0wfWdldEN1cnJSdWxlRnVsbE5hbWUoKXtsZXQgZT10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtyZXR1cm4gdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsW2VdfXNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGUpe3JldHVybiB0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxbZV19aXNBdEVuZE9mSW5wdXQoKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSxvbyl9cmVzZXQoKXt0aGlzLnJlc2V0TGV4ZXJTdGF0ZSgpLHRoaXMuc3VicnVsZUlkeD0wLHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjaz1bXSx0aGlzLmVycm9ycz1bXSx0aGlzLlJVTEVfU1RBQ0s9W10sdGhpcy5DU1RfU1RBQ0s9W10sdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s9W119fX0pO3ZhciBmayxib2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvZygpO0h0KCk7YWcoKTtJcygpO2ZrPWNsYXNze3N0YXRpY3tvKHRoaXMsIkVycm9ySGFuZGxlciIpfWluaXRFcnJvckhhbmRsZXIoZSl7dGhpcy5fZXJyb3JzPVtdLHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXI9SXQoZSwiZXJyb3JNZXNzYWdlUHJvdmlkZXIiKT9lLmVycm9yTWVzc2FnZVByb3ZpZGVyOmlzLmVycm9yTWVzc2FnZVByb3ZpZGVyfVNBVkVfRVJST1IoZSl7aWYocmYoZSkpcmV0dXJuIGUuY29udGV4dD17cnVsZVN0YWNrOnRoaXMuZ2V0SHVtYW5SZWFkYWJsZVJ1bGVTdGFjaygpLHJ1bGVPY2N1cnJlbmNlU3RhY2s6cm4odGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0spfSx0aGlzLl9lcnJvcnMucHVzaChlKSxlO3Rocm93IEVycm9yKCJUcnlpbmcgdG8gc2F2ZSBhbiBFcnJvciB3aGljaCBpcyBub3QgYSBSZWNvZ25pdGlvbkV4Y2VwdGlvbiIpfWdldCBlcnJvcnMoKXtyZXR1cm4gcm4odGhpcy5fZXJyb3JzKX1zZXQgZXJyb3JzKGUpe3RoaXMuX2Vycm9ycz1lfXJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKGUscixuKXtsZXQgaT10aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKSxhPXRoaXMuZ2V0R0FzdFByb2R1Y3Rpb25zKClbaV0sbD1pZyhlLGEscix0aGlzLm1heExvb2thaGVhZClbMF0sdT1bXTtmb3IobGV0IGY9MTtmPD10aGlzLm1heExvb2thaGVhZDtmKyspdS5wdXNoKHRoaXMuTEEoZikpO2xldCBoPXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtleHBlY3RlZEl0ZXJhdGlvblBhdGhzOmwsYWN0dWFsOnUscHJldmlvdXM6dGhpcy5MQSgwKSxjdXN0b21Vc2VyRGVzY3JpcHRpb246bixydWxlTmFtZTppfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBnMihoLHRoaXMuTEEoMSksdGhpcy5MQSgwKSkpfXJhaXNlTm9BbHRFeGNlcHRpb24oZSxyKXtsZXQgbj10aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKSxpPXRoaXMuZ2V0R0FzdFByb2R1Y3Rpb25zKClbbl0sYT1uZyhlLGksdGhpcy5tYXhMb29rYWhlYWQpLHM9W107Zm9yKGxldCBoPTE7aDw9dGhpcy5tYXhMb29rYWhlYWQ7aCsrKXMucHVzaCh0aGlzLkxBKGgpKTtsZXQgbD10aGlzLkxBKDApLHU9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE5vVmlhYmxlQWx0TWVzc2FnZSh7ZXhwZWN0ZWRQYXRoc1BlckFsdDphLGFjdHVhbDpzLHByZXZpb3VzOmwsY3VzdG9tVXNlckRlc2NyaXB0aW9uOnIscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KTt0aHJvdyB0aGlzLlNBVkVfRVJST1IobmV3IHAyKHUsdGhpcy5MQSgxKSxsKSl9fX0pO3ZhciBkayx3b2U9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1MigpO0h0KCk7ZGs9Y2xhc3N7c3RhdGlje28odGhpcywiQ29udGVudEFzc2lzdCIpfWluaXRDb250ZW50QXNzaXN0KCl7fWNvbXB1dGVDb250ZW50QXNzaXN0KGUscil7bGV0IG49dGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtlXTtpZihkcihuKSl0aHJvdyBFcnJvcihgUnVsZSAtPiR7ZX08LSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGdyYW1tYXIuYCk7cmV0dXJuIGpUKFtuXSxyLHRoaXMudG9rZW5NYXRjaGVyLHRoaXMubWF4TG9va2FoZWFkKX1nZXROZXh0UG9zc2libGVUb2tlblR5cGVzKGUpe2xldCByPXJhKGUucnVsZVN0YWNrKSxpPXRoaXMuZ2V0R0FzdFByb2R1Y3Rpb25zKClbcl07cmV0dXJuIG5ldyBXVChpLGUpLnN0YXJ0V2Fsa2luZygpfX19KTtmdW5jdGlvbiB2Mih0LGUscixuPSExKXttayhyKTtsZXQgaT1mYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksYT1FaShlKT9lOmUuREVGLHM9bmV3IHQoe2RlZmluaXRpb246W10saWR4OnJ9KTtyZXR1cm4gbiYmKHMuc2VwYXJhdG9yPWUuU0VQKSxJdChlLCJNQVhfTE9PS0FIRUFEIikmJihzLm1heExvb2thaGVhZD1lLk1BWF9MT09LQUhFQUQpLHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnB1c2gocyksYS5jYWxsKHRoaXMpLGkuZGVmaW5pdGlvbi5wdXNoKHMpLHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnBvcCgpLGdrfWZ1bmN0aW9uIERGZSh0LGUpe21rKGUpO2xldCByPWZhKHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrKSxuPU10KHQpPT09ITEsaT1uPT09ITE/dDp0LkRFRixhPW5ldyB4bih7ZGVmaW5pdGlvbjpbXSxpZHg6ZSxpZ25vcmVBbWJpZ3VpdGllczpuJiZ0LklHTk9SRV9BTUJJR1VJVElFUz09PSEwfSk7SXQodCwiTUFYX0xPT0tBSEVBRCIpJiYoYS5tYXhMb29rYWhlYWQ9dC5NQVhfTE9PS0FIRUFEKTtsZXQgcz1SdihpLGw9PkVpKGwuR0FURSkpO3JldHVybiBhLmhhc1ByZWRpY2F0ZXM9cyxyLmRlZmluaXRpb24ucHVzaChhKSxDZShpLGw9PntsZXQgdT1uZXcgQ24oe2RlZmluaXRpb246W119KTthLmRlZmluaXRpb24ucHVzaCh1KSxJdChsLCJJR05PUkVfQU1CSUdVSVRJRVMiKT91Lmlnbm9yZUFtYmlndWl0aWVzPWwuSUdOT1JFX0FNQklHVUlUSUVTOkl0KGwsIkdBVEUiKSYmKHUuaWdub3JlQW1iaWd1aXRpZXM9ITApLHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnB1c2godSksbC5BTFQuY2FsbCh0aGlzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKX0pLGdrfWZ1bmN0aW9uIEVvZSh0KXtyZXR1cm4gdD09PTA/IiI6YCR7dH1gfWZ1bmN0aW9uIG1rKHQpe2lmKHQ8MHx8dD5rb2Upe2xldCBlPW5ldyBFcnJvcihgSW52YWxpZCBEU0wgTWV0aG9kIGlkeCB2YWx1ZTogPCR7dH0+CglJZHggdmFsdWUgbXVzdCBiZSBhIG5vbmUgbmVnYXRpdmUgdmFsdWUgc21hbGxlciB0aGFuICR7a29lKzF9YCk7dGhyb3cgZS5LTk9XTl9SRUNPUkRFUl9FUlJPUj0hMCxlfX12YXIgZ2ssVG9lLGtvZSxTb2UsQ29lLExGZSxwayxBb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO25zKCk7YTIoKTtyMCgpO2kwKCk7SXMoKTtyaygpO2drPXtkZXNjcmlwdGlvbjoiVGhpcyBPYmplY3QgaW5kaWNhdGVzIHRoZSBQYXJzZXIgaXMgZHVyaW5nIFJlY29yZGluZyBQaGFzZSJ9O09iamVjdC5mcmVlemUoZ2spO1RvZT0hMCxrb2U9TWF0aC5wb3coMiw4KS0xLFNvZT1IVCh7bmFtZToiUkVDT1JESU5HX1BIQVNFX1RPS0VOIixwYXR0ZXJuOm9pLk5BfSk7UHUoW1NvZV0pO0NvZT1uMChTb2UsYFRoaXMgSVRva2VuIGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGluIFJlY29yZGluZyBQaGFzZQoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9pbnRlcm5hbHMuaHRtbCNncmFtbWFyLXJlY29yZGluZyBmb3IgZGV0YWlsc2AsLTEsLTEsLTEsLTEsLTEsLTEpO09iamVjdC5mcmVlemUoQ29lKTtMRmU9e25hbWU6YFRoaXMgQ1NUTm9kZSBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2UKCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvaW50ZXJuYWxzLmh0bWwjZ3JhbW1hci1yZWNvcmRpbmcgZm9yIGRldGFpbHNgLGNoaWxkcmVuOnt9fSxwaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJHYXN0UmVjb3JkZXIiKX1pbml0R2FzdFJlY29yZGVyKGUpe3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrPVtdLHRoaXMuUkVDT1JESU5HX1BIQVNFPSExfWVuYWJsZVJlY29yZGluZygpe3RoaXMuUkVDT1JESU5HX1BIQVNFPSEwLHRoaXMuVFJBQ0VfSU5JVCgiRW5hYmxlIFJlY29yZGluZyIsKCk9Pntmb3IobGV0IGU9MDtlPDEwO2UrKyl7bGV0IHI9ZT4wP2U6IiI7dGhpc1tgQ09OU1VNRSR7cn1gXT1mdW5jdGlvbihuLGkpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbFJlY29yZChuLGUsaSl9LHRoaXNbYFNVQlJVTEUke3J9YF09ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWxSZWNvcmQobixlLGkpfSx0aGlzW2BPUFRJT04ke3J9YF09ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQobixlKX0sdGhpc1tgT1Ike3J9YF09ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMub3JJbnRlcm5hbFJlY29yZChuLGUpfSx0aGlzW2BNQU5ZJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMubWFueUludGVybmFsUmVjb3JkKGUsbil9LHRoaXNbYE1BTllfU0VQJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxuKX0sdGhpc1tgQVRfTEVBU1RfT05FJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMuYXRMZWFzdE9uZUludGVybmFsUmVjb3JkKGUsbil9LHRoaXNbYEFUX0xFQVNUX09ORV9TRVAke3J9YF09ZnVuY3Rpb24obil7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbFJlY29yZChlLG4pfX10aGlzLmNvbnN1bWU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbFJlY29yZChyLGUsbil9LHRoaXMuc3VicnVsZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKHIsZSxuKX0sdGhpcy5vcHRpb249ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbFJlY29yZChyLGUpfSx0aGlzLm9yPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMub3JJbnRlcm5hbFJlY29yZChyLGUpfSx0aGlzLm1hbnk9ZnVuY3Rpb24oZSxyKXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZChlLHIpfSx0aGlzLmF0TGVhc3RPbmU9ZnVuY3Rpb24oZSxyKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLHIpfSx0aGlzLkFDVElPTj10aGlzLkFDVElPTl9SRUNPUkQsdGhpcy5CQUNLVFJBQ0s9dGhpcy5CQUNLVFJBQ0tfUkVDT1JELHRoaXMuTEE9dGhpcy5MQV9SRUNPUkR9KX1kaXNhYmxlUmVjb3JkaW5nKCl7dGhpcy5SRUNPUkRJTkdfUEhBU0U9ITEsdGhpcy5UUkFDRV9JTklUKCJEZWxldGluZyBSZWNvcmRpbmcgbWV0aG9kcyIsKCk9PntsZXQgZT10aGlzO2ZvcihsZXQgcj0wO3I8MTA7cisrKXtsZXQgbj1yPjA/cjoiIjtkZWxldGUgZVtgQ09OU1VNRSR7bn1gXSxkZWxldGUgZVtgU1VCUlVMRSR7bn1gXSxkZWxldGUgZVtgT1BUSU9OJHtufWBdLGRlbGV0ZSBlW2BPUiR7bn1gXSxkZWxldGUgZVtgTUFOWSR7bn1gXSxkZWxldGUgZVtgTUFOWV9TRVAke259YF0sZGVsZXRlIGVbYEFUX0xFQVNUX09ORSR7bn1gXSxkZWxldGUgZVtgQVRfTEVBU1RfT05FX1NFUCR7bn1gXX1kZWxldGUgZS5jb25zdW1lLGRlbGV0ZSBlLnN1YnJ1bGUsZGVsZXRlIGUub3B0aW9uLGRlbGV0ZSBlLm9yLGRlbGV0ZSBlLm1hbnksZGVsZXRlIGUuYXRMZWFzdE9uZSxkZWxldGUgZS5BQ1RJT04sZGVsZXRlIGUuQkFDS1RSQUNLLGRlbGV0ZSBlLkxBfSl9QUNUSU9OX1JFQ09SRChlKXt9QkFDS1RSQUNLX1JFQ09SRChlLHIpe3JldHVybigpPT4hMH1MQV9SRUNPUkQoZSl7cmV0dXJuIGxnfXRvcExldmVsUnVsZVJlY29yZChlLHIpe3RyeXtsZXQgbj1uZXcgdHMoe2RlZmluaXRpb246W10sbmFtZTplfSk7cmV0dXJuIG4ubmFtZT1lLHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnB1c2gobiksci5jYWxsKHRoaXMpLHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnBvcCgpLG59Y2F0Y2gobil7aWYobi5LTk9XTl9SRUNPUkRFUl9FUlJPUiE9PSEwKXRyeXtuLm1lc3NhZ2U9bi5tZXNzYWdlK2AKCSBUaGlzIGVycm9yIHdhcyB0aHJvd24gZHVyaW5nIHRoZSAiZ3JhbW1hciByZWNvcmRpbmcgcGhhc2UiIEZvciBtb3JlIGluZm8gc2VlOgoJaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvaW50ZXJuYWxzLmh0bWwjZ3JhbW1hci1yZWNvcmRpbmdgfWNhdGNoe3Rocm93IG59dGhyb3cgbn19b3B0aW9uSW50ZXJuYWxSZWNvcmQoZSxyKXtyZXR1cm4gdjIuY2FsbCh0aGlzLGFuLGUscil9YXRMZWFzdE9uZUludGVybmFsUmVjb3JkKGUscil7djIuY2FsbCh0aGlzLEFuLHIsZSl9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxyKXt2Mi5jYWxsKHRoaXMsX24scixlLFRvZSl9bWFueUludGVybmFsUmVjb3JkKGUscil7djIuY2FsbCh0aGlzLExyLHIsZSl9bWFueVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxyKXt2Mi5jYWxsKHRoaXMsdm4scixlLFRvZSl9b3JJbnRlcm5hbFJlY29yZChlLHIpe3JldHVybiBERmUuY2FsbCh0aGlzLGUscil9c3VicnVsZUludGVybmFsUmVjb3JkKGUscixuKXtpZihtayhyKSwhZXx8SXQoZSwicnVsZU5hbWUiKT09PSExKXtsZXQgbD1uZXcgRXJyb3IoYDxTVUJSVUxFJHtFb2Uocil9PiBhcmd1bWVudCBpcyBpbnZhbGlkIGV4cGVjdGluZyBhIFBhcnNlciBtZXRob2QgcmVmZXJlbmNlIGJ1dCBnb3Q6IDwke0pTT04uc3RyaW5naWZ5KGUpfT4KIGluc2lkZSB0b3AgbGV2ZWwgcnVsZTogPCR7dGhpcy5yZWNvcmRpbmdQcm9kU3RhY2tbMF0ubmFtZX0+YCk7dGhyb3cgbC5LTk9XTl9SRUNPUkRFUl9FUlJPUj0hMCxsfWxldCBpPWZhKHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrKSxhPWUucnVsZU5hbWUscz1uZXcgbm4oe2lkeDpyLG5vblRlcm1pbmFsTmFtZTphLGxhYmVsOm4/LkxBQkVMLHJlZmVyZW5jZWRSdWxlOnZvaWQgMH0pO3JldHVybiBpLmRlZmluaXRpb24ucHVzaChzKSx0aGlzLm91dHB1dENzdD9MRmU6Z2t9Y29uc3VtZUludGVybmFsUmVjb3JkKGUscixuKXtpZihtayhyKSwhVFIoZSkpe2xldCBzPW5ldyBFcnJvcihgPENPTlNVTUUke0VvZShyKX0+IGFyZ3VtZW50IGlzIGludmFsaWQgZXhwZWN0aW5nIGEgVG9rZW5UeXBlIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeShlKX0+CiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO3Rocm93IHMuS05PV05fUkVDT1JERVJfRVJST1I9ITAsc31sZXQgaT1mYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksYT1uZXcga3Ioe2lkeDpyLHRlcm1pbmFsVHlwZTplLGxhYmVsOm4/LkxBQkVMfSk7cmV0dXJuIGkuZGVmaW5pdGlvbi5wdXNoKGEpLENvZX19O28odjIsInJlY29yZFByb2QiKTtvKERGZSwicmVjb3JkT3JQcm9kIik7byhFb2UsImdldElkeFN1ZmZpeCIpO28obWssImFzc2VydE1ldGhvZElkeElzVmFsaWQiKX0pO3ZhciB5ayxfb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO2ptKCk7SXMoKTt5az1jbGFzc3tzdGF0aWN7byh0aGlzLCJQZXJmb3JtYW5jZVRyYWNlciIpfWluaXRQZXJmb3JtYW5jZVRyYWNlcihlKXtpZihJdChlLCJ0cmFjZUluaXRQZXJmIikpe2xldCByPWUudHJhY2VJbml0UGVyZixuPXR5cGVvZiByPT0ibnVtYmVyIjt0aGlzLnRyYWNlSW5pdE1heElkZW50PW4/cjoxLzAsdGhpcy50cmFjZUluaXRQZXJmPW4/cj4wOnJ9ZWxzZSB0aGlzLnRyYWNlSW5pdE1heElkZW50PTAsdGhpcy50cmFjZUluaXRQZXJmPWlzLnRyYWNlSW5pdFBlcmY7dGhpcy50cmFjZUluaXRJbmRlbnQ9LTF9VFJBQ0VfSU5JVChlLHIpe2lmKHRoaXMudHJhY2VJbml0UGVyZj09PSEwKXt0aGlzLnRyYWNlSW5pdEluZGVudCsrO2xldCBuPW5ldyBBcnJheSh0aGlzLnRyYWNlSW5pdEluZGVudCsxKS5qb2luKCIJIik7dGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmY29uc29sZS5sb2coYCR7bn0tLT4gPCR7ZX0+YCk7bGV0e3RpbWU6aSx2YWx1ZTphfT1yMihyKSxzPWk+MTA/Y29uc29sZS53YXJuOmNvbnNvbGUubG9nO3JldHVybiB0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZzKGAke259PC0tIDwke2V9PiB0aW1lOiAke2l9bXNgKSx0aGlzLnRyYWNlSW5pdEluZGVudC0tLGF9ZWxzZSByZXR1cm4gcigpfX19KTtmdW5jdGlvbiBMb2UodCxlKXtlLmZvckVhY2gocj0+e2xldCBuPXIucHJvdG90eXBlO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZvckVhY2goaT0+e2lmKGk9PT0iY29uc3RydWN0b3IiKXJldHVybjtsZXQgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4saSk7YSYmKGEuZ2V0fHxhLnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLGksYSk6dC5wcm90b3R5cGVbaV09ci5wcm90b3R5cGVbaV19KX0pfXZhciBEb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKExvZSwiYXBwbHlNaXhpbnMiKX0pO2Z1bmN0aW9uIHZrKHQ9dm9pZCAwKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIGxnLGlzLGNnLHppLHgyLGIyLElzPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtqbSgpO3NzZSgpO2kwKCk7dGcoKTtyb2UoKTtQUigpO2xvZSgpO2dvZSgpO3lvZSgpO3ZvZSgpO3hvZSgpO2JvZSgpO3dvZSgpO0FvZSgpO19vZSgpO0RvZSgpO2QyKCk7bGc9bjAob28sIiIsTmFOLE5hTixOYU4sTmFOLE5hTixOYU4pO09iamVjdC5mcmVlemUobGcpO2lzPU9iamVjdC5mcmVlemUoe3JlY292ZXJ5RW5hYmxlZDohMSxtYXhMb29rYWhlYWQ6MyxkeW5hbWljVG9rZW5zRW5hYmxlZDohMSxvdXRwdXRDc3Q6ITAsZXJyb3JNZXNzYWdlUHJvdmlkZXI6RnUsbm9kZUxvY2F0aW9uVHJhY2tpbmc6Im5vbmUiLHRyYWNlSW5pdFBlcmY6ITEsc2tpcFZhbGlkYXRpb25zOiExfSksY2c9T2JqZWN0LmZyZWV6ZSh7cmVjb3ZlcnlWYWx1ZUZ1bmM6bygoKT0+e30sInJlY292ZXJ5VmFsdWVGdW5jIikscmVzeW5jRW5hYmxlZDohMH0pOyhmdW5jdGlvbih0KXt0W3QuSU5WQUxJRF9SVUxFX05BTUU9MF09IklOVkFMSURfUlVMRV9OQU1FIix0W3QuRFVQTElDQVRFX1JVTEVfTkFNRT0xXT0iRFVQTElDQVRFX1JVTEVfTkFNRSIsdFt0LklOVkFMSURfUlVMRV9PVkVSUklERT0yXT0iSU5WQUxJRF9SVUxFX09WRVJSSURFIix0W3QuRFVQTElDQVRFX1BST0RVQ1RJT05TPTNdPSJEVVBMSUNBVEVfUFJPRFVDVElPTlMiLHRbdC5VTlJFU09MVkVEX1NVQlJVTEVfUkVGPTRdPSJVTlJFU09MVkVEX1NVQlJVTEVfUkVGIix0W3QuTEVGVF9SRUNVUlNJT049NV09IkxFRlRfUkVDVVJTSU9OIix0W3QuTk9ORV9MQVNUX0VNUFRZX0FMVD02XT0iTk9ORV9MQVNUX0VNUFRZX0FMVCIsdFt0LkFNQklHVU9VU19BTFRTPTddPSJBTUJJR1VPVVNfQUxUUyIsdFt0LkNPTkZMSUNUX1RPS0VOU19SVUxFU19OQU1FU1BBQ0U9OF09IkNPTkZMSUNUX1RPS0VOU19SVUxFU19OQU1FU1BBQ0UiLHRbdC5JTlZBTElEX1RPS0VOX05BTUU9OV09IklOVkFMSURfVE9LRU5fTkFNRSIsdFt0Lk5PX05PTl9FTVBUWV9MT09LQUhFQUQ9MTBdPSJOT19OT05fRU1QVFlfTE9PS0FIRUFEIix0W3QuQU1CSUdVT1VTX1BSRUZJWF9BTFRTPTExXT0iQU1CSUdVT1VTX1BSRUZJWF9BTFRTIix0W3QuVE9PX01BTllfQUxUUz0xMl09IlRPT19NQU5ZX0FMVFMiLHRbdC5DVVNUT01fTE9PS0FIRUFEX1ZBTElEQVRJT049MTNdPSJDVVNUT01fTE9PS0FIRUFEX1ZBTElEQVRJT04ifSkoeml8fCh6aT17fSkpO28odmssIkVNUFRZX0FMVCIpO3gyPWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VyIil9c3RhdGljIHBlcmZvcm1TZWxmQW5hbHlzaXMoZSl7dGhyb3cgRXJyb3IoIlRoZSAqKnN0YXRpYyoqIGBwZXJmb3JtU2VsZkFuYWx5c2lzYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZC4JXG5Vc2UgdGhlICoqaW5zdGFuY2UqKiBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIGluc3RlYWQuIil9cGVyZm9ybVNlbGZBbmFseXNpcygpe3RoaXMuVFJBQ0VfSU5JVCgicGVyZm9ybVNlbGZBbmFseXNpcyIsKCk9PntsZXQgZTt0aGlzLnNlbGZBbmFseXNpc0RvbmU9ITA7bGV0IHI9dGhpcy5jbGFzc05hbWU7dGhpcy5UUkFDRV9JTklUKCJ0b0Zhc3RQcm9wcyIsKCk9PntuMih0aGlzKX0pLHRoaXMuVFJBQ0VfSU5JVCgiR3JhbW1hciBSZWNvcmRpbmciLCgpPT57dHJ5e3RoaXMuZW5hYmxlUmVjb3JkaW5nKCksQ2UodGhpcy5kZWZpbmVkUnVsZXNOYW1lcyxpPT57bGV0IHM9dGhpc1tpXS5vcmlnaW5hbEdyYW1tYXJBY3Rpb24sbDt0aGlzLlRSQUNFX0lOSVQoYCR7aX0gUnVsZWAsKCk9PntsPXRoaXMudG9wTGV2ZWxSdWxlUmVjb3JkKGkscyl9KSx0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlW2ldPWx9KX1maW5hbGx5e3RoaXMuZGlzYWJsZVJlY29yZGluZygpfX0pO2xldCBuPVtdO2lmKHRoaXMuVFJBQ0VfSU5JVCgiR3JhbW1hciBSZXNvbHZpbmciLCgpPT57bj1lb2Uoe3J1bGVzOmJyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpfSksdGhpcy5kZWZpbml0aW9uRXJyb3JzPXRoaXMuZGVmaW5pdGlvbkVycm9ycy5jb25jYXQobil9KSx0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgVmFsaWRhdGlvbnMiLCgpPT57aWYoY3IobikmJnRoaXMuc2tpcFZhbGlkYXRpb25zPT09ITEpe2xldCBpPXRvZSh7cnVsZXM6YnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSksdG9rZW5UeXBlczpicih0aGlzLnRva2Vuc01hcCksZXJyTXNnUHJvdmlkZXI6QmwsZ3JhbW1hck5hbWU6cn0pLGE9cXNlKHtsb29rYWhlYWRTdHJhdGVneTp0aGlzLmxvb2thaGVhZFN0cmF0ZWd5LHJ1bGVzOmJyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLHRva2VuVHlwZXM6YnIodGhpcy50b2tlbnNNYXApLGdyYW1tYXJOYW1lOnJ9KTt0aGlzLmRlZmluaXRpb25FcnJvcnM9dGhpcy5kZWZpbml0aW9uRXJyb3JzLmNvbmNhdChpLGEpfX0pLGNyKHRoaXMuZGVmaW5pdGlvbkVycm9ycykmJih0aGlzLnJlY292ZXJ5RW5hYmxlZCYmdGhpcy5UUkFDRV9JTklUKCJjb21wdXRlQWxsUHJvZHNGb2xsb3dzIiwoKT0+e2xldCBpPWFzZShicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSk7dGhpcy5yZXN5bmNGb2xsb3dzPWl9KSx0aGlzLlRSQUNFX0lOSVQoIkNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMiLCgpPT57dmFyIGksYTsoYT0oaT10aGlzLmxvb2thaGVhZFN0cmF0ZWd5KS5pbml0aWFsaXplKT09PW51bGx8fGE9PT12b2lkIDB8fGEuY2FsbChpLHtydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKX0pLHRoaXMucHJlQ29tcHV0ZUxvb2thaGVhZEZ1bmN0aW9ucyhicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSl9KSksIXQuREVGRVJfREVGSU5JVElPTl9FUlJPUlNfSEFORExJTkcmJiFjcih0aGlzLmRlZmluaXRpb25FcnJvcnMpKXRocm93IGU9SmUodGhpcy5kZWZpbml0aW9uRXJyb3JzLGk9PmkubWVzc2FnZSksbmV3IEVycm9yKGBQYXJzZXIgRGVmaW5pdGlvbiBFcnJvcnMgZGV0ZWN0ZWQ6CiAke2Uuam9pbihgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYCl9YCl9KX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuZGVmaW5pdGlvbkVycm9ycz1bXSx0aGlzLnNlbGZBbmFseXNpc0RvbmU9ITE7bGV0IG49dGhpcztpZihuLmluaXRFcnJvckhhbmRsZXIociksbi5pbml0TGV4ZXJBZGFwdGVyKCksbi5pbml0TG9va3NBaGVhZChyKSxuLmluaXRSZWNvZ25pemVyRW5naW5lKGUsciksbi5pbml0UmVjb3ZlcmFibGUociksbi5pbml0VHJlZUJ1aWxkZXIociksbi5pbml0Q29udGVudEFzc2lzdCgpLG4uaW5pdEdhc3RSZWNvcmRlcihyKSxuLmluaXRQZXJmb3JtYW5jZVRyYWNlcihyKSxJdChyLCJpZ25vcmVkSXNzdWVzIikpdGhyb3cgbmV3IEVycm9yKGBUaGUgPGlnbm9yZWRJc3N1ZXM+IElQYXJzZXJDb25maWcgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4KCVBsZWFzZSB1c2UgdGhlIDxJR05PUkVfQU1CSUdVSVRJRVM+IGZsYWcgb24gdGhlIHJlbGV2YW50IERTTCBtZXRob2QgaW5zdGVhZC4KCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjSUdOT1JJTkdfQU1CSUdVSVRJRVMKCUZvciBmdXJ0aGVyIGRldGFpbHMuYCk7dGhpcy5za2lwVmFsaWRhdGlvbnM9SXQociwic2tpcFZhbGlkYXRpb25zIik/ci5za2lwVmFsaWRhdGlvbnM6aXMuc2tpcFZhbGlkYXRpb25zfX07eDIuREVGRVJfREVGSU5JVElPTl9FUlJPUlNfSEFORExJTkc9ITE7TG9lKHgyLFtlayxpayxsayxjayxoayx1ayxmayxkayxwayx5a10pO2IyPWNsYXNzIGV4dGVuZHMgeDJ7c3RhdGlje28odGhpcywiRW1iZWRkZWRBY3Rpb25zUGFyc2VyIil9Y29uc3RydWN0b3IoZSxyPWlzKXtsZXQgbj1ybihyKTtuLm91dHB1dENzdD0hMSxzdXBlcihlLG4pfX19KTt2YXIgTm9lPU0oKCk9PnsidXNlIHN0cmljdCI7bnMoKX0pO3ZhciBSb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBNb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOb2UoKTtSb2UoKX0pO3ZhciBJb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1UigpfSk7dmFyIHMwPU0oKCk9PnsidXNlIHN0cmljdCI7dVIoKTtJcygpO2EyKCk7aTAoKTthZygpO0JSKCk7dGcoKTtvZygpO0VSKCk7bnMoKTtucygpO01vZSgpO0lvZSgpfSk7ZnVuY3Rpb24gbzAodCxlLHIpe3JldHVybmAke3QubmFtZX1fJHtlfV8ke3J9YH1mdW5jdGlvbiBGb2UodCl7bGV0IGU9e2RlY2lzaW9uTWFwOnt9LGRlY2lzaW9uU3RhdGVzOltdLHJ1bGVUb1N0YXJ0U3RhdGU6bmV3IE1hcCxydWxlVG9TdG9wU3RhdGU6bmV3IE1hcCxzdGF0ZXM6W119O0JGZShlLHQpO2xldCByPXQubGVuZ3RoO2ZvcihsZXQgbj0wO248cjtuKyspe2xldCBpPXRbbl0sYT1sMChlLGksaSk7YSE9PXZvaWQgMCYmWEZlKGUsaSxhKX1yZXR1cm4gZX1mdW5jdGlvbiBCRmUodCxlKXtsZXQgcj1lLmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgaT1lW25dLGE9bmEodCxpLHZvaWQgMCx7dHlwZTpSRmV9KSxzPW5hKHQsaSx2b2lkIDAse3R5cGU6Zmd9KTthLnN0b3A9cyx0LnJ1bGVUb1N0YXJ0U3RhdGUuc2V0KGksYSksdC5ydWxlVG9TdG9wU3RhdGUuc2V0KGkscyl9fWZ1bmN0aW9uIHpvZSh0LGUscil7cmV0dXJuIHIgaW5zdGFuY2VvZiBrcj9ZUih0LGUsci50ZXJtaW5hbFR5cGUscik6ciBpbnN0YW5jZW9mIG5uP3FGZSh0LGUscik6ciBpbnN0YW5jZW9mIHhuP1ZGZSh0LGUscik6ciBpbnN0YW5jZW9mIGFuP1VGZSh0LGUscik6ciBpbnN0YW5jZW9mIExyP0ZGZSh0LGUscik6ciBpbnN0YW5jZW9mIHZuP3pGZSh0LGUscik6ciBpbnN0YW5jZW9mIEFuP0dGZSh0LGUscik6ciBpbnN0YW5jZW9mIF9uPyRGZSh0LGUscik6bDAodCxlLHIpfWZ1bmN0aW9uIEZGZSh0LGUscil7bGV0IG49bmEodCxlLHIse3R5cGU6UG9lfSk7YWYodCxuKTtsZXQgaT1kZyh0LGUsbixyLGwwKHQsZSxyKSk7cmV0dXJuICRvZSh0LGUscixpKX1mdW5jdGlvbiB6RmUodCxlLHIpe2xldCBuPW5hKHQsZSxyLHt0eXBlOlBvZX0pO2FmKHQsbik7bGV0IGk9ZGcodCxlLG4scixsMCh0LGUscikpLGE9WVIodCxlLHIuc2VwYXJhdG9yLHIpO3JldHVybiAkb2UodCxlLHIsaSxhKX1mdW5jdGlvbiBHRmUodCxlLHIpe2xldCBuPW5hKHQsZSxyLHt0eXBlOk9vZX0pO2FmKHQsbik7bGV0IGk9ZGcodCxlLG4scixsMCh0LGUscikpO3JldHVybiBHb2UodCxlLHIsaSl9ZnVuY3Rpb24gJEZlKHQsZSxyKXtsZXQgbj1uYSh0LGUscix7dHlwZTpPb2V9KTthZih0LG4pO2xldCBpPWRnKHQsZSxuLHIsbDAodCxlLHIpKSxhPVlSKHQsZSxyLnNlcGFyYXRvcixyKTtyZXR1cm4gR29lKHQsZSxyLGksYSl9ZnVuY3Rpb24gVkZlKHQsZSxyKXtsZXQgbj1uYSh0LGUscix7dHlwZTpuZn0pO2FmKHQsbik7bGV0IGk9SmUoci5kZWZpbml0aW9uLHM9PnpvZSh0LGUscykpO3JldHVybiBkZyh0LGUsbixyLC4uLmkpfWZ1bmN0aW9uIFVGZSh0LGUscil7bGV0IG49bmEodCxlLHIse3R5cGU6bmZ9KTthZih0LG4pO2xldCBpPWRnKHQsZSxuLHIsbDAodCxlLHIpKTtyZXR1cm4gSEZlKHQsZSxyLGkpfWZ1bmN0aW9uIGwwKHQsZSxyKXtsZXQgbj1ZcihKZShyLmRlZmluaXRpb24saT0+em9lKHQsZSxpKSksaT0+aSE9PXZvaWQgMCk7cmV0dXJuIG4ubGVuZ3RoPT09MT9uWzBdOm4ubGVuZ3RoPT09MD92b2lkIDA6WUZlKHQsbil9ZnVuY3Rpb24gR29lKHQsZSxyLG4saSl7bGV0IGE9bi5sZWZ0LHM9bi5yaWdodCxsPW5hKHQsZSxyLHt0eXBlOlBGZX0pO2FmKHQsbCk7bGV0IHU9bmEodCxlLHIse3R5cGU6Qm9lfSk7cmV0dXJuIGEubG9vcGJhY2s9bCx1Lmxvb3BiYWNrPWwsdC5kZWNpc2lvbk1hcFtvMChlLGk/IlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIjoiUmVwZXRpdGlvbk1hbmRhdG9yeSIsci5pZHgpXT1sLEFpKHMsbCksaT09PXZvaWQgMD8oQWkobCxhKSxBaShsLHUpKTooQWkobCx1KSxBaShsLGkubGVmdCksQWkoaS5yaWdodCxhKSkse2xlZnQ6YSxyaWdodDp1fX1mdW5jdGlvbiAkb2UodCxlLHIsbixpKXtsZXQgYT1uLmxlZnQscz1uLnJpZ2h0LGw9bmEodCxlLHIse3R5cGU6T0ZlfSk7YWYodCxsKTtsZXQgdT1uYSh0LGUscix7dHlwZTpCb2V9KSxoPW5hKHQsZSxyLHt0eXBlOklGZX0pO3JldHVybiBsLmxvb3BiYWNrPWgsdS5sb29wYmFjaz1oLEFpKGwsYSksQWkobCx1KSxBaShzLGgpLGkhPT12b2lkIDA/KEFpKGgsdSksQWkoaCxpLmxlZnQpLEFpKGkucmlnaHQsYSkpOkFpKGgsbCksdC5kZWNpc2lvbk1hcFtvMChlLGk/IlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIjoiUmVwZXRpdGlvbiIsci5pZHgpXT1sLHtsZWZ0OmwscmlnaHQ6dX19ZnVuY3Rpb24gSEZlKHQsZSxyLG4pe2xldCBpPW4ubGVmdCxhPW4ucmlnaHQ7cmV0dXJuIEFpKGksYSksdC5kZWNpc2lvbk1hcFtvMChlLCJPcHRpb24iLHIuaWR4KV09aSxufWZ1bmN0aW9uIGFmKHQsZSl7cmV0dXJuIHQuZGVjaXNpb25TdGF0ZXMucHVzaChlKSxlLmRlY2lzaW9uPXQuZGVjaXNpb25TdGF0ZXMubGVuZ3RoLTEsZS5kZWNpc2lvbn1mdW5jdGlvbiBkZyh0LGUscixuLC4uLmkpe2xldCBhPW5hKHQsZSxuLHt0eXBlOk1GZSxzdGFydDpyfSk7ci5lbmQ9YTtmb3IobGV0IGwgb2YgaSlsIT09dm9pZCAwPyhBaShyLGwubGVmdCksQWkobC5yaWdodCxhKSk6QWkocixhKTtsZXQgcz17bGVmdDpyLHJpZ2h0OmF9O3JldHVybiB0LmRlY2lzaW9uTWFwW28wKGUsV0ZlKG4pLG4uaWR4KV09cixzfWZ1bmN0aW9uIFdGZSh0KXtpZih0IGluc3RhbmNlb2YgeG4pcmV0dXJuIkFsdGVybmF0aW9uIjtpZih0IGluc3RhbmNlb2YgYW4pcmV0dXJuIk9wdGlvbiI7aWYodCBpbnN0YW5jZW9mIExyKXJldHVybiJSZXBldGl0aW9uIjtpZih0IGluc3RhbmNlb2Ygdm4pcmV0dXJuIlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIjtpZih0IGluc3RhbmNlb2YgQW4pcmV0dXJuIlJlcGV0aXRpb25NYW5kYXRvcnkiO2lmKHQgaW5zdGFuY2VvZiBfbilyZXR1cm4iUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBwcm9kdWN0aW9uIHR5cGUgZW5jb3VudGVyZWQiKX1mdW5jdGlvbiBZRmUodCxlKXtsZXQgcj1lLmxlbmd0aDtmb3IobGV0IGE9MDthPHItMTthKyspe2xldCBzPWVbYV0sbDtzLmxlZnQudHJhbnNpdGlvbnMubGVuZ3RoPT09MSYmKGw9cy5sZWZ0LnRyYW5zaXRpb25zWzBdKTtsZXQgdT1sIGluc3RhbmNlb2YgaGcsaD1sLGY9ZVthKzFdLmxlZnQ7cy5sZWZ0LnR5cGU9PT1uZiYmcy5yaWdodC50eXBlPT09bmYmJmwhPT12b2lkIDAmJih1JiZoLmZvbGxvd1N0YXRlPT09cy5yaWdodHx8bC50YXJnZXQ9PT1zLnJpZ2h0KT8odT9oLmZvbGxvd1N0YXRlPWY6bC50YXJnZXQ9ZixqRmUodCxzLnJpZ2h0KSk6QWkocy5yaWdodCxmKX1sZXQgbj1lWzBdLGk9ZVtyLTFdO3JldHVybntsZWZ0Om4ubGVmdCxyaWdodDppLnJpZ2h0fX1mdW5jdGlvbiBZUih0LGUscixuKXtsZXQgaT1uYSh0LGUsbix7dHlwZTpuZn0pLGE9bmEodCxlLG4se3R5cGU6bmZ9KTtyZXR1cm4gcVIoaSxuZXcgdWcoYSxyKSkse2xlZnQ6aSxyaWdodDphfX1mdW5jdGlvbiBxRmUodCxlLHIpe2xldCBuPXIucmVmZXJlbmNlZFJ1bGUsaT10LnJ1bGVUb1N0YXJ0U3RhdGUuZ2V0KG4pLGE9bmEodCxlLHIse3R5cGU6bmZ9KSxzPW5hKHQsZSxyLHt0eXBlOm5mfSksbD1uZXcgaGcoaSxuLHMpO3JldHVybiBxUihhLGwpLHtsZWZ0OmEscmlnaHQ6c319ZnVuY3Rpb24gWEZlKHQsZSxyKXtsZXQgbj10LnJ1bGVUb1N0YXJ0U3RhdGUuZ2V0KGUpO0FpKG4sci5sZWZ0KTtsZXQgaT10LnJ1bGVUb1N0b3BTdGF0ZS5nZXQoZSk7cmV0dXJuIEFpKHIucmlnaHQsaSkse2xlZnQ6bixyaWdodDppfX1mdW5jdGlvbiBBaSh0LGUpe2xldCByPW5ldyBUMihlKTtxUih0LHIpfWZ1bmN0aW9uIG5hKHQsZSxyLG4pe2xldCBpPU9iamVjdC5hc3NpZ24oe2F0bjp0LHByb2R1Y3Rpb246cixlcHNpbG9uT25seVRyYW5zaXRpb25zOiExLHJ1bGU6ZSx0cmFuc2l0aW9uczpbXSxuZXh0VG9rZW5XaXRoaW5SdWxlOltdLHN0YXRlTnVtYmVyOnQuc3RhdGVzLmxlbmd0aH0sbik7cmV0dXJuIHQuc3RhdGVzLnB1c2goaSksaX1mdW5jdGlvbiBxUih0LGUpe3QudHJhbnNpdGlvbnMubGVuZ3RoPT09MCYmKHQuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucz1lLmlzRXBzaWxvbigpKSx0LnRyYW5zaXRpb25zLnB1c2goZSl9ZnVuY3Rpb24gakZlKHQsZSl7dC5zdGF0ZXMuc3BsaWNlKHQuc3RhdGVzLmluZGV4T2YoZSksMSl9dmFyIG5mLFJGZSxPb2UsUG9lLGZnLE1GZSxJRmUsT0ZlLFBGZSxCb2UsdzIsdWcsVDIsaGcsVm9lPU0oKCk9PnsidXNlIHN0cmljdCI7Um0oKTtGTCgpO3MwKCk7byhvMCwiYnVpbGRBVE5LZXkiKTtuZj0xLFJGZT0yLE9vZT00LFBvZT01LGZnPTcsTUZlPTgsSUZlPTksT0ZlPTEwLFBGZT0xMSxCb2U9MTIsdzI9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RUcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSl7dGhpcy50YXJnZXQ9ZX1pc0Vwc2lsb24oKXtyZXR1cm4hMX19LHVnPWNsYXNzIGV4dGVuZHMgdzJ7c3RhdGlje28odGhpcywiQXRvbVRyYW5zaXRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUpLHRoaXMudG9rZW5UeXBlPXJ9fSxUMj1jbGFzcyBleHRlbmRzIHcye3N0YXRpY3tvKHRoaXMsIkVwc2lsb25UcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9aXNFcHNpbG9uKCl7cmV0dXJuITB9fSxoZz1jbGFzcyBleHRlbmRzIHcye3N0YXRpY3tvKHRoaXMsIlJ1bGVUcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUpLHRoaXMucnVsZT1yLHRoaXMuZm9sbG93U3RhdGU9bn1pc0Vwc2lsb24oKXtyZXR1cm4hMH19O28oRm9lLCJjcmVhdGVBVE4iKTtvKEJGZSwiY3JlYXRlUnVsZVN0YXJ0QW5kU3RvcEFUTlN0YXRlcyIpO28oem9lLCJhdG9tIik7byhGRmUsInJlcGV0aXRpb24iKTtvKHpGZSwicmVwZXRpdGlvblNlcCIpO28oR0ZlLCJyZXBldGl0aW9uTWFuZGF0b3J5Iik7bygkRmUsInJlcGV0aXRpb25NYW5kYXRvcnlTZXAiKTtvKFZGZSwiYWx0ZXJuYXRpb24iKTtvKFVGZSwib3B0aW9uIik7byhsMCwiYmxvY2siKTtvKEdvZSwicGx1cyIpO28oJG9lLCJzdGFyIik7byhIRmUsIm9wdGlvbmFsIik7byhhZiwiZGVmaW5lRGVjaXNpb25TdGF0ZSIpO28oZGcsIm1ha2VBbHRzIik7byhXRmUsImdldFByb2RUeXBlIik7byhZRmUsIm1ha2VCbG9jayIpO28oWVIsInRva2VuUmVmIik7byhxRmUsInJ1bGVSZWYiKTtvKFhGZSwiYnVpbGRSdWxlSGFuZGxlIik7byhBaSwiZXBzaWxvbiIpO28obmEsIm5ld1N0YXRlIik7byhxUiwiYWRkVHJhbnNpdGlvbiIpO28oakZlLCJyZW1vdmVTdGF0ZSIpfSk7ZnVuY3Rpb24gWFIodCxlPSEwKXtyZXR1cm5gJHtlP2BhJHt0LmFsdH1gOiIifXMke3Quc3RhdGUuc3RhdGVOdW1iZXJ9OiR7dC5zdGFjay5tYXAocj0+ci5zdGF0ZU51bWJlci50b1N0cmluZygpKS5qb2luKCJfIil9YH12YXIgazIscGcsVW9lPU0oKCk9PnsidXNlIHN0cmljdCI7Um0oKTtrMj17fSxwZz1jbGFzc3tzdGF0aWN7byh0aGlzLCJBVE5Db25maWdTZXQiKX1jb25zdHJ1Y3Rvcigpe3RoaXMubWFwPXt9LHRoaXMuY29uZmlncz1bXX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RofWZpbmFsaXplKCl7dGhpcy5tYXA9e319YWRkKGUpe2xldCByPVhSKGUpO3IgaW4gdGhpcy5tYXB8fCh0aGlzLm1hcFtyXT10aGlzLmNvbmZpZ3MubGVuZ3RoLHRoaXMuY29uZmlncy5wdXNoKGUpKX1nZXQgZWxlbWVudHMoKXtyZXR1cm4gdGhpcy5jb25maWdzfWdldCBhbHRzKCl7cmV0dXJuIEplKHRoaXMuY29uZmlncyxlPT5lLmFsdCl9Z2V0IGtleSgpe2xldCBlPSIiO2ZvcihsZXQgciBpbiB0aGlzLm1hcCllKz1yKyI6IjtyZXR1cm4gZX19O28oWFIsImdldEFUTkNvbmZpZ0tleSIpfSk7ZnVuY3Rpb24gS0ZlKHQsZSl7bGV0IHI9e307cmV0dXJuIG49PntsZXQgaT1uLnRvU3RyaW5nKCksYT1yW2ldO3JldHVybiBhIT09dm9pZCAwfHwoYT17YXRuU3RhcnRTdGF0ZTp0LGRlY2lzaW9uOmUsc3RhdGVzOnt9fSxyW2ldPWEpLGF9fWZ1bmN0aW9uIFdvZSh0LGU9ITApe2xldCByPW5ldyBTZXQ7Zm9yKGxldCBuIG9mIHQpe2xldCBpPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIG4pe2lmKGE9PT12b2lkIDApe2lmKGUpYnJlYWs7cmV0dXJuITF9bGV0IHM9W2EudG9rZW5UeXBlSWR4XS5jb25jYXQoYS5jYXRlZ29yeU1hdGNoZXMpO2ZvcihsZXQgbCBvZiBzKWlmKHIuaGFzKGwpKXtpZighaS5oYXMobCkpcmV0dXJuITF9ZWxzZSByLmFkZChsKSxpLmFkZChsKX19cmV0dXJuITB9ZnVuY3Rpb24gUUZlKHQpe2xldCBlPXQuZGVjaXNpb25TdGF0ZXMubGVuZ3RoLHI9QXJyYXkoZSk7Zm9yKGxldCBuPTA7bjxlO24rKylyW25dPUtGZSh0LmRlY2lzaW9uU3RhdGVzW25dLG4pO3JldHVybiByfWZ1bmN0aW9uIGpSKHQsZSxyLG4pe2xldCBpPXRbZV0ociksYT1pLnN0YXJ0O2lmKGE9PT12b2lkIDApe2xldCBsPWx6ZShpLmF0blN0YXJ0U3RhdGUpO2E9WG9lKGkscW9lKGwpKSxpLnN0YXJ0PWF9cmV0dXJuIFpGZS5hcHBseSh0aGlzLFtpLGEscixuXSl9ZnVuY3Rpb24gWkZlKHQsZSxyLG4pe2xldCBpPWUsYT0xLHM9W10sbD10aGlzLkxBKGErKyk7Zm9yKDs7KXtsZXQgdT1pemUoaSxsKTtpZih1PT09dm9pZCAwJiYodT1KRmUuYXBwbHkodGhpcyxbdCxpLGwsYSxyLG5dKSksdT09PWsyKXJldHVybiBuemUocyxpLGwpO2lmKHUuaXNBY2NlcHRTdGF0ZT09PSEwKXJldHVybiB1LnByZWRpY3Rpb247aT11LHMucHVzaChsKSxsPXRoaXMuTEEoYSsrKX19ZnVuY3Rpb24gSkZlKHQsZSxyLG4saSxhKXtsZXQgcz1hemUoZS5jb25maWdzLHIsaSk7aWYocy5zaXplPT09MClyZXR1cm4gWW9lKHQsZSxyLGsyKSxrMjtsZXQgbD1xb2UocyksdT1vemUocyxpKTtpZih1IT09dm9pZCAwKWwuaXNBY2NlcHRTdGF0ZT0hMCxsLnByZWRpY3Rpb249dSxsLmNvbmZpZ3MudW5pcXVlQWx0PXU7ZWxzZSBpZihmemUocykpe2xldCBoPU5sKHMuYWx0cyk7bC5pc0FjY2VwdFN0YXRlPSEwLGwucHJlZGljdGlvbj1oLGwuY29uZmlncy51bmlxdWVBbHQ9aCxlemUuYXBwbHkodGhpcyxbdCxuLHMuYWx0cyxhXSl9cmV0dXJuIGw9WW9lKHQsZSxyLGwpLGx9ZnVuY3Rpb24gZXplKHQsZSxyLG4pe2xldCBpPVtdO2ZvcihsZXQgaD0xO2g8PWU7aCsrKWkucHVzaCh0aGlzLkxBKGgpLnRva2VuVHlwZSk7bGV0IGE9dC5hdG5TdGFydFN0YXRlLHM9YS5ydWxlLGw9YS5wcm9kdWN0aW9uLHU9dHplKHt0b3BMZXZlbFJ1bGU6cyxhbWJpZ3VpdHlJbmRpY2VzOnIscHJvZHVjdGlvbjpsLHByZWZpeFBhdGg6aX0pO24odSl9ZnVuY3Rpb24gdHplKHQpe2xldCBlPUplKHQucHJlZml4UGF0aCxpPT5CdShpKSkuam9pbigiLCAiKSxyPXQucHJvZHVjdGlvbi5pZHg9PT0wPyIiOnQucHJvZHVjdGlvbi5pZHgsbj1gQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7dC5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oIiwgIil9PiBpbiA8JHtyemUodC5wcm9kdWN0aW9uKX0ke3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuCmA7cmV0dXJuIG49bitgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTCkZvciBGdXJ0aGVyIGRldGFpbHMuYCxufWZ1bmN0aW9uIHJ6ZSh0KXtpZih0IGluc3RhbmNlb2Ygbm4pcmV0dXJuIlNVQlJVTEUiO2lmKHQgaW5zdGFuY2VvZiBhbilyZXR1cm4iT1BUSU9OIjtpZih0IGluc3RhbmNlb2YgeG4pcmV0dXJuIk9SIjtpZih0IGluc3RhbmNlb2YgQW4pcmV0dXJuIkFUX0xFQVNUX09ORSI7aWYodCBpbnN0YW5jZW9mIF9uKXJldHVybiJBVF9MRUFTVF9PTkVfU0VQIjtpZih0IGluc3RhbmNlb2Ygdm4pcmV0dXJuIk1BTllfU0VQIjtpZih0IGluc3RhbmNlb2YgTHIpcmV0dXJuIk1BTlkiO2lmKHQgaW5zdGFuY2VvZiBrcilyZXR1cm4iQ09OU1VNRSI7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gbnplKHQsZSxyKXtsZXQgbj1kYShlLmNvbmZpZ3MuZWxlbWVudHMsYT0+YS5zdGF0ZS50cmFuc2l0aW9ucyksaT1lbmUobi5maWx0ZXIoYT0+YSBpbnN0YW5jZW9mIHVnKS5tYXAoYT0+YS50b2tlblR5cGUpLGE9PmEudG9rZW5UeXBlSWR4KTtyZXR1cm57YWN0dWFsVG9rZW46cixwb3NzaWJsZVRva2VuVHlwZXM6aSx0b2tlblBhdGg6dH19ZnVuY3Rpb24gaXplKHQsZSl7cmV0dXJuIHQuZWRnZXNbZS50b2tlblR5cGVJZHhdfWZ1bmN0aW9uIGF6ZSh0LGUscil7bGV0IG49bmV3IHBnLGk9W107Zm9yKGxldCBzIG9mIHQuZWxlbWVudHMpe2lmKHIuaXMocy5hbHQpPT09ITEpY29udGludWU7aWYocy5zdGF0ZS50eXBlPT09Zmcpe2kucHVzaChzKTtjb250aW51ZX1sZXQgbD1zLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtmb3IobGV0IHU9MDt1PGw7dSsrKXtsZXQgaD1zLnN0YXRlLnRyYW5zaXRpb25zW3VdLGY9c3plKGgsZSk7ZiE9PXZvaWQgMCYmbi5hZGQoe3N0YXRlOmYsYWx0OnMuYWx0LHN0YWNrOnMuc3RhY2t9KX19bGV0IGE7aWYoaS5sZW5ndGg9PT0wJiZuLnNpemU9PT0xJiYoYT1uKSxhPT09dm9pZCAwKXthPW5ldyBwZztmb3IobGV0IHMgb2Ygbi5lbGVtZW50cyliayhzLGEpfWlmKGkubGVuZ3RoPjAmJiF1emUoYSkpZm9yKGxldCBzIG9mIGkpYS5hZGQocyk7cmV0dXJuIGF9ZnVuY3Rpb24gc3plKHQsZSl7aWYodCBpbnN0YW5jZW9mIHVnJiZvMihlLHQudG9rZW5UeXBlKSlyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gb3plKHQsZSl7bGV0IHI7Zm9yKGxldCBuIG9mIHQuZWxlbWVudHMpaWYoZS5pcyhuLmFsdCk9PT0hMCl7aWYocj09PXZvaWQgMClyPW4uYWx0O2Vsc2UgaWYociE9PW4uYWx0KXJldHVybn1yZXR1cm4gcn1mdW5jdGlvbiBxb2UodCl7cmV0dXJue2NvbmZpZ3M6dCxlZGdlczp7fSxpc0FjY2VwdFN0YXRlOiExLHByZWRpY3Rpb246LTF9fWZ1bmN0aW9uIFlvZSh0LGUscixuKXtyZXR1cm4gbj1Yb2UodCxuKSxlLmVkZ2VzW3IudG9rZW5UeXBlSWR4XT1uLG59ZnVuY3Rpb24gWG9lKHQsZSl7aWYoZT09PWsyKXJldHVybiBlO2xldCByPWUuY29uZmlncy5rZXksbj10LnN0YXRlc1tyXTtyZXR1cm4gbiE9PXZvaWQgMD9uOihlLmNvbmZpZ3MuZmluYWxpemUoKSx0LnN0YXRlc1tyXT1lLGUpfWZ1bmN0aW9uIGx6ZSh0KXtsZXQgZT1uZXcgcGcscj10LnRyYW5zaXRpb25zLmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgYT17c3RhdGU6dC50cmFuc2l0aW9uc1tuXS50YXJnZXQsYWx0Om4sc3RhY2s6W119O2JrKGEsZSl9cmV0dXJuIGV9ZnVuY3Rpb24gYmsodCxlKXtsZXQgcj10LnN0YXRlO2lmKHIudHlwZT09PWZnKXtpZih0LnN0YWNrLmxlbmd0aD4wKXtsZXQgaT1bLi4udC5zdGFja10scz17c3RhdGU6aS5wb3AoKSxhbHQ6dC5hbHQsc3RhY2s6aX07YmsocyxlKX1lbHNlIGUuYWRkKHQpO3JldHVybn1yLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnN8fGUuYWRkKHQpO2xldCBuPXIudHJhbnNpdGlvbnMubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBhPXIudHJhbnNpdGlvbnNbaV0scz1jemUodCxhKTtzIT09dm9pZCAwJiZiayhzLGUpfX1mdW5jdGlvbiBjemUodCxlKXtpZihlIGluc3RhbmNlb2YgVDIpcmV0dXJue3N0YXRlOmUudGFyZ2V0LGFsdDp0LmFsdCxzdGFjazp0LnN0YWNrfTtpZihlIGluc3RhbmNlb2YgaGcpe2xldCByPVsuLi50LnN0YWNrLGUuZm9sbG93U3RhdGVdO3JldHVybntzdGF0ZTplLnRhcmdldCxhbHQ6dC5hbHQsc3RhY2s6cn19fWZ1bmN0aW9uIHV6ZSh0KXtmb3IobGV0IGUgb2YgdC5lbGVtZW50cylpZihlLnN0YXRlLnR5cGU9PT1mZylyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBoemUodCl7Zm9yKGxldCBlIG9mIHQuZWxlbWVudHMpaWYoZS5zdGF0ZS50eXBlIT09ZmcpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZnplKHQpe2lmKGh6ZSh0KSlyZXR1cm4hMDtsZXQgZT1kemUodC5lbGVtZW50cyk7cmV0dXJuIHB6ZShlKSYmIW16ZShlKX1mdW5jdGlvbiBkemUodCl7bGV0IGU9bmV3IE1hcDtmb3IobGV0IHIgb2YgdCl7bGV0IG49WFIociwhMSksaT1lLmdldChuKTtpPT09dm9pZCAwJiYoaT17fSxlLnNldChuLGkpKSxpW3IuYWx0XT0hMH1yZXR1cm4gZX1mdW5jdGlvbiBwemUodCl7Zm9yKGxldCBlIG9mIEFycmF5LmZyb20odC52YWx1ZXMoKSkpaWYoT2JqZWN0LmtleXMoZSkubGVuZ3RoPjEpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbXplKHQpe2ZvcihsZXQgZSBvZiBBcnJheS5mcm9tKHQudmFsdWVzKCkpKWlmKE9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTEpcmV0dXJuITA7cmV0dXJuITF9dmFyIHhrLEhvZSxFMixqb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtzMCgpO1ZvZSgpO1VvZSgpO1lMKCk7R0woKTt0bmUoKTtSbSgpO2d3KCk7V3coKTtLdygpO0tMKCk7byhLRmUsImNyZWF0ZURGQUNhY2hlIik7eGs9Y2xhc3N7c3RhdGlje28odGhpcywiUHJlZGljYXRlU2V0Iil9Y29uc3RydWN0b3IoKXt0aGlzLnByZWRpY2F0ZXM9W119aXMoZSl7cmV0dXJuIGU+PXRoaXMucHJlZGljYXRlcy5sZW5ndGh8fHRoaXMucHJlZGljYXRlc1tlXX1zZXQoZSxyKXt0aGlzLnByZWRpY2F0ZXNbZV09cn10b1N0cmluZygpe2xldCBlPSIiLHI9dGhpcy5wcmVkaWNhdGVzLmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKWUrPXRoaXMucHJlZGljYXRlc1tuXT09PSEwPyIxIjoiMCI7cmV0dXJuIGV9fSxIb2U9bmV3IHhrLEUyPWNsYXNzIGV4dGVuZHMgenV7c3RhdGlje28odGhpcywiTExTdGFyTG9va2FoZWFkU3RyYXRlZ3kiKX1jb25zdHJ1Y3RvcihlKXt2YXIgcjtzdXBlcigpLHRoaXMubG9nZ2luZz0ocj1lPy5sb2dnaW5nKSE9PW51bGwmJnIhPT12b2lkIDA/cjpuPT5jb25zb2xlLmxvZyhuKX1pbml0aWFsaXplKGUpe3RoaXMuYXRuPUZvZShlLnJ1bGVzKSx0aGlzLmRmYXM9UUZlKHRoaXMuYXRuKX12YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzKCl7cmV0dXJuW119dmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmVzKCl7cmV0dXJuW119YnVpbGRMb29rYWhlYWRGb3JBbHRlcm5hdGlvbihlKXtsZXR7cHJvZE9jY3VycmVuY2U6cixydWxlOm4saGFzUHJlZGljYXRlczppLGR5bmFtaWNUb2tlbnNFbmFibGVkOmF9PWUscz10aGlzLmRmYXMsbD10aGlzLmxvZ2dpbmcsdT1vMChuLCJBbHRlcm5hdGlvbiIsciksZj10aGlzLmF0bi5kZWNpc2lvbk1hcFt1XS5kZWNpc2lvbixkPUplKFFUKHttYXhMb29rYWhlYWQ6MSxvY2N1cnJlbmNlOnIscHJvZFR5cGU6IkFsdGVybmF0aW9uIixydWxlOm59KSxwPT5KZShwLG09Pm1bMF0pKTtpZihXb2UoZCwhMSkmJiFhKXtsZXQgcD1xcihkLChtLGcseSk9PihDZShnLHY9Pnt2JiYobVt2LnRva2VuVHlwZUlkeF09eSxDZSh2LmNhdGVnb3J5TWF0Y2hlcyx4PT57bVt4XT15fSkpfSksbSkse30pO3JldHVybiBpP2Z1bmN0aW9uKG0pe3ZhciBnO2xldCB5PXRoaXMuTEEoMSksdj1wW3kudG9rZW5UeXBlSWR4XTtpZihtIT09dm9pZCAwJiZ2IT09dm9pZCAwKXtsZXQgeD0oZz1tW3ZdKT09PW51bGx8fGc9PT12b2lkIDA/dm9pZCAwOmcuR0FURTtpZih4IT09dm9pZCAwJiZ4LmNhbGwodGhpcyk9PT0hMSlyZXR1cm59cmV0dXJuIHZ9OmZ1bmN0aW9uKCl7bGV0IG09dGhpcy5MQSgxKTtyZXR1cm4gcFttLnRva2VuVHlwZUlkeF19fWVsc2UgcmV0dXJuIGk/ZnVuY3Rpb24ocCl7bGV0IG09bmV3IHhrLGc9cD09PXZvaWQgMD8wOnAubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8Zzt2Kyspe2xldCB4PXA/Llt2XS5HQVRFO20uc2V0KHYseD09PXZvaWQgMHx8eC5jYWxsKHRoaXMpKX1sZXQgeT1qUi5jYWxsKHRoaXMscyxmLG0sbCk7cmV0dXJuIHR5cGVvZiB5PT0ibnVtYmVyIj95OnZvaWQgMH06ZnVuY3Rpb24oKXtsZXQgcD1qUi5jYWxsKHRoaXMscyxmLEhvZSxsKTtyZXR1cm4gdHlwZW9mIHA9PSJudW1iZXIiP3A6dm9pZCAwfX1idWlsZExvb2thaGVhZEZvck9wdGlvbmFsKGUpe2xldHtwcm9kT2NjdXJyZW5jZTpyLHJ1bGU6bixwcm9kVHlwZTppLGR5bmFtaWNUb2tlbnNFbmFibGVkOmF9PWUscz10aGlzLmRmYXMsbD10aGlzLmxvZ2dpbmcsdT1vMChuLGksciksZj10aGlzLmF0bi5kZWNpc2lvbk1hcFt1XS5kZWNpc2lvbixkPUplKFFUKHttYXhMb29rYWhlYWQ6MSxvY2N1cnJlbmNlOnIscHJvZFR5cGU6aSxydWxlOm59KSxwPT5KZShwLG09Pm1bMF0pKTtpZihXb2UoZCkmJmRbMF1bMF0mJiFhKXtsZXQgcD1kWzBdLG09V3IocCk7aWYobS5sZW5ndGg9PT0xJiZjcihtWzBdLmNhdGVnb3J5TWF0Y2hlcykpe2xldCB5PW1bMF0udG9rZW5UeXBlSWR4O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeD09PXl9fWVsc2V7bGV0IGc9cXIobSwoeSx2KT0+KHYhPT12b2lkIDAmJih5W3YudG9rZW5UeXBlSWR4XT0hMCxDZSh2LmNhdGVnb3J5TWF0Y2hlcyx4PT57eVt4XT0hMH0pKSx5KSx7fSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IHk9dGhpcy5MQSgxKTtyZXR1cm4gZ1t5LnRva2VuVHlwZUlkeF09PT0hMH19fXJldHVybiBmdW5jdGlvbigpe2xldCBwPWpSLmNhbGwodGhpcyxzLGYsSG9lLGwpO3JldHVybiB0eXBlb2YgcD09Im9iamVjdCI/ITE6cD09PTB9fX07byhXb2UsImlzTEwxU2VxdWVuY2UiKTtvKFFGZSwiaW5pdEFUTlNpbXVsYXRvciIpO28oalIsImFkYXB0aXZlUHJlZGljdCIpO28oWkZlLCJwZXJmb3JtTG9va2FoZWFkIik7byhKRmUsImNvbXB1dGVMb29rYWhlYWRUYXJnZXQiKTtvKGV6ZSwicmVwb3J0TG9va2FoZWFkQW1iaWd1aXR5Iik7byh0emUsImJ1aWxkQW1iaWd1aXR5RXJyb3IiKTtvKHJ6ZSwiZ2V0UHJvZHVjdGlvbkRzbE5hbWUiKTtvKG56ZSwiYnVpbGRBZGFwdGl2ZVByZWRpY3RFcnJvciIpO28oaXplLCJnZXRFeGlzdGluZ1RhcmdldFN0YXRlIik7byhhemUsImNvbXB1dGVSZWFjaFNldCIpO28oc3plLCJnZXRSZWFjaGFibGVUYXJnZXQiKTtvKG96ZSwiZ2V0VW5pcXVlQWx0Iik7byhxb2UsIm5ld0RGQVN0YXRlIik7byhZb2UsImFkZERGQUVkZ2UiKTtvKFhvZSwiYWRkREZBU3RhdGUiKTtvKGx6ZSwiY29tcHV0ZVN0YXJ0U3RhdGUiKTtvKGJrLCJjbG9zdXJlIik7byhjemUsImdldEVwc2lsb25UYXJnZXQiKTtvKHV6ZSwiaGFzQ29uZmlnSW5SdWxlU3RvcFN0YXRlIik7byhoemUsImFsbENvbmZpZ3NJblJ1bGVTdG9wU3RhdGVzIik7byhmemUsImhhc0NvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uIik7byhkemUsImdldENvbmZsaWN0aW5nQWx0U2V0cyIpO28ocHplLCJoYXNDb25mbGljdGluZ0FsdFNldCIpO28obXplLCJoYXNTdGF0ZUFzc29jaWF0ZWRXaXRoT25lQWx0Iil9KTt2YXIgS29lPU0oKCk9PnsidXNlIHN0cmljdCI7am9lKCl9KTt2YXIgUW9lLEtSLFpvZSx3ayxYcixEcixUayxKb2UsUVIsZWxlLHRsZSxybGUsbmxlLFpSLGlsZSxhbGUsc2xlLGtrLG1nLGdnLEpSLHlnLG9sZSxlTSx0TSxyTSxuTSxpTSxsbGUsY2xlLGFNLHVsZSxzTSxTMixobGUsZmxlLGRsZSxwbGUsbWxlLGdsZSx5bGUsdmxlLEVrLHhsZSxibGUsd2xlLFRsZSxrbGUsRWxlLFNsZSxDbGUsQWxlLF9sZSxMbGUsU2ssRGxlLE5sZSxSbGUsTWxlLElsZSxPbGUsUGxlLEJsZSxGbGUsemxlLEdsZSwkbGUsVmxlLG9NLGxNLFVsZSxIbGUsV2xlLFlsZSxxbGUsWGxlLGpsZSxLbGUsUWxlLGNNLE9lLHVNPU0oKCk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIn1vKGUsImlzIiksdC5pcz1lfSkoUW9lfHwoUW9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIn1vKGUsImlzIiksdC5pcz1lfSkoS1J8fChLUj17fSkpOyhmdW5jdGlvbih0KXt0Lk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCx0Lk1BWF9WQUxVRT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIGUocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIiYmdC5NSU5fVkFMVUU8PXImJnI8PXQuTUFYX1ZBTFVFfW8oZSwiaXMiKSx0LmlzPWV9KShab2V8fChab2U9e30pKTsoZnVuY3Rpb24odCl7dC5NSU5fVkFMVUU9MCx0Lk1BWF9WQUxVRT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIGUocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIiYmdC5NSU5fVkFMVUU8PXImJnI8PXQuTUFYX1ZBTFVFfW8oZSwiaXMiKSx0LmlzPWV9KSh3a3x8KHdrPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm4gbj09PU51bWJlci5NQVhfVkFMVUUmJihuPXdrLk1BWF9WQUxVRSksaT09PU51bWJlci5NQVhfVkFMVUUmJihpPXdrLk1BWF9WQUxVRSkse2xpbmU6bixjaGFyYWN0ZXI6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2Uub2JqZWN0TGl0ZXJhbChpKSYmT2UudWludGVnZXIoaS5saW5lKSYmT2UudWludGVnZXIoaS5jaGFyYWN0ZXIpfW8ociwiaXMiKSx0LmlzPXJ9KShYcnx8KFhyPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7aWYoT2UudWludGVnZXIobikmJk9lLnVpbnRlZ2VyKGkpJiZPZS51aW50ZWdlcihhKSYmT2UudWludGVnZXIocykpcmV0dXJue3N0YXJ0OlhyLmNyZWF0ZShuLGkpLGVuZDpYci5jcmVhdGUoYSxzKX07aWYoWHIuaXMobikmJlhyLmlzKGkpKXJldHVybntzdGFydDpuLGVuZDppfTt0aHJvdyBuZXcgRXJyb3IoYFJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1ske259LCAke2l9LCAke2F9LCAke3N9XWApfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLm9iamVjdExpdGVyYWwoaSkmJlhyLmlzKGkuc3RhcnQpJiZYci5pcyhpLmVuZCl9byhyLCJpcyIpLHQuaXM9cn0pKERyfHwoRHI9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt1cmk6bixyYW5nZTppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5vYmplY3RMaXRlcmFsKGkpJiZEci5pcyhpLnJhbmdlKSYmKE9lLnN0cmluZyhpLnVyaSl8fE9lLnVuZGVmaW5lZChpLnVyaSkpfW8ociwiaXMiKSx0LmlzPXJ9KShUa3x8KFRrPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7cmV0dXJue3RhcmdldFVyaTpuLHRhcmdldFJhbmdlOmksdGFyZ2V0U2VsZWN0aW9uUmFuZ2U6YSxvcmlnaW5TZWxlY3Rpb25SYW5nZTpzfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5vYmplY3RMaXRlcmFsKGkpJiZEci5pcyhpLnRhcmdldFJhbmdlKSYmT2Uuc3RyaW5nKGkudGFyZ2V0VXJpKSYmRHIuaXMoaS50YXJnZXRTZWxlY3Rpb25SYW5nZSkmJihEci5pcyhpLm9yaWdpblNlbGVjdGlvblJhbmdlKXx8T2UudW5kZWZpbmVkKGkub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX1vKHIsImlzIiksdC5pcz1yfSkoSm9lfHwoSm9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7cmV0dXJue3JlZDpuLGdyZWVuOmksYmx1ZTphLGFscGhhOnN9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLm9iamVjdExpdGVyYWwoaSkmJk9lLm51bWJlclJhbmdlKGkucmVkLDAsMSkmJk9lLm51bWJlclJhbmdlKGkuZ3JlZW4sMCwxKSYmT2UubnVtYmVyUmFuZ2UoaS5ibHVlLDAsMSkmJk9lLm51bWJlclJhbmdlKGkuYWxwaGEsMCwxKX1vKHIsImlzIiksdC5pcz1yfSkoUVJ8fChRUj17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue3JhbmdlOm4sY29sb3I6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2Uub2JqZWN0TGl0ZXJhbChpKSYmRHIuaXMoaS5yYW5nZSkmJlFSLmlzKGkuY29sb3IpfW8ociwiaXMiKSx0LmlzPXJ9KShlbGV8fChlbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue2xhYmVsOm4sdGV4dEVkaXQ6aSxhZGRpdGlvbmFsVGV4dEVkaXRzOmF9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLm9iamVjdExpdGVyYWwoaSkmJk9lLnN0cmluZyhpLmxhYmVsKSYmKE9lLnVuZGVmaW5lZChpLnRleHRFZGl0KXx8Z2cuaXMoaSkpJiYoT2UudW5kZWZpbmVkKGkuYWRkaXRpb25hbFRleHRFZGl0cyl8fE9lLnR5cGVkQXJyYXkoaS5hZGRpdGlvbmFsVGV4dEVkaXRzLGdnLmlzKSl9byhyLCJpcyIpLHQuaXM9cn0pKHRsZXx8KHRsZT17fSkpOyhmdW5jdGlvbih0KXt0LkNvbW1lbnQ9ImNvbW1lbnQiLHQuSW1wb3J0cz0iaW1wb3J0cyIsdC5SZWdpb249InJlZ2lvbiJ9KShybGV8fChybGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSxzLGwsdSl7bGV0IGg9e3N0YXJ0TGluZTpuLGVuZExpbmU6aX07cmV0dXJuIE9lLmRlZmluZWQoYSkmJihoLnN0YXJ0Q2hhcmFjdGVyPWEpLE9lLmRlZmluZWQocykmJihoLmVuZENoYXJhY3Rlcj1zKSxPZS5kZWZpbmVkKGwpJiYoaC5raW5kPWwpLE9lLmRlZmluZWQodSkmJihoLmNvbGxhcHNlZFRleHQ9dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5vYmplY3RMaXRlcmFsKGkpJiZPZS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJk9lLnVpbnRlZ2VyKGkuc3RhcnRMaW5lKSYmKE9lLnVuZGVmaW5lZChpLnN0YXJ0Q2hhcmFjdGVyKXx8T2UudWludGVnZXIoaS5zdGFydENoYXJhY3RlcikpJiYoT2UudW5kZWZpbmVkKGkuZW5kQ2hhcmFjdGVyKXx8T2UudWludGVnZXIoaS5lbmRDaGFyYWN0ZXIpKSYmKE9lLnVuZGVmaW5lZChpLmtpbmQpfHxPZS5zdHJpbmcoaS5raW5kKSl9byhyLCJpcyIpLHQuaXM9cn0pKG5sZXx8KG5sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue2xvY2F0aW9uOm4sbWVzc2FnZTppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5kZWZpbmVkKGkpJiZUay5pcyhpLmxvY2F0aW9uKSYmT2Uuc3RyaW5nKGkubWVzc2FnZSl9byhyLCJpcyIpLHQuaXM9cn0pKFpSfHwoWlI9e30pKTsoZnVuY3Rpb24odCl7dC5FcnJvcj0xLHQuV2FybmluZz0yLHQuSW5mb3JtYXRpb249Myx0LkhpbnQ9NH0pKGlsZXx8KGlsZT17fSkpOyhmdW5jdGlvbih0KXt0LlVubmVjZXNzYXJ5PTEsdC5EZXByZWNhdGVkPTJ9KShhbGV8fChhbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBPZS5vYmplY3RMaXRlcmFsKG4pJiZPZS5zdHJpbmcobi5ocmVmKX1vKGUsImlzIiksdC5pcz1lfSkoc2xlfHwoc2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyxsLHUpe2xldCBoPXtyYW5nZTpuLG1lc3NhZ2U6aX07cmV0dXJuIE9lLmRlZmluZWQoYSkmJihoLnNldmVyaXR5PWEpLE9lLmRlZmluZWQocykmJihoLmNvZGU9cyksT2UuZGVmaW5lZChsKSYmKGguc291cmNlPWwpLE9lLmRlZmluZWQodSkmJihoLnJlbGF0ZWRJbmZvcm1hdGlvbj11KSxofW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe3ZhciBpO2xldCBhPW47cmV0dXJuIE9lLmRlZmluZWQoYSkmJkRyLmlzKGEucmFuZ2UpJiZPZS5zdHJpbmcoYS5tZXNzYWdlKSYmKE9lLm51bWJlcihhLnNldmVyaXR5KXx8T2UudW5kZWZpbmVkKGEuc2V2ZXJpdHkpKSYmKE9lLmludGVnZXIoYS5jb2RlKXx8T2Uuc3RyaW5nKGEuY29kZSl8fE9lLnVuZGVmaW5lZChhLmNvZGUpKSYmKE9lLnVuZGVmaW5lZChhLmNvZGVEZXNjcmlwdGlvbil8fE9lLnN0cmluZygoaT1hLmNvZGVEZXNjcmlwdGlvbik9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmhyZWYpKSYmKE9lLnN0cmluZyhhLnNvdXJjZSl8fE9lLnVuZGVmaW5lZChhLnNvdXJjZSkpJiYoT2UudW5kZWZpbmVkKGEucmVsYXRlZEluZm9ybWF0aW9uKXx8T2UudHlwZWRBcnJheShhLnJlbGF0ZWRJbmZvcm1hdGlvbixaUi5pcykpfW8ociwiaXMiKSx0LmlzPXJ9KShra3x8KGtrPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLC4uLmEpe2xldCBzPXt0aXRsZTpuLGNvbW1hbmQ6aX07cmV0dXJuIE9lLmRlZmluZWQoYSkmJmEubGVuZ3RoPjAmJihzLmFyZ3VtZW50cz1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLmRlZmluZWQoaSkmJk9lLnN0cmluZyhpLnRpdGxlKSYmT2Uuc3RyaW5nKGkuY29tbWFuZCl9byhyLCJpcyIpLHQuaXM9cn0pKG1nfHwobWc9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMpe3JldHVybntyYW5nZTphLG5ld1RleHQ6c319byhlLCJyZXBsYWNlIiksdC5yZXBsYWNlPWU7ZnVuY3Rpb24gcihhLHMpe3JldHVybntyYW5nZTp7c3RhcnQ6YSxlbmQ6YX0sbmV3VGV4dDpzfX1vKHIsImluc2VydCIpLHQuaW5zZXJ0PXI7ZnVuY3Rpb24gbihhKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIifX1vKG4sImRlbCIpLHQuZGVsPW47ZnVuY3Rpb24gaShhKXtsZXQgcz1hO3JldHVybiBPZS5vYmplY3RMaXRlcmFsKHMpJiZPZS5zdHJpbmcocy5uZXdUZXh0KSYmRHIuaXMocy5yYW5nZSl9byhpLCJpcyIpLHQuaXM9aX0pKGdnfHwoZ2c9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2xhYmVsOm59O3JldHVybiBpIT09dm9pZCAwJiYocy5uZWVkc0NvbmZpcm1hdGlvbj1pKSxhIT09dm9pZCAwJiYocy5kZXNjcmlwdGlvbj1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLm9iamVjdExpdGVyYWwoaSkmJk9lLnN0cmluZyhpLmxhYmVsKSYmKE9lLmJvb2xlYW4oaS5uZWVkc0NvbmZpcm1hdGlvbil8fGkubmVlZHNDb25maXJtYXRpb249PT12b2lkIDApJiYoT2Uuc3RyaW5nKGkuZGVzY3JpcHRpb24pfHxpLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1vKHIsImlzIiksdC5pcz1yfSkoSlJ8fChKUj17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuIE9lLnN0cmluZyhuKX1vKGUsImlzIiksdC5pcz1lfSkoeWd8fCh5Zz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGEscyxsKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OnMsYW5ub3RhdGlvbklkOmx9fW8oZSwicmVwbGFjZSIpLHQucmVwbGFjZT1lO2Z1bmN0aW9uIHIoYSxzLGwpe3JldHVybntyYW5nZTp7c3RhcnQ6YSxlbmQ6YX0sbmV3VGV4dDpzLGFubm90YXRpb25JZDpsfX1vKHIsImluc2VydCIpLHQuaW5zZXJ0PXI7ZnVuY3Rpb24gbihhLHMpe3JldHVybntyYW5nZTphLG5ld1RleHQ6IiIsYW5ub3RhdGlvbklkOnN9fW8obiwiZGVsIiksdC5kZWw9bjtmdW5jdGlvbiBpKGEpe2xldCBzPWE7cmV0dXJuIGdnLmlzKHMpJiYoSlIuaXMocy5hbm5vdGF0aW9uSWQpfHx5Zy5pcyhzLmFubm90YXRpb25JZCkpfW8oaSwiaXMiKSx0LmlzPWl9KShvbGV8fChvbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt0ZXh0RG9jdW1lbnQ6bixlZGl0czppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5kZWZpbmVkKGkpJiZhTS5pcyhpLnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkoaS5lZGl0cyl9byhyLCJpcyIpLHQuaXM9cn0pKGVNfHwoZU09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2tpbmQ6ImNyZWF0ZSIsdXJpOm59O3JldHVybiBpIT09dm9pZCAwJiYoaS5vdmVyd3JpdGUhPT12b2lkIDB8fGkuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYocy5vcHRpb25zPWkpLGEhPT12b2lkIDAmJihzLmFubm90YXRpb25JZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJjcmVhdGUiJiZPZS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8T2UuYm9vbGVhbihpLm9wdGlvbnMub3ZlcndyaXRlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fE9lLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fHlnLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKHRNfHwodE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSxzKXtsZXQgbD17a2luZDoicmVuYW1lIixvbGRVcmk6bixuZXdVcmk6aX07cmV0dXJuIGEhPT12b2lkIDAmJihhLm92ZXJ3cml0ZSE9PXZvaWQgMHx8YS5pZ25vcmVJZkV4aXN0cyE9PXZvaWQgMCkmJihsLm9wdGlvbnM9YSkscyE9PXZvaWQgMCYmKGwuYW5ub3RhdGlvbklkPXMpLGx9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSYmaS5raW5kPT09InJlbmFtZSImJk9lLnN0cmluZyhpLm9sZFVyaSkmJk9lLnN0cmluZyhpLm5ld1VyaSkmJihpLm9wdGlvbnM9PT12b2lkIDB8fChpLm9wdGlvbnMub3ZlcndyaXRlPT09dm9pZCAwfHxPZS5ib29sZWFuKGkub3B0aW9ucy5vdmVyd3JpdGUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8T2UuYm9vbGVhbihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJihpLmFubm90YXRpb25JZD09PXZvaWQgMHx8eWcuaXMoaS5hbm5vdGF0aW9uSWQpKX1vKHIsImlzIiksdC5pcz1yfSkock18fChyTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtsZXQgcz17a2luZDoiZGVsZXRlIix1cmk6bn07cmV0dXJuIGkhPT12b2lkIDAmJihpLnJlY3Vyc2l2ZSE9PXZvaWQgMHx8aS5pZ25vcmVJZk5vdEV4aXN0cyE9PXZvaWQgMCkmJihzLm9wdGlvbnM9aSksYSE9PXZvaWQgMCYmKHMuYW5ub3RhdGlvbklkPWEpLHN9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSYmaS5raW5kPT09ImRlbGV0ZSImJk9lLnN0cmluZyhpLnVyaSkmJihpLm9wdGlvbnM9PT12b2lkIDB8fChpLm9wdGlvbnMucmVjdXJzaXZlPT09dm9pZCAwfHxPZS5ib29sZWFuKGkub3B0aW9ucy5yZWN1cnNpdmUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cz09PXZvaWQgMHx8T2UuYm9vbGVhbihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJihpLmFubm90YXRpb25JZD09PXZvaWQgMHx8eWcuaXMoaS5hbm5vdGF0aW9uSWQpKX1vKHIsImlzIiksdC5pcz1yfSkobk18fChuTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuIG4mJihuLmNoYW5nZXMhPT12b2lkIDB8fG4uZG9jdW1lbnRDaGFuZ2VzIT09dm9pZCAwKSYmKG4uZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwfHxuLmRvY3VtZW50Q2hhbmdlcy5ldmVyeShpPT5PZS5zdHJpbmcoaS5raW5kKT90TS5pcyhpKXx8ck0uaXMoaSl8fG5NLmlzKGkpOmVNLmlzKGkpKSl9byhlLCJpcyIpLHQuaXM9ZX0pKGlNfHwoaU09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm57dXJpOm59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLmRlZmluZWQoaSkmJk9lLnN0cmluZyhpLnVyaSl9byhyLCJpcyIpLHQuaXM9cn0pKGxsZXx8KGxsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue3VyaTpuLHZlcnNpb246aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2UuZGVmaW5lZChpKSYmT2Uuc3RyaW5nKGkudXJpKSYmT2UuaW50ZWdlcihpLnZlcnNpb24pfW8ociwiaXMiKSx0LmlzPXJ9KShjbGV8fChjbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt1cmk6bix2ZXJzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLmRlZmluZWQoaSkmJk9lLnN0cmluZyhpLnVyaSkmJihpLnZlcnNpb249PT1udWxsfHxPZS5pbnRlZ2VyKGkudmVyc2lvbikpfW8ociwiaXMiKSx0LmlzPXJ9KShhTXx8KGFNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7cmV0dXJue3VyaTpuLGxhbmd1YWdlSWQ6aSx2ZXJzaW9uOmEsdGV4dDpzfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5kZWZpbmVkKGkpJiZPZS5zdHJpbmcoaS51cmkpJiZPZS5zdHJpbmcoaS5sYW5ndWFnZUlkKSYmT2UuaW50ZWdlcihpLnZlcnNpb24pJiZPZS5zdHJpbmcoaS50ZXh0KX1vKHIsImlzIiksdC5pcz1yfSkodWxlfHwodWxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuUGxhaW5UZXh0PSJwbGFpbnRleHQiLHQuTWFya2Rvd249Im1hcmtkb3duIjtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuIG49PT10LlBsYWluVGV4dHx8bj09PXQuTWFya2Rvd259byhlLCJpcyIpLHQuaXM9ZX0pKHNNfHwoc009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBPZS5vYmplY3RMaXRlcmFsKHIpJiZzTS5pcyhuLmtpbmQpJiZPZS5zdHJpbmcobi52YWx1ZSl9byhlLCJpcyIpLHQuaXM9ZX0pKFMyfHwoUzI9e30pKTsoZnVuY3Rpb24odCl7dC5UZXh0PTEsdC5NZXRob2Q9Mix0LkZ1bmN0aW9uPTMsdC5Db25zdHJ1Y3Rvcj00LHQuRmllbGQ9NSx0LlZhcmlhYmxlPTYsdC5DbGFzcz03LHQuSW50ZXJmYWNlPTgsdC5Nb2R1bGU9OSx0LlByb3BlcnR5PTEwLHQuVW5pdD0xMSx0LlZhbHVlPTEyLHQuRW51bT0xMyx0LktleXdvcmQ9MTQsdC5TbmlwcGV0PTE1LHQuQ29sb3I9MTYsdC5GaWxlPTE3LHQuUmVmZXJlbmNlPTE4LHQuRm9sZGVyPTE5LHQuRW51bU1lbWJlcj0yMCx0LkNvbnN0YW50PTIxLHQuU3RydWN0PTIyLHQuRXZlbnQ9MjMsdC5PcGVyYXRvcj0yNCx0LlR5cGVQYXJhbWV0ZXI9MjV9KShobGV8fChobGU9e30pKTsoZnVuY3Rpb24odCl7dC5QbGFpblRleHQ9MSx0LlNuaXBwZXQ9Mn0pKGZsZXx8KGZsZT17fSkpOyhmdW5jdGlvbih0KXt0LkRlcHJlY2F0ZWQ9MX0pKGRsZXx8KGRsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtyZXR1cm57bmV3VGV4dDpuLGluc2VydDppLHJlcGxhY2U6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSYmT2Uuc3RyaW5nKGkubmV3VGV4dCkmJkRyLmlzKGkuaW5zZXJ0KSYmRHIuaXMoaS5yZXBsYWNlKX1vKHIsImlzIiksdC5pcz1yfSkocGxlfHwocGxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuYXNJcz0xLHQuYWRqdXN0SW5kZW50YXRpb249Mn0pKG1sZXx8KG1sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuIG4mJihPZS5zdHJpbmcobi5kZXRhaWwpfHxuLmRldGFpbD09PXZvaWQgMCkmJihPZS5zdHJpbmcobi5kZXNjcmlwdGlvbil8fG4uZGVzY3JpcHRpb249PT12b2lkIDApfW8oZSwiaXMiKSx0LmlzPWV9KShnbGV8fChnbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57bGFiZWw6cn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoeWxlfHwoeWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm57aXRlbXM6cnx8W10saXNJbmNvbXBsZXRlOiEhbn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkodmxlfHwodmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJuIG4ucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfW8oZSwiZnJvbVBsYWluVGV4dCIpLHQuZnJvbVBsYWluVGV4dD1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2Uuc3RyaW5nKGkpfHxPZS5vYmplY3RMaXRlcmFsKGkpJiZPZS5zdHJpbmcoaS5sYW5ndWFnZSkmJk9lLnN0cmluZyhpLnZhbHVlKX1vKHIsImlzIiksdC5pcz1yfSkoRWt8fChFaz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuISFuJiZPZS5vYmplY3RMaXRlcmFsKG4pJiYoUzIuaXMobi5jb250ZW50cyl8fEVrLmlzKG4uY29udGVudHMpfHxPZS50eXBlZEFycmF5KG4uY29udGVudHMsRWsuaXMpKSYmKHIucmFuZ2U9PT12b2lkIDB8fERyLmlzKHIucmFuZ2UpKX1vKGUsImlzIiksdC5pcz1lfSkoeGxlfHwoeGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm4gbj97bGFiZWw6cixkb2N1bWVudGF0aW9uOm59OntsYWJlbDpyfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShibGV8fChibGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4sLi4uaSl7bGV0IGE9e2xhYmVsOnJ9O3JldHVybiBPZS5kZWZpbmVkKG4pJiYoYS5kb2N1bWVudGF0aW9uPW4pLE9lLmRlZmluZWQoaSk/YS5wYXJhbWV0ZXJzPWk6YS5wYXJhbWV0ZXJzPVtdLGF9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkod2xlfHwod2xlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuVGV4dD0xLHQuUmVhZD0yLHQuV3JpdGU9M30pKFRsZXx8KFRsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7bGV0IGk9e3JhbmdlOnJ9O3JldHVybiBPZS5udW1iZXIobikmJihpLmtpbmQ9biksaX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShrbGV8fChrbGU9e30pKTsoZnVuY3Rpb24odCl7dC5GaWxlPTEsdC5Nb2R1bGU9Mix0Lk5hbWVzcGFjZT0zLHQuUGFja2FnZT00LHQuQ2xhc3M9NSx0Lk1ldGhvZD02LHQuUHJvcGVydHk9Nyx0LkZpZWxkPTgsdC5Db25zdHJ1Y3Rvcj05LHQuRW51bT0xMCx0LkludGVyZmFjZT0xMSx0LkZ1bmN0aW9uPTEyLHQuVmFyaWFibGU9MTMsdC5Db25zdGFudD0xNCx0LlN0cmluZz0xNSx0Lk51bWJlcj0xNix0LkJvb2xlYW49MTcsdC5BcnJheT0xOCx0Lk9iamVjdD0xOSx0LktleT0yMCx0Lk51bGw9MjEsdC5FbnVtTWVtYmVyPTIyLHQuU3RydWN0PTIzLHQuRXZlbnQ9MjQsdC5PcGVyYXRvcj0yNSx0LlR5cGVQYXJhbWV0ZXI9MjZ9KShFbGV8fChFbGU9e30pKTsoZnVuY3Rpb24odCl7dC5EZXByZWNhdGVkPTF9KShTbGV8fChTbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4saSxhLHMpe2xldCBsPXtuYW1lOnIsa2luZDpuLGxvY2F0aW9uOnt1cmk6YSxyYW5nZTppfX07cmV0dXJuIHMmJihsLmNvbnRhaW5lck5hbWU9cyksbH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShDbGV8fChDbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4saSxhKXtyZXR1cm4gYSE9PXZvaWQgMD97bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOmkscmFuZ2U6YX19OntuYW1lOnIsa2luZDpuLGxvY2F0aW9uOnt1cmk6aX19fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKEFsZXx8KEFsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMsbCx1KXtsZXQgaD17bmFtZTpuLGRldGFpbDppLGtpbmQ6YSxyYW5nZTpzLHNlbGVjdGlvblJhbmdlOmx9O3JldHVybiB1IT09dm9pZCAwJiYoaC5jaGlsZHJlbj11KSxofW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJk9lLnN0cmluZyhpLm5hbWUpJiZPZS5udW1iZXIoaS5raW5kKSYmRHIuaXMoaS5yYW5nZSkmJkRyLmlzKGkuc2VsZWN0aW9uUmFuZ2UpJiYoaS5kZXRhaWw9PT12b2lkIDB8fE9lLnN0cmluZyhpLmRldGFpbCkpJiYoaS5kZXByZWNhdGVkPT09dm9pZCAwfHxPZS5ib29sZWFuKGkuZGVwcmVjYXRlZCkpJiYoaS5jaGlsZHJlbj09PXZvaWQgMHx8QXJyYXkuaXNBcnJheShpLmNoaWxkcmVuKSkmJihpLnRhZ3M9PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS50YWdzKSl9byhyLCJpcyIpLHQuaXM9cn0pKF9sZXx8KF9sZT17fSkpOyhmdW5jdGlvbih0KXt0LkVtcHR5PSIiLHQuUXVpY2tGaXg9InF1aWNrZml4Iix0LlJlZmFjdG9yPSJyZWZhY3RvciIsdC5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLHQuUmVmYWN0b3JJbmxpbmU9InJlZmFjdG9yLmlubGluZSIsdC5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLHQuU291cmNlPSJzb3VyY2UiLHQuU291cmNlT3JnYW5pemVJbXBvcnRzPSJzb3VyY2Uub3JnYW5pemVJbXBvcnRzIix0LlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCJ9KShMbGV8fChMbGU9e30pKTsoZnVuY3Rpb24odCl7dC5JbnZva2VkPTEsdC5BdXRvbWF0aWM9Mn0pKFNrfHwoU2s9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2RpYWdub3N0aWNzOm59O3JldHVybiBpIT1udWxsJiYocy5vbmx5PWkpLGEhPW51bGwmJihzLnRyaWdnZXJLaW5kPWEpLHN9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2UuZGVmaW5lZChpKSYmT2UudHlwZWRBcnJheShpLmRpYWdub3N0aWNzLGtrLmlzKSYmKGkub25seT09PXZvaWQgMHx8T2UudHlwZWRBcnJheShpLm9ubHksT2Uuc3RyaW5nKSkmJihpLnRyaWdnZXJLaW5kPT09dm9pZCAwfHxpLnRyaWdnZXJLaW5kPT09U2suSW52b2tlZHx8aS50cmlnZ2VyS2luZD09PVNrLkF1dG9tYXRpYyl9byhyLCJpcyIpLHQuaXM9cn0pKERsZXx8KERsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtsZXQgcz17dGl0bGU6bn0sbD0hMDtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciPyhsPSExLHMua2luZD1pKTptZy5pcyhpKT9zLmNvbW1hbmQ9aTpzLmVkaXQ9aSxsJiZhIT09dm9pZCAwJiYocy5raW5kPWEpLHN9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSYmT2Uuc3RyaW5nKGkudGl0bGUpJiYoaS5kaWFnbm9zdGljcz09PXZvaWQgMHx8T2UudHlwZWRBcnJheShpLmRpYWdub3N0aWNzLGtrLmlzKSkmJihpLmtpbmQ9PT12b2lkIDB8fE9lLnN0cmluZyhpLmtpbmQpKSYmKGkuZWRpdCE9PXZvaWQgMHx8aS5jb21tYW5kIT09dm9pZCAwKSYmKGkuY29tbWFuZD09PXZvaWQgMHx8bWcuaXMoaS5jb21tYW5kKSkmJihpLmlzUHJlZmVycmVkPT09dm9pZCAwfHxPZS5ib29sZWFuKGkuaXNQcmVmZXJyZWQpKSYmKGkuZWRpdD09PXZvaWQgMHx8aU0uaXMoaS5lZGl0KSl9byhyLCJpcyIpLHQuaXM9cn0pKE5sZXx8KE5sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7bGV0IGE9e3JhbmdlOm59O3JldHVybiBPZS5kZWZpbmVkKGkpJiYoYS5kYXRhPWkpLGF9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2UuZGVmaW5lZChpKSYmRHIuaXMoaS5yYW5nZSkmJihPZS51bmRlZmluZWQoaS5jb21tYW5kKXx8bWcuaXMoaS5jb21tYW5kKSl9byhyLCJpcyIpLHQuaXM9cn0pKFJsZXx8KFJsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue3RhYlNpemU6bixpbnNlcnRTcGFjZXM6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2UuZGVmaW5lZChpKSYmT2UudWludGVnZXIoaS50YWJTaXplKSYmT2UuYm9vbGVhbihpLmluc2VydFNwYWNlcyl9byhyLCJpcyIpLHQuaXM9cn0pKE1sZXx8KE1sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtyZXR1cm57cmFuZ2U6bix0YXJnZXQ6aSxkYXRhOmF9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLmRlZmluZWQoaSkmJkRyLmlzKGkucmFuZ2UpJiYoT2UudW5kZWZpbmVkKGkudGFyZ2V0KXx8T2Uuc3RyaW5nKGkudGFyZ2V0KSl9byhyLCJpcyIpLHQuaXM9cn0pKElsZXx8KElsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue3JhbmdlOm4scGFyZW50Oml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIE9lLm9iamVjdExpdGVyYWwoaSkmJkRyLmlzKGkucmFuZ2UpJiYoaS5wYXJlbnQ9PT12b2lkIDB8fHQuaXMoaS5wYXJlbnQpKX1vKHIsImlzIiksdC5pcz1yfSkoT2xlfHwoT2xlPXt9KSk7KGZ1bmN0aW9uKHQpe3QubmFtZXNwYWNlPSJuYW1lc3BhY2UiLHQudHlwZT0idHlwZSIsdC5jbGFzcz0iY2xhc3MiLHQuZW51bT0iZW51bSIsdC5pbnRlcmZhY2U9ImludGVyZmFjZSIsdC5zdHJ1Y3Q9InN0cnVjdCIsdC50eXBlUGFyYW1ldGVyPSJ0eXBlUGFyYW1ldGVyIix0LnBhcmFtZXRlcj0icGFyYW1ldGVyIix0LnZhcmlhYmxlPSJ2YXJpYWJsZSIsdC5wcm9wZXJ0eT0icHJvcGVydHkiLHQuZW51bU1lbWJlcj0iZW51bU1lbWJlciIsdC5ldmVudD0iZXZlbnQiLHQuZnVuY3Rpb249ImZ1bmN0aW9uIix0Lm1ldGhvZD0ibWV0aG9kIix0Lm1hY3JvPSJtYWNybyIsdC5rZXl3b3JkPSJrZXl3b3JkIix0Lm1vZGlmaWVyPSJtb2RpZmllciIsdC5jb21tZW50PSJjb21tZW50Iix0LnN0cmluZz0ic3RyaW5nIix0Lm51bWJlcj0ibnVtYmVyIix0LnJlZ2V4cD0icmVnZXhwIix0Lm9wZXJhdG9yPSJvcGVyYXRvciIsdC5kZWNvcmF0b3I9ImRlY29yYXRvciJ9KShQbGV8fChQbGU9e30pKTsoZnVuY3Rpb24odCl7dC5kZWNsYXJhdGlvbj0iZGVjbGFyYXRpb24iLHQuZGVmaW5pdGlvbj0iZGVmaW5pdGlvbiIsdC5yZWFkb25seT0icmVhZG9ubHkiLHQuc3RhdGljPSJzdGF0aWMiLHQuZGVwcmVjYXRlZD0iZGVwcmVjYXRlZCIsdC5hYnN0cmFjdD0iYWJzdHJhY3QiLHQuYXN5bmM9ImFzeW5jIix0Lm1vZGlmaWNhdGlvbj0ibW9kaWZpY2F0aW9uIix0LmRvY3VtZW50YXRpb249ImRvY3VtZW50YXRpb24iLHQuZGVmYXVsdExpYnJhcnk9ImRlZmF1bHRMaWJyYXJ5In0pKEJsZXx8KEJsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuIE9lLm9iamVjdExpdGVyYWwobikmJihuLnJlc3VsdElkPT09dm9pZCAwfHx0eXBlb2Ygbi5yZXN1bHRJZD09InN0cmluZyIpJiZBcnJheS5pc0FycmF5KG4uZGF0YSkmJihuLmRhdGEubGVuZ3RoPT09MHx8dHlwZW9mIG4uZGF0YVswXT09Im51bWJlciIpfW8oZSwiaXMiKSx0LmlzPWV9KShGbGV8fChGbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLHRleHQ6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSE9bnVsbCYmRHIuaXMoaS5yYW5nZSkmJk9lLnN0cmluZyhpLnRleHQpfW8ociwiaXMiKSx0LmlzPXJ9KSh6bGV8fCh6bGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue3JhbmdlOm4sdmFyaWFibGVOYW1lOmksY2FzZVNlbnNpdGl2ZUxvb2t1cDphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpIT1udWxsJiZEci5pcyhpLnJhbmdlKSYmT2UuYm9vbGVhbihpLmNhc2VTZW5zaXRpdmVMb29rdXApJiYoT2Uuc3RyaW5nKGkudmFyaWFibGVOYW1lKXx8aS52YXJpYWJsZU5hbWU9PT12b2lkIDApfW8ociwiaXMiKSx0LmlzPXJ9KShHbGV8fChHbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLGV4cHJlc3Npb246aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSE9bnVsbCYmRHIuaXMoaS5yYW5nZSkmJihPZS5zdHJpbmcoaS5leHByZXNzaW9uKXx8aS5leHByZXNzaW9uPT09dm9pZCAwKX1vKHIsImlzIiksdC5pcz1yfSkoJGxlfHwoJGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57ZnJhbWVJZDpuLHN0b3BwZWRMb2NhdGlvbjppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5kZWZpbmVkKGkpJiZEci5pcyhuLnN0b3BwZWRMb2NhdGlvbil9byhyLCJpcyIpLHQuaXM9cn0pKFZsZXx8KFZsZT17fSkpOyhmdW5jdGlvbih0KXt0LlR5cGU9MSx0LlBhcmFtZXRlcj0yO2Z1bmN0aW9uIGUocil7cmV0dXJuIHI9PT0xfHxyPT09Mn1vKGUsImlzIiksdC5pcz1lfSkob018fChvTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybnt2YWx1ZTpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBPZS5vYmplY3RMaXRlcmFsKGkpJiYoaS50b29sdGlwPT09dm9pZCAwfHxPZS5zdHJpbmcoaS50b29sdGlwKXx8UzIuaXMoaS50b29sdGlwKSkmJihpLmxvY2F0aW9uPT09dm9pZCAwfHxUay5pcyhpLmxvY2F0aW9uKSkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fG1nLmlzKGkuY29tbWFuZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShsTXx8KGxNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtwb3NpdGlvbjpuLGxhYmVsOml9O3JldHVybiBhIT09dm9pZCAwJiYocy5raW5kPWEpLHN9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gT2Uub2JqZWN0TGl0ZXJhbChpKSYmWHIuaXMoaS5wb3NpdGlvbikmJihPZS5zdHJpbmcoaS5sYWJlbCl8fE9lLnR5cGVkQXJyYXkoaS5sYWJlbCxsTS5pcykpJiYoaS5raW5kPT09dm9pZCAwfHxvTS5pcyhpLmtpbmQpKSYmaS50ZXh0RWRpdHM9PT12b2lkIDB8fE9lLnR5cGVkQXJyYXkoaS50ZXh0RWRpdHMsZ2cuaXMpJiYoaS50b29sdGlwPT09dm9pZCAwfHxPZS5zdHJpbmcoaS50b29sdGlwKXx8UzIuaXMoaS50b29sdGlwKSkmJihpLnBhZGRpbmdMZWZ0PT09dm9pZCAwfHxPZS5ib29sZWFuKGkucGFkZGluZ0xlZnQpKSYmKGkucGFkZGluZ1JpZ2h0PT09dm9pZCAwfHxPZS5ib29sZWFuKGkucGFkZGluZ1JpZ2h0KSl9byhyLCJpcyIpLHQuaXM9cn0pKFVsZXx8KFVsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybntraW5kOiJzbmlwcGV0Iix2YWx1ZTpyfX1vKGUsImNyZWF0ZVNuaXBwZXQiKSx0LmNyZWF0ZVNuaXBwZXQ9ZX0pKEhsZXx8KEhsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbixpLGEpe3JldHVybntpbnNlcnRUZXh0OnIsZmlsdGVyVGV4dDpuLHJhbmdlOmksY29tbWFuZDphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShXbGV8fChXbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57aXRlbXM6cn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoWWxlfHwoWWxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuSW52b2tlZD0wLHQuQXV0b21hdGljPTF9KShxbGV8fChxbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4pe3JldHVybntyYW5nZTpyLHRleHQ6bn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoWGxlfHwoWGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm57dHJpZ2dlcktpbmQ6cixzZWxlY3RlZENvbXBsZXRpb25JbmZvOm59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGpsZXx8KGpsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuIE9lLm9iamVjdExpdGVyYWwobikmJktSLmlzKG4udXJpKSYmT2Uuc3RyaW5nKG4ubmFtZSl9byhlLCJpcyIpLHQuaXM9ZX0pKEtsZXx8KEtsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGEscyxsLHUpe3JldHVybiBuZXcgY00oYSxzLGwsdSl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIoYSl7bGV0IHM9YTtyZXR1cm4hIShPZS5kZWZpbmVkKHMpJiZPZS5zdHJpbmcocy51cmkpJiYoT2UudW5kZWZpbmVkKHMubGFuZ3VhZ2VJZCl8fE9lLnN0cmluZyhzLmxhbmd1YWdlSWQpKSYmT2UudWludGVnZXIocy5saW5lQ291bnQpJiZPZS5mdW5jKHMuZ2V0VGV4dCkmJk9lLmZ1bmMocy5wb3NpdGlvbkF0KSYmT2UuZnVuYyhzLm9mZnNldEF0KSl9byhyLCJpcyIpLHQuaXM9cjtmdW5jdGlvbiBuKGEscyl7bGV0IGw9YS5nZXRUZXh0KCksdT1pKHMsKGYsZCk9PntsZXQgcD1mLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBwPT09MD9mLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpwfSksaD1sLmxlbmd0aDtmb3IobGV0IGY9dS5sZW5ndGgtMTtmPj0wO2YtLSl7bGV0IGQ9dVtmXSxwPWEub2Zmc2V0QXQoZC5yYW5nZS5zdGFydCksbT1hLm9mZnNldEF0KGQucmFuZ2UuZW5kKTtpZihtPD1oKWw9bC5zdWJzdHJpbmcoMCxwKStkLm5ld1RleHQrbC5zdWJzdHJpbmcobSxsLmxlbmd0aCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtoPXB9cmV0dXJuIGx9byhuLCJhcHBseUVkaXRzIiksdC5hcHBseUVkaXRzPW47ZnVuY3Rpb24gaShhLHMpe2lmKGEubGVuZ3RoPD0xKXJldHVybiBhO2xldCBsPWEubGVuZ3RoLzJ8MCx1PWEuc2xpY2UoMCxsKSxoPWEuc2xpY2UobCk7aSh1LHMpLGkoaCxzKTtsZXQgZj0wLGQ9MCxwPTA7Zm9yKDtmPHUubGVuZ3RoJiZkPGgubGVuZ3RoOylzKHVbZl0saFtkXSk8PTA/YVtwKytdPXVbZisrXTphW3ArK109aFtkKytdO2Zvcig7Zjx1Lmxlbmd0aDspYVtwKytdPXVbZisrXTtmb3IoO2Q8aC5sZW5ndGg7KWFbcCsrXT1oW2QrK107cmV0dXJuIGF9byhpLCJtZXJnZVNvcnQiKX0pKFFsZXx8KFFsZT17fSkpO2NNPWNsYXNze3N0YXRpY3tvKHRoaXMsIkZ1bGxUZXh0RG9jdW1lbnQiKX1jb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLl91cmk9ZSx0aGlzLl9sYW5ndWFnZUlkPXIsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2NvbnRlbnQ9aSx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGxhbmd1YWdlSWQoKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldFRleHQoZSl7aWYoZSl7bGV0IHI9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyhyLG4pfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZShlLHIpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0TGluZU9mZnNldHMoKXtpZih0aGlzLl9saW5lT2Zmc2V0cz09PXZvaWQgMCl7bGV0IGU9W10scj10aGlzLl9jb250ZW50LG49ITA7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe24mJihlLnB1c2goaSksbj0hMSk7bGV0IGE9ci5jaGFyQXQoaSk7bj1hPT09IlxyInx8YT09PWAKYCxhPT09IlxyIiYmaSsxPHIubGVuZ3RoJiZyLmNoYXJBdChpKzEpPT09YApgJiZpKyt9biYmci5sZW5ndGg+MCYmZS5wdXNoKHIubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxpPXIubGVuZ3RoO2lmKGk9PT0wKXJldHVybiBYci5jcmVhdGUoMCxlKTtmb3IoO248aTspe2xldCBzPU1hdGguZmxvb3IoKG4raSkvMik7cltzXT5lP2k9czpuPXMrMX1sZXQgYT1uLTE7cmV0dXJuIFhyLmNyZWF0ZShhLGUtclthXSl9b2Zmc2V0QXQoZSl7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49ci5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO2xldCBuPXJbZS5saW5lXSxpPWUubGluZSsxPHIubGVuZ3RoP3JbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuK2UuY2hhcmFjdGVyLGkpLG4pfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH19OyhmdW5jdGlvbih0KXtsZXQgZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHIobSl7cmV0dXJuIHR5cGVvZiBtPCJ1In1vKHIsImRlZmluZWQiKSx0LmRlZmluZWQ9cjtmdW5jdGlvbiBuKG0pe3JldHVybiB0eXBlb2YgbT4idSJ9byhuLCJ1bmRlZmluZWQiKSx0LnVuZGVmaW5lZD1uO2Z1bmN0aW9uIGkobSl7cmV0dXJuIG09PT0hMHx8bT09PSExfW8oaSwiYm9vbGVhbiIpLHQuYm9vbGVhbj1pO2Z1bmN0aW9uIGEobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IFN0cmluZ10ifW8oYSwic3RyaW5nIiksdC5zdHJpbmc9YTtmdW5jdGlvbiBzKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIn1vKHMsIm51bWJlciIpLHQubnVtYmVyPXM7ZnVuY3Rpb24gbChtLGcseSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiZnPD1tJiZtPD15fW8obCwibnVtYmVyUmFuZ2UiKSx0Lm51bWJlclJhbmdlPWw7ZnVuY3Rpb24gdShtKXtyZXR1cm4gZS5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSImJi0yMTQ3NDgzNjQ4PD1tJiZtPD0yMTQ3NDgzNjQ3fW8odSwiaW50ZWdlciIpLHQuaW50ZWdlcj11O2Z1bmN0aW9uIGgobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiYwPD1tJiZtPD0yMTQ3NDgzNjQ3fW8oaCwidWludGVnZXIiKSx0LnVpbnRlZ2VyPWg7ZnVuY3Rpb24gZihtKXtyZXR1cm4gZS5jYWxsKG0pPT09IltvYmplY3QgRnVuY3Rpb25dIn1vKGYsImZ1bmMiKSx0LmZ1bmM9ZjtmdW5jdGlvbiBkKG0pe3JldHVybiBtIT09bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifW8oZCwib2JqZWN0TGl0ZXJhbCIpLHQub2JqZWN0TGl0ZXJhbD1kO2Z1bmN0aW9uIHAobSxnKXtyZXR1cm4gQXJyYXkuaXNBcnJheShtKSYmbS5ldmVyeShnKX1vKHAsInR5cGVkQXJyYXkiKSx0LnR5cGVkQXJyYXk9cH0pKE9lfHwoT2U9e30pKX0pO3ZhciBDMixBMixjMCx1MCxoTSx2ZyxDaz1NKCgpPT57InVzZSBzdHJpY3QiO3VNKCk7WW8oKTtNbCgpO0MyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNzdE5vZGVCdWlsZGVyIil9Y29uc3RydWN0b3IoKXt0aGlzLm5vZGVTdGFjaz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLm5vZGVTdGFja1t0aGlzLm5vZGVTdGFjay5sZW5ndGgtMV19YnVpbGRSb290Tm9kZShlKXtyZXR1cm4gdGhpcy5yb290Tm9kZT1uZXcgdmcoZSksdGhpcy5yb290Tm9kZS5yb290PXRoaXMucm9vdE5vZGUsdGhpcy5ub2RlU3RhY2s9W3RoaXMucm9vdE5vZGVdLHRoaXMucm9vdE5vZGV9YnVpbGRDb21wb3NpdGVOb2RlKGUpe2xldCByPW5ldyB1MDtyZXR1cm4gci5ncmFtbWFyU291cmNlPWUsci5yb290PXRoaXMucm9vdE5vZGUsdGhpcy5jdXJyZW50LmNvbnRlbnQucHVzaChyKSx0aGlzLm5vZGVTdGFjay5wdXNoKHIpLHJ9YnVpbGRMZWFmTm9kZShlLHIpe2xldCBuPW5ldyBjMChlLnN0YXJ0T2Zmc2V0LGUuaW1hZ2UubGVuZ3RoLCRtKGUpLGUudG9rZW5UeXBlLCExKTtyZXR1cm4gbi5ncmFtbWFyU291cmNlPXIsbi5yb290PXRoaXMucm9vdE5vZGUsdGhpcy5jdXJyZW50LmNvbnRlbnQucHVzaChuKSxufXJlbW92ZU5vZGUoZSl7bGV0IHI9ZS5jb250YWluZXI7aWYocil7bGV0IG49ci5jb250ZW50LmluZGV4T2YoZSk7bj49MCYmci5jb250ZW50LnNwbGljZShuLDEpfX1jb25zdHJ1Y3QoZSl7bGV0IHI9dGhpcy5jdXJyZW50O3R5cGVvZiBlLiR0eXBlPT0ic3RyaW5nIiYmKHRoaXMuY3VycmVudC5hc3ROb2RlPWUpLGUuJGNzdE5vZGU9cjtsZXQgbj10aGlzLm5vZGVTdGFjay5wb3AoKTtuPy5jb250ZW50Lmxlbmd0aD09PTAmJnRoaXMucmVtb3ZlTm9kZShuKX1hZGRIaWRkZW5Ub2tlbnMoZSl7Zm9yKGxldCByIG9mIGUpe2xldCBuPW5ldyBjMChyLnN0YXJ0T2Zmc2V0LHIuaW1hZ2UubGVuZ3RoLCRtKHIpLHIudG9rZW5UeXBlLCEwKTtuLnJvb3Q9dGhpcy5yb290Tm9kZSx0aGlzLmFkZEhpZGRlblRva2VuKHRoaXMucm9vdE5vZGUsbil9fWFkZEhpZGRlblRva2VuKGUscil7bGV0e29mZnNldDpuLGVuZDppfT1yO2ZvcihsZXQgYT0wO2E8ZS5jb250ZW50Lmxlbmd0aDthKyspe2xldCBzPWUuY29udGVudFthXSx7b2Zmc2V0OmwsZW5kOnV9PXM7aWYoaW8ocykmJm4+bCYmaTx1KXt0aGlzLmFkZEhpZGRlblRva2VuKHMscik7cmV0dXJufWVsc2UgaWYoaTw9bCl7ZS5jb250ZW50LnNwbGljZShhLDAscik7cmV0dXJufX1lLmNvbnRlbnQucHVzaChyKX19LEEyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0Q3N0Tm9kZSIpfWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJ9Z2V0IGZlYXR1cmUoKXtyZXR1cm4gdGhpcy5ncmFtbWFyU291cmNlfWdldCBoaWRkZW4oKXtyZXR1cm4hMX1nZXQgYXN0Tm9kZSgpe3ZhciBlLHI7bGV0IG49dHlwZW9mKChlPXRoaXMuX2FzdE5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS4kdHlwZSk9PSJzdHJpbmciP3RoaXMuX2FzdE5vZGU6KHI9dGhpcy5jb250YWluZXIpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5hc3ROb2RlO2lmKCFuKXRocm93IG5ldyBFcnJvcigiVGhpcyBub2RlIGhhcyBubyBhc3NvY2lhdGVkIEFTVCBlbGVtZW50Iik7cmV0dXJuIG59c2V0IGFzdE5vZGUoZSl7dGhpcy5fYXN0Tm9kZT1lfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuYXN0Tm9kZX1nZXQgdGV4dCgpe3JldHVybiB0aGlzLnJvb3QuZnVsbFRleHQuc3Vic3RyaW5nKHRoaXMub2Zmc2V0LHRoaXMuZW5kKX19LGMwPWNsYXNzIGV4dGVuZHMgQTJ7c3RhdGlje28odGhpcywiTGVhZkNzdE5vZGVJbXBsIil9Z2V0IG9mZnNldCgpe3JldHVybiB0aGlzLl9vZmZzZXR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9Z2V0IGVuZCgpe3JldHVybiB0aGlzLl9vZmZzZXQrdGhpcy5fbGVuZ3RofWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufWdldCB0b2tlblR5cGUoKXtyZXR1cm4gdGhpcy5fdG9rZW5UeXBlfWdldCByYW5nZSgpe3JldHVybiB0aGlzLl9yYW5nZX1jb25zdHJ1Y3RvcihlLHIsbixpLGE9ITEpe3N1cGVyKCksdGhpcy5faGlkZGVuPWEsdGhpcy5fb2Zmc2V0PWUsdGhpcy5fdG9rZW5UeXBlPWksdGhpcy5fbGVuZ3RoPXIsdGhpcy5fcmFuZ2U9bn19LHUwPWNsYXNzIGV4dGVuZHMgQTJ7c3RhdGlje28odGhpcywiQ29tcG9zaXRlQ3N0Tm9kZUltcGwiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb250ZW50PW5ldyBoTSh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5jb250ZW50fWdldCBvZmZzZXQoKXt2YXIgZSxyO3JldHVybihyPShlPXRoaXMuZmlyc3ROb25IaWRkZW5Ob2RlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUub2Zmc2V0KSE9PW51bGwmJnIhPT12b2lkIDA/cjowfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5vZmZzZXR9Z2V0IGVuZCgpe3ZhciBlLHI7cmV0dXJuKHI9KGU9dGhpcy5sYXN0Tm9uSGlkZGVuTm9kZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLmVuZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MH1nZXQgcmFuZ2UoKXtsZXQgZT10aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSxyPXRoaXMubGFzdE5vbkhpZGRlbk5vZGU7aWYoZSYmcil7aWYodGhpcy5fcmFuZ2VDYWNoZT09PXZvaWQgMCl7bGV0e3JhbmdlOm59PWUse3JhbmdlOml9PXI7dGhpcy5fcmFuZ2VDYWNoZT17c3RhcnQ6bi5zdGFydCxlbmQ6aS5lbmQubGluZTxuLnN0YXJ0LmxpbmU/bi5zdGFydDppLmVuZH19cmV0dXJuIHRoaXMuX3JhbmdlQ2FjaGV9ZWxzZSByZXR1cm57c3RhcnQ6WHIuY3JlYXRlKDAsMCksZW5kOlhyLmNyZWF0ZSgwLDApfX1nZXQgZmlyc3ROb25IaWRkZW5Ob2RlKCl7Zm9yKGxldCBlIG9mIHRoaXMuY29udGVudClpZighZS5oaWRkZW4pcmV0dXJuIGU7cmV0dXJuIHRoaXMuY29udGVudFswXX1nZXQgbGFzdE5vbkhpZGRlbk5vZGUoKXtmb3IobGV0IGU9dGhpcy5jb250ZW50Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgcj10aGlzLmNvbnRlbnRbZV07aWYoIXIuaGlkZGVuKXJldHVybiByfXJldHVybiB0aGlzLmNvbnRlbnRbdGhpcy5jb250ZW50Lmxlbmd0aC0xXX19LGhNPWNsYXNzIHQgZXh0ZW5kcyBBcnJheXtzdGF0aWN7byh0aGlzLCJDc3ROb2RlQ29udGFpbmVyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnBhcmVudD1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHQucHJvdG90eXBlKX1wdXNoKC4uLmUpe3JldHVybiB0aGlzLmFkZFBhcmVudHMoZSksc3VwZXIucHVzaCguLi5lKX11bnNoaWZ0KC4uLmUpe3JldHVybiB0aGlzLmFkZFBhcmVudHMoZSksc3VwZXIudW5zaGlmdCguLi5lKX1zcGxpY2UoZSxyLC4uLm4pe3JldHVybiB0aGlzLmFkZFBhcmVudHMobiksc3VwZXIuc3BsaWNlKGUsciwuLi5uKX1hZGRQYXJlbnRzKGUpe2ZvcihsZXQgciBvZiBlKXIuY29udGFpbmVyPXRoaXMucGFyZW50fX0sdmc9Y2xhc3MgZXh0ZW5kcyB1MHtzdGF0aWN7byh0aGlzLCJSb290Q3N0Tm9kZUltcGwiKX1nZXQgdGV4dCgpe3JldHVybiB0aGlzLl90ZXh0LnN1YnN0cmluZyh0aGlzLm9mZnNldCx0aGlzLmVuZCl9Z2V0IGZ1bGxUZXh0KCl7cmV0dXJuIHRoaXMuX3RleHR9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl90ZXh0PSIiLHRoaXMuX3RleHQ9ZT8/IiJ9fX0pO2Z1bmN0aW9uIGZNKHQpe3JldHVybiB0LiR0eXBlPT09QWt9dmFyIEFrLFpsZSxKbGUsXzIsTDIsX2sseGcsRDIsZ3plLGRNLE4yPU0oKCk9PnsidXNlIHN0cmljdCI7czAoKTtLb2UoKTtBYygpO1BsKCk7ZXMoKTtDaygpO0FrPVN5bWJvbCgiRGF0YXR5cGUiKTtvKGZNLCJpc0RhdGFUeXBlTm9kZSIpO1psZT0iXHUyMDBCIixKbGU9byh0PT50LmVuZHNXaXRoKFpsZSk/dDp0K1psZSwid2l0aFJ1bGVTdWZmaXgiKSxfMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJBYnN0cmFjdExhbmdpdW1QYXJzZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLl91bm9yZGVyZWRHcm91cHM9bmV3IE1hcCx0aGlzLmxleGVyPWUucGFyc2VyLkxleGVyO2xldCByPXRoaXMubGV4ZXIuZGVmaW5pdGlvbjt0aGlzLndyYXBwZXI9bmV3IGRNKHIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUucGFyc2VyLlBhcnNlckNvbmZpZykse2Vycm9yTWVzc2FnZVByb3ZpZGVyOmUucGFyc2VyLlBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyfSkpfWFsdGVybmF0aXZlcyhlLHIpe3RoaXMud3JhcHBlci53cmFwT3IoZSxyKX1vcHRpb25hbChlLHIpe3RoaXMud3JhcHBlci53cmFwT3B0aW9uKGUscil9bWFueShlLHIpe3RoaXMud3JhcHBlci53cmFwTWFueShlLHIpfWF0TGVhc3RPbmUoZSxyKXt0aGlzLndyYXBwZXIud3JhcEF0TGVhc3RPbmUoZSxyKX1pc1JlY29yZGluZygpe3JldHVybiB0aGlzLndyYXBwZXIuSVNfUkVDT1JESU5HfWdldCB1bm9yZGVyZWRHcm91cHMoKXtyZXR1cm4gdGhpcy5fdW5vcmRlcmVkR3JvdXBzfWdldFJ1bGVTdGFjaygpe3JldHVybiB0aGlzLndyYXBwZXIuUlVMRV9TVEFDS31maW5hbGl6ZSgpe3RoaXMud3JhcHBlci53cmFwU2VsZkFuYWx5c2lzKCl9fSxMMj1jbGFzcyBleHRlbmRzIF8ye3N0YXRpY3tvKHRoaXMsIkxhbmdpdW1QYXJzZXIiKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubm9kZUJ1aWxkZXI9bmV3IEMyLHRoaXMuc3RhY2s9W10sdGhpcy5hc3NpZ25tZW50TWFwPW5ldyBNYXAsdGhpcy5saW5rZXI9ZS5yZWZlcmVuY2VzLkxpbmtlcix0aGlzLmNvbnZlcnRlcj1lLnBhcnNlci5WYWx1ZUNvbnZlcnRlcix0aGlzLmFzdFJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbn1ydWxlKGUscil7bGV0IG49ZS5mcmFnbWVudD92b2lkIDA6ZTIoZSk/QWs6WmQoZSksaT10aGlzLndyYXBwZXIuREVGSU5FX1JVTEUoSmxlKGUubmFtZSksdGhpcy5zdGFydEltcGxlbWVudGF0aW9uKG4scikuYmluZCh0aGlzKSk7cmV0dXJuIGUuZW50cnkmJih0aGlzLm1haW5SdWxlPWkpLGl9cGFyc2UoZSl7dGhpcy5ub2RlQnVpbGRlci5idWlsZFJvb3ROb2RlKGUpO2xldCByPXRoaXMubGV4ZXIudG9rZW5pemUoZSk7dGhpcy53cmFwcGVyLmlucHV0PXIudG9rZW5zO2xldCBuPXRoaXMubWFpblJ1bGUuY2FsbCh0aGlzLndyYXBwZXIse30pO3JldHVybiB0aGlzLm5vZGVCdWlsZGVyLmFkZEhpZGRlblRva2VucyhyLmhpZGRlbiksdGhpcy51bm9yZGVyZWRHcm91cHMuY2xlYXIoKSx7dmFsdWU6bixsZXhlckVycm9yczpyLmVycm9ycyxwYXJzZXJFcnJvcnM6dGhpcy53cmFwcGVyLmVycm9yc319c3RhcnRJbXBsZW1lbnRhdGlvbihlLHIpe3JldHVybiBuPT57aWYoIXRoaXMuaXNSZWNvcmRpbmcoKSl7bGV0IGE9eyR0eXBlOmV9O3RoaXMuc3RhY2sucHVzaChhKSxlPT09QWsmJihhLnZhbHVlPSIiKX1sZXQgaTt0cnl7aT1yKG4pfWNhdGNoe2k9dm9pZCAwfXJldHVybiF0aGlzLmlzUmVjb3JkaW5nKCkmJmk9PT12b2lkIDAmJihpPXRoaXMuY29uc3RydWN0KCkpLGl9fWNvbnN1bWUoZSxyLG4pe2xldCBpPXRoaXMud3JhcHBlci53cmFwQ29uc3VtZShlLHIpO2lmKCF0aGlzLmlzUmVjb3JkaW5nKCkmJnRoaXMuaXNWYWxpZFRva2VuKGkpKXtsZXQgYT10aGlzLm5vZGVCdWlsZGVyLmJ1aWxkTGVhZk5vZGUoaSxuKSx7YXNzaWdubWVudDpzLGlzQ3Jvc3NSZWY6bH09dGhpcy5nZXRBc3NpZ25tZW50KG4pLHU9dGhpcy5jdXJyZW50O2lmKHMpe2xldCBoPVhvKG4pP2kuaW1hZ2U6dGhpcy5jb252ZXJ0ZXIuY29udmVydChpLmltYWdlLGEpO3RoaXMuYXNzaWduKHMub3BlcmF0b3Iscy5mZWF0dXJlLGgsYSxsKX1lbHNlIGlmKGZNKHUpKXtsZXQgaD1pLmltYWdlO1hvKG4pfHwoaD10aGlzLmNvbnZlcnRlci5jb252ZXJ0KGgsYSkudG9TdHJpbmcoKSksdS52YWx1ZSs9aH19fWlzVmFsaWRUb2tlbihlKXtyZXR1cm4hZS5pc0luc2VydGVkSW5SZWNvdmVyeSYmIWlzTmFOKGUuc3RhcnRPZmZzZXQpJiZ0eXBlb2YgZS5lbmRPZmZzZXQ9PSJudW1iZXIiJiYhaXNOYU4oZS5lbmRPZmZzZXQpfXN1YnJ1bGUoZSxyLG4saSl7bGV0IGE7dGhpcy5pc1JlY29yZGluZygpfHwoYT10aGlzLm5vZGVCdWlsZGVyLmJ1aWxkQ29tcG9zaXRlTm9kZShuKSk7bGV0IHM9dGhpcy53cmFwcGVyLndyYXBTdWJydWxlKGUscixpKTshdGhpcy5pc1JlY29yZGluZygpJiZhJiZhLmxlbmd0aD4wJiZ0aGlzLnBlcmZvcm1TdWJydWxlQXNzaWdubWVudChzLG4sYSl9cGVyZm9ybVN1YnJ1bGVBc3NpZ25tZW50KGUscixuKXtsZXR7YXNzaWdubWVudDppLGlzQ3Jvc3NSZWY6YX09dGhpcy5nZXRBc3NpZ25tZW50KHIpO2lmKGkpdGhpcy5hc3NpZ24oaS5vcGVyYXRvcixpLmZlYXR1cmUsZSxuLGEpO2Vsc2UgaWYoIWkpe2xldCBzPXRoaXMuY3VycmVudDtpZihmTShzKSlzLnZhbHVlKz1lLnRvU3RyaW5nKCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCImJmUpe2xldCBsPWUuJHR5cGUsdT10aGlzLmFzc2lnbldpdGhvdXRPdmVycmlkZShlLHMpO2wmJih1LiR0eXBlPWwpO2xldCBoPXU7dGhpcy5zdGFjay5wb3AoKSx0aGlzLnN0YWNrLnB1c2goaCl9fX1hY3Rpb24oZSxyKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgbj10aGlzLmN1cnJlbnQ7aWYoIW4uJGNzdE5vZGUmJnIuZmVhdHVyZSYmci5vcGVyYXRvcil7bj10aGlzLmNvbnN0cnVjdCghMSk7bGV0IGE9bi4kY3N0Tm9kZS5mZWF0dXJlO3RoaXMubm9kZUJ1aWxkZXIuYnVpbGRDb21wb3NpdGVOb2RlKGEpfWxldCBpPXskdHlwZTplfTt0aGlzLnN0YWNrLnBvcCgpLHRoaXMuc3RhY2sucHVzaChpKSxyLmZlYXR1cmUmJnIub3BlcmF0b3ImJnRoaXMuYXNzaWduKHIub3BlcmF0b3Isci5mZWF0dXJlLG4sbi4kY3N0Tm9kZSwhMSl9fWNvbnN0cnVjdChlPSEwKXtpZih0aGlzLmlzUmVjb3JkaW5nKCkpcmV0dXJuO2xldCByPXRoaXMuY3VycmVudDtyZXR1cm4gQ1QociksdGhpcy5ub2RlQnVpbGRlci5jb25zdHJ1Y3QociksZSYmdGhpcy5zdGFjay5wb3AoKSxmTShyKT90aGlzLmNvbnZlcnRlci5jb252ZXJ0KHIudmFsdWUsci4kY3N0Tm9kZSk6KCROKHRoaXMuYXN0UmVmbGVjdGlvbixyKSxyKX1nZXRBc3NpZ25tZW50KGUpe2lmKCF0aGlzLmFzc2lnbm1lbnRNYXAuaGFzKGUpKXtsZXQgcj1xZChlLElsKTt0aGlzLmFzc2lnbm1lbnRNYXAuc2V0KGUse2Fzc2lnbm1lbnQ6cixpc0Nyb3NzUmVmOnI/WWQoci50ZXJtaW5hbCk6ITF9KX1yZXR1cm4gdGhpcy5hc3NpZ25tZW50TWFwLmdldChlKX1hc3NpZ24oZSxyLG4saSxhKXtsZXQgcz10aGlzLmN1cnJlbnQsbDtzd2l0Y2goYSYmdHlwZW9mIG49PSJzdHJpbmciP2w9dGhpcy5saW5rZXIuYnVpbGRSZWZlcmVuY2UocyxyLGksbik6bD1uLGUpe2Nhc2UiPSI6e3Nbcl09bDticmVha31jYXNlIj89Ijp7c1tyXT0hMDticmVha31jYXNlIis9IjpBcnJheS5pc0FycmF5KHNbcl0pfHwoc1tyXT1bXSksc1tyXS5wdXNoKGwpfX1hc3NpZ25XaXRob3V0T3ZlcnJpZGUoZSxyKXtmb3IobGV0W24saV1vZiBPYmplY3QuZW50cmllcyhyKSl7bGV0IGE9ZVtuXTthPT09dm9pZCAwP2Vbbl09aTpBcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGkpJiYoaS5wdXNoKC4uLmEpLGVbbl09aSl9cmV0dXJuIGV9Z2V0IGRlZmluaXRpb25FcnJvcnMoKXtyZXR1cm4gdGhpcy53cmFwcGVyLmRlZmluaXRpb25FcnJvcnN9fSxfaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJBYnN0cmFjdFBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIil9YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZShlKXtyZXR1cm4gRnUuYnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZShlKX1idWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZShlKXtyZXR1cm4gRnUuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2UoZSl9YnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2UoZSl7cmV0dXJuIEZ1LmJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKGUpfWJ1aWxkRWFybHlFeGl0TWVzc2FnZShlKXtyZXR1cm4gRnUuYnVpbGRFYXJseUV4aXRNZXNzYWdlKGUpfX0seGc9Y2xhc3MgZXh0ZW5kcyBfa3tzdGF0aWN7byh0aGlzLCJMYW5naXVtUGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX1idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtleHBlY3RlZDplLGFjdHVhbDpyfSl7cmV0dXJuYEV4cGVjdGluZyAke2UuTEFCRUw/ImAiK2UuTEFCRUwrImAiOmUubmFtZS5lbmRzV2l0aCgiOktXIik/YGtleXdvcmQgJyR7ZS5uYW1lLnN1YnN0cmluZygwLGUubmFtZS5sZW5ndGgtMyl9J2A6YHRva2VuIG9mIHR5cGUgJyR7ZS5uYW1lfSdgfSBidXQgZm91bmQgXGAke3IuaW1hZ2V9XGAuYH1idWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZSh7Zmlyc3RSZWR1bmRhbnQ6ZX0pe3JldHVybmBFeHBlY3RpbmcgZW5kIG9mIGZpbGUgYnV0IGZvdW5kIFxgJHtlLmltYWdlfVxgLmB9fSxEMj1jbGFzcyBleHRlbmRzIF8ye3N0YXRpY3tvKHRoaXMsIkxhbmdpdW1Db21wbGV0aW9uUGFyc2VyIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudG9rZW5zPVtdLHRoaXMuZWxlbWVudFN0YWNrPVtdLHRoaXMubGFzdEVsZW1lbnRTdGFjaz1bXSx0aGlzLm5leHRUb2tlbkluZGV4PTAsdGhpcy5zdGFja1NpemU9MH1hY3Rpb24oKXt9Y29uc3RydWN0KCl7fXBhcnNlKGUpe3RoaXMucmVzZXRTdGF0ZSgpO2xldCByPXRoaXMubGV4ZXIudG9rZW5pemUoZSk7cmV0dXJuIHRoaXMudG9rZW5zPXIudG9rZW5zLHRoaXMud3JhcHBlci5pbnB1dD1bLi4udGhpcy50b2tlbnNdLHRoaXMubWFpblJ1bGUuY2FsbCh0aGlzLndyYXBwZXIse30pLHRoaXMudW5vcmRlcmVkR3JvdXBzLmNsZWFyKCkse3Rva2Vuczp0aGlzLnRva2VucyxlbGVtZW50U3RhY2s6Wy4uLnRoaXMubGFzdEVsZW1lbnRTdGFja10sdG9rZW5JbmRleDp0aGlzLm5leHRUb2tlbkluZGV4fX1ydWxlKGUscil7bGV0IG49dGhpcy53cmFwcGVyLkRFRklORV9SVUxFKEpsZShlLm5hbWUpLHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihyKS5iaW5kKHRoaXMpKTtyZXR1cm4gZS5lbnRyeSYmKHRoaXMubWFpblJ1bGU9biksbn1yZXNldFN0YXRlKCl7dGhpcy5lbGVtZW50U3RhY2s9W10sdGhpcy5sYXN0RWxlbWVudFN0YWNrPVtdLHRoaXMubmV4dFRva2VuSW5kZXg9MCx0aGlzLnN0YWNrU2l6ZT0wfXN0YXJ0SW1wbGVtZW50YXRpb24oZSl7cmV0dXJuIHI9PntsZXQgbj10aGlzLmtlZXBTdGFja1NpemUoKTt0cnl7ZShyKX1maW5hbGx5e3RoaXMucmVzZXRTdGFja1NpemUobil9fX1yZW1vdmVVbmV4cGVjdGVkRWxlbWVudHMoKXt0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2UodGhpcy5zdGFja1NpemUpfWtlZXBTdGFja1NpemUoKXtsZXQgZT10aGlzLmVsZW1lbnRTdGFjay5sZW5ndGg7cmV0dXJuIHRoaXMuc3RhY2tTaXplPWUsZX1yZXNldFN0YWNrU2l6ZShlKXt0aGlzLnJlbW92ZVVuZXhwZWN0ZWRFbGVtZW50cygpLHRoaXMuc3RhY2tTaXplPWV9Y29uc3VtZShlLHIsbil7dGhpcy53cmFwcGVyLndyYXBDb25zdW1lKGUsciksdGhpcy5pc1JlY29yZGluZygpfHwodGhpcy5sYXN0RWxlbWVudFN0YWNrPVsuLi50aGlzLmVsZW1lbnRTdGFjayxuXSx0aGlzLm5leHRUb2tlbkluZGV4PXRoaXMuY3VycklkeCsxKX1zdWJydWxlKGUscixuLGkpe3RoaXMuYmVmb3JlKG4pLHRoaXMud3JhcHBlci53cmFwU3VicnVsZShlLHIsaSksdGhpcy5hZnRlcihuKX1iZWZvcmUoZSl7dGhpcy5pc1JlY29yZGluZygpfHx0aGlzLmVsZW1lbnRTdGFjay5wdXNoKGUpfWFmdGVyKGUpe2lmKCF0aGlzLmlzUmVjb3JkaW5nKCkpe2xldCByPXRoaXMuZWxlbWVudFN0YWNrLmxhc3RJbmRleE9mKGUpO3I+PTAmJnRoaXMuZWxlbWVudFN0YWNrLnNwbGljZShyKX19Z2V0IGN1cnJJZHgoKXtyZXR1cm4gdGhpcy53cmFwcGVyLmN1cnJJZHh9fSxnemU9e3JlY292ZXJ5RW5hYmxlZDohMCxub2RlTG9jYXRpb25UcmFja2luZzoiZnVsbCIsc2tpcFZhbGlkYXRpb25zOiEwLGVycm9yTWVzc2FnZVByb3ZpZGVyOm5ldyB4Z30sZE09Y2xhc3MgZXh0ZW5kcyBiMntzdGF0aWN7byh0aGlzLCJDaGV2cm90YWluV3JhcHBlciIpfWNvbnN0cnVjdG9yKGUscil7bGV0IG49ciYmIm1heExvb2thaGVhZCJpbiByO3N1cGVyKGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZ3plKSx7bG9va2FoZWFkU3RyYXRlZ3k6bj9uZXcgenUoe21heExvb2thaGVhZDpyLm1heExvb2thaGVhZH0pOm5ldyBFMn0pLHIpKX1nZXQgSVNfUkVDT1JESU5HKCl7cmV0dXJuIHRoaXMuUkVDT1JESU5HX1BIQVNFfURFRklORV9SVUxFKGUscil7cmV0dXJuIHRoaXMuUlVMRShlLHIpfXdyYXBTZWxmQW5hbHlzaXMoKXt0aGlzLnBlcmZvcm1TZWxmQW5hbHlzaXMoKX13cmFwQ29uc3VtZShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWUoZSxyKX13cmFwU3VicnVsZShlLHIsbil7cmV0dXJuIHRoaXMuc3VicnVsZShlLHIse0FSR1M6W25dfSl9d3JhcE9yKGUscil7dGhpcy5vcihlLHIpfXdyYXBPcHRpb24oZSxyKXt0aGlzLm9wdGlvbihlLHIpfXdyYXBNYW55KGUscil7dGhpcy5tYW55KGUscil9d3JhcEF0TGVhc3RPbmUoZSxyKXt0aGlzLmF0TGVhc3RPbmUoZSxyKX19fSk7ZnVuY3Rpb24gRGsodCxlLHIpe3JldHVybiB5emUoe3BhcnNlcjplLHRva2VuczpyLHJ1bGVzOm5ldyBNYXAscnVsZU5hbWVzOm5ldyBNYXB9LHQpLGV9ZnVuY3Rpb24geXplKHQsZSl7bGV0IHI9WnYoZSwhMSksbj10bihlLnJ1bGVzKS5maWx0ZXIoTWEpLmZpbHRlcihpPT5yLmhhcyhpKSk7Zm9yKGxldCBpIG9mIG4pe2xldCBhPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29uc3VtZToxLG9wdGlvbmFsOjEsc3VicnVsZToxLG1hbnk6MSxvcjoxfSk7YS5ydWxlcy5zZXQoaS5uYW1lLHQucGFyc2VyLnJ1bGUoaSxoMChhLGkuZGVmaW5pdGlvbikpKX19ZnVuY3Rpb24gaDAodCxlLHI9ITEpe2xldCBuO2lmKFhvKGUpKW49RXplKHQsZSk7ZWxzZSBpZihSdShlKSluPXZ6ZSh0LGUpO2Vsc2UgaWYoSWwoZSkpbj1oMCh0LGUudGVybWluYWwpO2Vsc2UgaWYoWWQoZSkpbj1lY2UodCxlKTtlbHNlIGlmKE9sKGUpKW49eHplKHQsZSk7ZWxzZSBpZihrVChlKSluPXd6ZSh0LGUpO2Vsc2UgaWYoU1QoZSkpbj1UemUodCxlKTtlbHNlIGlmKHRmKGUpKW49a3plKHQsZSk7ZWxzZSBpZih3TihlKSl7bGV0IGk9dC5jb25zdW1lKys7bj1vKCgpPT50LnBhcnNlci5jb25zdW1lKGksb28sZSksIm1ldGhvZCIpfWVsc2UgdGhyb3cgbmV3IFdkKGUuJGNzdE5vZGUsYFVuZXhwZWN0ZWQgZWxlbWVudCB0eXBlOiAke2UuJHR5cGV9YCk7cmV0dXJuIHRjZSh0LHI/dm9pZCAwOkxrKGUpLG4sZS5jYXJkaW5hbGl0eSl9ZnVuY3Rpb24gdnplKHQsZSl7bGV0IHI9WmQoZSk7cmV0dXJuKCk9PnQucGFyc2VyLmFjdGlvbihyLGUpfWZ1bmN0aW9uIHh6ZSh0LGUpe2xldCByPWUucnVsZS5yZWY7aWYoTWEocikpe2xldCBuPXQuc3VicnVsZSsrLGk9ZS5hcmd1bWVudHMubGVuZ3RoPjA/YnplKHIsZS5hcmd1bWVudHMpOigpPT4oe30pO3JldHVybiBhPT50LnBhcnNlci5zdWJydWxlKG4scmNlKHQsciksZSxpKGEpKX1lbHNlIGlmKHFvKHIpKXtsZXQgbj10LmNvbnN1bWUrKyxpPXBNKHQsci5uYW1lKTtyZXR1cm4oKT0+dC5wYXJzZXIuY29uc3VtZShuLGksZSl9ZWxzZSBpZihyKWVmKHIpO2Vsc2UgdGhyb3cgbmV3IFdkKGUuJGNzdE5vZGUsYFVuZGVmaW5lZCBydWxlIHR5cGU6ICR7ZS4kdHlwZX1gKX1mdW5jdGlvbiBiemUodCxlKXtsZXQgcj1lLm1hcChuPT5HdShuLnZhbHVlKSk7cmV0dXJuIG49PntsZXQgaT17fTtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7bGV0IHM9dC5wYXJhbWV0ZXJzW2FdLGw9clthXTtpW3MubmFtZV09bChuKX1yZXR1cm4gaX19ZnVuY3Rpb24gR3UodCl7aWYoakQodCkpe2xldCBlPUd1KHQubGVmdCkscj1HdSh0LnJpZ2h0KTtyZXR1cm4gbj0+ZShuKXx8cihuKX1lbHNlIGlmKHFEKHQpKXtsZXQgZT1HdSh0LmxlZnQpLHI9R3UodC5yaWdodCk7cmV0dXJuIG49PmUobikmJnIobil9ZWxzZSBpZihlTih0KSl7bGV0IGU9R3UodC52YWx1ZSk7cmV0dXJuIHI9PiFlKHIpfWVsc2UgaWYoaU4odCkpe2xldCBlPXQucGFyYW1ldGVyLnJlZi5uYW1lO3JldHVybiByPT5yIT09dm9pZCAwJiZyW2VdPT09ITB9ZWxzZSBpZihXRCh0KSl7bGV0IGU9ISF0LnRydWU7cmV0dXJuKCk9PmV9ZWYodCl9ZnVuY3Rpb24gd3plKHQsZSl7aWYoZS5lbGVtZW50cy5sZW5ndGg9PT0xKXJldHVybiBoMCh0LGUuZWxlbWVudHNbMF0pO3tsZXQgcj1bXTtmb3IobGV0IGkgb2YgZS5lbGVtZW50cyl7bGV0IGE9e0FMVDpoMCh0LGksITApfSxzPUxrKGkpO3MmJihhLkdBVEU9R3UocykpLHIucHVzaChhKX1sZXQgbj10Lm9yKys7cmV0dXJuIGk9PnQucGFyc2VyLmFsdGVybmF0aXZlcyhuLHIubWFwKGE9PntsZXQgcz17QUxUOm8oKCk9PmEuQUxUKGkpLCJBTFQiKX0sbD1hLkdBVEU7cmV0dXJuIGwmJihzLkdBVEU9KCk9PmwoaSkpLHN9KSl9fWZ1bmN0aW9uIFR6ZSh0LGUpe2lmKGUuZWxlbWVudHMubGVuZ3RoPT09MSlyZXR1cm4gaDAodCxlLmVsZW1lbnRzWzBdKTtsZXQgcj1bXTtmb3IobGV0IGwgb2YgZS5lbGVtZW50cyl7bGV0IHU9e0FMVDpoMCh0LGwsITApfSxoPUxrKGwpO2gmJih1LkdBVEU9R3UoaCkpLHIucHVzaCh1KX1sZXQgbj10Lm9yKyssaT1vKChsLHUpPT57bGV0IGg9dS5nZXRSdWxlU3RhY2soKS5qb2luKCItIik7cmV0dXJuYHVHcm91cF8ke2x9XyR7aH1gfSwiaWRGdW5jIiksYT1vKGw9PnQucGFyc2VyLmFsdGVybmF0aXZlcyhuLHIubWFwKCh1LGgpPT57bGV0IGY9e0FMVDpvKCgpPT4hMCwiQUxUIil9LGQ9dC5wYXJzZXI7Zi5BTFQ9KCk9PntpZih1LkFMVChsKSwhZC5pc1JlY29yZGluZygpKXtsZXQgbT1pKG4sZCk7ZC51bm9yZGVyZWRHcm91cHMuZ2V0KG0pfHxkLnVub3JkZXJlZEdyb3Vwcy5zZXQobSxbXSk7bGV0IGc9ZC51bm9yZGVyZWRHcm91cHMuZ2V0KG0pO3R5cGVvZiBnPy5baF0+InUiJiYoZ1toXT0hMCl9fTtsZXQgcD11LkdBVEU7cmV0dXJuIHA/Zi5HQVRFPSgpPT5wKGwpOmYuR0FURT0oKT0+e2xldCBtPWQudW5vcmRlcmVkR3JvdXBzLmdldChpKG4sZCkpO3JldHVybiFtPy5baF19LGZ9KSksImFsdGVybmF0aXZlcyIpLHM9dGNlKHQsTGsoZSksYSwiKiIpO3JldHVybiBsPT57cyhsKSx0LnBhcnNlci5pc1JlY29yZGluZygpfHx0LnBhcnNlci51bm9yZGVyZWRHcm91cHMuZGVsZXRlKGkobix0LnBhcnNlcikpfX1mdW5jdGlvbiBremUodCxlKXtsZXQgcj1lLmVsZW1lbnRzLm1hcChuPT5oMCh0LG4pKTtyZXR1cm4gbj0+ci5mb3JFYWNoKGk9PmkobikpfWZ1bmN0aW9uIExrKHQpe2lmKHRmKHQpKXJldHVybiB0Lmd1YXJkQ29uZGl0aW9ufWZ1bmN0aW9uIGVjZSh0LGUscj1lLnRlcm1pbmFsKXtpZihyKWlmKE9sKHIpJiZNYShyLnJ1bGUucmVmKSl7bGV0IG49dC5zdWJydWxlKys7cmV0dXJuIGk9PnQucGFyc2VyLnN1YnJ1bGUobixyY2UodCxyLnJ1bGUucmVmKSxlLGkpfWVsc2UgaWYoT2wocikmJnFvKHIucnVsZS5yZWYpKXtsZXQgbj10LmNvbnN1bWUrKyxpPXBNKHQsci5ydWxlLnJlZi5uYW1lKTtyZXR1cm4oKT0+dC5wYXJzZXIuY29uc3VtZShuLGksZSl9ZWxzZSBpZihYbyhyKSl7bGV0IG49dC5jb25zdW1lKyssaT1wTSh0LHIudmFsdWUpO3JldHVybigpPT50LnBhcnNlci5jb25zdW1lKG4saSxlKX1lbHNlIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGJ1aWxkIGNyb3NzIHJlZmVyZW5jZSBwYXJzZXIiKTtlbHNle2lmKCFlLnR5cGUucmVmKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlIHRvIHR5cGU6ICIrZS50eXBlLiRyZWZUZXh0KTtsZXQgbj1SVChlLnR5cGUucmVmKSxpPW4/LnRlcm1pbmFsO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgbmFtZSBhc3NpZ25tZW50IGZvciB0eXBlOiAiK1pkKGUudHlwZS5yZWYpKTtyZXR1cm4gZWNlKHQsZSxpKX19ZnVuY3Rpb24gRXplKHQsZSl7bGV0IHI9dC5jb25zdW1lKyssbj10LnRva2Vuc1tlLnZhbHVlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRva2VuIGZvciBrZXl3b3JkOiAiK2UudmFsdWUpO3JldHVybigpPT50LnBhcnNlci5jb25zdW1lKHIsbixlKX1mdW5jdGlvbiB0Y2UodCxlLHIsbil7bGV0IGk9ZSYmR3UoZSk7aWYoIW4paWYoaSl7bGV0IGE9dC5vcisrO3JldHVybiBzPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMoYSxbe0FMVDpvKCgpPT5yKHMpLCJBTFQiKSxHQVRFOm8oKCk9PmkocyksIkdBVEUiKX0se0FMVDp2aygpLEdBVEU6bygoKT0+IWkocyksIkdBVEUiKX1dKX1lbHNlIHJldHVybiByO2lmKG49PT0iKiIpe2xldCBhPXQubWFueSsrO3JldHVybiBzPT50LnBhcnNlci5tYW55KGEse0RFRjpvKCgpPT5yKHMpLCJERUYiKSxHQVRFOmk/KCk9Pmkocyk6dm9pZCAwfSl9ZWxzZSBpZihuPT09IisiKXtsZXQgYT10Lm1hbnkrKztpZihpKXtsZXQgcz10Lm9yKys7cmV0dXJuIGw9PnQucGFyc2VyLmFsdGVybmF0aXZlcyhzLFt7QUxUOm8oKCk9PnQucGFyc2VyLmF0TGVhc3RPbmUoYSx7REVGOm8oKCk9PnIobCksIkRFRiIpfSksIkFMVCIpLEdBVEU6bygoKT0+aShsKSwiR0FURSIpfSx7QUxUOnZrKCksR0FURTpvKCgpPT4haShsKSwiR0FURSIpfV0pfWVsc2UgcmV0dXJuIHM9PnQucGFyc2VyLmF0TGVhc3RPbmUoYSx7REVGOm8oKCk9PnIocyksIkRFRiIpfSl9ZWxzZSBpZihuPT09Ij8iKXtsZXQgYT10Lm9wdGlvbmFsKys7cmV0dXJuIHM9PnQucGFyc2VyLm9wdGlvbmFsKGEse0RFRjpvKCgpPT5yKHMpLCJERUYiKSxHQVRFOmk/KCk9Pmkocyk6dm9pZCAwfSl9ZWxzZSBlZihuKX1mdW5jdGlvbiByY2UodCxlKXtsZXQgcj1TemUodCxlKSxuPXQucnVsZXMuZ2V0KHIpO2lmKCFuKXRocm93IG5ldyBFcnJvcihgUnVsZSAiJHtyfSIgbm90IGZvdW5kLiJgKTtyZXR1cm4gbn1mdW5jdGlvbiBTemUodCxlKXtpZihNYShlKSlyZXR1cm4gZS5uYW1lO2lmKHQucnVsZU5hbWVzLmhhcyhlKSlyZXR1cm4gdC5ydWxlTmFtZXMuZ2V0KGUpO3tsZXQgcj1lLG49ci4kY29udGFpbmVyLGk9ZS4kdHlwZTtmb3IoOyFNYShuKTspKHRmKG4pfHxrVChuKXx8U1QobikpJiYoaT1uLmVsZW1lbnRzLmluZGV4T2YocikudG9TdHJpbmcoKSsiOiIraSkscj1uLG49bi4kY29udGFpbmVyO3JldHVybiBpPW4ubmFtZSsiOiIraSx0LnJ1bGVOYW1lcy5zZXQoZSxpKSxpfX1mdW5jdGlvbiBwTSh0LGUpe2xldCByPXQudG9rZW5zW2VdO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVG9rZW4gIiR7ZX0iIG5vdCBmb3VuZC4iYCk7cmV0dXJuIHJ9dmFyIG1NPU0oKCk9PnsidXNlIHN0cmljdCI7czAoKTtBYygpO2dUKCk7UnMoKTtQbCgpO28oRGssImNyZWF0ZVBhcnNlciIpO28oeXplLCJidWlsZFJ1bGVzIik7byhoMCwiYnVpbGRFbGVtZW50Iik7byh2emUsImJ1aWxkQWN0aW9uIik7byh4emUsImJ1aWxkUnVsZUNhbGwiKTtvKGJ6ZSwiYnVpbGRSdWxlQ2FsbFByZWRpY2F0ZSIpO28oR3UsImJ1aWxkUHJlZGljYXRlIik7byh3emUsImJ1aWxkQWx0ZXJuYXRpdmVzIik7byhUemUsImJ1aWxkVW5vcmRlcmVkR3JvdXAiKTtvKGt6ZSwiYnVpbGRHcm91cCIpO28oTGssImdldEd1YXJkQ29uZGl0aW9uIik7byhlY2UsImJ1aWxkQ3Jvc3NSZWZlcmVuY2UiKTtvKEV6ZSwiYnVpbGRLZXl3b3JkIik7byh0Y2UsIndyYXAiKTtvKHJjZSwiZ2V0UnVsZSIpO28oU3plLCJnZXRSdWxlTmFtZSIpO28ocE0sImdldFRva2VuIil9KTtmdW5jdGlvbiBnTSh0KXtsZXQgZT10LkdyYW1tYXIscj10LnBhcnNlci5MZXhlcixuPW5ldyBEMih0KTtyZXR1cm4gRGsoZSxuLHIuZGVmaW5pdGlvbiksbi5maW5hbGl6ZSgpLG59dmFyIHlNPU0oKCk9PnsidXNlIHN0cmljdCI7TjIoKTttTSgpO28oZ00sImNyZWF0ZUNvbXBsZXRpb25QYXJzZXIiKX0pO2Z1bmN0aW9uIHZNKHQpe2xldCBlPW5jZSh0KTtyZXR1cm4gZS5maW5hbGl6ZSgpLGV9ZnVuY3Rpb24gbmNlKHQpe2xldCBlPXQuR3JhbW1hcixyPXQucGFyc2VyLkxleGVyLG49bmV3IEwyKHQpO3JldHVybiBEayhlLG4sci5kZWZpbml0aW9uKX12YXIgeE09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOMigpO21NKCk7byh2TSwiY3JlYXRlTGFuZ2l1bVBhcnNlciIpO28obmNlLCJwcmVwYXJlTGFuZ2l1bVBhcnNlciIpfSk7dmFyIGYwLGJNPU0oKCk9PnsidXNlIHN0cmljdCI7czAoKTtBYygpO2VzKCk7UGwoKTtXbSgpO1JzKCk7ZjA9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFRva2VuQnVpbGRlciIpfWJ1aWxkVG9rZW5zKGUscil7bGV0IG49dG4oWnYoZSwhMSkpLGk9dGhpcy5idWlsZFRlcm1pbmFsVG9rZW5zKG4pLGE9dGhpcy5idWlsZEtleXdvcmRUb2tlbnMobixpLHIpO3JldHVybiBpLmZvckVhY2gocz0+e2xldCBsPXMuUEFUVEVSTjt0eXBlb2YgbD09Im9iamVjdCImJmwmJiJ0ZXN0ImluIGwmJkRUKGwpP2EudW5zaGlmdChzKTphLnB1c2gocyl9KSxhfWJ1aWxkVGVybWluYWxUb2tlbnMoZSl7cmV0dXJuIGUuZmlsdGVyKHFvKS5maWx0ZXIocj0+IXIuZnJhZ21lbnQpLm1hcChyPT50aGlzLmJ1aWxkVGVybWluYWxUb2tlbihyKSkudG9BcnJheSgpfWJ1aWxkVGVybWluYWxUb2tlbihlKXtsZXQgcj1ZbShlKSxuPXRoaXMucmVxdWlyZXNDdXN0b21QYXR0ZXJuKHIpP3RoaXMucmVnZXhQYXR0ZXJuRnVuY3Rpb24ocik6cixpPXtuYW1lOmUubmFtZSxQQVRURVJOOm4sTElORV9CUkVBS1M6ITB9O3JldHVybiBlLmhpZGRlbiYmKGkuR1JPVVA9RFQocik/b2kuU0tJUFBFRDoiaGlkZGVuIiksaX1yZXF1aXJlc0N1c3RvbVBhdHRlcm4oZSl7cmV0dXJuIGUuZmxhZ3MuaW5jbHVkZXMoInUiKT8hMDohIShlLnNvdXJjZS5pbmNsdWRlcygiPzw9Iil8fGUuc291cmNlLmluY2x1ZGVzKCI/PCEiKSl9cmVnZXhQYXR0ZXJuRnVuY3Rpb24oZSl7bGV0IHI9bmV3IFJlZ0V4cChlLGUuZmxhZ3MrInkiKTtyZXR1cm4obixpKT0+KHIubGFzdEluZGV4PWksci5leGVjKG4pKX1idWlsZEtleXdvcmRUb2tlbnMoZSxyLG4pe3JldHVybiBlLmZpbHRlcihNYSkuZmxhdE1hcChpPT5fYyhpKS5maWx0ZXIoWG8pKS5kaXN0aW5jdChpPT5pLnZhbHVlKS50b0FycmF5KCkuc29ydCgoaSxhKT0+YS52YWx1ZS5sZW5ndGgtaS52YWx1ZS5sZW5ndGgpLm1hcChpPT50aGlzLmJ1aWxkS2V5d29yZFRva2VuKGksciwhIW4/LmNhc2VJbnNlbnNpdGl2ZSkpfWJ1aWxkS2V5d29yZFRva2VuKGUscixuKXtyZXR1cm57bmFtZTplLnZhbHVlLFBBVFRFUk46dGhpcy5idWlsZEtleXdvcmRQYXR0ZXJuKGUsbiksTE9OR0VSX0FMVDp0aGlzLmZpbmRMb25nZXJBbHQoZSxyKX19YnVpbGRLZXl3b3JkUGF0dGVybihlLHIpe3JldHVybiByP25ldyBSZWdFeHAoWE4oZS52YWx1ZSkpOmUudmFsdWV9ZmluZExvbmdlckFsdChlLHIpe3JldHVybiByLnJlZHVjZSgobixpKT0+e2xldCBhPWk/LlBBVFRFUk47cmV0dXJuIGE/LnNvdXJjZSYmak4oIl4iK2Euc291cmNlKyIkIixlLnZhbHVlKSYmbi5wdXNoKGkpLG59LFtdKX19fSk7dmFyIGQwLE5jLHdNPU0oKCk9PnsidXNlIHN0cmljdCI7QWMoKTtQbCgpO2QwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRWYWx1ZUNvbnZlcnRlciIpfWNvbnZlcnQoZSxyKXtsZXQgbj1yLmdyYW1tYXJTb3VyY2U7aWYoWWQobikmJihuPVpOKG4pKSxPbChuKSl7bGV0IGk9bi5ydWxlLnJlZjtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgY3N0IG5vZGUgd2FzIG5vdCBwYXJzZWQgYnkgYSBydWxlLiIpO3JldHVybiB0aGlzLnJ1bkNvbnZlcnRlcihpLGUscil9cmV0dXJuIGV9cnVuQ29udmVydGVyKGUscixuKXt2YXIgaTtzd2l0Y2goZS5uYW1lLnRvVXBwZXJDYXNlKCkpe2Nhc2UiSU5UIjpyZXR1cm4gTmMuY29udmVydEludChyKTtjYXNlIlNUUklORyI6cmV0dXJuIE5jLmNvbnZlcnRTdHJpbmcocik7Y2FzZSJJRCI6cmV0dXJuIE5jLmNvbnZlcnRJRChyKX1zd2l0Y2goKGk9c1IoZSkpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS50b0xvd2VyQ2FzZSgpKXtjYXNlIm51bWJlciI6cmV0dXJuIE5jLmNvbnZlcnROdW1iZXIocik7Y2FzZSJib29sZWFuIjpyZXR1cm4gTmMuY29udmVydEJvb2xlYW4ocik7Y2FzZSJiaWdpbnQiOnJldHVybiBOYy5jb252ZXJ0QmlnaW50KHIpO2Nhc2UiZGF0ZSI6cmV0dXJuIE5jLmNvbnZlcnREYXRlKHIpO2RlZmF1bHQ6cmV0dXJuIHJ9fX07KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoaCl7bGV0IGY9IiI7Zm9yKGxldCBkPTE7ZDxoLmxlbmd0aC0xO2QrKyl7bGV0IHA9aC5jaGFyQXQoZCk7aWYocD09PSJcXCIpe2xldCBtPWguY2hhckF0KCsrZCk7Zis9cihtKX1lbHNlIGYrPXB9cmV0dXJuIGZ9byhlLCJjb252ZXJ0U3RyaW5nIiksdC5jb252ZXJ0U3RyaW5nPWU7ZnVuY3Rpb24gcihoKXtzd2l0Y2goaCl7Y2FzZSJiIjpyZXR1cm4iXGIiO2Nhc2UiZiI6cmV0dXJuIlxmIjtjYXNlIm4iOnJldHVybmAKYDtjYXNlInIiOnJldHVybiJcciI7Y2FzZSJ0IjpyZXR1cm4iCSI7Y2FzZSJ2IjpyZXR1cm4iXHYiO2Nhc2UiMCI6cmV0dXJuIlwwIjtkZWZhdWx0OnJldHVybiBofX1vKHIsImNvbnZlcnRFc2NhcGVDaGFyYWN0ZXIiKTtmdW5jdGlvbiBuKGgpe3JldHVybiBoLmNoYXJBdCgwKT09PSJeIj9oLnN1YnN0cmluZygxKTpofW8obiwiY29udmVydElEIiksdC5jb252ZXJ0SUQ9bjtmdW5jdGlvbiBpKGgpe3JldHVybiBwYXJzZUludChoKX1vKGksImNvbnZlcnRJbnQiKSx0LmNvbnZlcnRJbnQ9aTtmdW5jdGlvbiBhKGgpe3JldHVybiBCaWdJbnQoaCl9byhhLCJjb252ZXJ0QmlnaW50IiksdC5jb252ZXJ0QmlnaW50PWE7ZnVuY3Rpb24gcyhoKXtyZXR1cm4gbmV3IERhdGUoaCl9byhzLCJjb252ZXJ0RGF0ZSIpLHQuY29udmVydERhdGU9cztmdW5jdGlvbiBsKGgpe3JldHVybiBOdW1iZXIoaCl9byhsLCJjb252ZXJ0TnVtYmVyIiksdC5jb252ZXJ0TnVtYmVyPWw7ZnVuY3Rpb24gdShoKXtyZXR1cm4gaC50b0xvd2VyQ2FzZSgpPT09InRydWUifW8odSwiY29udmVydEJvb2xlYW4iKSx0LmNvbnZlcnRCb29sZWFuPXV9KShOY3x8KE5jPXt9KSl9KTt2YXIgU009TmkoRU09PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVNLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVE07ZnVuY3Rpb24ga00oKXtpZihUTT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJ1bnRpbWUgYWJzdHJhY3Rpb24gbGF5ZXIgaW5zdGFsbGVkIik7cmV0dXJuIFRNfW8oa00sIlJBTCIpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe2lmKHI9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJObyBydW50aW1lIGFic3RyYWN0aW9uIGxheWVyIHByb3ZpZGVkIik7VE09cn1vKGUsImluc3RhbGwiKSx0Lmluc3RhbGw9ZX0pKGtNfHwoa009e30pKTtFTS5kZWZhdWx0PWtNfSk7dmFyIHNjZT1OaShJYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSWEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0lhLnN0cmluZ0FycmF5PUlhLmFycmF5PUlhLmZ1bmM9SWEuZXJyb3I9SWEubnVtYmVyPUlhLnN0cmluZz1JYS5ib29sZWFuPXZvaWQgMDtmdW5jdGlvbiBDemUodCl7cmV0dXJuIHQ9PT0hMHx8dD09PSExfW8oQ3plLCJib29sZWFuIik7SWEuYm9vbGVhbj1DemU7ZnVuY3Rpb24gaWNlKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd9byhpY2UsInN0cmluZyIpO0lhLnN0cmluZz1pY2U7ZnVuY3Rpb24gQXplKHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciJ8fHQgaW5zdGFuY2VvZiBOdW1iZXJ9byhBemUsIm51bWJlciIpO0lhLm51bWJlcj1BemU7ZnVuY3Rpb24gX3plKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3J9byhfemUsImVycm9yIik7SWEuZXJyb3I9X3plO2Z1bmN0aW9uIEx6ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiJ9byhMemUsImZ1bmMiKTtJYS5mdW5jPUx6ZTtmdW5jdGlvbiBhY2UodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9byhhY2UsImFycmF5Iik7SWEuYXJyYXk9YWNlO2Z1bmN0aW9uIER6ZSh0KXtyZXR1cm4gYWNlKHQpJiZ0LmV2ZXJ5KGU9PmljZShlKSl9byhEemUsInN0cmluZ0FycmF5Iik7SWEuc3RyaW5nQXJyYXk9RHplfSk7dmFyIEFNPU5pKGJnPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7YmcuRW1pdHRlcj1iZy5FdmVudD12b2lkIDA7dmFyIE56ZT1TTSgpLG9jZTsoZnVuY3Rpb24odCl7bGV0IGU9e2Rpc3Bvc2UoKXt9fTt0Lk5vbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZX19KShvY2V8fChiZy5FdmVudD1vY2U9e30pKTt2YXIgQ009Y2xhc3N7c3RhdGlje28odGhpcywiQ2FsbGJhY2tMaXN0Iil9YWRkKGUscj1udWxsLG4pe3RoaXMuX2NhbGxiYWNrc3x8KHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl9jb250ZXh0cz1bXSksdGhpcy5fY2FsbGJhY2tzLnB1c2goZSksdGhpcy5fY29udGV4dHMucHVzaChyKSxBcnJheS5pc0FycmF5KG4pJiZuLnB1c2goe2Rpc3Bvc2U6bygoKT0+dGhpcy5yZW1vdmUoZSxyKSwiZGlzcG9zZSIpfSl9cmVtb3ZlKGUscj1udWxsKXtpZighdGhpcy5fY2FsbGJhY2tzKXJldHVybjtsZXQgbj0hMTtmb3IobGV0IGk9MCxhPXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7aTxhO2krKylpZih0aGlzLl9jYWxsYmFja3NbaV09PT1lKWlmKHRoaXMuX2NvbnRleHRzW2ldPT09cil7dGhpcy5fY2FsbGJhY2tzLnNwbGljZShpLDEpLHRoaXMuX2NvbnRleHRzLnNwbGljZShpLDEpO3JldHVybn1lbHNlIG49ITA7aWYobil0aHJvdyBuZXcgRXJyb3IoIldoZW4gYWRkaW5nIGEgbGlzdGVuZXIgd2l0aCBhIGNvbnRleHQsIHlvdSBzaG91bGQgcmVtb3ZlIGl0IHdpdGggdGhlIHNhbWUgY29udGV4dCIpfWludm9rZSguLi5lKXtpZighdGhpcy5fY2FsbGJhY2tzKXJldHVybltdO2xldCByPVtdLG49dGhpcy5fY2FsbGJhY2tzLnNsaWNlKDApLGk9dGhpcy5fY29udGV4dHMuc2xpY2UoMCk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthPHM7YSsrKXRyeXtyLnB1c2goblthXS5hcHBseShpW2FdLGUpKX1jYXRjaChsKXsoMCxOemUuZGVmYXVsdCkoKS5jb25zb2xlLmVycm9yKGwpfXJldHVybiByfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5fY2FsbGJhY2tzfHx0aGlzLl9jYWxsYmFja3MubGVuZ3RoPT09MH1kaXNwb3NlKCl7dGhpcy5fY2FsbGJhY2tzPXZvaWQgMCx0aGlzLl9jb250ZXh0cz12b2lkIDB9fSxOaz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIkVtaXR0ZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLl9vcHRpb25zPWV9Z2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuX2V2ZW50fHwodGhpcy5fZXZlbnQ9KGUscixuKT0+e3RoaXMuX2NhbGxiYWNrc3x8KHRoaXMuX2NhbGxiYWNrcz1uZXcgQ00pLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkJiZ0aGlzLl9jYWxsYmFja3MuaXNFbXB0eSgpJiZ0aGlzLl9vcHRpb25zLm9uRmlyc3RMaXN0ZW5lckFkZCh0aGlzKSx0aGlzLl9jYWxsYmFja3MuYWRkKGUscik7bGV0IGk9e2Rpc3Bvc2U6bygoKT0+e3RoaXMuX2NhbGxiYWNrcyYmKHRoaXMuX2NhbGxiYWNrcy5yZW1vdmUoZSxyKSxpLmRpc3Bvc2U9dC5fbm9vcCx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlJiZ0aGlzLl9jYWxsYmFja3MuaXNFbXB0eSgpJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKHRoaXMpKX0sImRpc3Bvc2UiKX07cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJm4ucHVzaChpKSxpfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt0aGlzLl9jYWxsYmFja3MmJnRoaXMuX2NhbGxiYWNrcy5pbnZva2UuY2FsbCh0aGlzLl9jYWxsYmFja3MsZSl9ZGlzcG9zZSgpe3RoaXMuX2NhbGxiYWNrcyYmKHRoaXMuX2NhbGxiYWNrcy5kaXNwb3NlKCksdGhpcy5fY2FsbGJhY2tzPXZvaWQgMCl9fTtiZy5FbWl0dGVyPU5rO05rLl9ub29wPWZ1bmN0aW9uKCl7fX0pO3ZhciBsY2U9Tmkod2c9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdnLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt3Zy5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZT13Zy5DYW5jZWxsYXRpb25Ub2tlbj12b2lkIDA7dmFyIFJ6ZT1TTSgpLE16ZT1zY2UoKSxfTT1BTSgpLFJrOyhmdW5jdGlvbih0KXt0Lk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6X00uRXZlbnQuTm9uZX0pLHQuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOl9NLkV2ZW50Lk5vbmV9KTtmdW5jdGlvbiBlKHIpe2xldCBuPXI7cmV0dXJuIG4mJihuPT09dC5Ob25lfHxuPT09dC5DYW5jZWxsZWR8fE16ZS5ib29sZWFuKG4uaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQpJiYhIW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQpfW8oZSwiaXMiKSx0LmlzPWV9KShSa3x8KHdnLkNhbmNlbGxhdGlvblRva2VuPVJrPXt9KSk7dmFyIEl6ZT1PYmplY3QuZnJlZXplKGZ1bmN0aW9uKHQsZSl7bGV0IHI9KDAsUnplLmRlZmF1bHQpKCkudGltZXIuc2V0VGltZW91dCh0LmJpbmQoZSksMCk7cmV0dXJue2Rpc3Bvc2UoKXtyLmRpc3Bvc2UoKX19fSksTWs9Y2xhc3N7c3RhdGlje28odGhpcywiTXV0YWJsZVRva2VuIil9Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMX1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/SXplOih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgX00uRW1pdHRlciksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPXZvaWQgMCl9fSxMTT1jbGFzc3tzdGF0aWN7byh0aGlzLCJDYW5jZWxsYXRpb25Ub2tlblNvdXJjZSIpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBNayksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49UmsuQ2FuY2VsbGVkfWRpc3Bvc2UoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIE1rJiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49UmsuTm9uZX19O3dnLkNhbmNlbGxhdGlvblRva2VuU291cmNlPUxNfSk7dmFyIENyPXt9O3ZhciBLbz1NKCgpPT57InVzZSBzdHJpY3QiO0VyKENyLGthKGxjZSgpLDEpKX0pO2Z1bmN0aW9uIE5NKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0eXBlb2Ygc2V0SW1tZWRpYXRlPiJ1Ij9zZXRUaW1lb3V0KHQsMCk6c2V0SW1tZWRpYXRlKHQpfSl9ZnVuY3Rpb24gdWNlKCl7cmV0dXJuIERNPURhdGUubm93KCksbmV3IENyLkNhbmNlbGxhdGlvblRva2VuU291cmNlfWZ1bmN0aW9uIGhjZSh0KXtjY2U9dH1mdW5jdGlvbiBzZih0KXtyZXR1cm4gdD09PVJjfWFzeW5jIGZ1bmN0aW9uIEdpKHQpe2lmKHQ9PT1Dci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXJldHVybjtsZXQgZT1EYXRlLm5vdygpO2lmKGUtRE0+PWNjZSYmKERNPWUsYXdhaXQgTk0oKSksdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCl0aHJvdyBSY312YXIgRE0sY2NlLFJjLGFzLFFvPU0oKCk9PnsidXNlIHN0cmljdCI7S28oKTtvKE5NLCJkZWxheU5leHRUaWNrIik7RE09MCxjY2U9MTA7byh1Y2UsInN0YXJ0Q2FuY2VsYWJsZU9wZXJhdGlvbiIpO28oaGNlLCJzZXRJbnRlcnJ1cHRpb25QZXJpb2QiKTtSYz1TeW1ib2woIk9wZXJhdGlvbkNhbmNlbGxlZCIpO28oc2YsImlzT3BlcmF0aW9uQ2FuY2VsbGVkIik7byhHaSwiaW50ZXJydXB0QW5kQ2hlY2siKTthcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZlcnJlZCIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChlLHIpPT57dGhpcy5yZXNvbHZlPW49PihlKG4pLHRoaXMpLHRoaXMucmVqZWN0PW49PihyKG4pLHRoaXMpfSl9fX0pO2Z1bmN0aW9uIFJNKHQsZSl7aWYodC5sZW5ndGg8PTEpcmV0dXJuIHQ7bGV0IHI9dC5sZW5ndGgvMnwwLG49dC5zbGljZSgwLHIpLGk9dC5zbGljZShyKTtSTShuLGUpLFJNKGksZSk7bGV0IGE9MCxzPTAsbD0wO2Zvcig7YTxuLmxlbmd0aCYmczxpLmxlbmd0aDspZShuW2FdLGlbc10pPD0wP3RbbCsrXT1uW2ErK106dFtsKytdPWlbcysrXTtmb3IoO2E8bi5sZW5ndGg7KXRbbCsrXT1uW2ErK107Zm9yKDtzPGkubGVuZ3RoOyl0W2wrK109aVtzKytdO3JldHVybiB0fWZ1bmN0aW9uIGZjZSh0LGUscj0wKXtsZXQgbj1lP1tyXTpbXTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7bGV0IGE9dC5jaGFyQ29kZUF0KGkpO2RjZShhKSYmKGE9PT0xMyYmaSsxPHQubGVuZ3RoJiZ0LmNoYXJDb2RlQXQoaSsxKT09PTEwJiZpKyssbi5wdXNoKHIraSsxKSl9cmV0dXJuIG59ZnVuY3Rpb24gZGNlKHQpe3JldHVybiB0PT09MTN8fHQ9PT0xMH1mdW5jdGlvbiBwY2UodCl7bGV0IGU9dC5zdGFydCxyPXQuZW5kO3JldHVybiBlLmxpbmU+ci5saW5lfHxlLmxpbmU9PT1yLmxpbmUmJmUuY2hhcmFjdGVyPnIuY2hhcmFjdGVyP3tzdGFydDpyLGVuZDplfTp0fWZ1bmN0aW9uIE96ZSh0KXtsZXQgZT1wY2UodC5yYW5nZSk7cmV0dXJuIGUhPT10LnJhbmdlP3tuZXdUZXh0OnQubmV3VGV4dCxyYW5nZTplfTp0fXZhciBJayxUZyxtY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJaz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIkZ1bGxUZXh0RG9jdW1lbnQiKX1jb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLl91cmk9ZSx0aGlzLl9sYW5ndWFnZUlkPXIsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2NvbnRlbnQ9aSx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGxhbmd1YWdlSWQoKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldFRleHQoZSl7aWYoZSl7bGV0IHI9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyhyLG4pfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZShlLHIpe2ZvcihsZXQgbiBvZiBlKWlmKHQuaXNJbmNyZW1lbnRhbChuKSl7bGV0IGk9cGNlKG4ucmFuZ2UpLGE9dGhpcy5vZmZzZXRBdChpLnN0YXJ0KSxzPXRoaXMub2Zmc2V0QXQoaS5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxhKStuLnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocyx0aGlzLl9jb250ZW50Lmxlbmd0aCk7bGV0IGw9TWF0aC5tYXgoaS5zdGFydC5saW5lLDApLHU9TWF0aC5tYXgoaS5lbmQubGluZSwwKSxoPXRoaXMuX2xpbmVPZmZzZXRzLGY9ZmNlKG4udGV4dCwhMSxhKTtpZih1LWw9PT1mLmxlbmd0aClmb3IobGV0IHA9MCxtPWYubGVuZ3RoO3A8bTtwKyspaFtwK2wrMV09ZltwXTtlbHNlIGYubGVuZ3RoPDFlND9oLnNwbGljZShsKzEsdS1sLC4uLmYpOnRoaXMuX2xpbmVPZmZzZXRzPWg9aC5zbGljZSgwLGwrMSkuY29uY2F0KGYsaC5zbGljZSh1KzEpKTtsZXQgZD1uLnRleHQubGVuZ3RoLShzLWEpO2lmKGQhPT0wKWZvcihsZXQgcD1sKzErZi5sZW5ndGgsbT1oLmxlbmd0aDtwPG07cCsrKWhbcF09aFtwXStkfWVsc2UgaWYodC5pc0Z1bGwobikpdGhpcy5fY29udGVudD1uLnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX3ZlcnNpb249cn1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB0aGlzLl9saW5lT2Zmc2V0cz09PXZvaWQgMCYmKHRoaXMuX2xpbmVPZmZzZXRzPWZjZSh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAsaT1yLmxlbmd0aDtpZihpPT09MClyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO248aTspe2xldCBzPU1hdGguZmxvb3IoKG4raSkvMik7cltzXT5lP2k9czpuPXMrMX1sZXQgYT1uLTE7cmV0dXJuIGU9dGhpcy5lbnN1cmVCZWZvcmVFT0woZSxyW2FdKSx7bGluZTphLGNoYXJhY3RlcjplLXJbYV19fW9mZnNldEF0KGUpe2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXIubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj1yW2UubGluZV07aWYoZS5jaGFyYWN0ZXI8PTApcmV0dXJuIG47bGV0IGk9ZS5saW5lKzE8ci5sZW5ndGg/cltlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGgsYT1NYXRoLm1pbihuK2UuY2hhcmFjdGVyLGkpO3JldHVybiB0aGlzLmVuc3VyZUJlZm9yZUVPTChhLG4pfWVuc3VyZUJlZm9yZUVPTChlLHIpe2Zvcig7ZT5yJiZkY2UodGhpcy5fY29udGVudC5jaGFyQ29kZUF0KGUtMSkpOyllLS07cmV0dXJuIGV9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe2xldCByPWU7cmV0dXJuIHIhPW51bGwmJnR5cGVvZiByLnRleHQ9PSJzdHJpbmciJiZyLnJhbmdlIT09dm9pZCAwJiYoci5yYW5nZUxlbmd0aD09PXZvaWQgMHx8dHlwZW9mIHIucmFuZ2VMZW5ndGg9PSJudW1iZXIiKX1zdGF0aWMgaXNGdWxsKGUpe2xldCByPWU7cmV0dXJuIHIhPW51bGwmJnR5cGVvZiByLnRleHQ9PSJzdHJpbmciJiZyLnJhbmdlPT09dm9pZCAwJiZyLnJhbmdlTGVuZ3RoPT09dm9pZCAwfX07KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoaSxhLHMsbCl7cmV0dXJuIG5ldyBJayhpLGEscyxsKX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihpLGEscyl7aWYoaSBpbnN0YW5jZW9mIElrKXJldHVybiBpLnVwZGF0ZShhLHMpLGk7dGhyb3cgbmV3IEVycm9yKCJUZXh0RG9jdW1lbnQudXBkYXRlOiBkb2N1bWVudCBtdXN0IGJlIGNyZWF0ZWQgYnkgVGV4dERvY3VtZW50LmNyZWF0ZSIpfW8ociwidXBkYXRlIiksdC51cGRhdGU9cjtmdW5jdGlvbiBuKGksYSl7bGV0IHM9aS5nZXRUZXh0KCksbD1STShhLm1hcChPemUpLChmLGQpPT57bGV0IHA9Zi5yYW5nZS5zdGFydC5saW5lLWQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/Zi5yYW5nZS5zdGFydC5jaGFyYWN0ZXItZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLHU9MCxoPVtdO2ZvcihsZXQgZiBvZiBsKXtsZXQgZD1pLm9mZnNldEF0KGYucmFuZ2Uuc3RhcnQpO2lmKGQ8dSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtkPnUmJmgucHVzaChzLnN1YnN0cmluZyh1LGQpKSxmLm5ld1RleHQubGVuZ3RoJiZoLnB1c2goZi5uZXdUZXh0KSx1PWkub2Zmc2V0QXQoZi5yYW5nZS5lbmQpfXJldHVybiBoLnB1c2gocy5zdWJzdHIodSkpLGguam9pbigiIil9byhuLCJhcHBseUVkaXRzIiksdC5hcHBseUVkaXRzPW59KShUZ3x8KFRnPXt9KSk7byhSTSwibWVyZ2VTb3J0Iik7byhmY2UsImNvbXB1dGVMaW5lT2Zmc2V0cyIpO28oZGNlLCJpc0VPTCIpO28ocGNlLCJnZXRXZWxsZm9ybWVkUmFuZ2UiKTtvKE96ZSwiZ2V0V2VsbGZvcm1lZEVkaXQiKX0pO3ZhciBnY2UsT3Msa2csTU09TSgoKT0+eyJ1c2Ugc3RyaWN0IjsoKCk9PnsidXNlIHN0cmljdCI7dmFyIHQ9ezQ3MDppPT57ZnVuY3Rpb24gYSh1KXtpZih0eXBlb2YgdSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KHUpKX1vKGEsImUiKTtmdW5jdGlvbiBzKHUsaCl7Zm9yKHZhciBmLGQ9IiIscD0wLG09LTEsZz0wLHk9MDt5PD11Lmxlbmd0aDsrK3kpe2lmKHk8dS5sZW5ndGgpZj11LmNoYXJDb2RlQXQoeSk7ZWxzZXtpZihmPT09NDcpYnJlYWs7Zj00N31pZihmPT09NDcpe2lmKCEobT09PXktMXx8Zz09PTEpKWlmKG0hPT15LTEmJmc9PT0yKXtpZihkLmxlbmd0aDwyfHxwIT09Mnx8ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTEpIT09NDZ8fGQuY2hhckNvZGVBdChkLmxlbmd0aC0yKSE9PTQ2KXtpZihkLmxlbmd0aD4yKXt2YXIgdj1kLmxhc3RJbmRleE9mKCIvIik7aWYodiE9PWQubGVuZ3RoLTEpe3Y9PT0tMT8oZD0iIixwPTApOnA9KGQ9ZC5zbGljZSgwLHYpKS5sZW5ndGgtMS1kLmxhc3RJbmRleE9mKCIvIiksbT15LGc9MDtjb250aW51ZX19ZWxzZSBpZihkLmxlbmd0aD09PTJ8fGQubGVuZ3RoPT09MSl7ZD0iIixwPTAsbT15LGc9MDtjb250aW51ZX19aCYmKGQubGVuZ3RoPjA/ZCs9Ii8uLiI6ZD0iLi4iLHA9Mil9ZWxzZSBkLmxlbmd0aD4wP2QrPSIvIit1LnNsaWNlKG0rMSx5KTpkPXUuc2xpY2UobSsxLHkpLHA9eS1tLTE7bT15LGc9MH1lbHNlIGY9PT00NiYmZyE9PS0xPysrZzpnPS0xfXJldHVybiBkfW8ocywiciIpO3ZhciBsPXtyZXNvbHZlOm8oZnVuY3Rpb24oKXtmb3IodmFyIHUsaD0iIixmPSExLGQ9YXJndW1lbnRzLmxlbmd0aC0xO2Q+PS0xJiYhZjtkLS0pe3ZhciBwO2Q+PTA/cD1hcmd1bWVudHNbZF06KHU9PT12b2lkIDAmJih1PXByb2Nlc3MuY3dkKCkpLHA9dSksYShwKSxwLmxlbmd0aCE9PTAmJihoPXArIi8iK2gsZj1wLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIGg9cyhoLCFmKSxmP2gubGVuZ3RoPjA/Ii8iK2g6Ii8iOmgubGVuZ3RoPjA/aDoiLiJ9LCJyZXNvbHZlIiksbm9ybWFsaXplOm8oZnVuY3Rpb24odSl7aWYoYSh1KSx1Lmxlbmd0aD09PTApcmV0dXJuIi4iO3ZhciBoPXUuY2hhckNvZGVBdCgwKT09PTQ3LGY9dS5jaGFyQ29kZUF0KHUubGVuZ3RoLTEpPT09NDc7cmV0dXJuKHU9cyh1LCFoKSkubGVuZ3RoIT09MHx8aHx8KHU9Ii4iKSx1Lmxlbmd0aD4wJiZmJiYodSs9Ii8iKSxoPyIvIit1OnV9LCJub3JtYWxpemUiKSxpc0Fic29sdXRlOm8oZnVuY3Rpb24odSl7cmV0dXJuIGEodSksdS5sZW5ndGg+MCYmdS5jaGFyQ29kZUF0KDApPT09NDd9LCJpc0Fic29sdXRlIiksam9pbjpvKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIi4iO2Zvcih2YXIgdSxoPTA7aDxhcmd1bWVudHMubGVuZ3RoOysraCl7dmFyIGY9YXJndW1lbnRzW2hdO2EoZiksZi5sZW5ndGg+MCYmKHU9PT12b2lkIDA/dT1mOnUrPSIvIitmKX1yZXR1cm4gdT09PXZvaWQgMD8iLiI6bC5ub3JtYWxpemUodSl9LCJqb2luIikscmVsYXRpdmU6byhmdW5jdGlvbih1LGgpe2lmKGEodSksYShoKSx1PT09aHx8KHU9bC5yZXNvbHZlKHUpKT09PShoPWwucmVzb2x2ZShoKSkpcmV0dXJuIiI7Zm9yKHZhciBmPTE7Zjx1Lmxlbmd0aCYmdS5jaGFyQ29kZUF0KGYpPT09NDc7KytmKTtmb3IodmFyIGQ9dS5sZW5ndGgscD1kLWYsbT0xO208aC5sZW5ndGgmJmguY2hhckNvZGVBdChtKT09PTQ3OysrbSk7Zm9yKHZhciBnPWgubGVuZ3RoLW0seT1wPGc/cDpnLHY9LTEseD0wO3g8PXk7Kyt4KXtpZih4PT09eSl7aWYoZz55KXtpZihoLmNoYXJDb2RlQXQobSt4KT09PTQ3KXJldHVybiBoLnNsaWNlKG0reCsxKTtpZih4PT09MClyZXR1cm4gaC5zbGljZShtK3gpfWVsc2UgcD55JiYodS5jaGFyQ29kZUF0KGYreCk9PT00Nz92PXg6eD09PTAmJih2PTApKTticmVha312YXIgYj11LmNoYXJDb2RlQXQoZit4KTtpZihiIT09aC5jaGFyQ29kZUF0KG0reCkpYnJlYWs7Yj09PTQ3JiYodj14KX12YXIgdz0iIjtmb3IoeD1mK3YrMTt4PD1kOysreCl4IT09ZCYmdS5jaGFyQ29kZUF0KHgpIT09NDd8fCh3Lmxlbmd0aD09PTA/dys9Ii4uIjp3Kz0iLy4uIik7cmV0dXJuIHcubGVuZ3RoPjA/dytoLnNsaWNlKG0rdik6KG0rPXYsaC5jaGFyQ29kZUF0KG0pPT09NDcmJisrbSxoLnNsaWNlKG0pKX0sInJlbGF0aXZlIiksX21ha2VMb25nOm8oZnVuY3Rpb24odSl7cmV0dXJuIHV9LCJfbWFrZUxvbmciKSxkaXJuYW1lOm8oZnVuY3Rpb24odSl7aWYoYSh1KSx1Lmxlbmd0aD09PTApcmV0dXJuIi4iO2Zvcih2YXIgaD11LmNoYXJDb2RlQXQoMCksZj1oPT09NDcsZD0tMSxwPSEwLG09dS5sZW5ndGgtMTttPj0xOy0tbSlpZigoaD11LmNoYXJDb2RlQXQobSkpPT09NDcpe2lmKCFwKXtkPW07YnJlYWt9fWVsc2UgcD0hMTtyZXR1cm4gZD09PS0xP2Y/Ii8iOiIuIjpmJiZkPT09MT8iLy8iOnUuc2xpY2UoMCxkKX0sImRpcm5hbWUiKSxiYXNlbmFtZTpvKGZ1bmN0aW9uKHUsaCl7aWYoaCE9PXZvaWQgMCYmdHlwZW9mIGghPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTthKHUpO3ZhciBmLGQ9MCxwPS0xLG09ITA7aWYoaCE9PXZvaWQgMCYmaC5sZW5ndGg+MCYmaC5sZW5ndGg8PXUubGVuZ3RoKXtpZihoLmxlbmd0aD09PXUubGVuZ3RoJiZoPT09dSlyZXR1cm4iIjt2YXIgZz1oLmxlbmd0aC0xLHk9LTE7Zm9yKGY9dS5sZW5ndGgtMTtmPj0wOy0tZil7dmFyIHY9dS5jaGFyQ29kZUF0KGYpO2lmKHY9PT00Nyl7aWYoIW0pe2Q9ZisxO2JyZWFrfX1lbHNlIHk9PT0tMSYmKG09ITEseT1mKzEpLGc+PTAmJih2PT09aC5jaGFyQ29kZUF0KGcpPy0tZz09LTEmJihwPWYpOihnPS0xLHA9eSkpfXJldHVybiBkPT09cD9wPXk6cD09PS0xJiYocD11Lmxlbmd0aCksdS5zbGljZShkLHApfWZvcihmPXUubGVuZ3RoLTE7Zj49MDstLWYpaWYodS5jaGFyQ29kZUF0KGYpPT09NDcpe2lmKCFtKXtkPWYrMTticmVha319ZWxzZSBwPT09LTEmJihtPSExLHA9ZisxKTtyZXR1cm4gcD09PS0xPyIiOnUuc2xpY2UoZCxwKX0sImJhc2VuYW1lIiksZXh0bmFtZTpvKGZ1bmN0aW9uKHUpe2EodSk7Zm9yKHZhciBoPS0xLGY9MCxkPS0xLHA9ITAsbT0wLGc9dS5sZW5ndGgtMTtnPj0wOy0tZyl7dmFyIHk9dS5jaGFyQ29kZUF0KGcpO2lmKHkhPT00NylkPT09LTEmJihwPSExLGQ9ZysxKSx5PT09NDY/aD09PS0xP2g9ZzptIT09MSYmKG09MSk6aCE9PS0xJiYobT0tMSk7ZWxzZSBpZighcCl7Zj1nKzE7YnJlYWt9fXJldHVybiBoPT09LTF8fGQ9PT0tMXx8bT09PTB8fG09PT0xJiZoPT09ZC0xJiZoPT09ZisxPyIiOnUuc2xpY2UoaCxkKX0sImV4dG5hbWUiKSxmb3JtYXQ6byhmdW5jdGlvbih1KXtpZih1PT09bnVsbHx8dHlwZW9mIHUhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB1KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXt2YXIgZD1mLmRpcnx8Zi5yb290LHA9Zi5iYXNlfHwoZi5uYW1lfHwiIikrKGYuZXh0fHwiIik7cmV0dXJuIGQ/ZD09PWYucm9vdD9kK3A6ZCsiLyIrcDpwfSgwLHUpfSwiZm9ybWF0IikscGFyc2U6byhmdW5jdGlvbih1KXthKHUpO3ZhciBoPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZih1Lmxlbmd0aD09PTApcmV0dXJuIGg7dmFyIGYsZD11LmNoYXJDb2RlQXQoMCkscD1kPT09NDc7cD8oaC5yb290PSIvIixmPTEpOmY9MDtmb3IodmFyIG09LTEsZz0wLHk9LTEsdj0hMCx4PXUubGVuZ3RoLTEsYj0wO3g+PWY7LS14KWlmKChkPXUuY2hhckNvZGVBdCh4KSkhPT00Nyl5PT09LTEmJih2PSExLHk9eCsxKSxkPT09NDY/bT09PS0xP209eDpiIT09MSYmKGI9MSk6bSE9PS0xJiYoYj0tMSk7ZWxzZSBpZighdil7Zz14KzE7YnJlYWt9cmV0dXJuIG09PT0tMXx8eT09PS0xfHxiPT09MHx8Yj09PTEmJm09PT15LTEmJm09PT1nKzE/eSE9PS0xJiYoaC5iYXNlPWgubmFtZT1nPT09MCYmcD91LnNsaWNlKDEseSk6dS5zbGljZShnLHkpKTooZz09PTAmJnA/KGgubmFtZT11LnNsaWNlKDEsbSksaC5iYXNlPXUuc2xpY2UoMSx5KSk6KGgubmFtZT11LnNsaWNlKGcsbSksaC5iYXNlPXUuc2xpY2UoZyx5KSksaC5leHQ9dS5zbGljZShtLHkpKSxnPjA/aC5kaXI9dS5zbGljZSgwLGctMSk6cCYmKGguZGlyPSIvIiksaH0sInBhcnNlIiksc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07bC5wb3NpeD1sLGkuZXhwb3J0cz1sfX0sZT17fTtmdW5jdGlvbiByKGkpe3ZhciBhPWVbaV07aWYoYSE9PXZvaWQgMClyZXR1cm4gYS5leHBvcnRzO3ZhciBzPWVbaV09e2V4cG9ydHM6e319O3JldHVybiB0W2ldKHMscy5leHBvcnRzLHIpLHMuZXhwb3J0c31vKHIsInIiKSxyLmQ9KGksYSk9Pntmb3IodmFyIHMgaW4gYSlyLm8oYSxzKSYmIXIubyhpLHMpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxzLHtlbnVtZXJhYmxlOiEwLGdldDphW3NdfSl9LHIubz0oaSxhKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksYSksci5yPWk9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfTt2YXIgbj17fTsoKCk9PntsZXQgaTtyLnIobiksci5kKG4se1VSSTpvKCgpPT5wLCJVUkkiKSxVdGlsczpvKCgpPT5JLCJVdGlscyIpfSksdHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiP2k9cHJvY2Vzcy5wbGF0Zm9ybT09PSJ3aW4zMiI6dHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJihpPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiV2luZG93cyIpPj0wKTtsZXQgYT0vXlx3W1x3XGQrLi1dKiQvLHM9L15cLy8sbD0vXlwvXC8vO2Z1bmN0aW9uIHUoRCxrKXtpZighRC5zY2hlbWUmJmspdGhyb3cgbmV3IEVycm9yKGBbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIiR7RC5hdXRob3JpdHl9IiwgcGF0aDogIiR7RC5wYXRofSIsIHF1ZXJ5OiAiJHtELnF1ZXJ5fSIsIGZyYWdtZW50OiAiJHtELmZyYWdtZW50fSJ9YCk7aWYoRC5zY2hlbWUmJiFhLnRlc3QoRC5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihELnBhdGgpe2lmKEQuYXV0aG9yaXR5KXtpZighcy50ZXN0KEQucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihsLnRlc3QoRC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX19byh1LCJzIik7bGV0IGg9IiIsZj0iLyIsZD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LztjbGFzcyBwe3N0YXRpY3tvKHRoaXMsImYiKX1zdGF0aWMgaXNVcmkoayl7cmV0dXJuIGsgaW5zdGFuY2VvZiBwfHwhIWsmJnR5cGVvZiBrLmF1dGhvcml0eT09InN0cmluZyImJnR5cGVvZiBrLmZyYWdtZW50PT0ic3RyaW5nIiYmdHlwZW9mIGsucGF0aD09InN0cmluZyImJnR5cGVvZiBrLnF1ZXJ5PT0ic3RyaW5nIiYmdHlwZW9mIGsuc2NoZW1lPT0ic3RyaW5nIiYmdHlwZW9mIGsuZnNQYXRoPT0ic3RyaW5nIiYmdHlwZW9mIGsud2l0aD09ImZ1bmN0aW9uIiYmdHlwZW9mIGsudG9TdHJpbmc9PSJmdW5jdGlvbiJ9c2NoZW1lO2F1dGhvcml0eTtwYXRoO3F1ZXJ5O2ZyYWdtZW50O2NvbnN0cnVjdG9yKGssUixTLE8sTixQPSExKXt0eXBlb2Ygaz09Im9iamVjdCI/KHRoaXMuc2NoZW1lPWsuc2NoZW1lfHxoLHRoaXMuYXV0aG9yaXR5PWsuYXV0aG9yaXR5fHxoLHRoaXMucGF0aD1rLnBhdGh8fGgsdGhpcy5xdWVyeT1rLnF1ZXJ5fHxoLHRoaXMuZnJhZ21lbnQ9ay5mcmFnbWVudHx8aCk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKEYsQil7cmV0dXJuIEZ8fEI/RjoiZmlsZSJ9KGssUCksdGhpcy5hdXRob3JpdHk9Unx8aCx0aGlzLnBhdGg9ZnVuY3Rpb24oRixCKXtzd2l0Y2goRil7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOkI/QlswXSE9PWYmJihCPWYrQik6Qj1mfXJldHVybiBCfSh0aGlzLnNjaGVtZSxTfHxoKSx0aGlzLnF1ZXJ5PU98fGgsdGhpcy5mcmFnbWVudD1OfHxoLHUodGhpcyxQKSl9Z2V0IGZzUGF0aCgpe3JldHVybiBiKHRoaXMsITEpfXdpdGgoayl7aWYoIWspcmV0dXJuIHRoaXM7bGV0e3NjaGVtZTpSLGF1dGhvcml0eTpTLHBhdGg6TyxxdWVyeTpOLGZyYWdtZW50OlB9PWs7cmV0dXJuIFI9PT12b2lkIDA/Uj10aGlzLnNjaGVtZTpSPT09bnVsbCYmKFI9aCksUz09PXZvaWQgMD9TPXRoaXMuYXV0aG9yaXR5OlM9PT1udWxsJiYoUz1oKSxPPT09dm9pZCAwP089dGhpcy5wYXRoOk89PT1udWxsJiYoTz1oKSxOPT09dm9pZCAwP049dGhpcy5xdWVyeTpOPT09bnVsbCYmKE49aCksUD09PXZvaWQgMD9QPXRoaXMuZnJhZ21lbnQ6UD09PW51bGwmJihQPWgpLFI9PT10aGlzLnNjaGVtZSYmUz09PXRoaXMuYXV0aG9yaXR5JiZPPT09dGhpcy5wYXRoJiZOPT09dGhpcy5xdWVyeSYmUD09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgZyhSLFMsTyxOLFApfXN0YXRpYyBwYXJzZShrLFI9ITEpe2xldCBTPWQuZXhlYyhrKTtyZXR1cm4gUz9uZXcgZyhTWzJdfHxoLEUoU1s0XXx8aCksRShTWzVdfHxoKSxFKFNbN118fGgpLEUoU1s5XXx8aCksUik6bmV3IGcoaCxoLGgsaCxoKX1zdGF0aWMgZmlsZShrKXtsZXQgUj1oO2lmKGkmJihrPWsucmVwbGFjZSgvXFwvZyxmKSksa1swXT09PWYmJmtbMV09PT1mKXtsZXQgUz1rLmluZGV4T2YoZiwyKTtTPT09LTE/KFI9ay5zdWJzdHJpbmcoMiksaz1mKTooUj1rLnN1YnN0cmluZygyLFMpLGs9ay5zdWJzdHJpbmcoUyl8fGYpfXJldHVybiBuZXcgZygiZmlsZSIsUixrLGgsaCl9c3RhdGljIGZyb20oayl7bGV0IFI9bmV3IGcoay5zY2hlbWUsay5hdXRob3JpdHksay5wYXRoLGsucXVlcnksay5mcmFnbWVudCk7cmV0dXJuIHUoUiwhMCksUn10b1N0cmluZyhrPSExKXtyZXR1cm4gdyh0aGlzLGspfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUoayl7aWYoayl7aWYoayBpbnN0YW5jZW9mIHApcmV0dXJuIGs7e2xldCBSPW5ldyBnKGspO3JldHVybiBSLl9mb3JtYXR0ZWQ9ay5leHRlcm5hbCxSLl9mc1BhdGg9ay5fc2VwPT09bT9rLmZzUGF0aDpudWxsLFJ9fXJldHVybiBrfX1sZXQgbT1pPzE6dm9pZCAwO2NsYXNzIGcgZXh0ZW5kcyBwe3N0YXRpY3tvKHRoaXMsImwiKX1fZm9ybWF0dGVkPW51bGw7X2ZzUGF0aD1udWxsO2dldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPWIodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhrPSExKXtyZXR1cm4gaz93KHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9dyh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtsZXQgaz17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoay5mc1BhdGg9dGhpcy5fZnNQYXRoLGsuX3NlcD1tKSx0aGlzLl9mb3JtYXR0ZWQmJihrLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoay5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihrLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihrLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGsucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGsuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksa319bGV0IHk9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiB2KEQsayxSKXtsZXQgUyxPPS0xO2ZvcihsZXQgTj0wO048RC5sZW5ndGg7TisrKXtsZXQgUD1ELmNoYXJDb2RlQXQoTik7aWYoUD49OTcmJlA8PTEyMnx8UD49NjUmJlA8PTkwfHxQPj00OCYmUDw9NTd8fFA9PT00NXx8UD09PTQ2fHxQPT09OTV8fFA9PT0xMjZ8fGsmJlA9PT00N3x8UiYmUD09PTkxfHxSJiZQPT09OTN8fFImJlA9PT01OClPIT09LTEmJihTKz1lbmNvZGVVUklDb21wb25lbnQoRC5zdWJzdHJpbmcoTyxOKSksTz0tMSksUyE9PXZvaWQgMCYmKFMrPUQuY2hhckF0KE4pKTtlbHNle1M9PT12b2lkIDAmJihTPUQuc3Vic3RyKDAsTikpO2xldCBGPXlbUF07RiE9PXZvaWQgMD8oTyE9PS0xJiYoUys9ZW5jb2RlVVJJQ29tcG9uZW50KEQuc3Vic3RyaW5nKE8sTikpLE89LTEpLFMrPUYpOk89PT0tMSYmKE89Til9fXJldHVybiBPIT09LTEmJihTKz1lbmNvZGVVUklDb21wb25lbnQoRC5zdWJzdHJpbmcoTykpKSxTIT09dm9pZCAwP1M6RH1vKHYsImQiKTtmdW5jdGlvbiB4KEQpe2xldCBrO2ZvcihsZXQgUj0wO1I8RC5sZW5ndGg7UisrKXtsZXQgUz1ELmNoYXJDb2RlQXQoUik7Uz09PTM1fHxTPT09NjM/KGs9PT12b2lkIDAmJihrPUQuc3Vic3RyKDAsUikpLGsrPXlbU10pOmshPT12b2lkIDAmJihrKz1EW1JdKX1yZXR1cm4gayE9PXZvaWQgMD9rOkR9byh4LCJwIik7ZnVuY3Rpb24gYihELGspe2xldCBSO3JldHVybiBSPUQuYXV0aG9yaXR5JiZELnBhdGgubGVuZ3RoPjEmJkQuc2NoZW1lPT09ImZpbGUiP2AvLyR7RC5hdXRob3JpdHl9JHtELnBhdGh9YDpELnBhdGguY2hhckNvZGVBdCgwKT09PTQ3JiYoRC5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZELnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fEQucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmRC5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJkQucGF0aC5jaGFyQ29kZUF0KDIpPT09NTg/az9ELnBhdGguc3Vic3RyKDEpOkQucGF0aFsxXS50b0xvd2VyQ2FzZSgpK0QucGF0aC5zdWJzdHIoMik6RC5wYXRoLGkmJihSPVIucmVwbGFjZSgvXC8vZywiXFwiKSksUn1vKGIsIm0iKTtmdW5jdGlvbiB3KEQsayl7bGV0IFI9az94OnYsUz0iIix7c2NoZW1lOk8sYXV0aG9yaXR5Ok4scGF0aDpQLHF1ZXJ5OkYsZnJhZ21lbnQ6Qn09RDtpZihPJiYoUys9TyxTKz0iOiIpLChOfHxPPT09ImZpbGUiKSYmKFMrPWYsUys9ZiksTil7bGV0ICQ9Ti5pbmRleE9mKCJAIik7aWYoJCE9PS0xKXtsZXQgej1OLnN1YnN0cigwLCQpO049Ti5zdWJzdHIoJCsxKSwkPXoubGFzdEluZGV4T2YoIjoiKSwkPT09LTE/Uys9Uih6LCExLCExKTooUys9Uih6LnN1YnN0cigwLCQpLCExLCExKSxTKz0iOiIsUys9Uih6LnN1YnN0cigkKzEpLCExLCEwKSksUys9IkAifU49Ti50b0xvd2VyQ2FzZSgpLCQ9Ti5sYXN0SW5kZXhPZigiOiIpLCQ9PT0tMT9TKz1SKE4sITEsITApOihTKz1SKE4uc3Vic3RyKDAsJCksITEsITApLFMrPU4uc3Vic3RyKCQpKX1pZihQKXtpZihQLmxlbmd0aD49MyYmUC5jaGFyQ29kZUF0KDApPT09NDcmJlAuY2hhckNvZGVBdCgyKT09PTU4KXtsZXQgJD1QLmNoYXJDb2RlQXQoMSk7JD49NjUmJiQ8PTkwJiYoUD1gLyR7U3RyaW5nLmZyb21DaGFyQ29kZSgkKzMyKX06JHtQLnN1YnN0cigzKX1gKX1lbHNlIGlmKFAubGVuZ3RoPj0yJiZQLmNoYXJDb2RlQXQoMSk9PT01OCl7bGV0ICQ9UC5jaGFyQ29kZUF0KDApOyQ+PTY1JiYkPD05MCYmKFA9YCR7U3RyaW5nLmZyb21DaGFyQ29kZSgkKzMyKX06JHtQLnN1YnN0cigyKX1gKX1TKz1SKFAsITAsITEpfXJldHVybiBGJiYoUys9Ij8iLFMrPVIoRiwhMSwhMSkpLEImJihTKz0iIyIsUys9az9COnYoQiwhMSwhMSkpLFN9byh3LCJ5Iik7ZnVuY3Rpb24gXyhEKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChEKX1jYXRjaHtyZXR1cm4gRC5sZW5ndGg+Mz9ELnN1YnN0cigwLDMpK18oRC5zdWJzdHIoMykpOkR9fW8oXywidiIpO2xldCBUPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIEUoRCl7cmV0dXJuIEQubWF0Y2goVCk/RC5yZXBsYWNlKFQsaz0+XyhrKSk6RH1vKEUsIkMiKTt2YXIgTD1yKDQ3MCk7bGV0IEM9TC5wb3NpeHx8TCxBPSIvIjt2YXIgSTsoZnVuY3Rpb24oRCl7RC5qb2luUGF0aD1mdW5jdGlvbihrLC4uLlIpe3JldHVybiBrLndpdGgoe3BhdGg6Qy5qb2luKGsucGF0aCwuLi5SKX0pfSxELnJlc29sdmVQYXRoPWZ1bmN0aW9uKGssLi4uUil7bGV0IFM9ay5wYXRoLE89ITE7U1swXSE9PUEmJihTPUErUyxPPSEwKTtsZXQgTj1DLnJlc29sdmUoUywuLi5SKTtyZXR1cm4gTyYmTlswXT09PUEmJiFrLmF1dGhvcml0eSYmKE49Ti5zdWJzdHJpbmcoMSkpLGsud2l0aCh7cGF0aDpOfSl9LEQuZGlybmFtZT1mdW5jdGlvbihrKXtpZihrLnBhdGgubGVuZ3RoPT09MHx8ay5wYXRoPT09QSlyZXR1cm4gaztsZXQgUj1DLmRpcm5hbWUoay5wYXRoKTtyZXR1cm4gUi5sZW5ndGg9PT0xJiZSLmNoYXJDb2RlQXQoMCk9PT00NiYmKFI9IiIpLGsud2l0aCh7cGF0aDpSfSl9LEQuYmFzZW5hbWU9ZnVuY3Rpb24oayl7cmV0dXJuIEMuYmFzZW5hbWUoay5wYXRoKX0sRC5leHRuYW1lPWZ1bmN0aW9uKGspe3JldHVybiBDLmV4dG5hbWUoay5wYXRoKX19KShJfHwoST17fSkpfSkoKSxnY2U9bn0pKCk7KHtVUkk6T3MsVXRpbHM6a2d9PWdjZSl9KTt2YXIgc3MsTWM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNTSgpOyhmdW5jdGlvbih0KXt0LmJhc2VuYW1lPWtnLmJhc2VuYW1lLHQuZGlybmFtZT1rZy5kaXJuYW1lLHQuZXh0bmFtZT1rZy5leHRuYW1lLHQuam9pblBhdGg9a2cuam9pblBhdGgsdC5yZXNvbHZlUGF0aD1rZy5yZXNvbHZlUGF0aDtmdW5jdGlvbiBlKG4saSl7cmV0dXJuIG4/LnRvU3RyaW5nKCk9PT1pPy50b1N0cmluZygpfW8oZSwiZXF1YWxzIiksdC5lcXVhbHM9ZTtmdW5jdGlvbiByKG4saSl7bGV0IGE9dHlwZW9mIG49PSJzdHJpbmciP246bi5wYXRoLHM9dHlwZW9mIGk9PSJzdHJpbmciP2k6aS5wYXRoLGw9YS5zcGxpdCgiLyIpLmZpbHRlcihwPT5wLmxlbmd0aD4wKSx1PXMuc3BsaXQoIi8iKS5maWx0ZXIocD0+cC5sZW5ndGg+MCksaD0wO2Zvcig7aDxsLmxlbmd0aCYmbFtoXT09PXVbaF07aCsrKTtsZXQgZj0iLi4vIi5yZXBlYXQobC5sZW5ndGgtaCksZD11LnNsaWNlKGgpLmpvaW4oIi8iKTtyZXR1cm4gZitkfW8ociwicmVsYXRpdmUiKSx0LnJlbGF0aXZlPXJ9KShzc3x8KHNzPXt9KSl9KTt2YXIgYm4sUjIsTTIsRWc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttY2UoKTtFZygpO0tvKCk7UnMoKTtNYygpOyhmdW5jdGlvbih0KXt0W3QuQ2hhbmdlZD0wXT0iQ2hhbmdlZCIsdFt0LlBhcnNlZD0xXT0iUGFyc2VkIix0W3QuSW5kZXhlZENvbnRlbnQ9Ml09IkluZGV4ZWRDb250ZW50Iix0W3QuQ29tcHV0ZWRTY29wZXM9M109IkNvbXB1dGVkU2NvcGVzIix0W3QuTGlua2VkPTRdPSJMaW5rZWQiLHRbdC5JbmRleGVkUmVmZXJlbmNlcz01XT0iSW5kZXhlZFJlZmVyZW5jZXMiLHRbdC5WYWxpZGF0ZWQ9Nl09IlZhbGlkYXRlZCJ9KShibnx8KGJuPXt9KSk7UjI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdExhbmdpdW1Eb2N1bWVudEZhY3RvcnkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeSx0aGlzLnRleHREb2N1bWVudHM9ZS53b3Jrc3BhY2UuVGV4dERvY3VtZW50cyx0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlcj1lLndvcmtzcGFjZS5GaWxlU3lzdGVtUHJvdmlkZXJ9YXN5bmMgZnJvbVVyaShlLHI9Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49YXdhaXQgdGhpcy5maWxlU3lzdGVtUHJvdmlkZXIucmVhZEZpbGUoZSk7cmV0dXJuIHRoaXMuY3JlYXRlQXN5bmMoZSxuLHIpfWZyb21UZXh0RG9jdW1lbnQoZSxyLG4pe3JldHVybiByPXI/P09zLnBhcnNlKGUudXJpKSxuP3RoaXMuY3JlYXRlQXN5bmMocixlLG4pOnRoaXMuY3JlYXRlKHIsZSl9ZnJvbVN0cmluZyhlLHIsbil7cmV0dXJuIG4/dGhpcy5jcmVhdGVBc3luYyhyLGUsbik6dGhpcy5jcmVhdGUocixlKX1mcm9tTW9kZWwoZSxyKXtyZXR1cm4gdGhpcy5jcmVhdGUocix7JG1vZGVsOmV9KX1jcmVhdGUoZSxyKXtpZih0eXBlb2Ygcj09InN0cmluZyIpe2xldCBuPXRoaXMucGFyc2UoZSxyKTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQobixlLHZvaWQgMCxyKX1lbHNlIGlmKCIkbW9kZWwiaW4gcil7bGV0IG49e3ZhbHVlOnIuJG1vZGVsLHBhcnNlckVycm9yczpbXSxsZXhlckVycm9yczpbXX07cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KG4sZSl9ZWxzZXtsZXQgbj10aGlzLnBhcnNlKGUsci5nZXRUZXh0KCkpO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChuLGUscil9fWFzeW5jIGNyZWF0ZUFzeW5jKGUscixuKXtpZih0eXBlb2Ygcj09InN0cmluZyIpe2xldCBpPWF3YWl0IHRoaXMucGFyc2VBc3luYyhlLHIsbik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KGksZSx2b2lkIDAscil9ZWxzZXtsZXQgaT1hd2FpdCB0aGlzLnBhcnNlQXN5bmMoZSxyLmdldFRleHQoKSxuKTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQoaSxlLHIpfX1jcmVhdGVMYW5naXVtRG9jdW1lbnQoZSxyLG4saSl7bGV0IGE7aWYobilhPXtwYXJzZVJlc3VsdDplLHVyaTpyLHN0YXRlOmJuLlBhcnNlZCxyZWZlcmVuY2VzOltdLHRleHREb2N1bWVudDpufTtlbHNle2xldCBzPXRoaXMuY3JlYXRlVGV4dERvY3VtZW50R2V0dGVyKHIsaSk7YT17cGFyc2VSZXN1bHQ6ZSx1cmk6cixzdGF0ZTpibi5QYXJzZWQscmVmZXJlbmNlczpbXSxnZXQgdGV4dERvY3VtZW50KCl7cmV0dXJuIHMoKX19fXJldHVybiBlLnZhbHVlLiRkb2N1bWVudD1hLGF9YXN5bmMgdXBkYXRlKGUscil7dmFyIG4saTtsZXQgYT0obj1lLnBhcnNlUmVzdWx0LnZhbHVlLiRjc3ROb2RlKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ucm9vdC5mdWxsVGV4dCxzPShpPXRoaXMudGV4dERvY3VtZW50cyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmdldChlLnVyaS50b1N0cmluZygpKSxsPXM/cy5nZXRUZXh0KCk6YXdhaXQgdGhpcy5maWxlU3lzdGVtUHJvdmlkZXIucmVhZEZpbGUoZS51cmkpO2lmKHMpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInRleHREb2N1bWVudCIse3ZhbHVlOnN9KTtlbHNle2xldCB1PXRoaXMuY3JlYXRlVGV4dERvY3VtZW50R2V0dGVyKGUudXJpLGwpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0ZXh0RG9jdW1lbnQiLHtnZXQ6dX0pfXJldHVybiBhIT09bCYmKGUucGFyc2VSZXN1bHQ9YXdhaXQgdGhpcy5wYXJzZUFzeW5jKGUudXJpLGwsciksZS5wYXJzZVJlc3VsdC52YWx1ZS4kZG9jdW1lbnQ9ZSksZS5zdGF0ZT1ibi5QYXJzZWQsZX1wYXJzZShlLHIpe3JldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5wYXJzZXIuTGFuZ2l1bVBhcnNlci5wYXJzZShyKX1wYXJzZUFzeW5jKGUscixuKXtyZXR1cm4gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZSkucGFyc2VyLkFzeW5jUGFyc2VyLnBhcnNlKHIsbil9Y3JlYXRlVGV4dERvY3VtZW50R2V0dGVyKGUscil7bGV0IG49dGhpcy5zZXJ2aWNlUmVnaXN0cnksaTtyZXR1cm4oKT0+aT8/KGk9VGcuY3JlYXRlKGUudG9TdHJpbmcoKSxuLmdldFNlcnZpY2VzKGUpLkxhbmd1YWdlTWV0YURhdGEubGFuZ3VhZ2VJZCwwLHI/PyIiKSl9fSxNMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGFuZ2l1bURvY3VtZW50cyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZG9jdW1lbnRNYXA9bmV3IE1hcCx0aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3Rvcnk9ZS53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50RmFjdG9yeX1nZXQgYWxsKCl7cmV0dXJuIHRuKHRoaXMuZG9jdW1lbnRNYXAudmFsdWVzKCkpfWFkZERvY3VtZW50KGUpe2xldCByPWUudXJpLnRvU3RyaW5nKCk7aWYodGhpcy5kb2N1bWVudE1hcC5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBBIGRvY3VtZW50IHdpdGggdGhlIFVSSSAnJHtyfScgaXMgYWxyZWFkeSBwcmVzZW50LmApO3RoaXMuZG9jdW1lbnRNYXAuc2V0KHIsZSl9Z2V0RG9jdW1lbnQoZSl7bGV0IHI9ZS50b1N0cmluZygpO3JldHVybiB0aGlzLmRvY3VtZW50TWFwLmdldChyKX1hc3luYyBnZXRPckNyZWF0ZURvY3VtZW50KGUscil7bGV0IG49dGhpcy5nZXREb2N1bWVudChlKTtyZXR1cm4gbnx8KG49YXdhaXQgdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21VcmkoZSxyKSx0aGlzLmFkZERvY3VtZW50KG4pLG4pfWNyZWF0ZURvY3VtZW50KGUscixuKXtpZihuKXJldHVybiB0aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbVN0cmluZyhyLGUsbikudGhlbihpPT4odGhpcy5hZGREb2N1bWVudChpKSxpKSk7e2xldCBpPXRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tU3RyaW5nKHIsZSk7cmV0dXJuIHRoaXMuYWRkRG9jdW1lbnQoaSksaX19aGFzRG9jdW1lbnQoZSl7cmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuaGFzKGUudG9TdHJpbmcoKSl9aW52YWxpZGF0ZURvY3VtZW50KGUpe2xldCByPWUudG9TdHJpbmcoKSxuPXRoaXMuZG9jdW1lbnRNYXAuZ2V0KHIpO3JldHVybiBuJiYobi5zdGF0ZT1ibi5DaGFuZ2VkLG4ucHJlY29tcHV0ZWRTY29wZXM9dm9pZCAwLG4ucmVmZXJlbmNlcz1bXSxuLmRpYWdub3N0aWNzPXZvaWQgMCksbn1kZWxldGVEb2N1bWVudChlKXtsZXQgcj1lLnRvU3RyaW5nKCksbj10aGlzLmRvY3VtZW50TWFwLmdldChyKTtyZXR1cm4gbiYmKG4uc3RhdGU9Ym4uQ2hhbmdlZCx0aGlzLmRvY3VtZW50TWFwLmRlbGV0ZShyKSksbn19fSk7dmFyIEkyLElNPU0oKCk9PnsidXNlIHN0cmljdCI7S28oKTtZbygpO2VzKCk7UW8oKTtFZygpO0kyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMaW5rZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbix0aGlzLmxhbmdpdW1Eb2N1bWVudHM9KCk9PmUuc2hhcmVkLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMuc2NvcGVQcm92aWRlcj1lLnJlZmVyZW5jZXMuU2NvcGVQcm92aWRlcix0aGlzLmFzdE5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yfWFzeW5jIGxpbmsoZSxyPUNyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2ZvcihsZXQgbiBvZiBqbyhlLnBhcnNlUmVzdWx0LnZhbHVlKSlhd2FpdCBHaShyKSxVbShuKS5mb3JFYWNoKGk9PnRoaXMuZG9MaW5rKGksZSkpfWRvTGluayhlLHIpe2xldCBuPWUucmVmZXJlbmNlO2lmKG4uX3JlZj09PXZvaWQgMCl0cnl7bGV0IGk9dGhpcy5nZXRDYW5kaWRhdGUoZSk7aWYoVmQoaSkpbi5fcmVmPWk7ZWxzZSBpZihuLl9ub2RlRGVzY3JpcHRpb249aSx0aGlzLmxhbmdpdW1Eb2N1bWVudHMoKS5oYXNEb2N1bWVudChpLmRvY3VtZW50VXJpKSl7bGV0IGE9dGhpcy5sb2FkQXN0Tm9kZShpKTtuLl9yZWY9YT8/dGhpcy5jcmVhdGVMaW5raW5nRXJyb3IoZSxpKX19Y2F0Y2goaSl7bi5fcmVmPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWVzc2FnZTpgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzb2x2aW5nIHJlZmVyZW5jZSB0byAnJHtuLiRyZWZUZXh0fSc6ICR7aX1gfSl9ci5yZWZlcmVuY2VzLnB1c2gobil9dW5saW5rKGUpe2ZvcihsZXQgciBvZiBlLnJlZmVyZW5jZXMpZGVsZXRlIHIuX3JlZixkZWxldGUgci5fbm9kZURlc2NyaXB0aW9uO2UucmVmZXJlbmNlcz1bXX1nZXRDYW5kaWRhdGUoZSl7bGV0IG49dGhpcy5zY29wZVByb3ZpZGVyLmdldFNjb3BlKGUpLmdldEVsZW1lbnQoZS5yZWZlcmVuY2UuJHJlZlRleHQpO3JldHVybiBuPz90aGlzLmNyZWF0ZUxpbmtpbmdFcnJvcihlKX1idWlsZFJlZmVyZW5jZShlLHIsbixpKXtsZXQgYT10aGlzLHM9eyRyZWZOb2RlOm4sJHJlZlRleHQ6aSxnZXQgcmVmKCl7dmFyIGw7aWYoZWkodGhpcy5fcmVmKSlyZXR1cm4gdGhpcy5fcmVmO2lmKE1EKHRoaXMuX25vZGVEZXNjcmlwdGlvbikpe2xldCB1PWEubG9hZEFzdE5vZGUodGhpcy5fbm9kZURlc2NyaXB0aW9uKTt0aGlzLl9yZWY9dT8/YS5jcmVhdGVMaW5raW5nRXJyb3Ioe3JlZmVyZW5jZTpzLGNvbnRhaW5lcjplLHByb3BlcnR5OnJ9LHRoaXMuX25vZGVEZXNjcmlwdGlvbil9ZWxzZSBpZih0aGlzLl9yZWY9PT12b2lkIDApe2xldCB1PWEuZ2V0TGlua2VkTm9kZSh7cmVmZXJlbmNlOnMsY29udGFpbmVyOmUscHJvcGVydHk6cn0pO2lmKHUuZXJyb3ImJkZpKGUpLnN0YXRlPGJuLkNvbXB1dGVkU2NvcGVzKXJldHVybjt0aGlzLl9yZWY9KGw9dS5ub2RlKSE9PW51bGwmJmwhPT12b2lkIDA/bDp1LmVycm9yLHRoaXMuX25vZGVEZXNjcmlwdGlvbj11LmRlc2NyfXJldHVybiBlaSh0aGlzLl9yZWYpP3RoaXMuX3JlZjp2b2lkIDB9LGdldCAkbm9kZURlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGVEZXNjcmlwdGlvbn0sZ2V0IGVycm9yKCl7cmV0dXJuIFZkKHRoaXMuX3JlZik/dGhpcy5fcmVmOnZvaWQgMH19O3JldHVybiBzfWdldExpbmtlZE5vZGUoZSl7dHJ5e2xldCByPXRoaXMuZ2V0Q2FuZGlkYXRlKGUpO2lmKFZkKHIpKXJldHVybntlcnJvcjpyfTtsZXQgbj10aGlzLmxvYWRBc3ROb2RlKHIpO3JldHVybiBuP3tub2RlOm4sZGVzY3I6cn06e2Rlc2NyOnIsZXJyb3I6dGhpcy5jcmVhdGVMaW5raW5nRXJyb3IoZSxyKX19Y2F0Y2gocil7cmV0dXJue2Vycm9yOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWVzc2FnZTpgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzb2x2aW5nIHJlZmVyZW5jZSB0byAnJHtlLnJlZmVyZW5jZS4kcmVmVGV4dH0nOiAke3J9YH0pfX19bG9hZEFzdE5vZGUoZSl7aWYoZS5ub2RlKXJldHVybiBlLm5vZGU7bGV0IHI9dGhpcy5sYW5naXVtRG9jdW1lbnRzKCkuZ2V0RG9jdW1lbnQoZS5kb2N1bWVudFVyaSk7aWYocilyZXR1cm4gdGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlKHIucGFyc2VSZXN1bHQudmFsdWUsZS5wYXRoKX1jcmVhdGVMaW5raW5nRXJyb3IoZSxyKXtsZXQgbj1GaShlLmNvbnRhaW5lcik7bi5zdGF0ZTxibi5Db21wdXRlZFNjb3BlcyYmY29uc29sZS53YXJuKGBBdHRlbXB0ZWQgcmVmZXJlbmNlIHJlc29sdXRpb24gYmVmb3JlIGRvY3VtZW50IHJlYWNoZWQgQ29tcHV0ZWRTY29wZXMgc3RhdGUgKCR7bi51cml9KS5gKTtsZXQgaT10aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShlKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlOmBDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gJHtpfSBuYW1lZCAnJHtlLnJlZmVyZW5jZS4kcmVmVGV4dH0nLmAsdGFyZ2V0RGVzY3JpcHRpb246cn0pfX19KTtmdW5jdGlvbiB5Y2UodCl7cmV0dXJuIHR5cGVvZiB0Lm5hbWU9PSJzdHJpbmcifXZhciBPMixPTT1NKCgpPT57InVzZSBzdHJpY3QiO1BsKCk7byh5Y2UsImlzTmFtZWQiKTtPMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TmFtZVByb3ZpZGVyIil9Z2V0TmFtZShlKXtpZih5Y2UoZSkpcmV0dXJuIGUubmFtZX1nZXROYW1lTm9kZShlKXtyZXR1cm4gSnYoZS4kY3N0Tm9kZSwibmFtZSIpfX19KTt2YXIgUDIsUE09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQbCgpO1lvKCk7ZXMoKTtNbCgpO1JzKCk7TWMoKTtQMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0UmVmZXJlbmNlcyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5pbmRleD1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMubm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3J9ZmluZERlY2xhcmF0aW9uKGUpe2lmKGUpe2xldCByPWlSKGUpLG49ZS5hc3ROb2RlO2lmKHImJm4pe2xldCBpPW5bci5mZWF0dXJlXTtpZihtYShpKSlyZXR1cm4gaS5yZWY7aWYoQXJyYXkuaXNBcnJheShpKSl7Zm9yKGxldCBhIG9mIGkpaWYobWEoYSkmJmEuJHJlZk5vZGUmJmEuJHJlZk5vZGUub2Zmc2V0PD1lLm9mZnNldCYmYS4kcmVmTm9kZS5lbmQ+PWUuZW5kKXJldHVybiBhLnJlZn19aWYobil7bGV0IGk9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUobik7aWYoaSYmKGk9PT1lfHxPRChlLGkpKSlyZXR1cm4gbn19fWZpbmREZWNsYXJhdGlvbk5vZGUoZSl7bGV0IHI9dGhpcy5maW5kRGVjbGFyYXRpb24oZSk7aWYocj8uJGNzdE5vZGUpe2xldCBuPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKHIpO3JldHVybiBuPz9yLiRjc3ROb2RlfX1maW5kUmVmZXJlbmNlcyhlLHIpe2xldCBuPVtdO2lmKHIuaW5jbHVkZURlY2xhcmF0aW9uKXtsZXQgYT10aGlzLmdldFJlZmVyZW5jZVRvU2VsZihlKTthJiZuLnB1c2goYSl9bGV0IGk9dGhpcy5pbmRleC5maW5kQWxsUmVmZXJlbmNlcyhlLHRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSkpO3JldHVybiByLmRvY3VtZW50VXJpJiYoaT1pLmZpbHRlcihhPT5zcy5lcXVhbHMoYS5zb3VyY2VVcmksci5kb2N1bWVudFVyaSkpKSxuLnB1c2goLi4uaSksdG4obil9Z2V0UmVmZXJlbmNlVG9TZWxmKGUpe2xldCByPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKGUpO2lmKHIpe2xldCBuPUZpKGUpLGk9dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtyZXR1cm57c291cmNlVXJpOm4udXJpLHNvdXJjZVBhdGg6aSx0YXJnZXRVcmk6bi51cmksdGFyZ2V0UGF0aDppLHNlZ21lbnQ6SGQociksbG9jYWw6ITB9fX19fSk7dmFyIEljLHAwLFNnPU0oKCk9PnsidXNlIHN0cmljdCI7UnMoKTtJYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNdWx0aU1hcCIpfWNvbnN0cnVjdG9yKGUpe2lmKHRoaXMubWFwPW5ldyBNYXAsZSlmb3IobGV0W3Isbl1vZiBlKXRoaXMuYWRkKHIsbil9Z2V0IHNpemUoKXtyZXR1cm4gR20uc3VtKHRuKHRoaXMubWFwLnZhbHVlcygpKS5tYXAoZT0+ZS5sZW5ndGgpKX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9ZGVsZXRlKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7aWYobil7bGV0IGk9bi5pbmRleE9mKHIpO2lmKGk+PTApcmV0dXJuIG4ubGVuZ3RoPT09MT90aGlzLm1hcC5kZWxldGUoZSk6bi5zcGxpY2UoaSwxKSwhMH1yZXR1cm4hMX19Z2V0KGUpe3ZhciByO3JldHVybihyPXRoaXMubWFwLmdldChlKSkhPT1udWxsJiZyIT09dm9pZCAwP3I6W119aGFzKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuaGFzKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIG4/bi5pbmRleE9mKHIpPj0wOiExfX1hZGQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKHIpOnRoaXMubWFwLnNldChlLFtyXSksdGhpc31hZGRBbGwoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKC4uLnIpOnRoaXMubWFwLnNldChlLEFycmF5LmZyb20ocikpLHRoaXN9Zm9yRWFjaChlKXt0aGlzLm1hcC5mb3JFYWNoKChyLG4pPT5yLmZvckVhY2goaT0+ZShpLG4sdGhpcykpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKS5pdGVyYXRvcigpfWVudHJpZXMoKXtyZXR1cm4gdG4odGhpcy5tYXAuZW50cmllcygpKS5mbGF0TWFwKChbZSxyXSk9PnIubWFwKG49PltlLG5dKSl9a2V5cygpe3JldHVybiB0bih0aGlzLm1hcC5rZXlzKCkpfXZhbHVlcygpe3JldHVybiB0bih0aGlzLm1hcC52YWx1ZXMoKSkuZmxhdCgpfWVudHJpZXNHcm91cGVkQnlLZXkoKXtyZXR1cm4gdG4odGhpcy5tYXAuZW50cmllcygpKX19LHAwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkJpTWFwIil9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5tYXAuc2l6ZX1jb25zdHJ1Y3RvcihlKXtpZih0aGlzLm1hcD1uZXcgTWFwLHRoaXMuaW52ZXJzZT1uZXcgTWFwLGUpZm9yKGxldFtyLG5db2YgZSl0aGlzLnNldChyLG4pfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKSx0aGlzLmludmVyc2UuY2xlYXIoKX1zZXQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuc2V0KGUsciksdGhpcy5pbnZlcnNlLnNldChyLGUpLHRoaXN9Z2V0KGUpe3JldHVybiB0aGlzLm1hcC5nZXQoZSl9Z2V0S2V5KGUpe3JldHVybiB0aGlzLmludmVyc2UuZ2V0KGUpfWRlbGV0ZShlKXtsZXQgcj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIHIhPT12b2lkIDA/KHRoaXMubWFwLmRlbGV0ZShlKSx0aGlzLmludmVyc2UuZGVsZXRlKHIpLCEwKTohMX19fSk7dmFyIEIyLEJNPU0oKCk9PnsidXNlIHN0cmljdCI7S28oKTtlcygpO1NnKCk7UW8oKTtCMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5kZXNjcmlwdGlvbnM9ZS53b3Jrc3BhY2UuQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXJ9YXN5bmMgY29tcHV0ZUV4cG9ydHMoZSxyPUNyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3JldHVybiB0aGlzLmNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLnBhcnNlUmVzdWx0LnZhbHVlLGUsdm9pZCAwLHIpfWFzeW5jIGNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLHIsbj1xdixpPUNyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBhPVtdO3RoaXMuZXhwb3J0Tm9kZShlLGEscik7Zm9yKGxldCBzIG9mIG4oZSkpYXdhaXQgR2koaSksdGhpcy5leHBvcnROb2RlKHMsYSxyKTtyZXR1cm4gYX1leHBvcnROb2RlKGUscixuKXtsZXQgaT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2kmJnIucHVzaCh0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihlLGksbikpfWFzeW5jIGNvbXB1dGVMb2NhbFNjb3BlcyhlLHI9Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49ZS5wYXJzZVJlc3VsdC52YWx1ZSxpPW5ldyBJYztmb3IobGV0IGEgb2YgX2MobikpYXdhaXQgR2kociksdGhpcy5wcm9jZXNzTm9kZShhLGUsaSk7cmV0dXJuIGl9cHJvY2Vzc05vZGUoZSxyLG4pe2xldCBpPWUuJGNvbnRhaW5lcjtpZihpKXtsZXQgYT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2EmJm4uYWRkKGksdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSxhLHIpKX19fX0pO3ZhciBDZyxGMixQemUsRk09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtScygpO0NnPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0cmVhbVNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9ZSx0aGlzLm91dGVyU2NvcGU9cix0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExfWdldEFsbEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMub3V0ZXJTY29wZT90aGlzLmVsZW1lbnRzLmNvbmNhdCh0aGlzLm91dGVyU2NvcGUuZ2V0QWxsRWxlbWVudHMoKSk6dGhpcy5lbGVtZW50c31nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP3RoaXMuZWxlbWVudHMuZmluZChuPT5uLm5hbWUudG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKSk6dGhpcy5lbGVtZW50cy5maW5kKG49Pm4ubmFtZT09PWUpO2lmKHIpcmV0dXJuIHI7aWYodGhpcy5vdXRlclNjb3BlKXJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChlKX19LEYyPWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hcFNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9bmV3IE1hcCx0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz10aGlzLmNhc2VJbnNlbnNpdGl2ZT9hLm5hbWUudG9Mb3dlckNhc2UoKTphLm5hbWU7dGhpcy5lbGVtZW50cy5zZXQocyxhKX10aGlzLm91dGVyU2NvcGU9cn1nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP2UudG9Mb3dlckNhc2UoKTplLG49dGhpcy5lbGVtZW50cy5nZXQocik7aWYobilyZXR1cm4gbjtpZih0aGlzLm91dGVyU2NvcGUpcmV0dXJuIHRoaXMub3V0ZXJTY29wZS5nZXRFbGVtZW50KGUpfWdldEFsbEVsZW1lbnRzKCl7bGV0IGU9dG4odGhpcy5lbGVtZW50cy52YWx1ZXMoKSk7cmV0dXJuIHRoaXMub3V0ZXJTY29wZSYmKGU9ZS5jb25jYXQodGhpcy5vdXRlclNjb3BlLmdldEFsbEVsZW1lbnRzKCkpKSxlfX0sUHplPXtnZXRFbGVtZW50KCl7fSxnZXRBbGxFbGVtZW50cygpe3JldHVybiAkdn19fSk7dmFyIEFnLHoyLG0wLE9rLF9nLFBrPU0oKCk9PnsidXNlIHN0cmljdCI7QWc9Y2xhc3N7c3RhdGlje28odGhpcywiRGlzcG9zYWJsZUNhY2hlIil9Y29uc3RydWN0b3IoKXt0aGlzLnRvRGlzcG9zZT1bXSx0aGlzLmlzRGlzcG9zZWQ9ITF9b25EaXNwb3NlKGUpe3RoaXMudG9EaXNwb3NlLnB1c2goZSl9ZGlzcG9zZSgpe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jbGVhcigpLHRoaXMuaXNEaXNwb3NlZD0hMCx0aGlzLnRvRGlzcG9zZS5mb3JFYWNoKGU9PmUuZGlzcG9zZSgpKX10aHJvd0lmRGlzcG9zZWQoKXtpZih0aGlzLmlzRGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGNhY2hlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX19LHoyPWNsYXNzIGV4dGVuZHMgQWd7c3RhdGlje28odGhpcywiU2ltcGxlQ2FjaGUiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYWNoZT1uZXcgTWFwfWhhcyhlKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKX1zZXQoZSxyKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuc2V0KGUscil9Z2V0KGUscil7aWYodGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKSlyZXR1cm4gdGhpcy5jYWNoZS5nZXQoZSk7aWYocil7bGV0IG49cigpO3JldHVybiB0aGlzLmNhY2hlLnNldChlLG4pLG59ZWxzZSByZXR1cm59ZGVsZXRlKGUpe3JldHVybiB0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuZGVsZXRlKGUpfWNsZWFyKCl7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmNsZWFyKCl9fSxtMD1jbGFzcyBleHRlbmRzIEFne3N0YXRpY3tvKHRoaXMsIkNvbnRleHRDYWNoZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMuY29udmVydGVyPWU/PyhyPT5yKX1oYXMoZSxyKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlRm9yQ29udGV4dChlKS5oYXMocil9c2V0KGUscixuKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGVGb3JDb250ZXh0KGUpLnNldChyLG4pfWdldChlLHIsbil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKTtsZXQgaT10aGlzLmNhY2hlRm9yQ29udGV4dChlKTtpZihpLmhhcyhyKSlyZXR1cm4gaS5nZXQocik7aWYobil7bGV0IGE9bigpO3JldHVybiBpLnNldChyLGEpLGF9ZWxzZSByZXR1cm59ZGVsZXRlKGUscil7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZUZvckNvbnRleHQoZSkuZGVsZXRlKHIpfWNsZWFyKGUpe2lmKHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksZSl7bGV0IHI9dGhpcy5jb252ZXJ0ZXIoZSk7dGhpcy5jYWNoZS5kZWxldGUocil9ZWxzZSB0aGlzLmNhY2hlLmNsZWFyKCl9Y2FjaGVGb3JDb250ZXh0KGUpe2xldCByPXRoaXMuY29udmVydGVyKGUpLG49dGhpcy5jYWNoZS5nZXQocik7cmV0dXJuIG58fChuPW5ldyBNYXAsdGhpcy5jYWNoZS5zZXQocixuKSksbn19LE9rPWNsYXNzIGV4dGVuZHMgbTB7c3RhdGlje28odGhpcywiRG9jdW1lbnRDYWNoZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKHI9PnIudG9TdHJpbmcoKSksdGhpcy5vbkRpc3Bvc2UoZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKChyLG4pPT57bGV0IGk9ci5jb25jYXQobik7Zm9yKGxldCBhIG9mIGkpdGhpcy5jbGVhcihhKX0pKX19LF9nPWNsYXNzIGV4dGVuZHMgejJ7c3RhdGlje28odGhpcywiV29ya3NwYWNlQ2FjaGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub25EaXNwb3NlKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vblVwZGF0ZSgoKT0+e3RoaXMuY2xlYXIoKX0pKX19fSk7dmFyIEcyLHpNPU0oKCk9PnsidXNlIHN0cmljdCI7Rk0oKTtlcygpO1JzKCk7UGsoKTtHMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0U2NvcGVQcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMucmVmbGVjdGlvbj1lLnNoYXJlZC5Bc3RSZWZsZWN0aW9uLHRoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5kZXNjcmlwdGlvbnM9ZS53b3Jrc3BhY2UuQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXIsdGhpcy5pbmRleE1hbmFnZXI9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLmdsb2JhbFNjb3BlQ2FjaGU9bmV3IF9nKGUuc2hhcmVkKX1nZXRTY29wZShlKXtsZXQgcj1bXSxuPXRoaXMucmVmbGVjdGlvbi5nZXRSZWZlcmVuY2VUeXBlKGUpLGk9RmkoZS5jb250YWluZXIpLnByZWNvbXB1dGVkU2NvcGVzO2lmKGkpe2xldCBzPWUuY29udGFpbmVyO2Rve2xldCBsPWkuZ2V0KHMpO2wubGVuZ3RoPjAmJnIucHVzaCh0bihsKS5maWx0ZXIodT0+dGhpcy5yZWZsZWN0aW9uLmlzU3VidHlwZSh1LnR5cGUsbikpKSxzPXMuJGNvbnRhaW5lcn13aGlsZShzKX1sZXQgYT10aGlzLmdldEdsb2JhbFNjb3BlKG4sZSk7Zm9yKGxldCBzPXIubGVuZ3RoLTE7cz49MDtzLS0pYT10aGlzLmNyZWF0ZVNjb3BlKHJbc10sYSk7cmV0dXJuIGF9Y3JlYXRlU2NvcGUoZSxyLG4pe3JldHVybiBuZXcgQ2codG4oZSkscixuKX1jcmVhdGVTY29wZUZvck5vZGVzKGUscixuKXtsZXQgaT10bihlKS5tYXAoYT0+e2xldCBzPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWUoYSk7aWYocylyZXR1cm4gdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oYSxzKX0pLm5vbk51bGxhYmxlKCk7cmV0dXJuIG5ldyBDZyhpLHIsbil9Z2V0R2xvYmFsU2NvcGUoZSxyKXtyZXR1cm4gdGhpcy5nbG9iYWxTY29wZUNhY2hlLmdldChlLCgpPT5uZXcgRjIodGhpcy5pbmRleE1hbmFnZXIuYWxsRWxlbWVudHMoZSkpKX19fSk7ZnVuY3Rpb24gR00odCl7cmV0dXJuIHR5cGVvZiB0LiRjb21tZW50PT0ic3RyaW5nIn1mdW5jdGlvbiB2Y2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmISF0JiYoIiRyZWYiaW4gdHx8IiRlcnJvciJpbiB0KX12YXIgJDIsQms9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNTSgpO1lvKCk7ZXMoKTtQbCgpO28oR00sImlzQXN0Tm9kZVdpdGhDb21tZW50Iik7byh2Y2UsImlzSW50ZXJtZWRpYXRlUmVmZXJlbmNlIik7JDI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdEpzb25TZXJpYWxpemVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pZ25vcmVQcm9wZXJ0aWVzPW5ldyBTZXQoWyIkY29udGFpbmVyIiwiJGNvbnRhaW5lclByb3BlcnR5IiwiJGNvbnRhaW5lckluZGV4IiwiJGRvY3VtZW50IiwiJGNzdE5vZGUiXSksdGhpcy5sYW5naXVtRG9jdW1lbnRzPWUuc2hhcmVkLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3IsdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcix0aGlzLmNvbW1lbnRQcm92aWRlcj1lLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyfXNlcmlhbGl6ZShlLHI9e30pe2xldCBuPXI/LnJlcGxhY2VyLGk9bygocyxsKT0+dGhpcy5yZXBsYWNlcihzLGwsciksImRlZmF1bHRSZXBsYWNlciIpLGE9bj8ocyxsKT0+bihzLGwsaSk6aTt0cnl7cmV0dXJuIHRoaXMuY3VycmVudERvY3VtZW50PUZpKGUpLEpTT04uc3RyaW5naWZ5KGUsYSxyPy5zcGFjZSl9ZmluYWxseXt0aGlzLmN1cnJlbnREb2N1bWVudD12b2lkIDB9fWRlc2VyaWFsaXplKGUscj17fSl7bGV0IG49SlNPTi5wYXJzZShlKTtyZXR1cm4gdGhpcy5saW5rTm9kZShuLG4sciksbn1yZXBsYWNlcihlLHIse3JlZlRleHQ6bixzb3VyY2VUZXh0OmksdGV4dFJlZ2lvbnM6YSxjb21tZW50czpzLHVyaUNvbnZlcnRlcjpsfSl7dmFyIHUsaCxmLGQ7aWYoIXRoaXMuaWdub3JlUHJvcGVydGllcy5oYXMoZSkpaWYobWEocikpe2xldCBwPXIucmVmLG09bj9yLiRyZWZUZXh0OnZvaWQgMDtpZihwKXtsZXQgZz1GaShwKSx5PSIiO3RoaXMuY3VycmVudERvY3VtZW50JiZ0aGlzLmN1cnJlbnREb2N1bWVudCE9PWcmJihsP3k9bChnLnVyaSxyKTp5PWcudXJpLnRvU3RyaW5nKCkpO2xldCB2PXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocCk7cmV0dXJueyRyZWY6YCR7eX0jJHt2fWAsJHJlZlRleHQ6bX19ZWxzZSByZXR1cm57JGVycm9yOihoPSh1PXIuZXJyb3IpPT09bnVsbHx8dT09PXZvaWQgMD92b2lkIDA6dS5tZXNzYWdlKSE9PW51bGwmJmghPT12b2lkIDA/aDoiQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlIiwkcmVmVGV4dDptfX1lbHNlIGlmKGVpKHIpKXtsZXQgcDtpZihhJiYocD10aGlzLmFkZEFzdE5vZGVSZWdpb25XaXRoQXNzaWdubWVudHNUbyhPYmplY3QuYXNzaWduKHt9LHIpKSwoIWV8fHIuJGRvY3VtZW50KSYmcD8uJHRleHRSZWdpb24mJihwLiR0ZXh0UmVnaW9uLmRvY3VtZW50VVJJPShmPXRoaXMuY3VycmVudERvY3VtZW50KT09PW51bGx8fGY9PT12b2lkIDA/dm9pZCAwOmYudXJpLnRvU3RyaW5nKCkpKSxpJiYhZSYmKHA/PyhwPU9iamVjdC5hc3NpZ24oe30scikpLHAuJHNvdXJjZVRleHQ9KGQ9ci4kY3N0Tm9kZSk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLnRleHQpLHMpe3A/PyhwPU9iamVjdC5hc3NpZ24oe30scikpO2xldCBtPXRoaXMuY29tbWVudFByb3ZpZGVyLmdldENvbW1lbnQocik7bSYmKHAuJGNvbW1lbnQ9bS5yZXBsYWNlKC9cci9nLCIiKSl9cmV0dXJuIHA/P3J9ZWxzZSByZXR1cm4gcn1hZGRBc3ROb2RlUmVnaW9uV2l0aEFzc2lnbm1lbnRzVG8oZSl7bGV0IHI9byhuPT4oe29mZnNldDpuLm9mZnNldCxlbmQ6bi5lbmQsbGVuZ3RoOm4ubGVuZ3RoLHJhbmdlOm4ucmFuZ2V9KSwiY3JlYXRlRG9jdW1lbnRTZWdtZW50Iik7aWYoZS4kY3N0Tm9kZSl7bGV0IG49ZS4kdGV4dFJlZ2lvbj1yKGUuJGNzdE5vZGUpLGk9bi5hc3NpZ25tZW50cz17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKGE9PiFhLnN0YXJ0c1dpdGgoIiQiKSkuZm9yRWFjaChhPT57bGV0IHM9ZVIoZS4kY3N0Tm9kZSxhKS5tYXAocik7cy5sZW5ndGghPT0wJiYoaVthXT1zKX0pLGV9fWxpbmtOb2RlKGUscixuLGksYSxzKXtmb3IobGV0W3UsaF1vZiBPYmplY3QuZW50cmllcyhlKSlpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXtsZXQgZD1oW2ZdO3ZjZShkKT9oW2ZdPXRoaXMucmV2aXZlUmVmZXJlbmNlKGUsdSxyLGQsbik6ZWkoZCkmJnRoaXMubGlua05vZGUoZCxyLG4sZSx1LGYpfWVsc2UgdmNlKGgpP2VbdV09dGhpcy5yZXZpdmVSZWZlcmVuY2UoZSx1LHIsaCxuKTplaShoKSYmdGhpcy5saW5rTm9kZShoLHIsbixlLHUpO2xldCBsPWU7bC4kY29udGFpbmVyPWksbC4kY29udGFpbmVyUHJvcGVydHk9YSxsLiRjb250YWluZXJJbmRleD1zfXJldml2ZVJlZmVyZW5jZShlLHIsbixpLGEpe2xldCBzPWkuJHJlZlRleHQsbD1pLiRlcnJvcjtpZihpLiRyZWYpe2xldCB1PXRoaXMuZ2V0UmVmTm9kZShuLGkuJHJlZixhLnVyaUNvbnZlcnRlcik7aWYoZWkodSkpcmV0dXJuIHN8fChzPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWUodSkpLHskcmVmVGV4dDpzPz8iIixyZWY6dX07bD11fWlmKGwpe2xldCB1PXskcmVmVGV4dDpzPz8iIn07cmV0dXJuIHUuZXJyb3I9e2NvbnRhaW5lcjplLHByb3BlcnR5OnIsbWVzc2FnZTpsLHJlZmVyZW5jZTp1fSx1fWVsc2UgcmV0dXJufWdldFJlZk5vZGUoZSxyLG4pe3RyeXtsZXQgaT1yLmluZGV4T2YoIiMiKTtpZihpPT09MCl7bGV0IHU9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlKGUsci5zdWJzdHJpbmcoMSkpO3JldHVybiB1fHwiQ291bGQgbm90IHJlc29sdmUgcGF0aDogIityfWlmKGk8MCl7bGV0IHU9bj9uKHIpOk9zLnBhcnNlKHIpLGg9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHUpO3JldHVybiBoP2gucGFyc2VSZXN1bHQudmFsdWU6IkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcn1sZXQgYT1uP24oci5zdWJzdHJpbmcoMCxpKSk6T3MucGFyc2Uoci5zdWJzdHJpbmcoMCxpKSkscz10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoYSk7aWYoIXMpcmV0dXJuIkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcjtpZihpPT09ci5sZW5ndGgtMSlyZXR1cm4gcy5wYXJzZVJlc3VsdC52YWx1ZTtsZXQgbD10aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUocy5wYXJzZVJlc3VsdC52YWx1ZSxyLnN1YnN0cmluZyhpKzEpKTtyZXR1cm4gbHx8IkNvdWxkIG5vdCByZXNvbHZlIFVSSTogIityfWNhdGNoKGkpe3JldHVybiBTdHJpbmcoaSl9fX19KTt2YXIgVjIsJE09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNYygpO1YyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRTZXJ2aWNlUmVnaXN0cnkiKX1yZWdpc3RlcihlKXtpZighdGhpcy5zaW5nbGV0b24mJiF0aGlzLm1hcCl7dGhpcy5zaW5nbGV0b249ZTtyZXR1cm59aWYoIXRoaXMubWFwJiYodGhpcy5tYXA9e30sdGhpcy5zaW5nbGV0b24pKXtmb3IobGV0IHIgb2YgdGhpcy5zaW5nbGV0b24uTGFuZ3VhZ2VNZXRhRGF0YS5maWxlRXh0ZW5zaW9ucyl0aGlzLm1hcFtyXT10aGlzLnNpbmdsZXRvbjt0aGlzLnNpbmdsZXRvbj12b2lkIDB9Zm9yKGxldCByIG9mIGUuTGFuZ3VhZ2VNZXRhRGF0YS5maWxlRXh0ZW5zaW9ucyl0aGlzLm1hcFtyXSE9PXZvaWQgMCYmdGhpcy5tYXBbcl0hPT1lJiZjb25zb2xlLndhcm4oYFRoZSBmaWxlIGV4dGVuc2lvbiAke3J9IGlzIHVzZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzLiBJdCBpcyBub3cgYXNzaWduZWQgdG8gJyR7ZS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWR9Jy5gKSx0aGlzLm1hcFtyXT1lfWdldFNlcnZpY2VzKGUpe2lmKHRoaXMuc2luZ2xldG9uIT09dm9pZCAwKXJldHVybiB0aGlzLnNpbmdsZXRvbjtpZih0aGlzLm1hcD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIGVtcHR5LiBVc2UgYHJlZ2lzdGVyYCB0byByZWdpc3RlciB0aGUgc2VydmljZXMgb2YgYSBsYW5ndWFnZS4iKTtsZXQgcj1zcy5leHRuYW1lKGUpLG49dGhpcy5tYXBbcl07aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSByZWdpc3RyeSBjb250YWlucyBubyBzZXJ2aWNlcyBmb3IgdGhlIGV4dGVuc2lvbiAnJHtyfScuYCk7cmV0dXJuIG59Z2V0IGFsbCgpe3JldHVybiB0aGlzLnNpbmdsZXRvbiE9PXZvaWQgMD9bdGhpcy5zaW5nbGV0b25dOnRoaXMubWFwIT09dm9pZCAwP09iamVjdC52YWx1ZXModGhpcy5tYXApOltdfX19KTtmdW5jdGlvbiBGayh0KXtyZXR1cm57Y29kZTp0fX12YXIgTGcsVTIsSDI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtTZygpO1FvKCk7UnMoKTtvKEZrLCJkaWFnbm9zdGljRGF0YSIpOyhmdW5jdGlvbih0KXt0LmFsbD1bImZhc3QiLCJzbG93IiwiYnVpbHQtaW4iXX0pKExnfHwoTGc9e30pKTtVMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmVudHJpZXM9bmV3IEljLHRoaXMucmVmbGVjdGlvbj1lLnNoYXJlZC5Bc3RSZWZsZWN0aW9ufXJlZ2lzdGVyKGUscj10aGlzLG49ImZhc3QiKXtpZihuPT09ImJ1aWx0LWluIil0aHJvdyBuZXcgRXJyb3IoIlRoZSAnYnVpbHQtaW4nIGNhdGVnb3J5IGlzIHJlc2VydmVkIGZvciBsZXhlciwgcGFyc2VyLCBhbmQgbGlua2VyIGVycm9ycy4iKTtmb3IobGV0W2ksYV1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IHM9YTtpZihBcnJheS5pc0FycmF5KHMpKWZvcihsZXQgbCBvZiBzKXtsZXQgdT17Y2hlY2s6dGhpcy53cmFwVmFsaWRhdGlvbkV4Y2VwdGlvbihsLHIpLGNhdGVnb3J5Om59O3RoaXMuYWRkRW50cnkoaSx1KX1lbHNlIGlmKHR5cGVvZiBzPT0iZnVuY3Rpb24iKXtsZXQgbD17Y2hlY2s6dGhpcy53cmFwVmFsaWRhdGlvbkV4Y2VwdGlvbihzLHIpLGNhdGVnb3J5Om59O3RoaXMuYWRkRW50cnkoaSxsKX19fXdyYXBWYWxpZGF0aW9uRXhjZXB0aW9uKGUscil7cmV0dXJuIGFzeW5jKG4saSxhKT0+e3RyeXthd2FpdCBlLmNhbGwocixuLGksYSl9Y2F0Y2gocyl7aWYoc2YocykpdGhyb3cgcztjb25zb2xlLmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjoiLHMpO2xldCBsPXMgaW5zdGFuY2VvZiBFcnJvcj9zLm1lc3NhZ2U6U3RyaW5nKHMpO3MgaW5zdGFuY2VvZiBFcnJvciYmcy5zdGFjayYmY29uc29sZS5lcnJvcihzLnN0YWNrKSxpKCJlcnJvciIsIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB2YWxpZGF0aW9uOiAiK2wse25vZGU6bn0pfX19YWRkRW50cnkoZSxyKXtpZihlPT09IkFzdE5vZGUiKXt0aGlzLmVudHJpZXMuYWRkKCJBc3ROb2RlIixyKTtyZXR1cm59Zm9yKGxldCBuIG9mIHRoaXMucmVmbGVjdGlvbi5nZXRBbGxTdWJUeXBlcyhlKSl0aGlzLmVudHJpZXMuYWRkKG4scil9Z2V0Q2hlY2tzKGUscil7bGV0IG49dG4odGhpcy5lbnRyaWVzLmdldChlKSkuY29uY2F0KHRoaXMuZW50cmllcy5nZXQoIkFzdE5vZGUiKSk7cmV0dXJuIHImJihuPW4uZmlsdGVyKGk9PnIuaW5jbHVkZXMoaS5jYXRlZ29yeSkpKSxuLm1hcChpPT5pLmNoZWNrKX19fSk7ZnVuY3Rpb24geGNlKHQpe2lmKHQucmFuZ2UpcmV0dXJuIHQucmFuZ2U7bGV0IGU7cmV0dXJuIHR5cGVvZiB0LnByb3BlcnR5PT0ic3RyaW5nIj9lPUp2KHQubm9kZS4kY3N0Tm9kZSx0LnByb3BlcnR5LHQuaW5kZXgpOnR5cGVvZiB0LmtleXdvcmQ9PSJzdHJpbmciJiYoZT1yUih0Lm5vZGUuJGNzdE5vZGUsdC5rZXl3b3JkLHQuaW5kZXgpKSxlPz8oZT10Lm5vZGUuJGNzdE5vZGUpLGU/ZS5yYW5nZTp7c3RhcnQ6e2xpbmU6MCxjaGFyYWN0ZXI6MH0sZW5kOntsaW5lOjAsY2hhcmFjdGVyOjB9fX1mdW5jdGlvbiB6ayh0KXtzd2l0Y2godCl7Y2FzZSJlcnJvciI6cmV0dXJuIDE7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gMjtjYXNlImluZm8iOnJldHVybiAzO2Nhc2UiaGludCI6cmV0dXJuIDQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGlhZ25vc3RpYyBzZXZlcml0eTogIit0KX19dmFyIFcyLCR1LFZNPU0oKCk9PnsidXNlIHN0cmljdCI7S28oKTtQbCgpO2VzKCk7TWwoKTtRbygpO0gyKCk7VzI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yIil9Y29uc3RydWN0b3IoZSl7dGhpcy52YWxpZGF0aW9uUmVnaXN0cnk9ZS52YWxpZGF0aW9uLlZhbGlkYXRpb25SZWdpc3RyeSx0aGlzLm1ldGFkYXRhPWUuTGFuZ3VhZ2VNZXRhRGF0YX1hc3luYyB2YWxpZGF0ZURvY3VtZW50KGUscj17fSxuPUNyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBpPWUucGFyc2VSZXN1bHQsYT1bXTtpZihhd2FpdCBHaShuKSwoIXIuY2F0ZWdvcmllc3x8ci5jYXRlZ29yaWVzLmluY2x1ZGVzKCJidWlsdC1pbiIpKSYmKHRoaXMucHJvY2Vzc0xleGluZ0Vycm9ycyhpLGEsciksci5zdG9wQWZ0ZXJMZXhpbmdFcnJvcnMmJmEuc29tZShzPT57dmFyIGw7cmV0dXJuKChsPXMuZGF0YSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmNvZGUpPT09JHUuTGV4aW5nRXJyb3J9KXx8KHRoaXMucHJvY2Vzc1BhcnNpbmdFcnJvcnMoaSxhLHIpLHIuc3RvcEFmdGVyUGFyc2luZ0Vycm9ycyYmYS5zb21lKHM9Pnt2YXIgbDtyZXR1cm4oKGw9cy5kYXRhKT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwuY29kZSk9PT0kdS5QYXJzaW5nRXJyb3J9KSl8fCh0aGlzLnByb2Nlc3NMaW5raW5nRXJyb3JzKGUsYSxyKSxyLnN0b3BBZnRlckxpbmtpbmdFcnJvcnMmJmEuc29tZShzPT57dmFyIGw7cmV0dXJuKChsPXMuZGF0YSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmNvZGUpPT09JHUuTGlua2luZ0Vycm9yfSkpKSlyZXR1cm4gYTt0cnl7YS5wdXNoKC4uLmF3YWl0IHRoaXMudmFsaWRhdGVBc3QoaS52YWx1ZSxyLG4pKX1jYXRjaChzKXtpZihzZihzKSl0aHJvdyBzO2NvbnNvbGUuZXJyb3IoIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB2YWxpZGF0aW9uOiIscyl9cmV0dXJuIGF3YWl0IEdpKG4pLGF9cHJvY2Vzc0xleGluZ0Vycm9ycyhlLHIsbil7Zm9yKGxldCBpIG9mIGUubGV4ZXJFcnJvcnMpe2xldCBhPXtzZXZlcml0eTp6aygiZXJyb3IiKSxyYW5nZTp7c3RhcnQ6e2xpbmU6aS5saW5lLTEsY2hhcmFjdGVyOmkuY29sdW1uLTF9LGVuZDp7bGluZTppLmxpbmUtMSxjaGFyYWN0ZXI6aS5jb2x1bW4raS5sZW5ndGgtMX19LG1lc3NhZ2U6aS5tZXNzYWdlLGRhdGE6RmsoJHUuTGV4aW5nRXJyb3IpLHNvdXJjZTp0aGlzLmdldFNvdXJjZSgpfTtyLnB1c2goYSl9fXByb2Nlc3NQYXJzaW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5wYXJzZXJFcnJvcnMpe2xldCBhO2lmKGlzTmFOKGkudG9rZW4uc3RhcnRPZmZzZXQpKXtpZigicHJldmlvdXNUb2tlbiJpbiBpKXtsZXQgcz1pLnByZXZpb3VzVG9rZW47aWYoaXNOYU4ocy5zdGFydE9mZnNldCkpe2xldCBsPXtsaW5lOjAsY2hhcmFjdGVyOjB9O2E9e3N0YXJ0OmwsZW5kOmx9fWVsc2V7bGV0IGw9e2xpbmU6cy5lbmRMaW5lLTEsY2hhcmFjdGVyOnMuZW5kQ29sdW1ufTthPXtzdGFydDpsLGVuZDpsfX19fWVsc2UgYT0kbShpLnRva2VuKTtpZihhKXtsZXQgcz17c2V2ZXJpdHk6emsoImVycm9yIikscmFuZ2U6YSxtZXNzYWdlOmkubWVzc2FnZSxkYXRhOkZrKCR1LlBhcnNpbmdFcnJvciksc291cmNlOnRoaXMuZ2V0U291cmNlKCl9O3IucHVzaChzKX19fXByb2Nlc3NMaW5raW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5yZWZlcmVuY2VzKXtsZXQgYT1pLmVycm9yO2lmKGEpe2xldCBzPXtub2RlOmEuY29udGFpbmVyLHByb3BlcnR5OmEucHJvcGVydHksaW5kZXg6YS5pbmRleCxkYXRhOntjb2RlOiR1LkxpbmtpbmdFcnJvcixjb250YWluZXJUeXBlOmEuY29udGFpbmVyLiR0eXBlLHByb3BlcnR5OmEucHJvcGVydHkscmVmVGV4dDphLnJlZmVyZW5jZS4kcmVmVGV4dH19O3IucHVzaCh0aGlzLnRvRGlhZ25vc3RpYygiZXJyb3IiLGEubWVzc2FnZSxzKSl9fX1hc3luYyB2YWxpZGF0ZUFzdChlLHIsbj1Dci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1bXSxhPW8oKHMsbCx1KT0+e2kucHVzaCh0aGlzLnRvRGlhZ25vc3RpYyhzLGwsdSkpfSwiYWNjZXB0b3IiKTtyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoam8oZSkubWFwKGFzeW5jIHM9Pnthd2FpdCBHaShuKTtsZXQgbD10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5nZXRDaGVja3Mocy4kdHlwZSxyLmNhdGVnb3JpZXMpO2ZvcihsZXQgdSBvZiBsKWF3YWl0IHUocyxhLG4pfSkpLGl9dG9EaWFnbm9zdGljKGUscixuKXtyZXR1cm57bWVzc2FnZTpyLHJhbmdlOnhjZShuKSxzZXZlcml0eTp6ayhlKSxjb2RlOm4uY29kZSxjb2RlRGVzY3JpcHRpb246bi5jb2RlRGVzY3JpcHRpb24sdGFnczpuLnRhZ3MscmVsYXRlZEluZm9ybWF0aW9uOm4ucmVsYXRlZEluZm9ybWF0aW9uLGRhdGE6bi5kYXRhLHNvdXJjZTp0aGlzLmdldFNvdXJjZSgpfX1nZXRTb3VyY2UoKXtyZXR1cm4gdGhpcy5tZXRhZGF0YS5sYW5ndWFnZUlkfX07byh4Y2UsImdldERpYWdub3N0aWNSYW5nZSIpO28oemssInRvRGlhZ25vc3RpY1NldmVyaXR5Iik7KGZ1bmN0aW9uKHQpe3QuTGV4aW5nRXJyb3I9ImxleGluZy1lcnJvciIsdC5QYXJzaW5nRXJyb3I9InBhcnNpbmctZXJyb3IiLHQuTGlua2luZ0Vycm9yPSJsaW5raW5nLWVycm9yIn0pKCR1fHwoJHU9e30pKX0pO3ZhciBZMixxMixVTT1NKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7WW8oKTtlcygpO01sKCk7UW8oKTtNYygpO1kyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3IsdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcn1jcmVhdGVEZXNjcmlwdGlvbihlLHIsbj1GaShlKSl7cj8/KHI9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKSk7bGV0IGk9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYE5vZGUgYXQgcGF0aCAke2l9IGhhcyBubyBuYW1lLmApO2xldCBhLHM9bygoKT0+e3ZhciBsO3JldHVybiBhPz8oYT1IZCgobD10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShlKSkhPT1udWxsJiZsIT09dm9pZCAwP2w6ZS4kY3N0Tm9kZSkpfSwibmFtZVNlZ21lbnRHZXR0ZXIiKTtyZXR1cm57bm9kZTplLG5hbWU6cixnZXQgbmFtZVNlZ21lbnQoKXtyZXR1cm4gcygpfSxzZWxlY3Rpb25TZWdtZW50OkhkKGUuJGNzdE5vZGUpLHR5cGU6ZS4kdHlwZSxkb2N1bWVudFVyaTpuLnVyaSxwYXRoOml9fX0scTI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yfWFzeW5jIGNyZWF0ZURlc2NyaXB0aW9ucyhlLHI9Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49W10saT1lLnBhcnNlUmVzdWx0LnZhbHVlO2ZvcihsZXQgYSBvZiBqbyhpKSlhd2FpdCBHaShyKSxVbShhKS5maWx0ZXIocz0+IVZkKHMpKS5mb3JFYWNoKHM9PntsZXQgbD10aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHMpO2wmJm4ucHVzaChsKX0pO3JldHVybiBufWNyZWF0ZURlc2NyaXB0aW9uKGUpe2xldCByPWUucmVmZXJlbmNlLiRub2RlRGVzY3JpcHRpb24sbj1lLnJlZmVyZW5jZS4kcmVmTm9kZTtpZighcnx8IW4pcmV0dXJuO2xldCBpPUZpKGUuY29udGFpbmVyKS51cmk7cmV0dXJue3NvdXJjZVVyaTppLHNvdXJjZVBhdGg6dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlLmNvbnRhaW5lciksdGFyZ2V0VXJpOnIuZG9jdW1lbnRVcmksdGFyZ2V0UGF0aDpyLnBhdGgsc2VnbWVudDpIZChuKSxsb2NhbDpzcy5lcXVhbHMoci5kb2N1bWVudFVyaSxpKX19fX0pO3ZhciBYMixITT1NKCgpPT57InVzZSBzdHJpY3QiO1gyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlTG9jYXRvciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zZWdtZW50U2VwYXJhdG9yPSIvIix0aGlzLmluZGV4U2VwYXJhdG9yPSJAIn1nZXRBc3ROb2RlUGF0aChlKXtpZihlLiRjb250YWluZXIpe2xldCByPXRoaXMuZ2V0QXN0Tm9kZVBhdGgoZS4kY29udGFpbmVyKSxuPXRoaXMuZ2V0UGF0aFNlZ21lbnQoZSk7cmV0dXJuIHIrdGhpcy5zZWdtZW50U2VwYXJhdG9yK259cmV0dXJuIiJ9Z2V0UGF0aFNlZ21lbnQoeyRjb250YWluZXJQcm9wZXJ0eTplLCRjb250YWluZXJJbmRleDpyfSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nICckY29udGFpbmVyUHJvcGVydHknIGluIEFTVCBub2RlLiIpO3JldHVybiByIT09dm9pZCAwP2UrdGhpcy5pbmRleFNlcGFyYXRvcityOmV9Z2V0QXN0Tm9kZShlLHIpe3JldHVybiByLnNwbGl0KHRoaXMuc2VnbWVudFNlcGFyYXRvcikucmVkdWNlKChpLGEpPT57aWYoIWl8fGEubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcz1hLmluZGV4T2YodGhpcy5pbmRleFNlcGFyYXRvcik7aWYocz4wKXtsZXQgbD1hLnN1YnN0cmluZygwLHMpLHU9cGFyc2VJbnQoYS5zdWJzdHJpbmcocysxKSksaD1pW2xdO3JldHVybiBoPy5bdV19cmV0dXJuIGlbYV19LGUpfX19KTt2YXIgajIsV009TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRbygpO2oyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRDb25maWd1cmF0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLl9yZWFkeT1uZXcgYXMsdGhpcy5zZXR0aW5ncz17fSx0aGlzLndvcmtzcGFjZUNvbmZpZz0hMSx0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeX1nZXQgcmVhZHkoKXtyZXR1cm4gdGhpcy5fcmVhZHkucHJvbWlzZX1pbml0aWFsaXplKGUpe3ZhciByLG47dGhpcy53b3Jrc3BhY2VDb25maWc9KG49KHI9ZS5jYXBhYmlsaXRpZXMud29ya3NwYWNlKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY29uZmlndXJhdGlvbikhPT1udWxsJiZuIT09dm9pZCAwP246ITF9YXN5bmMgaW5pdGlhbGl6ZWQoZSl7aWYodGhpcy53b3Jrc3BhY2VDb25maWcpe2lmKGUucmVnaXN0ZXIpe2xldCByPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbDtlLnJlZ2lzdGVyKHtzZWN0aW9uOnIubWFwKG49PnRoaXMudG9TZWN0aW9uTmFtZShuLkxhbmd1YWdlTWV0YURhdGEubGFuZ3VhZ2VJZCkpfSl9aWYoZS5mZXRjaENvbmZpZ3VyYXRpb24pe2xldCByPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbC5tYXAoaT0+KHtzZWN0aW9uOnRoaXMudG9TZWN0aW9uTmFtZShpLkxhbmd1YWdlTWV0YURhdGEubGFuZ3VhZ2VJZCl9KSksbj1hd2FpdCBlLmZldGNoQ29uZmlndXJhdGlvbihyKTtyLmZvckVhY2goKGksYSk9Pnt0aGlzLnVwZGF0ZVNlY3Rpb25Db25maWd1cmF0aW9uKGkuc2VjdGlvbixuW2FdKX0pfX10aGlzLl9yZWFkeS5yZXNvbHZlKCl9dXBkYXRlQ29uZmlndXJhdGlvbihlKXtlLnNldHRpbmdzJiZPYmplY3Qua2V5cyhlLnNldHRpbmdzKS5mb3JFYWNoKHI9Pnt0aGlzLnVwZGF0ZVNlY3Rpb25Db25maWd1cmF0aW9uKHIsZS5zZXR0aW5nc1tyXSl9KX11cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihlLHIpe3RoaXMuc2V0dGluZ3NbZV09cn1hc3luYyBnZXRDb25maWd1cmF0aW9uKGUscil7YXdhaXQgdGhpcy5yZWFkeTtsZXQgbj10aGlzLnRvU2VjdGlvbk5hbWUoZSk7aWYodGhpcy5zZXR0aW5nc1tuXSlyZXR1cm4gdGhpcy5zZXR0aW5nc1tuXVtyXX10b1NlY3Rpb25OYW1lKGUpe3JldHVybmAke2V9YH19fSk7dmFyIGcwLFlNPU0oKCk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2Rpc3Bvc2U6byhhc3luYygpPT5hd2FpdCByKCksImRpc3Bvc2UiKX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoZzB8fChnMD17fSkpfSk7dmFyIEsyLHFNPU0oKCk9PnsidXNlIHN0cmljdCI7S28oKTtZTSgpO1NnKCk7UW8oKTtScygpO0gyKCk7RWcoKTtLMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0RG9jdW1lbnRCdWlsZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy51cGRhdGVCdWlsZE9wdGlvbnM9e3ZhbGlkYXRpb246e2NhdGVnb3JpZXM6WyJidWlsdC1pbiIsImZhc3QiXX19LHRoaXMudXBkYXRlTGlzdGVuZXJzPVtdLHRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycz1uZXcgSWMsdGhpcy5idWlsZFN0YXRlPW5ldyBNYXAsdGhpcy5kb2N1bWVudEJ1aWxkV2FpdGVycz1uZXcgTWFwLHRoaXMuY3VycmVudFN0YXRlPWJuLkNoYW5nZWQsdGhpcy5sYW5naXVtRG9jdW1lbnRzPWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5PWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3RvcnksdGhpcy5pbmRleE1hbmFnZXI9ZS53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMuc2VydmljZVJlZ2lzdHJ5PWUuU2VydmljZVJlZ2lzdHJ5fWFzeW5jIGJ1aWxkKGUscj17fSxuPUNyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3ZhciBpLGE7Zm9yKGxldCBzIG9mIGUpe2xldCBsPXMudXJpLnRvU3RyaW5nKCk7aWYocy5zdGF0ZT09PWJuLlZhbGlkYXRlZCl7aWYodHlwZW9mIHIudmFsaWRhdGlvbj09ImJvb2xlYW4iJiZyLnZhbGlkYXRpb24pcy5zdGF0ZT1ibi5JbmRleGVkUmVmZXJlbmNlcyxzLmRpYWdub3N0aWNzPXZvaWQgMCx0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGwpO2Vsc2UgaWYodHlwZW9mIHIudmFsaWRhdGlvbj09Im9iamVjdCIpe2xldCB1PXRoaXMuYnVpbGRTdGF0ZS5nZXQobCksaD0oaT11Py5yZXN1bHQpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS52YWxpZGF0aW9uQ2hlY2tzO2lmKGgpe2xldCBkPSgoYT1yLnZhbGlkYXRpb24uY2F0ZWdvcmllcykhPT1udWxsJiZhIT09dm9pZCAwP2E6TGcuYWxsKS5maWx0ZXIocD0+IWguaW5jbHVkZXMocCkpO2QubGVuZ3RoPjAmJih0aGlzLmJ1aWxkU3RhdGUuc2V0KGwse2NvbXBsZXRlZDohMSxvcHRpb25zOnt2YWxpZGF0aW9uOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyLnZhbGlkYXRpb24pLHtjYXRlZ29yaWVzOmR9KX0scmVzdWx0OnUucmVzdWx0fSkscy5zdGF0ZT1ibi5JbmRleGVkUmVmZXJlbmNlcyl9fX1lbHNlIHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUobCl9dGhpcy5jdXJyZW50U3RhdGU9Ym4uQ2hhbmdlZCxhd2FpdCB0aGlzLmVtaXRVcGRhdGUoZS5tYXAocz0+cy51cmkpLFtdKSxhd2FpdCB0aGlzLmJ1aWxkRG9jdW1lbnRzKGUscixuKX1hc3luYyB1cGRhdGUoZSxyLG49Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7dGhpcy5jdXJyZW50U3RhdGU9Ym4uQ2hhbmdlZDtmb3IobGV0IHMgb2Ygcil0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZGVsZXRlRG9jdW1lbnQocyksdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShzLnRvU3RyaW5nKCkpLHRoaXMuaW5kZXhNYW5hZ2VyLnJlbW92ZShzKTtmb3IobGV0IHMgb2YgZSl7aWYoIXRoaXMubGFuZ2l1bURvY3VtZW50cy5pbnZhbGlkYXRlRG9jdW1lbnQocykpe2xldCB1PXRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tTW9kZWwoeyR0eXBlOiJJTlZBTElEIn0scyk7dS5zdGF0ZT1ibi5DaGFuZ2VkLHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudCh1KX10aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKHMudG9TdHJpbmcoKSl9bGV0IGk9dG4oZSkuY29uY2F0KHIpLm1hcChzPT5zLnRvU3RyaW5nKCkpLnRvU2V0KCk7dGhpcy5sYW5naXVtRG9jdW1lbnRzLmFsbC5maWx0ZXIocz0+IWkuaGFzKHMudXJpLnRvU3RyaW5nKCkpJiZ0aGlzLnNob3VsZFJlbGluayhzLGkpKS5mb3JFYWNoKHM9Pnt0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhzLnVyaSkucmVmZXJlbmNlcy5MaW5rZXIudW5saW5rKHMpLHMuc3RhdGU9TWF0aC5taW4ocy5zdGF0ZSxibi5Db21wdXRlZFNjb3Blcykscy5kaWFnbm9zdGljcz12b2lkIDB9KSxhd2FpdCB0aGlzLmVtaXRVcGRhdGUoZSxyKSxhd2FpdCBHaShuKTtsZXQgYT10aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWxsLmZpbHRlcihzPT57dmFyIGw7cmV0dXJuIHMuc3RhdGU8Ym4uTGlua2VkfHwhKCEoKGw9dGhpcy5idWlsZFN0YXRlLmdldChzLnVyaS50b1N0cmluZygpKSk9PT1udWxsfHxsPT09dm9pZCAwKSYmbC5jb21wbGV0ZWQpfSkudG9BcnJheSgpO2F3YWl0IHRoaXMuYnVpbGREb2N1bWVudHMoYSx0aGlzLnVwZGF0ZUJ1aWxkT3B0aW9ucyxuKX1hc3luYyBlbWl0VXBkYXRlKGUscil7YXdhaXQgUHJvbWlzZS5hbGwodGhpcy51cGRhdGVMaXN0ZW5lcnMubWFwKG49Pm4oZSxyKSkpfXNob3VsZFJlbGluayhlLHIpe3JldHVybiBlLnJlZmVyZW5jZXMuc29tZShuPT5uLmVycm9yIT09dm9pZCAwKT8hMDp0aGlzLmluZGV4TWFuYWdlci5pc0FmZmVjdGVkKGUscil9b25VcGRhdGUoZSl7cmV0dXJuIHRoaXMudXBkYXRlTGlzdGVuZXJzLnB1c2goZSksZzAuY3JlYXRlKCgpPT57bGV0IHI9dGhpcy51cGRhdGVMaXN0ZW5lcnMuaW5kZXhPZihlKTtyPj0wJiZ0aGlzLnVwZGF0ZUxpc3RlbmVycy5zcGxpY2UociwxKX0pfWFzeW5jIGJ1aWxkRG9jdW1lbnRzKGUscixuKXt0aGlzLnByZXBhcmVCdWlsZChlLHIpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGJuLlBhcnNlZCxuLGE9PnRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS51cGRhdGUoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsYm4uSW5kZXhlZENvbnRlbnQsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVDb250ZW50KGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGJuLkNvbXB1dGVkU2NvcGVzLG4sYXN5bmMgYT0+e2xldCBzPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGEudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb247YS5wcmVjb21wdXRlZFNjb3Blcz1hd2FpdCBzLmNvbXB1dGVMb2NhbFNjb3BlcyhhLG4pfSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsYm4uTGlua2VkLG4sYT0+dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoYS51cmkpLnJlZmVyZW5jZXMuTGlua2VyLmxpbmsoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsYm4uSW5kZXhlZFJlZmVyZW5jZXMsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVSZWZlcmVuY2VzKGEsbikpO2xldCBpPWUuZmlsdGVyKGE9PnRoaXMuc2hvdWxkVmFsaWRhdGUoYSkpO2F3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShpLGJuLlZhbGlkYXRlZCxuLGE9PnRoaXMudmFsaWRhdGUoYSxuKSk7Zm9yKGxldCBhIG9mIGUpe2xldCBzPXRoaXMuYnVpbGRTdGF0ZS5nZXQoYS51cmkudG9TdHJpbmcoKSk7cyYmKHMuY29tcGxldGVkPSEwKX19cHJlcGFyZUJ1aWxkKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPW4udXJpLnRvU3RyaW5nKCksYT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGkpOyghYXx8YS5jb21wbGV0ZWQpJiZ0aGlzLmJ1aWxkU3RhdGUuc2V0KGkse2NvbXBsZXRlZDohMSxvcHRpb25zOnIscmVzdWx0OmE/LnJlc3VsdH0pfX1hc3luYyBydW5DYW5jZWxhYmxlKGUscixuLGkpe2xldCBhPWUuZmlsdGVyKHM9PnMuc3RhdGU8cik7Zm9yKGxldCBzIG9mIGEpYXdhaXQgR2kobiksYXdhaXQgaShzKSxzLnN0YXRlPXI7YXdhaXQgdGhpcy5ub3RpZnlCdWlsZFBoYXNlKGEscixuKSx0aGlzLmN1cnJlbnRTdGF0ZT1yfW9uQnVpbGRQaGFzZShlLHIpe3JldHVybiB0aGlzLmJ1aWxkUGhhc2VMaXN0ZW5lcnMuYWRkKGUsciksZzAuY3JlYXRlKCgpPT57dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmRlbGV0ZShlLHIpfSl9d2FpdFVudGlsKGUscixuKXtsZXQgaTtpZihyJiYicGF0aCJpbiByP2k9cjpuPXIsbj8/KG49Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSksaSl7bGV0IGE9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KGkpO2lmKGEmJmEuc3RhdGU+ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfXJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZT49ZT9Qcm9taXNlLnJlc29sdmUodm9pZCAwKTpuLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkP1Byb21pc2UucmVqZWN0KFJjKTpuZXcgUHJvbWlzZSgoYSxzKT0+e2xldCBsPXRoaXMub25CdWlsZFBoYXNlKGUsKCk9PntpZihsLmRpc3Bvc2UoKSx1LmRpc3Bvc2UoKSxpKXtsZXQgaD10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoaSk7YShoPy51cmkpfWVsc2UgYSh2b2lkIDApfSksdT1uLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCgpPT57bC5kaXNwb3NlKCksdS5kaXNwb3NlKCkscyhSYyl9KX0pfWFzeW5jIG5vdGlmeUJ1aWxkUGhhc2UoZSxyLG4pe2lmKGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGk9dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmdldChyKTtmb3IobGV0IGEgb2YgaSlhd2FpdCBHaShuKSxhd2FpdCBhKGUsbil9c2hvdWxkVmFsaWRhdGUoZSl7cmV0dXJuISF0aGlzLmdldEJ1aWxkT3B0aW9ucyhlKS52YWxpZGF0aW9ufWFzeW5jIHZhbGlkYXRlKGUscil7dmFyIG4saTtsZXQgYT10aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlLnVyaSkudmFsaWRhdGlvbi5Eb2N1bWVudFZhbGlkYXRvcixzPXRoaXMuZ2V0QnVpbGRPcHRpb25zKGUpLnZhbGlkYXRpb24sbD10eXBlb2Ygcz09Im9iamVjdCI/czp2b2lkIDAsdT1hd2FpdCBhLnZhbGlkYXRlRG9jdW1lbnQoZSxsLHIpO2UuZGlhZ25vc3RpY3M/ZS5kaWFnbm9zdGljcy5wdXNoKC4uLnUpOmUuZGlhZ25vc3RpY3M9dTtsZXQgaD10aGlzLmJ1aWxkU3RhdGUuZ2V0KGUudXJpLnRvU3RyaW5nKCkpO2lmKGgpeyhuPWgucmVzdWx0KSE9PW51bGwmJm4hPT12b2lkIDB8fChoLnJlc3VsdD17fSk7bGV0IGY9KGk9bD8uY2F0ZWdvcmllcykhPT1udWxsJiZpIT09dm9pZCAwP2k6TGcuYWxsO2gucmVzdWx0LnZhbGlkYXRpb25DaGVja3M/aC5yZXN1bHQudmFsaWRhdGlvbkNoZWNrcy5wdXNoKC4uLmYpOmgucmVzdWx0LnZhbGlkYXRpb25DaGVja3M9Wy4uLmZdfX1nZXRCdWlsZE9wdGlvbnMoZSl7dmFyIHIsbjtyZXR1cm4obj0ocj10aGlzLmJ1aWxkU3RhdGUuZ2V0KGUudXJpLnRvU3RyaW5nKCkpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIub3B0aW9ucykhPT1udWxsJiZuIT09dm9pZCAwP246e319fX0pO3ZhciBRMixYTT1NKCgpPT57InVzZSBzdHJpY3QiO2VzKCk7UGsoKTtLbygpO1JzKCk7TWMoKTtRMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0SW5kZXhNYW5hZ2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5zeW1ib2xJbmRleD1uZXcgTWFwLHRoaXMuc3ltYm9sQnlUeXBlSW5kZXg9bmV3IG0wLHRoaXMucmVmZXJlbmNlSW5kZXg9bmV3IE1hcCx0aGlzLmRvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMuc2VydmljZVJlZ2lzdHJ5PWUuU2VydmljZVJlZ2lzdHJ5LHRoaXMuYXN0UmVmbGVjdGlvbj1lLkFzdFJlZmxlY3Rpb259ZmluZEFsbFJlZmVyZW5jZXMoZSxyKXtsZXQgbj1GaShlKS51cmksaT1bXTtyZXR1cm4gdGhpcy5yZWZlcmVuY2VJbmRleC5mb3JFYWNoKGE9PnthLmZvckVhY2gocz0+e3NzLmVxdWFscyhzLnRhcmdldFVyaSxuKSYmcy50YXJnZXRQYXRoPT09ciYmaS5wdXNoKHMpfSl9KSx0bihpKX1hbGxFbGVtZW50cyhlLHIpe2xldCBuPXRuKHRoaXMuc3ltYm9sSW5kZXgua2V5cygpKTtyZXR1cm4gciYmKG49bi5maWx0ZXIoaT0+IXJ8fHIuaGFzKGkpKSksbi5tYXAoaT0+dGhpcy5nZXRGaWxlRGVzY3JpcHRpb25zKGksZSkpLmZsYXQoKX1nZXRGaWxlRGVzY3JpcHRpb25zKGUscil7dmFyIG47cmV0dXJuIHI/dGhpcy5zeW1ib2xCeVR5cGVJbmRleC5nZXQoZSxyLCgpPT57dmFyIGE7cmV0dXJuKChhPXRoaXMuc3ltYm9sSW5kZXguZ2V0KGUpKSE9PW51bGwmJmEhPT12b2lkIDA/YTpbXSkuZmlsdGVyKGw9PnRoaXMuYXN0UmVmbGVjdGlvbi5pc1N1YnR5cGUobC50eXBlLHIpKX0pOihuPXRoaXMuc3ltYm9sSW5kZXguZ2V0KGUpKSE9PW51bGwmJm4hPT12b2lkIDA/bjpbXX1yZW1vdmUoZSl7bGV0IHI9ZS50b1N0cmluZygpO3RoaXMuc3ltYm9sSW5kZXguZGVsZXRlKHIpLHRoaXMuc3ltYm9sQnlUeXBlSW5kZXguY2xlYXIociksdGhpcy5yZWZlcmVuY2VJbmRleC5kZWxldGUocil9YXN5bmMgdXBkYXRlQ29udGVudChlLHI9Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IGk9YXdhaXQgdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZS51cmkpLnJlZmVyZW5jZXMuU2NvcGVDb21wdXRhdGlvbi5jb21wdXRlRXhwb3J0cyhlLHIpLGE9ZS51cmkudG9TdHJpbmcoKTt0aGlzLnN5bWJvbEluZGV4LnNldChhLGkpLHRoaXMuc3ltYm9sQnlUeXBlSW5kZXguY2xlYXIoYSl9YXN5bmMgdXBkYXRlUmVmZXJlbmNlcyhlLHI9Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IGk9YXdhaXQgdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZS51cmkpLndvcmtzcGFjZS5SZWZlcmVuY2VEZXNjcmlwdGlvblByb3ZpZGVyLmNyZWF0ZURlc2NyaXB0aW9ucyhlLHIpO3RoaXMucmVmZXJlbmNlSW5kZXguc2V0KGUudXJpLnRvU3RyaW5nKCksaSl9aXNBZmZlY3RlZChlLHIpe2xldCBuPXRoaXMucmVmZXJlbmNlSW5kZXguZ2V0KGUudXJpLnRvU3RyaW5nKCkpO3JldHVybiBuP24uc29tZShpPT4haS5sb2NhbCYmci5oYXMoaS50YXJnZXRVcmkudG9TdHJpbmcoKSkpOiExfX19KTt2YXIgWjIsak09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLbygpO1FvKCk7TWMoKTtaMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0V29ya3NwYWNlTWFuYWdlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaW5pdGlhbEJ1aWxkT3B0aW9ucz17fSx0aGlzLl9yZWFkeT1uZXcgYXMsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy5sYW5naXVtRG9jdW1lbnRzPWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5kb2N1bWVudEJ1aWxkZXI9ZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyPWUud29ya3NwYWNlLkZpbGVTeXN0ZW1Qcm92aWRlcix0aGlzLm11dGV4PWUud29ya3NwYWNlLldvcmtzcGFjZUxvY2t9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2V9aW5pdGlhbGl6ZShlKXt2YXIgcjt0aGlzLmZvbGRlcnM9KHI9ZS53b3Jrc3BhY2VGb2xkZXJzKSE9PW51bGwmJnIhPT12b2lkIDA/cjp2b2lkIDB9aW5pdGlhbGl6ZWQoZSl7cmV0dXJuIHRoaXMubXV0ZXgud3JpdGUocj0+e3ZhciBuO3JldHVybiB0aGlzLmluaXRpYWxpemVXb3Jrc3BhY2UoKG49dGhpcy5mb2xkZXJzKSE9PW51bGwmJm4hPT12b2lkIDA/bjpbXSxyKX0pfWFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoZSxyPUNyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMucGVyZm9ybVN0YXJ0dXAoZSk7YXdhaXQgR2kociksYXdhaXQgdGhpcy5kb2N1bWVudEJ1aWxkZXIuYnVpbGQobix0aGlzLmluaXRpYWxCdWlsZE9wdGlvbnMscil9YXN5bmMgcGVyZm9ybVN0YXJ0dXAoZSl7bGV0IHI9dGhpcy5zZXJ2aWNlUmVnaXN0cnkuYWxsLmZsYXRNYXAoYT0+YS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKSxuPVtdLGk9byhhPT57bi5wdXNoKGEpLHRoaXMubGFuZ2l1bURvY3VtZW50cy5oYXNEb2N1bWVudChhLnVyaSl8fHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChhKX0sImNvbGxlY3RvciIpO3JldHVybiBhd2FpdCB0aGlzLmxvYWRBZGRpdGlvbmFsRG9jdW1lbnRzKGUsaSksYXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoYT0+W2EsdGhpcy5nZXRSb290Rm9sZGVyKGEpXSkubWFwKGFzeW5jIGE9PnRoaXMudHJhdmVyc2VGb2xkZXIoLi4uYSxyLGkpKSksdGhpcy5fcmVhZHkucmVzb2x2ZSgpLG59bG9hZEFkZGl0aW9uYWxEb2N1bWVudHMoZSxyKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9Z2V0Um9vdEZvbGRlcihlKXtyZXR1cm4gT3MucGFyc2UoZS51cmkpfWFzeW5jIHRyYXZlcnNlRm9sZGVyKGUscixuLGkpe2xldCBhPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3Rvcnkocik7YXdhaXQgUHJvbWlzZS5hbGwoYS5tYXAoYXN5bmMgcz0+e2lmKHRoaXMuaW5jbHVkZUVudHJ5KGUscyxuKSl7aWYocy5pc0RpcmVjdG9yeSlhd2FpdCB0aGlzLnRyYXZlcnNlRm9sZGVyKGUscy51cmksbixpKTtlbHNlIGlmKHMuaXNGaWxlKXtsZXQgbD1hd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0T3JDcmVhdGVEb2N1bWVudChzLnVyaSk7aShsKX19fSkpfWluY2x1ZGVFbnRyeShlLHIsbil7bGV0IGk9c3MuYmFzZW5hbWUoci51cmkpO2lmKGkuc3RhcnRzV2l0aCgiLiIpKXJldHVybiExO2lmKHIuaXNEaXJlY3RvcnkpcmV0dXJuIGkhPT0ibm9kZV9tb2R1bGVzIiYmaSE9PSJvdXQiO2lmKHIuaXNGaWxlKXtsZXQgYT1zcy5leHRuYW1lKHIudXJpKTtyZXR1cm4gbi5pbmNsdWRlcyhhKX1yZXR1cm4hMX19fSk7ZnVuY3Rpb24gYmNlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYodC5sZW5ndGg9PT0wfHwibmFtZSJpbiB0WzBdKX1mdW5jdGlvbiBRTSh0KXtyZXR1cm4gdCYmIm1vZGVzImluIHQmJiJkZWZhdWx0TW9kZSJpbiB0fWZ1bmN0aW9uIEtNKHQpe3JldHVybiFiY2UodCkmJiFRTSh0KX12YXIgSjIsWk09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtzMCgpO0oyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMZXhlciIpfWNvbnN0cnVjdG9yKGUpe2xldCByPWUucGFyc2VyLlRva2VuQnVpbGRlci5idWlsZFRva2VucyhlLkdyYW1tYXIse2Nhc2VJbnNlbnNpdGl2ZTplLkxhbmd1YWdlTWV0YURhdGEuY2FzZUluc2Vuc2l0aXZlfSk7dGhpcy50b2tlblR5cGVzPXRoaXMudG9Ub2tlblR5cGVEaWN0aW9uYXJ5KHIpO2xldCBuPUtNKHIpP09iamVjdC52YWx1ZXMocik6cjt0aGlzLmNoZXZyb3RhaW5MZXhlcj1uZXcgb2kobix7cG9zaXRpb25UcmFja2luZzoiZnVsbCJ9KX1nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLnRva2VuVHlwZXN9dG9rZW5pemUoZSl7dmFyIHI7bGV0IG49dGhpcy5jaGV2cm90YWluTGV4ZXIudG9rZW5pemUoZSk7cmV0dXJue3Rva2VuczpuLnRva2VucyxlcnJvcnM6bi5lcnJvcnMsaGlkZGVuOihyPW4uZ3JvdXBzLmhpZGRlbikhPT1udWxsJiZyIT09dm9pZCAwP3I6W119fXRvVG9rZW5UeXBlRGljdGlvbmFyeShlKXtpZihLTShlKSlyZXR1cm4gZTtsZXQgcj1RTShlKT9PYmplY3QudmFsdWVzKGUubW9kZXMpLmZsYXQoKTplLG49e307cmV0dXJuIHIuZm9yRWFjaChpPT5uW2kubmFtZV09aSksbn19O28oYmNlLCJpc1Rva2VuVHlwZUFycmF5Iik7byhRTSwiaXNJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uIik7byhLTSwiaXNUb2tlblR5cGVEaWN0aW9uYXJ5Iil9KTtmdW5jdGlvbiB0SSh0LGUscil7bGV0IG4saTt0eXBlb2YgdD09InN0cmluZyI/KGk9ZSxuPXIpOihpPXQucmFuZ2Uuc3RhcnQsbj1lKSxpfHwoaT1Yci5jcmVhdGUoMCwwKSk7bGV0IGE9a2NlKHQpLHM9bkkobiksbD1GemUoe2xpbmVzOmEscG9zaXRpb246aSxvcHRpb25zOnN9KTtyZXR1cm4gVXplKHtpbmRleDowLHRva2VuczpsLHBvc2l0aW9uOml9KX1mdW5jdGlvbiBySSh0LGUpe2xldCByPW5JKGUpLG49a2NlKHQpO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4hMTtsZXQgaT1uWzBdLGE9bltuLmxlbmd0aC0xXSxzPXIuc3RhcnQsbD1yLmVuZDtyZXR1cm4hIXM/LmV4ZWMoaSkmJiEhbD8uZXhlYyhhKX1mdW5jdGlvbiBrY2UodCl7bGV0IGU9IiI7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj9lPXQ6ZT10LnRleHQsZS5zcGxpdChZTil9ZnVuY3Rpb24gRnplKHQpe3ZhciBlLHIsbjtsZXQgaT1bXSxhPXQucG9zaXRpb24ubGluZSxzPXQucG9zaXRpb24uY2hhcmFjdGVyO2ZvcihsZXQgbD0wO2w8dC5saW5lcy5sZW5ndGg7bCsrKXtsZXQgdT1sPT09MCxoPWw9PT10LmxpbmVzLmxlbmd0aC0xLGY9dC5saW5lc1tsXSxkPTA7aWYodSYmdC5vcHRpb25zLnN0YXJ0KXtsZXQgbT0oZT10Lm9wdGlvbnMuc3RhcnQpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5leGVjKGYpO20mJihkPW0uaW5kZXgrbVswXS5sZW5ndGgpfWVsc2V7bGV0IG09KHI9dC5vcHRpb25zLmxpbmUpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5leGVjKGYpO20mJihkPW0uaW5kZXgrbVswXS5sZW5ndGgpfWlmKGgpe2xldCBtPShuPXQub3B0aW9ucy5lbmQpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5leGVjKGYpO20mJihmPWYuc3Vic3RyaW5nKDAsbS5pbmRleCkpfWlmKGY9Zi5zdWJzdHJpbmcoMCxWemUoZikpLGVJKGYsZCk+PWYubGVuZ3RoKXtpZihpLmxlbmd0aD4wKXtsZXQgbT1Yci5jcmVhdGUoYSxzKTtpLnB1c2goe3R5cGU6ImJyZWFrIixjb250ZW50OiIiLHJhbmdlOkRyLmNyZWF0ZShtLG0pfSl9fWVsc2V7d2NlLmxhc3RJbmRleD1kO2xldCBtPXdjZS5leGVjKGYpO2lmKG0pe2xldCBnPW1bMF0seT1tWzFdLHY9WHIuY3JlYXRlKGEscytkKSx4PVhyLmNyZWF0ZShhLHMrZCtnLmxlbmd0aCk7aS5wdXNoKHt0eXBlOiJ0YWciLGNvbnRlbnQ6eSxyYW5nZTpEci5jcmVhdGUodix4KX0pLGQrPWcubGVuZ3RoLGQ9ZUkoZixkKX1pZihkPGYubGVuZ3RoKXtsZXQgZz1mLnN1YnN0cmluZyhkKSx5PUFycmF5LmZyb20oZy5tYXRjaEFsbChCemUpKTtpLnB1c2goLi4uenplKHksZyxhLHMrZCkpfX1hKysscz0wfXJldHVybiBpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdLnR5cGU9PT0iYnJlYWsiP2kuc2xpY2UoMCwtMSk6aX1mdW5jdGlvbiB6emUodCxlLHIsbil7bGV0IGk9W107aWYodC5sZW5ndGg9PT0wKXtsZXQgYT1Yci5jcmVhdGUocixuKSxzPVhyLmNyZWF0ZShyLG4rZS5sZW5ndGgpO2kucHVzaCh7dHlwZToidGV4dCIsY29udGVudDplLHJhbmdlOkRyLmNyZWF0ZShhLHMpfSl9ZWxzZXtsZXQgYT0wO2ZvcihsZXQgbCBvZiB0KXtsZXQgdT1sLmluZGV4LGg9ZS5zdWJzdHJpbmcoYSx1KTtoLmxlbmd0aD4wJiZpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6ZS5zdWJzdHJpbmcoYSx1KSxyYW5nZTpEci5jcmVhdGUoWHIuY3JlYXRlKHIsYStuKSxYci5jcmVhdGUocix1K24pKX0pO2xldCBmPWgubGVuZ3RoKzEsZD1sWzFdO2lmKGkucHVzaCh7dHlwZToiaW5saW5lLXRhZyIsY29udGVudDpkLHJhbmdlOkRyLmNyZWF0ZShYci5jcmVhdGUocixhK2YrbiksWHIuY3JlYXRlKHIsYStmK2QubGVuZ3RoK24pKX0pLGYrPWQubGVuZ3RoLGwubGVuZ3RoPT09NCl7Zis9bFsyXS5sZW5ndGg7bGV0IHA9bFszXTtpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6cCxyYW5nZTpEci5jcmVhdGUoWHIuY3JlYXRlKHIsYStmK24pLFhyLmNyZWF0ZShyLGErZitwLmxlbmd0aCtuKSl9KX1lbHNlIGkucHVzaCh7dHlwZToidGV4dCIsY29udGVudDoiIixyYW5nZTpEci5jcmVhdGUoWHIuY3JlYXRlKHIsYStmK24pLFhyLmNyZWF0ZShyLGErZituKSl9KTthPXUrbFswXS5sZW5ndGh9bGV0IHM9ZS5zdWJzdHJpbmcoYSk7cy5sZW5ndGg+MCYmaS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnMscmFuZ2U6RHIuY3JlYXRlKFhyLmNyZWF0ZShyLGErbiksWHIuY3JlYXRlKHIsYStuK3MubGVuZ3RoKSl9KX1yZXR1cm4gaX1mdW5jdGlvbiBlSSh0LGUpe2xldCByPXQuc3Vic3RyaW5nKGUpLm1hdGNoKEd6ZSk7cmV0dXJuIHI/ZStyLmluZGV4OnQubGVuZ3RofWZ1bmN0aW9uIFZ6ZSh0KXtsZXQgZT10Lm1hdGNoKCR6ZSk7aWYoZSYmdHlwZW9mIGUuaW5kZXg9PSJudW1iZXIiKXJldHVybiBlLmluZGV4fWZ1bmN0aW9uIFV6ZSh0KXt2YXIgZSxyLG4saTtsZXQgYT1Yci5jcmVhdGUodC5wb3NpdGlvbi5saW5lLHQucG9zaXRpb24uY2hhcmFjdGVyKTtpZih0LnRva2Vucy5sZW5ndGg9PT0wKXJldHVybiBuZXcgR2soW10sRHIuY3JlYXRlKGEsYSkpO2xldCBzPVtdO2Zvcig7dC5pbmRleDx0LnRva2Vucy5sZW5ndGg7KXtsZXQgaD1IemUodCxzW3MubGVuZ3RoLTFdKTtoJiZzLnB1c2goaCl9bGV0IGw9KHI9KGU9c1swXSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLnJhbmdlLnN0YXJ0KSE9PW51bGwmJnIhPT12b2lkIDA/cjphLHU9KGk9KG49c1tzLmxlbmd0aC0xXSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnJhbmdlLmVuZCkhPT1udWxsJiZpIT09dm9pZCAwP2k6YTtyZXR1cm4gbmV3IEdrKHMsRHIuY3JlYXRlKGwsdSkpfWZ1bmN0aW9uIEh6ZSh0LGUpe2xldCByPXQudG9rZW5zW3QuaW5kZXhdO2lmKHIudHlwZT09PSJ0YWciKXJldHVybiBTY2UodCwhMSk7aWYoci50eXBlPT09InRleHQifHxyLnR5cGU9PT0iaW5saW5lLXRhZyIpcmV0dXJuIEVjZSh0KTtXemUocixlKSx0LmluZGV4Kyt9ZnVuY3Rpb24gV3plKHQsZSl7aWYoZSl7bGV0IHI9bmV3ICRrKCIiLHQucmFuZ2UpOyJpbmxpbmVzImluIGU/ZS5pbmxpbmVzLnB1c2gocik6ZS5jb250ZW50LmlubGluZXMucHVzaChyKX19ZnVuY3Rpb24gRWNlKHQpe2xldCBlPXQudG9rZW5zW3QuaW5kZXhdLHI9ZSxuPWUsaT1bXTtmb3IoO2UmJmUudHlwZSE9PSJicmVhayImJmUudHlwZSE9PSJ0YWciOylpLnB1c2goWXplKHQpKSxuPWUsZT10LnRva2Vuc1t0LmluZGV4XTtyZXR1cm4gbmV3IHR4KGksRHIuY3JlYXRlKHIucmFuZ2Uuc3RhcnQsbi5yYW5nZS5lbmQpKX1mdW5jdGlvbiBZemUodCl7cmV0dXJuIHQudG9rZW5zW3QuaW5kZXhdLnR5cGU9PT0iaW5saW5lLXRhZyI/U2NlKHQsITApOkNjZSh0KX1mdW5jdGlvbiBTY2UodCxlKXtsZXQgcj10LnRva2Vuc1t0LmluZGV4KytdLG49ci5jb250ZW50LnN1YnN0cmluZygxKSxpPXQudG9rZW5zW3QuaW5kZXhdO2lmKGk/LnR5cGU9PT0idGV4dCIpaWYoZSl7bGV0IGE9Q2NlKHQpO3JldHVybiBuZXcgZXgobixuZXcgdHgoW2FdLGEucmFuZ2UpLGUsRHIuY3JlYXRlKHIucmFuZ2Uuc3RhcnQsYS5yYW5nZS5lbmQpKX1lbHNle2xldCBhPUVjZSh0KTtyZXR1cm4gbmV3IGV4KG4sYSxlLERyLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LGEucmFuZ2UuZW5kKSl9ZWxzZXtsZXQgYT1yLnJhbmdlO3JldHVybiBuZXcgZXgobixuZXcgdHgoW10sYSksZSxhKX19ZnVuY3Rpb24gQ2NlKHQpe2xldCBlPXQudG9rZW5zW3QuaW5kZXgrK107cmV0dXJuIG5ldyAkayhlLmNvbnRlbnQsZS5yYW5nZSl9ZnVuY3Rpb24gbkkodCl7aWYoIXQpcmV0dXJuIG5JKHtzdGFydDoiLyoqIixlbmQ6IiovIixsaW5lOiIqIn0pO2xldHtzdGFydDplLGVuZDpyLGxpbmU6bn09dDtyZXR1cm57c3RhcnQ6Sk0oZSwhMCksZW5kOkpNKHIsITEpLGxpbmU6Sk0obiwhMCl9fWZ1bmN0aW9uIEpNKHQsZSl7aWYodHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09Im9iamVjdCIpe2xldCByPXR5cGVvZiB0PT0ic3RyaW5nIj9RZCh0KTp0LnNvdXJjZTtyZXR1cm4gZT9uZXcgUmVnRXhwKGBeXFxzKiR7cn1gKTpuZXcgUmVnRXhwKGBcXHMqJHtyfVxccyokYCl9ZWxzZSByZXR1cm4gdH1mdW5jdGlvbiBxemUodCxlLHIpe3ZhciBuLGk7aWYodD09PSJsaW5rcGxhaW4ifHx0PT09Imxpbmtjb2RlInx8dD09PSJsaW5rIil7bGV0IGE9ZS5pbmRleE9mKCIgIikscz1lO2lmKGE+MCl7bGV0IHU9ZUkoZSxhKTtzPWUuc3Vic3RyaW5nKHUpLGU9ZS5zdWJzdHJpbmcoMCxhKX1yZXR1cm4odD09PSJsaW5rY29kZSJ8fHQ9PT0ibGluayImJnIubGluaz09PSJjb2RlIikmJihzPWBcYCR7c31cYGApLChpPShuPXIucmVuZGVyTGluayk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmNhbGwocixlLHMpKSE9PW51bGwmJmkhPT12b2lkIDA/aTpYemUoZSxzKX19ZnVuY3Rpb24gWHplKHQsZSl7dHJ5e3JldHVybiBPcy5wYXJzZSh0LCEwKSxgWyR7ZX1dKCR7dH0pYH1jYXRjaHtyZXR1cm4gdH19ZnVuY3Rpb24gVGNlKHQpe3JldHVybiB0LmVuZHNXaXRoKGAKYCk/YApgOmAKCmB9dmFyIHdjZSxCemUsR3plLCR6ZSxHayxleCx0eCwkayxpST1NKCgpPT57InVzZSBzdHJpY3QiO3VNKCk7V20oKTtNYygpO28odEksInBhcnNlSlNEb2MiKTtvKHJJLCJpc0pTRG9jIik7byhrY2UsImdldExpbmVzIik7d2NlPS9ccyooQChbXHB7TH1dW1xwe0x9XHB7Tn1dKik/KS91eSxCemU9L1x7KEBbXHB7TH1dW1xwe0x9XHB7Tn1dKikoXHMqKShbXlxyXG59XSspP1x9L2d1O28oRnplLCJ0b2tlbml6ZSIpO28oenplLCJidWlsZElubGluZVRva2VucyIpO0d6ZT0vXFMvLCR6ZT0vXHMqJC87byhlSSwic2tpcFdoaXRlc3BhY2UiKTtvKFZ6ZSwibGFzdENoYXJhY3RlciIpO28oVXplLCJwYXJzZUpTRG9jQ29tbWVudCIpO28oSHplLCJwYXJzZUpTRG9jRWxlbWVudCIpO28oV3plLCJhcHBlbmRFbXB0eUxpbmUiKTtvKEVjZSwicGFyc2VKU0RvY1RleHQiKTtvKFl6ZSwicGFyc2VKU0RvY0lubGluZSIpO28oU2NlLCJwYXJzZUpTRG9jVGFnIik7byhDY2UsInBhcnNlSlNEb2NMaW5lIik7byhuSSwibm9ybWFsaXplT3B0aW9ucyIpO28oSk0sIm5vcm1hbGl6ZU9wdGlvbiIpO0drPWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jQ29tbWVudEltcGwiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuZWxlbWVudHM9ZSx0aGlzLnJhbmdlPXJ9Z2V0VGFnKGUpe3JldHVybiB0aGlzLmdldEFsbFRhZ3MoKS5maW5kKHI9PnIubmFtZT09PWUpfWdldFRhZ3MoZSl7cmV0dXJuIHRoaXMuZ2V0QWxsVGFncygpLmZpbHRlcihyPT5yLm5hbWU9PT1lKX1nZXRBbGxUYWdzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGU9PiJuYW1lImluIGUpfXRvU3RyaW5nKCl7bGV0IGU9IiI7Zm9yKGxldCByIG9mIHRoaXMuZWxlbWVudHMpaWYoZS5sZW5ndGg9PT0wKWU9ci50b1N0cmluZygpO2Vsc2V7bGV0IG49ci50b1N0cmluZygpO2UrPVRjZShlKStufXJldHVybiBlLnRyaW0oKX10b01hcmtkb3duKGUpe2xldCByPSIiO2ZvcihsZXQgbiBvZiB0aGlzLmVsZW1lbnRzKWlmKHIubGVuZ3RoPT09MClyPW4udG9NYXJrZG93bihlKTtlbHNle2xldCBpPW4udG9NYXJrZG93bihlKTtyKz1UY2UocikraX1yZXR1cm4gci50cmltKCl9fSxleD1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY1RhZ0ltcGwiKX1jb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLm5hbWU9ZSx0aGlzLmNvbnRlbnQ9cix0aGlzLmlubGluZT1uLHRoaXMucmFuZ2U9aX10b1N0cmluZygpe2xldCBlPWBAJHt0aGlzLm5hbWV9YCxyPXRoaXMuY29udGVudC50b1N0cmluZygpO3JldHVybiB0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGg9PT0xP2U9YCR7ZX0gJHtyfWA6dGhpcy5jb250ZW50LmlubGluZXMubGVuZ3RoPjEmJihlPWAke2V9CiR7cn1gKSx0aGlzLmlubGluZT9geyR7ZX19YDplfXRvTWFya2Rvd24oZSl7dmFyIHIsbjtyZXR1cm4obj0ocj1lPy5yZW5kZXJUYWcpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5jYWxsKGUsdGhpcykpIT09bnVsbCYmbiE9PXZvaWQgMD9uOnRoaXMudG9NYXJrZG93bkRlZmF1bHQoZSl9dG9NYXJrZG93bkRlZmF1bHQoZSl7bGV0IHI9dGhpcy5jb250ZW50LnRvTWFya2Rvd24oZSk7aWYodGhpcy5pbmxpbmUpe2xldCBhPXF6ZSh0aGlzLm5hbWUscixlPz97fSk7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhfWxldCBuPSIiO2U/LnRhZz09PSJpdGFsaWMifHxlPy50YWc9PT12b2lkIDA/bj0iKiI6ZT8udGFnPT09ImJvbGQiP249IioqIjplPy50YWc9PT0iYm9sZC1pdGFsaWMiJiYobj0iKioqIik7bGV0IGk9YCR7bn1AJHt0aGlzLm5hbWV9JHtufWA7cmV0dXJuIHRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD09PTE/aT1gJHtpfSBcdTIwMTQgJHtyfWA6dGhpcy5jb250ZW50LmlubGluZXMubGVuZ3RoPjEmJihpPWAke2l9CiR7cn1gKSx0aGlzLmlubGluZT9geyR7aX19YDppfX07byhxemUsInJlbmRlcklubGluZVRhZyIpO28oWHplLCJyZW5kZXJMaW5rRGVmYXVsdCIpO3R4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jVGV4dEltcGwiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuaW5saW5lcz1lLHRoaXMucmFuZ2U9cn10b1N0cmluZygpe2xldCBlPSIiO2ZvcihsZXQgcj0wO3I8dGhpcy5pbmxpbmVzLmxlbmd0aDtyKyspe2xldCBuPXRoaXMuaW5saW5lc1tyXSxpPXRoaXMuaW5saW5lc1tyKzFdO2UrPW4udG9TdHJpbmcoKSxpJiZpLnJhbmdlLnN0YXJ0LmxpbmU+bi5yYW5nZS5zdGFydC5saW5lJiYoZSs9YApgKX1yZXR1cm4gZX10b01hcmtkb3duKGUpe2xldCByPSIiO2ZvcihsZXQgbj0wO248dGhpcy5pbmxpbmVzLmxlbmd0aDtuKyspe2xldCBpPXRoaXMuaW5saW5lc1tuXSxhPXRoaXMuaW5saW5lc1tuKzFdO3IrPWkudG9NYXJrZG93bihlKSxhJiZhLnJhbmdlLnN0YXJ0LmxpbmU+aS5yYW5nZS5zdGFydC5saW5lJiYocis9YApgKX1yZXR1cm4gcn19LCRrPWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jTGluZUltcGwiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMudGV4dD1lLHRoaXMucmFuZ2U9cn10b1N0cmluZygpe3JldHVybiB0aGlzLnRleHR9dG9NYXJrZG93bigpe3JldHVybiB0aGlzLnRleHR9fTtvKFRjZSwiZmlsbE5ld2xpbmVzIil9KTt2YXIgcngsYUk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtlcygpO2lJKCk7cng9Y2xhc3N7c3RhdGlje28odGhpcywiSlNEb2NEb2N1bWVudGF0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmluZGV4TWFuYWdlcj1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMuY29tbWVudFByb3ZpZGVyPWUuZG9jdW1lbnRhdGlvbi5Db21tZW50UHJvdmlkZXJ9Z2V0RG9jdW1lbnRhdGlvbihlKXtsZXQgcj10aGlzLmNvbW1lbnRQcm92aWRlci5nZXRDb21tZW50KGUpO2lmKHImJnJJKHIpKXJldHVybiB0SShyKS50b01hcmtkb3duKHtyZW5kZXJMaW5rOm8oKGksYSk9PnRoaXMuZG9jdW1lbnRhdGlvbkxpbmtSZW5kZXJlcihlLGksYSksInJlbmRlckxpbmsiKSxyZW5kZXJUYWc6byhpPT50aGlzLmRvY3VtZW50YXRpb25UYWdSZW5kZXJlcihlLGkpLCJyZW5kZXJUYWciKX0pfWRvY3VtZW50YXRpb25MaW5rUmVuZGVyZXIoZSxyLG4pe3ZhciBpO2xldCBhPShpPXRoaXMuZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKGUscikpIT09bnVsbCYmaSE9PXZvaWQgMD9pOnRoaXMuZmluZE5hbWVJbkdsb2JhbFNjb3BlKGUscik7aWYoYSYmYS5uYW1lU2VnbWVudCl7bGV0IHM9YS5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5saW5lKzEsbD1hLm5hbWVTZWdtZW50LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisxLHU9YS5kb2N1bWVudFVyaS53aXRoKHtmcmFnbWVudDpgTCR7c30sJHtsfWB9KTtyZXR1cm5gWyR7bn1dKCR7dS50b1N0cmluZygpfSlgfWVsc2UgcmV0dXJufWRvY3VtZW50YXRpb25UYWdSZW5kZXJlcihlLHIpe31maW5kTmFtZUluUHJlY29tcHV0ZWRTY29wZXMoZSxyKXtsZXQgaT1GaShlKS5wcmVjb21wdXRlZFNjb3BlcztpZighaSlyZXR1cm47bGV0IGE9ZTtkb3tsZXQgbD1pLmdldChhKS5maW5kKHU9PnUubmFtZT09PXIpO2lmKGwpcmV0dXJuIGw7YT1hLiRjb250YWluZXJ9d2hpbGUoYSl9ZmluZE5hbWVJbkdsb2JhbFNjb3BlKGUscil7cmV0dXJuIHRoaXMuaW5kZXhNYW5hZ2VyLmFsbEVsZW1lbnRzKCkuZmluZChpPT5pLm5hbWU9PT1yKX19fSk7dmFyIG54LHNJPU0oKCk9PnsidXNlIHN0cmljdCI7QmsoKTtNbCgpO254PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRDb21tZW50UHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmdyYW1tYXJDb25maWc9KCk9PmUucGFyc2VyLkdyYW1tYXJDb25maWd9Z2V0Q29tbWVudChlKXt2YXIgcjtyZXR1cm4gR00oZSk/ZS4kY29tbWVudDoocj1CRChlLiRjc3ROb2RlLHRoaXMuZ3JhbW1hckNvbmZpZygpLm11bHRpbGluZUNvbW1lbnRSdWxlcykpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci50ZXh0fX19KTt2YXIgbGk9e307dmFyIG9JPU0oKCk9PnsidXNlIHN0cmljdCI7RXIobGksa2EoQU0oKSwxKSl9KTt2YXIgaXgsbEksY0ksdUk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRbygpO29JKCk7aXg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdEFzeW5jUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5zeW5jUGFyc2VyPWUucGFyc2VyLkxhbmdpdW1QYXJzZXJ9cGFyc2UoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnN5bmNQYXJzZXIucGFyc2UoZSkpfX0sbEk9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy50aHJlYWRDb3VudD04LHRoaXMudGVybWluYXRpb25EZWxheT0yMDAsdGhpcy53b3JrZXJQb29sPVtdLHRoaXMucXVldWU9W10sdGhpcy5oeWRyYXRvcj1lLnNlcmlhbGl6ZXIuSHlkcmF0b3J9aW5pdGlhbGl6ZVdvcmtlcnMoKXtmb3IoO3RoaXMud29ya2VyUG9vbC5sZW5ndGg8dGhpcy50aHJlYWRDb3VudDspe2xldCBlPXRoaXMuY3JlYXRlV29ya2VyKCk7ZS5vblJlYWR5KCgpPT57aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCl7bGV0IHI9dGhpcy5xdWV1ZS5zaGlmdCgpO3ImJihlLmxvY2soKSxyLnJlc29sdmUoZSkpfX0pLHRoaXMud29ya2VyUG9vbC5wdXNoKGUpfX1hc3luYyBwYXJzZShlLHIpe2xldCBuPWF3YWl0IHRoaXMuYWNxdWlyZVBhcnNlcldvcmtlcihyKSxpPW5ldyBhcyxhLHM9ci5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgoKT0+e2E9c2V0VGltZW91dCgoKT0+e3RoaXMudGVybWluYXRlV29ya2VyKG4pfSx0aGlzLnRlcm1pbmF0aW9uRGVsYXkpfSk7cmV0dXJuIG4ucGFyc2UoZSkudGhlbihsPT57bGV0IHU9dGhpcy5oeWRyYXRvci5oeWRyYXRlKGwpO2kucmVzb2x2ZSh1KX0pLmNhdGNoKGw9PntpLnJlamVjdChsKX0pLmZpbmFsbHkoKCk9PntzLmRpc3Bvc2UoKSxjbGVhclRpbWVvdXQoYSl9KSxpLnByb21pc2V9dGVybWluYXRlV29ya2VyKGUpe2UudGVybWluYXRlKCk7bGV0IHI9dGhpcy53b3JrZXJQb29sLmluZGV4T2YoZSk7cj49MCYmdGhpcy53b3JrZXJQb29sLnNwbGljZShyLDEpfWFzeW5jIGFjcXVpcmVQYXJzZXJXb3JrZXIoZSl7dGhpcy5pbml0aWFsaXplV29ya2VycygpO2ZvcihsZXQgbiBvZiB0aGlzLndvcmtlclBvb2wpaWYobi5yZWFkeSlyZXR1cm4gbi5sb2NrKCksbjtsZXQgcj1uZXcgYXM7cmV0dXJuIGUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PntsZXQgbj10aGlzLnF1ZXVlLmluZGV4T2Yocik7bj49MCYmdGhpcy5xdWV1ZS5zcGxpY2UobiwxKSxyLnJlamVjdChSYyl9KSx0aGlzLnF1ZXVlLnB1c2gociksci5wcm9taXNlfX0sY0k9Y2xhc3N7c3RhdGlje28odGhpcywiUGFyc2VyV29ya2VyIil9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5fWdldCBvblJlYWR5KCl7cmV0dXJuIHRoaXMub25SZWFkeUVtaXR0ZXIuZXZlbnR9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5vblJlYWR5RW1pdHRlcj1uZXcgbGkuRW1pdHRlcix0aGlzLmRlZmVycmVkPW5ldyBhcyx0aGlzLl9yZWFkeT0hMCx0aGlzLl9wYXJzaW5nPSExLHRoaXMuc2VuZE1lc3NhZ2U9ZSx0aGlzLl90ZXJtaW5hdGU9aSxyKGE9PntsZXQgcz1hO3RoaXMuZGVmZXJyZWQucmVzb2x2ZShzKSx0aGlzLnVubG9jaygpfSksbihhPT57dGhpcy5kZWZlcnJlZC5yZWplY3QoYSksdGhpcy51bmxvY2soKX0pfXRlcm1pbmF0ZSgpe3RoaXMuZGVmZXJyZWQucmVqZWN0KFJjKSx0aGlzLl90ZXJtaW5hdGUoKX1sb2NrKCl7dGhpcy5fcmVhZHk9ITF9dW5sb2NrKCl7dGhpcy5fcGFyc2luZz0hMSx0aGlzLl9yZWFkeT0hMCx0aGlzLm9uUmVhZHlFbWl0dGVyLmZpcmUoKX1wYXJzZShlKXtpZih0aGlzLl9wYXJzaW5nKXRocm93IG5ldyBFcnJvcigiUGFyc2VyIHdvcmtlciBpcyBidXN5Iik7cmV0dXJuIHRoaXMuX3BhcnNpbmc9ITAsdGhpcy5kZWZlcnJlZD1uZXcgYXMsdGhpcy5zZW5kTWVzc2FnZShlKSx0aGlzLmRlZmVycmVkLnByb21pc2V9fX0pO3ZhciBheCxoST1NKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7UW8oKTtheD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0V29ya3NwYWNlTG9jayIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmV2aW91c1Rva2VuU291cmNlPW5ldyBDci5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZSx0aGlzLndyaXRlUXVldWU9W10sdGhpcy5yZWFkUXVldWU9W10sdGhpcy5kb25lPSEwfXdyaXRlKGUpe3RoaXMuY2FuY2VsV3JpdGUoKTtsZXQgcj1uZXcgQ3IuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U7cmV0dXJuIHRoaXMucHJldmlvdXNUb2tlblNvdXJjZT1yLHRoaXMuZW5xdWV1ZSh0aGlzLndyaXRlUXVldWUsZSxyLnRva2VuKX1yZWFkKGUpe3JldHVybiB0aGlzLmVucXVldWUodGhpcy5yZWFkUXVldWUsZSl9ZW5xdWV1ZShlLHIsbil7bGV0IGk9bmV3IGFzLGE9e2FjdGlvbjpyLGRlZmVycmVkOmksY2FuY2VsbGF0aW9uVG9rZW46bj8/Q3IuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZX07cmV0dXJuIGUucHVzaChhKSx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCksaS5wcm9taXNlfWFzeW5jIHBlcmZvcm1OZXh0T3BlcmF0aW9uKCl7aWYoIXRoaXMuZG9uZSlyZXR1cm47bGV0IGU9W107aWYodGhpcy53cml0ZVF1ZXVlLmxlbmd0aD4wKWUucHVzaCh0aGlzLndyaXRlUXVldWUuc2hpZnQoKSk7ZWxzZSBpZih0aGlzLnJlYWRRdWV1ZS5sZW5ndGg+MCllLnB1c2goLi4udGhpcy5yZWFkUXVldWUuc3BsaWNlKDAsdGhpcy5yZWFkUXVldWUubGVuZ3RoKSk7ZWxzZSByZXR1cm47dGhpcy5kb25lPSExLGF3YWl0IFByb21pc2UuYWxsKGUubWFwKGFzeW5jKHthY3Rpb246cixkZWZlcnJlZDpuLGNhbmNlbGxhdGlvblRva2VuOml9KT0+e3RyeXtsZXQgYT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yKGkpKTtuLnJlc29sdmUoYSl9Y2F0Y2goYSl7c2YoYSk/bi5yZXNvbHZlKHZvaWQgMCk6bi5yZWplY3QoYSl9fSkpLHRoaXMuZG9uZT0hMCx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCl9Y2FuY2VsV3JpdGUoKXt0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2UuY2FuY2VsKCl9fX0pO3ZhciBzeCxmST1NKCgpPT57InVzZSBzdHJpY3QiO0NrKCk7QWMoKTtZbygpO2VzKCk7U2coKTtNbCgpO3N4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRIeWRyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcD1uZXcgcDAsdGhpcy50b2tlblR5cGVJZE1hcD1uZXcgcDAsdGhpcy5ncmFtbWFyPWUuR3JhbW1hcix0aGlzLmxleGVyPWUucGFyc2VyLkxleGVyLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXJ9ZGVoeWRyYXRlKGUpe3JldHVybntsZXhlckVycm9yczplLmxleGVyRXJyb3JzLm1hcChyPT5PYmplY3QuYXNzaWduKHt9LHIpKSxwYXJzZXJFcnJvcnM6ZS5wYXJzZXJFcnJvcnMubWFwKHI9Pk9iamVjdC5hc3NpZ24oe30scikpLHZhbHVlOnRoaXMuZGVoeWRyYXRlQXN0Tm9kZShlLnZhbHVlLHRoaXMuY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQoZS52YWx1ZSkpfX1jcmVhdGVEZWh5cmF0aW9uQ29udGV4dChlKXtsZXQgcj1uZXcgTWFwLG49bmV3IE1hcDtmb3IobGV0IGkgb2Ygam8oZSkpci5zZXQoaSx7fSk7aWYoZS4kY3N0Tm9kZSlmb3IobGV0IGkgb2YgVWQoZS4kY3N0Tm9kZSkpbi5zZXQoaSx7fSk7cmV0dXJue2FzdE5vZGVzOnIsY3N0Tm9kZXM6bn19ZGVoeWRyYXRlQXN0Tm9kZShlLHIpe2xldCBuPXIuYXN0Tm9kZXMuZ2V0KGUpO24uJHR5cGU9ZS4kdHlwZSxuLiRjb250YWluZXJJbmRleD1lLiRjb250YWluZXJJbmRleCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLiRjb250YWluZXJQcm9wZXJ0eSxlLiRjc3ROb2RlIT09dm9pZCAwJiYobi4kY3N0Tm9kZT10aGlzLmRlaHlkcmF0ZUNzdE5vZGUoZS4kY3N0Tm9kZSxyKSk7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoIWkuc3RhcnRzV2l0aCgiJCIpKWlmKEFycmF5LmlzQXJyYXkoYSkpe2xldCBzPVtdO25baV09cztmb3IobGV0IGwgb2YgYSllaShsKT9zLnB1c2godGhpcy5kZWh5ZHJhdGVBc3ROb2RlKGwscikpOm1hKGwpP3MucHVzaCh0aGlzLmRlaHlkcmF0ZVJlZmVyZW5jZShsLHIpKTpzLnB1c2gobCl9ZWxzZSBlaShhKT9uW2ldPXRoaXMuZGVoeWRyYXRlQXN0Tm9kZShhLHIpOm1hKGEpP25baV09dGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UoYSxyKTphIT09dm9pZCAwJiYobltpXT1hKTtyZXR1cm4gbn1kZWh5ZHJhdGVSZWZlcmVuY2UoZSxyKXtsZXQgbj17fTtyZXR1cm4gbi4kcmVmVGV4dD1lLiRyZWZUZXh0LGUuJHJlZk5vZGUmJihuLiRyZWZOb2RlPXIuY3N0Tm9kZXMuZ2V0KGUuJHJlZk5vZGUpKSxufWRlaHlkcmF0ZUNzdE5vZGUoZSxyKXtsZXQgbj1yLmNzdE5vZGVzLmdldChlKTtyZXR1cm4gR3YoZSk/bi5mdWxsVGV4dD1lLmZ1bGxUZXh0Om4uZ3JhbW1hclNvdXJjZT10aGlzLmdldEdyYW1tYXJFbGVtZW50SWQoZS5ncmFtbWFyU291cmNlKSxuLmhpZGRlbj1lLmhpZGRlbixuLmFzdE5vZGU9ci5hc3ROb2Rlcy5nZXQoZS5hc3ROb2RlKSxpbyhlKT9uLmNvbnRlbnQ9ZS5jb250ZW50Lm1hcChpPT50aGlzLmRlaHlkcmF0ZUNzdE5vZGUoaSxyKSk6SmgoZSkmJihuLnRva2VuVHlwZT1lLnRva2VuVHlwZS5uYW1lLG4ub2Zmc2V0PWUub2Zmc2V0LG4ubGVuZ3RoPWUubGVuZ3RoLG4uc3RhcnRMaW5lPWUucmFuZ2Uuc3RhcnQubGluZSxuLnN0YXJ0Q29sdW1uPWUucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLG4uZW5kTGluZT1lLnJhbmdlLmVuZC5saW5lLG4uZW5kQ29sdW1uPWUucmFuZ2UuZW5kLmNoYXJhY3Rlciksbn1oeWRyYXRlKGUpe2xldCByPWUudmFsdWUsbj10aGlzLmNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQocik7cmV0dXJuIiRjc3ROb2RlImluIHImJnRoaXMuaHlkcmF0ZUNzdE5vZGUoci4kY3N0Tm9kZSxuKSx7bGV4ZXJFcnJvcnM6ZS5sZXhlckVycm9ycyxwYXJzZXJFcnJvcnM6ZS5wYXJzZXJFcnJvcnMsdmFsdWU6dGhpcy5oeWRyYXRlQXN0Tm9kZShyLG4pfX1jcmVhdGVIeWRyYXRpb25Db250ZXh0KGUpe2xldCByPW5ldyBNYXAsbj1uZXcgTWFwO2ZvcihsZXQgYSBvZiBqbyhlKSlyLnNldChhLHt9KTtsZXQgaTtpZihlLiRjc3ROb2RlKWZvcihsZXQgYSBvZiBVZChlLiRjc3ROb2RlKSl7bGV0IHM7ImZ1bGxUZXh0ImluIGE/KHM9bmV3IHZnKGEuZnVsbFRleHQpLGk9cyk6ImNvbnRlbnQiaW4gYT9zPW5ldyB1MDoidG9rZW5UeXBlImluIGEmJihzPXRoaXMuaHlkcmF0ZUNzdExlYWZOb2RlKGEpKSxzJiYobi5zZXQoYSxzKSxzLnJvb3Q9aSl9cmV0dXJue2FzdE5vZGVzOnIsY3N0Tm9kZXM6bn19aHlkcmF0ZUFzdE5vZGUoZSxyKXtsZXQgbj1yLmFzdE5vZGVzLmdldChlKTtuLiR0eXBlPWUuJHR5cGUsbi4kY29udGFpbmVySW5kZXg9ZS4kY29udGFpbmVySW5kZXgsbi4kY29udGFpbmVyUHJvcGVydHk9ZS4kY29udGFpbmVyUHJvcGVydHksZS4kY3N0Tm9kZSYmKG4uJGNzdE5vZGU9ci5jc3ROb2Rlcy5nZXQoZS4kY3N0Tm9kZSkpO2ZvcihsZXRbaSxhXW9mIE9iamVjdC5lbnRyaWVzKGUpKWlmKCFpLnN0YXJ0c1dpdGgoIiQiKSlpZihBcnJheS5pc0FycmF5KGEpKXtsZXQgcz1bXTtuW2ldPXM7Zm9yKGxldCBsIG9mIGEpZWkobCk/cy5wdXNoKHRoaXMuc2V0UGFyZW50KHRoaXMuaHlkcmF0ZUFzdE5vZGUobCxyKSxuKSk6bWEobCk/cy5wdXNoKHRoaXMuaHlkcmF0ZVJlZmVyZW5jZShsLG4saSxyKSk6cy5wdXNoKGwpfWVsc2UgZWkoYSk/bltpXT10aGlzLnNldFBhcmVudCh0aGlzLmh5ZHJhdGVBc3ROb2RlKGEsciksbik6bWEoYSk/bltpXT10aGlzLmh5ZHJhdGVSZWZlcmVuY2UoYSxuLGkscik6YSE9PXZvaWQgMCYmKG5baV09YSk7cmV0dXJuIG59c2V0UGFyZW50KGUscil7cmV0dXJuIGUuJGNvbnRhaW5lcj1yLGV9aHlkcmF0ZVJlZmVyZW5jZShlLHIsbixpKXtyZXR1cm4gdGhpcy5saW5rZXIuYnVpbGRSZWZlcmVuY2UocixuLGkuY3N0Tm9kZXMuZ2V0KGUuJHJlZk5vZGUpLGUuJHJlZlRleHQpfWh5ZHJhdGVDc3ROb2RlKGUscixuPTApe2xldCBpPXIuY3N0Tm9kZXMuZ2V0KGUpO2lmKHR5cGVvZiBlLmdyYW1tYXJTb3VyY2U9PSJudW1iZXIiJiYoaS5ncmFtbWFyU291cmNlPXRoaXMuZ2V0R3JhbW1hckVsZW1lbnQoZS5ncmFtbWFyU291cmNlKSksaS5hc3ROb2RlPXIuYXN0Tm9kZXMuZ2V0KGUuYXN0Tm9kZSksaW8oaSkpZm9yKGxldCBhIG9mIGUuY29udGVudCl7bGV0IHM9dGhpcy5oeWRyYXRlQ3N0Tm9kZShhLHIsbisrKTtpLmNvbnRlbnQucHVzaChzKX1yZXR1cm4gaX1oeWRyYXRlQ3N0TGVhZk5vZGUoZSl7bGV0IHI9dGhpcy5nZXRUb2tlblR5cGUoZS50b2tlblR5cGUpLG49ZS5vZmZzZXQsaT1lLmxlbmd0aCxhPWUuc3RhcnRMaW5lLHM9ZS5zdGFydENvbHVtbixsPWUuZW5kTGluZSx1PWUuZW5kQ29sdW1uLGg9ZS5oaWRkZW47cmV0dXJuIG5ldyBjMChuLGkse3N0YXJ0OntsaW5lOmEsY2hhcmFjdGVyOnN9LGVuZDp7bGluZTpsLGNoYXJhY3Rlcjp1fX0scixoKX1nZXRUb2tlblR5cGUoZSl7cmV0dXJuIHRoaXMubGV4ZXIuZGVmaW5pdGlvbltlXX1nZXRHcmFtbWFyRWxlbWVudElkKGUpe3JldHVybiB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuc2l6ZT09PTAmJnRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpLHRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5nZXQoZSl9Z2V0R3JhbW1hckVsZW1lbnQoZSl7dGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemU9PT0wJiZ0aGlzLmNyZWF0ZUdyYW1tYXJFbGVtZW50SWRNYXAoKTtsZXQgcj10aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0S2V5KGUpO2lmKHIpcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGdyYW1tYXIgZWxlbWVudCBpZDogIitlKX1jcmVhdGVHcmFtbWFyRWxlbWVudElkTWFwKCl7bGV0IGU9MDtmb3IobGV0IHIgb2Ygam8odGhpcy5ncmFtbWFyKSlIdihyKSYmdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNldChyLGUrKyl9fX0pO2Z1bmN0aW9uIGxvKHQpe3JldHVybntkb2N1bWVudGF0aW9uOntDb21tZW50UHJvdmlkZXI6byhlPT5uZXcgbngoZSksIkNvbW1lbnRQcm92aWRlciIpLERvY3VtZW50YXRpb25Qcm92aWRlcjpvKGU9Pm5ldyByeChlKSwiRG9jdW1lbnRhdGlvblByb3ZpZGVyIil9LHBhcnNlcjp7QXN5bmNQYXJzZXI6byhlPT5uZXcgaXgoZSksIkFzeW5jUGFyc2VyIiksR3JhbW1hckNvbmZpZzpvKGU9PmxSKGUpLCJHcmFtbWFyQ29uZmlnIiksTGFuZ2l1bVBhcnNlcjpvKGU9PnZNKGUpLCJMYW5naXVtUGFyc2VyIiksQ29tcGxldGlvblBhcnNlcjpvKGU9PmdNKGUpLCJDb21wbGV0aW9uUGFyc2VyIiksVmFsdWVDb252ZXJ0ZXI6bygoKT0+bmV3IGQwLCJWYWx1ZUNvbnZlcnRlciIpLFRva2VuQnVpbGRlcjpvKCgpPT5uZXcgZjAsIlRva2VuQnVpbGRlciIpLExleGVyOm8oZT0+bmV3IEoyKGUpLCJMZXhlciIpLFBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyOm8oKCk9Pm5ldyB4ZywiUGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX0sd29ya3NwYWNlOntBc3ROb2RlTG9jYXRvcjpvKCgpPT5uZXcgWDIsIkFzdE5vZGVMb2NhdG9yIiksQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI6byhlPT5uZXcgWTIoZSksIkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyIiksUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjpvKGU9Pm5ldyBxMihlKSwiUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlciIpfSxyZWZlcmVuY2VzOntMaW5rZXI6byhlPT5uZXcgSTIoZSksIkxpbmtlciIpLE5hbWVQcm92aWRlcjpvKCgpPT5uZXcgTzIsIk5hbWVQcm92aWRlciIpLFNjb3BlUHJvdmlkZXI6byhlPT5uZXcgRzIoZSksIlNjb3BlUHJvdmlkZXIiKSxTY29wZUNvbXB1dGF0aW9uOm8oZT0+bmV3IEIyKGUpLCJTY29wZUNvbXB1dGF0aW9uIiksUmVmZXJlbmNlczpvKGU9Pm5ldyBQMihlKSwiUmVmZXJlbmNlcyIpfSxzZXJpYWxpemVyOntIeWRyYXRvcjpvKGU9Pm5ldyBzeChlKSwiSHlkcmF0b3IiKSxKc29uU2VyaWFsaXplcjpvKGU9Pm5ldyAkMihlKSwiSnNvblNlcmlhbGl6ZXIiKX0sdmFsaWRhdGlvbjp7RG9jdW1lbnRWYWxpZGF0b3I6byhlPT5uZXcgVzIoZSksIkRvY3VtZW50VmFsaWRhdG9yIiksVmFsaWRhdGlvblJlZ2lzdHJ5Om8oZT0+bmV3IFUyKGUpLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX0sc2hhcmVkOm8oKCk9PnQuc2hhcmVkLCJzaGFyZWQiKX19ZnVuY3Rpb24gY28odCl7cmV0dXJue1NlcnZpY2VSZWdpc3RyeTpvKCgpPT5uZXcgVjIsIlNlcnZpY2VSZWdpc3RyeSIpLHdvcmtzcGFjZTp7TGFuZ2l1bURvY3VtZW50czpvKGU9Pm5ldyBNMihlKSwiTGFuZ2l1bURvY3VtZW50cyIpLExhbmdpdW1Eb2N1bWVudEZhY3Rvcnk6byhlPT5uZXcgUjIoZSksIkxhbmdpdW1Eb2N1bWVudEZhY3RvcnkiKSxEb2N1bWVudEJ1aWxkZXI6byhlPT5uZXcgSzIoZSksIkRvY3VtZW50QnVpbGRlciIpLEluZGV4TWFuYWdlcjpvKGU9Pm5ldyBRMihlKSwiSW5kZXhNYW5hZ2VyIiksV29ya3NwYWNlTWFuYWdlcjpvKGU9Pm5ldyBaMihlKSwiV29ya3NwYWNlTWFuYWdlciIpLEZpbGVTeXN0ZW1Qcm92aWRlcjpvKGU9PnQuZmlsZVN5c3RlbVByb3ZpZGVyKGUpLCJGaWxlU3lzdGVtUHJvdmlkZXIiKSxXb3Jrc3BhY2VMb2NrOm8oKCk9Pm5ldyBheCwiV29ya3NwYWNlTG9jayIpLENvbmZpZ3VyYXRpb25Qcm92aWRlcjpvKGU9Pm5ldyBqMihlKSwiQ29uZmlndXJhdGlvblByb3ZpZGVyIil9fX12YXIgZEk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjUigpO3lNKCk7eE0oKTtiTSgpO3dNKCk7SU0oKTtPTSgpO1BNKCk7Qk0oKTt6TSgpO0JrKCk7JE0oKTtWTSgpO0gyKCk7VU0oKTtITSgpO1dNKCk7cU0oKTtFZygpO1hNKCk7ak0oKTtaTSgpO2FJKCk7c0koKTtOMigpO3VJKCk7aEkoKTtmSSgpO28obG8sImNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlIik7byhjbywiY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUiKX0pO2Z1bmN0aW9uICRpKHQsZSxyLG4saSxhLHMsbCx1KXtsZXQgaD1bdCxlLHIsbixpLGEscyxsLHVdLnJlZHVjZShWayx7fSk7cmV0dXJuIERjZShoKX1mdW5jdGlvbiBMY2UodCl7aWYodCYmdFttSV0pZm9yKGxldCBlIG9mIE9iamVjdC52YWx1ZXModCkpTGNlKGUpO3JldHVybiB0fWZ1bmN0aW9uIERjZSh0LGUpe2xldCByPW5ldyBQcm94eSh7fSx7ZGVsZXRlUHJvcGVydHk6bygoKT0+ITEsImRlbGV0ZVByb3BlcnR5IiksZ2V0Om8oKG4saSk9Pl9jZShuLGksdCxlfHxyKSwiZ2V0IiksZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOm8oKG4saSk9PihfY2UobixpLHQsZXx8ciksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpKSwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksaGFzOm8oKG4saSk9PmkgaW4gdCwiaGFzIiksb3duS2V5czpvKCgpPT5bLi4uUmVmbGVjdC5vd25LZXlzKHQpLG1JXSwib3duS2V5cyIpfSk7cmV0dXJuIHJbbUldPSEwLHJ9ZnVuY3Rpb24gX2NlKHQsZSxyLG4pe2lmKGUgaW4gdCl7aWYodFtlXWluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbmV3IEVycm9yKCJDb25zdHJ1Y3Rpb24gZmFpbHVyZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdXIgZGVwZW5kZW5jaWVzIGFyZSBjb25zdHJ1Y3RhYmxlLiIse2NhdXNlOnRbZV19KTtpZih0W2VdPT09QWNlKXRocm93IG5ldyBFcnJvcignQ3ljbGUgZGV0ZWN0ZWQuIFBsZWFzZSBtYWtlICInK1N0cmluZyhlKSsnIiBsYXp5LiBTZWUgaHR0cHM6Ly9sYW5naXVtLm9yZy9kb2NzL2NvbmZpZ3VyYXRpb24tc2VydmljZXMvI3Jlc29sdmluZy1jeWNsaWMtZGVwZW5kZW5jaWVzJyk7cmV0dXJuIHRbZV19ZWxzZSBpZihlIGluIHIpe2xldCBpPXJbZV07dFtlXT1BY2U7dHJ5e3RbZV09dHlwZW9mIGk9PSJmdW5jdGlvbiI/aShuKTpEY2UoaSxuKX1jYXRjaChhKXt0aHJvdyB0W2VdPWEgaW5zdGFuY2VvZiBFcnJvcj9hOnZvaWQgMCxhfXJldHVybiB0W2VdfWVsc2UgcmV0dXJufWZ1bmN0aW9uIFZrKHQsZSl7aWYoZSl7Zm9yKGxldFtyLG5db2YgT2JqZWN0LmVudHJpZXMoZSkpaWYobiE9PXZvaWQgMCl7bGV0IGk9dFtyXTtpIT09bnVsbCYmbiE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0IiYmdHlwZW9mIG49PSJvYmplY3QiP3Rbcl09VmsoaSxuKTp0W3JdPW59fXJldHVybiB0fXZhciBwSSxtSSxBY2UsZ0k9TSgoKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7dC5tZXJnZT0oZSxyKT0+VmsoVmsoe30sZSkscil9KShwSXx8KHBJPXt9KSk7bygkaSwiaW5qZWN0Iik7bUk9U3ltYm9sKCJpc1Byb3h5Iik7byhMY2UsImVhZ2VyTG9hZCIpO28oRGNlLCJfaW5qZWN0Iik7QWNlPVN5bWJvbCgpO28oX2NlLCJfcmVzb2x2ZSIpO28oVmssIl9tZXJnZSIpfSk7dmFyIE5jZT1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIFJjZT1NKCgpPT57InVzZSBzdHJpY3QiO3NJKCk7YUkoKTtpSSgpfSk7dmFyIE1jZT1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEljZT1NKCgpPT57InVzZSBzdHJpY3QiO2NSKCk7TWNlKCl9KTt2YXIgT2NlPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgUGNlPU0oKCk9PnsidXNlIHN0cmljdCI7dUkoKTt5TSgpO0NrKCk7eE0oKTtOMigpO1pNKCk7T2NlKCk7Yk0oKTt3TSgpfSk7dmFyIEJjZT1NKCgpPT57InVzZSBzdHJpY3QiO0lNKCk7T00oKTtQTSgpO0ZNKCk7Qk0oKTt6TSgpfSk7dmFyIEZjZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZJKCk7QmsoKX0pO3ZhciBVayx1byx5ST1NKCgpPT57InVzZSBzdHJpY3QiO1VrPWNsYXNze3N0YXRpY3tvKHRoaXMsIkVtcHR5RmlsZVN5c3RlbVByb3ZpZGVyIil9cmVhZEZpbGUoKXt0aHJvdyBuZXcgRXJyb3IoIk5vIGZpbGUgc3lzdGVtIGlzIGF2YWlsYWJsZS4iKX1hc3luYyByZWFkRGlyZWN0b3J5KCl7cmV0dXJuW119fSx1bz17ZmlsZVN5c3RlbVByb3ZpZGVyOm8oKCk9Pm5ldyBVaywiZmlsZVN5c3RlbVByb3ZpZGVyIil9fSk7ZnVuY3Rpb24gUXplKCl7bGV0IHQ9JGkoY28odW8pLEt6ZSksZT0kaShsbyh7c2hhcmVkOnR9KSxqemUpO3JldHVybiB0LlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihlKSxlfWZ1bmN0aW9uIG9mKHQpe3ZhciBlO2xldCByPVF6ZSgpLG49ci5zZXJpYWxpemVyLkpzb25TZXJpYWxpemVyLmRlc2VyaWFsaXplKHQpO3JldHVybiByLnNoYXJlZC53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tTW9kZWwobixPcy5wYXJzZShgbWVtb3J5Oi8vJHsoZT1uLm5hbWUpIT09bnVsbCYmZSE9PXZvaWQgMD9lOiJncmFtbWFyIn0ubGFuZ2l1bWApKSxufXZhciBqemUsS3plLHpjZT1NKCgpPT57InVzZSBzdHJpY3QiO2RJKCk7Z0koKTtBYygpO3lJKCk7TWMoKTtqemU9e0dyYW1tYXI6bygoKT0+e30sIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOm8oKCk9Pih7Y2FzZUluc2Vuc2l0aXZlOiExLGZpbGVFeHRlbnNpb25zOlsiLmxhbmdpdW0iXSxsYW5ndWFnZUlkOiJsYW5naXVtIn0pLCJMYW5ndWFnZU1ldGFEYXRhIil9LEt6ZT17QXN0UmVmbGVjdGlvbjpvKCgpPT5uZXcgVm0sIkFzdFJlZmxlY3Rpb24iKX07byhRemUsImNyZWF0ZU1pbmltYWxHcmFtbWFyU2VydmljZXMiKTtvKG9mLCJsb2FkR3JhbW1hckZyb21Kc29uIil9KTt2YXIgR3I9e307dnIoR3Ise0FzdFV0aWxzOigpPT5BVCxCaU1hcDooKT0+cDAsQ2FuY2VsbGF0aW9uOigpPT5DcixDb250ZXh0Q2FjaGU6KCk9Pm0wLENzdFV0aWxzOigpPT5tVCxET05FX1JFU1VMVDooKT0+SmEsRGVmZXJyZWQ6KCk9PmFzLERpc3Bvc2FibGU6KCk9PmcwLERpc3Bvc2FibGVDYWNoZTooKT0+QWcsRG9jdW1lbnRDYWNoZTooKT0+T2ssRU1QVFlfU1RSRUFNOigpPT4kdixFcnJvcldpdGhMb2NhdGlvbjooKT0+V2QsR3JhbW1hclV0aWxzOigpPT5NVCxNdWx0aU1hcDooKT0+SWMsT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5SYyxSZWR1Y3Rpb246KCk9PkdtLFJlZ0V4cFV0aWxzOigpPT5OVCxTaW1wbGVDYWNoZTooKT0+ejIsU3RyZWFtSW1wbDooKT0+YW8sVHJlZVN0cmVhbUltcGw6KCk9PkNjLFVSSTooKT0+T3MsVXJpVXRpbHM6KCk9PnNzLFdvcmtzcGFjZUNhY2hlOigpPT5fZyxhc3NlcnRVbnJlYWNoYWJsZTooKT0+ZWYsZGVsYXlOZXh0VGljazooKT0+Tk0saW50ZXJydXB0QW5kQ2hlY2s6KCk9PkdpLGlzT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5zZixsb2FkR3JhbW1hckZyb21Kc29uOigpPT5vZixzZXRJbnRlcnJ1cHRpb25QZXJpb2Q6KCk9PmhjZSxzdGFydENhbmNlbGFibGVPcGVyYXRpb246KCk9PnVjZSxzdHJlYW06KCk9PnRufSk7dmFyIEdjZT1NKCgpPT57InVzZSBzdHJpY3QiO1BrKCk7b0koKTtFcihHcixsaSk7U2coKTtZTSgpO2dUKCk7emNlKCk7UW8oKTtScygpO01jKCk7ZXMoKTtLbygpO01sKCk7UGwoKTtXbSgpfSk7dmFyICRjZT1NKCgpPT57InVzZSBzdHJpY3QiO1ZNKCk7SDIoKX0pO3ZhciBWY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVTSgpO0hNKCk7V00oKTtxTSgpO0VnKCk7eUkoKTtYTSgpO2hJKCk7ak0oKX0pO3ZhciBnYT17fTt2cihnYSx7QWJzdHJhY3RBc3RSZWZsZWN0aW9uOigpPT4kZCxBYnN0cmFjdENzdE5vZGU6KCk9PkEyLEFic3RyYWN0TGFuZ2l1bVBhcnNlcjooKT0+XzIsQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjooKT0+X2ssQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyOigpPT5sSSxBc3RVdGlsczooKT0+QVQsQmlNYXA6KCk9PnAwLENhbmNlbGxhdGlvbjooKT0+Q3IsQ29tcG9zaXRlQ3N0Tm9kZUltcGw6KCk9PnUwLENvbnRleHRDYWNoZTooKT0+bTAsQ3N0Tm9kZUJ1aWxkZXI6KCk9PkMyLENzdFV0aWxzOigpPT5tVCxET05FX1JFU1VMVDooKT0+SmEsRGF0YXR5cGVTeW1ib2w6KCk9PkFrLERlZmF1bHRBc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlcjooKT0+WTIsRGVmYXVsdEFzdE5vZGVMb2NhdG9yOigpPT5YMixEZWZhdWx0QXN5bmNQYXJzZXI6KCk9Pml4LERlZmF1bHRDb21tZW50UHJvdmlkZXI6KCk9Pm54LERlZmF1bHRDb25maWd1cmF0aW9uUHJvdmlkZXI6KCk9PmoyLERlZmF1bHREb2N1bWVudEJ1aWxkZXI6KCk9PksyLERlZmF1bHREb2N1bWVudFZhbGlkYXRvcjooKT0+VzIsRGVmYXVsdEh5ZHJhdG9yOigpPT5zeCxEZWZhdWx0SW5kZXhNYW5hZ2VyOigpPT5RMixEZWZhdWx0SnNvblNlcmlhbGl6ZXI6KCk9PiQyLERlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5OigpPT5SMixEZWZhdWx0TGFuZ2l1bURvY3VtZW50czooKT0+TTIsRGVmYXVsdExleGVyOigpPT5KMixEZWZhdWx0TGlua2VyOigpPT5JMixEZWZhdWx0TmFtZVByb3ZpZGVyOigpPT5PMixEZWZhdWx0UmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjooKT0+cTIsRGVmYXVsdFJlZmVyZW5jZXM6KCk9PlAyLERlZmF1bHRTY29wZUNvbXB1dGF0aW9uOigpPT5CMixEZWZhdWx0U2NvcGVQcm92aWRlcjooKT0+RzIsRGVmYXVsdFNlcnZpY2VSZWdpc3RyeTooKT0+VjIsRGVmYXVsdFRva2VuQnVpbGRlcjooKT0+ZjAsRGVmYXVsdFZhbHVlQ29udmVydGVyOigpPT5kMCxEZWZhdWx0V29ya3NwYWNlTG9jazooKT0+YXgsRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXI6KCk9PloyLERlZmVycmVkOigpPT5hcyxEaXNwb3NhYmxlOigpPT5nMCxEaXNwb3NhYmxlQ2FjaGU6KCk9PkFnLERvY3VtZW50Q2FjaGU6KCk9Pk9rLERvY3VtZW50U3RhdGU6KCk9PmJuLERvY3VtZW50VmFsaWRhdG9yOigpPT4kdSxFTVBUWV9TQ09QRTooKT0+UHplLEVNUFRZX1NUUkVBTTooKT0+JHYsRW1wdHlGaWxlU3lzdGVtOigpPT51byxFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlcjooKT0+VWssRXJyb3JXaXRoTG9jYXRpb246KCk9PldkLEdyYW1tYXJBU1Q6KCk9Pll2LEdyYW1tYXJVdGlsczooKT0+TVQsSlNEb2NEb2N1bWVudGF0aW9uUHJvdmlkZXI6KCk9PnJ4LExhbmdpdW1Db21wbGV0aW9uUGFyc2VyOigpPT5EMixMYW5naXVtUGFyc2VyOigpPT5MMixMYW5naXVtUGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXI6KCk9PnhnLExlYWZDc3ROb2RlSW1wbDooKT0+YzAsTWFwU2NvcGU6KCk9PkYyLE1vZHVsZTooKT0+cEksTXVsdGlNYXA6KCk9PkljLE9wZXJhdGlvbkNhbmNlbGxlZDooKT0+UmMsUGFyc2VyV29ya2VyOigpPT5jSSxSZWR1Y3Rpb246KCk9PkdtLFJlZ0V4cFV0aWxzOigpPT5OVCxSb290Q3N0Tm9kZUltcGw6KCk9PnZnLFNpbXBsZUNhY2hlOigpPT56MixTdHJlYW1JbXBsOigpPT5hbyxTdHJlYW1TY29wZTooKT0+Q2csVGV4dERvY3VtZW50OigpPT5UZyxUcmVlU3RyZWFtSW1wbDooKT0+Q2MsVVJJOigpPT5PcyxVcmlVdGlsczooKT0+c3MsVmFsaWRhdGlvbkNhdGVnb3J5OigpPT5MZyxWYWxpZGF0aW9uUmVnaXN0cnk6KCk9PlUyLFZhbHVlQ29udmVydGVyOigpPT5OYyxXb3Jrc3BhY2VDYWNoZTooKT0+X2csYXNzZXJ0VW5yZWFjaGFibGU6KCk9PmVmLGNyZWF0ZUNvbXBsZXRpb25QYXJzZXI6KCk9PmdNLGNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlOigpPT5sbyxjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZTooKT0+Y28sY3JlYXRlR3JhbW1hckNvbmZpZzooKT0+bFIsY3JlYXRlTGFuZ2l1bVBhcnNlcjooKT0+dk0sZGVsYXlOZXh0VGljazooKT0+Tk0sZGlhZ25vc3RpY0RhdGE6KCk9PkZrLGVhZ2VyTG9hZDooKT0+TGNlLGdldERpYWdub3N0aWNSYW5nZTooKT0+eGNlLGluamVjdDooKT0+JGksaW50ZXJydXB0QW5kQ2hlY2s6KCk9PkdpLGlzQXN0Tm9kZTooKT0+ZWksaXNBc3ROb2RlRGVzY3JpcHRpb246KCk9Pk1ELGlzQXN0Tm9kZVdpdGhDb21tZW50OigpPT5HTSxpc0NvbXBvc2l0ZUNzdE5vZGU6KCk9PmlvLGlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbjooKT0+UU0saXNKU0RvYzooKT0+ckksaXNMZWFmQ3N0Tm9kZTooKT0+SmgsaXNMaW5raW5nRXJyb3I6KCk9PlZkLGlzTmFtZWQ6KCk9PnljZSxpc09wZXJhdGlvbkNhbmNlbGxlZDooKT0+c2YsaXNSZWZlcmVuY2U6KCk9Pm1hLGlzUm9vdENzdE5vZGU6KCk9Pkd2LGlzVG9rZW5UeXBlQXJyYXk6KCk9PmJjZSxpc1Rva2VuVHlwZURpY3Rpb25hcnk6KCk9PktNLGxvYWRHcmFtbWFyRnJvbUpzb246KCk9Pm9mLHBhcnNlSlNEb2M6KCk9PnRJLHByZXBhcmVMYW5naXVtUGFyc2VyOigpPT5uY2Usc2V0SW50ZXJydXB0aW9uUGVyaW9kOigpPT5oY2Usc3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uOigpPT51Y2Usc3RyZWFtOigpPT50bix0b0RpYWdub3N0aWNTZXZlcml0eTooKT0+emt9KTt2YXIgT2M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkSSgpO2dJKCk7JE0oKTtOY2UoKTtZbygpO1JjZSgpO0ljZSgpO1BjZSgpO0JjZSgpO0ZjZSgpO0djZSgpO0VyKGdhLEdyKTskY2UoKTtWY2UoKTtBYygpfSk7ZnVuY3Rpb24gS2NlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQsamNlKX1mdW5jdGlvbiBRY2UodCl7cmV0dXJuIEZsLmlzSW5zdGFuY2UodCx2SSl9ZnVuY3Rpb24gWmNlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQseEkpfWZ1bmN0aW9uIEpjZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LHRHZSl9ZnVuY3Rpb24gZXVlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQsYkkpfWZ1bmN0aW9uIHJ1ZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LHR1ZSl9ZnVuY3Rpb24gbnVlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQsd0kpfWZ1bmN0aW9uIGF1ZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LGl1ZSl9ZnVuY3Rpb24gb3VlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQsc3VlKX1mdW5jdGlvbiBjdWUodCl7cmV0dXJuIEZsLmlzSW5zdGFuY2UodCxsdWUpfWZ1bmN0aW9uIGh1ZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LHV1ZSl9dmFyIFp6ZSxPdCxYY2UsamNlLHZJLEp6ZSxlR2UseEksdEdlLGJJLHR1ZSx3SSxpdWUsc3VlLGx1ZSx1dWUsckdlLGZ1ZSxGbCxVY2UsbkdlLEhjZSxpR2UsV2NlLGFHZSxZY2Usc0dlLHFjZSxvR2UsbEdlLGNHZSx1R2UsaEdlLGZHZSx6bCxUSSxrSSxFSSxTSSxDSSxkR2UscEdlLG1HZSxnR2UsRGcseTAsWm8seUdlLEpvPU0oKCk9PnsidXNlIHN0cmljdCI7T2MoKTtPYygpO09jKCk7T2MoKTtaemU9T2JqZWN0LmRlZmluZVByb3BlcnR5LE90PW8oKHQsZSk9Plp6ZSh0LCJuYW1lIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSwiX19uYW1lIiksWGNlPSJTdGF0ZW1lbnQiLGpjZT0iQXJjaGl0ZWN0dXJlIjtvKEtjZSwiaXNBcmNoaXRlY3R1cmUiKTtPdChLY2UsImlzQXJjaGl0ZWN0dXJlIik7dkk9IkJyYW5jaCI7byhRY2UsImlzQnJhbmNoIik7T3QoUWNlLCJpc0JyYW5jaCIpO0p6ZT0iQ2hlY2tvdXQiLGVHZT0iQ2hlcnJ5UGlja2luZyIseEk9IkNvbW1pdCI7byhaY2UsImlzQ29tbWl0Iik7T3QoWmNlLCJpc0NvbW1pdCIpO3RHZT0iQ29tbW9uIjtvKEpjZSwiaXNDb21tb24iKTtPdChKY2UsImlzQ29tbW9uIik7Ykk9IkdpdEdyYXBoIjtvKGV1ZSwiaXNHaXRHcmFwaCIpO090KGV1ZSwiaXNHaXRHcmFwaCIpO3R1ZT0iSW5mbyI7byhydWUsImlzSW5mbyIpO090KHJ1ZSwiaXNJbmZvIik7d0k9Ik1lcmdlIjtvKG51ZSwiaXNNZXJnZSIpO090KG51ZSwiaXNNZXJnZSIpO2l1ZT0iUGFja2V0IjtvKGF1ZSwiaXNQYWNrZXQiKTtPdChhdWUsImlzUGFja2V0Iik7c3VlPSJQYWNrZXRCbG9jayI7byhvdWUsImlzUGFja2V0QmxvY2siKTtPdChvdWUsImlzUGFja2V0QmxvY2siKTtsdWU9IlBpZSI7byhjdWUsImlzUGllIik7T3QoY3VlLCJpc1BpZSIpO3V1ZT0iUGllU2VjdGlvbiI7byhodWUsImlzUGllU2VjdGlvbiIpO090KGh1ZSwiaXNQaWVTZWN0aW9uIik7ckdlPSJEaXJlY3Rpb24iLGZ1ZT1jbGFzcyBleHRlbmRzICRke3N0YXRpY3tvKHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9c3RhdGlje090KHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9Z2V0QWxsVHlwZXMoKXtyZXR1cm5bIkFyY2hpdGVjdHVyZSIsIkJyYW5jaCIsIkNoZWNrb3V0IiwiQ2hlcnJ5UGlja2luZyIsIkNvbW1pdCIsIkNvbW1vbiIsIkRpcmVjdGlvbiIsIkVkZ2UiLCJHaXRHcmFwaCIsIkdyb3VwIiwiSW5mbyIsIkp1bmN0aW9uIiwiTWVyZ2UiLCJQYWNrZXQiLCJQYWNrZXRCbG9jayIsIlBpZSIsIlBpZVNlY3Rpb24iLCJTZXJ2aWNlIiwiU3RhdGVtZW50Il19Y29tcHV0ZUlzU3VidHlwZSh0LGUpe3N3aXRjaCh0KXtjYXNlIHZJOmNhc2UgSnplOmNhc2UgZUdlOmNhc2UgeEk6Y2FzZSB3STpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoWGNlLGUpO2Nhc2UgckdlOnJldHVybiB0aGlzLmlzU3VidHlwZShiSSxlKTtkZWZhdWx0OnJldHVybiExfX1nZXRSZWZlcmVuY2VUeXBlKHQpe2xldCBlPWAke3QuY29udGFpbmVyLiR0eXBlfToke3QucHJvcGVydHl9YDtzd2l0Y2goZSl7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIGlkLmApfX1nZXRUeXBlTWV0YURhdGEodCl7c3dpdGNoKHQpe2Nhc2UiQXJjaGl0ZWN0dXJlIjpyZXR1cm57bmFtZToiQXJjaGl0ZWN0dXJlIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToiZWRnZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imdyb3VwcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToianVuY3Rpb25zIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJzZXJ2aWNlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UiQnJhbmNoIjpyZXR1cm57bmFtZToiQnJhbmNoIixwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9LHtuYW1lOiJvcmRlciJ9XX07Y2FzZSJDaGVja291dCI6cmV0dXJue25hbWU6IkNoZWNrb3V0Iixwcm9wZXJ0aWVzOlt7bmFtZToiYnJhbmNoIn1dfTtjYXNlIkNoZXJyeVBpY2tpbmciOnJldHVybntuYW1lOiJDaGVycnlQaWNraW5nIixwcm9wZXJ0aWVzOlt7bmFtZToiaWQifSx7bmFtZToicGFyZW50In0se25hbWU6InRhZ3MiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIkNvbW1pdCI6cmV0dXJue25hbWU6IkNvbW1pdCIscHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6Im1lc3NhZ2UifSx7bmFtZToidGFncyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZSJ9XX07Y2FzZSJDb21tb24iOnJldHVybntuYW1lOiJDb21tb24iLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSJFZGdlIjpyZXR1cm57bmFtZToiRWRnZSIscHJvcGVydGllczpbe25hbWU6Imxoc0RpciJ9LHtuYW1lOiJsaHNHcm91cCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibGhzSWQifSx7bmFtZToibGhzSW50byIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicmhzRGlyIn0se25hbWU6InJoc0dyb3VwIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJyaHNJZCJ9LHtuYW1lOiJyaHNJbnRvIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSJHaXRHcmFwaCI6cmV0dXJue25hbWU6IkdpdEdyYXBoIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToic3RhdGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UiR3JvdXAiOnJldHVybntuYW1lOiJHcm91cCIscHJvcGVydGllczpbe25hbWU6Imljb24ifSx7bmFtZToiaWQifSx7bmFtZToiaW4ifSx7bmFtZToidGl0bGUifV19O2Nhc2UiSW5mbyI6cmV0dXJue25hbWU6IkluZm8iLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSJKdW5jdGlvbiI6cmV0dXJue25hbWU6Ikp1bmN0aW9uIixwcm9wZXJ0aWVzOlt7bmFtZToiaWQifSx7bmFtZToiaW4ifV19O2Nhc2UiTWVyZ2UiOnJldHVybntuYW1lOiJNZXJnZSIscHJvcGVydGllczpbe25hbWU6ImJyYW5jaCJ9LHtuYW1lOiJpZCJ9LHtuYW1lOiJ0YWdzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIlBhY2tldCI6cmV0dXJue25hbWU6IlBhY2tldCIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImJsb2NrcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UiUGFja2V0QmxvY2siOnJldHVybntuYW1lOiJQYWNrZXRCbG9jayIscHJvcGVydGllczpbe25hbWU6ImVuZCJ9LHtuYW1lOiJsYWJlbCJ9LHtuYW1lOiJzdGFydCJ9XX07Y2FzZSJQaWUiOnJldHVybntuYW1lOiJQaWUiLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJzZWN0aW9ucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToic2hvd0RhdGEiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InRpdGxlIn1dfTtjYXNlIlBpZVNlY3Rpb24iOnJldHVybntuYW1lOiJQaWVTZWN0aW9uIixwcm9wZXJ0aWVzOlt7bmFtZToibGFiZWwifSx7bmFtZToidmFsdWUifV19O2Nhc2UiU2VydmljZSI6cmV0dXJue25hbWU6IlNlcnZpY2UiLHByb3BlcnRpZXM6W3tuYW1lOiJpY29uIn0se25hbWU6Imljb25UZXh0In0se25hbWU6ImlkIn0se25hbWU6ImluIn0se25hbWU6InRpdGxlIn1dfTtjYXNlIkRpcmVjdGlvbiI6cmV0dXJue25hbWU6IkRpcmVjdGlvbiIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImRpciJ9LHtuYW1lOiJzdGF0ZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0aXRsZSJ9XX07ZGVmYXVsdDpyZXR1cm57bmFtZTp0LHByb3BlcnRpZXM6W119fX19LEZsPW5ldyBmdWUsbkdlPU90KCgpPT5VY2U/PyhVY2U9b2YoJ3siJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkluZm8iLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJJbmZvIiwiZW50cnkiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbmZvIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InNob3dJbmZvIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiPyJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiRU9MIiwiZnJhZ21lbnQiOnRydWUsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfScpKSwiSW5mb0dyYW1tYXIiKSxpR2U9T3QoKCk9PkhjZT8/KEhjZT1vZihgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiUGFja2V0IiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiUGFja2V0IiwiZW50cnkiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJwYWNrZXQtYmV0YSJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJibG9ja3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJibG9ja3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIrIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQYWNrZXRCbG9jayIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic3RhcnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW5kIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTlQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8wfFsxLTldWzAtOV0qLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiU1RSSU5HIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0qXFwifCdbXiddKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJFT0wiLCJmcmFnbWVudCI6dHJ1ZSwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJDb21tb24iLCJhdHRyaWJ1dGVzIjpbeyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjRGVzY3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjVGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX1dLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119YCkpLCJQYWNrZXRHcmFtbWFyIiksYUdlPU90KCgpPT5XY2U/PyhXY2U9b2YoJ3siJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IlBpZSIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlBpZSIsImVudHJ5Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGllIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2hvd0RhdGEiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzaG93RGF0YSJ9LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VjdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzZWN0aW9ucyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6IisifV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlBpZVNlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiUElFX1NFQ1RJT05fTEFCRUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIlteXFwiXStcXCIvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJQSUVfU0VDVElPTl9WQUxVRSIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLygwfFsxLTldWzAtOV0qKShcXFxcLlswLTldKyk/LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiRU9MIiwiZnJhZ21lbnQiOnRydWUsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfScpKSwiUGllR3JhbW1hciIpLHNHZT1PdCgoKT0+WWNlPz8oWWNlPW9mKCd7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJBcmNoaXRlY3R1cmUiLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJBcmNoaXRlY3R1cmUiLCJlbnRyeSI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJhcmNoaXRlY3R1cmUtYmV0YSJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE2In0sImFyZ3VtZW50cyI6W119XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJTdGF0ZW1lbnQiLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZ3JvdXBzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InNlcnZpY2VzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imp1bmN0aW9ucyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJlZGdlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119fV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJMZWZ0UG9ydCIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzRGlyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiUmlnaHRQb3J0IiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzRGlyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJBcnJvdyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNJbnRvIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLS0ifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0ifV19XX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzSW50byIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ikdyb3VwIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ3JvdXAifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpY29uIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImluIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaW4iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiU2VydmljZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InNlcnZpY2UifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpY29uVGV4dCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpY29uIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW4ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJKdW5jdGlvbiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Imp1bmN0aW9uIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW4ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJFZGdlIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNJZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNHcm91cCIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNCJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0lkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0dyb3VwIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE0In0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUlJPV19ESVJFQ1RJT04iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTCJ9fSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiUiJ9fV19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJUIn19XX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkIifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfSUQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10rLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJDSF9URVhUX0lDT04iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFwoXFwiW15cXCJdK1xcIlxcXFwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJDSF9JQ09OIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcKFtcXFxcdy06XStcXFxcKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxbW1xcXFx3IF0rXFxcXF0vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUlJPV19HUk9VUCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHtncm91cFxcXFx9LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfSU5UTyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvPHw+LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMSJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVPTCIsImZyYWdtZW50Ijp0cnVlLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJDb21tb24iLCJhdHRyaWJ1dGVzIjpbeyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjRGVzY3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjVGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX1dLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119JykpLCJBcmNoaXRlY3R1cmVHcmFtbWFyIiksb0dlPU90KCgpPT5xY2U/PyhxY2U9b2YoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkdpdEdyYXBoIiwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVPTCIsImZyYWdtZW50Ijp0cnVlLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkdpdEdyYXBoIiwiZW50cnkiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImdpdEdyYXBoIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaDoifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzdGF0ZW1lbnRzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IioifV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlN0YXRlbWVudCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTYifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkRpcmVjdGlvbiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImRpciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTFIifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiVEIifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiQlQifV19fSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDb21taXQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJjb21taXQifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im1zZzoiLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJtZXNzYWdlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidGFnOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRhZ3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidHlwZToifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0eXBlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJOT1JNQUwifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiUkVWRVJTRSJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJISUdITElHSFQifV19fV19XSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQnJhbmNoIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiYnJhbmNoIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX1dfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoib3JkZXI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoib3JkZXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJNZXJnZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im1lcmdlIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYnJhbmNoIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfV19fSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InR5cGU6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidHlwZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTk9STUFMIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlJFVkVSU0UifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiSElHSExJR0hUIn1dfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkNoZWNrb3V0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2hlY2tvdXQifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic3dpdGNoIn1dfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJicmFuY2giLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119XX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkNoZXJyeVBpY2tpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJjaGVycnktcGljayJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImlkOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidGFnOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRhZ3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGFyZW50OiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InBhcmVudCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19XSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTlQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bMC05XSsoPz1cXFxccykvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFx3KFstXFxcXC4vXFxcXHddKlstXFxcXHddKT8vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIlteXFwiXSpcXCJ8J1teJ10qJy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbXBvcnRzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiR2l0R3JhcGhHcmFtbWFyIiksbEdlPXtsYW5ndWFnZUlkOiJpbmZvIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMX0sY0dlPXtsYW5ndWFnZUlkOiJwYWNrZXQiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExfSx1R2U9e2xhbmd1YWdlSWQ6InBpZSIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITF9LGhHZT17bGFuZ3VhZ2VJZDoiYXJjaGl0ZWN0dXJlIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMX0sZkdlPXtsYW5ndWFnZUlkOiJnaXRHcmFwaCIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITF9LHpsPXtBc3RSZWZsZWN0aW9uOk90KCgpPT5uZXcgZnVlLCJBc3RSZWZsZWN0aW9uIil9LFRJPXtHcmFtbWFyOk90KCgpPT5uR2UoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6T3QoKCk9PmxHZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sa0k9e0dyYW1tYXI6T3QoKCk9PmlHZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpPdCgoKT0+Y0dlLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxFST17R3JhbW1hcjpPdCgoKT0+YUdlKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOk90KCgpPT51R2UsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LFNJPXtHcmFtbWFyOk90KCgpPT5zR2UoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6T3QoKCk9PmhHZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sQ0k9e0dyYW1tYXI6T3QoKCk9Pm9HZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpPdCgoKT0+ZkdlLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxkR2U9L2FjY0Rlc2NyKD86W1x0IF0qOihbXlxuXHJdKil8XHMqeyhbXn1dKil9KS8scEdlPS9hY2NUaXRsZVtcdCBdKjooW15cblxyXSopLyxtR2U9L3RpdGxlKFtcdCBdW15cblxyXSp8KS8sZ0dlPXtBQ0NfREVTQ1I6ZEdlLEFDQ19USVRMRTpwR2UsVElUTEU6bUdlfSxEZz1jbGFzcyBleHRlbmRzIGQwe3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyIil9c3RhdGlje090KHRoaXMsIkFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyIil9cnVuQ29udmVydGVyKHQsZSxyKXtsZXQgbj10aGlzLnJ1bkNvbW1vbkNvbnZlcnRlcih0LGUscik7cmV0dXJuIG49PT12b2lkIDAmJihuPXRoaXMucnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKSksbj09PXZvaWQgMD9zdXBlci5ydW5Db252ZXJ0ZXIodCxlLHIpOm59cnVuQ29tbW9uQ29udmVydGVyKHQsZSxyKXtsZXQgbj1nR2VbdC5uYW1lXTtpZihuPT09dm9pZCAwKXJldHVybjtsZXQgaT1uLmV4ZWMoZSk7aWYoaSE9PW51bGwpe2lmKGlbMV0hPT12b2lkIDApcmV0dXJuIGlbMV0udHJpbSgpLnJlcGxhY2UoL1tcdCBdezIsfS9nbSwiICIpO2lmKGlbMl0hPT12b2lkIDApcmV0dXJuIGlbMl0ucmVwbGFjZSgvXlxzKi9nbSwiIikucmVwbGFjZSgvXHMrJC9nbSwiIikucmVwbGFjZSgvW1x0IF17Mix9L2dtLCIgIikucmVwbGFjZSgvW1xuXHJdezIsfS9nbSxgCmApfX19LHkwPWNsYXNzIGV4dGVuZHMgRGd7c3RhdGlje28odGhpcywiQ29tbW9uVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7T3QodGhpcywiQ29tbW9uVmFsdWVDb252ZXJ0ZXIiKX1ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpe319LFpvPWNsYXNzIGV4dGVuZHMgZjB7c3RhdGlje28odGhpcywiQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIil9c3RhdGlje090KHRoaXMsIkFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5rZXl3b3Jkcz1uZXcgU2V0KHQpfWJ1aWxkS2V5d29yZFRva2Vucyh0LGUscil7bGV0IG49c3VwZXIuYnVpbGRLZXl3b3JkVG9rZW5zKHQsZSxyKTtyZXR1cm4gbi5mb3JFYWNoKGk9Pnt0aGlzLmtleXdvcmRzLmhhcyhpLm5hbWUpJiZpLlBBVFRFUk4hPT12b2lkIDAmJihpLlBBVFRFUk49bmV3IFJlZ0V4cChpLlBBVFRFUk4udG9TdHJpbmcoKSsiKD86KD89JSUpfCg/IVxcUykpIikpfSksbn19LHlHZT1jbGFzcyBleHRlbmRzIFpve3N0YXRpY3tvKHRoaXMsIkNvbW1vblRva2VuQnVpbGRlciIpfXN0YXRpY3tPdCh0aGlzLCJDb21tb25Ub2tlbkJ1aWxkZXIiKX19fSk7ZnVuY3Rpb24gV2sodD11byl7bGV0IGU9JGkoY28odCksemwpLHI9JGkobG8oe3NoYXJlZDplfSksQ0ksSGspO3JldHVybiBlLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihyKSx7c2hhcmVkOmUsR2l0R3JhcGg6cn19dmFyIHZHZSxIayxBST1NKCgpPT57InVzZSBzdHJpY3QiO0pvKCk7T2MoKTt2R2U9Y2xhc3MgZXh0ZW5kcyBab3tzdGF0aWN7byh0aGlzLCJHaXRHcmFwaFRva2VuQnVpbGRlciIpfXN0YXRpY3tPdCh0aGlzLCJHaXRHcmFwaFRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJnaXRHcmFwaCJdKX19LEhrPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjpPdCgoKT0+bmV3IHZHZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6T3QoKCk9Pm5ldyB5MCwiVmFsdWVDb252ZXJ0ZXIiKX19O28oV2ssImNyZWF0ZUdpdEdyYXBoU2VydmljZXMiKTtPdChXaywiY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gcWsodD11byl7bGV0IGU9JGkoY28odCksemwpLHI9JGkobG8oe3NoYXJlZDplfSksVEksWWspO3JldHVybiBlLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihyKSx7c2hhcmVkOmUsSW5mbzpyfX12YXIgeEdlLFlrLF9JPU0oKCk9PnsidXNlIHN0cmljdCI7Sm8oKTtPYygpO3hHZT1jbGFzcyBleHRlbmRzIFpve3N0YXRpY3tvKHRoaXMsIkluZm9Ub2tlbkJ1aWxkZXIiKX1zdGF0aWN7T3QodGhpcywiSW5mb1Rva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJpbmZvIiwic2hvd0luZm8iXSl9fSxZaz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6T3QoKCk9Pm5ldyB4R2UsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOk90KCgpPT5uZXcgeTAsIlZhbHVlQ29udmVydGVyIil9fTtvKHFrLCJjcmVhdGVJbmZvU2VydmljZXMiKTtPdChxaywiY3JlYXRlSW5mb1NlcnZpY2VzIil9KTtmdW5jdGlvbiBqayh0PXVvKXtsZXQgZT0kaShjbyh0KSx6bCkscj0kaShsbyh7c2hhcmVkOmV9KSxrSSxYayk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxQYWNrZXQ6cn19dmFyIGJHZSxYayxMST1NKCgpPT57InVzZSBzdHJpY3QiO0pvKCk7T2MoKTtiR2U9Y2xhc3MgZXh0ZW5kcyBab3tzdGF0aWN7byh0aGlzLCJQYWNrZXRUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7T3QodGhpcywiUGFja2V0VG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbInBhY2tldC1iZXRhIl0pfX0sWGs9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOk90KCgpPT5uZXcgYkdlLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpPdCgoKT0+bmV3IHkwLCJWYWx1ZUNvbnZlcnRlciIpfX07byhqaywiY3JlYXRlUGFja2V0U2VydmljZXMiKTtPdChqaywiY3JlYXRlUGFja2V0U2VydmljZXMiKX0pO2Z1bmN0aW9uIFFrKHQ9dW8pe2xldCBlPSRpKGNvKHQpLHpsKSxyPSRpKGxvKHtzaGFyZWQ6ZX0pLEVJLEtrKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFBpZTpyfX12YXIgd0dlLFRHZSxLayxEST1NKCgpPT57InVzZSBzdHJpY3QiO0pvKCk7T2MoKTt3R2U9Y2xhc3MgZXh0ZW5kcyBab3tzdGF0aWN7byh0aGlzLCJQaWVUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7T3QodGhpcywiUGllVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbInBpZSIsInNob3dEYXRhIl0pfX0sVEdlPWNsYXNzIGV4dGVuZHMgRGd7c3RhdGlje28odGhpcywiUGllVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7T3QodGhpcywiUGllVmFsdWVDb252ZXJ0ZXIiKX1ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpe2lmKHQubmFtZT09PSJQSUVfU0VDVElPTl9MQUJFTCIpcmV0dXJuIGUucmVwbGFjZSgvIi9nLCIiKS50cmltKCl9fSxLaz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6T3QoKCk9Pm5ldyB3R2UsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOk90KCgpPT5uZXcgVEdlLCJWYWx1ZUNvbnZlcnRlciIpfX07byhRaywiY3JlYXRlUGllU2VydmljZXMiKTtPdChRaywiY3JlYXRlUGllU2VydmljZXMiKX0pO2Z1bmN0aW9uIEprKHQ9dW8pe2xldCBlPSRpKGNvKHQpLHpsKSxyPSRpKGxvKHtzaGFyZWQ6ZX0pLFNJLFprKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLEFyY2hpdGVjdHVyZTpyfX12YXIga0dlLEVHZSxaayxOST1NKCgpPT57InVzZSBzdHJpY3QiO0pvKCk7T2MoKTtrR2U9Y2xhc3MgZXh0ZW5kcyBab3tzdGF0aWN7byh0aGlzLCJBcmNoaXRlY3R1cmVUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7T3QodGhpcywiQXJjaGl0ZWN0dXJlVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImFyY2hpdGVjdHVyZSJdKX19LEVHZT1jbGFzcyBleHRlbmRzIERne3N0YXRpY3tvKHRoaXMsIkFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyIil9c3RhdGlje090KHRoaXMsIkFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyIil9cnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKXtpZih0Lm5hbWU9PT0iQVJDSF9JQ09OIilyZXR1cm4gZS5yZXBsYWNlKC9bKCldL2csIiIpLnRyaW0oKTtpZih0Lm5hbWU9PT0iQVJDSF9URVhUX0lDT04iKXJldHVybiBlLnJlcGxhY2UoL1siKCldL2csIiIpO2lmKHQubmFtZT09PSJBUkNIX1RJVExFIilyZXR1cm4gZS5yZXBsYWNlKC9bW1xdXS9nLCIiKS50cmltKCl9fSxaaz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6T3QoKCk9Pm5ldyBrR2UsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOk90KCgpPT5uZXcgRUdlLCJWYWx1ZUNvbnZlcnRlciIpfX07byhKaywiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMiKTtPdChKaywiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMiKX0pO3ZhciBkdWU9e307dnIoZHVlLHtJbmZvTW9kdWxlOigpPT5ZayxjcmVhdGVJbmZvU2VydmljZXM6KCk9PnFrfSk7dmFyIHB1ZT1NKCgpPT57InVzZSBzdHJpY3QiO19JKCk7Sm8oKX0pO3ZhciBtdWU9e307dnIobXVlLHtQYWNrZXRNb2R1bGU6KCk9PlhrLGNyZWF0ZVBhY2tldFNlcnZpY2VzOigpPT5qa30pO3ZhciBndWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMSSgpO0pvKCl9KTt2YXIgeXVlPXt9O3ZyKHl1ZSx7UGllTW9kdWxlOigpPT5LayxjcmVhdGVQaWVTZXJ2aWNlczooKT0+UWt9KTt2YXIgdnVlPU0oKCk9PnsidXNlIHN0cmljdCI7REkoKTtKbygpfSk7dmFyIHh1ZT17fTt2cih4dWUse0FyY2hpdGVjdHVyZU1vZHVsZTooKT0+WmssY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXM6KCk9PkprfSk7dmFyIGJ1ZT1NKCgpPT57InVzZSBzdHJpY3QiO05JKCk7Sm8oKX0pO3ZhciB3dWU9e307dnIod3VlLHtHaXRHcmFwaE1vZHVsZTooKT0+SGssY3JlYXRlR2l0R3JhcGhTZXJ2aWNlczooKT0+V2t9KTt2YXIgVHVlPU0oKCk9PnsidXNlIHN0cmljdCI7QUkoKTtKbygpfSk7YXN5bmMgZnVuY3Rpb24gR2wodCxlKXtsZXQgcj1TR2VbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRpYWdyYW0gdHlwZTogJHt0fWApO3YwW3RdfHxhd2FpdCByKCk7bGV0IGk9djBbdF0ucGFyc2UoZSk7aWYoaS5sZXhlckVycm9ycy5sZW5ndGg+MHx8aS5wYXJzZXJFcnJvcnMubGVuZ3RoPjApdGhyb3cgbmV3IENHZShpKTtyZXR1cm4gaS52YWx1ZX12YXIgdjAsU0dlLENHZSxOZz1NKCgpPT57InVzZSBzdHJpY3QiO0FJKCk7X0koKTtMSSgpO0RJKCk7TkkoKTtKbygpO3YwPXt9LFNHZT17aW5mbzpPdChhc3luYygpPT57bGV0e2NyZWF0ZUluZm9TZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocHVlKCksZHVlKSksZT10KCkuSW5mby5wYXJzZXIuTGFuZ2l1bVBhcnNlcjt2MC5pbmZvPWV9LCJpbmZvIikscGFja2V0Ok90KGFzeW5jKCk9PntsZXR7Y3JlYXRlUGFja2V0U2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGd1ZSgpLG11ZSkpLGU9dCgpLlBhY2tldC5wYXJzZXIuTGFuZ2l1bVBhcnNlcjt2MC5wYWNrZXQ9ZX0sInBhY2tldCIpLHBpZTpPdChhc3luYygpPT57bGV0e2NyZWF0ZVBpZVNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih2dWUoKSx5dWUpKSxlPXQoKS5QaWUucGFyc2VyLkxhbmdpdW1QYXJzZXI7djAucGllPWV9LCJwaWUiKSxhcmNoaXRlY3R1cmU6T3QoYXN5bmMoKT0+e2xldHtjcmVhdGVBcmNoaXRlY3R1cmVTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oYnVlKCkseHVlKSksZT10KCkuQXJjaGl0ZWN0dXJlLnBhcnNlci5MYW5naXVtUGFyc2VyO3YwLmFyY2hpdGVjdHVyZT1lfSwiYXJjaGl0ZWN0dXJlIiksZ2l0R3JhcGg6T3QoYXN5bmMoKT0+e2xldHtjcmVhdGVHaXRHcmFwaFNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihUdWUoKSx3dWUpKSxlPXQoKS5HaXRHcmFwaC5wYXJzZXIuTGFuZ2l1bVBhcnNlcjt2MC5naXRHcmFwaD1lfSwiZ2l0R3JhcGgiKX07byhHbCwicGFyc2UiKTtPdChHbCwicGFyc2UiKTtDR2U9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJNZXJtYWlkUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKHQpe2xldCBlPXQubGV4ZXJFcnJvcnMubWFwKG49Pm4ubWVzc2FnZSkuam9pbihgCmApLHI9dC5wYXJzZXJFcnJvcnMubWFwKG49Pm4ubWVzc2FnZSkuam9pbihgCmApO3N1cGVyKGBQYXJzaW5nIGZhaWxlZDogJHtlfSAke3J9YCksdGhpcy5yZXN1bHQ9dH1zdGF0aWN7T3QodGhpcywiTWVybWFpZFBhcnNlRXJyb3IiKX19fSk7ZnVuY3Rpb24gbGYodCxlKXt0LmFjY0Rlc2NyJiZlLnNldEFjY0Rlc2NyaXB0aW9uPy4odC5hY2NEZXNjciksdC5hY2NUaXRsZSYmZS5zZXRBY2NUaXRsZT8uKHQuYWNjVGl0bGUpLHQudGl0bGUmJmUuc2V0RGlhZ3JhbVRpdGxlPy4odC50aXRsZSl9dmFyIG94PU0oKCk9PnsidXNlIHN0cmljdCI7byhsZiwicG9wdWxhdGVDb21tb25EYiIpfSk7dmFyIGpyLGVFPU0oKCk9PnsidXNlIHN0cmljdCI7anI9e05PUk1BTDowLFJFVkVSU0U6MSxISUdITElHSFQ6MixNRVJHRTozLENIRVJSWV9QSUNLOjR9fSk7dmFyIGNmLHRFPU0oKCk9PnsidXNlIHN0cmljdCI7Y2Y9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0PWU7dGhpcy5yZWNvcmRzPXRoaXMuaW5pdCgpfXN0YXRpY3tvKHRoaXMsIkltcGVyYXRpdmVTdGF0ZSIpfXJlc2V0KCl7dGhpcy5yZWNvcmRzPXRoaXMuaW5pdCgpfX19KTtmdW5jdGlvbiBSSSgpe3JldHVybiB0OSh7bGVuZ3RoOjd9KX1mdW5jdGlvbiBfR2UodCxlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB0LnJlZHVjZSgobixpKT0+e2xldCBhPWUoaSk7cmV0dXJuIHJbYV18fChyW2FdPSEwLG4ucHVzaChpKSksbn0sW10pfWZ1bmN0aW9uIGt1ZSh0LGUscil7bGV0IG49dC5pbmRleE9mKGUpO249PT0tMT90LnB1c2gocik6dC5zcGxpY2UobiwxLHIpfWZ1bmN0aW9uIFN1ZSh0KXtsZXQgZT10LnJlZHVjZSgoaSxhKT0+aS5zZXE+YS5zZXE/aTphLHRbMF0pLHI9IiI7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2k9PT1lP3IrPSIJKiI6cis9Igl8In0pO2xldCBuPVtyLGUuaWQsZS5zZXFdO2ZvcihsZXQgaSBpbiB3dC5yZWNvcmRzLmJyYW5jaGVzKXd0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGkpPT09ZS5pZCYmbi5wdXNoKGkpO2lmKFkuZGVidWcobi5qb2luKCIgIikpLGUucGFyZW50cyYmZS5wYXJlbnRzLmxlbmd0aD09MiYmZS5wYXJlbnRzWzBdJiZlLnBhcmVudHNbMV0pe2xldCBpPXd0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzBdKTtrdWUodCxlLGkpLGUucGFyZW50c1sxXSYmdC5wdXNoKHd0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzFdKSl9ZWxzZXtpZihlLnBhcmVudHMubGVuZ3RoPT0wKXJldHVybjtpZihlLnBhcmVudHNbMF0pe2xldCBpPXd0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzBdKTtrdWUodCxlLGkpfX10PV9HZSh0LGk9PmkuaWQpLFN1ZSh0KX12YXIgQUdlLHgwLHd0LExHZSxER2UsTkdlLFJHZSxNR2UsSUdlLE9HZSxFdWUsUEdlLEJHZSxGR2UsekdlLEdHZSxDdWUsJEdlLFZHZSxVR2UsckUsTUk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO2hyKCk7VWEoKTtmcigpO2tpKCk7ZUUoKTt0RSgpO2hzKCk7QUdlPXVyLmdpdEdyYXBoLHgwPW8oKCk9PndzKHsuLi5BR2UsLi4uU3IoKS5naXRHcmFwaH0pLCJnZXRDb25maWciKSx3dD1uZXcgY2YoKCk9PntsZXQgdD14MCgpLGU9dC5tYWluQnJhbmNoTmFtZSxyPXQubWFpbkJyYW5jaE9yZGVyO3JldHVybnttYWluQnJhbmNoTmFtZTplLGNvbW1pdHM6bmV3IE1hcCxoZWFkOm51bGwsYnJhbmNoQ29uZmlnOm5ldyBNYXAoW1tlLHtuYW1lOmUsb3JkZXI6cn1dXSksYnJhbmNoZXM6bmV3IE1hcChbW2UsbnVsbF1dKSxjdXJyQnJhbmNoOmUsZGlyZWN0aW9uOiJMUiIsc2VxOjAsb3B0aW9uczp7fX19KTtvKFJJLCJnZXRJRCIpO28oX0dlLCJ1bmlxQnkiKTtMR2U9byhmdW5jdGlvbih0KXt3dC5yZWNvcmRzLmRpcmVjdGlvbj10fSwic2V0RGlyZWN0aW9uIiksREdlPW8oZnVuY3Rpb24odCl7WS5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9dD8udHJpbSgpLHQ9dHx8Int9Ijt0cnl7d3QucmVjb3Jkcy5vcHRpb25zPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7WS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixlLm1lc3NhZ2UpfX0sInNldE9wdGlvbnMiKSxOR2U9byhmdW5jdGlvbigpe3JldHVybiB3dC5yZWNvcmRzLm9wdGlvbnN9LCJnZXRPcHRpb25zIiksUkdlPW8oZnVuY3Rpb24odCl7bGV0IGU9dC5tc2cscj10LmlkLG49dC50eXBlLGk9dC50YWdzO1kuaW5mbygiY29tbWl0IixlLHIsbixpKSxZLmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixlLHIsbixpKTtsZXQgYT14MCgpO3I9amUuc2FuaXRpemVUZXh0KHIsYSksZT1qZS5zYW5pdGl6ZVRleHQoZSxhKSxpPWk/Lm1hcChsPT5qZS5zYW5pdGl6ZVRleHQobCxhKSk7bGV0IHM9e2lkOnJ8fHd0LnJlY29yZHMuc2VxKyItIitSSSgpLG1lc3NhZ2U6ZSxzZXE6d3QucmVjb3Jkcy5zZXErKyx0eXBlOm4/P2pyLk5PUk1BTCx0YWdzOmk/P1tdLHBhcmVudHM6d3QucmVjb3Jkcy5oZWFkPT1udWxsP1tdOlt3dC5yZWNvcmRzLmhlYWQuaWRdLGJyYW5jaDp3dC5yZWNvcmRzLmN1cnJCcmFuY2h9O3d0LnJlY29yZHMuaGVhZD1zLFkuaW5mbygibWFpbiBicmFuY2giLGEubWFpbkJyYW5jaE5hbWUpLHd0LnJlY29yZHMuY29tbWl0cy5zZXQocy5pZCxzKSx3dC5yZWNvcmRzLmJyYW5jaGVzLnNldCh3dC5yZWNvcmRzLmN1cnJCcmFuY2gscy5pZCksWS5kZWJ1ZygiaW4gcHVzaENvbW1pdCAiK3MuaWQpfSwiY29tbWl0IiksTUdlPW8oZnVuY3Rpb24odCl7bGV0IGU9dC5uYW1lLHI9dC5vcmRlcjtpZihlPWplLnNhbml0aXplVGV4dChlLHgwKCkpLHd0LnJlY29yZHMuYnJhbmNoZXMuaGFzKGUpKXRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIGNyZWF0ZSBhbiBleGlzdGluZyBicmFuY2guIChIZWxwOiBFaXRoZXIgdXNlIGEgbmV3IG5hbWUgaWYgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGJyYW5jaCBvciB0cnkgdXNpbmcgImNoZWNrb3V0ICR7ZX0iKWApO3d0LnJlY29yZHMuYnJhbmNoZXMuc2V0KGUsd3QucmVjb3Jkcy5oZWFkIT1udWxsP3d0LnJlY29yZHMuaGVhZC5pZDpudWxsKSx3dC5yZWNvcmRzLmJyYW5jaENvbmZpZy5zZXQoZSx7bmFtZTplLG9yZGVyOnJ9KSxFdWUoZSksWS5kZWJ1ZygiaW4gY3JlYXRlQnJhbmNoIil9LCJicmFuY2giKSxJR2U9byh0PT57bGV0IGU9dC5icmFuY2gscj10LmlkLG49dC50eXBlLGk9dC50YWdzLGE9eDAoKTtlPWplLnNhbml0aXplVGV4dChlLGEpLHImJihyPWplLnNhbml0aXplVGV4dChyLGEpKTtsZXQgcz13dC5yZWNvcmRzLmJyYW5jaGVzLmdldCh3dC5yZWNvcmRzLmN1cnJCcmFuY2gpLGw9d3QucmVjb3Jkcy5icmFuY2hlcy5nZXQoZSksdT1zP3d0LnJlY29yZHMuY29tbWl0cy5nZXQocyk6dm9pZCAwLGg9bD93dC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGwpOnZvaWQgMDtpZih1JiZoJiZ1LmJyYW5jaD09PWUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbWVyZ2UgYnJhbmNoICcke2V9JyBpbnRvIGl0c2VsZi5gKTtpZih3dC5yZWNvcmRzLmN1cnJCcmFuY2g9PT1lKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDYW5ub3QgbWVyZ2UgYSBicmFuY2ggdG8gaXRzZWxmJyk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHB9aWYodT09PXZvaWQgMHx8IXUpe2xldCBwPW5ldyBFcnJvcihgSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEN1cnJlbnQgYnJhbmNoICgke3d0LnJlY29yZHMuY3VyckJyYW5jaH0paGFzIG5vIGNvbW1pdHNgKTt0aHJvdyBwLmhhc2g9e3RleHQ6YG1lcmdlICR7ZX1gLHRva2VuOmBtZXJnZSAke2V9YCxleHBlY3RlZDpbImNvbW1pdCJdfSxwfWlmKCF3dC5yZWNvcmRzLmJyYW5jaGVzLmhhcyhlKSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytlKyIpIGRvZXMgbm90IGV4aXN0Iik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6W2BicmFuY2ggJHtlfWBdfSxwfWlmKGg9PT12b2lkIDB8fCFoKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2UrIikgaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyBwLmhhc2g9e3RleHQ6YG1lcmdlICR7ZX1gLHRva2VuOmBtZXJnZSAke2V9YCxleHBlY3RlZDpbJyJjb21taXQiJ119LHB9aWYodT09PWgpe2xldCBwPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEJvdGggYnJhbmNoZXMgaGF2ZSBzYW1lIGhlYWQnKTt0aHJvdyBwLmhhc2g9e3RleHQ6YG1lcmdlICR7ZX1gLHRva2VuOmBtZXJnZSAke2V9YCxleHBlY3RlZDpbImJyYW5jaCBhYmMiXX0scH1pZihyJiZ3dC5yZWNvcmRzLmNvbW1pdHMuaGFzKHIpKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDb21taXQgd2l0aCBpZDonK3IrIiBhbHJlYWR5IGV4aXN0cywgdXNlIGRpZmZlcmVudCBjdXN0b20gSWQiKTt0aHJvdyBwLmhhc2g9e3RleHQ6YG1lcmdlICR7ZX0gJHtyfSAke259ICR7aT8uam9pbigiICIpfWAsdG9rZW46YG1lcmdlICR7ZX0gJHtyfSAke259ICR7aT8uam9pbigiICIpfWAsZXhwZWN0ZWQ6W2BtZXJnZSAke2V9ICR7cn1fVU5JUVVFICR7bn0gJHtpPy5qb2luKCIgIil9YF19LHB9bGV0IGY9bHx8IiIsZD17aWQ6cnx8YCR7d3QucmVjb3Jkcy5zZXF9LSR7UkkoKX1gLG1lc3NhZ2U6YG1lcmdlZCBicmFuY2ggJHtlfSBpbnRvICR7d3QucmVjb3Jkcy5jdXJyQnJhbmNofWAsc2VxOnd0LnJlY29yZHMuc2VxKysscGFyZW50czp3dC5yZWNvcmRzLmhlYWQ9PW51bGw/W106W3d0LnJlY29yZHMuaGVhZC5pZCxmXSxicmFuY2g6d3QucmVjb3Jkcy5jdXJyQnJhbmNoLHR5cGU6anIuTUVSR0UsY3VzdG9tVHlwZTpuLGN1c3RvbUlkOiEhcix0YWdzOmk/P1tdfTt3dC5yZWNvcmRzLmhlYWQ9ZCx3dC5yZWNvcmRzLmNvbW1pdHMuc2V0KGQuaWQsZCksd3QucmVjb3Jkcy5icmFuY2hlcy5zZXQod3QucmVjb3Jkcy5jdXJyQnJhbmNoLGQuaWQpLFkuZGVidWcod3QucmVjb3Jkcy5icmFuY2hlcyksWS5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sIm1lcmdlIiksT0dlPW8oZnVuY3Rpb24odCl7bGV0IGU9dC5pZCxyPXQudGFyZ2V0SWQsbj10LnRhZ3MsaT10LnBhcmVudDtZLmRlYnVnKCJFbnRlcmluZyBjaGVycnlQaWNrOiIsZSxyLG4pO2xldCBhPXgwKCk7aWYoZT1qZS5zYW5pdGl6ZVRleHQoZSxhKSxyPWplLnNhbml0aXplVGV4dChyLGEpLG49bj8ubWFwKHU9PmplLnNhbml0aXplVGV4dCh1LGEpKSxpPWplLnNhbml0aXplVGV4dChpLGEpLCFlfHwhd3QucmVjb3Jkcy5jb21taXRzLmhhcyhlKSl7bGV0IHU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTt0aHJvdyB1Lmhhc2g9e3RleHQ6YGNoZXJyeVBpY2sgJHtlfSAke3J9YCx0b2tlbjpgY2hlcnJ5UGljayAke2V9ICR7cn1gLGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LHV9bGV0IHM9d3QucmVjb3Jkcy5jb21taXRzLmdldChlKTtpZihzPT09dm9pZCAwfHwhcyl0aHJvdyBuZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaWQgc2hvdWxkIGV4aXN0IGFuZCBwcm92aWRlZCcpO2lmKGkmJiEoQXJyYXkuaXNBcnJheShzLnBhcmVudHMpJiZzLnBhcmVudHMuaW5jbHVkZXMoaSkpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBvcGVyYXRpb246IFRoZSBzcGVjaWZpZWQgcGFyZW50IGNvbW1pdCBpcyBub3QgYW4gaW1tZWRpYXRlIHBhcmVudCBvZiB0aGUgY2hlcnJ5LXBpY2tlZCBjb21taXQuIik7bGV0IGw9cy5icmFuY2g7aWYocy50eXBlPT09anIuTUVSR0UmJiFpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHVzYWdlIG9mIGNoZXJyeS1waWNrOiBJZiB0aGUgc291cmNlIGNvbW1pdCBpcyBhIG1lcmdlIGNvbW1pdCwgYW4gaW1tZWRpYXRlIHBhcmVudCBjb21taXQgbXVzdCBiZSBzcGVjaWZpZWQuIik7aWYoIXJ8fCF3dC5yZWNvcmRzLmNvbW1pdHMuaGFzKHIpKXtpZihsPT09d3QucmVjb3Jkcy5jdXJyQnJhbmNoKXtsZXQgZD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaXMgYWxyZWFkeSBvbiBjdXJyZW50IGJyYW5jaCcpO3Rocm93IGQuaGFzaD17dGV4dDpgY2hlcnJ5UGljayAke2V9ICR7cn1gLHRva2VuOmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sZH1sZXQgdT13dC5yZWNvcmRzLmJyYW5jaGVzLmdldCh3dC5yZWNvcmRzLmN1cnJCcmFuY2gpO2lmKHU9PT12b2lkIDB8fCF1KXtsZXQgZD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJHt3dC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgZC5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxkfWxldCBoPXd0LnJlY29yZHMuY29tbWl0cy5nZXQodSk7aWYoaD09PXZvaWQgMHx8IWgpe2xldCBkPW5ldyBFcnJvcihgSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnktcGljayIuIEN1cnJlbnQgYnJhbmNoICgke3d0LnJlY29yZHMuY3VyckJyYW5jaH0paGFzIG5vIGNvbW1pdHNgKTt0aHJvdyBkLmhhc2g9e3RleHQ6YGNoZXJyeVBpY2sgJHtlfSAke3J9YCx0b2tlbjpgY2hlcnJ5UGljayAke2V9ICR7cn1gLGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGR9bGV0IGY9e2lkOnd0LnJlY29yZHMuc2VxKyItIitSSSgpLG1lc3NhZ2U6YGNoZXJyeS1waWNrZWQgJHtzPy5tZXNzYWdlfSBpbnRvICR7d3QucmVjb3Jkcy5jdXJyQnJhbmNofWAsc2VxOnd0LnJlY29yZHMuc2VxKysscGFyZW50czp3dC5yZWNvcmRzLmhlYWQ9PW51bGw/W106W3d0LnJlY29yZHMuaGVhZC5pZCxzLmlkXSxicmFuY2g6d3QucmVjb3Jkcy5jdXJyQnJhbmNoLHR5cGU6anIuQ0hFUlJZX1BJQ0ssdGFnczpuP24uZmlsdGVyKEJvb2xlYW4pOltgY2hlcnJ5LXBpY2s6JHtzLmlkfSR7cy50eXBlPT09anIuTUVSR0U/YHxwYXJlbnQ6JHtpfWA6IiJ9YF19O3d0LnJlY29yZHMuaGVhZD1mLHd0LnJlY29yZHMuY29tbWl0cy5zZXQoZi5pZCxmKSx3dC5yZWNvcmRzLmJyYW5jaGVzLnNldCh3dC5yZWNvcmRzLmN1cnJCcmFuY2gsZi5pZCksWS5kZWJ1Zyh3dC5yZWNvcmRzLmJyYW5jaGVzKSxZLmRlYnVnKCJpbiBjaGVycnlQaWNrIil9fSwiY2hlcnJ5UGljayIpLEV1ZT1vKGZ1bmN0aW9uKHQpe2lmKHQ9amUuc2FuaXRpemVUZXh0KHQseDAoKSksd3QucmVjb3Jkcy5icmFuY2hlcy5oYXModCkpe3d0LnJlY29yZHMuY3VyckJyYW5jaD10O2xldCBlPXd0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KHd0LnJlY29yZHMuY3VyckJyYW5jaCk7ZT09PXZvaWQgMHx8IWU/d3QucmVjb3Jkcy5oZWFkPW51bGw6d3QucmVjb3Jkcy5oZWFkPXd0LnJlY29yZHMuY29tbWl0cy5nZXQoZSk/P251bGx9ZWxzZXtsZXQgZT1uZXcgRXJyb3IoYFRyeWluZyB0byBjaGVja291dCBicmFuY2ggd2hpY2ggaXMgbm90IHlldCBjcmVhdGVkLiAoSGVscCB0cnkgdXNpbmcgImJyYW5jaCAke3R9IilgKTt0aHJvdyBlLmhhc2g9e3RleHQ6YGNoZWNrb3V0ICR7dH1gLHRva2VuOmBjaGVja291dCAke3R9YCxleHBlY3RlZDpbYGJyYW5jaCAke3R9YF19LGV9fSwiY2hlY2tvdXQiKTtvKGt1ZSwidXBzZXJ0Iik7byhTdWUsInByZXR0eVByaW50Q29tbWl0SGlzdG9yeSIpO1BHZT1vKGZ1bmN0aW9uKCl7WS5kZWJ1Zyh3dC5yZWNvcmRzLmNvbW1pdHMpO2xldCB0PUN1ZSgpWzBdO1N1ZShbdF0pfSwicHJldHR5UHJpbnQiKSxCR2U9byhmdW5jdGlvbigpe3d0LnJlc2V0KCksX3IoKX0sImNsZWFyIiksRkdlPW8oZnVuY3Rpb24oKXtyZXR1cm5bLi4ud3QucmVjb3Jkcy5icmFuY2hDb25maWcudmFsdWVzKCldLm1hcCgoZSxyKT0+ZS5vcmRlciE9PW51bGwmJmUub3JkZXIhPT12b2lkIDA/ZTp7Li4uZSxvcmRlcjpwYXJzZUZsb2F0KGAwLiR7cn1gKX0pLnNvcnQoKGUscik9PihlLm9yZGVyPz8wKS0oci5vcmRlcj8/MCkpLm1hcCgoe25hbWU6ZX0pPT4oe25hbWU6ZX0pKX0sImdldEJyYW5jaGVzQXNPYmpBcnJheSIpLHpHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHd0LnJlY29yZHMuYnJhbmNoZXN9LCJnZXRCcmFuY2hlcyIpLEdHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHd0LnJlY29yZHMuY29tbWl0c30sImdldENvbW1pdHMiKSxDdWU9byhmdW5jdGlvbigpe2xldCB0PVsuLi53dC5yZWNvcmRzLmNvbW1pdHMudmFsdWVzKCldO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7WS5kZWJ1ZyhlLmlkKX0pLHQuc29ydCgoZSxyKT0+ZS5zZXEtci5zZXEpLHR9LCJnZXRDb21taXRzQXJyYXkiKSwkR2U9byhmdW5jdGlvbigpe3JldHVybiB3dC5yZWNvcmRzLmN1cnJCcmFuY2h9LCJnZXRDdXJyZW50QnJhbmNoIiksVkdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gd3QucmVjb3Jkcy5kaXJlY3Rpb259LCJnZXREaXJlY3Rpb24iKSxVR2U9byhmdW5jdGlvbigpe3JldHVybiB3dC5yZWNvcmRzLmhlYWR9LCJnZXRIZWFkIiksckU9e2NvbW1pdFR5cGU6anIsZ2V0Q29uZmlnOngwLHNldERpcmVjdGlvbjpMR2Usc2V0T3B0aW9uczpER2UsZ2V0T3B0aW9uczpOR2UsY29tbWl0OlJHZSxicmFuY2g6TUdlLG1lcmdlOklHZSxjaGVycnlQaWNrOk9HZSxjaGVja291dDpFdWUscHJldHR5UHJpbnQ6UEdlLGNsZWFyOkJHZSxnZXRCcmFuY2hlc0FzT2JqQXJyYXk6RkdlLGdldEJyYW5jaGVzOnpHZSxnZXRDb21taXRzOkdHZSxnZXRDb21taXRzQXJyYXk6Q3VlLGdldEN1cnJlbnRCcmFuY2g6JEdlLGdldERpcmVjdGlvbjpWR2UsZ2V0SGVhZDpVR2Usc2V0QWNjVGl0bGU6UnIsZ2V0QWNjVGl0bGU6UHIsZ2V0QWNjRGVzY3JpcHRpb246RnIsc2V0QWNjRGVzY3JpcHRpb246QnIsc2V0RGlhZ3JhbVRpdGxlOmxuLGdldERpYWdyYW1UaXRsZTpKcn19KTt2YXIgSEdlLFdHZSxZR2UscUdlLFhHZSxqR2UsS0dlLEF1ZSxfdWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOZygpO2h0KCk7b3goKTtNSSgpO2VFKCk7SEdlPW8oKHQsZSk9PntsZih0LGUpLHQuZGlyJiZlLnNldERpcmVjdGlvbih0LmRpcik7Zm9yKGxldCByIG9mIHQuc3RhdGVtZW50cylXR2UocixlKX0sInBvcHVsYXRlIiksV0dlPW8oKHQsZSk9PntsZXQgbj17Q29tbWl0Om8oaT0+ZS5jb21taXQoWUdlKGkpKSwiQ29tbWl0IiksQnJhbmNoOm8oaT0+ZS5icmFuY2gocUdlKGkpKSwiQnJhbmNoIiksTWVyZ2U6byhpPT5lLm1lcmdlKFhHZShpKSksIk1lcmdlIiksQ2hlY2tvdXQ6byhpPT5lLmNoZWNrb3V0KGpHZShpKSksIkNoZWNrb3V0IiksQ2hlcnJ5UGlja2luZzpvKGk9PmUuY2hlcnJ5UGljayhLR2UoaSkpLCJDaGVycnlQaWNraW5nIil9W3QuJHR5cGVdO24/bih0KTpZLmVycm9yKGBVbmtub3duIHN0YXRlbWVudCB0eXBlOiAke3QuJHR5cGV9YCl9LCJwYXJzZVN0YXRlbWVudCIpLFlHZT1vKHQ9Pih7aWQ6dC5pZCxtc2c6dC5tZXNzYWdlPz8iIix0eXBlOnQudHlwZSE9PXZvaWQgMD9qclt0LnR5cGVdOmpyLk5PUk1BTCx0YWdzOnQudGFncz8/dm9pZCAwfSksInBhcnNlQ29tbWl0IikscUdlPW8odD0+KHtuYW1lOnQubmFtZSxvcmRlcjp0Lm9yZGVyPz8wfSksInBhcnNlQnJhbmNoIiksWEdlPW8odD0+KHticmFuY2g6dC5icmFuY2gsaWQ6dC5pZD8/IiIsdHlwZTp0LnR5cGUhPT12b2lkIDA/anJbdC50eXBlXTp2b2lkIDAsdGFnczp0LnRhZ3M/P3ZvaWQgMH0pLCJwYXJzZU1lcmdlIiksakdlPW8odD0+dC5icmFuY2gsInBhcnNlQ2hlY2tvdXQiKSxLR2U9byh0PT4oe2lkOnQuaWQsdGFyZ2V0SWQ6IiIsdGFnczp0LnRhZ3M/Lmxlbmd0aD09PTA/dm9pZCAwOnQudGFncyxwYXJlbnQ6dC5wYXJlbnR9KSwicGFyc2VDaGVycnlQaWNraW5nIiksQXVlPXtwYXJzZTpvKGFzeW5jIHQ9PntsZXQgZT1hd2FpdCBHbCgiZ2l0R3JhcGgiLHQpO1kuZGVidWcoZSksSEdlKGUsckUpfSwicGFyc2UiKX19KTt2YXIgUUdlLGVsLGhmLGZmLFBjLFZ1LGIwLFBzLEJzLG5FLGx4LGlFLHVmLE5yLFpHZSxEdWUsTnVlLEpHZSxlJGUsdCRlLHIkZSxuJGUsaSRlLGEkZSxzJGUsbyRlLGwkZSxjJGUsdSRlLEx1ZSxoJGUsY3gsZiRlLGQkZSxwJGUsbSRlLGckZSxSdWUsTXVlPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTtWdCgpO2h0KCk7aHIoKTtlRSgpO1FHZT1kZSgpLGVsPVFHZT8uZ2l0R3JhcGgsaGY9MTAsZmY9NDAsUGM9NCxWdT0yLGIwPTgsUHM9bmV3IE1hcCxCcz1uZXcgTWFwLG5FPTMwLGx4PW5ldyBNYXAsaUU9W10sdWY9MCxOcj0iTFIiLFpHZT1vKCgpPT57UHMuY2xlYXIoKSxCcy5jbGVhcigpLGx4LmNsZWFyKCksdWY9MCxpRT1bXSxOcj0iTFIifSwiY2xlYXIiKSxEdWU9byh0PT57bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtyZXR1cm4odHlwZW9mIHQ9PSJzdHJpbmciP3Quc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTp0KS5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLGkuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGkuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLGkuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLGkudGV4dENvbnRlbnQ9bi50cmltKCksZS5hcHBlbmRDaGlsZChpKX0pLGV9LCJkcmF3VGV4dCIpLE51ZT1vKHQ9PntsZXQgZSxyLG47cmV0dXJuIE5yPT09IkJUIj8ocj1vKChpLGEpPT5pPD1hLCJjb21wYXJpc29uRnVuYyIpLG49MS8wKToocj1vKChpLGEpPT5pPj1hLCJjb21wYXJpc29uRnVuYyIpLG49MCksdC5mb3JFYWNoKGk9PntsZXQgYT1Ocj09PSJUQiJ8fE5yPT0iQlQiP0JzLmdldChpKT8ueTpCcy5nZXQoaSk/Lng7YSE9PXZvaWQgMCYmcihhLG4pJiYoZT1pLG49YSl9KSxlfSwiZmluZENsb3Nlc3RQYXJlbnQiKSxKR2U9byh0PT57bGV0IGU9IiIscj0xLzA7cmV0dXJuIHQuZm9yRWFjaChuPT57bGV0IGk9QnMuZ2V0KG4pLnk7aTw9ciYmKGU9bixyPWkpfSksZXx8dm9pZCAwfSwiZmluZENsb3Nlc3RQYXJlbnRCVCIpLGUkZT1vKCh0LGUscik9PntsZXQgbj1yLGk9cixhPVtdO3QuZm9yRWFjaChzPT57bGV0IGw9ZS5nZXQocyk7aWYoIWwpdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtzfWApO2wucGFyZW50cy5sZW5ndGg/KG49ciRlKGwpLGk9TWF0aC5tYXgobixpKSk6YS5wdXNoKGwpLG4kZShsLG4pfSksbj1pLGEuZm9yRWFjaChzPT57aSRlKHMsbixyKX0pLHQuZm9yRWFjaChzPT57bGV0IGw9ZS5nZXQocyk7aWYobD8ucGFyZW50cy5sZW5ndGgpe2xldCB1PUpHZShsLnBhcmVudHMpO249QnMuZ2V0KHUpLnktZmYsbjw9aSYmKGk9bik7bGV0IGg9UHMuZ2V0KGwuYnJhbmNoKS5wb3MsZj1uLWhmO0JzLnNldChsLmlkLHt4OmgseTpmfSl9fSl9LCJzZXRQYXJhbGxlbEJUUG9zIiksdCRlPW8odD0+e2xldCBlPU51ZSh0LnBhcmVudHMuZmlsdGVyKG49Pm4hPT1udWxsKSk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKGBDbG9zZXN0IHBhcmVudCBub3QgZm91bmQgZm9yIGNvbW1pdCAke3QuaWR9YCk7bGV0IHI9QnMuZ2V0KGUpPy55O2lmKHI9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDbG9zZXN0IHBhcmVudCBwb3NpdGlvbiBub3QgZm91bmQgZm9yIGNvbW1pdCAke3QuaWR9YCk7cmV0dXJuIHJ9LCJmaW5kQ2xvc2VzdFBhcmVudFBvcyIpLHIkZT1vKHQ9PnQkZSh0KStmZiwiY2FsY3VsYXRlQ29tbWl0UG9zaXRpb24iKSxuJGU9bygodCxlKT0+e2xldCByPVBzLmdldCh0LmJyYW5jaCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBCcmFuY2ggbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO2xldCBuPXIucG9zLGk9ZStoZjtyZXR1cm4gQnMuc2V0KHQuaWQse3g6bix5Oml9KSx7eDpuLHk6aX19LCJzZXRDb21taXRQb3NpdGlvbiIpLGkkZT1vKCh0LGUscik9PntsZXQgbj1Qcy5nZXQodC5icmFuY2gpO2lmKCFuKXRocm93IG5ldyBFcnJvcihgQnJhbmNoIG5vdCBmb3VuZCBmb3IgY29tbWl0ICR7dC5pZH1gKTtsZXQgaT1lK3IsYT1uLnBvcztCcy5zZXQodC5pZCx7eDphLHk6aX0pfSwic2V0Um9vdFBvc2l0aW9uIiksYSRlPW8oKHQsZSxyLG4saSxhKT0+e2lmKGE9PT1qci5ISUdITElHSFQpdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixyLngtMTApLmF0dHIoInkiLHIueS0xMCkuYXR0cigid2lkdGgiLDIwKS5hdHRyKCJoZWlnaHQiLDIwKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9IGNvbW1pdC1oaWdobGlnaHQke2klYjB9ICR7bn0tb3V0ZXJgKSx0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLHIueC02KS5hdHRyKCJ5IixyLnktNikuYXR0cigid2lkdGgiLDEyKS5hdHRyKCJoZWlnaHQiLDEyKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9IGNvbW1pdCR7aSViMH0gJHtufS1pbm5lcmApO2Vsc2UgaWYoYT09PWpyLkNIRVJSWV9QSUNLKXQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsci54KS5hdHRyKCJjeSIsci55KS5hdHRyKCJyIiwxMCkuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixyLngtMykuYXR0cigiY3kiLHIueSsyKS5hdHRyKCJyIiwyLjc1KS5hdHRyKCJmaWxsIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7ZS5pZH0gJHtufWApLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsci54KzMpLmF0dHIoImN5IixyLnkrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKSx0LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixyLngrMykuYXR0cigieTEiLHIueSsxKS5hdHRyKCJ4MiIsci54KS5hdHRyKCJ5MiIsci55LTUpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKSx0LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixyLngtMykuYXR0cigieTEiLHIueSsxKS5hdHRyKCJ4MiIsci54KS5hdHRyKCJ5MiIsci55LTUpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKTtlbHNle2xldCBzPXQuYXBwZW5kKCJjaXJjbGUiKTtpZihzLmF0dHIoImN4IixyLngpLHMuYXR0cigiY3kiLHIueSkscy5hdHRyKCJyIixlLnR5cGU9PT1qci5NRVJHRT85OjEwKSxzLmF0dHIoImNsYXNzIixgY29tbWl0ICR7ZS5pZH0gY29tbWl0JHtpJWIwfWApLGE9PT1qci5NRVJHRSl7bGV0IGw9dC5hcHBlbmQoImNpcmNsZSIpO2wuYXR0cigiY3giLHIueCksbC5hdHRyKCJjeSIsci55KSxsLmF0dHIoInIiLDYpLGwuYXR0cigiY2xhc3MiLGBjb21taXQgJHtufSAke2UuaWR9IGNvbW1pdCR7aSViMH1gKX1hPT09anIuUkVWRVJTRSYmdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAke3IueC01fSwke3IueS01fUwke3IueCs1fSwke3IueSs1fU0ke3IueC01fSwke3IueSs1fUwke3IueCs1fSwke3IueS01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7bn0gJHtlLmlkfSBjb21taXQke2klYjB9YCl9fSwiZHJhd0NvbW1pdEJ1bGxldCIpLHMkZT1vKCh0LGUscixuKT0+e2lmKGUudHlwZSE9PWpyLkNIRVJSWV9QSUNLJiYoZS5jdXN0b21JZCYmZS50eXBlPT09anIuTUVSR0V8fGUudHlwZSE9PWpyLk1FUkdFKSYmZWw/LnNob3dDb21taXRMYWJlbCl7bGV0IGk9dC5hcHBlbmQoImciKSxhPWkuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwtYmtnIikscz1pLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4pLmF0dHIoInkiLHIueSsyNSkuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwiKS50ZXh0KGUuaWQpLGw9cy5ub2RlKCk/LmdldEJCb3goKTtpZihsJiYoYS5hdHRyKCJ4IixyLnBvc1dpdGhPZmZzZXQtbC53aWR0aC8yLVZ1KS5hdHRyKCJ5IixyLnkrMTMuNSkuYXR0cigid2lkdGgiLGwud2lkdGgrMipWdSkuYXR0cigiaGVpZ2h0IixsLmhlaWdodCsyKlZ1KSxOcj09PSJUQiJ8fE5yPT09IkJUIj8oYS5hdHRyKCJ4IixyLngtKGwud2lkdGgrNCpQYys1KSkuYXR0cigieSIsci55LTEyKSxzLmF0dHIoIngiLHIueC0obC53aWR0aCs0KlBjKSkuYXR0cigieSIsci55K2wuaGVpZ2h0LTEyKSk6cy5hdHRyKCJ4IixyLnBvc1dpdGhPZmZzZXQtbC53aWR0aC8yKSxlbC5yb3RhdGVDb21taXRMYWJlbCkpaWYoTnI9PT0iVEIifHxOcj09PSJCVCIpcy5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK3IueCsiLCAiK3IueSsiKSIpLGEuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKC00NSwgIityLngrIiwgIityLnkrIikiKTtlbHNle2xldCB1PS03LjUtKGwud2lkdGgrMTApLzI1KjkuNSxoPTEwK2wud2lkdGgvMjUqOC41O2kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCAiK2grIikgcm90YXRlKC00NSwgIituKyIsICIrci55KyIpIil9fX0sImRyYXdDb21taXRMYWJlbCIpLG8kZT1vKCh0LGUscixuKT0+e2lmKGUudGFncy5sZW5ndGg+MCl7bGV0IGk9MCxhPTAscz0wLGw9W107Zm9yKGxldCB1IG9mIGUudGFncy5yZXZlcnNlKCkpe2xldCBoPXQuaW5zZXJ0KCJwb2x5Z29uIiksZj10LmFwcGVuZCgiY2lyY2xlIiksZD10LmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLHIueS0xNi1pKS5hdHRyKCJjbGFzcyIsInRhZy1sYWJlbCIpLnRleHQodSkscD1kLm5vZGUoKT8uZ2V0QkJveCgpO2lmKCFwKXRocm93IG5ldyBFcnJvcigiVGFnIGJib3ggbm90IGZvdW5kIik7YT1NYXRoLm1heChhLHAud2lkdGgpLHM9TWF0aC5tYXgocyxwLmhlaWdodCksZC5hdHRyKCJ4IixyLnBvc1dpdGhPZmZzZXQtcC53aWR0aC8yKSxsLnB1c2goe3RhZzpkLGhvbGU6ZixyZWN0OmgseU9mZnNldDppfSksaSs9MjB9Zm9yKGxldHt0YWc6dSxob2xlOmgscmVjdDpmLHlPZmZzZXQ6ZH1vZiBsKXtsZXQgcD1zLzIsbT1yLnktMTkuMi1kO2lmKGYuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICR7bi1hLzItUGMvMn0sJHttK1Z1fSAgCiAgICAgICR7bi1hLzItUGMvMn0sJHttLVZ1fQogICAgICAke3IucG9zV2l0aE9mZnNldC1hLzItUGN9LCR7bS1wLVZ1fQogICAgICAke3IucG9zV2l0aE9mZnNldCthLzIrUGN9LCR7bS1wLVZ1fQogICAgICAke3IucG9zV2l0aE9mZnNldCthLzIrUGN9LCR7bStwK1Z1fQogICAgICAke3IucG9zV2l0aE9mZnNldC1hLzItUGN9LCR7bStwK1Z1fWApLGguYXR0cigiY3kiLG0pLmF0dHIoImN4IixuLWEvMitQYy8yKS5hdHRyKCJyIiwxLjUpLmF0dHIoImNsYXNzIiwidGFnLWhvbGUiKSxOcj09PSJUQiJ8fE5yPT09IkJUIil7bGV0IGc9bitkO2YuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgJHtyLnh9LCR7ZysyfQogICAgICAgICR7ci54fSwke2ctMn0KICAgICAgICAke3IueCtoZn0sJHtnLXAtMn0KICAgICAgICAke3IueCtoZithKzR9LCR7Zy1wLTJ9CiAgICAgICAgJHtyLngraGYrYSs0fSwke2crcCsyfQogICAgICAgICR7ci54K2hmfSwke2crcCsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK3IueCsiLCIrbisiKSIpLGguYXR0cigiY3giLHIueCtQYy8yKS5hdHRyKCJjeSIsZykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDEyLDEyKSByb3RhdGUoNDUsICIrci54KyIsIituKyIpIiksdS5hdHRyKCJ4IixyLngrNSkuYXR0cigieSIsZyszKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQsMTQpIHJvdGF0ZSg0NSwgIityLngrIiwiK24rIikiKX19fX0sImRyYXdDb21taXRUYWdzIiksbCRlPW8odD0+e3N3aXRjaCh0LmN1c3RvbVR5cGU/P3QudHlwZSl7Y2FzZSBqci5OT1JNQUw6cmV0dXJuImNvbW1pdC1ub3JtYWwiO2Nhc2UganIuUkVWRVJTRTpyZXR1cm4iY29tbWl0LXJldmVyc2UiO2Nhc2UganIuSElHSExJR0hUOnJldHVybiJjb21taXQtaGlnaGxpZ2h0IjtjYXNlIGpyLk1FUkdFOnJldHVybiJjb21taXQtbWVyZ2UiO2Nhc2UganIuQ0hFUlJZX1BJQ0s6cmV0dXJuImNvbW1pdC1jaGVycnktcGljayI7ZGVmYXVsdDpyZXR1cm4iY29tbWl0LW5vcm1hbCJ9fSwiZ2V0Q29tbWl0Q2xhc3NUeXBlIiksYyRlPW8oKHQsZSxyLG4pPT57bGV0IGk9e3g6MCx5OjB9O2lmKHQucGFyZW50cy5sZW5ndGg+MCl7bGV0IGE9TnVlKHQucGFyZW50cyk7aWYoYSl7bGV0IHM9bi5nZXQoYSk/P2k7cmV0dXJuIGU9PT0iVEIiP3MueStmZjplPT09IkJUIj8obi5nZXQodC5pZCk/P2kpLnktZmY6cy54K2ZmfX1lbHNlIHJldHVybiBlPT09IlRCIj9uRTplPT09IkJUIj8obi5nZXQodC5pZCk/P2kpLnktZmY6MDtyZXR1cm4gMH0sImNhbGN1bGF0ZVBvc2l0aW9uIiksdSRlPW8oKHQsZSxyKT0+e2xldCBuPU5yPT09IkJUIiYmcj9lOmUraGYsaT1Ocj09PSJUQiJ8fE5yPT09IkJUIj9uOlBzLmdldCh0LmJyYW5jaCk/LnBvcyxhPU5yPT09IlRCInx8TnI9PT0iQlQiP1BzLmdldCh0LmJyYW5jaCk/LnBvczpuO2lmKGE9PT12b2lkIDB8fGk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiB3ZXJlIHVuZGVmaW5lZCBmb3IgY29tbWl0ICR7dC5pZH1gKTtyZXR1cm57eDphLHk6aSxwb3NXaXRoT2Zmc2V0Om59fSwiZ2V0Q29tbWl0UG9zaXRpb24iKSxMdWU9bygodCxlLHIpPT57aWYoIWVsKXRocm93IG5ldyBFcnJvcigiR2l0R3JhcGggY29uZmlnIG5vdCBmb3VuZCIpO2xldCBuPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYnVsbGV0cyIpLGk9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbHMiKSxhPU5yPT09IlRCInx8TnI9PT0iQlQiP25FOjAscz1bLi4uZS5rZXlzKCldLGw9ZWw/LnBhcmFsbGVsQ29tbWl0cz8/ITEsdT1vKChmLGQpPT57bGV0IHA9ZS5nZXQoZik/LnNlcSxtPWUuZ2V0KGQpPy5zZXE7cmV0dXJuIHAhPT12b2lkIDAmJm0hPT12b2lkIDA/cC1tOjB9LCJzb3J0S2V5cyIpLGg9cy5zb3J0KHUpO05yPT09IkJUIiYmKGwmJmUkZShoLGUsYSksaD1oLnJldmVyc2UoKSksaC5mb3JFYWNoKGY9PntsZXQgZD1lLmdldChmKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoYENvbW1pdCBub3QgZm91bmQgZm9yIGtleSAke2Z9YCk7bCYmKGE9YyRlKGQsTnIsYSxCcykpO2xldCBwPXUkZShkLGEsbCk7aWYocil7bGV0IG09bCRlKGQpLGc9ZC5jdXN0b21UeXBlPz9kLnR5cGUseT1Qcy5nZXQoZC5icmFuY2gpPy5pbmRleD8/MDthJGUobixkLHAsbSx5LGcpLHMkZShpLGQscCxhKSxvJGUoaSxkLHAsYSl9TnI9PT0iVEIifHxOcj09PSJCVCI/QnMuc2V0KGQuaWQse3g6cC54LHk6cC5wb3NXaXRoT2Zmc2V0fSk6QnMuc2V0KGQuaWQse3g6cC5wb3NXaXRoT2Zmc2V0LHk6cC55fSksYT1Ocj09PSJCVCImJmw/YStmZjphK2ZmK2hmLGE+dWYmJih1Zj1hKX0pfSwiZHJhd0NvbW1pdHMiKSxoJGU9bygodCxlLHIsbixpKT0+e2xldCBzPShOcj09PSJUQiJ8fE5yPT09IkJUIj9yLng8bi54OnIueTxuLnkpP2UuYnJhbmNoOnQuYnJhbmNoLGw9byhoPT5oLmJyYW5jaD09PXMsImlzT25CcmFuY2hUb0dldEN1cnZlIiksdT1vKGg9Pmguc2VxPnQuc2VxJiZoLnNlcTxlLnNlcSwiaXNCZXR3ZWVuQ29tbWl0cyIpO3JldHVyblsuLi5pLnZhbHVlcygpXS5zb21lKGg9PnUoaCkmJmwoaCkpfSwic2hvdWxkUmVyb3V0ZUFycm93IiksY3g9bygodCxlLHI9MCk9PntsZXQgbj10K01hdGguYWJzKHQtZSkvMjtpZihyPjUpcmV0dXJuIG47aWYoaUUuZXZlcnkocz0+TWF0aC5hYnMocy1uKT49MTApKXJldHVybiBpRS5wdXNoKG4pLG47bGV0IGE9TWF0aC5hYnModC1lKTtyZXR1cm4gY3godCxlLWEvNSxyKzEpfSwiZmluZExhbmUiKSxmJGU9bygodCxlLHIsbik9PntsZXQgaT1Ccy5nZXQoZS5pZCksYT1Ccy5nZXQoci5pZCk7aWYoaT09PXZvaWQgMHx8YT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYENvbW1pdCBwb3NpdGlvbnMgbm90IGZvdW5kIGZvciBjb21taXRzICR7ZS5pZH0gYW5kICR7ci5pZH1gKTtsZXQgcz1oJGUoZSxyLGksYSxuKSxsPSIiLHU9IiIsaD0wLGY9MCxkPVBzLmdldChyLmJyYW5jaCk/LmluZGV4O3IudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdJiYoZD1Qcy5nZXQoZS5icmFuY2gpPy5pbmRleCk7bGV0IHA7aWYocyl7bD0iQSAxMCAxMCwgMCwgMCwgMCwiLHU9IkEgMTAgMTAsIDAsIDAsIDEsIixoPTEwLGY9MTA7bGV0IG09aS55PGEueT9jeChpLnksYS55KTpjeChhLnksaS55KSxnPWkueDxhLng/Y3goaS54LGEueCk6Y3goYS54LGkueCk7TnI9PT0iVEIiP2kueDxhLng/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtnLWh9ICR7aS55fSAke3V9ICR7Z30gJHtpLnkrZn0gTCAke2d9ICR7YS55LWh9ICR7bH0gJHtnK2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOihkPVBzLmdldChlLmJyYW5jaCk/LmluZGV4LHA9YE0gJHtpLnh9ICR7aS55fSBMICR7ZytofSAke2kueX0gJHtsfSAke2d9ICR7aS55K2Z9IEwgJHtnfSAke2EueS1ofSAke3V9ICR7Zy1mfSAke2EueX0gTCAke2EueH0gJHthLnl9YCk6TnI9PT0iQlQiP2kueDxhLng/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtnLWh9ICR7aS55fSAke2x9ICR7Z30gJHtpLnktZn0gTCAke2d9ICR7YS55K2h9ICR7dX0gJHtnK2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOihkPVBzLmdldChlLmJyYW5jaCk/LmluZGV4LHA9YE0gJHtpLnh9ICR7aS55fSBMICR7ZytofSAke2kueX0gJHt1fSAke2d9ICR7aS55LWZ9IEwgJHtnfSAke2EueStofSAke2x9ICR7Zy1mfSAke2EueX0gTCAke2EueH0gJHthLnl9YCk6aS55PGEueT9wPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHttLWh9ICR7bH0gJHtpLngrZn0gJHttfSBMICR7YS54LWh9ICR7bX0gJHt1fSAke2EueH0gJHttK2Z9IEwgJHthLnh9ICR7YS55fWA6KGQ9UHMuZ2V0KGUuYnJhbmNoKT8uaW5kZXgscD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7bStofSAke3V9ICR7aS54K2Z9ICR7bX0gTCAke2EueC1ofSAke219ICR7bH0gJHthLnh9ICR7bS1mfSBMICR7YS54fSAke2EueX1gKX1lbHNlIGw9IkEgMjAgMjAsIDAsIDAsIDAsIix1PSJBIDIwIDIwLCAwLCAwLCAxLCIsaD0yMCxmPTIwLE5yPT09IlRCIj8oaS54PGEueCYmKHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueS1ofSAke2x9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke3V9ICR7YS54fSAke2kueStmfSBMICR7YS54fSAke2EueX1gKSxpLng+YS54JiYobD0iQSAyMCAyMCwgMCwgMCwgMCwiLHU9IkEgMjAgMjAsIDAsIDAsIDEsIixoPTIwLGY9MjAsci50eXBlPT09anIuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55LWh9ICR7dX0gJHtpLngtZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngraH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55K2Z9IEwgJHthLnh9ICR7YS55fWApLGkueD09PWEueCYmKHA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54fSAke2EueX1gKSk6TnI9PT0iQlQiPyhpLng8YS54JiYoci50eXBlPT09anIuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55K2h9ICR7dX0gJHtpLngrZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngtaH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55LWZ9IEwgJHthLnh9ICR7YS55fWApLGkueD5hLngmJihsPSJBIDIwIDIwLCAwLCAwLCAwLCIsdT0iQSAyMCAyMCwgMCwgMCwgMSwiLGg9MjAsZj0yMCxyLnR5cGU9PT1qci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnkraH0gJHtsfSAke2kueC1mfSAke2EueX0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHtsfSAke2EueH0gJHtpLnktZn0gTCAke2EueH0gJHthLnl9YCksaS54PT09YS54JiYocD1gTSAke2kueH0gJHtpLnl9IEwgJHthLnh9ICR7YS55fWApKTooaS55PGEueSYmKHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke3V9ICR7YS54fSAke2kueStmfSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueS1ofSAke2x9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gKSxpLnk+YS55JiYoci50eXBlPT09anIuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngtaH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55LWZ9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55K2h9ICR7dX0gJHtpLngrZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApLGkueT09PWEueSYmKHA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54fSAke2EueX1gKSk7aWYocD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkxpbmUgZGVmaW5pdGlvbiBub3QgZm91bmQiKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHApLmF0dHIoImNsYXNzIiwiYXJyb3cgYXJyb3ciK2QlYjApfSwiZHJhd0Fycm93IiksZCRlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWFycm93cyIpO1suLi5lLmtleXMoKV0uZm9yRWFjaChuPT57bGV0IGk9ZS5nZXQobik7aS5wYXJlbnRzJiZpLnBhcmVudHMubGVuZ3RoPjAmJmkucGFyZW50cy5mb3JFYWNoKGE9PntmJGUocixlLmdldChhKSxpLGUpfSl9KX0sImRyYXdBcnJvd3MiKSxwJGU9bygodCxlKT0+e2xldCByPXQuYXBwZW5kKCJnIik7ZS5mb3JFYWNoKChuLGkpPT57bGV0IGE9aSViMCxzPVBzLmdldChuLm5hbWUpPy5wb3M7aWYocz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFBvc2l0aW9uIG5vdCBmb3VuZCBmb3IgYnJhbmNoICR7bi5uYW1lfWApO2xldCBsPXIuYXBwZW5kKCJsaW5lIik7bC5hdHRyKCJ4MSIsMCksbC5hdHRyKCJ5MSIscyksbC5hdHRyKCJ4MiIsdWYpLGwuYXR0cigieTIiLHMpLGwuYXR0cigiY2xhc3MiLCJicmFuY2ggYnJhbmNoIithKSxOcj09PSJUQiI/KGwuYXR0cigieTEiLG5FKSxsLmF0dHIoIngxIixzKSxsLmF0dHIoInkyIix1ZiksbC5hdHRyKCJ4MiIscykpOk5yPT09IkJUIiYmKGwuYXR0cigieTEiLHVmKSxsLmF0dHIoIngxIixzKSxsLmF0dHIoInkyIixuRSksbC5hdHRyKCJ4MiIscykpLGlFLnB1c2gocyk7bGV0IHU9bi5uYW1lLGg9RHVlKHUpLGY9ci5pbnNlcnQoInJlY3QiKSxwPXIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIithKTtwLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgbT1oLmdldEJCb3goKTtmLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWxCa2cgbGFiZWwiK2EpLmF0dHIoInJ4Iiw0KS5hdHRyKCJyeSIsNCkuYXR0cigieCIsLW0ud2lkdGgtNC0oZWw/LnJvdGF0ZUNvbW1pdExhYmVsPT09ITA/MzA6MCkpLmF0dHIoInkiLC1tLmhlaWdodC8yKzgpLmF0dHIoIndpZHRoIixtLndpZHRoKzE4KS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KzQpLHAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKC1tLndpZHRoLTE0LShlbD8ucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkrIiwgIisocy1tLmhlaWdodC8yLTEpKyIpIiksTnI9PT0iVEIiPyhmLmF0dHIoIngiLHMtbS53aWR0aC8yLTEwKS5hdHRyKCJ5IiwwKSxwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLW0ud2lkdGgvMi01KSsiLCAwKSIpKTpOcj09PSJCVCI/KGYuYXR0cigieCIscy1tLndpZHRoLzItMTApLmF0dHIoInkiLHVmKSxwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLW0ud2lkdGgvMi01KSsiLCAiK3VmKyIpIikpOmYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0xOSwgIisocy1tLmhlaWdodC8yKSsiKSIpfSl9LCJkcmF3QnJhbmNoZXMiKSxtJGU9byhmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBQcy5zZXQodCx7cG9zOmUsaW5kZXg6cn0pLGUrPTUwKyhpPzQwOjApKyhOcj09PSJUQiJ8fE5yPT09IkJUIj9uLndpZHRoLzI6MCksZX0sInNldEJyYW5jaFBvc2l0aW9uIiksZyRlPW8oZnVuY3Rpb24odCxlLHIsbil7aWYoWkdlKCksWS5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLHQrYApgLCJpZDoiLGUsciksIWVsKXRocm93IG5ldyBFcnJvcigiR2l0R3JhcGggY29uZmlnIG5vdCBmb3VuZCIpO2xldCBpPWVsLnJvdGF0ZUNvbW1pdExhYmVsPz8hMSxhPW4uZGI7bHg9YS5nZXRDb21taXRzKCk7bGV0IHM9YS5nZXRCcmFuY2hlc0FzT2JqQXJyYXkoKTtOcj1hLmdldERpcmVjdGlvbigpO2xldCBsPXplKGBbaWQ9IiR7ZX0iXWApLHU9MDtzLmZvckVhY2goKGgsZik9PntsZXQgZD1EdWUoaC5uYW1lKSxwPWwuYXBwZW5kKCJnIiksbT1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKSxnPW0uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCBicmFuY2gtbGFiZWwiKTtnLm5vZGUoKT8uYXBwZW5kQ2hpbGQoZCk7bGV0IHk9ZC5nZXRCQm94KCk7dT1tJGUoaC5uYW1lLHUsZix5LGkpLGcucmVtb3ZlKCksbS5yZW1vdmUoKSxwLnJlbW92ZSgpfSksTHVlKGwsbHgsITEpLGVsLnNob3dCcmFuY2hlcyYmcCRlKGwscyksZCRlKGwsbHgpLEx1ZShsLGx4LCEwKSxVdC5pbnNlcnRUaXRsZShsLCJnaXRUaXRsZVRleHQiLGVsLnRpdGxlVG9wTWFyZ2luPz8wLGEuZ2V0RGlhZ3JhbVRpdGxlKCkpLGE3KHZvaWQgMCxsLGVsLmRpYWdyYW1QYWRkaW5nLGVsLnVzZU1heFdpZHRoKX0sImRyYXciKSxSdWU9e2RyYXc6ZyRlfX0pO3ZhciB5JGUsSXVlLE91ZT1NKCgpPT57InVzZSBzdHJpY3QiO3kkZT1vKHQ9PmAKICAuY29tbWl0LWlkLAogIC5jb21taXQtbXNnLAogIC5icmFuY2gtbGFiZWwgewogICAgZmlsbDogbGlnaHRncmV5OwogICAgY29sb3I6IGxpZ2h0Z3JleTsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgfQogICR7WzAsMSwyLDMsNCw1LDYsN10ubWFwKGU9PmAKICAgICAgICAuYnJhbmNoLWxhYmVsJHtlfSB7IGZpbGw6ICR7dFsiZ2l0QnJhbmNoTGFiZWwiK2VdfTsgfQogICAgICAgIC5jb21taXQke2V9IHsgc3Ryb2tlOiAke3RbImdpdCIrZV19OyBmaWxsOiAke3RbImdpdCIrZV19OyB9CiAgICAgICAgLmNvbW1pdC1oaWdobGlnaHQke2V9IHsgc3Ryb2tlOiAke3RbImdpdEludiIrZV19OyBmaWxsOiAke3RbImdpdEludiIrZV19OyB9CiAgICAgICAgLmxhYmVsJHtlfSAgeyBmaWxsOiAke3RbImdpdCIrZV19OyB9CiAgICAgICAgLmFycm93JHtlfSB7IHN0cm9rZTogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIGApLmpvaW4oYApgKX0KCiAgLmJyYW5jaCB7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogJHt0LmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke3QuY29tbWl0TGFiZWxDb2xvcn07fQogIC5jb21taXQtbGFiZWwtYmtnIHsgZm9udC1zaXplOiAke3QuY29tbWl0TGFiZWxGb250U2l6ZX07IGZpbGw6ICR7dC5jb21taXRMYWJlbEJhY2tncm91bmR9OyBvcGFjaXR5OiAwLjU7IH0KICAudGFnLWxhYmVsIHsgZm9udC1zaXplOiAke3QudGFnTGFiZWxGb250U2l6ZX07IGZpbGw6ICR7dC50YWdMYWJlbENvbG9yfTt9CiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAke3QudGFnTGFiZWxCYWNrZ3JvdW5kfTsgc3Ryb2tlOiAke3QudGFnTGFiZWxCb3JkZXJ9OyB9CiAgLnRhZy1ob2xlIHsgZmlsbDogJHt0LnRleHRDb2xvcn07IH0KCiAgLmNvbW1pdC1tZXJnZSB7CiAgICBzdHJva2U6ICR7dC5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHt0LnByaW1hcnlDb2xvcn07CiAgfQogIC5jb21taXQtcmV2ZXJzZSB7CiAgICBzdHJva2U6ICR7dC5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHt0LnByaW1hcnlDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LW91dGVyIHsKICB9CiAgLmNvbW1pdC1oaWdobGlnaHQtaW5uZXIgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogIH0KCiAgLmFycm93IHsgc3Ryb2tlLXdpZHRoOiA4OyBzdHJva2UtbGluZWNhcDogcm91bmQ7IGZpbGw6IG5vbmV9CiAgLmdpdFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQpgLCJnZXRTdHlsZXMiKSxJdWU9eSRlfSk7dmFyIFB1ZT17fTt2cihQdWUse2RpYWdyYW06KCk9PnYkZX0pO3ZhciB2JGUsQnVlPU0oKCk9PnsidXNlIHN0cmljdCI7X3VlKCk7TUkoKTtNdWUoKTtPdWUoKTt2JGU9e3BhcnNlcjpBdWUsZGI6ckUscmVuZGVyZXI6UnVlLHN0eWxlczpJdWV9fSk7dmFyIElJLEd1ZSwkdWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJST1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oUixTLE8sTil7Zm9yKE89T3x8e30sTj1SLmxlbmd0aDtOLS07T1tSW05dXT1TKTtyZXR1cm4gT30sIm8iKSxlPVs2LDgsMTAsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzMsMzUsMzYsMzgsNDBdLHI9WzEsMjZdLG49WzEsMjddLGk9WzEsMjhdLGE9WzEsMjldLHM9WzEsMzBdLGw9WzEsMzFdLHU9WzEsMzJdLGg9WzEsMzNdLGY9WzEsMzRdLGQ9WzEsOV0scD1bMSwxMF0sbT1bMSwxMV0sZz1bMSwxMl0seT1bMSwxM10sdj1bMSwxNF0seD1bMSwxNV0sYj1bMSwxNl0sdz1bMSwxOV0sXz1bMSwyMF0sVD1bMSwyMV0sRT1bMSwyMl0sTD1bMSwyM10sQz1bMSwyNV0sQT1bMSwzNV0sST17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxnYW50dDo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkw6MTAsd2Vla2RheToxMSx3ZWVrZGF5X21vbmRheToxMix3ZWVrZGF5X3R1ZXNkYXk6MTMsd2Vla2RheV93ZWRuZXNkYXk6MTQsd2Vla2RheV90aHVyc2RheToxNSx3ZWVrZGF5X2ZyaWRheToxNix3ZWVrZGF5X3NhdHVyZGF5OjE3LHdlZWtkYXlfc3VuZGF5OjE4LHdlZWtlbmQ6MTksd2Vla2VuZF9mcmlkYXk6MjAsd2Vla2VuZF9zYXR1cmRheToyMSxkYXRlRm9ybWF0OjIyLGluY2x1c2l2ZUVuZERhdGVzOjIzLHRvcEF4aXM6MjQsYXhpc0Zvcm1hdDoyNSx0aWNrSW50ZXJ2YWw6MjYsZXhjbHVkZXM6MjcsaW5jbHVkZXM6MjgsdG9kYXlNYXJrZXI6MjksdGl0bGU6MzAsYWNjX3RpdGxlOjMxLGFjY190aXRsZV92YWx1ZTozMixhY2NfZGVzY3I6MzMsYWNjX2Rlc2NyX3ZhbHVlOjM0LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzUsc2VjdGlvbjozNixjbGlja1N0YXRlbWVudDozNyx0YXNrVHh0OjM4LHRhc2tEYXRhOjM5LGNsaWNrOjQwLGNhbGxiYWNrbmFtZTo0MSxjYWxsYmFja2FyZ3M6NDIsaHJlZjo0MyxjbGlja1N0YXRlbWVudERlYnVnOjQ0LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJnYW50dCIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5MIiwxMjoid2Vla2RheV9tb25kYXkiLDEzOiJ3ZWVrZGF5X3R1ZXNkYXkiLDE0OiJ3ZWVrZGF5X3dlZG5lc2RheSIsMTU6IndlZWtkYXlfdGh1cnNkYXkiLDE2OiJ3ZWVrZGF5X2ZyaWRheSIsMTc6IndlZWtkYXlfc2F0dXJkYXkiLDE4OiJ3ZWVrZGF5X3N1bmRheSIsMjA6IndlZWtlbmRfZnJpZGF5IiwyMToid2Vla2VuZF9zYXR1cmRheSIsMjI6ImRhdGVGb3JtYXQiLDIzOiJpbmNsdXNpdmVFbmREYXRlcyIsMjQ6InRvcEF4aXMiLDI1OiJheGlzRm9ybWF0IiwyNjoidGlja0ludGVydmFsIiwyNzoiZXhjbHVkZXMiLDI4OiJpbmNsdWRlcyIsMjk6InRvZGF5TWFya2VyIiwzMDoidGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoic2VjdGlvbiIsMzg6InRhc2tUeHQiLDM5OiJ0YXNrRGF0YSIsNDA6ImNsaWNrIiw0MToiY2FsbGJhY2tuYW1lIiw0MjoiY2FsbGJhY2thcmdzIiw0MzoiaHJlZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzE5LDFdLFsxOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbMzcsMl0sWzM3LDNdLFszNywzXSxbMzcsNF0sWzM3LDNdLFszNyw0XSxbMzcsMl0sWzQ0LDJdLFs0NCwzXSxbNDQsM10sWzQ0LDRdLFs0NCwzXSxbNDQsNF0sWzQ0LDJdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oUyxPLE4sUCxGLEIsJCl7dmFyIHo9Qi5sZW5ndGgtMTtzd2l0Y2goRil7Y2FzZSAxOnJldHVybiBCW3otMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6Qlt6LTFdLnB1c2goQlt6XSksdGhpcy4kPUJbei0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1CW3pdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODpQLnNldFdlZWtkYXkoIm1vbmRheSIpO2JyZWFrO2Nhc2UgOTpQLnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOlAuc2V0V2Vla2RheSgid2VkbmVzZGF5Iik7YnJlYWs7Y2FzZSAxMTpQLnNldFdlZWtkYXkoInRodXJzZGF5Iik7YnJlYWs7Y2FzZSAxMjpQLnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6UC5zZXRXZWVrZGF5KCJzYXR1cmRheSIpO2JyZWFrO2Nhc2UgMTQ6UC5zZXRXZWVrZGF5KCJzdW5kYXkiKTticmVhaztjYXNlIDE1OlAuc2V0V2Vla2VuZCgiZnJpZGF5Iik7YnJlYWs7Y2FzZSAxNjpQLnNldFdlZWtlbmQoInNhdHVyZGF5Iik7YnJlYWs7Y2FzZSAxNzpQLnNldERhdGVGb3JtYXQoQlt6XS5zdWJzdHIoMTEpKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTg6UC5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpLHRoaXMuJD1CW3pdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxOTpQLlRvcEF4aXMoKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAyMDpQLnNldEF4aXNGb3JtYXQoQlt6XS5zdWJzdHIoMTEpKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMjE6UC5zZXRUaWNrSW50ZXJ2YWwoQlt6XS5zdWJzdHIoMTMpKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoMTMpO2JyZWFrO2Nhc2UgMjI6UC5zZXRFeGNsdWRlcyhCW3pdLnN1YnN0cig5KSksdGhpcy4kPUJbel0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjM6UC5zZXRJbmNsdWRlcyhCW3pdLnN1YnN0cig5KSksdGhpcy4kPUJbel0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjQ6UC5zZXRUb2RheU1hcmtlcihCW3pdLnN1YnN0cigxMikpLHRoaXMuJD1CW3pdLnN1YnN0cigxMik7YnJlYWs7Y2FzZSAyNzpQLnNldERpYWdyYW1UaXRsZShCW3pdLnN1YnN0cig2KSksdGhpcy4kPUJbel0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPUJbel0udHJpbSgpLFAuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI5OmNhc2UgMzA6dGhpcy4kPUJbel0udHJpbSgpLFAuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMxOlAuYWRkU2VjdGlvbihCW3pdLnN1YnN0cig4KSksdGhpcy4kPUJbel0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMzM6UC5hZGRUYXNrKEJbei0xXSxCW3pdKSx0aGlzLiQ9InRhc2siO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPUJbei0xXSxQLnNldENsaWNrRXZlbnQoQlt6LTFdLEJbel0sbnVsbCk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9Qlt6LTJdLFAuc2V0Q2xpY2tFdmVudChCW3otMl0sQlt6LTFdLEJbel0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUJbei0yXSxQLnNldENsaWNrRXZlbnQoQlt6LTJdLEJbei0xXSxudWxsKSxQLnNldExpbmsoQlt6LTJdLEJbel0pO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPUJbei0zXSxQLnNldENsaWNrRXZlbnQoQlt6LTNdLEJbei0yXSxCW3otMV0pLFAuc2V0TGluayhCW3otM10sQlt6XSk7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9Qlt6LTJdLFAuc2V0Q2xpY2tFdmVudChCW3otMl0sQlt6XSxudWxsKSxQLnNldExpbmsoQlt6LTJdLEJbei0xXSk7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9Qlt6LTNdLFAuc2V0Q2xpY2tFdmVudChCW3otM10sQlt6LTFdLEJbel0pLFAuc2V0TGluayhCW3otM10sQlt6LTJdKTticmVhaztjYXNlIDQwOnRoaXMuJD1CW3otMV0sUC5zZXRMaW5rKEJbei0xXSxCW3pdKTticmVhaztjYXNlIDQxOmNhc2UgNDc6dGhpcy4kPUJbei0xXSsiICIrQlt6XTticmVhaztjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NTp0aGlzLiQ9Qlt6LTJdKyIgIitCW3otMV0rIiAiK0Jbel07YnJlYWs7Y2FzZSA0NDpjYXNlIDQ2OnRoaXMuJD1CW3otM10rIiAiK0Jbei0yXSsiICIrQlt6LTFdKyIgIitCW3pdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sdChlLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6ciwxMzpuLDE0OmksMTU6YSwxNjpzLDE3OmwsMTg6dSwxOToxOCwyMDpoLDIxOmYsMjI6ZCwyMzpwLDI0Om0sMjU6ZywyNjp5LDI3OnYsMjg6eCwyOTpiLDMwOncsMzE6XywzMzpULDM1OkUsMzY6TCwzNzoyNCwzODpDLDQwOkF9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MzYsMTE6MTcsMTI6ciwxMzpuLDE0OmksMTU6YSwxNjpzLDE3OmwsMTg6dSwxOToxOCwyMDpoLDIxOmYsMjI6ZCwyMzpwLDI0Om0sMjU6ZywyNjp5LDI3OnYsMjg6eCwyOTpiLDMwOncsMzE6XywzMzpULDM1OkUsMzY6TCwzNzoyNCwzODpDLDQwOkF9LHQoZSxbMiw1XSksdChlLFsyLDZdKSx0KGUsWzIsMTddKSx0KGUsWzIsMThdKSx0KGUsWzIsMTldKSx0KGUsWzIsMjBdKSx0KGUsWzIsMjFdKSx0KGUsWzIsMjJdKSx0KGUsWzIsMjNdKSx0KGUsWzIsMjRdKSx0KGUsWzIsMjVdKSx0KGUsWzIsMjZdKSx0KGUsWzIsMjddKSx7MzI6WzEsMzddfSx7MzQ6WzEsMzhdfSx0KGUsWzIsMzBdKSx0KGUsWzIsMzFdKSx0KGUsWzIsMzJdKSx7Mzk6WzEsMzldfSx0KGUsWzIsOF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSksdChlLFsyLDExXSksdChlLFsyLDEyXSksdChlLFsyLDEzXSksdChlLFsyLDE0XSksdChlLFsyLDE1XSksdChlLFsyLDE2XSksezQxOlsxLDQwXSw0MzpbMSw0MV19LHQoZSxbMiw0XSksdChlLFsyLDI4XSksdChlLFsyLDI5XSksdChlLFsyLDMzXSksdChlLFsyLDM0XSx7NDI6WzEsNDJdLDQzOlsxLDQzXX0pLHQoZSxbMiw0MF0sezQxOlsxLDQ0XX0pLHQoZSxbMiwzNV0sezQzOlsxLDQ1XX0pLHQoZSxbMiwzNl0pLHQoZSxbMiwzOF0sezQyOlsxLDQ2XX0pLHQoZSxbMiwzN10pLHQoZSxbMiwzOV0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oUyxPKXtpZihPLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUyk7ZWxzZXt2YXIgTj1uZXcgRXJyb3IoUyk7dGhyb3cgTi5oYXNoPU8sTn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihTKXt2YXIgTz10aGlzLE49WzBdLFA9W10sRj1bbnVsbF0sQj1bXSwkPXRoaXMudGFibGUsej0iIixXPTAsaj0wLEs9MCxpZT0yLFE9MSxlZT1CLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEo9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxIPXt5eTp7fX07Zm9yKHZhciBxIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkscSkmJihILnl5W3FdPXRoaXMueXlbcV0pO0ouc2V0SW5wdXQoUyxILnl5KSxILnl5LmxleGVyPUosSC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgSi55eWxsb2M+InUiJiYoSi55eWxsb2M9e30pO3ZhciBaPUoueXlsbG9jO0IucHVzaChaKTt2YXIgYWU9Si5vcHRpb25zJiZKLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBILnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUgueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdWUoaGUpe04ubGVuZ3RoPU4ubGVuZ3RoLTIqaGUsRi5sZW5ndGg9Ri5sZW5ndGgtaGUsQi5sZW5ndGg9Qi5sZW5ndGgtaGV9byh1ZSwicG9wU3RhY2siKTtmdW5jdGlvbiBjZSgpe3ZhciBoZTtyZXR1cm4gaGU9UC5wb3AoKXx8Si5sZXgoKXx8USx0eXBlb2YgaGUhPSJudW1iZXIiJiYoaGUgaW5zdGFuY2VvZiBBcnJheSYmKFA9aGUsaGU9UC5wb3AoKSksaGU9Ty5zeW1ib2xzX1toZV18fGhlKSxoZX1vKGNlLCJsZXgiKTtmb3IodmFyIHRlLERlLG9lLGtlLEZlLEJlLFZlPXt9LEdlLEhlLHhlLFg7Oyl7aWYob2U9TltOLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW29lXT9rZT10aGlzLmRlZmF1bHRBY3Rpb25zW29lXTooKHRlPT09bnVsbHx8dHlwZW9mIHRlPiJ1IikmJih0ZT1jZSgpKSxrZT0kW29lXSYmJFtvZV1bdGVdKSx0eXBlb2Yga2U+InUifHwha2UubGVuZ3RofHwha2VbMF0pe3ZhciBmZT0iIjtYPVtdO2ZvcihHZSBpbiAkW29lXSl0aGlzLnRlcm1pbmFsc19bR2VdJiZHZT5pZSYmWC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bR2VdKyInIik7Si5zaG93UG9zaXRpb24/ZmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVysxKStgOgpgK0ouc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtYLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bdGVdfHx0ZSkrIiciOmZlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFcrMSkrIjogVW5leHBlY3RlZCAiKyh0ZT09UT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t0ZV18fHRlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihmZSx7dGV4dDpKLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t0ZV18fHRlLGxpbmU6Si55eWxpbmVubyxsb2M6WixleHBlY3RlZDpYfSl9aWYoa2VbMF1pbnN0YW5jZW9mIEFycmF5JiZrZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK29lKyIsIHRva2VuOiAiK3RlKTtzd2l0Y2goa2VbMF0pe2Nhc2UgMTpOLnB1c2godGUpLEYucHVzaChKLnl5dGV4dCksQi5wdXNoKEoueXlsbG9jKSxOLnB1c2goa2VbMV0pLHRlPW51bGwsRGU/KHRlPURlLERlPW51bGwpOihqPUoueXlsZW5nLHo9Si55eXRleHQsVz1KLnl5bGluZW5vLFo9Si55eWxsb2MsSz4wJiZLLS0pO2JyZWFrO2Nhc2UgMjppZihIZT10aGlzLnByb2R1Y3Rpb25zX1trZVsxXV1bMV0sVmUuJD1GW0YubGVuZ3RoLUhlXSxWZS5fJD17Zmlyc3RfbGluZTpCW0IubGVuZ3RoLShIZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkJbQi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpCW0IubGVuZ3RoLShIZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpCW0IubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxhZSYmKFZlLl8kLnJhbmdlPVtCW0IubGVuZ3RoLShIZXx8MSldLnJhbmdlWzBdLEJbQi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxCZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoVmUsW3osaixXLEgueXksa2VbMV0sRixCXS5jb25jYXQoZWUpKSx0eXBlb2YgQmU8InUiKXJldHVybiBCZTtIZSYmKE49Ti5zbGljZSgwLC0xKkhlKjIpLEY9Ri5zbGljZSgwLC0xKkhlKSxCPUIuc2xpY2UoMCwtMSpIZSkpLE4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trZVsxXV1bMF0pLEYucHVzaChWZS4kKSxCLnB1c2goVmUuXyQpLHhlPSRbTltOLmxlbmd0aC0yXV1bTltOLmxlbmd0aC0xXV0sTi5wdXNoKHhlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sRD1mdW5jdGlvbigpe3ZhciBSPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oTyxOKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKE8sTik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoTyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihTLE8pe3JldHVybiB0aGlzLnl5PU98fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVMsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgUz10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Uyx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Uyx0aGlzLm1hdGNoZWQrPVM7dmFyIE89Uy5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIE8/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFN9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oUyl7dmFyIE89Uy5sZW5ndGgsTj1TLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Uyt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtTyksdGhpcy5vZmZzZXQtPU87dmFyIFA9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksTi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPU4ubGVuZ3RoLTEpO3ZhciBGPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpOPyhOLmxlbmd0aD09PVAubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQW1AubGVuZ3RoLU4ubGVuZ3RoXS5sZW5ndGgtTlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLU99LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bRlswXSxGWzBdK3RoaXMueXlsZW5nLU9dKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihTKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoUykpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihTLmxlbmd0aD4yMD8iLi4uIjoiIikrUy5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMubWF0Y2g7cmV0dXJuIFMubGVuZ3RoPDIwJiYoUys9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtUy5sZW5ndGgpKSwoUy5zdWJzdHIoMCwyMCkrKFMubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgUz10aGlzLnBhc3RJbnB1dCgpLE89bmV3IEFycmF5KFMubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUyt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArTysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oUyxPKXt2YXIgTixQLEY7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEY9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoRi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxQPVNbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFAmJih0aGlzLnl5bGluZW5vKz1QLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlA/UFtQLmxlbmd0aC0xXS5sZW5ndGgtUFtQLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1NbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9U1swXSx0aGlzLm1hdGNoKz1TWzBdLHRoaXMubWF0Y2hlcz1TLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFNbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVNbMF0sTj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxPLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLE4pcmV0dXJuIE47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEIgaW4gRil0aGlzW0JdPUZbQl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFMsTyxOLFA7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRj10aGlzLl9jdXJyZW50UnVsZXMoKSxCPTA7QjxGLmxlbmd0aDtCKyspaWYoTj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0ZbQl1dKSxOJiYoIU98fE5bMF0ubGVuZ3RoPk9bMF0ubGVuZ3RoKSl7aWYoTz1OLFA9Qix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihTPXRoaXMudGVzdF9tYXRjaChOLEZbQl0pLFMhPT0hMSlyZXR1cm4gUztpZih0aGlzLl9iYWNrdHJhY2spe089ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gTz8oUz10aGlzLnRlc3RfbWF0Y2goTyxGW1BdKSxTIT09ITE/UzohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBPPXRoaXMubmV4dCgpO3JldHVybiBPfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihPKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goTyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgTz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBPPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oTyl7cmV0dXJuIE89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhPfHwwKSxPPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbT106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihPKXt0aGlzLmJlZ2luKE8pfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oTyxOLFAsRil7dmFyIEI9Rjtzd2l0Y2goUCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLCJvcGVuX2RpcmVjdGl2ZSI7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDp0aGlzLmJlZ2luKCJocmVmIik7YnJlYWs7Y2FzZSAxNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gNDM7Y2FzZSAxNzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE5OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDIwOnJldHVybiA0MTtjYXNlIDIxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIyOnJldHVybiA0MjtjYXNlIDIzOnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gNDA7Y2FzZSAyNjpyZXR1cm4gNDtjYXNlIDI3OnJldHVybiAyMjtjYXNlIDI4OnJldHVybiAyMztjYXNlIDI5OnJldHVybiAyNDtjYXNlIDMwOnJldHVybiAyNTtjYXNlIDMxOnJldHVybiAyNjtjYXNlIDMyOnJldHVybiAyODtjYXNlIDMzOnJldHVybiAyNztjYXNlIDM0OnJldHVybiAyOTtjYXNlIDM1OnJldHVybiAxMjtjYXNlIDM2OnJldHVybiAxMztjYXNlIDM3OnJldHVybiAxNDtjYXNlIDM4OnJldHVybiAxNTtjYXNlIDM5OnJldHVybiAxNjtjYXNlIDQwOnJldHVybiAxNztjYXNlIDQxOnJldHVybiAxODtjYXNlIDQyOnJldHVybiAyMDtjYXNlIDQzOnJldHVybiAyMTtjYXNlIDQ0OnJldHVybiJkYXRlIjtjYXNlIDQ1OnJldHVybiAzMDtjYXNlIDQ2OnJldHVybiJhY2NEZXNjcmlwdGlvbiI7Y2FzZSA0NzpyZXR1cm4gMzY7Y2FzZSA0ODpyZXR1cm4gMzg7Y2FzZSA0OTpyZXR1cm4gMzk7Y2FzZSA1MDpyZXR1cm4iOiI7Y2FzZSA1MTpyZXR1cm4gNjtjYXNlIDUyOnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzolJSg/IVx7KSpbXlxuXSopL2ksL14oPzpbXlx9XSUlKlteXG5dKikvaSwvXig/OiUlKlteXG5dKltcbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OnRpY2tJbnRlcnZhbFxzW14jXG47XSspL2ksL14oPzppbmNsdWRlc1xzW14jXG47XSspL2ksL14oPzpleGNsdWRlc1xzW14jXG47XSspL2ksL14oPzp0b2RheU1hcmtlclxzW15cbjtdKykvaSwvXig/OndlZWtkYXlccyttb25kYXlcYikvaSwvXig/OndlZWtkYXlccyt0dWVzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrd2VkbmVzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdGh1cnNkYXlcYikvaSwvXig/OndlZWtkYXlccytmcmlkYXlcYikvaSwvXig/OndlZWtkYXlccytzYXR1cmRheVxiKS9pLC9eKD86d2Vla2RheVxzK3N1bmRheVxiKS9pLC9eKD86d2Vla2VuZFxzK2ZyaWRheVxiKS9pLC9eKD86d2Vla2VuZFxzK3NhdHVyZGF5XGIpL2ksL14oPzpcZFxkXGRcZC1cZFxkLVxkXGRcYikvaSwvXig/OnRpdGxlXHNbXlxuXSspL2ksL14oPzphY2NEZXNjcmlwdGlvblxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXlxuXSspL2ksL14oPzpbXjpcbl0rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMSwyMl0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxOCwxOSwyMF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNCwyNV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNSw4LDksMTAsMTEsMTIsMTMsMTQsMTcsMjMsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTJdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gUn0oKTtJLmxleGVyPUQ7ZnVuY3Rpb24gaygpe3RoaXMueXk9e319cmV0dXJuIG8oaywiUGFyc2VyIiksay5wcm90b3R5cGU9SSxJLlBhcnNlcj1rLG5ldyBrfSgpO0lJLnBhcnNlcj1JSTtHdWU9SUl9KTt2YXIgVnVlPU5pKChPSSxQSSk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIE9JPT0ib2JqZWN0IiYmdHlwZW9mIFBJPCJ1Ij9QSS5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5faXNvV2Vlaz1lKCl9KShPSSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0iZGF5IjtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW8oZnVuY3Rpb24obCl7cmV0dXJuIGwuYWRkKDQtbC5pc29XZWVrZGF5KCksdCl9LCJhIiksYT1yLnByb3RvdHlwZTthLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcykueWVhcigpfSxhLmlzb1dlZWs9ZnVuY3Rpb24obCl7aWYoIXRoaXMuJHV0aWxzKCkudShsKSlyZXR1cm4gdGhpcy5hZGQoNyoobC10aGlzLmlzb1dlZWsoKSksdCk7dmFyIHUsaCxmLGQscD1pKHRoaXMpLG09KHU9dGhpcy5pc29XZWVrWWVhcigpLGg9dGhpcy4kdSxmPShoP24udXRjOm4pKCkueWVhcih1KS5zdGFydE9mKCJ5ZWFyIiksZD00LWYuaXNvV2Vla2RheSgpLGYuaXNvV2Vla2RheSgpPjQmJihkKz03KSxmLmFkZChkLHQpKTtyZXR1cm4gcC5kaWZmKG0sIndlZWsiKSsxfSxhLmlzb1dlZWtkYXk9ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuJHV0aWxzKCkudShsKT90aGlzLmRheSgpfHw3OnRoaXMuZGF5KHRoaXMuZGF5KCklNz9sOmwtNyl9O3ZhciBzPWEuc3RhcnRPZjthLnN0YXJ0T2Y9ZnVuY3Rpb24obCx1KXt2YXIgaD10aGlzLiR1dGlscygpLGY9ISFoLnUodSl8fHU7cmV0dXJuIGgucChsKT09PSJpc293ZWVrIj9mP3RoaXMuZGF0ZSh0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpLnN0YXJ0T2YoImRheSIpOnRoaXMuZGF0ZSh0aGlzLmRhdGUoKS0xLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS5lbmRPZigiZGF5Iik6cy5iaW5kKHRoaXMpKGwsdSl9fX0pfSk7dmFyIFV1ZT1OaSgoQkksRkkpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBCST09Im9iamVjdCImJnR5cGVvZiBGSTwidSI/RkkuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX2N1c3RvbVBhcnNlRm9ybWF0PWUoKX0pKEJJLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0sZT0vKFxbW15bXSpcXSl8KFstXzovLiwoKVxzXSspfChBfGF8UXxZWVlZfFlZP3x3dz98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyxyPS9cZC8sbj0vXGRcZC8saT0vXGRcZD8vLGE9L1xkKlteLV86LywoKVxzXGRdKy8scz17fSxsPW8oZnVuY3Rpb24oZyl7cmV0dXJuKGc9K2cpKyhnPjY4PzE5MDA6MmUzKX0sImEiKSx1PW8oZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKHkpe3RoaXNbZ109K3l9fSwiZiIpLGg9Wy9bKy1dXGRcZDo/KFxkXGQpP3xaLyxmdW5jdGlvbihnKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKHkpe2lmKCF5fHx5PT09IloiKXJldHVybiAwO3ZhciB2PXkubWF0Y2goLyhbKy1dfFxkXGQpL2cpLHg9NjAqdlsxXSsoK3ZbMl18fDApO3JldHVybiB4PT09MD8wOnZbMF09PT0iKyI/LXg6eH0oZyl9XSxmPW8oZnVuY3Rpb24oZyl7dmFyIHk9c1tnXTtyZXR1cm4geSYmKHkuaW5kZXhPZj95Onkucy5jb25jYXQoeS5mKSl9LCJ1IiksZD1vKGZ1bmN0aW9uKGcseSl7dmFyIHYseD1zLm1lcmlkaWVtO2lmKHgpe2Zvcih2YXIgYj0xO2I8PTI0O2IrPTEpaWYoZy5pbmRleE9mKHgoYiwwLHkpKT4tMSl7dj1iPjEyO2JyZWFrfX1lbHNlIHY9Zz09PSh5PyJwbSI6IlBNIik7cmV0dXJuIHZ9LCJkIikscD17QTpbYSxmdW5jdGlvbihnKXt0aGlzLmFmdGVybm9vbj1kKGcsITEpfV0sYTpbYSxmdW5jdGlvbihnKXt0aGlzLmFmdGVybm9vbj1kKGcsITApfV0sUTpbcixmdW5jdGlvbihnKXt0aGlzLm1vbnRoPTMqKGctMSkrMX1dLFM6W3IsZnVuY3Rpb24oZyl7dGhpcy5taWxsaXNlY29uZHM9MTAwKitnfV0sU1M6W24sZnVuY3Rpb24oZyl7dGhpcy5taWxsaXNlY29uZHM9MTAqK2d9XSxTU1M6Wy9cZHszfS8sZnVuY3Rpb24oZyl7dGhpcy5taWxsaXNlY29uZHM9K2d9XSxzOltpLHUoInNlY29uZHMiKV0sc3M6W2ksdSgic2Vjb25kcyIpXSxtOltpLHUoIm1pbnV0ZXMiKV0sbW06W2ksdSgibWludXRlcyIpXSxIOltpLHUoImhvdXJzIildLGg6W2ksdSgiaG91cnMiKV0sSEg6W2ksdSgiaG91cnMiKV0saGg6W2ksdSgiaG91cnMiKV0sRDpbaSx1KCJkYXkiKV0sREQ6W24sdSgiZGF5IildLERvOlthLGZ1bmN0aW9uKGcpe3ZhciB5PXMub3JkaW5hbCx2PWcubWF0Y2goL1xkKy8pO2lmKHRoaXMuZGF5PXZbMF0seSlmb3IodmFyIHg9MTt4PD0zMTt4Kz0xKXkoeCkucmVwbGFjZSgvXFt8XF0vZywiIik9PT1nJiYodGhpcy5kYXk9eCl9XSx3OltpLHUoIndlZWsiKV0sd3c6W24sdSgid2VlayIpXSxNOltpLHUoIm1vbnRoIildLE1NOltuLHUoIm1vbnRoIildLE1NTTpbYSxmdW5jdGlvbihnKXt2YXIgeT1mKCJtb250aHMiKSx2PShmKCJtb250aHNTaG9ydCIpfHx5Lm1hcChmdW5jdGlvbih4KXtyZXR1cm4geC5zbGljZSgwLDMpfSkpLmluZGV4T2YoZykrMTtpZih2PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9diUxMnx8dn1dLE1NTU06W2EsZnVuY3Rpb24oZyl7dmFyIHk9ZigibW9udGhzIikuaW5kZXhPZihnKSsxO2lmKHk8MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD15JTEyfHx5fV0sWTpbL1srLV0/XGQrLyx1KCJ5ZWFyIildLFlZOltuLGZ1bmN0aW9uKGcpe3RoaXMueWVhcj1sKGcpfV0sWVlZWTpbL1xkezR9Lyx1KCJ5ZWFyIildLFo6aCxaWjpofTtmdW5jdGlvbiBtKGcpe3ZhciB5LHY7eT1nLHY9cyYmcy5mb3JtYXRzO2Zvcih2YXIgeD0oZz15LnJlcGxhY2UoLyhcW1teXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csZnVuY3Rpb24oQyxBLEkpe3ZhciBEPUkmJkkudG9VcHBlckNhc2UoKTtyZXR1cm4gQXx8dltJXXx8dFtJXXx8dltEXS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLGZ1bmN0aW9uKGssUixTKXtyZXR1cm4gUnx8Uy5zbGljZSgxKX0pfSkpLm1hdGNoKGUpLGI9eC5sZW5ndGgsdz0wO3c8Yjt3Kz0xKXt2YXIgXz14W3ddLFQ9cFtfXSxFPVQmJlRbMF0sTD1UJiZUWzFdO3hbd109TD97cmVnZXg6RSxwYXJzZXI6TH06Xy5yZXBsYWNlKC9eXFt8XF0kL2csIiIpfXJldHVybiBmdW5jdGlvbihDKXtmb3IodmFyIEE9e30sST0wLEQ9MDtJPGI7SSs9MSl7dmFyIGs9eFtJXTtpZih0eXBlb2Ygaz09InN0cmluZyIpRCs9ay5sZW5ndGg7ZWxzZXt2YXIgUj1rLnJlZ2V4LFM9ay5wYXJzZXIsTz1DLnNsaWNlKEQpLE49Ui5leGVjKE8pWzBdO1MuY2FsbChBLE4pLEM9Qy5yZXBsYWNlKE4sIiIpfX1yZXR1cm4gZnVuY3Rpb24oUCl7dmFyIEY9UC5hZnRlcm5vb247aWYoRiE9PXZvaWQgMCl7dmFyIEI9UC5ob3VycztGP0I8MTImJihQLmhvdXJzKz0xMik6Qj09PTEyJiYoUC5ob3Vycz0wKSxkZWxldGUgUC5hZnRlcm5vb259fShBKSxBfX1yZXR1cm4gbyhtLCJsIiksZnVuY3Rpb24oZyx5LHYpe3YucC5jdXN0b21QYXJzZUZvcm1hdD0hMCxnJiZnLnBhcnNlVHdvRGlnaXRZZWFyJiYobD1nLnBhcnNlVHdvRGlnaXRZZWFyKTt2YXIgeD15LnByb3RvdHlwZSxiPXgucGFyc2U7eC5wYXJzZT1mdW5jdGlvbih3KXt2YXIgXz13LmRhdGUsVD13LnV0YyxFPXcuYXJnczt0aGlzLiR1PVQ7dmFyIEw9RVsxXTtpZih0eXBlb2YgTD09InN0cmluZyIpe3ZhciBDPUVbMl09PT0hMCxBPUVbM109PT0hMCxJPUN8fEEsRD1FWzJdO0EmJihEPUVbMl0pLHM9dGhpcy4kbG9jYWxlKCksIUMmJkQmJihzPXYuTHNbRF0pLHRoaXMuJGQ9ZnVuY3Rpb24oTyxOLFAsRil7dHJ5e2lmKFsieCIsIlgiXS5pbmRleE9mKE4pPi0xKXJldHVybiBuZXcgRGF0ZSgoTj09PSJYIj8xZTM6MSkqTyk7dmFyIEI9bShOKShPKSwkPUIueWVhcix6PUIubW9udGgsVz1CLmRheSxqPUIuaG91cnMsSz1CLm1pbnV0ZXMsaWU9Qi5zZWNvbmRzLFE9Qi5taWxsaXNlY29uZHMsZWU9Qi56b25lLEo9Qi53ZWVrLEg9bmV3IERhdGUscT1XfHwoJHx8ej8xOkguZ2V0RGF0ZSgpKSxaPSR8fEguZ2V0RnVsbFllYXIoKSxhZT0wOyQmJiF6fHwoYWU9ej4wP3otMTpILmdldE1vbnRoKCkpO3ZhciB1ZSxjZT1qfHwwLHRlPUt8fDAsRGU9aWV8fDAsb2U9UXx8MDtyZXR1cm4gZWU/bmV3IERhdGUoRGF0ZS5VVEMoWixhZSxxLGNlLHRlLERlLG9lKzYwKmVlLm9mZnNldCoxZTMpKTpQP25ldyBEYXRlKERhdGUuVVRDKFosYWUscSxjZSx0ZSxEZSxvZSkpOih1ZT1uZXcgRGF0ZShaLGFlLHEsY2UsdGUsRGUsb2UpLEomJih1ZT1GKHVlKS53ZWVrKEopLnRvRGF0ZSgpKSx1ZSl9Y2F0Y2h7cmV0dXJuIG5ldyBEYXRlKCIiKX19KF8sTCxULHYpLHRoaXMuaW5pdCgpLEQmJkQhPT0hMCYmKHRoaXMuJEw9dGhpcy5sb2NhbGUoRCkuJEwpLEkmJl8hPXRoaXMuZm9ybWF0KEwpJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpLHM9e319ZWxzZSBpZihMIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBrPUwubGVuZ3RoLFI9MTtSPD1rO1IrPTEpe0VbMV09TFtSLTFdO3ZhciBTPXYuYXBwbHkodGhpcyxFKTtpZihTLmlzVmFsaWQoKSl7dGhpcy4kZD1TLiRkLHRoaXMuJEw9Uy4kTCx0aGlzLmluaXQoKTticmVha31SPT09ayYmKHRoaXMuJGQ9bmV3IERhdGUoIiIpKX1lbHNlIGIuY2FsbCh0aGlzLHcpfX19KX0pO3ZhciBIdWU9TmkoKHpJLEdJKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2Ygekk9PSJvYmplY3QiJiZ0eXBlb2YgR0k8InUiP0dJLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9hZHZhbmNlZEZvcm1hdD1lKCl9KSh6SSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1lLnByb3RvdHlwZSxuPXIuZm9ybWF0O3IuZm9ybWF0PWZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMscz10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uYmluZCh0aGlzKShpKTt2YXIgbD10aGlzLiR1dGlscygpLHU9KGl8fCJZWVlZLU1NLUREVEhIOm1tOnNzWiIpLnJlcGxhY2UoL1xbKFteXF1dKyldfFF8d298d3d8d3xXV3xXfHp6enx6fGdnZ2d8R0dHR3xEb3xYfHh8a3sxLDJ9fFMvZyxmdW5jdGlvbihoKXtzd2l0Y2goaCl7Y2FzZSJRIjpyZXR1cm4gTWF0aC5jZWlsKChhLiRNKzEpLzMpO2Nhc2UiRG8iOnJldHVybiBzLm9yZGluYWwoYS4kRCk7Y2FzZSJnZ2dnIjpyZXR1cm4gYS53ZWVrWWVhcigpO2Nhc2UiR0dHRyI6cmV0dXJuIGEuaXNvV2Vla1llYXIoKTtjYXNlIndvIjpyZXR1cm4gcy5vcmRpbmFsKGEud2VlaygpLCJXIik7Y2FzZSJ3IjpjYXNlInd3IjpyZXR1cm4gbC5zKGEud2VlaygpLGg9PT0idyI/MToyLCIwIik7Y2FzZSJXIjpjYXNlIldXIjpyZXR1cm4gbC5zKGEuaXNvV2VlaygpLGg9PT0iVyI/MToyLCIwIik7Y2FzZSJrIjpjYXNlImtrIjpyZXR1cm4gbC5zKFN0cmluZyhhLiRIPT09MD8yNDphLiRIKSxoPT09ImsiPzE6MiwiMCIpO2Nhc2UiWCI6cmV0dXJuIE1hdGguZmxvb3IoYS4kZC5nZXRUaW1lKCkvMWUzKTtjYXNlIngiOnJldHVybiBhLiRkLmdldFRpbWUoKTtjYXNlInoiOnJldHVybiJbIithLm9mZnNldE5hbWUoKSsiXSI7Y2FzZSJ6enoiOnJldHVybiJbIithLm9mZnNldE5hbWUoImxvbmciKSsiXSI7ZGVmYXVsdDpyZXR1cm4gaH19KTtyZXR1cm4gbi5iaW5kKHRoaXMpKHUpfX19KX0pO2Z1bmN0aW9uIHNoZSh0LGUscil7bGV0IG49ITA7Zm9yKDtuOyluPSExLHIuZm9yRWFjaChmdW5jdGlvbihpKXtsZXQgYT0iXlxccyoiK2krIlxccyokIixzPW5ldyBSZWdFeHAoYSk7dFswXS5tYXRjaChzKSYmKGVbaV09ITAsdC5zaGlmdCgxKSxuPSEwKX0pfXZhciBxdWUsaG8sWHVlLGp1ZSxLdWUsV3VlLEJjLEhJLFdJLFlJLHV4LGh4LHFJLFhJLG9FLE1nLGpJLFF1ZSxLSSxmeCxRSSxaSSxsRSwkSSxUJGUsayRlLEUkZSxTJGUsQyRlLEEkZSxfJGUsTCRlLEQkZSxOJGUsUiRlLE0kZSxJJGUsTyRlLFAkZSxCJGUsRiRlLHokZSxHJGUsJCRlLFYkZSxVJGUsSCRlLFp1ZSxXJGUsWSRlLHEkZSxKdWUsWCRlLFZJLGVoZSx0aGUsYUUsUmcsaiRlLEskZSxVSSxzRSxWaSxyaGUsUSRlLHcwLFokZSxZdWUsSiRlLG5oZSxlVmUsaWhlLHRWZSxyVmUsYWhlLG9oZT1NKCgpPT57InVzZSBzdHJpY3QiO3F1ZT1rYShGcCgpLDEpLGhvPWthKEFiKCksMSksWHVlPWthKFZ1ZSgpLDEpLGp1ZT1rYShVdWUoKSwxKSxLdWU9a2EoSHVlKCksMSk7aHQoKTtWdCgpO2hyKCk7a2koKTtoby5kZWZhdWx0LmV4dGVuZChYdWUuZGVmYXVsdCk7aG8uZGVmYXVsdC5leHRlbmQoanVlLmRlZmF1bHQpO2hvLmRlZmF1bHQuZXh0ZW5kKEt1ZS5kZWZhdWx0KTtXdWU9e2ZyaWRheTo1LHNhdHVyZGF5OjZ9LEJjPSIiLEhJPSIiLFlJPSIiLHV4PVtdLGh4PVtdLHFJPW5ldyBNYXAsWEk9W10sb0U9W10sTWc9IiIsakk9IiIsUXVlPVsiYWN0aXZlIiwiZG9uZSIsImNyaXQiLCJtaWxlc3RvbmUiXSxLST1bXSxmeD0hMSxRST0hMSxaST0ic3VuZGF5IixsRT0ic2F0dXJkYXkiLCRJPTAsVCRlPW8oZnVuY3Rpb24oKXtYST1bXSxvRT1bXSxNZz0iIixLST1bXSxhRT0wLFVJPXZvaWQgMCxzRT12b2lkIDAsVmk9W10sQmM9IiIsSEk9IiIsakk9IiIsV0k9dm9pZCAwLFlJPSIiLHV4PVtdLGh4PVtdLGZ4PSExLFFJPSExLCRJPTAscUk9bmV3IE1hcCxfcigpLFpJPSJzdW5kYXkiLGxFPSJzYXR1cmRheSJ9LCJjbGVhciIpLGskZT1vKGZ1bmN0aW9uKHQpe0hJPXR9LCJzZXRBeGlzRm9ybWF0IiksRSRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gSEl9LCJnZXRBeGlzRm9ybWF0IiksUyRlPW8oZnVuY3Rpb24odCl7V0k9dH0sInNldFRpY2tJbnRlcnZhbCIpLEMkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFdJfSwiZ2V0VGlja0ludGVydmFsIiksQSRlPW8oZnVuY3Rpb24odCl7WUk9dH0sInNldFRvZGF5TWFya2VyIiksXyRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gWUl9LCJnZXRUb2RheU1hcmtlciIpLEwkZT1vKGZ1bmN0aW9uKHQpe0JjPXR9LCJzZXREYXRlRm9ybWF0IiksRCRlPW8oZnVuY3Rpb24oKXtmeD0hMH0sImVuYWJsZUluY2x1c2l2ZUVuZERhdGVzIiksTiRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gZnh9LCJlbmREYXRlc0FyZUluY2x1c2l2ZSIpLFIkZT1vKGZ1bmN0aW9uKCl7UUk9ITB9LCJlbmFibGVUb3BBeGlzIiksTSRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gUUl9LCJ0b3BBeGlzRW5hYmxlZCIpLEkkZT1vKGZ1bmN0aW9uKHQpe2pJPXR9LCJzZXREaXNwbGF5TW9kZSIpLE8kZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGpJfSwiZ2V0RGlzcGxheU1vZGUiKSxQJGU9byhmdW5jdGlvbigpe3JldHVybiBCY30sImdldERhdGVGb3JtYXQiKSxCJGU9byhmdW5jdGlvbih0KXt1eD10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSwic2V0SW5jbHVkZXMiKSxGJGU9byhmdW5jdGlvbigpe3JldHVybiB1eH0sImdldEluY2x1ZGVzIikseiRlPW8oZnVuY3Rpb24odCl7aHg9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sInNldEV4Y2x1ZGVzIiksRyRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gaHh9LCJnZXRFeGNsdWRlcyIpLCQkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHFJfSwiZ2V0TGlua3MiKSxWJGU9byhmdW5jdGlvbih0KXtNZz10LFhJLnB1c2godCl9LCJhZGRTZWN0aW9uIiksVSRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gWEl9LCJnZXRTZWN0aW9ucyIpLEgkZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9WXVlKCksZT0xMCxyPTA7Zm9yKDshdCYmcjxlOyl0PVl1ZSgpLHIrKztyZXR1cm4gb0U9Vmksb0V9LCJnZXRUYXNrcyIpLFp1ZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmluY2x1ZGVzKHQuZm9ybWF0KGUudHJpbSgpKSk/ITE6ci5pbmNsdWRlcygid2Vla2VuZHMiKSYmKHQuaXNvV2Vla2RheSgpPT09V3VlW2xFXXx8dC5pc29XZWVrZGF5KCk9PT1XdWVbbEVdKzEpfHxyLmluY2x1ZGVzKHQuZm9ybWF0KCJkZGRkIikudG9Mb3dlckNhc2UoKSk/ITA6ci5pbmNsdWRlcyh0LmZvcm1hdChlLnRyaW0oKSkpfSwiaXNJbnZhbGlkRGF0ZSIpLFckZT1vKGZ1bmN0aW9uKHQpe1pJPXR9LCJzZXRXZWVrZGF5IiksWSRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gWkl9LCJnZXRXZWVrZGF5IikscSRlPW8oZnVuY3Rpb24odCl7bEU9dH0sInNldFdlZWtlbmQiKSxKdWU9byhmdW5jdGlvbih0LGUscixuKXtpZighci5sZW5ndGh8fHQubWFudWFsRW5kVGltZSlyZXR1cm47bGV0IGk7dC5zdGFydFRpbWUgaW5zdGFuY2VvZiBEYXRlP2k9KDAsaG8uZGVmYXVsdCkodC5zdGFydFRpbWUpOmk9KDAsaG8uZGVmYXVsdCkodC5zdGFydFRpbWUsZSwhMCksaT1pLmFkZCgxLCJkIik7bGV0IGE7dC5lbmRUaW1lIGluc3RhbmNlb2YgRGF0ZT9hPSgwLGhvLmRlZmF1bHQpKHQuZW5kVGltZSk6YT0oMCxoby5kZWZhdWx0KSh0LmVuZFRpbWUsZSwhMCk7bGV0W3MsbF09WCRlKGksYSxlLHIsbik7dC5lbmRUaW1lPXMudG9EYXRlKCksdC5yZW5kZXJFbmRUaW1lPWx9LCJjaGVja1Rhc2tEYXRlcyIpLFgkZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9ITEscz1udWxsO2Zvcig7dDw9ZTspYXx8KHM9ZS50b0RhdGUoKSksYT1adWUodCxyLG4saSksYSYmKGU9ZS5hZGQoMSwiZCIpKSx0PXQuYWRkKDEsImQiKTtyZXR1cm5bZSxzXX0sImZpeFRhc2tEYXRlcyIpLFZJPW8oZnVuY3Rpb24odCxlLHIpe3I9ci50cmltKCk7bGV0IGk9L15hZnRlclxzKyg/PGlkcz5bXGRcdy0gXSspLy5leGVjKHIpO2lmKGkhPT1udWxsKXtsZXQgcz1udWxsO2ZvcihsZXQgdSBvZiBpLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IGg9dzAodSk7aCE9PXZvaWQgMCYmKCFzfHxoLmVuZFRpbWU+cy5lbmRUaW1lKSYmKHM9aCl9aWYocylyZXR1cm4gcy5lbmRUaW1lO2xldCBsPW5ldyBEYXRlO3JldHVybiBsLnNldEhvdXJzKDAsMCwwLDApLGx9bGV0IGE9KDAsaG8uZGVmYXVsdCkocixlLnRyaW0oKSwhMCk7aWYoYS5pc1ZhbGlkKCkpcmV0dXJuIGEudG9EYXRlKCk7e1kuZGVidWcoIkludmFsaWQgZGF0ZToiK3IpLFkuZGVidWcoIldpdGggZGF0ZSBmb3JtYXQ6IitlLnRyaW0oKSk7bGV0IHM9bmV3IERhdGUocik7aWYocz09PXZvaWQgMHx8aXNOYU4ocy5nZXRUaW1lKCkpfHxzLmdldEZ1bGxZZWFyKCk8LTFlNHx8cy5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK3IpO3JldHVybiBzfX0sImdldFN0YXJ0RGF0ZSIpLGVoZT1vKGZ1bmN0aW9uKHQpe2xldCBlPS9eKFxkKyg/OlwuXGQrKT8pKFtNZGhtc3d5XXxtcykkLy5leGVjKHQudHJpbSgpKTtyZXR1cm4gZSE9PW51bGw/W051bWJlci5wYXJzZUZsb2F0KGVbMV0pLGVbMl1dOltOYU4sIm1zIl19LCJwYXJzZUR1cmF0aW9uIiksdGhlPW8oZnVuY3Rpb24odCxlLHIsbj0hMSl7cj1yLnRyaW0oKTtsZXQgYT0vXnVudGlsXHMrKD88aWRzPltcZFx3LSBdKykvLmV4ZWMocik7aWYoYSE9PW51bGwpe2xldCBmPW51bGw7Zm9yKGxldCBwIG9mIGEuZ3JvdXBzLmlkcy5zcGxpdCgiICIpKXtsZXQgbT13MChwKTttIT09dm9pZCAwJiYoIWZ8fG0uc3RhcnRUaW1lPGYuc3RhcnRUaW1lKSYmKGY9bSl9aWYoZilyZXR1cm4gZi5zdGFydFRpbWU7bGV0IGQ9bmV3IERhdGU7cmV0dXJuIGQuc2V0SG91cnMoMCwwLDAsMCksZH1sZXQgcz0oMCxoby5kZWZhdWx0KShyLGUudHJpbSgpLCEwKTtpZihzLmlzVmFsaWQoKSlyZXR1cm4gbiYmKHM9cy5hZGQoMSwiZCIpKSxzLnRvRGF0ZSgpO2xldCBsPSgwLGhvLmRlZmF1bHQpKHQpLFt1LGhdPWVoZShyKTtpZighTnVtYmVyLmlzTmFOKHUpKXtsZXQgZj1sLmFkZCh1LGgpO2YuaXNWYWxpZCgpJiYobD1mKX1yZXR1cm4gbC50b0RhdGUoKX0sImdldEVuZERhdGUiKSxhRT0wLFJnPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT12b2lkIDA/KGFFPWFFKzEsInRhc2siK2FFKTp0fSwicGFyc2VJZCIpLGokZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI7ZS5zdWJzdHIoMCwxKT09PSI6Ij9yPWUuc3Vic3RyKDEsZS5sZW5ndGgpOnI9ZTtsZXQgbj1yLnNwbGl0KCIsIiksaT17fTtzaGUobixpLFF1ZSk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspbltzXT1uW3NdLnRyaW0oKTtsZXQgYT0iIjtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTppLmlkPVJnKCksaS5zdGFydFRpbWU9dC5lbmRUaW1lLGE9blswXTticmVhaztjYXNlIDI6aS5pZD1SZygpLGkuc3RhcnRUaW1lPVZJKHZvaWQgMCxCYyxuWzBdKSxhPW5bMV07YnJlYWs7Y2FzZSAzOmkuaWQ9UmcoblswXSksaS5zdGFydFRpbWU9Vkkodm9pZCAwLEJjLG5bMV0pLGE9blsyXTticmVhaztkZWZhdWx0On1yZXR1cm4gYSYmKGkuZW5kVGltZT10aGUoaS5zdGFydFRpbWUsQmMsYSxmeCksaS5tYW51YWxFbmRUaW1lPSgwLGhvLmRlZmF1bHQpKGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksSnVlKGksQmMsaHgsdXgpKSxpfSwiY29tcGlsZURhdGEiKSxLJGU9byhmdW5jdGlvbih0LGUpe2xldCByO2Uuc3Vic3RyKDAsMSk9PT0iOiI/cj1lLnN1YnN0cigxLGUubGVuZ3RoKTpyPWU7bGV0IG49ci5zcGxpdCgiLCIpLGk9e307c2hlKG4saSxRdWUpO2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKW5bYV09blthXS50cmltKCk7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6aS5pZD1SZygpLGkuc3RhcnRUaW1lPXt0eXBlOiJwcmV2VGFza0VuZCIsaWQ6dH0saS5lbmRUaW1lPXtkYXRhOm5bMF19O2JyZWFrO2Nhc2UgMjppLmlkPVJnKCksaS5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMF19LGkuZW5kVGltZT17ZGF0YTpuWzFdfTticmVhaztjYXNlIDM6aS5pZD1SZyhuWzBdKSxpLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blsxXX0saS5lbmRUaW1lPXtkYXRhOm5bMl19O2JyZWFrO2RlZmF1bHQ6fXJldHVybiBpfSwicGFyc2VEYXRhIiksVmk9W10scmhlPXt9LFEkZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3NlY3Rpb246TWcsdHlwZTpNZyxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmV9LHRhc2s6dCxjbGFzc2VzOltdfSxuPUskZShzRSxlKTtyLnJhdy5zdGFydFRpbWU9bi5zdGFydFRpbWUsci5yYXcuZW5kVGltZT1uLmVuZFRpbWUsci5pZD1uLmlkLHIucHJldlRhc2tJZD1zRSxyLmFjdGl2ZT1uLmFjdGl2ZSxyLmRvbmU9bi5kb25lLHIuY3JpdD1uLmNyaXQsci5taWxlc3RvbmU9bi5taWxlc3RvbmUsci5vcmRlcj0kSSwkSSsrO2xldCBpPVZpLnB1c2gocik7c0U9ci5pZCxyaGVbci5pZF09aS0xfSwiYWRkVGFzayIpLHcwPW8oZnVuY3Rpb24odCl7bGV0IGU9cmhlW3RdO3JldHVybiBWaVtlXX0sImZpbmRUYXNrQnlJZCIpLFokZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3NlY3Rpb246TWcsdHlwZTpNZyxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfSxuPWokZShVSSxlKTtyLnN0YXJ0VGltZT1uLnN0YXJ0VGltZSxyLmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLmFjdGl2ZT1uLmFjdGl2ZSxyLmRvbmU9bi5kb25lLHIuY3JpdD1uLmNyaXQsci5taWxlc3RvbmU9bi5taWxlc3RvbmUsVUk9cixvRS5wdXNoKHIpfSwiYWRkVGFza09yZyIpLFl1ZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9byhmdW5jdGlvbihyKXtsZXQgbj1WaVtyXSxpPSIiO3N3aXRjaChWaVtyXS5yYXcuc3RhcnRUaW1lLnR5cGUpe2Nhc2UicHJldlRhc2tFbmQiOntsZXQgYT13MChuLnByZXZUYXNrSWQpO24uc3RhcnRUaW1lPWEuZW5kVGltZTticmVha31jYXNlImdldFN0YXJ0RGF0ZSI6aT1WSSh2b2lkIDAsQmMsVmlbcl0ucmF3LnN0YXJ0VGltZS5zdGFydERhdGEpLGkmJihWaVtyXS5zdGFydFRpbWU9aSk7YnJlYWt9cmV0dXJuIFZpW3JdLnN0YXJ0VGltZSYmKFZpW3JdLmVuZFRpbWU9dGhlKFZpW3JdLnN0YXJ0VGltZSxCYyxWaVtyXS5yYXcuZW5kVGltZS5kYXRhLGZ4KSxWaVtyXS5lbmRUaW1lJiYoVmlbcl0ucHJvY2Vzc2VkPSEwLFZpW3JdLm1hbnVhbEVuZFRpbWU9KDAsaG8uZGVmYXVsdCkoVmlbcl0ucmF3LmVuZFRpbWUuZGF0YSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxKdWUoVmlbcl0sQmMsaHgsdXgpKSksVmlbcl0ucHJvY2Vzc2VkfSwiY29tcGlsZVRhc2siKSxlPSEwO2ZvcihsZXRbcixuXW9mIFZpLmVudHJpZXMoKSl0KHIpLGU9ZSYmbi5wcm9jZXNzZWQ7cmV0dXJuIGV9LCJjb21waWxlVGFza3MiKSxKJGU9byhmdW5jdGlvbih0LGUpe2xldCByPWU7ZGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlIiYmKHI9KDAscXVlLnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24obil7dzAobikhPT12b2lkIDAmJihpaGUobiwoKT0+e3dpbmRvdy5vcGVuKHIsIl9zZWxmIil9KSxxSS5zZXQobixyKSl9KSxuaGUodCwiY2xpY2thYmxlIil9LCJzZXRMaW5rIiksbmhlPW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj13MChyKTtuIT09dm9pZCAwJiZuLmNsYXNzZXMucHVzaChlKX0pfSwic2V0Q2xhc3MiKSxlVmU9byhmdW5jdGlvbih0LGUscil7aWYoZGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8ZT09PXZvaWQgMClyZXR1cm47bGV0IG49W107aWYodHlwZW9mIHI9PSJzdHJpbmciKXtuPXIuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspe2xldCBzPW5bYV0udHJpbSgpO3Muc3RhcnRzV2l0aCgnIicpJiZzLmVuZHNXaXRoKCciJykmJihzPXMuc3Vic3RyKDEscy5sZW5ndGgtMikpLG5bYV09c319bi5sZW5ndGg9PT0wJiZuLnB1c2godCksdzAodCkhPT12b2lkIDAmJmloZSh0LCgpPT57VXQucnVuRnVuYyhlLC4uLm4pfSl9LCJzZXRDbGlja0Z1biIpLGloZT1vKGZ1bmN0aW9uKHQsZSl7S0kucHVzaChmdW5jdGlvbigpe2xldCByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHt0fSJdYCk7ciE9PW51bGwmJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSl9LGZ1bmN0aW9uKCl7bGV0IHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3R9LXRleHQiXWApO3IhPT1udWxsJiZyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2UoKX0pfSl9LCJwdXNoRnVuIiksdFZlPW8oZnVuY3Rpb24odCxlLHIpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2VWZShuLGUscil9KSxuaGUodCwiY2xpY2thYmxlIil9LCJzZXRDbGlja0V2ZW50IiksclZlPW8oZnVuY3Rpb24odCl7S0kuZm9yRWFjaChmdW5jdGlvbihlKXtlKHQpfSl9LCJiaW5kRnVuY3Rpb25zIiksYWhlPXtnZXRDb25maWc6bygoKT0+ZGUoKS5nYW50dCwiZ2V0Q29uZmlnIiksY2xlYXI6VCRlLHNldERhdGVGb3JtYXQ6TCRlLGdldERhdGVGb3JtYXQ6UCRlLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOkQkZSxlbmREYXRlc0FyZUluY2x1c2l2ZTpOJGUsZW5hYmxlVG9wQXhpczpSJGUsdG9wQXhpc0VuYWJsZWQ6TSRlLHNldEF4aXNGb3JtYXQ6ayRlLGdldEF4aXNGb3JtYXQ6RSRlLHNldFRpY2tJbnRlcnZhbDpTJGUsZ2V0VGlja0ludGVydmFsOkMkZSxzZXRUb2RheU1hcmtlcjpBJGUsZ2V0VG9kYXlNYXJrZXI6XyRlLHNldEFjY1RpdGxlOlJyLGdldEFjY1RpdGxlOlByLHNldERpYWdyYW1UaXRsZTpsbixnZXREaWFncmFtVGl0bGU6SnIsc2V0RGlzcGxheU1vZGU6SSRlLGdldERpc3BsYXlNb2RlOk8kZSxzZXRBY2NEZXNjcmlwdGlvbjpCcixnZXRBY2NEZXNjcmlwdGlvbjpGcixhZGRTZWN0aW9uOlYkZSxnZXRTZWN0aW9uczpVJGUsZ2V0VGFza3M6SCRlLGFkZFRhc2s6USRlLGZpbmRUYXNrQnlJZDp3MCxhZGRUYXNrT3JnOlokZSxzZXRJbmNsdWRlczpCJGUsZ2V0SW5jbHVkZXM6RiRlLHNldEV4Y2x1ZGVzOnokZSxnZXRFeGNsdWRlczpHJGUsc2V0Q2xpY2tFdmVudDp0VmUsc2V0TGluazpKJGUsZ2V0TGlua3M6JCRlLGJpbmRGdW5jdGlvbnM6clZlLHBhcnNlRHVyYXRpb246ZWhlLGlzSW52YWxpZERhdGU6WnVlLHNldFdlZWtkYXk6VyRlLGdldFdlZWtkYXk6WSRlLHNldFdlZWtlbmQ6cSRlfTtvKHNoZSwiZ2V0VGFza1RhZ3MiKX0pO3ZhciBjRSxuVmUsbGhlLGlWZSxVdSxhVmUsY2hlLHVoZT1NKCgpPT57InVzZSBzdHJpY3QiO2NFPWthKEFiKCksMSk7aHQoKTttcigpO2ZyKCk7VnQoKTtuaSgpO25WZT1vKGZ1bmN0aW9uKCl7WS5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSwic2V0Q29uZiIpLGxoZT17bW9uZGF5OlRoLHR1ZXNkYXk6YjMsd2VkbmVzZGF5OnczLHRodXJzZGF5OmNjLGZyaWRheTpUMyxzYXR1cmRheTprMyxzdW5kYXk6d2x9LGlWZT1vKCh0LGUpPT57bGV0IHI9Wy4uLnRdLm1hcCgoKT0+LTEvMCksbj1bLi4udF0uc29ydCgoYSxzKT0+YS5zdGFydFRpbWUtcy5zdGFydFRpbWV8fGEub3JkZXItcy5vcmRlciksaT0wO2ZvcihsZXQgYSBvZiBuKWZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWlmKGEuc3RhcnRUaW1lPj1yW3NdKXtyW3NdPWEuZW5kVGltZSxhLm9yZGVyPXMrZSxzPmkmJihpPXMpO2JyZWFrfXJldHVybiBpfSwiZ2V0TWF4SW50ZXJzZWN0aW9ucyIpLGFWZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPWRlKCkuZ2FudHQsYT1kZSgpLnNlY3VyaXR5TGV2ZWwsczthPT09InNhbmRib3giJiYocz16ZSgiI2kiK2UpKTtsZXQgbD1hPT09InNhbmRib3giP3plKHMubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6emUoImJvZHkiKSx1PWE9PT0ic2FuZGJveCI/cy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxoPXUuZ2V0RWxlbWVudEJ5SWQoZSk7VXU9aC5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoLFV1PT09dm9pZCAwJiYoVXU9MTIwMCksaS51c2VXaWR0aCE9PXZvaWQgMCYmKFV1PWkudXNlV2lkdGgpO2xldCBmPW4uZGIuZ2V0VGFza3MoKSxkPVtdO2ZvcihsZXQgQyBvZiBmKWQucHVzaChDLnR5cGUpO2Q9TChkKTtsZXQgcD17fSxtPTIqaS50b3BQYWRkaW5nO2lmKG4uZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8aS5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7bGV0IEM9e307Zm9yKGxldCBJIG9mIGYpQ1tJLnNlY3Rpb25dPT09dm9pZCAwP0NbSS5zZWN0aW9uXT1bSV06Q1tJLnNlY3Rpb25dLnB1c2goSSk7bGV0IEE9MDtmb3IobGV0IEkgb2YgT2JqZWN0LmtleXMoQykpe2xldCBEPWlWZShDW0ldLEEpKzE7QSs9RCxtKz1EKihpLmJhckhlaWdodCtpLmJhckdhcCkscFtJXT1EfX1lbHNle20rPWYubGVuZ3RoKihpLmJhckhlaWdodCtpLmJhckdhcCk7Zm9yKGxldCBDIG9mIGQpcFtDXT1mLmZpbHRlcihBPT5BLnR5cGU9PT1DKS5sZW5ndGh9aC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitVdSsiICIrbSk7bGV0IGc9bC5zZWxlY3QoYFtpZD0iJHtlfSJdYCkseT1DMygpLmRvbWFpbihbTjQoZixmdW5jdGlvbihDKXtyZXR1cm4gQy5zdGFydFRpbWV9KSxENChmLGZ1bmN0aW9uKEMpe3JldHVybiBDLmVuZFRpbWV9KV0pLnJhbmdlUm91bmQoWzAsVXUtaS5sZWZ0UGFkZGluZy1pLnJpZ2h0UGFkZGluZ10pO2Z1bmN0aW9uIHYoQyxBKXtsZXQgST1DLnN0YXJ0VGltZSxEPUEuc3RhcnRUaW1lLGs9MDtyZXR1cm4gST5EP2s9MTpJPEQmJihrPS0xKSxrfW8odiwidGFza0NvbXBhcmUiKSxmLnNvcnQodikseChmLFV1LG0pLFpyKGcsbSxVdSxpLnVzZU1heFdpZHRoKSxnLmFwcGVuZCgidGV4dCIpLnRleHQobi5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsVXUvMikuYXR0cigieSIsaS50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiB4KEMsQSxJKXtsZXQgRD1pLmJhckhlaWdodCxrPUQraS5iYXJHYXAsUj1pLnRvcFBhZGRpbmcsUz1pLmxlZnRQYWRkaW5nLE89YmwoKS5kb21haW4oWzAsZC5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKEJBKTt3KGssUixTLEEsSSxDLG4uZGIuZ2V0RXhjbHVkZXMoKSxuLmRiLmdldEluY2x1ZGVzKCkpLF8oUyxSLEEsSSksYihDLGssUixTLEQsTyxBLEkpLFQoayxSLFMsRCxPKSxFKFMsUixBLEkpfW8oeCwibWFrZUdhbnR0Iik7ZnVuY3Rpb24gYihDLEEsSSxELGssUixTKXtsZXQgTj1bLi4ubmV3IFNldChDLm1hcCgkPT4kLm9yZGVyKSldLm1hcCgkPT5DLmZpbmQoej0+ei5vcmRlcj09PSQpKTtnLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoTikuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixmdW5jdGlvbigkLHope3JldHVybiB6PSQub3JkZXIseipBK0ktMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbigpe3JldHVybiBTLWkucmlnaHRQYWRkaW5nLzJ9KS5hdHRyKCJoZWlnaHQiLEEpLmF0dHIoImNsYXNzIixmdW5jdGlvbigkKXtmb3IobGV0W3osV11vZiBkLmVudHJpZXMoKSlpZigkLnR5cGU9PT1XKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK3olaS5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pO2xldCBQPWcuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShDKS5lbnRlcigpLEY9bi5kYi5nZXRMaW5rcygpO2lmKFAuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKCQpe3JldHVybiAkLmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbigkKXtyZXR1cm4gJC5taWxlc3RvbmU/eSgkLnN0YXJ0VGltZSkrRCsuNSooeSgkLmVuZFRpbWUpLXkoJC5zdGFydFRpbWUpKS0uNSprOnkoJC5zdGFydFRpbWUpK0R9KS5hdHRyKCJ5IixmdW5jdGlvbigkLHope3JldHVybiB6PSQub3JkZXIseipBK0l9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oJCl7cmV0dXJuICQubWlsZXN0b25lP2s6eSgkLnJlbmRlckVuZFRpbWV8fCQuZW5kVGltZSkteSgkLnN0YXJ0VGltZSl9KS5hdHRyKCJoZWlnaHQiLGspLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKCQseil7cmV0dXJuIHo9JC5vcmRlciwoeSgkLnN0YXJ0VGltZSkrRCsuNSooeSgkLmVuZFRpbWUpLXkoJC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoeipBK0krLjUqaykudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKCQpe2xldCB6PSJ0YXNrIixXPSIiOyQuY2xhc3Nlcy5sZW5ndGg+MCYmKFc9JC5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IGo9MDtmb3IobGV0W2llLFFdb2YgZC5lbnRyaWVzKCkpJC50eXBlPT09USYmKGo9aWUlaS5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgSz0iIjtyZXR1cm4gJC5hY3RpdmU/JC5jcml0P0srPSIgYWN0aXZlQ3JpdCI6Sz0iIGFjdGl2ZSI6JC5kb25lPyQuY3JpdD9LPSIgZG9uZUNyaXQiOks9IiBkb25lIjokLmNyaXQmJihLKz0iIGNyaXQiKSxLLmxlbmd0aD09PTAmJihLPSIgdGFzayIpLCQubWlsZXN0b25lJiYoSz0iIG1pbGVzdG9uZSAiK0spLEsrPWosSys9IiAiK1cseitLfSksUC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oJCl7cmV0dXJuICQuaWQrIi10ZXh0In0pLnRleHQoZnVuY3Rpb24oJCl7cmV0dXJuICQudGFza30pLmF0dHIoImZvbnQtc2l6ZSIsaS5mb250U2l6ZSkuYXR0cigieCIsZnVuY3Rpb24oJCl7bGV0IHo9eSgkLnN0YXJ0VGltZSksVz15KCQucmVuZGVyRW5kVGltZXx8JC5lbmRUaW1lKTskLm1pbGVzdG9uZSYmKHorPS41Kih5KCQuZW5kVGltZSkteSgkLnN0YXJ0VGltZSkpLS41KmspLCQubWlsZXN0b25lJiYoVz16K2spO2xldCBqPXRoaXMuZ2V0QkJveCgpLndpZHRoO3JldHVybiBqPlctej9XK2orMS41KmkubGVmdFBhZGRpbmc+Uz96K0QtNTpXK0QrNTooVy16KS8yK3orRH0pLmF0dHIoInkiLGZ1bmN0aW9uKCQseil7cmV0dXJuIHo9JC5vcmRlcix6KkEraS5iYXJIZWlnaHQvMisoaS5mb250U2l6ZS8yLTIpK0l9KS5hdHRyKCJ0ZXh0LWhlaWdodCIsaykuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKCQpe2xldCB6PXkoJC5zdGFydFRpbWUpLFc9eSgkLmVuZFRpbWUpOyQubWlsZXN0b25lJiYoVz16K2spO2xldCBqPXRoaXMuZ2V0QkJveCgpLndpZHRoLEs9IiI7JC5jbGFzc2VzLmxlbmd0aD4wJiYoSz0kLmNsYXNzZXMuam9pbigiICIpKTtsZXQgaWU9MDtmb3IobGV0W2VlLEpdb2YgZC5lbnRyaWVzKCkpJC50eXBlPT09SiYmKGllPWVlJWkubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IFE9IiI7cmV0dXJuICQuYWN0aXZlJiYoJC5jcml0P1E9ImFjdGl2ZUNyaXRUZXh0IitpZTpRPSJhY3RpdmVUZXh0IitpZSksJC5kb25lPyQuY3JpdD9RPVErIiBkb25lQ3JpdFRleHQiK2llOlE9USsiIGRvbmVUZXh0IitpZTokLmNyaXQmJihRPVErIiBjcml0VGV4dCIraWUpLCQubWlsZXN0b25lJiYoUSs9IiBtaWxlc3RvbmVUZXh0Iiksaj5XLXo/VytqKzEuNSppLmxlZnRQYWRkaW5nPlM/SysiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIitpZSsiICIrUTpLKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitpZSsiICIrUSsiIHdpZHRoLSIrajpLKyIgdGFza1RleHQgdGFza1RleHQiK2llKyIgIitRKyIgd2lkdGgtIitqfSksZGUoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giKXtsZXQgJDskPXplKCIjaSIrZSk7bGV0IHo9JC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDtQLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gRi5oYXMoVy5pZCl9KS5lYWNoKGZ1bmN0aW9uKFcpe3ZhciBqPXoucXVlcnlTZWxlY3RvcigiIyIrVy5pZCksSz16LnF1ZXJ5U2VsZWN0b3IoIiMiK1cuaWQrIi10ZXh0Iik7bGV0IGllPWoucGFyZW50Tm9kZTt2YXIgUT16LmNyZWF0ZUVsZW1lbnQoImEiKTtRLnNldEF0dHJpYnV0ZSgieGxpbms6aHJlZiIsRi5nZXQoVy5pZCkpLFEuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfdG9wIiksaWUuYXBwZW5kQ2hpbGQoUSksUS5hcHBlbmRDaGlsZChqKSxRLmFwcGVuZENoaWxkKEspfSl9fW8oYiwiZHJhd1JlY3RzIik7ZnVuY3Rpb24gdyhDLEEsSSxELGssUixTLE8pe2lmKFMubGVuZ3RoPT09MCYmTy5sZW5ndGg9PT0wKXJldHVybjtsZXQgTixQO2ZvcihsZXR7c3RhcnRUaW1lOmosZW5kVGltZTpLfW9mIFIpKE49PT12b2lkIDB8fGo8TikmJihOPWopLChQPT09dm9pZCAwfHxLPlApJiYoUD1LKTtpZighTnx8IVApcmV0dXJuO2lmKCgwLGNFLmRlZmF1bHQpKFApLmRpZmYoKDAsY0UuZGVmYXVsdCkoTiksInllYXIiKT41KXtZLndhcm4oIlRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IHRpbWUgaXMgbW9yZSB0aGFuIDUgeWVhcnMuIFRoaXMgd2lsbCBjYXVzZSBwZXJmb3JtYW5jZSBpc3N1ZXMuIFNraXBwaW5nIGRyYXdpbmcgZXhjbHVkZSBkYXlzLiIpO3JldHVybn1sZXQgRj1uLmRiLmdldERhdGVGb3JtYXQoKSxCPVtdLCQ9bnVsbCx6PSgwLGNFLmRlZmF1bHQpKE4pO2Zvcig7ei52YWx1ZU9mKCk8PVA7KW4uZGIuaXNJbnZhbGlkRGF0ZSh6LEYsUyxPKT8kPyQuZW5kPXo6JD17c3RhcnQ6eixlbmQ6en06JCYmKEIucHVzaCgkKSwkPW51bGwpLHo9ei5hZGQoMSwiZCIpO2cuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShCKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihqKXtyZXR1cm4iZXhjbHVkZS0iK2ouc3RhcnQuZm9ybWF0KCJZWVlZLU1NLUREIil9KS5hdHRyKCJ4IixmdW5jdGlvbihqKXtyZXR1cm4geShqLnN0YXJ0KStJfSkuYXR0cigieSIsaS5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGope2xldCBLPWouZW5kLmFkZCgxLCJkYXkiKTtyZXR1cm4geShLKS15KGouc3RhcnQpfSkuYXR0cigiaGVpZ2h0IixrLUEtaS5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oaixLKXtyZXR1cm4oeShqLnN0YXJ0KStJKy41Kih5KGouZW5kKS15KGouc3RhcnQpKSkudG9TdHJpbmcoKSsicHggIisoSypDKy41KmspLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfW8odywiZHJhd0V4Y2x1ZGVEYXlzIik7ZnVuY3Rpb24gXyhDLEEsSSxEKXtsZXQgaz12Nyh5KS50aWNrU2l6ZSgtRCtBK2kuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoZGQobi5kYi5nZXRBeGlzRm9ybWF0KCl8fGkuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpLFM9L14oWzEtOV1cZCopKG1pbGxpc2Vjb25kfHNlY29uZHxtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkLy5leGVjKG4uZGIuZ2V0VGlja0ludGVydmFsKCl8fGkudGlja0ludGVydmFsKTtpZihTIT09bnVsbCl7bGV0IE89U1sxXSxOPVNbMl0sUD1uLmRiLmdldFdlZWtkYXkoKXx8aS53ZWVrZGF5O3N3aXRjaChOKXtjYXNlIm1pbGxpc2Vjb25kIjprLnRpY2tzKG9jLmV2ZXJ5KE8pKTticmVhaztjYXNlInNlY29uZCI6ay50aWNrcyhYcy5ldmVyeShPKSk7YnJlYWs7Y2FzZSJtaW51dGUiOmsudGlja3MobXUuZXZlcnkoTykpO2JyZWFrO2Nhc2UiaG91ciI6ay50aWNrcyhndS5ldmVyeShPKSk7YnJlYWs7Y2FzZSJkYXkiOmsudGlja3MoTG8uZXZlcnkoTykpO2JyZWFrO2Nhc2Uid2VlayI6ay50aWNrcyhsaGVbUF0uZXZlcnkoTykpO2JyZWFrO2Nhc2UibW9udGgiOmsudGlja3MoeXUuZXZlcnkoTykpO2JyZWFrfX1pZihnLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MrIiwgIisoRC01MCkrIikiKS5jYWxsKGspLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImR5IiwiMWVtIiksbi5kYi50b3BBeGlzRW5hYmxlZCgpfHxpLnRvcEF4aXMpe2xldCBPPXk3KHkpLnRpY2tTaXplKC1EK0EraS5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChkZChuLmRiLmdldEF4aXNGb3JtYXQoKXx8aS5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoUyE9PW51bGwpe2xldCBOPVNbMV0sUD1TWzJdLEY9bi5kYi5nZXRXZWVrZGF5KCl8fGkud2Vla2RheTtzd2l0Y2goUCl7Y2FzZSJtaWxsaXNlY29uZCI6Ty50aWNrcyhvYy5ldmVyeShOKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOk8udGlja3MoWHMuZXZlcnkoTikpO2JyZWFrO2Nhc2UibWludXRlIjpPLnRpY2tzKG11LmV2ZXJ5KE4pKTticmVhaztjYXNlImhvdXIiOk8udGlja3MoZ3UuZXZlcnkoTikpO2JyZWFrO2Nhc2UiZGF5IjpPLnRpY2tzKExvLmV2ZXJ5KE4pKTticmVhaztjYXNlIndlZWsiOk8udGlja3MobGhlW0ZdLmV2ZXJ5KE4pKTticmVhaztjYXNlIm1vbnRoIjpPLnRpY2tzKHl1LmV2ZXJ5KE4pKTticmVha319Zy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDKyIsICIrQSsiKSIpLmNhbGwoTykuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCl9fW8oXywibWFrZUdyaWQiKTtmdW5jdGlvbiBUKEMsQSl7bGV0IEk9MCxEPU9iamVjdC5rZXlzKHApLm1hcChrPT5bayxwW2tdXSk7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKEQpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKGspe2xldCBSPWtbMF0uc3BsaXQoamUubGluZUJyZWFrUmVnZXgpLFM9LShSLmxlbmd0aC0xKS8yLE89dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO08uc2V0QXR0cmlidXRlKCJkeSIsUysiZW0iKTtmb3IobGV0W04sUF1vZiBSLmVudHJpZXMoKSl7bGV0IEY9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtGLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLEYuc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxOPjAmJkYuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLEYudGV4dENvbnRlbnQ9UCxPLmFwcGVuZENoaWxkKEYpfXJldHVybiBPfSkuYXR0cigieCIsMTApLmF0dHIoInkiLGZ1bmN0aW9uKGssUil7aWYoUj4wKWZvcihsZXQgUz0wO1M8UjtTKyspcmV0dXJuIEkrPURbUi0xXVsxXSxrWzFdKkMvMitJKkMrQTtlbHNlIHJldHVybiBrWzFdKkMvMitBfSkuYXR0cigiZm9udC1zaXplIixpLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGspe2ZvcihsZXRbUixTXW9mIGQuZW50cmllcygpKWlmKGtbMF09PT1TKXJldHVybiJzZWN0aW9uVGl0bGUgc2VjdGlvblRpdGxlIitSJWkubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvblRpdGxlIn0pfW8oVCwidmVydExhYmVscyIpO2Z1bmN0aW9uIEUoQyxBLEksRCl7bGV0IGs9bi5kYi5nZXRUb2RheU1hcmtlcigpO2lmKGs9PT0ib2ZmIilyZXR1cm47bGV0IFI9Zy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksUz1uZXcgRGF0ZSxPPVIuYXBwZW5kKCJsaW5lIik7Ty5hdHRyKCJ4MSIseShTKStDKS5hdHRyKCJ4MiIseShTKStDKS5hdHRyKCJ5MSIsaS50aXRsZVRvcE1hcmdpbikuYXR0cigieTIiLEQtaS50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLGshPT0iIiYmTy5hdHRyKCJzdHlsZSIsay5yZXBsYWNlKC8sL2csIjsiKSl9byhFLCJkcmF3VG9kYXkiKTtmdW5jdGlvbiBMKEMpe2xldCBBPXt9LEk9W107Zm9yKGxldCBEPTAsaz1DLmxlbmd0aDtEPGs7KytEKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChBLENbRF0pfHwoQVtDW0RdXT0hMCxJLnB1c2goQ1tEXSkpO3JldHVybiBJfW8oTCwiY2hlY2tVbmlxdWUiKX0sImRyYXciKSxjaGU9e3NldENvbmY6blZlLGRyYXc6YVZlfX0pO3ZhciBzVmUsaGhlLGZoZT1NKCgpPT57InVzZSBzdHJpY3QiO3NWZT1vKHQ9PmAKICAubWVybWFpZC1tYWluLWZvbnQgewogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQoKICAuZXhjbHVkZS1yYW5nZSB7CiAgICBmaWxsOiAke3QuZXhjbHVkZUJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uIHsKICAgIHN0cm9rZTogbm9uZTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uMCB7CiAgICBmaWxsOiAke3Quc2VjdGlvbkJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uMiB7CiAgICBmaWxsOiAke3Quc2VjdGlvbkJrZ0NvbG9yMn07CiAgfQoKICAuc2VjdGlvbjEsCiAgLnNlY3Rpb24zIHsKICAgIGZpbGw6ICR7dC5hbHRTZWN0aW9uQmtnQ29sb3J9OwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb25UaXRsZTAgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTEgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTIgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTMgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZSB7CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgoKICAvKiBHcmlkIGFuZCBheGlzICovCgogIC5ncmlkIC50aWNrIHsKICAgIHN0cm9rZTogJHt0LmdyaWRDb2xvcn07CiAgICBvcGFjaXR5OiAwLjg7CiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgfQoKICAuZ3JpZCAudGljayB0ZXh0IHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CgogIC5ncmlkIHBhdGggewogICAgc3Ryb2tlLXdpZHRoOiAwOwogIH0KCgogIC8qIFRvZGF5IGxpbmUgKi8KCiAgLnRvZGF5IHsKICAgIGZpbGw6IG5vbmU7CiAgICBzdHJva2U6ICR7dC50b2RheUxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICB9CgoKICAvKiBUYXNrIHN0eWxpbmcgKi8KCiAgLyogRGVmYXVsdCB0YXNrICovCgogIC50YXNrIHsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC50YXNrVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBlbmQ7CiAgfQoKCiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqLwoKICAudGFzay5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLnRhc2tUZXh0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke3QudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKCiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi8KCiAgLnRhc2tUZXh0MCwKICAudGFza1RleHQxLAogIC50YXNrVGV4dDIsCiAgLnRhc2tUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHRDb2xvcn07CiAgfQoKICAudGFzazAsCiAgLnRhc2sxLAogIC50YXNrMiwKICAudGFzazMgewogICAgZmlsbDogJHt0LnRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC50YXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTAsCiAgLnRhc2tUZXh0T3V0c2lkZTIKICB7CiAgICBmaWxsOiAke3QudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTEsCiAgLnRhc2tUZXh0T3V0c2lkZTMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgoKICAvKiBBY3RpdmUgdGFzayAqLwoKICAuYWN0aXZlMCwKICAuYWN0aXZlMSwKICAuYWN0aXZlMiwKICAuYWN0aXZlMyB7CiAgICBmaWxsOiAke3QuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZlVGV4dDAsCiAgLmFjdGl2ZVRleHQxLAogIC5hY3RpdmVUZXh0MiwKICAuYWN0aXZlVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIENvbXBsZXRlZCB0YXNrICovCgogIC5kb25lMCwKICAuZG9uZTEsCiAgLmRvbmUyLAogIC5kb25lMyB7CiAgICBzdHJva2U6ICR7dC5kb25lVGFza0JvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lVGV4dDAsCiAgLmRvbmVUZXh0MSwKICAuZG9uZVRleHQyLAogIC5kb25lVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovCgogIC5jcml0MCwKICAuY3JpdDEsCiAgLmNyaXQyLAogIC5jcml0MyB7CiAgICBzdHJva2U6ICR7dC5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmNyaXRCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuYWN0aXZlQ3JpdDAsCiAgLmFjdGl2ZUNyaXQxLAogIC5hY3RpdmVDcml0MiwKICAuYWN0aXZlQ3JpdDMgewogICAgc3Ryb2tlOiAke3QuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVDcml0MCwKICAuZG9uZUNyaXQxLAogIC5kb25lQ3JpdDIsCiAgLmRvbmVDcml0MyB7CiAgICBzdHJva2U6ICR7dC5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLm1pbGVzdG9uZSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7CiAgfQoKICAubWlsZXN0b25lVGV4dCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQogIC5kb25lQ3JpdFRleHQwLAogIC5kb25lQ3JpdFRleHQxLAogIC5kb25lQ3JpdFRleHQyLAogIC5kb25lQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC5hY3RpdmVDcml0VGV4dDAsCiAgLmFjdGl2ZUNyaXRUZXh0MSwKICAuYWN0aXZlQ3JpdFRleHQyLAogIC5hY3RpdmVDcml0VGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLnRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J8fHQudGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KYCwiZ2V0U3R5bGVzIiksaGhlPXNWZX0pO3ZhciBkaGU9e307dnIoZGhlLHtkaWFncmFtOigpPT5vVmV9KTt2YXIgb1ZlLHBoZT1NKCgpPT57InVzZSBzdHJpY3QiOyR1ZSgpO29oZSgpO3VoZSgpO2ZoZSgpO29WZT17cGFyc2VyOkd1ZSxkYjphaGUscmVuZGVyZXI6Y2hlLHN0eWxlczpoaGV9fSk7dmFyIHloZSx2aGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOZygpO2h0KCk7eWhlPXtwYXJzZTpvKGFzeW5jIHQ9PntsZXQgZT1hd2FpdCBHbCgiaW5mbyIsdCk7WS5kZWJ1ZyhlKX0sInBhcnNlIil9fSk7dmFyIGR4LEpJPU0oKCk9PntkeD0iMTEuNC4xIn0pO3ZhciBmVmUsZFZlLHhoZSxiaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtKSSgpO2ZWZT17dmVyc2lvbjpkeH0sZFZlPW8oKCk9PmZWZS52ZXJzaW9uLCJnZXRWZXJzaW9uIikseGhlPXtnZXRWZXJzaW9uOmRWZX19KTt2YXIgT2EsSHU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO1Z0KCk7T2E9byh0PT57bGV0e3NlY3VyaXR5TGV2ZWw6ZX09ZGUoKSxyPXplKCJib2R5Iik7aWYoZT09PSJzYW5kYm94Iil7bGV0IGE9emUoYCNpJHt0fWApLm5vZGUoKT8uY29udGVudERvY3VtZW50Pz9kb2N1bWVudDtyPXplKGEuYm9keSl9cmV0dXJuIHIuc2VsZWN0KGAjJHt0fWApfSwic2VsZWN0U3ZnRWxlbWVudCIpfSk7dmFyIHBWZSx3aGUsVGhlPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtIdSgpO25pKCk7cFZlPW8oKHQsZSxyKT0+e1kuZGVidWcoYHJlbmRlcmluZyBpbmZvIGRpYWdyYW0KYCt0KTtsZXQgbj1PYShlKTtacihuLDEwMCw0MDAsITApLG4uYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7cn1gKX0sImRyYXciKSx3aGU9e2RyYXc6cFZlfX0pO3ZhciBraGU9e307dnIoa2hlLHtkaWFncmFtOigpPT5tVmV9KTt2YXIgbVZlLEVoZT1NKCgpPT57InVzZSBzdHJpY3QiO3ZoZSgpO2JoZSgpO1RoZSgpO21WZT17cGFyc2VyOnloZSxkYjp4aGUscmVuZGVyZXI6d2hlfX0pO3ZhciBBaGUsZU8sdUUsdE8sdlZlLHhWZSxiVmUsd1ZlLFRWZSxrVmUsRVZlLGhFLHJPPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtraSgpO2hzKCk7QWhlPXVyLnBpZSxlTz17c2VjdGlvbnM6bmV3IE1hcCxzaG93RGF0YTohMSxjb25maWc6QWhlfSx1RT1lTy5zZWN0aW9ucyx0Tz1lTy5zaG93RGF0YSx2VmU9c3RydWN0dXJlZENsb25lKEFoZSkseFZlPW8oKCk9PnN0cnVjdHVyZWRDbG9uZSh2VmUpLCJnZXRDb25maWciKSxiVmU9bygoKT0+e3VFPW5ldyBNYXAsdE89ZU8uc2hvd0RhdGEsX3IoKX0sImNsZWFyIiksd1ZlPW8oKHtsYWJlbDp0LHZhbHVlOmV9KT0+e3VFLmhhcyh0KXx8KHVFLnNldCh0LGUpLFkuZGVidWcoYGFkZGVkIG5ldyBzZWN0aW9uOiAke3R9LCB3aXRoIHZhbHVlOiAke2V9YCkpfSwiYWRkU2VjdGlvbiIpLFRWZT1vKCgpPT51RSwiZ2V0U2VjdGlvbnMiKSxrVmU9byh0PT57dE89dH0sInNldFNob3dEYXRhIiksRVZlPW8oKCk9PnRPLCJnZXRTaG93RGF0YSIpLGhFPXtnZXRDb25maWc6eFZlLGNsZWFyOmJWZSxzZXREaWFncmFtVGl0bGU6bG4sZ2V0RGlhZ3JhbVRpdGxlOkpyLHNldEFjY1RpdGxlOlJyLGdldEFjY1RpdGxlOlByLHNldEFjY0Rlc2NyaXB0aW9uOkJyLGdldEFjY0Rlc2NyaXB0aW9uOkZyLGFkZFNlY3Rpb246d1ZlLGdldFNlY3Rpb25zOlRWZSxzZXRTaG93RGF0YTprVmUsZ2V0U2hvd0RhdGE6RVZlfX0pO3ZhciBTVmUsX2hlLExoZT1NKCgpPT57InVzZSBzdHJpY3QiO05nKCk7aHQoKTtveCgpO3JPKCk7U1ZlPW8oKHQsZSk9PntsZih0LGUpLGUuc2V0U2hvd0RhdGEodC5zaG93RGF0YSksdC5zZWN0aW9ucy5tYXAoZS5hZGRTZWN0aW9uKX0sInBvcHVsYXRlRGIiKSxfaGU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IEdsKCJwaWUiLHQpO1kuZGVidWcoZSksU1ZlKGUsaEUpfSwicGFyc2UiKX19KTt2YXIgQ1ZlLERoZSxOaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDVmU9byh0PT5gCiAgLnBpZUNpcmNsZXsKICAgIHN0cm9rZTogJHt0LnBpZVN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aCA6ICR7dC5waWVTdHJva2VXaWR0aH07CiAgICBvcGFjaXR5IDogJHt0LnBpZU9wYWNpdHl9OwogIH0KICAucGllT3V0ZXJDaXJjbGV7CiAgICBzdHJva2U6ICR7dC5waWVPdXRlclN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LnBpZU91dGVyU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogbm9uZTsKICB9CiAgLnBpZVRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAke3QucGllVGl0bGVUZXh0U2l6ZX07CiAgICBmaWxsOiAke3QucGllVGl0bGVUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICB9CiAgLnNsaWNlIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmaWxsOiAke3QucGllU2VjdGlvblRleHRDb2xvcn07CiAgICBmb250LXNpemU6JHt0LnBpZVNlY3Rpb25UZXh0U2l6ZX07CiAgICAvLyBmaWxsOiB3aGl0ZTsKICB9CiAgLmxlZ2VuZCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5waWVMZWdlbmRUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHt0LnBpZUxlZ2VuZFRleHRTaXplfTsKICB9CmAsImdldFN0eWxlcyIpLERoZT1DVmV9KTt2YXIgQVZlLF9WZSxSaGUsTWhlPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTtWdCgpO2h0KCk7SHUoKTtuaSgpO2hyKCk7QVZlPW8odD0+e2xldCBlPVsuLi50LmVudHJpZXMoKV0ubWFwKG49Pih7bGFiZWw6blswXSx2YWx1ZTpuWzFdfSkpLnNvcnQoKG4saSk9PmkudmFsdWUtbi52YWx1ZSk7cmV0dXJuIFIzKCkudmFsdWUobj0+bi52YWx1ZSkoZSl9LCJjcmVhdGVQaWVBcmNzIiksX1ZlPW8oKHQsZSxyLG4pPT57WS5kZWJ1ZyhgcmVuZGVyaW5nIHBpZSBjaGFydApgK3QpO2xldCBpPW4uZGIsYT1kZSgpLHM9d3MoaS5nZXRDb25maWcoKSxhLnBpZSksbD00MCx1PTE4LGg9NCxmPTQ1MCxkPWYscD1PYShlKSxtPXAuYXBwZW5kKCJnIik7bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkLzIrIiwiK2YvMisiKSIpO2xldHt0aGVtZVZhcmlhYmxlczpnfT1hLFt5XT1GbyhnLnBpZU91dGVyU3Ryb2tlV2lkdGgpO3k/Pz0yO2xldCB2PXMudGV4dFBvc2l0aW9uLHg9TWF0aC5taW4oZCxmKS8yLWwsYj1FbCgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKHgpLHc9RWwoKS5pbm5lclJhZGl1cyh4KnYpLm91dGVyUmFkaXVzKHgqdik7bS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCkuYXR0cigiciIseCt5LzIpLmF0dHIoImNsYXNzIiwicGllT3V0ZXJDaXJjbGUiKTtsZXQgXz1pLmdldFNlY3Rpb25zKCksVD1BVmUoXyksRT1bZy5waWUxLGcucGllMixnLnBpZTMsZy5waWU0LGcucGllNSxnLnBpZTYsZy5waWU3LGcucGllOCxnLnBpZTksZy5waWUxMCxnLnBpZTExLGcucGllMTJdLEw9ZHUoRSk7bS5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShUKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGIpLmF0dHIoImZpbGwiLGs9Pkwoay5kYXRhLmxhYmVsKSkuYXR0cigiY2xhc3MiLCJwaWVDaXJjbGUiKTtsZXQgQz0wO18uZm9yRWFjaChrPT57Qys9a30pLG0uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoVCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KGs9PihrLmRhdGEudmFsdWUvQyoxMDApLnRvRml4ZWQoMCkrIiUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGs9PiJ0cmFuc2xhdGUoIit3LmNlbnRyb2lkKGspKyIpIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLG0uYXBwZW5kKCJ0ZXh0IikudGV4dChpLmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtKGYtNTApLzIpLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7bGV0IEE9bS5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKEwuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChrLFIpPT57bGV0IFM9dStoLE89UypMLmRvbWFpbigpLmxlbmd0aC8yLE49MTIqdSxQPVIqUy1PO3JldHVybiJ0cmFuc2xhdGUoIitOKyIsIitQKyIpIn0pO0EuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsdSkuc3R5bGUoImZpbGwiLEwpLnN0eWxlKCJzdHJva2UiLEwpLEEuZGF0YShUKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix1K2gpLmF0dHIoInkiLHUtaCkudGV4dChrPT57bGV0e2xhYmVsOlIsdmFsdWU6U309ay5kYXRhO3JldHVybiBpLmdldFNob3dEYXRhKCk/YCR7Un0gWyR7U31dYDpSfSk7bGV0IEk9TWF0aC5tYXgoLi4uQS5zZWxlY3RBbGwoInRleHQiKS5ub2RlcygpLm1hcChrPT5rPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD8/MCkpLEQ9ZCtsK3UraCtJO3AuYXR0cigidmlld0JveCIsYDAgMCAke0R9ICR7Zn1gKSxacihwLGYsRCxzLnVzZU1heFdpZHRoKX0sImRyYXciKSxSaGU9e2RyYXc6X1ZlfX0pO3ZhciBJaGU9e307dnIoSWhlLHtkaWFncmFtOigpPT5MVmV9KTt2YXIgTFZlLE9oZT1NKCgpPT57InVzZSBzdHJpY3QiO0xoZSgpO3JPKCk7TmhlKCk7TWhlKCk7TFZlPXtwYXJzZXI6X2hlLGRiOmhFLHJlbmRlcmVyOlJoZSxzdHlsZXM6RGhlfX0pO3ZhciBuTyxGaGUsemhlPU0oKCk9PnsidXNlIHN0cmljdCI7bk89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFRlLHNlLEVlLEFlKXtmb3IoRWU9RWV8fHt9LEFlPVRlLmxlbmd0aDtBZS0tO0VlW1RlW0FlXV09c2UpO3JldHVybiBFZX0sIm8iKSxlPVsxLDNdLHI9WzEsNF0sbj1bMSw1XSxpPVsxLDZdLGE9WzEsN10scz1bMSw0LDUsMTAsMTIsMTMsMTQsMTgsMjUsMzUsMzcsMzksNDEsNDIsNDgsNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjEsNjMsNjQsNjUsNjYsNjddLGw9WzEsNCw1LDEwLDEyLDEzLDE0LDE4LDI1LDI4LDM1LDM3LDM5LDQxLDQyLDQ4LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYxLDYzLDY0LDY1LDY2LDY3XSx1PVs1NSw1Niw1N10saD1bMiwzNl0sZj1bMSwzN10sZD1bMSwzNl0scD1bMSwzOF0sbT1bMSwzNV0sZz1bMSw0M10seT1bMSw0MV0sdj1bMSwxNF0seD1bMSwyM10sYj1bMSwxOF0sdz1bMSwxOV0sXz1bMSwyMF0sVD1bMSwyMV0sRT1bMSwyMl0sTD1bMSwyNF0sQz1bMSwyNV0sQT1bMSwyNl0sST1bMSwyN10sRD1bMSwyOF0saz1bMSwyOV0sUj1bMSwzMl0sUz1bMSwzM10sTz1bMSwzNF0sTj1bMSwzOV0sUD1bMSw0MF0sRj1bMSw0Ml0sQj1bMSw0NF0sJD1bMSw2Ml0sej1bMSw2MV0sVz1bNCw1LDgsMTAsMTIsMTMsMTQsMTgsNDQsNDcsNDksNTUsNTYsNTcsNjMsNjQsNjUsNjYsNjddLGo9WzEsNjVdLEs9WzEsNjZdLGllPVsxLDY3XSxRPVsxLDY4XSxlZT1bMSw2OV0sSj1bMSw3MF0sSD1bMSw3MV0scT1bMSw3Ml0sWj1bMSw3M10sYWU9WzEsNzRdLHVlPVsxLDc1XSxjZT1bMSw3Nl0sdGU9WzQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE4XSxEZT1bMSw5MF0sb2U9WzEsOTFdLGtlPVsxLDkyXSxGZT1bMSw5OV0sQmU9WzEsOTNdLFZlPVsxLDk2XSxHZT1bMSw5NF0sSGU9WzEsOTVdLHhlPVsxLDk3XSxYPVsxLDk4XSxmZT1bMSwxMDJdLGhlPVsxMCw1NSw1Niw1N10sZ2U9WzQsNSw2LDgsMTAsMTEsMTMsMTcsMTgsMTksMjAsNTUsNTYsNTddLG5lPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixpZFN0cmluZ1Rva2VuOjMsQUxQSEE6NCxOVU06NSxOT0RFX1NUUklORzo2LERPV046NyxNSU5VUzo4LERFRkFVTFQ6OSxDT01NQToxMCxDT0xPTjoxMSxBTVA6MTIsQlJLVDoxMyxNVUxUOjE0LFVOSUNPREVfVEVYVDoxNSxzdHlsZUNvbXBvbmVudDoxNixVTklUOjE3LFNQQUNFOjE4LFNUWUxFOjE5LFBDVDoyMCxpZFN0cmluZzoyMSxzdHlsZToyMixzdHlsZXNPcHQ6MjMsY2xhc3NEZWZTdGF0ZW1lbnQ6MjQsQ0xBU1NERUY6MjUsc3RhcnQ6MjYsZW9sOjI3LFFVQURSQU5UOjI4LGRvY3VtZW50OjI5LGxpbmU6MzAsc3RhdGVtZW50OjMxLGF4aXNEZXRhaWxzOjMyLHF1YWRyYW50RGV0YWlsczozMyxwb2ludHM6MzQsdGl0bGU6MzUsdGl0bGVfdmFsdWU6MzYsYWNjX3RpdGxlOjM3LGFjY190aXRsZV92YWx1ZTozOCxhY2NfZGVzY3I6MzksYWNjX2Rlc2NyX3ZhbHVlOjQwLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6NDEsc2VjdGlvbjo0Mix0ZXh0OjQzLHBvaW50X3N0YXJ0OjQ0LHBvaW50X3g6NDUscG9pbnRfeTo0NixjbGFzc19uYW1lOjQ3LCJYLUFYSVMiOjQ4LCJBWElTLVRFWFQtREVMSU1JVEVSIjo0OSwiWS1BWElTIjo1MCxRVUFEUkFOVF8xOjUxLFFVQURSQU5UXzI6NTIsUVVBRFJBTlRfMzo1MyxRVUFEUkFOVF80OjU0LE5FV0xJTkU6NTUsU0VNSTo1NixFT0Y6NTcsYWxwaGFOdW1Ub2tlbjo1OCx0ZXh0Tm9UYWdzVG9rZW46NTksU1RSOjYwLE1EX1NUUjo2MSxhbHBoYU51bTo2MixQVU5DVFVBVElPTjo2MyxQTFVTOjY0LEVRVUFMUzo2NSxET1Q6NjYsVU5ERVJTQ09SRTo2NywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiQUxQSEEiLDU6Ik5VTSIsNjoiTk9ERV9TVFJJTkciLDc6IkRPV04iLDg6Ik1JTlVTIiw5OiJERUZBVUxUIiwxMDoiQ09NTUEiLDExOiJDT0xPTiIsMTI6IkFNUCIsMTM6IkJSS1QiLDE0OiJNVUxUIiwxNToiVU5JQ09ERV9URVhUIiwxNzoiVU5JVCIsMTg6IlNQQUNFIiwxOToiU1RZTEUiLDIwOiJQQ1QiLDI1OiJDTEFTU0RFRiIsMjg6IlFVQURSQU5UIiwzNToidGl0bGUiLDM2OiJ0aXRsZV92YWx1ZSIsMzc6ImFjY190aXRsZSIsMzg6ImFjY190aXRsZV92YWx1ZSIsMzk6ImFjY19kZXNjciIsNDA6ImFjY19kZXNjcl92YWx1ZSIsNDE6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDQyOiJzZWN0aW9uIiw0NDoicG9pbnRfc3RhcnQiLDQ1OiJwb2ludF94Iiw0NjoicG9pbnRfeSIsNDc6ImNsYXNzX25hbWUiLDQ4OiJYLUFYSVMiLDQ5OiJBWElTLVRFWFQtREVMSU1JVEVSIiw1MDoiWS1BWElTIiw1MToiUVVBRFJBTlRfMSIsNTI6IlFVQURSQU5UXzIiLDUzOiJRVUFEUkFOVF8zIiw1NDoiUVVBRFJBTlRfNCIsNTU6Ik5FV0xJTkUiLDU2OiJTRU1JIiw1NzoiRU9GIiw2MDoiU1RSIiw2MToiTURfU1RSIiw2MzoiUFVOQ1RVQVRJT04iLDY0OiJQTFVTIiw2NToiRVFVQUxTIiw2NjoiRE9UIiw2NzoiVU5ERVJTQ09SRSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzIxLDFdLFsyMSwyXSxbMjIsMV0sWzIyLDJdLFsyMywxXSxbMjMsM10sWzI0LDVdLFsyNiwyXSxbMjYsMl0sWzI2LDJdLFsyOSwwXSxbMjksMl0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMSwyXSxbMzEsMl0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzM0LDRdLFszNCw1XSxbMzQsNV0sWzM0LDZdLFszMiw0XSxbMzIsM10sWzMyLDJdLFszMiw0XSxbMzIsM10sWzMyLDJdLFszMywyXSxbMzMsMl0sWzMzLDJdLFszMywyXSxbMjcsMV0sWzI3LDFdLFsyNywxXSxbNDMsMV0sWzQzLDJdLFs0MywxXSxbNDMsMV0sWzYyLDFdLFs2MiwyXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OSwxXSxbNTksMV0sWzU5LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oc2UsRWUsQWUsUGUsTWUsbWUsV2Upe3ZhciBSZT1tZS5sZW5ndGgtMTtzd2l0Y2goTWUpe2Nhc2UgMjM6dGhpcy4kPW1lW1JlXTticmVhaztjYXNlIDI0OnRoaXMuJD1tZVtSZS0xXSsiIittZVtSZV07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9bWVbUmUtMV0rbWVbUmVdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPVttZVtSZV0udHJpbSgpXTticmVhaztjYXNlIDI4Om1lW1JlLTJdLnB1c2gobWVbUmVdLnRyaW0oKSksdGhpcy4kPW1lW1JlLTJdO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPW1lW1JlLTRdLFBlLmFkZENsYXNzKG1lW1JlLTJdLG1lW1JlXSk7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9bWVbUmVdLnRyaW0oKSxQZS5zZXREaWFncmFtVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDQzOnRoaXMuJD1tZVtSZV0udHJpbSgpLFBlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA0NDpjYXNlIDQ1OnRoaXMuJD1tZVtSZV0udHJpbSgpLFBlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0NjpQZS5hZGRTZWN0aW9uKG1lW1JlXS5zdWJzdHIoOCkpLHRoaXMuJD1tZVtSZV0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgNDc6UGUuYWRkUG9pbnQobWVbUmUtM10sIiIsbWVbUmUtMV0sbWVbUmVdLFtdKTticmVhaztjYXNlIDQ4OlBlLmFkZFBvaW50KG1lW1JlLTRdLG1lW1JlLTNdLG1lW1JlLTFdLG1lW1JlXSxbXSk7YnJlYWs7Y2FzZSA0OTpQZS5hZGRQb2ludChtZVtSZS00XSwiIixtZVtSZS0yXSxtZVtSZS0xXSxtZVtSZV0pO2JyZWFrO2Nhc2UgNTA6UGUuYWRkUG9pbnQobWVbUmUtNV0sbWVbUmUtNF0sbWVbUmUtMl0sbWVbUmUtMV0sbWVbUmVdKTticmVhaztjYXNlIDUxOlBlLnNldFhBeGlzTGVmdFRleHQobWVbUmUtMl0pLFBlLnNldFhBeGlzUmlnaHRUZXh0KG1lW1JlXSk7YnJlYWs7Y2FzZSA1MjptZVtSZS0xXS50ZXh0Kz0iIFx1MjdGNiAiLFBlLnNldFhBeGlzTGVmdFRleHQobWVbUmUtMV0pO2JyZWFrO2Nhc2UgNTM6UGUuc2V0WEF4aXNMZWZ0VGV4dChtZVtSZV0pO2JyZWFrO2Nhc2UgNTQ6UGUuc2V0WUF4aXNCb3R0b21UZXh0KG1lW1JlLTJdKSxQZS5zZXRZQXhpc1RvcFRleHQobWVbUmVdKTticmVhaztjYXNlIDU1Om1lW1JlLTFdLnRleHQrPSIgXHUyN0Y2ICIsUGUuc2V0WUF4aXNCb3R0b21UZXh0KG1lW1JlLTFdKTticmVhaztjYXNlIDU2OlBlLnNldFlBeGlzQm90dG9tVGV4dChtZVtSZV0pO2JyZWFrO2Nhc2UgNTc6UGUuc2V0UXVhZHJhbnQxVGV4dChtZVtSZV0pO2JyZWFrO2Nhc2UgNTg6UGUuc2V0UXVhZHJhbnQyVGV4dChtZVtSZV0pO2JyZWFrO2Nhc2UgNTk6UGUuc2V0UXVhZHJhbnQzVGV4dChtZVtSZV0pO2JyZWFrO2Nhc2UgNjA6UGUuc2V0UXVhZHJhbnQ0VGV4dChtZVtSZV0pO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPXt0ZXh0Om1lW1JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9e3RleHQ6bWVbUmUtMV0udGV4dCsiIittZVtSZV0sdHlwZTptZVtSZS0xXS50eXBlfTticmVhaztjYXNlIDY2OnRoaXMuJD17dGV4dDptZVtSZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNjc6dGhpcy4kPXt0ZXh0Om1lW1JlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgNjg6dGhpcy4kPW1lW1JlXTticmVhaztjYXNlIDY5OnRoaXMuJD1tZVtSZS0xXSsiIittZVtSZV07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3sxODplLDI2OjEsMjc6MiwyODpyLDU1Om4sNTY6aSw1NzphfSx7MTpbM119LHsxODplLDI2OjgsMjc6MiwyODpyLDU1Om4sNTY6aSw1NzphfSx7MTg6ZSwyNjo5LDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sdChzLFsyLDMzXSx7Mjk6MTB9KSx0KGwsWzIsNjFdKSx0KGwsWzIsNjJdKSx0KGwsWzIsNjNdKSx7MTpbMiwzMF19LHsxOlsyLDMxXX0sdCh1LGgsezMwOjExLDMxOjEyLDI0OjEzLDMyOjE1LDMzOjE2LDM0OjE3LDQzOjMwLDU4OjMxLDE6WzIsMzJdLDQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp2LDI1OngsMzU6YiwzNzp3LDM5Ol8sNDE6VCw0MjpFLDQ4OkwsNTA6Qyw1MTpBLDUyOkksNTM6RCw1NDprLDYwOlIsNjE6Uyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHMsWzIsMzRdKSx7Mjc6NDUsNTU6biw1NjppLDU3OmF9LHQodSxbMiwzN10pLHQodSxoLHsyNDoxMywzMjoxNSwzMzoxNiwzNDoxNyw0MzozMCw1ODozMSwzMTo0Niw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6diwyNTp4LDM1OmIsMzc6dywzOTpfLDQxOlQsNDI6RSw0ODpMLDUwOkMsNTE6QSw1MjpJLDUzOkQsNTQ6ayw2MDpSLDYxOlMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDM5XSksdCh1LFsyLDQwXSksdCh1LFsyLDQxXSksezM2OlsxLDQ3XX0sezM4OlsxLDQ4XX0sezQwOlsxLDQ5XX0sdCh1LFsyLDQ1XSksdCh1LFsyLDQ2XSksezE4OlsxLDUwXX0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1MSw1ODozMSw2MDpSLDYxOlMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjUyLDU4OjMxLDYwOlIsNjE6Uyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTMsNTg6MzEsNjA6Uiw2MTpTLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1NCw1ODozMSw2MDpSLDYxOlMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjU1LDU4OjMxLDYwOlIsNjE6Uyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTYsNTg6MzEsNjA6Uiw2MTpTLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0sezQ6Ziw1OmQsODokLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw0NDpbMSw1N10sNDc6WzEsNThdLDU4OjYwLDU5OjU5LDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0sdChXLFsyLDY0XSksdChXLFsyLDY2XSksdChXLFsyLDY3XSksdChXLFsyLDcwXSksdChXLFsyLDcxXSksdChXLFsyLDcyXSksdChXLFsyLDczXSksdChXLFsyLDc0XSksdChXLFsyLDc1XSksdChXLFsyLDc2XSksdChXLFsyLDc3XSksdChXLFsyLDc4XSksdChXLFsyLDc5XSksdChXLFsyLDgwXSksdChzLFsyLDM1XSksdCh1LFsyLDM4XSksdCh1LFsyLDQyXSksdCh1LFsyLDQzXSksdCh1LFsyLDQ0XSksezM6NjQsNDpqLDU6Syw2OmllLDc6USw4OmVlLDk6SiwxMDpILDExOnEsMTI6WiwxMzphZSwxNDp1ZSwxNTpjZSwyMTo2M30sdCh1LFsyLDUzXSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OiQsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp6LDQ5OlsxLDc3XSw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNTZdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6JCwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNDk6WzEsNzhdLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiw1N10sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODokLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNThdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6JCwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDU5XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OiQsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp6LDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiw2MF0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODokLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx7NDU6WzEsNzldfSx7NDQ6WzEsODBdfSx0KFcsWzIsNjVdKSx0KFcsWzIsODFdKSx0KFcsWzIsODJdKSx0KFcsWzIsODNdKSx7Mzo4Miw0OmosNTpLLDY6aWUsNzpRLDg6ZWUsOTpKLDEwOkgsMTE6cSwxMjpaLDEzOmFlLDE0OnVlLDE1OmNlLDE4OlsxLDgxXX0sdCh0ZSxbMiwyM10pLHQodGUsWzIsMV0pLHQodGUsWzIsMl0pLHQodGUsWzIsM10pLHQodGUsWzIsNF0pLHQodGUsWzIsNV0pLHQodGUsWzIsNl0pLHQodGUsWzIsN10pLHQodGUsWzIsOF0pLHQodGUsWzIsOV0pLHQodGUsWzIsMTBdKSx0KHRlLFsyLDExXSksdCh0ZSxbMiwxMl0pLHQodSxbMiw1Ml0sezU4OjMxLDQzOjgzLDQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw2MDpSLDYxOlMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDU1XSx7NTg6MzEsNDM6ODQsNDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDYwOlIsNjE6Uyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx7NDY6WzEsODVdfSx7NDU6WzEsODZdfSx7NDpEZSw1Om9lLDY6a2UsODpGZSwxMTpCZSwxMzpWZSwxNjo4OSwxNzpHZSwxODpIZSwxOTp4ZSwyMDpYLDIyOjg4LDIzOjg3fSx0KHRlLFsyLDI0XSksdCh1LFsyLDUxXSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OiQsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp6LDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiw1NF0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODokLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNDddLHsyMjo4OCwxNjo4OSwyMzoxMDAsNDpEZSw1Om9lLDY6a2UsODpGZSwxMTpCZSwxMzpWZSwxNzpHZSwxODpIZSwxOTp4ZSwyMDpYfSksezQ2OlsxLDEwMV19LHQodSxbMiwyOV0sezEwOmZlfSksdChoZSxbMiwyN10sezE2OjEwMyw0OkRlLDU6b2UsNjprZSw4OkZlLDExOkJlLDEzOlZlLDE3OkdlLDE4OkhlLDE5OnhlLDIwOlh9KSx0KGdlLFsyLDI1XSksdChnZSxbMiwxM10pLHQoZ2UsWzIsMTRdKSx0KGdlLFsyLDE1XSksdChnZSxbMiwxNl0pLHQoZ2UsWzIsMTddKSx0KGdlLFsyLDE4XSksdChnZSxbMiwxOV0pLHQoZ2UsWzIsMjBdKSx0KGdlLFsyLDIxXSksdChnZSxbMiwyMl0pLHQodSxbMiw0OV0sezEwOmZlfSksdCh1LFsyLDQ4XSx7MjI6ODgsMTY6ODksMjM6MTA0LDQ6RGUsNTpvZSw2OmtlLDg6RmUsMTE6QmUsMTM6VmUsMTc6R2UsMTg6SGUsMTk6eGUsMjA6WH0pLHs0OkRlLDU6b2UsNjprZSw4OkZlLDExOkJlLDEzOlZlLDE2Ojg5LDE3OkdlLDE4OkhlLDE5OnhlLDIwOlgsMjI6MTA1fSx0KGdlLFsyLDI2XSksdCh1LFsyLDUwXSx7MTA6ZmV9KSx0KGhlLFsyLDI4XSx7MTY6MTAzLDQ6RGUsNTpvZSw2OmtlLDg6RmUsMTE6QmUsMTM6VmUsMTc6R2UsMTg6SGUsMTk6eGUsMjA6WH0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwzMF0sOTpbMiwzMV19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihzZSxFZSl7aWYoRWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShzZSk7ZWxzZXt2YXIgQWU9bmV3IEVycm9yKHNlKTt0aHJvdyBBZS5oYXNoPUVlLEFlfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHNlKXt2YXIgRWU9dGhpcyxBZT1bMF0sUGU9W10sTWU9W251bGxdLG1lPVtdLFdlPXRoaXMudGFibGUsUmU9IiIsdHQ9MCxndD0wLEV0PTAsdnQ9MixZZT0xLFR0PW1lLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLCRlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikscnQ9e3l5Ont9fTtmb3IodmFyIGZ0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZnQpJiYocnQueXlbZnRdPXRoaXMueXlbZnRdKTskZS5zZXRJbnB1dChzZSxydC55eSkscnQueXkubGV4ZXI9JGUscnQueXkucGFyc2VyPXRoaXMsdHlwZW9mICRlLnl5bGxvYz4idSImJigkZS55eWxsb2M9e30pO3ZhciBrdD0kZS55eWxsb2M7bWUucHVzaChrdCk7dmFyIGVyPSRlLm9wdGlvbnMmJiRlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBydC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1ydC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBkdChTZSl7QWUubGVuZ3RoPUFlLmxlbmd0aC0yKlNlLE1lLmxlbmd0aD1NZS5sZW5ndGgtU2UsbWUubGVuZ3RoPW1lLmxlbmd0aC1TZX1vKGR0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIFhlKCl7dmFyIFNlO3JldHVybiBTZT1QZS5wb3AoKXx8JGUubGV4KCl8fFllLHR5cGVvZiBTZSE9Im51bWJlciImJihTZSBpbnN0YW5jZW9mIEFycmF5JiYoUGU9U2UsU2U9UGUucG9wKCkpLFNlPUVlLnN5bWJvbHNfW1NlXXx8U2UpLFNlfW8oWGUsImxleCIpO2Zvcih2YXIgY3QsTHQsUnQsenQsWG4sb3IsaG49e30sVG4sVXIscmksTW47Oyl7aWYoUnQ9QWVbQWUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbUnRdP3p0PXRoaXMuZGVmYXVsdEFjdGlvbnNbUnRdOigoY3Q9PT1udWxsfHx0eXBlb2YgY3Q+InUiKSYmKGN0PVhlKCkpLHp0PVdlW1J0XSYmV2VbUnRdW2N0XSksdHlwZW9mIHp0PiJ1Inx8IXp0Lmxlbmd0aHx8IXp0WzBdKXt2YXIgeXQ9IiI7TW49W107Zm9yKFRuIGluIFdlW1J0XSl0aGlzLnRlcm1pbmFsc19bVG5dJiZUbj52dCYmTW4ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RuXSsiJyIpOyRlLnNob3dQb3NpdGlvbj95dD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh0dCsxKStgOgpgKyRlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArTW4uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tjdF18fGN0KSsiJyI6eXQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodHQrMSkrIjogVW5leHBlY3RlZCAiKyhjdD09WWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bY3RdfHxjdCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoeXQse3RleHQ6JGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2N0XXx8Y3QsbGluZTokZS55eWxpbmVubyxsb2M6a3QsZXhwZWN0ZWQ6TW59KX1pZih6dFswXWluc3RhbmNlb2YgQXJyYXkmJnp0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrUnQrIiwgdG9rZW46ICIrY3QpO3N3aXRjaCh6dFswXSl7Y2FzZSAxOkFlLnB1c2goY3QpLE1lLnB1c2goJGUueXl0ZXh0KSxtZS5wdXNoKCRlLnl5bGxvYyksQWUucHVzaCh6dFsxXSksY3Q9bnVsbCxMdD8oY3Q9THQsTHQ9bnVsbCk6KGd0PSRlLnl5bGVuZyxSZT0kZS55eXRleHQsdHQ9JGUueXlsaW5lbm8sa3Q9JGUueXlsbG9jLEV0PjAmJkV0LS0pO2JyZWFrO2Nhc2UgMjppZihVcj10aGlzLnByb2R1Y3Rpb25zX1t6dFsxXV1bMV0saG4uJD1NZVtNZS5sZW5ndGgtVXJdLGhuLl8kPXtmaXJzdF9saW5lOm1lW21lLmxlbmd0aC0oVXJ8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTptZVttZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjptZVttZS5sZW5ndGgtKFVyfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm1lW21lLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sZXImJihobi5fJC5yYW5nZT1bbWVbbWUubGVuZ3RoLShVcnx8MSldLnJhbmdlWzBdLG1lW21lLmxlbmd0aC0xXS5yYW5nZVsxXV0pLG9yPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShobixbUmUsZ3QsdHQscnQueXksenRbMV0sTWUsbWVdLmNvbmNhdChUdCkpLHR5cGVvZiBvcjwidSIpcmV0dXJuIG9yO1VyJiYoQWU9QWUuc2xpY2UoMCwtMSpVcioyKSxNZT1NZS5zbGljZSgwLC0xKlVyKSxtZT1tZS5zbGljZSgwLC0xKlVyKSksQWUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t6dFsxXV1bMF0pLE1lLnB1c2goaG4uJCksbWUucHVzaChobi5fJCkscmk9V2VbQWVbQWUubGVuZ3RoLTJdXVtBZVtBZS5sZW5ndGgtMV1dLEFlLnB1c2gocmkpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSx5ZT1mdW5jdGlvbigpe3ZhciBUZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEVlLEFlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEVlLEFlKTtlbHNlIHRocm93IG5ldyBFcnJvcihFZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihzZSxFZSl7cmV0dXJuIHRoaXMueXk9RWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXNlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHNlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1zZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9c2UsdGhpcy5tYXRjaGVkKz1zZTt2YXIgRWU9c2UubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBFZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksc2V9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oc2Upe3ZhciBFZT1zZS5sZW5ndGgsQWU9c2Uuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1zZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRWUpLHRoaXMub2Zmc2V0LT1FZTt2YXIgUGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksQWUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1BZS5sZW5ndGgtMSk7dmFyIE1lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpBZT8oQWUubGVuZ3RoPT09UGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQZVtQZS5sZW5ndGgtQWUubGVuZ3RoXS5sZW5ndGgtQWVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1FZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtNZVswXSxNZVswXSt0aGlzLnl5bGVuZy1FZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHNlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2Uoc2UpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBzZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHNlLmxlbmd0aD4yMD8iLi4uIjoiIikrc2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5tYXRjaDtyZXR1cm4gc2UubGVuZ3RoPDIwJiYoc2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXNlLmxlbmd0aCkpLChzZS5zdWJzdHIoMCwyMCkrKHNlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHNlPXRoaXMucGFzdElucHV0KCksRWU9bmV3IEFycmF5KHNlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHNlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFZSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oc2UsRWUpe3ZhciBBZSxQZSxNZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUGU9c2VbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFBlJiYodGhpcy55eWxpbmVubys9UGUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46UGU/UGVbUGUubGVuZ3RoLTFdLmxlbmd0aC1QZVtQZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitzZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1zZVswXSx0aGlzLm1hdGNoKz1zZVswXSx0aGlzLm1hdGNoZXM9c2UsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uoc2VbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXNlWzBdLEFlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEVlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEFlKXJldHVybiBBZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgbWUgaW4gTWUpdGhpc1ttZV09TWVbbWVdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBzZSxFZSxBZSxQZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBNZT10aGlzLl9jdXJyZW50UnVsZXMoKSxtZT0wO21lPE1lLmxlbmd0aDttZSsrKWlmKEFlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbTWVbbWVdXSksQWUmJighRWV8fEFlWzBdLmxlbmd0aD5FZVswXS5sZW5ndGgpKXtpZihFZT1BZSxQZT1tZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihzZT10aGlzLnRlc3RfbWF0Y2goQWUsTWVbbWVdKSxzZSE9PSExKXJldHVybiBzZTtpZih0aGlzLl9iYWNrdHJhY2spe0VlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEVlPyhzZT10aGlzLnRlc3RfbWF0Y2goRWUsTWVbUGVdKSxzZSE9PSExP3NlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEVlPXRoaXMubmV4dCgpO3JldHVybiBFZXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oRWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFZSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgRWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRWU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihFZSl7cmV0dXJuIEVlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRWV8fDApLEVlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRWVdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oRWUpe3RoaXMuYmVnaW4oRWUpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oRWUsQWUsUGUsTWUpe3ZhciBtZT1NZTtzd2l0Y2goUGUpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiA1NTtjYXNlIDM6YnJlYWs7Y2FzZSA0OnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDM1O2JyZWFrO2Nhc2UgNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzNzticmVhaztjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM5O2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDQ4O2Nhc2UgMTQ6cmV0dXJuIDUwO2Nhc2UgMTU6cmV0dXJuIDQ5O2Nhc2UgMTY6cmV0dXJuIDUxO2Nhc2UgMTc6cmV0dXJuIDUyO2Nhc2UgMTg6cmV0dXJuIDUzO2Nhc2UgMTk6cmV0dXJuIDU0O2Nhc2UgMjA6cmV0dXJuIDI1O2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iTURfU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6cmV0dXJuIlNUUiI7Y2FzZSAyNzp0aGlzLmJlZ2luKCJjbGFzc19uYW1lIik7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ3O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksNDQ7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDQ1O2JyZWFrO2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDY7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDtjYXNlIDM2OnJldHVybiAxMTtjYXNlIDM3OnJldHVybiA2NDtjYXNlIDM4OnJldHVybiAxMDtjYXNlIDM5OnJldHVybiA2NTtjYXNlIDQwOnJldHVybiA2NTtjYXNlIDQxOnJldHVybiAxNDtjYXNlIDQyOnJldHVybiAxMztjYXNlIDQzOnJldHVybiA2NztjYXNlIDQ0OnJldHVybiA2NjtjYXNlIDQ1OnJldHVybiAxMjtjYXNlIDQ2OnJldHVybiA4O2Nhc2UgNDc6cmV0dXJuIDU7Y2FzZSA0ODpyZXR1cm4gMTg7Y2FzZSA0OTpyZXR1cm4gNTY7Y2FzZSA1MDpyZXR1cm4gNjM7Y2FzZSA1MTpyZXR1cm4gNTd9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86ICp4LWF4aXMgKikvaSwvXig/OiAqeS1heGlzICopL2ksL14oPzogKi0tKz4gKikvaSwvXig/OiAqcXVhZHJhbnQtMSAqKS9pLC9eKD86ICpxdWFkcmFudC0yICopL2ksL14oPzogKnF1YWRyYW50LTMgKikvaSwvXig/OiAqcXVhZHJhbnQtNCAqKS9pLC9eKD86Y2xhc3NEZWZcYikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Ojo6KS9pLC9eKD86Xlx3KykvaSwvXig/OlxzKjpccypcW1xzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86XHMqXF0gKikvaSwvXig/OlxzKixccyopL2ksL14oPzooMSl8KDAoLlxkKyk/KSkvaSwvXig/OiAqcXVhZHJhbnRDaGFydCAqKS9pLC9eKD86W0EtWmEtel0rKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LCkvaSwvXig/Oj0pL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccykvaSwvXig/OjspL2ksL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2NsYXNzX25hbWU6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxwb2ludF95OntydWxlczpbMzNdLGluY2x1c2l2ZTohMX0scG9pbnRfeDp7cnVsZXM6WzMyXSxpbmNsdXNpdmU6ITF9LHBvaW50X3N0YXJ0OntydWxlczpbMzAsMzFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzVdLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjQsMjcsMjksMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVGV9KCk7bmUubGV4ZXI9eWU7ZnVuY3Rpb24gVSgpe3RoaXMueXk9e319cmV0dXJuIG8oVSwiUGFyc2VyIiksVS5wcm90b3R5cGU9bmUsbmUuUGFyc2VyPVUsbmV3IFV9KCk7bk8ucGFyc2VyPW5PO0ZoZT1uT30pO3ZhciBvcyxmRSxHaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO2hzKCk7aHQoKTtVYigpO29zPXNwKCksZkU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1zdGF0aWN7byh0aGlzLCJRdWFkcmFudEJ1aWxkZXIiKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7cmV0dXJue3Nob3dYQXhpczohMCxzaG93WUF4aXM6ITAsc2hvd1RpdGxlOiEwLGNoYXJ0SGVpZ2h0OnVyLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGh8fDUwMCxjaGFydFdpZHRoOnVyLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0fHw1MDAsdGl0bGVQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnRpdGxlUGFkZGluZ3x8MTAsdGl0bGVGb250U2l6ZTp1ci5xdWFkcmFudENoYXJ0Py50aXRsZUZvbnRTaXplfHwyMCxxdWFkcmFudFBhZGRpbmc6dXIucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRQYWRkaW5nfHw1LHhBeGlzTGFiZWxQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnhBeGlzTGFiZWxQYWRkaW5nfHw1LHlBeGlzTGFiZWxQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnlBeGlzTGFiZWxQYWRkaW5nfHw1LHhBeGlzTGFiZWxGb250U2l6ZTp1ci5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsRm9udFNpemV8fDE2LHlBeGlzTGFiZWxGb250U2l6ZTp1ci5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsRm9udFNpemV8fDE2LHF1YWRyYW50TGFiZWxGb250U2l6ZTp1ci5xdWFkcmFudENoYXJ0Py5xdWFkcmFudExhYmVsRm9udFNpemV8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6dXIucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRUZXh0VG9wUGFkZGluZ3x8NSxwb2ludFRleHRQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnBvaW50VGV4dFBhZGRpbmd8fDUscG9pbnRMYWJlbEZvbnRTaXplOnVyLnF1YWRyYW50Q2hhcnQ/LnBvaW50TGFiZWxGb250U2l6ZXx8MTIscG9pbnRSYWRpdXM6dXIucXVhZHJhbnRDaGFydD8ucG9pbnRSYWRpdXN8fDUseEF4aXNQb3NpdGlvbjp1ci5xdWFkcmFudENoYXJ0Py54QXhpc1Bvc2l0aW9ufHwidG9wIix5QXhpc1Bvc2l0aW9uOnVyLnF1YWRyYW50Q2hhcnQ/LnlBeGlzUG9zaXRpb258fCJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6dXIucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRofHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDp1ci5xdWFkcmFudENoYXJ0Py5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGh8fDJ9fWdldERlZmF1bHRUaGVtZUNvbmZpZygpe3JldHVybntxdWFkcmFudDFGaWxsOm9zLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDpvcy5xdWFkcmFudDJGaWxsLHF1YWRyYW50M0ZpbGw6b3MucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOm9zLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6b3MucXVhZHJhbnQxVGV4dEZpbGwscXVhZHJhbnQyVGV4dEZpbGw6b3MucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6b3MucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6b3MucXVhZHJhbnQ0VGV4dEZpbGwscXVhZHJhbnRQb2ludEZpbGw6b3MucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOm9zLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6b3MucXVhZHJhbnRYQXhpc1RleHRGaWxsLHF1YWRyYW50WUF4aXNUZXh0RmlsbDpvcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRUaXRsZUZpbGw6b3MucXVhZHJhbnRUaXRsZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6b3MucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6b3MucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx9fWNsZWFyKCl7dGhpcy5jb25maWc9dGhpcy5nZXREZWZhdWx0Q29uZmlnKCksdGhpcy50aGVtZUNvbmZpZz10aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpLHRoaXMuZGF0YT10aGlzLmdldERlZmF1bHREYXRhKCksdGhpcy5jbGFzc2VzPW5ldyBNYXAsWS5pbmZvKCJjbGVhciBjYWxsZWQiKX1zZXREYXRhKGUpe3RoaXMuZGF0YT17Li4udGhpcy5kYXRhLC4uLmV9fWFkZFBvaW50cyhlKXt0aGlzLmRhdGEucG9pbnRzPVsuLi5lLC4uLnRoaXMuZGF0YS5wb2ludHNdfWFkZENsYXNzKGUscil7dGhpcy5jbGFzc2VzLnNldChlLHIpfXNldENvbmZpZyhlKXtZLnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIsZSksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLmV9fXNldFRoZW1lQ29uZmlnKGUpe1kudHJhY2UoInNldFRoZW1lQ29uZmlnIGNhbGxlZCB3aXRoOiAiLGUpLHRoaXMudGhlbWVDb25maWc9ey4uLnRoaXMudGhlbWVDb25maWcsLi4uZX19Y2FsY3VsYXRlU3BhY2UoZSxyLG4saSl7bGV0IGE9dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUscz17dG9wOmU9PT0idG9wIiYmcj9hOjAsYm90dG9tOmU9PT0iYm90dG9tIiYmcj9hOjB9LGw9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdT17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZuP2w6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmbj9sOjB9LGg9dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixmPXt0b3A6aT9oOjB9LGQ9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK3UubGVmdCxwPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytzLnRvcCtmLnRvcCxtPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItdS5sZWZ0LXUucmlnaHQsZz10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1zLnRvcC1zLmJvdHRvbS1mLnRvcCx5PW0vMix2PWcvMjtyZXR1cm57eEF4aXNTcGFjZTpzLHlBeGlzU3BhY2U6dSx0aXRsZVNwYWNlOmYscXVhZHJhbnRTcGFjZTp7cXVhZHJhbnRMZWZ0OmQscXVhZHJhbnRUb3A6cCxxdWFkcmFudFdpZHRoOm0scXVhZHJhbnRIYWxmV2lkdGg6eSxxdWFkcmFudEhlaWdodDpnLHF1YWRyYW50SGFsZkhlaWdodDp2fX19Z2V0QXhpc0xhYmVscyhlLHIsbixpKXtsZXR7cXVhZHJhbnRTcGFjZTphLHRpdGxlU3BhY2U6c309aSx7cXVhZHJhbnRIYWxmSGVpZ2h0OmwscXVhZHJhbnRIZWlnaHQ6dSxxdWFkcmFudExlZnQ6aCxxdWFkcmFudEhhbGZXaWR0aDpmLHF1YWRyYW50VG9wOmQscXVhZHJhbnRXaWR0aDpwfT1hLG09ISF0aGlzLmRhdGEueEF4aXNSaWdodFRleHQsZz0hIXRoaXMuZGF0YS55QXhpc1RvcFRleHQseT1bXTtyZXR1cm4gdGhpcy5kYXRhLnhBeGlzTGVmdFRleHQmJnImJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6aCsobT9mLzI6MCkseTplPT09InRvcCI/dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrcy50b3A6dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrZCt1K3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxmb250U2l6ZTp0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6bT8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjowfSksdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0JiZyJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwseDpoK2YrKG0/Zi8yOjApLHk6ZT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK3MudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2QrdSt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOm0/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQmJm4mJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK2grcCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpkK3UtKGc/bC8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpnPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLHRoaXMuZGF0YS55QXhpc1RvcFRleHQmJm4mJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNUb3BUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK2grcCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpkK2wtKGc/bC8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpnPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLHl9Z2V0UXVhZHJhbnRzKGUpe2xldHtxdWFkcmFudFNwYWNlOnJ9PWUse3F1YWRyYW50SGFsZkhlaWdodDpuLHF1YWRyYW50TGVmdDppLHF1YWRyYW50SGFsZldpZHRoOmEscXVhZHJhbnRUb3A6c309cixsPVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OmkrYSx5OnMsd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppLHk6cyx3aWR0aDphLGhlaWdodDpuLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OmkseTpzK24sd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppK2EseTpzK24sd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2ZvcihsZXQgdSBvZiBsKXUudGV4dC54PXUueCt1LndpZHRoLzIsdGhpcy5kYXRhLnBvaW50cy5sZW5ndGg9PT0wPyh1LnRleHQueT11LnkrdS5oZWlnaHQvMix1LnRleHQuaG9yaXpvbnRhbFBvcz0ibWlkZGxlIik6KHUudGV4dC55PXUueSt0aGlzLmNvbmZpZy5xdWFkcmFudFRleHRUb3BQYWRkaW5nLHUudGV4dC5ob3Jpem9udGFsUG9zPSJ0b3AiKTtyZXR1cm4gbH1nZXRRdWFkcmFudFBvaW50cyhlKXtsZXR7cXVhZHJhbnRTcGFjZTpyfT1lLHtxdWFkcmFudEhlaWdodDpuLHF1YWRyYW50TGVmdDppLHF1YWRyYW50VG9wOmEscXVhZHJhbnRXaWR0aDpzfT1yLGw9YmwoKS5kb21haW4oWzAsMV0pLnJhbmdlKFtpLHMraV0pLHU9YmwoKS5kb21haW4oWzAsMV0pLnJhbmdlKFtuK2EsYV0pO3JldHVybiB0aGlzLmRhdGEucG9pbnRzLm1hcChmPT57bGV0IGQ9dGhpcy5jbGFzc2VzLmdldChmLmNsYXNzTmFtZSk7cmV0dXJuIGQmJihmPXsuLi5kLC4uLmZ9KSx7eDpsKGYueCkseTp1KGYueSksZmlsbDpmLmNvbG9yPz90aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHJhZGl1czpmLnJhZGl1cz8/dGhpcy5jb25maWcucG9pbnRSYWRpdXMsdGV4dDp7dGV4dDpmLnRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRUZXh0RmlsbCx4OmwoZi54KSx5OnUoZi55KSt0aGlzLmNvbmZpZy5wb2ludFRleHRQYWRkaW5nLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6InRvcCIsZm9udFNpemU6dGhpcy5jb25maWcucG9pbnRMYWJlbEZvbnRTaXplLHJvdGF0aW9uOjB9LHN0cm9rZUNvbG9yOmYuc3Ryb2tlQ29sb3I/P3RoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwsc3Ryb2tlV2lkdGg6Zi5zdHJva2VXaWR0aD8/IjBweCJ9fSl9Z2V0Qm9yZGVycyhlKXtsZXQgcj10aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgvMix7cXVhZHJhbnRTcGFjZTpufT1lLHtxdWFkcmFudEhhbGZIZWlnaHQ6aSxxdWFkcmFudEhlaWdodDphLHF1YWRyYW50TGVmdDpzLHF1YWRyYW50SGFsZldpZHRoOmwscXVhZHJhbnRUb3A6dSxxdWFkcmFudFdpZHRoOmh9PW47cmV0dXJuW3tzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMtcix5MTp1LHgyOnMraCtyLHkyOnV9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMraCx5MTp1K3IseDI6cytoLHkyOnUrYS1yfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzLXIseTE6dSthLHgyOnMraCtyLHkyOnUrYX0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cyx5MTp1K3IseDI6cyx5Mjp1K2Etcn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cytsLHkxOnUrcix4MjpzK2wseTI6dSthLXJ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMrcix5MTp1K2kseDI6cytoLXIseTI6dStpfV19Z2V0VGl0bGUoZSl7aWYoZSlyZXR1cm57dGV4dDp0aGlzLmRhdGEudGl0bGVUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFRpdGxlRmlsbCxmb250U2l6ZTp0aGlzLmNvbmZpZy50aXRsZUZvbnRTaXplLGhvcml6b250YWxQb3M6InRvcCIsdmVydGljYWxQb3M6ImNlbnRlciIscm90YXRpb246MCx5OnRoaXMuY29uZmlnLnRpdGxlUGFkZGluZyx4OnRoaXMuY29uZmlnLmNoYXJ0V2lkdGgvMn19YnVpbGQoKXtsZXQgZT10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLHI9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxuPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LGk9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLGE9dGhpcy5jYWxjdWxhdGVTcGFjZShpLGUscixuKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHMoYSkscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKGEpLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKGksZSxyLGEpLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyhhKSx0aXRsZTp0aGlzLmdldFRpdGxlKG4pfX19fSk7ZnVuY3Rpb24gaU8odCl7cmV0dXJuIS9eIz8oW1xkQS1GYS1mXXs2fXxbXGRBLUZhLWZdezN9KSQvLnRlc3QodCl9ZnVuY3Rpb24gJGhlKHQpe3JldHVybiEvXlxkKyQvLnRlc3QodCl9ZnVuY3Rpb24gVmhlKHQpe3JldHVybiEvXlxkK3B4JC8udGVzdCh0KX12YXIgVDAsVWhlPU0oKCk9PnsidXNlIHN0cmljdCI7VDA9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJbnZhbGlkU3R5bGVFcnJvciIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihgdmFsdWUgZm9yICR7ZX0gJHtyfSBpcyBpbnZhbGlkLCBwbGVhc2UgdXNlIGEgdmFsaWQgJHtufWApLHRoaXMubmFtZT0iSW52YWxpZFN0eWxlRXJyb3IifX07byhpTywidmFsaWRhdGVIZXhDb2RlIik7bygkaGUsInZhbGlkYXRlTnVtYmVyIik7byhWaGUsInZhbGlkYXRlU2l6ZUluUGl4ZWxzIil9KTtmdW5jdGlvbiBXdSh0KXtyZXR1cm4gVHIodC50cmltKCksUlZlKX1mdW5jdGlvbiBNVmUodCl7eWEuc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDpXdSh0LnRleHQpfSl9ZnVuY3Rpb24gSVZlKHQpe3lhLnNldERhdGEoe3F1YWRyYW50MlRleHQ6V3UodC50ZXh0KX0pfWZ1bmN0aW9uIE9WZSh0KXt5YS5zZXREYXRhKHtxdWFkcmFudDNUZXh0Old1KHQudGV4dCl9KX1mdW5jdGlvbiBQVmUodCl7eWEuc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDpXdSh0LnRleHQpfSl9ZnVuY3Rpb24gQlZlKHQpe3lhLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6V3UodC50ZXh0KX0pfWZ1bmN0aW9uIEZWZSh0KXt5YS5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDpXdSh0LnRleHQpfSl9ZnVuY3Rpb24gelZlKHQpe3lhLnNldERhdGEoe3lBeGlzVG9wVGV4dDpXdSh0LnRleHQpfSl9ZnVuY3Rpb24gR1ZlKHQpe3lhLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDpXdSh0LnRleHQpfSl9ZnVuY3Rpb24gYU8odCl7bGV0IGU9e307Zm9yKGxldCByIG9mIHQpe2xldFtuLGldPXIudHJpbSgpLnNwbGl0KC9ccyo6XHMqLyk7aWYobj09PSJyYWRpdXMiKXtpZigkaGUoaSkpdGhyb3cgbmV3IFQwKG4saSwibnVtYmVyIik7ZS5yYWRpdXM9cGFyc2VJbnQoaSl9ZWxzZSBpZihuPT09ImNvbG9yIil7aWYoaU8oaSkpdGhyb3cgbmV3IFQwKG4saSwiaGV4IGNvZGUiKTtlLmNvbG9yPWl9ZWxzZSBpZihuPT09InN0cm9rZS1jb2xvciIpe2lmKGlPKGkpKXRocm93IG5ldyBUMChuLGksImhleCBjb2RlIik7ZS5zdHJva2VDb2xvcj1pfWVsc2UgaWYobj09PSJzdHJva2Utd2lkdGgiKXtpZihWaGUoaSkpdGhyb3cgbmV3IFQwKG4saSwibnVtYmVyIG9mIHBpeGVscyAoZWcuIDEwcHgpIik7ZS5zdHJva2VXaWR0aD1pfWVsc2UgdGhyb3cgbmV3IEVycm9yKGBzdHlsZSBuYW1lZCAke259IGlzIG5vdCBzdXBwb3J0ZWQuYCl9cmV0dXJuIGV9ZnVuY3Rpb24gJFZlKHQsZSxyLG4saSl7bGV0IGE9YU8oaSk7eWEuYWRkUG9pbnRzKFt7eDpyLHk6bix0ZXh0Old1KHQudGV4dCksY2xhc3NOYW1lOmUsLi4uYX1dKX1mdW5jdGlvbiBWVmUodCxlKXt5YS5hZGRDbGFzcyh0LGFPKGUpKX1mdW5jdGlvbiBVVmUodCl7eWEuc2V0Q29uZmlnKHtjaGFydFdpZHRoOnR9KX1mdW5jdGlvbiBIVmUodCl7eWEuc2V0Q29uZmlnKHtjaGFydEhlaWdodDp0fSl9ZnVuY3Rpb24gV1ZlKCl7bGV0IHQ9ZGUoKSx7dGhlbWVWYXJpYWJsZXM6ZSxxdWFkcmFudENoYXJ0OnJ9PXQ7cmV0dXJuIHImJnlhLnNldENvbmZpZyhyKSx5YS5zZXRUaGVtZUNvbmZpZyh7cXVhZHJhbnQxRmlsbDplLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDplLnF1YWRyYW50MkZpbGwscXVhZHJhbnQzRmlsbDplLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDplLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6ZS5xdWFkcmFudDFUZXh0RmlsbCxxdWFkcmFudDJUZXh0RmlsbDplLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOmUucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6ZS5xdWFkcmFudDRUZXh0RmlsbCxxdWFkcmFudFBvaW50RmlsbDplLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDplLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6ZS5xdWFkcmFudFhBeGlzVGV4dEZpbGwscXVhZHJhbnRZQXhpc1RleHRGaWxsOmUucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmUucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6ZS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudFRpdGxlRmlsbDplLnF1YWRyYW50VGl0bGVGaWxsfSkseWEuc2V0RGF0YSh7dGl0bGVUZXh0OkpyKCl9KSx5YS5idWlsZCgpfXZhciBSVmUseWEsWVZlLEhoZSxXaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7a2koKTtHaGUoKTtVaGUoKTtSVmU9ZGUoKTtvKFd1LCJ0ZXh0U2FuaXRpemVyIik7eWE9bmV3IGZFO28oTVZlLCJzZXRRdWFkcmFudDFUZXh0Iik7byhJVmUsInNldFF1YWRyYW50MlRleHQiKTtvKE9WZSwic2V0UXVhZHJhbnQzVGV4dCIpO28oUFZlLCJzZXRRdWFkcmFudDRUZXh0Iik7byhCVmUsInNldFhBeGlzTGVmdFRleHQiKTtvKEZWZSwic2V0WEF4aXNSaWdodFRleHQiKTtvKHpWZSwic2V0WUF4aXNUb3BUZXh0Iik7byhHVmUsInNldFlBeGlzQm90dG9tVGV4dCIpO28oYU8sInBhcnNlU3R5bGVzIik7bygkVmUsImFkZFBvaW50Iik7byhWVmUsImFkZENsYXNzIik7byhVVmUsInNldFdpZHRoIik7byhIVmUsInNldEhlaWdodCIpO28oV1ZlLCJnZXRRdWFkcmFudERhdGEiKTtZVmU9byhmdW5jdGlvbigpe3lhLmNsZWFyKCksX3IoKX0sImNsZWFyIiksSGhlPXtzZXRXaWR0aDpVVmUsc2V0SGVpZ2h0OkhWZSxzZXRRdWFkcmFudDFUZXh0Ok1WZSxzZXRRdWFkcmFudDJUZXh0OklWZSxzZXRRdWFkcmFudDNUZXh0Ok9WZSxzZXRRdWFkcmFudDRUZXh0OlBWZSxzZXRYQXhpc0xlZnRUZXh0OkJWZSxzZXRYQXhpc1JpZ2h0VGV4dDpGVmUsc2V0WUF4aXNUb3BUZXh0OnpWZSxzZXRZQXhpc0JvdHRvbVRleHQ6R1ZlLHBhcnNlU3R5bGVzOmFPLGFkZFBvaW50OiRWZSxhZGRDbGFzczpWVmUsZ2V0UXVhZHJhbnREYXRhOldWZSxjbGVhcjpZVmUsc2V0QWNjVGl0bGU6UnIsZ2V0QWNjVGl0bGU6UHIsc2V0RGlhZ3JhbVRpdGxlOmxuLGdldERpYWdyYW1UaXRsZTpKcixnZXRBY2NEZXNjcmlwdGlvbjpGcixzZXRBY2NEZXNjcmlwdGlvbjpCcn19KTt2YXIgcVZlLFloZSxxaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO1Z0KCk7aHQoKTtuaSgpO3FWZT1vKCh0LGUscixuKT0+e2Z1bmN0aW9uIGkoQyl7cmV0dXJuIEM9PT0idG9wIj8iaGFuZ2luZyI6Im1pZGRsZSJ9byhpLCJnZXREb21pbmFudEJhc2VMaW5lIik7ZnVuY3Rpb24gYShDKXtyZXR1cm4gQz09PSJsZWZ0Ij8ic3RhcnQiOiJtaWRkbGUifW8oYSwiZ2V0VGV4dEFuY2hvciIpO2Z1bmN0aW9uIHMoQyl7cmV0dXJuYHRyYW5zbGF0ZSgke0MueH0sICR7Qy55fSkgcm90YXRlKCR7Qy5yb3RhdGlvbnx8MH0pYH1vKHMsImdldFRyYW5zZm9ybWF0aW9uIik7bGV0IGw9ZGUoKTtZLmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCt0KTtsZXQgdT1sLnNlY3VyaXR5TGV2ZWwsaDt1PT09InNhbmRib3giJiYoaD16ZSgiI2kiK2UpKTtsZXQgZD0odT09PSJzYW5kYm94Ij96ZShoLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOnplKCJib2R5IikpLnNlbGVjdChgW2lkPSIke2V9Il1gKSxwPWQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtYWluIiksbT1sLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGg/PzUwMCxnPWwucXVhZHJhbnRDaGFydD8uY2hhcnRIZWlnaHQ/PzUwMDtacihkLGcsbSxsLnF1YWRyYW50Q2hhcnQ/LnVzZU1heFdpZHRoPz8hMCksZC5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrbSsiICIrZyksbi5kYi5zZXRIZWlnaHQoZyksbi5kYi5zZXRXaWR0aChtKTtsZXQgeT1uLmRiLmdldFF1YWRyYW50RGF0YSgpLHY9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLHg9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJvcmRlciIpLGI9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnRzIiksdz1wLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksXz1wLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGl0bGUiKTt5LnRpdGxlJiZfLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLHkudGl0bGUuZmlsbCkuYXR0cigiZm9udC1zaXplIix5LnRpdGxlLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsaSh5LnRpdGxlLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsYSh5LnRpdGxlLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixzKHkudGl0bGUpKS50ZXh0KHkudGl0bGUudGV4dCkseS5ib3JkZXJMaW5lcyYmeC5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKHkuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEM9PkMueDEpLmF0dHIoInkxIixDPT5DLnkxKS5hdHRyKCJ4MiIsQz0+Qy54MikuYXR0cigieTIiLEM9PkMueTIpLnN0eWxlKCJzdHJva2UiLEM9PkMuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsQz0+Qy5zdHJva2VXaWR0aCk7bGV0IFQ9di5zZWxlY3RBbGwoImcucXVhZHJhbnQiKS5kYXRhKHkucXVhZHJhbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicXVhZHJhbnQiKTtULmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLEM9PkMueCkuYXR0cigieSIsQz0+Qy55KS5hdHRyKCJ3aWR0aCIsQz0+Qy53aWR0aCkuYXR0cigiaGVpZ2h0IixDPT5DLmhlaWdodCkuYXR0cigiZmlsbCIsQz0+Qy5maWxsKSxULmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLEM9PkMudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLEM9PkMudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLEM9PmkoQy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz0+YShDLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLEM9PnMoQy50ZXh0KSkudGV4dChDPT5DLnRleHQudGV4dCksdy5zZWxlY3RBbGwoImcubGFiZWwiKS5kYXRhKHkuYXhpc0xhYmVscykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChDPT5DLnRleHQpLmF0dHIoImZpbGwiLEM9PkMuZmlsbCkuYXR0cigiZm9udC1zaXplIixDPT5DLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsQz0+aShDLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz0+YShDLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixDPT5zKEMpKTtsZXQgTD1iLnNlbGVjdEFsbCgiZy5kYXRhLXBvaW50IikuZGF0YSh5LnBvaW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnQiKTtMLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLEM9PkMueCkuYXR0cigiY3kiLEM9PkMueSkuYXR0cigiciIsQz0+Qy5yYWRpdXMpLmF0dHIoImZpbGwiLEM9PkMuZmlsbCkuYXR0cigic3Ryb2tlIixDPT5DLnN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLEM9PkMuc3Ryb2tlV2lkdGgpLEwuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChDPT5DLnRleHQudGV4dCkuYXR0cigiZmlsbCIsQz0+Qy50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsQz0+Qy50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsQz0+aShDLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixDPT5hKEMudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsQz0+cyhDLnRleHQpKX0sImRyYXciKSxZaGU9e2RyYXc6cVZlfX0pO3ZhciBYaGU9e307dnIoWGhlLHtkaWFncmFtOigpPT5YVmV9KTt2YXIgWFZlLGpoZT1NKCgpPT57InVzZSBzdHJpY3QiO3poZSgpO1doZSgpO3FoZSgpO1hWZT17cGFyc2VyOkZoZSxkYjpIaGUscmVuZGVyZXI6WWhlLHN0eWxlczpvKCgpPT4iIiwic3R5bGVzIil9fSk7dmFyIHNPLFpoZSxKaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtzTz1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oTyxOLFAsRil7Zm9yKFA9UHx8e30sRj1PLmxlbmd0aDtGLS07UFtPW0ZdXT1OKTtyZXR1cm4gUH0sIm8iKSxlPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzXSxyPVsyLDZdLG49WzEsM10saT1bMSw1XSxhPVsxLDZdLHM9WzEsN10sbD1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDM0LDM1LDM2XSx1PVsxLDI1XSxoPVsxLDI2XSxmPVsxLDI4XSxkPVsxLDI5XSxwPVsxLDMwXSxtPVsxLDMxXSxnPVsxLDMyXSx5PVsxLDMzXSx2PVsxLDM0XSx4PVsxLDM1XSxiPVsxLDM2XSx3PVsxLDM3XSxfPVsxLDQzXSxUPVsxLDQyXSxFPVsxLDQ3XSxMPVsxLDUwXSxDPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDM0LDM1LDM2XSxBPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2XSxJPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2LDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxEPVsxLDY0XSxrPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LFhZQ0hBUlQ6NSxjaGFydENvbmZpZzo2LGRvY3VtZW50OjcsQ0hBUlRfT1JJRU5UQVRJT046OCxzdGF0ZW1lbnQ6OSx0aXRsZToxMCx0ZXh0OjExLFhfQVhJUzoxMixwYXJzZVhBeGlzOjEzLFlfQVhJUzoxNCxwYXJzZVlBeGlzOjE1LExJTkU6MTYscGxvdERhdGE6MTcsQkFSOjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLFNRVUFSRV9CUkFDRVNfU1RBUlQ6MjQsY29tbWFTZXBhcmF0ZWROdW1iZXJzOjI1LFNRVUFSRV9CUkFDRVNfRU5EOjI2LE5VTUJFUl9XSVRIX0RFQ0lNQUw6MjcsQ09NTUE6MjgseEF4aXNEYXRhOjI5LGJhbmREYXRhOjMwLEFSUk9XX0RFTElNSVRFUjozMSxjb21tYVNlcGFyYXRlZFRleHRzOjMyLHlBeGlzRGF0YTozMyxORVdMSU5FOjM0LFNFTUk6MzUsRU9GOjM2LGFscGhhTnVtOjM3LFNUUjozOCxNRF9TVFI6MzksYWxwaGFOdW1Ub2tlbjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLFBMVVM6NDQsRVFVQUxTOjQ1LE1VTFQ6NDYsRE9UOjQ3LEJSS1Q6NDgsTUlOVVM6NDksVU5ERVJTQ09SRTo1MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiWFlDSEFSVCIsODoiQ0hBUlRfT1JJRU5UQVRJT04iLDEwOiJ0aXRsZSIsMTI6IlhfQVhJUyIsMTQ6IllfQVhJUyIsMTY6IkxJTkUiLDE4OiJCQVIiLDE5OiJhY2NfdGl0bGUiLDIwOiJhY2NfdGl0bGVfdmFsdWUiLDIxOiJhY2NfZGVzY3IiLDIyOiJhY2NfZGVzY3JfdmFsdWUiLDIzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNDoiU1FVQVJFX0JSQUNFU19TVEFSVCIsMjY6IlNRVUFSRV9CUkFDRVNfRU5EIiwyNzoiTlVNQkVSX1dJVEhfREVDSU1BTCIsMjg6IkNPTU1BIiwzMToiQVJST1dfREVMSU1JVEVSIiwzNDoiTkVXTElORSIsMzU6IlNFTUkiLDM2OiJFT0YiLDM4OiJTVFIiLDM5OiJNRF9TVFIiLDQxOiJBTVAiLDQyOiJOVU0iLDQzOiJBTFBIQSIsNDQ6IlBMVVMiLDQ1OiJFUVVBTFMiLDQ2OiJNVUxUIiw0NzoiRE9UIiw0ODoiQlJLVCIsNDk6Ik1JTlVTIiw1MDoiVU5ERVJTQ09SRSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMywyXSxbMywxXSxbNiwxXSxbNywwXSxbNywyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwzXSxbOSwyXSxbOSwzXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTcsM10sWzI1LDNdLFsyNSwxXSxbMTMsMV0sWzEzLDJdLFsxMywxXSxbMjksMV0sWzI5LDNdLFszMCwzXSxbMzIsM10sWzMyLDFdLFsxNSwxXSxbMTUsMl0sWzE1LDFdLFszMywzXSxbNCwxXSxbNCwxXSxbNCwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMzcsMV0sWzM3LDJdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKE4sUCxGLEIsJCx6LFcpe3ZhciBqPXoubGVuZ3RoLTE7c3dpdGNoKCQpe2Nhc2UgNTpCLnNldE9yaWVudGF0aW9uKHpbal0pO2JyZWFrO2Nhc2UgOTpCLnNldERpYWdyYW1UaXRsZSh6W2pdLnRleHQudHJpbSgpKTticmVhaztjYXNlIDEyOkIuc2V0TGluZURhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LHpbal0pO2JyZWFrO2Nhc2UgMTM6Qi5zZXRMaW5lRGF0YSh6W2otMV0seltqXSk7YnJlYWs7Y2FzZSAxNDpCLnNldEJhckRhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LHpbal0pO2JyZWFrO2Nhc2UgMTU6Qi5zZXRCYXJEYXRhKHpbai0xXSx6W2pdKTticmVhaztjYXNlIDE2OnRoaXMuJD16W2pdLnRyaW0oKSxCLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD16W2pdLnRyaW0oKSxCLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9eltqLTFdO2JyZWFrO2Nhc2UgMjA6dGhpcy4kPVtOdW1iZXIoeltqLTJdKSwuLi56W2pdXTticmVhaztjYXNlIDIxOnRoaXMuJD1bTnVtYmVyKHpbal0pXTticmVhaztjYXNlIDIyOkIuc2V0WEF4aXNUaXRsZSh6W2pdKTticmVhaztjYXNlIDIzOkIuc2V0WEF4aXNUaXRsZSh6W2otMV0pO2JyZWFrO2Nhc2UgMjQ6Qi5zZXRYQXhpc1RpdGxlKHt0eXBlOiJ0ZXh0Iix0ZXh0OiIifSk7YnJlYWs7Y2FzZSAyNTpCLnNldFhBeGlzQmFuZCh6W2pdKTticmVhaztjYXNlIDI2OkIuc2V0WEF4aXNSYW5nZURhdGEoTnVtYmVyKHpbai0yXSksTnVtYmVyKHpbal0pKTticmVhaztjYXNlIDI3OnRoaXMuJD16W2otMV07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9W3pbai0yXSwuLi56W2pdXTticmVhaztjYXNlIDI5OnRoaXMuJD1beltqXV07YnJlYWs7Y2FzZSAzMDpCLnNldFlBeGlzVGl0bGUoeltqXSk7YnJlYWs7Y2FzZSAzMTpCLnNldFlBeGlzVGl0bGUoeltqLTFdKTticmVhaztjYXNlIDMyOkIuc2V0WUF4aXNUaXRsZSh7dHlwZToidGV4dCIsdGV4dDoiIn0pO2JyZWFrO2Nhc2UgMzM6Qi5zZXRZQXhpc1JhbmdlRGF0YShOdW1iZXIoeltqLTJdKSxOdW1iZXIoeltqXSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0ZXh0Onpbal0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXt0ZXh0Onpbal0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzk6dGhpcy4kPXt0ZXh0Onpbal0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDQwOnRoaXMuJD16W2pdO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXpbai0xXSsiIit6W2pdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt0KGUscix7MzoxLDQ6Miw3OjQsNTpuLDM0OmksMzU6YSwzNjpzfSksezE6WzNdfSx0KGUscix7NDoyLDc6NCwzOjgsNTpuLDM0OmksMzU6YSwzNjpzfSksdChlLHIsezQ6Miw3OjQsNjo5LDM6MTAsNTpuLDg6WzEsMTFdLDM0OmksMzU6YSwzNjpzfSksezE6WzIsNF0sOToxMiwxMDpbMSwxM10sMTI6WzEsMTRdLDE0OlsxLDE1XSwxNjpbMSwxNl0sMTg6WzEsMTddLDE5OlsxLDE4XSwyMTpbMSwxOV0sMjM6WzEsMjBdfSx0KGwsWzIsMzRdKSx0KGwsWzIsMzVdKSx0KGwsWzIsMzZdKSx7MTpbMiwxXX0sdChlLHIsezQ6Miw3OjQsMzoyMSw1Om4sMzQ6aSwzNTphLDM2OnN9KSx7MTpbMiwzXX0sdChsLFsyLDVdKSx0KGUsWzIsN10sezQ6MjIsMzQ6aSwzNTphLDM2OnN9KSx7MTE6MjMsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHsxMTozOSwxMzozOCwyNDpfLDI3OlQsMjk6NDAsMzA6NDEsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHsxMTo0NSwxNTo0NCwyNzpFLDMzOjQ2LDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MTE6NDksMTc6NDgsMjQ6TCwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sezExOjUyLDE3OjUxLDI0OkwsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHsyMDpbMSw1M119LHsyMjpbMSw1NF19LHQoQyxbMiwxOF0pLHsxOlsyLDJdfSx0KEMsWzIsOF0pLHQoQyxbMiw5XSksdChBLFsyLDM3XSx7NDA6NTUsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30pLHQoQSxbMiwzOF0pLHQoQSxbMiwzOV0pLHQoSSxbMiw0MF0pLHQoSSxbMiw0Ml0pLHQoSSxbMiw0M10pLHQoSSxbMiw0NF0pLHQoSSxbMiw0NV0pLHQoSSxbMiw0Nl0pLHQoSSxbMiw0N10pLHQoSSxbMiw0OF0pLHQoSSxbMiw0OV0pLHQoSSxbMiw1MF0pLHQoSSxbMiw1MV0pLHQoQyxbMiwxMF0pLHQoQyxbMiwyMl0sezMwOjQxLDI5OjU2LDI0Ol8sMjc6VH0pLHQoQyxbMiwyNF0pLHQoQyxbMiwyNV0pLHszMTpbMSw1N119LHsxMTo1OSwzMjo1OCwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sdChDLFsyLDExXSksdChDLFsyLDMwXSx7MzM6NjAsMjc6RX0pLHQoQyxbMiwzMl0pLHszMTpbMSw2MV19LHQoQyxbMiwxMl0pLHsxNzo2MiwyNDpMfSx7MjU6NjMsMjc6RH0sdChDLFsyLDE0XSksezE3OjY1LDI0Okx9LHQoQyxbMiwxNl0pLHQoQyxbMiwxN10pLHQoSSxbMiw0MV0pLHQoQyxbMiwyM10pLHsyNzpbMSw2Nl19LHsyNjpbMSw2N119LHsyNjpbMiwyOV0sMjg6WzEsNjhdfSx0KEMsWzIsMzFdKSx7Mjc6WzEsNjldfSx0KEMsWzIsMTNdKSx7MjY6WzEsNzBdfSx7MjY6WzIsMjFdLDI4OlsxLDcxXX0sdChDLFsyLDE1XSksdChDLFsyLDI2XSksdChDLFsyLDI3XSksezExOjU5LDMyOjcyLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx0KEMsWzIsMzNdKSx0KEMsWzIsMTldKSx7MjU6NzMsMjc6RH0sezI2OlsyLDI4XX0sezI2OlsyLDIwXX1dLGRlZmF1bHRBY3Rpb25zOns4OlsyLDFdLDEwOlsyLDNdLDIxOlsyLDJdLDcyOlsyLDI4XSw3MzpbMiwyMF19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihOLFApe2lmKFAucmVjb3ZlcmFibGUpdGhpcy50cmFjZShOKTtlbHNle3ZhciBGPW5ldyBFcnJvcihOKTt0aHJvdyBGLmhhc2g9UCxGfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKE4pe3ZhciBQPXRoaXMsRj1bMF0sQj1bXSwkPVtudWxsXSx6PVtdLFc9dGhpcy50YWJsZSxqPSIiLEs9MCxpZT0wLFE9MCxlZT0yLEo9MSxIPXouc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFo9e3l5Ont9fTtmb3IodmFyIGFlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksYWUpJiYoWi55eVthZV09dGhpcy55eVthZV0pO3Euc2V0SW5wdXQoTixaLnl5KSxaLnl5LmxleGVyPXEsWi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgcS55eWxsb2M+InUiJiYocS55eWxsb2M9e30pO3ZhciB1ZT1xLnl5bGxvYzt6LnB1c2godWUpO3ZhciBjZT1xLm9wdGlvbnMmJnEub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Wi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB0ZShuZSl7Ri5sZW5ndGg9Ri5sZW5ndGgtMipuZSwkLmxlbmd0aD0kLmxlbmd0aC1uZSx6Lmxlbmd0aD16Lmxlbmd0aC1uZX1vKHRlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIERlKCl7dmFyIG5lO3JldHVybiBuZT1CLnBvcCgpfHxxLmxleCgpfHxKLHR5cGVvZiBuZSE9Im51bWJlciImJihuZSBpbnN0YW5jZW9mIEFycmF5JiYoQj1uZSxuZT1CLnBvcCgpKSxuZT1QLnN5bWJvbHNfW25lXXx8bmUpLG5lfW8oRGUsImxleCIpO2Zvcih2YXIgb2Usa2UsRmUsQmUsVmUsR2UsSGU9e30seGUsWCxmZSxoZTs7KXtpZihGZT1GW0YubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbRmVdP0JlPXRoaXMuZGVmYXVsdEFjdGlvbnNbRmVdOigob2U9PT1udWxsfHx0eXBlb2Ygb2U+InUiKSYmKG9lPURlKCkpLEJlPVdbRmVdJiZXW0ZlXVtvZV0pLHR5cGVvZiBCZT4idSJ8fCFCZS5sZW5ndGh8fCFCZVswXSl7dmFyIGdlPSIiO2hlPVtdO2Zvcih4ZSBpbiBXW0ZlXSl0aGlzLnRlcm1pbmFsc19beGVdJiZ4ZT5lZSYmaGUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3hlXSsiJyIpO3Euc2hvd1Bvc2l0aW9uP2dlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEsrMSkrYDoKYCtxLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAraGUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tvZV18fG9lKSsiJyI6Z2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoSysxKSsiOiBVbmV4cGVjdGVkICIrKG9lPT1KPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW29lXXx8b2UpKyInIiksdGhpcy5wYXJzZUVycm9yKGdlLHt0ZXh0OnEubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW29lXXx8b2UsbGluZTpxLnl5bGluZW5vLGxvYzp1ZSxleHBlY3RlZDpoZX0pfWlmKEJlWzBdaW5zdGFuY2VvZiBBcnJheSYmQmUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitGZSsiLCB0b2tlbjogIitvZSk7c3dpdGNoKEJlWzBdKXtjYXNlIDE6Ri5wdXNoKG9lKSwkLnB1c2gocS55eXRleHQpLHoucHVzaChxLnl5bGxvYyksRi5wdXNoKEJlWzFdKSxvZT1udWxsLGtlPyhvZT1rZSxrZT1udWxsKTooaWU9cS55eWxlbmcsaj1xLnl5dGV4dCxLPXEueXlsaW5lbm8sdWU9cS55eWxsb2MsUT4wJiZRLS0pO2JyZWFrO2Nhc2UgMjppZihYPXRoaXMucHJvZHVjdGlvbnNfW0JlWzFdXVsxXSxIZS4kPSRbJC5sZW5ndGgtWF0sSGUuXyQ9e2ZpcnN0X2xpbmU6elt6Lmxlbmd0aC0oWHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnpbei5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp6W3oubGVuZ3RoLShYfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnpbei5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGNlJiYoSGUuXyQucmFuZ2U9W3pbei5sZW5ndGgtKFh8fDEpXS5yYW5nZVswXSx6W3oubGVuZ3RoLTFdLnJhbmdlWzFdXSksR2U9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEhlLFtqLGllLEssWi55eSxCZVsxXSwkLHpdLmNvbmNhdChIKSksdHlwZW9mIEdlPCJ1IilyZXR1cm4gR2U7WCYmKEY9Ri5zbGljZSgwLC0xKlgqMiksJD0kLnNsaWNlKDAsLTEqWCksej16LnNsaWNlKDAsLTEqWCkpLEYucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tCZVsxXV1bMF0pLCQucHVzaChIZS4kKSx6LnB1c2goSGUuXyQpLGZlPVdbRltGLmxlbmd0aC0yXV1bRltGLmxlbmd0aC0xXV0sRi5wdXNoKGZlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sUj1mdW5jdGlvbigpe3ZhciBPPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oUCxGKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFAsRik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoUCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihOLFApe3JldHVybiB0aGlzLnl5PVB8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PU4sdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Tix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Tix0aGlzLm1hdGNoZWQrPU47dmFyIFA9Ti5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIFA/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLE59LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oTil7dmFyIFA9Ti5sZW5ndGgsRj1OLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Tit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtUCksdGhpcy5vZmZzZXQtPVA7dmFyIEI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksRi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUYubGVuZ3RoLTEpO3ZhciAkPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGPyhGLmxlbmd0aD09PUIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStCW0IubGVuZ3RoLUYubGVuZ3RoXS5sZW5ndGgtRlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bJFswXSwkWzBdK3RoaXMueXlsZW5nLVBdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihOKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoTikpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIE49dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihOLmxlbmd0aD4yMD8iLi4uIjoiIikrTi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBOPXRoaXMubWF0Y2g7cmV0dXJuIE4ubGVuZ3RoPDIwJiYoTis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtTi5sZW5ndGgpKSwoTi5zdWJzdHIoMCwyMCkrKE4ubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgTj10aGlzLnBhc3RJbnB1dCgpLFA9bmV3IEFycmF5KE4ubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gTit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArUCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oTixQKXt2YXIgRixCLCQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKCQ9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoJC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxCPU5bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEImJih0aGlzLnl5bGluZW5vKz1CLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkI/QltCLmxlbmd0aC0xXS5sZW5ndGgtQltCLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK05bMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9TlswXSx0aGlzLm1hdGNoKz1OWzBdLHRoaXMubWF0Y2hlcz1OLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKE5bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPU5bMF0sRj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxQLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEYpcmV0dXJuIEY7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHogaW4gJCl0aGlzW3pdPSRbel07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIE4sUCxGLEI7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgJD10aGlzLl9jdXJyZW50UnVsZXMoKSx6PTA7ejwkLmxlbmd0aDt6KyspaWYoRj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzWyRbel1dKSxGJiYoIVB8fEZbMF0ubGVuZ3RoPlBbMF0ubGVuZ3RoKSl7aWYoUD1GLEI9eix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihOPXRoaXMudGVzdF9tYXRjaChGLCRbel0pLE4hPT0hMSlyZXR1cm4gTjtpZih0aGlzLl9iYWNrdHJhY2spe1A9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gUD8oTj10aGlzLnRlc3RfbWF0Y2goUCwkW0JdKSxOIT09ITE/TjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBQPXRoaXMubmV4dCgpO3JldHVybiBQfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihQKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goUCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgUD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBQPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oUCl7cmV0dXJuIFA9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhQfHwwKSxQPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbUF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihQKXt0aGlzLmJlZ2luKFApfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oUCxGLEIsJCl7dmFyIHo9JDtzd2l0Y2goQil7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDticmVhaztjYXNlIDQ6cmV0dXJuIDM0O2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIDEwO2Nhc2UgNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY190aXRsZSIpLDE5O2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY19kZXNjciIpLDIxO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDExOnRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gNTtjYXNlIDE1OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWF9BWElTIjticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19kYXRhIiksIllfQVhJUyI7YnJlYWs7Y2FzZSAxODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfYmFuZF9kYXRhIiksMjQ7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gMzE7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGEiKSwxNjticmVhaztjYXNlIDIxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE4O2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhX2lubmVyIiksMjQ7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gMjc7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2JyZWFrO2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIlNUUiI7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjY7Y2FzZSAzMTpyZXR1cm4gNDM7Y2FzZSAzMjpyZXR1cm4iQ09MT04iO2Nhc2UgMzM6cmV0dXJuIDQ0O2Nhc2UgMzQ6cmV0dXJuIDI4O2Nhc2UgMzU6cmV0dXJuIDQ1O2Nhc2UgMzY6cmV0dXJuIDQ2O2Nhc2UgMzc6cmV0dXJuIDQ4O2Nhc2UgMzg6cmV0dXJuIDUwO2Nhc2UgMzk6cmV0dXJuIDQ3O2Nhc2UgNDA6cmV0dXJuIDQxO2Nhc2UgNDE6cmV0dXJuIDQ5O2Nhc2UgNDI6cmV0dXJuIDQyO2Nhc2UgNDM6YnJlYWs7Y2FzZSA0NDpyZXR1cm4gMzU7Y2FzZSA0NTpyZXR1cm4gMzZ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86KFxyP1xuKSkvaSwvXig/Oihccj9cbikpL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/Olx7KS9pLC9eKD86W15cfV0qKS9pLC9eKD86eHljaGFydC1iZXRhXGIpL2ksL14oPzooPzp2ZXJ0aWNhbHxob3Jpem9udGFsKSkvaSwvXig/OngtYXhpc1xiKS9pLC9eKD86eS1heGlzXGIpL2ksL14oPzpcWykvaSwvXig/Oi0tPikvaSwvXig/OmxpbmVcYikvaSwvXig/OmJhclxiKS9pLC9eKD86XFspL2ksL14oPzpbKy1dPyg/OlxkKyg/OlwuXGQrKT98XC5cZCspKS9pLC9eKD86XF0pL2ksL14oPzooPzpgXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBceyB0aGlzXC5wdXNoU3RhdGVcKG1kX3N0cmluZ1wpOyBcfVxuPG1kX3N0cmluZz5cKFw/OlwoXD8hYCJcKVwuXClcKyAgICAgICAgICAgICAgICAgIFx7IHJldHVybiBNRF9TVFI7IFx9XG48bWRfc3RyaW5nPlwoXD86YCkpL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/OlwqKS9pLC9eKD86IykvaSwvXig/OltcX10pL2ksL14oPzpcLikvaSwvXig/OiYpL2ksL14oPzotKS9pLC9eKD86WzAtOV0rKS9pLC9eKD86XHMrKS9pLC9eKD86OykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2RhdGFfaW5uZXI6e3J1bGVzOlswLDEsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDIzLDI0LDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGRhdGE6e3J1bGVzOlswLDEsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjIsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYXhpc19iYW5kX2RhdGE6e3J1bGVzOlswLDEsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDI0LDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGF4aXNfZGF0YTp7cnVsZXM6WzAsMSwyLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMywyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxtZF9zdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjcsMjhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gT30oKTtrLmxleGVyPVI7ZnVuY3Rpb24gUygpe3RoaXMueXk9e319cmV0dXJuIG8oUywiUGFyc2VyIiksUy5wcm90b3R5cGU9ayxrLlBhcnNlcj1TLG5ldyBTfSgpO3NPLnBhcnNlcj1zTztaaGU9c099KTtmdW5jdGlvbiBvTyh0KXtyZXR1cm4gdC50eXBlPT09ImJhciJ9ZnVuY3Rpb24gZEUodCl7cmV0dXJuIHQudHlwZT09PSJiYW5kIn1mdW5jdGlvbiBJZyh0KXtyZXR1cm4gdC50eXBlPT09ImxpbmVhciJ9dmFyIHBFPU0oKCk9PnsidXNlIHN0cmljdCI7byhvTywiaXNCYXJQbG90Iik7byhkRSwiaXNCYW5kQXhpc0RhdGEiKTtvKElnLCJpc0xpbmVhckF4aXNEYXRhIil9KTt2YXIgT2csbE89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEbCgpO09nPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucGFyZW50R3JvdXA9ZX1zdGF0aWN7byh0aGlzLCJUZXh0RGltZW5zaW9uQ2FsY3VsYXRvcldpdGhGb250Iil9Z2V0TWF4RGltZW5zaW9uKGUscil7aWYoIXRoaXMucGFyZW50R3JvdXApcmV0dXJue3dpZHRoOmUucmVkdWNlKChhLHMpPT5NYXRoLm1heChzLmxlbmd0aCxhKSwwKSpyLGhlaWdodDpyfTtsZXQgbj17d2lkdGg6MCxoZWlnaHQ6MH0saT10aGlzLnBhcmVudEdyb3VwLmFwcGVuZCgiZyIpLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5hdHRyKCJmb250LXNpemUiLHIpO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz1naihpLDEsYSksbD1zP3Mud2lkdGg6YS5sZW5ndGgqcix1PXM/cy5oZWlnaHQ6cjtuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsbCksbi5oZWlnaHQ9TWF0aC5tYXgobi5oZWlnaHQsdSl9cmV0dXJuIGkucmVtb3ZlKCksbn19fSk7dmFyIFBnLGNPPU0oKCk9PnsidXNlIHN0cmljdCI7UGc9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5heGlzQ29uZmlnPWU7dGhpcy50aXRsZT1yO3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9bjt0aGlzLmF4aXNUaGVtZUNvbmZpZz1pO3RoaXMuYm91bmRpbmdSZWN0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9O3RoaXMuYXhpc1Bvc2l0aW9uPSJsZWZ0Ijt0aGlzLnNob3dUaXRsZT0hMTt0aGlzLnNob3dMYWJlbD0hMTt0aGlzLnNob3dUaWNrPSExO3RoaXMuc2hvd0F4aXNMaW5lPSExO3RoaXMub3V0ZXJQYWRkaW5nPTA7dGhpcy50aXRsZVRleHRIZWlnaHQ9MDt0aGlzLmxhYmVsVGV4dEhlaWdodD0wO3RoaXMucmFuZ2U9WzAsMTBdLHRoaXMuYm91bmRpbmdSZWN0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuYXhpc1Bvc2l0aW9uPSJsZWZ0In1zdGF0aWN7byh0aGlzLCJCYXNlQXhpcyIpfXNldFJhbmdlKGUpe3RoaXMucmFuZ2U9ZSx0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1lWzFdLWVbMF06dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9ZVsxXS1lWzBdLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWdldFJhbmdlKCl7cmV0dXJuW3RoaXMucmFuZ2VbMF0rdGhpcy5vdXRlclBhZGRpbmcsdGhpcy5yYW5nZVsxXS10aGlzLm91dGVyUGFkZGluZ119c2V0QXhpc1Bvc2l0aW9uKGUpe3RoaXMuYXhpc1Bvc2l0aW9uPWUsdGhpcy5zZXRSYW5nZSh0aGlzLnJhbmdlKX1nZXRUaWNrRGlzdGFuY2UoKXtsZXQgZT10aGlzLmdldFJhbmdlKCk7cmV0dXJuIE1hdGguYWJzKGVbMF0tZVsxXSkvdGhpcy5nZXRUaWNrVmFsdWVzKCkubGVuZ3RofWdldEF4aXNPdXRlclBhZGRpbmcoKXtyZXR1cm4gdGhpcy5vdXRlclBhZGRpbmd9Z2V0TGFiZWxEaW1lbnNpb24oKXtyZXR1cm4gdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24odGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGU9PmUudG9TdHJpbmcoKSksdGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUpfXJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCl7LjcqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKT50aGlzLm91dGVyUGFkZGluZyoyJiYodGhpcy5vdXRlclBhZGRpbmc9TWF0aC5mbG9vciguNyp0aGlzLmdldFRpY2tEaXN0YW5jZSgpLzIpKSx0aGlzLnJlY2FsY3VsYXRlU2NhbGUoKX1jYWxjdWxhdGVTcGFjZUlmRHJhd25Ib3Jpem9udGFsbHkoZSl7bGV0IHI9ZS5oZWlnaHQ7aWYodGhpcy5heGlzQ29uZmlnLnNob3dBeGlzTGluZSYmcj50aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCYmKHItPXRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoLHRoaXMuc2hvd0F4aXNMaW5lPSEwKSx0aGlzLmF4aXNDb25maWcuc2hvd0xhYmVsKXtsZXQgbj10aGlzLmdldExhYmVsRGltZW5zaW9uKCksaT0uMiplLndpZHRoO3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKG4ud2lkdGgvMixpKTtsZXQgYT1uLmhlaWdodCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7dGhpcy5sYWJlbFRleHRIZWlnaHQ9bi5oZWlnaHQsYTw9ciYmKHItPWEsdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmcj49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLHItPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtsZXQgbj10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy50aXRsZV0sdGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUpLGk9bi5oZWlnaHQrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyoyO3RoaXMudGl0bGVUZXh0SGVpZ2h0PW4uaGVpZ2h0LGk8PXImJihyLT1pLHRoaXMuc2hvd1RpdGxlPSEwKX10aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lLndpZHRoLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1lLmhlaWdodC1yfWNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKGUpe2xldCByPWUud2lkdGg7aWYodGhpcy5heGlzQ29uZmlnLnNob3dBeGlzTGluZSYmcj50aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCYmKHItPXRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoLHRoaXMuc2hvd0F4aXNMaW5lPSEwKSx0aGlzLmF4aXNDb25maWcuc2hvd0xhYmVsKXtsZXQgbj10aGlzLmdldExhYmVsRGltZW5zaW9uKCksaT0uMiplLmhlaWdodDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihuLmhlaWdodC8yLGkpO2xldCBhPW4ud2lkdGgrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyoyO2E8PXImJihyLT1hLHRoaXMuc2hvd0xhYmVsPSEwKX1pZih0aGlzLmF4aXNDb25maWcuc2hvd1RpY2smJnI+PXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoJiYodGhpcy5zaG93VGljaz0hMCxyLT10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCksdGhpcy5heGlzQ29uZmlnLnNob3dUaXRsZSYmdGhpcy50aXRsZSl7bGV0IG49dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSxpPW4uaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1uLmhlaWdodCxpPD1yJiYoci09aSx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9ZS53aWR0aC1yLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1lLmhlaWdodH1jYWxjdWxhdGVTcGFjZShlKXtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKGUpOnRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGUpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1zZXRCb3VuZGluZ0JveFhZKGUpe3RoaXMuYm91bmRpbmdSZWN0Lng9ZS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9ZS55fWdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpe2xldCBlPVtdO2lmKHRoaXMuc2hvd0F4aXNMaW5lKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLXRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoLzI7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsibGVmdC1heGlzIiwiYXhpc2wtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7cn0sJHt0aGlzLmJvdW5kaW5nUmVjdC55fSBMICR7cn0sJHt0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodH0gYCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHI9Pih7dGV4dDpyLnRvU3RyaW5nKCkseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLSh0aGlzLnNob3dMYWJlbD90aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nOjApLSh0aGlzLnNob3dUaWNrP3RoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoOjApLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKSx5OnRoaXMuZ2V0U2NhbGVWYWx1ZShyKSxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJyaWdodCJ9KSl9KSx0aGlzLnNob3dUaWNrKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKG49Pih7cGF0aDpgTSAke3J9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSBMICR7ci10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH0sJHt0aGlzLmdldFNjYWxlVmFsdWUobil9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjoyNzAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksZX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpe2xldCBlPVtdO2lmKHRoaXMuc2hvd0F4aXNMaW5lKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoLzI7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJheGlzLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7cn0gTCAke3RoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGh9LCR7cn1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcuYXhpc0xpbmVDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aH1dfSl9aWYodGhpcy5zaG93TGFiZWwmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChyPT4oe3RleHQ6ci50b1N0cmluZygpLHg6dGhpcy5nZXRTY2FsZVZhbHVlKHIpLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKyh0aGlzLnNob3dUaWNrP3RoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoOjApKyh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKSxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKG49Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSwke3IrdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMucmFuZ2VbMF0rKHRoaXMucmFuZ2VbMV0tdGhpcy5yYW5nZVswXSkvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmctdGhpcy50aXRsZVRleHRIZWlnaHQsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksZX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpe2xldCBlPVtdO2lmKHRoaXMuc2hvd0F4aXNMaW5lKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke3J9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke3J9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocj0+KHt0ZXh0OnIudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZShyKSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrKHRoaXMuc2hvd1RpdGxlP3RoaXMudGl0bGVUZXh0SGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjowKSt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9KSl9KSx0aGlzLnNob3dUaWNrKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC55O2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChuPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cit0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSwke3IrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLGV9Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiKXJldHVybiB0aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpO2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Iil0aHJvdyBFcnJvcigiRHJhd2luZyBvZiByaWdodCBheGlzIGlzIG5vdCBpbXBsZW1lbnRlZCIpO3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJib3R0b20iP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTp0aGlzLmF4aXNQb3NpdGlvbj09PSJ0b3AiP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKTpbXX19fSk7dmFyIG1FLGVmZT1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7aHQoKTtjTygpO21FPWNsYXNzIGV4dGVuZHMgUGd7c3RhdGlje28odGhpcywiQmFuZEF4aXMiKX1jb25zdHJ1Y3RvcihlLHIsbixpLGEpe3N1cGVyKGUsaSxhLHIpLHRoaXMuY2F0ZWdvcmllcz1uLHRoaXMuc2NhbGU9THAoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfXNldFJhbmdlKGUpe3N1cGVyLnNldFJhbmdlKGUpfXJlY2FsY3VsYXRlU2NhbGUoKXt0aGlzLnNjYWxlPUxwKCkuZG9tYWluKHRoaXMuY2F0ZWdvcmllcykucmFuZ2UodGhpcy5nZXRSYW5nZSgpKS5wYWRkaW5nSW5uZXIoMSkucGFkZGluZ091dGVyKDApLmFsaWduKC41KSxZLnRyYWNlKCJCYW5kQXhpcyBheGlzIGZpbmFsIGNhdGVnb3JpZXMsIHJhbmdlOiAiLHRoaXMuY2F0ZWdvcmllcyx0aGlzLmdldFJhbmdlKCkpfWdldFRpY2tWYWx1ZXMoKXtyZXR1cm4gdGhpcy5jYXRlZ29yaWVzfWdldFNjYWxlVmFsdWUoZSl7cmV0dXJuIHRoaXMuc2NhbGUoZSk/P3RoaXMuZ2V0UmFuZ2UoKVswXX19fSk7dmFyIGdFLHRmZT1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7Y08oKTtnRT1jbGFzcyBleHRlbmRzIFBne3N0YXRpY3tvKHRoaXMsIkxpbmVhckF4aXMiKX1jb25zdHJ1Y3RvcihlLHIsbixpLGEpe3N1cGVyKGUsaSxhLHIpLHRoaXMuZG9tYWluPW4sdGhpcy5zY2FsZT1ibCgpLmRvbWFpbih0aGlzLmRvbWFpbikucmFuZ2UodGhpcy5nZXRSYW5nZSgpKX1nZXRUaWNrVmFsdWVzKCl7cmV0dXJuIHRoaXMuc2NhbGUudGlja3MoKX1yZWNhbGN1bGF0ZVNjYWxlKCl7bGV0IGU9Wy4uLnRoaXMuZG9tYWluXTt0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmZS5yZXZlcnNlKCksdGhpcy5zY2FsZT1ibCgpLmRvbWFpbihlKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFNjYWxlVmFsdWUoZSl7cmV0dXJuIHRoaXMuc2NhbGUoZSl9fX0pO2Z1bmN0aW9uIHVPKHQsZSxyLG4pe2xldCBpPW5ldyBPZyhuKTtyZXR1cm4gZEUodCk/bmV3IG1FKGUscix0LmNhdGVnb3JpZXMsdC50aXRsZSxpKTpuZXcgZ0UoZSxyLFt0Lm1pbix0Lm1heF0sdC50aXRsZSxpKX12YXIgcmZlPU0oKCk9PnsidXNlIHN0cmljdCI7cEUoKTtsTygpO2VmZSgpO3RmZSgpO28odU8sImdldEF4aXMiKX0pO2Z1bmN0aW9uIG5mZSh0LGUscixuKXtsZXQgaT1uZXcgT2cobik7cmV0dXJuIG5ldyBoTyhpLHQsZSxyKX12YXIgaE8saWZlPU0oKCk9PnsidXNlIHN0cmljdCI7bE8oKTtoTz1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yPWU7dGhpcy5jaGFydENvbmZpZz1yO3RoaXMuY2hhcnREYXRhPW47dGhpcy5jaGFydFRoZW1lQ29uZmlnPWk7dGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5zaG93Q2hhcnRUaXRsZT0hMX1zdGF0aWN7byh0aGlzLCJDaGFydFRpdGxlIil9c2V0Qm91bmRpbmdCb3hYWShlKXt0aGlzLmJvdW5kaW5nUmVjdC54PWUueCx0aGlzLmJvdW5kaW5nUmVjdC55PWUueX1jYWxjdWxhdGVTcGFjZShlKXtsZXQgcj10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy5jaGFydERhdGEudGl0bGVdLHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSksbj1NYXRoLm1heChyLndpZHRoLGUud2lkdGgpLGk9ci5oZWlnaHQrMip0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlUGFkZGluZztyZXR1cm4gci53aWR0aDw9biYmci5oZWlnaHQ8PWkmJnRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlJiZ0aGlzLmNoYXJ0RGF0YS50aXRsZSYmKHRoaXMuYm91bmRpbmdSZWN0LndpZHRoPW4sdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWksdGhpcy5zaG93Q2hhcnRUaXRsZT0hMCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtsZXQgZT1bXTtyZXR1cm4gdGhpcy5zaG93Q2hhcnRUaXRsZSYmZS5wdXNoKHtncm91cFRleHRzOlsiY2hhcnQtdGl0bGUiXSx0eXBlOiJ0ZXh0IixkYXRhOlt7Zm9udFNpemU6dGhpcy5jaGFydENvbmZpZy50aXRsZUZvbnRTaXplLHRleHQ6dGhpcy5jaGFydERhdGEudGl0bGUsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoiY2VudGVyIix4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LzIsZmlsbDp0aGlzLmNoYXJ0VGhlbWVDb25maWcudGl0bGVDb2xvcixyb3RhdGlvbjowfV19KSxlfX07byhuZmUsImdldENoYXJ0VGl0bGVDb21wb25lbnQiKX0pO3ZhciB5RSxhZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO3lFPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGksYSl7dGhpcy5wbG90RGF0YT1lO3RoaXMueEF4aXM9cjt0aGlzLnlBeGlzPW47dGhpcy5vcmllbnRhdGlvbj1pO3RoaXMucGxvdEluZGV4PWF9c3RhdGlje28odGhpcywiTGluZVBsb3QiKX1nZXREcmF3YWJsZUVsZW1lbnQoKXtsZXQgZT10aGlzLnBsb3REYXRhLmRhdGEubWFwKG49Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoblswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKG5bMV0pXSkscjtyZXR1cm4gdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj9yPUthKCkueShuPT5uWzBdKS54KG49Pm5bMV0pKGUpOnI9S2EoKS54KG49Pm5bMF0pLnkobj0+blsxXSkoZSkscj9be2dyb3VwVGV4dHM6WyJwbG90IixgbGluZS1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicGF0aCIsZGF0YTpbe3BhdGg6cixzdHJva2VGaWxsOnRoaXMucGxvdERhdGEuc3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLnBsb3REYXRhLnN0cm9rZVdpZHRofV19XTpbXX19fSk7dmFyIHZFLHNmZT1NKCgpPT57InVzZSBzdHJpY3QiO3ZFPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGksYSxzKXt0aGlzLmJhckRhdGE9ZTt0aGlzLmJvdW5kaW5nUmVjdD1yO3RoaXMueEF4aXM9bjt0aGlzLnlBeGlzPWk7dGhpcy5vcmllbnRhdGlvbj1hO3RoaXMucGxvdEluZGV4PXN9c3RhdGlje28odGhpcywiQmFyUGxvdCIpfWdldERyYXdhYmxlRWxlbWVudCgpe2xldCBlPXRoaXMuYmFyRGF0YS5kYXRhLm1hcChhPT5bdGhpcy54QXhpcy5nZXRTY2FsZVZhbHVlKGFbMF0pLHRoaXMueUF4aXMuZ2V0U2NhbGVWYWx1ZShhWzFdKV0pLG49TWF0aC5taW4odGhpcy54QXhpcy5nZXRBeGlzT3V0ZXJQYWRkaW5nKCkqMix0aGlzLnhBeGlzLmdldFRpY2tEaXN0YW5jZSgpKSooMS0uMDUpLGk9bi8yO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6ZS5tYXAoYT0+KHt4OnRoaXMuYm91bmRpbmdSZWN0LngseTphWzBdLWksaGVpZ2h0Om4sd2lkdGg6YVsxXS10aGlzLmJvdW5kaW5nUmVjdC54LGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV06W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTplLm1hcChhPT4oe3g6YVswXS1pLHk6YVsxXSx3aWR0aDpuLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC1hWzFdLGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV19fX0pO2Z1bmN0aW9uIG9mZSh0LGUscil7cmV0dXJuIG5ldyBmTyh0LGUscil9dmFyIGZPLGxmZT1NKCgpPT57InVzZSBzdHJpY3QiO2FmZSgpO3NmZSgpO2ZPPWNsYXNze2NvbnN0cnVjdG9yKGUscixuKXt0aGlzLmNoYXJ0Q29uZmlnPWU7dGhpcy5jaGFydERhdGE9cjt0aGlzLmNoYXJ0VGhlbWVDb25maWc9bjt0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1zdGF0aWN7byh0aGlzLCJCYXNlUGxvdCIpfXNldEF4ZXMoZSxyKXt0aGlzLnhBeGlzPWUsdGhpcy55QXhpcz1yfXNldEJvdW5kaW5nQm94WFkoZSl7dGhpcy5ib3VuZGluZ1JlY3QueD1lLngsdGhpcy5ib3VuZGluZ1JlY3QueT1lLnl9Y2FsY3VsYXRlU3BhY2UoZSl7cmV0dXJuIHRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWUud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWUuaGVpZ2h0LHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1nZXREcmF3YWJsZUVsZW1lbnRzKCl7aWYoISh0aGlzLnhBeGlzJiZ0aGlzLnlBeGlzKSl0aHJvdyBFcnJvcigiQXhlcyBtdXN0IGJlIHBhc3NlZCB0byByZW5kZXIgUGxvdHMiKTtsZXQgZT1bXTtmb3IobGV0W3Isbl1vZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpc3dpdGNoKG4udHlwZSl7Y2FzZSJsaW5lIjp7bGV0IGk9bmV3IHlFKG4sdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbixyKTtlLnB1c2goLi4uaS5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWs7Y2FzZSJiYXIiOntsZXQgaT1uZXcgdkUobix0aGlzLmJvdW5kaW5nUmVjdCx0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLHIpO2UucHVzaCguLi5pLmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVha31yZXR1cm4gZX19O28ob2ZlLCJnZXRQbG90Q29tcG9uZW50Iil9KTt2YXIgeEUsY2ZlPU0oKCk9PnsidXNlIHN0cmljdCI7cmZlKCk7aWZlKCk7bGZlKCk7cEUoKTt4RT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLmNoYXJ0Q29uZmlnPWU7dGhpcy5jaGFydERhdGE9cjt0aGlzLmNvbXBvbmVudFN0b3JlPXt0aXRsZTpuZmUoZSxyLG4saSkscGxvdDpvZmUoZSxyLG4pLHhBeGlzOnVPKHIueEF4aXMsZS54QXhpcyx7dGl0bGVDb2xvcjpuLnhBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOm4ueEF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpuLnhBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6bi54QXhpc0xpbmVDb2xvcn0saSkseUF4aXM6dU8oci55QXhpcyxlLnlBeGlzLHt0aXRsZUNvbG9yOm4ueUF4aXNUaXRsZUNvbG9yLGxhYmVsQ29sb3I6bi55QXhpc0xhYmVsQ29sb3IsdGlja0NvbG9yOm4ueUF4aXNUaWNrQ29sb3IsYXhpc0xpbmVDb2xvcjpuLnlBeGlzTGluZUNvbG9yfSxpKX19c3RhdGlje28odGhpcywiT3JjaGVzdHJhdG9yIil9Y2FsY3VsYXRlVmVydGljYWxTcGFjZSgpe2xldCBlPXRoaXMuY2hhcnRDb25maWcud2lkdGgscj10aGlzLmNoYXJ0Q29uZmlnLmhlaWdodCxuPTAsaT0wLGE9TWF0aC5mbG9vcihlKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCkscz1NYXRoLmZsb29yKHIqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSxsPXRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YSxoZWlnaHQ6c30pO2UtPWwud2lkdGgsci09bC5oZWlnaHQsbD10aGlzLmNvbXBvbmVudFN0b3JlLnRpdGxlLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDp0aGlzLmNoYXJ0Q29uZmlnLndpZHRoLGhlaWdodDpyfSksaT1sLmhlaWdodCxyLT1sLmhlaWdodCx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldEF4aXNQb3NpdGlvbigiYm90dG9tIiksbD10aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDplLGhlaWdodDpyfSksci09bC5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRBeGlzUG9zaXRpb24oImxlZnQiKSxsPXRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxuPWwud2lkdGgsZS09bC53aWR0aCxlPjAmJihhKz1lLGU9MCkscj4wJiYocys9cixyPTApLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YSxoZWlnaHQ6c30pLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRCb3VuZGluZ0JveFhZKHt4Om4seTppfSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRSYW5nZShbbixuK2FdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6bix5Omkrc30pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0UmFuZ2UoW2ksaStzXSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OjAseTppfSksdGhpcy5jaGFydERhdGEucGxvdHMuc29tZSh1PT5vTyh1KSkmJnRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMucmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKX1jYWxjdWxhdGVIb3Jpem9udGFsU3BhY2UoKXtsZXQgZT10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLHI9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQsbj0wLGk9MCxhPTAscz1NYXRoLmZsb29yKGUqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSxsPU1hdGguZmxvb3Iocip0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLHU9dGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDpsfSk7ZS09dS53aWR0aCxyLT11LmhlaWdodCx1PXRoaXMuY29tcG9uZW50U3RvcmUudGl0bGUuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnRoaXMuY2hhcnRDb25maWcud2lkdGgsaGVpZ2h0OnJ9KSxuPXUuaGVpZ2h0LHItPXUuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IiksdT10aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDplLGhlaWdodDpyfSksZS09dS53aWR0aCxpPXUud2lkdGgsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRBeGlzUG9zaXRpb24oInRvcCIpLHU9dGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLHItPXUuaGVpZ2h0LGE9bit1LmhlaWdodCxlPjAmJihzKz1lLGU9MCkscj4wJiYobCs9cixyPTApLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6cyxoZWlnaHQ6bH0pLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRCb3VuZGluZ0JveFhZKHt4OmkseTphfSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRSYW5nZShbaSxpK3NdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6aSx5Om59KSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFthLGErbF0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6YX0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoaD0+b08oaCkpJiZ0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCl9Y2FsY3VsYXRlU3BhY2UoKXt0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/dGhpcy5jYWxjdWxhdGVIb3Jpem9udGFsU3BhY2UoKTp0aGlzLmNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKX1nZXREcmF3YWJsZUVsZW1lbnQoKXt0aGlzLmNhbGN1bGF0ZVNwYWNlKCk7bGV0IGU9W107dGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEF4ZXModGhpcy5jb21wb25lbnRTdG9yZS54QXhpcyx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzKTtmb3IobGV0IHIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudFN0b3JlKSllLnB1c2goLi4uci5nZXREcmF3YWJsZUVsZW1lbnRzKCkpO3JldHVybiBlfX19KTt2YXIgYkUsdWZlPU0oKCk9PnsidXNlIHN0cmljdCI7Y2ZlKCk7YkU9Y2xhc3N7c3RhdGlje28odGhpcywiWFlDaGFydEJ1aWxkZXIiKX1zdGF0aWMgYnVpbGQoZSxyLG4saSl7cmV0dXJuIG5ldyB4RShlLHIsbixpKS5nZXREcmF3YWJsZUVsZW1lbnQoKX19fSk7ZnVuY3Rpb24gZmZlKCl7bGV0IHQ9c3AoKSxlPVNyKCk7cmV0dXJuIHdzKHQueHlDaGFydCxlLnRoZW1lVmFyaWFibGVzLnh5Q2hhcnQpfWZ1bmN0aW9uIGRmZSgpe2xldCB0PVNyKCk7cmV0dXJuIHdzKHVyLnh5Q2hhcnQsdC54eUNoYXJ0KX1mdW5jdGlvbiBwZmUoKXtyZXR1cm57eUF4aXM6e3R5cGU6ImxpbmVhciIsdGl0bGU6IiIsbWluOjEvMCxtYXg6LTEvMH0seEF4aXM6e3R5cGU6ImJhbmQiLHRpdGxlOiIiLGNhdGVnb3JpZXM6W119LHRpdGxlOiIiLHBsb3RzOltdfX1mdW5jdGlvbiBtTyh0KXtsZXQgZT1TcigpO3JldHVybiBUcih0LnRyaW0oKSxlKX1mdW5jdGlvbiBaVmUodCl7aGZlPXR9ZnVuY3Rpb24gSlZlKHQpe3Q9PT0iaG9yaXpvbnRhbCI/bXguY2hhcnRPcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI6bXguY2hhcnRPcmllbnRhdGlvbj0idmVydGljYWwifWZ1bmN0aW9uIGVVZSh0KXt1bi54QXhpcy50aXRsZT1tTyh0LnRleHQpfWZ1bmN0aW9uIG1mZSh0LGUpe3VuLnhBeGlzPXt0eXBlOiJsaW5lYXIiLHRpdGxlOnVuLnhBeGlzLnRpdGxlLG1pbjp0LG1heDplfSx3RT0hMH1mdW5jdGlvbiB0VWUodCl7dW4ueEF4aXM9e3R5cGU6ImJhbmQiLHRpdGxlOnVuLnhBeGlzLnRpdGxlLGNhdGVnb3JpZXM6dC5tYXAoZT0+bU8oZS50ZXh0KSl9LHdFPSEwfWZ1bmN0aW9uIHJVZSh0KXt1bi55QXhpcy50aXRsZT1tTyh0LnRleHQpfWZ1bmN0aW9uIG5VZSh0LGUpe3VuLnlBeGlzPXt0eXBlOiJsaW5lYXIiLHRpdGxlOnVuLnlBeGlzLnRpdGxlLG1pbjp0LG1heDplfSxwTz0hMH1mdW5jdGlvbiBpVWUodCl7bGV0IGU9TWF0aC5taW4oLi4udCkscj1NYXRoLm1heCguLi50KSxuPUlnKHVuLnlBeGlzKT91bi55QXhpcy5taW46MS8wLGk9SWcodW4ueUF4aXMpP3VuLnlBeGlzLm1heDotMS8wO3VuLnlBeGlzPXt0eXBlOiJsaW5lYXIiLHRpdGxlOnVuLnlBeGlzLnRpdGxlLG1pbjpNYXRoLm1pbihuLGUpLG1heDpNYXRoLm1heChpLHIpfX1mdW5jdGlvbiBnZmUodCl7bGV0IGU9W107aWYodC5sZW5ndGg9PT0wKXJldHVybiBlO2lmKCF3RSl7bGV0IHI9SWcodW4ueEF4aXMpP3VuLnhBeGlzLm1pbjoxLzAsbj1JZyh1bi54QXhpcyk/dW4ueEF4aXMubWF4Oi0xLzA7bWZlKE1hdGgubWluKHIsMSksTWF0aC5tYXgobix0Lmxlbmd0aCkpfWlmKHBPfHxpVWUodCksZEUodW4ueEF4aXMpJiYoZT11bi54QXhpcy5jYXRlZ29yaWVzLm1hcCgocixuKT0+W3IsdFtuXV0pKSxJZyh1bi54QXhpcykpe2xldCByPXVuLnhBeGlzLm1pbixuPXVuLnhBeGlzLm1heCxpPShuLXIpLyh0Lmxlbmd0aC0xKSxhPVtdO2ZvcihsZXQgcz1yO3M8PW47cys9aSlhLnB1c2goYCR7c31gKTtlPWEubWFwKChzLGwpPT5bcyx0W2xdXSl9cmV0dXJuIGV9ZnVuY3Rpb24geWZlKHQpe3JldHVybiBkT1t0PT09MD8wOnQlZE8ubGVuZ3RoXX1mdW5jdGlvbiBhVWUodCxlKXtsZXQgcj1nZmUoZSk7dW4ucGxvdHMucHVzaCh7dHlwZToibGluZSIsc3Ryb2tlRmlsbDp5ZmUocHgpLHN0cm9rZVdpZHRoOjIsZGF0YTpyfSkscHgrK31mdW5jdGlvbiBzVWUodCxlKXtsZXQgcj1nZmUoZSk7dW4ucGxvdHMucHVzaCh7dHlwZToiYmFyIixmaWxsOnlmZShweCksZGF0YTpyfSkscHgrK31mdW5jdGlvbiBvVWUoKXtpZih1bi5wbG90cy5sZW5ndGg9PT0wKXRocm93IEVycm9yKCJObyBQbG90IHRvIHJlbmRlciwgcGxlYXNlIHByb3ZpZGUgYSBwbG90IHdpdGggc29tZSBkYXRhIik7cmV0dXJuIHVuLnRpdGxlPUpyKCksYkUuYnVpbGQobXgsdW4sZ3gsaGZlKX1mdW5jdGlvbiBsVWUoKXtyZXR1cm4gZ3h9ZnVuY3Rpb24gY1VlKCl7cmV0dXJuIG14fXZhciBweCxoZmUsbXgsZ3gsdW4sZE8sd0UscE8sdVVlLHZmZSx4ZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVYSgpO2hzKCk7VWIoKTtocigpO2ZyKCk7a2koKTt1ZmUoKTtwRSgpO3B4PTAsbXg9ZGZlKCksZ3g9ZmZlKCksdW49cGZlKCksZE89Z3gucGxvdENvbG9yUGFsZXR0ZS5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSksd0U9ITEscE89ITE7byhmZmUsImdldENoYXJ0RGVmYXVsdFRoZW1lQ29uZmlnIik7byhkZmUsImdldENoYXJ0RGVmYXVsdENvbmZpZyIpO28ocGZlLCJnZXRDaGFydERlZmF1bHREYXRhIik7byhtTywidGV4dFNhbml0aXplciIpO28oWlZlLCJzZXRUbXBTVkdHIik7byhKVmUsInNldE9yaWVudGF0aW9uIik7byhlVWUsInNldFhBeGlzVGl0bGUiKTtvKG1mZSwic2V0WEF4aXNSYW5nZURhdGEiKTtvKHRVZSwic2V0WEF4aXNCYW5kIik7byhyVWUsInNldFlBeGlzVGl0bGUiKTtvKG5VZSwic2V0WUF4aXNSYW5nZURhdGEiKTtvKGlVZSwic2V0WUF4aXNSYW5nZUZyb21QbG90RGF0YSIpO28oZ2ZlLCJ0cmFuc2Zvcm1EYXRhV2l0aG91dENhdGVnb3J5Iik7byh5ZmUsImdldFBsb3RDb2xvckZyb21QYWxldHRlIik7byhhVWUsInNldExpbmVEYXRhIik7byhzVWUsInNldEJhckRhdGEiKTtvKG9VZSwiZ2V0RHJhd2FibGVFbGVtIik7byhsVWUsImdldENoYXJ0VGhlbWVDb25maWciKTtvKGNVZSwiZ2V0Q2hhcnRDb25maWciKTt1VWU9byhmdW5jdGlvbigpe19yKCkscHg9MCxteD1kZmUoKSx1bj1wZmUoKSxneD1mZmUoKSxkTz1neC5wbG90Q29sb3JQYWxldHRlLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKSx3RT0hMSxwTz0hMX0sImNsZWFyIiksdmZlPXtnZXREcmF3YWJsZUVsZW06b1VlLGNsZWFyOnVVZSxzZXRBY2NUaXRsZTpScixnZXRBY2NUaXRsZTpQcixzZXREaWFncmFtVGl0bGU6bG4sZ2V0RGlhZ3JhbVRpdGxlOkpyLGdldEFjY0Rlc2NyaXB0aW9uOkZyLHNldEFjY0Rlc2NyaXB0aW9uOkJyLHNldE9yaWVudGF0aW9uOkpWZSxzZXRYQXhpc1RpdGxlOmVVZSxzZXRYQXhpc1JhbmdlRGF0YTptZmUsc2V0WEF4aXNCYW5kOnRVZSxzZXRZQXhpc1RpdGxlOnJVZSxzZXRZQXhpc1JhbmdlRGF0YTpuVWUsc2V0TGluZURhdGE6YVVlLHNldEJhckRhdGE6c1VlLHNldFRtcFNWR0c6WlZlLGdldENoYXJ0VGhlbWVDb25maWc6bFVlLGdldENoYXJ0Q29uZmlnOmNVZX19KTt2YXIgaFVlLGJmZSx3ZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO0h1KCk7bmkoKTtoVWU9bygodCxlLHIsbik9PntsZXQgaT1uLmRiLGE9aS5nZXRDaGFydFRoZW1lQ29uZmlnKCkscz1pLmdldENoYXJ0Q29uZmlnKCk7ZnVuY3Rpb24gbCh2KXtyZXR1cm4gdj09PSJ0b3AiPyJ0ZXh0LWJlZm9yZS1lZGdlIjoibWlkZGxlIn1vKGwsImdldERvbWluYW50QmFzZUxpbmUiKTtmdW5jdGlvbiB1KHYpe3JldHVybiB2PT09ImxlZnQiPyJzdGFydCI6dj09PSJyaWdodCI/ImVuZCI6Im1pZGRsZSJ9byh1LCJnZXRUZXh0QW5jaG9yIik7ZnVuY3Rpb24gaCh2KXtyZXR1cm5gdHJhbnNsYXRlKCR7di54fSwgJHt2Lnl9KSByb3RhdGUoJHt2LnJvdGF0aW9ufHwwfSlgfW8oaCwiZ2V0VGV4dFRyYW5zZm9ybWF0aW9uIiksWS5kZWJ1ZyhgUmVuZGVyaW5nIHh5Y2hhcnQgY2hhcnQKYCt0KTtsZXQgZj1PYShlKSxkPWYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtYWluIikscD1kLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIixzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKTtacihmLHMuaGVpZ2h0LHMud2lkdGgsITApLGYuYXR0cigidmlld0JveCIsYDAgMCAke3Mud2lkdGh9ICR7cy5oZWlnaHR9YCkscC5hdHRyKCJmaWxsIixhLmJhY2tncm91bmRDb2xvciksaS5zZXRUbXBTVkdHKGYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtZXJtYWlkLXRtcC1ncm91cCIpKTtsZXQgbT1pLmdldERyYXdhYmxlRWxlbSgpLGc9e307ZnVuY3Rpb24geSh2KXtsZXQgeD1kLGI9IiI7Zm9yKGxldFt3XW9mIHYuZW50cmllcygpKXtsZXQgXz1kO3c+MCYmZ1tiXSYmKF89Z1tiXSksYis9dlt3XSx4PWdbYl0seHx8KHg9Z1tiXT1fLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2W3ddKSl9cmV0dXJuIHh9byh5LCJnZXRHcm91cCIpO2ZvcihsZXQgdiBvZiBtKXtpZih2LmRhdGEubGVuZ3RoPT09MCljb250aW51ZTtsZXQgeD15KHYuZ3JvdXBUZXh0cyk7c3dpdGNoKHYudHlwZSl7Y2FzZSJyZWN0Ijp4LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodi5kYXRhKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGI9PmIueCkuYXR0cigieSIsYj0+Yi55KS5hdHRyKCJ3aWR0aCIsYj0+Yi53aWR0aCkuYXR0cigiaGVpZ2h0IixiPT5iLmhlaWdodCkuYXR0cigiZmlsbCIsYj0+Yi5maWxsKS5hdHRyKCJzdHJva2UiLGI9PmIuc3Ryb2tlRmlsbCkuYXR0cigic3Ryb2tlLXdpZHRoIixiPT5iLnN0cm9rZVdpZHRoKTticmVhaztjYXNlInRleHQiOnguc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YSh2LmRhdGEpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsYj0+Yi5maWxsKS5hdHRyKCJmb250LXNpemUiLGI9PmIuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixiPT5sKGIudmVydGljYWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsYj0+dShiLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLGI9PmgoYikpLnRleHQoYj0+Yi50ZXh0KTticmVhaztjYXNlInBhdGgiOnguc2VsZWN0QWxsKCJwYXRoIikuZGF0YSh2LmRhdGEpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYj0+Yi5wYXRoKS5hdHRyKCJmaWxsIixiPT5iLmZpbGw/Yi5maWxsOiJub25lIikuYXR0cigic3Ryb2tlIixiPT5iLnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsYj0+Yi5zdHJva2VXaWR0aCk7YnJlYWt9fX0sImRyYXciKSxiZmU9e2RyYXc6aFVlfX0pO3ZhciBUZmU9e307dnIoVGZlLHtkaWFncmFtOigpPT5mVWV9KTt2YXIgZlVlLGtmZT1NKCgpPT57InVzZSBzdHJpY3QiO0poZSgpO3hmZSgpO3dmZSgpO2ZVZT17cGFyc2VyOlpoZSxkYjp2ZmUscmVuZGVyZXI6YmZlfX0pO3ZhciBnTyxDZmUsQWZlPU0oKCk9PnsidXNlIHN0cmljdCI7Z089ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKGllLFEsZWUsSil7Zm9yKGVlPWVlfHx7fSxKPWllLmxlbmd0aDtKLS07ZWVbaWVbSl1dPVEpO3JldHVybiBlZX0sIm8iKSxlPVsxLDNdLHI9WzEsNF0sbj1bMSw1XSxpPVsxLDZdLGE9WzUsNiw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNjIsNjNdLHM9WzEsMThdLGw9WzIsN10sdT1bMSwyMl0saD1bMSwyM10sZj1bMSwyNF0sZD1bMSwyNV0scD1bMSwyNl0sbT1bMSwyN10sZz1bMSwyMF0seT1bMSwyOF0sdj1bMSwyOV0seD1bNjIsNjNdLGI9WzUsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDUxLDUzLDYyLDYzXSx3PVsxLDQ3XSxfPVsxLDQ4XSxUPVsxLDQ5XSxFPVsxLDUwXSxMPVsxLDUxXSxDPVsxLDUyXSxBPVsxLDUzXSxJPVs1Myw1NF0sRD1bMSw2NF0saz1bMSw2MF0sUj1bMSw2MV0sUz1bMSw2Ml0sTz1bMSw2M10sTj1bMSw2NV0sUD1bMSw2OV0sRj1bMSw3MF0sQj1bMSw2N10sJD1bMSw2OF0sej1bNSw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNjIsNjNdLFc9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsTkVXTElORTo1LFJEOjYsZGlhZ3JhbTo3LEVPRjo4LGFjY190aXRsZTo5LGFjY190aXRsZV92YWx1ZToxMCxhY2NfZGVzY3I6MTEsYWNjX2Rlc2NyX3ZhbHVlOjEyLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTMscmVxdWlyZW1lbnREZWY6MTQsZWxlbWVudERlZjoxNSxyZWxhdGlvbnNoaXBEZWY6MTYscmVxdWlyZW1lbnRUeXBlOjE3LHJlcXVpcmVtZW50TmFtZToxOCxTVFJVQ1RfU1RBUlQ6MTkscmVxdWlyZW1lbnRCb2R5OjIwLElEOjIxLENPTE9OU0VQOjIyLGlkOjIzLFRFWFQ6MjQsdGV4dDoyNSxSSVNLOjI2LHJpc2tMZXZlbDoyNyxWRVJJRllNVEhEOjI4LHZlcmlmeVR5cGU6MjksU1RSVUNUX1NUT1A6MzAsUkVRVUlSRU1FTlQ6MzEsRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDozMixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6MzMsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6MzQsUEhZU0lDQUxfUkVRVUlSRU1FTlQ6MzUsREVTSUdOX0NPTlNUUkFJTlQ6MzYsTE9XX1JJU0s6MzcsTUVEX1JJU0s6MzgsSElHSF9SSVNLOjM5LFZFUklGWV9BTkFMWVNJUzo0MCxWRVJJRllfREVNT05TVFJBVElPTjo0MSxWRVJJRllfSU5TUEVDVElPTjo0MixWRVJJRllfVEVTVDo0MyxFTEVNRU5UOjQ0LGVsZW1lbnROYW1lOjQ1LGVsZW1lbnRCb2R5OjQ2LFRZUEU6NDcsdHlwZTo0OCxET0NSRUY6NDkscmVmOjUwLEVORF9BUlJPV19MOjUxLHJlbGF0aW9uc2hpcDo1MixMSU5FOjUzLEVORF9BUlJPV19SOjU0LENPTlRBSU5TOjU1LENPUElFUzo1NixERVJJVkVTOjU3LFNBVElTRklFUzo1OCxWRVJJRklFUzo1OSxSRUZJTkVTOjYwLFRSQUNFUzo2MSx1bnFTdHJpbmc6NjIscVN0cmluZzo2MywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiTkVXTElORSIsNjoiUkQiLDg6IkVPRiIsOToiYWNjX3RpdGxlIiwxMDoiYWNjX3RpdGxlX3ZhbHVlIiwxMToiYWNjX2Rlc2NyIiwxMjoiYWNjX2Rlc2NyX3ZhbHVlIiwxMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTk6IlNUUlVDVF9TVEFSVCIsMjE6IklEIiwyMjoiQ09MT05TRVAiLDI0OiJURVhUIiwyNjoiUklTSyIsMjg6IlZFUklGWU1USEQiLDMwOiJTVFJVQ1RfU1RPUCIsMzE6IlJFUVVJUkVNRU5UIiwzMjoiRlVOQ1RJT05BTF9SRVFVSVJFTUVOVCIsMzM6IklOVEVSRkFDRV9SRVFVSVJFTUVOVCIsMzQ6IlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UIiwzNToiUEhZU0lDQUxfUkVRVUlSRU1FTlQiLDM2OiJERVNJR05fQ09OU1RSQUlOVCIsMzc6IkxPV19SSVNLIiwzODoiTUVEX1JJU0siLDM5OiJISUdIX1JJU0siLDQwOiJWRVJJRllfQU5BTFlTSVMiLDQxOiJWRVJJRllfREVNT05TVFJBVElPTiIsNDI6IlZFUklGWV9JTlNQRUNUSU9OIiw0MzoiVkVSSUZZX1RFU1QiLDQ0OiJFTEVNRU5UIiw0NzoiVFlQRSIsNDk6IkRPQ1JFRiIsNTE6IkVORF9BUlJPV19MIiw1MzoiTElORSIsNTQ6IkVORF9BUlJPV19SIiw1NToiQ09OVEFJTlMiLDU2OiJDT1BJRVMiLDU3OiJERVJJVkVTIiw1ODoiU0FUSVNGSUVTIiw1OToiVkVSSUZJRVMiLDYwOiJSRUZJTkVTIiw2MToiVFJBQ0VTIiw2MjoidW5xU3RyaW5nIiw2MzoicVN0cmluZyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbMyw0XSxbNCwyXSxbNCwyXSxbNCwxXSxbNywwXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbMTQsNV0sWzIwLDVdLFsyMCw1XSxbMjAsNV0sWzIwLDVdLFsyMCwyXSxbMjAsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsxNSw1XSxbNDYsNV0sWzQ2LDVdLFs0NiwyXSxbNDYsMV0sWzE2LDVdLFsxNiw1XSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzE4LDFdLFsxOCwxXSxbMjMsMV0sWzIzLDFdLFsyNSwxXSxbMjUsMV0sWzQ1LDFdLFs0NSwxXSxbNDgsMV0sWzQ4LDFdLFs1MCwxXSxbNTAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihRLGVlLEosSCxxLFosYWUpe3ZhciB1ZT1aLmxlbmd0aC0xO3N3aXRjaChxKXtjYXNlIDQ6dGhpcy4kPVpbdWVdLnRyaW0oKSxILnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9Wlt1ZV0udHJpbSgpLEguc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTM6SC5hZGRSZXF1aXJlbWVudChaW3VlLTNdLFpbdWUtNF0pO2JyZWFrO2Nhc2UgMTQ6SC5zZXROZXdSZXFJZChaW3VlLTJdKTticmVhaztjYXNlIDE1Okguc2V0TmV3UmVxVGV4dChaW3VlLTJdKTticmVhaztjYXNlIDE2Okguc2V0TmV3UmVxUmlzayhaW3VlLTJdKTticmVhaztjYXNlIDE3Okguc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKFpbdWUtMl0pO2JyZWFrO2Nhc2UgMjA6dGhpcy4kPUguUmVxdWlyZW1lbnRUeXBlLlJFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPUguUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9SC5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPUguUmVxdWlyZW1lbnRUeXBlLlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPUguUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUguUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPUguUmlza0xldmVsLkxPV19SSVNLO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPUguUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPUguUmlza0xldmVsLkhJR0hfUklTSzticmVhaztjYXNlIDI5OnRoaXMuJD1ILlZlcmlmeVR5cGUuVkVSSUZZX0FOQUxZU0lTO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPUguVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDMxOnRoaXMuJD1ILlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9SC5WZXJpZnlUeXBlLlZFUklGWV9URVNUO2JyZWFrO2Nhc2UgMzM6SC5hZGRFbGVtZW50KFpbdWUtM10pO2JyZWFrO2Nhc2UgMzQ6SC5zZXROZXdFbGVtZW50VHlwZShaW3VlLTJdKTticmVhaztjYXNlIDM1Okguc2V0TmV3RWxlbWVudERvY1JlZihaW3VlLTJdKTticmVhaztjYXNlIDM4OkguYWRkUmVsYXRpb25zaGlwKFpbdWUtMl0sWlt1ZV0sWlt1ZS00XSk7YnJlYWs7Y2FzZSAzOTpILmFkZFJlbGF0aW9uc2hpcChaW3VlLTJdLFpbdWUtNF0sWlt1ZV0pO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPUguUmVsYXRpb25zaGlwcy5DT05UQUlOUzticmVhaztjYXNlIDQxOnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPUguUmVsYXRpb25zaGlwcy5ERVJJVkVTO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPUguUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9SC5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPUguUmVsYXRpb25zaGlwcy5SRUZJTkVTO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPUguUmVsYXRpb25zaGlwcy5UUkFDRVM7YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDY6ZSw5OnIsMTE6biwxMzppfSx7MTpbM119LHszOjgsNDoyLDU6WzEsN10sNjplLDk6ciwxMTpuLDEzOml9LHs1OlsxLDldfSx7MTA6WzEsMTBdfSx7MTI6WzEsMTFdfSx0KGEsWzIsNl0pLHszOjEyLDQ6Miw2OmUsOTpyLDExOm4sMTM6aX0sezE6WzIsMl19LHs0OjE3LDU6cyw3OjEzLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOnUsMzI6aCwzMzpmLDM0OmQsMzU6cCwzNjptLDQ0OmcsNjI6eSw2Mzp2fSx0KGEsWzIsNF0pLHQoYSxbMiw1XSksezE6WzIsMV19LHs4OlsxLDMwXX0sezQ6MTcsNTpzLDc6MzEsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6dSwzMjpoLDMzOmYsMzQ6ZCwzNTpwLDM2Om0sNDQ6Zyw2Mjp5LDYzOnZ9LHs0OjE3LDU6cyw3OjMyLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOnUsMzI6aCwzMzpmLDM0OmQsMzU6cCwzNjptLDQ0OmcsNjI6eSw2Mzp2fSx7NDoxNyw1OnMsNzozMyw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTp1LDMyOmgsMzM6ZiwzNDpkLDM1OnAsMzY6bSw0NDpnLDYyOnksNjM6dn0sezQ6MTcsNTpzLDc6MzQsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6dSwzMjpoLDMzOmYsMzQ6ZCwzNTpwLDM2Om0sNDQ6Zyw2Mjp5LDYzOnZ9LHs0OjE3LDU6cyw3OjM1LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOnUsMzI6aCwzMzpmLDM0OmQsMzU6cCwzNjptLDQ0OmcsNjI6eSw2Mzp2fSx7MTg6MzYsNjI6WzEsMzddLDYzOlsxLDM4XX0sezQ1OjM5LDYyOlsxLDQwXSw2MzpbMSw0MV19LHs1MTpbMSw0Ml0sNTM6WzEsNDNdfSx0KHgsWzIsMjBdKSx0KHgsWzIsMjFdKSx0KHgsWzIsMjJdKSx0KHgsWzIsMjNdKSx0KHgsWzIsMjRdKSx0KHgsWzIsMjVdKSx0KGIsWzIsNDldKSx0KGIsWzIsNTBdKSx7MTpbMiwzXX0sezg6WzIsOF19LHs4OlsyLDldfSx7ODpbMiwxMF19LHs4OlsyLDExXX0sezg6WzIsMTJdfSx7MTk6WzEsNDRdfSx7MTk6WzIsNDddfSx7MTk6WzIsNDhdfSx7MTk6WzEsNDVdfSx7MTk6WzIsNTNdfSx7MTk6WzIsNTRdfSx7NTI6NDYsNTU6dyw1NjpfLDU3OlQsNTg6RSw1OTpMLDYwOkMsNjE6QX0sezUyOjU0LDU1OncsNTY6Xyw1NzpULDU4OkUsNTk6TCw2MDpDLDYxOkF9LHs1OlsxLDU1XX0sezU6WzEsNTZdfSx7NTM6WzEsNTddfSx0KEksWzIsNDBdKSx0KEksWzIsNDFdKSx0KEksWzIsNDJdKSx0KEksWzIsNDNdKSx0KEksWzIsNDRdKSx0KEksWzIsNDVdKSx0KEksWzIsNDZdKSx7NTQ6WzEsNThdfSx7NTpELDIwOjU5LDIxOmssMjQ6UiwyNjpTLDI4Ok8sMzA6Tn0sezU6UCwzMDpGLDQ2OjY2LDQ3OkIsNDk6JH0sezIzOjcxLDYyOnksNjM6dn0sezIzOjcyLDYyOnksNjM6dn0sdCh6LFsyLDEzXSksezIyOlsxLDczXX0sezIyOlsxLDc0XX0sezIyOlsxLDc1XX0sezIyOlsxLDc2XX0sezU6RCwyMDo3NywyMTprLDI0OlIsMjY6UywyODpPLDMwOk59LHQoeixbMiwxOV0pLHQoeixbMiwzM10pLHsyMjpbMSw3OF19LHsyMjpbMSw3OV19LHs1OlAsMzA6Riw0Njo4MCw0NzpCLDQ5OiR9LHQoeixbMiwzN10pLHQoeixbMiwzOF0pLHQoeixbMiwzOV0pLHsyMzo4MSw2Mjp5LDYzOnZ9LHsyNTo4Miw2MjpbMSw4M10sNjM6WzEsODRdfSx7Mjc6ODUsMzc6WzEsODZdLDM4OlsxLDg3XSwzOTpbMSw4OF19LHsyOTo4OSw0MDpbMSw5MF0sNDE6WzEsOTFdLDQyOlsxLDkyXSw0MzpbMSw5M119LHQoeixbMiwxOF0pLHs0ODo5NCw2MjpbMSw5NV0sNjM6WzEsOTZdfSx7NTA6OTcsNjI6WzEsOThdLDYzOlsxLDk5XX0sdCh6LFsyLDM2XSksezU6WzEsMTAwXX0sezU6WzEsMTAxXX0sezU6WzIsNTFdfSx7NTpbMiw1Ml19LHs1OlsxLDEwMl19LHs1OlsyLDI2XX0sezU6WzIsMjddfSx7NTpbMiwyOF19LHs1OlsxLDEwM119LHs1OlsyLDI5XX0sezU6WzIsMzBdfSx7NTpbMiwzMV19LHs1OlsyLDMyXX0sezU6WzEsMTA0XX0sezU6WzIsNTVdfSx7NTpbMiw1Nl19LHs1OlsxLDEwNV19LHs1OlsyLDU3XX0sezU6WzIsNThdfSx7NTpELDIwOjEwNiwyMTprLDI0OlIsMjY6UywyODpPLDMwOk59LHs1OkQsMjA6MTA3LDIxOmssMjQ6UiwyNjpTLDI4Ok8sMzA6Tn0sezU6RCwyMDoxMDgsMjE6aywyNDpSLDI2OlMsMjg6TywzMDpOfSx7NTpELDIwOjEwOSwyMTprLDI0OlIsMjY6UywyODpPLDMwOk59LHs1OlAsMzA6Riw0NjoxMTAsNDc6Qiw0OTokfSx7NTpQLDMwOkYsNDY6MTExLDQ3OkIsNDk6JH0sdCh6LFsyLDE0XSksdCh6LFsyLDE1XSksdCh6LFsyLDE2XSksdCh6LFsyLDE3XSksdCh6LFsyLDM0XSksdCh6LFsyLDM1XSldLGRlZmF1bHRBY3Rpb25zOns4OlsyLDJdLDEyOlsyLDFdLDMwOlsyLDNdLDMxOlsyLDhdLDMyOlsyLDldLDMzOlsyLDEwXSwzNDpbMiwxMV0sMzU6WzIsMTJdLDM3OlsyLDQ3XSwzODpbMiw0OF0sNDA6WzIsNTNdLDQxOlsyLDU0XSw4MzpbMiw1MV0sODQ6WzIsNTJdLDg2OlsyLDI2XSw4NzpbMiwyN10sODg6WzIsMjhdLDkwOlsyLDI5XSw5MTpbMiwzMF0sOTI6WzIsMzFdLDkzOlsyLDMyXSw5NTpbMiw1NV0sOTY6WzIsNTZdLDk4OlsyLDU3XSw5OTpbMiw1OF19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihRLGVlKXtpZihlZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFEpO2Vsc2V7dmFyIEo9bmV3IEVycm9yKFEpO3Rocm93IEouaGFzaD1lZSxKfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKFEpe3ZhciBlZT10aGlzLEo9WzBdLEg9W10scT1bbnVsbF0sWj1bXSxhZT10aGlzLnRhYmxlLHVlPSIiLGNlPTAsdGU9MCxEZT0wLG9lPTIsa2U9MSxGZT1aLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEJlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVmU9e3l5Ont9fTtmb3IodmFyIEdlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksR2UpJiYoVmUueXlbR2VdPXRoaXMueXlbR2VdKTtCZS5zZXRJbnB1dChRLFZlLnl5KSxWZS55eS5sZXhlcj1CZSxWZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQmUueXlsbG9jPiJ1IiYmKEJlLnl5bGxvYz17fSk7dmFyIEhlPUJlLnl5bGxvYztaLnB1c2goSGUpO3ZhciB4ZT1CZS5vcHRpb25zJiZCZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgVmUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9VmUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gWChXZSl7Si5sZW5ndGg9Si5sZW5ndGgtMipXZSxxLmxlbmd0aD1xLmxlbmd0aC1XZSxaLmxlbmd0aD1aLmxlbmd0aC1XZX1vKFgsInBvcFN0YWNrIik7ZnVuY3Rpb24gZmUoKXt2YXIgV2U7cmV0dXJuIFdlPUgucG9wKCl8fEJlLmxleCgpfHxrZSx0eXBlb2YgV2UhPSJudW1iZXIiJiYoV2UgaW5zdGFuY2VvZiBBcnJheSYmKEg9V2UsV2U9SC5wb3AoKSksV2U9ZWUuc3ltYm9sc19bV2VdfHxXZSksV2V9byhmZSwibGV4Iik7Zm9yKHZhciBoZSxnZSxuZSx5ZSxVLFRlLHNlPXt9LEVlLEFlLFBlLE1lOzspe2lmKG5lPUpbSi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tuZV0/eWU9dGhpcy5kZWZhdWx0QWN0aW9uc1tuZV06KChoZT09PW51bGx8fHR5cGVvZiBoZT4idSIpJiYoaGU9ZmUoKSkseWU9YWVbbmVdJiZhZVtuZV1baGVdKSx0eXBlb2YgeWU+InUifHwheWUubGVuZ3RofHwheWVbMF0pe3ZhciBtZT0iIjtNZT1bXTtmb3IoRWUgaW4gYWVbbmVdKXRoaXMudGVybWluYWxzX1tFZV0mJkVlPm9lJiZNZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRWVdKyInIik7QmUuc2hvd1Bvc2l0aW9uP21lPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGNlKzEpK2A6CmArQmUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtNZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2hlXXx8aGUpKyInIjptZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjZSsxKSsiOiBVbmV4cGVjdGVkICIrKGhlPT1rZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1toZV18fGhlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihtZSx7dGV4dDpCZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19baGVdfHxoZSxsaW5lOkJlLnl5bGluZW5vLGxvYzpIZSxleHBlY3RlZDpNZX0pfWlmKHllWzBdaW5zdGFuY2VvZiBBcnJheSYmeWUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIituZSsiLCB0b2tlbjogIitoZSk7c3dpdGNoKHllWzBdKXtjYXNlIDE6Si5wdXNoKGhlKSxxLnB1c2goQmUueXl0ZXh0KSxaLnB1c2goQmUueXlsbG9jKSxKLnB1c2goeWVbMV0pLGhlPW51bGwsZ2U/KGhlPWdlLGdlPW51bGwpOih0ZT1CZS55eWxlbmcsdWU9QmUueXl0ZXh0LGNlPUJlLnl5bGluZW5vLEhlPUJlLnl5bGxvYyxEZT4wJiZEZS0tKTticmVhaztjYXNlIDI6aWYoQWU9dGhpcy5wcm9kdWN0aW9uc19beWVbMV1dWzFdLHNlLiQ9cVtxLmxlbmd0aC1BZV0sc2UuXyQ9e2ZpcnN0X2xpbmU6WltaLmxlbmd0aC0oQWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpaW1oubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WltaLmxlbmd0aC0oQWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WltaLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0seGUmJihzZS5fJC5yYW5nZT1bWltaLmxlbmd0aC0oQWV8fDEpXS5yYW5nZVswXSxaW1oubGVuZ3RoLTFdLnJhbmdlWzFdXSksVGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHNlLFt1ZSx0ZSxjZSxWZS55eSx5ZVsxXSxxLFpdLmNvbmNhdChGZSkpLHR5cGVvZiBUZTwidSIpcmV0dXJuIFRlO0FlJiYoSj1KLnNsaWNlKDAsLTEqQWUqMikscT1xLnNsaWNlKDAsLTEqQWUpLFo9Wi5zbGljZSgwLC0xKkFlKSksSi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3llWzFdXVswXSkscS5wdXNoKHNlLiQpLFoucHVzaChzZS5fJCksUGU9YWVbSltKLmxlbmd0aC0yXV1bSltKLmxlbmd0aC0xXV0sSi5wdXNoKFBlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0saj1mdW5jdGlvbigpe3ZhciBpZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGVlLEope2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoZWUsSik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZWUpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oUSxlZSl7cmV0dXJuIHRoaXMueXk9ZWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVEsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgUT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9USx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9USx0aGlzLm1hdGNoZWQrPVE7dmFyIGVlPVEubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBlZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihRKXt2YXIgZWU9US5sZW5ndGgsSj1RLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9USt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZWUpLHRoaXMub2Zmc2V0LT1lZTt2YXIgSD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxKLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Si5sZW5ndGgtMSk7dmFyIHE9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOko/KEoubGVuZ3RoPT09SC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0hbSC5sZW5ndGgtSi5sZW5ndGhdLmxlbmd0aC1KWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcVswXSxxWzBdK3RoaXMueXlsZW5nLWVlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oUSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFEpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBRPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oUS5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Euc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgUT10aGlzLm1hdGNoO3JldHVybiBRLmxlbmd0aDwyMCYmKFErPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVEubGVuZ3RoKSksKFEuc3Vic3RyKDAsMjApKyhRLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFE9dGhpcy5wYXN0SW5wdXQoKSxlZT1uZXcgQXJyYXkoUS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBRK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtlZSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oUSxlZSl7dmFyIEosSCxxO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihxPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHEueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksSD1RWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxIJiYodGhpcy55eWxpbmVubys9SC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpIP0hbSC5sZW5ndGgtMV0ubGVuZ3RoLUhbSC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitRWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVFbMF0sdGhpcy5tYXRjaCs9UVswXSx0aGlzLm1hdGNoZXM9USx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShRWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1RWzBdLEo9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksSilyZXR1cm4gSjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWiBpbiBxKXRoaXNbWl09cVtaXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUSxlZSxKLEg7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgcT10aGlzLl9jdXJyZW50UnVsZXMoKSxaPTA7WjxxLmxlbmd0aDtaKyspaWYoSj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3FbWl1dKSxKJiYoIWVlfHxKWzBdLmxlbmd0aD5lZVswXS5sZW5ndGgpKXtpZihlZT1KLEg9Wix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihRPXRoaXMudGVzdF9tYXRjaChKLHFbWl0pLFEhPT0hMSlyZXR1cm4gUTtpZih0aGlzLl9iYWNrdHJhY2spe2VlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGVlPyhRPXRoaXMudGVzdF9tYXRjaChlZSxxW0hdKSxRIT09ITE/UTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBlZT10aGlzLm5leHQoKTtyZXR1cm4gZWV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKGVlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZWUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGVlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGVlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oZWUpe3JldHVybiBlZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGVlfHwwKSxlZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW2VlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKGVlKXt0aGlzLmJlZ2luKGVlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGVlLEosSCxxKXt2YXIgWj1xO3N3aXRjaChIKXtjYXNlIDA6cmV0dXJuInRpdGxlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDk7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxMTticmVhaztjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIDU7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEyOnJldHVybiA4O2Nhc2UgMTM6cmV0dXJuIDY7Y2FzZSAxNDpyZXR1cm4gMTk7Y2FzZSAxNTpyZXR1cm4gMzA7Y2FzZSAxNjpyZXR1cm4gMjI7Y2FzZSAxNzpyZXR1cm4gMjE7Y2FzZSAxODpyZXR1cm4gMjQ7Y2FzZSAxOTpyZXR1cm4gMjY7Y2FzZSAyMDpyZXR1cm4gMjg7Y2FzZSAyMTpyZXR1cm4gMzE7Y2FzZSAyMjpyZXR1cm4gMzI7Y2FzZSAyMzpyZXR1cm4gMzM7Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyNTpyZXR1cm4gMzU7Y2FzZSAyNjpyZXR1cm4gMzY7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpyZXR1cm4gMzk7Y2FzZSAzMDpyZXR1cm4gNDA7Y2FzZSAzMTpyZXR1cm4gNDE7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDM7Y2FzZSAzNDpyZXR1cm4gNDQ7Y2FzZSAzNTpyZXR1cm4gNTU7Y2FzZSAzNjpyZXR1cm4gNTY7Y2FzZSAzNzpyZXR1cm4gNTc7Y2FzZSAzODpyZXR1cm4gNTg7Y2FzZSAzOTpyZXR1cm4gNTk7Y2FzZSA0MDpyZXR1cm4gNjA7Y2FzZSA0MTpyZXR1cm4gNjE7Y2FzZSA0MjpyZXR1cm4gNDc7Y2FzZSA0MzpyZXR1cm4gNDk7Y2FzZSA0NDpyZXR1cm4gNTE7Y2FzZSA0NTpyZXR1cm4gNTQ7Y2FzZSA0NjpyZXR1cm4gNTM7Y2FzZSA0Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ5OnJldHVybiJxU3RyaW5nIjtjYXNlIDUwOnJldHVybiBKLnl5dGV4dD1KLnl5dGV4dC50cmltKCksNjI7YnJlYWt9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86JCkvaSwvXig/OnJlcXVpcmVtZW50RGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/OjopL2ksL14oPzppZFxiKS9pLC9eKD86dGV4dFxiKS9pLC9eKD86cmlza1xiKS9pLC9eKD86dmVyaWZ5TWV0aG9kXGIpL2ksL14oPzpyZXF1aXJlbWVudFxiKS9pLC9eKD86ZnVuY3Rpb25hbFJlcXVpcmVtZW50XGIpL2ksL14oPzppbnRlcmZhY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGVyZm9ybWFuY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGh5c2ljYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86ZGVzaWduQ29uc3RyYWludFxiKS9pLC9eKD86bG93XGIpL2ksL14oPzptZWRpdW1cYikvaSwvXig/OmhpZ2hcYikvaSwvXig/OmFuYWx5c2lzXGIpL2ksL14oPzpkZW1vbnN0cmF0aW9uXGIpL2ksL14oPzppbnNwZWN0aW9uXGIpL2ksL14oPzp0ZXN0XGIpL2ksL14oPzplbGVtZW50XGIpL2ksL14oPzpjb250YWluc1xiKS9pLC9eKD86Y29waWVzXGIpL2ksL14oPzpkZXJpdmVzXGIpL2ksL14oPzpzYXRpc2ZpZXNcYikvaSwvXig/OnZlcmlmaWVzXGIpL2ksL14oPzpyZWZpbmVzXGIpL2ksL14oPzp0cmFjZXNcYikvaSwvXig/OnR5cGVcYikvaSwvXig/OmRvY3JlZlxiKS9pLC9eKD86PC0pL2ksL14oPzotPikvaSwvXig/Oi0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Oltcd11bXlxyXG5ce1w8XD5cLVw9XSopL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsyXSxpbmNsdXNpdmU6ITF9LHVucVN0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSx0b2tlbjp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls0OCw0OV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNSw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNTBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gaWV9KCk7Vy5sZXhlcj1qO2Z1bmN0aW9uIEsoKXt0aGlzLnl5PXt9fXJldHVybiBvKEssIlBhcnNlciIpLEsucHJvdG90eXBlPVcsVy5QYXJzZXI9SyxuZXcgS30oKTtnTy5wYXJzZXI9Z087Q2ZlPWdPfSk7dmFyIHlPLEZzLHl4LGRmLHZ4LGdVZSx5VWUsdlVlLHhVZSxiVWUsd1VlLFRVZSxrVWUsRVVlLFNVZSxDVWUsQVVlLF9VZSxMVWUsRFVlLE5VZSxSVWUsX2ZlLExmZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7aHQoKTtraSgpO3lPPVtdLEZzPXt9LHl4PW5ldyBNYXAsZGY9e30sdng9bmV3IE1hcCxnVWU9e1JFUVVJUkVNRU5UOiJSZXF1aXJlbWVudCIsRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDoiRnVuY3Rpb25hbCBSZXF1aXJlbWVudCIsSU5URVJGQUNFX1JFUVVJUkVNRU5UOiJJbnRlcmZhY2UgUmVxdWlyZW1lbnQiLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOiJQZXJmb3JtYW5jZSBSZXF1aXJlbWVudCIsUEhZU0lDQUxfUkVRVUlSRU1FTlQ6IlBoeXNpY2FsIFJlcXVpcmVtZW50IixERVNJR05fQ09OU1RSQUlOVDoiRGVzaWduIENvbnN0cmFpbnQifSx5VWU9e0xPV19SSVNLOiJMb3ciLE1FRF9SSVNLOiJNZWRpdW0iLEhJR0hfUklTSzoiSGlnaCJ9LHZVZT17VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9LHhVZT17Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxiVWU9bygodCxlKT0+KHl4Lmhhcyh0KXx8eXguc2V0KHQse25hbWU6dCx0eXBlOmUsaWQ6RnMuaWQsdGV4dDpGcy50ZXh0LHJpc2s6RnMucmlzayx2ZXJpZnlNZXRob2Q6RnMudmVyaWZ5TWV0aG9kfSksRnM9e30seXguZ2V0KHQpKSwiYWRkUmVxdWlyZW1lbnQiKSx3VWU9bygoKT0+eXgsImdldFJlcXVpcmVtZW50cyIpLFRVZT1vKHQ9PntGcyE9PXZvaWQgMCYmKEZzLmlkPXQpfSwic2V0TmV3UmVxSWQiKSxrVWU9byh0PT57RnMhPT12b2lkIDAmJihGcy50ZXh0PXQpfSwic2V0TmV3UmVxVGV4dCIpLEVVZT1vKHQ9PntGcyE9PXZvaWQgMCYmKEZzLnJpc2s9dCl9LCJzZXROZXdSZXFSaXNrIiksU1VlPW8odD0+e0ZzIT09dm9pZCAwJiYoRnMudmVyaWZ5TWV0aG9kPXQpfSwic2V0TmV3UmVxVmVyaWZ5TWV0aG9kIiksQ1VlPW8odD0+KHZ4Lmhhcyh0KXx8KHZ4LnNldCh0LHtuYW1lOnQsdHlwZTpkZi50eXBlLGRvY1JlZjpkZi5kb2NSZWZ9KSxZLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KSksZGY9e30sdnguZ2V0KHQpKSwiYWRkRWxlbWVudCIpLEFVZT1vKCgpPT52eCwiZ2V0RWxlbWVudHMiKSxfVWU9byh0PT57ZGYhPT12b2lkIDAmJihkZi50eXBlPXQpfSwic2V0TmV3RWxlbWVudFR5cGUiKSxMVWU9byh0PT57ZGYhPT12b2lkIDAmJihkZi5kb2NSZWY9dCl9LCJzZXROZXdFbGVtZW50RG9jUmVmIiksRFVlPW8oKHQsZSxyKT0+e3lPLnB1c2goe3R5cGU6dCxzcmM6ZSxkc3Q6cn0pfSwiYWRkUmVsYXRpb25zaGlwIiksTlVlPW8oKCk9PnlPLCJnZXRSZWxhdGlvbnNoaXBzIiksUlVlPW8oKCk9Pnt5Tz1bXSxGcz17fSx5eD1uZXcgTWFwLGRmPXt9LHZ4PW5ldyBNYXAsX3IoKX0sImNsZWFyIiksX2ZlPXtSZXF1aXJlbWVudFR5cGU6Z1VlLFJpc2tMZXZlbDp5VWUsVmVyaWZ5VHlwZTp2VWUsUmVsYXRpb25zaGlwczp4VWUsZ2V0Q29uZmlnOm8oKCk9PmRlKCkucmVxLCJnZXRDb25maWciKSxhZGRSZXF1aXJlbWVudDpiVWUsZ2V0UmVxdWlyZW1lbnRzOndVZSxzZXROZXdSZXFJZDpUVWUsc2V0TmV3UmVxVGV4dDprVWUsc2V0TmV3UmVxUmlzazpFVWUsc2V0TmV3UmVxVmVyaWZ5TWV0aG9kOlNVZSxzZXRBY2NUaXRsZTpScixnZXRBY2NUaXRsZTpQcixzZXRBY2NEZXNjcmlwdGlvbjpCcixnZXRBY2NEZXNjcmlwdGlvbjpGcixhZGRFbGVtZW50OkNVZSxnZXRFbGVtZW50czpBVWUsc2V0TmV3RWxlbWVudFR5cGU6X1VlLHNldE5ld0VsZW1lbnREb2NSZWY6TFVlLGFkZFJlbGF0aW9uc2hpcDpEVWUsZ2V0UmVsYXRpb25zaGlwczpOVWUsY2xlYXI6UlVlfX0pO3ZhciBNVWUsRGZlLE5mZT1NKCgpPT57InVzZSBzdHJpY3QiO01VZT1vKHQ9PmAKCiAgbWFya2VyIHsKICAgIGZpbGw6ICR7dC5yZWxhdGlvbkNvbG9yfTsKICAgIHN0cm9rZTogJHt0LnJlbGF0aW9uQ29sb3J9OwogIH0KCiAgbWFya2VyLmNyb3NzIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgfQoKICBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHt0LmZvbnRTaXplfTsKICB9CgogIC5yZXFCb3ggewogICAgZmlsbDogJHt0LnJlcXVpcmVtZW50QmFja2dyb3VuZH07CiAgICBmaWxsLW9wYWNpdHk6IDEuMDsKICAgIHN0cm9rZTogJHt0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke3QucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgCiAgLnJlcVRpdGxlLCAucmVxTGFiZWx7CiAgICBmaWxsOiAgJHt0LnJlcXVpcmVtZW50VGV4dENvbG9yfTsKICB9CiAgLnJlcUxhYmVsQm94IHsKICAgIGZpbGw6ICR7dC5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZH07CiAgICBmaWxsLW9wYWNpdHk6IDEuMDsKICB9CgogIC5yZXEtdGl0bGUtbGluZSB7CiAgICBzdHJva2U6ICR7dC5yZXF1aXJlbWVudEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07CiAgfQogIC5yZWxhdGlvbnNoaXBMaW5lIHsKICAgIHN0cm9rZTogJHt0LnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogIH0KICAucmVsYXRpb25zaGlwTGFiZWwgewogICAgZmlsbDogJHt0LnJlbGF0aW9uTGFiZWxDb2xvcn07CiAgfQoKYCwiZ2V0U3R5bGVzIiksRGZlPU1VZX0pO3ZhciB2TyxJVWUseE8sUmZlPU0oKCk9PnsidXNlIHN0cmljdCI7dk89e0NPTlRBSU5TOiJjb250YWlucyIsQVJST1c6ImFycm93In0sSVVlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHZPLkNPTlRBSU5TKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIm1hcmtlcldpZHRoIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGUubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImciKTtyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUubGluZV9oZWlnaHQvMikuYXR0cigiY3kiLGUubGluZV9oZWlnaHQvMikuYXR0cigiciIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJmaWxsIiwibm9uZSIpLHIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJ5MSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJ5MiIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLHIuYXBwZW5kKCJsaW5lIikuYXR0cigieTEiLDApLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJ4MSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJ4MiIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdk8uQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLGUubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KmUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGUubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMJHtlLmxpbmVfaGVpZ2h0fSwke2UubGluZV9oZWlnaHQvMn0KICAgICAgTSR7ZS5saW5lX2hlaWdodH0sJHtlLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIEwwLCR7ZS5saW5lX2hlaWdodH1gKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfSwiaW5zZXJ0TGluZUVuZGluZ3MiKSx4Tz17UmVxTWFya2Vyczp2TyxpbnNlcnRMaW5lRW5kaW5nczpJVWV9fSk7dmFyIGNpLE1mZSxJZmUsT2ZlLFBmZSxPVWUsUFVlLEJVZSxGVWUselVlLEdVZSxCZywkVWUsQmZlLEZmZT1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7UHYoKTtOcygpO1Z0KCk7aHQoKTtuaSgpO2ZyKCk7UmZlKCk7Y2k9e30sTWZlPTAsSWZlPW8oKHQsZSk9PnQuaW5zZXJ0KCJyZWN0IiwiIyIrZSkuYXR0cigiY2xhc3MiLCJyZXEgcmVxQm94IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLGNpLnJlY3RfbWluX3dpZHRoKyJweCIpLmF0dHIoImhlaWdodCIsY2kucmVjdF9taW5faGVpZ2h0KyJweCIpLCJuZXdSZWN0Tm9kZSIpLE9mZT1vKCh0LGUscik9PntsZXQgbj1jaS5yZWN0X21pbl93aWR0aC8yLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixjaS5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MDtyLmZvckVhY2goaD0+e2E9PTA/aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixjaS5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dChoKTppLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLGNpLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IixjaS5saW5lX2hlaWdodCouNzUpLnRleHQoaCksYSsrfSk7bGV0IHM9MS41KmNpLnJlY3RfcGFkZGluZyxsPWEqY2kubGluZV9oZWlnaHQqLjc1LHU9cytsO3JldHVybiB0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIsY2kucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIix1KS5hdHRyKCJ5MiIsdSkse3RpdGxlTm9kZTppLHk6dX19LCJuZXdUaXRsZU5vZGUiKSxQZmU9bygodCxlLHIsbik9PntsZXQgaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsIikuYXR0cigiaWQiLGUpLmF0dHIoIngiLGNpLnJlY3RfcGFkZGluZykuYXR0cigieSIsbikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIiksYT0wLHM9MzAsbD1bXTtyZXR1cm4gci5mb3JFYWNoKHU9PntsZXQgaD11Lmxlbmd0aDtmb3IoO2g+cyYmYTwzOyl7bGV0IGY9dS5zdWJzdHJpbmcoMCxzKTt1PXUuc3Vic3RyaW5nKHMsdS5sZW5ndGgpLGg9dS5sZW5ndGgsbFtsLmxlbmd0aF09ZixhKyt9aWYoYT09Myl7bGV0IGY9bFtsLmxlbmd0aC0xXTtsW2wubGVuZ3RoLTFdPWYuc3Vic3RyaW5nKDAsZi5sZW5ndGgtNCkrIi4uLiJ9ZWxzZSBsW2wubGVuZ3RoXT11O2E9MH0pLGwuZm9yRWFjaCh1PT57aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsY2kucmVjdF9wYWRkaW5nKS5hdHRyKCJkeSIsY2kubGluZV9oZWlnaHQpLnRleHQodSl9KSxpfSwibmV3Qm9keU5vZGUiKSxPVWU9bygodCxlLHIsbik9PntsZXQgaT1lLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLGE9ZS5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChpKi41KSxzPSJyZWwiK01mZTtNZmUrKztsZXQgdT10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLHMpLmF0dHIoIngiLGEueCkuYXR0cigieSIsYS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChuKS5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiIyIrcykuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4IixhLngtdS53aWR0aC8yKS5hdHRyKCJ5IixhLnktdS5oZWlnaHQvMikuYXR0cigid2lkdGgiLHUud2lkdGgpLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSwiYWRkRWRnZUxhYmVsIiksUFVlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtsZXQgYT1yLmVkZ2UoQmcoZS5zcmMpLEJnKGUuZHN0KSkscz1LYSgpLngoZnVuY3Rpb24odSl7cmV0dXJuIHUueH0pLnkoZnVuY3Rpb24odSl7cmV0dXJuIHUueX0pLGw9dC5pbnNlcnQoInBhdGgiLCIjIituKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixzKGEucG9pbnRzKSkuYXR0cigiZmlsbCIsIm5vbmUiKTtlLnR5cGU9PWkuZGIuUmVsYXRpb25zaGlwcy5DT05UQUlOUz9sLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2plLmdldFVybChjaS5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrZS50eXBlKyJfbGluZV9lbmRpbmcpIik6KGwuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjEwLDciKSxsLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitqZS5nZXRVcmwoY2kuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK3hPLlJlcU1hcmtlcnMuQVJST1crIl9saW5lX2VuZGluZykiKSksT1VlKHQsbCxjaSxgPDwke2UudHlwZX0+PmApfSwiZHJhd1JlbGF0aW9uc2hpcEZyb21MYXlvdXQiKSxCVWU9bygodCxlLHIpPT57dC5mb3JFYWNoKChuLGkpPT57aT1CZyhpKSxZLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIixpKTtsZXQgYT1yLmFwcGVuZCgiZyIpLmF0dHIoImlkIixpKSxzPSJyZXEtIitpLGw9SWZlKGEscyksdT1bXSxoPU9mZShhLGkrIl90aXRsZSIsW2A8PCR7bi50eXBlfT4+YCxgJHtuLm5hbWV9YF0pO3UucHVzaChoLnRpdGxlTm9kZSk7bGV0IGY9UGZlKGEsaSsiX2JvZHkiLFtgSWQ6ICR7bi5pZH1gLGBUZXh0OiAke24udGV4dH1gLGBSaXNrOiAke24ucmlza31gLGBWZXJpZmljYXRpb246ICR7bi52ZXJpZnlNZXRob2R9YF0saC55KTt1LnB1c2goZik7bGV0IGQ9bC5ub2RlKCkuZ2V0QkJveCgpO2Uuc2V0Tm9kZShpLHt3aWR0aDpkLndpZHRoLGhlaWdodDpkLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6aX0pfSl9LCJkcmF3UmVxcyIpLEZVZT1vKCh0LGUscik9Pnt0LmZvckVhY2goKG4saSk9PntsZXQgYT1CZyhpKSxzPXIuYXBwZW5kKCJnIikuYXR0cigiaWQiLGEpLGw9ImVsZW1lbnQtIithLHU9SWZlKHMsbCksaD1bXSxmPU9mZShzLGwrIl90aXRsZSIsWyI8PEVsZW1lbnQ+PiIsYCR7aX1gXSk7aC5wdXNoKGYudGl0bGVOb2RlKTtsZXQgZD1QZmUocyxsKyJfYm9keSIsW2BUeXBlOiAke24udHlwZXx8Ik5vdCBTcGVjaWZpZWQifWAsYERvYyBSZWY6ICR7bi5kb2NSZWZ8fCJOb25lIn1gXSxmLnkpO2gucHVzaChkKTtsZXQgcD11Lm5vZGUoKS5nZXRCQm94KCk7ZS5zZXROb2RlKGEse3dpZHRoOnAud2lkdGgsaGVpZ2h0OnAuaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDphfSl9KX0sImRyYXdFbGVtZW50cyIpLHpVZT1vKCh0LGUpPT4odC5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPUJnKHIuc3JjKSxpPUJnKHIuZHN0KTtlLnNldEVkZ2UobixpLHtyZWxhdGlvbnNoaXA6cn0pfSksdCksImFkZFJlbGF0aW9uc2hpcHMiKSxHVWU9byhmdW5jdGlvbih0LGUpe2Uubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPT12b2lkIDAmJmUubm9kZShyKSE9PXZvaWQgMCYmKHQuc2VsZWN0KCIjIityKSx0LnNlbGVjdCgiIyIrcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShyKS54LWUubm9kZShyKS53aWR0aC8yKSsiLCIrKGUubm9kZShyKS55LWUubm9kZShyKS5oZWlnaHQvMikrIiApIikpfSl9LCJhZGp1c3RFbnRpdGllcyIpLEJnPW8odD0+dC5yZXBsYWNlKC9ccy9nLCIiKS5yZXBsYWNlKC9cLi9nLCJfIiksImVsZW1lbnRTdHJpbmciKSwkVWU9bygodCxlLHIsbik9PntjaT1kZSgpLnJlcXVpcmVtZW50O2xldCBpPWNpLnNlY3VyaXR5TGV2ZWwsYTtpPT09InNhbmRib3giJiYoYT16ZSgiI2kiK2UpKTtsZXQgbD0oaT09PSJzYW5kYm94Ij96ZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOnplKCJib2R5IikpLnNlbGVjdChgW2lkPScke2V9J11gKTt4Ty5pbnNlcnRMaW5lRW5kaW5ncyhsLGNpKTtsZXQgdT1uZXcgTXIoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpjaS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSksaD1uLmRiLmdldFJlcXVpcmVtZW50cygpLGY9bi5kYi5nZXRFbGVtZW50cygpLGQ9bi5kYi5nZXRSZWxhdGlvbnNoaXBzKCk7QlVlKGgsdSxsKSxGVWUoZix1LGwpLHpVZShkLHUpLER1KHUpLEdVZShsLHUpLGQuZm9yRWFjaChmdW5jdGlvbih2KXtQVWUobCx2LHUsZSxuKX0pO2xldCBwPWNpLnJlY3RfcGFkZGluZyxtPWwubm9kZSgpLmdldEJCb3goKSxnPW0ud2lkdGgrcCoyLHk9bS5oZWlnaHQrcCoyO1pyKGwseSxnLGNpLnVzZU1heFdpZHRoKSxsLmF0dHIoInZpZXdCb3giLGAke20ueC1wfSAke20ueS1wfSAke2d9ICR7eX1gKX0sImRyYXciKSxCZmU9e2RyYXc6JFVlfX0pO3ZhciB6ZmU9e307dnIoemZlLHtkaWFncmFtOigpPT5WVWV9KTt2YXIgVlVlLEdmZT1NKCgpPT57InVzZSBzdHJpY3QiO0FmZSgpO0xmZSgpO05mZSgpO0ZmZSgpO1ZVZT17cGFyc2VyOkNmZSxkYjpfZmUscmVuZGVyZXI6QmZlLHN0eWxlczpEZmV9fSk7dmFyIGJPLFVmZSxIZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtiTz1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oSCxxLFosYWUpe2ZvcihaPVp8fHt9LGFlPUgubGVuZ3RoO2FlLS07WltIW2FlXV09cSk7cmV0dXJuIFp9LCJvIiksZT1bMSwyXSxyPVsxLDNdLG49WzEsNF0saT1bMiw0XSxhPVsxLDldLHM9WzEsMTFdLGw9WzEsMTNdLHU9WzEsMTRdLGg9WzEsMTZdLGY9WzEsMTddLGQ9WzEsMThdLHA9WzEsMjRdLG09WzEsMjVdLGc9WzEsMjZdLHk9WzEsMjddLHY9WzEsMjhdLHg9WzEsMjldLGI9WzEsMzBdLHc9WzEsMzFdLF89WzEsMzJdLFQ9WzEsMzNdLEU9WzEsMzRdLEw9WzEsMzVdLEM9WzEsMzZdLEE9WzEsMzddLEk9WzEsMzhdLEQ9WzEsMzldLGs9WzEsNDFdLFI9WzEsNDJdLFM9WzEsNDNdLE89WzEsNDRdLE49WzEsNDVdLFA9WzEsNDZdLEY9WzEsNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDQ3LDQ4LDQ5LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxCPVs0LDUsMTYsNTAsNTIsNTNdLCQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sej1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDQ5LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxXPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDgsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGo9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sSz1bNjgsNjksNzBdLGllPVsxLDEyMl0sUT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XOjc0LERPVFRFRF9BUlJPVzo3NSxCSURJUkVDVElPTkFMX0RPVFRFRF9BUlJPVzo3NixTT0xJRF9DUk9TUzo3NyxET1RURURfQ1JPU1M6NzgsU09MSURfUE9JTlQ6NzksRE9UVEVEX1BPSU5UOjgwLFRYVDo4MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5FV0xJTkUiLDY6IlNEIiwxMzoiY3JlYXRlIiwxNDoiYm94IiwxNToicmVzdE9mTGluZSIsMTY6ImVuZCIsMTg6ImF1dG9udW1iZXIiLDE5OiJOVU0iLDIwOiJvZmYiLDIxOiJhY3RpdmF0ZSIsMjM6ImRlYWN0aXZhdGUiLDI5OiJ0aXRsZSIsMzA6ImxlZ2FjeV90aXRsZSIsMzE6ImFjY190aXRsZSIsMzI6ImFjY190aXRsZV92YWx1ZSIsMzM6ImFjY19kZXNjciIsMzQ6ImFjY19kZXNjcl92YWx1ZSIsMzU6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM2OiJsb29wIiwzNzoicmVjdCIsMzg6Im9wdCIsMzk6ImFsdCIsNDE6InBhciIsNDM6InBhcl9vdmVyIiw0NDoiY3JpdGljYWwiLDQ2OiJicmVhayIsNDc6Im9wdGlvbiIsNDg6ImFuZCIsNDk6ImVsc2UiLDUwOiJwYXJ0aWNpcGFudCIsNTE6IkFTIiw1MjoicGFydGljaXBhbnRfYWN0b3IiLDUzOiJkZXN0cm95Iiw1NDoibm90ZSIsNTc6Im92ZXIiLDU5OiJsaW5rcyIsNjA6ImxpbmsiLDYxOiJwcm9wZXJ0aWVzIiw2MjoiZGV0YWlscyIsNjQ6IiwiLDY1OiJsZWZ0X29mIiw2NjoicmlnaHRfb2YiLDY4OiIrIiw2OToiLSIsNzA6IkFDVE9SIiw3MToiU09MSURfT1BFTl9BUlJPVyIsNzI6IkRPVFRFRF9PUEVOX0FSUk9XIiw3MzoiU09MSURfQVJST1ciLDc0OiJCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XIiw3NToiRE9UVEVEX0FSUk9XIiw3NjoiQklESVJFQ1RJT05BTF9ET1RURURfQVJST1ciLDc3OiJTT0xJRF9DUk9TUyIsNzg6IkRPVFRFRF9DUk9TUyIsNzk6IlNPTElEX1BPSU5UIiw4MDoiRE9UVEVEX1BPSU5UIiw4MToiVFhUIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFs3LDBdLFs3LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFsxMCwwXSxbMTAsMl0sWzExLDJdLFsxMSwxXSxbMTEsMV0sWzksMV0sWzksMl0sWzksNF0sWzksMl0sWzksNF0sWzksM10sWzksM10sWzksMl0sWzksM10sWzksM10sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzQ1LDFdLFs0NSw0XSxbNDIsMV0sWzQyLDRdLFs0MCwxXSxbNDAsNF0sWzEyLDVdLFsxMiwzXSxbMTIsNV0sWzEyLDNdLFsxMiwzXSxbMjQsNF0sWzI0LDRdLFsyNSwzXSxbMjYsM10sWzI3LDNdLFsyOCwzXSxbNjMsMl0sWzYzLDFdLFs1OCwzXSxbNTgsMV0sWzU1LDFdLFs1NSwxXSxbMTcsNV0sWzE3LDVdLFsxNyw0XSxbMjIsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs1NiwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHEsWixhZSx1ZSxjZSx0ZSxEZSl7dmFyIG9lPXRlLmxlbmd0aC0xO3N3aXRjaChjZSl7Y2FzZSAzOnJldHVybiB1ZS5hcHBseSh0ZVtvZV0pLHRlW29lXTticmVhaztjYXNlIDQ6Y2FzZSA5OnRoaXMuJD1bXTticmVhaztjYXNlIDU6Y2FzZSAxMDp0ZVtvZS0xXS5wdXNoKHRlW29lXSksdGhpcy4kPXRlW29lLTFdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD10ZVtvZV07YnJlYWs7Y2FzZSA4OmNhc2UgMTM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTU6dGVbb2VdLnR5cGU9ImNyZWF0ZVBhcnRpY2lwYW50Iix0aGlzLiQ9dGVbb2VdO2JyZWFrO2Nhc2UgMTY6dGVbb2UtMV0udW5zaGlmdCh7dHlwZToiYm94U3RhcnQiLGJveERhdGE6dWUucGFyc2VCb3hEYXRhKHRlW29lLTJdKX0pLHRlW29lLTFdLnB1c2goe3R5cGU6ImJveEVuZCIsYm94VGV4dDp0ZVtvZS0yXX0pLHRoaXMuJD10ZVtvZS0xXTticmVhaztjYXNlIDE4OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIodGVbb2UtMl0pLHNlcXVlbmNlSW5kZXhTdGVwOk51bWJlcih0ZVtvZS0xXSksc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKHRlW29lLTFdKSxzZXF1ZW5jZUluZGV4U3RlcDoxLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITEsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIxOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3Rvcjp0ZVtvZS0xXS5hY3Rvcn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOnRlW29lLTFdLmFjdG9yfTticmVhaztjYXNlIDI5OnVlLnNldERpYWdyYW1UaXRsZSh0ZVtvZV0uc3Vic3RyaW5nKDYpKSx0aGlzLiQ9dGVbb2VdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDMwOnVlLnNldERpYWdyYW1UaXRsZSh0ZVtvZV0uc3Vic3RyaW5nKDcpKSx0aGlzLiQ9dGVbb2VdLnN1YnN0cmluZyg3KTticmVhaztjYXNlIDMxOnRoaXMuJD10ZVtvZV0udHJpbSgpLHVlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMjpjYXNlIDMzOnRoaXMuJD10ZVtvZV0udHJpbSgpLHVlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzNDp0ZVtvZS0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtvZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5MT09QX1NUQVJUfSksdGVbb2UtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6dGVbb2UtMl0sc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD10ZVtvZS0xXTticmVhaztjYXNlIDM1OnRlW29lLTFdLnVuc2hpZnQoe3R5cGU6InJlY3RTdGFydCIsY29sb3I6dWUucGFyc2VNZXNzYWdlKHRlW29lLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSx0ZVtvZS0xXS5wdXNoKHt0eXBlOiJyZWN0RW5kIixjb2xvcjp1ZS5wYXJzZU1lc3NhZ2UodGVbb2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9dGVbb2UtMV07YnJlYWs7Y2FzZSAzNjp0ZVtvZS0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbb2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuT1BUX1NUQVJUfSksdGVbb2UtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtvZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5PUFRfRU5EfSksdGhpcy4kPXRlW29lLTFdO2JyZWFrO2Nhc2UgMzc6dGVbb2UtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW29lLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFMVF9TVEFSVH0pLHRlW29lLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPXRlW29lLTFdO2JyZWFrO2Nhc2UgMzg6dGVbb2UtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW29lLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlBBUl9TVEFSVH0pLHRlW29lLTFdLnB1c2goe3R5cGU6InBhckVuZCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPXRlW29lLTFdO2JyZWFrO2Nhc2UgMzk6dGVbb2UtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW29lLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUfSksdGVbb2UtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9dGVbb2UtMV07YnJlYWs7Y2FzZSA0MDp0ZVtvZS0xXS51bnNoaWZ0KHt0eXBlOiJjcml0aWNhbFN0YXJ0Iixjcml0aWNhbFRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW29lLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUfSksdGVbb2UtMV0ucHVzaCh7dHlwZToiY3JpdGljYWxFbmQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQ1JJVElDQUxfRU5EfSksdGhpcy4kPXRlW29lLTFdO2JyZWFrO2Nhc2UgNDE6dGVbb2UtMV0udW5zaGlmdCh7dHlwZToiYnJlYWtTdGFydCIsYnJlYWtUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtvZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5CUkVBS19TVEFSVH0pLHRlW29lLTFdLnB1c2goe3R5cGU6ImJyZWFrRW5kIixvcHRUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtvZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5CUkVBS19FTkR9KSx0aGlzLiQ9dGVbb2UtMV07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9dGVbb2UtM10uY29uY2F0KFt7dHlwZToib3B0aW9uIixvcHRpb25UZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtvZS0xXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT059LHRlW29lXV0pO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXRlW29lLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbb2UtMV0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuUEFSX0FORH0sdGVbb2VdXSk7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9dGVbb2UtM10uY29uY2F0KFt7dHlwZToiZWxzZSIsYWx0VGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbb2UtMV0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQUxUX0VMU0V9LHRlW29lXV0pO2JyZWFrO2Nhc2UgNDg6dGVbb2UtM10uZHJhdz0icGFydGljaXBhbnQiLHRlW29lLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0ZVtvZS0zXS5kZXNjcmlwdGlvbj11ZS5wYXJzZU1lc3NhZ2UodGVbb2UtMV0pLHRoaXMuJD10ZVtvZS0zXTticmVhaztjYXNlIDQ5OnRlW29lLTFdLmRyYXc9InBhcnRpY2lwYW50Iix0ZVtvZS0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW29lLTFdO2JyZWFrO2Nhc2UgNTA6dGVbb2UtM10uZHJhdz0iYWN0b3IiLHRlW29lLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0ZVtvZS0zXS5kZXNjcmlwdGlvbj11ZS5wYXJzZU1lc3NhZ2UodGVbb2UtMV0pLHRoaXMuJD10ZVtvZS0zXTticmVhaztjYXNlIDUxOnRlW29lLTFdLmRyYXc9ImFjdG9yIix0ZVtvZS0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW29lLTFdO2JyZWFrO2Nhc2UgNTI6dGVbb2UtMV0udHlwZT0iZGVzdHJveVBhcnRpY2lwYW50Iix0aGlzLiQ9dGVbb2UtMV07YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9W3RlW29lLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6dGVbb2UtMl0sYWN0b3I6dGVbb2UtMV0uYWN0b3IsdGV4dDp0ZVtvZV19XTticmVhaztjYXNlIDU0OnRlW29lLTJdPVtdLmNvbmNhdCh0ZVtvZS0xXSx0ZVtvZS0xXSkuc2xpY2UoMCwyKSx0ZVtvZS0yXVswXT10ZVtvZS0yXVswXS5hY3Rvcix0ZVtvZS0yXVsxXT10ZVtvZS0yXVsxXS5hY3Rvcix0aGlzLiQ9W3RlW29lLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6dWUuUExBQ0VNRU5ULk9WRVIsYWN0b3I6dGVbb2UtMl0uc2xpY2UoMCwyKSx0ZXh0OnRlW29lXX1dO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPVt0ZVtvZS0xXSx7dHlwZToiYWRkTGlua3MiLGFjdG9yOnRlW29lLTFdLmFjdG9yLHRleHQ6dGVbb2VdfV07YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9W3RlW29lLTFdLHt0eXBlOiJhZGRBTGluayIsYWN0b3I6dGVbb2UtMV0uYWN0b3IsdGV4dDp0ZVtvZV19XTticmVhaztjYXNlIDU3OnRoaXMuJD1bdGVbb2UtMV0se3R5cGU6ImFkZFByb3BlcnRpZXMiLGFjdG9yOnRlW29lLTFdLmFjdG9yLHRleHQ6dGVbb2VdfV07YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9W3RlW29lLTFdLHt0eXBlOiJhZGREZXRhaWxzIixhY3Rvcjp0ZVtvZS0xXS5hY3Rvcix0ZXh0OnRlW29lXX1dO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPVt0ZVtvZS0yXSx0ZVtvZV1dO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPXRlW29lXTticmVhaztjYXNlIDYzOnRoaXMuJD11ZS5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPXVlLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPVt0ZVtvZS00XSx0ZVtvZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTp0ZVtvZS00XS5hY3Rvcix0bzp0ZVtvZS0xXS5hY3RvcixzaWduYWxUeXBlOnRlW29lLTNdLG1zZzp0ZVtvZV0sYWN0aXZhdGU6ITB9LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6dGVbb2UtMV0uYWN0b3J9XTticmVhaztjYXNlIDY2OnRoaXMuJD1bdGVbb2UtNF0sdGVbb2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbb2UtNF0uYWN0b3IsdG86dGVbb2UtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtvZS0zXSxtc2c6dGVbb2VdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6dGVbb2UtNF0uYWN0b3J9XTticmVhaztjYXNlIDY3OnRoaXMuJD1bdGVbb2UtM10sdGVbb2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbb2UtM10uYWN0b3IsdG86dGVbb2UtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtvZS0yXSxtc2c6dGVbb2VdfV07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e3R5cGU6ImFkZFBhcnRpY2lwYW50IixhY3Rvcjp0ZVtvZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPXVlLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9dWUuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9dWUuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9dWUuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRDticmVhaztjYXNlIDczOnRoaXMuJD11ZS5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9dWUuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURUQ7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9dWUuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9dWUuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzc6dGhpcy4kPXVlLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPXVlLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc5OnRoaXMuJD11ZS5wYXJzZU1lc3NhZ2UodGVbb2VdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6ZSw1OnIsNjpufSx7MTpbM119LHszOjUsNDplLDU6ciw2Om59LHszOjYsNDplLDU6ciw2Om59LHQoWzEsNCw1LDEzLDE0LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxpLHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpfLDQxOlQsNDM6RSw0NDpMLDQ2OkMsNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOlMsNjE6Tyw2MjpOLDcwOlB9LHQoRixbMiw1XSksezk6NDcsMTI6MTIsMTM6bCwxNDp1LDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpfLDQxOlQsNDM6RSw0NDpMLDQ2OkMsNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOlMsNjE6Tyw2MjpOLDcwOlB9LHQoRixbMiw3XSksdChGLFsyLDhdKSx0KEYsWzIsMTRdKSx7MTI6NDgsNTA6QSw1MjpJLDUzOkR9LHsxNTpbMSw0OV19LHs1OlsxLDUwXX0sezU6WzEsNTNdLDE5OlsxLDUxXSwyMDpbMSw1Ml19LHsyMjo1NCw3MDpQfSx7MjI6NTUsNzA6UH0sezU6WzEsNTZdfSx7NTpbMSw1N119LHs1OlsxLDU4XX0sezU6WzEsNTldfSx7NTpbMSw2MF19LHQoRixbMiwyOV0pLHQoRixbMiwzMF0pLHszMjpbMSw2MV19LHszNDpbMSw2Ml19LHQoRixbMiwzM10pLHsxNTpbMSw2M119LHsxNTpbMSw2NF19LHsxNTpbMSw2NV19LHsxNTpbMSw2Nl19LHsxNTpbMSw2N119LHsxNTpbMSw2OF19LHsxNTpbMSw2OV19LHsxNTpbMSw3MF19LHsyMjo3MSw3MDpQfSx7MjI6NzIsNzA6UH0sezIyOjczLDcwOlB9LHs2Nzo3NCw3MTpbMSw3NV0sNzI6WzEsNzZdLDczOlsxLDc3XSw3NDpbMSw3OF0sNzU6WzEsNzldLDc2OlsxLDgwXSw3NzpbMSw4MV0sNzg6WzEsODJdLDc5OlsxLDgzXSw4MDpbMSw4NF19LHs1NTo4NSw1NzpbMSw4Nl0sNjU6WzEsODddLDY2OlsxLDg4XX0sezIyOjg5LDcwOlB9LHsyMjo5MCw3MDpQfSx7MjI6OTEsNzA6UH0sezIyOjkyLDcwOlB9LHQoWzUsNTEsNjQsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODFdLFsyLDY4XSksdChGLFsyLDZdKSx0KEYsWzIsMTVdKSx0KEIsWzIsOV0sezEwOjkzfSksdChGLFsyLDE3XSksezU6WzEsOTVdLDE5OlsxLDk0XX0sezU6WzEsOTZdfSx0KEYsWzIsMjFdKSx7NTpbMSw5N119LHs1OlsxLDk4XX0sdChGLFsyLDI0XSksdChGLFsyLDI1XSksdChGLFsyLDI2XSksdChGLFsyLDI3XSksdChGLFsyLDI4XSksdChGLFsyLDMxXSksdChGLFsyLDMyXSksdCgkLGksezc6OTl9KSx0KCQsaSx7NzoxMDB9KSx0KCQsaSx7NzoxMDF9KSx0KHosaSx7NDA6MTAyLDc6MTAzfSksdChXLGksezQyOjEwNCw3OjEwNX0pLHQoVyxpLHs3OjEwNSw0MjoxMDZ9KSx0KGosaSx7NDU6MTA3LDc6MTA4fSksdCgkLGksezc6MTA5fSksezU6WzEsMTExXSw1MTpbMSwxMTBdfSx7NTpbMSwxMTNdLDUxOlsxLDExMl19LHs1OlsxLDExNF19LHsyMjoxMTcsNjg6WzEsMTE1XSw2OTpbMSwxMTZdLDcwOlB9LHQoSyxbMiw2OV0pLHQoSyxbMiw3MF0pLHQoSyxbMiw3MV0pLHQoSyxbMiw3Ml0pLHQoSyxbMiw3M10pLHQoSyxbMiw3NF0pLHQoSyxbMiw3NV0pLHQoSyxbMiw3Nl0pLHQoSyxbMiw3N10pLHQoSyxbMiw3OF0pLHsyMjoxMTgsNzA6UH0sezIyOjEyMCw1ODoxMTksNzA6UH0sezcwOlsyLDYzXX0sezcwOlsyLDY0XX0sezU2OjEyMSw4MTppZX0sezU2OjEyMyw4MTppZX0sezU2OjEyNCw4MTppZX0sezU2OjEyNSw4MTppZX0sezQ6WzEsMTI4XSw1OlsxLDEzMF0sMTE6MTI3LDEyOjEyOSwxNjpbMSwxMjZdLDUwOkEsNTI6SSw1MzpEfSx7NTpbMSwxMzFdfSx0KEYsWzIsMTldKSx0KEYsWzIsMjBdKSx0KEYsWzIsMjJdKSx0KEYsWzIsMjNdKSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTMyXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpDLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpTLDYxOk8sNjI6Tiw3MDpQfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTMzXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpDLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpTLDYxOk8sNjI6Tiw3MDpQfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTM0XSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpDLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpTLDYxOk8sNjI6Tiw3MDpQfSx7MTY6WzEsMTM1XX0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsyLDQ2XSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpDLDQ5OlsxLDEzNl0sNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOlMsNjE6Tyw2MjpOLDcwOlB9LHsxNjpbMSwxMzddfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzIsNDRdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpfLDQxOlQsNDM6RSw0NDpMLDQ2OkMsNDg6WzEsMTM4XSw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Uyw2MTpPLDYyOk4sNzA6UH0sezE2OlsxLDEzOV19LHsxNjpbMSwxNDBdfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzIsNDJdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpfLDQxOlQsNDM6RSw0NDpMLDQ2OkMsNDc6WzEsMTQxXSw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Uyw2MTpPLDYyOk4sNzA6UH0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDE0Ml0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Qyw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Uyw2MTpPLDYyOk4sNzA6UH0sezE1OlsxLDE0M119LHQoRixbMiw0OV0pLHsxNTpbMSwxNDRdfSx0KEYsWzIsNTFdKSx0KEYsWzIsNTJdKSx7MjI6MTQ1LDcwOlB9LHsyMjoxNDYsNzA6UH0sezU2OjE0Nyw4MTppZX0sezU2OjE0OCw4MTppZX0sezU2OjE0OSw4MTppZX0sezY0OlsxLDE1MF0sODE6WzIsNjJdfSx7NTpbMiw1NV19LHs1OlsyLDc5XX0sezU6WzIsNTZdfSx7NTpbMiw1N119LHs1OlsyLDU4XX0sdChGLFsyLDE2XSksdChCLFsyLDEwXSksezEyOjE1MSw1MDpBLDUyOkksNTM6RH0sdChCLFsyLDEyXSksdChCLFsyLDEzXSksdChGLFsyLDE4XSksdChGLFsyLDM0XSksdChGLFsyLDM1XSksdChGLFsyLDM2XSksdChGLFsyLDM3XSksezE1OlsxLDE1Ml19LHQoRixbMiwzOF0pLHsxNTpbMSwxNTNdfSx0KEYsWzIsMzldKSx0KEYsWzIsNDBdKSx7MTU6WzEsMTU0XX0sdChGLFsyLDQxXSksezU6WzEsMTU1XX0sezU6WzEsMTU2XX0sezU2OjE1Nyw4MTppZX0sezU2OjE1OCw4MTppZX0sezU6WzIsNjddfSx7NTpbMiw1M119LHs1OlsyLDU0XX0sezIyOjE1OSw3MDpQfSx0KEIsWzIsMTFdKSx0KHosaSx7NzoxMDMsNDA6MTYwfSksdChXLGksezc6MTA1LDQyOjE2MX0pLHQoaixpLHs3OjEwOCw0NToxNjJ9KSx0KEYsWzIsNDhdKSx0KEYsWzIsNTBdKSx7NTpbMiw2NV19LHs1OlsyLDY2XX0sezgxOlsyLDYxXX0sezE2OlsyLDQ3XX0sezE2OlsyLDQ1XX0sezE2OlsyLDQzXX1dLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sODc6WzIsNjNdLDg4OlsyLDY0XSwxMjE6WzIsNTVdLDEyMjpbMiw3OV0sMTIzOlsyLDU2XSwxMjQ6WzIsNTddLDEyNTpbMiw1OF0sMTQ3OlsyLDY3XSwxNDg6WzIsNTNdLDE0OTpbMiw1NF0sMTU3OlsyLDY1XSwxNTg6WzIsNjZdLDE1OTpbMiw2MV0sMTYwOlsyLDQ3XSwxNjE6WzIsNDVdLDE2MjpbMiw0M119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihxLFope2lmKFoucmVjb3ZlcmFibGUpdGhpcy50cmFjZShxKTtlbHNle3ZhciBhZT1uZXcgRXJyb3IocSk7dGhyb3cgYWUuaGFzaD1aLGFlfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHEpe3ZhciBaPXRoaXMsYWU9WzBdLHVlPVtdLGNlPVtudWxsXSx0ZT1bXSxEZT10aGlzLnRhYmxlLG9lPSIiLGtlPTAsRmU9MCxCZT0wLFZlPTIsR2U9MSxIZT10ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx4ZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFg9e3l5Ont9fTtmb3IodmFyIGZlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZmUpJiYoWC55eVtmZV09dGhpcy55eVtmZV0pO3hlLnNldElucHV0KHEsWC55eSksWC55eS5sZXhlcj14ZSxYLnl5LnBhcnNlcj10aGlzLHR5cGVvZiB4ZS55eWxsb2M+InUiJiYoeGUueXlsbG9jPXt9KTt2YXIgaGU9eGUueXlsbG9jO3RlLnB1c2goaGUpO3ZhciBnZT14ZS5vcHRpb25zJiZ4ZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgWC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1YLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIG5lKEV0KXthZS5sZW5ndGg9YWUubGVuZ3RoLTIqRXQsY2UubGVuZ3RoPWNlLmxlbmd0aC1FdCx0ZS5sZW5ndGg9dGUubGVuZ3RoLUV0fW8obmUsInBvcFN0YWNrIik7ZnVuY3Rpb24geWUoKXt2YXIgRXQ7cmV0dXJuIEV0PXVlLnBvcCgpfHx4ZS5sZXgoKXx8R2UsdHlwZW9mIEV0IT0ibnVtYmVyIiYmKEV0IGluc3RhbmNlb2YgQXJyYXkmJih1ZT1FdCxFdD11ZS5wb3AoKSksRXQ9Wi5zeW1ib2xzX1tFdF18fEV0KSxFdH1vKHllLCJsZXgiKTtmb3IodmFyIFUsVGUsc2UsRWUsQWUsUGUsTWU9e30sbWUsV2UsUmUsdHQ7Oyl7aWYoc2U9YWVbYWUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbc2VdP0VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbc2VdOigoVT09PW51bGx8fHR5cGVvZiBVPiJ1IikmJihVPXllKCkpLEVlPURlW3NlXSYmRGVbc2VdW1VdKSx0eXBlb2YgRWU+InUifHwhRWUubGVuZ3RofHwhRWVbMF0pe3ZhciBndD0iIjt0dD1bXTtmb3IobWUgaW4gRGVbc2VdKXRoaXMudGVybWluYWxzX1ttZV0mJm1lPlZlJiZ0dC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bbWVdKyInIik7eGUuc2hvd1Bvc2l0aW9uP2d0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGtlKzEpK2A6CmAreGUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt0dC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1VdfHxVKSsiJyI6Z3Q9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoa2UrMSkrIjogVW5leHBlY3RlZCAiKyhVPT1HZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tVXXx8VSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoZ3Qse3RleHQ6eGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1VdfHxVLGxpbmU6eGUueXlsaW5lbm8sbG9jOmhlLGV4cGVjdGVkOnR0fSl9aWYoRWVbMF1pbnN0YW5jZW9mIEFycmF5JiZFZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3NlKyIsIHRva2VuOiAiK1UpO3N3aXRjaChFZVswXSl7Y2FzZSAxOmFlLnB1c2goVSksY2UucHVzaCh4ZS55eXRleHQpLHRlLnB1c2goeGUueXlsbG9jKSxhZS5wdXNoKEVlWzFdKSxVPW51bGwsVGU/KFU9VGUsVGU9bnVsbCk6KEZlPXhlLnl5bGVuZyxvZT14ZS55eXRleHQsa2U9eGUueXlsaW5lbm8saGU9eGUueXlsbG9jLEJlPjAmJkJlLS0pO2JyZWFrO2Nhc2UgMjppZihXZT10aGlzLnByb2R1Y3Rpb25zX1tFZVsxXV1bMV0sTWUuJD1jZVtjZS5sZW5ndGgtV2VdLE1lLl8kPXtmaXJzdF9saW5lOnRlW3RlLmxlbmd0aC0oV2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp0ZVt0ZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0ZVt0ZS5sZW5ndGgtKFdlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRlW3RlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sZ2UmJihNZS5fJC5yYW5nZT1bdGVbdGUubGVuZ3RoLShXZXx8MSldLnJhbmdlWzBdLHRlW3RlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFBlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNZSxbb2UsRmUsa2UsWC55eSxFZVsxXSxjZSx0ZV0uY29uY2F0KEhlKSksdHlwZW9mIFBlPCJ1IilyZXR1cm4gUGU7V2UmJihhZT1hZS5zbGljZSgwLC0xKldlKjIpLGNlPWNlLnNsaWNlKDAsLTEqV2UpLHRlPXRlLnNsaWNlKDAsLTEqV2UpKSxhZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0VlWzFdXVswXSksY2UucHVzaChNZS4kKSx0ZS5wdXNoKE1lLl8kKSxSZT1EZVthZVthZS5sZW5ndGgtMl1dW2FlW2FlLmxlbmd0aC0xXV0sYWUucHVzaChSZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGVlPWZ1bmN0aW9uKCl7dmFyIEg9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihaLGFlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFosYWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFopfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ocSxaKXtyZXR1cm4gdGhpcy55eT1afHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1xLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXEsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXEsdGhpcy5tYXRjaGVkKz1xO3ZhciBaPXEubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBaPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxxfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHEpe3ZhciBaPXEubGVuZ3RoLGFlPXEuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1xK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1aKSx0aGlzLm9mZnNldC09Wjt2YXIgdWU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksYWUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1hZS5sZW5ndGgtMSk7dmFyIGNlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphZT8oYWUubGVuZ3RoPT09dWUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt1ZVt1ZS5sZW5ndGgtYWUubGVuZ3RoXS5sZW5ndGgtYWVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1afSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2NlWzBdLGNlWzBdK3RoaXMueXlsZW5nLVpdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihxKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UocSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihxLmxlbmd0aD4yMD8iLi4uIjoiIikrcS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMubWF0Y2g7cmV0dXJuIHEubGVuZ3RoPDIwJiYocSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtcS5sZW5ndGgpKSwocS5zdWJzdHIoMCwyMCkrKHEubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgcT10aGlzLnBhc3RJbnB1dCgpLFo9bmV3IEFycmF5KHEubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gcSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArWisiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24ocSxaKXt2YXIgYWUsdWUsY2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGNlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGNlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHVlPXFbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHVlJiYodGhpcy55eWxpbmVubys9dWUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46dWU/dWVbdWUubGVuZ3RoLTFdLmxlbmd0aC11ZVt1ZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitxWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXFbMF0sdGhpcy5tYXRjaCs9cVswXSx0aGlzLm1hdGNoZXM9cSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShxWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1xWzBdLGFlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFosdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksYWUpcmV0dXJuIGFlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB0ZSBpbiBjZSl0aGlzW3RlXT1jZVt0ZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHEsWixhZSx1ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBjZT10aGlzLl9jdXJyZW50UnVsZXMoKSx0ZT0wO3RlPGNlLmxlbmd0aDt0ZSsrKWlmKGFlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbY2VbdGVdXSksYWUmJighWnx8YWVbMF0ubGVuZ3RoPlpbMF0ubGVuZ3RoKSl7aWYoWj1hZSx1ZT10ZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihxPXRoaXMudGVzdF9tYXRjaChhZSxjZVt0ZV0pLHEhPT0hMSlyZXR1cm4gcTtpZih0aGlzLl9iYWNrdHJhY2spe1o9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gWj8ocT10aGlzLnRlc3RfbWF0Y2goWixjZVt1ZV0pLHEhPT0hMT9xOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5uZXh0KCk7cmV0dXJuIFp8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFope3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChaKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBaPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFo+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihaKXtyZXR1cm4gWj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFp8fDApLFo+PTA/dGhpcy5jb25kaXRpb25TdGFja1taXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFope3RoaXMuYmVnaW4oWil9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihaLGFlLHVlLGNlKXt2YXIgdGU9Y2U7c3dpdGNoKHVlKXtjYXNlIDA6cmV0dXJuIDU7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpicmVhaztjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIDE5O2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDE0O2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MDticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTI7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gMTM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MzticmVhaztjYXNlIDEyOnJldHVybiBhZS55eXRleHQ9YWUueXl0ZXh0LnRyaW0oKSx0aGlzLmJlZ2luKCJBTElBUyIpLDcwO2JyZWFrO2Nhc2UgMTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiTElORSIpLDUxO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNTticmVhaztjYXNlIDE1OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzY7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM3O2JyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzODticmVhaztjYXNlIDE4OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzk7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ5O2JyZWFrO2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MTticmVhaztjYXNlIDIxOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDM7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ4O2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NDticmVhaztjYXNlIDI0OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDc7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ2O2JyZWFrO2Nhc2UgMjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNTticmVhaztjYXNlIDI3OnJldHVybiAxNjtjYXNlIDI4OnJldHVybiA2NTtjYXNlIDI5OnJldHVybiA2NjtjYXNlIDMwOnJldHVybiA1OTtjYXNlIDMxOnJldHVybiA2MDtjYXNlIDMyOnJldHVybiA2MTtjYXNlIDMzOnJldHVybiA2MjtjYXNlIDM0OnJldHVybiA1NztjYXNlIDM1OnJldHVybiA1NDtjYXNlIDM2OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIxO2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7YnJlYWs7Y2FzZSAzODpyZXR1cm4gMjk7Y2FzZSAzOTpyZXR1cm4gMzA7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7YnJlYWs7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2JyZWFrO2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDQ0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDQ1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDQ3OnJldHVybiA2O2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6cmV0dXJuIDIwO2Nhc2UgNTA6cmV0dXJuIDY0O2Nhc2UgNTE6cmV0dXJuIDU7Y2FzZSA1MjpyZXR1cm4gYWUueXl0ZXh0PWFlLnl5dGV4dC50cmltKCksNzA7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gNzM7Y2FzZSA1NDpyZXR1cm4gNzQ7Y2FzZSA1NTpyZXR1cm4gNzU7Y2FzZSA1NjpyZXR1cm4gNzY7Y2FzZSA1NzpyZXR1cm4gNzE7Y2FzZSA1ODpyZXR1cm4gNzI7Y2FzZSA1OTpyZXR1cm4gNzc7Y2FzZSA2MDpyZXR1cm4gNzg7Y2FzZSA2MTpyZXR1cm4gNzk7Y2FzZSA2MjpyZXR1cm4gODA7Y2FzZSA2MzpyZXR1cm4gODE7Y2FzZSA2NDpyZXR1cm4gNjg7Y2FzZSA2NTpyZXR1cm4gNjk7Y2FzZSA2NjpyZXR1cm4gNTtjYXNlIDY3OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXDwtPlwtPjpcbiw7XSs/KFtcLV0qW15cPC0+XC0+OlxuLDtdKz8pKj8oPz0oKD8hXG4pXHMpK2FzKD8hXG4pXHN8WyNcbjtdfCQpKS9pLC9eKD86YXNcYikvaSwvXig/Oig/OikpL2ksL14oPzpsb29wXGIpL2ksL14oPzpyZWN0XGIpL2ksL14oPzpvcHRcYikvaSwvXig/OmFsdFxiKS9pLC9eKD86ZWxzZVxiKS9pLC9eKD86cGFyXGIpL2ksL14oPzpwYXJfb3ZlclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzpjcml0aWNhbFxiKS9pLC9eKD86b3B0aW9uXGIpL2ksL14oPzpicmVha1xiKS9pLC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcbjtdKikvaSwvXig/OmVuZFxiKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OmxpbmtzXGIpL2ksL14oPzpsaW5rXGIpL2ksL14oPzpwcm9wZXJ0aWVzXGIpL2ksL14oPzpkZXRhaWxzXGIpL2ksL14oPzpvdmVyXGIpL2ksL14oPzpub3RlXGIpL2ksL14oPzphY3RpdmF0ZVxiKS9pLC9eKD86ZGVhY3RpdmF0ZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86dGl0bGU6XHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VxdWVuY2VEaWFncmFtXGIpL2ksL14oPzphdXRvbnVtYmVyXGIpL2ksL14oPzpvZmZcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1w8LT5cLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1w8LT5cLT46XG4sO10rKSopL2ksL14oPzotPj4pL2ksL14oPzo8PC0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzo8PC0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gSH0oKTtRLmxleGVyPWVlO2Z1bmN0aW9uIEooKXt0aGlzLnl5PXt9fXJldHVybiBvKEosIlBhcnNlciIpLEoucHJvdG90eXBlPVEsUS5QYXJzZXI9SixuZXcgSn0oKTtiTy5wYXJzZXI9Yk87VWZlPWJPfSk7ZnVuY3Rpb24gVE8odCxlKXtpZih0LmxpbmtzPT1udWxsKXQubGlua3M9ZTtlbHNlIGZvcihsZXQgciBpbiBlKXQubGlua3Nbcl09ZVtyXX1mdW5jdGlvbiBqZmUodCxlKXtpZih0LnByb3BlcnRpZXM9PW51bGwpdC5wcm9wZXJ0aWVzPWU7ZWxzZSBmb3IobGV0IHIgaW4gZSl0LnByb3BlcnRpZXNbcl09ZVtyXX1mdW5jdGlvbiBkSGUoKXskdC5yZWNvcmRzLmN1cnJlbnRCb3g9dm9pZCAwfXZhciAkdCxZVWUsd08scVVlLFhVZSx5aSxqVWUsS1VlLFFVZSxaVWUsSlVlLGVIZSx0SGUsYngsckhlLG5IZSxpSGUsYUhlLHNIZSxXZmUsazAsb0hlLGxIZSxjSGUseHgsdUhlLGhIZSxZZmUscWZlLGZIZSxYZmUsS2ZlLHBIZSxRZmUsa08sWmZlPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtodCgpO3RFKCk7ZnIoKTtraSgpOyR0PW5ldyBjZigoKT0+KHtwcmV2QWN0b3I6dm9pZCAwLGFjdG9yczpuZXcgTWFwLGNyZWF0ZWRBY3RvcnM6bmV3IE1hcCxkZXN0cm95ZWRBY3RvcnM6bmV3IE1hcCxib3hlczpbXSxtZXNzYWdlczpbXSxub3RlczpbXSxzZXF1ZW5jZU51bWJlcnNFbmFibGVkOiExLHdyYXBFbmFibGVkOnZvaWQgMCxjdXJyZW50Qm94OnZvaWQgMCxsYXN0Q3JlYXRlZDp2b2lkIDAsbGFzdERlc3Ryb3llZDp2b2lkIDB9KSksWVVlPW8oZnVuY3Rpb24odCl7JHQucmVjb3Jkcy5ib3hlcy5wdXNoKHtuYW1lOnQudGV4dCx3cmFwOnQud3JhcD8/azAoKSxmaWxsOnQuY29sb3IsYWN0b3JLZXlzOltdfSksJHQucmVjb3Jkcy5jdXJyZW50Qm94PSR0LnJlY29yZHMuYm94ZXMuc2xpY2UoLTEpWzBdfSwiYWRkQm94Iiksd089byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0kdC5yZWNvcmRzLmN1cnJlbnRCb3gsYT0kdC5yZWNvcmRzLmFjdG9ycy5nZXQodCk7aWYoYSl7aWYoJHQucmVjb3Jkcy5jdXJyZW50Qm94JiZhLmJveCYmJHQucmVjb3Jkcy5jdXJyZW50Qm94IT09YS5ib3gpdGhyb3cgbmV3IEVycm9yKGBBIHNhbWUgcGFydGljaXBhbnQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpbiBvbmUgQm94OiAke2EubmFtZX0gY2FuJ3QgYmUgaW4gJyR7YS5ib3gubmFtZX0nIGFuZCBpbiAnJHskdC5yZWNvcmRzLmN1cnJlbnRCb3gubmFtZX0nIGF0IHRoZSBzYW1lIHRpbWUuYCk7aWYoaT1hLmJveD9hLmJveDokdC5yZWNvcmRzLmN1cnJlbnRCb3gsYS5ib3g9aSxhJiZlPT09YS5uYW1lJiZyPT1udWxsKXJldHVybn1pZihyPy50ZXh0PT1udWxsJiYocj17dGV4dDplLHR5cGU6bn0pLChuPT1udWxsfHxyLnRleHQ9PW51bGwpJiYocj17dGV4dDplLHR5cGU6bn0pLCR0LnJlY29yZHMuYWN0b3JzLnNldCh0LHtib3g6aSxuYW1lOmUsZGVzY3JpcHRpb246ci50ZXh0LHdyYXA6ci53cmFwPz9rMCgpLHByZXZBY3RvcjokdC5yZWNvcmRzLnByZXZBY3RvcixsaW5rczp7fSxwcm9wZXJ0aWVzOnt9LGFjdG9yQ250Om51bGwscmVjdERhdGE6bnVsbCx0eXBlOm4/PyJwYXJ0aWNpcGFudCJ9KSwkdC5yZWNvcmRzLnByZXZBY3Rvcil7bGV0IHM9JHQucmVjb3Jkcy5hY3RvcnMuZ2V0KCR0LnJlY29yZHMucHJldkFjdG9yKTtzJiYocy5uZXh0QWN0b3I9dCl9JHQucmVjb3Jkcy5jdXJyZW50Qm94JiYkdC5yZWNvcmRzLmN1cnJlbnRCb3guYWN0b3JLZXlzLnB1c2godCksJHQucmVjb3Jkcy5wcmV2QWN0b3I9dH0sImFkZEFjdG9yIikscVVlPW8odD0+e2xldCBlLHI9MDtpZighdClyZXR1cm4gMDtmb3IoZT0wO2U8JHQucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7ZSsrKSR0LnJlY29yZHMubWVzc2FnZXNbZV0udHlwZT09PXh4LkFDVElWRV9TVEFSVCYmJHQucmVjb3Jkcy5tZXNzYWdlc1tlXS5mcm9tPT09dCYmcisrLCR0LnJlY29yZHMubWVzc2FnZXNbZV0udHlwZT09PXh4LkFDVElWRV9FTkQmJiR0LnJlY29yZHMubWVzc2FnZXNbZV0uZnJvbT09PXQmJnItLTtyZXR1cm4gcn0sImFjdGl2YXRpb25Db3VudCIpLFhVZT1vKGZ1bmN0aW9uKHQsZSxyLG4peyR0LnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTp0LHRvOmUsbWVzc2FnZTpyLnRleHQsd3JhcDpyLndyYXA/P2swKCksYW5zd2VyOm59KX0sImFkZE1lc3NhZ2UiKSx5aT1vKGZ1bmN0aW9uKHQsZSxyLG4saT0hMSl7aWYobj09PXh4LkFDVElWRV9FTkQmJnFVZSh0Pz8iIik8MSl7bGV0IHM9bmV3IEVycm9yKCJUcnlpbmcgdG8gaW5hY3RpdmF0ZSBhbiBpbmFjdGl2ZSBwYXJ0aWNpcGFudCAoIit0KyIpIik7dGhyb3cgcy5oYXNoPXt0ZXh0OiItPj4tIix0b2tlbjoiLT4+LSIsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyInQUNUSVZFX1BBUlRJQ0lQQU5UJyJdfSxzfXJldHVybiAkdC5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206dCx0bzplLG1lc3NhZ2U6cj8udGV4dD8/IiIsd3JhcDpyPy53cmFwPz9rMCgpLHR5cGU6bixhY3RpdmF0ZTppfSksITB9LCJhZGRTaWduYWwiKSxqVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmJveGVzLmxlbmd0aD4wfSwiaGFzQXRMZWFzdE9uZUJveCIpLEtVZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICR0LnJlY29yZHMuYm94ZXMuc29tZSh0PT50Lm5hbWUpfSwiaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSIpLFFVZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICR0LnJlY29yZHMubWVzc2FnZXN9LCJnZXRNZXNzYWdlcyIpLFpVZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICR0LnJlY29yZHMuYm94ZXN9LCJnZXRCb3hlcyIpLEpVZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICR0LnJlY29yZHMuYWN0b3JzfSwiZ2V0QWN0b3JzIiksZUhlPW8oZnVuY3Rpb24oKXtyZXR1cm4gJHQucmVjb3Jkcy5jcmVhdGVkQWN0b3JzfSwiZ2V0Q3JlYXRlZEFjdG9ycyIpLHRIZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICR0LnJlY29yZHMuZGVzdHJveWVkQWN0b3JzfSwiZ2V0RGVzdHJveWVkQWN0b3JzIiksYng9byhmdW5jdGlvbih0KXtyZXR1cm4gJHQucmVjb3Jkcy5hY3RvcnMuZ2V0KHQpfSwiZ2V0QWN0b3IiKSxySGU9byhmdW5jdGlvbigpe3JldHVyblsuLi4kdC5yZWNvcmRzLmFjdG9ycy5rZXlzKCldfSwiZ2V0QWN0b3JLZXlzIiksbkhlPW8oZnVuY3Rpb24oKXskdC5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITB9LCJlbmFibGVTZXF1ZW5jZU51bWJlcnMiKSxpSGU9byhmdW5jdGlvbigpeyR0LnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZD0hMX0sImRpc2FibGVTZXF1ZW5jZU51bWJlcnMiKSxhSGU9bygoKT0+JHQucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkLCJzaG93U2VxdWVuY2VOdW1iZXJzIiksc0hlPW8oZnVuY3Rpb24odCl7JHQucmVjb3Jkcy53cmFwRW5hYmxlZD10fSwic2V0V3JhcCIpLFdmZT1vKHQ9PntpZih0PT09dm9pZCAwKXJldHVybnt9O3Q9dC50cmltKCk7bGV0IGU9L146P3dyYXA6Ly5leGVjKHQpIT09bnVsbD8hMDovXjo/bm93cmFwOi8uZXhlYyh0KSE9PW51bGw/ITE6dm9pZCAwO3JldHVybntjbGVhbmVkVGV4dDooZT09PXZvaWQgMD90OnQucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIikpLnRyaW0oKSx3cmFwOmV9fSwiZXh0cmFjdFdyYXAiKSxrMD1vKCgpPT4kdC5yZWNvcmRzLndyYXBFbmFibGVkIT09dm9pZCAwPyR0LnJlY29yZHMud3JhcEVuYWJsZWQ6ZGUoKS5zZXF1ZW5jZT8ud3JhcD8/ITEsImF1dG9XcmFwIiksb0hlPW8oZnVuY3Rpb24oKXskdC5yZXNldCgpLF9yKCl9LCJjbGVhciIpLGxIZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQudHJpbSgpLHt3cmFwOnIsY2xlYW5lZFRleHQ6bn09V2ZlKGUpLGk9e3RleHQ6bix3cmFwOnJ9O3JldHVybiBZLmRlYnVnKGBwYXJzZU1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkoaSl9YCksaX0sInBhcnNlTWVzc2FnZSIpLGNIZT1vKGZ1bmN0aW9uKHQpe2xldCBlPS9eKCg/OnJnYmE/fGhzbGE/KVxzKlwoLipcKXxcdyopKC4qKSQvLmV4ZWModCkscj1lPy5bMV0/ZVsxXS50cmltKCk6InRyYW5zcGFyZW50IixuPWU/LlsyXT9lWzJdLnRyaW0oKTp2b2lkIDA7aWYod2luZG93Py5DU1Mpd2luZG93LkNTUy5zdXBwb3J0cygiY29sb3IiLHIpfHwocj0idHJhbnNwYXJlbnQiLG49dC50cmltKCkpO2Vsc2V7bGV0IHM9bmV3IE9wdGlvbigpLnN0eWxlO3MuY29sb3I9cixzLmNvbG9yIT09ciYmKHI9InRyYW5zcGFyZW50IixuPXQudHJpbSgpKX1sZXR7d3JhcDppLGNsZWFuZWRUZXh0OmF9PVdmZShuKTtyZXR1cm57dGV4dDphP1RyKGEsZGUoKSk6dm9pZCAwLGNvbG9yOnIsd3JhcDppfX0sInBhcnNlQm94RGF0YSIpLHh4PXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyLEJJRElSRUNUSU9OQUxfU09MSUQ6MzMsQklESVJFQ1RJT05BTF9ET1RURUQ6MzR9LHVIZT17RklMTEVEOjAsT1BFTjoxfSxoSGU9e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LFlmZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj17YWN0b3I6dCxwbGFjZW1lbnQ6ZSxtZXNzYWdlOnIudGV4dCx3cmFwOnIud3JhcD8/azAoKX0saT1bXS5jb25jYXQodCx0KTskdC5yZWNvcmRzLm5vdGVzLnB1c2gobiksJHQucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtmcm9tOmlbMF0sdG86aVsxXSxtZXNzYWdlOnIudGV4dCx3cmFwOnIud3JhcD8/azAoKSx0eXBlOnh4Lk5PVEUscGxhY2VtZW50OmV9KX0sImFkZE5vdGUiKSxxZmU9byhmdW5jdGlvbih0LGUpe2xldCByPWJ4KHQpO3RyeXtsZXQgbj1UcihlLnRleHQsZGUoKSk7bj1uLnJlcGxhY2UoLyZhbXA7L2csIiYiKSxuPW4ucmVwbGFjZSgvJmVxdWFsczsvZywiPSIpO2xldCBpPUpTT04ucGFyc2Uobik7VE8ocixpKX1jYXRjaChuKXtZLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsbil9fSwiYWRkTGlua3MiKSxmSGU9byhmdW5jdGlvbih0LGUpe2xldCByPWJ4KHQpO3RyeXtsZXQgbj17fSxpPVRyKGUudGV4dCxkZSgpKSxhPWkuaW5kZXhPZigiQCIpO2k9aS5yZXBsYWNlKC8mYW1wOy9nLCImIiksaT1pLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtsZXQgcz1pLnNsaWNlKDAsYS0xKS50cmltKCksbD1pLnNsaWNlKGErMSkudHJpbSgpO25bc109bCxUTyhyLG4pfWNhdGNoKG4pe1kuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixuKX19LCJhZGRBTGluayIpO28oVE8sImluc2VydExpbmtzIik7WGZlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1ieCh0KTt0cnl7bGV0IG49VHIoZS50ZXh0LGRlKCkpLGk9SlNPTi5wYXJzZShuKTtqZmUocixpKX1jYXRjaChuKXtZLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIHByb3BlcnRpZXMgdGV4dCIsbil9fSwiYWRkUHJvcGVydGllcyIpO28oamZlLCJpbnNlcnRQcm9wZXJ0aWVzIik7byhkSGUsImJveEVuZCIpO0tmZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9YngodCksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLnRleHQpO3RyeXtsZXQgaT1uLmlubmVySFRNTCxhPUpTT04ucGFyc2UoaSk7YS5wcm9wZXJ0aWVzJiZqZmUocixhLnByb3BlcnRpZXMpLGEubGlua3MmJlRPKHIsYS5saW5rcyl9Y2F0Y2goaSl7WS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBkZXRhaWxzIHRleHQiLGkpfX0sImFkZERldGFpbHMiKSxwSGU9byhmdW5jdGlvbih0LGUpe2lmKHQ/LnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIHQucHJvcGVydGllc1tlXX0sImdldEFjdG9yUHJvcGVydHkiKSxRZmU9byhmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaChmdW5jdGlvbihlKXtRZmUoZSl9KTtlbHNlIHN3aXRjaCh0LnR5cGUpe2Nhc2Uic2VxdWVuY2VJbmRleCI6JHQucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtmcm9tOnZvaWQgMCx0bzp2b2lkIDAsbWVzc2FnZTp7c3RhcnQ6dC5zZXF1ZW5jZUluZGV4LHN0ZXA6dC5zZXF1ZW5jZUluZGV4U3RlcCx2aXNpYmxlOnQuc2VxdWVuY2VWaXNpYmxlfSx3cmFwOiExLHR5cGU6dC5zaWduYWxUeXBlfSk7YnJlYWs7Y2FzZSJhZGRQYXJ0aWNpcGFudCI6d08odC5hY3Rvcix0LmFjdG9yLHQuZGVzY3JpcHRpb24sdC5kcmF3KTticmVhaztjYXNlImNyZWF0ZVBhcnRpY2lwYW50IjppZigkdC5yZWNvcmRzLmFjdG9ycy5oYXModC5hY3RvcikpdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvciIpOyR0LnJlY29yZHMubGFzdENyZWF0ZWQ9dC5hY3Rvcix3Tyh0LmFjdG9yLHQuYWN0b3IsdC5kZXNjcmlwdGlvbix0LmRyYXcpLCR0LnJlY29yZHMuY3JlYXRlZEFjdG9ycy5zZXQodC5hY3RvciwkdC5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7YnJlYWs7Y2FzZSJkZXN0cm95UGFydGljaXBhbnQiOiR0LnJlY29yZHMubGFzdERlc3Ryb3llZD10LmFjdG9yLCR0LnJlY29yZHMuZGVzdHJveWVkQWN0b3JzLnNldCh0LmFjdG9yLCR0LnJlY29yZHMubWVzc2FnZXMubGVuZ3RoKTticmVhaztjYXNlImFjdGl2ZVN0YXJ0Ijp5aSh0LmFjdG9yLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVhaztjYXNlImFjdGl2ZUVuZCI6eWkodC5hY3Rvcix2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhZGROb3RlIjpZZmUodC5hY3Rvcix0LnBsYWNlbWVudCx0LnRleHQpO2JyZWFrO2Nhc2UiYWRkTGlua3MiOnFmZSh0LmFjdG9yLHQudGV4dCk7YnJlYWs7Y2FzZSJhZGRBTGluayI6ZkhlKHQuYWN0b3IsdC50ZXh0KTticmVhaztjYXNlImFkZFByb3BlcnRpZXMiOlhmZSh0LmFjdG9yLHQudGV4dCk7YnJlYWs7Y2FzZSJhZGREZXRhaWxzIjpLZmUodC5hY3Rvcix0LnRleHQpO2JyZWFrO2Nhc2UiYWRkTWVzc2FnZSI6aWYoJHQucmVjb3Jkcy5sYXN0Q3JlYXRlZCl7aWYodC50byE9PSR0LnJlY29yZHMubGFzdENyZWF0ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgY3JlYXRlZCBwYXJ0aWNpcGFudCAiKyR0LnJlY29yZHMubGFzdENyZWF0ZWQubmFtZSsiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBjcmVhdGluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpOyR0LnJlY29yZHMubGFzdENyZWF0ZWQ9dm9pZCAwfWVsc2UgaWYoJHQucmVjb3Jkcy5sYXN0RGVzdHJveWVkKXtpZih0LnRvIT09JHQucmVjb3Jkcy5sYXN0RGVzdHJveWVkJiZ0LmZyb20hPT0kdC5yZWNvcmRzLmxhc3REZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVzdHJveWVkIHBhcnRpY2lwYW50ICIrJHQucmVjb3Jkcy5sYXN0RGVzdHJveWVkLm5hbWUrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpOyR0LnJlY29yZHMubGFzdERlc3Ryb3llZD12b2lkIDB9eWkodC5mcm9tLHQudG8sdC5tc2csdC5zaWduYWxUeXBlLHQuYWN0aXZhdGUpO2JyZWFrO2Nhc2UiYm94U3RhcnQiOllVZSh0LmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjpkSGUoKTticmVhaztjYXNlImxvb3BTdGFydCI6eWkodm9pZCAwLHZvaWQgMCx0Lmxvb3BUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjp5aSh2b2lkIDAsdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0Ijp5aSh2b2lkIDAsdm9pZCAwLHQuY29sb3IsdC5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOnlpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6eWkodm9pZCAwLHZvaWQgMCx0Lm9wdFRleHQsdC5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6eWkodm9pZCAwLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0Ijp5aSh2b2lkIDAsdm9pZCAwLHQuYWx0VGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiZWxzZSI6eWkodm9pZCAwLHZvaWQgMCx0LmFsdFRleHQsdC5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdEVuZCI6eWkodm9pZCAwLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVhaztjYXNlInNldEFjY1RpdGxlIjpScih0LnRleHQpO2JyZWFrO2Nhc2UicGFyU3RhcnQiOnlpKHZvaWQgMCx2b2lkIDAsdC5wYXJUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbmQiOnlpKHZvaWQgMCx2b2lkIDAsdC5wYXJUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOnlpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbFN0YXJ0Ijp5aSh2b2lkIDAsdm9pZCAwLHQuY3JpdGljYWxUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRpb24iOnlpKHZvaWQgMCx2b2lkIDAsdC5vcHRpb25UZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbEVuZCI6eWkodm9pZCAwLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOnlpKHZvaWQgMCx2b2lkIDAsdC5icmVha1RleHQsdC5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrRW5kIjp5aSh2b2lkIDAsdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrfX0sImFwcGx5Iiksa089e2FkZEFjdG9yOndPLGFkZE1lc3NhZ2U6WFVlLGFkZFNpZ25hbDp5aSxhZGRMaW5rczpxZmUsYWRkRGV0YWlsczpLZmUsYWRkUHJvcGVydGllczpYZmUsYXV0b1dyYXA6azAsc2V0V3JhcDpzSGUsZW5hYmxlU2VxdWVuY2VOdW1iZXJzOm5IZSxkaXNhYmxlU2VxdWVuY2VOdW1iZXJzOmlIZSxzaG93U2VxdWVuY2VOdW1iZXJzOmFIZSxnZXRNZXNzYWdlczpRVWUsZ2V0QWN0b3JzOkpVZSxnZXRDcmVhdGVkQWN0b3JzOmVIZSxnZXREZXN0cm95ZWRBY3RvcnM6dEhlLGdldEFjdG9yOmJ4LGdldEFjdG9yS2V5czpySGUsZ2V0QWN0b3JQcm9wZXJ0eTpwSGUsZ2V0QWNjVGl0bGU6UHIsZ2V0Qm94ZXM6WlVlLGdldERpYWdyYW1UaXRsZTpKcixzZXREaWFncmFtVGl0bGU6bG4sZ2V0Q29uZmlnOm8oKCk9PmRlKCkuc2VxdWVuY2UsImdldENvbmZpZyIpLGNsZWFyOm9IZSxwYXJzZU1lc3NhZ2U6bEhlLHBhcnNlQm94RGF0YTpjSGUsTElORVRZUEU6eHgsQVJST1dUWVBFOnVIZSxQTEFDRU1FTlQ6aEhlLGFkZE5vdGU6WWZlLHNldEFjY1RpdGxlOlJyLGFwcGx5OlFmZSxzZXRBY2NEZXNjcmlwdGlvbjpCcixnZXRBY2NEZXNjcmlwdGlvbjpGcixoYXNBdExlYXN0T25lQm94OmpVZSxoYXNBdExlYXN0T25lQm94V2l0aFRpdGxlOktVZX19KTt2YXIgbUhlLEpmZSxlZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttSGU9byh0PT5gLmFjdG9yIHsKICAgIHN0cm9rZTogJHt0LmFjdG9yQm9yZGVyfTsKICAgIGZpbGw6ICR7dC5hY3RvckJrZ307CiAgfQoKICB0ZXh0LmFjdG9yID4gdHNwYW4gewogICAgZmlsbDogJHt0LmFjdG9yVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5hY3Rvci1saW5lIHsKICAgIHN0cm9rZTogJHt0LmFjdG9yTGluZUNvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTAgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VMaW5lMSB7CiAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAjYXJyb3doZWFkIHBhdGggewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5zZXF1ZW5jZU51bWJlciB7CiAgICBmaWxsOiAke3Quc2VxdWVuY2VOdW1iZXJDb2xvcn07CiAgfQoKICAjc2VxdWVuY2VudW1iZXIgewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogICNjcm9zc2hlYWQgcGF0aCB7CiAgICBmaWxsOiAke3Quc2lnbmFsQ29sb3J9OwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VUZXh0IHsKICAgIGZpbGw6ICR7dC5zaWduYWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxhYmVsQm94IHsKICAgIHN0cm9rZTogJHt0LmxhYmVsQm94Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmxhYmVsQm94QmtnQ29sb3J9OwogIH0KCiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5sYWJlbFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcFRleHQsIC5sb29wVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5sb29wVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sb29wTGluZSB7CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICB9CgogIC5ub3RlIHsKICAgIC8vc3Ryb2tlOiAjZGVjYzkzOwogICAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwogIH0KCiAgLm5vdGVUZXh0LCAubm90ZVRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3Qubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0aXZhdGlvbjAgewogICAgZmlsbDogJHt0LmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2YXRpb24xIHsKICAgIGZpbGw6ICR7dC5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMiB7CiAgICBmaWxsOiAke3QuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0b3JQb3B1cE1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogIH0KCiAgLmFjdG9yUG9wdXBNZW51UGFuZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjIpOwogICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTsKfQogIC5hY3Rvci1tYW4gbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogIH0KICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQpgLCJnZXRTdHlsZXMiKSxKZmU9bUhlfSk7dmFyIEVPLHBmLHJkZSxuZGUsZ0hlLHRkZSxTTyx5SGUsdkhlLHd4LEUwLGlkZSxGYyxDTyx4SGUsYkhlLHdIZSxUSGUsa0hlLEVIZSxTSGUsYWRlLENIZSxBSGUsX0hlLExIZSxESGUsTkhlLFJIZSxzZGUsTUhlLEFPLElIZSx1aSxvZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO3F5KCk7aHIoKTtFTz1rYShGcCgpLDEpO1VhKCk7cGY9MTgqMixyZGU9ImFjdG9yLXRvcCIsbmRlPSJhY3Rvci1ib3R0b20iLGdIZT0iYWN0b3ItYm94Iix0ZGU9ImFjdG9yLW1hbiIsU089byhmdW5jdGlvbih0LGUpe3JldHVybiBtZCh0LGUpfSwiZHJhd1JlY3QiKSx5SGU9byhmdW5jdGlvbih0LGUscixuLGkpe2lmKGUubGlua3M9PT12b2lkIDB8fGUubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhlLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtsZXQgYT1lLmxpbmtzLHM9ZS5hY3RvckNudCxsPWUucmVjdERhdGE7dmFyIHU9Im5vbmUiO2kmJih1PSJibG9jayAhaW1wb3J0YW50Iik7bGV0IGg9dC5hcHBlbmQoImciKTtoLmF0dHIoImlkIiwiYWN0b3IiK3MrIl9wb3B1cCIpLGguYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLGguYXR0cigiZGlzcGxheSIsdSk7dmFyIGY9IiI7bC5jbGFzcyE9PXZvaWQgMCYmKGY9IiAiK2wuY2xhc3MpO2xldCBkPWwud2lkdGg+cj9sLndpZHRoOnIscD1oLmFwcGVuZCgicmVjdCIpO2lmKHAuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIitmKSxwLmF0dHIoIngiLGwueCkscC5hdHRyKCJ5IixsLmhlaWdodCkscC5hdHRyKCJmaWxsIixsLmZpbGwpLHAuYXR0cigic3Ryb2tlIixsLnN0cm9rZSkscC5hdHRyKCJ3aWR0aCIsZCkscC5hdHRyKCJoZWlnaHQiLGwuaGVpZ2h0KSxwLmF0dHIoInJ4IixsLnJ4KSxwLmF0dHIoInJ5IixsLnJ5KSxhIT1udWxsKXt2YXIgbT0yMDtmb3IobGV0IHYgaW4gYSl7dmFyIGc9aC5hcHBlbmQoImEiKSx5PSgwLEVPLnNhbml0aXplVXJsKShhW3ZdKTtnLmF0dHIoInhsaW5rOmhyZWYiLHkpLGcuYXR0cigidGFyZ2V0IiwiX2JsYW5rIiksSUhlKG4pKHYsZyxsLngrMTAsbC5oZWlnaHQrbSxkLDIwLHtjbGFzczoiYWN0b3IifSxuKSxtKz0zMH19cmV0dXJuIHAuYXR0cigiaGVpZ2h0IixtKSx7aGVpZ2h0OmwuaGVpZ2h0K20sd2lkdGg6ZH19LCJkcmF3UG9wdXAiKSx2SGU9byhmdW5jdGlvbih0KXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIrdCsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSBwdS5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycgPyAnbm9uZScgOiAnYmxvY2snOyB9In0sInBvcHVwTWVudVRvZ2dsZSIpLHd4PW8oYXN5bmMgZnVuY3Rpb24odCxlLHI9bnVsbCl7bGV0IG49dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxpPWF3YWl0IGhoKGUudGV4dCxTcigpKSxzPW4uYXBwZW5kKCJ4aHRtbDpkaXYiKS5hdHRyKCJzdHlsZSIsIndpZHRoOiBmaXQtY29udGVudDsiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKS5odG1sKGkpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihuLmF0dHIoImhlaWdodCIsTWF0aC5yb3VuZChzLmhlaWdodCkpLmF0dHIoIndpZHRoIixNYXRoLnJvdW5kKHMud2lkdGgpKSxlLmNsYXNzPT09Im5vdGVUZXh0Iil7bGV0IGw9dC5ub2RlKCkuZmlyc3RDaGlsZDtsLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixzLmhlaWdodCsyKmUudGV4dE1hcmdpbik7bGV0IHU9bC5nZXRCQm94KCk7bi5hdHRyKCJ4IixNYXRoLnJvdW5kKHUueCt1LndpZHRoLzItcy53aWR0aC8yKSkuYXR0cigieSIsTWF0aC5yb3VuZCh1LnkrdS5oZWlnaHQvMi1zLmhlaWdodC8yKSl9ZWxzZSBpZihyKXtsZXR7c3RhcnR4Omwsc3RvcHg6dSxzdGFydHk6aH09cjtpZihsPnUpe2xldCBmPWw7bD11LHU9Zn1uLmF0dHIoIngiLE1hdGgucm91bmQobCtNYXRoLmFicyhsLXUpLzItcy53aWR0aC8yKSksZS5jbGFzcz09PSJsb29wVGV4dCI/bi5hdHRyKCJ5IixNYXRoLnJvdW5kKGgpKTpuLmF0dHIoInkiLE1hdGgucm91bmQoaC1zLmhlaWdodCkpfXJldHVybltuXX0sImRyYXdLYXRleCIpLEUwPW8oZnVuY3Rpb24odCxlKXtsZXQgcj0wLG49MCxpPWUudGV4dC5zcGxpdChqZS5saW5lQnJlYWtSZWdleCksW2Esc109Rm8oZS5mb250U2l6ZSksbD1bXSx1PTAsaD1vKCgpPT5lLnksInlmdW5jIik7aWYoZS52YWxpZ24hPT12b2lkIDAmJmUudGV4dE1hcmdpbiE9PXZvaWQgMCYmZS50ZXh0TWFyZ2luPjApc3dpdGNoKGUudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueStlLnRleHRNYXJnaW4pLCJ5ZnVuYyIpO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueSsocituK2UudGV4dE1hcmdpbikvMiksInlmdW5jIik7YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpoPW8oKCk9Pk1hdGgucm91bmQoZS55KyhyK24rMiplLnRleHRNYXJnaW4pLWUudGV4dE1hcmdpbiksInlmdW5jIik7YnJlYWt9aWYoZS5hbmNob3IhPT12b2lkIDAmJmUudGV4dE1hcmdpbiE9PXZvaWQgMCYmZS53aWR0aCE9PXZvaWQgMClzd2l0Y2goZS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6ZS54PU1hdGgucm91bmQoZS54K2UudGV4dE1hcmdpbiksZS5hbmNob3I9InN0YXJ0IixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLzIpLGUuYW5jaG9yPSJtaWRkbGUiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC1lLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJlbmQiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrfWZvcihsZXRbZixkXW9mIGkuZW50cmllcygpKXtlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj09PTAmJmEhPT12b2lkIDAmJih1PWYqYSk7bGV0IHA9dC5hcHBlbmQoInRleHQiKTtwLmF0dHIoIngiLGUueCkscC5hdHRyKCJ5IixoKCkpLGUuYW5jaG9yIT09dm9pZCAwJiZwLmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGUuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixlLmFsaWdubWVudEJhc2VsaW5lKSxlLmZvbnRGYW1pbHkhPT12b2lkIDAmJnAuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHMhPT12b2lkIDAmJnAuc3R5bGUoImZvbnQtc2l6ZSIscyksZS5mb250V2VpZ2h0IT09dm9pZCAwJiZwLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSxlLmZpbGwhPT12b2lkIDAmJnAuYXR0cigiZmlsbCIsZS5maWxsKSxlLmNsYXNzIT09dm9pZCAwJiZwLmF0dHIoImNsYXNzIixlLmNsYXNzKSxlLmR5IT09dm9pZCAwP3AuYXR0cigiZHkiLGUuZHkpOnUhPT0wJiZwLmF0dHIoImR5Iix1KTtsZXQgbT1kfHxLXztpZihlLnRzcGFuKXtsZXQgZz1wLmFwcGVuZCgidHNwYW4iKTtnLmF0dHIoIngiLGUueCksZS5maWxsIT09dm9pZCAwJiZnLmF0dHIoImZpbGwiLGUuZmlsbCksZy50ZXh0KG0pfWVsc2UgcC50ZXh0KG0pO2UudmFsaWduIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj4wJiYobis9KHAuX2dyb3Vwc3x8cClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCxyPW4pLGwucHVzaChwKX1yZXR1cm4gbH0sImRyYXdUZXh0IiksaWRlPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIG4uYXR0cigicG9pbnRzIixyKGUueCxlLnksZS53aWR0aCxlLmhlaWdodCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmhlaWdodC8yLEUwKHQsZSksbn0sImRyYXdMYWJlbCIpLEZjPS0xLENPPW8oKHQsZSxyLG4pPT57dC5zZWxlY3QmJnIuZm9yRWFjaChpPT57bGV0IGE9ZS5nZXQoaSkscz10LnNlbGVjdCgiI2FjdG9yIithLmFjdG9yQ250KTshbi5taXJyb3JBY3RvcnMmJmEuc3RvcHk/cy5hdHRyKCJ5MiIsYS5zdG9weSthLmhlaWdodC8yKTpuLm1pcnJvckFjdG9ycyYmcy5hdHRyKCJ5MiIsYS5zdG9weSl9KX0sImZpeExpZmVMaW5lSGVpZ2h0cyIpLHhIZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW4/ZS5zdG9weTplLnN0YXJ0eSxhPWUueCtlLndpZHRoLzIscz1pK2UuaGVpZ2h0LGw9dC5hcHBlbmQoImciKS5sb3dlcigpO3ZhciB1PWw7bnx8KEZjKyssT2JqZWN0LmtleXMoZS5saW5rc3x8e30pLmxlbmd0aCYmIXIuZm9yY2VNZW51cyYmdS5hdHRyKCJvbmNsaWNrIix2SGUoYGFjdG9yJHtGY31fcG9wdXBgKSkuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrRmMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIscykuYXR0cigieDIiLGEpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSAyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKS5hdHRyKCJuYW1lIixlLm5hbWUpLHU9bC5hcHBlbmQoImciKSxlLmFjdG9yQ250PUZjLGUubGlua3MhPW51bGwmJnUuYXR0cigiaWQiLCJyb290LSIrRmMpKTtsZXQgaD1TbCgpO3ZhciBmPSJhY3RvciI7ZS5wcm9wZXJ0aWVzPy5jbGFzcz9mPWUucHJvcGVydGllcy5jbGFzczpoLmZpbGw9IiNlYWVhZWEiLG4/Zis9YCAke25kZX1gOmYrPWAgJHtyZGV9YCxoLng9ZS54LGgueT1pLGgud2lkdGg9ZS53aWR0aCxoLmhlaWdodD1lLmhlaWdodCxoLmNsYXNzPWYsaC5yeD0zLGgucnk9MyxoLm5hbWU9ZS5uYW1lO2xldCBkPVNPKHUsaCk7aWYoZS5yZWN0RGF0YT1oLGUucHJvcGVydGllcz8uaWNvbil7bGV0IG09ZS5wcm9wZXJ0aWVzLmljb24udHJpbSgpO20uY2hhckF0KDApPT09IkAiP1JZKHUsaC54K2gud2lkdGgtMjAsaC55KzEwLG0uc3Vic3RyKDEpKTpOWSh1LGgueCtoLndpZHRoLTIwLGgueSsxMCxtKX1BTyhyLHBpKGUuZGVzY3JpcHRpb24pKShlLmRlc2NyaXB0aW9uLHUsaC54LGgueSxoLndpZHRoLGguaGVpZ2h0LHtjbGFzczpgYWN0b3IgJHtnSGV9YH0scik7bGV0IHA9ZS5oZWlnaHQ7aWYoZC5ub2RlKXtsZXQgbT1kLm5vZGUoKS5nZXRCQm94KCk7ZS5oZWlnaHQ9bS5oZWlnaHQscD1tLmhlaWdodH1yZXR1cm4gcH0sImRyYXdBY3RvclR5cGVQYXJ0aWNpcGFudCIpLGJIZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW4/ZS5zdG9weTplLnN0YXJ0eSxhPWUueCtlLndpZHRoLzIscz1pKzgwLGw9dC5hcHBlbmQoImciKS5sb3dlcigpO258fChGYysrLGwuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrRmMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIscykuYXR0cigieDIiLGEpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSAyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKS5hdHRyKCJuYW1lIixlLm5hbWUpLGUuYWN0b3JDbnQ9RmMpO2xldCB1PXQuYXBwZW5kKCJnIiksaD10ZGU7bj9oKz1gICR7bmRlfWA6aCs9YCAke3JkZX1gLHUuYXR0cigiY2xhc3MiLGgpLHUuYXR0cigibmFtZSIsZS5uYW1lKTtsZXQgZj1TbCgpO2YueD1lLngsZi55PWksZi5maWxsPSIjZWFlYWVhIixmLndpZHRoPWUud2lkdGgsZi5oZWlnaHQ9ZS5oZWlnaHQsZi5jbGFzcz0iYWN0b3IiLGYucng9MyxmLnJ5PTMsdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi10b3JzbyIrRmMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIsaSsyNSkuYXR0cigieDIiLGEpLmF0dHIoInkyIixpKzQ1KSx1LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLWFybXMiK0ZjKS5hdHRyKCJ4MSIsYS1wZi8yKS5hdHRyKCJ5MSIsaSszMykuYXR0cigieDIiLGErcGYvMikuYXR0cigieTIiLGkrMzMpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGEtcGYvMikuYXR0cigieTEiLGkrNjApLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsaSs0NSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLGkrNDUpLmF0dHIoIngyIixhK3BmLzItMikuYXR0cigieTIiLGkrNjApO2xldCBkPXUuYXBwZW5kKCJjaXJjbGUiKTtkLmF0dHIoImN4IixlLngrZS53aWR0aC8yKSxkLmF0dHIoImN5IixpKzEwKSxkLmF0dHIoInIiLDE1KSxkLmF0dHIoIndpZHRoIixlLndpZHRoKSxkLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpO2xldCBwPXUubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9cC5oZWlnaHQsQU8ocixwaShlLmRlc2NyaXB0aW9uKSkoZS5kZXNjcmlwdGlvbix1LGYueCxmLnkrMzUsZi53aWR0aCxmLmhlaWdodCx7Y2xhc3M6YGFjdG9yICR7dGRlfWB9LHIpLGUuaGVpZ2h0fSwiZHJhd0FjdG9yVHlwZUFjdG9yIiksd0hlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGF3YWl0IGJIZSh0LGUscixuKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gYXdhaXQgeEhlKHQsZSxyLG4pfX0sImRyYXdBY3RvciIpLFRIZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgaT10LmFwcGVuZCgiZyIpO2FkZShpLGUpLGUubmFtZSYmQU8ocikoZS5uYW1lLGksZS54LGUueSsoZS50ZXh0TWF4SGVpZ2h0fHwwKS8yLGUud2lkdGgsMCx7Y2xhc3M6InRleHQifSxyKSxpLmxvd2VyKCl9LCJkcmF3Qm94Iiksa0hlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwZW5kKCJnIil9LCJhbmNob3JFbGVtZW50IiksRUhlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtsZXQgYT1TbCgpLHM9ZS5hbmNob3JlZDthLng9ZS5zdGFydHgsYS55PWUuc3RhcnR5LGEuY2xhc3M9ImFjdGl2YXRpb24iK2klMyxhLndpZHRoPWUuc3RvcHgtZS5zdGFydHgsYS5oZWlnaHQ9ci1lLnN0YXJ0eSxTTyhzLGEpfSwiZHJhd0FjdGl2YXRpb24iKSxTSGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtsZXR7Ym94TWFyZ2luOmksYm94VGV4dE1hcmdpbjphLGxhYmVsQm94SGVpZ2h0OnMsbGFiZWxCb3hXaWR0aDpsLG1lc3NhZ2VGb250RmFtaWx5OnUsbWVzc2FnZUZvbnRTaXplOmgsbWVzc2FnZUZvbnRXZWlnaHQ6Zn09bixkPXQuYXBwZW5kKCJnIikscD1vKGZ1bmN0aW9uKHksdix4LGIpe3JldHVybiBkLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIix5KS5hdHRyKCJ5MSIsdikuYXR0cigieDIiLHgpLmF0dHIoInkyIixiKS5hdHRyKCJjbGFzcyIsImxvb3BMaW5lIil9LCJkcmF3TG9vcExpbmUiKTtwKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdGFydHkpLHAoZS5zdG9weCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RvcHkpLHAoZS5zdGFydHgsZS5zdG9weSxlLnN0b3B4LGUuc3RvcHkpLHAoZS5zdGFydHgsZS5zdGFydHksZS5zdGFydHgsZS5zdG9weSksZS5zZWN0aW9ucyE9PXZvaWQgMCYmZS5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHkpe3AoZS5zdGFydHgseS55LGUuc3RvcHgseS55KS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKX0pO2xldCBtPVl5KCk7bS50ZXh0PXIsbS54PWUuc3RhcnR4LG0ueT1lLnN0YXJ0eSxtLmZvbnRGYW1pbHk9dSxtLmZvbnRTaXplPWgsbS5mb250V2VpZ2h0PWYsbS5hbmNob3I9Im1pZGRsZSIsbS52YWxpZ249Im1pZGRsZSIsbS50c3Bhbj0hMSxtLndpZHRoPWx8fDUwLG0uaGVpZ2h0PXN8fDIwLG0udGV4dE1hcmdpbj1hLG0uY2xhc3M9ImxhYmVsVGV4dCIsaWRlKGQsbSksbT1zZGUoKSxtLnRleHQ9ZS50aXRsZSxtLng9ZS5zdGFydHgrbC8yKyhlLnN0b3B4LWUuc3RhcnR4KS8yLG0ueT1lLnN0YXJ0eStpK2EsbS5hbmNob3I9Im1pZGRsZSIsbS52YWxpZ249Im1pZGRsZSIsbS50ZXh0TWFyZ2luPWEsbS5jbGFzcz0ibG9vcFRleHQiLG0uZm9udEZhbWlseT11LG0uZm9udFNpemU9aCxtLmZvbnRXZWlnaHQ9ZixtLndyYXA9ITA7bGV0IGc9cGkobS50ZXh0KT9hd2FpdCB3eChkLG0sZSk6RTAoZCxtKTtpZihlLnNlY3Rpb25UaXRsZXMhPT12b2lkIDApe2ZvcihsZXRbeSx2XW9mIE9iamVjdC5lbnRyaWVzKGUuc2VjdGlvblRpdGxlcykpaWYodi5tZXNzYWdlKXttLnRleHQ9di5tZXNzYWdlLG0ueD1lLnN0YXJ0eCsoZS5zdG9weC1lLnN0YXJ0eCkvMixtLnk9ZS5zZWN0aW9uc1t5XS55K2krYSxtLmNsYXNzPSJsb29wVGV4dCIsbS5hbmNob3I9Im1pZGRsZSIsbS52YWxpZ249Im1pZGRsZSIsbS50c3Bhbj0hMSxtLmZvbnRGYW1pbHk9dSxtLmZvbnRTaXplPWgsbS5mb250V2VpZ2h0PWYsbS53cmFwPWUud3JhcCxwaShtLnRleHQpPyhlLnN0YXJ0eT1lLnNlY3Rpb25zW3ldLnksYXdhaXQgd3goZCxtLGUpKTpFMChkLG0pO2xldCB4PU1hdGgucm91bmQoZy5tYXAoYj0+KGIuX2dyb3Vwc3x8YilbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChiLHcpPT5iK3cpKTtlLnNlY3Rpb25zW3ldLmhlaWdodCs9eC0oaSthKX19cmV0dXJuIGUuaGVpZ2h0PU1hdGgucm91bmQoZS5zdG9weS1lLnN0YXJ0eSksZH0sImRyYXdMb29wIiksYWRlPW8oZnVuY3Rpb24odCxlKXtZMyh0LGUpfSwiZHJhd0JhY2tncm91bmRSZWN0IiksQ0hlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LCJpbnNlcnREYXRhYmFzZUljb24iKSxBSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSwiaW5zZXJ0Q29tcHV0ZXJJY29uIiksX0hlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sImluc2VydENsb2NrSWNvbiIpLExIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDcuOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0by1zdGFydC1yZXZlcnNlIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gLTEgMCBMIDEwIDUgTCAwIDEwIHoiKX0sImluc2VydEFycm93SGVhZCIpLERIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTUuNSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sImluc2VydEFycm93RmlsbGVkSGVhZCIpLE5IZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sImluc2VydFNlcXVlbmNlTnVtYmVyIiksUkhlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiw0KS5hdHRyKCJyZWZZIiw0LjUpLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFwdCIpLmF0dHIoImQiLCJNIDEsMiBMIDYsNyBNIDYsMiBMIDEsNyIpfSwiaW5zZXJ0QXJyb3dDcm9zc0hlYWQiKSxzZGU9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH19LCJnZXRUZXh0T2JqIiksTUhlPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LCJnZXROb3RlUmVjdCIpLEFPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChhLHMsbCx1LGgsZixkKXtsZXQgcD1zLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGwraC8yKS5hdHRyKCJ5Iix1K2YvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGEpO2kocCxkKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoYSxzLGwsdSxoLGYsZCxwKXtsZXR7YWN0b3JGb250U2l6ZTptLGFjdG9yRm9udEZhbWlseTpnLGFjdG9yRm9udFdlaWdodDp5fT1wLFt2LHhdPUZvKG0pLGI9YS5zcGxpdChqZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB3PTA7dzxiLmxlbmd0aDt3Kyspe2xldCBfPXcqdi12KihiLmxlbmd0aC0xKS8yLFQ9cy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixsK2gvMikuYXR0cigieSIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIseCkuc3R5bGUoImZvbnQtd2VpZ2h0Iix5KS5zdHlsZSgiZm9udC1mYW1pbHkiLGcpO1QuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGwraC8yKS5hdHRyKCJkeSIsXykudGV4dChiW3ddKSxULmF0dHIoInkiLHUrZi8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksaShULGQpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGEscyxsLHUsaCxmLGQscCl7bGV0IG09cy5hcHBlbmQoInN3aXRjaCIpLHk9bS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixsKS5hdHRyKCJ5Iix1KS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt5LmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGEpLGUoYSxtLGwsdSxoLGYsZCxwKSxpKHksZCl9byhyLCJieUZvIik7YXN5bmMgZnVuY3Rpb24gbihhLHMsbCx1LGgsZixkLHApe2xldCBtPWF3YWl0IEtmKGEsU3IoKSksZz1zLmFwcGVuZCgic3dpdGNoIiksdj1nLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGwraC8yLW0ud2lkdGgvMikuYXR0cigieSIsdStmLzItbS5oZWlnaHQvMikuYXR0cigid2lkdGgiLG0ud2lkdGgpLmF0dHIoImhlaWdodCIsbS5oZWlnaHQpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7di5hcHBlbmQoImRpdiIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikuaHRtbChhd2FpdCBoaChhLFNyKCkpKSxlKGEsZyxsLHUsaCxmLGQscCksaSh2LGQpfW8obiwiYnlLYXRleCIpO2Z1bmN0aW9uIGkoYSxzKXtmb3IobGV0IGwgaW4gcylzLmhhc093blByb3BlcnR5KGwpJiZhLmF0dHIobCxzW2xdKX1yZXR1cm4gbyhpLCJfc2V0VGV4dEF0dHJzIiksZnVuY3Rpb24oYSxzPSExKXtyZXR1cm4gcz9uOmEudGV4dFBsYWNlbWVudD09PSJmbyI/cjphLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj90OmV9fSgpLElIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxhLHMsbCx1LGgsZil7bGV0IGQ9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnRleHQoaSk7bihkLGYpfW8odCwiYnlUZXh0Iik7ZnVuY3Rpb24gZShpLGEscyxsLHUsaCxmLGQpe2xldHthY3RvckZvbnRTaXplOnAsYWN0b3JGb250RmFtaWx5Om0sYWN0b3JGb250V2VpZ2h0Omd9PWQseT1pLnNwbGl0KGplLmxpbmVCcmVha1JlZ2V4KTtmb3IobGV0IHY9MDt2PHkubGVuZ3RoO3YrKyl7bGV0IHg9dipwLXAqKHkubGVuZ3RoLTEpLzIsYj1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMpLmF0dHIoInkiLGwpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iikuc3R5bGUoImZvbnQtc2l6ZSIscCkuc3R5bGUoImZvbnQtd2VpZ2h0IixnKS5zdHlsZSgiZm9udC1mYW1pbHkiLG0pO2IuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHMpLmF0dHIoImR5Iix4KS50ZXh0KHlbdl0pLGIuYXR0cigieSIsbCtoLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxuKGIsZil9fW8oZSwiYnlUc3BhbiIpO2Z1bmN0aW9uIHIoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgic3dpdGNoIiksZz1wLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLHMpLmF0dHIoInkiLGwpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGgpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2cuYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQoaSksZShpLHAscyxsLHUsaCxmLGQpLG4oZyxmKX1vKHIsImJ5Rm8iKTtmdW5jdGlvbiBuKGksYSl7Zm9yKGxldCBzIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShzKSYmaS5hdHRyKHMsYVtzXSl9cmV0dXJuIG8obiwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6aS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSx1aT17ZHJhd1JlY3Q6U08sZHJhd1RleHQ6RTAsZHJhd0xhYmVsOmlkZSxkcmF3QWN0b3I6d0hlLGRyYXdCb3g6VEhlLGRyYXdQb3B1cDp5SGUsYW5jaG9yRWxlbWVudDprSGUsZHJhd0FjdGl2YXRpb246RUhlLGRyYXdMb29wOlNIZSxkcmF3QmFja2dyb3VuZFJlY3Q6YWRlLGluc2VydEFycm93SGVhZDpMSGUsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOkRIZSxpbnNlcnRTZXF1ZW5jZU51bWJlcjpOSGUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6UkhlLGluc2VydERhdGFiYXNlSWNvbjpDSGUsaW5zZXJ0Q29tcHV0ZXJJY29uOkFIZSxpbnNlcnRDbG9ja0ljb246X0hlLGdldFRleHRPYmo6c2RlLGdldE5vdGVSZWN0Ok1IZSxmaXhMaWZlTGluZUhlaWdodHM6Q08sc2FuaXRpemVVcmw6RU8uc2FuaXRpemVVcmx9fSk7YXN5bmMgZnVuY3Rpb24gUEhlKHQsZSl7bnQuYnVtcFZlcnRpY2FsUG9zKDEwKTtsZXR7c3RhcnR4OnIsc3RvcHg6bixtZXNzYWdlOml9PWUsYT1qZS5zcGxpdEJyZWFrcyhpKS5sZW5ndGgscz1waShpKSxsPXM/YXdhaXQgS2YoaSxkZSgpKTpVdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpLFMwKExlKSk7aWYoIXMpe2xldCBkPWwuaGVpZ2h0L2E7ZS5oZWlnaHQrPWQsbnQuYnVtcFZlcnRpY2FsUG9zKGQpfWxldCB1LGg9bC5oZWlnaHQtMTAsZj1sLndpZHRoO2lmKHI9PT1uKXt1PW50LmdldFZlcnRpY2FsUG9zKCkraCxMZS5yaWdodEFuZ2xlc3x8KGgrPUxlLmJveE1hcmdpbix1PW50LmdldFZlcnRpY2FsUG9zKCkraCksaCs9MzA7bGV0IGQ9amUuZ2V0TWF4KGYvMixMZS53aWR0aC8yKTtudC5pbnNlcnQoci1kLG50LmdldFZlcnRpY2FsUG9zKCktMTAraCxuK2QsbnQuZ2V0VmVydGljYWxQb3MoKSszMCtoKX1lbHNlIGgrPUxlLmJveE1hcmdpbix1PW50LmdldFZlcnRpY2FsUG9zKCkraCxudC5pbnNlcnQocix1LTEwLG4sdSk7cmV0dXJuIG50LmJ1bXBWZXJ0aWNhbFBvcyhoKSxlLmhlaWdodCs9aCxlLnN0b3B5PWUuc3RhcnR5K2UuaGVpZ2h0LG50Lmluc2VydChlLmZyb21Cb3VuZHMsZS5zdGFydHksZS50b0JvdW5kcyxlLnN0b3B5KSx1fWZ1bmN0aW9uIHpjKHQsZSxyLG4saSl7bnQuYnVtcFZlcnRpY2FsUG9zKHIpO2xldCBhPW47aWYoZS5pZCYmZS5tZXNzYWdlJiZ0W2UuaWRdKXtsZXQgcz10W2UuaWRdLndpZHRoLGw9UzAoTGUpO2UubWVzc2FnZT1VdC53cmFwTGFiZWwoYFske2UubWVzc2FnZX1dYCxzLTIqTGUud3JhcFBhZGRpbmcsbCksZS53aWR0aD1zLGUud3JhcD0hMDtsZXQgdT1VdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhlLm1lc3NhZ2UsbCksaD1qZS5nZXRNYXgodS5oZWlnaHQsTGUubGFiZWxCb3hIZWlnaHQpO2E9bitoLFkuZGVidWcoYCR7aH0gLSAke2UubWVzc2FnZX1gKX1pKGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhhKX1mdW5jdGlvbiB6SGUodCxlLHIsbixpLGEscyl7ZnVuY3Rpb24gbChoLGYpe2gueDxpLmdldCh0LmZyb20pLng/KG50Lmluc2VydChlLnN0b3B4LWYsZS5zdGFydHksZS5zdGFydHgsZS5zdG9weStoLmhlaWdodC8yK0xlLm5vdGVNYXJnaW4pLGUuc3RvcHg9ZS5zdG9weCtmKToobnQuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgrZixlLnN0b3B5K2guaGVpZ2h0LzIrTGUubm90ZU1hcmdpbiksZS5zdG9weD1lLnN0b3B4LWYpfW8obCwicmVjZWl2ZXJBZGp1c3RtZW50Iik7ZnVuY3Rpb24gdShoLGYpe2gueDxpLmdldCh0LnRvKS54PyhudC5pbnNlcnQoZS5zdGFydHgtZixlLnN0YXJ0eSxlLnN0b3B4LGUuc3RvcHkraC5oZWlnaHQvMitMZS5ub3RlTWFyZ2luKSxlLnN0YXJ0eD1lLnN0YXJ0eCtmKToobnQuaW5zZXJ0KGUuc3RvcHgsZS5zdGFydHksZS5zdGFydHgrZixlLnN0b3B5K2guaGVpZ2h0LzIrTGUubm90ZU1hcmdpbiksZS5zdGFydHg9ZS5zdGFydHgtZil9aWYobyh1LCJzZW5kZXJBZGp1c3RtZW50IiksYS5nZXQodC50byk9PW4pe2xldCBoPWkuZ2V0KHQudG8pLGY9aC50eXBlPT0iYWN0b3IiP3BmLzIrMzpoLndpZHRoLzIrMztsKGgsZiksaC5zdGFydHk9ci1oLmhlaWdodC8yLG50LmJ1bXBWZXJ0aWNhbFBvcyhoLmhlaWdodC8yKX1lbHNlIGlmKHMuZ2V0KHQuZnJvbSk9PW4pe2xldCBoPWkuZ2V0KHQuZnJvbSk7aWYoTGUubWlycm9yQWN0b3JzKXtsZXQgZj1oLnR5cGU9PSJhY3RvciI/cGYvMjpoLndpZHRoLzI7dShoLGYpfWguc3RvcHk9ci1oLmhlaWdodC8yLG50LmJ1bXBWZXJ0aWNhbFBvcyhoLmhlaWdodC8yKX1lbHNlIGlmKHMuZ2V0KHQudG8pPT1uKXtsZXQgaD1pLmdldCh0LnRvKTtpZihMZS5taXJyb3JBY3RvcnMpe2xldCBmPWgudHlwZT09ImFjdG9yIj9wZi8yKzM6aC53aWR0aC8yKzM7bChoLGYpfWguc3RvcHk9ci1oLmhlaWdodC8yLG50LmJ1bXBWZXJ0aWNhbFBvcyhoLmhlaWdodC8yKX19YXN5bmMgZnVuY3Rpb24gJEhlKHQsZSxyKXtsZXQgbj17fTtmb3IobGV0IGkgb2YgZSlpZih0LmdldChpLnRvKSYmdC5nZXQoaS5mcm9tKSl7bGV0IGE9dC5nZXQoaS50byk7aWYoaS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5MRUZUT0YmJiFhLnByZXZBY3Rvcnx8aS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5SSUdIVE9GJiYhYS5uZXh0QWN0b3IpY29udGludWU7bGV0IHM9aS5wbGFjZW1lbnQhPT12b2lkIDAsbD0hcyx1PXM/RmcoTGUpOlMwKExlKSxoPWkud3JhcD9VdC53cmFwTGFiZWwoaS5tZXNzYWdlLExlLndpZHRoLTIqTGUud3JhcFBhZGRpbmcsdSk6aS5tZXNzYWdlLGQ9KHBpKGgpP2F3YWl0IEtmKGkubWVzc2FnZSxkZSgpKTpVdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhoLHUpKS53aWR0aCsyKkxlLndyYXBQYWRkaW5nO2wmJmkuZnJvbT09PWEubmV4dEFjdG9yP25baS50b109amUuZ2V0TWF4KG5baS50b118fDAsZCk6bCYmaS5mcm9tPT09YS5wcmV2QWN0b3I/bltpLmZyb21dPWplLmdldE1heChuW2kuZnJvbV18fDAsZCk6bCYmaS5mcm9tPT09aS50bz8obltpLmZyb21dPWplLmdldE1heChuW2kuZnJvbV18fDAsZC8yKSxuW2kudG9dPWplLmdldE1heChuW2kudG9dfHwwLGQvMikpOmkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuUklHSFRPRj9uW2kuZnJvbV09amUuZ2V0TWF4KG5baS5mcm9tXXx8MCxkKTppLnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULkxFRlRPRj9uW2EucHJldkFjdG9yXT1qZS5nZXRNYXgoblthLnByZXZBY3Rvcl18fDAsZCk6aS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5PVkVSJiYoYS5wcmV2QWN0b3ImJihuW2EucHJldkFjdG9yXT1qZS5nZXRNYXgoblthLnByZXZBY3Rvcl18fDAsZC8yKSksYS5uZXh0QWN0b3ImJihuW2kuZnJvbV09amUuZ2V0TWF4KG5baS5mcm9tXXx8MCxkLzIpKSl9cmV0dXJuIFkuZGVidWcoIm1heE1lc3NhZ2VXaWR0aFBlckFjdG9yOiIsbiksbn1hc3luYyBmdW5jdGlvbiBVSGUodCxlLHIpe2xldCBuPTA7Zm9yKGxldCBhIG9mIHQua2V5cygpKXtsZXQgcz10LmdldChhKTtzLndyYXAmJihzLmRlc2NyaXB0aW9uPVV0LndyYXBMYWJlbChzLmRlc2NyaXB0aW9uLExlLndpZHRoLTIqTGUud3JhcFBhZGRpbmcsX08oTGUpKSk7bGV0IGw9cGkocy5kZXNjcmlwdGlvbik/YXdhaXQgS2Yocy5kZXNjcmlwdGlvbixkZSgpKTpVdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhzLmRlc2NyaXB0aW9uLF9PKExlKSk7cy53aWR0aD1zLndyYXA/TGUud2lkdGg6amUuZ2V0TWF4KExlLndpZHRoLGwud2lkdGgrMipMZS53cmFwUGFkZGluZykscy5oZWlnaHQ9cy53cmFwP2plLmdldE1heChsLmhlaWdodCxMZS5oZWlnaHQpOkxlLmhlaWdodCxuPWplLmdldE1heChuLHMuaGVpZ2h0KX1mb3IobGV0IGEgaW4gZSl7bGV0IHM9dC5nZXQoYSk7aWYoIXMpY29udGludWU7bGV0IGw9dC5nZXQocy5uZXh0QWN0b3IpO2lmKCFsKXtsZXQgZD1lW2FdK0xlLmFjdG9yTWFyZ2luLXMud2lkdGgvMjtzLm1hcmdpbj1qZS5nZXRNYXgoZCxMZS5hY3Rvck1hcmdpbik7Y29udGludWV9bGV0IGg9ZVthXStMZS5hY3Rvck1hcmdpbi1zLndpZHRoLzItbC53aWR0aC8yO3MubWFyZ2luPWplLmdldE1heChoLExlLmFjdG9yTWFyZ2luKX1sZXQgaT0wO3JldHVybiByLmZvckVhY2goYT0+e2xldCBzPVMwKExlKSxsPWEuYWN0b3JLZXlzLnJlZHVjZSgoZixkKT0+Zis9dC5nZXQoZCkud2lkdGgrKHQuZ2V0KGQpLm1hcmdpbnx8MCksMCk7bC09MipMZS5ib3hUZXh0TWFyZ2luLGEud3JhcCYmKGEubmFtZT1VdC53cmFwTGFiZWwoYS5uYW1lLGwtMipMZS53cmFwUGFkZGluZyxzKSk7bGV0IHU9VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoYS5uYW1lLHMpO2k9amUuZ2V0TWF4KHUuaGVpZ2h0LGkpO2xldCBoPWplLmdldE1heChsLHUud2lkdGgrMipMZS53cmFwUGFkZGluZyk7aWYoYS5tYXJnaW49TGUuYm94VGV4dE1hcmdpbixsPGgpe2xldCBmPShoLWwpLzI7YS5tYXJnaW4rPWZ9fSksci5mb3JFYWNoKGE9PmEudGV4dE1heEhlaWdodD1pKSxqZS5nZXRNYXgobixMZS5oZWlnaHQpfXZhciBMZSxudCxPSGUsUzAsRmcsX08sQkhlLEZIZSxMTyxjZGUsdWRlLFRFLGxkZSxHSGUsVkhlLEhIZSxXSGUsWUhlLGhkZSxmZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO29kZSgpO2h0KCk7ZnIoKTtxeSgpO1Z0KCk7aXAoKTtocigpO25pKCk7TGU9e30sbnQ9e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10sYWN0aXZhdGlvbnM6W10sbW9kZWxzOntnZXRIZWlnaHQ6byhmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLHRoaXMuYWN0b3JzLmxlbmd0aD09PTA/WzBdOnRoaXMuYWN0b3JzLm1hcCh0PT50LmhlaWdodHx8MCkpKyh0aGlzLmxvb3BzLmxlbmd0aD09PTA/MDp0aGlzLmxvb3BzLm1hcCh0PT50LmhlaWdodHx8MCkucmVkdWNlKCh0LGUpPT50K2UpKSsodGhpcy5tZXNzYWdlcy5sZW5ndGg9PT0wPzA6dGhpcy5tZXNzYWdlcy5tYXAodD0+dC5oZWlnaHR8fDApLnJlZHVjZSgodCxlKT0+dCtlKSkrKHRoaXMubm90ZXMubGVuZ3RoPT09MD8wOnRoaXMubm90ZXMubWFwKHQ9PnQuaGVpZ2h0fHwwKS5yZWR1Y2UoKHQsZSk9PnQrZSkpfSwiZ2V0SGVpZ2h0IiksY2xlYXI6byhmdW5jdGlvbigpe3RoaXMuYWN0b3JzPVtdLHRoaXMuYm94ZXM9W10sdGhpcy5sb29wcz1bXSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMubm90ZXM9W119LCJjbGVhciIpLGFkZEJveDpvKGZ1bmN0aW9uKHQpe3RoaXMuYm94ZXMucHVzaCh0KX0sImFkZEJveCIpLGFkZEFjdG9yOm8oZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sImFkZEFjdG9yIiksYWRkTG9vcDpvKGZ1bmN0aW9uKHQpe3RoaXMubG9vcHMucHVzaCh0KX0sImFkZExvb3AiKSxhZGRNZXNzYWdlOm8oZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSwiYWRkTWVzc2FnZSIpLGFkZE5vdGU6byhmdW5jdGlvbih0KXt0aGlzLm5vdGVzLnB1c2godCl9LCJhZGROb3RlIiksbGFzdEFjdG9yOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSwibGFzdEFjdG9yIiksbGFzdExvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSwibGFzdExvb3AiKSxsYXN0TWVzc2FnZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGgtMV19LCJsYXN0TWVzc2FnZSIpLGxhc3ROb3RlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sImxhc3ROb3RlIiksYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0Om8oZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCx1ZGUoZGUoKSl9LCJpbml0IiksdXBkYXRlVmFsOm8oZnVuY3Rpb24odCxlLHIsbil7dFtlXT09PXZvaWQgMD90W2VdPXI6dFtlXT1uKHIsdFtlXSl9LCJ1cGRhdGVWYWwiKSx1cGRhdGVCb3VuZHM6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT10aGlzLGE9MDtmdW5jdGlvbiBzKGwpe3JldHVybiBvKGZ1bmN0aW9uKGgpe2ErKztsZXQgZj1pLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWErMTtpLnVwZGF0ZVZhbChoLCJzdGFydHkiLGUtZipMZS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKGgsInN0b3B5IixuK2YqTGUuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChudC5kYXRhLCJzdGFydHgiLHQtZipMZS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKG50LmRhdGEsInN0b3B4IixyK2YqTGUuYm94TWFyZ2luLE1hdGgubWF4KSxsIT09ImFjdGl2YXRpb24iJiYoaS51cGRhdGVWYWwoaCwic3RhcnR4Iix0LWYqTGUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChoLCJzdG9weCIscitmKkxlLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwobnQuZGF0YSwic3RhcnR5IixlLWYqTGUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChudC5kYXRhLCJzdG9weSIsbitmKkxlLmJveE1hcmdpbixNYXRoLm1heCkpfSwidXBkYXRlSXRlbUJvdW5kcyIpfW8ocywidXBkYXRlRm4iKSx0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChzKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChzKCJhY3RpdmF0aW9uIikpfSwidXBkYXRlQm91bmRzIiksaW5zZXJ0Om8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9amUuZ2V0TWluKHQsciksYT1qZS5nZXRNYXgodCxyKSxzPWplLmdldE1pbihlLG4pLGw9amUuZ2V0TWF4KGUsbik7dGhpcy51cGRhdGVWYWwobnQuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChudC5kYXRhLCJzdGFydHkiLHMsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKG50LmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChudC5kYXRhLCJzdG9weSIsbCxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxzLGEsbCl9LCJpbnNlcnQiKSxuZXdBY3RpdmF0aW9uOm8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIuZ2V0KHQuZnJvbSksaT1URSh0LmZyb20pLmxlbmd0aHx8MCxhPW4ueCtuLndpZHRoLzIrKGktMSkqTGUuYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6YSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OmErTGUuYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3Rvcjp0LmZyb20sYW5jaG9yZWQ6dWkuYW5jaG9yRWxlbWVudChlKX0pfSwibmV3QWN0aXZhdGlvbiIpLGVuZEFjdGl2YXRpb246byhmdW5jdGlvbih0KXtsZXQgZT10aGlzLmFjdGl2YXRpb25zLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5hY3Rvcn0pLmxhc3RJbmRleE9mKHQuZnJvbSk7cmV0dXJuIHRoaXMuYWN0aXZhdGlvbnMuc3BsaWNlKGUsMSlbMF19LCJlbmRBY3RpdmF0aW9uIiksY3JlYXRlTG9vcDpvKGZ1bmN0aW9uKHQ9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LCJjcmVhdGVMb29wIiksbmV3TG9vcDpvKGZ1bmN0aW9uKHQ9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlKXt0aGlzLnNlcXVlbmNlSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxvb3AodCxlKSl9LCJuZXdMb29wIiksZW5kTG9vcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKX0sImVuZExvb3AiKSxpc0xvb3BPdmVybGFwOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSwiaXNMb29wT3ZlcmxhcCIpLGFkZFNlY3Rpb25Ub0xvb3A6byhmdW5jdGlvbih0KXtsZXQgZT10aGlzLnNlcXVlbmNlSXRlbXMucG9wKCk7ZS5zZWN0aW9ucz1lLnNlY3Rpb25zfHxbXSxlLnNlY3Rpb25UaXRsZXM9ZS5zZWN0aW9uVGl0bGVzfHxbXSxlLnNlY3Rpb25zLnB1c2goe3k6bnQuZ2V0VmVydGljYWxQb3MoKSxoZWlnaHQ6MH0pLGUuc2VjdGlvblRpdGxlcy5wdXNoKHQpLHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKGUpfSwiYWRkU2VjdGlvblRvTG9vcCIpLHNhdmVWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LCJzYXZlVmVydGljYWxQb3MiKSxyZXNldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sInJlc2V0VmVydGljYWxQb3MiKSxidW1wVmVydGljYWxQb3M6byhmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9amUuZ2V0TWF4KHRoaXMuZGF0YS5zdG9weSx0aGlzLnZlcnRpY2FsUG9zKX0sImJ1bXBWZXJ0aWNhbFBvcyIpLGdldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sImdldFZlcnRpY2FsUG9zIiksZ2V0Qm91bmRzOm8oZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fSwiZ2V0Qm91bmRzIil9LE9IZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSl7bnQuYnVtcFZlcnRpY2FsUG9zKExlLmJveE1hcmdpbiksZS5oZWlnaHQ9TGUuYm94TWFyZ2luLGUuc3RhcnR5PW50LmdldFZlcnRpY2FsUG9zKCk7bGV0IHI9U2woKTtyLng9ZS5zdGFydHgsci55PWUuc3RhcnR5LHIud2lkdGg9ZS53aWR0aHx8TGUud2lkdGgsci5jbGFzcz0ibm90ZSI7bGV0IG49dC5hcHBlbmQoImciKSxpPXVpLmRyYXdSZWN0KG4sciksYT1ZeSgpO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS53aWR0aD1yLndpZHRoLGEuZHk9IjFlbSIsYS50ZXh0PWUubWVzc2FnZSxhLmNsYXNzPSJub3RlVGV4dCIsYS5mb250RmFtaWx5PUxlLm5vdGVGb250RmFtaWx5LGEuZm9udFNpemU9TGUubm90ZUZvbnRTaXplLGEuZm9udFdlaWdodD1MZS5ub3RlRm9udFdlaWdodCxhLmFuY2hvcj1MZS5ub3RlQWxpZ24sYS50ZXh0TWFyZ2luPUxlLm5vdGVNYXJnaW4sYS52YWxpZ249ImNlbnRlciI7bGV0IHM9cGkoYS50ZXh0KT9hd2FpdCB3eChuLGEpOkUwKG4sYSksbD1NYXRoLnJvdW5kKHMubWFwKHU9Pih1Ll9ncm91cHN8fHUpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgodSxoKT0+dStoKSk7aS5hdHRyKCJoZWlnaHQiLGwrMipMZS5ub3RlTWFyZ2luKSxlLmhlaWdodCs9bCsyKkxlLm5vdGVNYXJnaW4sbnQuYnVtcFZlcnRpY2FsUG9zKGwrMipMZS5ub3RlTWFyZ2luKSxlLnN0b3B5PWUuc3RhcnR5K2wrMipMZS5ub3RlTWFyZ2luLGUuc3RvcHg9ZS5zdGFydHgrci53aWR0aCxudC5pbnNlcnQoZS5zdGFydHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxudC5tb2RlbHMuYWRkTm90ZShlKX0sImRyYXdOb3RlIiksUzA9byh0PT4oe2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9KSwibWVzc2FnZUZvbnQiKSxGZz1vKHQ9Pih7Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH0pLCJub3RlRm9udCIpLF9PPW8odD0+KHtmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fSksImFjdG9yRm9udCIpO28oUEhlLCJib3VuZE1lc3NhZ2UiKTtCSGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtsZXR7c3RhcnR4Omksc3RvcHg6YSxzdGFydHk6cyxtZXNzYWdlOmwsdHlwZTp1LHNlcXVlbmNlSW5kZXg6aCxzZXF1ZW5jZVZpc2libGU6Zn09ZSxkPVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGwsUzAoTGUpKSxwPVl5KCk7cC54PWkscC55PXMrMTAscC53aWR0aD1hLWkscC5jbGFzcz0ibWVzc2FnZVRleHQiLHAuZHk9IjFlbSIscC50ZXh0PWwscC5mb250RmFtaWx5PUxlLm1lc3NhZ2VGb250RmFtaWx5LHAuZm9udFNpemU9TGUubWVzc2FnZUZvbnRTaXplLHAuZm9udFdlaWdodD1MZS5tZXNzYWdlRm9udFdlaWdodCxwLmFuY2hvcj1MZS5tZXNzYWdlQWxpZ24scC52YWxpZ249ImNlbnRlciIscC50ZXh0TWFyZ2luPUxlLndyYXBQYWRkaW5nLHAudHNwYW49ITEscGkocC50ZXh0KT9hd2FpdCB3eCh0LHAse3N0YXJ0eDppLHN0b3B4OmEsc3RhcnR5OnJ9KTpFMCh0LHApO2xldCBtPWQud2lkdGgsZztpPT09YT9MZS5yaWdodEFuZ2xlcz9nPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gICR7aX0sJHtyfSBIICR7aStqZS5nZXRNYXgoTGUud2lkdGgvMixtLzIpfSBWICR7cisyNX0gSCAke2l9YCk6Zz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIraSsiLCIrcisiIEMgIisoaSs2MCkrIiwiKyhyLTEwKSsiICIrKGkrNjApKyIsIisociszMCkrIiAiK2krIiwiKyhyKzIwKSk6KGc9dC5hcHBlbmQoImxpbmUiKSxnLmF0dHIoIngxIixpKSxnLmF0dHIoInkxIixyKSxnLmF0dHIoIngyIixhKSxnLmF0dHIoInkyIixyKSksdT09PW4uZGIuTElORVRZUEUuRE9UVEVEfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX09QRU58fHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEPyhnLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLGcuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTEiKSk6Zy5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMCIpO2xldCB5PSIiO0xlLmFycm93TWFya2VyQWJzb2x1dGUmJih5PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLHk9eS5yZXBsYWNlKC9cKC9nLCJcXCgiKSx5PXkucmVwbGFjZSgvXCkvZywiXFwpIikpLGcuYXR0cigic3Ryb2tlLXdpZHRoIiwyKSxnLmF0dHIoInN0cm9rZSIsIm5vbmUiKSxnLnN0eWxlKCJmaWxsIiwibm9uZSIpLCh1PT09bi5kYi5MSU5FVFlQRS5TT0xJRHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEKSYmZy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIreSsiI2Fycm93aGVhZCkiKSwodT09PW4uZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRHx8dT09PW4uZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURUQpJiYoZy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit5KyIjYXJyb3doZWFkKSIpLGcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNhcnJvd2hlYWQpIikpLCh1PT09bi5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UKSYmZy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIreSsiI2ZpbGxlZC1oZWFkKSIpLCh1PT09bi5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TU3x8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX0NST1NTKSYmZy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIreSsiI2Nyb3NzaGVhZCkiKSwoZnx8TGUuc2hvd1NlcXVlbmNlTnVtYmVycykmJihnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3krIiNzZXF1ZW5jZW51bWJlcikiKSx0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGkpLmF0dHIoInkiLHIrNCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwiMTJweCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzZXF1ZW5jZU51bWJlciIpLnRleHQoaCkpfSwiZHJhd01lc3NhZ2UiKSxGSGU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD0wLHU9MCxoLGY9MDtmb3IobGV0IGQgb2Ygbil7bGV0IHA9ZS5nZXQoZCksbT1wLmJveDtoJiZoIT1tJiYoc3x8bnQubW9kZWxzLmFkZEJveChoKSx1Kz1MZS5ib3hNYXJnaW4raC5tYXJnaW4pLG0mJm0hPWgmJihzfHwobS54PWwrdSxtLnk9aSksdSs9bS5tYXJnaW4pLHAud2lkdGg9cC53aWR0aHx8TGUud2lkdGgscC5oZWlnaHQ9amUuZ2V0TWF4KHAuaGVpZ2h0fHxMZS5oZWlnaHQsTGUuaGVpZ2h0KSxwLm1hcmdpbj1wLm1hcmdpbnx8TGUuYWN0b3JNYXJnaW4sZj1qZS5nZXRNYXgoZixwLmhlaWdodCksci5nZXQocC5uYW1lKSYmKHUrPXAud2lkdGgvMikscC54PWwrdSxwLnN0YXJ0eT1udC5nZXRWZXJ0aWNhbFBvcygpLG50Lmluc2VydChwLngsaSxwLngrcC53aWR0aCxwLmhlaWdodCksbCs9cC53aWR0aCt1LHAuYm94JiYocC5ib3gud2lkdGg9bCttLm1hcmdpbi1wLmJveC54KSx1PXAubWFyZ2luLGg9cC5ib3gsbnQubW9kZWxzLmFkZEFjdG9yKHApfWgmJiFzJiZudC5tb2RlbHMuYWRkQm94KGgpLG50LmJ1bXBWZXJ0aWNhbFBvcyhmKX0sImFkZEFjdG9yUmVuZGVyaW5nRGF0YSIpLExPPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7aWYobil7bGV0IGk9MDtudC5idW1wVmVydGljYWxQb3MoTGUuYm94TWFyZ2luKjIpO2ZvcihsZXQgYSBvZiByKXtsZXQgcz1lLmdldChhKTtzLnN0b3B5fHwocy5zdG9weT1udC5nZXRWZXJ0aWNhbFBvcygpKTtsZXQgbD1hd2FpdCB1aS5kcmF3QWN0b3IodCxzLExlLCEwKTtpPWplLmdldE1heChpLGwpfW50LmJ1bXBWZXJ0aWNhbFBvcyhpK0xlLmJveE1hcmdpbil9ZWxzZSBmb3IobGV0IGkgb2Ygcil7bGV0IGE9ZS5nZXQoaSk7YXdhaXQgdWkuZHJhd0FjdG9yKHQsYSxMZSwhMSl9fSwiZHJhd0FjdG9ycyIpLGNkZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPTAsYT0wO2ZvcihsZXQgcyBvZiByKXtsZXQgbD1lLmdldChzKSx1PVZIZShsKSxoPXVpLmRyYXdQb3B1cCh0LGwsdSxMZSxMZS5mb3JjZU1lbnVzLG4pO2guaGVpZ2h0PmkmJihpPWguaGVpZ2h0KSxoLndpZHRoK2wueD5hJiYoYT1oLndpZHRoK2wueCl9cmV0dXJue21heEhlaWdodDppLG1heFdpZHRoOmF9fSwiZHJhd0FjdG9yc1BvcHVwIiksdWRlPW8oZnVuY3Rpb24odCl7R24oTGUsdCksdC5mb250RmFtaWx5JiYoTGUuYWN0b3JGb250RmFtaWx5PUxlLm5vdGVGb250RmFtaWx5PUxlLm1lc3NhZ2VGb250RmFtaWx5PXQuZm9udEZhbWlseSksdC5mb250U2l6ZSYmKExlLmFjdG9yRm9udFNpemU9TGUubm90ZUZvbnRTaXplPUxlLm1lc3NhZ2VGb250U2l6ZT10LmZvbnRTaXplKSx0LmZvbnRXZWlnaHQmJihMZS5hY3RvckZvbnRXZWlnaHQ9TGUubm90ZUZvbnRXZWlnaHQ9TGUubWVzc2FnZUZvbnRXZWlnaHQ9dC5mb250V2VpZ2h0KX0sInNldENvbmYiKSxURT1vKGZ1bmN0aW9uKHQpe3JldHVybiBudC5hY3RpdmF0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0b3I9PT10fSl9LCJhY3RvckFjdGl2YXRpb25zIiksbGRlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLmdldCh0KSxuPVRFKHQpLGk9bi5yZWR1Y2UoZnVuY3Rpb24ocyxsKXtyZXR1cm4gamUuZ2V0TWluKHMsbC5zdGFydHgpfSxyLngrci53aWR0aC8yLTEpLGE9bi5yZWR1Y2UoZnVuY3Rpb24ocyxsKXtyZXR1cm4gamUuZ2V0TWF4KHMsbC5zdG9weCl9LHIueCtyLndpZHRoLzIrMSk7cmV0dXJuW2ksYV19LCJhY3RpdmF0aW9uQm91bmRzIik7byh6YywiYWRqdXN0TG9vcEhlaWdodEZvcldyYXAiKTtvKHpIZSwiYWRqdXN0Q3JlYXRlZERlc3Ryb3llZERhdGEiKTtHSGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtsZXR7c2VjdXJpdHlMZXZlbDppLHNlcXVlbmNlOmF9PWRlKCk7TGU9YTtsZXQgcztpPT09InNhbmRib3giJiYocz16ZSgiI2kiK2UpKTtsZXQgbD1pPT09InNhbmRib3giP3plKHMubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6emUoImJvZHkiKSx1PWk9PT0ic2FuZGJveCI/cy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtudC5pbml0KCksWS5kZWJ1ZyhuLmRiKTtsZXQgaD1pPT09InNhbmRib3giP2wuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApOnplKGBbaWQ9IiR7ZX0iXWApLGY9bi5kYi5nZXRBY3RvcnMoKSxkPW4uZGIuZ2V0Q3JlYXRlZEFjdG9ycygpLHA9bi5kYi5nZXREZXN0cm95ZWRBY3RvcnMoKSxtPW4uZGIuZ2V0Qm94ZXMoKSxnPW4uZGIuZ2V0QWN0b3JLZXlzKCkseT1uLmRiLmdldE1lc3NhZ2VzKCksdj1uLmRiLmdldERpYWdyYW1UaXRsZSgpLHg9bi5kYi5oYXNBdExlYXN0T25lQm94KCksYj1uLmRiLmhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUoKSx3PWF3YWl0ICRIZShmLHksbik7aWYoTGUuaGVpZ2h0PWF3YWl0IFVIZShmLHcsbSksdWkuaW5zZXJ0Q29tcHV0ZXJJY29uKGgpLHVpLmluc2VydERhdGFiYXNlSWNvbihoKSx1aS5pbnNlcnRDbG9ja0ljb24oaCkseCYmKG50LmJ1bXBWZXJ0aWNhbFBvcyhMZS5ib3hNYXJnaW4pLGImJm50LmJ1bXBWZXJ0aWNhbFBvcyhtWzBdLnRleHRNYXhIZWlnaHQpKSxMZS5oaWRlVW51c2VkUGFydGljaXBhbnRzPT09ITApe2xldCBGPW5ldyBTZXQ7eS5mb3JFYWNoKEI9PntGLmFkZChCLmZyb20pLEYuYWRkKEIudG8pfSksZz1nLmZpbHRlcihCPT5GLmhhcyhCKSl9RkhlKGgsZixkLGcsMCx5LCExKTtsZXQgXz1hd2FpdCBZSGUoeSxmLHcsbik7dWkuaW5zZXJ0QXJyb3dIZWFkKGgpLHVpLmluc2VydEFycm93Q3Jvc3NIZWFkKGgpLHVpLmluc2VydEFycm93RmlsbGVkSGVhZChoKSx1aS5pbnNlcnRTZXF1ZW5jZU51bWJlcihoKTtmdW5jdGlvbiBUKEYsQil7bGV0ICQ9bnQuZW5kQWN0aXZhdGlvbihGKTskLnN0YXJ0eSsxOD5CJiYoJC5zdGFydHk9Qi02LEIrPTEyKSx1aS5kcmF3QWN0aXZhdGlvbihoLCQsQixMZSxURShGLmZyb20pLmxlbmd0aCksbnQuaW5zZXJ0KCQuc3RhcnR4LEItMTAsJC5zdG9weCxCKX1vKFQsImFjdGl2ZUVuZCIpO2xldCBFPTEsTD0xLEM9W10sQT1bXSxJPTA7Zm9yKGxldCBGIG9mIHkpe2xldCBCLCQsejtzd2l0Y2goRi50eXBlKXtjYXNlIG4uZGIuTElORVRZUEUuTk9URTpudC5yZXNldFZlcnRpY2FsUG9zKCksJD1GLm5vdGVNb2RlbCxhd2FpdCBPSGUoaCwkKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUNUSVZFX1NUQVJUOm50Lm5ld0FjdGl2YXRpb24oRixoLGYpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOlQoRixudC5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuTE9PUF9TVEFSVDp6YyhfLEYsTGUuYm94TWFyZ2luLExlLmJveE1hcmdpbitMZS5ib3hUZXh0TWFyZ2luLFc9Pm50Lm5ld0xvb3AoVykpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5MT09QX0VORDpCPW50LmVuZExvb3AoKSxhd2FpdCB1aS5kcmF3TG9vcChoLEIsImxvb3AiLExlKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKSxudC5tb2RlbHMuYWRkTG9vcChCKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUkVDVF9TVEFSVDp6YyhfLEYsTGUuYm94TWFyZ2luLExlLmJveE1hcmdpbixXPT5udC5uZXdMb29wKHZvaWQgMCxXLm1lc3NhZ2UpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUkVDVF9FTkQ6Qj1udC5lbmRMb29wKCksQS5wdXNoKEIpLG50Lm1vZGVscy5hZGRMb29wKEIpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5PUFRfU1RBUlQ6emMoXyxGLExlLmJveE1hcmdpbixMZS5ib3hNYXJnaW4rTGUuYm94VGV4dE1hcmdpbixXPT5udC5uZXdMb29wKFcpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuT1BUX0VORDpCPW50LmVuZExvb3AoKSxhd2FpdCB1aS5kcmF3TG9vcChoLEIsIm9wdCIsTGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpLG50Lm1vZGVscy5hZGRMb29wKEIpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6emMoXyxGLExlLmJveE1hcmdpbixMZS5ib3hNYXJnaW4rTGUuYm94VGV4dE1hcmdpbixXPT5udC5uZXdMb29wKFcpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUxUX0VMU0U6emMoXyxGLExlLmJveE1hcmdpbitMZS5ib3hUZXh0TWFyZ2luLExlLmJveE1hcmdpbixXPT5udC5hZGRTZWN0aW9uVG9Mb29wKFcpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUxUX0VORDpCPW50LmVuZExvb3AoKSxhd2FpdCB1aS5kcmF3TG9vcChoLEIsImFsdCIsTGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpLG50Lm1vZGVscy5hZGRMb29wKEIpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOnpjKF8sRixMZS5ib3hNYXJnaW4sTGUuYm94TWFyZ2luK0xlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSksbnQuc2F2ZVZlcnRpY2FsUG9zKCk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9BTkQ6emMoXyxGLExlLmJveE1hcmdpbitMZS5ib3hUZXh0TWFyZ2luLExlLmJveE1hcmdpbixXPT5udC5hZGRTZWN0aW9uVG9Mb29wKFcpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUEFSX0VORDpCPW50LmVuZExvb3AoKSxhd2FpdCB1aS5kcmF3TG9vcChoLEIsInBhciIsTGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpLG50Lm1vZGVscy5hZGRMb29wKEIpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BVVRPTlVNQkVSOkU9Ri5tZXNzYWdlLnN0YXJ0fHxFLEw9Ri5tZXNzYWdlLnN0ZXB8fEwsRi5tZXNzYWdlLnZpc2libGU/bi5kYi5lbmFibGVTZXF1ZW5jZU51bWJlcnMoKTpuLmRiLmRpc2FibGVTZXF1ZW5jZU51bWJlcnMoKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6emMoXyxGLExlLmJveE1hcmdpbixMZS5ib3hNYXJnaW4rTGUuYm94VGV4dE1hcmdpbixXPT5udC5uZXdMb29wKFcpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOnpjKF8sRixMZS5ib3hNYXJnaW4rTGUuYm94VGV4dE1hcmdpbixMZS5ib3hNYXJnaW4sVz0+bnQuYWRkU2VjdGlvblRvTG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpCPW50LmVuZExvb3AoKSxhd2FpdCB1aS5kcmF3TG9vcChoLEIsImNyaXRpY2FsIixMZSksbnQuYnVtcFZlcnRpY2FsUG9zKEIuc3RvcHktbnQuZ2V0VmVydGljYWxQb3MoKSksbnQubW9kZWxzLmFkZExvb3AoQik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOnpjKF8sRixMZS5ib3hNYXJnaW4sTGUuYm94TWFyZ2luK0xlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpCPW50LmVuZExvb3AoKSxhd2FpdCB1aS5kcmF3TG9vcChoLEIsImJyZWFrIixMZSksbnQuYnVtcFZlcnRpY2FsUG9zKEIuc3RvcHktbnQuZ2V0VmVydGljYWxQb3MoKSksbnQubW9kZWxzLmFkZExvb3AoQik7YnJlYWs7ZGVmYXVsdDp0cnl7ej1GLm1zZ01vZGVsLHouc3RhcnR5PW50LmdldFZlcnRpY2FsUG9zKCksei5zZXF1ZW5jZUluZGV4PUUsei5zZXF1ZW5jZVZpc2libGU9bi5kYi5zaG93U2VxdWVuY2VOdW1iZXJzKCk7bGV0IFc9YXdhaXQgUEhlKGgseik7ekhlKEYseixXLEksZixkLHApLEMucHVzaCh7bWVzc2FnZU1vZGVsOnosbGluZVN0YXJ0WTpXfSksbnQubW9kZWxzLmFkZE1lc3NhZ2Uoeil9Y2F0Y2goVyl7WS5lcnJvcigiZXJyb3Igd2hpbGUgZHJhd2luZyBtZXNzYWdlIixXKX19W24uZGIuTElORVRZUEUuU09MSURfT1BFTixuLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLG4uZGIuTElORVRZUEUuU09MSUQsbi5kYi5MSU5FVFlQRS5ET1RURUQsbi5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxuLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxuLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULG4uZGIuTElORVRZUEUuRE9UVEVEX1BPSU5ULG4uZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRCxuLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXS5pbmNsdWRlcyhGLnR5cGUpJiYoRT1FK0wpLEkrK31ZLmRlYnVnKCJjcmVhdGVkQWN0b3JzIixkKSxZLmRlYnVnKCJkZXN0cm95ZWRBY3RvcnMiLHApLGF3YWl0IExPKGgsZixnLCExKTtmb3IobGV0IEYgb2YgQylhd2FpdCBCSGUoaCxGLm1lc3NhZ2VNb2RlbCxGLmxpbmVTdGFydFksbik7TGUubWlycm9yQWN0b3JzJiZhd2FpdCBMTyhoLGYsZywhMCksQS5mb3JFYWNoKEY9PnVpLmRyYXdCYWNrZ3JvdW5kUmVjdChoLEYpKSxDTyhoLGYsZyxMZSk7Zm9yKGxldCBGIG9mIG50Lm1vZGVscy5ib3hlcylGLmhlaWdodD1udC5nZXRWZXJ0aWNhbFBvcygpLUYueSxudC5pbnNlcnQoRi54LEYueSxGLngrRi53aWR0aCxGLmhlaWdodCksRi5zdGFydHg9Ri54LEYuc3RhcnR5PUYueSxGLnN0b3B4PUYuc3RhcnR4K0Yud2lkdGgsRi5zdG9weT1GLnN0YXJ0eStGLmhlaWdodCxGLnN0cm9rZT0icmdiKDAsMCwwLCAwLjUpIix1aS5kcmF3Qm94KGgsRixMZSk7eCYmbnQuYnVtcFZlcnRpY2FsUG9zKExlLmJveE1hcmdpbik7bGV0IEQ9Y2RlKGgsZixnLHUpLHtib3VuZHM6a309bnQuZ2V0Qm91bmRzKCk7ay5zdGFydHg9PT12b2lkIDAmJihrLnN0YXJ0eD0wKSxrLnN0YXJ0eT09PXZvaWQgMCYmKGsuc3RhcnR5PTApLGsuc3RvcHg9PT12b2lkIDAmJihrLnN0b3B4PTApLGsuc3RvcHk9PT12b2lkIDAmJihrLnN0b3B5PTApO2xldCBSPWsuc3RvcHktay5zdGFydHk7UjxELm1heEhlaWdodCYmKFI9RC5tYXhIZWlnaHQpO2xldCBTPVIrMipMZS5kaWFncmFtTWFyZ2luWTtMZS5taXJyb3JBY3RvcnMmJihTPVMtTGUuYm94TWFyZ2luK0xlLmJvdHRvbU1hcmdpbkFkaik7bGV0IE89ay5zdG9weC1rLnN0YXJ0eDtPPEQubWF4V2lkdGgmJihPPUQubWF4V2lkdGgpO2xldCBOPU8rMipMZS5kaWFncmFtTWFyZ2luWDt2JiZoLmFwcGVuZCgidGV4dCIpLnRleHQodikuYXR0cigieCIsKGsuc3RvcHgtay5zdGFydHgpLzItMipMZS5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSxacihoLFMsTixMZS51c2VNYXhXaWR0aCk7bGV0IFA9dj80MDowO2guYXR0cigidmlld0JveCIsay5zdGFydHgtTGUuZGlhZ3JhbU1hcmdpblgrIiAtIisoTGUuZGlhZ3JhbU1hcmdpblkrUCkrIiAiK04rIiAiKyhTK1ApKSxZLmRlYnVnKCJtb2RlbHM6IixudC5tb2RlbHMpfSwiZHJhdyIpO28oJEhlLCJnZXRNYXhNZXNzYWdlV2lkdGhQZXJBY3RvciIpO1ZIZT1vKGZ1bmN0aW9uKHQpe2xldCBlPTAscj1fTyhMZSk7Zm9yKGxldCBuIGluIHQubGlua3Mpe2xldCBhPVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG4scikud2lkdGgrMipMZS53cmFwUGFkZGluZysyKkxlLmJveE1hcmdpbjtlPGEmJihlPWEpfXJldHVybiBlfSwiZ2V0UmVxdWlyZWRQb3B1cFdpZHRoIik7byhVSGUsImNhbGN1bGF0ZUFjdG9yTWFyZ2lucyIpO0hIZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLmdldCh0LmZyb20pLGk9ZS5nZXQodC50byksYT1uLngscz1pLngsbD10LndyYXAmJnQubWVzc2FnZSx1PXBpKHQubWVzc2FnZSk/YXdhaXQgS2YodC5tZXNzYWdlLGRlKCkpOlV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGw/VXQud3JhcExhYmVsKHQubWVzc2FnZSxMZS53aWR0aCxGZyhMZSkpOnQubWVzc2FnZSxGZyhMZSkpLGg9e3dpZHRoOmw/TGUud2lkdGg6amUuZ2V0TWF4KExlLndpZHRoLHUud2lkdGgrMipMZS5ub3RlTWFyZ2luKSxoZWlnaHQ6MCxzdGFydHg6bi54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuUklHSFRPRj8oaC53aWR0aD1sP2plLmdldE1heChMZS53aWR0aCx1LndpZHRoKTpqZS5nZXRNYXgobi53aWR0aC8yK2kud2lkdGgvMix1LndpZHRoKzIqTGUubm90ZU1hcmdpbiksaC5zdGFydHg9YSsobi53aWR0aCtMZS5hY3Rvck1hcmdpbikvMik6dC5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5MRUZUT0Y/KGgud2lkdGg9bD9qZS5nZXRNYXgoTGUud2lkdGgsdS53aWR0aCsyKkxlLm5vdGVNYXJnaW4pOmplLmdldE1heChuLndpZHRoLzIraS53aWR0aC8yLHUud2lkdGgrMipMZS5ub3RlTWFyZ2luKSxoLnN0YXJ0eD1hLWgud2lkdGgrKG4ud2lkdGgtTGUuYWN0b3JNYXJnaW4pLzIpOnQudG89PT10LmZyb20/KHU9VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobD9VdC53cmFwTGFiZWwodC5tZXNzYWdlLGplLmdldE1heChMZS53aWR0aCxuLndpZHRoKSxGZyhMZSkpOnQubWVzc2FnZSxGZyhMZSkpLGgud2lkdGg9bD9qZS5nZXRNYXgoTGUud2lkdGgsbi53aWR0aCk6amUuZ2V0TWF4KG4ud2lkdGgsTGUud2lkdGgsdS53aWR0aCsyKkxlLm5vdGVNYXJnaW4pLGguc3RhcnR4PWErKG4ud2lkdGgtaC53aWR0aCkvMik6KGgud2lkdGg9TWF0aC5hYnMoYStuLndpZHRoLzItKHMraS53aWR0aC8yKSkrTGUuYWN0b3JNYXJnaW4saC5zdGFydHg9YTxzP2Erbi53aWR0aC8yLUxlLmFjdG9yTWFyZ2luLzI6cytpLndpZHRoLzItTGUuYWN0b3JNYXJnaW4vMiksbCYmKGgubWVzc2FnZT1VdC53cmFwTGFiZWwodC5tZXNzYWdlLGgud2lkdGgtMipMZS53cmFwUGFkZGluZyxGZyhMZSkpKSxZLmRlYnVnKGBOTTpbJHtoLnN0YXJ0eH0sJHtoLnN0b3B4fSwke2guc3RhcnR5fSwke2guc3RvcHl9OiR7aC53aWR0aH0sJHtoLmhlaWdodH09JHt0Lm1lc3NhZ2V9XWApLGh9LCJidWlsZE5vdGVNb2RlbCIpLFdIZT1vKGZ1bmN0aW9uKHQsZSxyKXtpZighW3IuZGIuTElORVRZUEUuU09MSURfT1BFTixyLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLHIuZGIuTElORVRZUEUuU09MSUQsci5kYi5MSU5FVFlQRS5ET1RURUQsci5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxyLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxyLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULHIuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5ULHIuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRCxyLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXS5pbmNsdWRlcyh0LnR5cGUpKXJldHVybnt9O2xldFtuLGldPWxkZSh0LmZyb20sZSksW2Esc109bGRlKHQudG8sZSksbD1uPD1hLHU9bD9pOm4saD1sP2E6cyxmPU1hdGguYWJzKGEtcyk+MixkPW8oeT0+bD8teTp5LCJhZGp1c3RWYWx1ZSIpO3QuZnJvbT09PXQudG8/aD11Oih0LmFjdGl2YXRlJiYhZiYmKGgrPWQoTGUuYWN0aXZhdGlvbldpZHRoLzItMSkpLFtyLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sci5kYi5MSU5FVFlQRS5ET1RURURfT1BFTl0uaW5jbHVkZXModC50eXBlKXx8KGgrPWQoMykpLFtyLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRF0uaW5jbHVkZXModC50eXBlKSYmKHUtPWQoMykpKTtsZXQgcD1bbixpLGEsc10sbT1NYXRoLmFicyh1LWgpO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPVV0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsamUuZ2V0TWF4KG0rMipMZS53cmFwUGFkZGluZyxMZS53aWR0aCksUzAoTGUpKSk7bGV0IGc9VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModC5tZXNzYWdlLFMwKExlKSk7cmV0dXJue3dpZHRoOmplLmdldE1heCh0LndyYXA/MDpnLndpZHRoKzIqTGUud3JhcFBhZGRpbmcsbSsyKkxlLndyYXBQYWRkaW5nLExlLndpZHRoKSxoZWlnaHQ6MCxzdGFydHg6dSxzdG9weDpoLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTp0Lm1lc3NhZ2UsdHlwZTp0LnR5cGUsd3JhcDp0LndyYXAsZnJvbUJvdW5kczpNYXRoLm1pbi5hcHBseShudWxsLHApLHRvQm91bmRzOk1hdGgubWF4LmFwcGx5KG51bGwscCl9fSwiYnVpbGRNZXNzYWdlTW9kZWwiKSxZSGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtsZXQgaT17fSxhPVtdLHMsbCx1O2ZvcihsZXQgaCBvZiB0KXtzd2l0Y2goaC5pZD1VdC5yYW5kb20oe2xlbmd0aDoxMH0pLGgudHlwZSl7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuT1BUX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6YS5wdXNoKHtpZDpoLmlkLG1zZzpoLm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfQU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046aC5tZXNzYWdlJiYocz1hLnBvcCgpLGlbcy5pZF09cyxpW2guaWRdPXMsYS5wdXNoKHMpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfRU5EOnM9YS5wb3AoKSxpW3MuaWRdPXM7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDp7bGV0IGQ9ZS5nZXQoaC5mcm9tP2guZnJvbTpoLnRvLmFjdG9yKSxwPVRFKGguZnJvbT9oLmZyb206aC50by5hY3RvcikubGVuZ3RoLG09ZC54K2Qud2lkdGgvMisocC0xKSpMZS5hY3RpdmF0aW9uV2lkdGgvMixnPXtzdGFydHg6bSxzdG9weDptK0xlLmFjdGl2YXRpb25XaWR0aCxhY3RvcjpoLmZyb20sZW5hYmxlZDohMH07bnQuYWN0aXZhdGlvbnMucHVzaChnKX1icmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUNUSVZFX0VORDp7bGV0IGQ9bnQuYWN0aXZhdGlvbnMubWFwKHA9PnAuYWN0b3IpLmxhc3RJbmRleE9mKGguZnJvbSk7bnQuYWN0aXZhdGlvbnMuc3BsaWNlKGQsMSkuc3BsaWNlKDAsMSl9YnJlYWt9aC5wbGFjZW1lbnQhPT12b2lkIDA/KGw9YXdhaXQgSEhlKGgsZSxuKSxoLm5vdGVNb2RlbD1sLGEuZm9yRWFjaChkPT57cz1kLHMuZnJvbT1qZS5nZXRNaW4ocy5mcm9tLGwuc3RhcnR4KSxzLnRvPWplLmdldE1heChzLnRvLGwuc3RhcnR4K2wud2lkdGgpLHMud2lkdGg9amUuZ2V0TWF4KHMud2lkdGgsTWF0aC5hYnMocy5mcm9tLXMudG8pKS1MZS5sYWJlbEJveFdpZHRofSkpOih1PVdIZShoLGUsbiksaC5tc2dNb2RlbD11LHUuc3RhcnR4JiZ1LnN0b3B4JiZhLmxlbmd0aD4wJiZhLmZvckVhY2goZD0+e2lmKHM9ZCx1LnN0YXJ0eD09PXUuc3RvcHgpe2xldCBwPWUuZ2V0KGguZnJvbSksbT1lLmdldChoLnRvKTtzLmZyb209amUuZ2V0TWluKHAueC11LndpZHRoLzIscC54LXAud2lkdGgvMixzLmZyb20pLHMudG89amUuZ2V0TWF4KG0ueCt1LndpZHRoLzIsbS54K3Aud2lkdGgvMixzLnRvKSxzLndpZHRoPWplLmdldE1heChzLndpZHRoLE1hdGguYWJzKHMudG8tcy5mcm9tKSktTGUubGFiZWxCb3hXaWR0aH1lbHNlIHMuZnJvbT1qZS5nZXRNaW4odS5zdGFydHgscy5mcm9tKSxzLnRvPWplLmdldE1heCh1LnN0b3B4LHMudG8pLHMud2lkdGg9amUuZ2V0TWF4KHMud2lkdGgsdS53aWR0aCktTGUubGFiZWxCb3hXaWR0aH0pKX1yZXR1cm4gbnQuYWN0aXZhdGlvbnM9W10sWS5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGkpLGl9LCJjYWxjdWxhdGVMb29wQm91bmRzIiksaGRlPXtib3VuZHM6bnQsZHJhd0FjdG9yczpMTyxkcmF3QWN0b3JzUG9wdXA6Y2RlLHNldENvbmY6dWRlLGRyYXc6R0hlfX0pO3ZhciBkZGU9e307dnIoZGRlLHtkaWFncmFtOigpPT5xSGV9KTt2YXIgcUhlLHBkZT1NKCgpPT57InVzZSBzdHJpY3QiO0hmZSgpO1pmZSgpO2VkZSgpO2ZkZSgpO3FIZT17cGFyc2VyOlVmZSxkYjprTyxyZW5kZXJlcjpoZGUsc3R5bGVzOkpmZSxpbml0Om8oKHt3cmFwOnR9KT0+e2tPLnNldFdyYXAodCl9LCJpbml0Iil9fSk7dmFyIERPLGtFLE5PPU0oKCk9PnsidXNlIHN0cmljdCI7RE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFgsZmUsaGUsZ2Upe2ZvcihoZT1oZXx8e30sZ2U9WC5sZW5ndGg7Z2UtLTtoZVtYW2dlXV09ZmUpO3JldHVybiBoZX0sIm8iKSxlPVsxLDE4XSxyPVsxLDE5XSxuPVsxLDIwXSxpPVsxLDQxXSxhPVsxLDQyXSxzPVsxLDI2XSxsPVsxLDI0XSx1PVsxLDI1XSxoPVsxLDMyXSxmPVsxLDMzXSxkPVsxLDM0XSxwPVsxLDQ1XSxtPVsxLDM1XSxnPVsxLDM2XSx5PVsxLDM3XSx2PVsxLDM4XSx4PVsxLDI3XSxiPVsxLDI4XSx3PVsxLDI5XSxfPVsxLDMwXSxUPVsxLDMxXSxFPVsxLDQ0XSxMPVsxLDQ2XSxDPVsxLDQzXSxBPVsxLDQ3XSxJPVsxLDldLEQ9WzEsOCw5XSxrPVsxLDU4XSxSPVsxLDU5XSxTPVsxLDYwXSxPPVsxLDYxXSxOPVsxLDYyXSxQPVsxLDYzXSxGPVsxLDY0XSxCPVsxLDgsOSw0MV0sJD1bMSw3Nl0sej1bMSw4LDksMTIsMTMsMjIsMzksNDEsNDQsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzcsNzldLFc9WzEsOCw5LDEyLDEzLDE3LDIwLDIyLDM5LDQxLDQ0LDQ4LDU4LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDc3LDc5LDg0LDk5LDEwMSwxMDJdLGo9WzEzLDU4LDg0LDk5LDEwMSwxMDJdLEs9WzEzLDU4LDcxLDcyLDg0LDk5LDEwMSwxMDJdLGllPVsxMyw1OCw2Niw2Nyw2OCw2OSw3MCw4NCw5OSwxMDEsMTAyXSxRPVsxLDk4XSxlZT1bMSwxMTVdLEo9WzEsMTA3XSxIPVsxLDExM10scT1bMSwxMDhdLFo9WzEsMTA5XSxhZT1bMSwxMTBdLHVlPVsxLDExMV0sY2U9WzEsMTEyXSx0ZT1bMSwxMTRdLERlPVsyMiw1OCw1OSw4MCw4NCw4NSw4Niw4Nyw4OCw4OV0sb2U9WzEsOCw5LDM5LDQxLDQ0XSxrZT1bMSw4LDksMjJdLEZlPVsxLDE0M10sQmU9WzEsOCw5LDU5XSxWZT1bMSw4LDksMjIsNTgsNTksODAsODQsODUsODYsODcsODgsODldLEdlPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixET1Q6MTcsY2xhc3NOYW1lOjE4LGNsYXNzTGl0ZXJhbE5hbWU6MTksR0VORVJJQ1RZUEU6MjAscmVsYXRpb25TdGF0ZW1lbnQ6MjEsTEFCRUw6MjIsbmFtZXNwYWNlU3RhdGVtZW50OjIzLGNsYXNzU3RhdGVtZW50OjI0LG1lbWJlclN0YXRlbWVudDoyNSxhbm5vdGF0aW9uU3RhdGVtZW50OjI2LGNsaWNrU3RhdGVtZW50OjI3LHN0eWxlU3RhdGVtZW50OjI4LGNzc0NsYXNzU3RhdGVtZW50OjI5LG5vdGVTdGF0ZW1lbnQ6MzAsY2xhc3NEZWZTdGF0ZW1lbnQ6MzEsZGlyZWN0aW9uOjMyLGFjY190aXRsZTozMyxhY2NfdGl0bGVfdmFsdWU6MzQsYWNjX2Rlc2NyOjM1LGFjY19kZXNjcl92YWx1ZTozNixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM3LG5hbWVzcGFjZUlkZW50aWZpZXI6MzgsU1RSVUNUX1NUQVJUOjM5LGNsYXNzU3RhdGVtZW50czo0MCxTVFJVQ1RfU1RPUDo0MSxOQU1FU1BBQ0U6NDIsY2xhc3NJZGVudGlmaWVyOjQzLFNUWUxFX1NFUEFSQVRPUjo0NCxtZW1iZXJzOjQ1LENMQVNTOjQ2LEFOTk9UQVRJT05fU1RBUlQ6NDcsQU5OT1RBVElPTl9FTkQ6NDgsTUVNQkVSOjQ5LFNFUEFSQVRPUjo1MCxyZWxhdGlvbjo1MSxOT1RFX0ZPUjo1Mixub3RlVGV4dDo1MyxOT1RFOjU0LENMQVNTREVGOjU1LGNsYXNzTGlzdDo1NixzdHlsZXNPcHQ6NTcsQUxQSEE6NTgsQ09NTUE6NTksZGlyZWN0aW9uX3RiOjYwLGRpcmVjdGlvbl9idDo2MSxkaXJlY3Rpb25fcmw6NjIsZGlyZWN0aW9uX2xyOjYzLHJlbGF0aW9uVHlwZTo2NCxsaW5lVHlwZTo2NSxBR0dSRUdBVElPTjo2NixFWFRFTlNJT046NjcsQ09NUE9TSVRJT046NjgsREVQRU5ERU5DWTo2OSxMT0xMSVBPUDo3MCxMSU5FOjcxLERPVFRFRF9MSU5FOjcyLENBTExCQUNLOjczLExJTks6NzQsTElOS19UQVJHRVQ6NzUsQ0xJQ0s6NzYsQ0FMTEJBQ0tfTkFNRTo3NyxDQUxMQkFDS19BUkdTOjc4LEhSRUY6NzksU1RZTEU6ODAsQ1NTQ0xBU1M6ODEsc3R5bGU6ODIsc3R5bGVDb21wb25lbnQ6ODMsTlVNOjg0LENPTE9OOjg1LFVOSVQ6ODYsU1BBQ0U6ODcsQlJLVDo4OCxQQ1Q6ODksY29tbWVudFRva2VuOjkwLHRleHRUb2tlbjo5MSxncmFwaENvZGVUb2tlbnM6OTIsdGV4dE5vVGFnc1Rva2VuOjkzLFRBR1NUQVJUOjk0LFRBR0VORDo5NSwiPT0iOjk2LCItLSI6OTcsREVGQVVMVDo5OCxNSU5VUzo5OSxrZXl3b3JkczoxMDAsVU5JQ09ERV9URVhUOjEwMSxCUVVPVEVfU1RSOjEwMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiQ0xBU1NfRElBR1JBTSIsODoiTkVXTElORSIsOToiRU9GIiwxMjoiU1FTIiwxMzoiU1RSIiwxNDoiU1FFIiwxNzoiRE9UIiwyMDoiR0VORVJJQ1RZUEUiLDIyOiJMQUJFTCIsMzM6ImFjY190aXRsZSIsMzQ6ImFjY190aXRsZV92YWx1ZSIsMzU6ImFjY19kZXNjciIsMzY6ImFjY19kZXNjcl92YWx1ZSIsMzc6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM5OiJTVFJVQ1RfU1RBUlQiLDQxOiJTVFJVQ1RfU1RPUCIsNDI6Ik5BTUVTUEFDRSIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkNMQVNTIiw0NzoiQU5OT1RBVElPTl9TVEFSVCIsNDg6IkFOTk9UQVRJT05fRU5EIiw0OToiTUVNQkVSIiw1MDoiU0VQQVJBVE9SIiw1MjoiTk9URV9GT1IiLDU0OiJOT1RFIiw1NToiQ0xBU1NERUYiLDU4OiJBTFBIQSIsNTk6IkNPTU1BIiw2MDoiZGlyZWN0aW9uX3RiIiw2MToiZGlyZWN0aW9uX2J0Iiw2MjoiZGlyZWN0aW9uX3JsIiw2MzoiZGlyZWN0aW9uX2xyIiw2NjoiQUdHUkVHQVRJT04iLDY3OiJFWFRFTlNJT04iLDY4OiJDT01QT1NJVElPTiIsNjk6IkRFUEVOREVOQ1kiLDcwOiJMT0xMSVBPUCIsNzE6IkxJTkUiLDcyOiJET1RURURfTElORSIsNzM6IkNBTExCQUNLIiw3NDoiTElOSyIsNzU6IkxJTktfVEFSR0VUIiw3NjoiQ0xJQ0siLDc3OiJDQUxMQkFDS19OQU1FIiw3ODoiQ0FMTEJBQ0tfQVJHUyIsNzk6IkhSRUYiLDgwOiJTVFlMRSIsODE6IkNTU0NMQVNTIiw4NDoiTlVNIiw4NToiQ09MT04iLDg2OiJVTklUIiw4NzoiU1BBQ0UiLDg4OiJCUktUIiw4OToiUENUIiw5MjoiZ3JhcGhDb2RlVG9rZW5zIiw5NDoiVEFHU1RBUlQiLDk1OiJUQUdFTkQiLDk2OiI9PSIsOTc6Ii0tIiw5ODoiREVGQVVMVCIsOTk6Ik1JTlVTIiwxMDA6ImtleXdvcmRzIiwxMDE6IlVOSUNPREVfVEVYVCIsMTAyOiJCUVVPVEVfU1RSIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs0LDFdLFs2LDRdLFs1LDFdLFs1LDJdLFs1LDNdLFsxMSwzXSxbMTUsMV0sWzE1LDNdLFsxNSwyXSxbMTgsMV0sWzE4LDNdLFsxOCwxXSxbMTgsMl0sWzE4LDJdLFsxOCwyXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMjMsNF0sWzIzLDVdLFszOCwyXSxbNDAsMV0sWzQwLDJdLFs0MCwzXSxbMjQsMV0sWzI0LDNdLFsyNCw0XSxbMjQsNl0sWzQzLDJdLFs0MywzXSxbMjYsNF0sWzQ1LDFdLFs0NSwyXSxbMjUsMV0sWzI1LDJdLFsyNSwxXSxbMjUsMV0sWzIxLDNdLFsyMSw0XSxbMjEsNF0sWzIxLDVdLFszMCwzXSxbMzAsMl0sWzMxLDNdLFs1NiwxXSxbNTYsM10sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFs1MSwzXSxbNTEsMl0sWzUxLDJdLFs1MSwxXSxbNjQsMV0sWzY0LDFdLFs2NCwxXSxbNjQsMV0sWzY0LDFdLFs2NSwxXSxbNjUsMV0sWzI3LDNdLFsyNyw0XSxbMjcsM10sWzI3LDRdLFsyNyw0XSxbMjcsNV0sWzI3LDNdLFsyNyw0XSxbMjcsNF0sWzI3LDVdLFsyNyw0XSxbMjcsNV0sWzI3LDVdLFsyNyw2XSxbMjgsM10sWzI5LDNdLFs1NywxXSxbNTcsM10sWzgyLDFdLFs4MiwyXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbOTAsMV0sWzkwLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTMsMV0sWzkzLDFdLFs5MywxXSxbOTMsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxOSwxXSxbNTMsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihmZSxoZSxnZSxuZSx5ZSxVLFRlKXt2YXIgc2U9VS5sZW5ndGgtMTtzd2l0Y2goeWUpe2Nhc2UgODp0aGlzLiQ9VVtzZS0xXTticmVhaztjYXNlIDk6Y2FzZSAxMjpjYXNlIDE0OnRoaXMuJD1VW3NlXTticmVhaztjYXNlIDEwOmNhc2UgMTM6dGhpcy4kPVVbc2UtMl0rIi4iK1Vbc2VdO2JyZWFrO2Nhc2UgMTE6Y2FzZSAxNTp0aGlzLiQ9VVtzZS0xXStVW3NlXTticmVhaztjYXNlIDE2OmNhc2UgMTc6dGhpcy4kPVVbc2UtMV0rIn4iK1Vbc2VdKyJ+IjticmVhaztjYXNlIDE4Om5lLmFkZFJlbGF0aW9uKFVbc2VdKTticmVhaztjYXNlIDE5OlVbc2UtMV0udGl0bGU9bmUuY2xlYW51cExhYmVsKFVbc2VdKSxuZS5hZGRSZWxhdGlvbihVW3NlLTFdKTticmVhaztjYXNlIDMwOnRoaXMuJD1VW3NlXS50cmltKCksbmUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMxOmNhc2UgMzI6dGhpcy4kPVVbc2VdLnRyaW0oKSxuZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzM6bmUuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKFVbc2UtM10sVVtzZS0xXSk7YnJlYWs7Y2FzZSAzNDpuZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoVVtzZS00XSxVW3NlLTFdKTticmVhaztjYXNlIDM1OnRoaXMuJD1VW3NlXSxuZS5hZGROYW1lc3BhY2UoVVtzZV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPVtVW3NlXV07YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9W1Vbc2UtMV1dO2JyZWFrO2Nhc2UgMzg6VVtzZV0udW5zaGlmdChVW3NlLTJdKSx0aGlzLiQ9VVtzZV07YnJlYWs7Y2FzZSA0MDpuZS5zZXRDc3NDbGFzcyhVW3NlLTJdLFVbc2VdKTticmVhaztjYXNlIDQxOm5lLmFkZE1lbWJlcnMoVVtzZS0zXSxVW3NlLTFdKTticmVhaztjYXNlIDQyOm5lLnNldENzc0NsYXNzKFVbc2UtNV0sVVtzZS0zXSksbmUuYWRkTWVtYmVycyhVW3NlLTVdLFVbc2UtMV0pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPVVbc2VdLG5lLmFkZENsYXNzKFVbc2VdKTticmVhaztjYXNlIDQ0OnRoaXMuJD1VW3NlLTFdLG5lLmFkZENsYXNzKFVbc2UtMV0pLG5lLnNldENsYXNzTGFiZWwoVVtzZS0xXSxVW3NlXSk7YnJlYWs7Y2FzZSA0NTpuZS5hZGRBbm5vdGF0aW9uKFVbc2VdLFVbc2UtMl0pO2JyZWFrO2Nhc2UgNDY6Y2FzZSA1OTp0aGlzLiQ9W1Vbc2VdXTticmVhaztjYXNlIDQ3OlVbc2VdLnB1c2goVVtzZS0xXSksdGhpcy4kPVVbc2VdO2JyZWFrO2Nhc2UgNDg6YnJlYWs7Y2FzZSA0OTpuZS5hZGRNZW1iZXIoVVtzZS0xXSxuZS5jbGVhbnVwTGFiZWwoVVtzZV0pKTticmVhaztjYXNlIDUwOmJyZWFrO2Nhc2UgNTE6YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9e2lkMTpVW3NlLTJdLGlkMjpVW3NlXSxyZWxhdGlvbjpVW3NlLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNTM6dGhpcy4kPXtpZDE6VVtzZS0zXSxpZDI6VVtzZV0scmVsYXRpb246VVtzZS0xXSxyZWxhdGlvblRpdGxlMTpVW3NlLTJdLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9e2lkMTpVW3NlLTNdLGlkMjpVW3NlXSxyZWxhdGlvbjpVW3NlLTJdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjpVW3NlLTFdfTticmVhaztjYXNlIDU1OnRoaXMuJD17aWQxOlVbc2UtNF0saWQyOlVbc2VdLHJlbGF0aW9uOlVbc2UtMl0scmVsYXRpb25UaXRsZTE6VVtzZS0zXSxyZWxhdGlvblRpdGxlMjpVW3NlLTFdfTticmVhaztjYXNlIDU2Om5lLmFkZE5vdGUoVVtzZV0sVVtzZS0xXSk7YnJlYWs7Y2FzZSA1NzpuZS5hZGROb3RlKFVbc2VdKTticmVhaztjYXNlIDU4OnRoaXMuJD1VW3NlLTJdLG5lLmRlZmluZUNsYXNzKFVbc2UtMV0sVVtzZV0pO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPVVbc2UtMl0uY29uY2F0KFtVW3NlXV0pO2JyZWFrO2Nhc2UgNjE6bmUuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNjI6bmUuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNjM6bmUuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNjQ6bmUuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPXt0eXBlMTpVW3NlLTJdLHR5cGUyOlVbc2VdLGxpbmVUeXBlOlVbc2UtMV19O2JyZWFrO2Nhc2UgNjY6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6VVtzZV0sbGluZVR5cGU6VVtzZS0xXX07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9e3R5cGUxOlVbc2UtMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOlVbc2VdfTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZTpVW3NlXX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9bmUucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPW5lLnJlbGF0aW9uVHlwZS5FWFRFTlNJT047YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9bmUucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPW5lLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPW5lLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDticmVhaztjYXNlIDc0OnRoaXMuJD1uZS5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPW5lLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNzY6Y2FzZSA4Mjp0aGlzLiQ9VVtzZS0yXSxuZS5zZXRDbGlja0V2ZW50KFVbc2UtMV0sVVtzZV0pO2JyZWFrO2Nhc2UgNzc6Y2FzZSA4Mzp0aGlzLiQ9VVtzZS0zXSxuZS5zZXRDbGlja0V2ZW50KFVbc2UtMl0sVVtzZS0xXSksbmUuc2V0VG9vbHRpcChVW3NlLTJdLFVbc2VdKTticmVhaztjYXNlIDc4OnRoaXMuJD1VW3NlLTJdLG5lLnNldExpbmsoVVtzZS0xXSxVW3NlXSk7YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9VVtzZS0zXSxuZS5zZXRMaW5rKFVbc2UtMl0sVVtzZS0xXSxVW3NlXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9VVtzZS0zXSxuZS5zZXRMaW5rKFVbc2UtMl0sVVtzZS0xXSksbmUuc2V0VG9vbHRpcChVW3NlLTJdLFVbc2VdKTticmVhaztjYXNlIDgxOnRoaXMuJD1VW3NlLTRdLG5lLnNldExpbmsoVVtzZS0zXSxVW3NlLTJdLFVbc2VdKSxuZS5zZXRUb29sdGlwKFVbc2UtM10sVVtzZS0xXSk7YnJlYWs7Y2FzZSA4NDp0aGlzLiQ9VVtzZS0zXSxuZS5zZXRDbGlja0V2ZW50KFVbc2UtMl0sVVtzZS0xXSxVW3NlXSk7YnJlYWs7Y2FzZSA4NTp0aGlzLiQ9VVtzZS00XSxuZS5zZXRDbGlja0V2ZW50KFVbc2UtM10sVVtzZS0yXSxVW3NlLTFdKSxuZS5zZXRUb29sdGlwKFVbc2UtM10sVVtzZV0pO2JyZWFrO2Nhc2UgODY6dGhpcy4kPVVbc2UtM10sbmUuc2V0TGluayhVW3NlLTJdLFVbc2VdKTticmVhaztjYXNlIDg3OnRoaXMuJD1VW3NlLTRdLG5lLnNldExpbmsoVVtzZS0zXSxVW3NlLTFdLFVbc2VdKTticmVhaztjYXNlIDg4OnRoaXMuJD1VW3NlLTRdLG5lLnNldExpbmsoVVtzZS0zXSxVW3NlLTFdKSxuZS5zZXRUb29sdGlwKFVbc2UtM10sVVtzZV0pO2JyZWFrO2Nhc2UgODk6dGhpcy4kPVVbc2UtNV0sbmUuc2V0TGluayhVW3NlLTRdLFVbc2UtMl0sVVtzZV0pLG5lLnNldFRvb2x0aXAoVVtzZS00XSxVW3NlLTFdKTticmVhaztjYXNlIDkwOnRoaXMuJD1VW3NlLTJdLG5lLnNldENzc1N0eWxlKFVbc2UtMV0sVVtzZV0pO2JyZWFrO2Nhc2UgOTE6bmUuc2V0Q3NzQ2xhc3MoVVtzZS0xXSxVW3NlXSk7YnJlYWs7Y2FzZSA5Mjp0aGlzLiQ9W1Vbc2VdXTticmVhaztjYXNlIDkzOlVbc2UtMl0ucHVzaChVW3NlXSksdGhpcy4kPVVbc2UtMl07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9VVtzZS0xXStVW3NlXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OlsxLDZdLDEwOjUsMTY6MzksMTg6MjEsMTk6NDAsMjE6NywyMzo4LDI0OjksMjU6MTAsMjY6MTEsMjc6MTIsMjg6MTMsMjk6MTQsMzA6MTUsMzE6MTYsMzI6MTcsMzM6ZSwzNTpyLDM3Om4sMzg6MjIsNDI6aSw0MzoyMyw0NjphLDQ3OnMsNDk6bCw1MDp1LDUyOmgsNTQ6Ziw1NTpkLDU4OnAsNjA6bSw2MTpnLDYyOnksNjM6diw3Mzp4LDc0OmIsNzY6dyw4MDpfLDgxOlQsODQ6RSw5OTpMLDEwMTpDLDEwMjpBfSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHQoSSxbMiw1XSx7ODpbMSw0OF19KSx7ODpbMSw0OV19LHQoRCxbMiwxOF0sezIyOlsxLDUwXX0pLHQoRCxbMiwyMF0pLHQoRCxbMiwyMV0pLHQoRCxbMiwyMl0pLHQoRCxbMiwyM10pLHQoRCxbMiwyNF0pLHQoRCxbMiwyNV0pLHQoRCxbMiwyNl0pLHQoRCxbMiwyN10pLHQoRCxbMiwyOF0pLHQoRCxbMiwyOV0pLHszNDpbMSw1MV19LHszNjpbMSw1Ml19LHQoRCxbMiwzMl0pLHQoRCxbMiw0OF0sezUxOjUzLDY0OjU2LDY1OjU3LDEzOlsxLDU0XSwyMjpbMSw1NV0sNjY6ayw2NzpSLDY4OlMsNjk6Tyw3MDpOLDcxOlAsNzI6Rn0pLHszOTpbMSw2NV19LHQoQixbMiwzOV0sezM5OlsxLDY3XSw0NDpbMSw2Nl19KSx0KEQsWzIsNTBdKSx0KEQsWzIsNTFdKSx7MTY6NjgsNTg6cCw4NDpFLDk5OkwsMTAxOkN9LHsxNjozOSwxODo2OSwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6QywxMDI6QX0sezE2OjM5LDE4OjcwLDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpDLDEwMjpBfSx7MTY6MzksMTg6NzEsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOkMsMTAyOkF9LHs1ODpbMSw3Ml19LHsxMzpbMSw3M119LHsxNjozOSwxODo3NCwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6QywxMDI6QX0sezEzOiQsNTM6NzV9LHs1Njo3Nyw1ODpbMSw3OF19LHQoRCxbMiw2MV0pLHQoRCxbMiw2Ml0pLHQoRCxbMiw2M10pLHQoRCxbMiw2NF0pLHQoeixbMiwxMl0sezE2OjM5LDE5OjQwLDE4OjgwLDE3OlsxLDc5XSwyMDpbMSw4MV0sNTg6cCw4NDpFLDk5OkwsMTAxOkMsMTAyOkF9KSx0KHosWzIsMTRdLHsyMDpbMSw4Ml19KSx7MTU6ODMsMTY6ODQsNTg6cCw4NDpFLDk5OkwsMTAxOkN9LHsxNjozOSwxODo4NSwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6QywxMDI6QX0sdChXLFsyLDExOF0pLHQoVyxbMiwxMTldKSx0KFcsWzIsMTIwXSksdChXLFsyLDEyMV0pLHQoWzEsOCw5LDEyLDEzLDIwLDIyLDM5LDQxLDQ0LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDc3LDc5XSxbMiwxMjJdKSx0KEksWzIsNl0sezEwOjUsMjE6NywyMzo4LDI0OjksMjU6MTAsMjY6MTEsMjc6MTIsMjg6MTMsMjk6MTQsMzA6MTUsMzE6MTYsMzI6MTcsMTg6MjEsMzg6MjIsNDM6MjMsMTY6MzksMTk6NDAsNTo4NiwzMzplLDM1OnIsMzc6biw0MjppLDQ2OmEsNDc6cyw0OTpsLDUwOnUsNTI6aCw1NDpmLDU1OmQsNTg6cCw2MDptLDYxOmcsNjI6eSw2Mzp2LDczOngsNzQ6Yiw3Njp3LDgwOl8sODE6VCw4NDpFLDk5OkwsMTAxOkMsMTAyOkF9KSx7NTo4NywxMDo1LDE2OjM5LDE4OjIxLDE5OjQwLDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDMzOmUsMzU6ciwzNzpuLDM4OjIyLDQyOmksNDM6MjMsNDY6YSw0NzpzLDQ5OmwsNTA6dSw1MjpoLDU0OmYsNTU6ZCw1ODpwLDYwOm0sNjE6Zyw2Mjp5LDYzOnYsNzM6eCw3NDpiLDc2OncsODA6Xyw4MTpULDg0OkUsOTk6TCwxMDE6QywxMDI6QX0sdChELFsyLDE5XSksdChELFsyLDMwXSksdChELFsyLDMxXSksezEzOlsxLDg5XSwxNjozOSwxODo4OCwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6QywxMDI6QX0sezUxOjkwLDY0OjU2LDY1OjU3LDY2OmssNjc6Uiw2ODpTLDY5Ok8sNzA6Tiw3MTpQLDcyOkZ9LHQoRCxbMiw0OV0pLHs2NTo5MSw3MTpQLDcyOkZ9LHQoaixbMiw2OF0sezY0OjkyLDY2OmssNjc6Uiw2ODpTLDY5Ok8sNzA6Tn0pLHQoSyxbMiw2OV0pLHQoSyxbMiw3MF0pLHQoSyxbMiw3MV0pLHQoSyxbMiw3Ml0pLHQoSyxbMiw3M10pLHQoaWUsWzIsNzRdKSx0KGllLFsyLDc1XSksezg6WzEsOTRdLDI0Ojk1LDQwOjkzLDQzOjIzLDQ2OmF9LHsxNjo5Niw1ODpwLDg0OkUsOTk6TCwxMDE6Q30sezQ1Ojk3LDQ5OlF9LHs0ODpbMSw5OV19LHsxMzpbMSwxMDBdfSx7MTM6WzEsMTAxXX0sezc3OlsxLDEwMl0sNzk6WzEsMTAzXX0sezIyOmVlLDU3OjEwNCw1ODpKLDgwOkgsODI6MTA1LDgzOjEwNiw4NDpxLDg1OlosODY6YWUsODc6dWUsODg6Y2UsODk6dGV9LHs1ODpbMSwxMTZdfSx7MTM6JCw1MzoxMTd9LHQoRCxbMiw1N10pLHQoRCxbMiwxMjNdKSx7MjI6ZWUsNTc6MTE4LDU4OkosNTk6WzEsMTE5XSw4MDpILDgyOjEwNSw4MzoxMDYsODQ6cSw4NTpaLDg2OmFlLDg3OnVlLDg4OmNlLDg5OnRlfSx0KERlLFsyLDU5XSksezE2OjM5LDE4OjEyMCwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6QywxMDI6QX0sdCh6LFsyLDE1XSksdCh6LFsyLDE2XSksdCh6LFsyLDE3XSksezM5OlsyLDM1XX0sezE1OjEyMiwxNjo4NCwxNzpbMSwxMjFdLDM5OlsyLDldLDU4OnAsODQ6RSw5OTpMLDEwMTpDfSx0KG9lLFsyLDQzXSx7MTE6MTIzLDEyOlsxLDEyNF19KSx0KEksWzIsN10pLHs5OlsxLDEyNV19LHQoa2UsWzIsNTJdKSx7MTY6MzksMTg6MTI2LDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpDLDEwMjpBfSx7MTM6WzEsMTI4XSwxNjozOSwxODoxMjcsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOkMsMTAyOkF9LHQoaixbMiw2N10sezY0OjEyOSw2NjprLDY3OlIsNjg6Uyw2OTpPLDcwOk59KSx0KGosWzIsNjZdKSx7NDE6WzEsMTMwXX0sezI0Ojk1LDQwOjEzMSw0MzoyMyw0NjphfSx7ODpbMSwxMzJdLDQxOlsyLDM2XX0sdChCLFsyLDQwXSx7Mzk6WzEsMTMzXX0pLHs0MTpbMSwxMzRdfSx7NDE6WzIsNDZdLDQ1OjEzNSw0OTpRfSx7MTY6MzksMTg6MTM2LDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpDLDEwMjpBfSx0KEQsWzIsNzZdLHsxMzpbMSwxMzddfSksdChELFsyLDc4XSx7MTM6WzEsMTM5XSw3NTpbMSwxMzhdfSksdChELFsyLDgyXSx7MTM6WzEsMTQwXSw3ODpbMSwxNDFdfSksezEzOlsxLDE0Ml19LHQoRCxbMiw5MF0sezU5OkZlfSksdChCZSxbMiw5Ml0sezgzOjE0NCwyMjplZSw1ODpKLDgwOkgsODQ6cSw4NTpaLDg2OmFlLDg3OnVlLDg4OmNlLDg5OnRlfSksdChWZSxbMiw5NF0pLHQoVmUsWzIsOTZdKSx0KFZlLFsyLDk3XSksdChWZSxbMiw5OF0pLHQoVmUsWzIsOTldKSx0KFZlLFsyLDEwMF0pLHQoVmUsWzIsMTAxXSksdChWZSxbMiwxMDJdKSx0KFZlLFsyLDEwM10pLHQoVmUsWzIsMTA0XSksdChELFsyLDkxXSksdChELFsyLDU2XSksdChELFsyLDU4XSx7NTk6RmV9KSx7NTg6WzEsMTQ1XX0sdCh6LFsyLDEzXSksezE1OjE0NiwxNjo4NCw1ODpwLDg0OkUsOTk6TCwxMDE6Q30sezM5OlsyLDExXX0sdChvZSxbMiw0NF0pLHsxMzpbMSwxNDddfSx7MTpbMiw0XX0sdChrZSxbMiw1NF0pLHQoa2UsWzIsNTNdKSx7MTY6MzksMTg6MTQ4LDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpDLDEwMjpBfSx0KGosWzIsNjVdKSx0KEQsWzIsMzNdKSx7NDE6WzEsMTQ5XX0sezI0Ojk1LDQwOjE1MCw0MTpbMiwzN10sNDM6MjMsNDY6YX0sezQ1OjE1MSw0OTpRfSx0KEIsWzIsNDFdKSx7NDE6WzIsNDddfSx0KEQsWzIsNDVdKSx0KEQsWzIsNzddKSx0KEQsWzIsNzldKSx0KEQsWzIsODBdLHs3NTpbMSwxNTJdfSksdChELFsyLDgzXSksdChELFsyLDg0XSx7MTM6WzEsMTUzXX0pLHQoRCxbMiw4Nl0sezEzOlsxLDE1NV0sNzU6WzEsMTU0XX0pLHsyMjplZSw1ODpKLDgwOkgsODI6MTU2LDgzOjEwNiw4NDpxLDg1OlosODY6YWUsODc6dWUsODg6Y2UsODk6dGV9LHQoVmUsWzIsOTVdKSx0KERlLFsyLDYwXSksezM5OlsyLDEwXX0sezE0OlsxLDE1N119LHQoa2UsWzIsNTVdKSx0KEQsWzIsMzRdKSx7NDE6WzIsMzhdfSx7NDE6WzEsMTU4XX0sdChELFsyLDgxXSksdChELFsyLDg1XSksdChELFsyLDg3XSksdChELFsyLDg4XSx7NzU6WzEsMTU5XX0pLHQoQmUsWzIsOTNdLHs4MzoxNDQsMjI6ZWUsNTg6Siw4MDpILDg0OnEsODU6Wiw4NjphZSw4Nzp1ZSw4ODpjZSw4OTp0ZX0pLHQob2UsWzIsOF0pLHQoQixbMiw0Ml0pLHQoRCxbMiw4OV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsM10sODM6WzIsMzVdLDEyMjpbMiwxMV0sMTI1OlsyLDRdLDEzNTpbMiw0N10sMTQ2OlsyLDEwXSwxNTA6WzIsMzhdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZmUsaGUpe2lmKGhlLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoZmUpO2Vsc2V7dmFyIGdlPW5ldyBFcnJvcihmZSk7dGhyb3cgZ2UuaGFzaD1oZSxnZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihmZSl7dmFyIGhlPXRoaXMsZ2U9WzBdLG5lPVtdLHllPVtudWxsXSxVPVtdLFRlPXRoaXMudGFibGUsc2U9IiIsRWU9MCxBZT0wLFBlPTAsTWU9MixtZT0xLFdlPVUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksUmU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx0dD17eXk6e319O2Zvcih2YXIgZ3QgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxndCkmJih0dC55eVtndF09dGhpcy55eVtndF0pO1JlLnNldElucHV0KGZlLHR0Lnl5KSx0dC55eS5sZXhlcj1SZSx0dC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgUmUueXlsbG9jPiJ1IiYmKFJlLnl5bGxvYz17fSk7dmFyIEV0PVJlLnl5bGxvYztVLnB1c2goRXQpO3ZhciB2dD1SZS5vcHRpb25zJiZSZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgdHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9dHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gWWUob3Ipe2dlLmxlbmd0aD1nZS5sZW5ndGgtMipvcix5ZS5sZW5ndGg9eWUubGVuZ3RoLW9yLFUubGVuZ3RoPVUubGVuZ3RoLW9yfW8oWWUsInBvcFN0YWNrIik7ZnVuY3Rpb24gVHQoKXt2YXIgb3I7cmV0dXJuIG9yPW5lLnBvcCgpfHxSZS5sZXgoKXx8bWUsdHlwZW9mIG9yIT0ibnVtYmVyIiYmKG9yIGluc3RhbmNlb2YgQXJyYXkmJihuZT1vcixvcj1uZS5wb3AoKSksb3I9aGUuc3ltYm9sc19bb3JdfHxvciksb3J9byhUdCwibGV4Iik7Zm9yKHZhciAkZSxydCxmdCxrdCxlcixkdCxYZT17fSxjdCxMdCxSdCx6dDs7KXtpZihmdD1nZVtnZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tmdF0/a3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1tmdF06KCgkZT09PW51bGx8fHR5cGVvZiAkZT4idSIpJiYoJGU9VHQoKSksa3Q9VGVbZnRdJiZUZVtmdF1bJGVdKSx0eXBlb2Yga3Q+InUifHwha3QubGVuZ3RofHwha3RbMF0pe3ZhciBYbj0iIjt6dD1bXTtmb3IoY3QgaW4gVGVbZnRdKXRoaXMudGVybWluYWxzX1tjdF0mJmN0Pk1lJiZ6dC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bY3RdKyInIik7UmUuc2hvd1Bvc2l0aW9uP1huPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEVlKzEpK2A6CmArUmUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt6dC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfWyRlXXx8JGUpKyInIjpYbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhFZSsxKSsiOiBVbmV4cGVjdGVkICIrKCRlPT1tZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1skZV18fCRlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihYbix7dGV4dDpSZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bJGVdfHwkZSxsaW5lOlJlLnl5bGluZW5vLGxvYzpFdCxleHBlY3RlZDp6dH0pfWlmKGt0WzBdaW5zdGFuY2VvZiBBcnJheSYma3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitmdCsiLCB0b2tlbjogIiskZSk7c3dpdGNoKGt0WzBdKXtjYXNlIDE6Z2UucHVzaCgkZSkseWUucHVzaChSZS55eXRleHQpLFUucHVzaChSZS55eWxsb2MpLGdlLnB1c2goa3RbMV0pLCRlPW51bGwscnQ/KCRlPXJ0LHJ0PW51bGwpOihBZT1SZS55eWxlbmcsc2U9UmUueXl0ZXh0LEVlPVJlLnl5bGluZW5vLEV0PVJlLnl5bGxvYyxQZT4wJiZQZS0tKTticmVhaztjYXNlIDI6aWYoTHQ9dGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzFdLFhlLiQ9eWVbeWUubGVuZ3RoLUx0XSxYZS5fJD17Zmlyc3RfbGluZTpVW1UubGVuZ3RoLShMdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOlVbVS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpVW1UubGVuZ3RoLShMdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpVW1UubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2dCYmKFhlLl8kLnJhbmdlPVtVW1UubGVuZ3RoLShMdHx8MSldLnJhbmdlWzBdLFVbVS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxkdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoWGUsW3NlLEFlLEVlLHR0Lnl5LGt0WzFdLHllLFVdLmNvbmNhdChXZSkpLHR5cGVvZiBkdDwidSIpcmV0dXJuIGR0O0x0JiYoZ2U9Z2Uuc2xpY2UoMCwtMSpMdCoyKSx5ZT15ZS5zbGljZSgwLC0xKkx0KSxVPVUuc2xpY2UoMCwtMSpMdCkpLGdlLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzBdKSx5ZS5wdXNoKFhlLiQpLFUucHVzaChYZS5fJCksUnQ9VGVbZ2VbZ2UubGVuZ3RoLTJdXVtnZVtnZS5sZW5ndGgtMV1dLGdlLnB1c2goUnQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxIZT1mdW5jdGlvbigpe3ZhciBYPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oaGUsZ2Upe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoaGUsZ2UpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGhlKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKGZlLGhlKXtyZXR1cm4gdGhpcy55eT1oZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9ZmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgZmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPWZlLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1mZSx0aGlzLm1hdGNoZWQrPWZlO3ZhciBoZT1mZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGhlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxmZX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihmZSl7dmFyIGhlPWZlLmxlbmd0aCxnZT1mZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWZlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1oZSksdGhpcy5vZmZzZXQtPWhlO3ZhciBuZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxnZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWdlLmxlbmd0aC0xKTt2YXIgeWU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmdlPyhnZS5sZW5ndGg9PT1uZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK25lW25lLmxlbmd0aC1nZS5sZW5ndGhdLmxlbmd0aC1nZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWhlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3llWzBdLHllWzBdK3RoaXMueXlsZW5nLWhlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oZmUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShmZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oZmUubGVuZ3RoPjIwPyIuLi4iOiIiKStmZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBmZT10aGlzLm1hdGNoO3JldHVybiBmZS5sZW5ndGg8MjAmJihmZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtZmUubGVuZ3RoKSksKGZlLnN1YnN0cigwLDIwKSsoZmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgZmU9dGhpcy5wYXN0SW5wdXQoKSxoZT1uZXcgQXJyYXkoZmUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gZmUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2hlKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihmZSxoZSl7dmFyIGdlLG5lLHllO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih5ZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih5ZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxuZT1mZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksbmUmJih0aGlzLnl5bGluZW5vKz1uZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpuZT9uZVtuZS5sZW5ndGgtMV0ubGVuZ3RoLW5lW25lLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2ZlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWZlWzBdLHRoaXMubWF0Y2grPWZlWzBdLHRoaXMubWF0Y2hlcz1mZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShmZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9ZmVbMF0sZ2U9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsaGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksZ2UpcmV0dXJuIGdlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBVIGluIHllKXRoaXNbVV09eWVbVV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGZlLGhlLGdlLG5lO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHllPXRoaXMuX2N1cnJlbnRSdWxlcygpLFU9MDtVPHllLmxlbmd0aDtVKyspaWYoZ2U9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t5ZVtVXV0pLGdlJiYoIWhlfHxnZVswXS5sZW5ndGg+aGVbMF0ubGVuZ3RoKSl7aWYoaGU9Z2UsbmU9VSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihmZT10aGlzLnRlc3RfbWF0Y2goZ2UseWVbVV0pLGZlIT09ITEpcmV0dXJuIGZlO2lmKHRoaXMuX2JhY2t0cmFjayl7aGU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaGU/KGZlPXRoaXMudGVzdF9tYXRjaChoZSx5ZVtuZV0pLGZlIT09ITE/ZmU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgaGU9dGhpcy5uZXh0KCk7cmV0dXJuIGhlfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihoZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGhlKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBoZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBoZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhoZXx8MCksaGU+PTA/dGhpcy5jb25kaXRpb25TdGFja1toZV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihoZSl7dGhpcy5iZWdpbihoZSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihoZSxnZSxuZSx5ZSl7dmFyIFU9eWU7c3dpdGNoKG5lKXtjYXNlIDA6cmV0dXJuIDYwO2Nhc2UgMTpyZXR1cm4gNjE7Y2FzZSAyOnJldHVybiA2MjtjYXNlIDM6cmV0dXJuIDYzO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMzticmVhaztjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM1O2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnJldHVybiA3O2Nhc2UgMTY6cmV0dXJuIDc7Y2FzZSAxNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAxODp0aGlzLmJlZ2luKCJjYWxsYmFja19uYW1lIik7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2tfYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDc3O2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDc4O2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIlNUUiI7Y2FzZSAyNjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnJldHVybiA4MDtjYXNlIDI4OnJldHVybiA1NTtjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UiKSw0MjticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksODticmVhaztjYXNlIDMxOmJyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZS1ib2R5IiksMzk7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQxO2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMzU6cmV0dXJuIDg7Y2FzZSAzNjpicmVhaztjYXNlIDM3OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDM4OnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcyIpLDQ2O2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2JyZWFrO2Nhc2UgNDA6YnJlYWs7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0MTticmVhaztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcy1ib2R5IiksMzk7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQxO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNDU6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgNDY6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDQ3OmJyZWFrO2Nhc2UgNDg6cmV0dXJuIk1FTUJFUiI7Y2FzZSA0OTpyZXR1cm4gODE7Y2FzZSA1MDpyZXR1cm4gNzM7Y2FzZSA1MTpyZXR1cm4gNzQ7Y2FzZSA1MjpyZXR1cm4gNzY7Y2FzZSA1MzpyZXR1cm4gNTI7Y2FzZSA1NDpyZXR1cm4gNTQ7Y2FzZSA1NTpyZXR1cm4gNDc7Y2FzZSA1NjpyZXR1cm4gNDg7Y2FzZSA1NzpyZXR1cm4gNzk7Y2FzZSA1ODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1OTpyZXR1cm4iR0VORVJJQ1RZUEUiO2Nhc2UgNjA6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgNjE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjI6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgNjM6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDY0OnJldHVybiA3NTtjYXNlIDY1OnJldHVybiA3NTtjYXNlIDY2OnJldHVybiA3NTtjYXNlIDY3OnJldHVybiA3NTtjYXNlIDY4OnJldHVybiA2NztjYXNlIDY5OnJldHVybiA2NztjYXNlIDcwOnJldHVybiA2OTtjYXNlIDcxOnJldHVybiA2OTtjYXNlIDcyOnJldHVybiA2ODtjYXNlIDczOnJldHVybiA2NjtjYXNlIDc0OnJldHVybiA3MDtjYXNlIDc1OnJldHVybiA3MTtjYXNlIDc2OnJldHVybiA3MjtjYXNlIDc3OnJldHVybiAyMjtjYXNlIDc4OnJldHVybiA0NDtjYXNlIDc5OnJldHVybiA5OTtjYXNlIDgwOnJldHVybiAxNztjYXNlIDgxOnJldHVybiJQTFVTIjtjYXNlIDgyOnJldHVybiA4NTtjYXNlIDgzOnJldHVybiA1OTtjYXNlIDg0OnJldHVybiA4ODtjYXNlIDg1OnJldHVybiA4ODtjYXNlIDg2OnJldHVybiA4OTtjYXNlIDg3OnJldHVybiJFUVVBTFMiO2Nhc2UgODg6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4OTpyZXR1cm4gNTg7Y2FzZSA5MDpyZXR1cm4gMTI7Y2FzZSA5MTpyZXR1cm4gMTQ7Y2FzZSA5MjpyZXR1cm4iUFVOQ1RVQVRJT04iO2Nhc2UgOTM6cmV0dXJuIDg0O2Nhc2UgOTQ6cmV0dXJuIDEwMTtjYXNlIDk1OnJldHVybiA4NztjYXNlIDk2OnJldHVybiA4NztjYXNlIDk3OnJldHVybiA5fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86XFtcKlxdKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86bmFtZXNwYWNlXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpcW1wqXF0pLywvXig/OmNsYXNzXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt9XSkvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxbXCpcXSkvLC9eKD86W3tdKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzpub3RlIGZvclxiKS8sL14oPzpub3RlXGIpLywvXig/Ojw8KS8sL14oPzo+PikvLC9eKD86aHJlZlxiKS8sL14oPzpbfl0pLywvXig/Oltefl0qKS8sL14oPzp+KS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpbYF0pLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/OlxzKlwoXCkpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86OikvLC9eKD86LCkvLC9eKD86IykvLC9eKD86IykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Im5hbWVzcGFjZS1ib2R5Ijp7cnVsZXM6WzI2LDMzLDM0LDM1LDM2LDM3LDM4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LG5hbWVzcGFjZTp7cnVsZXM6WzI2LDI5LDMwLDMxLDMyLDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LCJjbGFzcy1ib2R5Ijp7cnVsZXM6WzI2LDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGNsYXNzOntydWxlczpbMjYsMzksNDAsNDEsNDIsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyLDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzksMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNywyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxjYWxsYmFja19hcmdzOntydWxlczpbMjIsMjMsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfbmFtZTp7cnVsZXM6WzE5LDIwLDIxLDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxnZW5lcmljOntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sYnFzdHJpbmc6e3J1bGVzOlsyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNCwyNSwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDI2LDI3LDI4LDI5LDM4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFh9KCk7R2UubGV4ZXI9SGU7ZnVuY3Rpb24geGUoKXt0aGlzLnl5PXt9fXJldHVybiBvKHhlLCJQYXJzZXIiKSx4ZS5wcm90b3R5cGU9R2UsR2UuUGFyc2VyPXhlLG5ldyB4ZX0oKTtETy5wYXJzZXI9RE87a0U9RE99KTt2YXIgeWRlLFR4LHZkZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTt5ZGU9WyIjIiwiKyIsIn4iLCItIiwiIl0sVHg9Y2xhc3N7c3RhdGlje28odGhpcywiQ2xhc3NNZW1iZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMubWVtYmVyVHlwZT1yLHRoaXMudmlzaWJpbGl0eT0iIix0aGlzLmNsYXNzaWZpZXI9IiIsdGhpcy50ZXh0PSIiO2xldCBuPVRyKGUsZGUoKSk7dGhpcy5wYXJzZU1lbWJlcihuKX1nZXREaXNwbGF5RGV0YWlscygpe2xldCBlPXRoaXMudmlzaWJpbGl0eStvdSh0aGlzLmlkKTt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIiYmKGUrPWAoJHtvdSh0aGlzLnBhcmFtZXRlcnMudHJpbSgpKX0pYCx0aGlzLnJldHVyblR5cGUmJihlKz0iIDogIitvdSh0aGlzLnJldHVyblR5cGUpKSksZT1lLnRyaW0oKTtsZXQgcj10aGlzLnBhcnNlQ2xhc3NpZmllcigpO3JldHVybntkaXNwbGF5VGV4dDplLGNzc1N0eWxlOnJ9fXBhcnNlTWVtYmVyKGUpe2xldCByPSIiO2lmKHRoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiKXtsZXQgYT0vKFsjK34tXSk/KC4rKVwoKC4qKVwpKFtccyQqXSk/KC4qKShbJCpdKT8vLmV4ZWMoZSk7aWYoYSl7bGV0IHM9YVsxXT9hWzFdLnRyaW0oKToiIjtpZih5ZGUuaW5jbHVkZXMocykmJih0aGlzLnZpc2liaWxpdHk9cyksdGhpcy5pZD1hWzJdLHRoaXMucGFyYW1ldGVycz1hWzNdP2FbM10udHJpbSgpOiIiLHI9YVs0XT9hWzRdLnRyaW0oKToiIix0aGlzLnJldHVyblR5cGU9YVs1XT9hWzVdLnRyaW0oKToiIixyPT09IiIpe2xldCBsPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcodGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKTsvWyQqXS8uZXhlYyhsKSYmKHI9bCx0aGlzLnJldHVyblR5cGU9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZygwLHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSkpfX19ZWxzZXtsZXQgaT1lLmxlbmd0aCxhPWUuc3Vic3RyaW5nKDAsMSkscz1lLnN1YnN0cmluZyhpLTEpO3lkZS5pbmNsdWRlcyhhKSYmKHRoaXMudmlzaWJpbGl0eT1hKSwvWyQqXS8uZXhlYyhzKSYmKHI9cyksdGhpcy5pZD1lLnN1YnN0cmluZyh0aGlzLnZpc2liaWxpdHk9PT0iIj8wOjEscj09PSIiP2k6aS0xKX10aGlzLmNsYXNzaWZpZXI9cix0aGlzLmlkPXRoaXMuaWQuc3RhcnRzV2l0aCgiICIpPyIgIit0aGlzLmlkLnRyaW0oKTp0aGlzLmlkLnRyaW0oKTtsZXQgbj1gJHt0aGlzLnZpc2liaWxpdHk/IlxcIit0aGlzLnZpc2liaWxpdHk6IiJ9JHtvdSh0aGlzLmlkKX0ke3RoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiP2AoJHtvdSh0aGlzLnBhcmFtZXRlcnMpfSkke3RoaXMucmV0dXJuVHlwZT8iIDogIitvdSh0aGlzLnJldHVyblR5cGUpOiIifWA6IiJ9YDt0aGlzLnRleHQ9bi5yZXBsYWNlQWxsKCI8IiwiJmx0OyIpLnJlcGxhY2VBbGwoIj4iLCImZ3Q7IiksdGhpcy50ZXh0LnN0YXJ0c1dpdGgoIlxcJmx0OyIpJiYodGhpcy50ZXh0PXRoaXMudGV4dC5yZXBsYWNlKCJcXCZsdDsiLCJ+IikpfXBhcnNlQ2xhc3NpZmllcigpe3N3aXRjaCh0aGlzLmNsYXNzaWZpZXIpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fX19KTtmdW5jdGlvbiBUZGUodCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMDplPSJhZ2dyZWdhdGlvbiI7YnJlYWs7Y2FzZSAxOmU9ImV4dGVuc2lvbiI7YnJlYWs7Y2FzZSAyOmU9ImNvbXBvc2l0aW9uIjticmVhaztjYXNlIDM6ZT0iZGVwZW5kZW5jeSI7YnJlYWs7Y2FzZSA0OmU9ImxvbGxpcG9wIjticmVhaztkZWZhdWx0OmU9Im5vbmUifXJldHVybiBlfXZhciBFRSxTRSxMbix4ZGUsa3gsR2csYmRlLCRsLFJPLEV4LEMwLEEwLFFIZSx6Zyx3ZGUsa2RlLFpIZSxKSGUsZVdlLHRXZSxyV2UsbldlLGlXZSxFZGUsYVdlLHNXZSxvV2UsTU8sbFdlLGNXZSx1V2UsaFdlLGZXZSxkV2UscFdlLG1XZSxtZixTZGUsSU8sQ2RlLGdXZSx5V2UsdldlLHhXZSxiV2Usd1dlLFRXZSwkZyxPTz1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7aHQoKTtWdCgpO2ZyKCk7aHIoKTtraSgpO3ZkZSgpO0VFPSJjbGFzc0lkLSIsU0U9W10sTG49bmV3IE1hcCx4ZGU9bmV3IE1hcCxreD1bXSxHZz1bXSxiZGU9MCwkbD1uZXcgTWFwLFJPPTAsRXg9W10sQzA9byh0PT5qZS5zYW5pdGl6ZVRleHQodCxkZSgpKSwic2FuaXRpemVUZXh0IiksQTA9byhmdW5jdGlvbih0KXtsZXQgZT1qZS5zYW5pdGl6ZVRleHQodCxkZSgpKSxyPSIiLG49ZTtpZihlLmluZGV4T2YoIn4iKT4wKXtsZXQgaT1lLnNwbGl0KCJ+Iik7bj1DMChpWzBdKSxyPUMwKGlbMV0pfXJldHVybntjbGFzc05hbWU6bix0eXBlOnJ9fSwic3BsaXRDbGFzc05hbWVBbmRUeXBlIiksUUhlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1qZS5zYW5pdGl6ZVRleHQodCxkZSgpKTtlJiYoZT1DMChlKSk7bGV0e2NsYXNzTmFtZTpufT1BMChyKTtMbi5nZXQobikubGFiZWw9ZSxMbi5nZXQobikudGV4dD1gJHtlfSR7TG4uZ2V0KG4pLnR5cGU/YDwke0xuLmdldChuKS50eXBlfT5gOiIifWB9LCJzZXRDbGFzc0xhYmVsIiksemc9byhmdW5jdGlvbih0KXtsZXQgZT1qZS5zYW5pdGl6ZVRleHQodCxkZSgpKSx7Y2xhc3NOYW1lOnIsdHlwZTpufT1BMChlKTtpZihMbi5oYXMocikpcmV0dXJuO2xldCBpPWplLnNhbml0aXplVGV4dChyLGRlKCkpO0xuLnNldChpLHtpZDppLHR5cGU6bixsYWJlbDppLHRleHQ6YCR7aX0ke24/YCZsdDske259Jmd0O2A6IiJ9YCxzaGFwZToiY2xhc3NCb3giLGNzc0NsYXNzZXM6ImRlZmF1bHQiLG1ldGhvZHM6W10sbWVtYmVyczpbXSxhbm5vdGF0aW9uczpbXSxzdHlsZXM6W10sZG9tSWQ6RUUraSsiLSIrYmRlfSksYmRlKyt9LCJhZGRDbGFzcyIpLHdkZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e2lkOmBpbnRlcmZhY2Uke0dnLmxlbmd0aH1gLGxhYmVsOnQsY2xhc3NJZDplfTtHZy5wdXNoKHIpfSwiYWRkSW50ZXJmYWNlIiksa2RlPW8oZnVuY3Rpb24odCl7bGV0IGU9amUuc2FuaXRpemVUZXh0KHQsZGUoKSk7aWYoTG4uaGFzKGUpKXJldHVybiBMbi5nZXQoZSkuZG9tSWQ7dGhyb3cgbmV3IEVycm9yKCJDbGFzcyBub3QgZm91bmQ6ICIrZSl9LCJsb29rVXBEb21JZCIpLFpIZT1vKGZ1bmN0aW9uKCl7U0U9W10sTG49bmV3IE1hcCxreD1bXSxHZz1bXSxFeD1bXSxFeC5wdXNoKFNkZSksJGw9bmV3IE1hcCxSTz0wLElPPSJUQiIsX3IoKX0sImNsZWFyIiksSkhlPW8oZnVuY3Rpb24odCl7cmV0dXJuIExuLmdldCh0KX0sImdldENsYXNzIiksZVdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gTG59LCJnZXRDbGFzc2VzIiksdFdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gU0V9LCJnZXRSZWxhdGlvbnMiKSxyV2U9byhmdW5jdGlvbigpe3JldHVybiBreH0sImdldE5vdGVzIiksbldlPW8oZnVuY3Rpb24odCl7WS5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KHQpKTtsZXQgZT1bbWYuTE9MTElQT1AsbWYuQUdHUkVHQVRJT04sbWYuQ09NUE9TSVRJT04sbWYuREVQRU5ERU5DWSxtZi5FWFRFTlNJT05dO3QucmVsYXRpb24udHlwZTE9PT1tZi5MT0xMSVBPUCYmIWUuaW5jbHVkZXModC5yZWxhdGlvbi50eXBlMik/KHpnKHQuaWQyKSx3ZGUodC5pZDEsdC5pZDIpLHQuaWQxPWBpbnRlcmZhY2Uke0dnLmxlbmd0aC0xfWApOnQucmVsYXRpb24udHlwZTI9PT1tZi5MT0xMSVBPUCYmIWUuaW5jbHVkZXModC5yZWxhdGlvbi50eXBlMSk/KHpnKHQuaWQxKSx3ZGUodC5pZDIsdC5pZDEpLHQuaWQyPWBpbnRlcmZhY2Uke0dnLmxlbmd0aC0xfWApOih6Zyh0LmlkMSksemcodC5pZDIpKSx0LmlkMT1BMCh0LmlkMSkuY2xhc3NOYW1lLHQuaWQyPUEwKHQuaWQyKS5jbGFzc05hbWUsdC5yZWxhdGlvblRpdGxlMT1qZS5zYW5pdGl6ZVRleHQodC5yZWxhdGlvblRpdGxlMS50cmltKCksZGUoKSksdC5yZWxhdGlvblRpdGxlMj1qZS5zYW5pdGl6ZVRleHQodC5yZWxhdGlvblRpdGxlMi50cmltKCksZGUoKSksU0UucHVzaCh0KX0sImFkZFJlbGF0aW9uIiksaVdlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1BMCh0KS5jbGFzc05hbWU7TG4uZ2V0KHIpLmFubm90YXRpb25zLnB1c2goZSl9LCJhZGRBbm5vdGF0aW9uIiksRWRlPW8oZnVuY3Rpb24odCxlKXt6Zyh0KTtsZXQgcj1BMCh0KS5jbGFzc05hbWUsbj1Mbi5nZXQocik7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtsZXQgaT1lLnRyaW0oKTtpLnN0YXJ0c1dpdGgoIjw8IikmJmkuZW5kc1dpdGgoIj4+Iik/bi5hbm5vdGF0aW9ucy5wdXNoKEMwKGkuc3Vic3RyaW5nKDIsaS5sZW5ndGgtMikpKTppLmluZGV4T2YoIikiKT4wP24ubWV0aG9kcy5wdXNoKG5ldyBUeChpLCJtZXRob2QiKSk6aSYmbi5tZW1iZXJzLnB1c2gobmV3IFR4KGksImF0dHJpYnV0ZSIpKX19LCJhZGRNZW1iZXIiKSxhV2U9byhmdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJihlLnJldmVyc2UoKSxlLmZvckVhY2gocj0+RWRlKHQscikpKX0sImFkZE1lbWJlcnMiKSxzV2U9byhmdW5jdGlvbih0LGUpe2xldCByPXtpZDpgbm90ZSR7a3gubGVuZ3RofWAsY2xhc3M6ZSx0ZXh0OnR9O2t4LnB1c2gocil9LCJhZGROb3RlIiksb1dlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RhcnRzV2l0aCgiOiIpJiYodD10LnN1YnN0cmluZygxKSksQzAodC50cmltKCkpfSwiY2xlYW51cExhYmVsIiksTU89byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPXI7L1xkLy5leGVjKHJbMF0pJiYobj1FRStuKTtsZXQgaT1Mbi5nZXQobik7aSYmKGkuY3NzQ2xhc3Nlcys9IiAiK2UpfSl9LCJzZXRDc3NDbGFzcyIpLGxXZT1vKGZ1bmN0aW9uKHQsZSl7Zm9yKGxldCByIG9mIHQpe2xldCBuPXhkZS5nZXQocik7bj09PXZvaWQgMCYmKG49e2lkOnIsc3R5bGVzOltdLHRleHRTdHlsZXM6W119LHhkZS5zZXQocixuKSksZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKC9jb2xvci8uZXhlYyhpKSl7bGV0IGE9aS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIik7bi50ZXh0U3R5bGVzLnB1c2goYSl9bi5zdHlsZXMucHVzaChpKX0pLExuLmZvckVhY2goaT0+e2kuY3NzQ2xhc3Nlcy5pbmNsdWRlcyhyKSYmaS5zdHlsZXMucHVzaCguLi5lLmZsYXRNYXAoYT0+YS5zcGxpdCgiLCIpKSl9KX19LCJkZWZpbmVDbGFzcyIpLGNXZT1vKGZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocil7ZSE9PXZvaWQgMCYmKExuLmdldChyKS50b29sdGlwPUMwKGUpKX0pfSwic2V0VG9vbHRpcCIpLHVXZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUmJiRsLmhhcyhlKT8kbC5nZXQoZSkuY2xhc3Nlcy5nZXQodCkudG9vbHRpcDpMbi5nZXQodCkudG9vbHRpcH0sImdldFRvb2x0aXAiKSxoV2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49ZGUoKTt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihpKXtsZXQgYT1pOy9cZC8uZXhlYyhpWzBdKSYmKGE9RUUrYSk7bGV0IHM9TG4uZ2V0KGEpO3MmJihzLmxpbms9VXQuZm9ybWF0VXJsKGUsbiksbi5zZWN1cml0eUxldmVsPT09InNhbmRib3giP3MubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIHI9PSJzdHJpbmciP3MubGlua1RhcmdldD1DMChyKTpzLmxpbmtUYXJnZXQ9Il9ibGFuayIpfSksTU8odCwiY2xpY2thYmxlIil9LCJzZXRMaW5rIiksZldlPW8oZnVuY3Rpb24odCxlLHIpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2RXZShuLGUsciksTG4uZ2V0KG4pLmhhdmVDYWxsYmFjaz0hMH0pLE1PKHQsImNsaWNrYWJsZSIpfSwic2V0Q2xpY2tFdmVudCIpLGRXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1qZS5zYW5pdGl6ZVRleHQodCxkZSgpKTtpZihkZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxlPT09dm9pZCAwKXJldHVybjtsZXQgYT1uO2lmKExuLmhhcyhhKSl7bGV0IHM9a2RlKGEpLGw9W107aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsPXIuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBoPWxbdV0udHJpbSgpO2guc3RhcnRzV2l0aCgnIicpJiZoLmVuZHNXaXRoKCciJykmJihoPWguc3Vic3RyKDEsaC5sZW5ndGgtMikpLGxbdV09aH19bC5sZW5ndGg9PT0wJiZsLnB1c2gocyksRXgucHVzaChmdW5jdGlvbigpe2xldCB1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtzfSJdYCk7dSE9PW51bGwmJnUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7VXQucnVuRnVuYyhlLC4uLmwpfSwhMSl9KX19LCJzZXRDbGlja0Z1bmMiKSxwV2U9byhmdW5jdGlvbih0KXtFeC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UodCl9KX0sImJpbmRGdW5jdGlvbnMiKSxtV2U9e0xJTkU6MCxET1RURURfTElORToxfSxtZj17QUdHUkVHQVRJT046MCxFWFRFTlNJT046MSxDT01QT1NJVElPTjoyLERFUEVOREVOQ1k6MyxMT0xMSVBPUDo0fSxTZGU9byhmdW5jdGlvbih0KXtsZXQgZT16ZSgiLm1lcm1haWRUb29sdGlwIik7KGUuX2dyb3Vwc3x8ZSlbMF1bMF09PT1udWxsJiYoZT16ZSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksemUodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7bGV0IGk9emUodGhpcyk7aWYoaS5hdHRyKCJ0aXRsZSIpPT09bnVsbClyZXR1cm47bGV0IHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxlLnRleHQoaS5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrcy5sZWZ0KyhzLnJpZ2h0LXMubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStzLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxlLmh0bWwoZS5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLGkuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSx6ZSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9LCJzZXR1cFRvb2xUaXBzIik7RXgucHVzaChTZGUpO0lPPSJUQiIsQ2RlPW8oKCk9PklPLCJnZXREaXJlY3Rpb24iKSxnV2U9byh0PT57SU89dH0sInNldERpcmVjdGlvbiIpLHlXZT1vKGZ1bmN0aW9uKHQpeyRsLmhhcyh0KXx8KCRsLnNldCh0LHtpZDp0LGNsYXNzZXM6bmV3IE1hcCxjaGlsZHJlbjp7fSxkb21JZDpFRSt0KyItIitST30pLFJPKyspfSwiYWRkTmFtZXNwYWNlIiksdldlPW8oZnVuY3Rpb24odCl7cmV0dXJuICRsLmdldCh0KX0sImdldE5hbWVzcGFjZSIpLHhXZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICRsfSwiZ2V0TmFtZXNwYWNlcyIpLGJXZT1vKGZ1bmN0aW9uKHQsZSl7aWYoJGwuaGFzKHQpKWZvcihsZXQgciBvZiBlKXtsZXR7Y2xhc3NOYW1lOm59PUEwKHIpO0xuLmdldChuKS5wYXJlbnQ9dCwkbC5nZXQodCkuY2xhc3Nlcy5zZXQobixMbi5nZXQobikpfX0sImFkZENsYXNzZXNUb05hbWVzcGFjZSIpLHdXZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9TG4uZ2V0KHQpO2lmKCEoIWV8fCFyKSlmb3IobGV0IG4gb2YgZSluLmluY2x1ZGVzKCIsIik/ci5zdHlsZXMucHVzaCguLi5uLnNwbGl0KCIsIikpOnIuc3R5bGVzLnB1c2gobil9LCJzZXRDc3NTdHlsZSIpO28oVGRlLCJnZXRBcnJvd01hcmtlciIpO1RXZT1vKCgpPT57bGV0IHQ9W10sZT1bXSxyPWRlKCk7Zm9yKGxldCBpIG9mICRsLmtleXMoKSl7bGV0IGE9JGwuZ2V0KGkpO2lmKGEpe2xldCBzPXtpZDphLmlkLGxhYmVsOmEuaWQsaXNHcm91cDohMCxwYWRkaW5nOnIuY2xhc3MucGFkZGluZz8/MTYsc2hhcGU6InJlY3QiLGNzc1N0eWxlczpbImZpbGw6IG5vbmUiLCJzdHJva2U6IGJsYWNrIl0sbG9vazpyLmxvb2t9O3QucHVzaChzKX19Zm9yKGxldCBpIG9mIExuLmtleXMoKSl7bGV0IGE9TG4uZ2V0KGkpO2lmKGEpe2xldCBzPWE7cy5wYXJlbnRJZD1hLnBhcmVudCxzLmxvb2s9ci5sb29rLHQucHVzaChzKX19bGV0IG49MDtmb3IobGV0IGkgb2Yga3gpe24rKztsZXQgYT17aWQ6aS5pZCxsYWJlbDppLnRleHQsaXNHcm91cDohMSxzaGFwZToibm90ZSIscGFkZGluZzpyLmNsYXNzLnBhZGRpbmc/PzYsY3NzU3R5bGVzOlsidGV4dC1hbGlnbjogbGVmdCIsIndoaXRlLXNwYWNlOiBub3dyYXAiLGBmaWxsOiAke3IudGhlbWVWYXJpYWJsZXMubm90ZUJrZ0NvbG9yfWAsYHN0cm9rZTogJHtyLnRoZW1lVmFyaWFibGVzLm5vdGVCb3JkZXJDb2xvcn1gXSxsb29rOnIubG9va307dC5wdXNoKGEpO2xldCBzPUxuLmdldChpLmNsYXNzKT8uaWQ/PyIiO2lmKHMpe2xldCBsPXtpZDpgZWRnZU5vdGUke259YCxzdGFydDppLmlkLGVuZDpzLHR5cGU6Im5vcm1hbCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InJlbGF0aW9uIixhcnJvd1R5cGVTdGFydDoibm9uZSIsYXJyb3dUeXBlRW5kOiJub25lIixhcnJvd2hlYWRTdHlsZToiIixsYWJlbFN0eWxlOlsiIl0sc3R5bGU6WyJmaWxsOiBub25lIl0scGF0dGVybjoiZG90dGVkIixsb29rOnIubG9va307ZS5wdXNoKGwpfX1mb3IobGV0IGkgb2YgR2cpe2xldCBhPXtpZDppLmlkLGxhYmVsOmkubGFiZWwsaXNHcm91cDohMSxzaGFwZToicmVjdCIsY3NzU3R5bGVzOlsib3BhY2l0eTogMDsiXSxsb29rOnIubG9va307dC5wdXNoKGEpfW49MDtmb3IobGV0IGkgb2YgU0Upe24rKztsZXQgYT17aWQ6cDUoaS5pZDEsaS5pZDIse3ByZWZpeDoiaWQiLGNvdW50ZXI6bn0pLHN0YXJ0OmkuaWQxLGVuZDppLmlkMix0eXBlOiJub3JtYWwiLGxhYmVsOmkudGl0bGUsbGFiZWxwb3M6ImMiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJyZWxhdGlvbiIsYXJyb3dUeXBlU3RhcnQ6VGRlKGkucmVsYXRpb24udHlwZTEpLGFycm93VHlwZUVuZDpUZGUoaS5yZWxhdGlvbi50eXBlMiksc3RhcnRMYWJlbFJpZ2h0OmkucmVsYXRpb25UaXRsZTE9PT0ibm9uZSI/IiI6aS5yZWxhdGlvblRpdGxlMSxlbmRMYWJlbExlZnQ6aS5yZWxhdGlvblRpdGxlMj09PSJub25lIj8iIjppLnJlbGF0aW9uVGl0bGUyLGFycm93aGVhZFN0eWxlOiIiLGxhYmVsU3R5bGU6WyJkaXNwbGF5OiBpbmxpbmUtYmxvY2siXSxzdHlsZTppLnN0eWxlfHwiIixwYXR0ZXJuOmkucmVsYXRpb24ubGluZVR5cGU9PTE/ImRhc2hlZCI6InNvbGlkIixsb29rOnIubG9va307ZS5wdXNoKGEpfXJldHVybntub2Rlczp0LGVkZ2VzOmUsb3RoZXI6e30sY29uZmlnOnIsZGlyZWN0aW9uOkNkZSgpfX0sImdldERhdGEiKSwkZz17c2V0QWNjVGl0bGU6UnIsZ2V0QWNjVGl0bGU6UHIsZ2V0QWNjRGVzY3JpcHRpb246RnIsc2V0QWNjRGVzY3JpcHRpb246QnIsZ2V0Q29uZmlnOm8oKCk9PmRlKCkuY2xhc3MsImdldENvbmZpZyIpLGFkZENsYXNzOnpnLGJpbmRGdW5jdGlvbnM6cFdlLGNsZWFyOlpIZSxnZXRDbGFzczpKSGUsZ2V0Q2xhc3NlczplV2UsZ2V0Tm90ZXM6cldlLGFkZEFubm90YXRpb246aVdlLGFkZE5vdGU6c1dlLGdldFJlbGF0aW9uczp0V2UsYWRkUmVsYXRpb246bldlLGdldERpcmVjdGlvbjpDZGUsc2V0RGlyZWN0aW9uOmdXZSxhZGRNZW1iZXI6RWRlLGFkZE1lbWJlcnM6YVdlLGNsZWFudXBMYWJlbDpvV2UsbGluZVR5cGU6bVdlLHJlbGF0aW9uVHlwZTptZixzZXRDbGlja0V2ZW50OmZXZSxzZXRDc3NDbGFzczpNTyxkZWZpbmVDbGFzczpsV2Usc2V0TGluazpoV2UsZ2V0VG9vbHRpcDp1V2Usc2V0VG9vbHRpcDpjV2UsbG9va1VwRG9tSWQ6a2RlLHNldERpYWdyYW1UaXRsZTpsbixnZXREaWFncmFtVGl0bGU6SnIsc2V0Q2xhc3NMYWJlbDpRSGUsYWRkTmFtZXNwYWNlOnlXZSxhZGRDbGFzc2VzVG9OYW1lc3BhY2U6YldlLGdldE5hbWVzcGFjZTp2V2UsZ2V0TmFtZXNwYWNlczp4V2Usc2V0Q3NzU3R5bGU6d1dlLGdldERhdGE6VFdlfX0pO3ZhciBrV2UsQ0UsUE89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrV2U9byh0PT5gZy5jbGFzc0dyb3VwIHRleHQgewogIGZpbGw6ICR7dC5ub2RlQm9yZGVyfHx0LmNsYXNzVGV4dH07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgZm9udC1zaXplOiAxMHB4OwoKICAudGl0bGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICB9Cgp9Cgoubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHt0LmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9Owp9Ci5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke3QuY2xhc3NUZXh0fTsKfQoKLmxhYmVsQmtnIHsKICBiYWNrZ3JvdW5kOiAke3QubWFpbkJrZ307Cn0KLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7CiAgYmFja2dyb3VuZDogJHt0Lm1haW5Ca2d9Owp9CgouY2xhc3NUaXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKfQoubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCgouZGl2aWRlciB7CiAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgpnLmNsaWNrYWJsZSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgpnLmNsYXNzR3JvdXAgcmVjdCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9Owp9CgpnLmNsYXNzR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgouY2xhc3NMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBvcGFjaXR5OiAwLjU7Cn0KCi5jbGFzc0xhYmVsIC5sYWJlbCB7CiAgZmlsbDogJHt0Lm5vZGVCb3JkZXJ9OwogIGZvbnQtc2l6ZTogMTBweDsKfQoKLnJlbGF0aW9uIHsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9CgouZGFzaGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMzsKfQoKLmRvdHRlZC1saW5lewogIHN0cm9rZS1kYXNoYXJyYXk6IDEgMjsKfQoKI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojYWdncmVnYXRpb25TdGFydCwgLmFnZ3JlZ2F0aW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNsb2xsaXBvcFN0YXJ0LCAubG9sbGlwb3AgewogIGZpbGw6ICR7dC5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNsb2xsaXBvcEVuZCwgLmxvbGxpcG9wIHsKICBmaWxsOiAke3QubWFpbkJrZ30gIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgouZWRnZVRlcm1pbmFscyB7CiAgZm9udC1zaXplOiAxMXB4OwogIGxpbmUtaGVpZ2h0OiBpbml0aWFsOwp9CgouY2xhc3NUaXRsZVRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgZm9udC1zaXplOiAxOHB4OwogIGZpbGw6ICR7dC50ZXh0Q29sb3J9Owp9CmAsImdldFN0eWxlcyIpLENFPWtXZX0pO3ZhciBFV2UsU1dlLENXZSxBRSxCTz1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7aHQoKTtqNSgpO0Z2KCk7dVQoKTtocigpO0VXZT1vKCh0LGU9IlRCIik9PntpZighdC5kb2MpcmV0dXJuIGU7bGV0IHI9ZTtmb3IobGV0IG4gb2YgdC5kb2Mpbi5zdG10PT09ImRpciImJihyPW4udmFsdWUpO3JldHVybiByfSwiZ2V0RGlyIiksU1dlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksQ1dlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WS5pbmZvKCJSRUYwOiIpLFkuaW5mbygiRHJhd2luZyBjbGFzcyBkaWFncmFtICh2MykiLGUpO2xldHtzZWN1cml0eUxldmVsOmksc3RhdGU6YSxsYXlvdXQ6c309ZGUoKSxsPW4uZGIuZ2V0RGF0YSgpLHU9cG0oZSxpKTtsLnR5cGU9bi50eXBlLGwubGF5b3V0QWxnb3JpdGhtPWNUKHMpLGwubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGwucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGwubWFya2Vycz1bImFnZ3JlZ2F0aW9uIiwiZXh0ZW5zaW9uIiwiY29tcG9zaXRpb24iLCJkZXBlbmRlbmN5IiwibG9sbGlwb3AiXSxsLmRpYWdyYW1JZD1lLGF3YWl0IEZtKGwsdSk7bGV0IGg9ODtVdC5pbnNlcnRUaXRsZSh1LCJjbGFzc0RpYWdyYW1UaXRsZVRleHQiLGE/LnRpdGxlVG9wTWFyZ2luPz8yNSxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSx6bSh1LGgsImNsYXNzRGlhZ3JhbSIsYT8udXNlTWF4V2lkdGg/PyEwKX0sImRyYXciKSxBRT17Z2V0Q2xhc3NlczpTV2UsZHJhdzpDV2UsZ2V0RGlyOkVXZX19KTt2YXIgQWRlPXt9O3ZyKEFkZSx7ZGlhZ3JhbTooKT0+QVdlfSk7dmFyIEFXZSxfZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOTygpO09PKCk7UE8oKTtCTygpO0FXZT17cGFyc2VyOmtFLGRiOiRnLHJlbmRlcmVyOkFFLHN0eWxlczpDRSxpbml0Om8odD0+e3QuY2xhc3N8fCh0LmNsYXNzPXt9KSx0LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLCRnLmNsZWFyKCl9LCJpbml0Iil9fSk7dmFyIE5kZT17fTt2cihOZGUse2RpYWdyYW06KCk9Pk5XZX0pO3ZhciBOV2UsUmRlPU0oKCk9PnsidXNlIHN0cmljdCI7Tk8oKTtPTygpO1BPKCk7Qk8oKTtOV2U9e3BhcnNlcjprRSxkYjokZyxyZW5kZXJlcjpBRSxzdHlsZXM6Q0UsaW5pdDpvKHQ9Pnt0LmNsYXNzfHwodC5jbGFzcz17fSksdC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSwkZy5jbGVhcigpfSwiaW5pdCIpfX0pO3ZhciBGTyxfRSx6Tz1NKCgpPT57InVzZSBzdHJpY3QiO0ZPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihGLEIsJCx6KXtmb3IoJD0kfHx7fSx6PUYubGVuZ3RoO3otLTskW0Zbel1dPUIpO3JldHVybiAkfSwibyIpLGU9WzEsMl0scj1bMSwzXSxuPVsxLDRdLGk9WzIsNF0sYT1bMSw5XSxzPVsxLDExXSxsPVsxLDE2XSx1PVsxLDE3XSxoPVsxLDE4XSxmPVsxLDE5XSxkPVsxLDMyXSxwPVsxLDIwXSxtPVsxLDIxXSxnPVsxLDIyXSx5PVsxLDIzXSx2PVsxLDI0XSx4PVsxLDI2XSxiPVsxLDI3XSx3PVsxLDI4XSxfPVsxLDI5XSxUPVsxLDMwXSxFPVsxLDMxXSxMPVsxLDM0XSxDPVsxLDM1XSxBPVsxLDM2XSxJPVsxLDM3XSxEPVsxLDMzXSxrPVsxLDQsNSwxNiwxNywxOSwyMSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMywzNSwzNywzOCw0Miw0NSw0OCw0OSw1MCw1MSw1NF0sUj1bMSw0LDUsMTQsMTUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNDUsNDgsNDksNTAsNTEsNTRdLFM9WzQsNSwxNiwxNywxOSwyMSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMywzNSwzNywzOCw0Miw0NSw0OCw0OSw1MCw1MSw1NF0sTz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5MOjUsU0Q6Nixkb2N1bWVudDo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSxjbGFzc0RlZlN0YXRlbWVudDoxMCxzdHlsZVN0YXRlbWVudDoxMSxjc3NDbGFzc1N0YXRlbWVudDoxMixpZFN0YXRlbWVudDoxMyxERVNDUjoxNCwiLS0+IjoxNSxISURFX0VNUFRZOjE2LHNjYWxlOjE3LFdJRFRIOjE4LENPTVBPU0lUX1NUQVRFOjE5LFNUUlVDVF9TVEFSVDoyMCxTVFJVQ1RfU1RPUDoyMSxTVEFURV9ERVNDUjoyMixBUzoyMyxJRDoyNCxGT1JLOjI1LEpPSU46MjYsQ0hPSUNFOjI3LENPTkNVUlJFTlQ6Mjgsbm90ZToyOSxub3RlUG9zaXRpb246MzAsTk9URV9URVhUOjMxLGRpcmVjdGlvbjozMixhY2NfdGl0bGU6MzMsYWNjX3RpdGxlX3ZhbHVlOjM0LGFjY19kZXNjcjozNSxhY2NfZGVzY3JfdmFsdWU6MzYsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNyxjbGFzc0RlZjozOCxDTEFTU0RFRl9JRDozOSxDTEFTU0RFRl9TVFlMRU9QVFM6NDAsREVGQVVMVDo0MSxzdHlsZTo0MixTVFlMRV9JRFM6NDMsU1RZTEVERUZfU1RZTEVPUFRTOjQ0LGNsYXNzOjQ1LENMQVNTRU5USVRZX0lEUzo0NixTVFlMRUNMQVNTOjQ3LGRpcmVjdGlvbl90Yjo0OCxkaXJlY3Rpb25fYnQ6NDksZGlyZWN0aW9uX3JsOjUwLGRpcmVjdGlvbl9scjo1MSxlb2w6NTIsIjsiOjUzLEVER0VfU1RBVEU6NTQsU1RZTEVfU0VQQVJBVE9SOjU1LGxlZnRfb2Y6NTYscmlnaHRfb2Y6NTcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNjoiU0QiLDE0OiJERVNDUiIsMTU6Ii0tPiIsMTY6IkhJREVfRU1QVFkiLDE3OiJzY2FsZSIsMTg6IldJRFRIIiwxOToiQ09NUE9TSVRfU1RBVEUiLDIwOiJTVFJVQ1RfU1RBUlQiLDIxOiJTVFJVQ1RfU1RPUCIsMjI6IlNUQVRFX0RFU0NSIiwyMzoiQVMiLDI0OiJJRCIsMjU6IkZPUksiLDI2OiJKT0lOIiwyNzoiQ0hPSUNFIiwyODoiQ09OQ1VSUkVOVCIsMjk6Im5vdGUiLDMxOiJOT1RFX1RFWFQiLDMzOiJhY2NfdGl0bGUiLDM0OiJhY2NfdGl0bGVfdmFsdWUiLDM1OiJhY2NfZGVzY3IiLDM2OiJhY2NfZGVzY3JfdmFsdWUiLDM3OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzODoiY2xhc3NEZWYiLDM5OiJDTEFTU0RFRl9JRCIsNDA6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDE6IkRFRkFVTFQiLDQyOiJzdHlsZSIsNDM6IlNUWUxFX0lEUyIsNDQ6IlNUWUxFREVGX1NUWUxFT1BUUyIsNDU6ImNsYXNzIiw0NjoiQ0xBU1NFTlRJVFlfSURTIiw0NzoiU1RZTEVDTEFTUyIsNDg6ImRpcmVjdGlvbl90YiIsNDk6ImRpcmVjdGlvbl9idCIsNTA6ImRpcmVjdGlvbl9ybCIsNTE6ImRpcmVjdGlvbl9sciIsNTM6IjsiLDU0OiJFREdFX1NUQVRFIiw1NToiU1RZTEVfU0VQQVJBVE9SIiw1NjoibGVmdF9vZiIsNTc6InJpZ2h0X29mIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFs3LDBdLFs3LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDNdLFs5LDRdLFs5LDFdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDNdLFs5LDZdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFsxMCwzXSxbMTAsM10sWzExLDNdLFsxMiwzXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzUyLDFdLFs1MiwxXSxbMTMsMV0sWzEzLDFdLFsxMywzXSxbMTMsM10sWzMwLDFdLFszMCwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEIsJCx6LFcsaixLLGllKXt2YXIgUT1LLmxlbmd0aC0xO3N3aXRjaChqKXtjYXNlIDM6cmV0dXJuIFcuc2V0Um9vdERvYyhLW1FdKSxLW1FdO2JyZWFrO2Nhc2UgNDp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1OktbUV0hPSJubCImJihLW1EtMV0ucHVzaChLW1FdKSx0aGlzLiQ9S1tRLTFdKTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1LW1FdO2JyZWFrO2Nhc2UgODp0aGlzLiQ9Im5sIjticmVhaztjYXNlIDEyOnRoaXMuJD1LW1FdO2JyZWFrO2Nhc2UgMTM6bGV0IHE9S1tRLTFdO3EuZGVzY3JpcHRpb249Vy50cmltQ29sb24oS1tRXSksdGhpcy4kPXE7YnJlYWs7Y2FzZSAxNDp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6S1tRLTJdLHN0YXRlMjpLW1FdfTticmVhaztjYXNlIDE1OmxldCBaPVcudHJpbUNvbG9uKEtbUV0pO3RoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTpLW1EtM10sc3RhdGUyOktbUS0xXSxkZXNjcmlwdGlvbjpafTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOktbUS0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6S1tRLTFdfTticmVhaztjYXNlIDIwOnZhciBlZT1LW1FdLEo9S1tRLTJdLnRyaW0oKTtpZihLW1FdLm1hdGNoKCI6Iikpe3ZhciBIPUtbUV0uc3BsaXQoIjoiKTtlZT1IWzBdLEo9W0osSFsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6ZWUsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246Sn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpLW1EtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246S1tRLTVdLGRvYzpLW1EtMV19O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6S1tRXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpLW1FdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOktbUV0sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpXLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI2OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOktbUS0xXS50cmltKCksbm90ZTp7cG9zaXRpb246S1tRLTJdLnRyaW0oKSx0ZXh0OktbUV0udHJpbSgpfX07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9S1tRXS50cmltKCksVy5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp0aGlzLiQ9S1tRXS50cmltKCksVy5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzMzp0aGlzLiQ9e3N0bXQ6ImNsYXNzRGVmIixpZDpLW1EtMV0udHJpbSgpLGNsYXNzZXM6S1tRXS50cmltKCl9O2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPXtzdG10OiJzdHlsZSIsaWQ6S1tRLTFdLnRyaW0oKSxzdHlsZUNsYXNzOktbUV0udHJpbSgpfTticmVhaztjYXNlIDM1OnRoaXMuJD17c3RtdDoiYXBwbHlDbGFzcyIsaWQ6S1tRLTFdLnRyaW0oKSxzdHlsZUNsYXNzOktbUV0udHJpbSgpfTticmVhaztjYXNlIDM2Olcuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDM3Olcuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDM4Olcuc2V0RGlyZWN0aW9uKCJSTCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDM5Olcuc2V0RGlyZWN0aW9uKCJMUiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVhaztjYXNlIDQyOmNhc2UgNDM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6S1tRXS50cmltKCksdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6S1tRLTJdLnRyaW0oKSxjbGFzc2VzOltLW1FdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6S1tRLTJdLnRyaW0oKSxjbGFzc2VzOltLW1FdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6ZSw1OnIsNjpufSx7MTpbM119LHszOjUsNDplLDU6ciw2Om59LHszOjYsNDplLDU6ciw2Om59LHQoWzEsNCw1LDE2LDE3LDE5LDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDQ1LDQ4LDQ5LDUwLDUxLDU0XSxpLHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6YSw1OnMsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTM6MTUsMTY6bCwxNzp1LDE5OmgsMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6dywzODpfLDQyOlQsNDU6RSw0ODpMLDQ5OkMsNTA6QSw1MTpJLDU0OkR9LHQoayxbMiw1XSksezk6MzgsMTA6MTIsMTE6MTMsMTI6MTQsMTM6MTUsMTY6bCwxNzp1LDE5OmgsMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6dywzODpfLDQyOlQsNDU6RSw0ODpMLDQ5OkMsNTA6QSw1MTpJLDU0OkR9LHQoayxbMiw3XSksdChrLFsyLDhdKSx0KGssWzIsOV0pLHQoayxbMiwxMF0pLHQoayxbMiwxMV0pLHQoayxbMiwxMl0sezE0OlsxLDM5XSwxNTpbMSw0MF19KSx0KGssWzIsMTZdKSx7MTg6WzEsNDFdfSx0KGssWzIsMThdLHsyMDpbMSw0Ml19KSx7MjM6WzEsNDNdfSx0KGssWzIsMjJdKSx0KGssWzIsMjNdKSx0KGssWzIsMjRdKSx0KGssWzIsMjVdKSx7MzA6NDQsMzE6WzEsNDVdLDU2OlsxLDQ2XSw1NzpbMSw0N119LHQoayxbMiwyOF0pLHszNDpbMSw0OF19LHszNjpbMSw0OV19LHQoayxbMiwzMV0pLHszOTpbMSw1MF0sNDE6WzEsNTFdfSx7NDM6WzEsNTJdfSx7NDY6WzEsNTNdfSx0KFIsWzIsNDJdLHs1NTpbMSw1NF19KSx0KFIsWzIsNDNdLHs1NTpbMSw1NV19KSx0KGssWzIsMzZdKSx0KGssWzIsMzddKSx0KGssWzIsMzhdKSx0KGssWzIsMzldKSx0KGssWzIsNl0pLHQoayxbMiwxM10pLHsxMzo1NiwyNDpkLDU0OkR9LHQoayxbMiwxN10pLHQoUyxpLHs3OjU3fSksezI0OlsxLDU4XX0sezI0OlsxLDU5XX0sezIzOlsxLDYwXX0sezI0OlsyLDQ2XX0sezI0OlsyLDQ3XX0sdChrLFsyLDI5XSksdChrLFsyLDMwXSksezQwOlsxLDYxXX0sezQwOlsxLDYyXX0sezQ0OlsxLDYzXX0sezQ3OlsxLDY0XX0sezI0OlsxLDY1XX0sezI0OlsxLDY2XX0sdChrLFsyLDE0XSx7MTQ6WzEsNjddfSksezQ6YSw1OnMsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTM6MTUsMTY6bCwxNzp1LDE5OmgsMjE6WzEsNjhdLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OncsMzg6Xyw0MjpULDQ1OkUsNDg6TCw0OTpDLDUwOkEsNTE6SSw1NDpEfSx0KGssWzIsMjBdLHsyMDpbMSw2OV19KSx7MzE6WzEsNzBdfSx7MjQ6WzEsNzFdfSx0KGssWzIsMzJdKSx0KGssWzIsMzNdKSx0KGssWzIsMzRdKSx0KGssWzIsMzVdKSx0KFIsWzIsNDRdKSx0KFIsWzIsNDVdKSx0KGssWzIsMTVdKSx0KGssWzIsMTldKSx0KFMsaSx7Nzo3Mn0pLHQoayxbMiwyNl0pLHQoayxbMiwyN10pLHs0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIxOlsxLDczXSwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzp3LDM4Ol8sNDI6VCw0NTpFLDQ4OkwsNDk6Qyw1MDpBLDUxOkksNTQ6RH0sdChrLFsyLDIxXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDY6WzIsNDZdLDQ3OlsyLDQ3XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEIsJCl7aWYoJC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEIpO2Vsc2V7dmFyIHo9bmV3IEVycm9yKEIpO3Rocm93IHouaGFzaD0kLHp9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oQil7dmFyICQ9dGhpcyx6PVswXSxXPVtdLGo9W251bGxdLEs9W10saWU9dGhpcy50YWJsZSxRPSIiLGVlPTAsSj0wLEg9MCxxPTIsWj0xLGFlPUsuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksdWU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxjZT17eXk6e319O2Zvcih2YXIgdGUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx0ZSkmJihjZS55eVt0ZV09dGhpcy55eVt0ZV0pO3VlLnNldElucHV0KEIsY2UueXkpLGNlLnl5LmxleGVyPXVlLGNlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiB1ZS55eWxsb2M+InUiJiYodWUueXlsbG9jPXt9KTt2YXIgRGU9dWUueXlsbG9jO0sucHVzaChEZSk7dmFyIG9lPXVlLm9wdGlvbnMmJnVlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBjZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1jZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBrZShUZSl7ei5sZW5ndGg9ei5sZW5ndGgtMipUZSxqLmxlbmd0aD1qLmxlbmd0aC1UZSxLLmxlbmd0aD1LLmxlbmd0aC1UZX1vKGtlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIEZlKCl7dmFyIFRlO3JldHVybiBUZT1XLnBvcCgpfHx1ZS5sZXgoKXx8Wix0eXBlb2YgVGUhPSJudW1iZXIiJiYoVGUgaW5zdGFuY2VvZiBBcnJheSYmKFc9VGUsVGU9Vy5wb3AoKSksVGU9JC5zeW1ib2xzX1tUZV18fFRlKSxUZX1vKEZlLCJsZXgiKTtmb3IodmFyIEJlLFZlLEdlLEhlLHhlLFgsZmU9e30saGUsZ2UsbmUseWU7Oyl7aWYoR2U9elt6Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0dlXT9IZT10aGlzLmRlZmF1bHRBY3Rpb25zW0dlXTooKEJlPT09bnVsbHx8dHlwZW9mIEJlPiJ1IikmJihCZT1GZSgpKSxIZT1pZVtHZV0mJmllW0dlXVtCZV0pLHR5cGVvZiBIZT4idSJ8fCFIZS5sZW5ndGh8fCFIZVswXSl7dmFyIFU9IiI7eWU9W107Zm9yKGhlIGluIGllW0dlXSl0aGlzLnRlcm1pbmFsc19baGVdJiZoZT5xJiZ5ZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19baGVdKyInIik7dWUuc2hvd1Bvc2l0aW9uP1U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZWUrMSkrYDoKYCt1ZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3llLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bQmVdfHxCZSkrIiciOlU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZWUrMSkrIjogVW5leHBlY3RlZCAiKyhCZT09Wj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tCZV18fEJlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihVLHt0ZXh0OnVlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tCZV18fEJlLGxpbmU6dWUueXlsaW5lbm8sbG9jOkRlLGV4cGVjdGVkOnllfSl9aWYoSGVbMF1pbnN0YW5jZW9mIEFycmF5JiZIZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0dlKyIsIHRva2VuOiAiK0JlKTtzd2l0Y2goSGVbMF0pe2Nhc2UgMTp6LnB1c2goQmUpLGoucHVzaCh1ZS55eXRleHQpLEsucHVzaCh1ZS55eWxsb2MpLHoucHVzaChIZVsxXSksQmU9bnVsbCxWZT8oQmU9VmUsVmU9bnVsbCk6KEo9dWUueXlsZW5nLFE9dWUueXl0ZXh0LGVlPXVlLnl5bGluZW5vLERlPXVlLnl5bGxvYyxIPjAmJkgtLSk7YnJlYWs7Y2FzZSAyOmlmKGdlPXRoaXMucHJvZHVjdGlvbnNfW0hlWzFdXVsxXSxmZS4kPWpbai5sZW5ndGgtZ2VdLGZlLl8kPXtmaXJzdF9saW5lOktbSy5sZW5ndGgtKGdlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6S1tLLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOktbSy5sZW5ndGgtKGdlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOktbSy5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG9lJiYoZmUuXyQucmFuZ2U9W0tbSy5sZW5ndGgtKGdlfHwxKV0ucmFuZ2VbMF0sS1tLLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFg9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGZlLFtRLEosZWUsY2UueXksSGVbMV0saixLXS5jb25jYXQoYWUpKSx0eXBlb2YgWDwidSIpcmV0dXJuIFg7Z2UmJih6PXouc2xpY2UoMCwtMSpnZSoyKSxqPWouc2xpY2UoMCwtMSpnZSksSz1LLnNsaWNlKDAsLTEqZ2UpKSx6LnB1c2godGhpcy5wcm9kdWN0aW9uc19bSGVbMV1dWzBdKSxqLnB1c2goZmUuJCksSy5wdXNoKGZlLl8kKSxuZT1pZVt6W3oubGVuZ3RoLTJdXVt6W3oubGVuZ3RoLTFdXSx6LnB1c2gobmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxOPWZ1bmN0aW9uKCl7dmFyIEY9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbigkLHope2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoJCx6KTtlbHNlIHRocm93IG5ldyBFcnJvcigkKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKEIsJCl7cmV0dXJuIHRoaXMueXk9JHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Qix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBCPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1CLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1CLHRoaXMubWF0Y2hlZCs9Qjt2YXIgJD1CLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gJD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksQn0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihCKXt2YXIgJD1CLmxlbmd0aCx6PUIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1CK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC0kKSx0aGlzLm9mZnNldC09JDt2YXIgVz10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx6Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09ei5sZW5ndGgtMSk7dmFyIGo9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOno/KHoubGVuZ3RoPT09Vy5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1dbVy5sZW5ndGgtei5sZW5ndGhdLmxlbmd0aC16WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tJH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtqWzBdLGpbMF0rdGhpcy55eWxlbmctJF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKEIpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShCKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgQj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKEIubGVuZ3RoPjIwPyIuLi4iOiIiKStCLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5tYXRjaDtyZXR1cm4gQi5sZW5ndGg8MjAmJihCKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1CLmxlbmd0aCkpLChCLnN1YnN0cigwLDIwKSsoQi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBCPXRoaXMucGFzdElucHV0KCksJD1uZXcgQXJyYXkoQi5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBCK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCskKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihCLCQpe3ZhciB6LFcsajtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihqLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFc9QlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksVyYmKHRoaXMueXlsaW5lbm8rPVcubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Vz9XW1cubGVuZ3RoLTFdLmxlbmd0aC1XW1cubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rQlswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1CWzBdLHRoaXMubWF0Y2grPUJbMF0sdGhpcy5tYXRjaGVzPUIsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoQlswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9QlswXSx6PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLCQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseilyZXR1cm4gejtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSyBpbiBqKXRoaXNbS109altLXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgQiwkLHosVzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBqPXRoaXMuX2N1cnJlbnRSdWxlcygpLEs9MDtLPGoubGVuZ3RoO0srKylpZih6PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaltLXV0pLHomJighJHx8elswXS5sZW5ndGg+JFswXS5sZW5ndGgpKXtpZigkPXosVz1LLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEI9dGhpcy50ZXN0X21hdGNoKHosaltLXSksQiE9PSExKXJldHVybiBCO2lmKHRoaXMuX2JhY2t0cmFjayl7JD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiAkPyhCPXRoaXMudGVzdF9tYXRjaCgkLGpbV10pLEIhPT0hMT9COiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyICQ9dGhpcy5uZXh0KCk7cmV0dXJuICR8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKCQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCgkKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciAkPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuICQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbigkKXtyZXR1cm4gJD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKCR8fDApLCQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1skXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKCQpe3RoaXMuYmVnaW4oJCl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbigkLHosVyxqKXt2YXIgSz1qO3N3aXRjaChXKXtjYXNlIDA6cmV0dXJuIDQxO2Nhc2UgMTpyZXR1cm4gNDg7Y2FzZSAyOnJldHVybiA0OTtjYXNlIDM6cmV0dXJuIDUwO2Nhc2UgNDpyZXR1cm4gNTE7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDU7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTc7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gMTg7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzM7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM1O2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDE5OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDIwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIxOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDIyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUYiKSwzODticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSwiREVGQVVMVF9DTEFTU0RFRl9JRCI7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksMzk7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQwO2JyZWFrO2Nhc2UgMjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTUyIpLDQ1O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NfU1RZTEUiKSw0NjticmVhaztjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDc7YnJlYWs7Y2FzZSAyOTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNUWUxFIiksNDI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVFlMRURFRl9TVFlMRVMiKSw0MzticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDQ7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTc7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gMTg7Y2FzZSAzNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNTp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDM2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI1O2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjY7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHoueXl0ZXh0PXoueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjc7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHoueXl0ZXh0PXoueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI2O2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI3O2JyZWFrO2Nhc2UgNDI6cmV0dXJuIDQ4O2Nhc2UgNDM6cmV0dXJuIDQ5O2Nhc2UgNDQ6cmV0dXJuIDUwO2Nhc2UgNDU6cmV0dXJuIDUxO2Nhc2UgNDY6dGhpcy5wdXNoU3RhdGUoIlNUQVRFX1NUUklORyIpO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVEFURV9JRCIpLCJBUyI7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7YnJlYWs7Y2FzZSA0OTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1MDpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgNTE6cmV0dXJuIDE5O2Nhc2UgNTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMjA7YnJlYWs7Y2FzZSA1NDpicmVhaztjYXNlIDU1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjE7YnJlYWs7Y2FzZSA1NjpicmVhaztjYXNlIDU3OnJldHVybiB0aGlzLmJlZ2luKCJOT1RFIiksMjk7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNTY7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNTc7YnJlYWs7Y2FzZSA2MDp0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEUiKTticmVhaztjYXNlIDYxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEVfSUQiKSwiQVMiO2JyZWFrO2Nhc2UgNjI6YnJlYWs7Y2FzZSA2MzpyZXR1cm4iTk9URV9URVhUIjtjYXNlIDY0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksIklEIjticmVhaztjYXNlIDY1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfVEVYVCIpLDI0O2JyZWFrO2Nhc2UgNjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDMxO2JyZWFrO2Nhc2UgNjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMzE7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gNjtjYXNlIDY5OnJldHVybiA2O2Nhc2UgNzA6cmV0dXJuIDE2O2Nhc2UgNzE6cmV0dXJuIDU0O2Nhc2UgNzI6cmV0dXJuIDI0O2Nhc2UgNzM6cmV0dXJuIHoueXl0ZXh0PXoueXl0ZXh0LnRyaW0oKSwxNDticmVhaztjYXNlIDc0OnJldHVybiAxNTtjYXNlIDc1OnJldHVybiAyODtjYXNlIDc2OnJldHVybiA1NTtjYXNlIDc3OnJldHVybiA1O2Nhc2UgNzg6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzdHlsZVxzKykvaSwvXig/OltcdyxdK1xzKykvaSwvXig/OlteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OnN0YXRlXHMrKS9pLC9eKD86Lio8PGZvcms+PikvaSwvXig/Oi4qPDxqb2luPj4pL2ksL14oPzouKjw8Y2hvaWNlPj4pL2ksL14oPzouKlxbXFtmb3JrXF1cXSkvaSwvXig/Oi4qXFtcW2pvaW5cXVxdKS9pLC9eKD86LipcW1xbY2hvaWNlXF1cXSkvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86XH0pL2ksL14oPzpbXG5dKS9pLC9eKD86bm90ZVxzKykvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzoiKS9pLC9eKD86XHMqYXNccyopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5dKikvaSwvXig/OlxzKlteOlxuXHNcLV0rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86W1xzXFNdKj9lbmQgbm90ZVxiKS9pLC9eKD86c3RhdGVEaWFncmFtXHMrKS9pLC9eKD86c3RhdGVEaWFncmFtLXYyXHMrKS9pLC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxiKS9pLC9eKD86XFtcKlxdKS9pLC9eKD86W146XG5cc1wtXHtdKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oi0tPikvaSwvXig/Oi0tKS9pLC9eKD86Ojo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0xJTkU6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzksMTAsMjIsMjYsMjksMzUsNDIsNDMsNDQsNDUsNTQsNTUsNTYsNTcsNzEsNzIsNzMsNzQsNzVdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URV9JRDp7cnVsZXM6WzY0XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEU6e3J1bGVzOls2MSw2Miw2M10saW5jbHVzaXZlOiExfSxOT1RFX1RFWFQ6e3J1bGVzOls2Niw2N10saW5jbHVzaXZlOiExfSxOT1RFX0lEOntydWxlczpbNjVdLGluY2x1c2l2ZTohMX0sTk9URTp7cnVsZXM6WzU4LDU5LDYwXSxpbmNsdXNpdmU6ITF9LFNUWUxFREVGX1NUWUxFT1BUUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVFlMRURFRl9TVFlMRVM6e3J1bGVzOlszMV0saW5jbHVzaXZlOiExfSxTVFlMRV9JRFM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RZTEU6e3J1bGVzOlszMF0saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjddLGluY2x1c2l2ZTohMX0sQ0xBU1NERUZJRDp7cnVsZXM6WzI1XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzIwLDIxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE4XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzE2XSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTMsMTQsMzMsMzRdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOls0OF0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOls0OSw1MF0saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbOSwxMCwzNiwzNywzOCwzOSw0MCw0MSw0Niw0Nyw1MSw1Miw1M10saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDExLDEyLDE1LDE3LDE5LDIyLDI2LDI5LDMyLDM1LDUzLDU3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc2LDc3LDc4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEZ9KCk7Ty5sZXhlcj1OO2Z1bmN0aW9uIFAoKXt0aGlzLnl5PXt9fXJldHVybiBvKFAsIlBhcnNlciIpLFAucHJvdG90eXBlPU8sTy5QYXJzZXI9UCxuZXcgUH0oKTtGTy5wYXJzZXI9Rk87X0U9Rk99KTt2YXIgT2RlLExFLFZnLFN4LFBkZSxCZGUsRmRlLF8wLERFLEdPLCRPLFZPLFVPLEhPLE5FLFJFLHpkZSxHZGUsV08sWU8sJGRlLFZkZSxVZyxPV2UsVWRlLHFPLFBXZSxCV2UsSGRlLFdkZSxGV2UsWWRlLHpXZSxxZGUsWE8sak8sWGRlLE1FLGpkZSxLTyxJRT1NKCgpPT57InVzZSBzdHJpY3QiO09kZT0iTFIiLExFPSJUQiIsVmc9InN0YXRlIixTeD0icmVsYXRpb24iLFBkZT0iY2xhc3NEZWYiLEJkZT0ic3R5bGUiLEZkZT0iYXBwbHlDbGFzcyIsXzA9ImRlZmF1bHQiLERFPSJkaXZpZGVyIixHTz0iZmlsbDpub25lIiwkTz0iZmlsbDogIzMzMyIsVk89ImMiLFVPPSJ0ZXh0IixITz0ibm9ybWFsIixORT0icmVjdCIsUkU9InJlY3RXaXRoVGl0bGUiLHpkZT0ic3RhdGVTdGFydCIsR2RlPSJzdGF0ZUVuZCIsV089ImRpdmlkZXIiLFlPPSJyb3VuZGVkV2l0aFRpdGxlIiwkZGU9Im5vdGUiLFZkZT0ibm90ZUdyb3VwIixVZz0ic3RhdGVkaWFncmFtIixPV2U9InN0YXRlIixVZGU9YCR7VWd9LSR7T1dlfWAscU89InRyYW5zaXRpb24iLFBXZT0ibm90ZSIsQldlPSJub3RlLWVkZ2UiLEhkZT1gJHtxT30gJHtCV2V9YCxXZGU9YCR7VWd9LSR7UFdlfWAsRldlPSJjbHVzdGVyIixZZGU9YCR7VWd9LSR7RldlfWAseldlPSJjbHVzdGVyLWFsdCIscWRlPWAke1VnfS0ke3pXZX1gLFhPPSJwYXJlbnQiLGpPPSJub3RlIixYZGU9InN0YXRlIixNRT0iLS0tLSIsamRlPWAke01FfSR7ak99YCxLTz1gJHtNRX0ke1hPfWB9KTtmdW5jdGlvbiBRTyh0PSIiLGU9MCxyPSIiLG49TUUpe2xldCBpPXIhPT1udWxsJiZyLmxlbmd0aD4wP2Ake259JHtyfWA6IiI7cmV0dXJuYCR7WGRlfS0ke3R9JHtpfS0ke2V9YH1mdW5jdGlvbiBPRSh0LGUscil7aWYoIWUuaWR8fGUuaWQ9PT0iPC9qb2luPjwvZm9yaz4ifHxlLmlkPT09IjwvY2hvaWNlPiIpcmV0dXJuO2UuY3NzQ2xhc3NlcyYmKEFycmF5LmlzQXJyYXkoZS5jc3NDb21waWxlZFN0eWxlcyl8fChlLmNzc0NvbXBpbGVkU3R5bGVzPVtdKSxlLmNzc0NsYXNzZXMuc3BsaXQoIiAiKS5mb3JFYWNoKGk9PntpZihyLmdldChpKSl7bGV0IGE9ci5nZXQoaSk7ZS5jc3NDb21waWxlZFN0eWxlcz1bLi4uZS5jc3NDb21waWxlZFN0eWxlcywuLi5hLnN0eWxlc119fSkpO2xldCBuPXQuZmluZChpPT5pLmlkPT09ZS5pZCk7bj9PYmplY3QuYXNzaWduKG4sZSk6dC5wdXNoKGUpfWZ1bmN0aW9uICRXZSh0KXtyZXR1cm4gdD8uY2xhc3Nlcz8uam9pbigiICIpPz8iIn1mdW5jdGlvbiBWV2UodCl7cmV0dXJuIHQ/LnN0eWxlcz8/W119dmFyIFBFLGdmLEdXZSxLZGUsSGcsUWRlLFpkZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7aHQoKTtmcigpO0lFKCk7UEU9bmV3IE1hcCxnZj0wO28oUU8sInN0YXRlRG9tSWQiKTtHV2U9bygodCxlLHIsbixpLGEscyxsKT0+e1kudHJhY2UoIml0ZW1zIixlKSxlLmZvckVhY2godT0+e3N3aXRjaCh1LnN0bXQpe2Nhc2UgVmc6SGcodCx1LHIsbixpLGEscyxsKTticmVhaztjYXNlIF8wOkhnKHQsdSxyLG4saSxhLHMsbCk7YnJlYWs7Y2FzZSBTeDp7SGcodCx1LnN0YXRlMSxyLG4saSxhLHMsbCksSGcodCx1LnN0YXRlMixyLG4saSxhLHMsbCk7bGV0IGg9e2lkOiJlZGdlIitnZixzdGFydDp1LnN0YXRlMS5pZCxlbmQ6dS5zdGF0ZTIuaWQsYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6R08sbGFiZWxTdHlsZToiIixsYWJlbDpqZS5zYW5pdGl6ZVRleHQodS5kZXNjcmlwdGlvbixkZSgpKSxhcnJvd2hlYWRTdHlsZTokTyxsYWJlbHBvczpWTyxsYWJlbFR5cGU6VU8sdGhpY2tuZXNzOkhPLGNsYXNzZXM6cU8sbG9vazpzfTtpLnB1c2goaCksZ2YrK31icmVha319KX0sInNldHVwRG9jIiksS2RlPW8oKHQsZT1MRSk9PntsZXQgcj1lO2lmKHQuZG9jKWZvcihsZXQgbiBvZiB0LmRvYyluLnN0bXQ9PT0iZGlyIiYmKHI9bi52YWx1ZSk7cmV0dXJuIHJ9LCJnZXREaXIiKTtvKE9FLCJpbnNlcnRPclVwZGF0ZU5vZGUiKTtvKCRXZSwiZ2V0Q2xhc3Nlc0Zyb21EYkluZm8iKTtvKFZXZSwiZ2V0U3R5bGVzRnJvbURiSW5mbyIpO0hnPW8oKHQsZSxyLG4saSxhLHMsbCk9PntsZXQgdT1lLmlkLGg9ci5nZXQodSksZj0kV2UoaCksZD1WV2UoaCk7aWYoWS5pbmZvKCJkYXRhRmV0Y2hlciBwYXJzZWRJdGVtIixlLGgsZCksdSE9PSJyb290Iil7bGV0IHA9TkU7ZS5zdGFydD09PSEwP3A9emRlOmUuc3RhcnQ9PT0hMSYmKHA9R2RlKSxlLnR5cGUhPT1fMCYmKHA9ZS50eXBlKSxQRS5nZXQodSl8fFBFLnNldCh1LHtpZDp1LHNoYXBlOnAsZGVzY3JpcHRpb246amUuc2FuaXRpemVUZXh0KHUsZGUoKSksY3NzQ2xhc3NlczpgJHtmfSAke1VkZX1gLGNzc1N0eWxlczpkfSk7bGV0IG09UEUuZ2V0KHUpO2UuZGVzY3JpcHRpb24mJihBcnJheS5pc0FycmF5KG0uZGVzY3JpcHRpb24pPyhtLnNoYXBlPVJFLG0uZGVzY3JpcHRpb24ucHVzaChlLmRlc2NyaXB0aW9uKSk6bS5kZXNjcmlwdGlvbj8ubGVuZ3RoPjA/KG0uc2hhcGU9UkUsbS5kZXNjcmlwdGlvbj09PXU/bS5kZXNjcmlwdGlvbj1bZS5kZXNjcmlwdGlvbl06bS5kZXNjcmlwdGlvbj1bbS5kZXNjcmlwdGlvbixlLmRlc2NyaXB0aW9uXSk6KG0uc2hhcGU9TkUsbS5kZXNjcmlwdGlvbj1lLmRlc2NyaXB0aW9uKSxtLmRlc2NyaXB0aW9uPWplLnNhbml0aXplVGV4dE9yQXJyYXkobS5kZXNjcmlwdGlvbixkZSgpKSksbS5kZXNjcmlwdGlvbj8ubGVuZ3RoPT09MSYmbS5zaGFwZT09PVJFJiYobS50eXBlPT09Imdyb3VwIj9tLnNoYXBlPVlPOm0uc2hhcGU9TkUpLCFtLnR5cGUmJmUuZG9jJiYoWS5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yIFhDWCIsdSxLZGUoZSkpLG0udHlwZT0iZ3JvdXAiLG0uaXNHcm91cD0hMCxtLmRpcj1LZGUoZSksbS5zaGFwZT1lLnR5cGU9PT1ERT9XTzpZTyxtLmNzc0NsYXNzZXM9YCR7bS5jc3NDbGFzc2VzfSAke1lkZX0gJHthP3FkZToiIn1gKTtsZXQgZz17bGFiZWxTdHlsZToiIixzaGFwZTptLnNoYXBlLGxhYmVsOm0uZGVzY3JpcHRpb24sY3NzQ2xhc3NlczptLmNzc0NsYXNzZXMsY3NzQ29tcGlsZWRTdHlsZXM6W10sY3NzU3R5bGVzOm0uY3NzU3R5bGVzLGlkOnUsZGlyOm0uZGlyLGRvbUlkOlFPKHUsZ2YpLHR5cGU6bS50eXBlLGlzR3JvdXA6bS50eXBlPT09Imdyb3VwIixwYWRkaW5nOjgscng6MTAscnk6MTAsbG9vazpzfTtpZihnLnNoYXBlPT09V08mJihnLmxhYmVsPSIiKSx0JiZ0LmlkIT09InJvb3QiJiYoWS50cmFjZSgiU2V0dGluZyBub2RlICIsdSwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIix0LmlkKSxnLnBhcmVudElkPXQuaWQpLGcuY2VudGVyTGFiZWw9ITAsZS5ub3RlKXtsZXQgeT17bGFiZWxTdHlsZToiIixzaGFwZTokZGUsbGFiZWw6ZS5ub3RlLnRleHQsY3NzQ2xhc3NlczpXZGUsY3NzU3R5bGVzOltdLGNzc0NvbXBpbGVzU3R5bGVzOltdLGlkOnUramRlKyItIitnZixkb21JZDpRTyh1LGdmLGpPKSx0eXBlOm0udHlwZSxpc0dyb3VwOm0udHlwZT09PSJncm91cCIscGFkZGluZzpkZSgpLmZsb3djaGFydC5wYWRkaW5nLGxvb2s6cyxwb3NpdGlvbjplLm5vdGUucG9zaXRpb259LHY9dStLTyx4PXtsYWJlbFN0eWxlOiIiLHNoYXBlOlZkZSxsYWJlbDplLm5vdGUudGV4dCxjc3NDbGFzc2VzOm0uY3NzQ2xhc3Nlcyxjc3NTdHlsZXM6W10saWQ6dStLTyxkb21JZDpRTyh1LGdmLFhPKSx0eXBlOiJncm91cCIsaXNHcm91cDohMCxwYWRkaW5nOjE2LGxvb2s6cyxwb3NpdGlvbjplLm5vdGUucG9zaXRpb259O2dmKysseC5pZD12LHkucGFyZW50SWQ9dixPRShuLHgsbCksT0Uobix5LGwpLE9FKG4sZyxsKTtsZXQgYj11LHc9eS5pZDtlLm5vdGUucG9zaXRpb249PT0ibGVmdCBvZiImJihiPXkuaWQsdz11KSxpLnB1c2goe2lkOmIrIi0iK3csc3RhcnQ6YixlbmQ6dyxhcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZUVuZDoiIixzdHlsZTpHTyxsYWJlbFN0eWxlOiIiLGNsYXNzZXM6SGRlLGFycm93aGVhZFN0eWxlOiRPLGxhYmVscG9zOlZPLGxhYmVsVHlwZTpVTyx0aGlja25lc3M6SE8sbG9vazpzfSl9ZWxzZSBPRShuLGcsbCl9ZS5kb2MmJihZLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIiksR1dlKGUsZS5kb2MscixuLGksIWEscyxsKSl9LCJkYXRhRmV0Y2hlciIpLFFkZT1vKCgpPT57UEUuY2xlYXIoKSxnZj0wfSwicmVzZXQiKX0pO3ZhciBaTyxVV2UsSFdlLEpkZSxKTz1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7aHQoKTtqNSgpO0Z2KCk7dVQoKTtocigpO0lFKCk7Wk89bygodCxlPUxFKT0+e2lmKCF0LmRvYylyZXR1cm4gZTtsZXQgcj1lO2ZvcihsZXQgbiBvZiB0LmRvYyluLnN0bXQ9PT0iZGlyIiYmKHI9bi52YWx1ZSk7cmV0dXJuIHJ9LCJnZXREaXIiKSxVV2U9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmV4dHJhY3QoZS5kYi5nZXRSb290RG9jVjIoKSksZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksSFdlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WS5pbmZvKCJSRUYwOiIpLFkuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpO2xldHtzZWN1cml0eUxldmVsOmksc3RhdGU6YSxsYXlvdXQ6c309ZGUoKTtuLmRiLmV4dHJhY3Qobi5kYi5nZXRSb290RG9jVjIoKSk7bGV0IGw9bi5kYi5nZXREYXRhKCksdT1wbShlLGkpO2wudHlwZT1uLnR5cGUsbC5sYXlvdXRBbGdvcml0aG09cyxsLm5vZGVTcGFjaW5nPWE/Lm5vZGVTcGFjaW5nfHw1MCxsLnJhbmtTcGFjaW5nPWE/LnJhbmtTcGFjaW5nfHw1MCxsLm1hcmtlcnM9WyJiYXJiIl0sbC5kaWFncmFtSWQ9ZSxhd2FpdCBGbShsLHUpO2xldCBoPTg7VXQuaW5zZXJ0VGl0bGUodSwic3RhdGVkaWFncmFtVGl0bGVUZXh0IixhPy50aXRsZVRvcE1hcmdpbj8/MjUsbi5kYi5nZXREaWFncmFtVGl0bGUoKSksem0odSxoLFVnLGE/LnVzZU1heFdpZHRoPz8hMCl9LCJkcmF3IiksSmRlPXtnZXRDbGFzc2VzOlVXZSxkcmF3OkhXZSxnZXREaXI6Wk99fSk7ZnVuY3Rpb24gczBlKCl7cmV0dXJuIG5ldyBNYXB9ZnVuY3Rpb24gZVAodD0iIil7bGV0IGU9dDtyZXR1cm4gdD09PW5QJiYoQ3grKyxlPWAke24wZX0ke0N4fWApLGV9ZnVuY3Rpb24gdFAodD0iIixlPV8wKXtyZXR1cm4gdD09PW5QP24wZTplfWZ1bmN0aW9uIGVZZSh0PSIiKXtsZXQgZT10O3JldHVybiB0PT09aTBlJiYoQ3grKyxlPWAke2EwZX0ke0N4fWApLGV9ZnVuY3Rpb24gdFllKHQ9IiIsZT1fMCl7cmV0dXJuIHQ9PT1pMGU/YTBlOmV9ZnVuY3Rpb24gclllKHQsZSxyKXtsZXQgbj1lUCh0LmlkLnRyaW0oKSksaT10UCh0LmlkLnRyaW0oKSx0LnR5cGUpLGE9ZVAoZS5pZC50cmltKCkpLHM9dFAoZS5pZC50cmltKCksZS50eXBlKTt5ZihuLGksdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUsdC5jbGFzc2VzLHQuc3R5bGVzLHQudGV4dFN0eWxlcykseWYoYSxzLGUuZG9jLGUuZGVzY3JpcHRpb24sZS5ub3RlLGUuY2xhc3NlcyxlLnN0eWxlcyxlLnRleHRTdHlsZXMpLHpzLnJlbGF0aW9ucy5wdXNoKHtpZDE6bixpZDI6YSxyZWxhdGlvblRpdGxlOmplLnNhbml0aXplVGV4dChyLGRlKCkpfSl9dmFyIG5QLG4wZSxpMGUsYTBlLGUwZSx0MGUsV1dlLFlXZSx6RSxpUCxvMGUsR0UsV2csbDBlLCRFLHpzLEN4LHIwZSxxV2UsWFdlLEJFLGpXZSxLV2UsRkUsYVAsUVdlLHlmLGMwZSxMMCx1MGUsWldlLEpXZSxoMGUsclAsblllLGlZZSxmMGUsYVllLHNQLHNZZSxvWWUsbFllLGNZZSx1WWUsaFllLHRsLFZFPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtocigpO2ZyKCk7VnQoKTtraSgpO1pkZSgpO0pPKCk7SUUoKTtuUD0iWypdIixuMGU9InN0YXJ0IixpMGU9blAsYTBlPSJlbmQiLGUwZT0iY29sb3IiLHQwZT0iZmlsbCIsV1dlPSJiZ0ZpbGwiLFlXZT0iLCI7byhzMGUsIm5ld0NsYXNzZXNMaXN0Iik7ekU9W10saVA9W10sbzBlPU9kZSxHRT1bXSxXZz1zMGUoKSxsMGU9bygoKT0+KHtyZWxhdGlvbnM6W10sc3RhdGVzOm5ldyBNYXAsZG9jdW1lbnRzOnt9fSksIm5ld0RvYyIpLCRFPXtyb290OmwwZSgpfSx6cz0kRS5yb290LEN4PTAscjBlPTAscVdlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sWFdlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxCRT1vKHQ9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpLCJjbG9uZSIpLGpXZT1vKHQ9PntZLmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLHQpLEdFPXR9LCJzZXRSb290RG9jIiksS1dlPW8oKCk9PkdFLCJnZXRSb290RG9jIiksRkU9bygodCxlLHIpPT57aWYoZS5zdG10PT09U3gpRkUodCxlLnN0YXRlMSwhMCksRkUodCxlLnN0YXRlMiwhMSk7ZWxzZSBpZihlLnN0bXQ9PT1WZyYmKGUuaWQ9PT0iWypdIj8oZS5pZD1yP3QuaWQrIl9zdGFydCI6dC5pZCsiX2VuZCIsZS5zdGFydD1yKTplLmlkPWUuaWQudHJpbSgpKSxlLmRvYyl7bGV0IG49W10saT1bXSxhO2ZvcihhPTA7YTxlLmRvYy5sZW5ndGg7YSsrKWlmKGUuZG9jW2FdLnR5cGU9PT1ERSl7bGV0IHM9QkUoZS5kb2NbYV0pO3MuZG9jPUJFKGkpLG4ucHVzaChzKSxpPVtdfWVsc2UgaS5wdXNoKGUuZG9jW2FdKTtpZihuLmxlbmd0aD4wJiZpLmxlbmd0aD4wKXtsZXQgcz17c3RtdDpWZyxpZDplOSgpLHR5cGU6ImRpdmlkZXIiLGRvYzpCRShpKX07bi5wdXNoKEJFKHMpKSxlLmRvYz1ufWUuZG9jLmZvckVhY2gocz0+RkUoZSxzLCEwKSl9fSwiZG9jVHJhbnNsYXRvciIpLGFQPW8oKCk9PihGRSh7aWQ6InJvb3QifSx7aWQ6InJvb3QiLGRvYzpHRX0sITApLHtpZDoicm9vdCIsZG9jOkdFfSksImdldFJvb3REb2NWMiIpLFFXZT1vKHQ9PntsZXQgZTt0LmRvYz9lPXQuZG9jOmU9dCxZLmluZm8oZSksYzBlKCEwKSxZLmluZm8oIkV4dHJhY3QgaW5pdGlhbCBkb2N1bWVudDoiLGUpLGUuZm9yRWFjaChhPT57c3dpdGNoKFkud2FybigiU3RhdGVtZW50IixhLnN0bXQpLGEuc3RtdCl7Y2FzZSBWZzp5ZihhLmlkLnRyaW0oKSxhLnR5cGUsYS5kb2MsYS5kZXNjcmlwdGlvbixhLm5vdGUsYS5jbGFzc2VzLGEuc3R5bGVzLGEudGV4dFN0eWxlcyk7YnJlYWs7Y2FzZSBTeDpoMGUoYS5zdGF0ZTEsYS5zdGF0ZTIsYS5kZXNjcmlwdGlvbik7YnJlYWs7Y2FzZSBQZGU6ZjBlKGEuaWQudHJpbSgpLGEuY2xhc3Nlcyk7YnJlYWs7Y2FzZSBCZGU6e2xldCBzPWEuaWQudHJpbSgpLnNwbGl0KCIsIiksbD1hLnN0eWxlQ2xhc3Muc3BsaXQoIiwiKTtzLmZvckVhY2godT0+e2xldCBoPUwwKHUpO2lmKGg9PT12b2lkIDApe2xldCBmPXUudHJpbSgpO3lmKGYpLGg9TDAoZil9aC5zdHlsZXM9bC5tYXAoZj0+Zi5yZXBsYWNlKC87L2csIiIpPy50cmltKCkpfSl9YnJlYWs7Y2FzZSBGZGU6c1AoYS5pZC50cmltKCksYS5zdHlsZUNsYXNzKTticmVha319KTtsZXQgcj11MGUoKSxpPWRlKCkubG9vaztRZGUoKSxIZyh2b2lkIDAsYVAoKSxyLHpFLGlQLCEwLGksV2cpLHpFLmZvckVhY2goYT0+e2lmKEFycmF5LmlzQXJyYXkoYS5sYWJlbCkpe2lmKGEuZGVzY3JpcHRpb249YS5sYWJlbC5zbGljZSgxKSxhLmlzR3JvdXAmJmEuZGVzY3JpcHRpb24ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJHcm91cCBub2RlcyBjYW4gb25seSBoYXZlIGxhYmVsLiBSZW1vdmUgdGhlIGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gZm9yIG5vZGUgWyIrYS5pZCsiXSIpO2EubGFiZWw9YS5sYWJlbFswXX19KX0sImV4dHJhY3QiKSx5Zj1vKGZ1bmN0aW9uKHQsZT1fMCxyPW51bGwsbj1udWxsLGk9bnVsbCxhPW51bGwscz1udWxsLGw9bnVsbCl7bGV0IHU9dD8udHJpbSgpO2lmKHpzLnN0YXRlcy5oYXModSk/KHpzLnN0YXRlcy5nZXQodSkuZG9jfHwoenMuc3RhdGVzLmdldCh1KS5kb2M9ciksenMuc3RhdGVzLmdldCh1KS50eXBlfHwoenMuc3RhdGVzLmdldCh1KS50eXBlPWUpKTooWS5pbmZvKCJBZGRpbmcgc3RhdGUgIix1LG4pLHpzLnN0YXRlcy5zZXQodSx7aWQ6dSxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpyLG5vdGU6aSxjbGFzc2VzOltdLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSkpLG4mJihZLmluZm8oIlNldHRpbmcgc3RhdGUgZGVzY3JpcHRpb24iLHUsbiksdHlwZW9mIG49PSJzdHJpbmciJiZyUCh1LG4udHJpbSgpKSx0eXBlb2Ygbj09Im9iamVjdCImJm4uZm9yRWFjaChoPT5yUCh1LGgudHJpbSgpKSkpLGkpe2xldCBoPXpzLnN0YXRlcy5nZXQodSk7aC5ub3RlPWksaC5ub3RlLnRleHQ9amUuc2FuaXRpemVUZXh0KGgubm90ZS50ZXh0LGRlKCkpfWEmJihZLmluZm8oIlNldHRpbmcgc3RhdGUgY2xhc3NlcyIsdSxhKSwodHlwZW9mIGE9PSJzdHJpbmciP1thXTphKS5mb3JFYWNoKGY9PnNQKHUsZi50cmltKCkpKSkscyYmKFkuaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLHUscyksKHR5cGVvZiBzPT0ic3RyaW5nIj9bc106cykuZm9yRWFjaChmPT5zWWUodSxmLnRyaW0oKSkpKSxsJiYoWS5pbmZvKCJTZXR0aW5nIHN0YXRlIHN0eWxlcyIsdSxzKSwodHlwZW9mIGw9PSJzdHJpbmciP1tsXTpsKS5mb3JFYWNoKGY9Pm9ZZSh1LGYudHJpbSgpKSkpfSwiYWRkU3RhdGUiKSxjMGU9byhmdW5jdGlvbih0KXt6RT1bXSxpUD1bXSwkRT17cm9vdDpsMGUoKX0senM9JEUucm9vdCxDeD0wLFdnPXMwZSgpLHR8fF9yKCl9LCJjbGVhciIpLEwwPW8oZnVuY3Rpb24odCl7cmV0dXJuIHpzLnN0YXRlcy5nZXQodCl9LCJnZXRTdGF0ZSIpLHUwZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHpzLnN0YXRlc30sImdldFN0YXRlcyIpLFpXZT1vKGZ1bmN0aW9uKCl7WS5pbmZvKCJEb2N1bWVudHMgPSAiLCRFKX0sImxvZ0RvY3VtZW50cyIpLEpXZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHpzLnJlbGF0aW9uc30sImdldFJlbGF0aW9ucyIpO28oZVAsInN0YXJ0SWRJZk5lZWRlZCIpO28odFAsInN0YXJ0VHlwZUlmTmVlZGVkIik7byhlWWUsImVuZElkSWZOZWVkZWQiKTtvKHRZZSwiZW5kVHlwZUlmTmVlZGVkIik7byhyWWUsImFkZFJlbGF0aW9uT2JqcyIpO2gwZT1vKGZ1bmN0aW9uKHQsZSxyKXtpZih0eXBlb2YgdD09Im9iamVjdCIpclllKHQsZSxyKTtlbHNle2xldCBuPWVQKHQudHJpbSgpKSxpPXRQKHQpLGE9ZVllKGUudHJpbSgpKSxzPXRZZShlKTt5ZihuLGkpLHlmKGEscyksenMucmVsYXRpb25zLnB1c2goe2lkMTpuLGlkMjphLHRpdGxlOmplLnNhbml0aXplVGV4dChyLGRlKCkpfSl9fSwiYWRkUmVsYXRpb24iKSxyUD1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9enMuc3RhdGVzLmdldCh0KSxuPWUuc3RhcnRzV2l0aCgiOiIpP2UucmVwbGFjZSgiOiIsIiIpLnRyaW0oKTplO3IuZGVzY3JpcHRpb25zLnB1c2goamUuc2FuaXRpemVUZXh0KG4sZGUoKSkpfSwiYWRkRGVzY3JpcHRpb24iKSxuWWU9byhmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCwxKT09PSI6Ij90LnN1YnN0cigyKS50cmltKCk6dC50cmltKCl9LCJjbGVhbnVwTGFiZWwiKSxpWWU9bygoKT0+KHIwZSsrLCJkaXZpZGVyLWlkLSIrcjBlKSwiZ2V0RGl2aWRlcklkIiksZjBlPW8oZnVuY3Rpb24odCxlPSIiKXtXZy5oYXModCl8fFdnLnNldCh0LHtpZDp0LHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7bGV0IHI9V2cuZ2V0KHQpO2U/LnNwbGl0KFlXZSkuZm9yRWFjaChuPT57bGV0IGk9bi5yZXBsYWNlKC8oW147XSopOy8sIiQxIikudHJpbSgpO2lmKFJlZ0V4cChlMGUpLmV4ZWMobikpe2xldCBzPWkucmVwbGFjZSh0MGUsV1dlKS5yZXBsYWNlKGUwZSx0MGUpO3IudGV4dFN0eWxlcy5wdXNoKHMpfXIuc3R5bGVzLnB1c2goaSl9KX0sImFkZFN0eWxlQ2xhc3MiKSxhWWU9byhmdW5jdGlvbigpe3JldHVybiBXZ30sImdldENsYXNzZXMiKSxzUD1vKGZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49TDAocik7aWYobj09PXZvaWQgMCl7bGV0IGk9ci50cmltKCk7eWYoaSksbj1MMChpKX1uLmNsYXNzZXMucHVzaChlKX0pfSwic2V0Q3NzQ2xhc3MiKSxzWWU9byhmdW5jdGlvbih0LGUpe2xldCByPUwwKHQpO3IhPT12b2lkIDAmJnIuc3R5bGVzLnB1c2goZSl9LCJzZXRTdHlsZSIpLG9ZZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9TDAodCk7ciE9PXZvaWQgMCYmci50ZXh0U3R5bGVzLnB1c2goZSl9LCJzZXRUZXh0U3R5bGUiKSxsWWU9bygoKT0+bzBlLCJnZXREaXJlY3Rpb24iKSxjWWU9byh0PT57bzBlPXR9LCJzZXREaXJlY3Rpb24iKSx1WWU9byh0PT50JiZ0WzBdPT09IjoiP3Quc3Vic3RyKDEpLnRyaW0oKTp0LnRyaW0oKSwidHJpbUNvbG9uIiksaFllPW8oKCk9PntsZXQgdD1kZSgpO3JldHVybntub2Rlczp6RSxlZGdlczppUCxvdGhlcjp7fSxjb25maWc6dCxkaXJlY3Rpb246Wk8oYVAoKSl9fSwiZ2V0RGF0YSIpLHRsPXtnZXRDb25maWc6bygoKT0+ZGUoKS5zdGF0ZSwiZ2V0Q29uZmlnIiksZ2V0RGF0YTpoWWUsYWRkU3RhdGU6eWYsY2xlYXI6YzBlLGdldFN0YXRlOkwwLGdldFN0YXRlczp1MGUsZ2V0UmVsYXRpb25zOkpXZSxnZXRDbGFzc2VzOmFZZSxnZXREaXJlY3Rpb246bFllLGFkZFJlbGF0aW9uOmgwZSxnZXREaXZpZGVySWQ6aVllLHNldERpcmVjdGlvbjpjWWUsY2xlYW51cExhYmVsOm5ZZSxsaW5lVHlwZTpxV2UscmVsYXRpb25UeXBlOlhXZSxsb2dEb2N1bWVudHM6WldlLGdldFJvb3REb2M6S1dlLHNldFJvb3REb2M6aldlLGdldFJvb3REb2NWMjphUCxleHRyYWN0OlFXZSx0cmltQ29sb246dVllLGdldEFjY1RpdGxlOlByLHNldEFjY1RpdGxlOlJyLGdldEFjY0Rlc2NyaXB0aW9uOkZyLHNldEFjY0Rlc2NyaXB0aW9uOkJyLGFkZFN0eWxlQ2xhc3M6ZjBlLHNldENzc0NsYXNzOnNQLGFkZERlc2NyaXB0aW9uOnJQLHNldERpYWdyYW1UaXRsZTpsbixnZXREaWFncmFtVGl0bGU6SnJ9fSk7dmFyIGZZZSxVRSxvUD1NKCgpPT57InVzZSBzdHJpY3QiO2ZZZT1vKHQ9PmAKZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQgewogICAgZmlsbDogJHt0LnRyYW5zaXRpb25Db2xvcn07CiAgICBzdHJva2U6ICR7dC50cmFuc2l0aW9uQ29sb3J9OwogIH0KZy5zdGF0ZUdyb3VwIHRleHQgewogIGZpbGw6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4Owp9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke3QudGV4dENvbG9yfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4OwoKfQpnLnN0YXRlR3JvdXAgLnN0YXRlLXRpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwogIGZpbGw6ICR7dC5zdGF0ZUxhYmVsQ29sb3J9Owp9CgpnLnN0YXRlR3JvdXAgcmVjdCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9Owp9CgpnLnN0YXRlR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi50cmFuc2l0aW9uIHsKICBzdHJva2U6ICR7dC50cmFuc2l0aW9uQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9Cgouc3RhdGVHcm91cCAuY29tcG9zaXQgewogIGZpbGw6ICR7dC5iYWNrZ3JvdW5kfTsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7CiAgZmlsbDogI2UwZTBlMDsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlLW5vdGUgewogIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgZmlsbDogJHt0Lm5vdGVCa2dDb2xvcn07CgogIHRleHQgewogICAgZmlsbDogJHt0Lm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogICAgZm9udC1zaXplOiAxMHB4OwogIH0KfQoKLnN0YXRlTGFiZWwgLmJveCB7CiAgc3Ryb2tlOiBub25lOwogIHN0cm9rZS13aWR0aDogMDsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgb3BhY2l0eTogMC41Owp9CgouZWRnZUxhYmVsIC5sYWJlbCByZWN0IHsKICBmaWxsOiAke3QubGFiZWxCYWNrZ3JvdW5kQ29sb3J9OwogIG9wYWNpdHk6IDAuNTsKfQouZWRnZUxhYmVsIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgcCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgfQogIHJlY3QgewogICAgb3BhY2l0eTogMC41OwogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIH0KICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7CiAgZmlsbDogJHt0LnRyYW5zaXRpb25MYWJlbENvbG9yfHx0LnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoubGFiZWwgZGl2IC5lZGdlTGFiZWwgewogIGNvbG9yOiAke3QudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3J9Owp9Cgouc3RhdGVMYWJlbCB0ZXh0IHsKICBmaWxsOiAke3Quc3RhdGVMYWJlbENvbG9yfTsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7CiAgZmlsbDogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIC5mb3JrLWpvaW4gewogIGZpbGw6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHsKICBmaWxsOiAke3QuaW5uZXJFbmRCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7dC5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Ci5lbmQtc3RhdGUtaW5uZXIgewogIGZpbGw6ICR7dC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmR9OwogIC8vIHN0cm9rZTogJHt0LmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KCi5ub2RlIHJlY3QgewogIGZpbGw6ICR7dC5zdGF0ZUJrZ3x8dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoubm9kZSBwb2x5Z29uIHsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CiNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHsKICBmaWxsOiAke3QuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke3Quc3RhdGVMYWJlbENvbG9yfTsKICAvLyBsaW5lLWhlaWdodDogMTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIC5kaXZpZGVyIHsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICBmaWxsOiAke3QuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kfTsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7CiAgZmlsbDogJHt0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIHJ4OjA7CiAgcnk6MDsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmRpdmlkZXIgewogIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwOwogIGZpbGw6ICR7dC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgoubm90ZS1lZGdlIHsKICBzdHJva2UtZGFzaGFycmF5OiA1Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHt0Lm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHt0Lm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHRleHQgewogIGZpbGw6ICR7dC5ub3RlVGV4dENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke3Qubm90ZVRleHRDb2xvcn07Cn0KLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHsKICBjb2xvcjogcmVkOyAvLyAke3Qubm90ZVRleHRDb2xvcn07Cn0KCiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHsKICBmaWxsOiAke3QubGluZUNvbG9yfTsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnN0YXRlZGlhZ3JhbVRpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHt0LnRleHRDb2xvcn07Cn0KYCwiZ2V0U3R5bGVzIiksVUU9ZlllfSk7dmFyIGxQLGRZZSxwWWUsZDBlLG1ZZSxwMGUsbTBlPU0oKCk9PnsidXNlIHN0cmljdCI7bFA9e30sZFllPW8oKHQsZSk9PntsUFt0XT1lfSwic2V0IikscFllPW8odD0+bFBbdF0sImdldCIpLGQwZT1vKCgpPT5PYmplY3Qua2V5cyhsUCksImtleXMiKSxtWWU9bygoKT0+ZDBlKCkubGVuZ3RoLCJzaXplIikscDBlPXtnZXQ6cFllLHNldDpkWWUsa2V5czpkMGUsc2l6ZTptWWV9fSk7dmFyIGdZZSx5WWUsdlllLHhZZSx5MGUsYlllLHdZZSxUWWUsa1llLGNQLGcwZSx2MGUseDBlPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTttMGUoKTtWRSgpO2hyKCk7ZnIoKTtWdCgpO2h0KCk7Z1llPW8odD0+dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwic3RhcnQtc3RhdGUiKS5hdHRyKCJyIixkZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsZGUoKS5zdGF0ZS5wYWRkaW5nK2RlKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN5IixkZSgpLnN0YXRlLnBhZGRpbmcrZGUoKS5zdGF0ZS5zaXplVW5pdCksImRyYXdTdGFydFN0YXRlIikseVllPW8odD0+dC5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlIiwiZ3JleSIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMyIpLmF0dHIoIngxIixkZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngyIixkZSgpLnN0YXRlLnRleHRIZWlnaHQqMikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSwiZHJhd0RpdmlkZXIiKSx2WWU9bygodCxlKT0+e2xldCByPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipkZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGRlKCkuc3RhdGUudGV4dEhlaWdodCsyKmRlKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixkZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxuPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixkZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGRlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLG4ud2lkdGgrMipkZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrMipkZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixkZSgpLnN0YXRlLnJhZGl1cykscn0sImRyYXdTaW1wbGVTdGF0ZSIpLHhZZT1vKCh0LGUpPT57bGV0IHI9byhmdW5jdGlvbihwLG0sZyl7bGV0IHk9cC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMipkZSgpLnN0YXRlLnBhZGRpbmcpLnRleHQobSk7Z3x8eS5hdHRyKCJkeSIsZGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KX0sImFkZFRzcGFuIiksaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqZGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixkZSgpLnN0YXRlLnRleHRIZWlnaHQrMS4zKmRlKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixkZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmRlc2NyaXB0aW9uc1swXSkubm9kZSgpLmdldEJCb3goKSxhPWkuaGVpZ2h0LHM9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixkZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGErZGUoKS5zdGF0ZS5wYWRkaW5nKi40K2RlKCkuc3RhdGUuZGl2aWRlck1hcmdpbitkZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwic3RhdGUtZGVzY3JpcHRpb24iKSxsPSEwLHU9ITA7ZS5kZXNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwKXtsfHwocihzLHAsdSksdT0hMSksbD0hMX0pO2xldCBoPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGRlKCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLGRlKCkuc3RhdGUucGFkZGluZythK2RlKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsZGUoKS5zdGF0ZS5wYWRkaW5nK2ErZGUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGY9cy5ub2RlKCkuZ2V0QkJveCgpLGQ9TWF0aC5tYXgoZi53aWR0aCxpLndpZHRoKTtyZXR1cm4gaC5hdHRyKCJ4MiIsZCszKmRlKCkuc3RhdGUucGFkZGluZyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixkZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGRlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGQrMipkZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrYSsyKmRlKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLGRlKCkuc3RhdGUucmFkaXVzKSx0fSwiZHJhd0Rlc2NyU3RhdGUiKSx5MGU9bygodCxlLHIpPT57bGV0IG49ZGUoKS5zdGF0ZS5wYWRkaW5nLGk9MipkZSgpLnN0YXRlLnBhZGRpbmcsYT10Lm5vZGUoKS5nZXRCQm94KCkscz1hLndpZHRoLGw9YS54LHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixkZSgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIsZGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksZj11Lm5vZGUoKS5nZXRCQm94KCkud2lkdGgraSxkPU1hdGgubWF4KGYscyk7ZD09PXMmJihkPWQraSk7bGV0IHAsbT10Lm5vZGUoKS5nZXRCQm94KCk7ZS5kb2MscD1sLW4sZj5zJiYocD0ocy1kKS8yK24pLE1hdGguYWJzKGwtbS54KTxuJiZmPnMmJihwPWwtKGYtcykvMik7bGV0IGc9MS1kZSgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscCkuYXR0cigieSIsZykuYXR0cigiY2xhc3MiLHI/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLGQpLmF0dHIoImhlaWdodCIsbS5oZWlnaHQrZGUoKS5zdGF0ZS50ZXh0SGVpZ2h0K2RlKCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSx1LmF0dHIoIngiLHArbiksZjw9cyYmdS5hdHRyKCJ4IixsKyhkLWkpLzItZi8yK24pLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscCkuYXR0cigieSIsZGUoKS5zdGF0ZS50aXRsZVNoaWZ0LWRlKCkuc3RhdGUudGV4dEhlaWdodC1kZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLGRlKCkuc3RhdGUudGV4dEhlaWdodCozKS5hdHRyKCJyeCIsZGUoKS5zdGF0ZS5yYWRpdXMpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscCkuYXR0cigieSIsZGUoKS5zdGF0ZS50aXRsZVNoaWZ0LWRlKCkuc3RhdGUudGV4dEhlaWdodC1kZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KzMrMipkZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixkZSgpLnN0YXRlLnJhZGl1cyksdH0sImFkZFRpdGxlQW5kQm94IiksYlllPW8odD0+KHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1vdXRlciIpLmF0dHIoInIiLGRlKCkuc3RhdGUuc2l6ZVVuaXQrZGUoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3giLGRlKCkuc3RhdGUucGFkZGluZytkZSgpLnN0YXRlLnNpemVVbml0K2RlKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN5IixkZSgpLnN0YXRlLnBhZGRpbmcrZGUoKS5zdGF0ZS5zaXplVW5pdCtkZSgpLnN0YXRlLm1pbmlQYWRkaW5nKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtaW5uZXIiKS5hdHRyKCJyIixkZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsZGUoKS5zdGF0ZS5wYWRkaW5nK2RlKCkuc3RhdGUuc2l6ZVVuaXQrMikuYXR0cigiY3kiLGRlKCkuc3RhdGUucGFkZGluZytkZSgpLnN0YXRlLnNpemVVbml0KzIpKSwiZHJhd0VuZFN0YXRlIiksd1llPW8oKHQsZSk9PntsZXQgcj1kZSgpLnN0YXRlLmZvcmtXaWR0aCxuPWRlKCkuc3RhdGUuZm9ya0hlaWdodDtpZihlLnBhcmVudElkKXtsZXQgaT1yO3I9bixuPWl9cmV0dXJuIHQuYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuc3R5bGUoImZpbGwiLCJibGFjayIpLmF0dHIoIndpZHRoIixyKS5hdHRyKCJoZWlnaHQiLG4pLmF0dHIoIngiLGRlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsZGUoKS5zdGF0ZS5wYWRkaW5nKX0sImRyYXdGb3JrSm9pblN0YXRlIiksVFllPW8oKHQsZSxyLG4pPT57bGV0IGk9MCxhPW4uYXBwZW5kKCJ0ZXh0Iik7YS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLGEuYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO2xldCBzPXQucmVwbGFjZSgvXHJcbi9nLCI8YnIvPiIpO3M9cy5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpO2xldCBsPXMuc3BsaXQoamUubGluZUJyZWFrUmVnZXgpLHU9MS4yNSpkZSgpLnN0YXRlLm5vdGVNYXJnaW47Zm9yKGxldCBoIG9mIGwpe2xldCBmPWgudHJpbSgpO2lmKGYubGVuZ3RoPjApe2xldCBkPWEuYXBwZW5kKCJ0c3BhbiIpO2lmKGQudGV4dChmKSx1PT09MCl7bGV0IHA9ZC5ub2RlKCkuZ2V0QkJveCgpO3UrPXAuaGVpZ2h0fWkrPXUsZC5hdHRyKCJ4IixlK2RlKCkuc3RhdGUubm90ZU1hcmdpbiksZC5hdHRyKCJ5IixyK2krMS4yNSpkZSgpLnN0YXRlLm5vdGVNYXJnaW4pfX1yZXR1cm57dGV4dFdpZHRoOmEubm9kZSgpLmdldEJCb3goKS53aWR0aCx0ZXh0SGVpZ2h0Oml9fSwiX2RyYXdMb25nVGV4dCIpLGtZZT1vKCh0LGUpPT57ZS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTtsZXQgcj1lLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGRlKCkuc3RhdGUucGFkZGluZyksbj1lLmFwcGVuZCgiZyIpLHt0ZXh0V2lkdGg6aSx0ZXh0SGVpZ2h0OmF9PVRZZSh0LDAsMCxuKTtyZXR1cm4gci5hdHRyKCJoZWlnaHQiLGErMipkZSgpLnN0YXRlLm5vdGVNYXJnaW4pLHIuYXR0cigid2lkdGgiLGkrZGUoKS5zdGF0ZS5ub3RlTWFyZ2luKjIpLHJ9LCJkcmF3Tm90ZSIpLGNQPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLmlkLG49e2lkOnIsbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxpPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLHIpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2UudHlwZT09PSJzdGFydCImJmdZZShpKSxlLnR5cGU9PT0iZW5kIiYmYlllKGkpLChlLnR5cGU9PT0iZm9yayJ8fGUudHlwZT09PSJqb2luIikmJndZZShpLGUpLGUudHlwZT09PSJub3RlIiYma1llKGUubm90ZS50ZXh0LGkpLGUudHlwZT09PSJkaXZpZGVyIiYmeVllKGkpLGUudHlwZT09PSJkZWZhdWx0IiYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPT09MCYmdlllKGksZSksZS50eXBlPT09ImRlZmF1bHQiJiZlLmRlc2NyaXB0aW9ucy5sZW5ndGg+MCYmeFllKGksZSk7bGV0IGE9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBuLndpZHRoPWEud2lkdGgrMipkZSgpLnN0YXRlLnBhZGRpbmcsbi5oZWlnaHQ9YS5oZWlnaHQrMipkZSgpLnN0YXRlLnBhZGRpbmcscDBlLnNldChyLG4pLG59LCJkcmF3U3RhdGUiKSxnMGU9MCx2MGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49byhmdW5jdGlvbih1KXtzd2l0Y2godSl7Y2FzZSB0bC5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlIHRsLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSB0bC5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIHRsLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19LCJnZXRSZWxhdGlvblR5cGUiKTtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIodT0+IU51bWJlci5pc05hTih1LnkpKTtsZXQgaT1lLnBvaW50cyxhPUthKCkueChmdW5jdGlvbih1KXtyZXR1cm4gdS54fSkueShmdW5jdGlvbih1KXtyZXR1cm4gdS55fSkuY3VydmUoRG8pLHM9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixhKGkpKS5hdHRyKCJpZCIsImVkZ2UiK2cwZSkuYXR0cigiY2xhc3MiLCJ0cmFuc2l0aW9uIiksbD0iIjtpZihkZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihsPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLGw9bC5yZXBsYWNlKC9cKC9nLCJcXCgiKSxsPWwucmVwbGFjZSgvXCkvZywiXFwpIikpLHMuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2wrIiMiK24odGwucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksci50aXRsZSE9PXZvaWQgMCl7bGV0IHU9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx7eDpoLHk6Zn09VXQuY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpLGQ9amUuZ2V0Um93cyhyLnRpdGxlKSxwPTAsbT1bXSxnPTAseT0wO2ZvcihsZXQgYj0wO2I8PWQubGVuZ3RoO2IrKyl7bGV0IHc9dS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZFtiXSkuYXR0cigieCIsaCkuYXR0cigieSIsZitwKSxfPXcubm9kZSgpLmdldEJCb3goKTtnPU1hdGgubWF4KGcsXy53aWR0aCkseT1NYXRoLm1pbih5LF8ueCksWS5pbmZvKF8ueCxoLGYrcCkscD09PTAmJihwPXcubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsWS5pbmZvKCJUaXRsZSBoZWlnaHQiLHAsZikpLG0ucHVzaCh3KX1sZXQgdj1wKmQubGVuZ3RoO2lmKGQubGVuZ3RoPjEpe2xldCBiPShkLmxlbmd0aC0xKSpwKi41O20uZm9yRWFjaCgodyxfKT0+dy5hdHRyKCJ5IixmK18qcC1iKSksdj1wKmQubGVuZ3RofWxldCB4PXUubm9kZSgpLmdldEJCb3goKTt1Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsaC1nLzItZGUoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLGYtdi8yLWRlKCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLGcrZGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHYrZGUoKS5zdGF0ZS5wYWRkaW5nKSxZLmluZm8oeCl9ZzBlKyt9LCJkcmF3RWRnZSIpfSk7dmFyIGZvLHVQLEVZZSxTWWUsQ1llLEFZZSxiMGUsdzBlLFQwZT1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7UHYoKTtOcygpO2h0KCk7ZnIoKTt4MGUoKTtWdCgpO25pKCk7dVA9e30sRVllPW8oZnVuY3Rpb24oKXt9LCJzZXRDb25mIiksU1llPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiaW5zZXJ0TWFya2VycyIpLENZZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2ZvPWRlKCkuc3RhdGU7bGV0IGk9ZGUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9emUoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij96ZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOnplKCJib2R5IiksbD1pPT09InNhbmRib3giP2Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7WS5kZWJ1ZygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTtsZXQgdT1zLnNlbGVjdChgW2lkPScke2V9J11gKTtTWWUodSk7bGV0IGg9bi5kYi5nZXRSb290RG9jKCk7YjBlKGgsdSx2b2lkIDAsITEscyxsLG4pO2xldCBmPWZvLnBhZGRpbmcsZD11Lm5vZGUoKS5nZXRCQm94KCkscD1kLndpZHRoK2YqMixtPWQuaGVpZ2h0K2YqMixnPXAqMS43NTtacih1LG0sZyxmby51c2VNYXhXaWR0aCksdS5hdHRyKCJ2aWV3Qm94IixgJHtkLngtZm8ucGFkZGluZ30gICR7ZC55LWZvLnBhZGRpbmd9IGArcCsiICIrbSl9LCJkcmF3IiksQVllPW8odD0+dD90Lmxlbmd0aCpmby5mb250U2l6ZUZhY3RvcjoxLCJnZXRMYWJlbFdpZHRoIiksYjBlPW8oKHQsZSxyLG4saSxhLHMpPT57bGV0IGw9bmV3IE1yKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSksdSxoPSEwO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5zdG10PT09InJlbGF0aW9uIil7aD0hMTticmVha31yP2wuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpoPzE6Zm8uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmg/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpsLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmg/MTpmby5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6aD8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksbC5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxzLmRiLmV4dHJhY3QodCk7bGV0IGY9cy5kYi5nZXRTdGF0ZXMoKSxkPXMuZGIuZ2V0UmVsYXRpb25zKCkscD1PYmplY3Qua2V5cyhmKSxtPSEwO2ZvcihsZXQgYiBvZiBwKXtsZXQgdz1mW2JdO3ImJih3LnBhcmVudElkPXIpO2xldCBfO2lmKHcuZG9jKXtsZXQgVD1lLmFwcGVuZCgiZyIpLmF0dHIoImlkIix3LmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtpZihfPWIwZSh3LmRvYyxULHcuaWQsIW4saSxhLHMpLG0pe1Q9eTBlKFQsdyxuKTtsZXQgRT1ULm5vZGUoKS5nZXRCQm94KCk7Xy53aWR0aD1FLndpZHRoLF8uaGVpZ2h0PUUuaGVpZ2h0K2ZvLnBhZGRpbmcvMix1UFt3LmlkXT17eTpmby5jb21wb3NpdFRpdGxlU2l6ZX19ZWxzZXtsZXQgRT1ULm5vZGUoKS5nZXRCQm94KCk7Xy53aWR0aD1FLndpZHRoLF8uaGVpZ2h0PUUuaGVpZ2h0fX1lbHNlIF89Y1AoZSx3LGwpO2lmKHcubm90ZSl7bGV0IFQ9e2Rlc2NyaXB0aW9uczpbXSxpZDp3LmlkKyItbm90ZSIsbm90ZTp3Lm5vdGUsdHlwZToibm90ZSJ9LEU9Y1AoZSxULGwpO3cubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIj8obC5zZXROb2RlKF8uaWQrIi1ub3RlIixFKSxsLnNldE5vZGUoXy5pZCxfKSk6KGwuc2V0Tm9kZShfLmlkLF8pLGwuc2V0Tm9kZShfLmlkKyItbm90ZSIsRSkpLGwuc2V0UGFyZW50KF8uaWQsXy5pZCsiLWdyb3VwIiksbC5zZXRQYXJlbnQoXy5pZCsiLW5vdGUiLF8uaWQrIi1ncm91cCIpfWVsc2UgbC5zZXROb2RlKF8uaWQsXyl9WS5kZWJ1ZygiQ291bnQ9IixsLm5vZGVDb3VudCgpLGwpO2xldCBnPTA7ZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2crKyxZLmRlYnVnKCJTZXR0aW5nIGVkZ2UiLGIpLGwuc2V0RWRnZShiLmlkMSxiLmlkMix7cmVsYXRpb246Yix3aWR0aDpBWWUoYi50aXRsZSksaGVpZ2h0OmZvLmxhYmVsSGVpZ2h0KmplLmdldFJvd3MoYi50aXRsZSkubGVuZ3RoLGxhYmVscG9zOiJjIn0sImlkIitnKX0pLER1KGwpLFkuZGVidWcoIkdyYXBoIGFmdGVyIGxheW91dCIsbC5ub2RlcygpKTtsZXQgeT1lLm5vZGUoKTtsLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihiKXtiIT09dm9pZCAwJiZsLm5vZGUoYikhPT12b2lkIDA/KFkud2FybigiTm9kZSAiK2IrIjogIitKU09OLnN0cmluZ2lmeShsLm5vZGUoYikpKSxpLnNlbGVjdCgiIyIreS5pZCsiICMiK2IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhsLm5vZGUoYikueC1sLm5vZGUoYikud2lkdGgvMikrIiwiKyhsLm5vZGUoYikueSsodVBbYl0/dVBbYl0ueTowKS1sLm5vZGUoYikuaGVpZ2h0LzIpKyIgKSIpLGkuc2VsZWN0KCIjIit5LmlkKyIgIyIrYikuYXR0cigiZGF0YS14LXNoaWZ0IixsLm5vZGUoYikueC1sLm5vZGUoYikud2lkdGgvMiksYS5xdWVyeVNlbGVjdG9yQWxsKCIjIit5LmlkKyIgIyIrYisiIC5kaXZpZGVyIikuZm9yRWFjaChfPT57bGV0IFQ9Xy5wYXJlbnRFbGVtZW50LEU9MCxMPTA7VCYmKFQucGFyZW50RWxlbWVudCYmKEU9VC5wYXJlbnRFbGVtZW50LmdldEJCb3goKS53aWR0aCksTD1wYXJzZUludChULmdldEF0dHJpYnV0ZSgiZGF0YS14LXNoaWZ0IiksMTApLE51bWJlci5pc05hTihMKSYmKEw9MCkpLF8uc2V0QXR0cmlidXRlKCJ4MSIsMC1MKzgpLF8uc2V0QXR0cmlidXRlKCJ4MiIsRS1MLTgpfSkpOlkuZGVidWcoIk5vIE5vZGUgIitiKyI6ICIrSlNPTi5zdHJpbmdpZnkobC5ub2RlKGIpKSl9KTtsZXQgdj15LmdldEJCb3goKTtsLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihiKXtiIT09dm9pZCAwJiZsLmVkZ2UoYikhPT12b2lkIDAmJihZLmRlYnVnKCJFZGdlICIrYi52KyIgLT4gIitiLncrIjogIitKU09OLnN0cmluZ2lmeShsLmVkZ2UoYikpKSx2MGUoZSxsLmVkZ2UoYiksbC5lZGdlKGIpLnJlbGF0aW9uKSl9KSx2PXkuZ2V0QkJveCgpO2xldCB4PXtpZDpyfHwicm9vdCIsbGFiZWw6cnx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiB4LndpZHRoPXYud2lkdGgrMipmby5wYWRkaW5nLHguaGVpZ2h0PXYuaGVpZ2h0KzIqZm8ucGFkZGluZyxZLmRlYnVnKCJEb2MgcmVuZGVyZWQiLHgsbCkseH0sInJlbmRlckRvYyIpLHcwZT17c2V0Q29uZjpFWWUsZHJhdzpDWWV9fSk7dmFyIGswZT17fTt2cihrMGUse2RpYWdyYW06KCk9Pl9ZZX0pO3ZhciBfWWUsRTBlPU0oKCk9PnsidXNlIHN0cmljdCI7ek8oKTtWRSgpO29QKCk7VDBlKCk7X1llPXtwYXJzZXI6X0UsZGI6dGwscmVuZGVyZXI6dzBlLHN0eWxlczpVRSxpbml0Om8odD0+e3Quc3RhdGV8fCh0LnN0YXRlPXt9KSx0LnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLHRsLmNsZWFyKCl9LCJpbml0Iil9fSk7dmFyIEEwZT17fTt2cihBMGUse2RpYWdyYW06KCk9PlJZZX0pO3ZhciBSWWUsXzBlPU0oKCk9PnsidXNlIHN0cmljdCI7ek8oKTtWRSgpO29QKCk7Sk8oKTtSWWU9e3BhcnNlcjpfRSxkYjp0bCxyZW5kZXJlcjpKZGUsc3R5bGVzOlVFLGluaXQ6byh0PT57dC5zdGF0ZXx8KHQuc3RhdGU9e30pLHQuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGUsdGwuY2xlYXIoKX0sImluaXQiKX19KTt2YXIgaFAsTjBlLFIwZT1NKCgpPT57InVzZSBzdHJpY3QiO2hQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihkLHAsbSxnKXtmb3IobT1tfHx7fSxnPWQubGVuZ3RoO2ctLTttW2RbZ11dPXApO3JldHVybiBtfSwibyIpLGU9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywxOF0scj1bMSw5XSxuPVsxLDEwXSxpPVsxLDExXSxhPVsxLDEyXSxzPVsxLDEzXSxsPVsxLDE0XSx1PXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGpvdXJuZXk6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyx0YXNrTmFtZToxOCx0YXNrRGF0YToxOSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDExOiJ0aXRsZSIsMTI6ImFjY190aXRsZSIsMTM6ImFjY190aXRsZV92YWx1ZSIsMTQ6ImFjY19kZXNjciIsMTU6ImFjY19kZXNjcl92YWx1ZSIsMTY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE3OiJzZWN0aW9uIiwxODoidGFza05hbWUiLDE5OiJ0YXNrRGF0YSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwyXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHAsbSxnLHksdix4LGIpe3ZhciB3PXgubGVuZ3RoLTE7c3dpdGNoKHYpe2Nhc2UgMTpyZXR1cm4geFt3LTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOnhbdy0xXS5wdXNoKHhbd10pLHRoaXMuJD14W3ctMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9eFt3XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6eS5zZXREaWFncmFtVGl0bGUoeFt3XS5zdWJzdHIoNikpLHRoaXMuJD14W3ddLnN1YnN0cig2KTticmVhaztjYXNlIDk6dGhpcy4kPXhbd10udHJpbSgpLHkuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEwOmNhc2UgMTE6dGhpcy4kPXhbd10udHJpbSgpLHkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOnkuYWRkU2VjdGlvbih4W3ddLnN1YnN0cig4KSksdGhpcy4kPXhbd10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTM6eS5hZGRUYXNrKHhbdy0xXSx4W3ddKSx0aGlzLiQ9InRhc2siO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sdChlLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4Omx9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MTUsMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4Omx9LHQoZSxbMiw1XSksdChlLFsyLDZdKSx0KGUsWzIsOF0pLHsxMzpbMSwxNl19LHsxNTpbMSwxN119LHQoZSxbMiwxMV0pLHQoZSxbMiwxMl0pLHsxOTpbMSwxOF19LHQoZSxbMiw0XSksdChlLFsyLDldKSx0KGUsWzIsMTBdKSx0KGUsWzIsMTNdKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHAsbSl7aWYobS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHApO2Vsc2V7dmFyIGc9bmV3IEVycm9yKHApO3Rocm93IGcuaGFzaD1tLGd9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24ocCl7dmFyIG09dGhpcyxnPVswXSx5PVtdLHY9W251bGxdLHg9W10sYj10aGlzLnRhYmxlLHc9IiIsXz0wLFQ9MCxFPTAsTD0yLEM9MSxBPXguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksST1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLEQ9e3l5Ont9fTtmb3IodmFyIGsgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxrKSYmKEQueXlba109dGhpcy55eVtrXSk7SS5zZXRJbnB1dChwLEQueXkpLEQueXkubGV4ZXI9SSxELnl5LnBhcnNlcj10aGlzLHR5cGVvZiBJLnl5bGxvYz4idSImJihJLnl5bGxvYz17fSk7dmFyIFI9SS55eWxsb2M7eC5wdXNoKFIpO3ZhciBTPUkub3B0aW9ucyYmSS5vcHRpb25zLnJhbmdlczt0eXBlb2YgRC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1ELnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE8oSCl7Zy5sZW5ndGg9Zy5sZW5ndGgtMipILHYubGVuZ3RoPXYubGVuZ3RoLUgseC5sZW5ndGg9eC5sZW5ndGgtSH1vKE8sInBvcFN0YWNrIik7ZnVuY3Rpb24gTigpe3ZhciBIO3JldHVybiBIPXkucG9wKCl8fEkubGV4KCl8fEMsdHlwZW9mIEghPSJudW1iZXIiJiYoSCBpbnN0YW5jZW9mIEFycmF5JiYoeT1ILEg9eS5wb3AoKSksSD1tLnN5bWJvbHNfW0hdfHxIKSxIfW8oTiwibGV4Iik7Zm9yKHZhciBQLEYsQiwkLHosVyxqPXt9LEssaWUsUSxlZTs7KXtpZihCPWdbZy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tCXT8kPXRoaXMuZGVmYXVsdEFjdGlvbnNbQl06KChQPT09bnVsbHx8dHlwZW9mIFA+InUiKSYmKFA9TigpKSwkPWJbQl0mJmJbQl1bUF0pLHR5cGVvZiAkPiJ1Inx8ISQubGVuZ3RofHwhJFswXSl7dmFyIEo9IiI7ZWU9W107Zm9yKEsgaW4gYltCXSl0aGlzLnRlcm1pbmFsc19bS10mJks+TCYmZWUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0tdKyInIik7SS5zaG93UG9zaXRpb24/Sj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhfKzEpK2A6CmArSS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2VlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bUF18fFApKyInIjpKPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKF8rMSkrIjogVW5leHBlY3RlZCAiKyhQPT1DPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1BdfHxQKSsiJyIpLHRoaXMucGFyc2VFcnJvcihKLHt0ZXh0OkkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1BdfHxQLGxpbmU6SS55eWxpbmVubyxsb2M6UixleHBlY3RlZDplZX0pfWlmKCRbMF1pbnN0YW5jZW9mIEFycmF5JiYkLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrQisiLCB0b2tlbjogIitQKTtzd2l0Y2goJFswXSl7Y2FzZSAxOmcucHVzaChQKSx2LnB1c2goSS55eXRleHQpLHgucHVzaChJLnl5bGxvYyksZy5wdXNoKCRbMV0pLFA9bnVsbCxGPyhQPUYsRj1udWxsKTooVD1JLnl5bGVuZyx3PUkueXl0ZXh0LF89SS55eWxpbmVubyxSPUkueXlsbG9jLEU+MCYmRS0tKTticmVhaztjYXNlIDI6aWYoaWU9dGhpcy5wcm9kdWN0aW9uc19bJFsxXV1bMV0sai4kPXZbdi5sZW5ndGgtaWVdLGouXyQ9e2ZpcnN0X2xpbmU6eFt4Lmxlbmd0aC0oaWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp4W3gubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46eFt4Lmxlbmd0aC0oaWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46eFt4Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sUyYmKGouXyQucmFuZ2U9W3hbeC5sZW5ndGgtKGllfHwxKV0ucmFuZ2VbMF0seFt4Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLFc9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGosW3csVCxfLEQueXksJFsxXSx2LHhdLmNvbmNhdChBKSksdHlwZW9mIFc8InUiKXJldHVybiBXO2llJiYoZz1nLnNsaWNlKDAsLTEqaWUqMiksdj12LnNsaWNlKDAsLTEqaWUpLHg9eC5zbGljZSgwLC0xKmllKSksZy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfWyRbMV1dWzBdKSx2LnB1c2goai4kKSx4LnB1c2goai5fJCksUT1iW2dbZy5sZW5ndGgtMl1dW2dbZy5sZW5ndGgtMV1dLGcucHVzaChRKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0saD1mdW5jdGlvbigpe3ZhciBkPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24obSxnKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKG0sZyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IobSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihwLG0pe3JldHVybiB0aGlzLnl5PW18fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXAsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgcD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9cCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9cCx0aGlzLm1hdGNoZWQrPXA7dmFyIG09cC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIG0/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHB9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24ocCl7dmFyIG09cC5sZW5ndGgsZz1wLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9cCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtbSksdGhpcy5vZmZzZXQtPW07dmFyIHk9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWcubGVuZ3RoLTEpO3ZhciB2PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpnPyhnLmxlbmd0aD09PXkubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt5W3kubGVuZ3RoLWcubGVuZ3RoXS5sZW5ndGgtZ1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLW19LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdlswXSx2WzBdK3RoaXMueXlsZW5nLW1dKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihwKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UocCkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihwLmxlbmd0aD4yMD8iLi4uIjoiIikrcC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBwPXRoaXMubWF0Y2g7cmV0dXJuIHAubGVuZ3RoPDIwJiYocCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtcC5sZW5ndGgpKSwocC5zdWJzdHIoMCwyMCkrKHAubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgcD10aGlzLnBhc3RJbnB1dCgpLG09bmV3IEFycmF5KHAubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gcCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArbSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24ocCxtKXt2YXIgZyx5LHY7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHY9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx5PXBbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHkmJih0aGlzLnl5bGluZW5vKz15Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnk/eVt5Lmxlbmd0aC0xXS5sZW5ndGgteVt5Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3BbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9cFswXSx0aGlzLm1hdGNoKz1wWzBdLHRoaXMubWF0Y2hlcz1wLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHBbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXBbMF0sZz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxtLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGcpcmV0dXJuIGc7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHggaW4gdil0aGlzW3hdPXZbeF07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHAsbSxnLHk7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgdj10aGlzLl9jdXJyZW50UnVsZXMoKSx4PTA7eDx2Lmxlbmd0aDt4KyspaWYoZz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3ZbeF1dKSxnJiYoIW18fGdbMF0ubGVuZ3RoPm1bMF0ubGVuZ3RoKSl7aWYobT1nLHk9eCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihwPXRoaXMudGVzdF9tYXRjaChnLHZbeF0pLHAhPT0hMSlyZXR1cm4gcDtpZih0aGlzLl9iYWNrdHJhY2spe209ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gbT8ocD10aGlzLnRlc3RfbWF0Y2gobSx2W3ldKSxwIT09ITE/cDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMubmV4dCgpO3JldHVybiBtfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihtKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBtPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24obSl7cmV0dXJuIG09dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhtfHwwKSxtPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbbV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihtKXt0aGlzLmJlZ2luKG0pfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24obSxnLHksdil7dmFyIHg9djtzd2l0Y2goeSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2JyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAxODtjYXNlIDE2OnJldHVybiAxOTtjYXNlIDE3OnJldHVybiI6IjtjYXNlIDE4OnJldHVybiA2O2Nhc2UgMTk6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86am91cm5leVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywxOCwxOV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBkfSgpO3UubGV4ZXI9aDtmdW5jdGlvbiBmKCl7dGhpcy55eT17fX1yZXR1cm4gbyhmLCJQYXJzZXIiKSxmLnByb3RvdHlwZT11LHUuUGFyc2VyPWYsbmV3IGZ9KCk7aFAucGFyc2VyPWhQO04wZT1oUH0pO3ZhciBZZyxmUCxBeCxfeCxQWWUsQlllLEZZZSx6WWUsR1llLCRZZSxWWWUsTTBlLFVZZSxkUCxJMGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2tpKCk7WWc9IiIsZlA9W10sQXg9W10sX3g9W10sUFllPW8oZnVuY3Rpb24oKXtmUC5sZW5ndGg9MCxBeC5sZW5ndGg9MCxZZz0iIixfeC5sZW5ndGg9MCxfcigpfSwiY2xlYXIiKSxCWWU9byhmdW5jdGlvbih0KXtZZz10LGZQLnB1c2godCl9LCJhZGRTZWN0aW9uIiksRlllPW8oZnVuY3Rpb24oKXtyZXR1cm4gZlB9LCJnZXRTZWN0aW9ucyIpLHpZZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9TTBlKCksZT0xMDAscj0wO2Zvcig7IXQmJnI8ZTspdD1NMGUoKSxyKys7cmV0dXJuIEF4LnB1c2goLi4uX3gpLEF4fSwiZ2V0VGFza3MiKSxHWWU9byhmdW5jdGlvbigpe2xldCB0PVtdO3JldHVybiBBeC5mb3JFYWNoKHI9PntyLnBlb3BsZSYmdC5wdXNoKC4uLnIucGVvcGxlKX0pLFsuLi5uZXcgU2V0KHQpXS5zb3J0KCl9LCJ1cGRhdGVBY3RvcnMiKSwkWWU9byhmdW5jdGlvbih0LGUpe2xldCByPWUuc3Vic3RyKDEpLnNwbGl0KCI6Iiksbj0wLGk9W107ci5sZW5ndGg9PT0xPyhuPU51bWJlcihyWzBdKSxpPVtdKToobj1OdW1iZXIoclswXSksaT1yWzFdLnNwbGl0KCIsIikpO2xldCBhPWkubWFwKGw9PmwudHJpbSgpKSxzPXtzZWN0aW9uOllnLHR5cGU6WWcscGVvcGxlOmEsdGFzazp0LHNjb3JlOm59O194LnB1c2gocyl9LCJhZGRUYXNrIiksVlllPW8oZnVuY3Rpb24odCl7bGV0IGU9e3NlY3Rpb246WWcsdHlwZTpZZyxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfTtBeC5wdXNoKGUpfSwiYWRkVGFza09yZyIpLE0wZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9byhmdW5jdGlvbihyKXtyZXR1cm4gX3hbcl0ucHJvY2Vzc2VkfSwiY29tcGlsZVRhc2siKSxlPSEwO2ZvcihsZXRbcixuXW9mIF94LmVudHJpZXMoKSl0KHIpLGU9ZSYmbi5wcm9jZXNzZWQ7cmV0dXJuIGV9LCJjb21waWxlVGFza3MiKSxVWWU9byhmdW5jdGlvbigpe3JldHVybiBHWWUoKX0sImdldEFjdG9ycyIpLGRQPXtnZXRDb25maWc6bygoKT0+ZGUoKS5qb3VybmV5LCJnZXRDb25maWciKSxjbGVhcjpQWWUsc2V0RGlhZ3JhbVRpdGxlOmxuLGdldERpYWdyYW1UaXRsZTpKcixzZXRBY2NUaXRsZTpScixnZXRBY2NUaXRsZTpQcixzZXRBY2NEZXNjcmlwdGlvbjpCcixnZXRBY2NEZXNjcmlwdGlvbjpGcixhZGRTZWN0aW9uOkJZZSxnZXRTZWN0aW9uczpGWWUsZ2V0VGFza3M6elllLGFkZFRhc2s6JFllLGFkZFRhc2tPcmc6VlllLGdldEFjdG9yczpVWWV9fSk7dmFyIEhZZSxPMGUsUDBlPU0oKCk9PnsidXNlIHN0cmljdCI7SFllPW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgY29sb3I6ICR7dC50ZXh0Q29sb3J9OwogIH0KICAubW91dGggewogICAgc3Ryb2tlOiAjNjY2OwogIH0KCiAgbGluZSB7CiAgICBzdHJva2U6ICR7dC50ZXh0Q29sb3J9CiAgfQoKICAubGVnZW5kIHsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KCiAgLmxhYmVsIHRleHQgewogICAgZmlsbDogIzMzMzsKICB9CiAgLmxhYmVsIHsKICAgIGNvbG9yOiAke3QudGV4dENvbG9yfQogIH0KCiAgLmZhY2UgewogICAgJHt0LmZhY2VDb2xvcj9gZmlsbDogJHt0LmZhY2VDb2xvcn1gOiJmaWxsOiAjRkZGOERDIn07CiAgICBzdHJva2U6ICM5OTk7CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7dC5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlMH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTF9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGUyfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlM31gOiIifTsKICB9CiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTR9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU1fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlNn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTd9YDoiIn07CiAgfQoKICAuYWN0b3ItMCB7CiAgICAke3QuYWN0b3IwP2BmaWxsOiAke3QuYWN0b3IwfWA6IiJ9OwogIH0KICAuYWN0b3ItMSB7CiAgICAke3QuYWN0b3IxP2BmaWxsOiAke3QuYWN0b3IxfWA6IiJ9OwogIH0KICAuYWN0b3ItMiB7CiAgICAke3QuYWN0b3IyP2BmaWxsOiAke3QuYWN0b3IyfWA6IiJ9OwogIH0KICAuYWN0b3ItMyB7CiAgICAke3QuYWN0b3IzP2BmaWxsOiAke3QuYWN0b3IzfWA6IiJ9OwogIH0KICAuYWN0b3ItNCB7CiAgICAke3QuYWN0b3I0P2BmaWxsOiAke3QuYWN0b3I0fWA6IiJ9OwogIH0KICAuYWN0b3ItNSB7CiAgICAke3QuYWN0b3I1P2BmaWxsOiAke3QuYWN0b3I1fWA6IiJ9OwogIH0KYCwiZ2V0U3R5bGVzIiksTzBlPUhZZX0pO3ZhciBwUCxXWWUsRjBlLHowZSxZWWUscVllLEIwZSxYWWUsalllLEcwZSxLWWUscWcsJDBlPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTtxeSgpO3BQPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gbWQodCxlKX0sImRyYXdSZWN0IiksV1llPW8oZnVuY3Rpb24odCxlKXtsZXQgbj10LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gpLmF0dHIoImN5IixlLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxpPXQuYXBwZW5kKCJnIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4LTE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3grMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIGEodSl7bGV0IGg9RWwoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoMyooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzIpKyIpIil9byhhLCJzbWlsZSIpO2Z1bmN0aW9uIHModSl7bGV0IGg9RWwoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krNykrIikiKX1vKHMsInNhZCIpO2Z1bmN0aW9uIGwodSl7dS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsZS5jeC01KS5hdHRyKCJ5MSIsZS5jeSs3KS5hdHRyKCJ4MiIsZS5jeCs1KS5hdHRyKCJ5MiIsZS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBvKGwsImFtYml2YWxlbnQiKSxlLnNjb3JlPjM/YShpKTplLnNjb3JlPDM/cyhpKTpsKGkpLG59LCJkcmF3RmFjZSIpLEYwZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiByLmF0dHIoImN4IixlLmN4KSxyLmF0dHIoImN5IixlLmN5KSxyLmF0dHIoImNsYXNzIiwiYWN0b3ItIitlLnBvcyksci5hdHRyKCJmaWxsIixlLmZpbGwpLHIuYXR0cigic3Ryb2tlIixlLnN0cm9rZSksci5hdHRyKCJyIixlLnIpLHIuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLHIuY2xhc3MpLGUudGl0bGUhPT12b2lkIDAmJnIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSkscn0sImRyYXdDaXJjbGUiKSx6MGU9byhmdW5jdGlvbih0LGUpe3JldHVybiBEWSh0LGUpfSwiZHJhd1RleHQiKSxZWWU9byhmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoaSxhLHMsbCx1KXtyZXR1cm4gaSsiLCIrYSsiICIrKGkrcykrIiwiK2ErIiAiKyhpK3MpKyIsIisoYStsLXUpKyIgIisoaStzLXUqMS4yKSsiLCIrKGErbCkrIiAiK2krIiwiKyhhK2wpfW8ociwiZ2VuUG9pbnRzIik7bGV0IG49dC5hcHBlbmQoInBvbHlnb24iKTtuLmF0dHIoInBvaW50cyIscihlLngsZS55LDUwLDIwLDcpKSxuLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxlLnk9ZS55K2UubGFiZWxNYXJnaW4sZS54PWUueCsuNSplLmxhYmVsTWFyZ2luLHowZSh0LGUpfSwiZHJhd0xhYmVsIikscVllPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuYXBwZW5kKCJnIiksaT1TbCgpO2kueD1lLngsaS55PWUueSxpLmZpbGw9ZS5maWxsLGkud2lkdGg9ci53aWR0aCplLnRhc2tDb3VudCtyLmRpYWdyYW1NYXJnaW5YKihlLnRhc2tDb3VudC0xKSxpLmhlaWdodD1yLmhlaWdodCxpLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW0saS5yeD0zLGkucnk9MyxwUChuLGkpLEcwZShyKShlLnRleHQsbixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LHIsZS5jb2xvdXIpfSwiZHJhd1NlY3Rpb24iKSxCMGU9LTEsWFllPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWUueCtyLndpZHRoLzIsaT10LmFwcGVuZCgiZyIpO0IwZSsrO2xldCBhPTMwMCs1KjMwO2kuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIitCMGUpLmF0dHIoIngxIixuKS5hdHRyKCJ5MSIsZS55KS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLGEpLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxXWWUoaSx7Y3g6bixjeTozMDArKDUtZS5zY29yZSkqMzAsc2NvcmU6ZS5zY29yZX0pO2xldCBzPVNsKCk7cy54PWUueCxzLnk9ZS55LHMuZmlsbD1lLmZpbGwscy53aWR0aD1yLndpZHRoLHMuaGVpZ2h0PXIuaGVpZ2h0LHMuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrZS5udW0scy5yeD0zLHMucnk9MyxwUChpLHMpO2xldCBsPWUueCsxNDtlLnBlb3BsZS5mb3JFYWNoKHU9PntsZXQgaD1lLmFjdG9yc1t1XS5jb2xvcixmPXtjeDpsLGN5OmUueSxyOjcsZmlsbDpoLHN0cm9rZToiIzAwMCIsdGl0bGU6dSxwb3M6ZS5hY3RvcnNbdV0ucG9zaXRpb259O0YwZShpLGYpLGwrPTEwfSksRzBlKHIpKGUudGFzayxpLHMueCxzLnkscy53aWR0aCxzLmhlaWdodCx7Y2xhc3M6InRhc2sifSxyLGUuY29sb3VyKX0sImRyYXdUYXNrIiksalllPW8oZnVuY3Rpb24odCxlKXtZMyh0LGUpfSwiZHJhd0JhY2tncm91bmRSZWN0IiksRzBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwraC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixkKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24ocCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkLHApe2xldHt0YXNrRm9udFNpemU6bSx0YXNrRm9udEZhbWlseTpnfT1kLHk9aS5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqbS1tKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuYXR0cigiZmlsbCIscCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzK3UvMikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSksYi5hdHRyKCJ5IixsK2gvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2cuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKXMgaW4gYSYmaS5hdHRyKHMsYVtzXSl9cmV0dXJuIG8obiwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6aS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxLWWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX0sImluaXRHcmFwaGljcyIpLHFnPXtkcmF3UmVjdDpwUCxkcmF3Q2lyY2xlOkYwZSxkcmF3U2VjdGlvbjpxWWUsZHJhd1RleHQ6ejBlLGRyYXdMYWJlbDpZWWUsZHJhd1Rhc2s6WFllLGRyYXdCYWNrZ3JvdW5kUmVjdDpqWWUsaW5pdEdyYXBoaWNzOktZZX19KTtmdW5jdGlvbiBaWWUodCl7bGV0IGU9ZGUoKS5qb3VybmV5LHI9NjA7T2JqZWN0LmtleXMoWXUpLmZvckVhY2gobj0+e2xldCBpPVl1W25dLmNvbG9yLGE9e2N4OjIwLGN5OnIscjo3LGZpbGw6aSxzdHJva2U6IiMwMDAiLHBvczpZdVtuXS5wb3NpdGlvbn07cWcuZHJhd0NpcmNsZSh0LGEpO2xldCBzPXt4OjQwLHk6cis3LGZpbGw6IiM2NjYiLHRleHQ6bix0ZXh0TWFyZ2luOmUuYm94VGV4dE1hcmdpbnw1fTtxZy5kcmF3VGV4dCh0LHMpLHIrPTIwfSl9dmFyIFFZZSxZdSxIRSxEMCxKWWUscmwsbVAsVjBlLGVxZSxnUCxVMGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpOyQwZSgpO1Z0KCk7bmkoKTtRWWU9byhmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe0hFW3JdPXRbcl19KX0sInNldENvbmYiKSxZdT17fTtvKFpZZSwiZHJhd0FjdG9yTGVnZW5kIik7SEU9ZGUoKS5qb3VybmV5LEQwPUhFLmxlZnRNYXJnaW4sSlllPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9ZGUoKS5qb3VybmV5LGE9ZGUoKS5zZWN1cml0eUxldmVsLHM7YT09PSJzYW5kYm94IiYmKHM9emUoIiNpIitlKSk7bGV0IGw9YT09PSJzYW5kYm94Ij96ZShzLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOnplKCJib2R5Iik7cmwuaW5pdCgpO2xldCB1PWwuc2VsZWN0KCIjIitlKTtxZy5pbml0R3JhcGhpY3ModSk7bGV0IGg9bi5kYi5nZXRUYXNrcygpLGY9bi5kYi5nZXREaWFncmFtVGl0bGUoKSxkPW4uZGIuZ2V0QWN0b3JzKCk7Zm9yKGxldCB4IGluIFl1KWRlbGV0ZSBZdVt4XTtsZXQgcD0wO2QuZm9yRWFjaCh4PT57WXVbeF09e2NvbG9yOmkuYWN0b3JDb2xvdXJzW3AlaS5hY3RvckNvbG91cnMubGVuZ3RoXSxwb3NpdGlvbjpwfSxwKyt9KSxaWWUodSkscmwuaW5zZXJ0KDAsMCxEMCxPYmplY3Qua2V5cyhZdSkubGVuZ3RoKjUwKSxlcWUodSxoLDApO2xldCBtPXJsLmdldEJvdW5kcygpO2YmJnUuYXBwZW5kKCJ0ZXh0IikudGV4dChmKS5hdHRyKCJ4IixEMCkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjUpO2xldCBnPW0uc3RvcHktbS5zdGFydHkrMippLmRpYWdyYW1NYXJnaW5ZLHk9RDArbS5zdG9weCsyKmkuZGlhZ3JhbU1hcmdpblg7WnIodSxnLHksaS51c2VNYXhXaWR0aCksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsRDApLmF0dHIoInkxIixpLmhlaWdodCo0KS5hdHRyKCJ4MiIseS1EMC00KS5hdHRyKCJ5MiIsaS5oZWlnaHQqNCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTtsZXQgdj1mPzcwOjA7dS5hdHRyKCJ2aWV3Qm94IixgJHttLnN0YXJ0eH0gLTI1ICR7eX0gJHtnK3Z9YCksdS5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpLHUuYXR0cigiaGVpZ2h0IixnK3YrMjUpfSwiZHJhdyIpLHJsPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6byhmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VJdGVtcz1bXSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTB9LCJpbml0IiksdXBkYXRlVmFsOm8oZnVuY3Rpb24odCxlLHIsbil7dFtlXT09PXZvaWQgMD90W2VdPXI6dFtlXT1uKHIsdFtlXSl9LCJ1cGRhdGVWYWwiKSx1cGRhdGVCb3VuZHM6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1kZSgpLmpvdXJuZXksYT10aGlzLHM9MDtmdW5jdGlvbiBsKHUpe3JldHVybiBvKGZ1bmN0aW9uKGYpe3MrKztsZXQgZD1hLnNlcXVlbmNlSXRlbXMubGVuZ3RoLXMrMTthLnVwZGF0ZVZhbChmLCJzdGFydHkiLGUtZCppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoZiwic3RvcHkiLG4rZCppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwocmwuZGF0YSwic3RhcnR4Iix0LWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHJsLmRhdGEsInN0b3B4IixyK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLHUhPT0iYWN0aXZhdGlvbiImJihhLnVwZGF0ZVZhbChmLCJzdGFydHgiLHQtZCppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoZiwic3RvcHgiLHIrZCppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwocmwuZGF0YSwic3RhcnR5IixlLWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHJsLmRhdGEsInN0b3B5IixuK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpKX0sInVwZGF0ZUl0ZW1Cb3VuZHMiKX1vKGwsInVwZGF0ZUZuIiksdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gobCgpKX0sInVwZGF0ZUJvdW5kcyIpLGluc2VydDpvKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPU1hdGgubWluKHQsciksYT1NYXRoLm1heCh0LHIpLHM9TWF0aC5taW4oZSxuKSxsPU1hdGgubWF4KGUsbik7dGhpcy51cGRhdGVWYWwocmwuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChybC5kYXRhLCJzdGFydHkiLHMsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHJsLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChybC5kYXRhLCJzdG9weSIsbCxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxzLGEsbCl9LCJpbnNlcnQiKSxidW1wVmVydGljYWxQb3M6byhmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sImJ1bXBWZXJ0aWNhbFBvcyIpLGdldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sImdldFZlcnRpY2FsUG9zIiksZ2V0Qm91bmRzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfSwiZ2V0Qm91bmRzIil9LG1QPUhFLnNlY3Rpb25GaWxscyxWMGU9SEUuc2VjdGlvbkNvbG91cnMsZXFlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWRlKCkuam91cm5leSxpPSIiLGE9bi5oZWlnaHQqMituLmRpYWdyYW1NYXJnaW5ZLHM9cithLGw9MCx1PSIjQ0NDIixoPSJibGFjayIsZj0wO2ZvcihsZXRbZCxwXW9mIGUuZW50cmllcygpKXtpZihpIT09cC5zZWN0aW9uKXt1PW1QW2wlbVAubGVuZ3RoXSxmPWwlbVAubGVuZ3RoLGg9VjBlW2wlVjBlLmxlbmd0aF07bGV0IGc9MCx5PXAuc2VjdGlvbjtmb3IobGV0IHg9ZDt4PGUubGVuZ3RoJiZlW3hdLnNlY3Rpb249PXk7eCsrKWc9ZysxO2xldCB2PXt4OmQqbi50YXNrTWFyZ2luK2Qqbi53aWR0aCtEMCx5OjUwLHRleHQ6cC5zZWN0aW9uLGZpbGw6dSxudW06Zixjb2xvdXI6aCx0YXNrQ291bnQ6Z307cWcuZHJhd1NlY3Rpb24odCx2LG4pLGk9cC5zZWN0aW9uLGwrK31sZXQgbT1wLnBlb3BsZS5yZWR1Y2UoKGcseSk9PihZdVt5XSYmKGdbeV09WXVbeV0pLGcpLHt9KTtwLng9ZCpuLnRhc2tNYXJnaW4rZCpuLndpZHRoK0QwLHAueT1zLHAud2lkdGg9bi5kaWFncmFtTWFyZ2luWCxwLmhlaWdodD1uLmRpYWdyYW1NYXJnaW5ZLHAuY29sb3VyPWgscC5maWxsPXUscC5udW09ZixwLmFjdG9ycz1tLHFnLmRyYXdUYXNrKHQscCxuKSxybC5pbnNlcnQocC54LHAueSxwLngrcC53aWR0aCtuLnRhc2tNYXJnaW4sMzAwKzUqMzApfX0sImRyYXdUYXNrcyIpLGdQPXtzZXRDb25mOlFZZSxkcmF3OkpZZX19KTt2YXIgSDBlPXt9O3ZyKEgwZSx7ZGlhZ3JhbTooKT0+dHFlfSk7dmFyIHRxZSxXMGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSMGUoKTtJMGUoKTtQMGUoKTtVMGUoKTt0cWU9e3BhcnNlcjpOMGUsZGI6ZFAscmVuZGVyZXI6Z1Asc3R5bGVzOk8wZSxpbml0Om8odD0+e2dQLnNldENvbmYodC5qb3VybmV5KSxkUC5jbGVhcigpfSwiaW5pdCIpfX0pO3ZhciB2UCxaMGUsSjBlPU0oKCk9PnsidXNlIHN0cmljdCI7dlA9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKHAsbSxnLHkpe2ZvcihnPWd8fHt9LHk9cC5sZW5ndGg7eS0tO2dbcFt5XV09bSk7cmV0dXJuIGd9LCJvIiksZT1bNiw4LDEwLDExLDEyLDE0LDE2LDE3LDIwLDIxXSxyPVsxLDldLG49WzEsMTBdLGk9WzEsMTFdLGE9WzEsMTJdLHM9WzEsMTNdLGw9WzEsMTZdLHU9WzEsMTddLGg9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsdGltZWxpbmU6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyxwZXJpb2Rfc3RhdGVtZW50OjE4LGV2ZW50X3N0YXRlbWVudDoxOSxwZXJpb2Q6MjAsZXZlbnQ6MjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDIwOiJwZXJpb2QiLDIxOiJldmVudCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMTgsMV0sWzE5LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24obSxnLHksdix4LGIsdyl7dmFyIF89Yi5sZW5ndGgtMTtzd2l0Y2goeCl7Y2FzZSAxOnJldHVybiBiW18tMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6YltfLTFdLnB1c2goYltfXSksdGhpcy4kPWJbXy0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1iW19dO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODp2LmdldENvbW1vbkRiKCkuc2V0RGlhZ3JhbVRpdGxlKGJbX10uc3Vic3RyKDYpKSx0aGlzLiQ9YltfXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD1iW19dLnRyaW0oKSx2LmdldENvbW1vbkRiKCkuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEwOmNhc2UgMTE6dGhpcy4kPWJbX10udHJpbSgpLHYuZ2V0Q29tbW9uRGIoKS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTI6di5hZGRTZWN0aW9uKGJbX10uc3Vic3RyKDgpKSx0aGlzLiQ9YltfXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNTp2LmFkZFRhc2soYltfXSwwLCIiKSx0aGlzLiQ9YltfXTticmVhaztjYXNlIDE2OnYuYWRkRXZlbnQoYltfXS5zdWJzdHIoMikpLHRoaXMuJD1iW19dO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sdChlLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4OjE0LDE5OjE1LDIwOmwsMjE6dX0sdChlLFsyLDddLHsxOlsyLDFdfSksdChlLFsyLDNdKSx7OToxOCwxMTpyLDEyOm4sMTQ6aSwxNjphLDE3OnMsMTg6MTQsMTk6MTUsMjA6bCwyMTp1fSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDhdKSx7MTM6WzEsMTldfSx7MTU6WzEsMjBdfSx0KGUsWzIsMTFdKSx0KGUsWzIsMTJdKSx0KGUsWzIsMTNdKSx0KGUsWzIsMTRdKSx0KGUsWzIsMTVdKSx0KGUsWzIsMTZdKSx0KGUsWzIsNF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihtLGcpe2lmKGcucmVjb3ZlcmFibGUpdGhpcy50cmFjZShtKTtlbHNle3ZhciB5PW5ldyBFcnJvcihtKTt0aHJvdyB5Lmhhc2g9Zyx5fX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKG0pe3ZhciBnPXRoaXMseT1bMF0sdj1bXSx4PVtudWxsXSxiPVtdLHc9dGhpcy50YWJsZSxfPSIiLFQ9MCxFPTAsTD0wLEM9MixBPTEsST1iLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxrPXt5eTp7fX07Zm9yKHZhciBSIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksUikmJihrLnl5W1JdPXRoaXMueXlbUl0pO0Quc2V0SW5wdXQobSxrLnl5KSxrLnl5LmxleGVyPUQsay55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRC55eWxsb2M+InUiJiYoRC55eWxsb2M9e30pO3ZhciBTPUQueXlsbG9jO2IucHVzaChTKTt2YXIgTz1ELm9wdGlvbnMmJkQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGsueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9ay55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBOKHEpe3kubGVuZ3RoPXkubGVuZ3RoLTIqcSx4Lmxlbmd0aD14Lmxlbmd0aC1xLGIubGVuZ3RoPWIubGVuZ3RoLXF9byhOLCJwb3BTdGFjayIpO2Z1bmN0aW9uIFAoKXt2YXIgcTtyZXR1cm4gcT12LnBvcCgpfHxELmxleCgpfHxBLHR5cGVvZiBxIT0ibnVtYmVyIiYmKHEgaW5zdGFuY2VvZiBBcnJheSYmKHY9cSxxPXYucG9wKCkpLHE9Zy5zeW1ib2xzX1txXXx8cSkscX1vKFAsImxleCIpO2Zvcih2YXIgRixCLCQseixXLGosSz17fSxpZSxRLGVlLEo7Oyl7aWYoJD15W3kubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbJF0/ej10aGlzLmRlZmF1bHRBY3Rpb25zWyRdOigoRj09PW51bGx8fHR5cGVvZiBGPiJ1IikmJihGPVAoKSksej13WyRdJiZ3WyRdW0ZdKSx0eXBlb2Ygej4idSJ8fCF6Lmxlbmd0aHx8IXpbMF0pe3ZhciBIPSIiO0o9W107Zm9yKGllIGluIHdbJF0pdGhpcy50ZXJtaW5hbHNfW2llXSYmaWU+QyYmSi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19baWVdKyInIik7RC5zaG93UG9zaXRpb24/SD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhUKzEpK2A6CmArRC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0ouam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tGXXx8RikrIiciOkg9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVCsxKSsiOiBVbmV4cGVjdGVkICIrKEY9PUE/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bRl18fEYpKyInIiksdGhpcy5wYXJzZUVycm9yKEgse3RleHQ6RC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bRl18fEYsbGluZTpELnl5bGluZW5vLGxvYzpTLGV4cGVjdGVkOkp9KX1pZih6WzBdaW5zdGFuY2VvZiBBcnJheSYmei5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiKyQrIiwgdG9rZW46ICIrRik7c3dpdGNoKHpbMF0pe2Nhc2UgMTp5LnB1c2goRikseC5wdXNoKEQueXl0ZXh0KSxiLnB1c2goRC55eWxsb2MpLHkucHVzaCh6WzFdKSxGPW51bGwsQj8oRj1CLEI9bnVsbCk6KEU9RC55eWxlbmcsXz1ELnl5dGV4dCxUPUQueXlsaW5lbm8sUz1ELnl5bGxvYyxMPjAmJkwtLSk7YnJlYWs7Y2FzZSAyOmlmKFE9dGhpcy5wcm9kdWN0aW9uc19belsxXV1bMV0sSy4kPXhbeC5sZW5ndGgtUV0sSy5fJD17Zmlyc3RfbGluZTpiW2IubGVuZ3RoLShRfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YltiLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmJbYi5sZW5ndGgtKFF8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YltiLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sTyYmKEsuXyQucmFuZ2U9W2JbYi5sZW5ndGgtKFF8fDEpXS5yYW5nZVswXSxiW2IubGVuZ3RoLTFdLnJhbmdlWzFdXSksaj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSyxbXyxFLFQsay55eSx6WzFdLHgsYl0uY29uY2F0KEkpKSx0eXBlb2YgajwidSIpcmV0dXJuIGo7USYmKHk9eS5zbGljZSgwLC0xKlEqMikseD14LnNsaWNlKDAsLTEqUSksYj1iLnNsaWNlKDAsLTEqUSkpLHkucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t6WzFdXVswXSkseC5wdXNoKEsuJCksYi5wdXNoKEsuXyQpLGVlPXdbeVt5Lmxlbmd0aC0yXV1beVt5Lmxlbmd0aC0xXV0seS5wdXNoKGVlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZj1mdW5jdGlvbigpe3ZhciBwPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZyx5KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGcseSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihtLGcpe3JldHVybiB0aGlzLnl5PWd8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW0sdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bSx0aGlzLm1hdGNoZWQrPW07dmFyIGc9bS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGc/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG19LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24obSl7dmFyIGc9bS5sZW5ndGgseT1tLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZyksdGhpcy5vZmZzZXQtPWc7dmFyIHY9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkseS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXkubGVuZ3RoLTEpO3ZhciB4PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp5Pyh5Lmxlbmd0aD09PXYubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt2W3YubGVuZ3RoLXkubGVuZ3RoXS5sZW5ndGgteVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWd9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1beFswXSx4WzBdK3RoaXMueXlsZW5nLWddKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihtKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtLmxlbmd0aD4yMD8iLi4uIjoiIikrbS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMubWF0Y2g7cmV0dXJuIG0ubGVuZ3RoPDIwJiYobSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbS5sZW5ndGgpKSwobS5zdWJzdHIoMCwyMCkrKG0ubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLnBhc3RJbnB1dCgpLGc9bmV3IEFycmF5KG0ubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gbSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24obSxnKXt2YXIgeSx2LHg7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHg9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoeC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx2PW1bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHYmJih0aGlzLnl5bGluZW5vKz12Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnY/dlt2Lmxlbmd0aC0xXS5sZW5ndGgtdlt2Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK21bMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bVswXSx0aGlzLm1hdGNoKz1tWzBdLHRoaXMubWF0Y2hlcz1tLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG1bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW1bMF0seT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxnLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHkpcmV0dXJuIHk7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGIgaW4geCl0aGlzW2JdPXhbYl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG0sZyx5LHY7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgeD10aGlzLl9jdXJyZW50UnVsZXMoKSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYoeT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3hbYl1dKSx5JiYoIWd8fHlbMF0ubGVuZ3RoPmdbMF0ubGVuZ3RoKSl7aWYoZz15LHY9Yix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtPXRoaXMudGVzdF9tYXRjaCh5LHhbYl0pLG0hPT0hMSlyZXR1cm4gbTtpZih0aGlzLl9iYWNrdHJhY2spe2c9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZz8obT10aGlzLnRlc3RfbWF0Y2goZyx4W3ZdKSxtIT09ITE/bTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBnPXRoaXMubmV4dCgpO3JldHVybiBnfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihnKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgZz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBnPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oZyl7cmV0dXJuIGc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhnfHwwKSxnPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbZ106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihnKXt0aGlzLmJlZ2luKGcpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oZyx5LHYseCl7dmFyIGI9eDtzd2l0Y2godil7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2JyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86dGltZWxpbmVcYikvaSwvXig/OnRpdGxlXHNbXlxuXSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teOlxuXSspL2ksL14oPzo6XHNbXjpcbl0rKS9pLC9eKD86W14jOlxuXSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHB9KCk7aC5sZXhlcj1mO2Z1bmN0aW9uIGQoKXt0aGlzLnl5PXt9fXJldHVybiBvKGQsIlBhcnNlciIpLGQucHJvdG90eXBlPWgsaC5QYXJzZXI9ZCxuZXcgZH0oKTt2UC5wYXJzZXI9dlA7WjBlPXZQfSk7dmFyIGJQPXt9O3ZyKGJQLHthZGRFdmVudDooKT0+bHBlLGFkZFNlY3Rpb246KCk9PmlwZSxhZGRUYXNrOigpPT5vcGUsYWRkVGFza09yZzooKT0+Y3BlLGNsZWFyOigpPT5ucGUsZGVmYXVsdDooKT0+dXFlLGdldENvbW1vbkRiOigpPT5ycGUsZ2V0U2VjdGlvbnM6KCk9PmFwZSxnZXRUYXNrczooKT0+c3BlfSk7dmFyIFhnLHRwZSx4UCxXRSxqZyxycGUsbnBlLGlwZSxhcGUsc3BlLG9wZSxscGUsY3BlLGVwZSx1cWUsdXBlPU0oKCk9PnsidXNlIHN0cmljdCI7a2koKTtYZz0iIix0cGU9MCx4UD1bXSxXRT1bXSxqZz1bXSxycGU9bygoKT0+aXksImdldENvbW1vbkRiIiksbnBlPW8oZnVuY3Rpb24oKXt4UC5sZW5ndGg9MCxXRS5sZW5ndGg9MCxYZz0iIixqZy5sZW5ndGg9MCxfcigpfSwiY2xlYXIiKSxpcGU9byhmdW5jdGlvbih0KXtYZz10LHhQLnB1c2godCl9LCJhZGRTZWN0aW9uIiksYXBlPW8oZnVuY3Rpb24oKXtyZXR1cm4geFB9LCJnZXRTZWN0aW9ucyIpLHNwZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9ZXBlKCksZT0xMDAscj0wO2Zvcig7IXQmJnI8ZTspdD1lcGUoKSxyKys7cmV0dXJuIFdFLnB1c2goLi4uamcpLFdFfSwiZ2V0VGFza3MiKSxvcGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49e2lkOnRwZSsrLHNlY3Rpb246WGcsdHlwZTpYZyx0YXNrOnQsc2NvcmU6ZXx8MCxldmVudHM6cj9bcl06W119O2pnLnB1c2gobil9LCJhZGRUYXNrIiksbHBlPW8oZnVuY3Rpb24odCl7amcuZmluZChyPT5yLmlkPT09dHBlLTEpLmV2ZW50cy5wdXNoKHQpfSwiYWRkRXZlbnQiKSxjcGU9byhmdW5jdGlvbih0KXtsZXQgZT17c2VjdGlvbjpYZyx0eXBlOlhnLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O1dFLnB1c2goZSl9LCJhZGRUYXNrT3JnIiksZXBlPW8oZnVuY3Rpb24oKXtsZXQgdD1vKGZ1bmN0aW9uKHIpe3JldHVybiBqZ1tyXS5wcm9jZXNzZWR9LCJjb21waWxlVGFzayIpLGU9ITA7Zm9yKGxldFtyLG5db2YgamcuZW50cmllcygpKXQociksZT1lJiZuLnByb2Nlc3NlZDtyZXR1cm4gZX0sImNvbXBpbGVUYXNrcyIpLHVxZT17Y2xlYXI6bnBlLGdldENvbW1vbkRiOnJwZSxhZGRTZWN0aW9uOmlwZSxnZXRTZWN0aW9uczphcGUsZ2V0VGFza3M6c3BlLGFkZFRhc2s6b3BlLGFkZFRhc2tPcmc6Y3BlLGFkZEV2ZW50OmxwZX19KTtmdW5jdGlvbiBwcGUodCxlKXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgcj16ZSh0aGlzKSxuPXIudGV4dCgpLnNwbGl0KC8oXHMrfDxicj4pLykucmV2ZXJzZSgpLGksYT1bXSxzPTEuMSxsPXIuYXR0cigieSIpLHU9cGFyc2VGbG9hdChyLmF0dHIoImR5IikpLGg9ci50ZXh0KG51bGwpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixsKS5hdHRyKCJkeSIsdSsiZW0iKTtmb3IobGV0IGY9MDtmPG4ubGVuZ3RoO2YrKylpPW5bbi5sZW5ndGgtMS1mXSxhLnB1c2goaSksaC50ZXh0KGEuam9pbigiICIpLnRyaW0oKSksKGgubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPmV8fGk9PT0iPGJyPiIpJiYoYS5wb3AoKSxoLnRleHQoYS5qb2luKCIgIikudHJpbSgpKSxpPT09Ijxicj4iP2E9WyIiXTphPVtpXSxoPXIuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGwpLmF0dHIoImR5IixzKyJlbSIpLnRleHQoaSkpfSl9dmFyIGhxZSxZRSxmcWUsZHFlLGZwZSxwcWUsbXFlLGhwZSxncWUseXFlLHZxZSx3UCxkcGUseHFlLGJxZSx3cWUsVHFlLHZmLG1wZT1NKCgpPT57InVzZSBzdHJpY3QiO21yKCk7aHFlPTEyLFlFPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmFwcGVuZCgicmVjdCIpO3JldHVybiByLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksci5hdHRyKCJyeCIsZS5yeCksci5hdHRyKCJyeSIsZS5yeSksZS5jbGFzcyE9PXZvaWQgMCYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksZnFlPW8oZnVuY3Rpb24odCxlKXtsZXQgbj10LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gpLmF0dHIoImN5IixlLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxpPXQuYXBwZW5kKCJnIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4LTE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3grMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIGEodSl7bGV0IGg9RWwoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoMyooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzIpKyIpIil9byhhLCJzbWlsZSIpO2Z1bmN0aW9uIHModSl7bGV0IGg9RWwoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krNykrIikiKX1vKHMsInNhZCIpO2Z1bmN0aW9uIGwodSl7dS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsZS5jeC01KS5hdHRyKCJ5MSIsZS5jeSs3KS5hdHRyKCJ4MiIsZS5jeCs1KS5hdHRyKCJ5MiIsZS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBvKGwsImFtYml2YWxlbnQiKSxlLnNjb3JlPjM/YShpKTplLnNjb3JlPDM/cyhpKTpsKGkpLG59LCJkcmF3RmFjZSIpLGRxZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiByLmF0dHIoImN4IixlLmN4KSxyLmF0dHIoImN5IixlLmN5KSxyLmF0dHIoImNsYXNzIiwiYWN0b3ItIitlLnBvcyksci5hdHRyKCJmaWxsIixlLmZpbGwpLHIuYXR0cigic3Ryb2tlIixlLnN0cm9rZSksci5hdHRyKCJyIixlLnIpLHIuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLHIuY2xhc3MpLGUudGl0bGUhPT12b2lkIDAmJnIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSkscn0sImRyYXdDaXJjbGUiKSxmcGU9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIiksbj10LmFwcGVuZCgidGV4dCIpO24uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLG4uc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksZS5jbGFzcyE9PXZvaWQgMCYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7bGV0IGk9bi5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54K2UudGV4dE1hcmdpbioyKSxpLnRleHQociksbn0sImRyYXdUZXh0IikscHFlPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7bi5hdHRyKCJwb2ludHMiLHIoZS54LGUueSw1MCwyMCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmxhYmVsTWFyZ2luLGUueD1lLngrLjUqZS5sYWJlbE1hcmdpbixmcGUodCxlKX0sImRyYXdMYWJlbCIpLG1xZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9d1AoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsWUUobixpKSxkcGUocikoZS50ZXh0LG4saS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxyLGUuY29sb3VyKX0sImRyYXdTZWN0aW9uIiksaHBlPS0xLGdxZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngrci53aWR0aC8yLGk9dC5hcHBlbmQoImciKTtocGUrKztsZXQgYT0zMDArNSozMDtpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIraHBlKS5hdHRyKCJ4MSIsbikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG4pLmF0dHIoInkyIixhKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksZnFlKGkse2N4Om4sY3k6MzAwKyg1LWUuc2NvcmUpKjMwLHNjb3JlOmUuc2NvcmV9KTtsZXQgcz13UCgpO3MueD1lLngscy55PWUueSxzLmZpbGw9ZS5maWxsLHMud2lkdGg9ci53aWR0aCxzLmhlaWdodD1yLmhlaWdodCxzLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLHMucng9MyxzLnJ5PTMsWUUoaSxzKSxkcGUocikoZS50YXNrLGkscy54LHMueSxzLndpZHRoLHMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHIsZS5jb2xvdXIpfSwiZHJhd1Rhc2siKSx5cWU9byhmdW5jdGlvbih0LGUpe1lFKHQse3g6ZS5zdGFydHgseTplLnN0YXJ0eSx3aWR0aDplLnN0b3B4LWUuc3RhcnR4LGhlaWdodDplLnN0b3B5LWUuc3RhcnR5LGZpbGw6ZS5maWxsLGNsYXNzOiJyZWN0In0pLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSx2cWU9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowfX0sImdldFRleHRPYmoiKSx3UD1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sImdldE5vdGVSZWN0IiksZHBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwraC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixkKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24ocCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkLHApe2xldHt0YXNrRm9udFNpemU6bSx0YXNrRm9udEZhbWlseTpnfT1kLHk9aS5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqbS1tKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuYXR0cigiZmlsbCIscCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzK3UvMikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSksYi5hdHRyKCJ5IixsK2gvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2cuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKXMgaW4gYSYmaS5hdHRyKHMsYVtzXSl9cmV0dXJuIG8obiwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6aS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSx4cWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX0sImluaXRHcmFwaGljcyIpO28ocHBlLCJ3cmFwIik7YnFlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9ciVocWUtMSxhPXQuYXBwZW5kKCJnIik7ZS5zZWN0aW9uPWksYS5hdHRyKCJjbGFzcyIsKGUuY2xhc3M/ZS5jbGFzcysiICI6IiIpKyJ0aW1lbGluZS1ub2RlICIrKCJzZWN0aW9uLSIraSkpO2xldCBzPWEuYXBwZW5kKCJnIiksbD1hLmFwcGVuZCgiZyIpLGg9bC5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwocHBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksZj1uLmZvbnRTaXplPy5yZXBsYWNlP24uZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpuLmZvbnRTaXplO3JldHVybiBlLmhlaWdodD1oLmhlaWdodCtmKjEuMSouNStlLnBhZGRpbmcsZS5oZWlnaHQ9TWF0aC5tYXgoZS5oZWlnaHQsZS5tYXhIZWlnaHQpLGUud2lkdGg9ZS53aWR0aCsyKmUucGFkZGluZyxsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Uud2lkdGgvMisiLCAiK2UucGFkZGluZy8yKyIpIiksVHFlKHMsZSxpLG4pLGV9LCJkcmF3Tm9kZSIpLHdxZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGE9bi5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwocHBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCkscz1yLmZvbnRTaXplPy5yZXBsYWNlP3IuZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpyLmZvbnRTaXplO3JldHVybiBuLnJlbW92ZSgpLGEuaGVpZ2h0K3MqMS4xKi41K2UucGFkZGluZ30sImdldFZpcnR1YWxOb2RlSGVpZ2h0IiksVHFlPW8oZnVuY3Rpb24odCxlLHIpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrZS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrZS50eXBlKS5hdHRyKCJkIixgTTAgJHtlLmhlaWdodC01fSB2JHstZS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Uud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtlLmhlaWdodC01fSBIMCBaYCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK3IpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZS5oZWlnaHQpLmF0dHIoIngyIixlLndpZHRoKS5hdHRyKCJ5MiIsZS5oZWlnaHQpfSwiZGVmYXVsdEJrZyIpLHZmPXtkcmF3UmVjdDpZRSxkcmF3Q2lyY2xlOmRxZSxkcmF3U2VjdGlvbjptcWUsZHJhd1RleHQ6ZnBlLGRyYXdMYWJlbDpwcWUsZHJhd1Rhc2s6Z3FlLGRyYXdCYWNrZ3JvdW5kUmVjdDp5cWUsZ2V0VGV4dE9iajp2cWUsZ2V0Tm90ZVJlY3Q6d1AsaW5pdEdyYXBoaWNzOnhxZSxkcmF3Tm9kZTpicWUsZ2V0VmlydHVhbE5vZGVIZWlnaHQ6d3FlfX0pO3ZhciBrcWUsZ3BlLEVxZSx5cGUsdnBlPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTttcGUoKTtodCgpO1Z0KCk7bmkoKTtrcWU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1kZSgpLGE9aS5sZWZ0TWFyZ2luPz81MDtZLmRlYnVnKCJ0aW1lbGluZSIsbi5kYik7bGV0IHM9aS5zZWN1cml0eUxldmVsLGw7cz09PSJzYW5kYm94IiYmKGw9emUoIiNpIitlKSk7bGV0IGg9KHM9PT0ic2FuZGJveCI/emUobC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTp6ZSgiYm9keSIpKS5zZWxlY3QoIiMiK2UpO2guYXBwZW5kKCJnIik7bGV0IGY9bi5kYi5nZXRUYXNrcygpLGQ9bi5kYi5nZXRDb21tb25EYigpLmdldERpYWdyYW1UaXRsZSgpO1kuZGVidWcoInRhc2siLGYpLHZmLmluaXRHcmFwaGljcyhoKTtsZXQgcD1uLmRiLmdldFNlY3Rpb25zKCk7WS5kZWJ1Zygic2VjdGlvbnMiLHApO2xldCBtPTAsZz0wLHk9MCx2PTAseD01MCthLGI9NTA7dj01MDtsZXQgdz0wLF89ITA7cC5mb3JFYWNoKGZ1bmN0aW9uKEEpe2xldCBJPXtudW1iZXI6dyxkZXNjcjpBLHNlY3Rpb246dyx3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6bX0sRD12Zi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLEksaSk7WS5kZWJ1Zygic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsRCksbT1NYXRoLm1heChtLEQrMjApfSk7bGV0IFQ9MCxFPTA7WS5kZWJ1ZygidGFza3MubGVuZ3RoIixmLmxlbmd0aCk7Zm9yKGxldFtBLEldb2YgZi5lbnRyaWVzKCkpe2xldCBEPXtudW1iZXI6QSxkZXNjcjpJLHNlY3Rpb246SS5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDpnfSxrPXZmLmdldFZpcnR1YWxOb2RlSGVpZ2h0KGgsRCxpKTtZLmRlYnVnKCJ0YXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixrKSxnPU1hdGgubWF4KGcsaysyMCksVD1NYXRoLm1heChULEkuZXZlbnRzLmxlbmd0aCk7bGV0IFI9MDtmb3IobGV0IFMgb2YgSS5ldmVudHMpe2xldCBPPXtkZXNjcjpTLHNlY3Rpb246SS5zZWN0aW9uLG51bWJlcjpJLnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtSKz12Zi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLE8saSl9RT1NYXRoLm1heChFLFIpfVkuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLG0pLFkuZGVidWcoIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLGcpLHAmJnAubGVuZ3RoPjA/cC5mb3JFYWNoKEE9PntsZXQgST1mLmZpbHRlcihTPT5TLnNlY3Rpb249PT1BKSxEPXtudW1iZXI6dyxkZXNjcjpBLHNlY3Rpb246dyx3aWR0aDoyMDAqTWF0aC5tYXgoSS5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6bX07WS5kZWJ1Zygic2VjdGlvbk5vZGUiLEQpO2xldCBrPWguYXBwZW5kKCJnIiksUj12Zi5kcmF3Tm9kZShrLEQsdyxpKTtZLmRlYnVnKCJzZWN0aW9uTm9kZSBvdXRwdXQiLFIpLGsuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eH0sICR7dn0pYCksYis9bSs1MCxJLmxlbmd0aD4wJiZncGUoaCxJLHcseCxiLGcsaSxULEUsbSwhMSkseCs9MjAwKk1hdGgubWF4KEkubGVuZ3RoLDEpLGI9dix3Kyt9KTooXz0hMSxncGUoaCxmLHcseCxiLGcsaSxULEUsbSwhMCkpO2xldCBMPWgubm9kZSgpLmdldEJCb3goKTtZLmRlYnVnKCJib3VuZHMiLEwpLGQmJmguYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixMLndpZHRoLzItYSkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjApLHk9Xz9tK2crMTUwOmcrMTAwLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIseSkuYXR0cigieDIiLEwud2lkdGgrMyphKS5hdHRyKCJ5MiIseSkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSxfbyh2b2lkIDAsaCxpLnRpbWVsaW5lPy5wYWRkaW5nPz81MCxpLnRpbWVsaW5lPy51c2VNYXhXaWR0aD8/ITEpfSwiZHJhdyIpLGdwZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgsZil7Zm9yKGxldCBkIG9mIGUpe2xldCBwPXtkZXNjcjpkLnRhc2ssc2VjdGlvbjpyLG51bWJlcjpyLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDphfTtZLmRlYnVnKCJ0YXNrTm9kZSIscCk7bGV0IG09dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIikseT12Zi5kcmF3Tm9kZShtLHAscixzKS5oZWlnaHQ7aWYoWS5kZWJ1ZygidGFza0hlaWdodCBhZnRlciBkcmF3Iix5KSxtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke259LCAke2l9KWApLGE9TWF0aC5tYXgoYSx5KSxkLmV2ZW50cyl7bGV0IHY9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikseD1hO2krPTEwMCx4PXgrRXFlKHQsZC5ldmVudHMscixuLGkscyksaS09MTAwLHYuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG4rMTkwLzIpLmF0dHIoInkxIixpK2EpLmF0dHIoIngyIixuKzE5MC8yKS5hdHRyKCJ5MiIsaSthKyhmP2E6aCkrdSsxMjApLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjUsNSIpfW49bisyMDAsZiYmIXMudGltZWxpbmU/LmRpc2FibGVNdWx0aWNvbG9yJiZyKyt9aT1pLTEwfSwiZHJhd1Rhc2tzIiksRXFlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEpe2xldCBzPTAsbD1pO2k9aSsxMDA7Zm9yKGxldCB1IG9mIGUpe2xldCBoPXtkZXNjcjp1LHNlY3Rpb246cixudW1iZXI6cix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6NTB9O1kuZGVidWcoImV2ZW50Tm9kZSIsaCk7bGV0IGY9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImV2ZW50V3JhcHBlciIpLHA9dmYuZHJhd05vZGUoZixoLHIsYSkuaGVpZ2h0O3M9cytwLGYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7bn0sICR7aX0pYCksaT1pKzEwK3B9cmV0dXJuIGk9bCxzfSwiZHJhd0V2ZW50cyIpLHlwZT17c2V0Q29uZjpvKCgpPT57fSwic2V0Q29uZiIpLGRyYXc6a3FlfX0pO3ZhciBTcWUsQ3FlLHhwZSxicGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbygpO1NxZT1vKHQ9PntsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHQuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRbImxpbmVDb2xvciIrcl09dFsibGluZUNvbG9yIityXXx8dFsiY1NjYWxlSW52IityXSxhYSh0WyJsaW5lQ29sb3IiK3JdKT90WyJsaW5lQ29sb3IiK3JdPUR0KHRbImxpbmVDb2xvciIrcl0sMjApOnRbImxpbmVDb2xvciIrcl09QnQodFsibGluZUNvbG9yIityXSwyMCk7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl7bGV0IG49IiIrKDE3LTMqcik7ZSs9YAogICAgLnNlY3Rpb24tJHtyLTF9IHJlY3QsIC5zZWN0aW9uLSR7ci0xfSBwYXRoLCAuc2VjdGlvbi0ke3ItMX0gY2lyY2xlLCAuc2VjdGlvbi0ke3ItMX0gcGF0aCAgewogICAgICBmaWxsOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IHRleHQgewogICAgIGZpbGw6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfTsKICAgIH0KICAgIC5ub2RlLWljb24tJHtyLTF9IHsKICAgICAgZm9udC1zaXplOiA0MHB4OwogICAgICBjb2xvcjogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLnNlY3Rpb24tZWRnZS0ke3ItMX17CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGUiK3JdfTsKICAgIH0KICAgIC5lZGdlLWRlcHRoLSR7ci0xfXsKICAgICAgc3Ryb2tlLXdpZHRoOiAke259OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IGxpbmUgewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlSW52IityXX0gOwogICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICB9CgogICAgLmxpbmVXcmFwcGVyIGxpbmV7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVMYWJlbCIrcl19IDsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gZX0sImdlblNlY3Rpb25zIiksQ3FlPW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtTcWUodCl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLmV2ZW50V3JhcHBlciAgewogICBmaWx0ZXI6IGJyaWdodG5lc3MoMTIwJSk7CiAgfQpgLCJnZXRTdHlsZXMiKSx4cGU9Q3FlfSk7dmFyIHdwZT17fTt2cih3cGUse2RpYWdyYW06KCk9PkFxZX0pO3ZhciBBcWUsVHBlPU0oKCk9PnsidXNlIHN0cmljdCI7SjBlKCk7dXBlKCk7dnBlKCk7YnBlKCk7QXFlPXtkYjpiUCxyZW5kZXJlcjp5cGUscGFyc2VyOlowZSxzdHlsZXM6eHBlfX0pO3ZhciBUUCxTcGUsQ3BlPU0oKCk9PnsidXNlIHN0cmljdCI7VFA9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKF8sVCxFLEwpe2ZvcihFPUV8fHt9LEw9Xy5sZW5ndGg7TC0tO0VbX1tMXV09VCk7cmV0dXJuIEV9LCJvIiksZT1bMSw0XSxyPVsxLDEzXSxuPVsxLDEyXSxpPVsxLDE1XSxhPVsxLDE2XSxzPVsxLDIwXSxsPVsxLDE5XSx1PVs2LDcsOF0saD1bMSwyNl0sZj1bMSwyNF0sZD1bMSwyNV0scD1bNiw3LDExXSxtPVsxLDYsMTMsMTUsMTYsMTksMjJdLGc9WzEsMzNdLHk9WzEsMzRdLHY9WzEsNiw3LDExLDEzLDE1LDE2LDE5LDIyXSx4PXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1pbmRNYXA6NCxzcGFjZUxpbmVzOjUsU1BBQ0VMSU5FOjYsTkw6NyxNSU5ETUFQOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsSUNPTjoxNSxDTEFTUzoxNixub2RlV2l0aElkOjE3LG5vZGVXaXRob3V0SWQ6MTgsTk9ERV9EU1RBUlQ6MTksTk9ERV9ERVNDUjoyMCxOT0RFX0RFTkQ6MjEsTk9ERV9JRDoyMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiTUlORE1BUCIsMTE6IkVPRiIsMTM6IlNQQUNFTElTVCIsMTU6IklDT04iLDE2OiJDTEFTUyIsMTk6Ik5PREVfRFNUQVJUIiwyMDoiTk9ERV9ERVNDUiIsMjE6Ik5PREVfREVORCIsMjI6Ik5PREVfSUQifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsMl0sWzEyLDJdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxNCwxXSxbMTQsMV0sWzE4LDNdLFsxNywxXSxbMTcsNF1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihULEUsTCxDLEEsSSxEKXt2YXIgaz1JLmxlbmd0aC0xO3N3aXRjaChBKXtjYXNlIDY6Y2FzZSA3OnJldHVybiBDO2Nhc2UgODpDLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MICIpO2JyZWFrO2Nhc2UgOTpDLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOkMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTI6Qy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YyICIpO2JyZWFrO2Nhc2UgMTU6Qy5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLElba10uaWQpLEMuYWRkTm9kZShJW2stMV0ubGVuZ3RoLElba10uaWQsSVtrXS5kZXNjcixJW2tdLnR5cGUpO2JyZWFrO2Nhc2UgMTY6Qy5nZXRMb2dnZXIoKS50cmFjZSgiSWNvbjogIixJW2tdKSxDLmRlY29yYXRlTm9kZSh7aWNvbjpJW2tdfSk7YnJlYWs7Y2FzZSAxNzpjYXNlIDIxOkMuZGVjb3JhdGVOb2RlKHtjbGFzczpJW2tdfSk7YnJlYWs7Y2FzZSAxODpDLmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJU1QiKTticmVhaztjYXNlIDE5OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIk5vZGU6ICIsSVtrXS5pZCksQy5hZGROb2RlKDAsSVtrXS5pZCxJW2tdLmRlc2NyLElba10udHlwZSk7YnJlYWs7Y2FzZSAyMDpDLmRlY29yYXRlTm9kZSh7aWNvbjpJW2tdfSk7YnJlYWs7Y2FzZSAyNTpDLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixJW2stMl0pLHRoaXMuJD17aWQ6SVtrLTFdLGRlc2NyOklbay0xXSx0eXBlOkMuZ2V0VHlwZShJW2stMl0sSVtrXSl9O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXtpZDpJW2tdLGRlc2NyOklba10sdHlwZTpDLm5vZGVUeXBlLkRFRkFVTFR9O2JyZWFrO2Nhc2UgMjc6Qy5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsSVtrLTNdKSx0aGlzLiQ9e2lkOklbay0zXSxkZXNjcjpJW2stMV0sdHlwZTpDLmdldFR5cGUoSVtrLTJdLElba10pfTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sODplfSx7MTpbM119LHsxOlsyLDFdfSx7NDo2LDY6WzEsN10sNzpbMSw4XSw4OmV9LHs2OnIsNzpbMSwxMF0sOTo5LDEyOjExLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sdCh1LFsyLDNdKSx7MTpbMiwyXX0sdCh1LFsyLDRdKSx0KHUsWzIsNV0pLHsxOlsyLDZdLDY6ciwxMjoyMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHs2OnIsOToyMiwxMjoxMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHs2OmgsNzpmLDEwOjIzLDExOmR9LHQocCxbMiwyMl0sezE3OjE3LDE4OjE4LDE0OjI3LDE1OlsxLDI4XSwxNjpbMSwyOV0sMTk6cywyMjpsfSksdChwLFsyLDE4XSksdChwLFsyLDE5XSksdChwLFsyLDIwXSksdChwLFsyLDIxXSksdChwLFsyLDIzXSksdChwLFsyLDI0XSksdChwLFsyLDI2XSx7MTk6WzEsMzBdfSksezIwOlsxLDMxXX0sezY6aCw3OmYsMTA6MzIsMTE6ZH0sezE6WzIsN10sNjpyLDEyOjIxLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sdChtLFsyLDE0XSx7NzpnLDExOnl9KSx0KHYsWzIsOF0pLHQodixbMiw5XSksdCh2LFsyLDEwXSksdChwLFsyLDE1XSksdChwLFsyLDE2XSksdChwLFsyLDE3XSksezIwOlsxLDM1XX0sezIxOlsxLDM2XX0sdChtLFsyLDEzXSx7NzpnLDExOnl9KSx0KHYsWzIsMTFdKSx0KHYsWzIsMTJdKSx7MjE6WzEsMzddfSx0KHAsWzIsMjVdKSx0KHAsWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sNjpbMiwyXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFQsRSl7aWYoRS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFQpO2Vsc2V7dmFyIEw9bmV3IEVycm9yKFQpO3Rocm93IEwuaGFzaD1FLEx9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oVCl7dmFyIEU9dGhpcyxMPVswXSxDPVtdLEE9W251bGxdLEk9W10sRD10aGlzLnRhYmxlLGs9IiIsUj0wLFM9MCxPPTAsTj0yLFA9MSxGPUkuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLCQ9e3l5Ont9fTtmb3IodmFyIHogaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx6KSYmKCQueXlbel09dGhpcy55eVt6XSk7Qi5zZXRJbnB1dChULCQueXkpLCQueXkubGV4ZXI9QiwkLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBCLnl5bGxvYz4idSImJihCLnl5bGxvYz17fSk7dmFyIFc9Qi55eWxsb2M7SS5wdXNoKFcpO3ZhciBqPUIub3B0aW9ucyYmQi5vcHRpb25zLnJhbmdlczt0eXBlb2YgJC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj0kLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEsoa2Upe0wubGVuZ3RoPUwubGVuZ3RoLTIqa2UsQS5sZW5ndGg9QS5sZW5ndGgta2UsSS5sZW5ndGg9SS5sZW5ndGgta2V9byhLLCJwb3BTdGFjayIpO2Z1bmN0aW9uIGllKCl7dmFyIGtlO3JldHVybiBrZT1DLnBvcCgpfHxCLmxleCgpfHxQLHR5cGVvZiBrZSE9Im51bWJlciImJihrZSBpbnN0YW5jZW9mIEFycmF5JiYoQz1rZSxrZT1DLnBvcCgpKSxrZT1FLnN5bWJvbHNfW2tlXXx8a2UpLGtlfW8oaWUsImxleCIpO2Zvcih2YXIgUSxlZSxKLEgscSxaLGFlPXt9LHVlLGNlLHRlLERlOzspe2lmKEo9TFtMLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0pdP0g9dGhpcy5kZWZhdWx0QWN0aW9uc1tKXTooKFE9PT1udWxsfHx0eXBlb2YgUT4idSIpJiYoUT1pZSgpKSxIPURbSl0mJkRbSl1bUV0pLHR5cGVvZiBIPiJ1Inx8IUgubGVuZ3RofHwhSFswXSl7dmFyIG9lPSIiO0RlPVtdO2Zvcih1ZSBpbiBEW0pdKXRoaXMudGVybWluYWxzX1t1ZV0mJnVlPk4mJkRlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1t1ZV0rIiciKTtCLnNob3dQb3NpdGlvbj9vZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhSKzEpK2A6CmArQi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0RlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bUV18fFEpKyInIjpvZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhSKzEpKyI6IFVuZXhwZWN0ZWQgIisoUT09UD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tRXXx8USkrIiciKSx0aGlzLnBhcnNlRXJyb3Iob2Use3RleHQ6Qi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bUV18fFEsbGluZTpCLnl5bGluZW5vLGxvYzpXLGV4cGVjdGVkOkRlfSl9aWYoSFswXWluc3RhbmNlb2YgQXJyYXkmJkgubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitKKyIsIHRva2VuOiAiK1EpO3N3aXRjaChIWzBdKXtjYXNlIDE6TC5wdXNoKFEpLEEucHVzaChCLnl5dGV4dCksSS5wdXNoKEIueXlsbG9jKSxMLnB1c2goSFsxXSksUT1udWxsLGVlPyhRPWVlLGVlPW51bGwpOihTPUIueXlsZW5nLGs9Qi55eXRleHQsUj1CLnl5bGluZW5vLFc9Qi55eWxsb2MsTz4wJiZPLS0pO2JyZWFrO2Nhc2UgMjppZihjZT10aGlzLnByb2R1Y3Rpb25zX1tIWzFdXVsxXSxhZS4kPUFbQS5sZW5ndGgtY2VdLGFlLl8kPXtmaXJzdF9saW5lOklbSS5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SVtJLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOklbSS5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOklbSS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGomJihhZS5fJC5yYW5nZT1bSVtJLmxlbmd0aC0oY2V8fDEpXS5yYW5nZVswXSxJW0kubGVuZ3RoLTFdLnJhbmdlWzFdXSksWj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoYWUsW2ssUyxSLCQueXksSFsxXSxBLEldLmNvbmNhdChGKSksdHlwZW9mIFo8InUiKXJldHVybiBaO2NlJiYoTD1MLnNsaWNlKDAsLTEqY2UqMiksQT1BLnNsaWNlKDAsLTEqY2UpLEk9SS5zbGljZSgwLC0xKmNlKSksTC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0hbMV1dWzBdKSxBLnB1c2goYWUuJCksSS5wdXNoKGFlLl8kKSx0ZT1EW0xbTC5sZW5ndGgtMl1dW0xbTC5sZW5ndGgtMV1dLEwucHVzaCh0ZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGI9ZnVuY3Rpb24oKXt2YXIgXz17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEUsTCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFLEwpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEUpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oVCxFKXtyZXR1cm4gdGhpcy55eT1FfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ULHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVQsdGhpcy5tYXRjaGVkKz1UO3ZhciBFPVQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBFPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxUfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKFQpe3ZhciBFPVQubGVuZ3RoLEw9VC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUUpLHRoaXMub2Zmc2V0LT1FO3ZhciBDPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEwubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1MLmxlbmd0aC0xKTt2YXIgQT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46TD8oTC5sZW5ndGg9PT1DLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQ1tDLmxlbmd0aC1MLmxlbmd0aF0ubGVuZ3RoLUxbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1FfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0FbMF0sQVswXSt0aGlzLnl5bGVuZy1FXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oVCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFQpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBUPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oVC5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgVD10aGlzLm1hdGNoO3JldHVybiBULmxlbmd0aDwyMCYmKFQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVQubGVuZ3RoKSksKFQuc3Vic3RyKDAsMjApKyhULmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5wYXN0SW5wdXQoKSxFPW5ldyBBcnJheShULmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0UrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKFQsRSl7dmFyIEwsQyxBO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihBPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEEueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQz1UWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxDJiYodGhpcy55eWxpbmVubys9Qy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpDP0NbQy5sZW5ndGgtMV0ubGVuZ3RoLUNbQy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitUWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVRbMF0sdGhpcy5tYXRjaCs9VFswXSx0aGlzLm1hdGNoZXM9VCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShUWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UWzBdLEw9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxMKXJldHVybiBMO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBJIGluIEEpdGhpc1tJXT1BW0ldO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBULEUsTCxDO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEE9dGhpcy5fY3VycmVudFJ1bGVzKCksST0wO0k8QS5sZW5ndGg7SSsrKWlmKEw9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tBW0ldXSksTCYmKCFFfHxMWzBdLmxlbmd0aD5FWzBdLmxlbmd0aCkpe2lmKEU9TCxDPUksdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoVD10aGlzLnRlc3RfbWF0Y2goTCxBW0ldKSxUIT09ITEpcmV0dXJuIFQ7aWYodGhpcy5fYmFja3RyYWNrKXtFPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEU/KFQ9dGhpcy50ZXN0X21hdGNoKEUsQVtDXSksVCE9PSExP1Q6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgRT10aGlzLm5leHQoKTtyZXR1cm4gRXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oRSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEUpe3JldHVybiBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRXx8MCksRT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0VdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oRSl7dGhpcy5iZWdpbihFKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEUsTCxDLEEpe3ZhciBJPUE7c3dpdGNoKEMpe2Nhc2UgMDpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRm91bmQgY29tbWVudCIsTC55eXRleHQpLDY7YnJlYWs7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE2O2JyZWFrO2Nhc2UgNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1OkUuZ2V0TG9nZ2VyKCkudHJhY2UoIkJlZ2luIGljb24iKSx0aGlzLmJlZ2luKCJJQ09OIik7YnJlYWs7Y2FzZSA2OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJTkUiKSw2O2JyZWFrO2Nhc2UgNzpyZXR1cm4gNztjYXNlIDg6cmV0dXJuIDE1O2Nhc2UgOTpFLmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEwOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb2Rpbmcgbm9kZSIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDExOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDEyOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDEzOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE1OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE4OnJldHVybiAxMztjYXNlIDE5OnJldHVybiAyMjtjYXNlIDIwOnJldHVybiAxMTtjYXNlIDIxOnRoaXMuYmVnaW4oIk5TVFIyIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDpFLmdldExvZ2dlcigpLnRyYWNlKCJTdGFydGluZyBOU1RSIiksdGhpcy5iZWdpbigiTlNUUiIpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsTC55eXRleHQpLCJOT0RFX0RFU0NSIjticmVhaztjYXNlIDI2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxFLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAuLi4iLEwueXl0ZXh0KSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM1OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsTC55eXRleHQpLDIwO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixMLnl5dGV4dCksMjA7YnJlYWt9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86XHMqJSUuKikvaSwvXig/Om1pbmRtYXBcYikvaSwvXig/Ojo6OikvaSwvXig/Oi4rKS9pLC9eKD86XG4pL2ksL14oPzo6Omljb25cKCkvaSwvXig/Oltcc10rW1xuXSkvaSwvXig/Oltcbl0rKS9pLC9eKD86W15cKV0rKS9pLC9eKD86XCkpL2ksL14oPzotXCkpL2ksL14oPzpcKC0pL2ksL14oPzpcKVwpKS9pLC9eKD86XCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XHtceykvaSwvXig/OlwoKS9pLC9eKD86XFspL2ksL14oPzpbXHNdKykvaSwvXig/OlteXChcW1xuXClce1x9XSspL2ksL14oPzokKS9pLC9eKD86WyJdW2BdKS9pLC9eKD86W15gIl0rKS9pLC9eKD86W2BdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSspL2ksL14oPzpbIl0pL2ksL14oPzpbXCldXCkpL2ksL14oPzpbXCldKS9pLC9eKD86W1xdXSkvaSwvXig/Olx9XH0pL2ksL14oPzpcKC0pL2ksL14oPzotXCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XCgpL2ksL14oPzpbXlwpXF1cKFx9XSspL2ksL14oPzouKyg/IVwoXCgpKS9pXSxjb25kaXRpb25zOntDTEFTUzp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSxJQ09OOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LE5TVFIyOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sTlNUUjp7cnVsZXM6WzI1LDI2XSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlsyMSwyNCwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsNSw2LDcsMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gX30oKTt4LmxleGVyPWI7ZnVuY3Rpb24gdygpe3RoaXMueXk9e319cmV0dXJuIG8odywiUGFyc2VyIiksdy5wcm90b3R5cGU9eCx4LlBhcnNlcj13LG5ldyB3fSgpO1RQLnBhcnNlcj1UUDtTcGU9VFB9KTt2YXIgVmwsQXBlLGtQLE5xZSxScWUsTXFlLElxZSxVaSxPcWUsUHFlLEJxZSxGcWUsenFlLEdxZSwkcWUsX3BlLExwZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTtodCgpO2hzKCk7Vmw9W10sQXBlPTAsa1A9e30sTnFlPW8oKCk9PntWbD1bXSxBcGU9MCxrUD17fX0sImNsZWFyIiksUnFlPW8oZnVuY3Rpb24odCl7Zm9yKGxldCBlPVZsLmxlbmd0aC0xO2U+PTA7ZS0tKWlmKFZsW2VdLmxldmVsPHQpcmV0dXJuIFZsW2VdO3JldHVybiBudWxsfSwiZ2V0UGFyZW50IiksTXFlPW8oKCk9PlZsLmxlbmd0aD4wP1ZsWzBdOm51bGwsImdldE1pbmRtYXAiKSxJcWU9bygodCxlLHIsbik9PntZLmluZm8oImFkZE5vZGUiLHQsZSxyLG4pO2xldCBpPWRlKCksYT1pLm1pbmRtYXA/LnBhZGRpbmc/P3VyLm1pbmRtYXAucGFkZGluZztzd2l0Y2gobil7Y2FzZSBVaS5ST1VOREVEX1JFQ1Q6Y2FzZSBVaS5SRUNUOmNhc2UgVWkuSEVYQUdPTjphKj0yfWxldCBzPXtpZDpBcGUrKyxub2RlSWQ6VHIoZSxpKSxsZXZlbDp0LGRlc2NyOlRyKHIsaSksdHlwZTpuLGNoaWxkcmVuOltdLHdpZHRoOmkubWluZG1hcD8ubWF4Tm9kZVdpZHRoPz91ci5taW5kbWFwLm1heE5vZGVXaWR0aCxwYWRkaW5nOmF9LGw9UnFlKHQpO2lmKGwpbC5jaGlsZHJlbi5wdXNoKHMpLFZsLnB1c2gocyk7ZWxzZSBpZihWbC5sZW5ndGg9PT0wKVZsLnB1c2gocyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJytzLmRlc2NyKyciKScpfSwiYWRkTm9kZSIpLFVpPXtERUZBVUxUOjAsTk9fQk9SREVSOjAsUk9VTkRFRF9SRUNUOjEsUkVDVDoyLENJUkNMRTozLENMT1VEOjQsQkFORzo1LEhFWEFHT046Nn0sT3FlPW8oKHQsZSk9Pntzd2l0Y2goWS5kZWJ1ZygiSW4gZ2V0IHR5cGUiLHQsZSksdCl7Y2FzZSJbIjpyZXR1cm4gVWkuUkVDVDtjYXNlIigiOnJldHVybiBlPT09IikiP1VpLlJPVU5ERURfUkVDVDpVaS5DTE9VRDtjYXNlIigoIjpyZXR1cm4gVWkuQ0lSQ0xFO2Nhc2UiKSI6cmV0dXJuIFVpLkNMT1VEO2Nhc2UiKSkiOnJldHVybiBVaS5CQU5HO2Nhc2Uie3siOnJldHVybiBVaS5IRVhBR09OO2RlZmF1bHQ6cmV0dXJuIFVpLkRFRkFVTFR9fSwiZ2V0VHlwZSIpLFBxZT1vKCh0LGUpPT57a1BbdF09ZX0sInNldEVsZW1lbnRGb3JJZCIpLEJxZT1vKHQ9PntpZighdClyZXR1cm47bGV0IGU9ZGUoKSxyPVZsW1ZsLmxlbmd0aC0xXTt0Lmljb24mJihyLmljb249VHIodC5pY29uLGUpKSx0LmNsYXNzJiYoci5jbGFzcz1Ucih0LmNsYXNzLGUpKX0sImRlY29yYXRlTm9kZSIpLEZxZT1vKHQ9Pntzd2l0Y2godCl7Y2FzZSBVaS5ERUZBVUxUOnJldHVybiJuby1ib3JkZXIiO2Nhc2UgVWkuUkVDVDpyZXR1cm4icmVjdCI7Y2FzZSBVaS5ST1VOREVEX1JFQ1Q6cmV0dXJuInJvdW5kZWQtcmVjdCI7Y2FzZSBVaS5DSVJDTEU6cmV0dXJuImNpcmNsZSI7Y2FzZSBVaS5DTE9VRDpyZXR1cm4iY2xvdWQiO2Nhc2UgVWkuQkFORzpyZXR1cm4iYmFuZyI7Y2FzZSBVaS5IRVhBR09OOnJldHVybiJoZXhnb24iO2RlZmF1bHQ6cmV0dXJuIm5vLWJvcmRlciJ9fSwidHlwZTJTdHIiKSx6cWU9bygoKT0+WSwiZ2V0TG9nZ2VyIiksR3FlPW8odD0+a1BbdF0sImdldEVsZW1lbnRCeUlkIiksJHFlPXtjbGVhcjpOcWUsYWRkTm9kZTpJcWUsZ2V0TWluZG1hcDpNcWUsbm9kZVR5cGU6VWksZ2V0VHlwZTpPcWUsc2V0RWxlbWVudEZvcklkOlBxZSxkZWNvcmF0ZU5vZGU6QnFlLHR5cGUyU3RyOkZxZSxnZXRMb2dnZXI6enFlLGdldEVsZW1lbnRCeUlkOkdxZX0sX3BlPSRxZX0pO2Z1bmN0aW9uIFlpKHQpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIFlpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxZaSh0KX1mdW5jdGlvbiBKUCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIERwZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fWZ1bmN0aW9uIGVCKHQsZSxyKXtyZXR1cm4gZSYmRHBlKHQucHJvdG90eXBlLGUpLHImJkRwZSh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gSG1lKHQsZSxyKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH1mdW5jdGlvbiBVbCh0LGUpe3JldHVybiBWcWUodCl8fFVxZSh0LGUpfHxXbWUodCxlKXx8SHFlKCl9ZnVuY3Rpb24gVnFlKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9ZnVuY3Rpb24gVXFlKHQsZSl7dmFyIHI9dD09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihyIT1udWxsKXt2YXIgbj1bXSxpPSEwLGE9ITEscyxsO3RyeXtmb3Iocj1yLmNhbGwodCk7IShpPShzPXIubmV4dCgpKS5kb25lKSYmKG4ucHVzaChzLnZhbHVlKSwhKGUmJm4ubGVuZ3RoPT09ZSkpO2k9ITApO31jYXRjaCh1KXthPSEwLGw9dX1maW5hbGx5e3RyeXshaSYmci5yZXR1cm4hPW51bGwmJnIucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGx9fXJldHVybiBufX1mdW5jdGlvbiBXbWUodCxlKXtpZih0KXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIE5wZSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtpZihyPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSkscj09PSJNYXAifHxyPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20odCk7aWYocj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4gTnBlKHQsZSl9fWZ1bmN0aW9uIE5wZSh0LGUpeyhlPT1udWxsfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIEhxZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBZbWUodCxlKXt2YXIgcj10eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPVdtZSh0KSl8fGUmJnQmJnR5cGVvZiB0Lmxlbmd0aD09Im51bWJlciIpe3ImJih0PXIpO3ZhciBuPTAsaT1vKGZ1bmN0aW9uKCl7fSwiRiIpO3JldHVybntzOmksbjpvKGZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSwibiIpLGU6byhmdW5jdGlvbih1KXt0aHJvdyB1fSwiZSIpLGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIGE9ITAscz0hMSxsO3JldHVybntzOm8oZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sInMiKSxuOm8oZnVuY3Rpb24oKXt2YXIgdT1yLm5leHQoKTtyZXR1cm4gYT11LmRvbmUsdX0sIm4iKSxlOm8oZnVuY3Rpb24odSl7cz0hMCxsPXV9LCJlIiksZjpvKGZ1bmN0aW9uKCl7dHJ5eyFhJiZyLnJldHVybiE9bnVsbCYmci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgbH19LCJmIil9fWZ1bmN0aW9uIHBYZSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gdCE9bnVsbCYmKGU9PSJvYmplY3QifHxlPT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBtWGUodCxlKXtyZXR1cm4gZT17ZXhwb3J0czp7fX0sdChlLGUuZXhwb3J0cyksZS5leHBvcnRzfWZ1bmN0aW9uIFRYZSh0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZ3WGUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBTWGUodCl7cmV0dXJuIHQmJnQuc2xpY2UoMCxrWGUodCkrMSkucmVwbGFjZShFWGUsIiIpfWZ1bmN0aW9uIERYZSh0KXt2YXIgZT1fWGUuY2FsbCh0LEx4KSxyPXRbTHhdO3RyeXt0W0x4XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2h7fXZhciBpPUxYZS5jYWxsKHQpO3JldHVybiBuJiYoZT90W0x4XT1yOmRlbGV0ZSB0W0x4XSksaX1mdW5jdGlvbiBJWGUodCl7cmV0dXJuIE1YZS5jYWxsKHQpfWZ1bmN0aW9uIEZYZSh0KXtyZXR1cm4gdD09bnVsbD90PT09dm9pZCAwP0JYZTpQWGU6SXBlJiZJcGUgaW4gT2JqZWN0KHQpP05YZSh0KTpPWGUodCl9ZnVuY3Rpb24gelhlKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCJ9ZnVuY3Rpb24gVlhlKHQpe3JldHVybiB0eXBlb2YgdD09InN5bWJvbCJ8fEdYZSh0KSYmdGdlKHQpPT0kWGV9ZnVuY3Rpb24gcVhlKHQpe2lmKHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gdDtpZihlYih0KSlyZXR1cm4gT3BlO2lmKEYwKHQpKXt2YXIgZT10eXBlb2YgdC52YWx1ZU9mPT0iZnVuY3Rpb24iP3QudmFsdWVPZigpOnQ7dD1GMChlKT9lKyIiOmV9aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0PT09MD90Oit0O3Q9Q1hlKHQpO3ZhciByPUhYZS50ZXN0KHQpO3JldHVybiByfHxXWGUudGVzdCh0KT9ZWGUodC5zbGljZSgyKSxyPzI6OCk6VVhlLnRlc3QodCk/T3BlOit0fWZ1bmN0aW9uIFFYZSh0LGUscil7dmFyIG4saSxhLHMsbCx1LGg9MCxmPSExLGQ9ITEscD0hMDtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKFhYZSk7ZT1QcGUoZSl8fDAsRjAocikmJihmPSEhci5sZWFkaW5nLGQ9Im1heFdhaXQiaW4gcixhPWQ/alhlKFBwZShyLm1heFdhaXQpfHwwLGUpOmEscD0idHJhaWxpbmciaW4gcj8hIXIudHJhaWxpbmc6cCk7ZnVuY3Rpb24gbShFKXt2YXIgTD1uLEM9aTtyZXR1cm4gbj1pPXZvaWQgMCxoPUUscz10LmFwcGx5KEMsTCksc31vKG0sImludm9rZUZ1bmMiKTtmdW5jdGlvbiBnKEUpe3JldHVybiBoPUUsbD1zZXRUaW1lb3V0KHgsZSksZj9tKEUpOnN9byhnLCJsZWFkaW5nRWRnZSIpO2Z1bmN0aW9uIHkoRSl7dmFyIEw9RS11LEM9RS1oLEE9ZS1MO3JldHVybiBkP0tYZShBLGEtQyk6QX1vKHksInJlbWFpbmluZ1dhaXQiKTtmdW5jdGlvbiB2KEUpe3ZhciBMPUUtdSxDPUUtaDtyZXR1cm4gdT09PXZvaWQgMHx8TD49ZXx8TDwwfHxkJiZDPj1hfW8odiwic2hvdWxkSW52b2tlIik7ZnVuY3Rpb24geCgpe3ZhciBFPUVQKCk7aWYodihFKSlyZXR1cm4gYihFKTtsPXNldFRpbWVvdXQoeCx5KEUpKX1vKHgsInRpbWVyRXhwaXJlZCIpO2Z1bmN0aW9uIGIoRSl7cmV0dXJuIGw9dm9pZCAwLHAmJm4/bShFKToobj1pPXZvaWQgMCxzKX1vKGIsInRyYWlsaW5nRWRnZSIpO2Z1bmN0aW9uIHcoKXtsIT09dm9pZCAwJiZjbGVhclRpbWVvdXQobCksaD0wLG49dT1pPWw9dm9pZCAwfW8odywiY2FuY2VsIik7ZnVuY3Rpb24gXygpe3JldHVybiBsPT09dm9pZCAwP3M6YihFUCgpKX1vKF8sImZsdXNoIik7ZnVuY3Rpb24gVCgpe3ZhciBFPUVQKCksTD12KEUpO2lmKG49YXJndW1lbnRzLGk9dGhpcyx1PUUsTCl7aWYobD09PXZvaWQgMClyZXR1cm4gZyh1KTtpZihkKXJldHVybiBjbGVhclRpbWVvdXQobCksbD1zZXRUaW1lb3V0KHgsZSksbSh1KX1yZXR1cm4gbD09PXZvaWQgMCYmKGw9c2V0VGltZW91dCh4LGUpKSxzfXJldHVybiBvKFQsImRlYm91bmNlZCIpLFQuY2FuY2VsPXcsVC5mbHVzaD1fLFR9ZnVuY3Rpb24gRDYodCxlLHIsbixpLGEpe3ZhciBzO3JldHVybiB0aSh0KT9zPXQ6cz11MVt0XXx8dTEuZXVjbGlkZWFuLGU9PT0wJiZ0aSh0KT9zKGksYSk6cyhlLHIsbixpLGEpfWZ1bmN0aW9uIFVLZSh0LGUpe2lmKE42KHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8dD09bnVsbHx8ZWIodCk/ITA6VktlLnRlc3QodCl8fCEkS2UudGVzdCh0KXx8ZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9ZnVuY3Rpb24gaktlKHQpe2lmKCFGMCh0KSlyZXR1cm4hMTt2YXIgZT10Z2UodCk7cmV0dXJuIGU9PVlLZXx8ZT09cUtlfHxlPT1XS2V8fGU9PVhLZX1mdW5jdGlvbiBaS2UodCl7cmV0dXJuISFybWUmJnJtZSBpbiB0fWZ1bmN0aW9uIHJRZSh0KXtpZih0IT1udWxsKXt0cnl7cmV0dXJuIHRRZS5jYWxsKHQpfWNhdGNoe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn1mdW5jdGlvbiBoUWUodCl7aWYoIUYwKHQpfHxKS2UodCkpcmV0dXJuITE7dmFyIGU9S0tlKHQpP3VRZTphUWU7cmV0dXJuIGUudGVzdChuUWUodCkpfWZ1bmN0aW9uIGRRZSh0LGUpe3JldHVybiB0Py5bZV19ZnVuY3Rpb24gbVFlKHQsZSl7dmFyIHI9cFFlKHQsZSk7cmV0dXJuIGZRZShyKT9yOnZvaWQgMH1mdW5jdGlvbiB5UWUoKXt0aGlzLl9fZGF0YV9fPXF4P3F4KG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHhRZSh0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX1mdW5jdGlvbiBFUWUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihxeCl7dmFyIHI9ZVt0XTtyZXR1cm4gcj09PXdRZT92b2lkIDA6cn1yZXR1cm4ga1FlLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH1mdW5jdGlvbiBfUWUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gcXg/ZVt0XSE9PXZvaWQgMDpBUWUuY2FsbChlLHQpfWZ1bmN0aW9uIE5RZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLHJbdF09cXgmJmU9PT12b2lkIDA/RFFlOmUsdGhpc31mdW5jdGlvbiBwMSh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBNUWUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE9RZSh0LGUpe3JldHVybiB0PT09ZXx8dCE9PXQmJmUhPT1lfWZ1bmN0aW9uIFBRZSh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aDtyLS07KWlmKENnZSh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIHpRZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9UjYoZSx0KTtpZihyPDApcmV0dXJuITE7dmFyIG49ZS5sZW5ndGgtMTtyZXR1cm4gcj09bj9lLnBvcCgpOkZRZS5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMH1mdW5jdGlvbiAkUWUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPVI2KGUsdCk7cmV0dXJuIHI8MD92b2lkIDA6ZVtyXVsxXX1mdW5jdGlvbiBVUWUodCl7cmV0dXJuIFI2KHRoaXMuX19kYXRhX18sdCk+LTF9ZnVuY3Rpb24gV1FlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXyxuPVI2KHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9ZnVuY3Rpb24gbTEodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gS1FlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgbm1lLG1hcDpuZXcoalFlfHxxUWUpLHN0cmluZzpuZXcgbm1lfX1mdW5jdGlvbiBaUWUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIGU9PSJzdHJpbmcifHxlPT0ibnVtYmVyInx8ZT09InN5bWJvbCJ8fGU9PSJib29sZWFuIj90IT09Il9fcHJvdG9fXyI6dD09PW51bGx9ZnVuY3Rpb24gZVplKHQsZSl7dmFyIHI9dC5fX2RhdGFfXztyZXR1cm4gSlFlKGUpP3JbdHlwZW9mIGU9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ci5tYXB9ZnVuY3Rpb24gdFplKHQpe3ZhciBlPU02KHRoaXMsdCkuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9ZnVuY3Rpb24gblplKHQpe3JldHVybiBNNih0aGlzLHQpLmdldCh0KX1mdW5jdGlvbiBhWmUodCl7cmV0dXJuIE02KHRoaXMsdCkuaGFzKHQpfWZ1bmN0aW9uIG9aZSh0LGUpe3ZhciByPU02KHRoaXMsdCksbj1yLnNpemU7cmV0dXJuIHIuc2V0KHQsZSksdGhpcy5zaXplKz1yLnNpemU9PW4/MDoxLHRoaXN9ZnVuY3Rpb24gZzEodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gaEIodCxlKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uInx8ZSE9bnVsbCYmdHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihjWmUpO3ZhciByPW8oZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsaT1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLGE9ci5jYWNoZTtpZihhLmhhcyhpKSlyZXR1cm4gYS5nZXQoaSk7dmFyIHM9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPWEuc2V0KGkscyl8fGEsc30sIm1lbW9pemVkIik7cmV0dXJuIHIuY2FjaGU9bmV3KGhCLkNhY2hlfHxBZ2UpLHJ9ZnVuY3Rpb24gZlplKHQpe3ZhciBlPXVaZSh0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1oWmUmJnIuY2xlYXIoKSxufSkscj1lLmNhY2hlO3JldHVybiBlfWZ1bmN0aW9uIHlaZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aCxpPUFycmF5KG4pOysrcjxuOylpW3JdPWUodFtyXSxyLHQpO3JldHVybiBpfWZ1bmN0aW9uIERnZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ7aWYoTjYodCkpcmV0dXJuIExnZSh0LERnZSkrIiI7aWYoZWIodCkpcmV0dXJuIGFtZT9hbWUuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiBlPT0iMCImJjEvdD09LXZaZT8iLTAiOmV9ZnVuY3Rpb24gYlplKHQpe3JldHVybiB0PT1udWxsPyIiOnhaZSh0KX1mdW5jdGlvbiB3WmUodCxlKXtyZXR1cm4gTjYodCk/dDpIS2UodCxlKT9bdF06X2dlKE5nZSh0KSl9ZnVuY3Rpb24ga1plKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8ZWIodCkpcmV0dXJuIHQ7dmFyIGU9dCsiIjtyZXR1cm4gZT09IjAiJiYxL3Q9PS1UWmU/Ii0wIjplfWZ1bmN0aW9uIEVaZSh0LGUpe2U9UmdlKGUsdCk7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDt0IT1udWxsJiZyPG47KXQ9dFtmQihlW3IrK10pXTtyZXR1cm4gciYmcj09bj90OnZvaWQgMH1mdW5jdGlvbiBDWmUodCxlLHIpe3ZhciBuPXQ9PW51bGw/dm9pZCAwOlNaZSh0LGUpO3JldHVybiBuPT09dm9pZCAwP3I6bn1mdW5jdGlvbiBMWmUodCxlLHIpe2U9PSJfX3Byb3RvX18iJiZzbWU/c21lKHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cix3cml0YWJsZTohMH0pOnRbZV09cn1mdW5jdGlvbiBNWmUodCxlLHIpe3ZhciBuPXRbZV07KCEoUlplLmNhbGwodCxlKSYmQ2dlKG4scikpfHxyPT09dm9pZCAwJiYhKGUgaW4gdCkpJiZEWmUodCxlLHIpfWZ1bmN0aW9uIEJaZSh0LGUpe3ZhciByPXR5cGVvZiB0O3JldHVybiBlPWU/P09aZSwhIWUmJihyPT0ibnVtYmVyInx8ciE9InN5bWJvbCImJlBaZS50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9ZnVuY3Rpb24gelplKHQsZSxyLG4pe2lmKCFGMCh0KSlyZXR1cm4gdDtlPVJnZShlLHQpO2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLHM9YS0xLGw9dDtsIT1udWxsJiYrK2k8YTspe3ZhciB1PWZCKGVbaV0pLGg9cjtpZih1PT09Il9fcHJvdG9fXyJ8fHU9PT0iY29uc3RydWN0b3IifHx1PT09InByb3RvdHlwZSIpcmV0dXJuIHQ7aWYoaSE9cyl7dmFyIGY9bFt1XTtoPW4/bihmLHUsbCk6dm9pZCAwLGg9PT12b2lkIDAmJihoPUYwKGYpP2Y6RlplKGVbaSsxXSk/W106e30pfUlaZShsLHUsaCksbD1sW3VdfXJldHVybiB0fWZ1bmN0aW9uICRaZSh0LGUscil7cmV0dXJuIHQ9PW51bGw/dDpHWmUodCxlLHIpfWZ1bmN0aW9uIFVaZSh0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KG4pKTsrK3I8bjspZVtyXT10W3JdO3JldHVybiBlfWZ1bmN0aW9uIFdaZSh0KXtyZXR1cm4gTjYodCk/TGdlKHQsZkIpOmViKHQpP1t0XTpIWmUoX2dlKE5nZSh0KSkpfWZ1bmN0aW9uIHBCKHQsZSxyLG4pe2Zvcih2YXIgaT1bXSxhPW5ldyBmMSxzPXQuY3koKSxsPXMuaGFzQ29tcG91bmROb2RlcygpLHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGg9dFt1XTtyP2kucHVzaChoKTpsJiZuKGksYSxoKX1mb3IoO2kubGVuZ3RoPjA7KXt2YXIgZj1pLnNoaWZ0KCk7ZShmKSxhLmFkZChmLmlkKCkpLGwmJm4oaSxhLGYpfXJldHVybiB0fWZ1bmN0aW9uIElnZSh0LGUscil7aWYoci5pc1BhcmVudCgpKWZvcih2YXIgbj1yLl9wcml2YXRlLmNoaWxkcmVuLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtlLmhhcyhhLmlkKCkpfHx0LnB1c2goYSl9fWZ1bmN0aW9uIE9nZSh0LGUscil7aWYoci5pc0NoaWxkKCkpe3ZhciBuPXIuX3ByaXZhdGUucGFyZW50O2UuaGFzKG4uaWQoKSl8fHQucHVzaChuKX19ZnVuY3Rpb24gdUplKHQsZSxyKXtPZ2UodCxlLHIpLElnZSh0LGUscil9ZnVuY3Rpb24gRFAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoZT09PXZvaWQgMCYmKGU9ITApLHIubGVuZ3RoIT09MClpZihyLmlzTm9kZSgpJiYhci5yZW1vdmVkKCkpe2Zvcih2YXIgbj0wLGk9clswXSxhPWkuX3ByaXZhdGUuZWRnZXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdOyFlJiZsLmlzTG9vcCgpfHwobis9dChpLGwpKX1yZXR1cm4gbn1lbHNlIHJldHVybn19ZnVuY3Rpb24gUWcodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuLGk9dGhpcy5ub2RlcygpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXSxsPXNbdF0ocik7bCE9PXZvaWQgMCYmKG49PT12b2lkIDB8fGUobCxuKSkmJihuPWwpfXJldHVybiBufX1mdW5jdGlvbiBSeCgpe3JldHVybiExfWZ1bmN0aW9uIGU2KCl7cmV0dXJuITB9ZnVuY3Rpb24gTzYoKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkxKZSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHI9MDtyPGZtZS5sZW5ndGg7cisrKXt2YXIgbj1mbWVbcl07dGhpc1tuXT10W25dfHxIZ2Vbbl19dGhpcy5jb250ZXh0PWV8fHRoaXMuY29udGV4dCx0aGlzLmxpc3RlbmVycz1bXSx0aGlzLmVtaXR0aW5nPTB9ZnVuY3Rpb24gamdlKHQsZSxyKXt2YXIgbj1yLl9wcml2YXRlLGk9bi5zdHlsZUNhY2hlPW4uc3R5bGVDYWNoZXx8W10sYTtyZXR1cm4oYT1pW3RdKSE9bnVsbHx8KGE9aVt0XT1lKHIpKSxhfWZ1bmN0aW9uIFA2KHQsZSl7cmV0dXJuIHQ9ejAodCksbyhmdW5jdGlvbihuKXtyZXR1cm4gamdlKHQsZSxuKX0sImNhY2hlZFN0eWxlRnVuY3Rpb24iKX1mdW5jdGlvbiBCNih0LGUpe3Q9ejAodCk7dmFyIHI9byhmdW5jdGlvbihpKXtyZXR1cm4gZS5jYWxsKGkpfSwic2VsZkZuIik7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgaT10aGlzWzBdO2lmKGkpcmV0dXJuIGpnZSh0LHIsaSl9LCJjYWNoZWRQcm90b3R5cGVTdHlsZUZ1bmN0aW9uIil9ZnVuY3Rpb24gUlAodCxlKXt2YXIgcj10Ll9wcml2YXRlLG49ci5kYXRhLnBhcmVudD90LnBhcmVudHMoKTpudWxsO2lmKG4pZm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoIWUoYSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbUIodCl7dmFyIGU9dC5vayxyPXQuZWRnZU9rVmlhTm9kZXx8dC5vayxuPXQucGFyZW50T2t8fHQub2s7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jeSgpO2lmKCFpLnN0eWxlRW5hYmxlZCgpKXJldHVybiEwO3ZhciBhPXRoaXNbMF0scz1pLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihhKXt2YXIgbD1hLl9wcml2YXRlO2lmKCFlKGEpKXJldHVybiExO2lmKGEuaXNOb2RlKCkpcmV0dXJuIXN8fFJQKGEsbik7dmFyIHU9bC5zb3VyY2UsaD1sLnRhcmdldDtyZXR1cm4gcih1KSYmKCFzfHxSUCh1LHIpKSYmKHU9PT1ofHxyKGgpJiYoIXN8fFJQKGgscikpKX19fWZ1bmN0aW9uIHBtZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMscj1bXTtpZihlLmxlbmd0aD09PTIpe3ZhciBuPWVbMF0saT1lWzFdO3RoaXMub24odC5ldmVudCxuLGkpfWVsc2UgaWYoZS5sZW5ndGg9PT0xJiZ0aShlWzBdKSl7dmFyIGE9ZVswXTt0aGlzLm9uKHQuZXZlbnQsYSl9ZWxzZSBpZihlLmxlbmd0aD09PTB8fGUubGVuZ3RoPT09MSYmd24oZVswXSkpe2Zvcih2YXIgcz1lLmxlbmd0aD09PTE/ZVswXTpudWxsLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl7dmFyIHU9dGhpc1tsXSxoPSF0LmFibGVGaWVsZHx8dS5fcHJpdmF0ZVt0LmFibGVGaWVsZF0sZj11Ll9wcml2YXRlW3QuZmllbGRdIT10LnZhbHVlO2lmKHQub3ZlcnJpZGVBYmxlKXt2YXIgZD10Lm92ZXJyaWRlQWJsZSh1KTtpZihkIT09dm9pZCAwJiYoaD1kLCFkKSlyZXR1cm4gdGhpc31oJiYodS5fcHJpdmF0ZVt0LmZpZWxkXT10LnZhbHVlLGYmJnIucHVzaCh1KSl9dmFyIHA9dGhpcy5zcGF3bihyKTtwLnVwZGF0ZVN0eWxlKCkscC5lbWl0KHQuZXZlbnQpLHMmJnAuZW1pdChzKX1yZXR1cm4gdGhpc319ZnVuY3Rpb24gdjEodCl7RWZbdC5maWVsZF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpe2lmKHQub3ZlcnJpZGVGaWVsZCl7dmFyIHI9dC5vdmVycmlkZUZpZWxkKGUpO2lmKHIhPT12b2lkIDApcmV0dXJuIHJ9cmV0dXJuIGUuX3ByaXZhdGVbdC5maWVsZF19fSxFZlt0Lm9uXT1wbWUoe2V2ZW50OnQub24sZmllbGQ6dC5maWVsZCxhYmxlRmllbGQ6dC5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOnQub3ZlcnJpZGVBYmxlLHZhbHVlOiEwfSksRWZbdC5vZmZdPXBtZSh7ZXZlbnQ6dC5vZmYsZmllbGQ6dC5maWVsZCxhYmxlRmllbGQ6dC5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOnQub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9ZnVuY3Rpb24gdm1lKHQpe3JldHVybiBvKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBhPXRoaXNbaV0scz1hLl9wcml2YXRlW3QuYXR0cl07cyYmbi5wdXNoKHMpfXJldHVybiB0aGlzLnNwYXduKG4sITApLmZpbHRlcihyKX0sInNvdXJjZUltcGwiKX1mdW5jdGlvbiB4bWUodCl7cmV0dXJuIG8oZnVuY3Rpb24ocil7dmFyIG49W10saT10aGlzLl9wcml2YXRlLmN5LGE9dHx8e307WnQocikmJihyPWkuJChyKSk7Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspZm9yKHZhciBsPXJbc10uX3ByaXZhdGUuZWRnZXMsdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1sW3VdLGY9aC5fcHJpdmF0ZS5kYXRhLGQ9dGhpcy5oYXNFbGVtZW50V2l0aElkKGYuc291cmNlKSYmci5oYXNFbGVtZW50V2l0aElkKGYudGFyZ2V0KSxwPXIuaGFzRWxlbWVudFdpdGhJZChmLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChmLnRhcmdldCksbT1kfHxwO20mJigoYS50aGlzSXNTcmN8fGEudGhpc0lzVGd0KSYmKGEudGhpc0lzU3JjJiYhZHx8YS50aGlzSXNUZ3QmJiFwKXx8bi5wdXNoKGgpKX1yZXR1cm4gdGhpcy5zcGF3bihuLCEwKX0sImVkZ2VzV2l0aEltcGwiKX1mdW5jdGlvbiBibWUodCl7dmFyIGU9e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB0PWlyKHt9LGUsdCksbyhmdW5jdGlvbihuKXtmb3IodmFyIGk9W10sYT10aGlzLmVkZ2VzKCkscz10LGw9MDtsPGEubGVuZ3RoO2wrKylmb3IodmFyIHU9YVtsXSxoPXUuX3ByaXZhdGUsZj1oLnNvdXJjZSxkPWYuX3ByaXZhdGUuZGF0YS5pZCxwPWguZGF0YS50YXJnZXQsbT1mLl9wcml2YXRlLmVkZ2VzLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXSx2PXkuX3ByaXZhdGUuZGF0YSx4PXYudGFyZ2V0LGI9di5zb3VyY2Usdz14PT09cCYmYj09PWQsXz1kPT09eCYmcD09PWI7KHMuY29kaXJlY3RlZCYmd3x8IXMuY29kaXJlY3RlZCYmKHd8fF8pKSYmaS5wdXNoKHkpfXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihuKX0sInBhcmFsbGVsRWRnZXNJbXBsIil9ZnVuY3Rpb24gR0plKHQsZSxyLG4pe3ZhciBpPTQsYT0uMDAxLHM9MWUtNyxsPTEwLHU9MTEsaD0xLyh1LTEpLGY9dHlwZW9mIEZsb2F0MzJBcnJheTwidSI7aWYoYXJndW1lbnRzLmxlbmd0aCE9PTQpcmV0dXJuITE7Zm9yKHZhciBkPTA7ZDw0OysrZClpZih0eXBlb2YgYXJndW1lbnRzW2RdIT0ibnVtYmVyInx8aXNOYU4oYXJndW1lbnRzW2RdKXx8IWlzRmluaXRlKGFyZ3VtZW50c1tkXSkpcmV0dXJuITE7dD1NYXRoLm1pbih0LDEpLHI9TWF0aC5taW4ociwxKSx0PU1hdGgubWF4KHQsMCkscj1NYXRoLm1heChyLDApO3ZhciBwPWY/bmV3IEZsb2F0MzJBcnJheSh1KTpuZXcgQXJyYXkodSk7ZnVuY3Rpb24gbShJLEQpe3JldHVybiAxLTMqRCszKkl9byhtLCJBIik7ZnVuY3Rpb24gZyhJLEQpe3JldHVybiAzKkQtNipJfW8oZywiQiIpO2Z1bmN0aW9uIHkoSSl7cmV0dXJuIDMqSX1vKHksIkMiKTtmdW5jdGlvbiB2KEksRCxrKXtyZXR1cm4oKG0oRCxrKSpJK2coRCxrKSkqSSt5KEQpKSpJfW8odiwiY2FsY0JlemllciIpO2Z1bmN0aW9uIHgoSSxELGspe3JldHVybiAzKm0oRCxrKSpJKkkrMipnKEQsaykqSSt5KEQpfW8oeCwiZ2V0U2xvcGUiKTtmdW5jdGlvbiBiKEksRCl7Zm9yKHZhciBrPTA7azxpOysrayl7dmFyIFI9eChELHQscik7aWYoUj09PTApcmV0dXJuIEQ7dmFyIFM9dihELHQsciktSTtELT1TL1J9cmV0dXJuIER9byhiLCJuZXd0b25SYXBoc29uSXRlcmF0ZSIpO2Z1bmN0aW9uIHcoKXtmb3IodmFyIEk9MDtJPHU7KytJKXBbSV09dihJKmgsdCxyKX1vKHcsImNhbGNTYW1wbGVWYWx1ZXMiKTtmdW5jdGlvbiBfKEksRCxrKXt2YXIgUixTLE89MDtkbyBTPUQrKGstRCkvMixSPXYoUyx0LHIpLUksUj4wP2s9UzpEPVM7d2hpbGUoTWF0aC5hYnMoUik+cyYmKytPPGwpO3JldHVybiBTfW8oXywiYmluYXJ5U3ViZGl2aWRlIik7ZnVuY3Rpb24gVChJKXtmb3IodmFyIEQ9MCxrPTEsUj11LTE7ayE9PVImJnBba108PUk7KytrKUQrPWg7LS1rO3ZhciBTPShJLXBba10pLyhwW2srMV0tcFtrXSksTz1EK1MqaCxOPXgoTyx0LHIpO3JldHVybiBOPj1hP2IoSSxPKTpOPT09MD9POl8oSSxELEQraCl9byhULCJnZXRURm9yWCIpO3ZhciBFPSExO2Z1bmN0aW9uIEwoKXtFPSEwLCh0IT09ZXx8ciE9PW4pJiZ3KCl9byhMLCJwcmVjb21wdXRlIik7dmFyIEM9byhmdW5jdGlvbihEKXtyZXR1cm4gRXx8TCgpLHQ9PT1lJiZyPT09bj9EOkQ9PT0wPzA6RD09PTE/MTp2KFQoRCksZSxuKX0sImYiKTtDLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3g6dCx5OmV9LHt4OnIseTpufV19O3ZhciBBPSJnZW5lcmF0ZUJlemllcigiK1t0LGUscixuXSsiKSI7cmV0dXJuIEMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQX0sQ31mdW5jdGlvbiB3bWUodCxlLHIsbixpKXtpZihuPT09MXx8ZT09PXIpcmV0dXJuIHI7dmFyIGE9aShlLHIsbik7cmV0dXJuIHQ9PW51bGx8fCgodC5yb3VuZFZhbHVlfHx0LmNvbG9yKSYmKGE9TWF0aC5yb3VuZChhKSksdC5taW4hPT12b2lkIDAmJihhPU1hdGgubWF4KGEsdC5taW4pKSx0Lm1heCE9PXZvaWQgMCYmKGE9TWF0aC5taW4oYSx0Lm1heCkpKSxhfWZ1bmN0aW9uIFRtZSh0LGUpe3JldHVybiB0LnBmVmFsdWUhPW51bGx8fHQudmFsdWUhPW51bGw/dC5wZlZhbHVlIT1udWxsJiYoZT09bnVsbHx8ZS50eXBlLnVuaXRzIT09IiUiKT90LnBmVmFsdWU6dC52YWx1ZTp0fWZ1bmN0aW9uIFpnKHQsZSxyLG4saSl7dmFyIGE9aSE9bnVsbD9pLnR5cGU6bnVsbDtyPDA/cj0wOnI+MSYmKHI9MSk7dmFyIHM9VG1lKHQsaSksbD1UbWUoZSxpKTtpZih4dChzKSYmeHQobCkpcmV0dXJuIHdtZShhLHMsbCxyLG4pO2lmKHduKHMpJiZ3bihsKSl7Zm9yKHZhciB1PVtdLGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9c1toXSxkPWxbaF07aWYoZiE9bnVsbCYmZCE9bnVsbCl7dmFyIHA9d21lKGEsZixkLHIsbik7dS5wdXNoKHApfWVsc2UgdS5wdXNoKGQpfXJldHVybiB1fX1mdW5jdGlvbiBWSmUodCxlLHIsbil7dmFyIGk9IW4sYT10Ll9wcml2YXRlLHM9ZS5fcHJpdmF0ZSxsPXMuZWFzaW5nLHU9cy5zdGFydFRpbWUsaD1uP3Q6dC5jeSgpLGY9aC5zdHlsZSgpO2lmKCFzLmVhc2luZ0ltcGwpaWYobD09bnVsbClzLmVhc2luZ0ltcGw9YzYubGluZWFyO2Vsc2V7dmFyIGQ7aWYoWnQobCkpe3ZhciBwPWYucGFyc2UoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIixsKTtkPXAudmFsdWV9ZWxzZSBkPWw7dmFyIG0sZztadChkKT8obT1kLGc9W10pOihtPWRbMV0sZz1kLnNsaWNlKDIpLm1hcChmdW5jdGlvbihCKXtyZXR1cm4rQn0pKSxnLmxlbmd0aD4wPyhtPT09InNwcmluZyImJmcucHVzaChzLmR1cmF0aW9uKSxzLmVhc2luZ0ltcGw9YzZbbV0uYXBwbHkobnVsbCxnKSk6cy5lYXNpbmdJbXBsPWM2W21dfXZhciB5PXMuZWFzaW5nSW1wbCx2O2lmKHMuZHVyYXRpb249PT0wP3Y9MTp2PShyLXUpL3MuZHVyYXRpb24scy5hcHBseWluZyYmKHY9cy5wcm9ncmVzcyksdjwwP3Y9MDp2PjEmJih2PTEpLHMuZGVsYXk9PW51bGwpe3ZhciB4PXMuc3RhcnRQb3NpdGlvbixiPXMucG9zaXRpb247aWYoYiYmaSYmIXQubG9ja2VkKCkpe3ZhciB3PXt9O014KHgueCxiLngpJiYody54PVpnKHgueCxiLngsdix5KSksTXgoeC55LGIueSkmJih3Lnk9WmcoeC55LGIueSx2LHkpKSx0LnBvc2l0aW9uKHcpfXZhciBfPXMuc3RhcnRQYW4sVD1zLnBhbixFPWEucGFuLEw9VCE9bnVsbCYmbjtMJiYoTXgoXy54LFQueCkmJihFLng9WmcoXy54LFQueCx2LHkpKSxNeChfLnksVC55KSYmKEUueT1aZyhfLnksVC55LHYseSkpLHQuZW1pdCgicGFuIikpO3ZhciBDPXMuc3RhcnRab29tLEE9cy56b29tLEk9QSE9bnVsbCYmbjtJJiYoTXgoQyxBKSYmKGEuem9vbT1XeChhLm1pblpvb20sWmcoQyxBLHYseSksYS5tYXhab29tKSksdC5lbWl0KCJ6b29tIikpLChMfHxJKSYmdC5lbWl0KCJ2aWV3cG9ydCIpO3ZhciBEPXMuc3R5bGU7aWYoRCYmRC5sZW5ndGg+MCYmaSl7Zm9yKHZhciBrPTA7azxELmxlbmd0aDtrKyspe3ZhciBSPURba10sUz1SLm5hbWUsTz1SLE49cy5zdGFydFN0eWxlW1NdLFA9Zi5wcm9wZXJ0aWVzW04ubmFtZV0sRj1aZyhOLE8sdix5LFApO2Yub3ZlcnJpZGVCeXBhc3ModCxTLEYpfXQuZW1pdCgic3R5bGUiKX19cmV0dXJuIHMucHJvZ3Jlc3M9dix2fWZ1bmN0aW9uIE14KHQsZSl7cmV0dXJuIHQ9PW51bGx8fGU9PW51bGw/ITE6eHQodCkmJnh0KGUpPyEwOiEhKHQmJmUpfWZ1bmN0aW9uIFVKZSh0LGUscixuKXt2YXIgaT1lLl9wcml2YXRlO2kuc3RhcnRlZD0hMCxpLnN0YXJ0VGltZT1yLWkucHJvZ3Jlc3MqaS5kdXJhdGlvbn1mdW5jdGlvbiBrbWUodCxlKXt2YXIgcj1lLl9wcml2YXRlLmFuaUVsZXMsbj1bXTtmdW5jdGlvbiBpKGYsZCl7dmFyIHA9Zi5fcHJpdmF0ZSxtPXAuYW5pbWF0aW9uLmN1cnJlbnQsZz1wLmFuaW1hdGlvbi5xdWV1ZSx5PSExO2lmKG0ubGVuZ3RoPT09MCl7dmFyIHY9Zy5zaGlmdCgpO3YmJm0ucHVzaCh2KX1mb3IodmFyIHg9byhmdW5jdGlvbihFKXtmb3IodmFyIEw9RS5sZW5ndGgtMTtMPj0wO0wtLSl7dmFyIEM9RVtMXTtDKCl9RS5zcGxpY2UoMCxFLmxlbmd0aCl9LCJjYWxsYmFja3MiKSxiPW0ubGVuZ3RoLTE7Yj49MDtiLS0pe3ZhciB3PW1bYl0sXz13Ll9wcml2YXRlO2lmKF8uc3RvcHBlZCl7bS5zcGxpY2UoYiwxKSxfLmhvb2tlZD0hMSxfLnBsYXlpbmc9ITEsXy5zdGFydGVkPSExLHgoXy5mcmFtZXMpO2NvbnRpbnVlfSFfLnBsYXlpbmcmJiFfLmFwcGx5aW5nfHwoXy5wbGF5aW5nJiZfLmFwcGx5aW5nJiYoXy5hcHBseWluZz0hMSksXy5zdGFydGVkfHxVSmUoZix3LHQpLFZKZShmLHcsdCxkKSxfLmFwcGx5aW5nJiYoXy5hcHBseWluZz0hMSkseChfLmZyYW1lcyksXy5zdGVwIT1udWxsJiZfLnN0ZXAodCksdy5jb21wbGV0ZWQoKSYmKG0uc3BsaWNlKGIsMSksXy5ob29rZWQ9ITEsXy5wbGF5aW5nPSExLF8uc3RhcnRlZD0hMSx4KF8uY29tcGxldGVzKSkseT0hMCl9cmV0dXJuIWQmJm0ubGVuZ3RoPT09MCYmZy5sZW5ndGg9PT0wJiZuLnB1c2goZikseX1vKGksInN0ZXBPbmUiKTtmb3IodmFyIGE9ITEscz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdLHU9aShsKTthPWF8fHV9dmFyIGg9aShlLCEwKTsoYXx8aCkmJihyLmxlbmd0aD4wP2Uubm90aWZ5KCJkcmF3IixyKTplLm5vdGlmeSgiZHJhdyIpKSxyLnVubWVyZ2UobiksZS5lbWl0KCJzdGVwIil9ZnVuY3Rpb24gUWdlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxRSmUsWkplLHQpfWZ1bmN0aW9uIFpnZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30sSkplLHQpfWZ1bmN0aW9uIEpnZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30sZWV0LHQpfWZ1bmN0aW9uIEc2KHQpe3RoaXMub3B0aW9ucz1pcih7fSx0ZXQsdCksdGhpcy5vcHRpb25zLmxheW91dD10aGlzO3ZhciBlPXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCkscj10aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpLG49ci5maWx0ZXIoZnVuY3Rpb24oaSl7dmFyIGE9aS5zb3VyY2UoKS5kYXRhKCJpZCIpLHM9aS50YXJnZXQoKS5kYXRhKCJpZCIpLGw9ZS5zb21lKGZ1bmN0aW9uKGgpe3JldHVybiBoLmRhdGEoImlkIik9PT1hfSksdT1lLnNvbWUoZnVuY3Rpb24oaCl7cmV0dXJuIGguZGF0YSgiaWQiKT09PXN9KTtyZXR1cm4hbHx8IXV9KTt0aGlzLm9wdGlvbnMuZWxlcz10aGlzLm9wdGlvbnMuZWxlcy5ub3Qobil9ZnVuY3Rpb24gdDFlKHQpe3RoaXMub3B0aW9ucz1pcih7fSx4ZXQsdCl9ZnVuY3Rpb24gdkIodCl7dGhpcy5vcHRpb25zPWlyKHt9LGJldCx0KX1mdW5jdGlvbiByMWUodCl7dGhpcy5vcHRpb25zPWlyKHt9LHdldCx0KX1mdW5jdGlvbiBuMWUodCl7dGhpcy5vcHRpb25zPWlyKHt9LFRldCx0KX1mdW5jdGlvbiBpMWUodCl7dGhpcy5vcHRpb25zPXQsdGhpcy5ub3RpZmljYXRpb25zPTB9ZnVuY3Rpb24gbzFlKHQsZSl7ZS5yYWRpdXM9PT0wP3QubGluZVRvKGUuY3gsZS5jeSk6dC5hcmMoZS5jeCxlLmN5LGUucmFkaXVzLGUuc3RhcnRBbmdsZSxlLmVuZEFuZ2xlLGUuY291bnRlckNsb2Nrd2lzZSl9ZnVuY3Rpb24gYkIodCxlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwO3JldHVybiBuPT09MHx8ZS5yYWRpdXM9PT0wP3tjeDplLngsY3k6ZS55LHJhZGl1czowLHN0YXJ0WDplLngsc3RhcnRZOmUueSxzdG9wWDplLngsc3RvcFk6ZS55LHN0YXJ0QW5nbGU6dm9pZCAwLGVuZEFuZ2xlOnZvaWQgMCxjb3VudGVyQ2xvY2t3aXNlOnZvaWQgMH06KENldCh0LGUscixuLGkpLHtjeDpXUCxjeTpZUCxyYWRpdXM6TzAsc3RhcnRYOmExZSxzdGFydFk6czFlLHN0b3BYOnFQLHN0b3BZOlhQLHN0YXJ0QW5nbGU6JGMuYW5nK01hdGguUEkvMipQMCxlbmRBbmdsZTpubC5hbmctTWF0aC5QSS8yKlAwLGNvdW50ZXJDbG9ja3dpc2U6ZjZ9KX1mdW5jdGlvbiBsMWUodCl7dmFyIGU9W107aWYodCE9bnVsbCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKz0yKXt2YXIgbj10W3JdLGk9dFtyKzFdO2UucHVzaCh7eDpuLHk6aX0pfXJldHVybiBlfX1mdW5jdGlvbiBBZXQodCxlLHIpe2Zvcih2YXIgbj1vKGZ1bmN0aW9uKGgsZixkLHApe3JldHVybiBpYShoLGYsZCxwKX0sInFiZXppZXJBdCQxIiksaT1lLl9wcml2YXRlLGE9aS5yc3R5bGUuYmV6aWVyUHRzLHM9MDtzPHQuYmV6aWVyUHJvalBjdHMubGVuZ3RoO3MrKyl7dmFyIGw9dC5iZXppZXJQcm9qUGN0c1tzXTthLnB1c2goe3g6bihyWzBdLHJbMl0scls0XSxsKSx5Om4oclsxXSxyWzNdLHJbNV0sbCl9KX19ZnVuY3Rpb24gaXR0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07dC5saW5lVG8obi54LG4ueSl9fWZ1bmN0aW9uIGF0dCh0LGUscil7Zm9yKHZhciBuLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtpPT09MCYmKG49YSksdC5saW5lVG8oYS54LGEueSl9dC5xdWFkcmF0aWNDdXJ2ZVRvKHIueCxyLnksbi54LG4ueSl9ZnVuY3Rpb24gR21lKHQsZSxyKXt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKTtmb3IodmFyIG49ZSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07dC5saW5lVG8oYS54LGEueSl9dmFyIHM9cixsPXJbMF07dC5tb3ZlVG8obC54LGwueSk7Zm9yKHZhciBpPTE7aTxzLmxlbmd0aDtpKyspe3ZhciBhPXNbaV07dC5saW5lVG8oYS54LGEueSl9dC5jbG9zZVBhdGgmJnQuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gc3R0KHQsZSxyLG4saSl7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5hcmMocixuLGksMCxNYXRoLlBJKjIsITEpO3ZhciBhPWUscz1hWzBdO3QubW92ZVRvKHMueCxzLnkpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgdT1hW2xdO3QubGluZVRvKHUueCx1LnkpfXQuY2xvc2VQYXRoJiZ0LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIG90dCh0LGUscixuKXt0LmFyYyhlLHIsbiwwLE1hdGguUEkqMiwhMSl9ZnVuY3Rpb24gUFAodCxlLHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06NSxzPWFyZ3VtZW50cy5sZW5ndGg+Nj9hcmd1bWVudHNbNl06dm9pZCAwO3QuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSthLHIpLHQubGluZVRvKGUrbi1hLHIpLHQucXVhZHJhdGljQ3VydmVUbyhlK24scixlK24scithKSx0LmxpbmVUbyhlK24scitpLWEpLHQucXVhZHJhdGljQ3VydmVUbyhlK24scitpLGUrbi1hLHIraSksdC5saW5lVG8oZSthLHIraSksdC5xdWFkcmF0aWNDdXJ2ZVRvKGUscitpLGUscitpLWEpLHQubGluZVRvKGUscithKSx0LnF1YWRyYXRpY0N1cnZlVG8oZSxyLGUrYSxyKSx0LmNsb3NlUGF0aCgpLHM/dC5zdHJva2UoKTp0LmZpbGwoKX1mdW5jdGlvbiBwdHQodCxlKXtmb3IodmFyIHI9YXRvYih0KSxuPW5ldyBBcnJheUJ1ZmZlcihyLmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuKSxhPTA7YTxyLmxlbmd0aDthKyspaVthXT1yLmNoYXJDb2RlQXQoYSk7cmV0dXJuIG5ldyBCbG9iKFtuXSx7dHlwZTplfSl9ZnVuY3Rpb24gVW1lKHQpe3ZhciBlPXQuaW5kZXhPZigiLCIpO3JldHVybiB0LnN1YnN0cihlKzEpfWZ1bmN0aW9uIHcxZSh0LGUscil7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBlLnRvRGF0YVVSTChyLHQucXVhbGl0eSl9LCJnZXRCNjRVcmkiKTtzd2l0Y2godC5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IGQxKGZ1bmN0aW9uKGksYSl7dHJ5e2UudG9CbG9iKGZ1bmN0aW9uKHMpe3MhPW51bGw/aShzKTphKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSxyLHQucXVhbGl0eSl9Y2F0Y2gocyl7YShzKX19KTtjYXNlImJsb2IiOnJldHVybiBwdHQoVW1lKG4oKSkscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVbWUobigpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gbigpfX1mdW5jdGlvbiBrMWUodCl7dmFyIGU9dGhpcyxyPWUuY3kud2luZG93KCksbj1yLmRvY3VtZW50O2UuZGF0YT17Y2FudmFzZXM6bmV3IEFycmF5KEtyLkNBTlZBU19MQVlFUlMpLGNvbnRleHRzOm5ldyBBcnJheShLci5DQU5WQVNfTEFZRVJTKSxjYW52YXNOZWVkc1JlZHJhdzpuZXcgQXJyYXkoS3IuQ0FOVkFTX0xBWUVSUyksYnVmZmVyQ2FudmFzZXM6bmV3IEFycmF5KEtyLkJVRkZFUl9DT1VOVCksYnVmZmVyQ29udGV4dHM6bmV3IEFycmF5KEtyLkNBTlZBU19MQVlFUlMpfTt2YXIgaT0iLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIixhPSJyZ2JhKDAsMCwwLDApIjtlLmRhdGEuY2FudmFzQ29udGFpbmVyPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIHM9ZS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZTtlLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlW2ldPWEscy5wb3NpdGlvbj0icmVsYXRpdmUiLHMuekluZGV4PSIwIixzLm92ZXJmbG93PSJoaWRkZW4iO3ZhciBsPXQuY3kuY29udGFpbmVyKCk7bC5hcHBlbmRDaGlsZChlLmRhdGEuY2FudmFzQ29udGFpbmVyKSxsLnN0eWxlW2ldPWE7dmFyIHU9eyItd2Via2l0LXVzZXItc2VsZWN0Ijoibm9uZSIsIi1tb3otdXNlci1zZWxlY3QiOiItbW96LW5vbmUiLCJ1c2VyLXNlbGVjdCI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOiJyZ2JhKDAsMCwwLDApIiwib3V0bGluZS1zdHlsZSI6Im5vbmUifTtlWGUoKSYmKHVbIi1tcy10b3VjaC1hY3Rpb24iXT0ibm9uZSIsdVsidG91Y2gtYWN0aW9uIl09Im5vbmUiKTtmb3IodmFyIGg9MDtoPEtyLkNBTlZBU19MQVlFUlM7aCsrKXt2YXIgZj1lLmRhdGEuY2FudmFzZXNbaF09bi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLmRhdGEuY29udGV4dHNbaF09Zi5nZXRDb250ZXh0KCIyZCIpLE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24oSil7Zi5zdHlsZVtKXT11W0pdfSksZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2gpLGYuc3R5bGUuekluZGV4PVN0cmluZyhLci5DQU5WQVNfTEFZRVJTLWgpLGUuZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoZiksZS5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W2hdPSExfWUuZGF0YS50b3BDYW52YXM9ZS5kYXRhLmNhbnZhc2VzWzBdLGUuZGF0YS5jYW52YXNlc1tLci5OT0RFXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIrS3IuTk9ERSsiLW5vZGUiKSxlLmRhdGEuY2FudmFzZXNbS3IuU0VMRUNUX0JPWF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK0tyLlNFTEVDVF9CT1grIi1zZWxlY3Rib3giKSxlLmRhdGEuY2FudmFzZXNbS3IuRFJBR10uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK0tyLkRSQUcrIi1kcmFnIik7Zm9yKHZhciBoPTA7aDxLci5CVUZGRVJfQ09VTlQ7aCsrKWUuZGF0YS5idWZmZXJDYW52YXNlc1toXT1uLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGUuZGF0YS5idWZmZXJDb250ZXh0c1toXT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uZ2V0Q29udGV4dCgiMmQiKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwiYnVmZmVyIitoKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUuekluZGV4PVN0cmluZygtaC0xKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjtlLnBhdGhzRW5hYmxlZD0hMDt2YXIgZD0kcygpLHA9byhmdW5jdGlvbihIKXtyZXR1cm57eDooSC54MStILngyKS8yLHk6KEgueTErSC55MikvMn19LCJnZXRCb3hDZW50ZXIiKSxtPW8oZnVuY3Rpb24oSCl7cmV0dXJue3g6LUgudy8yLHk6LUguaC8yfX0sImdldENlbnRlck9mZnNldCIpLGc9byhmdW5jdGlvbihIKXt2YXIgcT1IWzBdLl9wcml2YXRlLFo9cS5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPT09cS5iYWNrZ3JvdW5kVGltZXN0YW1wO3JldHVybiFafSwiYmFja2dyb3VuZFRpbWVzdGFtcEhhc0NoYW5nZWQiKSx5PW8oZnVuY3Rpb24oSCl7cmV0dXJuIEhbMF0uX3ByaXZhdGUubm9kZUtleX0sImdldFN0eWxlS2V5Iiksdj1vKGZ1bmN0aW9uKEgpe3JldHVybiBIWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXl9LCJnZXRMYWJlbEtleSIpLHg9byhmdW5jdGlvbihIKXtyZXR1cm4gSFswXS5fcHJpdmF0ZS5zb3VyY2VMYWJlbFN0eWxlS2V5fSwiZ2V0U291cmNlTGFiZWxLZXkiKSxiPW8oZnVuY3Rpb24oSCl7cmV0dXJuIEhbMF0uX3ByaXZhdGUudGFyZ2V0TGFiZWxTdHlsZUtleX0sImdldFRhcmdldExhYmVsS2V5Iiksdz1vKGZ1bmN0aW9uKEgscSxaLGFlLHVlKXtyZXR1cm4gZS5kcmF3RWxlbWVudChILHEsWiwhMSwhMSx1ZSl9LCJkcmF3RWxlbWVudCIpLF89byhmdW5jdGlvbihILHEsWixhZSx1ZSl7cmV0dXJuIGUuZHJhd0VsZW1lbnRUZXh0KEgscSxaLGFlLCJtYWluIix1ZSl9LCJkcmF3TGFiZWwiKSxUPW8oZnVuY3Rpb24oSCxxLFosYWUsdWUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChILHEsWixhZSwic291cmNlIix1ZSl9LCJkcmF3U291cmNlTGFiZWwiKSxFPW8oZnVuY3Rpb24oSCxxLFosYWUsdWUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChILHEsWixhZSwidGFyZ2V0Iix1ZSl9LCJkcmF3VGFyZ2V0TGFiZWwiKSxMPW8oZnVuY3Rpb24oSCl7cmV0dXJuIEguYm91bmRpbmdCb3goKSxIWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LCJnZXRFbGVtZW50Qm94IiksQz1vKGZ1bmN0aW9uKEgpe3JldHVybiBILmJvdW5kaW5nQm94KCksSFswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxkfSwiZ2V0TGFiZWxCb3giKSxBPW8oZnVuY3Rpb24oSCl7cmV0dXJuIEguYm91bmRpbmdCb3goKSxIWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnNvdXJjZXx8ZH0sImdldFNvdXJjZUxhYmVsQm94IiksST1vKGZ1bmN0aW9uKEgpe3JldHVybiBILmJvdW5kaW5nQm94KCksSFswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy50YXJnZXR8fGR9LCJnZXRUYXJnZXRMYWJlbEJveCIpLEQ9byhmdW5jdGlvbihILHEpe3JldHVybiBxfSwiaXNMYWJlbFZpc2libGVBdFNjYWxlIiksaz1vKGZ1bmN0aW9uKEgpe3JldHVybiBwKEwoSCkpfSwiZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQiKSxSPW8oZnVuY3Rpb24oSCxxLFope3ZhciBhZT1IP0grIi0iOiIiO3JldHVybnt4OnEueCtaLnBzdHlsZShhZSsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseTpxLnkrWi5wc3R5bGUoYWUrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlfX0sImFkZFRleHRNYXJnaW4iKSxTPW8oZnVuY3Rpb24oSCxxLFope3ZhciBhZT1IWzBdLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybnt4OmFlW3FdLHk6YWVbWl19fSwiZ2V0UnNQdCIpLE89byhmdW5jdGlvbihIKXtyZXR1cm4gUigiIixTKEgsImxhYmVsWCIsImxhYmVsWSIpLEgpfSwiZ2V0TGFiZWxSb3RhdGlvblBvaW50IiksTj1vKGZ1bmN0aW9uKEgpe3JldHVybiBSKCJzb3VyY2UiLFMoSCwic291cmNlTGFiZWxYIiwic291cmNlTGFiZWxZIiksSCl9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uUG9pbnQiKSxQPW8oZnVuY3Rpb24oSCl7cmV0dXJuIFIoInRhcmdldCIsUyhILCJ0YXJnZXRMYWJlbFgiLCJ0YXJnZXRMYWJlbFkiKSxIKX0sImdldFRhcmdldExhYmVsUm90YXRpb25Qb2ludCIpLEY9byhmdW5jdGlvbihIKXtyZXR1cm4gbShMKEgpKX0sImdldEVsZW1lbnRSb3RhdGlvbk9mZnNldCIpLEI9byhmdW5jdGlvbihIKXtyZXR1cm4gbShBKEgpKX0sImdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQiKSwkPW8oZnVuY3Rpb24oSCl7cmV0dXJuIG0oSShIKSl9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0Iiksej1vKGZ1bmN0aW9uKEgpe3ZhciBxPUMoSCksWj1tKEMoSCkpO2lmKEguaXNOb2RlKCkpe3N3aXRjaChILnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSl7Y2FzZSJsZWZ0IjpaLng9LXEudzticmVhaztjYXNlInJpZ2h0IjpaLng9MDticmVha31zd2l0Y2goSC5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWUpe2Nhc2UidG9wIjpaLnk9LXEuaDticmVhaztjYXNlImJvdHRvbSI6Wi55PTA7YnJlYWt9fXJldHVybiBafSwiZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCIpLFc9ZS5kYXRhLmVsZVR4ckNhY2hlPW5ldyBGeChlLHtnZXRLZXk6eSxkb2VzRWxlSW52YWxpZGF0ZUtleTpnLGRyYXdFbGVtZW50OncsZ2V0Qm91bmRpbmdCb3g6TCxnZXRSb3RhdGlvblBvaW50OmssZ2V0Um90YXRpb25PZmZzZXQ6RixhbGxvd0VkZ2VUeHJDYWNoaW5nOiExLGFsbG93UGFyZW50VHhyQ2FjaGluZzohMX0pLGo9ZS5kYXRhLmxibFR4ckNhY2hlPW5ldyBGeChlLHtnZXRLZXk6dixkcmF3RWxlbWVudDpfLGdldEJvdW5kaW5nQm94OkMsZ2V0Um90YXRpb25Qb2ludDpPLGdldFJvdGF0aW9uT2Zmc2V0OnosaXNWaXNpYmxlOkR9KSxLPWUuZGF0YS5zbGJUeHJDYWNoZT1uZXcgRngoZSx7Z2V0S2V5OngsZHJhd0VsZW1lbnQ6VCxnZXRCb3VuZGluZ0JveDpBLGdldFJvdGF0aW9uUG9pbnQ6TixnZXRSb3RhdGlvbk9mZnNldDpCLGlzVmlzaWJsZTpEfSksaWU9ZS5kYXRhLnRsYlR4ckNhY2hlPW5ldyBGeChlLHtnZXRLZXk6YixkcmF3RWxlbWVudDpFLGdldEJvdW5kaW5nQm94OkksZ2V0Um90YXRpb25Qb2ludDpQLGdldFJvdGF0aW9uT2Zmc2V0OiQsaXNWaXNpYmxlOkR9KSxRPWUuZGF0YS5seXJUeHJDYWNoZT1uZXcgZzFlKGUpO2Uub25VcGRhdGVFbGVDYWxjcyhvKGZ1bmN0aW9uKEgscSl7Vy5pbnZhbGlkYXRlRWxlbWVudHMocSksai5pbnZhbGlkYXRlRWxlbWVudHMocSksSy5pbnZhbGlkYXRlRWxlbWVudHMocSksaWUuaW52YWxpZGF0ZUVsZW1lbnRzKHEpLFEuaW52YWxpZGF0ZUVsZW1lbnRzKHEpO2Zvcih2YXIgWj0wO1o8cS5sZW5ndGg7WisrKXt2YXIgYWU9cVtaXS5fcHJpdmF0ZTthZS5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPWFlLmJhY2tncm91bmRUaW1lc3RhbXB9fSwiaW52YWxpZGF0ZVRleHR1cmVDYWNoZXMiKSk7dmFyIGVlPW8oZnVuY3Rpb24oSCl7Zm9yKHZhciBxPTA7cTxILmxlbmd0aDtxKyspUS5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQoSFtxXS5lbGUpfSwicmVmaW5lSW5MYXllcnMiKTtXLm9uRGVxdWV1ZShlZSksai5vbkRlcXVldWUoZWUpLEsub25EZXF1ZXVlKGVlKSxpZS5vbkRlcXVldWUoZWUpfWZ1bmN0aW9uIEMxZSh0LGUscil7dmFyIG49cixpPW8oZnVuY3Rpb24oQyl7b24oIkNhbiBub3QgcmVnaXN0ZXIgYCIrZSsiYCBmb3IgYCIrdCsiYCBzaW5jZSBgIitDKyJgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm90b3R5cGUgYW5kIGNhbiBub3QgYmUgb3ZlcnJpZGRlbiIpfSwib3ZlcnJpZGVFcnIiKTtpZih0PT09ImNvcmUiKXtpZihReC5wcm90b3R5cGVbZV0pcmV0dXJuIGkoZSk7UXgucHJvdG90eXBlW2VdPXJ9ZWxzZSBpZih0PT09ImNvbGxlY3Rpb24iKXtpZihiYS5wcm90b3R5cGVbZV0pcmV0dXJuIGkoZSk7YmEucHJvdG90eXBlW2VdPXJ9ZWxzZSBpZih0PT09ImxheW91dCIpe2Zvcih2YXIgYT1vKGZ1bmN0aW9uKEMpe3RoaXMub3B0aW9ucz1DLHIuY2FsbCh0aGlzLEMpLFZyKHRoaXMuX3ByaXZhdGUpfHwodGhpcy5fcHJpdmF0ZT17fSksdGhpcy5fcHJpdmF0ZS5jeT1DLmN5LHRoaXMuX3ByaXZhdGUubGlzdGVuZXJzPVtdLHRoaXMuY3JlYXRlRW1pdHRlcigpfSwiTGF5b3V0Iikscz1hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxsPVtdLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XTtzW2hdPXNbaF18fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fXMuc3RhcnQmJiFzLnJ1bj9zLnJ1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0KCksdGhpc306IXMuc3RhcnQmJnMucnVuJiYocy5zdGFydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJ1bigpLHRoaXN9KTt2YXIgZj1yLnByb3RvdHlwZS5zdG9wO3Muc3RvcD1mdW5jdGlvbigpe3ZhciBMPXRoaXMub3B0aW9ucztpZihMJiZMLmFuaW1hdGUpe3ZhciBDPXRoaXMuYW5pbWF0aW9ucztpZihDKWZvcih2YXIgQT0wO0E8Qy5sZW5ndGg7QSsrKUNbQV0uc3RvcCgpfXJldHVybiBmP2YuY2FsbCh0aGlzKTp0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxzLmRlc3Ryb3l8fChzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHMuY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07dmFyIGQ9byhmdW5jdGlvbihDKXtyZXR1cm4gQy5fcHJpdmF0ZS5jeX0sImdldEN5IikscD17YWRkRXZlbnRGaWVsZHM6byhmdW5jdGlvbihDLEEpe0EubGF5b3V0PUMsQS5jeT1kKEMpLEEudGFyZ2V0PUN9LCJhZGRFdmVudEZpZWxkcyIpLGJ1YmJsZTpvKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJidWJibGUiKSxwYXJlbnQ6byhmdW5jdGlvbihDKXtyZXR1cm4gZChDKX0sInBhcmVudCIpfTtpcihzLHtjcmVhdGVFbWl0dGVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyPW5ldyBPNihwLHRoaXMpLHRoaXN9LCJjcmVhdGVFbWl0dGVyIiksZW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sImVtaXR0ZXIiKSxvbjpvKGZ1bmN0aW9uKEMsQSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKEMsQSksdGhpc30sIm9uIiksb25lOm8oZnVuY3Rpb24oQyxBKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKEMsQSksdGhpc30sIm9uZSIpLG9uY2U6byhmdW5jdGlvbihDLEEpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoQyxBKSx0aGlzfSwib25jZSIpLHJlbW92ZUxpc3RlbmVyOm8oZnVuY3Rpb24oQyxBKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoQyxBKSx0aGlzfSwicmVtb3ZlTGlzdGVuZXIiKSxyZW1vdmVBbGxMaXN0ZW5lcnM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSwicmVtb3ZlQWxsTGlzdGVuZXJzIiksZW1pdDpvKGZ1bmN0aW9uKEMsQSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLmVtaXQoQyxBKSx0aGlzfSwiZW1pdCIpfSksc24uZXZlbnRBbGlhc2VzT24ocyksbj1hfWVsc2UgaWYodD09PSJyZW5kZXJlciImJmUhPT0ibnVsbCImJmUhPT0iYmFzZSIpe3ZhciBtPUExZSgicmVuZGVyZXIiLCJiYXNlIiksZz1tLnByb3RvdHlwZSx5PXIsdj1yLnByb3RvdHlwZSx4PW8oZnVuY3Rpb24oKXttLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIlJlbmRlcmVyIiksYj14LnByb3RvdHlwZTtmb3IodmFyIHcgaW4gZyl7dmFyIF89Z1t3XSxUPXZbd10hPW51bGw7aWYoVClyZXR1cm4gaSh3KTtiW3ddPV99Zm9yKHZhciBFIGluIHYpYltFXT12W0VdO2cuY2xpZW50RnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oTCl7YltMXT1iW0xdfHxmdW5jdGlvbigpe2hpKCJSZW5kZXJlciBkb2VzIG5vdCBpbXBsZW1lbnQgYHJlbmRlcmVyLiIrTCsiKClgIG9uIGl0cyBwcm90b3R5cGUiKX19KSxuPXh9ZWxzZSBpZih0PT09Il9fcHJvdG9fXyJ8fHQ9PT0iY29uc3RydWN0b3IifHx0PT09InByb3RvdHlwZSIpcmV0dXJuIGhpKHQrIiBpcyBhbiBpbGxlZ2FsIHR5cGUgdG8gYmUgcmVnaXN0ZXJlZCwgcG9zc2libHkgbGVhZCB0byBwcm90b3R5cGUgcG9sbHV0aW9ucyIpO3JldHVybiBabWUoe21hcDpFMWUsa2V5czpbdCxlXSx2YWx1ZTpufSl9ZnVuY3Rpb24gQTFlKHQsZSl7cmV0dXJuIEptZSh7bWFwOkUxZSxrZXlzOlt0LGVdfSl9ZnVuY3Rpb24geHR0KHQsZSxyLG4saSl7cmV0dXJuIFptZSh7bWFwOlMxZSxrZXlzOlt0LGUscixuXSx2YWx1ZTppfSl9ZnVuY3Rpb24gYnR0KHQsZSxyLG4pe3JldHVybiBKbWUoe21hcDpTMWUsa2V5czpbdCxlLHIsbl19KX12YXIgSGksUnBlLFdxZSxxbWUsWXFlLHFxZSxaeCxadCx0aSx3bixWcixYcWUseHQsanFlLHA2LHBvLEp4LFhtZSx0QixqbWUsS3FlLFNmLFFxZSxacWUsSnFlLGVYZSwkeCxyQixTNixLbWUsTXBlLFdpLHRYZSxyWGUsblhlLGlYZSxhWGUsc1hlLFFtZSxvWGUsaXIsbFhlLGNYZSx1WGUsaFhlLGZYZSxkWGUsWm1lLEptZSxGMCxJeCxnWGUseVhlLHZYZSx4WGUsQzYsYlhlLEVQLHdYZSxrWGUsRVhlLENYZSxBWGUsbDEsZWdlLF9YZSxMWGUsTHgsTlhlLFJYZSxNWGUsT1hlLFBYZSxCWGUsSXBlLHRnZSxHWGUsJFhlLGViLE9wZSxVWGUsSFhlLFdYZSxZWGUsUHBlLFhYZSxqWGUsS1hlLEE2LFNQLHJnZSxaWGUsbTYsWHUsdDEsbmdlLE94LGlnZSxWeCxVeCxKWGUseGYscUUsZWplLHowLGFnZSx0amUsQnBlLHJqZSxuamUsbkIsc2dlLGc2LEZwZSxpQixoaSxvZ2Usb24saWplLFZjLGFqZSxsZ2Usc2plLGNnZSx3YSxDZixhQixvamUsV2wsd2YsbGplLFVjLGNqZSx1amUsZjEsXzYsenBlLEh4LGhqZSx0YixmamUsZGplLHBqZSxtamUsZ2plLHlqZSx2amUseGplLGJqZSx3amUsVGplLENQLGtqZSxFamUsTDYsdWdlLHIxLFNqZSxDamUsQWplLF9qZSxMamUsWEUsc0IsaGdlLEcwLE0wLERqZSxpYSxpMSxOamUsV3gsJHMsUmplLE1qZSxJamUsZmdlLE9qZSxhNixzNixHcGUsb0IsYzEsUGplLGRnZSxwZ2UsQmplLEZqZSx6amUsR2plLCRqZSxWamUsR3MsanUsVWplLHk2LHY2LEhqZSxCMCxQeCxBUCxUZixZeCxXamUsakUsbHMsbWdlLEJQLCQwLGdnZSxsQixZamUsRlAscWplLFhqZSwkcGUsYTEsVnBlLHMxLGpqZSx6UCxLamUsUWplLFpqZSxKamUseWdlLGVLZSx0S2UscktlLG5LZSxpS2UsYUtlLHNLZSxVcGUsb0tlLGxLZSx2Z2UsSHBlLFdwZSxjS2UsdUtlLER4LHUxLGhLZSxjQix4NixfUCx4Z2UsYmdlLGZLZSxkS2UscEtlLFlwZSxxcGUsbUtlLGdLZSx5S2UsdktlLHhLZSxYcGUsYktlLHdLZSxUS2Usa0tlLGpwZSxLRSxFS2UsU0tlLEtwZSxDS2UsQUtlLF9LZSxMS2UsREtlLE5LZSxRcGUsUktlLFpwZSxNS2UsSUtlLE9LZSxRRSxQS2UsWkUsQktlLHdnZSxUZ2Usa2dlLEVnZSxLdSxKcGUsU2dlLGVtZSx0bWUsRktlLGQxLEdQLFYwLHpLZSxHS2UsTjYsJEtlLFZLZSxIS2UsV0tlLFlLZSxxS2UsWEtlLEtLZSxRS2UsTFAscm1lLEpLZSxlUWUsdFFlLG5RZSxpUWUsYVFlLHNRZSxvUWUsbFFlLGNRZSx1UWUsZlFlLHBRZSx1QixnUWUscXgsdlFlLGJRZSx3UWUsVFFlLGtRZSxTUWUsQ1FlLEFRZSxMUWUsRFFlLFJRZSxubWUsSVFlLENnZSxSNixCUWUsRlFlLEdRZSxWUWUsSFFlLFlRZSxxUWUsWFFlLGpRZSxRUWUsSlFlLE02LHJaZSxpWmUsc1plLGxaZSxBZ2UsY1plLHVaZSxoWmUsZFplLHBaZSxtWmUsZ1plLF9nZSxMZ2UsdlplLGltZSxhbWUseFplLE5nZSxSZ2UsVFplLGZCLFNaZSxBWmUsX1plLHNtZSxEWmUsTlplLFJaZSxJWmUsT1plLFBaZSxGWmUsR1plLFZaZSxIWmUsWVplLHFaZSxYWmUsc24salplLG82LCRyLHBuLFB0LCRQLEtaZSxRWmUsWlplLEtnLGJmLFZQLEpaZSxlSmUsdEplLHJKZSxuSmUsTWdlLGlKZSxhSmUsZEIsc0plLGZpLHpuLG9KZSxsSmUsY0plLEFmLF9mLGtmLGFsLGgxLFh4LFBnZSxoSmUsSTYsWWwsQmdlLEZnZSxvbWUsZkplLG8xLERmLGlsLEhsLEkwLE54LEpFLE5QLGRKZSxwSmUsemdlLEdnZSxsbWUsangsY21lLHVtZSxtSmUsQngscmIsJGdlLGdKZSx5SmUsdkplLHhKZSxiSmUsd0plLFRKZSxrSmUsRUplLGhtZSxTSmUsQ0plLEFKZSxWZ2UsVWdlLF9KZSxIZ2UsZm1lLExKZSxMZixXZ2UsZG1lLERKZSxOSmUsdDYsWWdlLHFnZSxRcixSSmUsWGdlLGI2LE1KZSxJSmUsbDYseGEseTEsT0plLFBKZSxCSmUsRkplLEVmLEJhLG1tZSxnbWUseW1lLGJhLE5uLHpKZSwkSmUsRG4sYzYsSEplLFdKZSxyNixLZ2UsVVAsdTYsWUplLHFKZSxIUCxoNix6YSx6eCxYSmUsbmIsZ0IsSGMsRjYseUIsdmEsejYsUGEsRmEsakplLEtKZSxVMCxLeCxReCx3NixRSmUsWkplLEpnLEVtZSxKSmUsZWV0LE1QLHRldCxyZXQsbmV0LGlldCxhZXQsc2V0LGUxZSxvZXQsY2V0LHVldCxTbWUsaGV0LGZldCxUNixkZXQscGV0LG1ldCxnZXQseWV0LHZldCxDbWUseGV0LGJldCx3ZXQsVGV0LGtldCxBbWUsX21lLHhCLFcwLGs2LFdQLFlQLCRjLG5sLExtZSxEbWUsUDAsZjYscXUsTjAsTzAsR2MsZTEsbjYsYTFlLHMxZSxxUCxYUCxObWUsUm1lLEVldCxDZXQsR2EsaWIsd0IsV2MsYzFlLHUxZSxfZXQsaDFlLE1tZSxJbWUsJDYsVjYsZjFlLGQxZSx4MSxRdSxhYixPbWUsTGV0LHAxZSxiMSxJUCxtMWUsRGV0LFBtZSxpNixkNixqUCxOZXQsUmV0LE1ldCxJZXQsT2V0LFBldCxCZXQsRmV0LHpldCxHZXQsJGV0LFZldCxVZXQsSGV0LG4xLFdldCxGeCxxaSxZZXQsR3gsRTYscWV0LFhldCxqZXQsS2V0LFFldCxaZXQsSmV0LGV0dCxCbWUsdHR0LHJ0dCxnMWUsVGEsRm1lLG50dCx5MWUsem1lLFljLGx0dCxjdHQsdXR0LGh0dCxmdHQsT1AsWnUsdjFlLFRCLFkwLHcxLHgxZSxtbyxkdHQsTmYsJG1lLFZtZSxLUCxRUCxiMWUsUjAsc2IsVDFlLG10dCxLcixndHQseXR0LHZ0dCxFMWUsUzFlLFpQLF8xZSxIMCx3dHQsc2wsa0I9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFlpLCJfdHlwZW9mIik7byhKUCwiX2NsYXNzQ2FsbENoZWNrIik7byhEcGUsIl9kZWZpbmVQcm9wZXJ0aWVzIik7byhlQiwiX2NyZWF0ZUNsYXNzIik7byhIbWUsIl9kZWZpbmVQcm9wZXJ0eSQxIik7byhVbCwiX3NsaWNlZFRvQXJyYXkiKTtvKFZxZSwiX2FycmF5V2l0aEhvbGVzIik7byhVcWUsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIpO28oV21lLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiKTtvKE5wZSwiX2FycmF5TGlrZVRvQXJyYXkiKTtvKEhxZSwiX25vbkl0ZXJhYmxlUmVzdCIpO28oWW1lLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIpO0hpPXR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LFJwZT1IaT9IaS5uYXZpZ2F0b3I6bnVsbDtIaSYmSGkuZG9jdW1lbnQ7V3FlPVlpKCIiKSxxbWU9WWkoe30pLFlxZT1ZaShmdW5jdGlvbigpe30pLHFxZT10eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyJ1bmRlZmluZWQiOllpKEhUTUxFbGVtZW50KSxaeD1vKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmluc3RhbmNlU3RyaW5nJiZ0aShlLmluc3RhbmNlU3RyaW5nKT9lLmluc3RhbmNlU3RyaW5nKCk6bnVsbH0sImluc3RhbmNlU3RyIiksWnQ9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmWWkoZSk9PVdxZX0sInN0cmluZyIpLHRpPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJllpKGUpPT09WXFlfSwiZm4iKSx3bj1vKGZ1bmN0aW9uKGUpe3JldHVybiFwbyhlKSYmKEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShlKTplIT1udWxsJiZlIGluc3RhbmNlb2YgQXJyYXkpfSwiYXJyYXkiKSxWcj1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZZaShlKT09PXFtZSYmIXduKGUpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSwicGxhaW5PYmplY3QiKSxYcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmWWkoZSk9PT1xbWV9LCJvYmplY3QiKSx4dD1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZZaShlKT09PVlpKDEpJiYhaXNOYU4oZSl9LCJudW1iZXIiKSxqcWU9byhmdW5jdGlvbihlKXtyZXR1cm4geHQoZSkmJk1hdGguZmxvb3IoZSk9PT1lfSwiaW50ZWdlciIpLHA2PW8oZnVuY3Rpb24oZSl7aWYocXFlIT09InVuZGVmaW5lZCIpcmV0dXJuIGUhPW51bGwmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sImh0bWxFbGVtZW50IikscG89byhmdW5jdGlvbihlKXtyZXR1cm4gSngoZSl8fFhtZShlKX0sImVsZW1lbnRPckNvbGxlY3Rpb24iKSxKeD1vKGZ1bmN0aW9uKGUpe3JldHVybiBaeChlKT09PSJjb2xsZWN0aW9uIiYmZS5fcHJpdmF0ZS5zaW5nbGV9LCJlbGVtZW50IiksWG1lPW8oZnVuY3Rpb24oZSl7cmV0dXJuIFp4KGUpPT09ImNvbGxlY3Rpb24iJiYhZS5fcHJpdmF0ZS5zaW5nbGV9LCJjb2xsZWN0aW9uIiksdEI9byhmdW5jdGlvbihlKXtyZXR1cm4gWngoZSk9PT0iY29yZSJ9LCJjb3JlIiksam1lPW8oZnVuY3Rpb24oZSl7cmV0dXJuIFp4KGUpPT09InN0eWxlc2hlZXQifSwic3R5bGVzaGVldCIpLEtxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBaeChlKT09PSJldmVudCJ9LCJldmVudCIpLFNmPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/ITA6ISEoZT09PSIifHxlLm1hdGNoKC9eXHMrJC8pKX0sImVtcHR5U3RyaW5nIiksUXFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudD4idSI/ITE6ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSwiZG9tRWxlbWVudCIpLFpxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBWcihlKSYmeHQoZS54MSkmJnh0KGUueDIpJiZ4dChlLnkxKSYmeHQoZS55Mil9LCJib3VuZGluZ0JveCIpLEpxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBYcWUoZSkmJnRpKGUudGhlbil9LCJwcm9taXNlIiksZVhlPW8oZnVuY3Rpb24oKXtyZXR1cm4gUnBlJiZScGUudXNlckFnZW50Lm1hdGNoKC9tc2llfHRyaWRlbnR8ZWRnZS9pKX0sIm1zIiksJHg9byhmdW5jdGlvbihlLHIpe3J8fChyPW8oZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiJ1bmRlZmluZWQiO2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhLnB1c2goYXJndW1lbnRzW3NdKTtyZXR1cm4gYS5qb2luKCIkIil9LCJrZXlGbiIpKTt2YXIgbj1vKGZ1bmN0aW9uIGkoKXt2YXIgYT10aGlzLHM9YXJndW1lbnRzLGwsdT1yLmFwcGx5KGEscyksaD1pLmNhY2hlO3JldHVybihsPWhbdV0pfHwobD1oW3VdPWUuYXBwbHkoYSxzKSksbH0sIm1lbW9pemVkRm4iKTtyZXR1cm4gbi5jYWNoZT17fSxufSwibWVtb2l6ZSIpLHJCPSR4KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihlKXtyZXR1cm4iLSIrZS50b0xvd2VyQ2FzZSgpfSl9KSxTNj0keChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKGUpe3JldHVybiBlWzFdLnRvVXBwZXJDYXNlKCl9KX0pLEttZT0keChmdW5jdGlvbih0LGUpe3JldHVybiB0K2VbMF0udG9VcHBlckNhc2UoKStlLnN1YnN0cmluZygxKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiJCIrZX0pLE1wZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBTZihlKT9lOmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSl9LCJjYXBpdGFsaXplIiksV2k9Iig/OlstK10/KD86KD86XFxkK3xcXGQqXFwuXFxkKykoPzpbRWVdWystXT9cXGQrKT8pKSIsdFhlPSJyZ2JbYV0/XFwoKCIrV2krIlslXT8pXFxzKixcXHMqKCIrV2krIlslXT8pXFxzKixcXHMqKCIrV2krIlslXT8pKD86XFxzKixcXHMqKCIrV2krIikpP1xcKSIsclhlPSJyZ2JbYV0/XFwoKD86IitXaSsiWyVdPylcXHMqLFxccyooPzoiK1dpKyJbJV0/KVxccyosXFxzKig/OiIrV2krIlslXT8pKD86XFxzKixcXHMqKD86IitXaSsiKSk/XFwpIixuWGU9ImhzbFthXT9cXCgoIitXaSsiKVxccyosXFxzKigiK1dpKyJbJV0pXFxzKixcXHMqKCIrV2krIlslXSkoPzpcXHMqLFxccyooIitXaSsiKSk/XFwpIixpWGU9ImhzbFthXT9cXCgoPzoiK1dpKyIpXFxzKixcXHMqKD86IitXaSsiWyVdKVxccyosXFxzKig/OiIrV2krIlslXSkoPzpcXHMqLFxccyooPzoiK1dpKyIpKT9cXCkiLGFYZT0iXFwjWzAtOWEtZkEtRl17M30iLHNYZT0iXFwjWzAtOWEtZkEtRl17Nn0iLFFtZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU8cj8tMTplPnI/MTowfSwiYXNjZW5kaW5nIiksb1hlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4tMSpRbWUoZSxyKX0sImRlc2NlbmRpbmciKSxpcj1PYmplY3QuYXNzaWduIT1udWxsP09iamVjdC5hc3NpZ24uYmluZChPYmplY3QpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMscj0xO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKG4hPW51bGwpZm9yKHZhciBpPU9iamVjdC5rZXlzKG4pLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTt0W3NdPW5bc119fXJldHVybiB0fSxsWGU9byhmdW5jdGlvbihlKXtpZighKCEoZS5sZW5ndGg9PT00fHxlLmxlbmd0aD09PTcpfHxlWzBdIT09IiMiKSl7dmFyIHI9ZS5sZW5ndGg9PT00LG4saSxhLHM9MTY7cmV0dXJuIHI/KG49cGFyc2VJbnQoZVsxXStlWzFdLHMpLGk9cGFyc2VJbnQoZVsyXStlWzJdLHMpLGE9cGFyc2VJbnQoZVszXStlWzNdLHMpKToobj1wYXJzZUludChlWzFdK2VbMl0scyksaT1wYXJzZUludChlWzNdK2VbNF0scyksYT1wYXJzZUludChlWzVdK2VbNl0scykpLFtuLGksYV19fSwiaGV4MnR1cGxlIiksY1hlPW8oZnVuY3Rpb24oZSl7dmFyIHIsbixpLGEscyxsLHUsaDtmdW5jdGlvbiBmKGcseSx2KXtyZXR1cm4gdjwwJiYodis9MSksdj4xJiYodi09MSksdjwxLzY/ZysoeS1nKSo2KnY6djwxLzI/eTp2PDIvMz9nKyh5LWcpKigyLzMtdikqNjpnfW8oZiwiaHVlMnJnYiIpO3ZhciBkPW5ldyBSZWdFeHAoIl4iK25YZSsiJCIpLmV4ZWMoZSk7aWYoZCl7aWYobj1wYXJzZUludChkWzFdKSxuPDA/bj0oMzYwLSAtMSpuJTM2MCklMzYwOm4+MzYwJiYobj1uJTM2MCksbi89MzYwLGk9cGFyc2VGbG9hdChkWzJdKSxpPDB8fGk+MTAwfHwoaT1pLzEwMCxhPXBhcnNlRmxvYXQoZFszXSksYTwwfHxhPjEwMCl8fChhPWEvMTAwLHM9ZFs0XSxzIT09dm9pZCAwJiYocz1wYXJzZUZsb2F0KHMpLHM8MHx8cz4xKSkpcmV0dXJuO2lmKGk9PT0wKWw9dT1oPU1hdGgucm91bmQoYSoyNTUpO2Vsc2V7dmFyIHA9YTwuNT9hKigxK2kpOmEraS1hKmksbT0yKmEtcDtsPU1hdGgucm91bmQoMjU1KmYobSxwLG4rMS8zKSksdT1NYXRoLnJvdW5kKDI1NSpmKG0scCxuKSksaD1NYXRoLnJvdW5kKDI1NSpmKG0scCxuLTEvMykpfXI9W2wsdSxoLHNdfXJldHVybiByfSwiaHNsMnR1cGxlIiksdVhlPW8oZnVuY3Rpb24oZSl7dmFyIHIsbj1uZXcgUmVnRXhwKCJeIit0WGUrIiQiKS5leGVjKGUpO2lmKG4pe3I9W107Zm9yKHZhciBpPVtdLGE9MTthPD0zO2ErKyl7dmFyIHM9blthXTtpZihzW3MubGVuZ3RoLTFdPT09IiUiJiYoaVthXT0hMCkscz1wYXJzZUZsb2F0KHMpLGlbYV0mJihzPXMvMTAwKjI1NSksczwwfHxzPjI1NSlyZXR1cm47ci5wdXNoKE1hdGguZmxvb3IocykpfXZhciBsPWlbMV18fGlbMl18fGlbM10sdT1pWzFdJiZpWzJdJiZpWzNdO2lmKGwmJiF1KXJldHVybjt2YXIgaD1uWzRdO2lmKGghPT12b2lkIDApe2lmKGg9cGFyc2VGbG9hdChoKSxoPDB8fGg+MSlyZXR1cm47ci5wdXNoKGgpfX1yZXR1cm4gcn0sInJnYjJ0dXBsZSIpLGhYZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBkWGVbZS50b0xvd2VyQ2FzZSgpXX0sImNvbG9ybmFtZTJ0dXBsZSIpLGZYZT1vKGZ1bmN0aW9uKGUpe3JldHVybih3bihlKT9lOm51bGwpfHxoWGUoZSl8fGxYZShlKXx8dVhlKGUpfHxjWGUoZSl9LCJjb2xvcjJ0dXBsZSIpLGRYZT17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmV5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX0sWm1lPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWUubWFwLG49ZS5rZXlzLGk9bi5sZW5ndGgsYT0wO2E8aTthKyspe3ZhciBzPW5bYV07aWYoVnIocykpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIHNldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7YTxuLmxlbmd0aC0xPyhyW3NdPT1udWxsJiYocltzXT17fSkscj1yW3NdKTpyW3NdPWUudmFsdWV9fSwic2V0TWFwIiksSm1lPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWUubWFwLG49ZS5rZXlzLGk9bi5sZW5ndGgsYT0wO2E8aTthKyspe3ZhciBzPW5bYV07aWYoVnIocykpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIGdldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7aWYocj1yW3NdLHI9PW51bGwpcmV0dXJuIHJ9cmV0dXJuIHJ9LCJnZXRNYXAiKTtvKHBYZSwiaXNPYmplY3QiKTtGMD1wWGUsSXg9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtvKG1YZSwiY3JlYXRlQ29tbW9uanNNb2R1bGUiKTtnWGU9dHlwZW9mIEl4PT0ib2JqZWN0IiYmSXgmJkl4Lk9iamVjdD09PU9iamVjdCYmSXgseVhlPWdYZSx2WGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix4WGU9eVhlfHx2WGV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksQzY9eFhlLGJYZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEM2LkRhdGUubm93KCl9LCJub3ciKSxFUD1iWGUsd1hlPS9ccy87byhUWGUsInRyaW1tZWRFbmRJbmRleCIpO2tYZT1UWGUsRVhlPS9eXHMrLztvKFNYZSwiYmFzZVRyaW0iKTtDWGU9U1hlLEFYZT1DNi5TeW1ib2wsbDE9QVhlLGVnZT1PYmplY3QucHJvdG90eXBlLF9YZT1lZ2UuaGFzT3duUHJvcGVydHksTFhlPWVnZS50b1N0cmluZyxMeD1sMT9sMS50b1N0cmluZ1RhZzp2b2lkIDA7byhEWGUsImdldFJhd1RhZyIpO05YZT1EWGUsUlhlPU9iamVjdC5wcm90b3R5cGUsTVhlPVJYZS50b1N0cmluZztvKElYZSwib2JqZWN0VG9TdHJpbmciKTtPWGU9SVhlLFBYZT0iW29iamVjdCBOdWxsXSIsQlhlPSJbb2JqZWN0IFVuZGVmaW5lZF0iLElwZT1sMT9sMS50b1N0cmluZ1RhZzp2b2lkIDA7byhGWGUsImJhc2VHZXRUYWciKTt0Z2U9RlhlO28oelhlLCJpc09iamVjdExpa2UiKTtHWGU9elhlLCRYZT0iW29iamVjdCBTeW1ib2xdIjtvKFZYZSwiaXNTeW1ib2wiKTtlYj1WWGUsT3BlPU5hTixVWGU9L15bLStdMHhbMC05YS1mXSskL2ksSFhlPS9eMGJbMDFdKyQvaSxXWGU9L14wb1swLTddKyQvaSxZWGU9cGFyc2VJbnQ7byhxWGUsInRvTnVtYmVyIik7UHBlPXFYZSxYWGU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLGpYZT1NYXRoLm1heCxLWGU9TWF0aC5taW47byhRWGUsImRlYm91bmNlIik7QTY9UVhlLFNQPUhpP0hpLnBlcmZvcm1hbmNlOm51bGwscmdlPVNQJiZTUC5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gU1Aubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LFpYZT1mdW5jdGlvbigpe2lmKEhpKXtpZihIaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe0hpLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07aWYoSGkubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih0KXtIaS5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9O2lmKEhpLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24odCl7SGkud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTtpZihIaS5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24odCl7SGkubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9fXJldHVybiBmdW5jdGlvbih0KXt0JiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChyZ2UoKSl9LDFlMy82MCl9fSgpLG02PW8oZnVuY3Rpb24oZSl7cmV0dXJuIFpYZShlKX0sInJlcXVlc3RBbmltYXRpb25GcmFtZSIpLFh1PXJnZSx0MT05MjYxLG5nZT02NTU5OSxPeD01MzgxLGlnZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06dDEsbj1yLGk7aT1lLm5leHQoKSwhaS5kb25lOyluPW4qbmdlK2kudmFsdWV8MDtyZXR1cm4gbn0sImhhc2hJdGVyYWJsZUludHMiKSxWeD1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp0MTtyZXR1cm4gcipuZ2UrZXwwfSwiaGFzaEludCIpLFV4PW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOk94O3JldHVybihyPDw1KStyK2V8MH0sImhhc2hJbnRBbHQiKSxKWGU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlKjIwOTcxNTIrcn0sImNvbWJpbmVIYXNoZXMiKSx4Zj1vKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdKjIwOTcxNTIrZVsxXX0sImNvbWJpbmVIYXNoZXNBcnJheSIpLHFFPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm5bVngoZVswXSxyWzBdKSxVeChlWzFdLHJbMV0pXX0sImhhc2hBcnJheXMiKSxlamU9byhmdW5jdGlvbihlLHIpe3ZhciBuPXt2YWx1ZTowLGRvbmU6ITF9LGk9MCxhPWUubGVuZ3RoLHM9e25leHQ6byhmdW5jdGlvbigpe3JldHVybiBpPGE/bi52YWx1ZT1lW2krK106bi5kb25lPSEwLG59LCJuZXh0Iil9O3JldHVybiBpZ2UocyxyKX0sImhhc2hJbnRzQXJyYXkiKSx6MD1vKGZ1bmN0aW9uKGUscil7dmFyIG49e3ZhbHVlOjAsZG9uZTohMX0saT0wLGE9ZS5sZW5ndGgscz17bmV4dDpvKGZ1bmN0aW9uKCl7cmV0dXJuIGk8YT9uLnZhbHVlPWUuY2hhckNvZGVBdChpKyspOm4uZG9uZT0hMCxufSwibmV4dCIpfTtyZXR1cm4gaWdlKHMscil9LCJoYXNoU3RyaW5nIiksYWdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gdGplKGFyZ3VtZW50cyl9LCJoYXNoU3RyaW5ncyIpLHRqZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcixuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07bj09PTA/cj16MChpKTpyPXowKGkscil9cmV0dXJuIHJ9LCJoYXNoU3RyaW5nc0FycmF5IiksQnBlPSEwLHJqZT1jb25zb2xlLndhcm4hPW51bGwsbmplPWNvbnNvbGUudHJhY2UhPW51bGwsbkI9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsc2dlPW8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sInRydWVpZnkiKSxnNj1vKGZ1bmN0aW9uKCl7cmV0dXJuITF9LCJmYWxzaWZ5IiksRnBlPW8oZnVuY3Rpb24oKXtyZXR1cm4gMH0sInplcm9pZnkiKSxpQj1vKGZ1bmN0aW9uKCl7fSwibm9vcCIpLGhpPW8oZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSwiZXJyb3IiKSxvZ2U9byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKUJwZT0hIWU7ZWxzZSByZXR1cm4gQnBlfSwid2FybmluZ3MiKSxvbj1vKGZ1bmN0aW9uKGUpe29nZSgpJiYocmplP2NvbnNvbGUud2FybihlKTooY29uc29sZS5sb2coZSksbmplJiZjb25zb2xlLnRyYWNlKCkpKX0sIndhcm4iKSxpamU9byhmdW5jdGlvbihlKXtyZXR1cm4gaXIoe30sZSl9LCJjbG9uZSIpLFZjPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/ZTp3bihlKT9lLnNsaWNlKCk6VnIoZSk/aWplKGUpOmV9LCJjb3B5IiksYWplPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sImNvcHlBcnJheSIpLGxnZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHI9ZT0iIjtlKys8MzY7cis9ZSo1MSY1Mj8oZV4xNT84Xk1hdGgucmFuZG9tKCkqKGVeMjA/MTY6NCk6NCkudG9TdHJpbmcoMTYpOiItIik7cmV0dXJuIHJ9LCJ1dWlkIiksc2plPXt9LGNnZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHNqZX0sInN0YXRpY0VtcHR5T2JqZWN0Iiksd2E9byhmdW5jdGlvbihlKXt2YXIgcj1PYmplY3Qua2V5cyhlKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKHZhciBpPXt9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxsPW4/LltzXTtpW3NdPWw9PT12b2lkIDA/ZVtzXTpsfXJldHVybiBpfX0sImRlZmF1bHRzIiksQ2Y9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWUubGVuZ3RoLTE7aT49MCYmIShlW2ldPT09ciYmKGUuc3BsaWNlKGksMSksbikpO2ktLSk7fSwicmVtb3ZlRnJvbUFycmF5IiksYUI9byhmdW5jdGlvbihlKXtlLnNwbGljZSgwLGUubGVuZ3RoKX0sImNsZWFyQXJyYXkiKSxvamU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2UucHVzaChpKX19LCJwdXNoIiksV2w9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIG4mJihyPUttZShuLHIpKSxlW3JdfSwiZ2V0UHJlZml4ZWRQcm9wZXJ0eSIpLHdmPW8oZnVuY3Rpb24oZSxyLG4saSl7biYmKHI9S21lKG4scikpLGVbcl09aX0sInNldFByZWZpeGVkUHJvcGVydHkiKSxsamU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7SlAodGhpcyx0KSx0aGlzLl9vYmo9e319cmV0dXJuIG8odCwiT2JqZWN0TWFwIiksZUIodCxbe2tleToic2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX29ialtyXT1uLHRoaXN9LCJzZXQiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vYmpbcl09dm9pZCAwLHRoaXN9LCJfZGVsZXRlIil9LHtrZXk6ImNsZWFyIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fb2JqPXt9fSwiY2xlYXIiKX0se2tleToiaGFzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vYmpbcl0hPT12b2lkIDB9LCJoYXMiKX0se2tleToiZ2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vYmpbcl19LCJnZXQiKX1dKSx0fSgpLFVjPXR5cGVvZiBNYXA8InUiP01hcDpsamUsY2plPSJ1bmRlZmluZWQiLHVqZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aWYoSlAodGhpcyx0KSx0aGlzLl9vYmo9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnNpemU9MCxlIT1udWxsKXt2YXIgcjtlLmluc3RhbmNlU3RyaW5nIT1udWxsJiZlLmluc3RhbmNlU3RyaW5nKCk9PT10aGlzLmluc3RhbmNlU3RyaW5nKCk/cj1lLnRvQXJyYXkoKTpyPWU7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy5hZGQocltuXSl9fXJldHVybiBvKHQsIk9iamVjdFNldCIpLGVCKHQsW3trZXk6Imluc3RhbmNlU3RyaW5nIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuInNldCJ9LCJpbnN0YW5jZVN0cmluZyIpfSx7a2V5OiJhZGQiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fb2JqO25bcl0hPT0xJiYobltyXT0xLHRoaXMuc2l6ZSsrKX0sImFkZCIpfSx7a2V5OiJkZWxldGUiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fb2JqO25bcl09PT0xJiYobltyXT0wLHRoaXMuc2l6ZS0tKX0sIl9kZWxldGUiKX0se2tleToiY2xlYXIiLHZhbHVlOm8oZnVuY3Rpb24oKXt0aGlzLl9vYmo9T2JqZWN0LmNyZWF0ZShudWxsKX0sImNsZWFyIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdPT09MX0sImhhcyIpfSx7a2V5OiJ0b0FycmF5Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fb2JqKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIHIuaGFzKG4pfSl9LCJ0b0FycmF5Iil9LHtrZXk6ImZvckVhY2giLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy50b0FycmF5KCkuZm9yRWFjaChyLG4pfSwiZm9yRWFjaCIpfV0pLHR9KCksZjE9KHR5cGVvZiBTZXQ+InUiPyJ1bmRlZmluZWQiOllpKFNldCkpIT09Y2plP1NldDp1amUsXzY9byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMDtpZihlPT09dm9pZCAwfHxyPT09dm9pZCAwfHwhdEIoZSkpe2hpKCJBbiBlbGVtZW50IG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlIGFuZCBwYXJhbWV0ZXJzIHNldCIpO3JldHVybn12YXIgaT1yLmdyb3VwO2lmKGk9PW51bGwmJihyLmRhdGEmJnIuZGF0YS5zb3VyY2UhPW51bGwmJnIuZGF0YS50YXJnZXQhPW51bGw/aT0iZWRnZXMiOmk9Im5vZGVzIiksaSE9PSJub2RlcyImJmkhPT0iZWRnZXMiKXtoaSgiQW4gZWxlbWVudCBtdXN0IGJlIG9mIHR5cGUgYG5vZGVzYCBvciBgZWRnZXNgOyB5b3Ugc3BlY2lmaWVkIGAiK2krImAiKTtyZXR1cm59dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXM7dmFyIGE9dGhpcy5fcHJpdmF0ZT17Y3k6ZSxzaW5nbGU6ITAsZGF0YTpyLmRhdGF8fHt9LHBvc2l0aW9uOnIucG9zaXRpb258fHt4OjAseTowfSxhdXRvV2lkdGg6dm9pZCAwLGF1dG9IZWlnaHQ6dm9pZCAwLGF1dG9QYWRkaW5nOnZvaWQgMCxjb21wb3VuZEJvdW5kc0NsZWFuOiExLGxpc3RlbmVyczpbXSxncm91cDppLHN0eWxlOnt9LHJzdHlsZTp7fSxzdHlsZUN4dHM6W10sc3R5bGVLZXlzOnt9LHJlbW92ZWQ6ITAsc2VsZWN0ZWQ6ISFyLnNlbGVjdGVkLHNlbGVjdGFibGU6ci5zZWxlY3RhYmxlPT09dm9pZCAwPyEwOiEhci5zZWxlY3RhYmxlLGxvY2tlZDohIXIubG9ja2VkLGdyYWJiZWQ6ITEsZ3JhYmJhYmxlOnIuZ3JhYmJhYmxlPT09dm9pZCAwPyEwOiEhci5ncmFiYmFibGUscGFubmFibGU6ci5wYW5uYWJsZT09PXZvaWQgMD9pPT09ImVkZ2VzIjohIXIucGFubmFibGUsYWN0aXZlOiExLGNsYXNzZXM6bmV3IGYxLGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0scnNjcmF0Y2g6e30sc2NyYXRjaDpyLnNjcmF0Y2h8fHt9LGVkZ2VzOltdLGNoaWxkcmVuOltdLHBhcmVudDpyLnBhcmVudCYmci5wYXJlbnQuaXNOb2RlKCk/ci5wYXJlbnQ6bnVsbCx0cmF2ZXJzYWxDYWNoZTp7fSxiYWNrZ3JvdW5kaW5nOiExLGJiQ2FjaGU6bnVsbCxiYkNhY2hlU2hpZnQ6e3g6MCx5OjB9LGJvZHlCb3VuZHM6bnVsbCxvdmVybGF5Qm91bmRzOm51bGwsbGFiZWxCb3VuZHM6e2FsbDpudWxsLHNvdXJjZTpudWxsLHRhcmdldDpudWxsLG1haW46bnVsbH0sYXJyb3dCb3VuZHM6e3NvdXJjZTpudWxsLHRhcmdldDpudWxsLCJtaWQtc291cmNlIjpudWxsLCJtaWQtdGFyZ2V0IjpudWxsfX07aWYoYS5wb3NpdGlvbi54PT1udWxsJiYoYS5wb3NpdGlvbi54PTApLGEucG9zaXRpb24ueT09bnVsbCYmKGEucG9zaXRpb24ueT0wKSxyLnJlbmRlcmVkUG9zaXRpb24pe3ZhciBzPXIucmVuZGVyZWRQb3NpdGlvbixsPWUucGFuKCksdT1lLnpvb20oKTthLnBvc2l0aW9uPXt4OihzLngtbC54KS91LHk6KHMueS1sLnkpL3V9fXZhciBoPVtdO3duKHIuY2xhc3Nlcyk/aD1yLmNsYXNzZXM6WnQoci5jbGFzc2VzKSYmKGg9ci5jbGFzc2VzLnNwbGl0KC9ccysvKSk7Zm9yKHZhciBmPTAsZD1oLmxlbmd0aDtmPGQ7ZisrKXt2YXIgcD1oW2ZdOyFwfHxwPT09IiJ8fGEuY2xhc3Nlcy5hZGQocCl9dGhpcy5jcmVhdGVFbWl0dGVyKCk7dmFyIG09ci5zdHlsZXx8ci5jc3M7bSYmKG9uKCJTZXR0aW5nIGEgYHN0eWxlYCBieXBhc3MgYXQgZWxlbWVudCBjcmVhdGlvbiBzaG91bGQgYmUgZG9uZSBvbmx5IHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuICBUcnkgdG8gdXNlIHRoZSBzdHlsZXNoZWV0IGluc3RlYWQuIiksdGhpcy5zdHlsZShtKSksKG49PT12b2lkIDB8fG4pJiZ0aGlzLnJlc3RvcmUoKX0sIkVsZW1lbnQiKSx6cGU9byhmdW5jdGlvbihlKXtyZXR1cm4gZT17YmZzOmUuYmZzfHwhZS5kZnMsZGZzOmUuZGZzfHwhZS5iZnN9LG8oZnVuY3Rpb24obixpLGEpe3ZhciBzO1ZyKG4pJiYhcG8obikmJihzPW4sbj1zLnJvb3RzfHxzLnJvb3QsaT1zLnZpc2l0LGE9cy5kaXJlY3RlZCksYT1hcmd1bWVudHMubGVuZ3RoPT09MiYmIXRpKGkpP2k6YSxpPXRpKGkpP2k6ZnVuY3Rpb24oKXt9O2Zvcih2YXIgbD10aGlzLl9wcml2YXRlLmN5LHU9bj1adChuKT90aGlzLmZpbHRlcihuKTpuLGg9W10sZj1bXSxkPXt9LHA9e30sbT17fSxnPTAseSx2PXRoaXMuYnlHcm91cCgpLHg9di5ub2RlcyxiPXYuZWRnZXMsdz0wO3c8dS5sZW5ndGg7dysrKXt2YXIgXz11W3ddLFQ9Xy5pZCgpO18uaXNOb2RlKCkmJihoLnVuc2hpZnQoXyksZS5iZnMmJihtW1RdPSEwLGYucHVzaChfKSkscFtUXT0wKX1mb3IodmFyIEU9byhmdW5jdGlvbigpe3ZhciBSPWUuYmZzP2guc2hpZnQoKTpoLnBvcCgpLFM9Ui5pZCgpO2lmKGUuZGZzKXtpZihtW1NdKXJldHVybiJjb250aW51ZSI7bVtTXT0hMCxmLnB1c2goUil9dmFyIE89cFtTXSxOPWRbU10sUD1OIT1udWxsP04uc291cmNlKCk6bnVsbCxGPU4hPW51bGw/Ti50YXJnZXQoKTpudWxsLEI9Tj09bnVsbD92b2lkIDA6Ui5zYW1lKFApP0ZbMF06UFswXSwkPXZvaWQgMDtpZigkPWkoUixOLEIsZysrLE8pLCQ9PT0hMClyZXR1cm4geT1SLCJicmVhayI7aWYoJD09PSExKXJldHVybiJicmVhayI7Zm9yKHZhciB6PVIuY29ubmVjdGVkRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24oUSl7cmV0dXJuKCFhfHxRLnNvdXJjZSgpLnNhbWUoUikpJiZiLmhhcyhRKX0pLFc9MDtXPHoubGVuZ3RoO1crKyl7dmFyIGo9eltXXSxLPWouY29ubmVjdGVkTm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oUSl7cmV0dXJuIVEuc2FtZShSKSYmeC5oYXMoUSl9KSxpZT1LLmlkKCk7Sy5sZW5ndGghPT0wJiYhbVtpZV0mJihLPUtbMF0saC5wdXNoKEspLGUuYmZzJiYobVtpZV09ITAsZi5wdXNoKEspKSxkW2llXT1qLHBbaWVdPXBbU10rMSl9fSwiX2xvb3AiKTtoLmxlbmd0aCE9PTA7KXt2YXIgTD1FKCk7aWYoTCE9PSJjb250aW51ZSImJkw9PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgQz1sLmNvbGxlY3Rpb24oKSxBPTA7QTxmLmxlbmd0aDtBKyspe3ZhciBJPWZbQV0sRD1kW0kuaWQoKV07RCE9bnVsbCYmQy5wdXNoKEQpLEMucHVzaChJKX1yZXR1cm57cGF0aDpsLmNvbGxlY3Rpb24oQyksZm91bmQ6bC5jb2xsZWN0aW9uKHkpfX0sInNlYXJjaEZuIil9LCJkZWZpbmVTZWFyY2giKSxIeD17YnJlYWR0aEZpcnN0U2VhcmNoOnpwZSh7YmZzOiEwfSksZGVwdGhGaXJzdFNlYXJjaDp6cGUoe2RmczohMH0pfTtIeC5iZnM9SHguYnJlYWR0aEZpcnN0U2VhcmNoO0h4LmRmcz1IeC5kZXB0aEZpcnN0U2VhcmNoO2hqZT1tWGUoZnVuY3Rpb24odCxlKXsoZnVuY3Rpb24oKXt2YXIgcixuLGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHY7aT1NYXRoLmZsb29yLGQ9TWF0aC5taW4sbj1vKGZ1bmN0aW9uKHgsYil7cmV0dXJuIHg8Yj8tMTp4PmI/MTowfSwiZGVmYXVsdENtcCIpLGY9byhmdW5jdGlvbih4LGIsdyxfLFQpe3ZhciBFO2lmKHc9PW51bGwmJih3PTApLFQ9PW51bGwmJihUPW4pLHc8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKF89PW51bGwmJihfPXgubGVuZ3RoKTt3PF87KUU9aSgodytfKS8yKSxUKGIseFtFXSk8MD9fPUU6dz1FKzE7cmV0dXJuW10uc3BsaWNlLmFwcGx5KHgsW3csdy13XS5jb25jYXQoYikpLGJ9LCJpbnNvcnQiKSxsPW8oZnVuY3Rpb24oeCxiLHcpe3JldHVybiB3PT1udWxsJiYodz1uKSx4LnB1c2goYikseSh4LDAseC5sZW5ndGgtMSx3KX0sImhlYXBwdXNoIikscz1vKGZ1bmN0aW9uKHgsYil7dmFyIHcsXztyZXR1cm4gYj09bnVsbCYmKGI9biksdz14LnBvcCgpLHgubGVuZ3RoPyhfPXhbMF0seFswXT13LHYoeCwwLGIpKTpfPXcsX30sImhlYXBwb3AiKSxoPW8oZnVuY3Rpb24oeCxiLHcpe3ZhciBfO3JldHVybiB3PT1udWxsJiYodz1uKSxfPXhbMF0seFswXT1iLHYoeCwwLHcpLF99LCJoZWFwcmVwbGFjZSIpLHU9byhmdW5jdGlvbih4LGIsdyl7dmFyIF87cmV0dXJuIHc9PW51bGwmJih3PW4pLHgubGVuZ3RoJiZ3KHhbMF0sYik8MCYmKF89W3hbMF0sYl0sYj1fWzBdLHhbMF09X1sxXSx2KHgsMCx3KSksYn0sImhlYXBwdXNocG9wIiksYT1vKGZ1bmN0aW9uKHgsYil7dmFyIHcsXyxULEUsTCxDO2ZvcihiPT1udWxsJiYoYj1uKSxFPWZ1bmN0aW9uKCl7Qz1bXTtmb3IodmFyIEE9MCxJPWkoeC5sZW5ndGgvMik7MDw9ST9BPEk6QT5JOzA8PUk/QSsrOkEtLSlDLnB1c2goQSk7cmV0dXJuIEN9LmFwcGx5KHRoaXMpLnJldmVyc2UoKSxMPVtdLF89MCxUPUUubGVuZ3RoO188VDtfKyspdz1FW19dLEwucHVzaCh2KHgsdyxiKSk7cmV0dXJuIEx9LCJoZWFwaWZ5IiksZz1vKGZ1bmN0aW9uKHgsYix3KXt2YXIgXztpZih3PT1udWxsJiYodz1uKSxfPXguaW5kZXhPZihiKSxfIT09LTEpcmV0dXJuIHkoeCwwLF8sdyksdih4LF8sdyl9LCJ1cGRhdGVJdGVtIikscD1vKGZ1bmN0aW9uKHgsYix3KXt2YXIgXyxULEUsTCxDO2lmKHc9PW51bGwmJih3PW4pLFQ9eC5zbGljZSgwLGIpLCFULmxlbmd0aClyZXR1cm4gVDtmb3IoYShULHcpLEM9eC5zbGljZShiKSxFPTAsTD1DLmxlbmd0aDtFPEw7RSsrKV89Q1tFXSx1KFQsXyx3KTtyZXR1cm4gVC5zb3J0KHcpLnJldmVyc2UoKX0sIm5sYXJnZXN0IiksbT1vKGZ1bmN0aW9uKHgsYix3KXt2YXIgXyxULEUsTCxDLEEsSSxELGs7aWYodz09bnVsbCYmKHc9biksYioxMDw9eC5sZW5ndGgpe2lmKEU9eC5zbGljZSgwLGIpLnNvcnQodyksIUUubGVuZ3RoKXJldHVybiBFO2ZvcihUPUVbRS5sZW5ndGgtMV0sST14LnNsaWNlKGIpLEw9MCxBPUkubGVuZ3RoO0w8QTtMKyspXz1JW0xdLHcoXyxUKTwwJiYoZihFLF8sMCxudWxsLHcpLEUucG9wKCksVD1FW0UubGVuZ3RoLTFdKTtyZXR1cm4gRX1mb3IoYSh4LHcpLGs9W10sQz0wLEQ9ZChiLHgubGVuZ3RoKTswPD1EP0M8RDpDPkQ7MDw9RD8rK0M6LS1DKWsucHVzaChzKHgsdykpO3JldHVybiBrfSwibnNtYWxsZXN0IikseT1vKGZ1bmN0aW9uKHgsYix3LF8pe3ZhciBULEUsTDtmb3IoXz09bnVsbCYmKF89biksVD14W3ddO3c+Yjspe2lmKEw9dy0xPj4xLEU9eFtMXSxfKFQsRSk8MCl7eFt3XT1FLHc9TDtjb250aW51ZX1icmVha31yZXR1cm4geFt3XT1UfSwiX3NpZnRkb3duIiksdj1vKGZ1bmN0aW9uKHgsYix3KXt2YXIgXyxULEUsTCxDO2Zvcih3PT1udWxsJiYodz1uKSxUPXgubGVuZ3RoLEM9YixFPXhbYl0sXz0yKmIrMTtfPFQ7KUw9XysxLEw8VCYmISh3KHhbX10seFtMXSk8MCkmJihfPUwpLHhbYl09eFtfXSxiPV8sXz0yKmIrMTtyZXR1cm4geFtiXT1FLHkoeCxDLGIsdyl9LCJfc2lmdHVwIikscj1mdW5jdGlvbigpe3gucHVzaD1sLHgucG9wPXMseC5yZXBsYWNlPWgseC5wdXNocG9wPXUseC5oZWFwaWZ5PWEseC51cGRhdGVJdGVtPWcseC5ubGFyZ2VzdD1wLHgubnNtYWxsZXN0PW07ZnVuY3Rpb24geChiKXt0aGlzLmNtcD1iPz9uLHRoaXMubm9kZXM9W119cmV0dXJuIG8oeCwiSGVhcCIpLHgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYil7cmV0dXJuIGwodGhpcy5ub2RlcyxiLHRoaXMuY21wKX0seC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5ub2Rlcyx0aGlzLmNtcCl9LHgucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0seC5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubm9kZXMuaW5kZXhPZihiKSE9PS0xfSx4LnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKGIpe3JldHVybiBoKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLnB1c2hwb3A9ZnVuY3Rpb24oYil7cmV0dXJuIHUodGhpcy5ub2RlcyxiLHRoaXMuY21wKX0seC5wcm90b3R5cGUuaGVhcGlmeT1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMubm9kZXMsdGhpcy5jbXApfSx4LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKGIpe3JldHVybiBnKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LHgucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RoPT09MH0seC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aH0seC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gYj1uZXcgeCxiLm5vZGVzPXRoaXMubm9kZXMuc2xpY2UoMCksYn0seC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSx4LnByb3RvdHlwZS5pbnNlcnQ9eC5wcm90b3R5cGUucHVzaCx4LnByb3RvdHlwZS50b3A9eC5wcm90b3R5cGUucGVlayx4LnByb3RvdHlwZS5mcm9udD14LnByb3RvdHlwZS5wZWVrLHgucHJvdG90eXBlLmhhcz14LnByb3RvdHlwZS5jb250YWlucyx4LnByb3RvdHlwZS5jb3B5PXgucHJvdG90eXBlLmNsb25lLHh9KCksZnVuY3Rpb24oeCxiKXtyZXR1cm4gdC5leHBvcnRzPWIoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiByfSl9KS5jYWxsKEl4KX0pLHRiPWhqZSxmamU9d2Eoe3Jvb3Q6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGRpcmVjdGVkOiExfSksZGplPXtkaWprc3RyYTpvKGZ1bmN0aW9uKGUpe2lmKCFWcihlKSl7dmFyIHI9YXJndW1lbnRzO2U9e3Jvb3Q6clswXSx3ZWlnaHQ6clsxXSxkaXJlY3RlZDpyWzJdfX12YXIgbj1mamUoZSksaT1uLnJvb3QsYT1uLndlaWdodCxzPW4uZGlyZWN0ZWQsbD10aGlzLHU9YSxoPVp0KGkpP3RoaXMuZmlsdGVyKGkpWzBdOmlbMF0sZj17fSxkPXt9LHA9e30sbT10aGlzLmJ5R3JvdXAoKSxnPW0ubm9kZXMseT1tLmVkZ2VzO3kudW5tZXJnZUJ5KGZ1bmN0aW9uKE8pe3JldHVybiBPLmlzTG9vcCgpfSk7Zm9yKHZhciB2PW8oZnVuY3Rpb24oTil7cmV0dXJuIGZbTi5pZCgpXX0sImdldERpc3QiKSx4PW8oZnVuY3Rpb24oTixQKXtmW04uaWQoKV09UCxiLnVwZGF0ZUl0ZW0oTil9LCJzZXREaXN0IiksYj1uZXcgdGIoZnVuY3Rpb24oTyxOKXtyZXR1cm4gdihPKS12KE4pfSksdz0wO3c8Zy5sZW5ndGg7dysrKXt2YXIgXz1nW3ddO2ZbXy5pZCgpXT1fLnNhbWUoaCk/MDoxLzAsYi5wdXNoKF8pfWZvcih2YXIgVD1vKGZ1bmN0aW9uKE4sUCl7Zm9yKHZhciBGPShzP04uZWRnZXNUbyhQKTpOLmVkZ2VzV2l0aChQKSkuaW50ZXJzZWN0KHkpLEI9MS8wLCQsej0wO3o8Ri5sZW5ndGg7eisrKXt2YXIgVz1GW3pdLGo9dShXKTsoajxCfHwhJCkmJihCPWosJD1XKX1yZXR1cm57ZWRnZTokLGRpc3Q6Qn19LCJkaXN0QmV0d2VlbiIpO2Iuc2l6ZSgpPjA7KXt2YXIgRT1iLnBvcCgpLEw9dihFKSxDPUUuaWQoKTtpZihwW0NdPUwsTCE9PTEvMClmb3IodmFyIEE9RS5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QoZyksST0wO0k8QS5sZW5ndGg7SSsrKXt2YXIgRD1BW0ldLGs9RC5pZCgpLFI9VChFLEQpLFM9TCtSLmRpc3Q7Uzx2KEQpJiYoeChELFMpLGRba109e25vZGU6RSxlZGdlOlIuZWRnZX0pfX1yZXR1cm57ZGlzdGFuY2VUbzpvKGZ1bmN0aW9uKE4pe3ZhciBQPVp0KE4pP2cuZmlsdGVyKE4pWzBdOk5bMF07cmV0dXJuIHBbUC5pZCgpXX0sImRpc3RhbmNlVG8iKSxwYXRoVG86byhmdW5jdGlvbihOKXt2YXIgUD1adChOKT9nLmZpbHRlcihOKVswXTpOWzBdLEY9W10sQj1QLCQ9Qi5pZCgpO2lmKFAubGVuZ3RoPjApZm9yKEYudW5zaGlmdChQKTtkWyRdOyl7dmFyIHo9ZFskXTtGLnVuc2hpZnQoei5lZGdlKSxGLnVuc2hpZnQoei5ub2RlKSxCPXoubm9kZSwkPUIuaWQoKX1yZXR1cm4gbC5zcGF3bihGKX0sInBhdGhUbyIpfX0sImRpamtzdHJhIil9LHBqZT17a3J1c2thbDpvKGZ1bmN0aW9uKGUpe2U9ZXx8ZnVuY3Rpb24odyl7cmV0dXJuIDF9O2Zvcih2YXIgcj10aGlzLmJ5R3JvdXAoKSxuPXIubm9kZXMsaT1yLmVkZ2VzLGE9bi5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uLHU9byhmdW5jdGlvbihfKXtmb3IodmFyIFQ9MDtUPHMubGVuZ3RoO1QrKyl7dmFyIEU9c1tUXTtpZihFLmhhcyhfKSlyZXR1cm4gVH19LCJmaW5kU2V0SW5kZXgiKSxoPTA7aDxhO2grKylzW2hdPXRoaXMuc3Bhd24obltoXSk7Zm9yKHZhciBmPWkuc29ydChmdW5jdGlvbih3LF8pe3JldHVybiBlKHcpLWUoXyl9KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWZbZF0sbT1wLnNvdXJjZSgpWzBdLGc9cC50YXJnZXQoKVswXSx5PXUobSksdj11KGcpLHg9c1t5XSxiPXNbdl07eSE9PXYmJihsLm1lcmdlKHApLHgubWVyZ2UoYikscy5zcGxpY2UodiwxKSl9cmV0dXJuIGx9LCJrcnVza2FsIil9LG1qZT13YSh7cm9vdDpudWxsLGdvYWw6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGhldXJpc3RpYzpvKGZ1bmN0aW9uKGUpe3JldHVybiAwfSwiaGV1cmlzdGljIiksZGlyZWN0ZWQ6ITF9KSxnamU9e2FTdGFyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpLG49bWplKGUpLGk9bi5yb290LGE9bi5nb2FsLHM9bi5oZXVyaXN0aWMsbD1uLmRpcmVjdGVkLHU9bi53ZWlnaHQ7aT1yLmNvbGxlY3Rpb24oaSlbMF0sYT1yLmNvbGxlY3Rpb24oYSlbMF07dmFyIGg9aS5pZCgpLGY9YS5pZCgpLGQ9e30scD17fSxtPXt9LGc9bmV3IHRiKGZ1bmN0aW9uKCQseil7cmV0dXJuIHBbJC5pZCgpXS1wW3ouaWQoKV19KSx5PW5ldyBmMSx2PXt9LHg9e30sYj1vKGZ1bmN0aW9uKHosVyl7Zy5wdXNoKHopLHkuYWRkKFcpfSwiYWRkVG9PcGVuU2V0IiksdyxfLFQ9byhmdW5jdGlvbigpe3c9Zy5wb3AoKSxfPXcuaWQoKSx5LmRlbGV0ZShfKX0sInBvcEZyb21PcGVuU2V0IiksRT1vKGZ1bmN0aW9uKHope3JldHVybiB5Lmhhcyh6KX0sImlzSW5PcGVuU2V0Iik7YihpLGgpLGRbaF09MCxwW2hdPXMoaSk7Zm9yKHZhciBMPTA7Zy5zaXplKCk+MDspe2lmKFQoKSxMKyssXz09PWYpe2Zvcih2YXIgQz1bXSxBPWEsST1mLEQ9eFtJXTtDLnVuc2hpZnQoQSksRCE9bnVsbCYmQy51bnNoaWZ0KEQpLEE9dltJXSxBIT1udWxsOylJPUEuaWQoKSxEPXhbSV07cmV0dXJue2ZvdW5kOiEwLGRpc3RhbmNlOmRbX10scGF0aDp0aGlzLnNwYXduKEMpLHN0ZXBzOkx9fW1bX109ITA7Zm9yKHZhciBrPXcuX3ByaXZhdGUuZWRnZXMsUj0wO1I8ay5sZW5ndGg7UisrKXt2YXIgUz1rW1JdO2lmKHRoaXMuaGFzRWxlbWVudFdpdGhJZChTLmlkKCkpJiYhKGwmJlMuZGF0YSgic291cmNlIikhPT1fKSl7dmFyIE89Uy5zb3VyY2UoKSxOPVMudGFyZ2V0KCksUD1PLmlkKCkhPT1fP086TixGPVAuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRikmJiFtW0ZdKXt2YXIgQj1kW19dK3UoUyk7aWYoIUUoRikpe2RbRl09QixwW0ZdPUIrcyhQKSxiKFAsRiksdltGXT13LHhbRl09Uztjb250aW51ZX1CPGRbRl0mJihkW0ZdPUIscFtGXT1CK3MoUCksdltGXT13LHhbRl09Uyl9fX19cmV0dXJue2ZvdW5kOiExLGRpc3RhbmNlOnZvaWQgMCxwYXRoOnZvaWQgMCxzdGVwczpMfX0sImFTdGFyIil9LHlqZT13YSh7d2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMX0pLHZqZT17ZmxveWRXYXJzaGFsbDpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj15amUoZSksaT1uLndlaWdodCxhPW4uZGlyZWN0ZWQscz1pLGw9dGhpcy5ieUdyb3VwKCksdT1sLm5vZGVzLGg9bC5lZGdlcyxmPXUubGVuZ3RoLGQ9ZipmLHA9byhmdW5jdGlvbihqKXtyZXR1cm4gdS5pbmRleE9mKGopfSwiaW5kZXhPZiIpLG09byhmdW5jdGlvbihqKXtyZXR1cm4gdVtqXX0sImF0SW5kZXgiKSxnPW5ldyBBcnJheShkKSx5PTA7eTxkO3krKyl7dmFyIHY9eSVmLHg9KHktdikvZjt4PT09dj9nW3ldPTA6Z1t5XT0xLzB9Zm9yKHZhciBiPW5ldyBBcnJheShkKSx3PW5ldyBBcnJheShkKSxfPTA7XzxoLmxlbmd0aDtfKyspe3ZhciBUPWhbX10sRT1ULnNvdXJjZSgpWzBdLEw9VC50YXJnZXQoKVswXTtpZihFIT09TCl7dmFyIEM9cChFKSxBPXAoTCksST1DKmYrQSxEPXMoVCk7aWYoZ1tJXT5EJiYoZ1tJXT1ELGJbSV09QSx3W0ldPVQpLCFhKXt2YXIgaz1BKmYrQzshYSYmZ1trXT5EJiYoZ1trXT1ELGJba109Qyx3W2tdPVQpfX19Zm9yKHZhciBSPTA7UjxmO1IrKylmb3IodmFyIFM9MDtTPGY7UysrKWZvcih2YXIgTz1TKmYrUixOPTA7TjxmO04rKyl7dmFyIFA9UypmK04sRj1SKmYrTjtnW09dK2dbRl08Z1tQXSYmKGdbUF09Z1tPXStnW0ZdLGJbUF09YltPXSl9dmFyIEI9byhmdW5jdGlvbihqKXtyZXR1cm4oWnQoaik/ci5maWx0ZXIoaik6ailbMF19LCJnZXRBcmdFbGUiKSwkPW8oZnVuY3Rpb24oail7cmV0dXJuIHAoQihqKSl9LCJpbmRleE9mQXJnRWxlIiksej17ZGlzdGFuY2U6byhmdW5jdGlvbihqLEspe3ZhciBpZT0kKGopLFE9JChLKTtyZXR1cm4gZ1tpZSpmK1FdfSwiZGlzdGFuY2UiKSxwYXRoOm8oZnVuY3Rpb24oaixLKXt2YXIgaWU9JChqKSxRPSQoSyksZWU9bShpZSk7aWYoaWU9PT1RKXJldHVybiBlZS5jb2xsZWN0aW9uKCk7aWYoYltpZSpmK1FdPT1udWxsKXJldHVybiByLmNvbGxlY3Rpb24oKTt2YXIgSj1yLmNvbGxlY3Rpb24oKSxIPWllLHE7Zm9yKEoubWVyZ2UoZWUpO2llIT09UTspSD1pZSxpZT1iW2llKmYrUV0scT13W0gqZitpZV0sSi5tZXJnZShxKSxKLm1lcmdlKG0oaWUpKTtyZXR1cm4gSn0sInBhdGgiKX07cmV0dXJuIHp9LCJmbG95ZFdhcnNoYWxsIil9LHhqZT13YSh7d2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMSxyb290Om51bGx9KSxiamU9e2JlbGxtYW5Gb3JkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXhqZShlKSxpPW4ud2VpZ2h0LGE9bi5kaXJlY3RlZCxzPW4ucm9vdCxsPWksdT10aGlzLGg9dGhpcy5jeSgpLGY9dGhpcy5ieUdyb3VwKCksZD1mLmVkZ2VzLHA9Zi5ub2RlcyxtPXAubGVuZ3RoLGc9bmV3IFVjLHk9ITEsdj1bXTtzPWguY29sbGVjdGlvbihzKVswXSxkLnVubWVyZ2VCeShmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmlzTG9vcCgpfSk7Zm9yKHZhciB4PWQubGVuZ3RoLGI9byhmdW5jdGlvbihrZSl7dmFyIEZlPWcuZ2V0KGtlLmlkKCkpO3JldHVybiBGZXx8KEZlPXt9LGcuc2V0KGtlLmlkKCksRmUpKSxGZX0sImdldEluZm8iKSx3PW8oZnVuY3Rpb24oa2Upe3JldHVybihadChrZSk/aC4kKGtlKTprZSlbMF19LCJnZXROb2RlRnJvbVRvIiksXz1vKGZ1bmN0aW9uKGtlKXtyZXR1cm4gYih3KGtlKSkuZGlzdH0sImRpc3RhbmNlVG8iKSxUPW8oZnVuY3Rpb24oa2Upe2Zvcih2YXIgRmU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnMsQmU9dyhrZSksVmU9W10sR2U9QmU7Oyl7aWYoR2U9PW51bGwpcmV0dXJuIHIuc3Bhd24oKTt2YXIgSGU9YihHZSkseGU9SGUuZWRnZSxYPUhlLnByZWQ7aWYoVmUudW5zaGlmdChHZVswXSksR2Uuc2FtZShGZSkmJlZlLmxlbmd0aD4wKWJyZWFrO3hlIT1udWxsJiZWZS51bnNoaWZ0KHhlKSxHZT1YfXJldHVybiB1LnNwYXduKFZlKX0sInBhdGhUbyIpLEU9MDtFPG07RSsrKXt2YXIgTD1wW0VdLEM9YihMKTtMLnNhbWUocyk/Qy5kaXN0PTA6Qy5kaXN0PTEvMCxDLnByZWQ9bnVsbCxDLmVkZ2U9bnVsbH1mb3IodmFyIEE9ITEsST1vKGZ1bmN0aW9uKGtlLEZlLEJlLFZlLEdlLEhlKXt2YXIgeGU9VmUuZGlzdCtIZTt4ZTxHZS5kaXN0JiYhQmUuc2FtZShWZS5lZGdlKSYmKEdlLmRpc3Q9eGUsR2UucHJlZD1rZSxHZS5lZGdlPUJlLEE9ITApfSwiY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQiKSxEPTE7RDxtO0QrKyl7QT0hMTtmb3IodmFyIGs9MDtrPHg7aysrKXt2YXIgUj1kW2tdLFM9Ui5zb3VyY2UoKSxPPVIudGFyZ2V0KCksTj1sKFIpLFA9YihTKSxGPWIoTyk7SShTLE8sUixQLEYsTiksYXx8SShPLFMsUixGLFAsTil9aWYoIUEpYnJlYWt9aWYoQSlmb3IodmFyIEI9W10sJD0wOyQ8eDskKyspe3ZhciB6PWRbJF0sVz16LnNvdXJjZSgpLGo9ei50YXJnZXQoKSxLPWwoeiksaWU9YihXKS5kaXN0LFE9YihqKS5kaXN0O2lmKGllK0s8UXx8IWEmJlErSzxpZSlpZih5fHwob24oIkdyYXBoIGNvbnRhaW5zIGEgbmVnYXRpdmUgd2VpZ2h0IGN5Y2xlIGZvciBCZWxsbWFuLUZvcmQiKSx5PSEwKSxlLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyE9PSExKXt2YXIgZWU9W107aWUrSzxRJiZlZS5wdXNoKFcpLCFhJiZRK0s8aWUmJmVlLnB1c2goaik7Zm9yKHZhciBKPWVlLmxlbmd0aCxIPTA7SDxKO0grKyl7dmFyIHE9ZWVbSF0sWj1bcV07Wi5wdXNoKGIocSkuZWRnZSk7Zm9yKHZhciBhZT1iKHEpLnByZWQ7Wi5pbmRleE9mKGFlKT09PS0xOylaLnB1c2goYWUpLFoucHVzaChiKGFlKS5lZGdlKSxhZT1iKGFlKS5wcmVkO1o9Wi5zbGljZShaLmluZGV4T2YoYWUpKTtmb3IodmFyIHVlPVpbMF0uaWQoKSxjZT0wLHRlPTI7dGU8Wi5sZW5ndGg7dGUrPTIpWlt0ZV0uaWQoKTx1ZSYmKHVlPVpbdGVdLmlkKCksY2U9dGUpO1o9Wi5zbGljZShjZSkuY29uY2F0KFouc2xpY2UoMCxjZSkpLFoucHVzaChaWzBdKTt2YXIgRGU9Wi5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5pZCgpfSkuam9pbigiLCIpO0IuaW5kZXhPZihEZSk9PT0tMSYmKHYucHVzaCh1LnNwYXduKFopKSxCLnB1c2goRGUpKX19ZWxzZSBicmVha31yZXR1cm57ZGlzdGFuY2VUbzpfLHBhdGhUbzpULGhhc05lZ2F0aXZlV2VpZ2h0Q3ljbGU6eSxuZWdhdGl2ZVdlaWdodEN5Y2xlczp2fX0sImJlbGxtYW5Gb3JkIil9LHdqZT1NYXRoLnNxcnQoMiksVGplPW8oZnVuY3Rpb24oZSxyLG4pe24ubGVuZ3RoPT09MCYmaGkoIkthcmdlci1TdGVpbiBtdXN0IGJlIHJ1biBvbiBhIGNvbm5lY3RlZCAoc3ViKWdyYXBoIik7Zm9yKHZhciBpPW5bZV0sYT1pWzFdLHM9aVsyXSxsPXJbYV0sdT1yW3NdLGg9bixmPWgubGVuZ3RoLTE7Zj49MDtmLS0pe3ZhciBkPWhbZl0scD1kWzFdLG09ZFsyXTsocltwXT09PWwmJnJbbV09PT11fHxyW3BdPT09dSYmclttXT09PWwpJiZoLnNwbGljZShmLDEpfWZvcih2YXIgZz0wO2c8aC5sZW5ndGg7ZysrKXt2YXIgeT1oW2ddO3lbMV09PT11PyhoW2ddPXkuc2xpY2UoKSxoW2ddWzFdPWwpOnlbMl09PT11JiYoaFtnXT15LnNsaWNlKCksaFtnXVsyXT1sKX1mb3IodmFyIHY9MDt2PHIubGVuZ3RoO3YrKylyW3ZdPT09dSYmKHJbdl09bCk7cmV0dXJuIGh9LCJjb2xsYXBzZSIpLENQPW8oZnVuY3Rpb24oZSxyLG4saSl7Zm9yKDtuPmk7KXt2YXIgYT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqci5sZW5ndGgpO3I9VGplKGEsZSxyKSxuLS19cmV0dXJuIHJ9LCJjb250cmFjdFVudGlsIiksa2plPXtrYXJnZXJTdGVpbjpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXRoaXMuYnlHcm91cCgpLG49ci5ub2RlcyxpPXIuZWRnZXM7aS51bm1lcmdlQnkoZnVuY3Rpb24oRil7cmV0dXJuIEYuaXNMb29wKCl9KTt2YXIgYT1uLmxlbmd0aCxzPWkubGVuZ3RoLGw9TWF0aC5jZWlsKE1hdGgucG93KE1hdGgubG9nKGEpL01hdGguTE4yLDIpKSx1PU1hdGguZmxvb3IoYS93amUpO2lmKGE8Mil7aGkoIkF0IGxlYXN0IDIgbm9kZXMgYXJlIHJlcXVpcmVkIGZvciBLYXJnZXItU3RlaW4gYWxnb3JpdGhtIik7cmV0dXJufWZvcih2YXIgaD1bXSxmPTA7ZjxzO2YrKyl7dmFyIGQ9aVtmXTtoLnB1c2goW2Ysbi5pbmRleE9mKGQuc291cmNlKCkpLG4uaW5kZXhPZihkLnRhcmdldCgpKV0pfWZvcih2YXIgcD0xLzAsbT1bXSxnPW5ldyBBcnJheShhKSx5PW5ldyBBcnJheShhKSx2PW5ldyBBcnJheShhKSx4PW8oZnVuY3Rpb24oQiwkKXtmb3IodmFyIHo9MDt6PGE7eisrKSRbel09Qlt6XX0sImNvcHlOb2Rlc01hcCIpLGI9MDtiPD1sO2IrKyl7Zm9yKHZhciB3PTA7dzxhO3crKyl5W3ddPXc7dmFyIF89Q1AoeSxoLnNsaWNlKCksYSx1KSxUPV8uc2xpY2UoKTt4KHksdik7dmFyIEU9Q1AoeSxfLHUsMiksTD1DUCh2LFQsdSwyKTtFLmxlbmd0aDw9TC5sZW5ndGgmJkUubGVuZ3RoPHA/KHA9RS5sZW5ndGgsbT1FLHgoeSxnKSk6TC5sZW5ndGg8PUUubGVuZ3RoJiZMLmxlbmd0aDxwJiYocD1MLmxlbmd0aCxtPUwseCh2LGcpKX1mb3IodmFyIEM9dGhpcy5zcGF3bihtLm1hcChmdW5jdGlvbihGKXtyZXR1cm4gaVtGWzBdXX0pKSxBPXRoaXMuc3Bhd24oKSxJPXRoaXMuc3Bhd24oKSxEPWdbMF0saz0wO2s8Zy5sZW5ndGg7aysrKXt2YXIgUj1nW2tdLFM9bltrXTtSPT09RD9BLm1lcmdlKFMpOkkubWVyZ2UoUyl9dmFyIE89byhmdW5jdGlvbihCKXt2YXIgJD1lLnNwYXduKCk7cmV0dXJuIEIuZm9yRWFjaChmdW5jdGlvbih6KXskLm1lcmdlKHopLHouY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFcpe2UuY29udGFpbnMoVykmJiFDLmNvbnRhaW5zKFcpJiYkLm1lcmdlKFcpfSl9KSwkfSwiY29uc3RydWN0Q29tcG9uZW50IiksTj1bTyhBKSxPKEkpXSxQPXtjdXQ6Qyxjb21wb25lbnRzOk4scGFydGl0aW9uMTpBLHBhcnRpdGlvbjI6SX07cmV0dXJuIFB9LCJrYXJnZXJTdGVpbiIpfSxFamU9byhmdW5jdGlvbihlKXtyZXR1cm57eDplLngseTplLnl9fSwiY29weVBvc2l0aW9uIiksTDY9byhmdW5jdGlvbihlLHIsbil7cmV0dXJue3g6ZS54KnIrbi54LHk6ZS55KnIrbi55fX0sIm1vZGVsVG9SZW5kZXJlZFBvc2l0aW9uIiksdWdlPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OihlLngtbi54KS9yLHk6KGUueS1uLnkpL3J9fSwicmVuZGVyZWRUb01vZGVsUG9zaXRpb24iKSxyMT1vKGZ1bmN0aW9uKGUpe3JldHVybnt4OmVbMF0seTplWzFdfX0sImFycmF5MnBvaW50IiksU2plPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmUubGVuZ3RoLGk9MS8wLGE9cjthPG47YSsrKXt2YXIgcz1lW2FdO2lzRmluaXRlKHMpJiYoaT1NYXRoLm1pbihzLGkpKX1yZXR1cm4gaX0sIm1pbiIpLENqZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPS0xLzAsYT1yO2E8bjthKyspe3ZhciBzPWVbYV07aXNGaW5pdGUocykmJihpPU1hdGgubWF4KHMsaSkpfXJldHVybiBpfSwibWF4IiksQWplPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmUubGVuZ3RoLGk9MCxhPTAscz1yO3M8bjtzKyspe3ZhciBsPWVbc107aXNGaW5pdGUobCkmJihpKz1sLGErKyl9cmV0dXJuIGkvYX0sIm1lYW4iKSxfamU9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxhPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxzPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMDtpP2U9ZS5zbGljZShyLG4pOihuPGUubGVuZ3RoJiZlLnNwbGljZShuLGUubGVuZ3RoLW4pLHI+MCYmZS5zcGxpY2UoMCxyKSk7Zm9yKHZhciBsPTAsdT1lLmxlbmd0aC0xO3U+PTA7dS0tKXt2YXIgaD1lW3VdO3M/aXNGaW5pdGUoaCl8fChlW3VdPS0xLzAsbCsrKTplLnNwbGljZSh1LDEpfWEmJmUuc29ydChmdW5jdGlvbihwLG0pe3JldHVybiBwLW19KTt2YXIgZj1lLmxlbmd0aCxkPU1hdGguZmxvb3IoZi8yKTtyZXR1cm4gZiUyIT09MD9lW2QrMStsXTooZVtkLTErbF0rZVtkK2xdKS8yfSwibWVkaWFuIiksTGplPW8oZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguUEkqZS8xODB9LCJkZWcycmFkIiksWEU9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmF0YW4yKHIsZSktTWF0aC5QSS8yfSwiZ2V0QW5nbGVGcm9tRGlzcCIpLHNCPU1hdGgubG9nMnx8ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGgubG9nKDIpfSxoZ2U9byhmdW5jdGlvbihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9LCJzaWdudW0iKSxHMD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguc3FydChNMChlLHIpKX0sImRpc3QiKSxNMD1vKGZ1bmN0aW9uKGUscil7dmFyIG49ci54LWUueCxpPXIueS1lLnk7cmV0dXJuIG4qbitpKml9LCJzcWRpc3QiKSxEamU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKW4rPWVbaV07Zm9yKHZhciBhPTA7YTxyO2ErKyllW2FdPWVbYV0vbjtyZXR1cm4gZX0sImluUGxhY2VTdW1Ob3JtYWxpemUiKSxpYT1vKGZ1bmN0aW9uKGUscixuLGkpe3JldHVybigxLWkpKigxLWkpKmUrMiooMS1pKSppKnIraSppKm59LCJxYmV6aWVyQXQiKSxpMT1vKGZ1bmN0aW9uKGUscixuLGkpe3JldHVybnt4OmlhKGUueCxyLngsbi54LGkpLHk6aWEoZS55LHIueSxuLnksaSl9fSwicWJlemllclB0QXQiKSxOamU9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT17eDpyLngtZS54LHk6ci55LWUueX0scz1HMChlLHIpLGw9e3g6YS54L3MseTphLnkvc307cmV0dXJuIG49bj8/MCxpPWk/P24qcyx7eDplLngrbC54KmkseTplLnkrbC55Kml9fSwibGluZUF0IiksV3g9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4obixyKSl9LCJib3VuZCIpLCRzPW8oZnVuY3Rpb24oZSl7aWYoZT09bnVsbClyZXR1cm57eDE6MS8wLHkxOjEvMCx4MjotMS8wLHkyOi0xLzAsdzowLGg6MH07aWYoZS54MSE9bnVsbCYmZS55MSE9bnVsbCl7aWYoZS54MiE9bnVsbCYmZS55MiE9bnVsbCYmZS54Mj49ZS54MSYmZS55Mj49ZS55MSlyZXR1cm57eDE6ZS54MSx5MTplLnkxLHgyOmUueDIseTI6ZS55Mix3OmUueDItZS54MSxoOmUueTItZS55MX07aWYoZS53IT1udWxsJiZlLmghPW51bGwmJmUudz49MCYmZS5oPj0wKXJldHVybnt4MTplLngxLHkxOmUueTEseDI6ZS54MStlLncseTI6ZS55MStlLmgsdzplLncsaDplLmh9fX0sIm1ha2VCb3VuZGluZ0JveCIpLFJqZT1vKGZ1bmN0aW9uKGUpe3JldHVybnt4MTplLngxLHgyOmUueDIsdzplLncseTE6ZS55MSx5MjplLnkyLGg6ZS5ofX0sImNvcHlCb3VuZGluZ0JveCIpLE1qZT1vKGZ1bmN0aW9uKGUpe2UueDE9MS8wLGUueTE9MS8wLGUueDI9LTEvMCxlLnkyPS0xLzAsZS53PTAsZS5oPTB9LCJjbGVhckJvdW5kaW5nQm94IiksSWplPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4MTplLngxK3IseDI6ZS54MityLHkxOmUueTErbix5MjplLnkyK24sdzplLncsaDplLmh9fSwic2hpZnRCb3VuZGluZ0JveCIpLGZnZT1vKGZ1bmN0aW9uKGUscil7ZS54MT1NYXRoLm1pbihlLngxLHIueDEpLGUueDI9TWF0aC5tYXgoZS54MixyLngyKSxlLnc9ZS54Mi1lLngxLGUueTE9TWF0aC5taW4oZS55MSxyLnkxKSxlLnkyPU1hdGgubWF4KGUueTIsci55MiksZS5oPWUueTItZS55MX0sInVwZGF0ZUJvdW5kaW5nQm94IiksT2plPW8oZnVuY3Rpb24oZSxyLG4pe2UueDE9TWF0aC5taW4oZS54MSxyKSxlLngyPU1hdGgubWF4KGUueDIsciksZS53PWUueDItZS54MSxlLnkxPU1hdGgubWluKGUueTEsbiksZS55Mj1NYXRoLm1heChlLnkyLG4pLGUuaD1lLnkyLWUueTF9LCJleHBhbmRCb3VuZGluZ0JveEJ5UG9pbnQiKSxhNj1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBlLngxLT1yLGUueDIrPXIsZS55MS09cixlLnkyKz1yLGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MSxlfSwiZXhwYW5kQm91bmRpbmdCb3giKSxzNj1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpbMF0sbixpLGEscztpZihyLmxlbmd0aD09PTEpbj1pPWE9cz1yWzBdO2Vsc2UgaWYoci5sZW5ndGg9PT0yKW49YT1yWzBdLHM9aT1yWzFdO2Vsc2UgaWYoci5sZW5ndGg9PT00KXt2YXIgbD1VbChyLDQpO249bFswXSxpPWxbMV0sYT1sWzJdLHM9bFszXX1yZXR1cm4gZS54MS09cyxlLngyKz1pLGUueTEtPW4sZS55Mis9YSxlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEsZX0sImV4cGFuZEJvdW5kaW5nQm94U2lkZXMiKSxHcGU9byhmdW5jdGlvbihlLHIpe2UueDE9ci54MSxlLnkxPXIueTEsZS54Mj1yLngyLGUueTI9ci55MixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTF9LCJhc3NpZ25Cb3VuZGluZ0JveCIpLG9CPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hKGUueDE+ci54Mnx8ci54MT5lLngyfHxlLngyPHIueDF8fHIueDI8ZS54MXx8ZS55MjxyLnkxfHxyLnkyPGUueTF8fGUueTE+ci55Mnx8ci55MT5lLnkyKX0sImJvdW5kaW5nQm94ZXNJbnRlcnNlY3QiKSxjMT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZS54MTw9ciYmcjw9ZS54MiYmZS55MTw9biYmbjw9ZS55Mn0sImluQm91bmRpbmdCb3giKSxQamU9byhmdW5jdGlvbihlLHIpe3JldHVybiBjMShlLHIueCxyLnkpfSwicG9pbnRJbkJvdW5kaW5nQm94IiksZGdlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gYzEoZSxyLngxLHIueTEpJiZjMShlLHIueDIsci55Mil9LCJib3VuZGluZ0JveEluQm91bmRpbmdCb3giKSxwZ2U9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXt2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjcmJmFyZ3VtZW50c1s3XSE9PXZvaWQgMD9hcmd1bWVudHNbN106ImF1dG8iLGg9dT09PSJhdXRvIj8kMChhLHMpOnUsZj1hLzIsZD1zLzI7aD1NYXRoLm1pbihoLGYsZCk7dmFyIHA9aCE9PWYsbT1oIT09ZCxnO2lmKHApe3ZhciB5PW4tZitoLWwsdj1pLWQtbCx4PW4rZi1oK2wsYj12O2lmKGc9VGYoZSxyLG4saSx5LHYseCxiLCExKSxnLmxlbmd0aD4wKXJldHVybiBnfWlmKG0pe3ZhciB3PW4rZitsLF89aS1kK2gtbCxUPXcsRT1pK2QtaCtsO2lmKGc9VGYoZSxyLG4saSx3LF8sVCxFLCExKSxnLmxlbmd0aD4wKXJldHVybiBnfWlmKHApe3ZhciBMPW4tZitoLWwsQz1pK2QrbCxBPW4rZi1oK2wsST1DO2lmKGc9VGYoZSxyLG4saSxMLEMsQSxJLCExKSxnLmxlbmd0aD4wKXJldHVybiBnfWlmKG0pe3ZhciBEPW4tZi1sLGs9aS1kK2gtbCxSPUQsUz1pK2QtaCtsO2lmKGc9VGYoZSxyLG4saSxELGssUixTLCExKSxnLmxlbmd0aD4wKXJldHVybiBnfXZhciBPO3t2YXIgTj1uLWYraCxQPWktZCtoO2lmKE89UHgoZSxyLG4saSxOLFAsaCtsKSxPLmxlbmd0aD4wJiZPWzBdPD1OJiZPWzFdPD1QKXJldHVybltPWzBdLE9bMV1dfXt2YXIgRj1uK2YtaCxCPWktZCtoO2lmKE89UHgoZSxyLG4saSxGLEIsaCtsKSxPLmxlbmd0aD4wJiZPWzBdPj1GJiZPWzFdPD1CKXJldHVybltPWzBdLE9bMV1dfXt2YXIgJD1uK2YtaCx6PWkrZC1oO2lmKE89UHgoZSxyLG4saSwkLHosaCtsKSxPLmxlbmd0aD4wJiZPWzBdPj0kJiZPWzFdPj16KXJldHVybltPWzBdLE9bMV1dfXt2YXIgVz1uLWYraCxqPWkrZC1oO2lmKE89UHgoZSxyLG4saSxXLGosaCtsKSxPLmxlbmd0aD4wJiZPWzBdPD1XJiZPWzFdPj1qKXJldHVybltPWzBdLE9bMV1dfXJldHVybltdfSwicm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lIiksQmplPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7dmFyIHU9bCxoPU1hdGgubWluKG4sYSksZj1NYXRoLm1heChuLGEpLGQ9TWF0aC5taW4oaSxzKSxwPU1hdGgubWF4KGkscyk7cmV0dXJuIGgtdTw9ZSYmZTw9Zit1JiZkLXU8PXImJnI8PXArdX0sImluTGluZVZpY2luaXR5IiksRmplPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPXt4MTpNYXRoLm1pbihuLGwsYSktaCx4MjpNYXRoLm1heChuLGwsYSkraCx5MTpNYXRoLm1pbihpLHUscyktaCx5MjpNYXRoLm1heChpLHUscykraH07cmV0dXJuIShlPGYueDF8fGU+Zi54Mnx8cjxmLnkxfHxyPmYueTIpfSwiaW5CZXppZXJWaWNpbml0eSIpLHpqZT1vKGZ1bmN0aW9uKGUscixuLGkpe24tPWk7dmFyIGE9cipyLTQqZSpuO2lmKGE8MClyZXR1cm5bXTt2YXIgcz1NYXRoLnNxcnQoYSksbD0yKmUsdT0oLXIrcykvbCxoPSgtci1zKS9sO3JldHVyblt1LGhdfSwic29sdmVRdWFkcmF0aWMiKSxHamU9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPTFlLTU7ZT09PTAmJihlPXMpLHIvPWUsbi89ZSxpLz1lO3ZhciBsLHUsaCxmLGQscCxtLGc7aWYodT0oMypuLXIqcikvOSxoPS0oMjcqaSkrciooOSpuLTIqKHIqcikpLGgvPTU0LGw9dSp1KnUraCpoLGFbMV09MCxtPXIvMyxsPjApe2Q9aCtNYXRoLnNxcnQobCksZD1kPDA/LU1hdGgucG93KC1kLDEvMyk6TWF0aC5wb3coZCwxLzMpLHA9aC1NYXRoLnNxcnQobCkscD1wPDA/LU1hdGgucG93KC1wLDEvMyk6TWF0aC5wb3cocCwxLzMpLGFbMF09LW0rZCtwLG0rPShkK3ApLzIsYVs0XT1hWzJdPS1tLG09TWF0aC5zcXJ0KDMpKigtcCtkKS8yLGFbM109bSxhWzVdPS1tO3JldHVybn1pZihhWzVdPWFbM109MCxsPT09MCl7Zz1oPDA/LU1hdGgucG93KC1oLDEvMyk6TWF0aC5wb3coaCwxLzMpLGFbMF09LW0rMipnLGFbNF09YVsyXT0tKGcrbSk7cmV0dXJufXU9LXUsZj11KnUqdSxmPU1hdGguYWNvcyhoL01hdGguc3FydChmKSksZz0yKk1hdGguc3FydCh1KSxhWzBdPS1tK2cqTWF0aC5jb3MoZi8zKSxhWzJdPS1tK2cqTWF0aC5jb3MoKGYrMipNYXRoLlBJKS8zKSxhWzRdPS1tK2cqTWF0aC5jb3MoKGYrNCpNYXRoLlBJKS8zKX0sInNvbHZlQ3ViaWMiKSwkamU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPTEqbipuLTQqbiphKzIqbipsKzQqYSphLTQqYSpsK2wqbCtpKmktNCppKnMrMippKnUrNCpzKnMtNCpzKnUrdSp1LGY9MSo5Km4qYS0zKm4qbi0zKm4qbC02KmEqYSszKmEqbCs5Kmkqcy0zKmkqaS0zKmkqdS02KnMqcyszKnMqdSxkPTEqMypuKm4tNipuKmErbipsLW4qZSsyKmEqYSsyKmEqZS1sKmUrMyppKmktNippKnMraSp1LWkqcisyKnMqcysyKnMqci11KnIscD0xKm4qYS1uKm4rbiplLWEqZStpKnMtaSppK2kqci1zKnIsbT1bXTtHamUoaCxmLGQscCxtKTtmb3IodmFyIGc9MWUtNyx5PVtdLHY9MDt2PDY7dis9MilNYXRoLmFicyhtW3YrMV0pPGcmJm1bdl0+PTAmJm1bdl08PTEmJnkucHVzaChtW3ZdKTt5LnB1c2goMSkseS5wdXNoKDApO2Zvcih2YXIgeD0tMSxiLHcsXyxUPTA7VDx5Lmxlbmd0aDtUKyspYj1NYXRoLnBvdygxLXlbVF0sMikqbisyKigxLXlbVF0pKnlbVF0qYSt5W1RdKnlbVF0qbCx3PU1hdGgucG93KDEteVtUXSwyKSppKzIqKDEteVtUXSkqeVtUXSpzK3lbVF0qeVtUXSp1LF89TWF0aC5wb3coYi1lLDIpK01hdGgucG93KHctciwyKSx4Pj0wP188eCYmKHg9Xyk6eD1fO3JldHVybiB4fSwic3FkaXN0VG9RdWFkcmF0aWNCZXppZXIiKSxWamU9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGw9W2UtbixyLWldLHU9W2EtbixzLWldLGg9dVswXSp1WzBdK3VbMV0qdVsxXSxmPWxbMF0qbFswXStsWzFdKmxbMV0sZD1sWzBdKnVbMF0rbFsxXSp1WzFdLHA9ZCpkL2g7cmV0dXJuIGQ8MD9mOnA+aD8oZS1hKSooZS1hKSsoci1zKSooci1zKTpmLXB9LCJzcWRpc3RUb0Zpbml0ZUxpbmUiKSxHcz1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGksYSxzLGwsdSxoPTAsZj0wO2Y8bi5sZW5ndGgvMjtmKyspaWYoaT1uW2YqMl0sYT1uW2YqMisxXSxmKzE8bi5sZW5ndGgvMj8ocz1uWyhmKzEpKjJdLGw9blsoZisxKSoyKzFdKToocz1uWyhmKzEtbi5sZW5ndGgvMikqMl0sbD1uWyhmKzEtbi5sZW5ndGgvMikqMisxXSksIShpPT1lJiZzPT1lKSlpZihpPj1lJiZlPj1zfHxpPD1lJiZlPD1zKXU9KGUtaSkvKHMtaSkqKGwtYSkrYSx1PnImJmgrKztlbHNlIGNvbnRpbnVlO3JldHVybiBoJTIhPT0wfSwicG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzIiksanU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9bmV3IEFycmF5KG4ubGVuZ3RoKSxkO3VbMF0hPW51bGw/KGQ9TWF0aC5hdGFuKHVbMV0vdVswXSksdVswXTwwP2Q9ZCtNYXRoLlBJLzI6ZD0tZC1NYXRoLlBJLzIpOmQ9dTtmb3IodmFyIHA9TWF0aC5jb3MoLWQpLG09TWF0aC5zaW4oLWQpLGc9MDtnPGYubGVuZ3RoLzI7ZysrKWZbZyoyXT1zLzIqKG5bZyoyXSpwLW5bZyoyKzFdKm0pLGZbZyoyKzFdPWwvMioobltnKjIrMV0qcCtuW2cqMl0qbSksZltnKjJdKz1pLGZbZyoyKzFdKz1hO3ZhciB5O2lmKGg+MCl7dmFyIHY9djYoZiwtaCk7eT15Nih2KX1lbHNlIHk9ZjtyZXR1cm4gR3MoZSxyLHkpfSwicG9pbnRJbnNpZGVQb2x5Z29uIiksVWplPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXtmb3IodmFyIGg9bmV3IEFycmF5KG4ubGVuZ3RoKjIpLGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIGQ9dVtmXTtoW2YqNCswXT1kLnN0YXJ0WCxoW2YqNCsxXT1kLnN0YXJ0WSxoW2YqNCsyXT1kLnN0b3BYLGhbZio0KzNdPWQuc3RvcFk7dmFyIHA9TWF0aC5wb3coZC5jeC1lLDIpK01hdGgucG93KGQuY3ktciwyKTtpZihwPD1NYXRoLnBvdyhkLnJhZGl1cywyKSlyZXR1cm4hMH1yZXR1cm4gR3MoZSxyLGgpfSwicG9pbnRJbnNpZGVSb3VuZFBvbHlnb24iKSx5Nj1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgvMiksbixpLGEscyxsLHUsaCxmLGQ9MDtkPGUubGVuZ3RoLzQ7ZCsrKXtuPWVbZCo0XSxpPWVbZCo0KzFdLGE9ZVtkKjQrMl0scz1lW2QqNCszXSxkPGUubGVuZ3RoLzQtMT8obD1lWyhkKzEpKjRdLHU9ZVsoZCsxKSo0KzFdLGg9ZVsoZCsxKSo0KzJdLGY9ZVsoZCsxKSo0KzNdKToobD1lWzBdLHU9ZVsxXSxoPWVbMl0sZj1lWzNdKTt2YXIgcD1UZihuLGksYSxzLGwsdSxoLGYsITApO3JbZCoyXT1wWzBdLHJbZCoyKzFdPXBbMV19cmV0dXJuIHJ9LCJqb2luTGluZXMiKSx2Nj1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlLmxlbmd0aCoyKSxpLGEscyxsLHU9MDt1PGUubGVuZ3RoLzI7dSsrKXtpPWVbdSoyXSxhPWVbdSoyKzFdLHU8ZS5sZW5ndGgvMi0xPyhzPWVbKHUrMSkqMl0sbD1lWyh1KzEpKjIrMV0pOihzPWVbMF0sbD1lWzFdKTt2YXIgaD1sLWEsZj0tKHMtaSksZD1NYXRoLnNxcnQoaCpoK2YqZikscD1oL2QsbT1mL2Q7blt1KjRdPWkrcCpyLG5bdSo0KzFdPWErbSpyLG5bdSo0KzJdPXMrcCpyLG5bdSo0KzNdPWwrbSpyfXJldHVybiBufSwiZXhwYW5kUG9seWdvbiIpLEhqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1uLWUsdT1pLXI7bC89YSx1Lz1zO3ZhciBoPU1hdGguc3FydChsKmwrdSp1KSxmPWgtMTtpZihmPDApcmV0dXJuW107dmFyIGQ9Zi9oO3JldHVyblsobi1lKSpkK2UsKGktcikqZCtyXX0sImludGVyc2VjdExpbmVFbGxpcHNlIiksQjA9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXtyZXR1cm4gZS09YSxyLT1zLGUvPW4vMitsLHIvPWkvMitsLGUqZStyKnI8PTF9LCJjaGVja0luRWxsaXBzZSIpLFB4PW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7dmFyIHU9W24tZSxpLXJdLGg9W2UtYSxyLXNdLGY9dVswXSp1WzBdK3VbMV0qdVsxXSxkPTIqKGhbMF0qdVswXStoWzFdKnVbMV0pLHA9aFswXSpoWzBdK2hbMV0qaFsxXS1sKmwsbT1kKmQtNCpmKnA7aWYobTwwKXJldHVybltdO3ZhciBnPSgtZCtNYXRoLnNxcnQobSkpLygyKmYpLHk9KC1kLU1hdGguc3FydChtKSkvKDIqZiksdj1NYXRoLm1pbihnLHkpLHg9TWF0aC5tYXgoZyx5KSxiPVtdO2lmKHY+PTAmJnY8PTEmJmIucHVzaCh2KSx4Pj0wJiZ4PD0xJiZiLnB1c2goeCksYi5sZW5ndGg9PT0wKXJldHVybltdO3ZhciB3PWJbMF0qdVswXStlLF89YlswXSp1WzFdK3I7aWYoYi5sZW5ndGg+MSl7aWYoYlswXT09YlsxXSlyZXR1cm5bdyxfXTt2YXIgVD1iWzFdKnVbMF0rZSxFPWJbMV0qdVsxXStyO3JldHVyblt3LF8sVCxFXX1lbHNlIHJldHVyblt3LF9dfSwiaW50ZXJzZWN0TGluZUNpcmNsZSIpLEFQPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPD1lJiZlPD1ufHxuPD1lJiZlPD1yP2U6ZTw9ciYmcjw9bnx8bjw9ciYmcjw9ZT9yOm59LCJtaWRPZlRocmVlIiksVGY9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9ZS1hLGQ9bi1lLHA9bC1hLG09ci1zLGc9aS1yLHk9dS1zLHY9cCptLXkqZix4PWQqbS1nKmYsYj15KmQtcCpnO2lmKGIhPT0wKXt2YXIgdz12L2IsXz14L2IsVD0uMDAxLEU9MC1ULEw9MStUO3JldHVybiBFPD13JiZ3PD1MJiZFPD1fJiZfPD1MP1tlK3cqZCxyK3cqZ106aD9bZSt3KmQscit3KmddOltdfWVsc2UgcmV0dXJuIHY9PT0wfHx4PT09MD9BUChlLG4sbCk9PT1sP1tsLHVdOkFQKGUsbixhKT09PWE/W2Esc106QVAoYSxsLG4pPT09bj9bbixpXTpbXTpbXX0sImZpbml0ZUxpbmVzSW50ZXJzZWN0IiksWXg9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPVtdLGYsZD1uZXcgQXJyYXkobi5sZW5ndGgpLHA9ITA7cz09bnVsbCYmKHA9ITEpO3ZhciBtO2lmKHApe2Zvcih2YXIgZz0wO2c8ZC5sZW5ndGgvMjtnKyspZFtnKjJdPW5bZyoyXSpzK2ksZFtnKjIrMV09bltnKjIrMV0qbCthO2lmKHU+MCl7dmFyIHk9djYoZCwtdSk7bT15Nih5KX1lbHNlIG09ZH1lbHNlIG09bjtmb3IodmFyIHYseCxiLHcsXz0wO188bS5sZW5ndGgvMjtfKyspdj1tW18qMl0seD1tW18qMisxXSxfPG0ubGVuZ3RoLzItMT8oYj1tWyhfKzEpKjJdLHc9bVsoXysxKSoyKzFdKTooYj1tWzBdLHc9bVsxXSksZj1UZihlLHIsaSxhLHYseCxiLHcpLGYubGVuZ3RoIT09MCYmaC5wdXNoKGZbMF0sZlsxXSk7cmV0dXJuIGh9LCJwb2x5Z29uSW50ZXJzZWN0TGluZSIpLFdqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj1bXSxkLHA9bmV3IEFycmF5KG4ubGVuZ3RoKjIpO2guZm9yRWFjaChmdW5jdGlvbihiLHcpe3c9PT0wPyhwW3AubGVuZ3RoLTJdPWIuc3RhcnRYLHBbcC5sZW5ndGgtMV09Yi5zdGFydFkpOihwW3cqNC0yXT1iLnN0YXJ0WCxwW3cqNC0xXT1iLnN0YXJ0WSkscFt3KjRdPWIuc3RvcFgscFt3KjQrMV09Yi5zdG9wWSxkPVB4KGUscixpLGEsYi5jeCxiLmN5LGIucmFkaXVzKSxkLmxlbmd0aCE9PTAmJmYucHVzaChkWzBdLGRbMV0pfSk7Zm9yKHZhciBtPTA7bTxwLmxlbmd0aC80O20rKylkPVRmKGUscixpLGEscFttKjRdLHBbbSo0KzFdLHBbbSo0KzJdLHBbbSo0KzNdLCExKSxkLmxlbmd0aCE9PTAmJmYucHVzaChkWzBdLGRbMV0pO2lmKGYubGVuZ3RoPjIpe2Zvcih2YXIgZz1bZlswXSxmWzFdXSx5PU1hdGgucG93KGdbMF0tZSwyKStNYXRoLnBvdyhnWzFdLXIsMiksdj0xO3Y8Zi5sZW5ndGgvMjt2Kyspe3ZhciB4PU1hdGgucG93KGZbdioyXS1lLDIpK01hdGgucG93KGZbdioyKzFdLXIsMik7eDw9eSYmKGdbMF09Zlt2KjJdLGdbMV09Zlt2KjIrMV0seT14KX1yZXR1cm4gZ31yZXR1cm4gZn0sInJvdW5kUG9seWdvbkludGVyc2VjdExpbmUiKSxqRT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1bZVswXS1yWzBdLGVbMV0tclsxXV0sYT1NYXRoLnNxcnQoaVswXSppWzBdK2lbMV0qaVsxXSkscz0oYS1uKS9hO3JldHVybiBzPDAmJihzPTFlLTUpLFtyWzBdK3MqaVswXSxyWzFdK3MqaVsxXV19LCJzaG9ydGVuSW50ZXJzZWN0aW9uIiksbHM9byhmdW5jdGlvbihlLHIpe3ZhciBuPUJQKGUscik7cmV0dXJuIG49bWdlKG4pLG59LCJnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUiKSxtZ2U9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbixpPWUubGVuZ3RoLzIsYT0xLzAscz0xLzAsbD0tMS8wLHU9LTEvMCxoPTA7aDxpO2grKylyPWVbMipoXSxuPWVbMipoKzFdLGE9TWF0aC5taW4oYSxyKSxsPU1hdGgubWF4KGwscikscz1NYXRoLm1pbihzLG4pLHU9TWF0aC5tYXgodSxuKTtmb3IodmFyIGY9Mi8obC1hKSxkPTIvKHUtcykscD0wO3A8aTtwKyspcj1lWzIqcF09ZVsyKnBdKmYsbj1lWzIqcCsxXT1lWzIqcCsxXSpkLGE9TWF0aC5taW4oYSxyKSxsPU1hdGgubWF4KGwscikscz1NYXRoLm1pbihzLG4pLHU9TWF0aC5tYXgodSxuKTtpZihzPC0xKWZvcih2YXIgbT0wO208aTttKyspbj1lWzIqbSsxXT1lWzIqbSsxXSsoLTEtcyk7cmV0dXJuIGV9LCJmaXRQb2x5Z29uVG9TcXVhcmUiKSxCUD1vKGZ1bmN0aW9uKGUscil7dmFyIG49MS9lKjIqTWF0aC5QSSxpPWUlMj09PTA/TWF0aC5QSS8yK24vMjpNYXRoLlBJLzI7aSs9cjtmb3IodmFyIGE9bmV3IEFycmF5KGUqMikscyxsPTA7bDxlO2wrKylzPWwqbitpLGFbMipsXT1NYXRoLmNvcyhzKSxhWzIqbCsxXT1NYXRoLnNpbigtcyk7cmV0dXJuIGF9LCJnZW5lcmF0ZVVuaXROZ29uUG9pbnRzIiksJDA9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLm1pbihlLzQsci80LDgpfSwiZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMiKSxnZ2U9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLm1pbihlLzEwLHIvMTAsOCl9LCJnZXRSb3VuZFBvbHlnb25SYWRpdXMiKSxsQj1vKGZ1bmN0aW9uKCl7cmV0dXJuIDh9LCJnZXRDdXRSZWN0YW5nbGVDb3JuZXJMZW5ndGgiKSxZamU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuW2UtMipyK24sMiooci1lKSxlXX0sImJlemllclB0c1RvUXVhZENvZWZmIiksRlA9byhmdW5jdGlvbihlLHIpe3JldHVybntoZWlnaHRPZmZzZXQ6TWF0aC5taW4oMTUsLjA1KnIpLHdpZHRoT2Zmc2V0Ok1hdGgubWluKDEwMCwuMjUqZSksY3RybFB0T2Zmc2V0UGN0Oi4wNX19LCJnZXRCYXJyZWxDdXJ2ZUNvbnN0YW50cyIpLHFqZT13YSh7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpfSksWGplPXtwYWdlUmFuazpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1xamUoZSksbj1yLmRhbXBpbmdGYWN0b3IsaT1yLnByZWNpc2lvbixhPXIuaXRlcmF0aW9ucyxzPXIud2VpZ2h0LGw9dGhpcy5fcHJpdmF0ZS5jeSx1PXRoaXMuYnlHcm91cCgpLGg9dS5ub2RlcyxmPXUuZWRnZXMsZD1oLmxlbmd0aCxwPWQqZCxtPWYubGVuZ3RoLGc9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KGQpLHY9KDEtbikvZCx4PTA7eDxkO3grKyl7Zm9yKHZhciBiPTA7YjxkO2IrKyl7dmFyIHc9eCpkK2I7Z1t3XT0wfXlbeF09MH1mb3IodmFyIF89MDtfPG07XysrKXt2YXIgVD1mW19dLEU9VC5kYXRhKCJzb3VyY2UiKSxMPVQuZGF0YSgidGFyZ2V0Iik7aWYoRSE9PUwpe3ZhciBDPWguaW5kZXhPZklkKEUpLEE9aC5pbmRleE9mSWQoTCksST1zKFQpLEQ9QSpkK0M7Z1tEXSs9SSx5W0NdKz1JfX1mb3IodmFyIGs9MS9kK3YsUj0wO1I8ZDtSKyspaWYoeVtSXT09PTApZm9yKHZhciBTPTA7UzxkO1MrKyl7dmFyIE89UypkK1I7Z1tPXT1rfWVsc2UgZm9yKHZhciBOPTA7TjxkO04rKyl7dmFyIFA9TipkK1I7Z1tQXT1nW1BdL3lbUl0rdn1mb3IodmFyIEY9bmV3IEFycmF5KGQpLEI9bmV3IEFycmF5KGQpLCQsej0wO3o8ZDt6KyspRlt6XT0xO2Zvcih2YXIgVz0wO1c8YTtXKyspe2Zvcih2YXIgaj0wO2o8ZDtqKyspQltqXT0wO2Zvcih2YXIgSz0wO0s8ZDtLKyspZm9yKHZhciBpZT0wO2llPGQ7aWUrKyl7dmFyIFE9SypkK2llO0JbS10rPWdbUV0qRltpZV19RGplKEIpLCQ9RixGPUIsQj0kO2Zvcih2YXIgZWU9MCxKPTA7SjxkO0orKyl7dmFyIEg9JFtKXS1GW0pdO2VlKz1IKkh9aWYoZWU8aSlicmVha312YXIgcT17cmFuazpvKGZ1bmN0aW9uKGFlKXtyZXR1cm4gYWU9bC5jb2xsZWN0aW9uKGFlKVswXSxGW2guaW5kZXhPZihhZSldfSwicmFuayIpfTtyZXR1cm4gcX0sInBhZ2VSYW5rIil9LCRwZT13YSh7cm9vdDpudWxsLHdlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLGExPXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpvKGZ1bmN0aW9uKGUpe2U9JHBlKGUpO3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW4ubGVuZ3RoO2lmKGUuZGlyZWN0ZWQpe2Zvcih2YXIgZj17fSxkPXt9LHA9MCxtPTAsZz0wO2c8aTtnKyspe3ZhciB5PW5bZ10sdj15LmlkKCk7ZS5yb290PXk7dmFyIHg9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGUpO3A8eC5pbmRlZ3JlZSYmKHA9eC5pbmRlZ3JlZSksbTx4Lm91dGRlZ3JlZSYmKG09eC5vdXRkZWdyZWUpLGZbdl09eC5pbmRlZ3JlZSxkW3ZdPXgub3V0ZGVncmVlfXJldHVybntpbmRlZ3JlZTpvKGZ1bmN0aW9uKHcpe3JldHVybiBwPT0wPzA6KFp0KHcpJiYodz1yLmZpbHRlcih3KSksZlt3LmlkKCldL3ApfSwiaW5kZWdyZWUiKSxvdXRkZWdyZWU6byhmdW5jdGlvbih3KXtyZXR1cm4gbT09PTA/MDooWnQodykmJih3PXIuZmlsdGVyKHcpKSxkW3cuaWQoKV0vbSl9LCJvdXRkZWdyZWUiKX19ZWxzZXtmb3IodmFyIGE9e30scz0wLGw9MDtsPGk7bCsrKXt2YXIgdT1uW2xdO2Uucm9vdD11O3ZhciBoPXRoaXMuZGVncmVlQ2VudHJhbGl0eShlKTtzPGguZGVncmVlJiYocz1oLmRlZ3JlZSksYVt1LmlkKCldPWguZGVncmVlfXJldHVybntkZWdyZWU6byhmdW5jdGlvbih3KXtyZXR1cm4gcz09PTA/MDooWnQodykmJih3PXIuZmlsdGVyKHcpKSxhW3cuaWQoKV0vcyl9LCJkZWdyZWUiKX19fSwiZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQiKSxkZWdyZWVDZW50cmFsaXR5Om8oZnVuY3Rpb24oZSl7ZT0kcGUoZSk7dmFyIHI9dGhpcy5jeSgpLG49dGhpcyxpPWUsYT1pLnJvb3Qscz1pLndlaWdodCxsPWkuZGlyZWN0ZWQsdT1pLmFscGhhO2lmKGE9ci5jb2xsZWN0aW9uKGEpWzBdLGwpe2Zvcih2YXIgbT1hLmNvbm5lY3RlZEVkZ2VzKCksZz1tLmZpbHRlcihmdW5jdGlvbihFKXtyZXR1cm4gRS50YXJnZXQoKS5zYW1lKGEpJiZuLmhhcyhFKX0pLHk9bS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuc291cmNlKCkuc2FtZShhKSYmbi5oYXMoRSl9KSx2PWcubGVuZ3RoLHg9eS5sZW5ndGgsYj0wLHc9MCxfPTA7XzxnLmxlbmd0aDtfKyspYis9cyhnW19dKTtmb3IodmFyIFQ9MDtUPHkubGVuZ3RoO1QrKyl3Kz1zKHlbVF0pO3JldHVybntpbmRlZ3JlZTpNYXRoLnBvdyh2LDEtdSkqTWF0aC5wb3coYix1KSxvdXRkZWdyZWU6TWF0aC5wb3coeCwxLXUpKk1hdGgucG93KHcsdSl9fWVsc2V7Zm9yKHZhciBoPWEuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24obiksZj1oLmxlbmd0aCxkPTAscD0wO3A8aC5sZW5ndGg7cCsrKWQrPXMoaFtwXSk7cmV0dXJue2RlZ3JlZTpNYXRoLnBvdyhmLDEtdSkqTWF0aC5wb3coZCx1KX19fSwiZGVncmVlQ2VudHJhbGl0eSIpfTthMS5kYz1hMS5kZWdyZWVDZW50cmFsaXR5O2ExLmRjbj1hMS5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXNlZD1hMS5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDtWcGU9d2Eoe2hhcm1vbmljOiEwLHdlaWdodDpvKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMSxyb290Om51bGx9KSxzMT17Y2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9VnBlKGUpLG49ci5oYXJtb25pYyxpPXIud2VpZ2h0LGE9ci5kaXJlY3RlZCxzPXRoaXMuY3koKSxsPXt9LHU9MCxoPXRoaXMubm9kZXMoKSxmPXRoaXMuZmxveWRXYXJzaGFsbCh7d2VpZ2h0OmksZGlyZWN0ZWQ6YX0pLGQ9MDtkPGgubGVuZ3RoO2QrKyl7Zm9yKHZhciBwPTAsbT1oW2RdLGc9MDtnPGgubGVuZ3RoO2crKylpZihkIT09Zyl7dmFyIHk9Zi5kaXN0YW5jZShtLGhbZ10pO24/cCs9MS95OnArPXl9bnx8KHA9MS9wKSx1PHAmJih1PXApLGxbbS5pZCgpXT1wfXJldHVybntjbG9zZW5lc3M6byhmdW5jdGlvbih4KXtyZXR1cm4gdT09MD8wOihadCh4KT94PXMuZmlsdGVyKHgpWzBdLmlkKCk6eD14LmlkKCksbFt4XS91KX0sImNsb3NlbmVzcyIpfX0sImNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkIiksY2xvc2VuZXNzQ2VudHJhbGl0eTpvKGZ1bmN0aW9uKGUpe3ZhciByPVZwZShlKSxuPXIucm9vdCxpPXIud2VpZ2h0LGE9ci5kaXJlY3RlZCxzPXIuaGFybW9uaWM7bj10aGlzLmZpbHRlcihuKVswXTtmb3IodmFyIGw9dGhpcy5kaWprc3RyYSh7cm9vdDpuLHdlaWdodDppLGRpcmVjdGVkOmF9KSx1PTAsaD10aGlzLm5vZGVzKCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2lmKCFkLnNhbWUobikpe3ZhciBwPWwuZGlzdGFuY2VUbyhkKTtzP3UrPTEvcDp1Kz1wfX1yZXR1cm4gcz91OjEvdX0sImNsb3NlbmVzc0NlbnRyYWxpdHkiKX07czEuY2M9czEuY2xvc2VuZXNzQ2VudHJhbGl0eTtzMS5jY249czEuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGlzZWQ9czEuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7amplPXdhKHt3ZWlnaHQ6bnVsbCxkaXJlY3RlZDohMX0pLHpQPXtiZXR3ZWVubmVzc0NlbnRyYWxpdHk6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9amplKGUpLG49ci5kaXJlY3RlZCxpPXIud2VpZ2h0LGE9aSE9bnVsbCxzPXRoaXMuY3koKSxsPXRoaXMubm9kZXMoKSx1PXt9LGg9e30sZj0wLGQ9e3NldDpvKGZ1bmN0aW9uKHcsXyl7aFt3XT1fLF8+ZiYmKGY9Xyl9LCJzZXQiKSxnZXQ6byhmdW5jdGlvbih3KXtyZXR1cm4gaFt3XX0sImdldCIpfSxwPTA7cDxsLmxlbmd0aDtwKyspe3ZhciBtPWxbcF0sZz1tLmlkKCk7bj91W2ddPW0ub3V0Z29lcnMoKS5ub2RlcygpOnVbZ109bS5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxkLnNldChnLDApfWZvcih2YXIgeT1vKGZ1bmN0aW9uKHcpe2Zvcih2YXIgXz1sW3ddLmlkKCksVD1bXSxFPXt9LEw9e30sQz17fSxBPW5ldyB0YihmdW5jdGlvbihpZSxRKXtyZXR1cm4gQ1tpZV0tQ1tRXX0pLEk9MDtJPGwubGVuZ3RoO0krKyl7dmFyIEQ9bFtJXS5pZCgpO0VbRF09W10sTFtEXT0wLENbRF09MS8wfWZvcihMW19dPTEsQ1tfXT0wLEEucHVzaChfKTshQS5lbXB0eSgpOyl7dmFyIGs9QS5wb3AoKTtpZihULnB1c2goayksYSlmb3IodmFyIFI9MDtSPHVba10ubGVuZ3RoO1IrKyl7dmFyIFM9dVtrXVtSXSxPPXMuZ2V0RWxlbWVudEJ5SWQoayksTj12b2lkIDA7Ty5lZGdlc1RvKFMpLmxlbmd0aD4wP049Ty5lZGdlc1RvKFMpWzBdOk49Uy5lZGdlc1RvKE8pWzBdO3ZhciBQPWkoTik7Uz1TLmlkKCksQ1tTXT5DW2tdK1AmJihDW1NdPUNba10rUCxBLm5vZGVzLmluZGV4T2YoUyk8MD9BLnB1c2goUyk6QS51cGRhdGVJdGVtKFMpLExbU109MCxFW1NdPVtdKSxDW1NdPT1DW2tdK1AmJihMW1NdPUxbU10rTFtrXSxFW1NdLnB1c2goaykpfWVsc2UgZm9yKHZhciBGPTA7Rjx1W2tdLmxlbmd0aDtGKyspe3ZhciBCPXVba11bRl0uaWQoKTtDW0JdPT0xLzAmJihBLnB1c2goQiksQ1tCXT1DW2tdKzEpLENbQl09PUNba10rMSYmKExbQl09TFtCXStMW2tdLEVbQl0ucHVzaChrKSl9fWZvcih2YXIgJD17fSx6PTA7ejxsLmxlbmd0aDt6KyspJFtsW3pdLmlkKCldPTA7Zm9yKDtULmxlbmd0aD4wOyl7Zm9yKHZhciBXPVQucG9wKCksaj0wO2o8RVtXXS5sZW5ndGg7aisrKXt2YXIgSz1FW1ddW2pdOyRbS109JFtLXStMW0tdL0xbV10qKDErJFtXXSl9VyE9bFt3XS5pZCgpJiZkLnNldChXLGQuZ2V0KFcpKyRbV10pfX0sIl9sb29wIiksdj0wO3Y8bC5sZW5ndGg7disrKXkodik7dmFyIHg9e2JldHdlZW5uZXNzOm8oZnVuY3Rpb24odyl7dmFyIF89cy5jb2xsZWN0aW9uKHcpLmlkKCk7cmV0dXJuIGQuZ2V0KF8pfSwiYmV0d2Vlbm5lc3MiKSxiZXR3ZWVubmVzc05vcm1hbGl6ZWQ6byhmdW5jdGlvbih3KXtpZihmPT0wKXJldHVybiAwO3ZhciBfPXMuY29sbGVjdGlvbih3KS5pZCgpO3JldHVybiBkLmdldChfKS9mfSwiYmV0d2Vlbm5lc3NOb3JtYWxpemVkIil9O3JldHVybiB4LmJldHdlZW5uZXNzTm9ybWFsaXNlZD14LmJldHdlZW5uZXNzTm9ybWFsaXplZCx4fSwiYmV0d2Vlbm5lc3NDZW50cmFsaXR5Iil9O3pQLmJjPXpQLmJldHdlZW5uZXNzQ2VudHJhbGl0eTtLamU9d2Eoe2V4cGFuZEZhY3RvcjoyLGluZmxhdGVGYWN0b3I6MixtdWx0RmFjdG9yOjEsbWF4SXRlcmF0aW9uczoyMCxhdHRyaWJ1dGVzOltmdW5jdGlvbih0KXtyZXR1cm4gMX1dfSksUWplPW8oZnVuY3Rpb24oZSl7cmV0dXJuIEtqZShlKX0sInNldE9wdGlvbnMiKSxaamU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHIubGVuZ3RoO2krKyluKz1yW2ldKGUpO3JldHVybiBufSwiZ2V0U2ltaWxhcml0eSIpLEpqZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MDtpPHI7aSsrKWVbaSpyK2ldPW59LCJhZGRMb29wcyIpLHlnZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuLGk9MDtpPHI7aSsrKXtuPTA7Zm9yKHZhciBhPTA7YTxyO2ErKyluKz1lW2EqcitpXTtmb3IodmFyIHM9MDtzPHI7cysrKWVbcypyK2ldPWVbcypyK2ldL259fSwibm9ybWFsaXplIiksZUtlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkobipuKSxhPTA7YTxuO2ErKyl7Zm9yKHZhciBzPTA7czxuO3MrKylpW2EqbitzXT0wO2Zvcih2YXIgbD0wO2w8bjtsKyspZm9yKHZhciB1PTA7dTxuO3UrKylpW2Eqbit1XSs9ZVthKm4rbF0qcltsKm4rdV19cmV0dXJuIGl9LCJtbXVsdCIpLHRLZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9ZS5zbGljZSgwKSxhPTE7YTxuO2ErKyllPWVLZShlLGkscik7cmV0dXJuIGV9LCJleHBhbmQiKSxyS2U9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPW5ldyBBcnJheShyKnIpLGE9MDthPHIqcjthKyspaVthXT1NYXRoLnBvdyhlW2FdLG4pO3JldHVybiB5Z2UoaSxyKSxpfSwiaW5mbGF0ZSIpLG5LZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT0wO2E8bjthKyspe3ZhciBzPU1hdGgucm91bmQoZVthXSpNYXRoLnBvdygxMCxpKSkvTWF0aC5wb3coMTAsaSksbD1NYXRoLnJvdW5kKHJbYV0qTWF0aC5wb3coMTAsaSkpL01hdGgucG93KDEwLGkpO2lmKHMhPT1sKXJldHVybiExfXJldHVybiEwfSwiaGFzQ29udmVyZ2VkIiksaUtlPW8oZnVuY3Rpb24oZSxyLG4saSl7Zm9yKHZhciBhPVtdLHM9MDtzPHI7cysrKXtmb3IodmFyIGw9W10sdT0wO3U8cjt1KyspTWF0aC5yb3VuZChlW3Mqcit1XSoxZTMpLzFlMz4wJiZsLnB1c2goblt1XSk7bC5sZW5ndGghPT0wJiZhLnB1c2goaS5jb2xsZWN0aW9uKGwpKX1yZXR1cm4gYX0sImFzc2lnbiIpLGFLZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoIXJbbl18fGVbbl0uaWQoKSE9PXJbbl0uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sImlzRHVwbGljYXRlIiksc0tlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspciE9biYmYUtlKGVbcl0sZVtuXSkmJmUuc3BsaWNlKG4sMSk7cmV0dXJuIGV9LCJyZW1vdmVEdXBsaWNhdGVzIiksVXBlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMubm9kZXMoKSxuPXRoaXMuZWRnZXMoKSxpPXRoaXMuY3koKSxhPVFqZShlKSxzPXt9LGw9MDtsPHIubGVuZ3RoO2wrKylzW3JbbF0uaWQoKV09bDtmb3IodmFyIHU9ci5sZW5ndGgsaD11KnUsZj1uZXcgQXJyYXkoaCksZCxwPTA7cDxoO3ArKylmW3BdPTA7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspe3ZhciBnPW5bbV0seT1zW2cuc291cmNlKCkuaWQoKV0sdj1zW2cudGFyZ2V0KCkuaWQoKV0seD1aamUoZyxhLmF0dHJpYnV0ZXMpO2ZbeSp1K3ZdKz14LGZbdip1K3ldKz14fUpqZShmLHUsYS5tdWx0RmFjdG9yKSx5Z2UoZix1KTtmb3IodmFyIGI9ITAsdz0wO2ImJnc8YS5tYXhJdGVyYXRpb25zOyliPSExLGQ9dEtlKGYsdSxhLmV4cGFuZEZhY3RvciksZj1yS2UoZCx1LGEuaW5mbGF0ZUZhY3RvciksbktlKGYsZCxoLDQpfHwoYj0hMCksdysrO3ZhciBfPWlLZShmLHUscixpKTtyZXR1cm4gXz1zS2UoXyksX30sIm1hcmtvdkNsdXN0ZXJpbmciKSxvS2U9e21hcmtvdkNsdXN0ZXJpbmc6VXBlLG1jbDpVcGV9LGxLZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiaWRlbnRpdHkiKSx2Z2U9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhyLWUpfSwiYWJzRGlmZiIpLEhwZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZSt2Z2UocixuKX0sImFkZEFic0RpZmYiKSxXcGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrTWF0aC5wb3cobi1yLDIpfSwiYWRkU3F1YXJlZERpZmYiKSxjS2U9byhmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zcXJ0KGUpfSwic3FydCIpLHVLZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gTWF0aC5tYXgoZSx2Z2UocixuKSl9LCJtYXhBYnNEaWZmIiksRHg9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bEtlLGw9aSx1LGgsZj0wO2Y8ZTtmKyspdT1yKGYpLGg9bihmKSxsPWEobCx1LGgpO3JldHVybiBzKGwpfSwiZ2V0RGlzdGFuY2UiKSx1MT17ZXVjbGlkZWFuOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPj0yP0R4KGUscixuLDAsV3BlLGNLZSk6RHgoZSxyLG4sMCxIcGUpfSwiZXVjbGlkZWFuIiksc3F1YXJlZEV1Y2xpZGVhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gRHgoZSxyLG4sMCxXcGUpfSwic3F1YXJlZEV1Y2xpZGVhbiIpLG1hbmhhdHRhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gRHgoZSxyLG4sMCxIcGUpfSwibWFuaGF0dGFuIiksbWF4Om8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBEeChlLHIsbiwtMS8wLHVLZSl9LCJtYXgiKX07dTFbInNxdWFyZWQtZXVjbGlkZWFuIl09dTEuc3F1YXJlZEV1Y2xpZGVhbjt1MS5zcXVhcmVkZXVjbGlkZWFuPXUxLnNxdWFyZWRFdWNsaWRlYW47byhENiwiY2x1c3RlcmluZ0Rpc3RhbmNlIik7aEtlPXdhKHtrOjIsbToyLHNlbnNpdGl2aXR5VGhyZXNob2xkOjFlLTQsZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbWF4SXRlcmF0aW9uczoxMCxhdHRyaWJ1dGVzOltdLHRlc3RNb2RlOiExLHRlc3RDZW50cm9pZHM6bnVsbH0pLGNCPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGhLZShlKX0sInNldE9wdGlvbnMiKSx4Nj1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9YSE9PSJrTWVkb2lkcyIsbD1zP2Z1bmN0aW9uKGQpe3JldHVybiBuW2RdfTpmdW5jdGlvbihkKXtyZXR1cm4gaVtkXShuKX0sdT1vKGZ1bmN0aW9uKHApe3JldHVybiBpW3BdKHIpfSwiZ2V0USIpLGg9bixmPXI7cmV0dXJuIEQ2KGUsaS5sZW5ndGgsbCx1LGgsZil9LCJnZXREaXN0IiksX1A9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPW4ubGVuZ3RoLGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpLGw9bmV3IEFycmF5KHIpLHU9bnVsbCxoPTA7aDxpO2grKylhW2hdPWUubWluKG5baF0pLnZhbHVlLHNbaF09ZS5tYXgobltoXSkudmFsdWU7Zm9yKHZhciBmPTA7ZjxyO2YrKyl7dT1bXTtmb3IodmFyIGQ9MDtkPGk7ZCsrKXVbZF09TWF0aC5yYW5kb20oKSooc1tkXS1hW2RdKSthW2RdO2xbZl09dX1yZXR1cm4gbH0sInJhbmRvbUNlbnRyb2lkcyIpLHhnZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzPTEvMCxsPTAsdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD14NihuLGUsclt1XSxpLGEpO2g8cyYmKHM9aCxsPXUpfXJldHVybiBsfSwiY2xhc3NpZnkiKSxiZ2U9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9bnVsbCxzPTA7czxyLmxlbmd0aDtzKyspYT1yW3NdLG5bYS5pZCgpXT09PWUmJmkucHVzaChhKTtyZXR1cm4gaX0sImJ1aWxkQ2x1c3RlciIpLGZLZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gTWF0aC5hYnMoci1lKTw9bn0sImhhdmVWYWx1ZXNDb252ZXJnZWQiKSxkS2U9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspZm9yKHZhciBhPTA7YTxlW2ldLmxlbmd0aDthKyspe3ZhciBzPU1hdGguYWJzKGVbaV1bYV0tcltpXVthXSk7aWYocz5uKXJldHVybiExfXJldHVybiEwfSwiaGF2ZU1hdHJpY2VzQ29udmVyZ2VkIikscEtlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8bjtpKyspaWYoZT09PXJbaV0pcmV0dXJuITA7cmV0dXJuITF9LCJzZWVuQmVmb3JlIiksWXBlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1uZXcgQXJyYXkocik7aWYoZS5sZW5ndGg8NTApZm9yKHZhciBpPTA7aTxyO2krKyl7Zm9yKHZhciBhPWVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmUubGVuZ3RoKV07cEtlKGEsbixpKTspYT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO25baV09YX1lbHNlIGZvcih2YXIgcz0wO3M8cjtzKyspbltzXT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO3JldHVybiBufSwicmFuZG9tTWVkb2lkcyIpLHFwZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MCxhPTA7YTxyLmxlbmd0aDthKyspaSs9eDYoIm1hbmhhdHRhbiIsclthXSxlLG4sImtNZWRvaWRzIik7cmV0dXJuIGl9LCJmaW5kQ29zdCIpLG1LZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW51bGwsYT1jQihlKSxzPW5ldyBBcnJheShhLmspLGw9e30sdTthLnRlc3RNb2RlP3R5cGVvZiBhLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhhLnRlc3RDZW50cm9pZHMsdT1fUChuLGEuayxhLmF0dHJpYnV0ZXMpKTpZaShhLnRlc3RDZW50cm9pZHMpPT09Im9iamVjdCI/dT1hLnRlc3RDZW50cm9pZHM6dT1fUChuLGEuayxhLmF0dHJpYnV0ZXMpOnU9X1AobixhLmssYS5hdHRyaWJ1dGVzKTtmb3IodmFyIGg9ITAsZj0wO2gmJmY8YS5tYXhJdGVyYXRpb25zOyl7Zm9yKHZhciBkPTA7ZDxuLmxlbmd0aDtkKyspaT1uW2RdLGxbaS5pZCgpXT14Z2UoaSx1LGEuZGlzdGFuY2UsYS5hdHRyaWJ1dGVzLCJrTWVhbnMiKTtoPSExO2Zvcih2YXIgcD0wO3A8YS5rO3ArKyl7dmFyIG09YmdlKHAsbixsKTtpZihtLmxlbmd0aCE9PTApe2Zvcih2YXIgZz1hLmF0dHJpYnV0ZXMubGVuZ3RoLHk9dVtwXSx2PW5ldyBBcnJheShnKSx4PW5ldyBBcnJheShnKSxiPTA7YjxnO2IrKyl7eFtiXT0wO2Zvcih2YXIgdz0wO3c8bS5sZW5ndGg7dysrKWk9bVt3XSx4W2JdKz1hLmF0dHJpYnV0ZXNbYl0oaSk7dltiXT14W2JdL20ubGVuZ3RoLGZLZSh2W2JdLHlbYl0sYS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChoPSEwKX11W3BdPXYsc1twXT1yLmNvbGxlY3Rpb24obSl9fWYrK31yZXR1cm4gc30sImtNZWFucyIpLGdLZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW51bGwsYT1jQihlKSxzPW5ldyBBcnJheShhLmspLGwsdT17fSxoLGY9bmV3IEFycmF5KGEuayk7YS50ZXN0TW9kZT90eXBlb2YgYS50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KFlpKGEudGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9sPWEudGVzdENlbnRyb2lkczpsPVlwZShuLGEuaykpOmw9WXBlKG4sYS5rKTtmb3IodmFyIGQ9ITAscD0wO2QmJnA8YS5tYXhJdGVyYXRpb25zOyl7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspaT1uW21dLHVbaS5pZCgpXT14Z2UoaSxsLGEuZGlzdGFuY2UsYS5hdHRyaWJ1dGVzLCJrTWVkb2lkcyIpO2Q9ITE7Zm9yKHZhciBnPTA7ZzxsLmxlbmd0aDtnKyspe3ZhciB5PWJnZShnLG4sdSk7aWYoeS5sZW5ndGghPT0wKXtmW2ddPXFwZShsW2ddLHksYS5hdHRyaWJ1dGVzKTtmb3IodmFyIHY9MDt2PHkubGVuZ3RoO3YrKyloPXFwZSh5W3ZdLHksYS5hdHRyaWJ1dGVzKSxoPGZbZ10mJihmW2ddPWgsbFtnXT15W3ZdLGQ9ITApO3NbZ109ci5jb2xsZWN0aW9uKHkpfX1wKyt9cmV0dXJuIHN9LCJrTWVkb2lkcyIpLHlLZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzLGwsdT0wO3U8ci5sZW5ndGg7dSsrKWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWlbdV1baF09TWF0aC5wb3coblt1XVtoXSxhLm0pO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKWZvcih2YXIgZD0wO2Q8YS5hdHRyaWJ1dGVzLmxlbmd0aDtkKyspe3M9MCxsPTA7Zm9yKHZhciBwPTA7cDxyLmxlbmd0aDtwKyspcys9aVtwXVtmXSphLmF0dHJpYnV0ZXNbZF0ocltwXSksbCs9aVtwXVtmXTtlW2ZdW2RdPXMvbH19LCJ1cGRhdGVDZW50cm9pZHMiKSx2S2U9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXJbc109ZVtzXS5zbGljZSgpO2Zvcih2YXIgbCx1LGgsZj0yLyhhLm0tMSksZD0wO2Q8bi5sZW5ndGg7ZCsrKWZvcih2YXIgcD0wO3A8aS5sZW5ndGg7cCsrKXtsPTA7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspdT14NihhLmRpc3RhbmNlLGlbcF0sbltkXSxhLmF0dHJpYnV0ZXMsImNtZWFucyIpLGg9eDYoYS5kaXN0YW5jZSxpW3BdLG5bbV0sYS5hdHRyaWJ1dGVzLCJjbWVhbnMiKSxsKz1NYXRoLnBvdyh1L2gsZik7ZVtwXVtkXT0xL2x9fSwidXBkYXRlTWVtYmVyc2hpcCIpLHhLZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1uZXcgQXJyYXkobi5rKSxzPTA7czxhLmxlbmd0aDtzKyspYVtzXT1bXTtmb3IodmFyIGwsdSxoPTA7aDxyLmxlbmd0aDtoKyspe2w9LTEvMCx1PS0xO2Zvcih2YXIgZj0wO2Y8clswXS5sZW5ndGg7ZisrKXJbaF1bZl0+bCYmKGw9cltoXVtmXSx1PWYpO2FbdV0ucHVzaChlW2hdKX1mb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdPWkuY29sbGVjdGlvbihhW2RdKTtyZXR1cm4gYX0sImFzc2lnbiIpLFhwZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPWNCKGUpLGEscyxsLHUsaDt1PW5ldyBBcnJheShuLmxlbmd0aCk7Zm9yKHZhciBmPTA7ZjxuLmxlbmd0aDtmKyspdVtmXT1uZXcgQXJyYXkoaS5rKTtsPW5ldyBBcnJheShuLmxlbmd0aCk7Zm9yKHZhciBkPTA7ZDxuLmxlbmd0aDtkKyspbFtkXT1uZXcgQXJyYXkoaS5rKTtmb3IodmFyIHA9MDtwPG4ubGVuZ3RoO3ArKyl7Zm9yKHZhciBtPTAsZz0wO2c8aS5rO2crKylsW3BdW2ddPU1hdGgucmFuZG9tKCksbSs9bFtwXVtnXTtmb3IodmFyIHk9MDt5PGkuazt5KyspbFtwXVt5XT1sW3BdW3ldL219cz1uZXcgQXJyYXkoaS5rKTtmb3IodmFyIHY9MDt2PGkuazt2Kyspc1t2XT1uZXcgQXJyYXkoaS5hdHRyaWJ1dGVzLmxlbmd0aCk7aD1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8bi5sZW5ndGg7eCsrKWhbeF09bmV3IEFycmF5KGkuayk7Zm9yKHZhciBiPSEwLHc9MDtiJiZ3PGkubWF4SXRlcmF0aW9uczspYj0hMSx5S2UocyxuLGwsaCxpKSx2S2UobCx1LHMsbixpKSxkS2UobCx1LGkuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpfHwoYj0hMCksdysrO3JldHVybiBhPXhLZShuLGwsaSxyKSx7Y2x1c3RlcnM6YSxkZWdyZWVPZk1lbWJlcnNoaXA6bH19LCJmdXp6eUNNZWFucyIpLGJLZT17a01lYW5zOm1LZSxrTWVkb2lkczpnS2UsZnV6enlDTWVhbnM6WHBlLGZjbTpYcGV9LHdLZT13YSh7ZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbGlua2FnZToibWluIixtb2RlOiJ0aHJlc2hvbGQiLHRocmVzaG9sZDoxLzAsYWRkRGVuZHJvZ3JhbTohMSxkZW5kcm9ncmFtRGVwdGg6MCxhdHRyaWJ1dGVzOltdfSksVEtlPXtzaW5nbGU6Im1pbiIsY29tcGxldGU6Im1heCJ9LGtLZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXdLZShlKSxuPVRLZVtyLmxpbmthZ2VdO3JldHVybiBuIT1udWxsJiYoci5saW5rYWdlPW4pLHJ9LCJzZXRPcHRpb25zIiksanBlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9MCxsPTEvMCx1LGg9YS5hdHRyaWJ1dGVzLGY9byhmdW5jdGlvbihBLEkpe3JldHVybiBENihhLmRpc3RhbmNlLGgubGVuZ3RoLGZ1bmN0aW9uKEQpe3JldHVybiBoW0RdKEEpfSxmdW5jdGlvbihEKXtyZXR1cm4gaFtEXShJKX0sQSxJKX0sImdldERpc3QiKSxkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBwPWVbZF0ua2V5LG09bltwXVtpW3BdXTttPGwmJihzPXAsbD1tKX1pZihhLm1vZGU9PT0idGhyZXNob2xkIiYmbD49YS50aHJlc2hvbGR8fGEubW9kZT09PSJkZW5kcm9ncmFtIiYmZS5sZW5ndGg9PT0xKXJldHVybiExO3ZhciBnPXJbc10seT1yW2lbc11dLHY7YS5tb2RlPT09ImRlbmRyb2dyYW0iP3Y9e2xlZnQ6ZyxyaWdodDp5LGtleTpnLmtleX06dj17dmFsdWU6Zy52YWx1ZS5jb25jYXQoeS52YWx1ZSksa2V5Omcua2V5fSxlW2cuaW5kZXhdPXYsZS5zcGxpY2UoeS5pbmRleCwxKSxyW2cua2V5XT12O2Zvcih2YXIgeD0wO3g8ZS5sZW5ndGg7eCsrKXt2YXIgYj1lW3hdO2cua2V5PT09Yi5rZXk/dT0xLzA6YS5saW5rYWdlPT09Im1pbiI/KHU9bltnLmtleV1bYi5rZXldLG5bZy5rZXldW2Iua2V5XT5uW3kua2V5XVtiLmtleV0mJih1PW5beS5rZXldW2Iua2V5XSkpOmEubGlua2FnZT09PSJtYXgiPyh1PW5bZy5rZXldW2Iua2V5XSxuW2cua2V5XVtiLmtleV08blt5LmtleV1bYi5rZXldJiYodT1uW3kua2V5XVtiLmtleV0pKTphLmxpbmthZ2U9PT0ibWVhbiI/dT0obltnLmtleV1bYi5rZXldKmcuc2l6ZStuW3kua2V5XVtiLmtleV0qeS5zaXplKS8oZy5zaXplK3kuc2l6ZSk6YS5tb2RlPT09ImRlbmRyb2dyYW0iP3U9ZihiLnZhbHVlLGcudmFsdWUpOnU9ZihiLnZhbHVlWzBdLGcudmFsdWVbMF0pLG5bZy5rZXldW2Iua2V5XT1uW2Iua2V5XVtnLmtleV09dX1mb3IodmFyIHc9MDt3PGUubGVuZ3RoO3crKyl7dmFyIF89ZVt3XS5rZXk7aWYoaVtfXT09PWcua2V5fHxpW19dPT09eS5rZXkpe2Zvcih2YXIgVD1fLEU9MDtFPGUubGVuZ3RoO0UrKyl7dmFyIEw9ZVtFXS5rZXk7bltfXVtMXTxuW19dW1RdJiYoVD1MKX1pW19dPVR9ZVt3XS5pbmRleD13fXJldHVybiBnLmtleT15LmtleT1nLmluZGV4PXkuaW5kZXg9bnVsbCwhMH0sIm1lcmdlQ2xvc2VzdCIpLEtFPW8oZnVuY3Rpb24gdChlLHIsbil7ZSYmKGUudmFsdWU/ci5wdXNoKGUudmFsdWUpOihlLmxlZnQmJnQoZS5sZWZ0LHIpLGUucmlnaHQmJnQoZS5yaWdodCxyKSkpfSwiZ2V0QWxsQ2hpbGRyZW4iKSxFS2U9byhmdW5jdGlvbiB0KGUscil7aWYoIWUpcmV0dXJuIiI7aWYoZS5sZWZ0JiZlLnJpZ2h0KXt2YXIgbj10KGUubGVmdCxyKSxpPXQoZS5yaWdodCxyKSxhPXIuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOm4rIiwiK2l9fSk7cmV0dXJuIHIuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpuLHRhcmdldDphLmlkKCl9fSksci5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7c291cmNlOmksdGFyZ2V0OmEuaWQoKX19KSxhLmlkKCl9ZWxzZSBpZihlLnZhbHVlKXJldHVybiBlLnZhbHVlLmlkKCl9LCJidWlsZERlbmRyb2dyYW0iKSxTS2U9byhmdW5jdGlvbiB0KGUscixuKXtpZighZSlyZXR1cm5bXTt2YXIgaT1bXSxhPVtdLHM9W107cmV0dXJuIHI9PT0wPyhlLmxlZnQmJktFKGUubGVmdCxpKSxlLnJpZ2h0JiZLRShlLnJpZ2h0LGEpLHM9aS5jb25jYXQoYSksW24uY29sbGVjdGlvbihzKV0pOnI9PT0xP2UudmFsdWU/W24uY29sbGVjdGlvbihlLnZhbHVlKV06KGUubGVmdCYmS0UoZS5sZWZ0LGkpLGUucmlnaHQmJktFKGUucmlnaHQsYSksW24uY29sbGVjdGlvbihpKSxuLmNvbGxlY3Rpb24oYSldKTplLnZhbHVlP1tuLmNvbGxlY3Rpb24oZS52YWx1ZSldOihlLmxlZnQmJihpPXQoZS5sZWZ0LHItMSxuKSksZS5yaWdodCYmKGE9dChlLnJpZ2h0LHItMSxuKSksaS5jb25jYXQoYSkpfSwiYnVpbGRDbHVzdGVyc0Zyb21UcmVlIiksS3BlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPWtLZShlKSxhPWkuYXR0cmlidXRlcyxzPW8oZnVuY3Rpb24odyxfKXtyZXR1cm4gRDYoaS5kaXN0YW5jZSxhLmxlbmd0aCxmdW5jdGlvbihUKXtyZXR1cm4gYVtUXSh3KX0sZnVuY3Rpb24oVCl7cmV0dXJuIGFbVF0oXyl9LHcsXyl9LCJnZXREaXN0IiksbD1bXSx1PVtdLGg9W10sZj1bXSxkPTA7ZDxuLmxlbmd0aDtkKyspe3ZhciBwPXt2YWx1ZTppLm1vZGU9PT0iZGVuZHJvZ3JhbSI/bltkXTpbbltkXV0sa2V5OmQsaW5kZXg6ZH07bFtkXT1wLGZbZF09cCx1W2RdPVtdLGhbZF09MH1mb3IodmFyIG09MDttPGwubGVuZ3RoO20rKylmb3IodmFyIGc9MDtnPD1tO2crKyl7dmFyIHk9dm9pZCAwO2kubW9kZT09PSJkZW5kcm9ncmFtIj95PW09PT1nPzEvMDpzKGxbbV0udmFsdWUsbFtnXS52YWx1ZSk6eT1tPT09Zz8xLzA6cyhsW21dLnZhbHVlWzBdLGxbZ10udmFsdWVbMF0pLHVbbV1bZ109eSx1W2ddW21dPXkseTx1W21dW2hbbV1dJiYoaFttXT1nKX1mb3IodmFyIHY9anBlKGwsZix1LGgsaSk7djspdj1qcGUobCxmLHUsaCxpKTt2YXIgeDtyZXR1cm4gaS5tb2RlPT09ImRlbmRyb2dyYW0iPyh4PVNLZShsWzBdLGkuZGVuZHJvZ3JhbURlcHRoLHIpLGkuYWRkRGVuZHJvZ3JhbSYmRUtlKGxbMF0scikpOih4PW5ldyBBcnJheShsLmxlbmd0aCksbC5mb3JFYWNoKGZ1bmN0aW9uKGIsdyl7Yi5rZXk9Yi5pbmRleD1udWxsLHhbd109ci5jb2xsZWN0aW9uKGIudmFsdWUpfSkpLHh9LCJoaWVyYXJjaGljYWxDbHVzdGVyaW5nIiksQ0tlPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOktwZSxoY2E6S3BlfSxBS2U9d2Eoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLHByZWZlcmVuY2U6Im1lZGlhbiIsZGFtcGluZzouOCxtYXhJdGVyYXRpb25zOjFlMyxtaW5JdGVyYXRpb25zOjEwMCxhdHRyaWJ1dGVzOltdfSksX0tlPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS5kYW1waW5nLG49ZS5wcmVmZXJlbmNlOy41PD1yJiZyPDF8fGhpKCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6ICIuY29uY2F0KHIpKTt2YXIgaT1bIm1lZGlhbiIsIm1lYW4iLCJtaW4iLCJtYXgiXTtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09bn0pfHx4dChuKXx8aGkoIlByZWZlcmVuY2UgbXVzdCBiZSBvbmUgb2YgWyIuY29uY2F0KGkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiInIi5jb25jYXQoYSwiJyIpfSkuam9pbigiLCAiKSwiXSBvciBhIG51bWJlci4gIEdvdDogIikuY29uY2F0KG4pKSxBS2UoZSl9LCJzZXRPcHRpb25zIiksTEtlPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9byhmdW5jdGlvbihsLHUpe3JldHVybiBpW3VdKGwpfSwiYXR0ciIpO3JldHVybi1ENihlLGkubGVuZ3RoLGZ1bmN0aW9uKHMpe3JldHVybiBhKHIscyl9LGZ1bmN0aW9uKHMpe3JldHVybiBhKG4scyl9LHIsbil9LCJnZXRTaW1pbGFyaXR5IiksREtlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3JldHVybiByPT09Im1lZGlhbiI/bj1famUoZSk6cj09PSJtZWFuIj9uPUFqZShlKTpyPT09Im1pbiI/bj1TamUoZSk6cj09PSJtYXgiP249Q2plKGUpOm49cixufSwiZ2V0UHJlZmVyZW5jZSIpLE5LZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8ZTthKyspclthKmUrYV0rblthKmUrYV0+MCYmaS5wdXNoKGEpO3JldHVybiBpfSwiZmluZEV4ZW1wbGFycyIpLFFwZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8ZTthKyspe2Zvcih2YXIgcz0tMSxsPS0xLzAsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD1uW3VdO3JbYSplK2hdPmwmJihzPWgsbD1yW2EqZStoXSl9cz4wJiZpLnB1c2gocyl9Zm9yKHZhciBmPTA7ZjxuLmxlbmd0aDtmKyspaVtuW2ZdXT1uW2ZdO3JldHVybiBpfSwiYXNzaWduQ2x1c3RlcnMiKSxSS2U9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVFwZShlLHIsbiksYT0wO2E8bi5sZW5ndGg7YSsrKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKWlbbF09PT1uW2FdJiZzLnB1c2gobCk7Zm9yKHZhciB1PS0xLGg9LTEvMCxmPTA7ZjxzLmxlbmd0aDtmKyspe2Zvcih2YXIgZD0wLHA9MDtwPHMubGVuZ3RoO3ArKylkKz1yW3NbcF0qZStzW2ZdXTtkPmgmJih1PWYsaD1kKX1uW2FdPXNbdV19cmV0dXJuIGk9UXBlKGUscixuKSxpfSwiYXNzaWduIiksWnBlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPV9LZShlKSxhPXt9LHM9MDtzPG4ubGVuZ3RoO3MrKylhW25bc10uaWQoKV09czt2YXIgbCx1LGgsZixkLHA7bD1uLmxlbmd0aCx1PWwqbCxoPW5ldyBBcnJheSh1KTtmb3IodmFyIG09MDttPHU7bSsrKWhbbV09LTEvMDtmb3IodmFyIGc9MDtnPGw7ZysrKWZvcih2YXIgeT0wO3k8bDt5KyspZyE9PXkmJihoW2cqbCt5XT1MS2UoaS5kaXN0YW5jZSxuW2ddLG5beV0saS5hdHRyaWJ1dGVzKSk7Zj1ES2UoaCxpLnByZWZlcmVuY2UpO2Zvcih2YXIgdj0wO3Y8bDt2KyspaFt2Kmwrdl09ZjtkPW5ldyBBcnJheSh1KTtmb3IodmFyIHg9MDt4PHU7eCsrKWRbeF09MDtwPW5ldyBBcnJheSh1KTtmb3IodmFyIGI9MDtiPHU7YisrKXBbYl09MDtmb3IodmFyIHc9bmV3IEFycmF5KGwpLF89bmV3IEFycmF5KGwpLFQ9bmV3IEFycmF5KGwpLEU9MDtFPGw7RSsrKXdbRV09MCxfW0VdPTAsVFtFXT0wO2Zvcih2YXIgTD1uZXcgQXJyYXkobCppLm1pbkl0ZXJhdGlvbnMpLEM9MDtDPEwubGVuZ3RoO0MrKylMW0NdPTA7dmFyIEE7Zm9yKEE9MDtBPGkubWF4SXRlcmF0aW9ucztBKyspe2Zvcih2YXIgST0wO0k8bDtJKyspe2Zvcih2YXIgRD0tMS8wLGs9LTEvMCxSPS0xLFM9MCxPPTA7TzxsO08rKyl3W09dPWRbSSpsK09dLFM9cFtJKmwrT10raFtJKmwrT10sUz49RD8oaz1ELEQ9UyxSPU8pOlM+ayYmKGs9Uyk7Zm9yKHZhciBOPTA7TjxsO04rKylkW0kqbCtOXT0oMS1pLmRhbXBpbmcpKihoW0kqbCtOXS1EKStpLmRhbXBpbmcqd1tOXTtkW0kqbCtSXT0oMS1pLmRhbXBpbmcpKihoW0kqbCtSXS1rKStpLmRhbXBpbmcqd1tSXX1mb3IodmFyIFA9MDtQPGw7UCsrKXtmb3IodmFyIEY9MCxCPTA7QjxsO0IrKyl3W0JdPXBbQipsK1BdLF9bQl09TWF0aC5tYXgoMCxkW0IqbCtQXSksRis9X1tCXTtGLT1fW1BdLF9bUF09ZFtQKmwrUF0sRis9X1tQXTtmb3IodmFyICQ9MDskPGw7JCsrKXBbJCpsK1BdPSgxLWkuZGFtcGluZykqTWF0aC5taW4oMCxGLV9bJF0pK2kuZGFtcGluZyp3WyRdO3BbUCpsK1BdPSgxLWkuZGFtcGluZykqKEYtX1tQXSkraS5kYW1waW5nKndbUF19Zm9yKHZhciB6PTAsVz0wO1c8bDtXKyspe3ZhciBqPXBbVypsK1ddK2RbVypsK1ddPjA/MTowO0xbQSVpLm1pbkl0ZXJhdGlvbnMqbCtXXT1qLHorPWp9aWYoej4wJiYoQT49aS5taW5JdGVyYXRpb25zLTF8fEE9PWkubWF4SXRlcmF0aW9ucy0xKSl7Zm9yKHZhciBLPTAsaWU9MDtpZTxsO2llKyspe1RbaWVdPTA7Zm9yKHZhciBRPTA7UTxpLm1pbkl0ZXJhdGlvbnM7USsrKVRbaWVdKz1MW1EqbCtpZV07KFRbaWVdPT09MHx8VFtpZV09PT1pLm1pbkl0ZXJhdGlvbnMpJiZLKyt9aWYoSz09PWwpYnJlYWt9fWZvcih2YXIgZWU9TktlKGwsZCxwKSxKPVJLZShsLGgsZWUpLEg9e30scT0wO3E8ZWUubGVuZ3RoO3ErKylIW2VlW3FdXT1bXTtmb3IodmFyIFo9MDtaPG4ubGVuZ3RoO1orKyl7dmFyIGFlPWFbbltaXS5pZCgpXSx1ZT1KW2FlXTt1ZSE9bnVsbCYmSFt1ZV0ucHVzaChuW1pdKX1mb3IodmFyIGNlPW5ldyBBcnJheShlZS5sZW5ndGgpLHRlPTA7dGU8ZWUubGVuZ3RoO3RlKyspY2VbdGVdPXIuY29sbGVjdGlvbihIW2VlW3RlXV0pO3JldHVybiBjZX0sImFmZmluaXR5UHJvcGFnYXRpb24iKSxNS2U9e2FmZmluaXR5UHJvcGFnYXRpb246WnBlLGFwOlpwZX0sSUtlPXdhKHtyb290OnZvaWQgMCxkaXJlY3RlZDohMX0pLE9LZT17aGllcmhvbHplcjpvKGZ1bmN0aW9uKGUpe2lmKCFWcihlKSl7dmFyIHI9YXJndW1lbnRzO2U9e3Jvb3Q6clswXSxkaXJlY3RlZDpyWzFdfX12YXIgbj1JS2UoZSksaT1uLnJvb3QsYT1uLmRpcmVjdGVkLHM9dGhpcyxsPSExLHUsaCxmO2kmJihmPVp0KGkpP3RoaXMuZmlsdGVyKGkpWzBdLmlkKCk6aVswXS5pZCgpKTt2YXIgZD17fSxwPXt9O2E/cy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciB3PWIuaWQoKTtpZihiLmlzTm9kZSgpKXt2YXIgXz1iLmluZGVncmVlKCEwKSxUPWIub3V0ZGVncmVlKCEwKSxFPV8tVCxMPVQtXztFPT0xP3U/bD0hMDp1PXc6TD09MT9oP2w9ITA6aD13OihMPjF8fEU+MSkmJihsPSEwKSxkW3ddPVtdLGIub3V0Z29lcnMoKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe0MuaXNFZGdlKCkmJmRbd10ucHVzaChDLmlkKCkpfSl9ZWxzZSBwW3ddPVt2b2lkIDAsYi50YXJnZXQoKS5pZCgpXX0pOnMuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgdz1iLmlkKCk7aWYoYi5pc05vZGUoKSl7dmFyIF89Yi5kZWdyZWUoITApO18lMiYmKHU/aD9sPSEwOmg9dzp1PXcpLGRbd109W10sYi5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oVCl7cmV0dXJuIGRbd10ucHVzaChULmlkKCkpfSl9ZWxzZSBwW3ddPVtiLnNvdXJjZSgpLmlkKCksYi50YXJnZXQoKS5pZCgpXX0pO3ZhciBtPXtmb3VuZDohMSx0cmFpbDp2b2lkIDB9O2lmKGwpcmV0dXJuIG07aWYoaCYmdSlpZihhKXtpZihmJiZoIT1mKXJldHVybiBtO2Y9aH1lbHNle2lmKGYmJmghPWYmJnUhPWYpcmV0dXJuIG07Znx8KGY9aCl9ZWxzZSBmfHwoZj1zWzBdLmlkKCkpO3ZhciBnPW8oZnVuY3Rpb24odyl7Zm9yKHZhciBfPXcsVD1bd10sRSxMLEM7ZFtfXS5sZW5ndGg7KUU9ZFtfXS5zaGlmdCgpLEw9cFtFXVswXSxDPXBbRV1bMV0sXyE9Qz8oZFtDXT1kW0NdLmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4gQSE9RX0pLF89Qyk6IWEmJl8hPUwmJihkW0xdPWRbTF0uZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiBBIT1FfSksXz1MKSxULnVuc2hpZnQoRSksVC51bnNoaWZ0KF8pO3JldHVybiBUfSwid2FsayIpLHk9W10sdj1bXTtmb3Iodj1nKGYpO3YubGVuZ3RoIT0xOylkW3ZbMF1dLmxlbmd0aD09MD8oeS51bnNoaWZ0KHMuZ2V0RWxlbWVudEJ5SWQodi5zaGlmdCgpKSkseS51bnNoaWZ0KHMuZ2V0RWxlbWVudEJ5SWQodi5zaGlmdCgpKSkpOnY9Zyh2LnNoaWZ0KCkpLmNvbmNhdCh2KTt5LnVuc2hpZnQocy5nZXRFbGVtZW50QnlJZCh2LnNoaWZ0KCkpKTtmb3IodmFyIHggaW4gZClpZihkW3hdLmxlbmd0aClyZXR1cm4gbTtyZXR1cm4gbS5mb3VuZD0hMCxtLnRyYWlsPXRoaXMuc3Bhd24oeSwhMCksbX0sImhpZXJob2x6ZXIiKX0sUUU9byhmdW5jdGlvbigpe3ZhciBlPXRoaXMscj17fSxuPTAsaT0wLGE9W10scz1bXSxsPXt9LHU9byhmdW5jdGlvbihwLG0pe2Zvcih2YXIgZz1zLmxlbmd0aC0xLHk9W10sdj1lLnNwYXduKCk7c1tnXS54IT1wfHxzW2ddLnkhPW07KXkucHVzaChzLnBvcCgpLmVkZ2UpLGctLTt5LnB1c2gocy5wb3AoKS5lZGdlKSx5LmZvckVhY2goZnVuY3Rpb24oeCl7dmFyIGI9eC5jb25uZWN0ZWROb2RlcygpLmludGVyc2VjdGlvbihlKTt2Lm1lcmdlKHgpLGIuZm9yRWFjaChmdW5jdGlvbih3KXt2YXIgXz13LmlkKCksVD13LmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGUpO3YubWVyZ2UodykscltfXS5jdXRWZXJ0ZXg/di5tZXJnZShULmZpbHRlcihmdW5jdGlvbihFKXtyZXR1cm4gRS5pc0xvb3AoKX0pKTp2Lm1lcmdlKFQpfSl9KSxhLnB1c2godil9LCJidWlsZENvbXBvbmVudCIpLGg9byhmdW5jdGlvbiBkKHAsbSxnKXtwPT09ZyYmKGkrPTEpLHJbbV09e2lkOm4sbG93Om4rKyxjdXRWZXJ0ZXg6ITF9O3ZhciB5PWUuZ2V0RWxlbWVudEJ5SWQobSkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZSk7aWYoeS5zaXplKCk9PT0wKWEucHVzaChlLnNwYXduKGUuZ2V0RWxlbWVudEJ5SWQobSkpKTtlbHNle3ZhciB2LHgsYix3O3kuZm9yRWFjaChmdW5jdGlvbihfKXt2PV8uc291cmNlKCkuaWQoKSx4PV8udGFyZ2V0KCkuaWQoKSxiPXY9PT1tP3g6dixiIT09ZyYmKHc9Xy5pZCgpLGxbd118fChsW3ddPSEwLHMucHVzaCh7eDptLHk6YixlZGdlOl99KSksYiBpbiByP3JbbV0ubG93PU1hdGgubWluKHJbbV0ubG93LHJbYl0uaWQpOihkKHAsYixtKSxyW21dLmxvdz1NYXRoLm1pbihyW21dLmxvdyxyW2JdLmxvdyksclttXS5pZDw9cltiXS5sb3cmJihyW21dLmN1dFZlcnRleD0hMCx1KG0sYikpKSl9KX19LCJiaWNvbm5lY3RlZFNlYXJjaCIpO2UuZm9yRWFjaChmdW5jdGlvbihkKXtpZihkLmlzTm9kZSgpKXt2YXIgcD1kLmlkKCk7cCBpbiByfHwoaT0wLGgocCxwKSxyW3BdLmN1dFZlcnRleD1pPjEpfX0pO3ZhciBmPU9iamVjdC5rZXlzKHIpLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gcltkXS5jdXRWZXJ0ZXh9KS5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGUuZ2V0RWxlbWVudEJ5SWQoZCl9KTtyZXR1cm57Y3V0OmUuc3Bhd24oZiksY29tcG9uZW50czphfX0sImhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQiKSxQS2U9e2hvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQ6UUUsaHRiYzpRRSxodGI6UUUsaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZENvbXBvbmVudHM6UUV9LFpFPW8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9e30sbj0wLGk9W10sYT1bXSxzPWUuc3Bhd24oZSksbD1vKGZ1bmN0aW9uIHUoaCl7YS5wdXNoKGgpLHJbaF09e2luZGV4Om4sbG93Om4rKyxleHBsb3JlZDohMX07dmFyIGY9ZS5nZXRFbGVtZW50QnlJZChoKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKTtpZihmLmZvckVhY2goZnVuY3Rpb24oeSl7dmFyIHY9eS50YXJnZXQoKS5pZCgpO3YhPT1oJiYodiBpbiByfHx1KHYpLHJbdl0uZXhwbG9yZWR8fChyW2hdLmxvdz1NYXRoLm1pbihyW2hdLmxvdyxyW3ZdLmxvdykpKX0pLHJbaF0uaW5kZXg9PT1yW2hdLmxvdyl7Zm9yKHZhciBkPWUuc3Bhd24oKTs7KXt2YXIgcD1hLnBvcCgpO2lmKGQubWVyZ2UoZS5nZXRFbGVtZW50QnlJZChwKSkscltwXS5sb3c9cltoXS5pbmRleCxyW3BdLmV4cGxvcmVkPSEwLHA9PT1oKWJyZWFrfXZhciBtPWQuZWRnZXNXaXRoKGQpLGc9ZC5tZXJnZShtKTtpLnB1c2goZykscz1zLmRpZmZlcmVuY2UoZyl9fSwic3Ryb25nbHlDb25uZWN0ZWRTZWFyY2giKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lmKHUuaXNOb2RlKCkpe3ZhciBoPXUuaWQoKTtoIGluIHJ8fGwoaCl9fSkse2N1dDpzLGNvbXBvbmVudHM6aX19LCJ0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCIpLEJLZT17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6WkUsdHNjOlpFLHRzY2M6WkUsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOlpFfSx3Z2U9e307W0h4LGRqZSxwamUsZ2plLHZqZSxiamUsa2plLFhqZSxhMSxzMSx6UCxvS2UsYktlLENLZSxNS2UsT0tlLFBLZSxCS2VdLmZvckVhY2goZnVuY3Rpb24odCl7aXIod2dlLHQpfSk7VGdlPTAsa2dlPTEsRWdlPTIsS3U9byhmdW5jdGlvbiB0KGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChlKTt0aGlzLmlkPSJUaGVuYWJsZS8xLjAuNyIsdGhpcy5zdGF0ZT1UZ2UsdGhpcy5mdWxmaWxsVmFsdWU9dm9pZCAwLHRoaXMucmVqZWN0UmVhc29uPXZvaWQgMCx0aGlzLm9uRnVsZmlsbGVkPVtdLHRoaXMub25SZWplY3RlZD1bXSx0aGlzLnByb3h5PXt0aGVuOnRoaXMudGhlbi5iaW5kKHRoaXMpfSx0eXBlb2YgZT09ImZ1bmN0aW9uIiYmZS5jYWxsKHRoaXMsdGhpcy5mdWxmaWxsLmJpbmQodGhpcyksdGhpcy5yZWplY3QuYmluZCh0aGlzKSl9LCJhcGkiKTtLdS5wcm90b3R5cGU9e2Z1bGZpbGw6byhmdW5jdGlvbihlKXtyZXR1cm4gSnBlKHRoaXMsa2dlLCJmdWxmaWxsVmFsdWUiLGUpfSwiZnVsZmlsbCIpLHJlamVjdDpvKGZ1bmN0aW9uKGUpe3JldHVybiBKcGUodGhpcyxFZ2UsInJlamVjdFJlYXNvbiIsZSl9LCJyZWplY3QiKSx0aGVuOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9bmV3IEt1O3JldHVybiBuLm9uRnVsZmlsbGVkLnB1c2godG1lKGUsaSwiZnVsZmlsbCIpKSxuLm9uUmVqZWN0ZWQucHVzaCh0bWUocixpLCJyZWplY3QiKSksU2dlKG4pLGkucHJveHl9LCJ0aGVuIil9O0pwZT1vKGZ1bmN0aW9uKGUscixuLGkpe3JldHVybiBlLnN0YXRlPT09VGdlJiYoZS5zdGF0ZT1yLGVbbl09aSxTZ2UoZSkpLGV9LCJkZWxpdmVyIiksU2dlPW8oZnVuY3Rpb24oZSl7ZS5zdGF0ZT09PWtnZT9lbWUoZSwib25GdWxmaWxsZWQiLGUuZnVsZmlsbFZhbHVlKTplLnN0YXRlPT09RWdlJiZlbWUoZSwib25SZWplY3RlZCIsZS5yZWplY3RSZWFzb24pfSwiZXhlY3V0ZSIpLGVtZT1vKGZ1bmN0aW9uKGUscixuKXtpZihlW3JdLmxlbmd0aCE9PTApe3ZhciBpPWVbcl07ZVtyXT1bXTt2YXIgYT1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspaVtsXShuKX0sImZ1bmMiKTt0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iP3NldEltbWVkaWF0ZShhKTpzZXRUaW1lb3V0KGEsMCl9fSwiZXhlY3V0ZV9oYW5kbGVycyIpLHRtZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcltuXS5jYWxsKHIsaSk7ZWxzZXt2YXIgYTt0cnl7YT1lKGkpfWNhdGNoKHMpe3IucmVqZWN0KHMpO3JldHVybn1GS2UocixhKX19fSwicmVzb2x2ZXIiKSxGS2U9byhmdW5jdGlvbiB0KGUscil7aWYoZT09PXJ8fGUucHJveHk9PT1yKXtlLnJlamVjdChuZXcgVHlwZUVycm9yKCJjYW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmIikpO3JldHVybn12YXIgbjtpZihZaShyKT09PSJvYmplY3QiJiZyIT09bnVsbHx8dHlwZW9mIHI9PSJmdW5jdGlvbiIpdHJ5e249ci50aGVufWNhdGNoKGEpe2UucmVqZWN0KGEpO3JldHVybn1pZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil7dmFyIGk9ITE7dHJ5e24uY2FsbChyLGZ1bmN0aW9uKGEpe2l8fChpPSEwLGE9PT1yP2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNpcmN1bGFyIHRoZW5hYmxlIGNoYWluIikpOnQoZSxhKSl9LGZ1bmN0aW9uKGEpe2l8fChpPSEwLGUucmVqZWN0KGEpKX0pfWNhdGNoKGEpe2l8fGUucmVqZWN0KGEpfXJldHVybn1lLmZ1bGZpbGwocil9LCJyZXNvbHZlIik7S3UuYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS3UoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQubGVuZ3RoKSxpPTAsYT1vKGZ1bmN0aW9uKHUsaCl7blt1XT1oLGkrKyxpPT09dC5sZW5ndGgmJmUobil9LCJmdWxmaWxsIikscz0wO3M8dC5sZW5ndGg7cysrKShmdW5jdGlvbihsKXt2YXIgdT10W2xdLGg9dSE9bnVsbCYmdS50aGVuIT1udWxsO2lmKGgpdS50aGVuKGZ1bmN0aW9uKGQpe2EobCxkKX0sZnVuY3Rpb24oZCl7cihkKX0pO2Vsc2V7dmFyIGY9dTthKGwsZil9fSkocyl9KX07S3UucmVzb2x2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEt1KGZ1bmN0aW9uKGUscil7ZSh0KX0pfTtLdS5yZWplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLdShmdW5jdGlvbihlLHIpe3IodCl9KX07ZDE9dHlwZW9mIFByb21pc2U8InUiP1Byb21pc2U6S3UsR1A9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9dEIoZSksYT0haSxzPXRoaXMuX3ByaXZhdGU9aXIoe2R1cmF0aW9uOjFlM30scixuKTtpZihzLnRhcmdldD1lLHMuc3R5bGU9cy5zdHlsZXx8cy5jc3Mscy5zdGFydGVkPSExLHMucGxheWluZz0hMSxzLmhvb2tlZD0hMSxzLmFwcGx5aW5nPSExLHMucHJvZ3Jlc3M9MCxzLmNvbXBsZXRlcz1bXSxzLmZyYW1lcz1bXSxzLmNvbXBsZXRlJiZ0aShzLmNvbXBsZXRlKSYmcy5jb21wbGV0ZXMucHVzaChzLmNvbXBsZXRlKSxhKXt2YXIgbD1lLnBvc2l0aW9uKCk7cy5zdGFydFBvc2l0aW9uPXMuc3RhcnRQb3NpdGlvbnx8e3g6bC54LHk6bC55fSxzLnN0YXJ0U3R5bGU9cy5zdGFydFN0eWxlfHxlLmN5KCkuc3R5bGUoKS5nZXRBbmltYXRpb25TdGFydFN0eWxlKGUscy5zdHlsZSl9aWYoaSl7dmFyIHU9ZS5wYW4oKTtzLnN0YXJ0UGFuPXt4OnUueCx5OnUueX0scy5zdGFydFpvb209ZS56b29tKCl9dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXN9LCJBbmltYXRpb24iKSxWMD1HUC5wcm90b3R5cGU7aXIoVjAse2luc3RhbmNlU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4iYW5pbWF0aW9uIn0sImluc3RhbmNlU3RyaW5nIiksaG9vazpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtpZighZS5ob29rZWQpe3ZhciByLG49ZS50YXJnZXQuX3ByaXZhdGUuYW5pbWF0aW9uO2UucXVldWU/cj1uLnF1ZXVlOnI9bi5jdXJyZW50LHIucHVzaCh0aGlzKSxwbyhlLnRhcmdldCkmJmUudGFyZ2V0LmN5KCkuYWRkVG9BbmltYXRpb25Qb29sKGUudGFyZ2V0KSxlLmhvb2tlZD0hMH1yZXR1cm4gdGhpc30sImhvb2siKSxwbGF5Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLnByb2dyZXNzPT09MSYmKGUucHJvZ3Jlc3M9MCksZS5wbGF5aW5nPSEwLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30sInBsYXkiKSxwbGF5aW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wbGF5aW5nfSwicGxheWluZyIpLGFwcGx5Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLmFwcGx5aW5nPSEwLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30sImFwcGx5IiksYXBwbHlpbmc6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmFwcGx5aW5nfSwiYXBwbHlpbmciKSxwYXVzZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSx0aGlzfSwicGF1c2UiKSxzdG9wOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLnBsYXlpbmc9ITEsZS5zdGFydGVkPSExLGUuc3RvcHBlZD0hMCx0aGlzfSwic3RvcCIpLHJld2luZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCl9LCJyZXdpbmQiKSxmYXN0Zm9yd2FyZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMSl9LCJmYXN0Zm9yd2FyZCIpLHRpbWU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO3JldHVybiBlPT09dm9pZCAwP3IucHJvZ3Jlc3Mqci5kdXJhdGlvbjp0aGlzLnByb2dyZXNzKGUvci5kdXJhdGlvbil9LCJ0aW1lIikscHJvZ3Jlc3M6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG49ci5wbGF5aW5nO3JldHVybiBlPT09dm9pZCAwP3IucHJvZ3Jlc3M6KG4mJnRoaXMucGF1c2UoKSxyLnByb2dyZXNzPWUsci5zdGFydGVkPSExLG4mJnRoaXMucGxheSgpLHRoaXMpfSwicHJvZ3Jlc3MiKSxjb21wbGV0ZWQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnByb2dyZXNzPT09MX0sImNvbXBsZXRlZCIpLHJldmVyc2U6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUscj1lLnBsYXlpbmc7ciYmdGhpcy5wYXVzZSgpLGUucHJvZ3Jlc3M9MS1lLnByb2dyZXNzLGUuc3RhcnRlZD0hMTt2YXIgbj1vKGZ1bmN0aW9uKGgsZil7dmFyIGQ9ZVtoXTtkIT1udWxsJiYoZVtoXT1lW2ZdLGVbZl09ZCl9LCJzd2FwIik7aWYobigiem9vbSIsInN0YXJ0Wm9vbSIpLG4oInBhbiIsInN0YXJ0UGFuIiksbigicG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiksZS5zdHlsZSlmb3IodmFyIGk9MDtpPGUuc3R5bGUubGVuZ3RoO2krKyl7dmFyIGE9ZS5zdHlsZVtpXSxzPWEubmFtZSxsPWUuc3RhcnRTdHlsZVtzXTtlLnN0YXJ0U3R5bGVbc109YSxlLnN0eWxlW2ldPWx9cmV0dXJuIHImJnRoaXMucGxheSgpLHRoaXN9LCJyZXZlcnNlIikscHJvbWlzZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUsbjtzd2l0Y2goZSl7Y2FzZSJmcmFtZSI6bj1yLmZyYW1lczticmVhaztkZWZhdWx0OmNhc2UiY29tcGxldGUiOmNhc2UiY29tcGxldGVkIjpuPXIuY29tcGxldGVzfXJldHVybiBuZXcgZDEoZnVuY3Rpb24oaSxhKXtuLnB1c2goZnVuY3Rpb24oKXtpKCl9KX0pfSwicHJvbWlzZSIpfSk7VjAuY29tcGxldGU9VjAuY29tcGxldGVkO1YwLnJ1bj1WMC5wbGF5O1YwLnJ1bm5pbmc9VjAucGxheWluZzt6S2U9e2FuaW1hdGVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbigpe3ZhciByPXRoaXMsbj1yLmxlbmd0aCE9PXZvaWQgMCxpPW4/cjpbcl0sYT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFhLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciBzPWlbMF07aWYocylyZXR1cm4gcy5fcHJpdmF0ZS5hbmltYXRpb24uY3VycmVudC5sZW5ndGg+MH0sImFuaW1hdGVkSW1wbCIpfSwiYW5pbWF0ZWQiKSxjbGVhclF1ZXVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbigpe3ZhciByPXRoaXMsbj1yLmxlbmd0aCE9PXZvaWQgMCxpPW4/cjpbcl0sYT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFhLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2wuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfSwiY2xlYXJRdWV1ZUltcGwiKX0sImNsZWFyUXVldWUiKSxkZWxheTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBpLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6cixkdXJhdGlvbjpyLGNvbXBsZXRlOm59KTp0aGlzfSwiZGVsYXlJbXBsIil9LCJkZWxheSIpLGRlbGF5QW5pbWF0aW9uOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7cmV0dXJuIGkuc3R5bGVFbmFibGVkKCk/dGhpcy5hbmltYXRpb24oe2RlbGF5OnIsZHVyYXRpb246cixjb21wbGV0ZTpufSk6dGhpc30sImRlbGF5QW5pbWF0aW9uSW1wbCIpfSwiZGVsYXlBbmltYXRpb24iKSxhbmltYXRpb246byhmdW5jdGlvbigpe3JldHVybiBvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxhPWkubGVuZ3RoIT09dm9pZCAwLHM9YT9pOltpXSxsPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXMsdT0hYSxoPSF1O2lmKCFsLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBmPWwuc3R5bGUoKTtyPWlyKHt9LHIsbik7dmFyIGQ9T2JqZWN0LmtleXMocikubGVuZ3RoPT09MDtpZihkKXJldHVybiBuZXcgR1Aoc1swXSxyKTtzd2l0Y2goci5kdXJhdGlvbj09PXZvaWQgMCYmKHIuZHVyYXRpb249NDAwKSxyLmR1cmF0aW9uKXtjYXNlInNsb3ciOnIuZHVyYXRpb249NjAwO2JyZWFrO2Nhc2UiZmFzdCI6ci5kdXJhdGlvbj0yMDA7YnJlYWt9aWYoaCYmKHIuc3R5bGU9Zi5nZXRQcm9wc0xpc3Qoci5zdHlsZXx8ci5jc3MpLHIuY3NzPXZvaWQgMCksaCYmci5yZW5kZXJlZFBvc2l0aW9uIT1udWxsKXt2YXIgcD1yLnJlbmRlcmVkUG9zaXRpb24sbT1sLnBhbigpLGc9bC56b29tKCk7ci5wb3NpdGlvbj11Z2UocCxnLG0pfWlmKHUmJnIucGFuQnkhPW51bGwpe3ZhciB5PXIucGFuQnksdj1sLnBhbigpO3IucGFuPXt4OnYueCt5LngseTp2LnkreS55fX12YXIgeD1yLmNlbnRlcnx8ci5jZW50cmU7aWYodSYmeCE9bnVsbCl7dmFyIGI9bC5nZXRDZW50ZXJQYW4oeC5lbGVzLHIuem9vbSk7YiE9bnVsbCYmKHIucGFuPWIpfWlmKHUmJnIuZml0IT1udWxsKXt2YXIgdz1yLmZpdCxfPWwuZ2V0Rml0Vmlld3BvcnQody5lbGVzfHx3LmJvdW5kaW5nQm94LHcucGFkZGluZyk7XyE9bnVsbCYmKHIucGFuPV8ucGFuLHIuem9vbT1fLnpvb20pfWlmKHUmJlZyKHIuem9vbSkpe3ZhciBUPWwuZ2V0Wm9vbWVkVmlld3BvcnQoci56b29tKTtUIT1udWxsPyhULnpvb21lZCYmKHIuem9vbT1ULnpvb20pLFQucGFubmVkJiYoci5wYW49VC5wYW4pKTpyLnpvb209bnVsbH1yZXR1cm4gbmV3IEdQKHNbMF0scil9LCJhbmltYXRpb25JbXBsIil9LCJhbmltYXRpb24iKSxhbmltYXRlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsYT1pLmxlbmd0aCE9PXZvaWQgMCxzPWE/aTpbaV0sbD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFsLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO24mJihyPWlyKHt9LHIsbikpO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgaD1zW3VdLGY9aC5hbmltYXRlZCgpJiYoci5xdWV1ZT09PXZvaWQgMHx8ci5xdWV1ZSksZD1oLmFuaW1hdGlvbihyLGY/e3F1ZXVlOiEwfTp2b2lkIDApO2QucGxheSgpfXJldHVybiB0aGlzfSwiYW5pbWF0ZUltcGwiKX0sImFuaW1hdGUiKSxzdG9wOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsYT1pLmxlbmd0aCE9PXZvaWQgMCxzPWE/aTpbaV0sbD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFsLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXtmb3IodmFyIGg9c1t1XSxmPWguX3ByaXZhdGUsZD1mLmFuaW1hdGlvbi5jdXJyZW50LHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXSxnPW0uX3ByaXZhdGU7biYmKGcuZHVyYXRpb249MCl9ciYmKGYuYW5pbWF0aW9uLnF1ZXVlPVtdKSxufHwoZi5hbmltYXRpb24uY3VycmVudD1bXSl9cmV0dXJuIGwubm90aWZ5KCJkcmF3IiksdGhpc30sInN0b3BJbXBsIil9LCJzdG9wIil9LEdLZT1BcnJheS5pc0FycmF5LE42PUdLZSwkS2U9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sVktlPS9eXHcqJC87byhVS2UsImlzS2V5Iik7SEtlPVVLZSxXS2U9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLFlLZT0iW29iamVjdCBGdW5jdGlvbl0iLHFLZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFhLZT0iW29iamVjdCBQcm94eV0iO28oaktlLCJpc0Z1bmN0aW9uIik7S0tlPWpLZSxRS2U9QzZbIl9fY29yZS1qc19zaGFyZWRfXyJdLExQPVFLZSxybWU9ZnVuY3Rpb24oKXt2YXIgdD0vW14uXSskLy5leGVjKExQJiZMUC5rZXlzJiZMUC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIHQ/IlN5bWJvbChzcmMpXzEuIit0OiIifSgpO28oWktlLCJpc01hc2tlZCIpO0pLZT1aS2UsZVFlPUZ1bmN0aW9uLnByb3RvdHlwZSx0UWU9ZVFlLnRvU3RyaW5nO28oclFlLCJ0b1NvdXJjZSIpO25RZT1yUWUsaVFlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxhUWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sc1FlPUZ1bmN0aW9uLnByb3RvdHlwZSxvUWU9T2JqZWN0LnByb3RvdHlwZSxsUWU9c1FlLnRvU3RyaW5nLGNRZT1vUWUuaGFzT3duUHJvcGVydHksdVFlPVJlZ0V4cCgiXiIrbFFlLmNhbGwoY1FlKS5yZXBsYWNlKGlRZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtvKGhRZSwiYmFzZUlzTmF0aXZlIik7ZlFlPWhRZTtvKGRRZSwiZ2V0VmFsdWUkMSIpO3BRZT1kUWU7byhtUWUsImdldE5hdGl2ZSIpO3VCPW1RZSxnUWU9dUIoT2JqZWN0LCJjcmVhdGUiKSxxeD1nUWU7byh5UWUsImhhc2hDbGVhciIpO3ZRZT15UWU7byh4UWUsImhhc2hEZWxldGUiKTtiUWU9eFFlLHdRZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsVFFlPU9iamVjdC5wcm90b3R5cGUsa1FlPVRRZS5oYXNPd25Qcm9wZXJ0eTtvKEVRZSwiaGFzaEdldCIpO1NRZT1FUWUsQ1FlPU9iamVjdC5wcm90b3R5cGUsQVFlPUNRZS5oYXNPd25Qcm9wZXJ0eTtvKF9RZSwiaGFzaEhhcyIpO0xRZT1fUWUsRFFlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtvKE5RZSwiaGFzaFNldCIpO1JRZT1OUWU7byhwMSwiSGFzaCIpO3AxLnByb3RvdHlwZS5jbGVhcj12UWU7cDEucHJvdG90eXBlLmRlbGV0ZT1iUWU7cDEucHJvdG90eXBlLmdldD1TUWU7cDEucHJvdG90eXBlLmhhcz1MUWU7cDEucHJvdG90eXBlLnNldD1SUWU7bm1lPXAxO28oTVFlLCJsaXN0Q2FjaGVDbGVhciIpO0lRZT1NUWU7byhPUWUsImVxIik7Q2dlPU9RZTtvKFBRZSwiYXNzb2NJbmRleE9mIik7UjY9UFFlLEJRZT1BcnJheS5wcm90b3R5cGUsRlFlPUJRZS5zcGxpY2U7byh6UWUsImxpc3RDYWNoZURlbGV0ZSIpO0dRZT16UWU7bygkUWUsImxpc3RDYWNoZUdldCIpO1ZRZT0kUWU7byhVUWUsImxpc3RDYWNoZUhhcyIpO0hRZT1VUWU7byhXUWUsImxpc3RDYWNoZVNldCIpO1lRZT1XUWU7byhtMSwiTGlzdENhY2hlIik7bTEucHJvdG90eXBlLmNsZWFyPUlRZTttMS5wcm90b3R5cGUuZGVsZXRlPUdRZTttMS5wcm90b3R5cGUuZ2V0PVZRZTttMS5wcm90b3R5cGUuaGFzPUhRZTttMS5wcm90b3R5cGUuc2V0PVlRZTtxUWU9bTEsWFFlPXVCKEM2LCJNYXAiKSxqUWU9WFFlO28oS1FlLCJtYXBDYWNoZUNsZWFyIik7UVFlPUtRZTtvKFpRZSwiaXNLZXlhYmxlIik7SlFlPVpRZTtvKGVaZSwiZ2V0TWFwRGF0YSIpO002PWVaZTtvKHRaZSwibWFwQ2FjaGVEZWxldGUiKTtyWmU9dFplO28oblplLCJtYXBDYWNoZUdldCIpO2laZT1uWmU7byhhWmUsIm1hcENhY2hlSGFzIik7c1plPWFaZTtvKG9aZSwibWFwQ2FjaGVTZXQiKTtsWmU9b1plO28oZzEsIk1hcENhY2hlIik7ZzEucHJvdG90eXBlLmNsZWFyPVFRZTtnMS5wcm90b3R5cGUuZGVsZXRlPXJaZTtnMS5wcm90b3R5cGUuZ2V0PWlaZTtnMS5wcm90b3R5cGUuaGFzPXNaZTtnMS5wcm90b3R5cGUuc2V0PWxaZTtBZ2U9ZzEsY1plPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtvKGhCLCJtZW1vaXplIik7aEIuQ2FjaGU9QWdlO3VaZT1oQixoWmU9NTAwO28oZlplLCJtZW1vaXplQ2FwcGVkIik7ZFplPWZaZSxwWmU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csbVplPS9cXChcXCk/L2csZ1plPWRaZShmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5jaGFyQ29kZUF0KDApPT09NDYmJmUucHVzaCgiIiksdC5yZXBsYWNlKHBaZSxmdW5jdGlvbihyLG4saSxhKXtlLnB1c2goaT9hLnJlcGxhY2UobVplLCIkMSIpOm58fHIpfSksZX0pLF9nZT1nWmU7byh5WmUsImFycmF5TWFwIik7TGdlPXlaZSx2WmU9MS8wLGltZT1sMT9sMS5wcm90b3R5cGU6dm9pZCAwLGFtZT1pbWU/aW1lLnRvU3RyaW5nOnZvaWQgMDtvKERnZSwiYmFzZVRvU3RyaW5nIik7eFplPURnZTtvKGJaZSwidG9TdHJpbmckMSIpO05nZT1iWmU7byh3WmUsImNhc3RQYXRoIik7UmdlPXdaZSxUWmU9MS8wO28oa1plLCJ0b0tleSIpO2ZCPWtaZTtvKEVaZSwiYmFzZUdldCIpO1NaZT1FWmU7byhDWmUsImdldCIpO0FaZT1DWmUsX1plPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXVCKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaHt9fSgpLHNtZT1fWmU7byhMWmUsImJhc2VBc3NpZ25WYWx1ZSIpO0RaZT1MWmUsTlplPU9iamVjdC5wcm90b3R5cGUsUlplPU5aZS5oYXNPd25Qcm9wZXJ0eTtvKE1aZSwiYXNzaWduVmFsdWUiKTtJWmU9TVplLE9aZT05MDA3MTk5MjU0NzQwOTkxLFBaZT0vXig/OjB8WzEtOV1cZCopJC87byhCWmUsImlzSW5kZXgiKTtGWmU9QlplO28oelplLCJiYXNlU2V0Iik7R1plPXpaZTtvKCRaZSwic2V0Iik7VlplPSRaZTtvKFVaZSwiY29weUFycmF5Iik7SFplPVVaZTtvKFdaZSwidG9QYXRoIik7WVplPVdaZSxxWmU9e2RhdGE6byhmdW5jdGlvbihlKXt2YXIgcj17ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMSxhbGxvd0dldHRpbmc6ITEsc2V0dGluZ0V2ZW50OiJkYXRhIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixpbW11dGFibGVLZXlzOnt9LHVwZGF0ZVN0eWxlOiExLGJlZm9yZUdldDpvKGZ1bmN0aW9uKGkpe30sImJlZm9yZUdldCIpLGJlZm9yZVNldDpvKGZ1bmN0aW9uKGksYSl7fSwiYmVmb3JlU2V0Iiksb25TZXQ6byhmdW5jdGlvbihpKXt9LCJvblNldCIpLGNhblNldDpvKGZ1bmN0aW9uKGkpe3JldHVybiEwfSwiY2FuU2V0Iil9O3JldHVybiBlPWlyKHt9LHIsZSksbyhmdW5jdGlvbihpLGEpe3ZhciBzPWUsbD10aGlzLHU9bC5sZW5ndGghPT12b2lkIDAsaD11P2w6W2xdLGY9dT9sWzBdOmw7aWYoWnQoaSkpe3ZhciBkPWkuaW5kZXhPZigiLiIpIT09LTEscD1kJiZZWmUoaSk7aWYocy5hbGxvd0dldHRpbmcmJmE9PT12b2lkIDApe3ZhciBtO3JldHVybiBmJiYocy5iZWZvcmVHZXQoZikscCYmZi5fcHJpdmF0ZVtzLmZpZWxkXVtpXT09PXZvaWQgMD9tPUFaZShmLl9wcml2YXRlW3MuZmllbGRdLHApOm09Zi5fcHJpdmF0ZVtzLmZpZWxkXVtpXSksbX1lbHNlIGlmKHMuYWxsb3dTZXR0aW5nJiZhIT09dm9pZCAwKXt2YXIgZz0hcy5pbW11dGFibGVLZXlzW2ldO2lmKGcpe3ZhciB5PUhtZSh7fSxpLGEpO3MuYmVmb3JlU2V0KGwseSk7Zm9yKHZhciB2PTAseD1oLmxlbmd0aDt2PHg7disrKXt2YXIgYj1oW3ZdO3MuY2FuU2V0KGIpJiYocCYmZi5fcHJpdmF0ZVtzLmZpZWxkXVtpXT09PXZvaWQgMD9WWmUoYi5fcHJpdmF0ZVtzLmZpZWxkXSxwLGEpOmIuX3ByaXZhdGVbcy5maWVsZF1baV09YSl9cy51cGRhdGVTdHlsZSYmbC51cGRhdGVTdHlsZSgpLHMub25TZXQobCkscy5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmbFtzLnRyaWdnZXJGbk5hbWVdKHMuc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYocy5hbGxvd1NldHRpbmcmJlZyKGkpKXt2YXIgdz1pLF8sVCxFPU9iamVjdC5rZXlzKHcpO3MuYmVmb3JlU2V0KGwsdyk7Zm9yKHZhciBMPTA7TDxFLmxlbmd0aDtMKyspe189RVtMXSxUPXdbX107dmFyIEM9IXMuaW1tdXRhYmxlS2V5c1tfXTtpZihDKWZvcih2YXIgQT0wO0E8aC5sZW5ndGg7QSsrKXt2YXIgST1oW0FdO3MuY2FuU2V0KEkpJiYoSS5fcHJpdmF0ZVtzLmZpZWxkXVtfXT1UKX19cy51cGRhdGVTdHlsZSYmbC51cGRhdGVTdHlsZSgpLHMub25TZXQobCkscy5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmbFtzLnRyaWdnZXJGbk5hbWVdKHMuc2V0dGluZ0V2ZW50KX1lbHNlIGlmKHMuYWxsb3dCaW5kaW5nJiZ0aShpKSl7dmFyIEQ9aTtsLm9uKHMuYmluZGluZ0V2ZW50LEQpfWVsc2UgaWYocy5hbGxvd0dldHRpbmcmJmk9PT12b2lkIDApe3ZhciBrO3JldHVybiBmJiYocy5iZWZvcmVHZXQoZiksaz1mLl9wcml2YXRlW3MuZmllbGRdKSxrfXJldHVybiBsfSwiZGF0YUltcGwiKX0sImRhdGEiKSxyZW1vdmVEYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9e2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiExLGltbXV0YWJsZUtleXM6e319O3JldHVybiBlPWlyKHt9LHIsZSksbyhmdW5jdGlvbihpKXt2YXIgYT1lLHM9dGhpcyxsPXMubGVuZ3RoIT09dm9pZCAwLHU9bD9zOltzXTtpZihadChpKSl7Zm9yKHZhciBoPWkuc3BsaXQoL1xzKy8pLGY9aC5sZW5ndGgsZD0wO2Q8ZjtkKyspe3ZhciBwPWhbZF07aWYoIVNmKHApKXt2YXIgbT0hYS5pbW11dGFibGVLZXlzW3BdO2lmKG0pZm9yKHZhciBnPTAseT11Lmxlbmd0aDtnPHk7ZysrKXVbZ10uX3ByaXZhdGVbYS5maWVsZF1bcF09dm9pZCAwfX1hLnRyaWdnZXJFdmVudCYmc1thLnRyaWdnZXJGbk5hbWVdKGEuZXZlbnQpfWVsc2UgaWYoaT09PXZvaWQgMCl7Zm9yKHZhciB2PTAseD11Lmxlbmd0aDt2PHg7disrKWZvcih2YXIgYj11W3ZdLl9wcml2YXRlW2EuZmllbGRdLHc9T2JqZWN0LmtleXMoYiksXz0wO188dy5sZW5ndGg7XysrKXt2YXIgVD13W19dLEU9IWEuaW1tdXRhYmxlS2V5c1tUXTtFJiYoYltUXT12b2lkIDApfWEudHJpZ2dlckV2ZW50JiZzW2EudHJpZ2dlckZuTmFtZV0oYS5ldmVudCl9cmV0dXJuIHN9LCJyZW1vdmVEYXRhSW1wbCIpfSwicmVtb3ZlRGF0YSIpfSxYWmU9e2V2ZW50QWxpYXNlc09uOm8oZnVuY3Rpb24oZSl7dmFyIHI9ZTtyLmFkZExpc3RlbmVyPXIubGlzdGVuPXIuYmluZD1yLm9uLHIudW5saXN0ZW49ci51bmJpbmQ9ci5vZmY9ci5yZW1vdmVMaXN0ZW5lcixyLnRyaWdnZXI9ci5lbWl0LHIucG9uPXIucHJvbWlzZU9uPWZ1bmN0aW9uKG4saSl7dmFyIGE9dGhpcyxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbmV3IGQxKGZ1bmN0aW9uKGwsdSl7dmFyIGg9byhmdW5jdGlvbihtKXthLm9mZi5hcHBseShhLGQpLGwobSl9LCJjYWxsYmFjayIpLGY9cy5jb25jYXQoW2hdKSxkPWYuY29uY2F0KFtdKTthLm9uLmFwcGx5KGEsZil9KX19LCJldmVudEFsaWFzZXNPbiIpfSxzbj17fTtbektlLHFaZSxYWmVdLmZvckVhY2goZnVuY3Rpb24odCl7aXIoc24sdCl9KTtqWmU9e2FuaW1hdGU6c24uYW5pbWF0ZSgpLGFuaW1hdGlvbjpzbi5hbmltYXRpb24oKSxhbmltYXRlZDpzbi5hbmltYXRlZCgpLGNsZWFyUXVldWU6c24uY2xlYXJRdWV1ZSgpLGRlbGF5OnNuLmRlbGF5KCksZGVsYXlBbmltYXRpb246c24uZGVsYXlBbmltYXRpb24oKSxzdG9wOnNuLnN0b3AoKX0sbzY9e2NsYXNzZXM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKGU9PT12b2lkIDApe3ZhciBuPVtdO3JldHVybiByWzBdLl9wcml2YXRlLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihnKXtyZXR1cm4gbi5wdXNoKGcpfSksbn1lbHNlIHduKGUpfHwoZT0oZXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIGk9W10sYT1uZXcgZjEoZSkscz0wO3M8ci5sZW5ndGg7cysrKXtmb3IodmFyIGw9cltzXSx1PWwuX3ByaXZhdGUsaD11LmNsYXNzZXMsZj0hMSxkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBwPWVbZF0sbT1oLmhhcyhwKTtpZighbSl7Zj0hMDticmVha319Znx8KGY9aC5zaXplIT09ZS5sZW5ndGgpLGYmJih1LmNsYXNzZXM9YSxpLnB1c2gobCkpfXJldHVybiBpLmxlbmd0aD4wJiZ0aGlzLnNwYXduKGkpLnVwZGF0ZVN0eWxlKCkuZW1pdCgiY2xhc3MiKSxyfSwiY2xhc3NlcyIpLGFkZENsYXNzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZSwhMCl9LCJhZGRDbGFzcyIpLGhhc0NsYXNzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXTtyZXR1cm4gciE9bnVsbCYmci5fcHJpdmF0ZS5jbGFzc2VzLmhhcyhlKX0sImhhc0NsYXNzIiksdG9nZ2xlQ2xhc3M6byhmdW5jdGlvbihlLHIpe3duKGUpfHwoZT1lLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIG49dGhpcyxpPXI9PT12b2lkIDAsYT1bXSxzPTAsbD1uLmxlbmd0aDtzPGw7cysrKWZvcih2YXIgdT1uW3NdLGg9dS5fcHJpdmF0ZS5jbGFzc2VzLGY9ITEsZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLG09aC5oYXMocCksZz0hMTtyfHxpJiYhbT8oaC5hZGQocCksZz0hMCk6KCFyfHxpJiZtKSYmKGguZGVsZXRlKHApLGc9ITApLCFmJiZnJiYoYS5wdXNoKHUpLGY9ITApfXJldHVybiBhLmxlbmd0aD4wJiZ0aGlzLnNwYXduKGEpLnVwZGF0ZVN0eWxlKCkuZW1pdCgiY2xhc3MiKSxufSwidG9nZ2xlQ2xhc3MiKSxyZW1vdmVDbGFzczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGUsITEpfSwicmVtb3ZlQ2xhc3MiKSxmbGFzaENsYXNzOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpcj0yNTA7ZWxzZSBpZihyPT09MClyZXR1cm4gbjtyZXR1cm4gbi5hZGRDbGFzcyhlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5yZW1vdmVDbGFzcyhlKX0sciksbn0sImZsYXNoQ2xhc3MiKX07bzYuY2xhc3NOYW1lPW82LmNsYXNzTmFtZXM9bzYuY2xhc3Nlczskcj17bWV0YUNoYXI6IltcXCFcXFwiXFwjXFwkXFwlXFwmXFwnXFwoXFwpXFwqXFwrXFwsXFwuXFwvXFw6XFw7XFw8XFw9XFw+XFw/XFxAXFxbXFxdXFxeXFxgXFx7XFx8XFx9XFx+XSIsY29tcGFyYXRvck9wOiI9fFxcIT18Pnw+PXw8fDw9fFxcJD18XFxePXxcXCo9Iixib29sT3A6IlxcP3xcXCF8XFxeIixzdHJpbmc6YCIoPzpcXFxcInxbXiJdKSoifCcoPzpcXFxcJ3xbXiddKSonYCxudW1iZXI6V2ksbWV0YToiZGVncmVlfGluZGVncmVlfG91dGRlZ3JlZSIsc2VwYXJhdG9yOiJcXHMqLFxccyoiLGRlc2NlbmRhbnQ6IlxccysiLGNoaWxkOiJcXHMrPlxccysiLHN1YmplY3Q6IlxcJCIsZ3JvdXA6Im5vZGV8ZWRnZXxcXCoiLGRpcmVjdGVkRWRnZToiXFxzKy0+XFxzKyIsdW5kaXJlY3RlZEVkZ2U6Ilxccys8LT5cXHMrIn07JHIudmFyaWFibGU9Iig/OltcXHctLl18KD86XFxcXCIrJHIubWV0YUNoYXIrIikpKyI7JHIuY2xhc3NOYW1lPSIoPzpbXFx3LV18KD86XFxcXCIrJHIubWV0YUNoYXIrIikpKyI7JHIudmFsdWU9JHIuc3RyaW5nKyJ8Iiskci5udW1iZXI7JHIuaWQ9JHIudmFyaWFibGU7KGZ1bmN0aW9uKCl7dmFyIHQsZSxyO2Zvcih0PSRyLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHI9MDtyPHQubGVuZ3RoO3IrKyllPXRbcl0sJHIuY29tcGFyYXRvck9wKz0ifEAiK2U7Zm9yKHQ9JHIuY29tcGFyYXRvck9wLnNwbGl0KCJ8Iikscj0wO3I8dC5sZW5ndGg7cisrKWU9dFtyXSwhKGUuaW5kZXhPZigiISIpPj0wKSYmZSE9PSI9IiYmKCRyLmNvbXBhcmF0b3JPcCs9InxcXCEiK2UpfSkoKTtwbj1vKGZ1bmN0aW9uKCl7cmV0dXJue2NoZWNrczpbXX19LCJuZXdRdWVyeSIpLFB0PXtHUk9VUDowLENPTExFQ1RJT046MSxGSUxURVI6MixEQVRBX0NPTVBBUkU6MyxEQVRBX0VYSVNUOjQsREFUQV9CT09MOjUsTUVUQV9DT01QQVJFOjYsU1RBVEU6NyxJRDo4LENMQVNTOjksVU5ESVJFQ1RFRF9FREdFOjEwLERJUkVDVEVEX0VER0U6MTEsTk9ERV9TT1VSQ0U6MTIsTk9ERV9UQVJHRVQ6MTMsTk9ERV9ORUlHSEJPUjoxNCxDSElMRDoxNSxERVNDRU5EQU5UOjE2LFBBUkVOVDoxNyxBTkNFU1RPUjoxOCxDT01QT1VORF9TUExJVDoxOSxUUlVFOjIwfSwkUD1be3NlbGVjdG9yOiI6c2VsZWN0ZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuc2VsZWN0ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNlbGVjdGFibGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5zZWxlY3RhYmxlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuc2VsZWN0YWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpsb2NrZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NrZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5sb2NrZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dmlzaWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZpc2libGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6aGlkZGVuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUudmlzaWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyYW5zcGFyZW50KCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmdyYWJiZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5ncmFiYmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmZyZWUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5ncmFiYmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW1vdmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmluc2lkZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnJlbW92ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6Z3JhYmJhYmxlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJhYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuZ3JhYmJhYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmFuaW1hdGVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuYW5pbWF0ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5hbmltYXRlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmFuaW1hdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzUGFyZW50KCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmNoaWxkbGVzcyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGRsZXNzKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmNoaWxkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc09ycGhhbigpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpub25vcnBoYW4iLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmNvbXBvdW5kIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNOb2RlKCk/ZS5pc1BhcmVudCgpOmUuc291cmNlKCkuaXNQYXJlbnQoKXx8ZS50YXJnZXQoKS5pc1BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNMb29wKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnNpbXBsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU2ltcGxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmFjdGl2ZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmFjdGl2ZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpiYWNrZ3JvdW5kaW5nIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuYmFja2dyb3VuZGluZygpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpub25iYWNrZ3JvdW5kaW5nIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuYmFja2dyb3VuZGluZygpfSwibWF0Y2hlcyIpfV0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvWGUodC5zZWxlY3RvcixlLnNlbGVjdG9yKX0pLEtaZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlLHI9MDtyPCRQLmxlbmd0aDtyKyspZT0kUFtyXSx0W2Uuc2VsZWN0b3JdPWUubWF0Y2hlcztyZXR1cm4gdH0oKSxRWmU9byhmdW5jdGlvbihlLHIpe3JldHVybiBLWmVbZV0ocil9LCJzdGF0ZVNlbGVjdG9yTWF0Y2hlcyIpLFpaZT0iKCIrJFAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdG9yfSkuam9pbigifCIpKyIpIixLZz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXCgiKyRyLm1ldGFDaGFyKyIpIiwiZyIpLGZ1bmN0aW9uKHIsbil7cmV0dXJuIG59KX0sImNsZWFuTWV0YUNoYXJzIiksYmY9byhmdW5jdGlvbihlLHIsbil7ZVtlLmxlbmd0aC0xXT1ufSwicmVwbGFjZUxhc3RRdWVyeSIpLFZQPVt7bmFtZToiZ3JvdXAiLHF1ZXJ5OiEwLHJlZ2V4OiIoIiskci5ncm91cCsiKSIscG9wdWxhdGU6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9VWwobiwxKSxhPWlbMF07ci5jaGVja3MucHVzaCh7dHlwZTpQdC5HUk9VUCx2YWx1ZTphPT09IioiP2E6YSsicyJ9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJzdGF0ZSIscXVlcnk6ITAscmVnZXg6WlplLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVVsKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6UHQuU1RBVEUsdmFsdWU6YX0pfSwicG9wdWxhdGUiKX0se25hbWU6ImlkIixxdWVyeTohMCxyZWdleDoiXFwjKCIrJHIuaWQrIikiLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVVsKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6UHQuSUQsdmFsdWU6S2coYSl9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJjbGFzc05hbWUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXC4oIiskci5jbGFzc05hbWUrIikiLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVVsKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6UHQuQ0xBU1MsdmFsdWU6S2coYSl9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJkYXRhRXhpc3RzIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiKyRyLnZhcmlhYmxlKyIpXFxzKlxcXSIscG9wdWxhdGU6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9VWwobiwxKSxhPWlbMF07ci5jaGVja3MucHVzaCh7dHlwZTpQdC5EQVRBX0VYSVNULGZpZWxkOktnKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGF0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXHMqKCIrJHIudmFyaWFibGUrIilcXHMqKCIrJHIuY29tcGFyYXRvck9wKyIpXFxzKigiKyRyLnZhbHVlKyIpXFxzKlxcXSIscG9wdWxhdGU6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9VWwobiwzKSxhPWlbMF0scz1pWzFdLGw9aVsyXSx1PW5ldyBSZWdFeHAoIl4iKyRyLnN0cmluZysiJCIpLmV4ZWMobCkhPW51bGw7dT9sPWwuc3Vic3RyaW5nKDEsbC5sZW5ndGgtMSk6bD1wYXJzZUZsb2F0KGwpLHIuY2hlY2tzLnB1c2goe3R5cGU6UHQuREFUQV9DT01QQVJFLGZpZWxkOktnKGEpLG9wZXJhdG9yOnMsdmFsdWU6bH0pfSwicG9wdWxhdGUiKX0se25hbWU6ImRhdGFCb29sIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiKyRyLmJvb2xPcCsiKVxccyooIiskci52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVVsKG4sMiksYT1pWzBdLHM9aVsxXTtyLmNoZWNrcy5wdXNoKHt0eXBlOlB0LkRBVEFfQk9PTCxmaWVsZDpLZyhzKSxvcGVyYXRvcjphfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToibWV0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXFtcXHMqKCIrJHIubWV0YSsiKVxccyooIiskci5jb21wYXJhdG9yT3ArIilcXHMqKCIrJHIubnVtYmVyKyIpXFxzKlxcXVxcXSIscG9wdWxhdGU6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9VWwobiwzKSxhPWlbMF0scz1pWzFdLGw9aVsyXTtyLmNoZWNrcy5wdXNoKHt0eXBlOlB0Lk1FVEFfQ09NUEFSRSxmaWVsZDpLZyhhKSxvcGVyYXRvcjpzLHZhbHVlOnBhcnNlRmxvYXQobCl9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJuZXh0UXVlcnkiLHNlcGFyYXRvcjohMCxyZWdleDokci5zZXBhcmF0b3IscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuY3VycmVudFN1YmplY3QsaT1lLmVkZ2VDb3VudCxhPWUuY29tcG91bmRDb3VudCxzPWVbZS5sZW5ndGgtMV07biE9bnVsbCYmKHMuc3ViamVjdD1uLGUuY3VycmVudFN1YmplY3Q9bnVsbCkscy5lZGdlQ291bnQ9aSxzLmNvbXBvdW5kQ291bnQ9YSxlLmVkZ2VDb3VudD0wLGUuY29tcG91bmRDb3VudD0wO3ZhciBsPWVbZS5sZW5ndGgrK109cG4oKTtyZXR1cm4gbH0sInBvcHVsYXRlIil9LHtuYW1lOiJkaXJlY3RlZEVkZ2UiLHNlcGFyYXRvcjohMCxyZWdleDokci5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPXBuKCksaT1yLGE9cG4oKTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTpQdC5ESVJFQ1RFRF9FREdFLHNvdXJjZTppLHRhcmdldDphfSksYmYoZSxyLG4pLGUuZWRnZUNvdW50KyssYX1lbHNle3ZhciBzPXBuKCksbD1yLHU9cG4oKTtyZXR1cm4gcy5jaGVja3MucHVzaCh7dHlwZTpQdC5OT0RFX1NPVVJDRSxzb3VyY2U6bCx0YXJnZXQ6dX0pLGJmKGUscixzKSxlLmVkZ2VDb3VudCsrLHV9fSwicG9wdWxhdGUiKX0se25hbWU6InVuZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6JHIudW5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPXBuKCksaT1yLGE9cG4oKTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTpQdC5VTkRJUkVDVEVEX0VER0Usbm9kZXM6W2ksYV19KSxiZihlLHIsbiksZS5lZGdlQ291bnQrKyxhfWVsc2V7dmFyIHM9cG4oKSxsPXIsdT1wbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOlB0Lk5PREVfTkVJR0hCT1Isbm9kZTpsLG5laWdoYm9yOnV9KSxiZihlLHIscyksdX19LCJwb3B1bGF0ZSIpfSx7bmFtZToiY2hpbGQiLHNlcGFyYXRvcjohMCxyZWdleDokci5jaGlsZCxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscil7aWYoZS5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIG49cG4oKSxpPXBuKCksYT1lW2UubGVuZ3RoLTFdO3JldHVybiBuLmNoZWNrcy5wdXNoKHt0eXBlOlB0LkNISUxELHBhcmVudDphLGNoaWxkOml9KSxiZihlLHIsbiksZS5jb21wb3VuZENvdW50KyssaX1lbHNlIGlmKGUuY3VycmVudFN1YmplY3Q9PT1yKXt2YXIgcz1wbigpLGw9ZVtlLmxlbmd0aC0xXSx1PXBuKCksaD1wbigpLGY9cG4oKSxkPXBuKCk7cmV0dXJuIHMuY2hlY2tzLnB1c2goe3R5cGU6UHQuQ09NUE9VTkRfU1BMSVQsbGVmdDpsLHJpZ2h0OnUsc3ViamVjdDpofSksaC5jaGVja3M9ci5jaGVja3Msci5jaGVja3M9W3t0eXBlOlB0LlRSVUV9XSxkLmNoZWNrcy5wdXNoKHt0eXBlOlB0LlRSVUV9KSx1LmNoZWNrcy5wdXNoKHt0eXBlOlB0LlBBUkVOVCxwYXJlbnQ6ZCxjaGlsZDpmfSksYmYoZSxsLHMpLGUuY3VycmVudFN1YmplY3Q9aCxlLmNvbXBvdW5kQ291bnQrKyxmfWVsc2V7dmFyIHA9cG4oKSxtPXBuKCksZz1be3R5cGU6UHQuUEFSRU5ULHBhcmVudDpwLGNoaWxkOm19XTtyZXR1cm4gcC5jaGVja3M9ci5jaGVja3Msci5jaGVja3M9ZyxlLmNvbXBvdW5kQ291bnQrKyxtfX0sInBvcHVsYXRlIil9LHtuYW1lOiJkZXNjZW5kYW50IixzZXBhcmF0b3I6ITAscmVnZXg6JHIuZGVzY2VuZGFudCxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscil7aWYoZS5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIG49cG4oKSxpPXBuKCksYT1lW2UubGVuZ3RoLTFdO3JldHVybiBuLmNoZWNrcy5wdXNoKHt0eXBlOlB0LkRFU0NFTkRBTlQsYW5jZXN0b3I6YSxkZXNjZW5kYW50Oml9KSxiZihlLHIsbiksZS5jb21wb3VuZENvdW50KyssaX1lbHNlIGlmKGUuY3VycmVudFN1YmplY3Q9PT1yKXt2YXIgcz1wbigpLGw9ZVtlLmxlbmd0aC0xXSx1PXBuKCksaD1wbigpLGY9cG4oKSxkPXBuKCk7cmV0dXJuIHMuY2hlY2tzLnB1c2goe3R5cGU6UHQuQ09NUE9VTkRfU1BMSVQsbGVmdDpsLHJpZ2h0OnUsc3ViamVjdDpofSksaC5jaGVja3M9ci5jaGVja3Msci5jaGVja3M9W3t0eXBlOlB0LlRSVUV9XSxkLmNoZWNrcy5wdXNoKHt0eXBlOlB0LlRSVUV9KSx1LmNoZWNrcy5wdXNoKHt0eXBlOlB0LkFOQ0VTVE9SLGFuY2VzdG9yOmQsZGVzY2VuZGFudDpmfSksYmYoZSxsLHMpLGUuY3VycmVudFN1YmplY3Q9aCxlLmNvbXBvdW5kQ291bnQrKyxmfWVsc2V7dmFyIHA9cG4oKSxtPXBuKCksZz1be3R5cGU6UHQuQU5DRVNUT1IsYW5jZXN0b3I6cCxkZXNjZW5kYW50Om19XTtyZXR1cm4gcC5jaGVja3M9ci5jaGVja3Msci5jaGVja3M9ZyxlLmNvbXBvdW5kQ291bnQrKyxtfX0sInBvcHVsYXRlIil9LHtuYW1lOiJzdWJqZWN0Iixtb2RpZmllcjohMCxyZWdleDokci5zdWJqZWN0LHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0IT1udWxsJiZlLmN1cnJlbnRTdWJqZWN0IT09cilyZXR1cm4gb24oIlJlZGVmaW5pdGlvbiBvZiBzdWJqZWN0IGluIHNlbGVjdG9yIGAiK2UudG9TdHJpbmcoKSsiYCIpLCExO2UuY3VycmVudFN1YmplY3Q9cjt2YXIgbj1lW2UubGVuZ3RoLTFdLGk9bi5jaGVja3NbMF0sYT1pPT1udWxsP251bGw6aS50eXBlO2E9PT1QdC5ESVJFQ1RFRF9FREdFP2kudHlwZT1QdC5OT0RFX1RBUkdFVDphPT09UHQuVU5ESVJFQ1RFRF9FREdFJiYoaS50eXBlPVB0Lk5PREVfTkVJR0hCT1IsaS5ub2RlPWkubm9kZXNbMV0saS5uZWlnaGJvcj1pLm5vZGVzWzBdLGkubm9kZXM9bnVsbCl9LCJwb3B1bGF0ZSIpfV07VlAuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWdleE9iaj1uZXcgUmVnRXhwKCJeIit0LnJlZ2V4KX0pO0paZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcixuLGksYT0wO2E8VlAubGVuZ3RoO2ErKyl7dmFyIHM9VlBbYV0sbD1zLm5hbWUsdT1lLm1hdGNoKHMucmVnZXhPYmopO2lmKHUhPW51bGwpe249dSxyPXMsaT1sO3ZhciBoPXVbMF07ZT1lLnN1YnN0cmluZyhoLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOnIsbWF0Y2g6bixuYW1lOmkscmVtYWluaW5nOmV9fSwiY29uc3VtZUV4cHIiKSxlSmU9byhmdW5jdGlvbihlKXt2YXIgcj1lLm1hdGNoKC9eXHMrLyk7aWYocil7dmFyIG49clswXTtlPWUuc3Vic3RyaW5nKG4ubGVuZ3RoKX1yZXR1cm4gZX0sImNvbnN1bWVXaGl0ZXNwYWNlIiksdEplPW8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuaW5wdXRUZXh0PWUsaT1yWzBdPXBuKCk7Zm9yKHIubGVuZ3RoPTEsbj1lSmUobik7Oyl7dmFyIGE9SlplKG4pO2lmKGEuZXhwcj09bnVsbClyZXR1cm4gb24oIlRoZSBzZWxlY3RvciBgIitlKyJgaXMgaW52YWxpZCIpLCExO3ZhciBzPWEubWF0Y2guc2xpY2UoMSksbD1hLmV4cHIucG9wdWxhdGUocixpLHMpO2lmKGw9PT0hMSlyZXR1cm4hMTtpZihsIT1udWxsJiYoaT1sKSxuPWEucmVtYWluaW5nLG4ubWF0Y2goL15ccyokLykpYnJlYWt9dmFyIHU9cltyLmxlbmd0aC0xXTtyLmN1cnJlbnRTdWJqZWN0IT1udWxsJiYodS5zdWJqZWN0PXIuY3VycmVudFN1YmplY3QpLHUuZWRnZUNvdW50PXIuZWRnZUNvdW50LHUuY29tcG91bmRDb3VudD1yLmNvbXBvdW5kQ291bnQ7Zm9yKHZhciBoPTA7aDxyLmxlbmd0aDtoKyspe3ZhciBmPXJbaF07aWYoZi5jb21wb3VuZENvdW50PjAmJmYuZWRnZUNvdW50PjApcmV0dXJuIG9uKCJUaGUgc2VsZWN0b3IgYCIrZSsiYCBpcyBpbnZhbGlkIGJlY2F1c2UgaXQgdXNlcyBib3RoIGEgY29tcG91bmQgc2VsZWN0b3IgYW5kIGFuIGVkZ2Ugc2VsZWN0b3IiKSwhMTtpZihmLmVkZ2VDb3VudD4xKXJldHVybiBvbigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgbXVsdGlwbGUgZWRnZSBzZWxlY3RvcnMiKSwhMTtmLmVkZ2VDb3VudD09PTEmJm9uKCJUaGUgc2VsZWN0b3IgYCIrZSsiYCBpcyBkZXByZWNhdGVkLiAgRWRnZSBzZWxlY3RvcnMgZG8gbm90IHRha2UgZWZmZWN0IG9uIGNoYW5nZXMgdG8gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMgYWZ0ZXIgYW4gZWRnZSBpcyBhZGRlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBVc2UgYSBjbGFzcyBvciBkYXRhIHNlbGVjdG9yIG9uIGVkZ2VzIGluc3RlYWQsIHVwZGF0aW5nIHRoZSBjbGFzcyBvciBkYXRhIG9mIGFuIGVkZ2Ugd2hlbiB5b3VyIGFwcCBkZXRlY3RzIGEgY2hhbmdlIGluIHNvdXJjZSBvciB0YXJnZXQgbm9kZXMuIil9cmV0dXJuITB9LCJwYXJzZSIpLHJKZT1vKGZ1bmN0aW9uKCl7aWYodGhpcy50b1N0cmluZ0NhY2hlIT1udWxsKXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU7Zm9yKHZhciBlPW8oZnVuY3Rpb24oZil7cmV0dXJuIGY/PyIifSwiY2xlYW4iKSxyPW8oZnVuY3Rpb24oZil7cmV0dXJuIFp0KGYpPyciJytmKyciJzplKGYpfSwiY2xlYW5WYWwiKSxuPW8oZnVuY3Rpb24oZil7cmV0dXJuIiAiK2YrIiAifSwic3BhY2UiKSxpPW8oZnVuY3Rpb24oZixkKXt2YXIgcD1mLnR5cGUsbT1mLnZhbHVlO3N3aXRjaChwKXtjYXNlIFB0LkdST1VQOnt2YXIgZz1lKG0pO3JldHVybiBnLnN1YnN0cmluZygwLGcubGVuZ3RoLTEpfWNhc2UgUHQuREFUQV9DT01QQVJFOnt2YXIgeT1mLmZpZWxkLHY9Zi5vcGVyYXRvcjtyZXR1cm4iWyIreStuKGUodikpK3IobSkrIl0ifWNhc2UgUHQuREFUQV9CT09MOnt2YXIgeD1mLm9wZXJhdG9yLGI9Zi5maWVsZDtyZXR1cm4iWyIrZSh4KStiKyJdIn1jYXNlIFB0LkRBVEFfRVhJU1Q6e3ZhciB3PWYuZmllbGQ7cmV0dXJuIlsiK3crIl0ifWNhc2UgUHQuTUVUQV9DT01QQVJFOnt2YXIgXz1mLm9wZXJhdG9yLFQ9Zi5maWVsZDtyZXR1cm4iW1siK1QrbihlKF8pKStyKG0pKyJdXSJ9Y2FzZSBQdC5TVEFURTpyZXR1cm4gbTtjYXNlIFB0LklEOnJldHVybiIjIittO2Nhc2UgUHQuQ0xBU1M6cmV0dXJuIi4iK207Y2FzZSBQdC5QQVJFTlQ6Y2FzZSBQdC5DSElMRDpyZXR1cm4gYShmLnBhcmVudCxkKStuKCI+IikrYShmLmNoaWxkLGQpO2Nhc2UgUHQuQU5DRVNUT1I6Y2FzZSBQdC5ERVNDRU5EQU5UOnJldHVybiBhKGYuYW5jZXN0b3IsZCkrIiAiK2EoZi5kZXNjZW5kYW50LGQpO2Nhc2UgUHQuQ09NUE9VTkRfU1BMSVQ6e3ZhciBFPWEoZi5sZWZ0LGQpLEw9YShmLnN1YmplY3QsZCksQz1hKGYucmlnaHQsZCk7cmV0dXJuIEUrKEUubGVuZ3RoPjA/IiAiOiIiKStMK0N9Y2FzZSBQdC5UUlVFOnJldHVybiIifX0sImNoZWNrVG9TdHJpbmciKSxhPW8oZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5jaGVja3MucmVkdWNlKGZ1bmN0aW9uKHAsbSxnKXtyZXR1cm4gcCsoZD09PWYmJmc9PT0wPyIkIjoiIikraShtLGQpfSwiIil9LCJxdWVyeVRvU3RyaW5nIikscz0iIixsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXNbbF07cys9YSh1LHUuc3ViamVjdCksdGhpcy5sZW5ndGg+MSYmbDx0aGlzLmxlbmd0aC0xJiYocys9IiwgIil9cmV0dXJuIHRoaXMudG9TdHJpbmdDYWNoZT1zLHN9LCJ0b1N0cmluZyIpLG5KZT17cGFyc2U6dEplLHRvU3RyaW5nOnJKZX0sTWdlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGE9WnQoZSkscz14dChlKSxsPVp0KG4pLHUsaCxmPSExLGQ9ITEscD0hMTtzd2l0Y2goci5pbmRleE9mKCIhIik+PTAmJihyPXIucmVwbGFjZSgiISIsIiIpLGQ9ITApLHIuaW5kZXhPZigiQCIpPj0wJiYocj1yLnJlcGxhY2UoIkAiLCIiKSxmPSEwKSwoYXx8bHx8ZikmJih1PSFhJiYhcz8iIjoiIitlLGg9IiIrbiksZiYmKGU9dT11LnRvTG93ZXJDYXNlKCksbj1oPWgudG9Mb3dlckNhc2UoKSkscil7Y2FzZSIqPSI6aT11LmluZGV4T2YoaCk+PTA7YnJlYWs7Y2FzZSIkPSI6aT11LmluZGV4T2YoaCx1Lmxlbmd0aC1oLmxlbmd0aCk+PTA7YnJlYWs7Y2FzZSJePSI6aT11LmluZGV4T2YoaCk9PT0wO2JyZWFrO2Nhc2UiPSI6aT1lPT09bjticmVhaztjYXNlIj4iOnA9ITAsaT1lPm47YnJlYWs7Y2FzZSI+PSI6cD0hMCxpPWU+PW47YnJlYWs7Y2FzZSI8IjpwPSEwLGk9ZTxuO2JyZWFrO2Nhc2UiPD0iOnA9ITAsaT1lPD1uO2JyZWFrO2RlZmF1bHQ6aT0hMTticmVha31yZXR1cm4gZCYmKGUhPW51bGx8fCFwKSYmKGk9IWkpLGl9LCJ2YWxDbXAiKSxpSmU9byhmdW5jdGlvbihlLHIpe3N3aXRjaChyKXtjYXNlIj8iOnJldHVybiEhZTtjYXNlIiEiOnJldHVybiFlO2Nhc2UiXiI6cmV0dXJuIGU9PT12b2lkIDB9fSwiYm9vbENtcCIpLGFKZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dm9pZCAwfSwiZXhpc3RDbXAiKSxkQj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZGF0YShyKX0sImRhdGEiKSxzSmU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlW3JdKCl9LCJtZXRhIiksZmk9W10sem49byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmNoZWNrcy5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gZmlbbi50eXBlXShuLHIpfSl9LCJtYXRjaGVzIik7ZmlbUHQuR1JPVVBdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52YWx1ZTtyZXR1cm4gcj09PSIqInx8cj09PWUuZ3JvdXAoKX07ZmlbUHQuU1RBVEVdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52YWx1ZTtyZXR1cm4gUVplKHIsZSl9O2ZpW1B0LklEXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIGUuaWQoKT09PXJ9O2ZpW1B0LkNMQVNTXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIGUuaGFzQ2xhc3Mocil9O2ZpW1B0Lk1FVEFfQ09NUEFSRV09ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZpZWxkLG49dC5vcGVyYXRvcixpPXQudmFsdWU7cmV0dXJuIE1nZShzSmUoZSxyKSxuLGkpfTtmaVtQdC5EQVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5maWVsZCxuPXQub3BlcmF0b3IsaT10LnZhbHVlO3JldHVybiBNZ2UoZEIoZSxyKSxuLGkpfTtmaVtQdC5EQVRBX0JPT0xdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5maWVsZCxuPXQub3BlcmF0b3I7cmV0dXJuIGlKZShkQihlLHIpLG4pfTtmaVtQdC5EQVRBX0VYSVNUXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQ7cmV0dXJuIHQub3BlcmF0b3IsYUplKGRCKGUscikpfTtmaVtQdC5VTkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ub2Rlc1swXSxuPXQubm9kZXNbMV0saT1lLnNvdXJjZSgpLGE9ZS50YXJnZXQoKTtyZXR1cm4gem4ocixpKSYmem4obixhKXx8em4obixpKSYmem4ocixhKX07ZmlbUHQuTk9ERV9ORUlHSEJPUl09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC5ub2RlLGUpJiZlLm5laWdoYm9yaG9vZCgpLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNOb2RlKCkmJnpuKHQubmVpZ2hib3Iscil9KX07ZmlbUHQuRElSRUNURURfRURHRV09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC5zb3VyY2UsZS5zb3VyY2UoKSkmJnpuKHQudGFyZ2V0LGUudGFyZ2V0KCkpfTtmaVtQdC5OT0RFX1NPVVJDRV09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC5zb3VyY2UsZSkmJmUub3V0Z29lcnMoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzTm9kZSgpJiZ6bih0LnRhcmdldCxyKX0pfTtmaVtQdC5OT0RFX1RBUkdFVF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC50YXJnZXQsZSkmJmUuaW5jb21lcnMoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzTm9kZSgpJiZ6bih0LnNvdXJjZSxyKX0pfTtmaVtQdC5DSElMRF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC5jaGlsZCxlKSYmem4odC5wYXJlbnQsZS5wYXJlbnQoKSl9O2ZpW1B0LlBBUkVOVF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC5wYXJlbnQsZSkmJmUuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiB6bih0LmNoaWxkLHIpfSl9O2ZpW1B0LkRFU0NFTkRBTlRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpuKHQuZGVzY2VuZGFudCxlKSYmZS5hbmNlc3RvcnMoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiB6bih0LmFuY2VzdG9yLHIpfSl9O2ZpW1B0LkFOQ0VTVE9SXT1mdW5jdGlvbih0LGUpe3JldHVybiB6bih0LmFuY2VzdG9yLGUpJiZlLmRlc2NlbmRhbnRzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gem4odC5kZXNjZW5kYW50LHIpfSl9O2ZpW1B0LkNPTVBPVU5EX1NQTElUXT1mdW5jdGlvbih0LGUpe3JldHVybiB6bih0LnN1YmplY3QsZSkmJnpuKHQubGVmdCxlKSYmem4odC5yaWdodCxlKX07ZmlbUHQuVFJVRV09ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZmlbUHQuQ09MTEVDVElPTl09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiByLmhhcyhlKX07ZmlbUHQuRklMVEVSXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHIoZSl9O29KZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoci5sZW5ndGg9PT0xJiZyWzBdLmNoZWNrcy5sZW5ndGg9PT0xJiZyWzBdLmNoZWNrc1swXS50eXBlPT09UHQuSUQpcmV0dXJuIGUuZ2V0RWxlbWVudEJ5SWQoclswXS5jaGVja3NbMF0udmFsdWUpLmNvbGxlY3Rpb24oKTt2YXIgbj1vKGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKHpuKGwsYSkpcmV0dXJuITB9cmV0dXJuITF9LCJzZWxlY3RvckZ1bmN0aW9uIik7cmV0dXJuIHIudGV4dCgpPT1udWxsJiYobj1vKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJzZWxlY3RvckZ1bmN0aW9uIikpLGUuZmlsdGVyKG4pfSwiZmlsdGVyIiksbEplPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKHpuKGksZSkpcmV0dXJuITB9cmV0dXJuITF9LCJtYXRjaGVzIiksY0plPXttYXRjaGVzOmxKZSxmaWx0ZXI6b0plfSxBZj1vKGZ1bmN0aW9uKGUpe3RoaXMuaW5wdXRUZXh0PWUsdGhpcy5jdXJyZW50U3ViamVjdD1udWxsLHRoaXMuY29tcG91bmRDb3VudD0wLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5sZW5ndGg9MCxlPT1udWxsfHxadChlKSYmZS5tYXRjaCgvXlxzKiQvKXx8KHBvKGUpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6UHQuQ09MTEVDVElPTix2YWx1ZTplLmNvbGxlY3Rpb24oKX1dfSk6dGkoZSk/dGhpcy5hZGRRdWVyeSh7Y2hlY2tzOlt7dHlwZTpQdC5GSUxURVIsdmFsdWU6ZX1dfSk6WnQoZSk/dGhpcy5wYXJzZShlKXx8KHRoaXMuaW52YWxpZD0hMCk6aGkoIkEgc2VsZWN0b3IgbXVzdCBiZSBjcmVhdGVkIGZyb20gYSBzdHJpbmc7IGZvdW5kICIpKX0sIlNlbGVjdG9yIiksX2Y9QWYucHJvdG90eXBlO1tuSmUsY0plXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpcihfZix0KX0pO19mLnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dFRleHR9O19mLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9O19mLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3RdfTtfZi5zYW1lVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy5pbnZhbGlkJiYhdC5pbnZhbGlkJiZ0aGlzLnRleHQoKT09PXQudGV4dCgpfTtfZi5hZGRRdWVyeT1mdW5jdGlvbih0KXt0aGlzW3RoaXMubGVuZ3RoKytdPXR9O19mLnNlbGVjdG9yPV9mLnRvU3RyaW5nO2tmPXthbGxBcmU6byhmdW5jdGlvbihlKXt2YXIgcj1uZXcgQWYoZSk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHIubWF0Y2hlcyhuKX0pfSwiYWxsQXJlIiksaXM6byhmdW5jdGlvbihlKXt2YXIgcj1uZXcgQWYoZSk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gci5tYXRjaGVzKG4pfSl9LCJpcyIpLHNvbWU6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT1yP2UuYXBwbHkocixbdGhpc1tuXSxuLHRoaXNdKTplKHRoaXNbbl0sbix0aGlzKTtpZihpKXJldHVybiEwfXJldHVybiExfSwic29tZSIpLGV2ZXJ5Om8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9cj9lLmFwcGx5KHIsW3RoaXNbbl0sbix0aGlzXSk6ZSh0aGlzW25dLG4sdGhpcyk7aWYoIWkpcmV0dXJuITF9cmV0dXJuITB9LCJldmVyeSIpLHNhbWU6byhmdW5jdGlvbihlKXtpZih0aGlzPT09ZSlyZXR1cm4hMDtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciByPXRoaXMubGVuZ3RoLG49ZS5sZW5ndGg7cmV0dXJuIHIhPT1uPyExOnI9PT0xP3RoaXNbMF09PT1lWzBdOnRoaXMuZXZlcnkoZnVuY3Rpb24oaSl7cmV0dXJuIGUuaGFzRWxlbWVudFdpdGhJZChpLmlkKCkpfSl9LCJzYW1lIiksYW55U2FtZTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpLHRoaXMuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gZS5oYXNFbGVtZW50V2l0aElkKHIuaWQoKSl9KX0sImFueVNhbWUiKSxhbGxBcmVOZWlnaGJvcnM6byhmdW5jdGlvbihlKXtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciByPXRoaXMubmVpZ2hib3Job29kKCk7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHIuaGFzRWxlbWVudFdpdGhJZChuLmlkKCkpfSl9LCJhbGxBcmVOZWlnaGJvcnMiKSxjb250YWluczpvKGZ1bmN0aW9uKGUpe2U9dGhpcy5jeSgpLmNvbGxlY3Rpb24oZSk7dmFyIHI9dGhpcztyZXR1cm4gZS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gci5oYXNFbGVtZW50V2l0aElkKG4uaWQoKSl9KX0sImNvbnRhaW5zIil9O2tmLmFsbEFyZU5laWdoYm91cnM9a2YuYWxsQXJlTmVpZ2hib3JzO2tmLmhhcz1rZi5jb250YWlucztrZi5lcXVhbD1rZi5lcXVhbHM9a2Yuc2FtZTthbD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIG8oZnVuY3Rpb24oaSxhLHMsbCl7dmFyIHU9aSxoPXRoaXMsZjtpZih1PT1udWxsP2Y9IiI6cG8odSkmJnUubGVuZ3RoPT09MSYmKGY9dS5pZCgpKSxoLmxlbmd0aD09PTEmJmYpe3ZhciBkPWhbMF0uX3ByaXZhdGUscD1kLnRyYXZlcnNhbENhY2hlPWQudHJhdmVyc2FsQ2FjaGV8fHt9LG09cFtyXT1wW3JdfHxbXSxnPXowKGYpLHk9bVtnXTtyZXR1cm4geXx8KG1bZ109ZS5jYWxsKGgsaSxhLHMsbCkpfWVsc2UgcmV0dXJuIGUuY2FsbChoLGksYSxzLGwpfSwidHJhdmVyc2FsQ2FjaGUiKX0sImNhY2hlIiksaDE9e3BhcmVudDpvKGZ1bmN0aW9uKGUpe3ZhciByPVtdO2lmKHRoaXMubGVuZ3RoPT09MSl7dmFyIG49dGhpc1swXS5fcHJpdmF0ZS5wYXJlbnQ7aWYobilyZXR1cm4gbn1mb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIGE9dGhpc1tpXSxzPWEuX3ByaXZhdGUucGFyZW50O3MmJnIucHVzaChzKX1yZXR1cm4gdGhpcy5zcGF3bihyLCEwKS5maWx0ZXIoZSl9LCJwYXJlbnQiKSxwYXJlbnRzOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtdLG49dGhpcy5wYXJlbnQoKTtuLm5vbmVtcHR5KCk7KXtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtyLnB1c2goYSl9bj1uLnBhcmVudCgpfXJldHVybiB0aGlzLnNwYXduKHIsITApLmZpbHRlcihlKX0sInBhcmVudHMiKSxjb21tb25BbmNlc3RvcnM6byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9aS5wYXJlbnRzKCk7cj1yfHxhLHI9ci5pbnRlcnNlY3QoYSl9cmV0dXJuIHIuZmlsdGVyKGUpfSwiY29tbW9uQW5jZXN0b3JzIiksb3JwaGFuczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0ZEZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5pc09ycGhhbigpfSkuZmlsdGVyKGUpfSwib3JwaGFucyIpLG5vbm9ycGhhbnM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNDaGlsZCgpfSkuZmlsdGVyKGUpfSwibm9ub3JwaGFucyIpLGNoaWxkcmVuOmFsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0aGlzLmxlbmd0aDtyKyspZm9yKHZhciBuPXRoaXNbcl0saT1uLl9wcml2YXRlLmNoaWxkcmVuLGE9MDthPGkubGVuZ3RoO2ErKyllLnB1c2goaVthXSk7cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwiY2hpbGRyZW4iKSxzaWJsaW5nczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudCgpLmNoaWxkcmVuKCkubm90KHRoaXMpLmZpbHRlcihlKX0sInNpYmxpbmdzIiksaXNQYXJlbnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSwiaXNQYXJlbnQiKSxpc0NoaWxkbGVzczpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLmlzTm9kZSgpJiZlLl9wcml2YXRlLmNoaWxkcmVuLmxlbmd0aD09PTB9LCJpc0NoaWxkbGVzcyIpLGlzQ2hpbGQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5wYXJlbnQhPW51bGx9LCJpc0NoaWxkIiksaXNPcnBoYW46byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5wYXJlbnQ9PW51bGx9LCJpc09ycGhhbiIpLGRlc2NlbmRhbnRzOm8oZnVuY3Rpb24oZSl7dmFyIHI9W107ZnVuY3Rpb24gbihpKXtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtyLnB1c2gocykscy5jaGlsZHJlbigpLm5vbmVtcHR5KCkmJm4ocy5jaGlsZHJlbigpKX19cmV0dXJuIG8obiwiYWRkIiksbih0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24ociwhMCkuZmlsdGVyKGUpfSwiZGVzY2VuZGFudHMiKX07byhwQiwiZm9yRWFjaENvbXBvdW5kIik7byhJZ2UsImFkZENoaWxkcmVuIik7aDEuZm9yRWFjaERvd249ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBwQih0aGlzLHQsZSxJZ2UpfTtvKE9nZSwiYWRkUGFyZW50Iik7aDEuZm9yRWFjaFVwPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gcEIodGhpcyx0LGUsT2dlKX07byh1SmUsImFkZFBhcmVudEFuZENoaWxkcmVuIik7aDEuZm9yRWFjaFVwQW5kRG93bj1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHBCKHRoaXMsdCxlLHVKZSl9O2gxLmFuY2VzdG9ycz1oMS5wYXJlbnRzO1h4PVBnZT17ZGF0YTpzbi5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsaW1tdXRhYmxlS2V5czp7aWQ6ITAsc291cmNlOiEwLHRhcmdldDohMCxwYXJlbnQ6ITB9LHVwZGF0ZVN0eWxlOiEwfSksc2NyYXRjaDpzbi5kYXRhKHtmaWVsZDoic2NyYXRjaCIsYmluZGluZ0V2ZW50OiJzY3JhdGNoIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoic2NyYXRjaCIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlU2NyYXRjaDpzbi5yZW1vdmVEYXRhKHtmaWVsZDoic2NyYXRjaCIsZXZlbnQ6InNjcmF0Y2giLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHJzY3JhdGNoOnNuLmRhdGEoe2ZpZWxkOiJyc2NyYXRjaCIsYWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITB9KSxyZW1vdmVSc2NyYXRjaDpzbi5yZW1vdmVEYXRhKHtmaWVsZDoicnNjcmF0Y2giLHRyaWdnZXJFdmVudDohMX0pLGlkOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuX3ByaXZhdGUuZGF0YS5pZH0sImlkIil9O1h4LmF0dHI9WHguZGF0YTtYeC5yZW1vdmVBdHRyPVh4LnJlbW92ZURhdGE7aEplPVBnZSxJNj17fTtvKERQLCJkZWZpbmVEZWdyZWVGdW5jdGlvbiIpO2lyKEk2LHtkZWdyZWU6RFAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zb3VyY2UoKS5zYW1lKGUudGFyZ2V0KCkpPzI6MX0pLGluZGVncmVlOkRQKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGFyZ2V0KCkuc2FtZSh0KT8xOjB9KSxvdXRkZWdyZWU6RFAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zb3VyY2UoKS5zYW1lKHQpPzE6MH0pfSk7byhRZywiZGVmaW5lRGVncmVlQm91bmRzRnVuY3Rpb24iKTtpcihJNix7bWluRGVncmVlOlFnKCJkZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZX0pLG1heERlZ3JlZTpRZygiZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PmV9KSxtaW5JbmRlZ3JlZTpRZygiaW5kZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZX0pLG1heEluZGVncmVlOlFnKCJpbmRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSksbWluT3V0ZGVncmVlOlFnKCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZX0pLG1heE91dGRlZ3JlZTpRZygib3V0ZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PmV9KX0pO2lyKEk2LHt0b3RhbERlZ3JlZTpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dGhpcy5ub2RlcygpLGk9MDtpPG4ubGVuZ3RoO2krKylyKz1uW2ldLmRlZ3JlZShlKTtyZXR1cm4gcn0sInRvdGFsRGVncmVlIil9KTtGZ2U9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aWYoIWEubG9ja2VkKCkpe3ZhciBzPWEuX3ByaXZhdGUucG9zaXRpb24sbD17eDpyLnghPW51bGw/ci54LXMueDowLHk6ci55IT1udWxsP3IueS1zLnk6MH07YS5pc1BhcmVudCgpJiYhKGwueD09PTAmJmwueT09PTApJiZhLmNoaWxkcmVuKCkuc2hpZnQobCxuKSxhLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfX19LCJiZWZvcmVQb3NpdGlvblNldCIpLG9tZT17ZmllbGQ6InBvc2l0aW9uIixiaW5kaW5nRXZlbnQ6InBvc2l0aW9uIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoicG9zaXRpb24iLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6ImVtaXRBbmROb3RpZnkiLGFsbG93R2V0dGluZzohMCx2YWxpZEtleXM6WyJ4IiwieSJdLGJlZm9yZUdldDpvKGZ1bmN0aW9uKGUpe2UudXBkYXRlQ29tcG91bmRCb3VuZHMoKX0sImJlZm9yZUdldCIpLGJlZm9yZVNldDpvKGZ1bmN0aW9uKGUscil7RmdlKGUsciwhMSl9LCJiZWZvcmVTZXQiKSxvblNldDpvKGZ1bmN0aW9uKGUpe2UuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCl9LCJvblNldCIpLGNhblNldDpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmxvY2tlZCgpfSwiY2FuU2V0Iil9O1lsPUJnZT17cG9zaXRpb246c24uZGF0YShvbWUpLHNpbGVudFBvc2l0aW9uOnNuLmRhdGEoaXIoe30sb21lLHthbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMSxiZWZvcmVTZXQ6byhmdW5jdGlvbihlLHIpe0ZnZShlLHIsITApfSwiYmVmb3JlU2V0Iiksb25TZXQ6byhmdW5jdGlvbihlKXtlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSwib25TZXQiKX0pKSxwb3NpdGlvbnM6byhmdW5jdGlvbihlLHIpe2lmKFZyKGUpKXI/dGhpcy5zaWxlbnRQb3NpdGlvbihlKTp0aGlzLnBvc2l0aW9uKGUpO2Vsc2UgaWYodGkoZSkpe3ZhciBuPWUsaT10aGlzLmN5KCk7aS5zdGFydEJhdGNoKCk7Zm9yKHZhciBhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBzPXRoaXNbYV0sbD12b2lkIDA7KGw9bihzLGEpKSYmKHI/cy5zaWxlbnRQb3NpdGlvbihsKTpzLnBvc2l0aW9uKGwpKX1pLmVuZEJhdGNoKCl9cmV0dXJuIHRoaXN9LCJwb3NpdGlvbnMiKSxzaWxlbnRQb3NpdGlvbnM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wb3NpdGlvbnMoZSwhMCl9LCJzaWxlbnRQb3NpdGlvbnMiKSxzaGlmdDpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaTtpZihWcihlKT8oaT17eDp4dChlLngpP2UueDowLHk6eHQoZS55KT9lLnk6MH0sbj1yKTpadChlKSYmeHQocikmJihpPXt4OjAseTowfSxpW2VdPXIpLGkhPW51bGwpe3ZhciBhPXRoaXMuY3koKTthLnN0YXJ0QmF0Y2goKTtmb3IodmFyIHM9MDtzPHRoaXMubGVuZ3RoO3MrKyl7dmFyIGw9dGhpc1tzXTtpZighKGEuaGFzQ29tcG91bmROb2RlcygpJiZsLmlzQ2hpbGQoKSYmbC5hbmNlc3RvcnMoKS5hbnlTYW1lKHRoaXMpKSl7dmFyIHU9bC5wb3NpdGlvbigpLGg9e3g6dS54K2kueCx5OnUueStpLnl9O24/bC5zaWxlbnRQb3NpdGlvbihoKTpsLnBvc2l0aW9uKGgpfX1hLmVuZEJhdGNoKCl9cmV0dXJuIHRoaXN9LCJzaGlmdCIpLHNpbGVudFNoaWZ0Om8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gVnIoZSk/dGhpcy5zaGlmdChlLCEwKTpadChlKSYmeHQocikmJnRoaXMuc2hpZnQoZSxyLCEwKSx0aGlzfSwic2lsZW50U2hpZnQiKSxyZW5kZXJlZFBvc2l0aW9uOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzWzBdLGk9dGhpcy5jeSgpLGE9aS56b29tKCkscz1pLnBhbigpLGw9VnIoZSk/ZTp2b2lkIDAsdT1sIT09dm9pZCAwfHxyIT09dm9pZCAwJiZadChlKTtpZihuJiZuLmlzTm9kZSgpKWlmKHUpZm9yKHZhciBoPTA7aDx0aGlzLmxlbmd0aDtoKyspe3ZhciBmPXRoaXNbaF07ciE9PXZvaWQgMD9mLnBvc2l0aW9uKGUsKHItc1tlXSkvYSk6bCE9PXZvaWQgMCYmZi5wb3NpdGlvbih1Z2UobCxhLHMpKX1lbHNle3ZhciBkPW4ucG9zaXRpb24oKTtyZXR1cm4gbD1MNihkLGEscyksZT09PXZvaWQgMD9sOmxbZV19ZWxzZSBpZighdSlyZXR1cm47cmV0dXJuIHRoaXN9LCJyZW5kZXJlZFBvc2l0aW9uIikscmVsYXRpdmVQb3NpdGlvbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpc1swXSxpPXRoaXMuY3koKSxhPVZyKGUpP2U6dm9pZCAwLHM9YSE9PXZvaWQgMHx8ciE9PXZvaWQgMCYmWnQoZSksbD1pLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihuJiZuLmlzTm9kZSgpKWlmKHMpZm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1Kyspe3ZhciBoPXRoaXNbdV0sZj1sP2gucGFyZW50KCk6bnVsbCxkPWYmJmYubGVuZ3RoPjAscD1kO2QmJihmPWZbMF0pO3ZhciBtPXA/Zi5wb3NpdGlvbigpOnt4OjAseTowfTtyIT09dm9pZCAwP2gucG9zaXRpb24oZSxyK21bZV0pOmEhPT12b2lkIDAmJmgucG9zaXRpb24oe3g6YS54K20ueCx5OmEueSttLnl9KX1lbHNle3ZhciBnPW4ucG9zaXRpb24oKSx5PWw/bi5wYXJlbnQoKTpudWxsLHY9eSYmeS5sZW5ndGg+MCx4PXY7diYmKHk9eVswXSk7dmFyIGI9eD95LnBvc2l0aW9uKCk6e3g6MCx5OjB9O3JldHVybiBhPXt4OmcueC1iLngseTpnLnktYi55fSxlPT09dm9pZCAwP2E6YVtlXX1lbHNlIGlmKCFzKXJldHVybjtyZXR1cm4gdGhpc30sInJlbGF0aXZlUG9zaXRpb24iKX07WWwubW9kZWxQb3NpdGlvbj1ZbC5wb2ludD1ZbC5wb3NpdGlvbjtZbC5tb2RlbFBvc2l0aW9ucz1ZbC5wb2ludHM9WWwucG9zaXRpb25zO1lsLnJlbmRlcmVkUG9pbnQ9WWwucmVuZGVyZWRQb3NpdGlvbjtZbC5yZWxhdGl2ZVBvaW50PVlsLnJlbGF0aXZlUG9zaXRpb247ZkplPUJnZTtvMT1EZj17fTtEZi5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYm91bmRpbmdCb3godCkscj10aGlzLmN5KCksbj1yLnpvb20oKSxpPXIucGFuKCksYT1lLngxKm4raS54LHM9ZS54MipuK2kueCxsPWUueTEqbitpLnksdT1lLnkyKm4raS55O3JldHVybnt4MTphLHgyOnMseTE6bCx5Mjp1LHc6cy1hLGg6dS1sfX07RGYuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLGU9dGhpcy5jeSgpO3JldHVybiFlLnN0eWxlRW5hYmxlZCgpfHwhZS5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24ocil7aWYoci5pc1BhcmVudCgpKXt2YXIgbj1yLl9wcml2YXRlO24uY29tcG91bmRCb3VuZHNDbGVhbj0hMSxuLmJiQ2FjaGU9bnVsbCx0fHxyLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfTtEZi51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKXx8IWUuaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF0JiZlLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24gcihzKXtpZighcy5pc1BhcmVudCgpKXJldHVybjt2YXIgbD1zLl9wcml2YXRlLHU9cy5jaGlsZHJlbigpLGg9cy5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsZj17d2lkdGg6e3ZhbDpzLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0OnMucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6cy5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOnMucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6cy5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206cy5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LGQ9dS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpoLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLHA9bC5wb3NpdGlvbjsoZC53PT09MHx8ZC5oPT09MCkmJihkPXt3OnMucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaDpzLnBzdHlsZSgiaGVpZ2h0IikucGZWYWx1ZX0sZC54MT1wLngtZC53LzIsZC54Mj1wLngrZC53LzIsZC55MT1wLnktZC5oLzIsZC55Mj1wLnkrZC5oLzIpO2Z1bmN0aW9uIG0oQSxJLEQpe3ZhciBrPTAsUj0wLFM9SStEO3JldHVybiBBPjAmJlM+MCYmKGs9SS9TKkEsUj1EL1MqQSkse2JpYXNEaWZmOmssYmlhc0NvbXBsZW1lbnREaWZmOlJ9fW8obSwiY29tcHV0ZUJpYXNWYWx1ZXMiKTtmdW5jdGlvbiBnKEEsSSxELGspe2lmKEQudW5pdHM9PT0iJSIpc3dpdGNoKGspe2Nhc2Uid2lkdGgiOnJldHVybiBBPjA/RC5wZlZhbHVlKkE6MDtjYXNlImhlaWdodCI6cmV0dXJuIEk+MD9ELnBmVmFsdWUqSTowO2Nhc2UiYXZlcmFnZSI6cmV0dXJuIEE+MCYmST4wP0QucGZWYWx1ZSooQStJKS8yOjA7Y2FzZSJtaW4iOnJldHVybiBBPjAmJkk+MD9BPkk/RC5wZlZhbHVlKkk6RC5wZlZhbHVlKkE6MDtjYXNlIm1heCI6cmV0dXJuIEE+MCYmST4wP0E+ST9ELnBmVmFsdWUqQTpELnBmVmFsdWUqSTowO2RlZmF1bHQ6cmV0dXJuIDB9ZWxzZSByZXR1cm4gRC51bml0cz09PSJweCI/RC5wZlZhbHVlOjB9byhnLCJjb21wdXRlUGFkZGluZ1ZhbHVlcyIpO3ZhciB5PWYud2lkdGgubGVmdC52YWx1ZTtmLndpZHRoLmxlZnQudW5pdHM9PT0icHgiJiZmLndpZHRoLnZhbD4wJiYoeT15KjEwMC9mLndpZHRoLnZhbCk7dmFyIHY9Zi53aWR0aC5yaWdodC52YWx1ZTtmLndpZHRoLnJpZ2h0LnVuaXRzPT09InB4IiYmZi53aWR0aC52YWw+MCYmKHY9dioxMDAvZi53aWR0aC52YWwpO3ZhciB4PWYuaGVpZ2h0LnRvcC52YWx1ZTtmLmhlaWdodC50b3AudW5pdHM9PT0icHgiJiZmLmhlaWdodC52YWw+MCYmKHg9eCoxMDAvZi5oZWlnaHQudmFsKTt2YXIgYj1mLmhlaWdodC5ib3R0b20udmFsdWU7Zi5oZWlnaHQuYm90dG9tLnVuaXRzPT09InB4IiYmZi5oZWlnaHQudmFsPjAmJihiPWIqMTAwL2YuaGVpZ2h0LnZhbCk7dmFyIHc9bShmLndpZHRoLnZhbC1kLncseSx2KSxfPXcuYmlhc0RpZmYsVD13LmJpYXNDb21wbGVtZW50RGlmZixFPW0oZi5oZWlnaHQudmFsLWQuaCx4LGIpLEw9RS5iaWFzRGlmZixDPUUuYmlhc0NvbXBsZW1lbnREaWZmO2wuYXV0b1BhZGRpbmc9ZyhkLncsZC5oLHMucHN0eWxlKCJwYWRkaW5nIikscy5wc3R5bGUoInBhZGRpbmctcmVsYXRpdmUtdG8iKS52YWx1ZSksbC5hdXRvV2lkdGg9TWF0aC5tYXgoZC53LGYud2lkdGgudmFsKSxwLng9KC1fK2QueDErZC54MitUKS8yLGwuYXV0b0hlaWdodD1NYXRoLm1heChkLmgsZi5oZWlnaHQudmFsKSxwLnk9KC1MK2QueTErZC55MitDKS8yfW8ociwidXBkYXRlIik7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl0sYT1pLl9wcml2YXRlOyghYS5jb21wb3VuZEJvdW5kc0NsZWFufHx0KSYmKHIoaSksZS5iYXRjaGluZygpfHwoYS5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O2lsPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0xLzB8fGU9PT0tMS8wPzA6ZX0sIm5vbmluZiIpLEhsPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtpLXI9PT0wfHxhLW49PT0wfHxyPT1udWxsfHxuPT1udWxsfHxpPT1udWxsfHxhPT1udWxsfHwoZS54MT1yPGUueDE/cjplLngxLGUueDI9aT5lLngyP2k6ZS54MixlLnkxPW48ZS55MT9uOmUueTEsZS55Mj1hPmUueTI/YTplLnkyLGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MSl9LCJ1cGRhdGVCb3VuZHMiKSxJMD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHI9PW51bGw/ZTpIbChlLHIueDEsci55MSxyLngyLHIueTIpfSwidXBkYXRlQm91bmRzRnJvbUJveCIpLE54PW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBXbChlLHIsbil9LCJwcmVmaXhlZFByb3BlcnR5IiksSkU9byhmdW5jdGlvbihlLHIsbil7aWYoIXIuY3koKS5oZWFkbGVzcygpKXt2YXIgaT1yLl9wcml2YXRlLGE9aS5yc3R5bGUscz1hLmFycm93V2lkdGgvMixsPXIucHN0eWxlKG4rIi1hcnJvdy1zaGFwZSIpLnZhbHVlLHUsaDtpZihsIT09Im5vbmUiKXtuPT09InNvdXJjZSI/KHU9YS5zcmNYLGg9YS5zcmNZKTpuPT09InRhcmdldCI/KHU9YS50Z3RYLGg9YS50Z3RZKToodT1hLm1pZFgsaD1hLm1pZFkpO3ZhciBmPWkuYXJyb3dCb3VuZHM9aS5hcnJvd0JvdW5kc3x8e30sZD1mW25dPWZbbl18fHt9O2QueDE9dS1zLGQueTE9aC1zLGQueDI9dStzLGQueTI9aCtzLGQudz1kLngyLWQueDEsZC5oPWQueTItZC55MSxhNihkLDEpLEhsKGUsZC54MSxkLnkxLGQueDIsZC55Mil9fX0sInVwZGF0ZUJvdW5kc0Zyb21BcnJvdyIpLE5QPW8oZnVuY3Rpb24oZSxyLG4pe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIGk7bj9pPW4rIi0iOmk9IiI7dmFyIGE9ci5fcHJpdmF0ZSxzPWEucnN0eWxlLGw9ci5wc3R5bGUoaSsibGFiZWwiKS5zdHJWYWx1ZTtpZihsKXt2YXIgdT1yLnBzdHlsZSgidGV4dC1oYWxpZ24iKSxoPXIucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLGY9TngocywibGFiZWxXaWR0aCIsbiksZD1OeChzLCJsYWJlbEhlaWdodCIsbikscD1OeChzLCJsYWJlbFgiLG4pLG09TngocywibGFiZWxZIixuKSxnPXIucHN0eWxlKGkrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk9ci5wc3R5bGUoaSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsdj1yLmlzRWRnZSgpLHg9ci5wc3R5bGUoaSsidGV4dC1yb3RhdGlvbiIpLGI9ci5wc3R5bGUoInRleHQtb3V0bGluZS13aWR0aCIpLnBmVmFsdWUsdz1yLnBzdHlsZSgidGV4dC1ib3JkZXItd2lkdGgiKS5wZlZhbHVlLF89dy8yLFQ9ci5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIikucGZWYWx1ZSxFPTIsTD1kLEM9ZixBPUMvMixJPUwvMixELGssUixTO2lmKHYpRD1wLUEsaz1wK0EsUj1tLUksUz1tK0k7ZWxzZXtzd2l0Y2godS52YWx1ZSl7Y2FzZSJsZWZ0IjpEPXAtQyxrPXA7YnJlYWs7Y2FzZSJjZW50ZXIiOkQ9cC1BLGs9cCtBO2JyZWFrO2Nhc2UicmlnaHQiOkQ9cCxrPXArQzticmVha31zd2l0Y2goaC52YWx1ZSl7Y2FzZSJ0b3AiOlI9bS1MLFM9bTticmVhaztjYXNlImNlbnRlciI6Uj1tLUksUz1tK0k7YnJlYWs7Y2FzZSJib3R0b20iOlI9bSxTPW0rTDticmVha319RCs9Zy1NYXRoLm1heChiLF8pLVQtRSxrKz1nK01hdGgubWF4KGIsXykrVCtFLFIrPXktTWF0aC5tYXgoYixfKS1ULUUsUys9eStNYXRoLm1heChiLF8pK1QrRTt2YXIgTz1ufHwibWFpbiIsTj1hLmxhYmVsQm91bmRzLFA9TltPXT1OW09dfHx7fTtQLngxPUQsUC55MT1SLFAueDI9ayxQLnkyPVMsUC53PWstRCxQLmg9Uy1SO3ZhciBGPXYmJnguc3RyVmFsdWU9PT0iYXV0b3JvdGF0ZSIsQj14LnBmVmFsdWUhPW51bGwmJngucGZWYWx1ZSE9PTA7aWYoRnx8Qil7dmFyICQ9Rj9OeChhLnJzdHlsZSwibGFiZWxBbmdsZSIsbik6eC5wZlZhbHVlLHo9TWF0aC5jb3MoJCksVz1NYXRoLnNpbigkKSxqPShEK2spLzIsSz0oUitTKS8yO2lmKCF2KXtzd2l0Y2godS52YWx1ZSl7Y2FzZSJsZWZ0IjpqPWs7YnJlYWs7Y2FzZSJyaWdodCI6aj1EO2JyZWFrfXN3aXRjaChoLnZhbHVlKXtjYXNlInRvcCI6Sz1TO2JyZWFrO2Nhc2UiYm90dG9tIjpLPVI7YnJlYWt9fXZhciBpZT1vKGZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gdWU9dWUtaixjZT1jZS1LLHt4OnVlKnotY2UqVytqLHk6dWUqVytjZSp6K0t9fSwicm90YXRlIiksUT1pZShELFIpLGVlPWllKEQsUyksSj1pZShrLFIpLEg9aWUoayxTKTtEPU1hdGgubWluKFEueCxlZS54LEoueCxILngpLGs9TWF0aC5tYXgoUS54LGVlLngsSi54LEgueCksUj1NYXRoLm1pbihRLnksZWUueSxKLnksSC55KSxTPU1hdGgubWF4KFEueSxlZS55LEoueSxILnkpfXZhciBxPU8rIlJvdCIsWj1OW3FdPU5bcV18fHt9O1oueDE9RCxaLnkxPVIsWi54Mj1rLFoueTI9UyxaLnc9ay1ELFouaD1TLVIsSGwoZSxELFIsayxTKSxIbChhLmxhYmVsQm91bmRzLmFsbCxELFIsayxTKX1yZXR1cm4gZX19LCJ1cGRhdGVCb3VuZHNGcm9tTGFiZWwiKSxkSmU9byhmdW5jdGlvbihlLHIpe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIG49ci5wc3R5bGUoIm91dGxpbmUtb3BhY2l0eSIpLnZhbHVlLGk9ci5wc3R5bGUoIm91dGxpbmUtd2lkdGgiKS52YWx1ZTtpZihuPjAmJmk+MCl7dmFyIGE9ci5wc3R5bGUoIm91dGxpbmUtb2Zmc2V0IikudmFsdWUscz1yLnBzdHlsZSgic2hhcGUiKS52YWx1ZSxsPWkrYSx1PShlLncrbCoyKS9lLncsaD0oZS5oK2wqMikvZS5oLGY9MCxkPTA7WyJkaWFtb25kIiwicGVudGFnb24iLCJyb3VuZC10cmlhbmdsZSJdLmluY2x1ZGVzKHMpPyh1PShlLncrbCoyLjQpL2UudyxkPS1sLzMuNik6WyJjb25jYXZlLWhleGFnb24iLCJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIl0uaW5jbHVkZXMocyk/dT0oZS53K2wqMi40KS9lLnc6cz09PSJzdGFyIj8odT0oZS53K2wqMi44KS9lLncsaD0oZS5oK2wqMi42KS9lLmgsZD0tbC8zLjgpOnM9PT0idHJpYW5nbGUiPyh1PShlLncrbCoyLjgpL2UudyxoPShlLmgrbCoyLjQpL2UuaCxkPS1sLzEuNCk6cz09PSJ2ZWUiJiYodT0oZS53K2wqNC40KS9lLncsaD0oZS5oK2wqMy44KS9lLmgsZD0tbCouNSk7dmFyIHA9ZS5oKmgtZS5oLG09ZS53KnUtZS53O2lmKHM2KGUsW01hdGguY2VpbChwLzIpLE1hdGguY2VpbChtLzIpXSksZiE9MHx8ZCE9PTApe3ZhciBnPUlqZShlLGYsZCk7ZmdlKGUsZyl9fX19LCJ1cGRhdGVCb3VuZHNGcm9tT3V0bGluZSIpLHBKZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5fcHJpdmF0ZS5jeSxpPW4uc3R5bGVFbmFibGVkKCksYT1uLmhlYWRsZXNzKCkscz0kcygpLGw9ZS5fcHJpdmF0ZSx1PWUuaXNOb2RlKCksaD1lLmlzRWRnZSgpLGYsZCxwLG0sZyx5LHY9bC5yc3R5bGUseD11JiZpP2UucHN0eWxlKCJib3VuZHMtZXhwYW5zaW9uIikucGZWYWx1ZTpbMF0sYj1vKGZ1bmN0aW9uKERlKXtyZXR1cm4gRGUucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSJ9LCJpc0Rpc3BsYXllZCIpLHc9IWl8fGIoZSkmJighaHx8YihlLnNvdXJjZSgpKSYmYihlLnRhcmdldCgpKSk7aWYodyl7dmFyIF89MCxUPTA7aSYmci5pbmNsdWRlT3ZlcmxheXMmJihfPWUucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSxfIT09MCYmKFQ9ZS5wc3R5bGUoIm92ZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIEU9MCxMPTA7aSYmci5pbmNsdWRlVW5kZXJsYXlzJiYoRT1lLnBzdHlsZSgidW5kZXJsYXktb3BhY2l0eSIpLnZhbHVlLEUhPT0wJiYoTD1lLnBzdHlsZSgidW5kZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIEM9TWF0aC5tYXgoVCxMKSxBPTAsST0wO2lmKGkmJihBPWUucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsST1BLzIpLHUmJnIuaW5jbHVkZU5vZGVzKXt2YXIgRD1lLnBvc2l0aW9uKCk7Zz1ELngseT1ELnk7dmFyIGs9ZS5vdXRlcldpZHRoKCksUj1rLzIsUz1lLm91dGVySGVpZ2h0KCksTz1TLzI7Zj1nLVIsZD1nK1IscD15LU8sbT15K08sSGwocyxmLHAsZCxtKSxpJiZyLmluY2x1ZGVPdXRsaW5lcyYmZEplKHMsZSl9ZWxzZSBpZihoJiZyLmluY2x1ZGVFZGdlcylpZihpJiYhYSl7dmFyIE49ZS5wc3R5bGUoImN1cnZlLXN0eWxlIikuc3RyVmFsdWU7aWYoZj1NYXRoLm1pbih2LnNyY1gsdi5taWRYLHYudGd0WCksZD1NYXRoLm1heCh2LnNyY1gsdi5taWRYLHYudGd0WCkscD1NYXRoLm1pbih2LnNyY1ksdi5taWRZLHYudGd0WSksbT1NYXRoLm1heCh2LnNyY1ksdi5taWRZLHYudGd0WSksZi09SSxkKz1JLHAtPUksbSs9SSxIbChzLGYscCxkLG0pLE49PT0iaGF5c3RhY2siKXt2YXIgUD12LmhheXN0YWNrUHRzO2lmKFAmJlAubGVuZ3RoPT09Mil7aWYoZj1QWzBdLngscD1QWzBdLnksZD1QWzFdLngsbT1QWzFdLnksZj5kKXt2YXIgRj1mO2Y9ZCxkPUZ9aWYocD5tKXt2YXIgQj1wO3A9bSxtPUJ9SGwocyxmLUkscC1JLGQrSSxtK0kpfX1lbHNlIGlmKE49PT0iYmV6aWVyInx8Tj09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8Ti5lbmRzV2l0aCgic2VnbWVudHMiKXx8Ti5lbmRzV2l0aCgidGF4aSIpKXt2YXIgJDtzd2l0Y2goTil7Y2FzZSJiZXppZXIiOmNhc2UidW5idW5kbGVkLWJlemllciI6JD12LmJlemllclB0czticmVhaztjYXNlInNlZ21lbnRzIjpjYXNlInRheGkiOmNhc2Uicm91bmQtc2VnbWVudHMiOmNhc2Uicm91bmQtdGF4aSI6JD12LmxpbmVQdHM7YnJlYWt9aWYoJCE9bnVsbClmb3IodmFyIHo9MDt6PCQubGVuZ3RoO3orKyl7dmFyIFc9JFt6XTtmPVcueC1JLGQ9Vy54K0kscD1XLnktSSxtPVcueStJLEhsKHMsZixwLGQsbSl9fX1lbHNle3ZhciBqPWUuc291cmNlKCksSz1qLnBvc2l0aW9uKCksaWU9ZS50YXJnZXQoKSxRPWllLnBvc2l0aW9uKCk7aWYoZj1LLngsZD1RLngscD1LLnksbT1RLnksZj5kKXt2YXIgZWU9ZjtmPWQsZD1lZX1pZihwPm0pe3ZhciBKPXA7cD1tLG09Sn1mLT1JLGQrPUkscC09SSxtKz1JLEhsKHMsZixwLGQsbSl9aWYoaSYmci5pbmNsdWRlRWRnZXMmJmgmJihKRShzLGUsIm1pZC1zb3VyY2UiKSxKRShzLGUsIm1pZC10YXJnZXQiKSxKRShzLGUsInNvdXJjZSIpLEpFKHMsZSwidGFyZ2V0IikpLGkpe3ZhciBIPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoSCl7dmFyIHE9ZS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxaPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7SGwocyxzLngxK3Escy55MStaLHMueDIrcSxzLnkyK1opfX12YXIgYWU9bC5ib2R5Qm91bmRzPWwuYm9keUJvdW5kc3x8e307R3BlKGFlLHMpLHM2KGFlLHgpLGE2KGFlLDEpLGkmJihmPXMueDEsZD1zLngyLHA9cy55MSxtPXMueTIsSGwocyxmLUMscC1DLGQrQyxtK0MpKTt2YXIgdWU9bC5vdmVybGF5Qm91bmRzPWwub3ZlcmxheUJvdW5kc3x8e307R3BlKHVlLHMpLHM2KHVlLHgpLGE2KHVlLDEpO3ZhciBjZT1sLmxhYmVsQm91bmRzPWwubGFiZWxCb3VuZHN8fHt9O2NlLmFsbCE9bnVsbD9NamUoY2UuYWxsKTpjZS5hbGw9JHMoKSxpJiZyLmluY2x1ZGVMYWJlbHMmJihyLmluY2x1ZGVNYWluTGFiZWxzJiZOUChzLGUsbnVsbCksaCYmKHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmTlAocyxlLCJzb3VyY2UiKSxyLmluY2x1ZGVUYXJnZXRMYWJlbHMmJk5QKHMsZSwidGFyZ2V0IikpKX1yZXR1cm4gcy54MT1pbChzLngxKSxzLnkxPWlsKHMueTEpLHMueDI9aWwocy54Mikscy55Mj1pbChzLnkyKSxzLnc9aWwocy54Mi1zLngxKSxzLmg9aWwocy55Mi1zLnkxKSxzLnc+MCYmcy5oPjAmJncmJihzNihzLHgpLGE2KHMsMSkpLHN9LCJib3VuZGluZ0JveEltcGwiKSx6Z2U9byhmdW5jdGlvbihlKXt2YXIgcj0wLG49byhmdW5jdGlvbihzKXtyZXR1cm4ocz8xOjApPDxyKyt9LCJ0ZiIpLGk9MDtyZXR1cm4gaSs9bihlLmluY3VkZU5vZGVzKSxpKz1uKGUuaW5jbHVkZUVkZ2VzKSxpKz1uKGUuaW5jbHVkZUxhYmVscyksaSs9bihlLmluY2x1ZGVNYWluTGFiZWxzKSxpKz1uKGUuaW5jbHVkZVNvdXJjZUxhYmVscyksaSs9bihlLmluY2x1ZGVUYXJnZXRMYWJlbHMpLGkrPW4oZS5pbmNsdWRlT3ZlcmxheXMpLGkrPW4oZS5pbmNsdWRlT3V0bGluZXMpLGl9LCJnZXRLZXkiKSxHZ2U9byhmdW5jdGlvbihlKXtpZihlLmlzRWRnZSgpKXt2YXIgcj1lLnNvdXJjZSgpLnBvc2l0aW9uKCksbj1lLnRhcmdldCgpLnBvc2l0aW9uKCksaT1vKGZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLnJvdW5kKHMpfSwiciIpO3JldHVybiBlamUoW2koci54KSxpKHIueSksaShuLngpLGkobi55KV0pfWVsc2UgcmV0dXJuIDB9LCJnZXRCb3VuZGluZ0JveFBvc0tleSIpLGxtZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5fcHJpdmF0ZSxpLGE9ZS5pc0VkZ2UoKSxzPXI9PW51bGw/Y21lOnpnZShyKSxsPXM9PT1jbWUsdT1HZ2UoZSksaD1uLmJiQ2FjaGVQb3NLZXk9PT11LGY9ci51c2VDYWNoZSYmaCxkPW8oZnVuY3Rpb24oeSl7cmV0dXJuIHkuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8eS5fcHJpdmF0ZS5zdHlsZURpcnR5fSwiaXNEaXJ0eSIpLHA9IWZ8fGQoZSl8fGEmJmQoZS5zb3VyY2UoKSl8fGQoZS50YXJnZXQoKSk7aWYocD8oaHx8ZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZiksaT1wSmUoZSxqeCksbi5iYkNhY2hlPWksbi5iYkNhY2hlUG9zS2V5PXUpOmk9bi5iYkNhY2hlLCFsKXt2YXIgbT1lLmlzTm9kZSgpO2k9JHMoKSwoci5pbmNsdWRlTm9kZXMmJm18fHIuaW5jbHVkZUVkZ2VzJiYhbSkmJihyLmluY2x1ZGVPdmVybGF5cz9JMChpLG4ub3ZlcmxheUJvdW5kcyk6STAoaSxuLmJvZHlCb3VuZHMpKSxyLmluY2x1ZGVMYWJlbHMmJihyLmluY2x1ZGVNYWluTGFiZWxzJiYoIWF8fHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmci5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9JMChpLG4ubGFiZWxCb3VuZHMuYWxsKTooci5pbmNsdWRlTWFpbkxhYmVscyYmSTAoaSxuLmxhYmVsQm91bmRzLm1haW5Sb3QpLHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmSTAoaSxuLmxhYmVsQm91bmRzLnNvdXJjZVJvdCksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZJMChpLG4ubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLGkudz1pLngyLWkueDEsaS5oPWkueTItaS55MX1yZXR1cm4gaX0sImNhY2hlZEJvdW5kaW5nQm94SW1wbCIpLGp4PXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0sY21lPXpnZShqeCksdW1lPXdhKGp4KTtEZi5ib3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZTtpZih0aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0uX3ByaXZhdGUuYmJDYWNoZSE9bnVsbCYmIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKHQ9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT0hMCkpdD09PXZvaWQgMD90PWp4OnQ9dW1lKHQpLGU9bG1lKHRoaXNbMF0sdCk7ZWxzZXtlPSRzKCksdD10fHxqeDt2YXIgcj11bWUodCksbj10aGlzLGk9bi5jeSgpLGE9aS5zdHlsZUVuYWJsZWQoKTtpZihhKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1uW3NdLHU9bC5fcHJpdmF0ZSxoPUdnZShsKSxmPXUuYmJDYWNoZVBvc0tleT09PWgsZD1yLnVzZUNhY2hlJiZmJiYhdS5zdHlsZURpcnR5O2wucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGQpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXQudXNlQ2FjaGUpO2Zvcih2YXIgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgbT1uW3BdO0kwKGUsbG1lKG0scikpfX1yZXR1cm4gZS54MT1pbChlLngxKSxlLnkxPWlsKGUueTEpLGUueDI9aWwoZS54MiksZS55Mj1pbChlLnkyKSxlLnc9aWwoZS54Mi1lLngxKSxlLmg9aWwoZS55Mi1lLnkxKSxlfTtEZi5kaXJ0eUJvdW5kaW5nQm94Q2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIGU9dGhpc1t0XS5fcHJpdmF0ZTtlLmJiQ2FjaGU9bnVsbCxlLmJiQ2FjaGVQb3NLZXk9bnVsbCxlLmJvZHlCb3VuZHM9bnVsbCxlLm92ZXJsYXlCb3VuZHM9bnVsbCxlLmxhYmVsQm91bmRzLmFsbD1udWxsLGUubGFiZWxCb3VuZHMuc291cmNlPW51bGwsZS5sYWJlbEJvdW5kcy50YXJnZXQ9bnVsbCxlLmxhYmVsQm91bmRzLm1haW49bnVsbCxlLmxhYmVsQm91bmRzLnNvdXJjZVJvdD1udWxsLGUubGFiZWxCb3VuZHMudGFyZ2V0Um90PW51bGwsZS5sYWJlbEJvdW5kcy5tYWluUm90PW51bGwsZS5hcnJvd0JvdW5kcy5zb3VyY2U9bnVsbCxlLmFycm93Qm91bmRzLnRhcmdldD1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC1zb3VyY2UiXT1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC10YXJnZXQiXT1udWxsfXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpLHRoaXN9O0RmLmJvdW5kaW5nQm94QXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ub2RlcygpLHI9dGhpcy5jeSgpLG49ci5oYXNDb21wb3VuZE5vZGVzKCksaT1yLmNvbGxlY3Rpb24oKTtpZihuJiYoaT1lLmZpbHRlcihmdW5jdGlvbihoKXtyZXR1cm4gaC5pc1BhcmVudCgpfSksZT1lLm5vdChpKSksVnIodCkpe3ZhciBhPXQ7dD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGF9LCJmbiIpfXZhciBzPW8oZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fcHJpdmF0ZS5iYkF0T2xkUG9zPXQoZixkKX0sInN0b3JlT2xkUG9zIiksbD1vKGZ1bmN0aW9uKGYpe3JldHVybiBmLl9wcml2YXRlLmJiQXRPbGRQb3N9LCJnZXRPbGRQb3MiKTtyLnN0YXJ0QmF0Y2goKSxlLmZvckVhY2gocykuc2lsZW50UG9zaXRpb25zKHQpLG4mJihpLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGkuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciB1PVJqZSh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZS5zaWxlbnRQb3NpdGlvbnMobCksbiYmKGkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksaS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxpLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSksci5lbmRCYXRjaCgpLHV9O28xLmJvdW5kaW5nYm94PW8xLmJiPW8xLmJvdW5kaW5nQm94O28xLnJlbmRlcmVkQm91bmRpbmdib3g9bzEucmVuZGVyZWRCb3VuZGluZ0JveDttSmU9RGY7Qng9cmI9e307JGdlPW8oZnVuY3Rpb24oZSl7ZS51cHBlcmNhc2VOYW1lPU1wZShlLm5hbWUpLGUuYXV0b05hbWU9ImF1dG8iK2UudXBwZXJjYXNlTmFtZSxlLmxhYmVsTmFtZT0ibGFiZWwiK2UudXBwZXJjYXNlTmFtZSxlLm91dGVyTmFtZT0ib3V0ZXIiK2UudXBwZXJjYXNlTmFtZSxlLnVwcGVyY2FzZU91dGVyTmFtZT1NcGUoZS5vdXRlck5hbWUpLEJ4W2UubmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF0saT1uLl9wcml2YXRlLGE9aS5jeSxzPWEuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKG4paWYocyl7aWYobi5pc1BhcmVudCgpKXJldHVybiBuLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksaVtlLmF1dG9OYW1lXXx8MDt2YXIgbD1uLnBzdHlsZShlLm5hbWUpO3N3aXRjaChsLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gbi5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxpLnJzdHlsZVtlLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gbC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSwiZGltSW1wbCIpLEJ4WyJvdXRlciIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXSxpPW4uX3ByaXZhdGUsYT1pLmN5LHM9YS5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQ7aWYobilpZihzKXt2YXIgbD1uW2UubmFtZV0oKSx1PW4ucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLGg9MipuLnBhZGRpbmcoKTtyZXR1cm4gbCt1K2h9ZWxzZSByZXR1cm4gMX0sIm91dGVyRGltSW1wbCIpLEJ4WyJyZW5kZXJlZCIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXTtpZihuKXt2YXIgaT1uW2UubmFtZV0oKTtyZXR1cm4gaSp0aGlzLmN5KCkuem9vbSgpfX0sInJlbmRlcmVkRGltSW1wbCIpLEJ4WyJyZW5kZXJlZCIrZS51cHBlcmNhc2VPdXRlck5hbWVdPW8oZnVuY3Rpb24oKXt2YXIgbj10aGlzWzBdO2lmKG4pe3ZhciBpPW5bZS5vdXRlck5hbWVdKCk7cmV0dXJuIGkqdGhpcy5jeSgpLnpvb20oKX19LCJyZW5kZXJlZE91dGVyRGltSW1wbCIpfSwiZGVmaW5lRGltRm5zIik7JGdlKHtuYW1lOiJ3aWR0aCJ9KTskZ2Uoe25hbWU6ImhlaWdodCJ9KTtyYi5wYWRkaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXSxlPXQuX3ByaXZhdGU7cmV0dXJuIHQuaXNQYXJlbnQoKT8odC51cGRhdGVDb21wb3VuZEJvdW5kcygpLGUuYXV0b1BhZGRpbmchPT12b2lkIDA/ZS5hdXRvUGFkZGluZzp0LnBzdHlsZSgicGFkZGluZyIpLnBmVmFsdWUpOnQucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZX07cmIucGFkZGVkSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtyZXR1cm4gdC5oZWlnaHQoKSsyKnQucGFkZGluZygpfTtyYi5wYWRkZWRXaWR0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQud2lkdGgoKSsyKnQucGFkZGluZygpfTtnSmU9cmIseUplPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXJldHVybiByKGUpfSwiaWZFZGdlIiksdkplPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXt2YXIgbj1lLmN5KCk7cmV0dXJuIEw2KHIoZSksbi56b29tKCksbi5wYW4oKSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbiIpLHhKZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSl7dmFyIG49ZS5jeSgpLGk9bi5wYW4oKSxhPW4uem9vbSgpO3JldHVybiByKGUpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gTDYocyxhLGkpfSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbnMiKSxiSmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldENvbnRyb2xQb2ludHMoZSl9LCJjb250cm9sUG9pbnRzIiksd0plPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGUpfSwic2VnbWVudFBvaW50cyIpLFRKZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZSl9LCJzb3VyY2VFbmRwb2ludCIpLGtKZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0VGFyZ2V0RW5kcG9pbnQoZSl9LCJ0YXJnZXRFbmRwb2ludCIpLEVKZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KGUpfSwibWlkcG9pbnQiKSxobWU9e2NvbnRyb2xQb2ludHM6e2dldDpiSmUsbXVsdDohMH0sc2VnbWVudFBvaW50czp7Z2V0OndKZSxtdWx0OiEwfSxzb3VyY2VFbmRwb2ludDp7Z2V0OlRKZX0sdGFyZ2V0RW5kcG9pbnQ6e2dldDprSmV9LG1pZHBvaW50OntnZXQ6RUplfX0sU0plPW8oZnVuY3Rpb24oZSl7cmV0dXJuInJlbmRlcmVkIitlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSl9LCJyZW5kZXJlZE5hbWUiKSxDSmU9T2JqZWN0LmtleXMoaG1lKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj1obWVbZV0sbj1TSmUoZSk7cmV0dXJuIHRbZV09ZnVuY3Rpb24oKXtyZXR1cm4geUplKHRoaXMsci5nZXQpfSxyLm11bHQ/dFtuXT1mdW5jdGlvbigpe3JldHVybiB4SmUodGhpcyxyLmdldCl9OnRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdkplKHRoaXMsci5nZXQpfSx0fSx7fSksQUplPWlyKHt9LGZKZSxtSmUsZ0plLENKZSk7VmdlPW8oZnVuY3Rpb24oZSxyKXt0aGlzLnJlY3ljbGUoZSxyKX0sIkV2ZW50Iik7byhSeCwicmV0dXJuRmFsc2UiKTtvKGU2LCJyZXR1cm5UcnVlIik7VmdlLnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiJldmVudCJ9LCJpbnN0YW5jZVN0cmluZyIpLHJlY3ljbGU6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1SeCxlIT1udWxsJiZlLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZD9lNjpSeCk6ZSE9bnVsbCYmZS50eXBlP3I9ZTp0aGlzLnR5cGU9ZSxyIT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXIub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9ci50eXBlIT1udWxsP3IudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT1yLmN5LHRoaXMudGFyZ2V0PXIudGFyZ2V0LHRoaXMucG9zaXRpb249ci5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249ci5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXIubmFtZXNwYWNlLHRoaXMubGF5b3V0PXIubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBuPXRoaXMucG9zaXRpb24saT10aGlzLmN5Lnpvb20oKSxhPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4Om4ueCppK2EueCx5Om4ueSppK2EueX19dGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fERhdGUubm93KCl9LCJyZWN5Y2xlIikscHJldmVudERlZmF1bHQ6byhmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWU2O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCl9LCJwcmV2ZW50RGVmYXVsdCIpLHN0b3BQcm9wYWdhdGlvbjpvKGZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1lNjt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7ZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCl9LCJzdG9wUHJvcGFnYXRpb24iKSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246byhmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9ZTYsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0sInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIpLGlzRGVmYXVsdFByZXZlbnRlZDpSeCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpSeCxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpSeH07VWdlPS9eKFteLl0rKShcLig/OlteLl0rKSk/JC8sX0plPSIuKiIsSGdlPXtxdWFsaWZpZXJDb21wYXJlOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXJ9LCJxdWFsaWZpZXJDb21wYXJlIiksZXZlbnRNYXRjaGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oKXt9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiY2FsbGJhY2tDb250ZXh0IiksYmVmb3JlRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYmVmb3JlRW1pdCIpLGFmdGVyRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYWZ0ZXJFbWl0IiksYnViYmxlOm8oZnVuY3Rpb24oKXtyZXR1cm4hMX0sImJ1YmJsZSIpLHBhcmVudDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LCJwYXJlbnQiKSxjb250ZXh0Om51bGx9LGZtZT1PYmplY3Qua2V5cyhIZ2UpLExKZT17fTtvKE82LCJFbWl0dGVyIik7TGY9TzYucHJvdG90eXBlLFdnZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3RpKGkpJiYoYT1pLGk9bnVsbCksbCYmKHM9PW51bGw/cz1sOnM9aXIoe30scyxsKSk7Zm9yKHZhciB1PXduKG4pP246bi5zcGxpdCgvXHMrLyksaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2lmKCFTZihmKSl7dmFyIGQ9Zi5tYXRjaChVZ2UpO2lmKGQpe3ZhciBwPWRbMV0sbT1kWzJdP2RbMl06bnVsbCxnPXIoZSxmLHAsbSxpLGEscyk7aWYoZz09PSExKWJyZWFrfX19fSwiZm9yRWFjaEV2ZW50IiksZG1lPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5hZGRFdmVudEZpZWxkcyhlLmNvbnRleHQsciksbmV3IFZnZShyLnR5cGUscil9LCJtYWtlRXZlbnRPYmoiKSxESmU9byhmdW5jdGlvbihlLHIsbil7aWYoS3FlKG4pKXtyKGUsbik7cmV0dXJufWVsc2UgaWYoVnIobikpe3IoZSxkbWUoZSxuKSk7cmV0dXJufWZvcih2YXIgaT13bihuKT9uOm4uc3BsaXQoL1xzKy8pLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtpZighU2Yocykpe3ZhciBsPXMubWF0Y2goVWdlKTtpZihsKXt2YXIgdT1sWzFdLGg9bFsyXT9sWzJdOm51bGwsZj1kbWUoZSx7dHlwZTp1LG5hbWVzcGFjZTpoLHRhcmdldDplLmNvbnRleHR9KTtyKGUsZil9fX19LCJmb3JFYWNoRXZlbnRPYmoiKTtMZi5vbj1MZi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBXZ2UodGhpcyxmdW5jdGlvbihhLHMsbCx1LGgsZixkKXt0aShmKSYmYS5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6cyxjYWxsYmFjazpmLHR5cGU6bCxuYW1lc3BhY2U6dSxxdWFsaWZpZXI6aCxjb25mOmR9KX0sdCxlLHIsbixpKSx0aGlzfTtMZi5vbmU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMub24odCxlLHIsbix7b25lOiEwfSl9O0xmLnJlbW92ZUxpc3RlbmVyPUxmLm9mZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO3RoaXMuZW1pdHRpbmchPT0wJiYodGhpcy5saXN0ZW5lcnM9YWplKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBhPXRoaXMubGlzdGVuZXJzLHM9byhmdW5jdGlvbihoKXt2YXIgZj1hW2hdO1dnZShpLGZ1bmN0aW9uKGQscCxtLGcseSx2KXtpZigoZi50eXBlPT09bXx8dD09PSIqIikmJighZyYmZi5uYW1lc3BhY2UhPT0iLioifHxmLm5hbWVzcGFjZT09PWcpJiYoIXl8fGQucXVhbGlmaWVyQ29tcGFyZShmLnF1YWxpZmllcix5KSkmJighdnx8Zi5jYWxsYmFjaz09PXYpKXJldHVybiBhLnNwbGljZShoLDEpLCExfSx0LGUscixuKX0sIl9sb29wIiksbD1hLmxlbmd0aC0xO2w+PTA7bC0tKXMobCk7cmV0dXJuIHRoaXN9O0xmLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9O0xmLmVtaXQ9TGYudHJpZ2dlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5saXN0ZW5lcnMsaT1uLmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLHduKGUpfHwoZT1bZV0pLERKZSh0aGlzLGZ1bmN0aW9uKGEscyl7ciE9bnVsbCYmKG49W3tldmVudDpzLmV2ZW50LHR5cGU6cy50eXBlLG5hbWVzcGFjZTpzLm5hbWVzcGFjZSxjYWxsYmFjazpyfV0saT1uLmxlbmd0aCk7Zm9yKHZhciBsPW8oZnVuY3Rpb24oZil7dmFyIGQ9bltmXTtpZihkLnR5cGU9PT1zLnR5cGUmJighZC5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09cy5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09X0plKSYmYS5ldmVudE1hdGNoZXMoYS5jb250ZXh0LGQscykpe3ZhciBwPVtzXTtlIT1udWxsJiZvamUocCxlKSxhLmJlZm9yZUVtaXQoYS5jb250ZXh0LGQscyksZC5jb25mJiZkLmNvbmYub25lJiYoYS5saXN0ZW5lcnM9YS5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiB5IT09ZH0pKTt2YXIgbT1hLmNhbGxiYWNrQ29udGV4dChhLmNvbnRleHQsZCxzKSxnPWQuY2FsbGJhY2suYXBwbHkobSxwKTthLmFmdGVyRW1pdChhLmNvbnRleHQsZCxzKSxnPT09ITEmJihzLnN0b3BQcm9wYWdhdGlvbigpLHMucHJldmVudERlZmF1bHQoKSl9fSwiX2xvb3AyIiksdT0wO3U8aTt1KyspbCh1KTthLmJ1YmJsZShhLmNvbnRleHQpJiYhcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZhLnBhcmVudChhLmNvbnRleHQpLmVtaXQocyxlKX0sdCksdGhpcy5lbWl0dGluZy0tLHRoaXN9O05KZT17cXVhbGlmaWVyQ29tcGFyZTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU9PW51bGx8fHI9PW51bGw/ZT09bnVsbCYmcj09bnVsbDplLnNhbWVUZXh0KHIpfSwicXVhbGlmaWVyQ29tcGFyZSIpLGV2ZW50TWF0Y2hlczpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLnF1YWxpZmllcjtyZXR1cm4gaSE9bnVsbD9lIT09bi50YXJnZXQmJkp4KG4udGFyZ2V0KSYmaS5tYXRjaGVzKG4udGFyZ2V0KTohMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oZSxyKXtyLmN5PWUuY3koKSxyLnRhcmdldD1lfSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHIucXVhbGlmaWVyIT1udWxsP24udGFyZ2V0OmV9LCJjYWxsYmFja0NvbnRleHQiKSxiZWZvcmVFbWl0Om8oZnVuY3Rpb24oZSxyKXtyLmNvbmYmJnIuY29uZi5vbmNlJiZyLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIoci5ldmVudCxyLnF1YWxpZmllcixyLmNhbGxiYWNrKX0sImJlZm9yZUVtaXQiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpP2UucGFyZW50KCk6ZS5jeSgpfSwicGFyZW50Iil9LHQ2PW8oZnVuY3Rpb24oZSl7cmV0dXJuIFp0KGUpP25ldyBBZihlKTplfSwiYXJnU2VsZWN0b3IiKSxZZ2U9e2NyZWF0ZUVtaXR0ZXI6byhmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdLG49ci5fcHJpdmF0ZTtuLmVtaXR0ZXJ8fChuLmVtaXR0ZXI9bmV3IE82KE5KZSxyKSl9cmV0dXJuIHRoaXN9LCJjcmVhdGVFbWl0dGVyIiksZW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sImVtaXR0ZXIiKSxvbjpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9dDYociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuKX1yZXR1cm4gdGhpc30sIm9uIikscmVtb3ZlTGlzdGVuZXI6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPXQ2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLGksbil9cmV0dXJuIHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV07ci5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCl9cmV0dXJuIHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPXQ2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbmUoZSxpLG4pfXJldHVybiB0aGlzfSwib25lIiksb25jZTpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9dDYociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuLHtvbmNlOiEwLG9uY2VDb2xsZWN0aW9uOnRoaXN9KX19LCJvbmNlIiksZW1pdDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl07aS5lbWl0dGVyKCkuZW1pdChlLHIpfXJldHVybiB0aGlzfSwiZW1pdCIpLGVtaXRBbmROb3RpZnk6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShlLHRoaXMpLHRoaXMuZW1pdChlLHIpLHRoaXN9LCJlbWl0QW5kTm90aWZ5Iil9O3NuLmV2ZW50QWxpYXNlc09uKFlnZSk7cWdlPXtub2RlczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKX0pLmZpbHRlcihlKX0sIm5vZGVzIiksZWRnZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNFZGdlKCl9KS5maWx0ZXIoZSl9LCJlZGdlcyIpLGJ5R3JvdXA6byhmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnNwYXduKCkscj10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dO2kuaXNOb2RlKCk/ZS5wdXNoKGkpOnIucHVzaChpKX1yZXR1cm57bm9kZXM6ZSxlZGdlczpyfX0sImJ5R3JvdXAiKSxmaWx0ZXI6byhmdW5jdGlvbihlLHIpe2lmKGU9PT12b2lkIDApcmV0dXJuIHRoaXM7aWYoWnQoZSl8fHBvKGUpKXJldHVybiBuZXcgQWYoZSkuZmlsdGVyKHRoaXMpO2lmKHRpKGUpKXtmb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtsJiZuLnB1c2gocyl9cmV0dXJuIG59cmV0dXJuIHRoaXMuc3Bhd24oKX0sImZpbHRlciIpLG5vdDpvKGZ1bmN0aW9uKGUpe2lmKGUpe1p0KGUpJiYoZT10aGlzLmZpbHRlcihlKSk7Zm9yKHZhciByPXRoaXMuc3Bhd24oKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl0sYT1lLmhhcyhpKTthfHxyLnB1c2goaSl9cmV0dXJuIHJ9ZWxzZSByZXR1cm4gdGhpc30sIm5vdCIpLGFic29sdXRlQ29tcGxlbWVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO3JldHVybiBlLm11dGFibGVFbGVtZW50cygpLm5vdCh0aGlzKX0sImFic29sdXRlQ29tcGxlbWVudCIpLGludGVyc2VjdDpvKGZ1bmN0aW9uKGUpe2lmKFp0KGUpKXt2YXIgcj1lO3JldHVybiB0aGlzLmZpbHRlcihyKX1mb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPWUscz10aGlzLmxlbmd0aDxlLmxlbmd0aCxsPXM/aTphLHU9cz9hOmksaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO3UuaGFzKGYpJiZuLnB1c2goZil9cmV0dXJuIG59LCJpbnRlcnNlY3QiKSx4b3I6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O1p0KGUpJiYoZT1yLiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT1lLHM9byhmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgZD11W2ZdLHA9ZC5fcHJpdmF0ZS5kYXRhLmlkLG09aC5oYXNFbGVtZW50V2l0aElkKHApO218fG4ucHVzaChkKX19LCJhZGQiKTtyZXR1cm4gcyhpLGEpLHMoYSxpKSxufSwieG9yIiksZGlmZjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7WnQoZSkmJihlPXIuJChlKSk7dmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcy5zcGF3bigpLGE9dGhpcy5zcGF3bigpLHM9dGhpcyxsPWUsdT1vKGZ1bmN0aW9uKGYsZCxwKXtmb3IodmFyIG09MDttPGYubGVuZ3RoO20rKyl7dmFyIGc9ZlttXSx5PWcuX3ByaXZhdGUuZGF0YS5pZCx2PWQuaGFzRWxlbWVudFdpdGhJZCh5KTt2P2EubWVyZ2UoZyk6cC5wdXNoKGcpfX0sImFkZCIpO3JldHVybiB1KHMsbCxuKSx1KGwscyxpKSx7bGVmdDpuLHJpZ2h0OmksYm90aDphfX0sImRpZmYiKSxhZGQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O2lmKCFlKXJldHVybiB0aGlzO2lmKFp0KGUpKXt2YXIgbj1lO2U9ci5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9Zm9yKHZhciBpPXRoaXMuc3Bhd25TZWxmKCksYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgcz1lW2FdLGw9IXRoaXMuaGFzKHMpO2wmJmkucHVzaChzKX1yZXR1cm4gaX0sImFkZCIpLG1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIuY3k7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZSYmWnQoZSkpe3ZhciBpPWU7ZT1uLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihpKX1mb3IodmFyIGE9ci5tYXAscz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLHU9bC5fcHJpdmF0ZS5kYXRhLmlkLGg9IWEuaGFzKHUpO2lmKGgpe3ZhciBmPXRoaXMubGVuZ3RoKys7dGhpc1tmXT1sLGEuc2V0KHUse2VsZTpsLGluZGV4OmZ9KX19cmV0dXJuIHRoaXN9LCJtZXJnZSIpLHVubWVyZ2VBdDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbZV0sbj1yLmlkKCksaT10aGlzLl9wcml2YXRlLGE9aS5tYXA7dGhpc1tlXT12b2lkIDAsYS5kZWxldGUobik7dmFyIHM9ZT09PXRoaXMubGVuZ3RoLTE7aWYodGhpcy5sZW5ndGg+MSYmIXMpe3ZhciBsPXRoaXMubGVuZ3RoLTEsdT10aGlzW2xdLGg9dS5fcHJpdmF0ZS5kYXRhLmlkO3RoaXNbbF09dm9pZCAwLHRoaXNbZV09dSxhLnNldChoLHtlbGU6dSxpbmRleDplfSl9cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpc30sInVubWVyZ2VBdCIpLHVubWVyZ2VPbmU6byhmdW5jdGlvbihlKXtlPWVbMF07dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPWUuX3ByaXZhdGUuZGF0YS5pZCxpPXIubWFwLGE9aS5nZXQobik7aWYoIWEpcmV0dXJuIHRoaXM7dmFyIHM9YS5pbmRleDtyZXR1cm4gdGhpcy51bm1lcmdlQXQocyksdGhpc30sInVubWVyZ2VPbmUiKSx1bm1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtpZighZSlyZXR1cm4gdGhpcztpZihlJiZadChlKSl7dmFyIG49ZTtlPXIubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMudW5tZXJnZU9uZShlW2ldKTtyZXR1cm4gdGhpc30sInVubWVyZ2UiKSx1bm1lcmdlQnk6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49dGhpc1tyXTtlKG4pJiZ0aGlzLnVubWVyZ2VBdChyKX1yZXR1cm4gdGhpc30sInVubWVyZ2VCeSIpLG1hcDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPVtdLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtuLnB1c2gobCl9cmV0dXJuIG59LCJtYXAiKSxyZWR1Y2U6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspbj1lKG4saVthXSxhLGkpO3JldHVybiBufSwicmVkdWNlIiksbWF4Om8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49LTEvMCxpLGE9dGhpcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1yP2UuYXBwbHkocixbbCxzLGFdKTplKGwscyxhKTt1Pm4mJihuPXUsaT1sKX1yZXR1cm57dmFsdWU6bixlbGU6aX19LCJtYXgiKSxtaW46byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xLzAsaSxhPXRoaXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9cj9lLmFwcGx5KHIsW2wscyxhXSk6ZShsLHMsYSk7dTxuJiYobj11LGk9bCl9cmV0dXJue3ZhbHVlOm4sZWxlOml9fSwibWluIil9LFFyPXFnZTtRci51PVFyWyJ8Il09UXJbIisiXT1Rci51bmlvbj1Rci5vcj1Rci5hZGQ7UXJbIlxcIl09UXJbIiEiXT1RclsiLSJdPVFyLmRpZmZlcmVuY2U9UXIucmVsYXRpdmVDb21wbGVtZW50PVFyLnN1YnRyYWN0PVFyLm5vdDtRci5uPVFyWyImIl09UXJbIi4iXT1Rci5hbmQ9UXIuaW50ZXJzZWN0aW9uPVFyLmludGVyc2VjdDtRclsiXiJdPVFyWyIoKykiXT1RclsiKC0pIl09UXIuc3ltbWV0cmljRGlmZmVyZW5jZT1Rci5zeW1kaWZmPVFyLnhvcjtRci5mbkZpbHRlcj1Rci5maWx0ZXJGbj1Rci5zdGRGaWx0ZXI9UXIuZmlsdGVyO1FyLmNvbXBsZW1lbnQ9UXIuYWJzY29tcD1Rci5hYnNvbHV0ZUNvbXBsZW1lbnQ7UkplPXtpc05vZGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0ibm9kZXMifSwiaXNOb2RlIiksaXNFZGdlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCgpPT09ImVkZ2VzIn0sImlzRWRnZSIpLGlzTG9vcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF09PT10aGlzLnRhcmdldCgpWzBdfSwiaXNMb29wIiksaXNTaW1wbGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRWRnZSgpJiZ0aGlzLnNvdXJjZSgpWzBdIT09dGhpcy50YXJnZXQoKVswXX0sImlzU2ltcGxlIiksZ3JvdXA6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5fcHJpdmF0ZS5ncm91cH0sImdyb3VwIil9LFhnZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jeSgpLGk9bi5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gYShmKXt2YXIgZD1mLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iP2k/Zi56RGVwdGgoKTowOmQudmFsdWU9PT0iYm90dG9tIj8tMTpkLnZhbHVlPT09InRvcCI/bkI6MH1vKGEsImdldERlcHRoIik7dmFyIHM9YShlKS1hKHIpO2lmKHMhPT0wKXJldHVybiBzO2Z1bmN0aW9uIGwoZil7dmFyIGQ9Zi5wc3R5bGUoInotaW5kZXgtY29tcGFyZSIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iJiZmLmlzTm9kZSgpPzE6MH1vKGwsImdldEVsZURlcHRoIik7dmFyIHU9bChlKS1sKHIpO2lmKHUhPT0wKXJldHVybiB1O3ZhciBoPWUucHN0eWxlKCJ6LWluZGV4IikudmFsdWUtci5wc3R5bGUoInotaW5kZXgiKS52YWx1ZTtyZXR1cm4gaCE9PTA/aDplLnBvb2xJbmRleCgpLXIucG9vbEluZGV4KCl9LCJ6SW5kZXhTb3J0IiksYjY9e2ZvckVhY2g6byhmdW5jdGlvbihlLHIpe2lmKHRpKGUpKWZvcih2YXIgbj10aGlzLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dGhpc1tpXSxzPXI/ZS5hcHBseShyLFthLGksdGhpc10pOmUoYSxpLHRoaXMpO2lmKHM9PT0hMSlicmVha31yZXR1cm4gdGhpc30sImZvckVhY2giKSx0b0FycmF5Om8oZnVuY3Rpb24oKXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWUucHVzaCh0aGlzW3JdKTtyZXR1cm4gZX0sInRvQXJyYXkiKSxzbGljZTpvKGZ1bmN0aW9uKGUscil7dmFyIG49W10saT10aGlzLmxlbmd0aDtyPT1udWxsJiYocj1pKSxlPT1udWxsJiYoZT0wKSxlPDAmJihlPWkrZSkscjwwJiYocj1pK3IpO2Zvcih2YXIgYT1lO2E+PTAmJmE8ciYmYTxpO2ErKyluLnB1c2godGhpc1thXSk7cmV0dXJuIHRoaXMuc3Bhd24obil9LCJzbGljZSIpLHNpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sInNpemUiKSxlcTpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfHx0aGlzLnNwYXduKCl9LCJlcSIpLGZpcnN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXXx8dGhpcy5zcGF3bigpfSwiZmlyc3QiKSxsYXN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSwibGFzdCIpLGVtcHR5Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9PT0wfSwiZW1wdHkiKSxub25lbXB0eTpvKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sIm5vbmVtcHR5Iiksc29ydDpvKGZ1bmN0aW9uKGUpe2lmKCF0aShlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLnRvQXJyYXkoKS5zb3J0KGUpO3JldHVybiB0aGlzLnNwYXduKHIpfSwic29ydCIpLHNvcnRCeVpJbmRleDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChYZ2UpfSwic29ydEJ5WkluZGV4IiksekRlcHRoOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpe3ZhciByPWUuX3ByaXZhdGUsbj1yLmdyb3VwO2lmKG49PT0ibm9kZXMiKXt2YXIgaT1yLmRhdGEucGFyZW50P2UucGFyZW50cygpLnNpemUoKTowO3JldHVybiBlLmlzUGFyZW50KCk/aTpuQi0xfWVsc2V7dmFyIGE9ci5zb3VyY2Uscz1yLnRhcmdldCxsPWEuekRlcHRoKCksdT1zLnpEZXB0aCgpO3JldHVybiBNYXRoLm1heChsLHUsMCl9fX0sInpEZXB0aCIpfTtiNi5lYWNoPWI2LmZvckVhY2g7TUplPW8oZnVuY3Rpb24oKXt2YXIgZT0idW5kZWZpbmVkIixyPSh0eXBlb2YgU3ltYm9sPiJ1Ij8idW5kZWZpbmVkIjpZaShTeW1ib2wpKSE9ZSYmWWkoU3ltYm9sLml0ZXJhdG9yKSE9ZTtyJiYoYjZbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBuPXRoaXMsaT17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LGE9MCxzPXRoaXMubGVuZ3RoO3JldHVybiBIbWUoe25leHQ6byhmdW5jdGlvbigpe3JldHVybiBhPHM/aS52YWx1ZT1uW2ErK106KGkudmFsdWU9dm9pZCAwLGkuZG9uZT0hMCksaX0sIm5leHQiKX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfSwiZGVmaW5lU3ltYm9sSXRlcmF0b3IiKTtNSmUoKTtJSmU9d2Eoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMX0pLGw2PXtsYXlvdXREaW1lbnNpb25zOm8oZnVuY3Rpb24oZSl7ZT1JSmUoZSk7dmFyIHI7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpcj17dzowLGg6MH07ZWxzZSBpZihlLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIG49dGhpcy5ib3VuZGluZ0JveCgpO3I9e3c6bi53LGg6bi5ofX1lbHNlIHI9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybihyLnc9PT0wfHxyLmg9PT0wKSYmKHIudz1yLmg9MSkscn0sImxheW91dERpbWVuc2lvbnMiKSxsYXlvdXRQb3NpdGlvbnM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4hVC5pc1BhcmVudCgpfSksYT10aGlzLmN5KCkscz1yLmVsZXMsbD1vKGZ1bmN0aW9uKEUpe3JldHVybiBFLmlkKCl9LCJnZXRNZW1vaXplS2V5IiksdT0keChuLGwpO2UuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDplfSksZS5hbmltYXRpb25zPVtdO3ZhciBoPW8oZnVuY3Rpb24oRSxMLEMpe3ZhciBBPXt4OkwueDErTC53LzIseTpMLnkxK0wuaC8yfSxJPXt4OihDLngtQS54KSpFLHk6KEMueS1BLnkpKkV9O3JldHVybnt4OkEueCtJLngseTpBLnkrSS55fX0sImNhbGN1bGF0ZVNwYWNpbmciKSxmPXIuc3BhY2luZ0ZhY3RvciYmci5zcGFjaW5nRmFjdG9yIT09MSxkPW8oZnVuY3Rpb24oKXtpZighZilyZXR1cm4gbnVsbDtmb3IodmFyIEU9JHMoKSxMPTA7TDxpLmxlbmd0aDtMKyspe3ZhciBDPWlbTF0sQT11KEMsTCk7T2plKEUsQS54LEEueSl9cmV0dXJuIEV9LCJzcGFjaW5nQmIiKSxwPWQoKSxtPSR4KGZ1bmN0aW9uKFQsRSl7dmFyIEw9dShULEUpO2lmKGYpe3ZhciBDPU1hdGguYWJzKHIuc3BhY2luZ0ZhY3Rvcik7TD1oKEMscCxMKX1yZXR1cm4gci50cmFuc2Zvcm0hPW51bGwmJihMPXIudHJhbnNmb3JtKFQsTCkpLEx9LGwpO2lmKHIuYW5pbWF0ZSl7Zm9yKHZhciBnPTA7ZzxpLmxlbmd0aDtnKyspe3ZhciB5PWlbZ10sdj1tKHksZykseD1yLmFuaW1hdGVGaWx0ZXI9PW51bGx8fHIuYW5pbWF0ZUZpbHRlcih5LGcpO2lmKHgpe3ZhciBiPXkuYW5pbWF0aW9uKHtwb3NpdGlvbjp2LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goYil9ZWxzZSB5LnBvc2l0aW9uKHYpfWlmKHIuZml0KXt2YXIgdz1hLmFuaW1hdGlvbih7Zml0Ontib3VuZGluZ0JveDpzLmJvdW5kaW5nQm94QXQobSkscGFkZGluZzpyLnBhZGRpbmd9LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2godyl9ZWxzZSBpZihyLnpvb20hPT12b2lkIDAmJnIucGFuIT09dm9pZCAwKXt2YXIgXz1hLmFuaW1hdGlvbih7em9vbTpyLnpvb20scGFuOnIucGFuLGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goXyl9ZS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oVCl7cmV0dXJuIFQucGxheSgpfSksZS5vbmUoImxheW91dHJlYWR5IixyLnJlYWR5KSxlLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6ZX0pLGQxLmFsbChlLmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBULnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbmUoImxheW91dHN0b3AiLHIuc3RvcCksZS5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZX0pfSl9ZWxzZSBpLnBvc2l0aW9ucyhtKSxyLmZpdCYmYS5maXQoci5lbGVzLHIucGFkZGluZyksci56b29tIT1udWxsJiZhLnpvb20oci56b29tKSxyLnBhbiYmYS5wYW4oci5wYW4pLGUub25lKCJsYXlvdXRyZWFkeSIsci5yZWFkeSksZS5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OmV9KSxlLm9uZSgibGF5b3V0c3RvcCIsci5zdG9wKSxlLmVtaXQoe3R5cGU6ImxheW91dHN0b3AiLGxheW91dDplfSk7cmV0dXJuIHRoaXN9LCJsYXlvdXRQb3NpdGlvbnMiKSxsYXlvdXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7cmV0dXJuIHIubWFrZUxheW91dChpcih7fSxlLHtlbGVzOnRoaXN9KSl9LCJsYXlvdXQiKX07bDYuY3JlYXRlTGF5b3V0PWw2Lm1ha2VMYXlvdXQ9bDYubGF5b3V0O28oamdlLCJzdHlsZUNhY2hlIik7byhQNiwiY2FjaGVTdHlsZUZ1bmN0aW9uIik7byhCNiwiY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uIik7eGE9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXIucmVuZGVyZXIoKSxpPXIuc3R5bGVFbmFibGVkKCk7cmV0dXJuIG4mJmkmJm4ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHRoaXMsZSksdGhpc30sInJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSIpLGRpcnR5U3R5bGVDYWNoZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpLHI9byhmdW5jdGlvbihhKXtyZXR1cm4gYS5fcHJpdmF0ZS5zdHlsZUNhY2hlPW51bGx9LCJkaXJ0eSIpO2lmKGUuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgbjtuPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSksbi5tZXJnZShuLmNvbm5lY3RlZEVkZ2VzKCkpLG4uZm9yRWFjaChyKX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihpKXtyKGkpLGkuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHIpfSk7cmV0dXJuIHRoaXN9LCJkaXJ0eVN0eWxlQ2FjaGUiKSx1cGRhdGVTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYoci5iYXRjaGluZygpKXt2YXIgbj1yLl9wcml2YXRlLmJhdGNoU3R5bGVFbGVzO3JldHVybiBuLm1lcmdlKHRoaXMpLHRoaXN9dmFyIGk9ci5oYXNDb21wb3VuZE5vZGVzKCksYT10aGlzO2U9ISEoZXx8ZT09PXZvaWQgMCksaSYmKGE9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIHM9YTtyZXR1cm4gZT9zLmVtaXRBbmROb3RpZnkoInN0eWxlIik6cy5lbWl0KCJzdHlsZSIpLGEuZm9yRWFjaChmdW5jdGlvbihsKXtyZXR1cm4gbC5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sInVwZGF0ZVN0eWxlIiksY2xlYW5TdHlsZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKGUuc3R5bGVFbmFibGVkKCkpZm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXNbcl07bi5fcHJpdmF0ZS5zdHlsZURpcnR5JiYobi5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGUuc3R5bGUoKS5hcHBseShuKSl9fSwiY2xlYW5TdHlsZSIpLHBhcnNlZFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLG49dGhpc1swXSxpPW4uY3koKTtpZihpLnN0eWxlRW5hYmxlZCgpJiZuKXt0aGlzLmNsZWFuU3R5bGUoKTt2YXIgYT1uLl9wcml2YXRlLnN0eWxlW2VdO3JldHVybiBhPz8ocj9pLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGUpOm51bGwpfX0sInBhcnNlZFN0eWxlIiksbnVtZXJpY1N0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXTtpZihyLmN5KCkuc3R5bGVFbmFibGVkKCkmJnIpe3ZhciBuPXIucHN0eWxlKGUpO3JldHVybiBuLnBmVmFsdWUhPT12b2lkIDA/bi5wZlZhbHVlOm4udmFsdWV9fSwibnVtZXJpY1N0eWxlIiksbnVtZXJpY1N0eWxlVW5pdHM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdO2lmKHIuY3koKS5zdHlsZUVuYWJsZWQoKSYmcilyZXR1cm4gci5wc3R5bGUoZSkudW5pdHN9LCJudW1lcmljU3R5bGVVbml0cyIpLHJlbmRlcmVkU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiByLnN0eWxlKCkuZ2V0UmVuZGVyZWRTdHlsZShuLGUpfSwicmVuZGVyZWRTdHlsZSIpLHN0eWxlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmN5KCk7aWYoIW4uc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIGk9ITEsYT1uLnN0eWxlKCk7aWYoVnIoZSkpe3ZhciBzPWU7YS5hcHBseUJ5cGFzcyh0aGlzLHMsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYoWnQoZSkpaWYocj09PXZvaWQgMCl7dmFyIGw9dGhpc1swXTtyZXR1cm4gbD9hLmdldFN0eWxlUHJvcGVydHlWYWx1ZShsLGUpOnZvaWQgMH1lbHNlIGEuYXBwbHlCeXBhc3ModGhpcyxlLHIsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZT09PXZvaWQgMCl7dmFyIHU9dGhpc1swXTtyZXR1cm4gdT9hLmdldFJhd1N0eWxlKHUpOnZvaWQgMH1yZXR1cm4gdGhpc30sInN0eWxlIikscmVtb3ZlU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49ITEsaT1yLnN0eWxlKCksYT10aGlzO2lmKGU9PT12b2lkIDApZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aS5yZW1vdmVBbGxCeXBhc3NlcyhsLG4pfWVsc2V7ZT1lLnNwbGl0KC9ccysvKTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGg9YVt1XTtpLnJlbW92ZUJ5cGFzc2VzKGgsZSxuKX19cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSx0aGlzfSwicmVtb3ZlU3R5bGUiKSxzaG93Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJlbGVtZW50IiksdGhpc30sInNob3ciKSxoaWRlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJub25lIiksdGhpc30sImhpZGUiKSxlZmZlY3RpdmVPcGFjaXR5Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHI9ZS5oYXNDb21wb3VuZE5vZGVzKCksbj10aGlzWzBdO2lmKG4pe3ZhciBpPW4uX3ByaXZhdGUsYT1uLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCFyKXJldHVybiBhO3ZhciBzPWkuZGF0YS5wYXJlbnQ/bi5wYXJlbnRzKCk6bnVsbDtpZihzKWZvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdLGg9dS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTthPWgqYX1yZXR1cm4gYX19LCJlZmZlY3RpdmVPcGFjaXR5IiksdHJhbnNwYXJlbnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcj10aGlzWzBdLG49ci5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihyKXJldHVybiBuP3IuZWZmZWN0aXZlT3BhY2l0eSgpPT09MDpyLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlPT09MH0sInRyYW5zcGFyZW50IiksYmFja2dyb3VuZGluZzpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciByPXRoaXNbMF07cmV0dXJuISFyLl9wcml2YXRlLmJhY2tncm91bmRpbmd9LCJiYWNrZ3JvdW5kaW5nIil9O28oUlAsImNoZWNrQ29tcG91bmQiKTtvKG1CLCJkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbiIpO3kxPVA2KCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ0LndpZHRoKCkhPT0wJiYodC5pc05vZGUoKT90LmhlaWdodCgpIT09MDohMCl9KTt4YS50YWtlc1VwU3BhY2U9QjYoInRha2VzVXBTcGFjZSIsbUIoe29rOnkxfSkpO09KZT1QNigiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeTEodCl9KSxQSmU9UDYoInBhcmVudEludGVyYWN0aXZlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeTEodCl9KTt4YS5pbnRlcmFjdGl2ZT1CNigiaW50ZXJhY3RpdmUiLG1CKHtvazpPSmUscGFyZW50T2s6UEplLGVkZ2VPa1ZpYU5vZGU6eTF9KSk7eGEubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQuaW50ZXJhY3RpdmUoKX07QkplPVA2KCJlbGVWaXNpYmxlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdC5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmeTEodCl9KSxGSmU9eTE7eGEudmlzaWJsZT1CNigidmlzaWJsZSIsbUIoe29rOkJKZSxlZGdlT2tWaWFOb2RlOkZKZX0pKTt4YS5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQudmlzaWJsZSgpfTt4YS5pc0J1bmRsZWRCZXppZXI9QjYoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pO3hhLmJ5cGFzcz14YS5jc3M9eGEuc3R5bGU7eGEucmVuZGVyZWRDc3M9eGEucmVuZGVyZWRTdHlsZTt4YS5yZW1vdmVCeXBhc3M9eGEucmVtb3ZlQ3NzPXhhLnJlbW92ZVN0eWxlO3hhLnBzdHlsZT14YS5wYXJzZWRTdHlsZTtFZj17fTtvKHBtZSwiZGVmaW5lU3dpdGNoRnVuY3Rpb24iKTtvKHYxLCJkZWZpbmVTd2l0Y2hTZXQiKTt2MSh7ZmllbGQ6ImxvY2tlZCIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b2xvY2soKT8hMDp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImxvY2siLG9mZjoidW5sb2NrIn0pO3YxKHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5ncmFiaWZ5KCl8fGUucGFubmFibGUoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImdyYWJpZnkiLG9mZjoidW5ncmFiaWZ5In0pO3YxKHtmaWVsZDoic2VsZWN0ZWQiLGFibGVGaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVBYmxlOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUFibGUiKSxvbjoic2VsZWN0IixvZmY6InVuc2VsZWN0In0pO3YxKHtmaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJzZWxlY3RpZnkiLG9mZjoidW5zZWxlY3RpZnkifSk7RWYuZGVzZWxlY3Q9RWYudW5zZWxlY3Q7RWYuZ3JhYmJlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4gdC5fcHJpdmF0ZS5ncmFiYmVkfTt2MSh7ZmllbGQ6ImFjdGl2ZSIsb246ImFjdGl2YXRlIixvZmY6InVuYWN0aXZhdGUifSk7djEoe2ZpZWxkOiJwYW5uYWJsZSIsb246InBhbmlmeSIsb2ZmOiJ1bnBhbmlmeSJ9KTtFZi5pbmFjdGl2ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4hdC5fcHJpdmF0ZS5hY3RpdmV9O0JhPXt9LG1tZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBvKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT10aGlzLGE9W10scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2lmKGwuaXNOb2RlKCkpe2Zvcih2YXIgdT0hMSxoPWwuY29ubmVjdGVkRWRnZXMoKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl0scD1kLnNvdXJjZSgpLG09ZC50YXJnZXQoKTtpZihlLm5vSW5jb21pbmdFZGdlcyYmbT09PWwmJnAhPT1sfHxlLm5vT3V0Z29pbmdFZGdlcyYmcD09PWwmJm0hPT1sKXt1PSEwO2JyZWFrfX11fHxhLnB1c2gobCl9fXJldHVybiB0aGlzLnNwYXduKGEsITApLmZpbHRlcihuKX0sImRhZ0V4dHJlbWl0eUltcGwiKX0sImRlZmluZURhZ0V4dHJlbWl0eSIpLGdtZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49dGhpcyxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXTtpZihzLmlzTm9kZSgpKWZvcih2YXIgbD1zLmNvbm5lY3RlZEVkZ2VzKCksdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1sW3VdLGY9aC5zb3VyY2UoKSxkPWgudGFyZ2V0KCk7ZS5vdXRnb2luZyYmZj09PXM/KGkucHVzaChoKSxpLnB1c2goZCkpOmUuaW5jb21pbmcmJmQ9PT1zJiYoaS5wdXNoKGgpLGkucHVzaChmKSl9fXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdPbmVIb3AiKSx5bWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPXRoaXMsaT1bXSxhPXt9Ozspe3ZhciBzPWUub3V0Z29pbmc/bi5vdXRnb2VycygpOm4uaW5jb21lcnMoKTtpZihzLmxlbmd0aD09PTApYnJlYWs7Zm9yKHZhciBsPSExLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguaWQoKTthW2ZdfHwoYVtmXT0hMCxpLnB1c2goaCksbD0hMCl9aWYoIWwpYnJlYWs7bj1zfXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdBbGxIb3BzIik7QmEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5sZW5ndGg7dCsrKXRoaXNbdF0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH07aXIoQmEse3Jvb3RzOm1tZSh7bm9JbmNvbWluZ0VkZ2VzOiEwfSksbGVhdmVzOm1tZSh7bm9PdXRnb2luZ0VkZ2VzOiEwfSksb3V0Z29lcnM6YWwoZ21lKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6eW1lKHtvdXRnb2luZzohMH0pLGluY29tZXJzOmFsKGdtZSh7aW5jb21pbmc6ITB9KSwiaW5jb21lcnMiKSxwcmVkZWNlc3NvcnM6eW1lKHtpbmNvbWluZzohMH0pfSk7aXIoQmEse25laWdoYm9yaG9vZDphbChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLm5vZGVzKCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9aS5jb25uZWN0ZWRFZGdlcygpLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PWwuc291cmNlKCksaD1sLnRhcmdldCgpLGY9aT09PXU/aDp1O2YubGVuZ3RoPjAmJmUucHVzaChmWzBdKSxlLnB1c2gobFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKCkuYWRkKHRoaXMpLmZpbHRlcihlKX0sImNsb3NlZE5laWdoYm9yaG9vZCIpLG9wZW5OZWlnaGJvcmhvb2Q6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2QoZSl9LCJvcGVuTmVpZ2hib3Job29kIil9KTtCYS5uZWlnaGJvdXJob29kPUJhLm5laWdoYm9yaG9vZDtCYS5jbG9zZWROZWlnaGJvdXJob29kPUJhLmNsb3NlZE5laWdoYm9yaG9vZDtCYS5vcGVuTmVpZ2hib3VyaG9vZD1CYS5vcGVuTmVpZ2hib3Job29kO2lyKEJhLHtzb3VyY2U6YWwobyhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdLG47cmV0dXJuIHImJihuPXIuX3ByaXZhdGUuc291cmNlfHxyLmN5KCkuY29sbGVjdGlvbigpKSxuJiZlP24uZmlsdGVyKGUpOm59LCJzb3VyY2VJbXBsIiksInNvdXJjZSIpLHRhcmdldDphbChvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF0sbjtyZXR1cm4gciYmKG49ci5fcHJpdmF0ZS50YXJnZXR8fHIuY3koKS5jb2xsZWN0aW9uKCkpLG4mJmU/bi5maWx0ZXIoZSk6bn0sInRhcmdldEltcGwiKSwidGFyZ2V0Iiksc291cmNlczp2bWUoe2F0dHI6InNvdXJjZSJ9KSx0YXJnZXRzOnZtZSh7YXR0cjoidGFyZ2V0In0pfSk7byh2bWUsImRlZmluZVNvdXJjZUZ1bmN0aW9uIik7aXIoQmEse2VkZ2VzV2l0aDphbCh4bWUoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzphbCh4bWUoe3RoaXNJc1NyYzohMH0pLCJlZGdlc1RvIil9KTtvKHhtZSwiZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24iKTtpcihCYSx7Y29ubmVjdGVkRWRnZXM6YWwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoaS5pc05vZGUoKSlmb3IodmFyIGE9aS5fcHJpdmF0ZS5lZGdlcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107ZS5wdXNoKGwpfX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWRFZGdlcyIpLGNvbm5lY3RlZE5vZGVzOmFsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuaXNFZGdlKCkmJihlLnB1c2goaS5zb3VyY2UoKVswXSksZS5wdXNoKGkudGFyZ2V0KClbMF0pKX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWROb2RlcyIpLHBhcmFsbGVsRWRnZXM6YWwoYm1lKCksInBhcmFsbGVsRWRnZXMiKSxjb2RpcmVjdGVkRWRnZXM6YWwoYm1lKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7byhibWUsImRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbiIpO2lyKEJhLHtjb21wb25lbnRzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuY3koKSxpPW4uY29sbGVjdGlvbigpLGE9ZT09bnVsbD9yLm5vZGVzKCk6ZS5ub2RlcygpLHM9W107ZSE9bnVsbCYmYS5lbXB0eSgpJiYoYT1lLnNvdXJjZXMoKSk7dmFyIGw9byhmdW5jdGlvbihmLGQpe2kubWVyZ2UoZiksYS51bm1lcmdlKGYpLGQubWVyZ2UoZil9LCJ2aXNpdEluQ29tcG9uZW50Iik7aWYoYS5lbXB0eSgpKXJldHVybiByLnNwYXduKCk7dmFyIHU9byhmdW5jdGlvbigpe3ZhciBmPW4uY29sbGVjdGlvbigpO3MucHVzaChmKTt2YXIgZD1hWzBdO2woZCxmKSxyLmJmcyh7ZGlyZWN0ZWQ6ITEscm9vdHM6ZCx2aXNpdDpvKGZ1bmN0aW9uKG0pe3JldHVybiBsKG0sZil9LCJ2aXNpdCIpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3AuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3IuaGFzKG0pJiZmLmhhcyhtLnNvdXJjZSgpKSYmZi5oYXMobS50YXJnZXQoKSkmJmYubWVyZ2UobSl9KX0pfSwiX2xvb3AiKTtkbyB1KCk7d2hpbGUoYS5sZW5ndGg+MCk7cmV0dXJuIHN9LCJjb21wb25lbnRzIiksY29tcG9uZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO3JldHVybiBlLmN5KCkubXV0YWJsZUVsZW1lbnRzKCkuY29tcG9uZW50cyhlKVswXX0sImNvbXBvbmVudCIpfSk7QmEuY29tcG9uZW50c09mPUJhLmNvbXBvbmVudHM7YmE9byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxpPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZihlPT09dm9pZCAwKXtoaSgiQSBjb2xsZWN0aW9uIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY29yZSIpO3JldHVybn12YXIgYT1uZXcgVWMscz0hMTtpZighcilyPVtdO2Vsc2UgaWYoci5sZW5ndGg+MCYmVnIoclswXSkmJiFKeChyWzBdKSl7cz0hMDtmb3IodmFyIGw9W10sdT1uZXcgZjEsaD0wLGY9ci5sZW5ndGg7aDxmO2grKyl7dmFyIGQ9cltoXTtkLmRhdGE9PW51bGwmJihkLmRhdGE9e30pO3ZhciBwPWQuZGF0YTtpZihwLmlkPT1udWxsKXAuaWQ9bGdlKCk7ZWxzZSBpZihlLmhhc0VsZW1lbnRXaXRoSWQocC5pZCl8fHUuaGFzKHAuaWQpKWNvbnRpbnVlO3ZhciBtPW5ldyBfNihlLGQsITEpO2wucHVzaChtKSx1LmFkZChwLmlkKX1yPWx9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGc9MCx5PXIubGVuZ3RoO2c8eTtnKyspe3ZhciB2PXJbZ11bMF07aWYodiE9bnVsbCl7dmFyIHg9di5fcHJpdmF0ZS5kYXRhLmlkOyghbnx8IWEuaGFzKHgpKSYmKG4mJmEuc2V0KHgse2luZGV4OnRoaXMubGVuZ3RoLGVsZTp2fSksdGhpc1t0aGlzLmxlbmd0aF09dix0aGlzLmxlbmd0aCsrKX19dGhpcy5fcHJpdmF0ZT17ZWxlczp0aGlzLGN5OmUsZ2V0IG1hcCgpe3JldHVybiB0aGlzLmxhenlNYXA9PW51bGwmJnRoaXMucmVidWlsZE1hcCgpLHRoaXMubGF6eU1hcH0sc2V0IG1hcChiKXt0aGlzLmxhenlNYXA9Yn0scmVidWlsZE1hcDpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB3PXRoaXMubGF6eU1hcD1uZXcgVWMsXz10aGlzLmVsZXMsVD0wO1Q8Xy5sZW5ndGg7VCsrKXt2YXIgRT1fW1RdO3cuc2V0KEUuaWQoKSx7aW5kZXg6VCxlbGU6RX0pfX0sInJlYnVpbGRNYXAiKX0sbiYmKHRoaXMuX3ByaXZhdGUubWFwPWEpLHMmJiFpJiZ0aGlzLnJlc3RvcmUoKX0sIkNvbGxlY3Rpb24iKSxObj1fNi5wcm90b3R5cGU9YmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKTtObi5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJjb2xsZWN0aW9uIn07Tm4uc3Bhd249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGJhKHRoaXMuY3koKSx0LGUpfTtObi5zcGF3blNlbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcGF3bih0aGlzKX07Tm4uY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07Tm4ucmVuZGVyZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeS5yZW5kZXJlcigpfTtObi5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF19O05uLmNvbGxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gWG1lKHRoaXMpP3RoaXM6bmV3IGJhKHRoaXMuX3ByaXZhdGUuY3ksW3RoaXNdKX07Tm4udW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiYSh0aGlzLl9wcml2YXRlLmN5LHRoaXMsITApfTtObi5oYXNFbGVtZW50V2l0aElkPWZ1bmN0aW9uKHQpe3JldHVybiB0PSIiK3QsdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKHQpfTtObi5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih0KXt0PSIiK3Q7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeSxyPXRoaXMuX3ByaXZhdGUubWFwLmdldCh0KTtyZXR1cm4gcj9yLmVsZTpuZXcgYmEoZSl9O05uLiRpZD1Obi5nZXRFbGVtZW50QnlJZDtObi5wb29sSW5kZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlLmN5LGU9dC5fcHJpdmF0ZS5lbGVtZW50cyxyPXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gZS5fcHJpdmF0ZS5tYXAuZ2V0KHIpLmluZGV4fTtObi5pbmRleE9mPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KGUpLmluZGV4fTtObi5pbmRleE9mSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9IiIrdCx0aGlzLl9wcml2YXRlLm1hcC5nZXQodCkuaW5kZXh9O05uLmpzb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbGVtZW50KCkscj10aGlzLmN5KCk7aWYoZT09bnVsbCYmdClyZXR1cm4gdGhpcztpZihlIT1udWxsKXt2YXIgbj1lLl9wcml2YXRlO2lmKFZyKHQpKXtpZihyLnN0YXJ0QmF0Y2goKSx0LmRhdGEpe2UuZGF0YSh0LmRhdGEpO3ZhciBpPW4uZGF0YTtpZihlLmlzRWRnZSgpKXt2YXIgYT0hMSxzPXt9LGw9dC5kYXRhLnNvdXJjZSx1PXQuZGF0YS50YXJnZXQ7bCE9bnVsbCYmbCE9aS5zb3VyY2UmJihzLnNvdXJjZT0iIitsLGE9ITApLHUhPW51bGwmJnUhPWkudGFyZ2V0JiYocy50YXJnZXQ9IiIrdSxhPSEwKSxhJiYoZT1lLm1vdmUocykpfWVsc2V7dmFyIGg9InBhcmVudCJpbiB0LmRhdGEsZj10LmRhdGEucGFyZW50O2gmJihmIT1udWxsfHxpLnBhcmVudCE9bnVsbCkmJmYhPWkucGFyZW50JiYoZj09PXZvaWQgMCYmKGY9bnVsbCksZiE9bnVsbCYmKGY9IiIrZiksZT1lLm1vdmUoe3BhcmVudDpmfSkpfX10LnBvc2l0aW9uJiZlLnBvc2l0aW9uKHQucG9zaXRpb24pO3ZhciBkPW8oZnVuY3Rpb24oeSx2LHgpe3ZhciBiPXRbeV07YiE9bnVsbCYmYiE9PW5beV0mJihiP2Vbdl0oKTplW3hdKCkpfSwiY2hlY2tTd2l0Y2giKTtyZXR1cm4gZCgicmVtb3ZlZCIsInJlbW92ZSIsInJlc3RvcmUiKSxkKCJzZWxlY3RlZCIsInNlbGVjdCIsInVuc2VsZWN0IiksZCgic2VsZWN0YWJsZSIsInNlbGVjdGlmeSIsInVuc2VsZWN0aWZ5IiksZCgibG9ja2VkIiwibG9jayIsInVubG9jayIpLGQoImdyYWJiYWJsZSIsImdyYWJpZnkiLCJ1bmdyYWJpZnkiKSxkKCJwYW5uYWJsZSIsInBhbmlmeSIsInVucGFuaWZ5IiksdC5jbGFzc2VzIT1udWxsJiZlLmNsYXNzZXModC5jbGFzc2VzKSxyLmVuZEJhdGNoKCksdGhpc31lbHNlIGlmKHQ9PT12b2lkIDApe3ZhciBwPXtkYXRhOlZjKG4uZGF0YSkscG9zaXRpb246VmMobi5wb3NpdGlvbiksZ3JvdXA6bi5ncm91cCxyZW1vdmVkOm4ucmVtb3ZlZCxzZWxlY3RlZDpuLnNlbGVjdGVkLHNlbGVjdGFibGU6bi5zZWxlY3RhYmxlLGxvY2tlZDpuLmxvY2tlZCxncmFiYmFibGU6bi5ncmFiYmFibGUscGFubmFibGU6bi5wYW5uYWJsZSxjbGFzc2VzOm51bGx9O3AuY2xhc3Nlcz0iIjt2YXIgbT0wO3JldHVybiBuLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihnKXtyZXR1cm4gcC5jbGFzc2VzKz1tKys9PT0wP2c6IiAiK2d9KSxwfX19O05uLmpzb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuanNvbigpO3QucHVzaChuKX1yZXR1cm4gdH07Tm4uY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5jeSgpLGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzW3JdLGk9bi5qc29uKCksYT1uZXcgXzYodCxpLCExKTtlLnB1c2goYSl9cmV0dXJuIG5ldyBiYSh0LGUpfTtObi5jb3B5PU5uLmNsb25lO05uLnJlc3RvcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLHI9dGhpcyxuPXIuY3koKSxpPW4uX3ByaXZhdGUsYT1bXSxzPVtdLGwsdT0wLGg9ci5sZW5ndGg7dTxoO3UrKyl7dmFyIGY9clt1XTtlJiYhZi5yZW1vdmVkKCl8fChmLmlzTm9kZSgpP2EucHVzaChmKTpzLnB1c2goZikpfWw9YS5jb25jYXQocyk7dmFyIGQscD1vKGZ1bmN0aW9uKCl7bC5zcGxpY2UoZCwxKSxkLS19LCJyZW1vdmVGcm9tRWxlbWVudHMiKTtmb3IoZD0wO2Q8bC5sZW5ndGg7ZCsrKXt2YXIgbT1sW2RdLGc9bS5fcHJpdmF0ZSx5PWcuZGF0YTtpZihtLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSwhKCFlJiYhZy5yZW1vdmVkKSl7aWYoeS5pZD09PXZvaWQgMCl5LmlkPWxnZSgpO2Vsc2UgaWYoeHQoeS5pZCkpeS5pZD0iIit5LmlkO2Vsc2UgaWYoU2YoeS5pZCl8fCFadCh5LmlkKSl7aGkoIkNhbiBub3QgY3JlYXRlIGVsZW1lbnQgd2l0aCBpbnZhbGlkIHN0cmluZyBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfWVsc2UgaWYobi5oYXNFbGVtZW50V2l0aElkKHkuaWQpKXtoaSgiQ2FuIG5vdCBjcmVhdGUgc2Vjb25kIGVsZW1lbnQgd2l0aCBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfX12YXIgdj15LmlkO2lmKG0uaXNOb2RlKCkpe3ZhciB4PWcucG9zaXRpb247eC54PT1udWxsJiYoeC54PTApLHgueT09bnVsbCYmKHgueT0wKX1pZihtLmlzRWRnZSgpKXtmb3IodmFyIGI9bSx3PVsic291cmNlIiwidGFyZ2V0Il0sXz13Lmxlbmd0aCxUPSExLEU9MDtFPF87RSsrKXt2YXIgTD13W0VdLEM9eVtMXTt4dChDKSYmKEM9eVtMXT0iIit5W0xdKSxDPT1udWxsfHxDPT09IiI/KGhpKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCB1bnNwZWNpZmllZCAiK0wpLFQ9ITApOm4uaGFzRWxlbWVudFdpdGhJZChDKXx8KGhpKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCBub25leGlzdGFudCAiK0wrIiBgIitDKyJgIiksVD0hMCl9aWYoVCl7cCgpO2NvbnRpbnVlfXZhciBBPW4uZ2V0RWxlbWVudEJ5SWQoeS5zb3VyY2UpLEk9bi5nZXRFbGVtZW50QnlJZCh5LnRhcmdldCk7QS5zYW1lKEkpP0EuX3ByaXZhdGUuZWRnZXMucHVzaChiKTooQS5fcHJpdmF0ZS5lZGdlcy5wdXNoKGIpLEkuX3ByaXZhdGUuZWRnZXMucHVzaChiKSksYi5fcHJpdmF0ZS5zb3VyY2U9QSxiLl9wcml2YXRlLnRhcmdldD1JfWcubWFwPW5ldyBVYyxnLm1hcC5zZXQodix7ZWxlOm0saW5kZXg6MH0pLGcucmVtb3ZlZD0hMSxlJiZuLmFkZFRvUG9vbChtKX1mb3IodmFyIEQ9MDtEPGEubGVuZ3RoO0QrKyl7dmFyIGs9YVtEXSxSPWsuX3ByaXZhdGUuZGF0YTt4dChSLnBhcmVudCkmJihSLnBhcmVudD0iIitSLnBhcmVudCk7dmFyIFM9Ui5wYXJlbnQsTz1TIT1udWxsO2lmKE98fGsuX3ByaXZhdGUucGFyZW50KXt2YXIgTj1rLl9wcml2YXRlLnBhcmVudD9uLmNvbGxlY3Rpb24oKS5tZXJnZShrLl9wcml2YXRlLnBhcmVudCk6bi5nZXRFbGVtZW50QnlJZChTKTtpZihOLmVtcHR5KCkpUi5wYXJlbnQ9dm9pZCAwO2Vsc2UgaWYoTlswXS5yZW1vdmVkKCkpb24oIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksUi5wYXJlbnQ9dm9pZCAwLGsuX3ByaXZhdGUucGFyZW50PW51bGw7ZWxzZXtmb3IodmFyIFA9ITEsRj1OOyFGLmVtcHR5KCk7KXtpZihrLnNhbWUoRikpe1A9ITAsUi5wYXJlbnQ9dm9pZCAwO2JyZWFrfUY9Ri5wYXJlbnQoKX1QfHwoTlswXS5fcHJpdmF0ZS5jaGlsZHJlbi5wdXNoKGspLGsuX3ByaXZhdGUucGFyZW50PU5bMF0saS5oYXNDb21wb3VuZE5vZGVzPSEwKX19fWlmKGwubGVuZ3RoPjApe2Zvcih2YXIgQj1sLmxlbmd0aD09PXIubGVuZ3RoP3I6bmV3IGJhKG4sbCksJD0wOyQ8Qi5sZW5ndGg7JCsrKXt2YXIgej1CWyRdO3ouaXNOb2RlKCl8fCh6LnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksei5zb3VyY2UoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksei50YXJnZXQoKS5jbGVhclRyYXZlcnNhbENhY2hlKCkpfXZhciBXO2kuaGFzQ29tcG91bmROb2Rlcz9XPW4uY29sbGVjdGlvbigpLm1lcmdlKEIpLm1lcmdlKEIuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoQi5wYXJlbnQoKSk6Vz1CLFcuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkuZGlydHlCb3VuZGluZ0JveENhY2hlKCkudXBkYXRlU3R5bGUodCksdD9CLmVtaXRBbmROb3RpZnkoImFkZCIpOmUmJkIuZW1pdCgiYWRkIil9cmV0dXJuIHJ9O05uLnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0JiZ0Ll9wcml2YXRlLnJlbW92ZWR9O05uLmluc2lkZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQmJiF0Ll9wcml2YXRlLnJlbW92ZWR9O05uLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxyPXRoaXMsbj1bXSxpPXt9LGE9ci5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBzKFMpe2Zvcih2YXIgTz1TLl9wcml2YXRlLmVkZ2VzLE49MDtOPE8ubGVuZ3RoO04rKyl1KE9bTl0pfW8ocywiYWRkQ29ubmVjdGVkRWRnZXMiKTtmdW5jdGlvbiBsKFMpe2Zvcih2YXIgTz1TLl9wcml2YXRlLmNoaWxkcmVuLE49MDtOPE8ubGVuZ3RoO04rKyl1KE9bTl0pfW8obCwiYWRkQ2hpbGRyZW4iKTtmdW5jdGlvbiB1KFMpe3ZhciBPPWlbUy5pZCgpXTtlJiZTLnJlbW92ZWQoKXx8T3x8KGlbUy5pZCgpXT0hMCxTLmlzTm9kZSgpPyhuLnB1c2goUykscyhTKSxsKFMpKTpuLnVuc2hpZnQoUykpfW8odSwiYWRkIik7Zm9yKHZhciBoPTAsZj1yLmxlbmd0aDtoPGY7aCsrKXt2YXIgZD1yW2hdO3UoZCl9ZnVuY3Rpb24gcChTLE8pe3ZhciBOPVMuX3ByaXZhdGUuZWRnZXM7Q2YoTixPKSxTLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1vKHAsInJlbW92ZUVkZ2VSZWYiKTtmdW5jdGlvbiBtKFMpe1MuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfW8obSwicmVtb3ZlUGFyYWxsZWxSZWYiKTt2YXIgZz1bXTtnLmlkcz17fTtmdW5jdGlvbiB5KFMsTyl7Tz1PWzBdLFM9U1swXTt2YXIgTj1TLl9wcml2YXRlLmNoaWxkcmVuLFA9Uy5pZCgpO0NmKE4sTyksTy5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxnLmlkc1tQXXx8KGcuaWRzW1BdPSEwLGcucHVzaChTKSl9byh5LCJyZW1vdmVDaGlsZFJlZiIpLHIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksZSYmYS5yZW1vdmVGcm9tUG9vbChuKTtmb3IodmFyIHY9MDt2PG4ubGVuZ3RoO3YrKyl7dmFyIHg9blt2XTtpZih4LmlzRWRnZSgpKXt2YXIgYj14LnNvdXJjZSgpWzBdLHc9eC50YXJnZXQoKVswXTtwKGIseCkscCh3LHgpO2Zvcih2YXIgXz14LnBhcmFsbGVsRWRnZXMoKSxUPTA7VDxfLmxlbmd0aDtUKyspe3ZhciBFPV9bVF07bShFKSxFLmlzQnVuZGxlZEJlemllcigpJiZFLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfX1lbHNle3ZhciBMPXgucGFyZW50KCk7TC5sZW5ndGghPT0wJiZ5KEwseCl9ZSYmKHguX3ByaXZhdGUucmVtb3ZlZD0hMCl9dmFyIEM9YS5fcHJpdmF0ZS5lbGVtZW50czthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBBPTA7QTxDLmxlbmd0aDtBKyspe3ZhciBJPUNbQV07aWYoSS5pc1BhcmVudCgpKXthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITA7YnJlYWt9fXZhciBEPW5ldyBiYSh0aGlzLmN5KCksbik7RC5zaXplKCk+MCYmKHQ/RC5lbWl0QW5kTm90aWZ5KCJyZW1vdmUiKTplJiZELmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIFI9Z1trXTsoIWV8fCFSLnJlbW92ZWQoKSkmJlIudXBkYXRlU3R5bGUoKX1yZXR1cm4gRH07Tm4ubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcml2YXRlLmN5LHI9dGhpcyxuPSExLGk9ITEsYT1vKGZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsP2c6IiIrZ30sInRvU3RyaW5nIik7aWYodC5zb3VyY2UhPT12b2lkIDB8fHQudGFyZ2V0IT09dm9pZCAwKXt2YXIgcz1hKHQuc291cmNlKSxsPWEodC50YXJnZXQpLHU9cyE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKHMpLGg9bCE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKGwpOyh1fHxoKSYmKGUuYmF0Y2goZnVuY3Rpb24oKXtyLnJlbW92ZShuLGkpLHIuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbT0wO208ci5sZW5ndGg7bSsrKXt2YXIgZz1yW21dLHk9Zy5fcHJpdmF0ZS5kYXRhO2cuaXNFZGdlKCkmJih1JiYoeS5zb3VyY2U9cyksaCYmKHkudGFyZ2V0PWwpKX1yLnJlc3RvcmUobixpKX0pLHIuZW1pdEFuZE5vdGlmeSgibW92ZSIpKX1lbHNlIGlmKHQucGFyZW50IT09dm9pZCAwKXt2YXIgZj1hKHQucGFyZW50KSxkPWY9PT1udWxsfHxlLmhhc0VsZW1lbnRXaXRoSWQoZik7aWYoZCl7dmFyIHA9Zj09PW51bGw/dm9pZCAwOmY7ZS5iYXRjaChmdW5jdGlvbigpe3ZhciBtPXIucmVtb3ZlKG4saSk7bS5lbWl0QW5kTm90aWZ5KCJtb3Zlb3V0Iik7Zm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB5PXJbZ10sdj15Ll9wcml2YXRlLmRhdGE7eS5pc05vZGUoKSYmKHYucGFyZW50PXApfW0ucmVzdG9yZShuLGkpfSksci5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfTtbd2dlLGpaZSxvNixrZixoMSxoSmUsSTYsQUplLFlnZSxxZ2UsUkplLGI2LGw2LHhhLEVmLEJhXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKE5uLHQpfSk7ekplPXthZGQ6byhmdW5jdGlvbihlKXt2YXIgcixuPXRoaXM7aWYocG8oZSkpe3ZhciBpPWU7aWYoaS5fcHJpdmF0ZS5jeT09PW4pcj1pLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgYT1bXSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YS5wdXNoKGwuanNvbigpKX1yPW5ldyBiYShuLGEpfX1lbHNlIGlmKHduKGUpKXt2YXIgdT1lO3I9bmV3IGJhKG4sdSl9ZWxzZSBpZihWcihlKSYmKHduKGUubm9kZXMpfHx3bihlLmVkZ2VzKSkpe2Zvcih2YXIgaD1lLGY9W10sZD1bIm5vZGVzIiwiZWRnZXMiXSxwPTAsbT1kLmxlbmd0aDtwPG07cCsrKXt2YXIgZz1kW3BdLHk9aFtnXTtpZih3bih5KSlmb3IodmFyIHY9MCx4PXkubGVuZ3RoO3Y8eDt2Kyspe3ZhciBiPWlyKHtncm91cDpnfSx5W3ZdKTtmLnB1c2goYil9fXI9bmV3IGJhKG4sZil9ZWxzZXt2YXIgdz1lO3I9bmV3IF82KG4sdykuY29sbGVjdGlvbigpfXJldHVybiByfSwiYWRkIikscmVtb3ZlOm8oZnVuY3Rpb24oZSl7aWYoIXBvKGUpKXtpZihadChlKSl7dmFyIHI9ZTtlPXRoaXMuJChyKX19cmV0dXJuIGUucmVtb3ZlKCl9LCJyZW1vdmUiKX07byhHSmUsImdlbmVyYXRlQ3ViaWNCZXppZXIiKTskSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4pe3JldHVybi1uLnRlbnNpb24qbi54LW4uZnJpY3Rpb24qbi52fW8odCwic3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUiKTtmdW5jdGlvbiBlKG4saSxhKXt2YXIgcz17eDpuLngrYS5keCppLHY6bi52K2EuZHYqaSx0ZW5zaW9uOm4udGVuc2lvbixmcmljdGlvbjpuLmZyaWN0aW9ufTtyZXR1cm57ZHg6cy52LGR2OnQocyl9fW8oZSwic3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlIik7ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXtkeDpuLnYsZHY6dChuKX0scz1lKG4saSouNSxhKSxsPWUobixpKi41LHMpLHU9ZShuLGksbCksaD0xLzYqKGEuZHgrMioocy5keCtsLmR4KSt1LmR4KSxmPTEvNiooYS5kdisyKihzLmR2K2wuZHYpK3UuZHYpO3JldHVybiBuLng9bi54K2gqaSxuLnY9bi52K2YqaSxufXJldHVybiBvKHIsInNwcmluZ0ludGVncmF0ZVN0YXRlIiksbyhmdW5jdGlvbiBuKGksYSxzKXt2YXIgbD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHU9WzBdLGg9MCxmPTEvMWU0LGQ9MTYvMWUzLHAsbSxnO2ZvcihpPXBhcnNlRmxvYXQoaSl8fDUwMCxhPXBhcnNlRmxvYXQoYSl8fDIwLHM9c3x8bnVsbCxsLnRlbnNpb249aSxsLmZyaWN0aW9uPWEscD1zIT09bnVsbCxwPyhoPW4oaSxhKSxtPWgvcypkKTptPWQ7Zz1yKGd8fGwsbSksdS5wdXNoKDErZy54KSxoKz0xNixNYXRoLmFicyhnLngpPmYmJk1hdGguYWJzKGcudik+ZjspO3JldHVybiBwP2Z1bmN0aW9uKHkpe3JldHVybiB1W3kqKHUubGVuZ3RoLTEpfDBdfTpofSwic3ByaW5nUks0RmFjdG9yeSIpfSgpLERuPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9R0plKGUscixuLGkpO3JldHVybiBmdW5jdGlvbihzLGwsdSl7cmV0dXJuIHMrKGwtcykqYSh1KX19LCJjdWJpY0JlemllciIpLGM2PXtsaW5lYXI6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrKHItZSkqbn0sImxpbmVhciIpLGVhc2U6RG4oLjI1LC4xLC4yNSwxKSwiZWFzZS1pbiI6RG4oLjQyLDAsMSwxKSwiZWFzZS1vdXQiOkRuKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjpEbiguNDIsMCwuNTgsMSksImVhc2UtaW4tc2luZSI6RG4oLjQ3LDAsLjc0NSwuNzE1KSwiZWFzZS1vdXQtc2luZSI6RG4oLjM5LC41NzUsLjU2NSwxKSwiZWFzZS1pbi1vdXQtc2luZSI6RG4oLjQ0NSwuMDUsLjU1LC45NSksImVhc2UtaW4tcXVhZCI6RG4oLjU1LC4wODUsLjY4LC41MyksImVhc2Utb3V0LXF1YWQiOkRuKC4yNSwuNDYsLjQ1LC45NCksImVhc2UtaW4tb3V0LXF1YWQiOkRuKC40NTUsLjAzLC41MTUsLjk1NSksImVhc2UtaW4tY3ViaWMiOkRuKC41NSwuMDU1LC42NzUsLjE5KSwiZWFzZS1vdXQtY3ViaWMiOkRuKC4yMTUsLjYxLC4zNTUsMSksImVhc2UtaW4tb3V0LWN1YmljIjpEbiguNjQ1LC4wNDUsLjM1NSwxKSwiZWFzZS1pbi1xdWFydCI6RG4oLjg5NSwuMDMsLjY4NSwuMjIpLCJlYXNlLW91dC1xdWFydCI6RG4oLjE2NSwuODQsLjQ0LDEpLCJlYXNlLWluLW91dC1xdWFydCI6RG4oLjc3LDAsLjE3NSwxKSwiZWFzZS1pbi1xdWludCI6RG4oLjc1NSwuMDUsLjg1NSwuMDYpLCJlYXNlLW91dC1xdWludCI6RG4oLjIzLDEsLjMyLDEpLCJlYXNlLWluLW91dC1xdWludCI6RG4oLjg2LDAsLjA3LDEpLCJlYXNlLWluLWV4cG8iOkRuKC45NSwuMDUsLjc5NSwuMDM1KSwiZWFzZS1vdXQtZXhwbyI6RG4oLjE5LDEsLjIyLDEpLCJlYXNlLWluLW91dC1leHBvIjpEbigxLDAsMCwxKSwiZWFzZS1pbi1jaXJjIjpEbiguNiwuMDQsLjk4LC4zMzUpLCJlYXNlLW91dC1jaXJjIjpEbiguMDc1LC44MiwuMTY1LDEpLCJlYXNlLWluLW91dC1jaXJjIjpEbiguNzg1LC4xMzUsLjE1LC44Niksc3ByaW5nOm8oZnVuY3Rpb24oZSxyLG4pe2lmKG49PT0wKXJldHVybiBjNi5saW5lYXI7dmFyIGk9JEplKGUscixuKTtyZXR1cm4gZnVuY3Rpb24oYSxzLGwpe3JldHVybiBhKyhzLWEpKmkobCl9fSwic3ByaW5nIiksImN1YmljLWJlemllciI6RG59O28od21lLCJnZXRFYXNlZFZhbHVlIik7byhUbWUsImdldFZhbHVlIik7byhaZywiZWFzZSIpO28oVkplLCJzdGVwJDEiKTtvKE14LCJ2YWxpZCIpO28oVUplLCJzdGFydEFuaW1hdGlvbiIpO28oa21lLCJzdGVwQWxsIik7SEplPXthbmltYXRlOnNuLmFuaW1hdGUoKSxhbmltYXRpb246c24uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6c24uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOnNuLmNsZWFyUXVldWUoKSxkZWxheTpzbi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOnNuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpzbi5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyLnN0eWxlRW5hYmxlZCgpJiZyLl9wcml2YXRlLmFuaUVsZXMubWVyZ2UoZSl9LCJhZGRUb0FuaW1hdGlvblBvb2wiKSxzdG9wQW5pbWF0aW9uTG9vcDpvKGZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMX0sInN0b3BBbmltYXRpb25Mb29wIiksc3RhcnRBbmltYXRpb25Mb29wOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGUuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITAsIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuO2Z1bmN0aW9uIHIoKXtlLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nJiZtNihvKGZ1bmN0aW9uKGEpe2ttZShhLGUpLHIoKX0sImFuaW1hdGlvblN0ZXAiKSl9byhyLCJoZWFkbGVzc1N0ZXAiKTt2YXIgbj1lLnJlbmRlcmVyKCk7biYmbi5iZWZvcmVSZW5kZXI/bi5iZWZvcmVSZW5kZXIobyhmdW5jdGlvbihhLHMpe2ttZShzLGUpfSwicmVuZGVyZXJBbmltYXRpb25TdGVwIiksbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOnIoKX0sInN0YXJ0QW5pbWF0aW9uTG9vcCIpfSxXSmU9e3F1YWxpZmllckNvbXBhcmU6byhmdW5jdGlvbihlLHIpe3JldHVybiBlPT1udWxsfHxyPT1udWxsP2U9PW51bGwmJnI9PW51bGw6ZS5zYW1lVGV4dChyKX0sInF1YWxpZmllckNvbXBhcmUiKSxldmVudE1hdGNoZXM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5xdWFsaWZpZXI7cmV0dXJuIGkhPW51bGw/ZSE9PW4udGFyZ2V0JiZKeChuLnRhcmdldCkmJmkubWF0Y2hlcyhuLnRhcmdldCk6ITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKGUscil7ci5jeT1lLHIudGFyZ2V0PWV9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gci5xdWFsaWZpZXIhPW51bGw/bi50YXJnZXQ6ZX0sImNhbGxiYWNrQ29udGV4dCIpfSxyNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBadChlKT9uZXcgQWYoZSk6ZX0sImFyZ1NlbGVjdG9yIiksS2dlPXtjcmVhdGVFbWl0dGVyOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLmVtaXR0ZXJ8fChlLmVtaXR0ZXI9bmV3IE82KFdKZSx0aGlzKSksdGhpc30sImNyZWF0ZUVtaXR0ZXIiKSxlbWl0dGVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSwiZW1pdHRlciIpLG9uOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihlLHI2KHIpLG4pLHRoaXN9LCJvbiIpLHJlbW92ZUxpc3RlbmVyOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLHI2KHIpLG4pLHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShlLHI2KHIpLG4pLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZSxyNihyKSxuKSx0aGlzfSwib25jZSIpLGVtaXQ6byhmdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGUsciksdGhpc30sImVtaXQiKSxlbWl0QW5kTm90aWZ5Om8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lbWl0KGUpLHRoaXMubm90aWZ5KGUsciksdGhpc30sImVtaXRBbmROb3RpZnkiKX07c24uZXZlbnRBbGlhc2VzT24oS2dlKTtVUD17cG5nOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gZT1lfHx7fSxyLnBuZyhlKX0sInBuZyIpLGpwZzpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGU9ZXx8e30sZS5iZz1lLmJnfHwiI2ZmZiIsci5qcGcoZSl9LCJqcGciKX07VVAuanBlZz1VUC5qcGc7dTY9e2xheW91dDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoZT09bnVsbCl7aGkoIkxheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQiKTtyZXR1cm59aWYoZS5uYW1lPT1udWxsKXtoaSgiQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn12YXIgbj1lLm5hbWUsaT1yLmV4dGVuc2lvbigibGF5b3V0IixuKTtpZihpPT1udWxsKXtoaSgiTm8gc3VjaCBsYXlvdXQgYCIrbisiYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Iik7cmV0dXJufXZhciBhO1p0KGUuZWxlcyk/YT1yLiQoZS5lbGVzKTphPWUuZWxlcyE9bnVsbD9lLmVsZXM6ci4kKCk7dmFyIHM9bmV3IGkoaXIoe30sZSx7Y3k6cixlbGVzOmF9KSk7cmV0dXJuIHN9LCJsYXlvdXQiKX07dTYuY3JlYXRlTGF5b3V0PXU2Lm1ha2VMYXlvdXQ9dTYubGF5b3V0O1lKZT17bm90aWZ5Om8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7bi5iYXRjaE5vdGlmaWNhdGlvbnM9bi5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBpPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdfHx0aGlzLmNvbGxlY3Rpb24oKTtyIT1udWxsJiZpLm1lcmdlKHIpO3JldHVybn1pZihuLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgYT10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IWF8fGEubm90aWZ5KGUscil9fSwibm90aWZ5Iiksbm90aWZpY2F0aW9uczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGU9PT12b2lkIDA/ci5ub3RpZmljYXRpb25zRW5hYmxlZDooci5ub3RpZmljYXRpb25zRW5hYmxlZD0hIWUsdGhpcyl9LCJub3RpZmljYXRpb25zIiksbm9Ob3RpZmljYXRpb25zOm8oZnVuY3Rpb24oZSl7dGhpcy5ub3RpZmljYXRpb25zKCExKSxlKCksdGhpcy5ub3RpZmljYXRpb25zKCEwKX0sIm5vTm90aWZpY2F0aW9ucyIpLGJhdGNoaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5iYXRjaENvdW50PjB9LCJiYXRjaGluZyIpLHN0YXJ0QmF0Y2g6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUuYmF0Y2hDb3VudD09bnVsbCYmKGUuYmF0Y2hDb3VudD0wKSxlLmJhdGNoQ291bnQ9PT0wJiYoZS5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxlLmJhdGNoTm90aWZpY2F0aW9ucz17fSksZS5iYXRjaENvdW50KyssdGhpc30sInN0YXJ0QmF0Y2giKSxlbmRCYXRjaDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtpZihlLmJhdGNoQ291bnQ9PT0wKXJldHVybiB0aGlzO2lmKGUuYmF0Y2hDb3VudC0tLGUuYmF0Y2hDb3VudD09PTApe2UuYmF0Y2hTdHlsZUVsZXMudXBkYXRlU3R5bGUoKTt2YXIgcj10aGlzLnJlbmRlcmVyKCk7T2JqZWN0LmtleXMoZS5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ZS5iYXRjaE5vdGlmaWNhdGlvbnNbbl07aS5lbXB0eSgpP3Iubm90aWZ5KG4pOnIubm90aWZ5KG4saSl9KX1yZXR1cm4gdGhpc30sImVuZEJhdGNoIiksYmF0Y2g6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksZSgpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSwiYmF0Y2giKSxiYXRjaERhdGE6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXSxzPWVbYV0sbD1yLmdldEVsZW1lbnRCeUlkKGEpO2wuZGF0YShzKX19KX0sImJhdGNoRGF0YSIpfSxxSmU9d2Eoe2hpZGVFZGdlc09uVmlld3BvcnQ6ITEsdGV4dHVyZU9uVmlld3BvcnQ6ITEsbW90aW9uQmx1cjohMSxtb3Rpb25CbHVyT3BhY2l0eTouMDUscGl4ZWxSYXRpbzp2b2lkIDAsZGVza3RvcFRhcFRocmVzaG9sZDo0LHRvdWNoVGFwVGhyZXNob2xkOjgsd2hlZWxTZW5zaXRpdml0eToxLGRlYnVnOiExLHNob3dGcHM6ITF9KSxIUD17cmVuZGVyVG86byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBhLnJlbmRlclRvKGUscixuLGkpLHRoaXN9LCJyZW5kZXJUbyIpLHJlbmRlcmVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcn0sInJlbmRlcmVyIiksZm9yY2VSZW5kZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGlmeSgiZHJhdyIpLHRoaXN9LCJmb3JjZVJlbmRlciIpLHJlc2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52YWxpZGF0ZVNpemUoKSx0aGlzLmVtaXRBbmROb3RpZnkoInJlc2l6ZSIpLHRoaXN9LCJyZXNpemUiKSxpbml0UmVuZGVyZXI6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLG49ci5leHRlbnNpb24oInJlbmRlcmVyIixlLm5hbWUpO2lmKG49PW51bGwpe2hpKCJDYW4gbm90IGluaXRpYWxpc2U6IE5vIHN1Y2ggcmVuZGVyZXIgYCIuY29uY2F0KGUubmFtZSwiYCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKSk7cmV0dXJufWUud2hlZWxTZW5zaXRpdml0eSE9PXZvaWQgMCYmb24oIllvdSBoYXZlIHNldCBhIGN1c3RvbSB3aGVlbCBzZW5zaXRpdml0eS4gIFRoaXMgd2lsbCBtYWtlIHlvdXIgYXBwIHpvb20gdW5uYXR1cmFsbHkgd2hlbiB1c2luZyBtYWluc3RyZWFtIG1pY2UuICBZb3Ugc2hvdWxkIGNoYW5nZSB0aGlzIHZhbHVlIGZyb20gdGhlIGRlZmF1bHQgb25seSBpZiB5b3UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB5b3VyIHVzZXJzIHdpbGwgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIGFuZCBPUyBjb25maWd1cmF0aW9uIGFzIHlvdXIgY3VycmVudCBtYWNoaW5lLiIpO3ZhciBpPXFKZShlKTtpLmN5PXIsci5fcHJpdmF0ZS5yZW5kZXJlcj1uZXcgbihpKSx0aGlzLm5vdGlmeSgiaW5pdCIpfSwiaW5pdFJlbmRlcmVyIiksZGVzdHJveVJlbmRlcmVyOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzO2Uubm90aWZ5KCJkZXN0cm95Iik7dmFyIHI9ZS5jb250YWluZXIoKTtpZihyKWZvcihyLl9jeXJlZz1udWxsO3IuY2hpbGROb2Rlcy5sZW5ndGg+MDspci5yZW1vdmVDaGlsZChyLmNoaWxkTm9kZXNbMF0pO2UuX3ByaXZhdGUucmVuZGVyZXI9bnVsbCxlLm11dGFibGVFbGVtZW50cygpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9bi5fcHJpdmF0ZTtpLnJzY3JhdGNoPXt9LGkucnN0eWxlPXt9LGkuYW5pbWF0aW9uLmN1cnJlbnQ9W10saS5hbmltYXRpb24ucXVldWU9W119KX0sImRlc3Ryb3lSZW5kZXJlciIpLG9uUmVuZGVyOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24oInJlbmRlciIsZSl9LCJvblJlbmRlciIpLG9mZlJlbmRlcjpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9mZigicmVuZGVyIixlKX0sIm9mZlJlbmRlciIpfTtIUC5pbnZhbGlkYXRlRGltZW5zaW9ucz1IUC5yZXNpemU7aDY9e2NvbGxlY3Rpb246byhmdW5jdGlvbihlLHIpe3JldHVybiBadChlKT90aGlzLiQoZSk6cG8oZSk/ZS5jb2xsZWN0aW9uKCk6d24oZSk/KHJ8fChyPXt9KSxuZXcgYmEodGhpcyxlLHIudW5pcXVlLHIucmVtb3ZlZCkpOm5ldyBiYSh0aGlzKX0sImNvbGxlY3Rpb24iKSxub2RlczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuJChmdW5jdGlvbihuKXtyZXR1cm4gbi5pc05vZGUoKX0pO3JldHVybiBlP3IuZmlsdGVyKGUpOnJ9LCJub2RlcyIpLGVkZ2VzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy4kKGZ1bmN0aW9uKG4pe3JldHVybiBuLmlzRWRnZSgpfSk7cmV0dXJuIGU/ci5maWx0ZXIoZSk6cn0sImVkZ2VzIiksJDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuZWxlbWVudHM7cmV0dXJuIGU/ci5maWx0ZXIoZSk6ci5zcGF3blNlbGYoKX0sIiQiKSxtdXRhYmxlRWxlbWVudHM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfSwibXV0YWJsZUVsZW1lbnRzIil9O2g2LmVsZW1lbnRzPWg2LmZpbHRlcj1oNi4kO3phPXt9LHp4PSJ0IixYSmU9ImYiO3phLmFwcGx5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZS5fcHJpdmF0ZSxuPXIuY3ksaT1uLmNvbGxlY3Rpb24oKSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1lLmdldENvbnRleHRNZXRhKHMpO2lmKCFsLmVtcHR5KXt2YXIgdT1lLmdldENvbnRleHRTdHlsZShsKSxoPWUuYXBwbHlDb250ZXh0U3R5bGUobCx1LHMpO3MuX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT9lLnVwZGF0ZVRyYW5zaXRpb25zKHMsaC5kaWZmUHJvcHMpOnMuX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT0hMDt2YXIgZj1lLnVwZGF0ZVN0eWxlSGludHMocyk7ZiYmaS5wdXNoKHMpfX1yZXR1cm4gaX07emEuZ2V0UHJvcGVydGllc0RpZmY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5fcHJpdmF0ZS5wcm9wRGlmZnM9ci5fcHJpdmF0ZS5wcm9wRGlmZnN8fHt9LGk9dCsiLSIrZSxhPW5baV07aWYoYSlyZXR1cm4gYTtmb3IodmFyIHM9W10sbD17fSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBoPXJbdV0sZj10W3VdPT09engsZD1lW3VdPT09engscD1mIT09ZCxtPWgubWFwcGVkUHJvcGVydGllcy5sZW5ndGg+MDtpZihwfHxkJiZtKXt2YXIgZz12b2lkIDA7cCYmbXx8cD9nPWgucHJvcGVydGllczptJiYoZz1oLm1hcHBlZFByb3BlcnRpZXMpO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXtmb3IodmFyIHY9Z1t5XSx4PXYubmFtZSxiPSExLHc9dSsxO3c8ci5sZW5ndGg7dysrKXt2YXIgXz1yW3ddLFQ9ZVt3XT09PXp4O2lmKFQmJihiPV8ucHJvcGVydGllc1t2Lm5hbWVdIT1udWxsLGIpKWJyZWFrfSFsW3hdJiYhYiYmKGxbeF09ITAscy5wdXNoKHgpKX19fXJldHVybiBuW2ldPXMsc307emEuZ2V0Q29udGV4dE1ldGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj0iIixuLGk9dC5fcHJpdmF0ZS5zdHlsZUN4dEtleXx8IiIsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgcz1lW2FdLGw9cy5zZWxlY3RvciYmcy5zZWxlY3Rvci5tYXRjaGVzKHQpO2w/cis9eng6cis9WEplfXJldHVybiBuPWUuZ2V0UHJvcGVydGllc0RpZmYoaSxyKSx0Ll9wcml2YXRlLnN0eWxlQ3h0S2V5PXIse2tleTpyLGRpZmZQcm9wTmFtZXM6bixlbXB0eTpuLmxlbmd0aD09PTB9fTt6YS5nZXRDb250ZXh0U3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10aGlzLG49dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlc3x8e307aWYobltlXSlyZXR1cm4gbltlXTtmb3IodmFyIGk9e19wcml2YXRlOntrZXk6ZX19LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxsPWVbYV09PT16eDtpZihsKWZvcih2YXIgdT0wO3U8cy5wcm9wZXJ0aWVzLmxlbmd0aDt1Kyspe3ZhciBoPXMucHJvcGVydGllc1t1XTtpW2gubmFtZV09aH19cmV0dXJuIG5bZV09aSxpfTt6YS5hcHBseUNvbnRleHRTdHlsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMsaT10LmRpZmZQcm9wTmFtZXMsYT17fSxzPW4udHlwZXMsbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgdT1pW2xdLGg9ZVt1XSxmPXIucHN0eWxlKHUpO2lmKCFoKWlmKGYpZi5ieXBhc3M/aD17bmFtZTp1LGRlbGV0ZUJ5cGFzc2VkOiEwfTpoPXtuYW1lOnUsZGVsZXRlOiEwfTtlbHNlIGNvbnRpbnVlO2lmKGYhPT1oKXtpZihoLm1hcHBlZD09PXMuZm4mJmYhPW51bGwmJmYubWFwcGluZyE9bnVsbCYmZi5tYXBwaW5nLnZhbHVlPT09aC52YWx1ZSl7dmFyIGQ9Zi5tYXBwaW5nLHA9ZC5mblZhbHVlPWgudmFsdWUocik7aWYocD09PWQucHJldkZuVmFsdWUpY29udGludWV9dmFyIG09YVt1XT17cHJldjpmfTtuLmFwcGx5UGFyc2VkUHJvcGVydHkocixoKSxtLm5leHQ9ci5wc3R5bGUodSksbS5uZXh0JiZtLm5leHQuYnlwYXNzJiYobS5uZXh0PW0ubmV4dC5ieXBhc3NlZCl9fXJldHVybntkaWZmUHJvcHM6YX19O3phLnVwZGF0ZVN0eWxlSGludHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZSxyPXRoaXMsbj1yLnByb3BlcnR5R3JvdXBOYW1lcyxpPXIucHJvcGVydHlHcm91cEtleXMsYT1vKGZ1bmN0aW9uKFosYWUsdWUpe3JldHVybiByLmdldFByb3BlcnRpZXNIYXNoKFosYWUsdWUpfSwicHJvcEhhc2giKSxzPWUuc3R5bGVLZXk7aWYodC5yZW1vdmVkKCkpcmV0dXJuITE7dmFyIGw9ZS5ncm91cD09PSJub2RlcyIsdT10Ll9wcml2YXRlLnN0eWxlO249T2JqZWN0LmtleXModSk7Zm9yKHZhciBoPTA7aDxpLmxlbmd0aDtoKyspe3ZhciBmPWlbaF07ZS5zdHlsZUtleXNbZl09W3QxLE94XX1mb3IodmFyIGQ9byhmdW5jdGlvbihaLGFlKXtyZXR1cm4gZS5zdHlsZUtleXNbYWVdWzBdPVZ4KFosZS5zdHlsZUtleXNbYWVdWzBdKX0sInVwZGF0ZUdyS2V5MSIpLHA9byhmdW5jdGlvbihaLGFlKXtyZXR1cm4gZS5zdHlsZUtleXNbYWVdWzFdPVV4KFosZS5zdHlsZUtleXNbYWVdWzFdKX0sInVwZGF0ZUdyS2V5MiIpLG09byhmdW5jdGlvbihaLGFlKXtkKFosYWUpLHAoWixhZSl9LCJ1cGRhdGVHcktleSIpLGc9byhmdW5jdGlvbihaLGFlKXtmb3IodmFyIHVlPTA7dWU8Wi5sZW5ndGg7dWUrKyl7dmFyIGNlPVouY2hhckNvZGVBdCh1ZSk7ZChjZSxhZSkscChjZSxhZSl9fSwidXBkYXRlR3JLZXlXU3RyIikseT0yZTksdj1vKGZ1bmN0aW9uKFope3JldHVybi0xMjg8WiYmWjwxMjgmJk1hdGguZmxvb3IoWikhPT1aP3ktKFoqMTAyNHwwKTpafSwiY2xlYW5OdW0iKSx4PTA7eDxuLmxlbmd0aDt4Kyspe3ZhciBiPW5beF0sdz11W2JdO2lmKHchPW51bGwpe3ZhciBfPXRoaXMucHJvcGVydGllc1tiXSxUPV8udHlwZSxFPV8uZ3JvdXBLZXksTD12b2lkIDA7Xy5oYXNoT3ZlcnJpZGUhPW51bGw/TD1fLmhhc2hPdmVycmlkZSh0LHcpOncucGZWYWx1ZSE9bnVsbCYmKEw9dy5wZlZhbHVlKTt2YXIgQz1fLmVudW1zPT1udWxsP3cudmFsdWU6bnVsbCxBPUwhPW51bGwsST1DIT1udWxsLEQ9QXx8SSxrPXcudW5pdHM7aWYoVC5udW1iZXImJkQmJiFULm11bHRpcGxlKXt2YXIgUj1BP0w6QzttKHYoUiksRSksIUEmJmshPW51bGwmJmcoayxFKX1lbHNlIGcody5zdHJWYWx1ZSxFKX19Zm9yKHZhciBTPVt0MSxPeF0sTz0wO088aS5sZW5ndGg7TysrKXt2YXIgTj1pW09dLFA9ZS5zdHlsZUtleXNbTl07U1swXT1WeChQWzBdLFNbMF0pLFNbMV09VXgoUFsxXSxTWzFdKX1lLnN0eWxlS2V5PUpYZShTWzBdLFNbMV0pO3ZhciBGPWUuc3R5bGVLZXlzO2UubGFiZWxEaW1zS2V5PXhmKEYubGFiZWxEaW1lbnNpb25zKTt2YXIgQj1hKHQsWyJsYWJlbCJdLEYubGFiZWxEaW1lbnNpb25zKTtpZihlLmxhYmVsS2V5PXhmKEIpLGUubGFiZWxTdHlsZUtleT14ZihxRShGLmNvbW1vbkxhYmVsLEIpKSwhbCl7dmFyICQ9YSh0LFsic291cmNlLWxhYmVsIl0sRi5sYWJlbERpbWVuc2lvbnMpO2Uuc291cmNlTGFiZWxLZXk9eGYoJCksZS5zb3VyY2VMYWJlbFN0eWxlS2V5PXhmKHFFKEYuY29tbW9uTGFiZWwsJCkpO3ZhciB6PWEodCxbInRhcmdldC1sYWJlbCJdLEYubGFiZWxEaW1lbnNpb25zKTtlLnRhcmdldExhYmVsS2V5PXhmKHopLGUudGFyZ2V0TGFiZWxTdHlsZUtleT14ZihxRShGLmNvbW1vbkxhYmVsLHopKX1pZihsKXt2YXIgVz1lLnN0eWxlS2V5cyxqPVcubm9kZUJvZHksSz1XLm5vZGVCb3JkZXIsaWU9Vy5ub2RlT3V0bGluZSxRPVcuYmFja2dyb3VuZEltYWdlLGVlPVcuY29tcG91bmQsSj1XLnBpZSxIPVtqLEssaWUsUSxlZSxKXS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEhPW51bGx9KS5yZWR1Y2UocUUsW3QxLE94XSk7ZS5ub2RlS2V5PXhmKEgpLGUuaGFzUGllPUohPW51bGwmJkpbMF0hPT10MSYmSlsxXSE9PU94fXJldHVybiBzIT09ZS5zdHlsZUtleX07emEuY2xlYXJTdHlsZUhpbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGU7ZS5zdHlsZUN4dEtleT0iIixlLnN0eWxlS2V5cz17fSxlLnN0eWxlS2V5PW51bGwsZS5sYWJlbEtleT1udWxsLGUubGFiZWxTdHlsZUtleT1udWxsLGUuc291cmNlTGFiZWxLZXk9bnVsbCxlLnNvdXJjZUxhYmVsU3R5bGVLZXk9bnVsbCxlLnRhcmdldExhYmVsS2V5PW51bGwsZS50YXJnZXRMYWJlbFN0eWxlS2V5PW51bGwsZS5ub2RlS2V5PW51bGwsZS5oYXNQaWU9bnVsbH07emEuYXBwbHlQYXJzZWRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1lLGk9dC5fcHJpdmF0ZS5zdHlsZSxhLHM9ci50eXBlcyxsPXIucHJvcGVydGllc1tuLm5hbWVdLnR5cGUsdT1uLmJ5cGFzcyxoPWlbbi5uYW1lXSxmPWgmJmguYnlwYXNzLGQ9dC5fcHJpdmF0ZSxwPSJtYXBwaW5nIixtPW8oZnVuY3Rpb24oail7cmV0dXJuIGo9PW51bGw/bnVsbDpqLnBmVmFsdWUhPW51bGw/ai5wZlZhbHVlOmoudmFsdWV9LCJnZXRWYWwiKSxnPW8oZnVuY3Rpb24oKXt2YXIgaj1tKGgpLEs9bShuKTtyLmNoZWNrVHJpZ2dlcnModCxuLm5hbWUsaixLKX0sImNoZWNrVHJpZ2dlcnMiKTtpZihlLm5hbWU9PT0iY3VydmUtc3R5bGUiJiZ0LmlzRWRnZSgpJiYoZS52YWx1ZSE9PSJiZXppZXIiJiZ0LmlzTG9vcCgpfHxlLnZhbHVlPT09ImhheXN0YWNrIiYmKHQuc291cmNlKCkuaXNQYXJlbnQoKXx8dC50YXJnZXQoKS5pc1BhcmVudCgpKSkmJihuPWU9dGhpcy5wYXJzZShlLm5hbWUsImJlemllciIsdSkpLG4uZGVsZXRlKXJldHVybiBpW24ubmFtZV09dm9pZCAwLGcoKSwhMDtpZihuLmRlbGV0ZUJ5cGFzc2VkKXJldHVybiBoP2guYnlwYXNzPyhoLmJ5cGFzc2VkPXZvaWQgMCxnKCksITApOiExOihnKCksITApO2lmKG4uZGVsZXRlQnlwYXNzKXJldHVybiBoP2guYnlwYXNzPyhpW24ubmFtZV09aC5ieXBhc3NlZCxnKCksITApOiExOihnKCksITApO3ZhciB5PW8oZnVuY3Rpb24oKXtvbigiRG8gbm90IGFzc2lnbiBtYXBwaW5ncyB0byBlbGVtZW50cyB3aXRob3V0IGNvcnJlc3BvbmRpbmcgZGF0YSAoaS5lLiBlbGUgYCIrdC5pZCgpKyJgIGhhcyBubyBtYXBwaW5nIGZvciBwcm9wZXJ0eSBgIituLm5hbWUrImAgd2l0aCBkYXRhIGZpZWxkIGAiK24uZmllbGQrImApOyB0cnkgYSBgWyIrbi5maWVsZCsiXWAgc2VsZWN0b3IgdG8gbGltaXQgc2NvcGUgdG8gZWxlbWVudHMgd2l0aCBgIituLmZpZWxkKyJgIGRlZmluZWQiKX0sInByaW50TWFwcGluZ0VyciIpO3N3aXRjaChuLm1hcHBlZCl7Y2FzZSBzLm1hcERhdGE6e2Zvcih2YXIgdj1uLmZpZWxkLnNwbGl0KCIuIikseD1kLmRhdGEsYj0wO2I8di5sZW5ndGgmJng7YisrKXt2YXIgdz12W2JdO3g9eFt3XX1pZih4PT1udWxsKXJldHVybiB5KCksITE7dmFyIF87aWYoeHQoeCkpe3ZhciBUPW4uZmllbGRNYXgtbi5maWVsZE1pbjtUPT09MD9fPTA6Xz0oeC1uLmZpZWxkTWluKS9UfWVsc2UgcmV0dXJuIG9uKCJEbyBub3QgdXNlIGNvbnRpbnVvdXMgbWFwcGVycyB3aXRob3V0IHNwZWNpZnlpbmcgbnVtZXJpYyBkYXRhIChpLmUuIGAiK24uZmllbGQrIjogIit4KyJgIGZvciBgIit0LmlkKCkrImAgaXMgbm9uLW51bWVyaWMpIiksITE7aWYoXzwwP189MDpfPjEmJihfPTEpLGwuY29sb3Ipe3ZhciBFPW4udmFsdWVNaW5bMF0sTD1uLnZhbHVlTWF4WzBdLEM9bi52YWx1ZU1pblsxXSxBPW4udmFsdWVNYXhbMV0sST1uLnZhbHVlTWluWzJdLEQ9bi52YWx1ZU1heFsyXSxrPW4udmFsdWVNaW5bM109PW51bGw/MTpuLnZhbHVlTWluWzNdLFI9bi52YWx1ZU1heFszXT09bnVsbD8xOm4udmFsdWVNYXhbM10sUz1bTWF0aC5yb3VuZChFKyhMLUUpKl8pLE1hdGgucm91bmQoQysoQS1DKSpfKSxNYXRoLnJvdW5kKEkrKEQtSSkqXyksTWF0aC5yb3VuZChrKyhSLWspKl8pXTthPXtieXBhc3M6bi5ieXBhc3MsbmFtZTpuLm5hbWUsdmFsdWU6UyxzdHJWYWx1ZToicmdiKCIrU1swXSsiLCAiK1NbMV0rIiwgIitTWzJdKyIpIn19ZWxzZSBpZihsLm51bWJlcil7dmFyIE89bi52YWx1ZU1pbisobi52YWx1ZU1heC1uLnZhbHVlTWluKSpfO2E9dGhpcy5wYXJzZShuLm5hbWUsTyxuLmJ5cGFzcyxwKX1lbHNlIHJldHVybiExO2lmKCFhKXJldHVybiB5KCksITE7YS5tYXBwaW5nPW4sbj1hO2JyZWFrfWNhc2Ugcy5kYXRhOntmb3IodmFyIE49bi5maWVsZC5zcGxpdCgiLiIpLFA9ZC5kYXRhLEY9MDtGPE4ubGVuZ3RoJiZQO0YrKyl7dmFyIEI9TltGXTtQPVBbQl19aWYoUCE9bnVsbCYmKGE9dGhpcy5wYXJzZShuLm5hbWUsUCxuLmJ5cGFzcyxwKSksIWEpcmV0dXJuIHkoKSwhMTthLm1hcHBpbmc9bixuPWE7YnJlYWt9Y2FzZSBzLmZuOnt2YXIgJD1uLnZhbHVlLHo9bi5mblZhbHVlIT1udWxsP24uZm5WYWx1ZTokKHQpO2lmKG4ucHJldkZuVmFsdWU9eix6PT1udWxsKXJldHVybiBvbigiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gbnVsbCAoaS5lLiBgIituLm5hbWUrImAgZm9yIGVsZSBgIit0LmlkKCkrImAgaXMgbnVsbCkiKSwhMTtpZihhPXRoaXMucGFyc2Uobi5uYW1lLHosbi5ieXBhc3MscCksIWEpcmV0dXJuIG9uKCJDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBpbnZhbGlkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHR5cGUgKGkuZS4gYCIrbi5uYW1lKyJgIGZvciBlbGUgYCIrdC5pZCgpKyJgIGlzIGludmFsaWQpIiksITE7YS5tYXBwaW5nPVZjKG4pLG49YTticmVha31jYXNlIHZvaWQgMDpicmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiB1PyhmP24uYnlwYXNzZWQ9aC5ieXBhc3NlZDpuLmJ5cGFzc2VkPWgsaVtuLm5hbWVdPW4pOmY/aC5ieXBhc3NlZD1uOmlbbi5uYW1lXT1uLGcoKSwhMH07emEuY2xlYW5FbGVtZW50cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKHRoaXMuY2xlYXJTdHlsZUhpbnRzKG4pLG4uZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksbi5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSwhZSluLl9wcml2YXRlLnN0eWxlPXt9O2Vsc2UgZm9yKHZhciBpPW4uX3ByaXZhdGUuc3R5bGUsYT1PYmplY3Qua2V5cyhpKSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1pW2xdO3UhPW51bGwmJih1LmJ5cGFzcz91LmJ5cGFzc2VkPW51bGw6aVtsXT1udWxsKX19fTt6YS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlLmN5LGU9dC5tdXRhYmxlRWxlbWVudHMoKTtlLnVwZGF0ZVN0eWxlKCl9O3phLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXQuX3ByaXZhdGUsaT10LnBzdHlsZSgidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLnZhbHVlLGE9dC5wc3R5bGUoInRyYW5zaXRpb24tZHVyYXRpb24iKS5wZlZhbHVlLHM9dC5wc3R5bGUoInRyYW5zaXRpb24tZGVsYXkiKS5wZlZhbHVlO2lmKGkubGVuZ3RoPjAmJmE+MCl7Zm9yKHZhciBsPXt9LHU9ITEsaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdLGQ9dC5wc3R5bGUoZikscD1lW2ZdO2lmKHApe3ZhciBtPXAucHJldixnPW0seT1wLm5leHQhPW51bGw/cC5uZXh0OmQsdj0hMSx4PXZvaWQgMCxiPTFlLTY7ZyYmKHh0KGcucGZWYWx1ZSkmJnh0KHkucGZWYWx1ZSk/KHY9eS5wZlZhbHVlLWcucGZWYWx1ZSx4PWcucGZWYWx1ZStiKnYpOnh0KGcudmFsdWUpJiZ4dCh5LnZhbHVlKT8odj15LnZhbHVlLWcudmFsdWUseD1nLnZhbHVlK2Iqdik6d24oZy52YWx1ZSkmJnduKHkudmFsdWUpJiYodj1nLnZhbHVlWzBdIT09eS52YWx1ZVswXXx8Zy52YWx1ZVsxXSE9PXkudmFsdWVbMV18fGcudmFsdWVbMl0hPT15LnZhbHVlWzJdLHg9Zy5zdHJWYWx1ZSksdiYmKGxbZl09eS5zdHJWYWx1ZSx0aGlzLmFwcGx5QnlwYXNzKHQsZix4KSx1PSEwKSl9fWlmKCF1KXJldHVybjtuLnRyYW5zaXRpb25pbmc9ITAsbmV3IGQxKGZ1bmN0aW9uKHcpe3M+MD90LmRlbGF5QW5pbWF0aW9uKHMpLnBsYXkoKS5wcm9taXNlKCkudGhlbih3KTp3KCl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuYW5pbWF0aW9uKHtzdHlsZTpsLGR1cmF0aW9uOmEsZWFzaW5nOnQucHN0eWxlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIpLnZhbHVlLHF1ZXVlOiExfSkucGxheSgpLnByb21pc2UoKX0pLnRoZW4oZnVuY3Rpb24oKXtyLnJlbW92ZUJ5cGFzc2VzKHQsaSksdC5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLG4udHJhbnNpdGlvbmluZz0hMX0pfWVsc2Ugbi50cmFuc2l0aW9uaW5nJiYodGhpcy5yZW1vdmVCeXBhc3Nlcyh0LGkpLHQuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxuLnRyYW5zaXRpb25pbmc9ITEpfTt6YS5jaGVja1RyaWdnZXI9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPXRoaXMucHJvcGVydGllc1tlXSxsPWkocyk7bCE9bnVsbCYmbChyLG4pJiZhKHMpfTt6YS5jaGVja1pPcmRlclRyaWdnZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpczt0aGlzLmNoZWNrVHJpZ2dlcih0LGUscixuLGZ1bmN0aW9uKGEpe3JldHVybiBhLnRyaWdnZXJzWk9yZGVyfSxmdW5jdGlvbigpe2kuX3ByaXZhdGUuY3kubm90aWZ5KCJ6b3JkZXIiLHQpfSl9O3phLmNoZWNrQm91bmRzVHJpZ2dlcj1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNoZWNrVHJpZ2dlcih0LGUscixuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRyaWdnZXJzQm91bmRzfSxmdW5jdGlvbihpKXt0LmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLHQuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS50cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzJiZlPT09ImN1cnZlLXN0eWxlIiYmKHI9PT0iYmV6aWVyInx8bj09PSJiZXppZXIiKSYmdC5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihhKXthLmlzQnVuZGxlZEJlemllcigpJiZhLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSksaS50cmlnZ2Vyc0JvdW5kc09mQ29ubmVjdGVkRWRnZXMmJmU9PT0iZGlzcGxheSImJihyPT09Im5vbmUifHxuPT09Im5vbmUiKSYmdC5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pfSl9O3phLmNoZWNrVHJpZ2dlcnM9ZnVuY3Rpb24odCxlLHIsbil7dC5kaXJ0eVN0eWxlQ2FjaGUoKSx0aGlzLmNoZWNrWk9yZGVyVHJpZ2dlcih0LGUscixuKSx0aGlzLmNoZWNrQm91bmRzVHJpZ2dlcih0LGUscixuKX07bmI9e307bmIuYXBwbHlCeXBhc3M9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPVtdLHM9ITA7aWYoZT09PSIqInx8ZT09PSIqKiIpe2lmKHIhPT12b2lkIDApZm9yKHZhciBsPTA7bDxpLnByb3BlcnRpZXMubGVuZ3RoO2wrKyl7dmFyIHU9aS5wcm9wZXJ0aWVzW2xdLGg9dS5uYW1lLGY9dGhpcy5wYXJzZShoLHIsITApO2YmJmEucHVzaChmKX19ZWxzZSBpZihadChlKSl7dmFyIGQ9dGhpcy5wYXJzZShlLHIsITApO2QmJmEucHVzaChkKX1lbHNlIGlmKFZyKGUpKXt2YXIgcD1lO249cjtmb3IodmFyIG09T2JqZWN0LmtleXMocCksZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddLHY9cFt5XTtpZih2PT09dm9pZCAwJiYodj1wW1M2KHkpXSksdiE9PXZvaWQgMCl7dmFyIHg9dGhpcy5wYXJzZSh5LHYsITApO3gmJmEucHVzaCh4KX19fWVsc2UgcmV0dXJuITE7aWYoYS5sZW5ndGg9PT0wKXJldHVybiExO2Zvcih2YXIgYj0hMSx3PTA7dzx0Lmxlbmd0aDt3Kyspe2Zvcih2YXIgXz10W3ddLFQ9e30sRT12b2lkIDAsTD0wO0w8YS5sZW5ndGg7TCsrKXt2YXIgQz1hW0xdO2lmKG4pe3ZhciBBPV8ucHN0eWxlKEMubmFtZSk7RT1UW0MubmFtZV09e3ByZXY6QX19Yj10aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoXyxWYyhDKSl8fGIsbiYmKEUubmV4dD1fLnBzdHlsZShDLm5hbWUpKX1iJiZ0aGlzLnVwZGF0ZVN0eWxlSGludHMoXyksbiYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhfLFQscyl9cmV0dXJuIGJ9O25iLm92ZXJyaWRlQnlwYXNzPWZ1bmN0aW9uKHQsZSxyKXtlPXJCKGUpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aS5fcHJpdmF0ZS5zdHlsZVtlXSxzPXRoaXMucHJvcGVydGllc1tlXS50eXBlLGw9cy5jb2xvcix1PXMubXV0aXBsZSxoPWE/YS5wZlZhbHVlIT1udWxsP2EucGZWYWx1ZTphLnZhbHVlOm51bGw7IWF8fCFhLmJ5cGFzcz90aGlzLmFwcGx5QnlwYXNzKGksZSxyKTooYS52YWx1ZT1yLGEucGZWYWx1ZSE9bnVsbCYmKGEucGZWYWx1ZT1yKSxsP2Euc3RyVmFsdWU9InJnYigiK3Iuam9pbigiLCIpKyIpIjp1P2Euc3RyVmFsdWU9ci5qb2luKCIgIik6YS5zdHJWYWx1ZT0iIityLHRoaXMudXBkYXRlU3R5bGVIaW50cyhpKSksdGhpcy5jaGVja1RyaWdnZXJzKGksZSxoLHIpfX07bmIucmVtb3ZlQWxsQnlwYXNzZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3Nlcyh0LHRoaXMucHJvcGVydHlOYW1lcyxlKX07bmIucmVtb3ZlQnlwYXNzZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0hMCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT10W2ldLHM9e30sbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgdT1lW2xdLGg9dGhpcy5wcm9wZXJ0aWVzW3VdLGY9YS5wc3R5bGUoaC5uYW1lKTtpZighKCFmfHwhZi5ieXBhc3MpKXt2YXIgZD0iIixwPXRoaXMucGFyc2UodSxkLCEwKSxtPXNbaC5uYW1lXT17cHJldjpmfTt0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoYSxwKSxtLm5leHQ9YS5wc3R5bGUoaC5uYW1lKX19dGhpcy51cGRhdGVTdHlsZUhpbnRzKGEpLHImJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoYSxzLG4pfX07Z0I9e307Z0IuZ2V0RW1TaXplSW5QaXhlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRhaW5lckNzcygiZm9udC1zaXplIik7cmV0dXJuIHQhPW51bGw/cGFyc2VGbG9hdCh0KToxfTtnQi5jb250YWluZXJDc3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeSxyPWUuY29udGFpbmVyKCksbj1lLndpbmRvdygpO2lmKG4mJnImJm4uZ2V0Q29tcHV0ZWRTdHlsZSlyZXR1cm4gbi5nZXRDb21wdXRlZFN0eWxlKHIpLmdldFByb3BlcnR5VmFsdWUodCl9O0hjPXt9O0hjLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh0LGUsITApOnRoaXMuZ2V0UmF3U3R5bGUodCwhMCl9O0hjLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztpZih0PXRbMF0sdCl7Zm9yKHZhciBuPXt9LGk9MDtpPHIucHJvcGVydGllcy5sZW5ndGg7aSsrKXt2YXIgYT1yLnByb3BlcnRpZXNbaV0scz1yLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh0LGEubmFtZSxlKTtzIT1udWxsJiYoblthLm5hbWVdPXMsbltTNihhLm5hbWUpXT1zKX1yZXR1cm4gbn19O0hjLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnBzdHlsZShlKVtyXVtuXTtyZXR1cm4gaT8/dC5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGUpW3JdWzBdfTtIYy5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXM7aWYodD10WzBdLHQpe3ZhciBpPW4ucHJvcGVydGllc1tlXTtpLmFsaWFzJiYoaT1pLnBvaW50c1RvKTt2YXIgYT1pLnR5cGUscz10LnBzdHlsZShpLm5hbWUpO2lmKHMpe3ZhciBsPXMudmFsdWUsdT1zLnVuaXRzLGg9cy5zdHJWYWx1ZTtpZihyJiZhLm51bWJlciYmbCE9bnVsbCYmeHQobCkpe3ZhciBmPXQuY3koKS56b29tKCksZD1vKGZ1bmN0aW9uKHYpe3JldHVybiB2KmZ9LCJnZXRSZW5kZXJlZFZhbHVlIikscD1vKGZ1bmN0aW9uKHYseCl7cmV0dXJuIGQodikreH0sImdldFZhbHVlU3RyaW5nV2l0aFVuaXRzIiksbT13bihsKSxnPW0/dS5ldmVyeShmdW5jdGlvbih5KXtyZXR1cm4geSE9bnVsbH0pOnUhPW51bGw7cmV0dXJuIGc/bT9sLm1hcChmdW5jdGlvbih5LHYpe3JldHVybiBwKHksdVt2XSl9KS5qb2luKCIgIik6cChsLHUpOm0/bC5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIFp0KHkpP3k6IiIrZCh5KX0pLmpvaW4oIiAiKToiIitkKGwpfWVsc2UgaWYoaCE9bnVsbClyZXR1cm4gaH1yZXR1cm4gbnVsbH19O0hjLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dLGE9aS5uYW1lLHM9dC5wc3R5bGUoYSk7cyE9PXZvaWQgMCYmKFZyKHMpP3M9dGhpcy5wYXJzZShhLHMuc3RyVmFsdWUpOnM9dGhpcy5wYXJzZShhLHMpKSxzJiYoclthXT1zKX1yZXR1cm4gcn07SGMuZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1bXSxuPXQsaT1lLnByb3BlcnRpZXM7aWYobilmb3IodmFyIGE9T2JqZWN0LmtleXMobikscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9bltsXSxoPWlbbF18fGlbckIobCldLGY9dGhpcy5wYXJzZShoLm5hbWUsdSk7ZiYmci5wdXNoKGYpfXJldHVybiByfTtIYy5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIuc2xpY2UoKSxpLGEscyxsLHUsaDtmb3IodT0wO3U8ZS5sZW5ndGg7dSsrKWlmKGk9ZVt1XSxhPXQucHN0eWxlKGksITEpLGEhPW51bGwpaWYoYS5wZlZhbHVlIT1udWxsKW5bMF09VngobCxuWzBdKSxuWzFdPVV4KGwsblsxXSk7ZWxzZSBmb3Iocz1hLnN0clZhbHVlLGg9MDtoPHMubGVuZ3RoO2grKylsPXMuY2hhckNvZGVBdChoKSxuWzBdPVZ4KGwsblswXSksblsxXT1VeChsLG5bMV0pO3JldHVybiBufTtIYy5nZXRQcm9wZXJ0aWVzSGFzaD1IYy5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7RjY9e307RjYuYXBwZW5kRnJvbUpzb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLGk9bi5zZWxlY3RvcixhPW4uc3R5bGV8fG4uY3NzLHM9T2JqZWN0LmtleXMoYSk7ZS5zZWxlY3RvcihpKTtmb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIHU9c1tsXSxoPWFbdV07ZS5jc3ModSxoKX19cmV0dXJuIGV9O0Y2LmZyb21Kc29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGUucmVzZXRUb0RlZmF1bHQoKSxlLmFwcGVuZEZyb21Kc29uKHQpLGV9O0Y2Lmpzb249ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLmRlZmF1bHRMZW5ndGg7ZTx0aGlzLmxlbmd0aDtlKyspe2Zvcih2YXIgcj10aGlzW2VdLG49ci5zZWxlY3RvcixpPXIucHJvcGVydGllcyxhPXt9LHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTthW2wubmFtZV09bC5zdHJWYWx1ZX10LnB1c2goe3NlbGVjdG9yOm4/bi50b1N0cmluZygpOiJjb3JlIixzdHlsZTphfSl9cmV0dXJuIHR9O3lCPXt9O3lCLmFwcGVuZEZyb21TdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXRoaXMsbj0iIit0LGksYSxzO249bi5yZXBsYWNlKC9bL11bKl0oXHN8LikrP1sqXVsvXS9nLCIiKTtmdW5jdGlvbiBsKCl7bi5sZW5ndGg+aS5sZW5ndGg/bj1uLnN1YnN0cihpLmxlbmd0aCk6bj0iIn1vKGwsInJlbW92ZVNlbEFuZEJsb2NrRnJvbVJlbWFpbmluZyIpO2Z1bmN0aW9uIHUoKXthLmxlbmd0aD5zLmxlbmd0aD9hPWEuc3Vic3RyKHMubGVuZ3RoKTphPSIifWZvcihvKHUsInJlbW92ZVByb3BBbmRWYWxGcm9tUmVtIik7Oyl7dmFyIGg9bi5tYXRjaCgvXlxzKiQvKTtpZihoKWJyZWFrO3ZhciBmPW4ubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIWYpe29uKCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK24pO2JyZWFrfWk9ZlswXTt2YXIgZD1mWzFdO2lmKGQhPT0iY29yZSIpe3ZhciBwPW5ldyBBZihkKTtpZihwLmludmFsaWQpe29uKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIHNlbGVjdG9yIGZvdW5kIGluIHN0cmluZyBzdHlsZXNoZWV0OiAiK2QpLGwoKTtjb250aW51ZX19dmFyIG09ZlsyXSxnPSExO2E9bTtmb3IodmFyIHk9W107Oyl7dmFyIHY9YS5tYXRjaCgvXlxzKiQvKTtpZih2KWJyZWFrO3ZhciB4PWEubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZigheCl7b24oIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgZm9ybWF0dGluZyBvZiBzdHlsZSBwcm9wZXJ0eSBhbmQgdmFsdWUgZGVmaW5pdGlvbnMgZm91bmQgaW46IittKSxnPSEwO2JyZWFrfXM9eFswXTt2YXIgYj14WzFdLHc9eFsyXSxfPWUucHJvcGVydGllc1tiXTtpZighXyl7b24oIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IG5hbWUgaW46ICIrcyksdSgpO2NvbnRpbnVlfXZhciBUPXIucGFyc2UoYix3KTtpZighVCl7b24oIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrcyksdSgpO2NvbnRpbnVlfXkucHVzaCh7bmFtZTpiLHZhbDp3fSksdSgpfWlmKGcpe2woKTticmVha31yLnNlbGVjdG9yKGQpO2Zvcih2YXIgRT0wO0U8eS5sZW5ndGg7RSsrKXt2YXIgTD15W0VdO3IuY3NzKEwubmFtZSxMLnZhbCl9bCgpfXJldHVybiByfTt5Qi5mcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGUucmVzZXRUb0RlZmF1bHQoKSxlLmFwcGVuZEZyb21TdHJpbmcodCksZX07dmE9e307KGZ1bmN0aW9uKCl7dmFyIHQ9V2ksZT1yWGUscj1pWGUsbj1hWGUsaT1zWGUsYT1vKGZ1bmN0aW9uKEgpe3JldHVybiJeIitIKyJcXHMqXFwoXFxzKihbXFx3XFwuXSspXFxzKlxcKSQifSwiZGF0YSIpLHM9byhmdW5jdGlvbihIKXt2YXIgcT10KyJ8XFx3K3wiK2UrInwiK3IrInwiK24rInwiK2k7cmV0dXJuIl4iK0grIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIrdCsiKVxccypcXCxcXHMqKCIrdCsiKVxccyosXFxzKigiK3ErIilcXHMqXFwsXFxzKigiK3ErIilcXCkkIn0sIm1hcERhdGEiKSxsPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdO3ZhLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0sbm9uTmVnYXRpdmVOdW1iZXI6e251bWJlcjohMCxtaW46MCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIiwibnVsbCJdLG11bHRpcGxlOiEwfSxiZ0NsaXA6e2VudW1zOlsibm9uZSIsIm5vZGUiXSxtdWx0aXBsZTohMH0sYmdDb250YWlubWVudDp7ZW51bXM6WyJpbnNpZGUiLCJvdmVyIl0sbXVsdGlwbGU6ITB9LGNvbG9yOntjb2xvcjohMH0sY29sb3JzOntjb2xvcjohMCxtdWx0aXBsZTohMH0sZmlsbDp7ZW51bXM6WyJzb2xpZCIsImxpbmVhci1ncmFkaWVudCIsInJhZGlhbC1ncmFkaWVudCJdfSxib29sOntlbnVtczpbInllcyIsIm5vIl19LGJvb2xzOntlbnVtczpbInllcyIsIm5vIl0sbXVsdGlwbGU6ITB9LGxpbmVTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCJdfSxsaW5lQ2FwOntlbnVtczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdfSxsaW5lUG9zaXRpb246e2VudW1zOlsiY2VudGVyIiwiaW5zaWRlIiwib3V0c2lkZSJdfSxsaW5lSm9pbjp7ZW51bXM6WyJyb3VuZCIsImJldmVsIiwibWl0ZXIiXX0sYm9yZGVyU3R5bGU6e2VudW1zOlsic29saWQiLCJkb3R0ZWQiLCJkYXNoZWQiLCJkb3VibGUiXX0sY3VydmVTdHlsZTp7ZW51bXM6WyJiZXppZXIiLCJ1bmJ1bmRsZWQtYmV6aWVyIiwiaGF5c3RhY2siLCJzZWdtZW50cyIsInN0cmFpZ2h0Iiwic3RyYWlnaHQtdHJpYW5nbGUiLCJ0YXhpIiwicm91bmQtc2VnbWVudHMiLCJyb3VuZC10YXhpIl19LHJhZGl1c1R5cGU6e2VudW1zOlsiYXJjLXJhZGl1cyIsImluZmx1ZW5jZS1yYWRpdXMiXSxtdWx0aXBsZTohMH0sZm9udEZhbWlseTp7cmVnZXg6J14oW1xcdy0gXFwiXSsoPzpcXHMqLFxccypbXFx3LSBcXCJdKykqKSQnfSxmb250U3R5bGU6e2VudW1zOlsiaXRhbGljIiwibm9ybWFsIiwib2JsaXF1ZSJdfSxmb250V2VpZ2h0OntlbnVtczpbIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiODAwIiwiOTAwIiwxMDAsMjAwLDMwMCw0MDAsNTAwLDYwMCw3MDAsODAwLDkwMF19LHRleHREZWNvcmF0aW9uOntlbnVtczpbIm5vbmUiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCJdfSx0ZXh0VHJhbnNmb3JtOntlbnVtczpbIm5vbmUiLCJ1cHBlcmNhc2UiLCJsb3dlcmNhc2UiXX0sdGV4dFdyYXA6e2VudW1zOlsibm9uZSIsIndyYXAiLCJlbGxpcHNpcyJdfSx0ZXh0T3ZlcmZsb3dXcmFwOntlbnVtczpbIndoaXRlc3BhY2UiLCJhbnl3aGVyZSJdfSx0ZXh0QmFja2dyb3VuZFNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIl19LG5vZGVTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImN1dHJlY3RhbmdsZSIsImN1dC1yZWN0YW5nbGUiLCJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLCJiYXJyZWwiLCJlbGxpcHNlIiwidHJpYW5nbGUiLCJyb3VuZC10cmlhbmdsZSIsInNxdWFyZSIsInBlbnRhZ29uIiwicm91bmQtcGVudGFnb24iLCJoZXhhZ29uIiwicm91bmQtaGV4YWdvbiIsImNvbmNhdmVoZXhhZ29uIiwiY29uY2F2ZS1oZXhhZ29uIiwiaGVwdGFnb24iLCJyb3VuZC1oZXB0YWdvbiIsIm9jdGFnb24iLCJyb3VuZC1vY3RhZ29uIiwidGFnIiwicm91bmQtdGFnIiwic3RhciIsImRpYW1vbmQiLCJyb3VuZC1kaWFtb25kIiwidmVlIiwicmhvbWJvaWQiLCJyaWdodC1yaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb3JuZXJSYWRpdXM6e251bWJlcjohMCxtaW46MCx1bml0czoicHh8ZW0iLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImF1dG8iXX0sY29tcG91bmRJbmNsdWRlTGFiZWxzOntlbnVtczpbImluY2x1ZGUiLCJleGNsdWRlIl19LGFycm93U2hhcGU6e2VudW1zOlsidGVlIiwidHJpYW5nbGUiLCJ0cmlhbmdsZS10ZWUiLCJjaXJjbGUtdHJpYW5nbGUiLCJ0cmlhbmdsZS1jcm9zcyIsInRyaWFuZ2xlLWJhY2tjdXJ2ZSIsInZlZSIsInNxdWFyZSIsImNpcmNsZSIsImRpYW1vbmQiLCJjaGV2cm9uIiwibm9uZSJdfSxhcnJvd0ZpbGw6e2VudW1zOlsiZmlsbGVkIiwiaG9sbG93Il19LGFycm93V2lkdGg6e251bWJlcjohMCx1bml0czoiJXxweHxlbSIsaW1wbGljaXRVbml0czoicHgiLGVudW1zOlsibWF0Y2gtbGluZSJdfSxkaXNwbGF5OntlbnVtczpbImVsZW1lbnQiLCJub25lIl19LHZpc2liaWxpdHk6e2VudW1zOlsiaGlkZGVuIiwidmlzaWJsZSJdfSx6Q29tcG91bmREZXB0aDp7ZW51bXM6WyJib3R0b20iLCJvcnBoYW4iLCJhdXRvIiwidG9wIl19LHpJbmRleENvbXBhcmU6e2VudW1zOlsiYXV0byIsIm1hbnVhbCJdfSx2YWxpZ246e2VudW1zOlsidG9wIiwiY2VudGVyIiwiYm90dG9tIl19LGhhbGlnbjp7ZW51bXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXX0sanVzdGlmaWNhdGlvbjp7ZW51bXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJhdXRvIl19LHRleHQ6e3N0cmluZzohMH0sZGF0YTp7bWFwcGluZzohMCxyZWdleDphKCJkYXRhIil9LGxheW91dERhdGE6e21hcHBpbmc6ITAscmVnZXg6YSgibGF5b3V0RGF0YSIpfSxzY3JhdGNoOnttYXBwaW5nOiEwLHJlZ2V4OmEoInNjcmF0Y2giKX0sbWFwRGF0YTp7bWFwcGluZzohMCxyZWdleDpzKCJtYXBEYXRhIil9LG1hcExheW91dERhdGE6e21hcHBpbmc6ITAscmVnZXg6cygibWFwTGF5b3V0RGF0YSIpfSxtYXBTY3JhdGNoOnttYXBwaW5nOiEwLHJlZ2V4OnMoIm1hcFNjcmF0Y2giKX0sZm46e21hcHBpbmc6ITAsZm46ITB9LHVybDp7cmVnZXhlczpsLHNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZTohMH0sdXJsczp7cmVnZXhlczpsLHNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZTohMCxtdWx0aXBsZTohMH0scHJvcExpc3Q6e3Byb3BMaXN0OiEwfSxhbmdsZTp7bnVtYmVyOiEwLHVuaXRzOiJkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJyYWQifSx0ZXh0Um90YXRpb246e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIixlbnVtczpbIm5vbmUiLCJhdXRvcm90YXRlIl19LHBvbHlnb25Qb2ludExpc3Q6e251bWJlcjohMCxtdWx0aXBsZTohMCxldmVuTXVsdGlwbGU6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxlZGdlRGlzdGFuY2VzOntlbnVtczpbImludGVyc2VjdGlvbiIsIm5vZGUtcG9zaXRpb24iLCJlbmRwb2ludHMiXX0sZWRnZUVuZHBvaW50OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsdW5pdHM6IiV8cHh8ZW18ZGVnfHJhZCIsaW1wbGljaXRVbml0czoicHgiLGVudW1zOlsiaW5zaWRlLXRvLW5vZGUiLCJvdXRzaWRlLXRvLW5vZGUiLCJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiLCJvdXRzaWRlLXRvLWxpbmUiLCJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiXSxzaW5nbGVFbnVtOiEwLHZhbGlkYXRlOm8oZnVuY3Rpb24oSCxxKXtzd2l0Y2goSC5sZW5ndGgpe2Nhc2UgMjpyZXR1cm4gcVswXSE9PSJkZWciJiZxWzBdIT09InJhZCImJnFbMV0hPT0iZGVnIiYmcVsxXSE9PSJyYWQiO2Nhc2UgMTpyZXR1cm4gWnQoSFswXSl8fHFbMF09PT0iZGVnInx8cVswXT09PSJyYWQiO2RlZmF1bHQ6cmV0dXJuITF9fSwidmFsaWRhdGUiKX0sZWFzaW5nOntyZWdleGVzOlsiXihzcHJpbmcpXFxzKlxcKFxccyooIit0KyIpXFxzKixcXHMqKCIrdCsiKVxccypcXCkkIiwiXihjdWJpYy1iZXppZXIpXFxzKlxcKFxccyooIit0KyIpXFxzKixcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqLFxccyooIit0KyIpXFxzKlxcKSQiXSxlbnVtczpbImxpbmVhciIsImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImVhc2UtaW4tc2luZSIsImVhc2Utb3V0LXNpbmUiLCJlYXNlLWluLW91dC1zaW5lIiwiZWFzZS1pbi1xdWFkIiwiZWFzZS1vdXQtcXVhZCIsImVhc2UtaW4tb3V0LXF1YWQiLCJlYXNlLWluLWN1YmljIiwiZWFzZS1vdXQtY3ViaWMiLCJlYXNlLWluLW91dC1jdWJpYyIsImVhc2UtaW4tcXVhcnQiLCJlYXNlLW91dC1xdWFydCIsImVhc2UtaW4tb3V0LXF1YXJ0IiwiZWFzZS1pbi1xdWludCIsImVhc2Utb3V0LXF1aW50IiwiZWFzZS1pbi1vdXQtcXVpbnQiLCJlYXNlLWluLWV4cG8iLCJlYXNlLW91dC1leHBvIiwiZWFzZS1pbi1vdXQtZXhwbyIsImVhc2UtaW4tY2lyYyIsImVhc2Utb3V0LWNpcmMiLCJlYXNlLWluLW91dC1jaXJjIl19LGdyYWRpZW50RGlyZWN0aW9uOntlbnVtczpbInRvLWJvdHRvbSIsInRvLXRvcCIsInRvLWxlZnQiLCJ0by1yaWdodCIsInRvLWJvdHRvbS1yaWdodCIsInRvLWJvdHRvbS1sZWZ0IiwidG8tdG9wLXJpZ2h0IiwidG8tdG9wLWxlZnQiLCJ0by1yaWdodC1ib3R0b20iLCJ0by1sZWZ0LWJvdHRvbSIsInRvLXJpZ2h0LXRvcCIsInRvLWxlZnQtdG9wIl19LGJvdW5kc0V4cGFuc2lvbjp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLG1pbjowLHZhbGlkYXRlOm8oZnVuY3Rpb24oSCl7dmFyIHE9SC5sZW5ndGg7cmV0dXJuIHE9PT0xfHxxPT09Mnx8cT09PTR9LCJ2YWxpZGF0ZSIpfX07dmFyIHU9e3plcm9Ob25aZXJvOm8oZnVuY3Rpb24oSCxxKXtyZXR1cm4oSD09bnVsbHx8cT09bnVsbCkmJkghPT1xfHxIPT0wJiZxIT0wPyEwOkghPTAmJnE9PTB9LCJ6ZXJvTm9uWmVybyIpLGFueTpvKGZ1bmN0aW9uKEgscSl7cmV0dXJuIEghPXF9LCJhbnkiKSxlbXB0eU5vbkVtcHR5Om8oZnVuY3Rpb24oSCxxKXt2YXIgWj1TZihIKSxhZT1TZihxKTtyZXR1cm4gWiYmIWFlfHwhWiYmYWV9LCJlbXB0eU5vbkVtcHR5Iil9LGg9dmEudHlwZXMsZj1be25hbWU6ImxhYmVsIix0eXBlOmgudGV4dCx0cmlnZ2Vyc0JvdW5kczp1LmFueSx0cmlnZ2Vyc1pPcmRlcjp1LmVtcHR5Tm9uRW1wdHl9LHtuYW1lOiJ0ZXh0LXJvdGF0aW9uIix0eXBlOmgudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1tYXJnaW4teCIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1tYXJnaW4teSIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sZD1be25hbWU6InNvdXJjZS1sYWJlbCIsdHlwZTpoLnRleHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1yb3RhdGlvbiIsdHlwZTpoLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi14Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1tYXJnaW4teSIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtb2Zmc2V0Iix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLHA9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6aC50ZXh0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6aC50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxtPVt7bmFtZToiZm9udC1mYW1pbHkiLHR5cGU6aC5mb250RmFtaWx5LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZm9udC1zdHlsZSIsdHlwZTpoLmZvbnRTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImZvbnQtd2VpZ2h0Iix0eXBlOmguZm9udFdlaWdodCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImZvbnQtc2l6ZSIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LXRyYW5zZm9ybSIsdHlwZTpoLnRleHRUcmFuc2Zvcm0sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LXdyYXAiLHR5cGU6aC50ZXh0V3JhcCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtb3ZlcmZsb3ctd3JhcCIsdHlwZTpoLnRleHRPdmVyZmxvd1dyYXAsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW1heC13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibGluZS1oZWlnaHQiLHR5cGU6aC5wb3NpdGl2ZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLGc9W3tuYW1lOiJ0ZXh0LXZhbGlnbiIsdHlwZTpoLnZhbGlnbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtaGFsaWduIix0eXBlOmguaGFsaWduLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InRleHQtb3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWJvcmRlci1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYm9yZGVyLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ0ZXh0LWJvcmRlci13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWJvcmRlci1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIix0eXBlOmgudGV4dEJhY2tncm91bmRTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtanVzdGlmaWNhdGlvbiIsdHlwZTpoLmp1c3RpZmljYXRpb259XSx5PVt7bmFtZToiZXZlbnRzIix0eXBlOmguYm9vbCx0cmlnZ2Vyc1pPcmRlcjp1LmFueX0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOmguYm9vbCx0cmlnZ2Vyc1pPcmRlcjp1LmFueX1dLHY9W3tuYW1lOiJkaXNwbGF5Iix0eXBlOmguZGlzcGxheSx0cmlnZ2Vyc1pPcmRlcjp1LmFueSx0cmlnZ2Vyc0JvdW5kczp1LmFueSx0cmlnZ2Vyc0JvdW5kc09mQ29ubmVjdGVkRWRnZXM6ITB9LHtuYW1lOiJ2aXNpYmlsaXR5Iix0eXBlOmgudmlzaWJpbGl0eSx0cmlnZ2Vyc1pPcmRlcjp1LmFueX0se25hbWU6Im9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzWk9yZGVyOnUuemVyb05vblplcm99LHtuYW1lOiJ0ZXh0LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToibWluLXpvb21lZC1mb250LXNpemUiLHR5cGU6aC5zaXplfSx7bmFtZToiei1jb21wb3VuZC1kZXB0aCIsdHlwZTpoLnpDb21wb3VuZERlcHRoLHRyaWdnZXJzWk9yZGVyOnUuYW55fSx7bmFtZToiei1pbmRleC1jb21wYXJlIix0eXBlOmguekluZGV4Q29tcGFyZSx0cmlnZ2Vyc1pPcmRlcjp1LmFueX0se25hbWU6InotaW5kZXgiLHR5cGU6aC5udW1iZXIsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9XSx4PVt7bmFtZToib3ZlcmxheS1wYWRkaW5nIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im92ZXJsYXktY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6Im92ZXJsYXktb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS56ZXJvTm9uWmVyb30se25hbWU6Im92ZXJsYXktc2hhcGUiLHR5cGU6aC5vdmVybGF5U2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJvdmVybGF5LWNvcm5lci1yYWRpdXMiLHR5cGU6aC5jb3JuZXJSYWRpdXN9XSxiPVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOmgub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidW5kZXJsYXktY29ybmVyLXJhZGl1cyIsdHlwZTpoLmNvcm5lclJhZGl1c31dLHc9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOmgucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOmgudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6aC50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6aC5lYXNpbmd9XSxfPW8oZnVuY3Rpb24oSCxxKXtyZXR1cm4gcS52YWx1ZT09PSJsYWJlbCI/LUgucG9vbEluZGV4KCk6cS5wZlZhbHVlfSwibm9kZVNpemVIYXNoT3ZlcnJpZGUiKSxUPVt7bmFtZToiaGVpZ2h0Iix0eXBlOmgubm9kZVNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnksaGFzaE92ZXJyaWRlOl99LHtuYW1lOiJ3aWR0aCIsdHlwZTpoLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55LGhhc2hPdmVycmlkZTpffSx7bmFtZToic2hhcGUiLHR5cGU6aC5ub2RlU2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzaGFwZS1wb2x5Z29uLXBvaW50cyIsdHlwZTpoLnBvbHlnb25Qb2ludExpc3QsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb3JuZXItcmFkaXVzIix0eXBlOmguY29ybmVyUmFkaXVzfSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOmguZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6aC5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpoLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6aC5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOmguZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6aC5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6aC5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxFPVt7bmFtZToiYm9yZGVyLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJib3JkZXItb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJib3JkZXItd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiYm9yZGVyLXN0eWxlIix0eXBlOmguYm9yZGVyU3R5bGV9LHtuYW1lOiJib3JkZXItY2FwIix0eXBlOmgubGluZUNhcH0se25hbWU6ImJvcmRlci1qb2luIix0eXBlOmgubGluZUpvaW59LHtuYW1lOiJib3JkZXItZGFzaC1wYXR0ZXJuIix0eXBlOmgubnVtYmVyc30se25hbWU6ImJvcmRlci1kYXNoLW9mZnNldCIsdHlwZTpoLm51bWJlcn0se25hbWU6ImJvcmRlci1wb3NpdGlvbiIsdHlwZTpoLmxpbmVQb3NpdGlvbn1dLEw9W3tuYW1lOiJvdXRsaW5lLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJvdXRsaW5lLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToib3V0bGluZS13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJvdXRsaW5lLXN0eWxlIix0eXBlOmguYm9yZGVyU3R5bGV9LHtuYW1lOiJvdXRsaW5lLW9mZnNldCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxDPVt7bmFtZToiYmFja2dyb3VuZC1pbWFnZSIsdHlwZTpoLnVybHN9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIix0eXBlOmguYmdDcm9zc09yaWdpbn0se25hbWU6ImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCIsdHlwZTpoLmJnQ29udGFpbm1lbnR9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsdHlwZTpoLmJvb2xzfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi14Iix0eXBlOmguYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLHR5cGU6aC5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLHR5cGU6aC5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byIsdHlwZTpoLmJnUmVsYXRpdmVUb30se25hbWU6ImJhY2tncm91bmQtcmVwZWF0Iix0eXBlOmguYmdSZXBlYXR9LHtuYW1lOiJiYWNrZ3JvdW5kLWZpdCIsdHlwZTpoLmJnRml0fSx7bmFtZToiYmFja2dyb3VuZC1jbGlwIix0eXBlOmguYmdDbGlwfSx7bmFtZToiYmFja2dyb3VuZC13aWR0aCIsdHlwZTpoLmJnV0h9LHtuYW1lOiJiYWNrZ3JvdW5kLWhlaWdodCIsdHlwZTpoLmJnV0h9LHtuYW1lOiJiYWNrZ3JvdW5kLW9mZnNldC14Iix0eXBlOmguYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLW9mZnNldC15Iix0eXBlOmguYmdQb3N9XSxBPVt7bmFtZToicG9zaXRpb24iLHR5cGU6aC5wb3NpdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIix0eXBlOmguY29tcG91bmRJbmNsdWRlTGFiZWxzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLWxlZnQiLHR5cGU6aC5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtcmlnaHQiLHR5cGU6aC5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLWhlaWdodCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtdG9wIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy1ib3R0b20iLHR5cGU6aC5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnUuYW55fV0sST1be25hbWU6ImxpbmUtc3R5bGUiLHR5cGU6aC5saW5lU3R5bGV9LHtuYW1lOiJsaW5lLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJsaW5lLWZpbGwiLHR5cGU6aC5maWxsfSx7bmFtZToibGluZS1jYXAiLHR5cGU6aC5saW5lQ2FwfSx7bmFtZToibGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6ImxpbmUtZGFzaC1wYXR0ZXJuIix0eXBlOmgubnVtYmVyc30se25hbWU6ImxpbmUtZGFzaC1vZmZzZXQiLHR5cGU6aC5udW1iZXJ9LHtuYW1lOiJsaW5lLW91dGxpbmUtd2lkdGgiLHR5cGU6aC5zaXplfSx7bmFtZToibGluZS1vdXRsaW5lLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIix0eXBlOmguY29sb3JzfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIsdHlwZTpoLnBlcmNlbnRhZ2VzfSx7bmFtZToiY3VydmUtc3R5bGUiLHR5cGU6aC5jdXJ2ZVN0eWxlLHRyaWdnZXJzQm91bmRzOnUuYW55LHRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnM6ITB9LHtuYW1lOiJoYXlzdGFjay1yYWRpdXMiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLWVuZHBvaW50Iix0eXBlOmguZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LWVuZHBvaW50Iix0eXBlOmguZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1zdGVwLXNpemUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LXdlaWdodHMiLHR5cGU6aC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2VnbWVudC1kaXN0YW5jZXMiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzZWdtZW50LXdlaWdodHMiLHR5cGU6aC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2VnbWVudC1yYWRpaSIsdHlwZTpoLm51bWJlcnMsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJyYWRpdXMtdHlwZSIsdHlwZTpoLnJhZGl1c1R5cGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4iLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktdHVybi1taW4tZGlzdGFuY2UiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGF4aS1kaXJlY3Rpb24iLHR5cGU6aC5heGlzRGlyZWN0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGF4aS1yYWRpdXMiLHR5cGU6aC5udW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJlZGdlLWRpc3RhbmNlcyIsdHlwZTpoLmVkZ2VEaXN0YW5jZXMsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJhcnJvdy1zY2FsZSIsdHlwZTpoLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibG9vcC1kaXJlY3Rpb24iLHR5cGU6aC5hbmdsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imxvb3Atc3dlZXAiLHR5cGU6aC5hbmdsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxEPVt7bmFtZToiZ2hvc3QiLHR5cGU6aC5ib29sLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZ2hvc3Qtb2Zmc2V0LXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imdob3N0LW9mZnNldC15Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJnaG9zdC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn1dLGs9W3tuYW1lOiJzZWxlY3Rpb24tYm94LWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoIix0eXBlOmguc2l6ZX0se25hbWU6ImFjdGl2ZS1iZy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYWN0aXZlLWJnLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYWN0aXZlLWJnLXNpemUiLHR5cGU6aC5zaXplfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9XSxSPVtdO3ZhLnBpZUJhY2tncm91bmROPTE2LFIucHVzaCh7bmFtZToicGllLXNpemUiLHR5cGU6aC5zaXplTWF5YmVQZXJjZW50fSk7Zm9yKHZhciBTPTE7Uzw9dmEucGllQmFja2dyb3VuZE47UysrKVIucHVzaCh7bmFtZToicGllLSIrUysiLWJhY2tncm91bmQtY29sb3IiLHR5cGU6aC5jb2xvcn0pLFIucHVzaCh7bmFtZToicGllLSIrUysiLWJhY2tncm91bmQtc2l6ZSIsdHlwZTpoLnBlcmNlbnR9KSxSLnB1c2goe25hbWU6InBpZS0iK1MrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSk7dmFyIE89W10sTj12YS5hcnJvd1ByZWZpeGVzPVsic291cmNlIiwibWlkLXNvdXJjZSIsInRhcmdldCIsIm1pZC10YXJnZXQiXTtbe25hbWU6ImFycm93LXNoYXBlIix0eXBlOmguYXJyb3dTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImFycm93LWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJhcnJvdy1maWxsIix0eXBlOmguYXJyb3dGaWxsfSx7bmFtZToiYXJyb3ctd2lkdGgiLHR5cGU6aC5hcnJvd1dpZHRofV0uZm9yRWFjaChmdW5jdGlvbihKKXtOLmZvckVhY2goZnVuY3Rpb24oSCl7dmFyIHE9SCsiLSIrSi5uYW1lLFo9Si50eXBlLGFlPUoudHJpZ2dlcnNCb3VuZHM7Ty5wdXNoKHtuYW1lOnEsdHlwZTpaLHRyaWdnZXJzQm91bmRzOmFlfSl9KX0se30pO3ZhciBQPXZhLnByb3BlcnRpZXM9W10uY29uY2F0KHksdyx2LHgsYixELGcsbSxmLGQscCxULEUsTCxDLFIsQSxJLE8sayksRj12YS5wcm9wZXJ0eUdyb3Vwcz17YmVoYXZpb3I6eSx0cmFuc2l0aW9uOncsdmlzaWJpbGl0eTp2LG92ZXJsYXk6eCx1bmRlcmxheTpiLGdob3N0OkQsY29tbW9uTGFiZWw6ZyxsYWJlbERpbWVuc2lvbnM6bSxtYWluTGFiZWw6Zixzb3VyY2VMYWJlbDpkLHRhcmdldExhYmVsOnAsbm9kZUJvZHk6VCxub2RlQm9yZGVyOkUsbm9kZU91dGxpbmU6TCxiYWNrZ3JvdW5kSW1hZ2U6QyxwaWU6Uixjb21wb3VuZDpBLGVkZ2VMaW5lOkksZWRnZUFycm93Ok8sY29yZTprfSxCPXZhLnByb3BlcnR5R3JvdXBOYW1lcz17fSwkPXZhLnByb3BlcnR5R3JvdXBLZXlzPU9iamVjdC5rZXlzKEYpOyQuZm9yRWFjaChmdW5jdGlvbihKKXtCW0pdPUZbSl0ubWFwKGZ1bmN0aW9uKEgpe3JldHVybiBILm5hbWV9KSxGW0pdLmZvckVhY2goZnVuY3Rpb24oSCl7cmV0dXJuIEguZ3JvdXBLZXk9Sn0pfSk7dmFyIHo9dmEuYWxpYXNlcz1be25hbWU6ImNvbnRlbnQiLHBvaW50c1RvOiJsYWJlbCJ9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlIixwb2ludHNUbzoiY29udHJvbC1wb2ludC1kaXN0YW5jZXMifSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHQiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LXdlaWdodHMifSx7bmFtZToic2VnbWVudC1kaXN0YW5jZSIscG9pbnRzVG86InNlZ21lbnQtZGlzdGFuY2VzIn0se25hbWU6InNlZ21lbnQtd2VpZ2h0Iixwb2ludHNUbzoic2VnbWVudC13ZWlnaHRzIn0se25hbWU6InNlZ21lbnQtcmFkaXVzIixwb2ludHNUbzoic2VnbWVudC1yYWRpaSJ9LHtuYW1lOiJlZGdlLXRleHQtcm90YXRpb24iLHBvaW50c1RvOiJ0ZXh0LXJvdGF0aW9uIn0se25hbWU6InBhZGRpbmctbGVmdCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1yaWdodCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy10b3AiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctYm90dG9tIixwb2ludHNUbzoicGFkZGluZyJ9XTt2YS5wcm9wZXJ0eU5hbWVzPVAubWFwKGZ1bmN0aW9uKEope3JldHVybiBKLm5hbWV9KTtmb3IodmFyIFc9MDtXPFAubGVuZ3RoO1crKyl7dmFyIGo9UFtXXTtQW2oubmFtZV09an1mb3IodmFyIEs9MDtLPHoubGVuZ3RoO0srKyl7dmFyIGllPXpbS10sUT1QW2llLnBvaW50c1RvXSxlZT17bmFtZTppZS5uYW1lLGFsaWFzOiEwLHBvaW50c1RvOlF9O1AucHVzaChlZSksUFtpZS5uYW1lXT1lZX19KSgpO3ZhLmdldERlZmF1bHRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXREZWZhdWx0UHJvcGVydGllcygpW3RdfTt2YS5nZXREZWZhdWx0UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ByaXZhdGU7aWYodC5kZWZhdWx0UHJvcGVydGllcyE9bnVsbClyZXR1cm4gdC5kZWZhdWx0UHJvcGVydGllcztmb3IodmFyIGU9aXIoeyJzZWxlY3Rpb24tYm94LWNvbG9yIjoiI2RkZCIsInNlbGVjdGlvbi1ib3gtb3BhY2l0eSI6LjY1LCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciI6IiNhYWEiLCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCI6MSwiYWN0aXZlLWJnLWNvbG9yIjoiYmxhY2siLCJhY3RpdmUtYmctb3BhY2l0eSI6LjE1LCJhY3RpdmUtYmctc2l6ZSI6MzAsIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciI6IiMwMDAiLCJvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSI6LjEyNSxldmVudHM6InllcyIsInRleHQtZXZlbnRzIjoibm8iLCJ0ZXh0LXZhbGlnbiI6InRvcCIsInRleHQtaGFsaWduIjoiY2VudGVyIiwidGV4dC1qdXN0aWZpY2F0aW9uIjoiYXV0byIsImxpbmUtaGVpZ2h0IjoxLGNvbG9yOiIjMDAwIiwidGV4dC1vdXRsaW5lLWNvbG9yIjoiIzAwMCIsInRleHQtb3V0bGluZS13aWR0aCI6MCwidGV4dC1vdXRsaW5lLW9wYWNpdHkiOjEsInRleHQtb3BhY2l0eSI6MSwidGV4dC1kZWNvcmF0aW9uIjoibm9uZSIsInRleHQtdHJhbnNmb3JtIjoibm9uZSIsInRleHQtd3JhcCI6Im5vbmUiLCJ0ZXh0LW92ZXJmbG93LXdyYXAiOiJ3aGl0ZXNwYWNlIiwidGV4dC1tYXgtd2lkdGgiOjk5OTksInRleHQtYmFja2dyb3VuZC1jb2xvciI6IiMwMDAiLCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSI6MCwidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIjoicmVjdGFuZ2xlIiwidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciOjAsInRleHQtYm9yZGVyLW9wYWNpdHkiOjAsInRleHQtYm9yZGVyLXdpZHRoIjowLCJ0ZXh0LWJvcmRlci1zdHlsZSI6InNvbGlkIiwidGV4dC1ib3JkZXItY29sb3IiOiIjMDAwIiwiZm9udC1mYW1pbHkiOiJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiwiZm9udC1zdHlsZSI6Im5vcm1hbCIsImZvbnQtd2VpZ2h0Ijoibm9ybWFsIiwiZm9udC1zaXplIjoxNiwibWluLXpvb21lZC1mb250LXNpemUiOjAsInRleHQtcm90YXRpb24iOiJub25lIiwic291cmNlLXRleHQtcm90YXRpb24iOiJub25lIiwidGFyZ2V0LXRleHQtcm90YXRpb24iOiJub25lIix2aXNpYmlsaXR5OiJ2aXNpYmxlIixkaXNwbGF5OiJlbGVtZW50IixvcGFjaXR5OjEsInotY29tcG91bmQtZGVwdGgiOiJhdXRvIiwiei1pbmRleC1jb21wYXJlIjoiYXV0byIsInotaW5kZXgiOjAsbGFiZWw6IiIsInRleHQtbWFyZ2luLXgiOjAsInRleHQtbWFyZ2luLXkiOjAsInNvdXJjZS1sYWJlbCI6IiIsInNvdXJjZS10ZXh0LW9mZnNldCI6MCwic291cmNlLXRleHQtbWFyZ2luLXgiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi15IjowLCJ0YXJnZXQtbGFiZWwiOiIiLCJ0YXJnZXQtdGV4dC1vZmZzZXQiOjAsInRhcmdldC10ZXh0LW1hcmdpbi14IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teSI6MCwib3ZlcmxheS1vcGFjaXR5IjowLCJvdmVybGF5LWNvbG9yIjoiIzAwMCIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktc2hhcGUiOiJyb3VuZC1yZWN0YW5nbGUiLCJvdmVybGF5LWNvcm5lci1yYWRpdXMiOiJhdXRvIiwidW5kZXJsYXktb3BhY2l0eSI6MCwidW5kZXJsYXktY29sb3IiOiIjMDAwIiwidW5kZXJsYXktcGFkZGluZyI6MTAsInVuZGVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidW5kZXJsYXktY29ybmVyLXJhZGl1cyI6ImF1dG8iLCJ0cmFuc2l0aW9uLXByb3BlcnR5Ijoibm9uZSIsInRyYW5zaXRpb24tZHVyYXRpb24iOjAsInRyYW5zaXRpb24tZGVsYXkiOjAsInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIjoibGluZWFyIiwiYmFja2dyb3VuZC1ibGFja2VuIjowLCJiYWNrZ3JvdW5kLWNvbG9yIjoiIzk5OSIsImJhY2tncm91bmQtZmlsbCI6InNvbGlkIiwiYmFja2dyb3VuZC1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlIjoibm9uZSIsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iOiJhbm9ueW1vdXMiLCJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiOiJpbnNpZGUiLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyI6InllcyIsImJhY2tncm91bmQtcG9zaXRpb24teCI6IjUwJSIsImJhY2tncm91bmQtcG9zaXRpb24teSI6IjUwJSIsImJhY2tncm91bmQtb2Zmc2V0LXgiOjAsImJhY2tncm91bmQtb2Zmc2V0LXkiOjAsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byI6ImluY2x1ZGUtcGFkZGluZyIsImJhY2tncm91bmQtcmVwZWF0Ijoibm8tcmVwZWF0IiwiYmFja2dyb3VuZC1maXQiOiJub25lIiwiYmFja2dyb3VuZC1jbGlwIjoibm9kZSIsImJhY2tncm91bmQtd2lkdGgiOiJhdXRvIiwiYmFja2dyb3VuZC1oZWlnaHQiOiJhdXRvIiwiYm9yZGVyLWNvbG9yIjoiIzAwMCIsImJvcmRlci1vcGFjaXR5IjoxLCJib3JkZXItd2lkdGgiOjAsImJvcmRlci1zdHlsZSI6InNvbGlkIiwiYm9yZGVyLWRhc2gtcGF0dGVybiI6WzQsMl0sImJvcmRlci1kYXNoLW9mZnNldCI6MCwiYm9yZGVyLWNhcCI6ImJ1dHQiLCJib3JkZXItam9pbiI6Im1pdGVyIiwiYm9yZGVyLXBvc2l0aW9uIjoiY2VudGVyIiwib3V0bGluZS1jb2xvciI6IiM5OTkiLCJvdXRsaW5lLW9wYWNpdHkiOjEsIm91dGxpbmUtd2lkdGgiOjAsIm91dGxpbmUtb2Zmc2V0IjowLCJvdXRsaW5lLXN0eWxlIjoic29saWQiLGhlaWdodDozMCx3aWR0aDozMCxzaGFwZToiZWxsaXBzZSIsInNoYXBlLXBvbHlnb24tcG9pbnRzIjoiLTEsIC0xLCAgIDEsIC0xLCAgIDEsIDEsICAgLTEsIDEiLCJjb3JuZXItcmFkaXVzIjoiYXV0byIsImJvdW5kcy1leHBhbnNpb24iOjAsImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIjoidG8tYm90dG9tIiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyI6IiM5OTkiLCJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIjoiMCUiLGdob3N0OiJubyIsImdob3N0LW9mZnNldC15IjowLCJnaG9zdC1vZmZzZXQteCI6MCwiZ2hvc3Qtb3BhY2l0eSI6MCxwYWRkaW5nOjAsInBhZGRpbmctcmVsYXRpdmUtdG8iOiJ3aWR0aCIscG9zaXRpb246Im9yaWdpbiIsImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIjoiaW5jbHVkZSIsIm1pbi13aWR0aCI6MCwibWluLXdpZHRoLWJpYXMtbGVmdCI6MCwibWluLXdpZHRoLWJpYXMtcmlnaHQiOjAsIm1pbi1oZWlnaHQiOjAsIm1pbi1oZWlnaHQtYmlhcy10b3AiOjAsIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iOjB9LHsicGllLXNpemUiOiIxMDAlIn0sW3tuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1jb2xvciIsdmFsdWU6ImJsYWNrIn0se25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLXNpemUiLHZhbHVlOiIwJSJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1vcGFjaXR5Iix2YWx1ZToxfV0ucmVkdWNlKGZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPTE7Zjw9dmEucGllQmFja2dyb3VuZE47ZisrKXt2YXIgZD1oLm5hbWUucmVwbGFjZSgie3tpfX0iLGYpLHA9aC52YWx1ZTt1W2RdPXB9cmV0dXJuIHV9LHt9KSx7ImxpbmUtc3R5bGUiOiJzb2xpZCIsImxpbmUtY29sb3IiOiIjOTk5IiwibGluZS1maWxsIjoic29saWQiLCJsaW5lLWNhcCI6ImJ1dHQiLCJsaW5lLW9wYWNpdHkiOjEsImxpbmUtb3V0bGluZS13aWR0aCI6MCwibGluZS1vdXRsaW5lLWNvbG9yIjoiIzAwMCIsImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIiwiY29udHJvbC1wb2ludC1zdGVwLXNpemUiOjQwLCJjb250cm9sLXBvaW50LXdlaWdodHMiOi41LCJzZWdtZW50LXdlaWdodHMiOi41LCJzZWdtZW50LWRpc3RhbmNlcyI6MjAsInNlZ21lbnQtcmFkaWkiOjE1LCJyYWRpdXMtdHlwZSI6ImFyYy1yYWRpdXMiLCJ0YXhpLXR1cm4iOiI1MCUiLCJ0YXhpLXJhZGl1cyI6MTUsInRheGktdHVybi1taW4tZGlzdGFuY2UiOjEwLCJ0YXhpLWRpcmVjdGlvbiI6ImF1dG8iLCJlZGdlLWRpc3RhbmNlcyI6ImludGVyc2VjdGlvbiIsImN1cnZlLXN0eWxlIjoiaGF5c3RhY2siLCJoYXlzdGFjay1yYWRpdXMiOjAsImFycm93LXNjYWxlIjoxLCJsb29wLWRpcmVjdGlvbiI6Ii00NWRlZyIsImxvb3Atc3dlZXAiOiItOTBkZWciLCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJsaW5lLWRhc2gtcGF0dGVybiI6WzYsM10sImxpbmUtZGFzaC1vZmZzZXQiOjB9LFt7bmFtZToiYXJyb3ctc2hhcGUiLHZhbHVlOiJub25lIn0se25hbWU6ImFycm93LWNvbG9yIix2YWx1ZToiIzk5OSJ9LHtuYW1lOiJhcnJvdy1maWxsIix2YWx1ZToiZmlsbGVkIn0se25hbWU6ImFycm93LXdpZHRoIix2YWx1ZToxfV0ucmVkdWNlKGZ1bmN0aW9uKHUsaCl7cmV0dXJuIHZhLmFycm93UHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgZD1mKyItIitoLm5hbWUscD1oLnZhbHVlO3VbZF09cH0pLHV9LHt9KSkscj17fSxuPTA7bjx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5wcm9wZXJ0aWVzW25dO2lmKCFpLnBvaW50c1RvKXt2YXIgYT1pLm5hbWUscz1lW2FdLGw9dGhpcy5wYXJzZShhLHMpO3JbYV09bH19cmV0dXJuIHQuZGVmYXVsdFByb3BlcnRpZXM9cix0LmRlZmF1bHRQcm9wZXJ0aWVzfTt2YS5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt6Nj17fTt6Ni5wYXJzZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2lmKHRpKGUpKXJldHVybiBpLnBhcnNlSW1wbFdhcm4odCxlLHIsbik7dmFyIGE9bj09PSJtYXBwaW5nInx8bj09PSEwfHxuPT09ITF8fG49PW51bGw/ImRvbnRjYXJlIjpuLHM9cj8idCI6ImYiLGw9IiIrZSx1PWFnZSh0LGwscyxhKSxoPWkucHJvcENhY2hlPWkucHJvcENhY2hlfHxbXSxmO3JldHVybihmPWhbdV0pfHwoZj1oW3VdPWkucGFyc2VJbXBsV2Fybih0LGUscixuKSksKHJ8fG49PT0ibWFwcGluZyIpJiYoZj1WYyhmKSxmJiYoZi52YWx1ZT1WYyhmLnZhbHVlKSkpLGZ9O3o2LnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5wYXJzZUltcGwodCxlLHIsbik7cmV0dXJuIWkmJmUhPW51bGwmJm9uKCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHQsIjogIikuY29uY2F0KGUsImAgaXMgaW52YWxpZCIpKSxpJiYoaS5uYW1lPT09IndpZHRoInx8aS5uYW1lPT09ImhlaWdodCIpJiZlPT09ImxhYmVsIiYmb24oIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK2kubmFtZSsiYCIpLGl9O3o2LnBhcnNlSW1wbD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO3Q9ckIodCk7dmFyIGE9aS5wcm9wZXJ0aWVzW3RdLHM9ZSxsPWkudHlwZXM7aWYoIWF8fGU9PT12b2lkIDApcmV0dXJuIG51bGw7YS5hbGlhcyYmKGE9YS5wb2ludHNUbyx0PWEubmFtZSk7dmFyIHU9WnQoZSk7dSYmKGU9ZS50cmltKCkpO3ZhciBoPWEudHlwZTtpZighaClyZXR1cm4gbnVsbDtpZihyJiYoZT09PSIifHxlPT09bnVsbCkpcmV0dXJue25hbWU6dCx2YWx1ZTplLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKHRpKGUpKXJldHVybntuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiZm4iLG1hcHBlZDpsLmZuLGJ5cGFzczpyfTt2YXIgZixkO2lmKCEoIXV8fG58fGUubGVuZ3RoPDd8fGVbMV0hPT0iYSIpKXtpZihlLmxlbmd0aD49NyYmZVswXT09PSJkIiYmKGY9bmV3IFJlZ0V4cChsLmRhdGEucmVnZXgpLmV4ZWMoZSkpKXtpZihyKXJldHVybiExO3ZhciBwPWwuZGF0YTtyZXR1cm57bmFtZTp0LHZhbHVlOmYsc3RyVmFsdWU6IiIrZSxtYXBwZWQ6cCxmaWVsZDpmWzFdLGJ5cGFzczpyfX1lbHNlIGlmKGUubGVuZ3RoPj0xMCYmZVswXT09PSJtIiYmKGQ9bmV3IFJlZ0V4cChsLm1hcERhdGEucmVnZXgpLmV4ZWMoZSkpKXtpZihyfHxoLm11bHRpcGxlKXJldHVybiExO3ZhciBtPWwubWFwRGF0YTtpZighKGguY29sb3J8fGgubnVtYmVyKSlyZXR1cm4hMTt2YXIgZz10aGlzLnBhcnNlKHQsZFs0XSk7aWYoIWd8fGcubWFwcGVkKXJldHVybiExO3ZhciB5PXRoaXMucGFyc2UodCxkWzVdKTtpZigheXx8eS5tYXBwZWQpcmV0dXJuITE7aWYoZy5wZlZhbHVlPT09eS5wZlZhbHVlfHxnLnN0clZhbHVlPT09eS5zdHJWYWx1ZSlyZXR1cm4gb24oImAiK3QrIjogIitlKyJgIGlzIG5vdCBhIHZhbGlkIG1hcHBlciBiZWNhdXNlIHRoZSBvdXRwdXQgcmFuZ2UgaXMgemVybzsgY29udmVydGluZyB0byBgIit0KyI6ICIrZy5zdHJWYWx1ZSsiYCIpLHRoaXMucGFyc2UodCxnLnN0clZhbHVlKTtpZihoLmNvbG9yKXt2YXIgdj1nLnZhbHVlLHg9eS52YWx1ZSxiPXZbMF09PT14WzBdJiZ2WzFdPT09eFsxXSYmdlsyXT09PXhbMl0mJih2WzNdPT09eFszXXx8KHZbM109PW51bGx8fHZbM109PT0xKSYmKHhbM109PW51bGx8fHhbM109PT0xKSk7aWYoYilyZXR1cm4hMX1yZXR1cm57bmFtZTp0LHZhbHVlOmQsc3RyVmFsdWU6IiIrZSxtYXBwZWQ6bSxmaWVsZDpkWzFdLGZpZWxkTWluOnBhcnNlRmxvYXQoZFsyXSksZmllbGRNYXg6cGFyc2VGbG9hdChkWzNdKSx2YWx1ZU1pbjpnLnZhbHVlLHZhbHVlTWF4OnkudmFsdWUsYnlwYXNzOnJ9fX1pZihoLm11bHRpcGxlJiZuIT09Im11bHRpcGxlIil7dmFyIHc7aWYodT93PWUuc3BsaXQoL1xzKy8pOnduKGUpP3c9ZTp3PVtlXSxoLmV2ZW5NdWx0aXBsZSYmdy5sZW5ndGglMiE9PTApcmV0dXJuIG51bGw7Zm9yKHZhciBfPVtdLFQ9W10sRT1bXSxMPSIiLEM9ITEsQT0wO0E8dy5sZW5ndGg7QSsrKXt2YXIgST1pLnBhcnNlKHQsd1tBXSxyLCJtdWx0aXBsZSIpO0M9Q3x8WnQoSS52YWx1ZSksXy5wdXNoKEkudmFsdWUpLEUucHVzaChJLnBmVmFsdWUhPW51bGw/SS5wZlZhbHVlOkkudmFsdWUpLFQucHVzaChJLnVuaXRzKSxMKz0oQT4wPyIgIjoiIikrSS5zdHJWYWx1ZX1yZXR1cm4gaC52YWxpZGF0ZSYmIWgudmFsaWRhdGUoXyxUKT9udWxsOmguc2luZ2xlRW51bSYmQz9fLmxlbmd0aD09PTEmJlp0KF9bMF0pP3tuYW1lOnQsdmFsdWU6X1swXSxzdHJWYWx1ZTpfWzBdLGJ5cGFzczpyfTpudWxsOntuYW1lOnQsdmFsdWU6XyxwZlZhbHVlOkUsc3RyVmFsdWU6TCxieXBhc3M6cix1bml0czpUfX12YXIgRD1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBIPTA7SDxoLmVudW1zLmxlbmd0aDtIKyspe3ZhciBxPWguZW51bXNbSF07aWYocT09PWUpcmV0dXJue25hbWU6dCx2YWx1ZTplLHN0clZhbHVlOiIiK2UsYnlwYXNzOnJ9fXJldHVybiBudWxsfSwiY2hlY2tFbnVtcyIpO2lmKGgubnVtYmVyKXt2YXIgayxSPSJweCI7aWYoaC51bml0cyYmKGs9aC51bml0cyksaC5pbXBsaWNpdFVuaXRzJiYoUj1oLmltcGxpY2l0VW5pdHMpLCFoLnVuaXRsZXNzKWlmKHUpe3ZhciBTPSJweHxlbSIrKGguYWxsb3dQZXJjZW50PyJ8XFwlIjoiIik7ayYmKFM9ayk7dmFyIE89ZS5tYXRjaCgiXigiK1dpKyIpKCIrUysiKT8kIik7TyYmKGU9T1sxXSxrPU9bMl18fFIpfWVsc2UoIWt8fGguaW1wbGljaXRVbml0cykmJihrPVIpO2lmKGU9cGFyc2VGbG9hdChlKSxpc05hTihlKSYmaC5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihlKSYmaC5lbnVtcyE9PXZvaWQgMClyZXR1cm4gZT1zLEQoKTtpZihoLmludGVnZXImJiFqcWUoZSl8fGgubWluIT09dm9pZCAwJiYoZTxoLm1pbnx8aC5zdHJpY3RNaW4mJmU9PT1oLm1pbil8fGgubWF4IT09dm9pZCAwJiYoZT5oLm1heHx8aC5zdHJpY3RNYXgmJmU9PT1oLm1heCkpcmV0dXJuIG51bGw7dmFyIE49e25hbWU6dCx2YWx1ZTplLHN0clZhbHVlOiIiK2UrKGt8fCIiKSx1bml0czprLGJ5cGFzczpyfTtyZXR1cm4gaC51bml0bGVzc3x8ayE9PSJweCImJmshPT0iZW0iP04ucGZWYWx1ZT1lOk4ucGZWYWx1ZT1rPT09InB4Inx8IWs/ZTp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqZSwoaz09PSJtcyJ8fGs9PT0icyIpJiYoTi5wZlZhbHVlPWs9PT0ibXMiP2U6MWUzKmUpLChrPT09ImRlZyJ8fGs9PT0icmFkIikmJihOLnBmVmFsdWU9az09PSJyYWQiP2U6TGplKGUpKSxrPT09IiUiJiYoTi5wZlZhbHVlPWUvMTAwKSxOfWVsc2UgaWYoaC5wcm9wTGlzdCl7dmFyIFA9W10sRj0iIitlO2lmKEYhPT0ibm9uZSIpe2Zvcih2YXIgQj1GLnNwbGl0KC9ccyosXHMqfFxzKy8pLCQ9MDskPEIubGVuZ3RoOyQrKyl7dmFyIHo9QlskXS50cmltKCk7aS5wcm9wZXJ0aWVzW3pdP1AucHVzaCh6KTpvbigiYCIreisiYCBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBuYW1lIil9aWYoUC5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOnQsdmFsdWU6UCxzdHJWYWx1ZTpQLmxlbmd0aD09PTA/Im5vbmUiOlAuam9pbigiICIpLGJ5cGFzczpyfX1lbHNlIGlmKGguY29sb3Ipe3ZhciBXPWZYZShlKTtyZXR1cm4gVz97bmFtZTp0LHZhbHVlOlcscGZWYWx1ZTpXLHN0clZhbHVlOiJyZ2IoIitXWzBdKyIsIitXWzFdKyIsIitXWzJdKyIpIixieXBhc3M6cn06bnVsbH1lbHNlIGlmKGgucmVnZXh8fGgucmVnZXhlcyl7aWYoaC5lbnVtcyl7dmFyIGo9RCgpO2lmKGopcmV0dXJuIGp9Zm9yKHZhciBLPWgucmVnZXhlcz9oLnJlZ2V4ZXM6W2gucmVnZXhdLGllPTA7aWU8Sy5sZW5ndGg7aWUrKyl7dmFyIFE9bmV3IFJlZ0V4cChLW2llXSksZWU9US5leGVjKGUpO2lmKGVlKXJldHVybntuYW1lOnQsdmFsdWU6aC5zaW5nbGVSZWdleE1hdGNoVmFsdWU/ZWVbMV06ZWUsc3RyVmFsdWU6IiIrZSxieXBhc3M6cn19cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gaC5zdHJpbmc/e25hbWU6dCx2YWx1ZToiIitlLHN0clZhbHVlOiIiK2UsYnlwYXNzOnJ9OmguZW51bXM/RCgpOm51bGx9O1BhPW8oZnVuY3Rpb24gdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSk7aWYoIXRCKGUpKXtoaSgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTplLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LCJTdHlsZSIpLEZhPVBhLnByb3RvdHlwZTtGYS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9O0ZhLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ByaXZhdGUsZT10LmN5LHI9ZS5lbGVtZW50cygpLG49MDtuPHRoaXMubGVuZ3RoO24rKyl0aGlzW25dPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx0LmNvbnRleHRTdHlsZXM9e30sdC5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKHIsITApLHIuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgYT1pWzBdLl9wcml2YXRlO2Euc3R5bGVEaXJ0eT0hMCxhLmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfTtGYS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9O0ZhLmNvcmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3RdfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh0KX07RmEuc2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dD09PSJjb3JlIj9udWxsOm5ldyBBZih0KSxyPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbcl09e3NlbGVjdG9yOmUscHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4OnJ9LHRoaXN9O0ZhLmNzcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHM7aWYoZS5sZW5ndGg9PT0xKWZvcih2YXIgcj1lWzBdLG49MDtuPHQucHJvcGVydGllcy5sZW5ndGg7bisrKXt2YXIgaT10LnByb3BlcnRpZXNbbl0sYT1yW2kubmFtZV07YT09PXZvaWQgMCYmKGE9cltTNihpLm5hbWUpXSksYSE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKGkubmFtZSxhKX1lbHNlIGUubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKGVbMF0sZVsxXSk7cmV0dXJuIHRoaXN9O0ZhLnN0eWxlPUZhLmNzcztGYS5jc3NSdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wYXJzZSh0LGUpO2lmKHIpe3ZhciBuPXRoaXMubGVuZ3RoLTE7dGhpc1tuXS5wcm9wZXJ0aWVzLnB1c2gociksdGhpc1tuXS5wcm9wZXJ0aWVzW3IubmFtZV09cixyLm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmci52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSxyLm1hcHBlZCYmdGhpc1tuXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2gocik7dmFyIGk9IXRoaXNbbl0uc2VsZWN0b3I7aSYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3IubmFtZV09cil9cmV0dXJuIHRoaXN9O0ZhLmFwcGVuZD1mdW5jdGlvbih0KXtyZXR1cm4gam1lKHQpP3QuYXBwZW5kVG9TdHlsZSh0aGlzKTp3bih0KT90aGlzLmFwcGVuZEZyb21Kc29uKHQpOlp0KHQpJiZ0aGlzLmFwcGVuZEZyb21TdHJpbmcodCksdGhpc307UGEuZnJvbUpzb249ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgUGEodCk7cmV0dXJuIHIuZnJvbUpzb24oZSkscn07UGEuZnJvbVN0cmluZz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUGEodCkuZnJvbVN0cmluZyhlKX07W3phLG5iLGdCLEhjLEY2LHlCLHZhLHo2XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKEZhLHQpfSk7UGEudHlwZXM9RmEudHlwZXM7UGEucHJvcGVydGllcz1GYS5wcm9wZXJ0aWVzO1BhLnByb3BlcnR5R3JvdXBzPUZhLnByb3BlcnR5R3JvdXBzO1BhLnByb3BlcnR5R3JvdXBOYW1lcz1GYS5wcm9wZXJ0eUdyb3VwTmFtZXM7UGEucHJvcGVydHlHcm91cEtleXM9RmEucHJvcGVydHlHcm91cEtleXM7akplPXtzdHlsZTpvKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPXRoaXMuc2V0U3R5bGUoZSk7ci51cGRhdGUoKX1yZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZX0sInN0eWxlIiksc2V0U3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO3JldHVybiBqbWUoZSk/ci5zdHlsZT1lLmdlbmVyYXRlU3R5bGUodGhpcyk6d24oZSk/ci5zdHlsZT1QYS5mcm9tSnNvbih0aGlzLGUpOlp0KGUpP3Iuc3R5bGU9UGEuZnJvbVN0cmluZyh0aGlzLGUpOnIuc3R5bGU9UGEodGhpcyksci5zdHlsZX0sInNldFN0eWxlIiksdXBkYXRlU3R5bGU6byhmdW5jdGlvbigpe3RoaXMubXV0YWJsZUVsZW1lbnRzKCkudXBkYXRlU3R5bGUoKX0sInVwZGF0ZVN0eWxlIil9LEtKZT0ic2luZ2xlIixVMD17YXV0b2xvY2s6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b2xvY2s9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b2xvY2s7cmV0dXJuIHRoaXN9LCJhdXRvbG9jayIpLGF1dG91bmdyYWJpZnk6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeT0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5O3JldHVybiB0aGlzfSwiYXV0b3VuZ3JhYmlmeSIpLGF1dG91bnNlbGVjdGlmeTpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5zZWxlY3RpZnk9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5O3JldHVybiB0aGlzfSwiYXV0b3Vuc2VsZWN0aWZ5Iiksc2VsZWN0aW9uVHlwZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGU7aWYoci5zZWxlY3Rpb25UeXBlPT1udWxsJiYoci5zZWxlY3Rpb25UeXBlPUtKZSksZSE9PXZvaWQgMCkoZT09PSJhZGRpdGl2ZSJ8fGU9PT0ic2luZ2xlIikmJihyLnNlbGVjdGlvblR5cGU9ZSk7ZWxzZSByZXR1cm4gci5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSwic2VsZWN0aW9uVHlwZSIpLHBhbm5pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkO3JldHVybiB0aGlzfSwicGFubmluZ0VuYWJsZWQiKSx1c2VyUGFubmluZ0VuYWJsZWQ6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInVzZXJQYW5uaW5nRW5hYmxlZCIpLHpvb21pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSwiem9vbWluZ0VuYWJsZWQiKSx1c2VyWm9vbWluZ0VuYWJsZWQ6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclpvb21pbmdFbmFibGVkPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInVzZXJab29taW5nRW5hYmxlZCIpLGJveFNlbGVjdGlvbkVuYWJsZWQ6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5ib3hTZWxlY3Rpb25FbmFibGVkO3JldHVybiB0aGlzfSwiYm94U2VsZWN0aW9uRW5hYmxlZCIpLHBhbjpvKGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9dGhpcy5fcHJpdmF0ZS5wYW4sbixpLGEscyxsO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiByO2Nhc2UgMTppZihadChlWzBdKSlyZXR1cm4gbj1lWzBdLHJbbl07aWYoVnIoZVswXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO2E9ZVswXSxzPWEueCxsPWEueSx4dChzKSYmKHIueD1zKSx4dChsKSYmKHIueT1sKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpfWJyZWFrO2Nhc2UgMjppZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpcztuPWVbMF0saT1lWzFdLChuPT09IngifHxuPT09InkiKSYmeHQoaSkmJihyW25dPWkpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LCJwYW4iKSxwYW5CeTpvKGZ1bmN0aW9uKGUscil7dmFyIG49YXJndW1lbnRzLGk9dGhpcy5fcHJpdmF0ZS5wYW4sYSxzLGwsdSxoO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOlZyKGUpJiYobD1uWzBdLHU9bC54LGg9bC55LHh0KHUpJiYoaS54Kz11KSx4dChoKSYmKGkueSs9aCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKSk7YnJlYWs7Y2FzZSAyOmE9ZSxzPXIsKGE9PT0ieCJ8fGE9PT0ieSIpJiZ4dChzKSYmKGlbYV0rPXMpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LCJwYW5CeSIpLGZpdDpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5nZXRGaXRWaWV3cG9ydChlLHIpO2lmKG4pe3ZhciBpPXRoaXMuX3ByaXZhdGU7aS56b29tPW4uem9vbSxpLnBhbj1uLnBhbix0aGlzLmVtaXQoInBhbiB6b29tIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0Iil9cmV0dXJuIHRoaXN9LCJmaXQiKSxnZXRGaXRWaWV3cG9ydDpvKGZ1bmN0aW9uKGUscil7aWYoeHQoZSkmJnI9PT12b2lkIDAmJihyPWUsZT12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIG47aWYoWnQoZSkpe3ZhciBpPWU7ZT10aGlzLiQoaSl9ZWxzZSBpZihacWUoZSkpe3ZhciBhPWU7bj17eDE6YS54MSx5MTphLnkxLHgyOmEueDIseTI6YS55Mn0sbi53PW4ueDItbi54MSxuLmg9bi55Mi1uLnkxfWVsc2UgcG8oZSl8fChlPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKCEocG8oZSkmJmUuZW1wdHkoKSkpe249bnx8ZS5ib3VuZGluZ0JveCgpO3ZhciBzPXRoaXMud2lkdGgoKSxsPXRoaXMuaGVpZ2h0KCksdTtpZihyPXh0KHIpP3I6MCwhaXNOYU4ocykmJiFpc05hTihsKSYmcz4wJiZsPjAmJiFpc05hTihuLncpJiYhaXNOYU4obi5oKSYmbi53PjAmJm4uaD4wKXt1PU1hdGgubWluKChzLTIqcikvbi53LChsLTIqcikvbi5oKSx1PXU+dGhpcy5fcHJpdmF0ZS5tYXhab29tP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTp1LHU9dTx0aGlzLl9wcml2YXRlLm1pblpvb20/dGhpcy5fcHJpdmF0ZS5taW5ab29tOnU7dmFyIGg9e3g6KHMtdSoobi54MStuLngyKSkvMix5OihsLXUqKG4ueTErbi55MikpLzJ9O3JldHVybnt6b29tOnUscGFuOmh9fX19fSwiZ2V0Rml0Vmlld3BvcnQiKSx6b29tUmFuZ2U6byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuX3ByaXZhdGU7aWYocj09bnVsbCl7dmFyIGk9ZTtlPWkubWluLHI9aS5tYXh9cmV0dXJuIHh0KGUpJiZ4dChyKSYmZTw9cj8obi5taW5ab29tPWUsbi5tYXhab29tPXIpOnh0KGUpJiZyPT09dm9pZCAwJiZlPD1uLm1heFpvb20/bi5taW5ab29tPWU6eHQocikmJmU9PT12b2lkIDAmJnI+PW4ubWluWm9vbSYmKG4ubWF4Wm9vbT1yKSx0aGlzfSwiem9vbVJhbmdlIiksbWluWm9vbTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWluWm9vbTp0aGlzLnpvb21SYW5nZSh7bWluOmV9KX0sIm1pblpvb20iKSxtYXhab29tOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6ZX0pfSwibWF4Wm9vbSIpLGdldFpvb21lZFZpZXdwb3J0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGFuLGk9ci56b29tLGEscyxsPSExO2lmKHIuem9vbWluZ0VuYWJsZWR8fChsPSEwKSx4dChlKT9zPWU6VnIoZSkmJihzPWUubGV2ZWwsZS5wb3NpdGlvbiE9bnVsbD9hPUw2KGUucG9zaXRpb24saSxuKTplLnJlbmRlcmVkUG9zaXRpb24hPW51bGwmJihhPWUucmVuZGVyZWRQb3NpdGlvbiksYSE9bnVsbCYmIXIucGFubmluZ0VuYWJsZWQmJihsPSEwKSkscz1zPnIubWF4Wm9vbT9yLm1heFpvb206cyxzPXM8ci5taW5ab29tP3IubWluWm9vbTpzLGx8fCF4dChzKXx8cz09PWl8fGEhPW51bGwmJigheHQoYS54KXx8IXh0KGEueSkpKXJldHVybiBudWxsO2lmKGEhPW51bGwpe3ZhciB1PW4saD1pLGY9cyxkPXt4Oi1mL2gqKGEueC11LngpK2EueCx5Oi1mL2gqKGEueS11LnkpK2EueX07cmV0dXJue3pvb21lZDohMCxwYW5uZWQ6ITAsem9vbTpmLHBhbjpkfX1lbHNlIHJldHVybnt6b29tZWQ6ITAscGFubmVkOiExLHpvb206cyxwYW46bn19LCJnZXRab29tZWRWaWV3cG9ydCIpLHpvb206byhmdW5jdGlvbihlKXtpZihlPT09dm9pZCAwKXJldHVybiB0aGlzLl9wcml2YXRlLnpvb207dmFyIHI9dGhpcy5nZXRab29tZWRWaWV3cG9ydChlKSxuPXRoaXMuX3ByaXZhdGU7cmV0dXJuIHI9PW51bGx8fCFyLnpvb21lZD90aGlzOihuLnpvb209ci56b29tLHIucGFubmVkJiYobi5wYW4ueD1yLnBhbi54LG4ucGFuLnk9ci5wYW4ueSksdGhpcy5lbWl0KCJ6b29tIisoci5wYW5uZWQ/IiBwYW4iOiIiKSsiIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0IiksdGhpcyl9LCJ6b29tIiksdmlld3BvcnQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG49ITAsaT0hMCxhPVtdLHM9ITEsbD0hMTtpZighZSlyZXR1cm4gdGhpcztpZih4dChlLnpvb20pfHwobj0hMSksVnIoZS5wYW4pfHwoaT0hMSksIW4mJiFpKXJldHVybiB0aGlzO2lmKG4pe3ZhciB1PWUuem9vbTt1PHIubWluWm9vbXx8dT5yLm1heFpvb218fCFyLnpvb21pbmdFbmFibGVkP3M9ITA6KHIuem9vbT11LGEucHVzaCgiem9vbSIpKX1pZihpJiYoIXN8fCFlLmNhbmNlbE9uRmFpbGVkWm9vbSkmJnIucGFubmluZ0VuYWJsZWQpe3ZhciBoPWUucGFuO3h0KGgueCkmJihyLnBhbi54PWgueCxsPSExKSx4dChoLnkpJiYoci5wYW4ueT1oLnksbD0hMSksbHx8YS5wdXNoKCJwYW4iKX1yZXR1cm4gYS5sZW5ndGg+MCYmKGEucHVzaCgidmlld3BvcnQiKSx0aGlzLmVtaXQoYS5qb2luKCIgIikpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSwidmlld3BvcnQiKSxjZW50ZXI6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldENlbnRlclBhbihlKTtyZXR1cm4gciYmKHRoaXMuX3ByaXZhdGUucGFuPXIsdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sImNlbnRlciIpLGdldENlbnRlclBhbjpvKGZ1bmN0aW9uKGUscil7aWYodGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCl7aWYoWnQoZSkpe3ZhciBuPWU7ZT10aGlzLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihuKX1lbHNlIHBvKGUpfHwoZT10aGlzLm11dGFibGVFbGVtZW50cygpKTtpZihlLmxlbmd0aCE9PTApe3ZhciBpPWUuYm91bmRpbmdCb3goKSxhPXRoaXMud2lkdGgoKSxzPXRoaXMuaGVpZ2h0KCk7cj1yPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUuem9vbTpyO3ZhciBsPXt4OihhLXIqKGkueDEraS54MikpLzIseToocy1yKihpLnkxK2kueTIpKS8yfTtyZXR1cm4gbH19fSwiZ2V0Q2VudGVyUGFuIikscmVzZXQ6byhmdW5jdGlvbigpe3JldHVybiF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkfHwhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD90aGlzOih0aGlzLnZpZXdwb3J0KHtwYW46e3g6MCx5OjB9LHpvb206MX0pLHRoaXMpfSwicmVzZXQiKSxpbnZhbGlkYXRlU2l6ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sImludmFsaWRhdGVTaXplIiksc2l6ZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZSxyPWUuY29udGFpbmVyLG49dGhpcztyZXR1cm4gZS5zaXplQ2FjaGU9ZS5zaXplQ2FjaGV8fChyP2Z1bmN0aW9uKCl7dmFyIGk9bi53aW5kb3coKS5nZXRDb21wdXRlZFN0eWxlKHIpLGE9byhmdW5jdGlvbihsKXtyZXR1cm4gcGFyc2VGbG9hdChpLmdldFByb3BlcnR5VmFsdWUobCkpfSwidmFsIik7cmV0dXJue3dpZHRoOnIuY2xpZW50V2lkdGgtYSgicGFkZGluZy1sZWZ0IiktYSgicGFkZGluZy1yaWdodCIpLGhlaWdodDpyLmNsaWVudEhlaWdodC1hKCJwYWRkaW5nLXRvcCIpLWEoInBhZGRpbmctYm90dG9tIil9fSgpOnt3aWR0aDoxLGhlaWdodDoxfSl9LCJzaXplIiksd2lkdGg6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS53aWR0aH0sIndpZHRoIiksaGVpZ2h0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkuaGVpZ2h0fSwiaGVpZ2h0IiksZXh0ZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLnBhbixyPXRoaXMuX3ByaXZhdGUuem9vbSxuPXRoaXMucmVuZGVyZWRFeHRlbnQoKSxpPXt4MToobi54MS1lLngpL3IseDI6KG4ueDItZS54KS9yLHkxOihuLnkxLWUueSkvcix5Mjoobi55Mi1lLnkpL3J9O3JldHVybiBpLnc9aS54Mi1pLngxLGkuaD1pLnkyLWkueTEsaX0sImV4dGVudCIpLHJlbmRlcmVkRXh0ZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpZHRoKCkscj10aGlzLmhlaWdodCgpO3JldHVybnt4MTowLHkxOjAseDI6ZSx5MjpyLHc6ZSxoOnJ9fSwicmVuZGVyZWRFeHRlbnQiKSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOm8oZnVuY3Rpb24oZSl7aWYoZSl0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9ZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU7cmV0dXJuIHRoaXN9LCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIil9O1UwLmNlbnRyZT1VMC5jZW50ZXI7VTAuYXV0b2xvY2tOb2Rlcz1VMC5hdXRvbG9jaztVMC5hdXRvdW5ncmFiaWZ5Tm9kZXM9VTAuYXV0b3VuZ3JhYmlmeTtLeD17ZGF0YTpzbi5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpzbi5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6c24uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KX07S3guYXR0cj1LeC5kYXRhO0t4LnJlbW92ZUF0dHI9S3gucmVtb3ZlRGF0YTtReD1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ZT1pcih7fSxlKTt2YXIgbj1lLmNvbnRhaW5lcjtuJiYhcDYobikmJnA2KG5bMF0pJiYobj1uWzBdKTt2YXIgaT1uP24uX2N5cmVnOm51bGw7aT1pfHx7fSxpJiZpLmN5JiYoaS5jeS5kZXN0cm95KCksaT17fSk7dmFyIGE9aS5yZWFkaWVzPWkucmVhZGllc3x8W107biYmKG4uX2N5cmVnPWkpLGkuY3k9cjt2YXIgcz1IaSE9PXZvaWQgMCYmbiE9PXZvaWQgMCYmIWUuaGVhZGxlc3MsbD1lO2wubGF5b3V0PWlyKHtuYW1lOnM/ImdyaWQiOiJudWxsIn0sbC5sYXlvdXQpLGwucmVuZGVyZXI9aXIoe25hbWU6cz8iY2FudmFzIjoibnVsbCJ9LGwucmVuZGVyZXIpO3ZhciB1PW8oZnVuY3Rpb24oZyx5LHYpe3JldHVybiB5IT09dm9pZCAwP3k6diE9PXZvaWQgMD92Omd9LCJkZWZWYWwiKSxoPXRoaXMuX3ByaXZhdGU9e2NvbnRhaW5lcjpuLHJlYWR5OiExLG9wdGlvbnM6bCxlbGVtZW50czpuZXcgYmEodGhpcyksbGlzdGVuZXJzOltdLGFuaUVsZXM6bmV3IGJhKHRoaXMpLGRhdGE6bC5kYXRhfHx7fSxzY3JhdGNoOnt9LGxheW91dDpudWxsLHJlbmRlcmVyOm51bGwsZGVzdHJveWVkOiExLG5vdGlmaWNhdGlvbnNFbmFibGVkOiEwLG1pblpvb206MWUtNTAsbWF4Wm9vbToxZTUwLHpvb21pbmdFbmFibGVkOnUoITAsbC56b29taW5nRW5hYmxlZCksdXNlclpvb21pbmdFbmFibGVkOnUoITAsbC51c2VyWm9vbWluZ0VuYWJsZWQpLHBhbm5pbmdFbmFibGVkOnUoITAsbC5wYW5uaW5nRW5hYmxlZCksdXNlclBhbm5pbmdFbmFibGVkOnUoITAsbC51c2VyUGFubmluZ0VuYWJsZWQpLGJveFNlbGVjdGlvbkVuYWJsZWQ6dSghMCxsLmJveFNlbGVjdGlvbkVuYWJsZWQpLGF1dG9sb2NrOnUoITEsbC5hdXRvbG9jayxsLmF1dG9sb2NrTm9kZXMpLGF1dG91bmdyYWJpZnk6dSghMSxsLmF1dG91bmdyYWJpZnksbC5hdXRvdW5ncmFiaWZ5Tm9kZXMpLGF1dG91bnNlbGVjdGlmeTp1KCExLGwuYXV0b3Vuc2VsZWN0aWZ5KSxzdHlsZUVuYWJsZWQ6bC5zdHlsZUVuYWJsZWQ9PT12b2lkIDA/czpsLnN0eWxlRW5hYmxlZCx6b29tOnh0KGwuem9vbSk/bC56b29tOjEscGFuOnt4OlZyKGwucGFuKSYmeHQobC5wYW4ueCk/bC5wYW4ueDowLHk6VnIobC5wYW4pJiZ4dChsLnBhbi55KT9sLnBhbi55OjB9LGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0saGFzQ29tcG91bmROb2RlczohMSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOnUoMjUwLGwubXVsdGlDbGlja0RlYm91bmNlVGltZSl9O3RoaXMuY3JlYXRlRW1pdHRlcigpLHRoaXMuc2VsZWN0aW9uVHlwZShsLnNlbGVjdGlvblR5cGUpLHRoaXMuem9vbVJhbmdlKHttaW46bC5taW5ab29tLG1heDpsLm1heFpvb219KTt2YXIgZj1vKGZ1bmN0aW9uKGcseSl7dmFyIHY9Zy5zb21lKEpxZSk7aWYodilyZXR1cm4gZDEuYWxsKGcpLnRoZW4oeSk7eShnKX0sImxvYWRFeHREYXRhIik7aC5zdHlsZUVuYWJsZWQmJnIuc2V0U3R5bGUoW10pO3ZhciBkPWlyKHt9LGwsbC5yZW5kZXJlcik7ci5pbml0UmVuZGVyZXIoZCk7dmFyIHA9byhmdW5jdGlvbihnLHksdil7ci5ub3RpZmljYXRpb25zKCExKTt2YXIgeD1yLm11dGFibGVFbGVtZW50cygpO3gubGVuZ3RoPjAmJngucmVtb3ZlKCksZyE9bnVsbCYmKFZyKGcpfHx3bihnKSkmJnIuYWRkKGcpLHIub25lKCJsYXlvdXRyZWFkeSIsZnVuY3Rpb24odyl7ci5ub3RpZmljYXRpb25zKCEwKSxyLmVtaXQodyksci5vbmUoImxvYWQiLHkpLHIuZW1pdEFuZE5vdGlmeSgibG9hZCIpfSkub25lKCJsYXlvdXRzdG9wIixmdW5jdGlvbigpe3Iub25lKCJkb25lIix2KSxyLmVtaXQoImRvbmUiKX0pO3ZhciBiPWlyKHt9LHIuX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO2IuZWxlcz1yLmVsZW1lbnRzKCksci5sYXlvdXQoYikucnVuKCl9LCJzZXRFbGVzQW5kTGF5b3V0Iik7ZihbbC5zdHlsZSxsLmVsZW1lbnRzXSxmdW5jdGlvbihtKXt2YXIgZz1tWzBdLHk9bVsxXTtoLnN0eWxlRW5hYmxlZCYmci5zdHlsZSgpLmFwcGVuZChnKSxwKHksZnVuY3Rpb24oKXtyLnN0YXJ0QW5pbWF0aW9uTG9vcCgpLGgucmVhZHk9ITAsdGkobC5yZWFkeSkmJnIub24oInJlYWR5IixsLnJlYWR5KTtmb3IodmFyIHY9MDt2PGEubGVuZ3RoO3YrKyl7dmFyIHg9YVt2XTtyLm9uKCJyZWFkeSIseCl9aSYmKGkucmVhZGllcz1bXSksci5lbWl0KCJyZWFkeSIpfSxsLmRvbmUpfSl9LCJDb3JlIiksdzY9UXgucHJvdG90eXBlO2lyKHc2LHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImNvcmUifSwiaW5zdGFuY2VTdHJpbmciKSxpc1JlYWR5Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sImlzUmVhZHkiKSxkZXN0cm95ZWQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmRlc3Ryb3llZH0sImRlc3Ryb3llZCIpLHJlYWR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNSZWFkeSgpP3RoaXMuZW1pdHRlcigpLmVtaXQoInJlYWR5IixbXSxlKTp0aGlzLm9uKCJyZWFkeSIsZSksdGhpc30sInJlYWR5IiksZGVzdHJveTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighZS5kZXN0cm95ZWQoKSlyZXR1cm4gZS5zdG9wQW5pbWF0aW9uTG9vcCgpLGUuZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KCJkZXN0cm95IiksZS5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsZX0sImRlc3Ryb3kiKSxoYXNFbGVtZW50V2l0aElkOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMuaGFzRWxlbWVudFdpdGhJZChlKX0sImhhc0VsZW1lbnRXaXRoSWQiKSxnZXRFbGVtZW50QnlJZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmdldEVsZW1lbnRCeUlkKGUpfSwiZ2V0RWxlbWVudEJ5SWQiKSxoYXNDb21wb3VuZE5vZGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzfSwiaGFzQ29tcG91bmROb2RlcyIpLGhlYWRsZXNzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCl9LCJoZWFkbGVzcyIpLHN0eWxlRW5hYmxlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkfSwic3R5bGVFbmFibGVkIiksYWRkVG9Qb29sOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMubWVyZ2UoZSksdGhpc30sImFkZFRvUG9vbCIpLHJlbW92ZUZyb21Qb29sOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMudW5tZXJnZShlKSx0aGlzfSwicmVtb3ZlRnJvbVBvb2wiKSxjb250YWluZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sImNvbnRhaW5lciIpLHdpbmRvdzpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jb250YWluZXI7aWYoZT09bnVsbClyZXR1cm4gSGk7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jb250YWluZXIub3duZXJEb2N1bWVudDtyZXR1cm4gcj09PXZvaWQgMHx8cj09bnVsbD9IaTpyLmRlZmF1bHRWaWV3fHxIaX0sIndpbmRvdyIpLG1vdW50Om8oZnVuY3Rpb24oZSl7aWYoZSE9bnVsbCl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUsaT1uLm9wdGlvbnM7cmV0dXJuIXA2KGUpJiZwNihlWzBdKSYmKGU9ZVswXSksci5zdG9wQW5pbWF0aW9uTG9vcCgpLHIuZGVzdHJveVJlbmRlcmVyKCksbi5jb250YWluZXI9ZSxuLnN0eWxlRW5hYmxlZD0hMCxyLmludmFsaWRhdGVTaXplKCksci5pbml0UmVuZGVyZXIoaXIoe30saSxpLnJlbmRlcmVyLHtuYW1lOmkucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjppLnJlbmRlcmVyLm5hbWV9KSksci5zdGFydEFuaW1hdGlvbkxvb3AoKSxyLnN0eWxlKGkuc3R5bGUpLHIuZW1pdCgibW91bnQiKSxyfX0sIm1vdW50IiksdW5tb3VudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5zdG9wQW5pbWF0aW9uTG9vcCgpLGUuZGVzdHJveVJlbmRlcmVyKCksZS5pbml0UmVuZGVyZXIoe25hbWU6Im51bGwifSksZS5lbWl0KCJ1bm1vdW50IiksZX0sInVubW91bnQiKSxvcHRpb25zOm8oZnVuY3Rpb24oKXtyZXR1cm4gVmModGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sIm9wdGlvbnMiKSxqc29uOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUsaT1yLm11dGFibGVFbGVtZW50cygpLGE9byhmdW5jdGlvbihfKXtyZXR1cm4gci5nZXRFbGVtZW50QnlJZChfLmlkKCkpfSwiZ2V0RnJlc2hSZWYiKTtpZihWcihlKSl7aWYoci5zdGFydEJhdGNoKCksZS5lbGVtZW50cyl7dmFyIHM9e30sbD1vKGZ1bmN0aW9uKF8sVCl7Zm9yKHZhciBFPVtdLEw9W10sQz0wO0M8Xy5sZW5ndGg7QysrKXt2YXIgQT1fW0NdO2lmKCFBLmRhdGEuaWQpe29uKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBJPSIiK0EuZGF0YS5pZCxEPXIuZ2V0RWxlbWVudEJ5SWQoSSk7c1tJXT0hMCxELmxlbmd0aCE9PTA/TC5wdXNoKHtlbGU6RCxqc29uOkF9KTooVCYmKEEuZ3JvdXA9VCksRS5wdXNoKEEpKX1yLmFkZChFKTtmb3IodmFyIGs9MDtrPEwubGVuZ3RoO2srKyl7dmFyIFI9TFtrXSxTPVIuZWxlLE89Ui5qc29uO1MuanNvbihPKX19LCJ1cGRhdGVFbGVzIik7aWYod24oZS5lbGVtZW50cykpbChlLmVsZW1lbnRzKTtlbHNlIGZvcih2YXIgdT1bIm5vZGVzIiwiZWRnZXMiXSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0sZD1lLmVsZW1lbnRzW2ZdO3duKGQpJiZsKGQsZil9dmFyIHA9ci5jb2xsZWN0aW9uKCk7aS5maWx0ZXIoZnVuY3Rpb24odyl7cmV0dXJuIXNbdy5pZCgpXX0pLmZvckVhY2goZnVuY3Rpb24odyl7dy5pc1BhcmVudCgpP3AubWVyZ2Uodyk6dy5yZW1vdmUoKX0pLHAuZm9yRWFjaChmdW5jdGlvbih3KXtyZXR1cm4gdy5jaGlsZHJlbigpLm1vdmUoe3BhcmVudDpudWxsfSl9KSxwLmZvckVhY2goZnVuY3Rpb24odyl7cmV0dXJuIGEodykucmVtb3ZlKCl9KX1lLnN0eWxlJiZyLnN0eWxlKGUuc3R5bGUpLGUuem9vbSE9bnVsbCYmZS56b29tIT09bi56b29tJiZyLnpvb20oZS56b29tKSxlLnBhbiYmKGUucGFuLnghPT1uLnBhbi54fHxlLnBhbi55IT09bi5wYW4ueSkmJnIucGFuKGUucGFuKSxlLmRhdGEmJnIuZGF0YShlLmRhdGEpO2Zvcih2YXIgbT1bIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJ1c2VyWm9vbWluZ0VuYWJsZWQiLCJwYW5uaW5nRW5hYmxlZCIsInVzZXJQYW5uaW5nRW5hYmxlZCIsImJveFNlbGVjdGlvbkVuYWJsZWQiLCJhdXRvbG9jayIsImF1dG91bmdyYWJpZnkiLCJhdXRvdW5zZWxlY3RpZnkiLCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIl0sZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddO2VbeV0hPW51bGwmJnJbeV0oZVt5XSl9cmV0dXJuIHIuZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIHY9ISFlLHg9e307dj94LmVsZW1lbnRzPXRoaXMuZWxlbWVudHMoKS5tYXAoZnVuY3Rpb24odyl7cmV0dXJuIHcuanNvbigpfSk6KHguZWxlbWVudHM9e30saS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3ZhciBfPXcuZ3JvdXAoKTt4LmVsZW1lbnRzW19dfHwoeC5lbGVtZW50c1tfXT1bXSkseC5lbGVtZW50c1tfXS5wdXNoKHcuanNvbigpKX0pKSx0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCYmKHguc3R5bGU9ci5zdHlsZSgpLmpzb24oKSkseC5kYXRhPVZjKHIuZGF0YSgpKTt2YXIgYj1uLm9wdGlvbnM7cmV0dXJuIHguem9vbWluZ0VuYWJsZWQ9bi56b29taW5nRW5hYmxlZCx4LnVzZXJab29taW5nRW5hYmxlZD1uLnVzZXJab29taW5nRW5hYmxlZCx4Lnpvb209bi56b29tLHgubWluWm9vbT1uLm1pblpvb20seC5tYXhab29tPW4ubWF4Wm9vbSx4LnBhbm5pbmdFbmFibGVkPW4ucGFubmluZ0VuYWJsZWQseC51c2VyUGFubmluZ0VuYWJsZWQ9bi51c2VyUGFubmluZ0VuYWJsZWQseC5wYW49VmMobi5wYW4pLHguYm94U2VsZWN0aW9uRW5hYmxlZD1uLmJveFNlbGVjdGlvbkVuYWJsZWQseC5yZW5kZXJlcj1WYyhiLnJlbmRlcmVyKSx4LmhpZGVFZGdlc09uVmlld3BvcnQ9Yi5oaWRlRWRnZXNPblZpZXdwb3J0LHgudGV4dHVyZU9uVmlld3BvcnQ9Yi50ZXh0dXJlT25WaWV3cG9ydCx4LndoZWVsU2Vuc2l0aXZpdHk9Yi53aGVlbFNlbnNpdGl2aXR5LHgubW90aW9uQmx1cj1iLm1vdGlvbkJsdXIseC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWIubXVsdGlDbGlja0RlYm91bmNlVGltZSx4fX0sImpzb24iKX0pO3c2LiRpZD13Ni5nZXRFbGVtZW50QnlJZDtbekplLEhKZSxLZ2UsVVAsdTYsWUplLEhQLGg2LGpKZSxVMCxLeF0uZm9yRWFjaChmdW5jdGlvbih0KXtpcih3Nix0KX0pO1FKZT17Zml0OiEwLGRpcmVjdGVkOiExLHBhZGRpbmc6MzAsY2lyY2xlOiExLGdyaWQ6ITEsc3BhY2luZ0ZhY3RvcjoxLjc1LGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJvb3RzOnZvaWQgMCxkZXB0aFNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX0sWkplPXttYXhpbWFsOiExLGFjeWNsaWM6ITF9LEpnPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LCJnZXRJbmZvIiksRW1lPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiLHIpfSwic2V0SW5mbyIpO28oUWdlLCJCcmVhZHRoRmlyc3RMYXlvdXQiKTtRZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9bi5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihjZSl7cmV0dXJuIWNlLmlzUGFyZW50KCl9KSxhPW4scz1lLmRpcmVjdGVkLGw9ZS5hY3ljbGljfHxlLm1heGltYWx8fGUubWF4aW1hbEFkanVzdG1lbnRzPjAsdT0kcyhlLmJvdW5kaW5nQm94P2UuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OnIud2lkdGgoKSxoOnIuaGVpZ2h0KCl9KSxoO2lmKHBvKGUucm9vdHMpKWg9ZS5yb290cztlbHNlIGlmKHduKGUucm9vdHMpKXtmb3IodmFyIGY9W10sZD0wO2Q8ZS5yb290cy5sZW5ndGg7ZCsrKXt2YXIgcD1lLnJvb3RzW2RdLG09ci5nZXRFbGVtZW50QnlJZChwKTtmLnB1c2gobSl9aD1yLmNvbGxlY3Rpb24oZil9ZWxzZSBpZihadChlLnJvb3RzKSloPXIuJChlLnJvb3RzKTtlbHNlIGlmKHMpaD1pLnJvb3RzKCk7ZWxzZXt2YXIgZz1uLmNvbXBvbmVudHMoKTtoPXIuY29sbGVjdGlvbigpO2Zvcih2YXIgeT1vKGZ1bmN0aW9uKHRlKXt2YXIgRGU9Z1t0ZV0sb2U9RGUubWF4RGVncmVlKCExKSxrZT1EZS5maWx0ZXIoZnVuY3Rpb24oRmUpe3JldHVybiBGZS5kZWdyZWUoITEpPT09b2V9KTtoPWguYWRkKGtlKX0sIl9sb29wIiksdj0wO3Y8Zy5sZW5ndGg7disrKXkodil9dmFyIHg9W10sYj17fSx3PW8oZnVuY3Rpb24odGUsRGUpe3hbRGVdPT1udWxsJiYoeFtEZV09W10pO3ZhciBvZT14W0RlXS5sZW5ndGg7eFtEZV0ucHVzaCh0ZSksRW1lKHRlLHtpbmRleDpvZSxkZXB0aDpEZX0pfSwiYWRkVG9EZXB0aCIpLF89byhmdW5jdGlvbih0ZSxEZSl7dmFyIG9lPUpnKHRlKSxrZT1vZS5kZXB0aCxGZT1vZS5pbmRleDt4W2tlXVtGZV09bnVsbCx3KHRlLERlKX0sImNoYW5nZURlcHRoIik7YS5iZnMoe3Jvb3RzOmgsZGlyZWN0ZWQ6ZS5kaXJlY3RlZCx2aXNpdDpvKGZ1bmN0aW9uKHRlLERlLG9lLGtlLEZlKXt2YXIgQmU9dGVbMF0sVmU9QmUuaWQoKTt3KEJlLEZlKSxiW1ZlXT0hMH0sInZpc2l0Iil9KTtmb3IodmFyIFQ9W10sRT0wO0U8aS5sZW5ndGg7RSsrKXt2YXIgTD1pW0VdO2JbTC5pZCgpXXx8VC5wdXNoKEwpfXZhciBDPW8oZnVuY3Rpb24odGUpe2Zvcih2YXIgRGU9eFt0ZV0sb2U9MDtvZTxEZS5sZW5ndGg7b2UrKyl7dmFyIGtlPURlW29lXTtpZihrZT09bnVsbCl7RGUuc3BsaWNlKG9lLDEpLG9lLS07Y29udGludWV9RW1lKGtlLHtkZXB0aDp0ZSxpbmRleDpvZX0pfX0sImFzc2lnbkRlcHRoc0F0IiksQT1vKGZ1bmN0aW9uKCl7Zm9yKHZhciB0ZT0wO3RlPHgubGVuZ3RoO3RlKyspQyh0ZSl9LCJhc3NpZ25EZXB0aHMiKSxJPW8oZnVuY3Rpb24odGUsRGUpe2Zvcih2YXIgb2U9SmcodGUpLGtlPXRlLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKFgpe3JldHVybiBYLmlzTm9kZSgpJiZuLmhhcyhYKX0pLEZlPS0xLEJlPXRlLmlkKCksVmU9MDtWZTxrZS5sZW5ndGg7VmUrKyl7dmFyIEdlPWtlW1ZlXSxIZT1KZyhHZSk7RmU9TWF0aC5tYXgoRmUsSGUuZGVwdGgpfWlmKG9lLmRlcHRoPD1GZSl7aWYoIWUuYWN5Y2xpYyYmRGVbQmVdKXJldHVybiBudWxsO3ZhciB4ZT1GZSsxO3JldHVybiBfKHRlLHhlKSxEZVtCZV09eGUsITB9cmV0dXJuITF9LCJhZGp1c3RNYXhpbWFsbHkiKTtpZihzJiZsKXt2YXIgRD1bXSxrPXt9LFI9byhmdW5jdGlvbih0ZSl7cmV0dXJuIEQucHVzaCh0ZSl9LCJlbnF1ZXVlIiksUz1vKGZ1bmN0aW9uKCl7cmV0dXJuIEQuc2hpZnQoKX0sImRlcXVldWUiKTtmb3IoaS5mb3JFYWNoKGZ1bmN0aW9uKGNlKXtyZXR1cm4gRC5wdXNoKGNlKX0pO0QubGVuZ3RoPjA7KXt2YXIgTz1TKCksTj1JKE8sayk7aWYoTilPLm91dGdvZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKGNlKXtyZXR1cm4gY2UuaXNOb2RlKCkmJm4uaGFzKGNlKX0pLmZvckVhY2goUik7ZWxzZSBpZihOPT09bnVsbCl7b24oIkRldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAiK08uaWQoKSsiYC4gIEJhaWxpbmcgbWF4aW1hbCBhZGp1c3RtZW50IGR1ZSB0byBjeWNsZS4gIFVzZSBgb3B0aW9ucy5tYXhpbWFsOiB0cnVlYCBvbmx5IG9uIERBR3MuIik7YnJlYWt9fX1BKCk7dmFyIFA9MDtpZihlLmF2b2lkT3ZlcmxhcClmb3IodmFyIEY9MDtGPGkubGVuZ3RoO0YrKyl7dmFyIEI9aVtGXSwkPUIubGF5b3V0RGltZW5zaW9ucyhlKSx6PSQudyxXPSQuaDtQPU1hdGgubWF4KFAseixXKX12YXIgaj17fSxLPW8oZnVuY3Rpb24odGUpe2lmKGpbdGUuaWQoKV0pcmV0dXJuIGpbdGUuaWQoKV07Zm9yKHZhciBEZT1KZyh0ZSkuZGVwdGgsb2U9dGUubmVpZ2hib3Job29kKCksa2U9MCxGZT0wLEJlPTA7QmU8b2UubGVuZ3RoO0JlKyspe3ZhciBWZT1vZVtCZV07aWYoIShWZS5pc0VkZ2UoKXx8VmUuaXNQYXJlbnQoKXx8IWkuaGFzKFZlKSkpe3ZhciBHZT1KZyhWZSk7aWYoR2UhPW51bGwpe3ZhciBIZT1HZS5pbmRleCx4ZT1HZS5kZXB0aDtpZighKEhlPT1udWxsfHx4ZT09bnVsbCkpe3ZhciBYPXhbeGVdLmxlbmd0aDt4ZTxEZSYmKGtlKz1IZS9YLEZlKyspfX19fXJldHVybiBGZT1NYXRoLm1heCgxLEZlKSxrZT1rZS9GZSxGZT09PTAmJihrZT0wKSxqW3RlLmlkKCldPWtlLGtlfSwiZ2V0V2VpZ2h0ZWRQZXJjZW50IiksaWU9byhmdW5jdGlvbih0ZSxEZSl7dmFyIG9lPUsodGUpLGtlPUsoRGUpLEZlPW9lLWtlO3JldHVybiBGZT09PTA/UW1lKHRlLmlkKCksRGUuaWQoKSk6RmV9LCJzb3J0Rm4iKTtlLmRlcHRoU29ydCE9PXZvaWQgMCYmKGllPWUuZGVwdGhTb3J0KTtmb3IodmFyIFE9MDtRPHgubGVuZ3RoO1ErKyl4W1FdLnNvcnQoaWUpLEMoUSk7Zm9yKHZhciBlZT1bXSxKPTA7SjxULmxlbmd0aDtKKyspZWUucHVzaChUW0pdKTt4LnVuc2hpZnQoZWUpLEEoKTtmb3IodmFyIEg9MCxxPTA7cTx4Lmxlbmd0aDtxKyspSD1NYXRoLm1heCh4W3FdLmxlbmd0aCxIKTt2YXIgWj17eDp1LngxK3Uudy8yLHk6dS54MSt1LmgvMn0sYWU9eC5yZWR1Y2UoZnVuY3Rpb24oY2UsdGUpe3JldHVybiBNYXRoLm1heChjZSx0ZS5sZW5ndGgpfSwwKSx1ZT1vKGZ1bmN0aW9uKHRlKXt2YXIgRGU9SmcodGUpLG9lPURlLmRlcHRoLGtlPURlLmluZGV4LEZlPXhbb2VdLmxlbmd0aCxCZT1NYXRoLm1heCh1LncvKChlLmdyaWQ/YWU6RmUpKzEpLFApLFZlPU1hdGgubWF4KHUuaC8oeC5sZW5ndGgrMSksUCksR2U9TWF0aC5taW4odS53LzIveC5sZW5ndGgsdS5oLzIveC5sZW5ndGgpO2lmKEdlPU1hdGgubWF4KEdlLFApLGUuY2lyY2xlKXt2YXIgeGU9R2Uqb2UrR2UtKHgubGVuZ3RoPjAmJnhbMF0ubGVuZ3RoPD0zP0dlLzI6MCksWD0yKk1hdGguUEkveFtvZV0ubGVuZ3RoKmtlO3JldHVybiBvZT09PTAmJnhbMF0ubGVuZ3RoPT09MSYmKHhlPTEpLHt4OloueCt4ZSpNYXRoLmNvcyhYKSx5OloueSt4ZSpNYXRoLnNpbihYKX19ZWxzZXt2YXIgSGU9e3g6Wi54KyhrZSsxLShGZSsxKS8yKSpCZSx5OihvZSsxKSpWZX07cmV0dXJuIEhlfX0sImdldFBvc2l0aW9uIik7cmV0dXJuIG4ubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLHVlKSx0aGlzfTtKSmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhaZ2UsIkNpcmNsZUxheW91dCIpO1pnZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dCxyPXQuY3ksbj1lLmVsZXMsaT1lLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IWUuY291bnRlcmNsb2Nrd2lzZTplLmNsb2Nrd2lzZSxhPW4ubm9kZXMoKS5ub3QoIjpwYXJlbnQiKTtlLnNvcnQmJihhPWEuc29ydChlLnNvcnQpKTtmb3IodmFyIHM9JHMoZS5ib3VuZGluZ0JveD9lLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpyLndpZHRoKCksaDpyLmhlaWdodCgpfSksbD17eDpzLngxK3Mudy8yLHk6cy55MStzLmgvMn0sdT1lLnN3ZWVwPT09dm9pZCAwPzIqTWF0aC5QSS0yKk1hdGguUEkvYS5sZW5ndGg6ZS5zd2VlcCxoPXUvTWF0aC5tYXgoMSxhLmxlbmd0aC0xKSxmLGQ9MCxwPTA7cDxhLmxlbmd0aDtwKyspe3ZhciBtPWFbcF0sZz1tLmxheW91dERpbWVuc2lvbnMoZSkseT1nLncsdj1nLmg7ZD1NYXRoLm1heChkLHksdil9aWYoeHQoZS5yYWRpdXMpP2Y9ZS5yYWRpdXM6YS5sZW5ndGg8PTE/Zj0wOmY9TWF0aC5taW4ocy5oLHMudykvMi1kLGEubGVuZ3RoPjEmJmUuYXZvaWRPdmVybGFwKXtkKj0xLjc1O3ZhciB4PU1hdGguY29zKGgpLU1hdGguY29zKDApLGI9TWF0aC5zaW4oaCktTWF0aC5zaW4oMCksdz1NYXRoLnNxcnQoZCpkLyh4KngrYipiKSk7Zj1NYXRoLm1heCh3LGYpfXZhciBfPW8oZnVuY3Rpb24oRSxMKXt2YXIgQz1lLnN0YXJ0QW5nbGUrTCpoKihpPzE6LTEpLEE9ZipNYXRoLmNvcyhDKSxJPWYqTWF0aC5zaW4oQyksRD17eDpsLngrQSx5OmwueStJfTtyZXR1cm4gRH0sImdldFBvcyIpO3JldHVybiBuLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxfKSx0aGlzfTtlZXQ9e2ZpdDohMCxwYWRkaW5nOjMwLHN0YXJ0QW5nbGU6My8yKk1hdGguUEksc3dlZXA6dm9pZCAwLGNsb2Nrd2lzZTohMCxlcXVpZGlzdGFudDohMSxtaW5Ob2RlU3BhY2luZzoxMCxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxoZWlnaHQ6dm9pZCAwLHdpZHRoOnZvaWQgMCxzcGFjaW5nRmFjdG9yOnZvaWQgMCxjb25jZW50cmljOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVncmVlKCl9LCJjb25jZW50cmljIiksbGV2ZWxXaWR0aDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1heERlZ3JlZSgpLzR9LCJsZXZlbFdpZHRoIiksYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKEpnZSwiQ29uY2VudHJpY0xheW91dCIpO0pnZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMub3B0aW9ucyxlPXQscj1lLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IWUuY291bnRlcmNsb2Nrd2lzZTplLmNsb2Nrd2lzZSxuPXQuY3ksaT1lLmVsZXMsYT1pLm5vZGVzKCkubm90KCI6cGFyZW50Iikscz0kcyhlLmJvdW5kaW5nQm94P2UuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Om4ud2lkdGgoKSxoOm4uaGVpZ2h0KCl9KSxsPXt4OnMueDErcy53LzIseTpzLnkxK3MuaC8yfSx1PVtdLGg9MCxmPTA7ZjxhLmxlbmd0aDtmKyspe3ZhciBkPWFbZl0scD12b2lkIDA7cD1lLmNvbmNlbnRyaWMoZCksdS5wdXNoKHt2YWx1ZTpwLG5vZGU6ZH0pLGQuX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPXB9YS51cGRhdGVTdHlsZSgpO2Zvcih2YXIgbT0wO208YS5sZW5ndGg7bSsrKXt2YXIgZz1hW21dLHk9Zy5sYXlvdXREaW1lbnNpb25zKGUpO2g9TWF0aC5tYXgoaCx5LncseS5oKX11LnNvcnQoZnVuY3Rpb24oY2UsdGUpe3JldHVybiB0ZS52YWx1ZS1jZS52YWx1ZX0pO2Zvcih2YXIgdj1lLmxldmVsV2lkdGgoYSkseD1bW11dLGI9eFswXSx3PTA7dzx1Lmxlbmd0aDt3Kyspe3ZhciBfPXVbd107aWYoYi5sZW5ndGg+MCl7dmFyIFQ9TWF0aC5hYnMoYlswXS52YWx1ZS1fLnZhbHVlKTtUPj12JiYoYj1bXSx4LnB1c2goYikpfWIucHVzaChfKX12YXIgRT1oK2UubWluTm9kZVNwYWNpbmc7aWYoIWUuYXZvaWRPdmVybGFwKXt2YXIgTD14Lmxlbmd0aD4wJiZ4WzBdLmxlbmd0aD4xLEM9TWF0aC5taW4ocy53LHMuaCkvMi1FLEE9Qy8oeC5sZW5ndGgrTD8xOjApO0U9TWF0aC5taW4oRSxBKX1mb3IodmFyIEk9MCxEPTA7RDx4Lmxlbmd0aDtEKyspe3ZhciBrPXhbRF0sUj1lLnN3ZWVwPT09dm9pZCAwPzIqTWF0aC5QSS0yKk1hdGguUEkvay5sZW5ndGg6ZS5zd2VlcCxTPWsuZFRoZXRhPVIvTWF0aC5tYXgoMSxrLmxlbmd0aC0xKTtpZihrLmxlbmd0aD4xJiZlLmF2b2lkT3ZlcmxhcCl7dmFyIE89TWF0aC5jb3MoUyktTWF0aC5jb3MoMCksTj1NYXRoLnNpbihTKS1NYXRoLnNpbigwKSxQPU1hdGguc3FydChFKkUvKE8qTytOKk4pKTtJPU1hdGgubWF4KFAsSSl9ay5yPUksSSs9RX1pZihlLmVxdWlkaXN0YW50KXtmb3IodmFyIEY9MCxCPTAsJD0wOyQ8eC5sZW5ndGg7JCsrKXt2YXIgej14WyRdLFc9ei5yLUI7Rj1NYXRoLm1heChGLFcpfUI9MDtmb3IodmFyIGo9MDtqPHgubGVuZ3RoO2orKyl7dmFyIEs9eFtqXTtqPT09MCYmKEI9Sy5yKSxLLnI9QixCKz1GfX1mb3IodmFyIGllPXt9LFE9MDtRPHgubGVuZ3RoO1ErKylmb3IodmFyIGVlPXhbUV0sSj1lZS5kVGhldGEsSD1lZS5yLHE9MDtxPGVlLmxlbmd0aDtxKyspe3ZhciBaPWVlW3FdLGFlPWUuc3RhcnRBbmdsZSsocj8xOi0xKSpKKnEsdWU9e3g6bC54K0gqTWF0aC5jb3MoYWUpLHk6bC55K0gqTWF0aC5zaW4oYWUpfTtpZVtaLm5vZGUuaWQoKV09dWV9cmV0dXJuIGkubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLGZ1bmN0aW9uKGNlKXt2YXIgdGU9Y2UuaWQoKTtyZXR1cm4gaWVbdGVdfSksdGhpc307dGV0PXtyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIiksYW5pbWF0ZTohMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGlvbkR1cmF0aW9uOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxhbmltYXRpb25UaHJlc2hvbGQ6MjUwLHJlZnJlc2g6MjAsZml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyYW5kb21pemU6ITEsY29tcG9uZW50U3BhY2luZzo0MCxub2RlUmVwdWxzaW9uOm8oZnVuY3Rpb24oZSl7cmV0dXJuIDIwNDh9LCJub2RlUmVwdWxzaW9uIiksbm9kZU92ZXJsYXA6NCxpZGVhbEVkZ2VMZW5ndGg6byhmdW5jdGlvbihlKXtyZXR1cm4gMzJ9LCJpZGVhbEVkZ2VMZW5ndGgiKSxlZGdlRWxhc3RpY2l0eTpvKGZ1bmN0aW9uKGUpe3JldHVybiAzMn0sImVkZ2VFbGFzdGljaXR5IiksbmVzdGluZ0ZhY3RvcjoxLjIsZ3Jhdml0eToxLG51bUl0ZXI6MWUzLGluaXRpYWxUZW1wOjFlMyxjb29saW5nRmFjdG9yOi45OSxtaW5UZW1wOjF9O28oRzYsIkNvc2VMYXlvdXQiKTtHNi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dC5jeSxyPXRoaXM7ci5zdG9wcGVkPSExLCh0LmFuaW1hdGU9PT0hMHx8dC5hbmltYXRlPT09ITEpJiZyLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6cn0pLHQuZGVidWc9PT0hMD9NUD0hMDpNUD0hMTt2YXIgbj1yZXQoZSxyLHQpO01QJiZhZXQobiksdC5yYW5kb21pemUmJnNldChuKTt2YXIgaT1YdSgpLGE9byhmdW5jdGlvbigpe29ldChuLGUsdCksdC5maXQ9PT0hMCYmZS5maXQodC5wYWRkaW5nKX0sInJlZnJlc2giKSxzPW8oZnVuY3Rpb24ocCl7cmV0dXJuIShyLnN0b3BwZWR8fHA+PXQubnVtSXRlcnx8KGNldChuLHQpLG4udGVtcGVyYXR1cmU9bi50ZW1wZXJhdHVyZSp0LmNvb2xpbmdGYWN0b3Isbi50ZW1wZXJhdHVyZTx0Lm1pblRlbXApKX0sIm1haW5Mb29wIiksbD1vKGZ1bmN0aW9uKCl7aWYodC5hbmltYXRlPT09ITB8fHQuYW5pbWF0ZT09PSExKWEoKSxyLm9uZSgibGF5b3V0c3RvcCIsdC5zdG9wKSxyLmVtaXQoe3R5cGU6ImxheW91dHN0b3AiLGxheW91dDpyfSk7ZWxzZXt2YXIgcD10LmVsZXMubm9kZXMoKSxtPWUxZShuLHQscCk7cC5sYXlvdXRQb3NpdGlvbnMocix0LG0pfX0sImRvbmUiKSx1PTAsaD0hMDtpZih0LmFuaW1hdGU9PT0hMCl7dmFyIGY9byhmdW5jdGlvbiBkKCl7Zm9yKHZhciBwPTA7aCYmcDx0LnJlZnJlc2g7KWg9cyh1KSx1KysscCsrO2lmKCFoKUNtZShuLHQpLGwoKTtlbHNle3ZhciBtPVh1KCk7bS1pPj10LmFuaW1hdGlvblRocmVzaG9sZCYmYSgpLG02KGQpfX0sImZyYW1lIik7ZigpfWVsc2V7Zm9yKDtoOyloPXModSksdSsrO0NtZShuLHQpLGwoKX1yZXR1cm4gdGhpc307RzYucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXMudGhyZWFkJiZ0aGlzLnRocmVhZC5zdG9wKCksdGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc307RzYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzfTtyZXQ9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPW4uZWxlcy5lZGdlcygpLGE9bi5lbGVzLm5vZGVzKCkscz0kcyhuLmJvdW5kaW5nQm94P24uYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OmUud2lkdGgoKSxoOmUuaGVpZ2h0KCl9KSxsPXtpc0NvbXBvdW5kOmUuaGFzQ29tcG91bmROb2RlcygpLGxheW91dE5vZGVzOltdLGlkVG9JbmRleDp7fSxub2RlU2l6ZTphLnNpemUoKSxncmFwaFNldDpbXSxpbmRleFRvR3JhcGg6W10sbGF5b3V0RWRnZXM6W10sZWRnZVNpemU6aS5zaXplKCksdGVtcGVyYXR1cmU6bi5pbml0aWFsVGVtcCxjbGllbnRXaWR0aDpzLncsY2xpZW50SGVpZ2h0OnMuaCxib3VuZGluZ0JveDpzfSx1PW4uZWxlcy5jb21wb25lbnRzKCksaD17fSxmPTA7Zjx1Lmxlbmd0aDtmKyspZm9yKHZhciBkPXVbZl0scD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgbT1kW3BdO2hbbS5pZCgpXT1mfWZvcih2YXIgZj0wO2Y8bC5ub2RlU2l6ZTtmKyspe3ZhciBnPWFbZl0seT1nLmxheW91dERpbWVuc2lvbnMobiksdj17fTt2LmlzTG9ja2VkPWcubG9ja2VkKCksdi5pZD1nLmRhdGEoImlkIiksdi5wYXJlbnRJZD1nLmRhdGEoInBhcmVudCIpLHYuY21wdElkPWhbZy5pZCgpXSx2LmNoaWxkcmVuPVtdLHYucG9zaXRpb25YPWcucG9zaXRpb24oIngiKSx2LnBvc2l0aW9uWT1nLnBvc2l0aW9uKCJ5Iiksdi5vZmZzZXRYPTAsdi5vZmZzZXRZPTAsdi5oZWlnaHQ9eS53LHYud2lkdGg9eS5oLHYubWF4WD12LnBvc2l0aW9uWCt2LndpZHRoLzIsdi5taW5YPXYucG9zaXRpb25YLXYud2lkdGgvMix2Lm1heFk9di5wb3NpdGlvblkrdi5oZWlnaHQvMix2Lm1pblk9di5wb3NpdGlvblktdi5oZWlnaHQvMix2LnBhZExlZnQ9cGFyc2VGbG9hdChnLnN0eWxlKCJwYWRkaW5nIikpLHYucGFkUmlnaHQ9cGFyc2VGbG9hdChnLnN0eWxlKCJwYWRkaW5nIikpLHYucGFkVG9wPXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZEJvdHRvbT1wYXJzZUZsb2F0KGcuc3R5bGUoInBhZGRpbmciKSksdi5ub2RlUmVwdWxzaW9uPXRpKG4ubm9kZVJlcHVsc2lvbik/bi5ub2RlUmVwdWxzaW9uKGcpOm4ubm9kZVJlcHVsc2lvbixsLmxheW91dE5vZGVzLnB1c2godiksbC5pZFRvSW5kZXhbdi5pZF09Zn1mb3IodmFyIHg9W10sYj0wLHc9LTEsXz1bXSxmPTA7ZjxsLm5vZGVTaXplO2YrKyl7dmFyIGc9bC5sYXlvdXROb2Rlc1tmXSxUPWcucGFyZW50SWQ7VCE9bnVsbD9sLmxheW91dE5vZGVzW2wuaWRUb0luZGV4W1RdXS5jaGlsZHJlbi5wdXNoKGcuaWQpOih4Wysrd109Zy5pZCxfLnB1c2goZy5pZCkpfWZvcihsLmdyYXBoU2V0LnB1c2goXyk7Yjw9dzspe3ZhciBFPXhbYisrXSxMPWwuaWRUb0luZGV4W0VdLG09bC5sYXlvdXROb2Rlc1tMXSxDPW0uY2hpbGRyZW47aWYoQy5sZW5ndGg+MCl7bC5ncmFwaFNldC5wdXNoKEMpO2Zvcih2YXIgZj0wO2Y8Qy5sZW5ndGg7ZisrKXhbKyt3XT1DW2ZdfX1mb3IodmFyIGY9MDtmPGwuZ3JhcGhTZXQubGVuZ3RoO2YrKylmb3IodmFyIEE9bC5ncmFwaFNldFtmXSxwPTA7cDxBLmxlbmd0aDtwKyspe3ZhciBJPWwuaWRUb0luZGV4W0FbcF1dO2wuaW5kZXhUb0dyYXBoW0ldPWZ9Zm9yKHZhciBmPTA7ZjxsLmVkZ2VTaXplO2YrKyl7dmFyIEQ9aVtmXSxrPXt9O2suaWQ9RC5kYXRhKCJpZCIpLGsuc291cmNlSWQ9RC5kYXRhKCJzb3VyY2UiKSxrLnRhcmdldElkPUQuZGF0YSgidGFyZ2V0Iik7dmFyIFI9dGkobi5pZGVhbEVkZ2VMZW5ndGgpP24uaWRlYWxFZGdlTGVuZ3RoKEQpOm4uaWRlYWxFZGdlTGVuZ3RoLFM9dGkobi5lZGdlRWxhc3RpY2l0eSk/bi5lZGdlRWxhc3RpY2l0eShEKTpuLmVkZ2VFbGFzdGljaXR5LE89bC5pZFRvSW5kZXhbay5zb3VyY2VJZF0sTj1sLmlkVG9JbmRleFtrLnRhcmdldElkXSxQPWwuaW5kZXhUb0dyYXBoW09dLEY9bC5pbmRleFRvR3JhcGhbTl07aWYoUCE9Ril7Zm9yKHZhciBCPW5ldChrLnNvdXJjZUlkLGsudGFyZ2V0SWQsbCksJD1sLmdyYXBoU2V0W0JdLHo9MCx2PWwubGF5b3V0Tm9kZXNbT107JC5pbmRleE9mKHYuaWQpPT09LTE7KXY9bC5sYXlvdXROb2Rlc1tsLmlkVG9JbmRleFt2LnBhcmVudElkXV0seisrO2Zvcih2PWwubGF5b3V0Tm9kZXNbTl07JC5pbmRleE9mKHYuaWQpPT09LTE7KXY9bC5sYXlvdXROb2Rlc1tsLmlkVG9JbmRleFt2LnBhcmVudElkXV0seisrO1IqPXoqbi5uZXN0aW5nRmFjdG9yfWsuaWRlYWxMZW5ndGg9UixrLmVsYXN0aWNpdHk9UyxsLmxheW91dEVkZ2VzLnB1c2goayl9cmV0dXJuIGx9LCJjcmVhdGVMYXlvdXRJbmZvIiksbmV0PW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWlldChlLHIsMCxuKTtyZXR1cm4gMj5pLmNvdW50PzA6aS5ncmFwaH0sImZpbmRMQ0EiKSxpZXQ9byhmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWkuZ3JhcGhTZXRbbl07aWYoLTE8YS5pbmRleE9mKGUpJiYtMTxhLmluZGV4T2YocikpcmV0dXJue2NvdW50OjIsZ3JhcGg6bn07Zm9yKHZhciBzPTAsbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgdT1hW2xdLGg9aS5pZFRvSW5kZXhbdV0sZj1pLmxheW91dE5vZGVzW2hdLmNoaWxkcmVuO2lmKGYubGVuZ3RoIT09MCl7dmFyIGQ9aS5pbmRleFRvR3JhcGhbaS5pZFRvSW5kZXhbZlswXV1dLHA9dChlLHIsZCxpKTtpZihwLmNvdW50IT09MClpZihwLmNvdW50PT09MSl7aWYocysrLHM9PT0yKWJyZWFrfWVsc2UgcmV0dXJuIHB9fXJldHVybntjb3VudDpzLGdyYXBoOm59fSwiZmluZExDQV9hdXgiKSxzZXQ9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLmNsaWVudFdpZHRoLGk9ZS5jbGllbnRIZWlnaHQsYT0wO2E8ZS5ub2RlU2l6ZTthKyspe3ZhciBzPWUubGF5b3V0Tm9kZXNbYV07cy5jaGlsZHJlbi5sZW5ndGg9PT0wJiYhcy5pc0xvY2tlZCYmKHMucG9zaXRpb25YPU1hdGgucmFuZG9tKCkqbixzLnBvc2l0aW9uWT1NYXRoLnJhbmRvbSgpKmkpfX0sInJhbmRvbWl6ZVBvc2l0aW9ucyIpLGUxZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLmJvdW5kaW5nQm94LGE9e3gxOjEvMCx4MjotMS8wLHkxOjEvMCx5MjotMS8wfTtyZXR1cm4gci5ib3VuZGluZ0JveCYmKG4uZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W3MuZGF0YSgiaWQiKV1dO2EueDE9TWF0aC5taW4oYS54MSxsLnBvc2l0aW9uWCksYS54Mj1NYXRoLm1heChhLngyLGwucG9zaXRpb25YKSxhLnkxPU1hdGgubWluKGEueTEsbC5wb3NpdGlvblkpLGEueTI9TWF0aC5tYXgoYS55MixsLnBvc2l0aW9uWSl9KSxhLnc9YS54Mi1hLngxLGEuaD1hLnkyLWEueTEpLGZ1bmN0aW9uKHMsbCl7dmFyIHU9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtzLmRhdGEoImlkIildXTtpZihyLmJvdW5kaW5nQm94KXt2YXIgaD0odS5wb3NpdGlvblgtYS54MSkvYS53LGY9KHUucG9zaXRpb25ZLWEueTEpL2EuaDtyZXR1cm57eDppLngxK2gqaS53LHk6aS55MStmKmkuaH19ZWxzZSByZXR1cm57eDp1LnBvc2l0aW9uWCx5OnUucG9zaXRpb25ZfX19LCJnZXRTY2FsZUluQm91bmRzRm4iKSxvZXQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9bi5sYXlvdXQsYT1uLmVsZXMubm9kZXMoKSxzPWUxZShlLG4sYSk7YS5wb3NpdGlvbnMocyksZS5yZWFkeSE9PSEwJiYoZS5yZWFkeT0hMCxpLm9uZSgibGF5b3V0cmVhZHkiLG4ucmVhZHkpLGkuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDp0aGlzfSkpfSwicmVmcmVzaFBvc2l0aW9ucyIpLGNldD1vKGZ1bmN0aW9uKGUscixuKXt1ZXQoZSxyKSxkZXQoZSkscGV0KGUsciksbWV0KGUpLGdldChlKX0sInN0ZXAiKSx1ZXQ9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5ncmFwaFNldC5sZW5ndGg7bisrKWZvcih2YXIgaT1lLmdyYXBoU2V0W25dLGE9aS5sZW5ndGgscz0wO3M8YTtzKyspZm9yKHZhciBsPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbaVtzXV1dLHU9cysxO3U8YTt1Kyspe3ZhciBoPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbaVt1XV1dO2hldChsLGgsZSxyKX19LCJjYWxjdWxhdGVOb2RlRm9yY2VzIiksU21lPW8oZnVuY3Rpb24oZSl7cmV0dXJuLWUrMiplKk1hdGgucmFuZG9tKCl9LCJyYW5kb21EaXN0YW5jZSIpLGhldD1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWUuY21wdElkLHM9ci5jbXB0SWQ7aWYoIShhIT09cyYmIW4uaXNDb21wb3VuZCkpe3ZhciBsPXIucG9zaXRpb25YLWUucG9zaXRpb25YLHU9ci5wb3NpdGlvblktZS5wb3NpdGlvblksaD0xO2w9PT0wJiZ1PT09MCYmKGw9U21lKGgpLHU9U21lKGgpKTt2YXIgZj1mZXQoZSxyLGwsdSk7aWYoZj4wKXZhciBkPWkubm9kZU92ZXJsYXAqZixwPU1hdGguc3FydChsKmwrdSp1KSxtPWQqbC9wLGc9ZCp1L3A7ZWxzZSB2YXIgeT1UNihlLGwsdSksdj1UNihyLC0xKmwsLTEqdSkseD12LngteS54LGI9di55LXkueSx3PXgqeCtiKmIscD1NYXRoLnNxcnQodyksZD0oZS5ub2RlUmVwdWxzaW9uK3Iubm9kZVJlcHVsc2lvbikvdyxtPWQqeC9wLGc9ZCpiL3A7ZS5pc0xvY2tlZHx8KGUub2Zmc2V0WC09bSxlLm9mZnNldFktPWcpLHIuaXNMb2NrZWR8fChyLm9mZnNldFgrPW0sci5vZmZzZXRZKz1nKX19LCJub2RlUmVwdWxzaW9uIiksZmV0PW8oZnVuY3Rpb24oZSxyLG4saSl7aWYobj4wKXZhciBhPWUubWF4WC1yLm1pblg7ZWxzZSB2YXIgYT1yLm1heFgtZS5taW5YO2lmKGk+MCl2YXIgcz1lLm1heFktci5taW5ZO2Vsc2UgdmFyIHM9ci5tYXhZLWUubWluWTtyZXR1cm4gYT49MCYmcz49MD9NYXRoLnNxcnQoYSphK3Mqcyk6MH0sIm5vZGVzT3ZlcmxhcCIpLFQ2PW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUucG9zaXRpb25YLGE9ZS5wb3NpdGlvblkscz1lLmhlaWdodHx8MSxsPWUud2lkdGh8fDEsdT1uL3IsaD1zL2wsZj17fTtyZXR1cm4gcj09PTAmJjA8bnx8cj09PTAmJjA+bj8oZi54PWksZi55PWErcy8yLGYpOjA8ciYmLTEqaDw9dSYmdTw9aD8oZi54PWkrbC8yLGYueT1hK2wqbi8yL3IsZik6MD5yJiYtMSpoPD11JiZ1PD1oPyhmLng9aS1sLzIsZi55PWEtbCpuLzIvcixmKTowPG4mJih1PD0tMSpofHx1Pj1oKT8oZi54PWkrcypyLzIvbixmLnk9YStzLzIsZik6KDA+biYmKHU8PS0xKmh8fHU+PWgpJiYoZi54PWktcypyLzIvbixmLnk9YS1zLzIpLGYpfSwiZmluZENsaXBwaW5nUG9pbnQiKSxkZXQ9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5lZGdlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0RWRnZXNbbl0sYT1lLmlkVG9JbmRleFtpLnNvdXJjZUlkXSxzPWUubGF5b3V0Tm9kZXNbYV0sbD1lLmlkVG9JbmRleFtpLnRhcmdldElkXSx1PWUubGF5b3V0Tm9kZXNbbF0saD11LnBvc2l0aW9uWC1zLnBvc2l0aW9uWCxmPXUucG9zaXRpb25ZLXMucG9zaXRpb25ZO2lmKCEoaD09PTAmJmY9PT0wKSl7dmFyIGQ9VDYocyxoLGYpLHA9VDYodSwtMSpoLC0xKmYpLG09cC54LWQueCxnPXAueS1kLnkseT1NYXRoLnNxcnQobSptK2cqZyksdj1NYXRoLnBvdyhpLmlkZWFsTGVuZ3RoLXksMikvaS5lbGFzdGljaXR5O2lmKHkhPT0wKXZhciB4PXYqbS95LGI9dipnL3k7ZWxzZSB2YXIgeD0wLGI9MDtzLmlzTG9ja2VkfHwocy5vZmZzZXRYKz14LHMub2Zmc2V0WSs9YiksdS5pc0xvY2tlZHx8KHUub2Zmc2V0WC09eCx1Lm9mZnNldFktPWIpfX19LCJjYWxjdWxhdGVFZGdlRm9yY2VzIikscGV0PW8oZnVuY3Rpb24oZSxyKXtpZihyLmdyYXZpdHkhPT0wKWZvcih2YXIgbj0xLGk9MDtpPGUuZ3JhcGhTZXQubGVuZ3RoO2krKyl7dmFyIGE9ZS5ncmFwaFNldFtpXSxzPWEubGVuZ3RoO2lmKGk9PT0wKXZhciBsPWUuY2xpZW50SGVpZ2h0LzIsdT1lLmNsaWVudFdpZHRoLzI7ZWxzZSB2YXIgaD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2FbMF1dXSxmPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbaC5wYXJlbnRJZF1dLGw9Zi5wb3NpdGlvblgsdT1mLnBvc2l0aW9uWTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXt2YXIgcD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2FbZF1dXTtpZighcC5pc0xvY2tlZCl7dmFyIG09bC1wLnBvc2l0aW9uWCxnPXUtcC5wb3NpdGlvblkseT1NYXRoLnNxcnQobSptK2cqZyk7aWYoeT5uKXt2YXIgdj1yLmdyYXZpdHkqbS95LHg9ci5ncmF2aXR5KmcveTtwLm9mZnNldFgrPXYscC5vZmZzZXRZKz14fX19fX0sImNhbGN1bGF0ZUdyYXZpdHlGb3JjZXMiKSxtZXQ9byhmdW5jdGlvbihlLHIpe3ZhciBuPVtdLGk9MCxhPS0xO2ZvcihuLnB1c2guYXBwbHkobixlLmdyYXBoU2V0WzBdKSxhKz1lLmdyYXBoU2V0WzBdLmxlbmd0aDtpPD1hOyl7dmFyIHM9bltpKytdLGw9ZS5pZFRvSW5kZXhbc10sdT1lLmxheW91dE5vZGVzW2xdLGg9dS5jaGlsZHJlbjtpZigwPGgubGVuZ3RoJiYhdS5pc0xvY2tlZCl7Zm9yKHZhciBmPXUub2Zmc2V0WCxkPXUub2Zmc2V0WSxwPTA7cDxoLmxlbmd0aDtwKyspe3ZhciBtPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbaFtwXV1dO20ub2Zmc2V0WCs9ZixtLm9mZnNldFkrPWQsblsrK2FdPWhbcF19dS5vZmZzZXRYPTAsdS5vZmZzZXRZPTB9fX0sInByb3BhZ2F0ZUZvcmNlcyIpLGdldD1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjxlLm5vZGVTaXplO24rKyl7dmFyIGk9ZS5sYXlvdXROb2Rlc1tuXTswPGkuY2hpbGRyZW4ubGVuZ3RoJiYoaS5tYXhYPXZvaWQgMCxpLm1pblg9dm9pZCAwLGkubWF4WT12b2lkIDAsaS5taW5ZPXZvaWQgMCl9Zm9yKHZhciBuPTA7bjxlLm5vZGVTaXplO24rKyl7dmFyIGk9ZS5sYXlvdXROb2Rlc1tuXTtpZighKDA8aS5jaGlsZHJlbi5sZW5ndGh8fGkuaXNMb2NrZWQpKXt2YXIgYT15ZXQoaS5vZmZzZXRYLGkub2Zmc2V0WSxlLnRlbXBlcmF0dXJlKTtpLnBvc2l0aW9uWCs9YS54LGkucG9zaXRpb25ZKz1hLnksaS5vZmZzZXRYPTAsaS5vZmZzZXRZPTAsaS5taW5YPWkucG9zaXRpb25YLWkud2lkdGgsaS5tYXhYPWkucG9zaXRpb25YK2kud2lkdGgsaS5taW5ZPWkucG9zaXRpb25ZLWkuaGVpZ2h0LGkubWF4WT1pLnBvc2l0aW9uWStpLmhlaWdodCx2ZXQoaSxlKX19Zm9yKHZhciBuPTA7bjxlLm5vZGVTaXplO24rKyl7dmFyIGk9ZS5sYXlvdXROb2Rlc1tuXTswPGkuY2hpbGRyZW4ubGVuZ3RoJiYhaS5pc0xvY2tlZCYmKGkucG9zaXRpb25YPShpLm1heFgraS5taW5YKS8yLGkucG9zaXRpb25ZPShpLm1heFkraS5taW5ZKS8yLGkud2lkdGg9aS5tYXhYLWkubWluWCxpLmhlaWdodD1pLm1heFktaS5taW5ZKX19LCJ1cGRhdGVQb3NpdGlvbnMiKSx5ZXQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9TWF0aC5zcXJ0KGUqZStyKnIpO2lmKGk+bil2YXIgYT17eDpuKmUvaSx5Om4qci9pfTtlbHNlIHZhciBhPXt4OmUseTpyfTtyZXR1cm4gYX0sImxpbWl0Rm9yY2UiKSx2ZXQ9byhmdW5jdGlvbiB0KGUscil7dmFyIG49ZS5wYXJlbnRJZDtpZihuIT1udWxsKXt2YXIgaT1yLmxheW91dE5vZGVzW3IuaWRUb0luZGV4W25dXSxhPSExO2lmKChpLm1heFg9PW51bGx8fGUubWF4WCtpLnBhZFJpZ2h0PmkubWF4WCkmJihpLm1heFg9ZS5tYXhYK2kucGFkUmlnaHQsYT0hMCksKGkubWluWD09bnVsbHx8ZS5taW5YLWkucGFkTGVmdDxpLm1pblgpJiYoaS5taW5YPWUubWluWC1pLnBhZExlZnQsYT0hMCksKGkubWF4WT09bnVsbHx8ZS5tYXhZK2kucGFkQm90dG9tPmkubWF4WSkmJihpLm1heFk9ZS5tYXhZK2kucGFkQm90dG9tLGE9ITApLChpLm1pblk9PW51bGx8fGUubWluWS1pLnBhZFRvcDxpLm1pblkpJiYoaS5taW5ZPWUubWluWS1pLnBhZFRvcCxhPSEwKSxhKXJldHVybiB0KGkscil9fSwidXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzIiksQ21lPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5sYXlvdXROb2RlcyxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXSxsPXMuY21wdElkLHU9aVtsXT1pW2xdfHxbXTt1LnB1c2gocyl9Zm9yKHZhciBoPTAsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgZj1pW2FdO2lmKGYpe2YueDE9MS8wLGYueDI9LTEvMCxmLnkxPTEvMCxmLnkyPS0xLzA7Zm9yKHZhciBkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWZbZF07Zi54MT1NYXRoLm1pbihmLngxLHAucG9zaXRpb25YLXAud2lkdGgvMiksZi54Mj1NYXRoLm1heChmLngyLHAucG9zaXRpb25YK3Aud2lkdGgvMiksZi55MT1NYXRoLm1pbihmLnkxLHAucG9zaXRpb25ZLXAuaGVpZ2h0LzIpLGYueTI9TWF0aC5tYXgoZi55MixwLnBvc2l0aW9uWStwLmhlaWdodC8yKX1mLnc9Zi54Mi1mLngxLGYuaD1mLnkyLWYueTEsaCs9Zi53KmYuaH19aS5zb3J0KGZ1bmN0aW9uKGIsdyl7cmV0dXJuIHcudyp3LmgtYi53KmIuaH0pO2Zvcih2YXIgbT0wLGc9MCx5PTAsdj0wLHg9TWF0aC5zcXJ0KGgpKmUuY2xpZW50V2lkdGgvZS5jbGllbnRIZWlnaHQsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgZj1pW2FdO2lmKGYpe2Zvcih2YXIgZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdO3AuaXNMb2NrZWR8fChwLnBvc2l0aW9uWCs9bS1mLngxLHAucG9zaXRpb25ZKz1nLWYueTEpfW0rPWYudytyLmNvbXBvbmVudFNwYWNpbmcseSs9Zi53K3IuY29tcG9uZW50U3BhY2luZyx2PU1hdGgubWF4KHYsZi5oKSx5PngmJihnKz12K3IuY29tcG9uZW50U3BhY2luZyxtPTAseT0wLHY9MCl9fX0sInNlcGFyYXRlQ29tcG9uZW50cyIpLHhldD17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxhdm9pZE92ZXJsYXBQYWRkaW5nOjEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxzcGFjaW5nRmFjdG9yOnZvaWQgMCxjb25kZW5zZTohMSxyb3dzOnZvaWQgMCxjb2xzOnZvaWQgMCxwb3NpdGlvbjpvKGZ1bmN0aW9uKGUpe30sInBvc2l0aW9uIiksc29ydDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKHQxZSwiR3JpZExheW91dCIpO3QxZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dCxyPXQuY3ksbj1lLmVsZXMsaT1uLm5vZGVzKCkubm90KCI6cGFyZW50Iik7ZS5zb3J0JiYoaT1pLnNvcnQoZS5zb3J0KSk7dmFyIGE9JHMoZS5ib3VuZGluZ0JveD9lLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpyLndpZHRoKCksaDpyLmhlaWdodCgpfSk7aWYoYS5oPT09MHx8YS53PT09MCluLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxmdW5jdGlvbihqKXtyZXR1cm57eDphLngxLHk6YS55MX19KTtlbHNle3ZhciBzPWkuc2l6ZSgpLGw9TWF0aC5zcXJ0KHMqYS5oL2EudyksdT1NYXRoLnJvdW5kKGwpLGg9TWF0aC5yb3VuZChhLncvYS5oKmwpLGY9byhmdW5jdGlvbihLKXtpZihLPT1udWxsKXJldHVybiBNYXRoLm1pbih1LGgpO3ZhciBpZT1NYXRoLm1pbih1LGgpO2llPT11P3U9SzpoPUt9LCJzbWFsbCIpLGQ9byhmdW5jdGlvbihLKXtpZihLPT1udWxsKXJldHVybiBNYXRoLm1heCh1LGgpO3ZhciBpZT1NYXRoLm1heCh1LGgpO2llPT11P3U9SzpoPUt9LCJsYXJnZSIpLHA9ZS5yb3dzLG09ZS5jb2xzIT1udWxsP2UuY29sczplLmNvbHVtbnM7aWYocCE9bnVsbCYmbSE9bnVsbCl1PXAsaD1tO2Vsc2UgaWYocCE9bnVsbCYmbT09bnVsbCl1PXAsaD1NYXRoLmNlaWwocy91KTtlbHNlIGlmKHA9PW51bGwmJm0hPW51bGwpaD1tLHU9TWF0aC5jZWlsKHMvaCk7ZWxzZSBpZihoKnU+cyl7dmFyIGc9ZigpLHk9ZCgpOyhnLTEpKnk+PXM/ZihnLTEpOih5LTEpKmc+PXMmJmQoeS0xKX1lbHNlIGZvcig7aCp1PHM7KXt2YXIgdj1mKCkseD1kKCk7KHgrMSkqdj49cz9kKHgrMSk6Zih2KzEpfXZhciBiPWEudy9oLHc9YS5oL3U7aWYoZS5jb25kZW5zZSYmKGI9MCx3PTApLGUuYXZvaWRPdmVybGFwKWZvcih2YXIgXz0wO188aS5sZW5ndGg7XysrKXt2YXIgVD1pW19dLEU9VC5fcHJpdmF0ZS5wb3NpdGlvbjsoRS54PT1udWxsfHxFLnk9PW51bGwpJiYoRS54PTAsRS55PTApO3ZhciBMPVQubGF5b3V0RGltZW5zaW9ucyhlKSxDPWUuYXZvaWRPdmVybGFwUGFkZGluZyxBPUwudytDLEk9TC5oK0M7Yj1NYXRoLm1heChiLEEpLHc9TWF0aC5tYXgodyxJKX1mb3IodmFyIEQ9e30saz1vKGZ1bmN0aW9uKEssaWUpe3JldHVybiEhRFsiYy0iK0srIi0iK2llXX0sInVzZWQiKSxSPW8oZnVuY3Rpb24oSyxpZSl7RFsiYy0iK0srIi0iK2llXT0hMH0sInVzZSIpLFM9MCxPPTAsTj1vKGZ1bmN0aW9uKCl7TysrLE8+PWgmJihPPTAsUysrKX0sIm1vdmVUb05leHRDZWxsIiksUD17fSxGPTA7RjxpLmxlbmd0aDtGKyspe3ZhciBCPWlbRl0sJD1lLnBvc2l0aW9uKEIpO2lmKCQmJigkLnJvdyE9PXZvaWQgMHx8JC5jb2whPT12b2lkIDApKXt2YXIgej17cm93OiQucm93LGNvbDokLmNvbH07aWYoei5jb2w9PT12b2lkIDApZm9yKHouY29sPTA7ayh6LnJvdyx6LmNvbCk7KXouY29sKys7ZWxzZSBpZih6LnJvdz09PXZvaWQgMClmb3Ioei5yb3c9MDtrKHoucm93LHouY29sKTspei5yb3crKztQW0IuaWQoKV09eixSKHoucm93LHouY29sKX19dmFyIFc9byhmdW5jdGlvbihLLGllKXt2YXIgUSxlZTtpZihLLmxvY2tlZCgpfHxLLmlzUGFyZW50KCkpcmV0dXJuITE7dmFyIEo9UFtLLmlkKCldO2lmKEopUT1KLmNvbCpiK2IvMithLngxLGVlPUoucm93Kncrdy8yK2EueTE7ZWxzZXtmb3IoO2soUyxPKTspTigpO1E9TypiK2IvMithLngxLGVlPVMqdyt3LzIrYS55MSxSKFMsTyksTigpfXJldHVybnt4OlEseTplZX19LCJnZXRQb3MiKTtpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsVyl9cmV0dXJuIHRoaXN9O2JldD17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpfTtvKHZCLCJOdWxsTGF5b3V0Iik7dkIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuZWxlcyxyPXRoaXM7cmV0dXJuIHQuY3ksci5lbWl0KCJsYXlvdXRzdGFydCIpLGUubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSxyLm9uZSgibGF5b3V0cmVhZHkiLHQucmVhZHkpLHIuZW1pdCgibGF5b3V0cmVhZHkiKSxyLm9uZSgibGF5b3V0c3RvcCIsdC5zdG9wKSxyLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfTt2Qi5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt3ZXQ9e3Bvc2l0aW9uczp2b2lkIDAsem9vbTp2b2lkIDAscGFuOnZvaWQgMCxmaXQ6ITAscGFkZGluZzozMCxzcGFjaW5nRmFjdG9yOnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28ocjFlLCJQcmVzZXRMYXlvdXQiKTtyMWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuZWxlcyxyPWUubm9kZXMoKSxuPXRpKHQucG9zaXRpb25zKTtmdW5jdGlvbiBpKGEpe2lmKHQucG9zaXRpb25zPT1udWxsKXJldHVybiBFamUoYS5wb3NpdGlvbigpKTtpZihuKXJldHVybiB0LnBvc2l0aW9ucyhhKTt2YXIgcz10LnBvc2l0aW9uc1thLl9wcml2YXRlLmRhdGEuaWRdO3JldHVybiBzPz9udWxsfXJldHVybiBvKGksImdldFBvc2l0aW9uIiksci5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGZ1bmN0aW9uKGEscyl7dmFyIGw9aShhKTtyZXR1cm4gYS5sb2NrZWQoKXx8bD09bnVsbD8hMTpsfSksdGhpc307VGV0PXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKG4xZSwiUmFuZG9tTGF5b3V0Iik7bjFlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmN5LHI9dC5lbGVzLG49JHModC5ib3VuZGluZ0JveD90LmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzplLndpZHRoKCksaDplLmhlaWdodCgpfSksaT1vKGZ1bmN0aW9uKHMsbCl7cmV0dXJue3g6bi54MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqbi53KSx5Om4ueTErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKm4uaCl9fSwiZ2V0UG9zIik7cmV0dXJuIHIubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGkpLHRoaXN9O2tldD1be25hbWU6ImJyZWFkdGhmaXJzdCIsaW1wbDpRZ2V9LHtuYW1lOiJjaXJjbGUiLGltcGw6WmdlfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDpKZ2V9LHtuYW1lOiJjb3NlIixpbXBsOkc2fSx7bmFtZToiZ3JpZCIsaW1wbDp0MWV9LHtuYW1lOiJudWxsIixpbXBsOnZCfSx7bmFtZToicHJlc2V0IixpbXBsOnIxZX0se25hbWU6InJhbmRvbSIsaW1wbDpuMWV9XTtvKGkxZSwiTnVsbFJlbmRlcmVyIik7QW1lPW8oZnVuY3Rpb24oKXt9LCJub29wIiksX21lPW8oZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9LCJ0aHJvd0ltZ0VyciIpO2kxZS5wcm90b3R5cGU9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpBbWUsbm90aWZ5Om8oZnVuY3Rpb24oKXt0aGlzLm5vdGlmaWNhdGlvbnMrK30sIm5vdGlmeSIpLGluaXQ6QW1lLGlzSGVhZGxlc3M6byhmdW5jdGlvbigpe3JldHVybiEwfSwiaXNIZWFkbGVzcyIpLHBuZzpfbWUsanBnOl9tZX07eEI9e307eEIuYXJyb3dTaGFwZVdpZHRoPS4zO3hCLnJlZ2lzdGVyQXJyb3dTaGFwZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmFycm93U2hhcGVzPXt9LGU9dGhpcyxyPW8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9bS54LWQvMi15LHg9bS54K2QvMit5LGI9bS55LWQvMi15LHc9bS55K2QvMit5LF89djw9aCYmaDw9eCYmYjw9ZiYmZjw9dztyZXR1cm4gX30sImJiQ29sbGlkZSIpLG49byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWgqTWF0aC5jb3MocCktZipNYXRoLnNpbihwKSx5PWgqTWF0aC5zaW4ocCkrZipNYXRoLmNvcyhwKSx2PWcqZCx4PXkqZCxiPXYrbS54LHc9eCttLnk7cmV0dXJue3g6Yix5Ond9fSwidHJhbnNmb3JtIiksaT1vKGZ1bmN0aW9uKGgsZixkLHApe2Zvcih2YXIgbT1bXSxnPTA7ZzxoLmxlbmd0aDtnKz0yKXt2YXIgeT1oW2ddLHY9aFtnKzFdO20ucHVzaChuKHksdixmLGQscCkpfXJldHVybiBtfSwidHJhbnNmb3JtUG9pbnRzIiksYT1vKGZ1bmN0aW9uKGgpe2Zvcih2YXIgZj1bXSxkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBwPWhbZF07Zi5wdXNoKHAueCxwLnkpfXJldHVybiBmfSwicG9pbnRzVG9BcnIiKSxzPW8oZnVuY3Rpb24oaCl7cmV0dXJuIGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqaC5wc3R5bGUoImFycm93LXNjYWxlIikucGZWYWx1ZSoyfSwic3RhbmRhcmRHYXAiKSxsPW8oZnVuY3Rpb24oaCxmKXtadChmKSYmKGY9dFtmXSksdFtoXT1pcih7bmFtZTpoLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpvKGZ1bmN0aW9uKHAsbSxnLHksdix4KXt2YXIgYj1hKGkodGhpcy5wb2ludHMsZysyKngseSx2KSksdz1HcyhwLG0sYik7cmV0dXJuIHd9LCJjb2xsaWRlIikscm91Z2hDb2xsaWRlOnIsZHJhdzpvKGZ1bmN0aW9uKHAsbSxnLHkpe3ZhciB2PWkodGhpcy5wb2ludHMsbSxnLHkpO2UuYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShwLHYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihwKXtyZXR1cm4gMH0sInNwYWNpbmciKSxnYXA6c30sZil9LCJkZWZpbmVBcnJvd1NoYXBlIik7bCgibm9uZSIse2NvbGxpZGU6ZzYscm91Z2hDb2xsaWRlOmc2LGRyYXc6aUIsc3BhY2luZzpGcGUsZ2FwOkZwZX0pLGwoInRyaWFuZ2xlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uM119KSxsKCJhcnJvdyIsInRyaWFuZ2xlIiksbCgidHJpYW5nbGUtYmFja2N1cnZlIix7cG9pbnRzOnQudHJpYW5nbGUucG9pbnRzLGNvbnRyb2xQb2ludDpbMCwtLjE1XSxyb3VnaENvbGxpZGU6cixkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PXRoaXMuY29udHJvbFBvaW50LHY9bih5WzBdLHlbMV0sZixkLHApO2UuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShoLGcsdil9LCJkcmF3IiksZ2FwOm8oZnVuY3Rpb24oaCl7cmV0dXJuIHMoaCkqLjh9LCJnYXAiKX0pLGwoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PWEoaSh0aGlzLnBvaW50cyxkKzIqeSxwLG0pKSx4PWEoaSh0aGlzLnBvaW50c1RlZSxkKzIqeSxwLG0pKSxiPUdzKGgsZix2KXx8R3MoaCxmLHgpO3JldHVybiBifSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHMsZixkLHApLHk9aSh0aGlzLnBvaW50c1RlZSxmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyx5KX0sImRyYXciKX0pLGwoImNpcmNsZS10cmlhbmdsZSIse3JhZGl1czouMTUscG9pbnRzVHI6WzAsLS4xNSwuMTUsLS40NSwtLjE1LC0uNDUsMCwtLjE1XSxjb2xsaWRlOm8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9bSx4PU1hdGgucG93KHYueC1oLDIpK01hdGgucG93KHYueS1mLDIpPD1NYXRoLnBvdygoZCsyKnkpKnRoaXMucmFkaXVzLDIpLGI9YShpKHRoaXMucG9pbnRzLGQrMip5LHAsbSkpO3JldHVybiBHcyhoLGYsYil8fHh9LCJjb2xsaWRlIiksZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7dmFyIGc9aSh0aGlzLnBvaW50c1RyLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHAueCxwLnksdGhpcy5yYWRpdXMqZil9LCJkcmF3Iiksc3BhY2luZzpvKGZ1bmN0aW9uKGgpe3JldHVybiBlLmdldEFycm93V2lkdGgoaC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxoLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9LCJzcGFjaW5nIil9KSxsKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpvKGZ1bmN0aW9uKGgsZil7dmFyIGQ9dGhpcy5iYXNlQ3Jvc3NMaW5lUHRzLnNsaWNlKCkscD1mL2gsbT0zLGc9NTtyZXR1cm4gZFttXT1kW21dLXAsZFtnXT1kW2ddLXAsZH0sImNyb3NzTGluZVB0cyIpLGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1hKGkodGhpcy5wb2ludHMsZCsyKnkscCxtKSkseD1hKGkodGhpcy5jcm9zc0xpbmVQdHMoZCxnKSxkKzIqeSxwLG0pKSxiPUdzKGgsZix2KXx8R3MoaCxmLHgpO3JldHVybiBifSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHMsZixkLHApLHk9aSh0aGlzLmNyb3NzTGluZVB0cyhmLG0pLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHkpfSwiZHJhdyIpfSksbCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBzKGgpKi41MjV9LCJnYXAiKX0pLGwoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0seD1NYXRoLnBvdyh2LngtaCwyKStNYXRoLnBvdyh2LnktZiwyKTw9TWF0aC5wb3coKGQrMip5KSp0aGlzLnJhZGl1cywyKTtyZXR1cm4geH0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxwLngscC55LHRoaXMucmFkaXVzKmYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gZS5nZXRBcnJvd1dpZHRoKGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMucmFkaXVzfSwic3BhY2luZyIpfSksbCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpvKGZ1bmN0aW9uKGgpe3JldHVybiAxfSwic3BhY2luZyIpLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiAxfSwiZ2FwIil9KSxsKCJzcXVhcmUiLHtwb2ludHM6Wy0uMTUsMCwuMTUsMCwuMTUsLS4zLC0uMTUsLS4zXX0pLGwoImRpYW1vbmQiLHtwb2ludHM6Wy0uMTUsLS4xNSwwLC0uMywuMTUsLS4xNSwwLDBdLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfSwiZ2FwIil9KSxsKCJjaGV2cm9uIix7cG9pbnRzOlswLDAsLS4xNSwtLjE1LC0uMSwtLjIsMCwtLjEsLjEsLS4yLC4xNSwtLjE1XSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gLjk1KmgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9LCJnYXAiKX0pfTtXMD17fTtXMC5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jeSxuPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGk9blswXSxhPW5bMV0scz1uWzRdLGw9ci5wYW4oKSx1PXIuem9vbSgpLGg9KCh0LWkpL3MtbC54KS91LGY9KChlLWEpL3MtbC55KS91O3JldHVybltoLGZdfTtXMC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgdD10aGlzLmNvbnRhaW5lcixlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLmN5LndpbmRvdygpLmdldENvbXB1dGVkU3R5bGUodCksbj1vKGZ1bmN0aW9uKHgpe3JldHVybiBwYXJzZUZsb2F0KHIuZ2V0UHJvcGVydHlWYWx1ZSh4KSl9LCJzdHlsZVZhbHVlIiksaT17bGVmdDpuKCJwYWRkaW5nLWxlZnQiKSxyaWdodDpuKCJwYWRkaW5nLXJpZ2h0IiksdG9wOm4oInBhZGRpbmctdG9wIiksYm90dG9tOm4oInBhZGRpbmctYm90dG9tIil9LGE9e2xlZnQ6bigiYm9yZGVyLWxlZnQtd2lkdGgiKSxyaWdodDpuKCJib3JkZXItcmlnaHQtd2lkdGgiKSx0b3A6bigiYm9yZGVyLXRvcC13aWR0aCIpLGJvdHRvbTpuKCJib3JkZXItYm90dG9tLXdpZHRoIil9LHM9dC5jbGllbnRXaWR0aCxsPXQuY2xpZW50SGVpZ2h0LHU9aS5sZWZ0K2kucmlnaHQsaD1pLnRvcCtpLmJvdHRvbSxmPWEubGVmdCthLnJpZ2h0LGQ9ZS53aWR0aC8ocytmKSxwPXMtdSxtPWwtaCxnPWUubGVmdCtpLmxlZnQrYS5sZWZ0LHk9ZS50b3AraS50b3ArYS50b3A7cmV0dXJuIHRoaXMuY29udGFpbmVyQkI9W2cseSxwLG0sZF19O1cwLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH07VzAuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHModCxlLHIsbilbMF19O1cwLmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPXRoaXMscz1hLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksbD1bXSx1PWEuY3kuem9vbSgpLGg9YS5jeS5oYXNDb21wb3VuZE5vZGVzKCksZj0obj8yNDo4KS91LGQ9KG4/ODoyKS91LHA9KG4/ODoyKS91LG09MS8wLGcseTtyJiYocz1zLmludGVyYWN0aXZlKTtmdW5jdGlvbiB2KEwsQyl7aWYoTC5pc05vZGUoKSl7aWYoeSlyZXR1cm47eT1MLGwucHVzaChMKX1pZihMLmlzRWRnZSgpJiYoQz09bnVsbHx8QzxtKSlpZihnKXtpZihnLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09TC5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZSYmZy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PUwucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgQT0wO0E8bC5sZW5ndGg7QSsrKWlmKGxbQV0uaXNFZGdlKCkpe2xbQV09TCxnPUwsbT1DPz9tO2JyZWFrfX19ZWxzZSBsLnB1c2goTCksZz1MLG09Qz8/bX1vKHYsImFkZEVsZSIpO2Z1bmN0aW9uIHgoTCl7dmFyIEM9TC5vdXRlcldpZHRoKCkrMipkLEE9TC5vdXRlckhlaWdodCgpKzIqZCxJPUMvMixEPUEvMixrPUwucG9zaXRpb24oKSxSPUwucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOkwucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxTPUwuX3ByaXZhdGUucnNjcmF0Y2g7aWYoay54LUk8PXQmJnQ8PWsueCtJJiZrLnktRDw9ZSYmZTw9ay55K0Qpe3ZhciBPPWEubm9kZVNoYXBlc1tpLmdldE5vZGVTaGFwZShMKV07aWYoTy5jaGVja1BvaW50KHQsZSwwLEMsQSxrLngsay55LFIsUykpcmV0dXJuIHYoTCwwKSwhMH19byh4LCJjaGVja05vZGUiKTtmdW5jdGlvbiBiKEwpe3ZhciBDPUwuX3ByaXZhdGUsQT1DLnJzY3JhdGNoLEk9TC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxEPUwucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGs9SS8yK2YsUj1rKmssUz1rKjIsRj1DLnNvdXJjZSxCPUMudGFyZ2V0LE87aWYoQS5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEEuZWRnZVR5cGU9PT0ic3RyYWlnaHQifHxBLmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBOPUEuYWxscHRzLFA9MDtQKzM8Ti5sZW5ndGg7UCs9MilpZihCamUodCxlLE5bUF0sTltQKzFdLE5bUCsyXSxOW1ArM10sUykmJlI+KE89VmplKHQsZSxOW1BdLE5bUCsxXSxOW1ArMl0sTltQKzNdKSkpcmV0dXJuIHYoTCxPKSwhMH1lbHNlIGlmKEEuZWRnZVR5cGU9PT0iYmV6aWVyInx8QS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEEuZWRnZVR5cGU9PT0ic2VsZiJ8fEEuZWRnZVR5cGU9PT0iY29tcG91bmQiKXtmb3IodmFyIE49QS5hbGxwdHMsUD0wO1ArNTxBLmFsbHB0cy5sZW5ndGg7UCs9NClpZihGamUodCxlLE5bUF0sTltQKzFdLE5bUCsyXSxOW1ArM10sTltQKzRdLE5bUCs1XSxTKSYmUj4oTz0kamUodCxlLE5bUF0sTltQKzFdLE5bUCsyXSxOW1ArM10sTltQKzRdLE5bUCs1XSkpKXJldHVybiB2KEwsTyksITB9Zm9yKHZhciBGPUZ8fEMuc291cmNlLEI9Qnx8Qy50YXJnZXQsJD1pLmdldEFycm93V2lkdGgoSSxEKSx6PVt7bmFtZToic291cmNlIix4OkEuYXJyb3dTdGFydFgseTpBLmFycm93U3RhcnRZLGFuZ2xlOkEuc3JjQXJyb3dBbmdsZX0se25hbWU6InRhcmdldCIseDpBLmFycm93RW5kWCx5OkEuYXJyb3dFbmRZLGFuZ2xlOkEudGd0QXJyb3dBbmdsZX0se25hbWU6Im1pZC1zb3VyY2UiLHg6QS5taWRYLHk6QS5taWRZLGFuZ2xlOkEubWlkc3JjQXJyb3dBbmdsZX0se25hbWU6Im1pZC10YXJnZXQiLHg6QS5taWRYLHk6QS5taWRZLGFuZ2xlOkEubWlkdGd0QXJyb3dBbmdsZX1dLFA9MDtQPHoubGVuZ3RoO1ArKyl7dmFyIFc9eltQXSxqPWEuYXJyb3dTaGFwZXNbTC5wc3R5bGUoVy5uYW1lKyItYXJyb3ctc2hhcGUiKS52YWx1ZV0sSz1MLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlO2lmKGoucm91Z2hDb2xsaWRlKHQsZSwkLFcuYW5nbGUse3g6Vy54LHk6Vy55fSxLLGYpJiZqLmNvbGxpZGUodCxlLCQsVy5hbmdsZSx7eDpXLngseTpXLnl9LEssZikpcmV0dXJuIHYoTCksITB9aCYmbC5sZW5ndGg+MCYmKHgoRikseChCKSl9byhiLCJjaGVja0VkZ2UiKTtmdW5jdGlvbiB3KEwsQyxBKXtyZXR1cm4gV2woTCxDLEEpfW8odywicHJlcHJvcCIpO2Z1bmN0aW9uIF8oTCxDKXt2YXIgQT1MLl9wcml2YXRlLEk9cCxEO0M/RD1DKyItIjpEPSIiLEwuYm91bmRpbmdCb3goKTt2YXIgaz1BLmxhYmVsQm91bmRzW0N8fCJtYWluIl0sUj1MLnBzdHlsZShEKyJsYWJlbCIpLnZhbHVlLFM9TC5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFTfHwhUikpe3ZhciBPPXcoQS5yc2NyYXRjaCwibGFiZWxYIixDKSxOPXcoQS5yc2NyYXRjaCwibGFiZWxZIixDKSxQPXcoQS5yc2NyYXRjaCwibGFiZWxBbmdsZSIsQyksRj1MLnBzdHlsZShEKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxCPUwucHN0eWxlKEQrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLCQ9ay54MS1JLUYsej1rLngyK0ktRixXPWsueTEtSS1CLGo9ay55MitJLUI7aWYoUCl7dmFyIEs9TWF0aC5jb3MoUCksaWU9TWF0aC5zaW4oUCksUT1vKGZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gdWU9dWUtTyxjZT1jZS1OLHt4OnVlKkstY2UqaWUrTyx5OnVlKmllK2NlKksrTn19LCJyb3RhdGUiKSxlZT1RKCQsVyksSj1RKCQsaiksSD1RKHosVykscT1RKHosaiksWj1bZWUueCtGLGVlLnkrQixILngrRixILnkrQixxLngrRixxLnkrQixKLngrRixKLnkrQl07aWYoR3ModCxlLFopKXJldHVybiB2KEwpLCEwfWVsc2UgaWYoYzEoayx0LGUpKXJldHVybiB2KEwpLCEwfX1vKF8sImNoZWNrTGFiZWwiKTtmb3IodmFyIFQ9cy5sZW5ndGgtMTtUPj0wO1QtLSl7dmFyIEU9c1tUXTtFLmlzTm9kZSgpP3goRSl8fF8oRSk6YihFKXx8XyhFKXx8XyhFLCJzb3VyY2UiKXx8XyhFLCJ0YXJnZXQiKX1yZXR1cm4gbH07VzAuZ2V0QWxsSW5Cb3g9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmludGVyYWN0aXZlLGE9W10scz1NYXRoLm1pbih0LHIpLGw9TWF0aC5tYXgodCxyKSx1PU1hdGgubWluKGUsbiksaD1NYXRoLm1heChlLG4pO3Q9cyxyPWwsZT11LG49aDtmb3IodmFyIGY9JHMoe3gxOnQseTE6ZSx4MjpyLHkyOm59KSxkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciBwPWlbZF07aWYocC5pc05vZGUoKSl7dmFyIG09cCxnPW0uYm91bmRpbmdCb3goe2luY2x1ZGVOb2RlczohMCxpbmNsdWRlRWRnZXM6ITEsaW5jbHVkZUxhYmVsczohMX0pO29CKGYsZykmJiFkZ2UoZyxmKSYmYS5wdXNoKG0pfWVsc2V7dmFyIHk9cCx2PXkuX3ByaXZhdGUseD12LnJzY3JhdGNoO2lmKHguc3RhcnRYIT1udWxsJiZ4LnN0YXJ0WSE9bnVsbCYmIWMxKGYseC5zdGFydFgseC5zdGFydFkpfHx4LmVuZFghPW51bGwmJnguZW5kWSE9bnVsbCYmIWMxKGYseC5lbmRYLHguZW5kWSkpY29udGludWU7aWYoeC5lZGdlVHlwZT09PSJiZXppZXIifHx4LmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyInx8eC5lZGdlVHlwZT09PSJzZWxmInx8eC5lZGdlVHlwZT09PSJjb21wb3VuZCJ8fHguZWRnZVR5cGU9PT0ic2VnbWVudHMifHx4LmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBiPXYucnN0eWxlLmJlemllclB0c3x8di5yc3R5bGUubGluZVB0c3x8di5yc3R5bGUuaGF5c3RhY2tQdHMsdz0hMCxfPTA7XzxiLmxlbmd0aDtfKyspaWYoIVBqZShmLGJbX10pKXt3PSExO2JyZWFrfXcmJmEucHVzaCh5KX1lbHNlKHguZWRnZVR5cGU9PT0iaGF5c3RhY2sifHx4LmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJmEucHVzaCh5KX19cmV0dXJuIGF9O2s2PXt9O2s2LmNhbGN1bGF0ZUFycm93QW5nbGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGUucnNjcmF0Y2gscj1lLmVkZ2VUeXBlPT09ImhheXN0YWNrIixuPWUuZWRnZVR5cGU9PT0iYmV6aWVyIixpPWUuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIiLGE9ZS5lZGdlVHlwZT09PSJzZWdtZW50cyIscz1lLmVkZ2VUeXBlPT09ImNvbXBvdW5kIixsPWUuZWRnZVR5cGU9PT0ic2VsZiIsdSxoLGYsZCxwLG0seCxiO2lmKHI/KGY9ZS5oYXlzdGFja1B0c1swXSxkPWUuaGF5c3RhY2tQdHNbMV0scD1lLmhheXN0YWNrUHRzWzJdLG09ZS5oYXlzdGFja1B0c1szXSk6KGY9ZS5hcnJvd1N0YXJ0WCxkPWUuYXJyb3dTdGFydFkscD1lLmFycm93RW5kWCxtPWUuYXJyb3dFbmRZKSx4PWUubWlkWCxiPWUubWlkWSxhKXU9Zi1lLnNlZ3B0c1swXSxoPWQtZS5zZWdwdHNbMV07ZWxzZSBpZihpfHxzfHxsfHxuKXt2YXIgZz1lLmFsbHB0cyx5PWlhKGdbMF0sZ1syXSxnWzRdLC4xKSx2PWlhKGdbMV0sZ1szXSxnWzVdLC4xKTt1PWYteSxoPWQtdn1lbHNlIHU9Zi14LGg9ZC1iO2Uuc3JjQXJyb3dBbmdsZT1YRSh1LGgpO3ZhciB4PWUubWlkWCxiPWUubWlkWTtpZihyJiYoeD0oZitwKS8yLGI9KGQrbSkvMiksdT1wLWYsaD1tLWQsYSl7dmFyIGc9ZS5hbGxwdHM7aWYoZy5sZW5ndGgvMiUyPT09MCl7dmFyIHc9Zy5sZW5ndGgvMixfPXctMjt1PWdbd10tZ1tfXSxoPWdbdysxXS1nW18rMV19ZWxzZSBpZihlLmlzUm91bmQpdT1lLm1pZFZlY3RvclsxXSxoPS1lLm1pZFZlY3RvclswXTtlbHNle3ZhciB3PWcubGVuZ3RoLzItMSxfPXctMjt1PWdbd10tZ1tfXSxoPWdbdysxXS1nW18rMV19fWVsc2UgaWYoaXx8c3x8bCl7dmFyIGc9ZS5hbGxwdHMsVD1lLmN0cmxwdHMsRSxMLEMsQTtpZihULmxlbmd0aC8yJTI9PT0wKXt2YXIgST1nLmxlbmd0aC8yLTEsRD1JKzIsaz1EKzI7RT1pYShnW0ldLGdbRF0sZ1trXSwwKSxMPWlhKGdbSSsxXSxnW0QrMV0sZ1trKzFdLDApLEM9aWEoZ1tJXSxnW0RdLGdba10sMWUtNCksQT1pYShnW0krMV0sZ1tEKzFdLGdbaysxXSwxZS00KX1lbHNle3ZhciBEPWcubGVuZ3RoLzItMSxJPUQtMixrPUQrMjtFPWlhKGdbSV0sZ1tEXSxnW2tdLC40OTk5KSxMPWlhKGdbSSsxXSxnW0QrMV0sZ1trKzFdLC40OTk5KSxDPWlhKGdbSV0sZ1tEXSxnW2tdLC41KSxBPWlhKGdbSSsxXSxnW0QrMV0sZ1trKzFdLC41KX11PUMtRSxoPUEtTH1pZihlLm1pZHRndEFycm93QW5nbGU9WEUodSxoKSxlLm1pZERpc3BYPXUsZS5taWREaXNwWT1oLHUqPS0xLGgqPS0xLGEpe3ZhciBnPWUuYWxscHRzO2lmKGcubGVuZ3RoLzIlMiE9PTApe2lmKCFlLmlzUm91bmQpe3ZhciB3PWcubGVuZ3RoLzItMSxSPXcrMjt1PS0oZ1tSXS1nW3ddKSxoPS0oZ1tSKzFdLWdbdysxXSl9fX1pZihlLm1pZHNyY0Fycm93QW5nbGU9WEUodSxoKSxhKXU9cC1lLnNlZ3B0c1tlLnNlZ3B0cy5sZW5ndGgtMl0saD1tLWUuc2VncHRzW2Uuc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKGl8fHN8fGx8fG4pe3ZhciBnPWUuYWxscHRzLFM9Zy5sZW5ndGgseT1pYShnW1MtNl0sZ1tTLTRdLGdbUy0yXSwuOSksdj1pYShnW1MtNV0sZ1tTLTNdLGdbUy0xXSwuOSk7dT1wLXksaD1tLXZ9ZWxzZSB1PXAteCxoPW0tYjtlLnRndEFycm93QW5nbGU9WEUodSxoKX07azYuZ2V0QXJyb3dXaWR0aD1rNi5nZXRBcnJvd0hlaWdodD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuYXJyb3dXaWR0aENhY2hlPXRoaXMuYXJyb3dXaWR0aENhY2hlfHx7fSxuPXJbdCsiLCAiK2VdO3JldHVybiBufHwobj1NYXRoLm1heChNYXRoLnBvdyh0KjEzLjM3LC45KSwyOSkqZSxyW3QrIiwgIitlXT1uLG4pfTskYz17fSxubD17fSxSbWU9byhmdW5jdGlvbihlLHIsbil7bi54PXIueC1lLngsbi55PXIueS1lLnksbi5sZW49TWF0aC5zcXJ0KG4ueCpuLngrbi55Km4ueSksbi5ueD1uLngvbi5sZW4sbi5ueT1uLnkvbi5sZW4sbi5hbmc9TWF0aC5hdGFuMihuLm55LG4ubngpfSwiYXNWZWMiKSxFZXQ9byhmdW5jdGlvbihlLHIpe3IueD1lLngqLTEsci55PWUueSotMSxyLm54PWUubngqLTEsci5ueT1lLm55Ki0xLHIuYW5nPWUuYW5nPjA/LShNYXRoLlBJLWUuYW5nKTpNYXRoLlBJK2UuYW5nfSwiaW52ZXJ0VmVjIiksQ2V0PW8oZnVuY3Rpb24oZSxyLG4saSxhKXtpZihlIT09Tm1lP1JtZShyLGUsJGMpOkVldChubCwkYyksUm1lKHIsbixubCksTG1lPSRjLm54Km5sLm55LSRjLm55Km5sLm54LERtZT0kYy5ueCpubC5ueC0kYy5ueSotbmwubnkscXU9TWF0aC5hc2luKE1hdGgubWF4KC0xLE1hdGgubWluKDEsTG1lKSkpLE1hdGguYWJzKHF1KTwxZS02KXtXUD1yLngsWVA9ci55LE8wPWUxPTA7cmV0dXJufVAwPTEsZjY9ITEsRG1lPDA/cXU8MD9xdT1NYXRoLlBJK3F1OihxdT1NYXRoLlBJLXF1LFAwPS0xLGY2PSEwKTpxdT4wJiYoUDA9LTEsZjY9ITApLHIucmFkaXVzIT09dm9pZCAwP2UxPXIucmFkaXVzOmUxPWksTjA9cXUvMixuNj1NYXRoLm1pbigkYy5sZW4vMixubC5sZW4vMiksYT8oR2M9TWF0aC5hYnMoTWF0aC5jb3MoTjApKmUxL01hdGguc2luKE4wKSksR2M+bjY/KEdjPW42LE8wPU1hdGguYWJzKEdjKk1hdGguc2luKE4wKS9NYXRoLmNvcyhOMCkpKTpPMD1lMSk6KEdjPU1hdGgubWluKG42LGUxKSxPMD1NYXRoLmFicyhHYypNYXRoLnNpbihOMCkvTWF0aC5jb3MoTjApKSkscVA9ci54K25sLm54KkdjLFhQPXIueStubC5ueSpHYyxXUD1xUC1ubC5ueSpPMCpQMCxZUD1YUCtubC5ueCpPMCpQMCxhMWU9ci54KyRjLm54KkdjLHMxZT1yLnkrJGMubnkqR2MsTm1lPXJ9LCJjYWxjQ29ybmVyQXJjIik7byhvMWUsImRyYXdQcmVwYXJlZFJvdW5kQ29ybmVyIik7byhiQiwiZ2V0Um91bmRDb3JuZXIiKTtHYT17fTtHYS5maW5kTWlkcHRQdHNFdGM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnBvc1B0cyxuPWUuaW50ZXJzZWN0aW9uUHRzLGk9ZS52ZWN0b3JOb3JtSW52ZXJzZSxhLHM9dC5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLGw9dC5wc3R5bGUoInRhcmdldC1lbmRwb2ludCIpLHU9cy51bml0cyE9bnVsbCYmbC51bml0cyE9bnVsbCxoPW8oZnVuY3Rpb24oVCxFLEwsQyl7dmFyIEE9Qy1FLEk9TC1ULEQ9TWF0aC5zcXJ0KEkqSStBKkEpO3JldHVybnt4Oi1BL0QseTpJL0R9fSwicmVjYWxjVmVjdG9yTm9ybUludmVyc2UiKSxmPXQucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlO3N3aXRjaChmKXtjYXNlIm5vZGUtcG9zaXRpb24iOmE9cjticmVhaztjYXNlImludGVyc2VjdGlvbiI6YT1uO2JyZWFrO2Nhc2UiZW5kcG9pbnRzIjp7aWYodSl7dmFyIGQ9dGhpcy5tYW51YWxFbmRwdFRvUHgodC5zb3VyY2UoKVswXSxzKSxwPVVsKGQsMiksbT1wWzBdLGc9cFsxXSx5PXRoaXMubWFudWFsRW5kcHRUb1B4KHQudGFyZ2V0KClbMF0sbCksdj1VbCh5LDIpLHg9dlswXSxiPXZbMV0sdz17eDE6bSx5MTpnLHgyOngseTI6Yn07aT1oKG0sZyx4LGIpLGE9d31lbHNlIG9uKCJFZGdlICIuY29uY2F0KHQuaWQoKSwiIGhhcyBlZGdlLWRpc3RhbmNlczplbmRwb2ludHMgc3BlY2lmaWVkIHdpdGhvdXQgbWFudWFsIGVuZHBvaW50cyBzcGVjaWZpZWQgdmlhIHNvdXJjZS1lbmRwb2ludCBhbmQgdGFyZ2V0LWVuZHBvaW50LiAgRmFsbGluZyBiYWNrIG9uIGVkZ2UtZGlzdGFuY2VzOmludGVyc2VjdGlvbiAoZGVmYXVsdCkuIikpLGE9bjticmVha319cmV0dXJue21pZHB0UHRzOmEsdmVjdG9yTm9ybUludmVyc2U6aX19O0dhLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXSxuPXIuX3ByaXZhdGUsaT1uLnJzY3JhdGNoO2lmKCFpLmhheXN0YWNrKXt2YXIgYT1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtpLnNvdXJjZT17eDpNYXRoLmNvcyhhKSx5Ok1hdGguc2luKGEpfSxhPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLGkudGFyZ2V0PXt4Ok1hdGguY29zKGEpLHk6TWF0aC5zaW4oYSl9fXZhciBzPW4uc291cmNlLGw9bi50YXJnZXQsdT1zLnBvc2l0aW9uKCksaD1sLnBvc2l0aW9uKCksZj1zLndpZHRoKCksZD1sLndpZHRoKCkscD1zLmhlaWdodCgpLG09bC5oZWlnaHQoKSxnPXIucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSx5PWcvMjtpLmhheXN0YWNrUHRzPWkuYWxscHRzPVtpLnNvdXJjZS54KmYqeSt1LngsaS5zb3VyY2UueSpwKnkrdS55LGkudGFyZ2V0LngqZCp5K2gueCxpLnRhcmdldC55Km0qeStoLnldLGkubWlkWD0oaS5hbGxwdHNbMF0raS5hbGxwdHNbMl0pLzIsaS5taWRZPShpLmFsbHB0c1sxXStpLmFsbHB0c1szXSkvMixpLmVkZ2VUeXBlPSJoYXlzdGFjayIsaS5oYXlzdGFjaz0hMCx0aGlzLnN0b3JlRWRnZVByb2plY3Rpb25zKHIpLHRoaXMuY2FsY3VsYXRlQXJyb3dBbmdsZXMociksdGhpcy5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKHIpLHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMocil9fTtHYS5maW5kU2VnbWVudHNQb2ludHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLnJzY3JhdGNoLG49dC5wc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIpLGk9dC5wc3R5bGUoInNlZ21lbnQtZGlzdGFuY2VzIiksYT10LnBzdHlsZSgic2VnbWVudC1yYWRpaSIpLHM9dC5wc3R5bGUoInJhZGl1cy10eXBlIiksbD1NYXRoLm1pbihuLnBmVmFsdWUubGVuZ3RoLGkucGZWYWx1ZS5sZW5ndGgpLHU9YS5wZlZhbHVlW2EucGZWYWx1ZS5sZW5ndGgtMV0saD1zLnBmVmFsdWVbcy5wZlZhbHVlLmxlbmd0aC0xXTtyLmVkZ2VUeXBlPSJzZWdtZW50cyIsci5zZWdwdHM9W10sci5yYWRpaT1bXSxyLmlzQXJjUmFkaXVzPVtdO2Zvcih2YXIgZj0wO2Y8bDtmKyspe3ZhciBkPW4ucGZWYWx1ZVtmXSxwPWkucGZWYWx1ZVtmXSxtPTEtZCxnPWQseT10aGlzLmZpbmRNaWRwdFB0c0V0Yyh0LGUpLHY9eS5taWRwdFB0cyx4PXkudmVjdG9yTm9ybUludmVyc2UsYj17eDp2LngxKm0rdi54MipnLHk6di55MSptK3YueTIqZ307ci5zZWdwdHMucHVzaChiLngreC54KnAsYi55K3gueSpwKSxyLnJhZGlpLnB1c2goYS5wZlZhbHVlW2ZdIT09dm9pZCAwP2EucGZWYWx1ZVtmXTp1KSxyLmlzQXJjUmFkaXVzLnB1c2goKHMucGZWYWx1ZVtmXSE9PXZvaWQgMD9zLnBmVmFsdWVbZl06aCk9PT0iYXJjLXJhZGl1cyIpfX07R2EuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fcHJpdmF0ZS5yc2NyYXRjaCxhPWUuZGlyQ291bnRzLHM9ZS5zcmNQb3MsbD10LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSx1PWw/bC5wZlZhbHVlWzBdOnZvaWQgMCxoPXQucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsZj10LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsZD10LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO2kuZWRnZVR5cGU9InNlbGYiO3ZhciBwPXIsbT1kO24mJihwPTAsbT11KTt2YXIgZz1oLU1hdGguUEkvMix5PWctZi8yLHY9ZytmLzIseD1oKyJfIitmO3A9YVt4XT09PXZvaWQgMD9hW3hdPTA6KythW3hdLGkuY3RybHB0cz1bcy54K01hdGguY29zKHkpKjEuNCptKihwLzMrMSkscy55K01hdGguc2luKHkpKjEuNCptKihwLzMrMSkscy54K01hdGguY29zKHYpKjEuNCptKihwLzMrMSkscy55K01hdGguc2luKHYpKjEuNCptKihwLzMrMSldfTtHYS5maW5kQ29tcG91bmRMb29wUG9pbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2g7aS5lZGdlVHlwZT0iY29tcG91bmQiO3ZhciBhPWUuc3JjUG9zLHM9ZS50Z3RQb3MsbD1lLnNyY1csdT1lLnNyY0gsaD1lLnRndFcsZj1lLnRndEgsZD10LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlLHA9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksbT1wP3AucGZWYWx1ZVswXTp2b2lkIDAsZz1yLHk9ZDtuJiYoZz0wLHk9bSk7dmFyIHY9NTAseD17eDphLngtbC8yLHk6YS55LXUvMn0sYj17eDpzLngtaC8yLHk6cy55LWYvMn0sdz17eDpNYXRoLm1pbih4LngsYi54KSx5Ok1hdGgubWluKHgueSxiLnkpfSxfPS41LFQ9TWF0aC5tYXgoXyxNYXRoLmxvZyhsKi4wMSkpLEU9TWF0aC5tYXgoXyxNYXRoLmxvZyhoKi4wMSkpO2kuY3RybHB0cz1bdy54LHcueS0oMStNYXRoLnBvdyh2LDEuMTIpLzEwMCkqeSooZy8zKzEpKlQsdy54LSgxK01hdGgucG93KHYsMS4xMikvMTAwKSp5KihnLzMrMSkqRSx3LnldfTtHYS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHQpe3QuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In07R2EuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXQuX3ByaXZhdGUucnNjcmF0Y2gscz10LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlLGw9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdT10LnBzdHlsZSgiY29udHJvbC1wb2ludC13ZWlnaHRzIiksaD1sJiZ1P01hdGgubWluKGwudmFsdWUubGVuZ3RoLHUudmFsdWUubGVuZ3RoKToxLGY9bD9sLnBmVmFsdWVbMF06dm9pZCAwLGQ9dS52YWx1ZVswXSxwPW47YS5lZGdlVHlwZT1wPyJtdWx0aWJlemllciI6ImJlemllciIsYS5jdHJscHRzPVtdO2Zvcih2YXIgbT0wO208aDttKyspe3ZhciBnPSguNS1lLmVsZXMubGVuZ3RoLzIrcikqcyooaT8tMToxKSx5PXZvaWQgMCx2PWhnZShnKTtwJiYoZj1sP2wucGZWYWx1ZVttXTpzLGQ9dS52YWx1ZVttXSksbj95PWY6eT1mIT09dm9pZCAwP3YqZjp2b2lkIDA7dmFyIHg9eSE9PXZvaWQgMD95OmcsYj0xLWQsdz1kLF89dGhpcy5maW5kTWlkcHRQdHNFdGModCxlKSxUPV8ubWlkcHRQdHMsRT1fLnZlY3Rvck5vcm1JbnZlcnNlLEw9e3g6VC54MSpiK1QueDIqdyx5OlQueTEqYitULnkyKnd9O2EuY3RybHB0cy5wdXNoKEwueCtFLngqeCxMLnkrRS55KngpfX07R2EuZmluZFRheGlQb2ludHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLnJzY3JhdGNoO3IuZWRnZVR5cGU9InNlZ21lbnRzIjt2YXIgbj0idmVydGljYWwiLGk9Imhvcml6b250YWwiLGE9ImxlZnR3YXJkIixzPSJyaWdodHdhcmQiLGw9ImRvd253YXJkIix1PSJ1cHdhcmQiLGg9ImF1dG8iLGY9ZS5wb3NQdHMsZD1lLnNyY1cscD1lLnNyY0gsbT1lLnRndFcsZz1lLnRndEgseT10LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZSx2PXkhPT0ibm9kZS1wb3NpdGlvbiIseD10LnBzdHlsZSgidGF4aS1kaXJlY3Rpb24iKS52YWx1ZSxiPXgsdz10LnBzdHlsZSgidGF4aS10dXJuIiksXz13LnVuaXRzPT09IiUiLFQ9dy5wZlZhbHVlLEU9VDwwLEw9dC5wc3R5bGUoInRheGktdHVybi1taW4tZGlzdGFuY2UiKS5wZlZhbHVlLEM9dj8oZCttKS8yOjAsQT12PyhwK2cpLzI6MCxJPWYueDItZi54MSxEPWYueTItZi55MSxrPW8oZnVuY3Rpb24oc2UsRWUpe3JldHVybiBzZT4wP01hdGgubWF4KHNlLUVlLDApOk1hdGgubWluKHNlK0VlLDApfSwic3ViRFdIIiksUj1rKEksQyksUz1rKEQsQSksTz0hMTtiPT09aD94PU1hdGguYWJzKFIpPk1hdGguYWJzKFMpP2k6bjpiPT09dXx8Yj09PWw/KHg9bixPPSEwKTooYj09PWF8fGI9PT1zKSYmKHg9aSxPPSEwKTt2YXIgTj14PT09bixQPU4/UzpSLEY9Tj9EOkksQj1oZ2UoRiksJD0hMTshKE8mJihffHxFKSkmJihiPT09bCYmRjwwfHxiPT09dSYmRj4wfHxiPT09YSYmRj4wfHxiPT09cyYmRjwwKSYmKEIqPS0xLFA9QipNYXRoLmFicyhQKSwkPSEwKTt2YXIgejtpZihfKXt2YXIgVz1UPDA/MStUOlQ7ej1XKlB9ZWxzZXt2YXIgaj1UPDA/UDowO3o9aitUKkJ9dmFyIEs9byhmdW5jdGlvbihzZSl7cmV0dXJuIE1hdGguYWJzKHNlKTxMfHxNYXRoLmFicyhzZSk+PU1hdGguYWJzKFApfSwiZ2V0SXNUb29DbG9zZSIpLGllPUsoeiksUT1LKE1hdGguYWJzKFApLU1hdGguYWJzKHopKSxlZT1pZXx8UTtpZihlZSYmISQpaWYoTil7dmFyIEo9TWF0aC5hYnMoRik8PXAvMixIPU1hdGguYWJzKEkpPD1tLzI7aWYoSil7dmFyIHE9KGYueDErZi54MikvMixaPWYueTEsYWU9Zi55MjtyLnNlZ3B0cz1bcSxaLHEsYWVdfWVsc2UgaWYoSCl7dmFyIHVlPShmLnkxK2YueTIpLzIsY2U9Zi54MSx0ZT1mLngyO3Iuc2VncHRzPVtjZSx1ZSx0ZSx1ZV19ZWxzZSByLnNlZ3B0cz1bZi54MSxmLnkyXX1lbHNle3ZhciBEZT1NYXRoLmFicyhGKTw9ZC8yLG9lPU1hdGguYWJzKEQpPD1nLzI7aWYoRGUpe3ZhciBrZT0oZi55MStmLnkyKS8yLEZlPWYueDEsQmU9Zi54MjtyLnNlZ3B0cz1bRmUsa2UsQmUsa2VdfWVsc2UgaWYob2Upe3ZhciBWZT0oZi54MStmLngyKS8yLEdlPWYueTEsSGU9Zi55MjtyLnNlZ3B0cz1bVmUsR2UsVmUsSGVdfWVsc2Ugci5zZWdwdHM9W2YueDIsZi55MV19ZWxzZSBpZihOKXt2YXIgeGU9Zi55MSt6Kyh2P3AvMipCOjApLFg9Zi54MSxmZT1mLngyO3Iuc2VncHRzPVtYLHhlLGZlLHhlXX1lbHNle3ZhciBoZT1mLngxK3orKHY/ZC8yKkI6MCksZ2U9Zi55MSxuZT1mLnkyO3Iuc2VncHRzPVtoZSxnZSxoZSxuZV19aWYoci5pc1JvdW5kKXt2YXIgeWU9dC5wc3R5bGUoInRheGktcmFkaXVzIikudmFsdWUsVT10LnBzdHlsZSgicmFkaXVzLXR5cGUiKS52YWx1ZVswXT09PSJhcmMtcmFkaXVzIjtyLnJhZGlpPW5ldyBBcnJheShyLnNlZ3B0cy5sZW5ndGgvMikuZmlsbCh5ZSksci5pc0FyY1JhZGl1cz1uZXcgQXJyYXkoci5zZWdwdHMubGVuZ3RoLzIpLmZpbGwoVSl9fTtHYS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaDtpZihyLmVkZ2VUeXBlPT09ImJlemllciIpe3ZhciBuPWUuc3JjUG9zLGk9ZS50Z3RQb3MsYT1lLnNyY1cscz1lLnNyY0gsbD1lLnRndFcsdT1lLnRndEgsaD1lLnNyY1NoYXBlLGY9ZS50Z3RTaGFwZSxkPWUuc3JjQ29ybmVyUmFkaXVzLHA9ZS50Z3RDb3JuZXJSYWRpdXMsbT1lLnNyY1JzLGc9ZS50Z3RScyx5PSF4dChyLnN0YXJ0WCl8fCF4dChyLnN0YXJ0WSksdj0heHQoci5hcnJvd1N0YXJ0WCl8fCF4dChyLmFycm93U3RhcnRZKSx4PSF4dChyLmVuZFgpfHwheHQoci5lbmRZKSxiPSF4dChyLmFycm93RW5kWCl8fCF4dChyLmFycm93RW5kWSksdz0zLF89dGhpcy5nZXRBcnJvd1dpZHRoKHQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsdC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRoLFQ9dypfLEU9RzAoe3g6ci5jdHJscHRzWzBdLHk6ci5jdHJscHRzWzFdfSx7eDpyLnN0YXJ0WCx5OnIuc3RhcnRZfSksTD1FPFQsQz1HMCh7eDpyLmN0cmxwdHNbMF0seTpyLmN0cmxwdHNbMV19LHt4OnIuZW5kWCx5OnIuZW5kWX0pLEE9QzxULEk9ITE7aWYoeXx8dnx8TCl7ST0hMDt2YXIgRD17eDpyLmN0cmxwdHNbMF0tbi54LHk6ci5jdHJscHRzWzFdLW4ueX0saz1NYXRoLnNxcnQoRC54KkQueCtELnkqRC55KSxSPXt4OkQueC9rLHk6RC55L2t9LFM9TWF0aC5tYXgoYSxzKSxPPXt4OnIuY3RybHB0c1swXStSLngqMipTLHk6ci5jdHJscHRzWzFdK1IueSoyKlN9LE49aC5pbnRlcnNlY3RMaW5lKG4ueCxuLnksYSxzLE8ueCxPLnksMCxkLG0pO0w/KHIuY3RybHB0c1swXT1yLmN0cmxwdHNbMF0rUi54KihULUUpLHIuY3RybHB0c1sxXT1yLmN0cmxwdHNbMV0rUi55KihULUUpKTooci5jdHJscHRzWzBdPU5bMF0rUi54KlQsci5jdHJscHRzWzFdPU5bMV0rUi55KlQpfWlmKHh8fGJ8fEEpe0k9ITA7dmFyIFA9e3g6ci5jdHJscHRzWzBdLWkueCx5OnIuY3RybHB0c1sxXS1pLnl9LEY9TWF0aC5zcXJ0KFAueCpQLngrUC55KlAueSksQj17eDpQLngvRix5OlAueS9GfSwkPU1hdGgubWF4KGEscyksej17eDpyLmN0cmxwdHNbMF0rQi54KjIqJCx5OnIuY3RybHB0c1sxXStCLnkqMiokfSxXPWYuaW50ZXJzZWN0TGluZShpLngsaS55LGwsdSx6Lngsei55LDAscCxnKTtBPyhyLmN0cmxwdHNbMF09ci5jdHJscHRzWzBdK0IueCooVC1DKSxyLmN0cmxwdHNbMV09ci5jdHJscHRzWzFdK0IueSooVC1DKSk6KHIuY3RybHB0c1swXT1XWzBdK0IueCpULHIuY3RybHB0c1sxXT1XWzFdK0IueSpUKX1JJiZ0aGlzLmZpbmRFbmRwb2ludHModCl9fTtHYS5zdG9yZUFsbHB0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLnJzY3JhdGNoO2lmKGUuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxlLmVkZ2VUeXBlPT09ImJlemllciJ8fGUuZWRnZVR5cGU9PT0ic2VsZiJ8fGUuZWRnZVR5cGU9PT0iY29tcG91bmQiKXtlLmFsbHB0cz1bXSxlLmFsbHB0cy5wdXNoKGUuc3RhcnRYLGUuc3RhcnRZKTtmb3IodmFyIHI9MDtyKzE8ZS5jdHJscHRzLmxlbmd0aDtyKz0yKWUuYWxscHRzLnB1c2goZS5jdHJscHRzW3JdLGUuY3RybHB0c1tyKzFdKSxyKzM8ZS5jdHJscHRzLmxlbmd0aCYmZS5hbGxwdHMucHVzaCgoZS5jdHJscHRzW3JdK2UuY3RybHB0c1tyKzJdKS8yLChlLmN0cmxwdHNbcisxXStlLmN0cmxwdHNbciszXSkvMik7ZS5hbGxwdHMucHVzaChlLmVuZFgsZS5lbmRZKTt2YXIgbixpO2UuY3RybHB0cy5sZW5ndGgvMiUyPT09MD8obj1lLmFsbHB0cy5sZW5ndGgvMi0xLGUubWlkWD1lLmFsbHB0c1tuXSxlLm1pZFk9ZS5hbGxwdHNbbisxXSk6KG49ZS5hbGxwdHMubGVuZ3RoLzItMyxpPS41LGUubWlkWD1pYShlLmFsbHB0c1tuXSxlLmFsbHB0c1tuKzJdLGUuYWxscHRzW24rNF0saSksZS5taWRZPWlhKGUuYWxscHRzW24rMV0sZS5hbGxwdHNbbiszXSxlLmFsbHB0c1tuKzVdLGkpKX1lbHNlIGlmKGUuZWRnZVR5cGU9PT0ic3RyYWlnaHQiKWUuYWxscHRzPVtlLnN0YXJ0WCxlLnN0YXJ0WSxlLmVuZFgsZS5lbmRZXSxlLm1pZFg9KGUuc3RhcnRYK2UuZW5kWCtlLmFycm93U3RhcnRYK2UuYXJyb3dFbmRYKS80LGUubWlkWT0oZS5zdGFydFkrZS5lbmRZK2UuYXJyb3dTdGFydFkrZS5hcnJvd0VuZFkpLzQ7ZWxzZSBpZihlLmVkZ2VUeXBlPT09InNlZ21lbnRzIil7aWYoZS5hbGxwdHM9W10sZS5hbGxwdHMucHVzaChlLnN0YXJ0WCxlLnN0YXJ0WSksZS5hbGxwdHMucHVzaC5hcHBseShlLmFsbHB0cyxlLnNlZ3B0cyksZS5hbGxwdHMucHVzaChlLmVuZFgsZS5lbmRZKSxlLmlzUm91bmQpe2Uucm91bmRDb3JuZXJzPVtdO2Zvcih2YXIgYT0yO2ErMzxlLmFsbHB0cy5sZW5ndGg7YSs9Mil7dmFyIHM9ZS5yYWRpaVthLzItMV0sbD1lLmlzQXJjUmFkaXVzW2EvMi0xXTtlLnJvdW5kQ29ybmVycy5wdXNoKGJCKHt4OmUuYWxscHRzW2EtMl0seTplLmFsbHB0c1thLTFdfSx7eDplLmFsbHB0c1thXSx5OmUuYWxscHRzW2ErMV0scmFkaXVzOnN9LHt4OmUuYWxscHRzW2ErMl0seTplLmFsbHB0c1thKzNdfSxzLGwpKX19aWYoZS5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgdT1lLnNlZ3B0cy5sZW5ndGgvMixoPXUtMjtlLm1pZFg9KGUuc2VncHRzW2hdK2Uuc2VncHRzW3VdKS8yLGUubWlkWT0oZS5zZWdwdHNbaCsxXStlLnNlZ3B0c1t1KzFdKS8yfWVsc2V7dmFyIGY9ZS5zZWdwdHMubGVuZ3RoLzItMTtpZighZS5pc1JvdW5kKWUubWlkWD1lLnNlZ3B0c1tmXSxlLm1pZFk9ZS5zZWdwdHNbZisxXTtlbHNle3ZhciBkPXt4OmUuc2VncHRzW2ZdLHk6ZS5zZWdwdHNbZisxXX0scD1lLnJvdW5kQ29ybmVyc1tmLzJdLG09W2QueC1wLmN4LGQueS1wLmN5XSxnPXAucmFkaXVzL01hdGguc3FydChNYXRoLnBvdyhtWzBdLDIpK01hdGgucG93KG1bMV0sMikpO209bS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHkqZ30pLGUubWlkWD1wLmN4K21bMF0sZS5taWRZPXAuY3krbVsxXSxlLm1pZFZlY3Rvcj1tfX19fTtHYS5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO2Uubm9kZXNPdmVybGFwfHx4dChlLnN0YXJ0WCkmJnh0KGUuc3RhcnRZKSYmeHQoZS5lbmRYKSYmeHQoZS5lbmRZKT9lLmxvZ2dlZEVycj0hMTplLmxvZ2dlZEVycnx8KGUubG9nZ2VkRXJyPSEwLG9uKCJFZGdlIGAiK3QuaWQoKSsiYCBoYXMgaW52YWxpZCBlbmRwb2ludHMgYW5kIHNvIGl0IGlzIGltcG9zc2libGUgdG8gZHJhdy4gIEFkanVzdCB5b3VyIGVkZ2Ugc3R5bGUgKGUuZy4gY29udHJvbCBwb2ludHMpIGFjY29yZGluZ2x5IG9yIHVzZSBhbiBhbHRlcm5hdGl2ZSBlZGdlIHR5cGUuICBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW91ciB3aGVuIHRoZSBzb3VyY2Ugbm9kZSBhbmQgdGhlIHRhcmdldCBub2RlIG92ZXJsYXAuIikpfTtHYS5maW5kRWRnZUNvbnRyb2xQb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighKCF0fHx0Lmxlbmd0aD09PTApKXtmb3IodmFyIHI9dGhpcyxuPXIuY3ksaT1uLmhhc0NvbXBvdW5kTm9kZXMoKSxhPXttYXA6bmV3IFVjLGdldDpvKGZ1bmN0aW9uKEwpe3ZhciBDPXRoaXMubWFwLmdldChMWzBdKTtyZXR1cm4gQyE9bnVsbD9DLmdldChMWzFdKTpudWxsfSwiZ2V0Iiksc2V0Om8oZnVuY3Rpb24oTCxDKXt2YXIgQT10aGlzLm1hcC5nZXQoTFswXSk7QT09bnVsbCYmKEE9bmV3IFVjLHRoaXMubWFwLnNldChMWzBdLEEpKSxBLnNldChMWzFdLEMpfSwic2V0Iil9LHM9W10sbD1bXSx1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBoPXRbdV0sZj1oLl9wcml2YXRlLGQ9aC5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU7aWYoIShoLnJlbW92ZWQoKXx8IWgudGFrZXNVcFNwYWNlKCkpKXtpZihkPT09ImhheXN0YWNrIil7bC5wdXNoKGgpO2NvbnRpbnVlfXZhciBwPWQ9PT0idW5idW5kbGVkLWJlemllciJ8fGQuZW5kc1dpdGgoInNlZ21lbnRzIil8fGQ9PT0ic3RyYWlnaHQifHxkPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8ZC5lbmRzV2l0aCgidGF4aSIpLG09ZD09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8ZD09PSJiZXppZXIiLGc9Zi5zb3VyY2UseT1mLnRhcmdldCx2PWcucG9vbEluZGV4KCkseD15LnBvb2xJbmRleCgpLGI9W3YseF0uc29ydCgpLHc9YS5nZXQoYik7dz09bnVsbCYmKHc9e2VsZXM6W119LGEuc2V0KGIsdykscy5wdXNoKGIpKSx3LmVsZXMucHVzaChoKSxwJiYody5oYXNVbmJ1bmRsZWQ9ITApLG0mJih3Lmhhc0Jlemllcj0hMCl9fWZvcih2YXIgXz1vKGZ1bmN0aW9uKEwpe3ZhciBDPXNbTF0sQT1hLmdldChDKSxJPXZvaWQgMDtpZighQS5oYXNVbmJ1bmRsZWQpe3ZhciBEPUEuZWxlc1swXS5wYXJhbGxlbEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGUuaXNCdW5kbGVkQmV6aWVyKCl9KTthQihBLmVsZXMpLEQuZm9yRWFjaChmdW5jdGlvbihoZSl7cmV0dXJuIEEuZWxlcy5wdXNoKGhlKX0pLEEuZWxlcy5zb3J0KGZ1bmN0aW9uKGhlLGdlKXtyZXR1cm4gaGUucG9vbEluZGV4KCktZ2UucG9vbEluZGV4KCl9KX12YXIgaz1BLmVsZXNbMF0sUj1rLnNvdXJjZSgpLFM9ay50YXJnZXQoKTtpZihSLnBvb2xJbmRleCgpPlMucG9vbEluZGV4KCkpe3ZhciBPPVI7Uj1TLFM9T312YXIgTj1BLnNyY1Bvcz1SLnBvc2l0aW9uKCksUD1BLnRndFBvcz1TLnBvc2l0aW9uKCksRj1BLnNyY1c9Ui5vdXRlcldpZHRoKCksQj1BLnNyY0g9Ui5vdXRlckhlaWdodCgpLCQ9QS50Z3RXPVMub3V0ZXJXaWR0aCgpLHo9QS50Z3RIPVMub3V0ZXJIZWlnaHQoKSxXPUEuc3JjU2hhcGU9ci5ub2RlU2hhcGVzW2UuZ2V0Tm9kZVNoYXBlKFIpXSxqPUEudGd0U2hhcGU9ci5ub2RlU2hhcGVzW2UuZ2V0Tm9kZVNoYXBlKFMpXSxLPUEuc3JjQ29ybmVyUmFkaXVzPVIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOlIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxpZT1BLnRndENvcm5lclJhZGl1cz1TLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjpTLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUsUT1BLnRndFJzPVMuX3ByaXZhdGUucnNjcmF0Y2gsZWU9QS5zcmNScz1SLl9wcml2YXRlLnJzY3JhdGNoO0EuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciBKPTA7SjxBLmVsZXMubGVuZ3RoO0orKyl7dmFyIEg9QS5lbGVzW0pdLHE9SFswXS5fcHJpdmF0ZS5yc2NyYXRjaCxaPUgucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGFlPVo9PT0idW5idW5kbGVkLWJlemllciJ8fFouZW5kc1dpdGgoInNlZ21lbnRzIil8fFouZW5kc1dpdGgoInRheGkiKSx1ZT0hUi5zYW1lKEguc291cmNlKCkpO2lmKCFBLmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24mJlIhPT1TJiYoQS5oYXNCZXppZXJ8fEEuaGFzVW5idW5kbGVkKSl7QS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBjZT1XLmludGVyc2VjdExpbmUoTi54LE4ueSxGLEIsUC54LFAueSwwLEssZWUpLHRlPUEuc3JjSW50bj1jZSxEZT1qLmludGVyc2VjdExpbmUoUC54LFAueSwkLHosTi54LE4ueSwwLGllLFEpLG9lPUEudGd0SW50bj1EZSxrZT1BLmludGVyc2VjdGlvblB0cz17eDE6Y2VbMF0seDI6RGVbMF0seTE6Y2VbMV0seTI6RGVbMV19LEZlPUEucG9zUHRzPXt4MTpOLngseDI6UC54LHkxOk4ueSx5MjpQLnl9LEJlPURlWzFdLWNlWzFdLFZlPURlWzBdLWNlWzBdLEdlPU1hdGguc3FydChWZSpWZStCZSpCZSksSGU9QS52ZWN0b3I9e3g6VmUseTpCZX0seGU9QS52ZWN0b3JOb3JtPXt4OkhlLngvR2UseTpIZS55L0dlfSxYPXt4Oi14ZS55LHk6eGUueH07QS5ub2Rlc092ZXJsYXA9IXh0KEdlKXx8ai5jaGVja1BvaW50KGNlWzBdLGNlWzFdLDAsJCx6LFAueCxQLnksaWUsUSl8fFcuY2hlY2tQb2ludChEZVswXSxEZVsxXSwwLEYsQixOLngsTi55LEssZWUpLEEudmVjdG9yTm9ybUludmVyc2U9WCxJPXtub2Rlc092ZXJsYXA6QS5ub2Rlc092ZXJsYXAsZGlyQ291bnRzOkEuZGlyQ291bnRzLGNhbGN1bGF0ZWRJbnRlcnNlY3Rpb246ITAsaGFzQmV6aWVyOkEuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpBLmhhc1VuYnVuZGxlZCxlbGVzOkEuZWxlcyxzcmNQb3M6UCx0Z3RQb3M6TixzcmNXOiQsc3JjSDp6LHRndFc6Rix0Z3RIOkIsc3JjSW50bjpvZSx0Z3RJbnRuOnRlLHNyY1NoYXBlOmosdGd0U2hhcGU6Vyxwb3NQdHM6e3gxOkZlLngyLHkxOkZlLnkyLHgyOkZlLngxLHkyOkZlLnkxfSxpbnRlcnNlY3Rpb25QdHM6e3gxOmtlLngyLHkxOmtlLnkyLHgyOmtlLngxLHkyOmtlLnkxfSx2ZWN0b3I6e3g6LUhlLngseTotSGUueX0sdmVjdG9yTm9ybTp7eDoteGUueCx5Oi14ZS55fSx2ZWN0b3JOb3JtSW52ZXJzZTp7eDotWC54LHk6LVgueX19fXZhciBmZT11ZT9JOkE7cS5ub2Rlc092ZXJsYXA9ZmUubm9kZXNPdmVybGFwLHEuc3JjSW50bj1mZS5zcmNJbnRuLHEudGd0SW50bj1mZS50Z3RJbnRuLHEuaXNSb3VuZD1aLnN0YXJ0c1dpdGgoInJvdW5kIiksaSYmKFIuaXNQYXJlbnQoKXx8Ui5pc0NoaWxkKCl8fFMuaXNQYXJlbnQoKXx8Uy5pc0NoaWxkKCkpJiYoUi5wYXJlbnRzKCkuYW55U2FtZShTKXx8Uy5wYXJlbnRzKCkuYW55U2FtZShSKXx8Ui5zYW1lKFMpJiZSLmlzUGFyZW50KCkpP2UuZmluZENvbXBvdW5kTG9vcFBvaW50cyhILGZlLEosYWUpOlI9PT1TP2UuZmluZExvb3BQb2ludHMoSCxmZSxKLGFlKTpaLmVuZHNXaXRoKCJzZWdtZW50cyIpP2UuZmluZFNlZ21lbnRzUG9pbnRzKEgsZmUpOlouZW5kc1dpdGgoInRheGkiKT9lLmZpbmRUYXhpUG9pbnRzKEgsZmUpOlo9PT0ic3RyYWlnaHQifHwhYWUmJkEuZWxlcy5sZW5ndGglMj09PTEmJko9PT1NYXRoLmZsb29yKEEuZWxlcy5sZW5ndGgvMik/ZS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKEgpOmUuZmluZEJlemllclBvaW50cyhILGZlLEosYWUsdWUpLGUuZmluZEVuZHBvaW50cyhIKSxlLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHMoSCxmZSksZS5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZyhIKSxlLnN0b3JlQWxscHRzKEgpLGUuc3RvcmVFZGdlUHJvamVjdGlvbnMoSCksZS5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhIKSxlLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoSCksZS5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhIKX19LCJfbG9vcCIpLFQ9MDtUPHMubGVuZ3RoO1QrKylfKFQpO3RoaXMuZmluZEhheXN0YWNrUG9pbnRzKGwpfX07byhsMWUsImdldFB0cyIpO0dhLmdldFNlZ21lbnRQb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaCxyPWUuZWRnZVR5cGU7aWYocj09PSJzZWdtZW50cyIpcmV0dXJuIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpLGwxZShlLnNlZ3B0cyl9O0dhLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaCxyPWUuZWRnZVR5cGU7aWYocj09PSJiZXppZXIifHxyPT09Im11bHRpYmV6aWVyInx8cj09PSJzZWxmInx8cj09PSJjb21wb3VuZCIpcmV0dXJuIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpLGwxZShlLmN0cmxwdHMpfTtHYS5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCkse3g6ZS5taWRYLHk6ZS5taWRZfX07aWI9e307aWIubWFudWFsRW5kcHRUb1B4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXQucG9zaXRpb24oKSxpPXQub3V0ZXJXaWR0aCgpLGE9dC5vdXRlckhlaWdodCgpLHM9dC5fcHJpdmF0ZS5yc2NyYXRjaDtpZihlLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBsPVtlLnBmVmFsdWVbMF0sZS5wZlZhbHVlWzFdXTtyZXR1cm4gZS51bml0c1swXT09PSIlIiYmKGxbMF09bFswXSppKSxlLnVuaXRzWzFdPT09IiUiJiYobFsxXT1sWzFdKmEpLGxbMF0rPW4ueCxsWzFdKz1uLnksbH1lbHNle3ZhciB1PWUucGZWYWx1ZVswXTt1PS1NYXRoLlBJLzIrdTt2YXIgaD0yKk1hdGgubWF4KGksYSksZj1bbi54K01hdGguY29zKHUpKmgsbi55K01hdGguc2luKHUpKmhdO3JldHVybiByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUodCldLmludGVyc2VjdExpbmUobi54LG4ueSxpLGEsZlswXSxmWzFdLDAsdC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6dC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLHMpfX07aWIuZmluZEVuZHBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHIsbj10LnNvdXJjZSgpWzBdLGk9dC50YXJnZXQoKVswXSxhPW4ucG9zaXRpb24oKSxzPWkucG9zaXRpb24oKSxsPXQucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSx1PXQucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxoPXQucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxmPXQucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxkPW4uX3ByaXZhdGUucnNjcmF0Y2gscD1pLl9wcml2YXRlLnJzY3JhdGNoLG09dC5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZz10Ll9wcml2YXRlLnJzY3JhdGNoLHk9Zy5lZGdlVHlwZSx2PW09PT0idGF4aSIseD15PT09InNlbGYifHx5PT09ImNvbXBvdW5kIixiPXk9PT0iYmV6aWVyInx8eT09PSJtdWx0aWJlemllciJ8fHgsdz15IT09ImJlemllciIsXz15PT09InN0cmFpZ2h0Inx8eT09PSJzZWdtZW50cyIsVD15PT09InNlZ21lbnRzIixFPWJ8fHd8fF8sTD14fHx2LEM9dC5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLEE9TD8ib3V0c2lkZS10by1ub2RlIjpDLnZhbHVlLEk9bi5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6bi5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLEQ9dC5wc3R5bGUoInRhcmdldC1lbmRwb2ludCIpLGs9TD8ib3V0c2lkZS10by1ub2RlIjpELnZhbHVlLFI9aS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6aS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlO2cuc3JjTWFuRW5kcHQ9QyxnLnRndE1hbkVuZHB0PUQ7dmFyIFMsTyxOLFA7aWYoYil7dmFyIEY9W2cuY3RybHB0c1swXSxnLmN0cmxwdHNbMV1dLEI9dz9bZy5jdHJscHRzW2cuY3RybHB0cy5sZW5ndGgtMl0sZy5jdHJscHRzW2cuY3RybHB0cy5sZW5ndGgtMV1dOkY7Uz1CLE89Rn1lbHNlIGlmKF8pe3ZhciAkPVQ/Zy5zZWdwdHMuc2xpY2UoMCwyKTpbcy54LHMueV0sej1UP2cuc2VncHRzLnNsaWNlKGcuc2VncHRzLmxlbmd0aC0yKTpbYS54LGEueV07Uz16LE89JH1pZihrPT09Imluc2lkZS10by1ub2RlIilyPVtzLngscy55XTtlbHNlIGlmKEQudW5pdHMpcj10aGlzLm1hbnVhbEVuZHB0VG9QeChpLEQpO2Vsc2UgaWYoaz09PSJvdXRzaWRlLXRvLWxpbmUiKXI9Zy50Z3RJbnRuO2Vsc2UgaWYoaz09PSJvdXRzaWRlLXRvLW5vZGUifHxrPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCI/Tj1TOihrPT09Im91dHNpZGUtdG8tbGluZSJ8fGs9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihOPVthLngsYS55XSkscj1lLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoaSldLmludGVyc2VjdExpbmUocy54LHMueSxpLm91dGVyV2lkdGgoKSxpLm91dGVySGVpZ2h0KCksTlswXSxOWzFdLDAsUixwKSxrPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fGs9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIFc9aS5fcHJpdmF0ZS5yc2NyYXRjaCxqPVcubGFiZWxXaWR0aCxLPVcubGFiZWxIZWlnaHQsaWU9Vy5sYWJlbFgsUT1XLmxhYmVsWSxlZT1qLzIsSj1LLzIsSD1pLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtIPT09InRvcCI/US09SjpIPT09ImJvdHRvbSImJihRKz1KKTt2YXIgcT1pLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZTtxPT09ImxlZnQiP2llLT1lZTpxPT09InJpZ2h0IiYmKGllKz1lZSk7dmFyIFo9WXgoTlswXSxOWzFdLFtpZS1lZSxRLUosaWUrZWUsUS1KLGllK2VlLFErSixpZS1lZSxRK0pdLHMueCxzLnkpO2lmKFoubGVuZ3RoPjApe3ZhciBhZT1hLHVlPU0wKGFlLHIxKHIpKSxjZT1NMChhZSxyMShaKSksdGU9dWU7aWYoY2U8dWUmJihyPVosdGU9Y2UpLFoubGVuZ3RoPjIpe3ZhciBEZT1NMChhZSx7eDpaWzJdLHk6WlszXX0pO0RlPHRlJiYocj1bWlsyXSxaWzNdXSl9fX12YXIgb2U9akUocixTLGUuYXJyb3dTaGFwZXNbbF0uc3BhY2luZyh0KStoKSxrZT1qRShyLFMsZS5hcnJvd1NoYXBlc1tsXS5nYXAodCkraCk7aWYoZy5lbmRYPWtlWzBdLGcuZW5kWT1rZVsxXSxnLmFycm93RW5kWD1vZVswXSxnLmFycm93RW5kWT1vZVsxXSxBPT09Imluc2lkZS10by1ub2RlIilyPVthLngsYS55XTtlbHNlIGlmKEMudW5pdHMpcj10aGlzLm1hbnVhbEVuZHB0VG9QeChuLEMpO2Vsc2UgaWYoQT09PSJvdXRzaWRlLXRvLWxpbmUiKXI9Zy5zcmNJbnRuO2Vsc2UgaWYoQT09PSJvdXRzaWRlLXRvLW5vZGUifHxBPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCI/UD1POihBPT09Im91dHNpZGUtdG8tbGluZSJ8fEE9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihQPVtzLngscy55XSkscj1lLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUobildLmludGVyc2VjdExpbmUoYS54LGEueSxuLm91dGVyV2lkdGgoKSxuLm91dGVySGVpZ2h0KCksUFswXSxQWzFdLDAsSSxkKSxBPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fEE9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIEZlPW4uX3ByaXZhdGUucnNjcmF0Y2gsQmU9RmUubGFiZWxXaWR0aCxWZT1GZS5sYWJlbEhlaWdodCxHZT1GZS5sYWJlbFgsSGU9RmUubGFiZWxZLHhlPUJlLzIsWD1WZS8yLGZlPW4ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO2ZlPT09InRvcCI/SGUtPVg6ZmU9PT0iYm90dG9tIiYmKEhlKz1YKTt2YXIgaGU9bi5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7aGU9PT0ibGVmdCI/R2UtPXhlOmhlPT09InJpZ2h0IiYmKEdlKz14ZSk7dmFyIGdlPVl4KFBbMF0sUFsxXSxbR2UteGUsSGUtWCxHZSt4ZSxIZS1YLEdlK3hlLEhlK1gsR2UteGUsSGUrWF0sYS54LGEueSk7aWYoZ2UubGVuZ3RoPjApe3ZhciBuZT1zLHllPU0wKG5lLHIxKHIpKSxVPU0wKG5lLHIxKGdlKSksVGU9eWU7aWYoVTx5ZSYmKHI9W2dlWzBdLGdlWzFdXSxUZT1VKSxnZS5sZW5ndGg+Mil7dmFyIHNlPU0wKG5lLHt4OmdlWzJdLHk6Z2VbM119KTtzZTxUZSYmKHI9W2dlWzJdLGdlWzNdXSl9fX12YXIgRWU9akUocixPLGUuYXJyb3dTaGFwZXNbdV0uc3BhY2luZyh0KStmKSxBZT1qRShyLE8sZS5hcnJvd1NoYXBlc1t1XS5nYXAodCkrZik7Zy5zdGFydFg9QWVbMF0sZy5zdGFydFk9QWVbMV0sZy5hcnJvd1N0YXJ0WD1FZVswXSxnLmFycm93U3RhcnRZPUVlWzFdLEUmJigheHQoZy5zdGFydFgpfHwheHQoZy5zdGFydFkpfHwheHQoZy5lbmRYKXx8IXh0KGcuZW5kWSk/Zy5iYWRMaW5lPSEwOmcuYmFkTGluZT0hMSl9O2liLmdldFNvdXJjZUVuZHBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpLGUuZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4OmUuaGF5c3RhY2tQdHNbMF0seTplLmhheXN0YWNrUHRzWzFdfTtkZWZhdWx0OnJldHVybnt4OmUuYXJyb3dTdGFydFgseTplLmFycm93U3RhcnRZfX19O2liLmdldFRhcmdldEVuZHBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpLGUuZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4OmUuaGF5c3RhY2tQdHNbMl0seTplLmhheXN0YWNrUHRzWzNdfTtkZWZhdWx0OnJldHVybnt4OmUuYXJyb3dFbmRYLHk6ZS5hcnJvd0VuZFl9fX07d0I9e307byhBZXQsInB1c2hCZXppZXJQdHMiKTt3Qi5zdG9yZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLHI9ZS5yc2NyYXRjaCxuPXIuZWRnZVR5cGU7aWYoZS5yc3R5bGUuYmV6aWVyUHRzPW51bGwsZS5yc3R5bGUubGluZVB0cz1udWxsLGUucnN0eWxlLmhheXN0YWNrUHRzPW51bGwsbj09PSJtdWx0aWJlemllciJ8fG49PT0iYmV6aWVyInx8bj09PSJzZWxmInx8bj09PSJjb21wb3VuZCIpe2UucnN0eWxlLmJlemllclB0cz1bXTtmb3IodmFyIGk9MDtpKzU8ci5hbGxwdHMubGVuZ3RoO2krPTQpQWV0KHRoaXMsdCxyLmFsbHB0cy5zbGljZShpLGkrNikpfWVsc2UgaWYobj09PSJzZWdtZW50cyIpZm9yKHZhciBhPWUucnN0eWxlLmxpbmVQdHM9W10saT0wO2krMTxyLmFsbHB0cy5sZW5ndGg7aSs9MilhLnB1c2goe3g6ci5hbGxwdHNbaV0seTpyLmFsbHB0c1tpKzFdfSk7ZWxzZSBpZihuPT09ImhheXN0YWNrIil7dmFyIHM9ci5oYXlzdGFja1B0cztlLnJzdHlsZS5oYXlzdGFja1B0cz1be3g6c1swXSx5OnNbMV19LHt4OnNbMl0seTpzWzNdfV19ZS5yc3R5bGUuYXJyb3dXaWR0aD10aGlzLmdldEFycm93V2lkdGgodC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx0LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGh9O3dCLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zPWZ1bmN0aW9uKHQpe3RoaXMuZmluZEVkZ2VDb250cm9sUG9pbnRzKHQpfTtXYz17fTtXYy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dC5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWU7aWYoIVNmKGUpKXt2YXIgcixuLGk9dC5fcHJpdmF0ZSxhPXQud2lkdGgoKSxzPXQuaGVpZ2h0KCksbD10LnBhZGRpbmcoKSx1PXQucG9zaXRpb24oKSxoPXQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnN0clZhbHVlLGY9dC5wc3R5bGUoInRleHQtdmFsaWduIikuc3RyVmFsdWUsZD1pLnJzY3JhdGNoLHA9aS5yc3R5bGU7c3dpdGNoKGgpe2Nhc2UibGVmdCI6cj11LngtYS8yLWw7YnJlYWs7Y2FzZSJyaWdodCI6cj11LngrYS8yK2w7YnJlYWs7ZGVmYXVsdDpyPXUueH1zd2l0Y2goZil7Y2FzZSJ0b3AiOm49dS55LXMvMi1sO2JyZWFrO2Nhc2UiYm90dG9tIjpuPXUueStzLzIrbDticmVhaztkZWZhdWx0Om49dS55fWQubGFiZWxYPXIsZC5sYWJlbFk9bixwLmxhYmVsWD1yLHAubGFiZWxZPW4sdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyh0KSx0aGlzLmFwcGx5TGFiZWxEaW1lbnNpb25zKHQpfX07YzFlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1NYXRoLmF0YW4oci9lKTtyZXR1cm4gZT09PTAmJm48MCYmKG49biotMSksbn0sImxpbmVBbmdsZUZyb21EZWx0YSIpLHUxZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ci54LWUueCxpPXIueS1lLnk7cmV0dXJuIGMxZShuLGkpfSwibGluZUFuZ2xlIiksX2V0PW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9V3goMCxpLS4wMDEsMSkscz1XeCgwLGkrLjAwMSwxKSxsPWkxKGUscixuLGEpLHU9aTEoZSxyLG4scyk7cmV0dXJuIHUxZShsLHUpfSwiYmV6aWVyQW5nbGUiKTtXYy5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fcHJpdmF0ZSxuPXIucnNjcmF0Y2gsaT10aGlzLGE9e21pZDp0LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZSxzb3VyY2U6dC5wc3R5bGUoInNvdXJjZS1sYWJlbCIpLnN0clZhbHVlLHRhcmdldDp0LnBzdHlsZSgidGFyZ2V0LWxhYmVsIikuc3RyVmFsdWV9O2lmKGEubWlkfHxhLnNvdXJjZXx8YS50YXJnZXQpe2U9e3g6bi5taWRYLHk6bi5taWRZfTt2YXIgcz1vKGZ1bmN0aW9uKGQscCxtKXt3ZihyLnJzY3JhdGNoLGQscCxtKSx3ZihyLnJzdHlsZSxkLHAsbSl9LCJzZXRScyIpO3MoImxhYmVsWCIsbnVsbCxlLngpLHMoImxhYmVsWSIsbnVsbCxlLnkpO3ZhciBsPWMxZShuLm1pZERpc3BYLG4ubWlkRGlzcFkpO3MoImxhYmVsQXV0b0FuZ2xlIixudWxsLGwpO3ZhciB1PW8oZnVuY3Rpb24gZigpe2lmKGYuY2FjaGUpcmV0dXJuIGYuY2FjaGU7Zm9yKHZhciBkPVtdLHA9MDtwKzU8bi5hbGxwdHMubGVuZ3RoO3ArPTQpe3ZhciBtPXt4Om4uYWxscHRzW3BdLHk6bi5hbGxwdHNbcCsxXX0sZz17eDpuLmFsbHB0c1twKzJdLHk6bi5hbGxwdHNbcCszXX0seT17eDpuLmFsbHB0c1twKzRdLHk6bi5hbGxwdHNbcCs1XX07ZC5wdXNoKHtwMDptLHAxOmcscDI6eSxzdGFydERpc3Q6MCxsZW5ndGg6MCxzZWdtZW50czpbXX0pfXZhciB2PXIucnN0eWxlLmJlemllclB0cyx4PWkuYmV6aWVyUHJvalBjdHMubGVuZ3RoO2Z1bmN0aW9uIGIoTCxDLEEsSSxEKXt2YXIgaz1HMChDLEEpLFI9TC5zZWdtZW50c1tMLnNlZ21lbnRzLmxlbmd0aC0xXSxTPXtwMDpDLHAxOkEsdDA6SSx0MTpELHN0YXJ0RGlzdDpSP1Iuc3RhcnREaXN0K1IubGVuZ3RoOjAsbGVuZ3RoOmt9O0wuc2VnbWVudHMucHVzaChTKSxMLmxlbmd0aCs9a31vKGIsImFkZFNlZ21lbnQiKTtmb3IodmFyIHc9MDt3PGQubGVuZ3RoO3crKyl7dmFyIF89ZFt3XSxUPWRbdy0xXTtUJiYoXy5zdGFydERpc3Q9VC5zdGFydERpc3QrVC5sZW5ndGgpLGIoXyxfLnAwLHZbdyp4XSwwLGkuYmV6aWVyUHJvalBjdHNbMF0pO2Zvcih2YXIgRT0wO0U8eC0xO0UrKyliKF8sdlt3KngrRV0sdlt3KngrRSsxXSxpLmJlemllclByb2pQY3RzW0VdLGkuYmV6aWVyUHJvalBjdHNbRSsxXSk7YihfLHZbdyp4K3gtMV0sXy5wMixpLmJlemllclByb2pQY3RzW3gtMV0sMSl9cmV0dXJuIGYuY2FjaGU9ZH0sImNyZWF0ZUNvbnRyb2xQb2ludEluZm8iKSxoPW8oZnVuY3Rpb24oZCl7dmFyIHAsbT1kPT09InNvdXJjZSI7aWYoYVtkXSl7dmFyIGc9dC5wc3R5bGUoZCsiLXRleHQtb2Zmc2V0IikucGZWYWx1ZTtzd2l0Y2gobi5lZGdlVHlwZSl7Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlImJlemllciI6Y2FzZSJtdWx0aWJlemllciI6e2Zvcih2YXIgeT11KCksdix4PTAsYj0wLHc9MDt3PHkubGVuZ3RoO3crKyl7Zm9yKHZhciBfPXlbbT93OnkubGVuZ3RoLTEtd10sVD0wO1Q8Xy5zZWdtZW50cy5sZW5ndGg7VCsrKXt2YXIgRT1fLnNlZ21lbnRzW20/VDpfLnNlZ21lbnRzLmxlbmd0aC0xLVRdLEw9dz09PXkubGVuZ3RoLTEmJlQ9PT1fLnNlZ21lbnRzLmxlbmd0aC0xO2lmKHg9YixiKz1FLmxlbmd0aCxiPj1nfHxMKXt2PXtjcDpfLHNlZ21lbnQ6RX07YnJlYWt9fWlmKHYpYnJlYWt9dmFyIEM9di5jcCxBPXYuc2VnbWVudCxJPShnLXgpL0EubGVuZ3RoLEQ9QS50MS1BLnQwLGs9bT9BLnQwK0QqSTpBLnQxLUQqSTtrPVd4KDAsaywxKSxlPWkxKEMucDAsQy5wMSxDLnAyLGspLHA9X2V0KEMucDAsQy5wMSxDLnAyLGspO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIFI9MCxTLE8sTixQLEY9bi5hbGxwdHMubGVuZ3RoLEI9MDtCKzM8RiYmKG0/KE49e3g6bi5hbGxwdHNbQl0seTpuLmFsbHB0c1tCKzFdfSxQPXt4Om4uYWxscHRzW0IrMl0seTpuLmFsbHB0c1tCKzNdfSk6KE49e3g6bi5hbGxwdHNbRi0yLUJdLHk6bi5hbGxwdHNbRi0xLUJdfSxQPXt4Om4uYWxscHRzW0YtNC1CXSx5Om4uYWxscHRzW0YtMy1CXX0pLFM9RzAoTixQKSxPPVIsUis9UywhKFI+PWcpKTtCKz0yKTt2YXIgJD1nLU8sej0kL1M7ej1XeCgwLHosMSksZT1OamUoTixQLHopLHA9dTFlKE4sUCk7YnJlYWt9fXMoImxhYmVsWCIsZCxlLngpLHMoImxhYmVsWSIsZCxlLnkpLHMoImxhYmVsQXV0b0FuZ2xlIixkLHApfX0sImNhbGN1bGF0ZUVuZFByb2plY3Rpb24iKTtoKCJzb3VyY2UiKSxoKCJ0YXJnZXQiKSx0aGlzLmFwcGx5TGFiZWxEaW1lbnNpb25zKHQpfX07V2MuYXBwbHlMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7dGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKHQpLHQuaXNFZGdlKCkmJih0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnModCwic291cmNlIiksdGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKHQsInRhcmdldCIpKX07V2MuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUsbj10aGlzLmdldExhYmVsVGV4dCh0LGUpLGk9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxuKSxhPXQucHN0eWxlKCJsaW5lLWhlaWdodCIpLnBmVmFsdWUscz10LnBzdHlsZSgidGV4dC13cmFwIikuc3RyVmFsdWUsbD1XbChyLnJzY3JhdGNoLCJsYWJlbFdyYXBDYWNoZWRMaW5lcyIsZSl8fFtdLHU9cyE9PSJ3cmFwIj8xOk1hdGgubWF4KGwubGVuZ3RoLDEpLGg9aS5oZWlnaHQvdSxmPWgqYSxkPWkud2lkdGgscD1pLmhlaWdodCsodS0xKSooYS0xKSpoO3dmKHIucnN0eWxlLCJsYWJlbFdpZHRoIixlLGQpLHdmKHIucnNjcmF0Y2gsImxhYmVsV2lkdGgiLGUsZCksd2Yoci5yc3R5bGUsImxhYmVsSGVpZ2h0IixlLHApLHdmKHIucnNjcmF0Y2gsImxhYmVsSGVpZ2h0IixlLHApLHdmKHIucnNjcmF0Y2gsImxhYmVsTGluZUhlaWdodCIsZSxmKX07V2MuZ2V0TGFiZWxUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZSxuPWU/ZSsiLSI6IiIsaT10LnBzdHlsZShuKyJsYWJlbCIpLnN0clZhbHVlLGE9dC5wc3R5bGUoInRleHQtdHJhbnNmb3JtIikudmFsdWUscz1vKGZ1bmN0aW9uKGosSyl7cmV0dXJuIEs/KHdmKHIucnNjcmF0Y2gsaixlLEspLEspOldsKHIucnNjcmF0Y2gsaixlKX0sInJzY3JhdGNoIik7aWYoIWkpcmV0dXJuIiI7YT09Im5vbmUifHwoYT09InVwcGVyY2FzZSI/aT1pLnRvVXBwZXJDYXNlKCk6YT09Imxvd2VyY2FzZSImJihpPWkudG9Mb3dlckNhc2UoKSkpO3ZhciBsPXQucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZTtpZihsPT09IndyYXAiKXt2YXIgdT1zKCJsYWJlbEtleSIpO2lmKHUhPW51bGwmJnMoImxhYmVsV3JhcEtleSIpPT09dSlyZXR1cm4gcygibGFiZWxXcmFwQ2FjaGVkVGV4dCIpO2Zvcih2YXIgaD0iXHUyMDBCIixmPWkuc3BsaXQoYApgKSxkPXQucHN0eWxlKCJ0ZXh0LW1heC13aWR0aCIpLnBmVmFsdWUscD10LnBzdHlsZSgidGV4dC1vdmVyZmxvdy13cmFwIikudmFsdWUsbT1wPT09ImFueXdoZXJlIixnPVtdLHk9L1tcc1x1MjAwYl0rfCQvZyx2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciB4PWZbdl0sYj10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LHgpLHc9Yi53aWR0aDtpZihtKXt2YXIgXz14LnNwbGl0KCIiKS5qb2luKGgpO3g9X31pZih3PmQpe3ZhciBUPXgubWF0Y2hBbGwoeSksRT0iIixMPTAsQz1ZbWUoVCksQTt0cnl7Zm9yKEMucygpOyEoQT1DLm4oKSkuZG9uZTspe3ZhciBJPUEudmFsdWUsRD1JWzBdLGs9eC5zdWJzdHJpbmcoTCxJLmluZGV4KTtMPUkuaW5kZXgrRC5sZW5ndGg7dmFyIFI9RS5sZW5ndGg9PT0wP2s6RStrK0QsUz10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LFIpLE89Uy53aWR0aDtPPD1kP0UrPWsrRDooRSYmZy5wdXNoKEUpLEU9aytEKX19Y2F0Y2goVyl7Qy5lKFcpfWZpbmFsbHl7Qy5mKCl9RS5tYXRjaCgvXltcc1x1MjAwYl0rJC8pfHxnLnB1c2goRSl9ZWxzZSBnLnB1c2goeCl9cygibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGcpLGk9cygibGFiZWxXcmFwQ2FjaGVkVGV4dCIsZy5qb2luKGAKYCkpLHMoImxhYmVsV3JhcEtleSIsdSl9ZWxzZSBpZihsPT09ImVsbGlwc2lzIil7dmFyIE49dC5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxQPSIiLEY9Ilx1MjAyNiIsQj0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LGkpLndpZHRoPE4pcmV0dXJuIGk7Zm9yKHZhciAkPTA7JDxpLmxlbmd0aDskKyspe3ZhciB6PXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQsUCtpWyRdK0YpLndpZHRoO2lmKHo+TilicmVhaztQKz1pWyRdLCQ9PT1pLmxlbmd0aC0xJiYoQj0hMCl9cmV0dXJuIEJ8fChQKz1GKSxQfXJldHVybiBpfTtXYy5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dC5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLHI9dC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYoZT09PSJhdXRvIilpZih0LmlzTm9kZSgpKXN3aXRjaChyKXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBlfTtXYy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5jeS53aW5kb3coKSxpPW4uZG9jdW1lbnQsYT16MChlLHQuX3ByaXZhdGUubGFiZWxEaW1zS2V5KSxzPXIubGFiZWxEaW1DYWNoZXx8KHIubGFiZWxEaW1DYWNoZT1bXSksbD1zW2FdO2lmKGwhPW51bGwpcmV0dXJuIGw7dmFyIHU9MCxoPXQucHN0eWxlKCJmb250LXN0eWxlIikuc3RyVmFsdWUsZj10LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSxkPXQucHN0eWxlKCJmb250LWZhbWlseSIpLnN0clZhbHVlLHA9dC5wc3R5bGUoImZvbnQtd2VpZ2h0Iikuc3RyVmFsdWUsbT10aGlzLmxhYmVsQ2FsY0NhbnZhcyxnPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dDtpZighbSl7bT10aGlzLmxhYmVsQ2FsY0NhbnZhcz1pLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGc9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0PW0uZ2V0Q29udGV4dCgiMmQiKTt2YXIgeT1tLnN0eWxlO3kucG9zaXRpb249ImFic29sdXRlIix5LmxlZnQ9Ii05OTk5cHgiLHkudG9wPSItOTk5OXB4Iix5LnpJbmRleD0iLTEiLHkudmlzaWJpbGl0eT0iaGlkZGVuIix5LnBvaW50ZXJFdmVudHM9Im5vbmUifWcuZm9udD0iIi5jb25jYXQoaCwiICIpLmNvbmNhdChwLCIgIikuY29uY2F0KGYsInB4ICIpLmNvbmNhdChkKTtmb3IodmFyIHY9MCx4PTAsYj1lLnNwbGl0KGAKYCksdz0wO3c8Yi5sZW5ndGg7dysrKXt2YXIgXz1iW3ddLFQ9Zy5tZWFzdXJlVGV4dChfKSxFPU1hdGguY2VpbChULndpZHRoKSxMPWY7dj1NYXRoLm1heChFLHYpLHgrPUx9cmV0dXJuIHYrPXUseCs9dSxzW2FdPXt3aWR0aDp2LGhlaWdodDp4fX07V2MuY2FsY3VsYXRlTGFiZWxBbmdsZT1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUsbj1yLnJzY3JhdGNoLGk9dC5pc0VkZ2UoKSxhPWU/ZSsiLSI6IiIscz10LnBzdHlsZShhKyJ0ZXh0LXJvdGF0aW9uIiksbD1zLnN0clZhbHVlO3JldHVybiBsPT09Im5vbmUiPzA6aSYmbD09PSJhdXRvcm90YXRlIj9uLmxhYmVsQXV0b0FuZ2xlOmw9PT0iYXV0b3JvdGF0ZSI/MDpzLnBmVmFsdWV9O1djLmNhbGN1bGF0ZUxhYmVsQW5nbGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmlzRWRnZSgpLG49dC5fcHJpdmF0ZSxpPW4ucnNjcmF0Y2g7aS5sYWJlbEFuZ2xlPWUuY2FsY3VsYXRlTGFiZWxBbmdsZSh0KSxyJiYoaS5zb3VyY2VMYWJlbEFuZ2xlPWUuY2FsY3VsYXRlTGFiZWxBbmdsZSh0LCJzb3VyY2UiKSxpLnRhcmdldExhYmVsQW5nbGU9ZS5jYWxjdWxhdGVMYWJlbEFuZ2xlKHQsInRhcmdldCIpKX07aDFlPXt9LE1tZT0yOCxJbWU9ITE7aDFlLmdldE5vZGVTaGFwZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5wc3R5bGUoInNoYXBlIikudmFsdWU7aWYocj09PSJjdXRyZWN0YW5nbGUiJiYodC53aWR0aCgpPE1tZXx8dC5oZWlnaHQoKTxNbWUpKXJldHVybiBJbWV8fChvbigiVGhlIGBjdXRyZWN0YW5nbGVgIG5vZGUgc2hhcGUgY2FuIG5vdCBiZSB1c2VkIGF0IHNtYWxsIHNpemVzIHNvIGByZWN0YW5nbGVgIGlzIHVzZWQgaW5zdGVhZCIpLEltZT0hMCksInJlY3RhbmdsZSI7aWYodC5pc1BhcmVudCgpKXJldHVybiByPT09InJlY3RhbmdsZSJ8fHI9PT0icm91bmRyZWN0YW5nbGUifHxyPT09InJvdW5kLXJlY3RhbmdsZSJ8fHI9PT0iY3V0cmVjdGFuZ2xlInx8cj09PSJjdXQtcmVjdGFuZ2xlInx8cj09PSJiYXJyZWwiP3I6InJlY3RhbmdsZSI7aWYocj09PSJwb2x5Z29uIil7dmFyIG49dC5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIGUubm9kZVNoYXBlcy5tYWtlUG9seWdvbihuKS5uYW1lfXJldHVybiByfTskNj17fTskNi5yZWdpc3RlckNhbGN1bGF0aW9uTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jeSxlPXQuY29sbGVjdGlvbigpLHI9dGhpcyxuPW8oZnVuY3Rpb24ocyl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO2lmKGUubWVyZ2UocyksbClmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguX3ByaXZhdGUsZD1mLnJzdHlsZTtkLmNsZWFuPSExLGQuY2xlYW5Db25uZWN0ZWQ9ITF9fSwiZW5xdWV1ZSIpO3IuYmluZGVyKHQpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixvKGZ1bmN0aW9uKHMpe3ZhciBsPXMudGFyZ2V0O24obCl9LCJvbkRpcnR5Qm91bmRzIikpLm9uKCJzdHlsZS4qIGJhY2tncm91bmQuKiIsbyhmdW5jdGlvbihzKXt2YXIgbD1zLnRhcmdldDtuKGwsITEpfSwib25EaXJ0eVN0eWxlIikpO3ZhciBpPW8oZnVuY3Rpb24ocyl7aWYocyl7dmFyIGw9ci5vblVwZGF0ZUVsZUNhbGNzRm5zO2UuY2xlYW5TdHlsZSgpO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKXt2YXIgaD1lW3VdLGY9aC5fcHJpdmF0ZS5yc3R5bGU7aC5pc05vZGUoKSYmIWYuY2xlYW5Db25uZWN0ZWQmJihuKGguY29ubmVjdGVkRWRnZXMoKSksZi5jbGVhbkNvbm5lY3RlZD0hMCl9aWYobClmb3IodmFyIGQ9MDtkPGwubGVuZ3RoO2QrKyl7dmFyIHA9bFtkXTtwKHMsZSl9ci5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZSksZT10LmNvbGxlY3Rpb24oKX19LCJ1cGRhdGVFbGVDYWxjcyIpO3IuZmx1c2hSZW5kZXJlZFN0eWxlUXVldWU9ZnVuY3Rpb24oKXtpKCEwKX0sci5iZWZvcmVSZW5kZXIoaSxyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlQ2FsY3MpfTskNi5vblVwZGF0ZUVsZUNhbGNzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zucz10aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnN8fFtdO2UucHVzaCh0KX07JDYucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9byhmdW5jdGlvbihfKXtyZXR1cm4gXy5fcHJpdmF0ZS5yc3R5bGUuY2xlYW5Db25uZWN0ZWR9LCJpc0NsZWFuQ29ubmVjdGVkIiksbj1bXSxpPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7ZT09PXZvaWQgMCYmKGU9ITApO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgcz10W2FdLGw9cy5fcHJpdmF0ZSx1PWwucnN0eWxlO3MuaXNFZGdlKCkmJighcihzLnNvdXJjZSgpKXx8IXIocy50YXJnZXQoKSkpJiYodS5jbGVhbj0hMSksIShlJiZ1LmNsZWFufHxzLnJlbW92ZWQoKSkmJnMucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJihsLmdyb3VwPT09Im5vZGVzIj9pLnB1c2gocyk6bi5wdXNoKHMpLHUuY2xlYW49ITApfWZvcih2YXIgaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdLGQ9Zi5fcHJpdmF0ZSxwPWQucnN0eWxlLG09Zi5wb3NpdGlvbigpO3RoaXMucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uKGYpLHAubm9kZVg9bS54LHAubm9kZVk9bS55LHAubm9kZVc9Zi5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxwLm5vZGVIPWYucHN0eWxlKCJoZWlnaHQiKS5wZlZhbHVlfXRoaXMucmVjYWxjdWxhdGVFZGdlUHJvamVjdGlvbnMobik7Zm9yKHZhciBnPTA7ZzxuLmxlbmd0aDtnKyspe3ZhciB5PW5bZ10sdj15Ll9wcml2YXRlLHg9di5yc3R5bGUsYj12LnJzY3JhdGNoO3guc3JjWD1iLmFycm93U3RhcnRYLHguc3JjWT1iLmFycm93U3RhcnRZLHgudGd0WD1iLmFycm93RW5kWCx4LnRndFk9Yi5hcnJvd0VuZFkseC5taWRYPWIubWlkWCx4Lm1pZFk9Yi5taWRZLHgubGFiZWxBbmdsZT1iLmxhYmVsQW5nbGUseC5zb3VyY2VMYWJlbEFuZ2xlPWIuc291cmNlTGFiZWxBbmdsZSx4LnRhcmdldExhYmVsQW5nbGU9Yi50YXJnZXRMYWJlbEFuZ2xlfX19O1Y2PXt9O1Y2LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYWNoZWRaU29ydGVkRWxlcztpZih0KXt0LmRyYWc9W10sdC5ub25kcmFnPVtdO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl0saT1uLl9wcml2YXRlLnJzY3JhdGNoO24uZ3JhYmJlZCgpJiYhbi5pc1BhcmVudCgpP2UucHVzaChuKTppLmluRHJhZ0xheWVyP3QuZHJhZy5wdXNoKG4pOnQubm9uZHJhZy5wdXNoKG4pfWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO3QuZHJhZy5wdXNoKG4pfX19O1Y2LmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbigpe3RoaXMuY2FjaGVkWlNvcnRlZEVsZXM9bnVsbH07VjYuZ2V0Q2FjaGVkWlNvcnRlZEVsZXM9ZnVuY3Rpb24odCl7aWYodHx8IXRoaXMuY2FjaGVkWlNvcnRlZEVsZXMpe3ZhciBlPXRoaXMuY3kubXV0YWJsZUVsZW1lbnRzKCkudG9BcnJheSgpO2Uuc29ydChYZ2UpLGUuaW50ZXJhY3RpdmU9ZS5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaW50ZXJhY3RpdmUoKX0pLHRoaXMuY2FjaGVkWlNvcnRlZEVsZXM9ZSx0aGlzLnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCl9ZWxzZSBlPXRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7cmV0dXJuIGV9O2YxZT17fTtbVzAsazYsR2EsaWIsd0IsV2MsaDFlLCQ2LFY2XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKGYxZSx0KX0pO2QxZT17fTtkMWUuZ2V0Q2FjaGVkSW1hZ2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1uLmltYWdlQ2FjaGU9bi5pbWFnZUNhY2hlfHx7fSxhPWlbdF07aWYoYSlyZXR1cm4gYS5pbWFnZS5jb21wbGV0ZXx8YS5pbWFnZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxhLmltYWdlO2E9aVt0XT1pW3RdfHx7fTt2YXIgcz1hLmltYWdlPW5ldyBJbWFnZTtzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHIpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKCl7cy5lcnJvcj0hMH0pO3ZhciBsPSJkYXRhOiIsdT10LnN1YnN0cmluZygwLGwubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09bDtyZXR1cm4gdXx8KGU9ZT09PSJudWxsIj9udWxsOmUscy5jcm9zc09yaWdpbj1lKSxzLnNyYz10LHN9O3gxPXt9O3gxLnJlZ2lzdGVyQmluZGluZz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzLFsxXSksYT10aGlzLmJpbmRlcih0KTtyZXR1cm4gYS5vbi5hcHBseShhLGkpfTt4MS5iaW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuY3kud2luZG93KCksbj10PT09cnx8dD09PXIuZG9jdW1lbnR8fHQ9PT1yLmRvY3VtZW50LmJvZHl8fFFxZSh0KTtpZihlLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cz09bnVsbCl7dmFyIGk9ITE7dHJ5e3ZhciBhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpvKGZ1bmN0aW9uKCl7cmV0dXJuIGk9ITAsITB9LCJnZXQiKX0pO3IuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxhKX1jYXRjaHt9ZS5zdXBwb3J0c1Bhc3NpdmVFdmVudHM9aX12YXIgcz1vKGZ1bmN0aW9uKHUsaCxmKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBuJiZlLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cyYmKGRbMl09e2NhcHR1cmU6Zj8/ITEscGFzc2l2ZTohMSxvbmNlOiExfSksZS5iaW5kaW5ncy5wdXNoKHt0YXJnZXQ6dCxhcmdzOmR9KSwodC5hZGRFdmVudExpc3RlbmVyfHx0Lm9uKS5hcHBseSh0LGQpLHRoaXN9LCJvbiIpO3JldHVybntvbjpzLGFkZEV2ZW50TGlzdGVuZXI6cyxhZGRMaXN0ZW5lcjpzLGJpbmQ6c319O3gxLm5vZGVJc0RyYWdnYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5pc05vZGUoKSYmIXQubG9ja2VkKCkmJnQuZ3JhYmJhYmxlKCl9O3gxLm5vZGVJc0dyYWJiYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ub2RlSXNEcmFnZ2FibGUodCkmJnQuaW50ZXJhY3RpdmUoKX07eDEubG9hZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmN5LndpbmRvdygpLHI9byhmdW5jdGlvbihYKXtyZXR1cm4gWC5zZWxlY3RlZCgpfSwiaXNTZWxlY3RlZCIpLG49byhmdW5jdGlvbihYLGZlLGhlLGdlKXtYPT1udWxsJiYoWD10LmN5KTtmb3IodmFyIG5lPTA7bmU8ZmUubGVuZ3RoO25lKyspe3ZhciB5ZT1mZVtuZV07WC5lbWl0KHtvcmlnaW5hbEV2ZW50OmhlLHR5cGU6eWUscG9zaXRpb246Z2V9KX19LCJ0cmlnZ2VyRXZlbnRzIiksaT1vKGZ1bmN0aW9uKFgpe3JldHVybiBYLnNoaWZ0S2V5fHxYLm1ldGFLZXl8fFguY3RybEtleX0sImlzTXVsdFNlbEtleURvd24iKSxhPW8oZnVuY3Rpb24oWCxmZSl7dmFyIGhlPSEwO2lmKHQuY3kuaGFzQ29tcG91bmROb2RlcygpJiZYJiZYLnBhbm5hYmxlKCkpZm9yKHZhciBnZT0wO2ZlJiZnZTxmZS5sZW5ndGg7Z2UrKyl7dmFyIFg9ZmVbZ2VdO2lmKFguaXNOb2RlKCkmJlguaXNQYXJlbnQoKSYmIVgucGFubmFibGUoKSl7aGU9ITE7YnJlYWt9fWVsc2UgaGU9ITA7cmV0dXJuIGhlfSwiYWxsb3dQYW5uaW5nUGFzc3Rocm91Z2giKSxzPW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5ncmFiYmVkPSEwfSwic2V0R3JhYmJlZCIpLGw9byhmdW5jdGlvbihYKXtYWzBdLl9wcml2YXRlLmdyYWJiZWQ9ITF9LCJzZXRGcmVlZCIpLHU9byhmdW5jdGlvbihYKXtYWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSEwfSwic2V0SW5EcmFnTGF5ZXIiKSxoPW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX0sInNldE91dERyYWdMYXllciIpLGY9byhmdW5jdGlvbihYKXtYWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMH0sInNldEdyYWJUYXJnZXQiKSxkPW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITF9LCJyZW1vdmVHcmFiVGFyZ2V0IikscD1vKGZ1bmN0aW9uKFgsZmUpe3ZhciBoZT1mZS5hZGRUb0xpc3QsZ2U9aGUuaGFzKFgpOyFnZSYmWC5ncmFiYmFibGUoKSYmIVgubG9ja2VkKCkmJihoZS5tZXJnZShYKSxzKFgpKX0sImFkZFRvRHJhZ0xpc3QiKSxtPW8oZnVuY3Rpb24oWCxmZSl7aWYoWC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSYmIShmZS5pbkRyYWdMYXllcj09bnVsbCYmZmUuYWRkVG9MaXN0PT1udWxsKSl7dmFyIGhlPVguZGVzY2VuZGFudHMoKTtmZS5pbkRyYWdMYXllciYmKGhlLmZvckVhY2godSksaGUuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHUpKSxmZS5hZGRUb0xpc3QmJnAoaGUsZmUpfX0sImFkZERlc2NlbmRhbnRzVG9EcmFnIiksZz1vKGZ1bmN0aW9uKFgsZmUpe2ZlPWZlfHx7fTt2YXIgaGU9WC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtmZS5pbkRyYWdMYXllciYmKFguZm9yRWFjaCh1KSxYLm5laWdoYm9yaG9vZCgpLnN0ZEZpbHRlcihmdW5jdGlvbihnZSl7cmV0dXJuIWhlfHxnZS5pc0VkZ2UoKX0pLmZvckVhY2godSkpLGZlLmFkZFRvTGlzdCYmWC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtwKGdlLGZlKX0pLG0oWCxmZSkseChYLHtpbkRyYWdMYXllcjpmZS5pbkRyYWdMYXllcn0pLHQudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKX0sImFkZE5vZGVzVG9EcmFnIikseT1nLHY9byhmdW5jdGlvbihYKXtYJiYodC5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24oZmUpe2woZmUpLGgoZmUpLGQoZmUpfSksdC51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpKX0sImZyZWVEcmFnZ2VkRWxlbWVudHMiKSx4PW8oZnVuY3Rpb24oWCxmZSl7aWYoIShmZS5pbkRyYWdMYXllcj09bnVsbCYmZmUuYWRkVG9MaXN0PT1udWxsKSYmWC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSl7dmFyIGhlPVguYW5jZXN0b3JzKCkub3JwaGFucygpO2lmKCFoZS5zYW1lKFgpKXt2YXIgZ2U9aGUuZGVzY2VuZGFudHMoKS5zcGF3blNlbGYoKS5tZXJnZShoZSkudW5tZXJnZShYKS51bm1lcmdlKFguZGVzY2VuZGFudHMoKSksbmU9Z2UuY29ubmVjdGVkRWRnZXMoKTtmZS5pbkRyYWdMYXllciYmKG5lLmZvckVhY2godSksZ2UuZm9yRWFjaCh1KSksZmUuYWRkVG9MaXN0JiZnZS5mb3JFYWNoKGZ1bmN0aW9uKHllKXtwKHllLGZlKX0pfX19LCJ1cGRhdGVBbmNlc3RvcnNJbkRyYWdMYXllciIpLGI9byhmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPW51bGwmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1ciE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCl9LCJibHVyQWN0aXZlRG9tRWxlbWVudCIpLHc9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLF89dHlwZW9mIFJlc2l6ZU9ic2VydmVyPCJ1Ijt3Pyh0LnJlbW92ZU9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKHhlKXtmb3IodmFyIFg9MDtYPHhlLmxlbmd0aDtYKyspe3ZhciBmZT14ZVtYXSxoZT1mZS5yZW1vdmVkTm9kZXM7aWYoaGUpZm9yKHZhciBnZT0wO2dlPGhlLmxlbmd0aDtnZSsrKXt2YXIgbmU9aGVbZ2VdO2lmKG5lPT09dC5jb250YWluZXIpe3QuZGVzdHJveSgpO2JyZWFrfX19fSksdC5jb250YWluZXIucGFyZW50Tm9kZSYmdC5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHQuY29udGFpbmVyLnBhcmVudE5vZGUse2NoaWxkTGlzdDohMH0pKTp0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwiRE9NTm9kZVJlbW92ZWQiLGZ1bmN0aW9uKHhlKXt0LmRlc3Ryb3koKX0pO3ZhciBUPUE2KGZ1bmN0aW9uKCl7dC5jeS5yZXNpemUoKX0sMTAwKTt3JiYodC5zdHlsZU9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKFQpLHQuc3R5bGVPYnNlcnZlci5vYnNlcnZlKHQuY29udGFpbmVyLHthdHRyaWJ1dGVzOiEwfSkpLHQucmVnaXN0ZXJCaW5kaW5nKGUsInJlc2l6ZSIsVCksXyYmKHQucmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKFQpLHQucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lcikpO3ZhciBFPW8oZnVuY3Rpb24oWCxmZSl7Zm9yKDtYIT1udWxsOylmZShYKSxYPVgucGFyZW50Tm9kZX0sImZvckVhY2hVcCIpLEw9byhmdW5jdGlvbigpe3QuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCl9LCJpbnZhbGlkYXRlQ29vcmRzIik7RSh0LmNvbnRhaW5lcixmdW5jdGlvbih4ZSl7dC5yZWdpc3RlckJpbmRpbmcoeGUsInRyYW5zaXRpb25lbmQiLEwpLHQucmVnaXN0ZXJCaW5kaW5nKHhlLCJhbmltYXRpb25lbmQiLEwpLHQucmVnaXN0ZXJCaW5kaW5nKHhlLCJzY3JvbGwiLEwpfSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsImNvbnRleHRtZW51IixmdW5jdGlvbih4ZSl7eGUucHJldmVudERlZmF1bHQoKX0pO3ZhciBDPW8oZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3Rpb25bNF0hPT0wfSwiaW5Cb3hTZWxlY3Rpb24iKSxBPW8oZnVuY3Rpb24oWCl7Zm9yKHZhciBmZT10LmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxoZT1mZVswXSxnZT1mZVsxXSxuZT1mZVsyXSx5ZT1mZVszXSxVPVgudG91Y2hlcz9YLnRvdWNoZXM6W1hdLFRlPSExLHNlPTA7c2U8VS5sZW5ndGg7c2UrKyl7dmFyIEVlPVVbc2VdO2lmKGhlPD1FZS5jbGllbnRYJiZFZS5jbGllbnRYPD1oZStuZSYmZ2U8PUVlLmNsaWVudFkmJkVlLmNsaWVudFk8PWdlK3llKXtUZT0hMDticmVha319aWYoIVRlKXJldHVybiExO2Zvcih2YXIgQWU9dC5jb250YWluZXIsUGU9WC50YXJnZXQsTWU9UGUucGFyZW50Tm9kZSxtZT0hMTtNZTspe2lmKE1lPT09QWUpe21lPSEwO2JyZWFrfU1lPU1lLnBhcmVudE5vZGV9cmV0dXJuISFtZX0sImV2ZW50SW5Db250YWluZXIiKTt0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwibW91c2Vkb3duIixvKGZ1bmN0aW9uKFgpe2lmKEEoWCkmJiEodC5ob3ZlckRhdGEud2hpY2g9PT0xJiZYLndoaWNoIT09MSkpe1gucHJldmVudERlZmF1bHQoKSxiKCksdC5ob3ZlckRhdGEuY2FwdHVyZT0hMCx0LmhvdmVyRGF0YS53aGljaD1YLndoaWNoO3ZhciBmZT10LmN5LGhlPVtYLmNsaWVudFgsWC5jbGllbnRZXSxnZT10LnByb2plY3RJbnRvVmlld3BvcnQoaGVbMF0saGVbMV0pLG5lPXQuc2VsZWN0aW9uLHllPXQuZmluZE5lYXJlc3RFbGVtZW50cyhnZVswXSxnZVsxXSwhMCwhMSksVT15ZVswXSxUZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzO3QuaG92ZXJEYXRhLm1kb3duUG9zPWdlLHQuaG92ZXJEYXRhLm1kb3duR1Bvcz1oZTt2YXIgc2U9byhmdW5jdGlvbigpe3QuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITEsY2xlYXJUaW1lb3V0KHQuaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0KSx0LmhvdmVyRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXQuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQpe3ZhciBXZT10LmhvdmVyRGF0YS5kb3duO1dlP1dlLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJ0YXBob2xkIixwb3NpdGlvbjp7eDpnZVswXSx5OmdlWzFdfX0pOmZlLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJ0YXBob2xkIixwb3NpdGlvbjp7eDpnZVswXSx5OmdlWzFdfX0pfX0sdC50YXBob2xkRHVyYXRpb24pfSwiY2hlY2tGb3JUYXBob2xkIik7aWYoWC53aGljaD09Myl7dC5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMDt2YXIgRWU9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19O1U/KFUuYWN0aXZhdGUoKSxVLmVtaXQoRWUpLHQuaG92ZXJEYXRhLmRvd249VSk6ZmUuZW1pdChFZSksdC5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCksdC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMX1lbHNlIGlmKFgud2hpY2g9PTEpe1UmJlUuYWN0aXZhdGUoKTt7aWYoVSE9bnVsbCYmdC5ub2RlSXNHcmFiYmFibGUoVSkpe3ZhciBBZT1vKGZ1bmN0aW9uKFdlKXtyZXR1cm57b3JpZ2luYWxFdmVudDpYLHR5cGU6V2UscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19fSwibWFrZUV2ZW50IiksUGU9byhmdW5jdGlvbihXZSl7V2UuZW1pdChBZSgiZ3JhYiIpKX0sInRyaWdnZXJHcmFiIik7aWYoZihVKSwhVS5zZWxlY3RlZCgpKVRlPXQuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9ZmUuY29sbGVjdGlvbigpLHkoVSx7YWRkVG9MaXN0OlRlfSksVS5lbWl0KEFlKCJncmFib24iKSkuZW1pdChBZSgiZ3JhYiIpKTtlbHNle1RlPXQuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9ZmUuY29sbGVjdGlvbigpO3ZhciBNZT1mZS4kKGZ1bmN0aW9uKG1lKXtyZXR1cm4gbWUuaXNOb2RlKCkmJm1lLnNlbGVjdGVkKCkmJnQubm9kZUlzR3JhYmJhYmxlKG1lKX0pO2coTWUse2FkZFRvTGlzdDpUZX0pLFUuZW1pdChBZSgiZ3JhYm9uIikpLE1lLmZvckVhY2goUGUpfXQucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3SGludCgiZHJhZyIsITApfXQuaG92ZXJEYXRhLmRvd249VSx0LmhvdmVyRGF0YS5kb3ducz15ZSx0LmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKX1uKFUsWyJtb3VzZWRvd24iLCJ0YXBzdGFydCIsInZtb3VzZWRvd24iXSxYLHt4OmdlWzBdLHk6Z2VbMV19KSxVPT1udWxsPyhuZVs0XT0xLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDpnZVswXSx5OmdlWzFdfSx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpOlUucGFubmFibGUoKSYmKG5lWzRdPTEpLHNlKCl9bmVbMF09bmVbMl09Z2VbMF0sbmVbMV09bmVbM109Z2VbMV19fSwibW91c2Vkb3duSGFuZGxlciIpLCExKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJtb3VzZW1vdmUiLG8oZnVuY3Rpb24oWCl7dmFyIGZlPXQuaG92ZXJEYXRhLmNhcHR1cmU7aWYoISghZmUmJiFBKFgpKSl7dmFyIGhlPSExLGdlPXQuY3ksbmU9Z2Uuem9vbSgpLHllPVtYLmNsaWVudFgsWC5jbGllbnRZXSxVPXQucHJvamVjdEludG9WaWV3cG9ydCh5ZVswXSx5ZVsxXSksVGU9dC5ob3ZlckRhdGEubWRvd25Qb3Msc2U9dC5ob3ZlckRhdGEubWRvd25HUG9zLEVlPXQuc2VsZWN0aW9uLEFlPW51bGw7IXQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXQuaG92ZXJEYXRhLmRyYWdnaW5nJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiYoQWU9dC5maW5kTmVhcmVzdEVsZW1lbnQoVVswXSxVWzFdLCEwLCExKSk7dmFyIFBlPXQuaG92ZXJEYXRhLmxhc3QsTWU9dC5ob3ZlckRhdGEuZG93bixtZT1bVVswXS1FZVsyXSxVWzFdLUVlWzNdXSxXZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzLFJlO2lmKHNlKXt2YXIgdHQ9eWVbMF0tc2VbMF0sZ3Q9dHQqdHQsRXQ9eWVbMV0tc2VbMV0sdnQ9RXQqRXQsWWU9Z3QrdnQ7dC5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz1SZT1ZZT49dC5kZXNrdG9wVGFwVGhyZXNob2xkMn12YXIgVHQ9aShYKTtSZSYmKHQuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITApO3ZhciAkZT1vKGZ1bmN0aW9uKCl7dmFyIHp0PXQuaG92ZXJEYXRhLmRyYWdEZWx0YT10LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO3p0Lmxlbmd0aD09PTA/KHp0LnB1c2gobWVbMF0pLHp0LnB1c2gobWVbMV0pKTooenRbMF0rPW1lWzBdLHp0WzFdKz1tZVsxXSl9LCJ1cGRhdGVEcmFnRGVsdGEiKTtoZT0hMCxuKEFlLFsibW91c2Vtb3ZlIiwidm1vdXNlbW92ZSIsInRhcGRyYWciXSxYLHt4OlVbMF0seTpVWzFdfSk7dmFyIHJ0PW8oZnVuY3Rpb24oKXt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQuaG92ZXJEYXRhLnNlbGVjdGluZ3x8Z2UuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImJveHN0YXJ0Iixwb3NpdGlvbjp7eDpVWzBdLHk6VVsxXX19KSxFZVs0XT0xLHQuaG92ZXJEYXRhLnNlbGVjdGluZz0hMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCl9LCJnb0ludG9Cb3hNb2RlIik7aWYodC5ob3ZlckRhdGEud2hpY2g9PT0zKXtpZihSZSl7dmFyIGZ0PXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0ZHJhZyIscG9zaXRpb246e3g6VVswXSx5OlVbMV19fTtNZT9NZS5lbWl0KGZ0KTpnZS5lbWl0KGZ0KSx0LmhvdmVyRGF0YS5jeHREcmFnZ2VkPSEwLCghdC5ob3ZlckRhdGEuY3h0T3Zlcnx8QWUhPT10LmhvdmVyRGF0YS5jeHRPdmVyKSYmKHQuaG92ZXJEYXRhLmN4dE92ZXImJnQuaG92ZXJEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX0pLHQuaG92ZXJEYXRhLmN4dE92ZXI9QWUsQWUmJkFlLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6VVswXSx5OlVbMV19fSkpfX1lbHNlIGlmKHQuaG92ZXJEYXRhLmRyYWdnaW5nKXtpZihoZT0hMCxnZS5wYW5uaW5nRW5hYmxlZCgpJiZnZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7dmFyIGt0O2lmKHQuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuKXt2YXIgZXI9dC5ob3ZlckRhdGEubWRvd25Qb3M7a3Q9e3g6KFVbMF0tZXJbMF0pKm5lLHk6KFVbMV0tZXJbMV0pKm5lfSx0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMX1lbHNlIGt0PXt4Om1lWzBdKm5lLHk6bWVbMV0qbmV9O2dlLnBhbkJ5KGt0KSxnZS5lbWl0KCJkcmFncGFuIiksdC5ob3ZlckRhdGEuZHJhZ2dlZD0hMH1VPXQucHJvamVjdEludG9WaWV3cG9ydChYLmNsaWVudFgsWC5jbGllbnRZKX1lbHNlIGlmKEVlWzRdPT0xJiYoTWU9PW51bGx8fE1lLnBhbm5hYmxlKCkpKXtpZihSZSl7aWYoIXQuaG92ZXJEYXRhLmRyYWdnaW5nJiZnZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihUdHx8IWdlLnBhbm5pbmdFbmFibGVkKCl8fCFnZS51c2VyUGFubmluZ0VuYWJsZWQoKSkpcnQoKTtlbHNlIGlmKCF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJmdlLnBhbm5pbmdFbmFibGVkKCkmJmdlLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgZHQ9YShNZSx0LmhvdmVyRGF0YS5kb3ducyk7ZHQmJih0LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxFZVs0XT0wLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1yMShUZSksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX1NZSYmTWUucGFubmFibGUoKSYmTWUuYWN0aXZlKCkmJk1lLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihNZSYmTWUucGFubmFibGUoKSYmTWUuYWN0aXZlKCkmJk1lLnVuYWN0aXZhdGUoKSwoIU1lfHwhTWUuZ3JhYmJlZCgpKSYmQWUhPVBlJiYoUGUmJm4oUGUsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxYLHt4OlVbMF0seTpVWzFdfSksQWUmJm4oQWUsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLFgse3g6VVswXSx5OlVbMV19KSx0LmhvdmVyRGF0YS5sYXN0PUFlKSxNZSlpZihSZSl7aWYoZ2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZUdClNZSYmTWUuZ3JhYmJlZCgpJiYodihXZSksTWUuZW1pdCgiZnJlZW9uIiksV2UuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKE1lLmVtaXQoImRyYWdmcmVlb24iKSxXZS5lbWl0KCJkcmFnZnJlZSIpKSkscnQoKTtlbHNlIGlmKE1lJiZNZS5ncmFiYmVkKCkmJnQubm9kZUlzRHJhZ2dhYmxlKE1lKSl7dmFyIFhlPSF0LmRyYWdEYXRhLmRpZERyYWc7WGUmJnQucmVkcmF3SGludCgiZWxlcyIsITApLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMCx0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fGcoV2Use2luRHJhZ0xheWVyOiEwfSk7dmFyIGN0PXt4OjAseTowfTtpZih4dChtZVswXSkmJnh0KG1lWzFdKSYmKGN0LngrPW1lWzBdLGN0LnkrPW1lWzFdLFhlKSl7dmFyIEx0PXQuaG92ZXJEYXRhLmRyYWdEZWx0YTtMdCYmeHQoTHRbMF0pJiZ4dChMdFsxXSkmJihjdC54Kz1MdFswXSxjdC55Kz1MdFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLFdlLnNpbGVudFNoaWZ0KGN0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXcoKX19ZWxzZSAkZSgpO2hlPSEwfWlmKEVlWzJdPVVbMF0sRWVbM109VVsxXSxoZSlyZXR1cm4gWC5zdG9wUHJvcGFnYXRpb24mJlguc3RvcFByb3BhZ2F0aW9uKCksWC5wcmV2ZW50RGVmYXVsdCYmWC5wcmV2ZW50RGVmYXVsdCgpLCExfX0sIm1vdXNlbW92ZUhhbmRsZXIiKSwhMSk7dmFyIEksRCxrO3QucmVnaXN0ZXJCaW5kaW5nKGUsIm1vdXNldXAiLG8oZnVuY3Rpb24oWCl7aWYoISh0LmhvdmVyRGF0YS53aGljaD09PTEmJlgud2hpY2ghPT0xJiZ0LmhvdmVyRGF0YS5jYXB0dXJlKSl7dmFyIGZlPXQuaG92ZXJEYXRhLmNhcHR1cmU7aWYoZmUpe3QuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIGhlPXQuY3ksZ2U9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFguY2xpZW50WCxYLmNsaWVudFkpLG5lPXQuc2VsZWN0aW9uLHllPXQuZmluZE5lYXJlc3RFbGVtZW50KGdlWzBdLGdlWzFdLCEwLCExKSxVPXQuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsVGU9dC5ob3ZlckRhdGEuZG93bixzZT1pKFgpO2lmKHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiYmKHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKSksdC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLFRlJiZUZS51bmFjdGl2YXRlKCksdC5ob3ZlckRhdGEud2hpY2g9PT0zKXt2YXIgRWU9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OmdlWzBdLHk6Z2VbMV19fTtpZihUZT9UZS5lbWl0KEVlKTpoZS5lbWl0KEVlKSwhdC5ob3ZlckRhdGEuY3h0RHJhZ2dlZCl7dmFyIEFlPXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDpnZVswXSx5OmdlWzFdfX07VGU/VGUuZW1pdChBZSk6aGUuZW1pdChBZSl9dC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx0LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYodC5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZihuKHllLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sWCx7eDpnZVswXSx5OmdlWzFdfSksIXQuZHJhZ0RhdGEuZGlkRHJhZyYmIXQuaG92ZXJEYXRhLmRyYWdnZWQmJiF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJiF0LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnJiYobihUZSxbImNsaWNrIiwidGFwIiwidmNsaWNrIl0sWCx7eDpnZVswXSx5OmdlWzFdfSksRD0hMSxYLnRpbWVTdGFtcC1rPD1oZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCk/KEkmJmNsZWFyVGltZW91dChJKSxEPSEwLGs9bnVsbCxuKFRlLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxYLHt4OmdlWzBdLHk6Z2VbMV19KSk6KEk9c2V0VGltZW91dChmdW5jdGlvbigpe0R8fG4oVGUsWyJvbmVjbGljayIsIm9uZXRhcCIsInZvbmVjbGljayJdLFgse3g6Z2VbMF0seTpnZVsxXX0pfSxoZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpLGs9WC50aW1lU3RhbXApKSxUZT09bnVsbCYmIXQuZHJhZ0RhdGEuZGlkRHJhZyYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXQuaG92ZXJEYXRhLmRyYWdnZWQmJiFpKFgpJiYoaGUuJChyKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLFUubGVuZ3RoPjAmJnQucmVkcmF3SGludCgiZWxlcyIsITApLHQuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9VT1oZS5jb2xsZWN0aW9uKCkpLHllPT1UZSYmIXQuZHJhZ0RhdGEuZGlkRHJhZyYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmeWUhPW51bGwmJnllLl9wcml2YXRlLnNlbGVjdGFibGUmJih0LmhvdmVyRGF0YS5kcmFnZ2luZ3x8KGhlLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fHNlP3llLnNlbGVjdGVkKCk/eWUudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKTp5ZS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSk6c2V8fChoZS4kKHIpLnVubWVyZ2UoeWUpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSkseWUuc2VsZWN0KFsidGFwc2VsZWN0Il0pKSksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCkpLHQuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIFBlPWhlLmNvbGxlY3Rpb24odC5nZXRBbGxJbkJveChuZVswXSxuZVsxXSxuZVsyXSxuZVszXSkpO3QucmVkcmF3SGludCgic2VsZWN0IiwhMCksUGUubGVuZ3RoPjAmJnQucmVkcmF3SGludCgiZWxlcyIsITApLGhlLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpYLHBvc2l0aW9uOnt4OmdlWzBdLHk6Z2VbMV19fSk7dmFyIE1lPW8oZnVuY3Rpb24oUmUpe3JldHVybiBSZS5zZWxlY3RhYmxlKCkmJiFSZS5zZWxlY3RlZCgpfSwiZWxlV291bGRCZVNlbGVjdGVkIik7aGUuc2VsZWN0aW9uVHlwZSgpPT09ImFkZGl0aXZlInx8c2V8fGhlLiQocikudW5tZXJnZShQZSkudW5zZWxlY3QoKSxQZS5lbWl0KCJib3giKS5zdGRGaWx0ZXIoTWUpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLHQucmVkcmF3KCl9aWYodC5ob3ZlckRhdGEuZHJhZ2dpbmcmJih0LmhvdmVyRGF0YS5kcmFnZ2luZz0hMSx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3KCkpLCFuZVs0XSl7dC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIG1lPVRlJiZUZS5ncmFiYmVkKCk7dihVKSxtZSYmKFRlLmVtaXQoImZyZWVvbiIpLFUuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKFRlLmVtaXQoImRyYWdmcmVlb24iKSxVLmVtaXQoImRyYWdmcmVlIikpKX19bmVbNF09MCx0LmhvdmVyRGF0YS5kb3duPW51bGwsdC5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMSx0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITEsdC5ob3ZlckRhdGEuc2VsZWN0aW5nPSExLHQuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9ITEsdC5kcmFnRGF0YS5kaWREcmFnPSExLHQuaG92ZXJEYXRhLmRyYWdnZWQ9ITEsdC5ob3ZlckRhdGEuZHJhZ0RlbHRhPVtdLHQuaG92ZXJEYXRhLm1kb3duUG9zPW51bGwsdC5ob3ZlckRhdGEubWRvd25HUG9zPW51bGwsdC5ob3ZlckRhdGEud2hpY2g9bnVsbH19fSwibW91c2V1cEhhbmRsZXIiKSwhMSk7dmFyIFI9byhmdW5jdGlvbihYKXtpZighdC5zY3JvbGxpbmdQYWdlKXt2YXIgZmU9dC5jeSxoZT1mZS56b29tKCksZ2U9ZmUucGFuKCksbmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFguY2xpZW50WCxYLmNsaWVudFkpLHllPVtuZVswXSpoZStnZS54LG5lWzFdKmhlK2dlLnldO2lmKHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8dC5ob3ZlckRhdGEuZHJhZ2dpbmd8fHQuaG92ZXJEYXRhLmN4dFN0YXJ0ZWR8fEMoKSl7WC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihmZS5wYW5uaW5nRW5hYmxlZCgpJiZmZS51c2VyUGFubmluZ0VuYWJsZWQoKSYmZmUuem9vbWluZ0VuYWJsZWQoKSYmZmUudXNlclpvb21pbmdFbmFibGVkKCkpe1gucHJldmVudERlZmF1bHQoKSx0LmRhdGEud2hlZWxab29taW5nPSEwLGNsZWFyVGltZW91dCh0LmRhdGEud2hlZWxUaW1lb3V0KSx0LmRhdGEud2hlZWxUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmRhdGEud2hlZWxab29taW5nPSExLHQucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3KCl9LDE1MCk7dmFyIFU7WC5kZWx0YVkhPW51bGw/VT1YLmRlbHRhWS8tMjUwOlgud2hlZWxEZWx0YVkhPW51bGw/VT1YLndoZWVsRGVsdGFZLzFlMzpVPVgud2hlZWxEZWx0YS8xZTMsVT1VKnQud2hlZWxTZW5zaXRpdml0eTt2YXIgVGU9WC5kZWx0YU1vZGU9PT0xO1RlJiYoVSo9MzMpO3ZhciBzZT1mZS56b29tKCkqTWF0aC5wb3coMTAsVSk7WC50eXBlPT09Imdlc3R1cmVjaGFuZ2UiJiYoc2U9dC5nZXN0dXJlU3RhcnRab29tKlguc2NhbGUpLGZlLnpvb20oe2xldmVsOnNlLHJlbmRlcmVkUG9zaXRpb246e3g6eWVbMF0seTp5ZVsxXX19KSxmZS5lbWl0KFgudHlwZT09PSJnZXN0dXJlY2hhbmdlIj8icGluY2h6b29tIjoic2Nyb2xsem9vbSIpfX19LCJ3aGVlbEhhbmRsZXIiKTt0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwid2hlZWwiLFIsITApLHQucmVnaXN0ZXJCaW5kaW5nKGUsInNjcm9sbCIsbyhmdW5jdGlvbihYKXt0LnNjcm9sbGluZ1BhZ2U9ITAsY2xlYXJUaW1lb3V0KHQuc2Nyb2xsaW5nUGFnZVRpbWVvdXQpLHQuc2Nyb2xsaW5nUGFnZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2Nyb2xsaW5nUGFnZT0hMX0sMjUwKX0sInNjcm9sbEhhbmRsZXIiKSwhMCksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsImdlc3R1cmVzdGFydCIsbyhmdW5jdGlvbihYKXt0Lmdlc3R1cmVTdGFydFpvb209dC5jeS56b29tKCksdC5oYXNUb3VjaFN0YXJ0ZWR8fFgucHJldmVudERlZmF1bHQoKX0sImdlc3R1cmVTdGFydEhhbmRsZXIiKSwhMCksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKHhlKXt0Lmhhc1RvdWNoU3RhcnRlZHx8Uih4ZSl9LCEwKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwibW91c2VvdXQiLG8oZnVuY3Rpb24oWCl7dmFyIGZlPXQucHJvamVjdEludG9WaWV3cG9ydChYLmNsaWVudFgsWC5jbGllbnRZKTt0LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJtb3VzZW91dCIscG9zaXRpb246e3g6ZmVbMF0seTpmZVsxXX19KX0sIm1vdXNlT3V0SGFuZGxlciIpLCExKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwibW91c2VvdmVyIixvKGZ1bmN0aW9uKFgpe3ZhciBmZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC5jbGllbnRYLFguY2xpZW50WSk7dC5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToibW91c2VvdmVyIixwb3NpdGlvbjp7eDpmZVswXSx5OmZlWzFdfX0pfSwibW91c2VPdmVySGFuZGxlciIpLCExKTt2YXIgUyxPLE4sUCxGLEIsJCx6LFcsaixLLGllLFEsZWU9byhmdW5jdGlvbihYLGZlLGhlLGdlKXtyZXR1cm4gTWF0aC5zcXJ0KChoZS1YKSooaGUtWCkrKGdlLWZlKSooZ2UtZmUpKX0sImRpc3RhbmNlIiksSj1vKGZ1bmN0aW9uKFgsZmUsaGUsZ2Upe3JldHVybihoZS1YKSooaGUtWCkrKGdlLWZlKSooZ2UtZmUpfSwiZGlzdGFuY2VTcSIpLEg7dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInRvdWNoc3RhcnQiLEg9byhmdW5jdGlvbihYKXtpZih0Lmhhc1RvdWNoU3RhcnRlZD0hMCwhIUEoWCkpe2IoKSx0LnRvdWNoRGF0YS5jYXB0dXJlPSEwLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDA7dmFyIGZlPXQuY3ksaGU9dC50b3VjaERhdGEubm93LGdlPXQudG91Y2hEYXRhLmVhcmxpZXI7aWYoWC50b3VjaGVzWzBdKXt2YXIgbmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1swXS5jbGllbnRYLFgudG91Y2hlc1swXS5jbGllbnRZKTtoZVswXT1uZVswXSxoZVsxXT1uZVsxXX1pZihYLnRvdWNoZXNbMV0pe3ZhciBuZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzFdLmNsaWVudFgsWC50b3VjaGVzWzFdLmNsaWVudFkpO2hlWzJdPW5lWzBdLGhlWzNdPW5lWzFdfWlmKFgudG91Y2hlc1syXSl7dmFyIG5lPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMl0uY2xpZW50WCxYLnRvdWNoZXNbMl0uY2xpZW50WSk7aGVbNF09bmVbMF0saGVbNV09bmVbMV19aWYoWC50b3VjaGVzWzFdKXt0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwLHYodC5kcmFnRGF0YS50b3VjaERyYWdFbGVzKTt2YXIgeWU9dC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7Vz15ZVswXSxqPXllWzFdLEs9eWVbMl0saWU9eWVbM10sUz1YLnRvdWNoZXNbMF0uY2xpZW50WC1XLE89WC50b3VjaGVzWzBdLmNsaWVudFktaixOPVgudG91Y2hlc1sxXS5jbGllbnRYLVcsUD1YLnRvdWNoZXNbMV0uY2xpZW50WS1qLFE9MDw9UyYmUzw9SyYmMDw9TiYmTjw9SyYmMDw9TyYmTzw9aWUmJjA8PVAmJlA8PWllO3ZhciBVPWZlLnBhbigpLFRlPWZlLnpvb20oKTtGPWVlKFMsTyxOLFApLEI9SihTLE8sTixQKSwkPVsoUytOKS8yLChPK1ApLzJdLHo9WygkWzBdLVUueCkvVGUsKCRbMV0tVS55KS9UZV07dmFyIHNlPTIwMCxFZT1zZSpzZTtpZihCPEVlJiYhWC50b3VjaGVzWzJdKXt2YXIgQWU9dC5maW5kTmVhcmVzdEVsZW1lbnQoaGVbMF0saGVbMV0sITAsITApLFBlPXQuZmluZE5lYXJlc3RFbGVtZW50KGhlWzJdLGhlWzNdLCEwLCEwKTtBZSYmQWUuaXNOb2RlKCk/KEFlLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpoZVswXSx5OmhlWzFdfX0pLHQudG91Y2hEYXRhLnN0YXJ0PUFlKTpQZSYmUGUuaXNOb2RlKCk/KFBlLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpoZVswXSx5OmhlWzFdfX0pLHQudG91Y2hEYXRhLnN0YXJ0PVBlKTpmZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmhlWzBdLHk6aGVbMV19fSksdC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHQ9ITAsdC50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3KCk7cmV0dXJufX1pZihYLnRvdWNoZXNbMl0pZmUuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZYLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZighWC50b3VjaGVzWzFdKXtpZihYLnRvdWNoZXNbMF0pe3ZhciBNZT10LmZpbmROZWFyZXN0RWxlbWVudHMoaGVbMF0saGVbMV0sITAsITApLG1lPU1lWzBdO2lmKG1lIT1udWxsJiYobWUuYWN0aXZhdGUoKSx0LnRvdWNoRGF0YS5zdGFydD1tZSx0LnRvdWNoRGF0YS5zdGFydHM9TWUsdC5ub2RlSXNHcmFiYmFibGUobWUpKSl7dmFyIFdlPXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcz1mZS5jb2xsZWN0aW9uKCksUmU9bnVsbDt0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSxtZS5zZWxlY3RlZCgpPyhSZT1mZS4kKGZ1bmN0aW9uKFllKXtyZXR1cm4gWWUuc2VsZWN0ZWQoKSYmdC5ub2RlSXNHcmFiYmFibGUoWWUpfSksZyhSZSx7YWRkVG9MaXN0OldlfSkpOnkobWUse2FkZFRvTGlzdDpXZX0pLGYobWUpO3ZhciB0dD1vKGZ1bmN0aW9uKFR0KXtyZXR1cm57b3JpZ2luYWxFdmVudDpYLHR5cGU6VHQscG9zaXRpb246e3g6aGVbMF0seTpoZVsxXX19fSwibWFrZUV2ZW50Iik7bWUuZW1pdCh0dCgiZ3JhYm9uIikpLFJlP1JlLmZvckVhY2goZnVuY3Rpb24oWWUpe1llLmVtaXQodHQoImdyYWIiKSl9KTptZS5lbWl0KHR0KCJncmFiIikpfW4obWUsWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sWCx7eDpoZVswXSx5OmhlWzFdfSksbWU9PW51bGwmJih0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6bmVbMF0seTpuZVsxXX0sdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSExLHQudG91Y2hEYXRhLnNpbmdsZVRvdWNoU3RhcnRUaW1lPStuZXcgRGF0ZSxjbGVhclRpbWVvdXQodC50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQpLHQudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPT09ITEmJiF0LnBpbmNoaW5nJiYhdC50b3VjaERhdGEuc2VsZWN0aW5nJiZuKHQudG91Y2hEYXRhLnN0YXJ0LFsidGFwaG9sZCJdLFgse3g6aGVbMF0seTpoZVsxXX0pfSx0LnRhcGhvbGREdXJhdGlvbil9fWlmKFgudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgZ3Q9dC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLEV0PTA7RXQ8aGUubGVuZ3RoO0V0KyspZ3RbRXRdPWdlW0V0XT1oZVtFdF07dmFyIHZ0PVgudG91Y2hlc1swXTt0LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bdnQuY2xpZW50WCx2dC5jbGllbnRZXX19fSwidG91Y2hzdGFydEhhbmRsZXIiKSwhMSk7dmFyIHE7dC5yZWdpc3RlckJpbmRpbmcoZSwidG91Y2htb3ZlIixxPW8oZnVuY3Rpb24oWCl7dmFyIGZlPXQudG91Y2hEYXRhLmNhcHR1cmU7aWYoISghZmUmJiFBKFgpKSl7dmFyIGhlPXQuc2VsZWN0aW9uLGdlPXQuY3ksbmU9dC50b3VjaERhdGEubm93LHllPXQudG91Y2hEYXRhLmVhcmxpZXIsVT1nZS56b29tKCk7aWYoWC50b3VjaGVzWzBdKXt2YXIgVGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1swXS5jbGllbnRYLFgudG91Y2hlc1swXS5jbGllbnRZKTtuZVswXT1UZVswXSxuZVsxXT1UZVsxXX1pZihYLnRvdWNoZXNbMV0pe3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzFdLmNsaWVudFgsWC50b3VjaGVzWzFdLmNsaWVudFkpO25lWzJdPVRlWzBdLG5lWzNdPVRlWzFdfWlmKFgudG91Y2hlc1syXSl7dmFyIFRlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMl0uY2xpZW50WCxYLnRvdWNoZXNbMl0uY2xpZW50WSk7bmVbNF09VGVbMF0sbmVbNV09VGVbMV19dmFyIHNlPXQudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uLEVlO2lmKGZlJiZYLnRvdWNoZXNbMF0mJnNlKXtmb3IodmFyIEFlPVtdLFBlPTA7UGU8bmUubGVuZ3RoO1BlKyspQWVbUGVdPW5lW1BlXS15ZVtQZV07dmFyIE1lPVgudG91Y2hlc1swXS5jbGllbnRYLXNlWzBdLG1lPU1lKk1lLFdlPVgudG91Y2hlc1swXS5jbGllbnRZLXNlWzFdLFJlPVdlKldlLHR0PW1lK1JlO0VlPXR0Pj10LnRvdWNoVGFwVGhyZXNob2xkMn1pZihmZSYmdC50b3VjaERhdGEuY3h0KXtYLnByZXZlbnREZWZhdWx0KCk7dmFyIGd0PVgudG91Y2hlc1swXS5jbGllbnRYLVcsRXQ9WC50b3VjaGVzWzBdLmNsaWVudFktaix2dD1YLnRvdWNoZXNbMV0uY2xpZW50WC1XLFllPVgudG91Y2hlc1sxXS5jbGllbnRZLWosVHQ9SihndCxFdCx2dCxZZSksJGU9VHQvQixydD0xNTAsZnQ9cnQqcnQsa3Q9MS41LGVyPWt0Kmt0O2lmKCRlPj1lcnx8VHQ+PWZ0KXt0LnRvdWNoRGF0YS5jeHQ9ITEsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciBkdD17b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6bmVbMF0seTpuZVsxXX19O3QudG91Y2hEYXRhLnN0YXJ0Pyh0LnRvdWNoRGF0YS5zdGFydC51bmFjdGl2YXRlKCkuZW1pdChkdCksdC50b3VjaERhdGEuc3RhcnQ9bnVsbCk6Z2UuZW1pdChkdCl9fWlmKGZlJiZ0LnRvdWNoRGF0YS5jeHQpe3ZhciBkdD17b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fTt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC50b3VjaERhdGEuc3RhcnQ/dC50b3VjaERhdGEuc3RhcnQuZW1pdChkdCk6Z2UuZW1pdChkdCksdC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSEwO3ZhciBYZT10LmZpbmROZWFyZXN0RWxlbWVudChuZVswXSxuZVsxXSwhMCwhMCk7KCF0LnRvdWNoRGF0YS5jeHRPdmVyfHxYZSE9PXQudG91Y2hEYXRhLmN4dE92ZXIpJiYodC50b3VjaERhdGEuY3h0T3ZlciYmdC50b3VjaERhdGEuY3h0T3Zlci5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0ZHJhZ291dCIscG9zaXRpb246e3g6bmVbMF0seTpuZVsxXX19KSx0LnRvdWNoRGF0YS5jeHRPdmVyPVhlLFhlJiZYZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0ZHJhZ292ZXIiLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fSkpfWVsc2UgaWYoZmUmJlgudG91Y2hlc1syXSYmZ2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpKVgucHJldmVudERlZmF1bHQoKSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHRoaXMubGFzdFRocmVlVG91Y2g9K25ldyBEYXRlLHQudG91Y2hEYXRhLnNlbGVjdGluZ3x8Z2UuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImJveHN0YXJ0Iixwb3NpdGlvbjp7eDpuZVswXSx5Om5lWzFdfX0pLHQudG91Y2hEYXRhLnNlbGVjdGluZz0hMCx0LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITAsaGVbNF09MSwhaGV8fGhlLmxlbmd0aD09PTB8fGhlWzBdPT09dm9pZCAwPyhoZVswXT0obmVbMF0rbmVbMl0rbmVbNF0pLzMsaGVbMV09KG5lWzFdK25lWzNdK25lWzVdKS8zLGhlWzJdPShuZVswXStuZVsyXStuZVs0XSkvMysxLGhlWzNdPShuZVsxXStuZVszXStuZVs1XSkvMysxKTooaGVbMl09KG5lWzBdK25lWzJdK25lWzRdKS8zLGhlWzNdPShuZVsxXStuZVszXStuZVs1XSkvMyksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpO2Vsc2UgaWYoZmUmJlgudG91Y2hlc1sxXSYmIXQudG91Y2hEYXRhLmRpZFNlbGVjdCYmZ2Uuem9vbWluZ0VuYWJsZWQoKSYmZ2UucGFubmluZ0VuYWJsZWQoKSYmZ2UudXNlclpvb21pbmdFbmFibGVkKCkmJmdlLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXtYLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciBjdD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7aWYoY3Qpe3QucmVkcmF3SGludCgiZHJhZyIsITApO2Zvcih2YXIgTHQ9MDtMdDxjdC5sZW5ndGg7THQrKyl7dmFyIFJ0PWN0W0x0XS5fcHJpdmF0ZTtSdC5ncmFiYmVkPSExLFJ0LnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfX12YXIgenQ9dC50b3VjaERhdGEuc3RhcnQsZ3Q9WC50b3VjaGVzWzBdLmNsaWVudFgtVyxFdD1YLnRvdWNoZXNbMF0uY2xpZW50WS1qLHZ0PVgudG91Y2hlc1sxXS5jbGllbnRYLVcsWWU9WC50b3VjaGVzWzFdLmNsaWVudFktaixYbj1lZShndCxFdCx2dCxZZSksb3I9WG4vRjtpZihRKXt2YXIgaG49Z3QtUyxUbj1FdC1PLFVyPXZ0LU4scmk9WWUtUCxNbj0oaG4rVXIpLzIseXQ9KFRuK3JpKS8yLFNlPWdlLnpvb20oKSxhdD1TZSpvcixBdD1nZS5wYW4oKSxwcj16WzBdKlNlK0F0LngsSW49elsxXSpTZStBdC55LE9uPXt4Oi1hdC9TZSoocHItQXQueC1NbikrcHIseTotYXQvU2UqKEluLUF0LnkteXQpK0lufTtpZih6dCYmenQuYWN0aXZlKCkpe3ZhciBjdD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7dihjdCksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksenQudW5hY3RpdmF0ZSgpLmVtaXQoImZyZWVvbiIpLGN0LmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJih6dC5lbWl0KCJkcmFnZnJlZW9uIiksY3QuZW1pdCgiZHJhZ2ZyZWUiKSl9Z2Uudmlld3BvcnQoe3pvb206YXQscGFuOk9uLGNhbmNlbE9uRmFpbGVkWm9vbTohMH0pLGdlLmVtaXQoInBpbmNoem9vbSIpLEY9WG4sUz1ndCxPPUV0LE49dnQsUD1ZZSx0LnBpbmNoaW5nPSEwfWlmKFgudG91Y2hlc1swXSl7dmFyIFRlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMF0uY2xpZW50WCxYLnRvdWNoZXNbMF0uY2xpZW50WSk7bmVbMF09VGVbMF0sbmVbMV09VGVbMV19aWYoWC50b3VjaGVzWzFdKXt2YXIgVGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1sxXS5jbGllbnRYLFgudG91Y2hlc1sxXS5jbGllbnRZKTtuZVsyXT1UZVswXSxuZVszXT1UZVsxXX1pZihYLnRvdWNoZXNbMl0pe3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzJdLmNsaWVudFgsWC50b3VjaGVzWzJdLmNsaWVudFkpO25lWzRdPVRlWzBdLG5lWzVdPVRlWzFdfX1lbHNlIGlmKFgudG91Y2hlc1swXSYmIXQudG91Y2hEYXRhLmRpZFNlbGVjdCl7dmFyIElyPXQudG91Y2hEYXRhLnN0YXJ0LGtuPXQudG91Y2hEYXRhLmxhc3QsWGU7aWYoIXQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXQuc3dpcGVQYW5uaW5nJiYoWGU9dC5maW5kTmVhcmVzdEVsZW1lbnQobmVbMF0sbmVbMV0sITAsITApKSxmZSYmSXIhPW51bGwmJlgucHJldmVudERlZmF1bHQoKSxmZSYmSXIhPW51bGwmJnQubm9kZUlzRHJhZ2dhYmxlKElyKSlpZihFZSl7dmFyIGN0PXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyxfdD0hdC5kcmFnRGF0YS5kaWREcmFnO190JiZnKGN0LHtpbkRyYWdMYXllcjohMH0pLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgU3Q9e3g6MCx5OjB9O2lmKHh0KEFlWzBdKSYmeHQoQWVbMV0pJiYoU3QueCs9QWVbMF0sU3QueSs9QWVbMV0sX3QpKXt0LnJlZHJhd0hpbnQoImVsZXMiLCEwKTt2YXIgYnQ9dC50b3VjaERhdGEuZHJhZ0RlbHRhO2J0JiZ4dChidFswXSkmJnh0KGJ0WzFdKSYmKFN0LngrPWJ0WzBdLFN0LnkrPWJ0WzFdKX10LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITAsY3Quc2lsZW50U2hpZnQoU3QpLmVtaXQoInBvc2l0aW9uIGRyYWciKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzBdPT15ZVswXSYmdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblsxXT09eWVbMV0mJnQucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3KCl9ZWxzZXt2YXIgYnQ9dC50b3VjaERhdGEuZHJhZ0RlbHRhPXQudG91Y2hEYXRhLmRyYWdEZWx0YXx8W107YnQubGVuZ3RoPT09MD8oYnQucHVzaChBZVswXSksYnQucHVzaChBZVsxXSkpOihidFswXSs9QWVbMF0sYnRbMV0rPUFlWzFdKX1pZihuKElyfHxYZSxbInRvdWNobW92ZSIsInRhcGRyYWciLCJ2bW91c2Vtb3ZlIl0sWCx7eDpuZVswXSx5Om5lWzFdfSksKCFJcnx8IUlyLmdyYWJiZWQoKSkmJlhlIT1rbiYmKGtuJiZrbi5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToidGFwZHJhZ291dCIscG9zaXRpb246e3g6bmVbMF0seTpuZVsxXX19KSxYZSYmWGUuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6InRhcGRyYWdvdmVyIixwb3NpdGlvbjp7eDpuZVswXSx5Om5lWzFdfX0pKSx0LnRvdWNoRGF0YS5sYXN0PVhlLGZlKWZvcih2YXIgTHQ9MDtMdDxuZS5sZW5ndGg7THQrKyluZVtMdF0mJnQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bTHRdJiZFZSYmKHQudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITApO2lmKGZlJiYoSXI9PW51bGx8fElyLnBhbm5hYmxlKCkpJiZnZS5wYW5uaW5nRW5hYmxlZCgpJiZnZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7dmFyIFVlPWEoSXIsdC50b3VjaERhdGEuc3RhcnRzKTtVZSYmKFgucHJldmVudERlZmF1bHQoKSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb258fCh0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249cjEodC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbikpLHQuc3dpcGVQYW5uaW5nPyhnZS5wYW5CeSh7eDpBZVswXSpVLHk6QWVbMV0qVX0pLGdlLmVtaXQoImRyYWdwYW4iKSk6RWUmJih0LnN3aXBlUGFubmluZz0hMCxnZS5wYW5CeSh7eDpNZSpVLHk6V2UqVX0pLGdlLmVtaXQoImRyYWdwYW4iKSxJciYmKElyLnVuYWN0aXZhdGUoKSx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIFRlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMF0uY2xpZW50WCxYLnRvdWNoZXNbMF0uY2xpZW50WSk7bmVbMF09VGVbMF0sbmVbMV09VGVbMV19fWZvcih2YXIgUGU9MDtQZTxuZS5sZW5ndGg7UGUrKyl5ZVtQZV09bmVbUGVdO2ZlJiZYLnRvdWNoZXMubGVuZ3RoPjAmJiF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LnN3aXBlUGFubmluZyYmdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpfX0sInRvdWNobW92ZUhhbmRsZXIiKSwhMSk7dmFyIFo7dC5yZWdpc3RlckJpbmRpbmcoZSwidG91Y2hjYW5jZWwiLFo9byhmdW5jdGlvbihYKXt2YXIgZmU9dC50b3VjaERhdGEuc3RhcnQ7dC50b3VjaERhdGEuY2FwdHVyZT0hMSxmZSYmZmUudW5hY3RpdmF0ZSgpfSwidG91Y2hjYW5jZWxIYW5kbGVyIikpO3ZhciBhZSx1ZSxjZSx0ZTtpZih0LnJlZ2lzdGVyQmluZGluZyhlLCJ0b3VjaGVuZCIsYWU9byhmdW5jdGlvbihYKXt2YXIgZmU9dC50b3VjaERhdGEuc3RhcnQsaGU9dC50b3VjaERhdGEuY2FwdHVyZTtpZihoZSlYLnRvdWNoZXMubGVuZ3RoPT09MCYmKHQudG91Y2hEYXRhLmNhcHR1cmU9ITEpLFgucHJldmVudERlZmF1bHQoKTtlbHNlIHJldHVybjt2YXIgZ2U9dC5zZWxlY3Rpb247dC5zd2lwZVBhbm5pbmc9ITEsdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExO3ZhciBuZT10LmN5LHllPW5lLnpvb20oKSxVPXQudG91Y2hEYXRhLm5vdyxUZT10LnRvdWNoRGF0YS5lYXJsaWVyO2lmKFgudG91Y2hlc1swXSl7dmFyIHNlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMF0uY2xpZW50WCxYLnRvdWNoZXNbMF0uY2xpZW50WSk7VVswXT1zZVswXSxVWzFdPXNlWzFdfWlmKFgudG91Y2hlc1sxXSl7dmFyIHNlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMV0uY2xpZW50WCxYLnRvdWNoZXNbMV0uY2xpZW50WSk7VVsyXT1zZVswXSxVWzNdPXNlWzFdfWlmKFgudG91Y2hlc1syXSl7dmFyIHNlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMl0uY2xpZW50WCxYLnRvdWNoZXNbMl0uY2xpZW50WSk7VVs0XT1zZVswXSxVWzVdPXNlWzFdfWZlJiZmZS51bmFjdGl2YXRlKCk7dmFyIEVlO2lmKHQudG91Y2hEYXRhLmN4dCl7aWYoRWU9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX0sZmU/ZmUuZW1pdChFZSk6bmUuZW1pdChFZSksIXQudG91Y2hEYXRhLmN4dERyYWdnZWQpe3ZhciBBZT17b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcCIscG9zaXRpb246e3g6VVswXSx5OlVbMV19fTtmZT9mZS5lbWl0KEFlKTpuZS5lbWl0KEFlKX10LnRvdWNoRGF0YS5zdGFydCYmKHQudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHQudG91Y2hEYXRhLmN4dD0hMSx0LnRvdWNoRGF0YS5zdGFydD1udWxsLHQucmVkcmF3KCk7cmV0dXJufWlmKCFYLnRvdWNoZXNbMl0mJm5lLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmdC50b3VjaERhdGEuc2VsZWN0aW5nKXt0LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITE7dmFyIFBlPW5lLmNvbGxlY3Rpb24odC5nZXRBbGxJbkJveChnZVswXSxnZVsxXSxnZVsyXSxnZVszXSkpO2dlWzBdPXZvaWQgMCxnZVsxXT12b2lkIDAsZ2VbMl09dm9pZCAwLGdlWzNdPXZvaWQgMCxnZVs0XT0wLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksbmUuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OlgscG9zaXRpb246e3g6VVswXSx5OlVbMV19fSk7dmFyIE1lPW8oZnVuY3Rpb24oZnQpe3JldHVybiBmdC5zZWxlY3RhYmxlKCkmJiFmdC5zZWxlY3RlZCgpfSwiZWxlV291bGRCZVNlbGVjdGVkIik7UGUuZW1pdCgiYm94Iikuc3RkRmlsdGVyKE1lKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSxQZS5ub25lbXB0eSgpJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfWlmKGZlPy51bmFjdGl2YXRlKCksWC50b3VjaGVzWzJdKXQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTtlbHNlIGlmKCFYLnRvdWNoZXNbMV0pe2lmKCFYLnRvdWNoZXNbMF0pe2lmKCFYLnRvdWNoZXNbMF0pe3QuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgbWU9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGZlIT1udWxsKXt2YXIgV2U9ZmUuX3ByaXZhdGUuZ3JhYmJlZDt2KG1lKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxXZSYmKGZlLmVtaXQoImZyZWVvbiIpLG1lLmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihmZS5lbWl0KCJkcmFnZnJlZW9uIiksbWUuZW1pdCgiZHJhZ2ZyZWUiKSkpLG4oZmUsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFgse3g6VVswXSx5OlVbMV19KSxmZS51bmFjdGl2YXRlKCksdC50b3VjaERhdGEuc3RhcnQ9bnVsbH1lbHNle3ZhciBSZT10LmZpbmROZWFyZXN0RWxlbWVudChVWzBdLFVbMV0sITAsITApO24oUmUsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFgse3g6VVswXSx5OlVbMV19KX12YXIgdHQ9dC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS1VWzBdLGd0PXR0KnR0LEV0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV0tVVsxXSx2dD1FdCpFdCxZZT1ndCt2dCxUdD1ZZSp5ZSp5ZTt0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkfHwoZmV8fG5lLiQoIjpzZWxlY3RlZCIpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksbihmZSxbInRhcCIsInZjbGljayJdLFgse3g6VVswXSx5OlVbMV19KSx1ZT0hMSxYLnRpbWVTdGFtcC10ZTw9bmUubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhjZSYmY2xlYXJUaW1lb3V0KGNlKSx1ZT0hMCx0ZT1udWxsLG4oZmUsWyJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxYLHt4OlVbMF0seTpVWzFdfSkpOihjZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dWV8fG4oZmUsWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxYLHt4OlVbMF0seTpVWzFdfSl9LG5lLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksdGU9WC50aW1lU3RhbXApKSxmZSE9bnVsbCYmIXQuZHJhZ0RhdGEuZGlkRHJhZyYmZmUuX3ByaXZhdGUuc2VsZWN0YWJsZSYmVHQ8dC50b3VjaFRhcFRocmVzaG9sZDImJiF0LnBpbmNoaW5nJiYobmUuc2VsZWN0aW9uVHlwZSgpPT09InNpbmdsZSI/KG5lLiQocikudW5tZXJnZShmZSkudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxmZS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpOmZlLnNlbGVjdGVkKCk/ZmUudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKTpmZS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCkpLHQudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITB9fX1mb3IodmFyICRlPTA7JGU8VS5sZW5ndGg7JGUrKylUZVskZV09VVskZV07dC5kcmFnRGF0YS5kaWREcmFnPSExLFgudG91Y2hlcy5sZW5ndGg9PT0wJiYodC50b3VjaERhdGEuZHJhZ0RlbHRhPVtdLHQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb249W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSx0LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1udWxsLHQudG91Y2hEYXRhLmRpZFNlbGVjdD0hMSksWC50b3VjaGVzLmxlbmd0aDwyJiYoWC50b3VjaGVzLmxlbmd0aD09PTEmJih0LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bWC50b3VjaGVzWzBdLmNsaWVudFgsWC50b3VjaGVzWzBdLmNsaWVudFldKSx0LnBpbmNoaW5nPSExLHQucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3KCkpfSwidG91Y2hlbmRIYW5kbGVyIiksITEpLHR5cGVvZiBUb3VjaEV2ZW50PiJ1Iil7dmFyIERlPVtdLG9lPW8oZnVuY3Rpb24oWCl7cmV0dXJue2NsaWVudFg6WC5jbGllbnRYLGNsaWVudFk6WC5jbGllbnRZLGZvcmNlOjEsaWRlbnRpZmllcjpYLnBvaW50ZXJJZCxwYWdlWDpYLnBhZ2VYLHBhZ2VZOlgucGFnZVkscmFkaXVzWDpYLndpZHRoLzIscmFkaXVzWTpYLmhlaWdodC8yLHNjcmVlblg6WC5zY3JlZW5YLHNjcmVlblk6WC5zY3JlZW5ZLHRhcmdldDpYLnRhcmdldH19LCJtYWtlVG91Y2giKSxrZT1vKGZ1bmN0aW9uKFgpe3JldHVybntldmVudDpYLHRvdWNoOm9lKFgpfX0sIm1ha2VQb2ludGVyIiksRmU9byhmdW5jdGlvbihYKXtEZS5wdXNoKGtlKFgpKX0sImFkZFBvaW50ZXIiKSxCZT1vKGZ1bmN0aW9uKFgpe2Zvcih2YXIgZmU9MDtmZTxEZS5sZW5ndGg7ZmUrKyl7dmFyIGhlPURlW2ZlXTtpZihoZS5ldmVudC5wb2ludGVySWQ9PT1YLnBvaW50ZXJJZCl7RGUuc3BsaWNlKGZlLDEpO3JldHVybn19fSwicmVtb3ZlUG9pbnRlciIpLFZlPW8oZnVuY3Rpb24oWCl7dmFyIGZlPURlLmZpbHRlcihmdW5jdGlvbihoZSl7cmV0dXJuIGhlLmV2ZW50LnBvaW50ZXJJZD09PVgucG9pbnRlcklkfSlbMF07ZmUuZXZlbnQ9WCxmZS50b3VjaD1vZShYKX0sInVwZGF0ZVBvaW50ZXIiKSxHZT1vKGZ1bmN0aW9uKFgpe1gudG91Y2hlcz1EZS5tYXAoZnVuY3Rpb24oZmUpe3JldHVybiBmZS50b3VjaH0pfSwiYWRkVG91Y2hlc1RvRXZlbnQiKSxIZT1vKGZ1bmN0aW9uKFgpe3JldHVybiBYLnBvaW50ZXJUeXBlPT09Im1vdXNlInx8WC5wb2ludGVyVHlwZT09PTR9LCJwb2ludGVySXNNb3VzZSIpO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJwb2ludGVyZG93biIsZnVuY3Rpb24oeGUpe0hlKHhlKXx8KHhlLnByZXZlbnREZWZhdWx0KCksRmUoeGUpLEdlKHhlKSxIKHhlKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcnVwIixmdW5jdGlvbih4ZSl7SGUoeGUpfHwoQmUoeGUpLEdlKHhlKSxhZSh4ZSkpfSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInBvaW50ZXJjYW5jZWwiLGZ1bmN0aW9uKHhlKXtIZSh4ZSl8fChCZSh4ZSksR2UoeGUpLFooeGUpKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJwb2ludGVybW92ZSIsZnVuY3Rpb24oeGUpe0hlKHhlKXx8KHhlLnByZXZlbnREZWZhdWx0KCksVmUoeGUpLEdlKHhlKSxxKHhlKSl9KX19O1F1PXt9O1F1LmdlbmVyYXRlUG9seWdvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbdF09e3JlbmRlcmVyOnRoaXMsbmFtZTp0LHBvaW50czplLGRyYXc6byhmdW5jdGlvbihuLGksYSxzLGwsdSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJwb2x5Z29uIixuLGksYSxzLGwsdGhpcy5wb2ludHMpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYpe3JldHVybiBZeChsLHUsdGhpcy5wb2ludHMsbixpLGEvMixzLzIsaCl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZil7cmV0dXJuIGp1KG4saSx0aGlzLnBvaW50cyx1LGgscyxsLFswLC0xXSxhKX0sImNoZWNrUG9pbnQiKX19O1F1LmdlbmVyYXRlRWxsaXBzZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXMuZWxsaXBzZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJlbGxpcHNlIixkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXtyZXR1cm4gSGplKGEscyxlLHIsbi8yK2wsaS8yK2wpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3JldHVybiBCMChlLHIsaSxhLHMsbCxuKX0sImNoZWNrUG9pbnQiKX19O1F1LmdlbmVyYXRlUm91bmRQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t0XT17cmVuZGVyZXI6dGhpcyxuYW1lOnQscG9pbnRzOmUsZ2V0T3JDcmVhdGVDb3JuZXJzOm8oZnVuY3Rpb24obixpLGEscyxsLHUsaCl7aWYodVtoXSE9PXZvaWQgMCYmdVtoKyItY3giXT09PW4mJnVbaCsiLWN5Il09PT1pKXJldHVybiB1W2hdO3VbaF09bmV3IEFycmF5KGUubGVuZ3RoLzIpLHVbaCsiLWN4Il09bix1W2grIi1jeSJdPWk7dmFyIGY9YS8yLGQ9cy8yO2w9bD09PSJhdXRvIj9nZ2UoYSxzKTpsO2Zvcih2YXIgcD1uZXcgQXJyYXkoZS5sZW5ndGgvMiksbT0wO208ZS5sZW5ndGgvMjttKyspcFttXT17eDpuK2YqZVttKjJdLHk6aStkKmVbbSoyKzFdfTt2YXIgZyx5LHYseCxiPXAubGVuZ3RoO2Zvcih5PXBbYi0xXSxnPTA7ZzxiO2crKyl2PXBbZyViXSx4PXBbKGcrMSklYl0sdVtoXVtnXT1iQih5LHYseCxsKSx5PXYsdj14O3JldHVybiB1W2hdfSwiZ2V0T3JDcmVhdGVDb3JuZXJzIiksZHJhdzpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicm91bmQtcG9seWdvbiIsbixpLGEscyxsLHRoaXMucG9pbnRzLHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGksYSxzLGwsdSxoLCJkcmF3Q29ybmVycyIpKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmLGQpe3JldHVybiBXamUobCx1LHRoaXMucG9pbnRzLG4saSxhLHMsaCx0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhuLGksYSxzLGYsZCwiY29ybmVycyIpKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmLGQpe3JldHVybiBVamUobixpLHRoaXMucG9pbnRzLHUsaCxzLGwsdGhpcy5nZXRPckNyZWF0ZUNvcm5lcnModSxoLHMsbCxmLGQsImNvcm5lcnMiKSl9LCJjaGVja1BvaW50Iil9fTtRdS5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1sicm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLnJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6InJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmxzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSx0aGlzLnBvaW50cyxzKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXtyZXR1cm4gcGdlKGEscyxlLHIsbixpLGwsdSl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9aS8yLGY9YS8yO3U9dT09PSJhdXRvIj8kMChpLGEpOnUsdT1NYXRoLm1pbihoLGYsdSk7dmFyIGQ9dSoyO3JldHVybiEhKGp1KGUscix0aGlzLnBvaW50cyxzLGwsaSxhLWQsWzAsLTFdLG4pfHxqdShlLHIsdGhpcy5wb2ludHMscyxsLGktZCxhLFswLC0xXSxuKXx8QjAoZSxyLGQsZCxzLWgrdSxsLWYrdSxuKXx8QjAoZSxyLGQsZCxzK2gtdSxsLWYrdSxuKXx8QjAoZSxyLGQsZCxzK2gtdSxsK2YtdSxuKXx8QjAoZSxyLGQsZCxzLWgrdSxsK2YtdSxuKSl9LCJjaGVja1BvaW50Iil9fTtRdS5nZW5lcmF0ZUN1dFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImN1dC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuY3V0cmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImN1dC1yZWN0YW5nbGUiLGNvcm5lckxlbmd0aDpsQigpLHBvaW50czpscyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEsbnVsbCxzKX0sImRyYXciKSxnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzOm8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz1hPT09ImF1dG8iP3RoaXMuY29ybmVyTGVuZ3RoOmEsbD1yLzIsdT1lLzIsaD1uLXUsZj1uK3UsZD1pLWwscD1pK2w7cmV0dXJue3RvcExlZnQ6W2gsZCtzLGgrcyxkLGgrcyxkK3NdLHRvcFJpZ2h0OltmLXMsZCxmLGQrcyxmLXMsZCtzXSxib3R0b21SaWdodDpbZixwLXMsZi1zLHAsZi1zLHAtc10sYm90dG9tTGVmdDpbaCtzLHAsaCxwLXMsaCtzLHAtc119fSwiZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhuKzIqbCxpKzIqbCxlLHIsdSksZj1bXS5jb25jYXQuYXBwbHkoW10sW2gudG9wTGVmdC5zcGxpY2UoMCw0KSxoLnRvcFJpZ2h0LnNwbGljZSgwLDQpLGguYm90dG9tUmlnaHQuc3BsaWNlKDAsNCksaC5ib3R0b21MZWZ0LnNwbGljZSgwLDQpXSk7cmV0dXJuIFl4KGEscyxmLGUscil9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9dT09PSJhdXRvIj90aGlzLmNvcm5lckxlbmd0aDp1O2lmKGp1KGUscix0aGlzLnBvaW50cyxzLGwsaSxhLTIqaCxbMCwtMV0sbil8fGp1KGUscix0aGlzLnBvaW50cyxzLGwsaS0yKmgsYSxbMCwtMV0sbikpcmV0dXJuITA7dmFyIGY9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKGksYSxzLGwpO3JldHVybiBHcyhlLHIsZi50b3BMZWZ0KXx8R3MoZSxyLGYudG9wUmlnaHQpfHxHcyhlLHIsZi5ib3R0b21SaWdodCl8fEdzKGUscixmLmJvdHRvbUxlZnQpfSwiY2hlY2tQb2ludCIpfX07UXUuZ2VuZXJhdGVCYXJyZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmJhcnJlbD17cmVuZGVyZXI6dGhpcyxuYW1lOiJiYXJyZWwiLHBvaW50czpscyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPS4xNSxmPS41LGQ9Ljg1LHA9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhuKzIqbCxpKzIqbCxlLHIpLG09byhmdW5jdGlvbih2KXt2YXIgeD1pMSh7eDp2WzBdLHk6dlsxXX0se3g6dlsyXSx5OnZbM119LHt4OnZbNF0seTp2WzVdfSxoKSxiPWkxKHt4OnZbMF0seTp2WzFdfSx7eDp2WzJdLHk6dlszXX0se3g6dls0XSx5OnZbNV19LGYpLHc9aTEoe3g6dlswXSx5OnZbMV19LHt4OnZbMl0seTp2WzNdfSx7eDp2WzRdLHk6dls1XX0sZCk7cmV0dXJuW3ZbMF0sdlsxXSx4LngseC55LGIueCxiLnksdy54LHcueSx2WzRdLHZbNV1dfSwiYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyIpLGc9W10uY29uY2F0KG0ocC50b3BMZWZ0KSxtKHAudG9wUmlnaHQpLG0ocC5ib3R0b21SaWdodCksbShwLmJvdHRvbUxlZnQpKTtyZXR1cm4gWXgoYSxzLGcsZSxyKX0sImludGVyc2VjdExpbmUiKSxnZW5lcmF0ZUJhcnJlbEJlemllclB0czpvKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIvMixzPWUvMixsPW4tcyx1PW4rcyxoPWktYSxmPWkrYSxkPUZQKGUscikscD1kLmhlaWdodE9mZnNldCxtPWQud2lkdGhPZmZzZXQsZz1kLmN0cmxQdE9mZnNldFBjdCplLHk9e3RvcExlZnQ6W2wsaCtwLGwrZyxoLGwrbSxoXSx0b3BSaWdodDpbdS1tLGgsdS1nLGgsdSxoK3BdLGJvdHRvbVJpZ2h0Olt1LGYtcCx1LWcsZix1LW0sZl0sYm90dG9tTGVmdDpbbCttLGYsbCtnLGYsbCxmLXBdfTtyZXR1cm4geS50b3BMZWZ0LmlzVG9wPSEwLHkudG9wUmlnaHQuaXNUb3A9ITAseS5ib3R0b21MZWZ0LmlzQm90dG9tPSEwLHkuYm90dG9tUmlnaHQuaXNCb3R0b209ITAseX0sImdlbmVyYXRlQmFycmVsQmV6aWVyUHRzIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9RlAoaSxhKSxmPWguaGVpZ2h0T2Zmc2V0LGQ9aC53aWR0aE9mZnNldDtpZihqdShlLHIsdGhpcy5wb2ludHMscyxsLGksYS0yKmYsWzAsLTFdLG4pfHxqdShlLHIsdGhpcy5wb2ludHMscyxsLGktMipkLGEsWzAsLTFdLG4pKXJldHVybiEwO2Zvcih2YXIgcD10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKGksYSxzLGwpLG09byhmdW5jdGlvbihDLEEsSSl7dmFyIEQ9SVs0XSxrPUlbMl0sUj1JWzBdLFM9SVs1XSxPPUlbMV0sTj1NYXRoLm1pbihELFIpLFA9TWF0aC5tYXgoRCxSKSxGPU1hdGgubWluKFMsTyksQj1NYXRoLm1heChTLE8pO2lmKE48PUMmJkM8PVAmJkY8PUEmJkE8PUIpe3ZhciAkPVlqZShELGssUiksej16amUoJFswXSwkWzFdLCRbMl0sQyksVz16LmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4gMDw9aiYmajw9MX0pO2lmKFcubGVuZ3RoPjApcmV0dXJuIFdbMF19cmV0dXJuIG51bGx9LCJnZXRDdXJ2ZVQiKSxnPU9iamVjdC5rZXlzKHApLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHY9Z1t5XSx4PXBbdl0sYj1tKGUscix4KTtpZihiIT1udWxsKXt2YXIgdz14WzVdLF89eFszXSxUPXhbMV0sRT1pYSh3LF8sVCxiKTtpZih4LmlzVG9wJiZFPD1yfHx4LmlzQm90dG9tJiZyPD1FKXJldHVybiEwfX1yZXR1cm4hMX0sImNoZWNrUG9pbnQiKX19O1F1LmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJib3R0b20tcm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmJvdHRvbXJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLHBvaW50czpscyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEsdGhpcy5wb2ludHMscyl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9ZS0obi8yK2wpLGY9ci0oaS8yK2wpLGQ9ZixwPWUrKG4vMitsKSxtPVRmKGEscyxlLHIsaCxmLHAsZCwhMSk7cmV0dXJuIG0ubGVuZ3RoPjA/bTpwZ2UoYSxzLGUscixuLGksbCx1KX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt1PXU9PT0iYXV0byI/JDAoaSxhKTp1O3ZhciBoPTIqdTtpZihqdShlLHIsdGhpcy5wb2ludHMscyxsLGksYS1oLFswLC0xXSxuKXx8anUoZSxyLHRoaXMucG9pbnRzLHMsbCxpLWgsYSxbMCwtMV0sbikpcmV0dXJuITA7dmFyIGY9aS8yKzIqbixkPWEvMisyKm4scD1bcy1mLGwtZCxzLWYsbCxzK2YsbCxzK2YsbC1kXTtyZXR1cm4hIShHcyhlLHIscCl8fEIwKGUscixoLGgscytpLzItdSxsK2EvMi11LG4pfHxCMChlLHIsaCxoLHMtaS8yK3UsbCthLzItdSxuKSl9LCJjaGVja1BvaW50Iil9fTtRdS5yZWdpc3Rlck5vZGVTaGFwZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5vZGVTaGFwZXM9e30sZT10aGlzO3RoaXMuZ2VuZXJhdGVFbGxpcHNlKCksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInRyaWFuZ2xlIixscygzLDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC10cmlhbmdsZSIsbHMoMywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJlY3RhbmdsZSIsbHMoNCwwKSksdC5zcXVhcmU9dC5yZWN0YW5nbGUsdGhpcy5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUN1dFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVCYXJyZWwoKSx0aGlzLmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGUoKTt7dmFyIHI9WzAsMSwxLDAsMCwtMSwtMSwwXTt0aGlzLmdlbmVyYXRlUG9seWdvbigiZGlhbW9uZCIsciksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtZGlhbW9uZCIscil9dGhpcy5nZW5lcmF0ZVBvbHlnb24oInBlbnRhZ29uIixscyg1LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1wZW50YWdvbiIsbHMoNSwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhleGFnb24iLGxzKDYsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhleGFnb24iLGxzKDYsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXB0YWdvbiIsbHMoNywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGVwdGFnb24iLGxzKDcsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJvY3RhZ29uIixscyg4LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1vY3RhZ29uIixscyg4LDApKTt2YXIgbj1uZXcgQXJyYXkoMjApO3t2YXIgaT1CUCg1LDApLGE9QlAoNSxNYXRoLlBJLzUpLHM9LjUqKDMtTWF0aC5zcXJ0KDUpKTtzKj0xLjU3O2Zvcih2YXIgbD0wO2w8YS5sZW5ndGgvMjtsKyspYVtsKjJdKj1zLGFbbCoyKzFdKj1zO2Zvcih2YXIgbD0wO2w8MjAvNDtsKyspbltsKjRdPWlbbCoyXSxuW2wqNCsxXT1pW2wqMisxXSxuW2wqNCsyXT1hW2wqMl0sbltsKjQrM109YVtsKjIrMV19bj1tZ2UobiksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInN0YXIiLG4pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ2ZWUiLFstMSwtMSwwLC0uMzMzLDEsLTEsMCwxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJob21ib2lkIixbLTEsLTEsLjMzMywtMSwxLDEsLS4zMzMsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaWdodC1yaG9tYm9pZCIsWy0uMzMzLC0xLDEsLTEsLjMzMywxLC0xLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIHU9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIsdSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIix1KX10Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKGgpe3ZhciBmPWguam9pbigiJCIpLGQ9InBvbHlnb24tIitmLHA7cmV0dXJuKHA9dGhpc1tkXSk/cDplLmdlbmVyYXRlUG9seWdvbihkLGgpfX07YWI9e307YWIudGltZVRvUmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3VG90YWxUaW1lL3RoaXMucmVkcmF3Q291bnR9O2FiLnJlZHJhdz1mdW5jdGlvbih0KXt0PXR8fGNnZSgpO3ZhciBlPXRoaXM7ZS5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKGUuYXZlcmFnZVJlZHJhd1RpbWU9MCksZS5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKGUubGFzdFJlZHJhd1RpbWU9MCksZS5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihlLmxhc3REcmF3VGltZT0wKSxlLnJlcXVlc3RlZEZyYW1lPSEwLGUucmVuZGVyT3B0aW9ucz10fTthYi5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5kZXN0cm95ZWQpe2U9PW51bGwmJmhpKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciByPXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO3IucHVzaCh7Zm46dCxwcmlvcml0eTplfSksci5zb3J0KGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkucHJpb3JpdHktbi5wcmlvcml0eX0pfX07T21lPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1lLmJlZm9yZVJlbmRlckNhbGxiYWNrcyxhPTA7YTxpLmxlbmd0aDthKyspaVthXS5mbihyLG4pfSwiYmVmb3JlUmVuZGVyQ2FsbGJhY2tzIik7YWIuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuY3k7aWYoIXQucmVuZGVyTG9vcFN0YXJ0ZWQpe3QucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIHI9byhmdW5jdGlvbiBuKGkpe2lmKCF0LmRlc3Ryb3llZCl7aWYoIWUuYmF0Y2hpbmcoKSlpZih0LnJlcXVlc3RlZEZyYW1lJiYhdC5za2lwRnJhbWUpe09tZSh0LCEwLGkpO3ZhciBhPVh1KCk7dC5yZW5kZXIodC5yZW5kZXJPcHRpb25zKTt2YXIgcz10Lmxhc3REcmF3VGltZT1YdSgpO3QuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih0LmF2ZXJhZ2VSZWRyYXdUaW1lPXMtYSksdC5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHQucmVkcmF3Q291bnQ9MCksdC5yZWRyYXdDb3VudCsrLHQucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYodC5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyIGw9cy1hO3QucmVkcmF3VG90YWxUaW1lKz1sLHQubGFzdFJlZHJhd1RpbWU9bCx0LmF2ZXJhZ2VSZWRyYXdUaW1lPXQuYXZlcmFnZVJlZHJhd1RpbWUvMitsLzIsdC5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIE9tZSh0LCExLGkpO3Quc2tpcEZyYW1lPSExLG02KG4pfX0sInJlbmRlckZuIik7bTYocil9fTtMZXQ9byhmdW5jdGlvbihlKXt0aGlzLmluaXQoZSl9LCJCYXNlUmVuZGVyZXIiKSxwMWU9TGV0LGIxPXAxZS5wcm90b3R5cGU7YjEuY2xpZW50RnVuY3Rpb25zPVsicmVkcmF3SGludCIsInJlbmRlciIsInJlbmRlclRvIiwibWF0Y2hDYW52YXNTaXplIiwibm9kZVNoYXBlSW1wbCIsImFycm93U2hhcGVJbXBsIl07YjEuaW5pdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2Uub3B0aW9ucz10LGUuY3k9dC5jeTt2YXIgcj1lLmNvbnRhaW5lcj10LmN5LmNvbnRhaW5lcigpLG49ZS5jeS53aW5kb3coKTtpZihuKXt2YXIgaT1uLmRvY3VtZW50LGE9aS5oZWFkLHM9Il9fX19fX19fX19jeXRvc2NhcGVfc3R5bGVzaGVldCIsbD0iX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXIiLHU9aS5nZXRFbGVtZW50QnlJZChzKSE9bnVsbDtpZihyLmNsYXNzTmFtZS5pbmRleE9mKGwpPDAmJihyLmNsYXNzTmFtZT0oci5jbGFzc05hbWV8fCIiKSsiICIrbCksIXUpe3ZhciBoPWkuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtoLmlkPXMsaC50ZXh0Q29udGVudD0iLiIrbCsiIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9IixhLmluc2VydEJlZm9yZShoLGEuY2hpbGRyZW5bMF0pfXZhciBmPW4uZ2V0Q29tcHV0ZWRTdHlsZShyKSxkPWYuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKTtkPT09InN0YXRpYyImJm9uKCJBIEN5dG9zY2FwZSBjb250YWluZXIgaGFzIHN0eWxlIHBvc2l0aW9uOnN0YXRpYyBhbmQgc28gY2FuIG5vdCB1c2UgVUkgZXh0ZW5zaW9ucyBwcm9wZXJseSIpfWUuc2VsZWN0aW9uPVt2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsMF0sZS5iZXppZXJQcm9qUGN0cz1bLjA1LC4yMjUsLjQsLjUsLjYsLjc3NSwuOTVdLGUuaG92ZXJEYXRhPXtkb3duOm51bGwsbGFzdDpudWxsLGRvd25UaW1lOm51bGwsdHJpZ2dlck1vZGU6bnVsbCxkcmFnZ2luZzohMSxpbml0aWFsUGFuOltudWxsLG51bGxdLGNhcHR1cmU6ITF9LGUuZHJhZ0RhdGE9e3Bvc3NpYmxlRHJhZ0VsZW1lbnRzOltdfSxlLnRvdWNoRGF0YT17c3RhcnQ6bnVsbCxjYXB0dXJlOiExLHN0YXJ0UG9zaXRpb246W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxzaW5nbGVUb3VjaFN0YXJ0VGltZTpudWxsLHNpbmdsZVRvdWNoTW92ZWQ6ITAsbm93OltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sZWFybGllcjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdfSxlLnJlZHJhd3M9MCxlLnNob3dGcHM9dC5zaG93RnBzLGUuZGVidWc9dC5kZWJ1ZyxlLmhpZGVFZGdlc09uVmlld3BvcnQ9dC5oaWRlRWRnZXNPblZpZXdwb3J0LGUudGV4dHVyZU9uVmlld3BvcnQ9dC50ZXh0dXJlT25WaWV3cG9ydCxlLndoZWVsU2Vuc2l0aXZpdHk9dC53aGVlbFNlbnNpdGl2aXR5LGUubW90aW9uQmx1ckVuYWJsZWQ9dC5tb3Rpb25CbHVyLGUuZm9yY2VkUGl4ZWxSYXRpbz14dCh0LnBpeGVsUmF0aW8pP3QucGl4ZWxSYXRpbzpudWxsLGUubW90aW9uQmx1cj10Lm1vdGlvbkJsdXIsZS5tb3Rpb25CbHVyT3BhY2l0eT10Lm1vdGlvbkJsdXJPcGFjaXR5LGUubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWUubW90aW9uQmx1ck9wYWNpdHksZS5tb3Rpb25CbHVyUHhSYXRpbz0xLGUubWJQeFJCbHVycnk9MSxlLm1pbk1iTG93UXVhbEZyYW1lcz00LGUuZnVsbFF1YWxpdHlNYj0hMSxlLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGUuZGVza3RvcFRhcFRocmVzaG9sZD10LmRlc2t0b3BUYXBUaHJlc2hvbGQsZS5kZXNrdG9wVGFwVGhyZXNob2xkMj10LmRlc2t0b3BUYXBUaHJlc2hvbGQqdC5kZXNrdG9wVGFwVGhyZXNob2xkLGUudG91Y2hUYXBUaHJlc2hvbGQ9dC50b3VjaFRhcFRocmVzaG9sZCxlLnRvdWNoVGFwVGhyZXNob2xkMj10LnRvdWNoVGFwVGhyZXNob2xkKnQudG91Y2hUYXBUaHJlc2hvbGQsZS50YXBob2xkRHVyYXRpb249NTAwLGUuYmluZGluZ3M9W10sZS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZS5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxlLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGUucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGUucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfTtiMS5ub3RpZnk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHQ9PT0iaW5pdCIpe3IubG9hZCgpO3JldHVybn1pZih0PT09ImRlc3Ryb3kiKXtyLmRlc3Ryb3koKTtyZXR1cm59KHQ9PT0iYWRkInx8dD09PSJyZW1vdmUifHx0PT09Im1vdmUiJiZuLmhhc0NvbXBvdW5kTm9kZXMoKXx8dD09PSJsb2FkInx8dD09PSJ6b3JkZXIifHx0PT09Im1vdW50IikmJnIuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCksdD09PSJ2aWV3cG9ydCImJnIucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHQ9PT0ibG9hZCJ8fHQ9PT0icmVzaXplInx8dD09PSJtb3VudCIpJiYoci5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxyLm1hdGNoQ2FudmFzU2l6ZShyLmNvbnRhaW5lcikpLHIucmVkcmF3SGludCgiZWxlcyIsITApLHIucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19O2IxLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuZGVzdHJveWVkPSEwLHQuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIGU9MDtlPHQuYmluZGluZ3MubGVuZ3RoO2UrKyl7dmFyIHI9dC5iaW5kaW5nc1tlXSxuPXIsaT1uLnRhcmdldDsoaS5vZmZ8fGkucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoaSxuLmFyZ3MpfWlmKHQuYmluZGluZ3M9W10sdC5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sdC5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHQucmVtb3ZlT2JzZXJ2ZXImJnQucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHQuc3R5bGVPYnNlcnZlciYmdC5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0LnJlc2l6ZU9ic2VydmVyJiZ0LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX07YjEuaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfTtbeEIsZjFlLGQxZSx4MSxRdSxhYl0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihiMSx0KX0pO0lQPTFlMy82MCxtMWU9e3NldHVwRGVxdWV1ZWluZzpvKGZ1bmN0aW9uKGUpe3JldHVybiBvKGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPXRoaXMucmVuZGVyZXI7aWYoIW4uZGVxdWV1ZWluZ1NldHVwKXtuLmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgYT1BNihmdW5jdGlvbigpe2kucmVkcmF3SGludCgiZWxlcyIsITApLGkucmVkcmF3SGludCgiZHJhZyIsITApLGkucmVkcmF3KCl9LGUuZGVxUmVkcmF3VGhyZXNob2xkKSxzPW8oZnVuY3Rpb24oaCxmKXt2YXIgZD1YdSgpLHA9aS5hdmVyYWdlUmVkcmF3VGltZSxtPWkubGFzdFJlZHJhd1RpbWUsZz1bXSx5PWkuY3kuZXh0ZW50KCksdj1pLmdldFBpeGVsUmF0aW8oKTtmb3IoaHx8aS5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciB4PVh1KCksYj14LWQsdz14LWY7aWYobTxJUCl7dmFyIF89SVAtKGg/cDowKTtpZih3Pj1lLmRlcUZhc3RDb3N0Kl8pYnJlYWt9ZWxzZSBpZihoKXtpZihiPj1lLmRlcUNvc3QqbXx8Yj49ZS5kZXFBdmdDb3N0KnApYnJlYWt9ZWxzZSBpZih3Pj1lLmRlcU5vRHJhd0Nvc3QqSVApYnJlYWs7dmFyIFQ9ZS5kZXEobix2LHkpO2lmKFQubGVuZ3RoPjApZm9yKHZhciBFPTA7RTxULmxlbmd0aDtFKyspZy5wdXNoKFRbRV0pO2Vsc2UgYnJlYWt9Zy5sZW5ndGg+MCYmKGUub25EZXFkKG4sZyksIWgmJmUuc2hvdWxkUmVkcmF3KG4sZyx2LHkpJiZhKCkpfSwiZGVxdWV1ZSIpLGw9ZS5wcmlvcml0eXx8aUI7aS5iZWZvcmVSZW5kZXIocyxsKG4pKX19LCJzZXR1cERlcXVldWVpbmdJbXBsIil9LCJzZXR1cERlcXVldWVpbmciKX0sRGV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZzY7SlAodGhpcyx0KSx0aGlzLmlkc0J5S2V5PW5ldyBVYyx0aGlzLmtleUZvcklkPW5ldyBVYyx0aGlzLmNhY2hlc0J5THZsPW5ldyBVYyx0aGlzLmx2bHM9W10sdGhpcy5nZXRLZXk9ZSx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5PXJ9cmV0dXJuIG8odCwiRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cCIpLGVCKHQsW3trZXk6ImdldElkc0ZvciIsdmFsdWU6byhmdW5jdGlvbihyKXtyPT1udWxsJiZoaSgiQ2FuIG5vdCBnZXQgaWQgbGlzdCBmb3IgbnVsbCBrZXkiKTt2YXIgbj10aGlzLmlkc0J5S2V5LGk9dGhpcy5pZHNCeUtleS5nZXQocik7cmV0dXJuIGl8fChpPW5ldyBmMSxuLnNldChyLGkpKSxpfSwiZ2V0SWRzRm9yIil9LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7ciE9bnVsbCYmdGhpcy5nZXRJZHNGb3IocikuYWRkKG4pfSwiYWRkSWRGb3JLZXkiKX0se2tleToiZGVsZXRlSWRGb3JLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyIT1udWxsJiZ0aGlzLmdldElkc0ZvcihyKS5kZWxldGUobil9LCJkZWxldGVJZEZvcktleSIpfSx7a2V5OiJnZXROdW1iZXJPZklkc0ZvcktleSIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKHIpLnNpemV9LCJnZXROdW1iZXJPZklkc0ZvcktleSIpfSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pLGE9dGhpcy5nZXRLZXkocik7dGhpcy5kZWxldGVJZEZvcktleShpLG4pLHRoaXMuYWRkSWRGb3JLZXkoYSxuKSx0aGlzLmtleUZvcklkLnNldChuLGEpfSwidXBkYXRlS2V5TWFwcGluZ0ZvciIpfSx7a2V5OiJkZWxldGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pO3RoaXMuZGVsZXRlSWRGb3JLZXkoaSxuKSx0aGlzLmtleUZvcklkLmRlbGV0ZShuKX0sImRlbGV0ZUtleU1hcHBpbmdGb3IiKX0se2tleToia2V5SGFzQ2hhbmdlZEZvciIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKSxhPXRoaXMuZ2V0S2V5KHIpO3JldHVybiBpIT09YX0sImtleUhhc0NoYW5nZWRGb3IiKX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmtleUhhc0NoYW5nZWRGb3Iocil8fHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkocil9LCJpc0ludmFsaWQiKX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpcy5jYWNoZXNCeUx2bCxpPXRoaXMubHZscyxhPW4uZ2V0KHIpO3JldHVybiBhfHwoYT1uZXcgVWMsbi5zZXQocixhKSxpLnB1c2gocikpLGF9LCJnZXRDYWNoZXNBdCIpfSx7a2V5OiJnZXRDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLmdldENhY2hlc0F0KG4pLmdldChyKX0sImdldENhY2hlIil9LHtrZXk6ImdldCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0S2V5KHIpLGE9dGhpcy5nZXRDYWNoZShpLG4pO3JldHVybiBhIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IociksYX0sImdldCIpfSx7a2V5OiJnZXRGb3JDYWNoZWRLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmtleUZvcklkLmdldChyLmlkKCkpLGE9dGhpcy5nZXRDYWNoZShpLG4pO3JldHVybiBhfSwiZ2V0Rm9yQ2FjaGVkS2V5Iil9LHtrZXk6Imhhc0NhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobikuaGFzKHIpfSwiaGFzQ2FjaGUiKX0se2tleToiaGFzIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5nZXRLZXkocik7cmV0dXJuIHRoaXMuaGFzQ2FjaGUoaSxuKX0sImhhcyIpfSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7aS5rZXk9cix0aGlzLmdldENhY2hlc0F0KG4pLnNldChyLGkpfSwic2V0Q2FjaGUiKX0se2tleToic2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXt2YXIgYT10aGlzLmdldEtleShyKTt0aGlzLnNldENhY2hlKGEsbixpKSx0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3Iocil9LCJzZXQiKX0se2tleToiZGVsZXRlQ2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt0aGlzLmdldENhY2hlc0F0KG4pLmRlbGV0ZShyKX0sImRlbGV0ZUNhY2hlIil9LHtrZXk6ImRlbGV0ZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0S2V5KHIpO3RoaXMuZGVsZXRlQ2FjaGUoaSxuKX0sIl9kZWxldGUiKX0se2tleToiaW52YWxpZGF0ZUtleSIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMubHZscy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmRlbGV0ZUNhY2hlKHIsaSl9KX0sImludmFsaWRhdGVLZXkiKX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKTt0aGlzLmRlbGV0ZUtleU1hcHBpbmdGb3Iocik7dmFyIGE9dGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleShyKTtyZXR1cm4gYSYmdGhpcy5pbnZhbGlkYXRlS2V5KGkpLGF8fHRoaXMuZ2V0TnVtYmVyT2ZJZHNGb3JLZXkoaSk9PT0wfSwiaW52YWxpZGF0ZSIpfV0pLHR9KCksUG1lPTI1LGk2PTUwLGQ2PS00LGpQPTMsTmV0PTcuOTksUmV0PTgsTWV0PTEwMjQsSWV0PTEwMjQsT2V0PTEwMjQsUGV0PS4yLEJldD0uOCxGZXQ9MTAsemV0PS4xNSxHZXQ9LjEsJGV0PS45LFZldD0uOSxVZXQ9MTAwLEhldD0xLG4xPXtkZXF1ZXVlOiJkZXF1ZXVlIixkb3duc2NhbGU6ImRvd25zY2FsZSIsaGlnaFF1YWxpdHk6ImhpZ2hRdWFsaXR5In0sV2V0PXdhKHtnZXRLZXk6bnVsbCxkb2VzRWxlSW52YWxpZGF0ZUtleTpnNixkcmF3RWxlbWVudDpudWxsLGdldEJvdW5kaW5nQm94Om51bGwsZ2V0Um90YXRpb25Qb2ludDpudWxsLGdldFJvdGF0aW9uT2Zmc2V0Om51bGwsaXNWaXNpYmxlOnNnZSxhbGxvd0VkZ2VUeHJDYWNoaW5nOiEwLGFsbG93UGFyZW50VHhyQ2FjaGluZzohMH0pLEZ4PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO24ucmVuZGVyZXI9ZSxuLm9uRGVxdWV1ZXM9W107dmFyIGk9V2V0KHIpO2lyKG4saSksbi5sb29rdXA9bmV3IERldChpLmdldEtleSxpLmRvZXNFbGVJbnZhbGlkYXRlS2V5KSxuLnNldHVwRGVxdWV1ZWluZygpfSwiRWxlbWVudFRleHR1cmVDYWNoZSIpLHFpPUZ4LnByb3RvdHlwZTtxaS5yZWFzb25zPW4xO3FpLmdldFRleHR1cmVRdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLmVsZUltZ0NhY2hlcz1lLmVsZUltZ0NhY2hlc3x8e30sZS5lbGVJbWdDYWNoZXNbdF09ZS5lbGVJbWdDYWNoZXNbdF18fFtdfTtxaS5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmVsZUltZ0NhY2hlcy5yZXRpcmVkPWUuZWxlSW1nQ2FjaGVzLnJldGlyZWR8fHt9LG49clt0XT1yW3RdfHxbXTtyZXR1cm4gbn07cWkuZ2V0RWxlbWVudFF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZWxlQ2FjaGVRdWV1ZT10LmVsZUNhY2hlUXVldWV8fG5ldyB0YihmdW5jdGlvbihyLG4pe3JldHVybiBuLnJlcXMtci5yZXFzfSk7cmV0dXJuIGV9O3FpLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZWxlS2V5VG9DYWNoZVF1ZXVlPXQuZWxlS2V5VG9DYWNoZVF1ZXVlfHx7fTtyZXR1cm4gZX07cWkuZ2V0RWxlbWVudD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMscz10aGlzLnJlbmRlcmVyLGw9cy5jeS56b29tKCksdT10aGlzLmxvb2t1cDtpZighZXx8ZS53PT09MHx8ZS5oPT09MHx8aXNOYU4oZS53KXx8aXNOYU4oZS5oKXx8IXQudmlzaWJsZSgpfHx0LnJlbW92ZWQoKXx8IWEuYWxsb3dFZGdlVHhyQ2FjaGluZyYmdC5pc0VkZ2UoKXx8IWEuYWxsb3dQYXJlbnRUeHJDYWNoaW5nJiZ0LmlzUGFyZW50KCkpcmV0dXJuIG51bGw7aWYobj09bnVsbCYmKG49TWF0aC5jZWlsKHNCKGwqcikpKSxuPGQ2KW49ZDY7ZWxzZSBpZihsPj1OZXR8fG4+alApcmV0dXJuIG51bGw7dmFyIGg9TWF0aC5wb3coMixuKSxmPWUuaCpoLGQ9ZS53KmgscD1zLmVsZVRleHRCaWdnZXJUaGFuTWluKHQsaCk7aWYoIXRoaXMuaXNWaXNpYmxlKHQscCkpcmV0dXJuIG51bGw7dmFyIG09dS5nZXQodCxuKTtpZihtJiZtLmludmFsaWRhdGVkJiYobS5pbnZhbGlkYXRlZD0hMSxtLnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09bS53aWR0aCksbSlyZXR1cm4gbTt2YXIgZztpZihmPD1QbWU/Zz1QbWU6Zjw9aTY/Zz1pNjpnPU1hdGguY2VpbChmL2k2KSppNixmPk9ldHx8ZD5JZXQpcmV0dXJuIG51bGw7dmFyIHk9YS5nZXRUZXh0dXJlUXVldWUoZyksdj15W3kubGVuZ3RoLTJdLHg9byhmdW5jdGlvbigpe3JldHVybiBhLnJlY3ljbGVUZXh0dXJlKGcsZCl8fGEuYWRkVGV4dHVyZShnLGQpfSwiYWRkTmV3VHhyIik7dnx8KHY9eVt5Lmxlbmd0aC0xXSksdnx8KHY9eCgpKSx2LndpZHRoLXYudXNlZFdpZHRoPGQmJih2PXgoKSk7Zm9yKHZhciBiPW8oZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uc2NhbGVkTGFiZWxTaG93bj09PXB9LCJzY2FsYWJsZUZyb20iKSx3PWkmJmk9PT1uMS5kZXF1ZXVlLF89aSYmaT09PW4xLmhpZ2hRdWFsaXR5LFQ9aSYmaT09PW4xLmRvd25zY2FsZSxFLEw9bisxO0w8PWpQO0wrKyl7dmFyIEM9dS5nZXQodCxMKTtpZihDKXtFPUM7YnJlYWt9fXZhciBBPUUmJkUubGV2ZWw9PT1uKzE/RTpudWxsLEk9byhmdW5jdGlvbigpe3YuY29udGV4dC5kcmF3SW1hZ2UoQS50ZXh0dXJlLmNhbnZhcyxBLngsMCxBLndpZHRoLEEuaGVpZ2h0LHYudXNlZFdpZHRoLDAsZCxmKX0sImRvd25zY2FsZSIpO2lmKHYuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHYuY29udGV4dC5jbGVhclJlY3Qodi51c2VkV2lkdGgsMCxkLGcpLGIoQSkpSSgpO2Vsc2UgaWYoYihFKSlpZihfKXtmb3IodmFyIEQ9RS5sZXZlbDtEPm47RC0tKUE9YS5nZXRFbGVtZW50KHQsZSxyLEQsbjEuZG93bnNjYWxlKTtJKCl9ZWxzZSByZXR1cm4gYS5xdWV1ZUVsZW1lbnQodCxFLmxldmVsLTEpLEU7ZWxzZXt2YXIgaztpZighdyYmIV8mJiFUKWZvcih2YXIgUj1uLTE7Uj49ZDY7Ui0tKXt2YXIgUz11LmdldCh0LFIpO2lmKFMpe2s9UzticmVha319aWYoYihrKSlyZXR1cm4gYS5xdWV1ZUVsZW1lbnQodCxuKSxrO3YuY29udGV4dC50cmFuc2xhdGUodi51c2VkV2lkdGgsMCksdi5jb250ZXh0LnNjYWxlKGgsaCksdGhpcy5kcmF3RWxlbWVudCh2LmNvbnRleHQsdCxlLHAsITEpLHYuY29udGV4dC5zY2FsZSgxL2gsMS9oKSx2LmNvbnRleHQudHJhbnNsYXRlKC12LnVzZWRXaWR0aCwwKX1yZXR1cm4gbT17eDp2LnVzZWRXaWR0aCx0ZXh0dXJlOnYsbGV2ZWw6bixzY2FsZTpoLHdpZHRoOmQsaGVpZ2h0OmYsc2NhbGVkTGFiZWxTaG93bjpwfSx2LnVzZWRXaWR0aCs9TWF0aC5jZWlsKGQrUmV0KSx2LmVsZUNhY2hlcy5wdXNoKG0pLHUuc2V0KHQsbixtKSxhLmNoZWNrVGV4dHVyZUZ1bGxuZXNzKHYpLG19O3FpLmludmFsaWRhdGVFbGVtZW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmludmFsaWRhdGVFbGVtZW50KHRbZV0pfTtxaS5pbnZhbGlkYXRlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5sb29rdXAsbj1bXSxpPXIuaXNJbnZhbGlkKHQpO2lmKGkpe2Zvcih2YXIgYT1kNjthPD1qUDthKyspe3ZhciBzPXIuZ2V0Rm9yQ2FjaGVkS2V5KHQsYSk7cyYmbi5wdXNoKHMpfXZhciBsPXIuaW52YWxpZGF0ZSh0KTtpZihsKWZvcih2YXIgdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD1uW3VdLGY9aC50ZXh0dXJlO2YuaW52YWxpZGF0ZWRXaWR0aCs9aC53aWR0aCxoLmludmFsaWRhdGVkPSEwLGUuY2hlY2tUZXh0dXJlVXRpbGl0eShmKX1lLnJlbW92ZUZyb21RdWV1ZSh0KX19O3FpLmNoZWNrVGV4dHVyZVV0aWxpdHk9ZnVuY3Rpb24odCl7dC5pbnZhbGlkYXRlZFdpZHRoPj1QZXQqdC53aWR0aCYmdGhpcy5yZXRpcmVUZXh0dXJlKHQpfTtxaS5jaGVja1RleHR1cmVGdWxsbmVzcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZXRUZXh0dXJlUXVldWUodC5oZWlnaHQpO3QudXNlZFdpZHRoL3Qud2lkdGg+QmV0JiZ0LmZ1bGxuZXNzQ2hlY2tzPj1GZXQ/Q2Yocix0KTp0LmZ1bGxuZXNzQ2hlY2tzKyt9O3FpLnJldGlyZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQuaGVpZ2h0LG49ZS5nZXRUZXh0dXJlUXVldWUociksaT10aGlzLmxvb2t1cDtDZihuLHQpLHQucmV0aXJlZD0hMDtmb3IodmFyIGE9dC5lbGVDYWNoZXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO2kuZGVsZXRlQ2FjaGUobC5rZXksbC5sZXZlbCl9YUIoYSk7dmFyIHU9ZS5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlKHIpO3UucHVzaCh0KX07cWkuYWRkVGV4dHVyZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdldFRleHR1cmVRdWV1ZSh0KSxpPXt9O3JldHVybiBuLnB1c2goaSksaS5lbGVDYWNoZXM9W10saS5oZWlnaHQ9dCxpLndpZHRoPU1hdGgubWF4KE1ldCxlKSxpLnVzZWRXaWR0aD0wLGkuaW52YWxpZGF0ZWRXaWR0aD0wLGkuZnVsbG5lc3NDaGVja3M9MCxpLmNhbnZhcz1yLnJlbmRlcmVyLm1ha2VPZmZzY3JlZW5DYW52YXMoaS53aWR0aCxpLmhlaWdodCksaS5jb250ZXh0PWkuY2FudmFzLmdldENvbnRleHQoIjJkIiksaX07cWkucmVjeWNsZVRleHR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPXIuZ2V0VGV4dHVyZVF1ZXVlKHQpLGk9ci5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlKHQpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtpZihzLndpZHRoPj1lKXJldHVybiBzLnJldGlyZWQ9ITEscy51c2VkV2lkdGg9MCxzLmludmFsaWRhdGVkV2lkdGg9MCxzLmZ1bGxuZXNzQ2hlY2tzPTAsYUIocy5lbGVDYWNoZXMpLHMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHMuY29udGV4dC5jbGVhclJlY3QoMCwwLHMud2lkdGgscy5oZWlnaHQpLENmKGkscyksbi5wdXNoKHMpLHN9fTtxaS5xdWV1ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZXRFbGVtZW50UXVldWUoKSxpPXIuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxhPXRoaXMuZ2V0S2V5KHQpLHM9aVthXTtpZihzKXMubGV2ZWw9TWF0aC5tYXgocy5sZXZlbCxlKSxzLmVsZXMubWVyZ2UodCkscy5yZXFzKyssbi51cGRhdGVJdGVtKHMpO2Vsc2V7dmFyIGw9e2VsZXM6dC5zcGF3bigpLm1lcmdlKHQpLGxldmVsOmUscmVxczoxLGtleTphfTtuLnB1c2gobCksaVthXT1sfX07cWkuZGVxdWV1ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWUuZ2V0RWxlbWVudFF1ZXVlKCksbj1lLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksaT1bXSxhPWUubG9va3VwLHM9MDtzPEhldCYmci5zaXplKCk+MDtzKyspe3ZhciBsPXIucG9wKCksdT1sLmtleSxoPWwuZWxlc1swXSxmPWEuaGFzQ2FjaGUoaCxsLmxldmVsKTtpZihuW3VdPW51bGwsZiljb250aW51ZTtpLnB1c2gobCk7dmFyIGQ9ZS5nZXRCb3VuZGluZ0JveChoKTtlLmdldEVsZW1lbnQoaCxkLHQsbC5sZXZlbCxuMS5kZXF1ZXVlKX1yZXR1cm4gaX07cWkucmVtb3ZlRnJvbVF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmdldEVsZW1lbnRRdWV1ZSgpLG49ZS5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLGk9dGhpcy5nZXRLZXkodCksYT1uW2ldO2EhPW51bGwmJihhLmVsZXMubGVuZ3RoPT09MT8oYS5yZXFzPW5CLHIudXBkYXRlSXRlbShhKSxyLnBvcCgpLG5baV09bnVsbCk6YS5lbGVzLnVubWVyZ2UodCkpfTtxaS5vbkRlcXVldWU9ZnVuY3Rpb24odCl7dGhpcy5vbkRlcXVldWVzLnB1c2godCl9O3FpLm9mZkRlcXVldWU9ZnVuY3Rpb24odCl7Q2YodGhpcy5vbkRlcXVldWVzLHQpfTtxaS5zZXR1cERlcXVldWVpbmc9bTFlLnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOlVldCxkZXFDb3N0OnpldCxkZXFBdmdDb3N0OkdldCxkZXFOb0RyYXdDb3N0OiRldCxkZXFGYXN0Q29zdDpWZXQsZGVxOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlLmRlcXVldWUocixuKX0sImRlcSIpLG9uRGVxZDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjxlLm9uRGVxdWV1ZXMubGVuZ3RoO24rKyl7dmFyIGk9ZS5vbkRlcXVldWVzW25dO2kocil9fSwib25EZXFkIiksc2hvdWxkUmVkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSl7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspZm9yKHZhciBzPXJbYV0uZWxlcyxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0uYm91bmRpbmdCb3goKTtpZihvQih1LGkpKXJldHVybiEwfXJldHVybiExfSwic2hvdWxkUmVkcmF3IikscHJpb3JpdHk6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZVR4ckRlcX0sInByaW9yaXR5Iil9KTtZZXQ9MSxHeD0tNCxFNj0yLHFldD0zLjk5LFhldD01MCxqZXQ9NTAsS2V0PS4xNSxRZXQ9LjEsWmV0PS45LEpldD0uOSxldHQ9MSxCbWU9MjUwLHR0dD00ZTMqNGUzLHJ0dD0hMCxnMWU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLG49ci5yZW5kZXJlcj1lLGk9bi5jeTtyLmxheWVyc0J5TGV2ZWw9e30sci5maXJzdEdldD0hMCxyLmxhc3RJbnZhbGlkYXRpb25UaW1lPVh1KCktMipCbWUsci5za2lwcGluZz0hMSxyLmVsZVR4ckRlcXM9aS5jb2xsZWN0aW9uKCksci5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50PUE2KGZ1bmN0aW9uKCl7ci5yZWZpbmVFbGVtZW50VGV4dHVyZXMoci5lbGVUeHJEZXFzKSxyLmVsZVR4ckRlcXMudW5tZXJnZShyLmVsZVR4ckRlcXMpfSxqZXQpLG4uYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKHMsbCl7bC1yLmxhc3RJbnZhbGlkYXRpb25UaW1lPD1CbWU/ci5za2lwcGluZz0hMDpyLnNraXBwaW5nPSExfSxuLmJlZm9yZVJlbmRlclByaW9yaXRpZXMubHlyVHhyU2tpcCk7dmFyIGE9byhmdW5jdGlvbihsLHUpe3JldHVybiB1LnJlcXMtbC5yZXFzfSwicVNvcnQiKTtyLmxheWVyc1F1ZXVlPW5ldyB0YihhKSxyLnNldHVwRGVxdWV1ZWluZygpfSwiTGF5ZXJlZFRleHR1cmVDYWNoZSIpLFRhPWcxZS5wcm90b3R5cGUsRm1lPTAsbnR0PU1hdGgucG93KDIsNTMpLTE7VGEubWFrZUxheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMixlKSxuPU1hdGguY2VpbCh0LncqciksaT1NYXRoLmNlaWwodC5oKnIpLGE9dGhpcy5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKG4saSkscz17aWQ6Rm1lPSsrRm1lJW50dCxiYjp0LGxldmVsOmUsd2lkdGg6bixoZWlnaHQ6aSxjYW52YXM6YSxjb250ZXh0OmEuZ2V0Q29udGV4dCgiMmQiKSxlbGVzOltdLGVsZXNRdWV1ZTpbXSxyZXFzOjB9LGw9cy5jb250ZXh0LHU9LXMuYmIueDEsaD0tcy5iYi55MTtyZXR1cm4gbC5zY2FsZShyLHIpLGwudHJhbnNsYXRlKHUsaCksc307VGEuZ2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5yZW5kZXJlcixhPWkuY3kscz1hLnpvb20oKSxsPW4uZmlyc3RHZXQ7aWYobi5maXJzdEdldD0hMSxyPT1udWxsKXtpZihyPU1hdGguY2VpbChzQihzKmUpKSxyPEd4KXI9R3g7ZWxzZSBpZihzPj1xZXR8fHI+RTYpcmV0dXJuIG51bGx9bi52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhyLHQpO3ZhciB1PW4ubGF5ZXJzQnlMZXZlbCxoPU1hdGgucG93KDIsciksZj11W3JdPXVbcl18fFtdLGQscD1uLmxldmVsSXNDb21wbGV0ZShyLHQpLG0sZz1vKGZ1bmN0aW9uKCl7dmFyIEk9byhmdW5jdGlvbihPKXtpZihuLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nKE8sdCksbi5sZXZlbElzQ29tcGxldGUoTyx0KSlyZXR1cm4gbT11W09dLCEwfSwiY2FuVXNlQXNUbXBMdmwiKSxEPW8oZnVuY3Rpb24oTyl7aWYoIW0pZm9yKHZhciBOPXIrTztHeDw9TiYmTjw9RTYmJiFJKE4pO04rPU8pO30sImNoZWNrTHZscyIpO0QoMSksRCgtMSk7Zm9yKHZhciBrPWYubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBSPWZba107Ui5pbnZhbGlkJiZDZihmLFIpfX0sImNoZWNrVGVtcExldmVscyIpO2lmKCFwKWcoKTtlbHNlIHJldHVybiBmO3ZhciB5PW8oZnVuY3Rpb24oKXtpZighZCl7ZD0kcygpO2Zvcih2YXIgST0wO0k8dC5sZW5ndGg7SSsrKWZnZShkLHRbSV0uYm91bmRpbmdCb3goKSl9cmV0dXJuIGR9LCJnZXRCYiIpLHY9byhmdW5jdGlvbihJKXtJPUl8fHt9O3ZhciBEPUkuYWZ0ZXI7eSgpO3ZhciBrPWQudypoKihkLmgqaCk7aWYoaz50dHQpcmV0dXJuIG51bGw7dmFyIFI9bi5tYWtlTGF5ZXIoZCxyKTtpZihEIT1udWxsKXt2YXIgUz1mLmluZGV4T2YoRCkrMTtmLnNwbGljZShTLDAsUil9ZWxzZShJLmluc2VydD09PXZvaWQgMHx8SS5pbnNlcnQpJiZmLnVuc2hpZnQoUik7cmV0dXJuIFJ9LCJtYWtlTGF5ZXIiKTtpZihuLnNraXBwaW5nJiYhbClyZXR1cm4gbnVsbDtmb3IodmFyIHg9bnVsbCxiPXQubGVuZ3RoL1lldCx3PSFsLF89MDtfPHQubGVuZ3RoO18rKyl7dmFyIFQ9dFtfXSxFPVQuX3ByaXZhdGUucnNjcmF0Y2gsTD1FLmltZ0xheWVyQ2FjaGVzPUUuaW1nTGF5ZXJDYWNoZXN8fHt9LEM9TFtyXTtpZihDKXt4PUM7Y29udGludWV9aWYoKCF4fHx4LmVsZXMubGVuZ3RoPj1ifHwhZGdlKHguYmIsVC5ib3VuZGluZ0JveCgpKSkmJih4PXYoe2luc2VydDohMCxhZnRlcjp4fSksIXgpKXJldHVybiBudWxsO218fHc/bi5xdWV1ZUxheWVyKHgsVCk6bi5kcmF3RWxlSW5MYXllcih4LFQscixlKSx4LmVsZXMucHVzaChUKSxMW3JdPXh9cmV0dXJuIG18fCh3P251bGw6Zil9O1RhLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbD1mdW5jdGlvbih0LGUpe3JldHVybiB0fTtUYS5kcmF3RWxlSW5MYXllcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9dGhpcy5yZW5kZXJlcixzPXQuY29udGV4dCxsPWUuYm91bmRpbmdCb3goKTtsLnc9PT0wfHxsLmg9PT0wfHwhZS52aXNpYmxlKCl8fChyPWkuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKHIsbiksYS5zZXRJbWdTbW9vdGhpbmcocywhMSksYS5kcmF3Q2FjaGVkRWxlbWVudChzLGUsbnVsbCxudWxsLHIscnR0KSxhLnNldEltZ1Ntb290aGluZyhzLCEwKSl9O1RhLmxldmVsSXNDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmxheWVyc0J5TGV2ZWxbdF07aWYoIW58fG4ubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIGk9MCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV07aWYocy5yZXFzPjB8fHMuaW52YWxpZClyZXR1cm4hMTtpKz1zLmVsZXMubGVuZ3RofXJldHVybiBpPT09ZS5sZW5ndGh9O1RhLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnNCeUxldmVsW3RdO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2Zvcih2YXIgaT1yW25dLGE9LTEscz0wO3M8ZS5sZW5ndGg7cysrKWlmKGkuZWxlc1swXT09PWVbc10pe2E9czticmVha31pZihhPDApe3RoaXMuaW52YWxpZGF0ZUxheWVyKGkpO2NvbnRpbnVlfWZvcih2YXIgbD1hLHM9MDtzPGkuZWxlcy5sZW5ndGg7cysrKWlmKGkuZWxlc1tzXSE9PWVbbCtzXSl7dGhpcy5pbnZhbGlkYXRlTGF5ZXIoaSk7YnJlYWt9fX07VGEudXBkYXRlRWxlbWVudHNJbkxheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLG49SngodFswXSksaT0wO2k8dC5sZW5ndGg7aSsrKWZvcih2YXIgYT1uP251bGw6dFtpXSxzPW4/dFtpXTp0W2ldLmVsZSxsPXMuX3ByaXZhdGUucnNjcmF0Y2gsdT1sLmltZ0xheWVyQ2FjaGVzPWwuaW1nTGF5ZXJDYWNoZXN8fHt9LGg9R3g7aDw9RTY7aCsrKXt2YXIgZj11W2hdO2YmJihhJiZyLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChmLmxldmVsKSE9PWEubGV2ZWx8fGUoZixzLGEpKX19O1RhLmhhdmVMYXllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPSExLHI9R3g7cjw9RTY7cisrKXt2YXIgbj10LmxheWVyc0J5TGV2ZWxbcl07aWYobiYmbi5sZW5ndGg+MCl7ZT0hMDticmVha319cmV0dXJuIGV9O1RhLmludmFsaWRhdGVFbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QubGVuZ3RoIT09MCYmKGUubGFzdEludmFsaWRhdGlvblRpbWU9WHUoKSwhKHQubGVuZ3RoPT09MHx8IWUuaGF2ZUxheWVycygpKSYmZS51cGRhdGVFbGVtZW50c0luTGF5ZXJzKHQsbyhmdW5jdGlvbihuLGksYSl7ZS5pbnZhbGlkYXRlTGF5ZXIobil9LCJpbnZhbEFzc29jTGF5ZXJzIikpKX07VGEuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9WHUoKSwhdC5pbnZhbGlkKXt2YXIgZT10LmxldmVsLHI9dC5lbGVzLG49dGhpcy5sYXllcnNCeUxldmVsW2VdO0NmKG4sdCksdC5lbGVzUXVldWU9W10sdC5pbnZhbGlkPSEwLHQucmVwbGFjZW1lbnQmJih0LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO2EmJihhW2VdPW51bGwpfX19O1RhLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UudXBkYXRlRWxlbWVudHNJbkxheWVycyh0LG8oZnVuY3Rpb24obixpLGEpe3ZhciBzPW4ucmVwbGFjZW1lbnQ7aWYoc3x8KHM9bi5yZXBsYWNlbWVudD1lLm1ha2VMYXllcihuLmJiLG4ubGV2ZWwpLHMucmVwbGFjZXM9bixzLmVsZXM9bi5lbGVzKSwhcy5yZXFzKWZvcih2YXIgbD0wO2w8cy5lbGVzLmxlbmd0aDtsKyspZS5xdWV1ZUxheWVyKHMscy5lbGVzW2xdKX0sInJlZmluZUVhY2hFbGUiKSl9O1RhLmVucXVldWVFbGVtZW50UmVmaW5lbWVudD1mdW5jdGlvbih0KXt0aGlzLmVsZVR4ckRlcXMubWVyZ2UodCksdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCl9O1RhLnF1ZXVlTGF5ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5sYXllcnNRdWV1ZSxpPXQuZWxlc1F1ZXVlLGE9aS5oYXNJZD1pLmhhc0lkfHx7fTtpZighdC5yZXBsYWNlbWVudCl7aWYoZSl7aWYoYVtlLmlkKCldKXJldHVybjtpLnB1c2goZSksYVtlLmlkKCldPSEwfXQucmVxcz8odC5yZXFzKyssbi51cGRhdGVJdGVtKHQpKToodC5yZXFzPTEsbi5wdXNoKHQpKX19O1RhLmRlcXVldWU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLmxheWVyc1F1ZXVlLG49W10saT0wO2k8ZXR0JiZyLnNpemUoKSE9PTA7KXt2YXIgYT1yLnBlZWsoKTtpZihhLnJlcGxhY2VtZW50KXtyLnBvcCgpO2NvbnRpbnVlfWlmKGEucmVwbGFjZXMmJmEhPT1hLnJlcGxhY2VzLnJlcGxhY2VtZW50KXtyLnBvcCgpO2NvbnRpbnVlfWlmKGEuaW52YWxpZCl7ci5wb3AoKTtjb250aW51ZX12YXIgcz1hLmVsZXNRdWV1ZS5zaGlmdCgpO3MmJihlLmRyYXdFbGVJbkxheWVyKGEscyxhLmxldmVsLHQpLGkrKyksbi5sZW5ndGg9PT0wJiZuLnB1c2goITApLGEuZWxlc1F1ZXVlLmxlbmd0aD09PTAmJihyLnBvcCgpLGEucmVxcz0wLGEucmVwbGFjZXMmJmUuYXBwbHlMYXllclJlcGxhY2VtZW50KGEpLGUucmVxdWVzdFJlZHJhdygpKX1yZXR1cm4gbn07VGEuYXBwbHlMYXllclJlcGxhY2VtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmxheWVyc0J5TGV2ZWxbdC5sZXZlbF0sbj10LnJlcGxhY2VzLGk9ci5pbmRleE9mKG4pO2lmKCEoaTwwfHxuLmludmFsaWQpKXtyW2ldPXQ7Zm9yKHZhciBhPTA7YTx0LmVsZXMubGVuZ3RoO2ErKyl7dmFyIHM9dC5lbGVzW2FdLl9wcml2YXRlLGw9cy5pbWdMYXllckNhY2hlcz1zLmltZ0xheWVyQ2FjaGVzfHx7fTtsJiYobFt0LmxldmVsXT10KX1lLnJlcXVlc3RSZWRyYXcoKX19O1RhLnJlcXVlc3RSZWRyYXc9QTYoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlbmRlcmVyO3QucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3KCl9LDEwMCk7VGEuc2V0dXBEZXF1ZXVlaW5nPW0xZS5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDpYZXQsZGVxQ29zdDpLZXQsZGVxQXZnQ29zdDpRZXQsZGVxTm9EcmF3Q29zdDpaZXQsZGVxRmFzdENvc3Q6SmV0LGRlcTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZGVxdWV1ZShyKX0sImRlcSIpLG9uRGVxZDppQixzaG91bGRSZWRyYXc6c2dlLHByaW9yaXR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9LCJwcmlvcml0eSIpfSk7eTFlPXt9O28oaXR0LCJwb2x5Z29uIik7byhhdHQsInRyaWFuZ2xlQmFja2N1cnZlIik7byhHbWUsInRyaWFuZ2xlVGVlIik7byhzdHQsImNpcmNsZVRyaWFuZ2xlIik7byhvdHQsImNpcmNsZSIpO3kxZS5hcnJvd1NoYXBlSW1wbD1mdW5jdGlvbih0KXtyZXR1cm4oem1lfHwoem1lPXtwb2x5Z29uOml0dCwidHJpYW5nbGUtYmFja2N1cnZlIjphdHQsInRyaWFuZ2xlLXRlZSI6R21lLCJjaXJjbGUtdHJpYW5nbGUiOnN0dCwidHJpYW5nbGUtY3Jvc3MiOkdtZSxjaXJjbGU6b3R0fSkpW3RdfTtZYz17fTtZYy5kcmF3RWxlbWVudD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9dGhpcztlLmlzTm9kZSgpP3MuZHJhd05vZGUodCxlLHIsbixpLGEpOnMuZHJhd0VkZ2UodCxlLHIsbixpLGEpfTtZYy5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2UuaXNOb2RlKCk/ci5kcmF3Tm9kZU92ZXJsYXkodCxlKTpyLmRyYXdFZGdlT3ZlcmxheSh0LGUpfTtZYy5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztlLmlzTm9kZSgpP3IuZHJhd05vZGVVbmRlcmxheSh0LGUpOnIuZHJhd0VkZ2VVbmRlcmxheSh0LGUpfTtZYy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXt2YXIgdT10aGlzLGg9ci5nZXRCb3VuZGluZ0JveChlKTtpZighKGgudz09PTB8fGguaD09PTApKXt2YXIgZj1yLmdldEVsZW1lbnQoZSxoLG4saSxhKTtpZihmIT1udWxsKXt2YXIgZD1sKHUsZSk7aWYoZD09PTApcmV0dXJuO3ZhciBwPXModSxlKSxtPWgueDEsZz1oLnkxLHk9aC53LHY9aC5oLHgsYix3LF8sVDtpZihwIT09MCl7dmFyIEU9ci5nZXRSb3RhdGlvblBvaW50KGUpO3c9RS54LF89RS55LHQudHJhbnNsYXRlKHcsXyksdC5yb3RhdGUocCksVD11LmdldEltZ1Ntb290aGluZyh0KSxUfHx1LnNldEltZ1Ntb290aGluZyh0LCEwKTt2YXIgTD1yLmdldFJvdGF0aW9uT2Zmc2V0KGUpO3g9TC54LGI9TC55fWVsc2UgeD1tLGI9Zzt2YXIgQztkIT09MSYmKEM9dC5nbG9iYWxBbHBoYSx0Lmdsb2JhbEFscGhhPUMqZCksdC5kcmF3SW1hZ2UoZi50ZXh0dXJlLmNhbnZhcyxmLngsMCxmLndpZHRoLGYuaGVpZ2h0LHgsYix5LHYpLGQhPT0xJiYodC5nbG9iYWxBbHBoYT1DKSxwIT09MCYmKHQucm90YXRlKC1wKSx0LnRyYW5zbGF0ZSgtdywtXyksVHx8dS5zZXRJbWdTbW9vdGhpbmcodCwhMSkpfWVsc2Ugci5kcmF3RWxlbWVudCh0LGUpfX07bHR0PW8oZnVuY3Rpb24oKXtyZXR1cm4gMH0sImdldFplcm9Sb3RhdGlvbiIpLGN0dD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsbnVsbCl9LCJnZXRMYWJlbFJvdGF0aW9uIiksdXR0PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5nZXRUZXh0QW5nbGUociwic291cmNlIil9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uIiksaHR0PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5nZXRUZXh0QW5nbGUociwidGFyZ2V0Iil9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uIiksZnR0PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gci5lZmZlY3RpdmVPcGFjaXR5KCl9LCJnZXRPcGFjaXR5IiksT1A9byhmdW5jdGlvbihlLHIpe3JldHVybiByLnBzdHlsZSgidGV4dC1vcGFjaXR5IikucGZWYWx1ZSpyLmVmZmVjdGl2ZU9wYWNpdHkoKX0sImdldFRleHRPcGFjaXR5Iik7WWMuZHJhd0NhY2hlZEVsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPXRoaXMsbD1zLmRhdGEsdT1sLmVsZVR4ckNhY2hlLGg9bC5sYmxUeHJDYWNoZSxmPWwuc2xiVHhyQ2FjaGUsZD1sLnRsYlR4ckNhY2hlLHA9ZS5ib3VuZGluZ0JveCgpLG09YT09PSEwP3UucmVhc29ucy5oaWdoUXVhbGl0eTpudWxsO2lmKCEocC53PT09MHx8cC5oPT09MHx8IWUudmlzaWJsZSgpKSYmKCFufHxvQihwLG4pKSl7dmFyIGc9ZS5pc0VkZ2UoKSx5PWUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7cy5kcmF3RWxlbWVudFVuZGVybGF5KHQsZSkscy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24odCxlLHUscixpLG0sbHR0LGZ0dCksKCFnfHwheSkmJnMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSxoLHIsaSxtLGN0dCxPUCksZyYmIXkmJihzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsZixyLGksbSx1dHQsT1ApLHMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSxkLHIsaSxtLGh0dCxPUCkpLHMuZHJhd0VsZW1lbnRPdmVybGF5KHQsZSl9fTtZYy5kcmF3RWxlbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07ci5kcmF3RWxlbWVudCh0LGkpfX07WWMuZHJhd0NhY2hlZEVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXTtpLmRyYXdDYWNoZWRFbGVtZW50KHQscyxyLG4pfX07WWMuZHJhd0NhY2hlZE5vZGVzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXTtzLmlzTm9kZSgpJiZpLmRyYXdDYWNoZWRFbGVtZW50KHQscyxyLG4pfX07WWMuZHJhd0xheWVyZWRFbGVtZW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5kYXRhLmx5clR4ckNhY2hlLmdldExheWVycyhlLHIpO2lmKGEpZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1sLmJiO3Uudz09PTB8fHUuaD09PTB8fHQuZHJhd0ltYWdlKGwuY2FudmFzLHUueDEsdS55MSx1LncsdS5oKX1lbHNlIGkuZHJhd0NhY2hlZEVsZW1lbnRzKHQsZSxyLG4pfTtadT17fTtadS5kcmF3RWRnZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcyxsPWUuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShhJiYhZS52aXNpYmxlKCkpJiYhKGwuYmFkTGluZXx8bC5hbGxwdHM9PW51bGx8fGlzTmFOKGwuYWxscHRzWzBdKSkpe3ZhciB1O3ImJih1PXIsdC50cmFuc2xhdGUoLXUueDEsLXUueTEpKTt2YXIgaD1hP2UucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxmPWE/ZS5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsZD1lLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxwPWUucHN0eWxlKCJsaW5lLXN0eWxlIikudmFsdWUsbT1lLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGc9ZS5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUseT1lLnBzdHlsZSgibGluZS1vdXRsaW5lLXdpZHRoIikudmFsdWUsdj1lLnBzdHlsZSgibGluZS1vdXRsaW5lLWNvbG9yIikudmFsdWUseD1oKmYsYj1oKmYsdz1vKGZ1bmN0aW9uKCl7dmFyIE89YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOng7ZD09PSJzdHJhaWdodC10cmlhbmdsZSI/KHMuZWxlU3Ryb2tlU3R5bGUodCxlLE8pLHMuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZSx0LGwuYWxscHRzKSk6KHQubGluZVdpZHRoPW0sdC5saW5lQ2FwPWcscy5lbGVTdHJva2VTdHlsZSh0LGUsTykscy5kcmF3RWRnZVBhdGgoZSx0LGwuYWxscHRzLHApLHQubGluZUNhcD0iYnV0dCIpfSwiZHJhd0xpbmUiKSxfPW8oZnVuY3Rpb24oKXt2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06eDtpZih0LmxpbmVXaWR0aD1tK3ksdC5saW5lQ2FwPWcseT4wKXMuY29sb3JTdHJva2VTdHlsZSh0LHZbMF0sdlsxXSx2WzJdLE8pO2Vsc2V7dC5saW5lQ2FwPSJidXR0IjtyZXR1cm59ZD09PSJzdHJhaWdodC10cmlhbmdsZSI/cy5kcmF3RWRnZVRyaWFuZ2xlUGF0aChlLHQsbC5hbGxwdHMpOihzLmRyYXdFZGdlUGF0aChlLHQsbC5hbGxwdHMscCksdC5saW5lQ2FwPSJidXR0Iil9LCJkcmF3TGluZU91dGxpbmUiKSxUPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdFZGdlT3ZlcmxheSh0LGUpfSwiZHJhd092ZXJsYXkiKSxFPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdFZGdlVW5kZXJsYXkodCxlKX0sImRyYXdVbmRlcmxheSIpLEw9byhmdW5jdGlvbigpe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpiO3MuZHJhd0Fycm93aGVhZHModCxlLE8pfSwiZHJhd0Fycm93cyIpLEM9byhmdW5jdGlvbigpe3MuZHJhd0VsZW1lbnRUZXh0KHQsZSxudWxsLG4pfSwiZHJhd1RleHQiKTt0LmxpbmVKb2luPSJyb3VuZCI7dmFyIEE9ZS5wc3R5bGUoImdob3N0IikudmFsdWU9PT0ieWVzIjtpZihBKXt2YXIgST1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLEQ9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZSxrPWUucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsUj14Kms7dC50cmFuc2xhdGUoSSxEKSx3KFIpLEwoUiksdC50cmFuc2xhdGUoLUksLUQpfWVsc2UgXygpO0UoKSx3KCksTCgpLFQoKSxDKCksciYmdC50cmFuc2xhdGUodS54MSx1LnkxKX19O3YxZT1vKGZ1bmN0aW9uKGUpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKG4udmlzaWJsZSgpKXt2YXIgaT1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLW9wYWNpdHkiKSkudmFsdWU7aWYoaSE9PTApe3ZhciBhPXRoaXMscz1hLnVzZVBhdGhzKCksbD1uLl9wcml2YXRlLnJzY3JhdGNoLHU9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1wYWRkaW5nIikpLnBmVmFsdWUsaD0yKnUsZj1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLWNvbG9yIikpLnZhbHVlO3IubGluZVdpZHRoPWgsbC5lZGdlVHlwZT09PSJzZWxmIiYmIXM/ci5saW5lQ2FwPSJidXR0IjpyLmxpbmVDYXA9InJvdW5kIixhLmNvbG9yU3Ryb2tlU3R5bGUocixmWzBdLGZbMV0sZlsyXSxpKSxhLmRyYXdFZGdlUGF0aChuLHIsbC5hbGxwdHMsInNvbGlkIil9fX19LCJkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSIpO1p1LmRyYXdFZGdlT3ZlcmxheT12MWUoIm92ZXJsYXkiKTtadS5kcmF3RWRnZVVuZGVybGF5PXYxZSgidW5kZXJsYXkiKTtadS5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fcHJpdmF0ZS5yc2NyYXRjaCxhPWUscyxsPSExLHU9dGhpcy51c2VQYXRocygpLGg9dC5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxmPXQucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZih1KXt2YXIgZD1yLmpvaW4oIiQiKSxwPWkucGF0aENhY2hlS2V5JiZpLnBhdGhDYWNoZUtleT09PWQ7cD8ocz1lPWkucGF0aENhY2hlLGw9ITApOihzPWU9bmV3IFBhdGgyRCxpLnBhdGhDYWNoZUtleT1kLGkucGF0aENhY2hlPXMpfWlmKGEuc2V0TGluZURhc2gpc3dpdGNoKG4pe2Nhc2UiZG90dGVkIjphLnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6YS5zZXRMaW5lRGFzaChoKSxhLmxpbmVEYXNoT2Zmc2V0PWY7YnJlYWs7Y2FzZSJzb2xpZCI6YS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoIWwmJiFpLmJhZExpbmUpc3dpdGNoKGUuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHJbMF0sclsxXSksaS5lZGdlVHlwZSl7Y2FzZSJiZXppZXIiOmNhc2Uic2VsZiI6Y2FzZSJjb21wb3VuZCI6Y2FzZSJtdWx0aWJlemllciI6Zm9yKHZhciBtPTI7bSszPHIubGVuZ3RoO20rPTQpZS5xdWFkcmF0aWNDdXJ2ZVRvKHJbbV0sclttKzFdLHJbbSsyXSxyW20rM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgZz0yO2crMTxyLmxlbmd0aDtnKz0yKWUubGluZVRvKHJbZ10scltnKzFdKTticmVhaztjYXNlInNlZ21lbnRzIjppZihpLmlzUm91bmQpe3ZhciB5PVltZShpLnJvdW5kQ29ybmVycyksdjt0cnl7Zm9yKHkucygpOyEodj15Lm4oKSkuZG9uZTspe3ZhciB4PXYudmFsdWU7bzFlKGUseCl9fWNhdGNoKHcpe3kuZSh3KX1maW5hbGx5e3kuZigpfWUubGluZVRvKHJbci5sZW5ndGgtMl0scltyLmxlbmd0aC0xXSl9ZWxzZSBmb3IodmFyIGI9MjtiKzE8ci5sZW5ndGg7Yis9MillLmxpbmVUbyhyW2JdLHJbYisxXSk7YnJlYWt9ZT1hLHU/ZS5zdHJva2Uocyk6ZS5zdHJva2UoKSxlLnNldExpbmVEYXNoJiZlLnNldExpbmVEYXNoKFtdKX07WnUuZHJhd0VkZ2VUcmlhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIpe2UuZmlsbFN0eWxlPWUuc3Ryb2tlU3R5bGU7Zm9yKHZhciBuPXQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaT0wO2krMTxyLmxlbmd0aDtpKz0yKXt2YXIgYT1bcltpKzJdLXJbaV0scltpKzNdLXJbaSsxXV0scz1NYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSksbD1bYVsxXS9zLC1hWzBdL3NdLHU9W2xbMF0qbi8yLGxbMV0qbi8yXTtlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHJbaV0tdVswXSxyW2krMV0tdVsxXSksZS5saW5lVG8ocltpXSt1WzBdLHJbaSsxXSt1WzFdKSxlLmxpbmVUbyhyW2krMl0scltpKzNdKSxlLmNsb3NlUGF0aCgpLGUuZmlsbCgpfX07WnUuZHJhd0Fycm93aGVhZHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX3ByaXZhdGUucnNjcmF0Y2gsaT1uLmVkZ2VUeXBlPT09ImhheXN0YWNrIjtpfHx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJzb3VyY2UiLG4uYXJyb3dTdGFydFgsbi5hcnJvd1N0YXJ0WSxuLnNyY0Fycm93QW5nbGUsciksdGhpcy5kcmF3QXJyb3doZWFkKHQsZSwibWlkLXRhcmdldCIsbi5taWRYLG4ubWlkWSxuLm1pZHRndEFycm93QW5nbGUsciksdGhpcy5kcmF3QXJyb3doZWFkKHQsZSwibWlkLXNvdXJjZSIsbi5taWRYLG4ubWlkWSxuLm1pZHNyY0Fycm93QW5nbGUsciksaXx8dGhpcy5kcmF3QXJyb3doZWFkKHQsZSwidGFyZ2V0IixuLmFycm93RW5kWCxuLmFycm93RW5kWSxuLnRndEFycm93QW5nbGUscil9O1p1LmRyYXdBcnJvd2hlYWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEscyl7aWYoIShpc05hTihuKXx8bj09bnVsbHx8aXNOYU4oaSl8fGk9PW51bGx8fGlzTmFOKGEpfHxhPT1udWxsKSl7dmFyIGw9dGhpcyx1PWUucHN0eWxlKHIrIi1hcnJvdy1zaGFwZSIpLnZhbHVlO2lmKHUhPT0ibm9uZSIpe3ZhciBoPWUucHN0eWxlKHIrIi1hcnJvdy1maWxsIikudmFsdWU9PT0iaG9sbG93Ij8iYm90aCI6ImZpbGxlZCIsZj1lLnBzdHlsZShyKyItYXJyb3ctZmlsbCIpLnZhbHVlLGQ9ZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxwPWUucHN0eWxlKHIrIi1hcnJvdy13aWR0aCIpLG09cC52YWx1ZT09PSJtYXRjaC1saW5lIj9kOnAucGZWYWx1ZTtwLnVuaXRzPT09IiUiJiYobSo9ZCk7dmFyIGc9ZS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtzPT09dm9pZCAwJiYocz1nKTt2YXIgeT10Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjsocyE9PTF8fGY9PT0iaG9sbG93IikmJih0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3V0IixsLmNvbG9yRmlsbFN0eWxlKHQsMjU1LDI1NSwyNTUsMSksbC5jb2xvclN0cm9rZVN0eWxlKHQsMjU1LDI1NSwyNTUsMSksbC5kcmF3QXJyb3dTaGFwZShlLHQsaCxkLHUsbSxuLGksYSksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249eSk7dmFyIHY9ZS5wc3R5bGUocisiLWFycm93LWNvbG9yIikudmFsdWU7bC5jb2xvckZpbGxTdHlsZSh0LHZbMF0sdlsxXSx2WzJdLHMpLGwuY29sb3JTdHJva2VTdHlsZSh0LHZbMF0sdlsxXSx2WzJdLHMpLGwuZHJhd0Fycm93U2hhcGUoZSx0LGYsZCx1LG0sbixpLGEpfX19O1p1LmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1KXt2YXIgaD10aGlzLGY9dGhpcy51c2VQYXRocygpJiZpIT09InRyaWFuZ2xlLWNyb3NzIixkPSExLHAsbT1lLGc9e3g6cyx5Omx9LHk9dC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsdj10aGlzLmdldEFycm93V2lkdGgobix5KSx4PWguYXJyb3dTaGFwZXNbaV07aWYoZil7dmFyIGI9aC5hcnJvd1BhdGhDYWNoZT1oLmFycm93UGF0aENhY2hlfHxbXSx3PXowKGkpLF89Ylt3XTtfIT1udWxsPyhwPWU9XyxkPSEwKToocD1lPW5ldyBQYXRoMkQsYlt3XT1wKX1kfHwoZS5iZWdpblBhdGgmJmUuYmVnaW5QYXRoKCksZj94LmRyYXcoZSwxLDAse3g6MCx5OjB9LDEpOnguZHJhdyhlLHYsdSxnLG4pLGUuY2xvc2VQYXRoJiZlLmNsb3NlUGF0aCgpKSxlPW0sZiYmKGUudHJhbnNsYXRlKHMsbCksZS5yb3RhdGUodSksZS5zY2FsZSh2LHYpKSwocj09PSJmaWxsZWQifHxyPT09ImJvdGgiKSYmKGY/ZS5maWxsKHApOmUuZmlsbCgpKSwocj09PSJob2xsb3cifHxyPT09ImJvdGgiKSYmKGUubGluZVdpZHRoPWEvKGY/djoxKSxlLmxpbmVKb2luPSJtaXRlciIsZj9lLnN0cm9rZShwKTplLnN0cm9rZSgpKSxmJiYoZS5zY2FsZSgxL3YsMS92KSxlLnJvdGF0ZSgtdSksZS50cmFuc2xhdGUoLXMsLWwpKX07VEI9e307VEIuc2FmZURyYXdJbWFnZT1mdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSxoKXtpZighKGk8PTB8fGE8PTB8fHU8PTB8fGg8PTApKXRyeXt0LmRyYXdJbWFnZShlLHIsbixpLGEscyxsLHUsaCl9Y2F0Y2goZil7b24oZil9fTtUQi5kcmF3SW5zY3JpYmVkSW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLHM9ci5wb3NpdGlvbigpLGw9cy54LHU9cy55LGg9ci5jeSgpLnN0eWxlKCksZj1oLmdldEluZGV4ZWRTdHlsZS5iaW5kKGgpLGQ9ZihyLCJiYWNrZ3JvdW5kLWZpdCIsInZhbHVlIixuKSxwPWYociwiYmFja2dyb3VuZC1yZXBlYXQiLCJ2YWx1ZSIsbiksbT1yLndpZHRoKCksZz1yLmhlaWdodCgpLHk9ci5wYWRkaW5nKCkqMix2PW0rKGYociwiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byIsInZhbHVlIixuKT09PSJpbm5lciI/MDp5KSx4PWcrKGYociwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsbik9PT0iaW5uZXIiPzA6eSksYj1yLl9wcml2YXRlLnJzY3JhdGNoLHc9ZihyLCJiYWNrZ3JvdW5kLWNsaXAiLCJ2YWx1ZSIsbiksXz13PT09Im5vZGUiLFQ9ZihyLCJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLCJ2YWx1ZSIsbikqaSxFPWYociwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLCJ2YWx1ZSIsbiksTD1yLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlO0whPT0iYXV0byImJihMPXIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSk7dmFyIEM9ZS53aWR0aHx8ZS5jYWNoZWRXLEE9ZS5oZWlnaHR8fGUuY2FjaGVkSDsoQz09bnVsbHx8QT09bnVsbCkmJihkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLEM9ZS5jYWNoZWRXPWUud2lkdGh8fGUub2Zmc2V0V2lkdGgsQT1lLmNhY2hlZEg9ZS5oZWlnaHR8fGUub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSkpO3ZhciBJPUMsRD1BO2lmKGYociwiYmFja2dyb3VuZC13aWR0aCIsInZhbHVlIixuKSE9PSJhdXRvIiYmKGYociwiYmFja2dyb3VuZC13aWR0aCIsInVuaXRzIixuKT09PSIlIj9JPWYociwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLG4pKnY6ST1mKHIsImJhY2tncm91bmQtd2lkdGgiLCJwZlZhbHVlIixuKSksZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInZhbHVlIixuKSE9PSJhdXRvIiYmKGYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJ1bml0cyIsbik9PT0iJSI/RD1mKHIsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsbikqeDpEPWYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJwZlZhbHVlIixuKSksIShJPT09MHx8RD09PTApKXtpZihkPT09ImNvbnRhaW4iKXt2YXIgaz1NYXRoLm1pbih2L0kseC9EKTtJKj1rLEQqPWt9ZWxzZSBpZihkPT09ImNvdmVyIil7dmFyIGs9TWF0aC5tYXgodi9JLHgvRCk7SSo9ayxEKj1rfXZhciBSPWwtdi8yLFM9ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLCJ1bml0cyIsbiksTz1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teCIsInBmVmFsdWUiLG4pO1M9PT0iJSI/Uis9KHYtSSkqTzpSKz1PO3ZhciBOPWYociwiYmFja2dyb3VuZC1vZmZzZXQteCIsInVuaXRzIixuKSxQPWYociwiYmFja2dyb3VuZC1vZmZzZXQteCIsInBmVmFsdWUiLG4pO049PT0iJSI/Uis9KHYtSSkqUDpSKz1QO3ZhciBGPXUteC8yLEI9ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsbiksJD1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teSIsInBmVmFsdWUiLG4pO0I9PT0iJSI/Ris9KHgtRCkqJDpGKz0kO3ZhciB6PWYociwiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixuKSxXPWYociwiYmFja2dyb3VuZC1vZmZzZXQteSIsInBmVmFsdWUiLG4pO3o9PT0iJSI/Ris9KHgtRCkqVzpGKz1XLGIucGF0aENhY2hlJiYoUi09bCxGLT11LGw9MCx1PTApO3ZhciBqPXQuZ2xvYmFsQWxwaGE7dC5nbG9iYWxBbHBoYT1UO3ZhciBLPWEuZ2V0SW1nU21vb3RoaW5nKHQpLGllPSExO2lmKEU9PT0ibm8iJiZLPyhhLnNldEltZ1Ntb290aGluZyh0LCExKSxpZT0hMCk6RT09PSJ5ZXMiJiYhSyYmKGEuc2V0SW1nU21vb3RoaW5nKHQsITApLGllPSEwKSxwPT09Im5vLXJlcGVhdCIpXyYmKHQuc2F2ZSgpLGIucGF0aENhY2hlP3QuY2xpcChiLnBhdGhDYWNoZSk6KGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShyKV0uZHJhdyh0LGwsdSx2LHgsTCxiKSx0LmNsaXAoKSkpLGEuc2FmZURyYXdJbWFnZSh0LGUsMCwwLEMsQSxSLEYsSSxEKSxfJiZ0LnJlc3RvcmUoKTtlbHNle3ZhciBRPXQuY3JlYXRlUGF0dGVybihlLHApO3QuZmlsbFN0eWxlPVEsYS5ub2RlU2hhcGVzW2EuZ2V0Tm9kZVNoYXBlKHIpXS5kcmF3KHQsbCx1LHYseCxMLGIpLHQudHJhbnNsYXRlKFIsRiksdC5maWxsKCksdC50cmFuc2xhdGUoLVIsLUYpfXQuZ2xvYmFsQWxwaGE9aixpZSYmYS5zZXRJbWdTbW9vdGhpbmcodCxLKX19O1kwPXt9O1kwLmVsZVRleHRCaWdnZXJUaGFuTWluPWZ1bmN0aW9uKHQsZSl7aWYoIWUpe3ZhciByPXQuY3koKS56b29tKCksbj10aGlzLmdldFBpeGVsUmF0aW8oKSxpPU1hdGguY2VpbChzQihyKm4pKTtlPU1hdGgucG93KDIsaSl9dmFyIGE9dC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUqZSxzPXQucHN0eWxlKCJtaW4tem9vbWVkLWZvbnQtc2l6ZSIpLnBmVmFsdWU7cmV0dXJuIShhPHMpfTtZMC5kcmF3RWxlbWVudFRleHQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITAscz10aGlzO2lmKG49PW51bGwpe2lmKGEmJiFzLmVsZVRleHRCaWdnZXJUaGFuTWluKGUpKXJldHVybn1lbHNlIGlmKG49PT0hMSlyZXR1cm47aWYoZS5pc05vZGUoKSl7dmFyIGw9ZS5wc3R5bGUoImxhYmVsIik7aWYoIWx8fCFsLnZhbHVlKXJldHVybjt2YXIgdT1zLmdldExhYmVsSnVzdGlmaWNhdGlvbihlKTt0LnRleHRBbGlnbj11LHQudGV4dEJhc2VsaW5lPSJib3R0b20ifWVsc2V7dmFyIGg9ZS5lbGVtZW50KCkuX3ByaXZhdGUucnNjcmF0Y2guYmFkTGluZSxmPWUucHN0eWxlKCJsYWJlbCIpLGQ9ZS5wc3R5bGUoInNvdXJjZS1sYWJlbCIpLHA9ZS5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKGh8fCghZnx8IWYudmFsdWUpJiYoIWR8fCFkLnZhbHVlKSYmKCFwfHwhcC52YWx1ZSkpcmV0dXJuO3QudGV4dEFsaWduPSJjZW50ZXIiLHQudGV4dEJhc2VsaW5lPSJib3R0b20ifXZhciBtPSFyLGc7ciYmKGc9cix0LnRyYW5zbGF0ZSgtZy54MSwtZy55MSkpLGk9PW51bGw/KHMuZHJhd1RleHQodCxlLG51bGwsbSxhKSxlLmlzRWRnZSgpJiYocy5kcmF3VGV4dCh0LGUsInNvdXJjZSIsbSxhKSxzLmRyYXdUZXh0KHQsZSwidGFyZ2V0IixtLGEpKSk6cy5kcmF3VGV4dCh0LGUsaSxtLGEpLHImJnQudHJhbnNsYXRlKGcueDEsZy55MSl9O1kwLmdldEZvbnRDYWNoZT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLmZvbnRDYWNoZXM9dGhpcy5mb250Q2FjaGVzfHxbXTtmb3IodmFyIHI9MDtyPHRoaXMuZm9udENhY2hlcy5sZW5ndGg7cisrKWlmKGU9dGhpcy5mb250Q2FjaGVzW3JdLGUuY29udGV4dD09PXQpcmV0dXJuIGU7cmV0dXJuIGU9e2NvbnRleHQ6dH0sdGhpcy5mb250Q2FjaGVzLnB1c2goZSksZX07WTAuc2V0dXBUZXh0U3R5bGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITAsbj1lLnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLGk9ZS5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUrInB4IixhPWUucHN0eWxlKCJmb250LWZhbWlseSIpLnN0clZhbHVlLHM9ZS5wc3R5bGUoImZvbnQtd2VpZ2h0Iikuc3RyVmFsdWUsbD1yP2UuZWZmZWN0aXZlT3BhY2l0eSgpKmUucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS52YWx1ZToxLHU9ZS5wc3R5bGUoInRleHQtb3V0bGluZS1vcGFjaXR5IikudmFsdWUqbCxoPWUucHN0eWxlKCJjb2xvciIpLnZhbHVlLGY9ZS5wc3R5bGUoInRleHQtb3V0bGluZS1jb2xvciIpLnZhbHVlO3QuZm9udD1uKyIgIitzKyIgIitpKyIgIithLHQubGluZUpvaW49InJvdW5kIix0aGlzLmNvbG9yRmlsbFN0eWxlKHQsaFswXSxoWzFdLGhbMl0sbCksdGhpcy5jb2xvclN0cm9rZVN0eWxlKHQsZlswXSxmWzFdLGZbMl0sdSl9O28oUFAsInJvdW5kUmVjdCIpO1kwLmdldFRleHRBbmdsZT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5fcHJpdmF0ZSxpPW4ucnNjcmF0Y2gsYT1lP2UrIi0iOiIiLHM9dC5wc3R5bGUoYSsidGV4dC1yb3RhdGlvbiIpLGw9V2woaSwibGFiZWxBbmdsZSIsZSk7cmV0dXJuIHMuc3RyVmFsdWU9PT0iYXV0b3JvdGF0ZSI/cj10LmlzRWRnZSgpP2w6MDpzLnN0clZhbHVlPT09Im5vbmUiP3I9MDpyPXMucGZWYWx1ZSxyfTtZMC5kcmF3VGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9ZS5fcHJpdmF0ZSxzPWEucnNjcmF0Y2gsbD1pP2UuZWZmZWN0aXZlT3BhY2l0eSgpOjE7aWYoIShpJiYobD09PTB8fGUucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS52YWx1ZT09PTApKSl7cj09PSJtYWluIiYmKHI9bnVsbCk7dmFyIHU9V2wocywibGFiZWxYIixyKSxoPVdsKHMsImxhYmVsWSIsciksZixkLHA9dGhpcy5nZXRMYWJlbFRleHQoZSxyKTtpZihwIT1udWxsJiZwIT09IiImJiFpc05hTih1KSYmIWlzTmFOKGgpKXt0aGlzLnNldHVwVGV4dFN0eWxlKHQsZSxpKTt2YXIgbT1yP3IrIi0iOiIiLGc9V2wocywibGFiZWxXaWR0aCIscikseT1XbChzLCJsYWJlbEhlaWdodCIsciksdj1lLnBzdHlsZShtKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSx4PWUucHN0eWxlKG0rInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLGI9ZS5pc0VkZ2UoKSx3PWUucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlLF89ZS5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7YiYmKHc9ImNlbnRlciIsXz0iY2VudGVyIiksdSs9dixoKz14O3ZhciBUO3N3aXRjaChuP1Q9dGhpcy5nZXRUZXh0QW5nbGUoZSxyKTpUPTAsVCE9PTAmJihmPXUsZD1oLHQudHJhbnNsYXRlKGYsZCksdC5yb3RhdGUoVCksdT0wLGg9MCksXyl7Y2FzZSJ0b3AiOmJyZWFrO2Nhc2UiY2VudGVyIjpoKz15LzI7YnJlYWs7Y2FzZSJib3R0b20iOmgrPXk7YnJlYWt9dmFyIEU9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUsTD1lLnBzdHlsZSgidGV4dC1ib3JkZXItb3BhY2l0eSIpLnZhbHVlLEM9ZS5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxBPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsST1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIikuc3RyVmFsdWUsRD1JLmluZGV4T2YoInJvdW5kIik9PT0wLGs9MjtpZihFPjB8fEM+MCYmTD4wKXt2YXIgUj11LUE7c3dpdGNoKHcpe2Nhc2UibGVmdCI6Ui09ZzticmVhaztjYXNlImNlbnRlciI6Ui09Zy8yO2JyZWFrfXZhciBTPWgteS1BLE89ZysyKkEsTj15KzIqQTtpZihFPjApe3ZhciBQPXQuZmlsbFN0eWxlLEY9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3QuZmlsbFN0eWxlPSJyZ2JhKCIrRlswXSsiLCIrRlsxXSsiLCIrRlsyXSsiLCIrRSpsKyIpIixEP1BQKHQsUixTLE8sTixrKTp0LmZpbGxSZWN0KFIsUyxPLE4pLHQuZmlsbFN0eWxlPVB9aWYoQz4wJiZMPjApe3ZhciBCPXQuc3Ryb2tlU3R5bGUsJD10LmxpbmVXaWR0aCx6PWUucHN0eWxlKCJ0ZXh0LWJvcmRlci1jb2xvciIpLnZhbHVlLFc9ZS5wc3R5bGUoInRleHQtYm9yZGVyLXN0eWxlIikudmFsdWU7aWYodC5zdHJva2VTdHlsZT0icmdiYSgiK3pbMF0rIiwiK3pbMV0rIiwiK3pbMl0rIiwiK0wqbCsiKSIsdC5saW5lV2lkdGg9Qyx0LnNldExpbmVEYXNoKXN3aXRjaChXKXtjYXNlImRvdHRlZCI6dC5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOnQuc2V0TGluZURhc2goWzQsMl0pO2JyZWFrO2Nhc2UiZG91YmxlIjp0LmxpbmVXaWR0aD1DLzQsdC5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoRD9QUCh0LFIsUyxPLE4saywic3Ryb2tlIik6dC5zdHJva2VSZWN0KFIsUyxPLE4pLFc9PT0iZG91YmxlIil7dmFyIGo9Qy8yO0Q/UFAodCxSK2osUytqLE8taioyLE4taioyLGssInN0cm9rZSIpOnQuc3Ryb2tlUmVjdChSK2osUytqLE8taioyLE4taioyKX10LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKFtdKSx0LmxpbmVXaWR0aD0kLHQuc3Ryb2tlU3R5bGU9Qn19dmFyIEs9MiplLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihLPjAmJih0LmxpbmVXaWR0aD1LKSxlLnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU9PT0id3JhcCIpe3ZhciBpZT1XbChzLCJsYWJlbFdyYXBDYWNoZWRMaW5lcyIsciksUT1XbChzLCJsYWJlbExpbmVIZWlnaHQiLHIpLGVlPWcvMixKPXRoaXMuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGUpO3N3aXRjaChKPT09ImF1dG8ifHwodz09PSJsZWZ0Ij9KPT09ImxlZnQiP3UrPS1nOko9PT0iY2VudGVyIiYmKHUrPS1lZSk6dz09PSJjZW50ZXIiP0o9PT0ibGVmdCI/dSs9LWVlOko9PT0icmlnaHQiJiYodSs9ZWUpOnc9PT0icmlnaHQiJiYoSj09PSJjZW50ZXIiP3UrPWVlOko9PT0icmlnaHQiJiYodSs9ZykpKSxfKXtjYXNlInRvcCI6aC09KGllLmxlbmd0aC0xKSpRO2JyZWFrO2Nhc2UiY2VudGVyIjpjYXNlImJvdHRvbSI6aC09KGllLmxlbmd0aC0xKSpRO2JyZWFrfWZvcih2YXIgSD0wO0g8aWUubGVuZ3RoO0grKylLPjAmJnQuc3Ryb2tlVGV4dChpZVtIXSx1LGgpLHQuZmlsbFRleHQoaWVbSF0sdSxoKSxoKz1RfWVsc2UgSz4wJiZ0LnN0cm9rZVRleHQocCx1LGgpLHQuZmlsbFRleHQocCx1LGgpO1QhPT0wJiYodC5yb3RhdGUoLVQpLHQudHJhbnNsYXRlKC1mLC1kKSl9fX07dzE9e307dzEuZHJhd05vZGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxzPXRoaXMsbCx1LGg9ZS5fcHJpdmF0ZSxmPWgucnNjcmF0Y2gsZD1lLnBvc2l0aW9uKCk7aWYoISgheHQoZC54KXx8IXh0KGQueSkpJiYhKGEmJiFlLnZpc2libGUoKSkpe3ZhciBwPWE/ZS5lZmZlY3RpdmVPcGFjaXR5KCk6MSxtPXMudXNlUGF0aHMoKSxnLHk9ITEsdj1lLnBhZGRpbmcoKTtsPWUud2lkdGgoKSsyKnYsdT1lLmhlaWdodCgpKzIqdjt2YXIgeDtyJiYoeD1yLHQudHJhbnNsYXRlKC14LngxLC14LnkxKSk7Zm9yKHZhciBiPWUucHN0eWxlKCJiYWNrZ3JvdW5kLWltYWdlIiksdz1iLnZhbHVlLF89bmV3IEFycmF5KHcubGVuZ3RoKSxUPW5ldyBBcnJheSh3Lmxlbmd0aCksRT0wLEw9MDtMPHcubGVuZ3RoO0wrKyl7dmFyIEM9d1tMXSxBPV9bTF09QyE9bnVsbCYmQyE9PSJub25lIjtpZihBKXt2YXIgST1lLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUoZSwiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsInZhbHVlIixMKTtFKyssVFtMXT1zLmdldENhY2hlZEltYWdlKEMsSSxmdW5jdGlvbigpe2guYmFja2dyb3VuZFRpbWVzdGFtcD1EYXRlLm5vdygpLGUuZW1pdEFuZE5vdGlmeSgiYmFja2dyb3VuZCIpfSl9fXZhciBEPWUucHN0eWxlKCJiYWNrZ3JvdW5kLWJsYWNrZW4iKS52YWx1ZSxrPWUucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLFI9ZS5wc3R5bGUoImJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKnAsUz1lLnBzdHlsZSgiYm9yZGVyLWNvbG9yIikudmFsdWUsTz1lLnBzdHlsZSgiYm9yZGVyLXN0eWxlIikudmFsdWUsTj1lLnBzdHlsZSgiYm9yZGVyLWpvaW4iKS52YWx1ZSxQPWUucHN0eWxlKCJib3JkZXItY2FwIikudmFsdWUsRj1lLnBzdHlsZSgiYm9yZGVyLXBvc2l0aW9uIikudmFsdWUsQj1lLnBzdHlsZSgiYm9yZGVyLWRhc2gtcGF0dGVybiIpLnBmVmFsdWUsJD1lLnBzdHlsZSgiYm9yZGVyLWRhc2gtb2Zmc2V0IikucGZWYWx1ZSx6PWUucHN0eWxlKCJib3JkZXItb3BhY2l0eSIpLnZhbHVlKnAsVz1lLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnBmVmFsdWUsaj1lLnBzdHlsZSgib3V0bGluZS1jb2xvciIpLnZhbHVlLEs9ZS5wc3R5bGUoIm91dGxpbmUtc3R5bGUiKS52YWx1ZSxpZT1lLnBzdHlsZSgib3V0bGluZS1vcGFjaXR5IikudmFsdWUqcCxRPWUucHN0eWxlKCJvdXRsaW5lLW9mZnNldCIpLnZhbHVlLGVlPWUucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU7ZWUhPT0iYXV0byImJihlZT1lLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUpO3ZhciBKPW8oZnVuY3Rpb24oKXt2YXIgeWU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOlI7cy5lbGVGaWxsU3R5bGUodCxlLHllKX0sInNldHVwU2hhcGVDb2xvciIpLEg9byhmdW5jdGlvbigpe3ZhciB5ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ejtzLmNvbG9yU3Ryb2tlU3R5bGUodCxTWzBdLFNbMV0sU1syXSx5ZSl9LCJzZXR1cEJvcmRlckNvbG9yIikscT1vKGZ1bmN0aW9uKCl7dmFyIHllPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTppZTtzLmNvbG9yU3Ryb2tlU3R5bGUodCxqWzBdLGpbMV0salsyXSx5ZSl9LCJzZXR1cE91dGxpbmVDb2xvciIpLFo9byhmdW5jdGlvbih5ZSxVLFRlLHNlKXt2YXIgRWU9cy5ub2RlUGF0aENhY2hlPXMubm9kZVBhdGhDYWNoZXx8W10sQWU9YWdlKFRlPT09InBvbHlnb24iP1RlKyIsIitzZS5qb2luKCIsIik6VGUsIiIrVSwiIit5ZSwiIitlZSksUGU9RWVbQWVdLE1lLG1lPSExO3JldHVybiBQZSE9bnVsbD8oTWU9UGUsbWU9ITAsZi5wYXRoQ2FjaGU9TWUpOihNZT1uZXcgUGF0aDJELEVlW0FlXT1mLnBhdGhDYWNoZT1NZSkse3BhdGg6TWUsY2FjaGVIaXQ6bWV9fSwiZ2V0UGF0aCIpLGFlPWUucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLHVlPWUucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYobSl7dC50cmFuc2xhdGUoZC54LGQueSk7dmFyIGNlPVoobCx1LGFlLHVlKTtnPWNlLnBhdGgseT1jZS5jYWNoZUhpdH12YXIgdGU9byhmdW5jdGlvbigpe2lmKCF5KXt2YXIgeWU9ZDttJiYoeWU9e3g6MCx5OjB9KSxzLm5vZGVTaGFwZXNbcy5nZXROb2RlU2hhcGUoZSldLmRyYXcoZ3x8dCx5ZS54LHllLnksbCx1LGVlLGYpfW0/dC5maWxsKGcpOnQuZmlsbCgpfSwiZHJhd1NoYXBlIiksRGU9byhmdW5jdGlvbigpe2Zvcih2YXIgeWU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnAsVT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVGU9aC5iYWNrZ3JvdW5kaW5nLHNlPTAsRWU9MDtFZTxULmxlbmd0aDtFZSsrKXt2YXIgQWU9ZS5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGUsImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLCJ2YWx1ZSIsRWUpO2lmKFUmJkFlPT09Im92ZXIifHwhVSYmQWU9PT0iaW5zaWRlIil7c2UrKztjb250aW51ZX1fW0VlXSYmVFtFZV0uY29tcGxldGUmJiFUW0VlXS5lcnJvciYmKHNlKysscy5kcmF3SW5zY3JpYmVkSW1hZ2UodCxUW0VlXSxlLEVlLHllKSl9aC5iYWNrZ3JvdW5kaW5nPXNlIT09RSxUZSE9PWguYmFja2dyb3VuZGluZyYmZS51cGRhdGVTdHlsZSghMSl9LCJkcmF3SW1hZ2VzIiksb2U9byhmdW5jdGlvbigpe3ZhciB5ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsVT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06cDtzLmhhc1BpZShlKSYmKHMuZHJhd1BpZSh0LGUsVSkseWUmJihtfHxzLm5vZGVTaGFwZXNbcy5nZXROb2RlU2hhcGUoZSldLmRyYXcodCxkLngsZC55LGwsdSxlZSxmKSkpfSwiZHJhd1BpZSIpLGtlPW8oZnVuY3Rpb24oKXt2YXIgeWU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnAsVT0oRD4wP0Q6LUQpKnllLFRlPUQ+MD8wOjI1NTtEIT09MCYmKHMuY29sb3JGaWxsU3R5bGUodCxUZSxUZSxUZSxVKSxtP3QuZmlsbChnKTp0LmZpbGwoKSl9LCJkYXJrZW4iKSxGZT1vKGZ1bmN0aW9uKCl7aWYoaz4wKXtpZih0LmxpbmVXaWR0aD1rLHQubGluZUNhcD1QLHQubGluZUpvaW49Tix0LnNldExpbmVEYXNoKXN3aXRjaChPKXtjYXNlImRvdHRlZCI6dC5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOnQuc2V0TGluZURhc2goQiksdC5saW5lRGFzaE9mZnNldD0kO2JyZWFrO2Nhc2Uic29saWQiOmNhc2UiZG91YmxlIjp0LnNldExpbmVEYXNoKFtdKTticmVha31pZihGIT09ImNlbnRlciIpe2lmKHQuc2F2ZSgpLHQubGluZVdpZHRoKj0yLEY9PT0iaW5zaWRlIiltP3QuY2xpcChnKTp0LmNsaXAoKTtlbHNle3ZhciB5ZT1uZXcgUGF0aDJEO3llLnJlY3QoLWwvMi1rLC11LzItayxsKzIqayx1KzIqaykseWUuYWRkUGF0aChnKSx0LmNsaXAoeWUsImV2ZW5vZGQiKX1tP3Quc3Ryb2tlKGcpOnQuc3Ryb2tlKCksdC5yZXN0b3JlKCl9ZWxzZSBtP3Quc3Ryb2tlKGcpOnQuc3Ryb2tlKCk7aWYoTz09PSJkb3VibGUiKXt0LmxpbmVXaWR0aD1rLzM7dmFyIFU9dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsbT90LnN0cm9rZShnKTp0LnN0cm9rZSgpLHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVV9dC5zZXRMaW5lRGFzaCYmdC5zZXRMaW5lRGFzaChbXSl9fSwiZHJhd0JvcmRlciIpLEJlPW8oZnVuY3Rpb24oKXtpZihXPjApe2lmKHQubGluZVdpZHRoPVcsdC5saW5lQ2FwPSJidXR0Iix0LnNldExpbmVEYXNoKXN3aXRjaChLKXtjYXNlImRvdHRlZCI6dC5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOnQuc2V0TGluZURhc2goWzQsMl0pO2JyZWFrO2Nhc2Uic29saWQiOmNhc2UiZG91YmxlIjp0LnNldExpbmVEYXNoKFtdKTticmVha312YXIgeWU9ZDttJiYoeWU9e3g6MCx5OjB9KTt2YXIgVT1zLmdldE5vZGVTaGFwZShlKSxUZT1rO0Y9PT0iaW5zaWRlIiYmKFRlPTApLEY9PT0ib3V0c2lkZSImJihUZSo9Mik7dmFyIHNlPShsK1RlKyhXK1EpKS9sLEVlPSh1K1RlKyhXK1EpKS91LEFlPWwqc2UsUGU9dSpFZSxNZT1zLm5vZGVTaGFwZXNbVV0ucG9pbnRzLG1lO2lmKG0pe3ZhciBXZT1aKEFlLFBlLFUsTWUpO21lPVdlLnBhdGh9aWYoVT09PSJlbGxpcHNlIilzLmRyYXdFbGxpcHNlUGF0aChtZXx8dCx5ZS54LHllLnksQWUsUGUpO2Vsc2UgaWYoWyJyb3VuZC1kaWFtb25kIiwicm91bmQtaGVwdGFnb24iLCJyb3VuZC1oZXhhZ29uIiwicm91bmQtb2N0YWdvbiIsInJvdW5kLXBlbnRhZ29uIiwicm91bmQtcG9seWdvbiIsInJvdW5kLXRyaWFuZ2xlIiwicm91bmQtdGFnIl0uaW5jbHVkZXMoVSkpe3ZhciBSZT0wLHR0PTAsZ3Q9MDtVPT09InJvdW5kLWRpYW1vbmQiP1JlPShUZStRK1cpKjEuNDpVPT09InJvdW5kLWhlcHRhZ29uIj8oUmU9KFRlK1ErVykqMS4wNzUsZ3Q9LShUZS8yK1ErVykvMzUpOlU9PT0icm91bmQtaGV4YWdvbiI/UmU9KFRlK1ErVykqMS4xMjpVPT09InJvdW5kLXBlbnRhZ29uIj8oUmU9KFRlK1ErVykqMS4xMyxndD0tKFRlLzIrUStXKS8xNSk6VT09PSJyb3VuZC10YWciPyhSZT0oVGUrUStXKSoxLjEyLHR0PShUZS8yK1crUSkqLjA3KTpVPT09InJvdW5kLXRyaWFuZ2xlIiYmKFJlPShUZStRK1cpKihNYXRoLlBJLzIpLGd0PS0oVGUrUS8yK1cpL01hdGguUEkpLFJlIT09MCYmKHNlPShsK1JlKS9sLEFlPWwqc2UsWyJyb3VuZC1oZXhhZ29uIiwicm91bmQtdGFnIl0uaW5jbHVkZXMoVSl8fChFZT0odStSZSkvdSxQZT11KkVlKSksZWU9ZWU9PT0iYXV0byI/Z2dlKEFlLFBlKTplZTtmb3IodmFyIEV0PUFlLzIsdnQ9UGUvMixZZT1lZSsoVGUrVytRKS8yLFR0PW5ldyBBcnJheShNZS5sZW5ndGgvMiksJGU9bmV3IEFycmF5KE1lLmxlbmd0aC8yKSxydD0wO3J0PE1lLmxlbmd0aC8yO3J0KyspVHRbcnRdPXt4OnllLngrdHQrRXQqTWVbcnQqMl0seTp5ZS55K2d0K3Z0Kk1lW3J0KjIrMV19O3ZhciBmdCxrdCxlcixkdCxYZT1UdC5sZW5ndGg7Zm9yKGt0PVR0W1hlLTFdLGZ0PTA7ZnQ8WGU7ZnQrKyllcj1UdFtmdCVYZV0sZHQ9VHRbKGZ0KzEpJVhlXSwkZVtmdF09YkIoa3QsZXIsZHQsWWUpLGt0PWVyLGVyPWR0O3MuZHJhd1JvdW5kUG9seWdvblBhdGgobWV8fHQseWUueCt0dCx5ZS55K2d0LGwqc2UsdSpFZSxNZSwkZSl9ZWxzZSBpZihbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoVSkpZWU9ZWU9PT0iYXV0byI/JDAoQWUsUGUpOmVlLHMuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aChtZXx8dCx5ZS54LHllLnksQWUsUGUsZWUrKFRlK1crUSkvMik7ZWxzZSBpZihbImN1dHJlY3RhbmdsZSIsImN1dC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhVKSllZT1lZT09PSJhdXRvIj9sQigpOmVlLHMuZHJhd0N1dFJlY3RhbmdsZVBhdGgobWV8fHQseWUueCx5ZS55LEFlLFBlLG51bGwsZWUrKFRlK1crUSkvNCk7ZWxzZSBpZihbImJvdHRvbXJvdW5kcmVjdGFuZ2xlIiwiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKFUpKWVlPWVlPT09ImF1dG8iPyQwKEFlLFBlKTplZSxzLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgobWV8fHQseWUueCx5ZS55LEFlLFBlLGVlKyhUZStXK1EpLzIpO2Vsc2UgaWYoVT09PSJiYXJyZWwiKXMuZHJhd0JhcnJlbFBhdGgobWV8fHQseWUueCx5ZS55LEFlLFBlKTtlbHNlIGlmKFUuc3RhcnRzV2l0aCgicG9seWdvbiIpfHxbInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiLCJyb3VuZC10YWciLCJ0YWciLCJ2ZWUiXS5pbmNsdWRlcyhVKSl7dmFyIGN0PShUZStXK1EpL2w7TWU9eTYodjYoTWUsY3QpKSxzLmRyYXdQb2x5Z29uUGF0aChtZXx8dCx5ZS54LHllLnksbCx1LE1lKX1lbHNle3ZhciBMdD0oVGUrVytRKS9sO01lPXk2KHY2KE1lLC1MdCkpLHMuZHJhd1BvbHlnb25QYXRoKG1lfHx0LHllLngseWUueSxsLHUsTWUpfWlmKG0/dC5zdHJva2UobWUpOnQuc3Ryb2tlKCksSz09PSJkb3VibGUiKXt0LmxpbmVXaWR0aD1UZS8zO3ZhciBSdD10Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjt0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3V0IixtP3Quc3Ryb2tlKG1lKTp0LnN0cm9rZSgpLHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVJ0fXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pfX0sImRyYXdPdXRsaW5lIiksVmU9byhmdW5jdGlvbigpe2kmJnMuZHJhd05vZGVPdmVybGF5KHQsZSxkLGwsdSl9LCJkcmF3T3ZlcmxheSIpLEdlPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdOb2RlVW5kZXJsYXkodCxlLGQsbCx1KX0sImRyYXdVbmRlcmxheSIpLEhlPW8oZnVuY3Rpb24oKXtzLmRyYXdFbGVtZW50VGV4dCh0LGUsbnVsbCxuKX0sImRyYXdUZXh0IikseGU9ZS5wc3R5bGUoImdob3N0IikudmFsdWU9PT0ieWVzIjtpZih4ZSl7dmFyIFg9ZS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxmZT1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLGhlPWUucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsZ2U9aGUqcDt0LnRyYW5zbGF0ZShYLGZlKSxxKCksQmUoKSxKKGhlKlIpLHRlKCksRGUoZ2UsITApLEgoaGUqeiksRmUoKSxvZShEIT09MHx8ayE9PTApLERlKGdlLCExKSxrZShnZSksdC50cmFuc2xhdGUoLVgsLWZlKX1tJiZ0LnRyYW5zbGF0ZSgtZC54LC1kLnkpLEdlKCksbSYmdC50cmFuc2xhdGUoZC54LGQueSkscSgpLEJlKCksSigpLHRlKCksRGUocCwhMCksSCgpLEZlKCksb2UoRCE9PTB8fGshPT0wKSxEZShwLCExKSxrZSgpLG0mJnQudHJhbnNsYXRlKC1kLngsLWQueSksSGUoKSxWZSgpLHImJnQudHJhbnNsYXRlKHgueDEseC55MSl9fTt4MWU9byhmdW5jdGlvbihlKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxzKXt2YXIgbD10aGlzO2lmKG4udmlzaWJsZSgpKXt2YXIgdT1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLXBhZGRpbmciKSkucGZWYWx1ZSxoPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItb3BhY2l0eSIpKS52YWx1ZSxmPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItY29sb3IiKSkudmFsdWUsZD1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLXNoYXBlIikpLnZhbHVlLHA9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1jb3JuZXItcmFkaXVzIikpLnZhbHVlO2lmKGg+MCl7aWYoaT1pfHxuLnBvc2l0aW9uKCksYT09bnVsbHx8cz09bnVsbCl7dmFyIG09bi5wYWRkaW5nKCk7YT1uLndpZHRoKCkrMiptLHM9bi5oZWlnaHQoKSsyKm19bC5jb2xvckZpbGxTdHlsZShyLGZbMF0sZlsxXSxmWzJdLGgpLGwubm9kZVNoYXBlc1tkXS5kcmF3KHIsaS54LGkueSxhK3UqMixzK3UqMixwKSxyLmZpbGwoKX19fX0sImRyYXdOb2RlT3ZlcmxheVVuZGVybGF5Iik7dzEuZHJhd05vZGVPdmVybGF5PXgxZSgib3ZlcmxheSIpO3cxLmRyYXdOb2RlVW5kZXJsYXk9eDFlKCJ1bmRlcmxheSIpO3cxLmhhc1BpZT1mdW5jdGlvbih0KXtyZXR1cm4gdD10WzBdLHQuX3ByaXZhdGUuaGFzUGllfTt3MS5kcmF3UGllPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZVswXSxuPW58fGUucG9zaXRpb24oKTt2YXIgaT1lLmN5KCkuc3R5bGUoKSxhPWUucHN0eWxlKCJwaWUtc2l6ZSIpLHM9bi54LGw9bi55LHU9ZS53aWR0aCgpLGg9ZS5oZWlnaHQoKSxmPU1hdGgubWluKHUsaCkvMixkPTAscD10aGlzLnVzZVBhdGhzKCk7cCYmKHM9MCxsPTApLGEudW5pdHM9PT0iJSI/Zj1mKmEucGZWYWx1ZTphLnBmVmFsdWUhPT12b2lkIDAmJihmPWEucGZWYWx1ZS8yKTtmb3IodmFyIG09MTttPD1pLnBpZUJhY2tncm91bmROO20rKyl7dmFyIGc9ZS5wc3R5bGUoInBpZS0iK20rIi1iYWNrZ3JvdW5kLXNpemUiKS52YWx1ZSx5PWUucHN0eWxlKCJwaWUtIittKyItYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlLHY9ZS5wc3R5bGUoInBpZS0iK20rIi1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpyLHg9Zy8xMDA7eCtkPjEmJih4PTEtZCk7dmFyIGI9MS41Kk1hdGguUEkrMipNYXRoLlBJKmQsdz0yKk1hdGguUEkqeCxfPWIrdztnPT09MHx8ZD49MXx8ZCt4PjF8fCh0LmJlZ2luUGF0aCgpLHQubW92ZVRvKHMsbCksdC5hcmMocyxsLGYsYixfKSx0LmNsb3NlUGF0aCgpLHRoaXMuY29sb3JGaWxsU3R5bGUodCx5WzBdLHlbMV0seVsyXSx2KSx0LmZpbGwoKSxkKz14KX19O21vPXt9LGR0dD0xMDA7bW8uZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YS5jb250ZXh0c1swXTtpZih0aGlzLmZvcmNlZFBpeGVsUmF0aW8hPW51bGwpcmV0dXJuIHRoaXMuZm9yY2VkUGl4ZWxSYXRpbzt2YXIgZT10aGlzLmN5LndpbmRvdygpLHI9dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4oZS5kZXZpY2VQaXhlbFJhdGlvfHwxKS9yfTttby5wYWludENhY2hlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLHI9ITAsbixpPTA7aTxlLmxlbmd0aDtpKyspaWYobj1lW2ldLG4uY29udGV4dD09PXQpe3I9ITE7YnJlYWt9cmV0dXJuIHImJihuPXtjb250ZXh0OnR9LGUucHVzaChuKSksbn07bW8uY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHM9dGhpcy51c2VQYXRocygpLGw9ci5wc3R5bGUoZSsiLWdyYWRpZW50LXN0b3AtY29sb3JzIikudmFsdWUsdT1yLnBzdHlsZShlKyItZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiKS5wZlZhbHVlO2lmKG49PT0icmFkaWFsLWdyYWRpZW50IilpZihyLmlzRWRnZSgpKXt2YXIgaD1yLnNvdXJjZUVuZHBvaW50KCksZj1yLnRhcmdldEVuZHBvaW50KCksZD1yLm1pZHBvaW50KCkscD1HMChoLGQpLG09RzAoZixkKTthPXQuY3JlYXRlUmFkaWFsR3JhZGllbnQoZC54LGQueSwwLGQueCxkLnksTWF0aC5tYXgocCxtKSl9ZWxzZXt2YXIgZz1zP3t4OjAseTowfTpyLnBvc2l0aW9uKCkseT1yLnBhZGRlZFdpZHRoKCksdj1yLnBhZGRlZEhlaWdodCgpO2E9dC5jcmVhdGVSYWRpYWxHcmFkaWVudChnLngsZy55LDAsZy54LGcueSxNYXRoLm1heCh5LHYpKX1lbHNlIGlmKHIuaXNFZGdlKCkpe3ZhciB4PXIuc291cmNlRW5kcG9pbnQoKSxiPXIudGFyZ2V0RW5kcG9pbnQoKTthPXQuY3JlYXRlTGluZWFyR3JhZGllbnQoeC54LHgueSxiLngsYi55KX1lbHNle3ZhciB3PXM/e3g6MCx5OjB9OnIucG9zaXRpb24oKSxfPXIucGFkZGVkV2lkdGgoKSxUPXIucGFkZGVkSGVpZ2h0KCksRT1fLzIsTD1ULzIsQz1yLnBzdHlsZSgiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iKS52YWx1ZTtzd2l0Y2goQyl7Y2FzZSJ0by1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3Lngsdy55LUwsdy54LHcueStMKTticmVhaztjYXNlInRvLXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueCx3LnkrTCx3Lngsdy55LUwpO2JyZWFrO2Nhc2UidG8tbGVmdCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueCtFLHcueSx3LngtRSx3LnkpO2JyZWFrO2Nhc2UidG8tcmlnaHQiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngtRSx3Lnksdy54K0Usdy55KTticmVhaztjYXNlInRvLWJvdHRvbS1yaWdodCI6Y2FzZSJ0by1yaWdodC1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngtRSx3LnktTCx3LngrRSx3LnkrTCk7YnJlYWs7Y2FzZSJ0by10b3AtcmlnaHQiOmNhc2UidG8tcmlnaHQtdG9wIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LUUsdy55K0wsdy54K0Usdy55LUwpO2JyZWFrO2Nhc2UidG8tYm90dG9tLWxlZnQiOmNhc2UidG8tbGVmdC1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngrRSx3LnktTCx3LngtRSx3LnkrTCk7YnJlYWs7Y2FzZSJ0by10b3AtbGVmdCI6Y2FzZSJ0by1sZWZ0LXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueCtFLHcueStMLHcueC1FLHcueS1MKTticmVha319aWYoIWEpcmV0dXJuIG51bGw7Zm9yKHZhciBBPXUubGVuZ3RoPT09bC5sZW5ndGgsST1sLmxlbmd0aCxEPTA7RDxJO0QrKylhLmFkZENvbG9yU3RvcChBP3VbRF06RC8oSS0xKSwicmdiYSgiK2xbRF1bMF0rIiwiK2xbRF1bMV0rIiwiK2xbRF1bMl0rIiwiK2krIikiKTtyZXR1cm4gYX07bW8uZ3JhZGllbnRGaWxsU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHQsImJhY2tncm91bmQiLGUscixuKTtpZighaSlyZXR1cm4gbnVsbDt0LmZpbGxTdHlsZT1pfTttby5jb2xvckZpbGxTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3QuZmlsbFN0eWxlPSJyZ2JhKCIrZSsiLCIrcisiLCIrbisiLCIraSsiKSJ9O21vLmVsZUZpbGxTdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5wc3R5bGUoImJhY2tncm91bmQtZmlsbCIpLnZhbHVlO2lmKG49PT0ibGluZWFyLWdyYWRpZW50Inx8bj09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRGaWxsU3R5bGUodCxlLG4scik7ZWxzZXt2YXIgaT1lLnBzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JGaWxsU3R5bGUodCxpWzBdLGlbMV0saVsyXSxyKX19O21vLmdyYWRpZW50U3Ryb2tlU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHQsImxpbmUiLGUscixuKTtpZighaSlyZXR1cm4gbnVsbDt0LnN0cm9rZVN0eWxlPWl9O21vLmNvbG9yU3Ryb2tlU3R5bGU9ZnVuY3Rpb24odCxlLHIsbixpKXt0LnN0cm9rZVN0eWxlPSJyZ2JhKCIrZSsiLCIrcisiLCIrbisiLCIraSsiKSJ9O21vLmVsZVN0cm9rZVN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnBzdHlsZSgibGluZS1maWxsIikudmFsdWU7aWYobj09PSJsaW5lYXItZ3JhZGllbnQifHxuPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudFN0cm9rZVN0eWxlKHQsZSxuLHIpO2Vsc2V7dmFyIGk9ZS5wc3R5bGUoImxpbmUtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yU3Ryb2tlU3R5bGUodCxpWzBdLGlbMV0saVsyXSxyKX19O21vLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kYXRhLG49ZS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksaT1uWzJdLGE9blszXSxzPWUuZ2V0UGl4ZWxSYXRpbygpLGw9ZS5tb3Rpb25CbHVyUHhSYXRpbzsodD09PWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHx0PT09ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2UuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pJiYocz1sKTt2YXIgdT1pKnMsaD1hKnMsZjtpZighKHU9PT1lLmNhbnZhc1dpZHRoJiZoPT09ZS5jYW52YXNIZWlnaHQpKXtlLmZvbnRDYWNoZXM9bnVsbDt2YXIgZD1yLmNhbnZhc0NvbnRhaW5lcjtkLnN0eWxlLndpZHRoPWkrInB4IixkLnN0eWxlLmhlaWdodD1hKyJweCI7Zm9yKHZhciBwPTA7cDxlLkNBTlZBU19MQVlFUlM7cCsrKWY9ci5jYW52YXNlc1twXSxmLndpZHRoPXUsZi5oZWlnaHQ9aCxmLnN0eWxlLndpZHRoPWkrInB4IixmLnN0eWxlLmhlaWdodD1hKyJweCI7Zm9yKHZhciBwPTA7cDxlLkJVRkZFUl9DT1VOVDtwKyspZj1yLmJ1ZmZlckNhbnZhc2VzW3BdLGYud2lkdGg9dSxmLmhlaWdodD1oLGYuc3R5bGUud2lkdGg9aSsicHgiLGYuc3R5bGUuaGVpZ2h0PWErInB4IjtlLnRleHR1cmVNdWx0PTEsczw9MSYmKGY9ci5idWZmZXJDYW52YXNlc1tlLlRFWFRVUkVfQlVGRkVSXSxlLnRleHR1cmVNdWx0PTIsZi53aWR0aD11KmUudGV4dHVyZU11bHQsZi5oZWlnaHQ9aCplLnRleHR1cmVNdWx0KSxlLmNhbnZhc1dpZHRoPXUsZS5jYW52YXNIZWlnaHQ9aH19O21vLnJlbmRlclRvPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVuZGVyKHtmb3JjZWRDb250ZXh0OnQsZm9yY2VkWm9vbTplLGZvcmNlZFBhbjpyLGRyYXdBbGxMYXllcnM6ITAsZm9yY2VkUHhSYXRpbzpufSl9O21vLnJlbmRlcj1mdW5jdGlvbih0KXt0PXR8fGNnZSgpO3ZhciBlPXQuZm9yY2VkQ29udGV4dCxyPXQuZHJhd0FsbExheWVycyxuPXQuZHJhd09ubHlOb2RlTGF5ZXIsaT10LmZvcmNlZFpvb20sYT10LmZvcmNlZFBhbixzPXRoaXMsbD10LmZvcmNlZFB4UmF0aW89PT12b2lkIDA/dGhpcy5nZXRQaXhlbFJhdGlvKCk6dC5mb3JjZWRQeFJhdGlvLHU9cy5jeSxoPXMuZGF0YSxmPWguY2FudmFzTmVlZHNSZWRyYXcsZD1zLnRleHR1cmVPblZpZXdwb3J0JiYhZSYmKHMucGluY2hpbmd8fHMuaG92ZXJEYXRhLmRyYWdnaW5nfHxzLnN3aXBlUGFubmluZ3x8cy5kYXRhLndoZWVsWm9vbWluZykscD10Lm1vdGlvbkJsdXIhPT12b2lkIDA/dC5tb3Rpb25CbHVyOnMubW90aW9uQmx1cixtPXMubW90aW9uQmx1clB4UmF0aW8sZz11Lmhhc0NvbXBvdW5kTm9kZXMoKSx5PXMuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyx2PSEhKHMuaG92ZXJEYXRhLnNlbGVjdGluZ3x8cy50b3VjaERhdGEuc2VsZWN0aW5nKTtwPXAmJiFlJiZzLm1vdGlvbkJsdXJFbmFibGVkJiYhdjt2YXIgeD1wO2V8fChzLnByZXZQeFJhdGlvIT09bCYmKHMuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCkscy5tYXRjaENhbnZhc1NpemUocy5jb250YWluZXIpLHMucmVkcmF3SGludCgiZWxlcyIsITApLHMucmVkcmF3SGludCgiZHJhZyIsITApKSxzLnByZXZQeFJhdGlvPWwpLCFlJiZzLm1vdGlvbkJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQocy5tb3Rpb25CbHVyVGltZW91dCkscCYmKHMubWJGcmFtZXM9PW51bGwmJihzLm1iRnJhbWVzPTApLHMubWJGcmFtZXMrKyxzLm1iRnJhbWVzPDMmJih4PSExKSxzLm1iRnJhbWVzPnMubWluTWJMb3dRdWFsRnJhbWVzJiYocy5tb3Rpb25CbHVyUHhSYXRpbz1zLm1iUHhSQmx1cnJ5KSkscy5jbGVhcmluZ01vdGlvbkJsdXImJihzLm1vdGlvbkJsdXJQeFJhdGlvPTEpLHMudGV4dHVyZURyYXdMYXN0RnJhbWUmJiFkJiYoZltzLk5PREVdPSEwLGZbcy5TRUxFQ1RfQk9YXT0hMCk7dmFyIGI9dS5zdHlsZSgpLHc9dS56b29tKCksXz1pIT09dm9pZCAwP2k6dyxUPXUucGFuKCksRT17eDpULngseTpULnl9LEw9e3pvb206dyxwYW46e3g6VC54LHk6VC55fX0sQz1zLnByZXZWaWV3cG9ydCxBPUM9PT12b2lkIDB8fEwuem9vbSE9PUMuem9vbXx8TC5wYW4ueCE9PUMucGFuLnh8fEwucGFuLnkhPT1DLnBhbi55OyFBJiYhKHkmJiFnKSYmKHMubW90aW9uQmx1clB4UmF0aW89MSksYSYmKEU9YSksXyo9bCxFLngqPWwsRS55Kj1sO3ZhciBJPXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtmdW5jdGlvbiBEKGNlLHRlLERlLG9lLGtlKXt2YXIgRmU9Y2UuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO2NlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3V0IixzLmNvbG9yRmlsbFN0eWxlKGNlLDI1NSwyNTUsMjU1LHMubW90aW9uQmx1clRyYW5zcGFyZW5jeSksY2UuZmlsbFJlY3QodGUsRGUsb2Usa2UpLGNlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1GZX1vKEQsIm1iY2xlYXIiKTtmdW5jdGlvbiBrKGNlLHRlKXt2YXIgRGUsb2Usa2UsRmU7IXMuY2xlYXJpbmdNb3Rpb25CbHVyJiYoY2U9PT1oLmJ1ZmZlckNvbnRleHRzW3MuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV18fGNlPT09aC5idWZmZXJDb250ZXh0c1tzLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKT8oRGU9e3g6VC54Km0seTpULnkqbX0sb2U9dyptLGtlPXMuY2FudmFzV2lkdGgqbSxGZT1zLmNhbnZhc0hlaWdodCptKTooRGU9RSxvZT1fLGtlPXMuY2FudmFzV2lkdGgsRmU9cy5jYW52YXNIZWlnaHQpLGNlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGU9PT0ibW90aW9uQmx1ciI/RChjZSwwLDAsa2UsRmUpOiFlJiYodGU9PT12b2lkIDB8fHRlKSYmY2UuY2xlYXJSZWN0KDAsMCxrZSxGZSkscnx8KGNlLnRyYW5zbGF0ZShEZS54LERlLnkpLGNlLnNjYWxlKG9lLG9lKSksYSYmY2UudHJhbnNsYXRlKGEueCxhLnkpLGkmJmNlLnNjYWxlKGksaSl9aWYobyhrLCJzZXRDb250ZXh0VHJhbnNmb3JtIiksZHx8KHMudGV4dHVyZURyYXdMYXN0RnJhbWU9ITEpLGQpe2lmKHMudGV4dHVyZURyYXdMYXN0RnJhbWU9ITAsIXMudGV4dHVyZUNhY2hlKXtzLnRleHR1cmVDYWNoZT17fSxzLnRleHR1cmVDYWNoZS5iYj11Lm11dGFibGVFbGVtZW50cygpLmJvdW5kaW5nQm94KCkscy50ZXh0dXJlQ2FjaGUudGV4dHVyZT1zLmRhdGEuYnVmZmVyQ2FudmFzZXNbcy5URVhUVVJFX0JVRkZFUl07dmFyIFI9cy5kYXRhLmJ1ZmZlckNvbnRleHRzW3MuVEVYVFVSRV9CVUZGRVJdO1Iuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxSLmNsZWFyUmVjdCgwLDAscy5jYW52YXNXaWR0aCpzLnRleHR1cmVNdWx0LHMuY2FudmFzSGVpZ2h0KnMudGV4dHVyZU11bHQpLHMucmVuZGVyKHtmb3JjZWRDb250ZXh0OlIsZHJhd09ubHlOb2RlTGF5ZXI6ITAsZm9yY2VkUHhSYXRpbzpsKnMudGV4dHVyZU11bHR9KTt2YXIgTD1zLnRleHR1cmVDYWNoZS52aWV3cG9ydD17em9vbTp1Lnpvb20oKSxwYW46dS5wYW4oKSx3aWR0aDpzLmNhbnZhc1dpZHRoLGhlaWdodDpzLmNhbnZhc0hlaWdodH07TC5tcGFuPXt4OigwLUwucGFuLngpL0wuem9vbSx5OigwLUwucGFuLnkpL0wuem9vbX19ZltzLkRSQUddPSExLGZbcy5OT0RFXT0hMTt2YXIgUz1oLmNvbnRleHRzW3MuTk9ERV0sTz1zLnRleHR1cmVDYWNoZS50ZXh0dXJlLEw9cy50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7Uy5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHA/RChTLDAsMCxMLndpZHRoLEwuaGVpZ2h0KTpTLmNsZWFyUmVjdCgwLDAsTC53aWR0aCxMLmhlaWdodCk7dmFyIE49Yi5jb3JlKCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiKS52YWx1ZSxQPWIuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiKS52YWx1ZTtzLmNvbG9yRmlsbFN0eWxlKFMsTlswXSxOWzFdLE5bMl0sUCksUy5maWxsUmVjdCgwLDAsTC53aWR0aCxMLmhlaWdodCk7dmFyIHc9dS56b29tKCk7ayhTLCExKSxTLmNsZWFyUmVjdChMLm1wYW4ueCxMLm1wYW4ueSxMLndpZHRoL0wuem9vbS9sLEwuaGVpZ2h0L0wuem9vbS9sKSxTLmRyYXdJbWFnZShPLEwubXBhbi54LEwubXBhbi55LEwud2lkdGgvTC56b29tL2wsTC5oZWlnaHQvTC56b29tL2wpfWVsc2Ugcy50ZXh0dXJlT25WaWV3cG9ydCYmIWUmJihzLnRleHR1cmVDYWNoZT1udWxsKTt2YXIgRj11LmV4dGVudCgpLEI9cy5waW5jaGluZ3x8cy5ob3ZlckRhdGEuZHJhZ2dpbmd8fHMuc3dpcGVQYW5uaW5nfHxzLmRhdGEud2hlZWxab29taW5nfHxzLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHMuY3kuYW5pbWF0ZWQoKSwkPXMuaGlkZUVkZ2VzT25WaWV3cG9ydCYmQix6PVtdO2lmKHpbcy5OT0RFXT0hZltzLk5PREVdJiZwJiYhcy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLk5PREVdfHxzLmNsZWFyaW5nTW90aW9uQmx1cix6W3MuTk9ERV0mJihzLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3MuTk9ERV09ITApLHpbcy5EUkFHXT0hZltzLkRSQUddJiZwJiYhcy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLkRSQUddfHxzLmNsZWFyaW5nTW90aW9uQmx1cix6W3MuRFJBR10mJihzLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3MuRFJBR109ITApLGZbcy5OT0RFXXx8cnx8bnx8eltzLk5PREVdKXt2YXIgVz1wJiYheltzLk5PREVdJiZtIT09MSxTPWV8fChXP3MuZGF0YS5idWZmZXJDb250ZXh0c1tzLk1PVElPTkJMVVJfQlVGRkVSX05PREVdOmguY29udGV4dHNbcy5OT0RFXSksaj1wJiYhVz8ibW90aW9uQmx1ciI6dm9pZCAwO2soUyxqKSwkP3MuZHJhd0NhY2hlZE5vZGVzKFMsSS5ub25kcmFnLGwsRik6cy5kcmF3TGF5ZXJlZEVsZW1lbnRzKFMsSS5ub25kcmFnLGwsRikscy5kZWJ1ZyYmcy5kcmF3RGVidWdQb2ludHMoUyxJLm5vbmRyYWcpLCFyJiYhcCYmKGZbcy5OT0RFXT0hMSl9aWYoIW4mJihmW3MuRFJBR118fHJ8fHpbcy5EUkFHXSkpe3ZhciBXPXAmJiF6W3MuRFJBR10mJm0hPT0xLFM9ZXx8KFc/cy5kYXRhLmJ1ZmZlckNvbnRleHRzW3MuTU9USU9OQkxVUl9CVUZGRVJfRFJBR106aC5jb250ZXh0c1tzLkRSQUddKTtrKFMscCYmIVc/Im1vdGlvbkJsdXIiOnZvaWQgMCksJD9zLmRyYXdDYWNoZWROb2RlcyhTLEkuZHJhZyxsLEYpOnMuZHJhd0NhY2hlZEVsZW1lbnRzKFMsSS5kcmFnLGwsRikscy5kZWJ1ZyYmcy5kcmF3RGVidWdQb2ludHMoUyxJLmRyYWcpLCFyJiYhcCYmKGZbcy5EUkFHXT0hMSl9aWYocy5zaG93RnBzfHwhbiYmZltzLlNFTEVDVF9CT1hdJiYhcil7dmFyIFM9ZXx8aC5jb250ZXh0c1tzLlNFTEVDVF9CT1hdO2lmKGsoUykscy5zZWxlY3Rpb25bNF09PTEmJihzLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fHMudG91Y2hEYXRhLnNlbGVjdGluZykpe3ZhciB3PXMuY3kuem9vbSgpLEs9Yi5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIpLnZhbHVlL3c7Uy5saW5lV2lkdGg9SyxTLmZpbGxTdHlsZT0icmdiYSgiK2IuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzBdKyIsIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsxXSsiLCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMl0rIiwiK2IuY29yZSgic2VsZWN0aW9uLWJveC1vcGFjaXR5IikudmFsdWUrIikiLFMuZmlsbFJlY3Qocy5zZWxlY3Rpb25bMF0scy5zZWxlY3Rpb25bMV0scy5zZWxlY3Rpb25bMl0tcy5zZWxlY3Rpb25bMF0scy5zZWxlY3Rpb25bM10tcy5zZWxlY3Rpb25bMV0pLEs+MCYmKFMuc3Ryb2tlU3R5bGU9InJnYmEoIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMF0rIiwiK2IuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiKS52YWx1ZVsxXSsiLCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzJdKyIsIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixTLnN0cm9rZVJlY3Qocy5zZWxlY3Rpb25bMF0scy5zZWxlY3Rpb25bMV0scy5zZWxlY3Rpb25bMl0tcy5zZWxlY3Rpb25bMF0scy5zZWxlY3Rpb25bM10tcy5zZWxlY3Rpb25bMV0pKX1pZihoLmJnQWN0aXZlUG9zaXN0aW9uJiYhcy5ob3ZlckRhdGEuc2VsZWN0aW5nKXt2YXIgdz1zLmN5Lnpvb20oKSxpZT1oLmJnQWN0aXZlUG9zaXN0aW9uO1MuZmlsbFN0eWxlPSJyZ2JhKCIrYi5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVswXSsiLCIrYi5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsxXSsiLCIrYi5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsyXSsiLCIrYi5jb3JlKCJhY3RpdmUtYmctb3BhY2l0eSIpLnZhbHVlKyIpIixTLmJlZ2luUGF0aCgpLFMuYXJjKGllLngsaWUueSxiLmNvcmUoImFjdGl2ZS1iZy1zaXplIikucGZWYWx1ZS93LDAsMipNYXRoLlBJKSxTLmZpbGwoKX12YXIgUT1zLmxhc3RSZWRyYXdUaW1lO2lmKHMuc2hvd0ZwcyYmUSl7UT1NYXRoLnJvdW5kKFEpO3ZhciBlZT1NYXRoLnJvdW5kKDFlMy9RKTtTLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksUy5maWxsU3R5bGU9InJnYmEoMjU1LCAwLCAwLCAwLjc1KSIsUy5zdHJva2VTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixTLmxpbmVXaWR0aD0xLFMuZmlsbFRleHQoIjEgZnJhbWUgPSAiK1ErIiBtcyA9ICIrZWUrIiBmcHMiLDAsMjApO3ZhciBKPTYwO1Muc3Ryb2tlUmVjdCgwLDMwLDI1MCwyMCksUy5maWxsUmVjdCgwLDMwLDI1MCpNYXRoLm1pbihlZS9KLDEpLDIwKX1yfHwoZltzLlNFTEVDVF9CT1hdPSExKX1pZihwJiZtIT09MSl7dmFyIEg9aC5jb250ZXh0c1tzLk5PREVdLHE9cy5kYXRhLmJ1ZmZlckNhbnZhc2VzW3MuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV0sWj1oLmNvbnRleHRzW3MuRFJBR10sYWU9cy5kYXRhLmJ1ZmZlckNhbnZhc2VzW3MuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10sdWU9byhmdW5jdGlvbih0ZSxEZSxvZSl7dGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxvZXx8IXg/dGUuY2xlYXJSZWN0KDAsMCxzLmNhbnZhc1dpZHRoLHMuY2FudmFzSGVpZ2h0KTpEKHRlLDAsMCxzLmNhbnZhc1dpZHRoLHMuY2FudmFzSGVpZ2h0KTt2YXIga2U9bTt0ZS5kcmF3SW1hZ2UoRGUsMCwwLHMuY2FudmFzV2lkdGgqa2Uscy5jYW52YXNIZWlnaHQqa2UsMCwwLHMuY2FudmFzV2lkdGgscy5jYW52YXNIZWlnaHQpfSwiZHJhd01vdGlvbkJsdXIiKTsoZltzLk5PREVdfHx6W3MuTk9ERV0pJiYodWUoSCxxLHpbcy5OT0RFXSksZltzLk5PREVdPSExKSwoZltzLkRSQUddfHx6W3MuRFJBR10pJiYodWUoWixhZSx6W3MuRFJBR10pLGZbcy5EUkFHXT0hMSl9cy5wcmV2Vmlld3BvcnQ9TCxzLmNsZWFyaW5nTW90aW9uQmx1ciYmKHMuY2xlYXJpbmdNb3Rpb25CbHVyPSExLHMubW90aW9uQmx1ckNsZWFyZWQ9ITAscy5tb3Rpb25CbHVyPSEwKSxwJiYocy5tb3Rpb25CbHVyVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cy5tb3Rpb25CbHVyVGltZW91dD1udWxsLHMuY2xlYXJlZEZvck1vdGlvbkJsdXJbcy5OT0RFXT0hMSxzLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3MuRFJBR109ITEscy5tb3Rpb25CbHVyPSExLHMuY2xlYXJpbmdNb3Rpb25CbHVyPSFkLHMubWJGcmFtZXM9MCxmW3MuTk9ERV09ITAsZltzLkRSQUddPSEwLHMucmVkcmF3KCl9LGR0dCkpLGV8fHUuZW1pdCgicmVuZGVyIil9O05mPXt9O05mLmRyYXdQb2x5Z29uUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9bi8yLGw9aS8yO3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUrcyphWzBdLHIrbCphWzFdKTtmb3IodmFyIHU9MTt1PGEubGVuZ3RoLzI7dSsrKXQubGluZVRvKGUrcyphW3UqMl0scitsKmFbdSoyKzFdKTt0LmNsb3NlUGF0aCgpfTtOZi5kcmF3Um91bmRQb2x5Z29uUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSxzKXtzLmZvckVhY2goZnVuY3Rpb24obCl7cmV0dXJuIG8xZSh0LGwpfSksdC5jbG9zZVBhdGgoKX07TmYuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9bi8yLGw9aS8yLHU9YT09PSJhdXRvIj8kMChuLGkpOk1hdGgubWluKGEsbCxzKTt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLHItbCksdC5hcmNUbyhlK3Msci1sLGUrcyxyLHUpLHQuYXJjVG8oZStzLHIrbCxlLHIrbCx1KSx0LmFyY1RvKGUtcyxyK2wsZS1zLHIsdSksdC5hcmNUbyhlLXMsci1sLGUsci1sLHUpLHQubGluZVRvKGUsci1sKSx0LmNsb3NlUGF0aCgpfTtOZi5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz1uLzIsbD1pLzIsdT1hPT09ImF1dG8iPyQwKG4saSk6YTt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLHItbCksdC5saW5lVG8oZStzLHItbCksdC5saW5lVG8oZStzLHIpLHQuYXJjVG8oZStzLHIrbCxlLHIrbCx1KSx0LmFyY1RvKGUtcyxyK2wsZS1zLHIsdSksdC5saW5lVG8oZS1zLHItbCksdC5saW5lVG8oZSxyLWwpLHQuY2xvc2VQYXRoKCl9O05mLmRyYXdDdXRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe3ZhciBsPW4vMix1PWkvMixoPXM9PT0iYXV0byI/bEIoKTpzO3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUtbCtoLHItdSksdC5saW5lVG8oZStsLWgsci11KSx0LmxpbmVUbyhlK2wsci11K2gpLHQubGluZVRvKGUrbCxyK3UtaCksdC5saW5lVG8oZStsLWgscit1KSx0LmxpbmVUbyhlLWwraCxyK3UpLHQubGluZVRvKGUtbCxyK3UtaCksdC5saW5lVG8oZS1sLHItdStoKSx0LmNsb3NlUGF0aCgpfTtOZi5kcmF3QmFycmVsUGF0aD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW4vMixzPWkvMixsPWUtYSx1PWUrYSxoPXItcyxmPXIrcyxkPUZQKG4saSkscD1kLndpZHRoT2Zmc2V0LG09ZC5oZWlnaHRPZmZzZXQsZz1kLmN0cmxQdE9mZnNldFBjdCpwO3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGwsaCttKSx0LmxpbmVUbyhsLGYtbSksdC5xdWFkcmF0aWNDdXJ2ZVRvKGwrZyxmLGwrcCxmKSx0LmxpbmVUbyh1LXAsZiksdC5xdWFkcmF0aWNDdXJ2ZVRvKHUtZyxmLHUsZi1tKSx0LmxpbmVUbyh1LGgrbSksdC5xdWFkcmF0aWNDdXJ2ZVRvKHUtZyxoLHUtcCxoKSx0LmxpbmVUbyhsK3AsaCksdC5xdWFkcmF0aWNDdXJ2ZVRvKGwrZyxoLGwsaCttKSx0LmNsb3NlUGF0aCgpfTskbWU9TWF0aC5zaW4oMCksVm1lPU1hdGguY29zKDApLEtQPXt9LFFQPXt9LGIxZT1NYXRoLlBJLzQwO2ZvcihSMD0wKk1hdGguUEk7UjA8MipNYXRoLlBJO1IwKz1iMWUpS1BbUjBdPU1hdGguc2luKFIwKSxRUFtSMF09TWF0aC5jb3MoUjApO05mLmRyYXdFbGxpcHNlUGF0aD1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQuZWxsaXBzZSl0LmVsbGlwc2UoZSxyLG4vMixpLzIsMCwwLDIqTWF0aC5QSSk7ZWxzZSBmb3IodmFyIGEscyxsPW4vMix1PWkvMixoPTAqTWF0aC5QSTtoPDIqTWF0aC5QSTtoKz1iMWUpYT1lLWwqS1BbaF0qJG1lK2wqUVBbaF0qVm1lLHM9cit1KlFQW2hdKiRtZSt1KktQW2hdKlZtZSxoPT09MD90Lm1vdmVUbyhhLHMpOnQubGluZVRvKGEscyk7dC5jbG9zZVBhdGgoKX07c2I9e307c2IuY3JlYXRlQnVmZmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIHIud2lkdGg9dCxyLmhlaWdodD1lLFtyLHIuZ2V0Q29udGV4dCgiMmQiKV19O3NiLmJ1ZmZlckNhbnZhc0ltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3kscj1lLm11dGFibGVFbGVtZW50cygpLG49ci5ib3VuZGluZ0JveCgpLGk9dGhpcy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksYT10LmZ1bGw/TWF0aC5jZWlsKG4udyk6aVsyXSxzPXQuZnVsbD9NYXRoLmNlaWwobi5oKTppWzNdLGw9eHQodC5tYXhXaWR0aCl8fHh0KHQubWF4SGVpZ2h0KSx1PXRoaXMuZ2V0UGl4ZWxSYXRpbygpLGg9MTtpZih0LnNjYWxlIT09dm9pZCAwKWEqPXQuc2NhbGUscyo9dC5zY2FsZSxoPXQuc2NhbGU7ZWxzZSBpZihsKXt2YXIgZj0xLzAsZD0xLzA7eHQodC5tYXhXaWR0aCkmJihmPWgqdC5tYXhXaWR0aC9hKSx4dCh0Lm1heEhlaWdodCkmJihkPWgqdC5tYXhIZWlnaHQvcyksaD1NYXRoLm1pbihmLGQpLGEqPWgscyo9aH1sfHwoYSo9dSxzKj11LGgqPXUpO3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Aud2lkdGg9YSxwLmhlaWdodD1zLHAuc3R5bGUud2lkdGg9YSsicHgiLHAuc3R5bGUuaGVpZ2h0PXMrInB4Ijt2YXIgbT1wLmdldENvbnRleHQoIjJkIik7aWYoYT4wJiZzPjApe20uY2xlYXJSZWN0KDAsMCxhLHMpLG0uZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciI7dmFyIGc9dGhpcy5nZXRDYWNoZWRaU29ydGVkRWxlcygpO2lmKHQuZnVsbCltLnRyYW5zbGF0ZSgtbi54MSpoLC1uLnkxKmgpLG0uc2NhbGUoaCxoKSx0aGlzLmRyYXdFbGVtZW50cyhtLGcpLG0uc2NhbGUoMS9oLDEvaCksbS50cmFuc2xhdGUobi54MSpoLG4ueTEqaCk7ZWxzZXt2YXIgeT1lLnBhbigpLHY9e3g6eS54KmgseTp5LnkqaH07aCo9ZS56b29tKCksbS50cmFuc2xhdGUodi54LHYueSksbS5zY2FsZShoLGgpLHRoaXMuZHJhd0VsZW1lbnRzKG0sZyksbS5zY2FsZSgxL2gsMS9oKSxtLnRyYW5zbGF0ZSgtdi54LC12LnkpfXQuYmcmJihtLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsbS5maWxsU3R5bGU9dC5iZyxtLnJlY3QoMCwwLGEscyksbS5maWxsKCkpfXJldHVybiBwfTtvKHB0dCwiYjY0VG9CbG9iIik7byhVbWUsImI2NFVyaVRvQjY0Iik7byh3MWUsIm91dHB1dCIpO3NiLnBuZz1mdW5jdGlvbih0KXtyZXR1cm4gdzFlKHQsdGhpcy5idWZmZXJDYW52YXNJbWFnZSh0KSwiaW1hZ2UvcG5nIil9O3NiLmpwZz1mdW5jdGlvbih0KXtyZXR1cm4gdzFlKHQsdGhpcy5idWZmZXJDYW52YXNJbWFnZSh0KSwiaW1hZ2UvanBlZyIpfTtUMWU9e307VDFlLm5vZGVTaGFwZUltcGw9ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXtzd2l0Y2godCl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgoZSxyLG4saSxhKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChlLHIsbixpLGEscyk7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChlLHIsbixpLGEscyxsKTtjYXNlInJvdW5kcmVjdGFuZ2xlIjpjYXNlInJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aChlLHIsbixpLGEsbCk7Y2FzZSJjdXRyZWN0YW5nbGUiOmNhc2UiY3V0LXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0N1dFJlY3RhbmdsZVBhdGgoZSxyLG4saSxhLHMsbCk7Y2FzZSJib3R0b21yb3VuZHJlY3RhbmdsZSI6Y2FzZSJib3R0b20tcm91bmQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoKGUscixuLGksYSxsKTtjYXNlImJhcnJlbCI6cmV0dXJuIHRoaXMuZHJhd0JhcnJlbFBhdGgoZSxyLG4saSxhKX19O210dD1rMWUsS3I9azFlLnByb3RvdHlwZTtLci5DQU5WQVNfTEFZRVJTPTM7S3IuU0VMRUNUX0JPWD0wO0tyLkRSQUc9MTtLci5OT0RFPTI7S3IuQlVGRkVSX0NPVU5UPTM7S3IuVEVYVFVSRV9CVUZGRVI9MDtLci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFPTE7S3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBRz0yO28oazFlLCJDYW52YXNSZW5kZXJlciIpO0tyLnJlZHJhd0hpbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3N3aXRjaCh0KXtjYXNlImVsZXMiOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tLci5OT0RFXT1lO2JyZWFrO2Nhc2UiZHJhZyI6ci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0tyLkRSQUddPWU7YnJlYWs7Y2FzZSJzZWxlY3QiOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tLci5TRUxFQ1RfQk9YXT1lO2JyZWFrfX07Z3R0PXR5cGVvZiBQYXRoMkQ8InUiO0tyLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24odCl7aWYodD09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF0fTtLci51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiBndHQmJnRoaXMucGF0aHNFbmFibGVkfTtLci5zZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24odCxlKXt0LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD90LmltYWdlU21vb3RoaW5nRW5hYmxlZD1lOih0LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZD1lLHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPWUsdC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZD1lKX07S3IuZ2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD90LmltYWdlU21vb3RoaW5nRW5hYmxlZDp0LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZHx8dC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWR8fHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWR9O0tyLm1ha2VPZmZzY3JlZW5DYW52YXM9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZigodHlwZW9mIE9mZnNjcmVlbkNhbnZhcz4idSI/InVuZGVmaW5lZCI6WWkoT2Zmc2NyZWVuQ2FudmFzKSkhPT0idW5kZWZpbmVkIilyPW5ldyBPZmZzY3JlZW5DYW52YXModCxlKTtlbHNle3ZhciBuPXRoaXMuY3kud2luZG93KCksaT1uLmRvY3VtZW50O3I9aS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxyLndpZHRoPXQsci5oZWlnaHQ9ZX1yZXR1cm4gcn07W3kxZSxZYyxadSxUQixZMCx3MSxtbyxOZixzYixUMWVdLmZvckVhY2goZnVuY3Rpb24odCl7aXIoS3IsdCl9KTt5dHQ9W3tuYW1lOiJudWxsIixpbXBsOmkxZX0se25hbWU6ImJhc2UiLGltcGw6cDFlfSx7bmFtZToiY2FudmFzIixpbXBsOm10dH1dLHZ0dD1be3R5cGU6ImxheW91dCIsZXh0ZW5zaW9uczprZXR9LHt0eXBlOiJyZW5kZXJlciIsZXh0ZW5zaW9uczp5dHR9XSxFMWU9e30sUzFlPXt9O28oQzFlLCJzZXRFeHRlbnNpb24iKTtvKEExZSwiZ2V0RXh0ZW5zaW9uIik7byh4dHQsInNldE1vZHVsZSIpO28oYnR0LCJnZXRNb2R1bGUiKTtaUD1vKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpcmV0dXJuIEExZS5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTMpcmV0dXJuIEMxZS5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTQpcmV0dXJuIGJ0dC5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTUpcmV0dXJuIHh0dC5hcHBseShudWxsLGFyZ3VtZW50cyk7aGkoIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX0sImV4dGVuc2lvbiIpO1F4LnByb3RvdHlwZS5leHRlbnNpb249WlA7dnR0LmZvckVhY2goZnVuY3Rpb24odCl7dC5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7QzFlKHQudHlwZSxlLm5hbWUsZS5pbXBsKX0pfSk7XzFlPW8oZnVuY3Rpb24gdCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdDt0aGlzLmxlbmd0aD0wfSwiU3R5bGVzaGVldCIpLEgwPV8xZS5wcm90b3R5cGU7SDAuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGVzaGVldCJ9O0gwLnNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbZV09e3NlbGVjdG9yOnQscHJvcGVydGllczpbXX0sdGhpc307SDAuY3NzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtMTtpZihadCh0KSl0aGlzW3JdLnByb3BlcnRpZXMucHVzaCh7bmFtZTp0LHZhbHVlOmV9KTtlbHNlIGlmKFZyKHQpKWZvcih2YXIgbj10LGk9T2JqZWN0LmtleXMobiksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9bltzXTtpZihsIT1udWxsKXt2YXIgdT1QYS5wcm9wZXJ0aWVzW3NdfHxQYS5wcm9wZXJ0aWVzW1M2KHMpXTtpZih1IT1udWxsKXt2YXIgaD11Lm5hbWUsZj1sO3RoaXNbcl0ucHJvcGVydGllcy5wdXNoKHtuYW1lOmgsdmFsdWU6Zn0pfX19cmV0dXJuIHRoaXN9O0gwLnN0eWxlPUgwLmNzcztIMC5nZW5lcmF0ZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBQYSh0KTtyZXR1cm4gdGhpcy5hcHBlbmRUb1N0eWxlKGUpfTtIMC5hcHBlbmRUb1N0eWxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdLG49ci5zZWxlY3RvcixpPXIucHJvcGVydGllczt0LnNlbGVjdG9yKG4pO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3QuY3NzKHMubmFtZSxzLnZhbHVlKX19cmV0dXJuIHR9O3d0dD0iMy4zMC4yIixzbD1vKGZ1bmN0aW9uKGUpe2lmKGU9PT12b2lkIDAmJihlPXt9KSxWcihlKSlyZXR1cm4gbmV3IFF4KGUpO2lmKFp0KGUpKXJldHVybiBaUC5hcHBseShaUCxhcmd1bWVudHMpfSwiY3l0b3NjYXBlIik7c2wudXNlPWZ1bmN0aW9uKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZS51bnNoaWZ0KHNsKSx0LmFwcGx5KG51bGwsZSksdGhpc307c2wud2FybmluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIG9nZSh0KX07c2wudmVyc2lvbj13dHQ7c2wuc3R5bGVzaGVldD1zbC5TdHlsZXNoZWV0PV8xZX0pO3ZhciBTQj1OaSgob2IsRUIpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2Ygb2I9PSJvYmplY3QiJiZ0eXBlb2YgRUI9PSJvYmplY3QiP0VCLmV4cG9ydHM9cigpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHIpOnR5cGVvZiBvYj09Im9iamVjdCI/b2IubGF5b3V0QmFzZT1yKCk6ZS5sYXlvdXRCYXNlPXIoKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikob2IsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXtpZihlW25dKXJldHVybiBlW25dLmV4cG9ydHM7dmFyIGk9ZVtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsciksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbyhyLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksci5tPXQsci5jPWUsci5pPWZ1bmN0aW9uKG4pe3JldHVybiBufSxyLmQ9ZnVuY3Rpb24obixpLGEpe3IubyhuLGkpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixpLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6YX0pfSxyLm49ZnVuY3Rpb24obil7dmFyIGk9biYmbi5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gbn0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gci5kKGksImEiLGkpLGl9LHIubz1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKX0sci5wPSIiLHIoci5zPTI2KX0oW2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIkxheW91dENvbnN0YW50cyIpLG4uUVVBTElUWT0xLG4uREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEPSExLG4uREVGQVVMVF9JTkNSRU1FTlRBTD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVD0hMCxuLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ9ITEsbi5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q9NTAsbi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPSExLG4uREVGQVVMVF9HUkFQSF9NQVJHSU49MTUsbi5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9ITEsbi5TSU1QTEVfTk9ERV9TSVpFPTQwLG4uU0lNUExFX05PREVfSEFMRl9TSVpFPW4uU0lNUExFX05PREVfU0laRS8yLG4uRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFPTQwLG4uTUlOX0VER0VfTEVOR1RIPTEsbi5XT1JMRF9CT1VOREFSWT0xZTYsbi5JTklUSUFMX1dPUkxEX0JPVU5EQVJZPW4uV09STERfQk9VTkRBUlkvMWUzLG4uV09STERfQ0VOVEVSX1g9MTIwMCxuLldPUkxEX0NFTlRFUl9ZPTkwMCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cig4KSxhPXIoOSk7ZnVuY3Rpb24gcyh1LGgsZil7bi5jYWxsKHRoaXMsZiksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ITEsdGhpcy52R3JhcGhPYmplY3Q9Zix0aGlzLmJlbmRwb2ludHM9W10sdGhpcy5zb3VyY2U9dSx0aGlzLnRhcmdldD1ofW8ocywiTEVkZ2UiKSxzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGwgaW4gbilzW2xdPW5bbF07cy5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxzLnByb3RvdHlwZS5nZXRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXR9LHMucHJvdG90eXBlLmlzSW50ZXJHcmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW50ZXJHcmFwaH0scy5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxzLnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR9LHMucHJvdG90eXBlLmdldEJlbmRwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZW5kcG9pbnRzfSxzLnByb3RvdHlwZS5nZXRMY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sY2F9LHMucHJvdG90eXBlLmdldFNvdXJjZUluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlSW5MY2F9LHMucHJvdG90eXBlLmdldFRhcmdldEluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0SW5MY2F9LHMucHJvdG90eXBlLmdldE90aGVyRW5kPWZ1bmN0aW9uKHUpe2lmKHRoaXMuc291cmNlPT09dSlyZXR1cm4gdGhpcy50YXJnZXQ7aWYodGhpcy50YXJnZXQ9PT11KXJldHVybiB0aGlzLnNvdXJjZTt0aHJvdyJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZSJ9LHMucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaD1mdW5jdGlvbih1LGgpe2Zvcih2YXIgZj10aGlzLmdldE90aGVyRW5kKHUpLGQ9aC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCk7Oyl7aWYoZi5nZXRPd25lcigpPT1oKXJldHVybiBmO2lmKGYuZ2V0T3duZXIoKT09ZClicmVhaztmPWYuZ2V0T3duZXIoKS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9bmV3IEFycmF5KDQpO3RoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWkuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSx0aGlzLnNvdXJjZS5nZXRSZWN0KCksdSksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR8fCh0aGlzLmxlbmd0aFg9dVswXS11WzJdLHRoaXMubGVuZ3RoWT11WzFdLXVbM10sTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpKX0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGhYPXRoaXMudGFyZ2V0LmdldENlbnRlclgoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCksdGhpcy5sZW5ndGhZPXRoaXMudGFyZ2V0LmdldENlbnRlclkoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJZKCksTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpfSx0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGkpe3RoaXMudkdyYXBoT2JqZWN0PWl9byhuLCJMR3JhcGhPYmplY3QiKSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDEzKSxzPXIoMCksbD1yKDE2KSx1PXIoNCk7ZnVuY3Rpb24gaChkLHAsbSxnKXttPT1udWxsJiZnPT1udWxsJiYoZz1wKSxuLmNhbGwodGhpcyxnKSxkLmdyYXBoTWFuYWdlciE9bnVsbCYmKGQ9ZC5ncmFwaE1hbmFnZXIpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLmluY2x1c2lvblRyZWVEZXB0aD1pLk1BWF9WQUxVRSx0aGlzLnZHcmFwaE9iamVjdD1nLHRoaXMuZWRnZXM9W10sdGhpcy5ncmFwaE1hbmFnZXI9ZCxtIT1udWxsJiZwIT1udWxsP3RoaXMucmVjdD1uZXcgYShwLngscC55LG0ud2lkdGgsbS5oZWlnaHQpOnRoaXMucmVjdD1uZXcgYX1vKGgsIkxOb2RlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIG4paFtmXT1uW2ZdO2gucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LGgucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGR9LGgucHJvdG90eXBlLmdldE93bmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJ9LGgucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LndpZHRoPWR9LGgucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QuaGVpZ2h0fSxoLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LmhlaWdodD1kfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMil9LGgucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54LHRoaXMucmVjdC55KX0saC5wcm90b3R5cGUuZ2V0UmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3R9LGgucHJvdG90eXBlLmdldERpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCl9LGgucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0K3RoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgpLzJ9LGgucHJvdG90eXBlLnNldFJlY3Q9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLngsdGhpcy5yZWN0Lnk9ZC55LHRoaXMucmVjdC53aWR0aD1wLndpZHRoLHRoaXMucmVjdC5oZWlnaHQ9cC5oZWlnaHR9LGgucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQtdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0Lnk9cC10aGlzLnJlY3QuaGVpZ2h0LzJ9LGgucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS5tb3ZlQnk9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueCs9ZCx0aGlzLnJlY3QueSs9cH0saC5wcm90b3R5cGUuZ2V0RWRnZUxpc3RUb05vZGU9ZnVuY3Rpb24oZCl7dmFyIHA9W10sbSxnPXRoaXM7cmV0dXJuIGcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LnRhcmdldD09ZCl7aWYoeS5zb3VyY2UhPWcpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlISI7cC5wdXNoKHkpfX0pLHB9LGgucHJvdG90eXBlLmdldEVkZ2VzQmV0d2Vlbj1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKCEoeS5zb3VyY2U9PWd8fHkudGFyZ2V0PT1nKSl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCI7KHkudGFyZ2V0PT1kfHx5LnNvdXJjZT09ZCkmJnAucHVzaCh5KX0pLHB9LGgucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3Q9ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHA9dGhpcztyZXR1cm4gcC5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0uc291cmNlPT1wKWQuYWRkKG0udGFyZ2V0KTtlbHNle2lmKG0udGFyZ2V0IT1wKXRocm93IkluY29ycmVjdCBpbmNpZGVuY3khIjtkLmFkZChtLnNvdXJjZSl9fSksZH0saC5wcm90b3R5cGUud2l0aENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGQ9bmV3IFNldCxwLG07aWYoZC5hZGQodGhpcyksdGhpcy5jaGlsZCE9bnVsbClmb3IodmFyIGc9dGhpcy5jaGlsZC5nZXROb2RlcygpLHk9MDt5PGcubGVuZ3RoO3krKylwPWdbeV0sbT1wLndpdGhDaGlsZHJlbigpLG0uZm9yRWFjaChmdW5jdGlvbih2KXtkLmFkZCh2KX0pO3JldHVybiBkfSxoLnByb3RvdHlwZS5nZXROb09mQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD0wLHA7aWYodGhpcy5jaGlsZD09bnVsbClkPTE7ZWxzZSBmb3IodmFyIG09dGhpcy5jaGlsZC5nZXROb2RlcygpLGc9MDtnPG0ubGVuZ3RoO2crKylwPW1bZ10sZCs9cC5nZXROb09mQ2hpbGRyZW4oKTtyZXR1cm4gZD09MCYmKGQ9MSksZH0saC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09aS5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0saC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZD09bnVsbD90aGlzLmVzdGltYXRlZFNpemU9KHRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KS8yOih0aGlzLmVzdGltYXRlZFNpemU9dGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMucmVjdC53aWR0aD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5yZWN0LmhlaWdodD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5lc3RpbWF0ZWRTaXplKX0saC5wcm90b3R5cGUuc2NhdHRlcj1mdW5jdGlvbigpe3ZhciBkLHAsbT0tcy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLGc9cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO2Q9cy5XT1JMRF9DRU5URVJfWCtsLm5leHREb3VibGUoKSooZy1tKSttO3ZhciB5PS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksdj1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7cD1zLldPUkxEX0NFTlRFUl9ZK2wubmV4dERvdWJsZSgpKih2LXkpK3ksdGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmdldENoaWxkKCk9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYodGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkubGVuZ3RoIT0wKXt2YXIgZD10aGlzLmdldENoaWxkKCk7aWYoZC51cGRhdGVCb3VuZHMoITApLHRoaXMucmVjdC54PWQuZ2V0TGVmdCgpLHRoaXMucmVjdC55PWQuZ2V0VG9wKCksdGhpcy5zZXRXaWR0aChkLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCkpLHRoaXMuc2V0SGVpZ2h0KGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkscy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBwPWQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSxtPWQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKTt0aGlzLmxhYmVsV2lkdGg+cCYmKHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLXApLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKSx0aGlzLmxhYmVsSGVpZ2h0Pm0mJih0aGlzLmxhYmVsUG9zPT0iY2VudGVyIj90aGlzLnJlY3QueS09KHRoaXMubGFiZWxIZWlnaHQtbSkvMjp0aGlzLmxhYmVsUG9zPT0idG9wIiYmKHRoaXMucmVjdC55LT10aGlzLmxhYmVsSGVpZ2h0LW0pLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKX19fSxoLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09aS5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxoLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZCl7dmFyIHA9dGhpcy5yZWN0Lng7cD5zLldPUkxEX0JPVU5EQVJZP3A9cy5XT1JMRF9CT1VOREFSWTpwPC1zLldPUkxEX0JPVU5EQVJZJiYocD0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIG09dGhpcy5yZWN0Lnk7bT5zLldPUkxEX0JPVU5EQVJZP209cy5XT1JMRF9CT1VOREFSWTptPC1zLldPUkxEX0JPVU5EQVJZJiYobT0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIGc9bmV3IHUocCxtKSx5PWQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGcpO3RoaXMuc2V0TG9jYXRpb24oeS54LHkueSl9LGgucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnh9LGgucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55fSxoLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXI9PW51bGw/bnVsbDp0aGlzLm93bmVyLmdldFBhcmVudCgpfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSl7aT09bnVsbCYmYT09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOih0aGlzLng9aSx0aGlzLnk9YSl9byhuLCJQb2ludEQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oaSl7dGhpcy55PWl9LG4ucHJvdG90eXBlLmdldERpZmZlcmVuY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueC1pLngsdGhpcy55LWkueSl9LG4ucHJvdG90eXBlLmdldENvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy54Kz1pLndpZHRoLHRoaXMueSs9aS5oZWlnaHQsdGhpc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoMTApLGE9cigwKSxzPXIoNiksbD1yKDMpLHU9cigxKSxoPXIoMTMpLGY9cigxMiksZD1yKDExKTtmdW5jdGlvbiBwKGcseSx2KXtuLmNhbGwodGhpcyx2KSx0aGlzLmVzdGltYXRlZFNpemU9aS5NSU5fVkFMVUUsdGhpcy5tYXJnaW49YS5ERUZBVUxUX0dSQVBIX01BUkdJTix0aGlzLmVkZ2VzPVtdLHRoaXMubm9kZXM9W10sdGhpcy5pc0Nvbm5lY3RlZD0hMSx0aGlzLnBhcmVudD1nLHkhPW51bGwmJnkgaW5zdGFuY2VvZiBzP3RoaXMuZ3JhcGhNYW5hZ2VyPXk6eSE9bnVsbCYmeSBpbnN0YW5jZW9mIExheW91dCYmKHRoaXMuZ3JhcGhNYW5hZ2VyPXkuZ3JhcGhNYW5hZ2VyKX1vKHAsIkxHcmFwaCIpLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbSBpbiBuKXBbbV09blttXTtwLnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxwLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0scC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LHAucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LHAucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0scC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxwLnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxwLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5LHYpe2lmKHk9PW51bGwmJnY9PW51bGwpe3ZhciB4PWc7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciR3JhcGggaGFzIG5vIGdyYXBoIG1nciEiO2lmKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHgpPi0xKXRocm93Ik5vZGUgYWxyZWFkeSBpbiBncmFwaCEiO3JldHVybiB4Lm93bmVyPXRoaXMsdGhpcy5nZXROb2RlcygpLnB1c2goeCkseH1lbHNle3ZhciBiPWc7aWYoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih5KT4tMSYmdGhpcy5nZXROb2RlcygpLmluZGV4T2Yodik+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoISh5Lm93bmVyPT12Lm93bmVyJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghIjtyZXR1cm4geS5vd25lciE9di5vd25lcj9udWxsOihiLnNvdXJjZT15LGIudGFyZ2V0PXYsYi5pc0ludGVyR3JhcGg9ITEsdGhpcy5nZXRFZGdlcygpLnB1c2goYikseS5lZGdlcy5wdXNoKGIpLHYhPXkmJnYuZWRnZXMucHVzaChiKSxiKX19LHAucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihnKXt2YXIgeT1nO2lmKGcgaW5zdGFuY2VvZiBsKXtpZih5PT1udWxsKXRocm93Ik5vZGUgaXMgbnVsbCEiO2lmKCEoeS5vd25lciE9bnVsbCYmeS5vd25lcj09dGhpcykpdGhyb3ciT3duZXIgZ3JhcGggaXMgaW52YWxpZCEiO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93Ik93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCEiO2Zvcih2YXIgdj15LmVkZ2VzLnNsaWNlKCkseCxiPXYubGVuZ3RoLHc9MDt3PGI7dysrKXg9dlt3XSx4LmlzSW50ZXJHcmFwaD90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoeCk6eC5zb3VyY2Uub3duZXIucmVtb3ZlKHgpO3ZhciBfPXRoaXMubm9kZXMuaW5kZXhPZih5KTtpZihfPT0tMSl0aHJvdyJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhIjt0aGlzLm5vZGVzLnNwbGljZShfLDEpfWVsc2UgaWYoZyBpbnN0YW5jZW9mIHUpe3ZhciB4PWc7aWYoeD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighKHguc291cmNlIT1udWxsJiZ4LnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2Uub3duZXIhPW51bGwmJngudGFyZ2V0Lm93bmVyIT1udWxsJiZ4LnNvdXJjZS5vd25lcj09dGhpcyYmeC50YXJnZXQub3duZXI9PXRoaXMpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhIjt2YXIgVD14LnNvdXJjZS5lZGdlcy5pbmRleE9mKHgpLEU9eC50YXJnZXQuZWRnZXMuaW5kZXhPZih4KTtpZighKFQ+LTEmJkU+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt4LnNvdXJjZS5lZGdlcy5zcGxpY2UoVCwxKSx4LnRhcmdldCE9eC5zb3VyY2UmJngudGFyZ2V0LmVkZ2VzLnNwbGljZShFLDEpO3ZhciBfPXguc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZih4KTtpZihfPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhIjt4LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLnNwbGljZShfLDEpfX0scC5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgZz1pLk1BWF9WQUxVRSx5PWkuTUFYX1ZBTFVFLHYseCxiLHc9dGhpcy5nZXROb2RlcygpLF89dy5sZW5ndGgsVD0wO1Q8XztUKyspe3ZhciBFPXdbVF07dj1FLmdldFRvcCgpLHg9RS5nZXRMZWZ0KCksZz52JiYoZz12KSx5PngmJih5PXgpfXJldHVybiBnPT1pLk1BWF9WQUxVRT9udWxsOih3WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP2I9d1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpiPXRoaXMubWFyZ2luLHRoaXMubGVmdD15LWIsdGhpcy50b3A9Zy1iLG5ldyBmKHRoaXMubGVmdCx0aGlzLnRvcCkpfSxwLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsdyxfLFQsRSxMLEM9dGhpcy5ub2RlcyxBPUMubGVuZ3RoLEk9MDtJPEE7SSsrKXt2YXIgRD1DW0ldO2cmJkQuY2hpbGQhPW51bGwmJkQudXBkYXRlQm91bmRzKCksdz1ELmdldExlZnQoKSxfPUQuZ2V0UmlnaHQoKSxUPUQuZ2V0VG9wKCksRT1ELmdldEJvdHRvbSgpLHk+dyYmKHk9dyksdjxfJiYodj1fKSx4PlQmJih4PVQpLGI8RSYmKGI9RSl9dmFyIGs9bmV3IGgoeSx4LHYteSxiLXgpO3k9PWkuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLENbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/TD1DWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0Okw9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PWsueC1MLHRoaXMucmlnaHQ9ay54K2sud2lkdGgrTCx0aGlzLnRvcD1rLnktTCx0aGlzLmJvdHRvbT1rLnkray5oZWlnaHQrTH0scC5jYWxjdWxhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsdyxfLFQsRSxMPWcubGVuZ3RoLEM9MDtDPEw7QysrKXt2YXIgQT1nW0NdO3c9QS5nZXRMZWZ0KCksXz1BLmdldFJpZ2h0KCksVD1BLmdldFRvcCgpLEU9QS5nZXRCb3R0b20oKSx5PncmJih5PXcpLHY8XyYmKHY9XykseD5UJiYoeD1UKSxiPEUmJihiPUUpfXZhciBJPW5ldyBoKHkseCx2LXksYi14KTtyZXR1cm4gSX0scC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSxwLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxwLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZz0wLHk9dGhpcy5ub2Rlcyx2PXkubGVuZ3RoLHg9MDt4PHY7eCsrKXt2YXIgYj15W3hdO2crPWIuY2FsY0VzdGltYXRlZFNpemUoKX1yZXR1cm4gZz09MD90aGlzLmVzdGltYXRlZFNpemU9YS5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU6dGhpcy5lc3RpbWF0ZWRTaXplPWcvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYodGhpcy5ub2Rlcy5sZW5ndGg9PTApe3RoaXMuaXNDb25uZWN0ZWQ9ITA7cmV0dXJufXZhciB5PW5ldyBkLHY9bmV3IFNldCx4PXRoaXMubm9kZXNbMF0sYix3LF89eC53aXRoQ2hpbGRyZW4oKTtmb3IoXy5mb3JFYWNoKGZ1bmN0aW9uKEkpe3kucHVzaChJKSx2LmFkZChJKX0pO3kubGVuZ3RoIT09MDspe3g9eS5zaGlmdCgpLGI9eC5nZXRFZGdlcygpO2Zvcih2YXIgVD1iLmxlbmd0aCxFPTA7RTxUO0UrKyl7dmFyIEw9YltFXTtpZih3PUwuZ2V0T3RoZXJFbmRJbkdyYXBoKHgsdGhpcyksdyE9bnVsbCYmIXYuaGFzKHcpKXt2YXIgQz13LndpdGhDaGlsZHJlbigpO0MuZm9yRWFjaChmdW5jdGlvbihJKXt5LnB1c2goSSksdi5hZGQoSSl9KX19fWlmKHRoaXMuaXNDb25uZWN0ZWQ9ITEsdi5zaXplPj10aGlzLm5vZGVzLmxlbmd0aCl7dmFyIEE9MDt2LmZvckVhY2goZnVuY3Rpb24oSSl7SS5vd25lcj09ZyYmQSsrfSksQT09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9cigxKTtmdW5jdGlvbiBhKHMpe249cig1KSx0aGlzLmxheW91dD1zLHRoaXMuZ3JhcGhzPVtdLHRoaXMuZWRnZXM9W119byhhLCJMR3JhcGhNYW5hZ2VyIiksYS5wcm90b3R5cGUuYWRkUm9vdD1mdW5jdGlvbigpe3ZhciBzPXRoaXMubGF5b3V0Lm5ld0dyYXBoKCksbD10aGlzLmxheW91dC5uZXdOb2RlKG51bGwpLHU9dGhpcy5hZGQocyxsKTtyZXR1cm4gdGhpcy5zZXRSb290R3JhcGgodSksdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLGwsdSxoLGYpe2lmKHU9PW51bGwmJmg9PW51bGwmJmY9PW51bGwpe2lmKHM9PW51bGwpdGhyb3ciR3JhcGggaXMgbnVsbCEiO2lmKGw9PW51bGwpdGhyb3ciUGFyZW50IG5vZGUgaXMgbnVsbCEiO2lmKHRoaXMuZ3JhcGhzLmluZGV4T2Yocyk+LTEpdGhyb3ciR3JhcGggYWxyZWFkeSBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKHRoaXMuZ3JhcGhzLnB1c2gocykscy5wYXJlbnQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBwYXJlbnQhIjtpZihsLmNoaWxkIT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgY2hpbGQhIjtyZXR1cm4gcy5wYXJlbnQ9bCxsLmNoaWxkPXMsc31lbHNle2Y9dSxoPWwsdT1zO3ZhciBkPWguZ2V0T3duZXIoKSxwPWYuZ2V0T3duZXIoKTtpZighKGQhPW51bGwmJmQuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlNvdXJjZSBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZighKHAhPW51bGwmJnAuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlRhcmdldCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZihkPT1wKXJldHVybiB1LmlzSW50ZXJHcmFwaD0hMSxkLmFkZCh1LGgsZik7aWYodS5pc0ludGVyR3JhcGg9ITAsdS5zb3VyY2U9aCx1LnRhcmdldD1mLHRoaXMuZWRnZXMuaW5kZXhPZih1KT4tMSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gaW50ZXItZ3JhcGggZWRnZSBsaXN0ISI7aWYodGhpcy5lZGdlcy5wdXNoKHUpLCEodS5zb3VyY2UhPW51bGwmJnUudGFyZ2V0IT1udWxsKSl0aHJvdyJFZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKHUuc291cmNlLmVkZ2VzLmluZGV4T2YodSk9PS0xJiZ1LnRhcmdldC5lZGdlcy5pbmRleE9mKHUpPT0tMSkpdGhyb3ciRWRnZSBhbHJlYWR5IGluIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGluY2lkZW5jeSBsaXN0ISI7cmV0dXJuIHUuc291cmNlLmVkZ2VzLnB1c2godSksdS50YXJnZXQuZWRnZXMucHVzaCh1KSx1fX0sYS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHMpe2lmKHMgaW5zdGFuY2VvZiBuKXt2YXIgbD1zO2lmKGwuZ2V0R3JhcGhNYW5hZ2VyKCkhPXRoaXMpdGhyb3ciR3JhcGggbm90IGluIHRoaXMgZ3JhcGggbWdyIjtpZighKGw9PXRoaXMucm9vdEdyYXBofHxsLnBhcmVudCE9bnVsbCYmbC5wYXJlbnQuZ3JhcGhNYW5hZ2VyPT10aGlzKSl0aHJvdyJJbnZhbGlkIHBhcmVudCBub2RlISI7dmFyIHU9W107dT11LmNvbmNhdChsLmdldEVkZ2VzKCkpO2Zvcih2YXIgaCxmPXUubGVuZ3RoLGQ9MDtkPGY7ZCsrKWg9dVtkXSxsLnJlbW92ZShoKTt2YXIgcD1bXTtwPXAuY29uY2F0KGwuZ2V0Tm9kZXMoKSk7dmFyIG07Zj1wLmxlbmd0aDtmb3IodmFyIGQ9MDtkPGY7ZCsrKW09cFtkXSxsLnJlbW92ZShtKTtsPT10aGlzLnJvb3RHcmFwaCYmdGhpcy5zZXRSb290R3JhcGgobnVsbCk7dmFyIGc9dGhpcy5ncmFwaHMuaW5kZXhPZihsKTt0aGlzLmdyYXBocy5zcGxpY2UoZywxKSxsLnBhcmVudD1udWxsfWVsc2UgaWYocyBpbnN0YW5jZW9mIGkpe2lmKGg9cyxoPT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCFoLmlzSW50ZXJHcmFwaCl0aHJvdyJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSEiO2lmKCEoaC5zb3VyY2UhPW51bGwmJmgudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShoLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpIT0tMSYmaC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSE9LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt2YXIgZz1oLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpO2lmKGguc291cmNlLmVkZ2VzLnNwbGljZShnLDEpLGc9aC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSxoLnRhcmdldC5lZGdlcy5zcGxpY2UoZywxKSwhKGguc291cmNlLm93bmVyIT1udWxsJiZoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKSE9bnVsbCkpdGhyb3ciRWRnZSBvd25lciBncmFwaCBvciBvd25lciBncmFwaCBtYW5hZ2VyIGlzIG51bGwhIjtpZihoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGgpPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIgZ3JhcGggbWFuYWdlcidzIGVkZ2UgbGlzdCEiO3ZhciBnPWguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk7aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGcsMSl9fSxhLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHMoITApfSxhLnByb3RvdHlwZS5nZXRHcmFwaHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaHN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxOb2Rlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPHU7aCsrKXM9cy5jb25jYXQobFtoXS5nZXROb2RlcygpKTt0aGlzLmFsbE5vZGVzPXN9cmV0dXJuIHRoaXMuYWxsTm9kZXN9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbEVkZ2VzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPW51bGx9LGEucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxFZGdlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPGwubGVuZ3RoO2grKylzPXMuY29uY2F0KGxbaF0uZ2V0RWRnZXMoKSk7cz1zLmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPXN9cmV0dXJuIHRoaXMuYWxsRWRnZXN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LGEucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKHMpe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1zfSxhLnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSxhLnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24ocyl7aWYocy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPXMscy5wYXJlbnQ9PW51bGwmJihzLnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LGEucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0sYS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24ocyxsKXtpZighKHMhPW51bGwmJmwhPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHM9PWwpcmV0dXJuITA7dmFyIHU9cy5nZXRPd25lcigpLGg7ZG97aWYoaD11LmdldFBhcmVudCgpLGg9PW51bGwpYnJlYWs7aWYoaD09bClyZXR1cm4hMDtpZih1PWguZ2V0T3duZXIoKSx1PT1udWxsKWJyZWFrfXdoaWxlKCEwKTt1PWwuZ2V0T3duZXIoKTtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1zKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBzLGwsdSxoLGYsZD10aGlzLmdldEFsbEVkZ2VzKCkscD1kLmxlbmd0aCxtPTA7bTxwO20rKyl7aWYocz1kW21dLGw9cy5zb3VyY2UsdT1zLnRhcmdldCxzLmxjYT1udWxsLHMuc291cmNlSW5MY2E9bCxzLnRhcmdldEluTGNhPXUsbD09dSl7cy5sY2E9bC5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihoPWwuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2ZvcihzLnRhcmdldEluTGNhPXUsZj11LmdldE93bmVyKCk7cy5sY2E9PW51bGw7KXtpZihmPT1oKXtzLmxjYT1mO2JyZWFrfWlmKGY9PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKHMubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO3MudGFyZ2V0SW5MY2E9Zi5nZXRQYXJlbnQoKSxmPXMudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihoPT10aGlzLnJvb3RHcmFwaClicmVhaztzLmxjYT09bnVsbCYmKHMuc291cmNlSW5MY2E9aC5nZXRQYXJlbnQoKSxoPXMuc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYocy5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24ocyxsKXtpZihzPT1sKXJldHVybiBzLmdldE93bmVyKCk7dmFyIHU9cy5nZXRPd25lcigpO2Rve2lmKHU9PW51bGwpYnJlYWs7dmFyIGg9bC5nZXRPd25lcigpO2Rve2lmKGg9PW51bGwpYnJlYWs7aWYoaD09dSlyZXR1cm4gaDtoPWguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7dT11LmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiB1fSxhLnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihzLGwpe3M9PW51bGwmJmw9PW51bGwmJihzPXRoaXMucm9vdEdyYXBoLGw9MSk7Zm9yKHZhciB1LGg9cy5nZXROb2RlcygpLGY9aC5sZW5ndGgsZD0wO2Q8ZjtkKyspdT1oW2RdLHUuaW5jbHVzaW9uVHJlZURlcHRoPWwsdS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyh1LmNoaWxkLGwrMSl9LGEucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbD10aGlzLmVkZ2VzLmxlbmd0aCx1PTA7dTxsO3UrKylpZihzPXRoaXMuZWRnZXNbdV0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihzLnNvdXJjZSxzLnRhcmdldCkpcmV0dXJuITA7cmV0dXJuITF9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMCk7ZnVuY3Rpb24gaSgpe31vKGksIkZETGF5b3V0Q29uc3RhbnRzIik7Zm9yKHZhciBhIGluIG4paVthXT1uW2FdO2kuTUFYX0lURVJBVElPTlM9MjUwMCxpLkRFRkFVTFRfRURHRV9MRU5HVEg9NTAsaS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD0uNDUsaS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD00NTAwLGkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPS40LGkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPTEsaS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTMuOCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9MS41LGkuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT049ITAsaS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT049ITAsaS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPS4zLGkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUj0uMzMsaS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ9MWUzLGkuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUPTVlMyxpLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTD0xMDAsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ9aS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwqMyxpLk1JTl9SRVBVTFNJT05fRElTVD1pLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAsaS5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9MTAwLGkuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj0uMSxpLk1JTl9FREdFX0xFTkdUSD0xLGkuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9MTAsdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMik7ZnVuY3Rpb24gaSgpe31vKGksIklHZW9tZXRyeSIpLGkuY2FsY1NlcGFyYXRpb25BbW91bnQ9ZnVuY3Rpb24oYSxzLGwsdSl7aWYoIWEuaW50ZXJzZWN0cyhzKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjt2YXIgaD1uZXcgQXJyYXkoMik7dGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhhLHMsaCksbFswXT1NYXRoLm1pbihhLmdldFJpZ2h0KCkscy5nZXRSaWdodCgpKS1NYXRoLm1heChhLngscy54KSxsWzFdPU1hdGgubWluKGEuZ2V0Qm90dG9tKCkscy5nZXRCb3R0b20oKSktTWF0aC5tYXgoYS55LHMueSksYS5nZXRYKCk8PXMuZ2V0WCgpJiZhLmdldFJpZ2h0KCk+PXMuZ2V0UmlnaHQoKT9sWzBdKz1NYXRoLm1pbihzLmdldFgoKS1hLmdldFgoKSxhLmdldFJpZ2h0KCktcy5nZXRSaWdodCgpKTpzLmdldFgoKTw9YS5nZXRYKCkmJnMuZ2V0UmlnaHQoKT49YS5nZXRSaWdodCgpJiYobFswXSs9TWF0aC5taW4oYS5nZXRYKCktcy5nZXRYKCkscy5nZXRSaWdodCgpLWEuZ2V0UmlnaHQoKSkpLGEuZ2V0WSgpPD1zLmdldFkoKSYmYS5nZXRCb3R0b20oKT49cy5nZXRCb3R0b20oKT9sWzFdKz1NYXRoLm1pbihzLmdldFkoKS1hLmdldFkoKSxhLmdldEJvdHRvbSgpLXMuZ2V0Qm90dG9tKCkpOnMuZ2V0WSgpPD1hLmdldFkoKSYmcy5nZXRCb3R0b20oKT49YS5nZXRCb3R0b20oKSYmKGxbMV0rPU1hdGgubWluKGEuZ2V0WSgpLXMuZ2V0WSgpLHMuZ2V0Qm90dG9tKCktYS5nZXRCb3R0b20oKSkpO3ZhciBmPU1hdGguYWJzKChzLmdldENlbnRlclkoKS1hLmdldENlbnRlclkoKSkvKHMuZ2V0Q2VudGVyWCgpLWEuZ2V0Q2VudGVyWCgpKSk7cy5nZXRDZW50ZXJZKCk9PT1hLmdldENlbnRlclkoKSYmcy5nZXRDZW50ZXJYKCk9PT1hLmdldENlbnRlclgoKSYmKGY9MSk7dmFyIGQ9ZipsWzBdLHA9bFsxXS9mO2xbMF08cD9wPWxbMF06ZD1sWzFdLGxbMF09LTEqaFswXSoocC8yK3UpLGxbMV09LTEqaFsxXSooZC8yK3UpfSxpLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzPWZ1bmN0aW9uKGEscyxsKXthLmdldENlbnRlclgoKTxzLmdldENlbnRlclgoKT9sWzBdPS0xOmxbMF09MSxhLmdldENlbnRlclkoKTxzLmdldENlbnRlclkoKT9sWzFdPS0xOmxbMV09MX0saS5nZXRJbnRlcnNlY3Rpb24yPWZ1bmN0aW9uKGEscyxsKXt2YXIgdT1hLmdldENlbnRlclgoKSxoPWEuZ2V0Q2VudGVyWSgpLGY9cy5nZXRDZW50ZXJYKCksZD1zLmdldENlbnRlclkoKTtpZihhLmludGVyc2VjdHMocykpcmV0dXJuIGxbMF09dSxsWzFdPWgsbFsyXT1mLGxbM109ZCwhMDt2YXIgcD1hLmdldFgoKSxtPWEuZ2V0WSgpLGc9YS5nZXRSaWdodCgpLHk9YS5nZXRYKCksdj1hLmdldEJvdHRvbSgpLHg9YS5nZXRSaWdodCgpLGI9YS5nZXRXaWR0aEhhbGYoKSx3PWEuZ2V0SGVpZ2h0SGFsZigpLF89cy5nZXRYKCksVD1zLmdldFkoKSxFPXMuZ2V0UmlnaHQoKSxMPXMuZ2V0WCgpLEM9cy5nZXRCb3R0b20oKSxBPXMuZ2V0UmlnaHQoKSxJPXMuZ2V0V2lkdGhIYWxmKCksRD1zLmdldEhlaWdodEhhbGYoKSxrPSExLFI9ITE7aWYodT09PWYpe2lmKGg+ZClyZXR1cm4gbFswXT11LGxbMV09bSxsWzJdPWYsbFszXT1DLCExO2lmKGg8ZClyZXR1cm4gbFswXT11LGxbMV09dixsWzJdPWYsbFszXT1ULCExfWVsc2UgaWYoaD09PWQpe2lmKHU+ZilyZXR1cm4gbFswXT1wLGxbMV09aCxsWzJdPUUsbFszXT1kLCExO2lmKHU8ZilyZXR1cm4gbFswXT1nLGxbMV09aCxsWzJdPV8sbFszXT1kLCExfWVsc2V7dmFyIFM9YS5oZWlnaHQvYS53aWR0aCxPPXMuaGVpZ2h0L3Mud2lkdGgsTj0oZC1oKS8oZi11KSxQPXZvaWQgMCxGPXZvaWQgMCxCPXZvaWQgMCwkPXZvaWQgMCx6PXZvaWQgMCxXPXZvaWQgMDtpZigtUz09PU4/dT5mPyhsWzBdPXksbFsxXT12LGs9ITApOihsWzBdPWcsbFsxXT1tLGs9ITApOlM9PT1OJiYodT5mPyhsWzBdPXAsbFsxXT1tLGs9ITApOihsWzBdPXgsbFsxXT12LGs9ITApKSwtTz09PU4/Zj51PyhsWzJdPUwsbFszXT1DLFI9ITApOihsWzJdPUUsbFszXT1ULFI9ITApOk89PT1OJiYoZj51PyhsWzJdPV8sbFszXT1ULFI9ITApOihsWzJdPUEsbFszXT1DLFI9ITApKSxrJiZSKXJldHVybiExO2lmKHU+Zj9oPmQ/KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihTLE4sNCksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTiwyKSk6KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtUyxOLDMpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtTyxOLDEpKTpoPmQ/KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtUyxOLDEpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtTyxOLDMpKTooUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKFMsTiwyKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oTyxOLDQpKSwhaylzd2l0Y2goUCl7Y2FzZSAxOiQ9bSxCPXUrLXcvTixsWzBdPUIsbFsxXT0kO2JyZWFrO2Nhc2UgMjpCPXgsJD1oK2IqTixsWzBdPUIsbFsxXT0kO2JyZWFrO2Nhc2UgMzokPXYsQj11K3cvTixsWzBdPUIsbFsxXT0kO2JyZWFrO2Nhc2UgNDpCPXksJD1oKy1iKk4sbFswXT1CLGxbMV09JDticmVha31pZighUilzd2l0Y2goRil7Y2FzZSAxOlc9VCx6PWYrLUQvTixsWzJdPXosbFszXT1XO2JyZWFrO2Nhc2UgMjp6PUEsVz1kK0kqTixsWzJdPXosbFszXT1XO2JyZWFrO2Nhc2UgMzpXPUMsej1mK0QvTixsWzJdPXosbFszXT1XO2JyZWFrO2Nhc2UgNDp6PUwsVz1kKy1JKk4sbFsyXT16LGxbM109VzticmVha319cmV0dXJuITF9LGkuZ2V0Q2FyZGluYWxEaXJlY3Rpb249ZnVuY3Rpb24oYSxzLGwpe3JldHVybiBhPnM/bDoxK2wlNH0saS5nZXRJbnRlcnNlY3Rpb249ZnVuY3Rpb24oYSxzLGwsdSl7aWYodT09bnVsbClyZXR1cm4gdGhpcy5nZXRJbnRlcnNlY3Rpb24yKGEscyxsKTt2YXIgaD1hLngsZj1hLnksZD1zLngscD1zLnksbT1sLngsZz1sLnkseT11Lngsdj11LnkseD12b2lkIDAsYj12b2lkIDAsdz12b2lkIDAsXz12b2lkIDAsVD12b2lkIDAsRT12b2lkIDAsTD12b2lkIDAsQz12b2lkIDAsQT12b2lkIDA7cmV0dXJuIHc9cC1mLFQ9aC1kLEw9ZCpmLWgqcCxfPXYtZyxFPW0teSxDPXkqZy1tKnYsQT13KkUtXypULEE9PT0wP251bGw6KHg9KFQqQy1FKkwpL0EsYj0oXypMLXcqQykvQSxuZXcgbih4LGIpKX0saS5hbmdsZU9mVmVjdG9yPWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPXZvaWQgMDtyZXR1cm4gYSE9PWw/KGg9TWF0aC5hdGFuKCh1LXMpLyhsLWEpKSxsPGE/aCs9TWF0aC5QSTp1PHMmJihoKz10aGlzLlRXT19QSSkpOnU8cz9oPXRoaXMuT05FX0FORF9IQUxGX1BJOmg9dGhpcy5IQUxGX1BJLGh9LGkuZG9JbnRlcnNlY3Q9ZnVuY3Rpb24oYSxzLGwsdSl7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9KGQtaCkqKHYtZyktKHktbSkqKHAtZik7aWYoeD09PTApcmV0dXJuITE7dmFyIGI9KCh2LWcpKih5LWgpKyhtLXkpKih2LWYpKS94LHc9KChmLXApKih5LWgpKyhkLWgpKih2LWYpKS94O3JldHVybiAwPGImJmI8MSYmMDx3JiZ3PDF9LGkuSEFMRl9QST0uNSpNYXRoLlBJLGkuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGkuVFdPX1BJPTIqTWF0aC5QSSxpLlRIUkVFX1BJPTMqTWF0aC5QSSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSU1hdGgiKSxuLnNpZ249ZnVuY3Rpb24oaSl7cmV0dXJuIGk+MD8xOmk8MD8tMTowfSxuLmZsb29yPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5jZWlsKGkpOk1hdGguZmxvb3IoaSl9LG4uY2VpbD1mdW5jdGlvbihpKXtyZXR1cm4gaTwwP01hdGguZmxvb3IoaSk6TWF0aC5jZWlsKGkpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSW50ZWdlciIpLG4uTUFYX1ZBTFVFPTIxNDc0ODM2NDcsbi5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGYsZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF07bS5lbnVtZXJhYmxlPW0uZW51bWVyYWJsZXx8ITEsbS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG0mJihtLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixtLmtleSxtKX19cmV0dXJuIG8oaCwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gZCYmaChmLnByb3RvdHlwZSxkKSxwJiZoKGYscCksZn19KCk7ZnVuY3Rpb24gaShoLGYpe2lmKCEoaCBpbnN0YW5jZW9mIGYpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9byhmdW5jdGlvbihmKXtyZXR1cm57dmFsdWU6ZixuZXh0Om51bGwscHJldjpudWxsfX0sIm5vZGVGcm9tIikscz1vKGZ1bmN0aW9uKGYsZCxwLG0pe3JldHVybiBmIT09bnVsbD9mLm5leHQ9ZDptLmhlYWQ9ZCxwIT09bnVsbD9wLnByZXY9ZDptLnRhaWw9ZCxkLnByZXY9ZixkLm5leHQ9cCxtLmxlbmd0aCsrLGR9LCJhZGQiKSxsPW8oZnVuY3Rpb24oZixkKXt2YXIgcD1mLnByZXYsbT1mLm5leHQ7cmV0dXJuIHAhPT1udWxsP3AubmV4dD1tOmQuaGVhZD1tLG0hPT1udWxsP20ucHJldj1wOmQudGFpbD1wLGYucHJldj1mLm5leHQ9bnVsbCxkLmxlbmd0aC0tLGZ9LCJfcmVtb3ZlIiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZil7dmFyIGQ9dGhpcztpKHRoaXMsaCksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxmPy5mb3JFYWNoKGZ1bmN0aW9uKHApe3JldHVybiBkLnB1c2gocCl9KX1yZXR1cm4gbyhoLCJMaW5rZWRMaXN0IiksbihoLFt7a2V5OiJzaXplIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSwic2l6ZSIpfSx7a2V5OiJpbnNlcnRCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsYShkKSxwLHRoaXMpfSwiaW5zZXJ0QmVmb3JlIil9LHtrZXk6Imluc2VydEFmdGVyIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocCxhKGQpLHAubmV4dCx0aGlzKX0sImluc2VydEFmdGVyIil9LHtrZXk6Imluc2VydE5vZGVCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsZCxwLHRoaXMpfSwiaW5zZXJ0Tm9kZUJlZm9yZSIpfSx7a2V5OiJpbnNlcnROb2RlQWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGQscC5uZXh0LHRoaXMpfSwiaW5zZXJ0Tm9kZUFmdGVyIil9LHtrZXk6InB1c2giLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIHModGhpcy50YWlsLGEoZCksbnVsbCx0aGlzKX0sInB1c2giKX0se2tleToidW5zaGlmdCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyhudWxsLGEoZCksdGhpcy5oZWFkLHRoaXMpfSwidW5zaGlmdCIpfSx7a2V5OiJyZW1vdmUiLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIGwoZCx0aGlzKX0sInJlbW92ZSIpfSx7a2V5OiJwb3AiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLnRhaWwsdGhpcykudmFsdWV9LCJwb3AiKX0se2tleToicG9wTm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKX0sInBvcE5vZGUiKX0se2tleToic2hpZnQiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcykudmFsdWV9LCJzaGlmdCIpfSx7a2V5OiJzaGlmdE5vZGUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcyl9LCJzaGlmdE5vZGUiKX0se2tleToiZ2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIHA9MSxtPXRoaXMuaGVhZDtwPGQ7KW09bS5uZXh0LHArKztyZXR1cm4gbS52YWx1ZX19LCJnZXRfb2JqZWN0X2F0Iil9LHtrZXk6InNldF9vYmplY3RfYXQiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIG09MSxnPXRoaXMuaGVhZDttPGQ7KWc9Zy5uZXh0LG0rKztnLnZhbHVlPXB9fSwic2V0X29iamVjdF9hdCIpfV0pLGh9KCk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsaT09bnVsbCYmYT09bnVsbCYmcz09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsPyh0aGlzLng9aSx0aGlzLnk9YSk6aS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZhPT1udWxsJiZzPT1udWxsJiYocz1pLHRoaXMueD1zLngsdGhpcy55PXMueSl9byhuLCJQb2ludCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGksYSxzKXtpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGw/KHM9aSx0aGlzLnNldExvY2F0aW9uKHMueCxzLnkpKTp0eXBlb2YgaT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmcz09bnVsbCYmKHBhcnNlSW50KGkpPT1pJiZwYXJzZUludChhKT09YT90aGlzLm1vdmUoaSxhKToodGhpcy54PU1hdGguZmxvb3IoaSsuNSksdGhpcy55PU1hdGguZmxvb3IoYSsuNSkpKX0sbi5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihpLGEpe3RoaXMueD1pLHRoaXMueT1hfSxuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oaSxhKXt0aGlzLngrPWksdGhpcy55Kz1hfSxuLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oaSl7aWYoaS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiKXt2YXIgYT1pO3JldHVybiB0aGlzLng9PWEueCYmdGhpcy55PT1hLnl9cmV0dXJuIHRoaXM9PWl9LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKCkuY29uc3RydWN0b3IubmFtZSsiW3g9Iit0aGlzLngrIix5PSIrdGhpcy55KyJdIn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyxsKXt0aGlzLng9MCx0aGlzLnk9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT1udWxsJiZhIT1udWxsJiZzIT1udWxsJiZsIT1udWxsJiYodGhpcy54PWksdGhpcy55PWEsdGhpcy53aWR0aD1zLHRoaXMuaGVpZ2h0PWwpfW8obiwiUmVjdGFuZ2xlRCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGkpe3RoaXMueD1pfSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSxuLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihpKXtyZXR1cm4hKHRoaXMuZ2V0UmlnaHQoKTxpLnh8fHRoaXMuZ2V0Qm90dG9tKCk8aS55fHxpLmdldFJpZ2h0KCk8dGhpcy54fHxpLmdldEJvdHRvbSgpPHRoaXMueSl9LG4ucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGgvMn0sbi5wcm90b3R5cGUuZ2V0TWluWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKX0sbi5wcm90b3R5cGUuZ2V0TWF4WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKSt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodC8yfSxuLnByb3RvdHlwZS5nZXRNaW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpfSxuLnByb3RvdHlwZS5nZXRNYXhZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpK3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5nZXRXaWR0aEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRIZWlnaHRIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0LzJ9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYX06ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmEuY29uc3RydWN0b3I9PT1TeW1ib2wmJmEhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhfTtmdW5jdGlvbiBpKCl7fW8oaSwiVW5pcXVlSURHZW5lcmV0b3IiKSxpLmxhc3RJRD0wLGkuY3JlYXRlSUQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNQcmltaXRpdmUoYSk/YTooYS51bmlxdWVJRCE9bnVsbHx8KGEudW5pcXVlSUQ9aS5nZXRTdHJpbmcoKSxpLmxhc3RJRCsrKSxhLnVuaXF1ZUlEKX0saS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGwmJihhPWkubGFzdElEKSwiT2JqZWN0IyIrYX0saS5pc1ByaW1pdGl2ZT1mdW5jdGlvbihhKXt2YXIgcz10eXBlb2YgYT4idSI/InVuZGVmaW5lZCI6bihhKTtyZXR1cm4gYT09bnVsbHx8cyE9Im9iamVjdCImJnMhPSJmdW5jdGlvbiJ9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4obSl7aWYoQXJyYXkuaXNBcnJheShtKSl7Zm9yKHZhciBnPTAseT1BcnJheShtLmxlbmd0aCk7ZzxtLmxlbmd0aDtnKyspeVtnXT1tW2ddO3JldHVybiB5fWVsc2UgcmV0dXJuIEFycmF5LmZyb20obSl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDApLGE9cig2KSxzPXIoMyksbD1yKDEpLHU9cig1KSxoPXIoNCksZj1yKDE3KSxkPXIoMjcpO2Z1bmN0aW9uIHAobSl7ZC5jYWxsKHRoaXMpLHRoaXMubGF5b3V0UXVhbGl0eT1pLlFVQUxJVFksdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWkuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWkuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9aS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcz1uZXcgTWFwLHRoaXMuZ3JhcGhNYW5hZ2VyPW5ldyBhKHRoaXMpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLmlzU3ViTGF5b3V0PSExLHRoaXMuaXNSZW1vdGVVc2U9ITEsbSE9bnVsbCYmKHRoaXMuaXNSZW1vdGVVc2U9bSl9byhwLCJMYXlvdXQiKSxwLlJBTkRPTV9TRUVEPTEscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSkscC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpfSxwLnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgbT1uZXcgYSh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9bSxtfSxwLnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHUobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHModGhpcy5ncmFwaE1hbmFnZXIsbSl9LHAucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBsKG51bGwsbnVsbCxtKX0scC5wcm90b3R5cGUuY2hlY2tMYXlvdXRTdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT09bnVsbHx8dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkubGVuZ3RoPT0wfHx0aGlzLmdyYXBoTWFuYWdlci5pbmNsdWRlc0ludmFsaWRFZGdlKCl9LHAucHJvdG90eXBlLnJ1bkxheW91dD1mdW5jdGlvbigpe3RoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLnRpbGluZ1ByZUxheW91dCYmdGhpcy50aWxpbmdQcmVMYXlvdXQoKSx0aGlzLmluaXRQYXJhbWV0ZXJzKCk7dmFyIG07cmV0dXJuIHRoaXMuY2hlY2tMYXlvdXRTdWNjZXNzKCk/bT0hMTptPXRoaXMubGF5b3V0KCksaS5BTklNQVRFPT09ImR1cmluZyI/ITE6KG0mJih0aGlzLmlzU3ViTGF5b3V0fHx0aGlzLmRvUG9zdExheW91dCgpKSx0aGlzLnRpbGluZ1Bvc3RMYXlvdXQmJnRoaXMudGlsaW5nUG9zdExheW91dCgpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMCxtKX0scC5wcm90b3R5cGUuZG9Qb3N0TGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pbmNyZW1lbnRhbHx8dGhpcy50cmFuc2Zvcm0oKSx0aGlzLnVwZGF0ZSgpfSxwLnByb3RvdHlwZS51cGRhdGUyPWZ1bmN0aW9uKCl7aWYodGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCkpLCF0aGlzLmlzUmVtb3RlVXNlKXtmb3IodmFyIG0sZz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLHk9MDt5PGcubGVuZ3RoO3krKyltPWdbeV07Zm9yKHZhciB2LHg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkseT0wO3k8eC5sZW5ndGg7eSsrKXY9eFt5XTt0aGlzLnVwZGF0ZSh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpfX0scC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy51cGRhdGUyKCk7ZWxzZSBpZihtIGluc3RhbmNlb2Ygcyl7dmFyIGc9bTtpZihnLmdldENoaWxkKCkhPW51bGwpZm9yKHZhciB5PWcuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHY9MDt2PHkubGVuZ3RoO3YrKyl1cGRhdGUoeVt2XSk7aWYoZy52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB4PWcudkdyYXBoT2JqZWN0O3gudXBkYXRlKGcpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiBsKXt2YXIgYj1tO2lmKGIudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgdz1iLnZHcmFwaE9iamVjdDt3LnVwZGF0ZShiKX19ZWxzZSBpZihtIGluc3RhbmNlb2YgdSl7dmFyIF89bTtpZihfLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIFQ9Xy52R3JhcGhPYmplY3Q7VC51cGRhdGUoXyl9fX0scC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt0aGlzLmlzU3ViTGF5b3V0fHwodGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmluY3JlbWVudGFsPWkuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMpLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYodGhpcy5hbmltYXRpb25PbkxheW91dD0hMSl9LHAucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMudHJhbnNmb3JtKG5ldyBoKDAsMCkpO2Vsc2V7dmFyIGc9bmV3IGYseT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO2lmKHkhPW51bGwpe2cuc2V0V29ybGRPcmdYKG0ueCksZy5zZXRXb3JsZE9yZ1kobS55KSxnLnNldERldmljZU9yZ1goeS54KSxnLnNldERldmljZU9yZ1koeS55KTtmb3IodmFyIHY9dGhpcy5nZXRBbGxOb2RlcygpLHgsYj0wO2I8di5sZW5ndGg7YisrKXg9dltiXSx4LnRyYW5zZm9ybShnKX19fSxwLnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHk9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSksdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKCEwKTtlbHNlIGZvcih2YXIgZyx5LHY9bS5nZXROb2RlcygpLHg9MDt4PHYubGVuZ3RoO3grKylnPXZbeF0seT1nLmdldENoaWxkKCkseT09bnVsbHx8eS5nZXROb2RlcygpLmxlbmd0aD09MD9nLnNjYXR0ZXIoKToodGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoeSksZy51cGRhdGVCb3VuZHMoKSl9LHAucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIG09W10sZz0hMCx5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLHY9ITAseD0wO3g8eS5sZW5ndGg7eCsrKXlbeF0uZ2V0Q2hpbGQoKSE9bnVsbCYmKHY9ITEpO2lmKCF2KXJldHVybiBtO3ZhciBiPW5ldyBTZXQsdz1bXSxfPW5ldyBNYXAsVD1bXTtmb3IoVD1ULmNvbmNhdCh5KTtULmxlbmd0aD4wJiZnOyl7Zm9yKHcucHVzaChUWzBdKTt3Lmxlbmd0aD4wJiZnOyl7dmFyIEU9d1swXTt3LnNwbGljZSgwLDEpLGIuYWRkKEUpO2Zvcih2YXIgTD1FLmdldEVkZ2VzKCkseD0wO3g8TC5sZW5ndGg7eCsrKXt2YXIgQz1MW3hdLmdldE90aGVyRW5kKEUpO2lmKF8uZ2V0KEUpIT1DKWlmKCFiLmhhcyhDKSl3LnB1c2goQyksXy5zZXQoQyxFKTtlbHNle2c9ITE7YnJlYWt9fX1pZighZyltPVtdO2Vsc2V7dmFyIEE9W10uY29uY2F0KG4oYikpO20ucHVzaChBKTtmb3IodmFyIHg9MDt4PEEubGVuZ3RoO3grKyl7dmFyIEk9QVt4XSxEPVQuaW5kZXhPZihJKTtEPi0xJiZULnNwbGljZShELDEpfWI9bmV3IFNldCxfPW5ldyBNYXB9fXJldHVybiBtfSxwLnByb3RvdHlwZS5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cz1mdW5jdGlvbihtKXtmb3IodmFyIGc9W10seT1tLnNvdXJjZSx2PXRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcihtLnNvdXJjZSxtLnRhcmdldCkseD0wO3g8bS5iZW5kcG9pbnRzLmxlbmd0aDt4Kyspe3ZhciBiPXRoaXMubmV3Tm9kZShudWxsKTtiLnNldFJlY3QobmV3IFBvaW50KDAsMCksbmV3IERpbWVuc2lvbigxLDEpKSx2LmFkZChiKTt2YXIgdz10aGlzLm5ld0VkZ2UobnVsbCk7dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHcseSxiKSxnLmFkZChiKSx5PWJ9dmFyIHc9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQodyx5LG0udGFyZ2V0KSx0aGlzLmVkZ2VUb0R1bW15Tm9kZXMuc2V0KG0sZyksbS5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUobSk6di5yZW1vdmUobSksZ30scC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzPWZ1bmN0aW9uKCl7dmFyIG09W107bT1tLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKSxtPVtdLmNvbmNhdChuKHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5rZXlzKCkpKS5jb25jYXQobSk7Zm9yKHZhciBnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ107aWYoeS5iZW5kcG9pbnRzLmxlbmd0aD4wKXtmb3IodmFyIHY9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldCh5KSx4PTA7eDx2Lmxlbmd0aDt4Kyspe3ZhciBiPXZbeF0sdz1uZXcgaChiLmdldENlbnRlclgoKSxiLmdldENlbnRlclkoKSksXz15LmJlbmRwb2ludHMuZ2V0KHgpO18ueD13LngsXy55PXcueSxiLmdldE93bmVyKCkucmVtb3ZlKGIpfXRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5LHkuc291cmNlLHkudGFyZ2V0KX19fSxwLnRyYW5zZm9ybT1mdW5jdGlvbihtLGcseSx2KXtpZih5IT1udWxsJiZ2IT1udWxsKXt2YXIgeD1nO2lmKG08PTUwKXt2YXIgYj1nL3k7eC09KGctYikvNTAqKDUwLW0pfWVsc2V7dmFyIHc9Zyp2O3grPSh3LWcpLzUwKihtLTUwKX1yZXR1cm4geH1lbHNle3ZhciBfLFQ7cmV0dXJuIG08PTUwPyhfPTkqZy81MDAsVD1nLzEwKTooXz05KmcvNTAsVD0tOCpnKSxfKm0rVH19LHAuZmluZENlbnRlck9mVHJlZT1mdW5jdGlvbihtKXt2YXIgZz1bXTtnPWcuY29uY2F0KG0pO3ZhciB5PVtdLHY9bmV3IE1hcCx4PSExLGI9bnVsbDsoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKTtmb3IodmFyIHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIF89Z1t3XSxUPV8uZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7di5zZXQoXyxfLmdldE5laWdoYm9yc0xpc3QoKS5zaXplKSxUPT0xJiZ5LnB1c2goXyl9dmFyIEU9W107Zm9yKEU9RS5jb25jYXQoeSk7IXg7KXt2YXIgTD1bXTtMPUwuY29uY2F0KEUpLEU9W107Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDt3Kyspe3ZhciBfPWdbd10sQz1nLmluZGV4T2YoXyk7Qz49MCYmZy5zcGxpY2UoQywxKTt2YXIgQT1fLmdldE5laWdoYm9yc0xpc3QoKTtBLmZvckVhY2goZnVuY3Rpb24oayl7aWYoeS5pbmRleE9mKGspPDApe3ZhciBSPXYuZ2V0KGspLFM9Ui0xO1M9PTEmJkUucHVzaChrKSx2LnNldChrLFMpfX0pfXk9eS5jb25jYXQoRSksKGcubGVuZ3RoPT0xfHxnLmxlbmd0aD09MikmJih4PSEwLGI9Z1swXSl9cmV0dXJuIGJ9LHAucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihtKXt0aGlzLmdyYXBoTWFuYWdlcj1tfSx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiUmFuZG9tU2VlZCIpLG4uc2VlZD0xLG4ueD0wLG4ubmV4dERvdWJsZT1mdW5jdGlvbigpe3JldHVybiBuLng9TWF0aC5zaW4obi5zZWVkKyspKjFlNCxuLngtTWF0aC5mbG9vcihuLngpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDQpO2Z1bmN0aW9uIGkoYSxzKXt0aGlzLmx3b3JsZE9yZ1g9MCx0aGlzLmx3b3JsZE9yZ1k9MCx0aGlzLmxkZXZpY2VPcmdYPTAsdGhpcy5sZGV2aWNlT3JnWT0wLHRoaXMubHdvcmxkRXh0WD0xLHRoaXMubHdvcmxkRXh0WT0xLHRoaXMubGRldmljZUV4dFg9MSx0aGlzLmxkZXZpY2VFeHRZPTF9byhpLCJUcmFuc2Zvcm0iKSxpLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdYfSxpLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRPcmdYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1l9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WH0saS5wcm90b3R5cGUuc2V0V29ybGRFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkRXh0WD1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRZfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFk9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRZPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWH0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdYPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWX0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdZPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WH0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRYPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WX0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRZPWF9LGkucHJvdG90eXBlLnRyYW5zZm9ybVg9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubHdvcmxkRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sZGV2aWNlT3JnWCsoYS10aGlzLmx3b3JsZE9yZ1gpKnRoaXMubGRldmljZUV4dFgvbCksc30saS5wcm90b3R5cGUudHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdZKyhhLXRoaXMubHdvcmxkT3JnWSkqdGhpcy5sZGV2aWNlRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdYKyhhLXRoaXMubGRldmljZU9yZ1gpKnRoaXMubHdvcmxkRXh0WC9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WTtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdZKyhhLXRoaXMubGRldmljZU9yZ1kpKnRoaXMubHdvcmxkRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9bmV3IG4odGhpcy5pbnZlcnNlVHJhbnNmb3JtWChhLngpLHRoaXMuaW52ZXJzZVRyYW5zZm9ybVkoYS55KSk7cmV0dXJuIHN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZCl7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciBwPTAsbT1BcnJheShkLmxlbmd0aCk7cDxkLmxlbmd0aDtwKyspbVtwXT1kW3BdO3JldHVybiBtfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZCl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDE1KSxhPXIoNykscz1yKDApLGw9cig4KSx1PXIoOSk7ZnVuY3Rpb24gaCgpe2kuY2FsbCh0aGlzKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249YS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLmlkZWFsRWRnZUxlbmd0aD1hLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy5zcHJpbmdDb25zdGFudD1hLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RILHRoaXMucmVwdWxzaW9uQ29uc3RhbnQ9YS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLmdyYXZpdHlDb25zdGFudD1hLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGU9MyphLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAwLHRoaXMuY29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm1heEl0ZXJhdGlvbnM9YS5NQVhfSVRFUkFUSU9OU31vKGgsIkZETGF5b3V0IiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIGkpaFtmXT1pW2ZdO2gucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy50b3RhbEl0ZXJhdGlvbnM9MCx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wLHRoaXMudXNlRlJHcmlkVmFyaWFudD1hLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTix0aGlzLmdyaWQ9W119LGgucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHAsbSxnLHksdix4PXRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0QWxsRWRnZXMoKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZD14W2JdLGQuaWRlYWxMZW5ndGg9dGhpcy5pZGVhbEVkZ2VMZW5ndGgsZC5pc0ludGVyR3JhcGgmJihtPWQuZ2V0U291cmNlKCksZz1kLmdldFRhcmdldCgpLHk9ZC5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx2PWQuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uJiYoZC5pZGVhbExlbmd0aCs9eSt2LTIqcy5TSU1QTEVfTk9ERV9TSVpFKSxwPWQuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCksZC5pZGVhbExlbmd0aCs9YS5ERUZBVUxUX0VER0VfTEVOR1RIKmEuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUioobS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKStnLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLTIqcCkpfSxoLnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoO3RoaXMuaW5jcmVtZW50YWw/KGQ+YS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQmJih0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5jb29saW5nRmFjdG9yKmEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUix0aGlzLmNvb2xpbmdGYWN0b3ItKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqdGhpcy5jb29saW5nRmFjdG9yKigxLWEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpKSx0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQ9YS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwpOihkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUP3RoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heChhLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsMS0oZC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKGEuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKTp0aGlzLmNvb2xpbmdGYWN0b3I9MSx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPXRoaXMuY29vbGluZ0ZhY3Rvcix0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQ9YS5NQVhfTk9ERV9ESVNQTEFDRU1FTlQpLHRoaXMubWF4SXRlcmF0aW9ucz1NYXRoLm1heCh0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoKjUsdGhpcy5tYXhJdGVyYXRpb25zKSx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkPXRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSp0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoLHRoaXMucmVwdWxzaW9uUmFuZ2U9dGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbEVkZ2VzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHRoaXMuY2FsY1NwcmluZ0ZvcmNlKHAscC5pZGVhbExlbmd0aCl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXM9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAscD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbSxnLHksdix4PXRoaXMuZ2V0QWxsTm9kZXMoKSxiO2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmZCYmdGhpcy51cGRhdGVHcmlkKCksYj1uZXcgU2V0LG09MDttPHgubGVuZ3RoO20rKyl5PXhbbV0sdGhpcy5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUoeSxiLGQscCksYi5hZGQoeSk7ZWxzZSBmb3IobT0wO208eC5sZW5ndGg7bSsrKWZvcih5PXhbbV0sZz1tKzE7Zzx4Lmxlbmd0aDtnKyspdj14W2ddLHkuZ2V0T3duZXIoKT09di5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZSh5LHYpfSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZShkKX0saC5wcm90b3R5cGUubW92ZU5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0scC5tb3ZlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0U291cmNlKCksZz1kLmdldFRhcmdldCgpLHksdix4LGI7aWYodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmbS5nZXRDaGlsZCgpPT1udWxsJiZnLmdldENoaWxkKCk9PW51bGwpZC51cGRhdGVMZW5ndGhTaW1wbGUoKTtlbHNlIGlmKGQudXBkYXRlTGVuZ3RoKCksZC5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQpcmV0dXJuO3k9ZC5nZXRMZW5ndGgoKSx5IT0wJiYodj10aGlzLnNwcmluZ0NvbnN0YW50Kih5LXApLHg9diooZC5sZW5ndGhYL3kpLGI9diooZC5sZW5ndGhZL3kpLG0uc3ByaW5nRm9yY2VYKz14LG0uc3ByaW5nRm9yY2VZKz1iLGcuc3ByaW5nRm9yY2VYLT14LGcuc3ByaW5nRm9yY2VZLT1iKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRSZWN0KCksZz1wLmdldFJlY3QoKSx5PW5ldyBBcnJheSgyKSx2PW5ldyBBcnJheSg0KSx4LGIsdyxfLFQsRSxMO2lmKG0uaW50ZXJzZWN0cyhnKSl7bC5jYWxjU2VwYXJhdGlvbkFtb3VudChtLGcseSxhLkRFRkFVTFRfRURHRV9MRU5HVEgvMiksRT0yKnlbMF0sTD0yKnlbMV07dmFyIEM9ZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vKGQubm9PZkNoaWxkcmVuK3Aubm9PZkNoaWxkcmVuKTtkLnJlcHVsc2lvbkZvcmNlWC09QypFLGQucmVwdWxzaW9uRm9yY2VZLT1DKkwscC5yZXB1bHNpb25Gb3JjZVgrPUMqRSxwLnJlcHVsc2lvbkZvcmNlWSs9QypMfWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmZC5nZXRDaGlsZCgpPT1udWxsJiZwLmdldENoaWxkKCk9PW51bGw/KHg9Zy5nZXRDZW50ZXJYKCktbS5nZXRDZW50ZXJYKCksYj1nLmdldENlbnRlclkoKS1tLmdldENlbnRlclkoKSk6KGwuZ2V0SW50ZXJzZWN0aW9uKG0sZyx2KSx4PXZbMl0tdlswXSxiPXZbM10tdlsxXSksTWF0aC5hYnMoeCk8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJih4PXUuc2lnbih4KSphLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMoYik8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJihiPXUuc2lnbihiKSphLk1JTl9SRVBVTFNJT05fRElTVCksdz14KngrYipiLF89TWF0aC5zcXJ0KHcpLFQ9dGhpcy5yZXB1bHNpb25Db25zdGFudCpkLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi93LEU9VCp4L18sTD1UKmIvXyxkLnJlcHVsc2lvbkZvcmNlWC09RSxkLnJlcHVsc2lvbkZvcmNlWS09TCxwLnJlcHVsc2lvbkZvcmNlWCs9RSxwLnJlcHVsc2lvbkZvcmNlWSs9TH0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihkKXt2YXIgcCxtLGcseSx2LHgsYix3O3A9ZC5nZXRPd25lcigpLG09KHAuZ2V0UmlnaHQoKStwLmdldExlZnQoKSkvMixnPShwLmdldFRvcCgpK3AuZ2V0Qm90dG9tKCkpLzIseT1kLmdldENlbnRlclgoKS1tLHY9ZC5nZXRDZW50ZXJZKCktZyx4PU1hdGguYWJzKHkpK2QuZ2V0V2lkdGgoKS8yLGI9TWF0aC5hYnModikrZC5nZXRIZWlnaHQoKS8yLGQuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyh3PXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYpKToodz1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQsZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdip0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50KSl9LGgucHJvdG90eXBlLmlzQ29udmVyZ2VkPWZ1bmN0aW9uKCl7dmFyIGQscD0hMTtyZXR1cm4gdGhpcy50b3RhbEl0ZXJhdGlvbnM+dGhpcy5tYXhJdGVyYXRpb25zLzMmJihwPU1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQtdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCk8MiksZD10aGlzLnRvdGFsRGlzcGxhY2VtZW50PHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD10aGlzLnRvdGFsRGlzcGxhY2VtZW50LGR8fHB9LGgucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmIXRoaXMuaXNTdWJMYXlvdXQmJih0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz09dGhpcy5hbmltYXRpb25QZXJpb2Q/KHRoaXMudXBkYXRlKCksdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCk6dGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMrKyl9LGgucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSxkLm5vT2ZDaGlsZHJlbj1kLmdldE5vT2ZDaGlsZHJlbigpfSxoLnByb3RvdHlwZS5jYWxjR3JpZD1mdW5jdGlvbihkKXt2YXIgcD0wLG09MDtwPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSksbT1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgZz1uZXcgQXJyYXkocCkseT0wO3k8cDt5KyspZ1t5XT1uZXcgQXJyYXkobSk7Zm9yKHZhciB5PTA7eTxwO3krKylmb3IodmFyIHY9MDt2PG07disrKWdbeV1bdl09bmV3IEFycmF5O3JldHVybiBnfSxoLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKGQscCxtKXt2YXIgZz0wLHk9MCx2PTAseD0wO2c9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseT1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS53aWR0aCtkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx2PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHg9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkuaGVpZ2h0K2QuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgYj1nO2I8PXk7YisrKWZvcih2YXIgdz12O3c8PXg7dysrKXRoaXMuZ3JpZFtiXVt3XS5wdXNoKGQpLGQuc2V0R3JpZENvb3JkaW5hdGVzKGcseSx2LHgpfSxoLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIGQscCxtPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxkPTA7ZDxtLmxlbmd0aDtkKyspcD1tW2RdLHRoaXMuYWRkTm9kZVRvR3JpZChwLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0saC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKGQscCxtLGcpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJm18fGcpe3ZhciB5PW5ldyBTZXQ7ZC5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciB2LHg9dGhpcy5ncmlkLGI9ZC5zdGFydFgtMTtiPGQuZmluaXNoWCsyO2IrKylmb3IodmFyIHc9ZC5zdGFydFktMTt3PGQuZmluaXNoWSsyO3crKylpZighKGI8MHx8dzwwfHxiPj14Lmxlbmd0aHx8dz49eFswXS5sZW5ndGgpKXtmb3IodmFyIF89MDtfPHhbYl1bd10ubGVuZ3RoO18rKylpZih2PXhbYl1bd11bX10sIShkLmdldE93bmVyKCkhPXYuZ2V0T3duZXIoKXx8ZD09dikmJiFwLmhhcyh2KSYmIXkuaGFzKHYpKXt2YXIgVD1NYXRoLmFicyhkLmdldENlbnRlclgoKS12LmdldENlbnRlclgoKSktKGQuZ2V0V2lkdGgoKS8yK3YuZ2V0V2lkdGgoKS8yKSxFPU1hdGguYWJzKGQuZ2V0Q2VudGVyWSgpLXYuZ2V0Q2VudGVyWSgpKS0oZC5nZXRIZWlnaHQoKS8yK3YuZ2V0SGVpZ2h0KCkvMik7VDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmRTw9dGhpcy5yZXB1bHNpb25SYW5nZSYmeS5hZGQodil9fWQuc3Vycm91bmRpbmc9W10uY29uY2F0KG4oeSkpfWZvcihiPTA7YjxkLnN1cnJvdW5kaW5nLmxlbmd0aDtiKyspdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoZCxkLnN1cnJvdW5kaW5nW2JdKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSksaT1yKDcpO2Z1bmN0aW9uIGEobCx1LGgpe24uY2FsbCh0aGlzLGwsdSxoKSx0aGlzLmlkZWFsTGVuZ3RoPWkuREVGQVVMVF9FREdFX0xFTkdUSH1vKGEsIkZETGF5b3V0RWRnZSIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBuKWFbc109bltzXTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMpO2Z1bmN0aW9uIGkocyxsLHUsaCl7bi5jYWxsKHRoaXMscyxsLHUsaCksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wLHRoaXMuc3RhcnRYPTAsdGhpcy5maW5pc2hYPTAsdGhpcy5zdGFydFk9MCx0aGlzLmZpbmlzaFk9MCx0aGlzLnN1cnJvdW5kaW5nPVtdfW8oaSwiRkRMYXlvdXROb2RlIiksaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBhIGluIG4paVthXT1uW2FdO2kucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihzLGwsdSxoKXt0aGlzLnN0YXJ0WD1zLHRoaXMuZmluaXNoWD1sLHRoaXMuc3RhcnRZPXUsdGhpcy5maW5pc2hZPWh9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXt0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT09bnVsbCYmYSE9PW51bGwmJih0aGlzLmhlaWdodD1hLHRoaXMud2lkdGg9aSl9byhuLCJEaW1lbnNpb25EIiksbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5tYXA9e30sdGhpcy5rZXlzPVtdfW8oaSwiSGFzaE1hcCIpLGkucHJvdG90eXBlLnB1dD1mdW5jdGlvbihhLHMpe3ZhciBsPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhsKXx8KHRoaXMubWFwW2xdPXMsdGhpcy5rZXlzLnB1c2goYSkpfSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3JldHVybiB0aGlzLm1hcFthXSE9bnVsbH0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW3NdfSxpLnByb3RvdHlwZS5rZXlTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5zZXQ9e319byhpLCJIYXNoU2V0IiksaS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhzKXx8KHRoaXMuc2V0W3NdPWEpfSxpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuc2V0W24uY3JlYXRlSUQoYSldfSxpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRbbi5jcmVhdGVJRChhKV09PWF9LGkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1PYmplY3Qua2V5cyh0aGlzLnNldCksbD1zLmxlbmd0aCx1PTA7dTxsO3UrKylhLnB1c2godGhpcy5zZXRbc1t1XV0pfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbihhKXtmb3IodmFyIHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciB1PWFbbF07dGhpcy5hZGQodSl9fSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGwodSxoKXtmb3IodmFyIGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGQua2V5LGQpfX1yZXR1cm4gbyhsLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24odSxoLGYpe3JldHVybiBoJiZsKHUucHJvdG90eXBlLGgpLGYmJmwodSxmKSx1fX0oKTtmdW5jdGlvbiBpKGwsdSl7aWYoIShsIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1yKDExKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2kodGhpcyxsKSwoaCE9PW51bGx8fGghPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIGY9dm9pZCAwO3UgaW5zdGFuY2VvZiBhP2Y9dS5zaXplKCk6Zj11Lmxlbmd0aCx0aGlzLl9xdWlja3NvcnQodSwwLGYtMSl9cmV0dXJuIG8obCwiUXVpY2tzb3J0IiksbihsLFt7a2V5OiJfcXVpY2tzb3J0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtpZihmPGQpe3ZhciBwPXRoaXMuX3BhcnRpdGlvbihoLGYsZCk7dGhpcy5fcXVpY2tzb3J0KGgsZixwKSx0aGlzLl9xdWlja3NvcnQoaCxwKzEsZCl9fSwiX3F1aWNrc29ydCIpfSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtmb3IodmFyIHA9dGhpcy5fZ2V0KGgsZiksbT1mLGc9ZDs7KXtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHAsdGhpcy5fZ2V0KGgsZykpOylnLS07Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoaCxtKSxwKTspbSsrO2lmKG08Zyl0aGlzLl9zd2FwKGgsbSxnKSxtKyssZy0tO2Vsc2UgcmV0dXJuIGd9fSwiX3BhcnRpdGlvbiIpfSx7a2V5OiJfZ2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZil7cmV0dXJuIGggaW5zdGFuY2VvZiBhP2guZ2V0X29iamVjdF9hdChmKTpoW2ZdfSwiX2dldCIpfSx7a2V5OiJfc2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtoIGluc3RhbmNlb2YgYT9oLnNldF9vYmplY3RfYXQoZixkKTpoW2ZdPWR9LCJfc2V0Iil9LHtrZXk6Il9zd2FwIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXt2YXIgcD10aGlzLl9nZXQoaCxmKTt0aGlzLl9zZXQoaCxmLHRoaXMuX2dldChoLGQpKSx0aGlzLl9zZXQoaCxkLHApfSwiX3N3YXAiKX0se2tleToiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gZj5ofSwiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iKX1dKSxsfSgpO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe2Zvcih2YXIgaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZi5rZXksZil9fXJldHVybiBvKHMsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbihsLHUsaCl7cmV0dXJuIHUmJnMobC5wcm90b3R5cGUsdSksaCYmcyhsLGgpLGx9fSgpO2Z1bmN0aW9uIGkocyxsKXtpZighKHMgaW5zdGFuY2VvZiBsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLGY9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLGQ9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2kodGhpcyxzKSx0aGlzLnNlcXVlbmNlMT1sLHRoaXMuc2VxdWVuY2UyPXUsdGhpcy5tYXRjaF9zY29yZT1oLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1mLHRoaXMuZ2FwX3BlbmFsdHk9ZCx0aGlzLmlNYXg9bC5sZW5ndGgrMSx0aGlzLmpNYXg9dS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBwPTA7cDx0aGlzLmlNYXg7cCsrKXt0aGlzLmdyaWRbcF09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBtPTA7bTx0aGlzLmpNYXg7bSsrKXRoaXMuZ3JpZFtwXVttXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGc9MDtnPHRoaXMuaU1heDtnKyspe3RoaXMudHJhY2ViYWNrR3JpZFtnXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIHk9MDt5PHRoaXMuak1heDt5KyspdGhpcy50cmFjZWJhY2tHcmlkW2ddW3ldPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gbyhzLCJOZWVkbGVtYW5XdW5zY2giKSxuKHMsW3trZXk6ImdldFNjb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NvcmV9LCJnZXRTY29yZSIpfSx7a2V5OiJnZXRBbGlnbm1lbnRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImdldEFsaWdubWVudHMiKX0se2tleToiY29tcHV0ZUdyaWRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB1PTE7dTx0aGlzLmpNYXg7dSsrKXRoaXMuZ3JpZFswXVt1XT10aGlzLmdyaWRbMF1bdS0xXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFswXVt1XT1bITEsITEsITBdO2Zvcih2YXIgaD0xO2g8dGhpcy5pTWF4O2grKyl0aGlzLmdyaWRbaF1bMF09dGhpcy5ncmlkW2gtMV1bMF0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbaF1bMF09WyExLCEwLCExXTtmb3IodmFyIGY9MTtmPHRoaXMuaU1heDtmKyspZm9yKHZhciBkPTE7ZDx0aGlzLmpNYXg7ZCsrKXt2YXIgcD12b2lkIDA7dGhpcy5zZXF1ZW5jZTFbZi0xXT09PXRoaXMuc2VxdWVuY2UyW2QtMV0/cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWF0Y2hfc2NvcmU6cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWlzbWF0Y2hfcGVuYWx0eTt2YXIgbT10aGlzLmdyaWRbZi0xXVtkXSt0aGlzLmdhcF9wZW5hbHR5LGc9dGhpcy5ncmlkW2ZdW2QtMV0rdGhpcy5nYXBfcGVuYWx0eSx5PVtwLG0sZ10sdj10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyh5KTt0aGlzLmdyaWRbZl1bZF09eVt2WzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbZl1bZF09W3YuaW5jbHVkZXMoMCksdi5pbmNsdWRlcygxKSx2LmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfSwiY29tcHV0ZUdyaWRzIil9LHtrZXk6ImFsaWdubWVudFRyYWNlYmFjayIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciB1PVtdO2Zvcih1LnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7dVswXTspe3ZhciBoPXVbMF0sZj10aGlzLnRyYWNlYmFja0dyaWRbaC5wb3NbMF1dW2gucG9zWzFdXTtmWzBdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0tMSxoLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW2gucG9zWzFdLTFdK2guc2VxMn0pLGZbMV0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOiItIitoLnNlcTJ9KSxmWzJdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0saC5wb3NbMV0tMV0sc2VxMToiLSIraC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksaC5wb3NbMF09PT0wJiZoLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6aC5zZXExLHNlcXVlbmNlMjpoLnNlcTJ9KSx1LnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImFsaWdubWVudFRyYWNlYmFjayIpfSx7a2V5OiJnZXRBbGxJbmRleGVzIix2YWx1ZTpvKGZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPVtdLGQ9LTE7KGQ9dS5pbmRleE9mKGgsZCsxKSkhPT0tMTspZi5wdXNoKGQpO3JldHVybiBmfSwiZ2V0QWxsSW5kZXhlcyIpfSx7a2V5OiJhcnJheUFsbE1heEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSl7cmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyh1LE1hdGgubWF4LmFwcGx5KG51bGwsdSkpfSwiYXJyYXlBbGxNYXhJbmRleGVzIil9XSksc30oKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1vKGZ1bmN0aW9uKCl7fSwibGF5b3V0QmFzZSIpO24uRkRMYXlvdXQ9cigxOCksbi5GRExheW91dENvbnN0YW50cz1yKDcpLG4uRkRMYXlvdXRFZGdlPXIoMTkpLG4uRkRMYXlvdXROb2RlPXIoMjApLG4uRGltZW5zaW9uRD1yKDIxKSxuLkhhc2hNYXA9cigyMiksbi5IYXNoU2V0PXIoMjMpLG4uSUdlb21ldHJ5PXIoOCksbi5JTWF0aD1yKDkpLG4uSW50ZWdlcj1yKDEwKSxuLlBvaW50PXIoMTIpLG4uUG9pbnREPXIoNCksbi5SYW5kb21TZWVkPXIoMTYpLG4uUmVjdGFuZ2xlRD1yKDEzKSxuLlRyYW5zZm9ybT1yKDE3KSxuLlVuaXF1ZUlER2VuZXJldG9yPXIoMTQpLG4uUXVpY2tzb3J0PXIoMjQpLG4uTGlua2VkTGlzdD1yKDExKSxuLkxHcmFwaE9iamVjdD1yKDIpLG4uTEdyYXBoPXIoNSksbi5MRWRnZT1yKDEpLG4uTEdyYXBoTWFuYWdlcj1yKDYpLG4uTE5vZGU9cigzKSxuLkxheW91dD1yKDE1KSxuLkxheW91dENvbnN0YW50cz1yKDApLG4uTmVlZGxlbWFuV3Vuc2NoPXIoMjUpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLmxpc3RlbmVycz1bXX1vKG4sIkVtaXR0ZXIiKTt2YXIgaT1uLnByb3RvdHlwZTtpLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGEscyl7dGhpcy5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6YSxjYWxsYmFjazpzfSl9LGkucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2w+PTA7bC0tKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTt1LmV2ZW50PT09YSYmdS5jYWxsYmFjaz09PXMmJnRoaXMubGlzdGVuZXJzLnNwbGljZShsLDEpfX0saS5lbWl0PWZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPTA7bDx0aGlzLmxpc3RlbmVycy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTthPT09dS5ldmVudCYmdS5jYWxsYmFjayhzKX19LHQuZXhwb3J0cz1ufV0pfSl9KTt2YXIgQUI9TmkoKGxiLENCKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIGxiPT0ib2JqZWN0IiYmdHlwZW9mIENCPT0ib2JqZWN0Ij9DQi5leHBvcnRzPXIoU0IoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJsYXlvdXQtYmFzZSJdLHIpOnR5cGVvZiBsYj09Im9iamVjdCI/bGIuY29zZUJhc2U9cihTQigpKTplLmNvc2VCYXNlPXIoZS5sYXlvdXRCYXNlKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikobGIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSl7aWYocltpXSlyZXR1cm4gcltpXS5leHBvcnRzO3ZhciBhPXJbaV09e2ksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtpXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiBvKG4sIl9fd2VicGFja19yZXF1aXJlX18iKSxuLm09ZSxuLmM9cixuLmk9ZnVuY3Rpb24oaSl7cmV0dXJuIGl9LG4uZD1mdW5jdGlvbihpLGEscyl7bi5vKGksYSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLGEse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpzfSl9LG4ubj1mdW5jdGlvbihpKXt2YXIgYT1pJiZpLl9fZXNNb2R1bGU/byhmdW5jdGlvbigpe3JldHVybiBpLmRlZmF1bHR9LCJnZXREZWZhdWx0Iik6byhmdW5jdGlvbigpe3JldHVybiBpfSwiZ2V0TW9kdWxlRXhwb3J0cyIpO3JldHVybiBuLmQoYSwiYSIsYSksYX0sbi5vPWZ1bmN0aW9uKGksYSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLGEpfSxuLnA9IiIsbihuLnM9Nyl9KFtmdW5jdGlvbihlLHIpe2UuZXhwb3J0cz10fSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gYSgpe31vKGEsIkNvU0VDb25zdGFudHMiKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107YS5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLGEuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1pLkRFRkFVTFRfRURHRV9MRU5HVEgsYS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLGEuVElMRT0hMCxhLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLGEuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxhLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExLGUuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXRFZGdlO2Z1bmN0aW9uIGEobCx1LGgpe2kuY2FsbCh0aGlzLGwsdSxoKX1vKGEsIkNvU0VFZGdlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2UuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuTEdyYXBoO2Z1bmN0aW9uIGEobCx1LGgpe2kuY2FsbCh0aGlzLGwsdSxoKX1vKGEsIkNvU0VHcmFwaCIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTtlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkxHcmFwaE1hbmFnZXI7ZnVuY3Rpb24gYShsKXtpLmNhbGwodGhpcyxsKX1vKGEsIkNvU0VHcmFwaE1hbmFnZXIiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dE5vZGUsYT1uKDApLklNYXRoO2Z1bmN0aW9uIHModSxoLGYsZCl7aS5jYWxsKHRoaXMsdSxoLGYsZCl9byhzLCJDb1NFTm9kZSIpLHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgbCBpbiBpKXNbbF09aVtsXTtzLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7dGhpcy5kaXNwbGFjZW1lbnRYPXUuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5ub09mQ2hpbGRyZW4sdGhpcy5kaXNwbGFjZW1lbnRZPXUuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5ub09mQ2hpbGRyZW4sTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKT51LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRYPXUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQqYS5zaWduKHRoaXMuZGlzcGxhY2VtZW50WCkpLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSk+dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WT11LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50KmEuc2lnbih0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLmNoaWxkPT1udWxsP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/dGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSk6dGhpcy5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpLHUudG90YWxEaXNwbGFjZW1lbnQrPU1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkrTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTB9LHMucHJvdG90eXBlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW49ZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9dGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCksZCxwPTA7cDxmLmxlbmd0aDtwKyspZD1mW3BdLGQuZ2V0Q2hpbGQoKT09bnVsbD8oZC5tb3ZlQnkodSxoKSxkLmRpc3BsYWNlbWVudFgrPXUsZC5kaXNwbGFjZW1lbnRZKz1oKTpkLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odSxoKX0scy5wcm90b3R5cGUuc2V0UHJlZDE9ZnVuY3Rpb24odSl7dGhpcy5wcmVkMT11fSxzLnByb3RvdHlwZS5nZXRQcmVkMT1mdW5jdGlvbigpe3JldHVybiBwcmVkMX0scy5wcm90b3R5cGUuZ2V0UHJlZDI9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDJ9LHMucHJvdG90eXBlLnNldE5leHQ9ZnVuY3Rpb24odSl7dGhpcy5uZXh0PXV9LHMucHJvdG90eXBlLmdldE5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV4dH0scy5wcm90b3R5cGUuc2V0UHJvY2Vzc2VkPWZ1bmN0aW9uKHUpe3RoaXMucHJvY2Vzc2VkPXV9LHMucHJvdG90eXBlLmlzUHJvY2Vzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3NlZH0sZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dCxhPW4oNCkscz1uKDMpLGw9big1KSx1PW4oMiksaD1uKDEpLGY9bigwKS5GRExheW91dENvbnN0YW50cyxkPW4oMCkuTGF5b3V0Q29uc3RhbnRzLHA9bigwKS5Qb2ludCxtPW4oMCkuUG9pbnRELGc9bigwKS5MYXlvdXQseT1uKDApLkludGVnZXIsdj1uKDApLklHZW9tZXRyeSx4PW4oMCkuTEdyYXBoLGI9bigwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gdygpe2kuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX1vKHcsIkNvU0VMYXlvdXQiKSx3LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gaSl3W19dPWlbX107dy5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIFQ9bmV3IGEodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPVQsVH0sdy5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24oVCl7cmV0dXJuIG5ldyBzKG51bGwsdGhpcy5ncmFwaE1hbmFnZXIsVCl9LHcucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24oVCl7cmV0dXJuIG5ldyBsKHRoaXMuZ3JhcGhNYW5hZ2VyLFQpfSx3LnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKFQpe3JldHVybiBuZXcgdShudWxsLG51bGwsVCl9LHcucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy5pc1N1YkxheW91dHx8KGguREVGQVVMVF9FREdFX0xFTkdUSDwxMD90aGlzLmlkZWFsRWRnZUxlbmd0aD0xMDp0aGlzLmlkZWFsRWRnZUxlbmd0aD1oLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPWguREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5zcHJpbmdDb25zdGFudD1mLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RILHRoaXMucmVwdWxzaW9uQ29uc3RhbnQ9Zi5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLmdyYXZpdHlDb25zdGFudD1mLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWYuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWYuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWYuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLnBydW5lZE5vZGVzQWxsPVtdLHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zPTAsdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnM9MCx0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSExLHRoaXMuY29vbGluZ0N5Y2xlPTAsdGhpcy5tYXhDb29saW5nQ3ljbGU9dGhpcy5tYXhJdGVyYXRpb25zL2YuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9ELHRoaXMuZmluYWxUZW1wZXJhdHVyZT1mLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRC90aGlzLm1heEl0ZXJhdGlvbnMsdGhpcy5jb29saW5nQWRqdXN0ZXI9MSl9LHcucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbigpe3ZhciBUPWQuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBUJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LHcucHJvdG90eXBlLmNsYXNzaWNMYXlvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVzV2l0aEdyYXZpdHk9dGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCksdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KSx0aGlzLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKSx0aGlzLmluY3JlbWVudGFsKXtpZihoLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBFPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxMPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oSSl7cmV0dXJuIEUuaGFzKEkpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oTCl9fWVsc2V7dmFyIFQ9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoVC5sZW5ndGg+MCl0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShUKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIEU9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLEw9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gRS5oYXMoQyl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihMKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSx0aGlzLnJ1blNwcmluZ0VtYmVkZGVyKCksITB9LHcucHJvdG90eXBlLnRpY2s9ZnVuY3Rpb24oKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucysrLHRoaXMudG90YWxJdGVyYXRpb25zPT09dGhpcy5tYXhJdGVyYXRpb25zJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMlZi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9PTAmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpe2lmKHRoaXMuaXNDb252ZXJnZWQoKSlpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO3RoaXMuY29vbGluZ0N5Y2xlKyssdGhpcy5sYXlvdXRRdWFsaXR5PT0wP3RoaXMuY29vbGluZ0FkanVzdGVyPXRoaXMuY29vbGluZ0N5Y2xlOnRoaXMubGF5b3V0UXVhbGl0eT09MSYmKHRoaXMuY29vbGluZ0FkanVzdGVyPXRoaXMuY29vbGluZ0N5Y2xlLzMpLHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLU1hdGgucG93KHRoaXMuY29vbGluZ0N5Y2xlLE1hdGgubG9nKDEwMCoodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci10aGlzLmZpbmFsVGVtcGVyYXR1cmUpKS9NYXRoLmxvZyh0aGlzLm1heENvb2xpbmdDeWNsZSkpLzEwMCp0aGlzLmNvb2xpbmdBZGp1c3Rlcix0aGlzLmZpbmFsVGVtcGVyYXR1cmUpLHRoaXMuYW5pbWF0aW9uUGVyaW9kPU1hdGguY2VpbCh0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2QqTWF0aC5zcXJ0KHRoaXMuY29vbGluZ0ZhY3RvcikpfWlmKHRoaXMuaXNUcmVlR3Jvd2luZyl7aWYodGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTApaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksdGhpcy5ncm93VHJlZSh0aGlzLnBydW5lZE5vZGVzQWxsKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIFQ9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLEU9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4gVC5oYXMoQSl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihFKSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9Zi5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1mLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgTD0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLEM9dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNUcmVlR3Jvd2luZ3x8dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNHcm93dGhGaW5pc2hlZDtyZXR1cm4gdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMuY2FsY1NwcmluZ0ZvcmNlcygpLHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhMLEMpLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKSx0aGlzLm1vdmVOb2RlcygpLHRoaXMuYW5pbWF0ZSgpLCExfSx3LnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksRT17fSxMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBDPVRbTF0ucmVjdCxBPVRbTF0uaWQ7RVtBXT17aWQ6QSx4OkMuZ2V0Q2VudGVyWCgpLHk6Qy5nZXRDZW50ZXJZKCksdzpDLndpZHRoLGg6Qy5oZWlnaHR9fXJldHVybiBFfSx3LnByb3RvdHlwZS5ydW5TcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZD0yNSx0aGlzLmFuaW1hdGlvblBlcmlvZD10aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q7dmFyIFQ9ITE7aWYoZi5BTklNQVRFPT09ImR1cmluZyIpdGhpcy5lbWl0KCJsYXlvdXRzdGFydGVkIik7ZWxzZXtmb3IoOyFUOylUPXRoaXMudGljaygpO3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpfX0sdy5wcm90b3R5cGUuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25Ubz1mdW5jdGlvbigpe3ZhciBUPVtdLEUsTD10aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKSxDPUwubGVuZ3RoLEE7Zm9yKEE9MDtBPEM7QSsrKUU9TFtBXSxFLnVwZGF0ZUNvbm5lY3RlZCgpLEUuaXNDb25uZWN0ZWR8fChUPVQuY29uY2F0KEUuZ2V0Tm9kZXMoKSkpO3JldHVybiBUfSx3LnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIFQ9W107VD1ULmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKTt2YXIgRT1uZXcgU2V0LEw7Zm9yKEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIEM9VFtMXTtpZighRS5oYXMoQykpe3ZhciBBPUMuZ2V0U291cmNlKCksST1DLmdldFRhcmdldCgpO2lmKEE9PUkpQy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgbSksQy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgbSksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhDKSxFLmFkZChDKTtlbHNle3ZhciBEPVtdO2lmKEQ9RC5jb25jYXQoQS5nZXRFZGdlTGlzdFRvTm9kZShJKSksRD1ELmNvbmNhdChJLmdldEVkZ2VMaXN0VG9Ob2RlKEEpKSwhRS5oYXMoRFswXSkpe2lmKEQubGVuZ3RoPjEpe3ZhciBrO2ZvcihrPTA7azxELmxlbmd0aDtrKyspe3ZhciBSPURba107Ui5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgbSksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhSKX19RC5mb3JFYWNoKGZ1bmN0aW9uKFMpe0UuYWRkKFMpfSl9fX1pZihFLnNpemU9PVQubGVuZ3RoKWJyZWFrfX0sdy5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhZGlhbGx5PWZ1bmN0aW9uKFQpe2Zvcih2YXIgRT1uZXcgcCgwLDApLEw9TWF0aC5jZWlsKE1hdGguc3FydChULmxlbmd0aCkpLEM9MCxBPTAsST0wLEQ9bmV3IG0oMCwwKSxrPTA7azxULmxlbmd0aDtrKyspe2slTD09MCYmKEk9MCxBPUMsayE9MCYmKEErPWguREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTiksQz0wKTt2YXIgUj1UW2tdLFM9Zy5maW5kQ2VudGVyT2ZUcmVlKFIpO0UueD1JLEUueT1BLEQ9dy5yYWRpYWxMYXlvdXQoUixTLEUpLEQueT5DJiYoQz1NYXRoLmZsb29yKEQueSkpLEk9TWF0aC5mbG9vcihELngraC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKX10aGlzLnRyYW5zZm9ybShuZXcgbShkLldPUkxEX0NFTlRFUl9YLUQueC8yLGQuV09STERfQ0VOVEVSX1ktRC55LzIpKX0sdy5yYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oVCxFLEwpe3ZhciBDPU1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUoVCksaC5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTt3LmJyYW5jaFJhZGlhbExheW91dChFLG51bGwsMCwzNTksMCxDKTt2YXIgQT14LmNhbGN1bGF0ZUJvdW5kcyhUKSxJPW5ldyBiO0kuc2V0RGV2aWNlT3JnWChBLmdldE1pblgoKSksSS5zZXREZXZpY2VPcmdZKEEuZ2V0TWluWSgpKSxJLnNldFdvcmxkT3JnWChMLngpLEkuc2V0V29ybGRPcmdZKEwueSk7Zm9yKHZhciBEPTA7RDxULmxlbmd0aDtEKyspe3ZhciBrPVRbRF07ay50cmFuc2Zvcm0oSSl9dmFyIFI9bmV3IG0oQS5nZXRNYXhYKCksQS5nZXRNYXhZKCkpO3JldHVybiBJLmludmVyc2VUcmFuc2Zvcm1Qb2ludChSKX0sdy5icmFuY2hSYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oVCxFLEwsQyxBLEkpe3ZhciBEPShDLUwrMSkvMjtEPDAmJihEKz0xODApO3ZhciBrPShEK0wpJTM2MCxSPWsqdi5UV09fUEkvMzYwLFM9TWF0aC5jb3MoUiksTz1BKk1hdGguY29zKFIpLE49QSpNYXRoLnNpbihSKTtULnNldENlbnRlcihPLE4pO3ZhciBQPVtdO1A9UC5jb25jYXQoVC5nZXRFZGdlcygpKTt2YXIgRj1QLmxlbmd0aDtFIT1udWxsJiZGLS07Zm9yKHZhciBCPTAsJD1QLmxlbmd0aCx6LFc9VC5nZXRFZGdlc0JldHdlZW4oRSk7Vy5sZW5ndGg+MTspe3ZhciBqPVdbMF07Vy5zcGxpY2UoMCwxKTt2YXIgSz1QLmluZGV4T2Yoaik7Sz49MCYmUC5zcGxpY2UoSywxKSwkLS0sRi0tfUUhPW51bGw/ej0oUC5pbmRleE9mKFdbMF0pKzEpJSQ6ej0wO2Zvcih2YXIgaWU9TWF0aC5hYnMoQy1MKS9GLFE9ejtCIT1GO1E9KytRJSQpe3ZhciBlZT1QW1FdLmdldE90aGVyRW5kKFQpO2lmKGVlIT1FKXt2YXIgSj0oTCtCKmllKSUzNjAsSD0oSitpZSklMzYwO3cuYnJhbmNoUmFkaWFsTGF5b3V0KGVlLFQsSixILEErSSxJKSxCKyt9fX0sdy5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbihUKXtmb3IodmFyIEU9eS5NSU5fVkFMVUUsTD0wO0w8VC5sZW5ndGg7TCsrKXt2YXIgQz1UW0xdLEE9Qy5nZXREaWFnb25hbCgpO0E+RSYmKEU9QSl9cmV0dXJuIEV9LHcucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAyKih0aGlzLmxldmVsKzEpKnRoaXMuaWRlYWxFZGdlTGVuZ3RofSx3LnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxFPXt9O3RoaXMubWVtYmVyR3JvdXBzPXt9LHRoaXMuaWRUb0R1bW15Tm9kZT17fTtmb3IodmFyIEw9W10sQz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEE9MDtBPEMubGVuZ3RoO0ErKyl7dmFyIEk9Q1tBXSxEPUkuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKEkpPT09MCYmKEQuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChEKSkmJkwucHVzaChJKX1mb3IodmFyIEE9MDtBPEwubGVuZ3RoO0ErKyl7dmFyIEk9TFtBXSxrPUkuZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIEVba10+InUiJiYoRVtrXT1bXSksRVtrXT1FW2tdLmNvbmNhdChJKX1PYmplY3Qua2V5cyhFKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe2lmKEVbUl0ubGVuZ3RoPjEpe3ZhciBTPSJEdW1teUNvbXBvdW5kXyIrUjtULm1lbWJlckdyb3Vwc1tTXT1FW1JdO3ZhciBPPUVbUl1bMF0uZ2V0UGFyZW50KCksTj1uZXcgbChULmdyYXBoTWFuYWdlcik7Ti5pZD1TLE4ucGFkZGluZ0xlZnQ9Ty5wYWRkaW5nTGVmdHx8MCxOLnBhZGRpbmdSaWdodD1PLnBhZGRpbmdSaWdodHx8MCxOLnBhZGRpbmdCb3R0b209Ty5wYWRkaW5nQm90dG9tfHwwLE4ucGFkZGluZ1RvcD1PLnBhZGRpbmdUb3B8fDAsVC5pZFRvRHVtbXlOb2RlW1NdPU47dmFyIFA9VC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoVC5uZXdHcmFwaCgpLE4pLEY9Ty5nZXRDaGlsZCgpO0YuYWRkKE4pO2Zvcih2YXIgQj0wO0I8RVtSXS5sZW5ndGg7QisrKXt2YXIgJD1FW1JdW0JdO0YucmVtb3ZlKCQpLFAuYWRkKCQpfX19KX0sdy5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHM9ZnVuY3Rpb24oKXt2YXIgVD17fSxFPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBMPTA7TDx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO0wrKylFW3RoaXMuY29tcG91bmRPcmRlcltMXS5pZF09dGhpcy5jb21wb3VuZE9yZGVyW0xdLFRbdGhpcy5jb21wb3VuZE9yZGVyW0xdLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW0xdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltMXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbTF0uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKFQsRSl9LHcucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLEU9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrPVtdO09iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBDPVQuaWRUb0R1bW15Tm9kZVtMXTtFW0xdPVQudGlsZU5vZGVzKFQubWVtYmVyR3JvdXBzW0xdLEMucGFkZGluZ0xlZnQrQy5wYWRkaW5nUmlnaHQpLEMucmVjdC53aWR0aD1FW0xdLndpZHRoLEMucmVjdC5oZWlnaHQ9RVtMXS5oZWlnaHR9KX0sdy5wcm90b3R5cGUucmVwb3B1bGF0ZUNvbXBvdW5kcz1mdW5jdGlvbigpe2Zvcih2YXIgVD10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7VD49MDtULS0pe3ZhciBFPXRoaXMuY29tcG91bmRPcmRlcltUXSxMPUUuaWQsQz1FLnBhZGRpbmdMZWZ0LEE9RS5wYWRkaW5nVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW0xdLEUucmVjdC54LEUucmVjdC55LEMsQSl9fSx3LnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLEU9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrO09iamVjdC5rZXlzKEUpLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIEM9VC5pZFRvRHVtbXlOb2RlW0xdLEE9Qy5wYWRkaW5nTGVmdCxJPUMucGFkZGluZ1RvcDtULmFkanVzdExvY2F0aW9ucyhFW0xdLEMucmVjdC54LEMucmVjdC55LEEsSSl9KX0sdy5wcm90b3R5cGUuZ2V0VG9CZVRpbGVkPWZ1bmN0aW9uKFQpe3ZhciBFPVQuaWQ7aWYodGhpcy50b0JlVGlsZWRbRV0hPW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdO3ZhciBMPVQuZ2V0Q2hpbGQoKTtpZihMPT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMSwhMTtmb3IodmFyIEM9TC5nZXROb2RlcygpLEE9MDtBPEMubGVuZ3RoO0ErKyl7dmFyIEk9Q1tBXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoSSk+MClyZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITEsITE7aWYoSS5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFtJLmlkXT0hMTtjb250aW51ZX1pZighdGhpcy5nZXRUb0JlVGlsZWQoSSkpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMCwhMH0sdy5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZT1mdW5jdGlvbihUKXtmb3IodmFyIEU9VC5pZCxMPVQuZ2V0RWRnZXMoKSxDPTAsQT0wO0E8TC5sZW5ndGg7QSsrKXt2YXIgST1MW0FdO0kuZ2V0U291cmNlKCkuaWQhPT1JLmdldFRhcmdldCgpLmlkJiYoQz1DKzEpfXJldHVybiBDfSx3LnByb3RvdHlwZS5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuPWZ1bmN0aW9uKFQpe3ZhciBFPXRoaXMuZ2V0Tm9kZURlZ3JlZShUKTtpZihULmdldENoaWxkKCk9PW51bGwpcmV0dXJuIEU7Zm9yKHZhciBMPVQuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLEM9MDtDPEwubGVuZ3RoO0MrKyl7dmFyIEE9TFtDXTtFKz10aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oQSl9cmV0dXJuIEV9LHcucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0sdy5wcm90b3R5cGUuZmlsbENvbXBleE9yZGVyQnlERlM9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPTA7RTxULmxlbmd0aDtFKyspe3ZhciBMPVRbRV07TC5nZXRDaGlsZCgpIT1udWxsJiZ0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKEwuZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdldFRvQmVUaWxlZChMKSYmdGhpcy5jb21wb3VuZE9yZGVyLnB1c2goTCl9fSx3LnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24oVCxFLEwsQyxBKXtFKz1DLEwrPUE7Zm9yKHZhciBJPUUsRD0wO0Q8VC5yb3dzLmxlbmd0aDtEKyspe3ZhciBrPVQucm93c1tEXTtFPUk7Zm9yKHZhciBSPTAsUz0wO1M8ay5sZW5ndGg7UysrKXt2YXIgTz1rW1NdO08ucmVjdC54PUUsTy5yZWN0Lnk9TCxFKz1PLnJlY3Qud2lkdGgrVC5ob3Jpem9udGFsUGFkZGluZyxPLnJlY3QuaGVpZ2h0PlImJihSPU8ucmVjdC5oZWlnaHQpfUwrPVIrVC52ZXJ0aWNhbFBhZGRpbmd9fSx3LnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKFQsRSl7dmFyIEw9dGhpczt0aGlzLnRpbGVkTWVtYmVyUGFjaz1bXSxPYmplY3Qua2V5cyhUKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBBPUVbQ107TC50aWxlZE1lbWJlclBhY2tbQ109TC50aWxlTm9kZXMoVFtDXSxBLnBhZGRpbmdMZWZ0K0EucGFkZGluZ1JpZ2h0KSxBLnJlY3Qud2lkdGg9TC50aWxlZE1lbWJlclBhY2tbQ10ud2lkdGgsQS5yZWN0LmhlaWdodD1MLnRpbGVkTWVtYmVyUGFja1tDXS5oZWlnaHR9KX0sdy5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKFQsRSl7dmFyIEw9aC5USUxJTkdfUEFERElOR19WRVJUSUNBTCxDPWguVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxBPXtyb3dzOltdLHJvd1dpZHRoOltdLHJvd0hlaWdodDpbXSx3aWR0aDowLGhlaWdodDpFLHZlcnRpY2FsUGFkZGluZzpMLGhvcml6b250YWxQYWRkaW5nOkN9O1Quc29ydChmdW5jdGlvbihrLFIpe3JldHVybiBrLnJlY3Qud2lkdGgqay5yZWN0LmhlaWdodD5SLnJlY3Qud2lkdGgqUi5yZWN0LmhlaWdodD8tMTprLnJlY3Qud2lkdGgqay5yZWN0LmhlaWdodDxSLnJlY3Qud2lkdGgqUi5yZWN0LmhlaWdodD8xOjB9KTtmb3IodmFyIEk9MDtJPFQubGVuZ3RoO0krKyl7dmFyIEQ9VFtJXTtBLnJvd3MubGVuZ3RoPT0wP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KEEsRCwwLEUpOnRoaXMuY2FuQWRkSG9yaXpvbnRhbChBLEQucmVjdC53aWR0aCxELnJlY3QuaGVpZ2h0KT90aGlzLmluc2VydE5vZGVUb1JvdyhBLEQsdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KEEpLEUpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KEEsRCxBLnJvd3MubGVuZ3RoLEUpLHRoaXMuc2hpZnRUb0xhc3RSb3coQSl9cmV0dXJuIEF9LHcucHJvdG90eXBlLmluc2VydE5vZGVUb1Jvdz1mdW5jdGlvbihULEUsTCxDKXt2YXIgQT1DO2lmKEw9PVQucm93cy5sZW5ndGgpe3ZhciBJPVtdO1Qucm93cy5wdXNoKEkpLFQucm93V2lkdGgucHVzaChBKSxULnJvd0hlaWdodC5wdXNoKDApfXZhciBEPVQucm93V2lkdGhbTF0rRS5yZWN0LndpZHRoO1Qucm93c1tMXS5sZW5ndGg+MCYmKEQrPVQuaG9yaXpvbnRhbFBhZGRpbmcpLFQucm93V2lkdGhbTF09RCxULndpZHRoPEQmJihULndpZHRoPUQpO3ZhciBrPUUucmVjdC5oZWlnaHQ7TD4wJiYoays9VC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBSPTA7az5ULnJvd0hlaWdodFtMXSYmKFI9VC5yb3dIZWlnaHRbTF0sVC5yb3dIZWlnaHRbTF09ayxSPVQucm93SGVpZ2h0W0xdLVIpLFQuaGVpZ2h0Kz1SLFQucm93c1tMXS5wdXNoKEUpfSx3LnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4PWZ1bmN0aW9uKFQpe2Zvcih2YXIgRT0tMSxMPU51bWJlci5NQVhfVkFMVUUsQz0wO0M8VC5yb3dzLmxlbmd0aDtDKyspVC5yb3dXaWR0aFtDXTxMJiYoRT1DLEw9VC5yb3dXaWR0aFtDXSk7cmV0dXJuIEV9LHcucHJvdG90eXBlLmdldExvbmdlc3RSb3dJbmRleD1mdW5jdGlvbihUKXtmb3IodmFyIEU9LTEsTD1OdW1iZXIuTUlOX1ZBTFVFLEM9MDtDPFQucm93cy5sZW5ndGg7QysrKVQucm93V2lkdGhbQ10+TCYmKEU9QyxMPVQucm93V2lkdGhbQ10pO3JldHVybiBFfSx3LnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKFQsRSxMKXt2YXIgQz10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoVCk7aWYoQzwwKXJldHVybiEwO3ZhciBBPVQucm93V2lkdGhbQ107aWYoQStULmhvcml6b250YWxQYWRkaW5nK0U8PVQud2lkdGgpcmV0dXJuITA7dmFyIEk9MDtULnJvd0hlaWdodFtDXTxMJiZDPjAmJihJPUwrVC52ZXJ0aWNhbFBhZGRpbmctVC5yb3dIZWlnaHRbQ10pO3ZhciBEO1Qud2lkdGgtQT49RStULmhvcml6b250YWxQYWRkaW5nP0Q9KFQuaGVpZ2h0K0kpLyhBK0UrVC5ob3Jpem9udGFsUGFkZGluZyk6RD0oVC5oZWlnaHQrSSkvVC53aWR0aCxJPUwrVC52ZXJ0aWNhbFBhZGRpbmc7dmFyIGs7cmV0dXJuIFQud2lkdGg8RT9rPShULmhlaWdodCtJKS9FOms9KFQuaGVpZ2h0K0kpL1Qud2lkdGgsazwxJiYoaz0xL2spLEQ8MSYmKEQ9MS9EKSxEPGt9LHcucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKFQpe3ZhciBFPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KFQpLEw9VC5yb3dXaWR0aC5sZW5ndGgtMSxDPVQucm93c1tFXSxBPUNbQy5sZW5ndGgtMV0sST1BLndpZHRoK1QuaG9yaXpvbnRhbFBhZGRpbmc7aWYoVC53aWR0aC1ULnJvd1dpZHRoW0xdPkkmJkUhPUwpe0Muc3BsaWNlKC0xLDEpLFQucm93c1tMXS5wdXNoKEEpLFQucm93V2lkdGhbRV09VC5yb3dXaWR0aFtFXS1JLFQucm93V2lkdGhbTF09VC5yb3dXaWR0aFtMXStJLFQud2lkdGg9VC5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgoVCldO2Zvcih2YXIgRD1OdW1iZXIuTUlOX1ZBTFVFLGs9MDtrPEMubGVuZ3RoO2srKylDW2tdLmhlaWdodD5EJiYoRD1DW2tdLmhlaWdodCk7RT4wJiYoRCs9VC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBSPVQucm93SGVpZ2h0W0VdK1Qucm93SGVpZ2h0W0xdO1Qucm93SGVpZ2h0W0VdPUQsVC5yb3dIZWlnaHRbTF08QS5oZWlnaHQrVC52ZXJ0aWNhbFBhZGRpbmcmJihULnJvd0hlaWdodFtMXT1BLmhlaWdodCtULnZlcnRpY2FsUGFkZGluZyk7dmFyIFM9VC5yb3dIZWlnaHRbRV0rVC5yb3dIZWlnaHRbTF07VC5oZWlnaHQrPVMtUix0aGlzLnNoaWZ0VG9MYXN0Um93KFQpfX0sdy5wcm90b3R5cGUudGlsaW5nUHJlTGF5b3V0PWZ1bmN0aW9uKCl7aC5USUxFJiYodGhpcy5ncm91cFplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5jbGVhckNvbXBvdW5kcygpLHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpKX0sdy5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe2guVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSx3LnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgVD1bXSxFPSEwLEw7RTspe3ZhciBDPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksQT1bXTtFPSExO2Zvcih2YXIgST0wO0k8Qy5sZW5ndGg7SSsrKUw9Q1tJXSxMLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhTC5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmTC5nZXRDaGlsZCgpPT1udWxsJiYoQS5wdXNoKFtMLEwuZ2V0RWRnZXMoKVswXSxMLmdldE93bmVyKCldKSxFPSEwKTtpZihFPT0hMCl7Zm9yKHZhciBEPVtdLGs9MDtrPEEubGVuZ3RoO2srKylBW2tdWzBdLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYoRC5wdXNoKEFba10pLEFba11bMF0uZ2V0T3duZXIoKS5yZW1vdmUoQVtrXVswXSkpO1QucHVzaChEKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPVR9LHcucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKFQpe2Zvcih2YXIgRT1ULmxlbmd0aCxMPVRbRS0xXSxDLEE9MDtBPEwubGVuZ3RoO0ErKylDPUxbQV0sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKEMpLENbMl0uYWRkKENbMF0pLENbMl0uYWRkKENbMV0sQ1sxXS5zb3VyY2UsQ1sxXS50YXJnZXQpO1Quc3BsaWNlKFQubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sdy5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZT1mdW5jdGlvbihUKXt2YXIgRSxMLEM9VFswXTtDPT1UWzFdLnNvdXJjZT9MPVRbMV0udGFyZ2V0Okw9VFsxXS5zb3VyY2U7dmFyIEE9TC5zdGFydFgsST1MLmZpbmlzaFgsRD1MLnN0YXJ0WSxrPUwuZmluaXNoWSxSPTAsUz0wLE89MCxOPTAsUD1bUixPLFMsTl07aWYoRD4wKWZvcih2YXIgRj1BO0Y8PUk7RisrKVBbMF0rPXRoaXMuZ3JpZFtGXVtELTFdLmxlbmd0aCt0aGlzLmdyaWRbRl1bRF0ubGVuZ3RoLTE7aWYoSTx0aGlzLmdyaWQubGVuZ3RoLTEpZm9yKHZhciBGPUQ7Rjw9aztGKyspUFsxXSs9dGhpcy5ncmlkW0krMV1bRl0ubGVuZ3RoK3RoaXMuZ3JpZFtJXVtGXS5sZW5ndGgtMTtpZihrPHRoaXMuZ3JpZFswXS5sZW5ndGgtMSlmb3IodmFyIEY9QTtGPD1JO0YrKylQWzJdKz10aGlzLmdyaWRbRl1baysxXS5sZW5ndGgrdGhpcy5ncmlkW0ZdW2tdLmxlbmd0aC0xO2lmKEE+MClmb3IodmFyIEY9RDtGPD1rO0YrKylQWzNdKz10aGlzLmdyaWRbQS0xXVtGXS5sZW5ndGgrdGhpcy5ncmlkW0FdW0ZdLmxlbmd0aC0xO2Zvcih2YXIgQj15Lk1BWF9WQUxVRSwkLHosVz0wO1c8UC5sZW5ndGg7VysrKVBbV108Qj8oQj1QW1ddLCQ9MSx6PVcpOlBbV109PUImJiQrKztpZigkPT0zJiZCPT0wKVBbMF09PTAmJlBbMV09PTAmJlBbMl09PTA/RT0xOlBbMF09PTAmJlBbMV09PTAmJlBbM109PTA/RT0wOlBbMF09PTAmJlBbMl09PTAmJlBbM109PTA/RT0zOlBbMV09PTAmJlBbMl09PTAmJlBbM109PTAmJihFPTIpO2Vsc2UgaWYoJD09MiYmQj09MCl7dmFyIGo9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIpO1BbMF09PTAmJlBbMV09PTA/aj09MD9FPTA6RT0xOlBbMF09PTAmJlBbMl09PTA/aj09MD9FPTA6RT0yOlBbMF09PTAmJlBbM109PTA/aj09MD9FPTA6RT0zOlBbMV09PTAmJlBbMl09PTA/aj09MD9FPTE6RT0yOlBbMV09PTAmJlBbM109PTA/aj09MD9FPTE6RT0zOmo9PTA/RT0yOkU9M31lbHNlIGlmKCQ9PTQmJkI9PTApe3ZhciBqPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTtFPWp9ZWxzZSBFPXo7RT09MD9DLnNldENlbnRlcihMLmdldENlbnRlclgoKSxMLmdldENlbnRlclkoKS1MLmdldEhlaWdodCgpLzItZi5ERUZBVUxUX0VER0VfTEVOR1RILUMuZ2V0SGVpZ2h0KCkvMik6RT09MT9DLnNldENlbnRlcihMLmdldENlbnRlclgoKStMLmdldFdpZHRoKCkvMitmLkRFRkFVTFRfRURHRV9MRU5HVEgrQy5nZXRXaWR0aCgpLzIsTC5nZXRDZW50ZXJZKCkpOkU9PTI/Qy5zZXRDZW50ZXIoTC5nZXRDZW50ZXJYKCksTC5nZXRDZW50ZXJZKCkrTC5nZXRIZWlnaHQoKS8yK2YuREVGQVVMVF9FREdFX0xFTkdUSCtDLmdldEhlaWdodCgpLzIpOkMuc2V0Q2VudGVyKEwuZ2V0Q2VudGVyWCgpLUwuZ2V0V2lkdGgoKS8yLWYuREVGQVVMVF9FREdFX0xFTkdUSC1DLmdldFdpZHRoKCkvMixMLmdldENlbnRlclkoKSl9LGUuZXhwb3J0cz13fSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPXt9O2kubGF5b3V0QmFzZT1uKDApLGkuQ29TRUNvbnN0YW50cz1uKDEpLGkuQ29TRUVkZ2U9bigyKSxpLkNvU0VHcmFwaD1uKDMpLGkuQ29TRUdyYXBoTWFuYWdlcj1uKDQpLGkuQ29TRUxheW91dD1uKDYpLGkuQ29TRU5vZGU9big1KSxlLmV4cG9ydHM9aX1dKX0pfSk7dmFyIEwxZT1OaSgoY2IsX0IpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgY2I9PSJvYmplY3QiJiZ0eXBlb2YgX0I9PSJvYmplY3QiP19CLmV4cG9ydHM9cihBQigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImNvc2UtYmFzZSJdLHIpOnR5cGVvZiBjYj09Im9iamVjdCI/Y2IuY3l0b3NjYXBlQ29zZUJpbGtlbnQ9cihBQigpKTplLmN5dG9zY2FwZUNvc2VCaWxrZW50PXIoZS5jb3NlQmFzZSl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKGNiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj17fTtmdW5jdGlvbiBuKGkpe2lmKHJbaV0pcmV0dXJuIHJbaV0uZXhwb3J0czt2YXIgYT1yW2ldPXtpLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChhLmV4cG9ydHMsYSxhLmV4cG9ydHMsbiksYS5sPSEwLGEuZXhwb3J0c31yZXR1cm4gbyhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksbi5tPWUsbi5jPXIsbi5pPWZ1bmN0aW9uKGkpe3JldHVybiBpfSxuLmQ9ZnVuY3Rpb24oaSxhLHMpe24ubyhpLGEpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6c30pfSxuLm49ZnVuY3Rpb24oaSl7dmFyIGE9aSYmaS5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gaX0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gbi5kKGEsImEiLGEpLGF9LG4ubz1mdW5jdGlvbihpLGEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKX0sbi5wPSIiLG4obi5zPTEpfShbZnVuY3Rpb24oZSxyKXtlLmV4cG9ydHM9dH0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzLGE9bigwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLHM9bigwKS5Db1NFQ29uc3RhbnRzLGw9bigwKS5Db1NFTGF5b3V0LHU9bigwKS5Db1NFTm9kZSxoPW4oMCkubGF5b3V0QmFzZS5Qb2ludEQsZj1uKDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxkPXtyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIikscXVhbGl0eToiZGVmYXVsdCIsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJlZnJlc2g6MzAsZml0OiEwLHBhZGRpbmc6MTAscmFuZG9taXplOiEwLG5vZGVSZXB1bHNpb246NDUwMCxpZGVhbEVkZ2VMZW5ndGg6NTAsZWRnZUVsYXN0aWNpdHk6LjQ1LG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsYW5pbWF0ZToiZW5kIixhbmltYXRpb25EdXJhdGlvbjo1MDAsdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOjEwLHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOjEwLGdyYXZpdHlSYW5nZUNvbXBvdW5kOjEuNSxncmF2aXR5Q29tcG91bmQ6MSxncmF2aXR5UmFuZ2U6My44LGluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsOi41fTtmdW5jdGlvbiBwKHYseCl7dmFyIGI9e307Zm9yKHZhciB3IGluIHYpYlt3XT12W3ddO2Zvcih2YXIgdyBpbiB4KWJbd109eFt3XTtyZXR1cm4gYn1vKHAsImV4dGVuZCIpO2Z1bmN0aW9uIG0odil7dGhpcy5vcHRpb25zPXAoZCx2KSxnKHRoaXMub3B0aW9ucyl9byhtLCJfQ29TRUxheW91dCIpO3ZhciBnPW8oZnVuY3Rpb24oeCl7eC5ub2RlUmVwdWxzaW9uIT1udWxsJiYocy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD1hLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPXgubm9kZVJlcHVsc2lvbikseC5pZGVhbEVkZ2VMZW5ndGghPW51bGwmJihzLkRFRkFVTFRfRURHRV9MRU5HVEg9YS5ERUZBVUxUX0VER0VfTEVOR1RIPXguaWRlYWxFZGdlTGVuZ3RoKSx4LmVkZ2VFbGFzdGljaXR5IT1udWxsJiYocy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1hLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPXguZWRnZUVsYXN0aWNpdHkpLHgubmVzdGluZ0ZhY3RvciE9bnVsbCYmKHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1hLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9eC5uZXN0aW5nRmFjdG9yKSx4LmdyYXZpdHkhPW51bGwmJihzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD1hLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD14LmdyYXZpdHkpLHgubnVtSXRlciE9bnVsbCYmKHMuTUFYX0lURVJBVElPTlM9YS5NQVhfSVRFUkFUSU9OUz14Lm51bUl0ZXIpLHguZ3Jhdml0eVJhbmdlIT1udWxsJiYocy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWEuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj14LmdyYXZpdHlSYW5nZSkseC5ncmF2aXR5Q29tcG91bmQhPW51bGwmJihzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD14LmdyYXZpdHlDb21wb3VuZCkseC5ncmF2aXR5UmFuZ2VDb21wb3VuZCE9bnVsbCYmKHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eC5ncmF2aXR5UmFuZ2VDb21wb3VuZCkseC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCE9bnVsbCYmKHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9eC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCkseC5xdWFsaXR5PT0iZHJhZnQiP2kuUVVBTElUWT0wOngucXVhbGl0eT09InByb29mIj9pLlFVQUxJVFk9MjppLlFVQUxJVFk9MSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1hLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1pLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz14Lm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyxzLkRFRkFVTFRfSU5DUkVNRU5UQUw9YS5ERUZBVUxUX0lOQ1JFTUVOVEFMPWkuREVGQVVMVF9JTkNSRU1FTlRBTD0heC5yYW5kb21pemUscy5BTklNQVRFPWEuQU5JTUFURT1pLkFOSU1BVEU9eC5hbmltYXRlLHMuVElMRT14LnRpbGUscy5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgeC50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/eC50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOngudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgeC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj94LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTp4LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsfSwiZ2V0VXNlck9wdGlvbnMiKTttLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdix4LGI9dGhpcy5vcHRpb25zLHc9dGhpcy5pZFRvTE5vZGU9e30sXz10aGlzLmxheW91dD1uZXcgbCxUPXRoaXM7VC5zdG9wcGVkPSExLHRoaXMuY3k9dGhpcy5vcHRpb25zLmN5LHRoaXMuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp0aGlzfSk7dmFyIEU9Xy5uZXdHcmFwaE1hbmFnZXIoKTt0aGlzLmdtPUU7dmFyIEw9dGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKSxDPXRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCk7dGhpcy5yb290PUUuYWRkUm9vdCgpLHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsdGhpcy5nZXRUb3BNb3N0Tm9kZXMoTCksXyk7Zm9yKHZhciBBPTA7QTxDLmxlbmd0aDtBKyspe3ZhciBJPUNbQV0sRD10aGlzLmlkVG9MTm9kZVtJLmRhdGEoInNvdXJjZSIpXSxrPXRoaXMuaWRUb0xOb2RlW0kuZGF0YSgidGFyZ2V0IildO2lmKEQhPT1rJiZELmdldEVkZ2VzQmV0d2VlbihrKS5sZW5ndGg9PTApe3ZhciBSPUUuYWRkKF8ubmV3RWRnZSgpLEQsayk7Ui5pZD1JLmlkKCl9fXZhciBTPW8oZnVuY3Rpb24oUCxGKXt0eXBlb2YgUD09Im51bWJlciImJihQPUYpO3ZhciBCPVAuZGF0YSgiaWQiKSwkPVQuaWRUb0xOb2RlW0JdO3JldHVybnt4OiQuZ2V0UmVjdCgpLmdldENlbnRlclgoKSx5OiQuZ2V0UmVjdCgpLmdldENlbnRlclkoKX19LCJnZXRQb3NpdGlvbnMiKSxPPW8oZnVuY3Rpb24gTigpe2Zvcih2YXIgUD1vKGZ1bmN0aW9uKCl7Yi5maXQmJmIuY3kuZml0KGIuZWxlcyxiLnBhZGRpbmcpLHZ8fCh2PSEwLFQuY3kub25lKCJsYXlvdXRyZWFkeSIsYi5yZWFkeSksVC5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OlR9KSl9LCJhZnRlclJlcG9zaXRpb24iKSxGPVQub3B0aW9ucy5yZWZyZXNoLEIsJD0wOyQ8RiYmIUI7JCsrKUI9VC5zdG9wcGVkfHxULmxheW91dC50aWNrKCk7aWYoQil7Xy5jaGVja0xheW91dFN1Y2Nlc3MoKSYmIV8uaXNTdWJMYXlvdXQmJl8uZG9Qb3N0TGF5b3V0KCksXy50aWxpbmdQb3N0TGF5b3V0JiZfLnRpbGluZ1Bvc3RMYXlvdXQoKSxfLmlzTGF5b3V0RmluaXNoZWQ9ITAsVC5vcHRpb25zLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoUyksUCgpLFQuY3kub25lKCJsYXlvdXRzdG9wIixULm9wdGlvbnMuc3RvcCksVC5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6VH0pLHgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHgpLHY9ITE7cmV0dXJufXZhciB6PVQubGF5b3V0LmdldFBvc2l0aW9uc0RhdGEoKTtiLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oVyxqKXtpZih0eXBlb2YgVz09Im51bWJlciImJihXPWopLCFXLmlzUGFyZW50KCkpe2Zvcih2YXIgSz1XLmlkKCksaWU9eltLXSxRPVc7aWU9PW51bGwmJihpZT16W1EuZGF0YSgicGFyZW50IildfHx6WyJEdW1teUNvbXBvdW5kXyIrUS5kYXRhKCJwYXJlbnQiKV0seltLXT1pZSxRPVEucGFyZW50KClbMF0sUSE9bnVsbCk7KTtyZXR1cm4gaWUhPW51bGw/e3g6aWUueCx5OmllLnl9Ont4OlcucG9zaXRpb24oIngiKSx5OlcucG9zaXRpb24oInkiKX19fSksUCgpLHg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKE4pfSwiaXRlcmF0ZUFuaW1hdGVkIik7cmV0dXJuIF8uYWRkTGlzdGVuZXIoImxheW91dHN0YXJ0ZWQiLGZ1bmN0aW9uKCl7VC5vcHRpb25zLmFuaW1hdGU9PT0iZHVyaW5nIiYmKHg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKE8pKX0pLF8ucnVuTGF5b3V0KCksdGhpcy5vcHRpb25zLmFuaW1hdGUhPT0iZHVyaW5nIiYmKFQub3B0aW9ucy5lbGVzLm5vZGVzKCkubm90KCI6cGFyZW50IikubGF5b3V0UG9zaXRpb25zKFQsVC5vcHRpb25zLFMpLHY9ITEpLHRoaXN9LG0ucHJvdG90eXBlLmdldFRvcE1vc3ROb2Rlcz1mdW5jdGlvbih2KXtmb3IodmFyIHg9e30sYj0wO2I8di5sZW5ndGg7YisrKXhbdltiXS5pZCgpXT0hMDt2YXIgdz12LmZpbHRlcihmdW5jdGlvbihfLFQpe3R5cGVvZiBfPT0ibnVtYmVyIiYmKF89VCk7Zm9yKHZhciBFPV8ucGFyZW50KClbMF07RSE9bnVsbDspe2lmKHhbRS5pZCgpXSlyZXR1cm4hMTtFPUUucGFyZW50KClbMF19cmV0dXJuITB9KTtyZXR1cm4gd30sbS5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuTGlzdD1mdW5jdGlvbih2LHgsYil7Zm9yKHZhciB3PXgubGVuZ3RoLF89MDtfPHc7XysrKXt2YXIgVD14W19dLEU9VC5jaGlsZHJlbigpLEwsQz1ULmxheW91dERpbWVuc2lvbnMoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczp0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzfSk7aWYoVC5vdXRlcldpZHRoKCkhPW51bGwmJlQub3V0ZXJIZWlnaHQoKSE9bnVsbD9MPXYuYWRkKG5ldyB1KGIuZ3JhcGhNYW5hZ2VyLG5ldyBoKFQucG9zaXRpb24oIngiKS1DLncvMixULnBvc2l0aW9uKCJ5IiktQy5oLzIpLG5ldyBmKHBhcnNlRmxvYXQoQy53KSxwYXJzZUZsb2F0KEMuaCkpKSk6TD12LmFkZChuZXcgdSh0aGlzLmdyYXBoTWFuYWdlcikpLEwuaWQ9VC5kYXRhKCJpZCIpLEwucGFkZGluZ0xlZnQ9cGFyc2VJbnQoVC5jc3MoInBhZGRpbmciKSksTC5wYWRkaW5nVG9wPXBhcnNlSW50KFQuY3NzKCJwYWRkaW5nIikpLEwucGFkZGluZ1JpZ2h0PXBhcnNlSW50KFQuY3NzKCJwYWRkaW5nIikpLEwucGFkZGluZ0JvdHRvbT1wYXJzZUludChULmNzcygicGFkZGluZyIpKSx0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiZULmlzUGFyZW50KCkpe3ZhciBBPVQuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExfSkudyxJPVQuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExfSkuaCxEPVQuY3NzKCJ0ZXh0LWhhbGlnbiIpO0wubGFiZWxXaWR0aD1BLEwubGFiZWxIZWlnaHQ9SSxMLmxhYmVsUG9zPUR9aWYodGhpcy5pZFRvTE5vZGVbVC5kYXRhKCJpZCIpXT1MLGlzTmFOKEwucmVjdC54KSYmKEwucmVjdC54PTApLGlzTmFOKEwucmVjdC55KSYmKEwucmVjdC55PTApLEUhPW51bGwmJkUubGVuZ3RoPjApe3ZhciBrO2s9Yi5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoYi5uZXdHcmFwaCgpLEwpLHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdChrLEUsYil9fX0sbS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpc307dmFyIHk9byhmdW5jdGlvbih4KXt4KCJsYXlvdXQiLCJjb3NlLWJpbGtlbnQiLG0pfSwicmVnaXN0ZXIiKTt0eXBlb2YgY3l0b3NjYXBlPCJ1IiYmeShjeXRvc2NhcGUpLGUuZXhwb3J0cz15fV0pfSl9KTtmdW5jdGlvbiBfdHQodCxlLHIsbixpKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLngrIiwiK2EueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGkud2lkdGgtZSkvMisiLCAiK3IrIikiKX12YXIgVHR0LGt0dCxFdHQsU3R0LEN0dCxBdHQsTHR0LER0dCxEMWUsTjFlLFIxZT1NKCgpPT57InVzZSBzdHJpY3QiO0RsKCk7aHIoKTtUdHQ9MTIsa3R0PW8oZnVuY3Rpb24odCxlLHIsbil7ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIityLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIit0LnR5cGUyU3RyKHIudHlwZSkpLmF0dHIoImQiLGBNMCAke3IuaGVpZ2h0LTV9IHYkey1yLmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7ci53aWR0aC0yKjV9IHE1LDAgNSw1IHYke3IuaGVpZ2h0LTV9IEgwIFpgKSxlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrbikuYXR0cigieDEiLDApLmF0dHIoInkxIixyLmhlaWdodCkuYXR0cigieDIiLHIud2lkdGgpLmF0dHIoInkyIixyLmhlaWdodCl9LCJkZWZhdWx0QmtnIiksRXR0PW8oZnVuY3Rpb24odCxlLHIpe2UuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KS5hdHRyKCJ3aWR0aCIsci53aWR0aCl9LCJyZWN0QmtnIiksU3R0PW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIud2lkdGgsaT1yLmhlaWdodCxhPS4xNSpuLHM9LjI1Km4sbD0uMzUqbix1PS4yKm47ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIityLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIit0LnR5cGUyU3RyKHIudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke2F9LCR7YX0gMCAwLDEgJHtuKi4yNX0sJHstMSpuKi4xfQogICAgICBhJHtsfSwke2x9IDEgMCwxICR7biouNH0sJHstMSpuKi4xfQogICAgICBhJHtzfSwke3N9IDEgMCwxICR7biouMzV9LCR7MSpuKi4yfQoKICAgICAgYSR7YX0sJHthfSAxIDAsMSAke24qLjE1fSwkezEqaSouMzV9CiAgICAgIGEke3V9LCR7dX0gMSAwLDEgJHstMSpuKi4xNX0sJHsxKmkqLjY1fQoKICAgICAgYSR7c30sJHthfSAxIDAsMSAkey0xKm4qLjI1fSwke24qLjE1fQogICAgICBhJHtsfSwke2x9IDEgMCwxICR7LTEqbiouNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwxICR7LTEqbiouMjV9LCR7LTEqbiouMTV9CgogICAgICBhJHthfSwke2F9IDEgMCwxICR7LTEqbiouMX0sJHstMSppKi4zNX0KICAgICAgYSR7dX0sJHt1fSAxIDAsMSAke24qLjF9LCR7LTEqaSouNjV9CgogICAgSDAgVjAgWmApfSwiY2xvdWRCa2ciKSxDdHQ9byhmdW5jdGlvbih0LGUscil7bGV0IG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9LjE1Km47ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIityLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIit0LnR5cGUyU3RyKHIudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4yNX0sJHstMSppKi4xfQogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4yNX0sJHsxKmkqLjF9CgogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMTV9LCR7MSppKi4zM30KICAgICAgYSR7YSouOH0sJHthKi44fSAxIDAsMCAwLCR7MSppKi4zNH0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjE1fSwkezEqaSouMzN9CgogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMjV9LCR7aSouMTV9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwkey0xKmkqLjE1fQoKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjF9LCR7LTEqaSouMzN9CiAgICAgIGEke2EqLjh9LCR7YSouOH0gMSAwLDAgMCwkey0xKmkqLjM0fQogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMX0sJHstMSppKi4zM30KCiAgICBIMCBWMCBaYCl9LCJiYW5nQmtnIiksQXR0PW8oZnVuY3Rpb24odCxlLHIpe2UuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJpZCIsIm5vZGUtIityLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIit0LnR5cGUyU3RyKHIudHlwZSkpLmF0dHIoInIiLHIud2lkdGgvMil9LCJjaXJjbGVCa2ciKTtvKF90dCwiaW5zZXJ0UG9seWdvblNoYXBlIik7THR0PW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIuaGVpZ2h0LGE9bi80LHM9ci53aWR0aC1yLnBhZGRpbmcrMiphLGw9W3t4OmEseTowfSx7eDpzLWEseTowfSx7eDpzLHk6LW4vMn0se3g6cy1hLHk6LW59LHt4OmEseTotbn0se3g6MCx5Oi1uLzJ9XTtfdHQoZSxzLG4sbCxyKX0sImhleGFnb25Ca2ciKSxEdHQ9byhmdW5jdGlvbih0LGUscil7ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIityLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIit0LnR5cGUyU3RyKHIudHlwZSkpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpLmF0dHIoInJ4IixyLnBhZGRpbmcpLmF0dHIoInJ5IixyLnBhZGRpbmcpLmF0dHIoIndpZHRoIixyLndpZHRoKX0sInJvdW5kZWRSZWN0QmtnIiksRDFlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbixpKXtsZXQgYT1pLmh0bWxMYWJlbHMscz1uJShUdHQtMSksbD1lLmFwcGVuZCgiZyIpO3Iuc2VjdGlvbj1zO2xldCB1PSJzZWN0aW9uLSIrcztzPDAmJih1Kz0iIHNlY3Rpb24tcm9vdCIpLGwuYXR0cigiY2xhc3MiLChyLmNsYXNzP3IuY2xhc3MrIiAiOiIiKSsibWluZG1hcC1ub2RlICIrdSk7bGV0IGg9bC5hcHBlbmQoImciKSxmPWwuYXBwZW5kKCJnIiksZD1yLmRlc2NyLnJlcGxhY2UoLyg8YnJcLyo+KS9nLGAKYCk7YXdhaXQgU2koZixkLHt1c2VIdG1sTGFiZWxzOmEsd2lkdGg6ci53aWR0aCxjbGFzc2VzOiJtaW5kbWFwLW5vZGUtbGFiZWwifSxpKSxhfHxmLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBwPWYubm9kZSgpLmdldEJCb3goKSxbbV09Rm8oaS5mb250U2l6ZSk7aWYoci5oZWlnaHQ9cC5oZWlnaHQrbSoxLjEqLjUrci5wYWRkaW5nLHIud2lkdGg9cC53aWR0aCsyKnIucGFkZGluZyxyLmljb24paWYoci50eXBlPT09dC5ub2RlVHlwZS5DSVJDTEUpci5oZWlnaHQrPTUwLHIud2lkdGgrPTUwLGwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigiaGVpZ2h0IiwiNTBweCIpLmF0dHIoIndpZHRoIixyLndpZHRoKS5hdHRyKCJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjsiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwiaWNvbi1jb250YWluZXIiKS5hcHBlbmQoImkiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi0iK3MrIiAiK3IuaWNvbiksZi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityLndpZHRoLzIrIiwgIisoci5oZWlnaHQvMi0xLjUqci5wYWRkaW5nKSsiKSIpO2Vsc2V7ci53aWR0aCs9NTA7bGV0IGc9ci5oZWlnaHQ7ci5oZWlnaHQ9TWF0aC5tYXgoZyw2MCk7bGV0IHk9TWF0aC5hYnMoci5oZWlnaHQtZyk7bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjYwcHgiKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KS5hdHRyKCJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjttYXJnaW4tdG9wOiIreS8yKyJweDsiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwiaWNvbi1jb250YWluZXIiKS5hcHBlbmQoImkiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi0iK3MrIiAiK3IuaWNvbiksZi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoMjUrci53aWR0aC8yKSsiLCAiKyh5LzIrci5wYWRkaW5nLzIpKyIpIil9ZWxzZSBpZihhKXtsZXQgZz0oci53aWR0aC1wLndpZHRoKS8yLHk9KHIuaGVpZ2h0LXAuaGVpZ2h0KS8yO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZysiLCAiK3krIikiKX1lbHNle2xldCBnPXIud2lkdGgvMix5PXIucGFkZGluZy8yO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZysiLCAiK3krIikiKX1zd2l0Y2goci50eXBlKXtjYXNlIHQubm9kZVR5cGUuREVGQVVMVDprdHQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLlJPVU5ERURfUkVDVDpEdHQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLlJFQ1Q6RXR0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5DSVJDTEU6aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityLndpZHRoLzIrIiwgIisgK3IuaGVpZ2h0LzIrIikiKSxBdHQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLkNMT1VEOlN0dCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuQkFORzpDdHQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLkhFWEFHT046THR0KHQsaCxyLHMpO2JyZWFrfXJldHVybiB0LnNldEVsZW1lbnRGb3JJZChyLmlkLGwpLHIuaGVpZ2h0fSwiZHJhd05vZGUiKSxOMWU9byhmdW5jdGlvbih0LGUpe2xldCByPXQuZ2V0RWxlbWVudEJ5SWQoZS5pZCksbj1lLnh8fDAsaT1lLnl8fDA7ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsIitpKyIpIil9LCJwb3NpdGlvbk5vZGUiKX0pO2FzeW5jIGZ1bmN0aW9uIEkxZSh0LGUscixuLGkpe2F3YWl0IEQxZSh0LGUscixuLGkpLHIuY2hpbGRyZW4mJmF3YWl0IFByb21pc2UuYWxsKHIuY2hpbGRyZW4ubWFwKChhLHMpPT5JMWUodCxlLGEsbjwwP3M6bixpKSkpfWZ1bmN0aW9uIE50dCh0LGUpe2UuZWRnZXMoKS5tYXAoKHIsbik9PntsZXQgaT1yLmRhdGEoKTtpZihyWzBdLl9wcml2YXRlLmJvZHlCb3VuZHMpe2xldCBhPXJbMF0uX3ByaXZhdGUucnNjcmF0Y2g7WS50cmFjZSgiRWRnZTogIixuLGkpLHQuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsYE0gJHthLnN0YXJ0WH0sJHthLnN0YXJ0WX0gTCAke2EubWlkWH0sJHthLm1pZFl9IEwke2EuZW5kWH0sJHthLmVuZFl9IGApLmF0dHIoImNsYXNzIiwiZWRnZSBzZWN0aW9uLWVkZ2UtIitpLnNlY3Rpb24rIiBlZGdlLWRlcHRoLSIraS5kZXB0aCl9fSl9ZnVuY3Rpb24gTzFlKHQsZSxyLG4pe2UuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOnQuaWQudG9TdHJpbmcoKSxsYWJlbFRleHQ6dC5kZXNjcixoZWlnaHQ6dC5oZWlnaHQsd2lkdGg6dC53aWR0aCxsZXZlbDpuLG5vZGVJZDp0LmlkLHBhZGRpbmc6dC5wYWRkaW5nLHR5cGU6dC50eXBlfSxwb3NpdGlvbjp7eDp0LngseTp0Lnl9fSksdC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5mb3JFYWNoKGk9PntPMWUoaSxlLHIsbisxKSxlLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntpZDpgJHt0LmlkfV8ke2kuaWR9YCxzb3VyY2U6dC5pZCx0YXJnZXQ6aS5pZCxkZXB0aDpuLHNlY3Rpb246aS5zZWN0aW9ufX0pfSl9ZnVuY3Rpb24gUnR0KHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj16ZSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJjeSIpLmF0dHIoInN0eWxlIiwiZGlzcGxheTpub25lIiksaT1zbCh7Y29udGFpbmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjeSIpLHN0eWxlOlt7c2VsZWN0b3I6ImVkZ2UiLHN0eWxlOnsiY3VydmUtc3R5bGUiOiJiZXppZXIifX1dfSk7bi5yZW1vdmUoKSxPMWUodCxpLGUsMCksaS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5sYXlvdXREaW1lbnNpb25zPSgpPT57bGV0IHM9YS5kYXRhKCk7cmV0dXJue3c6cy53aWR0aCxoOnMuaGVpZ2h0fX19KSxpLmxheW91dCh7bmFtZToiY29zZS1iaWxrZW50IixxdWFsaXR5OiJwcm9vZiIsc3R5bGVFbmFibGVkOiExLGFuaW1hdGU6ITF9KS5ydW4oKSxpLnJlYWR5KGE9PntZLmluZm8oIlJlYWR5IixhKSxyKGkpfSl9KX1mdW5jdGlvbiBNdHQodCxlKXtlLm5vZGVzKCkubWFwKChyLG4pPT57bGV0IGk9ci5kYXRhKCk7aS54PXIucG9zaXRpb24oKS54LGkueT1yLnBvc2l0aW9uKCkueSxOMWUodCxpKTtsZXQgYT10LmdldEVsZW1lbnRCeUlkKGkubm9kZUlkKTtZLmluZm8oIklkOiIsbiwiUG9zaXRpb246ICgiLHIucG9zaXRpb24oKS54LCIsICIsci5wb3NpdGlvbigpLnksIikiLGkpLGEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ci5wb3NpdGlvbigpLngtaS53aWR0aC8yfSwgJHtyLnBvc2l0aW9uKCkueS1pLmhlaWdodC8yfSlgKSxhLmF0dHIoImF0dHIiLGBhcGEtJHtufSlgKX0pfXZhciBNMWUsSXR0LFAxZSxCMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrQigpO00xZT1rYShMMWUoKSwxKTttcigpO1Z0KCk7aHQoKTtIdSgpO25pKCk7UjFlKCk7aHMoKTtzbC51c2UoTTFlLmRlZmF1bHQpO28oSTFlLCJkcmF3Tm9kZXMiKTtvKE50dCwiZHJhd0VkZ2VzIik7byhPMWUsImFkZE5vZGVzIik7byhSdHQsImxheW91dE1pbmRtYXAiKTtvKE10dCwicG9zaXRpb25Ob2RlcyIpO0l0dD1vKGFzeW5jKHQsZSxyLG4pPT57WS5kZWJ1ZyhgUmVuZGVyaW5nIG1pbmRtYXAgZGlhZ3JhbQpgK3QpO2xldCBpPW4uZGIsYT1pLmdldE1pbmRtYXAoKTtpZighYSlyZXR1cm47bGV0IHM9ZGUoKTtzLmh0bWxMYWJlbHM9ITE7bGV0IGw9T2EoZSksdT1sLmFwcGVuZCgiZyIpO3UuYXR0cigiY2xhc3MiLCJtaW5kbWFwLWVkZ2VzIik7bGV0IGg9bC5hcHBlbmQoImciKTtoLmF0dHIoImNsYXNzIiwibWluZG1hcC1ub2RlcyIpLGF3YWl0IEkxZShpLGgsYSwtMSxzKTtsZXQgZj1hd2FpdCBSdHQoYSxzKTtOdHQodSxmKSxNdHQoaSxmKSxfbyh2b2lkIDAsbCxzLm1pbmRtYXA/LnBhZGRpbmc/P3VyLm1pbmRtYXAucGFkZGluZyxzLm1pbmRtYXA/LnVzZU1heFdpZHRoPz91ci5taW5kbWFwLnVzZU1heFdpZHRoKX0sImRyYXciKSxQMWU9e2RyYXc6SXR0fX0pO3ZhciBPdHQsUHR0LEYxZSx6MWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbygpO090dD1vKHQ9PntsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHQuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRbImxpbmVDb2xvciIrcl09dFsibGluZUNvbG9yIityXXx8dFsiY1NjYWxlSW52IityXSxhYSh0WyJsaW5lQ29sb3IiK3JdKT90WyJsaW5lQ29sb3IiK3JdPUR0KHRbImxpbmVDb2xvciIrcl0sMjApOnRbImxpbmVDb2xvciIrcl09QnQodFsibGluZUNvbG9yIityXSwyMCk7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl7bGV0IG49IiIrKDE3LTMqcik7ZSs9YAogICAgLnNlY3Rpb24tJHtyLTF9IHJlY3QsIC5zZWN0aW9uLSR7ci0xfSBwYXRoLCAuc2VjdGlvbi0ke3ItMX0gY2lyY2xlLCAuc2VjdGlvbi0ke3ItMX0gcG9seWdvbiwgLnNlY3Rpb24tJHtyLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHt0WyJjU2NhbGUiK3JdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7ci0xfSB0ZXh0IHsKICAgICBmaWxsOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7ci0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtyLTF9ewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke3ItMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtufTsKICAgIH0KICAgIC5zZWN0aW9uLSR7ci0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZUludiIrcl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiBsaWdodGdyYXk7CiAgICB9CiAgICAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6ICNlZmVmZWY7CiAgICB9CiAgICBgfXJldHVybiBlfSwiZ2VuU2VjdGlvbnMiKSxQdHQ9byh0PT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAke090dCh0KX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUsIC5zZWN0aW9uLXJvb3QgcG9seWdvbiAgewogICAgZmlsbDogJHt0LmdpdDB9OwogIH0KICAuc2VjdGlvbi1yb290IHRleHQgewogICAgZmlsbDogJHt0LmdpdEJyYW5jaExhYmVsMH07CiAgfQogIC5pY29uLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6MTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIC5lZGdlIHsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5taW5kbWFwLW5vZGUtbGFiZWwgewogICAgZHk6IDFlbTsKICAgIGFsaWdubWVudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQpgLCJnZXRTdHlsZXMiKSxGMWU9UHR0fSk7dmFyIEcxZT17fTt2cihHMWUse2RpYWdyYW06KCk9PkJ0dH0pO3ZhciBCdHQsJDFlPU0oKCk9PnsidXNlIHN0cmljdCI7Q3BlKCk7THBlKCk7QjFlKCk7ejFlKCk7QnR0PXtkYjpfcGUscmVuZGVyZXI6UDFlLHBhcnNlcjpTcGUsc3R5bGVzOkYxZX19KTt2YXIgTEIsSDFlLFcxZT1NKCgpPT57InVzZSBzdHJpY3QiO0xCPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihMLEMsQSxJKXtmb3IoQT1BfHx7fSxJPUwubGVuZ3RoO0ktLTtBW0xbSV1dPUMpO3JldHVybiBBfSwibyIpLGU9WzEsNF0scj1bMSwxM10sbj1bMSwxMl0saT1bMSwxNV0sYT1bMSwxNl0scz1bMSwyMF0sbD1bMSwxOV0sdT1bNiw3LDhdLGg9WzEsMjZdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzYsNywxMV0sbT1bMSwzMV0sZz1bNiw3LDExLDI0XSx5PVsxLDYsMTMsMTYsMTcsMjAsMjNdLHY9WzEsMzVdLHg9WzEsMzZdLGI9WzEsNiw3LDExLDEzLDE2LDE3LDIwLDIzXSx3PVsxLDM4XSxfPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1pbmRNYXA6NCxzcGFjZUxpbmVzOjUsU1BBQ0VMSU5FOjYsTkw6NyxLQU5CQU46OCxkb2N1bWVudDo5LHN0b3A6MTAsRU9GOjExLHN0YXRlbWVudDoxMixTUEFDRUxJU1Q6MTMsbm9kZToxNCxzaGFwZURhdGE6MTUsSUNPTjoxNixDTEFTUzoxNyxub2RlV2l0aElkOjE4LG5vZGVXaXRob3V0SWQ6MTksTk9ERV9EU1RBUlQ6MjAsTk9ERV9ERVNDUjoyMSxOT0RFX0RFTkQ6MjIsTk9ERV9JRDoyMyxTSEFQRV9EQVRBOjI0LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJTUEFDRUxJTkUiLDc6Ik5MIiw4OiJLQU5CQU4iLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE2OiJJQ09OIiwxNzoiQ0xBU1MiLDIwOiJOT0RFX0RTVEFSVCIsMjE6Ik5PREVfREVTQ1IiLDIyOiJOT0RFX0RFTkQiLDIzOiJOT0RFX0lEIiwyNDoiU0hBUEVfREFUQSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbNSwxXSxbNSwyXSxbNSwyXSxbNCwyXSxbNCwzXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFs5LDNdLFs5LDJdLFsxMiwzXSxbMTIsMl0sWzEyLDJdLFsxMiwyXSxbMTIsMV0sWzEyLDJdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOSwzXSxbMTgsMV0sWzE4LDRdLFsxNSwyXSxbMTUsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihDLEEsSSxELGssUixTKXt2YXIgTz1SLmxlbmd0aC0xO3N3aXRjaChrKXtjYXNlIDY6Y2FzZSA3OnJldHVybiBEO2Nhc2UgODpELmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MICIpO2JyZWFrO2Nhc2UgOTpELmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOkQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTI6RC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YyICIpO2JyZWFrO2Nhc2UgMTU6RC5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLFJbTy0xXS5pZCksRC5hZGROb2RlKFJbTy0yXS5sZW5ndGgsUltPLTFdLmlkLFJbTy0xXS5kZXNjcixSW08tMV0udHlwZSxSW09dKTticmVhaztjYXNlIDE2OkQuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixSW09dLmlkKSxELmFkZE5vZGUoUltPLTFdLmxlbmd0aCxSW09dLmlkLFJbT10uZGVzY3IsUltPXS50eXBlKTticmVhaztjYXNlIDE3OkQuZ2V0TG9nZ2VyKCkudHJhY2UoIkljb246ICIsUltPXSksRC5kZWNvcmF0ZU5vZGUoe2ljb246UltPXX0pO2JyZWFrO2Nhc2UgMTg6Y2FzZSAyMzpELmRlY29yYXRlTm9kZSh7Y2xhc3M6UltPXX0pO2JyZWFrO2Nhc2UgMTk6RC5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSVNUIik7YnJlYWs7Y2FzZSAyMDpELmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLFJbTy0xXS5pZCksRC5hZGROb2RlKDAsUltPLTFdLmlkLFJbTy0xXS5kZXNjcixSW08tMV0udHlwZSxSW09dKTticmVhaztjYXNlIDIxOkQuZ2V0TG9nZ2VyKCkudHJhY2UoIk5vZGU6ICIsUltPXS5pZCksRC5hZGROb2RlKDAsUltPXS5pZCxSW09dLmRlc2NyLFJbT10udHlwZSk7YnJlYWs7Y2FzZSAyMjpELmRlY29yYXRlTm9kZSh7aWNvbjpSW09dfSk7YnJlYWs7Y2FzZSAyNzpELmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixSW08tMl0pLHRoaXMuJD17aWQ6UltPLTFdLGRlc2NyOlJbTy0xXSx0eXBlOkQuZ2V0VHlwZShSW08tMl0sUltPXSl9O2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXtpZDpSW09dLGRlc2NyOlJbT10sdHlwZTowfTticmVhaztjYXNlIDI5OkQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLFJbTy0zXSksdGhpcy4kPXtpZDpSW08tM10sZGVzY3I6UltPLTFdLHR5cGU6RC5nZXRUeXBlKFJbTy0yXSxSW09dKX07YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9UltPLTFdK1JbT107YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9UltPXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sODplfSx7MTpbM119LHsxOlsyLDFdfSx7NDo2LDY6WzEsN10sNzpbMSw4XSw4OmV9LHs2OnIsNzpbMSwxMF0sOTo5LDEyOjExLDEzOm4sMTQ6MTQsMTY6aSwxNzphLDE4OjE3LDE5OjE4LDIwOnMsMjM6bH0sdCh1LFsyLDNdKSx7MTpbMiwyXX0sdCh1LFsyLDRdKSx0KHUsWzIsNV0pLHsxOlsyLDZdLDY6ciwxMjoyMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHs2OnIsOToyMiwxMjoxMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHs2OmgsNzpmLDEwOjIzLDExOmR9LHQocCxbMiwyNF0sezE4OjE3LDE5OjE4LDE0OjI3LDE2OlsxLDI4XSwxNzpbMSwyOV0sMjA6cywyMzpsfSksdChwLFsyLDE5XSksdChwLFsyLDIxXSx7MTU6MzAsMjQ6bX0pLHQocCxbMiwyMl0pLHQocCxbMiwyM10pLHQoZyxbMiwyNV0pLHQoZyxbMiwyNl0pLHQoZyxbMiwyOF0sezIwOlsxLDMyXX0pLHsyMTpbMSwzM119LHs2OmgsNzpmLDEwOjM0LDExOmR9LHsxOlsyLDddLDY6ciwxMjoyMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHQoeSxbMiwxNF0sezc6diwxMTp4fSksdChiLFsyLDhdKSx0KGIsWzIsOV0pLHQoYixbMiwxMF0pLHQocCxbMiwxNl0sezE1OjM3LDI0Om19KSx0KHAsWzIsMTddKSx0KHAsWzIsMThdKSx0KHAsWzIsMjBdLHsyNDp3fSksdChnLFsyLDMxXSksezIxOlsxLDM5XX0sezIyOlsxLDQwXX0sdCh5LFsyLDEzXSx7Nzp2LDExOnh9KSx0KGIsWzIsMTFdKSx0KGIsWzIsMTJdKSx0KHAsWzIsMTVdLHsyNDp3fSksdChnLFsyLDMwXSksezIyOlsxLDQxXX0sdChnLFsyLDI3XSksdChnLFsyLDI5XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihDLEEpe2lmKEEucmVjb3ZlcmFibGUpdGhpcy50cmFjZShDKTtlbHNle3ZhciBJPW5ldyBFcnJvcihDKTt0aHJvdyBJLmhhc2g9QSxJfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKEMpe3ZhciBBPXRoaXMsST1bMF0sRD1bXSxrPVtudWxsXSxSPVtdLFM9dGhpcy50YWJsZSxPPSIiLE49MCxQPTAsRj0wLEI9MiwkPTEsej1SLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFc9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxqPXt5eTp7fX07Zm9yKHZhciBLIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksSykmJihqLnl5W0tdPXRoaXMueXlbS10pO1cuc2V0SW5wdXQoQyxqLnl5KSxqLnl5LmxleGVyPVcsai55eS5wYXJzZXI9dGhpcyx0eXBlb2YgVy55eWxsb2M+InUiJiYoVy55eWxsb2M9e30pO3ZhciBpZT1XLnl5bGxvYztSLnB1c2goaWUpO3ZhciBRPVcub3B0aW9ucyYmVy5vcHRpb25zLnJhbmdlczt0eXBlb2Ygai55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1qLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGVlKFZlKXtJLmxlbmd0aD1JLmxlbmd0aC0yKlZlLGsubGVuZ3RoPWsubGVuZ3RoLVZlLFIubGVuZ3RoPVIubGVuZ3RoLVZlfW8oZWUsInBvcFN0YWNrIik7ZnVuY3Rpb24gSigpe3ZhciBWZTtyZXR1cm4gVmU9RC5wb3AoKXx8Vy5sZXgoKXx8JCx0eXBlb2YgVmUhPSJudW1iZXIiJiYoVmUgaW5zdGFuY2VvZiBBcnJheSYmKEQ9VmUsVmU9RC5wb3AoKSksVmU9QS5zeW1ib2xzX1tWZV18fFZlKSxWZX1vKEosImxleCIpO2Zvcih2YXIgSCxxLFosYWUsdWUsY2UsdGU9e30sRGUsb2Usa2UsRmU7Oyl7aWYoWj1JW0kubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWl0/YWU9dGhpcy5kZWZhdWx0QWN0aW9uc1taXTooKEg9PT1udWxsfHx0eXBlb2YgSD4idSIpJiYoSD1KKCkpLGFlPVNbWl0mJlNbWl1bSF0pLHR5cGVvZiBhZT4idSJ8fCFhZS5sZW5ndGh8fCFhZVswXSl7dmFyIEJlPSIiO0ZlPVtdO2ZvcihEZSBpbiBTW1pdKXRoaXMudGVybWluYWxzX1tEZV0mJkRlPkImJkZlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tEZV0rIiciKTtXLnNob3dQb3NpdGlvbj9CZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhOKzEpK2A6CmArVy5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0ZlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bSF18fEgpKyInIjpCZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhOKzEpKyI6IFVuZXhwZWN0ZWQgIisoSD09JD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tIXXx8SCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoQmUse3RleHQ6Vy5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bSF18fEgsbGluZTpXLnl5bGluZW5vLGxvYzppZSxleHBlY3RlZDpGZX0pfWlmKGFlWzBdaW5zdGFuY2VvZiBBcnJheSYmYWUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitaKyIsIHRva2VuOiAiK0gpO3N3aXRjaChhZVswXSl7Y2FzZSAxOkkucHVzaChIKSxrLnB1c2goVy55eXRleHQpLFIucHVzaChXLnl5bGxvYyksSS5wdXNoKGFlWzFdKSxIPW51bGwscT8oSD1xLHE9bnVsbCk6KFA9Vy55eWxlbmcsTz1XLnl5dGV4dCxOPVcueXlsaW5lbm8saWU9Vy55eWxsb2MsRj4wJiZGLS0pO2JyZWFrO2Nhc2UgMjppZihvZT10aGlzLnByb2R1Y3Rpb25zX1thZVsxXV1bMV0sdGUuJD1rW2subGVuZ3RoLW9lXSx0ZS5fJD17Zmlyc3RfbGluZTpSW1IubGVuZ3RoLShvZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOlJbUi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpSW1IubGVuZ3RoLShvZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpSW1IubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxRJiYodGUuXyQucmFuZ2U9W1JbUi5sZW5ndGgtKG9lfHwxKV0ucmFuZ2VbMF0sUltSLmxlbmd0aC0xXS5yYW5nZVsxXV0pLGNlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh0ZSxbTyxQLE4sai55eSxhZVsxXSxrLFJdLmNvbmNhdCh6KSksdHlwZW9mIGNlPCJ1IilyZXR1cm4gY2U7b2UmJihJPUkuc2xpY2UoMCwtMSpvZSoyKSxrPWsuc2xpY2UoMCwtMSpvZSksUj1SLnNsaWNlKDAsLTEqb2UpKSxJLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWVbMV1dWzBdKSxrLnB1c2godGUuJCksUi5wdXNoKHRlLl8kKSxrZT1TW0lbSS5sZW5ndGgtMl1dW0lbSS5sZW5ndGgtMV1dLEkucHVzaChrZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFQ9ZnVuY3Rpb24oKXt2YXIgTD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEEsSSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihBLEkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEEpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQyxBKXtyZXR1cm4gdGhpcy55eT1BfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1DLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUMsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUMsdGhpcy5tYXRjaGVkKz1DO3ZhciBBPUMubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBBPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxDfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEMpe3ZhciBBPUMubGVuZ3RoLEk9Qy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUMrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUEpLHRoaXMub2Zmc2V0LT1BO3ZhciBEPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1JLmxlbmd0aC0xKTt2YXIgaz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ST8oSS5sZW5ndGg9PT1ELmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrRFtELmxlbmd0aC1JLmxlbmd0aF0ubGVuZ3RoLUlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1BfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2tbMF0sa1swXSt0aGlzLnl5bGVuZy1BXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oQyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEMpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBDPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQy5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Muc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLm1hdGNoO3JldHVybiBDLmxlbmd0aDwyMCYmKEMrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUMubGVuZ3RoKSksKEMuc3Vic3RyKDAsMjApKyhDLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5wYXN0SW5wdXQoKSxBPW5ldyBBcnJheShDLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEMrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0ErIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEMsQSl7dmFyIEksRCxrO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGsueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksRD1DWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxEJiYodGhpcy55eWxpbmVubys9RC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpEP0RbRC5sZW5ndGgtMV0ubGVuZ3RoLURbRC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitDWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUNbMF0sdGhpcy5tYXRjaCs9Q1swXSx0aGlzLm1hdGNoZXM9Qyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShDWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1DWzBdLEk9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsQSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxJKXJldHVybiBJO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBSIGluIGspdGhpc1tSXT1rW1JdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBDLEEsSSxEO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGs9dGhpcy5fY3VycmVudFJ1bGVzKCksUj0wO1I8ay5sZW5ndGg7UisrKWlmKEk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1trW1JdXSksSSYmKCFBfHxJWzBdLmxlbmd0aD5BWzBdLmxlbmd0aCkpe2lmKEE9SSxEPVIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQz10aGlzLnRlc3RfbWF0Y2goSSxrW1JdKSxDIT09ITEpcmV0dXJuIEM7aWYodGhpcy5fYmFja3RyYWNrKXtBPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEE/KEM9dGhpcy50ZXN0X21hdGNoKEEsa1tEXSksQyE9PSExP0M6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgQT10aGlzLm5leHQoKTtyZXR1cm4gQXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oQSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEEpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gQT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEEpe3JldHVybiBBPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoQXx8MCksQT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0FdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oQSl7dGhpcy5iZWdpbihBKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEEsSSxELGspe3ZhciBSPWs7c3dpdGNoKEQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YSIpLEkueXl0ZXh0PSIiLDI0O2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YVN0ciIpLDI0O2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI0O2JyZWFrO2Nhc2UgMzpsZXQgUz0vXG5ccyovZztyZXR1cm4gSS55eXRleHQ9SS55eXRleHQucmVwbGFjZShTLCI8YnIvPiIpLDI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gMjQ7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkZvdW5kIGNvbW1lbnQiLEkueXl0ZXh0KSw2O2JyZWFrO2Nhc2UgNzpyZXR1cm4gODtjYXNlIDg6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNzticmVhaztjYXNlIDEwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDExOkEuZ2V0TG9nZ2VyKCkudHJhY2UoIkJlZ2luIGljb24iKSx0aGlzLmJlZ2luKCJJQ09OIik7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSU5FIiksNjticmVhaztjYXNlIDEzOnJldHVybiA3O2Nhc2UgMTQ6cmV0dXJuIDE2O2Nhc2UgMTU6QS5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQiKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAxODpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gMTM7Y2FzZSAyNTpyZXR1cm4gMjM7Y2FzZSAyNjpyZXR1cm4gMTE7Y2FzZSAyNzp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzA6QS5nZXRMb2dnZXIoKS50cmFjZSgiU3RhcnRpbmcgTlNUUiIpLHRoaXMuYmVnaW4oIk5TVFIiKTticmVhaztjYXNlIDMxOnJldHVybiBBLmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLEkueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSAzMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkpIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksQS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixJLnl5dGV4dCksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MTpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLEkueXl0ZXh0KSwyMTticmVhaztjYXNlIDQyOnJldHVybiBBLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsSS55eXRleHQpLDIxO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OkBceykvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteXCJdKykvaSwvXig/OltefV4iXSspL2ksL14oPzpcfSkvaSwvXig/OlxzKiUlLiopL2ksL14oPzprYW5iYW5cYikvaSwvXig/Ojo6OikvaSwvXig/Oi4rKS9pLC9eKD86XG4pL2ksL14oPzo6Omljb25cKCkvaSwvXig/Oltcc10rW1xuXSkvaSwvXig/Oltcbl0rKS9pLC9eKD86W15cKV0rKS9pLC9eKD86XCkpL2ksL14oPzotXCkpL2ksL14oPzpcKC0pL2ksL14oPzpcKVwpKS9pLC9eKD86XCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XHtceykvaSwvXig/OlwoKS9pLC9eKD86XFspL2ksL14oPzpbXHNdKykvaSwvXig/OlteXChcW1xuXClce1x9QF0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7c2hhcGVEYXRhRW5kQnJhY2tldDp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzaGFwZURhdGFTdHI6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sc2hhcGVEYXRhOntydWxlczpbMSw0LDVdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LElDT046e3J1bGVzOlsxNCwxNV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzI4LDI5XSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlszMSwzMl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjcsMzAsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNiw3LDgsMTEsMTIsMTMsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gTH0oKTtfLmxleGVyPVQ7ZnVuY3Rpb24gRSgpe3RoaXMueXk9e319cmV0dXJuIG8oRSwiUGFyc2VyIiksRS5wcm90b3R5cGU9XyxfLlBhcnNlcj1FLG5ldyBFfSgpO0xCLnBhcnNlcj1MQjtIMWU9TEJ9KTt2YXIgb2wsTkIsREIsUkIsJHR0LFZ0dCxZMWUsVXR0LEh0dCxYaSxXdHQsWXR0LHF0dCxYdHQsanR0LEt0dCxRdHQscTFlLFgxZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTtodCgpO2hzKCk7VjUoKTtvbD1bXSxOQj1bXSxEQj0wLFJCPXt9LCR0dD1vKCgpPT57b2w9W10sTkI9W10sREI9MCxSQj17fX0sImNsZWFyIiksVnR0PW8odD0+e2lmKG9sLmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IGU9b2xbMF0ubGV2ZWwscj1udWxsO2ZvcihsZXQgbj1vbC5sZW5ndGgtMTtuPj0wO24tLSlpZihvbFtuXS5sZXZlbD09PWUmJiFyJiYocj1vbFtuXSksb2xbbl0ubGV2ZWw8ZSl0aHJvdyBuZXcgRXJyb3IoJ0l0ZW1zIHdpdGhvdXQgc2VjdGlvbiBkZXRlY3RlZCwgZm91bmQgc2VjdGlvbiAoIicrb2xbbl0ubGFiZWwrJyIpJyk7cmV0dXJuIHQ9PT1yPy5sZXZlbD9udWxsOnJ9LCJnZXRTZWN0aW9uIiksWTFlPW8oZnVuY3Rpb24oKXtyZXR1cm4gTkJ9LCJnZXRTZWN0aW9ucyIpLFV0dD1vKGZ1bmN0aW9uKCl7bGV0IHQ9W10sZT1bXSxyPVkxZSgpLG49ZGUoKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9e2lkOmkuaWQsbGFiZWw6VHIoaS5sYWJlbD8/IiIsbiksaXNHcm91cDohMCx0aWNrZXQ6aS50aWNrZXQsc2hhcGU6ImthbmJhblNlY3Rpb24iLGxldmVsOmkubGV2ZWwsbG9vazpuLmxvb2t9O2UucHVzaChhKTtsZXQgcz1vbC5maWx0ZXIobD0+bC5wYXJlbnRJZD09PWkuaWQpO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT17aWQ6bC5pZCxwYXJlbnRJZDppLmlkLGxhYmVsOlRyKGwubGFiZWw/PyIiLG4pLGlzR3JvdXA6ITEsdGlja2V0Omw/LnRpY2tldCxwcmlvcml0eTpsPy5wcmlvcml0eSxhc3NpZ25lZDpsPy5hc3NpZ25lZCxpY29uOmw/Lmljb24sc2hhcGU6ImthbmJhbkl0ZW0iLGxldmVsOmwubGV2ZWwscng6NSxyeTo1LGNzc1N0eWxlczpbInRleHQtYWxpZ246IGxlZnQiXX07ZS5wdXNoKHUpfX1yZXR1cm57bm9kZXM6ZSxlZGdlczp0LG90aGVyOnt9LGNvbmZpZzpkZSgpfX0sImdldERhdGEiKSxIdHQ9bygodCxlLHIsbixpKT0+e2xldCBhPWRlKCkscz1hLm1pbmRtYXA/LnBhZGRpbmc/P3VyLm1pbmRtYXAucGFkZGluZztzd2l0Y2gobil7Y2FzZSBYaS5ST1VOREVEX1JFQ1Q6Y2FzZSBYaS5SRUNUOmNhc2UgWGkuSEVYQUdPTjpzKj0yfWxldCBsPXtpZDpUcihlLGEpfHwia2JuIitEQisrLGxldmVsOnQsbGFiZWw6VHIocixhKSx3aWR0aDphLm1pbmRtYXA/Lm1heE5vZGVXaWR0aD8/dXIubWluZG1hcC5tYXhOb2RlV2lkdGgscGFkZGluZzpzLGlzR3JvdXA6ITF9O2lmKGkhPT12b2lkIDApe2xldCBoO2kuaW5jbHVkZXMoYApgKT9oPWkrYApgOmg9YHsKYCtpK2AKfWA7bGV0IGY9Zm0oaCx7c2NoZW1hOmhtfSk7aWYoZi5zaGFwZSYmKGYuc2hhcGUhPT1mLnNoYXBlLnRvTG93ZXJDYXNlKCl8fGYuc2hhcGUuaW5jbHVkZXMoIl8iKSkpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2Yuc2hhcGV9LiBTaGFwZSBuYW1lcyBzaG91bGQgYmUgbG93ZXJjYXNlLmApO2Y/LnNoYXBlJiZmLnNoYXBlPT09ImthbmJhbkl0ZW0iJiYobC5zaGFwZT1mPy5zaGFwZSksZj8ubGFiZWwmJihsLmxhYmVsPWY/LmxhYmVsKSxmPy5pY29uJiYobC5pY29uPWY/Lmljb24udG9TdHJpbmcoKSksZj8uYXNzaWduZWQmJihsLmFzc2lnbmVkPWY/LmFzc2lnbmVkLnRvU3RyaW5nKCkpLGY/LnRpY2tldCYmKGwudGlja2V0PWY/LnRpY2tldC50b1N0cmluZygpKSxmPy5wcmlvcml0eSYmKGwucHJpb3JpdHk9Zj8ucHJpb3JpdHkpfWxldCB1PVZ0dCh0KTt1P2wucGFyZW50SWQ9dS5pZHx8ImtibiIrREIrKzpOQi5wdXNoKGwpLG9sLnB1c2gobCl9LCJhZGROb2RlIiksWGk9e0RFRkFVTFQ6MCxOT19CT1JERVI6MCxST1VOREVEX1JFQ1Q6MSxSRUNUOjIsQ0lSQ0xFOjMsQ0xPVUQ6NCxCQU5HOjUsSEVYQUdPTjo2fSxXdHQ9bygodCxlKT0+e3N3aXRjaChZLmRlYnVnKCJJbiBnZXQgdHlwZSIsdCxlKSx0KXtjYXNlIlsiOnJldHVybiBYaS5SRUNUO2Nhc2UiKCI6cmV0dXJuIGU9PT0iKSI/WGkuUk9VTkRFRF9SRUNUOlhpLkNMT1VEO2Nhc2UiKCgiOnJldHVybiBYaS5DSVJDTEU7Y2FzZSIpIjpyZXR1cm4gWGkuQ0xPVUQ7Y2FzZSIpKSI6cmV0dXJuIFhpLkJBTkc7Y2FzZSJ7eyI6cmV0dXJuIFhpLkhFWEFHT047ZGVmYXVsdDpyZXR1cm4gWGkuREVGQVVMVH19LCJnZXRUeXBlIiksWXR0PW8oKHQsZSk9PntSQlt0XT1lfSwic2V0RWxlbWVudEZvcklkIikscXR0PW8odD0+e2lmKCF0KXJldHVybjtsZXQgZT1kZSgpLHI9b2xbb2wubGVuZ3RoLTFdO3QuaWNvbiYmKHIuaWNvbj1Ucih0Lmljb24sZSkpLHQuY2xhc3MmJihyLmNzc0NsYXNzZXM9VHIodC5jbGFzcyxlKSl9LCJkZWNvcmF0ZU5vZGUiKSxYdHQ9byh0PT57c3dpdGNoKHQpe2Nhc2UgWGkuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIFhpLlJFQ1Q6cmV0dXJuInJlY3QiO2Nhc2UgWGkuUk9VTkRFRF9SRUNUOnJldHVybiJyb3VuZGVkLXJlY3QiO2Nhc2UgWGkuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgWGkuQ0xPVUQ6cmV0dXJuImNsb3VkIjtjYXNlIFhpLkJBTkc6cmV0dXJuImJhbmciO2Nhc2UgWGkuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX0sInR5cGUyU3RyIiksanR0PW8oKCk9PlksImdldExvZ2dlciIpLEt0dD1vKHQ9PlJCW3RdLCJnZXRFbGVtZW50QnlJZCIpLFF0dD17Y2xlYXI6JHR0LGFkZE5vZGU6SHR0LGdldFNlY3Rpb25zOlkxZSxnZXREYXRhOlV0dCxub2RlVHlwZTpYaSxnZXRUeXBlOld0dCxzZXRFbGVtZW50Rm9ySWQ6WXR0LGRlY29yYXRlTm9kZTpxdHQsdHlwZTJTdHI6WHR0LGdldExvZ2dlcjpqdHQsZ2V0RWxlbWVudEJ5SWQ6S3R0fSxxMWU9UXR0fSk7dmFyIFp0dCxqMWUsSzFlPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtodCgpO0h1KCk7bmkoKTtocygpO0s1KCk7c3coKTtadHQ9byhhc3luYyh0LGUscixuKT0+e1kuZGVidWcoYFJlbmRlcmluZyBrYW5iYW4gZGlhZ3JhbQpgK3QpO2xldCBhPW4uZGIuZ2V0RGF0YSgpLHM9ZGUoKTtzLmh0bWxMYWJlbHM9ITE7bGV0IGw9T2EoZSksdT1sLmFwcGVuZCgiZyIpO3UuYXR0cigiY2xhc3MiLCJzZWN0aW9ucyIpO2xldCBoPWwuYXBwZW5kKCJnIik7aC5hdHRyKCJjbGFzcyIsIml0ZW1zIik7bGV0IGY9YS5ub2Rlcy5maWx0ZXIodj0+di5pc0dyb3VwKSxkPTAscD0xMCxtPVtdLGc9MjU7Zm9yKGxldCB2IG9mIGYpe2xldCB4PXM/LmthbmJhbj8uc2VjdGlvbldpZHRofHwyMDA7ZD1kKzEsdi54PXgqZCsoZC0xKSpwLzIsdi53aWR0aD14LHYueT0wLHYuaGVpZ2h0PXgqMyx2LnJ4PTUsdi5yeT01LHYuY3NzQ2xhc3Nlcz12LmNzc0NsYXNzZXMrIiBzZWN0aW9uLSIrZDtsZXQgYj1hd2FpdCBtbSh1LHYpO2c9TWF0aC5tYXgoZyxiPy5sYWJlbEJCb3g/LmhlaWdodCksbS5wdXNoKGIpfWxldCB5PTA7Zm9yKGxldCB2IG9mIGYpe2xldCB4PW1beV07eT15KzE7bGV0IGI9cz8ua2FuYmFuPy5zZWN0aW9uV2lkdGh8fDIwMCx3PS1iKjMvMitnLF89dyxUPWEubm9kZXMuZmlsdGVyKEM9PkMucGFyZW50SWQ9PT12LmlkKTtmb3IobGV0IEMgb2YgVCl7aWYoQy5pc0dyb3VwKXRocm93IG5ldyBFcnJvcigiR3JvdXBzIHdpdGhpbiBncm91cHMgYXJlIG5vdCBhbGxvd2VkIGluIEthbmJhbiBkaWFncmFtcyIpO0MueD12LngsQy53aWR0aD1iLTEuNSpwO2xldCBJPShhd2FpdCBnbShoLEMse2NvbmZpZzpzfSkpLm5vZGUoKS5nZXRCQm94KCk7Qy55PV8rSS5oZWlnaHQvMixhd2FpdCBfdihDKSxfPUMueStJLmhlaWdodC8yK3AvMn1sZXQgRT14LmNsdXN0ZXIuc2VsZWN0KCJyZWN0IiksTD1NYXRoLm1heChfLXcrMypwLDUwKSsoZy0yNSk7RS5hdHRyKCJoZWlnaHQiLEwpfV9vKHZvaWQgMCxsLHMubWluZG1hcD8ucGFkZGluZz8/dXIua2FuYmFuLnBhZGRpbmcscy5taW5kbWFwPy51c2VNYXhXaWR0aD8/dXIua2FuYmFuLnVzZU1heFdpZHRoKX0sImRyYXciKSxqMWU9e2RyYXc6WnR0fX0pO3ZhciBKdHQsZXJ0LFExZSxaMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbygpO0p0dD1vKHQ9PntsZXQgZT0iIjtmb3IobGV0IG49MDtuPHQuVEhFTUVfQ09MT1JfTElNSVQ7bisrKXRbImxpbmVDb2xvciIrbl09dFsibGluZUNvbG9yIituXXx8dFsiY1NjYWxlSW52IituXSxhYSh0WyJsaW5lQ29sb3IiK25dKT90WyJsaW5lQ29sb3IiK25dPUR0KHRbImxpbmVDb2xvciIrbl0sMjApOnRbImxpbmVDb2xvciIrbl09QnQodFsibGluZUNvbG9yIituXSwyMCk7bGV0IHI9bygobixpKT0+dC5kYXJrTW9kZT9CdChuLGkpOkR0KG4saSksImFkanVzdGVyIik7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl7bGV0IGk9IiIrKDE3LTMqbik7ZSs9YAogICAgLnNlY3Rpb24tJHtuLTF9IHJlY3QsIC5zZWN0aW9uLSR7bi0xfSBwYXRoLCAuc2VjdGlvbi0ke24tMX0gY2lyY2xlLCAuc2VjdGlvbi0ke24tMX0gcG9seWdvbiwgLnNlY3Rpb24tJHtuLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtyKHRbImNTY2FsZSIrbl0sMTApfTsKICAgICAgc3Ryb2tlOiAke3IodFsiY1NjYWxlIituXSwxMCl9OwoKICAgIH0KICAgIC5zZWN0aW9uLSR7bi0xfSB0ZXh0IHsKICAgICBmaWxsOiAke3RbImNTY2FsZUxhYmVsIituXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7bi0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7dFsiY1NjYWxlTGFiZWwiK25dfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtuLTF9ewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlIituXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke24tMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtpfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7bi0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZUludiIrbl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiBsaWdodGdyYXk7CiAgICB9CiAgICAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6ICNlZmVmZWY7CiAgICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5iYWNrZ3JvdW5kfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAua2FuYmFuLXRpY2tldC1saW5rIHsKICAgIGZpbGw6ICR7dC5iYWNrZ3JvdW5kfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQogICAgYH1yZXR1cm4gZX0sImdlblNlY3Rpb25zIiksZXJ0PW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtKdHQodCl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHsKICAgIGZpbGw6ICR7dC5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuY2x1c3Rlci1sYWJlbCwgLmxhYmVsIHsKICAgIGNvbG9yOiAke3QudGV4dENvbG9yfTsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogICAgfQogIC5rYW5iYW4tbGFiZWwgewogICAgZHk6IDFlbTsKICAgIGFsaWdubWVudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQpgLCJnZXRTdHlsZXMiKSxRMWU9ZXJ0fSk7dmFyIEoxZT17fTt2cihKMWUse2RpYWdyYW06KCk9PnRydH0pO3ZhciB0cnQsZXllPU0oKCk9PnsidXNlIHN0cmljdCI7VzFlKCk7WDFlKCk7SzFlKCk7WjFlKCk7dHJ0PXtkYjpxMWUscmVuZGVyZXI6ajFlLHBhcnNlcjpIMWUsc3R5bGVzOlExZX19KTt2YXIgTUIsdWIsbnllPU0oKCk9PnsidXNlIHN0cmljdCI7TUI9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKGwsdSxoLGYpe2ZvcihoPWh8fHt9LGY9bC5sZW5ndGg7Zi0tO2hbbFtmXV09dSk7cmV0dXJuIGh9LCJvIiksZT1bMSw5XSxyPVsxLDEwXSxuPVsxLDUsMTAsMTJdLGk9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbih1LGgsZixkLHAsbSxnKXt2YXIgeT1tLmxlbmd0aC0xO3N3aXRjaChwKXtjYXNlIDc6bGV0IHY9ZC5maW5kT3JDcmVhdGVOb2RlKG1beS00XS50cmltKCkucmVwbGFjZUFsbCgnIiInLCciJykpLHg9ZC5maW5kT3JDcmVhdGVOb2RlKG1beS0yXS50cmltKCkucmVwbGFjZUFsbCgnIiInLCciJykpLGI9cGFyc2VGbG9hdChtW3ldLnRyaW0oKSk7ZC5hZGRMaW5rKHYseCxiKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6dGhpcy4kPW1beV07YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9bVt5LTFdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sezU6WzEsM119LHs2OjQsODo1LDE1OjYsMTY6NywxNzo4LDE4OmUsMjA6cn0sezE6WzIsNl0sNzoxMSwxMDpbMSwxMl19LHQocixbMiw0XSx7OToxMyw1OlsxLDE0XX0pLHsxMjpbMSwxNV19LHQobixbMiw4XSksdChuLFsyLDldKSx7MTk6WzEsMTZdfSx0KG4sWzIsMTFdKSx7MTpbMiwxXX0sezE6WzIsNV19LHQocixbMiwyXSksezY6MTcsODo1LDE1OjYsMTY6NywxNzo4LDE4OmUsMjA6cn0sezE1OjE4LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxODpbMSwxOV19LHQocixbMiwzXSksezEyOlsxLDIwXX0sdChuLFsyLDEwXSksezE1OjIxLDE2OjcsMTc6OCwxODplLDIwOnJ9LHQoWzEsNSwxMF0sWzIsN10pXSxkZWZhdWx0QWN0aW9uczp7MTE6WzIsMV0sMTI6WzIsNV19LHBhcnNlRXJyb3I6byhmdW5jdGlvbih1LGgpe2lmKGgucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh1KTtlbHNle3ZhciBmPW5ldyBFcnJvcih1KTt0aHJvdyBmLmhhc2g9aCxmfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHUpe3ZhciBoPXRoaXMsZj1bMF0sZD1bXSxwPVtudWxsXSxtPVtdLGc9dGhpcy50YWJsZSx5PSIiLHY9MCx4PTAsYj0wLHc9MixfPTEsVD1tLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxMPXt5eTp7fX07Zm9yKHZhciBDIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksQykmJihMLnl5W0NdPXRoaXMueXlbQ10pO0Uuc2V0SW5wdXQodSxMLnl5KSxMLnl5LmxleGVyPUUsTC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRS55eWxsb2M+InUiJiYoRS55eWxsb2M9e30pO3ZhciBBPUUueXlsbG9jO20ucHVzaChBKTt2YXIgST1FLm9wdGlvbnMmJkUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEwueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9TC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBEKGllKXtmLmxlbmd0aD1mLmxlbmd0aC0yKmllLHAubGVuZ3RoPXAubGVuZ3RoLWllLG0ubGVuZ3RoPW0ubGVuZ3RoLWllfW8oRCwicG9wU3RhY2siKTtmdW5jdGlvbiBrKCl7dmFyIGllO3JldHVybiBpZT1kLnBvcCgpfHxFLmxleCgpfHxfLHR5cGVvZiBpZSE9Im51bWJlciImJihpZSBpbnN0YW5jZW9mIEFycmF5JiYoZD1pZSxpZT1kLnBvcCgpKSxpZT1oLnN5bWJvbHNfW2llXXx8aWUpLGllfW8oaywibGV4Iik7Zm9yKHZhciBSLFMsTyxOLFAsRixCPXt9LCQseixXLGo7Oyl7aWYoTz1mW2YubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbT10/Tj10aGlzLmRlZmF1bHRBY3Rpb25zW09dOigoUj09PW51bGx8fHR5cGVvZiBSPiJ1IikmJihSPWsoKSksTj1nW09dJiZnW09dW1JdKSx0eXBlb2YgTj4idSJ8fCFOLmxlbmd0aHx8IU5bMF0pe3ZhciBLPSIiO2o9W107Zm9yKCQgaW4gZ1tPXSl0aGlzLnRlcm1pbmFsc19bJF0mJiQ+dyYmai5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bJF0rIiciKTtFLnNob3dQb3NpdGlvbj9LPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHYrMSkrYDoKYCtFLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArai5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1JdfHxSKSsiJyI6Sz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2KzEpKyI6IFVuZXhwZWN0ZWQgIisoUj09Xz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tSXXx8UikrIiciKSx0aGlzLnBhcnNlRXJyb3IoSyx7dGV4dDpFLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tSXXx8UixsaW5lOkUueXlsaW5lbm8sbG9jOkEsZXhwZWN0ZWQ6an0pfWlmKE5bMF1pbnN0YW5jZW9mIEFycmF5JiZOLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrTysiLCB0b2tlbjogIitSKTtzd2l0Y2goTlswXSl7Y2FzZSAxOmYucHVzaChSKSxwLnB1c2goRS55eXRleHQpLG0ucHVzaChFLnl5bGxvYyksZi5wdXNoKE5bMV0pLFI9bnVsbCxTPyhSPVMsUz1udWxsKTooeD1FLnl5bGVuZyx5PUUueXl0ZXh0LHY9RS55eWxpbmVubyxBPUUueXlsbG9jLGI+MCYmYi0tKTticmVhaztjYXNlIDI6aWYoej10aGlzLnByb2R1Y3Rpb25zX1tOWzFdXVsxXSxCLiQ9cFtwLmxlbmd0aC16XSxCLl8kPXtmaXJzdF9saW5lOm1bbS5sZW5ndGgtKHp8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTptW20ubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bVttLmxlbmd0aC0oenx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptW20ubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxJJiYoQi5fJC5yYW5nZT1bbVttLmxlbmd0aC0oenx8MSldLnJhbmdlWzBdLG1bbS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxGPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShCLFt5LHgsdixMLnl5LE5bMV0scCxtXS5jb25jYXQoVCkpLHR5cGVvZiBGPCJ1IilyZXR1cm4gRjt6JiYoZj1mLnNsaWNlKDAsLTEqeioyKSxwPXAuc2xpY2UoMCwtMSp6KSxtPW0uc2xpY2UoMCwtMSp6KSksZi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW05bMV1dWzBdKSxwLnB1c2goQi4kKSxtLnB1c2goQi5fJCksVz1nW2ZbZi5sZW5ndGgtMl1dW2ZbZi5sZW5ndGgtMV1dLGYucHVzaChXKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sYT1mdW5jdGlvbigpe3ZhciBsPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oaCxmKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGgsZik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih1LGgpe3JldHVybiB0aGlzLnl5PWh8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9dSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dSx0aGlzLm1hdGNoZWQrPXU7dmFyIGg9dS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGg/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24odSl7dmFyIGg9dS5sZW5ndGgsZj11LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtaCksdGhpcy5vZmZzZXQtPWg7dmFyIGQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWYubGVuZ3RoLTEpO3ZhciBwPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpmPyhmLmxlbmd0aD09PWQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStkW2QubGVuZ3RoLWYubGVuZ3RoXS5sZW5ndGgtZlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWh9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcFswXSxwWzBdK3RoaXMueXlsZW5nLWhdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbih1KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih1Lmxlbmd0aD4yMD8iLi4uIjoiIikrdS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB1PXRoaXMubWF0Y2g7cmV0dXJuIHUubGVuZ3RoPDIwJiYodSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdS5sZW5ndGgpKSwodS5zdWJzdHIoMCwyMCkrKHUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLnBhc3RJbnB1dCgpLGg9bmV3IEFycmF5KHUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmAraCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24odSxoKXt2YXIgZixkLHA7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHA9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYocC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxkPXVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGQmJih0aGlzLnl5bGluZW5vKz1kLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmQ/ZFtkLmxlbmd0aC0xXS5sZW5ndGgtZFtkLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3VbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dVswXSx0aGlzLm1hdGNoKz11WzBdLHRoaXMubWF0Y2hlcz11LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXVbMF0sZj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxoLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGYpcmV0dXJuIGY7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG0gaW4gcCl0aGlzW21dPXBbbV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHUsaCxmLGQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgcD10aGlzLl9jdXJyZW50UnVsZXMoKSxtPTA7bTxwLmxlbmd0aDttKyspaWYoZj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3BbbV1dKSxmJiYoIWh8fGZbMF0ubGVuZ3RoPmhbMF0ubGVuZ3RoKSl7aWYoaD1mLGQ9bSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih1PXRoaXMudGVzdF9tYXRjaChmLHBbbV0pLHUhPT0hMSlyZXR1cm4gdTtpZih0aGlzLl9iYWNrdHJhY2spe2g9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaD8odT10aGlzLnRlc3RfbWF0Y2goaCxwW2RdKSx1IT09ITE/dTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBoPXRoaXMubmV4dCgpO3JldHVybiBofHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihoKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goaCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgaD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBoPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oaCl7cmV0dXJuIGg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhofHwwKSxoPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbaF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihoKXt0aGlzLmJlZ2luKGgpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oaCxmLGQscCl7dmFyIG09cDtzd2l0Y2goZCl7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDticmVhaztjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2JyZWFrO2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODticmVhaztjYXNlIDc6cmV0dXJuIDE5fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OnNhbmtleS1iZXRhXGIpL2ksL14oPzokKS9pLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvaSwvXig/OihcdTAwMkMpKS9pLC9eKD86KFx1MDAyMikpL2ksL14oPzooW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pKikvaSwvXig/OihcdTAwMjIpKD8hKFx1MDAyMikpKS9pLC9eKD86KChbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSl8KFx1MDAyQyl8KFx1MDAwRCl8KFx1MDAwQSl8KFx1MDAyMikoXHUwMDIyKSkqKS9pXSxjb25kaXRpb25zOntjc3Y6e3J1bGVzOlsxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITF9LGVzY2FwZWRfdGV4dDp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGx9KCk7aS5sZXhlcj1hO2Z1bmN0aW9uIHMoKXt0aGlzLnl5PXt9fXJldHVybiBvKHMsIlBhcnNlciIpLHMucHJvdG90eXBlPWksaS5QYXJzZXI9cyxuZXcgc30oKTtNQi5wYXJzZXI9TUI7dWI9TUJ9KTt2YXIgSDYsVzYsVTYsYXJ0LElCLHNydCxPQixvcnQsbHJ0LGNydCx1cnQsaXllLGF5ZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTtraSgpO0g2PVtdLFc2PVtdLFU2PW5ldyBNYXAsYXJ0PW8oKCk9PntINj1bXSxXNj1bXSxVNj1uZXcgTWFwLF9yKCl9LCJjbGVhciIpLElCPWNsYXNze2NvbnN0cnVjdG9yKGUscixuPTApe3RoaXMuc291cmNlPWU7dGhpcy50YXJnZXQ9cjt0aGlzLnZhbHVlPW59c3RhdGlje28odGhpcywiU2Fua2V5TGluayIpfX0sc3J0PW8oKHQsZSxyKT0+e0g2LnB1c2gobmV3IElCKHQsZSxyKSl9LCJhZGRMaW5rIiksT0I9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5JRD1lfXN0YXRpY3tvKHRoaXMsIlNhbmtleU5vZGUiKX19LG9ydD1vKHQ9Pnt0PWplLnNhbml0aXplVGV4dCh0LGRlKCkpO2xldCBlPVU2LmdldCh0KTtyZXR1cm4gZT09PXZvaWQgMCYmKGU9bmV3IE9CKHQpLFU2LnNldCh0LGUpLFc2LnB1c2goZSkpLGV9LCJmaW5kT3JDcmVhdGVOb2RlIiksbHJ0PW8oKCk9Plc2LCJnZXROb2RlcyIpLGNydD1vKCgpPT5INiwiZ2V0TGlua3MiKSx1cnQ9bygoKT0+KHtub2RlczpXNi5tYXAodD0+KHtpZDp0LklEfSkpLGxpbmtzOkg2Lm1hcCh0PT4oe3NvdXJjZTp0LnNvdXJjZS5JRCx0YXJnZXQ6dC50YXJnZXQuSUQsdmFsdWU6dC52YWx1ZX0pKX0pLCJnZXRHcmFwaCIpLGl5ZT17bm9kZXNNYXA6VTYsZ2V0Q29uZmlnOm8oKCk9PmRlKCkuc2Fua2V5LCJnZXRDb25maWciKSxnZXROb2RlczpscnQsZ2V0TGlua3M6Y3J0LGdldEdyYXBoOnVydCxhZGRMaW5rOnNydCxmaW5kT3JDcmVhdGVOb2RlOm9ydCxnZXRBY2NUaXRsZTpQcixzZXRBY2NUaXRsZTpScixnZXRBY2NEZXNjcmlwdGlvbjpGcixzZXRBY2NEZXNjcmlwdGlvbjpCcixnZXREaWFncmFtVGl0bGU6SnIsc2V0RGlhZ3JhbVRpdGxlOmxuLGNsZWFyOmFydH19KTtmdW5jdGlvbiBoYih0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI8bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPGl8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgc3llPU0oKCk9PnsidXNlIHN0cmljdCI7byhoYiwibWF4Iil9KTtmdW5jdGlvbiBUMSh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPml8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgb3llPU0oKCk9PnsidXNlIHN0cmljdCI7byhUMSwibWluIil9KTtmdW5jdGlvbiBrMSh0LGUpe2xldCByPTA7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCkobj0rbikmJihyKz1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPStlKGksKytuLHQpKSYmKHIrPWkpfXJldHVybiByfXZhciBseWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGsxLCJzdW0iKX0pO3ZhciBQQj1NKCgpPT57InVzZSBzdHJpY3QiO3N5ZSgpO295ZSgpO2x5ZSgpfSk7ZnVuY3Rpb24gaHJ0KHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBCQih0KXtyZXR1cm4gdC5kZXB0aH1mdW5jdGlvbiBGQih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9ZnVuY3Rpb24gZmIodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gekIodCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/VDEodC5zb3VyY2VMaW5rcyxocnQpLTE6MH12YXIgR0I9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQQigpO28oaHJ0LCJ0YXJnZXREZXB0aCIpO28oQkIsImxlZnQiKTtvKEZCLCJyaWdodCIpO28oZmIsImp1c3RpZnkiKTtvKHpCLCJjZW50ZXIiKX0pO2Z1bmN0aW9uIEUxKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgY3llPU0oKCk9PnsidXNlIHN0cmljdCI7byhFMSwiY29uc3RhbnQiKX0pO2Z1bmN0aW9uIHV5ZSh0LGUpe3JldHVybiBZNih0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBoeWUodCxlKXtyZXR1cm4gWTYodC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gWTYodCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uICRCKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGZydCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBkcnQodCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24gcHJ0KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIGZ5ZSh0LGUpe2xldCByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBkeWUoe25vZGVzOnR9KXtmb3IobGV0IGUgb2YgdCl7bGV0IHI9ZS55MCxuPXI7Zm9yKGxldCBpIG9mIGUuc291cmNlTGlua3MpaS55MD1yK2kud2lkdGgvMixyKz1pLndpZHRoO2ZvcihsZXQgaSBvZiBlLnRhcmdldExpbmtzKWkueTE9bitpLndpZHRoLzIsbis9aS53aWR0aH19ZnVuY3Rpb24gcTYoKXtsZXQgdD0wLGU9MCxyPTEsbj0xLGk9MjQsYT04LHMsbD1mcnQsdT1mYixoLGYsZD1kcnQscD1wcnQsbT02O2Z1bmN0aW9uIGcoKXtsZXQgTz17bm9kZXM6ZC5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6cC5hcHBseShudWxsLGFyZ3VtZW50cyl9O3JldHVybiB5KE8pLHYoTykseChPKSxiKE8pLFQoTyksZHllKE8pLE99byhnLCJzYW5rZXkiKSxnLnVwZGF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gZHllKE8pLE99LGcubm9kZUlkPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBPPT0iZnVuY3Rpb24iP086RTEoTyksZyk6bH0sZy5ub2RlQWxpZ249ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIE89PSJmdW5jdGlvbiI/TzpFMShPKSxnKTp1fSxnLm5vZGVTb3J0PWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPU8sZyk6aH0sZy5ub2RlV2lkdGg9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K08sZyk6aX0sZy5ub2RlUGFkZGluZz1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1zPStPLGcpOmF9LGcubm9kZXM9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dHlwZW9mIE89PSJmdW5jdGlvbiI/TzpFMShPKSxnKTpkfSxnLmxpbmtzPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBPPT0iZnVuY3Rpb24iP086RTEoTyksZyk6cH0sZy5saW5rU29ydD1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1PLGcpOmZ9LGcuc2l6ZT1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lPTAscj0rT1swXSxuPStPWzFdLGcpOltyLXQsbi1lXX0sZy5leHRlbnQ9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K09bMF1bMF0scj0rT1sxXVswXSxlPStPWzBdWzFdLG49K09bMV1bMV0sZyk6W1t0LGVdLFtyLG5dXX0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPStPLGcpOm19O2Z1bmN0aW9uIHkoe25vZGVzOk8sbGlua3M6Tn0pe2ZvcihsZXRbRixCXW9mIE8uZW50cmllcygpKUIuaW5kZXg9RixCLnNvdXJjZUxpbmtzPVtdLEIudGFyZ2V0TGlua3M9W107bGV0IFA9bmV3IE1hcChPLm1hcCgoRixCKT0+W2woRixCLE8pLEZdKSk7Zm9yKGxldFtGLEJdb2YgTi5lbnRyaWVzKCkpe0IuaW5kZXg9RjtsZXR7c291cmNlOiQsdGFyZ2V0Onp9PUI7dHlwZW9mICQhPSJvYmplY3QiJiYoJD1CLnNvdXJjZT1meWUoUCwkKSksdHlwZW9mIHohPSJvYmplY3QiJiYoej1CLnRhcmdldD1meWUoUCx6KSksJC5zb3VyY2VMaW5rcy5wdXNoKEIpLHoudGFyZ2V0TGlua3MucHVzaChCKX1pZihmIT1udWxsKWZvcihsZXR7c291cmNlTGlua3M6Rix0YXJnZXRMaW5rczpCfW9mIE8pRi5zb3J0KGYpLEIuc29ydChmKX1vKHksImNvbXB1dGVOb2RlTGlua3MiKTtmdW5jdGlvbiB2KHtub2RlczpPfSl7Zm9yKGxldCBOIG9mIE8pTi52YWx1ZT1OLmZpeGVkVmFsdWU9PT12b2lkIDA/TWF0aC5tYXgoazEoTi5zb3VyY2VMaW5rcywkQiksazEoTi50YXJnZXRMaW5rcywkQikpOk4uZml4ZWRWYWx1ZX1vKHYsImNvbXB1dGVOb2RlVmFsdWVzIik7ZnVuY3Rpb24geCh7bm9kZXM6T30pe2xldCBOPU8ubGVuZ3RoLFA9bmV3IFNldChPKSxGPW5ldyBTZXQsQj0wO2Zvcig7UC5zaXplOyl7Zm9yKGxldCAkIG9mIFApeyQuZGVwdGg9Qjtmb3IobGV0e3RhcmdldDp6fW9mICQuc291cmNlTGlua3MpRi5hZGQoeil9aWYoKytCPk4pdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7UD1GLEY9bmV3IFNldH19byh4LCJjb21wdXRlTm9kZURlcHRocyIpO2Z1bmN0aW9uIGIoe25vZGVzOk99KXtsZXQgTj1PLmxlbmd0aCxQPW5ldyBTZXQoTyksRj1uZXcgU2V0LEI9MDtmb3IoO1Auc2l6ZTspe2ZvcihsZXQgJCBvZiBQKXskLmhlaWdodD1CO2ZvcihsZXR7c291cmNlOnp9b2YgJC50YXJnZXRMaW5rcylGLmFkZCh6KX1pZigrK0I+Til0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtQPUYsRj1uZXcgU2V0fX1vKGIsImNvbXB1dGVOb2RlSGVpZ2h0cyIpO2Z1bmN0aW9uIHcoe25vZGVzOk99KXtsZXQgTj1oYihPLEI9PkIuZGVwdGgpKzEsUD0oci10LWkpLyhOLTEpLEY9bmV3IEFycmF5KE4pO2ZvcihsZXQgQiBvZiBPKXtsZXQgJD1NYXRoLm1heCgwLE1hdGgubWluKE4tMSxNYXRoLmZsb29yKHUuY2FsbChudWxsLEIsTikpKSk7Qi5sYXllcj0kLEIueDA9dCskKlAsQi54MT1CLngwK2ksRlskXT9GWyRdLnB1c2goQik6RlskXT1bQl19aWYoaClmb3IobGV0IEIgb2YgRilCLnNvcnQoaCk7cmV0dXJuIEZ9byh3LCJjb21wdXRlTm9kZUxheWVycyIpO2Z1bmN0aW9uIF8oTyl7bGV0IE49VDEoTyxQPT4obi1lLShQLmxlbmd0aC0xKSpzKS9rMShQLCRCKSk7Zm9yKGxldCBQIG9mIE8pe2xldCBGPWU7Zm9yKGxldCBCIG9mIFApe0IueTA9RixCLnkxPUYrQi52YWx1ZSpOLEY9Qi55MStzO2ZvcihsZXQgJCBvZiBCLnNvdXJjZUxpbmtzKSQud2lkdGg9JC52YWx1ZSpOfUY9KG4tRitzKS8oUC5sZW5ndGgrMSk7Zm9yKGxldCBCPTA7QjxQLmxlbmd0aDsrK0Ipe2xldCAkPVBbQl07JC55MCs9RiooQisxKSwkLnkxKz1GKihCKzEpfWsoUCl9fW8oXywiaW5pdGlhbGl6ZU5vZGVCcmVhZHRocyIpO2Z1bmN0aW9uIFQoTyl7bGV0IE49dyhPKTtzPU1hdGgubWluKGEsKG4tZSkvKGhiKE4sUD0+UC5sZW5ndGgpLTEpKSxfKE4pO2ZvcihsZXQgUD0wO1A8bTsrK1Ape2xldCBGPU1hdGgucG93KC45OSxQKSxCPU1hdGgubWF4KDEtRiwoUCsxKS9tKTtMKE4sRixCKSxFKE4sRixCKX19byhULCJjb21wdXRlTm9kZUJyZWFkdGhzIik7ZnVuY3Rpb24gRShPLE4sUCl7Zm9yKGxldCBGPTEsQj1PLmxlbmd0aDtGPEI7KytGKXtsZXQgJD1PW0ZdO2ZvcihsZXQgeiBvZiAkKXtsZXQgVz0wLGo9MDtmb3IobGV0e3NvdXJjZTppZSx2YWx1ZTpRfW9mIHoudGFyZ2V0TGlua3Mpe2xldCBlZT1RKih6LmxheWVyLWllLmxheWVyKTtXKz1SKGllLHopKmVlLGorPWVlfWlmKCEoaj4wKSljb250aW51ZTtsZXQgSz0oVy9qLXoueTApKk47ei55MCs9Syx6LnkxKz1LLEQoeil9aD09PXZvaWQgMCYmJC5zb3J0KFk2KSxDKCQsUCl9fW8oRSwicmVsYXhMZWZ0VG9SaWdodCIpO2Z1bmN0aW9uIEwoTyxOLFApe2ZvcihsZXQgRj1PLmxlbmd0aCxCPUYtMjtCPj0wOy0tQil7bGV0ICQ9T1tCXTtmb3IobGV0IHogb2YgJCl7bGV0IFc9MCxqPTA7Zm9yKGxldHt0YXJnZXQ6aWUsdmFsdWU6UX1vZiB6LnNvdXJjZUxpbmtzKXtsZXQgZWU9USooaWUubGF5ZXItei5sYXllcik7Vys9Uyh6LGllKSplZSxqKz1lZX1pZighKGo+MCkpY29udGludWU7bGV0IEs9KFcvai16LnkwKSpOO3oueTArPUssei55MSs9SyxEKHopfWg9PT12b2lkIDAmJiQuc29ydChZNiksQygkLFApfX1vKEwsInJlbGF4UmlnaHRUb0xlZnQiKTtmdW5jdGlvbiBDKE8sTil7bGV0IFA9Ty5sZW5ndGg+PjEsRj1PW1BdO0koTyxGLnkwLXMsUC0xLE4pLEEoTyxGLnkxK3MsUCsxLE4pLEkoTyxuLE8ubGVuZ3RoLTEsTiksQShPLGUsMCxOKX1vKEMsInJlc29sdmVDb2xsaXNpb25zIik7ZnVuY3Rpb24gQShPLE4sUCxGKXtmb3IoO1A8Ty5sZW5ndGg7KytQKXtsZXQgQj1PW1BdLCQ9KE4tQi55MCkqRjskPjFlLTYmJihCLnkwKz0kLEIueTErPSQpLE49Qi55MStzfX1vKEEsInJlc29sdmVDb2xsaXNpb25zVG9wVG9Cb3R0b20iKTtmdW5jdGlvbiBJKE8sTixQLEYpe2Zvcig7UD49MDstLVApe2xldCBCPU9bUF0sJD0oQi55MS1OKSpGOyQ+MWUtNiYmKEIueTAtPSQsQi55MS09JCksTj1CLnkwLXN9fW8oSSwicmVzb2x2ZUNvbGxpc2lvbnNCb3R0b21Ub1RvcCIpO2Z1bmN0aW9uIEQoe3NvdXJjZUxpbmtzOk8sdGFyZ2V0TGlua3M6Tn0pe2lmKGY9PT12b2lkIDApe2ZvcihsZXR7c291cmNlOntzb3VyY2VMaW5rczpQfX1vZiBOKVAuc29ydChoeWUpO2ZvcihsZXR7dGFyZ2V0Ont0YXJnZXRMaW5rczpQfX1vZiBPKVAuc29ydCh1eWUpfX1vKEQsInJlb3JkZXJOb2RlTGlua3MiKTtmdW5jdGlvbiBrKE8pe2lmKGY9PT12b2lkIDApZm9yKGxldHtzb3VyY2VMaW5rczpOLHRhcmdldExpbmtzOlB9b2YgTylOLnNvcnQoaHllKSxQLnNvcnQodXllKX1vKGssInJlb3JkZXJMaW5rcyIpO2Z1bmN0aW9uIFIoTyxOKXtsZXQgUD1PLnkwLShPLnNvdXJjZUxpbmtzLmxlbmd0aC0xKSpzLzI7Zm9yKGxldHt0YXJnZXQ6Rix3aWR0aDpCfW9mIE8uc291cmNlTGlua3Mpe2lmKEY9PT1OKWJyZWFrO1ArPUIrc31mb3IobGV0e3NvdXJjZTpGLHdpZHRoOkJ9b2YgTi50YXJnZXRMaW5rcyl7aWYoRj09PU8pYnJlYWs7UC09Qn1yZXR1cm4gUH1vKFIsInRhcmdldFRvcCIpO2Z1bmN0aW9uIFMoTyxOKXtsZXQgUD1OLnkwLShOLnRhcmdldExpbmtzLmxlbmd0aC0xKSpzLzI7Zm9yKGxldHtzb3VyY2U6Rix3aWR0aDpCfW9mIE4udGFyZ2V0TGlua3Mpe2lmKEY9PT1PKWJyZWFrO1ArPUIrc31mb3IobGV0e3RhcmdldDpGLHdpZHRoOkJ9b2YgTy5zb3VyY2VMaW5rcyl7aWYoRj09PU4pYnJlYWs7UC09Qn1yZXR1cm4gUH1yZXR1cm4gbyhTLCJzb3VyY2VUb3AiKSxnfXZhciBweWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQQigpO0dCKCk7Y3llKCk7byh1eWUsImFzY2VuZGluZ1NvdXJjZUJyZWFkdGgiKTtvKGh5ZSwiYXNjZW5kaW5nVGFyZ2V0QnJlYWR0aCIpO28oWTYsImFzY2VuZGluZ0JyZWFkdGgiKTtvKCRCLCJ2YWx1ZSIpO28oZnJ0LCJkZWZhdWx0SWQiKTtvKGRydCwiZGVmYXVsdE5vZGVzIik7byhwcnQsImRlZmF1bHRMaW5rcyIpO28oZnllLCJmaW5kIik7byhkeWUsImNvbXB1dGVMaW5rQnJlYWR0aHMiKTtvKHE2LCJTYW5rZXkiKX0pO2Z1bmN0aW9uIEhCKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gbXllKCl7cmV0dXJuIG5ldyBIQn12YXIgVkIsVUIscTAsbXJ0LFdCLGd5ZT1NKCgpPT57InVzZSBzdHJpY3QiO1ZCPU1hdGguUEksVUI9MipWQixxMD0xZS02LG1ydD1VQi1xMDtvKEhCLCJQYXRoIik7byhteWUsInBhdGgiKTtIQi5wcm90b3R5cGU9bXllLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SEIsbW92ZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSwibW92ZVRvIiksY2xvc2VQYXRoOm8oZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LCJjbG9zZVBhdGgiKSxsaW5lVG86byhmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LCJsaW5lVG8iKSxxdWFkcmF0aWNDdXJ2ZVRvOm8oZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LCJxdWFkcmF0aWNDdXJ2ZVRvIiksYmV6aWVyQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LCJiZXppZXJDdXJ2ZVRvIiksYXJjVG86byhmdW5jdGlvbih0LGUscixuLGkpe3Q9K3QsZT0rZSxyPStyLG49K24saT0raTt2YXIgYT10aGlzLl94MSxzPXRoaXMuX3kxLGw9ci10LHU9bi1lLGg9YS10LGY9cy1lLGQ9aCpoK2YqZjtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoZD5xMClpZighKE1hdGguYWJzKGYqbC11KmgpPnEwKXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZXt2YXIgcD1yLWEsbT1uLXMsZz1sKmwrdSp1LHk9cCpwK20qbSx2PU1hdGguc3FydChnKSx4PU1hdGguc3FydChkKSxiPWkqTWF0aC50YW4oKFZCLU1hdGguYWNvcygoZytkLXkpLygyKnYqeCkpKS8yKSx3PWIveCxfPWIvdjtNYXRoLmFicyh3LTEpPnEwJiYodGhpcy5fKz0iTCIrKHQrdypoKSsiLCIrKGUrdypmKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGYqcD5oKm0pKyIsIisodGhpcy5feDE9dCtfKmwpKyIsIisodGhpcy5feTE9ZStfKnUpfX0sImFyY1RvIiksYXJjOm8oZnVuY3Rpb24odCxlLHIsbixpLGEpe3Q9K3QsZT0rZSxyPStyLGE9ISFhO3ZhciBzPXIqTWF0aC5jb3MobiksbD1yKk1hdGguc2luKG4pLHU9dCtzLGg9ZStsLGY9MV5hLGQ9YT9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrdSsiLCIraDooTWF0aC5hYnModGhpcy5feDEtdSk+cTB8fE1hdGguYWJzKHRoaXMuX3kxLWgpPnEwKSYmKHRoaXMuXys9IkwiK3UrIiwiK2gpLHImJihkPDAmJihkPWQlVUIrVUIpLGQ+bXJ0P3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIitmKyIsIisodC1zKSsiLCIrKGUtbCkrIkEiK3IrIiwiK3IrIiwwLDEsIitmKyIsIisodGhpcy5feDE9dSkrIiwiKyh0aGlzLl95MT1oKTpkPnEwJiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhkPj1WQikrIiwiK2YrIiwiKyh0aGlzLl94MT10K3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStyKk1hdGguc2luKGkpKSkpfSwiYXJjIikscmVjdDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LCJyZWN0IiksdG9TdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl99LCJ0b1N0cmluZyIpfTtXQj1teWV9KTt2YXIgeXllPU0oKCk9PnsidXNlIHN0cmljdCI7Z3llKCl9KTtmdW5jdGlvbiBYNih0KXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiB0fSwiY29uc3RhbnQiKX12YXIgdnllPU0oKCk9PnsidXNlIHN0cmljdCI7byhYNiwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24geHllKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGJ5ZSh0KXtyZXR1cm4gdFsxXX12YXIgd3llPU0oKCk9PnsidXNlIHN0cmljdCI7byh4eWUsIngiKTtvKGJ5ZSwieSIpfSk7dmFyIFR5ZSxreWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUeWU9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24gZ3J0KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiB5cnQodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIHZydCh0KXt2YXIgZT1ncnQscj15cnQsbj14eWUsaT1ieWUsYT1udWxsO2Z1bmN0aW9uIHMoKXt2YXIgbCx1PVR5ZS5jYWxsKGFyZ3VtZW50cyksaD1lLmFwcGx5KHRoaXMsdSksZj1yLmFwcGx5KHRoaXMsdSk7aWYoYXx8KGE9bD1XQigpKSx0KGEsK24uYXBwbHkodGhpcywodVswXT1oLHUpKSwraS5hcHBseSh0aGlzLHUpLCtuLmFwcGx5KHRoaXMsKHVbMF09Zix1KSksK2kuYXBwbHkodGhpcyx1KSksbClyZXR1cm4gYT1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIG8ocywibGluayIpLHMuc291cmNlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWwscyk6ZX0scy50YXJnZXQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bCxzKTpyfSxzLng9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpYNigrbCkscyk6bn0scy55PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6WDYoK2wpLHMpOml9LHMuY29udGV4dD1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1sPz9udWxsLHMpOmF9LHN9ZnVuY3Rpb24geHJ0KHQsZSxyLG4saSl7dC5tb3ZlVG8oZSxyKSx0LmJlemllckN1cnZlVG8oZT0oZStuKS8yLHIsZSxpLG4saSl9ZnVuY3Rpb24gWUIoKXtyZXR1cm4gdnJ0KHhydCl9dmFyIEV5ZT1NKCgpPT57InVzZSBzdHJpY3QiO3l5ZSgpO2t5ZSgpO3Z5ZSgpO3d5ZSgpO28oZ3J0LCJsaW5rU291cmNlIik7byh5cnQsImxpbmtUYXJnZXQiKTtvKHZydCwibGluayIpO28oeHJ0LCJjdXJ2ZUhvcml6b250YWwiKTtvKFlCLCJsaW5rSG9yaXpvbnRhbCIpfSk7dmFyIFN5ZT1NKCgpPT57InVzZSBzdHJpY3QiO0V5ZSgpfSk7ZnVuY3Rpb24gYnJ0KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB3cnQodCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfWZ1bmN0aW9uIGo2KCl7cmV0dXJuIFlCKCkuc291cmNlKGJydCkudGFyZ2V0KHdydCl9dmFyIEN5ZT1NKCgpPT57InVzZSBzdHJpY3QiO1N5ZSgpO28oYnJ0LCJob3Jpem9udGFsU291cmNlIik7byh3cnQsImhvcml6b250YWxUYXJnZXQiKTtvKGo2LCJkZWZhdWx0Iil9KTt2YXIgQXllPU0oKCk9PnsidXNlIHN0cmljdCI7cHllKCk7R0IoKTtDeWUoKX0pO3ZhciBkYixfeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkYj1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlVpZCIpfXN0YXRpY3t0aGlzLmNvdW50PTB9c3RhdGljIG5leHQoZSl7cmV0dXJuIG5ldyB0KGUrICsrdC5jb3VudCl9Y29uc3RydWN0b3IoZSl7dGhpcy5pZD1lLHRoaXMuaHJlZj1gIyR7ZX1gfXRvU3RyaW5nKCl7cmV0dXJuInVybCgiK3RoaXMuaHJlZisiKSJ9fX0pO3ZhciBUcnQsa3J0LEx5ZSxEeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO21yKCk7QXllKCk7bmkoKTtfeWUoKTtUcnQ9e2xlZnQ6QkIscmlnaHQ6RkIsY2VudGVyOnpCLGp1c3RpZnk6ZmJ9LGtydD1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldHtzZWN1cml0eUxldmVsOmksc2Fua2V5OmF9PWRlKCkscz1TNC5zYW5rZXksbDtpPT09InNhbmRib3giJiYobD16ZSgiI2kiK2UpKTtsZXQgdT1pPT09InNhbmRib3giP3plKGwubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6emUoImJvZHkiKSxoPWk9PT0ic2FuZGJveCI/dS5zZWxlY3QoYFtpZD0iJHtlfSJdYCk6emUoYFtpZD0iJHtlfSJdYCksZj1hPy53aWR0aD8/cy53aWR0aCxkPWE/LmhlaWdodD8/cy53aWR0aCxwPWE/LnVzZU1heFdpZHRoPz9zLnVzZU1heFdpZHRoLG09YT8ubm9kZUFsaWdubWVudD8/cy5ub2RlQWxpZ25tZW50LGc9YT8ucHJlZml4Pz9zLnByZWZpeCx5PWE/LnN1ZmZpeD8/cy5zdWZmaXgsdj1hPy5zaG93VmFsdWVzPz9zLnNob3dWYWx1ZXMseD1uLmRiLmdldEdyYXBoKCksYj1UcnRbbV07cTYoKS5ub2RlSWQoST0+SS5pZCkubm9kZVdpZHRoKDEwKS5ub2RlUGFkZGluZygxMCsodj8xNTowKSkubm9kZUFsaWduKGIpLmV4dGVudChbWzAsMF0sW2YsZF1dKSh4KTtsZXQgVD1kdShaOCk7aC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIikuc2VsZWN0QWxsKCIubm9kZSIpLmRhdGEoeC5ub2Rlcykuam9pbigiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLmF0dHIoImlkIixJPT4oSS51aWQ9ZGIubmV4dCgibm9kZS0iKSkuaWQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuInRyYW5zbGF0ZSgiK0kueDArIiwiK0kueTArIikifSkuYXR0cigieCIsST0+SS54MCkuYXR0cigieSIsST0+SS55MCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaGVpZ2h0IixJPT5JLnkxLUkueTApLmF0dHIoIndpZHRoIixJPT5JLngxLUkueDApLmF0dHIoImZpbGwiLEk9PlQoSS5pZCkpO2xldCBFPW8oKHtpZDpJLHZhbHVlOkR9KT0+dj9gJHtJfQoke2d9JHtNYXRoLnJvdW5kKEQqMTAwKS8xMDB9JHt5fWA6SSwiZ2V0VGV4dCIpO2guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlLWxhYmVscyIpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsMTQpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoeC5ub2Rlcykuam9pbigidGV4dCIpLmF0dHIoIngiLEk9PkkueDA8Zi8yP0kueDErNjpJLngwLTYpLmF0dHIoInkiLEk9PihJLnkxK0kueTApLzIpLmF0dHIoImR5IixgJHt2PyIwIjoiMC4zNSJ9ZW1gKS5hdHRyKCJ0ZXh0LWFuY2hvciIsST0+SS54MDxmLzI/InN0YXJ0IjoiZW5kIikudGV4dChFKTtsZXQgTD1oLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGlua3MiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuNSkuc2VsZWN0QWxsKCIubGluayIpLmRhdGEoeC5saW5rcykuam9pbigiZyIpLmF0dHIoImNsYXNzIiwibGluayIpLnN0eWxlKCJtaXgtYmxlbmQtbW9kZSIsIm11bHRpcGx5IiksQz1hPy5saW5rQ29sb3I/PyJncmFkaWVudCI7aWYoQz09PSJncmFkaWVudCIpe2xldCBJPUwuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixEPT4oRC51aWQ9ZGIubmV4dCgibGluZWFyR3JhZGllbnQtIikpLmlkKS5hdHRyKCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJ4MSIsRD0+RC5zb3VyY2UueDEpLmF0dHIoIngyIixEPT5ELnRhcmdldC54MCk7SS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIwJSIpLmF0dHIoInN0b3AtY29sb3IiLEQ9PlQoRC5zb3VyY2UuaWQpKSxJLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsIjEwMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixEPT5UKEQudGFyZ2V0LmlkKSl9bGV0IEE7c3dpdGNoKEMpe2Nhc2UiZ3JhZGllbnQiOkE9byhJPT5JLnVpZCwiY29sb3JpbmciKTticmVhaztjYXNlInNvdXJjZSI6QT1vKEk9PlQoSS5zb3VyY2UuaWQpLCJjb2xvcmluZyIpO2JyZWFrO2Nhc2UidGFyZ2V0IjpBPW8oST0+VChJLnRhcmdldC5pZCksImNvbG9yaW5nIik7YnJlYWs7ZGVmYXVsdDpBPUN9TC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixqNigpKS5hdHRyKCJzdHJva2UiLEEpLmF0dHIoInN0cm9rZS13aWR0aCIsST0+TWF0aC5tYXgoMSxJLndpZHRoKSksX28odm9pZCAwLGgsMCxwKX0sImRyYXciKSxMeWU9e2RyYXc6a3J0fX0pO3ZhciBOeWUsUnllPU0oKCk9PnsidXNlIHN0cmljdCI7TnllPW8odD0+dC5yZXBsYWNlQWxsKC9eW15cU1xuXHJdK3xbXlxTXG5ccl0rJC9nLCIiKS5yZXBsYWNlQWxsKC8oW1xuXHJdKSsvZyxgCmApLnRyaW0oKSwicHJlcGFyZVRleHRGb3JQYXJzaW5nIil9KTt2YXIgTXllPXt9O3ZyKE15ZSx7ZGlhZ3JhbTooKT0+U3J0fSk7dmFyIEVydCxTcnQsSXllPU0oKCk9PnsidXNlIHN0cmljdCI7bnllKCk7YXllKCk7RHllKCk7UnllKCk7RXJ0PXViLnBhcnNlLmJpbmQodWIpO3ViLnBhcnNlPXQ9PkVydChOeWUodCkpO1NydD17cGFyc2VyOnViLGRiOml5ZSxyZW5kZXJlcjpMeWV9fSk7dmFyIEJ5ZSxxQixMcnQsRHJ0LE5ydCxScnQsTXJ0LFJmLFhCPU0oKCk9PnsidXNlIHN0cmljdCI7VWEoKTtocygpO2hyKCk7a2koKTtCeWU9e3BhY2tldDpbXX0scUI9c3RydWN0dXJlZENsb25lKEJ5ZSksTHJ0PXVyLnBhY2tldCxEcnQ9bygoKT0+e2xldCB0PXdzKHsuLi5McnQsLi4uU3IoKS5wYWNrZXR9KTtyZXR1cm4gdC5zaG93Qml0cyYmKHQucGFkZGluZ1krPTEwKSx0fSwiZ2V0Q29uZmlnIiksTnJ0PW8oKCk9PnFCLnBhY2tldCwiZ2V0UGFja2V0IiksUnJ0PW8odD0+e3QubGVuZ3RoPjAmJnFCLnBhY2tldC5wdXNoKHQpfSwicHVzaFdvcmQiKSxNcnQ9bygoKT0+e19yKCkscUI9c3RydWN0dXJlZENsb25lKEJ5ZSl9LCJjbGVhciIpLFJmPXtwdXNoV29yZDpScnQsZ2V0UGFja2V0Ok5ydCxnZXRDb25maWc6RHJ0LGNsZWFyOk1ydCxzZXRBY2NUaXRsZTpScixnZXRBY2NUaXRsZTpQcixzZXREaWFncmFtVGl0bGU6bG4sZ2V0RGlhZ3JhbVRpdGxlOkpyLGdldEFjY0Rlc2NyaXB0aW9uOkZyLHNldEFjY0Rlc2NyaXB0aW9uOkJyfX0pO3ZhciBJcnQsT3J0LFBydCxGeWUsenllPU0oKCk9PnsidXNlIHN0cmljdCI7TmcoKTtodCgpO294KCk7WEIoKTtJcnQ9MWU0LE9ydD1vKHQ9PntsZih0LFJmKTtsZXQgZT0tMSxyPVtdLG49MSx7Yml0c1BlclJvdzppfT1SZi5nZXRDb25maWcoKTtmb3IobGV0e3N0YXJ0OmEsZW5kOnMsbGFiZWw6bH1vZiB0LmJsb2Nrcyl7aWYocyYmczxhKXRocm93IG5ldyBFcnJvcihgUGFja2V0IGJsb2NrICR7YX0gLSAke3N9IGlzIGludmFsaWQuIEVuZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBzdGFydC5gKTtpZihhIT09ZSsxKXRocm93IG5ldyBFcnJvcihgUGFja2V0IGJsb2NrICR7YX0gLSAke3M/P2F9IGlzIG5vdCBjb250aWd1b3VzLiBJdCBzaG91bGQgc3RhcnQgZnJvbSAke2UrMX0uYCk7Zm9yKGU9cz8/YSxZLmRlYnVnKGBQYWNrZXQgYmxvY2sgJHthfSAtICR7ZX0gd2l0aCBsYWJlbCAke2x9YCk7ci5sZW5ndGg8PWkrMSYmUmYuZ2V0UGFja2V0KCkubGVuZ3RoPElydDspe2xldFt1LGhdPVBydCh7c3RhcnQ6YSxlbmQ6cyxsYWJlbDpsfSxuLGkpO2lmKHIucHVzaCh1KSx1LmVuZCsxPT09bippJiYoUmYucHVzaFdvcmQocikscj1bXSxuKyspLCFoKWJyZWFrOyh7c3RhcnQ6YSxlbmQ6cyxsYWJlbDpsfT1oKX19UmYucHVzaFdvcmQocil9LCJwb3B1bGF0ZSIpLFBydD1vKCh0LGUscik9PntpZih0LmVuZD09PXZvaWQgMCYmKHQuZW5kPXQuc3RhcnQpLHQuc3RhcnQ+dC5lbmQpdGhyb3cgbmV3IEVycm9yKGBCbG9jayBzdGFydCAke3Quc3RhcnR9IGlzIGdyZWF0ZXIgdGhhbiBibG9jayBlbmQgJHt0LmVuZH0uYCk7cmV0dXJuIHQuZW5kKzE8PWUqcj9bdCx2b2lkIDBdOlt7c3RhcnQ6dC5zdGFydCxlbmQ6ZSpyLTEsbGFiZWw6dC5sYWJlbH0se3N0YXJ0OmUqcixlbmQ6dC5lbmQsbGFiZWw6dC5sYWJlbH1dfSwiZ2V0TmV4dEZpdHRpbmdCbG9jayIpLEZ5ZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgR2woInBhY2tldCIsdCk7WS5kZWJ1ZyhlKSxPcnQoZSl9LCJwYXJzZSIpfX0pO3ZhciBCcnQsRnJ0LEd5ZSwkeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdSgpO25pKCk7QnJ0PW8oKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0Q29uZmlnKCkse3Jvd0hlaWdodDpzLHBhZGRpbmdZOmwsYml0V2lkdGg6dSxiaXRzUGVyUm93Omh9PWEsZj1pLmdldFBhY2tldCgpLGQ9aS5nZXREaWFncmFtVGl0bGUoKSxwPXMrbCxtPXAqKGYubGVuZ3RoKzEpLShkPzA6cyksZz11KmgrMix5PU9hKGUpO3kuYXR0cigidmlld2JveCIsYDAgMCAke2d9ICR7bX1gKSxacih5LG0sZyxhLnVzZU1heFdpZHRoKTtmb3IobGV0W3YseF1vZiBmLmVudHJpZXMoKSlGcnQoeSx4LHYsYSk7eS5hcHBlbmQoInRleHQiKS50ZXh0KGQpLmF0dHIoIngiLGcvMikuYXR0cigieSIsbS1wLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInBhY2tldFRpdGxlIil9LCJkcmF3IiksRnJ0PW8oKHQsZSxyLHtyb3dIZWlnaHQ6bixwYWRkaW5nWDppLHBhZGRpbmdZOmEsYml0V2lkdGg6cyxiaXRzUGVyUm93Omwsc2hvd0JpdHM6dX0pPT57bGV0IGg9dC5hcHBlbmQoImciKSxmPXIqKG4rYSkrYTtmb3IobGV0IGQgb2YgZSl7bGV0IHA9ZC5zdGFydCVsKnMrMSxtPShkLmVuZC1kLnN0YXJ0KzEpKnMtaTtpZihoLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLHApLmF0dHIoInkiLGYpLmF0dHIoIndpZHRoIixtKS5hdHRyKCJoZWlnaHQiLG4pLmF0dHIoImNsYXNzIiwicGFja2V0QmxvY2siKSxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHArbS8yKS5hdHRyKCJ5IixmK24vMikuYXR0cigiY2xhc3MiLCJwYWNrZXRMYWJlbCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGQubGFiZWwpLCF1KWNvbnRpbnVlO2xldCBnPWQuZW5kPT09ZC5zdGFydCx5PWYtMjtoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHArKGc/bS8yOjApKS5hdHRyKCJ5Iix5KS5hdHRyKCJjbGFzcyIsInBhY2tldEJ5dGUgc3RhcnQiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImF1dG8iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZz8ibWlkZGxlIjoic3RhcnQiKS50ZXh0KGQuc3RhcnQpLGd8fGguYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscCttKS5hdHRyKCJ5Iix5KS5hdHRyKCJjbGFzcyIsInBhY2tldEJ5dGUgZW5kIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS50ZXh0KGQuZW5kKX19LCJkcmF3V29yZCIpLEd5ZT17ZHJhdzpCcnR9fSk7dmFyIHpydCxWeWUsVXllPU0oKCk9PnsidXNlIHN0cmljdCI7aHIoKTt6cnQ9e2J5dGVGb250U2l6ZToiMTBweCIsc3RhcnRCeXRlQ29sb3I6ImJsYWNrIixlbmRCeXRlQ29sb3I6ImJsYWNrIixsYWJlbENvbG9yOiJibGFjayIsbGFiZWxGb250U2l6ZToiMTJweCIsdGl0bGVDb2xvcjoiYmxhY2siLHRpdGxlRm9udFNpemU6IjE0cHgiLGJsb2NrU3Ryb2tlQ29sb3I6ImJsYWNrIixibG9ja1N0cm9rZVdpZHRoOiIxIixibG9ja0ZpbGxDb2xvcjoiI2VmZWZlZiJ9LFZ5ZT1vKCh7cGFja2V0OnR9PXt9KT0+e2xldCBlPXdzKHpydCx0KTtyZXR1cm5gCgkucGFja2V0Qnl0ZSB7CgkJZm9udC1zaXplOiAke2UuYnl0ZUZvbnRTaXplfTsKCX0KCS5wYWNrZXRCeXRlLnN0YXJ0IHsKCQlmaWxsOiAke2Uuc3RhcnRCeXRlQ29sb3J9OwoJfQoJLnBhY2tldEJ5dGUuZW5kIHsKCQlmaWxsOiAke2UuZW5kQnl0ZUNvbG9yfTsKCX0KCS5wYWNrZXRMYWJlbCB7CgkJZmlsbDogJHtlLmxhYmVsQ29sb3J9OwoJCWZvbnQtc2l6ZTogJHtlLmxhYmVsRm9udFNpemV9OwoJfQoJLnBhY2tldFRpdGxlIHsKCQlmaWxsOiAke2UudGl0bGVDb2xvcn07CgkJZm9udC1zaXplOiAke2UudGl0bGVGb250U2l6ZX07Cgl9CgkucGFja2V0QmxvY2sgewoJCXN0cm9rZTogJHtlLmJsb2NrU3Ryb2tlQ29sb3J9OwoJCXN0cm9rZS13aWR0aDogJHtlLmJsb2NrU3Ryb2tlV2lkdGh9OwoJCWZpbGw6ICR7ZS5ibG9ja0ZpbGxDb2xvcn07Cgl9CglgfSwic3R5bGVzIil9KTt2YXIgSHllPXt9O3ZyKEh5ZSx7ZGlhZ3JhbTooKT0+R3J0fSk7dmFyIEdydCxXeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYQigpO3p5ZSgpOyR5ZSgpO1V5ZSgpO0dydD17cGFyc2VyOkZ5ZSxkYjpSZixyZW5kZXJlcjpHeWUsc3R5bGVzOlZ5ZX19KTt2YXIgakIsWHllLGp5ZT1NKCgpPT57InVzZSBzdHJpY3QiO2pCPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbih3LF8sVCxFKXtmb3IoVD1UfHx7fSxFPXcubGVuZ3RoO0UtLTtUW3dbRV1dPV8pO3JldHVybiBUfSwibyIpLGU9WzEsN10scj1bMSwxM10sbj1bMSwxNF0saT1bMSwxNV0sYT1bMSwxOV0scz1bMSwxNl0sbD1bMSwxN10sdT1bMSwxOF0saD1bOCwzMF0sZj1bOCwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sZD1bMSwyM10scD1bMSwyNF0sbT1bOCwxNSwxNiwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sZz1bOCwxNSwxNiwyMSwyNywyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10seT1bMSw0OV0sdj17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3BhY2VMaW5lczozLFNQQUNFTElORTo0LE5MOjUsc2VwYXJhdG9yOjYsU1BBQ0U6NyxFT0Y6OCxzdGFydDo5LEJMT0NLX0RJQUdSQU1fS0VZOjEwLGRvY3VtZW50OjExLHN0b3A6MTIsc3RhdGVtZW50OjEzLGxpbms6MTQsTElOSzoxNSxTVEFSVF9MSU5LOjE2LExJTktfTEFCRUw6MTcsU1RSOjE4LG5vZGVTdGF0ZW1lbnQ6MTksY29sdW1uc1N0YXRlbWVudDoyMCxTUEFDRV9CTE9DSzoyMSxibG9ja1N0YXRlbWVudDoyMixjbGFzc0RlZlN0YXRlbWVudDoyMyxjc3NDbGFzc1N0YXRlbWVudDoyNCxzdHlsZVN0YXRlbWVudDoyNSxub2RlOjI2LFNJWkU6MjcsQ09MVU1OUzoyOCwiaWQtYmxvY2siOjI5LGVuZDozMCxibG9jazozMSxOT0RFX0lEOjMyLG5vZGVTaGFwZU5MYWJlbDozMyxkaXJMaXN0OjM0LERJUjozNSxOT0RFX0RTVEFSVDozNixOT0RFX0RFTkQ6MzcsQkxPQ0tfQVJST1dfU1RBUlQ6MzgsQkxPQ0tfQVJST1dfRU5EOjM5LGNsYXNzRGVmOjQwLENMQVNTREVGX0lEOjQxLENMQVNTREVGX1NUWUxFT1BUUzo0MixERUZBVUxUOjQzLGNsYXNzOjQ0LENMQVNTRU5USVRZX0lEUzo0NSxTVFlMRUNMQVNTOjQ2LHN0eWxlOjQ3LFNUWUxFX0VOVElUWV9JRFM6NDgsU1RZTEVfREVGSU5JVElPTl9EQVRBOjQ5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRUxJTkUiLDU6Ik5MIiw3OiJTUEFDRSIsODoiRU9GIiwxMDoiQkxPQ0tfRElBR1JBTV9LRVkiLDE1OiJMSU5LIiwxNjoiU1RBUlRfTElOSyIsMTc6IkxJTktfTEFCRUwiLDE4OiJTVFIiLDIxOiJTUEFDRV9CTE9DSyIsMjc6IlNJWkUiLDI4OiJDT0xVTU5TIiwyOToiaWQtYmxvY2siLDMwOiJlbmQiLDMxOiJibG9jayIsMzI6Ik5PREVfSUQiLDM1OiJESVIiLDM2OiJOT0RFX0RTVEFSVCIsMzc6Ik5PREVfREVORCIsMzg6IkJMT0NLX0FSUk9XX1NUQVJUIiwzOToiQkxPQ0tfQVJST1dfRU5EIiw0MDoiY2xhc3NEZWYiLDQxOiJDTEFTU0RFRl9JRCIsNDI6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDM6IkRFRkFVTFQiLDQ0OiJjbGFzcyIsNDU6IkNMQVNTRU5USVRZX0lEUyIsNDY6IlNUWUxFQ0xBU1MiLDQ3OiJzdHlsZSIsNDg6IlNUWUxFX0VOVElUWV9JRFMiLDQ5OiJTVFlMRV9ERUZJTklUSU9OX0RBVEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzMsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzksM10sWzEyLDFdLFsxMiwxXSxbMTIsMl0sWzEyLDJdLFsxMSwxXSxbMTEsMl0sWzE0LDFdLFsxNCw0XSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzE5LDNdLFsxOSwyXSxbMTksMV0sWzIwLDFdLFsyMiw0XSxbMjIsM10sWzI2LDFdLFsyNiwyXSxbMzQsMV0sWzM0LDJdLFszMywzXSxbMzMsNF0sWzIzLDNdLFsyMywzXSxbMjQsM10sWzI1LDNdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oXyxULEUsTCxDLEEsSSl7dmFyIEQ9QS5sZW5ndGgtMTtzd2l0Y2goQyl7Y2FzZSA0OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoTkwpICIpO2JyZWFrO2Nhc2UgNTpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKFNwYWNlKSAiKTticmVhaztjYXNlIDY6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChFT0YpICIpO2JyZWFrO2Nhc2UgNzpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBoaWVyYXJjaHk6ICIsQVtELTFdKSxMLnNldEhpZXJhcmNoeShBW0QtMV0pO2JyZWFrO2Nhc2UgODpMLmdldExvZ2dlcigpLmRlYnVnKCJTdG9wIE5MICIpO2JyZWFrO2Nhc2UgOTpMLmdldExvZ2dlcigpLmRlYnVnKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDEwOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTE6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBFT0YyICIpO2JyZWFrO2Nhc2UgMTI6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc3RhdGVtZW50OiAiLEFbRF0pLHR5cGVvZiBBW0RdLmxlbmd0aD09Im51bWJlciI/dGhpcy4kPUFbRF06dGhpcy4kPVtBW0RdXTticmVhaztjYXNlIDEzOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHN0YXRlbWVudCAjMjogIixBW0QtMV0pLHRoaXMuJD1bQVtELTFdXS5jb25jYXQoQVtEXSk7YnJlYWs7Y2FzZSAxNDpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBsaW5rOiAiLEFbRF0sXyksdGhpcy4kPXtlZGdlVHlwZVN0cjpBW0RdLGxhYmVsOiIifTticmVhaztjYXNlIDE1OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IExBQkVMIGxpbms6ICIsQVtELTNdLEFbRC0xXSxBW0RdKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOkFbRF0sbGFiZWw6QVtELTFdfTticmVhaztjYXNlIDE4OmxldCBrPXBhcnNlSW50KEFbRF0pLFI9TC5nZW5lcmF0ZUlkKCk7dGhpcy4kPXtpZDpSLHR5cGU6InNwYWNlIixsYWJlbDoiIix3aWR0aDprLGNoaWxkcmVuOltdfTticmVhaztjYXNlIDIzOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IChub2RlU3RhdGVtZW50IGxpbmsgbm9kZSkgIixBW0QtMl0sQVtELTFdLEFbRF0sIiB0eXBlc3RyOiAiLEFbRC0xXS5lZGdlVHlwZVN0cik7bGV0IFM9TC5lZGdlU3RyVG9FZGdlRGF0YShBW0QtMV0uZWRnZVR5cGVTdHIpO3RoaXMuJD1be2lkOkFbRC0yXS5pZCxsYWJlbDpBW0QtMl0ubGFiZWwsdHlwZTpBW0QtMl0udHlwZSxkaXJlY3Rpb25zOkFbRC0yXS5kaXJlY3Rpb25zfSx7aWQ6QVtELTJdLmlkKyItIitBW0RdLmlkLHN0YXJ0OkFbRC0yXS5pZCxlbmQ6QVtEXS5pZCxsYWJlbDpBW0QtMV0ubGFiZWwsdHlwZToiZWRnZSIsZGlyZWN0aW9uczpBW0RdLmRpcmVjdGlvbnMsYXJyb3dUeXBlRW5kOlMsYXJyb3dUeXBlU3RhcnQ6ImFycm93X29wZW4ifSx7aWQ6QVtEXS5pZCxsYWJlbDpBW0RdLmxhYmVsLHR5cGU6TC50eXBlU3RyMlR5cGUoQVtEXS50eXBlU3RyKSxkaXJlY3Rpb25zOkFbRF0uZGlyZWN0aW9uc31dO2JyZWFrO2Nhc2UgMjQ6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZVN0YXRlbWVudCAoYWJjODggbm9kZSBzaXplKSAiLEFbRC0xXSxBW0RdKSx0aGlzLiQ9e2lkOkFbRC0xXS5pZCxsYWJlbDpBW0QtMV0ubGFiZWwsdHlwZTpMLnR5cGVTdHIyVHlwZShBW0QtMV0udHlwZVN0ciksZGlyZWN0aW9uczpBW0QtMV0uZGlyZWN0aW9ucyx3aWR0aEluQ29sdW1uczpwYXJzZUludChBW0RdLDEwKX07YnJlYWs7Y2FzZSAyNTpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU3RhdGVtZW50IChub2RlKSAiLEFbRF0pLHRoaXMuJD17aWQ6QVtEXS5pZCxsYWJlbDpBW0RdLmxhYmVsLHR5cGU6TC50eXBlU3RyMlR5cGUoQVtEXS50eXBlU3RyKSxkaXJlY3Rpb25zOkFbRF0uZGlyZWN0aW9ucyx3aWR0aEluQ29sdW1uczoxfTticmVhaztjYXNlIDI2OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIkFQQTEyMyIsdGhpcz90aGlzOiJuYSIpLEwuZ2V0TG9nZ2VyKCkuZGVidWcoIkNPTFVNTlM6ICIsQVtEXSksdGhpcy4kPXt0eXBlOiJjb2x1bW4tc2V0dGluZyIsY29sdW1uczpBW0RdPT09ImF1dG8iPy0xOnBhcnNlSW50KEFbRF0pfTticmVhaztjYXNlIDI3OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGlkLWJsb2NrIHN0YXRlbWVudCA6ICIsQVtELTJdLEFbRC0xXSk7bGV0IE89TC5nZW5lcmF0ZUlkKCk7dGhpcy4kPXsuLi5BW0QtMl0sdHlwZToiY29tcG9zaXRlIixjaGlsZHJlbjpBW0QtMV19O2JyZWFrO2Nhc2UgMjg6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogYmxvY2tTdGF0ZW1lbnQgOiAiLEFbRC0yXSxBW0QtMV0sQVtEXSk7bGV0IE49TC5nZW5lcmF0ZUlkKCk7dGhpcy4kPXtpZDpOLHR5cGU6ImNvbXBvc2l0ZSIsbGFiZWw6IiIsY2hpbGRyZW46QVtELTFdfTticmVhaztjYXNlIDI5OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgc2VwYXJhdG9yKTogIixBW0RdKSx0aGlzLiQ9e2lkOkFbRF19O2JyZWFrO2Nhc2UgMzA6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZSAoTk9ERV9JRCBub2RlU2hhcGVOTGFiZWwgc2VwYXJhdG9yKTogIixBW0QtMV0sQVtEXSksdGhpcy4kPXtpZDpBW0QtMV0sbGFiZWw6QVtEXS5sYWJlbCx0eXBlU3RyOkFbRF0udHlwZVN0cixkaXJlY3Rpb25zOkFbRF0uZGlyZWN0aW9uc307YnJlYWs7Y2FzZSAzMTpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBkaXJMaXN0OiAiLEFbRF0pLHRoaXMuJD1bQVtEXV07YnJlYWs7Y2FzZSAzMjpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBkaXJMaXN0OiAiLEFbRC0xXSxBW0RdKSx0aGlzLiQ9W0FbRC0xXV0uY29uY2F0KEFbRF0pO2JyZWFrO2Nhc2UgMzM6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZVNoYXBlTkxhYmVsOiAiLEFbRC0yXSxBW0QtMV0sQVtEXSksdGhpcy4kPXt0eXBlU3RyOkFbRC0yXStBW0RdLGxhYmVsOkFbRC0xXX07YnJlYWs7Y2FzZSAzNDpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBCTE9DS19BUlJPVyBub2RlU2hhcGVOTGFiZWw6ICIsQVtELTNdLEFbRC0yXSwiICMzOiIsQVtELTFdLEFbRF0pLHRoaXMuJD17dHlwZVN0cjpBW0QtM10rQVtEXSxsYWJlbDpBW0QtMl0sZGlyZWN0aW9uczpBW0QtMV19O2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNjp0aGlzLiQ9e3R5cGU6ImNsYXNzRGVmIixpZDpBW0QtMV0udHJpbSgpLGNzczpBW0RdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9e3R5cGU6ImFwcGx5Q2xhc3MiLGlkOkFbRC0xXS50cmltKCksc3R5bGVDbGFzczpBW0RdLnRyaW0oKX07YnJlYWs7Y2FzZSAzODp0aGlzLiQ9e3R5cGU6ImFwcGx5U3R5bGVzIixpZDpBW0QtMV0udHJpbSgpLHN0eWxlc1N0cjpBW0RdLnRyaW0oKX07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3s5OjEsMTA6WzEsMl19LHsxOlszXX0sezExOjMsMTM6NCwxOTo1LDIwOjYsMjE6ZSwyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6ciwyOTpuLDMxOmksMzI6YSw0MDpzLDQ0OmwsNDc6dX0sezg6WzEsMjBdfSx0KGgsWzIsMTJdLHsxMzo0LDE5OjUsMjA6NiwyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMTE6MjEsMjE6ZSwyODpyLDI5Om4sMzE6aSwzMjphLDQwOnMsNDQ6bCw0Nzp1fSksdChmLFsyLDE2XSx7MTQ6MjIsMTU6ZCwxNjpwfSksdChmLFsyLDE3XSksdChmLFsyLDE4XSksdChmLFsyLDE5XSksdChmLFsyLDIwXSksdChmLFsyLDIxXSksdChmLFsyLDIyXSksdChtLFsyLDI1XSx7Mjc6WzEsMjVdfSksdChmLFsyLDI2XSksezE5OjI2LDI2OjEyLDMyOmF9LHsxMToyNywxMzo0LDE5OjUsMjA6NiwyMTplLDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyODpyLDI5Om4sMzE6aSwzMjphLDQwOnMsNDQ6bCw0Nzp1fSx7NDE6WzEsMjhdLDQzOlsxLDI5XX0sezQ1OlsxLDMwXX0sezQ4OlsxLDMxXX0sdChnLFsyLDI5XSx7MzM6MzIsMzY6WzEsMzNdLDM4OlsxLDM0XX0pLHsxOlsyLDddfSx0KGgsWzIsMTNdKSx7MjY6MzUsMzI6YX0sezMyOlsyLDE0XX0sezE3OlsxLDM2XX0sdChtLFsyLDI0XSksezExOjM3LDEzOjQsMTQ6MjIsMTU6ZCwxNjpwLDE5OjUsMjA6NiwyMTplLDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyODpyLDI5Om4sMzE6aSwzMjphLDQwOnMsNDQ6bCw0Nzp1fSx7MzA6WzEsMzhdfSx7NDI6WzEsMzldfSx7NDI6WzEsNDBdfSx7NDY6WzEsNDFdfSx7NDk6WzEsNDJdfSx0KGcsWzIsMzBdKSx7MTg6WzEsNDNdfSx7MTg6WzEsNDRdfSx0KG0sWzIsMjNdKSx7MTg6WzEsNDVdfSx7MzA6WzEsNDZdfSx0KGYsWzIsMjhdKSx0KGYsWzIsMzVdKSx0KGYsWzIsMzZdKSx0KGYsWzIsMzddKSx0KGYsWzIsMzhdKSx7Mzc6WzEsNDddfSx7MzQ6NDgsMzU6eX0sezE1OlsxLDUwXX0sdChmLFsyLDI3XSksdChnLFsyLDMzXSksezM5OlsxLDUxXX0sezM0OjUyLDM1OnksMzk6WzIsMzFdfSx7MzI6WzIsMTVdfSx0KGcsWzIsMzRdKSx7Mzk6WzIsMzJdfV0sZGVmYXVsdEFjdGlvbnM6ezIwOlsyLDddLDIzOlsyLDE0XSw1MDpbMiwxNV0sNTI6WzIsMzJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oXyxUKXtpZihULnJlY292ZXJhYmxlKXRoaXMudHJhY2UoXyk7ZWxzZXt2YXIgRT1uZXcgRXJyb3IoXyk7dGhyb3cgRS5oYXNoPVQsRX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihfKXt2YXIgVD10aGlzLEU9WzBdLEw9W10sQz1bbnVsbF0sQT1bXSxJPXRoaXMudGFibGUsRD0iIixrPTAsUj0wLFM9MCxPPTIsTj0xLFA9QS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxGPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksQj17eXk6e319O2Zvcih2YXIgJCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCQpJiYoQi55eVskXT10aGlzLnl5WyRdKTtGLnNldElucHV0KF8sQi55eSksQi55eS5sZXhlcj1GLEIueXkucGFyc2VyPXRoaXMsdHlwZW9mIEYueXlsbG9jPiJ1IiYmKEYueXlsbG9jPXt9KTt2YXIgej1GLnl5bGxvYztBLnB1c2goeik7dmFyIFc9Ri5vcHRpb25zJiZGLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBCLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUIueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gaihvZSl7RS5sZW5ndGg9RS5sZW5ndGgtMipvZSxDLmxlbmd0aD1DLmxlbmd0aC1vZSxBLmxlbmd0aD1BLmxlbmd0aC1vZX1vKGosInBvcFN0YWNrIik7ZnVuY3Rpb24gSygpe3ZhciBvZTtyZXR1cm4gb2U9TC5wb3AoKXx8Ri5sZXgoKXx8Tix0eXBlb2Ygb2UhPSJudW1iZXIiJiYob2UgaW5zdGFuY2VvZiBBcnJheSYmKEw9b2Usb2U9TC5wb3AoKSksb2U9VC5zeW1ib2xzX1tvZV18fG9lKSxvZX1vKEssImxleCIpO2Zvcih2YXIgaWUsUSxlZSxKLEgscSxaPXt9LGFlLHVlLGNlLHRlOzspe2lmKGVlPUVbRS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tlZV0/Sj10aGlzLmRlZmF1bHRBY3Rpb25zW2VlXTooKGllPT09bnVsbHx8dHlwZW9mIGllPiJ1IikmJihpZT1LKCkpLEo9SVtlZV0mJklbZWVdW2llXSksdHlwZW9mIEo+InUifHwhSi5sZW5ndGh8fCFKWzBdKXt2YXIgRGU9IiI7dGU9W107Zm9yKGFlIGluIElbZWVdKXRoaXMudGVybWluYWxzX1thZV0mJmFlPk8mJnRlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1thZV0rIiciKTtGLnNob3dQb3NpdGlvbj9EZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrKzEpK2A6CmArRi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3RlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19baWVdfHxpZSkrIiciOkRlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGsrMSkrIjogVW5leHBlY3RlZCAiKyhpZT09Tj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tpZV18fGllKSsiJyIpLHRoaXMucGFyc2VFcnJvcihEZSx7dGV4dDpGLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tpZV18fGllLGxpbmU6Ri55eWxpbmVubyxsb2M6eixleHBlY3RlZDp0ZX0pfWlmKEpbMF1pbnN0YW5jZW9mIEFycmF5JiZKLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrZWUrIiwgdG9rZW46ICIraWUpO3N3aXRjaChKWzBdKXtjYXNlIDE6RS5wdXNoKGllKSxDLnB1c2goRi55eXRleHQpLEEucHVzaChGLnl5bGxvYyksRS5wdXNoKEpbMV0pLGllPW51bGwsUT8oaWU9USxRPW51bGwpOihSPUYueXlsZW5nLEQ9Ri55eXRleHQsaz1GLnl5bGluZW5vLHo9Ri55eWxsb2MsUz4wJiZTLS0pO2JyZWFrO2Nhc2UgMjppZih1ZT10aGlzLnByb2R1Y3Rpb25zX1tKWzFdXVsxXSxaLiQ9Q1tDLmxlbmd0aC11ZV0sWi5fJD17Zmlyc3RfbGluZTpBW0EubGVuZ3RoLSh1ZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkFbQS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpBW0EubGVuZ3RoLSh1ZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpBW0EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxXJiYoWi5fJC5yYW5nZT1bQVtBLmxlbmd0aC0odWV8fDEpXS5yYW5nZVswXSxBW0EubGVuZ3RoLTFdLnJhbmdlWzFdXSkscT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoWixbRCxSLGssQi55eSxKWzFdLEMsQV0uY29uY2F0KFApKSx0eXBlb2YgcTwidSIpcmV0dXJuIHE7dWUmJihFPUUuc2xpY2UoMCwtMSp1ZSoyKSxDPUMuc2xpY2UoMCwtMSp1ZSksQT1BLnNsaWNlKDAsLTEqdWUpKSxFLnB1c2godGhpcy5wcm9kdWN0aW9uc19bSlsxXV1bMF0pLEMucHVzaChaLiQpLEEucHVzaChaLl8kKSxjZT1JW0VbRS5sZW5ndGgtMl1dW0VbRS5sZW5ndGgtMV1dLEUucHVzaChjZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHg9ZnVuY3Rpb24oKXt2YXIgdz17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFQsRSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihULEUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFQpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oXyxUKXtyZXR1cm4gdGhpcy55eT1UfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1fLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPV8sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPV8sdGhpcy5tYXRjaGVkKz1fO3ZhciBUPV8ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBUPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxffSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKF8pe3ZhciBUPV8ubGVuZ3RoLEU9Xy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PV8rdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVQpLHRoaXMub2Zmc2V0LT1UO3ZhciBMPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1FLmxlbmd0aC0xKTt2YXIgQz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RT8oRS5sZW5ndGg9PT1MLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrTFtMLmxlbmd0aC1FLmxlbmd0aF0ubGVuZ3RoLUVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1UfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0NbMF0sQ1swXSt0aGlzLnl5bGVuZy1UXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oXyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKF8pKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBfPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oXy5sZW5ndGg+MjA/Ii4uLiI6IiIpK18uc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgXz10aGlzLm1hdGNoO3JldHVybiBfLmxlbmd0aDwyMCYmKF8rPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLV8ubGVuZ3RoKSksKF8uc3Vic3RyKDAsMjApKyhfLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5wYXN0SW5wdXQoKSxUPW5ldyBBcnJheShfLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIF8rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1QrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKF8sVCl7dmFyIEUsTCxDO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihDPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEMueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksTD1fWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxMJiYodGhpcy55eWxpbmVubys9TC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpMP0xbTC5sZW5ndGgtMV0ubGVuZ3RoLUxbTC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitfWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPV9bMF0sdGhpcy5tYXRjaCs9X1swXSx0aGlzLm1hdGNoZXM9Xyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShfWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1fWzBdLEU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxFKXJldHVybiBFO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBBIGluIEMpdGhpc1tBXT1DW0FdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBfLFQsRSxMO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEM9dGhpcy5fY3VycmVudFJ1bGVzKCksQT0wO0E8Qy5sZW5ndGg7QSsrKWlmKEU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tDW0FdXSksRSYmKCFUfHxFWzBdLmxlbmd0aD5UWzBdLmxlbmd0aCkpe2lmKFQ9RSxMPUEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoXz10aGlzLnRlc3RfbWF0Y2goRSxDW0FdKSxfIT09ITEpcmV0dXJuIF87aWYodGhpcy5fYmFja3RyYWNrKXtUPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFQ/KF89dGhpcy50ZXN0X21hdGNoKFQsQ1tMXSksXyE9PSExP186ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgVD10aGlzLm5leHQoKTtyZXR1cm4gVHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oVCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFQpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gVD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKFQpe3JldHVybiBUPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoVHx8MCksVD49MD90aGlzLmNvbmRpdGlvblN0YWNrW1RdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oVCl7dGhpcy5iZWdpbihUKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFQsRSxMLEMpe3ZhciBBPUM7c3dpdGNoKEwpe2Nhc2UgMDpyZXR1cm4gMTA7Y2FzZSAxOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBzcGFjZS1ibG9jayIpLDMxO2JyZWFrO2Nhc2UgMjpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgbmwtYmxvY2siKSwzMTticmVhaztjYXNlIDM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIHNwYWNlLWJsb2NrIiksMjk7YnJlYWs7Y2FzZSA0OlQuZ2V0TG9nZ2VyKCkuZGVidWcoIi4iLEUueXl0ZXh0KTticmVhaztjYXNlIDU6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiXyIsRS55eXRleHQpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gNTtjYXNlIDc6cmV0dXJuIEUueXl0ZXh0PS0xLDI4O2JyZWFrO2Nhc2UgODpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvY29sdW1uc1xzKy8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkNPTFVNTlMgKExFWCkiLEUueXl0ZXh0KSwyODticmVhaztjYXNlIDk6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzpULmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFBPUFBJTkcgU1RSOiIsRS55eXRleHQpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE0OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFNUUiBlbmQ6IixFLnl5dGV4dCksIlNUUiI7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvc3BhY2VcOi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIlNQQUNFIE5VTSAoTEVYKSIsRS55eXRleHQpLDIxO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIEUueXl0ZXh0PSIxIixULmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TIChMRVgpIixFLnl5dGV4dCksMjE7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gNDM7Y2FzZSAxODpyZXR1cm4iTElOS1NUWUxFIjtjYXNlIDE5OnJldHVybiJJTlRFUlBPTEFURSI7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksNDA7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDQxO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MjticmVhaztjYXNlIDI0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0NDticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDU7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ2O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVFlMRV9TVE1OVCIpLDQ3O2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RZTEVfREVGSU5JVElPTiIpLDQ4O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksImFjY190aXRsZSI7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3IiKSwiYWNjX2Rlc2NyIjticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAzNDp0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMzU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMzc6cmV0dXJuIDMwO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoLSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC0pIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC9dIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdPiIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IF0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDU1OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiAtKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1NjpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKC0iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNTc6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkpIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU4OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU5OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoKCIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MjpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MzpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YzogPiIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MzpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogWyIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkJMT0NLX0FSUk9XIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIEFSUiBTVEFSVCIpLDM4O2JyZWFrO2Nhc2UgNzU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTk9ERV9JRCIsRS55eXRleHQpLDMyO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogRU9GIixFLnl5dGV4dCksODticmVhaztjYXNlIDc3OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc4OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc5OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDgwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgxOlQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU3RhcnRpbmcgc3RyaW5nIiksdGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgODI6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIEFSUjogU3RhcnRpbmcgc3RyaW5nIiksdGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgODM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWDogTk9ERV9ERVNDUjoiLEUueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSA4NDpULmdldExvZ2dlcigpLmRlYnVnKCJMRVggUE9QUElORyIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDg1OlQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogPT5CQUUiKSx0aGlzLnB1c2hTdGF0ZSgiQVJST1dfRElSIik7YnJlYWs7Y2FzZSA4NjpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHJpZ2h0KTogZGlyOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgODc6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChsZWZ0KToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDg4OnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoeCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA4OTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHkpOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTA6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh1cCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA5MTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXggKGRvd24pOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTI6cmV0dXJuIEUueXl0ZXh0PSJdPiIsVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChBUlJPV19ESVIgZW5kKToiLEUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLCJCTE9DS19BUlJPV19FTkQiO2JyZWFrO2Nhc2UgOTM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsIiMiK0UueXl0ZXh0KyIjIiksMTU7YnJlYWs7Y2FzZSA5NDpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NjpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NzpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixFLnl5dGV4dCksdGhpcy5wdXNoU3RhdGUoIkxMQUJFTCIpLDE2O2JyZWFrO2Nhc2UgOTg6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU1RBUlRfTElOSyIsRS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjticmVhaztjYXNlIDk5OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFNUQVJUX0xJTksiLEUueXl0ZXh0KSx0aGlzLnB1c2hTdGF0ZSgiTExBQkVMIiksMTY7YnJlYWs7Y2FzZSAxMDA6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTAxOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKSwiTElOS19MQUJFTCI7YnJlYWs7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIitFLnl5dGV4dCsiIyIpLDE1O2JyZWFrO2Nhc2UgMTAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSAxMDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLEUueXl0ZXh0KSwxNTticmVhaztjYXNlIDEwNTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBDT0xPTiIsRS55eXRleHQpLEUueXl0ZXh0PUUueXl0ZXh0LnNsaWNlKDEpLDI3O2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OmJsb2NrLWJldGFcYikvLC9eKD86YmxvY2tccyspLywvXig/OmJsb2NrXG4rKS8sL14oPzpibG9jazopLywvXig/Oltcc10rKS8sL14oPzpbXG5dKykvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86Y29sdW1uc1xzK2F1dG9cYikvLC9eKD86Y29sdW1uc1xzK1tcZF0rKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnNwYWNlWzpdXGQrKS8sL14oPzpzcGFjZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxzKykvLC9eKD86REVGQVVMVFxzKykvLC9eKD86XHcrXHMrKS8sL14oPzpbXlxuXSopLywvXig/OmNsYXNzXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86c3R5bGVccyspLywvXig/OihcdyspKygoLFxzKlx3KykqKSkvLC9eKD86W15cbl0qKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86ZW5kXGJccyopLywvXig/OlwoXChcKCkvLC9eKD86XClcKVwpKS8sL14oPzpbXCldXCkpLywvXig/Olx9XH0pLywvXig/Olx9KS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcKCkvLC9eKD86XF1cXSkvLC9eKD86XCgpLywvXig/OlxdXCkpLywvXig/OlxcXF0pLywvXig/OlwvXF0pLywvXig/OlwpXF0pLywvXig/OltcKV0pLywvXig/OlxdPikvLC9eKD86W1xdXSkvLC9eKD86LVwpKS8sL14oPzpcKC0pLywvXig/OlwpXCkpLywvXig/OlwpKS8sL14oPzpcKFwoXCgpLywvXig/OlwoXCgpLywvXig/Olx7XHspLywvXig/Olx7KS8sL14oPzo+KS8sL14oPzpcKFxbKS8sL14oPzpcKCkvLC9eKD86XFtcWykvLC9eKD86XFtcfCkvLC9eKD86XFtcKCkvLC9eKD86XClcKVwpKS8sL14oPzpcW1xcKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzpcWykvLC9eKD86PFxbKS8sL14oPzpbXlwoXFtcblwtXClce1x9XHNcPFw+Ol0rKS8sL14oPzokKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXVtgXSkvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpcXT5ccypcKCkvLC9eKD86LD9ccypyaWdodFxzKikvLC9eKD86LD9ccypsZWZ0XHMqKS8sL14oPzosP1xzKnhccyopLywvXig/Oiw/XHMqeVxzKikvLC9eKD86LD9ccyp1cFxzKikvLC9eKD86LD9ccypkb3duXHMqKS8sL14oPzpcKVxzKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqfn5bXH5dK1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlsiXVtgXSkvLC9eKD86WyJdKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzo6XGQrKS9dLGNvbmRpdGlvbnM6e1NUWUxFX0RFRklOSVRJT046e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxTVFlMRV9TVE1OVDp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyM10saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjZdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxMTEFCRUw6e3J1bGVzOlsxMDAsMTAxLDEwMiwxMDMsMTA0XSxpbmNsdXNpdmU6ITF9LEFSUk9XX0RJUjp7cnVsZXM6Wzg2LDg3LDg4LDg5LDkwLDkxLDkyXSxpbmNsdXNpdmU6ITF9LEJMT0NLX0FSUk9XOntydWxlczpbNzcsODIsODVdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc4LDgxXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEwLDExLDc5LDgwXSxpbmNsdXNpdmU6ITF9LHNwYWNlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0LDgzLDg0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlszMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMiwxNSwxNiwxNywxOCwxOSwyMCwyNCwyNywzMCwzMiwzNCwzNyw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gd30oKTt2LmxleGVyPXg7ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIG8oYiwiUGFyc2VyIiksYi5wcm90b3R5cGU9dix2LlBhcnNlcj1iLG5ldyBifSgpO2pCLnBhcnNlcj1qQjtYeWU9akJ9KTtmdW5jdGlvbiBLcnQodCl7c3dpdGNoKFkuZGVidWcoInR5cGVTdHIyVHlwZSIsdCksdCl7Y2FzZSJbXSI6cmV0dXJuInNxdWFyZSI7Y2FzZSIoKSI6cmV0dXJuIFkuZGVidWcoIndlIGhhdmUgYSByb3VuZCIpLCJyb3VuZCI7Y2FzZSIoKCkpIjpyZXR1cm4iY2lyY2xlIjtjYXNlIj5dIjpyZXR1cm4icmVjdF9sZWZ0X2ludl9hcnJvdyI7Y2FzZSJ7fSI6cmV0dXJuImRpYW1vbmQiO2Nhc2Uie3t9fSI6cmV0dXJuImhleGFnb24iO2Nhc2UiKFtdKSI6cmV0dXJuInN0YWRpdW0iO2Nhc2UiW1tdXSI6cmV0dXJuInN1YnJvdXRpbmUiO2Nhc2UiWygpXSI6cmV0dXJuImN5bGluZGVyIjtjYXNlIigoKCkpKSI6cmV0dXJuImRvdWJsZWNpcmNsZSI7Y2FzZSJbLy9dIjpyZXR1cm4ibGVhbl9yaWdodCI7Y2FzZSJbXFxcXF0iOnJldHVybiJsZWFuX2xlZnQiO2Nhc2UiWy9cXF0iOnJldHVybiJ0cmFwZXpvaWQiO2Nhc2UiW1xcL10iOnJldHVybiJpbnZfdHJhcGV6b2lkIjtjYXNlIjxbXT4iOnJldHVybiJibG9ja19hcnJvdyI7ZGVmYXVsdDpyZXR1cm4ibmEifX1mdW5jdGlvbiBRcnQodCl7c3dpdGNoKFkuZGVidWcoInR5cGVTdHIyVHlwZSIsdCksdCl7Y2FzZSI9PSI6cmV0dXJuInRoaWNrIjtkZWZhdWx0OnJldHVybiJub3JtYWwifX1mdW5jdGlvbiBacnQodCl7c3dpdGNoKHQudHJpbSgpKXtjYXNlIi0teCI6cmV0dXJuImFycm93X2Nyb3NzIjtjYXNlIi0tbyI6cmV0dXJuImFycm93X2NpcmNsZSI7ZGVmYXVsdDpyZXR1cm4iYXJyb3dfcG9pbnQifX12YXIgcWwsUUIsS0IsS3llLFF5ZSxVcnQsSnllLEhydCxLNixXcnQsWXJ0LHFydCxYcnQsZXZlLFpCLHBiLGpydCxaeWUsSnJ0LGVudCx0bnQscm50LG5udCxpbnQsYW50LHNudCxvbnQsbG50LGNudCx0dmUscnZlPU0oKCk9PnsidXNlIHN0cmljdCI7U0woKTtVYSgpO1Z0KCk7aHQoKTtmcigpO2tpKCk7cWw9bmV3IE1hcCxRQj1bXSxLQj1uZXcgTWFwLEt5ZT0iY29sb3IiLFF5ZT0iZmlsbCIsVXJ0PSJiZ0ZpbGwiLEp5ZT0iLCIsSHJ0PWRlKCksSzY9bmV3IE1hcCxXcnQ9byh0PT5qZS5zYW5pdGl6ZVRleHQodCxIcnQpLCJzYW5pdGl6ZVRleHQiKSxZcnQ9byhmdW5jdGlvbih0LGU9IiIpe2xldCByPUs2LmdldCh0KTtyfHwocj17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sSzYuc2V0KHQscikpLGU/LnNwbGl0KEp5ZSkuZm9yRWFjaChuPT57bGV0IGk9bi5yZXBsYWNlKC8oW147XSopOy8sIiQxIikudHJpbSgpO2lmKFJlZ0V4cChLeWUpLmV4ZWMobikpe2xldCBzPWkucmVwbGFjZShReWUsVXJ0KS5yZXBsYWNlKEt5ZSxReWUpO3IudGV4dFN0eWxlcy5wdXNoKHMpfXIuc3R5bGVzLnB1c2goaSl9KX0sImFkZFN0eWxlQ2xhc3MiKSxxcnQ9byhmdW5jdGlvbih0LGU9IiIpe2xldCByPXFsLmdldCh0KTtlIT1udWxsJiYoci5zdHlsZXM9ZS5zcGxpdChKeWUpKX0sImFkZFN0eWxlMk5vZGUiKSxYcnQ9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPXFsLmdldChyKTtpZihuPT09dm9pZCAwKXtsZXQgaT1yLnRyaW0oKTtuPXtpZDppLHR5cGU6Im5hIixjaGlsZHJlbjpbXX0scWwuc2V0KGksbil9bi5jbGFzc2VzfHwobi5jbGFzc2VzPVtdKSxuLmNsYXNzZXMucHVzaChlKX0pfSwic2V0Q3NzQ2xhc3MiKSxldmU9bygodCxlKT0+e2xldCByPXQuZmxhdCgpLG49W107Zm9yKGxldCBpIG9mIHIpe2lmKGkubGFiZWwmJihpLmxhYmVsPVdydChpLmxhYmVsKSksaS50eXBlPT09ImNsYXNzRGVmIil7WXJ0KGkuaWQsaS5jc3MpO2NvbnRpbnVlfWlmKGkudHlwZT09PSJhcHBseUNsYXNzIil7WHJ0KGkuaWQsaT8uc3R5bGVDbGFzcz8/IiIpO2NvbnRpbnVlfWlmKGkudHlwZT09PSJhcHBseVN0eWxlcyIpe2k/LnN0eWxlc1N0ciYmcXJ0KGkuaWQsaT8uc3R5bGVzU3RyKTtjb250aW51ZX1pZihpLnR5cGU9PT0iY29sdW1uLXNldHRpbmciKWUuY29sdW1ucz1pLmNvbHVtbnM/Py0xO2Vsc2UgaWYoaS50eXBlPT09ImVkZ2UiKXtsZXQgYT0oS0IuZ2V0KGkuaWQpPz8wKSsxO0tCLnNldChpLmlkLGEpLGkuaWQ9YSsiLSIraS5pZCxRQi5wdXNoKGkpfWVsc2V7aS5sYWJlbHx8KGkudHlwZT09PSJjb21wb3NpdGUiP2kubGFiZWw9IiI6aS5sYWJlbD1pLmlkKTtsZXQgYT1xbC5nZXQoaS5pZCk7aWYoYT09PXZvaWQgMD9xbC5zZXQoaS5pZCxpKTooaS50eXBlIT09Im5hIiYmKGEudHlwZT1pLnR5cGUpLGkubGFiZWwhPT1pLmlkJiYoYS5sYWJlbD1pLmxhYmVsKSksaS5jaGlsZHJlbiYmZXZlKGkuY2hpbGRyZW4saSksaS50eXBlPT09InNwYWNlIil7bGV0IHM9aS53aWR0aD8/MTtmb3IobGV0IGw9MDtsPHM7bCsrKXtsZXQgdT1ybihpKTt1LmlkPXUuaWQrIi0iK2wscWwuc2V0KHUuaWQsdSksbi5wdXNoKHUpfX1lbHNlIGE9PT12b2lkIDAmJm4ucHVzaChpKX19ZS5jaGlsZHJlbj1ufSwicG9wdWxhdGVCbG9ja0RhdGFiYXNlIiksWkI9W10scGI9e2lkOiJyb290Iix0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOltdLGNvbHVtbnM6LTF9LGpydD1vKCgpPT57WS5kZWJ1ZygiQ2xlYXIgY2FsbGVkIiksX3IoKSxwYj17aWQ6InJvb3QiLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46W10sY29sdW1uczotMX0scWw9bmV3IE1hcChbWyJyb290IixwYl1dKSxaQj1bXSxLNj1uZXcgTWFwLFFCPVtdLEtCPW5ldyBNYXB9LCJjbGVhciIpO28oS3J0LCJ0eXBlU3RyMlR5cGUiKTtvKFFydCwiZWRnZVR5cGVTdHIyVHlwZSIpO28oWnJ0LCJlZGdlU3RyVG9FZGdlRGF0YSIpO1p5ZT0wLEpydD1vKCgpPT4oWnllKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitaeWUpLCJnZW5lcmF0ZUlkIiksZW50PW8odD0+e3BiLmNoaWxkcmVuPXQsZXZlKHQscGIpLFpCPXBiLmNoaWxkcmVufSwic2V0SGllcmFyY2h5IiksdG50PW8odD0+e2xldCBlPXFsLmdldCh0KTtyZXR1cm4gZT9lLmNvbHVtbnM/ZS5jb2x1bW5zOmUuY2hpbGRyZW4/ZS5jaGlsZHJlbi5sZW5ndGg6LTE6LTF9LCJnZXRDb2x1bW5zIikscm50PW8oKCk9PlsuLi5xbC52YWx1ZXMoKV0sImdldEJsb2Nrc0ZsYXQiKSxubnQ9bygoKT0+WkJ8fFtdLCJnZXRCbG9ja3MiKSxpbnQ9bygoKT0+UUIsImdldEVkZ2VzIiksYW50PW8odD0+cWwuZ2V0KHQpLCJnZXRCbG9jayIpLHNudD1vKHQ9PntxbC5zZXQodC5pZCx0KX0sInNldEJsb2NrIiksb250PW8oKCk9PmNvbnNvbGUsImdldExvZ2dlciIpLGxudD1vKGZ1bmN0aW9uKCl7cmV0dXJuIEs2fSwiZ2V0Q2xhc3NlcyIpLGNudD17Z2V0Q29uZmlnOm8oKCk9PlNyKCkuYmxvY2ssImdldENvbmZpZyIpLHR5cGVTdHIyVHlwZTpLcnQsZWRnZVR5cGVTdHIyVHlwZTpRcnQsZWRnZVN0clRvRWRnZURhdGE6WnJ0LGdldExvZ2dlcjpvbnQsZ2V0QmxvY2tzRmxhdDpybnQsZ2V0QmxvY2tzOm5udCxnZXRFZGdlczppbnQsc2V0SGllcmFyY2h5OmVudCxnZXRCbG9jazphbnQsc2V0QmxvY2s6c250LGdldENvbHVtbnM6dG50LGdldENsYXNzZXM6bG50LGNsZWFyOmpydCxnZW5lcmF0ZUlkOkpydH0sdHZlPWNudH0pO3ZhciBRNix1bnQsbnZlLGl2ZT1NKCgpPT57InVzZSBzdHJpY3QiO1RvKCk7UTY9bygodCxlKT0+e2xldCByPXoxLG49cih0LCJyIiksaT1yKHQsImciKSxhPXIodCwiYiIpO3JldHVybiBIcyhuLGksYSxlKX0sImZhZGUiKSx1bnQ9byh0PT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4scCB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0KCgoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHt0LmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke1E2KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwuNSl9OwogICAgLy8gYmFja2dyb3VuZC1jb2xvcjoKICB9CgogIC5ub2RlIC5jbHVzdGVyIHsKICAgIC8vIGZpbGw6ICR7UTYodC5tYWluQmtnLC41KX07CiAgICBmaWxsOiAke1E2KHQuY2x1c3RlckJrZywuNSl9OwogICAgc3Ryb2tlOiAke1E2KHQuY2x1c3RlckJvcmRlciwuMil9OwogICAgYm94LXNoYWRvdzogcmdiYSg1MCwgNTAsIDkzLCAwLjI1KSAwcHggMTNweCAyN3B4IC01cHgsIHJnYmEoMCwgMCwgMCwgMC4zKSAwcHggOHB4IDE2cHggLThweDsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke3QudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke3QuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KYCwiZ2V0U3R5bGVzIiksbnZlPXVudH0pO3ZhciBobnQsZm50LGRudCxwbnQsbW50LGdudCx5bnQsdm50LHhudCxibnQsd250LGF2ZSxzdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO2hudD1vKCh0LGUscixuKT0+e2UuZm9yRWFjaChpPT57d250W2ldKHQscixuKX0pfSwiaW5zZXJ0TWFya2VycyIpLGZudD1vKCh0LGUscik9PntZLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixyKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LCJleHRlbnNpb24iKSxkbnQ9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJjb21wb3NpdGlvbiIpLHBudD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sImFnZ3JlZ2F0aW9uIiksbW50PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJkZXBlbmRlbmN5IiksZ250PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSwibG9sbGlwb3AiKSx5bnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNC41KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJwb2ludCIpLHZudD1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjaXJjbGUiKSx4bnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNyb3NzIiksYm50PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJiYXJiIiksd250PXtleHRlbnNpb246Zm50LGNvbXBvc2l0aW9uOmRudCxhZ2dyZWdhdGlvbjpwbnQsZGVwZW5kZW5jeTptbnQsbG9sbGlwb3A6Z250LHBvaW50OnludCxjaXJjbGU6dm50LGNyb3NzOnhudCxiYXJiOmJudH0sYXZlPWhudH0pO2Z1bmN0aW9uIFRudCh0LGUpe2lmKHQ9PT0wfHwhTnVtYmVyLmlzSW50ZWdlcih0KSl0aHJvdyBuZXcgRXJyb3IoIkNvbHVtbnMgbXVzdCBiZSBhbiBpbnRlZ2VyICE9PSAwLiIpO2lmKGU8MHx8IU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IEVycm9yKCJQb3NpdGlvbiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIitlKTtpZih0PDApcmV0dXJue3B4OmUscHk6MH07aWYodD09PTEpcmV0dXJue3B4OjAscHk6ZX07bGV0IHI9ZSV0LG49TWF0aC5mbG9vcihlL3QpO3JldHVybntweDpyLHB5Om59fWZ1bmN0aW9uIEpCKHQsZSxyPTAsbj0wKXtZLmRlYnVnKCJzZXRCbG9ja1NpemVzIGFiYzk1IChzdGFydCkiLHQuaWQsdD8uc2l6ZT8ueCwiYmxvY2sgd2lkdGggPSIsdD8uc2l6ZSwic2llYmxpbmdXaWR0aCIsciksdD8uc2l6ZT8ud2lkdGh8fCh0LnNpemU9e3dpZHRoOnIsaGVpZ2h0Om4seDowLHk6MH0pO2xldCBpPTAsYT0wO2lmKHQuY2hpbGRyZW4/Lmxlbmd0aD4wKXtmb3IobGV0IG0gb2YgdC5jaGlsZHJlbilKQihtLGUpO2xldCBzPWtudCh0KTtpPXMud2lkdGgsYT1zLmhlaWdodCxZLmRlYnVnKCJzZXRCbG9ja1NpemVzIGFiYzk1IG1heFdpZHRoIG9mIix0LmlkLCI6cyBjaGlsZHJlbiBpcyAiLGksYSk7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pbS5zaXplJiYoWS5kZWJ1ZyhgYWJjOTUgU2V0dGluZyBzaXplIG9mIGNoaWxkcmVuIG9mICR7dC5pZH0gaWQ9JHttLmlkfSAke2l9ICR7YX0gJHtKU09OLnN0cmluZ2lmeShtLnNpemUpfWApLG0uc2l6ZS53aWR0aD1pKihtLndpZHRoSW5Db2x1bW5zPz8xKSt4aSooKG0ud2lkdGhJbkNvbHVtbnM/PzEpLTEpLG0uc2l6ZS5oZWlnaHQ9YSxtLnNpemUueD0wLG0uc2l6ZS55PTAsWS5kZWJ1ZyhgYWJjOTUgdXBkYXRpbmcgc2l6ZSBvZiAke3QuaWR9IGNoaWxkcmVuIGNoaWxkOiR7bS5pZH0gbWF4V2lkdGg6JHtpfSBtYXhIZWlnaHQ6JHthfWApKTtmb3IobGV0IG0gb2YgdC5jaGlsZHJlbilKQihtLGUsaSxhKTtsZXQgbD10LmNvbHVtbnM/Py0xLHU9MDtmb3IobGV0IG0gb2YgdC5jaGlsZHJlbil1Kz1tLndpZHRoSW5Db2x1bW5zPz8xO2xldCBoPXQuY2hpbGRyZW4ubGVuZ3RoO2w+MCYmbDx1JiYoaD1sKTtsZXQgZj1NYXRoLmNlaWwodS9oKSxkPWgqKGkreGkpK3hpLHA9ZiooYSt4aSkreGk7aWYoZDxyKXtZLmRlYnVnKGBEZXRlY3RlZCB0byBzbWFsbCBzaWVibGluZzogYWJjOTUgJHt0LmlkfSBzaWVibGluZ1dpZHRoICR7cn0gc2llYmxpbmdIZWlnaHQgJHtufSB3aWR0aCAke2R9YCksZD1yLHA9bjtsZXQgbT0oci1oKnhpLXhpKS9oLGc9KG4tZip4aS14aSkvZjtZLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCIsdC5pZCwiY2hpbGRXaWR0aCIsbSwibWF4V2lkdGgiLGkpLFkuZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4Iix0LmlkLCJjaGlsZEhlaWdodCIsZywibWF4SGVpZ2h0IixhKSxZLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCB4U2l6ZSIsaCwicGFkZGluZyIseGkpO2ZvcihsZXQgeSBvZiB0LmNoaWxkcmVuKXkuc2l6ZSYmKHkuc2l6ZS53aWR0aD1tLHkuc2l6ZS5oZWlnaHQ9Zyx5LnNpemUueD0wLHkuc2l6ZS55PTApfWlmKFkuZGVidWcoYGFiYzk1IChmaW5hbGUgY2FsYykgJHt0LmlkfSB4U2l6ZSAke2h9IHlTaXplICR7Zn0gY29sdW1ucyAke2x9JHt0LmNoaWxkcmVuLmxlbmd0aH0gd2lkdGg9JHtNYXRoLm1heChkLHQuc2l6ZT8ud2lkdGh8fDApfWApLGQ8KHQ/LnNpemU/LndpZHRofHwwKSl7ZD10Py5zaXplPy53aWR0aHx8MDtsZXQgbT1sPjA/TWF0aC5taW4odC5jaGlsZHJlbi5sZW5ndGgsbCk6dC5jaGlsZHJlbi5sZW5ndGg7aWYobT4wKXtsZXQgZz0oZC1tKnhpLXhpKS9tO1kuZGVidWcoImFiYzk1IChncm93aW5nIHRvIGZpdCkgd2lkdGgiLHQuaWQsZCx0LnNpemU/LndpZHRoLGcpO2ZvcihsZXQgeSBvZiB0LmNoaWxkcmVuKXkuc2l6ZSYmKHkuc2l6ZS53aWR0aD1nKX19dC5zaXplPXt3aWR0aDpkLGhlaWdodDpwLHg6MCx5OjB9fVkuZGVidWcoInNldEJsb2NrU2l6ZXMgYWJjOTQgKGRvbmUpIix0LmlkLHQ/LnNpemU/LngsdD8uc2l6ZT8ud2lkdGgsdD8uc2l6ZT8ueSx0Py5zaXplPy5oZWlnaHQpfWZ1bmN0aW9uIG92ZSh0LGUpe1kuZGVidWcoYGFiYzg1IGxheW91dCBibG9ja3MgKD0+bGF5b3V0QmxvY2tzKSAke3QuaWR9IHg6ICR7dD8uc2l6ZT8ueH0geTogJHt0Py5zaXplPy55fSB3aWR0aDogJHt0Py5zaXplPy53aWR0aH1gKTtsZXQgcj10LmNvbHVtbnM/Py0xO2lmKFkuZGVidWcoImxheW91dEJsb2NrcyBjb2x1bW5zIGFiYzk1Iix0LmlkLCI9PiIscix0KSx0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLmxlbmd0aD4wKXtsZXQgbj10Py5jaGlsZHJlblswXT8uc2l6ZT8ud2lkdGg/PzAsaT10LmNoaWxkcmVuLmxlbmd0aCpuKyh0LmNoaWxkcmVuLmxlbmd0aC0xKSp4aTtZLmRlYnVnKCJ3aWR0aE9mQ2hpbGRyZW4gODgiLGksInBvc1giKTtsZXQgYT0wO1kuZGVidWcoImFiYzkxIGJsb2NrPy5zaXplPy54Iix0LmlkLHQ/LnNpemU/LngpO2xldCBzPXQ/LnNpemU/Lng/dD8uc2l6ZT8ueCsoLXQ/LnNpemU/LndpZHRoLzJ8fDApOi14aSxsPTA7Zm9yKGxldCB1IG9mIHQuY2hpbGRyZW4pe2xldCBoPXQ7aWYoIXUuc2l6ZSljb250aW51ZTtsZXR7d2lkdGg6ZixoZWlnaHQ6ZH09dS5zaXplLHtweDpwLHB5Om19PVRudChyLGEpO2lmKG0hPWwmJihsPW0scz10Py5zaXplPy54P3Q/LnNpemU/LngrKC10Py5zaXplPy53aWR0aC8yfHwwKToteGksWS5kZWJ1ZygiTmV3IHJvdyBpbiBsYXlvdXQgZm9yIGJsb2NrIix0LmlkLCIgYW5kIGNoaWxkICIsdS5pZCxsKSksWS5kZWJ1ZyhgYWJjODkgbGF5b3V0IGJsb2NrcyAoY2hpbGQpIGlkOiAke3UuaWR9IFBvczogJHthfSAocHgsIHB5KSAke3B9LCR7bX0gKCR7aD8uc2l6ZT8ueH0sJHtoPy5zaXplPy55fSkgcGFyZW50OiAke2guaWR9IHdpZHRoOiAke2Z9JHt4aX1gKSxoLnNpemUpe2xldCBnPWYvMjt1LnNpemUueD1zK3hpK2csWS5kZWJ1ZyhgYWJjOTEgbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHt1LmlkfSBzdGFydGluZ1Bvcz1YJHtzfSBuZXcgc3RhcnRpbmdQb3NYJHt1LnNpemUueH0gJHtnfSBwYWRkaW5nPSR7eGl9IHdpZHRoPSR7Zn0gaGFsZldpZHRoPSR7Z30gPT4geDoke3Uuc2l6ZS54fSB5OiR7dS5zaXplLnl9ICR7dS53aWR0aEluQ29sdW1uc30gKHdpZHRoICogKGNoaWxkPy53IHx8IDEpKSAvIDIgJHtmKih1Py53aWR0aEluQ29sdW1ucz8/MSkvMn1gKSxzPXUuc2l6ZS54K2csdS5zaXplLnk9aC5zaXplLnktaC5zaXplLmhlaWdodC8yK20qKGQreGkpK2QvMit4aSxZLmRlYnVnKGBhYmM4OCBsYXlvdXQgYmxvY2tzIChjYWxjKSBweCwgcHlpZDoke3UuaWR9c3RhcnRpbmdQb3NYJHtzfSR7eGl9JHtnfT0+eDoke3Uuc2l6ZS54fXk6JHt1LnNpemUueX0ke3Uud2lkdGhJbkNvbHVtbnN9KHdpZHRoICogKGNoaWxkPy53IHx8IDEpKSAvIDIke2YqKHU/LndpZHRoSW5Db2x1bW5zPz8xKS8yfWApfXUuY2hpbGRyZW4mJm92ZSh1LGUpLGErPXU/LndpZHRoSW5Db2x1bW5zPz8xLFkuZGVidWcoImFiYzg4IGNvbHVtbnNQb3MiLHUsYSl9fVkuZGVidWcoYGxheW91dCBibG9ja3MgKDw9PWxheW91dEJsb2NrcykgJHt0LmlkfSB4OiAke3Q/LnNpemU/Lnh9IHk6ICR7dD8uc2l6ZT8ueX0gd2lkdGg6ICR7dD8uc2l6ZT8ud2lkdGh9YCl9ZnVuY3Rpb24gbHZlKHQse21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX09e21pblg6MCxtaW5ZOjAsbWF4WDowLG1heFk6MH0pe2lmKHQuc2l6ZSYmdC5pZCE9PSJyb290Iil7bGV0e3g6YSx5OnMsd2lkdGg6bCxoZWlnaHQ6dX09dC5zaXplO2EtbC8yPGUmJihlPWEtbC8yKSxzLXUvMjxyJiYocj1zLXUvMiksYStsLzI+biYmKG49YStsLzIpLHMrdS8yPmkmJihpPXMrdS8yKX1pZih0LmNoaWxkcmVuKWZvcihsZXQgYSBvZiB0LmNoaWxkcmVuKSh7bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfT1sdmUoYSx7bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfSkpO3JldHVybnttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9fWZ1bmN0aW9uIGN2ZSh0KXtsZXQgZT10LmdldEJsb2NrKCJyb290Iik7aWYoIWUpcmV0dXJuO0pCKGUsdCwwLDApLG92ZShlLHQpLFkuZGVidWcoImdldEJsb2NrcyIsSlNPTi5zdHJpbmdpZnkoZSxudWxsLDIpKTtsZXR7bWluWDpyLG1pblk6bixtYXhYOmksbWF4WTphfT1sdmUoZSkscz1hLW4sbD1pLXI7cmV0dXJue3g6cix5Om4sd2lkdGg6bCxoZWlnaHQ6c319dmFyIHhpLGtudCx1dmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodCgpO1Z0KCk7eGk9ZGUoKT8uYmxvY2s/LnBhZGRpbmc/Pzg7byhUbnQsImNhbGN1bGF0ZUJsb2NrUG9zaXRpb24iKTtrbnQ9byh0PT57bGV0IGU9MCxyPTA7Zm9yKGxldCBuIG9mIHQuY2hpbGRyZW4pe2xldHt3aWR0aDppLGhlaWdodDphLHg6cyx5Omx9PW4uc2l6ZT8/e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07WS5kZWJ1ZygiZ2V0TWF4Q2hpbGRTaXplIGFiYzk1IGNoaWxkOiIsbi5pZCwid2lkdGg6IixpLCJoZWlnaHQ6IixhLCJ4OiIscywieToiLGwsbi50eXBlKSxuLnR5cGUhPT0ic3BhY2UiJiYoaT5lJiYoZT1pLyh0LndpZHRoSW5Db2x1bW5zPz8xKSksYT5yJiYocj1hKSl9cmV0dXJue3dpZHRoOmUsaGVpZ2h0OnJ9fSwiZ2V0TWF4Q2hpbGRTaXplIik7byhKQiwic2V0QmxvY2tTaXplcyIpO28ob3ZlLCJsYXlvdXRCbG9ja3MiKTtvKGx2ZSwiZmluZEJvdW5kcyIpO28oY3ZlLCJsYXlvdXQiKX0pO2Z1bmN0aW9uIGh2ZSh0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfWZ1bmN0aW9uIEVudCh0KXtsZXQgZT16ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZm9yZWlnbk9iamVjdCIpKSxyPWUuYXBwZW5kKCJ4aHRtbDpkaXYiKSxuPXQubGFiZWwsaT10LmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIixhPXIuYXBwZW5kKCJzcGFuIik7cmV0dXJuIGEuaHRtbChuKSxodmUoYSx0LmxhYmVsU3R5bGUpLGEuYXR0cigiY2xhc3MiLGkpLGh2ZShyLHQubGFiZWxTdHlsZSksci5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLHIuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksci5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxlLm5vZGUoKX12YXIgU250LGNzLFo2PU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTtodCgpO1Z0KCk7ZnIoKTtocigpO0RsKCk7byhodmUsImFwcGx5U3R5bGUiKTtvKEVudCwiYWRkSHRtbExhYmVsIik7U250PW8oKHQsZSxyLG4pPT57bGV0IGk9dHx8IiI7aWYodHlwZW9mIGk9PSJvYmplY3QiJiYoaT1pWzBdKSx4cihkZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7aT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxZLmRlYnVnKCJ2ZXJ0ZXhUZXh0IitpKTtsZXQgYT17aXNOb2RlOm4sbGFiZWw6eDkoQ2EoaSkpLGxhYmVsU3R5bGU6ZS5yZXBsYWNlKCJmaWxsOiIsImNvbG9yOiIpfTtyZXR1cm4gRW50KGEpfWVsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTthLnNldEF0dHJpYnV0ZSgic3R5bGUiLGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7bGV0IHM9W107dHlwZW9mIGk9PSJzdHJpbmciP3M9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/cz1pOnM9W107Zm9yKGxldCBsIG9mIHMpe2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Uuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksdS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksdS5zZXRBdHRyaWJ1dGUoIngiLCIwIikscj91LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp1LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx1LnRleHRDb250ZW50PWwudHJpbSgpLGEuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGF9fSwiY3JlYXRlTGFiZWwiKSxjcz1TbnR9KTt2YXIgZHZlLENudCxmdmUscHZlPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtkdmU9bygodCxlLHIsbixpKT0+e2UuYXJyb3dUeXBlU3RhcnQmJmZ2ZSh0LCJzdGFydCIsZS5hcnJvd1R5cGVTdGFydCxyLG4saSksZS5hcnJvd1R5cGVFbmQmJmZ2ZSh0LCJlbmQiLGUuYXJyb3dUeXBlRW5kLHIsbixpKX0sImFkZEVkZ2VNYXJrZXJzIiksQ250PXthcnJvd19jcm9zczoiY3Jvc3MiLGFycm93X3BvaW50OiJwb2ludCIsYXJyb3dfYmFyYjoiYmFyYiIsYXJyb3dfY2lyY2xlOiJjaXJjbGUiLGFnZ3JlZ2F0aW9uOiJhZ2dyZWdhdGlvbiIsZXh0ZW5zaW9uOiJleHRlbnNpb24iLGNvbXBvc2l0aW9uOiJjb21wb3NpdGlvbiIsZGVwZW5kZW5jeToiZGVwZW5kZW5jeSIsbG9sbGlwb3A6ImxvbGxpcG9wIn0sZnZlPW8oKHQsZSxyLG4saSxhKT0+e2xldCBzPUNudFtyXTtpZighcyl7WS53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7cn1gKTtyZXR1cm59bGV0IGw9ZT09PSJzdGFydCI/IlN0YXJ0IjoiRW5kIjt0LmF0dHIoYG1hcmtlci0ke2V9YCxgdXJsKCR7bn0jJHtpfV8ke2F9LSR7c30ke2x9KWApfSwiYWRkRWRnZU1hcmtlciIpfSk7ZnVuY3Rpb24gSjYodCxlKXtkZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiZ0JiYodC5zdHlsZS53aWR0aD1lLmxlbmd0aCo5KyJweCIsdC5zdHlsZS5oZWlnaHQ9IjEycHgiKX12YXIgZUYsJGEsZ3ZlLHl2ZSxBbnQsX250LG12ZSx2dmUseHZlPU0oKCk9PnsidXNlIHN0cmljdCI7aHQoKTtaNigpO0RsKCk7bXIoKTtWdCgpO2hyKCk7ZnIoKTtsTCgpO0N2KCk7cHZlKCk7ZUY9e30sJGE9e30sZ3ZlPW8oKHQsZSk9PntsZXQgcj1kZSgpLG49eHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyksaT1lLmxhYmVsVHlwZT09PSJtYXJrZG93biI/U2kodCxlLmxhYmVsLHtzdHlsZTplLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczpuLGFkZFN2Z0JhY2tncm91bmQ6ITB9LHIpOmNzKGUubGFiZWwsZS5sYWJlbFN0eWxlKSxhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxzPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3Mubm9kZSgpLmFwcGVuZENoaWxkKGkpO2xldCBsPWkuZ2V0QkJveCgpO2lmKG4pe2xldCBoPWkuY2hpbGRyZW5bMF0sZj16ZShpKTtsPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZi5hdHRyKCJ3aWR0aCIsbC53aWR0aCksZi5hdHRyKCJoZWlnaHQiLGwuaGVpZ2h0KX1zLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1sLndpZHRoLzIrIiwgIistbC5oZWlnaHQvMisiKSIpLGVGW2UuaWRdPWEsZS53aWR0aD1sLndpZHRoLGUuaGVpZ2h0PWwuaGVpZ2h0O2xldCB1O2lmKGUuc3RhcnRMYWJlbExlZnQpe2xldCBoPWNzKGUuc3RhcnRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksJGFbZS5pZF18fCgkYVtlLmlkXT17fSksJGFbZS5pZF0uc3RhcnRMZWZ0PWYsSjYodSxlLnN0YXJ0TGFiZWxMZWZ0KX1pZihlLnN0YXJ0TGFiZWxSaWdodCl7bGV0IGg9Y3MoZS5zdGFydExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWYubm9kZSgpLmFwcGVuZENoaWxkKGgpLGQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksJGFbZS5pZF18fCgkYVtlLmlkXT17fSksJGFbZS5pZF0uc3RhcnRSaWdodD1mLEo2KHUsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXtsZXQgaD1jcyhlLmVuZExhYmVsTGVmdCxlLmxhYmVsU3R5bGUpLGY9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxkPWYuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3U9ZC5ub2RlKCkuYXBwZW5kQ2hpbGQoaCk7bGV0IHA9aC5nZXRCQm94KCk7ZC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcC53aWR0aC8yKyIsICIrLXAuaGVpZ2h0LzIrIikiKSxmLm5vZGUoKS5hcHBlbmRDaGlsZChoKSwkYVtlLmlkXXx8KCRhW2UuaWRdPXt9KSwkYVtlLmlkXS5lbmRMZWZ0PWYsSjYodSxlLmVuZExhYmVsTGVmdCl9aWYoZS5lbmRMYWJlbFJpZ2h0KXtsZXQgaD1jcyhlLmVuZExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksZi5ub2RlKCkuYXBwZW5kQ2hpbGQoaCksJGFbZS5pZF18fCgkYVtlLmlkXT17fSksJGFbZS5pZF0uZW5kUmlnaHQ9ZixKNih1LGUuZW5kTGFiZWxSaWdodCl9cmV0dXJuIGl9LCJpbnNlcnRFZGdlTGFiZWwiKTtvKEo2LCJzZXRUZXJtaW5hbFdpZHRoIik7eXZlPW8oKHQsZSk9PntZLmRlYnVnKCJNb3ZpbmcgbGFiZWwgYWJjODggIix0LmlkLHQubGFiZWwsZUZbdC5pZF0sZSk7bGV0IHI9ZS51cGRhdGVkUGF0aD9lLnVwZGF0ZWRQYXRoOmUub3JpZ2luYWxQYXRoLG49ZGUoKSx7c3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOml9PV91KG4pO2lmKHQubGFiZWwpe2xldCBhPWVGW3QuaWRdLHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNMYWJlbFBvc2l0aW9uKHIpO1kuZGVidWcoIk1vdmluZyBsYWJlbCAiK3QubGFiZWwrIiBmcm9tICgiLHMsIiwiLGwsIikgdG8gKCIsdS54LCIsIix1LnksIikgYWJjODgiKSxlLnVwZGF0ZWRQYXRoJiYocz11LngsbD11LnkpfWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bCtpLzJ9KWApfWlmKHQuc3RhcnRMYWJlbExlZnQpe2xldCBhPSRhW3QuaWRdLnN0YXJ0TGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7bGV0IGE9JGFbdC5pZF0uc3RhcnRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbExlZnQpe2xldCBhPSRhW3QuaWRdLmVuZExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZUVuZD8xMDowLCJlbmRfbGVmdCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LmVuZExhYmVsUmlnaHQpe2xldCBhPSRhW3QuaWRdLmVuZFJpZ2h0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfX0sInBvc2l0aW9uRWRnZUxhYmVsIiksQW50PW8oKHQsZSk9PntsZXQgcj10Lngsbj10LnksaT1NYXRoLmFicyhlLngtciksYT1NYXRoLmFicyhlLnktbikscz10LndpZHRoLzIsbD10LmhlaWdodC8yO3JldHVybiBpPj1zfHxhPj1sfSwib3V0c2lkZU5vZGUiKSxfbnQ9bygodCxlLHIpPT57WS5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KGUpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShyKX0KICBub2RlICAgICAgICA6IHg6JHt0Lnh9IHk6JHt0Lnl9IHc6JHt0LndpZHRofSBoOiR7dC5oZWlnaHR9YCk7bGV0IG49dC54LGk9dC55LGE9TWF0aC5hYnMobi1yLngpLHM9dC53aWR0aC8yLGw9ci54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixoPU1hdGguYWJzKGUueS1yLnkpLGY9TWF0aC5hYnMoZS54LXIueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMobi1lLngpKnUpe2xldCBkPXIueTxlLnk/ZS55LXUtaTppLXUtZS55O2w9ZipkL2g7bGV0IHA9e3g6ci54PGUueD9yLngrbDpyLngtZitsLHk6ci55PGUueT9yLnkraC1kOnIueS1oK2R9O3JldHVybiBsPT09MCYmKHAueD1lLngscC55PWUueSksZj09PTAmJihwLng9ZS54KSxoPT09MCYmKHAueT1lLnkpLFkuZGVidWcoYGFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHApLHB9ZWxzZXtyLng8ZS54P2w9ZS54LXMtbjpsPW4tcy1lLng7bGV0IGQ9aCpsL2YscD1yLng8ZS54P3IueCtmLWw6ci54LWYrbCxtPXIueTxlLnk/ci55K2Q6ci55LWQ7cmV0dXJuIFkuZGVidWcoYHNpZGVzIGNhbGMgYWJjODksIFEgJHtofSwgcSAke2R9LCBSICR7Zn0sIHIgJHtsfWAse194OnAsX3k6bX0pLGw9PT0wJiYocD1lLngsbT1lLnkpLGY9PT0wJiYocD1lLngpLGg9PT0wJiYobT1lLnkpLHt4OnAseTptfX19LCJpbnRlcnNlY3Rpb24iKSxtdmU9bygodCxlKT0+e1kuZGVidWcoImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTtsZXQgcj1bXSxuPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKGE9PntpZighQW50KGUsYSkmJiFpKXtsZXQgcz1fbnQoZSxuLGEpLGw9ITE7ci5mb3JFYWNoKHU9PntsPWx8fHUueD09PXMueCYmdS55PT09cy55fSksci5zb21lKHU9PnUueD09PXMueCYmdS55PT09cy55KXx8ci5wdXNoKHMpLGk9ITB9ZWxzZSBuPWEsaXx8ci5wdXNoKGEpfSkscn0sImN1dFBhdGhBdEludGVyc2VjdCIpLHZ2ZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldCBsPXIucG9pbnRzO1kuZGVidWcoImFiYzg4IEluc2VydEVkZ2U6IGVkZ2U9IixyLCJlPSIsZSk7bGV0IHU9ITEsaD1hLm5vZGUoZS52KTt2YXIgZj1hLm5vZGUoZS53KTtmPy5pbnRlcnNlY3QmJmg/LmludGVyc2VjdCYmKGw9bC5zbGljZSgxLHIucG9pbnRzLmxlbmd0aC0xKSxsLnVuc2hpZnQoaC5pbnRlcnNlY3QobFswXSkpLGwucHVzaChmLmludGVyc2VjdChsW2wubGVuZ3RoLTFdKSkpLHIudG9DbHVzdGVyJiYoWS5kZWJ1ZygidG8gY2x1c3RlciBhYmM4OCIsbltyLnRvQ2x1c3Rlcl0pLGw9bXZlKHIucG9pbnRzLG5bci50b0NsdXN0ZXJdLm5vZGUpLHU9ITApLHIuZnJvbUNsdXN0ZXImJihZLmRlYnVnKCJmcm9tIGNsdXN0ZXIgYWJjODgiLG5bci5mcm9tQ2x1c3Rlcl0pLGw9bXZlKGwucmV2ZXJzZSgpLG5bci5mcm9tQ2x1c3Rlcl0ubm9kZSkucmV2ZXJzZSgpLHU9ITApO2xldCBkPWwuZmlsdGVyKF89PiFOdW1iZXIuaXNOYU4oXy55KSkscD1EbztyLmN1cnZlJiYoaT09PSJncmFwaCJ8fGk9PT0iZmxvd2NoYXJ0IikmJihwPXIuY3VydmUpO2xldHt4Om0seTpnfT1aNShyKSx5PUthKCkueChtKS55KGcpLmN1cnZlKHApLHY7c3dpdGNoKHIudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6dj0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjp2PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOnY9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OnY9IiJ9c3dpdGNoKHIucGF0dGVybil7Y2FzZSJzb2xpZCI6dis9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjp2Kz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjp2Kz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrfWxldCB4PXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIseShkKSkuYXR0cigiaWQiLHIuaWQpLmF0dHIoImNsYXNzIiwiICIrdisoci5jbGFzc2VzPyIgIityLmNsYXNzZXM6IiIpKS5hdHRyKCJzdHlsZSIsci5zdHlsZSksYj0iIjsoZGUoKS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZXx8ZGUoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlKSYmKGI9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsYj1iLnJlcGxhY2UoL1woL2csIlxcKCIpLGI9Yi5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZHZlKHgscixiLHMsaSk7bGV0IHc9e307cmV0dXJuIHUmJih3LnVwZGF0ZWRQYXRoPWwpLHcub3JpZ2luYWxQYXRoPXIucG9pbnRzLHd9LCJpbnNlcnRFZGdlIil9KTt2YXIgTG50LGJ2ZSx3dmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbnQ9byh0PT57bGV0IGU9bmV3IFNldDtmb3IobGV0IHIgb2YgdClzd2l0Y2gocil7Y2FzZSJ4IjplLmFkZCgicmlnaHQiKSxlLmFkZCgibGVmdCIpO2JyZWFrO2Nhc2UieSI6ZS5hZGQoInVwIiksZS5hZGQoImRvd24iKTticmVhaztkZWZhdWx0OmUuYWRkKHIpO2JyZWFrfXJldHVybiBlfSwiZXhwYW5kQW5kRGVkdXBsaWNhdGVEaXJlY3Rpb25zIiksYnZlPW8oKHQsZSxyKT0+e2xldCBuPUxudCh0KSxpPTIsYT1lLmhlaWdodCsyKnIucGFkZGluZyxzPWEvaSxsPWUud2lkdGgrMipzK3IucGFkZGluZyx1PXIucGFkZGluZy8yO3JldHVybiBuLmhhcygicmlnaHQiKSYmbi5oYXMoImxlZnQiKSYmbi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpzLHk6MH0se3g6bC8yLHk6Mip1fSx7eDpsLXMseTowfSx7eDpsLHk6MH0se3g6bCx5Oi1hLzN9LHt4OmwrMip1LHk6LWEvMn0se3g6bCx5Oi0yKmEvM30se3g6bCx5Oi1hfSx7eDpsLXMseTotYX0se3g6bC8yLHk6LWEtMip1fSx7eDpzLHk6LWF9LHt4OjAseTotYX0se3g6MCx5Oi0yKmEvM30se3g6LTIqdSx5Oi1hLzJ9LHt4OjAseTotYS8zfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpP1t7eDpzLHk6MH0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpzLHk6LWF9LHt4Omwtcyx5Oi1hfSx7eDpsLHk6MH1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygidXAiKSYmbi5oYXMoImRvd24iKT9be3g6MCx5OjB9LHt4OmwseTotc30se3g6bCx5Oi1hK3N9LHt4OjAseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDpsLHk6MH0se3g6MCx5Oi1zfSx7eDowLHk6LWErc30se3g6bCx5Oi1hfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0Iik/W3t4OnMseTowfSx7eDpzLHk6LXV9LHt4Omwtcyx5Oi11fSx7eDpsLXMseTowfSx7eDpsLHk6LWEvMn0se3g6bC1zLHk6LWF9LHt4Omwtcyx5Oi1hK3V9LHt4OnMseTotYSt1fSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OmwvMix5OjB9LHt4OjAseTotdX0se3g6cyx5Oi11fSx7eDpzLHk6LWErdX0se3g6MCx5Oi1hK3V9LHt4OmwvMix5Oi1hfSx7eDpsLHk6LWErdX0se3g6bC1zLHk6LWErdX0se3g6bC1zLHk6LXV9LHt4OmwseTotdX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygidXAiKT9be3g6MCx5OjB9LHt4OmwseTotc30se3g6MCx5Oi1hfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpsLHk6MH0se3g6MCx5Oi1hfV06bi5oYXMoImxlZnQiKSYmbi5oYXMoInVwIik/W3t4OmwseTowfSx7eDowLHk6LXN9LHt4OmwseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJkb3duIik/W3t4OmwseTowfSx7eDowLHk6MH0se3g6bCx5Oi1hfV06bi5oYXMoInJpZ2h0Iik/W3t4OnMseTotdX0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpsLXMseTotYSt1fSx7eDpzLHk6LWErdX0se3g6cyx5Oi1hK3V9XTpuLmhhcygibGVmdCIpP1t7eDpzLHk6MH0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6LWErdX0se3g6cyx5Oi1hK3V9LHt4OnMseTotYX0se3g6MCx5Oi1hLzJ9XTpuLmhhcygidXAiKT9be3g6cyx5Oi11fSx7eDpzLHk6LWErdX0se3g6MCx5Oi1hK3V9LHt4OmwvMix5Oi1hfSx7eDpsLHk6LWErdX0se3g6bC1zLHk6LWErdX0se3g6bC1zLHk6LXV9XTpuLmhhcygiZG93biIpP1t7eDpsLzIseTowfSx7eDowLHk6LXV9LHt4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fSx7eDpsLHk6LXV9XTpbe3g6MCx5OjB9XX0sImdldEFycm93UG9pbnRzIil9KTtmdW5jdGlvbiBEbnQodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9dmFyIFR2ZSxrdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKERudCwiaW50ZXJzZWN0Tm9kZSIpO1R2ZT1EbnR9KTtmdW5jdGlvbiBObnQodCxlLHIsbil7dmFyIGk9dC54LGE9dC55LHM9aS1uLngsbD1hLW4ueSx1PU1hdGguc3FydChlKmUqbCpsK3IqcipzKnMpLGg9TWF0aC5hYnMoZSpyKnMvdSk7bi54PGkmJihoPS1oKTt2YXIgZj1NYXRoLmFicyhlKnIqbC91KTtyZXR1cm4gbi55PGEmJihmPS1mKSx7eDppK2gseTphK2Z9fXZhciBlUyx0Rj1NKCgpPT57InVzZSBzdHJpY3QiO28oTm50LCJpbnRlcnNlY3RFbGxpcHNlIik7ZVM9Tm50fSk7ZnVuY3Rpb24gUm50KHQsZSxyKXtyZXR1cm4gZVModCxlLGUscil9dmFyIEV2ZSxTdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0RigpO28oUm50LCJpbnRlcnNlY3RDaXJjbGUiKTtFdmU9Um50fSk7ZnVuY3Rpb24gTW50KHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2LHgsYjtpZihpPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LHA9aSpyLngrcypyLnkrdSxtPWkqbi54K3Mqbi55K3UsIShwIT09MCYmbSE9PTAmJkN2ZShwLG0pKSYmKGE9bi55LXIueSxsPXIueC1uLngsaD1uLngqci55LXIueCpuLnksZj1hKnQueCtsKnQueStoLGQ9YSplLngrbCplLnkraCwhKGYhPT0wJiZkIT09MCYmQ3ZlKGYsZCkpJiYoZz1pKmwtYSpzLGchPT0wKSkpcmV0dXJuIHk9TWF0aC5hYnMoZy8yKSx2PXMqaC1sKnUseD12PDA/KHYteSkvZzoodit5KS9nLHY9YSp1LWkqaCxiPXY8MD8odi15KS9nOih2K3kpL2cse3gseTpifX1mdW5jdGlvbiBDdmUodCxlKXtyZXR1cm4gdCplPjB9dmFyIEF2ZSxfdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKE1udCwiaW50ZXJzZWN0TGluZSIpO28oQ3ZlLCJzYW1lU2lnbiIpO0F2ZT1NbnR9KTtmdW5jdGlvbiBJbnQodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPVtdLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBlLmZvckVhY2g9PSJmdW5jdGlvbiI/ZS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3M9TWF0aC5taW4ocyxnLngpLGw9TWF0aC5taW4obCxnLnkpfSk6KHM9TWF0aC5taW4ocyxlLngpLGw9TWF0aC5taW4obCxlLnkpKTtmb3IodmFyIHU9bi10LndpZHRoLzItcyxoPWktdC5oZWlnaHQvMi1sLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGQ9ZVtmXSxwPWVbZjxlLmxlbmd0aC0xP2YrMTowXSxtPUF2ZSh0LHIse3g6dStkLngseTpoK2QueX0se3g6dStwLngseTpoK3AueX0pO20mJmEucHVzaChtKX1yZXR1cm4gYS5sZW5ndGg/KGEubGVuZ3RoPjEmJmEuc29ydChmdW5jdGlvbihnLHkpe3ZhciB2PWcueC1yLngseD1nLnktci55LGI9TWF0aC5zcXJ0KHYqdit4KngpLHc9eS54LXIueCxfPXkueS1yLnksVD1NYXRoLnNxcnQodyp3K18qXyk7cmV0dXJuIGI8VD8tMTpiPT09VD8wOjF9KSxhWzBdKTp0fXZhciBMdmUsRHZlPU0oKCk9PnsidXNlIHN0cmljdCI7X3ZlKCk7THZlPUludDtvKEludCwiaW50ZXJzZWN0UG9seWdvbiIpfSk7dmFyIE9udCxOdmUsUnZlPU0oKCk9PnsidXNlIHN0cmljdCI7T250PW8oKHQsZSk9Pnt2YXIgcj10Lngsbj10LnksaT1lLngtcixhPWUueS1uLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMix1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1hPT09MD8wOmwqaS9hLGg9bCk6KGk8MCYmKHM9LXMpLHU9cyxoPWk9PT0wPzA6cyphL2kpLHt4OnIrdSx5Om4raH19LCJpbnRlcnNlY3RSZWN0IiksTnZlPU9udH0pO3ZhciBSbixyRj1NKCgpPT57InVzZSBzdHJpY3QiO2t2ZSgpO1N2ZSgpO3RGKCk7RHZlKCk7UnZlKCk7Um49e25vZGU6VHZlLGNpcmNsZTpFdmUsZWxsaXBzZTplUyxwb2x5Z29uOkx2ZSxyZWN0Ok52ZX19KTtmdW5jdGlvbiBYbCh0LGUscixuKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLG4ubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLngrIiwiK2kueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIityLzIrIikiKX12YXIgX2kscW4sbkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtaNigpO0RsKCk7VnQoKTttcigpO2ZyKCk7aHIoKTtfaT1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9ZGUoKSxhLHM9ZS51c2VIdG1sTGFiZWxzfHx4cihpLmZsb3djaGFydC5odG1sTGFiZWxzKTtyP2E9cjphPSJub2RlIGRlZmF1bHQiO2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGEpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSx1PWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpLGg7ZS5sYWJlbFRleHQ9PT12b2lkIDA/aD0iIjpoPXR5cGVvZiBlLmxhYmVsVGV4dD09InN0cmluZyI/ZS5sYWJlbFRleHQ6ZS5sYWJlbFRleHRbMF07bGV0IGY9dS5ub2RlKCksZDtlLmxhYmVsVHlwZT09PSJtYXJrZG93biI/ZD1TaSh1LFRyKENhKGgpLGkpLHt1c2VIdG1sTGFiZWxzOnMsd2lkdGg6ZS53aWR0aHx8aS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0saSk6ZD1mLmFwcGVuZENoaWxkKGNzKFRyKENhKGgpLGkpLGUubGFiZWxTdHlsZSwhMSxuKSk7bGV0IHA9ZC5nZXRCQm94KCksbT1lLnBhZGRpbmcvMjtpZih4cihpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IGc9ZC5jaGlsZHJlblswXSx5PXplKGQpLHY9Zy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYodil7bGV0IHg9aC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi52XS5tYXAoYj0+bmV3IFByb21pc2Uodz0+e2Z1bmN0aW9uIF8oKXtpZihiLnN0eWxlLmRpc3BsYXk9ImZsZXgiLGIuc3R5bGUuZmxleERpcmVjdGlvbj0iY29sdW1uIix4KXtsZXQgVD1pLmZvbnRTaXplP2kuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsTD1wYXJzZUludChULDEwKSo1KyJweCI7Yi5zdHlsZS5taW5XaWR0aD1MLGIuc3R5bGUubWF4V2lkdGg9TH1lbHNlIGIuc3R5bGUud2lkdGg9IjEwMCUiO3coYil9byhfLCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e2IuY29tcGxldGUmJl8oKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLF8pLGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsXyl9KSkpfXA9Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx5LmF0dHIoIndpZHRoIixwLndpZHRoKSx5LmF0dHIoImhlaWdodCIscC5oZWlnaHQpfXJldHVybiBzP3UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIik6dS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistcC5oZWlnaHQvMisiKSIpLGUuY2VudGVyTGFiZWwmJnUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksdS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6bCxiYm94OnAsaGFsZlBhZGRpbmc6bSxsYWJlbDp1fX0sImxhYmVsSGVscGVyIikscW49bygodCxlKT0+e2xldCByPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9LCJ1cGRhdGVOb2RlQm91bmRzIik7byhYbCwiaW5zZXJ0UG9seWdvblNoYXBlIil9KTt2YXIgUG50LE12ZSxJdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtuRigpO2h0KCk7VnQoKTtyRigpO1BudD1vKGFzeW5jKHQsZSk9PntlLnVzZUh0bWxMYWJlbHN8fGRlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHN8fChlLmNlbnRlckxhYmVsPSEwKTtsZXR7c2hhcGVTdmc6bixiYm94OmksaGFsZlBhZGRpbmc6YX09YXdhaXQgX2kodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKTtZLmluZm8oIkNsYXNzZXMgPSAiLGUuY2xhc3Nlcyk7bGV0IHM9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcy5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZykscW4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gUm4ucmVjdChlLGwpfSxufSwibm90ZSIpLE12ZT1QbnR9KTtmdW5jdGlvbiBpRih0LGUscixuKXtsZXQgaT1bXSxhPW8obD0+e2kucHVzaChsLDApfSwiYWRkQm9yZGVyIikscz1vKGw9PntpLnB1c2goMCxsKX0sInNraXBCb3JkZXIiKTtlLmluY2x1ZGVzKCJ0Iik/KFkuZGVidWcoImFkZCB0b3AgYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJyIik/KFkuZGVidWcoImFkZCByaWdodCBib3JkZXIiKSxhKG4pKTpzKG4pLGUuaW5jbHVkZXMoImIiKT8oWS5kZWJ1ZygiYWRkIGJvdHRvbSBib3JkZXIiKSxhKHIpKTpzKHIpLGUuaW5jbHVkZXMoImwiKT8oWS5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksYShuKSk6cyhuKSx0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLGkuam9pbigiICIpKX12YXIgT3ZlLGdvLFB2ZSxCbnQsRm50LHpudCxHbnQsJG50LFZudCxVbnQsSG50LFdudCxZbnQscW50LFhudCxqbnQsS250LFFudCxabnQsSm50LGVpdCx0aXQsQnZlLHJpdCxuaXQsRnZlLHRTLGFGLHp2ZSxHdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttcigpO1Z0KCk7ZnIoKTtodCgpO3d2ZSgpO1o2KCk7ckYoKTtJdmUoKTtuRigpO092ZT1vKHQ9PnQ/IiAiK3Q6IiIsImZvcm1hdENsYXNzIiksZ289bygodCxlKT0+YCR7ZXx8Im5vZGUgZGVmYXVsdCJ9JHtPdmUodC5jbGFzc2VzKX0gJHtPdmUodC5jbGFzcyl9YCwiZ2V0Q2xhc3Nlc0Zyb21Ob2RlIiksUHZlPW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgX2kodCxlLGdvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPWkrYSxsPVt7eDpzLzIseTowfSx7eDpzLHk6LXMvMn0se3g6cy8yLHk6LXN9LHt4OjAseTotcy8yfV07WS5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7bGV0IHU9WGwocixzLHMsbCk7cmV0dXJuIHUuYXR0cigic3R5bGUiLGUuc3R5bGUpLHFuKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oaCl7cmV0dXJuIFkud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLFJuLnBvbHlnb24oZSxsLGgpfSxyfSwicXVlc3Rpb24iKSxCbnQ9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbj0yOCxpPVt7eDowLHk6bi8yfSx7eDpuLzIseTowfSx7eDowLHk6LW4vMn0se3g6LW4vMix5OjB9XTtyZXR1cm4gci5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLGkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLngrIiwiK3MueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gUm4uY2lyY2xlKGUsMTQscyl9LHJ9LCJjaG9pY2UiKSxGbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBfaSh0LGUsZ28oZSx2b2lkIDApLCEwKSxpPTQsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1hL2ksbD1uLndpZHRoKzIqcytlLnBhZGRpbmcsdT1be3g6cyx5OjB9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dLGg9WGwocixsLGEsdSk7cmV0dXJuIGguYXR0cigic3R5bGUiLGUuc3R5bGUpLHFuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIFJuLnBvbHlnb24oZSx1LGYpfSxyfSwiaGV4YWdvbiIpLHpudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IF9pKHQsZSx2b2lkIDAsITApLGk9MixhPW4uaGVpZ2h0KzIqZS5wYWRkaW5nLHM9YS9pLGw9bi53aWR0aCsyKnMrZS5wYWRkaW5nLHU9YnZlKGUuZGlyZWN0aW9ucyxuLGUpLGg9WGwocixsLGEsdSk7cmV0dXJuIGguYXR0cigic3R5bGUiLGUuc3R5bGUpLHFuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIFJuLnBvbHlnb24oZSx1LGYpfSxyfSwiYmxvY2tfYXJyb3ciKSxHbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBfaSh0LGUsZ28oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi1hLzIseTowfSx7eDppLHk6MH0se3g6aSx5Oi1hfSx7eDotYS8yLHk6LWF9LHt4OjAseTotYS8yfV07cmV0dXJuIFhsKHIsaSxhLHMpLmF0dHIoInN0eWxlIixlLnN0eWxlKSxlLndpZHRoPWkrYSxlLmhlaWdodD1hLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBSbi5wb2x5Z29uKGUscyx1KX0scn0sInJlY3RfbGVmdF9pbnZfYXJyb3ciKSwkbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBfaSh0LGUsZ28oZSksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqYS82LHk6MH0se3g6aS1hLzYseTowfSx7eDppKzIqYS82LHk6LWF9LHt4OmEvNix5Oi1hfV0sbD1YbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSkscW4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gUm4ucG9seWdvbihlLHMsdSl9LHJ9LCJsZWFuX3JpZ2h0IiksVm50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgX2kodCxlLGdvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKmEvNix5OjB9LHt4OmkrYS82LHk6MH0se3g6aS0yKmEvNix5Oi1hfSx7eDotYS82LHk6LWF9XSxsPVhsKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxxbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBSbi5wb2x5Z29uKGUscyx1KX0scn0sImxlYW5fbGVmdCIpLFVudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IF9pKHQsZSxnbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqYS82LHk6MH0se3g6aSsyKmEvNix5OjB9LHt4OmktYS82LHk6LWF9LHt4OmEvNix5Oi1hfV0sbD1YbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSkscW4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gUm4ucG9seWdvbihlLHMsdSl9LHJ9LCJ0cmFwZXpvaWQiKSxIbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBfaSh0LGUsZ28oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OmEvNix5OjB9LHt4OmktYS82LHk6MH0se3g6aSsyKmEvNix5Oi1hfSx7eDotMiphLzYseTotYX1dLGw9WGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLHFuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIFJuLnBvbHlnb24oZSxzLHUpfSxyfSwiaW52X3RyYXBlem9pZCIpLFdudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IF9pKHQsZSxnbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmkrYS8yLHk6MH0se3g6aSx5Oi1hLzJ9LHt4OmkrYS8yLHk6LWF9LHt4OjAseTotYX1dLGw9WGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLHFuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIFJuLnBvbHlnb24oZSxzLHUpfSxyfSwicmVjdF9yaWdodF9pbnZfYXJyb3ciKSxZbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBfaSh0LGUsZ28oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9aS8yLHM9YS8oMi41K2kvNTApLGw9bi5oZWlnaHQrcytlLnBhZGRpbmcsdT0iTSAwLCIrcysiIGEgIithKyIsIitzKyIgMCwwLDAgIitpKyIgMCBhICIrYSsiLCIrcysiIDAsMCwwICIrLWkrIiAwIGwgMCwiK2wrIiBhICIrYSsiLCIrcysiIDAsMCwwICIraSsiIDAgbCAwLCIrLWwsaD1yLmF0dHIoImxhYmVsLW9mZnNldC15IixzKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigiZCIsdSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWkvMisiLCIrLShsLzIrcykrIikiKTtyZXR1cm4gcW4oZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtsZXQgZD1Sbi5yZWN0KGUsZikscD1kLngtZS54O2lmKGEhPTAmJihNYXRoLmFicyhwKTxlLndpZHRoLzJ8fE1hdGguYWJzKHApPT1lLndpZHRoLzImJk1hdGguYWJzKGQueS1lLnkpPmUuaGVpZ2h0LzItcykpe2xldCBtPXMqcyooMS1wKnAvKGEqYSkpO20hPTAmJihtPU1hdGguc3FydChtKSksbT1zLW0sZi55LWUueT4wJiYobT0tbSksZC55Kz1tfXJldHVybiBkfSxyfSwiY3lsaW5kZXIiKSxxbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IF9pKHQsZSwibm9kZSAiK2UuY2xhc3NlcysiICIrZS5jbGFzcywhMCksYT1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHM9ZS5wb3NpdGlvbmVkP2Uud2lkdGg6bi53aWR0aCtlLnBhZGRpbmcsbD1lLnBvc2l0aW9uZWQ/ZS5oZWlnaHQ6bi5oZWlnaHQrZS5wYWRkaW5nLHU9ZS5wb3NpdGlvbmVkPy1zLzI6LW4ud2lkdGgvMi1pLGg9ZS5wb3NpdGlvbmVkPy1sLzI6LW4uaGVpZ2h0LzItaTtpZihhLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsdSkuYXR0cigieSIsaCkuYXR0cigid2lkdGgiLHMpLmF0dHIoImhlaWdodCIsbCksZS5wcm9wcyl7bGV0IGY9bmV3IFNldChPYmplY3Qua2V5cyhlLnByb3BzKSk7ZS5wcm9wcy5ib3JkZXJzJiYoaUYoYSxlLnByb3BzLmJvcmRlcnMscyxsKSxmLmRlbGV0ZSgiYm9yZGVycyIpKSxmLmZvckVhY2goZD0+e1kud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7ZH1gKX0pfXJldHVybiBxbihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBSbi5yZWN0KGUsZil9LHJ9LCJyZWN0IiksWG50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBfaSh0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxzPWUucG9zaXRpb25lZD9lLndpZHRoOm4ud2lkdGgrZS5wYWRkaW5nLGw9ZS5wb3NpdGlvbmVkP2UuaGVpZ2h0Om4uaGVpZ2h0K2UucGFkZGluZyx1PWUucG9zaXRpb25lZD8tcy8yOi1uLndpZHRoLzItaSxoPWUucG9zaXRpb25lZD8tbC8yOi1uLmhlaWdodC8yLWk7aWYoYS5hdHRyKCJjbGFzcyIsImJhc2ljIGNsdXN0ZXIgY29tcG9zaXRlIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGUucHJvcHMpe2xldCBmPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKGlGKGEsZS5wcm9wcy5ib3JkZXJzLHMsbCksZi5kZWxldGUoImJvcmRlcnMiKSksZi5mb3JFYWNoKGQ9PntZLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2R9YCl9KX1yZXR1cm4gcW4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gUm4ucmVjdChlLGYpfSxyfSwiY29tcG9zaXRlIiksam50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyfT1hd2FpdCBfaSh0LGUsImxhYmVsIiwhMCk7WS50cmFjZSgiQ2xhc3NlcyA9ICIsZS5jbGFzcyk7bGV0IG49ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPTAsYT0wO2lmKG4uYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsYSksci5hdHRyKCJjbGFzcyIsImxhYmVsIGVkZ2VMYWJlbCIpLGUucHJvcHMpe2xldCBzPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKGlGKG4sZS5wcm9wcy5ib3JkZXJzLGksYSkscy5kZWxldGUoImJvcmRlcnMiKSkscy5mb3JFYWNoKGw9PntZLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2x9YCl9KX1yZXR1cm4gcW4oZSxuKSxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gUm4ucmVjdChlLHMpfSxyfSwibGFiZWxSZWN0Iik7byhpRiwiYXBwbHlOb2RlUHJvcGVydHlCb3JkZXJzIik7S250PW8oKHQsZSk9PntsZXQgcjtlLmNsYXNzZXM/cj0ibm9kZSAiK2UuY2xhc3NlczpyPSJub2RlIGRlZmF1bHQiO2xldCBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLHIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYT1uLmluc2VydCgibGluZSIpLHM9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksbD1lLmxhYmVsVGV4dC5mbGF0P2UubGFiZWxUZXh0LmZsYXQoKTplLmxhYmVsVGV4dCx1PSIiO3R5cGVvZiBsPT0ib2JqZWN0Ij91PWxbMF06dT1sLFkuaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIsdSxsLHR5cGVvZiBsPT0ib2JqZWN0Iik7bGV0IGg9cy5ub2RlKCkuYXBwZW5kQ2hpbGQoY3ModSxlLmxhYmVsU3R5bGUsITAsITApKSxmPXt3aWR0aDowLGhlaWdodDowfTtpZih4cihkZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IHk9aC5jaGlsZHJlblswXSx2PXplKGgpO2Y9eS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2LmF0dHIoIndpZHRoIixmLndpZHRoKSx2LmF0dHIoImhlaWdodCIsZi5oZWlnaHQpfVkuaW5mbygiVGV4dCAyIixsKTtsZXQgZD1sLnNsaWNlKDEsbC5sZW5ndGgpLHA9aC5nZXRCQm94KCksbT1zLm5vZGUoKS5hcHBlbmRDaGlsZChjcyhkLmpvaW4/ZC5qb2luKCI8YnIvPiIpOmQsZS5sYWJlbFN0eWxlLCEwLCEwKSk7aWYoeHIoZGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCB5PW0uY2hpbGRyZW5bMF0sdj16ZShtKTtmPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdi5hdHRyKCJ3aWR0aCIsZi53aWR0aCksdi5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KX1sZXQgZz1lLnBhZGRpbmcvMjtyZXR1cm4gemUobSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKyhmLndpZHRoPnAud2lkdGg/MDoocC53aWR0aC1mLndpZHRoKS8yKSsiLCAiKyhwLmhlaWdodCtnKzUpKyIpIiksemUoaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKyhmLndpZHRoPHAud2lkdGg/MDotKHAud2lkdGgtZi53aWR0aCkvMikrIiwgMCkiKSxmPXMubm9kZSgpLmdldEJCb3goKSxzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1mLndpZHRoLzIrIiwgIisoLWYuaGVpZ2h0LzItZyszKSsiKSIpLGkuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1mLndpZHRoLzItZykuYXR0cigieSIsLWYuaGVpZ2h0LzItZykuYXR0cigid2lkdGgiLGYud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K2UucGFkZGluZyksYS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWYud2lkdGgvMi1nKS5hdHRyKCJ4MiIsZi53aWR0aC8yK2cpLmF0dHIoInkxIiwtZi5oZWlnaHQvMi1nK3AuaGVpZ2h0K2cpLmF0dHIoInkyIiwtZi5oZWlnaHQvMi1nK3AuaGVpZ2h0K2cpLHFuKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFJuLnJlY3QoZSx5KX0sbn0sInJlY3RXaXRoVGl0bGUiKSxRbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBfaSh0LGUsZ28oZSx2b2lkIDApLCEwKSxpPW4uaGVpZ2h0K2UucGFkZGluZyxhPW4ud2lkdGgraS80K2UucGFkZGluZyxzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixpLzIpLmF0dHIoInJ5IixpLzIpLmF0dHIoIngiLC1hLzIpLmF0dHIoInkiLC1pLzIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLGkpO3JldHVybiBxbihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGwpe3JldHVybiBSbi5yZWN0KGUsbCl9LHJ9LCJzdGFkaXVtIiksWm50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBfaSh0LGUsZ28oZSx2b2lkIDApLCEwKSxhPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJyIixuLndpZHRoLzIraSkuYXR0cigid2lkdGgiLG4ud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0K2UucGFkZGluZyksWS5pbmZvKCJDaXJjbGUgbWFpbiIpLHFuKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFkuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxuLndpZHRoLzIraSxzKSxSbi5jaXJjbGUoZSxuLndpZHRoLzIraSxzKX0scn0sImNpcmNsZSIpLEpudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om4saGFsZlBhZGRpbmc6aX09YXdhaXQgX2kodCxlLGdvKGUsdm9pZCAwKSwhMCksYT01LHM9ci5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSxsPXMuaW5zZXJ0KCJjaXJjbGUiKSx1PXMuaW5zZXJ0KCJjaXJjbGUiKTtyZXR1cm4gcy5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJyIixuLndpZHRoLzIraSthKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCtlLnBhZGRpbmcrYSoyKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0K2UucGFkZGluZythKjIpLHUuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsbi53aWR0aC8yK2kpLmF0dHIoIndpZHRoIixuLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCtlLnBhZGRpbmcpLFkuaW5mbygiRG91YmxlQ2lyY2xlIG1haW4iKSxxbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGgpe3JldHVybiBZLmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLGUsbi53aWR0aC8yK2krYSxoKSxSbi5jaXJjbGUoZSxuLndpZHRoLzIraSthLGgpfSxyfSwiZG91YmxlY2lyY2xlIiksZWl0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgX2kodCxlLGdvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDowLHk6MH0se3g6aSx5OjB9LHt4OmkseTotYX0se3g6MCx5Oi1hfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDppKzgseTowfSx7eDppKzgseTotYX0se3g6LTgseTotYX0se3g6LTgseTowfV0sbD1YbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSkscW4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gUm4ucG9seWdvbihlLHMsdSl9LHJ9LCJzdWJyb3V0aW5lIiksdGl0PW8oKHQsZSk9PntsZXQgcj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG49ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBuLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLHFuKGUsbiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oaSl7cmV0dXJuIFJuLmNpcmNsZShlLDcsaSl9LHJ9LCJzdGFydCIpLEJ2ZT1vKCh0LGUscik9PntsZXQgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9NzAsYT0xMDtyPT09IkxSIiYmKGk9MTAsYT03MCk7bGV0IHM9bi5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMSppLzIpLmF0dHIoInkiLC0xKmEvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gcW4oZSxzKSxlLmhlaWdodD1lLmhlaWdodCtlLnBhZGRpbmcvMixlLndpZHRoPWUud2lkdGgrZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIFJuLnJlY3QoZSxsKX0sbn0sImZvcmtKb2luIikscml0PW8oKHQsZSk9PntsZXQgcj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG49ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGk9ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLG4uYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLHFuKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFJuLmNpcmNsZShlLDcsYSl9LHJ9LCJlbmQiKSxuaXQ9bygodCxlKT0+e2xldCByPWUucGFkZGluZy8yLG49NCxpPTgsYTtlLmNsYXNzZXM/YT0ibm9kZSAiK2UuY2xhc3NlczphPSJub2RlIGRlZmF1bHQiO2xldCBzPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGEpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxsPXMuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksdT1zLmluc2VydCgibGluZSIpLGg9cy5pbnNlcnQoImxpbmUiKSxmPTAsZD1uLHA9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksbT0wLGc9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnM/LlswXSx5PWUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdPyJceEFCIitlLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSsiXHhCQiI6IiIsdj1wLm5vZGUoKS5hcHBlbmRDaGlsZChjcyh5LGUubGFiZWxTdHlsZSwhMCwhMCkpLHg9di5nZXRCQm94KCk7aWYoeHIoZGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBDPXYuY2hpbGRyZW5bMF0sQT16ZSh2KTt4PUMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQS5hdHRyKCJ3aWR0aCIseC53aWR0aCksQS5hdHRyKCJoZWlnaHQiLHguaGVpZ2h0KX1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKGQrPXguaGVpZ2h0K24sZis9eC53aWR0aCk7bGV0IGI9ZS5jbGFzc0RhdGEubGFiZWw7ZS5jbGFzc0RhdGEudHlwZSE9PXZvaWQgMCYmZS5jbGFzc0RhdGEudHlwZSE9PSIiJiYoZGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9iKz0iJmx0OyIrZS5jbGFzc0RhdGEudHlwZSsiJmd0OyI6Yis9IjwiK2UuY2xhc3NEYXRhLnR5cGUrIj4iKTtsZXQgdz1wLm5vZGUoKS5hcHBlbmRDaGlsZChjcyhiLGUubGFiZWxTdHlsZSwhMCwhMCkpO3plKHcpLmF0dHIoImNsYXNzIiwiY2xhc3NUaXRsZSIpO2xldCBfPXcuZ2V0QkJveCgpO2lmKHhyKGRlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgQz13LmNoaWxkcmVuWzBdLEE9emUodyk7Xz1DLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLF8ud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixfLmhlaWdodCl9ZCs9Xy5oZWlnaHQrbixfLndpZHRoPmYmJihmPV8ud2lkdGgpO2xldCBUPVtdO2UuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaChDPT57bGV0IEE9Qy5nZXREaXNwbGF5RGV0YWlscygpLEk9QS5kaXNwbGF5VGV4dDtkZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoST1JLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtsZXQgRD1wLm5vZGUoKS5hcHBlbmRDaGlsZChjcyhJLEEuY3NzU3R5bGU/QS5jc3NTdHlsZTplLmxhYmVsU3R5bGUsITAsITApKSxrPUQuZ2V0QkJveCgpO2lmKHhyKGRlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgUj1ELmNoaWxkcmVuWzBdLFM9emUoRCk7az1SLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFMuYXR0cigid2lkdGgiLGsud2lkdGgpLFMuYXR0cigiaGVpZ2h0IixrLmhlaWdodCl9ay53aWR0aD5mJiYoZj1rLndpZHRoKSxkKz1rLmhlaWdodCtuLFQucHVzaChEKX0pLGQrPWk7bGV0IEU9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKEM9PntsZXQgQT1DLmdldERpc3BsYXlEZXRhaWxzKCksST1BLmRpc3BsYXlUZXh0O2RlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJihJPUkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2xldCBEPXAubm9kZSgpLmFwcGVuZENoaWxkKGNzKEksQS5jc3NTdHlsZT9BLmNzc1N0eWxlOmUubGFiZWxTdHlsZSwhMCwhMCkpLGs9RC5nZXRCQm94KCk7aWYoeHIoZGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBSPUQuY2hpbGRyZW5bMF0sUz16ZShEKTtrPVIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUy5hdHRyKCJ3aWR0aCIsay53aWR0aCksUy5hdHRyKCJoZWlnaHQiLGsuaGVpZ2h0KX1rLndpZHRoPmYmJihmPWsud2lkdGgpLGQrPWsuaGVpZ2h0K24sRS5wdXNoKEQpfSksZCs9aSxnKXtsZXQgQz0oZi14LndpZHRoKS8yO3plKHYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqZi8yK0MpKyIsICIrLTEqZC8yKyIpIiksbT14LmhlaWdodCtufWxldCBMPShmLV8ud2lkdGgpLzI7cmV0dXJuIHplKHcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqZi8yK0wpKyIsICIrKC0xKmQvMittKSsiKSIpLG0rPV8uaGVpZ2h0K24sdS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWYvMi1yKS5hdHRyKCJ4MiIsZi8yK3IpLmF0dHIoInkxIiwtZC8yLXIraSttKS5hdHRyKCJ5MiIsLWQvMi1yK2krbSksbSs9aSxULmZvckVhY2goQz0+e3plKEMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistZi8yKyIsICIrKC0xKmQvMittK2kvMikrIikiKTtsZXQgQT1DPy5nZXRCQm94KCk7bSs9KEE/LmhlaWdodD8/MCkrbn0pLG0rPWksaC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWYvMi1yKS5hdHRyKCJ4MiIsZi8yK3IpLmF0dHIoInkxIiwtZC8yLXIraSttKS5hdHRyKCJ5MiIsLWQvMi1yK2krbSksbSs9aSxFLmZvckVhY2goQz0+e3plKEMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistZi8yKyIsICIrKC0xKmQvMittKSsiKSIpO2xldCBBPUM/LmdldEJCb3goKTttKz0oQT8uaGVpZ2h0Pz8wKStufSksbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1mLzItcikuYXR0cigieSIsLShkLzIpLXIpLmF0dHIoIndpZHRoIixmK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixkK2UucGFkZGluZykscW4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbihDKXtyZXR1cm4gUm4ucmVjdChlLEMpfSxzfSwiY2xhc3NfYm94IiksRnZlPXtyaG9tYnVzOlB2ZSxjb21wb3NpdGU6WG50LHF1ZXN0aW9uOlB2ZSxyZWN0OnFudCxsYWJlbFJlY3Q6am50LHJlY3RXaXRoVGl0bGU6S250LGNob2ljZTpCbnQsY2lyY2xlOlpudCxkb3VibGVjaXJjbGU6Sm50LHN0YWRpdW06UW50LGhleGFnb246Rm50LGJsb2NrX2Fycm93OnpudCxyZWN0X2xlZnRfaW52X2Fycm93OkdudCxsZWFuX3JpZ2h0OiRudCxsZWFuX2xlZnQ6Vm50LHRyYXBlem9pZDpVbnQsaW52X3RyYXBlem9pZDpIbnQscmVjdF9yaWdodF9pbnZfYXJyb3c6V250LGN5bGluZGVyOlludCxzdGFydDp0aXQsZW5kOnJpdCxub3RlOk12ZSxzdWJyb3V0aW5lOmVpdCxmb3JrOkJ2ZSxqb2luOkJ2ZSxjbGFzc19ib3g6bml0fSx0Uz17fSxhRj1vKGFzeW5jKHQsZSxyKT0+e2xldCBuLGk7aWYoZS5saW5rKXtsZXQgYTtkZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/YT0iX3RvcCI6ZS5saW5rVGFyZ2V0JiYoYT1lLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxuPXQuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixhKSxpPWF3YWl0IEZ2ZVtlLnNoYXBlXShuLGUscil9ZWxzZSBpPWF3YWl0IEZ2ZVtlLnNoYXBlXSh0LGUsciksbj1pO3JldHVybiBlLnRvb2x0aXAmJmkuYXR0cigidGl0bGUiLGUudG9vbHRpcCksZS5jbGFzcyYmaS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2UuY2xhc3MpLHRTW2UuaWRdPW4sZS5oYXZlQ2FsbGJhY2smJnRTW2UuaWRdLmF0dHIoImNsYXNzIix0U1tlLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIiksbn0sImluc2VydE5vZGUiKSx6dmU9byh0PT57bGV0IGU9dFNbdC5pZF07WS50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO2xldCByPTgsbj10LmRpZmZ8fDA7cmV0dXJuIHQuY2x1c3Rlck5vZGU/ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodC54K24tdC53aWR0aC8yKSsiLCAiKyh0LnktdC5oZWlnaHQvMi1yKSsiKSIpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIiksbn0sInBvc2l0aW9uTm9kZSIpfSk7ZnVuY3Rpb24gJHZlKHQsZSxyPSExKXtsZXQgbj10LGk9ImRlZmF1bHQiOyhuPy5jbGFzc2VzPy5sZW5ndGh8fDApPjAmJihpPShuPy5jbGFzc2VzPz9bXSkuam9pbigiICIpKSxpPWkrIiBmbG93Y2hhcnQtbGFiZWwiO2xldCBhPTAscz0iIixsO3N3aXRjaChuLnR5cGUpe2Nhc2Uicm91bmQiOmE9NSxzPSJyZWN0IjticmVhaztjYXNlImNvbXBvc2l0ZSI6YT0wLHM9ImNvbXBvc2l0ZSIsbD0wO2JyZWFrO2Nhc2Uic3F1YXJlIjpzPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOnM9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOnM9ImhleGFnb24iO2JyZWFrO2Nhc2UiYmxvY2tfYXJyb3ciOnM9ImJsb2NrX2Fycm93IjticmVhaztjYXNlIm9kZCI6cz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjpzPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6cz0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6cz0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOnM9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2UicmVjdF9sZWZ0X2ludl9hcnJvdyI6cz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOnM9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpzPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOnM9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6cz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6cz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOnM9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpzPSJkb3VibGVjaXJjbGUiO2JyZWFrO2RlZmF1bHQ6cz0icmVjdCJ9bGV0IHU9Sl8obj8uc3R5bGVzPz9bXSksaD1uLmxhYmVsLGY9bi5zaXplPz97d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfTtyZXR1cm57bGFiZWxTdHlsZTp1LmxhYmVsU3R5bGUsc2hhcGU6cyxsYWJlbFRleHQ6aCxyeDphLHJ5OmEsY2xhc3M6aSxzdHlsZTp1LnN0eWxlLGlkOm4uaWQsZGlyZWN0aW9uczpuLmRpcmVjdGlvbnMsd2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHQseDpmLngseTpmLnkscG9zaXRpb25lZDpyLGludGVyc2VjdDp2b2lkIDAsdHlwZTpuLnR5cGUscGFkZGluZzpsPz9TcigpPy5ibG9jaz8ucGFkZGluZz8/MH19YXN5bmMgZnVuY3Rpb24gaWl0KHQsZSxyKXtsZXQgbj0kdmUoZSxyLCExKTtpZihuLnR5cGU9PT0iZ3JvdXAiKXJldHVybjtsZXQgaT1TcigpLGE9YXdhaXQgYUYodCxuLHtjb25maWc6aX0pLHM9YS5ub2RlKCkuZ2V0QkJveCgpLGw9ci5nZXRCbG9jayhuLmlkKTtsLnNpemU9e3dpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0LHg6MCx5OjAsbm9kZTphfSxyLnNldEJsb2NrKGwpLGEucmVtb3ZlKCl9YXN5bmMgZnVuY3Rpb24gYWl0KHQsZSxyKXtsZXQgbj0kdmUoZSxyLCEwKTtpZihyLmdldEJsb2NrKG4uaWQpLnR5cGUhPT0ic3BhY2UiKXtsZXQgYT1TcigpO2F3YWl0IGFGKHQsbix7Y29uZmlnOmF9KSxlLmludGVyc2VjdD1uPy5pbnRlcnNlY3QsenZlKG4pfX1hc3luYyBmdW5jdGlvbiBzRih0LGUscixuKXtmb3IobGV0IGkgb2YgZSlhd2FpdCBuKHQsaSxyKSxpLmNoaWxkcmVuJiZhd2FpdCBzRih0LGkuY2hpbGRyZW4scixuKX1hc3luYyBmdW5jdGlvbiBWdmUodCxlLHIpe2F3YWl0IHNGKHQsZSxyLGlpdCl9YXN5bmMgZnVuY3Rpb24gVXZlKHQsZSxyKXthd2FpdCBzRih0LGUscixhaXQpfWFzeW5jIGZ1bmN0aW9uIEh2ZSh0LGUscixuLGkpe2xldCBhPW5ldyBNcih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pO2Euc2V0R3JhcGgoe3JhbmtkaXI6IlRCIixub2Rlc2VwOjEwLHJhbmtzZXA6MTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pO2ZvcihsZXQgcyBvZiByKXMuc2l6ZSYmYS5zZXROb2RlKHMuaWQse3dpZHRoOnMuc2l6ZS53aWR0aCxoZWlnaHQ6cy5zaXplLmhlaWdodCxpbnRlcnNlY3Q6cy5pbnRlcnNlY3R9KTtmb3IobGV0IHMgb2YgZSlpZihzLnN0YXJ0JiZzLmVuZCl7bGV0IGw9bi5nZXRCbG9jayhzLnN0YXJ0KSx1PW4uZ2V0QmxvY2socy5lbmQpO2lmKGw/LnNpemUmJnU/LnNpemUpe2xldCBoPWwuc2l6ZSxmPXUuc2l6ZSxkPVt7eDpoLngseTpoLnl9LHt4OmgueCsoZi54LWgueCkvMix5OmgueSsoZi55LWgueSkvMn0se3g6Zi54LHk6Zi55fV07dnZlKHQse3Y6cy5zdGFydCx3OnMuZW5kLG5hbWU6cy5pZH0sey4uLnMsYXJyb3dUeXBlRW5kOnMuYXJyb3dUeXBlRW5kLGFycm93VHlwZVN0YXJ0OnMuYXJyb3dUeXBlU3RhcnQscG9pbnRzOmQsY2xhc3NlczoiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayBMUy1hMSBMRS1iMSJ9LHZvaWQgMCwiYmxvY2siLGEsaSkscy5sYWJlbCYmKGF3YWl0IGd2ZSh0LHsuLi5zLGxhYmVsOnMubGFiZWwsbGFiZWxTdHlsZToic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiLGFycm93VHlwZUVuZDpzLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpzLmFycm93VHlwZVN0YXJ0LHBvaW50czpkLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSkseXZlKHsuLi5zLHg6ZFsxXS54LHk6ZFsxXS55fSx7b3JpZ2luYWxQYXRoOmR9KSl9fX12YXIgV3ZlPU0oKCk9PnsidXNlIHN0cmljdCI7TnMoKTtVYSgpO3h2ZSgpO0d2ZSgpO2hyKCk7bygkdmUsImdldE5vZGVGcm9tQmxvY2siKTtvKGlpdCwiY2FsY3VsYXRlQmxvY2tTaXplIik7byhhaXQsImluc2VydEJsb2NrUG9zaXRpb25lZCIpO28oc0YsInBlcmZvcm1PcGVyYXRpb25zIik7byhWdmUsImNhbGN1bGF0ZUJsb2NrU2l6ZXMiKTtvKFV2ZSwiaW5zZXJ0QmxvY2tzIik7byhIdmUsImluc2VydEVkZ2VzIil9KTt2YXIgc2l0LG9pdCxZdmUscXZlPU0oKCk9PnsidXNlIHN0cmljdCI7bXIoKTtVYSgpO3N2ZSgpO2h0KCk7bmkoKTt1dmUoKTtXdmUoKTtzaXQ9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmdldENsYXNzZXMoKX0sImdldENsYXNzZXMiKSxvaXQ9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtsZXR7c2VjdXJpdHlMZXZlbDppLGJsb2NrOmF9PVNyKCkscz1uLmRiLGw7aT09PSJzYW5kYm94IiYmKGw9emUoIiNpIitlKSk7bGV0IHU9aT09PSJzYW5kYm94Ij96ZShsLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOnplKCJib2R5IiksaD1pPT09InNhbmRib3giP3Uuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApOnplKGBbaWQ9IiR7ZX0iXWApO2F2ZShoLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLG4udHlwZSxlKTtsZXQgZD1zLmdldEJsb2NrcygpLHA9cy5nZXRCbG9ja3NGbGF0KCksbT1zLmdldEVkZ2VzKCksZz1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYmxvY2siKTthd2FpdCBWdmUoZyxkLHMpO2xldCB5PWN2ZShzKTtpZihhd2FpdCBVdmUoZyxkLHMpLGF3YWl0IEh2ZShnLG0scCxzLGUpLHkpe2xldCB2PXkseD1NYXRoLm1heCgxLE1hdGgucm91bmQoLjEyNSoodi53aWR0aC92LmhlaWdodCkpKSxiPXYuaGVpZ2h0K3grMTAsdz12LndpZHRoKzEwLHt1c2VNYXhXaWR0aDpffT1hO1pyKGgsYix3LCEhXyksWS5kZWJ1ZygiSGVyZSBCb3VuZHMiLHksdiksaC5hdHRyKCJ2aWV3Qm94IixgJHt2LngtNX0gJHt2LnktNX0gJHt2LndpZHRoKzEwfSAke3YuaGVpZ2h0KzEwfWApfX0sImRyYXciKSxZdmU9e2RyYXc6b2l0LGdldENsYXNzZXM6c2l0fX0pO3ZhciBYdmU9e307dnIoWHZlLHtkaWFncmFtOigpPT5saXR9KTt2YXIgbGl0LGp2ZT1NKCgpPT57InVzZSBzdHJpY3QiO2p5ZSgpO3J2ZSgpO2l2ZSgpO3F2ZSgpO2xpdD17cGFyc2VyOlh5ZSxkYjp0dmUscmVuZGVyZXI6WXZlLHN0eWxlczpudmV9fSk7dmFyIG9GLGxGLG1iLFp2ZSxjRix1cyxxYyxyUyxKdmUsZml0LGdiLGUyZSx0MmUscjJlLG4yZSxuUyxNZixpUz1NKCgpPT57InVzZSBzdHJpY3QiO29GPXtMOiJsZWZ0IixSOiJyaWdodCIsVDoidG9wIixCOiJib3R0b20ifSxsRj17TDpvKHQ9PmAke3R9LCR7dC8yfSAwLCR7dH0gMCwwYCwiTCIpLFI6byh0PT5gMCwke3QvMn0gJHt0fSwwICR7dH0sJHt0fWAsIlIiKSxUOm8odD0+YDAsMCAke3R9LDAgJHt0LzJ9LCR7dH1gLCJUIiksQjpvKHQ9PmAke3QvMn0sMCAke3R9LCR7dH0gMCwke3R9YCwiQiIpfSxtYj17TDpvKCh0LGUpPT50LWUrMiwiTCIpLFI6bygodCxlKT0+dC0yLCJSIiksVDpvKCh0LGUpPT50LWUrMiwiVCIpLEI6bygodCxlKT0+dC0yLCJCIil9LFp2ZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB1cyh0KT90PT09IkwiPyJSIjoiTCI6dD09PSJUIj8iQiI6IlQifSwiZ2V0T3Bwb3NpdGVBcmNoaXRlY3R1cmVEaXJlY3Rpb24iKSxjRj1vKGZ1bmN0aW9uKHQpe2xldCBlPXQ7cmV0dXJuIGU9PT0iTCJ8fGU9PT0iUiJ8fGU9PT0iVCJ8fGU9PT0iQiJ9LCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvbiIpLHVzPW8oZnVuY3Rpb24odCl7bGV0IGU9dDtyZXR1cm4gZT09PSJMInx8ZT09PSJSIn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWCIpLHFjPW8oZnVuY3Rpb24odCl7bGV0IGU9dDtyZXR1cm4gZT09PSJUInx8ZT09PSJCIn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWSIpLHJTPW8oZnVuY3Rpb24odCxlKXtsZXQgcj11cyh0KSYmcWMoZSksbj1xYyh0KSYmdXMoZSk7cmV0dXJuIHJ8fG59LCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvblhZIiksSnZlPW8oZnVuY3Rpb24odCl7bGV0IGU9dFswXSxyPXRbMV0sbj11cyhlKSYmcWMociksaT1xYyhlKSYmdXMocik7cmV0dXJuIG58fGl9LCJpc0FyY2hpdGVjdHVyZVBhaXJYWSIpLGZpdD1vKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09IkxMIiYmdCE9PSJSUiImJnQhPT0iVFQiJiZ0IT09IkJCIn0sImlzVmFsaWRBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyIiksZ2I9byhmdW5jdGlvbih0LGUpe2xldCByPWAke3R9JHtlfWA7cmV0dXJuIGZpdChyKT9yOnZvaWQgMH0sImdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIiKSxlMmU9byhmdW5jdGlvbihbdCxlXSxyKXtsZXQgbj1yWzBdLGk9clsxXTtyZXR1cm4gdXMobik/cWMoaSk/W3QrKG49PT0iTCI/LTE6MSksZSsoaT09PSJUIj8xOi0xKV06W3QrKG49PT0iTCI/LTE6MSksZV06dXMoaSk/W3QrKGk9PT0iTCI/MTotMSksZSsobj09PSJUIj8xOi0xKV06W3QsZSsobj09PSJUIj8xOi0xKV19LCJzaGlmdFBvc2l0aW9uQnlBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyIiksdDJlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0iTFQifHx0PT09IlRMIj9bMSwxXTp0PT09IkJMInx8dD09PSJMQiI/WzEsLTFdOnQ9PT0iQlIifHx0PT09IlJCIj9bLTEsLTFdOlstMSwxXX0sImdldEFyY2hpdGVjdHVyZURpcmVjdGlvblhZRmFjdG9ycyIpLHIyZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT0ic2VydmljZSJ9LCJpc0FyY2hpdGVjdHVyZVNlcnZpY2UiKSxuMmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09Imp1bmN0aW9uIn0sImlzQXJjaGl0ZWN0dXJlSnVuY3Rpb24iKSxuUz1vKHQ9PnQuZGF0YSgpLCJlZGdlRGF0YSIpLE1mPW8odD0+dC5kYXRhKCksIm5vZGVEYXRhIil9KTtmdW5jdGlvbiBMaSh0KXtsZXQgZT1kZSgpLmFyY2hpdGVjdHVyZTtyZXR1cm4gZT8uW3RdP2VbdF06aTJlW3RdfXZhciBpMmUsZ3IsZGl0LHBpdCxtaXQsZ2l0LHlpdCx2aXQseGl0LGJpdCx3aXQsVGl0LGtpdCxFaXQsU2l0LENpdCxYMCx5Yj1NKCgpPT57InVzZSBzdHJpY3QiO2hzKCk7VnQoKTt0RSgpO2tpKCk7aVMoKTtpMmU9dXIuYXJjaGl0ZWN0dXJlLGdyPW5ldyBjZigoKT0+KHtub2Rlczp7fSxncm91cHM6e30sZWRnZXM6W10scmVnaXN0ZXJlZElkczp7fSxjb25maWc6aTJlLGRhdGFTdHJ1Y3R1cmVzOnZvaWQgMCxlbGVtZW50czp7fX0pKSxkaXQ9bygoKT0+e2dyLnJlc2V0KCksX3IoKX0sImNsZWFyIikscGl0PW8oZnVuY3Rpb24oe2lkOnQsaWNvbjplLGluOnIsdGl0bGU6bixpY29uVGV4dDppfSl7aWYoZ3IucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgaWQgWyR7dH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHtnci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF19YCk7aWYociE9PXZvaWQgMCl7aWYodD09PXIpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHt0fV0gY2Fubm90IGJlIHBsYWNlZCB3aXRoaW4gaXRzZWxmYCk7aWYoZ3IucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7dH1dJ3MgcGFyZW50IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYXJlbnQgaXMgY3JlYXRlZCBiZWZvcmUgdGhpcyBzZXJ2aWNlYCk7aWYoZ3IucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09Im5vZGUiKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7dH1dJ3MgcGFyZW50IGlzIG5vdCBhIGdyb3VwYCl9Z3IucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdPSJub2RlIixnci5yZWNvcmRzLm5vZGVzW3RdPXtpZDp0LHR5cGU6InNlcnZpY2UiLGljb246ZSxpY29uVGV4dDppLHRpdGxlOm4sZWRnZXM6W10saW46cn19LCJhZGRTZXJ2aWNlIiksbWl0PW8oKCk9Pk9iamVjdC52YWx1ZXMoZ3IucmVjb3Jkcy5ub2RlcykuZmlsdGVyKHIyZSksImdldFNlcnZpY2VzIiksZ2l0PW8oZnVuY3Rpb24oe2lkOnQsaW46ZX0pe2dyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0ibm9kZSIsZ3IucmVjb3Jkcy5ub2Rlc1t0XT17aWQ6dCx0eXBlOiJqdW5jdGlvbiIsZWRnZXM6W10saW46ZX19LCJhZGRKdW5jdGlvbiIpLHlpdD1vKCgpPT5PYmplY3QudmFsdWVzKGdyLnJlY29yZHMubm9kZXMpLmZpbHRlcihuMmUpLCJnZXRKdW5jdGlvbnMiKSx2aXQ9bygoKT0+T2JqZWN0LnZhbHVlcyhnci5yZWNvcmRzLm5vZGVzKSwiZ2V0Tm9kZXMiKSx4aXQ9byh0PT5nci5yZWNvcmRzLm5vZGVzW3RdLCJnZXROb2RlIiksYml0PW8oZnVuY3Rpb24oe2lkOnQsaWNvbjplLGluOnIsdGl0bGU6bn0pe2lmKGdyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBpZCBbJHt0fV0gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciAke2dyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XX1gKTtpZihyIT09dm9pZCAwKXtpZih0PT09cil0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHt0fV0gY2Fubm90IGJlIHBsYWNlZCB3aXRoaW4gaXRzZWxmYCk7aWYoZ3IucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIGdyb3VwIFske3R9XSdzIHBhcmVudCBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIGNyZWF0ZWQgYmVmb3JlIHRoaXMgZ3JvdXBgKTtpZihnci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcl09PT0ibm9kZSIpdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7dH1dJ3MgcGFyZW50IGlzIG5vdCBhIGdyb3VwYCl9Z3IucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdPSJncm91cCIsZ3IucmVjb3Jkcy5ncm91cHNbdF09e2lkOnQsaWNvbjplLHRpdGxlOm4saW46cn19LCJhZGRHcm91cCIpLHdpdD1vKCgpPT5PYmplY3QudmFsdWVzKGdyLnJlY29yZHMuZ3JvdXBzKSwiZ2V0R3JvdXBzIiksVGl0PW8oZnVuY3Rpb24oe2xoc0lkOnQscmhzSWQ6ZSxsaHNEaXI6cixyaHNEaXI6bixsaHNJbnRvOmkscmhzSW50bzphLGxoc0dyb3VwOnMscmhzR3JvdXA6bCx0aXRsZTp1fSl7aWYoIWNGKHIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXJlY3Rpb24gZ2l2ZW4gZm9yIGxlZnQgaGFuZCBzaWRlIG9mIGVkZ2UgJHt0fS0tJHtlfS4gRXhwZWN0ZWQgKEwsUixULEIpIGdvdCAke3J9YCk7aWYoIWNGKG4pKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXJlY3Rpb24gZ2l2ZW4gZm9yIHJpZ2h0IGhhbmQgc2lkZSBvZiBlZGdlICR7dH0tLSR7ZX0uIEV4cGVjdGVkIChMLFIsVCxCKSBnb3QgJHtufWApO2lmKGdyLnJlY29yZHMubm9kZXNbdF09PT12b2lkIDAmJmdyLnJlY29yZHMuZ3JvdXBzW3RdPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIGxlZnQtaGFuZCBpZCBbJHt0fV0gZG9lcyBub3QgeWV0IGV4aXN0LiBQbGVhc2UgY3JlYXRlIHRoZSBzZXJ2aWNlL2dyb3VwIGJlZm9yZSBkZWNsYXJpbmcgYW4gZWRnZSB0byBpdC5gKTtpZihnci5yZWNvcmRzLm5vZGVzW2VdPT09dm9pZCAwJiZnci5yZWNvcmRzLmdyb3Vwc1t0XT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSByaWdodC1oYW5kIGlkIFske2V9XSBkb2VzIG5vdCB5ZXQgZXhpc3QuIFBsZWFzZSBjcmVhdGUgdGhlIHNlcnZpY2UvZ3JvdXAgYmVmb3JlIGRlY2xhcmluZyBhbiBlZGdlIHRvIGl0LmApO2xldCBoPWdyLnJlY29yZHMubm9kZXNbdF0uaW4sZj1nci5yZWNvcmRzLm5vZGVzW2VdLmluO2lmKHMmJmgmJmYmJmg9PWYpdGhyb3cgbmV3IEVycm9yKGBUaGUgbGVmdC1oYW5kIGlkIFske3R9XSBpcyBtb2RpZmllZCB0byB0cmF2ZXJzZSB0aGUgZ3JvdXAgYm91bmRhcnksIGJ1dCB0aGUgZWRnZSBkb2VzIG5vdCBwYXNzIHRocm91Z2ggdHdvIGdyb3Vwcy5gKTtpZihsJiZoJiZmJiZoPT1mKXRocm93IG5ldyBFcnJvcihgVGhlIHJpZ2h0LWhhbmQgaWQgWyR7ZX1dIGlzIG1vZGlmaWVkIHRvIHRyYXZlcnNlIHRoZSBncm91cCBib3VuZGFyeSwgYnV0IHRoZSBlZGdlIGRvZXMgbm90IHBhc3MgdGhyb3VnaCB0d28gZ3JvdXBzLmApO2xldCBkPXtsaHNJZDp0LGxoc0RpcjpyLGxoc0ludG86aSxsaHNHcm91cDpzLHJoc0lkOmUscmhzRGlyOm4scmhzSW50bzphLHJoc0dyb3VwOmwsdGl0bGU6dX07Z3IucmVjb3Jkcy5lZGdlcy5wdXNoKGQpLGdyLnJlY29yZHMubm9kZXNbdF0mJmdyLnJlY29yZHMubm9kZXNbZV0mJihnci5yZWNvcmRzLm5vZGVzW3RdLmVkZ2VzLnB1c2goZ3IucmVjb3Jkcy5lZGdlc1tnci5yZWNvcmRzLmVkZ2VzLmxlbmd0aC0xXSksZ3IucmVjb3Jkcy5ub2Rlc1tlXS5lZGdlcy5wdXNoKGdyLnJlY29yZHMuZWRnZXNbZ3IucmVjb3Jkcy5lZGdlcy5sZW5ndGgtMV0pKX0sImFkZEVkZ2UiKSxraXQ9bygoKT0+Z3IucmVjb3Jkcy5lZGdlcywiZ2V0RWRnZXMiKSxFaXQ9bygoKT0+e2lmKGdyLnJlY29yZHMuZGF0YVN0cnVjdHVyZXM9PT12b2lkIDApe2xldCB0PU9iamVjdC5lbnRyaWVzKGdyLnJlY29yZHMubm9kZXMpLnJlZHVjZSgocyxbbCx1XSk9PihzW2xdPXUuZWRnZXMucmVkdWNlKChoLGYpPT57aWYoZi5saHNJZD09PWwpe2xldCBkPWdiKGYubGhzRGlyLGYucmhzRGlyKTtkJiYoaFtkXT1mLnJoc0lkKX1lbHNle2xldCBkPWdiKGYucmhzRGlyLGYubGhzRGlyKTtkJiYoaFtkXT1mLmxoc0lkKX1yZXR1cm4gaH0se30pLHMpLHt9KSxlPU9iamVjdC5rZXlzKHQpWzBdLHI9e1tlXToxfSxuPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgocyxsKT0+bD09PWU/czp7Li4ucyxbbF06MX0se30pLGk9byhzPT57bGV0IGw9e1tzXTpbMCwwXX0sdT1bc107Zm9yKDt1Lmxlbmd0aD4wOyl7bGV0IGg9dS5zaGlmdCgpO2lmKGgpe3JbaF09MSxkZWxldGUgbltoXTtsZXQgZj10W2hdLFtkLHBdPWxbaF07T2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW20sZ10pPT57cltnXXx8KGxbZ109ZTJlKFtkLHBdLG0pLHUucHVzaChnKSl9KX19cmV0dXJuIGx9LCJCRlMiKSxhPVtpKGUpXTtmb3IoO09iamVjdC5rZXlzKG4pLmxlbmd0aD4wOylhLnB1c2goaShPYmplY3Qua2V5cyhuKVswXSkpO2dyLnJlY29yZHMuZGF0YVN0cnVjdHVyZXM9e2Fkakxpc3Q6dCxzcGF0aWFsTWFwczphfX1yZXR1cm4gZ3IucmVjb3Jkcy5kYXRhU3RydWN0dXJlc30sImdldERhdGFTdHJ1Y3R1cmVzIiksU2l0PW8oKHQsZSk9Pntnci5yZWNvcmRzLmVsZW1lbnRzW3RdPWV9LCJzZXRFbGVtZW50Rm9ySWQiKSxDaXQ9byh0PT5nci5yZWNvcmRzLmVsZW1lbnRzW3RdLCJnZXRFbGVtZW50QnlJZCIpLFgwPXtjbGVhcjpkaXQsc2V0RGlhZ3JhbVRpdGxlOmxuLGdldERpYWdyYW1UaXRsZTpKcixzZXRBY2NUaXRsZTpScixnZXRBY2NUaXRsZTpQcixzZXRBY2NEZXNjcmlwdGlvbjpCcixnZXRBY2NEZXNjcmlwdGlvbjpGcixhZGRTZXJ2aWNlOnBpdCxnZXRTZXJ2aWNlczptaXQsYWRkSnVuY3Rpb246Z2l0LGdldEp1bmN0aW9uczp5aXQsZ2V0Tm9kZXM6dml0LGdldE5vZGU6eGl0LGFkZEdyb3VwOmJpdCxnZXRHcm91cHM6d2l0LGFkZEVkZ2U6VGl0LGdldEVkZ2VzOmtpdCxzZXRFbGVtZW50Rm9ySWQ6U2l0LGdldEVsZW1lbnRCeUlkOkNpdCxnZXREYXRhU3RydWN0dXJlczpFaXR9O28oTGksImdldENvbmZpZ0ZpZWxkIil9KTt2YXIgQWl0LGEyZSxzMmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOZygpO2h0KCk7b3goKTt5YigpO0FpdD1vKCh0LGUpPT57bGYodCxlKSx0Lmdyb3Vwcy5tYXAoZS5hZGRHcm91cCksdC5zZXJ2aWNlcy5tYXAocj0+ZS5hZGRTZXJ2aWNlKHsuLi5yLHR5cGU6InNlcnZpY2UifSkpLHQuanVuY3Rpb25zLm1hcChyPT5lLmFkZEp1bmN0aW9uKHsuLi5yLHR5cGU6Imp1bmN0aW9uIn0pKSx0LmVkZ2VzLm1hcChlLmFkZEVkZ2UpfSwicG9wdWxhdGVEYiIpLGEyZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgR2woImFyY2hpdGVjdHVyZSIsdCk7WS5kZWJ1ZyhlKSxBaXQoZSxYMCl9LCJwYXJzZSIpfX0pO3ZhciBfaXQsbzJlLGwyZT1NKCgpPT57InVzZSBzdHJpY3QiO19pdD1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6ICR7dC5hcmNoRWRnZVdpZHRofTsKICAgIHN0cm9rZTogJHt0LmFyY2hFZGdlQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5hcnJvdyB7CiAgICBmaWxsOiAke3QuYXJjaEVkZ2VBcnJvd0NvbG9yfTsKICB9CgogIC5ub2RlLWJrZyB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAke3QuYXJjaEdyb3VwQm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke3QuYXJjaEdyb3VwQm9yZGVyV2lkdGh9OwogICAgc3Ryb2tlLWRhc2hhcnJheTogODsKICB9CiAgLm5vZGUtaWNvbi10ZXh0IHsKICAgIGRpc3BsYXk6IGZsZXg7IAogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgCiAgLm5vZGUtaWNvbi10ZXh0ID4gZGl2IHsKICAgIGNvbG9yOiAjZmZmOwogICAgbWFyZ2luOiAxcHg7CiAgICBoZWlnaHQ6IGZpdC1jb250ZW50OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwogICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICB9CmAsImdldFN0eWxlcyIpLG8yZT1faXR9KTt2YXIgaEY9TmkoKHZiLHVGKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIHZiPT0ib2JqZWN0IiYmdHlwZW9mIHVGPT0ib2JqZWN0Ij91Ri5leHBvcnRzPXIoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxyKTp0eXBlb2YgdmI9PSJvYmplY3QiP3ZiLmxheW91dEJhc2U9cigpOmUubGF5b3V0QmFzZT1yKCl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKHZiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIobil7aWYoZVtuXSlyZXR1cm4gZVtuXS5leHBvcnRzO3ZhciBpPWVbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiB0W25dLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLHIpLGkubD0hMCxpLmV4cG9ydHN9cmV0dXJuIG8ociwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLHIubT10LHIuYz1lLHIuaT1mdW5jdGlvbihuKXtyZXR1cm4gbn0sci5kPWZ1bmN0aW9uKG4saSxhKXtyLm8obixpKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmF9KX0sci5uPWZ1bmN0aW9uKG4pe3ZhciBpPW4mJm4uX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG59LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIHIuZChpLCJhIixpKSxpfSxyLm89ZnVuY3Rpb24obixpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSl9LHIucD0iIixyKHIucz0yOCl9KFtmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJMYXlvdXRDb25zdGFudHMiKSxuLlFVQUxJVFk9MSxuLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRD0hMSxuLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITEsbi5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ9ITAsbi5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUPSExLG4uREVGQVVMVF9BTklNQVRJT05fUEVSSU9EPTUwLG4uREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUz0hMSxuLkRFRkFVTFRfR1JBUEhfTUFSR0lOPTE1LG4uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPSExLG4uU0lNUExFX05PREVfU0laRT00MCxuLlNJTVBMRV9OT0RFX0hBTEZfU0laRT1uLlNJTVBMRV9OT0RFX1NJWkUvMixuLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRT00MCxuLk1JTl9FREdFX0xFTkdUSD0xLG4uV09STERfQk9VTkRBUlk9MWU2LG4uSU5JVElBTF9XT1JMRF9CT1VOREFSWT1uLldPUkxEX0JPVU5EQVJZLzFlMyxuLldPUkxEX0NFTlRFUl9YPTEyMDAsbi5XT1JMRF9DRU5URVJfWT05MDAsdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoOCksYT1yKDkpO2Z1bmN0aW9uIHModSxoLGYpe24uY2FsbCh0aGlzLGYpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PSExLHRoaXMudkdyYXBoT2JqZWN0PWYsdGhpcy5iZW5kcG9pbnRzPVtdLHRoaXMuc291cmNlPXUsdGhpcy50YXJnZXQ9aH1vKHMsIkxFZGdlIikscy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBsIGluIG4pc1tsXT1uW2xdO3MucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0fSxzLnByb3RvdHlwZS5pc0ludGVyR3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludGVyR3JhcGh9LHMucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0scy5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fSxzLnByb3RvdHlwZS5nZXRCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmVuZHBvaW50c30scy5wcm90b3R5cGUuZ2V0TGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGNhfSxzLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZUluTGNhfSxzLnByb3RvdHlwZS5nZXRUYXJnZXRJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldEluTGNhfSxzLnByb3RvdHlwZS5nZXRPdGhlckVuZD1mdW5jdGlvbih1KXtpZih0aGlzLnNvdXJjZT09PXUpcmV0dXJuIHRoaXMudGFyZ2V0O2lmKHRoaXMudGFyZ2V0PT09dSlyZXR1cm4gdGhpcy5zb3VyY2U7dGhyb3ciTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2UifSxzLnByb3RvdHlwZS5nZXRPdGhlckVuZEluR3JhcGg9ZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9dGhpcy5nZXRPdGhlckVuZCh1KSxkPWguZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpOzspe2lmKGYuZ2V0T3duZXIoKT09aClyZXR1cm4gZjtpZihmLmdldE93bmVyKCk9PWQpYnJlYWs7Zj1mLmdldE93bmVyKCkuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9LHMucHJvdG90eXBlLnVwZGF0ZUxlbmd0aD1mdW5jdGlvbigpe3ZhciB1PW5ldyBBcnJheSg0KTt0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1pLmdldEludGVyc2VjdGlvbih0aGlzLnRhcmdldC5nZXRSZWN0KCksdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLHUpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fHwodGhpcy5sZW5ndGhYPXVbMF0tdVsyXSx0aGlzLmxlbmd0aFk9dVsxXS11WzNdLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1hLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPWEuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKSl9LHMucHJvdG90eXBlLnVwZGF0ZUxlbmd0aFNpbXBsZT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoWD10aGlzLnRhcmdldC5nZXRDZW50ZXJYKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWCgpLHRoaXMubGVuZ3RoWT10aGlzLnRhcmdldC5nZXRDZW50ZXJZKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWSgpLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1hLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPWEuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKX0sdC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpKXt0aGlzLnZHcmFwaE9iamVjdD1pfW8obiwiTEdyYXBoT2JqZWN0IiksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoMTApLGE9cigxMykscz1yKDApLGw9cigxNiksdT1yKDUpO2Z1bmN0aW9uIGgoZCxwLG0sZyl7bT09bnVsbCYmZz09bnVsbCYmKGc9cCksbi5jYWxsKHRoaXMsZyksZC5ncmFwaE1hbmFnZXIhPW51bGwmJihkPWQuZ3JhcGhNYW5hZ2VyKSx0aGlzLmVzdGltYXRlZFNpemU9aS5NSU5fVkFMVUUsdGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9aS5NQVhfVkFMVUUsdGhpcy52R3JhcGhPYmplY3Q9Zyx0aGlzLmVkZ2VzPVtdLHRoaXMuZ3JhcGhNYW5hZ2VyPWQsbSE9bnVsbCYmcCE9bnVsbD90aGlzLnJlY3Q9bmV3IGEocC54LHAueSxtLndpZHRoLG0uaGVpZ2h0KTp0aGlzLnJlY3Q9bmV3IGF9byhoLCJMTm9kZSIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiBuKWhbZl09bltmXTtoLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxoLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkfSxoLnByb3RvdHlwZS5nZXRPd25lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyfSxoLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3Qud2lkdGh9LGgucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGQpe3RoaXMucmVjdC53aWR0aD1kfSxoLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGQpe3RoaXMucmVjdC5oZWlnaHQ9ZH0saC5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMn0saC5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzJ9LGgucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzIpfSxoLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLnJlY3QueCx0aGlzLnJlY3QueSl9LGgucHJvdG90eXBlLmdldFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0fSxoLnByb3RvdHlwZS5nZXREaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQpfSxoLnByb3RvdHlwZS5nZXRIYWxmVGhlRGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCt0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoKS8yfSxoLnByb3RvdHlwZS5zZXRSZWN0PWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC54LHRoaXMucmVjdC55PWQueSx0aGlzLnJlY3Qud2lkdGg9cC53aWR0aCx0aGlzLnJlY3QuaGVpZ2h0PXAuaGVpZ2h0fSxoLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLXRoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55PXAtdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQsdGhpcy5yZWN0Lnk9cH0saC5wcm90b3R5cGUubW92ZUJ5PWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0LngrPWQsdGhpcy5yZWN0LnkrPXB9LGgucHJvdG90eXBlLmdldEVkZ2VMaXN0VG9Ob2RlPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoeS50YXJnZXQ9PWQpe2lmKHkuc291cmNlIT1nKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSEiO3AucHVzaCh5KX19KSxwfSxoLnByb3RvdHlwZS5nZXRFZGdlc0JldHdlZW49ZnVuY3Rpb24oZCl7dmFyIHA9W10sbSxnPXRoaXM7cmV0dXJuIGcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbih5KXtpZighKHkuc291cmNlPT1nfHx5LnRhcmdldD09ZykpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQiOyh5LnRhcmdldD09ZHx8eS5zb3VyY2U9PWQpJiZwLnB1c2goeSl9KSxwfSxoLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0PWZ1bmN0aW9uKCl7dmFyIGQ9bmV3IFNldCxwPXRoaXM7cmV0dXJuIHAuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihtKXtpZihtLnNvdXJjZT09cClkLmFkZChtLnRhcmdldCk7ZWxzZXtpZihtLnRhcmdldCE9cCl0aHJvdyJJbmNvcnJlY3QgaW5jaWRlbmN5ISI7ZC5hZGQobS5zb3VyY2UpfX0pLGR9LGgucHJvdG90eXBlLndpdGhDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscCxtO2lmKGQuYWRkKHRoaXMpLHRoaXMuY2hpbGQhPW51bGwpZm9yKHZhciBnPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSx5PTA7eTxnLmxlbmd0aDt5KyspcD1nW3ldLG09cC53aXRoQ2hpbGRyZW4oKSxtLmZvckVhY2goZnVuY3Rpb24odil7ZC5hZGQodil9KTtyZXR1cm4gZH0saC5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGQ9MCxwO2lmKHRoaXMuY2hpbGQ9PW51bGwpZD0xO2Vsc2UgZm9yKHZhciBtPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxnPTA7ZzxtLmxlbmd0aDtnKyspcD1tW2ddLGQrPXAuZ2V0Tm9PZkNoaWxkcmVuKCk7cmV0dXJuIGQ9PTAmJihkPTEpLGR9LGgucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LGgucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5lc3RpbWF0ZWRTaXplPSh0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCkvMjoodGhpcy5lc3RpbWF0ZWRTaXplPXRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLnJlY3Qud2lkdGg9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMucmVjdC5oZWlnaHQ9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMuZXN0aW1hdGVkU2l6ZSl9LGgucHJvdG90eXBlLnNjYXR0ZXI9ZnVuY3Rpb24oKXt2YXIgZCxwLG09LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSxnPXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtkPXMuV09STERfQ0VOVEVSX1grbC5uZXh0RG91YmxlKCkqKGctbSkrbTt2YXIgeT0tcy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLHY9cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO3A9cy5XT1JMRF9DRU5URVJfWStsLm5leHREb3VibGUoKSoodi15KSt5LHRoaXMucmVjdC54PWQsdGhpcy5yZWN0Lnk9cH0saC5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5nZXRDaGlsZCgpPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLmxlbmd0aCE9MCl7dmFyIGQ9dGhpcy5nZXRDaGlsZCgpO2lmKGQudXBkYXRlQm91bmRzKCEwKSx0aGlzLnJlY3QueD1kLmdldExlZnQoKSx0aGlzLnJlY3QueT1kLmdldFRvcCgpLHRoaXMuc2V0V2lkdGgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKSx0aGlzLnNldEhlaWdodChkLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCkpLHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKXt2YXIgcD1kLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCksbT1kLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCk7dGhpcy5sYWJlbFdpZHRoJiYodGhpcy5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8odGhpcy5yZWN0LngtPXRoaXMubGFiZWxXaWR0aCx0aGlzLnNldFdpZHRoKHArdGhpcy5sYWJlbFdpZHRoKSk6dGhpcy5sYWJlbFBvc0hvcml6b250YWw9PSJjZW50ZXIiJiZ0aGlzLmxhYmVsV2lkdGg+cD8odGhpcy5yZWN0LngtPSh0aGlzLmxhYmVsV2lkdGgtcCkvMix0aGlzLnNldFdpZHRoKHRoaXMubGFiZWxXaWR0aCkpOnRoaXMubGFiZWxQb3NIb3Jpem9udGFsPT0icmlnaHQiJiZ0aGlzLnNldFdpZHRoKHArdGhpcy5sYWJlbFdpZHRoKSksdGhpcy5sYWJlbEhlaWdodCYmKHRoaXMubGFiZWxQb3NWZXJ0aWNhbD09InRvcCI/KHRoaXMucmVjdC55LT10aGlzLmxhYmVsSGVpZ2h0LHRoaXMuc2V0SGVpZ2h0KG0rdGhpcy5sYWJlbEhlaWdodCkpOnRoaXMubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJnRoaXMubGFiZWxIZWlnaHQ+bT8odGhpcy5yZWN0LnktPSh0aGlzLmxhYmVsSGVpZ2h0LW0pLzIsdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCkpOnRoaXMubGFiZWxQb3NWZXJ0aWNhbD09ImJvdHRvbSImJnRoaXMuc2V0SGVpZ2h0KG0rdGhpcy5sYWJlbEhlaWdodCkpfX19LGgucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe2lmKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPT1pLk1BWF9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5pbmNsdXNpb25UcmVlRGVwdGh9LGgucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihkKXt2YXIgcD10aGlzLnJlY3QueDtwPnMuV09STERfQk9VTkRBUlk/cD1zLldPUkxEX0JPVU5EQVJZOnA8LXMuV09STERfQk9VTkRBUlkmJihwPS1zLldPUkxEX0JPVU5EQVJZKTt2YXIgbT10aGlzLnJlY3QueTttPnMuV09STERfQk9VTkRBUlk/bT1zLldPUkxEX0JPVU5EQVJZOm08LXMuV09STERfQk9VTkRBUlkmJihtPS1zLldPUkxEX0JPVU5EQVJZKTt2YXIgZz1uZXcgdShwLG0pLHk9ZC5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoZyk7dGhpcy5zZXRMb2NhdGlvbih5LngseS55KX0saC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueH0saC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnl9LGgucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0fSxoLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcj09bnVsbD9udWxsOnRoaXMub3duZXIuZ2V0UGFyZW50KCl9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMCk7ZnVuY3Rpb24gaSgpe31vKGksIkZETGF5b3V0Q29uc3RhbnRzIik7Zm9yKHZhciBhIGluIG4paVthXT1uW2FdO2kuTUFYX0lURVJBVElPTlM9MjUwMCxpLkRFRkFVTFRfRURHRV9MRU5HVEg9NTAsaS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD0uNDUsaS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD00NTAwLGkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPS40LGkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPTEsaS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTMuOCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9MS41LGkuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT049ITAsaS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT049ITAsaS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPS4zLGkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUj0uMzMsaS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ9MWUzLGkuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUPTVlMyxpLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTD0xMDAsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ9aS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwqMyxpLk1JTl9SRVBVTFNJT05fRElTVD1pLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAsaS5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9MTAwLGkuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj0uMSxpLk1JTl9FREdFX0xFTkdUSD0xLGkuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9MTAsdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe2k9PW51bGwmJmE9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKToodGhpcy54PWksdGhpcy55PWEpfW8obiwiUG9pbnREIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGkpe3RoaXMueD1pfSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXREaWZmZXJlbmNlPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLngtaS54LHRoaXMueS1pLnkpfSxuLnByb3RvdHlwZS5nZXRDb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMueCs9aS53aWR0aCx0aGlzLnkrPWkuaGVpZ2h0LHRoaXN9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMCkscz1yKDcpLGw9cigzKSx1PXIoMSksaD1yKDEzKSxmPXIoMTIpLGQ9cigxMSk7ZnVuY3Rpb24gcChnLHksdil7bi5jYWxsKHRoaXMsdiksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMubWFyZ2luPWEuREVGQVVMVF9HUkFQSF9NQVJHSU4sdGhpcy5lZGdlcz1bXSx0aGlzLm5vZGVzPVtdLHRoaXMuaXNDb25uZWN0ZWQ9ITEsdGhpcy5wYXJlbnQ9Zyx5IT1udWxsJiZ5IGluc3RhbmNlb2Ygcz90aGlzLmdyYXBoTWFuYWdlcj15OnkhPW51bGwmJnkgaW5zdGFuY2VvZiBMYXlvdXQmJih0aGlzLmdyYXBoTWFuYWdlcj15LmdyYXBoTWFuYWdlcil9byhwLCJMR3JhcGgiKSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIG0gaW4gbilwW21dPW5bbV07cC5wcm90b3R5cGUuZ2V0Tm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc30scC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30scC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSxwLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LHAucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0fSxwLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0fSxwLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3B9LHAucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdHRvbX0scC5wcm90b3R5cGUuaXNDb25uZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZH0scC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSx2KXtpZih5PT1udWxsJiZ2PT1udWxsKXt2YXIgeD1nO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93IkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhIjtpZih0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih4KT4tMSl0aHJvdyJOb2RlIGFscmVhZHkgaW4gZ3JhcGghIjtyZXR1cm4geC5vd25lcj10aGlzLHRoaXMuZ2V0Tm9kZXMoKS5wdXNoKHgpLHh9ZWxzZXt2YXIgYj1nO2lmKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeSk+LTEmJnRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHYpPi0xKSl0aHJvdyJTb3VyY2Ugb3IgdGFyZ2V0IG5vdCBpbiBncmFwaCEiO2lmKCEoeS5vd25lcj09di5vd25lciYmeS5vd25lcj09dGhpcykpdGhyb3ciQm90aCBvd25lcnMgbXVzdCBiZSB0aGlzIGdyYXBoISI7cmV0dXJuIHkub3duZXIhPXYub3duZXI/bnVsbDooYi5zb3VyY2U9eSxiLnRhcmdldD12LGIuaXNJbnRlckdyYXBoPSExLHRoaXMuZ2V0RWRnZXMoKS5wdXNoKGIpLHkuZWRnZXMucHVzaChiKSx2IT15JiZ2LmVkZ2VzLnB1c2goYiksYil9fSxwLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZyl7dmFyIHk9ZztpZihnIGluc3RhbmNlb2YgbCl7aWYoeT09bnVsbCl0aHJvdyJOb2RlIGlzIG51bGwhIjtpZighKHkub3duZXIhPW51bGwmJnkub3duZXI9PXRoaXMpKXRocm93Ik93bmVyIGdyYXBoIGlzIGludmFsaWQhIjtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJPd25lciBncmFwaCBtYW5hZ2VyIGlzIGludmFsaWQhIjtmb3IodmFyIHY9eS5lZGdlcy5zbGljZSgpLHgsYj12Lmxlbmd0aCx3PTA7dzxiO3crKyl4PXZbd10seC5pc0ludGVyR3JhcGg/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHgpOnguc291cmNlLm93bmVyLnJlbW92ZSh4KTt2YXIgXz10aGlzLm5vZGVzLmluZGV4T2YoeSk7aWYoXz09LTEpdGhyb3ciTm9kZSBub3QgaW4gb3duZXIgbm9kZSBsaXN0ISI7dGhpcy5ub2Rlcy5zcGxpY2UoXywxKX1lbHNlIGlmKGcgaW5zdGFuY2VvZiB1KXt2YXIgeD1nO2lmKHg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoISh4LnNvdXJjZSE9bnVsbCYmeC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKHguc291cmNlLm93bmVyIT1udWxsJiZ4LnRhcmdldC5vd25lciE9bnVsbCYmeC5zb3VyY2Uub3duZXI9PXRoaXMmJngudGFyZ2V0Lm93bmVyPT10aGlzKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkISI7dmFyIFQ9eC5zb3VyY2UuZWRnZXMuaW5kZXhPZih4KSxFPXgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoeCk7aWYoIShUPi0xJiZFPi0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7eC5zb3VyY2UuZWRnZXMuc3BsaWNlKFQsMSkseC50YXJnZXQhPXguc291cmNlJiZ4LnRhcmdldC5lZGdlcy5zcGxpY2UoRSwxKTt2YXIgXz14LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLmluZGV4T2YoeCk7aWYoXz09LTEpdGhyb3ciTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0ISI7eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5zcGxpY2UoXywxKX19LHAucHJvdG90eXBlLnVwZGF0ZUxlZnRUb3A9ZnVuY3Rpb24oKXtmb3IodmFyIGc9aS5NQVhfVkFMVUUseT1pLk1BWF9WQUxVRSx2LHgsYix3PXRoaXMuZ2V0Tm9kZXMoKSxfPXcubGVuZ3RoLFQ9MDtUPF87VCsrKXt2YXIgRT13W1RdO3Y9RS5nZXRUb3AoKSx4PUUuZ2V0TGVmdCgpLGc+diYmKGc9dikseT54JiYoeT14KX1yZXR1cm4gZz09aS5NQVhfVkFMVUU/bnVsbDood1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9iPXdbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6Yj10aGlzLm1hcmdpbix0aGlzLmxlZnQ9eS1iLHRoaXMudG9wPWctYixuZXcgZih0aGlzLmxlZnQsdGhpcy50b3ApKX0scC5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1pLk1BWF9WQUxVRSx2PS1pLk1BWF9WQUxVRSx4PWkuTUFYX1ZBTFVFLGI9LWkuTUFYX1ZBTFVFLHcsXyxULEUsTCxDPXRoaXMubm9kZXMsQT1DLmxlbmd0aCxJPTA7STxBO0krKyl7dmFyIEQ9Q1tJXTtnJiZELmNoaWxkIT1udWxsJiZELnVwZGF0ZUJvdW5kcygpLHc9RC5nZXRMZWZ0KCksXz1ELmdldFJpZ2h0KCksVD1ELmdldFRvcCgpLEU9RC5nZXRCb3R0b20oKSx5PncmJih5PXcpLHY8XyYmKHY9XykseD5UJiYoeD1UKSxiPEUmJihiPUUpfXZhciBrPW5ldyBoKHkseCx2LXksYi14KTt5PT1pLk1BWF9WQUxVRSYmKHRoaXMubGVmdD10aGlzLnBhcmVudC5nZXRMZWZ0KCksdGhpcy5yaWdodD10aGlzLnBhcmVudC5nZXRSaWdodCgpLHRoaXMudG9wPXRoaXMucGFyZW50LmdldFRvcCgpLHRoaXMuYm90dG9tPXRoaXMucGFyZW50LmdldEJvdHRvbSgpKSxDWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP0w9Q1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpMPXRoaXMubWFyZ2luLHRoaXMubGVmdD1rLngtTCx0aGlzLnJpZ2h0PWsueCtrLndpZHRoK0wsdGhpcy50b3A9ay55LUwsdGhpcy5ib3R0b209ay55K2suaGVpZ2h0K0x9LHAuY2FsY3VsYXRlQm91bmRzPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1pLk1BWF9WQUxVRSx2PS1pLk1BWF9WQUxVRSx4PWkuTUFYX1ZBTFVFLGI9LWkuTUFYX1ZBTFVFLHcsXyxULEUsTD1nLmxlbmd0aCxDPTA7QzxMO0MrKyl7dmFyIEE9Z1tDXTt3PUEuZ2V0TGVmdCgpLF89QS5nZXRSaWdodCgpLFQ9QS5nZXRUb3AoKSxFPUEuZ2V0Qm90dG9tKCkseT53JiYoeT13KSx2PF8mJih2PV8pLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgST1uZXcgaCh5LHgsdi15LGIteCk7cmV0dXJuIEl9LHAucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/MTp0aGlzLnBhcmVudC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKX0scC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09aS5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtmb3IodmFyIGc9MCx5PXRoaXMubm9kZXMsdj15Lmxlbmd0aCx4PTA7eDx2O3grKyl7dmFyIGI9eVt4XTtnKz1iLmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGc9PTA/dGhpcy5lc3RpbWF0ZWRTaXplPWEuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFOnRoaXMuZXN0aW1hdGVkU2l6ZT1nL01hdGguc3FydCh0aGlzLm5vZGVzLmxlbmd0aCksdGhpcy5lc3RpbWF0ZWRTaXplfSxwLnByb3RvdHlwZS51cGRhdGVDb25uZWN0ZWQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgeT1uZXcgZCx2PW5ldyBTZXQseD10aGlzLm5vZGVzWzBdLGIsdyxfPXgud2l0aENoaWxkcmVuKCk7Zm9yKF8uZm9yRWFjaChmdW5jdGlvbihJKXt5LnB1c2goSSksdi5hZGQoSSl9KTt5Lmxlbmd0aCE9PTA7KXt4PXkuc2hpZnQoKSxiPXguZ2V0RWRnZXMoKTtmb3IodmFyIFQ9Yi5sZW5ndGgsRT0wO0U8VDtFKyspe3ZhciBMPWJbRV07aWYodz1MLmdldE90aGVyRW5kSW5HcmFwaCh4LHRoaXMpLHchPW51bGwmJiF2Lmhhcyh3KSl7dmFyIEM9dy53aXRoQ2hpbGRyZW4oKTtDLmZvckVhY2goZnVuY3Rpb24oSSl7eS5wdXNoKEkpLHYuYWRkKEkpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLHYuc2l6ZT49dGhpcy5ub2Rlcy5sZW5ndGgpe3ZhciBBPTA7di5mb3JFYWNoKGZ1bmN0aW9uKEkpe0kub3duZXI9PWcmJkErK30pLEE9PXRoaXMubm9kZXMubGVuZ3RoJiYodGhpcy5pc0Nvbm5lY3RlZD0hMCl9fSx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXIoMSk7ZnVuY3Rpb24gYShzKXtuPXIoNiksdGhpcy5sYXlvdXQ9cyx0aGlzLmdyYXBocz1bXSx0aGlzLmVkZ2VzPVtdfW8oYSwiTEdyYXBoTWFuYWdlciIpLGEucHJvdG90eXBlLmFkZFJvb3Q9ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmxheW91dC5uZXdHcmFwaCgpLGw9dGhpcy5sYXlvdXQubmV3Tm9kZShudWxsKSx1PXRoaXMuYWRkKHMsbCk7cmV0dXJuIHRoaXMuc2V0Um9vdEdyYXBoKHUpLHRoaXMucm9vdEdyYXBofSxhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyxsLHUsaCxmKXtpZih1PT1udWxsJiZoPT1udWxsJiZmPT1udWxsKXtpZihzPT1udWxsKXRocm93IkdyYXBoIGlzIG51bGwhIjtpZihsPT1udWxsKXRocm93IlBhcmVudCBub2RlIGlzIG51bGwhIjtpZih0aGlzLmdyYXBocy5pbmRleE9mKHMpPi0xKXRocm93IkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZih0aGlzLmdyYXBocy5wdXNoKHMpLHMucGFyZW50IT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgcGFyZW50ISI7aWYobC5jaGlsZCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIGNoaWxkISI7cmV0dXJuIHMucGFyZW50PWwsbC5jaGlsZD1zLHN9ZWxzZXtmPXUsaD1sLHU9czt2YXIgZD1oLmdldE93bmVyKCkscD1mLmdldE93bmVyKCk7aWYoIShkIT1udWxsJiZkLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJTb3VyY2Ugbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoIShwIT1udWxsJiZwLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoZD09cClyZXR1cm4gdS5pc0ludGVyR3JhcGg9ITEsZC5hZGQodSxoLGYpO2lmKHUuaXNJbnRlckdyYXBoPSEwLHUuc291cmNlPWgsdS50YXJnZXQ9Zix0aGlzLmVkZ2VzLmluZGV4T2YodSk+LTEpdGhyb3ciRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCEiO2lmKHRoaXMuZWRnZXMucHVzaCh1KSwhKHUuc291cmNlIT1udWxsJiZ1LnRhcmdldCE9bnVsbCkpdGhyb3ciRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh1LnNvdXJjZS5lZGdlcy5pbmRleE9mKHUpPT0tMSYmdS50YXJnZXQuZWRnZXMuaW5kZXhPZih1KT09LTEpKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBzb3VyY2UgYW5kL29yIHRhcmdldCBpbmNpZGVuY3kgbGlzdCEiO3JldHVybiB1LnNvdXJjZS5lZGdlcy5wdXNoKHUpLHUudGFyZ2V0LmVkZ2VzLnB1c2godSksdX19LGEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihzKXtpZihzIGluc3RhbmNlb2Ygbil7dmFyIGw9cztpZihsLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IkdyYXBoIG5vdCBpbiB0aGlzIGdyYXBoIG1nciI7aWYoIShsPT10aGlzLnJvb3RHcmFwaHx8bC5wYXJlbnQhPW51bGwmJmwucGFyZW50LmdyYXBoTWFuYWdlcj09dGhpcykpdGhyb3ciSW52YWxpZCBwYXJlbnQgbm9kZSEiO3ZhciB1PVtdO3U9dS5jb25jYXQobC5nZXRFZGdlcygpKTtmb3IodmFyIGgsZj11Lmxlbmd0aCxkPTA7ZDxmO2QrKyloPXVbZF0sbC5yZW1vdmUoaCk7dmFyIHA9W107cD1wLmNvbmNhdChsLmdldE5vZGVzKCkpO3ZhciBtO2Y9cC5sZW5ndGg7Zm9yKHZhciBkPTA7ZDxmO2QrKyltPXBbZF0sbC5yZW1vdmUobSk7bD09dGhpcy5yb290R3JhcGgmJnRoaXMuc2V0Um9vdEdyYXBoKG51bGwpO3ZhciBnPXRoaXMuZ3JhcGhzLmluZGV4T2YobCk7dGhpcy5ncmFwaHMuc3BsaWNlKGcsMSksbC5wYXJlbnQ9bnVsbH1lbHNlIGlmKHMgaW5zdGFuY2VvZiBpKXtpZihoPXMsaD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighaC5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKGguc291cmNlIT1udWxsJiZoLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoaC5zb3VyY2UuZWRnZXMuaW5kZXhPZihoKSE9LTEmJmgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoaCkhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGc9aC5zb3VyY2UuZWRnZXMuaW5kZXhPZihoKTtpZihoLnNvdXJjZS5lZGdlcy5zcGxpY2UoZywxKSxnPWgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoaCksaC50YXJnZXQuZWRnZXMuc3BsaWNlKGcsMSksIShoLnNvdXJjZS5vd25lciE9bnVsbCYmaC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkhPW51bGwpKXRocm93IkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsISI7aWYoaC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKT09LTEpdGhyb3ciTm90IGluIG93bmVyIGdyYXBoIG1hbmFnZXIncyBlZGdlIGxpc3QhIjt2YXIgZz1oLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGgpO2guc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLnNwbGljZShnLDEpfX0sYS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0sYS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSxhLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgcz1bXSxsPXRoaXMuZ2V0R3JhcGhzKCksdT1sLmxlbmd0aCxoPTA7aDx1O2grKylzPXMuY29uY2F0KGxbaF0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1zfXJldHVybiB0aGlzLmFsbE5vZGVzfSxhLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSxhLnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSxhLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSxhLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe2Zvcih2YXIgcz1bXSxsPXRoaXMuZ2V0R3JhcGhzKCksdT1sLmxlbmd0aCxoPTA7aDxsLmxlbmd0aDtoKyspcz1zLmNvbmNhdChsW2hdLmdldEVkZ2VzKCkpO3M9cy5jb25jYXQodGhpcy5lZGdlcyksdGhpcy5hbGxFZGdlcz1zfXJldHVybiB0aGlzLmFsbEVkZ2VzfSxhLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9ufSxhLnByb3RvdHlwZS5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbihzKXtpZih0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249c30sYS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuc2V0Um9vdEdyYXBoPWZ1bmN0aW9uKHMpe2lmKHMuZ2V0R3JhcGhNYW5hZ2VyKCkhPXRoaXMpdGhyb3ciUm9vdCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjt0aGlzLnJvb3RHcmFwaD1zLHMucGFyZW50PT1udWxsJiYocy5wYXJlbnQ9dGhpcy5sYXlvdXQubmV3Tm9kZSgiUm9vdCBub2RlIikpfSxhLnByb3RvdHlwZS5nZXRMYXlvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXR9LGEucHJvdG90eXBlLmlzT25lQW5jZXN0b3JPZk90aGVyPWZ1bmN0aW9uKHMsbCl7aWYoIShzIT1udWxsJiZsIT1udWxsKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZihzPT1sKXJldHVybiEwO3ZhciB1PXMuZ2V0T3duZXIoKSxoO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PWwpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7dT1sLmdldE93bmVyKCk7ZG97aWYoaD11LmdldFBhcmVudCgpLGg9PW51bGwpYnJlYWs7aWYoaD09cylyZXR1cm4hMDtpZih1PWguZ2V0T3duZXIoKSx1PT1udWxsKWJyZWFrfXdoaWxlKCEwKTtyZXR1cm4hMX0sYS5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgcyxsLHUsaCxmLGQ9dGhpcy5nZXRBbGxFZGdlcygpLHA9ZC5sZW5ndGgsbT0wO208cDttKyspe2lmKHM9ZFttXSxsPXMuc291cmNlLHU9cy50YXJnZXQscy5sY2E9bnVsbCxzLnNvdXJjZUluTGNhPWwscy50YXJnZXRJbkxjYT11LGw9PXUpe3MubGNhPWwuZ2V0T3duZXIoKTtjb250aW51ZX1mb3IoaD1sLmdldE93bmVyKCk7cy5sY2E9PW51bGw7KXtmb3Iocy50YXJnZXRJbkxjYT11LGY9dS5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7aWYoZj09aCl7cy5sY2E9ZjticmVha31pZihmPT10aGlzLnJvb3RHcmFwaClicmVhaztpZihzLmxjYSE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtzLnRhcmdldEluTGNhPWYuZ2V0UGFyZW50KCksZj1zLnRhcmdldEluTGNhLmdldE93bmVyKCl9aWYoaD09dGhpcy5yb290R3JhcGgpYnJlYWs7cy5sY2E9PW51bGwmJihzLnNvdXJjZUluTGNhPWguZ2V0UGFyZW50KCksaD1zLnNvdXJjZUluTGNhLmdldE93bmVyKCkpfWlmKHMubGNhPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQifX0sYS5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yPWZ1bmN0aW9uKHMsbCl7aWYocz09bClyZXR1cm4gcy5nZXRPd25lcigpO3ZhciB1PXMuZ2V0T3duZXIoKTtkb3tpZih1PT1udWxsKWJyZWFrO3ZhciBoPWwuZ2V0T3duZXIoKTtkb3tpZihoPT1udWxsKWJyZWFrO2lmKGg9PXUpcmV0dXJuIGg7aD1oLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3U9dS5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTtyZXR1cm4gdX0sYS5wcm90b3R5cGUuY2FsY0luY2x1c2lvblRyZWVEZXB0aHM9ZnVuY3Rpb24ocyxsKXtzPT1udWxsJiZsPT1udWxsJiYocz10aGlzLnJvb3RHcmFwaCxsPTEpO2Zvcih2YXIgdSxoPXMuZ2V0Tm9kZXMoKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXU9aFtkXSx1LmluY2x1c2lvblRyZWVEZXB0aD1sLHUuY2hpbGQhPW51bGwmJnRoaXMuY2FsY0luY2x1c2lvblRyZWVEZXB0aHModS5jaGlsZCxsKzEpfSxhLnByb3RvdHlwZS5pbmNsdWRlc0ludmFsaWRFZGdlPWZ1bmN0aW9uKCl7Zm9yKHZhciBzLGw9W10sdT10aGlzLmVkZ2VzLmxlbmd0aCxoPTA7aDx1O2grKylzPXRoaXMuZWRnZXNbaF0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihzLnNvdXJjZSxzLnRhcmdldCkmJmwucHVzaChzKTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLnJlbW92ZShsW2hdKTtyZXR1cm4hMX0sdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMik7ZnVuY3Rpb24gaSgpe31vKGksIklHZW9tZXRyeSIpLGkuY2FsY1NlcGFyYXRpb25BbW91bnQ9ZnVuY3Rpb24oYSxzLGwsdSl7aWYoIWEuaW50ZXJzZWN0cyhzKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjt2YXIgaD1uZXcgQXJyYXkoMik7dGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhhLHMsaCksbFswXT1NYXRoLm1pbihhLmdldFJpZ2h0KCkscy5nZXRSaWdodCgpKS1NYXRoLm1heChhLngscy54KSxsWzFdPU1hdGgubWluKGEuZ2V0Qm90dG9tKCkscy5nZXRCb3R0b20oKSktTWF0aC5tYXgoYS55LHMueSksYS5nZXRYKCk8PXMuZ2V0WCgpJiZhLmdldFJpZ2h0KCk+PXMuZ2V0UmlnaHQoKT9sWzBdKz1NYXRoLm1pbihzLmdldFgoKS1hLmdldFgoKSxhLmdldFJpZ2h0KCktcy5nZXRSaWdodCgpKTpzLmdldFgoKTw9YS5nZXRYKCkmJnMuZ2V0UmlnaHQoKT49YS5nZXRSaWdodCgpJiYobFswXSs9TWF0aC5taW4oYS5nZXRYKCktcy5nZXRYKCkscy5nZXRSaWdodCgpLWEuZ2V0UmlnaHQoKSkpLGEuZ2V0WSgpPD1zLmdldFkoKSYmYS5nZXRCb3R0b20oKT49cy5nZXRCb3R0b20oKT9sWzFdKz1NYXRoLm1pbihzLmdldFkoKS1hLmdldFkoKSxhLmdldEJvdHRvbSgpLXMuZ2V0Qm90dG9tKCkpOnMuZ2V0WSgpPD1hLmdldFkoKSYmcy5nZXRCb3R0b20oKT49YS5nZXRCb3R0b20oKSYmKGxbMV0rPU1hdGgubWluKGEuZ2V0WSgpLXMuZ2V0WSgpLHMuZ2V0Qm90dG9tKCktYS5nZXRCb3R0b20oKSkpO3ZhciBmPU1hdGguYWJzKChzLmdldENlbnRlclkoKS1hLmdldENlbnRlclkoKSkvKHMuZ2V0Q2VudGVyWCgpLWEuZ2V0Q2VudGVyWCgpKSk7cy5nZXRDZW50ZXJZKCk9PT1hLmdldENlbnRlclkoKSYmcy5nZXRDZW50ZXJYKCk9PT1hLmdldENlbnRlclgoKSYmKGY9MSk7dmFyIGQ9ZipsWzBdLHA9bFsxXS9mO2xbMF08cD9wPWxbMF06ZD1sWzFdLGxbMF09LTEqaFswXSoocC8yK3UpLGxbMV09LTEqaFsxXSooZC8yK3UpfSxpLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzPWZ1bmN0aW9uKGEscyxsKXthLmdldENlbnRlclgoKTxzLmdldENlbnRlclgoKT9sWzBdPS0xOmxbMF09MSxhLmdldENlbnRlclkoKTxzLmdldENlbnRlclkoKT9sWzFdPS0xOmxbMV09MX0saS5nZXRJbnRlcnNlY3Rpb24yPWZ1bmN0aW9uKGEscyxsKXt2YXIgdT1hLmdldENlbnRlclgoKSxoPWEuZ2V0Q2VudGVyWSgpLGY9cy5nZXRDZW50ZXJYKCksZD1zLmdldENlbnRlclkoKTtpZihhLmludGVyc2VjdHMocykpcmV0dXJuIGxbMF09dSxsWzFdPWgsbFsyXT1mLGxbM109ZCwhMDt2YXIgcD1hLmdldFgoKSxtPWEuZ2V0WSgpLGc9YS5nZXRSaWdodCgpLHk9YS5nZXRYKCksdj1hLmdldEJvdHRvbSgpLHg9YS5nZXRSaWdodCgpLGI9YS5nZXRXaWR0aEhhbGYoKSx3PWEuZ2V0SGVpZ2h0SGFsZigpLF89cy5nZXRYKCksVD1zLmdldFkoKSxFPXMuZ2V0UmlnaHQoKSxMPXMuZ2V0WCgpLEM9cy5nZXRCb3R0b20oKSxBPXMuZ2V0UmlnaHQoKSxJPXMuZ2V0V2lkdGhIYWxmKCksRD1zLmdldEhlaWdodEhhbGYoKSxrPSExLFI9ITE7aWYodT09PWYpe2lmKGg+ZClyZXR1cm4gbFswXT11LGxbMV09bSxsWzJdPWYsbFszXT1DLCExO2lmKGg8ZClyZXR1cm4gbFswXT11LGxbMV09dixsWzJdPWYsbFszXT1ULCExfWVsc2UgaWYoaD09PWQpe2lmKHU+ZilyZXR1cm4gbFswXT1wLGxbMV09aCxsWzJdPUUsbFszXT1kLCExO2lmKHU8ZilyZXR1cm4gbFswXT1nLGxbMV09aCxsWzJdPV8sbFszXT1kLCExfWVsc2V7dmFyIFM9YS5oZWlnaHQvYS53aWR0aCxPPXMuaGVpZ2h0L3Mud2lkdGgsTj0oZC1oKS8oZi11KSxQPXZvaWQgMCxGPXZvaWQgMCxCPXZvaWQgMCwkPXZvaWQgMCx6PXZvaWQgMCxXPXZvaWQgMDtpZigtUz09PU4/dT5mPyhsWzBdPXksbFsxXT12LGs9ITApOihsWzBdPWcsbFsxXT1tLGs9ITApOlM9PT1OJiYodT5mPyhsWzBdPXAsbFsxXT1tLGs9ITApOihsWzBdPXgsbFsxXT12LGs9ITApKSwtTz09PU4/Zj51PyhsWzJdPUwsbFszXT1DLFI9ITApOihsWzJdPUUsbFszXT1ULFI9ITApOk89PT1OJiYoZj51PyhsWzJdPV8sbFszXT1ULFI9ITApOihsWzJdPUEsbFszXT1DLFI9ITApKSxrJiZSKXJldHVybiExO2lmKHU+Zj9oPmQ/KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihTLE4sNCksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTiwyKSk6KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtUyxOLDMpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtTyxOLDEpKTpoPmQ/KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtUyxOLDEpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtTyxOLDMpKTooUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKFMsTiwyKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oTyxOLDQpKSwhaylzd2l0Y2goUCl7Y2FzZSAxOiQ9bSxCPXUrLXcvTixsWzBdPUIsbFsxXT0kO2JyZWFrO2Nhc2UgMjpCPXgsJD1oK2IqTixsWzBdPUIsbFsxXT0kO2JyZWFrO2Nhc2UgMzokPXYsQj11K3cvTixsWzBdPUIsbFsxXT0kO2JyZWFrO2Nhc2UgNDpCPXksJD1oKy1iKk4sbFswXT1CLGxbMV09JDticmVha31pZighUilzd2l0Y2goRil7Y2FzZSAxOlc9VCx6PWYrLUQvTixsWzJdPXosbFszXT1XO2JyZWFrO2Nhc2UgMjp6PUEsVz1kK0kqTixsWzJdPXosbFszXT1XO2JyZWFrO2Nhc2UgMzpXPUMsej1mK0QvTixsWzJdPXosbFszXT1XO2JyZWFrO2Nhc2UgNDp6PUwsVz1kKy1JKk4sbFsyXT16LGxbM109VzticmVha319cmV0dXJuITF9LGkuZ2V0Q2FyZGluYWxEaXJlY3Rpb249ZnVuY3Rpb24oYSxzLGwpe3JldHVybiBhPnM/bDoxK2wlNH0saS5nZXRJbnRlcnNlY3Rpb249ZnVuY3Rpb24oYSxzLGwsdSl7aWYodT09bnVsbClyZXR1cm4gdGhpcy5nZXRJbnRlcnNlY3Rpb24yKGEscyxsKTt2YXIgaD1hLngsZj1hLnksZD1zLngscD1zLnksbT1sLngsZz1sLnkseT11Lngsdj11LnkseD12b2lkIDAsYj12b2lkIDAsdz12b2lkIDAsXz12b2lkIDAsVD12b2lkIDAsRT12b2lkIDAsTD12b2lkIDAsQz12b2lkIDAsQT12b2lkIDA7cmV0dXJuIHc9cC1mLFQ9aC1kLEw9ZCpmLWgqcCxfPXYtZyxFPW0teSxDPXkqZy1tKnYsQT13KkUtXypULEE9PT0wP251bGw6KHg9KFQqQy1FKkwpL0EsYj0oXypMLXcqQykvQSxuZXcgbih4LGIpKX0saS5hbmdsZU9mVmVjdG9yPWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPXZvaWQgMDtyZXR1cm4gYSE9PWw/KGg9TWF0aC5hdGFuKCh1LXMpLyhsLWEpKSxsPGE/aCs9TWF0aC5QSTp1PHMmJihoKz10aGlzLlRXT19QSSkpOnU8cz9oPXRoaXMuT05FX0FORF9IQUxGX1BJOmg9dGhpcy5IQUxGX1BJLGh9LGkuZG9JbnRlcnNlY3Q9ZnVuY3Rpb24oYSxzLGwsdSl7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9KGQtaCkqKHYtZyktKHktbSkqKHAtZik7aWYoeD09PTApcmV0dXJuITE7dmFyIGI9KCh2LWcpKih5LWgpKyhtLXkpKih2LWYpKS94LHc9KChmLXApKih5LWgpKyhkLWgpKih2LWYpKS94O3JldHVybiAwPGImJmI8MSYmMDx3JiZ3PDF9LGkuZmluZENpcmNsZUxpbmVJbnRlcnNlY3Rpb25zPWZ1bmN0aW9uKGEscyxsLHUsaCxmLGQpe3ZhciBwPShsLWEpKihsLWEpKyh1LXMpKih1LXMpLG09MiooKGEtaCkqKGwtYSkrKHMtZikqKHUtcykpLGc9KGEtaCkqKGEtaCkrKHMtZikqKHMtZiktZCpkLHk9bSptLTQqcCpnO2lmKHk+PTApe3ZhciB2PSgtbStNYXRoLnNxcnQobSptLTQqcCpnKSkvKDIqcCkseD0oLW0tTWF0aC5zcXJ0KG0qbS00KnAqZykpLygyKnApLGI9bnVsbDtyZXR1cm4gdj49MCYmdjw9MT9bdl06eD49MCYmeDw9MT9beF06Yn1lbHNlIHJldHVybiBudWxsfSxpLkhBTEZfUEk9LjUqTWF0aC5QSSxpLk9ORV9BTkRfSEFMRl9QST0xLjUqTWF0aC5QSSxpLlRXT19QST0yKk1hdGguUEksaS5USFJFRV9QST0zKk1hdGguUEksdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIklNYXRoIiksbi5zaWduPWZ1bmN0aW9uKGkpe3JldHVybiBpPjA/MTppPDA/LTE6MH0sbi5mbG9vcj1mdW5jdGlvbihpKXtyZXR1cm4gaTwwP01hdGguY2VpbChpKTpNYXRoLmZsb29yKGkpfSxuLmNlaWw9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmZsb29yKGkpOk1hdGguY2VpbChpKX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIkludGVnZXIiKSxuLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LG4uTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmLGQpe2Zvcih2YXIgcD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgbT1kW3BdO20uZW51bWVyYWJsZT1tLmVudW1lcmFibGV8fCExLG0uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBtJiYobS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsbS5rZXksbSl9fXJldHVybiBvKGgsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbihmLGQscCl7cmV0dXJuIGQmJmgoZi5wcm90b3R5cGUsZCkscCYmaChmLHApLGZ9fSgpO2Z1bmN0aW9uIGkoaCxmKXtpZighKGggaW5zdGFuY2VvZiBmKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPW8oZnVuY3Rpb24oZil7cmV0dXJue3ZhbHVlOmYsbmV4dDpudWxsLHByZXY6bnVsbH19LCJub2RlRnJvbSIpLHM9byhmdW5jdGlvbihmLGQscCxtKXtyZXR1cm4gZiE9PW51bGw/Zi5uZXh0PWQ6bS5oZWFkPWQscCE9PW51bGw/cC5wcmV2PWQ6bS50YWlsPWQsZC5wcmV2PWYsZC5uZXh0PXAsbS5sZW5ndGgrKyxkfSwiYWRkIiksbD1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi5wcmV2LG09Zi5uZXh0O3JldHVybiBwIT09bnVsbD9wLm5leHQ9bTpkLmhlYWQ9bSxtIT09bnVsbD9tLnByZXY9cDpkLnRhaWw9cCxmLnByZXY9Zi5uZXh0PW51bGwsZC5sZW5ndGgtLSxmfSwiX3JlbW92ZSIpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGYpe3ZhciBkPXRoaXM7aSh0aGlzLGgpLHRoaXMubGVuZ3RoPTAsdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsZj8uZm9yRWFjaChmdW5jdGlvbihwKXtyZXR1cm4gZC5wdXNoKHApfSl9cmV0dXJuIG8oaCwiTGlua2VkTGlzdCIpLG4oaCxbe2tleToic2l6ZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sInNpemUiKX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocC5wcmV2LGEoZCkscCx0aGlzKX0sImluc2VydEJlZm9yZSIpfSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsYShkKSxwLm5leHQsdGhpcyl9LCJpbnNlcnRBZnRlciIpfSx7a2V5OiJpbnNlcnROb2RlQmVmb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocC5wcmV2LGQscCx0aGlzKX0sImluc2VydE5vZGVCZWZvcmUiKX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocCxkLHAubmV4dCx0aGlzKX0sImluc2VydE5vZGVBZnRlciIpfSx7a2V5OiJwdXNoIix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKHRoaXMudGFpbCxhKGQpLG51bGwsdGhpcyl9LCJwdXNoIil9LHtrZXk6InVuc2hpZnQiLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIHMobnVsbCxhKGQpLHRoaXMuaGVhZCx0aGlzKX0sInVuc2hpZnQiKX0se2tleToicmVtb3ZlIix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBsKGQsdGhpcyl9LCJyZW1vdmUiKX0se2tleToicG9wIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpLnZhbHVlfSwicG9wIil9LHtrZXk6InBvcE5vZGUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLnRhaWwsdGhpcyl9LCJwb3BOb2RlIil9LHtrZXk6InNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5oZWFkLHRoaXMpLnZhbHVlfSwic2hpZnQiKX0se2tleToic2hpZnROb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5oZWFkLHRoaXMpfSwic2hpZnROb2RlIil9LHtrZXk6ImdldF9vYmplY3RfYXQiLHZhbHVlOm8oZnVuY3Rpb24oZCl7aWYoZDw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBwPTEsbT10aGlzLmhlYWQ7cDxkOyltPW0ubmV4dCxwKys7cmV0dXJuIG0udmFsdWV9fSwiZ2V0X29iamVjdF9hdCIpfSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7aWYoZDw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBtPTEsZz10aGlzLmhlYWQ7bTxkOylnPWcubmV4dCxtKys7Zy52YWx1ZT1wfX0sInNldF9vYmplY3RfYXQiKX1dKSxofSgpO3QuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhLHMpe3RoaXMueD1udWxsLHRoaXMueT1udWxsLGk9PW51bGwmJmE9PW51bGwmJnM9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKTp0eXBlb2YgaT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmcz09bnVsbD8odGhpcy54PWksdGhpcy55PWEpOmkuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbCYmKHM9aSx0aGlzLng9cy54LHRoaXMueT1zLnkpfW8obiwiUG9pbnQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxuLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihpLGEscyl7aS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZhPT1udWxsJiZzPT1udWxsPyhzPWksdGhpcy5zZXRMb2NhdGlvbihzLngscy55KSk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGwmJihwYXJzZUludChpKT09aSYmcGFyc2VJbnQoYSk9PWE/dGhpcy5tb3ZlKGksYSk6KHRoaXMueD1NYXRoLmZsb29yKGkrLjUpLHRoaXMueT1NYXRoLmZsb29yKGErLjUpKSl9LG4ucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oaSxhKXt0aGlzLng9aSx0aGlzLnk9YX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGksYSl7dGhpcy54Kz1pLHRoaXMueSs9YX0sbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGkpe2lmKGkuY29uc3RydWN0b3IubmFtZT09IlBvaW50Iil7dmFyIGE9aTtyZXR1cm4gdGhpcy54PT1hLngmJnRoaXMueT09YS55fXJldHVybiB0aGlzPT1pfSxuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBuZXcgbigpLmNvbnN0cnVjdG9yLm5hbWUrIlt4PSIrdGhpcy54KyIseT0iK3RoaXMueSsiXSJ9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhLHMsbCl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsaSE9bnVsbCYmYSE9bnVsbCYmcyE9bnVsbCYmbCE9bnVsbCYmKHRoaXMueD1pLHRoaXMueT1hLHRoaXMud2lkdGg9cyx0aGlzLmhlaWdodD1sKX1vKG4sIlJlY3RhbmdsZUQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oaSl7dGhpcy55PWl9LG4ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG4ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGkpe3RoaXMud2lkdGg9aX0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oaSl7dGhpcy5oZWlnaHQ9aX0sbi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oaSl7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8aS54fHx0aGlzLmdldEJvdHRvbSgpPGkueXx8aS5nZXRSaWdodCgpPHRoaXMueHx8aS5nZXRCb3R0b20oKTx0aGlzLnkpfSxuLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LG4ucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sbi5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sbi5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX07ZnVuY3Rpb24gaSgpe31vKGksIlVuaXF1ZUlER2VuZXJldG9yIiksaS5sYXN0SUQ9MCxpLmNyZWF0ZUlEPWZ1bmN0aW9uKGEpe3JldHVybiBpLmlzUHJpbWl0aXZlKGEpP2E6KGEudW5pcXVlSUQhPW51bGx8fChhLnVuaXF1ZUlEPWkuZ2V0U3RyaW5nKCksaS5sYXN0SUQrKyksYS51bmlxdWVJRCl9LGkuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsJiYoYT1pLmxhc3RJRCksIk9iamVjdCMiK2F9LGkuaXNQcmltaXRpdmU9ZnVuY3Rpb24oYSl7dmFyIHM9dHlwZW9mIGE+InUiPyJ1bmRlZmluZWQiOm4oYSk7cmV0dXJuIGE9PW51bGx8fHMhPSJvYmplY3QiJiZzIT0iZnVuY3Rpb24ifSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKG0pe2lmKEFycmF5LmlzQXJyYXkobSkpe2Zvcih2YXIgZz0wLHk9QXJyYXkobS5sZW5ndGgpO2c8bS5sZW5ndGg7ZysrKXlbZ109bVtnXTtyZXR1cm4geX1lbHNlIHJldHVybiBBcnJheS5mcm9tKG0pfW8obiwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGk9cigwKSxhPXIoNykscz1yKDMpLGw9cigxKSx1PXIoNiksaD1yKDUpLGY9cigxNyksZD1yKDI5KTtmdW5jdGlvbiBwKG0pe2QuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWkuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgYSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLG0hPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPW0pfW8ocCwiTGF5b3V0IikscC5SQU5ET01fU0VFRD0xLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKX0scC5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKX0scC5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKX0scC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIG09bmV3IGEodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPW0sbX0scC5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyB1KG51bGwsdGhpcy5ncmFwaE1hbmFnZXIsbSl9LHAucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBzKHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgbChudWxsLG51bGwsbSl9LHAucHJvdG90eXBlLmNoZWNrTGF5b3V0U3VjY2Vzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk9PW51bGx8fHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLmxlbmd0aD09MHx8dGhpcy5ncmFwaE1hbmFnZXIuaW5jbHVkZXNJbnZhbGlkRWRnZSgpfSxwLnByb3RvdHlwZS5ydW5MYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy50aWxpbmdQcmVMYXlvdXQmJnRoaXMudGlsaW5nUHJlTGF5b3V0KCksdGhpcy5pbml0UGFyYW1ldGVycygpO3ZhciBtO3JldHVybiB0aGlzLmNoZWNrTGF5b3V0U3VjY2VzcygpP209ITE6bT10aGlzLmxheW91dCgpLGkuQU5JTUFURT09PSJkdXJpbmciPyExOihtJiYodGhpcy5pc1N1YkxheW91dHx8dGhpcy5kb1Bvc3RMYXlvdXQoKSksdGhpcy50aWxpbmdQb3N0TGF5b3V0JiZ0aGlzLnRpbGluZ1Bvc3RMYXlvdXQoKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITAsbSl9LHAucHJvdG90eXBlLmRvUG9zdExheW91dD1mdW5jdGlvbigpe3RoaXMuaW5jcmVtZW50YWx8fHRoaXMudHJhbnNmb3JtKCksdGhpcy51cGRhdGUoKX0scC5wcm90b3R5cGUudXBkYXRlMj1mdW5jdGlvbigpe2lmKHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSwhdGhpcy5pc1JlbW90ZVVzZSl7Zm9yKHZhciBtLGc9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSx5PTA7eTxnLmxlbmd0aDt5KyspbT1nW3ldO2Zvcih2YXIgdix4PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLHk9MDt5PHgubGVuZ3RoO3krKyl2PXhbeV07dGhpcy51cGRhdGUodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKX19LHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMudXBkYXRlMigpO2Vsc2UgaWYobSBpbnN0YW5jZW9mIHMpe3ZhciBnPW07aWYoZy5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgeT1nLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSx2PTA7djx5Lmxlbmd0aDt2KyspdXBkYXRlKHlbdl0pO2lmKGcudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgeD1nLnZHcmFwaE9iamVjdDt4LnVwZGF0ZShnKX19ZWxzZSBpZihtIGluc3RhbmNlb2YgbCl7dmFyIGI9bTtpZihiLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHc9Yi52R3JhcGhPYmplY3Q7dy51cGRhdGUoYil9fWVsc2UgaWYobSBpbnN0YW5jZW9mIHUpe3ZhciBfPW07aWYoXy52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBUPV8udkdyYXBoT2JqZWN0O1QudXBkYXRlKF8pfX19LHAucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dGhpcy5pc1N1YkxheW91dHx8KHRoaXMubGF5b3V0UXVhbGl0eT1pLlFVQUxJVFksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWkuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWkuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9aS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTKSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmKHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9ITEpfSxwLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnRyYW5zZm9ybShuZXcgaCgwLDApKTtlbHNle3ZhciBnPW5ldyBmLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZih5IT1udWxsKXtnLnNldFdvcmxkT3JnWChtLngpLGcuc2V0V29ybGRPcmdZKG0ueSksZy5zZXREZXZpY2VPcmdYKHkueCksZy5zZXREZXZpY2VPcmdZKHkueSk7Zm9yKHZhciB2PXRoaXMuZ2V0QWxsTm9kZXMoKSx4LGI9MDtiPHYubGVuZ3RoO2IrKyl4PXZbYl0seC50cmFuc2Zvcm0oZyl9fX0scC5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGcseSx2PW0uZ2V0Tm9kZXMoKSx4PTA7eDx2Lmxlbmd0aDt4KyspZz12W3hdLHk9Zy5nZXRDaGlsZCgpLHk9PW51bGx8fHkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/Zy5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHkpLGcudXBkYXRlQm91bmRzKCkpfSxwLnByb3RvdHlwZS5nZXRGbGF0Rm9yZXN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBtPVtdLGc9ITAseT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx2PSEwLHg9MDt4PHkubGVuZ3RoO3grKyl5W3hdLmdldENoaWxkKCkhPW51bGwmJih2PSExKTtpZighdilyZXR1cm4gbTt2YXIgYj1uZXcgU2V0LHc9W10sXz1uZXcgTWFwLFQ9W107Zm9yKFQ9VC5jb25jYXQoeSk7VC5sZW5ndGg+MCYmZzspe2Zvcih3LnB1c2goVFswXSk7dy5sZW5ndGg+MCYmZzspe3ZhciBFPXdbMF07dy5zcGxpY2UoMCwxKSxiLmFkZChFKTtmb3IodmFyIEw9RS5nZXRFZGdlcygpLHg9MDt4PEwubGVuZ3RoO3grKyl7dmFyIEM9TFt4XS5nZXRPdGhlckVuZChFKTtpZihfLmdldChFKSE9QylpZighYi5oYXMoQykpdy5wdXNoKEMpLF8uc2V0KEMsRSk7ZWxzZXtnPSExO2JyZWFrfX19aWYoIWcpbT1bXTtlbHNle3ZhciBBPVtdLmNvbmNhdChuKGIpKTttLnB1c2goQSk7Zm9yKHZhciB4PTA7eDxBLmxlbmd0aDt4Kyspe3ZhciBJPUFbeF0sRD1ULmluZGV4T2YoSSk7RD4tMSYmVC5zcGxpY2UoRCwxKX1iPW5ldyBTZXQsXz1uZXcgTWFwfX1yZXR1cm4gbX0scC5wcm90b3R5cGUuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHM9ZnVuY3Rpb24obSl7Zm9yKHZhciBnPVtdLHk9bS5zb3VyY2Usdj10aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IobS5zb3VyY2UsbS50YXJnZXQpLHg9MDt4PG0uYmVuZHBvaW50cy5sZW5ndGg7eCsrKXt2YXIgYj10aGlzLm5ld05vZGUobnVsbCk7Yi5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksdi5hZGQoYik7dmFyIHc9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh3LHksYiksZy5hZGQoYikseT1ifXZhciB3PXRoaXMubmV3RWRnZShudWxsKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuYWRkKHcseSxtLnRhcmdldCksdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChtLGcpLG0uaXNJbnRlckdyYXBoKCk/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKG0pOnYucmVtb3ZlKG0pLGd9LHAucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2Rlcz1mdW5jdGlvbigpe3ZhciBtPVtdO209bS5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSksbT1bXS5jb25jYXQobih0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KG0pO2Zvcih2YXIgZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddO2lmKHkuYmVuZHBvaW50cy5sZW5ndGg+MCl7Zm9yKHZhciB2PXRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5nZXQoeSkseD0wO3g8di5sZW5ndGg7eCsrKXt2YXIgYj12W3hdLHc9bmV3IGgoYi5nZXRDZW50ZXJYKCksYi5nZXRDZW50ZXJZKCkpLF89eS5iZW5kcG9pbnRzLmdldCh4KTtfLng9dy54LF8ueT13LnksYi5nZXRPd25lcigpLnJlbW92ZShiKX10aGlzLmdyYXBoTWFuYWdlci5hZGQoeSx5LnNvdXJjZSx5LnRhcmdldCl9fX0scC50cmFuc2Zvcm09ZnVuY3Rpb24obSxnLHksdil7aWYoeSE9bnVsbCYmdiE9bnVsbCl7dmFyIHg9ZztpZihtPD01MCl7dmFyIGI9Zy95O3gtPShnLWIpLzUwKig1MC1tKX1lbHNle3ZhciB3PWcqdjt4Kz0ody1nKS81MCoobS01MCl9cmV0dXJuIHh9ZWxzZXt2YXIgXyxUO3JldHVybiBtPD01MD8oXz05KmcvNTAwLFQ9Zy8xMCk6KF89OSpnLzUwLFQ9LTgqZyksXyptK1R9fSxwLmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24obSl7dmFyIGc9W107Zz1nLmNvbmNhdChtKTt2YXIgeT1bXSx2PW5ldyBNYXAseD0hMSxiPW51bGw7KGcubGVuZ3RoPT0xfHxnLmxlbmd0aD09MikmJih4PSEwLGI9Z1swXSk7Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDt3Kyspe3ZhciBfPWdbd10sVD1fLmdldE5laWdoYm9yc0xpc3QoKS5zaXplO3Yuc2V0KF8sXy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksVD09MSYmeS5wdXNoKF8pfXZhciBFPVtdO2ZvcihFPUUuY29uY2F0KHkpOyF4Oyl7dmFyIEw9W107TD1MLmNvbmNhdChFKSxFPVtdO2Zvcih2YXIgdz0wO3c8Zy5sZW5ndGg7dysrKXt2YXIgXz1nW3ddLEM9Zy5pbmRleE9mKF8pO0M+PTAmJmcuc3BsaWNlKEMsMSk7dmFyIEE9Xy5nZXROZWlnaGJvcnNMaXN0KCk7QS5mb3JFYWNoKGZ1bmN0aW9uKGspe2lmKHkuaW5kZXhPZihrKTwwKXt2YXIgUj12LmdldChrKSxTPVItMTtTPT0xJiZFLnB1c2goayksdi5zZXQoayxTKX19KX15PXkuY29uY2F0KEUpLChnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pfXJldHVybiBifSxwLnByb3RvdHlwZS5zZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24obSl7dGhpcy5ncmFwaE1hbmFnZXI9bX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIlJhbmRvbVNlZWQiKSxuLnNlZWQ9MSxuLng9MCxuLm5leHREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gbi54PU1hdGguc2luKG4uc2VlZCsrKSoxZTQsbi54LU1hdGguZmxvb3Iobi54KX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1KTtmdW5jdGlvbiBpKGEscyl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfW8oaSwiVHJhbnNmb3JtIiksaS5wcm90b3R5cGUuZ2V0V29ybGRPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWH0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWD1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdZfSxpLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRPcmdZPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFh9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFg9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WX0saS5wcm90b3R5cGUuc2V0V29ybGRFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkRXh0WT1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1h9LGkucHJvdG90eXBlLnNldERldmljZU9yZ1g9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlT3JnWD1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1l9LGkucHJvdG90eXBlLnNldERldmljZU9yZ1k9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlT3JnWT1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFh9LGkucHJvdG90eXBlLnNldERldmljZUV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlRXh0WD1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFl9LGkucHJvdG90eXBlLnNldERldmljZUV4dFk9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlRXh0WT1hfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFg7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1grKGEtdGhpcy5sd29ybGRPcmdYKSp0aGlzLmxkZXZpY2VFeHRYL2wpLHN9LGkucHJvdG90eXBlLnRyYW5zZm9ybVk9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubHdvcmxkRXh0WTtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sZGV2aWNlT3JnWSsoYS10aGlzLmx3b3JsZE9yZ1kpKnRoaXMubGRldmljZUV4dFkvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVg9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubGRldmljZUV4dFg7cmV0dXJuIGwhPTAmJihzPXRoaXMubHdvcmxkT3JnWCsoYS10aGlzLmxkZXZpY2VPcmdYKSp0aGlzLmx3b3JsZEV4dFgvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVk9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubGRldmljZUV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubHdvcmxkT3JnWSsoYS10aGlzLmxkZXZpY2VPcmdZKSp0aGlzLmx3b3JsZEV4dFkvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVBvaW50PWZ1bmN0aW9uKGEpe3ZhciBzPW5ldyBuKHRoaXMuaW52ZXJzZVRyYW5zZm9ybVgoYS54KSx0aGlzLmludmVyc2VUcmFuc2Zvcm1ZKGEueSkpO3JldHVybiBzfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGQpe2lmKEFycmF5LmlzQXJyYXkoZCkpe2Zvcih2YXIgcD0wLG09QXJyYXkoZC5sZW5ndGgpO3A8ZC5sZW5ndGg7cCsrKW1bcF09ZFtwXTtyZXR1cm4gbX1lbHNlIHJldHVybiBBcnJheS5mcm9tKGQpfW8obiwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGk9cigxNSksYT1yKDQpLHM9cigwKSxsPXIoOCksdT1yKDkpO2Z1bmN0aW9uIGgoKXtpLmNhbGwodGhpcyksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPWEuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5ncmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1hLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqYS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLmNvb2xpbmdGYWN0b3I9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5tYXhJdGVyYXRpb25zPWEuTUFYX0lURVJBVElPTlN9byhoLCJGRExheW91dCIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiBpKWhbZl09aVtmXTtoLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2kucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9YS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxoLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwLG0sZyx5LHYseCxiPXRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0QWxsRWRnZXMoKSx3PTA7dzxiLmxlbmd0aDt3KyspZD1iW3ddLHA9ZC5pZGVhbExlbmd0aCxkLmlzSW50ZXJHcmFwaCYmKGc9ZC5nZXRTb3VyY2UoKSx5PWQuZ2V0VGFyZ2V0KCksdj1kLmdldFNvdXJjZUluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHg9ZC5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihkLmlkZWFsTGVuZ3RoKz12K3gtMipzLlNJTVBMRV9OT0RFX1NJWkUpLG09ZC5nZXRMY2EoKS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKSxkLmlkZWFsTGVuZ3RoKz1wKmEuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiooZy5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKSt5LmdldEluY2x1c2lvblRyZWVEZXB0aCgpLTIqbSkpfSxoLnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoO3RoaXMuaW5jcmVtZW50YWw/KGQ+YS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQmJih0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5jb29saW5nRmFjdG9yKmEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUix0aGlzLmNvb2xpbmdGYWN0b3ItKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqdGhpcy5jb29saW5nRmFjdG9yKigxLWEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpKSx0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQ9YS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwpOihkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUP3RoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heChhLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsMS0oZC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKGEuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKTp0aGlzLmNvb2xpbmdGYWN0b3I9MSx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPXRoaXMuY29vbGluZ0ZhY3Rvcix0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQ9YS5NQVhfTk9ERV9ESVNQTEFDRU1FTlQpLHRoaXMubWF4SXRlcmF0aW9ucz1NYXRoLm1heCh0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoKjUsdGhpcy5tYXhJdGVyYXRpb25zKSx0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGU9MyphLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAwLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxoLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0sdGhpcy5jYWxjU3ByaW5nRm9yY2UocCxwLmlkZWFsTGVuZ3RoKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxwPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxtLGcseSx2LHg9dGhpcy5nZXRBbGxOb2RlcygpLGI7aWYodGhpcy51c2VGUkdyaWRWYXJpYW50KWZvcih0aGlzLnRvdGFsSXRlcmF0aW9ucyVhLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZkJiZ0aGlzLnVwZGF0ZUdyaWQoKSxiPW5ldyBTZXQsbT0wO208eC5sZW5ndGg7bSsrKXk9eFttXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZSh5LGIsZCxwKSxiLmFkZCh5KTtlbHNlIGZvcihtPTA7bTx4Lmxlbmd0aDttKyspZm9yKHk9eFttXSxnPW0rMTtnPHgubGVuZ3RoO2crKyl2PXhbZ10seS5nZXRPd25lcigpPT12LmdldE93bmVyKCkmJnRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKHksdil9LGgucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHA9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLG09MDttPHAubGVuZ3RoO20rKylkPXBbbV0sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKGQpfSxoLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLHAsbT0wO208ZC5sZW5ndGg7bSsrKXA9ZFttXSxwLm1vdmUoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRTb3VyY2UoKSxnPWQuZ2V0VGFyZ2V0KCkseSx2LHgsYjtpZih0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzJiZtLmdldENoaWxkKCk9PW51bGwmJmcuZ2V0Q2hpbGQoKT09bnVsbClkLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoZC51cGRhdGVMZW5ndGgoKSxkLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47eT1kLmdldExlbmd0aCgpLHkhPTAmJih2PWQuZWRnZUVsYXN0aWNpdHkqKHktcCkseD12KihkLmxlbmd0aFgveSksYj12KihkLmxlbmd0aFkveSksbS5zcHJpbmdGb3JjZVgrPXgsbS5zcHJpbmdGb3JjZVkrPWIsZy5zcHJpbmdGb3JjZVgtPXgsZy5zcHJpbmdGb3JjZVktPWIpfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2U9ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmdldFJlY3QoKSxnPXAuZ2V0UmVjdCgpLHk9bmV3IEFycmF5KDIpLHY9bmV3IEFycmF5KDQpLHgsYix3LF8sVCxFLEw7aWYobS5pbnRlcnNlY3RzKGcpKXtsLmNhbGNTZXBhcmF0aW9uQW1vdW50KG0sZyx5LGEuREVGQVVMVF9FREdFX0xFTkdUSC8yKSxFPTIqeVswXSxMPTIqeVsxXTt2YXIgQz1kLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi8oZC5ub09mQ2hpbGRyZW4rcC5ub09mQ2hpbGRyZW4pO2QucmVwdWxzaW9uRm9yY2VYLT1DKkUsZC5yZXB1bHNpb25Gb3JjZVktPUMqTCxwLnJlcHVsc2lvbkZvcmNlWCs9QypFLHAucmVwdWxzaW9uRm9yY2VZKz1DKkx9ZWxzZSB0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzJiZkLmdldENoaWxkKCk9PW51bGwmJnAuZ2V0Q2hpbGQoKT09bnVsbD8oeD1nLmdldENlbnRlclgoKS1tLmdldENlbnRlclgoKSxiPWcuZ2V0Q2VudGVyWSgpLW0uZ2V0Q2VudGVyWSgpKToobC5nZXRJbnRlcnNlY3Rpb24obSxnLHYpLHg9dlsyXS12WzBdLGI9dlszXS12WzFdKSxNYXRoLmFicyh4KTxhLk1JTl9SRVBVTFNJT05fRElTVCYmKHg9dS5zaWduKHgpKmEuTUlOX1JFUFVMU0lPTl9ESVNUKSxNYXRoLmFicyhiKTxhLk1JTl9SRVBVTFNJT05fRElTVCYmKGI9dS5zaWduKGIpKmEuTUlOX1JFUFVMU0lPTl9ESVNUKSx3PXgqeCtiKmIsXz1NYXRoLnNxcnQodyksVD0oZC5ub2RlUmVwdWxzaW9uLzIrcC5ub2RlUmVwdWxzaW9uLzIpKmQubm9PZkNoaWxkcmVuKnAubm9PZkNoaWxkcmVuL3csRT1UKngvXyxMPVQqYi9fLGQucmVwdWxzaW9uRm9yY2VYLT1FLGQucmVwdWxzaW9uRm9yY2VZLT1MLHAucmVwdWxzaW9uRm9yY2VYKz1FLHAucmVwdWxzaW9uRm9yY2VZKz1MfSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlPWZ1bmN0aW9uKGQpe3ZhciBwLG0sZyx5LHYseCxiLHc7cD1kLmdldE93bmVyKCksbT0ocC5nZXRSaWdodCgpK3AuZ2V0TGVmdCgpKS8yLGc9KHAuZ2V0VG9wKCkrcC5nZXRCb3R0b20oKSkvMix5PWQuZ2V0Q2VudGVyWCgpLW0sdj1kLmdldENlbnRlclkoKS1nLHg9TWF0aC5hYnMoeSkrZC5nZXRXaWR0aCgpLzIsYj1NYXRoLmFicyh2KStkLmdldEhlaWdodCgpLzIsZC5nZXRPd25lcigpPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/KHc9cC5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3IsKHg+d3x8Yj53KSYmKGQuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnksZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdikpOih3PXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKHg+d3x8Yj53KSYmKGQuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnkqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCxkLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCp2KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0saC5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgZCxwPSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKHA9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxkPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsZHx8cH0saC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0saC5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHA9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLGQubm9PZkNoaWxkcmVuPWQuZ2V0Tm9PZkNoaWxkcmVuKCl9LGgucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKGQpe3ZhciBwPTAsbT0wO3A9cGFyc2VJbnQoTWF0aC5jZWlsKChkLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxtPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBnPW5ldyBBcnJheShwKSx5PTA7eTxwO3krKylnW3ldPW5ldyBBcnJheShtKTtmb3IodmFyIHk9MDt5PHA7eSsrKWZvcih2YXIgdj0wO3Y8bTt2KyspZ1t5XVt2XT1uZXcgQXJyYXk7cmV0dXJuIGd9LGgucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQ9ZnVuY3Rpb24oZCxwLG0pe3ZhciBnPTAseT0wLHY9MCx4PTA7Zz1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx5PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLndpZHRoK2QuZ2V0UmVjdCgpLngtcCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHY9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueS1tKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseD1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS5oZWlnaHQrZC5nZXRSZWN0KCkueS1tKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBiPWc7Yjw9eTtiKyspZm9yKHZhciB3PXY7dzw9eDt3KyspdGhpcy5ncmlkW2JdW3ddLnB1c2goZCksZC5zZXRHcmlkQ29vcmRpbmF0ZXMoZyx5LHYseCl9LGgucHJvdG90eXBlLnVwZGF0ZUdyaWQ9ZnVuY3Rpb24oKXt2YXIgZCxwLG09dGhpcy5nZXRBbGxOb2RlcygpO2Zvcih0aGlzLmdyaWQ9dGhpcy5jYWxjR3JpZCh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpLGQ9MDtkPG0ubGVuZ3RoO2QrKylwPW1bZF0sdGhpcy5hZGROb2RlVG9HcmlkKHAsdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldExlZnQoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0VG9wKCkpfSxoLnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGU9ZnVuY3Rpb24oZCxwLG0sZyl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmbXx8Zyl7dmFyIHk9bmV3IFNldDtkLnN1cnJvdW5kaW5nPW5ldyBBcnJheTtmb3IodmFyIHYseD10aGlzLmdyaWQsYj1kLnN0YXJ0WC0xO2I8ZC5maW5pc2hYKzI7YisrKWZvcih2YXIgdz1kLnN0YXJ0WS0xO3c8ZC5maW5pc2hZKzI7dysrKWlmKCEoYjwwfHx3PDB8fGI+PXgubGVuZ3RofHx3Pj14WzBdLmxlbmd0aCkpe2Zvcih2YXIgXz0wO188eFtiXVt3XS5sZW5ndGg7XysrKWlmKHY9eFtiXVt3XVtfXSwhKGQuZ2V0T3duZXIoKSE9di5nZXRPd25lcigpfHxkPT12KSYmIXAuaGFzKHYpJiYheS5oYXModikpe3ZhciBUPU1hdGguYWJzKGQuZ2V0Q2VudGVyWCgpLXYuZ2V0Q2VudGVyWCgpKS0oZC5nZXRXaWR0aCgpLzIrdi5nZXRXaWR0aCgpLzIpLEU9TWF0aC5hYnMoZC5nZXRDZW50ZXJZKCktdi5nZXRDZW50ZXJZKCkpLShkLmdldEhlaWdodCgpLzIrdi5nZXRIZWlnaHQoKS8yKTtUPD10aGlzLnJlcHVsc2lvblJhbmdlJiZFPD10aGlzLnJlcHVsc2lvblJhbmdlJiZ5LmFkZCh2KX19ZC5zdXJyb3VuZGluZz1bXS5jb25jYXQobih5KSl9Zm9yKGI9MDtiPGQuc3Vycm91bmRpbmcubGVuZ3RoO2IrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShkLGQuc3Vycm91bmRpbmdbYl0pfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5leHBvcnRzPWh9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKSxpPXIoNCk7ZnVuY3Rpb24gYShsLHUsaCl7bi5jYWxsKHRoaXMsbCx1LGgpLHRoaXMuaWRlYWxMZW5ndGg9aS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMuZWRnZUVsYXN0aWNpdHk9aS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSH1vKGEsIkZETGF5b3V0RWRnZSIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBuKWFbc109bltzXTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMpLGk9cig0KTtmdW5jdGlvbiBhKGwsdSxoLGYpe24uY2FsbCh0aGlzLGwsdSxoLGYpLHRoaXMubm9kZVJlcHVsc2lvbj1pLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MCx0aGlzLnN0YXJ0WD0wLHRoaXMuZmluaXNoWD0wLHRoaXMuc3RhcnRZPTAsdGhpcy5maW5pc2hZPTAsdGhpcy5zdXJyb3VuZGluZz1bXX1vKGEsIkZETGF5b3V0Tm9kZSIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBuKWFbc109bltzXTthLnByb3RvdHlwZS5zZXRHcmlkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24obCx1LGgsZil7dGhpcy5zdGFydFg9bCx0aGlzLmZpbmlzaFg9dSx0aGlzLnN0YXJ0WT1oLHRoaXMuZmluaXNoWT1mfSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSl7dGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsaSE9PW51bGwmJmEhPT1udWxsJiYodGhpcy5oZWlnaHQ9YSx0aGlzLndpZHRoPWkpfW8obiwiRGltZW5zaW9uRCIpLG4ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG4ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGkpe3RoaXMud2lkdGg9aX0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oaSl7dGhpcy5oZWlnaHQ9aX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNCk7ZnVuY3Rpb24gaSgpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1vKGksIkhhc2hNYXAiKSxpLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1uLmNyZWF0ZUlEKGEpO3RoaXMuY29udGFpbnMobCl8fCh0aGlzLm1hcFtsXT1zLHRoaXMua2V5cy5wdXNoKGEpKX0saS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbYV0hPW51bGx9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3JldHVybiB0aGlzLm1hcFtzXX0saS5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNCk7ZnVuY3Rpb24gaSgpe3RoaXMuc2V0PXt9fW8oaSwiSGFzaFNldCIpLGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3RoaXMuY29udGFpbnMocyl8fCh0aGlzLnNldFtzXT1hKX0saS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXX0saS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNldD17fX0saS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0W24uY3JlYXRlSUQoYSldPT1hfSxpLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpPT09MH0saS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldCkubGVuZ3RofSxpLnByb3RvdHlwZS5hZGRBbGxUbz1mdW5jdGlvbihhKXtmb3IodmFyIHM9T2JqZWN0LmtleXModGhpcy5zZXQpLGw9cy5sZW5ndGgsdT0wO3U8bDt1KyspYS5wdXNoKHRoaXMuc2V0W3NbdV1dKX0saS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldCkubGVuZ3RofSxpLnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgdT1hW2xdO3RoaXMuYWRkKHUpfX0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIk1hdHJpeCIpLG4ubXVsdE1hdD1mdW5jdGlvbihpLGEpe2Zvcih2YXIgcz1bXSxsPTA7bDxpLmxlbmd0aDtsKyspe3NbbF09W107Zm9yKHZhciB1PTA7dTxhWzBdLmxlbmd0aDt1Kyspe3NbbF1bdV09MDtmb3IodmFyIGg9MDtoPGlbMF0ubGVuZ3RoO2grKylzW2xdW3VdKz1pW2xdW2hdKmFbaF1bdV19fXJldHVybiBzfSxuLnRyYW5zcG9zZT1mdW5jdGlvbihpKXtmb3IodmFyIGE9W10scz0wO3M8aVswXS5sZW5ndGg7cysrKXthW3NdPVtdO2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKWFbc11bbF09aVtsXVtzXX1yZXR1cm4gYX0sbi5tdWx0Q29ucz1mdW5jdGlvbihpLGEpe2Zvcih2YXIgcz1bXSxsPTA7bDxpLmxlbmd0aDtsKyspc1tsXT1pW2xdKmE7cmV0dXJuIHN9LG4ubWludXNPcD1mdW5jdGlvbihpLGEpe2Zvcih2YXIgcz1bXSxsPTA7bDxpLmxlbmd0aDtsKyspc1tsXT1pW2xdLWFbbF07cmV0dXJuIHN9LG4uZG90UHJvZHVjdD1mdW5jdGlvbihpLGEpe2Zvcih2YXIgcz0wLGw9MDtsPGkubGVuZ3RoO2wrKylzKz1pW2xdKmFbbF07cmV0dXJuIHN9LG4ubWFnPWZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kb3RQcm9kdWN0KGksaSkpfSxuLm5vcm1hbGl6ZT1mdW5jdGlvbihpKXtmb3IodmFyIGE9W10scz10aGlzLm1hZyhpKSxsPTA7bDxpLmxlbmd0aDtsKyspYVtsXT1pW2xdL3M7cmV0dXJuIGF9LG4ubXVsdEdhbW1hPWZ1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXSxzPTAsbD0wO2w8aS5sZW5ndGg7bCsrKXMrPWlbbF07cyo9LTEvaS5sZW5ndGg7Zm9yKHZhciB1PTA7dTxpLmxlbmd0aDt1KyspYVt1XT1zK2lbdV07cmV0dXJuIGF9LG4ubXVsdEw9ZnVuY3Rpb24oaSxhLHMpe2Zvcih2YXIgbD1bXSx1PVtdLGg9W10sZj0wO2Y8YVswXS5sZW5ndGg7ZisrKXtmb3IodmFyIGQ9MCxwPTA7cDxhLmxlbmd0aDtwKyspZCs9LS41KmFbcF1bZl0qaVtwXTt1W2ZdPWR9Zm9yKHZhciBtPTA7bTxzLmxlbmd0aDttKyspe2Zvcih2YXIgZz0wLHk9MDt5PHMubGVuZ3RoO3krKylnKz1zW21dW3ldKnVbeV07aFttXT1nfWZvcih2YXIgdj0wO3Y8YS5sZW5ndGg7disrKXtmb3IodmFyIHg9MCxiPTA7YjxhWzBdLmxlbmd0aDtiKyspeCs9YVt2XVtiXSpoW2JdO2xbdl09eH1yZXR1cm4gbH0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl07ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLmtleSxkKX19cmV0dXJuIG8obCwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaCYmbCh1LnByb3RvdHlwZSxoKSxmJiZsKHUsZiksdX19KCk7ZnVuY3Rpb24gaShsLHUpe2lmKCEobCBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9cigxMSkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwodSxoKXtpKHRoaXMsbCksKGghPT1udWxsfHxoIT09dm9pZCAwKSYmKHRoaXMuY29tcGFyZUZ1bmN0aW9uPXRoaXMuX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24pO3ZhciBmPXZvaWQgMDt1IGluc3RhbmNlb2YgYT9mPXUuc2l6ZSgpOmY9dS5sZW5ndGgsdGhpcy5fcXVpY2tzb3J0KHUsMCxmLTEpfXJldHVybiBvKGwsIlF1aWNrc29ydCIpLG4obCxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7aWYoZjxkKXt2YXIgcD10aGlzLl9wYXJ0aXRpb24oaCxmLGQpO3RoaXMuX3F1aWNrc29ydChoLGYscCksdGhpcy5fcXVpY2tzb3J0KGgscCsxLGQpfX0sIl9xdWlja3NvcnQiKX0se2tleToiX3BhcnRpdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7Zm9yKHZhciBwPXRoaXMuX2dldChoLGYpLG09ZixnPWQ7Oyl7Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbihwLHRoaXMuX2dldChoLGcpKTspZy0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KGgsbSkscCk7KW0rKztpZihtPGcpdGhpcy5fc3dhcChoLG0sZyksbSsrLGctLTtlbHNlIHJldHVybiBnfX0sIl9wYXJ0aXRpb24iKX0se2tleToiX2dldCIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBoIGluc3RhbmNlb2YgYT9oLmdldF9vYmplY3RfYXQoZik6aFtmXX0sIl9nZXQiKX0se2tleToiX3NldCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7aCBpbnN0YW5jZW9mIGE/aC5zZXRfb2JqZWN0X2F0KGYsZCk6aFtmXT1kfSwiX3NldCIpfSx7a2V5OiJfc3dhcCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7dmFyIHA9dGhpcy5fZ2V0KGgsZik7dGhpcy5fc2V0KGgsZix0aGlzLl9nZXQoaCxkKSksdGhpcy5fc2V0KGgsZCxwKX0sIl9zd2FwIil9LHtrZXk6Il9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZil7cmV0dXJuIGY+aH0sIl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIil9XSksbH0oKTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiU1ZEIiksbi5zdmQ9ZnVuY3Rpb24oaSl7dGhpcy5VPW51bGwsdGhpcy5WPW51bGwsdGhpcy5zPW51bGwsdGhpcy5tPTAsdGhpcy5uPTAsdGhpcy5tPWkubGVuZ3RoLHRoaXMubj1pWzBdLmxlbmd0aDt2YXIgYT1NYXRoLm1pbih0aGlzLm0sdGhpcy5uKTt0aGlzLnM9ZnVuY3Rpb24oZHQpe2Zvcih2YXIgWGU9W107ZHQtLSA+MDspWGUucHVzaCgwKTtyZXR1cm4gWGV9KE1hdGgubWluKHRoaXMubSsxLHRoaXMubikpLHRoaXMuVT1mdW5jdGlvbihkdCl7dmFyIFhlPW8oZnVuY3Rpb24gY3QoTHQpe2lmKEx0Lmxlbmd0aD09MClyZXR1cm4gMDtmb3IodmFyIFJ0PVtdLHp0PTA7enQ8THRbMF07enQrKylSdC5wdXNoKGN0KEx0LnNsaWNlKDEpKSk7cmV0dXJuIFJ0fSwiYWxsb2NhdGUiKTtyZXR1cm4gWGUoZHQpfShbdGhpcy5tLGFdKSx0aGlzLlY9ZnVuY3Rpb24oZHQpe3ZhciBYZT1vKGZ1bmN0aW9uIGN0KEx0KXtpZihMdC5sZW5ndGg9PTApcmV0dXJuIDA7Zm9yKHZhciBSdD1bXSx6dD0wO3p0PEx0WzBdO3p0KyspUnQucHVzaChjdChMdC5zbGljZSgxKSkpO3JldHVybiBSdH0sImFsbG9jYXRlIik7cmV0dXJuIFhlKGR0KX0oW3RoaXMubix0aGlzLm5dKTtmb3IodmFyIHM9ZnVuY3Rpb24oZHQpe2Zvcih2YXIgWGU9W107ZHQtLSA+MDspWGUucHVzaCgwKTtyZXR1cm4gWGV9KHRoaXMubiksbD1mdW5jdGlvbihkdCl7Zm9yKHZhciBYZT1bXTtkdC0tID4wOylYZS5wdXNoKDApO3JldHVybiBYZX0odGhpcy5tKSx1PSEwLGg9ITAsZj1NYXRoLm1pbih0aGlzLm0tMSx0aGlzLm4pLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLm4tMix0aGlzLm0pKSxwPTA7cDxNYXRoLm1heChmLGQpO3ArKyl7aWYocDxmKXt0aGlzLnNbcF09MDtmb3IodmFyIG09cDttPHRoaXMubTttKyspdGhpcy5zW3BdPW4uaHlwb3QodGhpcy5zW3BdLGlbbV1bcF0pO2lmKHRoaXMuc1twXSE9PTApe2lbcF1bcF08MCYmKHRoaXMuc1twXT0tdGhpcy5zW3BdKTtmb3IodmFyIGc9cDtnPHRoaXMubTtnKyspaVtnXVtwXS89dGhpcy5zW3BdO2lbcF1bcF0rPTF9dGhpcy5zW3BdPS10aGlzLnNbcF19Zm9yKHZhciB5PXArMTt5PHRoaXMubjt5Kyspe2lmKGZ1bmN0aW9uKGR0LFhlKXtyZXR1cm4gZHQmJlhlfShwPGYsdGhpcy5zW3BdIT09MCkpe2Zvcih2YXIgdj0wLHg9cDt4PHRoaXMubTt4Kyspdis9aVt4XVtwXSppW3hdW3ldO3Y9LXYvaVtwXVtwXTtmb3IodmFyIGI9cDtiPHRoaXMubTtiKyspaVtiXVt5XSs9dippW2JdW3BdfXNbeV09aVtwXVt5XX1pZihmdW5jdGlvbihkdCxYZSl7cmV0dXJuIGR0JiZYZX0odSxwPGYpKWZvcih2YXIgdz1wO3c8dGhpcy5tO3crKyl0aGlzLlVbd11bcF09aVt3XVtwXTtpZihwPGQpe3NbcF09MDtmb3IodmFyIF89cCsxO188dGhpcy5uO18rKylzW3BdPW4uaHlwb3Qoc1twXSxzW19dKTtpZihzW3BdIT09MCl7c1twKzFdPDAmJihzW3BdPS1zW3BdKTtmb3IodmFyIFQ9cCsxO1Q8dGhpcy5uO1QrKylzW1RdLz1zW3BdO3NbcCsxXSs9MX1pZihzW3BdPS1zW3BdLGZ1bmN0aW9uKGR0LFhlKXtyZXR1cm4gZHQmJlhlfShwKzE8dGhpcy5tLHNbcF0hPT0wKSl7Zm9yKHZhciBFPXArMTtFPHRoaXMubTtFKyspbFtFXT0wO2Zvcih2YXIgTD1wKzE7TDx0aGlzLm47TCsrKWZvcih2YXIgQz1wKzE7Qzx0aGlzLm07QysrKWxbQ10rPXNbTF0qaVtDXVtMXTtmb3IodmFyIEE9cCsxO0E8dGhpcy5uO0ErKylmb3IodmFyIEk9LXNbQV0vc1twKzFdLEQ9cCsxO0Q8dGhpcy5tO0QrKylpW0RdW0FdKz1JKmxbRF19aWYoaClmb3IodmFyIGs9cCsxO2s8dGhpcy5uO2srKyl0aGlzLlZba11bcF09c1trXX19dmFyIFI9TWF0aC5taW4odGhpcy5uLHRoaXMubSsxKTtpZihmPHRoaXMubiYmKHRoaXMuc1tmXT1pW2ZdW2ZdKSx0aGlzLm08UiYmKHRoaXMuc1tSLTFdPTApLGQrMTxSJiYoc1tkXT1pW2RdW1ItMV0pLHNbUi0xXT0wLHUpe2Zvcih2YXIgUz1mO1M8YTtTKyspe2Zvcih2YXIgTz0wO088dGhpcy5tO08rKyl0aGlzLlVbT11bU109MDt0aGlzLlVbU11bU109MX1mb3IodmFyIE49Zi0xO04+PTA7Ti0tKWlmKHRoaXMuc1tOXSE9PTApe2Zvcih2YXIgUD1OKzE7UDxhO1ArKyl7Zm9yKHZhciBGPTAsQj1OO0I8dGhpcy5tO0IrKylGKz10aGlzLlVbQl1bTl0qdGhpcy5VW0JdW1BdO0Y9LUYvdGhpcy5VW05dW05dO2Zvcih2YXIgJD1OOyQ8dGhpcy5tOyQrKyl0aGlzLlVbJF1bUF0rPUYqdGhpcy5VWyRdW05dfWZvcih2YXIgej1OO3o8dGhpcy5tO3orKyl0aGlzLlVbel1bTl09LXRoaXMuVVt6XVtOXTt0aGlzLlVbTl1bTl09MSt0aGlzLlVbTl1bTl07Zm9yKHZhciBXPTA7VzxOLTE7VysrKXRoaXMuVVtXXVtOXT0wfWVsc2V7Zm9yKHZhciBqPTA7ajx0aGlzLm07aisrKXRoaXMuVVtqXVtOXT0wO3RoaXMuVVtOXVtOXT0xfX1pZihoKWZvcih2YXIgSz10aGlzLm4tMTtLPj0wO0stLSl7aWYoZnVuY3Rpb24oZHQsWGUpe3JldHVybiBkdCYmWGV9KEs8ZCxzW0tdIT09MCkpZm9yKHZhciBpZT1LKzE7aWU8YTtpZSsrKXtmb3IodmFyIFE9MCxlZT1LKzE7ZWU8dGhpcy5uO2VlKyspUSs9dGhpcy5WW2VlXVtLXSp0aGlzLlZbZWVdW2llXTtRPS1RL3RoaXMuVltLKzFdW0tdO2Zvcih2YXIgSj1LKzE7Sjx0aGlzLm47SisrKXRoaXMuVltKXVtpZV0rPVEqdGhpcy5WW0pdW0tdfWZvcih2YXIgSD0wO0g8dGhpcy5uO0grKyl0aGlzLlZbSF1bS109MDt0aGlzLlZbS11bS109MX1mb3IodmFyIHE9Ui0xLFo9MCxhZT1NYXRoLnBvdygyLC01MiksdWU9TWF0aC5wb3coMiwtOTY2KTtSPjA7KXt2YXIgY2U9dm9pZCAwLHRlPXZvaWQgMDtmb3IoY2U9Ui0yO2NlPj0tMSYmY2UhPT0tMTtjZS0tKWlmKE1hdGguYWJzKHNbY2VdKTw9dWUrYWUqKE1hdGguYWJzKHRoaXMuc1tjZV0pK01hdGguYWJzKHRoaXMuc1tjZSsxXSkpKXtzW2NlXT0wO2JyZWFrfWlmKGNlPT09Ui0yKXRlPTQ7ZWxzZXt2YXIgRGU9dm9pZCAwO2ZvcihEZT1SLTE7RGU+PWNlJiZEZSE9PWNlO0RlLS0pe3ZhciBvZT0oRGUhPT1SP01hdGguYWJzKHNbRGVdKTowKSsoRGUhPT1jZSsxP01hdGguYWJzKHNbRGUtMV0pOjApO2lmKE1hdGguYWJzKHRoaXMuc1tEZV0pPD11ZSthZSpvZSl7dGhpcy5zW0RlXT0wO2JyZWFrfX1EZT09PWNlP3RlPTM6RGU9PT1SLTE/dGU9MToodGU9MixjZT1EZSl9c3dpdGNoKGNlKyssdGUpe2Nhc2UgMTp7dmFyIGtlPXNbUi0yXTtzW1ItMl09MDtmb3IodmFyIEZlPVItMjtGZT49Y2U7RmUtLSl7dmFyIEJlPW4uaHlwb3QodGhpcy5zW0ZlXSxrZSksVmU9dGhpcy5zW0ZlXS9CZSxHZT1rZS9CZTtpZih0aGlzLnNbRmVdPUJlLEZlIT09Y2UmJihrZT0tR2Uqc1tGZS0xXSxzW0ZlLTFdPVZlKnNbRmUtMV0pLGgpZm9yKHZhciBIZT0wO0hlPHRoaXMubjtIZSsrKUJlPVZlKnRoaXMuVltIZV1bRmVdK0dlKnRoaXMuVltIZV1bUi0xXSx0aGlzLlZbSGVdW1ItMV09LUdlKnRoaXMuVltIZV1bRmVdK1ZlKnRoaXMuVltIZV1bUi0xXSx0aGlzLlZbSGVdW0ZlXT1CZX19YnJlYWs7Y2FzZSAyOnt2YXIgeGU9c1tjZS0xXTtzW2NlLTFdPTA7Zm9yKHZhciBYPWNlO1g8UjtYKyspe3ZhciBmZT1uLmh5cG90KHRoaXMuc1tYXSx4ZSksaGU9dGhpcy5zW1hdL2ZlLGdlPXhlL2ZlO2lmKHRoaXMuc1tYXT1mZSx4ZT0tZ2Uqc1tYXSxzW1hdPWhlKnNbWF0sdSlmb3IodmFyIG5lPTA7bmU8dGhpcy5tO25lKyspZmU9aGUqdGhpcy5VW25lXVtYXStnZSp0aGlzLlVbbmVdW2NlLTFdLHRoaXMuVVtuZV1bY2UtMV09LWdlKnRoaXMuVVtuZV1bWF0raGUqdGhpcy5VW25lXVtjZS0xXSx0aGlzLlVbbmVdW1hdPWZlfX1icmVhaztjYXNlIDM6e3ZhciB5ZT1NYXRoLm1heChNYXRoLm1heChNYXRoLm1heChNYXRoLm1heChNYXRoLmFicyh0aGlzLnNbUi0xXSksTWF0aC5hYnModGhpcy5zW1ItMl0pKSxNYXRoLmFicyhzW1ItMl0pKSxNYXRoLmFicyh0aGlzLnNbY2VdKSksTWF0aC5hYnMoc1tjZV0pKSxVPXRoaXMuc1tSLTFdL3llLFRlPXRoaXMuc1tSLTJdL3llLHNlPXNbUi0yXS95ZSxFZT10aGlzLnNbY2VdL3llLEFlPXNbY2VdL3llLFBlPSgoVGUrVSkqKFRlLVUpK3NlKnNlKS8yLE1lPVUqc2UqKFUqc2UpLG1lPTA7KGZ1bmN0aW9uKGR0LFhlKXtyZXR1cm4gZHR8fFhlfSkoUGUhPT0wLE1lIT09MCkmJihtZT1NYXRoLnNxcnQoUGUqUGUrTWUpLFBlPDAmJihtZT0tbWUpLG1lPU1lLyhQZSttZSkpO2Zvcih2YXIgV2U9KEVlK1UpKihFZS1VKSttZSxSZT1FZSpBZSx0dD1jZTt0dDxSLTE7dHQrKyl7dmFyIGd0PW4uaHlwb3QoV2UsUmUpLEV0PVdlL2d0LHZ0PVJlL2d0O2lmKHR0IT09Y2UmJihzW3R0LTFdPWd0KSxXZT1FdCp0aGlzLnNbdHRdK3Z0KnNbdHRdLHNbdHRdPUV0KnNbdHRdLXZ0KnRoaXMuc1t0dF0sUmU9dnQqdGhpcy5zW3R0KzFdLHRoaXMuc1t0dCsxXT1FdCp0aGlzLnNbdHQrMV0saClmb3IodmFyIFllPTA7WWU8dGhpcy5uO1llKyspZ3Q9RXQqdGhpcy5WW1llXVt0dF0rdnQqdGhpcy5WW1llXVt0dCsxXSx0aGlzLlZbWWVdW3R0KzFdPS12dCp0aGlzLlZbWWVdW3R0XStFdCp0aGlzLlZbWWVdW3R0KzFdLHRoaXMuVltZZV1bdHRdPWd0O2lmKGd0PW4uaHlwb3QoV2UsUmUpLEV0PVdlL2d0LHZ0PVJlL2d0LHRoaXMuc1t0dF09Z3QsV2U9RXQqc1t0dF0rdnQqdGhpcy5zW3R0KzFdLHRoaXMuc1t0dCsxXT0tdnQqc1t0dF0rRXQqdGhpcy5zW3R0KzFdLFJlPXZ0KnNbdHQrMV0sc1t0dCsxXT1FdCpzW3R0KzFdLHUmJnR0PHRoaXMubS0xKWZvcih2YXIgVHQ9MDtUdDx0aGlzLm07VHQrKylndD1FdCp0aGlzLlVbVHRdW3R0XSt2dCp0aGlzLlVbVHRdW3R0KzFdLHRoaXMuVVtUdF1bdHQrMV09LXZ0KnRoaXMuVVtUdF1bdHRdK0V0KnRoaXMuVVtUdF1bdHQrMV0sdGhpcy5VW1R0XVt0dF09Z3R9c1tSLTJdPVdlLFo9WisxfWJyZWFrO2Nhc2UgNDp7aWYodGhpcy5zW2NlXTw9MCYmKHRoaXMuc1tjZV09dGhpcy5zW2NlXTwwPy10aGlzLnNbY2VdOjAsaCkpZm9yKHZhciAkZT0wOyRlPD1xOyRlKyspdGhpcy5WWyRlXVtjZV09LXRoaXMuVlskZV1bY2VdO2Zvcig7Y2U8cSYmISh0aGlzLnNbY2VdPj10aGlzLnNbY2UrMV0pOyl7dmFyIHJ0PXRoaXMuc1tjZV07aWYodGhpcy5zW2NlXT10aGlzLnNbY2UrMV0sdGhpcy5zW2NlKzFdPXJ0LGgmJmNlPHRoaXMubi0xKWZvcih2YXIgZnQ9MDtmdDx0aGlzLm47ZnQrKylydD10aGlzLlZbZnRdW2NlKzFdLHRoaXMuVltmdF1bY2UrMV09dGhpcy5WW2Z0XVtjZV0sdGhpcy5WW2Z0XVtjZV09cnQ7aWYodSYmY2U8dGhpcy5tLTEpZm9yKHZhciBrdD0wO2t0PHRoaXMubTtrdCsrKXJ0PXRoaXMuVVtrdF1bY2UrMV0sdGhpcy5VW2t0XVtjZSsxXT10aGlzLlVba3RdW2NlXSx0aGlzLlVba3RdW2NlXT1ydDtjZSsrfVo9MCxSLS19YnJlYWt9fXZhciBlcj17VTp0aGlzLlUsVjp0aGlzLlYsUzp0aGlzLnN9O3JldHVybiBlcn0sbi5oeXBvdD1mdW5jdGlvbihpLGEpe3ZhciBzPXZvaWQgMDtyZXR1cm4gTWF0aC5hYnMoaSk+TWF0aC5hYnMoYSk/KHM9YS9pLHM9TWF0aC5hYnMoaSkqTWF0aC5zcXJ0KDErcypzKSk6YSE9MD8ocz1pL2Escz1NYXRoLmFicyhhKSpNYXRoLnNxcnQoMStzKnMpKTpzPTAsc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7Zm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLmtleSxmKX19cmV0dXJuIG8ocywiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGwsdSxoKXtyZXR1cm4gdSYmcyhsLnByb3RvdHlwZSx1KSxoJiZzKGwsaCksbH19KCk7ZnVuY3Rpb24gaShzLGwpe2lmKCEocyBpbnN0YW5jZW9mIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsZD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7aSh0aGlzLHMpLHRoaXMuc2VxdWVuY2UxPWwsdGhpcy5zZXF1ZW5jZTI9dSx0aGlzLm1hdGNoX3Njb3JlPWgsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWYsdGhpcy5nYXBfcGVuYWx0eT1kLHRoaXMuaU1heD1sLmxlbmd0aCsxLHRoaXMuak1heD11Lmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHA9MDtwPHRoaXMuaU1heDtwKyspe3RoaXMuZ3JpZFtwXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIG09MDttPHRoaXMuak1heDttKyspdGhpcy5ncmlkW3BdW21dPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgZz0wO2c8dGhpcy5pTWF4O2crKyl7dGhpcy50cmFjZWJhY2tHcmlkW2ddPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgeT0wO3k8dGhpcy5qTWF4O3krKyl0aGlzLnRyYWNlYmFja0dyaWRbZ11beV09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBvKHMsIk5lZWRsZW1hbld1bnNjaCIpLG4ocyxbe2tleToiZ2V0U2NvcmUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX0sImdldFNjb3JlIil9LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiZ2V0QWxpZ25tZW50cyIpfSx7a2V5OiJjb21wdXRlR3JpZHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtmb3IodmFyIHU9MTt1PHRoaXMuak1heDt1KyspdGhpcy5ncmlkWzBdW3VdPXRoaXMuZ3JpZFswXVt1LTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW3VdPVshMSwhMSwhMF07Zm9yKHZhciBoPTE7aDx0aGlzLmlNYXg7aCsrKXRoaXMuZ3JpZFtoXVswXT10aGlzLmdyaWRbaC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtoXVswXT1bITEsITAsITFdO2Zvcih2YXIgZj0xO2Y8dGhpcy5pTWF4O2YrKylmb3IodmFyIGQ9MTtkPHRoaXMuak1heDtkKyspe3ZhciBwPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtmLTFdPT09dGhpcy5zZXF1ZW5jZTJbZC0xXT9wPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5tYXRjaF9zY29yZTpwPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBtPXRoaXMuZ3JpZFtmLTFdW2RdK3RoaXMuZ2FwX3BlbmFsdHksZz10aGlzLmdyaWRbZl1bZC0xXSt0aGlzLmdhcF9wZW5hbHR5LHk9W3AsbSxnXSx2PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHkpO3RoaXMuZ3JpZFtmXVtkXT15W3ZbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtmXVtkXT1bdi5pbmNsdWRlcygwKSx2LmluY2x1ZGVzKDEpLHYuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19LCJjb21wdXRlR3JpZHMiKX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHU9W107Zm9yKHUucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTt1WzBdOyl7dmFyIGg9dVswXSxmPXRoaXMudHJhY2ViYWNrR3JpZFtoLnBvc1swXV1baC5wb3NbMV1dO2ZbMF0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksZlsxXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6Ii0iK2guc2VxMn0pLGZbMl0mJnUucHVzaCh7cG9zOltoLnBvc1swXSxoLnBvc1sxXS0xXSxzZXExOiItIitoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxoLnBvc1swXT09PTAmJmgucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpoLnNlcTEsc2VxdWVuY2UyOmguc2VxMn0pLHUuc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiYWxpZ25tZW50VHJhY2ViYWNrIil9LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9W10sZD0tMTsoZD11LmluZGV4T2YoaCxkKzEpKSE9PS0xOylmLnB1c2goZCk7cmV0dXJuIGZ9LCJnZXRBbGxJbmRleGVzIil9LHtrZXk6ImFycmF5QWxsTWF4SW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1KXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKHUsTWF0aC5tYXguYXBwbHkobnVsbCx1KSl9LCJhcnJheUFsbE1heEluZGV4ZXMiKX1dKSxzfSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW8oZnVuY3Rpb24oKXt9LCJsYXlvdXRCYXNlIik7bi5GRExheW91dD1yKDE4KSxuLkZETGF5b3V0Q29uc3RhbnRzPXIoNCksbi5GRExheW91dEVkZ2U9cigxOSksbi5GRExheW91dE5vZGU9cigyMCksbi5EaW1lbnNpb25EPXIoMjEpLG4uSGFzaE1hcD1yKDIyKSxuLkhhc2hTZXQ9cigyMyksbi5JR2VvbWV0cnk9cig4KSxuLklNYXRoPXIoOSksbi5JbnRlZ2VyPXIoMTApLG4uUG9pbnQ9cigxMiksbi5Qb2ludEQ9cig1KSxuLlJhbmRvbVNlZWQ9cigxNiksbi5SZWN0YW5nbGVEPXIoMTMpLG4uVHJhbnNmb3JtPXIoMTcpLG4uVW5pcXVlSURHZW5lcmV0b3I9cigxNCksbi5RdWlja3NvcnQ9cigyNSksbi5MaW5rZWRMaXN0PXIoMTEpLG4uTEdyYXBoT2JqZWN0PXIoMiksbi5MR3JhcGg9cig2KSxuLkxFZGdlPXIoMSksbi5MR3JhcGhNYW5hZ2VyPXIoNyksbi5MTm9kZT1yKDMpLG4uTGF5b3V0PXIoMTUpLG4uTGF5b3V0Q29uc3RhbnRzPXIoMCksbi5OZWVkbGVtYW5XdW5zY2g9cigyNyksbi5NYXRyaXg9cigyNCksbi5TVkQ9cigyNiksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubGlzdGVuZXJzPVtdfW8obiwiRW1pdHRlciIpO3ZhciBpPW4ucHJvdG90eXBlO2kuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXt0aGlzLmxpc3RlbmVycy5wdXNoKHtldmVudDphLGNhbGxiYWNrOnN9KX0saS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD10aGlzLmxpc3RlbmVycy5sZW5ndGg7bD49MDtsLS0pe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO3UuZXZlbnQ9PT1hJiZ1LmNhbGxiYWNrPT09cyYmdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGwsMSl9fSxpLmVtaXQ9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9MDtsPHRoaXMubGlzdGVuZXJzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO2E9PT11LmV2ZW50JiZ1LmNhbGxiYWNrKHMpfX0sdC5leHBvcnRzPW59XSl9KX0pO3ZhciBkRj1OaSgoeGIsZkYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgeGI9PSJvYmplY3QiJiZ0eXBlb2YgZkY9PSJvYmplY3QiP2ZGLmV4cG9ydHM9cihoRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImxheW91dC1iYXNlIl0scik6dHlwZW9mIHhiPT0ib2JqZWN0Ij94Yi5jb3NlQmFzZT1yKGhGKCkpOmUuY29zZUJhc2U9cihlLmxheW91dEJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKSh4YixmdW5jdGlvbih0KXtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIGU9ezQ1OihhLHMsbCk9Pnt2YXIgdT17fTt1LmxheW91dEJhc2U9bCg1NTEpLHUuQ29TRUNvbnN0YW50cz1sKDgwNiksdS5Db1NFRWRnZT1sKDc2NyksdS5Db1NFR3JhcGg9bCg4ODApLHUuQ29TRUdyYXBoTWFuYWdlcj1sKDU3OCksdS5Db1NFTGF5b3V0PWwoNzY1KSx1LkNvU0VOb2RlPWwoOTkxKSx1LkNvbnN0cmFpbnRIYW5kbGVyPWwoOTAyKSxhLmV4cG9ydHM9dX0sODA2OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gaCgpe31vKGgsIkNvU0VDb25zdGFudHMiKTtmb3IodmFyIGYgaW4gdSloW2ZdPXVbZl07aC5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLGguREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj11LkRFRkFVTFRfRURHRV9MRU5HVEgsaC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLGguVElMRT0hMCxoLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLGguVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxoLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSEwLGguRU5GT1JDRV9DT05TVFJBSU5UUz0hMCxoLkFQUExZX0xBWU9VVD0hMCxoLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTPSEwLGguVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITAsaC5QVVJFX0lOQ1JFTUVOVEFMPWguREVGQVVMVF9JTkNSRU1FTlRBTCxhLmV4cG9ydHM9aH0sNzY3OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRFZGdlO2Z1bmN0aW9uIGgoZCxwLG0pe3UuY2FsbCh0aGlzLGQscCxtKX1vKGgsIkNvU0VFZGdlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw4ODA6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGg7ZnVuY3Rpb24gaChkLHAsbSl7dS5jYWxsKHRoaXMsZCxwLG0pfW8oaCwiQ29TRUdyYXBoIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw1Nzg6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGhNYW5hZ2VyO2Z1bmN0aW9uIGgoZCl7dS5jYWxsKHRoaXMsZCl9byhoLCJDb1NFR3JhcGhNYW5hZ2VyIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw3NjU6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5GRExheW91dCxoPWwoNTc4KSxmPWwoODgwKSxkPWwoOTkxKSxwPWwoNzY3KSxtPWwoODA2KSxnPWwoOTAyKSx5PWwoNTUxKS5GRExheW91dENvbnN0YW50cyx2PWwoNTUxKS5MYXlvdXRDb25zdGFudHMseD1sKDU1MSkuUG9pbnQsYj1sKDU1MSkuUG9pbnRELHc9bCg1NTEpLkRpbWVuc2lvbkQsXz1sKDU1MSkuTGF5b3V0LFQ9bCg1NTEpLkludGVnZXIsRT1sKDU1MSkuSUdlb21ldHJ5LEw9bCg1NTEpLkxHcmFwaCxDPWwoNTUxKS5UcmFuc2Zvcm0sQT1sKDU1MSkuTGlua2VkTGlzdDtmdW5jdGlvbiBJKCl7dS5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9LHRoaXMuY29uc3RyYWludHM9e319byhJLCJDb1NFTGF5b3V0IiksSS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBEIGluIHUpSVtEXT11W0RdO0kucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBrPW5ldyBoKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1rLGt9LEkucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZihudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLGspfSxJLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZCh0aGlzLmdyYXBoTWFuYWdlcixrKX0sSS5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IHAobnVsbCxudWxsLGspfSxJLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3UucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChtLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9bS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1tLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuZ3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMucHJ1bmVkTm9kZXNBbGw9W10sdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnM9MCx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucz0wLHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITEpfSxJLnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt1LnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXIuY2FsbCh0aGlzKSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy95LkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9LjA0LHRoaXMuY29vbGluZ0FkanVzdGVyPTF9LEkucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbigpe3ZhciBrPXYuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBrJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LEkucHJvdG90eXBlLmNsYXNzaWNMYXlvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVzV2l0aEdyYXZpdHk9dGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCksdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KSx0aGlzLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKSx0aGlzLmluY3JlbWVudGFsKXtpZihtLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBSPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxTPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oUCl7cmV0dXJuIFIuaGFzKFApfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oUyl9fWVsc2V7dmFyIGs9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoay5sZW5ndGg+MCl0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShrKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIFI9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLFM9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihPKXtyZXR1cm4gUi5oYXMoTyl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihTKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25zdHJhaW50cykubGVuZ3RoPjAmJihnLmhhbmRsZUNvbnN0cmFpbnRzKHRoaXMpLHRoaXMuaW5pdENvbnN0cmFpbnRWYXJpYWJsZXMoKSksdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSxtLkFQUExZX0xBWU9VVCYmdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSxJLnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJXkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBrPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxSPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oTil7cmV0dXJuIGsuaGFzKE4pfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oUiksdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksbS5QVVJFX0lOQ1JFTUVOVEFMP3RoaXMuY29vbGluZ0ZhY3Rvcj15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwvMjp0aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLG0uUFVSRV9JTkNSRU1FTlRBTD90aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLzIqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCk6dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBTPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQsTz10aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc1RyZWVHcm93aW5nfHx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc0dyb3d0aEZpbmlzaGVkO3JldHVybiB0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCksdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2VzKFMsTyksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LEkucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxSPXt9LFM9MDtTPGsubGVuZ3RoO1MrKyl7dmFyIE89a1tTXS5yZWN0LE49a1tTXS5pZDtSW05dPXtpZDpOLHg6Ty5nZXRDZW50ZXJYKCkseTpPLmdldENlbnRlclkoKSx3Ok8ud2lkdGgsaDpPLmhlaWdodH19cmV0dXJuIFJ9LEkucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kPTI1LHRoaXMuYW5pbWF0aW9uUGVyaW9kPXRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDt2YXIgaz0hMTtpZih5LkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IWs7KWs9dGhpcy50aWNrKCk7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCl9fSxJLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5nZXRBbGxOb2RlcygpLFIsUz0wO1M8ay5sZW5ndGg7UysrKVI9a1tTXSxSLmNhbGN1bGF0ZURpc3BsYWNlbWVudCgpO09iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aD4wJiZ0aGlzLnVwZGF0ZURpc3BsYWNlbWVudHMoKTtmb3IodmFyIFM9MDtTPGsubGVuZ3RoO1MrKylSPWtbU10sUi5tb3ZlKCl9LEkucHJvdG90eXBlLmluaXRDb25zdHJhaW50VmFyaWFibGVzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpczt0aGlzLmlkVG9Ob2RlTWFwPW5ldyBNYXAsdGhpcy5maXhlZE5vZGVTZXQ9bmV3IFNldDtmb3IodmFyIFI9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxTPTA7UzxSLmxlbmd0aDtTKyspe3ZhciBPPVJbU107dGhpcy5pZFRvTm9kZU1hcC5zZXQoTy5pZCxPKX12YXIgTj1vKGZ1bmN0aW9uIGVlKEope2Zvcih2YXIgSD1KLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxxLFo9MCxhZT0wO2FlPEgubGVuZ3RoO2FlKyspcT1IW2FlXSxxLmdldENoaWxkKCk9PW51bGw/ay5maXhlZE5vZGVTZXQuaGFzKHEuaWQpJiYoWis9MTAwKTpaKz1lZShxKTtyZXR1cm4gWn0sImNhbGN1bGF0ZUNvbXBvdW5kV2VpZ2h0Iik7aWYodGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50KXt0aGlzLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihIKXtrLmZpeGVkTm9kZVNldC5hZGQoSC5ub2RlSWQpfSk7Zm9yKHZhciBSPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksTyxTPTA7UzxSLmxlbmd0aDtTKyspaWYoTz1SW1NdLE8uZ2V0Q2hpbGQoKSE9bnVsbCl7dmFyIFA9TihPKTtQPjAmJihPLmZpeGVkTm9kZVdlaWdodD1QKX19aWYodGhpcy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpe3ZhciBGPW5ldyBNYXAsQj1uZXcgTWFwO2lmKHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudD1uZXcgTWFwLHRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50PW5ldyBNYXAsdGhpcy5maXhlZE5vZGVzT25Ib3Jpem9udGFsPW5ldyBTZXQsdGhpcy5maXhlZE5vZGVzT25WZXJ0aWNhbD1uZXcgU2V0LHRoaXMuZml4ZWROb2RlU2V0LmZvckVhY2goZnVuY3Rpb24oZWUpe2suZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoZWUpLGsuZml4ZWROb2Rlc09uVmVydGljYWwuYWRkKGVlKX0pLHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCl7aWYodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKWZvcih2YXIgJD10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsUz0wO1M8JC5sZW5ndGg7UysrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQoImR1bW15IitTLFtdKSwkW1NdLmZvckVhY2goZnVuY3Rpb24oSil7Ri5zZXQoSiwiZHVtbXkiK1MpLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoImR1bW15IitTKS5wdXNoKEopLGsuZml4ZWROb2RlU2V0LmhhcyhKKSYmay5maXhlZE5vZGVzT25Ib3Jpem9udGFsLmFkZCgiZHVtbXkiK1MpfSk7aWYodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpZm9yKHZhciB6PXRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLFM9MDtTPHoubGVuZ3RoO1MrKyl0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5zZXQoImR1bW15IitTLFtdKSx6W1NdLmZvckVhY2goZnVuY3Rpb24oSil7Qi5zZXQoSiwiZHVtbXkiK1MpLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCgiZHVtbXkiK1MpLnB1c2goSiksay5maXhlZE5vZGVTZXQuaGFzKEopJiZrLmZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZCgiZHVtbXkiK1MpfSl9aWYobS5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUyl0aGlzLnNodWZmbGU9ZnVuY3Rpb24oZWUpe3ZhciBKLEgscTtmb3IocT1lZS5sZW5ndGgtMTtxPj0yKmVlLmxlbmd0aC8zO3EtLSlKPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoocSsxKSksSD1lZVtxXSxlZVtxXT1lZVtKXSxlZVtKXT1IO3JldHVybiBlZX0sdGhpcy5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsPVtdLHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWw9W10sdGhpcy5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsPW5ldyBNYXAsdGhpcy5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbD1uZXcgTWFwLHRoaXMubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbD1uZXcgTWFwLHRoaXMubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWw9bmV3IE1hcCx0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtpZihlZS5sZWZ0KXt2YXIgSj1GLmhhcyhlZS5sZWZ0KT9GLmdldChlZS5sZWZ0KTplZS5sZWZ0LEg9Ri5oYXMoZWUucmlnaHQpP0YuZ2V0KGVlLnJpZ2h0KTplZS5yaWdodDtrLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuaW5jbHVkZXMoSil8fChrLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwucHVzaChKKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuc2V0KEosW10pLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoSik/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChKLGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoSilbMF0pLmdldENlbnRlclgoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChKLGsuaWRUb05vZGVNYXAuZ2V0KEopLmdldENlbnRlclgoKSkpLGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5pbmNsdWRlcyhIKXx8KGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5wdXNoKEgpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5zZXQoSCxbXSksay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcyhIKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KEgsay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChIKVswXSkuZ2V0Q2VudGVyWCgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KEgsay5pZFRvTm9kZU1hcC5nZXQoSCkuZ2V0Q2VudGVyWCgpKSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChKKS5wdXNoKHtyaWdodDpILGdhcDplZS5nYXB9KSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KEgpLnB1c2goe2xlZnQ6SixnYXA6ZWUuZ2FwfSl9ZWxzZXt2YXIgcT1CLmhhcyhlZS50b3ApP0IuZ2V0KGVlLnRvcCk6ZWUudG9wLFo9Qi5oYXMoZWUuYm90dG9tKT9CLmdldChlZS5ib3R0b20pOmVlLmJvdHRvbTtrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmluY2x1ZGVzKHEpfHwoay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5wdXNoKHEpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuc2V0KHEsW10pLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhxKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChxLGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChxKVswXSkuZ2V0Q2VudGVyWSgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChxLGsuaWRUb05vZGVNYXAuZ2V0KHEpLmdldENlbnRlclkoKSkpLGsubm9kZXNJblJlbGF0aXZlVmVydGljYWwuaW5jbHVkZXMoWil8fChrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLnB1c2goWiksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5zZXQoWixbXSksay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKFopP2subm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KFosay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KFopWzBdKS5nZXRDZW50ZXJZKCkpOmsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KFosay5pZFRvTm9kZU1hcC5nZXQoWikuZ2V0Q2VudGVyWSgpKSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQocSkucHVzaCh7Ym90dG9tOlosZ2FwOmVlLmdhcH0pLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KFopLnB1c2goe3RvcDpxLGdhcDplZS5nYXB9KX19KTtlbHNle3ZhciBXPW5ldyBNYXAsaj1uZXcgTWFwO3RoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oZWUpe2lmKGVlLmxlZnQpe3ZhciBKPUYuaGFzKGVlLmxlZnQpP0YuZ2V0KGVlLmxlZnQpOmVlLmxlZnQsSD1GLmhhcyhlZS5yaWdodCk/Ri5nZXQoZWUucmlnaHQpOmVlLnJpZ2h0O1cuaGFzKEopP1cuZ2V0KEopLnB1c2goSCk6Vy5zZXQoSixbSF0pLFcuaGFzKEgpP1cuZ2V0KEgpLnB1c2goSik6Vy5zZXQoSCxbSl0pfWVsc2V7dmFyIHE9Qi5oYXMoZWUudG9wKT9CLmdldChlZS50b3ApOmVlLnRvcCxaPUIuaGFzKGVlLmJvdHRvbSk/Qi5nZXQoZWUuYm90dG9tKTplZS5ib3R0b207ai5oYXMocSk/ai5nZXQocSkucHVzaChaKTpqLnNldChxLFtaXSksai5oYXMoWik/ai5nZXQoWikucHVzaChxKTpqLnNldChaLFtxXSl9fSk7dmFyIEs9byhmdW5jdGlvbihKLEgpe3ZhciBxPVtdLFo9W10sYWU9bmV3IEEsdWU9bmV3IFNldCxjZT0wO3JldHVybiBKLmZvckVhY2goZnVuY3Rpb24odGUsRGUpe2lmKCF1ZS5oYXMoRGUpKXtxW2NlXT1bXSxaW2NlXT0hMTt2YXIgb2U9RGU7Zm9yKGFlLnB1c2gob2UpLHVlLmFkZChvZSkscVtjZV0ucHVzaChvZSk7YWUubGVuZ3RoIT0wOyl7b2U9YWUuc2hpZnQoKSxILmhhcyhvZSkmJihaW2NlXT0hMCk7dmFyIGtlPUouZ2V0KG9lKTtrZS5mb3JFYWNoKGZ1bmN0aW9uKEZlKXt1ZS5oYXMoRmUpfHwoYWUucHVzaChGZSksdWUuYWRkKEZlKSxxW2NlXS5wdXNoKEZlKSl9KX1jZSsrfX0pLHtjb21wb25lbnRzOnEsaXNGaXhlZDpafX0sImNvbnN0cnVjdENvbXBvbmVudHMiKSxpZT1LKFcsay5maXhlZE5vZGVzT25Ib3Jpem9udGFsKTt0aGlzLmNvbXBvbmVudHNPbkhvcml6b250YWw9aWUuY29tcG9uZW50cyx0aGlzLmZpeGVkQ29tcG9uZW50c09uSG9yaXpvbnRhbD1pZS5pc0ZpeGVkO3ZhciBRPUsoaixrLmZpeGVkTm9kZXNPblZlcnRpY2FsKTt0aGlzLmNvbXBvbmVudHNPblZlcnRpY2FsPVEuY29tcG9uZW50cyx0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWw9US5pc0ZpeGVkfX19LEkucHJvdG90eXBlLnVwZGF0ZURpc3BsYWNlbWVudHM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzO2lmKHRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCYmdGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGVlPWsuaWRUb05vZGVNYXAuZ2V0KFEubm9kZUlkKTtlZS5kaXNwbGFjZW1lbnRYPTAsZWUuZGlzcGxhY2VtZW50WT0wfSksdGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KXtpZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpZm9yKHZhciBSPXRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxTPTA7UzxSLmxlbmd0aDtTKyspe2Zvcih2YXIgTz0wLE49MDtOPFJbU10ubGVuZ3RoO04rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKFJbU11bTl0pKXtPPTA7YnJlYWt9Tys9dGhpcy5pZFRvTm9kZU1hcC5nZXQoUltTXVtOXSkuZGlzcGxhY2VtZW50WH1mb3IodmFyIFA9Ty9SW1NdLmxlbmd0aCxOPTA7TjxSW1NdLmxlbmd0aDtOKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoUltTXVtOXSkuZGlzcGxhY2VtZW50WD1QfWlmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgRj10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxTPTA7UzxGLmxlbmd0aDtTKyspe2Zvcih2YXIgQj0wLE49MDtOPEZbU10ubGVuZ3RoO04rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKEZbU11bTl0pKXtCPTA7YnJlYWt9Qis9dGhpcy5pZFRvTm9kZU1hcC5nZXQoRltTXVtOXSkuZGlzcGxhY2VtZW50WX1mb3IodmFyICQ9Qi9GW1NdLmxlbmd0aCxOPTA7TjxGW1NdLmxlbmd0aDtOKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoRltTXVtOXSkuZGlzcGxhY2VtZW50WT0kfX1pZih0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludClpZihtLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTKXRoaXMudG90YWxJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbCksdGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwpKSx0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuZm9yRWFjaChmdW5jdGlvbihRKXtpZighay5maXhlZE5vZGVzT25Ib3Jpem9udGFsLmhhcyhRKSl7dmFyIGVlPTA7ay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcyhRKT9lZT1rLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KFEpWzBdKS5kaXNwbGFjZW1lbnRYOmVlPWsuaWRUb05vZGVNYXAuZ2V0KFEpLmRpc3BsYWNlbWVudFgsay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChRKS5mb3JFYWNoKGZ1bmN0aW9uKEope2lmKEoucmlnaHQpe3ZhciBIPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoSi5yaWdodCktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChRKS1lZTtIPEouZ2FwJiYoZWUtPUouZ2FwLUgpfWVsc2V7dmFyIEg9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChRKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuZ2V0KEoubGVmdCkrZWU7SDxKLmdhcCYmKGVlKz1KLmdhcC1IKX19KSxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KFEsay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChRKStlZSksay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcyhRKT9rLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KFEpLmZvckVhY2goZnVuY3Rpb24oSil7ay5pZFRvTm9kZU1hcC5nZXQoSikuZGlzcGxhY2VtZW50WD1lZX0pOmsuaWRUb05vZGVNYXAuZ2V0KFEpLmRpc3BsYWNlbWVudFg9ZWV9fSksdGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKCFrLmZpeGVkTm9kZXNPbkhvcml6b250YWwuaGFzKFEpKXt2YXIgZWU9MDtrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoUSk/ZWU9ay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KFEpWzBdKS5kaXNwbGFjZW1lbnRZOmVlPWsuaWRUb05vZGVNYXAuZ2V0KFEpLmRpc3BsYWNlbWVudFksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQoUSkuZm9yRWFjaChmdW5jdGlvbihKKXtpZihKLmJvdHRvbSl7dmFyIEg9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoSi5ib3R0b20pLWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KFEpLWVlO0g8Si5nYXAmJihlZS09Si5nYXAtSCl9ZWxzZXt2YXIgSD1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChRKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChKLnRvcCkrZWU7SDxKLmdhcCYmKGVlKz1KLmdhcC1IKX19KSxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChRLGsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KFEpK2VlKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoUSk/ay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KFEpLmZvckVhY2goZnVuY3Rpb24oSil7ay5pZFRvTm9kZU1hcC5nZXQoSikuZGlzcGxhY2VtZW50WT1lZX0pOmsuaWRUb05vZGVNYXAuZ2V0KFEpLmRpc3BsYWNlbWVudFk9ZWV9fSk7ZWxzZXtmb3IodmFyIFM9MDtTPHRoaXMuY29tcG9uZW50c09uSG9yaXpvbnRhbC5sZW5ndGg7UysrKXt2YXIgej10aGlzLmNvbXBvbmVudHNPbkhvcml6b250YWxbU107aWYodGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWxbU10pZm9yKHZhciBOPTA7Tjx6Lmxlbmd0aDtOKyspdGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyh6W05dKT90aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KHpbTl0pLmZvckVhY2goZnVuY3Rpb24oSil7ay5pZFRvTm9kZU1hcC5nZXQoSikuZGlzcGxhY2VtZW50WD0wfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoeltOXSkuZGlzcGxhY2VtZW50WD0wO2Vsc2V7Zm9yKHZhciBXPTAsaj0wLE49MDtOPHoubGVuZ3RoO04rKylpZih0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKHpbTl0pKXt2YXIgSz10aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KHpbTl0pO1crPUsubGVuZ3RoKnRoaXMuaWRUb05vZGVNYXAuZ2V0KEtbMF0pLmRpc3BsYWNlbWVudFgsais9Sy5sZW5ndGh9ZWxzZSBXKz10aGlzLmlkVG9Ob2RlTWFwLmdldCh6W05dKS5kaXNwbGFjZW1lbnRYLGorKztmb3IodmFyIGllPVcvaixOPTA7Tjx6Lmxlbmd0aDtOKyspdGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyh6W05dKT90aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KHpbTl0pLmZvckVhY2goZnVuY3Rpb24oSil7ay5pZFRvTm9kZU1hcC5nZXQoSikuZGlzcGxhY2VtZW50WD1pZX0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KHpbTl0pLmRpc3BsYWNlbWVudFg9aWV9fWZvcih2YXIgUz0wO1M8dGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbC5sZW5ndGg7UysrKXt2YXIgej10aGlzLmNvbXBvbmVudHNPblZlcnRpY2FsW1NdO2lmKHRoaXMuZml4ZWRDb21wb25lbnRzT25WZXJ0aWNhbFtTXSlmb3IodmFyIE49MDtOPHoubGVuZ3RoO04rKyl0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoeltOXSk/dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KHpbTl0pLmZvckVhY2goZnVuY3Rpb24oSCl7ay5pZFRvTm9kZU1hcC5nZXQoSCkuZGlzcGxhY2VtZW50WT0wfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoeltOXSkuZGlzcGxhY2VtZW50WT0wO2Vsc2V7Zm9yKHZhciBXPTAsaj0wLE49MDtOPHoubGVuZ3RoO04rKylpZih0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoeltOXSkpe3ZhciBLPXRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCh6W05dKTtXKz1LLmxlbmd0aCp0aGlzLmlkVG9Ob2RlTWFwLmdldChLWzBdKS5kaXNwbGFjZW1lbnRZLGorPUsubGVuZ3RofWVsc2UgVys9dGhpcy5pZFRvTm9kZU1hcC5nZXQoeltOXSkuZGlzcGxhY2VtZW50WSxqKys7Zm9yKHZhciBpZT1XL2osTj0wO048ei5sZW5ndGg7TisrKXRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyh6W05dKT90aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoeltOXSkuZm9yRWFjaChmdW5jdGlvbihhZSl7ay5pZFRvTm9kZU1hcC5nZXQoYWUpLmRpc3BsYWNlbWVudFk9aWV9KTp0aGlzLmlkVG9Ob2RlTWFwLmdldCh6W05dKS5kaXNwbGFjZW1lbnRZPWllfX19fSxJLnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIGs9W10sUixTPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEdyYXBocygpLE89Uy5sZW5ndGgsTjtmb3IoTj0wO048TztOKyspUj1TW05dLFIudXBkYXRlQ29ubmVjdGVkKCksUi5pc0Nvbm5lY3RlZHx8KGs9ay5jb25jYXQoUi5nZXROb2RlcygpKSk7cmV0dXJuIGt9LEkucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgaz1bXTtrPWsuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciBSPW5ldyBTZXQsUztmb3IoUz0wO1M8ay5sZW5ndGg7UysrKXt2YXIgTz1rW1NdO2lmKCFSLmhhcyhPKSl7dmFyIE49Ty5nZXRTb3VyY2UoKSxQPU8uZ2V0VGFyZ2V0KCk7aWYoTj09UClPLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBiKSxPLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBiKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKE8pLFIuYWRkKE8pO2Vsc2V7dmFyIEY9W107aWYoRj1GLmNvbmNhdChOLmdldEVkZ2VMaXN0VG9Ob2RlKFApKSxGPUYuY29uY2F0KFAuZ2V0RWRnZUxpc3RUb05vZGUoTikpLCFSLmhhcyhGWzBdKSl7aWYoRi5sZW5ndGg+MSl7dmFyIEI7Zm9yKEI9MDtCPEYubGVuZ3RoO0IrKyl7dmFyICQ9RltCXTskLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBiKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKCQpfX1GLmZvckVhY2goZnVuY3Rpb24oeil7Ui5hZGQoeil9KX19fWlmKFIuc2l6ZT09ay5sZW5ndGgpYnJlYWt9fSxJLnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHk9ZnVuY3Rpb24oayl7Zm9yKHZhciBSPW5ldyB4KDAsMCksUz1NYXRoLmNlaWwoTWF0aC5zcXJ0KGsubGVuZ3RoKSksTz0wLE49MCxQPTAsRj1uZXcgYigwLDApLEI9MDtCPGsubGVuZ3RoO0IrKyl7QiVTPT0wJiYoUD0wLE49TyxCIT0wJiYoTis9bS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKSxPPTApO3ZhciAkPWtbQl0sej1fLmZpbmRDZW50ZXJPZlRyZWUoJCk7Ui54PVAsUi55PU4sRj1JLnJhZGlhbExheW91dCgkLHosUiksRi55Pk8mJihPPU1hdGguZmxvb3IoRi55KSksUD1NYXRoLmZsb29yKEYueCttLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pfXRoaXMudHJhbnNmb3JtKG5ldyBiKHYuV09STERfQ0VOVEVSX1gtRi54LzIsdi5XT1JMRF9DRU5URVJfWS1GLnkvMikpfSxJLnJhZGlhbExheW91dD1mdW5jdGlvbihrLFIsUyl7dmFyIE89TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZShrKSxtLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04pO0kuYnJhbmNoUmFkaWFsTGF5b3V0KFIsbnVsbCwwLDM1OSwwLE8pO3ZhciBOPUwuY2FsY3VsYXRlQm91bmRzKGspLFA9bmV3IEM7UC5zZXREZXZpY2VPcmdYKE4uZ2V0TWluWCgpKSxQLnNldERldmljZU9yZ1koTi5nZXRNaW5ZKCkpLFAuc2V0V29ybGRPcmdYKFMueCksUC5zZXRXb3JsZE9yZ1koUy55KTtmb3IodmFyIEY9MDtGPGsubGVuZ3RoO0YrKyl7dmFyIEI9a1tGXTtCLnRyYW5zZm9ybShQKX12YXIgJD1uZXcgYihOLmdldE1heFgoKSxOLmdldE1heFkoKSk7cmV0dXJuIFAuaW52ZXJzZVRyYW5zZm9ybVBvaW50KCQpfSxJLmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbihrLFIsUyxPLE4sUCl7dmFyIEY9KE8tUysxKS8yO0Y8MCYmKEYrPTE4MCk7dmFyIEI9KEYrUyklMzYwLCQ9QipFLlRXT19QSS8zNjAsej1NYXRoLmNvcygkKSxXPU4qTWF0aC5jb3MoJCksaj1OKk1hdGguc2luKCQpO2suc2V0Q2VudGVyKFcsaik7dmFyIEs9W107Sz1LLmNvbmNhdChrLmdldEVkZ2VzKCkpO3ZhciBpZT1LLmxlbmd0aDtSIT1udWxsJiZpZS0tO2Zvcih2YXIgUT0wLGVlPUsubGVuZ3RoLEosSD1rLmdldEVkZ2VzQmV0d2VlbihSKTtILmxlbmd0aD4xOyl7dmFyIHE9SFswXTtILnNwbGljZSgwLDEpO3ZhciBaPUsuaW5kZXhPZihxKTtaPj0wJiZLLnNwbGljZShaLDEpLGVlLS0saWUtLX1SIT1udWxsP0o9KEsuaW5kZXhPZihIWzBdKSsxKSVlZTpKPTA7Zm9yKHZhciBhZT1NYXRoLmFicyhPLVMpL2llLHVlPUo7USE9aWU7dWU9Kyt1ZSVlZSl7dmFyIGNlPUtbdWVdLmdldE90aGVyRW5kKGspO2lmKGNlIT1SKXt2YXIgdGU9KFMrUSphZSklMzYwLERlPSh0ZSthZSklMzYwO0kuYnJhbmNoUmFkaWFsTGF5b3V0KGNlLGssdGUsRGUsTitQLFApLFErK319fSxJLm1heERpYWdvbmFsSW5UcmVlPWZ1bmN0aW9uKGspe2Zvcih2YXIgUj1ULk1JTl9WQUxVRSxTPTA7UzxrLmxlbmd0aDtTKyspe3ZhciBPPWtbU10sTj1PLmdldERpYWdvbmFsKCk7Tj5SJiYoUj1OKX1yZXR1cm4gUn0sSS5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDIqKHRoaXMubGV2ZWwrMSkqdGhpcy5pZGVhbEVkZ2VMZW5ndGh9LEkucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLFI9e307dGhpcy5tZW1iZXJHcm91cHM9e30sdGhpcy5pZFRvRHVtbXlOb2RlPXt9O2Zvcih2YXIgUz1bXSxPPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgUD1PW05dLEY9UC5nZXRQYXJlbnQoKTt0aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oUCk9PT0wJiYoRi5pZD09bnVsbHx8IXRoaXMuZ2V0VG9CZVRpbGVkKEYpKSYmUy5wdXNoKFApfWZvcih2YXIgTj0wO048Uy5sZW5ndGg7TisrKXt2YXIgUD1TW05dLEI9UC5nZXRQYXJlbnQoKS5pZDt0eXBlb2YgUltCXT4idSImJihSW0JdPVtdKSxSW0JdPVJbQl0uY29uY2F0KFApfU9iamVjdC5rZXlzKFIpLmZvckVhY2goZnVuY3Rpb24oJCl7aWYoUlskXS5sZW5ndGg+MSl7dmFyIHo9IkR1bW15Q29tcG91bmRfIiskO2subWVtYmVyR3JvdXBzW3pdPVJbJF07dmFyIFc9UlskXVswXS5nZXRQYXJlbnQoKSxqPW5ldyBkKGsuZ3JhcGhNYW5hZ2VyKTtqLmlkPXosai5wYWRkaW5nTGVmdD1XLnBhZGRpbmdMZWZ0fHwwLGoucGFkZGluZ1JpZ2h0PVcucGFkZGluZ1JpZ2h0fHwwLGoucGFkZGluZ0JvdHRvbT1XLnBhZGRpbmdCb3R0b218fDAsai5wYWRkaW5nVG9wPVcucGFkZGluZ1RvcHx8MCxrLmlkVG9EdW1teU5vZGVbel09ajt2YXIgSz1rLmdldEdyYXBoTWFuYWdlcigpLmFkZChrLm5ld0dyYXBoKCksaiksaWU9Vy5nZXRDaGlsZCgpO2llLmFkZChqKTtmb3IodmFyIFE9MDtRPFJbJF0ubGVuZ3RoO1ErKyl7dmFyIGVlPVJbJF1bUV07aWUucmVtb3ZlKGVlKSxLLmFkZChlZSl9fX0pfSxJLnByb3RvdHlwZS5jbGVhckNvbXBvdW5kcz1mdW5jdGlvbigpe3ZhciBrPXt9LFI9e307dGhpcy5wZXJmb3JtREZTT25Db21wb3VuZHMoKTtmb3IodmFyIFM9MDtTPHRoaXMuY29tcG91bmRPcmRlci5sZW5ndGg7UysrKVJbdGhpcy5jb21wb3VuZE9yZGVyW1NdLmlkXT10aGlzLmNvbXBvdW5kT3JkZXJbU10sa1t0aGlzLmNvbXBvdW5kT3JkZXJbU10uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbU10uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW1NdLmdldENoaWxkKCkpLHRoaXMuY29tcG91bmRPcmRlcltTXS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoayxSKX0sSS5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBrPXRoaXMsUj10aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s9W107T2JqZWN0LmtleXModGhpcy5tZW1iZXJHcm91cHMpLmZvckVhY2goZnVuY3Rpb24oUyl7dmFyIE89ay5pZFRvRHVtbXlOb2RlW1NdO2lmKFJbU109ay50aWxlTm9kZXMoay5tZW1iZXJHcm91cHNbU10sTy5wYWRkaW5nTGVmdCtPLnBhZGRpbmdSaWdodCksTy5yZWN0LndpZHRoPVJbU10ud2lkdGgsTy5yZWN0LmhlaWdodD1SW1NdLmhlaWdodCxPLnNldENlbnRlcihSW1NdLmNlbnRlclgsUltTXS5jZW50ZXJZKSxPLmxhYmVsTWFyZ2luTGVmdD0wLE8ubGFiZWxNYXJnaW5Ub3A9MCxtLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIE49Ty5yZWN0LndpZHRoLFA9Ty5yZWN0LmhlaWdodDtPLmxhYmVsV2lkdGgmJihPLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiPyhPLnJlY3QueC09Ty5sYWJlbFdpZHRoLE8uc2V0V2lkdGgoTitPLmxhYmVsV2lkdGgpLE8ubGFiZWxNYXJnaW5MZWZ0PU8ubGFiZWxXaWR0aCk6Ty5sYWJlbFBvc0hvcml6b250YWw9PSJjZW50ZXIiJiZPLmxhYmVsV2lkdGg+Tj8oTy5yZWN0LngtPShPLmxhYmVsV2lkdGgtTikvMixPLnNldFdpZHRoKE8ubGFiZWxXaWR0aCksTy5sYWJlbE1hcmdpbkxlZnQ9KE8ubGFiZWxXaWR0aC1OKS8yKTpPLmxhYmVsUG9zSG9yaXpvbnRhbD09InJpZ2h0IiYmTy5zZXRXaWR0aChOK08ubGFiZWxXaWR0aCkpLE8ubGFiZWxIZWlnaHQmJihPLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiPyhPLnJlY3QueS09Ty5sYWJlbEhlaWdodCxPLnNldEhlaWdodChQK08ubGFiZWxIZWlnaHQpLE8ubGFiZWxNYXJnaW5Ub3A9Ty5sYWJlbEhlaWdodCk6Ty5sYWJlbFBvc1ZlcnRpY2FsPT0iY2VudGVyIiYmTy5sYWJlbEhlaWdodD5QPyhPLnJlY3QueS09KE8ubGFiZWxIZWlnaHQtUCkvMixPLnNldEhlaWdodChPLmxhYmVsSGVpZ2h0KSxPLmxhYmVsTWFyZ2luVG9wPShPLmxhYmVsSGVpZ2h0LVApLzIpOk8ubGFiZWxQb3NWZXJ0aWNhbD09ImJvdHRvbSImJk8uc2V0SGVpZ2h0KFArTy5sYWJlbEhlaWdodCkpfX0pfSxJLnByb3RvdHlwZS5yZXBvcHVsYXRlQ29tcG91bmRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIFI9dGhpcy5jb21wb3VuZE9yZGVyW2tdLFM9Ui5pZCxPPVIucGFkZGluZ0xlZnQsTj1SLnBhZGRpbmdUb3AsUD1SLmxhYmVsTWFyZ2luTGVmdCxGPVIubGFiZWxNYXJnaW5Ub3A7dGhpcy5hZGp1c3RMb2NhdGlvbnModGhpcy50aWxlZE1lbWJlclBhY2tbU10sUi5yZWN0LngsUi5yZWN0LnksTyxOLFAsRil9fSxJLnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLFI9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrO09iamVjdC5rZXlzKFIpLmZvckVhY2goZnVuY3Rpb24oUyl7dmFyIE89ay5pZFRvRHVtbXlOb2RlW1NdLE49Ty5wYWRkaW5nTGVmdCxQPU8ucGFkZGluZ1RvcCxGPU8ubGFiZWxNYXJnaW5MZWZ0LEI9Ty5sYWJlbE1hcmdpblRvcDtrLmFkanVzdExvY2F0aW9ucyhSW1NdLE8ucmVjdC54LE8ucmVjdC55LE4sUCxGLEIpfSl9LEkucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihrKXt2YXIgUj1rLmlkO2lmKHRoaXMudG9CZVRpbGVkW1JdIT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtSXTt2YXIgUz1rLmdldENoaWxkKCk7aWYoUz09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbUl09ITEsITE7Zm9yKHZhciBPPVMuZ2V0Tm9kZXMoKSxOPTA7TjxPLmxlbmd0aDtOKyspe3ZhciBQPU9bTl07aWYodGhpcy5nZXROb2RlRGVncmVlKFApPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW1JdPSExLCExO2lmKFAuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbUC5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKFApKXJldHVybiB0aGlzLnRvQmVUaWxlZFtSXT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbUl09ITAsITB9LEkucHJvdG90eXBlLmdldE5vZGVEZWdyZWU9ZnVuY3Rpb24oayl7Zm9yKHZhciBSPWsuaWQsUz1rLmdldEVkZ2VzKCksTz0wLE49MDtOPFMubGVuZ3RoO04rKyl7dmFyIFA9U1tOXTtQLmdldFNvdXJjZSgpLmlkIT09UC5nZXRUYXJnZXQoKS5pZCYmKE89TysxKX1yZXR1cm4gT30sSS5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbj1mdW5jdGlvbihrKXt2YXIgUj10aGlzLmdldE5vZGVEZWdyZWUoayk7aWYoay5nZXRDaGlsZCgpPT1udWxsKXJldHVybiBSO2Zvcih2YXIgUz1rLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBOPVNbT107Uis9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKE4pfXJldHVybiBSfSxJLnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LEkucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKGspe2Zvcih2YXIgUj0wO1I8ay5sZW5ndGg7UisrKXt2YXIgUz1rW1JdO1MuZ2V0Q2hpbGQoKSE9bnVsbCYmdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyhTLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5nZXRUb0JlVGlsZWQoUykmJnRoaXMuY29tcG91bmRPcmRlci5wdXNoKFMpfX0sSS5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zPWZ1bmN0aW9uKGssUixTLE8sTixQLEYpe1IrPU8rUCxTKz1OK0Y7Zm9yKHZhciBCPVIsJD0wOyQ8ay5yb3dzLmxlbmd0aDskKyspe3ZhciB6PWsucm93c1skXTtSPUI7Zm9yKHZhciBXPTAsaj0wO2o8ei5sZW5ndGg7aisrKXt2YXIgSz16W2pdO0sucmVjdC54PVIsSy5yZWN0Lnk9UyxSKz1LLnJlY3Qud2lkdGgray5ob3Jpem9udGFsUGFkZGluZyxLLnJlY3QuaGVpZ2h0PlcmJihXPUsucmVjdC5oZWlnaHQpfVMrPVcray52ZXJ0aWNhbFBhZGRpbmd9fSxJLnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKGssUil7dmFyIFM9dGhpczt0aGlzLnRpbGVkTWVtYmVyUGFjaz1bXSxPYmplY3Qua2V5cyhrKS5mb3JFYWNoKGZ1bmN0aW9uKE8pe3ZhciBOPVJbT107aWYoUy50aWxlZE1lbWJlclBhY2tbT109Uy50aWxlTm9kZXMoa1tPXSxOLnBhZGRpbmdMZWZ0K04ucGFkZGluZ1JpZ2h0KSxOLnJlY3Qud2lkdGg9Uy50aWxlZE1lbWJlclBhY2tbT10ud2lkdGgsTi5yZWN0LmhlaWdodD1TLnRpbGVkTWVtYmVyUGFja1tPXS5oZWlnaHQsTi5zZXRDZW50ZXIoUy50aWxlZE1lbWJlclBhY2tbT10uY2VudGVyWCxTLnRpbGVkTWVtYmVyUGFja1tPXS5jZW50ZXJZKSxOLmxhYmVsTWFyZ2luTGVmdD0wLE4ubGFiZWxNYXJnaW5Ub3A9MCxtLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIFA9Ti5yZWN0LndpZHRoLEY9Ti5yZWN0LmhlaWdodDtOLmxhYmVsV2lkdGgmJihOLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiPyhOLnJlY3QueC09Ti5sYWJlbFdpZHRoLE4uc2V0V2lkdGgoUCtOLmxhYmVsV2lkdGgpLE4ubGFiZWxNYXJnaW5MZWZ0PU4ubGFiZWxXaWR0aCk6Ti5sYWJlbFBvc0hvcml6b250YWw9PSJjZW50ZXIiJiZOLmxhYmVsV2lkdGg+UD8oTi5yZWN0LngtPShOLmxhYmVsV2lkdGgtUCkvMixOLnNldFdpZHRoKE4ubGFiZWxXaWR0aCksTi5sYWJlbE1hcmdpbkxlZnQ9KE4ubGFiZWxXaWR0aC1QKS8yKTpOLmxhYmVsUG9zSG9yaXpvbnRhbD09InJpZ2h0IiYmTi5zZXRXaWR0aChQK04ubGFiZWxXaWR0aCkpLE4ubGFiZWxIZWlnaHQmJihOLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiPyhOLnJlY3QueS09Ti5sYWJlbEhlaWdodCxOLnNldEhlaWdodChGK04ubGFiZWxIZWlnaHQpLE4ubGFiZWxNYXJnaW5Ub3A9Ti5sYWJlbEhlaWdodCk6Ti5sYWJlbFBvc1ZlcnRpY2FsPT0iY2VudGVyIiYmTi5sYWJlbEhlaWdodD5GPyhOLnJlY3QueS09KE4ubGFiZWxIZWlnaHQtRikvMixOLnNldEhlaWdodChOLmxhYmVsSGVpZ2h0KSxOLmxhYmVsTWFyZ2luVG9wPShOLmxhYmVsSGVpZ2h0LUYpLzIpOk4ubGFiZWxQb3NWZXJ0aWNhbD09ImJvdHRvbSImJk4uc2V0SGVpZ2h0KEYrTi5sYWJlbEhlaWdodCkpfX0pfSxJLnByb3RvdHlwZS50aWxlTm9kZXM9ZnVuY3Rpb24oayxSKXt2YXIgUz10aGlzLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0oayxSLCEwKSxPPXRoaXMudGlsZU5vZGVzQnlGYXZvcmluZ0RpbShrLFIsITEpLE49dGhpcy5nZXRPcmdSYXRpbyhTKSxQPXRoaXMuZ2V0T3JnUmF0aW8oTyksRjtyZXR1cm4gUDxOP0Y9TzpGPVMsRn0sSS5wcm90b3R5cGUuZ2V0T3JnUmF0aW89ZnVuY3Rpb24oayl7dmFyIFI9ay53aWR0aCxTPWsuaGVpZ2h0LE89Ui9TO3JldHVybiBPPDEmJihPPTEvTyksT30sSS5wcm90b3R5cGUuY2FsY0lkZWFsUm93V2lkdGg9ZnVuY3Rpb24oayxSKXt2YXIgUz1tLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMLE89bS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMLE49ay5sZW5ndGgsUD0wLEY9MCxCPTA7ay5mb3JFYWNoKGZ1bmN0aW9uKFEpe1ArPVEuZ2V0V2lkdGgoKSxGKz1RLmdldEhlaWdodCgpLFEuZ2V0V2lkdGgoKT5CJiYoQj1RLmdldFdpZHRoKCkpfSk7dmFyICQ9UC9OLHo9Ri9OLFc9TWF0aC5wb3coUy1PLDIpKzQqKCQrTykqKHorUykqTixqPShPLVMrTWF0aC5zcXJ0KFcpKS8oMiooJCtPKSksSztSPyhLPU1hdGguY2VpbChqKSxLPT1qJiZLKyspOks9TWF0aC5mbG9vcihqKTt2YXIgaWU9SyooJCtPKS1PO3JldHVybiBCPmllJiYoaWU9QiksaWUrPU8qMixpZX0sSS5wcm90b3R5cGUudGlsZU5vZGVzQnlGYXZvcmluZ0RpbT1mdW5jdGlvbihrLFIsUyl7dmFyIE89bS5USUxJTkdfUEFERElOR19WRVJUSUNBTCxOPW0uVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxQPW0uVElMSU5HX0NPTVBBUkVfQlksRj17cm93czpbXSxyb3dXaWR0aDpbXSxyb3dIZWlnaHQ6W10sd2lkdGg6MCxoZWlnaHQ6Uix2ZXJ0aWNhbFBhZGRpbmc6Tyxob3Jpem9udGFsUGFkZGluZzpOLGNlbnRlclg6MCxjZW50ZXJZOjB9O1AmJihGLmlkZWFsUm93V2lkdGg9dGhpcy5jYWxjSWRlYWxSb3dXaWR0aChrLFMpKTt2YXIgQj1vKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUucmVjdC53aWR0aCplZS5yZWN0LmhlaWdodH0sImdldE5vZGVBcmVhIiksJD1vKGZ1bmN0aW9uKGVlLEope3JldHVybiBCKEopLUIoZWUpfSwiYXJlYUNvbXBhcmVGY24iKTtrLnNvcnQoZnVuY3Rpb24oUSxlZSl7dmFyIEo9JDtyZXR1cm4gRi5pZGVhbFJvd1dpZHRoPyhKPVAsSihRLmlkLGVlLmlkKSk6SihRLGVlKX0pO2Zvcih2YXIgej0wLFc9MCxqPTA7ajxrLmxlbmd0aDtqKyspe3ZhciBLPWtbal07eis9Sy5nZXRDZW50ZXJYKCksVys9Sy5nZXRDZW50ZXJZKCl9Ri5jZW50ZXJYPXovay5sZW5ndGgsRi5jZW50ZXJZPVcvay5sZW5ndGg7Zm9yKHZhciBqPTA7ajxrLmxlbmd0aDtqKyspe3ZhciBLPWtbal07aWYoRi5yb3dzLmxlbmd0aD09MCl0aGlzLmluc2VydE5vZGVUb1JvdyhGLEssMCxSKTtlbHNlIGlmKHRoaXMuY2FuQWRkSG9yaXpvbnRhbChGLEsucmVjdC53aWR0aCxLLnJlY3QuaGVpZ2h0KSl7dmFyIGllPUYucm93cy5sZW5ndGgtMTtGLmlkZWFsUm93V2lkdGh8fChpZT10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoRikpLHRoaXMuaW5zZXJ0Tm9kZVRvUm93KEYsSyxpZSxSKX1lbHNlIHRoaXMuaW5zZXJ0Tm9kZVRvUm93KEYsSyxGLnJvd3MubGVuZ3RoLFIpO3RoaXMuc2hpZnRUb0xhc3RSb3coRil9cmV0dXJuIEZ9LEkucHJvdG90eXBlLmluc2VydE5vZGVUb1Jvdz1mdW5jdGlvbihrLFIsUyxPKXt2YXIgTj1PO2lmKFM9PWsucm93cy5sZW5ndGgpe3ZhciBQPVtdO2sucm93cy5wdXNoKFApLGsucm93V2lkdGgucHVzaChOKSxrLnJvd0hlaWdodC5wdXNoKDApfXZhciBGPWsucm93V2lkdGhbU10rUi5yZWN0LndpZHRoO2sucm93c1tTXS5sZW5ndGg+MCYmKEYrPWsuaG9yaXpvbnRhbFBhZGRpbmcpLGsucm93V2lkdGhbU109RixrLndpZHRoPEYmJihrLndpZHRoPUYpO3ZhciBCPVIucmVjdC5oZWlnaHQ7Uz4wJiYoQis9ay52ZXJ0aWNhbFBhZGRpbmcpO3ZhciAkPTA7Qj5rLnJvd0hlaWdodFtTXSYmKCQ9ay5yb3dIZWlnaHRbU10say5yb3dIZWlnaHRbU109QiwkPWsucm93SGVpZ2h0W1NdLSQpLGsuaGVpZ2h0Kz0kLGsucm93c1tTXS5wdXNoKFIpfSxJLnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4PWZ1bmN0aW9uKGspe2Zvcih2YXIgUj0tMSxTPU51bWJlci5NQVhfVkFMVUUsTz0wO088ay5yb3dzLmxlbmd0aDtPKyspay5yb3dXaWR0aFtPXTxTJiYoUj1PLFM9ay5yb3dXaWR0aFtPXSk7cmV0dXJuIFJ9LEkucHJvdG90eXBlLmdldExvbmdlc3RSb3dJbmRleD1mdW5jdGlvbihrKXtmb3IodmFyIFI9LTEsUz1OdW1iZXIuTUlOX1ZBTFVFLE89MDtPPGsucm93cy5sZW5ndGg7TysrKWsucm93V2lkdGhbT10+UyYmKFI9TyxTPWsucm93V2lkdGhbT10pO3JldHVybiBSfSxJLnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKGssUixTKXtpZihrLmlkZWFsUm93V2lkdGgpe3ZhciBPPWsucm93cy5sZW5ndGgtMSxOPWsucm93V2lkdGhbT107cmV0dXJuIE4rUitrLmhvcml6b250YWxQYWRkaW5nPD1rLmlkZWFsUm93V2lkdGh9dmFyIFA9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KGspO2lmKFA8MClyZXR1cm4hMDt2YXIgRj1rLnJvd1dpZHRoW1BdO2lmKEYray5ob3Jpem9udGFsUGFkZGluZytSPD1rLndpZHRoKXJldHVybiEwO3ZhciBCPTA7ay5yb3dIZWlnaHRbUF08UyYmUD4wJiYoQj1TK2sudmVydGljYWxQYWRkaW5nLWsucm93SGVpZ2h0W1BdKTt2YXIgJDtrLndpZHRoLUY+PVIray5ob3Jpem9udGFsUGFkZGluZz8kPShrLmhlaWdodCtCKS8oRitSK2suaG9yaXpvbnRhbFBhZGRpbmcpOiQ9KGsuaGVpZ2h0K0IpL2sud2lkdGgsQj1TK2sudmVydGljYWxQYWRkaW5nO3ZhciB6O3JldHVybiBrLndpZHRoPFI/ej0oay5oZWlnaHQrQikvUjp6PShrLmhlaWdodCtCKS9rLndpZHRoLHo8MSYmKHo9MS96KSwkPDEmJigkPTEvJCksJDx6fSxJLnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdz1mdW5jdGlvbihrKXt2YXIgUj10aGlzLmdldExvbmdlc3RSb3dJbmRleChrKSxTPWsucm93V2lkdGgubGVuZ3RoLTEsTz1rLnJvd3NbUl0sTj1PW08ubGVuZ3RoLTFdLFA9Ti53aWR0aCtrLmhvcml6b250YWxQYWRkaW5nO2lmKGsud2lkdGgtay5yb3dXaWR0aFtTXT5QJiZSIT1TKXtPLnNwbGljZSgtMSwxKSxrLnJvd3NbU10ucHVzaChOKSxrLnJvd1dpZHRoW1JdPWsucm93V2lkdGhbUl0tUCxrLnJvd1dpZHRoW1NdPWsucm93V2lkdGhbU10rUCxrLndpZHRoPWsucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KGspXTtmb3IodmFyIEY9TnVtYmVyLk1JTl9WQUxVRSxCPTA7QjxPLmxlbmd0aDtCKyspT1tCXS5oZWlnaHQ+RiYmKEY9T1tCXS5oZWlnaHQpO1I+MCYmKEYrPWsudmVydGljYWxQYWRkaW5nKTt2YXIgJD1rLnJvd0hlaWdodFtSXStrLnJvd0hlaWdodFtTXTtrLnJvd0hlaWdodFtSXT1GLGsucm93SGVpZ2h0W1NdPE4uaGVpZ2h0K2sudmVydGljYWxQYWRkaW5nJiYoay5yb3dIZWlnaHRbU109Ti5oZWlnaHQray52ZXJ0aWNhbFBhZGRpbmcpO3ZhciB6PWsucm93SGVpZ2h0W1JdK2sucm93SGVpZ2h0W1NdO2suaGVpZ2h0Kz16LSQsdGhpcy5zaGlmdFRvTGFzdFJvdyhrKX19LEkucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe20uVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LEkucHJvdG90eXBlLnRpbGluZ1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXttLlRJTEUmJih0aGlzLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycygpLHRoaXMucmVwb3B1bGF0ZUNvbXBvdW5kcygpKX0sSS5wcm90b3R5cGUucmVkdWNlVHJlZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGs9W10sUj0hMCxTO1I7KXt2YXIgTz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLE49W107Uj0hMTtmb3IodmFyIFA9MDtQPE8ubGVuZ3RoO1ArKylpZihTPU9bUF0sUy5nZXRFZGdlcygpLmxlbmd0aD09MSYmIVMuZ2V0RWRnZXMoKVswXS5pc0ludGVyR3JhcGgmJlMuZ2V0Q2hpbGQoKT09bnVsbCl7aWYobS5QVVJFX0lOQ1JFTUVOVEFMKXt2YXIgRj1TLmdldEVkZ2VzKClbMF0uZ2V0T3RoZXJFbmQoUyksQj1uZXcgdyhTLmdldENlbnRlclgoKS1GLmdldENlbnRlclgoKSxTLmdldENlbnRlclkoKS1GLmdldENlbnRlclkoKSk7Ti5wdXNoKFtTLFMuZ2V0RWRnZXMoKVswXSxTLmdldE93bmVyKCksQl0pfWVsc2UgTi5wdXNoKFtTLFMuZ2V0RWRnZXMoKVswXSxTLmdldE93bmVyKCldKTtSPSEwfWlmKFI9PSEwKXtmb3IodmFyICQ9W10sej0wO3o8Ti5sZW5ndGg7eisrKU5bel1bMF0uZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJigkLnB1c2goTlt6XSksTlt6XVswXS5nZXRPd25lcigpLnJlbW92ZShOW3pdWzBdKSk7ay5wdXNoKCQpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9fXRoaXMucHJ1bmVkTm9kZXNBbGw9a30sSS5wcm90b3R5cGUuZ3Jvd1RyZWU9ZnVuY3Rpb24oayl7Zm9yKHZhciBSPWsubGVuZ3RoLFM9a1tSLTFdLE8sTj0wO048Uy5sZW5ndGg7TisrKU89U1tOXSx0aGlzLmZpbmRQbGFjZWZvclBydW5lZE5vZGUoTyksT1syXS5hZGQoT1swXSksT1syXS5hZGQoT1sxXSxPWzFdLnNvdXJjZSxPWzFdLnRhcmdldCk7ay5zcGxpY2Uoay5sZW5ndGgtMSwxKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfSxJLnByb3RvdHlwZS5maW5kUGxhY2Vmb3JQcnVuZWROb2RlPWZ1bmN0aW9uKGspe3ZhciBSLFMsTz1rWzBdO2lmKE89PWtbMV0uc291cmNlP1M9a1sxXS50YXJnZXQ6Uz1rWzFdLnNvdXJjZSxtLlBVUkVfSU5DUkVNRU5UQUwpTy5zZXRDZW50ZXIoUy5nZXRDZW50ZXJYKCkra1szXS5nZXRXaWR0aCgpLFMuZ2V0Q2VudGVyWSgpK2tbM10uZ2V0SGVpZ2h0KCkpO2Vsc2V7dmFyIE49Uy5zdGFydFgsUD1TLmZpbmlzaFgsRj1TLnN0YXJ0WSxCPVMuZmluaXNoWSwkPTAsej0wLFc9MCxqPTAsSz1bJCxXLHosal07aWYoRj4wKWZvcih2YXIgaWU9TjtpZTw9UDtpZSsrKUtbMF0rPXRoaXMuZ3JpZFtpZV1bRi0xXS5sZW5ndGgrdGhpcy5ncmlkW2llXVtGXS5sZW5ndGgtMTtpZihQPHRoaXMuZ3JpZC5sZW5ndGgtMSlmb3IodmFyIGllPUY7aWU8PUI7aWUrKylLWzFdKz10aGlzLmdyaWRbUCsxXVtpZV0ubGVuZ3RoK3RoaXMuZ3JpZFtQXVtpZV0ubGVuZ3RoLTE7aWYoQjx0aGlzLmdyaWRbMF0ubGVuZ3RoLTEpZm9yKHZhciBpZT1OO2llPD1QO2llKyspS1syXSs9dGhpcy5ncmlkW2llXVtCKzFdLmxlbmd0aCt0aGlzLmdyaWRbaWVdW0JdLmxlbmd0aC0xO2lmKE4+MClmb3IodmFyIGllPUY7aWU8PUI7aWUrKylLWzNdKz10aGlzLmdyaWRbTi0xXVtpZV0ubGVuZ3RoK3RoaXMuZ3JpZFtOXVtpZV0ubGVuZ3RoLTE7Zm9yKHZhciBRPVQuTUFYX1ZBTFVFLGVlLEosSD0wO0g8Sy5sZW5ndGg7SCsrKUtbSF08UT8oUT1LW0hdLGVlPTEsSj1IKTpLW0hdPT1RJiZlZSsrO2lmKGVlPT0zJiZRPT0wKUtbMF09PTAmJktbMV09PTAmJktbMl09PTA/Uj0xOktbMF09PTAmJktbMV09PTAmJktbM109PTA/Uj0wOktbMF09PTAmJktbMl09PTAmJktbM109PTA/Uj0zOktbMV09PTAmJktbMl09PTAmJktbM109PTAmJihSPTIpO2Vsc2UgaWYoZWU9PTImJlE9PTApe3ZhciBxPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtLWzBdPT0wJiZLWzFdPT0wP3E9PTA/Uj0wOlI9MTpLWzBdPT0wJiZLWzJdPT0wP3E9PTA/Uj0wOlI9MjpLWzBdPT0wJiZLWzNdPT0wP3E9PTA/Uj0wOlI9MzpLWzFdPT0wJiZLWzJdPT0wP3E9PTA/Uj0xOlI9MjpLWzFdPT0wJiZLWzNdPT0wP3E9PTA/Uj0xOlI9MzpxPT0wP1I9MjpSPTN9ZWxzZSBpZihlZT09NCYmUT09MCl7dmFyIHE9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpO1I9cX1lbHNlIFI9SjtSPT0wP08uc2V0Q2VudGVyKFMuZ2V0Q2VudGVyWCgpLFMuZ2V0Q2VudGVyWSgpLVMuZ2V0SGVpZ2h0KCkvMi15LkRFRkFVTFRfRURHRV9MRU5HVEgtTy5nZXRIZWlnaHQoKS8yKTpSPT0xP08uc2V0Q2VudGVyKFMuZ2V0Q2VudGVyWCgpK1MuZ2V0V2lkdGgoKS8yK3kuREVGQVVMVF9FREdFX0xFTkdUSCtPLmdldFdpZHRoKCkvMixTLmdldENlbnRlclkoKSk6Uj09Mj9PLnNldENlbnRlcihTLmdldENlbnRlclgoKSxTLmdldENlbnRlclkoKStTLmdldEhlaWdodCgpLzIreS5ERUZBVUxUX0VER0VfTEVOR1RIK08uZ2V0SGVpZ2h0KCkvMik6Ty5zZXRDZW50ZXIoUy5nZXRDZW50ZXJYKCktUy5nZXRXaWR0aCgpLzIteS5ERUZBVUxUX0VER0VfTEVOR1RILU8uZ2V0V2lkdGgoKS8yLFMuZ2V0Q2VudGVyWSgpKX19LGEuZXhwb3J0cz1JfSw5OTE6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5GRExheW91dE5vZGUsaD1sKDU1MSkuSU1hdGg7ZnVuY3Rpb24gZihwLG0sZyx5KXt1LmNhbGwodGhpcyxwLG0sZyx5KX1vKGYsIkNvU0VOb2RlIiksZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIHUpZltkXT11W2RdO2YucHJvdG90eXBlLmNhbGN1bGF0ZURpc3BsYWNlbWVudD1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZ2V0Q2hpbGQoKSE9bnVsbCYmdGhpcy5maXhlZE5vZGVXZWlnaHQ/KHRoaXMuZGlzcGxhY2VtZW50WCs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWCt0aGlzLnJlcHVsc2lvbkZvcmNlWCt0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKS90aGlzLmZpeGVkTm9kZVdlaWdodCx0aGlzLmRpc3BsYWNlbWVudFkrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5maXhlZE5vZGVXZWlnaHQpOih0aGlzLmRpc3BsYWNlbWVudFgrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5ub09mQ2hpbGRyZW4sdGhpcy5kaXNwbGFjZW1lbnRZKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpPnAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFg9cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCpoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKSksTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKT5wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRZPXAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQqaC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSkpLHRoaXMuY2hpbGQmJnRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg+MCYmdGhpcy5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpfSxmLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKHAsbSl7Zm9yKHZhciBnPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHksdj0wO3Y8Zy5sZW5ndGg7disrKXk9Z1t2XSx5LmdldENoaWxkKCk9PW51bGw/KHkuZGlzcGxhY2VtZW50WCs9cCx5LmRpc3BsYWNlbWVudFkrPW0pOnkucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbihwLG0pfSxmLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7KHRoaXMuY2hpbGQ9PW51bGx8fHRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg9PTApJiYodGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSkscC50b3RhbERpc3BsYWNlbWVudCs9TWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKStNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTB9LGYucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKHApe3RoaXMucHJlZDE9cH0sZi5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LGYucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxmLnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKHApe3RoaXMubmV4dD1wfSxmLnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LGYucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbihwKXt0aGlzLnByb2Nlc3NlZD1wfSxmLnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LGEuZXhwb3J0cz1mfSw5MDI6KGEscyxsKT0+e2Z1bmN0aW9uIHUoZyl7aWYoQXJyYXkuaXNBcnJheShnKSl7Zm9yKHZhciB5PTAsdj1BcnJheShnLmxlbmd0aCk7eTxnLmxlbmd0aDt5Kyspdlt5XT1nW3ldO3JldHVybiB2fWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZyl9byh1LCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaD1sKDgwNiksZj1sKDU1MSkuTGlua2VkTGlzdCxkPWwoNTUxKS5NYXRyaXgscD1sKDU1MSkuU1ZEO2Z1bmN0aW9uIG0oKXt9byhtLCJDb25zdHJhaW50SGFuZGxlciIpLG0uaGFuZGxlQ29uc3RyYWludHM9ZnVuY3Rpb24oZyl7dmFyIHk9e307eS5maXhlZE5vZGVDb25zdHJhaW50PWcuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCx5LmFsaWdubWVudENvbnN0cmFpbnQ9Zy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50PWcuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50O2Zvcih2YXIgdj1uZXcgTWFwLHg9bmV3IE1hcCxiPVtdLHc9W10sXz1nLmdldEFsbE5vZGVzKCksVD0wLEU9MDtFPF8ubGVuZ3RoO0UrKyl7dmFyIEw9X1tFXTtMLmdldENoaWxkKCk9PW51bGwmJih4LnNldChMLmlkLFQrKyksYi5wdXNoKEwuZ2V0Q2VudGVyWCgpKSx3LnB1c2goTC5nZXRDZW50ZXJZKCkpLHYuc2V0KEwuaWQsTCkpfXkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiZ5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKHllKXsheWUuZ2FwJiZ5ZS5nYXAhPTAmJih5ZS5sZWZ0P3llLmdhcD1oLkRFRkFVTFRfRURHRV9MRU5HVEgrdi5nZXQoeWUubGVmdCkuZ2V0V2lkdGgoKS8yK3YuZ2V0KHllLnJpZ2h0KS5nZXRXaWR0aCgpLzI6eWUuZ2FwPWguREVGQVVMVF9FREdFX0xFTkdUSCt2LmdldCh5ZS50b3ApLmdldEhlaWdodCgpLzIrdi5nZXQoeWUuYm90dG9tKS5nZXRIZWlnaHQoKS8yKX0pO3ZhciBDPW8oZnVuY3Rpb24oVSxUZSl7cmV0dXJue3g6VS54LVRlLngseTpVLnktVGUueX19LCJjYWxjdWxhdGVQb3NpdGlvbkRpZmYiKSxBPW8oZnVuY3Rpb24oVSl7dmFyIFRlPTAsc2U9MDtyZXR1cm4gVS5mb3JFYWNoKGZ1bmN0aW9uKEVlKXtUZSs9Ylt4LmdldChFZSldLHNlKz13W3guZ2V0KEVlKV19KSx7eDpUZS9VLnNpemUseTpzZS9VLnNpemV9fSwiY2FsY3VsYXRlQXZnUG9zaXRpb24iKSxJPW8oZnVuY3Rpb24oVSxUZSxzZSxFZSxBZSl7ZnVuY3Rpb24gUGUodnQsWWUpe3ZhciBUdD1uZXcgU2V0KHZ0KSwkZT0hMCxydD0hMSxmdD12b2lkIDA7dHJ5e2Zvcih2YXIga3Q9WWVbU3ltYm9sLml0ZXJhdG9yXSgpLGVyOyEoJGU9KGVyPWt0Lm5leHQoKSkuZG9uZSk7JGU9ITApe3ZhciBkdD1lci52YWx1ZTtUdC5hZGQoZHQpfX1jYXRjaChYZSl7cnQ9ITAsZnQ9WGV9ZmluYWxseXt0cnl7ISRlJiZrdC5yZXR1cm4mJmt0LnJldHVybigpfWZpbmFsbHl7aWYocnQpdGhyb3cgZnR9fXJldHVybiBUdH1vKFBlLCJzZXRVbmlvbiIpO3ZhciBNZT1uZXcgTWFwO1UuZm9yRWFjaChmdW5jdGlvbih2dCxZZSl7TWUuc2V0KFllLDApfSksVS5mb3JFYWNoKGZ1bmN0aW9uKHZ0LFllKXt2dC5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtNZS5zZXQoVHQuaWQsTWUuZ2V0KFR0LmlkKSsxKX0pfSk7dmFyIG1lPW5ldyBNYXAsV2U9bmV3IE1hcCxSZT1uZXcgZjtNZS5mb3JFYWNoKGZ1bmN0aW9uKHZ0LFllKXt2dD09MD8oUmUucHVzaChZZSksc2V8fChUZT09Imhvcml6b250YWwiP21lLnNldChZZSx4LmhhcyhZZSk/Ylt4LmdldChZZSldOkVlLmdldChZZSkpOm1lLnNldChZZSx4LmhhcyhZZSk/d1t4LmdldChZZSldOkVlLmdldChZZSkpKSk6bWUuc2V0KFllLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSksc2UmJldlLnNldChZZSxuZXcgU2V0KFtZZV0pKX0pLHNlJiZBZS5mb3JFYWNoKGZ1bmN0aW9uKHZ0KXt2YXIgWWU9W107aWYodnQuZm9yRWFjaChmdW5jdGlvbihydCl7c2UuaGFzKHJ0KSYmWWUucHVzaChydCl9KSxZZS5sZW5ndGg+MCl7dmFyIFR0PTA7WWUuZm9yRWFjaChmdW5jdGlvbihydCl7VGU9PSJob3Jpem9udGFsIj8obWUuc2V0KHJ0LHguaGFzKHJ0KT9iW3guZ2V0KHJ0KV06RWUuZ2V0KHJ0KSksVHQrPW1lLmdldChydCkpOihtZS5zZXQocnQseC5oYXMocnQpP3dbeC5nZXQocnQpXTpFZS5nZXQocnQpKSxUdCs9bWUuZ2V0KHJ0KSl9KSxUdD1UdC9ZZS5sZW5ndGgsdnQuZm9yRWFjaChmdW5jdGlvbihydCl7c2UuaGFzKHJ0KXx8bWUuc2V0KHJ0LFR0KX0pfWVsc2V7dmFyICRlPTA7dnQuZm9yRWFjaChmdW5jdGlvbihydCl7VGU9PSJob3Jpem9udGFsIj8kZSs9eC5oYXMocnQpP2JbeC5nZXQocnQpXTpFZS5nZXQocnQpOiRlKz14LmhhcyhydCk/d1t4LmdldChydCldOkVlLmdldChydCl9KSwkZT0kZS92dC5sZW5ndGgsdnQuZm9yRWFjaChmdW5jdGlvbihydCl7bWUuc2V0KHJ0LCRlKX0pfX0pO2Zvcih2YXIgdHQ9byhmdW5jdGlvbigpe3ZhciBZZT1SZS5zaGlmdCgpLFR0PVUuZ2V0KFllKTtUdC5mb3JFYWNoKGZ1bmN0aW9uKCRlKXtpZihtZS5nZXQoJGUuaWQpPG1lLmdldChZZSkrJGUuZ2FwKWlmKHNlJiZzZS5oYXMoJGUuaWQpKXt2YXIgcnQ9dm9pZCAwO2lmKFRlPT0iaG9yaXpvbnRhbCI/cnQ9eC5oYXMoJGUuaWQpP2JbeC5nZXQoJGUuaWQpXTpFZS5nZXQoJGUuaWQpOnJ0PXguaGFzKCRlLmlkKT93W3guZ2V0KCRlLmlkKV06RWUuZ2V0KCRlLmlkKSxtZS5zZXQoJGUuaWQscnQpLHJ0PG1lLmdldChZZSkrJGUuZ2FwKXt2YXIgZnQ9bWUuZ2V0KFllKSskZS5nYXAtcnQ7V2UuZ2V0KFllKS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXttZS5zZXQoa3QsbWUuZ2V0KGt0KS1mdCl9KX19ZWxzZSBtZS5zZXQoJGUuaWQsbWUuZ2V0KFllKSskZS5nYXApO01lLnNldCgkZS5pZCxNZS5nZXQoJGUuaWQpLTEpLE1lLmdldCgkZS5pZCk9PTAmJlJlLnB1c2goJGUuaWQpLHNlJiZXZS5zZXQoJGUuaWQsUGUoV2UuZ2V0KFllKSxXZS5nZXQoJGUuaWQpKSl9KX0sIl9sb29wIik7UmUubGVuZ3RoIT0wOyl0dCgpO2lmKHNlKXt2YXIgZ3Q9bmV3IFNldDtVLmZvckVhY2goZnVuY3Rpb24odnQsWWUpe3Z0Lmxlbmd0aD09MCYmZ3QuYWRkKFllKX0pO3ZhciBFdD1bXTtXZS5mb3JFYWNoKGZ1bmN0aW9uKHZ0LFllKXtpZihndC5oYXMoWWUpKXt2YXIgVHQ9ITEsJGU9ITAscnQ9ITEsZnQ9dm9pZCAwO3RyeXtmb3IodmFyIGt0PXZ0W1N5bWJvbC5pdGVyYXRvcl0oKSxlcjshKCRlPShlcj1rdC5uZXh0KCkpLmRvbmUpOyRlPSEwKXt2YXIgZHQ9ZXIudmFsdWU7c2UuaGFzKGR0KSYmKFR0PSEwKX19Y2F0Y2goTHQpe3J0PSEwLGZ0PUx0fWZpbmFsbHl7dHJ5eyEkZSYma3QucmV0dXJuJiZrdC5yZXR1cm4oKX1maW5hbGx5e2lmKHJ0KXRocm93IGZ0fX1pZighVHQpe3ZhciBYZT0hMSxjdD12b2lkIDA7RXQuZm9yRWFjaChmdW5jdGlvbihMdCxSdCl7THQuaGFzKFtdLmNvbmNhdCh1KHZ0KSlbMF0pJiYoWGU9ITAsY3Q9UnQpfSksWGU/dnQuZm9yRWFjaChmdW5jdGlvbihMdCl7RXRbY3RdLmFkZChMdCl9KTpFdC5wdXNoKG5ldyBTZXQodnQpKX19fSksRXQuZm9yRWFjaChmdW5jdGlvbih2dCxZZSl7dmFyIFR0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSwkZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscnQ9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGZ0PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxrdD0hMCxlcj0hMSxkdD12b2lkIDA7dHJ5e2Zvcih2YXIgWGU9dnRbU3ltYm9sLml0ZXJhdG9yXSgpLGN0OyEoa3Q9KGN0PVhlLm5leHQoKSkuZG9uZSk7a3Q9ITApe3ZhciBMdD1jdC52YWx1ZSxSdD12b2lkIDA7VGU9PSJob3Jpem9udGFsIj9SdD14LmhhcyhMdCk/Ylt4LmdldChMdCldOkVlLmdldChMdCk6UnQ9eC5oYXMoTHQpP3dbeC5nZXQoTHQpXTpFZS5nZXQoTHQpO3ZhciB6dD1tZS5nZXQoTHQpO1J0PFR0JiYoVHQ9UnQpLFJ0PnJ0JiYocnQ9UnQpLHp0PCRlJiYoJGU9enQpLHp0PmZ0JiYoZnQ9enQpfX1jYXRjaCh5dCl7ZXI9ITAsZHQ9eXR9ZmluYWxseXt0cnl7IWt0JiZYZS5yZXR1cm4mJlhlLnJldHVybigpfWZpbmFsbHl7aWYoZXIpdGhyb3cgZHR9fXZhciBYbj0oVHQrcnQpLzItKCRlK2Z0KS8yLG9yPSEwLGhuPSExLFRuPXZvaWQgMDt0cnl7Zm9yKHZhciBVcj12dFtTeW1ib2wuaXRlcmF0b3JdKCkscmk7IShvcj0ocmk9VXIubmV4dCgpKS5kb25lKTtvcj0hMCl7dmFyIE1uPXJpLnZhbHVlO21lLnNldChNbixtZS5nZXQoTW4pK1huKX19Y2F0Y2goeXQpe2huPSEwLFRuPXl0fWZpbmFsbHl7dHJ5eyFvciYmVXIucmV0dXJuJiZVci5yZXR1cm4oKX1maW5hbGx5e2lmKGhuKXRocm93IFRufX19KX1yZXR1cm4gbWV9LCJmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50IiksRD1vKGZ1bmN0aW9uKFUpe3ZhciBUZT0wLHNlPTAsRWU9MCxBZT0wO2lmKFUuZm9yRWFjaChmdW5jdGlvbihXZSl7V2UubGVmdD9iW3guZ2V0KFdlLmxlZnQpXS1iW3guZ2V0KFdlLnJpZ2h0KV0+PTA/VGUrKzpzZSsrOndbeC5nZXQoV2UudG9wKV0td1t4LmdldChXZS5ib3R0b20pXT49MD9FZSsrOkFlKyt9KSxUZT5zZSYmRWU+QWUpZm9yKHZhciBQZT0wO1BlPHguc2l6ZTtQZSsrKWJbUGVdPS0xKmJbUGVdLHdbUGVdPS0xKndbUGVdO2Vsc2UgaWYoVGU+c2UpZm9yKHZhciBNZT0wO01lPHguc2l6ZTtNZSsrKWJbTWVdPS0xKmJbTWVdO2Vsc2UgaWYoRWU+QWUpZm9yKHZhciBtZT0wO21lPHguc2l6ZTttZSsrKXdbbWVdPS0xKndbbWVdfSwiYXBwbHlSZWZsZWN0aW9uRm9yUmVsYXRpdmVQbGFjZW1lbnQiKSxrPW8oZnVuY3Rpb24oVSl7dmFyIFRlPVtdLHNlPW5ldyBmLEVlPW5ldyBTZXQsQWU9MDtyZXR1cm4gVS5mb3JFYWNoKGZ1bmN0aW9uKFBlLE1lKXtpZighRWUuaGFzKE1lKSl7VGVbQWVdPVtdO3ZhciBtZT1NZTtmb3Ioc2UucHVzaChtZSksRWUuYWRkKG1lKSxUZVtBZV0ucHVzaChtZSk7c2UubGVuZ3RoIT0wOyl7bWU9c2Uuc2hpZnQoKTt2YXIgV2U9VS5nZXQobWUpO1dlLmZvckVhY2goZnVuY3Rpb24oUmUpe0VlLmhhcyhSZS5pZCl8fChzZS5wdXNoKFJlLmlkKSxFZS5hZGQoUmUuaWQpLFRlW0FlXS5wdXNoKFJlLmlkKSl9KX1BZSsrfX0pLFRlfSwiZmluZENvbXBvbmVudHMiKSxSPW8oZnVuY3Rpb24oVSl7dmFyIFRlPW5ldyBNYXA7cmV0dXJuIFUuZm9yRWFjaChmdW5jdGlvbihzZSxFZSl7VGUuc2V0KEVlLFtdKX0pLFUuZm9yRWFjaChmdW5jdGlvbihzZSxFZSl7c2UuZm9yRWFjaChmdW5jdGlvbihBZSl7VGUuZ2V0KEVlKS5wdXNoKEFlKSxUZS5nZXQoQWUuaWQpLnB1c2goe2lkOkVlLGdhcDpBZS5nYXAsZGlyZWN0aW9uOkFlLmRpcmVjdGlvbn0pfSl9KSxUZX0sImRhZ1RvVW5kaXJlY3RlZCIpLFM9byhmdW5jdGlvbihVKXt2YXIgVGU9bmV3IE1hcDtyZXR1cm4gVS5mb3JFYWNoKGZ1bmN0aW9uKHNlLEVlKXtUZS5zZXQoRWUsW10pfSksVS5mb3JFYWNoKGZ1bmN0aW9uKHNlLEVlKXtzZS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtUZS5nZXQoQWUuaWQpLnB1c2goe2lkOkVlLGdhcDpBZS5nYXAsZGlyZWN0aW9uOkFlLmRpcmVjdGlvbn0pfSl9KSxUZX0sImRhZ1RvUmV2ZXJzZWQiKSxPPVtdLE49W10sUD0hMSxGPSExLEI9bmV3IFNldCwkPW5ldyBNYXAsej1uZXcgTWFwLFc9W107aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbih5ZSl7Qi5hZGQoeWUubm9kZUlkKX0pLHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbih5ZSl7eWUubGVmdD8oJC5oYXMoeWUubGVmdCk/JC5nZXQoeWUubGVmdCkucHVzaCh7aWQ6eWUucmlnaHQsZ2FwOnllLmdhcCxkaXJlY3Rpb246Imhvcml6b250YWwifSk6JC5zZXQoeWUubGVmdCxbe2lkOnllLnJpZ2h0LGdhcDp5ZS5nYXAsZGlyZWN0aW9uOiJob3Jpem9udGFsIn1dKSwkLmhhcyh5ZS5yaWdodCl8fCQuc2V0KHllLnJpZ2h0LFtdKSk6KCQuaGFzKHllLnRvcCk/JC5nZXQoeWUudG9wKS5wdXNoKHtpZDp5ZS5ib3R0b20sZ2FwOnllLmdhcCxkaXJlY3Rpb246InZlcnRpY2FsIn0pOiQuc2V0KHllLnRvcCxbe2lkOnllLmJvdHRvbSxnYXA6eWUuZ2FwLGRpcmVjdGlvbjoidmVydGljYWwifV0pLCQuaGFzKHllLmJvdHRvbSl8fCQuc2V0KHllLmJvdHRvbSxbXSkpfSksej1SKCQpLFc9ayh6KSksaC5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORyl7aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoPjEpeS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oeWUsVSl7T1tVXT1beWUucG9zaXRpb24ueCx5ZS5wb3NpdGlvbi55XSxOW1VdPVtiW3guZ2V0KHllLm5vZGVJZCldLHdbeC5nZXQoeWUubm9kZUlkKV1dfSksUD0hMDtlbHNlIGlmKHkuYWxpZ25tZW50Q29uc3RyYWludCkoZnVuY3Rpb24oKXt2YXIgeWU9MDtpZih5LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpe2Zvcih2YXIgVT15LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsVGU9byhmdW5jdGlvbihtZSl7dmFyIFdlPW5ldyBTZXQ7VVttZV0uZm9yRWFjaChmdW5jdGlvbihndCl7V2UuYWRkKGd0KX0pO3ZhciBSZT1uZXcgU2V0KFtdLmNvbmNhdCh1KFdlKSkuZmlsdGVyKGZ1bmN0aW9uKGd0KXtyZXR1cm4gQi5oYXMoZ3QpfSkpLHR0PXZvaWQgMDtSZS5zaXplPjA/dHQ9Ylt4LmdldChSZS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTp0dD1BKFdlKS54LFVbbWVdLmZvckVhY2goZnVuY3Rpb24oZ3Qpe09beWVdPVt0dCx3W3guZ2V0KGd0KV1dLE5beWVdPVtiW3guZ2V0KGd0KV0sd1t4LmdldChndCldXSx5ZSsrfSl9LCJfbG9vcDIiKSxzZT0wO3NlPFUubGVuZ3RoO3NlKyspVGUoc2UpO1A9ITB9aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpe2Zvcih2YXIgRWU9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsQWU9byhmdW5jdGlvbihtZSl7dmFyIFdlPW5ldyBTZXQ7RWVbbWVdLmZvckVhY2goZnVuY3Rpb24oZ3Qpe1dlLmFkZChndCl9KTt2YXIgUmU9bmV3IFNldChbXS5jb25jYXQodShXZSkpLmZpbHRlcihmdW5jdGlvbihndCl7cmV0dXJuIEIuaGFzKGd0KX0pKSx0dD12b2lkIDA7UmUuc2l6ZT4wP3R0PWJbeC5nZXQoUmUudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06dHQ9QShXZSkueSxFZVttZV0uZm9yRWFjaChmdW5jdGlvbihndCl7T1t5ZV09W2JbeC5nZXQoZ3QpXSx0dF0sTlt5ZV09W2JbeC5nZXQoZ3QpXSx3W3guZ2V0KGd0KV1dLHllKyt9KX0sIl9sb29wMyIpLFBlPTA7UGU8RWUubGVuZ3RoO1BlKyspQWUoUGUpO1A9ITB9eS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJihGPSEwKX0pKCk7ZWxzZSBpZih5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl7Zm9yKHZhciBqPTAsSz0wLGllPTA7aWU8Vy5sZW5ndGg7aWUrKylXW2llXS5sZW5ndGg+aiYmKGo9V1tpZV0ubGVuZ3RoLEs9aWUpO2lmKGo8ei5zaXplLzIpRCh5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCksUD0hMSxGPSExO2Vsc2V7dmFyIFE9bmV3IE1hcCxlZT1uZXcgTWFwLEo9W107V1tLXS5mb3JFYWNoKGZ1bmN0aW9uKHllKXskLmdldCh5ZSkuZm9yRWFjaChmdW5jdGlvbihVKXtVLmRpcmVjdGlvbj09Imhvcml6b250YWwiPyhRLmhhcyh5ZSk/US5nZXQoeWUpLnB1c2goVSk6US5zZXQoeWUsW1VdKSxRLmhhcyhVLmlkKXx8US5zZXQoVS5pZCxbXSksSi5wdXNoKHtsZWZ0OnllLHJpZ2h0OlUuaWR9KSk6KGVlLmhhcyh5ZSk/ZWUuZ2V0KHllKS5wdXNoKFUpOmVlLnNldCh5ZSxbVV0pLGVlLmhhcyhVLmlkKXx8ZWUuc2V0KFUuaWQsW10pLEoucHVzaCh7dG9wOnllLGJvdHRvbTpVLmlkfSkpfSl9KSxEKEopLEY9ITE7dmFyIEg9SShRLCJob3Jpem9udGFsIikscT1JKGVlLCJ2ZXJ0aWNhbCIpO1dbS10uZm9yRWFjaChmdW5jdGlvbih5ZSxVKXtOW1VdPVtiW3guZ2V0KHllKV0sd1t4LmdldCh5ZSldXSxPW1VdPVtdLEguaGFzKHllKT9PW1VdWzBdPUguZ2V0KHllKTpPW1VdWzBdPWJbeC5nZXQoeWUpXSxxLmhhcyh5ZSk/T1tVXVsxXT1xLmdldCh5ZSk6T1tVXVsxXT13W3guZ2V0KHllKV19KSxQPSEwfX1pZihQKXtmb3IodmFyIFo9dm9pZCAwLGFlPWQudHJhbnNwb3NlKE8pLHVlPWQudHJhbnNwb3NlKE4pLGNlPTA7Y2U8YWUubGVuZ3RoO2NlKyspYWVbY2VdPWQubXVsdEdhbW1hKGFlW2NlXSksdWVbY2VdPWQubXVsdEdhbW1hKHVlW2NlXSk7dmFyIHRlPWQubXVsdE1hdChhZSxkLnRyYW5zcG9zZSh1ZSkpLERlPXAuc3ZkKHRlKTtaPWQubXVsdE1hdChEZS5WLGQudHJhbnNwb3NlKERlLlUpKTtmb3IodmFyIG9lPTA7b2U8eC5zaXplO29lKyspe3ZhciBrZT1bYltvZV0sd1tvZV1dLEZlPVtaWzBdWzBdLFpbMV1bMF1dLEJlPVtaWzBdWzFdLFpbMV1bMV1dO2Jbb2VdPWQuZG90UHJvZHVjdChrZSxGZSksd1tvZV09ZC5kb3RQcm9kdWN0KGtlLEJlKX1GJiZEKHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KX19aWYoaC5FTkZPUkNFX0NPTlNUUkFJTlRTKXtpZih5LmZpeGVkTm9kZUNvbnN0cmFpbnQmJnkuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGg+MCl7dmFyIFZlPXt4OjAseTowfTt5LmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbih5ZSxVKXt2YXIgVGU9e3g6Ylt4LmdldCh5ZS5ub2RlSWQpXSx5OndbeC5nZXQoeWUubm9kZUlkKV19LHNlPXllLnBvc2l0aW9uLEVlPUMoc2UsVGUpO1ZlLngrPUVlLngsVmUueSs9RWUueX0pLFZlLngvPXkuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGgsVmUueS89eS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aCxiLmZvckVhY2goZnVuY3Rpb24oeWUsVSl7YltVXSs9VmUueH0pLHcuZm9yRWFjaChmdW5jdGlvbih5ZSxVKXt3W1VdKz1WZS55fSkseS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oeWUpe2JbeC5nZXQoeWUubm9kZUlkKV09eWUucG9zaXRpb24ueCx3W3guZ2V0KHllLm5vZGVJZCldPXllLnBvc2l0aW9uLnl9KX1pZih5LmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIEdlPXkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxIZT1vKGZ1bmN0aW9uKFUpe3ZhciBUZT1uZXcgU2V0O0dlW1VdLmZvckVhY2goZnVuY3Rpb24oQWUpe1RlLmFkZChBZSl9KTt2YXIgc2U9bmV3IFNldChbXS5jb25jYXQodShUZSkpLmZpbHRlcihmdW5jdGlvbihBZSl7cmV0dXJuIEIuaGFzKEFlKX0pKSxFZT12b2lkIDA7c2Uuc2l6ZT4wP0VlPWJbeC5nZXQoc2UudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06RWU9QShUZSkueCxUZS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtCLmhhcyhBZSl8fChiW3guZ2V0KEFlKV09RWUpfSl9LCJfbG9vcDQiKSx4ZT0wO3hlPEdlLmxlbmd0aDt4ZSsrKUhlKHhlKTtpZih5LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbClmb3IodmFyIFg9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsZmU9byhmdW5jdGlvbihVKXt2YXIgVGU9bmV3IFNldDtYW1VdLmZvckVhY2goZnVuY3Rpb24oQWUpe1RlLmFkZChBZSl9KTt2YXIgc2U9bmV3IFNldChbXS5jb25jYXQodShUZSkpLmZpbHRlcihmdW5jdGlvbihBZSl7cmV0dXJuIEIuaGFzKEFlKX0pKSxFZT12b2lkIDA7c2Uuc2l6ZT4wP0VlPXdbeC5nZXQoc2UudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06RWU9QShUZSkueSxUZS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtCLmhhcyhBZSl8fCh3W3guZ2V0KEFlKV09RWUpfSl9LCJfbG9vcDUiKSxoZT0wO2hlPFgubGVuZ3RoO2hlKyspZmUoaGUpfXkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiZmdW5jdGlvbigpe3ZhciB5ZT1uZXcgTWFwLFU9bmV3IE1hcCxUZT1uZXcgTWFwLHNlPW5ldyBNYXAsRWU9bmV3IE1hcCxBZT1uZXcgTWFwLFBlPW5ldyBTZXQsTWU9bmV3IFNldDtpZihCLmZvckVhY2goZnVuY3Rpb24oYnQpe1BlLmFkZChidCksTWUuYWRkKGJ0KX0pLHkuYWxpZ25tZW50Q29uc3RyYWludCl7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKWZvcih2YXIgbWU9eS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLFdlPW8oZnVuY3Rpb24oVWUpe1RlLnNldCgiZHVtbXkiK1VlLFtdKSxtZVtVZV0uZm9yRWFjaChmdW5jdGlvbihLdCl7eWUuc2V0KEt0LCJkdW1teSIrVWUpLFRlLmdldCgiZHVtbXkiK1VlKS5wdXNoKEt0KSxCLmhhcyhLdCkmJlBlLmFkZCgiZHVtbXkiK1VlKX0pLEVlLnNldCgiZHVtbXkiK1VlLGJbeC5nZXQobWVbVWVdWzBdKV0pfSwiX2xvb3A2IiksUmU9MDtSZTxtZS5sZW5ndGg7UmUrKylXZShSZSk7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpZm9yKHZhciB0dD15LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxndD1vKGZ1bmN0aW9uKFVlKXtzZS5zZXQoImR1bW15IitVZSxbXSksdHRbVWVdLmZvckVhY2goZnVuY3Rpb24oS3Qpe1Uuc2V0KEt0LCJkdW1teSIrVWUpLHNlLmdldCgiZHVtbXkiK1VlKS5wdXNoKEt0KSxCLmhhcyhLdCkmJk1lLmFkZCgiZHVtbXkiK1VlKX0pLEFlLnNldCgiZHVtbXkiK1VlLHdbeC5nZXQodHRbVWVdWzBdKV0pfSwiX2xvb3A3IiksRXQ9MDtFdDx0dC5sZW5ndGg7RXQrKylndChFdCl9dmFyIHZ0PW5ldyBNYXAsWWU9bmV3IE1hcCxUdD1vKGZ1bmN0aW9uKFVlKXskLmdldChVZSkuZm9yRWFjaChmdW5jdGlvbihLdCl7dmFyIHBlPXZvaWQgMCxiaT12b2lkIDA7S3QuZGlyZWN0aW9uPT0iaG9yaXpvbnRhbCI/KHBlPXllLmdldChVZSk/eWUuZ2V0KFVlKTpVZSx5ZS5nZXQoS3QuaWQpP2JpPXtpZDp5ZS5nZXQoS3QuaWQpLGdhcDpLdC5nYXAsZGlyZWN0aW9uOkt0LmRpcmVjdGlvbn06Ymk9S3QsdnQuaGFzKHBlKT92dC5nZXQocGUpLnB1c2goYmkpOnZ0LnNldChwZSxbYmldKSx2dC5oYXMoYmkuaWQpfHx2dC5zZXQoYmkuaWQsW10pKToocGU9VS5nZXQoVWUpP1UuZ2V0KFVlKTpVZSxVLmdldChLdC5pZCk/Ymk9e2lkOlUuZ2V0KEt0LmlkKSxnYXA6S3QuZ2FwLGRpcmVjdGlvbjpLdC5kaXJlY3Rpb259OmJpPUt0LFllLmhhcyhwZSk/WWUuZ2V0KHBlKS5wdXNoKGJpKTpZZS5zZXQocGUsW2JpXSksWWUuaGFzKGJpLmlkKXx8WWUuc2V0KGJpLmlkLFtdKSl9KX0sIl9sb29wOCIpLCRlPSEwLHJ0PSExLGZ0PXZvaWQgMDt0cnl7Zm9yKHZhciBrdD0kLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksZXI7ISgkZT0oZXI9a3QubmV4dCgpKS5kb25lKTskZT0hMCl7dmFyIGR0PWVyLnZhbHVlO1R0KGR0KX19Y2F0Y2goYnQpe3J0PSEwLGZ0PWJ0fWZpbmFsbHl7dHJ5eyEkZSYma3QucmV0dXJuJiZrdC5yZXR1cm4oKX1maW5hbGx5e2lmKHJ0KXRocm93IGZ0fX12YXIgWGU9Uih2dCksY3Q9UihZZSksTHQ9ayhYZSksUnQ9ayhjdCksenQ9Uyh2dCksWG49UyhZZSksb3I9W10saG49W107THQuZm9yRWFjaChmdW5jdGlvbihidCxVZSl7b3JbVWVdPVtdLGJ0LmZvckVhY2goZnVuY3Rpb24oS3Qpe3p0LmdldChLdCkubGVuZ3RoPT0wJiZvcltVZV0ucHVzaChLdCl9KX0pLFJ0LmZvckVhY2goZnVuY3Rpb24oYnQsVWUpe2huW1VlXT1bXSxidC5mb3JFYWNoKGZ1bmN0aW9uKEt0KXtYbi5nZXQoS3QpLmxlbmd0aD09MCYmaG5bVWVdLnB1c2goS3QpfSl9KTt2YXIgVG49SSh2dCwiaG9yaXpvbnRhbCIsUGUsRWUsb3IpLFVyPUkoWWUsInZlcnRpY2FsIixNZSxBZSxobikscmk9byhmdW5jdGlvbihVZSl7VGUuZ2V0KFVlKT9UZS5nZXQoVWUpLmZvckVhY2goZnVuY3Rpb24oS3Qpe2JbeC5nZXQoS3QpXT1Ubi5nZXQoVWUpfSk6Ylt4LmdldChVZSldPVRuLmdldChVZSl9LCJfbG9vcDkiKSxNbj0hMCx5dD0hMSxTZT12b2lkIDA7dHJ5e2Zvcih2YXIgYXQ9VG4ua2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSxBdDshKE1uPShBdD1hdC5uZXh0KCkpLmRvbmUpO01uPSEwKXt2YXIgcHI9QXQudmFsdWU7cmkocHIpfX1jYXRjaChidCl7eXQ9ITAsU2U9YnR9ZmluYWxseXt0cnl7IU1uJiZhdC5yZXR1cm4mJmF0LnJldHVybigpfWZpbmFsbHl7aWYoeXQpdGhyb3cgU2V9fXZhciBJbj1vKGZ1bmN0aW9uKFVlKXtzZS5nZXQoVWUpP3NlLmdldChVZSkuZm9yRWFjaChmdW5jdGlvbihLdCl7d1t4LmdldChLdCldPVVyLmdldChVZSl9KTp3W3guZ2V0KFVlKV09VXIuZ2V0KFVlKX0sIl9sb29wMTAiKSxPbj0hMCxJcj0hMSxrbj12b2lkIDA7dHJ5e2Zvcih2YXIgX3Q9VXIua2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSxTdDshKE9uPShTdD1fdC5uZXh0KCkpLmRvbmUpO09uPSEwKXt2YXIgcHI9U3QudmFsdWU7SW4ocHIpfX1jYXRjaChidCl7SXI9ITAsa249YnR9ZmluYWxseXt0cnl7IU9uJiZfdC5yZXR1cm4mJl90LnJldHVybigpfWZpbmFsbHl7aWYoSXIpdGhyb3cga259fX0oKX1mb3IodmFyIGdlPTA7Z2U8Xy5sZW5ndGg7Z2UrKyl7dmFyIG5lPV9bZ2VdO25lLmdldENoaWxkKCk9PW51bGwmJm5lLnNldENlbnRlcihiW3guZ2V0KG5lLmlkKV0sd1t4LmdldChuZS5pZCldKX19LGEuZXhwb3J0cz1tfSw1NTE6YT0+e2EuZXhwb3J0cz10fX0scj17fTtmdW5jdGlvbiBuKGEpe3ZhciBzPXJbYV07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBsPXJbYV09e2V4cG9ydHM6e319O3JldHVybiBlW2FdKGwsbC5leHBvcnRzLG4pLGwuZXhwb3J0c31vKG4sIl9fd2VicGFja19yZXF1aXJlX18iKTt2YXIgaT1uKDQ1KTtyZXR1cm4gaX0pKCl9KX0pO3ZhciBjMmU9TmkoKGJiLHBGKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIGJiPT0ib2JqZWN0IiYmdHlwZW9mIHBGPT0ib2JqZWN0Ij9wRi5leHBvcnRzPXIoZEYoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJjb3NlLWJhc2UiXSxyKTp0eXBlb2YgYmI9PSJvYmplY3QiP2JiLmN5dG9zY2FwZUZjb3NlPXIoZEYoKSk6ZS5jeXRvc2NhcGVGY29zZT1yKGUuY29zZUJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShiYixmdW5jdGlvbih0KXtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIGU9ezY1ODphPT57YS5leHBvcnRzPU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24ocyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShsPjE/bC0xOjApLGg9MTtoPGw7aCsrKXVbaC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihmKXtPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3JldHVybiBzW2RdPWZbZF19KX0pLHN9fSw1NDg6KGEscyxsKT0+e3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZChwLG0pe3ZhciBnPVtdLHk9ITAsdj0hMSx4PXZvaWQgMDt0cnl7Zm9yKHZhciBiPXBbU3ltYm9sLml0ZXJhdG9yXSgpLHc7ISh5PSh3PWIubmV4dCgpKS5kb25lKSYmKGcucHVzaCh3LnZhbHVlKSwhKG0mJmcubGVuZ3RoPT09bSkpO3k9ITApO31jYXRjaChfKXt2PSEwLHg9X31maW5hbGx5e3RyeXsheSYmYi5yZXR1cm4mJmIucmV0dXJuKCl9ZmluYWxseXtpZih2KXRocm93IHh9fXJldHVybiBnfXJldHVybiBvKGQsInNsaWNlSXRlcmF0b3IiKSxmdW5jdGlvbihwLG0pe2lmKEFycmF5LmlzQXJyYXkocCkpcmV0dXJuIHA7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChwKSlyZXR1cm4gZChwLG0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksaD1sKDE0MCkubGF5b3V0QmFzZS5MaW5rZWRMaXN0LGY9e307Zi5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24oZCl7Zm9yKHZhciBwPXt9LG09MDttPGQubGVuZ3RoO20rKylwW2RbbV0uaWQoKV09ITA7dmFyIGc9ZC5maWx0ZXIoZnVuY3Rpb24oeSx2KXt0eXBlb2YgeT09Im51bWJlciImJih5PXYpO2Zvcih2YXIgeD15LnBhcmVudCgpWzBdO3ghPW51bGw7KXtpZihwW3guaWQoKV0pcmV0dXJuITE7eD14LnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIGd9LGYuY29ubmVjdENvbXBvbmVudHM9ZnVuY3Rpb24oZCxwLG0sZyl7dmFyIHk9bmV3IGgsdj1uZXcgU2V0LHg9W10sYj12b2lkIDAsdz12b2lkIDAsXz12b2lkIDAsVD0hMSxFPTEsTD1bXSxDPVtdLEE9byhmdW5jdGlvbigpe3ZhciBEPWQuY29sbGVjdGlvbigpO0MucHVzaChEKTt2YXIgaz1tWzBdLFI9ZC5jb2xsZWN0aW9uKCk7Ui5tZXJnZShrKS5tZXJnZShrLmRlc2NlbmRhbnRzKCkuaW50ZXJzZWN0aW9uKHApKSx4LnB1c2goayksUi5mb3JFYWNoKGZ1bmN0aW9uKE4pe3kucHVzaChOKSx2LmFkZChOKSxELm1lcmdlKE4pfSk7Zm9yKHZhciBTPW8oZnVuY3Rpb24oKXtrPXkuc2hpZnQoKTt2YXIgUD1kLmNvbGxlY3Rpb24oKTtrLm5laWdoYm9yaG9vZCgpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih6KXtwLmludGVyc2VjdGlvbihrLmVkZ2VzV2l0aCh6KSkubGVuZ3RoPjAmJlAubWVyZ2Uoeil9KTtmb3IodmFyIEY9MDtGPFAubGVuZ3RoO0YrKyl7dmFyIEI9UFtGXTtpZihiPW0uaW50ZXJzZWN0aW9uKEIudW5pb24oQi5hbmNlc3RvcnMoKSkpLGIhPW51bGwmJiF2LmhhcyhiWzBdKSl7dmFyICQ9Yi51bmlvbihiLmRlc2NlbmRhbnRzKCkpOyQuZm9yRWFjaChmdW5jdGlvbih6KXt5LnB1c2goeiksdi5hZGQoeiksRC5tZXJnZSh6KSxtLmhhcyh6KSYmeC5wdXNoKHopfSl9fX0sIl9sb29wMiIpO3kubGVuZ3RoIT0wOylTKCk7aWYoRC5mb3JFYWNoKGZ1bmN0aW9uKE4pe3AuaW50ZXJzZWN0aW9uKE4uY29ubmVjdGVkRWRnZXMoKSkuZm9yRWFjaChmdW5jdGlvbihQKXtELmhhcyhQLnNvdXJjZSgpKSYmRC5oYXMoUC50YXJnZXQoKSkmJkQubWVyZ2UoUCl9KX0pLHgubGVuZ3RoPT1tLmxlbmd0aCYmKFQ9ITApLCFUfHxUJiZFPjEpe3c9eFswXSxfPXcuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgseC5mb3JFYWNoKGZ1bmN0aW9uKE4pe04uY29ubmVjdGVkRWRnZXMoKS5sZW5ndGg8XyYmKF89Ti5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCx3PU4pfSksTC5wdXNoKHcuaWQoKSk7dmFyIE89ZC5jb2xsZWN0aW9uKCk7Ty5tZXJnZSh4WzBdKSx4LmZvckVhY2goZnVuY3Rpb24oTil7Ty5tZXJnZShOKX0pLHg9W10sbT1tLmRpZmZlcmVuY2UoTyksRSsrfX0sIl9sb29wIik7ZG8gQSgpO3doaWxlKCFUKTtyZXR1cm4gZyYmTC5sZW5ndGg+MCYmZy5zZXQoImR1bW15IisoZy5zaXplKzEpLEwpLEN9LGYucmVsb2NhdGVDb21wb25lbnQ9ZnVuY3Rpb24oZCxwLG0pe2lmKCFtLmZpeGVkTm9kZUNvbnN0cmFpbnQpe3ZhciBnPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx5PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSx2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx4PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtpZihtLnF1YWxpdHk9PSJkcmFmdCIpe3ZhciBiPSEwLHc9ITEsXz12b2lkIDA7dHJ5e2Zvcih2YXIgVD1wLm5vZGVJbmRleGVzW1N5bWJvbC5pdGVyYXRvcl0oKSxFOyEoYj0oRT1ULm5leHQoKSkuZG9uZSk7Yj0hMCl7dmFyIEw9RS52YWx1ZSxDPXUoTCwyKSxBPUNbMF0sST1DWzFdLEQ9bS5jeS5nZXRFbGVtZW50QnlJZChBKTtpZihEKXt2YXIgaz1ELmJvdW5kaW5nQm94KCksUj1wLnhDb29yZHNbSV0tay53LzIsUz1wLnhDb29yZHNbSV0ray53LzIsTz1wLnlDb29yZHNbSV0tay5oLzIsTj1wLnlDb29yZHNbSV0ray5oLzI7UjxnJiYoZz1SKSxTPnkmJih5PVMpLE88diYmKHY9TyksTj54JiYoeD1OKX19fWNhdGNoKHope3c9ITAsXz16fWZpbmFsbHl7dHJ5eyFiJiZULnJldHVybiYmVC5yZXR1cm4oKX1maW5hbGx5e2lmKHcpdGhyb3cgX319dmFyIFA9ZC54LSh5K2cpLzIsRj1kLnktKHgrdikvMjtwLnhDb29yZHM9cC54Q29vcmRzLm1hcChmdW5jdGlvbih6KXtyZXR1cm4geitQfSkscC55Q29vcmRzPXAueUNvb3Jkcy5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHorRn0pfWVsc2V7T2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbih6KXt2YXIgVz1wW3pdLGo9Vy5nZXRSZWN0KCkueCxLPVcuZ2V0UmVjdCgpLngrVy5nZXRSZWN0KCkud2lkdGgsaWU9Vy5nZXRSZWN0KCkueSxRPVcuZ2V0UmVjdCgpLnkrVy5nZXRSZWN0KCkuaGVpZ2h0O2o8ZyYmKGc9aiksSz55JiYoeT1LKSxpZTx2JiYodj1pZSksUT54JiYoeD1RKX0pO3ZhciBCPWQueC0oeStnKS8yLCQ9ZC55LSh4K3YpLzI7T2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbih6KXt2YXIgVz1wW3pdO1cuc2V0Q2VudGVyKFcuZ2V0Q2VudGVyWCgpK0IsVy5nZXRDZW50ZXJZKCkrJCl9KX19fSxmLmNhbGNCb3VuZGluZ0JveD1mdW5jdGlvbihkLHAsbSxnKXtmb3IodmFyIHk9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdj1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUix4PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLGI9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsdz12b2lkIDAsXz12b2lkIDAsVD12b2lkIDAsRT12b2lkIDAsTD1kLmRlc2NlbmRhbnRzKCkubm90KCI6cGFyZW50IiksQz1MLmxlbmd0aCxBPTA7QTxDO0ErKyl7dmFyIEk9TFtBXTt3PXBbZy5nZXQoSS5pZCgpKV0tSS53aWR0aCgpLzIsXz1wW2cuZ2V0KEkuaWQoKSldK0kud2lkdGgoKS8yLFQ9bVtnLmdldChJLmlkKCkpXS1JLmhlaWdodCgpLzIsRT1tW2cuZ2V0KEkuaWQoKSldK0kuaGVpZ2h0KCkvMix5PncmJih5PXcpLHY8XyYmKHY9XykseD5UJiYoeD1UKSxiPEUmJihiPUUpfXZhciBEPXt9O3JldHVybiBELnRvcExlZnRYPXksRC50b3BMZWZ0WT14LEQud2lkdGg9di15LEQuaGVpZ2h0PWIteCxEfSxmLmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5jb2xsZWN0aW9uKCk7cmV0dXJuIHAubm9kZXMoIjpwYXJlbnQiKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3ZhciB5PSExO2cuY2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3YuY3NzKCJkaXNwbGF5IikhPSJub25lIiYmKHk9ITApfSkseXx8bS5tZXJnZShnKX0pLG19LGEuZXhwb3J0cz1mfSw4MTY6KGEscyxsKT0+e3ZhciB1PWwoNTQ4KSxoPWwoMTQwKS5Db1NFTGF5b3V0LGY9bCgxNDApLkNvU0VOb2RlLGQ9bCgxNDApLmxheW91dEJhc2UuUG9pbnRELHA9bCgxNDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxtPWwoMTQwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyxnPWwoMTQwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLHk9bCgxNDApLkNvU0VDb25zdGFudHMsdj1vKGZ1bmN0aW9uKGIsdyl7dmFyIF89Yi5jeSxUPWIuZWxlcyxFPVQubm9kZXMoKSxMPVQuZWRnZXMoKSxDPXZvaWQgMCxBPXZvaWQgMCxJPXZvaWQgMCxEPXt9O2IucmFuZG9taXplJiYoQz13Lm5vZGVJbmRleGVzLEE9dy54Q29vcmRzLEk9dy55Q29vcmRzKTt2YXIgaz1vKGZ1bmN0aW9uKHope3JldHVybiB0eXBlb2Ygej09ImZ1bmN0aW9uIn0sImlzRm4iKSxSPW8oZnVuY3Rpb24oeixXKXtyZXR1cm4gayh6KT96KFcpOnp9LCJvcHRGbiIpLFM9dS5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbihfLFQpLE89byhmdW5jdGlvbiAkKHosVyxqLEspe2Zvcih2YXIgaWU9Vy5sZW5ndGgsUT0wO1E8aWU7USsrKXt2YXIgZWU9V1tRXSxKPW51bGw7ZWUuaW50ZXJzZWN0aW9uKFMpLmxlbmd0aD09MCYmKEo9ZWUuY2hpbGRyZW4oKSk7dmFyIEg9dm9pZCAwLHE9ZWUubGF5b3V0RGltZW5zaW9ucyh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOksubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzfSk7aWYoZWUub3V0ZXJXaWR0aCgpIT1udWxsJiZlZS5vdXRlckhlaWdodCgpIT1udWxsKWlmKEsucmFuZG9taXplKWlmKCFlZS5pc1BhcmVudCgpKUg9ei5hZGQobmV3IGYoai5ncmFwaE1hbmFnZXIsbmV3IGQoQVtDLmdldChlZS5pZCgpKV0tcS53LzIsSVtDLmdldChlZS5pZCgpKV0tcS5oLzIpLG5ldyBwKHBhcnNlRmxvYXQocS53KSxwYXJzZUZsb2F0KHEuaCkpKSk7ZWxzZXt2YXIgWj11LmNhbGNCb3VuZGluZ0JveChlZSxBLEksQyk7ZWUuaW50ZXJzZWN0aW9uKFMpLmxlbmd0aD09MD9IPXouYWRkKG5ldyBmKGouZ3JhcGhNYW5hZ2VyLG5ldyBkKFoudG9wTGVmdFgsWi50b3BMZWZ0WSksbmV3IHAoWi53aWR0aCxaLmhlaWdodCkpKTpIPXouYWRkKG5ldyBmKGouZ3JhcGhNYW5hZ2VyLG5ldyBkKFoudG9wTGVmdFgsWi50b3BMZWZ0WSksbmV3IHAocGFyc2VGbG9hdChxLncpLHBhcnNlRmxvYXQocS5oKSkpKX1lbHNlIEg9ei5hZGQobmV3IGYoai5ncmFwaE1hbmFnZXIsbmV3IGQoZWUucG9zaXRpb24oIngiKS1xLncvMixlZS5wb3NpdGlvbigieSIpLXEuaC8yKSxuZXcgcChwYXJzZUZsb2F0KHEudykscGFyc2VGbG9hdChxLmgpKSkpO2Vsc2UgSD16LmFkZChuZXcgZih0aGlzLmdyYXBoTWFuYWdlcikpO2lmKEguaWQ9ZWUuZGF0YSgiaWQiKSxILm5vZGVSZXB1bHNpb249UihLLm5vZGVSZXB1bHNpb24sZWUpLEgucGFkZGluZ0xlZnQ9cGFyc2VJbnQoZWUuY3NzKCJwYWRkaW5nIikpLEgucGFkZGluZ1RvcD1wYXJzZUludChlZS5jc3MoInBhZGRpbmciKSksSC5wYWRkaW5nUmlnaHQ9cGFyc2VJbnQoZWUuY3NzKCJwYWRkaW5nIikpLEgucGFkZGluZ0JvdHRvbT1wYXJzZUludChlZS5jc3MoInBhZGRpbmciKSksSy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJihILmxhYmVsV2lkdGg9ZWUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExLGluY2x1ZGVPdmVybGF5czohMX0pLncsSC5sYWJlbEhlaWdodD1lZS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITEsaW5jbHVkZU92ZXJsYXlzOiExfSkuaCxILmxhYmVsUG9zVmVydGljYWw9ZWUuY3NzKCJ0ZXh0LXZhbGlnbiIpLEgubGFiZWxQb3NIb3Jpem9udGFsPWVlLmNzcygidGV4dC1oYWxpZ24iKSksRFtlZS5kYXRhKCJpZCIpXT1ILGlzTmFOKEgucmVjdC54KSYmKEgucmVjdC54PTApLGlzTmFOKEgucmVjdC55KSYmKEgucmVjdC55PTApLEohPW51bGwmJkoubGVuZ3RoPjApe3ZhciBhZT12b2lkIDA7YWU9ai5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoai5uZXdHcmFwaCgpLEgpLCQoYWUsSixqLEspfX19LCJwcm9jZXNzQ2hpbGRyZW5MaXN0IiksTj1vKGZ1bmN0aW9uKHosVyxqKXtmb3IodmFyIEs9MCxpZT0wLFE9MDtRPGoubGVuZ3RoO1ErKyl7dmFyIGVlPWpbUV0sSj1EW2VlLmRhdGEoInNvdXJjZSIpXSxIPURbZWUuZGF0YSgidGFyZ2V0IildO2lmKEomJkgmJkohPT1IJiZKLmdldEVkZ2VzQmV0d2VlbihIKS5sZW5ndGg9PTApe3ZhciBxPVcuYWRkKHoubmV3RWRnZSgpLEosSCk7cS5pZD1lZS5pZCgpLHEuaWRlYWxMZW5ndGg9UihiLmlkZWFsRWRnZUxlbmd0aCxlZSkscS5lZGdlRWxhc3RpY2l0eT1SKGIuZWRnZUVsYXN0aWNpdHksZWUpLEsrPXEuaWRlYWxMZW5ndGgsaWUrK319Yi5pZGVhbEVkZ2VMZW5ndGghPW51bGwmJihpZT4wP3kuREVGQVVMVF9FREdFX0xFTkdUSD1nLkRFRkFVTFRfRURHRV9MRU5HVEg9Sy9pZTprKGIuaWRlYWxFZGdlTGVuZ3RoKT95LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPTUwOnkuREVGQVVMVF9FREdFX0xFTkdUSD1nLkRFRkFVTFRfRURHRV9MRU5HVEg9Yi5pZGVhbEVkZ2VMZW5ndGgseS5NSU5fUkVQVUxTSU9OX0RJU1Q9Zy5NSU5fUkVQVUxTSU9OX0RJU1Q9Zy5ERUZBVUxUX0VER0VfTEVOR1RILzEwLHkuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1nLkRFRkFVTFRfRURHRV9MRU5HVEgpfSwicHJvY2Vzc0VkZ2VzIiksUD1vKGZ1bmN0aW9uKHosVyl7Vy5maXhlZE5vZGVDb25zdHJhaW50JiYoei5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50PVcuZml4ZWROb2RlQ29uc3RyYWludCksVy5hbGlnbm1lbnRDb25zdHJhaW50JiYoei5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50PVcuYWxpZ25tZW50Q29uc3RyYWludCksVy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJih6LmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD1XLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl9LCJwcm9jZXNzQ29uc3RyYWludHMiKTtiLm5lc3RpbmdGYWN0b3IhPW51bGwmJih5LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9Zy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWIubmVzdGluZ0ZhY3RvciksYi5ncmF2aXR5IT1udWxsJiYoeS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9Zy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9Yi5ncmF2aXR5KSxiLm51bUl0ZXIhPW51bGwmJih5Lk1BWF9JVEVSQVRJT05TPWcuTUFYX0lURVJBVElPTlM9Yi5udW1JdGVyKSxiLmdyYXZpdHlSYW5nZSE9bnVsbCYmKHkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1nLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Yi5ncmF2aXR5UmFuZ2UpLGIuZ3Jhdml0eUNvbXBvdW5kIT1udWxsJiYoeS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9Zy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9Yi5ncmF2aXR5Q29tcG91bmQpLGIuZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJih5LkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Zy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWIuZ3Jhdml0eVJhbmdlQ29tcG91bmQpLGIuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwhPW51bGwmJih5LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9Zy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWIuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLGIudGlsaW5nQ29tcGFyZUJ5IT1udWxsJiYoeS5USUxJTkdfQ09NUEFSRV9CWT1iLnRpbGluZ0NvbXBhcmVCeSksYi5xdWFsaXR5PT0icHJvb2YiP20uUVVBTElUWT0yOm0uUVVBTElUWT0wLHkuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWcuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPW0uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWIubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzLHkuREVGQVVMVF9JTkNSRU1FTlRBTD1nLkRFRkFVTFRfSU5DUkVNRU5UQUw9bS5ERUZBVUxUX0lOQ1JFTUVOVEFMPSFiLnJhbmRvbWl6ZSx5LkFOSU1BVEU9Zy5BTklNQVRFPW0uQU5JTUFURT1iLmFuaW1hdGUseS5USUxFPWIudGlsZSx5LlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPXR5cGVvZiBiLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbD09ImZ1bmN0aW9uIj9iLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbC5jYWxsKCk6Yi50aWxpbmdQYWRkaW5nVmVydGljYWwseS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPXR5cGVvZiBiLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsPT0iZnVuY3Rpb24iP2IudGlsaW5nUGFkZGluZ0hvcml6b250YWwuY2FsbCgpOmIudGlsaW5nUGFkZGluZ0hvcml6b250YWwseS5ERUZBVUxUX0lOQ1JFTUVOVEFMPWcuREVGQVVMVF9JTkNSRU1FTlRBTD1tLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITAseS5QVVJFX0lOQ1JFTUVOVEFMPSFiLnJhbmRvbWl6ZSxtLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9Yi51bmlmb3JtTm9kZURpbWVuc2lvbnMsYi5zdGVwPT0idHJhbnNmb3JtZWQiJiYoeS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMCx5LkVORk9SQ0VfQ09OU1RSQUlOVFM9ITEseS5BUFBMWV9MQVlPVVQ9ITEpLGIuc3RlcD09ImVuZm9yY2VkIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITEseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSEwLHkuQVBQTFlfTEFZT1VUPSExKSxiLnN0ZXA9PSJjb3NlIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITEseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSExLHkuQVBQTFlfTEFZT1VUPSEwKSxiLnN0ZXA9PSJhbGwiJiYoYi5yYW5kb21pemU/eS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMDp5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMCx5LkFQUExZX0xBWU9VVD0hMCksYi5maXhlZE5vZGVDb25zdHJhaW50fHxiLmFsaWdubWVudENvbnN0cmFpbnR8fGIucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50P3kuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITE6eS5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTD0hMDt2YXIgRj1uZXcgaCxCPUYubmV3R3JhcGhNYW5hZ2VyKCk7cmV0dXJuIE8oQi5hZGRSb290KCksdS5nZXRUb3BNb3N0Tm9kZXMoRSksRixiKSxOKEYsQixMKSxQKEYsYiksRi5ydW5MYXlvdXQoKSxEfSwiY29zZUxheW91dCIpO2EuZXhwb3J0cz17Y29zZUxheW91dDp2fX0sMjEyOihhLHMsbCk9Pnt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGIodyxfKXtmb3IodmFyIFQ9MDtUPF8ubGVuZ3RoO1QrKyl7dmFyIEU9X1tUXTtFLmVudW1lcmFibGU9RS5lbnVtZXJhYmxlfHwhMSxFLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gRSYmKEUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LEUua2V5LEUpfX1yZXR1cm4gbyhiLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24odyxfLFQpe3JldHVybiBfJiZiKHcucHJvdG90eXBlLF8pLFQmJmIodyxUKSx3fX0oKTtmdW5jdGlvbiBoKGIsdyl7aWYoIShiIGluc3RhbmNlb2YgdykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhoLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgZj1sKDY1OCksZD1sKDU0OCkscD1sKDY1NyksbT1wLnNwZWN0cmFsTGF5b3V0LGc9bCg4MTYpLHk9Zy5jb3NlTGF5b3V0LHY9T2JqZWN0LmZyZWV6ZSh7cXVhbGl0eToiZGVmYXVsdCIscmFuZG9taXplOiEwLGFuaW1hdGU6ITAsYW5pbWF0aW9uRHVyYXRpb246MWUzLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHVuaWZvcm1Ob2RlRGltZW5zaW9uczohMSxwYWNrQ29tcG9uZW50czohMCxzdGVwOiJhbGwiLHNhbXBsaW5nVHlwZTohMCxzYW1wbGVTaXplOjI1LG5vZGVTZXBhcmF0aW9uOjc1LHBpVG9sOjFlLTcsbm9kZVJlcHVsc2lvbjpvKGZ1bmN0aW9uKHcpe3JldHVybiA0NTAwfSwibm9kZVJlcHVsc2lvbiIpLGlkZWFsRWRnZUxlbmd0aDpvKGZ1bmN0aW9uKHcpe3JldHVybiA1MH0sImlkZWFsRWRnZUxlbmd0aCIpLGVkZ2VFbGFzdGljaXR5Om8oZnVuY3Rpb24odyl7cmV0dXJuIC40NX0sImVkZ2VFbGFzdGljaXR5IiksbmVzdGluZ0ZhY3RvcjouMSxncmF2aXR5Oi4yNSxudW1JdGVyOjI1MDAsdGlsZTohMCx0aWxpbmdDb21wYXJlQnk6dm9pZCAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouMyxmaXhlZE5vZGVDb25zdHJhaW50OnZvaWQgMCxhbGlnbm1lbnRDb25zdHJhaW50OnZvaWQgMCxyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ6dm9pZCAwLHJlYWR5Om8oZnVuY3Rpb24oKXt9LCJyZWFkeSIpLHN0b3A6byhmdW5jdGlvbigpe30sInN0b3AiKX0pLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKHcpe2godGhpcyxiKSx0aGlzLm9wdGlvbnM9Zih7fSx2LHcpfXJldHVybiBvKGIsIkxheW91dCIpLHUoYixbe2tleToicnVuIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIF89dGhpcyxUPXRoaXMub3B0aW9ucyxFPVQuY3ksTD1ULmVsZXMsQz1bXSxBPXZvaWQgMCxJPXZvaWQgMCxEPVtdLGs9dm9pZCAwLFI9W107VC5maXhlZE5vZGVDb25zdHJhaW50JiYoIUFycmF5LmlzQXJyYXkoVC5maXhlZE5vZGVDb25zdHJhaW50KXx8VC5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aD09MCkmJihULmZpeGVkTm9kZUNvbnN0cmFpbnQ9dm9pZCAwKSxULmFsaWdubWVudENvbnN0cmFpbnQmJihULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwmJighQXJyYXkuaXNBcnJheShULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpfHxULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwubGVuZ3RoPT0wKSYmKFQuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbD12b2lkIDApLFQuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsJiYoIUFycmF5LmlzQXJyYXkoVC5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpfHxULmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbC5sZW5ndGg9PTApJiYoVC5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWw9dm9pZCAwKSksVC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJighQXJyYXkuaXNBcnJheShULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl8fFQucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50Lmxlbmd0aD09MCkmJihULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD12b2lkIDApO3ZhciBTPVQuZml4ZWROb2RlQ29uc3RyYWludHx8VC5hbGlnbm1lbnRDb25zdHJhaW50fHxULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludDtTJiYoVC50aWxlPSExLFQucGFja0NvbXBvbmVudHM9ITEpO3ZhciBPPXZvaWQgMCxOPSExO2lmKEUubGF5b3V0VXRpbGl0aWVzJiZULnBhY2tDb21wb25lbnRzJiYoTz1FLmxheW91dFV0aWxpdGllcygiZ2V0IiksT3x8KE89RS5sYXlvdXRVdGlsaXRpZXMoKSksTj0hMCksTC5ub2RlcygpLmxlbmd0aD4wKWlmKE4pe3ZhciBCPWQuZ2V0VG9wTW9zdE5vZGVzKFQuZWxlcy5ub2RlcygpKTtpZihrPWQuY29ubmVjdENvbXBvbmVudHMoRSxULmVsZXMsQiksay5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIga2U9b2UuYm91bmRpbmdCb3goKTtSLnB1c2goe3g6a2UueDEra2Uudy8yLHk6a2UueTEra2UuaC8yfSl9KSxULnJhbmRvbWl6ZSYmay5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtULmVsZXM9b2UsQy5wdXNoKG0oVCkpfSksVC5xdWFsaXR5PT0iZGVmYXVsdCJ8fFQucXVhbGl0eT09InByb29mIil7dmFyICQ9RS5jb2xsZWN0aW9uKCk7aWYoVC50aWxlKXt2YXIgej1uZXcgTWFwLFc9W10saj1bXSxLPTAsaWU9e25vZGVJbmRleGVzOnoseENvb3JkczpXLHlDb29yZHM6an0sUT1bXTtpZihrLmZvckVhY2goZnVuY3Rpb24ob2Usa2Upe29lLmVkZ2VzKCkubGVuZ3RoPT0wJiYob2Uubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEZlLEJlKXskLm1lcmdlKG9lLm5vZGVzKClbQmVdKSxGZS5pc1BhcmVudCgpfHwoaWUubm9kZUluZGV4ZXMuc2V0KG9lLm5vZGVzKClbQmVdLmlkKCksSysrKSxpZS54Q29vcmRzLnB1c2gob2Uubm9kZXMoKVswXS5wb3NpdGlvbigpLngpLGllLnlDb29yZHMucHVzaChvZS5ub2RlcygpWzBdLnBvc2l0aW9uKCkueSkpfSksUS5wdXNoKGtlKSl9KSwkLmxlbmd0aD4xKXt2YXIgZWU9JC5ib3VuZGluZ0JveCgpO1IucHVzaCh7eDplZS54MStlZS53LzIseTplZS55MStlZS5oLzJ9KSxrLnB1c2goJCksQy5wdXNoKGllKTtmb3IodmFyIEo9US5sZW5ndGgtMTtKPj0wO0otLSlrLnNwbGljZShRW0pdLDEpLEMuc3BsaWNlKFFbSl0sMSksUi5zcGxpY2UoUVtKXSwxKX19ay5mb3JFYWNoKGZ1bmN0aW9uKG9lLGtlKXtULmVsZXM9b2UsRC5wdXNoKHkoVCxDW2tlXSkpLGQucmVsb2NhdGVDb21wb25lbnQoUltrZV0sRFtrZV0sVCl9KX1lbHNlIGsuZm9yRWFjaChmdW5jdGlvbihvZSxrZSl7ZC5yZWxvY2F0ZUNvbXBvbmVudChSW2tlXSxDW2tlXSxUKX0pO3ZhciBIPW5ldyBTZXQ7aWYoay5sZW5ndGg+MSl7dmFyIHE9W10sWj1MLmZpbHRlcihmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmNzcygiZGlzcGxheSIpPT0ibm9uZSJ9KTtrLmZvckVhY2goZnVuY3Rpb24ob2Usa2Upe3ZhciBGZT12b2lkIDA7aWYoVC5xdWFsaXR5PT0iZHJhZnQiJiYoRmU9Q1trZV0ubm9kZUluZGV4ZXMpLG9lLm5vZGVzKCkubm90KFopLmxlbmd0aD4wKXt2YXIgQmU9e307QmUuZWRnZXM9W10sQmUubm9kZXM9W107dmFyIFZlPXZvaWQgMDtvZS5ub2RlcygpLm5vdChaKS5mb3JFYWNoKGZ1bmN0aW9uKEdlKXtpZihULnF1YWxpdHk9PSJkcmFmdCIpaWYoIUdlLmlzUGFyZW50KCkpVmU9RmUuZ2V0KEdlLmlkKCkpLEJlLm5vZGVzLnB1c2goe3g6Q1trZV0ueENvb3Jkc1tWZV0tR2UuYm91bmRpbmdib3goKS53LzIseTpDW2tlXS55Q29vcmRzW1ZlXS1HZS5ib3VuZGluZ2JveCgpLmgvMix3aWR0aDpHZS5ib3VuZGluZ2JveCgpLncsaGVpZ2h0OkdlLmJvdW5kaW5nYm94KCkuaH0pO2Vsc2V7dmFyIEhlPWQuY2FsY0JvdW5kaW5nQm94KEdlLENba2VdLnhDb29yZHMsQ1trZV0ueUNvb3JkcyxGZSk7QmUubm9kZXMucHVzaCh7eDpIZS50b3BMZWZ0WCx5OkhlLnRvcExlZnRZLHdpZHRoOkhlLndpZHRoLGhlaWdodDpIZS5oZWlnaHR9KX1lbHNlIERba2VdW0dlLmlkKCldJiZCZS5ub2Rlcy5wdXNoKHt4OkRba2VdW0dlLmlkKCldLmdldExlZnQoKSx5OkRba2VdW0dlLmlkKCldLmdldFRvcCgpLHdpZHRoOkRba2VdW0dlLmlkKCldLmdldFdpZHRoKCksaGVpZ2h0OkRba2VdW0dlLmlkKCldLmdldEhlaWdodCgpfSl9KSxvZS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oR2Upe3ZhciBIZT1HZS5zb3VyY2UoKSx4ZT1HZS50YXJnZXQoKTtpZihIZS5jc3MoImRpc3BsYXkiKSE9Im5vbmUiJiZ4ZS5jc3MoImRpc3BsYXkiKSE9Im5vbmUiKWlmKFQucXVhbGl0eT09ImRyYWZ0Iil7dmFyIFg9RmUuZ2V0KEhlLmlkKCkpLGZlPUZlLmdldCh4ZS5pZCgpKSxoZT1bXSxnZT1bXTtpZihIZS5pc1BhcmVudCgpKXt2YXIgbmU9ZC5jYWxjQm91bmRpbmdCb3goSGUsQ1trZV0ueENvb3JkcyxDW2tlXS55Q29vcmRzLEZlKTtoZS5wdXNoKG5lLnRvcExlZnRYK25lLndpZHRoLzIpLGhlLnB1c2gobmUudG9wTGVmdFkrbmUuaGVpZ2h0LzIpfWVsc2UgaGUucHVzaChDW2tlXS54Q29vcmRzW1hdKSxoZS5wdXNoKENba2VdLnlDb29yZHNbWF0pO2lmKHhlLmlzUGFyZW50KCkpe3ZhciB5ZT1kLmNhbGNCb3VuZGluZ0JveCh4ZSxDW2tlXS54Q29vcmRzLENba2VdLnlDb29yZHMsRmUpO2dlLnB1c2goeWUudG9wTGVmdFgreWUud2lkdGgvMiksZ2UucHVzaCh5ZS50b3BMZWZ0WSt5ZS5oZWlnaHQvMil9ZWxzZSBnZS5wdXNoKENba2VdLnhDb29yZHNbZmVdKSxnZS5wdXNoKENba2VdLnlDb29yZHNbZmVdKTtCZS5lZGdlcy5wdXNoKHtzdGFydFg6aGVbMF0sc3RhcnRZOmhlWzFdLGVuZFg6Z2VbMF0sZW5kWTpnZVsxXX0pfWVsc2UgRFtrZV1bSGUuaWQoKV0mJkRba2VdW3hlLmlkKCldJiZCZS5lZGdlcy5wdXNoKHtzdGFydFg6RFtrZV1bSGUuaWQoKV0uZ2V0Q2VudGVyWCgpLHN0YXJ0WTpEW2tlXVtIZS5pZCgpXS5nZXRDZW50ZXJZKCksZW5kWDpEW2tlXVt4ZS5pZCgpXS5nZXRDZW50ZXJYKCksZW5kWTpEW2tlXVt4ZS5pZCgpXS5nZXRDZW50ZXJZKCl9KX0pLEJlLm5vZGVzLmxlbmd0aD4wJiYocS5wdXNoKEJlKSxILmFkZChrZSkpfX0pO3ZhciBhZT1PLnBhY2tDb21wb25lbnRzKHEsVC5yYW5kb21pemUpLnNoaWZ0cztpZihULnF1YWxpdHk9PSJkcmFmdCIpQy5mb3JFYWNoKGZ1bmN0aW9uKG9lLGtlKXt2YXIgRmU9b2UueENvb3Jkcy5tYXAoZnVuY3Rpb24oVmUpe3JldHVybiBWZSthZVtrZV0uZHh9KSxCZT1vZS55Q29vcmRzLm1hcChmdW5jdGlvbihWZSl7cmV0dXJuIFZlK2FlW2tlXS5keX0pO29lLnhDb29yZHM9RmUsb2UueUNvb3Jkcz1CZX0pO2Vsc2V7dmFyIHVlPTA7SC5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtPYmplY3Qua2V5cyhEW29lXSkuZm9yRWFjaChmdW5jdGlvbihrZSl7dmFyIEZlPURbb2VdW2tlXTtGZS5zZXRDZW50ZXIoRmUuZ2V0Q2VudGVyWCgpK2FlW3VlXS5keCxGZS5nZXRDZW50ZXJZKCkrYWVbdWVdLmR5KX0pLHVlKyt9KX19fWVsc2V7dmFyIFA9VC5lbGVzLmJvdW5kaW5nQm94KCk7aWYoUi5wdXNoKHt4OlAueDErUC53LzIseTpQLnkxK1AuaC8yfSksVC5yYW5kb21pemUpe3ZhciBGPW0oVCk7Qy5wdXNoKEYpfVQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiI/KEQucHVzaCh5KFQsQ1swXSkpLGQucmVsb2NhdGVDb21wb25lbnQoUlswXSxEWzBdLFQpKTpkLnJlbG9jYXRlQ29tcG9uZW50KFJbMF0sQ1swXSxUKX12YXIgY2U9byhmdW5jdGlvbihrZSxGZSl7aWYoVC5xdWFsaXR5PT0iZGVmYXVsdCJ8fFQucXVhbGl0eT09InByb29mIil7dHlwZW9mIGtlPT0ibnVtYmVyIiYmKGtlPUZlKTt2YXIgQmU9dm9pZCAwLFZlPXZvaWQgMCxHZT1rZS5kYXRhKCJpZCIpO3JldHVybiBELmZvckVhY2goZnVuY3Rpb24oeGUpe0dlIGluIHhlJiYoQmU9e3g6eGVbR2VdLmdldFJlY3QoKS5nZXRDZW50ZXJYKCkseTp4ZVtHZV0uZ2V0UmVjdCgpLmdldENlbnRlclkoKX0sVmU9eGVbR2VdKX0pLFQubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiYoVmUubGFiZWxXaWR0aCYmKFZlLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiP0JlLngrPVZlLmxhYmVsV2lkdGgvMjpWZS5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJihCZS54LT1WZS5sYWJlbFdpZHRoLzIpKSxWZS5sYWJlbEhlaWdodCYmKFZlLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiP0JlLnkrPVZlLmxhYmVsSGVpZ2h0LzI6VmUubGFiZWxQb3NWZXJ0aWNhbD09ImJvdHRvbSImJihCZS55LT1WZS5sYWJlbEhlaWdodC8yKSkpLEJlPT1udWxsJiYoQmU9e3g6a2UucG9zaXRpb24oIngiKSx5OmtlLnBvc2l0aW9uKCJ5Iil9KSx7eDpCZS54LHk6QmUueX19ZWxzZXt2YXIgSGU9dm9pZCAwO3JldHVybiBDLmZvckVhY2goZnVuY3Rpb24oeGUpe3ZhciBYPXhlLm5vZGVJbmRleGVzLmdldChrZS5pZCgpKTtYIT1udWxsJiYoSGU9e3g6eGUueENvb3Jkc1tYXSx5OnhlLnlDb29yZHNbWF19KX0pLEhlPT1udWxsJiYoSGU9e3g6a2UucG9zaXRpb24oIngiKSx5OmtlLnBvc2l0aW9uKCJ5Iil9KSx7eDpIZS54LHk6SGUueX19fSwiZ2V0UG9zaXRpb25zIik7aWYoVC5xdWFsaXR5PT0iZGVmYXVsdCJ8fFQucXVhbGl0eT09InByb29mInx8VC5yYW5kb21pemUpe3ZhciB0ZT1kLmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuKEUsTCksRGU9TC5maWx0ZXIoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5jc3MoImRpc3BsYXkiKT09Im5vbmUifSk7VC5lbGVzPUwubm90KERlKSxMLm5vZGVzKCkubm90KCI6cGFyZW50Iikubm90KERlKS5sYXlvdXRQb3NpdGlvbnMoXyxULGNlKSx0ZS5sZW5ndGg+MCYmdGUuZm9yRWFjaChmdW5jdGlvbihvZSl7b2UucG9zaXRpb24oY2Uob2UpKX0pfWVsc2UgY29uc29sZS5sb2coIklmIHJhbmRvbWl6ZSBvcHRpb24gaXMgc2V0IHRvIGZhbHNlLCB0aGVuIHF1YWxpdHkgb3B0aW9uIG11c3QgYmUgJ2RlZmF1bHQnIG9yICdwcm9vZicuIil9LCJydW4iKX1dKSxifSgpO2EuZXhwb3J0cz14fSw2NTc6KGEscyxsKT0+e3ZhciB1PWwoNTQ4KSxoPWwoMTQwKS5sYXlvdXRCYXNlLk1hdHJpeCxmPWwoMTQwKS5sYXlvdXRCYXNlLlNWRCxkPW8oZnVuY3Rpb24obSl7dmFyIGc9bS5jeSx5PW0uZWxlcyx2PXkubm9kZXMoKSx4PXkubm9kZXMoIjpwYXJlbnQiKSxiPW5ldyBNYXAsdz1uZXcgTWFwLF89bmV3IE1hcCxUPVtdLEU9W10sTD1bXSxDPVtdLEE9W10sST1bXSxEPVtdLGs9W10sUj12b2lkIDAsUz12b2lkIDAsTz0xZTgsTj0xZS05LFA9bS5waVRvbCxGPW0uc2FtcGxpbmdUeXBlLEI9bS5ub2RlU2VwYXJhdGlvbiwkPXZvaWQgMCx6PW8oZnVuY3Rpb24oKXtmb3IodmFyIFRlPTAsc2U9MCxFZT0hMTtzZTwkOyl7VGU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKlMpLEVlPSExO2Zvcih2YXIgQWU9MDtBZTxzZTtBZSsrKWlmKENbQWVdPT1UZSl7RWU9ITA7YnJlYWt9aWYoIUVlKUNbc2VdPVRlLHNlKys7ZWxzZSBjb250aW51ZX19LCJyYW5kb21TYW1wbGVDUiIpLFc9byhmdW5jdGlvbihUZSxzZSxFZSl7Zm9yKHZhciBBZT1bXSxQZT0wLE1lPTAsbWU9MCxXZT12b2lkIDAsUmU9W10sdHQ9MCxndD0xLEV0PTA7RXQ8UztFdCsrKVJlW0V0XT1PO2ZvcihBZVtNZV09VGUsUmVbVGVdPTA7TWU+PVBlOyl7bWU9QWVbUGUrK107Zm9yKHZhciB2dD1UW21lXSxZZT0wO1llPHZ0Lmxlbmd0aDtZZSsrKVdlPXcuZ2V0KHZ0W1llXSksUmVbV2VdPT1PJiYoUmVbV2VdPVJlW21lXSsxLEFlWysrTWVdPVdlKTtJW21lXVtzZV09UmVbbWVdKkJ9aWYoRWUpe2Zvcih2YXIgVHQ9MDtUdDxTO1R0KyspSVtUdF1bc2VdPEFbVHRdJiYoQVtUdF09SVtUdF1bc2VdKTtmb3IodmFyICRlPTA7JGU8UzskZSsrKUFbJGVdPnR0JiYodHQ9QVskZV0sZ3Q9JGUpfXJldHVybiBndH0sIkJGUyIpLGo9byhmdW5jdGlvbihUZSl7dmFyIHNlPXZvaWQgMDtpZihUZSl7c2U9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKlMpLFI9c2U7Zm9yKHZhciBBZT0wO0FlPFM7QWUrKylBW0FlXT1PO2Zvcih2YXIgUGU9MDtQZTwkO1BlKyspQ1tQZV09c2Usc2U9VyhzZSxQZSxUZSl9ZWxzZXt6KCk7Zm9yKHZhciBFZT0wO0VlPCQ7RWUrKylXKENbRWVdLEVlLFRlLCExKX1mb3IodmFyIE1lPTA7TWU8UztNZSsrKWZvcih2YXIgbWU9MDttZTwkO21lKyspSVtNZV1bbWVdKj1JW01lXVttZV07Zm9yKHZhciBXZT0wO1dlPCQ7V2UrKylEW1dlXT1bXTtmb3IodmFyIFJlPTA7UmU8JDtSZSsrKWZvcih2YXIgdHQ9MDt0dDwkO3R0KyspRFtSZV1bdHRdPUlbQ1t0dF1dW1JlXX0sImFsbEJGUyIpLEs9byhmdW5jdGlvbigpe2Zvcih2YXIgVGU9Zi5zdmQoRCksc2U9VGUuUyxFZT1UZS5VLEFlPVRlLlYsUGU9c2VbMF0qc2VbMF0qc2VbMF0sTWU9W10sbWU9MDttZTwkO21lKyspe01lW21lXT1bXTtmb3IodmFyIFdlPTA7V2U8JDtXZSsrKU1lW21lXVtXZV09MCxtZT09V2UmJihNZVttZV1bV2VdPXNlW21lXS8oc2VbbWVdKnNlW21lXStQZS8oc2VbbWVdKnNlW21lXSkpKX1rPWgubXVsdE1hdChoLm11bHRNYXQoQWUsTWUpLGgudHJhbnNwb3NlKEVlKSl9LCJzYW1wbGUiKSxpZT1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBUZT12b2lkIDAsc2U9dm9pZCAwLEVlPVtdLEFlPVtdLFBlPVtdLE1lPVtdLG1lPTA7bWU8UzttZSsrKUVlW21lXT1NYXRoLnJhbmRvbSgpLEFlW21lXT1NYXRoLnJhbmRvbSgpO0VlPWgubm9ybWFsaXplKEVlKSxBZT1oLm5vcm1hbGl6ZShBZSk7Zm9yKHZhciBXZT0wLFJlPU4sdHQ9TixndD12b2lkIDA7Oyl7V2UrKztmb3IodmFyIEV0PTA7RXQ8UztFdCsrKVBlW0V0XT1FZVtFdF07aWYoRWU9aC5tdWx0R2FtbWEoaC5tdWx0TChoLm11bHRHYW1tYShQZSksSSxrKSksVGU9aC5kb3RQcm9kdWN0KFBlLEVlKSxFZT1oLm5vcm1hbGl6ZShFZSksUmU9aC5kb3RQcm9kdWN0KFBlLEVlKSxndD1NYXRoLmFicyhSZS90dCksZ3Q8PTErUCYmZ3Q+PTEpYnJlYWs7dHQ9UmV9Zm9yKHZhciB2dD0wO3Z0PFM7dnQrKylQZVt2dF09RWVbdnRdO2ZvcihXZT0wLHR0PU47Oyl7V2UrKztmb3IodmFyIFllPTA7WWU8UztZZSsrKU1lW1llXT1BZVtZZV07aWYoTWU9aC5taW51c09wKE1lLGgubXVsdENvbnMoUGUsaC5kb3RQcm9kdWN0KFBlLE1lKSkpLEFlPWgubXVsdEdhbW1hKGgubXVsdEwoaC5tdWx0R2FtbWEoTWUpLEksaykpLHNlPWguZG90UHJvZHVjdChNZSxBZSksQWU9aC5ub3JtYWxpemUoQWUpLFJlPWguZG90UHJvZHVjdChNZSxBZSksZ3Q9TWF0aC5hYnMoUmUvdHQpLGd0PD0xK1AmJmd0Pj0xKWJyZWFrO3R0PVJlfWZvcih2YXIgVHQ9MDtUdDxTO1R0KyspTWVbVHRdPUFlW1R0XTtFPWgubXVsdENvbnMoUGUsTWF0aC5zcXJ0KE1hdGguYWJzKFRlKSkpLEw9aC5tdWx0Q29ucyhNZSxNYXRoLnNxcnQoTWF0aC5hYnMoc2UpKSl9LCJwb3dlckl0ZXJhdGlvbiIpO3UuY29ubmVjdENvbXBvbmVudHMoZyx5LHUuZ2V0VG9wTW9zdE5vZGVzKHYpLGIpLHguZm9yRWFjaChmdW5jdGlvbihVKXt1LmNvbm5lY3RDb21wb25lbnRzKGcseSx1LmdldFRvcE1vc3ROb2RlcyhVLmRlc2NlbmRhbnRzKCkuaW50ZXJzZWN0aW9uKHkpKSxiKX0pO2Zvcih2YXIgUT0wLGVlPTA7ZWU8di5sZW5ndGg7ZWUrKyl2W2VlXS5pc1BhcmVudCgpfHx3LnNldCh2W2VlXS5pZCgpLFErKyk7dmFyIEo9ITAsSD0hMSxxPXZvaWQgMDt0cnl7Zm9yKHZhciBaPWIua2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSxhZTshKEo9KGFlPVoubmV4dCgpKS5kb25lKTtKPSEwKXt2YXIgdWU9YWUudmFsdWU7dy5zZXQodWUsUSsrKX19Y2F0Y2goVSl7SD0hMCxxPVV9ZmluYWxseXt0cnl7IUomJloucmV0dXJuJiZaLnJldHVybigpfWZpbmFsbHl7aWYoSCl0aHJvdyBxfX1mb3IodmFyIGNlPTA7Y2U8dy5zaXplO2NlKyspVFtjZV09W107eC5mb3JFYWNoKGZ1bmN0aW9uKFUpe2Zvcih2YXIgVGU9VS5jaGlsZHJlbigpLmludGVyc2VjdGlvbih5KTtUZS5ub2RlcygiOmNoaWxkbGVzcyIpLmxlbmd0aD09MDspVGU9VGUubm9kZXMoKVswXS5jaGlsZHJlbigpLmludGVyc2VjdGlvbih5KTt2YXIgc2U9MCxFZT1UZS5ub2RlcygiOmNoaWxkbGVzcyIpWzBdLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoO1RlLm5vZGVzKCI6Y2hpbGRsZXNzIikuZm9yRWFjaChmdW5jdGlvbihBZSxQZSl7QWUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGg8RWUmJihFZT1BZS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCxzZT1QZSl9KSxfLnNldChVLmlkKCksVGUubm9kZXMoIjpjaGlsZGxlc3MiKVtzZV0uaWQoKSl9KSx2LmZvckVhY2goZnVuY3Rpb24oVSl7dmFyIFRlPXZvaWQgMDtVLmlzUGFyZW50KCk/VGU9dy5nZXQoXy5nZXQoVS5pZCgpKSk6VGU9dy5nZXQoVS5pZCgpKSxVLm5laWdoYm9yaG9vZCgpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihzZSl7eS5pbnRlcnNlY3Rpb24oVS5lZGdlc1dpdGgoc2UpKS5sZW5ndGg+MCYmKHNlLmlzUGFyZW50KCk/VFtUZV0ucHVzaChfLmdldChzZS5pZCgpKSk6VFtUZV0ucHVzaChzZS5pZCgpKSl9KX0pO3ZhciB0ZT1vKGZ1bmN0aW9uKFRlKXt2YXIgc2U9dy5nZXQoVGUpLEVlPXZvaWQgMDtiLmdldChUZSkuZm9yRWFjaChmdW5jdGlvbihBZSl7Zy5nZXRFbGVtZW50QnlJZChBZSkuaXNQYXJlbnQoKT9FZT1fLmdldChBZSk6RWU9QWUsVFtzZV0ucHVzaChFZSksVFt3LmdldChFZSldLnB1c2goVGUpfSl9LCJfbG9vcCIpLERlPSEwLG9lPSExLGtlPXZvaWQgMDt0cnl7Zm9yKHZhciBGZT1iLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksQmU7IShEZT0oQmU9RmUubmV4dCgpKS5kb25lKTtEZT0hMCl7dmFyIFZlPUJlLnZhbHVlO3RlKFZlKX19Y2F0Y2goVSl7b2U9ITAsa2U9VX1maW5hbGx5e3RyeXshRGUmJkZlLnJldHVybiYmRmUucmV0dXJuKCl9ZmluYWxseXtpZihvZSl0aHJvdyBrZX19Uz13LnNpemU7dmFyIEdlPXZvaWQgMDtpZihTPjIpeyQ9UzxtLnNhbXBsZVNpemU/UzptLnNhbXBsZVNpemU7Zm9yKHZhciBIZT0wO0hlPFM7SGUrKylJW0hlXT1bXTtmb3IodmFyIHhlPTA7eGU8JDt4ZSsrKWtbeGVdPVtdO3JldHVybiBtLnF1YWxpdHk9PSJkcmFmdCJ8fG0uc3RlcD09ImFsbCI/KGooRiksSygpLGllKCksR2U9e25vZGVJbmRleGVzOncseENvb3JkczpFLHlDb29yZHM6TH0pOih3LmZvckVhY2goZnVuY3Rpb24oVSxUZSl7RS5wdXNoKGcuZ2V0RWxlbWVudEJ5SWQoVGUpLnBvc2l0aW9uKCJ4IikpLEwucHVzaChnLmdldEVsZW1lbnRCeUlkKFRlKS5wb3NpdGlvbigieSIpKX0pLEdlPXtub2RlSW5kZXhlczp3LHhDb29yZHM6RSx5Q29vcmRzOkx9KSxHZX1lbHNle3ZhciBYPXcua2V5cygpLGZlPWcuZ2V0RWxlbWVudEJ5SWQoWC5uZXh0KCkudmFsdWUpLGhlPWZlLnBvc2l0aW9uKCksZ2U9ZmUub3V0ZXJXaWR0aCgpO2lmKEUucHVzaChoZS54KSxMLnB1c2goaGUueSksUz09Mil7dmFyIG5lPWcuZ2V0RWxlbWVudEJ5SWQoWC5uZXh0KCkudmFsdWUpLHllPW5lLm91dGVyV2lkdGgoKTtFLnB1c2goaGUueCtnZS8yK3llLzIrbS5pZGVhbEVkZ2VMZW5ndGgpLEwucHVzaChoZS55KX1yZXR1cm4gR2U9e25vZGVJbmRleGVzOncseENvb3JkczpFLHlDb29yZHM6TH0sR2V9fSwic3BlY3RyYWxMYXlvdXQiKTthLmV4cG9ydHM9e3NwZWN0cmFsTGF5b3V0OmR9fSw1Nzk6KGEscyxsKT0+e3ZhciB1PWwoMjEyKSxoPW8oZnVuY3Rpb24oZCl7ZCYmZCgibGF5b3V0IiwiZmNvc2UiLHUpfSwicmVnaXN0ZXIiKTt0eXBlb2YgY3l0b3NjYXBlPCJ1IiYmaChjeXRvc2NhcGUpLGEuZXhwb3J0cz1ofSwxNDA6YT0+e2EuZXhwb3J0cz10fX0scj17fTtmdW5jdGlvbiBuKGEpe3ZhciBzPXJbYV07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBsPXJbYV09e2V4cG9ydHM6e319O3JldHVybiBlW2FdKGwsbC5leHBvcnRzLG4pLGwuZXhwb3J0c31vKG4sIl9fd2VicGFja19yZXF1aXJlX18iKTt2YXIgaT1uKDU3OSk7cmV0dXJuIGl9KSgpfSl9KTt2YXIgUzEsajAsbUY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLYygpO1MxPW8odD0+YDxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPiR7dH08L2c+YCwid3JhcEljb24iKSxqMD17cHJlZml4OiJtZXJtYWlkLWFyY2hpdGVjdHVyZSIsaGVpZ2h0OjgwLHdpZHRoOjgwLGljb25zOntkYXRhYmFzZTp7Ym9keTpTMSgnPHBhdGggaWQ9ImIiIGRhdGEtbmFtZT0iNCIgZD0ibTIwLDU3Ljg2YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBpZD0iYyIgZGF0YS1uYW1lPSIzIiBkPSJtMjAsNDUuOTVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxwYXRoIGlkPSJkIiBkYXRhLW5hbWU9IjIiIGQ9Im0yMCwzNC4wNWMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgaWQ9ImUiIGRhdGEtbmFtZT0iMSIgY3g9IjQwIiBjeT0iMjIuMTQiIHJ4PSIyMCIgcnk9IjcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjIwIiB5MT0iNTcuODYiIHgyPSIyMCIgeTI9IjIyLjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSI2MCIgeTE9IjU3Ljg2IiB4Mj0iNjAiIHkyPSIyMi4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sc2VydmVyOntib2R5OlMxKCc8cmVjdCB4PSIxNy41IiB5PSIxNy41IiB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIHJ4PSIyIiByeT0iMiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTcuNSIgeTE9IjMyLjUiIHgyPSI2Mi41IiB5Mj0iMzIuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTcuNSIgeTE9IjQ3LjUiIHgyPSI2Mi41IiB5Mj0iNDcuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48Zz48cGF0aCBkPSJtNTYuMjUsMjVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48cGF0aCBkPSJtNTYuMjUsNDBjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48cGF0aCBkPSJtNTYuMjUsNTVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDU1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48Y2lyY2xlIGN4PSIzMi41IiBjeT0iMjUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjI3LjUiIGN5PSIyNSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjI1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PGNpcmNsZSBjeD0iMzIuNSIgY3k9IjQwIiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyNy41IiBjeT0iNDAiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjIyLjUiIGN5PSI0MCIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PC9nPjxnPjxjaXJjbGUgY3g9IjMyLjUiIGN5PSI1NSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjcuNSIgY3k9IjU1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyMi41IiBjeT0iNTUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz4nKX0sZGlzazp7Ym9keTpTMSgnPHJlY3QgeD0iMjAiIHk9IjE1IiB3aWR0aD0iNDAiIGhlaWdodD0iNTAiIHJ4PSIxIiByeT0iMSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iMjQiIGN5PSIxOS4xNyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSI1NiIgY3k9IjE5LjE3IiByeD0iLjgiIHJ5PSIuODMiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjI0IiBjeT0iNjAuODMiIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNTYiIGN5PSI2MC44MyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSI0MCIgY3k9IjMzLjc1IiByeD0iMTQiIHJ5PSIxNC41OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNDAiIGN5PSIzMy43NSIgcng9IjQiIHJ5PSI0LjE3IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxwYXRoIGQ9Im0zNy41MSw0Mi41MmwtNC44MywxMy4yMmMtLjI2LjcxLTEuMSwxLjAyLTEuNzYuNjRsLTQuMTgtMi40MmMtLjY2LS4zOC0uODEtMS4yNi0uMzMtMS44NGw5LjAxLTEwLjhjLjg4LTEuMDUsMi41Ni0uMDgsMi4wOSwxLjJaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+Jyl9LGludGVybmV0Ontib2R5OlMxKCc8Y2lyY2xlIGN4PSI0MCIgY3k9IjQwIiByPSIyMi41IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSI0MCIgeTE9IjE3LjUiIHgyPSI0MCIgeTI9IjYyLjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSI0MCIgeDI9IjYyLjUiIHkyPSI0MCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtMzkuOTksMTcuNTFjLTE1LjI4LDExLjEtMTUuMjgsMzMuODgsMCw0NC45OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtNDAuMDEsMTcuNTFjMTUuMjgsMTEuMSwxNS4yOCwzMy44OCwwLDQ0Ljk4IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxOS43NSIgeTE9IjMwLjEiIHgyPSI2MC4yNSIgeTI9IjMwLjEiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE5Ljc1IiB5MT0iNDkuOSIgeDI9IjYwLjI1IiB5Mj0iNDkuOSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sY2xvdWQ6e2JvZHk6UzEoJzxwYXRoIGQ9Im02NSw0Ny41YzAsMi43Ni0yLjI0LDUtNSw1SDIwYy0yLjc2LDAtNS0yLjI0LTUtNSwwLTEuODcsMS4wMy0zLjUxLDIuNTYtNC4zNi0uMDQtLjIxLS4wNi0uNDItLjA2LS42NCwwLTIuNiwyLjQ4LTQuNzQsNS42NS00Ljk3LDEuNjUtNC41MSw2LjM0LTcuNzYsMTEuODUtNy43Ni44NiwwLDEuNjkuMDgsMi41LjIzLDIuMDktMS41Nyw0LjY5LTIuNSw3LjUtMi41LDYuMSwwLDExLjE5LDQuMzgsMTIuMjgsMTAuMTcsMi4xNC41NiwzLjcyLDIuNTEsMy43Miw0LjgzLDAsLjAzLDAsLjA3LS4wMS4xLDIuMjkuNDYsNC4wMSwyLjQ4LDQuMDEsNC45WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sdW5rbm93bjpSUyxibGFuazp7Ym9keTpTMSgiIil9fX19KTt2YXIgdTJlLGgyZSxmMmUsZDJlLHAyZT1NKCgpPT57InVzZSBzdHJpY3QiO0tjKCk7VnQoKTtEbCgpO3liKCk7bUYoKTtpUygpO3UyZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSl7bGV0IHI9TGkoInBhZGRpbmciKSxuPUxpKCJpY29uU2l6ZSIpLGk9bi8yLGE9bi82LHM9YS8yO2F3YWl0IFByb21pc2UuYWxsKGUuZWRnZXMoKS5tYXAoYXN5bmMgbD0+e2xldHtzb3VyY2U6dSxzb3VyY2VEaXI6aCxzb3VyY2VBcnJvdzpmLHNvdXJjZUdyb3VwOmQsdGFyZ2V0OnAsdGFyZ2V0RGlyOm0sdGFyZ2V0QXJyb3c6Zyx0YXJnZXRHcm91cDp5LGxhYmVsOnZ9PW5TKGwpLHt4LHk6Yn09bFswXS5zb3VyY2VFbmRwb2ludCgpLHt4OncseTpffT1sWzBdLm1pZHBvaW50KCkse3g6VCx5OkV9PWxbMF0udGFyZ2V0RW5kcG9pbnQoKSxMPXIrNDtpZihkJiYodXMoaCk/eCs9aD09PSJMIj8tTDpMOmIrPWg9PT0iVCI/LUw6TCsxOCkseSYmKHVzKG0pP1QrPW09PT0iTCI/LUw6TDpFKz1tPT09IlQiPy1MOkwrMTgpLCFkJiZYMC5nZXROb2RlKHUpPy50eXBlPT09Imp1bmN0aW9uIiYmKHVzKGgpP3grPWg9PT0iTCI/aTotaTpiKz1oPT09IlQiP2k6LWkpLCF5JiZYMC5nZXROb2RlKHApPy50eXBlPT09Imp1bmN0aW9uIiYmKHVzKG0pP1QrPW09PT0iTCI/aTotaTpFKz1tPT09IlQiP2k6LWkpLGxbMF0uX3ByaXZhdGUucnNjcmF0Y2gpe2xldCBDPXQuaW5zZXJ0KCJnIik7aWYoQy5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke3h9LCR7Yn0gTCAke3d9LCR7X30gTCR7VH0sJHtFfSBgKS5hdHRyKCJjbGFzcyIsImVkZ2UiKSxmKXtsZXQgQT11cyhoKT9tYltoXSh4LGEpOngtcyxJPXFjKGgpP21iW2hdKGIsYSk6Yi1zO0MuaW5zZXJ0KCJwb2x5Z29uIikuYXR0cigicG9pbnRzIixsRltoXShhKSkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7QX0sJHtJfSlgKS5hdHRyKCJjbGFzcyIsImFycm93Iil9aWYoZyl7bGV0IEE9dXMobSk/bWJbbV0oVCxhKTpULXMsST1xYyhtKT9tYlttXShFLGEpOkUtcztDLmluc2VydCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsbEZbbV0oYSkpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke0F9LCR7SX0pYCkuYXR0cigiY2xhc3MiLCJhcnJvdyIpfWlmKHYpe2xldCBBPXJTKGgsbSk/IlhZIjp1cyhoKT8iWCI6IlkiLEk9MDtBPT09IlgiP0k9TWF0aC5hYnMoeC1UKTpBPT09IlkiP0k9TWF0aC5hYnMoYi1FKS8xLjU6ST1NYXRoLmFicyh4LVQpLzI7bGV0IEQ9Qy5hcHBlbmQoImciKTtpZihhd2FpdCBTaShELHYse3VzZUh0bWxMYWJlbHM6ITEsd2lkdGg6SSxjbGFzc2VzOiJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbCJ9LGRlKCkpLEQuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIiksQT09PSJYIilELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIiwgIitfKyIpIik7ZWxzZSBpZihBPT09IlkiKUQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdysiLCAiK18rIikgcm90YXRlKC05MCkiKTtlbHNlIGlmKEE9PT0iWFkiKXtsZXQgaz1nYihoLG0pO2lmKGsmJkp2ZShrKSl7bGV0IFI9RC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksW1MsT109dDJlKGspO0QuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixgcm90YXRlKCR7LTEqUypPKjQ1fSlgKTtsZXQgTj1ELm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtELmF0dHIoInRyYW5zZm9ybSIsYAogICAgICAgICAgICAgICAgdHJhbnNsYXRlKCR7d30sICR7Xy1SLmhlaWdodC8yfSkKICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke1MqTi53aWR0aC8yfSwgJHtPKk4uaGVpZ2h0LzJ9KQogICAgICAgICAgICAgICAgcm90YXRlKCR7LTEqUypPKjQ1fSwgMCwgJHtSLmhlaWdodC8yfSkKICAgICAgICAgICAgICBgKX19fX19KSl9LCJkcmF3RWRnZXMiKSxoMmU9byhhc3luYyBmdW5jdGlvbih0LGUpe2xldCBuPUxpKCJwYWRkaW5nIikqLjc1LGk9TGkoImZvbnRTaXplIikscz1MaSgiaWNvblNpemUiKS8yO2F3YWl0IFByb21pc2UuYWxsKGUubm9kZXMoKS5tYXAoYXN5bmMgbD0+e2xldCB1PU1mKGwpO2lmKHUudHlwZT09PSJncm91cCIpe2xldHtoLHc6Zix4MTpkLHkxOnB9PWwuYm91bmRpbmdCb3goKTt0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGQrcykuYXR0cigieSIscCtzKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixoKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIik7bGV0IG09dC5hcHBlbmQoImciKSxnPWQseT1wO2lmKHUuaWNvbil7bGV0IHY9bS5hcHBlbmQoImciKTt2Lmh0bWwoYDxnPiR7YXdhaXQgd28odS5pY29uLHtoZWlnaHQ6bix3aWR0aDpuLGZhbGxiYWNrUHJlZml4OmowLnByZWZpeH0pfTwvZz5gKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhnK3MrMSkrIiwgIisoeStzKzEpKyIpIiksZys9bix5Kz1pLzItMS0yfWlmKHUubGFiZWwpe2xldCB2PW0uYXBwZW5kKCJnIik7YXdhaXQgU2kodix1LmxhYmVsLHt1c2VIdG1sTGFiZWxzOiExLHdpZHRoOmYsY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxkZSgpKSx2LmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJzdGFydCIpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhnK3MrNCkrIiwgIisoeStzKzIpKyIpIil9fX0pKX0sImRyYXdHcm91cHMiKSxmMmU9byhhc3luYyBmdW5jdGlvbih0LGUscil7Zm9yKGxldCBuIG9mIHIpe2xldCBpPWUuYXBwZW5kKCJnIiksYT1MaSgiaWNvblNpemUiKTtpZihuLnRpdGxlKXtsZXQgaD1pLmFwcGVuZCgiZyIpO2F3YWl0IFNpKGgsbi50aXRsZSx7dXNlSHRtbExhYmVsczohMSx3aWR0aDphKjEuNSxjbGFzc2VzOiJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbCJ9LGRlKCkpLGguYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIiksaC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLzIrIiwgIithKyIpIil9bGV0IHM9aS5hcHBlbmQoImciKTtpZihuLmljb24pcy5odG1sKGA8Zz4ke2F3YWl0IHdvKG4uaWNvbix7aGVpZ2h0OmEsd2lkdGg6YSxmYWxsYmFja1ByZWZpeDpqMC5wcmVmaXh9KX08L2c+YCk7ZWxzZSBpZihuLmljb25UZXh0KXtzLmh0bWwoYDxnPiR7YXdhaXQgd28oImJsYW5rIix7aGVpZ2h0OmEsd2lkdGg6YSxmYWxsYmFja1ByZWZpeDpqMC5wcmVmaXh9KX08L2c+YCk7bGV0IGQ9cy5hcHBlbmQoImciKS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixhKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLXRleHQiKS5hdHRyKCJzdHlsZSIsYGhlaWdodDogJHthfXB4O2ApLmFwcGVuZCgiZGl2IikuaHRtbChuLmljb25UZXh0KSxwPXBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQubm9kZSgpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoImZvbnQtc2l6ZSIpLnJlcGxhY2UoL1xEL2csIiIpKT8/MTY7ZC5hdHRyKCJzdHlsZSIsYC13ZWJraXQtbGluZS1jbGFtcDogJHtNYXRoLmZsb29yKChhLTIpL3ApfTtgKX1lbHNlIHMuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJub2RlLWJrZyIpLmF0dHIoImlkIiwibm9kZS0iK24uaWQpLmF0dHIoImQiLGBNMCAke2F9IHYkey1hfSBxMCwtNSA1LC01IGgke2F9IHE1LDAgNSw1IHYke2F9IEgwIFpgKTtpLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLXNlcnZpY2UiKTtsZXR7d2lkdGg6bCxoZWlnaHQ6dX09aS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSx0LnNldEVsZW1lbnRGb3JJZChuLmlkLGkpfXJldHVybiAwfSwiZHJhd1NlcnZpY2VzIiksZDJlPW8oZnVuY3Rpb24odCxlLHIpe3IuZm9yRWFjaChuPT57bGV0IGk9ZS5hcHBlbmQoImciKSxhPUxpKCJpY29uU2l6ZSIpO2kuYXBwZW5kKCJnIikuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrbi5pZCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMCIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLGEpLGkuYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtanVuY3Rpb24iKTtsZXR7d2lkdGg6bCxoZWlnaHQ6dX09aS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtpLndpZHRoPWwsaS5oZWlnaHQ9dSx0LnNldEVsZW1lbnRGb3JJZChuLmlkLGkpfSl9LCJkcmF3SnVuY3Rpb25zIil9KTtmdW5jdGlvbiBMaXQodCxlKXt0LmZvckVhY2gocj0+e2UuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e3R5cGU6InNlcnZpY2UiLGlkOnIuaWQsaWNvbjpyLmljb24sbGFiZWw6ci50aXRsZSxwYXJlbnQ6ci5pbix3aWR0aDpMaSgiaWNvblNpemUiKSxoZWlnaHQ6TGkoImljb25TaXplIil9LGNsYXNzZXM6Im5vZGUtc2VydmljZSJ9KX0pfWZ1bmN0aW9uIERpdCh0LGUpe3QuZm9yRWFjaChyPT57ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7dHlwZToianVuY3Rpb24iLGlkOnIuaWQscGFyZW50OnIuaW4sd2lkdGg6TGkoImljb25TaXplIiksaGVpZ2h0OkxpKCJpY29uU2l6ZSIpfSxjbGFzc2VzOiJub2RlLWp1bmN0aW9uIn0pfSl9ZnVuY3Rpb24gTml0KHQsZSl7ZS5ub2RlcygpLm1hcChyPT57bGV0IG49TWYocik7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bi54PXIucG9zaXRpb24oKS54LG4ueT1yLnBvc2l0aW9uKCkueSx0LmdldEVsZW1lbnRCeUlkKG4uaWQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLnh8fDApKyIsIisobi55fHwwKSsiKSIpfSl9ZnVuY3Rpb24gUml0KHQsZSl7dC5mb3JFYWNoKHI9PntlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOnt0eXBlOiJncm91cCIsaWQ6ci5pZCxpY29uOnIuaWNvbixsYWJlbDpyLnRpdGxlLHBhcmVudDpyLmlufSxjbGFzc2VzOiJub2RlLWdyb3VwIn0pfSl9ZnVuY3Rpb24gTWl0KHQsZSl7dC5mb3JFYWNoKHI9PntsZXR7bGhzSWQ6bixyaHNJZDppLGxoc0ludG86YSxsaHNHcm91cDpzLHJoc0ludG86bCxsaHNEaXI6dSxyaHNEaXI6aCxyaHNHcm91cDpmLHRpdGxlOmR9PXIscD1yUyhyLmxoc0RpcixyLnJoc0Rpcik/InNlZ21lbnRzIjoic3RyYWlnaHQiLG09e2lkOmAke259LSR7aX1gLGxhYmVsOmQsc291cmNlOm4sc291cmNlRGlyOnUsc291cmNlQXJyb3c6YSxzb3VyY2VHcm91cDpzLHNvdXJjZUVuZHBvaW50OnU9PT0iTCI/IjAgNTAlIjp1PT09IlIiPyIxMDAlIDUwJSI6dT09PSJUIj8iNTAlIDAiOiI1MCUgMTAwJSIsdGFyZ2V0OmksdGFyZ2V0RGlyOmgsdGFyZ2V0QXJyb3c6bCx0YXJnZXRHcm91cDpmLHRhcmdldEVuZHBvaW50Omg9PT0iTCI/IjAgNTAlIjpoPT09IlIiPyIxMDAlIDUwJSI6aD09PSJUIj8iNTAlIDAiOiI1MCUgMTAwJSJ9O2UuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6bSxjbGFzc2VzOnB9KX0pfWZ1bmN0aW9uIElpdCh0KXtsZXQgZT10Lm1hcChpPT57bGV0IGE9e30scz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaCgoW2wsW3UsaF1dKT0+e2FbaF18fChhW2hdPVtdKSxzW3VdfHwoc1t1XT1bXSksYVtoXS5wdXNoKGwpLHNbdV0ucHVzaChsKX0pLHtob3JpejpPYmplY3QudmFsdWVzKGEpLmZpbHRlcihsPT5sLmxlbmd0aD4xKSx2ZXJ0Ok9iamVjdC52YWx1ZXMocykuZmlsdGVyKGw9PmwubGVuZ3RoPjEpfX0pLFtyLG5dPWUucmVkdWNlKChbaSxhXSx7aG9yaXo6cyx2ZXJ0Omx9KT0+W1suLi5pLC4uLnNdLFsuLi5hLC4uLmxdXSxbW10sW11dKTtyZXR1cm57aG9yaXpvbnRhbDpyLHZlcnRpY2FsOm59fWZ1bmN0aW9uIE9pdCh0KXtsZXQgZT1bXSxyPW8oaT0+YCR7aVswXX0sJHtpWzFdfWAsInBvc1RvU3RyIiksbj1vKGk9Pmkuc3BsaXQoIiwiKS5tYXAoYT0+cGFyc2VJbnQoYSkpLCJzdHJUb1BvcyIpO3JldHVybiB0LmZvckVhY2goaT0+e2xldCBhPU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhpKS5tYXAoKFtoLGZdKT0+W3IoZiksaF0pKSxzPVtyKFswLDBdKV0sbD17fSx1PXtMOlstMSwwXSxSOlsxLDBdLFQ6WzAsMV0sQjpbMCwtMV19O2Zvcig7cy5sZW5ndGg+MDspe2xldCBoPXMuc2hpZnQoKTtpZihoKXtsW2hdPTE7bGV0IGY9YVtoXTtpZihmKXtsZXQgZD1uKGgpO09iamVjdC5lbnRyaWVzKHUpLmZvckVhY2goKFtwLG1dKT0+e2xldCBnPXIoW2RbMF0rbVswXSxkWzFdK21bMV1dKSx5PWFbZ107eSYmIWxbZ10mJihzLnB1c2goZyksZS5wdXNoKHtbb0ZbcF1dOnksW29GW1p2ZShwKV1dOmYsZ2FwOjEuNSpMaSgiaWNvblNpemUiKX0pKX0pfX19fSksZX1mdW5jdGlvbiBQaXQodCxlLHIsbix7c3BhdGlhbE1hcHM6aX0pe3JldHVybiBuZXcgUHJvbWlzZShhPT57bGV0IHM9emUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLGw9c2woe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoic3RyYWlnaHQiLGxhYmVsOiJkYXRhKGxhYmVsKSIsInNvdXJjZS1lbmRwb2ludCI6ImRhdGEoc291cmNlRW5kcG9pbnQpIiwidGFyZ2V0LWVuZHBvaW50IjoiZGF0YSh0YXJnZXRFbmRwb2ludCkifX0se3NlbGVjdG9yOiJlZGdlLnNlZ21lbnRzIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoic2VnbWVudHMiLCJzZWdtZW50LXdlaWdodHMiOiIwIiwic2VnbWVudC1kaXN0YW5jZXMiOlsuNV0sImVkZ2UtZGlzdGFuY2VzIjoiZW5kcG9pbnRzIiwic291cmNlLWVuZHBvaW50IjoiZGF0YShzb3VyY2VFbmRwb2ludCkiLCJ0YXJnZXQtZW5kcG9pbnQiOiJkYXRhKHRhcmdldEVuZHBvaW50KSJ9fSx7c2VsZWN0b3I6Im5vZGUiLHN0eWxlOnsiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOiJpbmNsdWRlIn19LHtzZWxlY3Rvcjoibm9kZVtsYWJlbF0iLHN0eWxlOnsidGV4dC12YWxpZ24iOiJib3R0b20iLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsImZvbnQtc2l6ZSI6YCR7TGkoImZvbnRTaXplIil9cHhgfX0se3NlbGVjdG9yOiIubm9kZS1zZXJ2aWNlIixzdHlsZTp7bGFiZWw6ImRhdGEobGFiZWwpIix3aWR0aDoiZGF0YSh3aWR0aCkiLGhlaWdodDoiZGF0YShoZWlnaHQpIn19LHtzZWxlY3RvcjoiLm5vZGUtanVuY3Rpb24iLHN0eWxlOnt3aWR0aDoiZGF0YSh3aWR0aCkiLGhlaWdodDoiZGF0YShoZWlnaHQpIn19LHtzZWxlY3RvcjoiLm5vZGUtZ3JvdXAiLHN0eWxlOntwYWRkaW5nOmAke0xpKCJwYWRkaW5nIil9cHhgfX1dfSk7cy5yZW1vdmUoKSxSaXQocixsKSxMaXQodCxsKSxEaXQoZSxsKSxNaXQobixsKTtsZXQgdT1JaXQoaSksaD1PaXQoaSksZj1sLmxheW91dCh7bmFtZToiZmNvc2UiLHF1YWxpdHk6InByb29mIixzdHlsZUVuYWJsZWQ6ITEsYW5pbWF0ZTohMSxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaWRlYWxFZGdlTGVuZ3RoKGQpe2xldFtwLG1dPWQuY29ubmVjdGVkTm9kZXMoKSx7cGFyZW50Omd9PU1mKHApLHtwYXJlbnQ6eX09TWYobSk7cmV0dXJuIGc9PT15PzEuNSpMaSgiaWNvblNpemUiKTouNSpMaSgiaWNvblNpemUiKX0sZWRnZUVsYXN0aWNpdHkoZCl7bGV0W3AsbV09ZC5jb25uZWN0ZWROb2RlcygpLHtwYXJlbnQ6Z309TWYocCkse3BhcmVudDp5fT1NZihtKTtyZXR1cm4gZz09PXk/LjQ1Oi4wMDF9LGFsaWdubWVudENvbnN0cmFpbnQ6dSxyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ6aH0pO2Yub25lKCJsYXlvdXRzdG9wIiwoKT0+e2Z1bmN0aW9uIGQocCxtLGcseSl7bGV0IHYseCx7eDpiLHk6d309cCx7eDpfLHk6VH09bTt4PSh5LXcrKGItZykqKHctVCkvKGItXykpL01hdGguc3FydCgxK01hdGgucG93KCh3LVQpLyhiLV8pLDIpKSx2PU1hdGguc3FydChNYXRoLnBvdyh5LXcsMikrTWF0aC5wb3coZy1iLDIpLU1hdGgucG93KHgsMikpO2xldCBFPU1hdGguc3FydChNYXRoLnBvdyhfLWIsMikrTWF0aC5wb3coVC13LDIpKTt2PXYvRTtsZXQgTD0oXy1iKSooeS13KS0oVC13KSooZy1iKTtzd2l0Y2goITApe2Nhc2UgTD49MDpMPTE7YnJlYWs7Y2FzZSBMPDA6TD0tMTticmVha31sZXQgQz0oXy1iKSooZy1iKSsoVC13KSooeS13KTtzd2l0Y2goITApe2Nhc2UgQz49MDpDPTE7YnJlYWs7Y2FzZSBDPDA6Qz0tMTticmVha31yZXR1cm4geD1NYXRoLmFicyh4KSpMLHY9dipDLHtkaXN0YW5jZXM6eCx3ZWlnaHRzOnZ9fW8oZCwiZ2V0U2VnbWVudFdlaWdodHMiKSxsLnN0YXJ0QmF0Y2goKTtmb3IobGV0IHAgb2YgT2JqZWN0LnZhbHVlcyhsLmVkZ2VzKCkpKWlmKHAuZGF0YT8uKCkpe2xldHt4Om0seTpnfT1wLnNvdXJjZSgpLnBvc2l0aW9uKCkse3g6eSx5OnZ9PXAudGFyZ2V0KCkucG9zaXRpb24oKTtpZihtIT09eSYmZyE9PXYpe2xldCB4PXAuc291cmNlRW5kcG9pbnQoKSxiPXAudGFyZ2V0RW5kcG9pbnQoKSx7c291cmNlRGlyOnd9PW5TKHApLFtfLFRdPXFjKHcpP1t4LngsYi55XTpbYi54LHgueV0se3dlaWdodHM6RSxkaXN0YW5jZXM6TH09ZCh4LGIsXyxUKTtwLnN0eWxlKCJzZWdtZW50LWRpc3RhbmNlcyIsTCkscC5zdHlsZSgic2VnbWVudC13ZWlnaHRzIixFKX19bC5lbmRCYXRjaCgpLGYucnVuKCl9KSxmLnJ1bigpLGwucmVhZHkoZD0+e1kuaW5mbygiUmVhZHkiLGQpLGEobCl9KX0pfXZhciBtMmUsQml0LGcyZSx5MmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLYygpO2tCKCk7bTJlPWthKGMyZSgpLDEpO21yKCk7aHQoKTtIdSgpO25pKCk7eWIoKTttRigpO2lTKCk7cDJlKCk7TWIoW3tuYW1lOmowLnByZWZpeCxpY29uczpqMH1dKTtzbC51c2UobTJlLmRlZmF1bHQpO28oTGl0LCJhZGRTZXJ2aWNlcyIpO28oRGl0LCJhZGRKdW5jdGlvbnMiKTtvKE5pdCwicG9zaXRpb25Ob2RlcyIpO28oUml0LCJhZGRHcm91cHMiKTtvKE1pdCwiYWRkRWRnZXMiKTtvKElpdCwiZ2V0QWxpZ25tZW50cyIpO28oT2l0LCJnZXRSZWxhdGl2ZUNvbnN0cmFpbnRzIik7byhQaXQsImxheW91dEFyY2hpdGVjdHVyZSIpO0JpdD1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0U2VydmljZXMoKSxzPWkuZ2V0SnVuY3Rpb25zKCksbD1pLmdldEdyb3VwcygpLHU9aS5nZXRFZGdlcygpLGg9aS5nZXREYXRhU3RydWN0dXJlcygpLGY9T2EoZSksZD1mLmFwcGVuZCgiZyIpO2QuYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtZWRnZXMiKTtsZXQgcD1mLmFwcGVuZCgiZyIpO3AuYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtc2VydmljZXMiKTtsZXQgbT1mLmFwcGVuZCgiZyIpO20uYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtZ3JvdXBzIiksYXdhaXQgZjJlKGkscCxhKSxkMmUoaSxwLHMpO2xldCBnPWF3YWl0IFBpdChhLHMsbCx1LGgpO2F3YWl0IHUyZShkLGcpLGF3YWl0IGgyZShtLGcpLE5pdChpLGcpLF9vKHZvaWQgMCxmLExpKCJwYWRkaW5nIiksTGkoInVzZU1heFdpZHRoIikpfSwiZHJhdyIpLGcyZT17ZHJhdzpCaXR9fSk7dmFyIHYyZT17fTt2cih2MmUse2RpYWdyYW06KCk9PkZpdH0pO3ZhciBGaXQseDJlPU0oKCk9PnsidXNlIHN0cmljdCI7czJlKCk7eWIoKTtsMmUoKTt5MmUoKTtGaXQ9e3BhcnNlcjphMmUsZGI6WDAscmVuZGVyZXI6ZzJlLHN0eWxlczpvMmV9fSk7dmFyIEVhdD17fTt2cihFYXQse2RlZmF1bHQ6KCk9PmthdH0pO0tjKCk7TVMoKTskZigpO3ZhciBXWD0iYzQiLHM3ZT1vKHQ9Pi9eXHMqQzRDb250ZXh0fEM0Q29udGFpbmVyfEM0Q29tcG9uZW50fEM0RHluYW1pY3xDNERlcGxveW1lbnQvLnRlc3QodCksImRldGVjdG9yIiksbzdlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihIWCgpLFVYKSk7cmV0dXJue2lkOldYLGRpYWdyYW06dH19LCJsb2FkZXIiKSxsN2U9e2lkOldYLGRldGVjdG9yOnM3ZSxsb2FkZXI6bzdlfSxZWD1sN2U7dmFyIGppZT0iZmxvd2NoYXJ0IixkUGU9bygodCxlKT0+ZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciJ8fGU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImVsayI/ITE6L15ccypncmFwaC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxwUGU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGZUKCksaFQpKTtyZXR1cm57aWQ6amllLGRpYWdyYW06dH19LCJsb2FkZXIiKSxtUGU9e2lkOmppZSxkZXRlY3RvcjpkUGUsbG9hZGVyOnBQZX0sS2llPW1QZTt2YXIgUWllPSJmbG93Y2hhcnQtdjIiLGdQZT1vKCh0LGUpPT5lPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS1kMyI/ITE6KGU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImVsayImJihlLmxheW91dD0iZWxrIiksL15ccypncmFwaC8udGVzdCh0KSYmZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypmbG93Y2hhcnQvLnRlc3QodCkpLCJkZXRlY3RvciIpLHlQZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZlQoKSxoVCkpO3JldHVybntpZDpRaWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLHZQZT17aWQ6UWllLGRldGVjdG9yOmdQZSxsb2FkZXI6eVBlfSxaaWU9dlBlO3ZhciBBYWU9ImVyIixxUGU9byh0PT4vXlxzKmVyRGlhZ3JhbS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxYUGU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KENhZSgpLFNhZSkpO3JldHVybntpZDpBYWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLGpQZT17aWQ6QWFlLGRldGVjdG9yOnFQZSxsb2FkZXI6WFBlfSxfYWU9alBlO3ZhciBGdWU9ImdpdEdyYXBoIix4JGU9byh0PT4vXlxzKmdpdEdyYXBoLy50ZXN0KHQpLCJkZXRlY3RvciIpLGIkZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQnVlKCksUHVlKSk7cmV0dXJue2lkOkZ1ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksdyRlPXtpZDpGdWUsZGV0ZWN0b3I6eCRlLGxvYWRlcjpiJGV9LHp1ZT13JGU7dmFyIG1oZT0iZ2FudHQiLGxWZT1vKHQ9Pi9eXHMqZ2FudHQvLnRlc3QodCksImRldGVjdG9yIiksY1ZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihwaGUoKSxkaGUpKTtyZXR1cm57aWQ6bWhlLGRpYWdyYW06dH19LCJsb2FkZXIiKSx1VmU9e2lkOm1oZSxkZXRlY3RvcjpsVmUsbG9hZGVyOmNWZX0sZ2hlPXVWZTt2YXIgU2hlPSJpbmZvIixnVmU9byh0PT4vXlxzKmluZm8vLnRlc3QodCksImRldGVjdG9yIikseVZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihFaGUoKSxraGUpKTtyZXR1cm57aWQ6U2hlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxDaGU9e2lkOlNoZSxkZXRlY3RvcjpnVmUsbG9hZGVyOnlWZX07dmFyIFBoZT0icGllIixEVmU9byh0PT4vXlxzKnBpZS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxOVmU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE9oZSgpLEloZSkpO3JldHVybntpZDpQaGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLEJoZT17aWQ6UGhlLGRldGVjdG9yOkRWZSxsb2FkZXI6TlZlfTt2YXIgS2hlPSJxdWFkcmFudENoYXJ0IixqVmU9byh0PT4vXlxzKnF1YWRyYW50Q2hhcnQvLnRlc3QodCksImRldGVjdG9yIiksS1ZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihqaGUoKSxYaGUpKTtyZXR1cm57aWQ6S2hlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxRVmU9e2lkOktoZSxkZXRlY3RvcjpqVmUsbG9hZGVyOktWZX0sUWhlPVFWZTt2YXIgRWZlPSJ4eWNoYXJ0IixkVWU9byh0PT4vXlxzKnh5Y2hhcnQtYmV0YS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxwVWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGtmZSgpLFRmZSkpO3JldHVybntpZDpFZmUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLG1VZT17aWQ6RWZlLGRldGVjdG9yOmRVZSxsb2FkZXI6cFVlfSxTZmU9bVVlO3ZhciAkZmU9InJlcXVpcmVtZW50IixVVWU9byh0PT4vXlxzKnJlcXVpcmVtZW50KERpYWdyYW0pPy8udGVzdCh0KSwiZGV0ZWN0b3IiKSxIVWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEdmZSgpLHpmZSkpO3JldHVybntpZDokZmUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLFdVZT17aWQ6JGZlLGRldGVjdG9yOlVVZSxsb2FkZXI6SFVlfSxWZmU9V1VlO3ZhciBtZGU9InNlcXVlbmNlIixYSGU9byh0PT4vXlxzKnNlcXVlbmNlRGlhZ3JhbS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxqSGU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHBkZSgpLGRkZSkpO3JldHVybntpZDptZGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLEtIZT17aWQ6bWRlLGRldGVjdG9yOlhIZSxsb2FkZXI6akhlfSxnZGU9S0hlO3ZhciBMZGU9ImNsYXNzIixfV2U9bygodCxlKT0+ZT8uY2xhc3M/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKmNsYXNzRGlhZ3JhbS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxMV2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KF9kZSgpLEFkZSkpO3JldHVybntpZDpMZGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLERXZT17aWQ6TGRlLGRldGVjdG9yOl9XZSxsb2FkZXI6TFdlfSxEZGU9RFdlO3ZhciBNZGU9ImNsYXNzRGlhZ3JhbSIsUldlPW8oKHQsZSk9Pi9eXHMqY2xhc3NEaWFncmFtLy50ZXN0KHQpJiZlPy5jbGFzcz8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqY2xhc3NEaWFncmFtLXYyLy50ZXN0KHQpLCJkZXRlY3RvciIpLE1XZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUmRlKCksTmRlKSk7cmV0dXJue2lkOk1kZSxkaWFncmFtOnR9fSwibG9hZGVyIiksSVdlPXtpZDpNZGUsZGV0ZWN0b3I6UldlLGxvYWRlcjpNV2V9LElkZT1JV2U7dmFyIFMwZT0ic3RhdGUiLExZZT1vKCh0LGUpPT5lPy5zdGF0ZT8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqc3RhdGVEaWFncmFtLy50ZXN0KHQpLCJkZXRlY3RvciIpLERZZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oRTBlKCksazBlKSk7cmV0dXJue2lkOlMwZSxkaWFncmFtOnR9fSwibG9hZGVyIiksTlllPXtpZDpTMGUsZGV0ZWN0b3I6TFllLGxvYWRlcjpEWWV9LEMwZT1OWWU7dmFyIEwwZT0ic3RhdGVEaWFncmFtIixNWWU9bygodCxlKT0+ISEoL15ccypzdGF0ZURpYWdyYW0tdjIvLnRlc3QodCl8fC9eXHMqc3RhdGVEaWFncmFtLy50ZXN0KHQpJiZlPy5zdGF0ZT8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiKSwiZGV0ZWN0b3IiKSxJWWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KF8wZSgpLEEwZSkpO3JldHVybntpZDpMMGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLE9ZZT17aWQ6TDBlLGRldGVjdG9yOk1ZZSxsb2FkZXI6SVllfSxEMGU9T1llO3ZhciBZMGU9ImpvdXJuZXkiLHJxZT1vKHQ9Pi9eXHMqam91cm5leS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxucWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFcwZSgpLEgwZSkpO3JldHVybntpZDpZMGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLGlxZT17aWQ6WTBlLGRldGVjdG9yOnJxZSxsb2FkZXI6bnFlfSxxMGU9aXFlO2h0KCk7SHUoKTtuaSgpO3ZhciBhcWU9bygodCxlLHIpPT57WS5kZWJ1ZyhgcmVuZGVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yCmApO2xldCBuPU9hKGUpLGk9bi5hcHBlbmQoImciKTtuLmF0dHIoInZpZXdCb3giLCIwIDAgMjQxMiA1MTIiKSxacihuLDEwMCw1MTIsITApLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MTEuMzEzLDEyMy4zMTNjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzItOS4zNzUsOS4zNzUtMjAuNjg4LTIwLjY4OGMtMTIuNDg0LTEyLjUtMzIuNzY2LTEyLjUtNDUuMjUsMGwtMTYsMTZjLTEuMjYxLDEuMjYxLTIuMzA0LDIuNjQ4LTMuMzEsNC4wNTEtMjEuNzM5LTguNTYxLTQ1LjMyNC0xMy40MjYtNzAuMDY1LTEzLjQyNi0xMDUuODY3LDAtMTkyLDg2LjEzMy0xOTIsMTkyczg2LjEzMywxOTIgMTkyLDE5MiAxOTItODYuMTMzIDE5Mi0xOTJjMC0yNC43NDEtNC44NjQtNDguMzI3LTEzLjQyNi03MC4wNjUgMS40MDItMS4wMDcgMi43OS0yLjA0OSA0LjA1MS0zLjMxbDE2LTE2YzEyLjUtMTIuNDkyIDEyLjUtMzIuNzU4IDAtNDUuMjVsLTIwLjY4OC0yMC42ODggOS4zNzUtOS4zNzUgMzIuMDAxLTMxLjk5OXptLTIxOS4zMTMsMTAwLjY4N2MtNTIuOTM4LDAtOTYsNDMuMDYzLTk2LDk2IDAsOC44MzYtNy4xNjQsMTYtMTYsMTZzLTE2LTcuMTY0LTE2LTE2YzAtNzAuNTc4IDU3LjQyMi0xMjggMTI4LTEyOCA4LjgzNiwwIDE2LDcuMTY0IDE2LDE2cy03LjE2NCwxNi0xNiwxNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDU5LjAyLDE0OC45OGMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNiwxNmMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi4wMDEtMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTM0MC4zOTUsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LTE2Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE1Ljk5OSwxNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDAwLDY0YzguODQ0LDAgMTYtNy4xNjQgMTYtMTZ2LTMyYzAtOC44MzYtNy4xNTYtMTYtMTYtMTYtOC44NDQsMC0xNiw3LjE2NC0xNiwxNnYzMmMwLDguODM2IDcuMTU2LDE2IDE2LDE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00OTYsOTYuNTg2aC0zMmMtOC44NDQsMC0xNiw3LjE2NC0xNiwxNiAwLDguODM2IDcuMTU2LDE2IDE2LDE2aDMyYzguODQ0LDAgMTYtNy4xNjQgMTYtMTYgMC04LjgzNi03LjE1Ni0xNi0xNi0xNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDM2Ljk4LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODhsMzItMzJjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzJjLTYuMjUxLDYuMjUtNi4yNTEsMTYuMzc1LTAuMDAxLDIyLjYyNXoiKSxpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDE0NDApLmF0dHIoInkiLDI1MCkuYXR0cigiZm9udC1zaXplIiwiMTUwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KCJTeW50YXggZXJyb3IgaW4gdGV4dCIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoYG1lcm1haWQgdmVyc2lvbiAke3J9YCl9LCJkcmF3IikseVA9e2RyYXc6YXFlfSxYMGU9eVA7dmFyIHNxZT17ZGI6e30scmVuZGVyZXI6eVAscGFyc2VyOntwYXJzZTpvKCgpPT57fSwicGFyc2UiKX19LGowZT1zcWU7dmFyIEswZT0iZmxvd2NoYXJ0LWVsayIsb3FlPW8oKHQsZT17fSk9Pi9eXHMqZmxvd2NoYXJ0LWVsay8udGVzdCh0KXx8L15ccypmbG93Y2hhcnR8Z3JhcGgvLnRlc3QodCkmJmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImVsayI/KGUubGF5b3V0PSJlbGsiLCEwKTohMSwiZGV0ZWN0b3IiKSxscWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGZUKCksaFQpKTtyZXR1cm57aWQ6SzBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxjcWU9e2lkOkswZSxkZXRlY3RvcjpvcWUsbG9hZGVyOmxxZX0sUTBlPWNxZTt2YXIga3BlPSJ0aW1lbGluZSIsX3FlPW8odD0+L15ccyp0aW1lbGluZS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxMcWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFRwZSgpLHdwZSkpO3JldHVybntpZDprcGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLERxZT17aWQ6a3BlLGRldGVjdG9yOl9xZSxsb2FkZXI6THFlfSxFcGU9RHFlO3ZhciBWMWU9Im1pbmRtYXAiLEZ0dD1vKHQ9Pi9eXHMqbWluZG1hcC8udGVzdCh0KSwiZGV0ZWN0b3IiKSx6dHQ9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KCQxZSgpLEcxZSkpO3JldHVybntpZDpWMWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLEd0dD17aWQ6VjFlLGRldGVjdG9yOkZ0dCxsb2FkZXI6enR0fSxVMWU9R3R0O3ZhciB0eWU9ImthbmJhbiIscnJ0PW8odD0+L15ccyprYW5iYW4vLnRlc3QodCksImRldGVjdG9yIiksbnJ0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihleWUoKSxKMWUpKTtyZXR1cm57aWQ6dHllLGRpYWdyYW06dH19LCJsb2FkZXIiKSxpcnQ9e2lkOnR5ZSxkZXRlY3RvcjpycnQsbG9hZGVyOm5ydH0scnllPWlydDt2YXIgT3llPSJzYW5rZXkiLENydD1vKHQ9Pi9eXHMqc2Fua2V5LWJldGEvLnRlc3QodCksImRldGVjdG9yIiksQXJ0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihJeWUoKSxNeWUpKTtyZXR1cm57aWQ6T3llLGRpYWdyYW06dH19LCJsb2FkZXIiKSxfcnQ9e2lkOk95ZSxkZXRlY3RvcjpDcnQsbG9hZGVyOkFydH0sUHllPV9ydDt2YXIgWXllPSJwYWNrZXQiLCRydD1vKHQ9Pi9eXHMqcGFja2V0LWJldGEvLnRlc3QodCksImRldGVjdG9yIiksVnJ0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihXeWUoKSxIeWUpKTtyZXR1cm57aWQ6WXllLGRpYWdyYW06dH19LCJsb2FkZXIiKSxxeWU9e2lkOll5ZSxkZXRlY3RvcjokcnQsbG9hZGVyOlZydH07dmFyIEt2ZT0iYmxvY2siLGNpdD1vKHQ9Pi9eXHMqYmxvY2stYmV0YS8udGVzdCh0KSwiZGV0ZWN0b3IiKSx1aXQ9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGp2ZSgpLFh2ZSkpO3JldHVybntpZDpLdmUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLGhpdD17aWQ6S3ZlLGRldGVjdG9yOmNpdCxsb2FkZXI6dWl0fSxRdmU9aGl0O3ZhciBiMmU9ImFyY2hpdGVjdHVyZSIseml0PW8odD0+L15ccyphcmNoaXRlY3R1cmUvLnRlc3QodCksImRldGVjdG9yIiksR2l0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih4MmUoKSx2MmUpKTtyZXR1cm57aWQ6YjJlLGRpYWdyYW06dH19LCJsb2FkZXIiKSwkaXQ9e2lkOmIyZSxkZXRlY3Rvcjp6aXQsbG9hZGVyOkdpdH0sdzJlPSRpdDskZigpO1Z0KCk7dmFyIFQyZT0hMSxDMT1vKCgpPT57VDJlfHwoVDJlPSEwLFFmKCJlcnJvciIsajBlLHQ9PnQudG9Mb3dlckNhc2UoKS50cmltKCk9PT0iZXJyb3IiKSxRZigiLS0tIix7ZGI6e2NsZWFyOm8oKCk9Pnt9LCJjbGVhciIpfSxzdHlsZXM6e30scmVuZGVyZXI6e2RyYXc6bygoKT0+e30sImRyYXciKX0scGFyc2VyOntwYXJzZTpvKCgpPT57dGhyb3cgbmV3IEVycm9yKCJEaWFncmFtcyBiZWdpbm5pbmcgd2l0aCAtLS0gYXJlIG5vdCB2YWxpZC4gSWYgeW91IHdlcmUgdHJ5aW5nIHRvIHVzZSBhIFlBTUwgZnJvbnQtbWF0dGVyLCBwbGVhc2UgZW5zdXJlIHRoYXQgeW91J3ZlIGNvcnJlY3RseSBvcGVuZWQgYW5kIGNsb3NlZCB0aGUgWUFNTCBmcm9udC1tYXR0ZXIgd2l0aCB1bi1pbmRlbnRlZCBgLS0tYCBibG9ja3MiKX0sInBhcnNlIil9LGluaXQ6bygoKT0+bnVsbCwiaW5pdCIpfSx0PT50LnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgiLS0tIikpLEJiKFlYLHJ5ZSxJZGUsRGRlLF9hZSxnaGUsQ2hlLEJoZSxWZmUsZ2RlLFEwZSxaaWUsS2llLFUxZSxFcGUsenVlLEQwZSxDMGUscTBlLFFoZSxQeWUscXllLFNmZSxRdmUsdzJlKSl9LCJhZGREaWFncmFtcyIpO2h0KCk7JGYoKTtWdCgpO3ZhciBrMmU9byhhc3luYygpPT57WS5kZWJ1ZygiTG9hZGluZyByZWdpc3RlcmVkIGRpYWdyYW1zIik7bGV0IGU9KGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChPYmplY3QuZW50cmllcyhHZikubWFwKGFzeW5jKFtyLHtkZXRlY3RvcjpuLGxvYWRlcjppfV0pPT57aWYoaSl0cnl7YXkocil9Y2F0Y2h7dHJ5e2xldHtkaWFncmFtOmEsaWQ6c309YXdhaXQgaSgpO1FmKHMsYSxuKX1jYXRjaChhKXt0aHJvdyBZLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBkaWFncmFtIHdpdGgga2V5ICR7cn0uIFJlbW92aW5nIGZyb20gZGV0ZWN0b3JzLmApLGRlbGV0ZSBHZltyXSxhfX19KSkpLmZpbHRlcihyPT5yLnN0YXR1cz09PSJyZWplY3RlZCIpO2lmKGUubGVuZ3RoPjApe1kuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7ZS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7Zm9yKGxldCByIG9mIGUpWS5lcnJvcihyKTt0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7ZS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCl9fSwibG9hZFJlZ2lzdGVyZWREaWFncmFtcyIpO2h0KCk7bXIoKTt2YXIgYVM9ImNvbW0iLHNTPSJydWxlIixvUz0iZGVjbCI7dmFyIEUyZT0iQGltcG9ydCI7dmFyIFMyZT0iQGtleWZyYW1lcyI7dmFyIEMyZT0iQGxheWVyIjt2YXIgZ0Y9TWF0aC5hYnMsd2I9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBsUyh0KXtyZXR1cm4gdC50cmltKCl9byhsUywidHJpbSIpO2Z1bmN0aW9uIFRiKHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGUscil9byhUYiwicmVwbGFjZSIpO2Z1bmN0aW9uIEEyZSh0LGUscil7cmV0dXJuIHQuaW5kZXhPZihlLHIpfW8oQTJlLCJpbmRleG9mIik7ZnVuY3Rpb24gSzAodCxlKXtyZXR1cm4gdC5jaGFyQ29kZUF0KGUpfDB9byhLMCwiY2hhcmF0Iik7ZnVuY3Rpb24gSWYodCxlLHIpe3JldHVybiB0LnNsaWNlKGUscil9byhJZiwic3Vic3RyIik7ZnVuY3Rpb24geW8odCl7cmV0dXJuIHQubGVuZ3RofW8oeW8sInN0cmxlbiIpO2Z1bmN0aW9uIF8yZSh0KXtyZXR1cm4gdC5sZW5ndGh9byhfMmUsInNpemVvZiIpO2Z1bmN0aW9uIEExKHQsZSl7cmV0dXJuIGUucHVzaCh0KSx0fW8oQTEsImFwcGVuZCIpO3ZhciBjUz0xLF8xPTEsTDJlPTAsbGw9MCxEaT0wLEQxPSIiO2Z1bmN0aW9uIHVTKHQsZSxyLG4saSxhLHMsbCl7cmV0dXJue3ZhbHVlOnQscm9vdDplLHBhcmVudDpyLHR5cGU6bixwcm9wczppLGNoaWxkcmVuOmEsbGluZTpjUyxjb2x1bW46XzEsbGVuZ3RoOnMscmV0dXJuOiIiLHNpYmxpbmdzOmx9fW8odVMsIm5vZGUiKTtmdW5jdGlvbiBEMmUoKXtyZXR1cm4gRGl9byhEMmUsImNoYXIiKTtmdW5jdGlvbiBOMmUoKXtyZXR1cm4gRGk9bGw+MD9LMChEMSwtLWxsKTowLF8xLS0sRGk9PT0xMCYmKF8xPTEsY1MtLSksRGl9byhOMmUsInByZXYiKTtmdW5jdGlvbiBjbCgpe3JldHVybiBEaT1sbDxMMmU/SzAoRDEsbGwrKyk6MCxfMSsrLERpPT09MTAmJihfMT0xLGNTKyspLERpfW8oY2wsIm5leHQiKTtmdW5jdGlvbiBKdSgpe3JldHVybiBLMChEMSxsbCl9byhKdSwicGVlayIpO2Z1bmN0aW9uIGtiKCl7cmV0dXJuIGxsfW8oa2IsImNhcmV0Iik7ZnVuY3Rpb24gaFModCxlKXtyZXR1cm4gSWYoRDEsdCxlKX1vKGhTLCJzbGljZSIpO2Z1bmN0aW9uIEwxKHQpe3N3aXRjaCh0KXtjYXNlIDA6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiA1O2Nhc2UgMzM6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDc6Y2FzZSA2MjpjYXNlIDY0OmNhc2UgMTI2OmNhc2UgNTk6Y2FzZSAxMjM6Y2FzZSAxMjU6cmV0dXJuIDQ7Y2FzZSA1ODpyZXR1cm4gMztjYXNlIDM0OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDkxOnJldHVybiAyO2Nhc2UgNDE6Y2FzZSA5MzpyZXR1cm4gMX1yZXR1cm4gMH1vKEwxLCJ0b2tlbiIpO2Z1bmN0aW9uIFIyZSh0KXtyZXR1cm4gY1M9XzE9MSxMMmU9eW8oRDE9dCksbGw9MCxbXX1vKFIyZSwiYWxsb2MiKTtmdW5jdGlvbiBNMmUodCl7cmV0dXJuIEQxPSIiLHR9byhNMmUsImRlYWxsb2MiKTtmdW5jdGlvbiBmUyh0KXtyZXR1cm4gbFMoaFMobGwtMSx5Rih0PT09OTE/dCsyOnQ9PT00MD90KzE6dCkpKX1vKGZTLCJkZWxpbWl0Iik7ZnVuY3Rpb24gSTJlKHQpe2Zvcig7KERpPUp1KCkpJiZEaTwzMzspY2woKTtyZXR1cm4gTDEodCk+Mnx8TDEoRGkpPjM/IiI6IiAifW8oSTJlLCJ3aGl0ZXNwYWNlIik7ZnVuY3Rpb24gTzJlKHQsZSl7Zm9yKDstLWUmJmNsKCkmJiEoRGk8NDh8fERpPjEwMnx8RGk+NTcmJkRpPDY1fHxEaT43MCYmRGk8OTcpOyk7cmV0dXJuIGhTKHQsa2IoKSsoZTw2JiZKdSgpPT0zMiYmY2woKT09MzIpKX1vKE8yZSwiZXNjYXBpbmciKTtmdW5jdGlvbiB5Rih0KXtmb3IoO2NsKCk7KXN3aXRjaChEaSl7Y2FzZSB0OnJldHVybiBsbDtjYXNlIDM0OmNhc2UgMzk6dCE9PTM0JiZ0IT09MzkmJnlGKERpKTticmVhaztjYXNlIDQwOnQ9PT00MSYmeUYodCk7YnJlYWs7Y2FzZSA5MjpjbCgpO2JyZWFrfXJldHVybiBsbH1vKHlGLCJkZWxpbWl0ZXIiKTtmdW5jdGlvbiBQMmUodCxlKXtmb3IoO2NsKCkmJnQrRGkhPT01NzspaWYodCtEaT09PTg0JiZKdSgpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitoUyhlLGxsLTEpKyIqIit3Yih0PT09NDc/dDpjbCgpKX1vKFAyZSwiY29tbWVudGVyIik7ZnVuY3Rpb24gQjJlKHQpe2Zvcig7IUwxKEp1KCkpOyljbCgpO3JldHVybiBoUyh0LGxsKX1vKEIyZSwiaWRlbnRpZmllciIpO2Z1bmN0aW9uIEcyZSh0KXtyZXR1cm4gTTJlKGRTKCIiLG51bGwsbnVsbCxudWxsLFsiIl0sdD1SMmUodCksMCxbMF0sdCkpfW8oRzJlLCJjb21waWxlIik7ZnVuY3Rpb24gZFModCxlLHIsbixpLGEscyxsLHUpe2Zvcih2YXIgaD0wLGY9MCxkPXMscD0wLG09MCxnPTAseT0xLHY9MSx4PTEsYj0wLHc9IiIsXz1pLFQ9YSxFPW4sTD13O3Y7KXN3aXRjaChnPWIsYj1jbCgpKXtjYXNlIDQwOmlmKGchPTEwOCYmSzAoTCxkLTEpPT01OCl7QTJlKEwrPVRiKGZTKGIpLCImIiwiJlxmIiksIiZcZiIsZ0YoaD9sW2gtMV06MCkpIT0tMSYmKHg9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOkwrPWZTKGIpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpMKz1JMmUoZyk7YnJlYWs7Y2FzZSA5MjpMKz1PMmUoa2IoKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKEp1KCkpe2Nhc2UgNDI6Y2FzZSA0NzpBMShWaXQoUDJlKGNsKCksa2IoKSksZSxyLHUpLHUpLChMMShnfHwxKT09NXx8TDEoSnUoKXx8MSk9PTUpJiZ5byhMKSYmSWYoTCwtMSx2b2lkIDApIT09IiAiJiYoTCs9IiAiKTticmVhaztkZWZhdWx0OkwrPSIvIn1icmVhaztjYXNlIDEyMyp5OmxbaCsrXT15byhMKSp4O2Nhc2UgMTI1Knk6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKGIpe2Nhc2UgMDpjYXNlIDEyNTp2PTA7Y2FzZSA1OStmOng9PS0xJiYoTD1UYihMLC9cZi9nLCIiKSksbT4wJiYoeW8oTCktZHx8eT09PTAmJmc9PT00NykmJkExKG0+MzI/ejJlKEwrIjsiLG4scixkLTEsdSk6ejJlKFRiKEwsIiAiLCIiKSsiOyIsbixyLGQtMix1KSx1KTticmVhaztjYXNlIDU5OkwrPSI7IjtkZWZhdWx0OmlmKEExKEU9RjJlKEwsZSxyLGgsZixpLGwsdyxfPVtdLFQ9W10sZCxhKSxhKSxiPT09MTIzKWlmKGY9PT0wKWRTKEwsZSxFLEUsXyxhLGQsbCxUKTtlbHNlIHN3aXRjaChwPT09OTkmJkswKEwsMyk9PT0xMTA/MTAwOnApe2Nhc2UgMTAwOmNhc2UgMTA4OmNhc2UgMTA5OmNhc2UgMTE1OmRTKHQsRSxFLG4mJkExKEYyZSh0LEUsRSwwLDAsaSxsLHcsaSxfPVtdLGQsVCksVCksaSxULGQsbCxuP186VCk7YnJlYWs7ZGVmYXVsdDpkUyhMLEUsRSxFLFsiIl0sVCwwLGwsVCl9fWg9Zj1tPTAseT14PTEsdz1MPSIiLGQ9czticmVhaztjYXNlIDU4OmQ9MSt5byhMKSxtPWc7ZGVmYXVsdDppZih5PDEpe2lmKGI9PTEyMyktLXk7ZWxzZSBpZihiPT0xMjUmJnkrKz09MCYmTjJlKCk9PTEyNSljb250aW51ZX1zd2l0Y2goTCs9d2IoYiksYip5KXtjYXNlIDM4Ong9Zj4wPzE6KEwrPSJcZiIsLTEpO2JyZWFrO2Nhc2UgNDQ6bFtoKytdPSh5byhMKS0xKSp4LHg9MTticmVhaztjYXNlIDY0Okp1KCk9PT00NSYmKEwrPWZTKGNsKCkpKSxwPUp1KCksZj1kPXlvKHc9TCs9QjJlKGtiKCkpKSxiKys7YnJlYWs7Y2FzZSA0NTpnPT09NDUmJnlvKEwpPT0yJiYoeT0wKX19cmV0dXJuIGF9byhkUywicGFyc2UiKTtmdW5jdGlvbiBGMmUodCxlLHIsbixpLGEscyxsLHUsaCxmLGQpe2Zvcih2YXIgcD1pLTEsbT1pPT09MD9hOlsiIl0sZz1fMmUobSkseT0wLHY9MCx4PTA7eTxuOysreSlmb3IodmFyIGI9MCx3PUlmKHQscCsxLHA9Z0Yodj1zW3ldKSksXz10O2I8ZzsrK2IpKF89bFModj4wP21bYl0rIiAiK3c6VGIodywvJlxmL2csbVtiXSkpKSYmKHVbeCsrXT1fKTtyZXR1cm4gdVModCxlLHIsaT09PTA/c1M6bCx1LGgsZixkKX1vKEYyZSwicnVsZXNldCIpO2Z1bmN0aW9uIFZpdCh0LGUscixuKXtyZXR1cm4gdVModCxlLHIsYVMsd2IoRDJlKCkpLElmKHQsMiwtMiksMCxuKX1vKFZpdCwiY29tbWVudCIpO2Z1bmN0aW9uIHoyZSh0LGUscixuLGkpe3JldHVybiB1Uyh0LGUscixvUyxJZih0LDAsbiksSWYodCxuKzEsLTEpLG4saSl9byh6MmUsImRlY2xhcmF0aW9uIik7ZnVuY3Rpb24gcFModCxlKXtmb3IodmFyIHI9IiIsbj0wO248dC5sZW5ndGg7bisrKXIrPWUodFtuXSxuLHQsZSl8fCIiO3JldHVybiByfW8ocFMsInNlcmlhbGl6ZSIpO2Z1bmN0aW9uICQyZSh0LGUscixuKXtzd2l0Y2godC50eXBlKXtjYXNlIEMyZTppZih0LmNoaWxkcmVuLmxlbmd0aClicmVhaztjYXNlIEUyZTpjYXNlIG9TOnJldHVybiB0LnJldHVybj10LnJldHVybnx8dC52YWx1ZTtjYXNlIGFTOnJldHVybiIiO2Nhc2UgUzJlOnJldHVybiB0LnJldHVybj10LnZhbHVlKyJ7IitwUyh0LmNoaWxkcmVuLG4pKyJ9IjtjYXNlIHNTOmlmKCF5byh0LnZhbHVlPXQucHJvcHMuam9pbigiLCIpKSlyZXR1cm4iIn1yZXR1cm4geW8ocj1wUyh0LmNoaWxkcmVuLG4pKT90LnJldHVybj10LnZhbHVlKyJ7IityKyJ9IjoiIn1vKCQyZSwic3RyaW5naWZ5Iik7c0MoKTtLdygpO0pJKCk7dmFyIFVpdD0iZ3JhcGhpY3MtZG9jdW1lbnQgZG9jdW1lbnQiO2Z1bmN0aW9uIFYyZSh0LGUpe3QuYXR0cigicm9sZSIsVWl0KSxlIT09IiImJnQuYXR0cigiYXJpYS1yb2xlZGVzY3JpcHRpb24iLGUpfW8oVjJlLCJzZXRBMTF5RGlhZ3JhbUluZm8iKTtmdW5jdGlvbiBVMmUodCxlLHIsbil7aWYodC5pbnNlcnQhPT12b2lkIDApe2lmKHIpe2xldCBpPWBjaGFydC1kZXNjLSR7bn1gO3QuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsaSksdC5pbnNlcnQoImRlc2MiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIsaSkudGV4dChyKX1pZihlKXtsZXQgaT1gY2hhcnQtdGl0bGUtJHtufWA7dC5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpLHQuaW5zZXJ0KCJ0aXRsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIixpKS50ZXh0KGUpfX19byhVMmUsImFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uIik7aXAoKTtVYSgpO1VhKCk7VnQoKTskZigpO0lTKCk7aHIoKTt2YXIgTjE9Y2xhc3MgdHtjb25zdHJ1Y3RvcihlLHIsbixpLGEpe3RoaXMudHlwZT1lO3RoaXMudGV4dD1yO3RoaXMuZGI9bjt0aGlzLnBhcnNlcj1pO3RoaXMucmVuZGVyZXI9YX1zdGF0aWN7byh0aGlzLCJEaWFncmFtIil9c3RhdGljIGFzeW5jIGZyb21UZXh0KGUscj17fSl7bGV0IG49U3IoKSxpPW5wKGUsbik7ZT1JWChlKStgCmA7dHJ5e2F5KGkpfWNhdGNoe2xldCBoPUtGKGkpO2lmKCFoKXRocm93IG5ldyBycChgRGlhZ3JhbSAke2l9IG5vdCBmb3VuZC5gKTtsZXR7aWQ6ZixkaWFncmFtOmR9PWF3YWl0IGgoKTtRZihmLGQpfWxldHtkYjphLHBhcnNlcjpzLHJlbmRlcmVyOmwsaW5pdDp1fT1heShpKTtyZXR1cm4gcy5wYXJzZXImJihzLnBhcnNlci55eT1hKSxhLmNsZWFyPy4oKSx1Py4obiksci50aXRsZSYmYS5zZXREaWFncmFtVGl0bGU/LihyLnRpdGxlKSxhd2FpdCBzLnBhcnNlKGUpLG5ldyB0KGksZSxhLHMsbCl9YXN5bmMgcmVuZGVyKGUscil7YXdhaXQgdGhpcy5yZW5kZXJlci5kcmF3KHRoaXMudGV4dCxlLHIsdGhpcyl9Z2V0UGFyc2VyKCl7cmV0dXJuIHRoaXMucGFyc2VyfWdldFR5cGUoKXtyZXR1cm4gdGhpcy50eXBlfX07ZnIoKTt2YXIgSDJlPVtdO3ZhciBXMmU9bygoKT0+e0gyZS5mb3JFYWNoKHQ9Pnt0KCl9KSxIMmU9W119LCJhdHRhY2hGdW5jdGlvbnMiKTtodCgpO3ZhciBZMmU9byh0PT50LnJlcGxhY2UoL15ccyolJSg/IXspW15cbl0rXG4/L2dtLCIiKS50cmltU3RhcnQoKSwiY2xlYW51cENvbW1lbnRzIik7UGIoKTtWNSgpO2Z1bmN0aW9uIHEyZSh0KXtsZXQgZT10Lm1hdGNoKE9iKTtpZighZSlyZXR1cm57dGV4dDp0LG1ldGFkYXRhOnt9fTtsZXQgcj1mbShlWzFdLHtzY2hlbWE6aG19KT8/e307cj10eXBlb2Ygcj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHIpP3I6e307bGV0IG49e307cmV0dXJuIHIuZGlzcGxheU1vZGUmJihuLmRpc3BsYXlNb2RlPXIuZGlzcGxheU1vZGUudG9TdHJpbmcoKSksci50aXRsZSYmKG4udGl0bGU9ci50aXRsZS50b1N0cmluZygpKSxyLmNvbmZpZyYmKG4uY29uZmlnPXIuY29uZmlnKSx7dGV4dDp0LnNsaWNlKGVbMF0ubGVuZ3RoKSxtZXRhZGF0YTpufX1vKHEyZSwiZXh0cmFjdEZyb250TWF0dGVyIik7aHIoKTt2YXIgSGl0PW8odD0+dC5yZXBsYWNlKC9cclxuPy9nLGAKYCkucmVwbGFjZSgvPChcdyspKFtePl0qKT4vZywoZSxyLG4pPT4iPCIrcituLnJlcGxhY2UoLz0iKFteIl0qKSIvZywiPSckMSciKSsiPiIpLCJjbGVhbnVwVGV4dCIpLFdpdD1vKHQ9PntsZXR7dGV4dDplLG1ldGFkYXRhOnJ9PXEyZSh0KSx7ZGlzcGxheU1vZGU6bix0aXRsZTppLGNvbmZpZzphPXt9fT1yO3JldHVybiBuJiYoYS5nYW50dHx8KGEuZ2FudHQ9e30pLGEuZ2FudHQuZGlzcGxheU1vZGU9bikse3RpdGxlOmksY29uZmlnOmEsdGV4dDplfX0sInByb2Nlc3NGcm9udG1hdHRlciIpLFlpdD1vKHQ9PntsZXQgZT1VdC5kZXRlY3RJbml0KHQpPz97fSxyPVV0LmRldGVjdERpcmVjdGl2ZSh0LCJ3cmFwIik7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ZS53cmFwPXIuc29tZSgoe3R5cGU6bn0pPT5uPT09IndyYXAiKTpyPy50eXBlPT09IndyYXAiJiYoZS53cmFwPSEwKSx7dGV4dDpSWCh0KSxkaXJlY3RpdmU6ZX19LCJwcm9jZXNzRGlyZWN0aXZlcyIpO2Z1bmN0aW9uIHZGKHQpe2xldCBlPUhpdCh0KSxyPVdpdChlKSxuPVlpdChyLnRleHQpLGk9d3Moci5jb25maWcsbi5kaXJlY3RpdmUpO3JldHVybiB0PVkyZShuLnRleHQpLHtjb2RlOnQsdGl0bGU6ci50aXRsZSxjb25maWc6aX19byh2RiwicHJlcHJvY2Vzc0RpYWdyYW0iKTtRQygpO0hiKCk7aHIoKTtmdW5jdGlvbiBYMmUodCl7bGV0IGU9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLHI9QXJyYXkuZnJvbShlLG49PlN0cmluZy5mcm9tQ29kZVBvaW50KG4pKS5qb2luKCIiKTtyZXR1cm4gYnRvYShyKX1vKFgyZSwidG9CYXNlNjQiKTt2YXIgcWl0PTVlNCxYaXQ9ImdyYXBoIFRCO2FbTWF4aW11bSB0ZXh0IHNpemUgaW4gZGlhZ3JhbSBleGNlZWRlZF07c3R5bGUgYSBmaWxsOiNmYWEiLGppdD0ic2FuZGJveCIsS2l0PSJsb29zZSIsUWl0PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsWml0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixKaXQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGVhdD0iMTAwJSIsdGF0PSIxMDAlIixyYXQ9ImJvcmRlcjowO21hcmdpbjowOyIsbmF0PSJtYXJnaW46MCIsaWF0PSJhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb24gYWxsb3ctcG9wdXBzIixhYXQ9J1RoZSAiaWZyYW1lIiB0YWcgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuJyxzYXQ9WyJmb3JlaWdub2JqZWN0Il0sb2F0PVsiZG9taW5hbnQtYmFzZWxpbmUiXTtmdW5jdGlvbiBaMmUodCl7bGV0IGU9dkYodCk7cmV0dXJuIFYxKCksSHooZS5jb25maWc/P3t9KSxlfW8oWjJlLCJwcm9jZXNzQW5kU2V0Q29uZmlncyIpO2FzeW5jIGZ1bmN0aW9uIGxhdCh0LGUpe0MxKCk7dHJ5e2xldHtjb2RlOnIsY29uZmlnOm59PVoyZSh0KTtyZXR1cm57ZGlhZ3JhbVR5cGU6KGF3YWl0IEoyZShyKSkudHlwZSxjb25maWc6bn19Y2F0Y2gocil7aWYoZT8uc3VwcHJlc3NFcnJvcnMpcmV0dXJuITE7dGhyb3cgcn19byhsYXQsInBhcnNlIik7dmFyIGoyZT1vKCh0LGUscj1bXSk9PmAKLiR7dH0gJHtlfSB7ICR7ci5qb2luKCIgIWltcG9ydGFudDsgIil9ICFpbXBvcnRhbnQ7IH1gLCJjc3NJbXBvcnRhbnRTdHlsZXMiKSxjYXQ9bygodCxlPW5ldyBNYXApPT57bGV0IHI9IiI7aWYodC50aGVtZUNTUyE9PXZvaWQgMCYmKHIrPWAKJHt0LnRoZW1lQ1NTfWApLHQuZm9udEZhbWlseSE9PXZvaWQgMCYmKHIrPWAKOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fX1gKSx0LmFsdEZvbnRGYW1pbHkhPT12b2lkIDAmJihyKz1gCjpyb290IHsgLS1tZXJtYWlkLWFsdC1mb250LWZhbWlseTogJHt0LmFsdEZvbnRGYW1pbHl9fWApLGUgaW5zdGFuY2VvZiBNYXApe2xldCBzPXQuaHRtbExhYmVscz8/dC5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHM/WyI+ICoiLCJzcGFuIl06WyJyZWN0IiwicG9seWdvbiIsImVsbGlwc2UiLCJjaXJjbGUiLCJwYXRoIl07ZS5mb3JFYWNoKGw9PntjcihsLnN0eWxlcyl8fHMuZm9yRWFjaCh1PT57cis9ajJlKGwuaWQsdSxsLnN0eWxlcyl9KSxjcihsLnRleHRTdHlsZXMpfHwocis9ajJlKGwuaWQsInRzcGFuIiwobD8udGV4dFN0eWxlc3x8W10pLm1hcCh1PT51LnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpKSkpfSl9cmV0dXJuIHJ9LCJjcmVhdGVDc3NTdHlsZXMiKSx1YXQ9bygodCxlLHIsbik9PntsZXQgaT1jYXQodCxyKSxhPUYkKGUsaSx0LnRoZW1lVmFyaWFibGVzKTtyZXR1cm4gcFMoRzJlKGAke259eyR7YX19YCksJDJlKX0sImNyZWF0ZVVzZXJTdHlsZXMiKSxoYXQ9bygodD0iIixlLHIpPT57bGV0IG49dDtyZXR1cm4hciYmIWUmJihuPW4ucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXChbXGQrLi86PT9BLVphLXotXSo/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycpKSxuPUNhKG4pLG49bi5yZXBsYWNlKC88YnI+L2csIjxici8+Iiksbn0sImNsZWFuVXBTdmdDb2RlIiksZmF0PW8oKHQ9IiIsZSk9PntsZXQgcj1lPy52aWV3Qm94Py5iYXNlVmFsPy5oZWlnaHQ/ZS52aWV3Qm94LmJhc2VWYWwuaGVpZ2h0KyJweCI6dGF0LG49WDJlKGA8Ym9keSBzdHlsZT0iJHtuYXR9Ij4ke3R9PC9ib2R5PmApO3JldHVybmA8aWZyYW1lIHN0eWxlPSJ3aWR0aDoke2VhdH07aGVpZ2h0OiR7cn07JHtyYXR9IiBzcmM9ImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9VVRGLTg7YmFzZTY0LCR7bn0iIHNhbmRib3g9IiR7aWF0fSI+CiAgJHthYXR9CjwvaWZyYW1lPmB9LCJwdXRJbnRvSUZyYW1lIiksSzJlPW8oKHQsZSxyLG4saSk9PntsZXQgYT10LmFwcGVuZCgiZGl2Iik7YS5hdHRyKCJpZCIsciksbiYmYS5hdHRyKCJzdHlsZSIsbik7bGV0IHM9YS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIixlKS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsUWl0KTtyZXR1cm4gaSYmcy5hdHRyKCJ4bWxuczp4bGluayIsaSkscy5hcHBlbmQoImciKSx0fSwiYXBwZW5kRGl2U3ZnRyIpO2Z1bmN0aW9uIFEyZSh0LGUpe3JldHVybiB0LmFwcGVuZCgiaWZyYW1lIikuYXR0cigiaWQiLGUpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIil9byhRMmUsInNhbmRib3hlZElmcmFtZSIpO3ZhciBkYXQ9bygodCxlLHIsbik9Pnt0LmdldEVsZW1lbnRCeUlkKGUpPy5yZW1vdmUoKSx0LmdldEVsZW1lbnRCeUlkKHIpPy5yZW1vdmUoKSx0LmdldEVsZW1lbnRCeUlkKG4pPy5yZW1vdmUoKX0sInJlbW92ZUV4aXN0aW5nRWxlbWVudHMiKSxwYXQ9byhhc3luYyBmdW5jdGlvbih0LGUscil7QzEoKTtsZXQgbj1aMmUoZSk7ZT1uLmNvZGU7bGV0IGk9U3IoKTtZLmRlYnVnKGkpLGUubGVuZ3RoPihpPy5tYXhUZXh0U2l6ZT8/cWl0KSYmKGU9WGl0KTtsZXQgYT0iIyIrdCxzPSJpIit0LGw9IiMiK3MsdT0iZCIrdCxoPSIjIit1LGY9bygoKT0+e2xldCBSPXplKHA/bDpoKS5ub2RlKCk7UiYmInJlbW92ZSJpbiBSJiZSLnJlbW92ZSgpfSwicmVtb3ZlVGVtcEVsZW1lbnRzIiksZD16ZSgiYm9keSIpLHA9aS5zZWN1cml0eUxldmVsPT09aml0LG09aS5zZWN1cml0eUxldmVsPT09S2l0LGc9aS5mb250RmFtaWx5O2lmKHIhPT12b2lkIDApe2lmKHImJihyLmlubmVySFRNTD0iIikscCl7bGV0IGs9UTJlKHplKHIpLHMpO2Q9emUoay5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxkLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIGQ9emUocik7SzJlKGQsdCx1LGBmb250LWZhbWlseTogJHtnfWAsWml0KX1lbHNle2lmKGRhdChkb2N1bWVudCx0LHUscykscCl7bGV0IGs9UTJlKHplKCJib2R5Iikscyk7ZD16ZShrLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLGQubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgZD16ZSgiYm9keSIpO0syZShkLHQsdSl9bGV0IHksdjt0cnl7eT1hd2FpdCBOMS5mcm9tVGV4dChlLHt0aXRsZTpuLnRpdGxlfSl9Y2F0Y2goayl7aWYoaS5zdXBwcmVzc0Vycm9yUmVuZGVyaW5nKXRocm93IGYoKSxrO3k9YXdhaXQgTjEuZnJvbVRleHQoImVycm9yIiksdj1rfWxldCB4PWQuc2VsZWN0KGgpLm5vZGUoKSxiPXkudHlwZSx3PXguZmlyc3RDaGlsZCxfPXcuZmlyc3RDaGlsZCxUPXkucmVuZGVyZXIuZ2V0Q2xhc3Nlcz8uKGUseSksRT11YXQoaSxiLFQsYSksTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0wuaW5uZXJIVE1MPUUsdy5pbnNlcnRCZWZvcmUoTCxfKTt0cnl7YXdhaXQgeS5yZW5kZXJlci5kcmF3KGUsdCxkeCx5KX1jYXRjaChrKXt0aHJvdyBpLnN1cHByZXNzRXJyb3JSZW5kZXJpbmc/ZigpOlgwZS5kcmF3KGUsdCxkeCksa31sZXQgQz1kLnNlbGVjdChgJHtofSBzdmdgKSxBPXkuZGIuZ2V0QWNjVGl0bGU/LigpLEk9eS5kYi5nZXRBY2NEZXNjcmlwdGlvbj8uKCk7Z2F0KGIsQyxBLEkpLGQuc2VsZWN0KGBbaWQ9IiR7dH0iXWApLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsSml0KTtsZXQgRD1kLnNlbGVjdChoKS5ub2RlKCkuaW5uZXJIVE1MO2lmKFkuZGVidWcoImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlIixpLmFycm93TWFya2VyQWJzb2x1dGUpLEQ9aGF0KEQscCx4cihpLmFycm93TWFya2VyQWJzb2x1dGUpKSxwKXtsZXQgaz1kLnNlbGVjdChoKyIgc3ZnIikubm9kZSgpO0Q9ZmF0KEQsayl9ZWxzZSBtfHwoRD1haC5zYW5pdGl6ZShELHtBRERfVEFHUzpzYXQsQUREX0FUVFI6b2F0LEhUTUxfSU5URUdSQVRJT05fUE9JTlRTOntmb3JlaWdub2JqZWN0OiEwfX0pKTtpZihXMmUoKSx2KXRocm93IHY7cmV0dXJuIGYoKSx7ZGlhZ3JhbVR5cGU6Yixzdmc6RCxiaW5kRnVuY3Rpb25zOnkuZGIuYmluZEZ1bmN0aW9uc319LCJyZW5kZXIiKTtmdW5jdGlvbiBtYXQodD17fSl7bGV0IGU9R24oe30sdCk7ZT8uZm9udEZhbWlseSYmIWUudGhlbWVWYXJpYWJsZXM/LmZvbnRGYW1pbHkmJihlLnRoZW1lVmFyaWFibGVzfHwoZS50aGVtZVZhcmlhYmxlcz17fSksZS50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5PWUuZm9udEZhbWlseSksJHooZSksZT8udGhlbWUmJmUudGhlbWUgaW4ga28/ZS50aGVtZVZhcmlhYmxlcz1rb1tlLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhlLnRoZW1lVmFyaWFibGVzKTplJiYoZS50aGVtZVZhcmlhYmxlcz1rby5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKGUudGhlbWVWYXJpYWJsZXMpKTtsZXQgcj10eXBlb2YgZT09Im9iamVjdCI/UVMoZSk6WlMoKTtNMShyLmxvZ0xldmVsKSxDMSgpfW8obWF0LCJpbml0aWFsaXplIik7dmFyIEoyZT1vKCh0LGU9e30pPT57bGV0e2NvZGU6cn09dkYodCk7cmV0dXJuIE4xLmZyb21UZXh0KHIsZSl9LCJnZXREaWFncmFtRnJvbVRleHQiKTtmdW5jdGlvbiBnYXQodCxlLHIsbil7VjJlKGUsdCksVTJlKGUscixuLGUuYXR0cigiaWQiKSl9byhnYXQsImFkZEExMXlJbmZvIik7dmFyIE9mPU9iamVjdC5mcmVlemUoe3JlbmRlcjpwYXQscGFyc2U6bGF0LGdldERpYWdyYW1Gcm9tVGV4dDpKMmUsaW5pdGlhbGl6ZTptYXQsZ2V0Q29uZmlnOlNyLHNldENvbmZpZzpZYixnZXRTaXRlQ29uZmlnOlpTLHVwZGF0ZVNpdGVDb25maWc6VnoscmVzZXQ6bygoKT0+e1YxKCl9LCJyZXNldCIpLGdsb2JhbFJlc2V0Om8oKCk9PntWMShpaCl9LCJnbG9iYWxSZXNldCIpLGRlZmF1bHRDb25maWc6aWh9KTtNMShTcigpLmxvZ0xldmVsKTtWMShTcigpKTtGdigpO2hyKCk7dmFyIHlhdD1vKCh0LGUscik9PntZLndhcm4odCksaTkodCk/KHImJnIodC5zdHIsdC5oYXNoKSxlLnB1c2goey4uLnQsbWVzc2FnZTp0LnN0cixlcnJvcjp0fSkpOihyJiZyKHQpLHQgaW5zdGFuY2VvZiBFcnJvciYmZS5wdXNoKHtzdHI6dC5tZXNzYWdlLG1lc3NhZ2U6dC5tZXNzYWdlLGhhc2g6dC5uYW1lLGVycm9yOnR9KSl9LCJoYW5kbGVFcnJvciIpLGV4ZT1vKGFzeW5jIGZ1bmN0aW9uKHQ9e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe3RyeXthd2FpdCB2YXQodCl9Y2F0Y2goZSl7aWYoaTkoZSkmJlkuZXJyb3IoZS5zdHIpLGVoLnBhcnNlRXJyb3ImJmVoLnBhcnNlRXJyb3IoZSksIXQuc3VwcHJlc3NFcnJvcnMpdGhyb3cgWS5lcnJvcigiVXNlIHRoZSBzdXBwcmVzc0Vycm9ycyBvcHRpb24gdG8gc3VwcHJlc3MgdGhlc2UgZXJyb3JzIiksZX19LCJydW4iKSx2YXQ9byhhc3luYyBmdW5jdGlvbih7cG9zdFJlbmRlckNhbGxiYWNrOnQscXVlcnlTZWxlY3RvcjplLG5vZGVzOnJ9PXtxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9KXtsZXQgbj1PZi5nZXRDb25maWcoKTtZLmRlYnVnKGAke3Q/IiI6Ik5vICJ9Q2FsbGJhY2sgZnVuY3Rpb24gZm91bmRgKTtsZXQgaTtpZihyKWk9cjtlbHNlIGlmKGUpaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJOb2RlcyBhbmQgcXVlcnlTZWxlY3RvciBhcmUgYm90aCB1bmRlZmluZWQiKTtZLmRlYnVnKGBGb3VuZCAke2kubGVuZ3RofSBkaWFncmFtc2ApLG4/LnN0YXJ0T25Mb2FkIT09dm9pZCAwJiYoWS5kZWJ1ZygiU3RhcnQgT24gTG9hZDogIituPy5zdGFydE9uTG9hZCksT2YudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6bj8uc3RhcnRPbkxvYWR9KSk7bGV0IGE9bmV3IFV0LkluaXRJREdlbmVyYXRvcihuLmRldGVybWluaXN0aWNJZHMsbi5kZXRlcm1pbmlzdGljSURTZWVkKSxzLGw9W107Zm9yKGxldCB1IG9mIEFycmF5LmZyb20oaSkpe1kuaW5mbygiUmVuZGVyaW5nIGRpYWdyYW06ICIrdS5pZCk7aWYodS5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIikpY29udGludWU7dS5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIiwidHJ1ZSIpO2xldCBoPWBtZXJtYWlkLSR7YS5uZXh0KCl9YDtzPXUuaW5uZXJIVE1MLHM9SWIoVXQuZW50aXR5RGVjb2RlKHMpKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTtsZXQgZj1VdC5kZXRlY3RJbml0KHMpO2YmJlkuZGVidWcoIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogIixmKTt0cnl7bGV0e3N2ZzpkLGJpbmRGdW5jdGlvbnM6cH09YXdhaXQgaXhlKGgscyx1KTt1LmlubmVySFRNTD1kLHQmJmF3YWl0IHQoaCkscCYmcCh1KX1jYXRjaChkKXt5YXQoZCxsLGVoLnBhcnNlRXJyb3IpfX1pZihsLmxlbmd0aD4wKXRocm93IGxbMF19LCJydW5UaHJvd3NFcnJvcnMiKSx0eGU9byhmdW5jdGlvbih0KXtPZi5pbml0aWFsaXplKHQpfSwiaW5pdGlhbGl6ZSIpLHhhdD1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyKXtZLndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLHQmJnR4ZSh0KTtsZXQgbj17cG9zdFJlbmRlckNhbGxiYWNrOnIscXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifTt0eXBlb2YgZT09InN0cmluZyI/bi5xdWVyeVNlbGVjdG9yPWU6ZSYmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD9uLm5vZGVzPVtlXTpuLm5vZGVzPWUpLGF3YWl0IGV4ZShuKX0sImluaXQiKSxiYXQ9byhhc3luYyh0LHtsYXp5TG9hZDplPSEwfT17fSk9PntDMSgpLEJiKC4uLnQpLGU9PT0hMSYmYXdhaXQgazJlKCl9LCJyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMiKSxyeGU9byhmdW5jdGlvbigpe2lmKGVoLnN0YXJ0T25Mb2FkKXtsZXR7c3RhcnRPbkxvYWQ6dH09T2YuZ2V0Q29uZmlnKCk7dCYmZWgucnVuKCkuY2F0Y2goZT0+WS5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIsZSkpfX0sImNvbnRlbnRMb2FkZWQiKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscnhlLCExKX12YXIgd2F0PW8oZnVuY3Rpb24odCl7ZWgucGFyc2VFcnJvcj10fSwic2V0UGFyc2VFcnJvckhhbmRsZXIiKSxtUz1bXSx4Rj0hMSxueGU9byhhc3luYygpPT57aWYoIXhGKXtmb3IoeEY9ITA7bVMubGVuZ3RoPjA7KXtsZXQgdD1tUy5zaGlmdCgpO2lmKHQpdHJ5e2F3YWl0IHQoKX1jYXRjaChlKXtZLmVycm9yKCJFcnJvciBleGVjdXRpbmcgcXVldWUiLGUpfX14Rj0hMX19LCJleGVjdXRlUXVldWUiKSxUYXQ9byhhc3luYyh0LGUpPT5uZXcgUHJvbWlzZSgocixuKT0+e2xldCBpPW8oKCk9Pm5ldyBQcm9taXNlKChhLHMpPT57T2YucGFyc2UodCxlKS50aGVuKGw9PnthKGwpLHIobCl9LGw9PntZLmVycm9yKCJFcnJvciBwYXJzaW5nIixsKSxlaC5wYXJzZUVycm9yPy4obCkscyhsKSxuKGwpfSl9KSwicGVyZm9ybUNhbGwiKTttUy5wdXNoKGkpLG54ZSgpLmNhdGNoKG4pfSksInBhcnNlIiksaXhlPW8oKHQsZSxyKT0+bmV3IFByb21pc2UoKG4saSk9PntsZXQgYT1vKCgpPT5uZXcgUHJvbWlzZSgocyxsKT0+e09mLnJlbmRlcih0LGUscikudGhlbih1PT57cyh1KSxuKHUpfSx1PT57WS5lcnJvcigiRXJyb3IgcGFyc2luZyIsdSksZWgucGFyc2VFcnJvcj8uKHUpLGwodSksaSh1KX0pfSksInBlcmZvcm1DYWxsIik7bVMucHVzaChhKSxueGUoKS5jYXRjaChpKX0pLCJyZW5kZXIiKSxlaD17c3RhcnRPbkxvYWQ6ITAsbWVybWFpZEFQSTpPZixwYXJzZTpUYXQscmVuZGVyOml4ZSxpbml0OnhhdCxydW46ZXhlLHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtczpiYXQscmVnaXN0ZXJMYXlvdXRMb2FkZXJzOkNELGluaXRpYWxpemU6dHhlLHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6cnhlLHNldFBhcnNlRXJyb3JIYW5kbGVyOndhdCxkZXRlY3RUeXBlOm5wLHJlZ2lzdGVySWNvblBhY2tzOk1ifSxrYXQ9ZWg7cmV0dXJuIHB4ZShFYXQpO30pKCk7Ci8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLwovKiEKICogV2FpdCBmb3IgZG9jdW1lbnQgbG9hZGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZXhlY3V0aW9uCiAqLwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKZG9tcHVyaWZ5L2Rpc3QvcHVyaWZ5LmVzLm1qczoKICAoKiEgQGxpY2Vuc2UgRE9NUHVyaWZ5IDMuMi4xIHwgKGMpIEN1cmU1MyBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwgUmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNlIDIuMCBhbmQgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgfCBnaXRodWIuY29tL2N1cmU1My9ET01QdXJpZnkvYmxvYi8zLjIuMS9MSUNFTlNFICopCgpqcy15YW1sL2Rpc3QvanMteWFtbC5tanM6CiAgKCohIGpzLXlhbWwgNC4xLjAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sIEBsaWNlbnNlIE1JVCAqKQoKbG9kYXNoLWVzL2xvZGFzaC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICAgKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9ImVzIiAtbyAuL2AKICAgKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+CiAgICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPgogICAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAgICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCiAgICopCgpjeXRvc2NhcGUvZGlzdC9jeXRvc2NhcGUuZXNtLm1qczoKICAoKiEKICBFbWJlZGRhYmxlIE1pbmltdW0gU3RyaWN0bHktQ29tcGxpYW50IFByb21pc2VzL0ErIDEuMS4xIFRoZW5hYmxlCiAgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgUmFsZiBTLiBFbmdlbHNjaGFsbCAoaHR0cDovL2VuZ2Vsc2NoYWxsLmNvbSkKICBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiAgKikKICAoKiEKICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2UKICAKICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS8KICBodHRwczovL3RsZHJsZWdhbC5jb20vbGljZW5zZS9taXQtbGljZW5zZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9ldmVudC5qcwogICopCiAgKCohIEJlemllciBjdXJ2ZSBmdW5jdGlvbiBnZW5lcmF0b3IuIENvcHlyaWdodCBHYWV0YW4gUmVuYXVkZWF1LiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqKQogICgqISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKikKKi8KZ2xvYmFsVGhpcy5tZXJtYWlkID0gZ2xvYmFsVGhpcy5fX2VzYnVpbGRfZXNtX21lcm1haWQuZGVmYXVsdDsK`; |