Ir al contenido
PÁGINA PRINCIPAL
INICIAR SESIÓN
Facebook-f
Twitter
Instagram
Youtube
Linkedin
LyohIHRhaWx3aW5kY3NzIHY0LjMuMCB8IE1JVCBMaWNlbnNlIHwgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20gKi8KQGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoKC13ZWJraXQtaHlwaGVuczpub25lKSkgYW5kIChub3QgKG1hcmdpbi10cmltOmlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OmlubGluZSkgYW5kIChub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LXNwYWNlLXktcmV2ZXJzZTowOy0tdHctc3BhY2UteC1yZXZlcnNlOjA7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctc2NhbGUteDoxOy0tdHctc2NhbGUteToxOy0tdHctc2NhbGUtejoxfX19QGxheWVyIHRoZW1lezpyb290LDpob3N0ey0tZm9udC1zYW5zOnVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgc2Fucy1zZXJpZiwgIkFwcGxlIENvbG9yIEVtb2ppIiwgIlNlZ29lIFVJIEVtb2ppIiwgIlNlZ29lIFVJIFN5bWJvbCIsICJOb3RvIENvbG9yIEVtb2ppIjstLWZvbnQtbW9ubzp1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgIkxpYmVyYXRpb24gTW9ubyIsICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTstLWNvbG9yLXJlZC01MDpva2xjaCg5Ny4xJSAuMDEzIDE3LjM4KTstLWNvbG9yLXJlZC0xMDA6b2tsY2goOTMuNiUgLjAzMiAxNy43MTcpOy0tY29sb3ItcmVkLTIwMDpva2xjaCg4OC41JSAuMDYyIDE4LjMzNCk7LS1jb2xvci1yZWQtNTAwOm9rbGNoKDYzLjclIC4yMzcgMjUuMzMxKTstLWNvbG9yLXJlZC02MDA6b2tsY2goNTcuNyUgLjI0NSAyNy4zMjUpOy0tY29sb3ItcmVkLTcwMDpva2xjaCg1MC41JSAuMjEzIDI3LjUxOCk7LS1jb2xvci15ZWxsb3ctNTA6b2tsY2goOTguNyUgLjAyNiAxMDIuMjEyKTstLWNvbG9yLXllbGxvdy0yMDA6b2tsY2goOTQuNSUgLjEyOSAxMDEuNTQpOy0tY29sb3IteWVsbG93LTgwMDpva2xjaCg0Ny42JSAuMTE0IDYxLjkwNyk7LS1jb2xvci1ncmF5LTUwOm9rbGNoKDk4LjUlIC4wMDIgMjQ3LjgzOSk7LS1jb2xvci1ncmF5LTEwMDpva2xjaCg5Ni43JSAuMDAzIDI2NC41NDIpOy0tY29sb3ItZ3JheS0yMDA6b2tsY2goOTIuOCUgLjAwNiAyNjQuNTMxKTstLWNvbG9yLWdyYXktMzAwOm9rbGNoKDg3LjIlIC4wMSAyNTguMzM4KTstLWNvbG9yLWdyYXktNDAwOm9rbGNoKDcwLjclIC4wMjIgMjYxLjMyNSk7LS1jb2xvci1ncmF5LTUwMDpva2xjaCg1NS4xJSAuMDI3IDI2NC4zNjQpOy0tY29sb3ItZ3JheS02MDA6b2tsY2goNDQuNiUgLjAzIDI1Ni44MDIpOy0tY29sb3ItZ3JheS03MDA6b2tsY2goMzcuMyUgLjAzNCAyNTkuNzMzKTstLWNvbG9yLWdyYXktODAwOm9rbGNoKDI3LjglIC4wMzMgMjU2Ljg0OCk7LS1jb2xvci1ncmF5LTkwMDpva2xjaCgyMSUgLjAzNCAyNjQuNjY1KTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1jb250YWluZXItMnhsOjQycmVtOy0tY29udGFpbmVyLTN4bDo0OHJlbTstLWNvbnRhaW5lci01eGw6NjRyZW07LS1jb250YWluZXItN3hsOjgwcmVtOy0tdGV4dC14czouNzVyZW07LS10ZXh0LXhzLS1saW5lLWhlaWdodDpjYWxjKDEgLyAuNzUpOy0tdGV4dC1zbTouODc1cmVtOy0tdGV4dC1zbS0tbGluZS1oZWlnaHQ6Y2FsYygxLjI1IC8gLjg3NSk7LS10ZXh0LWJhc2U6MXJlbTstLXRleHQtYmFzZS0tbGluZS1oZWlnaHQ6Y2FsYygxLjUgLyAxKTstLXRleHQtbGc6MS4xMjVyZW07LS10ZXh0LWxnLS1saW5lLWhlaWdodDpjYWxjKDEuNzUgLyAxLjEyNSk7LS10ZXh0LXhsOjEuMjVyZW07LS10ZXh0LXhsLS1saW5lLWhlaWdodDpjYWxjKDEuNzUgLyAxLjI1KTstLXRleHQtM3hsOjEuODc1cmVtOy0tdGV4dC0zeGwtLWxpbmUtaGVpZ2h0OmNhbGMoMi4yNSAvIDEuODc1KTstLXRleHQtNHhsOjIuMjVyZW07LS10ZXh0LTR4bC0tbGluZS1oZWlnaHQ6Y2FsYygyLjUgLyAyLjI1KTstLXRleHQtNXhsOjNyZW07LS10ZXh0LTV4bC0tbGluZS1oZWlnaHQ6MTstLWZvbnQtd2VpZ2h0LW5vcm1hbDo0MDA7LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tZm9udC13ZWlnaHQtYm9sZDo3MDA7LS1mb250LXdlaWdodC1ibGFjazo5MDA7LS10cmFja2luZy10aWdodGVyOi0uMDVlbTstLXRyYWNraW5nLXRpZ2h0Oi0uMDI1ZW07LS10cmFja2luZy13aWRlOi4wMjVlbTstLXRyYWNraW5nLXdpZGVyOi4wNWVtOy0tdHJhY2tpbmctd2lkZXN0Oi4xZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXJlbGF4ZWQ6MS42MjU7LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLXJhZGl1cy14bDouNzVyZW07LS1yYWRpdXMtMnhsOjFyZW07LS1hbmltYXRlLXNwaW46c3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7LS1hbmltYXRlLXB1bHNlOnB1bHNlIDJzIGN1YmljLWJlemllciguNCwgMCwgLjYsIDEpIGluZmluaXRlOy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwgMCwgLjIsIDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1jYW1hcmEtcmVkOiNjNDEyMzA7LS1jb2xvci1jYW1hcmEtcmVkLWRhcms6IzliMGUyNn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZSw6OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZX1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmJsb2NrfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAobm90ICgoLXdlYmtpdC1hcHBlYXJhbmNlOi1hcHBsZS1wYXktYnV0dG9uKSkpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOjFweCl7OjpwbGFjZWhvbGRlcntjb2xvcjpjdXJyZW50Q29sb3J9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCBjdXJyZW50Y29sb3IgNTAlLCB0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle21pbi1oZWlnaHQ6MWxoO3RleHQtYWxpZ246aW5oZXJpdH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbW9udGgtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tZXJpZGllbS1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b24saW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWJvZHl7Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zYW5zKTtjb2xvcjp2YXIoLS1jb2xvci1ncmF5LTkwMCk7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7YmFja2dyb3VuZC1jb2xvcjojZjlmYWZiO2JhY2tncm91bmQtaW1hZ2U6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxMiUgOCUsI2M0MTIzMDBhIDAlLCMwMDAwIDM1JSkscmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4OCUgOTIlLCNjNDEyMzAwOCAwJSwjMDAwMCA0MCUpO2JhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZH19QGxheWVyIGNvbXBvbmVudHM7QGxheWVyIHV0aWxpdGllc3suYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDApfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5yaWdodC0ye3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9Lm14LWF1dG97bWFyZ2luLWlubGluZTphdXRvfS5tdC0wXC41e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC41KX0ubXQtMXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ubXQtM3ttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0ubXQtNHttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ubXQtNnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0ubXQtOHttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0ubXQtMTB7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTApfS5tdC0xMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAxMil9Lm1yLTF7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxKX0ubXItM3ttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5tYi0xe21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEpfS5tYi0xXC41e21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9Lm1iLTJ7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Lm1iLTN7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9Lm1iLTR7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9Lm1iLTV7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogNSl9Lm1iLTZ7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9Lm1iLTh7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9Lm1iLTEwe21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEwKX0ubWItMTJ7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMTIpfS5tYi0xNHttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAxNCl9Lm1sLTF7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEpfS5tbC0ye21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ubWwtNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogNSl9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oLTF7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxKX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LmgtM1wuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMuNSl9LmgtNHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA1KX0uaC02e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpfS5oLTl7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA5KX0uaC0xMntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEyKX0uaC0xNHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDE0KX0uaC0yNHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDI0KX0ubWF4LWgtNDh7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNDgpfS5tYXgtaC02MHttYXgtaGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA2MCl9Lm1pbi1oLVxbNDJweFxde21pbi1oZWlnaHQ6NDJweH0ubWluLWgtXFs0NHB4XF17bWluLWhlaWdodDo0NHB4fS5taW4taC1zY3JlZW57bWluLWhlaWdodDoxMDB2aH0udy0ze3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0udy0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzLjUpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS53LTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpfS53LTl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDkpfS53LTEye3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAxMil9LnctMTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDE0KX0udy0xNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTYpfS53LTIwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAyMCl9LnctMjR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDI0KX0udy1mdWxse3dpZHRoOjEwMCV9Lm1heC13LTJ4bHttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLTJ4bCl9Lm1heC13LTN4bHttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLTN4bCl9Lm1heC13LTV4bHttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLTV4bCl9Lm1heC13LTd4bHttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLTd4bCl9Lm1pbi13LVxbMTIwcHhcXXttaW4td2lkdGg6MTIwcHh9LmZsZXgtMXtmbGV4OjF9LmZsZXgtc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpIHZhcigtLXR3LXJvdGF0ZS15LCkgdmFyKC0tdHctcm90YXRlLXosKSB2YXIoLS10dy1za2V3LXgsKSB2YXIoLS10dy1za2V3LXksKX0uYW5pbWF0ZS1wdWxzZXthbmltYXRpb246dmFyKC0tYW5pbWF0ZS1wdWxzZSl9LmFuaW1hdGUtc3BpbnthbmltYXRpb246dmFyKC0tYW5pbWF0ZS1zcGluKX0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci10ZXh0e2N1cnNvcjp0ZXh0fS5saXN0LW91dHNpZGV7bGlzdC1zdHlsZS1wb3NpdGlvbjpvdXRzaWRlfS5saXN0LWRpc2N7bGlzdC1zdHlsZS10eXBlOmRpc2N9LmdyaWQtY29scy0xe2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMSxtaW5tYXgoMCwxZnIpKX0uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXdyYXB7ZmxleC13cmFwOndyYXB9Lml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lml0ZW1zLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZH0uaXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEpfS5nYXAtMVwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LmdhcC0ye2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LmdhcC00e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LmdhcC02e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9OndoZXJlKC5zcGFjZS15LTFcLjU+Om5vdCg6bGFzdC1jaGlsZCkpey0tdHctc3BhY2UteS1yZXZlcnNlOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSkgKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKTttYXJnaW4tYmxvY2stZW5kOmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSkgKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSl9OndoZXJlKC5zcGFjZS15LTI+Om5vdCg6bGFzdC1jaGlsZCkpey0tdHctc3BhY2UteS1yZXZlcnNlOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSk7bWFyZ2luLWJsb2NrLWVuZDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiAyKSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKX06d2hlcmUoLnNwYWNlLXktMz46bm90KDpsYXN0LWNoaWxkKSl7LS10dy1zcGFjZS15LXJldmVyc2U6MDttYXJnaW4tYmxvY2stc3RhcnQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogMykgKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKTttYXJnaW4tYmxvY2stZW5kOmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpfTp3aGVyZSguc3BhY2UteS00Pjpub3QoOmxhc3QtY2hpbGQpKXstLXR3LXNwYWNlLXktcmV2ZXJzZTowO21hcmdpbi1ibG9jay1zdGFydDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiA0KSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpO21hcmdpbi1ibG9jay1lbmQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogNCkgKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSl9OndoZXJlKC5zcGFjZS15LTY+Om5vdCg6bGFzdC1jaGlsZCkpey0tdHctc3BhY2UteS1yZXZlcnNlOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSk7bWFyZ2luLWJsb2NrLWVuZDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiA2KSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKX06d2hlcmUoLnNwYWNlLXktMTI+Om5vdCg6bGFzdC1jaGlsZCkpey0tdHctc3BhY2UteS1yZXZlcnNlOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEyKSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpO21hcmdpbi1ibG9jay1lbmQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogMTIpICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpfS5nYXAteC02ey1tb3otY29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNik7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9OndoZXJlKC5zcGFjZS14LTE+Om5vdCg6bGFzdC1jaGlsZCkpey0tdHctc3BhY2UteC1yZXZlcnNlOjA7bWFyZ2luLWlubGluZS1zdGFydDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiAxKSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO21hcmdpbi1pbmxpbmUtZW5kOmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEpICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfTp3aGVyZSguc3BhY2UteC0yPjpub3QoOmxhc3QtY2hpbGQpKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTowO21hcmdpbi1pbmxpbmUtc3RhcnQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogMikgKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4taW5saW5lLWVuZDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiAyKSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX06d2hlcmUoLnNwYWNlLXgtMz46bm90KDpsYXN0LWNoaWxkKSl7LS10dy1zcGFjZS14LXJldmVyc2U6MDttYXJnaW4taW5saW5lLXN0YXJ0OmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpICogdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSk7bWFyZ2luLWlubGluZS1lbmQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogMykgKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9OndoZXJlKC5zcGFjZS14LTQ+Om5vdCg6bGFzdC1jaGlsZCkpey0tdHctc3BhY2UteC1yZXZlcnNlOjA7bWFyZ2luLWlubGluZS1zdGFydDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiA0KSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO21hcmdpbi1pbmxpbmUtZW5kOmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfTp3aGVyZSguc3BhY2UteC02Pjpub3QoOmxhc3QtY2hpbGQpKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTowO21hcmdpbi1pbmxpbmUtc3RhcnQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogNikgKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4taW5saW5lLWVuZDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiA2KSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX0uZ2FwLXktNHtyb3ctZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC0yeGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtMnhsKX0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQtbm9uZXtib3JkZXItcmFkaXVzOjB9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteGwpfS5yb3VuZGVkLXItbWR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1yYWRpdXMtbWQpfS5ib3JkZXJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLTR7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjRweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9LmJvcmRlci1sLTR7Ym9yZGVyLWxlZnQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItbGVmdC13aWR0aDo0cHh9LmJvcmRlci1sLTh7Ym9yZGVyLWxlZnQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItbGVmdC13aWR0aDo4cHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LmJvcmRlci1ibGFja3tib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYmxhY2spfS5ib3JkZXItY2FtYXJhLXJlZHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItY2FtYXJhLXJlZCl9LmJvcmRlci1ncmF5LTEwMHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItZ3JheS0xMDApfS5ib3JkZXItZ3JheS0yMDB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWdyYXktMjAwKX0uYm9yZGVyLWdyYXktMzAwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1ncmF5LTMwMCl9LmJvcmRlci1ncmF5LTQwMHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItZ3JheS00MDApfS5ib3JkZXItcmVkLTEwMHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItcmVkLTEwMCl9LmJvcmRlci1yZWQtMjAwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1yZWQtMjAwKX0uYm9yZGVyLXllbGxvdy0yMDB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLXllbGxvdy0yMDApfS5iZy1jYW1hcmEtcmVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItY2FtYXJhLXJlZCl9LmJnLWdyYXktNTB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ncmF5LTUwKX0uYmctZ3JheS0xMDB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ncmF5LTEwMCl9LmJnLWdyYXktNzAwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZ3JheS03MDApfS5iZy1yZWQtNTB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1yZWQtNTApfS5iZy1yZWQtNTBcLzYwe2JhY2tncm91bmQtY29sb3I6I2ZlZjJmMjk5fUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctcmVkLTUwXC82MHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tY29sb3ItcmVkLTUwKSA2MCUsIHRyYW5zcGFyZW50KX19LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy15ZWxsb3ctNTB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci15ZWxsb3ctNTApfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogMSl9LnAtMVwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5wLTJ7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnAtMlwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5wLTN7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LnAtNHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5wLTh7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LnAtMTJ7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogMTIpfS5weC0ye3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LnB4LTR7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5weC02e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0ucHgtMTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEyKX0ucHktMXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5weS0ze3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5weS01e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDUpfS5weS04e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5weS0xNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAxNil9LnB0LTR7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucGItNHtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnl9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LmZvbnQtc2Fuc3tmb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpfS50ZXh0LTN4bHtmb250LXNpemU6dmFyKC0tdGV4dC0zeGwpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC0zeGwtLWxpbmUtaGVpZ2h0KSl9LnRleHQtNHhse2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LTR4bCk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LTR4bC0tbGluZS1oZWlnaHQpKX0udGV4dC1iYXNle2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LWJhc2UpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1iYXNlLS1saW5lLWhlaWdodCkpfS50ZXh0LWxne2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LWxnKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQtbGctLWxpbmUtaGVpZ2h0KSl9LnRleHQtc217Zm9udC1zaXplOnZhcigtLXRleHQtc20pO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1zbS0tbGluZS1oZWlnaHQpKX0udGV4dC14bHtmb250LXNpemU6dmFyKC0tdGV4dC14bCk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXhsLS1saW5lLWhlaWdodCkpfS50ZXh0LXhze2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXhzKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQteHMtLWxpbmUtaGVpZ2h0KSl9LnRleHQtXFsxMHB4XF17Zm9udC1zaXplOjEwcHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXJlbGF4ZWR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctcmVsYXhlZCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy1yZWxheGVkKX0ubGVhZGluZy10aWdodHstLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy10aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy10aWdodCl9LmZvbnQtYmxhY2t7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ibGFjayk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtYmxhY2spfS5mb250LWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ib2xkKX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctdGlnaHR7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy10aWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctdGlnaHQpfS50cmFja2luZy10aWdodGVyey0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctdGlnaHRlcik7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctdGlnaHRlcil9LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0udHJhY2tpbmctd2lkZXJ7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlcik7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZXIpfS50cmFja2luZy13aWRlc3R7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlc3QpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGVzdCl9LnRleHQtY2FtYXJhLXJlZHtjb2xvcjp2YXIoLS1jb2xvci1jYW1hcmEtcmVkKX0udGV4dC1ncmF5LTQwMHtjb2xvcjp2YXIoLS1jb2xvci1ncmF5LTQwMCl9LnRleHQtZ3JheS01MDB7Y29sb3I6dmFyKC0tY29sb3ItZ3JheS01MDApfS50ZXh0LWdyYXktNjAwe2NvbG9yOnZhcigtLWNvbG9yLWdyYXktNjAwKX0udGV4dC1ncmF5LTcwMHtjb2xvcjp2YXIoLS1jb2xvci1ncmF5LTcwMCl9LnRleHQtZ3JheS04MDB7Y29sb3I6dmFyKC0tY29sb3ItZ3JheS04MDApfS50ZXh0LWdyYXktOTAwe2NvbG9yOnZhcigtLWNvbG9yLWdyYXktOTAwKX0udGV4dC1yZWQtNTAwe2NvbG9yOnZhcigtLWNvbG9yLXJlZC01MDApfS50ZXh0LXJlZC02MDB7Y29sb3I6dmFyKC0tY29sb3ItcmVkLTYwMCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXllbGxvdy04MDB7Y29sb3I6dmFyKC0tY29sb3IteWVsbG93LTgwMCl9Lm5vcm1hbC1jYXNle3RleHQtdHJhbnNmb3JtOm5vbmV9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0ub3BhY2l0eS0yNXtvcGFjaXR5Oi4yNX0ub3BhY2l0eS03MHtvcGFjaXR5Oi43fS5vcGFjaXR5LTc1e29wYWNpdHk6Ljc1fS5zaGFkb3cteGx7LS10dy1zaGFkb3c6MCAyMHB4IDI1cHggLTVweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwgMCA4cHggMTBweCAtNnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSwgdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXNoYWRvdyl9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1ciwpIHZhcigtLXR3LWJyaWdodG5lc3MsKSB2YXIoLS10dy1jb250cmFzdCwpIHZhcigtLXR3LWdyYXlzY2FsZSwpIHZhcigtLXR3LWh1ZS1yb3RhdGUsKSB2YXIoLS10dy1pbnZlcnQsKSB2YXIoLS10dy1zYXR1cmF0ZSwpIHZhcigtLXR3LXNlcGlhLCkgdmFyKC0tdHctZHJvcC1zaGFkb3csKX0udHJhbnNpdGlvbi1hbGx7dHJhbnNpdGlvbi1wcm9wZXJ0eTphbGw7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLXRyYW5zZm9ybXt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZHVyYXRpb24tNzAwey0tdHctZHVyYXRpb246LjdzO3RyYW5zaXRpb24tZHVyYXRpb246LjdzfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOnRyYW5zbGF0ZS14LTE6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpICogMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9Lmdyb3VwLWhvdmVyXDpyb3RhdGUtOTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7cm90YXRlOjkwZGVnfS5ncm91cC1ob3Zlclw6YmctY2FtYXJhLXJlZDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWNhbWFyYS1yZWQpfS5ncm91cC1ob3Zlclw6dGV4dC1ncmF5LTIwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtjb2xvcjp2YXIoLS1jb2xvci1ncmF5LTIwMCl9Lmdyb3VwLWhvdmVyXDp0ZXh0LXdoaXRlOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19LmZpbGVcOm1yLTQ6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LmZpbGVcOmN1cnNvci1wb2ludGVyOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZmlsZVw6cm91bmRlZC1tZDo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbWQpfS5maWxlXDpib3JkZXItMDo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LmZpbGVcOmJnLXJlZC01MDo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1yZWQtNTApfS5maWxlXDpweC00OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LmZpbGVcOnB5LTI6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5maWxlXDp0ZXh0LXNtOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS5maWxlXDpmb250LXNlbWlib2xkOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LmZpbGVcOnRleHQtY2FtYXJhLXJlZDo6ZmlsZS1zZWxlY3Rvci1idXR0b257Y29sb3I6dmFyKC0tY29sb3ItY2FtYXJhLXJlZCl9LmZpbGVcOnRleHQtcmVkLTcwMDo6ZmlsZS1zZWxlY3Rvci1idXR0b257Y29sb3I6dmFyKC0tY29sb3ItcmVkLTcwMCl9Lmxhc3RcOmJvcmRlci0wOmxhc3QtY2hpbGR7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LmZvY3VzLXdpdGhpblw6Ym9yZGVyLWNhbWFyYS1yZWQ6Zm9jdXMtd2l0aGlue2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1jYW1hcmEtcmVkKX0uZm9jdXMtd2l0aGluXDpyaW5nLTI6Zm9jdXMtd2l0aGluey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0uZm9jdXMtd2l0aGluXDpyaW5nLWNhbWFyYS1yZWRcLzMwOmZvY3VzLXdpdGhpbnstLXR3LXJpbmctY29sb3I6I2M0MTIzMDRkfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtd2l0aGluXDpyaW5nLWNhbWFyYS1yZWRcLzMwOmZvY3VzLXdpdGhpbnstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1jb2xvci1jYW1hcmEtcmVkKSAzMCUsIHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDotdHJhbnNsYXRlLXktMTpob3ZlcnstLXR3LXRyYW5zbGF0ZS15OmNhbGModmFyKC0tc3BhY2luZykgKiAtMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9LmhvdmVyXDpib3JkZXItY2FtYXJhLXJlZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3ItY2FtYXJhLXJlZCl9LmhvdmVyXDpiZy1jYW1hcmEtcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItY2FtYXJhLXJlZCl9LmhvdmVyXDpiZy1jYW1hcmEtcmVkLWRhcms6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1jYW1hcmEtcmVkLWRhcmspfS5ob3Zlclw6YmctZ3JheS0xMDA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ncmF5LTEwMCl9LmhvdmVyXDpiZy1ncmF5LTgwMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWdyYXktODAwKX0uaG92ZXJcOmJnLXJlZC01MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXJlZC01MCl9LmhvdmVyXDpiZy1yZWQtNTBcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZlZjJmMjgwfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXJlZC01MFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWNvbG9yLXJlZC01MCkgNTAlLCB0cmFuc3BhcmVudCl9fS5ob3Zlclw6YmctcmVkLTEwMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXJlZC0xMDApfS5ob3Zlclw6dGV4dC1jYW1hcmEtcmVkOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLWNhbWFyYS1yZWQpfS5ob3Zlclw6dGV4dC1jYW1hcmEtcmVkLWRhcms6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3ItY2FtYXJhLXJlZC1kYXJrKX0uaG92ZXJcOnRleHQtZ3JheS02MDA6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3ItZ3JheS02MDApfS5ob3Zlclw6dGV4dC1ncmF5LTcwMDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci1ncmF5LTcwMCl9LmhvdmVyXDp0ZXh0LXJlZC03MDA6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3ItcmVkLTcwMCl9LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uaG92ZXJcOm5vLXVuZGVybGluZTpob3Zlcnt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5ob3Zlclw6dW5kZXJsaW5lOmhvdmVye3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0uaG92ZXJcOnNoYWRvdy1sZzpob3ZlcnstLXR3LXNoYWRvdzowIDEwcHggMTVweCAtM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLCAwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5ob3Zlclw6ZmlsZVw6YmctcmVkLTEwMDpob3Zlcjo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1yZWQtMTAwKX19LmZvY3VzXDpib3JkZXItY2FtYXJhLXJlZDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tY29sb3ItY2FtYXJhLXJlZCl9LmZvY3VzXDpyaW5nLTI6Zm9jdXN7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5mb2N1c1w6cmluZy1jYW1hcmEtcmVkOmZvY3Vzey0tdHctcmluZy1jb2xvcjp2YXIoLS1jb2xvci1jYW1hcmEtcmVkKX0uZm9jdXNcOnJpbmctY2FtYXJhLXJlZFwvMzA6Zm9jdXN7LS10dy1yaW5nLWNvbG9yOiNjNDEyMzA0ZH1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpyaW5nLWNhbWFyYS1yZWRcLzMwOmZvY3Vzey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWNvbG9yLWNhbWFyYS1yZWQpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZm9jdXNcOnJpbmctd2hpdGU6Zm9jdXN7LS10dy1yaW5nLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uZm9jdXNcOnJpbmctb2Zmc2V0LTI6Zm9jdXN7LS10dy1yaW5nLW9mZnNldC13aWR0aDoycHg7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpIDAgMCAwIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSB2YXIoLS10dy1yaW5nLW9mZnNldC1jb2xvcil9LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5hY3RpdmVcOnNjYWxlLTk1OmFjdGl2ZXstLXR3LXNjYWxlLXg6OTUlOy0tdHctc2NhbGUteTo5NSU7LS10dy1zY2FsZS16Ojk1JTtzY2FsZTp2YXIoLS10dy1zY2FsZS14KSB2YXIoLS10dy1zY2FsZS15KX0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX0uZGlzYWJsZWRcOm9wYWNpdHktNjA6ZGlzYWJsZWR7b3BhY2l0eTouNn1AbWVkaWEgKHdpZHRoPj00OHJlbSl7Lm1kXDpjb2wtc3Bhbi0ye2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9Lm1kXDppbmxpbmV7ZGlzcGxheTppbmxpbmV9Lm1kXDpncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9Lm1kXDpncmlkLWNvbHMtM3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsbWlubWF4KDAsMWZyKSl9Lm1kXDpncmlkLWNvbHMtNHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsbWlubWF4KDAsMWZyKSl9Lm1kXDpncmlkLWNvbHMtNXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDUsbWlubWF4KDAsMWZyKSl9Lm1kXDpncmlkLWNvbHMtNntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDYsbWlubWF4KDAsMWZyKSl9Lm1kXDpmbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9Lm1kXDppdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5tZFw6anVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tZFw6cHgtOHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9Lm1kXDp0ZXh0LTR4bHtmb250LXNpemU6dmFyKC0tdGV4dC00eGwpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC00eGwtLWxpbmUtaGVpZ2h0KSl9Lm1kXDp0ZXh0LTV4bHtmb250LXNpemU6dmFyKC0tdGV4dC01eGwpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC01eGwtLWxpbmUtaGVpZ2h0KSl9Lm1kXDp0ZXh0LWxne2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LWxnKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQtbGctLWxpbmUtaGVpZ2h0KSl9fS5zaGFkb3ctc29mdHtib3gtc2hhZG93OjAgMXB4IDJweCAjMTExODI3MGEsMCAxcHggM3B4ICMxMTE4MjcwZn0uc2hhZG93LXNvZnQtbGd7Ym94LXNoYWRvdzowIDRweCA2cHggLTFweCAjMTExODI3MGYsMCAycHggNHB4IC0ycHggIzExMTgyNzBmfX1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zcGFjZS15LXJldmVyc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctc3BhY2UteC1yZXZlcnNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1zY2FsZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxfUBwcm9wZXJ0eSAtLXR3LXNjYWxlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctc2NhbGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1Aa2V5ZnJhbWVzIHNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHB1bHNlezUwJXtvcGFjaXR5Oi41fX0K
dmFyIGU9T2JqZWN0LmNyZWF0ZSx0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxpPU9iamVjdC5nZXRQcm90b3R5cGVPZixhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpLHM9KGUsdCk9PigpPT4odHx8KGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLGU9bnVsbCksdC5leHBvcnRzKSxjPShlLG4pPT57bGV0IHI9e307Zm9yKHZhciBpIGluIGUpdChyLGkse2dldDplW2ldLGVudW1lcmFibGU6ITB9KTtyZXR1cm4gbnx8dChyLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6YE1vZHVsZWB9KSxyfSxsPShlLGksbyxzKT0+e2lmKGkmJnR5cGVvZiBpPT1gb2JqZWN0YHx8dHlwZW9mIGk9PWBmdW5jdGlvbmApZm9yKHZhciBjPXIoaSksbD0wLHU9Yy5sZW5ndGgsZDtsPHU7bCsrKWQ9Y1tsXSwhYS5jYWxsKGUsZCkmJmQhPT1vJiZ0KGUsZCx7Z2V0OihlPT5pW2VdKS5iaW5kKG51bGwsZCksZW51bWVyYWJsZTohKHM9bihpLGQpKXx8cy5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9LHU9KG4scixhKT0+KGE9bj09bnVsbD97fTplKGkobikpLGwocnx8IW58fCFuLl9fZXNNb2R1bGU/dChhLGBkZWZhdWx0YCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSk6YSxuKSk7KGZ1bmN0aW9uKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApLnJlbExpc3Q7aWYoZSYmZS5zdXBwb3J0cyYmZS5zdXBwb3J0cyhgbW9kdWxlcHJlbG9hZGApKXJldHVybjtmb3IobGV0IGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXWApKW4oZSk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgdCBvZiBlKWlmKHQudHlwZT09PWBjaGlsZExpc3RgKWZvcihsZXQgZSBvZiB0LmFkZGVkTm9kZXMpZS50YWdOYW1lPT09YExJTktgJiZlLnJlbD09PWBtb2R1bGVwcmVsb2FkYCYmbihlKX0pLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSk7ZnVuY3Rpb24gdChlKXtsZXQgdD17fTtyZXR1cm4gZS5pbnRlZ3JpdHkmJih0LmludGVncml0eT1lLmludGVncml0eSksZS5yZWZlcnJlclBvbGljeSYmKHQucmVmZXJyZXJQb2xpY3k9ZS5yZWZlcnJlclBvbGljeSksZS5jcm9zc09yaWdpbj09PWB1c2UtY3JlZGVudGlhbHNgP3QuY3JlZGVudGlhbHM9YGluY2x1ZGVgOmUuY3Jvc3NPcmlnaW49PT1gYW5vbnltb3VzYD90LmNyZWRlbnRpYWxzPWBvbWl0YDp0LmNyZWRlbnRpYWxzPWBzYW1lLW9yaWdpbmAsdH1mdW5jdGlvbiBuKGUpe2lmKGUuZXApcmV0dXJuO2UuZXA9ITA7bGV0IG49dChlKTtmZXRjaChlLmhyZWYsbil9fSkoKTt2YXIgZD1zKChlPT57dmFyIHQ9U3ltYm9sLmZvcihgcmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRgKSxuPVN5bWJvbC5mb3IoYHJlYWN0LnBvcnRhbGApLHI9U3ltYm9sLmZvcihgcmVhY3QuZnJhZ21lbnRgKSxpPVN5bWJvbC5mb3IoYHJlYWN0LnN0cmljdF9tb2RlYCksYT1TeW1ib2wuZm9yKGByZWFjdC5wcm9maWxlcmApLG89U3ltYm9sLmZvcihgcmVhY3QuY29uc3VtZXJgKSxzPVN5bWJvbC5mb3IoYHJlYWN0LmNvbnRleHRgKSxjPVN5bWJvbC5mb3IoYHJlYWN0LmZvcndhcmRfcmVmYCksbD1TeW1ib2wuZm9yKGByZWFjdC5zdXNwZW5zZWApLHU9U3ltYm9sLmZvcihgcmVhY3QubWVtb2ApLGQ9U3ltYm9sLmZvcihgcmVhY3QubGF6eWApLGY9U3ltYm9sLmZvcihgcmVhY3QuYWN0aXZpdHlgKSxwPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBtKGUpe3JldHVybiB0eXBlb2YgZSE9YG9iamVjdGB8fCFlP251bGw6KGU9cCYmZVtwXXx8ZVtgQEBpdGVyYXRvcmBdLHR5cGVvZiBlPT1gZnVuY3Rpb25gP2U6bnVsbCl9dmFyIGg9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGc9T2JqZWN0LmFzc2lnbixfPXt9O2Z1bmN0aW9uIHYoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Xyx0aGlzLnVwZGF0ZXI9bnx8aH12LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LHYucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGUhPWBvYmplY3RgJiZ0eXBlb2YgZSE9YGZ1bmN0aW9uYCYmZSE9bnVsbCl0aHJvdyBFcnJvcihgdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuYCk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUsdCxgc2V0U3RhdGVgKX0sdi5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsYGZvcmNlVXBkYXRlYCl9O2Z1bmN0aW9uIHkoKXt9eS5wcm90b3R5cGU9di5wcm90b3R5cGU7ZnVuY3Rpb24gYihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1fLHRoaXMudXBkYXRlcj1ufHxofXZhciB4PWIucHJvdG90eXBlPW5ldyB5O3guY29uc3RydWN0b3I9YixnKHgsdi5wcm90b3R5cGUpLHguaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIFM9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBDKCl7fXZhciB3PXtIOm51bGwsQTpudWxsLFQ6bnVsbCxTOm51bGx9LFQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBFKGUsbixyKXt2YXIgaT1yLnJlZjtyZXR1cm57JCR0eXBlb2Y6dCx0eXBlOmUsa2V5Om4scmVmOmk9PT12b2lkIDA/bnVsbDppLHByb3BzOnJ9fWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gRShlLnR5cGUsdCxlLnByb3BzKX1mdW5jdGlvbiBPKGUpe3JldHVybiB0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmZS4kJHR5cGVvZj09PXR9ZnVuY3Rpb24gayhlKXt2YXIgdD17Ij0iOmA9MGAsIjoiOmA9MmB9O3JldHVybmAkYCtlLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfXZhciBBPS9cLysvZztmdW5jdGlvbiBqKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gb2JqZWN0YCYmZSYmZS5rZXkhPW51bGw/ayhgYCtlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gTShlKXtzd2l0Y2goZS5zdGF0dXMpe2Nhc2VgZnVsZmlsbGVkYDpyZXR1cm4gZS52YWx1ZTtjYXNlYHJlamVjdGVkYDp0aHJvdyBlLnJlYXNvbjtkZWZhdWx0OnN3aXRjaCh0eXBlb2YgZS5zdGF0dXM9PWBzdHJpbmdgP2UudGhlbihDLEMpOihlLnN0YXR1cz1gcGVuZGluZ2AsZS50aGVuKGZ1bmN0aW9uKHQpe2Uuc3RhdHVzPT09YHBlbmRpbmdgJiYoZS5zdGF0dXM9YGZ1bGZpbGxlZGAsZS52YWx1ZT10KX0sZnVuY3Rpb24odCl7ZS5zdGF0dXM9PT1gcGVuZGluZ2AmJihlLnN0YXR1cz1gcmVqZWN0ZWRgLGUucmVhc29uPXQpfSkpLGUuc3RhdHVzKXtjYXNlYGZ1bGZpbGxlZGA6cmV0dXJuIGUudmFsdWU7Y2FzZWByZWplY3RlZGA6dGhyb3cgZS5yZWFzb259fXRocm93IGV9ZnVuY3Rpb24gTihlLHIsaSxhLG8pe3ZhciBzPXR5cGVvZiBlOyhzPT09YHVuZGVmaW5lZGB8fHM9PT1gYm9vbGVhbmApJiYoZT1udWxsKTt2YXIgYz0hMTtpZihlPT09bnVsbCljPSEwO2Vsc2Ugc3dpdGNoKHMpe2Nhc2VgYmlnaW50YDpjYXNlYHN0cmluZ2A6Y2FzZWBudW1iZXJgOmM9ITA7YnJlYWs7Y2FzZWBvYmplY3RgOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIHQ6Y2FzZSBuOmM9ITA7YnJlYWs7Y2FzZSBkOnJldHVybiBjPWUuX2luaXQsTihjKGUuX3BheWxvYWQpLHIsaSxhLG8pfX1pZihjKXJldHVybiBvPW8oZSksYz1hPT09YGA/YC5gK2ooZSwwKTphLFMobyk/KGk9YGAsYyE9bnVsbCYmKGk9Yy5yZXBsYWNlKEEsYCQmL2ApK2AvYCksTihvLHIsaSxgYCxmdW5jdGlvbihlKXtyZXR1cm4gZX0pKTpvIT1udWxsJiYoTyhvKSYmKG89RChvLGkrKG8ua2V5PT1udWxsfHxlJiZlLmtleT09PW8ua2V5P2BgOihgYCtvLmtleSkucmVwbGFjZShBLGAkJi9gKStgL2ApK2MpKSxyLnB1c2gobykpLDE7Yz0wO3ZhciBsPWE9PT1gYD9gLmA6YStgOmA7aWYoUyhlKSlmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKylhPWVbdV0scz1sK2ooYSx1KSxjKz1OKGEscixpLHMsbyk7ZWxzZSBpZih1PW0oZSksdHlwZW9mIHU9PWBmdW5jdGlvbmApZm9yKGU9dS5jYWxsKGUpLHU9MDshKGE9ZS5uZXh0KCkpLmRvbmU7KWE9YS52YWx1ZSxzPWwraihhLHUrKyksYys9TihhLHIsaSxzLG8pO2Vsc2UgaWYocz09PWBvYmplY3RgKXtpZih0eXBlb2YgZS50aGVuPT1gZnVuY3Rpb25gKXJldHVybiBOKE0oZSkscixpLGEsbyk7dGhyb3cgcj1TdHJpbmcoZSksRXJyb3IoYE9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogYCsocj09PWBbb2JqZWN0IE9iamVjdF1gP2BvYmplY3Qgd2l0aCBrZXlzIHtgK09iamVjdC5rZXlzKGUpLmpvaW4oYCwgYCkrYH1gOnIpK2ApLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuYCl9cmV0dXJuIGN9ZnVuY3Rpb24gUChlLHQsbil7aWYoZT09bnVsbClyZXR1cm4gZTt2YXIgcj1bXSxpPTA7cmV0dXJuIE4oZSxyLGBgLGBgLGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlLGkrKyl9KSxyfWZ1bmN0aW9uIEYoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSx0LnRoZW4oZnVuY3Rpb24odCl7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD10KX0sZnVuY3Rpb24odCl7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pLGUuX3N0YXR1cz09PS0xJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgST10eXBlb2YgcmVwb3J0RXJyb3I9PWBmdW5jdGlvbmA/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIHdpbmRvdz09YG9iamVjdGAmJnR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudD09YGZ1bmN0aW9uYCl7dmFyIHQ9bmV3IHdpbmRvdy5FcnJvckV2ZW50KGBlcnJvcmAse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxtZXNzYWdlOnR5cGVvZiBlPT1gb2JqZWN0YCYmZSYmdHlwZW9mIGUubWVzc2FnZT09YHN0cmluZ2A/U3RyaW5nKGUubWVzc2FnZSk6U3RyaW5nKGUpLGVycm9yOmV9KTtpZighd2luZG93LmRpc3BhdGNoRXZlbnQodCkpcmV0dXJufWVsc2UgaWYodHlwZW9mIHByb2Nlc3M9PWBvYmplY3RgJiZ0eXBlb2YgcHJvY2Vzcy5lbWl0PT1gZnVuY3Rpb25gKXtwcm9jZXNzLmVtaXQoYHVuY2F1Z2h0RXhjZXB0aW9uYCxlKTtyZXR1cm59Y29uc29sZS5lcnJvcihlKX0sTD17bWFwOlAsZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7UChlLGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG4pfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBQKGUsZnVuY3Rpb24oKXt0Kyt9KSx0fSx0b0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBQKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIU8oZSkpdGhyb3cgRXJyb3IoYFJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLmApO3JldHVybiBlfX07ZS5BY3Rpdml0eT1mLGUuQ2hpbGRyZW49TCxlLkNvbXBvbmVudD12LGUuRnJhZ21lbnQ9cixlLlByb2ZpbGVyPWEsZS5QdXJlQ29tcG9uZW50PWIsZS5TdHJpY3RNb2RlPWksZS5TdXNwZW5zZT1sLGUuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFPXcsZS5fX0NPTVBJTEVSX1JVTlRJTUU9e19fcHJvdG9fXzpudWxsLGM6ZnVuY3Rpb24oZSl7cmV0dXJuIHcuSC51c2VNZW1vQ2FjaGUoZSl9fSxlLmNhY2hlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKX19LGUuY2FjaGVTaWduYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKGU9PW51bGwpdGhyb3cgRXJyb3IoYFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgYCtlK2AuYCk7dmFyIHI9Zyh7fSxlLnByb3BzKSxpPWUua2V5O2lmKHQhPW51bGwpZm9yKGEgaW4gdC5rZXkhPT12b2lkIDAmJihpPWBgK3Qua2V5KSx0KSFULmNhbGwodCxhKXx8YT09PWBrZXlgfHxhPT09YF9fc2VsZmB8fGE9PT1gX19zb3VyY2VgfHxhPT09YHJlZmAmJnQucmVmPT09dm9pZCAwfHwoclthXT10W2FdKTt2YXIgYT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoYT09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxhKXtmb3IodmFyIG89QXJyYXkoYSkscz0wO3M8YTtzKyspb1tzXT1hcmd1bWVudHNbcysyXTtyLmNoaWxkcmVuPW99cmV0dXJuIEUoZS50eXBlLGkscil9LGUuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZT17JCR0eXBlb2Y6cyxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9LGUuUHJvdmlkZXI9ZSxlLkNvbnN1bWVyPXskJHR5cGVvZjpvLF9jb250ZXh0OmV9LGV9LGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaT17fSxhPW51bGw7aWYodCE9bnVsbClmb3IociBpbiB0LmtleSE9PXZvaWQgMCYmKGE9YGArdC5rZXkpLHQpVC5jYWxsKHQscikmJnIhPT1ga2V5YCYmciE9PWBfX3NlbGZgJiZyIT09YF9fc291cmNlYCYmKGlbcl09dFtyXSk7dmFyIG89YXJndW1lbnRzLmxlbmd0aC0yO2lmKG89PT0xKWkuY2hpbGRyZW49bjtlbHNlIGlmKDE8byl7Zm9yKHZhciBzPUFycmF5KG8pLGM9MDtjPG87YysrKXNbY109YXJndW1lbnRzW2MrMl07aS5jaGlsZHJlbj1zfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIG89ZS5kZWZhdWx0UHJvcHMsbylpW3JdPT09dm9pZCAwJiYoaVtyXT1vW3JdKTtyZXR1cm4gRShlLGEsaSl9LGUuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LGUuZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6YyxyZW5kZXI6ZX19LGUuaXNWYWxpZEVsZW1lbnQ9TyxlLmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmQsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpGfX0sZS5tZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTplLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fSxlLnN0YXJ0VHJhbnNpdGlvbj1mdW5jdGlvbihlKXt2YXIgdD13LlQsbj17fTt3LlQ9bjt0cnl7dmFyIHI9ZSgpLGk9dy5TO2khPT1udWxsJiZpKG4sciksdHlwZW9mIHI9PWBvYmplY3RgJiZyJiZ0eXBlb2Ygci50aGVuPT1gZnVuY3Rpb25gJiZyLnRoZW4oQyxJKX1jYXRjaChlKXtJKGUpfWZpbmFsbHl7dCE9PW51bGwmJm4udHlwZXMhPT1udWxsJiYodC50eXBlcz1uLnR5cGVzKSx3LlQ9dH19LGUudW5zdGFibGVfdXNlQ2FjaGVSZWZyZXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHcuSC51c2VDYWNoZVJlZnJlc2goKX0sZS51c2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHcuSC51c2UoZSl9LGUudXNlQWN0aW9uU3RhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB3LkgudXNlQWN0aW9uU3RhdGUoZSx0LG4pfSxlLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHcuSC51c2VDYWxsYmFjayhlLHQpfSxlLnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHcuSC51c2VDb250ZXh0KGUpfSxlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LGUudXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiB3LkgudXNlRGVmZXJyZWRWYWx1ZShlLHQpfSxlLnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiB3LkgudXNlRWZmZWN0KGUsdCl9LGUudXNlRWZmZWN0RXZlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHcuSC51c2VFZmZlY3RFdmVudChlKX0sZS51c2VJZD1mdW5jdGlvbigpe3JldHVybiB3LkgudXNlSWQoKX0sZS51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdy5ILnVzZUltcGVyYXRpdmVIYW5kbGUoZSx0LG4pfSxlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiB3LkgudXNlSW5zZXJ0aW9uRWZmZWN0KGUsdCl9LGUudXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHcuSC51c2VMYXlvdXRFZmZlY3QoZSx0KX0sZS51c2VNZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHcuSC51c2VNZW1vKGUsdCl9LGUudXNlT3B0aW1pc3RpYz1mdW5jdGlvbihlLHQpe3JldHVybiB3LkgudXNlT3B0aW1pc3RpYyhlLHQpfSxlLnVzZVJlZHVjZXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB3LkgudXNlUmVkdWNlcihlLHQsbil9LGUudXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiB3LkgudXNlUmVmKGUpfSxlLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiB3LkgudXNlU3RhdGUoZSl9LGUudXNlU3luY0V4dGVybmFsU3RvcmU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB3LkgudXNlU3luY0V4dGVybmFsU3RvcmUoZSx0LG4pfSxlLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdy5ILnVzZVRyYW5zaXRpb24oKX0sZS52ZXJzaW9uPWAxOS4yLjZgfSkpLGY9cygoKGUsdCk9Pnt0LmV4cG9ydHM9ZCgpfSkpLHA9cygoZT0+e2Z1bmN0aW9uIHQoZSx0KXt2YXIgbj1lLmxlbmd0aDtlLnB1c2godCk7YTpmb3IoOzA8bjspe3ZhciByPW4tMT4+PjEsYT1lW3JdO2lmKDA8aShhLHQpKWVbcl09dCxlW25dPWEsbj1yO2Vsc2UgYnJlYWsgYX19ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5sZW5ndGg9PT0wP251bGw6ZVswXX1mdW5jdGlvbiByKGUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gbnVsbDt2YXIgdD1lWzBdLG49ZS5wb3AoKTtpZihuIT09dCl7ZVswXT1uO2E6Zm9yKHZhciByPTAsYT1lLmxlbmd0aCxvPWE+Pj4xO3I8bzspe3ZhciBzPTIqKHIrMSktMSxjPWVbc10sbD1zKzEsdT1lW2xdO2lmKDA+aShjLG4pKWw8YSYmMD5pKHUsYyk/KGVbcl09dSxlW2xdPW4scj1sKTooZVtyXT1jLGVbc109bixyPXMpO2Vsc2UgaWYobDxhJiYwPmkodSxuKSllW3JdPXUsZVtsXT1uLHI9bDtlbHNlIGJyZWFrIGF9fXJldHVybiB0fWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1lLnNvcnRJbmRleC10LnNvcnRJbmRleDtyZXR1cm4gbj09PTA/ZS5pZC10LmlkOm59aWYoZS51bnN0YWJsZV9ub3c9dm9pZCAwLHR5cGVvZiBwZXJmb3JtYW5jZT09YG9iamVjdGAmJnR5cGVvZiBwZXJmb3JtYW5jZS5ub3c9PWBmdW5jdGlvbmApe3ZhciBhPXBlcmZvcm1hbmNlO2UudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGEubm93KCl9fWVsc2V7dmFyIG89RGF0ZSxzPW8ubm93KCk7ZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gby5ub3coKS1zfX12YXIgYz1bXSxsPVtdLHU9MSxkPW51bGwsZj0zLHA9ITEsbT0hMSxoPSExLGc9ITEsXz10eXBlb2Ygc2V0VGltZW91dD09YGZ1bmN0aW9uYD9zZXRUaW1lb3V0Om51bGwsdj10eXBlb2YgY2xlYXJUaW1lb3V0PT1gZnVuY3Rpb25gP2NsZWFyVGltZW91dDpudWxsLHk9dHlwZW9mIHNldEltbWVkaWF0ZTxgdWA/c2V0SW1tZWRpYXRlOm51bGw7ZnVuY3Rpb24gYihlKXtmb3IodmFyIGk9bihsKTtpIT09bnVsbDspe2lmKGkuY2FsbGJhY2s9PT1udWxsKXIobCk7ZWxzZSBpZihpLnN0YXJ0VGltZTw9ZSlyKGwpLGkuc29ydEluZGV4PWkuZXhwaXJhdGlvblRpbWUsdChjLGkpO2Vsc2UgYnJlYWs7aT1uKGwpfX1mdW5jdGlvbiB4KGUpe2lmKGg9ITEsYihlKSwhbSlpZihuKGMpIT09bnVsbCltPSEwLFN8fChTPSEwLE8oKSk7ZWxzZXt2YXIgdD1uKGwpO3QhPT1udWxsJiZqKHgsdC5zdGFydFRpbWUtZSl9fXZhciBTPSExLEM9LTEsdz01LFQ9LTE7ZnVuY3Rpb24gRSgpe3JldHVybiBnPyEwOiEoZS51bnN0YWJsZV9ub3coKS1UPHcpfWZ1bmN0aW9uIEQoKXtpZihnPSExLFMpe3ZhciB0PWUudW5zdGFibGVfbm93KCk7VD10O3ZhciBpPSEwO3RyeXthOnttPSExLGgmJihoPSExLHYoQyksQz0tMSkscD0hMDt2YXIgYT1mO3RyeXtiOntmb3IoYih0KSxkPW4oYyk7ZCE9PW51bGwmJiEoZC5leHBpcmF0aW9uVGltZT50JiZFKCkpOyl7dmFyIG89ZC5jYWxsYmFjaztpZih0eXBlb2Ygbz09YGZ1bmN0aW9uYCl7ZC5jYWxsYmFjaz1udWxsLGY9ZC5wcmlvcml0eUxldmVsO3ZhciBzPW8oZC5leHBpcmF0aW9uVGltZTw9dCk7aWYodD1lLnVuc3RhYmxlX25vdygpLHR5cGVvZiBzPT1gZnVuY3Rpb25gKXtkLmNhbGxiYWNrPXMsYih0KSxpPSEwO2JyZWFrIGJ9ZD09PW4oYykmJnIoYyksYih0KX1lbHNlIHIoYyk7ZD1uKGMpfWlmKGQhPT1udWxsKWk9ITA7ZWxzZXt2YXIgdT1uKGwpO3UhPT1udWxsJiZqKHgsdS5zdGFydFRpbWUtdCksaT0hMX19YnJlYWsgYX1maW5hbGx5e2Q9bnVsbCxmPWEscD0hMX1pPXZvaWQgMH19ZmluYWxseXtpP08oKTpTPSExfX19dmFyIE87aWYodHlwZW9mIHk9PWBmdW5jdGlvbmApTz1mdW5jdGlvbigpe3koRCl9O2Vsc2UgaWYodHlwZW9mIE1lc3NhZ2VDaGFubmVsPGB1YCl7dmFyIGs9bmV3IE1lc3NhZ2VDaGFubmVsLEE9ay5wb3J0MjtrLnBvcnQxLm9ubWVzc2FnZT1ELE89ZnVuY3Rpb24oKXtBLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIE89ZnVuY3Rpb24oKXtfKEQsMCl9O2Z1bmN0aW9uIGoodCxuKXtDPV8oZnVuY3Rpb24oKXt0KGUudW5zdGFibGVfbm93KCkpfSxuKX1lLnVuc3RhYmxlX0lkbGVQcmlvcml0eT01LGUudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MSxlLnVuc3RhYmxlX0xvd1ByaW9yaXR5PTQsZS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zLGUudW5zdGFibGVfUHJvZmlsaW5nPW51bGwsZS51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eT0yLGUudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7ZS5jYWxsYmFjaz1udWxsfSxlLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGUpezA+ZXx8MTI1PGU/Y29uc29sZS5lcnJvcihgZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkYCk6dz0wPGU/TWF0aC5mbG9vcigxZTMvZSk6NX0sZS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBmfSxlLnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGYpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciB0PTM7YnJlYWs7ZGVmYXVsdDp0PWZ9dmFyIG49ZjtmPXQ7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtmPW59fSxlLnVuc3RhYmxlX3JlcXVlc3RQYWludD1mdW5jdGlvbigpe2c9ITB9LGUudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIG49ZjtmPWU7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtmPW59fSxlLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPWUudW5zdGFibGVfbm93KCk7c3dpdGNoKHR5cGVvZiBhPT1gb2JqZWN0YCYmYT8oYT1hLmRlbGF5LGE9dHlwZW9mIGE9PWBudW1iZXJgJiYwPGE/bythOm8pOmE9byxyKXtjYXNlIDE6dmFyIHM9LTE7YnJlYWs7Y2FzZSAyOnM9MjUwO2JyZWFrO2Nhc2UgNTpzPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OnM9MWU0O2JyZWFrO2RlZmF1bHQ6cz01ZTN9cmV0dXJuIHM9YStzLHI9e2lkOnUrKyxjYWxsYmFjazppLHByaW9yaXR5TGV2ZWw6cixzdGFydFRpbWU6YSxleHBpcmF0aW9uVGltZTpzLHNvcnRJbmRleDotMX0sYT5vPyhyLnNvcnRJbmRleD1hLHQobCxyKSxuKGMpPT09bnVsbCYmcj09PW4obCkmJihoPyh2KEMpLEM9LTEpOmg9ITAsaih4LGEtbykpKTooci5zb3J0SW5kZXg9cyx0KGMsciksbXx8cHx8KG09ITAsU3x8KFM9ITAsTygpKSkpLHJ9LGUudW5zdGFibGVfc2hvdWxkWWllbGQ9RSxlLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1mO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWY7Zj10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtmPW59fX19KSksbT1zKCgoZSx0KT0+e3QuZXhwb3J0cz1wKCl9KSksaD1zKChlPT57dmFyIHQ9ZigpO2Z1bmN0aW9uIG4oZSl7dmFyIHQ9YGh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy9gK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXt0Kz1gP2FyZ3NbXT1gK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9YCZhcmdzW109YCtlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKX1yZXR1cm5gTWluaWZpZWQgUmVhY3QgZXJyb3IgI2ArZStgOyB2aXNpdCBgK3QrYCBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYH1mdW5jdGlvbiByKCl7fXZhciBpPXtkOntmOnIscjpmdW5jdGlvbigpe3Rocm93IEVycm9yKG4oNTIyKSl9LEQ6cixDOnIsTDpyLG06cixYOnIsUzpyLE06cn0scDowLGZpbmRET01Ob2RlOm51bGx9LGE9U3ltYm9sLmZvcihgcmVhY3QucG9ydGFsYCk7ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9Mzxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOmEsa2V5OnI9PW51bGw/bnVsbDpgYCtyLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fXZhciBzPXQuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFO2Z1bmN0aW9uIGMoZSx0KXtpZihlPT09YGZvbnRgKXJldHVybmBgO2lmKHR5cGVvZiB0PT1gc3RyaW5nYClyZXR1cm4gdD09PWB1c2UtY3JlZGVudGlhbHNgP3Q6YGB9ZS5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9aSxlLmNyZWF0ZVBvcnRhbD1mdW5jdGlvbihlLHQpe3ZhciByPTI8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsO2lmKCF0fHx0Lm5vZGVUeXBlIT09MSYmdC5ub2RlVHlwZSE9PTkmJnQubm9kZVR5cGUhPT0xMSl0aHJvdyBFcnJvcihuKDI5OSkpO3JldHVybiBvKGUsdCxudWxsLHIpfSxlLmZsdXNoU3luYz1mdW5jdGlvbihlKXt2YXIgdD1zLlQsbj1pLnA7dHJ5e2lmKHMuVD1udWxsLGkucD0yLGUpcmV0dXJuIGUoKX1maW5hbGx5e3MuVD10LGkucD1uLGkuZC5mKCl9fSxlLnByZWNvbm5lY3Q9ZnVuY3Rpb24oZSx0KXt0eXBlb2YgZT09YHN0cmluZ2AmJih0Pyh0PXQuY3Jvc3NPcmlnaW4sdD10eXBlb2YgdD09YHN0cmluZ2A/dD09PWB1c2UtY3JlZGVudGlhbHNgP3Q6YGA6dm9pZCAwKTp0PW51bGwsaS5kLkMoZSx0KSl9LGUucHJlZmV0Y2hETlM9ZnVuY3Rpb24oZSl7dHlwZW9mIGU9PWBzdHJpbmdgJiZpLmQuRChlKX0sZS5wcmVpbml0PWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGU9PWBzdHJpbmdgJiZ0JiZ0eXBlb2YgdC5hcz09YHN0cmluZ2Ape3ZhciBuPXQuYXMscj1jKG4sdC5jcm9zc09yaWdpbiksYT10eXBlb2YgdC5pbnRlZ3JpdHk9PWBzdHJpbmdgP3QuaW50ZWdyaXR5OnZvaWQgMCxvPXR5cGVvZiB0LmZldGNoUHJpb3JpdHk9PWBzdHJpbmdgP3QuZmV0Y2hQcmlvcml0eTp2b2lkIDA7bj09PWBzdHlsZWA/aS5kLlMoZSx0eXBlb2YgdC5wcmVjZWRlbmNlPT1gc3RyaW5nYD90LnByZWNlZGVuY2U6dm9pZCAwLHtjcm9zc09yaWdpbjpyLGludGVncml0eTphLGZldGNoUHJpb3JpdHk6b30pOm49PT1gc2NyaXB0YCYmaS5kLlgoZSx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6YSxmZXRjaFByaW9yaXR5Om8sbm9uY2U6dHlwZW9mIHQubm9uY2U9PWBzdHJpbmdgP3Qubm9uY2U6dm9pZCAwfSl9fSxlLnByZWluaXRNb2R1bGU9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgZT09YHN0cmluZ2ApaWYodHlwZW9mIHQ9PWBvYmplY3RgJiZ0KXtpZih0LmFzPT1udWxsfHx0LmFzPT09YHNjcmlwdGApe3ZhciBuPWModC5hcyx0LmNyb3NzT3JpZ2luKTtpLmQuTShlLHtjcm9zc09yaWdpbjpuLGludGVncml0eTp0eXBlb2YgdC5pbnRlZ3JpdHk9PWBzdHJpbmdgP3QuaW50ZWdyaXR5OnZvaWQgMCxub25jZTp0eXBlb2YgdC5ub25jZT09YHN0cmluZ2A/dC5ub25jZTp2b2lkIDB9KX19ZWxzZSB0Pz9pLmQuTShlKX0sZS5wcmVsb2FkPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGU9PWBzdHJpbmdgJiZ0eXBlb2YgdD09YG9iamVjdGAmJnQmJnR5cGVvZiB0LmFzPT1gc3RyaW5nYCl7dmFyIG49dC5hcyxyPWMobix0LmNyb3NzT3JpZ2luKTtpLmQuTChlLG4se2Nyb3NzT3JpZ2luOnIsaW50ZWdyaXR5OnR5cGVvZiB0LmludGVncml0eT09YHN0cmluZ2A/dC5pbnRlZ3JpdHk6dm9pZCAwLG5vbmNlOnR5cGVvZiB0Lm5vbmNlPT1gc3RyaW5nYD90Lm5vbmNlOnZvaWQgMCx0eXBlOnR5cGVvZiB0LnR5cGU9PWBzdHJpbmdgP3QudHlwZTp2b2lkIDAsZmV0Y2hQcmlvcml0eTp0eXBlb2YgdC5mZXRjaFByaW9yaXR5PT1gc3RyaW5nYD90LmZldGNoUHJpb3JpdHk6dm9pZCAwLHJlZmVycmVyUG9saWN5OnR5cGVvZiB0LnJlZmVycmVyUG9saWN5PT1gc3RyaW5nYD90LnJlZmVycmVyUG9saWN5OnZvaWQgMCxpbWFnZVNyY1NldDp0eXBlb2YgdC5pbWFnZVNyY1NldD09YHN0cmluZ2A/dC5pbWFnZVNyY1NldDp2b2lkIDAsaW1hZ2VTaXplczp0eXBlb2YgdC5pbWFnZVNpemVzPT1gc3RyaW5nYD90LmltYWdlU2l6ZXM6dm9pZCAwLG1lZGlhOnR5cGVvZiB0Lm1lZGlhPT1gc3RyaW5nYD90Lm1lZGlhOnZvaWQgMH0pfX0sZS5wcmVsb2FkTW9kdWxlPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGU9PWBzdHJpbmdgKWlmKHQpe3ZhciBuPWModC5hcyx0LmNyb3NzT3JpZ2luKTtpLmQubShlLHthczp0eXBlb2YgdC5hcz09YHN0cmluZ2AmJnQuYXMhPT1gc2NyaXB0YD90LmFzOnZvaWQgMCxjcm9zc09yaWdpbjpuLGludGVncml0eTp0eXBlb2YgdC5pbnRlZ3JpdHk9PWBzdHJpbmdgP3QuaW50ZWdyaXR5OnZvaWQgMH0pfWVsc2UgaS5kLm0oZSl9LGUucmVxdWVzdEZvcm1SZXNldD1mdW5jdGlvbihlKXtpLmQucihlKX0sZS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1mdW5jdGlvbihlLHQpe3JldHVybiBlKHQpfSxlLnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHMuSC51c2VGb3JtU3RhdGUoZSx0LG4pfSxlLnVzZUZvcm1TdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gcy5ILnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCl9LGUudmVyc2lvbj1gMTkuMi42YH0pKSxnPXMoKChlLHQpPT57ZnVuY3Rpb24gbigpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz5gdWB8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPWBmdW5jdGlvbmApKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0Uobil9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19bigpLHQuZXhwb3J0cz1oKCl9KSksXz1zKChlPT57dmFyIHQ9bSgpLG49ZigpLHI9ZygpO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9YGh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy9gK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXt0Kz1gP2FyZ3NbXT1gK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9YCZhcmdzW109YCtlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKX1yZXR1cm5gTWluaWZpZWQgUmVhY3QgZXJyb3IgI2ArZStgOyB2aXNpdCBgK3QrYCBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYH1mdW5jdGlvbiBhKGUpe3JldHVybiEoIWV8fGUubm9kZVR5cGUhPT0xJiZlLm5vZGVUeXBlIT09OSYmZS5ub2RlVHlwZSE9PTExKX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUsbj1lO2lmKGUuYWx0ZXJuYXRlKWZvcig7dC5yZXR1cm47KXQ9dC5yZXR1cm47ZWxzZXtlPXQ7ZG8gdD1lLHQuZmxhZ3MmNDA5OCYmKG49dC5yZXR1cm4pLGU9dC5yZXR1cm47d2hpbGUoZSl9cmV0dXJuIHQudGFnPT09Mz9uOm51bGx9ZnVuY3Rpb24gcyhlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGMoZSl7aWYoZS50YWc9PT0zMSl7dmFyIHQ9ZS5tZW1vaXplZFN0YXRlO2lmKHQ9PT1udWxsJiYoZT1lLmFsdGVybmF0ZSxlIT09bnVsbCYmKHQ9ZS5tZW1vaXplZFN0YXRlKSksdCE9PW51bGwpcmV0dXJuIHQuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBsKGUpe2lmKG8oZSkhPT1lKXRocm93IEVycm9yKGkoMTg4KSl9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZighdCl7aWYodD1vKGUpLHQ9PT1udWxsKXRocm93IEVycm9yKGkoMTg4KSk7cmV0dXJuIHQ9PT1lP2U6bnVsbH1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIGE9bi5yZXR1cm47aWYoYT09PW51bGwpYnJlYWs7dmFyIHM9YS5hbHRlcm5hdGU7aWYocz09PW51bGwpe2lmKHI9YS5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihhLmNoaWxkPT09cy5jaGlsZCl7Zm9yKHM9YS5jaGlsZDtzOyl7aWYocz09PW4pcmV0dXJuIGwoYSksZTtpZihzPT09cilyZXR1cm4gbChhKSx0O3M9cy5zaWJsaW5nfXRocm93IEVycm9yKGkoMTg4KSl9aWYobi5yZXR1cm4hPT1yLnJldHVybiluPWEscj1zO2Vsc2V7Zm9yKHZhciBjPSExLHU9YS5jaGlsZDt1Oyl7aWYodT09PW4pe2M9ITAsbj1hLHI9czticmVha31pZih1PT09cil7Yz0hMCxyPWEsbj1zO2JyZWFrfXU9dS5zaWJsaW5nfWlmKCFjKXtmb3IodT1zLmNoaWxkO3U7KXtpZih1PT09bil7Yz0hMCxuPXMscj1hO2JyZWFrfWlmKHU9PT1yKXtjPSEwLHI9cyxuPWE7YnJlYWt9dT11LnNpYmxpbmd9aWYoIWMpdGhyb3cgRXJyb3IoaSgxODkpKX19aWYobi5hbHRlcm5hdGUhPT1yKXRocm93IEVycm9yKGkoMTkwKSl9aWYobi50YWchPT0zKXRocm93IEVycm9yKGkoMTg4KSk7cmV0dXJuIG4uc3RhdGVOb2RlLmN1cnJlbnQ9PT1uP2U6dH1mdW5jdGlvbiBkKGUpe3ZhciB0PWUudGFnO2lmKHQ9PT01fHx0PT09MjZ8fHQ9PT0yN3x8dD09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe2lmKHQ9ZChlKSx0IT09bnVsbClyZXR1cm4gdDtlPWUuc2libGluZ31yZXR1cm4gbnVsbH12YXIgcD1PYmplY3QuYXNzaWduLGg9U3ltYm9sLmZvcihgcmVhY3QuZWxlbWVudGApLF89U3ltYm9sLmZvcihgcmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRgKSx2PVN5bWJvbC5mb3IoYHJlYWN0LnBvcnRhbGApLHk9U3ltYm9sLmZvcihgcmVhY3QuZnJhZ21lbnRgKSxiPVN5bWJvbC5mb3IoYHJlYWN0LnN0cmljdF9tb2RlYCkseD1TeW1ib2wuZm9yKGByZWFjdC5wcm9maWxlcmApLFM9U3ltYm9sLmZvcihgcmVhY3QuY29uc3VtZXJgKSxDPVN5bWJvbC5mb3IoYHJlYWN0LmNvbnRleHRgKSx3PVN5bWJvbC5mb3IoYHJlYWN0LmZvcndhcmRfcmVmYCksVD1TeW1ib2wuZm9yKGByZWFjdC5zdXNwZW5zZWApLEU9U3ltYm9sLmZvcihgcmVhY3Quc3VzcGVuc2VfbGlzdGApLEQ9U3ltYm9sLmZvcihgcmVhY3QubWVtb2ApLE89U3ltYm9sLmZvcihgcmVhY3QubGF6eWApLGs9U3ltYm9sLmZvcihgcmVhY3QuYWN0aXZpdHlgKSxBPVN5bWJvbC5mb3IoYHJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxgKSxqPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBNKGUpe3JldHVybiB0eXBlb2YgZSE9YG9iamVjdGB8fCFlP251bGw6KGU9aiYmZVtqXXx8ZVtgQEBpdGVyYXRvcmBdLHR5cGVvZiBlPT1gZnVuY3Rpb25gP2U6bnVsbCl9dmFyIE49U3ltYm9sLmZvcihgcmVhY3QuY2xpZW50LnJlZmVyZW5jZWApO2Z1bmN0aW9uIFAoZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZih0eXBlb2YgZT09YGZ1bmN0aW9uYClyZXR1cm4gZS4kJHR5cGVvZj09PU4/bnVsbDplLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIHk6cmV0dXJuYEZyYWdtZW50YDtjYXNlIHg6cmV0dXJuYFByb2ZpbGVyYDtjYXNlIGI6cmV0dXJuYFN0cmljdE1vZGVgO2Nhc2UgVDpyZXR1cm5gU3VzcGVuc2VgO2Nhc2UgRTpyZXR1cm5gU3VzcGVuc2VMaXN0YDtjYXNlIGs6cmV0dXJuYEFjdGl2aXR5YH1pZih0eXBlb2YgZT09YG9iamVjdGApc3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgdjpyZXR1cm5gUG9ydGFsYDtjYXNlIEM6cmV0dXJuIGUuZGlzcGxheU5hbWV8fGBDb250ZXh0YDtjYXNlIFM6cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fGBDb250ZXh0YCkrYC5Db25zdW1lcmA7Y2FzZSB3OnZhciB0PWUucmVuZGVyO3JldHVybiBlPWUuZGlzcGxheU5hbWUsZXx8PShlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8YGAsZT09PWBgP2BGb3J3YXJkUmVmYDpgRm9yd2FyZFJlZihgK2UrYClgKSxlO2Nhc2UgRDpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQ9PT1udWxsP1AoZS50eXBlKXx8YE1lbW9gOnQ7Y2FzZSBPOnQ9ZS5fcGF5bG9hZCxlPWUuX2luaXQ7dHJ5e3JldHVybiBQKGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9dmFyIEY9QXJyYXkuaXNBcnJheSxJPW4uX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLEw9ci5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsUj17cGVuZGluZzohMSxkYXRhOm51bGwsbWV0aG9kOm51bGwsYWN0aW9uOm51bGx9LHo9W10sQj0tMTtmdW5jdGlvbiBWKGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIGVlKGUpezA+Qnx8KGUuY3VycmVudD16W0JdLHpbQl09bnVsbCxCLS0pfWZ1bmN0aW9uIEgoZSx0KXtCKysseltCXT1lLmN1cnJlbnQsZS5jdXJyZW50PXR9dmFyIFU9VihudWxsKSxXPVYobnVsbCksRz1WKG51bGwpLHRlPVYobnVsbCk7ZnVuY3Rpb24gbmUoZSx0KXtzd2l0Y2goSChHLHQpLEgoVyxlKSxIKFUsbnVsbCksdC5ub2RlVHlwZSl7Y2FzZSA5OmNhc2UgMTE6ZT0oZT10LmRvY3VtZW50RWxlbWVudCkmJihlPWUubmFtZXNwYWNlVVJJKT9HZChlKTowO2JyZWFrO2RlZmF1bHQ6aWYoZT10LnRhZ05hbWUsdD10Lm5hbWVzcGFjZVVSSSl0PUdkKHQpLGU9S2QodCxlKTtlbHNlIHN3aXRjaChlKXtjYXNlYHN2Z2A6ZT0xO2JyZWFrO2Nhc2VgbWF0aGA6ZT0yO2JyZWFrO2RlZmF1bHQ6ZT0wfX1lZShVKSxIKFUsZSl9ZnVuY3Rpb24gcmUoKXtlZShVKSxlZShXKSxlZShHKX1mdW5jdGlvbiBpZShlKXtlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZIKHRlLGUpO3ZhciB0PVUuY3VycmVudCxuPUtkKHQsZS50eXBlKTt0IT09biYmKEgoVyxlKSxIKFUsbikpfWZ1bmN0aW9uIGFlKGUpe1cuY3VycmVudD09PWUmJihlZShVKSxlZShXKSksdGUuY3VycmVudD09PWUmJihlZSh0ZSksdHAuX2N1cnJlbnRWYWx1ZT1SKX12YXIgSyxvZTtmdW5jdGlvbiBzZShlKXtpZihLPT09dm9pZCAwKXRyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGUpe3ZhciB0PWUuc3RhY2sudHJpbSgpLm1hdGNoKC9cbiggKihhdCApPykvKTtLPXQmJnRbMV18fGBgLG9lPS0xPGUuc3RhY2suaW5kZXhPZihgCiAgICBhdGApP2AgKDxhbm9ueW1vdXM+KWA6LTE8ZS5zdGFjay5pbmRleE9mKGBAYCk/YEB1bmtub3duOjA6MGA6YGB9cmV0dXJuYApgK0srZStvZX12YXIgY2U9ITE7ZnVuY3Rpb24gbGUoZSx0KXtpZighZXx8Y2UpcmV0dXJuYGA7Y2U9ITA7dmFyIG49RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dm9pZCAwO3RyeXt2YXIgcj17RGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OmZ1bmN0aW9uKCl7dHJ5e2lmKHQpe3ZhciBuPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX07aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGBwcm9wc2Ase3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PWBvYmplY3RgJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KG4sW10pfWNhdGNoKGUpe3ZhciByPWV9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSxuKX1lbHNle3RyeXtuLmNhbGwoKX1jYXRjaChlKXtyPWV9ZS5jYWxsKG4ucHJvdG90eXBlKX19ZWxzZXt0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChlKXtyPWV9KG49ZSgpKSYmdHlwZW9mIG4uY2F0Y2g9PWBmdW5jdGlvbmAmJm4uY2F0Y2goZnVuY3Rpb24oKXt9KX19Y2F0Y2goZSl7aWYoZSYmciYmdHlwZW9mIGUuc3RhY2s9PWBzdHJpbmdgKXJldHVybltlLnN0YWNrLHIuc3RhY2tdfXJldHVybltudWxsLG51bGxdfX07ci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWU9YERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdGA7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxgbmFtZWApO2kmJmkuY29uZmlndXJhYmxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsYG5hbWVgLHt2YWx1ZTpgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290YH0pO3ZhciBhPXIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksbz1hWzBdLHM9YVsxXTtpZihvJiZzKXt2YXIgYz1vLnNwbGl0KGAKYCksbD1zLnNwbGl0KGAKYCk7Zm9yKGk9cj0wO3I8Yy5sZW5ndGgmJiFjW3JdLmluY2x1ZGVzKGBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RgKTspcisrO2Zvcig7aTxsLmxlbmd0aCYmIWxbaV0uaW5jbHVkZXMoYERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdGApOylpKys7aWYocj09PWMubGVuZ3RofHxpPT09bC5sZW5ndGgpZm9yKHI9Yy5sZW5ndGgtMSxpPWwubGVuZ3RoLTE7MTw9ciYmMDw9aSYmY1tyXSE9PWxbaV07KWktLTtmb3IoOzE8PXImJjA8PWk7ci0tLGktLSlpZihjW3JdIT09bFtpXSl7aWYociE9PTF8fGkhPT0xKWRvIGlmKHItLSxpLS0sMD5pfHxjW3JdIT09bFtpXSl7dmFyIHU9YApgK2Nbcl0ucmVwbGFjZShgIGF0IG5ldyBgLGAgYXQgYCk7cmV0dXJuIGUuZGlzcGxheU5hbWUmJnUuaW5jbHVkZXMoYDxhbm9ueW1vdXM+YCkmJih1PXUucmVwbGFjZShgPGFub255bW91cz5gLGUuZGlzcGxheU5hbWUpKSx1fXdoaWxlKDE8PXImJjA8PWkpO2JyZWFrfX19ZmluYWxseXtjZT0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1ufXJldHVybihuPWU/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOmBgKT9zZShuKTpgYH1mdW5jdGlvbiB1ZShlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTpyZXR1cm4gc2UoZS50eXBlKTtjYXNlIDE2OnJldHVybiBzZShgTGF6eWApO2Nhc2UgMTM6cmV0dXJuIGUuY2hpbGQhPT10JiZ0IT09bnVsbD9zZShgU3VzcGVuc2UgRmFsbGJhY2tgKTpzZShgU3VzcGVuc2VgKTtjYXNlIDE5OnJldHVybiBzZShgU3VzcGVuc2VMaXN0YCk7Y2FzZSAwOmNhc2UgMTU6cmV0dXJuIGxlKGUudHlwZSwhMSk7Y2FzZSAxMTpyZXR1cm4gbGUoZS50eXBlLnJlbmRlciwhMSk7Y2FzZSAxOnJldHVybiBsZShlLnR5cGUsITApO2Nhc2UgMzE6cmV0dXJuIHNlKGBBY3Rpdml0eWApO2RlZmF1bHQ6cmV0dXJuYGB9fWZ1bmN0aW9uIGRlKGUpe3RyeXt2YXIgdD1gYCxuPW51bGw7ZG8gdCs9dWUoZSxuKSxuPWUsZT1lLnJldHVybjt3aGlsZShlKTtyZXR1cm4gdH1jYXRjaChlKXtyZXR1cm5gCkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IGArZS5tZXNzYWdlK2AKYCtlLnN0YWNrfX12YXIgZmU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwZT10LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssbWU9dC51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxoZT10LnVuc3RhYmxlX3Nob3VsZFlpZWxkLGdlPXQudW5zdGFibGVfcmVxdWVzdFBhaW50LF9lPXQudW5zdGFibGVfbm93LHZlPXQudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwseWU9dC51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxiZT10LnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LHhlPXQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksU2U9dC51bnN0YWJsZV9Mb3dQcmlvcml0eSxDZT10LnVuc3RhYmxlX0lkbGVQcmlvcml0eSx3ZT10LmxvZyxUZT10LnVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlLEVlPW51bGwsRGU9bnVsbDtmdW5jdGlvbiBPZShlKXtpZih0eXBlb2Ygd2U9PWBmdW5jdGlvbmAmJlRlKGUpLERlJiZ0eXBlb2YgRGUuc2V0U3RyaWN0TW9kZT09YGZ1bmN0aW9uYCl0cnl7RGUuc2V0U3RyaWN0TW9kZShFZSxlKX1jYXRjaHt9fXZhciBrZT1NYXRoLmNsejMyP01hdGguY2x6MzI6TWUsQWU9TWF0aC5sb2csamU9TWF0aC5MTjI7ZnVuY3Rpb24gTWUoZSl7cmV0dXJuIGU+Pj49MCxlPT09MD8zMjozMS0oQWUoZSkvamV8MCl8MH12YXIgTmU9MjU2LFBlPTI2MjE0NCxGZT00MTk0MzA0O2Z1bmN0aW9uIEllKGUpe3ZhciB0PWUmNDI7aWYodCE9PTApcmV0dXJuIHQ7c3dpdGNoKGUmLWUpe2Nhc2UgMTpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiA0O2Nhc2UgODpyZXR1cm4gODtjYXNlIDE2OnJldHVybiAxNjtjYXNlIDMyOnJldHVybiAzMjtjYXNlIDY0OnJldHVybiA2NDtjYXNlIDEyODpyZXR1cm4gMTI4O2Nhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpyZXR1cm4gZSYyNjE4ODg7Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gZSYzOTMyMTYwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOnJldHVybiBlJjYyOTE0NTYwO2Nhc2UgNjcxMDg4NjQ6cmV0dXJuIDY3MTA4ODY0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBMZShlLHQsbil7dmFyIHI9ZS5wZW5kaW5nTGFuZXM7aWYocj09PTApcmV0dXJuIDA7dmFyIGk9MCxhPWUuc3VzcGVuZGVkTGFuZXMsbz1lLnBpbmdlZExhbmVzO2U9ZS53YXJtTGFuZXM7dmFyIHM9ciYxMzQyMTc3Mjc7cmV0dXJuIHM9PT0wPyhzPXImfmEscz09PTA/bz09PTA/bnx8KG49ciZ+ZSxuIT09MCYmKGk9SWUobikpKTppPUllKG8pOmk9SWUocykpOihyPXMmfmEscj09PTA/KG8mPXMsbz09PTA/bnx8KG49cyZ+ZSxuIT09MCYmKGk9SWUobikpKTppPUllKG8pKTppPUllKHIpKSxpPT09MD8wOnQhPT0wJiZ0IT09aSYmKHQmYSk9PT0wJiYoYT1pJi1pLG49dCYtdCxhPj1ufHxhPT09MzImJm4mNDE5NDA0OCk/dDppfWZ1bmN0aW9uIFJlKGUsdCl7cmV0dXJuKGUucGVuZGluZ0xhbmVzJn4oZS5zdXNwZW5kZWRMYW5lcyZ+ZS5waW5nZWRMYW5lcykmdCk9PT0wfWZ1bmN0aW9uIHplKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgODpjYXNlIDY0OnJldHVybiB0KzI1MDtjYXNlIDE2OmNhc2UgMzI6Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIHQrNWUzO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOnJldHVybi0xO2Nhc2UgNjcxMDg4NjQ6Y2FzZSAxMzQyMTc3Mjg6Y2FzZSAyNjg0MzU0NTY6Y2FzZSA1MzY4NzA5MTI6Y2FzZSAxMDczNzQxODI0OnJldHVybi0xO2RlZmF1bHQ6cmV0dXJuLTF9fWZ1bmN0aW9uIEJlKCl7dmFyIGU9RmU7cmV0dXJuIEZlPDw9MSwhKEZlJjYyOTE0NTYwKSYmKEZlPTQxOTQzMDQpLGV9ZnVuY3Rpb24gVmUoZSl7Zm9yKHZhciB0PVtdLG49MDszMT5uO24rKyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gSGUoZSx0KXtlLnBlbmRpbmdMYW5lc3w9dCx0IT09MjY4NDM1NDU2JiYoZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLndhcm1MYW5lcz0wKX1mdW5jdGlvbiBVZShlLHQsbixyLGksYSl7dmFyIG89ZS5wZW5kaW5nTGFuZXM7ZS5wZW5kaW5nTGFuZXM9bixlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUud2FybUxhbmVzPTAsZS5leHBpcmVkTGFuZXMmPW4sZS5lbnRhbmdsZWRMYW5lcyY9bixlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJj1uLGUuc2hlbGxTdXNwZW5kQ291bnRlcj0wO3ZhciBzPWUuZW50YW5nbGVtZW50cyxjPWUuZXhwaXJhdGlvblRpbWVzLGw9ZS5oaWRkZW5VcGRhdGVzO2ZvcihuPW8mfm47MDxuOyl7dmFyIHU9MzEta2UobiksZD0xPDx1O3NbdV09MCxjW3VdPS0xO3ZhciBmPWxbdV07aWYoZiE9PW51bGwpZm9yKGxbdV09bnVsbCx1PTA7dTxmLmxlbmd0aDt1Kyspe3ZhciBwPWZbdV07cCE9PW51bGwmJihwLmxhbmUmPS01MzY4NzA5MTMpfW4mPX5kfXIhPT0wJiZXZShlLHIsMCksYSE9PTAmJmk9PT0wJiZlLnRhZyE9PTAmJihlLnN1c3BlbmRlZExhbmVzfD1hJn4obyZ+dCkpfWZ1bmN0aW9uIFdlKGUsdCxuKXtlLnBlbmRpbmdMYW5lc3w9dCxlLnN1c3BlbmRlZExhbmVzJj1+dDt2YXIgcj0zMS1rZSh0KTtlLmVudGFuZ2xlZExhbmVzfD10LGUuZW50YW5nbGVtZW50c1tyXT1lLmVudGFuZ2xlbWVudHNbcl18MTA3Mzc0MTgyNHxuJjI2MTkzMH1mdW5jdGlvbiBHZShlLHQpe3ZhciBuPWUuZW50YW5nbGVkTGFuZXN8PXQ7Zm9yKGU9ZS5lbnRhbmdsZW1lbnRzO247KXt2YXIgcj0zMS1rZShuKSxpPTE8PHI7aSZ0fGVbcl0mdCYmKGVbcl18PXQpLG4mPX5pfX1mdW5jdGlvbiBLZShlLHQpe3ZhciBuPXQmLXQ7cmV0dXJuIG49biY0Mj8xOnFlKG4pLChuJihlLnN1c3BlbmRlZExhbmVzfHQpKT09PTA/bjowfWZ1bmN0aW9uIHFlKGUpe3N3aXRjaChlKXtjYXNlIDI6ZT0xO2JyZWFrO2Nhc2UgODplPTQ7YnJlYWs7Y2FzZSAzMjplPTE2O2JyZWFrO2Nhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOmNhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmU9MTI4O2JyZWFrO2Nhc2UgMjY4NDM1NDU2OmU9MTM0MjE3NzI4O2JyZWFrO2RlZmF1bHQ6ZT0wfXJldHVybiBlfWZ1bmN0aW9uIEplKGUpe3JldHVybiBlJj0tZSwyPGU/ODxlP2UmMTM0MjE3NzI3PzMyOjI2ODQzNTQ1Njo4OjJ9ZnVuY3Rpb24gWWUoKXt2YXIgZT1MLnA7cmV0dXJuIGU9PT0wPyhlPXdpbmRvdy5ldmVudCxlPT09dm9pZCAwPzMyOl9wKGUudHlwZSkpOmV9ZnVuY3Rpb24gWGUoZSx0KXt2YXIgbj1MLnA7dHJ5e3JldHVybiBMLnA9ZSx0KCl9ZmluYWxseXtMLnA9bn19dmFyIFplPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFFlPWBfX3JlYWN0RmliZXIkYCtaZSwkZT1gX19yZWFjdFByb3BzJGArWmUsZXQ9YF9fcmVhY3RDb250YWluZXIkYCtaZSx0dD1gX19yZWFjdEV2ZW50cyRgK1plLG50PWBfX3JlYWN0TGlzdGVuZXJzJGArWmUscnQ9YF9fcmVhY3RIYW5kbGVzJGArWmUsaXQ9YF9fcmVhY3RSZXNvdXJjZXMkYCtaZSxhdD1gX19yZWFjdE1hcmtlciRgK1plO2Z1bmN0aW9uIG90KGUpe2RlbGV0ZSBlW1FlXSxkZWxldGUgZVskZV0sZGVsZXRlIGVbdHRdLGRlbGV0ZSBlW250XSxkZWxldGUgZVtydF19ZnVuY3Rpb24gc3QoZSl7dmFyIHQ9ZVtRZV07aWYodClyZXR1cm4gdDtmb3IodmFyIG49ZS5wYXJlbnROb2RlO247KXtpZih0PW5bZXRdfHxuW1FlXSl7aWYobj10LmFsdGVybmF0ZSx0LmNoaWxkIT09bnVsbHx8biE9PW51bGwmJm4uY2hpbGQhPT1udWxsKWZvcihlPW1mKGUpO2UhPT1udWxsOyl7aWYobj1lW1FlXSlyZXR1cm4gbjtlPW1mKGUpfXJldHVybiB0fWU9bixuPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBjdChlKXtpZihlPWVbUWVdfHxlW2V0XSl7dmFyIHQ9ZS50YWc7aWYodD09PTV8fHQ9PT02fHx0PT09MTN8fHQ9PT0zMXx8dD09PTI2fHx0PT09Mjd8fHQ9PT0zKXJldHVybiBlfXJldHVybiBudWxsfWZ1bmN0aW9uIGx0KGUpe3ZhciB0PWUudGFnO2lmKHQ9PT01fHx0PT09MjZ8fHQ9PT0yN3x8dD09PTYpcmV0dXJuIGUuc3RhdGVOb2RlO3Rocm93IEVycm9yKGkoMzMpKX1mdW5jdGlvbiB1dChlKXt2YXIgdD1lW2l0XTtyZXR1cm4gdHx8PWVbaXRdPXtob2lzdGFibGVTdHlsZXM6bmV3IE1hcCxob2lzdGFibGVTY3JpcHRzOm5ldyBNYXB9LHR9ZnVuY3Rpb24gZHQoZSl7ZVthdF09ITB9dmFyIGZ0PW5ldyBTZXQscHQ9e307ZnVuY3Rpb24gbXQoZSx0KXtodChlLHQpLGh0KGUrYENhcHR1cmVgLHQpfWZ1bmN0aW9uIGh0KGUsdCl7Zm9yKHB0W2VdPXQsZT0wO2U8dC5sZW5ndGg7ZSsrKWZ0LmFkZCh0W2VdKX12YXIgZ3Q9UmVnRXhwKGBeWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVs6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSokYCksX3Q9e30sdnQ9e307ZnVuY3Rpb24geXQoZSl7cmV0dXJuIGZlLmNhbGwodnQsZSk/ITA6ZmUuY2FsbChfdCxlKT8hMTpndC50ZXN0KGUpP3Z0W2VdPSEwOihfdFtlXT0hMCwhMSl9ZnVuY3Rpb24gYnQoZSx0LG4pe2lmKHl0KHQpKWlmKG49PT1udWxsKWUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7c3dpdGNoKHR5cGVvZiBuKXtjYXNlYHVuZGVmaW5lZGA6Y2FzZWBmdW5jdGlvbmA6Y2FzZWBzeW1ib2xgOmUucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybjtjYXNlYGJvb2xlYW5gOnZhciByPXQudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpO2lmKHIhPT1gZGF0YS1gJiZyIT09YGFyaWEtYCl7ZS5yZW1vdmVBdHRyaWJ1dGUodCk7cmV0dXJufX1lLnNldEF0dHJpYnV0ZSh0LGBgK24pfX1mdW5jdGlvbiB4dChlLHQsbil7aWYobj09PW51bGwpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtzd2l0Y2godHlwZW9mIG4pe2Nhc2VgdW5kZWZpbmVkYDpjYXNlYGZ1bmN0aW9uYDpjYXNlYHN5bWJvbGA6Y2FzZWBib29sZWFuYDplLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGUodCxgYCtuKX19ZnVuY3Rpb24gU3QoZSx0LG4scil7aWYocj09PW51bGwpZS5yZW1vdmVBdHRyaWJ1dGUobik7ZWxzZXtzd2l0Y2godHlwZW9mIHIpe2Nhc2VgdW5kZWZpbmVkYDpjYXNlYGZ1bmN0aW9uYDpjYXNlYHN5bWJvbGA6Y2FzZWBib29sZWFuYDplLnJlbW92ZUF0dHJpYnV0ZShuKTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGVOUyh0LG4sYGArcil9fWZ1bmN0aW9uIEN0KGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZWBiaWdpbnRgOmNhc2VgYm9vbGVhbmA6Y2FzZWBudW1iZXJgOmNhc2Vgc3RyaW5nYDpjYXNlYHVuZGVmaW5lZGA6cmV0dXJuIGU7Y2FzZWBvYmplY3RgOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuYGB9fWZ1bmN0aW9uIHd0KGUpe3ZhciB0PWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmZS50b0xvd2VyQ2FzZSgpPT09YGlucHV0YCYmKHQ9PT1gY2hlY2tib3hgfHx0PT09YHJhZGlvYCl9ZnVuY3Rpb24gVHQoZSx0LG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsdCk7aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnIhPT12b2lkIDAmJnR5cGVvZiByLmdldD09YGZ1bmN0aW9uYCYmdHlwZW9mIHIuc2V0PT1gZnVuY3Rpb25gKXt2YXIgaT1yLmdldCxhPXIuc2V0O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe249YGArZSxhLmNhbGwodGhpcyxlKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOnIuZW51bWVyYWJsZX0pLHtnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBufSxzZXRWYWx1ZTpmdW5jdGlvbihlKXtuPWBgK2V9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2UuX3ZhbHVlVHJhY2tlcj1udWxsLGRlbGV0ZSBlW3RdfX19fWZ1bmN0aW9uIEV0KGUpe2lmKCFlLl92YWx1ZVRyYWNrZXIpe3ZhciB0PXd0KGUpP2BjaGVja2VkYDpgdmFsdWVgO2UuX3ZhbHVlVHJhY2tlcj1UdChlLHQsYGArZVt0XSl9fWZ1bmN0aW9uIER0KGUpe2lmKCFlKXJldHVybiExO3ZhciB0PWUuX3ZhbHVlVHJhY2tlcjtpZighdClyZXR1cm4hMDt2YXIgbj10LmdldFZhbHVlKCkscj1gYDtyZXR1cm4gZSYmKHI9d3QoZSk/ZS5jaGVja2VkP2B0cnVlYDpgZmFsc2VgOmUudmFsdWUpLGU9cixlPT09bj8hMToodC5zZXRWYWx1ZShlKSwhMCl9ZnVuY3Rpb24gT3QoZSl7aWYoZXx8PXR5cGVvZiBkb2N1bWVudDxgdWA/ZG9jdW1lbnQ6dm9pZCAwLGU9PT12b2lkIDApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX12YXIga3Q9L1tcbiJcXF0vZztmdW5jdGlvbiBBdChlKXtyZXR1cm4gZS5yZXBsYWNlKGt0LGZ1bmN0aW9uKGUpe3JldHVybmBcXGArZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KStgIGB9KX1mdW5jdGlvbiBqdChlLHQsbixyLGksYSxvLHMpe2UubmFtZT1gYCxvIT1udWxsJiZ0eXBlb2YgbyE9YGZ1bmN0aW9uYCYmdHlwZW9mIG8hPWBzeW1ib2xgJiZ0eXBlb2YgbyE9YGJvb2xlYW5gP2UudHlwZT1vOmUucmVtb3ZlQXR0cmlidXRlKGB0eXBlYCksdD09bnVsbD9vIT09YHN1Ym1pdGAmJm8hPT1gcmVzZXRgfHxlLnJlbW92ZUF0dHJpYnV0ZShgdmFsdWVgKTpvPT09YG51bWJlcmA/KHQ9PT0wJiZlLnZhbHVlPT09YGB8fGUudmFsdWUhPXQpJiYoZS52YWx1ZT1gYCtDdCh0KSk6ZS52YWx1ZSE9PWBgK0N0KHQpJiYoZS52YWx1ZT1gYCtDdCh0KSksdD09bnVsbD9uPT1udWxsP3IhPW51bGwmJmUucmVtb3ZlQXR0cmlidXRlKGB2YWx1ZWApOk50KGUsbyxDdChuKSk6TnQoZSxvLEN0KHQpKSxpPT1udWxsJiZhIT1udWxsJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIWEpLGkhPW51bGwmJihlLmNoZWNrZWQ9aSYmdHlwZW9mIGkhPWBmdW5jdGlvbmAmJnR5cGVvZiBpIT1gc3ltYm9sYCkscyE9bnVsbCYmdHlwZW9mIHMhPWBmdW5jdGlvbmAmJnR5cGVvZiBzIT1gc3ltYm9sYCYmdHlwZW9mIHMhPWBib29sZWFuYD9lLm5hbWU9YGArQ3Qocyk6ZS5yZW1vdmVBdHRyaWJ1dGUoYG5hbWVgKX1mdW5jdGlvbiBNdChlLHQsbixyLGksYSxvLHMpe2lmKGEhPW51bGwmJnR5cGVvZiBhIT1gZnVuY3Rpb25gJiZ0eXBlb2YgYSE9YHN5bWJvbGAmJnR5cGVvZiBhIT1gYm9vbGVhbmAmJihlLnR5cGU9YSksdCE9bnVsbHx8biE9bnVsbCl7aWYoIShhIT09YHN1Ym1pdGAmJmEhPT1gcmVzZXRgfHx0IT1udWxsKSl7RXQoZSk7cmV0dXJufW49bj09bnVsbD9gYDpgYCtDdChuKSx0PXQ9PW51bGw/bjpgYCtDdCh0KSxzfHx0PT09ZS52YWx1ZXx8KGUudmFsdWU9dCksZS5kZWZhdWx0VmFsdWU9dH1yPz89aSxyPXR5cGVvZiByIT1gZnVuY3Rpb25gJiZ0eXBlb2YgciE9YHN5bWJvbGAmJiEhcixlLmNoZWNrZWQ9cz9lLmNoZWNrZWQ6ISFyLGUuZGVmYXVsdENoZWNrZWQ9ISFyLG8hPW51bGwmJnR5cGVvZiBvIT1gZnVuY3Rpb25gJiZ0eXBlb2YgbyE9YHN5bWJvbGAmJnR5cGVvZiBvIT1gYm9vbGVhbmAmJihlLm5hbWU9byksRXQoZSl9ZnVuY3Rpb24gTnQoZSx0LG4pe3Q9PT1gbnVtYmVyYCYmT3QoZS5vd25lckRvY3VtZW50KT09PWV8fGUuZGVmYXVsdFZhbHVlPT09YGArbnx8KGUuZGVmYXVsdFZhbHVlPWBgK24pfWZ1bmN0aW9uIFB0KGUsdCxuLHIpe2lmKGU9ZS5vcHRpb25zLHQpe3Q9e307Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspdFtgJGArbltpXV09ITA7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpPXQuaGFzT3duUHJvcGVydHkoYCRgK2Vbbl0udmFsdWUpLGVbbl0uc2VsZWN0ZWQhPT1pJiYoZVtuXS5zZWxlY3RlZD1pKSxpJiZyJiYoZVtuXS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Zm9yKG49YGArQ3QobiksdD1udWxsLGk9MDtpPGUubGVuZ3RoO2krKyl7aWYoZVtpXS52YWx1ZT09PW4pe2VbaV0uc2VsZWN0ZWQ9ITAsciYmKGVbaV0uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59dCE9PW51bGx8fGVbaV0uZGlzYWJsZWR8fCh0PWVbaV0pfXQhPT1udWxsJiYodC5zZWxlY3RlZD0hMCl9fWZ1bmN0aW9uIEZ0KGUsdCxuKXtpZih0IT1udWxsJiYodD1gYCtDdCh0KSx0IT09ZS52YWx1ZSYmKGUudmFsdWU9dCksbj09bnVsbCkpe2UuZGVmYXVsdFZhbHVlIT09dCYmKGUuZGVmYXVsdFZhbHVlPXQpO3JldHVybn1lLmRlZmF1bHRWYWx1ZT1uPT1udWxsP2BgOmBgK0N0KG4pfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe2lmKHQ9PW51bGwpe2lmKHIhPW51bGwpe2lmKG4hPW51bGwpdGhyb3cgRXJyb3IoaSg5MikpO2lmKEYocikpe2lmKDE8ci5sZW5ndGgpdGhyb3cgRXJyb3IoaSg5MykpO3I9clswXX1uPXJ9bj8/PWBgLHQ9bn1uPUN0KHQpLGUuZGVmYXVsdFZhbHVlPW4scj1lLnRleHRDb250ZW50LHI9PT1uJiZyIT09YGAmJnIhPT1udWxsJiYoZS52YWx1ZT1yKSxFdChlKX1mdW5jdGlvbiBMdChlLHQpe2lmKHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJm4ubm9kZVR5cGU9PT0zKXtuLm5vZGVWYWx1ZT10O3JldHVybn19ZS50ZXh0Q29udGVudD10fXZhciBSdD1uZXcgU2V0KGBhbmltYXRpb25JdGVyYXRpb25Db3VudCBhc3BlY3RSYXRpbyBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlV2lkdGggYm94RmxleCBib3hGbGV4R3JvdXAgYm94T3JkaW5hbEdyb3VwIGNvbHVtbkNvdW50IGNvbHVtbnMgZmxleCBmbGV4R3JvdyBmbGV4UG9zaXRpdmUgZmxleFNocmluayBmbGV4TmVnYXRpdmUgZmxleE9yZGVyIGdyaWRBcmVhIGdyaWRSb3cgZ3JpZFJvd0VuZCBncmlkUm93U3BhbiBncmlkUm93U3RhcnQgZ3JpZENvbHVtbiBncmlkQ29sdW1uRW5kIGdyaWRDb2x1bW5TcGFuIGdyaWRDb2x1bW5TdGFydCBmb250V2VpZ2h0IGxpbmVDbGFtcCBsaW5lSGVpZ2h0IG9wYWNpdHkgb3JkZXIgb3JwaGFucyBzY2FsZSB0YWJTaXplIHdpZG93cyB6SW5kZXggem9vbSBmaWxsT3BhY2l0eSBmbG9vZE9wYWNpdHkgc3RvcE9wYWNpdHkgc3Ryb2tlRGFzaGFycmF5IHN0cm9rZURhc2hvZmZzZXQgc3Ryb2tlTWl0ZXJsaW1pdCBzdHJva2VPcGFjaXR5IHN0cm9rZVdpZHRoIE1vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IE1vekJveEZsZXggTW96Qm94RmxleEdyb3VwIE1vekxpbmVDbGFtcCBtc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IG1zRmxleCBtc1pvb20gbXNGbGV4R3JvdyBtc0ZsZXhOZWdhdGl2ZSBtc0ZsZXhPcmRlciBtc0ZsZXhQb3NpdGl2ZSBtc0ZsZXhTaHJpbmsgbXNHcmlkQ29sdW1uIG1zR3JpZENvbHVtblNwYW4gbXNHcmlkUm93IG1zR3JpZFJvd1NwYW4gV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgV2Via2l0Qm94RmxleCBXZWJLaXRCb3hGbGV4R3JvdXAgV2Via2l0Qm94T3JkaW5hbEdyb3VwIFdlYmtpdENvbHVtbkNvdW50IFdlYmtpdENvbHVtbnMgV2Via2l0RmxleCBXZWJraXRGbGV4R3JvdyBXZWJraXRGbGV4UG9zaXRpdmUgV2Via2l0RmxleFNocmluayBXZWJraXRMaW5lQ2xhbXBgLnNwbGl0KGAgYCkpO2Z1bmN0aW9uIHp0KGUsdCxuKXt2YXIgcj10LmluZGV4T2YoYC0tYCk9PT0wO249PW51bGx8fHR5cGVvZiBuPT1gYm9vbGVhbmB8fG49PT1gYD9yP2Uuc2V0UHJvcGVydHkodCxgYCk6dD09PWBmbG9hdGA/ZS5jc3NGbG9hdD1gYDplW3RdPWBgOnI/ZS5zZXRQcm9wZXJ0eSh0LG4pOnR5cGVvZiBuIT1gbnVtYmVyYHx8bj09PTB8fFJ0Lmhhcyh0KT90PT09YGZsb2F0YD9lLmNzc0Zsb2F0PW46ZVt0XT0oYGArbikudHJpbSgpOmVbdF09bitgcHhgfWZ1bmN0aW9uIEJ0KGUsdCxuKXtpZih0IT1udWxsJiZ0eXBlb2YgdCE9YG9iamVjdGApdGhyb3cgRXJyb3IoaSg2MikpO2lmKGU9ZS5zdHlsZSxuIT1udWxsKXtmb3IodmFyIHIgaW4gbikhbi5oYXNPd25Qcm9wZXJ0eShyKXx8dCE9bnVsbCYmdC5oYXNPd25Qcm9wZXJ0eShyKXx8KHIuaW5kZXhPZihgLS1gKT09PTA/ZS5zZXRQcm9wZXJ0eShyLGBgKTpyPT09YGZsb2F0YD9lLmNzc0Zsb2F0PWBgOmVbcl09YGApO2Zvcih2YXIgYSBpbiB0KXI9dFthXSx0Lmhhc093blByb3BlcnR5KGEpJiZuW2FdIT09ciYmenQoZSxhLHIpfWVsc2UgZm9yKHZhciBvIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShvKSYmenQoZSxvLHRbb10pfWZ1bmN0aW9uIFZ0KGUpe2lmKGUuaW5kZXhPZihgLWApPT09LTEpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2VgYW5ub3RhdGlvbi14bWxgOmNhc2VgY29sb3ItcHJvZmlsZWA6Y2FzZWBmb250LWZhY2VgOmNhc2VgZm9udC1mYWNlLXNyY2A6Y2FzZWBmb250LWZhY2UtdXJpYDpjYXNlYGZvbnQtZmFjZS1mb3JtYXRgOmNhc2VgZm9udC1mYWNlLW5hbWVgOmNhc2VgbWlzc2luZy1nbHlwaGA6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19dmFyIEh0PW5ldyBNYXAoW1tgYWNjZXB0Q2hhcnNldGAsYGFjY2VwdC1jaGFyc2V0YF0sW2BodG1sRm9yYCxgZm9yYF0sW2BodHRwRXF1aXZgLGBodHRwLWVxdWl2YF0sW2Bjcm9zc09yaWdpbmAsYGNyb3Nzb3JpZ2luYF0sW2BhY2NlbnRIZWlnaHRgLGBhY2NlbnQtaGVpZ2h0YF0sW2BhbGlnbm1lbnRCYXNlbGluZWAsYGFsaWdubWVudC1iYXNlbGluZWBdLFtgYXJhYmljRm9ybWAsYGFyYWJpYy1mb3JtYF0sW2BiYXNlbGluZVNoaWZ0YCxgYmFzZWxpbmUtc2hpZnRgXSxbYGNhcEhlaWdodGAsYGNhcC1oZWlnaHRgXSxbYGNsaXBQYXRoYCxgY2xpcC1wYXRoYF0sW2BjbGlwUnVsZWAsYGNsaXAtcnVsZWBdLFtgY29sb3JJbnRlcnBvbGF0aW9uYCxgY29sb3ItaW50ZXJwb2xhdGlvbmBdLFtgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc2AsYGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc2BdLFtgY29sb3JQcm9maWxlYCxgY29sb3ItcHJvZmlsZWBdLFtgY29sb3JSZW5kZXJpbmdgLGBjb2xvci1yZW5kZXJpbmdgXSxbYGRvbWluYW50QmFzZWxpbmVgLGBkb21pbmFudC1iYXNlbGluZWBdLFtgZW5hYmxlQmFja2dyb3VuZGAsYGVuYWJsZS1iYWNrZ3JvdW5kYF0sW2BmaWxsT3BhY2l0eWAsYGZpbGwtb3BhY2l0eWBdLFtgZmlsbFJ1bGVgLGBmaWxsLXJ1bGVgXSxbYGZsb29kQ29sb3JgLGBmbG9vZC1jb2xvcmBdLFtgZmxvb2RPcGFjaXR5YCxgZmxvb2Qtb3BhY2l0eWBdLFtgZm9udEZhbWlseWAsYGZvbnQtZmFtaWx5YF0sW2Bmb250U2l6ZWAsYGZvbnQtc2l6ZWBdLFtgZm9udFNpemVBZGp1c3RgLGBmb250LXNpemUtYWRqdXN0YF0sW2Bmb250U3RyZXRjaGAsYGZvbnQtc3RyZXRjaGBdLFtgZm9udFN0eWxlYCxgZm9udC1zdHlsZWBdLFtgZm9udFZhcmlhbnRgLGBmb250LXZhcmlhbnRgXSxbYGZvbnRXZWlnaHRgLGBmb250LXdlaWdodGBdLFtgZ2x5cGhOYW1lYCxgZ2x5cGgtbmFtZWBdLFtgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxgLGBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsYF0sW2BnbHlwaE9yaWVudGF0aW9uVmVydGljYWxgLGBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbGBdLFtgaG9yaXpBZHZYYCxgaG9yaXotYWR2LXhgXSxbYGhvcml6T3JpZ2luWGAsYGhvcml6LW9yaWdpbi14YF0sW2BpbWFnZVJlbmRlcmluZ2AsYGltYWdlLXJlbmRlcmluZ2BdLFtgbGV0dGVyU3BhY2luZ2AsYGxldHRlci1zcGFjaW5nYF0sW2BsaWdodGluZ0NvbG9yYCxgbGlnaHRpbmctY29sb3JgXSxbYG1hcmtlckVuZGAsYG1hcmtlci1lbmRgXSxbYG1hcmtlck1pZGAsYG1hcmtlci1taWRgXSxbYG1hcmtlclN0YXJ0YCxgbWFya2VyLXN0YXJ0YF0sW2BvdmVybGluZVBvc2l0aW9uYCxgb3ZlcmxpbmUtcG9zaXRpb25gXSxbYG92ZXJsaW5lVGhpY2tuZXNzYCxgb3ZlcmxpbmUtdGhpY2tuZXNzYF0sW2BwYWludE9yZGVyYCxgcGFpbnQtb3JkZXJgXSxbYHBhbm9zZS0xYCxgcGFub3NlLTFgXSxbYHBvaW50ZXJFdmVudHNgLGBwb2ludGVyLWV2ZW50c2BdLFtgcmVuZGVyaW5nSW50ZW50YCxgcmVuZGVyaW5nLWludGVudGBdLFtgc2hhcGVSZW5kZXJpbmdgLGBzaGFwZS1yZW5kZXJpbmdgXSxbYHN0b3BDb2xvcmAsYHN0b3AtY29sb3JgXSxbYHN0b3BPcGFjaXR5YCxgc3RvcC1vcGFjaXR5YF0sW2BzdHJpa2V0aHJvdWdoUG9zaXRpb25gLGBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uYF0sW2BzdHJpa2V0aHJvdWdoVGhpY2tuZXNzYCxgc3RyaWtldGhyb3VnaC10aGlja25lc3NgXSxbYHN0cm9rZURhc2hhcnJheWAsYHN0cm9rZS1kYXNoYXJyYXlgXSxbYHN0cm9rZURhc2hvZmZzZXRgLGBzdHJva2UtZGFzaG9mZnNldGBdLFtgc3Ryb2tlTGluZWNhcGAsYHN0cm9rZS1saW5lY2FwYF0sW2BzdHJva2VMaW5lam9pbmAsYHN0cm9rZS1saW5lam9pbmBdLFtgc3Ryb2tlTWl0ZXJsaW1pdGAsYHN0cm9rZS1taXRlcmxpbWl0YF0sW2BzdHJva2VPcGFjaXR5YCxgc3Ryb2tlLW9wYWNpdHlgXSxbYHN0cm9rZVdpZHRoYCxgc3Ryb2tlLXdpZHRoYF0sW2B0ZXh0QW5jaG9yYCxgdGV4dC1hbmNob3JgXSxbYHRleHREZWNvcmF0aW9uYCxgdGV4dC1kZWNvcmF0aW9uYF0sW2B0ZXh0UmVuZGVyaW5nYCxgdGV4dC1yZW5kZXJpbmdgXSxbYHRyYW5zZm9ybU9yaWdpbmAsYHRyYW5zZm9ybS1vcmlnaW5gXSxbYHVuZGVybGluZVBvc2l0aW9uYCxgdW5kZXJsaW5lLXBvc2l0aW9uYF0sW2B1bmRlcmxpbmVUaGlja25lc3NgLGB1bmRlcmxpbmUtdGhpY2tuZXNzYF0sW2B1bmljb2RlQmlkaWAsYHVuaWNvZGUtYmlkaWBdLFtgdW5pY29kZVJhbmdlYCxgdW5pY29kZS1yYW5nZWBdLFtgdW5pdHNQZXJFbWAsYHVuaXRzLXBlci1lbWBdLFtgdkFscGhhYmV0aWNgLGB2LWFscGhhYmV0aWNgXSxbYHZIYW5naW5nYCxgdi1oYW5naW5nYF0sW2B2SWRlb2dyYXBoaWNgLGB2LWlkZW9ncmFwaGljYF0sW2B2TWF0aGVtYXRpY2FsYCxgdi1tYXRoZW1hdGljYWxgXSxbYHZlY3RvckVmZmVjdGAsYHZlY3Rvci1lZmZlY3RgXSxbYHZlcnRBZHZZYCxgdmVydC1hZHYteWBdLFtgdmVydE9yaWdpblhgLGB2ZXJ0LW9yaWdpbi14YF0sW2B2ZXJ0T3JpZ2luWWAsYHZlcnQtb3JpZ2luLXlgXSxbYHdvcmRTcGFjaW5nYCxgd29yZC1zcGFjaW5nYF0sW2B3cml0aW5nTW9kZWAsYHdyaXRpbmctbW9kZWBdLFtgeG1sbnNYbGlua2AsYHhtbG5zOnhsaW5rYF0sW2B4SGVpZ2h0YCxgeC1oZWlnaHRgXV0pLFV0PS9eW1x1MDAwMC1cdTAwMUYgXSpqW1xyXG5cdF0qYVtcclxuXHRdKnZbXHJcblx0XSphW1xyXG5cdF0qc1tcclxuXHRdKmNbXHJcblx0XSpyW1xyXG5cdF0qaVtcclxuXHRdKnBbXHJcblx0XSp0W1xyXG5cdF0qOi9pO2Z1bmN0aW9uIFd0KGUpe3JldHVybiBVdC50ZXN0KGBgK2UpP2BqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignUmVhY3QgaGFzIGJsb2NrZWQgYSBqYXZhc2NyaXB0OiBVUkwgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLicpYDplfWZ1bmN0aW9uIEd0KCl7fXZhciBLdD1udWxsO2Z1bmN0aW9uIHF0KGUpe3JldHVybiBlPWUudGFyZ2V0fHxlLnNyY0VsZW1lbnR8fHdpbmRvdyxlLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSxlLm5vZGVUeXBlPT09Mz9lLnBhcmVudE5vZGU6ZX12YXIgSnQ9bnVsbCxZdD1udWxsO2Z1bmN0aW9uIFh0KGUpe3ZhciB0PWN0KGUpO2lmKHQmJihlPXQuc3RhdGVOb2RlKSl7dmFyIG49ZVskZV18fG51bGw7YTpzd2l0Y2goZT10LnN0YXRlTm9kZSx0LnR5cGUpe2Nhc2VgaW5wdXRgOmlmKGp0KGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmNoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZCxuLnR5cGUsbi5uYW1lKSx0PW4ubmFtZSxuLnR5cGU9PT1gcmFkaW9gJiZ0IT1udWxsKXtmb3Iobj1lO24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKGBpbnB1dFtuYW1lPSJgK0F0KGBgK3QpK2AiXVt0eXBlPSJyYWRpbyJdYCksdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBhPXJbJGVdfHxudWxsO2lmKCFhKXRocm93IEVycm9yKGkoOTApKTtqdChyLGEudmFsdWUsYS5kZWZhdWx0VmFsdWUsYS5kZWZhdWx0VmFsdWUsYS5jaGVja2VkLGEuZGVmYXVsdENoZWNrZWQsYS50eXBlLGEubmFtZSl9fWZvcih0PTA7dDxuLmxlbmd0aDt0Kyspcj1uW3RdLHIuZm9ybT09PWUuZm9ybSYmRHQocil9YnJlYWsgYTtjYXNlYHRleHRhcmVhYDpGdChlLG4udmFsdWUsbi5kZWZhdWx0VmFsdWUpO2JyZWFrIGE7Y2FzZWBzZWxlY3RgOnQ9bi52YWx1ZSx0IT1udWxsJiZQdChlLCEhbi5tdWx0aXBsZSx0LCExKX19fXZhciBadD0hMTtmdW5jdGlvbiBRdChlLHQsbil7aWYoWnQpcmV0dXJuIGUodCxuKTtadD0hMDt0cnl7cmV0dXJuIGUodCl9ZmluYWxseXtpZihadD0hMSwoSnQhPT1udWxsfHxZdCE9PW51bGwpJiYoeHUoKSxKdCYmKHQ9SnQsZT1ZdCxZdD1KdD1udWxsLFh0KHQpLGUpKSlmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKVh0KGVbdF0pfX1mdW5jdGlvbiAkdChlLHQpe3ZhciBuPWUuc3RhdGVOb2RlO2lmKG49PT1udWxsKXJldHVybiBudWxsO3ZhciByPW5bJGVdfHxudWxsO2lmKHI9PT1udWxsKXJldHVybiBudWxsO249clt0XTthOnN3aXRjaCh0KXtjYXNlYG9uQ2xpY2tgOmNhc2Vgb25DbGlja0NhcHR1cmVgOmNhc2Vgb25Eb3VibGVDbGlja2A6Y2FzZWBvbkRvdWJsZUNsaWNrQ2FwdHVyZWA6Y2FzZWBvbk1vdXNlRG93bmA6Y2FzZWBvbk1vdXNlRG93bkNhcHR1cmVgOmNhc2Vgb25Nb3VzZU1vdmVgOmNhc2Vgb25Nb3VzZU1vdmVDYXB0dXJlYDpjYXNlYG9uTW91c2VVcGA6Y2FzZWBvbk1vdXNlVXBDYXB0dXJlYDpjYXNlYG9uTW91c2VFbnRlcmA6KHI9IXIuZGlzYWJsZWQpfHwoZT1lLnR5cGUscj0hKGU9PT1gYnV0dG9uYHx8ZT09PWBpbnB1dGB8fGU9PT1gc2VsZWN0YHx8ZT09PWB0ZXh0YXJlYWApKSxlPSFyO2JyZWFrIGE7ZGVmYXVsdDplPSExfWlmKGUpcmV0dXJuIG51bGw7aWYobiYmdHlwZW9mIG4hPWBmdW5jdGlvbmApdGhyb3cgRXJyb3IoaSgyMzEsdCx0eXBlb2YgbikpO3JldHVybiBufXZhciBlbj0hKHR5cGVvZiB3aW5kb3c+YHVgfHx3aW5kb3cuZG9jdW1lbnQ9PT12b2lkIDB8fHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PT09dm9pZCAwKSx0bj0hMTtpZihlbil0cnl7dmFyIG5uPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShubixgcGFzc2l2ZWAse2dldDpmdW5jdGlvbigpe3RuPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGB0ZXN0YCxubixubiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRlc3RgLG5uLG5uKX1jYXRjaHt0bj0hMX12YXIgcm49bnVsbCxhbj1udWxsLG9uPW51bGw7ZnVuY3Rpb24gc24oKXtpZihvbilyZXR1cm4gb247dmFyIGUsdD1hbixuPXQubGVuZ3RoLHIsaT1gdmFsdWVgaW4gcm4/cm4udmFsdWU6cm4udGV4dENvbnRlbnQsYT1pLmxlbmd0aDtmb3IoZT0wO2U8biYmdFtlXT09PWlbZV07ZSsrKTt2YXIgbz1uLWU7Zm9yKHI9MTtyPD1vJiZ0W24tcl09PT1pW2Etcl07cisrKTtyZXR1cm4gb249aS5zbGljZShlLDE8cj8xLXI6dm9pZCAwKX1mdW5jdGlvbiBjbihlKXt2YXIgdD1lLmtleUNvZGU7cmV0dXJuYGNoYXJDb2RlYGluIGU/KGU9ZS5jaGFyQ29kZSxlPT09MCYmdD09PTEzJiYoZT0xMykpOmU9dCxlPT09MTAmJihlPTEzKSwzMjw9ZXx8ZT09PTEzP2U6MH1mdW5jdGlvbiBsbigpe3JldHVybiEwfWZ1bmN0aW9uIHVuKCl7cmV0dXJuITF9ZnVuY3Rpb24gZG4oZSl7ZnVuY3Rpb24gdCh0LG4scixpLGEpe2Zvcih2YXIgbyBpbiB0aGlzLl9yZWFjdE5hbWU9dCx0aGlzLl90YXJnZXRJbnN0PXIsdGhpcy50eXBlPW4sdGhpcy5uYXRpdmVFdmVudD1pLHRoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGFyZ2V0PW51bGwsZSllLmhhc093blByb3BlcnR5KG8pJiYodD1lW29dLHRoaXNbb109dD90KGkpOmlbb10pO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0oaS5kZWZhdWx0UHJldmVudGVkPT1udWxsPyExPT09aS5yZXR1cm5WYWx1ZTppLmRlZmF1bHRQcmV2ZW50ZWQpP2xuOnVuLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dW4sdGhpc31yZXR1cm4gcCh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYoZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIGUucmV0dXJuVmFsdWUhPWB1bmtub3duYCYmKGUucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWxuKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYoZS5zdG9wUHJvcGFnYXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2YgZS5jYW5jZWxCdWJibGUhPWB1bmtub3duYCYmKGUuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWxuKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OmxufSksdH12YXIgZm49e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0scG49ZG4oZm4pLG1uPXAoe30sZm4se3ZpZXc6MCxkZXRhaWw6MH0pLGhuPWRuKG1uKSxnbixfbix2bix5bj1wKHt9LG1uLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOkFuLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbGF0ZWRUYXJnZXQ9PT12b2lkIDA/ZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50OmUucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGUpe3JldHVybmBtb3ZlbWVudFhgaW4gZT9lLm1vdmVtZW50WDooZSE9PXZuJiYodm4mJmUudHlwZT09PWBtb3VzZW1vdmVgPyhnbj1lLnNjcmVlblgtdm4uc2NyZWVuWCxfbj1lLnNjcmVlblktdm4uc2NyZWVuWSk6X249Z249MCx2bj1lKSxnbil9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtyZXR1cm5gbW92ZW1lbnRZYGluIGU/ZS5tb3ZlbWVudFk6X259fSksYm49ZG4oeW4pLHhuPWRuKHAoe30seW4se2RhdGFUcmFuc2ZlcjowfSkpLFNuPWRuKHAoe30sbW4se3JlbGF0ZWRUYXJnZXQ6MH0pKSxDbj1kbihwKHt9LGZuLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSksd249ZG4ocCh7fSxmbix7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm5gY2xpcGJvYXJkRGF0YWBpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSksVG49ZG4ocCh7fSxmbix7ZGF0YTowfSkpLEVuPXtFc2M6YEVzY2FwZWAsU3BhY2ViYXI6YCBgLExlZnQ6YEFycm93TGVmdGAsVXA6YEFycm93VXBgLFJpZ2h0OmBBcnJvd1JpZ2h0YCxEb3duOmBBcnJvd0Rvd25gLERlbDpgRGVsZXRlYCxXaW46YE9TYCxNZW51OmBDb250ZXh0TWVudWAsQXBwczpgQ29udGV4dE1lbnVgLFNjcm9sbDpgU2Nyb2xsTG9ja2AsTW96UHJpbnRhYmxlS2V5OmBVbmlkZW50aWZpZWRgfSxEbj17ODpgQmFja3NwYWNlYCw5OmBUYWJgLDEyOmBDbGVhcmAsMTM6YEVudGVyYCwxNjpgU2hpZnRgLDE3OmBDb250cm9sYCwxODpgQWx0YCwxOTpgUGF1c2VgLDIwOmBDYXBzTG9ja2AsMjc6YEVzY2FwZWAsMzI6YCBgLDMzOmBQYWdlVXBgLDM0OmBQYWdlRG93bmAsMzU6YEVuZGAsMzY6YEhvbWVgLDM3OmBBcnJvd0xlZnRgLDM4OmBBcnJvd1VwYCwzOTpgQXJyb3dSaWdodGAsNDA6YEFycm93RG93bmAsNDU6YEluc2VydGAsNDY6YERlbGV0ZWAsMTEyOmBGMWAsMTEzOmBGMmAsMTE0OmBGM2AsMTE1OmBGNGAsMTE2OmBGNWAsMTE3OmBGNmAsMTE4OmBGN2AsMTE5OmBGOGAsMTIwOmBGOWAsMTIxOmBGMTBgLDEyMjpgRjExYCwxMjM6YEYxMmAsMTQ0OmBOdW1Mb2NrYCwxNDU6YFNjcm9sbExvY2tgLDIyNDpgTWV0YWB9LE9uPXtBbHQ6YGFsdEtleWAsQ29udHJvbDpgY3RybEtleWAsTWV0YTpgbWV0YUtleWAsU2hpZnQ6YHNoaWZ0S2V5YH07ZnVuY3Rpb24ga24oZSl7dmFyIHQ9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gdC5nZXRNb2RpZmllclN0YXRlP3QuZ2V0TW9kaWZpZXJTdGF0ZShlKTooZT1PbltlXSk/ISF0W2VdOiExfWZ1bmN0aW9uIEFuKCl7cmV0dXJuIGtufXZhciBqbj1kbihwKHt9LG1uLHtrZXk6ZnVuY3Rpb24oZSl7aWYoZS5rZXkpe3ZhciB0PUVuW2Uua2V5XXx8ZS5rZXk7aWYodCE9PWBVbmlkZW50aWZpZWRgKXJldHVybiB0fXJldHVybiBlLnR5cGU9PT1ga2V5cHJlc3NgPyhlPWNuKGUpLGU9PT0xMz9gRW50ZXJgOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOmUudHlwZT09PWBrZXlkb3duYHx8ZS50eXBlPT09YGtleXVwYD9EbltlLmtleUNvZGVdfHxgVW5pZGVudGlmaWVkYDpgYH0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6QW4sY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PWBrZXlwcmVzc2A/Y24oZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09YGtleWRvd25gfHxlLnR5cGU9PT1ga2V5dXBgP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09YGtleXByZXNzYD9jbihlKTplLnR5cGU9PT1ga2V5ZG93bmB8fGUudHlwZT09PWBrZXl1cGA/ZS5rZXlDb2RlOjB9fSkpLE1uPWRuKHAoe30seW4se3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSkpLE5uPWRuKHAoe30sbW4se3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTpBbn0pKSxQbj1kbihwKHt9LGZuLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pKSxGbj1kbihwKHt9LHluLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuYGRlbHRhWGBpbiBlP2UuZGVsdGFYOmB3aGVlbERlbHRhWGBpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm5gZGVsdGFZYGluIGU/ZS5kZWx0YVk6YHdoZWVsRGVsdGFZYGluIGU/LWUud2hlZWxEZWx0YVk6YHdoZWVsRGVsdGFgaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSkpLEluPWRuKHAoe30sZm4se25ld1N0YXRlOjAsb2xkU3RhdGU6MH0pKSxMbj1bOSwxMywyNywzMl0sUm49ZW4mJmBDb21wb3NpdGlvbkV2ZW50YGluIHdpbmRvdyx6bj1udWxsO2VuJiZgZG9jdW1lbnRNb2RlYGluIGRvY3VtZW50JiYoem49ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgQm49ZW4mJmBUZXh0RXZlbnRgaW4gd2luZG93JiYhem4sVm49ZW4mJighUm58fHpuJiY4PHpuJiYxMT49em4pLEhuPWAgYCxVbj0hMTtmdW5jdGlvbiBXbihlLHQpe3N3aXRjaChlKXtjYXNlYGtleXVwYDpyZXR1cm4gTG4uaW5kZXhPZih0LmtleUNvZGUpIT09LTE7Y2FzZWBrZXlkb3duYDpyZXR1cm4gdC5rZXlDb2RlIT09MjI5O2Nhc2Vga2V5cHJlc3NgOmNhc2VgbW91c2Vkb3duYDpjYXNlYGZvY3Vzb3V0YDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBHbihlKXtyZXR1cm4gZT1lLmRldGFpbCx0eXBlb2YgZT09YG9iamVjdGAmJmBkYXRhYGluIGU/ZS5kYXRhOm51bGx9dmFyIEtuPSExO2Z1bmN0aW9uIHFuKGUsdCl7c3dpdGNoKGUpe2Nhc2VgY29tcG9zaXRpb25lbmRgOnJldHVybiBHbih0KTtjYXNlYGtleXByZXNzYDpyZXR1cm4gdC53aGljaD09PTMyPyhVbj0hMCxIbik6bnVsbDtjYXNlYHRleHRJbnB1dGA6cmV0dXJuIGU9dC5kYXRhLGU9PT1IbiYmVW4/bnVsbDplO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEpuKGUsdCl7aWYoS24pcmV0dXJuIGU9PT1gY29tcG9zaXRpb25lbmRgfHwhUm4mJlduKGUsdCk/KGU9c24oKSxvbj1hbj1ybj1udWxsLEtuPSExLGUpOm51bGw7c3dpdGNoKGUpe2Nhc2VgcGFzdGVgOnJldHVybiBudWxsO2Nhc2Vga2V5cHJlc3NgOmlmKCEodC5jdHJsS2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5KXx8dC5jdHJsS2V5JiZ0LmFsdEtleSl7aWYodC5jaGFyJiYxPHQuY2hhci5sZW5ndGgpcmV0dXJuIHQuY2hhcjtpZih0LndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpfXJldHVybiBudWxsO2Nhc2VgY29tcG9zaXRpb25lbmRgOnJldHVybiBWbiYmdC5sb2NhbGUhPT1ga29gP251bGw6dC5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBZbj17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gWG4oZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09YGlucHV0YD8hIVluW2UudHlwZV06dD09PWB0ZXh0YXJlYWB9ZnVuY3Rpb24gWm4oZSx0LG4scil7SnQ/WXQ/WXQucHVzaChyKTpZdD1bcl06SnQ9cix0PWtkKHQsYG9uQ2hhbmdlYCksMDx0Lmxlbmd0aCYmKG49bmV3IHBuKGBvbkNoYW5nZWAsYGNoYW5nZWAsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgUW49bnVsbCwkbj1udWxsO2Z1bmN0aW9uIGVyKGUpe3hkKGUsMCl9ZnVuY3Rpb24gdHIoZSl7aWYoRHQobHQoZSkpKXJldHVybiBlfWZ1bmN0aW9uIHEoZSx0KXtpZihlPT09YGNoYW5nZWApcmV0dXJuIHR9dmFyIG5yPSExO2lmKGVuKXt2YXIgcnI7aWYoZW4pe3ZhciBpcj1gb25pbnB1dGBpbiBkb2N1bWVudDtpZighaXIpe3ZhciBhcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKTthci5zZXRBdHRyaWJ1dGUoYG9uaW5wdXRgLGByZXR1cm47YCksaXI9dHlwZW9mIGFyLm9uaW5wdXQ9PWBmdW5jdGlvbmB9cnI9aXJ9ZWxzZSBycj0hMTtucj1yciYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBvcigpe1FuJiYoUW4uZGV0YWNoRXZlbnQoYG9ucHJvcGVydHljaGFuZ2VgLHNyKSwkbj1Rbj1udWxsKX1mdW5jdGlvbiBzcihlKXtpZihlLnByb3BlcnR5TmFtZT09PWB2YWx1ZWAmJnRyKCRuKSl7dmFyIHQ9W107Wm4odCwkbixlLHF0KGUpKSxRdChlcix0KX19ZnVuY3Rpb24gY3IoZSx0LG4pe2U9PT1gZm9jdXNpbmA/KG9yKCksUW49dCwkbj1uLFFuLmF0dGFjaEV2ZW50KGBvbnByb3BlcnR5Y2hhbmdlYCxzcikpOmU9PT1gZm9jdXNvdXRgJiZvcigpfWZ1bmN0aW9uIGxyKGUpe2lmKGU9PT1gc2VsZWN0aW9uY2hhbmdlYHx8ZT09PWBrZXl1cGB8fGU9PT1ga2V5ZG93bmApcmV0dXJuIHRyKCRuKX1mdW5jdGlvbiB1cihlLHQpe2lmKGU9PT1gY2xpY2tgKXJldHVybiB0cih0KX1mdW5jdGlvbiBkcihlLHQpe2lmKGU9PT1gaW5wdXRgfHxlPT09YGNoYW5nZWApcmV0dXJuIHRyKHQpfWZ1bmN0aW9uIGZyKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09MS90KXx8ZSE9PWUmJnQhPT10fXZhciBwcj10eXBlb2YgT2JqZWN0LmlzPT1gZnVuY3Rpb25gP09iamVjdC5pczpmcjtmdW5jdGlvbiBtcihlLHQpe2lmKHByKGUsdCkpcmV0dXJuITA7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZXx8dHlwZW9mIHQhPWBvYmplY3RgfHwhdClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxyPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpZighZmUuY2FsbCh0LGkpfHwhcHIoZVtpXSx0W2ldKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBocihlKXtmb3IoO2UmJmUuZmlyc3RDaGlsZDspZT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGV9ZnVuY3Rpb24gZ3IoZSx0KXt2YXIgbj1ocihlKTtlPTA7Zm9yKHZhciByO247KXtpZihuLm5vZGVUeXBlPT09Myl7aWYocj1lK24udGV4dENvbnRlbnQubGVuZ3RoLGU8PXQmJnI+PXQpcmV0dXJue25vZGU6bixvZmZzZXQ6dC1lfTtlPXJ9YTp7Zm9yKDtuOyl7aWYobi5uZXh0U2libGluZyl7bj1uLm5leHRTaWJsaW5nO2JyZWFrIGF9bj1uLnBhcmVudE5vZGV9bj12b2lkIDB9bj1ocihuKX19ZnVuY3Rpb24gX3IoZSx0KXtyZXR1cm4gZSYmdD9lPT09dD8hMDplJiZlLm5vZGVUeXBlPT09Mz8hMTp0JiZ0Lm5vZGVUeXBlPT09Mz9fcihlLHQucGFyZW50Tm9kZSk6YGNvbnRhaW5zYGluIGU/ZS5jb250YWlucyh0KTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPyEhKGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmMTYpOiExOiExfWZ1bmN0aW9uIHZyKGUpe2U9ZSE9bnVsbCYmZS5vd25lckRvY3VtZW50IT1udWxsJiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXchPW51bGw/ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OndpbmRvdztmb3IodmFyIHQ9T3QoZS5kb2N1bWVudCk7dCBpbnN0YW5jZW9mIGUuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIG49dHlwZW9mIHQuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmPT1gc3RyaW5nYH1jYXRjaHtuPSExfWlmKG4pZT10LmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhazt0PU90KGUuZG9jdW1lbnQpfXJldHVybiB0fWZ1bmN0aW9uIHlyKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKHQ9PT1gaW5wdXRgJiYoZS50eXBlPT09YHRleHRgfHxlLnR5cGU9PT1gc2VhcmNoYHx8ZS50eXBlPT09YHRlbGB8fGUudHlwZT09PWB1cmxgfHxlLnR5cGU9PT1gcGFzc3dvcmRgKXx8dD09PWB0ZXh0YXJlYWB8fGUuY29udGVudEVkaXRhYmxlPT09YHRydWVgKX12YXIgYnI9ZW4mJmBkb2N1bWVudE1vZGVgaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUseHI9bnVsbCxTcj1udWxsLENyPW51bGwsd3I9ITE7ZnVuY3Rpb24gVHIoZSx0LG4pe3ZhciByPW4ud2luZG93PT09bj9uLmRvY3VtZW50Om4ubm9kZVR5cGU9PT05P246bi5vd25lckRvY3VtZW50O3dyfHx4cj09bnVsbHx8eHIhPT1PdChyKXx8KHI9eHIsYHNlbGVjdGlvblN0YXJ0YGluIHImJnlyKHIpP3I9e3N0YXJ0OnIuc2VsZWN0aW9uU3RhcnQsZW5kOnIuc2VsZWN0aW9uRW5kfToocj0oci5vd25lckRvY3VtZW50JiZyLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCkscj17YW5jaG9yTm9kZTpyLmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OnIuYW5jaG9yT2Zmc2V0LGZvY3VzTm9kZTpyLmZvY3VzTm9kZSxmb2N1c09mZnNldDpyLmZvY3VzT2Zmc2V0fSksQ3ImJm1yKENyLHIpfHwoQ3I9cixyPWtkKFNyLGBvblNlbGVjdGApLDA8ci5sZW5ndGgmJih0PW5ldyBwbihgb25TZWxlY3RgLGBzZWxlY3RgLG51bGwsdCxuKSxlLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOnJ9KSx0LnRhcmdldD14cikpKX1mdW5jdGlvbiBFcihlLHQpe3ZhciBuPXt9O3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLG5bYFdlYmtpdGArZV09YHdlYmtpdGArdCxuW2BNb3pgK2VdPWBtb3pgK3Qsbn12YXIgRHI9e2FuaW1hdGlvbmVuZDpFcihgQW5pbWF0aW9uYCxgQW5pbWF0aW9uRW5kYCksYW5pbWF0aW9uaXRlcmF0aW9uOkVyKGBBbmltYXRpb25gLGBBbmltYXRpb25JdGVyYXRpb25gKSxhbmltYXRpb25zdGFydDpFcihgQW5pbWF0aW9uYCxgQW5pbWF0aW9uU3RhcnRgKSx0cmFuc2l0aW9ucnVuOkVyKGBUcmFuc2l0aW9uYCxgVHJhbnNpdGlvblJ1bmApLHRyYW5zaXRpb25zdGFydDpFcihgVHJhbnNpdGlvbmAsYFRyYW5zaXRpb25TdGFydGApLHRyYW5zaXRpb25jYW5jZWw6RXIoYFRyYW5zaXRpb25gLGBUcmFuc2l0aW9uQ2FuY2VsYCksdHJhbnNpdGlvbmVuZDpFcihgVHJhbnNpdGlvbmAsYFRyYW5zaXRpb25FbmRgKX0sT3I9e30sa3I9e307ZW4mJihrcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKS5zdHlsZSxgQW5pbWF0aW9uRXZlbnRgaW4gd2luZG93fHwoZGVsZXRlIERyLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIERyLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIERyLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksYFRyYW5zaXRpb25FdmVudGBpbiB3aW5kb3d8fGRlbGV0ZSBEci50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO2Z1bmN0aW9uIEFyKGUpe2lmKE9yW2VdKXJldHVybiBPcltlXTtpZighRHJbZV0pcmV0dXJuIGU7dmFyIHQ9RHJbZV0sbjtmb3IobiBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobikmJm4gaW4ga3IpcmV0dXJuIE9yW2VdPXRbbl07cmV0dXJuIGV9dmFyIGpyPUFyKGBhbmltYXRpb25lbmRgKSxNcj1BcihgYW5pbWF0aW9uaXRlcmF0aW9uYCksTnI9QXIoYGFuaW1hdGlvbnN0YXJ0YCksUHI9QXIoYHRyYW5zaXRpb25ydW5gKSxGcj1BcihgdHJhbnNpdGlvbnN0YXJ0YCksSXI9QXIoYHRyYW5zaXRpb25jYW5jZWxgKSxMcj1BcihgdHJhbnNpdGlvbmVuZGApLFJyPW5ldyBNYXAsenI9YGFib3J0IGF1eENsaWNrIGJlZm9yZVRvZ2dsZSBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbGAuc3BsaXQoYCBgKTt6ci5wdXNoKGBzY3JvbGxFbmRgKTtmdW5jdGlvbiBCcihlLHQpe1JyLnNldChlLHQpLG10KHQsW2VdKX12YXIgVnI9dHlwZW9mIHJlcG9ydEVycm9yPT1gZnVuY3Rpb25gP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiB3aW5kb3c9PWBvYmplY3RgJiZ0eXBlb2Ygd2luZG93LkVycm9yRXZlbnQ9PWBmdW5jdGlvbmApe3ZhciB0PW5ldyB3aW5kb3cuRXJyb3JFdmVudChgZXJyb3JgLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsbWVzc2FnZTp0eXBlb2YgZT09YG9iamVjdGAmJmUmJnR5cGVvZiBlLm1lc3NhZ2U9PWBzdHJpbmdgP1N0cmluZyhlLm1lc3NhZ2UpOlN0cmluZyhlKSxlcnJvcjplfSk7aWYoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KHQpKXJldHVybn1lbHNlIGlmKHR5cGVvZiBwcm9jZXNzPT1gb2JqZWN0YCYmdHlwZW9mIHByb2Nlc3MuZW1pdD09YGZ1bmN0aW9uYCl7cHJvY2Vzcy5lbWl0KGB1bmNhdWdodEV4Y2VwdGlvbmAsZSk7cmV0dXJufWNvbnNvbGUuZXJyb3IoZSl9LEhyPVtdLFVyPTAsV3I9MDtmdW5jdGlvbiBHcigpe2Zvcih2YXIgZT1Vcix0PVdyPVVyPTA7dDxlOyl7dmFyIG49SHJbdF07SHJbdCsrXT1udWxsO3ZhciByPUhyW3RdO0hyW3QrK109bnVsbDt2YXIgaT1Iclt0XTtIclt0KytdPW51bGw7dmFyIGE9SHJbdF07aWYoSHJbdCsrXT1udWxsLHIhPT1udWxsJiZpIT09bnVsbCl7dmFyIG89ci5wZW5kaW5nO289PT1udWxsP2kubmV4dD1pOihpLm5leHQ9by5uZXh0LG8ubmV4dD1pKSxyLnBlbmRpbmc9aX1hIT09MCYmWXIobixpLGEpfX1mdW5jdGlvbiBLcihlLHQsbixyKXtIcltVcisrXT1lLEhyW1VyKytdPXQsSHJbVXIrK109bixIcltVcisrXT1yLFdyfD1yLGUubGFuZXN8PXIsZT1lLmFsdGVybmF0ZSxlIT09bnVsbCYmKGUubGFuZXN8PXIpfWZ1bmN0aW9uIHFyKGUsdCxuLHIpe3JldHVybiBLcihlLHQsbixyKSxYcihlKX1mdW5jdGlvbiBKcihlLHQpe3JldHVybiBLcihlLG51bGwsbnVsbCx0KSxYcihlKX1mdW5jdGlvbiBZcihlLHQsbil7ZS5sYW5lc3w9bjt2YXIgcj1lLmFsdGVybmF0ZTtyIT09bnVsbCYmKHIubGFuZXN8PW4pO2Zvcih2YXIgaT0hMSxhPWUucmV0dXJuO2EhPT1udWxsOylhLmNoaWxkTGFuZXN8PW4scj1hLmFsdGVybmF0ZSxyIT09bnVsbCYmKHIuY2hpbGRMYW5lc3w9biksYS50YWc9PT0yMiYmKGU9YS5zdGF0ZU5vZGUsZT09PW51bGx8fGUuX3Zpc2liaWxpdHkmMXx8KGk9ITApKSxlPWEsYT1hLnJldHVybjtyZXR1cm4gZS50YWc9PT0zPyhhPWUuc3RhdGVOb2RlLGkmJnQhPT1udWxsJiYoaT0zMS1rZShuKSxlPWEuaGlkZGVuVXBkYXRlcyxyPWVbaV0scj09PW51bGw/ZVtpXT1bdF06ci5wdXNoKHQpLHQubGFuZT1ufDUzNjg3MDkxMiksYSk6bnVsbH1mdW5jdGlvbiBYcihlKXtpZig1MDxmdSl0aHJvdyBmdT0wLHB1PW51bGwsRXJyb3IoaSgxODUpKTtmb3IodmFyIHQ9ZS5yZXR1cm47dCE9PW51bGw7KWU9dCx0PWUucmV0dXJuO3JldHVybiBlLnRhZz09PTM/ZS5zdGF0ZU5vZGU6bnVsbH12YXIgWnI9e307ZnVuY3Rpb24gUXIoZSx0LG4scil7dGhpcy50YWc9ZSx0aGlzLmtleT1uLHRoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGwsdGhpcy5pbmRleD0wLHRoaXMucmVmQ2xlYW51cD10aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPXQsdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wLHRoaXMuZGVsZXRpb25zPW51bGwsdGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MCx0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uICRyKGUsdCxuLHIpe3JldHVybiBuZXcgUXIoZSx0LG4scil9ZnVuY3Rpb24gZWkoZSl7cmV0dXJuIGU9ZS5wcm90b3R5cGUsISghZXx8IWUuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gdGkoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbj09PW51bGw/KG49JHIoZS50YWcsdCxlLmtleSxlLm1vZGUpLG4uZWxlbWVudFR5cGU9ZS5lbGVtZW50VHlwZSxuLnR5cGU9ZS50eXBlLG4uc3RhdGVOb2RlPWUuc3RhdGVOb2RlLG4uYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9bik6KG4ucGVuZGluZ1Byb3BzPXQsbi50eXBlPWUudHlwZSxuLmZsYWdzPTAsbi5zdWJ0cmVlRmxhZ3M9MCxuLmRlbGV0aW9ucz1udWxsKSxuLmZsYWdzPWUuZmxhZ3MmNjUwMTE3MTIsbi5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyxuLmxhbmVzPWUubGFuZXMsbi5jaGlsZD1lLmNoaWxkLG4ubWVtb2l6ZWRQcm9wcz1lLm1lbW9pemVkUHJvcHMsbi5tZW1vaXplZFN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdD1lLmRlcGVuZGVuY2llcyxuLmRlcGVuZGVuY2llcz10PT09bnVsbD9udWxsOntsYW5lczp0LmxhbmVzLGZpcnN0Q29udGV4dDp0LmZpcnN0Q29udGV4dH0sbi5zaWJsaW5nPWUuc2libGluZyxuLmluZGV4PWUuaW5kZXgsbi5yZWY9ZS5yZWYsbi5yZWZDbGVhbnVwPWUucmVmQ2xlYW51cCxufWZ1bmN0aW9uIG5pKGUsdCl7ZS5mbGFncyY9NjUwMTE3MTQ7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG49PT1udWxsPyhlLmNoaWxkTGFuZXM9MCxlLmxhbmVzPXQsZS5jaGlsZD1udWxsLGUuc3VidHJlZUZsYWdzPTAsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCk6KGUuY2hpbGRMYW5lcz1uLmNoaWxkTGFuZXMsZS5sYW5lcz1uLmxhbmVzLGUuY2hpbGQ9bi5jaGlsZCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwsZS5tZW1vaXplZFByb3BzPW4ubWVtb2l6ZWRQcm9wcyxlLm1lbW9pemVkU3RhdGU9bi5tZW1vaXplZFN0YXRlLGUudXBkYXRlUXVldWU9bi51cGRhdGVRdWV1ZSxlLnR5cGU9bi50eXBlLHQ9bi5kZXBlbmRlbmNpZXMsZS5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9KSxlfWZ1bmN0aW9uIHJpKGUsdCxuLHIsYSxvKXt2YXIgcz0wO2lmKHI9ZSx0eXBlb2YgZT09YGZ1bmN0aW9uYCllaShlKSYmKHM9MSk7ZWxzZSBpZih0eXBlb2YgZT09YHN0cmluZ2Apcz1LZihlLG4sVS5jdXJyZW50KT8yNjplPT09YGh0bWxgfHxlPT09YGhlYWRgfHxlPT09YGJvZHlgPzI3OjU7ZWxzZSBhOnN3aXRjaChlKXtjYXNlIGs6cmV0dXJuIGU9JHIoMzEsbix0LGEpLGUuZWxlbWVudFR5cGU9ayxlLmxhbmVzPW8sZTtjYXNlIHk6cmV0dXJuIGlpKG4uY2hpbGRyZW4sYSxvLHQpO2Nhc2UgYjpzPTgsYXw9MjQ7YnJlYWs7Y2FzZSB4OnJldHVybiBlPSRyKDEyLG4sdCxhfDIpLGUuZWxlbWVudFR5cGU9eCxlLmxhbmVzPW8sZTtjYXNlIFQ6cmV0dXJuIGU9JHIoMTMsbix0LGEpLGUuZWxlbWVudFR5cGU9VCxlLmxhbmVzPW8sZTtjYXNlIEU6cmV0dXJuIGU9JHIoMTksbix0LGEpLGUuZWxlbWVudFR5cGU9RSxlLmxhbmVzPW8sZTtkZWZhdWx0OmlmKHR5cGVvZiBlPT1gb2JqZWN0YCYmZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBDOnM9MTA7YnJlYWsgYTtjYXNlIFM6cz05O2JyZWFrIGE7Y2FzZSB3OnM9MTE7YnJlYWsgYTtjYXNlIEQ6cz0xNDticmVhayBhO2Nhc2UgTzpzPTE2LHI9bnVsbDticmVhayBhfXM9Mjksbj1FcnJvcihpKDEzMCxlPT09bnVsbD9gbnVsbGA6dHlwZW9mIGUsYGApKSxyPW51bGx9cmV0dXJuIHQ9JHIocyxuLHQsYSksdC5lbGVtZW50VHlwZT1lLHQudHlwZT1yLHQubGFuZXM9byx0fWZ1bmN0aW9uIGlpKGUsdCxuLHIpe3JldHVybiBlPSRyKDcsZSxyLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIGFpKGUsdCxuKXtyZXR1cm4gZT0kcig2LGUsbnVsbCx0KSxlLmxhbmVzPW4sZX1mdW5jdGlvbiBvaShlKXt2YXIgdD0kcigxOCxudWxsLG51bGwsMCk7cmV0dXJuIHQuc3RhdGVOb2RlPWUsdH1mdW5jdGlvbiBzaShlLHQsbil7cmV0dXJuIHQ9JHIoNCxlLmNoaWxkcmVuPT09bnVsbD9bXTplLmNoaWxkcmVuLGUua2V5LHQpLHQubGFuZXM9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH12YXIgY2k9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbGkoZSx0KXtpZih0eXBlb2YgZT09YG9iamVjdGAmJmUpe3ZhciBuPWNpLmdldChlKTtyZXR1cm4gbj09PXZvaWQgMD8odD17dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpkZSh0KX0sY2kuc2V0KGUsdCksdCk6bn1yZXR1cm57dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpkZSh0KX19dmFyIHVpPVtdLGRpPTAsZmk9bnVsbCxwaT0wLG1pPVtdLGhpPTAsZ2k9bnVsbCxfaT0xLHZpPWBgO2Z1bmN0aW9uIHlpKGUsdCl7dWlbZGkrK109cGksdWlbZGkrK109ZmksZmk9ZSxwaT10fWZ1bmN0aW9uIGJpKGUsdCxuKXttaVtoaSsrXT1faSxtaVtoaSsrXT12aSxtaVtoaSsrXT1naSxnaT1lO3ZhciByPV9pO2U9dmk7dmFyIGk9MzIta2UociktMTtyJj1+KDE8PGkpLG4rPTE7dmFyIGE9MzIta2UodCkraTtpZigzMDxhKXt2YXIgbz1pLWklNTthPShyJigxPDxvKS0xKS50b1N0cmluZygzMikscj4+PW8saS09byxfaT0xPDwzMi1rZSh0KStpfG48PGl8cix2aT1hK2V9ZWxzZSBfaT0xPDxhfG48PGl8cix2aT1lfWZ1bmN0aW9uIHhpKGUpe2UucmV0dXJuIT09bnVsbCYmKHlpKGUsMSksYmkoZSwxLDApKX1mdW5jdGlvbiBTaShlKXtmb3IoO2U9PT1maTspZmk9dWlbLS1kaV0sdWlbZGldPW51bGwscGk9dWlbLS1kaV0sdWlbZGldPW51bGw7Zm9yKDtlPT09Z2k7KWdpPW1pWy0taGldLG1pW2hpXT1udWxsLHZpPW1pWy0taGldLG1pW2hpXT1udWxsLF9pPW1pWy0taGldLG1pW2hpXT1udWxsfWZ1bmN0aW9uIENpKGUsdCl7bWlbaGkrK109X2ksbWlbaGkrK109dmksbWlbaGkrK109Z2ksX2k9dC5pZCx2aT10Lm92ZXJmbG93LGdpPWV9dmFyIHdpPW51bGwsVGk9bnVsbCxFaT0hMSxEaT1udWxsLE9pPSExLGtpPUVycm9yKGkoNTE5KSk7ZnVuY3Rpb24gQWkoZSl7dGhyb3cgSWkobGkoRXJyb3IoaSg0MTgsMTxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMV0hPT12b2lkIDAmJmFyZ3VtZW50c1sxXT9gdGV4dGA6YEhUTUxgLGBgKSksZSkpLGtpfWZ1bmN0aW9uIGppKGUpe3ZhciB0PWUuc3RhdGVOb2RlLG49ZS50eXBlLHI9ZS5tZW1vaXplZFByb3BzO3N3aXRjaCh0W1FlXT1lLHRbJGVdPXIsbil7Y2FzZWBkaWFsb2dgOlNkKGBjYW5jZWxgLHQpLFNkKGBjbG9zZWAsdCk7YnJlYWs7Y2FzZWBpZnJhbWVgOmNhc2Vgb2JqZWN0YDpjYXNlYGVtYmVkYDpTZChgbG9hZGAsdCk7YnJlYWs7Y2FzZWB2aWRlb2A6Y2FzZWBhdWRpb2A6Zm9yKG49MDtuPHlkLmxlbmd0aDtuKyspU2QoeWRbbl0sdCk7YnJlYWs7Y2FzZWBzb3VyY2VgOlNkKGBlcnJvcmAsdCk7YnJlYWs7Y2FzZWBpbWdgOmNhc2VgaW1hZ2VgOmNhc2VgbGlua2A6U2QoYGVycm9yYCx0KSxTZChgbG9hZGAsdCk7YnJlYWs7Y2FzZWBkZXRhaWxzYDpTZChgdG9nZ2xlYCx0KTticmVhaztjYXNlYGlucHV0YDpTZChgaW52YWxpZGAsdCksTXQodCxyLnZhbHVlLHIuZGVmYXVsdFZhbHVlLHIuY2hlY2tlZCxyLmRlZmF1bHRDaGVja2VkLHIudHlwZSxyLm5hbWUsITApO2JyZWFrO2Nhc2Vgc2VsZWN0YDpTZChgaW52YWxpZGAsdCk7YnJlYWs7Y2FzZWB0ZXh0YXJlYWA6U2QoYGludmFsaWRgLHQpLEl0KHQsci52YWx1ZSxyLmRlZmF1bHRWYWx1ZSxyLmNoaWxkcmVuKX1uPXIuY2hpbGRyZW4sdHlwZW9mIG4hPWBzdHJpbmdgJiZ0eXBlb2YgbiE9YG51bWJlcmAmJnR5cGVvZiBuIT1gYmlnaW50YHx8dC50ZXh0Q29udGVudD09PWBgK258fCEwPT09ci5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8fEZkKHQudGV4dENvbnRlbnQsbik/KHIucG9wb3ZlciE9bnVsbCYmKFNkKGBiZWZvcmV0b2dnbGVgLHQpLFNkKGB0b2dnbGVgLHQpKSxyLm9uU2Nyb2xsIT1udWxsJiZTZChgc2Nyb2xsYCx0KSxyLm9uU2Nyb2xsRW5kIT1udWxsJiZTZChgc2Nyb2xsZW5kYCx0KSxyLm9uQ2xpY2shPW51bGwmJih0Lm9uY2xpY2s9R3QpLHQ9ITApOnQ9ITEsdHx8QWkoZSwhMCl9ZnVuY3Rpb24gTWkoZSl7Zm9yKHdpPWUucmV0dXJuO3dpOylzd2l0Y2god2kudGFnKXtjYXNlIDU6Y2FzZSAzMTpjYXNlIDEzOk9pPSExO3JldHVybjtjYXNlIDI3OmNhc2UgMzpPaT0hMDtyZXR1cm47ZGVmYXVsdDp3aT13aS5yZXR1cm59fWZ1bmN0aW9uIE5pKGUpe2lmKGUhPT13aSlyZXR1cm4hMTtpZighRWkpcmV0dXJuIE1pKGUpLEVpPSEwLCExO3ZhciB0PWUudGFnLG47aWYoKG49dCE9PTMmJnQhPT0yNykmJigobj10PT09NSkmJihuPWUudHlwZSxuPSEobiE9PWBmb3JtYCYmbiE9PWBidXR0b25gKXx8cWQoZS50eXBlLGUubWVtb2l6ZWRQcm9wcykpLG49IW4pLG4mJlRpJiZBaShlKSxNaShlKSx0PT09MTMpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGU9ZT09PW51bGw/bnVsbDplLmRlaHlkcmF0ZWQsIWUpdGhyb3cgRXJyb3IoaSgzMTcpKTtUaT1wZihlKX1lbHNlIGlmKHQ9PT0zMSl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZT1lPT09bnVsbD9udWxsOmUuZGVoeWRyYXRlZCwhZSl0aHJvdyBFcnJvcihpKDMxNykpO1RpPXBmKGUpfWVsc2UgdD09PTI3Pyh0PVRpLHRmKGUudHlwZSk/KGU9ZmYsZmY9bnVsbCxUaT1lKTpUaT10KTpUaT13aT9kZihlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiBQaSgpe1RpPXdpPW51bGwsRWk9ITF9ZnVuY3Rpb24gRmkoKXt2YXIgZT1EaTtyZXR1cm4gZSE9PW51bGwmJihRbD09PW51bGw/UWw9ZTpRbC5wdXNoLmFwcGx5KFFsLGUpLERpPW51bGwpLGV9ZnVuY3Rpb24gSWkoZSl7RGk9PT1udWxsP0RpPVtlXTpEaS5wdXNoKGUpfXZhciBMaT1WKG51bGwpLFJpPW51bGwsemk9bnVsbDtmdW5jdGlvbiBCaShlLHQsbil7SChMaSx0Ll9jdXJyZW50VmFsdWUpLHQuX2N1cnJlbnRWYWx1ZT1ufWZ1bmN0aW9uIFZpKGUpe2UuX2N1cnJlbnRWYWx1ZT1MaS5jdXJyZW50LGVlKExpKX1mdW5jdGlvbiBIaShlLHQsbil7Zm9yKDtlIT09bnVsbDspe3ZhciByPWUuYWx0ZXJuYXRlO2lmKChlLmNoaWxkTGFuZXMmdCk9PT10P3IhPT1udWxsJiYoci5jaGlsZExhbmVzJnQpIT09dCYmKHIuY2hpbGRMYW5lc3w9dCk6KGUuY2hpbGRMYW5lc3w9dCxyIT09bnVsbCYmKHIuY2hpbGRMYW5lc3w9dCkpLGU9PT1uKWJyZWFrO2U9ZS5yZXR1cm59fWZ1bmN0aW9uIFVpKGUsdCxuLHIpe3ZhciBhPWUuY2hpbGQ7Zm9yKGEhPT1udWxsJiYoYS5yZXR1cm49ZSk7YSE9PW51bGw7KXt2YXIgbz1hLmRlcGVuZGVuY2llcztpZihvIT09bnVsbCl7dmFyIHM9YS5jaGlsZDtvPW8uZmlyc3RDb250ZXh0O2E6Zm9yKDtvIT09bnVsbDspe3ZhciBjPW87bz1hO2Zvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKWlmKGMuY29udGV4dD09PXRbbF0pe28ubGFuZXN8PW4sYz1vLmFsdGVybmF0ZSxjIT09bnVsbCYmKGMubGFuZXN8PW4pLEhpKG8ucmV0dXJuLG4sZSkscnx8KHM9bnVsbCk7YnJlYWsgYX1vPWMubmV4dH19ZWxzZSBpZihhLnRhZz09PTE4KXtpZihzPWEucmV0dXJuLHM9PT1udWxsKXRocm93IEVycm9yKGkoMzQxKSk7cy5sYW5lc3w9bixvPXMuYWx0ZXJuYXRlLG8hPT1udWxsJiYoby5sYW5lc3w9biksSGkocyxuLGUpLHM9bnVsbH1lbHNlIHM9YS5jaGlsZDtpZihzIT09bnVsbClzLnJldHVybj1hO2Vsc2UgZm9yKHM9YTtzIT09bnVsbDspe2lmKHM9PT1lKXtzPW51bGw7YnJlYWt9aWYoYT1zLnNpYmxpbmcsYSE9PW51bGwpe2EucmV0dXJuPXMucmV0dXJuLHM9YTticmVha31zPXMucmV0dXJufWE9c319ZnVuY3Rpb24gV2koZSx0LG4scil7ZT1udWxsO2Zvcih2YXIgYT10LG89ITE7YSE9PW51bGw7KXtpZighbyl7aWYoYS5mbGFncyY1MjQyODgpbz0hMDtlbHNlIGlmKGEuZmxhZ3MmMjYyMTQ0KWJyZWFrfWlmKGEudGFnPT09MTApe3ZhciBzPWEuYWx0ZXJuYXRlO2lmKHM9PT1udWxsKXRocm93IEVycm9yKGkoMzg3KSk7aWYocz1zLm1lbW9pemVkUHJvcHMscyE9PW51bGwpe3ZhciBjPWEudHlwZTtwcihhLnBlbmRpbmdQcm9wcy52YWx1ZSxzLnZhbHVlKXx8KGU9PT1udWxsP2U9W2NdOmUucHVzaChjKSl9fWVsc2UgaWYoYT09PXRlLmN1cnJlbnQpe2lmKHM9YS5hbHRlcm5hdGUscz09PW51bGwpdGhyb3cgRXJyb3IoaSgzODcpKTtzLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSE9PWEubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlJiYoZT09PW51bGw/ZT1bdHBdOmUucHVzaCh0cCkpfWE9YS5yZXR1cm59ZSE9PW51bGwmJlVpKHQsZSxuLHIpLHQuZmxhZ3N8PTI2MjE0NH1mdW5jdGlvbiBHaShlKXtmb3IoZT1lLmZpcnN0Q29udGV4dDtlIT09bnVsbDspe2lmKCFwcihlLmNvbnRleHQuX2N1cnJlbnRWYWx1ZSxlLm1lbW9pemVkVmFsdWUpKXJldHVybiEwO2U9ZS5uZXh0fXJldHVybiExfWZ1bmN0aW9uIEtpKGUpe1JpPWUsemk9bnVsbCxlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiYoZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gcWkoZSl7cmV0dXJuIFlpKFJpLGUpfWZ1bmN0aW9uIEppKGUsdCl7cmV0dXJuIFJpPT09bnVsbCYmS2koZSksWWkoZSx0KX1mdW5jdGlvbiBZaShlLHQpe3ZhciBuPXQuX2N1cnJlbnRWYWx1ZTtpZih0PXtjb250ZXh0OnQsbWVtb2l6ZWRWYWx1ZTpuLG5leHQ6bnVsbH0semk9PT1udWxsKXtpZihlPT09bnVsbCl0aHJvdyBFcnJvcihpKDMwOCkpO3ppPXQsZS5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OnR9LGUuZmxhZ3N8PTUyNDI4OH1lbHNlIHppPXppLm5leHQ9dDtyZXR1cm4gbn12YXIgWGk9dHlwZW9mIEFib3J0Q29udHJvbGxlcjxgdWA/QWJvcnRDb250cm9sbGVyOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnNpZ25hbD17YWJvcnRlZDohMSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsbil7ZS5wdXNoKG4pfX07dGhpcy5hYm9ydD1mdW5jdGlvbigpe3QuYWJvcnRlZD0hMCxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfX0sWmk9dC51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFFpPXQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksJGk9eyQkdHlwZW9mOkMsQ29uc3VtZXI6bnVsbCxQcm92aWRlcjpudWxsLF9jdXJyZW50VmFsdWU6bnVsbCxfY3VycmVudFZhbHVlMjpudWxsLF90aHJlYWRDb3VudDowfTtmdW5jdGlvbiBlYSgpe3JldHVybntjb250cm9sbGVyOm5ldyBYaSxkYXRhOm5ldyBNYXAscmVmQ291bnQ6MH19ZnVuY3Rpb24gdGEoZSl7ZS5yZWZDb3VudC0tLGUucmVmQ291bnQ9PT0wJiZaaShRaSxmdW5jdGlvbigpe2UuY29udHJvbGxlci5hYm9ydCgpfSl9dmFyIG5hPW51bGwscmE9MCxpYT0wLGFhPW51bGw7ZnVuY3Rpb24gb2EoZSx0KXtpZihuYT09PW51bGwpe3ZhciBuPW5hPVtdO3JhPTAsaWE9cGQoKSxhYT17c3RhdHVzOmBwZW5kaW5nYCx2YWx1ZTp2b2lkIDAsdGhlbjpmdW5jdGlvbihlKXtuLnB1c2goZSl9fX1yZXR1cm4gcmErKyx0LnRoZW4oc2Esc2EpLHR9ZnVuY3Rpb24gc2EoKXtpZigtLXJhPT09MCYmbmEhPT1udWxsKXthYSE9PW51bGwmJihhYS5zdGF0dXM9YGZ1bGZpbGxlZGApO3ZhciBlPW5hO25hPW51bGwsaWE9MCxhYT1udWxsO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKSgwLGVbdF0pKCl9fWZ1bmN0aW9uIGNhKGUsdCl7dmFyIG49W10scj17c3RhdHVzOmBwZW5kaW5nYCx2YWx1ZTpudWxsLHJlYXNvbjpudWxsLHRoZW46ZnVuY3Rpb24oZSl7bi5wdXNoKGUpfX07cmV0dXJuIGUudGhlbihmdW5jdGlvbigpe3Iuc3RhdHVzPWBmdWxmaWxsZWRgLHIudmFsdWU9dDtmb3IodmFyIGU9MDtlPG4ubGVuZ3RoO2UrKykoMCxuW2VdKSh0KX0sZnVuY3Rpb24oZSl7Zm9yKHIuc3RhdHVzPWByZWplY3RlZGAsci5yZWFzb249ZSxlPTA7ZTxuLmxlbmd0aDtlKyspKDAsbltlXSkodm9pZCAwKX0pLHJ9dmFyIGxhPUkuUztJLlM9ZnVuY3Rpb24oZSx0KXt0dT1fZSgpLHR5cGVvZiB0PT1gb2JqZWN0YCYmdCYmdHlwZW9mIHQudGhlbj09YGZ1bmN0aW9uYCYmb2EoZSx0KSxsYSE9PW51bGwmJmxhKGUsdCl9O3ZhciB1YT1WKG51bGwpO2Z1bmN0aW9uIGRhKCl7dmFyIGU9dWEuY3VycmVudDtyZXR1cm4gZT09PW51bGw/SWwucG9vbGVkQ2FjaGU6ZX1mdW5jdGlvbiBmYShlLHQpe3Q9PT1udWxsP0godWEsdWEuY3VycmVudCk6SCh1YSx0LnBvb2wpfWZ1bmN0aW9uIHBhKCl7dmFyIGU9ZGEoKTtyZXR1cm4gZT09PW51bGw/bnVsbDp7cGFyZW50OiRpLl9jdXJyZW50VmFsdWUscG9vbDplfX12YXIgbWE9RXJyb3IoaSg0NjApKSxoYT1FcnJvcihpKDQ3NCkpLGdhPUVycm9yKGkoNTQyKSksX2E9e3RoZW46ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB2YShlKXtyZXR1cm4gZT1lLnN0YXR1cyxlPT09YGZ1bGZpbGxlZGB8fGU9PT1gcmVqZWN0ZWRgfWZ1bmN0aW9uIHlhKGUsdCxuKXtzd2l0Y2gobj1lW25dLG49PT12b2lkIDA/ZS5wdXNoKHQpOm4hPT10JiYodC50aGVuKEd0LEd0KSx0PW4pLHQuc3RhdHVzKXtjYXNlYGZ1bGZpbGxlZGA6cmV0dXJuIHQudmFsdWU7Y2FzZWByZWplY3RlZGA6dGhyb3cgZT10LnJlYXNvbixDYShlKSxlO2RlZmF1bHQ6aWYodHlwZW9mIHQuc3RhdHVzPT1gc3RyaW5nYCl0LnRoZW4oR3QsR3QpO2Vsc2V7aWYoZT1JbCxlIT09bnVsbCYmMTAwPGUuc2hlbGxTdXNwZW5kQ291bnRlcil0aHJvdyBFcnJvcihpKDQ4MikpO2U9dCxlLnN0YXR1cz1gcGVuZGluZ2AsZS50aGVuKGZ1bmN0aW9uKGUpe2lmKHQuc3RhdHVzPT09YHBlbmRpbmdgKXt2YXIgbj10O24uc3RhdHVzPWBmdWxmaWxsZWRgLG4udmFsdWU9ZX19LGZ1bmN0aW9uKGUpe2lmKHQuc3RhdHVzPT09YHBlbmRpbmdgKXt2YXIgbj10O24uc3RhdHVzPWByZWplY3RlZGAsbi5yZWFzb249ZX19KX1zd2l0Y2godC5zdGF0dXMpe2Nhc2VgZnVsZmlsbGVkYDpyZXR1cm4gdC52YWx1ZTtjYXNlYHJlamVjdGVkYDp0aHJvdyBlPXQucmVhc29uLENhKGUpLGV9dGhyb3cgeGE9dCxtYX19ZnVuY3Rpb24gYmEoZSl7dHJ5e3ZhciB0PWUuX2luaXQ7cmV0dXJuIHQoZS5fcGF5bG9hZCl9Y2F0Y2goZSl7dGhyb3cgdHlwZW9mIGU9PWBvYmplY3RgJiZlJiZ0eXBlb2YgZS50aGVuPT1gZnVuY3Rpb25gPyh4YT1lLG1hKTplfX12YXIgeGE9bnVsbDtmdW5jdGlvbiBTYSgpe2lmKHhhPT09bnVsbCl0aHJvdyBFcnJvcihpKDQ1OSkpO3ZhciBlPXhhO3JldHVybiB4YT1udWxsLGV9ZnVuY3Rpb24gQ2EoZSl7aWYoZT09PW1hfHxlPT09Z2EpdGhyb3cgRXJyb3IoaSg0ODMpKX12YXIgd2E9bnVsbCxUYT0wO2Z1bmN0aW9uIEVhKGUpe3ZhciB0PVRhO3JldHVybiBUYSs9MSx3YT09PW51bGwmJih3YT1bXSkseWEod2EsZSx0KX1mdW5jdGlvbiBEYShlLHQpe3Q9dC5wcm9wcy5yZWYsZS5yZWY9dD09PXZvaWQgMD9udWxsOnR9ZnVuY3Rpb24gT2EoZSx0KXt0aHJvdyB0LiQkdHlwZW9mPT09aD9FcnJvcihpKDUyNSkpOihlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxFcnJvcihpKDMxLGU9PT1gW29iamVjdCBPYmplY3RdYD9gb2JqZWN0IHdpdGgga2V5cyB7YCtPYmplY3Qua2V5cyh0KS5qb2luKGAsIGApK2B9YDplKSkpfWZ1bmN0aW9uIEooZSl7ZnVuY3Rpb24gdCh0LG4pe2lmKGUpe3ZhciByPXQuZGVsZXRpb25zO3I9PT1udWxsPyh0LmRlbGV0aW9ucz1bbl0sdC5mbGFnc3w9MTYpOnIucHVzaChuKX19ZnVuY3Rpb24gbihuLHIpe2lmKCFlKXJldHVybiBudWxsO2Zvcig7ciE9PW51bGw7KXQobixyKSxyPXIuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiByKGUpe2Zvcih2YXIgdD1uZXcgTWFwO2UhPT1udWxsOyllLmtleT09PW51bGw/dC5zZXQoZS5pbmRleCxlKTp0LnNldChlLmtleSxlKSxlPWUuc2libGluZztyZXR1cm4gdH1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIGU9dGkoZSx0KSxlLmluZGV4PTAsZS5zaWJsaW5nPW51bGwsZX1mdW5jdGlvbiBvKHQsbixyKXtyZXR1cm4gdC5pbmRleD1yLGU/KHI9dC5hbHRlcm5hdGUscj09PW51bGw/KHQuZmxhZ3N8PTY3MTA4ODY2LG4pOihyPXIuaW5kZXgscjxuPyh0LmZsYWdzfD02NzEwODg2NixuKTpyKSk6KHQuZmxhZ3N8PTEwNDg1NzYsbil9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZSYmdC5hbHRlcm5hdGU9PT1udWxsJiYodC5mbGFnc3w9NjcxMDg4NjYpLHR9ZnVuY3Rpb24gYyhlLHQsbixyKXtyZXR1cm4gdD09PW51bGx8fHQudGFnIT09Nj8odD1haShuLGUubW9kZSxyKSx0LnJldHVybj1lLHQpOih0PWEodCxuKSx0LnJldHVybj1lLHQpfWZ1bmN0aW9uIGwoZSx0LG4scil7dmFyIGk9bi50eXBlO3JldHVybiBpPT09eT9kKGUsdCxuLnByb3BzLmNoaWxkcmVuLHIsbi5rZXkpOnQhPT1udWxsJiYodC5lbGVtZW50VHlwZT09PWl8fHR5cGVvZiBpPT1gb2JqZWN0YCYmaSYmaS4kJHR5cGVvZj09PU8mJmJhKGkpPT09dC50eXBlKT8odD1hKHQsbi5wcm9wcyksRGEodCxuKSx0LnJldHVybj1lLHQpOih0PXJpKG4udHlwZSxuLmtleSxuLnByb3BzLG51bGwsZS5tb2RlLHIpLERhKHQsbiksdC5yZXR1cm49ZSx0KX1mdW5jdGlvbiB1KGUsdCxuLHIpe3JldHVybiB0PT09bnVsbHx8dC50YWchPT00fHx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09bi5jb250YWluZXJJbmZvfHx0LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PW4uaW1wbGVtZW50YXRpb24/KHQ9c2kobixlLm1vZGUsciksdC5yZXR1cm49ZSx0KToodD1hKHQsbi5jaGlsZHJlbnx8W10pLHQucmV0dXJuPWUsdCl9ZnVuY3Rpb24gZChlLHQsbixyLGkpe3JldHVybiB0PT09bnVsbHx8dC50YWchPT03Pyh0PWlpKG4sZS5tb2RlLHIsaSksdC5yZXR1cm49ZSx0KToodD1hKHQsbiksdC5yZXR1cm49ZSx0KX1mdW5jdGlvbiBmKGUsdCxuKXtpZih0eXBlb2YgdD09YHN0cmluZ2AmJnQhPT1gYHx8dHlwZW9mIHQ9PWBudW1iZXJgfHx0eXBlb2YgdD09YGJpZ2ludGApcmV0dXJuIHQ9YWkoYGArdCxlLm1vZGUsbiksdC5yZXR1cm49ZSx0O2lmKHR5cGVvZiB0PT1gb2JqZWN0YCYmdCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgXzpyZXR1cm4gbj1yaSh0LnR5cGUsdC5rZXksdC5wcm9wcyxudWxsLGUubW9kZSxuKSxEYShuLHQpLG4ucmV0dXJuPWUsbjtjYXNlIHY6cmV0dXJuIHQ9c2kodCxlLm1vZGUsbiksdC5yZXR1cm49ZSx0O2Nhc2UgTzpyZXR1cm4gdD1iYSh0KSxmKGUsdCxuKX1pZihGKHQpfHxNKHQpKXJldHVybiB0PWlpKHQsZS5tb2RlLG4sbnVsbCksdC5yZXR1cm49ZSx0O2lmKHR5cGVvZiB0LnRoZW49PWBmdW5jdGlvbmApcmV0dXJuIGYoZSxFYSh0KSxuKTtpZih0LiQkdHlwZW9mPT09QylyZXR1cm4gZihlLEppKGUsdCksbik7T2EoZSx0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwKGUsdCxuLHIpe3ZhciBpPXQ9PT1udWxsP251bGw6dC5rZXk7aWYodHlwZW9mIG49PWBzdHJpbmdgJiZuIT09YGB8fHR5cGVvZiBuPT1gbnVtYmVyYHx8dHlwZW9mIG49PWBiaWdpbnRgKXJldHVybiBpPT09bnVsbD9jKGUsdCxgYCtuLHIpOm51bGw7aWYodHlwZW9mIG49PWBvYmplY3RgJiZuKXtzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSBfOnJldHVybiBuLmtleT09PWk/bChlLHQsbixyKTpudWxsO2Nhc2UgdjpyZXR1cm4gbi5rZXk9PT1pP3UoZSx0LG4scik6bnVsbDtjYXNlIE86cmV0dXJuIG49YmEobikscChlLHQsbixyKX1pZihGKG4pfHxNKG4pKXJldHVybiBpPT09bnVsbD9kKGUsdCxuLHIsbnVsbCk6bnVsbDtpZih0eXBlb2Ygbi50aGVuPT1gZnVuY3Rpb25gKXJldHVybiBwKGUsdCxFYShuKSxyKTtpZihuLiQkdHlwZW9mPT09QylyZXR1cm4gcChlLHQsSmkoZSxuKSxyKTtPYShlLG4pfXJldHVybiBudWxsfWZ1bmN0aW9uIG0oZSx0LG4scixpKXtpZih0eXBlb2Ygcj09YHN0cmluZ2AmJnIhPT1gYHx8dHlwZW9mIHI9PWBudW1iZXJgfHx0eXBlb2Ygcj09YGJpZ2ludGApcmV0dXJuIGU9ZS5nZXQobil8fG51bGwsYyh0LGUsYGArcixpKTtpZih0eXBlb2Ygcj09YG9iamVjdGAmJnIpe3N3aXRjaChyLiQkdHlwZW9mKXtjYXNlIF86cmV0dXJuIGU9ZS5nZXQoci5rZXk9PT1udWxsP246ci5rZXkpfHxudWxsLGwodCxlLHIsaSk7Y2FzZSB2OnJldHVybiBlPWUuZ2V0KHIua2V5PT09bnVsbD9uOnIua2V5KXx8bnVsbCx1KHQsZSxyLGkpO2Nhc2UgTzpyZXR1cm4gcj1iYShyKSxtKGUsdCxuLHIsaSl9aWYoRihyKXx8TShyKSlyZXR1cm4gZT1lLmdldChuKXx8bnVsbCxkKHQsZSxyLGksbnVsbCk7aWYodHlwZW9mIHIudGhlbj09YGZ1bmN0aW9uYClyZXR1cm4gbShlLHQsbixFYShyKSxpKTtpZihyLiQkdHlwZW9mPT09QylyZXR1cm4gbShlLHQsbixKaSh0LHIpLGkpO09hKHQscil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaChpLGEscyxjKXtmb3IodmFyIGw9bnVsbCx1PW51bGwsZD1hLGg9YT0wLGc9bnVsbDtkIT09bnVsbCYmaDxzLmxlbmd0aDtoKyspe2QuaW5kZXg+aD8oZz1kLGQ9bnVsbCk6Zz1kLnNpYmxpbmc7dmFyIF89cChpLGQsc1toXSxjKTtpZihfPT09bnVsbCl7ZD09PW51bGwmJihkPWcpO2JyZWFrfWUmJmQmJl8uYWx0ZXJuYXRlPT09bnVsbCYmdChpLGQpLGE9byhfLGEsaCksdT09PW51bGw/bD1fOnUuc2libGluZz1fLHU9XyxkPWd9aWYoaD09PXMubGVuZ3RoKXJldHVybiBuKGksZCksRWkmJnlpKGksaCksbDtpZihkPT09bnVsbCl7Zm9yKDtoPHMubGVuZ3RoO2grKylkPWYoaSxzW2hdLGMpLGQhPT1udWxsJiYoYT1vKGQsYSxoKSx1PT09bnVsbD9sPWQ6dS5zaWJsaW5nPWQsdT1kKTtyZXR1cm4gRWkmJnlpKGksaCksbH1mb3IoZD1yKGQpO2g8cy5sZW5ndGg7aCsrKWc9bShkLGksaCxzW2hdLGMpLGchPT1udWxsJiYoZSYmZy5hbHRlcm5hdGUhPT1udWxsJiZkLmRlbGV0ZShnLmtleT09PW51bGw/aDpnLmtleSksYT1vKGcsYSxoKSx1PT09bnVsbD9sPWc6dS5zaWJsaW5nPWcsdT1nKTtyZXR1cm4gZSYmZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0KGksZSl9KSxFaSYmeWkoaSxoKSxsfWZ1bmN0aW9uIGcoYSxzLGMsbCl7aWYoYz09bnVsbCl0aHJvdyBFcnJvcihpKDE1MSkpO2Zvcih2YXIgdT1udWxsLGQ9bnVsbCxoPXMsZz1zPTAsXz1udWxsLHY9Yy5uZXh0KCk7aCE9PW51bGwmJiF2LmRvbmU7ZysrLHY9Yy5uZXh0KCkpe2guaW5kZXg+Zz8oXz1oLGg9bnVsbCk6Xz1oLnNpYmxpbmc7dmFyIHk9cChhLGgsdi52YWx1ZSxsKTtpZih5PT09bnVsbCl7aD09PW51bGwmJihoPV8pO2JyZWFrfWUmJmgmJnkuYWx0ZXJuYXRlPT09bnVsbCYmdChhLGgpLHM9byh5LHMsZyksZD09PW51bGw/dT15OmQuc2libGluZz15LGQ9eSxoPV99aWYodi5kb25lKXJldHVybiBuKGEsaCksRWkmJnlpKGEsZyksdTtpZihoPT09bnVsbCl7Zm9yKDshdi5kb25lO2crKyx2PWMubmV4dCgpKXY9ZihhLHYudmFsdWUsbCksdiE9PW51bGwmJihzPW8odixzLGcpLGQ9PT1udWxsP3U9djpkLnNpYmxpbmc9dixkPXYpO3JldHVybiBFaSYmeWkoYSxnKSx1fWZvcihoPXIoaCk7IXYuZG9uZTtnKyssdj1jLm5leHQoKSl2PW0oaCxhLGcsdi52YWx1ZSxsKSx2IT09bnVsbCYmKGUmJnYuYWx0ZXJuYXRlIT09bnVsbCYmaC5kZWxldGUodi5rZXk9PT1udWxsP2c6di5rZXkpLHM9byh2LHMsZyksZD09PW51bGw/dT12OmQuc2libGluZz12LGQ9dik7cmV0dXJuIGUmJmguZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChhLGUpfSksRWkmJnlpKGEsZyksdX1mdW5jdGlvbiBiKGUscixvLGMpe2lmKHR5cGVvZiBvPT1gb2JqZWN0YCYmbyYmby50eXBlPT09eSYmby5rZXk9PT1udWxsJiYobz1vLnByb3BzLmNoaWxkcmVuKSx0eXBlb2Ygbz09YG9iamVjdGAmJm8pe3N3aXRjaChvLiQkdHlwZW9mKXtjYXNlIF86YTp7Zm9yKHZhciBsPW8ua2V5O3IhPT1udWxsOyl7aWYoci5rZXk9PT1sKXtpZihsPW8udHlwZSxsPT09eSl7aWYoci50YWc9PT03KXtuKGUsci5zaWJsaW5nKSxjPWEocixvLnByb3BzLmNoaWxkcmVuKSxjLnJldHVybj1lLGU9YzticmVhayBhfX1lbHNlIGlmKHIuZWxlbWVudFR5cGU9PT1sfHx0eXBlb2YgbD09YG9iamVjdGAmJmwmJmwuJCR0eXBlb2Y9PT1PJiZiYShsKT09PXIudHlwZSl7bihlLHIuc2libGluZyksYz1hKHIsby5wcm9wcyksRGEoYyxvKSxjLnJldHVybj1lLGU9YzticmVhayBhfW4oZSxyKTticmVha31lbHNlIHQoZSxyKTtyPXIuc2libGluZ31vLnR5cGU9PT15PyhjPWlpKG8ucHJvcHMuY2hpbGRyZW4sZS5tb2RlLGMsby5rZXkpLGMucmV0dXJuPWUsZT1jKTooYz1yaShvLnR5cGUsby5rZXksby5wcm9wcyxudWxsLGUubW9kZSxjKSxEYShjLG8pLGMucmV0dXJuPWUsZT1jKX1yZXR1cm4gcyhlKTtjYXNlIHY6YTp7Zm9yKGw9by5rZXk7ciE9PW51bGw7KXtpZihyLmtleT09PWwpaWYoci50YWc9PT00JiZyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09by5jb250YWluZXJJbmZvJiZyLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PW8uaW1wbGVtZW50YXRpb24pe24oZSxyLnNpYmxpbmcpLGM9YShyLG8uY2hpbGRyZW58fFtdKSxjLnJldHVybj1lLGU9YzticmVhayBhfWVsc2V7bihlLHIpO2JyZWFrfWVsc2UgdChlLHIpO3I9ci5zaWJsaW5nfWM9c2kobyxlLm1vZGUsYyksYy5yZXR1cm49ZSxlPWN9cmV0dXJuIHMoZSk7Y2FzZSBPOnJldHVybiBvPWJhKG8pLGIoZSxyLG8sYyl9aWYoRihvKSlyZXR1cm4gaChlLHIsbyxjKTtpZihNKG8pKXtpZihsPU0obyksdHlwZW9mIGwhPWBmdW5jdGlvbmApdGhyb3cgRXJyb3IoaSgxNTApKTtyZXR1cm4gbz1sLmNhbGwobyksZyhlLHIsbyxjKX1pZih0eXBlb2Ygby50aGVuPT1gZnVuY3Rpb25gKXJldHVybiBiKGUscixFYShvKSxjKTtpZihvLiQkdHlwZW9mPT09QylyZXR1cm4gYihlLHIsSmkoZSxvKSxjKTtPYShlLG8pfXJldHVybiB0eXBlb2Ygbz09YHN0cmluZ2AmJm8hPT1gYHx8dHlwZW9mIG89PWBudW1iZXJgfHx0eXBlb2Ygbz09YGJpZ2ludGA/KG89YGArbyxyIT09bnVsbCYmci50YWc9PT02PyhuKGUsci5zaWJsaW5nKSxjPWEocixvKSxjLnJldHVybj1lLGU9Yyk6KG4oZSxyKSxjPWFpKG8sZS5tb2RlLGMpLGMucmV0dXJuPWUsZT1jKSxzKGUpKTpuKGUscil9cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3RyeXtUYT0wO3ZhciBpPWIoZSx0LG4scik7cmV0dXJuIHdhPW51bGwsaX1jYXRjaCh0KXtpZih0PT09bWF8fHQ9PT1nYSl0aHJvdyB0O3ZhciBhPSRyKDI5LHQsbnVsbCxlLm1vZGUpO3JldHVybiBhLmxhbmVzPXIsYS5yZXR1cm49ZSxhfX19dmFyIGthPUooITApLEFhPUooITEpLGphPSExO2Z1bmN0aW9uIE1hKGUpe2UudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbCxsYW5lczowLGhpZGRlbkNhbGxiYWNrczpudWxsfSxjYWxsYmFja3M6bnVsbH19ZnVuY3Rpb24gTmEoZSx0KXtlPWUudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT09PWUmJih0LnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmUubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmUuc2hhcmVkLGNhbGxiYWNrczpudWxsfSl9ZnVuY3Rpb24gUGEoZSl7cmV0dXJue2xhbmU6ZSx0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9fWZ1bmN0aW9uIEZhKGUsdCxuKXt2YXIgcj1lLnVwZGF0ZVF1ZXVlO2lmKHI9PT1udWxsKXJldHVybiBudWxsO2lmKHI9ci5zaGFyZWQsRmwmMil7dmFyIGk9ci5wZW5kaW5nO3JldHVybiBpPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PWkubmV4dCxpLm5leHQ9dCksci5wZW5kaW5nPXQsdD1YcihlKSxZcihlLG51bGwsbiksdH1yZXR1cm4gS3IoZSxyLHQsbiksWHIoZSl9ZnVuY3Rpb24gSWEoZSx0LG4pe2lmKHQ9dC51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKHQ9dC5zaGFyZWQsbiY0MTk0MDQ4KSl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixHZShlLG4pfX1mdW5jdGlvbiBMYShlLHQpe3ZhciBuPWUudXBkYXRlUXVldWUscj1lLmFsdGVybmF0ZTtpZihyIT09bnVsbCYmKHI9ci51cGRhdGVRdWV1ZSxuPT09cikpe3ZhciBpPW51bGwsYT1udWxsO2lmKG49bi5maXJzdEJhc2VVcGRhdGUsbiE9PW51bGwpe2Rve3ZhciBvPXtsYW5lOm4ubGFuZSx0YWc6bi50YWcscGF5bG9hZDpuLnBheWxvYWQsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9O2E9PT1udWxsP2k9YT1vOmE9YS5uZXh0PW8sbj1uLm5leHR9d2hpbGUobiE9PW51bGwpO2E9PT1udWxsP2k9YT10OmE9YS5uZXh0PXR9ZWxzZSBpPWE9dDtuPXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmksbGFzdEJhc2VVcGRhdGU6YSxzaGFyZWQ6ci5zaGFyZWQsY2FsbGJhY2tzOnIuY2FsbGJhY2tzfSxlLnVwZGF0ZVF1ZXVlPW47cmV0dXJufWU9bi5sYXN0QmFzZVVwZGF0ZSxlPT09bnVsbD9uLmZpcnN0QmFzZVVwZGF0ZT10OmUubmV4dD10LG4ubGFzdEJhc2VVcGRhdGU9dH12YXIgUmE9ITE7ZnVuY3Rpb24gemEoKXtpZihSYSl7dmFyIGU9YWE7aWYoZSE9PW51bGwpdGhyb3cgZX19ZnVuY3Rpb24gQmEoZSx0LG4scil7UmE9ITE7dmFyIGk9ZS51cGRhdGVRdWV1ZTtqYT0hMTt2YXIgYT1pLmZpcnN0QmFzZVVwZGF0ZSxvPWkubGFzdEJhc2VVcGRhdGUscz1pLnNoYXJlZC5wZW5kaW5nO2lmKHMhPT1udWxsKXtpLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIGM9cyxsPWMubmV4dDtjLm5leHQ9bnVsbCxvPT09bnVsbD9hPWw6by5uZXh0PWwsbz1jO3ZhciB1PWUuYWx0ZXJuYXRlO3UhPT1udWxsJiYodT11LnVwZGF0ZVF1ZXVlLHM9dS5sYXN0QmFzZVVwZGF0ZSxzIT09byYmKHM9PT1udWxsP3UuZmlyc3RCYXNlVXBkYXRlPWw6cy5uZXh0PWwsdS5sYXN0QmFzZVVwZGF0ZT1jKSl9aWYoYSE9PW51bGwpe3ZhciBkPWkuYmFzZVN0YXRlO289MCx1PWw9Yz1udWxsLHM9YTtkb3t2YXIgZj1zLmxhbmUmLTUzNjg3MDkxMyxtPWYhPT1zLmxhbmU7aWYobT8oUmwmZik9PT1mOihyJmYpPT09Zil7ZiE9PTAmJmY9PT1pYSYmKFJhPSEwKSx1IT09bnVsbCYmKHU9dS5uZXh0PXtsYW5lOjAsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfSk7YTp7dmFyIGg9ZSxnPXM7Zj10O3ZhciBfPW47c3dpdGNoKGcudGFnKXtjYXNlIDE6aWYoaD1nLnBheWxvYWQsdHlwZW9mIGg9PWBmdW5jdGlvbmApe2Q9aC5jYWxsKF8sZCxmKTticmVhayBhfWQ9aDticmVhayBhO2Nhc2UgMzpoLmZsYWdzPWguZmxhZ3MmLTY1NTM3fDEyODtjYXNlIDA6aWYoaD1nLnBheWxvYWQsZj10eXBlb2YgaD09YGZ1bmN0aW9uYD9oLmNhbGwoXyxkLGYpOmgsZj09bnVsbClicmVhayBhO2Q9cCh7fSxkLGYpO2JyZWFrIGE7Y2FzZSAyOmphPSEwfX1mPXMuY2FsbGJhY2ssZiE9PW51bGwmJihlLmZsYWdzfD02NCxtJiYoZS5mbGFnc3w9ODE5MiksbT1pLmNhbGxiYWNrcyxtPT09bnVsbD9pLmNhbGxiYWNrcz1bZl06bS5wdXNoKGYpKX1lbHNlIG09e2xhbmU6Zix0YWc6cy50YWcscGF5bG9hZDpzLnBheWxvYWQsY2FsbGJhY2s6cy5jYWxsYmFjayxuZXh0Om51bGx9LHU9PT1udWxsPyhsPXU9bSxjPWQpOnU9dS5uZXh0PW0sb3w9ZjtpZihzPXMubmV4dCxzPT09bnVsbCl7aWYocz1pLnNoYXJlZC5wZW5kaW5nLHM9PT1udWxsKWJyZWFrO209cyxzPW0ubmV4dCxtLm5leHQ9bnVsbCxpLmxhc3RCYXNlVXBkYXRlPW0saS5zaGFyZWQucGVuZGluZz1udWxsfX13aGlsZSgxKTt1PT09bnVsbCYmKGM9ZCksaS5iYXNlU3RhdGU9YyxpLmZpcnN0QmFzZVVwZGF0ZT1sLGkubGFzdEJhc2VVcGRhdGU9dSxhPT09bnVsbCYmKGkuc2hhcmVkLmxhbmVzPTApLEtsfD1vLGUubGFuZXM9byxlLm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gVmEoZSx0KXtpZih0eXBlb2YgZSE9YGZ1bmN0aW9uYCl0aHJvdyBFcnJvcihpKDE5MSxlKSk7ZS5jYWxsKHQpfWZ1bmN0aW9uIEhhKGUsdCl7dmFyIG49ZS5jYWxsYmFja3M7aWYobiE9PW51bGwpZm9yKGUuY2FsbGJhY2tzPW51bGwsZT0wO2U8bi5sZW5ndGg7ZSsrKVZhKG5bZV0sdCl9dmFyIFVhPVYobnVsbCksV2E9VigwKTtmdW5jdGlvbiBHYShlLHQpe2U9V2wsSChXYSxlKSxIKFVhLHQpLFdsPWV8dC5iYXNlTGFuZXN9ZnVuY3Rpb24gS2EoKXtIKFdhLFdsKSxIKFVhLFVhLmN1cnJlbnQpfWZ1bmN0aW9uIHFhKCl7V2w9V2EuY3VycmVudCxlZShVYSksZWUoV2EpfXZhciBKYT1WKG51bGwpLFlhPW51bGw7ZnVuY3Rpb24gWGEoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7SCh0byx0by5jdXJyZW50JjEpLEgoSmEsZSksWWE9PT1udWxsJiYodD09PW51bGx8fFVhLmN1cnJlbnQhPT1udWxsfHx0Lm1lbW9pemVkU3RhdGUhPT1udWxsKSYmKFlhPWUpfWZ1bmN0aW9uIFphKGUpe0godG8sdG8uY3VycmVudCksSChKYSxlKSxZYT09PW51bGwmJihZYT1lKX1mdW5jdGlvbiBRYShlKXtlLnRhZz09PTIyPyhIKHRvLHRvLmN1cnJlbnQpLEgoSmEsZSksWWE9PT1udWxsJiYoWWE9ZSkpOiRhKGUpfWZ1bmN0aW9uICRhKCl7SCh0byx0by5jdXJyZW50KSxIKEphLEphLmN1cnJlbnQpfWZ1bmN0aW9uIGVvKGUpe2VlKEphKSxZYT09PWUmJihZYT1udWxsKSxlZSh0byl9dmFyIHRvPVYoMCk7ZnVuY3Rpb24gbm8oZSl7Zm9yKHZhciB0PWU7dCE9PW51bGw7KXtpZih0LnRhZz09PTEzKXt2YXIgbj10Lm1lbW9pemVkU3RhdGU7aWYobiE9PW51bGwmJihuPW4uZGVoeWRyYXRlZCxuPT09bnVsbHx8bGYobil8fHVmKG4pKSlyZXR1cm4gdH1lbHNlIGlmKHQudGFnPT09MTkmJih0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXI9PT1gZm9yd2FyZHNgfHx0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXI9PT1gYmFja3dhcmRzYHx8dC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyPT09YHVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNgfHx0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXI9PT1gdG9nZXRoZXJgKSl7aWYodC5mbGFncyYxMjgpcmV0dXJuIHR9ZWxzZSBpZih0LmNoaWxkIT09bnVsbCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWUpYnJlYWs7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHx0LnJldHVybj09PWUpcmV0dXJuIG51bGw7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfXJldHVybiBudWxsfXZhciBybz0wLGlvPW51bGwsYW89bnVsbCxvbz1udWxsLHNvPSExLGNvPSExLGxvPSExLHVvPTAsZm89MCxwbz1udWxsLG1vPTA7ZnVuY3Rpb24gaG8oKXt0aHJvdyBFcnJvcihpKDMyMSkpfWZ1bmN0aW9uIGdvKGUsdCl7aWYodD09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmbjxlLmxlbmd0aDtuKyspaWYoIXByKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gX28oZSx0LG4scixpLGEpe3JldHVybiBybz1hLGlvPXQsdC5tZW1vaXplZFN0YXRlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsLHQubGFuZXM9MCxJLkg9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/UHM6RnMsbG89ITEsYT1uKHIsaSksbG89ITEsY28mJihhPXlvKHQsbixyLGkpKSx2byhlKSxhfWZ1bmN0aW9uIHZvKGUpe0kuSD1Oczt2YXIgdD1hbyE9PW51bGwmJmFvLm5leHQhPT1udWxsO2lmKHJvPTAsb289YW89aW89bnVsbCxzbz0hMSxmbz0wLHBvPW51bGwsdCl0aHJvdyBFcnJvcihpKDMwMCkpO2U9PT1udWxsfHxRc3x8KGU9ZS5kZXBlbmRlbmNpZXMsZSE9PW51bGwmJkdpKGUpJiYoUXM9ITApKX1mdW5jdGlvbiB5byhlLHQsbixyKXtpbz1lO3ZhciBhPTA7ZG97aWYoY28mJihwbz1udWxsKSxmbz0wLGNvPSExLDI1PD1hKXRocm93IEVycm9yKGkoMzAxKSk7aWYoYSs9MSxvbz1hbz1udWxsLGUudXBkYXRlUXVldWUhPW51bGwpe3ZhciBvPWUudXBkYXRlUXVldWU7by5sYXN0RWZmZWN0PW51bGwsby5ldmVudHM9bnVsbCxvLnN0b3Jlcz1udWxsLG8ubWVtb0NhY2hlIT1udWxsJiYoby5tZW1vQ2FjaGUuaW5kZXg9MCl9SS5IPUlzLG89dChuLHIpfXdoaWxlKGNvKTtyZXR1cm4gb31mdW5jdGlvbiBibygpe3ZhciBlPUkuSCx0PWUudXNlU3RhdGUoKVswXTtyZXR1cm4gdD10eXBlb2YgdC50aGVuPT1gZnVuY3Rpb25gP0RvKHQpOnQsZT1lLnVzZVN0YXRlKClbMF0sKGFvPT09bnVsbD9udWxsOmFvLm1lbW9pemVkU3RhdGUpIT09ZSYmKGlvLmZsYWdzfD0xMDI0KSx0fWZ1bmN0aW9uIHhvKCl7dmFyIGU9dW8hPT0wO3JldHVybiB1bz0wLGV9ZnVuY3Rpb24gU28oZSx0LG4pe3QudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+bn1mdW5jdGlvbiBDbyhlKXtpZihzbyl7Zm9yKGU9ZS5tZW1vaXplZFN0YXRlO2UhPT1udWxsOyl7dmFyIHQ9ZS5xdWV1ZTt0IT09bnVsbCYmKHQucGVuZGluZz1udWxsKSxlPWUubmV4dH1zbz0hMX1ybz0wLG9vPWFvPWlvPW51bGwsY289ITEsZm89dW89MCxwbz1udWxsfWZ1bmN0aW9uIHdvKCl7dmFyIGU9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07cmV0dXJuIG9vPT09bnVsbD9pby5tZW1vaXplZFN0YXRlPW9vPWU6b289b28ubmV4dD1lLG9vfWZ1bmN0aW9uIFRvKCl7aWYoYW89PT1udWxsKXt2YXIgZT1pby5hbHRlcm5hdGU7ZT1lPT09bnVsbD9udWxsOmUubWVtb2l6ZWRTdGF0ZX1lbHNlIGU9YW8ubmV4dDt2YXIgdD1vbz09PW51bGw/aW8ubWVtb2l6ZWRTdGF0ZTpvby5uZXh0O2lmKHQhPT1udWxsKW9vPXQsYW89ZTtlbHNle2lmKGU9PT1udWxsKXRocm93IGlvLmFsdGVybmF0ZT09PW51bGw/RXJyb3IoaSg0NjcpKTpFcnJvcihpKDMxMCkpO2FvPWUsZT17bWVtb2l6ZWRTdGF0ZTphby5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTphby5iYXNlU3RhdGUsYmFzZVF1ZXVlOmFvLmJhc2VRdWV1ZSxxdWV1ZTphby5xdWV1ZSxuZXh0Om51bGx9LG9vPT09bnVsbD9pby5tZW1vaXplZFN0YXRlPW9vPWU6b289b28ubmV4dD1lfXJldHVybiBvb31mdW5jdGlvbiBFbygpe3JldHVybntsYXN0RWZmZWN0Om51bGwsZXZlbnRzOm51bGwsc3RvcmVzOm51bGwsbWVtb0NhY2hlOm51bGx9fWZ1bmN0aW9uIERvKGUpe3ZhciB0PWZvO3JldHVybiBmbys9MSxwbz09PW51bGwmJihwbz1bXSksZT15YShwbyxlLHQpLHQ9aW8sKG9vPT09bnVsbD90Lm1lbW9pemVkU3RhdGU6b28ubmV4dCk9PT1udWxsJiYodD10LmFsdGVybmF0ZSxJLkg9dD09PW51bGx8fHQubWVtb2l6ZWRTdGF0ZT09PW51bGw/UHM6RnMpLGV9ZnVuY3Rpb24gT28oZSl7aWYodHlwZW9mIGU9PWBvYmplY3RgJiZlKXtpZih0eXBlb2YgZS50aGVuPT1gZnVuY3Rpb25gKXJldHVybiBEbyhlKTtpZihlLiQkdHlwZW9mPT09QylyZXR1cm4gcWkoZSl9dGhyb3cgRXJyb3IoaSg0MzgsU3RyaW5nKGUpKSl9ZnVuY3Rpb24ga28oZSl7dmFyIHQ9bnVsbCxuPWlvLnVwZGF0ZVF1ZXVlO2lmKG4hPT1udWxsJiYodD1uLm1lbW9DYWNoZSksdD09bnVsbCl7dmFyIHI9aW8uYWx0ZXJuYXRlO3IhPT1udWxsJiYocj1yLnVwZGF0ZVF1ZXVlLHIhPT1udWxsJiYocj1yLm1lbW9DYWNoZSxyIT1udWxsJiYodD17ZGF0YTpyLmRhdGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9KSxpbmRleDowfSkpKX1pZih0Pz89e2RhdGE6W10saW5kZXg6MH0sbj09PW51bGwmJihuPUVvKCksaW8udXBkYXRlUXVldWU9biksbi5tZW1vQ2FjaGU9dCxuPXQuZGF0YVt0LmluZGV4XSxuPT09dm9pZCAwKWZvcihuPXQuZGF0YVt0LmluZGV4XT1BcnJheShlKSxyPTA7cjxlO3IrKyluW3JdPUE7cmV0dXJuIHQuaW5kZXgrKyxufWZ1bmN0aW9uIEFvKGUsdCl7cmV0dXJuIHR5cGVvZiB0PT1gZnVuY3Rpb25gP3QoZSk6dH1mdW5jdGlvbiBqbyhlKXtyZXR1cm4gTW8oVG8oKSxhbyxlKX1mdW5jdGlvbiBNbyhlLHQsbil7dmFyIHI9ZS5xdWV1ZTtpZihyPT09bnVsbCl0aHJvdyBFcnJvcihpKDMxMSkpO3IubGFzdFJlbmRlcmVkUmVkdWNlcj1uO3ZhciBhPWUuYmFzZVF1ZXVlLG89ci5wZW5kaW5nO2lmKG8hPT1udWxsKXtpZihhIT09bnVsbCl7dmFyIHM9YS5uZXh0O2EubmV4dD1vLm5leHQsby5uZXh0PXN9dC5iYXNlUXVldWU9YT1vLHIucGVuZGluZz1udWxsfWlmKG89ZS5iYXNlU3RhdGUsYT09PW51bGwpZS5tZW1vaXplZFN0YXRlPW87ZWxzZXt0PWEubmV4dDt2YXIgYz1zPW51bGwsbD1udWxsLHU9dCxkPSExO2Rve3ZhciBmPXUubGFuZSYtNTM2ODcwOTEzO2lmKGY9PT11LmxhbmU/KHJvJmYpPT09ZjooUmwmZik9PT1mKXt2YXIgcD11LnJldmVydExhbmU7aWYocD09PTApbCE9PW51bGwmJihsPWwubmV4dD17bGFuZTowLHJldmVydExhbmU6MCxnZXN0dXJlOm51bGwsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLGY9PT1pYSYmKGQ9ITApO2Vsc2UgaWYoKHJvJnApPT09cCl7dT11Lm5leHQscD09PWlhJiYoZD0hMCk7Y29udGludWV9ZWxzZSBmPXtsYW5lOjAscmV2ZXJ0TGFuZTp1LnJldmVydExhbmUsZ2VzdHVyZTpudWxsLGFjdGlvbjp1LmFjdGlvbixoYXNFYWdlclN0YXRlOnUuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOnUuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LGw9PT1udWxsPyhjPWw9ZixzPW8pOmw9bC5uZXh0PWYsaW8ubGFuZXN8PXAsS2x8PXA7Zj11LmFjdGlvbixsbyYmbihvLGYpLG89dS5oYXNFYWdlclN0YXRlP3UuZWFnZXJTdGF0ZTpuKG8sZil9ZWxzZSBwPXtsYW5lOmYscmV2ZXJ0TGFuZTp1LnJldmVydExhbmUsZ2VzdHVyZTp1Lmdlc3R1cmUsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0sbD09PW51bGw/KGM9bD1wLHM9byk6bD1sLm5leHQ9cCxpby5sYW5lc3w9ZixLbHw9Zjt1PXUubmV4dH13aGlsZSh1IT09bnVsbCYmdSE9PXQpO2lmKGw9PT1udWxsP3M9bzpsLm5leHQ9YywhcHIobyxlLm1lbW9pemVkU3RhdGUpJiYoUXM9ITAsZCYmKG49YWEsbiE9PW51bGwpKSl0aHJvdyBuO2UubWVtb2l6ZWRTdGF0ZT1vLGUuYmFzZVN0YXRlPXMsZS5iYXNlUXVldWU9bCxyLmxhc3RSZW5kZXJlZFN0YXRlPW99cmV0dXJuIGE9PT1udWxsJiYoci5sYW5lcz0wKSxbZS5tZW1vaXplZFN0YXRlLHIuZGlzcGF0Y2hdfWZ1bmN0aW9uIE5vKGUpe3ZhciB0PVRvKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKGkoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9bi5kaXNwYXRjaCxhPW4ucGVuZGluZyxvPXQubWVtb2l6ZWRTdGF0ZTtpZihhIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIHM9YT1hLm5leHQ7ZG8gbz1lKG8scy5hY3Rpb24pLHM9cy5uZXh0O3doaWxlKHMhPT1hKTtwcihvLHQubWVtb2l6ZWRTdGF0ZSl8fChRcz0hMCksdC5tZW1vaXplZFN0YXRlPW8sdC5iYXNlUXVldWU9PT1udWxsJiYodC5iYXNlU3RhdGU9byksbi5sYXN0UmVuZGVyZWRTdGF0ZT1vfXJldHVybltvLHJdfWZ1bmN0aW9uIFBvKGUsdCxuKXt2YXIgcj1pbyxhPVRvKCksbz1FaTtpZihvKXtpZihuPT09dm9pZCAwKXRocm93IEVycm9yKGkoNDA3KSk7bj1uKCl9ZWxzZSBuPXQoKTt2YXIgcz0hcHIoKGFvfHxhKS5tZW1vaXplZFN0YXRlLG4pO2lmKHMmJihhLm1lbW9pemVkU3RhdGU9bixRcz0hMCksYT1hLnF1ZXVlLGFzKExvLmJpbmQobnVsbCxyLGEsZSksW2VdKSxhLmdldFNuYXBzaG90IT09dHx8c3x8b28hPT1udWxsJiZvby5tZW1vaXplZFN0YXRlLnRhZyYxKXtpZihyLmZsYWdzfD0yMDQ4LGVzKDkse2Rlc3Ryb3k6dm9pZCAwfSxJby5iaW5kKG51bGwscixhLG4sdCksbnVsbCksSWw9PT1udWxsKXRocm93IEVycm9yKGkoMzQ5KSk7b3x8cm8mMTI3fHxGbyhyLHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gRm8oZSx0LG4pe2UuZmxhZ3N8PTE2Mzg0LGU9e2dldFNuYXBzaG90OnQsdmFsdWU6bn0sdD1pby51cGRhdGVRdWV1ZSx0PT09bnVsbD8odD1FbygpLGlvLnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiBJbyhlLHQsbixyKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1yLFJvKHQpJiZ6byhlKX1mdW5jdGlvbiBMbyhlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXtSbyh0KSYmem8oZSl9KX1mdW5jdGlvbiBSbyhlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFwcihlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiB6byhlKXt2YXIgdD1KcihlLDIpO3QhPT1udWxsJiZndSh0LGUsMil9ZnVuY3Rpb24gQm8oZSl7dmFyIHQ9d28oKTtpZih0eXBlb2YgZT09YGZ1bmN0aW9uYCl7dmFyIG49ZTtpZihlPW4oKSxsbyl7T2UoITApO3RyeXtuKCl9ZmluYWxseXtPZSghMSl9fX1yZXR1cm4gdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsdC5xdWV1ZT17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOkFvLGxhc3RSZW5kZXJlZFN0YXRlOmV9LHR9ZnVuY3Rpb24gVm8oZSx0LG4scil7cmV0dXJuIGUuYmFzZVN0YXRlPW4sTW8oZSxhbyx0eXBlb2Ygcj09YGZ1bmN0aW9uYD9yOkFvKX1mdW5jdGlvbiBIbyhlLHQsbixyLGEpe2lmKEFzKGUpKXRocm93IEVycm9yKGkoNDg1KSk7aWYoZT10LmFjdGlvbixlIT09bnVsbCl7dmFyIG89e3BheWxvYWQ6YSxhY3Rpb246ZSxuZXh0Om51bGwsaXNUcmFuc2l0aW9uOiEwLHN0YXR1czpgcGVuZGluZ2AsdmFsdWU6bnVsbCxyZWFzb246bnVsbCxsaXN0ZW5lcnM6W10sdGhlbjpmdW5jdGlvbihlKXtvLmxpc3RlbmVycy5wdXNoKGUpfX07SS5UPT09bnVsbD9vLmlzVHJhbnNpdGlvbj0hMTpuKCEwKSxyKG8pLG49dC5wZW5kaW5nLG49PT1udWxsPyhvLm5leHQ9dC5wZW5kaW5nPW8sVW8odCxvKSk6KG8ubmV4dD1uLm5leHQsdC5wZW5kaW5nPW4ubmV4dD1vKX19ZnVuY3Rpb24gVW8oZSx0KXt2YXIgbj10LmFjdGlvbixyPXQucGF5bG9hZCxpPWUuc3RhdGU7aWYodC5pc1RyYW5zaXRpb24pe3ZhciBhPUkuVCxvPXt9O0kuVD1vO3RyeXt2YXIgcz1uKGksciksYz1JLlM7YyE9PW51bGwmJmMobyxzKSxXbyhlLHQscyl9Y2F0Y2gobil7S28oZSx0LG4pfWZpbmFsbHl7YSE9PW51bGwmJm8udHlwZXMhPT1udWxsJiYoYS50eXBlcz1vLnR5cGVzKSxJLlQ9YX19ZWxzZSB0cnl7YT1uKGksciksV28oZSx0LGEpfWNhdGNoKG4pe0tvKGUsdCxuKX19ZnVuY3Rpb24gV28oZSx0LG4pe3R5cGVvZiBuPT1gb2JqZWN0YCYmbiYmdHlwZW9mIG4udGhlbj09YGZ1bmN0aW9uYD9uLnRoZW4oZnVuY3Rpb24obil7R28oZSx0LG4pfSxmdW5jdGlvbihuKXtyZXR1cm4gS28oZSx0LG4pfSk6R28oZSx0LG4pfWZ1bmN0aW9uIEdvKGUsdCxuKXt0LnN0YXR1cz1gZnVsZmlsbGVkYCx0LnZhbHVlPW4scW8odCksZS5zdGF0ZT1uLHQ9ZS5wZW5kaW5nLHQhPT1udWxsJiYobj10Lm5leHQsbj09PXQ/ZS5wZW5kaW5nPW51bGw6KG49bi5uZXh0LHQubmV4dD1uLFVvKGUsbikpKX1mdW5jdGlvbiBLbyhlLHQsbil7dmFyIHI9ZS5wZW5kaW5nO2lmKGUucGVuZGluZz1udWxsLHIhPT1udWxsKXtyPXIubmV4dDtkbyB0LnN0YXR1cz1gcmVqZWN0ZWRgLHQucmVhc29uPW4scW8odCksdD10Lm5leHQ7d2hpbGUodCE9PXIpfWUuYWN0aW9uPW51bGx9ZnVuY3Rpb24gcW8oZSl7ZT1lLmxpc3RlbmVycztmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfWZ1bmN0aW9uIEpvKGUsdCl7cmV0dXJuIHR9ZnVuY3Rpb24gWW8oZSx0KXtpZihFaSl7dmFyIG49SWwuZm9ybVN0YXRlO2lmKG4hPT1udWxsKXthOnt2YXIgcj1pbztpZihFaSl7aWYoVGkpe2I6e2Zvcih2YXIgaT1UaSxhPU9pO2kubm9kZVR5cGUhPT04Oyl7aWYoIWEpe2k9bnVsbDticmVhayBifWlmKGk9ZGYoaS5uZXh0U2libGluZyksaT09PW51bGwpe2k9bnVsbDticmVhayBifX1hPWkuZGF0YSxpPWE9PT1gRiFgfHxhPT09YEZgP2k6bnVsbH1pZihpKXtUaT1kZihpLm5leHRTaWJsaW5nKSxyPWkuZGF0YT09PWBGIWA7YnJlYWsgYX19QWkocil9cj0hMX1yJiYodD1uWzBdKX19cmV0dXJuIG49d28oKSxuLm1lbW9pemVkU3RhdGU9bi5iYXNlU3RhdGU9dCxyPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6Sm8sbGFzdFJlbmRlcmVkU3RhdGU6dH0sbi5xdWV1ZT1yLG49RHMuYmluZChudWxsLGlvLHIpLHIuZGlzcGF0Y2g9bixyPUJvKCExKSxhPWtzLmJpbmQobnVsbCxpbywhMSxyLnF1ZXVlKSxyPXdvKCksaT17c3RhdGU6dCxkaXNwYXRjaDpudWxsLGFjdGlvbjplLHBlbmRpbmc6bnVsbH0sci5xdWV1ZT1pLG49SG8uYmluZChudWxsLGlvLGksYSxuKSxpLmRpc3BhdGNoPW4sci5tZW1vaXplZFN0YXRlPWUsW3QsbiwhMV19ZnVuY3Rpb24gWG8oZSl7cmV0dXJuIFpvKFRvKCksYW8sZSl9ZnVuY3Rpb24gWm8oZSx0LG4pe2lmKHQ9TW8oZSx0LEpvKVswXSxlPWpvKEFvKVswXSx0eXBlb2YgdD09YG9iamVjdGAmJnQmJnR5cGVvZiB0LnRoZW49PWBmdW5jdGlvbmApdHJ5e3ZhciByPURvKHQpfWNhdGNoKGUpe3Rocm93IGU9PT1tYT9nYTplfWVsc2Ugcj10O3Q9VG8oKTt2YXIgaT10LnF1ZXVlLGE9aS5kaXNwYXRjaDtyZXR1cm4gbiE9PXQubWVtb2l6ZWRTdGF0ZSYmKGlvLmZsYWdzfD0yMDQ4LGVzKDkse2Rlc3Ryb3k6dm9pZCAwfSxRby5iaW5kKG51bGwsaSxuKSxudWxsKSksW3IsYSxlXX1mdW5jdGlvbiBRbyhlLHQpe2UuYWN0aW9uPXR9ZnVuY3Rpb24gJG8oZSl7dmFyIHQ9VG8oKSxuPWFvO2lmKG4hPT1udWxsKXJldHVybiBabyh0LG4sZSk7VG8oKSx0PXQubWVtb2l6ZWRTdGF0ZSxuPVRvKCk7dmFyIHI9bi5xdWV1ZS5kaXNwYXRjaDtyZXR1cm4gbi5tZW1vaXplZFN0YXRlPWUsW3QsciwhMV19ZnVuY3Rpb24gZXMoZSx0LG4scil7cmV0dXJuIGU9e3RhZzplLGNyZWF0ZTpuLGRlcHM6cixpbnN0OnQsbmV4dDpudWxsfSx0PWlvLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsJiYodD1FbygpLGlvLnVwZGF0ZVF1ZXVlPXQpLG49dC5sYXN0RWZmZWN0LG49PT1udWxsP3QubGFzdEVmZmVjdD1lLm5leHQ9ZToocj1uLm5leHQsbi5uZXh0PWUsZS5uZXh0PXIsdC5sYXN0RWZmZWN0PWUpLGV9ZnVuY3Rpb24gdHMoKXtyZXR1cm4gVG8oKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIG5zKGUsdCxuLHIpe3ZhciBpPXdvKCk7aW8uZmxhZ3N8PWUsaS5tZW1vaXplZFN0YXRlPWVzKDF8dCx7ZGVzdHJveTp2b2lkIDB9LG4scj09PXZvaWQgMD9udWxsOnIpfWZ1bmN0aW9uIHJzKGUsdCxuLHIpe3ZhciBpPVRvKCk7cj1yPT09dm9pZCAwP251bGw6cjt2YXIgYT1pLm1lbW9pemVkU3RhdGUuaW5zdDthbyE9PW51bGwmJnIhPT1udWxsJiZnbyhyLGFvLm1lbW9pemVkU3RhdGUuZGVwcyk/aS5tZW1vaXplZFN0YXRlPWVzKHQsYSxuLHIpOihpby5mbGFnc3w9ZSxpLm1lbW9pemVkU3RhdGU9ZXMoMXx0LGEsbixyKSl9ZnVuY3Rpb24gaXMoZSx0KXtucyg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBhcyhlLHQpe3JzKDIwNDgsOCxlLHQpfWZ1bmN0aW9uIG9zKGUpe2lvLmZsYWdzfD00O3ZhciB0PWlvLnVwZGF0ZVF1ZXVlO2lmKHQ9PT1udWxsKXQ9RW8oKSxpby51cGRhdGVRdWV1ZT10LHQuZXZlbnRzPVtlXTtlbHNle3ZhciBuPXQuZXZlbnRzO249PT1udWxsP3QuZXZlbnRzPVtlXTpuLnB1c2goZSl9fWZ1bmN0aW9uIHNzKGUpe3ZhciB0PVRvKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gb3Moe3JlZjp0LG5leHRJbXBsOmV9KSxmdW5jdGlvbigpe2lmKEZsJjIpdGhyb3cgRXJyb3IoaSg0NDApKTtyZXR1cm4gdC5pbXBsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1mdW5jdGlvbiBjcyhlLHQpe3JldHVybiBycyg0LDIsZSx0KX1mdW5jdGlvbiBscyhlLHQpe3JldHVybiBycyg0LDQsZSx0KX1mdW5jdGlvbiB1cyhlLHQpe2lmKHR5cGVvZiB0PT1gZnVuY3Rpb25gKXtlPWUoKTt2YXIgbj10KGUpO3JldHVybiBmdW5jdGlvbigpe3R5cGVvZiBuPT1gZnVuY3Rpb25gP24oKTp0KG51bGwpfX1pZih0IT1udWxsKXJldHVybiBlPWUoKSx0LmN1cnJlbnQ9ZSxmdW5jdGlvbigpe3QuY3VycmVudD1udWxsfX1mdW5jdGlvbiBkcyhlLHQsbil7bj1uPT1udWxsP251bGw6bi5jb25jYXQoW2VdKSxycyg0LDQsdXMuYmluZChudWxsLHQsZSksbil9ZnVuY3Rpb24gZnMoKXt9ZnVuY3Rpb24gcHMoZSx0KXt2YXIgbj1UbygpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiB0IT09bnVsbCYmZ28odCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gbXMoZSx0KXt2YXIgbj1UbygpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO2lmKHQhPT1udWxsJiZnbyh0LHJbMV0pKXJldHVybiByWzBdO2lmKHI9ZSgpLGxvKXtPZSghMCk7dHJ5e2UoKX1maW5hbGx5e09lKCExKX19cmV0dXJuIG4ubWVtb2l6ZWRTdGF0ZT1bcix0XSxyfWZ1bmN0aW9uIGhzKGUsdCxuKXtyZXR1cm4gbj09PXZvaWQgMHx8cm8mMTA3Mzc0MTgyNCYmIShSbCYyNjE5MzApP2UubWVtb2l6ZWRTdGF0ZT10OihlLm1lbW9pemVkU3RhdGU9bixlPWh1KCksaW8ubGFuZXN8PWUsS2x8PWUsbil9ZnVuY3Rpb24gZ3MoZSx0LG4scil7cmV0dXJuIHByKG4sdCk/bjpVYS5jdXJyZW50PT09bnVsbD8hKHJvJjQyKXx8cm8mMTA3Mzc0MTgyNCYmIShSbCYyNjE5MzApPyhRcz0hMCxlLm1lbW9pemVkU3RhdGU9bik6KGU9aHUoKSxpby5sYW5lc3w9ZSxLbHw9ZSx0KTooZT1ocyhlLG4scikscHIoZSx0KXx8KFFzPSEwKSxlKX1mdW5jdGlvbiBfcyhlLHQsbixyLGkpe3ZhciBhPUwucDtMLnA9YSE9PTAmJjg+YT9hOjg7dmFyIG89SS5ULHM9e307SS5UPXMsa3MoZSwhMSx0LG4pO3RyeXt2YXIgYz1pKCksbD1JLlM7bCE9PW51bGwmJmwocyxjKSx0eXBlb2YgYz09YG9iamVjdGAmJmMmJnR5cGVvZiBjLnRoZW49PWBmdW5jdGlvbmA/T3MoZSx0LGNhKGMsciksbXUoZSkpOk9zKGUsdCxyLG11KGUpKX1jYXRjaChuKXtPcyhlLHQse3RoZW46ZnVuY3Rpb24oKXt9LHN0YXR1czpgcmVqZWN0ZWRgLHJlYXNvbjpufSxtdSgpKX1maW5hbGx5e0wucD1hLG8hPT1udWxsJiZzLnR5cGVzIT09bnVsbCYmKG8udHlwZXM9cy50eXBlcyksSS5UPW99fWZ1bmN0aW9uIHZzKCl7fWZ1bmN0aW9uIHlzKGUsdCxuLHIpe2lmKGUudGFnIT09NSl0aHJvdyBFcnJvcihpKDQ3NikpO3ZhciBhPWJzKGUpLnF1ZXVlO19zKGUsYSx0LFIsbj09PW51bGw/dnM6ZnVuY3Rpb24oKXtyZXR1cm4geHMoZSksbihyKX0pfWZ1bmN0aW9uIGJzKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZih0IT09bnVsbClyZXR1cm4gdDt0PXttZW1vaXplZFN0YXRlOlIsYmFzZVN0YXRlOlIsYmFzZVF1ZXVlOm51bGwscXVldWU6e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpBbyxsYXN0UmVuZGVyZWRTdGF0ZTpSfSxuZXh0Om51bGx9O3ZhciBuPXt9O3JldHVybiB0Lm5leHQ9e21lbW9pemVkU3RhdGU6bixiYXNlU3RhdGU6bixiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOkFvLGxhc3RSZW5kZXJlZFN0YXRlOm59LG5leHQ6bnVsbH0sZS5tZW1vaXplZFN0YXRlPXQsZT1lLmFsdGVybmF0ZSxlIT09bnVsbCYmKGUubWVtb2l6ZWRTdGF0ZT10KSx0fWZ1bmN0aW9uIHhzKGUpe3ZhciB0PWJzKGUpO3QubmV4dD09PW51bGwmJih0PWUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUpLE9zKGUsdC5uZXh0LnF1ZXVlLHt9LG11KCkpfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIHFpKHRwKX1mdW5jdGlvbiBDcygpe3JldHVybiBUbygpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gd3MoKXtyZXR1cm4gVG8oKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIFRzKGUpe2Zvcih2YXIgdD1lLnJldHVybjt0IT09bnVsbDspe3N3aXRjaCh0LnRhZyl7Y2FzZSAyNDpjYXNlIDM6dmFyIG49bXUoKTtlPVBhKG4pO3ZhciByPUZhKHQsZSxuKTtyIT09bnVsbCYmKGd1KHIsdCxuKSxJYShyLHQsbikpLHQ9e2NhY2hlOmVhKCl9LGUucGF5bG9hZD10O3JldHVybn10PXQucmV0dXJufX1mdW5jdGlvbiBFcyhlLHQsbil7dmFyIHI9bXUoKTtuPXtsYW5lOnIscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LEFzKGUpP2pzKHQsbik6KG49cXIoZSx0LG4sciksbiE9PW51bGwmJihndShuLGUsciksTXMobix0LHIpKSl9ZnVuY3Rpb24gRHMoZSx0LG4pe09zKGUsdCxuLG11KCkpfWZ1bmN0aW9uIE9zKGUsdCxuLHIpe3ZhciBpPXtsYW5lOnIscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKEFzKGUpKWpzKHQsaSk7ZWxzZXt2YXIgYT1lLmFsdGVybmF0ZTtpZihlLmxhbmVzPT09MCYmKGE9PT1udWxsfHxhLmxhbmVzPT09MCkmJihhPXQubGFzdFJlbmRlcmVkUmVkdWNlcixhIT09bnVsbCkpdHJ5e3ZhciBvPXQubGFzdFJlbmRlcmVkU3RhdGUscz1hKG8sbik7aWYoaS5oYXNFYWdlclN0YXRlPSEwLGkuZWFnZXJTdGF0ZT1zLHByKHMsbykpcmV0dXJuIEtyKGUsdCxpLDApLElsPT09bnVsbCYmR3IoKSwhMX1jYXRjaHt9aWYobj1xcihlLHQsaSxyKSxuIT09bnVsbClyZXR1cm4gZ3UobixlLHIpLE1zKG4sdCxyKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBrcyhlLHQsbixyKXtpZihyPXtsYW5lOjIscmV2ZXJ0TGFuZTpwZCgpLGdlc3R1cmU6bnVsbCxhY3Rpb246cixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LEFzKGUpKXtpZih0KXRocm93IEVycm9yKGkoNDc5KSl9ZWxzZSB0PXFyKGUsbixyLDIpLHQhPT1udWxsJiZndSh0LGUsMil9ZnVuY3Rpb24gQXMoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1pb3x8dCE9PW51bGwmJnQ9PT1pb31mdW5jdGlvbiBqcyhlLHQpe2NvPXNvPSEwO3ZhciBuPWUucGVuZGluZztuPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PW4ubmV4dCxuLm5leHQ9dCksZS5wZW5kaW5nPXR9ZnVuY3Rpb24gTXMoZSx0LG4pe2lmKG4mNDE5NDA0OCl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixHZShlLG4pfX12YXIgTnM9e3JlYWRDb250ZXh0OnFpLHVzZTpPbyx1c2VDYWxsYmFjazpobyx1c2VDb250ZXh0OmhvLHVzZUVmZmVjdDpobyx1c2VJbXBlcmF0aXZlSGFuZGxlOmhvLHVzZUxheW91dEVmZmVjdDpobyx1c2VJbnNlcnRpb25FZmZlY3Q6aG8sdXNlTWVtbzpobyx1c2VSZWR1Y2VyOmhvLHVzZVJlZjpobyx1c2VTdGF0ZTpobyx1c2VEZWJ1Z1ZhbHVlOmhvLHVzZURlZmVycmVkVmFsdWU6aG8sdXNlVHJhbnNpdGlvbjpobyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpobyx1c2VJZDpobyx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpobyx1c2VGb3JtU3RhdGU6aG8sdXNlQWN0aW9uU3RhdGU6aG8sdXNlT3B0aW1pc3RpYzpobyx1c2VNZW1vQ2FjaGU6aG8sdXNlQ2FjaGVSZWZyZXNoOmhvfTtOcy51c2VFZmZlY3RFdmVudD1obzt2YXIgUHM9e3JlYWRDb250ZXh0OnFpLHVzZTpPbyx1c2VDYWxsYmFjazpmdW5jdGlvbihlLHQpe3JldHVybiB3bygpLm1lbW9pemVkU3RhdGU9W2UsdD09PXZvaWQgMD9udWxsOnRdLGV9LHVzZUNvbnRleHQ6cWksdXNlRWZmZWN0OmlzLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSx0LG4pe249bj09bnVsbD9udWxsOm4uY29uY2F0KFtlXSksbnMoNDE5NDMwOCw0LHVzLmJpbmQobnVsbCx0LGUpLG4pfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnMoNDE5NDMwOCw0LGUsdCl9LHVzZUluc2VydGlvbkVmZmVjdDpmdW5jdGlvbihlLHQpe25zKDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49d28oKTt0PXQ9PT12b2lkIDA/bnVsbDp0O3ZhciByPWUoKTtpZihsbyl7T2UoITApO3RyeXtlKCl9ZmluYWxseXtPZSghMSl9fXJldHVybiBuLm1lbW9pemVkU3RhdGU9W3IsdF0scn0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9d28oKTtpZihuIT09dm9pZCAwKXt2YXIgaT1uKHQpO2lmKGxvKXtPZSghMCk7dHJ5e24odCl9ZmluYWxseXtPZSghMSl9fX1lbHNlIGk9dDtyZXR1cm4gci5tZW1vaXplZFN0YXRlPXIuYmFzZVN0YXRlPWksZT17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmUsbGFzdFJlbmRlcmVkU3RhdGU6aX0sci5xdWV1ZT1lLGU9ZS5kaXNwYXRjaD1Fcy5iaW5kKG51bGwsaW8sZSksW3IubWVtb2l6ZWRTdGF0ZSxlXX0sdXNlUmVmOmZ1bmN0aW9uKGUpe3ZhciB0PXdvKCk7cmV0dXJuIGU9e2N1cnJlbnQ6ZX0sdC5tZW1vaXplZFN0YXRlPWV9LHVzZVN0YXRlOmZ1bmN0aW9uKGUpe2U9Qm8oZSk7dmFyIHQ9ZS5xdWV1ZSxuPURzLmJpbmQobnVsbCxpbyx0KTtyZXR1cm4gdC5kaXNwYXRjaD1uLFtlLm1lbW9pemVkU3RhdGUsbl19LHVzZURlYnVnVmFsdWU6ZnMsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBocyh3bygpLGUsdCl9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1CbyghMSk7cmV0dXJuIGU9X3MuYmluZChudWxsLGlvLGUucXVldWUsITAsITEpLHdvKCkubWVtb2l6ZWRTdGF0ZT1lLFshMSxlXX0sdXNlU3luY0V4dGVybmFsU3RvcmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWlvLGE9d28oKTtpZihFaSl7aWYobj09PXZvaWQgMCl0aHJvdyBFcnJvcihpKDQwNykpO249bigpfWVsc2V7aWYobj10KCksSWw9PT1udWxsKXRocm93IEVycm9yKGkoMzQ5KSk7UmwmMTI3fHxGbyhyLHQsbil9YS5tZW1vaXplZFN0YXRlPW47dmFyIG89e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIGEucXVldWU9byxpcyhMby5iaW5kKG51bGwscixvLGUpLFtlXSksci5mbGFnc3w9MjA0OCxlcyg5LHtkZXN0cm95OnZvaWQgMH0sSW8uYmluZChudWxsLHIsbyxuLHQpLG51bGwpLG59LHVzZUlkOmZ1bmN0aW9uKCl7dmFyIGU9d28oKSx0PUlsLmlkZW50aWZpZXJQcmVmaXg7aWYoRWkpe3ZhciBuPXZpLHI9X2k7bj0ociZ+KDE8PDMyLWtlKHIpLTEpKS50b1N0cmluZygzMikrbix0PWBfYCt0K2BSX2ArbixuPXVvKyssMDxuJiYodCs9YEhgK24udG9TdHJpbmcoMzIpKSx0Kz1gX2B9ZWxzZSBuPW1vKyssdD1gX2ArdCtgcl9gK24udG9TdHJpbmcoMzIpK2BfYDtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOlNzLHVzZUZvcm1TdGF0ZTpZbyx1c2VBY3Rpb25TdGF0ZTpZbyx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUpe3ZhciB0PXdvKCk7dC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWU7dmFyIG49e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpudWxsLGxhc3RSZW5kZXJlZFN0YXRlOm51bGx9O3JldHVybiB0LnF1ZXVlPW4sdD1rcy5iaW5kKG51bGwsaW8sITAsbiksbi5kaXNwYXRjaD10LFtlLHRdfSx1c2VNZW1vQ2FjaGU6a28sdXNlQ2FjaGVSZWZyZXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHdvKCkubWVtb2l6ZWRTdGF0ZT1Ucy5iaW5kKG51bGwsaW8pfSx1c2VFZmZlY3RFdmVudDpmdW5jdGlvbihlKXt2YXIgdD13bygpLG49e2ltcGw6ZX07cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1uLGZ1bmN0aW9uKCl7aWYoRmwmMil0aHJvdyBFcnJvcihpKDQ0MCkpO3JldHVybiBuLmltcGwuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sRnM9e3JlYWRDb250ZXh0OnFpLHVzZTpPbyx1c2VDYWxsYmFjazpwcyx1c2VDb250ZXh0OnFpLHVzZUVmZmVjdDphcyx1c2VJbXBlcmF0aXZlSGFuZGxlOmRzLHVzZUluc2VydGlvbkVmZmVjdDpjcyx1c2VMYXlvdXRFZmZlY3Q6bHMsdXNlTWVtbzptcyx1c2VSZWR1Y2VyOmpvLHVzZVJlZjp0cyx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBqbyhBbyl9LHVzZURlYnVnVmFsdWU6ZnMsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBncyhUbygpLGFvLm1lbW9pemVkU3RhdGUsZSx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWpvKEFvKVswXSx0PVRvKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bdHlwZW9mIGU9PWBib29sZWFuYD9lOkRvKGUpLHRdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpQbyx1c2VJZDpDcyx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpTcyx1c2VGb3JtU3RhdGU6WG8sdXNlQWN0aW9uU3RhdGU6WG8sdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlLHQpe3JldHVybiBWbyhUbygpLGFvLGUsdCl9LHVzZU1lbW9DYWNoZTprbyx1c2VDYWNoZVJlZnJlc2g6d3N9O0ZzLnVzZUVmZmVjdEV2ZW50PXNzO3ZhciBJcz17cmVhZENvbnRleHQ6cWksdXNlOk9vLHVzZUNhbGxiYWNrOnBzLHVzZUNvbnRleHQ6cWksdXNlRWZmZWN0OmFzLHVzZUltcGVyYXRpdmVIYW5kbGU6ZHMsdXNlSW5zZXJ0aW9uRWZmZWN0OmNzLHVzZUxheW91dEVmZmVjdDpscyx1c2VNZW1vOm1zLHVzZVJlZHVjZXI6Tm8sdXNlUmVmOnRzLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIE5vKEFvKX0sdXNlRGVidWdWYWx1ZTpmcyx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49VG8oKTtyZXR1cm4gYW89PT1udWxsP2hzKG4sZSx0KTpncyhuLGFvLm1lbW9pemVkU3RhdGUsZSx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPU5vKEFvKVswXSx0PVRvKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bdHlwZW9mIGU9PWBib29sZWFuYD9lOkRvKGUpLHRdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpQbyx1c2VJZDpDcyx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpTcyx1c2VGb3JtU3RhdGU6JG8sdXNlQWN0aW9uU3RhdGU6JG8sdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlLHQpe3ZhciBuPVRvKCk7cmV0dXJuIGFvPT09bnVsbD8obi5iYXNlU3RhdGU9ZSxbZSxuLnF1ZXVlLmRpc3BhdGNoXSk6Vm8obixhbyxlLHQpfSx1c2VNZW1vQ2FjaGU6a28sdXNlQ2FjaGVSZWZyZXNoOndzfTtJcy51c2VFZmZlY3RFdmVudD1zcztmdW5jdGlvbiBMcyhlLHQsbixyKXt0PWUubWVtb2l6ZWRTdGF0ZSxuPW4ocix0KSxuPW49PW51bGw/dDpwKHt9LHQsbiksZS5tZW1vaXplZFN0YXRlPW4sZS5sYW5lcz09PTAmJihlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1uKX12YXIgUnM9e2VucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1tdSgpLGk9UGEocik7aS5wYXlsb2FkPXQsbiE9bnVsbCYmKGkuY2FsbGJhY2s9biksdD1GYShlLGksciksdCE9PW51bGwmJihndSh0LGUsciksSWEodCxlLHIpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1tdSgpLGk9UGEocik7aS50YWc9MSxpLnBheWxvYWQ9dCxuIT1udWxsJiYoaS5jYWxsYmFjaz1uKSx0PUZhKGUsaSxyKSx0IT09bnVsbCYmKGd1KHQsZSxyKSxJYSh0LGUscikpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPW11KCkscj1QYShuKTtyLnRhZz0yLHQhPW51bGwmJihyLmNhbGxiYWNrPXQpLHQ9RmEoZSxyLG4pLHQhPT1udWxsJiYoZ3UodCxlLG4pLElhKHQsZSxuKSl9fTtmdW5jdGlvbiB6cyhlLHQsbixyLGksYSxvKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PWBmdW5jdGlvbmA/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixhLG8pOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hbXIobixyKXx8IW1yKGksYSk6ITB9ZnVuY3Rpb24gQnMoZSx0LG4scil7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PWBmdW5jdGlvbmAmJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT1gZnVuY3Rpb25gJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksdC5zdGF0ZSE9PWUmJlJzLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIFZzKGUsdCl7dmFyIG49dDtpZihgcmVmYGluIHQpZm9yKHZhciByIGluIG49e30sdClyIT09YHJlZmAmJihuW3JdPXRbcl0pO2lmKGU9ZS5kZWZhdWx0UHJvcHMpZm9yKHZhciBpIGluIG49PT10JiYobj1wKHt9LG4pKSxlKW5baV09PT12b2lkIDAmJihuW2ldPWVbaV0pO3JldHVybiBufWZ1bmN0aW9uIEhzKGUpe1ZyKGUpfWZ1bmN0aW9uIFVzKGUpe2NvbnNvbGUuZXJyb3IoZSl9ZnVuY3Rpb24gV3MoZSl7VnIoZSl9ZnVuY3Rpb24gR3MoZSx0KXt0cnl7dmFyIG49ZS5vblVuY2F1Z2h0RXJyb3I7bih0LnZhbHVlLHtjb21wb25lbnRTdGFjazp0LnN0YWNrfSl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19ZnVuY3Rpb24gS3MoZSx0LG4pe3RyeXt2YXIgcj1lLm9uQ2F1Z2h0RXJyb3I7cihuLnZhbHVlLHtjb21wb25lbnRTdGFjazpuLnN0YWNrLGVycm9yQm91bmRhcnk6dC50YWc9PT0xP3Quc3RhdGVOb2RlOm51bGx9KX1jYXRjaChlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfX1mdW5jdGlvbiBxcyhlLHQsbil7cmV0dXJuIG49UGEobiksbi50YWc9MyxuLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH0sbi5jYWxsYmFjaz1mdW5jdGlvbigpe0dzKGUsdCl9LG59ZnVuY3Rpb24gSnMoZSl7cmV0dXJuIGU9UGEoZSksZS50YWc9MyxlfWZ1bmN0aW9uIFlzKGUsdCxuLHIpe3ZhciBpPW4udHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYodHlwZW9mIGk9PWBmdW5jdGlvbmApe3ZhciBhPXIudmFsdWU7ZS5wYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYSl9LGUuY2FsbGJhY2s9ZnVuY3Rpb24oKXtLcyh0LG4scil9fXZhciBvPW4uc3RhdGVOb2RlO28hPT1udWxsJiZ0eXBlb2Ygby5jb21wb25lbnREaWRDYXRjaD09YGZ1bmN0aW9uYCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oKXtLcyh0LG4sciksdHlwZW9mIGkhPWBmdW5jdGlvbmAmJihpdT09PW51bGw/aXU9bmV3IFNldChbdGhpc10pOml1LmFkZCh0aGlzKSk7dmFyIGU9ci5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKHIudmFsdWUse2NvbXBvbmVudFN0YWNrOmU9PT1udWxsP2BgOmV9KX0pfWZ1bmN0aW9uIFhzKGUsdCxuLHIsYSl7aWYobi5mbGFnc3w9MzI3NjgsdHlwZW9mIHI9PWBvYmplY3RgJiZyJiZ0eXBlb2Ygci50aGVuPT1gZnVuY3Rpb25gKXtpZih0PW4uYWx0ZXJuYXRlLHQhPT1udWxsJiZXaSh0LG4sYSwhMCksbj1KYS5jdXJyZW50LG4hPT1udWxsKXtzd2l0Y2gobi50YWcpe2Nhc2UgMzE6Y2FzZSAxMzpyZXR1cm4gWWE9PT1udWxsP091KCk6bi5hbHRlcm5hdGU9PT1udWxsJiZHbD09PTAmJihHbD0zKSxuLmZsYWdzJj0tMjU3LG4uZmxhZ3N8PTY1NTM2LG4ubGFuZXM9YSxyPT09X2E/bi5mbGFnc3w9MTYzODQ6KHQ9bi51cGRhdGVRdWV1ZSx0PT09bnVsbD9uLnVwZGF0ZVF1ZXVlPW5ldyBTZXQoW3JdKTp0LmFkZChyKSxxdShlLHIsYSkpLCExO2Nhc2UgMjI6cmV0dXJuIG4uZmxhZ3N8PTY1NTM2LHI9PT1fYT9uLmZsYWdzfD0xNjM4NDoodD1uLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsPyh0PXt0cmFuc2l0aW9uczpudWxsLG1hcmtlckluc3RhbmNlczpudWxsLHJldHJ5UXVldWU6bmV3IFNldChbcl0pfSxuLnVwZGF0ZVF1ZXVlPXQpOihuPXQucmV0cnlRdWV1ZSxuPT09bnVsbD90LnJldHJ5UXVldWU9bmV3IFNldChbcl0pOm4uYWRkKHIpKSxxdShlLHIsYSkpLCExfXRocm93IEVycm9yKGkoNDM1LG4udGFnKSl9cmV0dXJuIHF1KGUscixhKSxPdSgpLCExfWlmKEVpKXJldHVybiB0PUphLmN1cnJlbnQsdD09PW51bGw/KHIhPT1raSYmKHQ9RXJyb3IoaSg0MjMpLHtjYXVzZTpyfSksSWkobGkodCxuKSkpLGU9ZS5jdXJyZW50LmFsdGVybmF0ZSxlLmZsYWdzfD02NTUzNixhJj0tYSxlLmxhbmVzfD1hLHI9bGkocixuKSxhPXFzKGUuc3RhdGVOb2RlLHIsYSksTGEoZSxhKSxHbCE9PTQmJihHbD0yKSk6KCEodC5mbGFncyY2NTUzNikmJih0LmZsYWdzfD0yNTYpLHQuZmxhZ3N8PTY1NTM2LHQubGFuZXM9YSxyIT09a2kmJihlPUVycm9yKGkoNDIyKSx7Y2F1c2U6cn0pLElpKGxpKGUsbikpKSksITE7dmFyIG89RXJyb3IoaSg1MjApLHtjYXVzZTpyfSk7aWYobz1saShvLG4pLFpsPT09bnVsbD9abD1bb106WmwucHVzaChvKSxHbCE9PTQmJihHbD0yKSx0PT09bnVsbClyZXR1cm4hMDtyPWxpKHIsbiksbj10O2Rve3N3aXRjaChuLnRhZyl7Y2FzZSAzOnJldHVybiBuLmZsYWdzfD02NTUzNixlPWEmLWEsbi5sYW5lc3w9ZSxlPXFzKG4uc3RhdGVOb2RlLHIsZSksTGEobixlKSwhMTtjYXNlIDE6aWYodD1uLnR5cGUsbz1uLnN0YXRlTm9kZSwhKG4uZmxhZ3MmMTI4KSYmKHR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09YGZ1bmN0aW9uYHx8byE9PW51bGwmJnR5cGVvZiBvLmNvbXBvbmVudERpZENhdGNoPT1gZnVuY3Rpb25gJiYoaXU9PT1udWxsfHwhaXUuaGFzKG8pKSkpcmV0dXJuIG4uZmxhZ3N8PTY1NTM2LGEmPS1hLG4ubGFuZXN8PWEsYT1KcyhhKSxZcyhhLGUsbixyKSxMYShuLGEpLCExfW49bi5yZXR1cm59d2hpbGUobiE9PW51bGwpO3JldHVybiExfXZhciBacz1FcnJvcihpKDQ2MSkpLFFzPSExO2Z1bmN0aW9uICRzKGUsdCxuLHIpe3QuY2hpbGQ9ZT09PW51bGw/QWEodCxudWxsLG4scik6a2EodCxlLmNoaWxkLG4scil9ZnVuY3Rpb24gZWMoZSx0LG4scixpKXtuPW4ucmVuZGVyO3ZhciBhPXQucmVmO2lmKGByZWZgaW4gcil7dmFyIG89e307Zm9yKHZhciBzIGluIHIpcyE9PWByZWZgJiYob1tzXT1yW3NdKX1lbHNlIG89cjtyZXR1cm4gS2kodCkscj1fbyhlLHQsbixvLGEsaSkscz14bygpLGUhPT1udWxsJiYhUXM/KFNvKGUsdCxpKSx3YyhlLHQsaSkpOihFaSYmcyYmeGkodCksdC5mbGFnc3w9MSwkcyhlLHQscixpKSx0LmNoaWxkKX1mdW5jdGlvbiB0YyhlLHQsbixyLGkpe2lmKGU9PT1udWxsKXt2YXIgYT1uLnR5cGU7cmV0dXJuIHR5cGVvZiBhPT1gZnVuY3Rpb25gJiYhZWkoYSkmJmEuZGVmYXVsdFByb3BzPT09dm9pZCAwJiZuLmNvbXBhcmU9PT1udWxsPyh0LnRhZz0xNSx0LnR5cGU9YSxuYyhlLHQsYSxyLGkpKTooZT1yaShuLnR5cGUsbnVsbCxyLHQsdC5tb2RlLGkpLGUucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKX1pZihhPWUuY2hpbGQsIVRjKGUsaSkpe3ZhciBvPWEubWVtb2l6ZWRQcm9wcztpZihuPW4uY29tcGFyZSxuPW49PT1udWxsP21yOm4sbihvLHIpJiZlLnJlZj09PXQucmVmKXJldHVybiB3YyhlLHQsaSl9cmV0dXJuIHQuZmxhZ3N8PTEsZT10aShhLHIpLGUucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lfWZ1bmN0aW9uIG5jKGUsdCxuLHIsaSl7aWYoZSE9PW51bGwpe3ZhciBhPWUubWVtb2l6ZWRQcm9wcztpZihtcihhLHIpJiZlLnJlZj09PXQucmVmKWlmKFFzPSExLHQucGVuZGluZ1Byb3BzPXI9YSxUYyhlLGkpKWUuZmxhZ3MmMTMxMDcyJiYoUXM9ITApO2Vsc2UgcmV0dXJuIHQubGFuZXM9ZS5sYW5lcyx3YyhlLHQsaSl9cmV0dXJuIHVjKGUsdCxuLHIsaSl9ZnVuY3Rpb24gcmMoZSx0LG4scil7dmFyIGk9ci5jaGlsZHJlbixhPWU9PT1udWxsP251bGw6ZS5tZW1vaXplZFN0YXRlO2lmKGU9PT1udWxsJiZ0LnN0YXRlTm9kZT09PW51bGwmJih0LnN0YXRlTm9kZT17X3Zpc2liaWxpdHk6MSxfcGVuZGluZ01hcmtlcnM6bnVsbCxfcmV0cnlDYWNoZTpudWxsLF90cmFuc2l0aW9uczpudWxsfSksci5tb2RlPT09YGhpZGRlbmApe2lmKHQuZmxhZ3MmMTI4KXtpZihhPWE9PT1udWxsP246YS5iYXNlTGFuZXN8bixlIT09bnVsbCl7Zm9yKHI9dC5jaGlsZD1lLmNoaWxkLGk9MDtyIT09bnVsbDspaT1pfHIubGFuZXN8ci5jaGlsZExhbmVzLHI9ci5zaWJsaW5nO3I9aSZ+YX1lbHNlIHI9MCx0LmNoaWxkPW51bGw7cmV0dXJuIGFjKGUsdCxhLG4scil9aWYobiY1MzY4NzA5MTIpdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbH0sZSE9PW51bGwmJmZhKHQsYT09PW51bGw/bnVsbDphLmNhY2hlUG9vbCksYT09PW51bGw/S2EoKTpHYSh0LGEpLFFhKHQpO2Vsc2UgcmV0dXJuIHI9dC5sYW5lcz01MzY4NzA5MTIsYWMoZSx0LGE9PT1udWxsP246YS5iYXNlTGFuZXN8bixuLHIpfWVsc2UgYT09PW51bGw/KGUhPT1udWxsJiZmYSh0LG51bGwpLEthKCksJGEodCkpOihmYSh0LGEuY2FjaGVQb29sKSxHYSh0LGEpLCRhKHQpLHQubWVtb2l6ZWRTdGF0ZT1udWxsKTtyZXR1cm4gJHMoZSx0LGksbiksdC5jaGlsZH1mdW5jdGlvbiBpYyhlLHQpe3JldHVybiBlIT09bnVsbCYmZS50YWc9PT0yMnx8dC5zdGF0ZU5vZGUhPT1udWxsfHwodC5zdGF0ZU5vZGU9e192aXNpYmlsaXR5OjEsX3BlbmRpbmdNYXJrZXJzOm51bGwsX3JldHJ5Q2FjaGU6bnVsbCxfdHJhbnNpdGlvbnM6bnVsbH0pLHQuc2libGluZ31mdW5jdGlvbiBhYyhlLHQsbixyLGkpe3ZhciBhPWRhKCk7cmV0dXJuIGE9YT09PW51bGw/bnVsbDp7cGFyZW50OiRpLl9jdXJyZW50VmFsdWUscG9vbDphfSx0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpuLGNhY2hlUG9vbDphfSxlIT09bnVsbCYmZmEodCxudWxsKSxLYSgpLFFhKHQpLGUhPT1udWxsJiZXaShlLHQsciwhMCksdC5jaGlsZExhbmVzPWksbnVsbH1mdW5jdGlvbiBvYyhlLHQpe3JldHVybiB0PXljKHttb2RlOnQubW9kZSxjaGlsZHJlbjp0LmNoaWxkcmVufSxlLm1vZGUpLHQucmVmPWUucmVmLGUuY2hpbGQ9dCx0LnJldHVybj1lLHR9ZnVuY3Rpb24gc2MoZSx0LG4pe3JldHVybiBrYSh0LGUuY2hpbGQsbnVsbCxuKSxlPW9jKHQsdC5wZW5kaW5nUHJvcHMpLGUuZmxhZ3N8PTIsZW8odCksdC5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiBjYyhlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsYT0odC5mbGFncyYxMjgpIT0wO2lmKHQuZmxhZ3MmPS0xMjksZT09PW51bGwpe2lmKEVpKXtpZihyLm1vZGU9PT1gaGlkZGVuYClyZXR1cm4gZT1vYyh0LHIpLHQubGFuZXM9NTM2ODcwOTEyLGljKG51bGwsZSk7aWYoWmEodCksKGU9VGkpPyhlPWNmKGUsT2kpLGU9ZSE9PW51bGwmJmUuZGF0YT09PWAmYD9lOm51bGwsZSE9PW51bGwmJih0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpnaT09PW51bGw/bnVsbDp7aWQ6X2ksb3ZlcmZsb3c6dml9LHJldHJ5TGFuZTo1MzY4NzA5MTIsaHlkcmF0aW9uRXJyb3JzOm51bGx9LG49b2koZSksbi5yZXR1cm49dCx0LmNoaWxkPW4sd2k9dCxUaT1udWxsKSk6ZT1udWxsLGU9PT1udWxsKXRocm93IEFpKHQpO3JldHVybiB0LmxhbmVzPTUzNjg3MDkxMixudWxsfXJldHVybiBvYyh0LHIpfXZhciBvPWUubWVtb2l6ZWRTdGF0ZTtpZihvIT09bnVsbCl7dmFyIHM9by5kZWh5ZHJhdGVkO2lmKFphKHQpLGEpaWYodC5mbGFncyYyNTYpdC5mbGFncyY9LTI1Nyx0PXNjKGUsdCxuKTtlbHNlIGlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpdC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCx0PW51bGw7ZWxzZSB0aHJvdyBFcnJvcihpKDU1OCkpO2Vsc2UgaWYoUXN8fFdpKGUsdCxuLCExKSxhPShuJmUuY2hpbGRMYW5lcykhPT0wLFFzfHxhKXtpZihyPUlsLHIhPT1udWxsJiYocz1LZShyLG4pLHMhPT0wJiZzIT09by5yZXRyeUxhbmUpKXRocm93IG8ucmV0cnlMYW5lPXMsSnIoZSxzKSxndShyLGUscyksWnM7T3UoKSx0PXNjKGUsdCxuKX1lbHNlIGU9by50cmVlQ29udGV4dCxUaT1kZihzLm5leHRTaWJsaW5nKSx3aT10LEVpPSEwLERpPW51bGwsT2k9ITEsZSE9PW51bGwmJkNpKHQsZSksdD1vYyh0LHIpLHQuZmxhZ3N8PTQwOTY7cmV0dXJuIHR9cmV0dXJuIGU9dGkoZS5jaGlsZCx7bW9kZTpyLm1vZGUsY2hpbGRyZW46ci5jaGlsZHJlbn0pLGUucmVmPXQucmVmLHQuY2hpbGQ9ZSxlLnJldHVybj10LGV9ZnVuY3Rpb24gbGMoZSx0KXt2YXIgbj10LnJlZjtpZihuPT09bnVsbCllIT09bnVsbCYmZS5yZWYhPT1udWxsJiYodC5mbGFnc3w9NDE5NDgxNik7ZWxzZXtpZih0eXBlb2YgbiE9YGZ1bmN0aW9uYCYmdHlwZW9mIG4hPWBvYmplY3RgKXRocm93IEVycm9yKGkoMjg0KSk7KGU9PT1udWxsfHxlLnJlZiE9PW4pJiYodC5mbGFnc3w9NDE5NDgxNil9fWZ1bmN0aW9uIHVjKGUsdCxuLHIsaSl7cmV0dXJuIEtpKHQpLG49X28oZSx0LG4scix2b2lkIDAsaSkscj14bygpLGUhPT1udWxsJiYhUXM/KFNvKGUsdCxpKSx3YyhlLHQsaSkpOihFaSYmciYmeGkodCksdC5mbGFnc3w9MSwkcyhlLHQsbixpKSx0LmNoaWxkKX1mdW5jdGlvbiBkYyhlLHQsbixyLGksYSl7cmV0dXJuIEtpKHQpLHQudXBkYXRlUXVldWU9bnVsbCxuPXlvKHQscixuLGkpLHZvKGUpLHI9eG8oKSxlIT09bnVsbCYmIVFzPyhTbyhlLHQsYSksd2MoZSx0LGEpKTooRWkmJnImJnhpKHQpLHQuZmxhZ3N8PTEsJHMoZSx0LG4sYSksdC5jaGlsZCl9ZnVuY3Rpb24gZmMoZSx0LG4scixpKXtpZihLaSh0KSx0LnN0YXRlTm9kZT09PW51bGwpe3ZhciBhPVpyLG89bi5jb250ZXh0VHlwZTt0eXBlb2Ygbz09YG9iamVjdGAmJm8mJihhPXFpKG8pKSxhPW5ldyBuKHIsYSksdC5tZW1vaXplZFN0YXRlPWEuc3RhdGUhPT1udWxsJiZhLnN0YXRlIT09dm9pZCAwP2Euc3RhdGU6bnVsbCxhLnVwZGF0ZXI9UnMsdC5zdGF0ZU5vZGU9YSxhLl9yZWFjdEludGVybmFscz10LGE9dC5zdGF0ZU5vZGUsYS5wcm9wcz1yLGEuc3RhdGU9dC5tZW1vaXplZFN0YXRlLGEucmVmcz17fSxNYSh0KSxvPW4uY29udGV4dFR5cGUsYS5jb250ZXh0PXR5cGVvZiBvPT1gb2JqZWN0YCYmbz9xaShvKTpacixhLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxvPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBvPT1gZnVuY3Rpb25gJiYoTHModCxuLG8sciksYS5zdGF0ZT10Lm1lbW9pemVkU3RhdGUpLHR5cGVvZiBuLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09YGZ1bmN0aW9uYHx8dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PWBmdW5jdGlvbmB8fHR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPWBmdW5jdGlvbmAmJnR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudCE9YGZ1bmN0aW9uYHx8KG89YS5zdGF0ZSx0eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQ9PWBmdW5jdGlvbmAmJmEuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09YGZ1bmN0aW9uYCYmYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksbyE9PWEuc3RhdGUmJlJzLmVucXVldWVSZXBsYWNlU3RhdGUoYSxhLnN0YXRlLG51bGwpLEJhKHQscixhLGkpLHphKCksYS5zdGF0ZT10Lm1lbW9pemVkU3RhdGUpLHR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50PT1gZnVuY3Rpb25gJiYodC5mbGFnc3w9NDE5NDMwOCkscj0hMH1lbHNlIGlmKGU9PT1udWxsKXthPXQuc3RhdGVOb2RlO3ZhciBzPXQubWVtb2l6ZWRQcm9wcyxjPVZzKG4scyk7YS5wcm9wcz1jO3ZhciBsPWEuY29udGV4dCx1PW4uY29udGV4dFR5cGU7bz1acix0eXBlb2YgdT09YG9iamVjdGAmJnUmJihvPXFpKHUpKTt2YXIgZD1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczt1PXR5cGVvZiBkPT1gZnVuY3Rpb25gfHx0eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09YGZ1bmN0aW9uYCxzPXQucGVuZGluZ1Byb3BzIT09cyx1fHx0eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9YGZ1bmN0aW9uYCYmdHlwZW9mIGEuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9YGZ1bmN0aW9uYHx8KHN8fGwhPT1vKSYmQnModCxhLHIsbyksamE9ITE7dmFyIGY9dC5tZW1vaXplZFN0YXRlO2Euc3RhdGU9ZixCYSh0LHIsYSxpKSx6YSgpLGw9dC5tZW1vaXplZFN0YXRlLHN8fGYhPT1sfHxqYT8odHlwZW9mIGQ9PWBmdW5jdGlvbmAmJihMcyh0LG4sZCxyKSxsPXQubWVtb2l6ZWRTdGF0ZSksKGM9amF8fHpzKHQsbixjLHIsZixsLG8pKT8odXx8dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCE9YGZ1bmN0aW9uYCYmdHlwZW9mIGEuY29tcG9uZW50V2lsbE1vdW50IT1gZnVuY3Rpb25gfHwodHlwZW9mIGEuY29tcG9uZW50V2lsbE1vdW50PT1gZnVuY3Rpb25gJiZhLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PWBmdW5jdGlvbmAmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSx0eXBlb2YgYS5jb21wb25lbnREaWRNb3VudD09YGZ1bmN0aW9uYCYmKHQuZmxhZ3N8PTQxOTQzMDgpKToodHlwZW9mIGEuY29tcG9uZW50RGlkTW91bnQ9PWBmdW5jdGlvbmAmJih0LmZsYWdzfD00MTk0MzA4KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9bCksYS5wcm9wcz1yLGEuc3RhdGU9bCxhLmNvbnRleHQ9byxyPWMpOih0eXBlb2YgYS5jb21wb25lbnREaWRNb3VudD09YGZ1bmN0aW9uYCYmKHQuZmxhZ3N8PTQxOTQzMDgpLHI9ITEpfWVsc2V7YT10LnN0YXRlTm9kZSxOYShlLHQpLG89dC5tZW1vaXplZFByb3BzLHU9VnMobixvKSxhLnByb3BzPXUsZD10LnBlbmRpbmdQcm9wcyxmPWEuY29udGV4dCxsPW4uY29udGV4dFR5cGUsYz1acix0eXBlb2YgbD09YG9iamVjdGAmJmwmJihjPXFpKGwpKSxzPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLChsPXR5cGVvZiBzPT1gZnVuY3Rpb25gfHx0eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09YGZ1bmN0aW9uYCl8fHR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1gZnVuY3Rpb25gJiZ0eXBlb2YgYS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1gZnVuY3Rpb25gfHwobyE9PWR8fGYhPT1jKSYmQnModCxhLHIsYyksamE9ITEsZj10Lm1lbW9pemVkU3RhdGUsYS5zdGF0ZT1mLEJhKHQscixhLGkpLHphKCk7dmFyIHA9dC5tZW1vaXplZFN0YXRlO28hPT1kfHxmIT09cHx8amF8fGUhPT1udWxsJiZlLmRlcGVuZGVuY2llcyE9PW51bGwmJkdpKGUuZGVwZW5kZW5jaWVzKT8odHlwZW9mIHM9PWBmdW5jdGlvbmAmJihMcyh0LG4scyxyKSxwPXQubWVtb2l6ZWRTdGF0ZSksKHU9amF8fHpzKHQsbix1LHIsZixwLGMpfHxlIT09bnVsbCYmZS5kZXBlbmRlbmNpZXMhPT1udWxsJiZHaShlLmRlcGVuZGVuY2llcykpPyhsfHx0eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSE9YGZ1bmN0aW9uYCYmdHlwZW9mIGEuY29tcG9uZW50V2lsbFVwZGF0ZSE9YGZ1bmN0aW9uYHx8KHR5cGVvZiBhLmNvbXBvbmVudFdpbGxVcGRhdGU9PWBmdW5jdGlvbmAmJmEuY29tcG9uZW50V2lsbFVwZGF0ZShyLHAsYyksdHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGU9PWBmdW5jdGlvbmAmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUocixwLGMpKSx0eXBlb2YgYS5jb21wb25lbnREaWRVcGRhdGU9PWBmdW5jdGlvbmAmJih0LmZsYWdzfD00KSx0eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09YGZ1bmN0aW9uYCYmKHQuZmxhZ3N8PTEwMjQpKToodHlwZW9mIGEuY29tcG9uZW50RGlkVXBkYXRlIT1gZnVuY3Rpb25gfHxvPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPWBmdW5jdGlvbmB8fG89PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9cCksYS5wcm9wcz1yLGEuc3RhdGU9cCxhLmNvbnRleHQ9YyxyPXUpOih0eXBlb2YgYS5jb21wb25lbnREaWRVcGRhdGUhPWBmdW5jdGlvbmB8fG89PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSx0eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9YGZ1bmN0aW9uYHx8bz09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHI9ITEpfXJldHVybiBhPXIsbGMoZSx0KSxyPSh0LmZsYWdzJjEyOCkhPTAsYXx8cj8oYT10LnN0YXRlTm9kZSxuPXImJnR5cGVvZiBuLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9YGZ1bmN0aW9uYD9udWxsOmEucmVuZGVyKCksdC5mbGFnc3w9MSxlIT09bnVsbCYmcj8odC5jaGlsZD1rYSh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkPWthKHQsbnVsbCxuLGkpKTokcyhlLHQsbixpKSx0Lm1lbW9pemVkU3RhdGU9YS5zdGF0ZSxlPXQuY2hpbGQpOmU9d2MoZSx0LGkpLGV9ZnVuY3Rpb24gcGMoZSx0LG4scil7cmV0dXJuIFBpKCksdC5mbGFnc3w9MjU2LCRzKGUsdCxuLHIpLHQuY2hpbGR9dmFyIG1jPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MCxoeWRyYXRpb25FcnJvcnM6bnVsbH07ZnVuY3Rpb24gaGMoZSl7cmV0dXJue2Jhc2VMYW5lczplLGNhY2hlUG9vbDpwYSgpfX1mdW5jdGlvbiBnYyhlLHQsbil7cmV0dXJuIGU9ZT09PW51bGw/MDplLmNoaWxkTGFuZXMmfm4sdCYmKGV8PVlsKSxlfWZ1bmN0aW9uIF9jKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxhPSExLG89KHQuZmxhZ3MmMTI4KSE9MCxzO2lmKChzPW8pfHwocz1lIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlPT09bnVsbD8hMToodG8uY3VycmVudCYyKSE9MCkscyYmKGE9ITAsdC5mbGFncyY9LTEyOSkscz0odC5mbGFncyYzMikhPTAsdC5mbGFncyY9LTMzLGU9PT1udWxsKXtpZihFaSl7aWYoYT9YYSh0KTokYSh0KSwoZT1UaSk/KGU9Y2YoZSxPaSksZT1lIT09bnVsbCYmZS5kYXRhIT09YCZgP2U6bnVsbCxlIT09bnVsbCYmKHQubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDplLHRyZWVDb250ZXh0OmdpPT09bnVsbD9udWxsOntpZDpfaSxvdmVyZmxvdzp2aX0scmV0cnlMYW5lOjUzNjg3MDkxMixoeWRyYXRpb25FcnJvcnM6bnVsbH0sbj1vaShlKSxuLnJldHVybj10LHQuY2hpbGQ9bix3aT10LFRpPW51bGwpKTplPW51bGwsZT09PW51bGwpdGhyb3cgQWkodCk7cmV0dXJuIHVmKGUpP3QubGFuZXM9MzI6dC5sYW5lcz01MzY4NzA5MTIsbnVsbH12YXIgYz1yLmNoaWxkcmVuO3JldHVybiByPXIuZmFsbGJhY2ssYT8oJGEodCksYT10Lm1vZGUsYz15Yyh7bW9kZTpgaGlkZGVuYCxjaGlsZHJlbjpjfSxhKSxyPWlpKHIsYSxuLG51bGwpLGMucmV0dXJuPXQsci5yZXR1cm49dCxjLnNpYmxpbmc9cix0LmNoaWxkPWMscj10LmNoaWxkLHIubWVtb2l6ZWRTdGF0ZT1oYyhuKSxyLmNoaWxkTGFuZXM9Z2MoZSxzLG4pLHQubWVtb2l6ZWRTdGF0ZT1tYyxpYyhudWxsLHIpKTooWGEodCksdmModCxjKSl9dmFyIGw9ZS5tZW1vaXplZFN0YXRlO2lmKGwhPT1udWxsJiYoYz1sLmRlaHlkcmF0ZWQsYyE9PW51bGwpKXtpZihvKXQuZmxhZ3MmMjU2PyhYYSh0KSx0LmZsYWdzJj0tMjU3LHQ9YmMoZSx0LG4pKTp0Lm1lbW9pemVkU3RhdGU9PT1udWxsPygkYSh0KSxjPXIuZmFsbGJhY2ssYT10Lm1vZGUscj15Yyh7bW9kZTpgdmlzaWJsZWAsY2hpbGRyZW46ci5jaGlsZHJlbn0sYSksYz1paShjLGEsbixudWxsKSxjLmZsYWdzfD0yLHIucmV0dXJuPXQsYy5yZXR1cm49dCxyLnNpYmxpbmc9Yyx0LmNoaWxkPXIsa2EodCxlLmNoaWxkLG51bGwsbikscj10LmNoaWxkLHIubWVtb2l6ZWRTdGF0ZT1oYyhuKSxyLmNoaWxkTGFuZXM9Z2MoZSxzLG4pLHQubWVtb2l6ZWRTdGF0ZT1tYyx0PWljKG51bGwscikpOigkYSh0KSx0LmNoaWxkPWUuY2hpbGQsdC5mbGFnc3w9MTI4LHQ9bnVsbCk7ZWxzZSBpZihYYSh0KSx1ZihjKSl7aWYocz1jLm5leHRTaWJsaW5nJiZjLm5leHRTaWJsaW5nLmRhdGFzZXQscyl2YXIgdT1zLmRnc3Q7cz11LHI9RXJyb3IoaSg0MTkpKSxyLnN0YWNrPWBgLHIuZGlnZXN0PXMsSWkoe3ZhbHVlOnIsc291cmNlOm51bGwsc3RhY2s6bnVsbH0pLHQ9YmMoZSx0LG4pfWVsc2UgaWYoUXN8fFdpKGUsdCxuLCExKSxzPShuJmUuY2hpbGRMYW5lcykhPT0wLFFzfHxzKXtpZihzPUlsLHMhPT1udWxsJiYocj1LZShzLG4pLHIhPT0wJiZyIT09bC5yZXRyeUxhbmUpKXRocm93IGwucmV0cnlMYW5lPXIsSnIoZSxyKSxndShzLGUsciksWnM7bGYoYyl8fE91KCksdD1iYyhlLHQsbil9ZWxzZSBsZihjKT8odC5mbGFnc3w9MTkyLHQuY2hpbGQ9ZS5jaGlsZCx0PW51bGwpOihlPWwudHJlZUNvbnRleHQsVGk9ZGYoYy5uZXh0U2libGluZyksd2k9dCxFaT0hMCxEaT1udWxsLE9pPSExLGUhPT1udWxsJiZDaSh0LGUpLHQ9dmModCxyLmNoaWxkcmVuKSx0LmZsYWdzfD00MDk2KTtyZXR1cm4gdH1yZXR1cm4gYT8oJGEodCksYz1yLmZhbGxiYWNrLGE9dC5tb2RlLGw9ZS5jaGlsZCx1PWwuc2libGluZyxyPXRpKGwse21vZGU6YGhpZGRlbmAsY2hpbGRyZW46ci5jaGlsZHJlbn0pLHIuc3VidHJlZUZsYWdzPWwuc3VidHJlZUZsYWdzJjY1MDExNzEyLHU9PT1udWxsPyhjPWlpKGMsYSxuLG51bGwpLGMuZmxhZ3N8PTIpOmM9dGkodSxjKSxjLnJldHVybj10LHIucmV0dXJuPXQsci5zaWJsaW5nPWMsdC5jaGlsZD1yLGljKG51bGwscikscj10LmNoaWxkLGM9ZS5jaGlsZC5tZW1vaXplZFN0YXRlLGM9PT1udWxsP2M9aGMobik6KGE9Yy5jYWNoZVBvb2wsYT09PW51bGw/YT1wYSgpOihsPSRpLl9jdXJyZW50VmFsdWUsYT1hLnBhcmVudD09PWw/YTp7cGFyZW50OmwscG9vbDpsfSksYz17YmFzZUxhbmVzOmMuYmFzZUxhbmVzfG4sY2FjaGVQb29sOmF9KSxyLm1lbW9pemVkU3RhdGU9YyxyLmNoaWxkTGFuZXM9Z2MoZSxzLG4pLHQubWVtb2l6ZWRTdGF0ZT1tYyxpYyhlLmNoaWxkLHIpKTooWGEodCksbj1lLmNoaWxkLGU9bi5zaWJsaW5nLG49dGkobix7bW9kZTpgdmlzaWJsZWAsY2hpbGRyZW46ci5jaGlsZHJlbn0pLG4ucmV0dXJuPXQsbi5zaWJsaW5nPW51bGwsZSE9PW51bGwmJihzPXQuZGVsZXRpb25zLHM9PT1udWxsPyh0LmRlbGV0aW9ucz1bZV0sdC5mbGFnc3w9MTYpOnMucHVzaChlKSksdC5jaGlsZD1uLHQubWVtb2l6ZWRTdGF0ZT1udWxsLG4pfWZ1bmN0aW9uIHZjKGUsdCl7cmV0dXJuIHQ9eWMoe21vZGU6YHZpc2libGVgLGNoaWxkcmVuOnR9LGUubW9kZSksdC5yZXR1cm49ZSxlLmNoaWxkPXR9ZnVuY3Rpb24geWMoZSx0KXtyZXR1cm4gZT0kcigyMixlLG51bGwsdCksZS5sYW5lcz0wLGV9ZnVuY3Rpb24gYmMoZSx0LG4pe3JldHVybiBrYSh0LGUuY2hpbGQsbnVsbCxuKSxlPXZjKHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLGUuZmxhZ3N8PTIsdC5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiB4YyhlLHQsbil7ZS5sYW5lc3w9dDt2YXIgcj1lLmFsdGVybmF0ZTtyIT09bnVsbCYmKHIubGFuZXN8PXQpLEhpKGUucmV0dXJuLHQsbil9ZnVuY3Rpb24gU2MoZSx0LG4scixpLGEpe3ZhciBvPWUubWVtb2l6ZWRTdGF0ZTtvPT09bnVsbD9lLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOnQscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpyLHRhaWw6bix0YWlsTW9kZTppLHRyZWVGb3JrQ291bnQ6YX06KG8uaXNCYWNrd2FyZHM9dCxvLnJlbmRlcmluZz1udWxsLG8ucmVuZGVyaW5nU3RhcnRUaW1lPTAsby5sYXN0PXIsby50YWlsPW4sby50YWlsTW9kZT1pLG8udHJlZUZvcmtDb3VudD1hKX1mdW5jdGlvbiBDYyhlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsaT1yLnJldmVhbE9yZGVyLGE9ci50YWlsO3I9ci5jaGlsZHJlbjt2YXIgbz10by5jdXJyZW50LHM9KG8mMikhPTA7aWYocz8obz1vJjF8Mix0LmZsYWdzfD0xMjgpOm8mPTEsSCh0byxvKSwkcyhlLHQscixuKSxyPUVpP3BpOjAsIXMmJmUhPT1udWxsJiZlLmZsYWdzJjEyOClhOmZvcihlPXQuY2hpbGQ7ZSE9PW51bGw7KXtpZihlLnRhZz09PTEzKWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJnhjKGUsbix0KTtlbHNlIGlmKGUudGFnPT09MTkpeGMoZSxuLHQpO2Vsc2UgaWYoZS5jaGlsZCE9PW51bGwpe2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkO2NvbnRpbnVlfWlmKGU9PT10KWJyZWFrIGE7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHxlLnJldHVybj09PXQpYnJlYWsgYTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9c3dpdGNoKGkpe2Nhc2VgZm9yd2FyZHNgOmZvcihuPXQuY2hpbGQsaT1udWxsO24hPT1udWxsOyllPW4uYWx0ZXJuYXRlLGUhPT1udWxsJiZubyhlKT09PW51bGwmJihpPW4pLG49bi5zaWJsaW5nO249aSxuPT09bnVsbD8oaT10LmNoaWxkLHQuY2hpbGQ9bnVsbCk6KGk9bi5zaWJsaW5nLG4uc2libGluZz1udWxsKSxTYyh0LCExLGksbixhLHIpO2JyZWFrO2Nhc2VgYmFja3dhcmRzYDpjYXNlYHVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNgOmZvcihuPW51bGwsaT10LmNoaWxkLHQuY2hpbGQ9bnVsbDtpIT09bnVsbDspe2lmKGU9aS5hbHRlcm5hdGUsZSE9PW51bGwmJm5vKGUpPT09bnVsbCl7dC5jaGlsZD1pO2JyZWFrfWU9aS5zaWJsaW5nLGkuc2libGluZz1uLG49aSxpPWV9U2ModCwhMCxuLG51bGwsYSxyKTticmVhaztjYXNlYHRvZ2V0aGVyYDpTYyh0LCExLG51bGwsbnVsbCx2b2lkIDAscik7YnJlYWs7ZGVmYXVsdDp0Lm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiB3YyhlLHQsbil7aWYoZSE9PW51bGwmJih0LmRlcGVuZGVuY2llcz1lLmRlcGVuZGVuY2llcyksS2x8PXQubGFuZXMsKG4mdC5jaGlsZExhbmVzKT09PTApaWYoZSE9PW51bGwpe2lmKFdpKGUsdCxuLCExKSwobiZ0LmNoaWxkTGFuZXMpPT09MClyZXR1cm4gbnVsbH1lbHNlIHJldHVybiBudWxsO2lmKGUhPT1udWxsJiZ0LmNoaWxkIT09ZS5jaGlsZCl0aHJvdyBFcnJvcihpKDE1MykpO2lmKHQuY2hpbGQhPT1udWxsKXtmb3IoZT10LmNoaWxkLG49dGkoZSxlLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1uLG4ucmV0dXJuPXQ7ZS5zaWJsaW5nIT09bnVsbDspZT1lLnNpYmxpbmcsbj1uLnNpYmxpbmc9dGkoZSxlLnBlbmRpbmdQcm9wcyksbi5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBUYyhlLHQpe3JldHVybihlLmxhbmVzJnQpPT09MD8oZT1lLmRlcGVuZGVuY2llcywhIShlIT09bnVsbCYmR2koZSkpKTohMH1mdW5jdGlvbiBFYyhlLHQsbil7c3dpdGNoKHQudGFnKXtjYXNlIDM6bmUodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxCaSh0LCRpLGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksUGkoKTticmVhaztjYXNlIDI3OmNhc2UgNTppZSh0KTticmVhaztjYXNlIDQ6bmUodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOkJpKHQsdC50eXBlLHQubWVtb2l6ZWRQcm9wcy52YWx1ZSk7YnJlYWs7Y2FzZSAzMTppZih0Lm1lbW9pemVkU3RhdGUhPT1udWxsKXJldHVybiB0LmZsYWdzfD0xMjgsWmEodCksbnVsbDticmVhaztjYXNlIDEzOnZhciByPXQubWVtb2l6ZWRTdGF0ZTtpZihyIT09bnVsbClyZXR1cm4gci5kZWh5ZHJhdGVkPT09bnVsbD8obiZ0LmNoaWxkLmNoaWxkTGFuZXMpPT09MD8oWGEodCksZT13YyhlLHQsbiksZT09PW51bGw/bnVsbDplLnNpYmxpbmcpOl9jKGUsdCxuKTooWGEodCksdC5mbGFnc3w9MTI4LG51bGwpO1hhKHQpO2JyZWFrO2Nhc2UgMTk6dmFyIGk9KGUuZmxhZ3MmMTI4KSE9MDtpZihyPShuJnQuY2hpbGRMYW5lcykhPT0wLHJ8fD0oV2koZSx0LG4sITEpLChuJnQuY2hpbGRMYW5lcykhPT0wKSxpKXtpZihyKXJldHVybiBDYyhlLHQsbik7dC5mbGFnc3w9MTI4fWlmKGk9dC5tZW1vaXplZFN0YXRlLGkhPT1udWxsJiYoaS5yZW5kZXJpbmc9bnVsbCxpLnRhaWw9bnVsbCxpLmxhc3RFZmZlY3Q9bnVsbCksSCh0byx0by5jdXJyZW50KSxyKWJyZWFrO3JldHVybiBudWxsO2Nhc2UgMjI6cmV0dXJuIHQubGFuZXM9MCxyYyhlLHQsbix0LnBlbmRpbmdQcm9wcyk7Y2FzZSAyNDpCaSh0LCRpLGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9cmV0dXJuIHdjKGUsdCxuKX1mdW5jdGlvbiBEYyhlLHQsbil7aWYoZSE9PW51bGwpaWYoZS5tZW1vaXplZFByb3BzIT09dC5wZW5kaW5nUHJvcHMpUXM9ITA7ZWxzZXtpZighVGMoZSxuKSYmISh0LmZsYWdzJjEyOCkpcmV0dXJuIFFzPSExLEVjKGUsdCxuKTtRcz0hIShlLmZsYWdzJjEzMTA3Mil9ZWxzZSBRcz0hMSxFaSYmdC5mbGFncyYxMDQ4NTc2JiZiaSh0LHBpLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMTY6YTp7dmFyIHI9dC5wZW5kaW5nUHJvcHM7aWYoZT1iYSh0LmVsZW1lbnRUeXBlKSx0LnR5cGU9ZSx0eXBlb2YgZT09YGZ1bmN0aW9uYCllaShlKT8ocj1WcyhlLHIpLHQudGFnPTEsdD1mYyhudWxsLHQsZSxyLG4pKToodC50YWc9MCx0PXVjKG51bGwsdCxlLHIsbikpO2Vsc2V7aWYoZSE9bnVsbCl7dmFyIGE9ZS4kJHR5cGVvZjtpZihhPT09dyl7dC50YWc9MTEsdD1lYyhudWxsLHQsZSxyLG4pO2JyZWFrIGF9ZWxzZSBpZihhPT09RCl7dC50YWc9MTQsdD10YyhudWxsLHQsZSxyLG4pO2JyZWFrIGF9fXRocm93IHQ9UChlKXx8ZSxFcnJvcihpKDMwNix0LGBgKSl9fXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gdWMoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE6cmV0dXJuIHI9dC50eXBlLGE9VnMocix0LnBlbmRpbmdQcm9wcyksZmMoZSx0LHIsYSxuKTtjYXNlIDM6YTp7aWYobmUodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxlPT09bnVsbCl0aHJvdyBFcnJvcihpKDM4NykpO3I9dC5wZW5kaW5nUHJvcHM7dmFyIG89dC5tZW1vaXplZFN0YXRlO2E9by5lbGVtZW50LE5hKGUsdCksQmEodCxyLG51bGwsbik7dmFyIHM9dC5tZW1vaXplZFN0YXRlO2lmKHI9cy5jYWNoZSxCaSh0LCRpLHIpLHIhPT1vLmNhY2hlJiZVaSh0LFskaV0sbiwhMCksemEoKSxyPXMuZWxlbWVudCxvLmlzRGVoeWRyYXRlZClpZihvPXtlbGVtZW50OnIsaXNEZWh5ZHJhdGVkOiExLGNhY2hlOnMuY2FjaGV9LHQudXBkYXRlUXVldWUuYmFzZVN0YXRlPW8sdC5tZW1vaXplZFN0YXRlPW8sdC5mbGFncyYyNTYpe3Q9cGMoZSx0LHIsbik7YnJlYWsgYX1lbHNlIGlmKHIhPT1hKXthPWxpKEVycm9yKGkoNDI0KSksdCksSWkoYSksdD1wYyhlLHQscixuKTticmVhayBhfWVsc2V7c3dpdGNoKGU9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxlLm5vZGVUeXBlKXtjYXNlIDk6ZT1lLmJvZHk7YnJlYWs7ZGVmYXVsdDplPWUubm9kZU5hbWU9PT1gSFRNTGA/ZS5vd25lckRvY3VtZW50LmJvZHk6ZX1mb3IoVGk9ZGYoZS5maXJzdENoaWxkKSx3aT10LEVpPSEwLERpPW51bGwsT2k9ITAsbj1BYSh0LG51bGwscixuKSx0LmNoaWxkPW47bjspbi5mbGFncz1uLmZsYWdzJi0zfDQwOTYsbj1uLnNpYmxpbmd9ZWxzZXtpZihQaSgpLHI9PT1hKXt0PXdjKGUsdCxuKTticmVhayBhfSRzKGUsdCxyLG4pfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDI2OnJldHVybiBsYyhlLHQpLGU9PT1udWxsPyhuPU1mKHQudHlwZSxudWxsLHQucGVuZGluZ1Byb3BzLG51bGwpKT90Lm1lbW9pemVkU3RhdGU9bjpFaXx8KG49dC50eXBlLGU9dC5wZW5kaW5nUHJvcHMscj1XZChHLmN1cnJlbnQpLmNyZWF0ZUVsZW1lbnQobikscltRZV09dCxyWyRlXT1lLFJkKHIsbixlKSxkdChyKSx0LnN0YXRlTm9kZT1yKTp0Lm1lbW9pemVkU3RhdGU9TWYodC50eXBlLGUubWVtb2l6ZWRQcm9wcyx0LnBlbmRpbmdQcm9wcyxlLm1lbW9pemVkU3RhdGUpLG51bGw7Y2FzZSAyNzpyZXR1cm4gaWUodCksZT09PW51bGwmJkVpJiYocj10LnN0YXRlTm9kZT1oZih0LnR5cGUsdC5wZW5kaW5nUHJvcHMsRy5jdXJyZW50KSx3aT10LE9pPSEwLGE9VGksdGYodC50eXBlKT8oZmY9YSxUaT1kZihyLmZpcnN0Q2hpbGQpKTpUaT1hKSwkcyhlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksbGMoZSx0KSxlPT09bnVsbCYmKHQuZmxhZ3N8PTQxOTQzMDQpLHQuY2hpbGQ7Y2FzZSA1OnJldHVybiBlPT09bnVsbCYmRWkmJigoYT1yPVRpKSYmKHI9b2Yocix0LnR5cGUsdC5wZW5kaW5nUHJvcHMsT2kpLHI9PT1udWxsP2E9ITE6KHQuc3RhdGVOb2RlPXIsd2k9dCxUaT1kZihyLmZpcnN0Q2hpbGQpLE9pPSExLGE9ITApKSxhfHxBaSh0KSksaWUodCksYT10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxzPWU9PT1udWxsP251bGw6ZS5tZW1vaXplZFByb3BzLHI9by5jaGlsZHJlbixxZChhLG8pP3I9bnVsbDpzIT09bnVsbCYmcWQoYSxzKSYmKHQuZmxhZ3N8PTMyKSx0Lm1lbW9pemVkU3RhdGUhPT1udWxsJiYoYT1fbyhlLHQsYm8sbnVsbCxudWxsLG4pLHRwLl9jdXJyZW50VmFsdWU9YSksbGMoZSx0KSwkcyhlLHQscixuKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gZT09PW51bGwmJkVpJiYoKGU9bj1UaSkmJihuPXNmKG4sdC5wZW5kaW5nUHJvcHMsT2kpLG49PT1udWxsP2U9ITE6KHQuc3RhdGVOb2RlPW4sd2k9dCxUaT1udWxsLGU9ITApKSxlfHxBaSh0KSksbnVsbDtjYXNlIDEzOnJldHVybiBfYyhlLHQsbik7Y2FzZSA0OnJldHVybiBuZSh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHI9dC5wZW5kaW5nUHJvcHMsZT09PW51bGw/dC5jaGlsZD1rYSh0LG51bGwscixuKTokcyhlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTE6cmV0dXJuIGVjKGUsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsbik7Y2FzZSA3OnJldHVybiAkcyhlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6cmV0dXJuICRzKGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTI6cmV0dXJuICRzKGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTA6cmV0dXJuIHI9dC5wZW5kaW5nUHJvcHMsQmkodCx0LnR5cGUsci52YWx1ZSksJHMoZSx0LHIuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDk6cmV0dXJuIGE9dC50eXBlLl9jb250ZXh0LHI9dC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sS2kodCksYT1xaShhKSxyPXIoYSksdC5mbGFnc3w9MSwkcyhlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIHRjKGUsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsbik7Y2FzZSAxNTpyZXR1cm4gbmMoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE5OnJldHVybiBDYyhlLHQsbik7Y2FzZSAzMTpyZXR1cm4gY2MoZSx0LG4pO2Nhc2UgMjI6cmV0dXJuIHJjKGUsdCxuLHQucGVuZGluZ1Byb3BzKTtjYXNlIDI0OnJldHVybiBLaSh0KSxyPXFpKCRpKSxlPT09bnVsbD8oYT1kYSgpLGE9PT1udWxsJiYoYT1JbCxvPWVhKCksYS5wb29sZWRDYWNoZT1vLG8ucmVmQ291bnQrKyxvIT09bnVsbCYmKGEucG9vbGVkQ2FjaGVMYW5lc3w9biksYT1vKSx0Lm1lbW9pemVkU3RhdGU9e3BhcmVudDpyLGNhY2hlOmF9LE1hKHQpLEJpKHQsJGksYSkpOigoZS5sYW5lcyZuKSE9PTAmJihOYShlLHQpLEJhKHQsbnVsbCxudWxsLG4pLHphKCkpLGE9ZS5tZW1vaXplZFN0YXRlLG89dC5tZW1vaXplZFN0YXRlLGEucGFyZW50PT09cj8ocj1vLmNhY2hlLEJpKHQsJGksciksciE9PWEuY2FjaGUmJlVpKHQsWyRpXSxuLCEwKSk6KGE9e3BhcmVudDpyLGNhY2hlOnJ9LHQubWVtb2l6ZWRTdGF0ZT1hLHQubGFuZXM9PT0wJiYodC5tZW1vaXplZFN0YXRlPXQudXBkYXRlUXVldWUuYmFzZVN0YXRlPWEpLEJpKHQsJGkscikpKSwkcyhlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDI5OnRocm93IHQucGVuZGluZ1Byb3BzfXRocm93IEVycm9yKGkoMTU2LHQudGFnKSl9ZnVuY3Rpb24gT2MoZSl7ZS5mbGFnc3w9NH1mdW5jdGlvbiBrYyhlLHQsbixyLGkpe2lmKCh0PShlLm1vZGUmMzIpIT0wKSYmKHQ9ITEpLHQpe2lmKGUuZmxhZ3N8PTE2Nzc3MjE2LChpJjMzNTU0NDEyOCk9PT1pKWlmKGUuc3RhdGVOb2RlLmNvbXBsZXRlKWUuZmxhZ3N8PTgxOTI7ZWxzZSBpZihUdSgpKWUuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyB4YT1fYSxoYX1lbHNlIGUuZmxhZ3MmPS0xNjc3NzIxN31mdW5jdGlvbiBBYyhlLHQpe2lmKHQudHlwZSE9PWBzdHlsZXNoZWV0YHx8dC5zdGF0ZS5sb2FkaW5nJjQpZS5mbGFncyY9LTE2Nzc3MjE3O2Vsc2UgaWYoZS5mbGFnc3w9MTY3NzcyMTYsIXFmKHQpKWlmKFR1KCkpZS5mbGFnc3w9ODE5MjtlbHNlIHRocm93IHhhPV9hLGhhfWZ1bmN0aW9uIGpjKGUsdCl7dCE9PW51bGwmJihlLmZsYWdzfD00KSxlLmZsYWdzJjE2Mzg0JiYodD1lLnRhZz09PTIyPzUzNjg3MDkxMjpCZSgpLGUubGFuZXN8PXQsWGx8PXQpfWZ1bmN0aW9uIFkoZSx0KXtpZighRWkpc3dpdGNoKGUudGFpbE1vZGUpe2Nhc2VgaGlkZGVuYDp0PWUudGFpbDtmb3IodmFyIG49bnVsbDt0IT09bnVsbDspdC5hbHRlcm5hdGUhPT1udWxsJiYobj10KSx0PXQuc2libGluZztuPT09bnVsbD9lLnRhaWw9bnVsbDpuLnNpYmxpbmc9bnVsbDticmVhaztjYXNlYGNvbGxhcHNlZGA6bj1lLnRhaWw7Zm9yKHZhciByPW51bGw7biE9PW51bGw7KW4uYWx0ZXJuYXRlIT09bnVsbCYmKHI9biksbj1uLnNpYmxpbmc7cj09PW51bGw/dHx8ZS50YWlsPT09bnVsbD9lLnRhaWw9bnVsbDplLnRhaWwuc2libGluZz1udWxsOnIuc2libGluZz1udWxsfX1mdW5jdGlvbiBNYyhlKXt2YXIgdD1lLmFsdGVybmF0ZSE9PW51bGwmJmUuYWx0ZXJuYXRlLmNoaWxkPT09ZS5jaGlsZCxuPTAscj0wO2lmKHQpZm9yKHZhciBpPWUuY2hpbGQ7aSE9PW51bGw7KW58PWkubGFuZXN8aS5jaGlsZExhbmVzLHJ8PWkuc3VidHJlZUZsYWdzJjY1MDExNzEyLHJ8PWkuZmxhZ3MmNjUwMTE3MTIsaS5yZXR1cm49ZSxpPWkuc2libGluZztlbHNlIGZvcihpPWUuY2hpbGQ7aSE9PW51bGw7KW58PWkubGFuZXN8aS5jaGlsZExhbmVzLHJ8PWkuc3VidHJlZUZsYWdzLHJ8PWkuZmxhZ3MsaS5yZXR1cm49ZSxpPWkuc2libGluZztyZXR1cm4gZS5zdWJ0cmVlRmxhZ3N8PXIsZS5jaGlsZExhbmVzPW4sdH1mdW5jdGlvbiBOYyhlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHM7c3dpdGNoKFNpKHQpLHQudGFnKXtjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBNYyh0KSxudWxsO2Nhc2UgMTpyZXR1cm4gTWModCksbnVsbDtjYXNlIDM6cmV0dXJuIG49dC5zdGF0ZU5vZGUscj1udWxsLGUhPT1udWxsJiYocj1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PXImJih0LmZsYWdzfD0yMDQ4KSxWaSgkaSkscmUoKSxuLnBlbmRpbmdDb250ZXh0JiYobi5jb250ZXh0PW4ucGVuZGluZ0NvbnRleHQsbi5wZW5kaW5nQ29udGV4dD1udWxsKSwoZT09PW51bGx8fGUuY2hpbGQ9PT1udWxsKSYmKE5pKHQpP09jKHQpOmU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYhKHQuZmxhZ3MmMjU2KXx8KHQuZmxhZ3N8PTEwMjQsRmkoKSkpLE1jKHQpLG51bGw7Y2FzZSAyNjp2YXIgYT10LnR5cGUsbz10Lm1lbW9pemVkU3RhdGU7cmV0dXJuIGU9PT1udWxsPyhPYyh0KSxvPT09bnVsbD8oTWModCksa2ModCxhLG51bGwscixuKSk6KE1jKHQpLEFjKHQsbykpKTpvP289PT1lLm1lbW9pemVkU3RhdGU/KE1jKHQpLHQuZmxhZ3MmPS0xNjc3NzIxNyk6KE9jKHQpLE1jKHQpLEFjKHQsbykpOihlPWUubWVtb2l6ZWRQcm9wcyxlIT09ciYmT2ModCksTWModCksa2ModCxhLGUscixuKSksbnVsbDtjYXNlIDI3OmlmKGFlKHQpLG49Ry5jdXJyZW50LGE9dC50eXBlLGUhPT1udWxsJiZ0LnN0YXRlTm9kZSE9bnVsbCllLm1lbW9pemVkUHJvcHMhPT1yJiZPYyh0KTtlbHNle2lmKCFyKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoaSgxNjYpKTtyZXR1cm4gTWModCksbnVsbH1lPVUuY3VycmVudCxOaSh0KT9qaSh0LGUpOihlPWhmKGEscixuKSx0LnN0YXRlTm9kZT1lLE9jKHQpKX1yZXR1cm4gTWModCksbnVsbDtjYXNlIDU6aWYoYWUodCksYT10LnR5cGUsZSE9PW51bGwmJnQuc3RhdGVOb2RlIT1udWxsKWUubWVtb2l6ZWRQcm9wcyE9PXImJk9jKHQpO2Vsc2V7aWYoIXIpe2lmKHQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihpKDE2NikpO3JldHVybiBNYyh0KSxudWxsfWlmKG89VS5jdXJyZW50LE5pKHQpKWppKHQsbyk7ZWxzZXt2YXIgcz1XZChHLmN1cnJlbnQpO3N3aXRjaChvKXtjYXNlIDE6bz1zLmNyZWF0ZUVsZW1lbnROUyhgaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgLGEpO2JyZWFrO2Nhc2UgMjpvPXMuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MYCxhKTticmVhaztkZWZhdWx0OnN3aXRjaChhKXtjYXNlYHN2Z2A6bz1zLmNyZWF0ZUVsZW1lbnROUyhgaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgLGEpO2JyZWFrO2Nhc2VgbWF0aGA6bz1zLmNyZWF0ZUVsZW1lbnROUyhgaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTGAsYSk7YnJlYWs7Y2FzZWBzY3JpcHRgOm89cy5jcmVhdGVFbGVtZW50KGBkaXZgKSxvLmlubmVySFRNTD1gPHNjcmlwdD48XC9zY3JpcHQ+YCxvPW8ucmVtb3ZlQ2hpbGQoby5maXJzdENoaWxkKTticmVhaztjYXNlYHNlbGVjdGA6bz10eXBlb2Ygci5pcz09YHN0cmluZ2A/cy5jcmVhdGVFbGVtZW50KGBzZWxlY3RgLHtpczpyLmlzfSk6cy5jcmVhdGVFbGVtZW50KGBzZWxlY3RgKSxyLm11bHRpcGxlP28ubXVsdGlwbGU9ITA6ci5zaXplJiYoby5zaXplPXIuc2l6ZSk7YnJlYWs7ZGVmYXVsdDpvPXR5cGVvZiByLmlzPT1gc3RyaW5nYD9zLmNyZWF0ZUVsZW1lbnQoYSx7aXM6ci5pc30pOnMuY3JlYXRlRWxlbWVudChhKX19b1tRZV09dCxvWyRlXT1yO2E6Zm9yKHM9dC5jaGlsZDtzIT09bnVsbDspe2lmKHMudGFnPT09NXx8cy50YWc9PT02KW8uYXBwZW5kQ2hpbGQocy5zdGF0ZU5vZGUpO2Vsc2UgaWYocy50YWchPT00JiZzLnRhZyE9PTI3JiZzLmNoaWxkIT09bnVsbCl7cy5jaGlsZC5yZXR1cm49cyxzPXMuY2hpbGQ7Y29udGludWV9aWYocz09PXQpYnJlYWsgYTtmb3IoO3Muc2libGluZz09PW51bGw7KXtpZihzLnJldHVybj09PW51bGx8fHMucmV0dXJuPT09dClicmVhayBhO3M9cy5yZXR1cm59cy5zaWJsaW5nLnJldHVybj1zLnJldHVybixzPXMuc2libGluZ310LnN0YXRlTm9kZT1vO2E6c3dpdGNoKFJkKG8sYSxyKSxhKXtjYXNlYGJ1dHRvbmA6Y2FzZWBpbnB1dGA6Y2FzZWBzZWxlY3RgOmNhc2VgdGV4dGFyZWFgOnI9ISFyLmF1dG9Gb2N1czticmVhayBhO2Nhc2VgaW1nYDpyPSEwO2JyZWFrIGE7ZGVmYXVsdDpyPSExfXImJk9jKHQpfX1yZXR1cm4gTWModCksa2ModCx0LnR5cGUsZT09PW51bGw/bnVsbDplLm1lbW9pemVkUHJvcHMsdC5wZW5kaW5nUHJvcHMsbiksbnVsbDtjYXNlIDY6aWYoZSYmdC5zdGF0ZU5vZGUhPW51bGwpZS5tZW1vaXplZFByb3BzIT09ciYmT2ModCk7ZWxzZXtpZih0eXBlb2YgciE9YHN0cmluZ2AmJnQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihpKDE2NikpO2lmKGU9Ry5jdXJyZW50LE5pKHQpKXtpZihlPXQuc3RhdGVOb2RlLG49dC5tZW1vaXplZFByb3BzLHI9bnVsbCxhPXdpLGEhPT1udWxsKXN3aXRjaChhLnRhZyl7Y2FzZSAyNzpjYXNlIDU6cj1hLm1lbW9pemVkUHJvcHN9ZVtRZV09dCxlPSEhKGUubm9kZVZhbHVlPT09bnx8ciE9PW51bGwmJiEwPT09ci5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8fEZkKGUubm9kZVZhbHVlLG4pKSxlfHxBaSh0LCEwKX1lbHNlIGU9V2QoZSkuY3JlYXRlVGV4dE5vZGUociksZVtRZV09dCx0LnN0YXRlTm9kZT1lfXJldHVybiBNYyh0KSxudWxsO2Nhc2UgMzE6aWYobj10Lm1lbW9pemVkU3RhdGUsZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2lmKHI9TmkodCksbiE9PW51bGwpe2lmKGU9PT1udWxsKXtpZighcil0aHJvdyBFcnJvcihpKDMxOCkpO2lmKGU9dC5tZW1vaXplZFN0YXRlLGU9ZT09PW51bGw/bnVsbDplLmRlaHlkcmF0ZWQsIWUpdGhyb3cgRXJyb3IoaSg1NTcpKTtlW1FlXT10fWVsc2UgUGkoKSwhKHQuZmxhZ3MmMTI4KSYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O01jKHQpLGU9ITF9ZWxzZSBuPUZpKCksZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJihlLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPW4pLGU9ITA7aWYoIWUpcmV0dXJuIHQuZmxhZ3MmMjU2Pyhlbyh0KSx0KTooZW8odCksbnVsbCk7aWYodC5mbGFncyYxMjgpdGhyb3cgRXJyb3IoaSg1NTgpKX1yZXR1cm4gTWModCksbnVsbDtjYXNlIDEzOmlmKHI9dC5tZW1vaXplZFN0YXRlLGU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKGE9TmkodCksciE9PW51bGwmJnIuZGVoeWRyYXRlZCE9PW51bGwpe2lmKGU9PT1udWxsKXtpZighYSl0aHJvdyBFcnJvcihpKDMxOCkpO2lmKGE9dC5tZW1vaXplZFN0YXRlLGE9YT09PW51bGw/bnVsbDphLmRlaHlkcmF0ZWQsIWEpdGhyb3cgRXJyb3IoaSgzMTcpKTthW1FlXT10fWVsc2UgUGkoKSwhKHQuZmxhZ3MmMTI4KSYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O01jKHQpLGE9ITF9ZWxzZSBhPUZpKCksZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJihlLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPWEpLGE9ITA7aWYoIWEpcmV0dXJuIHQuZmxhZ3MmMjU2Pyhlbyh0KSx0KTooZW8odCksbnVsbCl9cmV0dXJuIGVvKHQpLHQuZmxhZ3MmMTI4Pyh0LmxhbmVzPW4sdCk6KG49ciE9PW51bGwsZT1lIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCxuJiYocj10LmNoaWxkLGE9bnVsbCxyLmFsdGVybmF0ZSE9PW51bGwmJnIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZyLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihhPXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLG89bnVsbCxyLm1lbW9pemVkU3RhdGUhPT1udWxsJiZyLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKG89ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxvIT09YSYmKHIuZmxhZ3N8PTIwNDgpKSxuIT09ZSYmbiYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIpLGpjKHQsdC51cGRhdGVRdWV1ZSksTWModCksbnVsbCk7Y2FzZSA0OnJldHVybiByZSgpLGU9PT1udWxsJiZUZCh0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxNYyh0KSxudWxsO2Nhc2UgMTA6cmV0dXJuIFZpKHQudHlwZSksTWModCksbnVsbDtjYXNlIDE5OmlmKGVlKHRvKSxyPXQubWVtb2l6ZWRTdGF0ZSxyPT09bnVsbClyZXR1cm4gTWModCksbnVsbDtpZihhPSh0LmZsYWdzJjEyOCkhPTAsbz1yLnJlbmRlcmluZyxvPT09bnVsbClpZihhKVkociwhMSk7ZWxzZXtpZihHbCE9PTB8fGUhPT1udWxsJiZlLmZsYWdzJjEyOClmb3IoZT10LmNoaWxkO2UhPT1udWxsOyl7aWYobz1ubyhlKSxvIT09bnVsbCl7Zm9yKHQuZmxhZ3N8PTEyOCxZKHIsITEpLGU9by51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPWUsamModCxlKSx0LnN1YnRyZWVGbGFncz0wLGU9bixuPXQuY2hpbGQ7biE9PW51bGw7KW5pKG4sZSksbj1uLnNpYmxpbmc7cmV0dXJuIEgodG8sdG8uY3VycmVudCYxfDIpLEVpJiZ5aSh0LHIudHJlZUZvcmtDb3VudCksdC5jaGlsZH1lPWUuc2libGluZ31yLnRhaWwhPT1udWxsJiZfZSgpPm51JiYodC5mbGFnc3w9MTI4LGE9ITAsWShyLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIWEpaWYoZT1ubyhvKSxlIT09bnVsbCl7aWYodC5mbGFnc3w9MTI4LGE9ITAsZT1lLnVwZGF0ZVF1ZXVlLHQudXBkYXRlUXVldWU9ZSxqYyh0LGUpLFkociwhMCksci50YWlsPT09bnVsbCYmci50YWlsTW9kZT09PWBoaWRkZW5gJiYhby5hbHRlcm5hdGUmJiFFaSlyZXR1cm4gTWModCksbnVsbH1lbHNlIDIqX2UoKS1yLnJlbmRlcmluZ1N0YXJ0VGltZT5udSYmbiE9PTUzNjg3MDkxMiYmKHQuZmxhZ3N8PTEyOCxhPSEwLFkociwhMSksdC5sYW5lcz00MTk0MzA0KTtyLmlzQmFja3dhcmRzPyhvLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPW8pOihlPXIubGFzdCxlPT09bnVsbD90LmNoaWxkPW86ZS5zaWJsaW5nPW8sci5sYXN0PW8pfXJldHVybiByLnRhaWw9PT1udWxsPyhNYyh0KSxudWxsKTooZT1yLnRhaWwsci5yZW5kZXJpbmc9ZSxyLnRhaWw9ZS5zaWJsaW5nLHIucmVuZGVyaW5nU3RhcnRUaW1lPV9lKCksZS5zaWJsaW5nPW51bGwsbj10by5jdXJyZW50LEgodG8sYT9uJjF8MjpuJjEpLEVpJiZ5aSh0LHIudHJlZUZvcmtDb3VudCksZSk7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBlbyh0KSxxYSgpLHI9dC5tZW1vaXplZFN0YXRlIT09bnVsbCxlPT09bnVsbD9yJiYodC5mbGFnc3w9ODE5Mik6ZS5tZW1vaXplZFN0YXRlIT09bnVsbCE9PXImJih0LmZsYWdzfD04MTkyKSxyP24mNTM2ODcwOTEyJiYhKHQuZmxhZ3MmMTI4KSYmKE1jKHQpLHQuc3VidHJlZUZsYWdzJjYmJih0LmZsYWdzfD04MTkyKSk6TWModCksbj10LnVwZGF0ZVF1ZXVlLG4hPT1udWxsJiZqYyh0LG4ucmV0cnlRdWV1ZSksbj1udWxsLGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKG49ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxyPW51bGwsdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihyPXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksciE9PW4mJih0LmZsYWdzfD0yMDQ4KSxlIT09bnVsbCYmZWUodWEpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbj1udWxsLGUhPT1udWxsJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PW4mJih0LmZsYWdzfD0yMDQ4KSxWaSgkaSksTWModCksbnVsbDtjYXNlIDI1OnJldHVybiBudWxsO2Nhc2UgMzA6cmV0dXJuIG51bGx9dGhyb3cgRXJyb3IoaSgxNTYsdC50YWcpKX1mdW5jdGlvbiBQYyhlLHQpe3N3aXRjaChTaSh0KSx0LnRhZyl7Y2FzZSAxOnJldHVybiBlPXQuZmxhZ3MsZSY2NTUzNj8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDM6cmV0dXJuIFZpKCRpKSxyZSgpLGU9dC5mbGFncyxlJjY1NTM2JiYhKGUmMTI4KT8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBhZSh0KSxudWxsO2Nhc2UgMzE6aWYodC5tZW1vaXplZFN0YXRlIT09bnVsbCl7aWYoZW8odCksdC5hbHRlcm5hdGU9PT1udWxsKXRocm93IEVycm9yKGkoMzQwKSk7UGkoKX1yZXR1cm4gZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAxMzppZihlbyh0KSxlPXQubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmZS5kZWh5ZHJhdGVkIT09bnVsbCl7aWYodC5hbHRlcm5hdGU9PT1udWxsKXRocm93IEVycm9yKGkoMzQwKSk7UGkoKX1yZXR1cm4gZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAxOTpyZXR1cm4gZWUodG8pLG51bGw7Y2FzZSA0OnJldHVybiByZSgpLG51bGw7Y2FzZSAxMDpyZXR1cm4gVmkodC50eXBlKSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gZW8odCkscWEoKSxlIT09bnVsbCYmZWUodWEpLGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMjQ6cmV0dXJuIFZpKCRpKSxudWxsO2Nhc2UgMjU6cmV0dXJuIG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRmMoZSx0KXtzd2l0Y2goU2kodCksdC50YWcpe2Nhc2UgMzpWaSgkaSkscmUoKTticmVhaztjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OmFlKHQpO2JyZWFrO2Nhc2UgNDpyZSgpO2JyZWFrO2Nhc2UgMzE6dC5tZW1vaXplZFN0YXRlIT09bnVsbCYmZW8odCk7YnJlYWs7Y2FzZSAxMzplbyh0KTticmVhaztjYXNlIDE5OmVlKHRvKTticmVhaztjYXNlIDEwOlZpKHQudHlwZSk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOmVvKHQpLHFhKCksZSE9PW51bGwmJmVlKHVhKTticmVhaztjYXNlIDI0OlZpKCRpKX19ZnVuY3Rpb24gSWMoZSx0KXt0cnl7dmFyIG49dC51cGRhdGVRdWV1ZSxyPW49PT1udWxsP251bGw6bi5sYXN0RWZmZWN0O2lmKHIhPT1udWxsKXt2YXIgaT1yLm5leHQ7bj1pO2Rve2lmKChuLnRhZyZlKT09PWUpe3I9dm9pZCAwO3ZhciBhPW4uY3JlYXRlLG89bi5pbnN0O3I9YSgpLG8uZGVzdHJveT1yfW49bi5uZXh0fXdoaWxlKG4hPT1pKX19Y2F0Y2goZSl7S3UodCx0LnJldHVybixlKX19ZnVuY3Rpb24gTGMoZSx0LG4pe3RyeXt2YXIgcj10LnVwZGF0ZVF1ZXVlLGk9cj09PW51bGw/bnVsbDpyLmxhc3RFZmZlY3Q7aWYoaSE9PW51bGwpe3ZhciBhPWkubmV4dDtyPWE7ZG97aWYoKHIudGFnJmUpPT09ZSl7dmFyIG89ci5pbnN0LHM9by5kZXN0cm95O2lmKHMhPT12b2lkIDApe28uZGVzdHJveT12b2lkIDAsaT10O3ZhciBjPW4sbD1zO3RyeXtsKCl9Y2F0Y2goZSl7S3UoaSxjLGUpfX19cj1yLm5leHR9d2hpbGUociE9PWEpfX1jYXRjaChlKXtLdSh0LHQucmV0dXJuLGUpfX1mdW5jdGlvbiBSYyhlKXt2YXIgdD1lLnVwZGF0ZVF1ZXVlO2lmKHQhPT1udWxsKXt2YXIgbj1lLnN0YXRlTm9kZTt0cnl7SGEodCxuKX1jYXRjaCh0KXtLdShlLGUucmV0dXJuLHQpfX19ZnVuY3Rpb24gemMoZSx0LG4pe24ucHJvcHM9VnMoZS50eXBlLGUubWVtb2l6ZWRQcm9wcyksbi5zdGF0ZT1lLm1lbW9pemVkU3RhdGU7dHJ5e24uY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChuKXtLdShlLHQsbil9fWZ1bmN0aW9uIEJjKGUsdCl7dHJ5e3ZhciBuPWUucmVmO2lmKG4hPT1udWxsKXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6dmFyIHI9ZS5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAzMDpyPWUuc3RhdGVOb2RlO2JyZWFrO2RlZmF1bHQ6cj1lLnN0YXRlTm9kZX10eXBlb2Ygbj09YGZ1bmN0aW9uYD9lLnJlZkNsZWFudXA9bihyKTpuLmN1cnJlbnQ9cn19Y2F0Y2gobil7S3UoZSx0LG4pfX1mdW5jdGlvbiBWYyhlLHQpe3ZhciBuPWUucmVmLHI9ZS5yZWZDbGVhbnVwO2lmKG4hPT1udWxsKWlmKHR5cGVvZiByPT1gZnVuY3Rpb25gKXRyeXtyKCl9Y2F0Y2gobil7S3UoZSx0LG4pfWZpbmFsbHl7ZS5yZWZDbGVhbnVwPW51bGwsZT1lLmFsdGVybmF0ZSxlIT1udWxsJiYoZS5yZWZDbGVhbnVwPW51bGwpfWVsc2UgaWYodHlwZW9mIG49PWBmdW5jdGlvbmApdHJ5e24obnVsbCl9Y2F0Y2gobil7S3UoZSx0LG4pfWVsc2Ugbi5jdXJyZW50PW51bGx9ZnVuY3Rpb24gSGMoZSl7dmFyIHQ9ZS50eXBlLG49ZS5tZW1vaXplZFByb3BzLHI9ZS5zdGF0ZU5vZGU7dHJ5e2E6c3dpdGNoKHQpe2Nhc2VgYnV0dG9uYDpjYXNlYGlucHV0YDpjYXNlYHNlbGVjdGA6Y2FzZWB0ZXh0YXJlYWA6bi5hdXRvRm9jdXMmJnIuZm9jdXMoKTticmVhayBhO2Nhc2VgaW1nYDpuLnNyYz9yLnNyYz1uLnNyYzpuLnNyY1NldCYmKHIuc3Jjc2V0PW4uc3JjU2V0KX19Y2F0Y2godCl7S3UoZSxlLnJldHVybix0KX19ZnVuY3Rpb24gVWMoZSx0LG4pe3RyeXt2YXIgcj1lLnN0YXRlTm9kZTt6ZChyLGUudHlwZSxuLHQpLHJbJGVdPXR9Y2F0Y2godCl7S3UoZSxlLnJldHVybix0KX19ZnVuY3Rpb24gV2MoZSl7cmV0dXJuIGUudGFnPT09NXx8ZS50YWc9PT0zfHxlLnRhZz09PTI2fHxlLnRhZz09PTI3JiZ0ZihlLnR5cGUpfHxlLnRhZz09PTR9ZnVuY3Rpb24gR2MoZSl7YTpmb3IoOzspe2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8V2MoZS5yZXR1cm4pKXJldHVybiBudWxsO2U9ZS5yZXR1cm59Zm9yKGUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmc7ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTg7KXtpZihlLnRhZz09PTI3JiZ0ZihlLnR5cGUpfHxlLmZsYWdzJjJ8fGUuY2hpbGQ9PT1udWxsfHxlLnRhZz09PTQpY29udGludWUgYTtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZH1pZighKGUuZmxhZ3MmMikpcmV0dXJuIGUuc3RhdGVOb2RlfX1mdW5jdGlvbiBLYyhlLHQsbil7dmFyIHI9ZS50YWc7aWYocj09PTV8fHI9PT02KWU9ZS5zdGF0ZU5vZGUsdD8obi5ub2RlVHlwZT09PTk/bi5ib2R5Om4ubm9kZU5hbWU9PT1gSFRNTGA/bi5vd25lckRvY3VtZW50LmJvZHk6bikuaW5zZXJ0QmVmb3JlKGUsdCk6KHQ9bi5ub2RlVHlwZT09PTk/bi5ib2R5Om4ubm9kZU5hbWU9PT1gSFRNTGA/bi5vd25lckRvY3VtZW50LmJvZHk6bix0LmFwcGVuZENoaWxkKGUpLG49bi5fcmVhY3RSb290Q29udGFpbmVyLG4hPW51bGx8fHQub25jbGljayE9PW51bGx8fCh0Lm9uY2xpY2s9R3QpKTtlbHNlIGlmKHIhPT00JiYocj09PTI3JiZ0ZihlLnR5cGUpJiYobj1lLnN0YXRlTm9kZSx0PW51bGwpLGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKEtjKGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspS2MoZSx0LG4pLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIHFjKGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24uaW5zZXJ0QmVmb3JlKGUsdCk6bi5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKHIhPT00JiYocj09PTI3JiZ0ZihlLnR5cGUpJiYobj1lLnN0YXRlTm9kZSksZT1lLmNoaWxkLGUhPT1udWxsKSlmb3IocWMoZSx0LG4pLGU9ZS5zaWJsaW5nO2UhPT1udWxsOylxYyhlLHQsbiksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gSmMoZSl7dmFyIHQ9ZS5zdGF0ZU5vZGUsbj1lLm1lbW9pemVkUHJvcHM7dHJ5e2Zvcih2YXIgcj1lLnR5cGUsaT10LmF0dHJpYnV0ZXM7aS5sZW5ndGg7KXQucmVtb3ZlQXR0cmlidXRlTm9kZShpWzBdKTtSZCh0LHIsbiksdFtRZV09ZSx0WyRlXT1ufWNhdGNoKHQpe0t1KGUsZS5yZXR1cm4sdCl9fXZhciBZYz0hMSxYYz0hMSxaYz0hMSxRYz10eXBlb2YgV2Vha1NldD09YGZ1bmN0aW9uYD9XZWFrU2V0OlNldCwkYz1udWxsO2Z1bmN0aW9uIGVsKGUsdCl7aWYoZT1lLmNvbnRhaW5lckluZm8sSGQ9dXAsZT12cihlKSx5cihlKSl7aWYoYHNlbGVjdGlvblN0YXJ0YGluIGUpdmFyIG49e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGE6e249KG49ZS5vd25lckRvY3VtZW50KSYmbi5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciByPW4uZ2V0U2VsZWN0aW9uJiZuLmdldFNlbGVjdGlvbigpO2lmKHImJnIucmFuZ2VDb3VudCE9PTApe249ci5hbmNob3JOb2RlO3ZhciBhPXIuYW5jaG9yT2Zmc2V0LG89ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXtuLm5vZGVUeXBlLG8ubm9kZVR5cGV9Y2F0Y2h7bj1udWxsO2JyZWFrIGF9dmFyIHM9MCxjPS0xLGw9LTEsdT0wLGQ9MCxmPWUscD1udWxsO2I6Zm9yKDs7KXtmb3IodmFyIG07ZiE9PW58fGEhPT0wJiZmLm5vZGVUeXBlIT09M3x8KGM9cythKSxmIT09b3x8ciE9PTAmJmYubm9kZVR5cGUhPT0zfHwobD1zK3IpLGYubm9kZVR5cGU9PT0zJiYocys9Zi5ub2RlVmFsdWUubGVuZ3RoKSwobT1mLmZpcnN0Q2hpbGQpIT09bnVsbDspcD1mLGY9bTtmb3IoOzspe2lmKGY9PT1lKWJyZWFrIGI7aWYocD09PW4mJisrdT09PWEmJihjPXMpLHA9PT1vJiYrK2Q9PT1yJiYobD1zKSwobT1mLm5leHRTaWJsaW5nKSE9PW51bGwpYnJlYWs7Zj1wLHA9Zi5wYXJlbnROb2RlfWY9bX1uPWM9PT0tMXx8bD09PS0xP251bGw6e3N0YXJ0OmMsZW5kOmx9fWVsc2Ugbj1udWxsfW58fD17c3RhcnQ6MCxlbmQ6MH19ZWxzZSBuPW51bGw7Zm9yKFVkPXtmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOm59LHVwPSExLCRjPXQ7JGMhPT1udWxsOylpZih0PSRjLGU9dC5jaGlsZCx0LnN1YnRyZWVGbGFncyYxMDI4JiZlIT09bnVsbCllLnJldHVybj10LCRjPWU7ZWxzZSBmb3IoOyRjIT09bnVsbDspe3N3aXRjaCh0PSRjLG89dC5hbHRlcm5hdGUsZT10LmZsYWdzLHQudGFnKXtjYXNlIDA6aWYoZSY0JiYoZT10LnVwZGF0ZVF1ZXVlLGU9ZT09PW51bGw/bnVsbDplLmV2ZW50cyxlIT09bnVsbCkpZm9yKG49MDtuPGUubGVuZ3RoO24rKylhPWVbbl0sYS5yZWYuaW1wbD1hLm5leHRJbXBsO2JyZWFrO2Nhc2UgMTE6Y2FzZSAxNTpicmVhaztjYXNlIDE6aWYoZSYxMDI0JiZvIT09bnVsbCl7ZT12b2lkIDAsbj10LGE9by5tZW1vaXplZFByb3BzLG89by5tZW1vaXplZFN0YXRlLHI9bi5zdGF0ZU5vZGU7dHJ5e3ZhciBoPVZzKG4udHlwZSxhKTtlPXIuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoaCxvKSxyLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWV9Y2F0Y2goZSl7S3UobixuLnJldHVybixlKX19YnJlYWs7Y2FzZSAzOmlmKGUmMTAyNCl7aWYoZT10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLG49ZS5ub2RlVHlwZSxuPT09OSlhZihlKTtlbHNlIGlmKG49PT0xKXN3aXRjaChlLm5vZGVOYW1lKXtjYXNlYEhFQURgOmNhc2VgSFRNTGA6Y2FzZWBCT0RZYDphZihlKTticmVhaztkZWZhdWx0OmUudGV4dENvbnRlbnQ9YGB9fWJyZWFrO2Nhc2UgNTpjYXNlIDI2OmNhc2UgMjc6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrO2RlZmF1bHQ6aWYoZSYxMDI0KXRocm93IEVycm9yKGkoMTYzKSl9aWYoZT10LnNpYmxpbmcsZSE9PW51bGwpe2UucmV0dXJuPXQucmV0dXJuLCRjPWU7YnJlYWt9JGM9dC5yZXR1cm59fWZ1bmN0aW9uIHRsKGUsdCxuKXt2YXIgcj1uLmZsYWdzO3N3aXRjaChuLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpnbChlLG4pLHImNCYmSWMoNSxuKTticmVhaztjYXNlIDE6aWYoZ2woZSxuKSxyJjQpaWYoZT1uLnN0YXRlTm9kZSx0PT09bnVsbCl0cnl7ZS5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGUpe0t1KG4sbi5yZXR1cm4sZSl9ZWxzZXt2YXIgaT1WcyhuLnR5cGUsdC5tZW1vaXplZFByb3BzKTt0PXQubWVtb2l6ZWRTdGF0ZTt0cnl7ZS5jb21wb25lbnREaWRVcGRhdGUoaSx0LGUuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfWNhdGNoKGUpe0t1KG4sbi5yZXR1cm4sZSl9fXImNjQmJlJjKG4pLHImNTEyJiZCYyhuLG4ucmV0dXJuKTticmVhaztjYXNlIDM6aWYoZ2woZSxuKSxyJjY0JiYoZT1uLnVwZGF0ZVF1ZXVlLGUhPT1udWxsKSl7aWYodD1udWxsLG4uY2hpbGQhPT1udWxsKXN3aXRjaChuLmNoaWxkLnRhZyl7Y2FzZSAyNzpjYXNlIDU6dD1uLmNoaWxkLnN0YXRlTm9kZTticmVhaztjYXNlIDE6dD1uLmNoaWxkLnN0YXRlTm9kZX10cnl7SGEoZSx0KX1jYXRjaChlKXtLdShuLG4ucmV0dXJuLGUpfX1icmVhaztjYXNlIDI3OnQ9PT1udWxsJiZyJjQmJkpjKG4pO2Nhc2UgMjY6Y2FzZSA1OmdsKGUsbiksdD09PW51bGwmJnImNCYmSGMobiksciY1MTImJkJjKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6Z2woZSxuKTticmVhaztjYXNlIDMxOmdsKGUsbiksciY0JiZzbChlLG4pO2JyZWFrO2Nhc2UgMTM6Z2woZSxuKSxyJjQmJmNsKGUsbiksciY2NCYmKGU9bi5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiYoZT1lLmRlaHlkcmF0ZWQsZSE9PW51bGwmJihuPVh1LmJpbmQobnVsbCxuKSxYKGUsbikpKSk7YnJlYWs7Y2FzZSAyMjppZihyPW4ubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fFljLCFyKXt0PXQhPT1udWxsJiZ0Lm1lbW9pemVkU3RhdGUhPT1udWxsfHxYYyxpPVljO3ZhciBhPVhjO1ljPXIsKFhjPXQpJiYhYT92bChlLG4sKG4uc3VidHJlZUZsYWdzJjg3NzIpIT0wKTpnbChlLG4pLFljPWksWGM9YX1icmVhaztjYXNlIDMwOmJyZWFrO2RlZmF1bHQ6Z2woZSxuKX19ZnVuY3Rpb24gbmwoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7dCE9PW51bGwmJihlLmFsdGVybmF0ZT1udWxsLG5sKHQpKSxlLmNoaWxkPW51bGwsZS5kZWxldGlvbnM9bnVsbCxlLnNpYmxpbmc9bnVsbCxlLnRhZz09PTUmJih0PWUuc3RhdGVOb2RlLHQhPT1udWxsJiZvdCh0KSksZS5zdGF0ZU5vZGU9bnVsbCxlLnJldHVybj1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS5wZW5kaW5nUHJvcHM9bnVsbCxlLnN0YXRlTm9kZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbH12YXIgcmw9bnVsbCxpbD0hMTtmdW5jdGlvbiBhbChlLHQsbil7Zm9yKG49bi5jaGlsZDtuIT09bnVsbDspb2woZSx0LG4pLG49bi5zaWJsaW5nfWZ1bmN0aW9uIG9sKGUsdCxuKXtpZihEZSYmdHlwZW9mIERlLm9uQ29tbWl0RmliZXJVbm1vdW50PT1gZnVuY3Rpb25gKXRyeXtEZS5vbkNvbW1pdEZpYmVyVW5tb3VudChFZSxuKX1jYXRjaHt9c3dpdGNoKG4udGFnKXtjYXNlIDI2OlhjfHxWYyhuLHQpLGFsKGUsdCxuKSxuLm1lbW9pemVkU3RhdGU/bi5tZW1vaXplZFN0YXRlLmNvdW50LS06bi5zdGF0ZU5vZGUmJihuPW4uc3RhdGVOb2RlLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSk7YnJlYWs7Y2FzZSAyNzpYY3x8VmMobix0KTt2YXIgcj1ybCxpPWlsO3RmKG4udHlwZSkmJihybD1uLnN0YXRlTm9kZSxpbD0hMSksYWwoZSx0LG4pLGdmKG4uc3RhdGVOb2RlKSxybD1yLGlsPWk7YnJlYWs7Y2FzZSA1OlhjfHxWYyhuLHQpO2Nhc2UgNjppZihyPXJsLGk9aWwscmw9bnVsbCxhbChlLHQsbikscmw9cixpbD1pLHJsIT09bnVsbClpZihpbCl0cnl7KHJsLm5vZGVUeXBlPT09OT9ybC5ib2R5OnJsLm5vZGVOYW1lPT09YEhUTUxgP3JsLm93bmVyRG9jdW1lbnQuYm9keTpybCkucmVtb3ZlQ2hpbGQobi5zdGF0ZU5vZGUpfWNhdGNoKGUpe0t1KG4sdCxlKX1lbHNlIHRyeXtybC5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSl9Y2F0Y2goZSl7S3Uobix0LGUpfWJyZWFrO2Nhc2UgMTg6cmwhPT1udWxsJiYoaWw/KGU9cmwsbmYoZS5ub2RlVHlwZT09PTk/ZS5ib2R5OmUubm9kZU5hbWU9PT1gSFRNTGA/ZS5vd25lckRvY3VtZW50LmJvZHk6ZSxuLnN0YXRlTm9kZSksSXAoZSkpOm5mKHJsLG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9cmwsaT1pbCxybD1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGlsPSEwLGFsKGUsdCxuKSxybD1yLGlsPWk7YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OkxjKDIsbix0KSxYY3x8TGMoNCxuLHQpLGFsKGUsdCxuKTticmVhaztjYXNlIDE6WGN8fChWYyhuLHQpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PWBmdW5jdGlvbmAmJnpjKG4sdCxyKSksYWwoZSx0LG4pO2JyZWFrO2Nhc2UgMjE6YWwoZSx0LG4pO2JyZWFrO2Nhc2UgMjI6WGM9KHI9WGMpfHxuLm1lbW9pemVkU3RhdGUhPT1udWxsLGFsKGUsdCxuKSxYYz1yO2JyZWFrO2RlZmF1bHQ6YWwoZSx0LG4pfX1mdW5jdGlvbiBzbChlLHQpe2lmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihlPXQuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwpKSl7ZT1lLmRlaHlkcmF0ZWQ7dHJ5e0lwKGUpfWNhdGNoKGUpe0t1KHQsdC5yZXR1cm4sZSl9fX1mdW5jdGlvbiBjbChlLHQpe2lmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihlPXQuYWx0ZXJuYXRlLGUhPT1udWxsJiYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCkpKSl0cnl7SXAoZSl9Y2F0Y2goZSl7S3UodCx0LnJldHVybixlKX19ZnVuY3Rpb24gbGwoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDMxOmNhc2UgMTM6Y2FzZSAxOTp2YXIgdD1lLnN0YXRlTm9kZTtyZXR1cm4gdD09PW51bGwmJih0PWUuc3RhdGVOb2RlPW5ldyBRYyksdDtjYXNlIDIyOnJldHVybiBlPWUuc3RhdGVOb2RlLHQ9ZS5fcmV0cnlDYWNoZSx0PT09bnVsbCYmKHQ9ZS5fcmV0cnlDYWNoZT1uZXcgUWMpLHQ7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQzNSxlLnRhZykpfX1mdW5jdGlvbiB1bChlLHQpe3ZhciBuPWxsKGUpO3QuZm9yRWFjaChmdW5jdGlvbih0KXtpZighbi5oYXModCkpe24uYWRkKHQpO3ZhciByPVp1LmJpbmQobnVsbCxlLHQpO3QudGhlbihyLHIpfX0pfWZ1bmN0aW9uIGRsKGUsdCl7dmFyIG49dC5kZWxldGlvbnM7aWYobiE9PW51bGwpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBhPW5bcl0sbz1lLHM9dCxjPXM7YTpmb3IoO2MhPT1udWxsOyl7c3dpdGNoKGMudGFnKXtjYXNlIDI3OmlmKHRmKGMudHlwZSkpe3JsPWMuc3RhdGVOb2RlLGlsPSExO2JyZWFrIGF9YnJlYWs7Y2FzZSA1OnJsPWMuc3RhdGVOb2RlLGlsPSExO2JyZWFrIGE7Y2FzZSAzOmNhc2UgNDpybD1jLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGlsPSEwO2JyZWFrIGF9Yz1jLnJldHVybn1pZihybD09PW51bGwpdGhyb3cgRXJyb3IoaSgxNjApKTtvbChvLHMsYSkscmw9bnVsbCxpbD0hMSxvPWEuYWx0ZXJuYXRlLG8hPT1udWxsJiYoby5yZXR1cm49bnVsbCksYS5yZXR1cm49bnVsbH1pZih0LnN1YnRyZWVGbGFncyYxMzg4Nilmb3IodD10LmNoaWxkO3QhPT1udWxsOylwbCh0LGUpLHQ9dC5zaWJsaW5nfXZhciBmbD1udWxsO2Z1bmN0aW9uIHBsKGUsdCl7dmFyIG49ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmRsKHQsZSksbWwoZSksciY0JiYoTGMoMyxlLGUucmV0dXJuKSxJYygzLGUpLExjKDUsZSxlLnJldHVybikpO2JyZWFrO2Nhc2UgMTpkbCh0LGUpLG1sKGUpLHImNTEyJiYoWGN8fG49PT1udWxsfHxWYyhuLG4ucmV0dXJuKSksciY2NCYmWWMmJihlPWUudXBkYXRlUXVldWUsZSE9PW51bGwmJihyPWUuY2FsbGJhY2tzLHIhPT1udWxsJiYobj1lLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MsZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzPW49PT1udWxsP3I6bi5jb25jYXQocikpKSk7YnJlYWs7Y2FzZSAyNjp2YXIgYT1mbDtpZihkbCh0LGUpLG1sKGUpLHImNTEyJiYoWGN8fG49PT1udWxsfHxWYyhuLG4ucmV0dXJuKSksciY0KXt2YXIgbz1uPT09bnVsbD9udWxsOm4ubWVtb2l6ZWRTdGF0ZTtpZihyPWUubWVtb2l6ZWRTdGF0ZSxuPT09bnVsbClpZihyPT09bnVsbClpZihlLnN0YXRlTm9kZT09PW51bGwpe2E6e3I9ZS50eXBlLG49ZS5tZW1vaXplZFByb3BzLGE9YS5vd25lckRvY3VtZW50fHxhO2I6c3dpdGNoKHIpe2Nhc2VgdGl0bGVgOm89YS5nZXRFbGVtZW50c0J5VGFnTmFtZShgdGl0bGVgKVswXSwoIW98fG9bYXRdfHxvW1FlXXx8by5uYW1lc3BhY2VVUkk9PT1gaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgfHxvLmhhc0F0dHJpYnV0ZShgaXRlbXByb3BgKSkmJihvPWEuY3JlYXRlRWxlbWVudChyKSxhLmhlYWQuaW5zZXJ0QmVmb3JlKG8sYS5xdWVyeVNlbGVjdG9yKGBoZWFkID4gdGl0bGVgKSkpLFJkKG8scixuKSxvW1FlXT1lLGR0KG8pLHI9bzticmVhayBhO2Nhc2VgbGlua2A6dmFyIHM9V2YoYGxpbmtgLGBocmVmYCxhKS5nZXQocisobi5ocmVmfHxgYCkpO2lmKHMpe2Zvcih2YXIgYz0wO2M8cy5sZW5ndGg7YysrKWlmKG89c1tjXSxvLmdldEF0dHJpYnV0ZShgaHJlZmApPT09KG4uaHJlZj09bnVsbHx8bi5ocmVmPT09YGA/bnVsbDpuLmhyZWYpJiZvLmdldEF0dHJpYnV0ZShgcmVsYCk9PT0obi5yZWw9PW51bGw/bnVsbDpuLnJlbCkmJm8uZ2V0QXR0cmlidXRlKGB0aXRsZWApPT09KG4udGl0bGU9PW51bGw/bnVsbDpuLnRpdGxlKSYmby5nZXRBdHRyaWJ1dGUoYGNyb3Nzb3JpZ2luYCk9PT0obi5jcm9zc09yaWdpbj09bnVsbD9udWxsOm4uY3Jvc3NPcmlnaW4pKXtzLnNwbGljZShjLDEpO2JyZWFrIGJ9fW89YS5jcmVhdGVFbGVtZW50KHIpLFJkKG8scixuKSxhLmhlYWQuYXBwZW5kQ2hpbGQobyk7YnJlYWs7Y2FzZWBtZXRhYDppZihzPVdmKGBtZXRhYCxgY29udGVudGAsYSkuZ2V0KHIrKG4uY29udGVudHx8YGApKSl7Zm9yKGM9MDtjPHMubGVuZ3RoO2MrKylpZihvPXNbY10sby5nZXRBdHRyaWJ1dGUoYGNvbnRlbnRgKT09PShuLmNvbnRlbnQ9PW51bGw/bnVsbDpgYCtuLmNvbnRlbnQpJiZvLmdldEF0dHJpYnV0ZShgbmFtZWApPT09KG4ubmFtZT09bnVsbD9udWxsOm4ubmFtZSkmJm8uZ2V0QXR0cmlidXRlKGBwcm9wZXJ0eWApPT09KG4ucHJvcGVydHk9PW51bGw/bnVsbDpuLnByb3BlcnR5KSYmby5nZXRBdHRyaWJ1dGUoYGh0dHAtZXF1aXZgKT09PShuLmh0dHBFcXVpdj09bnVsbD9udWxsOm4uaHR0cEVxdWl2KSYmby5nZXRBdHRyaWJ1dGUoYGNoYXJzZXRgKT09PShuLmNoYXJTZXQ9PW51bGw/bnVsbDpuLmNoYXJTZXQpKXtzLnNwbGljZShjLDEpO2JyZWFrIGJ9fW89YS5jcmVhdGVFbGVtZW50KHIpLFJkKG8scixuKSxhLmhlYWQuYXBwZW5kQ2hpbGQobyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQ2OCxyKSl9b1tRZV09ZSxkdChvKSxyPW99ZS5zdGF0ZU5vZGU9cn1lbHNlIEdmKGEsZS50eXBlLGUuc3RhdGVOb2RlKTtlbHNlIGUuc3RhdGVOb2RlPXpmKGEscixlLm1lbW9pemVkUHJvcHMpO2Vsc2Ugbz09PXI/cj09PW51bGwmJmUuc3RhdGVOb2RlIT09bnVsbCYmVWMoZSxlLm1lbW9pemVkUHJvcHMsbi5tZW1vaXplZFByb3BzKToobz09PW51bGw/bi5zdGF0ZU5vZGUhPT1udWxsJiYobj1uLnN0YXRlTm9kZSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpOm8uY291bnQtLSxyPT09bnVsbD9HZihhLGUudHlwZSxlLnN0YXRlTm9kZSk6emYoYSxyLGUubWVtb2l6ZWRQcm9wcykpfWJyZWFrO2Nhc2UgMjc6ZGwodCxlKSxtbChlKSxyJjUxMiYmKFhjfHxuPT09bnVsbHx8VmMobixuLnJldHVybikpLG4hPT1udWxsJiZyJjQmJlVjKGUsZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmlmKGRsKHQsZSksbWwoZSksciY1MTImJihYY3x8bj09PW51bGx8fFZjKG4sbi5yZXR1cm4pKSxlLmZsYWdzJjMyKXthPWUuc3RhdGVOb2RlO3RyeXtMdChhLGBgKX1jYXRjaCh0KXtLdShlLGUucmV0dXJuLHQpfX1yJjQmJmUuc3RhdGVOb2RlIT1udWxsJiYoYT1lLm1lbW9pemVkUHJvcHMsVWMoZSxhLG49PT1udWxsP2E6bi5tZW1vaXplZFByb3BzKSksciYxMDI0JiYoWmM9ITApO2JyZWFrO2Nhc2UgNjppZihkbCh0LGUpLG1sKGUpLHImNCl7aWYoZS5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKGkoMTYyKSk7cj1lLm1lbW9pemVkUHJvcHMsbj1lLnN0YXRlTm9kZTt0cnl7bi5ub2RlVmFsdWU9cn1jYXRjaCh0KXtLdShlLGUucmV0dXJuLHQpfX1icmVhaztjYXNlIDM6aWYoVWY9bnVsbCxhPWZsLGZsPXlmKHQuY29udGFpbmVySW5mbyksZGwodCxlKSxmbD1hLG1sKGUpLHImNCYmbiE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpdHJ5e0lwKHQuY29udGFpbmVySW5mbyl9Y2F0Y2godCl7S3UoZSxlLnJldHVybix0KX1aYyYmKFpjPSExLGhsKGUpKTticmVhaztjYXNlIDQ6cj1mbCxmbD15ZihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkbCh0LGUpLG1sKGUpLGZsPXI7YnJlYWs7Y2FzZSAxMjpkbCh0LGUpLG1sKGUpO2JyZWFrO2Nhc2UgMzE6ZGwodCxlKSxtbChlKSxyJjQmJihyPWUudXBkYXRlUXVldWUsciE9PW51bGwmJihlLnVwZGF0ZVF1ZXVlPW51bGwsdWwoZSxyKSkpO2JyZWFrO2Nhc2UgMTM6ZGwodCxlKSxtbChlKSxlLmNoaWxkLmZsYWdzJjgxOTImJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwhPShuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlIT09bnVsbCkmJihldT1fZSgpKSxyJjQmJihyPWUudXBkYXRlUXVldWUsciE9PW51bGwmJihlLnVwZGF0ZVF1ZXVlPW51bGwsdWwoZSxyKSkpO2JyZWFrO2Nhc2UgMjI6YT1lLm1lbW9pemVkU3RhdGUhPT1udWxsO3ZhciBsPW4hPT1udWxsJiZuLm1lbW9pemVkU3RhdGUhPT1udWxsLHU9WWMsZD1YYztpZihZYz11fHxhLFhjPWR8fGwsZGwodCxlKSxYYz1kLFljPXUsbWwoZSksciY4MTkyKWE6Zm9yKHQ9ZS5zdGF0ZU5vZGUsdC5fdmlzaWJpbGl0eT1hP3QuX3Zpc2liaWxpdHkmLTI6dC5fdmlzaWJpbGl0eXwxLGEmJihuPT09bnVsbHx8bHx8WWN8fFhjfHxfbChlKSksbj1udWxsLHQ9ZTs7KXtpZih0LnRhZz09PTV8fHQudGFnPT09MjYpe2lmKG49PT1udWxsKXtsPW49dDt0cnl7aWYobz1sLnN0YXRlTm9kZSxhKXM9by5zdHlsZSx0eXBlb2Ygcy5zZXRQcm9wZXJ0eT09YGZ1bmN0aW9uYD9zLnNldFByb3BlcnR5KGBkaXNwbGF5YCxgbm9uZWAsYGltcG9ydGFudGApOnMuZGlzcGxheT1gbm9uZWA7ZWxzZXtjPWwuc3RhdGVOb2RlO3ZhciBmPWwubWVtb2l6ZWRQcm9wcy5zdHlsZSxwPWYhPW51bGwmJmYuaGFzT3duUHJvcGVydHkoYGRpc3BsYXlgKT9mLmRpc3BsYXk6bnVsbDtjLnN0eWxlLmRpc3BsYXk9cD09bnVsbHx8dHlwZW9mIHA9PWBib29sZWFuYD9gYDooYGArcCkudHJpbSgpfX1jYXRjaChlKXtLdShsLGwucmV0dXJuLGUpfX19ZWxzZSBpZih0LnRhZz09PTYpe2lmKG49PT1udWxsKXtsPXQ7dHJ5e2wuc3RhdGVOb2RlLm5vZGVWYWx1ZT1hP2BgOmwubWVtb2l6ZWRQcm9wc31jYXRjaChlKXtLdShsLGwucmV0dXJuLGUpfX19ZWxzZSBpZih0LnRhZz09PTE4KXtpZihuPT09bnVsbCl7bD10O3RyeXt2YXIgbT1sLnN0YXRlTm9kZTthP3JmKG0sITApOnJmKGwuc3RhdGVOb2RlLCExKX1jYXRjaChlKXtLdShsLGwucmV0dXJuLGUpfX19ZWxzZSBpZigodC50YWchPT0yMiYmdC50YWchPT0yM3x8dC5tZW1vaXplZFN0YXRlPT09bnVsbHx8dD09PWUpJiZ0LmNoaWxkIT09bnVsbCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWUpYnJlYWsgYTtmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlicmVhayBhO249PT10JiYobj1udWxsKSx0PXQucmV0dXJufW49PT10JiYobj1udWxsKSx0LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfXImNCYmKHI9ZS51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKG49ci5yZXRyeVF1ZXVlLG4hPT1udWxsJiYoci5yZXRyeVF1ZXVlPW51bGwsdWwoZSxuKSkpKTticmVhaztjYXNlIDE5OmRsKHQsZSksbWwoZSksciY0JiYocj1lLnVwZGF0ZVF1ZXVlLHIhPT1udWxsJiYoZS51cGRhdGVRdWV1ZT1udWxsLHVsKGUscikpKTticmVhaztjYXNlIDMwOmJyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDpkbCh0LGUpLG1sKGUpfX1mdW5jdGlvbiBtbChlKXt2YXIgdD1lLmZsYWdzO2lmKHQmMil7dHJ5e2Zvcih2YXIgbixyPWUucmV0dXJuO3IhPT1udWxsOyl7aWYoV2Mocikpe249cjticmVha31yPXIucmV0dXJufWlmKG49PW51bGwpdGhyb3cgRXJyb3IoaSgxNjApKTtzd2l0Y2gobi50YWcpe2Nhc2UgMjc6dmFyIGE9bi5zdGF0ZU5vZGU7cWMoZSxHYyhlKSxhKTticmVhaztjYXNlIDU6dmFyIG89bi5zdGF0ZU5vZGU7bi5mbGFncyYzMiYmKEx0KG8sYGApLG4uZmxhZ3MmPS0zMykscWMoZSxHYyhlKSxvKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBzPW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm87S2MoZSxHYyhlKSxzKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGkoMTYxKSl9fWNhdGNoKHQpe0t1KGUsZS5yZXR1cm4sdCl9ZS5mbGFncyY9LTN9dCY0MDk2JiYoZS5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGhsKGUpe2lmKGUuc3VidHJlZUZsYWdzJjEwMjQpZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PWU7aGwodCksdC50YWc9PT01JiZ0LmZsYWdzJjEwMjQmJnQuc3RhdGVOb2RlLnJlc2V0KCksZT1lLnNpYmxpbmd9fWZ1bmN0aW9uIGdsKGUsdCl7aWYodC5zdWJ0cmVlRmxhZ3MmODc3Milmb3IodD10LmNoaWxkO3QhPT1udWxsOyl0bChlLHQuYWx0ZXJuYXRlLHQpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIF9sKGUpe2ZvcihlPWUuY2hpbGQ7ZSE9PW51bGw7KXt2YXIgdD1lO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OkxjKDQsdCx0LnJldHVybiksX2wodCk7YnJlYWs7Y2FzZSAxOlZjKHQsdC5yZXR1cm4pO3ZhciBuPXQuc3RhdGVOb2RlO3R5cGVvZiBuLmNvbXBvbmVudFdpbGxVbm1vdW50PT1gZnVuY3Rpb25gJiZ6Yyh0LHQucmV0dXJuLG4pLF9sKHQpO2JyZWFrO2Nhc2UgMjc6Z2YodC5zdGF0ZU5vZGUpO2Nhc2UgMjY6Y2FzZSA1OlZjKHQsdC5yZXR1cm4pLF9sKHQpO2JyZWFrO2Nhc2UgMjI6dC5tZW1vaXplZFN0YXRlPT09bnVsbCYmX2wodCk7YnJlYWs7Y2FzZSAzMDpfbCh0KTticmVhaztkZWZhdWx0Ol9sKHQpfWU9ZS5zaWJsaW5nfX1mdW5jdGlvbiB2bChlLHQsbil7Zm9yKG4mJj0odC5zdWJ0cmVlRmxhZ3MmODc3MikhPTAsdD10LmNoaWxkO3QhPT1udWxsOyl7dmFyIHI9dC5hbHRlcm5hdGUsaT1lLGE9dCxvPWEuZmxhZ3M7c3dpdGNoKGEudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnZsKGksYSxuKSxJYyg0LGEpO2JyZWFrO2Nhc2UgMTppZih2bChpLGEsbikscj1hLGk9ci5zdGF0ZU5vZGUsdHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQ9PWBmdW5jdGlvbmApdHJ5e2kuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChlKXtLdShyLHIucmV0dXJuLGUpfWlmKHI9YSxpPXIudXBkYXRlUXVldWUsaSE9PW51bGwpe3ZhciBzPXIuc3RhdGVOb2RlO3RyeXt2YXIgYz1pLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7aWYoYyE9PW51bGwpZm9yKGkuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsLGk9MDtpPGMubGVuZ3RoO2krKylWYShjW2ldLHMpfWNhdGNoKGUpe0t1KHIsci5yZXR1cm4sZSl9fW4mJm8mNjQmJlJjKGEpLEJjKGEsYS5yZXR1cm4pO2JyZWFrO2Nhc2UgMjc6SmMoYSk7Y2FzZSAyNjpjYXNlIDU6dmwoaSxhLG4pLG4mJnI9PT1udWxsJiZvJjQmJkhjKGEpLEJjKGEsYS5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6dmwoaSxhLG4pO2JyZWFrO2Nhc2UgMzE6dmwoaSxhLG4pLG4mJm8mNCYmc2woaSxhKTticmVhaztjYXNlIDEzOnZsKGksYSxuKSxuJiZvJjQmJmNsKGksYSk7YnJlYWs7Y2FzZSAyMjphLm1lbW9pemVkU3RhdGU9PT1udWxsJiZ2bChpLGEsbiksQmMoYSxhLnJldHVybik7YnJlYWs7Y2FzZSAzMDpicmVhaztkZWZhdWx0OnZsKGksYSxuKX10PXQuc2libGluZ319ZnVuY3Rpb24geWwoZSx0KXt2YXIgbj1udWxsO2UhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKG49ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxlPW51bGwsdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihlPXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksZSE9PW4mJihlIT1udWxsJiZlLnJlZkNvdW50KyssbiE9bnVsbCYmdGEobikpfWZ1bmN0aW9uIGJsKGUsdCl7ZT1udWxsLHQuYWx0ZXJuYXRlIT09bnVsbCYmKGU9dC5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksdD10Lm1lbW9pemVkU3RhdGUuY2FjaGUsdCE9PWUmJih0LnJlZkNvdW50KyssZSE9bnVsbCYmdGEoZSkpfWZ1bmN0aW9uIHhsKGUsdCxuLHIpe2lmKHQuc3VidHJlZUZsYWdzJjEwMjU2KWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KVNsKGUsdCxuLHIpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIFNsKGUsdCxuLHIpe3ZhciBpPXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnhsKGUsdCxuLHIpLGkmMjA0OCYmSWMoOSx0KTticmVhaztjYXNlIDE6eGwoZSx0LG4scik7YnJlYWs7Y2FzZSAzOnhsKGUsdCxuLHIpLGkmMjA0OCYmKGU9bnVsbCx0LmFsdGVybmF0ZSE9PW51bGwmJihlPXQuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQ9dC5tZW1vaXplZFN0YXRlLmNhY2hlLHQhPT1lJiYodC5yZWZDb3VudCsrLGUhPW51bGwmJnRhKGUpKSk7YnJlYWs7Y2FzZSAxMjppZihpJjIwNDgpe3hsKGUsdCxuLHIpLGU9dC5zdGF0ZU5vZGU7dHJ5e3ZhciBhPXQubWVtb2l6ZWRQcm9wcyxvPWEuaWQscz1hLm9uUG9zdENvbW1pdDt0eXBlb2Ygcz09YGZ1bmN0aW9uYCYmcyhvLHQuYWx0ZXJuYXRlPT09bnVsbD9gbW91bnRgOmB1cGRhdGVgLGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uLC0wKX1jYXRjaChlKXtLdSh0LHQucmV0dXJuLGUpfX1lbHNlIHhsKGUsdCxuLHIpO2JyZWFrO2Nhc2UgMzE6eGwoZSx0LG4scik7YnJlYWs7Y2FzZSAxMzp4bChlLHQsbixyKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6YT10LnN0YXRlTm9kZSxvPXQuYWx0ZXJuYXRlLHQubWVtb2l6ZWRTdGF0ZT09PW51bGw/YS5fdmlzaWJpbGl0eSYyP3hsKGUsdCxuLHIpOihhLl92aXNpYmlsaXR5fD0yLENsKGUsdCxuLHIsKHQuc3VidHJlZUZsYWdzJjEwMjU2KSE9MHx8ITEpKTphLl92aXNpYmlsaXR5JjI/eGwoZSx0LG4scik6d2woZSx0KSxpJjIwNDgmJnlsKG8sdCk7YnJlYWs7Y2FzZSAyNDp4bChlLHQsbixyKSxpJjIwNDgmJmJsKHQuYWx0ZXJuYXRlLHQpO2JyZWFrO2RlZmF1bHQ6eGwoZSx0LG4scil9fWZ1bmN0aW9uIENsKGUsdCxuLHIsaSl7Zm9yKGkmJj0odC5zdWJ0cmVlRmxhZ3MmMTAyNTYpIT0wfHwhMSx0PXQuY2hpbGQ7dCE9PW51bGw7KXt2YXIgYT1lLG89dCxzPW4sYz1yLGw9by5mbGFncztzd2l0Y2goby50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Q2woYSxvLHMsYyxpKSxJYyg4LG8pO2JyZWFrO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyMjp2YXIgdT1vLnN0YXRlTm9kZTtvLm1lbW9pemVkU3RhdGU9PT1udWxsPyh1Ll92aXNpYmlsaXR5fD0yLENsKGEsbyxzLGMsaSkpOnUuX3Zpc2liaWxpdHkmMj9DbChhLG8scyxjLGkpOndsKGEsbyksaSYmbCYyMDQ4JiZ5bChvLmFsdGVybmF0ZSxvKTticmVhaztjYXNlIDI0OkNsKGEsbyxzLGMsaSksaSYmbCYyMDQ4JiZibChvLmFsdGVybmF0ZSxvKTticmVhaztkZWZhdWx0OkNsKGEsbyxzLGMsaSl9dD10LnNpYmxpbmd9fWZ1bmN0aW9uIHdsKGUsdCl7aWYodC5zdWJ0cmVlRmxhZ3MmMTAyNTYpZm9yKHQ9dC5jaGlsZDt0IT09bnVsbDspe3ZhciBuPWUscj10LGk9ci5mbGFncztzd2l0Y2goci50YWcpe2Nhc2UgMjI6d2wobixyKSxpJjIwNDgmJnlsKHIuYWx0ZXJuYXRlLHIpO2JyZWFrO2Nhc2UgMjQ6d2wobixyKSxpJjIwNDgmJmJsKHIuYWx0ZXJuYXRlLHIpO2JyZWFrO2RlZmF1bHQ6d2wobixyKX10PXQuc2libGluZ319dmFyIFRsPTgxOTI7ZnVuY3Rpb24gRWwoZSx0LG4pe2lmKGUuc3VidHJlZUZsYWdzJlRsKWZvcihlPWUuY2hpbGQ7ZSE9PW51bGw7KURsKGUsdCxuKSxlPWUuc2libGluZ31mdW5jdGlvbiBEbChlLHQsbil7c3dpdGNoKGUudGFnKXtjYXNlIDI2OkVsKGUsdCxuKSxlLmZsYWdzJlRsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZKZihuLGZsLGUubWVtb2l6ZWRTdGF0ZSxlLm1lbW9pemVkUHJvcHMpO2JyZWFrO2Nhc2UgNTpFbChlLHQsbik7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgcj1mbDtmbD15ZihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxFbChlLHQsbiksZmw9cjticmVhaztjYXNlIDIyOmUubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihyPWUuYWx0ZXJuYXRlLHIhPT1udWxsJiZyLm1lbW9pemVkU3RhdGUhPT1udWxsPyhyPVRsLFRsPTE2Nzc3MjE2LEVsKGUsdCxuKSxUbD1yKTpFbChlLHQsbikpO2JyZWFrO2RlZmF1bHQ6RWwoZSx0LG4pfX1mdW5jdGlvbiBPbChlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZih0IT09bnVsbCYmKGU9dC5jaGlsZCxlIT09bnVsbCkpe3QuY2hpbGQ9bnVsbDtkbyB0PWUuc2libGluZyxlLnNpYmxpbmc9bnVsbCxlPXQ7d2hpbGUoZSE9PW51bGwpfX1mdW5jdGlvbiBrbChlKXt2YXIgdD1lLmRlbGV0aW9ucztpZihlLmZsYWdzJjE2KXtpZih0IT09bnVsbClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTskYz1yLE1sKHIsZSl9T2woZSl9aWYoZS5zdWJ0cmVlRmxhZ3MmMTAyNTYpZm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspQWwoZSksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gQWwoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmtsKGUpLGUuZmxhZ3MmMjA0OCYmTGMoOSxlLGUucmV0dXJuKTticmVhaztjYXNlIDM6a2woZSk7YnJlYWs7Y2FzZSAxMjprbChlKTticmVhaztjYXNlIDIyOnZhciB0PWUuc3RhdGVOb2RlO2UubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJnQuX3Zpc2liaWxpdHkmMiYmKGUucmV0dXJuPT09bnVsbHx8ZS5yZXR1cm4udGFnIT09MTMpPyh0Ll92aXNpYmlsaXR5Jj0tMyxqbChlKSk6a2woZSk7YnJlYWs7ZGVmYXVsdDprbChlKX19ZnVuY3Rpb24gamwoZSl7dmFyIHQ9ZS5kZWxldGlvbnM7aWYoZS5mbGFncyYxNil7aWYodCE9PW51bGwpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07JGM9cixNbChyLGUpfU9sKGUpfWZvcihlPWUuY2hpbGQ7ZSE9PW51bGw7KXtzd2l0Y2godD1lLHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkxjKDgsdCx0LnJldHVybiksamwodCk7YnJlYWs7Y2FzZSAyMjpuPXQuc3RhdGVOb2RlLG4uX3Zpc2liaWxpdHkmMiYmKG4uX3Zpc2liaWxpdHkmPS0zLGpsKHQpKTticmVhaztkZWZhdWx0OmpsKHQpfWU9ZS5zaWJsaW5nfX1mdW5jdGlvbiBNbChlLHQpe2Zvcig7JGMhPT1udWxsOyl7dmFyIG49JGM7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OkxjKDgsbix0KTticmVhaztjYXNlIDIzOmNhc2UgMjI6aWYobi5tZW1vaXplZFN0YXRlIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwpe3ZhciByPW4ubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbDtyIT1udWxsJiZyLnJlZkNvdW50Kyt9YnJlYWs7Y2FzZSAyNDp0YShuLm1lbW9pemVkU3RhdGUuY2FjaGUpfWlmKHI9bi5jaGlsZCxyIT09bnVsbClyLnJldHVybj1uLCRjPXI7ZWxzZSBhOmZvcihuPWU7JGMhPT1udWxsOyl7cj0kYzt2YXIgaT1yLnNpYmxpbmcsYT1yLnJldHVybjtpZihubChyKSxyPT09bil7JGM9bnVsbDticmVhayBhfWlmKGkhPT1udWxsKXtpLnJldHVybj1hLCRjPWk7YnJlYWsgYX0kYz1hfX19dmFyIE5sPXtnZXRDYWNoZUZvclR5cGU6ZnVuY3Rpb24oZSl7dmFyIHQ9cWkoJGkpLG49dC5kYXRhLmdldChlKTtyZXR1cm4gbj09PXZvaWQgMCYmKG49ZSgpLHQuZGF0YS5zZXQoZSxuKSksbn0sY2FjaGVTaWduYWw6ZnVuY3Rpb24oKXtyZXR1cm4gcWkoJGkpLmNvbnRyb2xsZXIuc2lnbmFsfX0sUGw9dHlwZW9mIFdlYWtNYXA9PWBmdW5jdGlvbmA/V2Vha01hcDpNYXAsRmw9MCxJbD1udWxsLExsPW51bGwsUmw9MCx6bD0wLEJsPW51bGwsVmw9ITEsSGw9ITEsVWw9ITEsV2w9MCxHbD0wLEtsPTAscWw9MCxKbD0wLFlsPTAsWGw9MCxabD1udWxsLFFsPW51bGwsJGw9ITEsZXU9MCx0dT0wLG51PTEvMCxydT1udWxsLGl1PW51bGwsYXU9MCxvdT1udWxsLHN1PW51bGwsY3U9MCxsdT0wLHV1PW51bGwsZHU9bnVsbCxmdT0wLHB1PW51bGw7ZnVuY3Rpb24gbXUoKXtyZXR1cm4gRmwmMiYmUmwhPT0wP1JsJi1SbDpJLlQ9PT1udWxsP1llKCk6cGQoKX1mdW5jdGlvbiBodSgpe2lmKFlsPT09MClpZighKFJsJjUzNjg3MDkxMil8fEVpKXt2YXIgZT1QZTtQZTw8PTEsIShQZSYzOTMyMTYwKSYmKFBlPTI2MjE0NCksWWw9ZX1lbHNlIFlsPTUzNjg3MDkxMjtyZXR1cm4gZT1KYS5jdXJyZW50LGUhPT1udWxsJiYoZS5mbGFnc3w9MzIpLFlsfWZ1bmN0aW9uIGd1KGUsdCxuKXsoZT09PUlsJiYoemw9PT0yfHx6bD09PTkpfHxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsKSYmKEN1KGUsMCksYnUoZSxSbCxZbCwhMSkpLEhlKGUsbiksKCEoRmwmMil8fGUhPT1JbCkmJihlPT09SWwmJighKEZsJjIpJiYocWx8PW4pLEdsPT09NCYmYnUoZSxSbCxZbCwhMSkpLGFkKGUpKX1mdW5jdGlvbiBfdShlLHQsbil7aWYoRmwmNil0aHJvdyBFcnJvcihpKDMyNykpO3ZhciByPSFuJiYodCYxMjcpPT0wJiYodCZlLmV4cGlyZWRMYW5lcyk9PT0wfHxSZShlLHQpLGE9cj9qdShlLHQpOmt1KGUsdCwhMCksbz1yO2Rve2lmKGE9PT0wKXtIbCYmIXImJmJ1KGUsdCwwLCExKTticmVha31lbHNle2lmKG49ZS5jdXJyZW50LmFsdGVybmF0ZSxvJiYheXUobikpe2E9a3UoZSx0LCExKSxvPSExO2NvbnRpbnVlfWlmKGE9PT0yKXtpZihvPXQsZS5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyZvKXZhciBzPTA7ZWxzZSBzPWUucGVuZGluZ0xhbmVzJi01MzY4NzA5MTMscz1zPT09MD9zJjUzNjg3MDkxMj81MzY4NzA5MTI6MDpzO2lmKHMhPT0wKXt0PXM7YTp7dmFyIGM9ZTthPVpsO3ZhciBsPWMuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZDtpZihsJiYoQ3UoYyxzKS5mbGFnc3w9MjU2KSxzPWt1KGMscywhMSkscyE9PTIpe2lmKFVsJiYhbCl7Yy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lc3w9byxxbHw9byxhPTQ7YnJlYWsgYX1vPVFsLFFsPWEsbyE9PW51bGwmJihRbD09PW51bGw/UWw9bzpRbC5wdXNoLmFwcGx5KFFsLG8pKX1hPXN9aWYobz0hMSxhIT09Miljb250aW51ZX19aWYoYT09PTEpe0N1KGUsMCksYnUoZSx0LDAsITApO2JyZWFrfWE6e3N3aXRjaChyPWUsbz1hLG8pe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IoaSgzNDUpKTtjYXNlIDQ6aWYoKHQmNDE5NDA0OCkhPT10KWJyZWFrO2Nhc2UgNjpidShyLHQsWWwsIVZsKTticmVhayBhO2Nhc2UgMjpRbD1udWxsO2JyZWFrO2Nhc2UgMzpjYXNlIDU6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDMyOSkpfWlmKCh0JjYyOTE0NTYwKT09PXQmJihhPWV1KzMwMC1fZSgpLDEwPGEpKXtpZihidShyLHQsWWwsIVZsKSxMZShyLDAsITApIT09MClicmVhayBhO2N1PXQsci50aW1lb3V0SGFuZGxlPVhkKHZ1LmJpbmQobnVsbCxyLG4sUWwscnUsJGwsdCxZbCxxbCxYbCxWbCxvLGBUaHJvdHRsZWRgLC0wLDApLGEpO2JyZWFrIGF9dnUocixuLFFsLHJ1LCRsLHQsWWwscWwsWGwsVmwsbyxudWxsLC0wLDApfX1icmVha313aGlsZSgxKTthZChlKX1mdW5jdGlvbiB2dShlLHQsbixyLGksYSxvLHMsYyxsLHUsZCxmLHApe2lmKGUudGltZW91dEhhbmRsZT0tMSxkPXQuc3VidHJlZUZsYWdzLGQmODE5Mnx8KGQmMTY3ODU0MDgpPT0xNjc4NTQwOCl7ZD17c3R5bGVzaGVldHM6bnVsbCxjb3VudDowLGltZ0NvdW50OjAsaW1nQnl0ZXM6MCxzdXNwZW5zZXlJbWFnZXM6W10sd2FpdGluZ0ZvckltYWdlczohMCx3YWl0aW5nRm9yVmlld1RyYW5zaXRpb246ITEsdW5zdXNwZW5kOkd0fSxEbCh0LGEsZCk7dmFyIG09KGEmNjI5MTQ1NjApPT09YT9ldS1fZSgpOihhJjQxOTQwNDgpPT09YT90dS1fZSgpOjA7aWYobT1YZihkLG0pLG0hPT1udWxsKXtjdT1hLGUuY2FuY2VsUGVuZGluZ0NvbW1pdD1tKFJ1LmJpbmQobnVsbCxlLHQsYSxuLHIsaSxvLHMsYyx1LGQsbnVsbCxmLHApKSxidShlLGEsbywhbCk7cmV0dXJufX1SdShlLHQsYSxuLHIsaSxvLHMsYyl9ZnVuY3Rpb24geXUoZSl7Zm9yKHZhciB0PWU7Oyl7dmFyIG49dC50YWc7aWYoKG49PT0wfHxuPT09MTF8fG49PT0xNSkmJnQuZmxhZ3MmMTYzODQmJihuPXQudXBkYXRlUXVldWUsbiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSkpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0sYT1pLmdldFNuYXBzaG90O2k9aS52YWx1ZTt0cnl7aWYoIXByKGEoKSxpKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX19aWYobj10LmNoaWxkLHQuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj10LHQ9bjtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiEwO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gYnUoZSx0LG4scil7dCY9fkpsLHQmPX5xbCxlLnN1c3BlbmRlZExhbmVzfD10LGUucGluZ2VkTGFuZXMmPX50LHImJihlLndhcm1MYW5lc3w9dCkscj1lLmV4cGlyYXRpb25UaW1lcztmb3IodmFyIGk9dDswPGk7KXt2YXIgYT0zMS1rZShpKSxvPTE8PGE7clthXT0tMSxpJj1+b31uIT09MCYmV2UoZSxuLHQpfWZ1bmN0aW9uIHh1KCl7cmV0dXJuIEZsJjY/ITA6KG9kKDAsITEpLCExKX1mdW5jdGlvbiBTdSgpe2lmKExsIT09bnVsbCl7aWYoemw9PT0wKXZhciBlPUxsLnJldHVybjtlbHNlIGU9TGwsemk9Umk9bnVsbCxDbyhlKSx3YT1udWxsLFRhPTAsZT1MbDtmb3IoO2UhPT1udWxsOylGYyhlLmFsdGVybmF0ZSxlKSxlPWUucmV0dXJuO0xsPW51bGx9fWZ1bmN0aW9uIEN1KGUsdCl7dmFyIG49ZS50aW1lb3V0SGFuZGxlO24hPT0tMSYmKGUudGltZW91dEhhbmRsZT0tMSxaZChuKSksbj1lLmNhbmNlbFBlbmRpbmdDb21taXQsbiE9PW51bGwmJihlLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCxuKCkpLGN1PTAsU3UoKSxJbD1lLExsPW49dGkoZS5jdXJyZW50LG51bGwpLFJsPXQsemw9MCxCbD1udWxsLFZsPSExLEhsPVJlKGUsdCksVWw9ITEsWGw9WWw9Smw9cWw9S2w9R2w9MCxRbD1abD1udWxsLCRsPSExLHQmOCYmKHR8PXQmMzIpO3ZhciByPWUuZW50YW5nbGVkTGFuZXM7aWYociE9PTApZm9yKGU9ZS5lbnRhbmdsZW1lbnRzLHImPXQ7MDxyOyl7dmFyIGk9MzEta2UociksYT0xPDxpO3R8PWVbaV0sciY9fmF9cmV0dXJuIFdsPXQsR3IoKSxufWZ1bmN0aW9uIHd1KGUsdCl7aW89bnVsbCxJLkg9TnMsdD09PW1hfHx0PT09Z2E/KHQ9U2EoKSx6bD0zKTp0PT09aGE/KHQ9U2EoKSx6bD00KTp6bD10PT09WnM/ODp0eXBlb2YgdD09YG9iamVjdGAmJnQmJnR5cGVvZiB0LnRoZW49PWBmdW5jdGlvbmA/NjoxLEJsPXQsTGw9PT1udWxsJiYoR2w9MSxHcyhlLGxpKHQsZS5jdXJyZW50KSkpfWZ1bmN0aW9uIFR1KCl7dmFyIGU9SmEuY3VycmVudDtyZXR1cm4gZT09PW51bGw/ITA6KFJsJjQxOTQwNDgpPT09Umw/WWE9PT1udWxsOihSbCY2MjkxNDU2MCk9PT1SbHx8UmwmNTM2ODcwOTEyP2U9PT1ZYTohMX1mdW5jdGlvbiBFdSgpe3ZhciBlPUkuSDtyZXR1cm4gSS5IPU5zLGU9PT1udWxsP05zOmV9ZnVuY3Rpb24gRHUoKXt2YXIgZT1JLkE7cmV0dXJuIEkuQT1ObCxlfWZ1bmN0aW9uIE91KCl7R2w9NCxWbHx8KFJsJjQxOTQwNDgpIT09UmwmJkphLmN1cnJlbnQhPT1udWxsfHwoSGw9ITApLCEoS2wmMTM0MjE3NzI3KSYmIShxbCYxMzQyMTc3MjcpfHxJbD09PW51bGx8fGJ1KElsLFJsLFlsLCExKX1mdW5jdGlvbiBrdShlLHQsbil7dmFyIHI9Rmw7Rmx8PTI7dmFyIGk9RXUoKSxhPUR1KCk7KElsIT09ZXx8UmwhPT10KSYmKHJ1PW51bGwsQ3UoZSx0KSksdD0hMTt2YXIgbz1HbDthOmRvIHRyeXtpZih6bCE9PTAmJkxsIT09bnVsbCl7dmFyIHM9TGwsYz1CbDtzd2l0Y2goemwpe2Nhc2UgODpTdSgpLG89NjticmVhayBhO2Nhc2UgMzpjYXNlIDI6Y2FzZSA5OmNhc2UgNjpKYS5jdXJyZW50PT09bnVsbCYmKHQ9ITApO3ZhciBsPXpsO2lmKHpsPTAsQmw9bnVsbCxGdShlLHMsYyxsKSxuJiZIbCl7bz0wO2JyZWFrIGF9YnJlYWs7ZGVmYXVsdDpsPXpsLHpsPTAsQmw9bnVsbCxGdShlLHMsYyxsKX19QXUoKSxvPUdsO2JyZWFrfWNhdGNoKHQpe3d1KGUsdCl9d2hpbGUoMSk7cmV0dXJuIHQmJmUuc2hlbGxTdXNwZW5kQ291bnRlcisrLHppPVJpPW51bGwsRmw9cixJLkg9aSxJLkE9YSxMbD09PW51bGwmJihJbD1udWxsLFJsPTAsR3IoKSksb31mdW5jdGlvbiBBdSgpe2Zvcig7TGwhPT1udWxsOylOdShMbCl9ZnVuY3Rpb24ganUoZSx0KXt2YXIgbj1GbDtGbHw9Mjt2YXIgcj1FdSgpLGE9RHUoKTtJbCE9PWV8fFJsIT09dD8ocnU9bnVsbCxudT1fZSgpKzUwMCxDdShlLHQpKTpIbD1SZShlLHQpO2E6ZG8gdHJ5e2lmKHpsIT09MCYmTGwhPT1udWxsKXt0PUxsO3ZhciBvPUJsO2I6c3dpdGNoKHpsKXtjYXNlIDE6emw9MCxCbD1udWxsLEZ1KGUsdCxvLDEpO2JyZWFrO2Nhc2UgMjpjYXNlIDk6aWYodmEobykpe3psPTAsQmw9bnVsbCxQdSh0KTticmVha310PWZ1bmN0aW9uKCl7emwhPT0yJiZ6bCE9PTl8fElsIT09ZXx8KHpsPTcpLGFkKGUpfSxvLnRoZW4odCx0KTticmVhayBhO2Nhc2UgMzp6bD03O2JyZWFrIGE7Y2FzZSA0OnpsPTU7YnJlYWsgYTtjYXNlIDc6dmEobyk/KHpsPTAsQmw9bnVsbCxQdSh0KSk6KHpsPTAsQmw9bnVsbCxGdShlLHQsbyw3KSk7YnJlYWs7Y2FzZSA1OnZhciBzPW51bGw7c3dpdGNoKExsLnRhZyl7Y2FzZSAyNjpzPUxsLm1lbW9pemVkU3RhdGU7Y2FzZSA1OmNhc2UgMjc6dmFyIGM9TGw7aWYocz9xZihzKTpjLnN0YXRlTm9kZS5jb21wbGV0ZSl7emw9MCxCbD1udWxsO3ZhciBsPWMuc2libGluZztpZihsIT09bnVsbClMbD1sO2Vsc2V7dmFyIHU9Yy5yZXR1cm47dT09PW51bGw/TGw9bnVsbDooTGw9dSxJdSh1KSl9YnJlYWsgYn19emw9MCxCbD1udWxsLEZ1KGUsdCxvLDUpO2JyZWFrO2Nhc2UgNjp6bD0wLEJsPW51bGwsRnUoZSx0LG8sNik7YnJlYWs7Y2FzZSA4OlN1KCksR2w9NjticmVhayBhO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NjIpKX19TXUoKTticmVha31jYXRjaCh0KXt3dShlLHQpfXdoaWxlKDEpO3JldHVybiB6aT1SaT1udWxsLEkuSD1yLEkuQT1hLEZsPW4sTGw9PT1udWxsPyhJbD1udWxsLFJsPTAsR3IoKSxHbCk6MH1mdW5jdGlvbiBNdSgpe2Zvcig7TGwhPT1udWxsJiYhaGUoKTspTnUoTGwpfWZ1bmN0aW9uIE51KGUpe3ZhciB0PURjKGUuYWx0ZXJuYXRlLGUsV2wpO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyx0PT09bnVsbD9JdShlKTpMbD10fWZ1bmN0aW9uIFB1KGUpe3ZhciB0PWUsbj10LmFsdGVybmF0ZTtzd2l0Y2godC50YWcpe2Nhc2UgMTU6Y2FzZSAwOnQ9ZGMobix0LHQucGVuZGluZ1Byb3BzLHQudHlwZSx2b2lkIDAsUmwpO2JyZWFrO2Nhc2UgMTE6dD1kYyhuLHQsdC5wZW5kaW5nUHJvcHMsdC50eXBlLnJlbmRlcix0LnJlZixSbCk7YnJlYWs7Y2FzZSA1OkNvKHQpO2RlZmF1bHQ6RmMobix0KSx0PUxsPW5pKHQsV2wpLHQ9RGMobix0LFdsKX1lLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/SXUoZSk6TGw9dH1mdW5jdGlvbiBGdShlLHQsbixyKXt6aT1SaT1udWxsLENvKHQpLHdhPW51bGwsVGE9MDt2YXIgaT10LnJldHVybjt0cnl7aWYoWHMoZSxpLHQsbixSbCkpe0dsPTEsR3MoZSxsaShuLGUuY3VycmVudCkpLExsPW51bGw7cmV0dXJufX1jYXRjaCh0KXtpZihpIT09bnVsbCl0aHJvdyBMbD1pLHQ7R2w9MSxHcyhlLGxpKG4sZS5jdXJyZW50KSksTGw9bnVsbDtyZXR1cm59dC5mbGFncyYzMjc2OD8oRWl8fHI9PT0xP2U9ITA6SGx8fFJsJjUzNjg3MDkxMj9lPSExOihWbD1lPSEwLChyPT09Mnx8cj09PTl8fHI9PT0zfHxyPT09NikmJihyPUphLmN1cnJlbnQsciE9PW51bGwmJnIudGFnPT09MTMmJihyLmZsYWdzfD0xNjM4NCkpKSxMdSh0LGUpKTpJdSh0KX1mdW5jdGlvbiBJdShlKXt2YXIgdD1lO2Rve2lmKHQuZmxhZ3MmMzI3Njgpe0x1KHQsVmwpO3JldHVybn1lPXQucmV0dXJuO3ZhciBuPU5jKHQuYWx0ZXJuYXRlLHQsV2wpO2lmKG4hPT1udWxsKXtMbD1uO3JldHVybn1pZih0PXQuc2libGluZyx0IT09bnVsbCl7TGw9dDtyZXR1cm59TGw9dD1lfXdoaWxlKHQhPT1udWxsKTtHbD09PTAmJihHbD01KX1mdW5jdGlvbiBMdShlLHQpe2Rve3ZhciBuPVBjKGUuYWx0ZXJuYXRlLGUpO2lmKG4hPT1udWxsKXtuLmZsYWdzJj0zMjc2NyxMbD1uO3JldHVybn1pZihuPWUucmV0dXJuLG4hPT1udWxsJiYobi5mbGFnc3w9MzI3Njgsbi5zdWJ0cmVlRmxhZ3M9MCxuLmRlbGV0aW9ucz1udWxsKSwhdCYmKGU9ZS5zaWJsaW5nLGUhPT1udWxsKSl7TGw9ZTtyZXR1cm59TGw9ZT1ufXdoaWxlKGUhPT1udWxsKTtHbD02LExsPW51bGx9ZnVuY3Rpb24gUnUoZSx0LG4scixhLG8scyxjLGwpe2UuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsO2RvIFV1KCk7d2hpbGUoYXUhPT0wKTtpZihGbCY2KXRocm93IEVycm9yKGkoMzI3KSk7aWYodCE9PW51bGwpe2lmKHQ9PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IoaSgxNzcpKTtpZihvPXQubGFuZXN8dC5jaGlsZExhbmVzLG98PVdyLFVlKGUsbixvLHMsYyxsKSxlPT09SWwmJihMbD1JbD1udWxsLFJsPTApLHN1PXQsb3U9ZSxjdT1uLGx1PW8sdXU9YSxkdT1yLHQuc3VidHJlZUZsYWdzJjEwMjU2fHx0LmZsYWdzJjEwMjU2PyhlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLFF1KHhlLGZ1bmN0aW9uKCl7cmV0dXJuIFd1KCksbnVsbH0pKTooZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MCkscj0odC5mbGFncyYxMzg3OCkhPTAsdC5zdWJ0cmVlRmxhZ3MmMTM4Nzh8fHIpe3I9SS5ULEkuVD1udWxsLGE9TC5wLEwucD0yLHM9RmwsRmx8PTQ7dHJ5e2VsKGUsdCxuKX1maW5hbGx5e0ZsPXMsTC5wPWEsSS5UPXJ9fWF1PTEsenUoKSxCdSgpLFZ1KCl9fWZ1bmN0aW9uIHp1KCl7aWYoYXU9PT0xKXthdT0wO3ZhciBlPW91LHQ9c3Usbj0odC5mbGFncyYxMzg3OCkhPTA7aWYodC5zdWJ0cmVlRmxhZ3MmMTM4Nzh8fG4pe249SS5ULEkuVD1udWxsO3ZhciByPUwucDtMLnA9Mjt2YXIgaT1GbDtGbHw9NDt0cnl7cGwodCxlKTt2YXIgYT1VZCxvPXZyKGUuY29udGFpbmVySW5mbykscz1hLmZvY3VzZWRFbGVtLGM9YS5zZWxlY3Rpb25SYW5nZTtpZihvIT09cyYmcyYmcy5vd25lckRvY3VtZW50JiZfcihzLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHMpKXtpZihjIT09bnVsbCYmeXIocykpe3ZhciBsPWMuc3RhcnQsdT1jLmVuZDtpZih1PT09dm9pZCAwJiYodT1sKSxgc2VsZWN0aW9uU3RhcnRgaW4gcylzLnNlbGVjdGlvblN0YXJ0PWwscy5zZWxlY3Rpb25FbmQ9TWF0aC5taW4odSxzLnZhbHVlLmxlbmd0aCk7ZWxzZXt2YXIgZD1zLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50LGY9ZCYmZC5kZWZhdWx0Vmlld3x8d2luZG93O2lmKGYuZ2V0U2VsZWN0aW9uKXt2YXIgcD1mLmdldFNlbGVjdGlvbigpLG09cy50ZXh0Q29udGVudC5sZW5ndGgsaD1NYXRoLm1pbihjLnN0YXJ0LG0pLGc9Yy5lbmQ9PT12b2lkIDA/aDpNYXRoLm1pbihjLmVuZCxtKTshcC5leHRlbmQmJmg+ZyYmKG89ZyxnPWgsaD1vKTt2YXIgXz1ncihzLGgpLHY9Z3IocyxnKTtpZihfJiZ2JiYocC5yYW5nZUNvdW50IT09MXx8cC5hbmNob3JOb2RlIT09Xy5ub2RlfHxwLmFuY2hvck9mZnNldCE9PV8ub2Zmc2V0fHxwLmZvY3VzTm9kZSE9PXYubm9kZXx8cC5mb2N1c09mZnNldCE9PXYub2Zmc2V0KSl7dmFyIHk9ZC5jcmVhdGVSYW5nZSgpO3kuc2V0U3RhcnQoXy5ub2RlLF8ub2Zmc2V0KSxwLnJlbW92ZUFsbFJhbmdlcygpLGg+Zz8ocC5hZGRSYW5nZSh5KSxwLmV4dGVuZCh2Lm5vZGUsdi5vZmZzZXQpKTooeS5zZXRFbmQodi5ub2RlLHYub2Zmc2V0KSxwLmFkZFJhbmdlKHkpKX19fX1mb3IoZD1bXSxwPXM7cD1wLnBhcmVudE5vZGU7KXAubm9kZVR5cGU9PT0xJiZkLnB1c2goe2VsZW1lbnQ6cCxsZWZ0OnAuc2Nyb2xsTGVmdCx0b3A6cC5zY3JvbGxUb3B9KTtmb3IodHlwZW9mIHMuZm9jdXM9PWBmdW5jdGlvbmAmJnMuZm9jdXMoKSxzPTA7czxkLmxlbmd0aDtzKyspe3ZhciBiPWRbc107Yi5lbGVtZW50LnNjcm9sbExlZnQ9Yi5sZWZ0LGIuZWxlbWVudC5zY3JvbGxUb3A9Yi50b3B9fXVwPSEhSGQsVWQ9SGQ9bnVsbH1maW5hbGx5e0ZsPWksTC5wPXIsSS5UPW59fWUuY3VycmVudD10LGF1PTJ9fWZ1bmN0aW9uIEJ1KCl7aWYoYXU9PT0yKXthdT0wO3ZhciBlPW91LHQ9c3Usbj0odC5mbGFncyY4NzcyKSE9MDtpZih0LnN1YnRyZWVGbGFncyY4NzcyfHxuKXtuPUkuVCxJLlQ9bnVsbDt2YXIgcj1MLnA7TC5wPTI7dmFyIGk9Rmw7Rmx8PTQ7dHJ5e3RsKGUsdC5hbHRlcm5hdGUsdCl9ZmluYWxseXtGbD1pLEwucD1yLEkuVD1ufX1hdT0zfX1mdW5jdGlvbiBWdSgpe2lmKGF1PT09NHx8YXU9PT0zKXthdT0wLGdlKCk7dmFyIGU9b3UsdD1zdSxuPWN1LHI9ZHU7dC5zdWJ0cmVlRmxhZ3MmMTAyNTZ8fHQuZmxhZ3MmMTAyNTY/YXU9NTooYXU9MCxzdT1vdT1udWxsLEh1KGUsZS5wZW5kaW5nTGFuZXMpKTt2YXIgaT1lLnBlbmRpbmdMYW5lcztpZihpPT09MCYmKGl1PW51bGwpLEplKG4pLHQ9dC5zdGF0ZU5vZGUsRGUmJnR5cGVvZiBEZS5vbkNvbW1pdEZpYmVyUm9vdD09YGZ1bmN0aW9uYCl0cnl7RGUub25Db21taXRGaWJlclJvb3QoRWUsdCx2b2lkIDAsKHQuY3VycmVudC5mbGFncyYxMjgpPT0xMjgpfWNhdGNoe31pZihyIT09bnVsbCl7dD1JLlQsaT1MLnAsTC5wPTIsSS5UPW51bGw7dHJ5e2Zvcih2YXIgYT1lLm9uUmVjb3ZlcmFibGVFcnJvcixvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb107YShzLnZhbHVlLHtjb21wb25lbnRTdGFjazpzLnN0YWNrfSl9fWZpbmFsbHl7SS5UPXQsTC5wPWl9fWN1JjMmJlV1KCksYWQoZSksaT1lLnBlbmRpbmdMYW5lcyxuJjI2MTkzMCYmaSY0Mj9lPT09cHU/ZnUrKzooZnU9MCxwdT1lKTpmdT0wLG9kKDAsITEpfX1mdW5jdGlvbiBIdShlLHQpeyhlLnBvb2xlZENhY2hlTGFuZXMmPXQpPT09MCYmKHQ9ZS5wb29sZWRDYWNoZSx0IT1udWxsJiYoZS5wb29sZWRDYWNoZT1udWxsLHRhKHQpKSl9ZnVuY3Rpb24gVXUoKXtyZXR1cm4genUoKSxCdSgpLFZ1KCksV3UoKX1mdW5jdGlvbiBXdSgpe2lmKGF1IT09NSlyZXR1cm4hMTt2YXIgZT1vdSx0PWx1O2x1PTA7dmFyIG49SmUoY3UpLHI9SS5ULGE9TC5wO3RyeXtMLnA9MzI+bj8zMjpuLEkuVD1udWxsLG49dXUsdXU9bnVsbDt2YXIgbz1vdSxzPWN1O2lmKGF1PTAsc3U9b3U9bnVsbCxjdT0wLEZsJjYpdGhyb3cgRXJyb3IoaSgzMzEpKTt2YXIgYz1GbDtpZihGbHw9NCxBbChvLmN1cnJlbnQpLFNsKG8sby5jdXJyZW50LHMsbiksRmw9YyxvZCgwLCExKSxEZSYmdHlwZW9mIERlLm9uUG9zdENvbW1pdEZpYmVyUm9vdD09YGZ1bmN0aW9uYCl0cnl7RGUub25Qb3N0Q29tbWl0RmliZXJSb290KEVlLG8pfWNhdGNoe31yZXR1cm4hMH1maW5hbGx5e0wucD1hLEkuVD1yLEh1KGUsdCl9fWZ1bmN0aW9uIEd1KGUsdCxuKXt0PWxpKG4sdCksdD1xcyhlLnN0YXRlTm9kZSx0LDIpLGU9RmEoZSx0LDIpLGUhPT1udWxsJiYoSGUoZSwyKSxhZChlKSl9ZnVuY3Rpb24gS3UoZSx0LG4pe2lmKGUudGFnPT09MylHdShlLGUsbik7ZWxzZSBmb3IoO3QhPT1udWxsOyl7aWYodC50YWc9PT0zKXtHdSh0LGUsbik7YnJlYWt9ZWxzZSBpZih0LnRhZz09PTEpe3ZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiB0LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT1gZnVuY3Rpb25gfHx0eXBlb2Ygci5jb21wb25lbnREaWRDYXRjaD09YGZ1bmN0aW9uYCYmKGl1PT09bnVsbHx8IWl1LmhhcyhyKSkpe2U9bGkobixlKSxuPUpzKDIpLHI9RmEodCxuLDIpLHIhPT1udWxsJiYoWXMobixyLHQsZSksSGUociwyKSxhZChyKSk7YnJlYWt9fXQ9dC5yZXR1cm59fWZ1bmN0aW9uIHF1KGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtpZihyPT09bnVsbCl7cj1lLnBpbmdDYWNoZT1uZXcgUGw7dmFyIGk9bmV3IFNldDtyLnNldCh0LGkpfWVsc2UgaT1yLmdldCh0KSxpPT09dm9pZCAwJiYoaT1uZXcgU2V0LHIuc2V0KHQsaSkpO2kuaGFzKG4pfHwoVWw9ITAsaS5hZGQobiksZT1KdS5iaW5kKG51bGwsZSx0LG4pLHQudGhlbihlLGUpKX1mdW5jdGlvbiBKdShlLHQsbil7dmFyIHI9ZS5waW5nQ2FjaGU7ciE9PW51bGwmJnIuZGVsZXRlKHQpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbixlLndhcm1MYW5lcyY9fm4sSWw9PT1lJiYoUmwmbik9PT1uJiYoR2w9PT00fHxHbD09PTMmJihSbCY2MjkxNDU2MCk9PT1SbCYmMzAwPl9lKCktZXU/IShGbCYyKSYmQ3UoZSwwKTpKbHw9bixYbD09PVJsJiYoWGw9MCkpLGFkKGUpfWZ1bmN0aW9uIFl1KGUsdCl7dD09PTAmJih0PUJlKCkpLGU9SnIoZSx0KSxlIT09bnVsbCYmKEhlKGUsdCksYWQoZSkpfWZ1bmN0aW9uIFh1KGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZSxuPTA7dCE9PW51bGwmJihuPXQucmV0cnlMYW5lKSxZdShlLG4pfWZ1bmN0aW9uIFp1KGUsdCl7dmFyIG49MDtzd2l0Y2goZS50YWcpe2Nhc2UgMzE6Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxhPWUubWVtb2l6ZWRTdGF0ZTthIT09bnVsbCYmKG49YS5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztjYXNlIDIyOnI9ZS5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDMxNCkpfXIhPT1udWxsJiZyLmRlbGV0ZSh0KSxZdShlLG4pfWZ1bmN0aW9uIFF1KGUsdCl7cmV0dXJuIHBlKGUsdCl9dmFyICR1PW51bGwsZWQ9bnVsbCx0ZD0hMSxuZD0hMSxyZD0hMSxpZD0wO2Z1bmN0aW9uIGFkKGUpe2UhPT1lZCYmZS5uZXh0PT09bnVsbCYmKGVkPT09bnVsbD8kdT1lZD1lOmVkPWVkLm5leHQ9ZSksbmQ9ITAsdGR8fCh0ZD0hMCxmZCgpKX1mdW5jdGlvbiBvZChlLHQpe2lmKCFyZCYmbmQpe3JkPSEwO2RvIGZvcih2YXIgbj0hMSxyPSR1O3IhPT1udWxsOyl7aWYoIXQpaWYoZSE9PTApe3ZhciBpPXIucGVuZGluZ0xhbmVzO2lmKGk9PT0wKXZhciBhPTA7ZWxzZXt2YXIgbz1yLnN1c3BlbmRlZExhbmVzLHM9ci5waW5nZWRMYW5lczthPSgxPDwzMS1rZSg0MnxlKSsxKS0xLGEmPWkmfihvJn5zKSxhPWEmMjAxMzI2NzQxP2EmMjAxMzI2NzQxfDE6YT9hfDI6MH1hIT09MCYmKG49ITAsZGQocixhKSl9ZWxzZSBhPVJsLGE9TGUocixyPT09SWw/YTowLHIuY2FuY2VsUGVuZGluZ0NvbW1pdCE9PW51bGx8fHIudGltZW91dEhhbmRsZSE9PS0xKSwhKGEmMyl8fFJlKHIsYSl8fChuPSEwLGRkKHIsYSkpO3I9ci5uZXh0fXdoaWxlKG4pO3JkPSExfX1mdW5jdGlvbiBzZCgpe2NkKCl9ZnVuY3Rpb24gY2QoKXtuZD10ZD0hMTt2YXIgZT0wO2lkIT09MCYmWWQoKSYmKGU9aWQpO2Zvcih2YXIgdD1fZSgpLG49bnVsbCxyPSR1O3IhPT1udWxsOyl7dmFyIGk9ci5uZXh0LGE9bGQocix0KTthPT09MD8oci5uZXh0PW51bGwsbj09PW51bGw/JHU9aTpuLm5leHQ9aSxpPT09bnVsbCYmKGVkPW4pKToobj1yLChlIT09MHx8YSYzKSYmKG5kPSEwKSkscj1pfWF1IT09MCYmYXUhPT01fHxvZChlLCExKSxpZCE9PTAmJihpZD0wKX1mdW5jdGlvbiBsZChlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxpPWUuZXhwaXJhdGlvblRpbWVzLGE9ZS5wZW5kaW5nTGFuZXMmLTYyOTE0NTYxOzA8YTspe3ZhciBvPTMxLWtlKGEpLHM9MTw8byxjPWlbb107Yz09PS0xPygocyZuKT09PTB8fChzJnIpIT09MCkmJihpW29dPXplKHMsdCkpOmM8PXQmJihlLmV4cGlyZWRMYW5lc3w9cyksYSY9fnN9aWYodD1JbCxuPVJsLG49TGUoZSxlPT09dD9uOjAsZS5jYW5jZWxQZW5kaW5nQ29tbWl0IT09bnVsbHx8ZS50aW1lb3V0SGFuZGxlIT09LTEpLHI9ZS5jYWxsYmFja05vZGUsbj09PTB8fGU9PT10JiYoemw9PT0yfHx6bD09PTkpfHxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsKXJldHVybiByIT09bnVsbCYmciE9PW51bGwmJm1lKHIpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoIShuJjMpfHxSZShlLG4pKXtpZih0PW4mLW4sdD09PWUuY2FsbGJhY2tQcmlvcml0eSlyZXR1cm4gdDtzd2l0Y2gociE9PW51bGwmJm1lKHIpLEplKG4pKXtjYXNlIDI6Y2FzZSA4Om49YmU7YnJlYWs7Y2FzZSAzMjpuPXhlO2JyZWFrO2Nhc2UgMjY4NDM1NDU2Om49Q2U7YnJlYWs7ZGVmYXVsdDpuPXhlfXJldHVybiByPXVkLmJpbmQobnVsbCxlKSxuPXBlKG4sciksZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bix0fXJldHVybiByIT09bnVsbCYmciE9PW51bGwmJm1lKHIpLGUuY2FsbGJhY2tQcmlvcml0eT0yLGUuY2FsbGJhY2tOb2RlPW51bGwsMn1mdW5jdGlvbiB1ZChlLHQpe2lmKGF1IT09MCYmYXUhPT01KXJldHVybiBlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLG51bGw7dmFyIG49ZS5jYWxsYmFja05vZGU7aWYoVXUoKSYmZS5jYWxsYmFja05vZGUhPT1uKXJldHVybiBudWxsO3ZhciByPVJsO3JldHVybiByPUxlKGUsZT09PUlsP3I6MCxlLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsfHxlLnRpbWVvdXRIYW5kbGUhPT0tMSkscj09PTA/bnVsbDooX3UoZSxyLHQpLGxkKGUsX2UoKSksZS5jYWxsYmFja05vZGUhPW51bGwmJmUuY2FsbGJhY2tOb2RlPT09bj91ZC5iaW5kKG51bGwsZSk6bnVsbCl9ZnVuY3Rpb24gZGQoZSx0KXtpZihVdSgpKXJldHVybiBudWxsO191KGUsdCwhMCl9ZnVuY3Rpb24gZmQoKXskZChmdW5jdGlvbigpe0ZsJjY/cGUoeWUsc2QpOmNkKCl9KX1mdW5jdGlvbiBwZCgpe2lmKGlkPT09MCl7dmFyIGU9aWE7ZT09PTAmJihlPU5lLE5lPDw9MSwhKE5lJjI2MTg4OCkmJihOZT0yNTYpKSxpZD1lfXJldHVybiBpZH1mdW5jdGlvbiBtZChlKXtyZXR1cm4gZT09bnVsbHx8dHlwZW9mIGU9PWBzeW1ib2xgfHx0eXBlb2YgZT09YGJvb2xlYW5gP251bGw6dHlwZW9mIGU9PWBmdW5jdGlvbmA/ZTpXdChgYCtlKX1mdW5jdGlvbiBoZChlLHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGBpbnB1dGApO3JldHVybiBuLm5hbWU9dC5uYW1lLG4udmFsdWU9dC52YWx1ZSxlLmlkJiZuLnNldEF0dHJpYnV0ZShgZm9ybWAsZS5pZCksdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLHQpLGU9bmV3IEZvcm1EYXRhKGUpLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSxlfWZ1bmN0aW9uIGdkKGUsdCxuLHIsaSl7aWYodD09PWBzdWJtaXRgJiZuJiZuLnN0YXRlTm9kZT09PWkpe3ZhciBhPW1kKChpWyRlXXx8bnVsbCkuYWN0aW9uKSxvPXIuc3VibWl0dGVyO28mJih0PSh0PW9bJGVdfHxudWxsKT9tZCh0LmZvcm1BY3Rpb24pOm8uZ2V0QXR0cmlidXRlKGBmb3JtQWN0aW9uYCksdCE9PW51bGwmJihhPXQsbz1udWxsKSk7dmFyIHM9bmV3IHBuKGBhY3Rpb25gLGBhY3Rpb25gLG51bGwscixpKTtlLnB1c2goe2V2ZW50OnMsbGlzdGVuZXJzOlt7aW5zdGFuY2U6bnVsbCxsaXN0ZW5lcjpmdW5jdGlvbigpe2lmKHIuZGVmYXVsdFByZXZlbnRlZCl7aWYoaWQhPT0wKXt2YXIgZT1vP2hkKGksbyk6bmV3IEZvcm1EYXRhKGkpO3lzKG4se3BlbmRpbmc6ITAsZGF0YTplLG1ldGhvZDppLm1ldGhvZCxhY3Rpb246YX0sbnVsbCxlKX19ZWxzZSB0eXBlb2YgYT09YGZ1bmN0aW9uYCYmKHMucHJldmVudERlZmF1bHQoKSxlPW8/aGQoaSxvKTpuZXcgRm9ybURhdGEoaSkseXMobix7cGVuZGluZzohMCxkYXRhOmUsbWV0aG9kOmkubWV0aG9kLGFjdGlvbjphfSxhLGUpKX0sY3VycmVudFRhcmdldDppfV19KX19Zm9yKHZhciBfZD0wO19kPHpyLmxlbmd0aDtfZCsrKXt2YXIgdmQ9enJbX2RdO0JyKHZkLnRvTG93ZXJDYXNlKCksYG9uYCsodmRbMF0udG9VcHBlckNhc2UoKSt2ZC5zbGljZSgxKSkpfUJyKGpyLGBvbkFuaW1hdGlvbkVuZGApLEJyKE1yLGBvbkFuaW1hdGlvbkl0ZXJhdGlvbmApLEJyKE5yLGBvbkFuaW1hdGlvblN0YXJ0YCksQnIoYGRibGNsaWNrYCxgb25Eb3VibGVDbGlja2ApLEJyKGBmb2N1c2luYCxgb25Gb2N1c2ApLEJyKGBmb2N1c291dGAsYG9uQmx1cmApLEJyKFByLGBvblRyYW5zaXRpb25SdW5gKSxCcihGcixgb25UcmFuc2l0aW9uU3RhcnRgKSxCcihJcixgb25UcmFuc2l0aW9uQ2FuY2VsYCksQnIoTHIsYG9uVHJhbnNpdGlvbkVuZGApLGh0KGBvbk1vdXNlRW50ZXJgLFtgbW91c2VvdXRgLGBtb3VzZW92ZXJgXSksaHQoYG9uTW91c2VMZWF2ZWAsW2Btb3VzZW91dGAsYG1vdXNlb3ZlcmBdKSxodChgb25Qb2ludGVyRW50ZXJgLFtgcG9pbnRlcm91dGAsYHBvaW50ZXJvdmVyYF0pLGh0KGBvblBvaW50ZXJMZWF2ZWAsW2Bwb2ludGVyb3V0YCxgcG9pbnRlcm92ZXJgXSksbXQoYG9uQ2hhbmdlYCxgY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VgLnNwbGl0KGAgYCkpLG10KGBvblNlbGVjdGAsYGZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZWAuc3BsaXQoYCBgKSksbXQoYG9uQmVmb3JlSW5wdXRgLFtgY29tcG9zaXRpb25lbmRgLGBrZXlwcmVzc2AsYHRleHRJbnB1dGAsYHBhc3RlYF0pLG10KGBvbkNvbXBvc2l0aW9uRW5kYCxgY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25gLnNwbGl0KGAgYCkpLG10KGBvbkNvbXBvc2l0aW9uU3RhcnRgLGBjb21wb3NpdGlvbnN0YXJ0IGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duYC5zcGxpdChgIGApKSxtdChgb25Db21wb3NpdGlvblVwZGF0ZWAsYGNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duYC5zcGxpdChgIGApKTt2YXIgeWQ9YGFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2UgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nYC5zcGxpdChgIGApLGJkPW5ldyBTZXQoYGJlZm9yZXRvZ2dsZSBjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlYC5zcGxpdChgIGApLmNvbmNhdCh5ZCkpO2Z1bmN0aW9uIHhkKGUsdCl7dD0odCY0KSE9MDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXSxpPXIuZXZlbnQ7cj1yLmxpc3RlbmVyczthOnt2YXIgYT12b2lkIDA7aWYodClmb3IodmFyIG89ci5sZW5ndGgtMTswPD1vO28tLSl7dmFyIHM9cltvXSxjPXMuaW5zdGFuY2UsbD1zLmN1cnJlbnRUYXJnZXQ7aWYocz1zLmxpc3RlbmVyLGMhPT1hJiZpLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgYTthPXMsaS5jdXJyZW50VGFyZ2V0PWw7dHJ5e2EoaSl9Y2F0Y2goZSl7VnIoZSl9aS5jdXJyZW50VGFyZ2V0PW51bGwsYT1jfWVsc2UgZm9yKG89MDtvPHIubGVuZ3RoO28rKyl7aWYocz1yW29dLGM9cy5pbnN0YW5jZSxsPXMuY3VycmVudFRhcmdldCxzPXMubGlzdGVuZXIsYyE9PWEmJmkuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBhO2E9cyxpLmN1cnJlbnRUYXJnZXQ9bDt0cnl7YShpKX1jYXRjaChlKXtWcihlKX1pLmN1cnJlbnRUYXJnZXQ9bnVsbCxhPWN9fX19ZnVuY3Rpb24gU2QoZSx0KXt2YXIgbj10W3R0XTtuPT09dm9pZCAwJiYobj10W3R0XT1uZXcgU2V0KTt2YXIgcj1lK2BfX2J1YmJsZWA7bi5oYXMocil8fChFZCh0LGUsMiwhMSksbi5hZGQocikpfWZ1bmN0aW9uIENkKGUsdCxuKXt2YXIgcj0wO3QmJihyfD00KSxFZChuLGUscix0KX12YXIgd2Q9YF9yZWFjdExpc3RlbmluZ2ArTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gVGQoZSl7aWYoIWVbd2RdKXtlW3dkXT0hMCxmdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QhPT1gc2VsZWN0aW9uY2hhbmdlYCYmKGJkLmhhcyh0KXx8Q2QodCwhMSxlKSxDZCh0LCEwLGUpKX0pO3ZhciB0PWUubm9kZVR5cGU9PT05P2U6ZS5vd25lckRvY3VtZW50O3Q9PT1udWxsfHx0W3dkXXx8KHRbd2RdPSEwLENkKGBzZWxlY3Rpb25jaGFuZ2VgLCExLHQpKX19ZnVuY3Rpb24gRWQoZSx0LG4scil7c3dpdGNoKF9wKHQpKXtjYXNlIDI6dmFyIGk9ZHA7YnJlYWs7Y2FzZSA4Omk9ZnA7YnJlYWs7ZGVmYXVsdDppPXBwfW49aS5iaW5kKG51bGwsdCxuLGUpLGk9dm9pZCAwLCF0bnx8dCE9PWB0b3VjaHN0YXJ0YCYmdCE9PWB0b3VjaG1vdmVgJiZ0IT09YHdoZWVsYHx8KGk9ITApLHI/aT09PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtjYXB0dXJlOiEwLHBhc3NpdmU6aX0pOmk9PT12b2lkIDA/ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7cGFzc2l2ZTppfSl9ZnVuY3Rpb24gRGQoZSx0LG4scixpKXt2YXIgYT1yO2lmKCEodCYxKSYmISh0JjIpJiZyIT09bnVsbClhOmZvcig7Oyl7aWYocj09PW51bGwpcmV0dXJuO3ZhciBzPXIudGFnO2lmKHM9PT0zfHxzPT09NCl7dmFyIGM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihjPT09aSlicmVhaztpZihzPT09NClmb3Iocz1yLnJldHVybjtzIT09bnVsbDspe3ZhciBsPXMudGFnO2lmKChsPT09M3x8bD09PTQpJiZzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09aSlyZXR1cm47cz1zLnJldHVybn1mb3IoO2MhPT1udWxsOyl7aWYocz1zdChjKSxzPT09bnVsbClyZXR1cm47aWYobD1zLnRhZyxsPT09NXx8bD09PTZ8fGw9PT0yNnx8bD09PTI3KXtyPWE9cztjb250aW51ZSBhfWM9Yy5wYXJlbnROb2RlfX1yPXIucmV0dXJufVF0KGZ1bmN0aW9uKCl7dmFyIHI9YSxpPXF0KG4pLHM9W107YTp7dmFyIGM9UnIuZ2V0KGUpO2lmKGMhPT12b2lkIDApe3ZhciBsPXBuLHU9ZTtzd2l0Y2goZSl7Y2FzZWBrZXlwcmVzc2A6aWYoY24obik9PT0wKWJyZWFrIGE7Y2FzZWBrZXlkb3duYDpjYXNlYGtleXVwYDpsPWpuO2JyZWFrO2Nhc2VgZm9jdXNpbmA6dT1gZm9jdXNgLGw9U247YnJlYWs7Y2FzZWBmb2N1c291dGA6dT1gYmx1cmAsbD1TbjticmVhaztjYXNlYGJlZm9yZWJsdXJgOmNhc2VgYWZ0ZXJibHVyYDpsPVNuO2JyZWFrO2Nhc2VgY2xpY2tgOmlmKG4uYnV0dG9uPT09MilicmVhayBhO2Nhc2VgYXV4Y2xpY2tgOmNhc2VgZGJsY2xpY2tgOmNhc2VgbW91c2Vkb3duYDpjYXNlYG1vdXNlbW92ZWA6Y2FzZWBtb3VzZXVwYDpjYXNlYG1vdXNlb3V0YDpjYXNlYG1vdXNlb3ZlcmA6Y2FzZWBjb250ZXh0bWVudWA6bD1ibjticmVhaztjYXNlYGRyYWdgOmNhc2VgZHJhZ2VuZGA6Y2FzZWBkcmFnZW50ZXJgOmNhc2VgZHJhZ2V4aXRgOmNhc2VgZHJhZ2xlYXZlYDpjYXNlYGRyYWdvdmVyYDpjYXNlYGRyYWdzdGFydGA6Y2FzZWBkcm9wYDpsPXhuO2JyZWFrO2Nhc2VgdG91Y2hjYW5jZWxgOmNhc2VgdG91Y2hlbmRgOmNhc2VgdG91Y2htb3ZlYDpjYXNlYHRvdWNoc3RhcnRgOmw9Tm47YnJlYWs7Y2FzZSBqcjpjYXNlIE1yOmNhc2UgTnI6bD1DbjticmVhaztjYXNlIExyOmw9UG47YnJlYWs7Y2FzZWBzY3JvbGxgOmNhc2Vgc2Nyb2xsZW5kYDpsPWhuO2JyZWFrO2Nhc2Vgd2hlZWxgOmw9Rm47YnJlYWs7Y2FzZWBjb3B5YDpjYXNlYGN1dGA6Y2FzZWBwYXN0ZWA6bD13bjticmVhaztjYXNlYGdvdHBvaW50ZXJjYXB0dXJlYDpjYXNlYGxvc3Rwb2ludGVyY2FwdHVyZWA6Y2FzZWBwb2ludGVyY2FuY2VsYDpjYXNlYHBvaW50ZXJkb3duYDpjYXNlYHBvaW50ZXJtb3ZlYDpjYXNlYHBvaW50ZXJvdXRgOmNhc2VgcG9pbnRlcm92ZXJgOmNhc2VgcG9pbnRlcnVwYDpsPU1uO2JyZWFrO2Nhc2VgdG9nZ2xlYDpjYXNlYGJlZm9yZXRvZ2dsZWA6bD1Jbn12YXIgZD0odCY0KSE9MCxmPSFkJiYoZT09PWBzY3JvbGxgfHxlPT09YHNjcm9sbGVuZGApLHA9ZD9jPT09bnVsbD9udWxsOmMrYENhcHR1cmVgOmM7ZD1bXTtmb3IodmFyIG09cixoO20hPT1udWxsOyl7dmFyIGc9bTtpZihoPWcuc3RhdGVOb2RlLGc9Zy50YWcsZyE9PTUmJmchPT0yNiYmZyE9PTI3fHxoPT09bnVsbHx8cD09PW51bGx8fChnPSR0KG0scCksZyE9bnVsbCYmZC5wdXNoKE9kKG0sZyxoKSkpLGYpYnJlYWs7bT1tLnJldHVybn0wPGQubGVuZ3RoJiYoYz1uZXcgbChjLHUsbnVsbCxuLGkpLHMucHVzaCh7ZXZlbnQ6YyxsaXN0ZW5lcnM6ZH0pKX19aWYoISh0JjcpKXthOntpZihjPWU9PT1gbW91c2VvdmVyYHx8ZT09PWBwb2ludGVyb3ZlcmAsbD1lPT09YG1vdXNlb3V0YHx8ZT09PWBwb2ludGVyb3V0YCxjJiZuIT09S3QmJih1PW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihzdCh1KXx8dVtldF0pKWJyZWFrIGE7aWYoKGx8fGMpJiYoYz1pLndpbmRvdz09PWk/aTooYz1pLm93bmVyRG9jdW1lbnQpP2MuZGVmYXVsdFZpZXd8fGMucGFyZW50V2luZG93OndpbmRvdyxsPyh1PW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQsbD1yLHU9dT9zdCh1KTpudWxsLHUhPT1udWxsJiYoZj1vKHUpLGQ9dS50YWcsdSE9PWZ8fGQhPT01JiZkIT09MjcmJmQhPT02KSYmKHU9bnVsbCkpOihsPW51bGwsdT1yKSxsIT09dSkpe2lmKGQ9Ym4sZz1gb25Nb3VzZUxlYXZlYCxwPWBvbk1vdXNlRW50ZXJgLG09YG1vdXNlYCwoZT09PWBwb2ludGVyb3V0YHx8ZT09PWBwb2ludGVyb3ZlcmApJiYoZD1NbixnPWBvblBvaW50ZXJMZWF2ZWAscD1gb25Qb2ludGVyRW50ZXJgLG09YHBvaW50ZXJgKSxmPWw9PW51bGw/YzpsdChsKSxoPXU9PW51bGw/YzpsdCh1KSxjPW5ldyBkKGcsbStgbGVhdmVgLGwsbixpKSxjLnRhcmdldD1mLGMucmVsYXRlZFRhcmdldD1oLGc9bnVsbCxzdChpKT09PXImJihkPW5ldyBkKHAsbStgZW50ZXJgLHUsbixpKSxkLnRhcmdldD1oLGQucmVsYXRlZFRhcmdldD1mLGc9ZCksZj1nLGwmJnUpYjp7Zm9yKGQ9QWQscD1sLG09dSxoPTAsZz1wO2c7Zz1kKGcpKWgrKztnPTA7Zm9yKHZhciBfPW07XztfPWQoXykpZysrO2Zvcig7MDxoLWc7KXA9ZChwKSxoLS07Zm9yKDswPGctaDspbT1kKG0pLGctLTtmb3IoO2gtLTspe2lmKHA9PT1tfHxtIT09bnVsbCYmcD09PW0uYWx0ZXJuYXRlKXtkPXA7YnJlYWsgYn1wPWQocCksbT1kKG0pfWQ9bnVsbH1lbHNlIGQ9bnVsbDtsIT09bnVsbCYmamQocyxjLGwsZCwhMSksdSE9PW51bGwmJmYhPT1udWxsJiZqZChzLGYsdSxkLCEwKX19YTp7aWYoYz1yP2x0KHIpOndpbmRvdyxsPWMubm9kZU5hbWUmJmMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxsPT09YHNlbGVjdGB8fGw9PT1gaW5wdXRgJiZjLnR5cGU9PT1gZmlsZWApdmFyIHY9cTtlbHNlIGlmKFhuKGMpKWlmKG5yKXY9ZHI7ZWxzZXt2PWxyO3ZhciB5PWNyfWVsc2UgbD1jLm5vZGVOYW1lLCFsfHxsLnRvTG93ZXJDYXNlKCkhPT1gaW5wdXRgfHxjLnR5cGUhPT1gY2hlY2tib3hgJiZjLnR5cGUhPT1gcmFkaW9gP3ImJlZ0KHIuZWxlbWVudFR5cGUpJiYodj1xKTp2PXVyO2lmKHYmJj12KGUscikpe1puKHMsdixuLGkpO2JyZWFrIGF9eSYmeShlLGMsciksZT09PWBmb2N1c291dGAmJnImJmMudHlwZT09PWBudW1iZXJgJiZyLm1lbW9pemVkUHJvcHMudmFsdWUhPW51bGwmJk50KGMsYG51bWJlcmAsYy52YWx1ZSl9c3dpdGNoKHk9cj9sdChyKTp3aW5kb3csZSl7Y2FzZWBmb2N1c2luYDooWG4oeSl8fHkuY29udGVudEVkaXRhYmxlPT09YHRydWVgKSYmKHhyPXksU3I9cixDcj1udWxsKTticmVhaztjYXNlYGZvY3Vzb3V0YDpDcj1Tcj14cj1udWxsO2JyZWFrO2Nhc2VgbW91c2Vkb3duYDp3cj0hMDticmVhaztjYXNlYGNvbnRleHRtZW51YDpjYXNlYG1vdXNldXBgOmNhc2VgZHJhZ2VuZGA6d3I9ITEsVHIocyxuLGkpO2JyZWFrO2Nhc2Vgc2VsZWN0aW9uY2hhbmdlYDppZihicilicmVhaztjYXNlYGtleWRvd25gOmNhc2Vga2V5dXBgOlRyKHMsbixpKX12YXIgYjtpZihSbiliOntzd2l0Y2goZSl7Y2FzZWBjb21wb3NpdGlvbnN0YXJ0YDp2YXIgeD1gb25Db21wb3NpdGlvblN0YXJ0YDticmVhayBiO2Nhc2VgY29tcG9zaXRpb25lbmRgOng9YG9uQ29tcG9zaXRpb25FbmRgO2JyZWFrIGI7Y2FzZWBjb21wb3NpdGlvbnVwZGF0ZWA6eD1gb25Db21wb3NpdGlvblVwZGF0ZWA7YnJlYWsgYn14PXZvaWQgMH1lbHNlIEtuP1duKGUsbikmJih4PWBvbkNvbXBvc2l0aW9uRW5kYCk6ZT09PWBrZXlkb3duYCYmbi5rZXlDb2RlPT09MjI5JiYoeD1gb25Db21wb3NpdGlvblN0YXJ0YCk7eCYmKFZuJiZuLmxvY2FsZSE9PWBrb2AmJihLbnx8eCE9PWBvbkNvbXBvc2l0aW9uU3RhcnRgP3g9PT1gb25Db21wb3NpdGlvbkVuZGAmJktuJiYoYj1zbigpKToocm49aSxhbj1gdmFsdWVgaW4gcm4/cm4udmFsdWU6cm4udGV4dENvbnRlbnQsS249ITApKSx5PWtkKHIseCksMDx5Lmxlbmd0aCYmKHg9bmV3IFRuKHgsZSxudWxsLG4saSkscy5wdXNoKHtldmVudDp4LGxpc3RlbmVyczp5fSksYj94LmRhdGE9YjooYj1HbihuKSxiIT09bnVsbCYmKHguZGF0YT1iKSkpKSwoYj1Cbj9xbihlLG4pOkpuKGUsbikpJiYoeD1rZChyLGBvbkJlZm9yZUlucHV0YCksMDx4Lmxlbmd0aCYmKHk9bmV3IFRuKGBvbkJlZm9yZUlucHV0YCxgYmVmb3JlaW5wdXRgLG51bGwsbixpKSxzLnB1c2goe2V2ZW50OnksbGlzdGVuZXJzOnh9KSx5LmRhdGE9YikpLGdkKHMsZSxyLG4saSl9eGQocyx0KX0pfWZ1bmN0aW9uIE9kKGUsdCxuKXtyZXR1cm57aW5zdGFuY2U6ZSxsaXN0ZW5lcjp0LGN1cnJlbnRUYXJnZXQ6bn19ZnVuY3Rpb24ga2QoZSx0KXtmb3IodmFyIG49dCtgQ2FwdHVyZWAscj1bXTtlIT09bnVsbDspe3ZhciBpPWUsYT1pLnN0YXRlTm9kZTtpZihpPWkudGFnLGkhPT01JiZpIT09MjYmJmkhPT0yN3x8YT09PW51bGx8fChpPSR0KGUsbiksaSE9bnVsbCYmci51bnNoaWZ0KE9kKGUsaSxhKSksaT0kdChlLHQpLGkhPW51bGwmJnIucHVzaChPZChlLGksYSkpKSxlLnRhZz09PTMpcmV0dXJuIHI7ZT1lLnJldHVybn1yZXR1cm5bXX1mdW5jdGlvbiBBZChlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtkbyBlPWUucmV0dXJuO3doaWxlKGUmJmUudGFnIT09NSYmZS50YWchPT0yNyk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gamQoZSx0LG4scixpKXtmb3IodmFyIGE9dC5fcmVhY3ROYW1lLG89W107biE9PW51bGwmJm4hPT1yOyl7dmFyIHM9bixjPXMuYWx0ZXJuYXRlLGw9cy5zdGF0ZU5vZGU7aWYocz1zLnRhZyxjIT09bnVsbCYmYz09PXIpYnJlYWs7cyE9PTUmJnMhPT0yNiYmcyE9PTI3fHxsPT09bnVsbHx8KGM9bCxpPyhsPSR0KG4sYSksbCE9bnVsbCYmby51bnNoaWZ0KE9kKG4sbCxjKSkpOml8fChsPSR0KG4sYSksbCE9bnVsbCYmby5wdXNoKE9kKG4sbCxjKSkpKSxuPW4ucmV0dXJufW8ubGVuZ3RoIT09MCYmZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpvfSl9dmFyIE1kPS9cclxuPy9nLE5kPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gUGQoZSl7cmV0dXJuKHR5cGVvZiBlPT1gc3RyaW5nYD9lOmBgK2UpLnJlcGxhY2UoTWQsYApgKS5yZXBsYWNlKE5kLGBgKX1mdW5jdGlvbiBGZChlLHQpe3JldHVybiB0PVBkKHQpLFBkKGUpPT09dH1mdW5jdGlvbiBJZChlLHQsbixyLGEsbyl7c3dpdGNoKG4pe2Nhc2VgY2hpbGRyZW5gOnR5cGVvZiByPT1gc3RyaW5nYD90PT09YGJvZHlgfHx0PT09YHRleHRhcmVhYCYmcj09PWBgfHxMdChlLHIpOih0eXBlb2Ygcj09YG51bWJlcmB8fHR5cGVvZiByPT1gYmlnaW50YCkmJnQhPT1gYm9keWAmJkx0KGUsYGArcik7YnJlYWs7Y2FzZWBjbGFzc05hbWVgOnh0KGUsYGNsYXNzYCxyKTticmVhaztjYXNlYHRhYkluZGV4YDp4dChlLGB0YWJpbmRleGAscik7YnJlYWs7Y2FzZWBkaXJgOmNhc2Vgcm9sZWA6Y2FzZWB2aWV3Qm94YDpjYXNlYHdpZHRoYDpjYXNlYGhlaWdodGA6eHQoZSxuLHIpO2JyZWFrO2Nhc2Vgc3R5bGVgOkJ0KGUscixvKTticmVhaztjYXNlYGRhdGFgOmlmKHQhPT1gb2JqZWN0YCl7eHQoZSxgZGF0YWAscik7YnJlYWt9Y2FzZWBzcmNgOmNhc2VgaHJlZmA6aWYocj09PWBgJiYodCE9PWBhYHx8biE9PWBocmVmYCkpe2UucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrfWlmKHI9PW51bGx8fHR5cGVvZiByPT1gZnVuY3Rpb25gfHx0eXBlb2Ygcj09YHN5bWJvbGB8fHR5cGVvZiByPT1gYm9vbGVhbmApe2UucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrfXI9V3QoYGArciksZS5zZXRBdHRyaWJ1dGUobixyKTticmVhaztjYXNlYGFjdGlvbmA6Y2FzZWBmb3JtQWN0aW9uYDppZih0eXBlb2Ygcj09YGZ1bmN0aW9uYCl7ZS5zZXRBdHRyaWJ1dGUobixgamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ0EgUmVhY3QgZm9ybSB3YXMgdW5leHBlY3RlZGx5IHN1Ym1pdHRlZC4gSWYgeW91IGNhbGxlZCBmb3JtLnN1Ym1pdCgpIG1hbnVhbGx5LCBjb25zaWRlciB1c2luZyBmb3JtLnJlcXVlc3RTdWJtaXQoKSBpbnN0ZWFkLiBJZiB5b3VcXCdyZSB0cnlpbmcgdG8gdXNlIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIGluIGEgc3VibWl0IGV2ZW50IGhhbmRsZXIsIGNvbnNpZGVyIGFsc28gY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdCgpLicpYCk7YnJlYWt9ZWxzZSB0eXBlb2Ygbz09YGZ1bmN0aW9uYCYmKG49PT1gZm9ybUFjdGlvbmA/KHQhPT1gaW5wdXRgJiZJZChlLHQsYG5hbWVgLGEubmFtZSxhLG51bGwpLElkKGUsdCxgZm9ybUVuY1R5cGVgLGEuZm9ybUVuY1R5cGUsYSxudWxsKSxJZChlLHQsYGZvcm1NZXRob2RgLGEuZm9ybU1ldGhvZCxhLG51bGwpLElkKGUsdCxgZm9ybVRhcmdldGAsYS5mb3JtVGFyZ2V0LGEsbnVsbCkpOihJZChlLHQsYGVuY1R5cGVgLGEuZW5jVHlwZSxhLG51bGwpLElkKGUsdCxgbWV0aG9kYCxhLm1ldGhvZCxhLG51bGwpLElkKGUsdCxgdGFyZ2V0YCxhLnRhcmdldCxhLG51bGwpKSk7aWYocj09bnVsbHx8dHlwZW9mIHI9PWBzeW1ib2xgfHx0eXBlb2Ygcj09YGJvb2xlYW5gKXtlLnJlbW92ZUF0dHJpYnV0ZShuKTticmVha31yPVd0KGBgK3IpLGUuc2V0QXR0cmlidXRlKG4scik7YnJlYWs7Y2FzZWBvbkNsaWNrYDpyIT1udWxsJiYoZS5vbmNsaWNrPUd0KTticmVhaztjYXNlYG9uU2Nyb2xsYDpyIT1udWxsJiZTZChgc2Nyb2xsYCxlKTticmVhaztjYXNlYG9uU2Nyb2xsRW5kYDpyIT1udWxsJiZTZChgc2Nyb2xsZW5kYCxlKTticmVhaztjYXNlYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYDppZihyIT1udWxsKXtpZih0eXBlb2YgciE9YG9iamVjdGB8fCEoYF9faHRtbGBpbiByKSl0aHJvdyBFcnJvcihpKDYxKSk7aWYobj1yLl9faHRtbCxuIT1udWxsKXtpZihhLmNoaWxkcmVuIT1udWxsKXRocm93IEVycm9yKGkoNjApKTtlLmlubmVySFRNTD1ufX1icmVhaztjYXNlYG11bHRpcGxlYDplLm11bHRpcGxlPXImJnR5cGVvZiByIT1gZnVuY3Rpb25gJiZ0eXBlb2YgciE9YHN5bWJvbGA7YnJlYWs7Y2FzZWBtdXRlZGA6ZS5tdXRlZD1yJiZ0eXBlb2YgciE9YGZ1bmN0aW9uYCYmdHlwZW9mIHIhPWBzeW1ib2xgO2JyZWFrO2Nhc2Vgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nYDpjYXNlYHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ2A6Y2FzZWBkZWZhdWx0VmFsdWVgOmNhc2VgZGVmYXVsdENoZWNrZWRgOmNhc2VgaW5uZXJIVE1MYDpjYXNlYHJlZmA6YnJlYWs7Y2FzZWBhdXRvRm9jdXNgOmJyZWFrO2Nhc2VgeGxpbmtIcmVmYDppZihyPT1udWxsfHx0eXBlb2Ygcj09YGZ1bmN0aW9uYHx8dHlwZW9mIHI9PWBib29sZWFuYHx8dHlwZW9mIHI9PWBzeW1ib2xgKXtlLnJlbW92ZUF0dHJpYnV0ZShgeGxpbms6aHJlZmApO2JyZWFrfW49V3QoYGArciksZS5zZXRBdHRyaWJ1dGVOUyhgaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua2AsYHhsaW5rOmhyZWZgLG4pO2JyZWFrO2Nhc2VgY29udGVudEVkaXRhYmxlYDpjYXNlYHNwZWxsQ2hlY2tgOmNhc2VgZHJhZ2dhYmxlYDpjYXNlYHZhbHVlYDpjYXNlYGF1dG9SZXZlcnNlYDpjYXNlYGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRgOmNhc2VgZm9jdXNhYmxlYDpjYXNlYHByZXNlcnZlQWxwaGFgOnIhPW51bGwmJnR5cGVvZiByIT1gZnVuY3Rpb25gJiZ0eXBlb2YgciE9YHN5bWJvbGA/ZS5zZXRBdHRyaWJ1dGUobixgYCtyKTplLnJlbW92ZUF0dHJpYnV0ZShuKTticmVhaztjYXNlYGluZXJ0YDpjYXNlYGFsbG93RnVsbFNjcmVlbmA6Y2FzZWBhc3luY2A6Y2FzZWBhdXRvUGxheWA6Y2FzZWBjb250cm9sc2A6Y2FzZWBkZWZhdWx0YDpjYXNlYGRlZmVyYDpjYXNlYGRpc2FibGVkYDpjYXNlYGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlYDpjYXNlYGRpc2FibGVSZW1vdGVQbGF5YmFja2A6Y2FzZWBmb3JtTm9WYWxpZGF0ZWA6Y2FzZWBoaWRkZW5gOmNhc2VgbG9vcGA6Y2FzZWBub01vZHVsZWA6Y2FzZWBub1ZhbGlkYXRlYDpjYXNlYG9wZW5gOmNhc2VgcGxheXNJbmxpbmVgOmNhc2VgcmVhZE9ubHlgOmNhc2VgcmVxdWlyZWRgOmNhc2VgcmV2ZXJzZWRgOmNhc2Vgc2NvcGVkYDpjYXNlYHNlYW1sZXNzYDpjYXNlYGl0ZW1TY29wZWA6ciYmdHlwZW9mIHIhPWBmdW5jdGlvbmAmJnR5cGVvZiByIT1gc3ltYm9sYD9lLnNldEF0dHJpYnV0ZShuLGBgKTplLnJlbW92ZUF0dHJpYnV0ZShuKTticmVhaztjYXNlYGNhcHR1cmVgOmNhc2VgZG93bmxvYWRgOiEwPT09cj9lLnNldEF0dHJpYnV0ZShuLGBgKTohMSE9PXImJnIhPW51bGwmJnR5cGVvZiByIT1gZnVuY3Rpb25gJiZ0eXBlb2YgciE9YHN5bWJvbGA/ZS5zZXRBdHRyaWJ1dGUobixyKTplLnJlbW92ZUF0dHJpYnV0ZShuKTticmVhaztjYXNlYGNvbHNgOmNhc2Vgcm93c2A6Y2FzZWBzaXplYDpjYXNlYHNwYW5gOnIhPW51bGwmJnR5cGVvZiByIT1gZnVuY3Rpb25gJiZ0eXBlb2YgciE9YHN5bWJvbGAmJiFpc05hTihyKSYmMTw9cj9lLnNldEF0dHJpYnV0ZShuLHIpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2Vgcm93U3BhbmA6Y2FzZWBzdGFydGA6cj09bnVsbHx8dHlwZW9mIHI9PWBmdW5jdGlvbmB8fHR5cGVvZiByPT1gc3ltYm9sYHx8aXNOYU4ocik/ZS5yZW1vdmVBdHRyaWJ1dGUobik6ZS5zZXRBdHRyaWJ1dGUobixyKTticmVhaztjYXNlYHBvcG92ZXJgOlNkKGBiZWZvcmV0b2dnbGVgLGUpLFNkKGB0b2dnbGVgLGUpLGJ0KGUsYHBvcG92ZXJgLHIpO2JyZWFrO2Nhc2VgeGxpbmtBY3R1YXRlYDpTdChlLGBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYCxgeGxpbms6YWN0dWF0ZWAscik7YnJlYWs7Y2FzZWB4bGlua0FyY3JvbGVgOlN0KGUsYGh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtgLGB4bGluazphcmNyb2xlYCxyKTticmVhaztjYXNlYHhsaW5rUm9sZWA6U3QoZSxgaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua2AsYHhsaW5rOnJvbGVgLHIpO2JyZWFrO2Nhc2VgeGxpbmtTaG93YDpTdChlLGBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYCxgeGxpbms6c2hvd2Ascik7YnJlYWs7Y2FzZWB4bGlua1RpdGxlYDpTdChlLGBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYCxgeGxpbms6dGl0bGVgLHIpO2JyZWFrO2Nhc2VgeGxpbmtUeXBlYDpTdChlLGBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYCxgeGxpbms6dHlwZWAscik7YnJlYWs7Y2FzZWB4bWxCYXNlYDpTdChlLGBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VgLGB4bWw6YmFzZWAscik7YnJlYWs7Y2FzZWB4bWxMYW5nYDpTdChlLGBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VgLGB4bWw6bGFuZ2Ascik7YnJlYWs7Y2FzZWB4bWxTcGFjZWA6U3QoZSxgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlYCxgeG1sOnNwYWNlYCxyKTticmVhaztjYXNlYGlzYDpidChlLGBpc2Ascik7YnJlYWs7Y2FzZWBpbm5lclRleHRgOmNhc2VgdGV4dENvbnRlbnRgOmJyZWFrO2RlZmF1bHQ6KCEoMjxuLmxlbmd0aCl8fG5bMF0hPT1gb2AmJm5bMF0hPT1gT2B8fG5bMV0hPT1gbmAmJm5bMV0hPT1gTmApJiYobj1IdC5nZXQobil8fG4sYnQoZSxuLHIpKX19ZnVuY3Rpb24gTGQoZSx0LG4scixhLG8pe3N3aXRjaChuKXtjYXNlYHN0eWxlYDpCdChlLHIsbyk7YnJlYWs7Y2FzZWBkYW5nZXJvdXNseVNldElubmVySFRNTGA6aWYociE9bnVsbCl7aWYodHlwZW9mIHIhPWBvYmplY3RgfHwhKGBfX2h0bWxgaW4gcikpdGhyb3cgRXJyb3IoaSg2MSkpO2lmKG49ci5fX2h0bWwsbiE9bnVsbCl7aWYoYS5jaGlsZHJlbiE9bnVsbCl0aHJvdyBFcnJvcihpKDYwKSk7ZS5pbm5lckhUTUw9bn19YnJlYWs7Y2FzZWBjaGlsZHJlbmA6dHlwZW9mIHI9PWBzdHJpbmdgP0x0KGUscik6KHR5cGVvZiByPT1gbnVtYmVyYHx8dHlwZW9mIHI9PWBiaWdpbnRgKSYmTHQoZSxgYCtyKTticmVhaztjYXNlYG9uU2Nyb2xsYDpyIT1udWxsJiZTZChgc2Nyb2xsYCxlKTticmVhaztjYXNlYG9uU2Nyb2xsRW5kYDpyIT1udWxsJiZTZChgc2Nyb2xsZW5kYCxlKTticmVhaztjYXNlYG9uQ2xpY2tgOnIhPW51bGwmJihlLm9uY2xpY2s9R3QpO2JyZWFrO2Nhc2Vgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nYDpjYXNlYHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ2A6Y2FzZWBpbm5lckhUTUxgOmNhc2VgcmVmYDpicmVhaztjYXNlYGlubmVyVGV4dGA6Y2FzZWB0ZXh0Q29udGVudGA6YnJlYWs7ZGVmYXVsdDppZighcHQuaGFzT3duUHJvcGVydHkobikpYTp7aWYoblswXT09PWBvYCYmblsxXT09PWBuYCYmKGE9bi5lbmRzV2l0aChgQ2FwdHVyZWApLHQ9bi5zbGljZSgyLGE/bi5sZW5ndGgtNzp2b2lkIDApLG89ZVskZV18fG51bGwsbz1vPT1udWxsP251bGw6b1tuXSx0eXBlb2Ygbz09YGZ1bmN0aW9uYCYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbyxhKSx0eXBlb2Ygcj09YGZ1bmN0aW9uYCkpe3R5cGVvZiBvIT1gZnVuY3Rpb25gJiZvIT09bnVsbCYmKG4gaW4gZT9lW25dPW51bGw6ZS5oYXNBdHRyaWJ1dGUobikmJmUucmVtb3ZlQXR0cmlidXRlKG4pKSxlLmFkZEV2ZW50TGlzdGVuZXIodCxyLGEpO2JyZWFrIGF9biBpbiBlP2Vbbl09cjohMD09PXI/ZS5zZXRBdHRyaWJ1dGUobixgYCk6YnQoZSxuLHIpfX19ZnVuY3Rpb24gUmQoZSx0LG4pe3N3aXRjaCh0KXtjYXNlYGRpdmA6Y2FzZWBzcGFuYDpjYXNlYHN2Z2A6Y2FzZWBwYXRoYDpjYXNlYGFgOmNhc2VgZ2A6Y2FzZWBwYDpjYXNlYGxpYDpicmVhaztjYXNlYGltZ2A6U2QoYGVycm9yYCxlKSxTZChgbG9hZGAsZSk7dmFyIHI9ITEsYT0hMSxvO2ZvcihvIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIHM9bltvXTtpZihzIT1udWxsKXN3aXRjaChvKXtjYXNlYHNyY2A6cj0hMDticmVhaztjYXNlYHNyY1NldGA6YT0hMDticmVhaztjYXNlYGNoaWxkcmVuYDpjYXNlYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYDp0aHJvdyBFcnJvcihpKDEzNyx0KSk7ZGVmYXVsdDpJZChlLHQsbyxzLG4sbnVsbCl9fWEmJklkKGUsdCxgc3JjU2V0YCxuLnNyY1NldCxuLG51bGwpLHImJklkKGUsdCxgc3JjYCxuLnNyYyxuLG51bGwpO3JldHVybjtjYXNlYGlucHV0YDpTZChgaW52YWxpZGAsZSk7dmFyIGM9bz1zPWE9bnVsbCxsPW51bGwsdT1udWxsO2ZvcihyIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIGQ9bltyXTtpZihkIT1udWxsKXN3aXRjaChyKXtjYXNlYG5hbWVgOmE9ZDticmVhaztjYXNlYHR5cGVgOnM9ZDticmVhaztjYXNlYGNoZWNrZWRgOmw9ZDticmVhaztjYXNlYGRlZmF1bHRDaGVja2VkYDp1PWQ7YnJlYWs7Y2FzZWB2YWx1ZWA6bz1kO2JyZWFrO2Nhc2VgZGVmYXVsdFZhbHVlYDpjPWQ7YnJlYWs7Y2FzZWBjaGlsZHJlbmA6Y2FzZWBkYW5nZXJvdXNseVNldElubmVySFRNTGA6aWYoZCE9bnVsbCl0aHJvdyBFcnJvcihpKDEzNyx0KSk7YnJlYWs7ZGVmYXVsdDpJZChlLHQscixkLG4sbnVsbCl9fU10KGUsbyxjLGwsdSxzLGEsITEpO3JldHVybjtjYXNlYHNlbGVjdGA6Zm9yKGEgaW4gU2QoYGludmFsaWRgLGUpLHI9cz1vPW51bGwsbilpZihuLmhhc093blByb3BlcnR5KGEpJiYoYz1uW2FdLGMhPW51bGwpKXN3aXRjaChhKXtjYXNlYHZhbHVlYDpvPWM7YnJlYWs7Y2FzZWBkZWZhdWx0VmFsdWVgOnM9YzticmVhaztjYXNlYG11bHRpcGxlYDpyPWM7ZGVmYXVsdDpJZChlLHQsYSxjLG4sbnVsbCl9dD1vLG49cyxlLm11bHRpcGxlPSEhcix0PT1udWxsP24hPW51bGwmJlB0KGUsISFyLG4sITApOlB0KGUsISFyLHQsITEpO3JldHVybjtjYXNlYHRleHRhcmVhYDpmb3IocyBpbiBTZChgaW52YWxpZGAsZSksbz1hPXI9bnVsbCxuKWlmKG4uaGFzT3duUHJvcGVydHkocykmJihjPW5bc10sYyE9bnVsbCkpc3dpdGNoKHMpe2Nhc2VgdmFsdWVgOnI9YzticmVhaztjYXNlYGRlZmF1bHRWYWx1ZWA6YT1jO2JyZWFrO2Nhc2VgY2hpbGRyZW5gOm89YzticmVhaztjYXNlYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYDppZihjIT1udWxsKXRocm93IEVycm9yKGkoOTEpKTticmVhaztkZWZhdWx0OklkKGUsdCxzLGMsbixudWxsKX1JdChlLHIsYSxvKTtyZXR1cm47Y2FzZWBvcHRpb25gOmZvcihsIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShsKSYmKHI9bltsXSxyIT1udWxsKSlzd2l0Y2gobCl7Y2FzZWBzZWxlY3RlZGA6ZS5zZWxlY3RlZD1yJiZ0eXBlb2YgciE9YGZ1bmN0aW9uYCYmdHlwZW9mIHIhPWBzeW1ib2xgO2JyZWFrO2RlZmF1bHQ6SWQoZSx0LGwscixuLG51bGwpfXJldHVybjtjYXNlYGRpYWxvZ2A6U2QoYGJlZm9yZXRvZ2dsZWAsZSksU2QoYHRvZ2dsZWAsZSksU2QoYGNhbmNlbGAsZSksU2QoYGNsb3NlYCxlKTticmVhaztjYXNlYGlmcmFtZWA6Y2FzZWBvYmplY3RgOlNkKGBsb2FkYCxlKTticmVhaztjYXNlYHZpZGVvYDpjYXNlYGF1ZGlvYDpmb3Iocj0wO3I8eWQubGVuZ3RoO3IrKylTZCh5ZFtyXSxlKTticmVhaztjYXNlYGltYWdlYDpTZChgZXJyb3JgLGUpLFNkKGBsb2FkYCxlKTticmVhaztjYXNlYGRldGFpbHNgOlNkKGB0b2dnbGVgLGUpO2JyZWFrO2Nhc2VgZW1iZWRgOmNhc2Vgc291cmNlYDpjYXNlYGxpbmtgOlNkKGBlcnJvcmAsZSksU2QoYGxvYWRgLGUpO2Nhc2VgYXJlYWA6Y2FzZWBiYXNlYDpjYXNlYGJyYDpjYXNlYGNvbGA6Y2FzZWBocmA6Y2FzZWBrZXlnZW5gOmNhc2VgbWV0YWA6Y2FzZWBwYXJhbWA6Y2FzZWB0cmFja2A6Y2FzZWB3YnJgOmNhc2VgbWVudWl0ZW1gOmZvcih1IGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eSh1KSYmKHI9blt1XSxyIT1udWxsKSlzd2l0Y2godSl7Y2FzZWBjaGlsZHJlbmA6Y2FzZWBkYW5nZXJvdXNseVNldElubmVySFRNTGA6dGhyb3cgRXJyb3IoaSgxMzcsdCkpO2RlZmF1bHQ6SWQoZSx0LHUscixuLG51bGwpfXJldHVybjtkZWZhdWx0OmlmKFZ0KHQpKXtmb3IoZCBpbiBuKW4uaGFzT3duUHJvcGVydHkoZCkmJihyPW5bZF0sciE9PXZvaWQgMCYmTGQoZSx0LGQscixuLHZvaWQgMCkpO3JldHVybn19Zm9yKGMgaW4gbiluLmhhc093blByb3BlcnR5KGMpJiYocj1uW2NdLHIhPW51bGwmJklkKGUsdCxjLHIsbixudWxsKSl9ZnVuY3Rpb24gemQoZSx0LG4scil7c3dpdGNoKHQpe2Nhc2VgZGl2YDpjYXNlYHNwYW5gOmNhc2Vgc3ZnYDpjYXNlYHBhdGhgOmNhc2VgYWA6Y2FzZWBnYDpjYXNlYHBgOmNhc2VgbGlgOmJyZWFrO2Nhc2VgaW5wdXRgOnZhciBhPW51bGwsbz1udWxsLHM9bnVsbCxjPW51bGwsbD1udWxsLHU9bnVsbCxkPW51bGw7Zm9yKG0gaW4gbil7dmFyIGY9blttXTtpZihuLmhhc093blByb3BlcnR5KG0pJiZmIT1udWxsKXN3aXRjaChtKXtjYXNlYGNoZWNrZWRgOmJyZWFrO2Nhc2VgdmFsdWVgOmJyZWFrO2Nhc2VgZGVmYXVsdFZhbHVlYDpsPWY7ZGVmYXVsdDpyLmhhc093blByb3BlcnR5KG0pfHxJZChlLHQsbSxudWxsLHIsZil9fWZvcih2YXIgcCBpbiByKXt2YXIgbT1yW3BdO2lmKGY9bltwXSxyLmhhc093blByb3BlcnR5KHApJiYobSE9bnVsbHx8ZiE9bnVsbCkpc3dpdGNoKHApe2Nhc2VgdHlwZWA6bz1tO2JyZWFrO2Nhc2VgbmFtZWA6YT1tO2JyZWFrO2Nhc2VgY2hlY2tlZGA6dT1tO2JyZWFrO2Nhc2VgZGVmYXVsdENoZWNrZWRgOmQ9bTticmVhaztjYXNlYHZhbHVlYDpzPW07YnJlYWs7Y2FzZWBkZWZhdWx0VmFsdWVgOmM9bTticmVhaztjYXNlYGNoaWxkcmVuYDpjYXNlYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYDppZihtIT1udWxsKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0Om0hPT1mJiZJZChlLHQscCxtLHIsZil9fWp0KGUscyxjLGwsdSxkLG8sYSk7cmV0dXJuO2Nhc2Vgc2VsZWN0YDpmb3IobyBpbiBtPXM9Yz1wPW51bGwsbilpZihsPW5bb10sbi5oYXNPd25Qcm9wZXJ0eShvKSYmbCE9bnVsbClzd2l0Y2gobyl7Y2FzZWB2YWx1ZWA6YnJlYWs7Y2FzZWBtdWx0aXBsZWA6bT1sO2RlZmF1bHQ6ci5oYXNPd25Qcm9wZXJ0eShvKXx8SWQoZSx0LG8sbnVsbCxyLGwpfWZvcihhIGluIHIpaWYobz1yW2FdLGw9blthXSxyLmhhc093blByb3BlcnR5KGEpJiYobyE9bnVsbHx8bCE9bnVsbCkpc3dpdGNoKGEpe2Nhc2VgdmFsdWVgOnA9bzticmVhaztjYXNlYGRlZmF1bHRWYWx1ZWA6Yz1vO2JyZWFrO2Nhc2VgbXVsdGlwbGVgOnM9bztkZWZhdWx0Om8hPT1sJiZJZChlLHQsYSxvLHIsbCl9dD1jLG49cyxyPW0scD09bnVsbD8hIXIhPSEhbiYmKHQ9PW51bGw/UHQoZSwhIW4sbj9bXTpgYCwhMSk6UHQoZSwhIW4sdCwhMCkpOlB0KGUsISFuLHAsITEpO3JldHVybjtjYXNlYHRleHRhcmVhYDpmb3IoYyBpbiBtPXA9bnVsbCxuKWlmKGE9bltjXSxuLmhhc093blByb3BlcnR5KGMpJiZhIT1udWxsJiYhci5oYXNPd25Qcm9wZXJ0eShjKSlzd2l0Y2goYyl7Y2FzZWB2YWx1ZWA6YnJlYWs7Y2FzZWBjaGlsZHJlbmA6YnJlYWs7ZGVmYXVsdDpJZChlLHQsYyxudWxsLHIsYSl9Zm9yKHMgaW4gcilpZihhPXJbc10sbz1uW3NdLHIuaGFzT3duUHJvcGVydHkocykmJihhIT1udWxsfHxvIT1udWxsKSlzd2l0Y2gocyl7Y2FzZWB2YWx1ZWA6cD1hO2JyZWFrO2Nhc2VgZGVmYXVsdFZhbHVlYDptPWE7YnJlYWs7Y2FzZWBjaGlsZHJlbmA6YnJlYWs7Y2FzZWBkYW5nZXJvdXNseVNldElubmVySFRNTGA6aWYoYSE9bnVsbCl0aHJvdyBFcnJvcihpKDkxKSk7YnJlYWs7ZGVmYXVsdDphIT09byYmSWQoZSx0LHMsYSxyLG8pfUZ0KGUscCxtKTtyZXR1cm47Y2FzZWBvcHRpb25gOmZvcih2YXIgaCBpbiBuKWlmKHA9bltoXSxuLmhhc093blByb3BlcnR5KGgpJiZwIT1udWxsJiYhci5oYXNPd25Qcm9wZXJ0eShoKSlzd2l0Y2goaCl7Y2FzZWBzZWxlY3RlZGA6ZS5zZWxlY3RlZD0hMTticmVhaztkZWZhdWx0OklkKGUsdCxoLG51bGwscixwKX1mb3IobCBpbiByKWlmKHA9cltsXSxtPW5bbF0sci5oYXNPd25Qcm9wZXJ0eShsKSYmcCE9PW0mJihwIT1udWxsfHxtIT1udWxsKSlzd2l0Y2gobCl7Y2FzZWBzZWxlY3RlZGA6ZS5zZWxlY3RlZD1wJiZ0eXBlb2YgcCE9YGZ1bmN0aW9uYCYmdHlwZW9mIHAhPWBzeW1ib2xgO2JyZWFrO2RlZmF1bHQ6SWQoZSx0LGwscCxyLG0pfXJldHVybjtjYXNlYGltZ2A6Y2FzZWBsaW5rYDpjYXNlYGFyZWFgOmNhc2VgYmFzZWA6Y2FzZWBicmA6Y2FzZWBjb2xgOmNhc2VgZW1iZWRgOmNhc2VgaHJgOmNhc2Vga2V5Z2VuYDpjYXNlYG1ldGFgOmNhc2VgcGFyYW1gOmNhc2Vgc291cmNlYDpjYXNlYHRyYWNrYDpjYXNlYHdicmA6Y2FzZWBtZW51aXRlbWA6Zm9yKHZhciBnIGluIG4pcD1uW2ddLG4uaGFzT3duUHJvcGVydHkoZykmJnAhPW51bGwmJiFyLmhhc093blByb3BlcnR5KGcpJiZJZChlLHQsZyxudWxsLHIscCk7Zm9yKHUgaW4gcilpZihwPXJbdV0sbT1uW3VdLHIuaGFzT3duUHJvcGVydHkodSkmJnAhPT1tJiYocCE9bnVsbHx8bSE9bnVsbCkpc3dpdGNoKHUpe2Nhc2VgY2hpbGRyZW5gOmNhc2VgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgOmlmKHAhPW51bGwpdGhyb3cgRXJyb3IoaSgxMzcsdCkpO2JyZWFrO2RlZmF1bHQ6SWQoZSx0LHUscCxyLG0pfXJldHVybjtkZWZhdWx0OmlmKFZ0KHQpKXtmb3IodmFyIF8gaW4gbilwPW5bX10sbi5oYXNPd25Qcm9wZXJ0eShfKSYmcCE9PXZvaWQgMCYmIXIuaGFzT3duUHJvcGVydHkoXykmJkxkKGUsdCxfLHZvaWQgMCxyLHApO2ZvcihkIGluIHIpcD1yW2RdLG09bltkXSwhci5oYXNPd25Qcm9wZXJ0eShkKXx8cD09PW18fHA9PT12b2lkIDAmJm09PT12b2lkIDB8fExkKGUsdCxkLHAscixtKTtyZXR1cm59fWZvcih2YXIgdiBpbiBuKXA9blt2XSxuLmhhc093blByb3BlcnR5KHYpJiZwIT1udWxsJiYhci5oYXNPd25Qcm9wZXJ0eSh2KSYmSWQoZSx0LHYsbnVsbCxyLHApO2ZvcihmIGluIHIpcD1yW2ZdLG09bltmXSwhci5oYXNPd25Qcm9wZXJ0eShmKXx8cD09PW18fHA9PW51bGwmJm09PW51bGx8fElkKGUsdCxmLHAscixtKX1mdW5jdGlvbiBCZChlKXtzd2l0Y2goZSl7Y2FzZWBjc3NgOmNhc2Vgc2NyaXB0YDpjYXNlYGZvbnRgOmNhc2VgaW1nYDpjYXNlYGltYWdlYDpjYXNlYGlucHV0YDpjYXNlYGxpbmtgOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFZkKCl7aWYodHlwZW9mIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGU9PWBmdW5jdGlvbmApe2Zvcih2YXIgZT0wLHQ9MCxuPXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoYHJlc291cmNlYCkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdLGE9aS50cmFuc2ZlclNpemUsbz1pLmluaXRpYXRvclR5cGUscz1pLmR1cmF0aW9uO2lmKGEmJnMmJkJkKG8pKXtmb3Iobz0wLHM9aS5yZXNwb25zZUVuZCxyKz0xO3I8bi5sZW5ndGg7cisrKXt2YXIgYz1uW3JdLGw9Yy5zdGFydFRpbWU7aWYobD5zKWJyZWFrO3ZhciB1PWMudHJhbnNmZXJTaXplLGQ9Yy5pbml0aWF0b3JUeXBlO3UmJkJkKGQpJiYoYz1jLnJlc3BvbnNlRW5kLG8rPXUqKGM8cz8xOihzLWwpLyhjLWwpKSl9aWYoLS1yLHQrPTgqKGErbykvKGkuZHVyYXRpb24vMWUzKSxlKyssMTA8ZSlicmVha319aWYoMDxlKXJldHVybiB0L2UvMWU2fXJldHVybiBuYXZpZ2F0b3IuY29ubmVjdGlvbiYmKGU9bmF2aWdhdG9yLmNvbm5lY3Rpb24uZG93bmxpbmssdHlwZW9mIGU9PWBudW1iZXJgKT9lOjV9dmFyIEhkPW51bGwsVWQ9bnVsbDtmdW5jdGlvbiBXZChlKXtyZXR1cm4gZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gR2QoZSl7c3dpdGNoKGUpe2Nhc2VgaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgOnJldHVybiAxO2Nhc2VgaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTGA6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gS2QoZSx0KXtpZihlPT09MClzd2l0Y2godCl7Y2FzZWBzdmdgOnJldHVybiAxO2Nhc2VgbWF0aGA6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH1yZXR1cm4gZT09PTEmJnQ9PT1gZm9yZWlnbk9iamVjdGA/MDplfWZ1bmN0aW9uIHFkKGUsdCl7cmV0dXJuIGU9PT1gdGV4dGFyZWFgfHxlPT09YG5vc2NyaXB0YHx8dHlwZW9mIHQuY2hpbGRyZW49PWBzdHJpbmdgfHx0eXBlb2YgdC5jaGlsZHJlbj09YG51bWJlcmB8fHR5cGVvZiB0LmNoaWxkcmVuPT1gYmlnaW50YHx8dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9PWBvYmplY3RgJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT09bnVsbCYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwhPW51bGx9dmFyIEpkPW51bGw7ZnVuY3Rpb24gWWQoKXt2YXIgZT13aW5kb3cuZXZlbnQ7cmV0dXJuIGUmJmUudHlwZT09PWBwb3BzdGF0ZWA/ZT09PUpkPyExOihKZD1lLCEwKTooSmQ9bnVsbCwhMSl9dmFyIFhkPXR5cGVvZiBzZXRUaW1lb3V0PT1gZnVuY3Rpb25gP3NldFRpbWVvdXQ6dm9pZCAwLFpkPXR5cGVvZiBjbGVhclRpbWVvdXQ9PWBmdW5jdGlvbmA/Y2xlYXJUaW1lb3V0OnZvaWQgMCxRZD10eXBlb2YgUHJvbWlzZT09YGZ1bmN0aW9uYD9Qcm9taXNlOnZvaWQgMCwkZD10eXBlb2YgcXVldWVNaWNyb3Rhc2s9PWBmdW5jdGlvbmA/cXVldWVNaWNyb3Rhc2s6UWQ9PT12b2lkIDA/WGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFFkLnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChlZil9O2Z1bmN0aW9uIGVmKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gdGYoZSl7cmV0dXJuIGU9PT1gaGVhZGB9ZnVuY3Rpb24gbmYoZSx0KXt2YXIgbj10LHI9MDtkb3t2YXIgaT1uLm5leHRTaWJsaW5nO2lmKGUucmVtb3ZlQ2hpbGQobiksaSYmaS5ub2RlVHlwZT09PTgpaWYobj1pLmRhdGEsbj09PWAvJGB8fG49PT1gLyZgKXtpZihyPT09MCl7ZS5yZW1vdmVDaGlsZChpKSxJcCh0KTtyZXR1cm59ci0tfWVsc2UgaWYobj09PWAkYHx8bj09PWAkP2B8fG49PT1gJH5gfHxuPT09YCQhYHx8bj09PWAmYClyKys7ZWxzZSBpZihuPT09YGh0bWxgKWdmKGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO2Vsc2UgaWYobj09PWBoZWFkYCl7bj1lLm93bmVyRG9jdW1lbnQuaGVhZCxnZihuKTtmb3IodmFyIGE9bi5maXJzdENoaWxkO2E7KXt2YXIgbz1hLm5leHRTaWJsaW5nLHM9YS5ub2RlTmFtZTthW2F0XXx8cz09PWBTQ1JJUFRgfHxzPT09YFNUWUxFYHx8cz09PWBMSU5LYCYmYS5yZWwudG9Mb3dlckNhc2UoKT09PWBzdHlsZXNoZWV0YHx8bi5yZW1vdmVDaGlsZChhKSxhPW99fWVsc2Ugbj09PWBib2R5YCYmZ2YoZS5vd25lckRvY3VtZW50LmJvZHkpO249aX13aGlsZShuKTtJcCh0KX1mdW5jdGlvbiByZihlLHQpe3ZhciBuPWU7ZT0wO2Rve3ZhciByPW4ubmV4dFNpYmxpbmc7aWYobi5ub2RlVHlwZT09PTE/dD8obi5fc3Rhc2hlZERpc3BsYXk9bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT1gbm9uZWApOihuLnN0eWxlLmRpc3BsYXk9bi5fc3Rhc2hlZERpc3BsYXl8fGBgLG4uZ2V0QXR0cmlidXRlKGBzdHlsZWApPT09YGAmJm4ucmVtb3ZlQXR0cmlidXRlKGBzdHlsZWApKTpuLm5vZGVUeXBlPT09MyYmKHQ/KG4uX3N0YXNoZWRUZXh0PW4ubm9kZVZhbHVlLG4ubm9kZVZhbHVlPWBgKTpuLm5vZGVWYWx1ZT1uLl9zdGFzaGVkVGV4dHx8YGApLHImJnIubm9kZVR5cGU9PT04KWlmKG49ci5kYXRhLG49PT1gLyRgKXtpZihlPT09MClicmVhaztlLS19ZWxzZSBuIT09YCRgJiZuIT09YCQ/YCYmbiE9PWAkfmAmJm4hPT1gJCFgfHxlKys7bj1yfXdoaWxlKG4pfWZ1bmN0aW9uIGFmKGUpe3ZhciB0PWUuZmlyc3RDaGlsZDtmb3IodCYmdC5ub2RlVHlwZT09PTEwJiYodD10Lm5leHRTaWJsaW5nKTt0Oyl7dmFyIG49dDtzd2l0Y2godD10Lm5leHRTaWJsaW5nLG4ubm9kZU5hbWUpe2Nhc2VgSFRNTGA6Y2FzZWBIRUFEYDpjYXNlYEJPRFlgOmFmKG4pLG90KG4pO2NvbnRpbnVlO2Nhc2VgU0NSSVBUYDpjYXNlYFNUWUxFYDpjb250aW51ZTtjYXNlYExJTktgOmlmKG4ucmVsLnRvTG93ZXJDYXNlKCk9PT1gc3R5bGVzaGVldGApY29udGludWV9ZS5yZW1vdmVDaGlsZChuKX19ZnVuY3Rpb24gb2YoZSx0LG4scil7Zm9yKDtlLm5vZGVUeXBlPT09MTspe3ZhciBpPW47aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKXtpZighciYmKGUubm9kZU5hbWUhPT1gSU5QVVRgfHxlLnR5cGUhPT1gaGlkZGVuYCkpYnJlYWt9ZWxzZSBpZighcilpZih0PT09YGlucHV0YCYmZS50eXBlPT09YGhpZGRlbmApe3ZhciBhPWkubmFtZT09bnVsbD9udWxsOmBgK2kubmFtZTtpZihpLnR5cGU9PT1gaGlkZGVuYCYmZS5nZXRBdHRyaWJ1dGUoYG5hbWVgKT09PWEpcmV0dXJuIGV9ZWxzZSByZXR1cm4gZTtlbHNlIGlmKCFlW2F0XSlzd2l0Y2godCl7Y2FzZWBtZXRhYDppZighZS5oYXNBdHRyaWJ1dGUoYGl0ZW1wcm9wYCkpYnJlYWs7cmV0dXJuIGU7Y2FzZWBsaW5rYDppZihhPWUuZ2V0QXR0cmlidXRlKGByZWxgKSxhPT09YHN0eWxlc2hlZXRgJiZlLmhhc0F0dHJpYnV0ZShgZGF0YS1wcmVjZWRlbmNlYCl8fGEhPT1pLnJlbHx8ZS5nZXRBdHRyaWJ1dGUoYGhyZWZgKSE9PShpLmhyZWY9PW51bGx8fGkuaHJlZj09PWBgP251bGw6aS5ocmVmKXx8ZS5nZXRBdHRyaWJ1dGUoYGNyb3Nzb3JpZ2luYCkhPT0oaS5jcm9zc09yaWdpbj09bnVsbD9udWxsOmkuY3Jvc3NPcmlnaW4pfHxlLmdldEF0dHJpYnV0ZShgdGl0bGVgKSE9PShpLnRpdGxlPT1udWxsP251bGw6aS50aXRsZSkpYnJlYWs7cmV0dXJuIGU7Y2FzZWBzdHlsZWA6aWYoZS5oYXNBdHRyaWJ1dGUoYGRhdGEtcHJlY2VkZW5jZWApKWJyZWFrO3JldHVybiBlO2Nhc2Vgc2NyaXB0YDppZihhPWUuZ2V0QXR0cmlidXRlKGBzcmNgKSwoYSE9PShpLnNyYz09bnVsbD9udWxsOmkuc3JjKXx8ZS5nZXRBdHRyaWJ1dGUoYHR5cGVgKSE9PShpLnR5cGU9PW51bGw/bnVsbDppLnR5cGUpfHxlLmdldEF0dHJpYnV0ZShgY3Jvc3NvcmlnaW5gKSE9PShpLmNyb3NzT3JpZ2luPT1udWxsP251bGw6aS5jcm9zc09yaWdpbikpJiZhJiZlLmhhc0F0dHJpYnV0ZShgYXN5bmNgKSYmIWUuaGFzQXR0cmlidXRlKGBpdGVtcHJvcGApKWJyZWFrO3JldHVybiBlO2RlZmF1bHQ6cmV0dXJuIGV9aWYoZT1kZihlLm5leHRTaWJsaW5nKSxlPT09bnVsbClicmVha31yZXR1cm4gbnVsbH1mdW5jdGlvbiBzZihlLHQsbil7aWYodD09PWBgKXJldHVybiBudWxsO2Zvcig7ZS5ub2RlVHlwZSE9PTM7KWlmKChlLm5vZGVUeXBlIT09MXx8ZS5ub2RlTmFtZSE9PWBJTlBVVGB8fGUudHlwZSE9PWBoaWRkZW5gKSYmIW58fChlPWRmKGUubmV4dFNpYmxpbmcpLGU9PT1udWxsKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX1mdW5jdGlvbiBjZihlLHQpe2Zvcig7ZS5ub2RlVHlwZSE9PTg7KWlmKChlLm5vZGVUeXBlIT09MXx8ZS5ub2RlTmFtZSE9PWBJTlBVVGB8fGUudHlwZSE9PWBoaWRkZW5gKSYmIXR8fChlPWRmKGUubmV4dFNpYmxpbmcpLGU9PT1udWxsKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX1mdW5jdGlvbiBsZihlKXtyZXR1cm4gZS5kYXRhPT09YCQ/YHx8ZS5kYXRhPT09YCR+YH1mdW5jdGlvbiB1ZihlKXtyZXR1cm4gZS5kYXRhPT09YCQhYHx8ZS5kYXRhPT09YCQ/YCYmZS5vd25lckRvY3VtZW50LnJlYWR5U3RhdGUhPT1gbG9hZGluZ2B9ZnVuY3Rpb24gWChlLHQpe3ZhciBuPWUub3duZXJEb2N1bWVudDtpZihlLmRhdGE9PT1gJH5gKWUuX3JlYWN0UmV0cnk9dDtlbHNlIGlmKGUuZGF0YSE9PWAkP2B8fG4ucmVhZHlTdGF0ZSE9PWBsb2FkaW5nYCl0KCk7ZWxzZXt2YXIgcj1mdW5jdGlvbigpe3QoKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoYERPTUNvbnRlbnRMb2FkZWRgLHIpfTtuLmFkZEV2ZW50TGlzdGVuZXIoYERPTUNvbnRlbnRMb2FkZWRgLHIpLGUuX3JlYWN0UmV0cnk9cn19ZnVuY3Rpb24gZGYoZSl7Zm9yKDtlIT1udWxsO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZih0PT09MXx8dD09PTMpYnJlYWs7aWYodD09PTgpe2lmKHQ9ZS5kYXRhLHQ9PT1gJGB8fHQ9PT1gJCFgfHx0PT09YCQ/YHx8dD09PWAkfmB8fHQ9PT1gJmB8fHQ9PT1gRiFgfHx0PT09YEZgKWJyZWFrO2lmKHQ9PT1gLyRgfHx0PT09YC8mYClyZXR1cm4gbnVsbH19cmV0dXJuIGV9dmFyIGZmPW51bGw7ZnVuY3Rpb24gcGYoZSl7ZT1lLm5leHRTaWJsaW5nO2Zvcih2YXIgdD0wO2U7KXtpZihlLm5vZGVUeXBlPT09OCl7dmFyIG49ZS5kYXRhO2lmKG49PT1gLyRgfHxuPT09YC8mYCl7aWYodD09PTApcmV0dXJuIGRmKGUubmV4dFNpYmxpbmcpO3QtLX1lbHNlIG4hPT1gJGAmJm4hPT1gJCFgJiZuIT09YCQ/YCYmbiE9PWAkfmAmJm4hPT1gJmB8fHQrK31lPWUubmV4dFNpYmxpbmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbWYoZSl7ZT1lLnByZXZpb3VzU2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoZS5ub2RlVHlwZT09PTgpe3ZhciBuPWUuZGF0YTtpZihuPT09YCRgfHxuPT09YCQhYHx8bj09PWAkP2B8fG49PT1gJH5gfHxuPT09YCZgKXtpZih0PT09MClyZXR1cm4gZTt0LS19ZWxzZSBuIT09YC8kYCYmbiE9PWAvJmB8fHQrK31lPWUucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGhmKGUsdCxuKXtzd2l0Y2godD1XZChuKSxlKXtjYXNlYGh0bWxgOmlmKGU9dC5kb2N1bWVudEVsZW1lbnQsIWUpdGhyb3cgRXJyb3IoaSg0NTIpKTtyZXR1cm4gZTtjYXNlYGhlYWRgOmlmKGU9dC5oZWFkLCFlKXRocm93IEVycm9yKGkoNDUzKSk7cmV0dXJuIGU7Y2FzZWBib2R5YDppZihlPXQuYm9keSwhZSl0aHJvdyBFcnJvcihpKDQ1NCkpO3JldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NTEpKX19ZnVuY3Rpb24gZ2YoZSl7Zm9yKHZhciB0PWUuYXR0cmlidXRlczt0Lmxlbmd0aDspZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKHRbMF0pO290KGUpfXZhciBfZj1uZXcgTWFwLHZmPW5ldyBTZXQ7ZnVuY3Rpb24geWYoZSl7cmV0dXJuIHR5cGVvZiBlLmdldFJvb3ROb2RlPT1gZnVuY3Rpb25gP2UuZ2V0Um9vdE5vZGUoKTplLm5vZGVUeXBlPT09OT9lOmUub3duZXJEb2N1bWVudH12YXIgYmY9TC5kO0wuZD17Zjp4ZixyOlNmLEQ6VGYsQzpFZixMOkRmLG06T2YsWDpBZixTOmtmLE06amZ9O2Z1bmN0aW9uIHhmKCl7dmFyIGU9YmYuZigpLHQ9eHUoKTtyZXR1cm4gZXx8dH1mdW5jdGlvbiBTZihlKXt2YXIgdD1jdChlKTt0IT09bnVsbCYmdC50YWc9PT01JiZ0LnR5cGU9PT1gZm9ybWA/eHModCk6YmYucihlKX12YXIgQ2Y9dHlwZW9mIGRvY3VtZW50PmB1YD9udWxsOmRvY3VtZW50O2Z1bmN0aW9uIHdmKGUsdCxuKXt2YXIgcj1DZjtpZihyJiZ0eXBlb2YgdD09YHN0cmluZ2AmJnQpe3ZhciBpPUF0KHQpO2k9YGxpbmtbcmVsPSJgK2UrYCJdW2hyZWY9ImAraStgIl1gLHR5cGVvZiBuPT1gc3RyaW5nYCYmKGkrPWBbY3Jvc3NvcmlnaW49ImArbitgIl1gKSx2Zi5oYXMoaSl8fCh2Zi5hZGQoaSksZT17cmVsOmUsY3Jvc3NPcmlnaW46bixocmVmOnR9LHIucXVlcnlTZWxlY3RvcihpKT09PW51bGwmJih0PXIuY3JlYXRlRWxlbWVudChgbGlua2ApLFJkKHQsYGxpbmtgLGUpLGR0KHQpLHIuaGVhZC5hcHBlbmRDaGlsZCh0KSkpfX1mdW5jdGlvbiBUZihlKXtiZi5EKGUpLHdmKGBkbnMtcHJlZmV0Y2hgLGUsbnVsbCl9ZnVuY3Rpb24gRWYoZSx0KXtiZi5DKGUsdCksd2YoYHByZWNvbm5lY3RgLGUsdCl9ZnVuY3Rpb24gRGYoZSx0LG4pe2JmLkwoZSx0LG4pO3ZhciByPUNmO2lmKHImJmUmJnQpe3ZhciBpPWBsaW5rW3JlbD0icHJlbG9hZCJdW2FzPSJgK0F0KHQpK2AiXWA7dD09PWBpbWFnZWAmJm4mJm4uaW1hZ2VTcmNTZXQ/KGkrPWBbaW1hZ2VzcmNzZXQ9ImArQXQobi5pbWFnZVNyY1NldCkrYCJdYCx0eXBlb2Ygbi5pbWFnZVNpemVzPT1gc3RyaW5nYCYmKGkrPWBbaW1hZ2VzaXplcz0iYCtBdChuLmltYWdlU2l6ZXMpK2AiXWApKTppKz1gW2hyZWY9ImArQXQoZSkrYCJdYDt2YXIgYT1pO3N3aXRjaCh0KXtjYXNlYHN0eWxlYDphPU5mKGUpO2JyZWFrO2Nhc2Vgc2NyaXB0YDphPUxmKGUpfV9mLmhhcyhhKXx8KGU9cCh7cmVsOmBwcmVsb2FkYCxocmVmOnQ9PT1gaW1hZ2VgJiZuJiZuLmltYWdlU3JjU2V0P3ZvaWQgMDplLGFzOnR9LG4pLF9mLnNldChhLGUpLHIucXVlcnlTZWxlY3RvcihpKSE9PW51bGx8fHQ9PT1gc3R5bGVgJiZyLnF1ZXJ5U2VsZWN0b3IoUGYoYSkpfHx0PT09YHNjcmlwdGAmJnIucXVlcnlTZWxlY3RvcihSZihhKSl8fCh0PXIuY3JlYXRlRWxlbWVudChgbGlua2ApLFJkKHQsYGxpbmtgLGUpLGR0KHQpLHIuaGVhZC5hcHBlbmRDaGlsZCh0KSkpfX1mdW5jdGlvbiBPZihlLHQpe2JmLm0oZSx0KTt2YXIgbj1DZjtpZihuJiZlKXt2YXIgcj10JiZ0eXBlb2YgdC5hcz09YHN0cmluZ2A/dC5hczpgc2NyaXB0YCxpPWBsaW5rW3JlbD0ibW9kdWxlcHJlbG9hZCJdW2FzPSJgK0F0KHIpK2AiXVtocmVmPSJgK0F0KGUpK2AiXWAsYT1pO3N3aXRjaChyKXtjYXNlYGF1ZGlvd29ya2xldGA6Y2FzZWBwYWludHdvcmtsZXRgOmNhc2Vgc2VydmljZXdvcmtlcmA6Y2FzZWBzaGFyZWR3b3JrZXJgOmNhc2Vgd29ya2VyYDpjYXNlYHNjcmlwdGA6YT1MZihlKX1pZighX2YuaGFzKGEpJiYoZT1wKHtyZWw6YG1vZHVsZXByZWxvYWRgLGhyZWY6ZX0sdCksX2Yuc2V0KGEsZSksbi5xdWVyeVNlbGVjdG9yKGkpPT09bnVsbCkpe3N3aXRjaChyKXtjYXNlYGF1ZGlvd29ya2xldGA6Y2FzZWBwYWludHdvcmtsZXRgOmNhc2Vgc2VydmljZXdvcmtlcmA6Y2FzZWBzaGFyZWR3b3JrZXJgOmNhc2Vgd29ya2VyYDpjYXNlYHNjcmlwdGA6aWYobi5xdWVyeVNlbGVjdG9yKFJmKGEpKSlyZXR1cm59cj1uLmNyZWF0ZUVsZW1lbnQoYGxpbmtgKSxSZChyLGBsaW5rYCxlKSxkdChyKSxuLmhlYWQuYXBwZW5kQ2hpbGQocil9fX1mdW5jdGlvbiBrZihlLHQsbil7YmYuUyhlLHQsbik7dmFyIHI9Q2Y7aWYociYmZSl7dmFyIGk9dXQocikuaG9pc3RhYmxlU3R5bGVzLGE9TmYoZSk7dHx8PWBkZWZhdWx0YDt2YXIgbz1pLmdldChhKTtpZighbyl7dmFyIHM9e2xvYWRpbmc6MCxwcmVsb2FkOm51bGx9O2lmKG89ci5xdWVyeVNlbGVjdG9yKFBmKGEpKSlzLmxvYWRpbmc9NTtlbHNle2U9cCh7cmVsOmBzdHlsZXNoZWV0YCxocmVmOmUsImRhdGEtcHJlY2VkZW5jZSI6dH0sbiksKG49X2YuZ2V0KGEpKSYmVmYoZSxuKTt2YXIgYz1vPXIuY3JlYXRlRWxlbWVudChgbGlua2ApO2R0KGMpLFJkKGMsYGxpbmtgLGUpLGMuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtjLm9ubG9hZD1lLGMub25lcnJvcj10fSksYy5hZGRFdmVudExpc3RlbmVyKGBsb2FkYCxmdW5jdGlvbigpe3MubG9hZGluZ3w9MX0pLGMuYWRkRXZlbnRMaXN0ZW5lcihgZXJyb3JgLGZ1bmN0aW9uKCl7cy5sb2FkaW5nfD0yfSkscy5sb2FkaW5nfD00LEJmKG8sdCxyKX1vPXt0eXBlOmBzdHlsZXNoZWV0YCxpbnN0YW5jZTpvLGNvdW50OjEsc3RhdGU6c30saS5zZXQoYSxvKX19fWZ1bmN0aW9uIEFmKGUsdCl7YmYuWChlLHQpO3ZhciBuPUNmO2lmKG4mJmUpe3ZhciByPXV0KG4pLmhvaXN0YWJsZVNjcmlwdHMsaT1MZihlKSxhPXIuZ2V0KGkpO2F8fChhPW4ucXVlcnlTZWxlY3RvcihSZihpKSksYXx8KGU9cCh7c3JjOmUsYXN5bmM6ITB9LHQpLCh0PV9mLmdldChpKSkmJkhmKGUsdCksYT1uLmNyZWF0ZUVsZW1lbnQoYHNjcmlwdGApLGR0KGEpLFJkKGEsYGxpbmtgLGUpLG4uaGVhZC5hcHBlbmRDaGlsZChhKSksYT17dHlwZTpgc2NyaXB0YCxpbnN0YW5jZTphLGNvdW50OjEsc3RhdGU6bnVsbH0sci5zZXQoaSxhKSl9fWZ1bmN0aW9uIGpmKGUsdCl7YmYuTShlLHQpO3ZhciBuPUNmO2lmKG4mJmUpe3ZhciByPXV0KG4pLmhvaXN0YWJsZVNjcmlwdHMsaT1MZihlKSxhPXIuZ2V0KGkpO2F8fChhPW4ucXVlcnlTZWxlY3RvcihSZihpKSksYXx8KGU9cCh7c3JjOmUsYXN5bmM6ITAsdHlwZTpgbW9kdWxlYH0sdCksKHQ9X2YuZ2V0KGkpKSYmSGYoZSx0KSxhPW4uY3JlYXRlRWxlbWVudChgc2NyaXB0YCksZHQoYSksUmQoYSxgbGlua2AsZSksbi5oZWFkLmFwcGVuZENoaWxkKGEpKSxhPXt0eXBlOmBzY3JpcHRgLGluc3RhbmNlOmEsY291bnQ6MSxzdGF0ZTpudWxsfSxyLnNldChpLGEpKX19ZnVuY3Rpb24gTWYoZSx0LG4scil7dmFyIGE9KGE9Ry5jdXJyZW50KT95ZihhKTpudWxsO2lmKCFhKXRocm93IEVycm9yKGkoNDQ2KSk7c3dpdGNoKGUpe2Nhc2VgbWV0YWA6Y2FzZWB0aXRsZWA6cmV0dXJuIG51bGw7Y2FzZWBzdHlsZWA6cmV0dXJuIHR5cGVvZiBuLnByZWNlZGVuY2U9PWBzdHJpbmdgJiZ0eXBlb2Ygbi5ocmVmPT1gc3RyaW5nYD8odD1OZihuLmhyZWYpLG49dXQoYSkuaG9pc3RhYmxlU3R5bGVzLHI9bi5nZXQodCkscnx8KHI9e3R5cGU6YHN0eWxlYCxpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH0sbi5zZXQodCxyKSkscik6e3R5cGU6YHZvaWRgLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlYGxpbmtgOmlmKG4ucmVsPT09YHN0eWxlc2hlZXRgJiZ0eXBlb2Ygbi5ocmVmPT1gc3RyaW5nYCYmdHlwZW9mIG4ucHJlY2VkZW5jZT09YHN0cmluZ2Ape2U9TmYobi5ocmVmKTt2YXIgbz11dChhKS5ob2lzdGFibGVTdHlsZXMscz1vLmdldChlKTtpZihzfHwoYT1hLm93bmVyRG9jdW1lbnR8fGEscz17dHlwZTpgc3R5bGVzaGVldGAsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sby5zZXQoZSxzKSwobz1hLnF1ZXJ5U2VsZWN0b3IoUGYoZSkpKSYmIW8uX3AmJihzLmluc3RhbmNlPW8scy5zdGF0ZS5sb2FkaW5nPTUpLF9mLmhhcyhlKXx8KG49e3JlbDpgcHJlbG9hZGAsYXM6YHN0eWxlYCxocmVmOm4uaHJlZixjcm9zc09yaWdpbjpuLmNyb3NzT3JpZ2luLGludGVncml0eTpuLmludGVncml0eSxtZWRpYTpuLm1lZGlhLGhyZWZMYW5nOm4uaHJlZkxhbmcscmVmZXJyZXJQb2xpY3k6bi5yZWZlcnJlclBvbGljeX0sX2Yuc2V0KGUsbiksb3x8SWYoYSxlLG4scy5zdGF0ZSkpKSx0JiZyPT09bnVsbCl0aHJvdyBFcnJvcihpKDUyOCxgYCkpO3JldHVybiBzfWlmKHQmJnIhPT1udWxsKXRocm93IEVycm9yKGkoNTI5LGBgKSk7cmV0dXJuIG51bGw7Y2FzZWBzY3JpcHRgOnJldHVybiB0PW4uYXN5bmMsbj1uLnNyYyx0eXBlb2Ygbj09YHN0cmluZ2AmJnQmJnR5cGVvZiB0IT1gZnVuY3Rpb25gJiZ0eXBlb2YgdCE9YHN5bWJvbGA/KHQ9TGYobiksbj11dChhKS5ob2lzdGFibGVTY3JpcHRzLHI9bi5nZXQodCkscnx8KHI9e3R5cGU6YHNjcmlwdGAsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9LG4uc2V0KHQscikpLHIpOnt0eXBlOmB2b2lkYCxpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQ0NCxlKSl9fWZ1bmN0aW9uIE5mKGUpe3JldHVybmBocmVmPSJgK0F0KGUpK2AiYH1mdW5jdGlvbiBQZihlKXtyZXR1cm5gbGlua1tyZWw9InN0eWxlc2hlZXQiXVtgK2UrYF1gfWZ1bmN0aW9uIEZmKGUpe3JldHVybiBwKHt9LGUseyJkYXRhLXByZWNlZGVuY2UiOmUucHJlY2VkZW5jZSxwcmVjZWRlbmNlOm51bGx9KX1mdW5jdGlvbiBJZihlLHQsbixyKXtlLnF1ZXJ5U2VsZWN0b3IoYGxpbmtbcmVsPSJwcmVsb2FkIl1bYXM9InN0eWxlIl1bYCt0K2BdYCk/ci5sb2FkaW5nPTE6KHQ9ZS5jcmVhdGVFbGVtZW50KGBsaW5rYCksci5wcmVsb2FkPXQsdC5hZGRFdmVudExpc3RlbmVyKGBsb2FkYCxmdW5jdGlvbigpe3JldHVybiByLmxvYWRpbmd8PTF9KSx0LmFkZEV2ZW50TGlzdGVuZXIoYGVycm9yYCxmdW5jdGlvbigpe3JldHVybiByLmxvYWRpbmd8PTJ9KSxSZCh0LGBsaW5rYCxuKSxkdCh0KSxlLmhlYWQuYXBwZW5kQ2hpbGQodCkpfWZ1bmN0aW9uIExmKGUpe3JldHVybmBbc3JjPSJgK0F0KGUpK2AiXWB9ZnVuY3Rpb24gUmYoZSl7cmV0dXJuYHNjcmlwdFthc3luY11gK2V9ZnVuY3Rpb24gemYoZSx0LG4pe2lmKHQuY291bnQrKyx0Lmluc3RhbmNlPT09bnVsbClzd2l0Y2godC50eXBlKXtjYXNlYHN0eWxlYDp2YXIgcj1lLnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2RhdGEtaHJlZn49ImArQXQobi5ocmVmKStgIl1gKTtpZihyKXJldHVybiB0Lmluc3RhbmNlPXIsZHQocikscjt2YXIgYT1wKHt9LG4seyJkYXRhLWhyZWYiOm4uaHJlZiwiZGF0YS1wcmVjZWRlbmNlIjpuLnByZWNlZGVuY2UsaHJlZjpudWxsLHByZWNlZGVuY2U6bnVsbH0pO3JldHVybiByPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCksZHQociksUmQocixgc3R5bGVgLGEpLEJmKHIsbi5wcmVjZWRlbmNlLGUpLHQuaW5zdGFuY2U9cjtjYXNlYHN0eWxlc2hlZXRgOmE9TmYobi5ocmVmKTt2YXIgbz1lLnF1ZXJ5U2VsZWN0b3IoUGYoYSkpO2lmKG8pcmV0dXJuIHQuc3RhdGUubG9hZGluZ3w9NCx0Lmluc3RhbmNlPW8sZHQobyksbztyPUZmKG4pLChhPV9mLmdldChhKSkmJlZmKHIsYSksbz0oZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KGBsaW5rYCksZHQobyk7dmFyIHM9bztyZXR1cm4gcy5fcD1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3Mub25sb2FkPWUscy5vbmVycm9yPXR9KSxSZChvLGBsaW5rYCxyKSx0LnN0YXRlLmxvYWRpbmd8PTQsQmYobyxuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1vO2Nhc2Vgc2NyaXB0YDpyZXR1cm4gbz1MZihuLnNyYyksKGE9ZS5xdWVyeVNlbGVjdG9yKFJmKG8pKSk/KHQuaW5zdGFuY2U9YSxkdChhKSxhKToocj1uLChhPV9mLmdldChvKSkmJihyPXAoe30sbiksSGYocixhKSksZT1lLm93bmVyRG9jdW1lbnR8fGUsYT1lLmNyZWF0ZUVsZW1lbnQoYHNjcmlwdGApLGR0KGEpLFJkKGEsYGxpbmtgLHIpLGUuaGVhZC5hcHBlbmRDaGlsZChhKSx0Lmluc3RhbmNlPWEpO2Nhc2Vgdm9pZGA6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQ0Myx0LnR5cGUpKX1lbHNlIHQudHlwZT09PWBzdHlsZXNoZWV0YCYmISh0LnN0YXRlLmxvYWRpbmcmNCkmJihyPXQuaW5zdGFuY2UsdC5zdGF0ZS5sb2FkaW5nfD00LEJmKHIsbi5wcmVjZWRlbmNlLGUpKTtyZXR1cm4gdC5pbnN0YW5jZX1mdW5jdGlvbiBCZihlLHQsbil7Zm9yKHZhciByPW4ucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWw9InN0eWxlc2hlZXQiXVtkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV1gKSxpPXIubGVuZ3RoP3Jbci5sZW5ndGgtMV06bnVsbCxhPWksbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dO2lmKHMuZGF0YXNldC5wcmVjZWRlbmNlPT09dClhPXM7ZWxzZSBpZihhIT09aSlicmVha31hP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxhLm5leHRTaWJsaW5nKToodD1uLm5vZGVUeXBlPT09OT9uLmhlYWQ6bix0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCkpfWZ1bmN0aW9uIFZmKGUsdCl7ZS5jcm9zc09yaWdpbj8/PXQuY3Jvc3NPcmlnaW4sZS5yZWZlcnJlclBvbGljeT8/PXQucmVmZXJyZXJQb2xpY3ksZS50aXRsZT8/PXQudGl0bGV9ZnVuY3Rpb24gSGYoZSx0KXtlLmNyb3NzT3JpZ2luPz89dC5jcm9zc09yaWdpbixlLnJlZmVycmVyUG9saWN5Pz89dC5yZWZlcnJlclBvbGljeSxlLmludGVncml0eT8/PXQuaW50ZWdyaXR5fXZhciBVZj1udWxsO2Z1bmN0aW9uIFdmKGUsdCxuKXtpZihVZj09PW51bGwpe3ZhciByPW5ldyBNYXAsaT1VZj1uZXcgTWFwO2kuc2V0KG4scil9ZWxzZSBpPVVmLHI9aS5nZXQobikscnx8KHI9bmV3IE1hcCxpLnNldChuLHIpKTtpZihyLmhhcyhlKSlyZXR1cm4gcjtmb3Ioci5zZXQoZSxudWxsKSxuPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSksaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKCEoYVthdF18fGFbUWVdfHxlPT09YGxpbmtgJiZhLmdldEF0dHJpYnV0ZShgcmVsYCk9PT1gc3R5bGVzaGVldGApJiZhLm5hbWVzcGFjZVVSSSE9PWBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2Ape3ZhciBvPWEuZ2V0QXR0cmlidXRlKHQpfHxgYDtvPWUrbzt2YXIgcz1yLmdldChvKTtzP3MucHVzaChhKTpyLnNldChvLFthXSl9fXJldHVybiByfWZ1bmN0aW9uIEdmKGUsdCxuKXtlPWUub3duZXJEb2N1bWVudHx8ZSxlLmhlYWQuaW5zZXJ0QmVmb3JlKG4sdD09PWB0aXRsZWA/ZS5xdWVyeVNlbGVjdG9yKGBoZWFkID4gdGl0bGVgKTpudWxsKX1mdW5jdGlvbiBLZihlLHQsbil7aWYobj09PTF8fHQuaXRlbVByb3AhPW51bGwpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2VgbWV0YWA6Y2FzZWB0aXRsZWA6cmV0dXJuITA7Y2FzZWBzdHlsZWA6aWYodHlwZW9mIHQucHJlY2VkZW5jZSE9YHN0cmluZ2B8fHR5cGVvZiB0LmhyZWYhPWBzdHJpbmdgfHx0LmhyZWY9PT1gYClicmVhaztyZXR1cm4hMDtjYXNlYGxpbmtgOmlmKHR5cGVvZiB0LnJlbCE9YHN0cmluZ2B8fHR5cGVvZiB0LmhyZWYhPWBzdHJpbmdgfHx0LmhyZWY9PT1gYHx8dC5vbkxvYWR8fHQub25FcnJvcilicmVhaztzd2l0Y2godC5yZWwpe2Nhc2Vgc3R5bGVzaGVldGA6cmV0dXJuIGU9dC5kaXNhYmxlZCx0eXBlb2YgdC5wcmVjZWRlbmNlPT1gc3RyaW5nYCYmZT09bnVsbDtkZWZhdWx0OnJldHVybiEwfWNhc2Vgc2NyaXB0YDppZih0LmFzeW5jJiZ0eXBlb2YgdC5hc3luYyE9YGZ1bmN0aW9uYCYmdHlwZW9mIHQuYXN5bmMhPWBzeW1ib2xgJiYhdC5vbkxvYWQmJiF0Lm9uRXJyb3ImJnQuc3JjJiZ0eXBlb2YgdC5zcmM9PWBzdHJpbmdgKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHFmKGUpe3JldHVybiEoZS50eXBlPT09YHN0eWxlc2hlZXRgJiYhKGUuc3RhdGUubG9hZGluZyYzKSl9ZnVuY3Rpb24gSmYoZSx0LG4scil7aWYobi50eXBlPT09YHN0eWxlc2hlZXRgJiYodHlwZW9mIHIubWVkaWEhPWBzdHJpbmdgfHwhMSE9PW1hdGNoTWVkaWEoci5tZWRpYSkubWF0Y2hlcykmJiEobi5zdGF0ZS5sb2FkaW5nJjQpKXtpZihuLmluc3RhbmNlPT09bnVsbCl7dmFyIGk9TmYoci5ocmVmKSxhPXQucXVlcnlTZWxlY3RvcihQZihpKSk7aWYoYSl7dD1hLl9wLHR5cGVvZiB0PT1gb2JqZWN0YCYmdCYmdHlwZW9mIHQudGhlbj09YGZ1bmN0aW9uYCYmKGUuY291bnQrKyxlPVpmLmJpbmQoZSksdC50aGVuKGUsZSkpLG4uc3RhdGUubG9hZGluZ3w9NCxuLmluc3RhbmNlPWEsZHQoYSk7cmV0dXJufWE9dC5vd25lckRvY3VtZW50fHx0LHI9RmYociksKGk9X2YuZ2V0KGkpKSYmVmYocixpKSxhPWEuY3JlYXRlRWxlbWVudChgbGlua2ApLGR0KGEpO3ZhciBvPWE7by5fcD1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe28ub25sb2FkPWUsby5vbmVycm9yPXR9KSxSZChhLGBsaW5rYCxyKSxuLmluc3RhbmNlPWF9ZS5zdHlsZXNoZWV0cz09PW51bGwmJihlLnN0eWxlc2hlZXRzPW5ldyBNYXApLGUuc3R5bGVzaGVldHMuc2V0KG4sdCksKHQ9bi5zdGF0ZS5wcmVsb2FkKSYmIShuLnN0YXRlLmxvYWRpbmcmMykmJihlLmNvdW50Kyssbj1aZi5iaW5kKGUpLHQuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsbiksdC5hZGRFdmVudExpc3RlbmVyKGBlcnJvcmAsbikpfX12YXIgWWY9MDtmdW5jdGlvbiBYZihlLHQpe3JldHVybiBlLnN0eWxlc2hlZXRzJiZlLmNvdW50PT09MCYmJGYoZSxlLnN0eWxlc2hlZXRzKSwwPGUuY291bnR8fDA8ZS5pbWdDb3VudD9mdW5jdGlvbihuKXt2YXIgcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZS5zdHlsZXNoZWV0cyYmJGYoZSxlLnN0eWxlc2hlZXRzKSxlLnVuc3VzcGVuZCl7dmFyIHQ9ZS51bnN1c3BlbmQ7ZS51bnN1c3BlbmQ9bnVsbCx0KCl9fSw2ZTQrdCk7MDxlLmltZ0J5dGVzJiZZZj09PTAmJihZZj02MjUwMCpWZCgpKTt2YXIgaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZS53YWl0aW5nRm9ySW1hZ2VzPSExLGUuY291bnQ9PT0wJiYoZS5zdHlsZXNoZWV0cyYmJGYoZSxlLnN0eWxlc2hlZXRzKSxlLnVuc3VzcGVuZCkpe3ZhciB0PWUudW5zdXNwZW5kO2UudW5zdXNwZW5kPW51bGwsdCgpfX0sKGUuaW1nQnl0ZXM+WWY/NTA6ODAwKSt0KTtyZXR1cm4gZS51bnN1c3BlbmQ9bixmdW5jdGlvbigpe2UudW5zdXNwZW5kPW51bGwsY2xlYXJUaW1lb3V0KHIpLGNsZWFyVGltZW91dChpKX19Om51bGx9ZnVuY3Rpb24gWmYoKXtpZih0aGlzLmNvdW50LS0sdGhpcy5jb3VudD09PTAmJih0aGlzLmltZ0NvdW50PT09MHx8IXRoaXMud2FpdGluZ0ZvckltYWdlcykpe2lmKHRoaXMuc3R5bGVzaGVldHMpJGYodGhpcyx0aGlzLnN0eWxlc2hlZXRzKTtlbHNlIGlmKHRoaXMudW5zdXNwZW5kKXt2YXIgZT10aGlzLnVuc3VzcGVuZDt0aGlzLnVuc3VzcGVuZD1udWxsLGUoKX19fXZhciBRZj1udWxsO2Z1bmN0aW9uICRmKGUsdCl7ZS5zdHlsZXNoZWV0cz1udWxsLGUudW5zdXNwZW5kIT09bnVsbCYmKGUuY291bnQrKyxRZj1uZXcgTWFwLHQuZm9yRWFjaChlcCxlKSxRZj1udWxsLFpmLmNhbGwoZSkpfWZ1bmN0aW9uIGVwKGUsdCl7aWYoISh0LnN0YXRlLmxvYWRpbmcmNCkpe3ZhciBuPVFmLmdldChlKTtpZihuKXZhciByPW4uZ2V0KG51bGwpO2Vsc2V7bj1uZXcgTWFwLFFmLnNldChlLG4pO2Zvcih2YXIgaT1lLnF1ZXJ5U2VsZWN0b3JBbGwoYGxpbmtbZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdYCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyhvLm5vZGVOYW1lPT09YExJTktgfHxvLmdldEF0dHJpYnV0ZShgbWVkaWFgKSE9PWBub3QgYWxsYCkmJihuLnNldChvLmRhdGFzZXQucHJlY2VkZW5jZSxvKSxyPW8pfXImJm4uc2V0KG51bGwscil9aT10Lmluc3RhbmNlLG89aS5nZXRBdHRyaWJ1dGUoYGRhdGEtcHJlY2VkZW5jZWApLGE9bi5nZXQobyl8fHIsYT09PXImJm4uc2V0KG51bGwsaSksbi5zZXQobyxpKSx0aGlzLmNvdW50Kysscj1aZi5iaW5kKHRoaXMpLGkuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsciksaS5hZGRFdmVudExpc3RlbmVyKGBlcnJvcmAsciksYT9hLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYS5uZXh0U2libGluZyk6KGU9ZS5ub2RlVHlwZT09PTk/ZS5oZWFkOmUsZS5pbnNlcnRCZWZvcmUoaSxlLmZpcnN0Q2hpbGQpKSx0LnN0YXRlLmxvYWRpbmd8PTR9fXZhciB0cD17JCR0eXBlb2Y6QyxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2N1cnJlbnRWYWx1ZTpSLF9jdXJyZW50VmFsdWUyOlIsX3RocmVhZENvdW50OjB9O2Z1bmN0aW9uIG5wKGUsdCxuLHIsaSxhLG8scyxjKXt0aGlzLnRhZz0xLHRoaXMuY29udGFpbmVySW5mbz1lLHRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsLHRoaXMudGltZW91dEhhbmRsZT0tMSx0aGlzLmNhbGxiYWNrTm9kZT10aGlzLm5leHQ9dGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9dGhpcy5jYW5jZWxQZW5kaW5nQ29tbWl0PW51bGwsdGhpcy5jYWxsYmFja1ByaW9yaXR5PTAsdGhpcy5leHBpcmF0aW9uVGltZXM9VmUoLTEpLHRoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5zaGVsbFN1c3BlbmRDb3VudGVyPXRoaXMuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy53YXJtTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTAsdGhpcy5lbnRhbmdsZW1lbnRzPVZlKDApLHRoaXMuaGlkZGVuVXBkYXRlcz1WZShudWxsKSx0aGlzLmlkZW50aWZpZXJQcmVmaXg9cix0aGlzLm9uVW5jYXVnaHRFcnJvcj1pLHRoaXMub25DYXVnaHRFcnJvcj1hLHRoaXMub25SZWNvdmVyYWJsZUVycm9yPW8sdGhpcy5wb29sZWRDYWNoZT1udWxsLHRoaXMucG9vbGVkQ2FjaGVMYW5lcz0wLHRoaXMuZm9ybVN0YXRlPWMsdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnM9bmV3IE1hcH1mdW5jdGlvbiBycChlLHQsbixyLGksYSxvLHMsYyxsLHUsZCl7cmV0dXJuIGU9bmV3IG5wKGUsdCxuLG8sYyxsLHUsZCxzKSx0PTEsITA9PT1hJiYodHw9MjQpLGE9JHIoMyxudWxsLG51bGwsdCksZS5jdXJyZW50PWEsYS5zdGF0ZU5vZGU9ZSx0PWVhKCksdC5yZWZDb3VudCsrLGUucG9vbGVkQ2FjaGU9dCx0LnJlZkNvdW50KyssYS5tZW1vaXplZFN0YXRlPXtlbGVtZW50OnIsaXNEZWh5ZHJhdGVkOm4sY2FjaGU6dH0sTWEoYSksZX1mdW5jdGlvbiBpcChlKXtyZXR1cm4gZT8oZT1acixlKTpacn1mdW5jdGlvbiBhcChlLHQsbixyLGksYSl7aT1pcChpKSxyLmNvbnRleHQ9PT1udWxsP3IuY29udGV4dD1pOnIucGVuZGluZ0NvbnRleHQ9aSxyPVBhKHQpLHIucGF5bG9hZD17ZWxlbWVudDpufSxhPWE9PT12b2lkIDA/bnVsbDphLGEhPT1udWxsJiYoci5jYWxsYmFjaz1hKSxuPUZhKGUscix0KSxuIT09bnVsbCYmKGd1KG4sZSx0KSxJYShuLGUsdCkpfWZ1bmN0aW9uIG9wKGUsdCl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe3ZhciBuPWUucmV0cnlMYW5lO2UucmV0cnlMYW5lPW4hPT0wJiZuPHQ/bjp0fX1mdW5jdGlvbiBzcChlLHQpe29wKGUsdCksKGU9ZS5hbHRlcm5hdGUpJiZvcChlLHQpfWZ1bmN0aW9uIGNwKGUpe2lmKGUudGFnPT09MTN8fGUudGFnPT09MzEpe3ZhciB0PUpyKGUsNjcxMDg4NjQpO3QhPT1udWxsJiZndSh0LGUsNjcxMDg4NjQpLHNwKGUsNjcxMDg4NjQpfX1mdW5jdGlvbiBscChlKXtpZihlLnRhZz09PTEzfHxlLnRhZz09PTMxKXt2YXIgdD1tdSgpO3Q9cWUodCk7dmFyIG49SnIoZSx0KTtuIT09bnVsbCYmZ3UobixlLHQpLHNwKGUsdCl9fXZhciB1cD0hMDtmdW5jdGlvbiBkcChlLHQsbixyKXt2YXIgaT1JLlQ7SS5UPW51bGw7dmFyIGE9TC5wO3RyeXtMLnA9MixwcChlLHQsbixyKX1maW5hbGx5e0wucD1hLEkuVD1pfX1mdW5jdGlvbiBmcChlLHQsbixyKXt2YXIgaT1JLlQ7SS5UPW51bGw7dmFyIGE9TC5wO3RyeXtMLnA9OCxwcChlLHQsbixyKX1maW5hbGx5e0wucD1hLEkuVD1pfX1mdW5jdGlvbiBwcChlLHQsbixyKXtpZih1cCl7dmFyIGk9bXAocik7aWYoaT09PW51bGwpRGQoZSx0LHIsaHAsbiksRXAoZSxyKTtlbHNlIGlmKE9wKGksZSx0LG4scikpci5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKEVwKGUsciksdCY0JiYtMTxUcC5pbmRleE9mKGUpKXtmb3IoO2khPT1udWxsOyl7dmFyIGE9Y3QoaSk7aWYoYSE9PW51bGwpc3dpdGNoKGEudGFnKXtjYXNlIDM6aWYoYT1hLnN0YXRlTm9kZSxhLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3ZhciBvPUllKGEucGVuZGluZ0xhbmVzKTtpZihvIT09MCl7dmFyIHM9YTtmb3Iocy5wZW5kaW5nTGFuZXN8PTIscy5lbnRhbmdsZWRMYW5lc3w9MjtvOyl7dmFyIGM9MTw8MzEta2Uobyk7cy5lbnRhbmdsZW1lbnRzWzFdfD1jLG8mPX5jfWFkKGEpLCEoRmwmNikmJihudT1fZSgpKzUwMCxvZCgwLCExKSl9fWJyZWFrO2Nhc2UgMzE6Y2FzZSAxMzpzPUpyKGEsMikscyE9PW51bGwmJmd1KHMsYSwyKSx4dSgpLHNwKGEsMil9aWYoYT1tcChyKSxhPT09bnVsbCYmRGQoZSx0LHIsaHAsbiksYT09PWkpYnJlYWs7aT1hfWkhPT1udWxsJiZyLnN0b3BQcm9wYWdhdGlvbigpfWVsc2UgRGQoZSx0LHIsbnVsbCxuKX19ZnVuY3Rpb24gbXAoZSl7cmV0dXJuIGU9cXQoZSksZ3AoZSl9dmFyIGhwPW51bGw7ZnVuY3Rpb24gZ3AoZSl7aWYoaHA9bnVsbCxlPXN0KGUpLGUhPT1udWxsKXt2YXIgdD1vKGUpO2lmKHQ9PT1udWxsKWU9bnVsbDtlbHNle3ZhciBuPXQudGFnO2lmKG49PT0xMyl7aWYoZT1zKHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zMSl7aWYoZT1jKHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zKXtpZih0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiB0LnRhZz09PTM/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIHQhPT1lJiYoZT1udWxsKX19cmV0dXJuIGhwPWUsbnVsbH1mdW5jdGlvbiBfcChlKXtzd2l0Y2goZSl7Y2FzZWBiZWZvcmV0b2dnbGVgOmNhc2VgY2FuY2VsYDpjYXNlYGNsaWNrYDpjYXNlYGNsb3NlYDpjYXNlYGNvbnRleHRtZW51YDpjYXNlYGNvcHlgOmNhc2VgY3V0YDpjYXNlYGF1eGNsaWNrYDpjYXNlYGRibGNsaWNrYDpjYXNlYGRyYWdlbmRgOmNhc2VgZHJhZ3N0YXJ0YDpjYXNlYGRyb3BgOmNhc2VgZm9jdXNpbmA6Y2FzZWBmb2N1c291dGA6Y2FzZWBpbnB1dGA6Y2FzZWBpbnZhbGlkYDpjYXNlYGtleWRvd25gOmNhc2Vga2V5cHJlc3NgOmNhc2Vga2V5dXBgOmNhc2VgbW91c2Vkb3duYDpjYXNlYG1vdXNldXBgOmNhc2VgcGFzdGVgOmNhc2VgcGF1c2VgOmNhc2VgcGxheWA6Y2FzZWBwb2ludGVyY2FuY2VsYDpjYXNlYHBvaW50ZXJkb3duYDpjYXNlYHBvaW50ZXJ1cGA6Y2FzZWByYXRlY2hhbmdlYDpjYXNlYHJlc2V0YDpjYXNlYHJlc2l6ZWA6Y2FzZWBzZWVrZWRgOmNhc2Vgc3VibWl0YDpjYXNlYHRvZ2dsZWA6Y2FzZWB0b3VjaGNhbmNlbGA6Y2FzZWB0b3VjaGVuZGA6Y2FzZWB0b3VjaHN0YXJ0YDpjYXNlYHZvbHVtZWNoYW5nZWA6Y2FzZWBjaGFuZ2VgOmNhc2Vgc2VsZWN0aW9uY2hhbmdlYDpjYXNlYHRleHRJbnB1dGA6Y2FzZWBjb21wb3NpdGlvbnN0YXJ0YDpjYXNlYGNvbXBvc2l0aW9uZW5kYDpjYXNlYGNvbXBvc2l0aW9udXBkYXRlYDpjYXNlYGJlZm9yZWJsdXJgOmNhc2VgYWZ0ZXJibHVyYDpjYXNlYGJlZm9yZWlucHV0YDpjYXNlYGJsdXJgOmNhc2VgZnVsbHNjcmVlbmNoYW5nZWA6Y2FzZWBmb2N1c2A6Y2FzZWBoYXNoY2hhbmdlYDpjYXNlYHBvcHN0YXRlYDpjYXNlYHNlbGVjdGA6Y2FzZWBzZWxlY3RzdGFydGA6cmV0dXJuIDI7Y2FzZWBkcmFnYDpjYXNlYGRyYWdlbnRlcmA6Y2FzZWBkcmFnZXhpdGA6Y2FzZWBkcmFnbGVhdmVgOmNhc2VgZHJhZ292ZXJgOmNhc2VgbW91c2Vtb3ZlYDpjYXNlYG1vdXNlb3V0YDpjYXNlYG1vdXNlb3ZlcmA6Y2FzZWBwb2ludGVybW92ZWA6Y2FzZWBwb2ludGVyb3V0YDpjYXNlYHBvaW50ZXJvdmVyYDpjYXNlYHNjcm9sbGA6Y2FzZWB0b3VjaG1vdmVgOmNhc2Vgd2hlZWxgOmNhc2VgbW91c2VlbnRlcmA6Y2FzZWBtb3VzZWxlYXZlYDpjYXNlYHBvaW50ZXJlbnRlcmA6Y2FzZWBwb2ludGVybGVhdmVgOnJldHVybiA4O2Nhc2VgbWVzc2FnZWA6c3dpdGNoKHZlKCkpe2Nhc2UgeWU6cmV0dXJuIDI7Y2FzZSBiZTpyZXR1cm4gODtjYXNlIHhlOmNhc2UgU2U6cmV0dXJuIDMyO2Nhc2UgQ2U6cmV0dXJuIDI2ODQzNTQ1NjtkZWZhdWx0OnJldHVybiAzMn1kZWZhdWx0OnJldHVybiAzMn19dmFyIHZwPSExLHlwPW51bGwsYnA9bnVsbCx4cD1udWxsLFNwPW5ldyBNYXAsQ3A9bmV3IE1hcCx3cD1bXSxUcD1gbW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0YC5zcGxpdChgIGApO2Z1bmN0aW9uIEVwKGUsdCl7c3dpdGNoKGUpe2Nhc2VgZm9jdXNpbmA6Y2FzZWBmb2N1c291dGA6eXA9bnVsbDticmVhaztjYXNlYGRyYWdlbnRlcmA6Y2FzZWBkcmFnbGVhdmVgOmJwPW51bGw7YnJlYWs7Y2FzZWBtb3VzZW92ZXJgOmNhc2VgbW91c2VvdXRgOnhwPW51bGw7YnJlYWs7Y2FzZWBwb2ludGVyb3ZlcmA6Y2FzZWBwb2ludGVyb3V0YDpTcC5kZWxldGUodC5wb2ludGVySWQpO2JyZWFrO2Nhc2VgZ290cG9pbnRlcmNhcHR1cmVgOmNhc2VgbG9zdHBvaW50ZXJjYXB0dXJlYDpDcC5kZWxldGUodC5wb2ludGVySWQpfX1mdW5jdGlvbiBEcChlLHQsbixyLGksYSl7cmV0dXJuIGU9PT1udWxsfHxlLm5hdGl2ZUV2ZW50IT09YT8oZT17YmxvY2tlZE9uOnQsZG9tRXZlbnROYW1lOm4sZXZlbnRTeXN0ZW1GbGFnczpyLG5hdGl2ZUV2ZW50OmEsdGFyZ2V0Q29udGFpbmVyczpbaV19LHQhPT1udWxsJiYodD1jdCh0KSx0IT09bnVsbCYmY3AodCkpLGUpOihlLmV2ZW50U3lzdGVtRmxhZ3N8PXIsdD1lLnRhcmdldENvbnRhaW5lcnMsaSE9PW51bGwmJnQuaW5kZXhPZihpKT09PS0xJiZ0LnB1c2goaSksZSl9ZnVuY3Rpb24gT3AoZSx0LG4scixpKXtzd2l0Y2godCl7Y2FzZWBmb2N1c2luYDpyZXR1cm4geXA9RHAoeXAsZSx0LG4scixpKSwhMDtjYXNlYGRyYWdlbnRlcmA6cmV0dXJuIGJwPURwKGJwLGUsdCxuLHIsaSksITA7Y2FzZWBtb3VzZW92ZXJgOnJldHVybiB4cD1EcCh4cCxlLHQsbixyLGkpLCEwO2Nhc2VgcG9pbnRlcm92ZXJgOnZhciBhPWkucG9pbnRlcklkO3JldHVybiBTcC5zZXQoYSxEcChTcC5nZXQoYSl8fG51bGwsZSx0LG4scixpKSksITA7Y2FzZWBnb3Rwb2ludGVyY2FwdHVyZWA6cmV0dXJuIGE9aS5wb2ludGVySWQsQ3Auc2V0KGEsRHAoQ3AuZ2V0KGEpfHxudWxsLGUsdCxuLHIsaSkpLCEwfXJldHVybiExfWZ1bmN0aW9uIGtwKGUpe3ZhciB0PXN0KGUudGFyZ2V0KTtpZih0IT09bnVsbCl7dmFyIG49byh0KTtpZihuIT09bnVsbCl7aWYodD1uLnRhZyx0PT09MTMpe2lmKHQ9cyhuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCxYZShlLnByaW9yaXR5LGZ1bmN0aW9uKCl7bHAobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMxKXtpZih0PWMobiksdCE9PW51bGwpe2UuYmxvY2tlZE9uPXQsWGUoZS5wcmlvcml0eSxmdW5jdGlvbigpe2xwKG4pfSk7cmV0dXJufX1lbHNlIGlmKHQ9PT0zJiZuLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXtlLmJsb2NrZWRPbj1uLnRhZz09PTM/bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19fWUuYmxvY2tlZE9uPW51bGx9ZnVuY3Rpb24gQXAoZSl7aWYoZS5ibG9ja2VkT24hPT1udWxsKXJldHVybiExO2Zvcih2YXIgdD1lLnRhcmdldENvbnRhaW5lcnM7MDx0Lmxlbmd0aDspe3ZhciBuPW1wKGUubmF0aXZlRXZlbnQpO2lmKG49PT1udWxsKXtuPWUubmF0aXZlRXZlbnQ7dmFyIHI9bmV3IG4uY29uc3RydWN0b3Iobi50eXBlLG4pO0t0PXIsbi50YXJnZXQuZGlzcGF0Y2hFdmVudChyKSxLdD1udWxsfWVsc2UgcmV0dXJuIHQ9Y3QobiksdCE9PW51bGwmJmNwKHQpLGUuYmxvY2tlZE9uPW4sITE7dC5zaGlmdCgpfXJldHVybiEwfWZ1bmN0aW9uIGpwKGUsdCxuKXtBcChlKSYmbi5kZWxldGUodCl9ZnVuY3Rpb24gTXAoKXt2cD0hMSx5cCE9PW51bGwmJkFwKHlwKSYmKHlwPW51bGwpLGJwIT09bnVsbCYmQXAoYnApJiYoYnA9bnVsbCkseHAhPT1udWxsJiZBcCh4cCkmJih4cD1udWxsKSxTcC5mb3JFYWNoKGpwKSxDcC5mb3JFYWNoKGpwKX1mdW5jdGlvbiBOcChlLG4pe2UuYmxvY2tlZE9uPT09biYmKGUuYmxvY2tlZE9uPW51bGwsdnB8fCh2cD0hMCx0LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sodC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxNcCkpKX12YXIgUHA9bnVsbDtmdW5jdGlvbiBGcChlKXtQcCE9PWUmJihQcD1lLHQudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayh0LnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGZ1bmN0aW9uKCl7UHA9PT1lJiYoUHA9bnVsbCk7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kz0zKXt2YXIgbj1lW3RdLHI9ZVt0KzFdLGk9ZVt0KzJdO2lmKHR5cGVvZiByIT1gZnVuY3Rpb25gKXtpZihncChyfHxuKT09PW51bGwpY29udGludWU7YnJlYWt9dmFyIGE9Y3Qobik7YSE9PW51bGwmJihlLnNwbGljZSh0LDMpLHQtPTMseXMoYSx7cGVuZGluZzohMCxkYXRhOmksbWV0aG9kOm4ubWV0aG9kLGFjdGlvbjpyfSxyLGkpKX19KSl9ZnVuY3Rpb24gSXAoZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gTnAodCxlKX15cCE9PW51bGwmJk5wKHlwLGUpLGJwIT09bnVsbCYmTnAoYnAsZSkseHAhPT1udWxsJiZOcCh4cCxlKSxTcC5mb3JFYWNoKHQpLENwLmZvckVhY2godCk7Zm9yKHZhciBuPTA7bjx3cC5sZW5ndGg7bisrKXt2YXIgcj13cFtuXTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX1mb3IoOzA8d3AubGVuZ3RoJiYobj13cFswXSxuLmJsb2NrZWRPbj09PW51bGwpOylrcChuKSxuLmJsb2NrZWRPbj09PW51bGwmJndwLnNoaWZ0KCk7aWYobj0oZS5vd25lckRvY3VtZW50fHxlKS4kJHJlYWN0Rm9ybVJlcGxheSxuIT1udWxsKWZvcihyPTA7cjxuLmxlbmd0aDtyKz0zKXt2YXIgaT1uW3JdLGE9bltyKzFdLG89aVskZV18fG51bGw7aWYodHlwZW9mIGE9PWBmdW5jdGlvbmApb3x8RnAobik7ZWxzZSBpZihvKXt2YXIgcz1udWxsO2lmKGEmJmEuaGFzQXR0cmlidXRlKGBmb3JtQWN0aW9uYCkpe2lmKGk9YSxvPWFbJGVdfHxudWxsKXM9by5mb3JtQWN0aW9uO2Vsc2UgaWYoZ3AoaSkhPT1udWxsKWNvbnRpbnVlfWVsc2Ugcz1vLmFjdGlvbjt0eXBlb2Ygcz09YGZ1bmN0aW9uYD9uW3IrMV09czoobi5zcGxpY2UociwzKSxyLT0zKSxGcChuKX19fWZ1bmN0aW9uIExwKCl7ZnVuY3Rpb24gZShlKXtlLmNhbkludGVyY2VwdCYmZS5pbmZvPT09YHJlYWN0LXRyYW5zaXRpb25gJiZlLmludGVyY2VwdCh7aGFuZGxlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtyZXR1cm4gaT1lfSl9LGZvY3VzUmVzZXQ6YG1hbnVhbGAsc2Nyb2xsOmBtYW51YWxgfSl9ZnVuY3Rpb24gdCgpe2khPT1udWxsJiYoaSgpLGk9bnVsbCkscnx8c2V0VGltZW91dChuLDIwKX1mdW5jdGlvbiBuKCl7aWYoIXImJiFuYXZpZ2F0aW9uLnRyYW5zaXRpb24pe3ZhciBlPW5hdmlnYXRpb24uY3VycmVudEVudHJ5O2UmJmUudXJsIT1udWxsJiZuYXZpZ2F0aW9uLm5hdmlnYXRlKGUudXJsLHtzdGF0ZTplLmdldFN0YXRlKCksaW5mbzpgcmVhY3QtdHJhbnNpdGlvbmAsaGlzdG9yeTpgcmVwbGFjZWB9KX19aWYodHlwZW9mIG5hdmlnYXRpb249PWBvYmplY3RgKXt2YXIgcj0hMSxpPW51bGw7cmV0dXJuIG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihgbmF2aWdhdGVgLGUpLG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihgbmF2aWdhdGVzdWNjZXNzYCx0KSxuYXZpZ2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoYG5hdmlnYXRlZXJyb3JgLHQpLHNldFRpbWVvdXQobiwxMDApLGZ1bmN0aW9uKCl7cj0hMCxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYG5hdmlnYXRlYCxlKSxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYG5hdmlnYXRlc3VjY2Vzc2AsdCksbmF2aWdhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKGBuYXZpZ2F0ZWVycm9yYCx0KSxpIT09bnVsbCYmKGkoKSxpPW51bGwpfX19ZnVuY3Rpb24gUnAoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9enAucHJvdG90eXBlLnJlbmRlcj1ScC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVybmFsUm9vdDtpZih0PT09bnVsbCl0aHJvdyBFcnJvcihpKDQwOSkpO3ZhciBuPXQuY3VycmVudDthcChuLG11KCksZSx0LG51bGwsbnVsbCl9LHpwLnByb3RvdHlwZS51bm1vdW50PVJwLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKGUhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1lLmNvbnRhaW5lckluZm87YXAoZS5jdXJyZW50LDIsbnVsbCxlLG51bGwsbnVsbCkseHUoKSx0W2V0XT1udWxsfX07ZnVuY3Rpb24genAoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9enAucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PVllKCk7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjx3cC5sZW5ndGgmJnQhPT0wJiZ0PHdwW25dLnByaW9yaXR5O24rKyk7d3Auc3BsaWNlKG4sMCxlKSxuPT09MCYma3AoZSl9fTt2YXIgQnA9bi52ZXJzaW9uO2lmKEJwIT09YDE5LjIuNmApdGhyb3cgRXJyb3IoaSg1MjcsQnAsYDE5LjIuNmApKTtMLmZpbmRET01Ob2RlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX3JlYWN0SW50ZXJuYWxzO2lmKHQ9PT12b2lkIDApdGhyb3cgdHlwZW9mIGUucmVuZGVyPT1gZnVuY3Rpb25gP0Vycm9yKGkoMTg4KSk6KGU9T2JqZWN0LmtleXMoZSkuam9pbihgLGApLEVycm9yKGkoMjY4LGUpKSk7cmV0dXJuIGU9dSh0KSxlPWU9PT1udWxsP251bGw6ZChlKSxlPWU9PT1udWxsP251bGw6ZS5zdGF0ZU5vZGUsZX07dmFyIFZwPXtidW5kbGVUeXBlOjAsdmVyc2lvbjpgMTkuMi42YCxyZW5kZXJlclBhY2thZ2VOYW1lOmByZWFjdC1kb21gLGN1cnJlbnREaXNwYXRjaGVyUmVmOkkscmVjb25jaWxlclZlcnNpb246YDE5LjIuNmB9O2lmKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX188YHVgKXt2YXIgSHA9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCFIcC5pc0Rpc2FibGVkJiZIcC5zdXBwb3J0c0ZpYmVyKXRyeXtFZT1IcC5pbmplY3QoVnApLERlPUhwfWNhdGNoe319ZS5jcmVhdGVSb290PWZ1bmN0aW9uKGUsdCl7aWYoIWEoZSkpdGhyb3cgRXJyb3IoaSgyOTkpKTt2YXIgbj0hMSxyPWBgLG89SHMscz1VcyxjPVdzO3JldHVybiB0IT1udWxsJiYoITA9PT10LnVuc3RhYmxlX3N0cmljdE1vZGUmJihuPSEwKSx0LmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihyPXQuaWRlbnRpZmllclByZWZpeCksdC5vblVuY2F1Z2h0RXJyb3IhPT12b2lkIDAmJihvPXQub25VbmNhdWdodEVycm9yKSx0Lm9uQ2F1Z2h0RXJyb3IhPT12b2lkIDAmJihzPXQub25DYXVnaHRFcnJvciksdC5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihjPXQub25SZWNvdmVyYWJsZUVycm9yKSksdD1ycChlLDEsITEsbnVsbCxudWxsLG4scixudWxsLG8scyxjLExwKSxlW2V0XT10LmN1cnJlbnQsVGQoZSksbmV3IFJwKHQpfX0pKSx2PXMoKChlLHQpPT57ZnVuY3Rpb24gbigpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz5gdWB8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPWBmdW5jdGlvbmApKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0Uobil9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19bigpLHQuZXhwb3J0cz1fKCl9KSkseT1mKCksYj12KCkseD1gMS4gRVNUSUxJU01PIFkgQkVMTEVaQTogQ1JFQSBUVSBQUk9QSU8gTkVHT0NJTygyLiBNT05UQSBUVSBORUdPQ0lPIERFIE1BUVVJTExBSkUgWSBFU1TDiVRJQ0EgUFJPRkVTSU9OQUwoMy4gRU1QUkVORElNSUVOVE8gRU4gVcORQVMgWSBNQU5JQ1VSQSBDUkVBVElWQSg0LiBCQVJCRVLDjUEgWSBQRUxVUVVFUsONQSBCw4FTSUNBKDUuIE1BUVVJTExBSkUgUFJPRkVTSU9OQUwgUEFSQSBFVkVOVE9TKDYuIENVSURBRE8gREUgTEEgUElFTCBZIFRSQVRBTUlFTlRPUyBFU1TDiVRJQ09TIELDgVNJQ09TKDcuIFTDiUNOSUNBUyBERSBNQU5JQ1VSQSBZIFXDkUFTIENSRUFUSVZBUyg4LiBURU5ERU5DSUFTIERFIE1BUVVJTExBSkUgWSBSRURFUyBTT0NJQUxFUyg5LiBNQU5JQ1VSQSBZIFBFRElDVVJBKDEwLiBNQVFVSUxMQUpFIFBST0ZFU0lPTkFMIFkgRVNUw4lUSUNBKDExLiBCSUVORVNUQVIgRkFDSUFMOiBMSU1QSUVaQVMgWSBNQVNDQVJJTExBUyBQUk9GRVNJT05BTEVTKDEyLiBQRUxVUVVFUsONQSBCw4FTSUNBOiBDT1JURSwgQ09MT1IgWSBQRUlOQURPKDEzLiBFTVBSRU5ERSBFTiBBVEVOQ0nDk04gQSBNQVlPUkVTIFkgUEVSU09OQVMgREVQRU5ESUVOVEVTKDE0LiBFTVBSRU5ERSBFTiBBVEVOQ0nDk04gRE9NSUNJTElBUklBKDE1LiBNT05UQSBUVSBORUdPQ0lPIEVOIEFURU5DScOTTiBJTkZBTlRJTCgxNi4gRU1QUkVOREUgQ09NTyBFTlRSRU5BRE9SIFBFUlNPTkFMKDE3LiDCv0VSRVMgTU9OSVRPUi9BPyBNT05UQSBUVSBORUdPQ0lPIERFIE9DSU8gWSBUSUVNUE8gTElCUkUoMTguIENSRUEgVFUgTkVHT0NJTyBERSBBUE9ZTyBFU0NPTEFSIFkgUkVGVUVSWk8gRURVQ0FUSVZPKDE5LiBFTVBSRU5ERSBPRlJFQ0lFTkRPIFRBTExFUkVTIENSRUFUSVZPUyBZIENVTFRVUkFMRVMoMjAuIFNPQ09SUklTTU8gWSBBTklNQUNJw5NOIEFDVcOBVElDQSgyMS4gTU9OSVRPUiBERSBBVUxBIE1BVElOQUwoMjIuIEFQT1lPIEVEVUNBVElWTyBZIEFDVElWSURBREVTIEVYVFJBRVNDT0xBUkVTKDIzLiBNT05JVE9SIFNUQVJMSUdIVCgyNC4gQVRFTkNJw5NOIELDgVNJQ0EgQSBQRVJTT05BUyBNQVlPUkVTIFkgREVQRU5ESUVOVEVTKDI1LiBWSUdJTEFOVEUgREUgU0VHVVJJREFEKDI2LiBFU0NPTFRBKDI3LiBNT05JVE9SIERFIE5BVEFDScOTTigyOC4gTU9OSVRPUiBERSBPQ0lPIFkgVElFTVBPIExJQlJFKDI5LiBESVJFQ1RPUiBERSBBQ1RJVklEQURFUyBERSBPQ0lPKDMwLiBHVcONQSBERSBPUklFTlRBQ0nDk04oMzEuIENVSURBRE9TIFBST0ZFU0lPTkFMRVMgRU4gQ0VOVFJPUyBSRVNJREVOQ0lBTEVTKDMyLiBNT05JVE9SIERFIENPTUVET1IgRVNDT0xBUigzMy4gQVRFTkNJw5NOIERPTUlDSUxJQVJJQSBBIFBFUlNPTkFTIE1BWU9SRVMgWSBERVBFTkRJRU5URVMoMzQuIE1PTklUT1IvQSBERSBBVUxBIE1BVElOQUwgWSBBQ1RJVklEQURFUyBDT01QTEVNRU5UQVJJQVMoMzUuIEFDT01QQcORQU1JRU5UTyBBIFBFUlNPTkFTIE1BWU9SRVMgWSBERVBFTkRJRU5URVMoMzYuIEhBWiBERUwgUEFOIFRVIE5FR09DSU86IEVNUFJFTkRJTUlFTlRPIEVOIFBBTkFERVLDjUEgQVJURVNBTkFMKDM3LiBTQUJPUkVTIERFIExBIFRJRVJSQTogQ1JFQSBUVSBORUdPQ0lPIERFIENPQ0lOQSBUUkFESUNJT05BTCgzOC4gQ1JFQSBUVSBORUdPQ0lPIERFIFRVUklTTU8gUlVSQUwgUkVOVEFCTEUoMzkuIEVNUFJFTkRFIENPTiBUVSBORUdPQ0lPIERFIFJVVEFTIFkgVklTSVRBUyBMT0NBTEVTKDQwLiBFTVBSRU5ESU1JRU5UTyBFTiBUVVJJU01PIFkgRUNPVFVSSVNNTyBBQ1RJVk8oNDEuIE1PTlRBIFRVIENBRkVURVLDjUEgTyBCQVIgTE9DQUwgQ09OIMOJWElUTyg0Mi4gQ1JFQSBUVSBORUdPQ0lPIERFIFJFUE9TVEVSw41BIEFSVEVTQU5BTCg0My4gT1JHQU5JWkFDScOTTiBERSBFVkVOVE9TOiBFTVBSRU5ERSBFTiBDRUxFQlJBQ0lPTkVTIFkgRklFU1RBUyg0NC4gQ1JFQSBUVSBORUdPQ0lPIERFIENBVEVSSU5HKDQ1LiBFTVBSRU5ESU1JRU5UTyBFTiBTVU1JTExFUsONQSg0Ni4gQ09DSU5BIELDgVNJQ0EgUFJPRkVTSU9OQUwoNDcuIFBBTkFERVLDjUEgQVJURVNBTkFMIELDgVNJQ0EoNDguIFJFUE9TVEVSw41BIEFSVEVTQU5BTCBZIENSRUFUSVZBKDQ5LiBDQU1BUkVSTzogU0VSVklDSU8gRU4gQkFSUkEgWSBTQUxBKDUwLiBCQVJJU1RBIFBST0ZFU0lPTkFMOiBDQUbDiVMgRSBJTkZVU0lPTkVTKDUxLiBTT01NRUxJRVIoNTIuIElOR0zDiVMgUEFSQSBIT1NURUxFUsONQSBZIEFURU5DScOTTiBBTCBDTElFTlRFKDUzLiBHVcONQSBUVVLDjVNUSUNBIFJVUkFMKDU1LiBHT0JFUk5BTlRBL0UgREUgQUxPSkFNSUVOVE9TKDU2LiBDQU1BUkVSQS9PIERFIFBJU09TKDU3LiBCVUZGRVQgWSBCQU5RVUVURVM6IE1PTlRBSkUgWSBSRVBPU0lDScOTTig1OC4gUkVDRVBDSU9OSVNUQSBFTiBBTE9KQU1JRU5UT1MgVFVSw41TVElDT1MoNTkuIEhFUlJBTUlFTlRBUyBESUdJVEFMRVMgUEFSQSBFTCBDT01FUkNJTyBZIExBIEhPU1RFTEVSw41BKDYwLiBFTkNBTlRPIFJVUkFMOiBBVEVOQ0nDk04gQUwgQ0xJRU5URSBFTiBFTlRPUk5PUyBUVVLDjVNUSUNPUyg2MS4gRU1QUkVOREUgRU4gVU4gU0VSVklDSU8gREUgJ01BTklUQVMnKDYyLiBDT05TVFJVWUUgVFUgTkVHT0NJTzogQUxCQcORSUxFUsONQSBCw4FTSUNBIERFIFZJVklFTkRBUyg2My4gTkVHT0NJTyBERSBDQVJQSU5URVLDjUEgUFLDgUNUSUNBOiBBUlJFR0xPUyBZIE1VRUJMRVMgU0VOQ0lMTE9TKDY0LiBQSU5UVVJBIFkgREVDT1JBQ0nDk04gREUgSU5URVJJT1JFUyBDT01PIE5FR09DSU8oNjUuIEVNUFJFTkRFIEVOIExPR8ONU1RJQ0E6IERFTCBBTE1BQ8OJTiBBTCBDTElFTlRFKDY2LiBGT05UQU5FUsONQSBCw4FTSUNBLCBVTkEgT1BPUlRVTklEQUQgREUgTkVHT0NJTyg2Ny4gTU9OVEEgVFUgTkVHT0NJTyBERSBMSU1QSUVaQSBZIE1BTlRFTklNSUVOVE8gREUgUExBQ0FTIFNPTEFSRVMoNjguIElOSUNJQSBUVSBORUdPQ0lPIERFIExJTVBJRVpBIFBST0ZFU0lPTkFMKDY5LiBTRVJWSUNJT1MgSU5URUdSQUxFUyBERSBMSU1QSUVaQSg3MC4gSEFaIERFIExBIEZPTlRBTkVSw41BIFRVIE9GSUNJTyg3MS4gTElNUElFWkEgRU4gSU5TVEFMQUNJT05FUyBTT0xBUkVTIEZPVE9WT0xUQUlDQVMoNzIuIExJTVBJRVpBIEhPU1BJVEFMQVJJQSBZIENFTlRST1MgU0FOSVRBUklPUyg3My4gT1BFUkFSSU8gREUgTUFOVEVOSU1JRU5UTyBJTkRVU1RSSUFMIELDgVNJQ08oNzQuIElOU1RBTEFDSU9ORVMgWSBSRVBBUkFDSU9ORVMgREUgRk9OVEFORVLDjUEgQsOBU0lDQSg3NS4gQVlVREFOVEUgREUgTUFOVEVOSU1JRU5UTyBERSBFRElGSUNJT1MoNzYuIEdFU1RJw5NOIERFIFJFU0lEVU9TIFkgTElNUElFWkEgVklBUklBKDc3LiBQSU5UVVJBIFkgQUNBQkFET1MgQsOBU0lDT1MoNzguIElOU1RBTEFDSU9ORVMgRUzDiUNUUklDQVMgQsOBU0lDQVMgRU4gVklWSUVOREFTKDc5LiBBVVhJTElBUiBERSBQT1JURVLDjUEgWSBDT05UUk9MIERFIEFDQ0VTT1MoODAuIExJTVBJRVpBIElOVEVHUkFMIEVOIEVESUZJQ0lPUyg4MS4gQUxCQcORSUxFUsONQSBCw4FTSUNBIERFIFZJVklFTkRBUyBZIExPQ0FMRVMoODIuIENPTlZJw4lSVEVURSBFTiBVTiAnTUFOSVRBUycoODMuIElOSUNJQSBUVSBORUdPQ0lPIEVOIFJFU1RBVVJBQ0nDk04gWSBWRU5UQSBERSBNVUVCTEVTIEFOVElHVU9TKDg0LiBFTVBSRU5ERSBDT04gTEEgQ0VSw4FNSUNBOiBDUkVBIFBST0RVQ1RPUywgVEFMTEVSRVMgWSBFWFBFUklFTkNJQVMoODUuIENFU1RFUsONQSBDUkVBVElWQTogRU1QUkVOREUgQ09OIEZJQlJBUyBWRUdFVEFMRVMoODYuIE1PTlRBIFRVIE5FR09DSU8gREUgSk9ZRVLDjUEgQVJURVNBTkFMKDg3LiBDw5NNTyBFTVBSRU5ERVIgT05MSU5FIENPTiBUVVMgTUFOVUFMSURBREVTKDg4LiBISUxPUyBDT04gSURFTlRJREFEOiBFTVBSRU5ERSBFTiBCT1JEQURPUyBZIEVOQ0FKRVMgVFJBRElDSU9OQUxFUyBERSBDQVNUSUxMQS1MQSBNQU5DSEEoODkuIERFTCBISUxPIEFMIMOJWElUTzogRU1QUkVORElNSUVOVE8gRU4gQ09TVFVSQSg5MC4gTU9OVEEgVFUgTkVHT0NJTyBERSBBUlJFR0xPUyBZIENPTkZFQ0NJw5NOKDkxLiBBU0VTT1LDjUEgREUgSU1BR0VOIFkgVEVOREVOQ0lBUyBERSBNT0RBKDkyLiBJTklDSUFDScOTTiBBIExBIENPTkZFQ0NJw5NOIFkgUEVSU09OQUxJWkFDScOTTiBERSBQUkVOREFTKDkzLiBST1RVTEFDScOTTiBZIERFQ09SQUNJw5NOIENSRUFUSVZBKDk0LiBDT1NUVVJBIFkgQVJSRUdMT1MgVEVYVElMRVMoOTUuIERJRcORTywgQ1JFQUNJw5NOIFkgRkFCUklDQUNJw5NOIERFIEpPWUVSw41BIEFSVEVTQU5BTCg5Ni4gUkVTVEFVUkFET1IgREUgTVVFQkxFUyg5Ny4gTUFOVUFMSURBREVTIFkgUFJPWUVDVE9TIENSRUFUSVZPUyg5OC4gVFUgTkVHT0NJTyBFTiBJTlRFUk5FVDogVkVOREUgRU4gQU1BWk9OIFkgT1RSQVMgUExBVEFGT1JNQVMoOTkuIEVNUFJFTkRFIE9OTElORTogSEVSUkFNSUVOVEFTIENMQVZFIFBBUkEgVFUgTkVHT0NJTyBESUdJVEFMKDEwMC4gRU1QUkVORElNSUVOVE8gV0VCOiBUVSBUSUVOREEgT05MSU5FIEVOIDUgUEFTT1MoMTAxLiBNT05UQSBUVSBORUdPQ0lPIFkgSEFaTE8gQ1JFQ0VSIENPTiBNQVJLRVRJTkcgRElHSVRBTCgxMDIuIENSRUEgVFUgTkVHT0NJTyBERSBESVNFw5FPIEdSw4FGSUNPKDEwNC4gSU1QVUxTQSBUVSBFTVBSRU5ESU1JRU5UTyBDT04gSU5TVEFHUkFNIFkgVElLVE9LKDEwNS4gR0VTVEnDk04gREUgUkVERVMgU09DSUFMRVMgQ09NTyBPUE9SVFVOSURBRCBERSBORUdPQ0lPKDEwNi4gSUEgUFLDgUNUSUNBIFBBUkEgRU1QUkVOREVET1JFUygxMDcuIE1BUktFVElORyBESUdJVEFMLCBDT01FUkNJTyBFTEVDVFLDk05JQ08gWSBSRURFUygxMDguIEZVTEwgU1RBQ0sgREVWRUxPUEVSKDEwOS4gUE9XRVIgQkk6IEFOw4FMSVNJUyBERSBEQVRPUyBZIENVQURST1MgREUgTUFORE8gUEFSQSBFTCBFTVBMRU8oMTEwLiBQUk9EVUNDScOTTiBBVURJT1ZJU1VBTCgxMTEuIFBST0RVQ0NJw5NOIE1VU0lDQUwoMTEyLiBQUk9EVUNDScOTTiBERSBDT05URU5JRE8gQVVESU9WSVNVQUwoMTEzLiBJTlRST0RVQ0NJw5NOIEEgTEEgQ0lCRVJTRUdVUklEQUQ6IFBSSU5DSVBJT1MgWSBCVUVOQVMgUFLDgUNUSUNBUygxMTQuIElOw41DSUFURSBFTiBFTCBESVNFw5FPIEdSw4FGSUNPKDExNS4gRElTRcORTyBXRUIgWSBDT01FUkNJTyBFTEVDVFLDk05JQ08oMTE2LiBNQVJLRVRJTkcgRElHSVRBTCBZIENSRUFDScOTTiBERSBWw41ERU9TKDExNy4gRlVOREFNRU5UT1MgREUgSU5URUxJR0VOQ0lBIEFSVElGSUNJQUwgUEFSQSBQUklOQ0lQSUFOVEVTKDExOC4gQ09NUEVURU5DSUFTIERJR0lUQUxFUzogSUEsIEdPT0dMRSBZIE1JQ1JPU09GVCgxMTkuIFJFUEFSQUNJw5NOIERFIERJU1BPU0lUSVZPUyBNw5NWSUxFUygxMjAuIERJU0XDkU8gRsOBQ0lMIENPTiBIRVJSQU1JRU5UQVMgT05MSU5FKDEyMS4gRVhDRUwgQsOBU0lDTygxMjIuIEVDT0hVRVJUT1MgUkVOVEFCTEVTOiBFTVBSRU5ERSBZIFBST0RVQ0UgVE9ETyBFTCBBw5FPKDEyMy4gQUdSSUNVTFRVUkEgVEVDTk9Mw5NHSUNBIDQuMCgxMjQuIEFET1JOT1MgRkxPUkFMRVMgUEFSQSBFVkVOVE9TOiBUVSBORUdPQ0lPIExPQ0FMKDEyNS4gRU1QUkVORElNSUVOVE8gVkVSREU6IEpBUkRJTkVSw41BIENPTU8gTkVHT0NJTygxMjYuIE1PTlRBIFRVIE5FR09DSU8gREUgUEVMVVFVRVLDjUEgWSBDVUlEQURPUyBFU1TDiVRJQ09TIFBBUkEgTUFTQ09UQVMoMTI3LiBKQVJESU5FUsONQSBZIE1BTlRFTklNSUVOVE8gREUgRVNQQUNJT1MgVkVSREVTKDEyOC4gQUdFTlRFIEZPUkVTVEFMKDEyOS4gSU5TVEFMQUNJw5NOIFkgTUFOVEVOSU1JRU5UTyBERSBQQVJRVUVTIFkgSkFSRElORVMoMTMwLiBERSBMQSBJREVBIEFMIE5FR09DSU86IEPDk01PIENSRUFSIFkgR0VTVElPTkFSIFRVIEVNUFJFU0EoMTMxLiBGSU5BTkNJQSBUVSBJREVBOiBNSUNST0NSw4lESVRPUyBZIEFZVURBUyBBTCBFTVBSRU5ESU1JRU5UTygxMzIuIEVNUFJFTkRJTUlFTlRPIElOVEVMSUdFTlRFIENPTiBJQTogR0VTVEnDk04gWSBBRE1JTklTVFJBQ0nDk04oMTMzLiBNSUNST0VNUFJFTkRJTUlFTlRPIEZFTUVOSU5PIEVOIEVMIEVOVFJPTk8gUlVSQUwoMTM0LiBMQU5aQSBUVSBQUk9ZRUNUTyBFTVBSRU5ERURPUigxMzUuIEVNUFJFTkRFUiBFTiBFU1BBw5FBOiBHVcONQSBCw4FTSUNBIFBBUkEgTk8gSElTUEFOT0hBQkxBTlRFUygxMzYuIEVNUFJFTkRJTUlFTlRPIEVOIFBST0RVQ0NJw5NOIEFVRElPVklTVUFMKDEzNy4gRU1QUkVORElNSUVOVE8gRU4gUFJPRFVDQ0nDk04gTVVTSUNBTCgxMzguIElOSUNJQUNJw5NOIEEgTEFTIEZJTkFOWkFTIEUgSU5WRVJTSU9ORVMoMTM5LiBSRUlOVkVOVEFURSBDT04gTEEgSU5URUxJR0VOQ0lBIEFSVElGSUNJQUw6IFBST0RVQ1RJVklEQUQgWSBPUkdBTklaQUNJw5NOKDE0MC4gR0VTVMOTTiBCw4FTSUNBIERFIE7Dk01JTkFTIFkgRkFDVFVSQUNJw5NOKDE0MS4gVEFMRU5UTyBESUdJVEFMOiBBQ1RVQUzDjVpBVEUsIENPTkVDVEEgRSBJTVDDmkxTQVRFKDE0Mi4gQURNSU5JU1RSQVRJVk8gLSBDT05UQUJMRSgxNDMuIExPR8ONU1RJQ0EgWSBESVNUUklCVUNJw5NOOiBDT01QRVRFTkNJQVMgUEFSQSBFTCBFTVBSRU5ESU1JRU5UTygxNDQuIFTDiUNOSUNPIEVOIFBVTlRPIERFIFZFTlRBKDE0NS4gT1JHQU5JWkFDScOTTiBZIFTDiUNOSUNBUyBQQVJBIExBIFZFTlRBKDE0Ni4gVkVOVEEgT05MSU5FIFBBUkEgUEVRVUXDkU9TIENPTUVSQ0lPUygxNDcuIEVYUEVSVE8gRU4gUFJFUEFSQUNJw5NOIERFIFBFRElET1MoMTQ4LiBDQVJSRVRJTExBUyBFTEVWQURPUkFTOiBFU1BFQ0lBTElTVEEgSlVOSU9SKDE0OS4gT1BFUkFSSU8gREUgTE9Hw41TVElDQSBFTiBBTE1BQ8OJTigxNTAuIEVTQ0FQQVJBVElTTU8oMTUxLiBQUkVQQVJBQ0nDk04gREUgUlVUQVMgREUgUkVQQVJUTygxNTIuIEVNQkFMQUpFLCBQQUxFVElaQURPIFkgRVRJUVVFVEFETyBMT0fDjVNUSUNPYC5zcGxpdChgKGApLFM9ZT0+ZSxDPXMoKGU9Pnt2YXIgdD1TeW1ib2wuZm9yKGByZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudGApLG49U3ltYm9sLmZvcihgcmVhY3QuZnJhZ21lbnRgKTtmdW5jdGlvbiByKGUsbixyKXt2YXIgaT1udWxsO2lmKHIhPT12b2lkIDAmJihpPWBgK3IpLG4ua2V5IT09dm9pZCAwJiYoaT1gYCtuLmtleSksYGtleWBpbiBuKWZvcih2YXIgYSBpbiByPXt9LG4pYSE9PWBrZXlgJiYoclthXT1uW2FdKTtlbHNlIHI9bjtyZXR1cm4gbj1yLnJlZix7JCR0eXBlb2Y6dCx0eXBlOmUsa2V5OmkscmVmOm49PT12b2lkIDA/bnVsbDpuLHByb3BzOnJ9fWUuRnJhZ21lbnQ9bixlLmpzeD1yLGUuanN4cz1yfSkpLHc9cygoKGUsdCk9Pnt0LmV4cG9ydHM9QygpfSkpLFQsRSxELE8saz1vKCgoKT0+e1Q9YG1vZHVsZXByZWxvYWRgLEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9LEQ9e30sTz1mdW5jdGlvbihlLHQsbil7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYodCYmdC5sZW5ndGg+MCl7bGV0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYGxpbmtgKSxpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXWApLGE9aT8ubm9uY2V8fGk/LmdldEF0dHJpYnV0ZShgbm9uY2VgKTtmdW5jdGlvbiBvKGUpe3JldHVybiBQcm9taXNlLmFsbChlLm1hcChlPT5Qcm9taXNlLnJlc29sdmUoZSkudGhlbihlPT4oe3N0YXR1czpgZnVsZmlsbGVkYCx2YWx1ZTplfSksZT0+KHtzdGF0dXM6YHJlamVjdGVkYCxyZWFzb246ZX0pKSkpfXI9byh0Lm1hcCh0PT57aWYodD1FKHQsbiksdCBpbiBEKXJldHVybjtEW3RdPSEwO2xldCByPXQuZW5kc1dpdGgoYC5jc3NgKSxpPXI/YFtyZWw9InN0eWxlc2hlZXQiXWA6YGA7aWYobilmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpZihpLmhyZWY9PT10JiYoIXJ8fGkucmVsPT09YHN0eWxlc2hlZXRgKSlyZXR1cm59ZWxzZSBpZihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaW5rW2hyZWY9IiR7dH0iXSR7aX1gKSlyZXR1cm47bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApO2lmKG8ucmVsPXI/YHN0eWxlc2hlZXRgOlQscnx8KG8uYXM9YHNjcmlwdGApLG8uY3Jvc3NPcmlnaW49YGAsby5ocmVmPXQsYSYmby5zZXRBdHRyaWJ1dGUoYG5vbmNlYCxhKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8pLHIpcmV0dXJuIG5ldyBQcm9taXNlKChlLG4pPT57by5hZGRFdmVudExpc3RlbmVyKGBsb2FkYCxlKSxvLmFkZEV2ZW50TGlzdGVuZXIoYGVycm9yYCwoKT0+bihFcnJvcihgVW5hYmxlIHRvIHByZWxvYWQgQ1NTIGZvciAke3R9YCkpKX0pfSkpfWZ1bmN0aW9uIGkoZSl7bGV0IHQ9bmV3IEV2ZW50KGB2aXRlOnByZWxvYWRFcnJvcmAse2NhbmNlbGFibGU6ITB9KTtpZih0LnBheWxvYWQ9ZSx3aW5kb3cuZGlzcGF0Y2hFdmVudCh0KSwhdC5kZWZhdWx0UHJldmVudGVkKXRocm93IGV9cmV0dXJuIHIudGhlbih0PT57Zm9yKGxldCBlIG9mIHR8fFtdKWUuc3RhdHVzPT09YHJlamVjdGVkYCYmaShlLnJlYXNvbik7cmV0dXJuIGUoKS5jYXRjaChpKX0pfX0pKTtmdW5jdGlvbiBBKGUpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIEE9dHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09YHN5bWJvbGA/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/YHN5bWJvbGA6dHlwZW9mIGV9LEEoZSl9dmFyIGo9bygoKCk9Pnt9KSk7ZnVuY3Rpb24gTShlLHQpe3R8fD17fTt2YXIgbj15ZSgpO24ucChlKTt2YXIgcj1iZShlLHQsdC5kaWN0aW9uYXJ5PzY6Miw0KTtyZXR1cm4gU2Uocix0KSx4ZShyLHIubGVuZ3RoLTQsbi5kKCkpLHJ9dmFyIE4sUCxGLEksTCxSLHosQixWLGVlLEgsVSxXLEcsdGUsbmUscmUsaWUsYWUsSyxvZSxzZSxjZSxsZSx1ZSxkZSxmZSxwZSxtZSxoZSxnZSxfZSx2ZSx5ZSxiZSx4ZSxTZSxDZSx3ZT1vKCgoKT0+e2ZvcihOPVVpbnQ4QXJyYXksUD1VaW50MTZBcnJheSxGPUludDMyQXJyYXksST1uZXcgTihbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwLDAsMCwwXSksTD1uZXcgTihbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdKSxSPW5ldyBOKFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksej1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgUCgzMSkscj0wO3I8MzE7KytyKW5bcl09dCs9MTw8ZVtyLTFdO2Zvcih2YXIgaT1uZXcgRihuWzMwXSkscj0xO3I8MzA7KytyKWZvcih2YXIgYT1uW3JdO2E8bltyKzFdOysrYSlpW2FdPWEtbltyXTw8NXxyO3JldHVybntiOm4scjppfX0sQj16KEksMiksVj1CLmIsZWU9Qi5yLFZbMjhdPTI1OCxlZVsyNThdPTI4LEg9eihMLDApLEguYixVPUgucixXPW5ldyBQKDMyNzY4KSxHPTA7RzwzMjc2ODsrK0cpdGU9KEcmNDM2OTApPj4xfChHJjIxODQ1KTw8MSx0ZT0odGUmNTI0MjgpPj4yfCh0ZSYxMzEwNyk8PDIsdGU9KHRlJjYxNjgwKT4+NHwodGUmMzg1NSk8PDQsV1tHXT0oKHRlJjY1MjgwKT4+OHwodGUmMjU1KTw8OCk+PjE7Zm9yKG5lPShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPWUubGVuZ3RoLGk9MCxhPW5ldyBQKHQpO2k8cjsrK2kpZVtpXSYmKythW2VbaV0tMV07dmFyIG89bmV3IFAodCk7Zm9yKGk9MTtpPHQ7KytpKW9baV09b1tpLTFdK2FbaS0xXTw8MTt2YXIgcztpZihuKXtzPW5ldyBQKDE8PHQpO3ZhciBjPTE1LXQ7Zm9yKGk9MDtpPHI7KytpKWlmKGVbaV0pZm9yKHZhciBsPWk8PDR8ZVtpXSx1PXQtZVtpXSxkPW9bZVtpXS0xXSsrPDx1LGY9ZHwoMTw8dSktMTtkPD1mOysrZClzW1dbZF0+PmNdPWx9ZWxzZSBmb3Iocz1uZXcgUChyKSxpPTA7aTxyOysraSllW2ldJiYoc1tpXT1XW29bZVtpXS0xXSsrXT4+MTUtZVtpXSk7cmV0dXJuIHN9KSxyZT1uZXcgTigyODgpLEc9MDtHPDE0NDsrK0cpcmVbR109ODtmb3IoRz0xNDQ7RzwyNTY7KytHKXJlW0ddPTk7Zm9yKEc9MjU2O0c8MjgwOysrRylyZVtHXT03O2ZvcihHPTI4MDtHPDI4ODsrK0cpcmVbR109ODtmb3IoaWU9bmV3IE4oMzIpLEc9MDtHPDMyOysrRylpZVtHXT01O2FlPW5lKHJlLDksMCksSz1uZShpZSw1LDApLG9lPWZ1bmN0aW9uKGUpe3JldHVybihlKzcpLzh8MH0sc2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybih0PT1udWxsfHx0PDApJiYodD0wKSwobj09bnVsbHx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKSxuZXcgTihlLnN1YmFycmF5KHQsbikpfSxjZT1mdW5jdGlvbihlLHQsbil7bjw8PXQmNzt2YXIgcj10Lzh8MDtlW3JdfD1uLGVbcisxXXw9bj4+OH0sbGU9ZnVuY3Rpb24oZSx0LG4pe248PD10Jjc7dmFyIHI9dC84fDA7ZVtyXXw9bixlW3IrMV18PW4+PjgsZVtyKzJdfD1uPj4xNn0sdWU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJm4ucHVzaCh7czpyLGY6ZVtyXX0pO3ZhciBpPW4ubGVuZ3RoLGE9bi5zbGljZSgpO2lmKCFpKXJldHVybnt0Ol9lLGw6MH07aWYoaT09MSl7dmFyIG89bmV3IE4oblswXS5zKzEpO3JldHVybiBvW25bMF0uc109MSx7dDpvLGw6MX19bi5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZi10LmZ9KSxuLnB1c2goe3M6LTEsZjoyNTAwMX0pO3ZhciBzPW5bMF0sYz1uWzFdLGw9MCx1PTEsZD0yO2ZvcihuWzBdPXtzOi0xLGY6cy5mK2MuZixsOnMscjpjfTt1IT1pLTE7KXM9bltuW2xdLmY8bltkXS5mP2wrKzpkKytdLGM9bltsIT11JiZuW2xdLmY8bltkXS5mP2wrKzpkKytdLG5bdSsrXT17czotMSxmOnMuZitjLmYsbDpzLHI6Y307Zm9yKHZhciBmPWFbMF0ucyxyPTE7cjxpOysrcilhW3JdLnM+ZiYmKGY9YVtyXS5zKTt2YXIgcD1uZXcgUChmKzEpLG09ZGUoblt1LTFdLHAsMCk7aWYobT50KXt2YXIgcj0wLGg9MCxnPW0tdCxfPTE8PGc7Zm9yKGEuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBwW3Quc10tcFtlLnNdfHxlLmYtdC5mfSk7cjxpOysrcil7dmFyIHY9YVtyXS5zO2lmKHBbdl0+dCloKz1fLSgxPDxtLXBbdl0pLHBbdl09dDtlbHNlIGJyZWFrfWZvcihoPj49ZztoPjA7KXt2YXIgeT1hW3JdLnM7cFt5XTx0P2gtPTE8PHQtcFt5XSsrLTE6KytyfWZvcig7cj49MCYmaDstLXIpe3ZhciBiPWFbcl0ucztwW2JdPT10JiYoLS1wW2JdLCsraCl9bT10fXJldHVybnt0Om5ldyBOKHApLGw6bX19LGRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5zPT0tMT9NYXRoLm1heChkZShlLmwsdCxuKzEpLGRlKGUucix0LG4rMSkpOnRbZS5zXT1ufSxmZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dCYmIWVbLS10XTspO2Zvcih2YXIgbj1uZXcgUCgrK3QpLHI9MCxpPWVbMF0sYT0xLG89ZnVuY3Rpb24oZSl7bltyKytdPWV9LHM9MTtzPD10OysrcylpZihlW3NdPT1pJiZzIT10KSsrYTtlbHNle2lmKCFpJiZhPjIpe2Zvcig7YT4xMzg7YS09MTM4KW8oMzI3NTQpO2E+MiYmKG8oYT4xMD9hLTExPDw1fDI4NjkwOmEtMzw8NXwxMjMwNSksYT0wKX1lbHNlIGlmKGE+Myl7Zm9yKG8oaSksLS1hO2E+NjthLT02KW8oODMwNCk7YT4yJiYobyhhLTM8PDV8ODIwOCksYT0wKX1mb3IoO2EtLTspbyhpKTthPTEsaT1lW3NdfXJldHVybntjOm4uc3ViYXJyYXkoMCxyKSxuOnR9fSxwZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPHQubGVuZ3RoOysrciluKz1lW3JdKnRbcl07cmV0dXJuIG59LG1lPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmxlbmd0aCxpPW9lKHQrMik7ZVtpXT1yJjI1NSxlW2krMV09cj4+OCxlW2krMl09ZVtpXV4yNTUsZVtpKzNdPWVbaSsxXV4yNTU7Zm9yKHZhciBhPTA7YTxyOysrYSllW2krYSs0XT1uW2FdO3JldHVybihpKzQrcikqOH0saGU9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzLGMsbCx1KXtjZSh0LHUrKyxuKSwrK2lbMjU2XTtmb3IodmFyIGQ9dWUoaSwxNSksZj1kLnQscD1kLmwsbT11ZShhLDE1KSxoPW0udCxnPW0ubCxfPWZlKGYpLHY9Xy5jLHk9Xy5uLGI9ZmUoaCkseD1iLmMsUz1iLm4sQz1uZXcgUCgxOSksdz0wO3c8di5sZW5ndGg7Kyt3KSsrQ1t2W3ddJjMxXTtmb3IodmFyIHc9MDt3PHgubGVuZ3RoOysrdykrK0NbeFt3XSYzMV07Zm9yKHZhciBUPXVlKEMsNyksRT1ULnQsRD1ULmwsTz0xOTtPPjQmJiFFW1JbTy0xXV07LS1PKTt2YXIgaz1sKzU8PDMsQT1wZShpLHJlKStwZShhLGllKStvLGo9cGUoaSxmKStwZShhLGgpK28rMTQrMypPK3BlKEMsRSkrMipDWzE2XSszKkNbMTddKzcqQ1sxOF07aWYoYz49MCYmazw9QSYmazw9ailyZXR1cm4gbWUodCx1LGUuc3ViYXJyYXkoYyxjK2wpKTt2YXIgTSxOLEYsejtpZihjZSh0LHUsMSsoajxBKSksdSs9MixqPEEpe009bmUoZixwLDApLE49ZixGPW5lKGgsZywwKSx6PWg7dmFyIEI9bmUoRSxELDApO2NlKHQsdSx5LTI1NyksY2UodCx1KzUsUy0xKSxjZSh0LHUrMTAsTy00KSx1Kz0xNDtmb3IodmFyIHc9MDt3PE87Kyt3KWNlKHQsdSszKncsRVtSW3ddXSk7dSs9MypPO2Zvcih2YXIgVj1bdix4XSxlZT0wO2VlPDI7KytlZSlmb3IodmFyIEg9VltlZV0sdz0wO3c8SC5sZW5ndGg7Kyt3KXt2YXIgVT1IW3ddJjMxO2NlKHQsdSxCW1VdKSx1Kz1FW1VdLFU+MTUmJihjZSh0LHUsSFt3XT4+NSYxMjcpLHUrPUhbd10+PjEyKX19ZWxzZSBNPWFlLE49cmUsRj1LLHo9aWU7Zm9yKHZhciB3PTA7dzxzOysrdyl7dmFyIFc9clt3XTtpZihXPjI1NSl7dmFyIFU9Vz4+MTgmMzE7bGUodCx1LE1bVSsyNTddKSx1Kz1OW1UrMjU3XSxVPjcmJihjZSh0LHUsVz4+MjMmMzEpLHUrPUlbVV0pO3ZhciBHPVcmMzE7bGUodCx1LEZbR10pLHUrPXpbR10sRz4zJiYobGUodCx1LFc+PjUmODE5MSksdSs9TFtHXSl9ZWxzZSBsZSh0LHUsTVtXXSksdSs9TltXXX1yZXR1cm4gbGUodCx1LE1bMjU2XSksdStOWzI1Nl19LGdlPW5ldyBGKFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLF9lPW5ldyBOKDApLHZlPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbz1hLnp8fGUubGVuZ3RoLHM9bmV3IE4ocitvKzUqKDErTWF0aC5jZWlsKG8vN2UzKSkraSksYz1zLnN1YmFycmF5KHIscy5sZW5ndGgtaSksbD1hLmwsdT0oYS5yfHwwKSY3O2lmKHQpe3UmJihjWzBdPWEucj4+Myk7Zm9yKHZhciBkPWdlW3QtMV0sZj1kPj4xMyxwPWQmODE5MSxtPSgxPDxuKS0xLGg9YS5wfHxuZXcgUCgzMjc2OCksZz1hLmh8fG5ldyBQKG0rMSksXz1NYXRoLmNlaWwobi8zKSx2PTIqXyx5PWZ1bmN0aW9uKHQpe3JldHVybihlW3RdXmVbdCsxXTw8X15lW3QrMl08PHYpJm19LGI9bmV3IEYoMjVlMykseD1uZXcgUCgyODgpLFM9bmV3IFAoMzIpLEM9MCx3PTAsVD1hLml8fDAsRT0wLEQ9YS53fHwwLE89MDtUKzI8bzsrK1Qpe3ZhciBrPXkoVCksQT1UJjMyNzY3LGo9Z1trXTtpZihoW0FdPWosZ1trXT1BLEQ8PVQpe3ZhciBNPW8tVDtpZigoQz43ZTN8fEU+MjQ1NzYpJiYoTT40MjN8fCFsKSl7dT1oZShlLGMsMCxiLHgsUyx3LEUsTyxULU8sdSksRT1DPXc9MCxPPVQ7Zm9yKHZhciBSPTA7UjwyODY7KytSKXhbUl09MDtmb3IodmFyIFI9MDtSPDMwOysrUilTW1JdPTB9dmFyIHo9MixCPTAsVj1wLEg9QS1qJjMyNzY3O2lmKE0+MiYmaz09eShULUgpKWZvcih2YXIgVz1NYXRoLm1pbihmLE0pLTEsRz1NYXRoLm1pbigzMjc2NyxUKSx0ZT1NYXRoLm1pbigyNTgsTSk7SDw9RyYmLS1WJiZBIT1qOyl7aWYoZVtUK3pdPT1lW1Qrei1IXSl7Zm9yKHZhciBuZT0wO25lPHRlJiZlW1QrbmVdPT1lW1QrbmUtSF07KytuZSk7aWYobmU+eil7aWYoej1uZSxCPUgsbmU+VylicmVhaztmb3IodmFyIHJlPU1hdGgubWluKEgsbmUtMiksaWU9MCxSPTA7UjxyZTsrK1Ipe3ZhciBhZT1ULUgrUiYzMjc2NyxLPWFlLWhbYWVdJjMyNzY3O0s+aWUmJihpZT1LLGo9YWUpfX19QT1qLGo9aFtBXSxIKz1BLWomMzI3Njd9aWYoQil7YltFKytdPTI2ODQzNTQ1NnxlZVt6XTw8MTh8VVtCXTt2YXIgY2U9ZWVbel0mMzEsbGU9VVtCXSYzMTt3Kz1JW2NlXStMW2xlXSwrK3hbMjU3K2NlXSwrK1NbbGVdLEQ9VCt6LCsrQ31lbHNlIGJbRSsrXT1lW1RdLCsreFtlW1RdXX19Zm9yKFQ9TWF0aC5tYXgoVCxEKTtUPG87KytUKWJbRSsrXT1lW1RdLCsreFtlW1RdXTt1PWhlKGUsYyxsLGIseCxTLHcsRSxPLFQtTyx1KSxsfHwoYS5yPXUmN3xjW3UvOHwwXTw8Myx1LT03LGEuaD1nLGEucD1oLGEuaT1ULGEudz1EKX1lbHNle2Zvcih2YXIgVD1hLnd8fDA7VDxvK2w7VCs9NjU1MzUpe3ZhciB1ZT1UKzY1NTM1O3VlPj1vJiYoY1t1Lzh8MF09bCx1ZT1vKSx1PW1lKGMsdSsxLGUuc3ViYXJyYXkoVCx1ZSkpfWEuaT1vfXJldHVybiBzZShzLDAscitvZSh1KStpKX0seWU9ZnVuY3Rpb24oKXt2YXIgZT0xLHQ9MDtyZXR1cm57cDpmdW5jdGlvbihuKXtmb3IodmFyIHI9ZSxpPXQsYT1uLmxlbmd0aHwwLG89MDtvIT1hOyl7Zm9yKHZhciBzPU1hdGgubWluKG8rMjY1NSxhKTtvPHM7KytvKWkrPXIrPW5bb107cj0ociY2NTUzNSkrMTUqKHI+PjE2KSxpPShpJjY1NTM1KSsxNSooaT4+MTYpfWU9cix0PWl9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSU9NjU1MjEsdCU9NjU1MjEsKGUmMjU1KTw8MjR8KGUmNjUyODApPDw4fCh0JjI1NSk8PDh8dD4+OH19fSxiZT1mdW5jdGlvbihlLHQsbixyLGkpe2lmKCFpJiYoaT17bDoxfSx0LmRpY3Rpb25hcnkpKXt2YXIgYT10LmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KSxvPW5ldyBOKGEubGVuZ3RoK2UubGVuZ3RoKTtvLnNldChhKSxvLnNldChlLGEubGVuZ3RoKSxlPW8saS53PWEubGVuZ3RofXJldHVybiB2ZShlLHQubGV2ZWw9PW51bGw/Njp0LmxldmVsLHQubWVtPT1udWxsP2kubD9NYXRoLmNlaWwoTWF0aC5tYXgoOCxNYXRoLm1pbigxMyxNYXRoLmxvZyhlLmxlbmd0aCkpKSoxLjUpOjIwOjEyK3QubWVtLG4scixpKX0seGU9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0sU2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmxldmVsLHI9bj09MD8wOm48Nj8xOm49PTk/MzoyO2lmKGVbMF09MTIwLGVbMV09cjw8NnwodC5kaWN0aW9uYXJ5JiYzMiksZVsxXXw9MzEtKGVbMF08PDh8ZVsxXSklMzEsdC5kaWN0aW9uYXJ5KXt2YXIgaT15ZSgpO2kucCh0LmRpY3Rpb25hcnkpLHhlKGUsMixpLmQoKSl9fSxDZT10eXBlb2YgVGV4dERlY29kZXI8YHVgJiZuZXcgVGV4dERlY29kZXI7dHJ5e0NlLmRlY29kZShfZSx7c3RyZWFtOiEwfSl9Y2F0Y2h7fX0pKTtmdW5jdGlvbiBUZShlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfXZhciBFZT1vKCgoKT0+e30pKTtmdW5jdGlvbiBEZShlLHQpe3ZhciBuPWU9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYobiE9bnVsbCl7dmFyIHIsaSxhLG8scz1bXSxjPSEwLGw9ITE7dHJ5e2lmKGE9KG49bi5jYWxsKGUpKS5uZXh0LHQ9PT0wKXtpZihPYmplY3QobikhPT1uKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KHI9YS5jYWxsKG4pKS5kb25lKSYmKHMucHVzaChyLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXtpZighYyYmbi5yZXR1cm4hPW51bGwmJihvPW4ucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gc319dmFyIE9lPW8oKCgpPT57fSkpO2Z1bmN0aW9uIGtlKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgQWU9bygoKCk9Pnt9KSk7ZnVuY3Rpb24gamUoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGtlKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9rZShlLHQpOnZvaWQgMH19dmFyIE1lPW8oKCgpPT57QWUoKX0pKTtmdW5jdGlvbiBOZSgpe3Rocm93IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBQZT1vKCgoKT0+e30pKTtmdW5jdGlvbiBGZShlLHQpe3JldHVybiBUZShlKXx8RGUoZSx0KXx8amUoZSx0KXx8TmUoKX12YXIgSWU9bygoKCk9PntFZSgpLE9lKCksTWUoKSxQZSgpfSkpO2Z1bmN0aW9uIExlKGUsdD1gdXRmOGApe3JldHVybiBuZXcgVGV4dERlY29kZXIodCkuZGVjb2RlKGUpfWZ1bmN0aW9uIFJlKGUpe3JldHVybiB6ZS5lbmNvZGUoZSl9dmFyIHplLEJlPW8oKCgpPT57emU9bmV3IFRleHRFbmNvZGVyfSkpLFZlLEhlLFVlLFdlLEdlPW8oKCgpPT57QmUoKSxWZT0xMDI0KjgsSGU9KCgpPT57bGV0IGU9bmV3IFVpbnQ4QXJyYXkoNCksdD1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIpO3JldHVybiEoKHRbMF09MSkmZVswXSl9KSgpLFVlPXtpbnQ4Omdsb2JhbFRoaXMuSW50OEFycmF5LHVpbnQ4Omdsb2JhbFRoaXMuVWludDhBcnJheSxpbnQxNjpnbG9iYWxUaGlzLkludDE2QXJyYXksdWludDE2Omdsb2JhbFRoaXMuVWludDE2QXJyYXksaW50MzI6Z2xvYmFsVGhpcy5JbnQzMkFycmF5LHVpbnQzMjpnbG9iYWxUaGlzLlVpbnQzMkFycmF5LHVpbnQ2NDpnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5LGludDY0Omdsb2JhbFRoaXMuQmlnSW50NjRBcnJheSxmbG9hdDMyOmdsb2JhbFRoaXMuRmxvYXQzMkFycmF5LGZsb2F0NjQ6Z2xvYmFsVGhpcy5GbG9hdDY0QXJyYXl9LFdlPWNsYXNzIGV7YnVmZmVyO2J5dGVMZW5ndGg7Ynl0ZU9mZnNldDtsZW5ndGg7b2Zmc2V0O2xhc3RXcml0dGVuQnl0ZTtsaXR0bGVFbmRpYW47X2RhdGE7X21hcms7X21hcmtzO2NvbnN0cnVjdG9yKHQ9VmUsbj17fSl7bGV0IHI9ITE7dHlwZW9mIHQ9PWBudW1iZXJgP3Q9bmV3IEFycmF5QnVmZmVyKHQpOihyPSEwLHRoaXMubGFzdFdyaXR0ZW5CeXRlPXQuYnl0ZUxlbmd0aCk7bGV0IGk9bi5vZmZzZXQ/bi5vZmZzZXQ+Pj4wOjAsYT10LmJ5dGVMZW5ndGgtaSxvPWk7KEFycmF5QnVmZmVyLmlzVmlldyh0KXx8dCBpbnN0YW5jZW9mIGUpJiYodC5ieXRlTGVuZ3RoIT09dC5idWZmZXIuYnl0ZUxlbmd0aCYmKG89dC5ieXRlT2Zmc2V0K2kpLHQ9dC5idWZmZXIpLHI/dGhpcy5sYXN0V3JpdHRlbkJ5dGU9YTp0aGlzLmxhc3RXcml0dGVuQnl0ZT0wLHRoaXMuYnVmZmVyPXQsdGhpcy5sZW5ndGg9YSx0aGlzLmJ5dGVMZW5ndGg9YSx0aGlzLmJ5dGVPZmZzZXQ9byx0aGlzLm9mZnNldD0wLHRoaXMubGl0dGxlRW5kaWFuPSEwLHRoaXMuX2RhdGE9bmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyLG8sYSksdGhpcy5fbWFyaz0wLHRoaXMuX21hcmtzPVtdfWF2YWlsYWJsZShlPTEpe3JldHVybiB0aGlzLm9mZnNldCtlPD10aGlzLmxlbmd0aH1pc0xpdHRsZUVuZGlhbigpe3JldHVybiB0aGlzLmxpdHRsZUVuZGlhbn1zZXRMaXR0bGVFbmRpYW4oKXtyZXR1cm4gdGhpcy5saXR0bGVFbmRpYW49ITAsdGhpc31pc0JpZ0VuZGlhbigpe3JldHVybiF0aGlzLmxpdHRsZUVuZGlhbn1zZXRCaWdFbmRpYW4oKXtyZXR1cm4gdGhpcy5saXR0bGVFbmRpYW49ITEsdGhpc31za2lwKGU9MSl7cmV0dXJuIHRoaXMub2Zmc2V0Kz1lLHRoaXN9YmFjayhlPTEpe3JldHVybiB0aGlzLm9mZnNldC09ZSx0aGlzfXNlZWsoZSl7cmV0dXJuIHRoaXMub2Zmc2V0PWUsdGhpc31tYXJrKCl7cmV0dXJuIHRoaXMuX21hcms9dGhpcy5vZmZzZXQsdGhpc31yZXNldCgpe3JldHVybiB0aGlzLm9mZnNldD10aGlzLl9tYXJrLHRoaXN9cHVzaE1hcmsoKXtyZXR1cm4gdGhpcy5fbWFya3MucHVzaCh0aGlzLm9mZnNldCksdGhpc31wb3BNYXJrKCl7bGV0IGU9dGhpcy5fbWFya3MucG9wKCk7aWYoZT09PXZvaWQgMCl0aHJvdyBFcnJvcihgTWFyayBzdGFjayBlbXB0eWApO3JldHVybiB0aGlzLnNlZWsoZSksdGhpc31yZXdpbmQoKXtyZXR1cm4gdGhpcy5vZmZzZXQ9MCx0aGlzfWVuc3VyZUF2YWlsYWJsZShlPTEpe2lmKCF0aGlzLmF2YWlsYWJsZShlKSl7bGV0IHQ9KHRoaXMub2Zmc2V0K2UpKjIsbj1uZXcgVWludDhBcnJheSh0KTtuLnNldChuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcikpLHRoaXMuYnVmZmVyPW4uYnVmZmVyLHRoaXMubGVuZ3RoPXQsdGhpcy5ieXRlTGVuZ3RoPXQsdGhpcy5fZGF0YT1uZXcgRGF0YVZpZXcodGhpcy5idWZmZXIpfXJldHVybiB0aGlzfXJlYWRCb29sZWFuKCl7cmV0dXJuIHRoaXMucmVhZFVpbnQ4KCkhPT0wfXJlYWRJbnQ4KCl7cmV0dXJuIHRoaXMuX2RhdGEuZ2V0SW50OCh0aGlzLm9mZnNldCsrKX1yZWFkVWludDgoKXtyZXR1cm4gdGhpcy5fZGF0YS5nZXRVaW50OCh0aGlzLm9mZnNldCsrKX1yZWFkQnl0ZSgpe3JldHVybiB0aGlzLnJlYWRVaW50OCgpfXJlYWRCeXRlcyhlPTEpe3JldHVybiB0aGlzLnJlYWRBcnJheShlLGB1aW50OGApfXJlYWRBcnJheShlLHQpe2xldCBuPVVlW3RdLkJZVEVTX1BFUl9FTEVNRU5UKmUscj10aGlzLmJ5dGVPZmZzZXQrdGhpcy5vZmZzZXQsaT10aGlzLmJ1ZmZlci5zbGljZShyLHIrbik7aWYodGhpcy5saXR0bGVFbmRpYW49PT1IZSYmdCE9PWB1aW50OGAmJnQhPT1gaW50OGApe2xldCBlPW5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLnNsaWNlKHIscituKSk7ZS5yZXZlcnNlKCk7bGV0IGk9bmV3IFVlW3RdKGUuYnVmZmVyKTtyZXR1cm4gdGhpcy5vZmZzZXQrPW4saS5yZXZlcnNlKCksaX1sZXQgYT1uZXcgVWVbdF0oaSk7cmV0dXJuIHRoaXMub2Zmc2V0Kz1uLGF9cmVhZEludDE2KCl7bGV0IGU9dGhpcy5fZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCx0aGlzLmxpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMub2Zmc2V0Kz0yLGV9cmVhZFVpbnQxNigpe2xldCBlPXRoaXMuX2RhdGEuZ2V0VWludDE2KHRoaXMub2Zmc2V0LHRoaXMubGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5vZmZzZXQrPTIsZX1yZWFkSW50MzIoKXtsZXQgZT10aGlzLl9kYXRhLmdldEludDMyKHRoaXMub2Zmc2V0LHRoaXMubGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5vZmZzZXQrPTQsZX1yZWFkVWludDMyKCl7bGV0IGU9dGhpcy5fZGF0YS5nZXRVaW50MzIodGhpcy5vZmZzZXQsdGhpcy5saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLm9mZnNldCs9NCxlfXJlYWRGbG9hdDMyKCl7bGV0IGU9dGhpcy5fZGF0YS5nZXRGbG9hdDMyKHRoaXMub2Zmc2V0LHRoaXMubGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5vZmZzZXQrPTQsZX1yZWFkRmxvYXQ2NCgpe2xldCBlPXRoaXMuX2RhdGEuZ2V0RmxvYXQ2NCh0aGlzLm9mZnNldCx0aGlzLmxpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMub2Zmc2V0Kz04LGV9cmVhZEJpZ0ludDY0KCl7bGV0IGU9dGhpcy5fZGF0YS5nZXRCaWdJbnQ2NCh0aGlzLm9mZnNldCx0aGlzLmxpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMub2Zmc2V0Kz04LGV9cmVhZEJpZ1VpbnQ2NCgpe2xldCBlPXRoaXMuX2RhdGEuZ2V0QmlnVWludDY0KHRoaXMub2Zmc2V0LHRoaXMubGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5vZmZzZXQrPTgsZX1yZWFkQ2hhcigpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucmVhZEludDgoKSl9cmVhZENoYXJzKGU9MSl7bGV0IHQ9YGA7Zm9yKGxldCBuPTA7bjxlO24rKyl0Kz10aGlzLnJlYWRDaGFyKCk7cmV0dXJuIHR9cmVhZFV0ZjgoZT0xKXtyZXR1cm4gTGUodGhpcy5yZWFkQnl0ZXMoZSkpfWRlY29kZVRleHQoZT0xLHQ9YHV0ZjhgKXtyZXR1cm4gTGUodGhpcy5yZWFkQnl0ZXMoZSksdCl9d3JpdGVCb29sZWFuKGUpe3JldHVybiB0aGlzLndyaXRlVWludDgoZT8yNTU6MCksdGhpc313cml0ZUludDgoZSl7cmV0dXJuIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDEpLHRoaXMuX2RhdGEuc2V0SW50OCh0aGlzLm9mZnNldCsrLGUpLHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpLHRoaXN9d3JpdGVVaW50OChlKXtyZXR1cm4gdGhpcy5lbnN1cmVBdmFpbGFibGUoMSksdGhpcy5fZGF0YS5zZXRVaW50OCh0aGlzLm9mZnNldCsrLGUpLHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpLHRoaXN9d3JpdGVCeXRlKGUpe3JldHVybiB0aGlzLndyaXRlVWludDgoZSl9d3JpdGVCeXRlcyhlKXt0aGlzLmVuc3VyZUF2YWlsYWJsZShlLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5fZGF0YS5zZXRVaW50OCh0aGlzLm9mZnNldCsrLGVbdF0pO3JldHVybiB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKSx0aGlzfXdyaXRlSW50MTYoZSl7cmV0dXJuIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDIpLHRoaXMuX2RhdGEuc2V0SW50MTYodGhpcy5vZmZzZXQsZSx0aGlzLmxpdHRsZUVuZGlhbiksdGhpcy5vZmZzZXQrPTIsdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCksdGhpc313cml0ZVVpbnQxNihlKXtyZXR1cm4gdGhpcy5lbnN1cmVBdmFpbGFibGUoMiksdGhpcy5fZGF0YS5zZXRVaW50MTYodGhpcy5vZmZzZXQsZSx0aGlzLmxpdHRsZUVuZGlhbiksdGhpcy5vZmZzZXQrPTIsdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCksdGhpc313cml0ZUludDMyKGUpe3JldHVybiB0aGlzLmVuc3VyZUF2YWlsYWJsZSg0KSx0aGlzLl9kYXRhLnNldEludDMyKHRoaXMub2Zmc2V0LGUsdGhpcy5saXR0bGVFbmRpYW4pLHRoaXMub2Zmc2V0Kz00LHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpLHRoaXN9d3JpdGVVaW50MzIoZSl7cmV0dXJuIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDQpLHRoaXMuX2RhdGEuc2V0VWludDMyKHRoaXMub2Zmc2V0LGUsdGhpcy5saXR0bGVFbmRpYW4pLHRoaXMub2Zmc2V0Kz00LHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpLHRoaXN9d3JpdGVGbG9hdDMyKGUpe3JldHVybiB0aGlzLmVuc3VyZUF2YWlsYWJsZSg0KSx0aGlzLl9kYXRhLnNldEZsb2F0MzIodGhpcy5vZmZzZXQsZSx0aGlzLmxpdHRsZUVuZGlhbiksdGhpcy5vZmZzZXQrPTQsdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCksdGhpc313cml0ZUZsb2F0NjQoZSl7cmV0dXJuIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDgpLHRoaXMuX2RhdGEuc2V0RmxvYXQ2NCh0aGlzLm9mZnNldCxlLHRoaXMubGl0dGxlRW5kaWFuKSx0aGlzLm9mZnNldCs9OCx0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKSx0aGlzfXdyaXRlQmlnSW50NjQoZSl7cmV0dXJuIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDgpLHRoaXMuX2RhdGEuc2V0QmlnSW50NjQodGhpcy5vZmZzZXQsZSx0aGlzLmxpdHRsZUVuZGlhbiksdGhpcy5vZmZzZXQrPTgsdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCksdGhpc313cml0ZUJpZ1VpbnQ2NChlKXtyZXR1cm4gdGhpcy5lbnN1cmVBdmFpbGFibGUoOCksdGhpcy5fZGF0YS5zZXRCaWdVaW50NjQodGhpcy5vZmZzZXQsZSx0aGlzLmxpdHRsZUVuZGlhbiksdGhpcy5vZmZzZXQrPTgsdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCksdGhpc313cml0ZUNoYXIoZSl7cmV0dXJuIHRoaXMud3JpdGVVaW50OChlLmNoYXJDb2RlQXQoMCkpfXdyaXRlQ2hhcnMoZSl7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy53cml0ZVVpbnQ4KGUuY2hhckNvZGVBdCh0KSk7cmV0dXJuIHRoaXN9d3JpdGVVdGY4KGUpe3JldHVybiB0aGlzLndyaXRlQnl0ZXMoUmUoZSkpfXRvQXJyYXkoKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0LHRoaXMubGFzdFdyaXR0ZW5CeXRlKX1nZXRXcml0dGVuQnl0ZUxlbmd0aCgpe3JldHVybiB0aGlzLmxhc3RXcml0dGVuQnl0ZS10aGlzLmJ5dGVPZmZzZXR9X3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpe3RoaXMub2Zmc2V0PnRoaXMubGFzdFdyaXR0ZW5CeXRlJiYodGhpcy5sYXN0V3JpdHRlbkJ5dGU9dGhpcy5vZmZzZXQpfX19KSk7ZnVuY3Rpb24gS2UoZSl7bGV0IHQ9ZS5sZW5ndGg7Zm9yKDstLXQ+PTA7KWVbdF09MH1mdW5jdGlvbiBxZShlLHQsbixyLGkpe3RoaXMuc3RhdGljX3RyZWU9ZSx0aGlzLmV4dHJhX2JpdHM9dCx0aGlzLmV4dHJhX2Jhc2U9bix0aGlzLmVsZW1zPXIsdGhpcy5tYXhfbGVuZ3RoPWksdGhpcy5oYXNfc3RyZWU9ZSYmZS5sZW5ndGh9ZnVuY3Rpb24gSmUoZSx0KXt0aGlzLmR5bl90cmVlPWUsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPXR9ZnVuY3Rpb24gWWUoZSx0LG4scixpKXt0aGlzLmdvb2RfbGVuZ3RoPWUsdGhpcy5tYXhfbGF6eT10LHRoaXMubmljZV9sZW5ndGg9bix0aGlzLm1heF9jaGFpbj1yLHRoaXMuZnVuYz1pfWZ1bmN0aW9uIFhlKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9cW4sdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IFVpbnQxNkFycmF5KGVyKjIpLHRoaXMuZHluX2R0cmVlPW5ldyBVaW50MTZBcnJheSgoMipRbisxKSoyKSx0aGlzLmJsX3RyZWU9bmV3IFVpbnQxNkFycmF5KCgyKiRuKzEpKjIpLGJyKHRoaXMuZHluX2x0cmVlKSxicih0aGlzLmR5bl9kdHJlZSksYnIodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgVWludDE2QXJyYXkodHIrMSksdGhpcy5oZWFwPW5ldyBVaW50MTZBcnJheSgyKlpuKzEpLGJyKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBVaW50MTZBcnJheSgyKlpuKzEpLGJyKHRoaXMuZGVwdGgpLHRoaXMuc3ltX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLnN5bV9uZXh0PTAsdGhpcy5zeW1fZW5kPTAsdGhpcy5vcHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBaZSgpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz1gYCx0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9ZnVuY3Rpb24gUWUoZSl7dGhpcy5vcHRpb25zPVpyLmFzc2lnbih7bGV2ZWw6cGksbWV0aG9kOmhpLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6bWl9LGV8fHt9KTtsZXQgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz4wP3Qud2luZG93Qml0cz0tdC53aW5kb3dCaXRzOnQuZ3ppcCYmdC53aW5kb3dCaXRzPjAmJnQud2luZG93Qml0czwxNiYmKHQud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9YGAsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGFpLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDtsZXQgbj1xci5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLHQubGV2ZWwsdC5tZXRob2QsdC53aW5kb3dCaXRzLHQubWVtTGV2ZWwsdC5zdHJhdGVneSk7aWYobiE9PWRpKXRocm93IEVycm9yKENuW25dKTtpZih0LmhlYWRlciYmcXIuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sdC5oZWFkZXIpLHQuZGljdGlvbmFyeSl7bGV0IGU7aWYoZT10eXBlb2YgdC5kaWN0aW9uYXJ5PT1gc3RyaW5nYD9paS5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6b2kuY2FsbCh0LmRpY3Rpb25hcnkpPT09YFtvYmplY3QgQXJyYXlCdWZmZXJdYD9uZXcgVWludDhBcnJheSh0LmRpY3Rpb25hcnkpOnQuZGljdGlvbmFyeSxuPXFyLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxlKSxuIT09ZGkpdGhyb3cgRXJyb3IoQ25bbl0pO3RoaXMuX2RpY3Rfc2V0PSEwfX1mdW5jdGlvbiAkZShlLHQpe2xldCBuPW5ldyBRZSh0KTtpZihuLnB1c2goZSwhMCksbi5lcnIpdGhyb3cgbi5tc2d8fENuW24uZXJyXTtyZXR1cm4gbi5yZXN1bHR9ZnVuY3Rpb24gZXQoZSx0KXtyZXR1cm4gdHx8PXt9LHQucmF3PSEwLCRlKGUsdCl9ZnVuY3Rpb24gdHQoZSx0KXtyZXR1cm4gdHx8PXt9LHQuZ3ppcD0hMCwkZShlLHQpfWZ1bmN0aW9uIG50KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBVaW50MTZBcnJheSgzMjApLHRoaXMud29yaz1uZXcgVWludDE2QXJyYXkoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gcnQoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9YGAsdGhpcy5jb21tZW50PWBgLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX1mdW5jdGlvbiBpdChlKXt0aGlzLm9wdGlvbnM9WnIuYXNzaWduKHtjaHVua1NpemU6MTAyNCo2NCx3aW5kb3dCaXRzOjE1LHRvOmBgfSxlfHx7fSk7bGV0IHQ9dGhpcy5vcHRpb25zO3QucmF3JiZ0LndpbmRvd0JpdHM+PTAmJnQud2luZG93Qml0czwxNiYmKHQud2luZG93Qml0cz0tdC53aW5kb3dCaXRzLHQud2luZG93Qml0cz09PTAmJih0LndpbmRvd0JpdHM9LTE1KSksdC53aW5kb3dCaXRzPj0wJiZ0LndpbmRvd0JpdHM8MTYmJiEoZSYmZS53aW5kb3dCaXRzKSYmKHQud2luZG93Qml0cys9MzIpLHQud2luZG93Qml0cz4xNSYmdC53aW5kb3dCaXRzPDQ4JiYodC53aW5kb3dCaXRzJjE1fHwodC53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9YGAsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGFpLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDtsZXQgbj1IYS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLHQud2luZG93Qml0cyk7aWYobiE9PXFhfHwodGhpcy5oZWFkZXI9bmV3IFVhLEhhLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKSx0LmRpY3Rpb25hcnkmJih0eXBlb2YgdC5kaWN0aW9uYXJ5PT1gc3RyaW5nYD90LmRpY3Rpb25hcnk9aWkuc3RyaW5nMmJ1Zih0LmRpY3Rpb25hcnkpOldhLmNhbGwodC5kaWN0aW9uYXJ5KT09PWBbb2JqZWN0IEFycmF5QnVmZmVyXWAmJih0LmRpY3Rpb25hcnk9bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KSksdC5yYXcmJihuPUhhLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSx0LmRpY3Rpb25hcnkpLG4hPT1xYSkpKSl0aHJvdyBFcnJvcihDbltuXSl9ZnVuY3Rpb24gYXQoZSx0KXtsZXQgbj1uZXcgaXQodCk7aWYobi5wdXNoKGUpLG4uZXJyKXRocm93IG4ubXNnfHxDbltuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIG90KGUsdCl7cmV0dXJuIHR8fD17fSx0LnJhdz0hMCxhdChlLHQpfXZhciBzdCxjdCxsdCx1dCxkdCxmdCxwdCxtdCxodCxndCxfdCx2dCx5dCxidCx4dCxTdCxDdCx3dCxUdCxFdCxEdCxPdCxrdCxBdCxqdCxNdCxOdCxQdCxGdCxJdCxMdCxSdCx6dCxCdCxWdCxIdCxVdCxXdCxHdCxLdCxxdCxKdCxZdCxYdCxadCxRdCwkdCxlbix0bixubixybixhbixvbixzbixjbixsbix1bixkbixmbixwbixtbixobixnbixfbix2bix5bixibix4bixTbixDbix3bixUbixFbixEbixPbixrbixBbixqbixNbixObixQbixGbixJbixMbixSbix6bixCbixWbixIbixVbixXbixHbixLbixxbixKbixZbixYbixabixRbiwkbixlcix0cixxLG5yLHJyLGlyLGFyLG9yLHNyLGNyLGxyLHVyLGRyLGZyLHByLG1yLGhyLGdyLF9yLHZyLHlyLGJyLHhyLFNyLENyLHdyLFRyLEVyLERyLE9yLGtyLEFyLGpyLE1yLE5yLFByLEZyLElyLExyLFJyLHpyLEJyLFZyLEhyLFVyLFdyLEdyLEtyLHFyLEpyLFlyLFhyLFpyLFFyLCRyLGVpLHRpLG5pLHJpLGlpLGFpLG9pLHNpLGNpLGxpLHVpLGRpLGZpLHBpLG1pLGhpLGdpLF9pLHZpLHlpLGJpLHhpLFNpLENpLHdpLFRpLEVpLERpLE9pLGtpLEFpLGppLE1pLE5pLFBpLEZpLElpLExpLFJpLHppLEJpLFZpLEhpLFVpLFdpLEdpLEtpLHFpLEppLFlpLFhpLFppLFFpLCRpLGVhLHRhLG5hLHJhLGlhLGFhLG9hLHNhLGNhLGxhLHVhLGRhLGZhLHBhLG1hLGhhLGdhLF9hLHZhLHlhLGJhLHhhLFNhLENhLHdhLFRhLEVhLERhLE9hLEosa2EsQWEsamEsTWEsTmEsUGEsRmEsSWEsTGEsUmEsemEsQmEsVmEsSGEsVWEsV2EsR2EsS2EscWEsSmEsWWEsWGEsWmEsUWEsJGEsZW8sdG8sbm8scm8saW8sYW8sb28sc28sY28sbG8sdW89bygoKCk9PntzdD00LGN0PTAsbHQ9MSx1dD0yLGR0PTAsZnQ9MSxwdD0yLG10PTMsaHQ9MjU4LGd0PTI5LF90PTI1Nix2dD1fdCsxK2d0LHl0PTMwLGJ0PTE5LHh0PTIqdnQrMSxTdD0xNSxDdD0xNix3dD03LFR0PTI1NixFdD0xNixEdD0xNyxPdD0xOCxrdD1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSksQXQ9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdKSxqdD1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10pLE10PW5ldyBVaW50OEFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksTnQ9NTEyLFB0PUFycmF5KCh2dCsyKSoyKSxLZShQdCksRnQ9QXJyYXkoeXQqMiksS2UoRnQpLEl0PUFycmF5KE50KSxLZShJdCksTHQ9QXJyYXkoaHQtbXQrMSksS2UoTHQpLFJ0PUFycmF5KGd0KSxLZShSdCksenQ9QXJyYXkoeXQpLEtlKHp0KSxVdD1lPT5lPDI1Nj9JdFtlXTpJdFsyNTYrKGU+Pj43KV0sV3Q9KGUsdCk9PntlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10JjI1NSxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10Pj4+OCYyNTV9LEd0PShlLHQsbik9PntlLmJpX3ZhbGlkPkN0LW4/KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LFd0KGUsZS5iaV9idWYpLGUuYmlfYnVmPXQ+PkN0LWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9bi1DdCk6KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LGUuYmlfdmFsaWQrPW4pfSxLdD0oZSx0LG4pPT57R3QoZSxuW3QqMl0sblt0KjIrMV0pfSxxdD0oZSx0KT0+e2xldCBuPTA7ZG8gbnw9ZSYxLGU+Pj49MSxuPDw9MTt3aGlsZSgtLXQ+MCk7cmV0dXJuIG4+Pj4xfSxKdD1lPT57ZS5iaV92YWxpZD09PTE2PyhXdChlLGUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MCk6ZS5iaV92YWxpZD49OCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmJjI1NSxlLmJpX2J1Zj4+PTgsZS5iaV92YWxpZC09OCl9LFl0PShlLHQpPT57bGV0IG49dC5keW5fdHJlZSxyPXQubWF4X2NvZGUsaT10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxhPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxvPXQuc3RhdF9kZXNjLmV4dHJhX2JpdHMscz10LnN0YXRfZGVzYy5leHRyYV9iYXNlLGM9dC5zdGF0X2Rlc2MubWF4X2xlbmd0aCxsLHUsZCxmLHAsbSxoPTA7Zm9yKGY9MDtmPD1TdDtmKyspZS5ibF9jb3VudFtmXT0wO2ZvcihuW2UuaGVhcFtlLmhlYXBfbWF4XSoyKzFdPTAsbD1lLmhlYXBfbWF4KzE7bDx4dDtsKyspdT1lLmhlYXBbbF0sZj1uW25bdSoyKzFdKjIrMV0rMSxmPmMmJihmPWMsaCsrKSxuW3UqMisxXT1mLCEodT5yKSYmKGUuYmxfY291bnRbZl0rKyxwPTAsdT49cyYmKHA9b1t1LXNdKSxtPW5bdSoyXSxlLm9wdF9sZW4rPW0qKGYrcCksYSYmKGUuc3RhdGljX2xlbis9bSooaVt1KjIrMV0rcCkpKTtpZihoIT09MCl7ZG97Zm9yKGY9Yy0xO2UuYmxfY291bnRbZl09PT0wOylmLS07ZS5ibF9jb3VudFtmXS0tLGUuYmxfY291bnRbZisxXSs9MixlLmJsX2NvdW50W2NdLS0saC09Mn13aGlsZShoPjApO2ZvcihmPWM7ZiE9PTA7Zi0tKWZvcih1PWUuYmxfY291bnRbZl07dSE9PTA7KWQ9ZS5oZWFwWy0tbF0sIShkPnIpJiYobltkKjIrMV0hPT1mJiYoZS5vcHRfbGVuKz0oZi1uW2QqMisxXSkqbltkKjJdLG5bZCoyKzFdPWYpLHUtLSl9fSxYdD0oZSx0LG4pPT57bGV0IHI9QXJyYXkoU3QrMSksaT0wLGEsbztmb3IoYT0xO2E8PVN0O2ErKylpPWkrblthLTFdPDwxLHJbYV09aTtmb3Iobz0wO288PXQ7bysrKXtsZXQgdD1lW28qMisxXTt0IT09MCYmKGVbbyoyXT1xdChyW3RdKyssdCkpfX0sWnQ9KCk9PntsZXQgZSx0LG4scixpLGE9QXJyYXkoU3QrMSk7Zm9yKG49MCxyPTA7cjxndC0xO3IrKylmb3IoUnRbcl09bixlPTA7ZTwxPDxrdFtyXTtlKyspTHRbbisrXT1yO2ZvcihMdFtuLTFdPXIsaT0wLHI9MDtyPDE2O3IrKylmb3IoenRbcl09aSxlPTA7ZTwxPDxBdFtyXTtlKyspSXRbaSsrXT1yO2ZvcihpPj49NztyPHl0O3IrKylmb3IoenRbcl09aTw8NyxlPTA7ZTwxPDxBdFtyXS03O2UrKylJdFsyNTYrIGkrK109cjtmb3IodD0wO3Q8PVN0O3QrKylhW3RdPTA7Zm9yKGU9MDtlPD0xNDM7KVB0W2UqMisxXT04LGUrKyxhWzhdKys7Zm9yKDtlPD0yNTU7KVB0W2UqMisxXT05LGUrKyxhWzldKys7Zm9yKDtlPD0yNzk7KVB0W2UqMisxXT03LGUrKyxhWzddKys7Zm9yKDtlPD0yODc7KVB0W2UqMisxXT04LGUrKyxhWzhdKys7Zm9yKFh0KFB0LHZ0KzEsYSksZT0wO2U8eXQ7ZSsrKUZ0W2UqMisxXT01LEZ0W2UqMl09cXQoZSw1KTtCdD1uZXcgcWUoUHQsa3QsX3QrMSx2dCxTdCksVnQ9bmV3IHFlKEZ0LEF0LDAseXQsU3QpLEh0PW5ldyBxZShbXSxqdCwwLGJ0LHd0KX0sUXQ9ZT0+e2xldCB0O2Zvcih0PTA7dDx2dDt0KyspZS5keW5fbHRyZWVbdCoyXT0wO2Zvcih0PTA7dDx5dDt0KyspZS5keW5fZHRyZWVbdCoyXT0wO2Zvcih0PTA7dDxidDt0KyspZS5ibF90cmVlW3QqMl09MDtlLmR5bl9sdHJlZVtUdCoyXT0xLGUub3B0X2xlbj1lLnN0YXRpY19sZW49MCxlLnN5bV9uZXh0PWUubWF0Y2hlcz0wfSwkdD1lPT57ZS5iaV92YWxpZD44P1d0KGUsZS5iaV9idWYpOmUuYmlfdmFsaWQ+MCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH0sZW49KGUsdCxuLHIpPT57bGV0IGk9dCoyLGE9bioyO3JldHVybiBlW2ldPGVbYV18fGVbaV09PT1lW2FdJiZyW3RdPD1yW25dfSx0bj0oZSx0LG4pPT57bGV0IHI9ZS5oZWFwW25dLGk9bjw8MTtmb3IoO2k8PWUuaGVhcF9sZW4mJihpPGUuaGVhcF9sZW4mJmVuKHQsZS5oZWFwW2krMV0sZS5oZWFwW2ldLGUuZGVwdGgpJiZpKyssIWVuKHQscixlLmhlYXBbaV0sZS5kZXB0aCkpOyllLmhlYXBbbl09ZS5oZWFwW2ldLG49aSxpPDw9MTtlLmhlYXBbbl09cn0sbm49KGUsdCxuKT0+e2xldCByLGksYT0wLG8scztpZihlLnN5bV9uZXh0IT09MClkbyByPWUucGVuZGluZ19idWZbZS5zeW1fYnVmKyBhKytdJjI1NSxyKz0oZS5wZW5kaW5nX2J1ZltlLnN5bV9idWYrIGErK10mMjU1KTw8OCxpPWUucGVuZGluZ19idWZbZS5zeW1fYnVmKyBhKytdLHI9PT0wP0t0KGUsaSx0KToobz1MdFtpXSxLdChlLG8rX3QrMSx0KSxzPWt0W29dLHMhPT0wJiYoaS09UnRbb10sR3QoZSxpLHMpKSxyLS0sbz1VdChyKSxLdChlLG8sbikscz1BdFtvXSxzIT09MCYmKHItPXp0W29dLEd0KGUscixzKSkpO3doaWxlKGE8ZS5zeW1fbmV4dCk7S3QoZSxUdCx0KX0scm49KGUsdCk9PntsZXQgbj10LmR5bl90cmVlLHI9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsaT10LnN0YXRfZGVzYy5oYXNfc3RyZWUsYT10LnN0YXRfZGVzYy5lbGVtcyxvLHMsYz0tMSxsO2ZvcihlLmhlYXBfbGVuPTAsZS5oZWFwX21heD14dCxvPTA7bzxhO28rKyluW28qMl09PT0wP25bbyoyKzFdPTA6KGUuaGVhcFsrK2UuaGVhcF9sZW5dPWM9byxlLmRlcHRoW29dPTApO2Zvcig7ZS5oZWFwX2xlbjwyOylsPWUuaGVhcFsrK2UuaGVhcF9sZW5dPWM8Mj8rK2M6MCxuW2wqMl09MSxlLmRlcHRoW2xdPTAsZS5vcHRfbGVuLS0saSYmKGUuc3RhdGljX2xlbi09cltsKjIrMV0pO2Zvcih0Lm1heF9jb2RlPWMsbz1lLmhlYXBfbGVuPj4xO28+PTE7by0tKXRuKGUsbixvKTtsPWE7ZG8gbz1lLmhlYXBbMV0sZS5oZWFwWzFdPWUuaGVhcFtlLmhlYXBfbGVuLS1dLHRuKGUsbiwxKSxzPWUuaGVhcFsxXSxlLmhlYXBbLS1lLmhlYXBfbWF4XT1vLGUuaGVhcFstLWUuaGVhcF9tYXhdPXMsbltsKjJdPW5bbyoyXStuW3MqMl0sZS5kZXB0aFtsXT0oZS5kZXB0aFtvXT49ZS5kZXB0aFtzXT9lLmRlcHRoW29dOmUuZGVwdGhbc10pKzEsbltvKjIrMV09bltzKjIrMV09bCxlLmhlYXBbMV09bCsrLHRuKGUsbiwxKTt3aGlsZShlLmhlYXBfbGVuPj0yKTtlLmhlYXBbLS1lLmhlYXBfbWF4XT1lLmhlYXBbMV0sWXQoZSx0KSxYdChuLGMsZS5ibF9jb3VudCl9LGFuPShlLHQsbik9PntsZXQgcixpPS0xLGEsbz10WzFdLHM9MCxjPTcsbD00O2ZvcihvPT09MCYmKGM9MTM4LGw9MyksdFsobisxKSoyKzFdPTY1NTM1LHI9MDtyPD1uO3IrKylhPW8sbz10WyhyKzEpKjIrMV0sISgrK3M8YyYmYT09PW8pJiYoczxsP2UuYmxfdHJlZVthKjJdKz1zOmE9PT0wP3M8PTEwP2UuYmxfdHJlZVtEdCoyXSsrOmUuYmxfdHJlZVtPdCoyXSsrOihhIT09aSYmZS5ibF90cmVlW2EqMl0rKyxlLmJsX3RyZWVbRXQqMl0rKykscz0wLGk9YSxvPT09MD8oYz0xMzgsbD0zKTphPT09bz8oYz02LGw9Myk6KGM9NyxsPTQpKX0sb249KGUsdCxuKT0+e2xldCByLGk9LTEsYSxvPXRbMV0scz0wLGM9NyxsPTQ7Zm9yKG89PT0wJiYoYz0xMzgsbD0zKSxyPTA7cjw9bjtyKyspaWYoYT1vLG89dFsocisxKSoyKzFdLCEoKytzPGMmJmE9PT1vKSl7aWYoczxsKWRvIEt0KGUsYSxlLmJsX3RyZWUpO3doaWxlKC0tcyE9PTApO2Vsc2UgYT09PTA/czw9MTA/KEt0KGUsRHQsZS5ibF90cmVlKSxHdChlLHMtMywzKSk6KEt0KGUsT3QsZS5ibF90cmVlKSxHdChlLHMtMTEsNykpOihhIT09aSYmKEt0KGUsYSxlLmJsX3RyZWUpLHMtLSksS3QoZSxFdCxlLmJsX3RyZWUpLEd0KGUscy0zLDIpKTtzPTAsaT1hLG89PT0wPyhjPTEzOCxsPTMpOmE9PT1vPyhjPTYsbD0zKTooYz03LGw9NCl9fSxzbj1lPT57bGV0IHQ7Zm9yKGFuKGUsZS5keW5fbHRyZWUsZS5sX2Rlc2MubWF4X2NvZGUpLGFuKGUsZS5keW5fZHRyZWUsZS5kX2Rlc2MubWF4X2NvZGUpLHJuKGUsZS5ibF9kZXNjKSx0PWJ0LTE7dD49MyYmZS5ibF90cmVlW010W3RdKjIrMV09PT0wO3QtLSk7cmV0dXJuIGUub3B0X2xlbis9MyoodCsxKSs1KzUrNCx0fSxjbj0oZSx0LG4scik9PntsZXQgaTtmb3IoR3QoZSx0LTI1Nyw1KSxHdChlLG4tMSw1KSxHdChlLHItNCw0KSxpPTA7aTxyO2krKylHdChlLGUuYmxfdHJlZVtNdFtpXSoyKzFdLDMpO29uKGUsZS5keW5fbHRyZWUsdC0xKSxvbihlLGUuZHluX2R0cmVlLG4tMSl9LGxuPWU9PntsZXQgdD00MDkzNjI0NDQ3LG47Zm9yKG49MDtuPD0zMTtuKyssdD4+Pj0xKWlmKHQmMSYmZS5keW5fbHRyZWVbbioyXSE9PTApcmV0dXJuIGN0O2lmKGUuZHluX2x0cmVlWzE4XSE9PTB8fGUuZHluX2x0cmVlWzIwXSE9PTB8fGUuZHluX2x0cmVlWzI2XSE9PTApcmV0dXJuIGx0O2ZvcihuPTMyO248X3Q7bisrKWlmKGUuZHluX2x0cmVlW24qMl0hPT0wKXJldHVybiBsdDtyZXR1cm4gY3R9LHVuPSExLGRuPWU9Pnt1bnx8PShadCgpLCEwKSxlLmxfZGVzYz1uZXcgSmUoZS5keW5fbHRyZWUsQnQpLGUuZF9kZXNjPW5ldyBKZShlLmR5bl9kdHJlZSxWdCksZS5ibF9kZXNjPW5ldyBKZShlLmJsX3RyZWUsSHQpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wLFF0KGUpfSxmbj0oZSx0LG4scik9PntHdChlLChkdDw8MSkrICshIXIsMyksJHQoZSksV3QoZSxuKSxXdChlLH5uKSxuJiZlLnBlbmRpbmdfYnVmLnNldChlLndpbmRvdy5zdWJhcnJheSh0LHQrbiksZS5wZW5kaW5nKSxlLnBlbmRpbmcrPW59LHBuPWU9PntHdChlLGZ0PDwxLDMpLEt0KGUsVHQsUHQpLEp0KGUpfSxtbj0oZSx0LG4scik9PntsZXQgaSxhLG89MDtlLmxldmVsPjA/KGUuc3RybS5kYXRhX3R5cGU9PT11dCYmKGUuc3RybS5kYXRhX3R5cGU9bG4oZSkpLHJuKGUsZS5sX2Rlc2MpLHJuKGUsZS5kX2Rlc2MpLG89c24oZSksaT1lLm9wdF9sZW4rMys3Pj4+MyxhPWUuc3RhdGljX2xlbiszKzc+Pj4zLGE8PWkmJihpPWEpKTppPWE9bis1LG4rNDw9aSYmdCE9PS0xP2ZuKGUsdCxuLHIpOmUuc3RyYXRlZ3k9PT1zdHx8YT09PWk/KEd0KGUsKGZ0PDwxKSsgKyEhciwzKSxubihlLFB0LEZ0KSk6KEd0KGUsKHB0PDwxKSsgKyEhciwzKSxjbihlLGUubF9kZXNjLm1heF9jb2RlKzEsZS5kX2Rlc2MubWF4X2NvZGUrMSxvKzEpLG5uKGUsZS5keW5fbHRyZWUsZS5keW5fZHRyZWUpKSxRdChlKSxyJiYkdChlKX0saG49KGUsdCxuKT0+KGUucGVuZGluZ19idWZbZS5zeW1fYnVmKyBlLnN5bV9uZXh0KytdPXQsZS5wZW5kaW5nX2J1ZltlLnN5bV9idWYrIGUuc3ltX25leHQrK109dD4+OCxlLnBlbmRpbmdfYnVmW2Uuc3ltX2J1ZisgZS5zeW1fbmV4dCsrXT1uLHQ9PT0wP2UuZHluX2x0cmVlW24qMl0rKzooZS5tYXRjaGVzKyssdC0tLGUuZHluX2x0cmVlWyhMdFtuXStfdCsxKSoyXSsrLGUuZHluX2R0cmVlW1V0KHQpKjJdKyspLGUuc3ltX25leHQ9PT1lLnN5bV9lbmQpLGduPXtfdHJfaW5pdDpkbixfdHJfc3RvcmVkX2Jsb2NrOmZuLF90cl9mbHVzaF9ibG9jazptbixfdHJfdGFsbHk6aG4sX3RyX2FsaWduOnBufSxfbj0oZSx0LG4scik9PntsZXQgaT1lJjY1NTM1fDAsYT1lPj4+MTYmNjU1MzV8MCxvPTA7Zm9yKDtuIT09MDspe289bj4yZTM/MmUzOm4sbi09bztkbyBpPWkrdFtyKytdfDAsYT1hK2l8MDt3aGlsZSgtLW8pO2klPTY1NTIxLGElPTY1NTIxfXJldHVybiBpfGE8PDE2fDB9LHZuPV9uLHluPSgpPT57bGV0IGUsdD1bXTtmb3IodmFyIG49MDtuPDI1NjtuKyspe2U9bjtmb3IodmFyIHI9MDtyPDg7cisrKWU9ZSYxPzM5ODgyOTIzODReZT4+PjE6ZT4+PjE7dFtuXT1lfXJldHVybiB0fSxibj1uZXcgVWludDMyQXJyYXkoeW4oKSkseG49KGUsdCxuLHIpPT57bGV0IGk9Ym4sYT1yK247ZV49LTE7Zm9yKGxldCBuPXI7bjxhO24rKyllPWU+Pj44XmlbKGVedFtuXSkmMjU1XTtyZXR1cm4gZV4tMX0sU249eG4sQ249ezI6YG5lZWQgZGljdGlvbmFyeWAsMTpgc3RyZWFtIGVuZGAsMDpgYCwiLTEiOmBmaWxlIGVycm9yYCwiLTIiOmBzdHJlYW0gZXJyb3JgLCItMyI6YGRhdGEgZXJyb3JgLCItNCI6YGluc3VmZmljaWVudCBtZW1vcnlgLCItNSI6YGJ1ZmZlciBlcnJvcmAsIi02IjpgaW5jb21wYXRpYmxlIHZlcnNpb25gfSx3bj17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX01FTV9FUlJPUjotNCxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fSx7X3RyX2luaXQ6VG4sX3RyX3N0b3JlZF9ibG9jazpFbixfdHJfZmx1c2hfYmxvY2s6RG4sX3RyX3RhbGx5Ok9uLF90cl9hbGlnbjprbn09Z24se1pfTk9fRkxVU0g6QW4sWl9QQVJUSUFMX0ZMVVNIOmpuLFpfRlVMTF9GTFVTSDpNbixaX0ZJTklTSDpObixaX0JMT0NLOlBuLFpfT0s6Rm4sWl9TVFJFQU1fRU5EOkluLFpfU1RSRUFNX0VSUk9SOkxuLFpfREFUQV9FUlJPUjpSbixaX0JVRl9FUlJPUjp6bixaX0RFRkFVTFRfQ09NUFJFU1NJT046Qm4sWl9GSUxURVJFRDpWbixaX0hVRkZNQU5fT05MWTpIbixaX1JMRTpVbixaX0ZJWEVEOlduLFpfREVGQVVMVF9TVFJBVEVHWTpHbixaX1VOS05PV046S24sWl9ERUZMQVRFRDpxbn09d24sSm49OSxZbj0xNSxYbj04LFpuPTI4NixRbj0zMCwkbj0xOSxlcj0yKlpuKzEsdHI9MTUscT0zLG5yPTI1OCxycj1ucitxKzEsaXI9MzIsYXI9NDIsb3I9NTcsc3I9NjksY3I9NzMsbHI9OTEsdXI9MTAzLGRyPTExMyxmcj02NjYscHI9MSxtcj0yLGhyPTMsZ3I9NCxfcj0zLHZyPShlLHQpPT4oZS5tc2c9Q25bdF0sdCkseXI9ZT0+ZSoyLShlPjQ/OTowKSxicj1lPT57bGV0IHQ9ZS5sZW5ndGg7Zm9yKDstLXQ+PTA7KWVbdF09MH0seHI9ZT0+e2xldCB0LG4scixpPWUud19zaXplO3Q9ZS5oYXNoX3NpemUscj10O2RvIG49ZS5oZWFkWy0tcl0sZS5oZWFkW3JdPW4+PWk/bi1pOjA7d2hpbGUoLS10KTt0PWkscj10O2RvIG49ZS5wcmV2Wy0tcl0sZS5wcmV2W3JdPW4+PWk/bi1pOjA7d2hpbGUoLS10KX0sU3I9KGUsdCxuKT0+KHQ8PGUuaGFzaF9zaGlmdF5uKSZlLmhhc2hfbWFzayxDcj1Tcix3cj1lPT57bGV0IHQ9ZS5zdGF0ZSxuPXQucGVuZGluZztuPmUuYXZhaWxfb3V0JiYobj1lLmF2YWlsX291dCksbiE9PTAmJihlLm91dHB1dC5zZXQodC5wZW5kaW5nX2J1Zi5zdWJhcnJheSh0LnBlbmRpbmdfb3V0LHQucGVuZGluZ19vdXQrbiksZS5uZXh0X291dCksZS5uZXh0X291dCs9bix0LnBlbmRpbmdfb3V0Kz1uLGUudG90YWxfb3V0Kz1uLGUuYXZhaWxfb3V0LT1uLHQucGVuZGluZy09bix0LnBlbmRpbmc9PT0wJiYodC5wZW5kaW5nX291dD0wKSl9LFRyPShlLHQpPT57RG4oZSxlLmJsb2NrX3N0YXJ0Pj0wP2UuYmxvY2tfc3RhcnQ6LTEsZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0LHQpLGUuYmxvY2tfc3RhcnQ9ZS5zdHJzdGFydCx3cihlLnN0cm0pfSxFcj0oZSx0KT0+e2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXR9LERyPShlLHQpPT57ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQmMjU1fSxPcj0oZSx0LG4scik9PntsZXQgaT1lLmF2YWlsX2luO3JldHVybiBpPnImJihpPXIpLGk9PT0wPzA6KGUuYXZhaWxfaW4tPWksdC5zZXQoZS5pbnB1dC5zdWJhcnJheShlLm5leHRfaW4sZS5uZXh0X2luK2kpLG4pLGUuc3RhdGUud3JhcD09PTE/ZS5hZGxlcj12bihlLmFkbGVyLHQsaSxuKTplLnN0YXRlLndyYXA9PT0yJiYoZS5hZGxlcj1TbihlLmFkbGVyLHQsaSxuKSksZS5uZXh0X2luKz1pLGUudG90YWxfaW4rPWksaSl9LGtyPShlLHQpPT57bGV0IG49ZS5tYXhfY2hhaW5fbGVuZ3RoLHI9ZS5zdHJzdGFydCxpLGEsbz1lLnByZXZfbGVuZ3RoLHM9ZS5uaWNlX21hdGNoLGM9ZS5zdHJzdGFydD5lLndfc2l6ZS1ycj9lLnN0cnN0YXJ0LShlLndfc2l6ZS1ycik6MCxsPWUud2luZG93LHU9ZS53X21hc2ssZD1lLnByZXYsZj1lLnN0cnN0YXJ0K25yLHA9bFtyK28tMV0sbT1sW3Irb107ZS5wcmV2X2xlbmd0aD49ZS5nb29kX21hdGNoJiYobj4+PTIpLHM+ZS5sb29rYWhlYWQmJihzPWUubG9va2FoZWFkKTtkb3tpZihpPXQsbFtpK29dIT09bXx8bFtpK28tMV0hPT1wfHxsW2ldIT09bFtyXXx8bFsrK2ldIT09bFtyKzFdKWNvbnRpbnVlO3IrPTIsaSsrO2RvO3doaWxlKGxbKytyXT09PWxbKytpXSYmbFsrK3JdPT09bFsrK2ldJiZsWysrcl09PT1sWysraV0mJmxbKytyXT09PWxbKytpXSYmbFsrK3JdPT09bFsrK2ldJiZsWysrcl09PT1sWysraV0mJmxbKytyXT09PWxbKytpXSYmbFsrK3JdPT09bFsrK2ldJiZyPGYpO2lmKGE9bnItKGYtcikscj1mLW5yLGE+byl7aWYoZS5tYXRjaF9zdGFydD10LG89YSxhPj1zKWJyZWFrO3A9bFtyK28tMV0sbT1sW3Irb119fXdoaWxlKCh0PWRbdCZ1XSk+YyYmLS1uIT09MCk7cmV0dXJuIG88PWUubG9va2FoZWFkP286ZS5sb29rYWhlYWR9LEFyPWU9PntsZXQgdD1lLndfc2l6ZSxuLHIsaTtkb3tpZihyPWUud2luZG93X3NpemUtZS5sb29rYWhlYWQtZS5zdHJzdGFydCxlLnN0cnN0YXJ0Pj10Kyh0LXJyKSYmKGUud2luZG93LnNldChlLndpbmRvdy5zdWJhcnJheSh0LHQrdC1yKSwwKSxlLm1hdGNoX3N0YXJ0LT10LGUuc3Ryc3RhcnQtPXQsZS5ibG9ja19zdGFydC09dCxlLmluc2VydD5lLnN0cnN0YXJ0JiYoZS5pbnNlcnQ9ZS5zdHJzdGFydCkseHIoZSkscis9dCksZS5zdHJtLmF2YWlsX2luPT09MClicmVhaztpZihuPU9yKGUuc3RybSxlLndpbmRvdyxlLnN0cnN0YXJ0K2UubG9va2FoZWFkLHIpLGUubG9va2FoZWFkKz1uLGUubG9va2FoZWFkK2UuaW5zZXJ0Pj1xKWZvcihpPWUuc3Ryc3RhcnQtZS5pbnNlcnQsZS5pbnNfaD1lLndpbmRvd1tpXSxlLmluc19oPUNyKGUsZS5pbnNfaCxlLndpbmRvd1tpKzFdKTtlLmluc2VydCYmKGUuaW5zX2g9Q3IoZSxlLmluc19oLGUud2luZG93W2krcS0xXSksZS5wcmV2W2kmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09aSxpKyssZS5pbnNlcnQtLSwhKGUubG9va2FoZWFkK2UuaW5zZXJ0PHEpKTspO313aGlsZShlLmxvb2thaGVhZDxyciYmZS5zdHJtLmF2YWlsX2luIT09MCl9LGpyPShlLHQpPT57bGV0IG49ZS5wZW5kaW5nX2J1Zl9zaXplLTU+ZS53X3NpemU/ZS53X3NpemU6ZS5wZW5kaW5nX2J1Zl9zaXplLTUscixpLGEsbz0wLHM9ZS5zdHJtLmF2YWlsX2luO2Rve2lmKHI9NjU1MzUsYT1lLmJpX3ZhbGlkKzQyPj4zLGUuc3RybS5hdmFpbF9vdXQ8YXx8KGE9ZS5zdHJtLmF2YWlsX291dC1hLGk9ZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0LHI+aStlLnN0cm0uYXZhaWxfaW4mJihyPWkrZS5zdHJtLmF2YWlsX2luKSxyPmEmJihyPWEpLHI8biYmKHI9PT0wJiZ0IT09Tm58fHQ9PT1Bbnx8ciE9PWkrZS5zdHJtLmF2YWlsX2luKSkpYnJlYWs7bz0rKHQ9PT1ObiYmcj09PWkrZS5zdHJtLmF2YWlsX2luKSxFbihlLDAsMCxvKSxlLnBlbmRpbmdfYnVmW2UucGVuZGluZy00XT1yLGUucGVuZGluZ19idWZbZS5wZW5kaW5nLTNdPXI+PjgsZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmctMl09fnIsZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmctMV09fnI+Pjgsd3IoZS5zdHJtKSxpJiYoaT5yJiYoaT1yKSxlLnN0cm0ub3V0cHV0LnNldChlLndpbmRvdy5zdWJhcnJheShlLmJsb2NrX3N0YXJ0LGUuYmxvY2tfc3RhcnQraSksZS5zdHJtLm5leHRfb3V0KSxlLnN0cm0ubmV4dF9vdXQrPWksZS5zdHJtLmF2YWlsX291dC09aSxlLnN0cm0udG90YWxfb3V0Kz1pLGUuYmxvY2tfc3RhcnQrPWksci09aSksciYmKE9yKGUuc3RybSxlLnN0cm0ub3V0cHV0LGUuc3RybS5uZXh0X291dCxyKSxlLnN0cm0ubmV4dF9vdXQrPXIsZS5zdHJtLmF2YWlsX291dC09cixlLnN0cm0udG90YWxfb3V0Kz1yKX13aGlsZShvPT09MCk7cmV0dXJuIHMtPWUuc3RybS5hdmFpbF9pbixzJiYocz49ZS53X3NpemU/KGUubWF0Y2hlcz0yLGUud2luZG93LnNldChlLnN0cm0uaW5wdXQuc3ViYXJyYXkoZS5zdHJtLm5leHRfaW4tZS53X3NpemUsZS5zdHJtLm5leHRfaW4pLDApLGUuc3Ryc3RhcnQ9ZS53X3NpemUsZS5pbnNlcnQ9ZS5zdHJzdGFydCk6KGUud2luZG93X3NpemUtZS5zdHJzdGFydDw9cyYmKGUuc3Ryc3RhcnQtPWUud19zaXplLGUud2luZG93LnNldChlLndpbmRvdy5zdWJhcnJheShlLndfc2l6ZSxlLndfc2l6ZStlLnN0cnN0YXJ0KSwwKSxlLm1hdGNoZXM8MiYmZS5tYXRjaGVzKyssZS5pbnNlcnQ+ZS5zdHJzdGFydCYmKGUuaW5zZXJ0PWUuc3Ryc3RhcnQpKSxlLndpbmRvdy5zZXQoZS5zdHJtLmlucHV0LnN1YmFycmF5KGUuc3RybS5uZXh0X2luLXMsZS5zdHJtLm5leHRfaW4pLGUuc3Ryc3RhcnQpLGUuc3Ryc3RhcnQrPXMsZS5pbnNlcnQrPXM+ZS53X3NpemUtZS5pbnNlcnQ/ZS53X3NpemUtZS5pbnNlcnQ6cyksZS5ibG9ja19zdGFydD1lLnN0cnN0YXJ0KSxlLmhpZ2hfd2F0ZXI8ZS5zdHJzdGFydCYmKGUuaGlnaF93YXRlcj1lLnN0cnN0YXJ0KSxvP2dyOnQhPT1BbiYmdCE9PU5uJiZlLnN0cm0uYXZhaWxfaW49PT0wJiZlLnN0cnN0YXJ0PT09ZS5ibG9ja19zdGFydD9tcjooYT1lLndpbmRvd19zaXplLWUuc3Ryc3RhcnQsZS5zdHJtLmF2YWlsX2luPmEmJmUuYmxvY2tfc3RhcnQ+PWUud19zaXplJiYoZS5ibG9ja19zdGFydC09ZS53X3NpemUsZS5zdHJzdGFydC09ZS53X3NpemUsZS53aW5kb3cuc2V0KGUud2luZG93LnN1YmFycmF5KGUud19zaXplLGUud19zaXplK2Uuc3Ryc3RhcnQpLDApLGUubWF0Y2hlczwyJiZlLm1hdGNoZXMrKyxhKz1lLndfc2l6ZSxlLmluc2VydD5lLnN0cnN0YXJ0JiYoZS5pbnNlcnQ9ZS5zdHJzdGFydCkpLGE+ZS5zdHJtLmF2YWlsX2luJiYoYT1lLnN0cm0uYXZhaWxfaW4pLGEmJihPcihlLnN0cm0sZS53aW5kb3csZS5zdHJzdGFydCxhKSxlLnN0cnN0YXJ0Kz1hLGUuaW5zZXJ0Kz1hPmUud19zaXplLWUuaW5zZXJ0P2Uud19zaXplLWUuaW5zZXJ0OmEpLGUuaGlnaF93YXRlcjxlLnN0cnN0YXJ0JiYoZS5oaWdoX3dhdGVyPWUuc3Ryc3RhcnQpLGE9ZS5iaV92YWxpZCs0Mj4+MyxhPWUucGVuZGluZ19idWZfc2l6ZS1hPjY1NTM1PzY1NTM1OmUucGVuZGluZ19idWZfc2l6ZS1hLG49YT5lLndfc2l6ZT9lLndfc2l6ZTphLGk9ZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0LChpPj1ufHwoaXx8dD09PU5uKSYmdCE9PUFuJiZlLnN0cm0uYXZhaWxfaW49PT0wJiZpPD1hKSYmKHI9aT5hP2E6aSxvPSsodD09PU5uJiZlLnN0cm0uYXZhaWxfaW49PT0wJiZyPT09aSksRW4oZSxlLmJsb2NrX3N0YXJ0LHIsbyksZS5ibG9ja19zdGFydCs9cix3cihlLnN0cm0pKSxvP2hyOnByKX0sTXI9KGUsdCk9PntsZXQgbixyO2Zvcig7Oyl7aWYoZS5sb29rYWhlYWQ8cnIpe2lmKEFyKGUpLGUubG9va2FoZWFkPHJyJiZ0PT09QW4pcmV0dXJuIHByO2lmKGUubG9va2FoZWFkPT09MClicmVha31pZihuPTAsZS5sb29rYWhlYWQ+PXEmJihlLmluc19oPUNyKGUsZS5pbnNfaCxlLndpbmRvd1tlLnN0cnN0YXJ0K3EtMV0pLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCksbiE9PTAmJmUuc3Ryc3RhcnQtbjw9ZS53X3NpemUtcnImJihlLm1hdGNoX2xlbmd0aD1rcihlLG4pKSxlLm1hdGNoX2xlbmd0aD49cSlpZihyPU9uKGUsZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0LGUubWF0Y2hfbGVuZ3RoLXEpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aDw9ZS5tYXhfbGF6eV9tYXRjaCYmZS5sb29rYWhlYWQ+PXEpe2UubWF0Y2hfbGVuZ3RoLS07ZG8gZS5zdHJzdGFydCsrLGUuaW5zX2g9Q3IoZSxlLmluc19oLGUud2luZG93W2Uuc3Ryc3RhcnQrcS0xXSksbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0O3doaWxlKC0tZS5tYXRjaF9sZW5ndGghPT0wKTtlLnN0cnN0YXJ0Kyt9ZWxzZSBlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wLGUuaW5zX2g9ZS53aW5kb3dbZS5zdHJzdGFydF0sZS5pbnNfaD1DcihlLGUuaW5zX2gsZS53aW5kb3dbZS5zdHJzdGFydCsxXSk7ZWxzZSByPU9uKGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0Kys7aWYociYmKFRyKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gcHJ9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8cS0xP2Uuc3Ryc3RhcnQ6cS0xLHQ9PT1Obj8oVHIoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/aHI6Z3IpOmUuc3ltX25leHQmJihUcihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/cHI6bXJ9LE5yPShlLHQpPT57bGV0IG4scixpO2Zvcig7Oyl7aWYoZS5sb29rYWhlYWQ8cnIpe2lmKEFyKGUpLGUubG9va2FoZWFkPHJyJiZ0PT09QW4pcmV0dXJuIHByO2lmKGUubG9va2FoZWFkPT09MClicmVha31pZihuPTAsZS5sb29rYWhlYWQ+PXEmJihlLmluc19oPUNyKGUsZS5pbnNfaCxlLndpbmRvd1tlLnN0cnN0YXJ0K3EtMV0pLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCksZS5wcmV2X2xlbmd0aD1lLm1hdGNoX2xlbmd0aCxlLnByZXZfbWF0Y2g9ZS5tYXRjaF9zdGFydCxlLm1hdGNoX2xlbmd0aD1xLTEsbiE9PTAmJmUucHJldl9sZW5ndGg8ZS5tYXhfbGF6eV9tYXRjaCYmZS5zdHJzdGFydC1uPD1lLndfc2l6ZS1yciYmKGUubWF0Y2hfbGVuZ3RoPWtyKGUsbiksZS5tYXRjaF9sZW5ndGg8PTUmJihlLnN0cmF0ZWd5PT09Vm58fGUubWF0Y2hfbGVuZ3RoPT09cSYmZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0PjQwOTYpJiYoZS5tYXRjaF9sZW5ndGg9cS0xKSksZS5wcmV2X2xlbmd0aD49cSYmZS5tYXRjaF9sZW5ndGg8PWUucHJldl9sZW5ndGgpe2k9ZS5zdHJzdGFydCtlLmxvb2thaGVhZC1xLHI9T24oZSxlLnN0cnN0YXJ0LTEtZS5wcmV2X21hdGNoLGUucHJldl9sZW5ndGgtcSksZS5sb29rYWhlYWQtPWUucHJldl9sZW5ndGgtMSxlLnByZXZfbGVuZ3RoLT0yO2RvKytlLnN0cnN0YXJ0PD1pJiYoZS5pbnNfaD1DcihlLGUuaW5zX2gsZS53aW5kb3dbZS5zdHJzdGFydCtxLTFdKSxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpO3doaWxlKC0tZS5wcmV2X2xlbmd0aCE9PTApO2lmKGUubWF0Y2hfYXZhaWxhYmxlPTAsZS5tYXRjaF9sZW5ndGg9cS0xLGUuc3Ryc3RhcnQrKyxyJiYoVHIoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBwcn1lbHNlIGlmKGUubWF0Y2hfYXZhaWxhYmxlKXtpZihyPU9uKGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0LTFdKSxyJiZUcihlLCExKSxlLnN0cnN0YXJ0KyssZS5sb29rYWhlYWQtLSxlLnN0cm0uYXZhaWxfb3V0PT09MClyZXR1cm4gcHJ9ZWxzZSBlLm1hdGNoX2F2YWlsYWJsZT0xLGUuc3Ryc3RhcnQrKyxlLmxvb2thaGVhZC0tfXJldHVybiBlLm1hdGNoX2F2YWlsYWJsZSYmPShyPU9uKGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0LTFdKSwwKSxlLmluc2VydD1lLnN0cnN0YXJ0PHEtMT9lLnN0cnN0YXJ0OnEtMSx0PT09Tm4/KFRyKGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP2hyOmdyKTplLnN5bV9uZXh0JiYoVHIoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP3ByOm1yfSxQcj0oZSx0KT0+e2xldCBuLHIsaSxhLG89ZS53aW5kb3c7Zm9yKDs7KXtpZihlLmxvb2thaGVhZDw9bnIpe2lmKEFyKGUpLGUubG9va2FoZWFkPD1uciYmdD09PUFuKXJldHVybiBwcjtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxlLmxvb2thaGVhZD49cSYmZS5zdHJzdGFydD4wJiYoaT1lLnN0cnN0YXJ0LTEscj1vW2ldLHI9PT1vWysraV0mJnI9PT1vWysraV0mJnI9PT1vWysraV0pKXthPWUuc3Ryc3RhcnQrbnI7ZG87d2hpbGUocj09PW9bKytpXSYmcj09PW9bKytpXSYmcj09PW9bKytpXSYmcj09PW9bKytpXSYmcj09PW9bKytpXSYmcj09PW9bKytpXSYmcj09PW9bKytpXSYmcj09PW9bKytpXSYmaTxhKTtlLm1hdGNoX2xlbmd0aD1uci0oYS1pKSxlLm1hdGNoX2xlbmd0aD5lLmxvb2thaGVhZCYmKGUubWF0Y2hfbGVuZ3RoPWUubG9va2FoZWFkKX1pZihlLm1hdGNoX2xlbmd0aD49cT8obj1PbihlLDEsZS5tYXRjaF9sZW5ndGgtcSksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUuc3Ryc3RhcnQrPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPTApOihuPU9uKGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyspLG4mJihUcihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIHByfXJldHVybiBlLmluc2VydD0wLHQ9PT1Obj8oVHIoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/aHI6Z3IpOmUuc3ltX25leHQmJihUcihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/cHI6bXJ9LEZyPShlLHQpPT57bGV0IG47Zm9yKDs7KXtpZihlLmxvb2thaGVhZD09PTAmJihBcihlKSxlLmxvb2thaGVhZD09PTApKXtpZih0PT09QW4pcmV0dXJuIHByO2JyZWFrfWlmKGUubWF0Y2hfbGVuZ3RoPTAsbj1PbihlLDAsZS53aW5kb3dbZS5zdHJzdGFydF0pLGUubG9va2FoZWFkLS0sZS5zdHJzdGFydCsrLG4mJihUcihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIHByfXJldHVybiBlLmluc2VydD0wLHQ9PT1Obj8oVHIoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/aHI6Z3IpOmUuc3ltX25leHQmJihUcihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/cHI6bXJ9LElyPVtuZXcgWWUoMCwwLDAsMCxqciksbmV3IFllKDQsNCw4LDQsTXIpLG5ldyBZZSg0LDUsMTYsOCxNciksbmV3IFllKDQsNiwzMiwzMixNciksbmV3IFllKDQsNCwxNiwxNixOciksbmV3IFllKDgsMTYsMzIsMzIsTnIpLG5ldyBZZSg4LDE2LDEyOCwxMjgsTnIpLG5ldyBZZSg4LDMyLDEyOCwyNTYsTnIpLG5ldyBZZSgzMiwxMjgsMjU4LDEwMjQsTnIpLG5ldyBZZSgzMiwyNTgsMjU4LDQwOTYsTnIpXSxMcj1lPT57ZS53aW5kb3dfc2l6ZT0yKmUud19zaXplLGJyKGUuaGVhZCksZS5tYXhfbGF6eV9tYXRjaD1JcltlLmxldmVsXS5tYXhfbGF6eSxlLmdvb2RfbWF0Y2g9SXJbZS5sZXZlbF0uZ29vZF9sZW5ndGgsZS5uaWNlX21hdGNoPUlyW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLGUubWF4X2NoYWluX2xlbmd0aD1JcltlLmxldmVsXS5tYXhfY2hhaW4sZS5zdHJzdGFydD0wLGUuYmxvY2tfc3RhcnQ9MCxlLmxvb2thaGVhZD0wLGUuaW5zZXJ0PTAsZS5tYXRjaF9sZW5ndGg9ZS5wcmV2X2xlbmd0aD1xLTEsZS5tYXRjaF9hdmFpbGFibGU9MCxlLmluc19oPTB9LFJyPWU9PntpZighZSlyZXR1cm4gMTtsZXQgdD1lLnN0YXRlO3JldHVybisoIXR8fHQuc3RybSE9PWV8fHQuc3RhdHVzIT09YXImJnQuc3RhdHVzIT09b3ImJnQuc3RhdHVzIT09c3ImJnQuc3RhdHVzIT09Y3ImJnQuc3RhdHVzIT09bHImJnQuc3RhdHVzIT09dXImJnQuc3RhdHVzIT09ZHImJnQuc3RhdHVzIT09ZnIpfSx6cj1lPT57aWYoUnIoZSkpcmV0dXJuIHZyKGUsTG4pO2UudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1LbjtsZXQgdD1lLnN0YXRlO3JldHVybiB0LnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwPT09Mj9vcjp0LndyYXA/YXI6ZHIsZS5hZGxlcj10LndyYXA9PT0yPzA6MSx0Lmxhc3RfZmx1c2g9LTIsVG4odCksRm59LEJyPWU9PntsZXQgdD16cihlKTtyZXR1cm4gdD09PUZuJiZMcihlLnN0YXRlKSx0fSxWcj0oZSx0KT0+UnIoZSl8fGUuc3RhdGUud3JhcCE9PTI/TG46KGUuc3RhdGUuZ3poZWFkPXQsRm4pLEhyPShlLHQsbixyLGksYSk9PntpZighZSlyZXR1cm4gTG47bGV0IG89MTtpZih0PT09Qm4mJih0PTYpLHI8MD8obz0wLHI9LXIpOnI+MTUmJihvPTIsci09MTYpLGk8MXx8aT5Kbnx8biE9PXFufHxyPDh8fHI+MTV8fHQ8MHx8dD45fHxhPDB8fGE+V258fHI9PT04JiZvIT09MSlyZXR1cm4gdnIoZSxMbik7cj09PTgmJihyPTkpO2xldCBzPW5ldyBYZTtyZXR1cm4gZS5zdGF0ZT1zLHMuc3RybT1lLHMuc3RhdHVzPWFyLHMud3JhcD1vLHMuZ3poZWFkPW51bGwscy53X2JpdHM9cixzLndfc2l6ZT0xPDxzLndfYml0cyxzLndfbWFzaz1zLndfc2l6ZS0xLHMuaGFzaF9iaXRzPWkrNyxzLmhhc2hfc2l6ZT0xPDxzLmhhc2hfYml0cyxzLmhhc2hfbWFzaz1zLmhhc2hfc2l6ZS0xLHMuaGFzaF9zaGlmdD1+figocy5oYXNoX2JpdHMrcS0xKS9xKSxzLndpbmRvdz1uZXcgVWludDhBcnJheShzLndfc2l6ZSoyKSxzLmhlYWQ9bmV3IFVpbnQxNkFycmF5KHMuaGFzaF9zaXplKSxzLnByZXY9bmV3IFVpbnQxNkFycmF5KHMud19zaXplKSxzLmxpdF9idWZzaXplPTE8PGkrNixzLnBlbmRpbmdfYnVmX3NpemU9cy5saXRfYnVmc2l6ZSo0LHMucGVuZGluZ19idWY9bmV3IFVpbnQ4QXJyYXkocy5wZW5kaW5nX2J1Zl9zaXplKSxzLnN5bV9idWY9cy5saXRfYnVmc2l6ZSxzLnN5bV9lbmQ9KHMubGl0X2J1ZnNpemUtMSkqMyxzLmxldmVsPXQscy5zdHJhdGVneT1hLHMubWV0aG9kPW4sQnIoZSl9LFVyPShlLHQpPT5IcihlLHQscW4sWW4sWG4sR24pLFdyPShlLHQpPT57aWYoUnIoZSl8fHQ+UG58fHQ8MClyZXR1cm4gZT92cihlLExuKTpMbjtsZXQgbj1lLnN0YXRlO2lmKCFlLm91dHB1dHx8ZS5hdmFpbF9pbiE9PTAmJiFlLmlucHV0fHxuLnN0YXR1cz09PWZyJiZ0IT09Tm4pcmV0dXJuIHZyKGUsZS5hdmFpbF9vdXQ9PT0wP3puOkxuKTtsZXQgcj1uLmxhc3RfZmx1c2g7aWYobi5sYXN0X2ZsdXNoPXQsbi5wZW5kaW5nIT09MCl7aWYod3IoZSksZS5hdmFpbF9vdXQ9PT0wKXJldHVybiBuLmxhc3RfZmx1c2g9LTEsRm59ZWxzZSBpZihlLmF2YWlsX2luPT09MCYmeXIodCk8PXlyKHIpJiZ0IT09Tm4pcmV0dXJuIHZyKGUsem4pO2lmKG4uc3RhdHVzPT09ZnImJmUuYXZhaWxfaW4hPT0wKXJldHVybiB2cihlLHpuKTtpZihuLnN0YXR1cz09PWFyJiZuLndyYXA9PT0wJiYobi5zdGF0dXM9ZHIpLG4uc3RhdHVzPT09YXIpe2xldCB0PXFuKyhuLndfYml0cy04PDw0KTw8OCxyPS0xO2lmKHI9bi5zdHJhdGVneT49SG58fG4ubGV2ZWw8Mj8wOm4ubGV2ZWw8Nj8xOm4ubGV2ZWw9PT02PzI6Myx0fD1yPDw2LG4uc3Ryc3RhcnQhPT0wJiYodHw9aXIpLHQrPTMxLXQlMzEsRHIobix0KSxuLnN0cnN0YXJ0IT09MCYmKERyKG4sZS5hZGxlcj4+PjE2KSxEcihuLGUuYWRsZXImNjU1MzUpKSxlLmFkbGVyPTEsbi5zdGF0dXM9ZHIsd3IoZSksbi5wZW5kaW5nIT09MClyZXR1cm4gbi5sYXN0X2ZsdXNoPS0xLEZufWlmKG4uc3RhdHVzPT09b3Ipe2lmKGUuYWRsZXI9MCxFcihuLDMxKSxFcihuLDEzOSksRXIobiw4KSxuLmd6aGVhZClFcihuLCshIW4uZ3poZWFkLnRleHQrKG4uZ3poZWFkLmhjcmM/MjowKSsobi5nemhlYWQuZXh0cmE/NDowKSsobi5nemhlYWQubmFtZT84OjApKyhuLmd6aGVhZC5jb21tZW50PzE2OjApKSxFcihuLG4uZ3poZWFkLnRpbWUmMjU1KSxFcihuLG4uZ3poZWFkLnRpbWU+PjgmMjU1KSxFcihuLG4uZ3poZWFkLnRpbWU+PjE2JjI1NSksRXIobixuLmd6aGVhZC50aW1lPj4yNCYyNTUpLEVyKG4sbi5sZXZlbD09PTk/MjpuLnN0cmF0ZWd5Pj1Ibnx8bi5sZXZlbDwyPzQ6MCksRXIobixuLmd6aGVhZC5vcyYyNTUpLG4uZ3poZWFkLmV4dHJhJiZuLmd6aGVhZC5leHRyYS5sZW5ndGgmJihFcihuLG4uZ3poZWFkLmV4dHJhLmxlbmd0aCYyNTUpLEVyKG4sbi5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLG4uZ3poZWFkLmhjcmMmJihlLmFkbGVyPVNuKGUuYWRsZXIsbi5wZW5kaW5nX2J1ZixuLnBlbmRpbmcsMCkpLG4uZ3ppbmRleD0wLG4uc3RhdHVzPXNyO2Vsc2UgaWYoRXIobiwwKSxFcihuLDApLEVyKG4sMCksRXIobiwwKSxFcihuLDApLEVyKG4sbi5sZXZlbD09PTk/MjpuLnN0cmF0ZWd5Pj1Ibnx8bi5sZXZlbDwyPzQ6MCksRXIobixfciksbi5zdGF0dXM9ZHIsd3IoZSksbi5wZW5kaW5nIT09MClyZXR1cm4gbi5sYXN0X2ZsdXNoPS0xLEZufWlmKG4uc3RhdHVzPT09c3Ipe2lmKG4uZ3poZWFkLmV4dHJhKXtsZXQgdD1uLnBlbmRpbmcscj0obi5nemhlYWQuZXh0cmEubGVuZ3RoJjY1NTM1KS1uLmd6aW5kZXg7Zm9yKDtuLnBlbmRpbmcrcj5uLnBlbmRpbmdfYnVmX3NpemU7KXtsZXQgaT1uLnBlbmRpbmdfYnVmX3NpemUtbi5wZW5kaW5nO2lmKG4ucGVuZGluZ19idWYuc2V0KG4uZ3poZWFkLmV4dHJhLnN1YmFycmF5KG4uZ3ppbmRleCxuLmd6aW5kZXgraSksbi5wZW5kaW5nKSxuLnBlbmRpbmc9bi5wZW5kaW5nX2J1Zl9zaXplLG4uZ3poZWFkLmhjcmMmJm4ucGVuZGluZz50JiYoZS5hZGxlcj1TbihlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLXQsdCkpLG4uZ3ppbmRleCs9aSx3cihlKSxuLnBlbmRpbmchPT0wKXJldHVybiBuLmxhc3RfZmx1c2g9LTEsRm47dD0wLHItPWl9bGV0IGk9bmV3IFVpbnQ4QXJyYXkobi5nemhlYWQuZXh0cmEpO24ucGVuZGluZ19idWYuc2V0KGkuc3ViYXJyYXkobi5nemluZGV4LG4uZ3ppbmRleCtyKSxuLnBlbmRpbmcpLG4ucGVuZGluZys9cixuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+dCYmKGUuYWRsZXI9U24oZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZy10LHQpKSxuLmd6aW5kZXg9MH1uLnN0YXR1cz1jcn1pZihuLnN0YXR1cz09PWNyKXtpZihuLmd6aGVhZC5uYW1lKXtsZXQgdD1uLnBlbmRpbmcscjtkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUpe2lmKG4uZ3poZWFkLmhjcmMmJm4ucGVuZGluZz50JiYoZS5hZGxlcj1TbihlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLXQsdCkpLHdyKGUpLG4ucGVuZGluZyE9PTApcmV0dXJuIG4ubGFzdF9mbHVzaD0tMSxGbjt0PTB9cj1uLmd6aW5kZXg8bi5nemhlYWQubmFtZS5sZW5ndGg/bi5nemhlYWQubmFtZS5jaGFyQ29kZUF0KG4uZ3ppbmRleCsrKSYyNTU6MCxFcihuLHIpfXdoaWxlKHIhPT0wKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+dCYmKGUuYWRsZXI9U24oZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZy10LHQpKSxuLmd6aW5kZXg9MH1uLnN0YXR1cz1scn1pZihuLnN0YXR1cz09PWxyKXtpZihuLmd6aGVhZC5jb21tZW50KXtsZXQgdD1uLnBlbmRpbmcscjtkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUpe2lmKG4uZ3poZWFkLmhjcmMmJm4ucGVuZGluZz50JiYoZS5hZGxlcj1TbihlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLXQsdCkpLHdyKGUpLG4ucGVuZGluZyE9PTApcmV0dXJuIG4ubGFzdF9mbHVzaD0tMSxGbjt0PTB9cj1uLmd6aW5kZXg8bi5nemhlYWQuY29tbWVudC5sZW5ndGg/bi5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KG4uZ3ppbmRleCsrKSYyNTU6MCxFcihuLHIpfXdoaWxlKHIhPT0wKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+dCYmKGUuYWRsZXI9U24oZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZy10LHQpKX1uLnN0YXR1cz11cn1pZihuLnN0YXR1cz09PXVyKXtpZihuLmd6aGVhZC5oY3JjKXtpZihuLnBlbmRpbmcrMj5uLnBlbmRpbmdfYnVmX3NpemUmJih3cihlKSxuLnBlbmRpbmchPT0wKSlyZXR1cm4gbi5sYXN0X2ZsdXNoPS0xLEZuO0VyKG4sZS5hZGxlciYyNTUpLEVyKG4sZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MH1pZihuLnN0YXR1cz1kcix3cihlKSxuLnBlbmRpbmchPT0wKXJldHVybiBuLmxhc3RfZmx1c2g9LTEsRm59aWYoZS5hdmFpbF9pbiE9PTB8fG4ubG9va2FoZWFkIT09MHx8dCE9PUFuJiZuLnN0YXR1cyE9PWZyKXtsZXQgcj1uLmxldmVsPT09MD9qcihuLHQpOm4uc3RyYXRlZ3k9PT1Ibj9GcihuLHQpOm4uc3RyYXRlZ3k9PT1Vbj9QcihuLHQpOklyW24ubGV2ZWxdLmZ1bmMobix0KTtpZigocj09PWhyfHxyPT09Z3IpJiYobi5zdGF0dXM9ZnIpLHI9PT1wcnx8cj09PWhyKXJldHVybiBlLmF2YWlsX291dD09PTAmJihuLmxhc3RfZmx1c2g9LTEpLEZuO2lmKHI9PT1tciYmKHQ9PT1qbj9rbihuKTp0IT09UG4mJihFbihuLDAsMCwhMSksdD09PU1uJiYoYnIobi5oZWFkKSxuLmxvb2thaGVhZD09PTAmJihuLnN0cnN0YXJ0PTAsbi5ibG9ja19zdGFydD0wLG4uaW5zZXJ0PTApKSksd3IoZSksZS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gbi5sYXN0X2ZsdXNoPS0xLEZufXJldHVybiB0PT09Tm4/bi53cmFwPD0wP0luOihuLndyYXA9PT0yPyhFcihuLGUuYWRsZXImMjU1KSxFcihuLGUuYWRsZXI+PjgmMjU1KSxFcihuLGUuYWRsZXI+PjE2JjI1NSksRXIobixlLmFkbGVyPj4yNCYyNTUpLEVyKG4sZS50b3RhbF9pbiYyNTUpLEVyKG4sZS50b3RhbF9pbj4+OCYyNTUpLEVyKG4sZS50b3RhbF9pbj4+MTYmMjU1KSxFcihuLGUudG90YWxfaW4+PjI0JjI1NSkpOihEcihuLGUuYWRsZXI+Pj4xNiksRHIobixlLmFkbGVyJjY1NTM1KSksd3IoZSksbi53cmFwPjAmJihuLndyYXA9LW4ud3JhcCksbi5wZW5kaW5nPT09MD9JbjpGbik6Rm59LEdyPWU9PntpZihScihlKSlyZXR1cm4gTG47bGV0IHQ9ZS5zdGF0ZS5zdGF0dXM7cmV0dXJuIGUuc3RhdGU9bnVsbCx0PT09ZHI/dnIoZSxSbik6Rm59LEtyPShlLHQpPT57bGV0IG49dC5sZW5ndGg7aWYoUnIoZSkpcmV0dXJuIExuO2xldCByPWUuc3RhdGUsaT1yLndyYXA7aWYoaT09PTJ8fGk9PT0xJiZyLnN0YXR1cyE9PWFyfHxyLmxvb2thaGVhZClyZXR1cm4gTG47aWYoaT09PTEmJihlLmFkbGVyPXZuKGUuYWRsZXIsdCxuLDApKSxyLndyYXA9MCxuPj1yLndfc2l6ZSl7aT09PTAmJihicihyLmhlYWQpLHIuc3Ryc3RhcnQ9MCxyLmJsb2NrX3N0YXJ0PTAsci5pbnNlcnQ9MCk7bGV0IGU9bmV3IFVpbnQ4QXJyYXkoci53X3NpemUpO2Uuc2V0KHQuc3ViYXJyYXkobi1yLndfc2l6ZSxuKSwwKSx0PWUsbj1yLndfc2l6ZX1sZXQgYT1lLmF2YWlsX2luLG89ZS5uZXh0X2luLHM9ZS5pbnB1dDtmb3IoZS5hdmFpbF9pbj1uLGUubmV4dF9pbj0wLGUuaW5wdXQ9dCxBcihyKTtyLmxvb2thaGVhZD49cTspe2xldCBlPXIuc3Ryc3RhcnQsdD1yLmxvb2thaGVhZC0ocS0xKTtkbyByLmluc19oPUNyKHIsci5pbnNfaCxyLndpbmRvd1tlK3EtMV0pLHIucHJldltlJnIud19tYXNrXT1yLmhlYWRbci5pbnNfaF0sci5oZWFkW3IuaW5zX2hdPWUsZSsrO3doaWxlKC0tdCk7ci5zdHJzdGFydD1lLHIubG9va2FoZWFkPXEtMSxBcihyKX1yZXR1cm4gci5zdHJzdGFydCs9ci5sb29rYWhlYWQsci5ibG9ja19zdGFydD1yLnN0cnN0YXJ0LHIuaW5zZXJ0PXIubG9va2FoZWFkLHIubG9va2FoZWFkPTAsci5tYXRjaF9sZW5ndGg9ci5wcmV2X2xlbmd0aD1xLTEsci5tYXRjaF9hdmFpbGFibGU9MCxlLm5leHRfaW49byxlLmlucHV0PXMsZS5hdmFpbF9pbj1hLHIud3JhcD1pLEZufSxxcj17ZGVmbGF0ZUluaXQ6VXIsZGVmbGF0ZUluaXQyOkhyLGRlZmxhdGVSZXNldDpCcixkZWZsYXRlUmVzZXRLZWVwOnpyLGRlZmxhdGVTZXRIZWFkZXI6VnIsZGVmbGF0ZTpXcixkZWZsYXRlRW5kOkdyLGRlZmxhdGVTZXREaWN0aW9uYXJ5OktyLGRlZmxhdGVJbmZvOmBwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpYH0sSnI9KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLFlyPWZ1bmN0aW9uKGUpe2xldCB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IoO3QubGVuZ3RoOyl7bGV0IG49dC5zaGlmdCgpO2lmKG4pe2lmKHR5cGVvZiBuIT1gb2JqZWN0YCl0aHJvdyBUeXBlRXJyb3IobitgbXVzdCBiZSBub24tb2JqZWN0YCk7Zm9yKGxldCB0IGluIG4pSnIobix0KSYmKGVbdF09blt0XSl9fXJldHVybiBlfSxYcj1lPT57bGV0IHQ9MDtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspdCs9ZVtuXS5sZW5ndGg7bGV0IG49bmV3IFVpbnQ4QXJyYXkodCk7Zm9yKGxldCB0PTAscj0wLGk9ZS5sZW5ndGg7dDxpO3QrKyl7bGV0IGk9ZVt0XTtuLnNldChpLHIpLHIrPWkubGVuZ3RofXJldHVybiBufSxacj17YXNzaWduOllyLGZsYXR0ZW5DaHVua3M6WHJ9LFFyPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoe1FyPSExfSRyPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKSRyW2VdPWU+PTI1Mj82OmU+PTI0OD81OmU+PTI0MD80OmU+PTIyND8zOmU+PTE5Mj8yOjE7JHJbMjU0XT0kclsyNTRdPTEsZWk9ZT0+e2lmKHR5cGVvZiBUZXh0RW5jb2Rlcj09YGZ1bmN0aW9uYCYmVGV4dEVuY29kZXIucHJvdG90eXBlLmVuY29kZSlyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUpO2xldCB0LG4scixpLGEsbz1lLmxlbmd0aCxzPTA7Zm9yKGk9MDtpPG87aSsrKW49ZS5jaGFyQ29kZUF0KGkpLChuJjY0NTEyKT09NTUyOTYmJmkrMTxvJiYocj1lLmNoYXJDb2RlQXQoaSsxKSwociY2NDUxMik9PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxpKyspKSxzKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2Zvcih0PW5ldyBVaW50OEFycmF5KHMpLGE9MCxpPTA7YTxzO2krKyluPWUuY2hhckNvZGVBdChpKSwobiY2NDUxMik9PTU1Mjk2JiZpKzE8byYmKHI9ZS5jaGFyQ29kZUF0KGkrMSksKHImNjQ1MTIpPT01NjMyMCYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoci01NjMyMCksaSsrKSksbjwxMjg/dFthKytdPW46bjwyMDQ4Pyh0W2ErK109MTkyfG4+Pj42LHRbYSsrXT0xMjh8biY2Myk6bjw2NTUzNj8odFthKytdPTIyNHxuPj4+MTIsdFthKytdPTEyOHxuPj4+NiY2Myx0W2ErK109MTI4fG4mNjMpOih0W2ErK109MjQwfG4+Pj4xOCx0W2ErK109MTI4fG4+Pj4xMiY2Myx0W2ErK109MTI4fG4+Pj42JjYzLHRbYSsrXT0xMjh8biY2Myk7cmV0dXJuIHR9LHRpPShlLHQpPT57aWYodDw2NTUzNCYmZS5zdWJhcnJheSYmUXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLmxlbmd0aD09PXQ/ZTplLnN1YmFycmF5KDAsdCkpO2xldCBuPWBgO2ZvcihsZXQgcj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbn0sbmk9KGUsdCk9PntsZXQgbj10fHxlLmxlbmd0aDtpZih0eXBlb2YgVGV4dERlY29kZXI9PWBmdW5jdGlvbmAmJlRleHREZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShlLnN1YmFycmF5KDAsdCkpO2xldCByLGksYT1BcnJheShuKjIpO2ZvcihpPTAscj0wO3I8bjspe2xldCB0PWVbcisrXTtpZih0PDEyOCl7YVtpKytdPXQ7Y29udGludWV9bGV0IG89JHJbdF07aWYobz40KXthW2krK109NjU1MzMscis9by0xO2NvbnRpbnVlfWZvcih0Jj1vPT09Mj8zMTpvPT09Mz8xNTo3O28+MSYmcjxuOyl0PXQ8PDZ8ZVtyKytdJjYzLG8tLTtpZihvPjEpe2FbaSsrXT02NTUzMztjb250aW51ZX10PDY1NTM2P2FbaSsrXT10Oih0LT02NTUzNixhW2krK109NTUyOTZ8dD4+MTAmMTAyMyxhW2krK109NTYzMjB8dCYxMDIzKX1yZXR1cm4gdGkoYSxpKX0scmk9KGUsdCk9Pnt0fHw9ZS5sZW5ndGgsdD5lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpO2xldCBuPXQtMTtmb3IoO24+PTAmJihlW25dJjE5Mik9PTEyODspbi0tO3JldHVybiBuPDB8fG49PT0wP3Q6biskcltlW25dXT50P246dH0saWk9e3N0cmluZzJidWY6ZWksYnVmMnN0cmluZzpuaSx1dGY4Ym9yZGVyOnJpfSxhaT1aZSxvaT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHtaX05PX0ZMVVNIOnNpLFpfU1lOQ19GTFVTSDpjaSxaX0ZVTExfRkxVU0g6bGksWl9GSU5JU0g6dWksWl9PSzpkaSxaX1NUUkVBTV9FTkQ6ZmksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOnBpLFpfREVGQVVMVF9TVFJBVEVHWTptaSxaX0RFRkxBVEVEOmhpfT13bixRZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMuc3RybSxyPXRoaXMub3B0aW9ucy5jaHVua1NpemUsaSxhO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Zm9yKGE9dD09PX5+dD90OnQ9PT0hMD91aTpzaSx0eXBlb2YgZT09YHN0cmluZ2A/bi5pbnB1dD1paS5zdHJpbmcyYnVmKGUpOm9pLmNhbGwoZSk9PT1gW29iamVjdCBBcnJheUJ1ZmZlcl1gP24uaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6bi5pbnB1dD1lLG4ubmV4dF9pbj0wLG4uYXZhaWxfaW49bi5pbnB1dC5sZW5ndGg7Oyl7aWYobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IFVpbnQ4QXJyYXkociksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PXIpLChhPT09Y2l8fGE9PT1saSkmJm4uYXZhaWxfb3V0PD02KXt0aGlzLm9uRGF0YShuLm91dHB1dC5zdWJhcnJheSgwLG4ubmV4dF9vdXQpKSxuLmF2YWlsX291dD0wO2NvbnRpbnVlfWlmKGk9cXIuZGVmbGF0ZShuLGEpLGk9PT1maSlyZXR1cm4gbi5uZXh0X291dD4wJiZ0aGlzLm9uRGF0YShuLm91dHB1dC5zdWJhcnJheSgwLG4ubmV4dF9vdXQpKSxpPXFyLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGkpLHRoaXMuZW5kZWQ9ITAsaT09PWRpO2lmKG4uYXZhaWxfb3V0PT09MCl7dGhpcy5vbkRhdGEobi5vdXRwdXQpO2NvbnRpbnVlfWlmKGE+MCYmbi5uZXh0X291dD4wKXt0aGlzLm9uRGF0YShuLm91dHB1dC5zdWJhcnJheSgwLG4ubmV4dF9vdXQpKSxuLmF2YWlsX291dD0wO2NvbnRpbnVlfWlmKG4uYXZhaWxfaW49PT0wKWJyZWFrfXJldHVybiEwfSxRZS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LFFlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09ZGkmJih0aGlzLnJlc3VsdD1aci5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxnaT17RGVmbGF0ZTpRZSxkZWZsYXRlOiRlLGRlZmxhdGVSYXc6ZXQsZ3ppcDp0dCxjb25zdGFudHM6d259LF9pPTE2MjA5LHZpPTE2MTkxLHlpPWZ1bmN0aW9uKGUsdCl7bGV0IG4scixpLGEsbyxzLGMsbCx1LGQsZixwLG0saCxnLF8sdix5LGIseCxTLEMsdyxULEU9ZS5zdGF0ZTtuPWUubmV4dF9pbix3PWUuaW5wdXQscj1uKyhlLmF2YWlsX2luLTUpLGk9ZS5uZXh0X291dCxUPWUub3V0cHV0LGE9aS0odC1lLmF2YWlsX291dCksbz1pKyhlLmF2YWlsX291dC0yNTcpLHM9RS5kbWF4LGM9RS53c2l6ZSxsPUUud2hhdmUsdT1FLnduZXh0LGQ9RS53aW5kb3csZj1FLmhvbGQscD1FLmJpdHMsbT1FLmxlbmNvZGUsaD1FLmRpc3Rjb2RlLGc9KDE8PEUubGVuYml0cyktMSxfPSgxPDxFLmRpc3RiaXRzKS0xO3RvcDpkb3twPDE1JiYoZis9d1tuKytdPDxwLHArPTgsZis9d1tuKytdPDxwLHArPTgpLHY9bVtmJmddO2RvbGVuOmZvcig7Oyl7aWYoeT12Pj4+MjQsZj4+Pj15LHAtPXkseT12Pj4+MTYmMjU1LHk9PT0wKVRbaSsrXT12JjY1NTM1O2Vsc2UgaWYoeSYxNil7Yj12JjY1NTM1LHkmPTE1LHkmJihwPHkmJihmKz13W24rK108PHAscCs9OCksYis9ZiYoMTw8eSktMSxmPj4+PXkscC09eSkscDwxNSYmKGYrPXdbbisrXTw8cCxwKz04LGYrPXdbbisrXTw8cCxwKz04KSx2PWhbZiZfXTtkb2Rpc3Q6Zm9yKDs7KXtpZih5PXY+Pj4yNCxmPj4+PXkscC09eSx5PXY+Pj4xNiYyNTUseSYxNil7aWYoeD12JjY1NTM1LHkmPTE1LHA8eSYmKGYrPXdbbisrXTw8cCxwKz04LHA8eSYmKGYrPXdbbisrXTw8cCxwKz04KSkseCs9ZiYoMTw8eSktMSx4PnMpe2UubXNnPWBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja2AsRS5tb2RlPV9pO2JyZWFrIHRvcH1pZihmPj4+PXkscC09eSx5PWktYSx4Pnkpe2lmKHk9eC15LHk+bCYmRS5zYW5lKXtlLm1zZz1gaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2tgLEUubW9kZT1faTticmVhayB0b3B9aWYoUz0wLEM9ZCx1PT09MCl7aWYoUys9Yy15LHk8Yil7Yi09eTtkbyBUW2krK109ZFtTKytdO3doaWxlKC0teSk7Uz1pLXgsQz1UfX1lbHNlIGlmKHU8eSl7aWYoUys9Yyt1LXkseS09dSx5PGIpe2ItPXk7ZG8gVFtpKytdPWRbUysrXTt3aGlsZSgtLXkpO2lmKFM9MCx1PGIpe3k9dSxiLT15O2RvIFRbaSsrXT1kW1MrK107d2hpbGUoLS15KTtTPWkteCxDPVR9fX1lbHNlIGlmKFMrPXUteSx5PGIpe2ItPXk7ZG8gVFtpKytdPWRbUysrXTt3aGlsZSgtLXkpO1M9aS14LEM9VH1mb3IoO2I+MjspVFtpKytdPUNbUysrXSxUW2krK109Q1tTKytdLFRbaSsrXT1DW1MrK10sYi09MztiJiYoVFtpKytdPUNbUysrXSxiPjEmJihUW2krK109Q1tTKytdKSl9ZWxzZXtTPWkteDtkbyBUW2krK109VFtTKytdLFRbaSsrXT1UW1MrK10sVFtpKytdPVRbUysrXSxiLT0zO3doaWxlKGI+Mik7YiYmKFRbaSsrXT1UW1MrK10sYj4xJiYoVFtpKytdPVRbUysrXSkpfX1lbHNlIGlmKHkmNjQpe2UubXNnPWBpbnZhbGlkIGRpc3RhbmNlIGNvZGVgLEUubW9kZT1faTticmVhayB0b3B9ZWxzZXt2PWhbKHYmNjU1MzUpKyhmJigxPDx5KS0xKV07Y29udGludWUgZG9kaXN0fWJyZWFrfX1lbHNlIGlmKCEoeSY2NCkpe3Y9bVsodiY2NTUzNSkrKGYmKDE8PHkpLTEpXTtjb250aW51ZSBkb2xlbn1lbHNlIGlmKHkmMzIpe0UubW9kZT12aTticmVhayB0b3B9ZWxzZXtlLm1zZz1gaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlYCxFLm1vZGU9X2k7YnJlYWsgdG9wfWJyZWFrfX13aGlsZShuPHImJmk8byk7Yj1wPj4zLG4tPWIscC09Yjw8MyxmJj0oMTw8cCktMSxlLm5leHRfaW49bixlLm5leHRfb3V0PWksZS5hdmFpbF9pbj1uPHI/NSsoci1uKTo1LShuLXIpLGUuYXZhaWxfb3V0PWk8bz8yNTcrKG8taSk6MjU3LShpLW8pLEUuaG9sZD1mLEUuYml0cz1wfSxiaT0xNSx4aT04NTIsU2k9NTkyLENpPTAsd2k9MSxUaT0yLEVpPW5ldyBVaW50MTZBcnJheShbMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdKSxEaT1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdKSxPaT1uZXcgVWludDE2QXJyYXkoWzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdKSxraT1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdKSxBaT0oZSx0LG4scixpLGEsbyxzKT0+e2xldCBjPXMuYml0cyxsPTAsdT0wLGQ9MCxmPTAscD0wLG09MCxoPTAsZz0wLF89MCx2PTAseSxiLHgsUyxDLHc9bnVsbCxULEU9bmV3IFVpbnQxNkFycmF5KGJpKzEpLEQ9bmV3IFVpbnQxNkFycmF5KGJpKzEpLE89bnVsbCxrLEEsajtmb3IobD0wO2w8PWJpO2wrKylFW2xdPTA7Zm9yKHU9MDt1PHI7dSsrKUVbdFtuK3VdXSsrO2ZvcihwPWMsZj1iaTtmPj0xJiZFW2ZdPT09MDtmLS0pO2lmKHA+ZiYmKHA9ZiksZj09PTApcmV0dXJuIGlbYSsrXT0yMDk3MTUyMCxpW2ErK109MjA5NzE1MjAscy5iaXRzPTEsMDtmb3IoZD0xO2Q8ZiYmRVtkXT09PTA7ZCsrKTtmb3IocDxkJiYocD1kKSxnPTEsbD0xO2w8PWJpO2wrKylpZihnPDw9MSxnLT1FW2xdLGc8MClyZXR1cm4tMTtpZihnPjAmJihlPT09Q2l8fGYhPT0xKSlyZXR1cm4tMTtmb3IoRFsxXT0wLGw9MTtsPGJpO2wrKylEW2wrMV09RFtsXStFW2xdO2Zvcih1PTA7dTxyO3UrKyl0W24rdV0hPT0wJiYob1tEW3Rbbit1XV0rK109dSk7aWYoZT09PUNpPyh3PU89byxUPTIwKTplPT09d2k/KHc9RWksTz1EaSxUPTI1Nyk6KHc9T2ksTz1raSxUPTApLHY9MCx1PTAsbD1kLEM9YSxtPXAsaD0wLHg9LTEsXz0xPDxwLFM9Xy0xLGU9PT13aSYmXz54aXx8ZT09PVRpJiZfPlNpKXJldHVybiAxO2Zvcig7Oyl7az1sLWgsb1t1XSsxPFQ/KEE9MCxqPW9bdV0pOm9bdV0+PVQ/KEE9T1tvW3VdLVRdLGo9d1tvW3VdLVRdKTooQT05NixqPTApLHk9MTw8bC1oLGI9MTw8bSxkPWI7ZG8gYi09eSxpW0MrKHY+PmgpK2JdPWs8PDI0fEE8PDE2fGp8MDt3aGlsZShiIT09MCk7Zm9yKHk9MTw8bC0xO3YmeTspeT4+PTE7aWYoeT09PTA/dj0wOih2Jj15LTEsdis9eSksdSsrLC0tRVtsXT09PTApe2lmKGw9PT1mKWJyZWFrO2w9dFtuK29bdV1dfWlmKGw+cCYmKHYmUykhPT14KXtmb3IoaD09PTAmJihoPXApLEMrPWQsbT1sLWgsZz0xPDxtO20raDxmJiYoZy09RVttK2hdLCEoZzw9MCkpOyltKyssZzw8PTE7aWYoXys9MTw8bSxlPT09d2kmJl8+eGl8fGU9PT1UaSYmXz5TaSlyZXR1cm4gMTt4PXYmUyxpW3hdPXA8PDI0fG08PDE2fEMtYXwwfX1yZXR1cm4gdiE9PTAmJihpW0Mrdl09bC1oPDwyNHw0MTk0MzA0KSxzLmJpdHM9cCwwfSxqaT1BaSxNaT0wLE5pPTEsUGk9Mix7Wl9GSU5JU0g6RmksWl9CTE9DSzpJaSxaX1RSRUVTOkxpLFpfT0s6UmksWl9TVFJFQU1fRU5EOnppLFpfTkVFRF9ESUNUOkJpLFpfU1RSRUFNX0VSUk9SOlZpLFpfREFUQV9FUlJPUjpIaSxaX01FTV9FUlJPUjpVaSxaX0JVRl9FUlJPUjpXaSxaX0RFRkxBVEVEOkdpfT13bixLaT0xNjE4MCxxaT0xNjE4MSxKaT0xNjE4MixZaT0xNjE4MyxYaT0xNjE4NCxaaT0xNjE4NSxRaT0xNjE4NiwkaT0xNjE4NyxlYT0xNjE4OCx0YT0xNjE4OSxuYT0xNjE5MCxyYT0xNjE5MSxpYT0xNjE5MixhYT0xNjE5MyxvYT0xNjE5NCxzYT0xNjE5NSxjYT0xNjE5NixsYT0xNjE5Nyx1YT0xNjE5OCxkYT0xNjE5OSxmYT0xNjIwMCxwYT0xNjIwMSxtYT0xNjIwMixoYT0xNjIwMyxnYT0xNjIwNCxfYT0xNjIwNSx2YT0xNjIwNix5YT0xNjIwNyxiYT0xNjIwOCx4YT0xNjIwOSxTYT0xNjIxMCxDYT0xNjIxMSx3YT04NTIsVGE9NTkyLEVhPTE1LERhPWU9PihlPj4+MjQmMjU1KSsoZT4+PjgmNjUyODApKygoZSY2NTI4MCk8PDgpKygoZSYyNTUpPDwyNCksT2E9ZT0+e2lmKCFlKXJldHVybiAxO2xldCB0PWUuc3RhdGU7cmV0dXJuKyghdHx8dC5zdHJtIT09ZXx8dC5tb2RlPEtpfHx0Lm1vZGU+Q2EpfSxKPWU9PntpZihPYShlKSlyZXR1cm4gVmk7bGV0IHQ9ZS5zdGF0ZTtyZXR1cm4gZS50b3RhbF9pbj1lLnRvdGFsX291dD10LnRvdGFsPTAsZS5tc2c9YGAsdC53cmFwJiYoZS5hZGxlcj10LndyYXAmMSksdC5tb2RlPUtpLHQubGFzdD0wLHQuaGF2ZWRpY3Q9MCx0LmZsYWdzPS0xLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IEludDMyQXJyYXkod2EpLHQuZGlzdGNvZGU9dC5kaXN0ZHluPW5ldyBJbnQzMkFycmF5KFRhKSx0LnNhbmU9MSx0LmJhY2s9LTEsUml9LGthPWU9PntpZihPYShlKSlyZXR1cm4gVmk7bGV0IHQ9ZS5zdGF0ZTtyZXR1cm4gdC53c2l6ZT0wLHQud2hhdmU9MCx0LnduZXh0PTAsSihlKX0sQWE9KGUsdCk9PntsZXQgbjtpZihPYShlKSlyZXR1cm4gVmk7bGV0IHI9ZS5zdGF0ZTtyZXR1cm4gdDwwPyhuPTAsdD0tdCk6KG49KHQ+PjQpKzUsdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8dD4xNSk/Vmk6KHIud2luZG93IT09bnVsbCYmci53Yml0cyE9PXQmJihyLndpbmRvdz1udWxsKSxyLndyYXA9bixyLndiaXRzPXQsa2EoZSkpfSxqYT0oZSx0KT0+e2lmKCFlKXJldHVybiBWaTtsZXQgbj1uZXcgbnQ7ZS5zdGF0ZT1uLG4uc3RybT1lLG4ud2luZG93PW51bGwsbi5tb2RlPUtpO2xldCByPUFhKGUsdCk7cmV0dXJuIHIhPT1SaSYmKGUuc3RhdGU9bnVsbCkscn0sTWE9ZT0+amEoZSxFYSksTmE9ITAsSWE9ZT0+e2lmKE5hKXtQYT1uZXcgSW50MzJBcnJheSg1MTIpLEZhPW5ldyBJbnQzMkFycmF5KDMyKTtsZXQgdD0wO2Zvcig7dDwxNDQ7KWUubGVuc1t0KytdPTg7Zm9yKDt0PDI1NjspZS5sZW5zW3QrK109OTtmb3IoO3Q8MjgwOyllLmxlbnNbdCsrXT03O2Zvcig7dDwyODg7KWUubGVuc1t0KytdPTg7Zm9yKGppKE5pLGUubGVucywwLDI4OCxQYSwwLGUud29yayx7Yml0czo5fSksdD0wO3Q8MzI7KWUubGVuc1t0KytdPTU7amkoUGksZS5sZW5zLDAsMzIsRmEsMCxlLndvcmsse2JpdHM6NX0pLE5hPSExfWUubGVuY29kZT1QYSxlLmxlbmJpdHM9OSxlLmRpc3Rjb2RlPUZhLGUuZGlzdGJpdHM9NX0sTGE9KGUsdCxuLHIpPT57bGV0IGksYT1lLnN0YXRlO3JldHVybiBhLndpbmRvdz09PW51bGwmJihhLndzaXplPTE8PGEud2JpdHMsYS53bmV4dD0wLGEud2hhdmU9MCxhLndpbmRvdz1uZXcgVWludDhBcnJheShhLndzaXplKSkscj49YS53c2l6ZT8oYS53aW5kb3cuc2V0KHQuc3ViYXJyYXkobi1hLndzaXplLG4pLDApLGEud25leHQ9MCxhLndoYXZlPWEud3NpemUpOihpPWEud3NpemUtYS53bmV4dCxpPnImJihpPXIpLGEud2luZG93LnNldCh0LnN1YmFycmF5KG4tcixuLXIraSksYS53bmV4dCksci09aSxyPyhhLndpbmRvdy5zZXQodC5zdWJhcnJheShuLXIsbiksMCksYS53bmV4dD1yLGEud2hhdmU9YS53c2l6ZSk6KGEud25leHQrPWksYS53bmV4dD09PWEud3NpemUmJihhLnduZXh0PTApLGEud2hhdmU8YS53c2l6ZSYmKGEud2hhdmUrPWkpKSksMH0sUmE9KGUsdCk9PntsZXQgbixyLGksYSxvLHMsYyxsLHUsZCxmLHAsbSxoLGc9MCxfLHYseSxiLHgsUyxDLHcsVD1uZXcgVWludDhBcnJheSg0KSxFLEQsTz1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pO2lmKE9hKGUpfHwhZS5vdXRwdXR8fCFlLmlucHV0JiZlLmF2YWlsX2luIT09MClyZXR1cm4gVmk7bj1lLnN0YXRlLG4ubW9kZT09PXJhJiYobi5tb2RlPWlhKSxvPWUubmV4dF9vdXQsaT1lLm91dHB1dCxjPWUuYXZhaWxfb3V0LGE9ZS5uZXh0X2luLHI9ZS5pbnB1dCxzPWUuYXZhaWxfaW4sbD1uLmhvbGQsdT1uLmJpdHMsZD1zLGY9Yyx3PVJpO2luZl9sZWF2ZTpmb3IoOzspc3dpdGNoKG4ubW9kZSl7Y2FzZSBLaTppZihuLndyYXA9PT0wKXtuLm1vZGU9aWE7YnJlYWt9Zm9yKDt1PDE2Oyl7aWYocz09PTApYnJlYWsgaW5mX2xlYXZlO3MtLSxsKz1yW2ErK108PHUsdSs9OH1pZihuLndyYXAmMiYmbD09PTM1NjE1KXtuLndiaXRzPT09MCYmKG4ud2JpdHM9MTUpLG4uY2hlY2s9MCxUWzBdPWwmMjU1LFRbMV09bD4+PjgmMjU1LG4uY2hlY2s9U24obi5jaGVjayxULDIsMCksbD0wLHU9MCxuLm1vZGU9cWk7YnJlYWt9aWYobi5oZWFkJiYobi5oZWFkLmRvbmU9ITEpLCEobi53cmFwJjEpfHwoKChsJjI1NSk8PDgpKyhsPj44KSklMzEpe2UubXNnPWBpbmNvcnJlY3QgaGVhZGVyIGNoZWNrYCxuLm1vZGU9eGE7YnJlYWt9aWYoKGwmMTUpIT09R2kpe2UubXNnPWB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZGAsbi5tb2RlPXhhO2JyZWFrfWlmKGw+Pj49NCx1LT00LEM9KGwmMTUpKzgsbi53Yml0cz09PTAmJihuLndiaXRzPUMpLEM+MTV8fEM+bi53Yml0cyl7ZS5tc2c9YGludmFsaWQgd2luZG93IHNpemVgLG4ubW9kZT14YTticmVha31uLmRtYXg9MTw8bi53Yml0cyxuLmZsYWdzPTAsZS5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPWwmNTEyP3RhOnJhLGw9MCx1PTA7YnJlYWs7Y2FzZSBxaTpmb3IoO3U8MTY7KXtpZihzPT09MClicmVhayBpbmZfbGVhdmU7cy0tLGwrPXJbYSsrXTw8dSx1Kz04fWlmKG4uZmxhZ3M9bCwobi5mbGFncyYyNTUpIT09R2kpe2UubXNnPWB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZGAsbi5tb2RlPXhhO2JyZWFrfWlmKG4uZmxhZ3MmNTczNDQpe2UubXNnPWB1bmtub3duIGhlYWRlciBmbGFncyBzZXRgLG4ubW9kZT14YTticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1sPj44JjEpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKFRbMF09bCYyNTUsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1TbihuLmNoZWNrLFQsMiwwKSksbD0wLHU9MCxuLm1vZGU9Smk7Y2FzZSBKaTpmb3IoO3U8MzI7KXtpZihzPT09MClicmVhayBpbmZfbGVhdmU7cy0tLGwrPXJbYSsrXTw8dSx1Kz04fW4uaGVhZCYmKG4uaGVhZC50aW1lPWwpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKFRbMF09bCYyNTUsVFsxXT1sPj4+OCYyNTUsVFsyXT1sPj4+MTYmMjU1LFRbM109bD4+PjI0JjI1NSxuLmNoZWNrPVNuKG4uY2hlY2ssVCw0LDApKSxsPTAsdT0wLG4ubW9kZT1ZaTtjYXNlIFlpOmZvcig7dTwxNjspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9bi5oZWFkJiYobi5oZWFkLnhmbGFncz1sJjI1NSxuLmhlYWQub3M9bD4+OCksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoVFswXT1sJjI1NSxUWzFdPWw+Pj44JjI1NSxuLmNoZWNrPVNuKG4uY2hlY2ssVCwyLDApKSxsPTAsdT0wLG4ubW9kZT1YaTtjYXNlIFhpOmlmKG4uZmxhZ3MmMTAyNCl7Zm9yKDt1PDE2Oyl7aWYocz09PTApYnJlYWsgaW5mX2xlYXZlO3MtLSxsKz1yW2ErK108PHUsdSs9OH1uLmxlbmd0aD1sLG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49bCksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoVFswXT1sJjI1NSxUWzFdPWw+Pj44JjI1NSxuLmNoZWNrPVNuKG4uY2hlY2ssVCwyLDApKSxsPTAsdT0wfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmV4dHJhPW51bGwpO24ubW9kZT1aaTtjYXNlIFppOmlmKG4uZmxhZ3MmMTAyNCYmKHA9bi5sZW5ndGgscD5zJiYocD1zKSxwJiYobi5oZWFkJiYoQz1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgVWludDhBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksbi5oZWFkLmV4dHJhLnNldChyLnN1YmFycmF5KGEsYStwKSxDKSksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1TbihuLmNoZWNrLHIscCxhKSkscy09cCxhKz1wLG4ubGVuZ3RoLT1wKSxuLmxlbmd0aCkpYnJlYWsgaW5mX2xlYXZlO24ubGVuZ3RoPTAsbi5tb2RlPVFpO2Nhc2UgUWk6aWYobi5mbGFncyYyMDQ4KXtpZihzPT09MClicmVhayBpbmZfbGVhdmU7cD0wO2RvIEM9clthKyBwKytdLG4uaGVhZCYmQyYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShDKSk7d2hpbGUoQyYmcDxzKTtpZihuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihuLmNoZWNrPVNuKG4uY2hlY2sscixwLGEpKSxzLT1wLGErPXAsQylicmVhayBpbmZfbGVhdmV9ZWxzZSBuLmhlYWQmJihuLmhlYWQubmFtZT1udWxsKTtuLmxlbmd0aD0wLG4ubW9kZT0kaTtjYXNlICRpOmlmKG4uZmxhZ3MmNDA5Nil7aWYocz09PTApYnJlYWsgaW5mX2xlYXZlO3A9MDtkbyBDPXJbYSsgcCsrXSxuLmhlYWQmJkMmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoQykpO3doaWxlKEMmJnA8cyk7aWYobi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1TbihuLmNoZWNrLHIscCxhKSkscy09cCxhKz1wLEMpYnJlYWsgaW5mX2xlYXZlfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmNvbW1lbnQ9bnVsbCk7bi5tb2RlPWVhO2Nhc2UgZWE6aWYobi5mbGFncyY1MTIpe2Zvcig7dTwxNjspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9aWYobi53cmFwJjQmJmwhPT0obi5jaGVjayY2NTUzNSkpe2UubXNnPWBoZWFkZXIgY3JjIG1pc21hdGNoYCxuLm1vZGU9eGE7YnJlYWt9bD0wLHU9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1uLmZsYWdzPj45JjEsbi5oZWFkLmRvbmU9ITApLGUuYWRsZXI9bi5jaGVjaz0wLG4ubW9kZT1yYTticmVhaztjYXNlIHRhOmZvcig7dTwzMjspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9ZS5hZGxlcj1uLmNoZWNrPURhKGwpLGw9MCx1PTAsbi5tb2RlPW5hO2Nhc2UgbmE6aWYobi5oYXZlZGljdD09PTApcmV0dXJuIGUubmV4dF9vdXQ9byxlLmF2YWlsX291dD1jLGUubmV4dF9pbj1hLGUuYXZhaWxfaW49cyxuLmhvbGQ9bCxuLmJpdHM9dSxCaTtlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9cmE7Y2FzZSByYTppZih0PT09SWl8fHQ9PT1MaSlicmVhayBpbmZfbGVhdmU7Y2FzZSBpYTppZihuLmxhc3Qpe2w+Pj49dSY3LHUtPXUmNyxuLm1vZGU9dmE7YnJlYWt9Zm9yKDt1PDM7KXtpZihzPT09MClicmVhayBpbmZfbGVhdmU7cy0tLGwrPXJbYSsrXTw8dSx1Kz04fXN3aXRjaChuLmxhc3Q9bCYxLGw+Pj49MSwtLXUsbCYzKXtjYXNlIDA6bi5tb2RlPWFhO2JyZWFrO2Nhc2UgMTppZihJYShuKSxuLm1vZGU9ZGEsdD09PUxpKXtsPj4+PTIsdS09MjticmVhayBpbmZfbGVhdmV9YnJlYWs7Y2FzZSAyOm4ubW9kZT1jYTticmVhaztjYXNlIDM6ZS5tc2c9YGludmFsaWQgYmxvY2sgdHlwZWAsbi5tb2RlPXhhfWw+Pj49Mix1LT0yO2JyZWFrO2Nhc2UgYWE6Zm9yKGw+Pj49dSY3LHUtPXUmNzt1PDMyOyl7aWYocz09PTApYnJlYWsgaW5mX2xlYXZlO3MtLSxsKz1yW2ErK108PHUsdSs9OH1pZigobCY2NTUzNSkhPShsPj4+MTZeNjU1MzUpKXtlLm1zZz1gaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Roc2Asbi5tb2RlPXhhO2JyZWFrfWlmKG4ubGVuZ3RoPWwmNjU1MzUsbD0wLHU9MCxuLm1vZGU9b2EsdD09PUxpKWJyZWFrIGluZl9sZWF2ZTtjYXNlIG9hOm4ubW9kZT1zYTtjYXNlIHNhOmlmKHA9bi5sZW5ndGgscCl7aWYocD5zJiYocD1zKSxwPmMmJihwPWMpLHA9PT0wKWJyZWFrIGluZl9sZWF2ZTtpLnNldChyLnN1YmFycmF5KGEsYStwKSxvKSxzLT1wLGErPXAsYy09cCxvKz1wLG4ubGVuZ3RoLT1wO2JyZWFrfW4ubW9kZT1yYTticmVhaztjYXNlIGNhOmZvcig7dTwxNDspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9aWYobi5ubGVuPShsJjMxKSsyNTcsbD4+Pj01LHUtPTUsbi5uZGlzdD0obCYzMSkrMSxsPj4+PTUsdS09NSxuLm5jb2RlPShsJjE1KSs0LGw+Pj49NCx1LT00LG4ubmxlbj4yODZ8fG4ubmRpc3Q+MzApe2UubXNnPWB0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9sc2Asbi5tb2RlPXhhO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1sYTtjYXNlIGxhOmZvcig7bi5oYXZlPG4ubmNvZGU7KXtmb3IoO3U8Mzspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9bi5sZW5zW09bbi5oYXZlKytdXT1sJjcsbD4+Pj0zLHUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tPW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsRT17Yml0czpuLmxlbmJpdHN9LHc9amkoTWksbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLEUpLG4ubGVuYml0cz1FLmJpdHMsdyl7ZS5tc2c9YGludmFsaWQgY29kZSBsZW5ndGhzIHNldGAsbi5tb2RlPXhhO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT11YTtjYXNlIHVhOmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtnPW4ubGVuY29kZVtsJigxPDxuLmxlbmJpdHMpLTFdLF89Zz4+PjI0LHY9Zz4+PjE2JjI1NSx5PWcmNjU1MzUsIShfPD11KTspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9aWYoeTwxNilsPj4+PV8sdS09XyxuLmxlbnNbbi5oYXZlKytdPXk7ZWxzZXtpZih5PT09MTYpe2ZvcihEPV8rMjt1PEQ7KXtpZihzPT09MClicmVhayBpbmZfbGVhdmU7cy0tLGwrPXJbYSsrXTw8dSx1Kz04fWlmKGw+Pj49Xyx1LT1fLG4uaGF2ZT09PTApe2UubXNnPWBpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0YCxuLm1vZGU9eGE7YnJlYWt9Qz1uLmxlbnNbbi5oYXZlLTFdLHA9MysobCYzKSxsPj4+PTIsdS09Mn1lbHNlIGlmKHk9PT0xNyl7Zm9yKEQ9XyszO3U8RDspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9bD4+Pj1fLHUtPV8sQz0wLHA9MysobCY3KSxsPj4+PTMsdS09M31lbHNle2ZvcihEPV8rNzt1PEQ7KXtpZihzPT09MClicmVhayBpbmZfbGVhdmU7cy0tLGwrPXJbYSsrXTw8dSx1Kz04fWw+Pj49Xyx1LT1fLEM9MCxwPTExKyhsJjEyNyksbD4+Pj03LHUtPTd9aWYobi5oYXZlK3A+bi5ubGVuK24ubmRpc3Qpe2UubXNnPWBpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0YCxuLm1vZGU9eGE7YnJlYWt9Zm9yKDtwLS07KW4ubGVuc1tuLmhhdmUrK109Q319aWYobi5tb2RlPT09eGEpYnJlYWs7aWYobi5sZW5zWzI1Nl09PT0wKXtlLm1zZz1gaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrYCxuLm1vZGU9eGE7YnJlYWt9aWYobi5sZW5iaXRzPTksRT17Yml0czpuLmxlbmJpdHN9LHc9amkoTmksbi5sZW5zLDAsbi5ubGVuLG4ubGVuY29kZSwwLG4ud29yayxFKSxuLmxlbmJpdHM9RS5iaXRzLHcpe2UubXNnPWBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXRgLG4ubW9kZT14YTticmVha31pZihuLmRpc3RiaXRzPTYsbi5kaXN0Y29kZT1uLmRpc3RkeW4sRT17Yml0czpuLmRpc3RiaXRzfSx3PWppKFBpLG4ubGVucyxuLm5sZW4sbi5uZGlzdCxuLmRpc3Rjb2RlLDAsbi53b3JrLEUpLG4uZGlzdGJpdHM9RS5iaXRzLHcpe2UubXNnPWBpbnZhbGlkIGRpc3RhbmNlcyBzZXRgLG4ubW9kZT14YTticmVha31pZihuLm1vZGU9ZGEsdD09PUxpKWJyZWFrIGluZl9sZWF2ZTtjYXNlIGRhOm4ubW9kZT1mYTtjYXNlIGZhOmlmKHM+PTYmJmM+PTI1OCl7ZS5uZXh0X291dD1vLGUuYXZhaWxfb3V0PWMsZS5uZXh0X2luPWEsZS5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LHlpKGUsZiksbz1lLm5leHRfb3V0LGk9ZS5vdXRwdXQsYz1lLmF2YWlsX291dCxhPWUubmV4dF9pbixyPWUuaW5wdXQscz1lLmF2YWlsX2luLGw9bi5ob2xkLHU9bi5iaXRzLG4ubW9kZT09PXJhJiYobi5iYWNrPS0xKTticmVha31mb3Iobi5iYWNrPTA7Zz1uLmxlbmNvZGVbbCYoMTw8bi5sZW5iaXRzKS0xXSxfPWc+Pj4yNCx2PWc+Pj4xNiYyNTUseT1nJjY1NTM1LCEoXzw9dSk7KXtpZihzPT09MClicmVhayBpbmZfbGVhdmU7cy0tLGwrPXJbYSsrXTw8dSx1Kz04fWlmKHYmJiEodiYyNDApKXtmb3IoYj1fLHg9dixTPXk7Zz1uLmxlbmNvZGVbUysoKGwmKDE8PGIreCktMSk+PmIpXSxfPWc+Pj4yNCx2PWc+Pj4xNiYyNTUseT1nJjY1NTM1LCEoYitfPD11KTspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9bD4+Pj1iLHUtPWIsbi5iYWNrKz1ifWlmKGw+Pj49Xyx1LT1fLG4uYmFjays9XyxuLmxlbmd0aD15LHY9PT0wKXtuLm1vZGU9X2E7YnJlYWt9aWYodiYzMil7bi5iYWNrPS0xLG4ubW9kZT1yYTticmVha31pZih2JjY0KXtlLm1zZz1gaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlYCxuLm1vZGU9eGE7YnJlYWt9bi5leHRyYT12JjE1LG4ubW9kZT1wYTtjYXNlIHBhOmlmKG4uZXh0cmEpe2ZvcihEPW4uZXh0cmE7dTxEOyl7aWYocz09PTApYnJlYWsgaW5mX2xlYXZlO3MtLSxsKz1yW2ErK108PHUsdSs9OH1uLmxlbmd0aCs9bCYoMTw8bi5leHRyYSktMSxsPj4+PW4uZXh0cmEsdS09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9bi53YXM9bi5sZW5ndGgsbi5tb2RlPW1hO2Nhc2UgbWE6Zm9yKDtnPW4uZGlzdGNvZGVbbCYoMTw8bi5kaXN0Yml0cyktMV0sXz1nPj4+MjQsdj1nPj4+MTYmMjU1LHk9ZyY2NTUzNSwhKF88PXUpOyl7aWYocz09PTApYnJlYWsgaW5mX2xlYXZlO3MtLSxsKz1yW2ErK108PHUsdSs9OH1pZighKHYmMjQwKSl7Zm9yKGI9Xyx4PXYsUz15O2c9bi5kaXN0Y29kZVtTKygobCYoMTw8Yit4KS0xKT4+YildLF89Zz4+PjI0LHY9Zz4+PjE2JjI1NSx5PWcmNjU1MzUsIShiK188PXUpOyl7aWYocz09PTApYnJlYWsgaW5mX2xlYXZlO3MtLSxsKz1yW2ErK108PHUsdSs9OH1sPj4+PWIsdS09YixuLmJhY2srPWJ9aWYobD4+Pj1fLHUtPV8sbi5iYWNrKz1fLHYmNjQpe2UubXNnPWBpbnZhbGlkIGRpc3RhbmNlIGNvZGVgLG4ubW9kZT14YTticmVha31uLm9mZnNldD15LG4uZXh0cmE9diYxNSxuLm1vZGU9aGE7Y2FzZSBoYTppZihuLmV4dHJhKXtmb3IoRD1uLmV4dHJhO3U8RDspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9bi5vZmZzZXQrPWwmKDE8PG4uZXh0cmEpLTEsbD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfWlmKG4ub2Zmc2V0Pm4uZG1heCl7ZS5tc2c9YGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrYCxuLm1vZGU9eGE7YnJlYWt9bi5tb2RlPWdhO2Nhc2UgZ2E6aWYoYz09PTApYnJlYWsgaW5mX2xlYXZlO2lmKHA9Zi1jLG4ub2Zmc2V0PnApe2lmKHA9bi5vZmZzZXQtcCxwPm4ud2hhdmUmJm4uc2FuZSl7ZS5tc2c9YGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrYCxuLm1vZGU9eGE7YnJlYWt9cD5uLnduZXh0PyhwLT1uLnduZXh0LG09bi53c2l6ZS1wKTptPW4ud25leHQtcCxwPm4ubGVuZ3RoJiYocD1uLmxlbmd0aCksaD1uLndpbmRvd31lbHNlIGg9aSxtPW8tbi5vZmZzZXQscD1uLmxlbmd0aDtwPmMmJihwPWMpLGMtPXAsbi5sZW5ndGgtPXA7ZG8gaVtvKytdPWhbbSsrXTt3aGlsZSgtLXApO24ubGVuZ3RoPT09MCYmKG4ubW9kZT1mYSk7YnJlYWs7Y2FzZSBfYTppZihjPT09MClicmVhayBpbmZfbGVhdmU7aVtvKytdPW4ubGVuZ3RoLGMtLSxuLm1vZGU9ZmE7YnJlYWs7Y2FzZSB2YTppZihuLndyYXApe2Zvcig7dTwzMjspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbHw9clthKytdPDx1LHUrPTh9aWYoZi09YyxlLnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLG4ud3JhcCY0JiZmJiYoZS5hZGxlcj1uLmNoZWNrPW4uZmxhZ3M/U24obi5jaGVjayxpLGYsby1mKTp2bihuLmNoZWNrLGksZixvLWYpKSxmPWMsbi53cmFwJjQmJihuLmZsYWdzP2w6RGEobCkpIT09bi5jaGVjayl7ZS5tc2c9YGluY29ycmVjdCBkYXRhIGNoZWNrYCxuLm1vZGU9eGE7YnJlYWt9bD0wLHU9MH1uLm1vZGU9eWE7Y2FzZSB5YTppZihuLndyYXAmJm4uZmxhZ3Mpe2Zvcig7dTwzMjspe2lmKHM9PT0wKWJyZWFrIGluZl9sZWF2ZTtzLS0sbCs9clthKytdPDx1LHUrPTh9aWYobi53cmFwJjQmJmwhPT0obi50b3RhbCY0Mjk0OTY3Mjk1KSl7ZS5tc2c9YGluY29ycmVjdCBsZW5ndGggY2hlY2tgLG4ubW9kZT14YTticmVha31sPTAsdT0wfW4ubW9kZT1iYTtjYXNlIGJhOnc9emk7YnJlYWsgaW5mX2xlYXZlO2Nhc2UgeGE6dz1IaTticmVhayBpbmZfbGVhdmU7Y2FzZSBTYTpyZXR1cm4gVWk7Y2FzZSBDYTpkZWZhdWx0OnJldHVybiBWaX1yZXR1cm4gZS5uZXh0X291dD1vLGUuYXZhaWxfb3V0PWMsZS5uZXh0X2luPWEsZS5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LChuLndzaXplfHxmIT09ZS5hdmFpbF9vdXQmJm4ubW9kZTx4YSYmKG4ubW9kZTx2YXx8dCE9PUZpKSkmJkxhKGUsZS5vdXRwdXQsZS5uZXh0X291dCxmLWUuYXZhaWxfb3V0KSxkLT1lLmF2YWlsX2luLGYtPWUuYXZhaWxfb3V0LGUudG90YWxfaW4rPWQsZS50b3RhbF9vdXQrPWYsbi50b3RhbCs9ZixuLndyYXAmNCYmZiYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP1NuKG4uY2hlY2ssaSxmLGUubmV4dF9vdXQtZik6dm4obi5jaGVjayxpLGYsZS5uZXh0X291dC1mKSksZS5kYXRhX3R5cGU9bi5iaXRzKyhuLmxhc3Q/NjQ6MCkrKG4ubW9kZT09PXJhPzEyODowKSsobi5tb2RlPT09ZGF8fG4ubW9kZT09PW9hPzI1NjowKSwoZD09PTAmJmY9PT0wfHx0PT09RmkpJiZ3PT09UmkmJih3PVdpKSx3fSx6YT1lPT57aWYoT2EoZSkpcmV0dXJuIFZpO2xldCB0PWUuc3RhdGU7cmV0dXJuIHQud2luZG93JiY9bnVsbCxlLnN0YXRlPW51bGwsUml9LEJhPShlLHQpPT57aWYoT2EoZSkpcmV0dXJuIFZpO2xldCBuPWUuc3RhdGU7cmV0dXJuIG4ud3JhcCYyPyhuLmhlYWQ9dCx0LmRvbmU9ITEsUmkpOlZpfSxWYT0oZSx0KT0+e2xldCBuPXQubGVuZ3RoLHIsaSxhO3JldHVybiBPYShlKXx8KHI9ZS5zdGF0ZSxyLndyYXAhPT0wJiZyLm1vZGUhPT1uYSk/Vmk6ci5tb2RlPT09bmEmJihpPTEsaT12bihpLHQsbiwwKSxpIT09ci5jaGVjayk/SGk6KGE9TGEoZSx0LG4sbiksYT8oci5tb2RlPVNhLFVpKTooci5oYXZlZGljdD0xLFJpKSl9LEhhPXtpbmZsYXRlUmVzZXQ6a2EsaW5mbGF0ZVJlc2V0MjpBYSxpbmZsYXRlUmVzZXRLZWVwOkosaW5mbGF0ZUluaXQ6TWEsaW5mbGF0ZUluaXQyOmphLGluZmxhdGU6UmEsaW5mbGF0ZUVuZDp6YSxpbmZsYXRlR2V0SGVhZGVyOkJhLGluZmxhdGVTZXREaWN0aW9uYXJ5OlZhLGluZmxhdGVJbmZvOmBwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpYH0sVWE9cnQsV2E9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyx7Wl9OT19GTFVTSDpHYSxaX0ZJTklTSDpLYSxaX09LOnFhLFpfU1RSRUFNX0VORDpKYSxaX05FRURfRElDVDpZYSxaX1NUUkVBTV9FUlJPUjpYYSxaX0RBVEFfRVJST1I6WmEsWl9NRU1fRVJST1I6UWF9PXduLGl0LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5zdHJtLHI9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxpPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGEsbyxzO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Zm9yKG89dD09PX5+dD90OnQ9PT0hMD9LYTpHYSxXYS5jYWxsKGUpPT09YFtvYmplY3QgQXJyYXlCdWZmZXJdYD9uLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOm4uaW5wdXQ9ZSxuLm5leHRfaW49MCxuLmF2YWlsX2luPW4uaW5wdXQubGVuZ3RoOzspe2ZvcihuLmF2YWlsX291dD09PTAmJihuLm91dHB1dD1uZXcgVWludDhBcnJheShyKSxuLm5leHRfb3V0PTAsbi5hdmFpbF9vdXQ9ciksYT1IYS5pbmZsYXRlKG4sbyksYT09PVlhJiZpJiYoYT1IYS5pbmZsYXRlU2V0RGljdGlvbmFyeShuLGkpLGE9PT1xYT9hPUhhLmluZmxhdGUobixvKTphPT09WmEmJihhPVlhKSk7bi5hdmFpbF9pbj4wJiZhPT09SmEmJm4uc3RhdGUud3JhcD4wJiZlW24ubmV4dF9pbl0hPT0wOylIYS5pbmZsYXRlUmVzZXQobiksYT1IYS5pbmZsYXRlKG4sbyk7c3dpdGNoKGEpe2Nhc2UgWGE6Y2FzZSBaYTpjYXNlIFlhOmNhc2UgUWE6cmV0dXJuIHRoaXMub25FbmQoYSksdGhpcy5lbmRlZD0hMCwhMX1pZihzPW4uYXZhaWxfb3V0LG4ubmV4dF9vdXQmJihuLmF2YWlsX291dD09PTB8fGE9PT1KYSkpaWYodGhpcy5vcHRpb25zLnRvPT09YHN0cmluZ2Ape2xldCBlPWlpLnV0Zjhib3JkZXIobi5vdXRwdXQsbi5uZXh0X291dCksdD1uLm5leHRfb3V0LWUsaT1paS5idWYyc3RyaW5nKG4ub3V0cHV0LGUpO24ubmV4dF9vdXQ9dCxuLmF2YWlsX291dD1yLXQsdCYmbi5vdXRwdXQuc2V0KG4ub3V0cHV0LnN1YmFycmF5KGUsZSt0KSwwKSx0aGlzLm9uRGF0YShpKX1lbHNlIHRoaXMub25EYXRhKG4ub3V0cHV0Lmxlbmd0aD09PW4ubmV4dF9vdXQ/bi5vdXRwdXQ6bi5vdXRwdXQuc3ViYXJyYXkoMCxuLm5leHRfb3V0KSk7aWYoIShhPT09cWEmJnM9PT0wKSl7aWYoYT09PUphKXJldHVybiBhPUhhLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGEpLHRoaXMuZW5kZWQ9ITAsITA7aWYobi5hdmFpbF9pbj09PTApYnJlYWt9fXJldHVybiEwfSxpdC5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LGl0LnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09cWEmJih0aGlzLm9wdGlvbnMudG89PT1gc3RyaW5nYD90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKGBgKTp0aGlzLnJlc3VsdD1aci5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSwkYT17SW5mbGF0ZTppdCxpbmZsYXRlOmF0LGluZmxhdGVSYXc6b3QsdW5nemlwOmF0LGNvbnN0YW50czp3bn0se0RlZmxhdGU6ZW8sZGVmbGF0ZTp0byxkZWZsYXRlUmF3Om5vLGd6aXA6cm99PWdpLHtJbmZsYXRlOmlvLGluZmxhdGU6YW8saW5mbGF0ZVJhdzpvbyx1bmd6aXA6c299PSRhLGNvPWlvLGxvPWFvfSkpO2Z1bmN0aW9uIGZvKGUsdCxuKXtsZXQgcj1lO2ZvcihsZXQgZT0wO2U8bjtlKyspcj1ob1socl50W2VdKSYyNTVdXnI+Pj44O3JldHVybiByfWZ1bmN0aW9uIHBvKGUsdCl7cmV0dXJuKGZvKGdvLGUsdCleZ28pPj4+MH1mdW5jdGlvbiBtbyhlLHQsbil7bGV0IHI9ZS5yZWFkVWludDMyKCksaT1wbyhuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrZS5vZmZzZXQtdC00LHQpLHQpO2lmKGkhPT1yKXRocm93IEVycm9yKGBDUkMgbWlzbWF0Y2ggZm9yIGNodW5rICR7bn0uIEV4cGVjdGVkICR7cn0sIGZvdW5kICR7aX1gKX12YXIgaG8sZ28sX289bygoKCk9Pntobz1bXTtmb3IobGV0IGU9MDtlPDI1NjtlKyspe2xldCB0PWU7Zm9yKGxldCBlPTA7ZTw4O2UrKyl0JjE/dD0zOTg4MjkyMzg0XnQ+Pj4xOnQ+Pj49MTtob1tlXT10fWdvPTQyOTQ5NjcyOTV9KSk7ZnVuY3Rpb24gdm8oZSx0LG4pe2ZvcihsZXQgcj0wO3I8bjtyKyspdFtyXT1lW3JdfWZ1bmN0aW9uIHlvKGUsdCxuLHIpe2xldCBpPTA7Zm9yKDtpPHI7aSsrKXRbaV09ZVtpXTtmb3IoO2k8bjtpKyspdFtpXT1lW2ldK3RbaS1yXSYyNTV9ZnVuY3Rpb24gYm8oZSx0LG4scil7bGV0IGk9MDtpZihuLmxlbmd0aD09PTApZm9yKDtpPHI7aSsrKXRbaV09ZVtpXTtlbHNlIGZvcig7aTxyO2krKyl0W2ldPWVbaV0rbltpXSYyNTV9ZnVuY3Rpb24geG8oZSx0LG4scixpKXtsZXQgYT0wO2lmKG4ubGVuZ3RoPT09MCl7Zm9yKDthPGk7YSsrKXRbYV09ZVthXTtmb3IoO2E8cjthKyspdFthXT1lW2FdKyh0W2EtaV0+PjEpJjI1NX1lbHNle2Zvcig7YTxpO2ErKyl0W2FdPWVbYV0rKG5bYV0+PjEpJjI1NTtmb3IoO2E8cjthKyspdFthXT1lW2FdKyh0W2EtaV0rblthXT4+MSkmMjU1fX1mdW5jdGlvbiBTbyhlLHQsbixyLGkpe2xldCBhPTA7aWYobi5sZW5ndGg9PT0wKXtmb3IoO2E8aTthKyspdFthXT1lW2FdO2Zvcig7YTxyO2ErKyl0W2FdPWVbYV0rdFthLWldJjI1NX1lbHNle2Zvcig7YTxpO2ErKyl0W2FdPWVbYV0rblthXSYyNTU7Zm9yKDthPHI7YSsrKXRbYV09ZVthXStDbyh0W2EtaV0sblthXSxuW2EtaV0pJjI1NX19ZnVuY3Rpb24gQ28oZSx0LG4pe2xldCByPWUrdC1uLGk9TWF0aC5hYnMoci1lKSxhPU1hdGguYWJzKHItdCksbz1NYXRoLmFicyhyLW4pO3JldHVybiBpPD1hJiZpPD1vP2U6YTw9bz90Om59dmFyIHdvPW8oKCgpPT57fSkpO2Z1bmN0aW9uIFRvKGUsdCxuLHIsaSxhKXtzd2l0Y2goZSl7Y2FzZSAwOnZvKHQsbixpKTticmVhaztjYXNlIDE6eW8odCxuLGksYSk7YnJlYWs7Y2FzZSAyOmJvKHQsbixyLGkpO2JyZWFrO2Nhc2UgMzp4byh0LG4scixpLGEpO2JyZWFrO2Nhc2UgNDpTbyh0LG4scixpLGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIGZpbHRlcjogJHtlfWApfX12YXIgRW89bygoKCk9Pnt3bygpfSkpO2Z1bmN0aW9uIERvKGUpe2xldHtkYXRhOnQsd2lkdGg6bixoZWlnaHQ6cixjaGFubmVsczppLGRlcHRoOmF9PWUsbz1be3g6MCx5OjAseFN0ZXA6OCx5U3RlcDo4fSx7eDo0LHk6MCx4U3RlcDo4LHlTdGVwOjh9LHt4OjAseTo0LHhTdGVwOjQseVN0ZXA6OH0se3g6Mix5OjAseFN0ZXA6NCx5U3RlcDo0fSx7eDowLHk6Mix4U3RlcDoyLHlTdGVwOjR9LHt4OjEseTowLHhTdGVwOjIseVN0ZXA6Mn0se3g6MCx5OjEseFN0ZXA6MSx5U3RlcDoyfV0scz1NYXRoLmNlaWwoYS84KSppLGM9bmV3IFVpbnQ4QXJyYXkocipuKnMpLGw9MDtmb3IobGV0IGU9MDtlPDc7ZSsrKXtsZXQgaT1vW2VdLGE9TWF0aC5jZWlsKChuLWkueCkvaS54U3RlcCksdT1NYXRoLmNlaWwoKHItaS55KS9pLnlTdGVwKTtpZihhPD0wfHx1PD0wKWNvbnRpbnVlO2xldCBkPWEqcyxmPW5ldyBVaW50OEFycmF5KGQpO2ZvcihsZXQgZT0wO2U8dTtlKyspe2xldCBvPXRbbCsrXSx1PXQuc3ViYXJyYXkobCxsK2QpO2wrPWQ7bGV0IHA9bmV3IFVpbnQ4QXJyYXkoZCk7VG8obyx1LHAsZixkLHMpLGYuc2V0KHApO2ZvcihsZXQgdD0wO3Q8YTt0Kyspe2xldCBhPWkueCt0KmkueFN0ZXAsbz1pLnkrZSppLnlTdGVwO2lmKCEoYT49bnx8bz49cikpZm9yKGxldCBlPTA7ZTxzO2UrKyljWyhvKm4rYSkqcytlXT1wW3QqcytlXX19fWlmKGE9PT0xNil7bGV0IGU9bmV3IFVpbnQxNkFycmF5KGMuYnVmZmVyKTtpZihBbylmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdPU9vKGVbdF0pO3JldHVybiBlfWVsc2UgcmV0dXJuIGN9ZnVuY3Rpb24gT28oZSl7cmV0dXJuKGUmMjU1KTw8OHxlPj44JjI1NX12YXIga28sQW8sam89bygoKCk9PntFbygpLGtvPW5ldyBVaW50MTZBcnJheShbMjU1XSksQW89bmV3IFVpbnQ4QXJyYXkoa28uYnVmZmVyKVswXT09PTI1NX0pKTtmdW5jdGlvbiBNbyhlKXtsZXR7ZGF0YTp0LHdpZHRoOm4saGVpZ2h0OnIsY2hhbm5lbHM6aSxkZXB0aDphfT1lLG89TWF0aC5jZWlsKGEvOCkqaSxzPU1hdGguY2VpbChhLzgqaSpuKSxjPW5ldyBVaW50OEFycmF5KHIqcyksbD1Jbyx1PTAsZCxmO2ZvcihsZXQgZT0wO2U8cjtlKyspe3N3aXRjaChkPXQuc3ViYXJyYXkodSsxLHUrMStzKSxmPWMuc3ViYXJyYXkoZSpzLChlKzEpKnMpLHRbdV0pe2Nhc2UgMDp2byhkLGYscyk7YnJlYWs7Y2FzZSAxOnlvKGQsZixzLG8pO2JyZWFrO2Nhc2UgMjpibyhkLGYsbCxzKTticmVhaztjYXNlIDM6eG8oZCxmLGwscyxvKTticmVhaztjYXNlIDQ6U28oZCxmLGwscyxvKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGBVbnN1cHBvcnRlZCBmaWx0ZXI6ICR7dFt1XX1gKX1sPWYsdSs9cysxfWlmKGE9PT0xNil7bGV0IGU9bmV3IFVpbnQxNkFycmF5KGMuYnVmZmVyKTtpZihGbylmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdPU5vKGVbdF0pO3JldHVybiBlfWVsc2UgcmV0dXJuIGN9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuKGUmMjU1KTw8OHxlPj44JjI1NX12YXIgUG8sRm8sSW8sTG89bygoKCk9Pnt3bygpLFBvPW5ldyBVaW50MTZBcnJheShbMjU1XSksRm89bmV3IFVpbnQ4QXJyYXkoUG8uYnVmZmVyKVswXT09PTI1NSxJbz1uZXcgVWludDhBcnJheX0pKTtmdW5jdGlvbiBSbyhlKXtpZighem8oZS5yZWFkQnl0ZXMoQm8ubGVuZ3RoKSkpdGhyb3cgRXJyb3IoYHdyb25nIFBORyBzaWduYXR1cmVgKX1mdW5jdGlvbiB6byhlKXtpZihlLmxlbmd0aDxCby5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCB0PTA7dDxCby5sZW5ndGg7dCsrKWlmKGVbdF0hPT1Cb1t0XSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgQm8sVm89bygoKCk9PntCbz1VaW50OEFycmF5Lm9mKDEzNyw4MCw3OCw3MSwxMywxMCwyNiwxMCl9KSk7ZnVuY3Rpb24gSG8oZSl7aWYoVW8oZSksZS5sZW5ndGg9PT0wfHxlLmxlbmd0aD43OSl0aHJvdyBFcnJvcihga2V5d29yZCBsZW5ndGggbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDc5YCl9ZnVuY3Rpb24gVW8oZSl7aWYoIVhvLnRlc3QoZSkpdGhyb3cgRXJyb3IoYGludmFsaWQgbGF0aW4xIHRleHRgKX1mdW5jdGlvbiBXbyhlLHQsbil7bGV0IHI9R28odCk7ZVtyXT1Lbyh0LG4tci5sZW5ndGgtMSl9ZnVuY3Rpb24gR28oZSl7Zm9yKGUubWFyaygpO2UucmVhZEJ5dGUoKSE9PUpvOyk7bGV0IHQ9ZS5vZmZzZXQ7ZS5yZXNldCgpO2xldCBuPVlvLmRlY29kZShlLnJlYWRCeXRlcyh0LWUub2Zmc2V0LTEpKTtyZXR1cm4gZS5za2lwKDEpLEhvKG4pLG59ZnVuY3Rpb24gS28oZSx0KXtyZXR1cm4gWW8uZGVjb2RlKGUucmVhZEJ5dGVzKHQpKX12YXIgcW8sSm8sWW8sWG8sWm89bygoKCk9PntfbygpLHFvPWB0RVh0YCxKbz0wLFlvPW5ldyBUZXh0RGVjb2RlcihgbGF0aW4xYCksWG89L15bXHUwMDAwLVx1MDBGRl0qJC99KSksUW8sJG8sZXMsdHMsbnMscnMsaXM9bygoKCk9PntRbz17VU5LTk9XTjotMSxHUkVZU0NBTEU6MCxUUlVFQ09MT1VSOjIsSU5ERVhFRF9DT0xPVVI6MyxHUkVZU0NBTEVfQUxQSEE6NCxUUlVFQ09MT1VSX0FMUEhBOjZ9LCRvPXtVTktOT1dOOi0xLERFRkxBVEU6MH0sZXM9e1VOS05PV046LTEsQURBUFRJVkU6MH0sdHM9e1VOS05PV046LTEsTk9fSU5URVJMQUNFOjAsQURBTTc6MX0sbnM9e05PTkU6MCxCQUNLR1JPVU5EOjEsUFJFVklPVVM6Mn0scnM9e1NPVVJDRTowLE9WRVI6MX19KSk7ZnVuY3Rpb24gYXMoZSl7aWYoZSE9PTEmJmUhPT0yJiZlIT09NCYmZSE9PTgmJmUhPT0xNil0aHJvdyBFcnJvcihgaW52YWxpZCBiaXQgZGVwdGg6ICR7ZX1gKTtyZXR1cm4gZX12YXIgb3Msc3M9bygoKCk9PntHZSgpLHVvKCksX28oKSxqbygpLExvKCksVm8oKSxabygpLGlzKCksb3M9Y2xhc3MgZXh0ZW5kcyBXZXtfY2hlY2tDcmM7X2luZmxhdG9yO19wbmc7X2Fwbmc7X2VuZDtfaGFzUGFsZXR0ZTtfcGFsZXR0ZTtfaGFzVHJhbnNwYXJlbmN5O190cmFuc3BhcmVuY3k7X2NvbXByZXNzaW9uTWV0aG9kO19maWx0ZXJNZXRob2Q7X2ludGVybGFjZU1ldGhvZDtfY29sb3JUeXBlO19pc0FuaW1hdGVkO19udW1iZXJPZkZyYW1lcztfbnVtYmVyT2ZQbGF5cztfZnJhbWVzO193cml0aW5nRGF0YUNodW5rcztjb25zdHJ1Y3RvcihlLHQ9e30pe3N1cGVyKGUpO2xldHtjaGVja0NyYzpuPSExfT10O3RoaXMuX2NoZWNrQ3JjPW4sdGhpcy5faW5mbGF0b3I9bmV3IGNvLHRoaXMuX3BuZz17d2lkdGg6LTEsaGVpZ2h0Oi0xLGNoYW5uZWxzOi0xLGRhdGE6bmV3IFVpbnQ4QXJyYXksZGVwdGg6MSx0ZXh0Ont9fSx0aGlzLl9hcG5nPXt3aWR0aDotMSxoZWlnaHQ6LTEsY2hhbm5lbHM6LTEsZGVwdGg6MSxudW1iZXJPZkZyYW1lczoxLG51bWJlck9mUGxheXM6MCx0ZXh0Ont9LGZyYW1lczpbXX0sdGhpcy5fZW5kPSExLHRoaXMuX2hhc1BhbGV0dGU9ITEsdGhpcy5fcGFsZXR0ZT1bXSx0aGlzLl9oYXNUcmFuc3BhcmVuY3k9ITEsdGhpcy5fdHJhbnNwYXJlbmN5PW5ldyBVaW50MTZBcnJheSx0aGlzLl9jb21wcmVzc2lvbk1ldGhvZD0kby5VTktOT1dOLHRoaXMuX2ZpbHRlck1ldGhvZD1lcy5VTktOT1dOLHRoaXMuX2ludGVybGFjZU1ldGhvZD10cy5VTktOT1dOLHRoaXMuX2NvbG9yVHlwZT1Rby5VTktOT1dOLHRoaXMuX2lzQW5pbWF0ZWQ9ITEsdGhpcy5fbnVtYmVyT2ZGcmFtZXM9MSx0aGlzLl9udW1iZXJPZlBsYXlzPTAsdGhpcy5fZnJhbWVzPVtdLHRoaXMuX3dyaXRpbmdEYXRhQ2h1bmtzPSExLHRoaXMuc2V0QmlnRW5kaWFuKCl9ZGVjb2RlKCl7Zm9yKFJvKHRoaXMpOyF0aGlzLl9lbmQ7KXtsZXQgZT10aGlzLnJlYWRVaW50MzIoKSx0PXRoaXMucmVhZENoYXJzKDQpO3RoaXMuZGVjb2RlQ2h1bmsoZSx0KX1yZXR1cm4gdGhpcy5kZWNvZGVJbWFnZSgpLHRoaXMuX3BuZ31kZWNvZGVBcG5nKCl7Zm9yKFJvKHRoaXMpOyF0aGlzLl9lbmQ7KXtsZXQgZT10aGlzLnJlYWRVaW50MzIoKSx0PXRoaXMucmVhZENoYXJzKDQpO3RoaXMuZGVjb2RlQXBuZ0NodW5rKGUsdCl9cmV0dXJuIHRoaXMuZGVjb2RlQXBuZ0ltYWdlKCksdGhpcy5fYXBuZ31kZWNvZGVDaHVuayhlLHQpe2xldCBuPXRoaXMub2Zmc2V0O3N3aXRjaCh0KXtjYXNlYElIRFJgOnRoaXMuZGVjb2RlSUhEUigpO2JyZWFrO2Nhc2VgUExURWA6dGhpcy5kZWNvZGVQTFRFKGUpO2JyZWFrO2Nhc2VgSURBVGA6dGhpcy5kZWNvZGVJREFUKGUpO2JyZWFrO2Nhc2VgSUVORGA6dGhpcy5fZW5kPSEwO2JyZWFrO2Nhc2VgdFJOU2A6dGhpcy5kZWNvZGV0Uk5TKGUpO2JyZWFrO2Nhc2VgaUNDUGA6dGhpcy5kZWNvZGVpQ0NQKGUpO2JyZWFrO2Nhc2UgcW86V28odGhpcy5fcG5nLnRleHQsdGhpcyxlKTticmVhaztjYXNlYHBIWXNgOnRoaXMuZGVjb2RlcEhZcygpO2JyZWFrO2RlZmF1bHQ6dGhpcy5za2lwKGUpO2JyZWFrfWlmKHRoaXMub2Zmc2V0LW4hPT1lKXRocm93IEVycm9yKGBMZW5ndGggbWlzbWF0Y2ggd2hpbGUgZGVjb2RpbmcgY2h1bmsgJHt0fWApO3RoaXMuX2NoZWNrQ3JjP21vKHRoaXMsZSs0LHQpOnRoaXMuc2tpcCg0KX1kZWNvZGVBcG5nQ2h1bmsoZSx0KXtsZXQgbj10aGlzLm9mZnNldDtzd2l0Y2godCE9PWBmZEFUYCYmdCE9PWBJREFUYCYmdGhpcy5fd3JpdGluZ0RhdGFDaHVua3MmJnRoaXMucHVzaERhdGFUb0ZyYW1lKCksdCl7Y2FzZWBhY1RMYDp0aGlzLmRlY29kZUFDVEwoKTticmVhaztjYXNlYGZjVExgOnRoaXMuZGVjb2RlRkNUTCgpO2JyZWFrO2Nhc2VgZmRBVGA6dGhpcy5kZWNvZGVGREFUKGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWNvZGVDaHVuayhlLHQpLHRoaXMub2Zmc2V0PW4rZTticmVha31pZih0aGlzLm9mZnNldC1uIT09ZSl0aHJvdyBFcnJvcihgTGVuZ3RoIG1pc21hdGNoIHdoaWxlIGRlY29kaW5nIGNodW5rICR7dH1gKTt0aGlzLl9jaGVja0NyYz9tbyh0aGlzLGUrNCx0KTp0aGlzLnNraXAoNCl9ZGVjb2RlSUhEUigpe2xldCBlPXRoaXMuX3BuZztlLndpZHRoPXRoaXMucmVhZFVpbnQzMigpLGUuaGVpZ2h0PXRoaXMucmVhZFVpbnQzMigpLGUuZGVwdGg9YXModGhpcy5yZWFkVWludDgoKSk7bGV0IHQ9dGhpcy5yZWFkVWludDgoKTt0aGlzLl9jb2xvclR5cGU9dDtsZXQgbjtzd2l0Y2godCl7Y2FzZSBRby5HUkVZU0NBTEU6bj0xO2JyZWFrO2Nhc2UgUW8uVFJVRUNPTE9VUjpuPTM7YnJlYWs7Y2FzZSBRby5JTkRFWEVEX0NPTE9VUjpuPTE7YnJlYWs7Y2FzZSBRby5HUkVZU0NBTEVfQUxQSEE6bj0yO2JyZWFrO2Nhc2UgUW8uVFJVRUNPTE9VUl9BTFBIQTpuPTQ7YnJlYWs7Y2FzZSBRby5VTktOT1dOOmRlZmF1bHQ6dGhyb3cgRXJyb3IoYFVua25vd24gY29sb3IgdHlwZTogJHt0fWApfWlmKHRoaXMuX3BuZy5jaGFubmVscz1uLHRoaXMuX2NvbXByZXNzaW9uTWV0aG9kPXRoaXMucmVhZFVpbnQ4KCksdGhpcy5fY29tcHJlc3Npb25NZXRob2QhPT0kby5ERUZMQVRFKXRocm93IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2Q6ICR7dGhpcy5fY29tcHJlc3Npb25NZXRob2R9YCk7dGhpcy5fZmlsdGVyTWV0aG9kPXRoaXMucmVhZFVpbnQ4KCksdGhpcy5faW50ZXJsYWNlTWV0aG9kPXRoaXMucmVhZFVpbnQ4KCl9ZGVjb2RlQUNUTCgpe3RoaXMuX251bWJlck9mRnJhbWVzPXRoaXMucmVhZFVpbnQzMigpLHRoaXMuX251bWJlck9mUGxheXM9dGhpcy5yZWFkVWludDMyKCksdGhpcy5faXNBbmltYXRlZD0hMH1kZWNvZGVGQ1RMKCl7bGV0IGU9e3NlcXVlbmNlTnVtYmVyOnRoaXMucmVhZFVpbnQzMigpLHdpZHRoOnRoaXMucmVhZFVpbnQzMigpLGhlaWdodDp0aGlzLnJlYWRVaW50MzIoKSx4T2Zmc2V0OnRoaXMucmVhZFVpbnQzMigpLHlPZmZzZXQ6dGhpcy5yZWFkVWludDMyKCksZGVsYXlOdW1iZXI6dGhpcy5yZWFkVWludDE2KCksZGVsYXlEZW5vbWluYXRvcjp0aGlzLnJlYWRVaW50MTYoKSxkaXNwb3NlT3A6dGhpcy5yZWFkVWludDgoKSxibGVuZE9wOnRoaXMucmVhZFVpbnQ4KCksZGF0YTpuZXcgVWludDhBcnJheX07dGhpcy5fZnJhbWVzLnB1c2goZSl9ZGVjb2RlUExURShlKXtpZihlJTMhPTApdGhyb3cgUmFuZ2VFcnJvcihgUExURSBmaWVsZCBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMuIEdvdCAke2V9YCk7bGV0IHQ9ZS8zO3RoaXMuX2hhc1BhbGV0dGU9ITA7bGV0IG49W107dGhpcy5fcGFsZXR0ZT1uO2ZvcihsZXQgZT0wO2U8dDtlKyspbi5wdXNoKFt0aGlzLnJlYWRVaW50OCgpLHRoaXMucmVhZFVpbnQ4KCksdGhpcy5yZWFkVWludDgoKV0pfWRlY29kZUlEQVQoZSl7dGhpcy5fd3JpdGluZ0RhdGFDaHVua3M9ITA7bGV0IHQ9ZSxuPXRoaXMub2Zmc2V0K3RoaXMuYnl0ZU9mZnNldDtpZih0aGlzLl9pbmZsYXRvci5wdXNoKG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLG4sdCkpLHRoaXMuX2luZmxhdG9yLmVycil0aHJvdyBFcnJvcihgRXJyb3Igd2hpbGUgZGVjb21wcmVzc2luZyB0aGUgZGF0YTogJHt0aGlzLl9pbmZsYXRvci5lcnJ9YCk7dGhpcy5za2lwKGUpfWRlY29kZUZEQVQoZSl7dGhpcy5fd3JpdGluZ0RhdGFDaHVua3M9ITA7bGV0IHQ9ZSxuPXRoaXMub2Zmc2V0K3RoaXMuYnl0ZU9mZnNldDtpZihuKz00LHQtPTQsdGhpcy5faW5mbGF0b3IucHVzaChuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixuLHQpKSx0aGlzLl9pbmZsYXRvci5lcnIpdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGRlY29tcHJlc3NpbmcgdGhlIGRhdGE6ICR7dGhpcy5faW5mbGF0b3IuZXJyfWApO3RoaXMuc2tpcChlKX1kZWNvZGV0Uk5TKGUpe3N3aXRjaCh0aGlzLl9jb2xvclR5cGUpe2Nhc2UgUW8uR1JFWVNDQUxFOmNhc2UgUW8uVFJVRUNPTE9VUjppZihlJTIhPTApdGhyb3cgUmFuZ2VFcnJvcihgdFJOUyBjaHVuayBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIuIEdvdCAke2V9YCk7aWYoZS8yPnRoaXMuX3BuZy53aWR0aCp0aGlzLl9wbmcuaGVpZ2h0KXRocm93IEVycm9yKGB0Uk5TIGNodW5rIGNvbnRhaW5zIG1vcmUgYWxwaGEgdmFsdWVzIHRoYW4gdGhlcmUgYXJlIHBpeGVscyAoJHtlLzJ9IHZzICR7dGhpcy5fcG5nLndpZHRoKnRoaXMuX3BuZy5oZWlnaHR9KWApO3RoaXMuX2hhc1RyYW5zcGFyZW5jeT0hMCx0aGlzLl90cmFuc3BhcmVuY3k9bmV3IFVpbnQxNkFycmF5KGUvMik7Zm9yKGxldCB0PTA7dDxlLzI7dCsrKXRoaXMuX3RyYW5zcGFyZW5jeVt0XT10aGlzLnJlYWRVaW50MTYoKTticmVhaztjYXNlIFFvLklOREVYRURfQ09MT1VSOntpZihlPnRoaXMuX3BhbGV0dGUubGVuZ3RoKXRocm93IEVycm9yKGB0Uk5TIGNodW5rIGNvbnRhaW5zIG1vcmUgYWxwaGEgdmFsdWVzIHRoYW4gdGhlcmUgYXJlIHBhbGV0dGUgY29sb3JzICgke2V9IHZzICR7dGhpcy5fcGFsZXR0ZS5sZW5ndGh9KWApO2xldCB0PTA7Zm9yKDt0PGU7dCsrKXtsZXQgZT10aGlzLnJlYWRCeXRlKCk7dGhpcy5fcGFsZXR0ZVt0XS5wdXNoKGUpfWZvcig7dDx0aGlzLl9wYWxldHRlLmxlbmd0aDt0KyspdGhpcy5fcGFsZXR0ZVt0XS5wdXNoKDI1NSk7YnJlYWt9Y2FzZSBRby5VTktOT1dOOmNhc2UgUW8uR1JFWVNDQUxFX0FMUEhBOmNhc2UgUW8uVFJVRUNPTE9VUl9BTFBIQTpkZWZhdWx0OnRocm93IEVycm9yKGB0Uk5TIGNodW5rIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGNvbG9yIHR5cGUgJHt0aGlzLl9jb2xvclR5cGV9YCl9fWRlY29kZWlDQ1AoZSl7bGV0IHQ9R28odGhpcyksbj10aGlzLnJlYWRVaW50OCgpO2lmKG4hPT0kby5ERUZMQVRFKXRocm93IEVycm9yKGBVbnN1cHBvcnRlZCBpQ0NQIGNvbXByZXNzaW9uIG1ldGhvZDogJHtufWApO2xldCByPXRoaXMucmVhZEJ5dGVzKGUtdC5sZW5ndGgtMik7dGhpcy5fcG5nLmljY0VtYmVkZGVkUHJvZmlsZT17bmFtZTp0LHByb2ZpbGU6bG8ocil9fWRlY29kZXBIWXMoKXtsZXQgZT10aGlzLnJlYWRVaW50MzIoKSx0PXRoaXMucmVhZFVpbnQzMigpLG49dGhpcy5yZWFkQnl0ZSgpO3RoaXMuX3BuZy5yZXNvbHV0aW9uPXt4OmUseTp0LHVuaXQ6bn19ZGVjb2RlQXBuZ0ltYWdlKCl7dGhpcy5fYXBuZy53aWR0aD10aGlzLl9wbmcud2lkdGgsdGhpcy5fYXBuZy5oZWlnaHQ9dGhpcy5fcG5nLmhlaWdodCx0aGlzLl9hcG5nLmNoYW5uZWxzPXRoaXMuX3BuZy5jaGFubmVscyx0aGlzLl9hcG5nLmRlcHRoPXRoaXMuX3BuZy5kZXB0aCx0aGlzLl9hcG5nLm51bWJlck9mRnJhbWVzPXRoaXMuX251bWJlck9mRnJhbWVzLHRoaXMuX2FwbmcubnVtYmVyT2ZQbGF5cz10aGlzLl9udW1iZXJPZlBsYXlzLHRoaXMuX2FwbmcudGV4dD10aGlzLl9wbmcudGV4dCx0aGlzLl9hcG5nLnJlc29sdXRpb249dGhpcy5fcG5nLnJlc29sdXRpb247Zm9yKGxldCBlPTA7ZTx0aGlzLl9udW1iZXJPZkZyYW1lcztlKyspe2xldCB0PXtzZXF1ZW5jZU51bWJlcjp0aGlzLl9mcmFtZXNbZV0uc2VxdWVuY2VOdW1iZXIsZGVsYXlOdW1iZXI6dGhpcy5fZnJhbWVzW2VdLmRlbGF5TnVtYmVyLGRlbGF5RGVub21pbmF0b3I6dGhpcy5fZnJhbWVzW2VdLmRlbGF5RGVub21pbmF0b3IsZGF0YTp0aGlzLl9hcG5nLmRlcHRoPT09OD9uZXcgVWludDhBcnJheSh0aGlzLl9hcG5nLndpZHRoKnRoaXMuX2FwbmcuaGVpZ2h0KnRoaXMuX2FwbmcuY2hhbm5lbHMpOm5ldyBVaW50MTZBcnJheSh0aGlzLl9hcG5nLndpZHRoKnRoaXMuX2FwbmcuaGVpZ2h0KnRoaXMuX2FwbmcuY2hhbm5lbHMpfSxuPXRoaXMuX2ZyYW1lcy5hdChlKTtpZihuKXtpZihuLmRhdGE9TW8oe2RhdGE6bi5kYXRhLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LGNoYW5uZWxzOnRoaXMuX2FwbmcuY2hhbm5lbHMsZGVwdGg6dGhpcy5fYXBuZy5kZXB0aH0pLHRoaXMuX2hhc1BhbGV0dGUmJih0aGlzLl9hcG5nLnBhbGV0dGU9dGhpcy5fcGFsZXR0ZSksdGhpcy5faGFzVHJhbnNwYXJlbmN5JiYodGhpcy5fYXBuZy50cmFuc3BhcmVuY3k9dGhpcy5fdHJhbnNwYXJlbmN5KSxlPT09MHx8bi54T2Zmc2V0PT09MCYmbi55T2Zmc2V0PT09MCYmbi53aWR0aD09PXRoaXMuX3BuZy53aWR0aCYmbi5oZWlnaHQ9PT10aGlzLl9wbmcuaGVpZ2h0KXQuZGF0YT1uLmRhdGE7ZWxzZXtsZXQgcj10aGlzLl9hcG5nLmZyYW1lcy5hdChlLTEpO3RoaXMuZGlzcG9zZUZyYW1lKG4scix0KSx0aGlzLmFkZEZyYW1lRGF0YVRvQ2FudmFzKHQsbil9dGhpcy5fYXBuZy5mcmFtZXMucHVzaCh0KX19cmV0dXJuIHRoaXMuX2Fwbmd9ZGlzcG9zZUZyYW1lKGUsdCxuKXtzd2l0Y2goZS5kaXNwb3NlT3Ape2Nhc2UgbnMuTk9ORTpicmVhaztjYXNlIG5zLkJBQ0tHUk9VTkQ6Zm9yKGxldCB0PTA7dDx0aGlzLl9wbmcuaGVpZ2h0O3QrKylmb3IobGV0IHI9MDtyPHRoaXMuX3BuZy53aWR0aDtyKyspe2xldCBpPSh0KmUud2lkdGgrcikqdGhpcy5fcG5nLmNoYW5uZWxzO2ZvcihsZXQgZT0wO2U8dGhpcy5fcG5nLmNoYW5uZWxzO2UrKyluLmRhdGFbaStlXT0wfWJyZWFrO2Nhc2UgbnMuUFJFVklPVVM6bi5kYXRhLnNldCh0LmRhdGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYFVua25vd24gZGlzcG9zZU9wYCl9fWFkZEZyYW1lRGF0YVRvQ2FudmFzKGUsdCl7bGV0IG49MTw8dGhpcy5fcG5nLmRlcHRoLHI9KGUsbik9Pih7aW5kZXg6KChlK3QueU9mZnNldCkqdGhpcy5fcG5nLndpZHRoK3QueE9mZnNldCtuKSp0aGlzLl9wbmcuY2hhbm5lbHMsZnJhbWVJbmRleDooZSp0LndpZHRoK24pKnRoaXMuX3BuZy5jaGFubmVsc30pO3N3aXRjaCh0LmJsZW5kT3Ape2Nhc2UgcnMuU09VUkNFOmZvcihsZXQgbj0wO248dC5oZWlnaHQ7bisrKWZvcihsZXQgaT0wO2k8dC53aWR0aDtpKyspe2xldHtpbmRleDphLGZyYW1lSW5kZXg6b309cihuLGkpO2ZvcihsZXQgbj0wO248dGhpcy5fcG5nLmNoYW5uZWxzO24rKyllLmRhdGFbYStuXT10LmRhdGFbbytuXX1icmVhaztjYXNlIHJzLk9WRVI6Zm9yKGxldCBpPTA7aTx0LmhlaWdodDtpKyspZm9yKGxldCBhPTA7YTx0LndpZHRoO2ErKyl7bGV0e2luZGV4Om8sZnJhbWVJbmRleDpzfT1yKGksYSk7Zm9yKGxldCByPTA7cjx0aGlzLl9wbmcuY2hhbm5lbHM7cisrKXtsZXQgaT10LmRhdGFbcyt0aGlzLl9wbmcuY2hhbm5lbHMtMV0vbixhPXIlKHRoaXMuX3BuZy5jaGFubmVscy0xKT09MD8xOnQuZGF0YVtzK3JdLGM9TWF0aC5mbG9vcihpKmErKDEtaSkqZS5kYXRhW28rcl0pO2UuZGF0YVtvK3JdKz1jfX1icmVhaztkZWZhdWx0OnRocm93IEVycm9yKGBVbmtub3duIGJsZW5kT3BgKX19ZGVjb2RlSW1hZ2UoKXtpZih0aGlzLl9pbmZsYXRvci5lcnIpdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGRlY29tcHJlc3NpbmcgdGhlIGRhdGE6ICR7dGhpcy5faW5mbGF0b3IuZXJyfWApO2xldCBlPXRoaXMuX2lzQW5pbWF0ZWQ/KHRoaXMuX2ZyYW1lcz8uYXQoMCkpLmRhdGE6dGhpcy5faW5mbGF0b3IucmVzdWx0O2lmKHRoaXMuX2ZpbHRlck1ldGhvZCE9PWVzLkFEQVBUSVZFKXRocm93IEVycm9yKGBGaWx0ZXIgbWV0aG9kICR7dGhpcy5fZmlsdGVyTWV0aG9kfSBub3Qgc3VwcG9ydGVkYCk7aWYodGhpcy5faW50ZXJsYWNlTWV0aG9kPT09dHMuTk9fSU5URVJMQUNFKXRoaXMuX3BuZy5kYXRhPU1vKHtkYXRhOmUsd2lkdGg6dGhpcy5fcG5nLndpZHRoLGhlaWdodDp0aGlzLl9wbmcuaGVpZ2h0LGNoYW5uZWxzOnRoaXMuX3BuZy5jaGFubmVscyxkZXB0aDp0aGlzLl9wbmcuZGVwdGh9KTtlbHNlIGlmKHRoaXMuX2ludGVybGFjZU1ldGhvZD09PXRzLkFEQU03KXRoaXMuX3BuZy5kYXRhPURvKHtkYXRhOmUsd2lkdGg6dGhpcy5fcG5nLndpZHRoLGhlaWdodDp0aGlzLl9wbmcuaGVpZ2h0LGNoYW5uZWxzOnRoaXMuX3BuZy5jaGFubmVscyxkZXB0aDp0aGlzLl9wbmcuZGVwdGh9KTtlbHNlIHRocm93IEVycm9yKGBJbnRlcmxhY2UgbWV0aG9kICR7dGhpcy5faW50ZXJsYWNlTWV0aG9kfSBub3Qgc3VwcG9ydGVkYCk7dGhpcy5faGFzUGFsZXR0ZSYmKHRoaXMuX3BuZy5wYWxldHRlPXRoaXMuX3BhbGV0dGUpLHRoaXMuX2hhc1RyYW5zcGFyZW5jeSYmKHRoaXMuX3BuZy50cmFuc3BhcmVuY3k9dGhpcy5fdHJhbnNwYXJlbmN5KX1wdXNoRGF0YVRvRnJhbWUoKXtsZXQgZT10aGlzLl9pbmZsYXRvci5yZXN1bHQsdD10aGlzLl9mcmFtZXMuYXQoLTEpO3Q/dC5kYXRhPWU6dGhpcy5fZnJhbWVzLnB1c2goe3NlcXVlbmNlTnVtYmVyOjAsd2lkdGg6dGhpcy5fcG5nLndpZHRoLGhlaWdodDp0aGlzLl9wbmcuaGVpZ2h0LHhPZmZzZXQ6MCx5T2Zmc2V0OjAsZGVsYXlOdW1iZXI6MCxkZWxheURlbm9taW5hdG9yOjAsZGlzcG9zZU9wOm5zLk5PTkUsYmxlbmRPcDpycy5TT1VSQ0UsZGF0YTplfSksdGhpcy5faW5mbGF0b3I9bmV3IGNvLHRoaXMuX3dyaXRpbmdEYXRhQ2h1bmtzPSExfX19KSksY3M9bygoKCk9PntHZSgpLHVvKCksX28oKSxabygpfSkpLGxzLHVzPW8oKCgpPT57KGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPWBVTktOT1dOYCxlW2UuTUVUUkU9MV09YE1FVFJFYH0pKGxzfHw9e30pfSkpO2Z1bmN0aW9uIGRzKGUsdCl7cmV0dXJuIG5ldyBvcyhlLHQpLmRlY29kZSgpfXZhciBmcz1vKCgoKT0+e3NzKCksY3MoKSxWbygpLHVzKCl9KSkscHM9cygoKGUsdCk9PnsoZnVuY3Rpb24obixyKXt0eXBlb2YgZT09YG9iamVjdGAmJnQhPT12b2lkIDA/dC5leHBvcnRzPXIoKTp0eXBlb2YgZGVmaW5lPT1gZnVuY3Rpb25gJiZkZWZpbmUuYW1kP2RlZmluZShyKToobj10eXBlb2YgZ2xvYmFsVGhpczxgdWA/Z2xvYmFsVGhpczpufHxzZWxmLG4uaHRtbDJjYW52YXM9cigpKX0pKGUsKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9LGUodCxuKX07ZnVuY3Rpb24gdCh0LG4pe2lmKHR5cGVvZiBuIT1gZnVuY3Rpb25gJiZuIT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoYENsYXNzIGV4dGVuZHMgdmFsdWUgYCtTdHJpbmcobikrYCBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsYCk7ZSh0LG4pO2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9bj09PW51bGw/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfXZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0sdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9LG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiByKGUsdCxuLHIpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4oZnVuY3Rpb24odCl7dChlKX0pfXJldHVybiBuZXcobnx8PVByb21pc2UpKGZ1bmN0aW9uKG4sYSl7ZnVuY3Rpb24gbyhlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gYyhlKXtlLmRvbmU/bihlLnZhbHVlKTppKGUudmFsdWUpLnRoZW4obyxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKGFbMF0mMSl0aHJvdyBhWzFdO3JldHVybiBhWzFdfSx0cnlzOltdLG9wczpbXX0scixpLGEsbztyZXR1cm4gbz17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LHR5cGVvZiBTeW1ib2w9PWBmdW5jdGlvbmAmJihvW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG87ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGMoW2UsdF0pfX1mdW5jdGlvbiBjKG8pe2lmKHIpdGhyb3cgVHlwZUVycm9yKGBHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuYCk7Zm9yKDtuOyl0cnl7aWYocj0xLGkmJihhPW9bMF0mMj9pLnJldHVybjpvWzBdP2kudGhyb3d8fCgoYT1pLnJldHVybikmJmEuY2FsbChpKSwwKTppLm5leHQpJiYhKGE9YS5jYWxsKGksb1sxXSkpLmRvbmUpcmV0dXJuIGE7c3dpdGNoKGk9MCxhJiYobz1bb1swXSYyLGEudmFsdWVdKSxvWzBdKXtjYXNlIDA6Y2FzZSAxOmE9bzticmVhaztjYXNlIDQ6cmV0dXJuIG4ubGFiZWwrKyx7dmFsdWU6b1sxXSxkb25lOiExfTtjYXNlIDU6bi5sYWJlbCsrLGk9b1sxXSxvPVswXTtjb250aW51ZTtjYXNlIDc6bz1uLm9wcy5wb3AoKSxuLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZigoYT1uLnRyeXMsIShhPWEubGVuZ3RoPjAmJmFbYS5sZW5ndGgtMV0pKSYmKG9bMF09PT02fHxvWzBdPT09Mikpe249MDtjb250aW51ZX1pZihvWzBdPT09MyYmKCFhfHxvWzFdPmFbMF0mJm9bMV08YVszXSkpe24ubGFiZWw9b1sxXTticmVha31pZihvWzBdPT09NiYmbi5sYWJlbDxhWzFdKXtuLmxhYmVsPWFbMV0sYT1vO2JyZWFrfWlmKGEmJm4ubGFiZWw8YVsyXSl7bi5sYWJlbD1hWzJdLG4ub3BzLnB1c2gobyk7YnJlYWt9YVsyXSYmbi5vcHMucG9wKCksbi50cnlzLnBvcCgpO2NvbnRpbnVlfW89dC5jYWxsKGUsbil9Y2F0Y2goZSl7bz1bNixlXSxpPTB9ZmluYWxseXtyPWE9MH1pZihvWzBdJjUpdGhyb3cgb1sxXTtyZXR1cm57dmFsdWU6b1swXT9vWzFdOnZvaWQgMCxkb25lOiEwfX19ZnVuY3Rpb24gYShlLHQsbil7aWYobnx8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciByPTAsaT10Lmxlbmd0aCxhO3I8aTtyKyspKGF8fCEociBpbiB0KSkmJihhfHw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLHIpLGFbcl09dFtyXSk7cmV0dXJuIGUuY29uY2F0KGF8fHQpfWZvcih2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5sZWZ0PWUsdGhpcy50b3A9dCx0aGlzLndpZHRoPW4sdGhpcy5oZWlnaHQ9cn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiBuZXcgZSh0aGlzLmxlZnQrdCx0aGlzLnRvcCtuLHRoaXMud2lkdGgrcix0aGlzLmhlaWdodCtpKX0sZS5mcm9tQ2xpZW50UmVjdD1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgZShuLmxlZnQrdC53aW5kb3dCb3VuZHMubGVmdCxuLnRvcCt0LndpbmRvd0JvdW5kcy50b3Asbi53aWR0aCxuLmhlaWdodCl9LGUuZnJvbURPTVJlY3RMaXN0PWZ1bmN0aW9uKHQsbil7dmFyIHI9QXJyYXkuZnJvbShuKS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLndpZHRoIT09MH0pO3JldHVybiByP25ldyBlKHIubGVmdCt0LndpbmRvd0JvdW5kcy5sZWZ0LHIudG9wK3Qud2luZG93Qm91bmRzLnRvcCxyLndpZHRoLHIuaGVpZ2h0KTplLkVNUFRZfSxlLkVNUFRZPW5ldyBlKDAsMCwwLDApLGV9KCkscz1mdW5jdGlvbihlLHQpe3JldHVybiBvLmZyb21DbGllbnRSZWN0KGUsdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9LGM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ib2R5LG49ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIXR8fCFuKXRocm93IEVycm9yKGBVbmFibGUgdG8gZ2V0IGRvY3VtZW50IHNpemVgKTtyZXR1cm4gbmV3IG8oMCwwLE1hdGgubWF4KE1hdGgubWF4KHQuc2Nyb2xsV2lkdGgsbi5zY3JvbGxXaWR0aCksTWF0aC5tYXgodC5vZmZzZXRXaWR0aCxuLm9mZnNldFdpZHRoKSxNYXRoLm1heCh0LmNsaWVudFdpZHRoLG4uY2xpZW50V2lkdGgpKSxNYXRoLm1heChNYXRoLm1heCh0LnNjcm9sbEhlaWdodCxuLnNjcm9sbEhlaWdodCksTWF0aC5tYXgodC5vZmZzZXRIZWlnaHQsbi5vZmZzZXRIZWlnaHQpLE1hdGgubWF4KHQuY2xpZW50SGVpZ2h0LG4uY2xpZW50SGVpZ2h0KSkpfSxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTAscj1lLmxlbmd0aDtuPHI7KXt2YXIgaT1lLmNoYXJDb2RlQXQobisrKTtpZihpPj01NTI5NiYmaTw9NTYzMTkmJm48cil7dmFyIGE9ZS5jaGFyQ29kZUF0KG4rKyk7KGEmNjQ1MTIpPT01NjMyMD90LnB1c2goKChpJjEwMjMpPDwxMCkrKGEmMTAyMykrNjU1MzYpOih0LnB1c2goaSksbi0tKX1lbHNlIHQucHVzaChpKX1yZXR1cm4gdH0sdT1mdW5jdGlvbigpe3ZhciBlPVsuLi5hcmd1bWVudHNdO2lmKFN0cmluZy5mcm9tQ29kZVBvaW50KXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsZSk7dmFyIHQ9ZS5sZW5ndGg7aWYoIXQpcmV0dXJuYGA7Zm9yKHZhciBuPVtdLHI9LTEsaT1gYDsrK3I8dDspe3ZhciBhPWVbcl07YTw9NjU1MzU/bi5wdXNoKGEpOihhLT02NTUzNixuLnB1c2goKGE+PjEwKSs1NTI5NixhJTEwMjQrNTYzMjApKSwocisxPT09dHx8bi5sZW5ndGg+MTYzODQpJiYoaSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsbiksbi5sZW5ndGg9MCl9cmV0dXJuIGl9LGQ9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9gLGY9dHlwZW9mIFVpbnQ4QXJyYXk+YHVgP1tdOm5ldyBVaW50OEFycmF5KDI1NikscD0wO3A8ZC5sZW5ndGg7cCsrKWZbZC5jaGFyQ29kZUF0KHApXT1wO2Zvcih2YXIgbT1gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL2AsaD10eXBlb2YgVWludDhBcnJheT5gdWA/W106bmV3IFVpbnQ4QXJyYXkoMjU2KSxnPTA7ZzxtLmxlbmd0aDtnKyspaFttLmNoYXJDb2RlQXQoZyldPWc7Zm9yKHZhciBfPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoKi43NSxuPWUubGVuZ3RoLHIsaT0wLGEsbyxzLGM7ZVtlLmxlbmd0aC0xXT09PWA9YCYmKHQtLSxlW2UubGVuZ3RoLTJdPT09YD1gJiZ0LS0pO3ZhciBsPXR5cGVvZiBBcnJheUJ1ZmZlcjxgdWAmJnR5cGVvZiBVaW50OEFycmF5PGB1YCYmVWludDhBcnJheS5wcm90b3R5cGUuc2xpY2UhPT12b2lkIDA/bmV3IEFycmF5QnVmZmVyKHQpOkFycmF5KHQpLHU9QXJyYXkuaXNBcnJheShsKT9sOm5ldyBVaW50OEFycmF5KGwpO2ZvcihyPTA7cjxuO3IrPTQpYT1oW2UuY2hhckNvZGVBdChyKV0sbz1oW2UuY2hhckNvZGVBdChyKzEpXSxzPWhbZS5jaGFyQ29kZUF0KHIrMildLGM9aFtlLmNoYXJDb2RlQXQociszKV0sdVtpKytdPWE8PDJ8bz4+NCx1W2krK109KG8mMTUpPDw0fHM+PjIsdVtpKytdPShzJjMpPDw2fGMmNjM7cmV0dXJuIGx9LHY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49W10scj0wO3I8dDtyKz0yKW4ucHVzaChlW3IrMV08PDh8ZVtyXSk7cmV0dXJuIG59LHk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49W10scj0wO3I8dDtyKz00KW4ucHVzaChlW3IrM108PDI0fGVbcisyXTw8MTZ8ZVtyKzFdPDw4fGVbcl0pO3JldHVybiBufSxiPTUseD0xMSxTPTIsQz14LWIsdz02NTUzNj4+YixUPSgxPDxiKS0xLEU9dysoMTAyND4+YikrMzIsRD02NTUzNj4+eCxPPSgxPDxDKS0xLGs9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnNsaWNlP2Uuc2xpY2UodCxuKTpuZXcgVWludDE2QXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSx0LG4pKX0sQT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuc2xpY2U/ZS5zbGljZSh0LG4pOm5ldyBVaW50MzJBcnJheShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLHQsbikpfSxqPWZ1bmN0aW9uKGUsdCl7dmFyIG49XyhlKSxyPUFycmF5LmlzQXJyYXkobik/eShuKTpuZXcgVWludDMyQXJyYXkobiksaT1BcnJheS5pc0FycmF5KG4pP3Yobik6bmV3IFVpbnQxNkFycmF5KG4pLGE9MjQsbz1rKGksYS8yLHJbNF0vMikscz1yWzVdPT09Mj9rKGksKGErcls0XSkvMik6QShyLE1hdGguY2VpbCgoYStyWzRdKS80KSk7cmV0dXJuIG5ldyBNKHJbMF0sclsxXSxyWzJdLHJbM10sbyxzKX0sTT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixpLGEpe3RoaXMuaW5pdGlhbFZhbHVlPWUsdGhpcy5lcnJvclZhbHVlPXQsdGhpcy5oaWdoU3RhcnQ9bix0aGlzLmhpZ2hWYWx1ZUluZGV4PXIsdGhpcy5pbmRleD1pLHRoaXMuZGF0YT1hfXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZT49MCl7aWYoZTw1NTI5Nnx8ZT41NjMxOSYmZTw9NjU1MzUpcmV0dXJuIHQ9dGhpcy5pbmRleFtlPj5iXSx0PSh0PDxTKSsoZSZUKSx0aGlzLmRhdGFbdF07aWYoZTw9NjU1MzUpcmV0dXJuIHQ9dGhpcy5pbmRleFt3KyhlLTU1Mjk2Pj5iKV0sdD0odDw8UykrKGUmVCksdGhpcy5kYXRhW3RdO2lmKGU8dGhpcy5oaWdoU3RhcnQpcmV0dXJuIHQ9RS1EKyhlPj54KSx0PXRoaXMuaW5kZXhbdF0sdCs9ZT4+YiZPLHQ9dGhpcy5pbmRleFt0XSx0PSh0PDxTKSsoZSZUKSx0aGlzLmRhdGFbdF07aWYoZTw9MTExNDExMSlyZXR1cm4gdGhpcy5kYXRhW3RoaXMuaGlnaFZhbHVlSW5kZXhdfXJldHVybiB0aGlzLmVycm9yVmFsdWV9LGV9KCksTj1gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL2AsUD10eXBlb2YgVWludDhBcnJheT5gdWA/W106bmV3IFVpbnQ4QXJyYXkoMjU2KSxGPTA7RjxOLmxlbmd0aDtGKyspUFtOLmNoYXJDb2RlQXQoRildPUY7dmFyIEk9YEt3QUFBQUFBQUFBQUNBNEFVRDBBQURBZ0FBQUNBQUFBQUFBSUFCQUFHQUJBQUVnQVVBQllBR0FBYUFCZ0FHZ0FZZ0JxQUY4QVp3QmdBR2dBY1FCNUFIVUFmUUNGQUkwQWxRQ2RBS0lBcWdDeUFMb0FZQUJvQUdBQWFBQmdBR2dBd2dES0FHQUFhQURHQU00QTB3RGJBT0VBNlFEeEFQa0FBUUVKQVE4QkZ3RjFBSDBBSEFFa0FTd0JOQUU2QVVJQlFRRkpBVkVCV1FGaEFXZ0JjQUY0QVRBQWdBR0dBWTRCbFFHWEFaOEJwd0d2QWJVQnZRSEZBYzBCMHdIYkFlTUI2d0h4QWZrQkFRSUpBdkVCRVFJWkFpRUNLUUl4QWpnQ1FBSkdBazRDVmdKZUFtUUNiQUowQW53Q2dRS0pBcEVDbVFLZ0FxZ0NzQUs0QXJ3Q3hBSXdBTXdDMHdMYkFqQUE0d0xyQXZNQytBSUFBd2NERHdNd0FCY0RIUU1sQXkwRE5RTjFBRDBEUVFOSkEwa0RTUU5SQTFFRFZ3TlpBMWtEZFFCMUFHRURkUUJwQTIwRGRRTjFBSHNEZFFDQkE0a0RrUU4xQUhVQW1RT2hBM1VBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBS1lEcmdOMUFIVUF0Z08rQThZRHpnUFdBeGNEM2dQakErc0Q4d04xQUhVQSt3TURCQWtFZFFBTkJCVUVIUVFsQkNvRUZ3TXlCRGdFWUFCQUJCY0RTQVJRQkZnRVlBUm9CREFBY0FRekFYZ0VnQVNJQkpBRWRRQ1hCSFVBbndTbkJLNEV0Z1M2Qk1JRXlBUjFBSFVBZFFCMUFIVUFkUUNWQU5BRVlBQmdBR0FBWUFCZ0FHQUFZQUJnQU5nRVlBRGNCT1FFWUFEc0JQUUUvQVFFQlF3RkZBVWNCU1FGTEFVMEJXUUVQQVZFQlVzRlV3VmJCV0FBWWdWZ0FHb0ZjZ1Y2QllJRmlnV1JCV0FBbVFXZkJhWUZZQUJnQUdBQVlBQmdBS29GWUFDeEJiQUZ1UVc2QmNFRndRWEhCY0VGd1FYUEJkTUYyd1hqQmVvRjhnWDZCUUlHQ2dZU0Job0dJZ1lxQmpJR09nWmdBRDRHUmdaTUJtQUFVd1phQm1BQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0lHWUFCcEJuQUdZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUI0Qm44R2hRWmdBR0FBWUFCMUFIY0RGUVNMQm1BQVlBQmdBSk1HZFFBOUEzVUFtd2FqQnFzR3F3YVZBTE1HdXdiREJqQUF5d2JTQnRJRzFRYlNCdElHMGdiU0J0SUcwZ2JkQnVNRzZ3YnpCdnNHQXdjTEJ4TUhBd2NiQnlNSEp3Y3NCeXdITVFjc0I5SUdPQWRBQjBnSFRnZlNCa2dIVmdmU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0Jpd0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFkZ0FHQUFMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFkYkIyTUhMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0Iya0gwZ1p3QjY0RWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVSGZRZGdBSVVIalFkMUFIVUFsUWVkQjJBQVlBQ2xCNnNIWUFDekI3WUh2Z2ZHQjNVQXpnZldCek1CM2dmbUIxRUI3Z2YxQi8wSGxRRU5BUVVJRFFoMUFCVUlIUWdsQ0JjRExRZzFDRDBJUlFoTkNFRURVd2gxQUhVQWRRQmJDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWNBaDNDSG9JTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QUlJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dnd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQjRvSUxBY3NCNDRJMGdhV0NKNElwZ2gxQUhVQXFnaXlDSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBdHdoOEFYVUF2d2gxQU1VSXlRalJDTmtJNEFqb0NIVUFkUUIxQU80STlnaitDQVlKRGdrVENTMEhHd2tqQ1lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQUFJQUFBQUZBQVlBQmdBR0lBWHdCZ0FIRUFkUUJGQUpVQW9nQ3lBS0FBWUFCZ0FFSUE0QUJHQU5NQTRRRHhBTUVCRHdFMUFGd0JMQUU2QVFFQlVRRjRRa2hDbUVLb1FyaENnQUhJUXNBQjBNTEFBY0FCd0FIQUFlREM2QUJvQUhEQ3dNTUFBY0FCd0FIQUFkRERHTU1BQWNBQjZNTTR3d2pEV01Ob3czakRhQUJvQUdnQWFBQm9BR2dBYUFCb0FHZ0FhQUJvQUdnQWFBQm9BR2dBYUFCb0FHZ0FhQUJvQUVqRHFBQld3NmJEcUFCcGc2Z0FhQUJvQUhjRHZ3T1BBK2dBYUFCZkEvOER2d08vQTc4RHZ3Ty9BNzhEdndPL0E3OER2d08vQTc4RHZ3Ty9BNzhEdndPL0E3OER2d08vQTc4RHZ3Ty9BNzhEdndPL0E3OERwY1BBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCOWNQS3dreUNUb0pNQUIxQUhVQWRRQkNDVW9KVFFsMUFGVUpYQWxqQ1djSmF3a3dBREFBTUFBd0FITUpkUUIyQ1g0SmRRQ0VDWW9KamdtV0NYVUFuZ2t3QUdBQVlBQnhBSFVBcGduM0E2NEp0QWwxQUxrSmRRREFDVEFBTUFBd0FEQUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFvd1lOQk1VSU1BQXdBREFBTUFESUNjc0owd25aQ1JVRTRRa3dBT2tKOEFuNENUQUFNQUIxQUFBS3Z3aDFBQWdLRHdvWENoOEtkUUF3QUNjS0xncDFBRFlLcUFtSUNUNEtSZ293QURBQWRRQjFBRTRLTUFCMUFGWUtkUUJlQ25VQVpRb3dBREFBTUFBd0FEQUFNQUF3QURBQU1BQVZCSFVBYlFvd0FEQUFkUUM1Q1hVS01BQXdBSHdCeEFpakJvZ0VNZ0Y5Q29RS2lBU01DcFFLbWdxSUJLSUtxZ3F1Q29nRURRRzJDcjRLeGdyTENqQUFNQURUQ3RzS0NnSGpDdXNLOFFyNUNnRUxNQUF3QURBQU1BQjFBSXNFQ1FzUkMzVUFOQUVaQ3pBQU1BQXdBREFBTUFCMUFDRUxLUXN3QUhVQU5BRXhDemtMZFFCQkMwa0xNQUJSQzFrTE1BQXdBREFBTUFBd0FEQUFkUUJoQ3pBQU1BQXdBR0FBWUFCcEMzRUxkd3QvQ3pBQU1BQ0hDNHNMa3d1YkM1OExwd3QxQUs0THRndDFBUHNETUFBd0FEQUFNQUF3QURBQU1BQXdBTDRMd3d2TEM5SUwxd3ZkQ3pBQU1BRGxDK2tMOFF2NUMvOExTUXN3QURBQU1BQXdBREFBTUFBd0FEQUFNQUFIRERBQU1BQXdBREFBTUFBT0RCWU1IZ3gxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUNZTU1BQXdBREFBZFFCMUFIVUFMZ3gxQUhVQWRRQjFBSFVBZFFBMkREQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUQ0TWRRQkdESFVBZFFCMUFIVUFkUUIxQUVrTWRRQjFBSFVBZFFCMUFGQU1NQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUJZREhVQWRRQjFBRjhNTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUErd01WQkdjTU1BQXdBSHdCYnd4MUFIY01md3lIREk4TU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBWUFCZ0FKY01NQUF3QURBQWRRQjFBSjhNbFFDbEREQUFNQUN0REN3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQjdVTUxBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBQTBFTUFDOUREQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXNCeXdITEFjc0J5d0hMQWNzQnl3SExRY3dBTUVNeUF3c0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0h6QXd3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBSFVBZFFCMUFOUU0yUXpoRERBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUJnQUdBQVlBQmdBR0FBWUFCZ0FPa01ZQUR4REdBQStBd0FEUVlOWUFCaENXQUFZQUFPRFRBQU1BQXdBREFBRmcxZ0FHQUFIZzM3QXpBQU1BQXdBREFBWUFCZ0FDWU5ZQUFzRFRRTlBBMWdBRU1OUGcxTERXQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFVZzFhRFlzR1ZnbGhEVjBOY1FCbkRXME5kUTE1RFdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFsUUNCRFpVQWlBMlBEWmNOTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQW53Mm5EVEFBTUFBd0FEQUFNQUF3QUhVQXJ3MjNEVEFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFCMUFMOE5NQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQjFBSFVBZFFCMUFIVUFkUURIRFRBQVlBQmdBTThOTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQTF3MTFBTndOTUFBd0FEMEI1QTB3QURBQU1BQXdBREFBTUFEc0RmUU4vQTBFRGd3T0ZBNHdBQnNPTUFBd0FEQUFNQUF3QURBQU1BQXdBTklHMGdiU0J0SUcwZ2JTQnRJRzBnWWpEaWdPd1FVdURzRUZNdzdTQmpvTzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHUWc1S0RsSU9WZzdTQnRJR1hnNWxEbTBPZFE3U0J0SUdmUTZFRG9vT2pRNlVEdElHbWc2aER0SUcwZ2FvRHF3TzBnYTBEcndPMGdaZ0FHQUFZQURFRG1BQVlBQWtCdElHekE1Z0FOSU9ZQURhRG9rTzBnYlNCdDhPNXc3U0J1OE8wZ2IxRHZ3TzBnWmdBR0FBeEE3U0J0SUcwZ2JTQnRJR1lBQmdBR0FBWUFBRUQyQUFzQVVNRDlJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHRkE4c0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjY0Q5SUdMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SEpBOHNCeXdITEFjc0J5d0hMQWNjRHl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3UExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjMEQ5SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUdMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjY0Q5SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUdGQThzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hQQS9TQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ1lVRDBRUGxRQ1ZBSlVBTUFBd0FEQUFNQUNWQUpVQWxRQ1ZBSlVBbFFDVkFFd1BNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQS8vOEVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQU5BQU1BQVFBQkFBSUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFDZ0FUQUJjQUhnQWJBQm9BSGdBWEFCWUFFZ0FlQUJzQUdBQVBBQmdBSEFCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFCZ0FHQUFlQUI0QUhnQVRBQjRBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQllBR3dBU0FCNEFIZ0FlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFXQUEwQUVRQWVBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFBUUFCQUFFQUFRQUJBQUZBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUpBQllBR2dBYkFCc0FHd0FlQUIwQUhRQWVBRThBRndBZUFBMEFIZ0FlQUJvQUd3QlBBRThBRGdCUUFCMEFIUUFkQUU4QVR3QVhBRThBVHdCUEFCWUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQjBBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FkQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBRkFBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBZUFCNEFIZ0FlQUZBQVR3QkFBRThBVHdCUEFFQUFUd0JRQUZBQVR3QlFBQjRBSGdBZUFCNEFIZ0FlQUIwQUhRQWRBQjBBSGdBZEFCNEFEZ0JRQUZBQVVBQlFBRkFBSGdBZUFCNEFIZ0FlQUI0QUhnQlFBQjRBVUFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFKQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQWtBQ1FBSkFBa0FDUUFKQUFrQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBZUFCNEFIZ0FlQUZBQUhnQWVBQjRBS3dBckFGQUFVQUJRQUZBQUdBQlFBQ3NBS3dBckFDc0FIZ0FlQUZBQUhnQlFBRkFBVUFBckFGQUFLd0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFCQUFFQUFRQUJBQUVBQVFBQkFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FVQUFlQUI0QUhnQWVBQjRBSGdCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQVlBQTBBS3dBckFCNEFIZ0FiQUNzQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQURRQUVBQjRBQkFBRUFCNEFCQUFFQUJNQUJBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQVZnQldBRllBVmdCV0FGWUFWZ0JXQUZZQVZnQldBRllBVmdCV0FGWUFWZ0JXQUZZQVZnQldBRllBVmdCV0FGWUFWZ0JXQUZZQUt3QXJBQ3NBS3dCV0FGWUFWZ0JXQUI0QUhnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBR2dBYUFCb0FHQUFZQUI0QUhnQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBRXdBRUFDc0FFd0FUQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQm9BR1FBWkFCNEFVQUJRQUFRQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFCTUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFCNEFIZ0FFQUFRQUJBQUVBQVFBQkFCUUFGQUFCQUFFQUI0QUJBQUVBQVFBQkFCUUFGQUFTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JRQUZBQVVBQWVBQjRBVUFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QWVBRkFBQkFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFVQUJRQUI0QUhnQVlBQk1BVUFBckFDc0FCQUFiQUJzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUZBQUJBQUVBQVFBQkFBRUFGQUFCQUFFQUFRQVVBQUVBQVFBQkFBRUFBUUFLd0FyQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFyQUNzQUhnQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQjRBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBMEFEUUJMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUI0QVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFBckFDc0FLd0JRQUZBQVVBQlFBQ3NBS3dBRUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBckFDc0FCQUFFQUNzQUt3QUVBQVFBQkFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBRUFDc0FLd0FyQUNzQVVBQlFBQ3NBVUFCUUFGQUFCQUFFQUNzQUt3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRkFBVUFBYUFCb0FVQUJRQUZBQVVBQlFBRXdBSGdBYkFGQUFIZ0FFQUNzQUt3QUVBQVFBQkFBckFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUNzQVVBQlFBQ3NBVUFCUUFDc0FLd0FFQUNzQUJBQUVBQVFBQkFBRUFDc0FLd0FyQUNzQUJBQUVBQ3NBS3dBRUFBUUFCQUFyQUNzQUt3QUVBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFBckFGQUFLd0FyQUNzQUt3QXJBQ3NBS3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFBUUFCQUJRQUZBQVVBQUVBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUNzQUt3QUVBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBQkFBRUFBUUFLd0FFQUFRQUJBQXJBQ3NBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBQkFBRUFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUI0QUd3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQUJBQUVBQVFBQkFBRUFBUUFLd0FFQUFRQUJBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBRUFBUUFCQUFyQUNzQUJBQUVBQ3NBS3dBRUFBUUFCQUFyQUNzQUt3QXJBQ3NBS3dBckFBUUFCQUFFQUNzQUt3QXJBQ3NBVUFCUUFDc0FVQUJRQUZBQUJBQUVBQ3NBS3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFCNEFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFBUUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUFyQUNzQUt3QlFBRkFBS3dCUUFDc0FVQUJRQUNzQUt3QXJBRkFBVUFBckFDc0FLd0JRQUZBQVVBQXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQVFBQkFBRUFBUUFCQUFyQUNzQUt3QUVBQVFBQkFBckFBUUFCQUFFQUFRQUt3QXJBRkFBS3dBckFDc0FLd0FyQUNzQUJBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBVUFCUUFGQUFIZ0FlQUI0QUhnQWVBQjRBR3dBZUFDc0FLd0FyQUNzQUt3QUVBQVFBQkFBRUFBUUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUNzQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUJBQUVBQVFBS3dBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FCQUFFQUNzQVVBQlFBRkFBS3dBckFDc0FLd0FyQUZBQVVBQUVBQVFBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBS3dBT0FGQUFVQUJRQUZBQVVBQlFBRkFBSGdCUUFBUUFCQUFFQUE0QVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQUt3QXJBQVFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBQkFBRUFBUUFLd0FFQUFRQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQXJBRkFBVUFBRUFBUUFLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QlFBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FFQUFRQUJBQUVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQVFBQkFBRUFDc0FCQUFFQUFRQUJBQlFBQjRBS3dBckFDc0FLd0JRQUZBQVVBQUVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUJvQVVBQlFBRkFBVUFCUUFGQUFLd0FFQUFRQUJBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBRUFDc0FLd0FyQUNzQUJBQUVBQVFBQkFBRUFBUUFLd0FFQUNzQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUFRQUJBQWVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQXFBRndBWEFBcUFDb0FLZ0FxQUNvQUtnQXFBQ3NBS3dBckFDc0FHd0JjQUZ3QVhBQmNBRndBWEFCY0FDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBZUFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FEUUFOQUNzQUt3QXJBQ3NBS3dCY0FGd0FLd0JjQUNzQVhBQmNBRndBWEFCY0FDc0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUNzQVhBQXJBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBS2dCY0FGd0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FYQUFyQUNzQVhBQmNBRndBWEFCY0FDc0FYQUFyQUNvQUtnQXFBQ29BS2dBcUFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUNzQUt3QmNBRndBWEFCY0FGQUFEZ0FPQUE0QURnQWVBQTRBRGdBSkFBNEFEZ0FOQUFrQUV3QVRBQk1BRXdBVEFBa0FIZ0FUQUI0QUhnQWVBQVFBQkFBZUFCNEFIZ0FlQUI0QUhnQkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBRFFBRUFCNEFCQUFlQUFRQUZnQVJBQllBRVFBRUFBUUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBRFFBRUFBUUFCQUFFQUFRQURRQUVBQVFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUEwQURRQWVBQjRBSGdBZUFCNEFIZ0FFQUI0QUhnQWVBQjRBSGdBZUFDc0FIZ0FlQUE0QURnQU5BQTRBSGdBZUFCNEFIZ0FlQUFrQUNRQXJBQ3NBS3dBckFDc0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0JjQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQURRQU5BQjRBSGdBZUFCNEFYQUJjQUZ3QVhBQmNBRndBS2dBcUFDb0FLZ0JjQUZ3QVhBQmNBQ29BS2dBcUFGd0FLZ0FxQUNvQVhBQmNBQ29BS2dBcUFDb0FLZ0FxQUNvQVhBQmNBRndBS2dBcUFDb0FLZ0JjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFGd0FLZ0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUNvQUtnQXFBQ29BS2dBcUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFBckFDc0FLd0FyQUNzQVVBQXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBSGdCUUFGQUFVQUJRQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQVVBQXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBS3dCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFDc0FVQUJRQUZBQVVBQXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUJBQUVBQVFBSGdBTkFCNEFIZ0FlQUI0QUhnQWVBQjRBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUFyQUNzQURRQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFIZ0FlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFOQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFXQUJFQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBMEFEUUFOQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUFRQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFOQUEwQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFBckFBUUFCQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFBMEFEUUFWQUZ3QURRQWVBQTBBR3dCY0FDb0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBZUFCNEFFd0FUQUEwQURRQU9BQjRBRXdBVEFCNEFCQUFFQUFRQUNRQXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQUVBQVFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBVUFBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBckFDc0FLd0FyQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFDc0FIZ0FyQUNzQUt3QVRBQk1BU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFBckFDc0FYQUJjQUZ3QVhBQmNBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUFyQUNzQUt3QXJBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBQ3NBS3dBckFDc0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVhBQXJBQ3NBS3dBcUFDb0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBRUFBUUFCQUFyQUNzQUhnQWVBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLd0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUt3QXJBQVFBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dBckFDc0FLd0FyQUNzQUt3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQ3NBS3dBckFDc0FLd0FyQUNvQUtnQXFBQ29BS2dBcUFDb0FYQUFxQUNvQUtnQXFBQ29BS2dBckFDc0FCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUJBQUVBQVFBQkFBRUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFFQUFRQUJBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dBTkFBMEFIZ0FOQUEwQURRQU5BQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFDc0FCQUFFQUFRQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUJRQUZBQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBZUFCNEFIZ0FlQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FLd0FyQUEwQURRQU5BQTBBRFFCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFDc0FLd0FyQUZBQVVBQlFBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUEwQURRQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQVFBQkFBRUFCNEFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQlFBRkFBVUFCUUFBUUFVQUJRQUZBQVVBQlFBRkFBQkFCUUFGQUFCQUFFQUFRQVVBQXJBQ3NBS3dBckFDc0FCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FCQUFFQUFRQUJBQUVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0FyQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUNzQVVBQXJBRkFBS3dBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUNzQUt3QWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdCUUFCNEFIZ0FlQUZBQVVBQlFBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdCUUFGQUFVQUJRQUNzQUt3QWVBQjRBSGdBZUFCNEFIZ0FyQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QXJBRkFBVUFCUUFDc0FIZ0FlQUI0QUhnQWVBQjRBSGdBT0FCNEFLd0FOQUEwQURRQU5BQTBBRFFBTkFBa0FEUUFOQUEwQUNBQUVBQXNBQkFBRUFBMEFDUUFOQUEwQURBQWRBQjBBSGdBWEFCY0FGZ0FYQUJjQUZ3QVdBQmNBSFFBZEFCNEFIZ0FVQUJRQUZBQU5BQUVBQVFBRUFBUUFCQUFFQUFRQUNRQWFBQm9BR2dBYUFCb0FHZ0FhQUJvQUhnQVhBQmNBSFFBVkFCVUFIZ0FlQUI0QUhnQWVBQjRBR0FBV0FCRUFGUUFWQUJVQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBRFFBZUFBMEFEUUFOQUEwQUhnQU5BQTBBRFFBSEFCNEFIZ0FlQUI0QUt3QUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBRkFBVUFBckFDc0FUd0JRQUZBQVVBQlFBRkFBSGdBZUFCNEFGZ0FSQUU4QVVBQlBBRThBVHdCUEFGQUFVQUJRQUZBQVVBQWVBQjRBSGdBV0FCRUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFCc0FHd0FiQUJzQUd3QWJBQnNBR2dBYkFCc0FHd0FiQUJzQUd3QWJBQnNBR3dBYkFCc0FHd0FiQUJzQUdnQWJBQnNBR3dBYkFCb0FHd0FiQUJvQUd3QWJBQnNBR3dBYkFCc0FHd0FiQUJzQUd3QWJBQnNBR3dBYkFCc0FHd0FiQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFIZ0FlQUZBQUdnQWVBQjBBSGdCUUFCNEFHZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0JQQUI0QVVBQWJBQjRBSGdCUUFGQUFVQUJRQUZBQUhnQWVBQjRBSFFBZEFCNEFVQUFlQUZBQUhnQlFBQjRBVUFCUEFGQUFVQUFlQUI0QUhnQWVBQjRBSGdBZUFGQUFVQUJRQUZBQVVBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUZBQUhnQlFBRkFBVUFCUUFFOEFUd0JRQUZBQVVBQlFBRkFBVHdCUUFGQUFUd0JRQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRkFBVUFCUUFGQUFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFlQUI0QVVBQlFBRkFBVUFCUEFCNEFIZ0FyQUNzQUt3QXJBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCMEFIZ0FkQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWRBQjRBSFFBZEFCNEFIZ0FlQUIwQUhRQWVBQjRBSFFBZUFCNEFIZ0FkQUI0QUhRQWJBQnNBSGdBZEFCNEFIZ0FlQUI0QUhRQWVBQjRBSFFBZEFCMEFIUUFlQUI0QUhRQWVBQjBBSGdBZEFCMEFIUUFkQUIwQUhRQWVBQjBBSGdBZUFCNEFIZ0FlQUIwQUhRQWRBQjBBSGdBZUFCNEFIZ0FkQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWRBQjRBSGdBZUFCMEFIZ0FlQUI0QUhnQWVBQjBBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FkQUIwQUhnQWVBQjBBSFFBZEFCMEFIZ0FlQUIwQUhRQWVBQjRBSFFBZEFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCMEFIUUFlQUI0QUhRQWRBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIUUFlQUI0QUhnQWRBQjRBSGdBZUFCNEFIZ0FlQUI0QUhRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFGQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCWUFFUUFXQUJFQUhnQWVBQjRBSGdBZUFCNEFIUUFlQUI0QUhnQWVBQjRBSGdBZUFDVUFKUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FXQUJFQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSlFBbEFDVUFKUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0FkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUZBQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSGdBZUFCNEFIZ0FkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWVBQjRBSFFBZEFCMEFIUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUIwQUhRQWVBQjBBSFFBZEFCMEFIUUFkQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUIwQUhRQWVBQjRBSFFBZEFCNEFIZ0FlQUI0QUhRQWRBQjRBSGdBZUFCNEFIUUFkQUIwQUhnQWVBQjBBSGdBZUFCMEFIUUFkQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FkQUIwQUhRQWRBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjBBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWxBQ1VBSlFBbEFCNEFIUUFkQUI0QUhnQWRBQjRBSGdBZUFCNEFIUUFkQUI0QUhnQWVBQjRBSlFBbEFCMEFIUUFsQUI0QUpRQWxBQ1VBSUFBbEFDVUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBbEFDVUFKUUFlQUI0QUhnQWVBQjBBSGdBZEFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FkQUIwQUhnQWRBQjBBSFFBZUFCMEFKUUFkQUIwQUhnQWRBQjBBSGdBZEFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ1VBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIUUFkQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBZEFCMEFIUUFkQUNVQUhnQWxBQ1VBSlFBZEFDVUFKUUFkQUIwQUhRQWxBQ1VBSFFBZEFDVUFIUUFkQUNVQUpRQWxBQjRBSFFBZUFCNEFIZ0FlQUIwQUhRQWxBQjBBSFFBZEFCMEFIUUFkQUNVQUpRQWxBQ1VBSlFBZEFDVUFKUUFnQUNVQUhRQWRBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWVBQjRBSGdBbEFDVUFJQUFnQUNBQUlBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUIwQUhnQWVBQjRBRndBWEFCY0FGd0FYQUJjQUhnQVRBQk1BSlFBZUFCNEFIZ0FXQUJFQUZnQVJBQllBRVFBV0FCRUFGZ0FSQUJZQUVRQVdBQkVBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQllBRVFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBV0FCRUFGZ0FSQUJZQUVRQVdBQkVBRmdBUkFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFGZ0FSQUJZQUVRQVdBQkVBRmdBUkFCWUFFUUFXQUJFQUZnQVJBQllBRVFBV0FCRUFGZ0FSQUJZQUVRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQVdBQkVBRmdBUkFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFGZ0FSQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZEFCMEFIUUFkQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFDc0FIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFVQUJRQUZBQVVBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FFQUFRQUJBQWVBQjRBS3dBckFDc0FLd0FyQUJNQURRQU5BQTBBVUFBVEFBMEFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFBTkFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QUVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUEwQURRQU5BQTBBRFFBTkFBMEFEUUFlQUEwQUZnQU5BQjRBSGdBWEFCY0FIZ0FlQUJjQUZ3QVdBQkVBRmdBUkFCWUFFUUFXQUJFQURRQU5BQTBBRFFBVEFGQUFEUUFOQUI0QURRQU5BQjRBSGdBZUFCNEFIZ0FNQUF3QURRQU5BQTBBSGdBTkFBMEFGZ0FOQUEwQURRQU5BQTBBRFFBTkFBMEFIZ0FOQUI0QURRQU5BQjRBSGdBZUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNzQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFyQUNzQUt3QXJBQTBBRVFBUkFDVUFKUUJIQUZjQVZ3QVdBQkVBRmdBUkFCWUFFUUFXQUJFQUZnQVJBQ1VBSlFBV0FCRUFGZ0FSQUJZQUVRQVdBQkVBRlFBV0FCRUFFUUFsQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUFRQUJBQUVBQVFBQkFBRUFDVUFWd0JYQUZjQVZ3QTJBQ1VBSlFCWEFGY0FWd0JIQUVjQUpRQWxBQ1VBS3dCUkFGY0FVUUJYQUZFQVZ3QlJBRmNBVVFCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRkVBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JSQUZjQVVRQlhBRkVBVndCWEFGY0FWd0JYQUZjQVVRQlhBRmNBVndCWEFGY0FWd0JSQUZFQUt3QXJBQVFBQkFBVkFCVUFSd0JIQUZjQUZRQlJBRmNBVVFCWEFGRUFWd0JSQUZjQVVRQlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZFQVZ3QlJBRmNBVVFCWEFGY0FWd0JYQUZjQVZ3QlJBRmNBVndCWEFGY0FWd0JYQUZFQVVRQlhBRmNBVndCWEFCVUFVUUJIQUVjQVZ3QXJBQ3NBS3dBckFDc0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FLd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQUt3QWxBQ1VBVndCWEFGY0FWd0FsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkVBVVFCUkFGRUFVUUJSQUZFQVVRQlJBRkVBVVFCUkFGRUFVUUJSQUZFQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBckFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQlBBRThBVHdCUEFFOEFUd0JQQUU4QUpRQlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0FsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBQ1VBSlFBbEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUVjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FLd0FyQUNzQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQURRQVRBQTBBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBRkFBQkFBRUFBUUFCQUFlQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUhnQlFBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBVUFCUUFBUUFCQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFlQUEwQURRQU5BQTBBRFFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFVQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdCUUFCNEFIZ0FlQUI0QUhnQWVBRkFBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FlQUI0QVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBVUFCUUFGQUFCQUJRQUZBQVVBQlFBQVFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBQkFBZUFCNEFIZ0FlQUFRQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQUhnQWVBQm9BSGdBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBRGdBT0FCTUFFd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FCQUFFQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FOQUEwQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QXJBQ3NBS3dBckFDc0FLd0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUJRQUZBQVVBQlFBRkFBVUFBZUFCNEFIZ0JRQUE0QVVBQlFBQVFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUEwQURRQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUI0QVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBQ3NBS3dBckFBUUFIZ0FlQUI0QUhnQWVBQjRBRFFBTkFBMEFIZ0FlQUI0QUhnQXJBRkFBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dBckFDc0FLd0FyQUI0QUhnQmNBRndBWEFCY0FGd0FLZ0JjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVhBQmNBRndBWEFCY0FDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFBUUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFyQUNzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QXJBQ3NBSGdBTkFBMEFEUUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBS2dBcUFDb0FYQUFxQUNvQUtnQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQXFBRndBS2dBcUFDb0FYQUJjQUNvQUtnQmNBRndBWEFCY0FGd0FLZ0FxQUZ3QUtnQmNBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZ3QVhBQmNBQ29BS2dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQTBBRFFCUUFGQUFVQUFFQUFRQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUFyQUNzQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBSGdBZUFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQURRQUVBQVFBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBVkFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVUFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQUt3QXJBQ3NBS3dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FLd0FyQUNzQUt3QUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBQ1VBSlFCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBSlFBbEFDVUFKUUFsQUNVQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFLd0FyQUNzQUt3QXJBRllBQkFCV0FGWUFWZ0JXQUZZQVZnQldBRllBVmdCV0FCNEFWZ0JXQUZZQVZnQldBRllBVmdCV0FGWUFWZ0JXQUZZQVZnQXJBRllBVmdCV0FGWUFWZ0FyQUZZQUt3QldBRllBS3dCV0FGWUFLd0JXQUZZQVZnQldBRllBVmdCV0FGWUFWZ0JXQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUVRQVdBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFhQUI0QUt3QXJBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUdBQVJBQkVBR0FBWUFCTUFFd0FXQUJFQUZBQXJBQ3NBS3dBckFDc0FLd0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFDVUFKUUFsQUNVQUpRQVdBQkVBRmdBUkFCWUFFUUFXQUJFQUZnQVJBQllBRVFBbEFDVUFGZ0FSQUNVQUpRQWxBQ1VBSlFBbEFDVUFFUUFsQUJFQUt3QVZBQlVBRXdBVEFDVUFGZ0FSQUJZQUVRQVdBQkVBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ3NBSlFBYkFCb0FKUUFyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFBY0FLd0FUQUNVQUpRQWJBQm9BSlFBbEFCWUFFUUFsQUNVQUVRQWxBQkVBSlFCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFCVUFGUUFsQUNVQUpRQVRBQ1VBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBQllBSlFBUkFDVUFKUUFsQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0FXQUNVQUVRQWxBQllBRVFBUkFCWUFFUUFSQUJVQVZ3QlJBRkVBVVFCUkFGRUFVUUJSQUZFQVVRQlJBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUVjQVJ3QXJBQ3NBVndCWEFGY0FWd0JYQUZjQUt3QXJBRmNBVndCWEFGY0FWd0JYQUNzQUt3QlhBRmNBVndCWEFGY0FWd0FyQUNzQVZ3QlhBRmNBS3dBckFDc0FHZ0FiQUNVQUpRQWxBQnNBR3dBckFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFRQUIwQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQURRQU5BQTBBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQlFBRkFBSGdBZUFCNEFLd0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUFRQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QUVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQTBBVUFCUUFGQUFVQUFyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQU5BRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QWVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQXJBQ3NBS3dCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBTkFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQWVBQjRBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQTBBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFBUUFCQUFFQUNzQUJBQUVBQ3NBS3dBckFDc0FLd0FFQUFRQUJBQUVBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQVFBQkFBRUFDc0FLd0FyQUNzQUJBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUEwQURRQU5BQTBBRFFBTkFBMEFEUUFlQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQWVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQWVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQU5BQTBBRFFBTkFBMEFEUUFVQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FEUUFOQUEwQURRQU5BQTBBRFFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQjRBSGdBZUFCNEFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBRUFBUUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFBUUFCQUFOQUNzQUt3QlFBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUJRQUZBQVVBQlFBQjRBSGdBZUFCNEFIZ0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUFRQUJBQUVBQTBBRFFBZUFCNEFIZ0FlQUI0QUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUJBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQWVBQjRBSGdBTkFBMEFEUUFOQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QWVBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FyQUNzQUt3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dBTkFBMEFEUUFOQUZBQUJBQUVBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBZUFBNEFVQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FFQUZBQVVBQlFBRkFBRFFBTkFCNEFEUUFFQUFRQUJBQUVBQjRBQkFBRUFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FVQUFPQUZBQURRQU5BQTBBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFOQUEwQUhnQU5BQTBBSGdBRUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFLd0JRQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQTBBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBQkFBRUFBUUFCQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUNzQUJBQUVBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQ3NBQkFBRUFDc0FLd0FFQUFRQUJBQXJBQ3NBVUFBckFDc0FLd0FyQUNzQUt3QUVBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBQkFBRUFDc0FLd0FFQUFRQUJBQUVBQVFBQkFBRUFDc0FLd0FyQUFRQUJBQUVBQVFBQkFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FCQUFFQUFRQUJBQUVBQVFBQkFCUUFGQUFVQUJRQUEwQURRQU5BQTBBSGdCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFBMEFEUUFyQUI0QUJBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FFQUFRQUJBQUVBRkFBVUFBZUFGQUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUNzQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQURnQU5BQTBBRXdBVEFCNEFIZ0FlQUEwQURRQU5BQTBBRFFBTkFBMEFEUUFOQUEwQURRQU5BQTBBRFFBTkFGQUFVQUJRQUZBQUJBQUVBQ3NBS3dBRUFBMEFEUUFlQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBRkFBS3dBckFDc0FLd0FyQUNzQUt3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FLd0FyQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDc0FLd0FyQUNzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QmNBRndBRFFBTkFBMEFLZ0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFlQUNzQUt3QXJBQ3NBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUZBQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUFRQUt3QUVBQVFBS3dBckFBUUFCQUFFQUFRQVVBQUVBRkFBQkFBRUFBMEFEUUFOQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQ3NBQkFBRUFBUUFCQUFFQUFRQUJBQlFBQTRBVUFBRUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBRkFBQkFBRUFBUUFCQUFPQUI0QURRQU5BQTBBRFFBT0FCNEFCQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUEwQURRQU5BRkFBRGdBT0FBNEFEUUFOQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUZBQURRQU5BQTBBRFFBTkFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FPQUJNQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFyQUNzQUt3QUVBQ3NBQkFBRUFDc0FCQUFFQUFRQUJBQUVBQVFBQkFCUUFBUUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFLd0FFQUFRQUt3QUVBQVFBQkFBRUFBUUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQWVBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBYUFCb0FHZ0FhQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQTBBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FEUUFOQUEwQURRQU5BQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFTQUJJQUVnQVF3QkRBRU1BVUFCUUFGQUFVQUJEQUZBQVVBQlFBRWdBUXdCSUFFTUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFTQUJEQUVNQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FKQUFrQUNRQUpBQWtBQ1FBSkFCWUFFUUFyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQklBRU1BVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FOQUEwQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFBUUFCQUFFQUFRQUJBQU5BQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUEwQURRQU5BQjRBSGdBZUFCNEFIZ0FlQUZBQVVBQlFBRkFBRFFBZUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQU5BQTBBSGdBZUFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FFQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFLd0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBUndCSEFCVUFSd0FKQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QUVBQVFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVRQlJBRkVBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JSQUZFQVVRQlJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUhnQUVBQVFBRFFBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQVFBQkFBRUFBUUFCQUFlQUI0QUhnQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFCNEFIZ0FFQUFRQUJBQUVBQVFBQkFBRUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUJBQUVBQVFBQkFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFCQUFFQUFRQUhnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QlFBRkFBS3dBckFGQUFLd0FyQUZBQVVBQXJBQ3NBVUFCUUFGQUFVQUFyQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ3NBVUFBckFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0JRQUZBQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBSGdBZUFGQUFVQUJRQUZBQVVBQXJBRkFBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBSGdCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQWVBQjRBSGdBZUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUJBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQVFBSGdBZUFBMEFEUUFOQUEwQUhnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FFQUFRQUJBQUVBQVFBS3dBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUFRQUJBQUVBQVFBQkFBRUFBUUFLd0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFLd0FyQUFRQUJBQUVBQVFBQkFBRUFBUUFLd0FFQUFRQUt3QUVBQVFBQkFBRUFBUUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FFQUFRQUJBQUVBQVFBQkFBRUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QlFBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBckFCc0FVQUJRQUZBQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQjRBSGdBZUFCNEFCQUFFQUFRQUJBQUVBQVFBQkFCUUFDc0FLd0FyQUNzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QXJBQ3NBS3dBckFCWUFGZ0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBR2dCUUFGQUFVQUFhQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQWVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFCUUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQUt3QlFBQ3NBS3dCUUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBS3dCUUFDc0FVQUFyQUNzQUt3QXJBQ3NBS3dCUUFDc0FLd0FyQUNzQVVBQXJBRkFBS3dCUUFDc0FVQUJRQUZBQUt3QlFBRkFBS3dCUUFDc0FLd0JRQUNzQVVBQXJBRkFBS3dCUUFDc0FVQUFyQUZBQVVBQXJBRkFBS3dBckFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQUt3QlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FlQUI0QUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QUpRQWxBQ1VBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSGdBZUFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCNEFIZ0FlQUNVQUpRQWxBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBcEFDa0FLUUFwQUNrQUtRQXBBQ2tBS1FBcEFDa0FLUUFwQUNrQUtRQXBBQ2tBS1FBcEFDa0FLUUFwQUNrQUtRQXBBQ2tBSlFBbEFDVUFKUUFsQUNBQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBZUFCNEFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQjRBSGdBbEFDVUFKUUFsQUNVQUhnQWxBQ1VBSlFBbEFDVUFJQUFnQUNBQUpRQWxBQ0FBSlFBbEFDQUFJQUFnQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ0VBSVFBaEFDRUFJUUFsQUNVQUlBQWdBQ1VBSlFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFKUUFsQUNVQUlBQWxBQ1VBSlFBbEFDQUFJQUFnQUNVQUlBQWdBQ0FBSlFBbEFDVUFKUUFsQUNVQUpRQWdBQ1VBSUFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUhnQWxBQjRBSlFBZUFDVUFKUUFsQUNVQUpRQWdBQ1VBSlFBbEFDVUFIZ0FsQUI0QUhnQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFCNEFIZ0FlQUI0QUhnQWVBQjRBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNBQUlBQWxBQ1VBSlFBbEFDQUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDQUFKUUFsQUNVQUpRQWdBQ0FBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFlQUI0QUhnQWVBQjRBSGdBbEFDVUFKUUFsQUNVQUpRQWxBQ0FBSUFBZ0FDVUFKUUFsQUNBQUlBQWdBQ0FBSUFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUJjQUZ3QVhBQlVBRlFBVkFCNEFIZ0FlQUI0QUpRQWxBQ1VBSUFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ0FBSUFBZ0FDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDQUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNBQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUpRQWxBQ1VBSlFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ1VBSlFBbEFDVUFKUUFsQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FsQUNVQUpRQWxBQ1VBSlFBbEFDVUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZ0FDVUFKUUFnQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFKUUFsQUNVQUpRQWxBQ1VBSUFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDVUFKUUFnQUNBQUlBQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFnQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ0FBSUFBbEFDQUFJQUFsQUNBQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBZ0FDQUFJQUFsQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSlFBbEFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBckFDc0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUt3QXJBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFDVUFKUUJYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBVndCWEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUt3QUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFBPT1gLEw9NTAsUj0xLHo9MixCPTMsVj00LGVlPTUsSD03LFU9OCxXPTksRz0xMCx0ZT0xMSxuZT0xMixyZT0xMyxpZT0xNCxhZT0xNSxLPTE2LG9lPTE3LHNlPTE4LGNlPTE5LGxlPTIwLHVlPTIxLGRlPTIyLGZlPTIzLHBlPTI0LG1lPTI1LGhlPTI2LGdlPTI3LF9lPTI4LHZlPTI5LHllPTMwLGJlPTMxLHhlPTMyLFNlPTMzLENlPTM0LHdlPTM1LFRlPTM2LEVlPTM3LERlPTM4LE9lPTM5LGtlPTQwLEFlPTQxLGplPTQyLE1lPTQzLE5lPVs5MDAxLDY1Mjg4XSxQZT1gIWAsRmU9YMOXYCxJZT1gw7dgLExlPWooSSksUmU9W3llLFRlXSx6ZT1bUix6LEIsZWVdLEJlPVtHLFVdLFZlPVtnZSxoZV0sSGU9emUuY29uY2F0KEJlKSxVZT1bRGUsT2Usa2UsQ2Usd2VdLFdlPVthZSxyZV0sR2U9ZnVuY3Rpb24oZSx0KXt0PT09dm9pZCAwJiYodD1gc3RyaWN0YCk7dmFyIG49W10scj1bXSxpPVtdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxhKXt2YXIgbz1MZS5nZXQoZSk7aWYobz5MPyhpLnB1c2goITApLG8tPUwpOmkucHVzaCghMSksW2Bub3JtYWxgLGBhdXRvYCxgbG9vc2VgXS5pbmRleE9mKHQpIT09LTEmJls4MjA4LDgyMTEsMTIzMTYsMTI0NDhdLmluZGV4T2YoZSkhPT0tMSlyZXR1cm4gci5wdXNoKGEpLG4ucHVzaChLKTtpZihvPT09Vnx8bz09PXRlKXtpZihhPT09MClyZXR1cm4gci5wdXNoKGEpLG4ucHVzaCh5ZSk7dmFyIHM9blthLTFdO3JldHVybiBIZS5pbmRleE9mKHMpPT09LTE/KHIucHVzaChyW2EtMV0pLG4ucHVzaChzKSk6KHIucHVzaChhKSxuLnB1c2goeWUpKX1pZihyLnB1c2goYSksbz09PWJlKXJldHVybiBuLnB1c2godD09PWBzdHJpY3RgP3VlOkVlKTtpZihvPT09amV8fG89PT12ZSlyZXR1cm4gbi5wdXNoKHllKTtpZihvPT09TWUpcmV0dXJuIGU+PTEzMTA3MiYmZTw9MTk2NjA1fHxlPj0xOTY2MDgmJmU8PTI2MjE0MT9uLnB1c2goRWUpOm4ucHVzaCh5ZSk7bi5wdXNoKG8pfSksW3IsbixpXX0sS2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9cltuXTtpZihBcnJheS5pc0FycmF5KGUpP2UuaW5kZXhPZihpKSE9PS0xOmU9PT1pKWZvcih2YXIgYT1uO2E8PXIubGVuZ3RoOyl7YSsrO3ZhciBvPXJbYV07aWYobz09PXQpcmV0dXJuITA7aWYobyE9PUcpYnJlYWt9aWYoaT09PUcpZm9yKHZhciBhPW47YT4wOyl7YS0tO3ZhciBzPXJbYV07aWYoQXJyYXkuaXNBcnJheShlKT9lLmluZGV4T2YocykhPT0tMTplPT09cylmb3IodmFyIGM9bjtjPD1yLmxlbmd0aDspe2MrKzt2YXIgbz1yW2NdO2lmKG89PT10KXJldHVybiEwO2lmKG8hPT1HKWJyZWFrfWlmKHMhPT1HKWJyZWFrfXJldHVybiExfSxxZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lO24+PTA7KXt2YXIgcj10W25dO2lmKHI9PT1HKW4tLTtlbHNlIHJldHVybiByfXJldHVybiAwfSxKZT1mdW5jdGlvbihlLHQsbixyLGkpe2lmKG5bcl09PT0wKXJldHVybiBGZTt2YXIgYT1yLTE7aWYoQXJyYXkuaXNBcnJheShpKSYmaVthXT09PSEwKXJldHVybiBGZTt2YXIgbz1hLTEscz1hKzEsYz10W2FdLGw9bz49MD90W29dOjAsdT10W3NdO2lmKGM9PT16JiZ1PT09QilyZXR1cm4gRmU7aWYoemUuaW5kZXhPZihjKSE9PS0xKXJldHVybiBQZTtpZih6ZS5pbmRleE9mKHUpIT09LTF8fEJlLmluZGV4T2YodSkhPT0tMSlyZXR1cm4gRmU7aWYocWUoYSx0KT09PVUpcmV0dXJuIEllO2lmKExlLmdldChlW2FdKT09PXRlfHwoYz09PXhlfHxjPT09U2UpJiZMZS5nZXQoZVtzXSk9PT10ZXx8Yz09PUh8fHU9PT1IfHxjPT09V3x8W0cscmUsYWVdLmluZGV4T2YoYyk9PT0tMSYmdT09PVd8fFtvZSxzZSxjZSxwZSxfZV0uaW5kZXhPZih1KSE9PS0xfHxxZShhLHQpPT09ZGV8fEtlKGZlLGRlLGEsdCl8fEtlKFtvZSxzZV0sdWUsYSx0KXx8S2UobmUsbmUsYSx0KSlyZXR1cm4gRmU7aWYoYz09PUcpcmV0dXJuIEllO2lmKGM9PT1mZXx8dT09PWZlKXJldHVybiBGZTtpZih1PT09S3x8Yz09PUspcmV0dXJuIEllO2lmKFtyZSxhZSx1ZV0uaW5kZXhPZih1KSE9PS0xfHxjPT09aWV8fGw9PT1UZSYmV2UuaW5kZXhPZihjKSE9PS0xfHxjPT09X2UmJnU9PT1UZXx8dT09PWxlfHxSZS5pbmRleE9mKHUpIT09LTEmJmM9PT1tZXx8UmUuaW5kZXhPZihjKSE9PS0xJiZ1PT09bWV8fGM9PT1nZSYmW0VlLHhlLFNlXS5pbmRleE9mKHUpIT09LTF8fFtFZSx4ZSxTZV0uaW5kZXhPZihjKSE9PS0xJiZ1PT09aGV8fFJlLmluZGV4T2YoYykhPT0tMSYmVmUuaW5kZXhPZih1KSE9PS0xfHxWZS5pbmRleE9mKGMpIT09LTEmJlJlLmluZGV4T2YodSkhPT0tMXx8W2dlLGhlXS5pbmRleE9mKGMpIT09LTEmJih1PT09bWV8fFtkZSxhZV0uaW5kZXhPZih1KSE9PS0xJiZ0W3MrMV09PT1tZSl8fFtkZSxhZV0uaW5kZXhPZihjKSE9PS0xJiZ1PT09bWV8fGM9PT1tZSYmW21lLF9lLHBlXS5pbmRleE9mKHUpIT09LTEpcmV0dXJuIEZlO2lmKFttZSxfZSxwZSxvZSxzZV0uaW5kZXhPZih1KSE9PS0xKWZvcih2YXIgZD1hO2Q+PTA7KXt2YXIgZj10W2RdO2lmKGY9PT1tZSlyZXR1cm4gRmU7aWYoW19lLHBlXS5pbmRleE9mKGYpIT09LTEpZC0tO2Vsc2UgYnJlYWt9aWYoW2dlLGhlXS5pbmRleE9mKHUpIT09LTEpZm9yKHZhciBkPVtvZSxzZV0uaW5kZXhPZihjKT09PS0xP2E6bztkPj0wOyl7dmFyIGY9dFtkXTtpZihmPT09bWUpcmV0dXJuIEZlO2lmKFtfZSxwZV0uaW5kZXhPZihmKSE9PS0xKWQtLTtlbHNlIGJyZWFrfWlmKERlPT09YyYmW0RlLE9lLENlLHdlXS5pbmRleE9mKHUpIT09LTF8fFtPZSxDZV0uaW5kZXhPZihjKSE9PS0xJiZbT2Usa2VdLmluZGV4T2YodSkhPT0tMXx8W2tlLHdlXS5pbmRleE9mKGMpIT09LTEmJnU9PT1rZXx8VWUuaW5kZXhPZihjKSE9PS0xJiZbbGUsaGVdLmluZGV4T2YodSkhPT0tMXx8VWUuaW5kZXhPZih1KSE9PS0xJiZjPT09Z2V8fFJlLmluZGV4T2YoYykhPT0tMSYmUmUuaW5kZXhPZih1KSE9PS0xfHxjPT09cGUmJlJlLmluZGV4T2YodSkhPT0tMXx8UmUuY29uY2F0KG1lKS5pbmRleE9mKGMpIT09LTEmJnU9PT1kZSYmTmUuaW5kZXhPZihlW3NdKT09PS0xfHxSZS5jb25jYXQobWUpLmluZGV4T2YodSkhPT0tMSYmYz09PXNlKXJldHVybiBGZTtpZihjPT09QWUmJnU9PT1BZSl7Zm9yKHZhciBwPW5bYV0sbT0xO3A+MCYmKHAtLSx0W3BdPT09QWUpOyltKys7aWYobSUyIT0wKXJldHVybiBGZX1yZXR1cm4gYz09PXhlJiZ1PT09U2U/RmU6SWV9LFllPWZ1bmN0aW9uKGUsdCl7dHx8PXtsaW5lQnJlYWs6YG5vcm1hbGAsd29yZEJyZWFrOmBub3JtYWxgfTt2YXIgbj1HZShlLHQubGluZUJyZWFrKSxyPW5bMF0saT1uWzFdLGE9blsyXTsodC53b3JkQnJlYWs9PT1gYnJlYWstYWxsYHx8dC53b3JkQnJlYWs9PT1gYnJlYWstd29yZGApJiYoaT1pLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bbWUseWUsamVdLmluZGV4T2YoZSk9PT0tMT9lOkVlfSkpO3ZhciBvPXQud29yZEJyZWFrPT09YGtlZXAtYWxsYD9hLm1hcChmdW5jdGlvbih0LG4pe3JldHVybiB0JiZlW25dPj0xOTk2OCYmZVtuXTw9NDA5NTl9KTp2b2lkIDA7cmV0dXJuW3IsaSxvXX0sWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuY29kZVBvaW50cz1lLHRoaXMucmVxdWlyZWQ9dD09PVBlLHRoaXMuc3RhcnQ9bix0aGlzLmVuZD1yfXJldHVybiBlLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KHZvaWQgMCx0aGlzLmNvZGVQb2ludHMuc2xpY2UodGhpcy5zdGFydCx0aGlzLmVuZCkpfSxlfSgpLFplPWZ1bmN0aW9uKGUsdCl7dmFyIG49bChlKSxyPVllKG4sdCksaT1yWzBdLGE9clsxXSxvPXJbMl0scz1uLmxlbmd0aCxjPTAsdT0wO3JldHVybntuZXh0OmZ1bmN0aW9uKCl7aWYodT49cylyZXR1cm57ZG9uZTohMCx2YWx1ZTpudWxsfTtmb3IodmFyIGU9RmU7dTxzJiYoZT1KZShuLGEsaSwrK3UsbykpPT09RmU7KTtpZihlIT09RmV8fHU9PT1zKXt2YXIgdD1uZXcgWGUobixlLGMsdSk7cmV0dXJuIGM9dSx7dmFsdWU6dCxkb25lOiExfX1yZXR1cm57ZG9uZTohMCx2YWx1ZTpudWxsfX19fSxRZT0xLCRlPTIsZXQ9NCx0dD04LG50PTEwLHJ0PTQ3LGl0PTkyLGF0PTksb3Q9MzIsc3Q9MzQsY3Q9NjEsbHQ9MzUsdXQ9MzYsZHQ9MzcsZnQ9MzkscHQ9NDAsbXQ9NDEsaHQ9OTUsZ3Q9NDUsX3Q9MzMsdnQ9NjAseXQ9NjIsYnQ9NjQseHQ9OTEsU3Q9OTMsQ3Q9NjEsd3Q9MTIzLFR0PTYzLEV0PTEyNSxEdD0xMjQsT3Q9MTI2LGt0PTEyOCxBdD02NTUzMyxqdD00MixNdD00MyxOdD00NCxQdD01OCxGdD01OSxJdD00NixMdD0wLFJ0PTgsenQ9MTEsQnQ9MTQsVnQ9MzEsSHQ9MTI3LFV0PS0xLFd0PTQ4LEd0PTk3LEt0PTEwMSxxdD0xMDIsSnQ9MTE3LFl0PTEyMixYdD02NSxadD02OSxRdD03MCwkdD04NSxlbj05MCx0bj1mdW5jdGlvbihlKXtyZXR1cm4gZT49V3QmJmU8PTU3fSxubj1mdW5jdGlvbihlKXtyZXR1cm4gZT49NTUyOTYmJmU8PTU3MzQzfSxybj1mdW5jdGlvbihlKXtyZXR1cm4gdG4oZSl8fGU+PVh0JiZlPD1RdHx8ZT49R3QmJmU8PXF0fSxhbj1mdW5jdGlvbihlKXtyZXR1cm4gZT49R3QmJmU8PVl0fSxvbj1mdW5jdGlvbihlKXtyZXR1cm4gZT49WHQmJmU8PWVufSxzbj1mdW5jdGlvbihlKXtyZXR1cm4gYW4oZSl8fG9uKGUpfSxjbj1mdW5jdGlvbihlKXtyZXR1cm4gZT49a3R9LGxuPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09bnR8fGU9PT1hdHx8ZT09PW90fSx1bj1mdW5jdGlvbihlKXtyZXR1cm4gc24oZSl8fGNuKGUpfHxlPT09aHR9LGRuPWZ1bmN0aW9uKGUpe3JldHVybiB1bihlKXx8dG4oZSl8fGU9PT1ndH0sZm49ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PUx0JiZlPD1SdHx8ZT09PXp0fHxlPj1CdCYmZTw9VnR8fGU9PT1IdH0scG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PWl0P3QhPT1udDohMX0sbW49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPT09Z3Q/dW4odCl8fHBuKHQsbik6dW4oZSk/ITA6ISEoZT09PWl0JiZwbihlLHQpKX0saG49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPT09TXR8fGU9PT1ndD90bih0KT8hMDp0PT09SXQmJnRuKG4pOnRuKGU9PT1JdD90OmUpfSxnbj1mdW5jdGlvbihlKXt2YXIgdD0wLG49MTsoZVt0XT09PU10fHxlW3RdPT09Z3QpJiYoZVt0XT09PWd0JiYobj0tMSksdCsrKTtmb3IodmFyIHI9W107dG4oZVt0XSk7KXIucHVzaChlW3QrK10pO3ZhciBpPXIubGVuZ3RoP3BhcnNlSW50KHUuYXBwbHkodm9pZCAwLHIpLDEwKTowO2VbdF09PT1JdCYmdCsrO2Zvcih2YXIgYT1bXTt0bihlW3RdKTspYS5wdXNoKGVbdCsrXSk7dmFyIG89YS5sZW5ndGgscz1vP3BhcnNlSW50KHUuYXBwbHkodm9pZCAwLGEpLDEwKTowOyhlW3RdPT09WnR8fGVbdF09PT1LdCkmJnQrKzt2YXIgYz0xOyhlW3RdPT09TXR8fGVbdF09PT1ndCkmJihlW3RdPT09Z3QmJihjPS0xKSx0KyspO2Zvcih2YXIgbD1bXTt0bihlW3RdKTspbC5wdXNoKGVbdCsrXSk7dmFyIGQ9bC5sZW5ndGg/cGFyc2VJbnQodS5hcHBseSh2b2lkIDAsbCksMTApOjA7cmV0dXJuIG4qKGkrcyoxMCoqLW8pKjEwKiooYypkKX0sX249e3R5cGU6Mn0sdm49e3R5cGU6M30seW49e3R5cGU6NH0sYm49e3R5cGU6MTN9LHhuPXt0eXBlOjh9LFNuPXt0eXBlOjIxfSxDbj17dHlwZTo5fSx3bj17dHlwZToxMH0sVG49e3R5cGU6MTF9LEVuPXt0eXBlOjEyfSxEbj17dHlwZToxNH0sT249e3R5cGU6MjN9LGtuPXt0eXBlOjF9LEFuPXt0eXBlOjI1fSxqbj17dHlwZToyNH0sTW49e3R5cGU6MjZ9LE5uPXt0eXBlOjI3fSxQbj17dHlwZToyOH0sRm49e3R5cGU6Mjl9LEluPXt0eXBlOjMxfSxMbj17dHlwZTozMn0sUm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdmFsdWU9W119cmV0dXJuIGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe3RoaXMuX3ZhbHVlPXRoaXMuX3ZhbHVlLmNvbmNhdChsKGUpKX0sZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuY29uc3VtZVRva2VuKCk7dCE9PUxuOyllLnB1c2godCksdD10aGlzLmNvbnN1bWVUb2tlbigpO3JldHVybiBlfSxlLnByb3RvdHlwZS5jb25zdW1lVG9rZW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtzd2l0Y2goZSl7Y2FzZSBzdDpyZXR1cm4gdGhpcy5jb25zdW1lU3RyaW5nVG9rZW4oc3QpO2Nhc2UgbHQ6dmFyIHQ9dGhpcy5wZWVrQ29kZVBvaW50KDApLG49dGhpcy5wZWVrQ29kZVBvaW50KDEpLHI9dGhpcy5wZWVrQ29kZVBvaW50KDIpO2lmKGRuKHQpfHxwbihuLHIpKXt2YXIgaT1tbih0LG4scik/JGU6UWUsYT10aGlzLmNvbnN1bWVOYW1lKCk7cmV0dXJue3R5cGU6NSx2YWx1ZTphLGZsYWdzOml9fWJyZWFrO2Nhc2UgdXQ6aWYodGhpcy5wZWVrQ29kZVBvaW50KDApPT09Y3QpcmV0dXJuIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLGJuO2JyZWFrO2Nhc2UgZnQ6cmV0dXJuIHRoaXMuY29uc3VtZVN0cmluZ1Rva2VuKGZ0KTtjYXNlIHB0OnJldHVybiBfbjtjYXNlIG10OnJldHVybiB2bjtjYXNlIGp0OmlmKHRoaXMucGVla0NvZGVQb2ludCgwKT09PWN0KXJldHVybiB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSxEbjticmVhaztjYXNlIE10OmlmKGhuKGUsdGhpcy5wZWVrQ29kZVBvaW50KDApLHRoaXMucGVla0NvZGVQb2ludCgxKSkpcmV0dXJuIHRoaXMucmVjb25zdW1lQ29kZVBvaW50KGUpLHRoaXMuY29uc3VtZU51bWVyaWNUb2tlbigpO2JyZWFrO2Nhc2UgTnQ6cmV0dXJuIHluO2Nhc2UgZ3Q6dmFyIG89ZSxzPXRoaXMucGVla0NvZGVQb2ludCgwKSxjPXRoaXMucGVla0NvZGVQb2ludCgxKTtpZihobihvLHMsYykpcmV0dXJuIHRoaXMucmVjb25zdW1lQ29kZVBvaW50KGUpLHRoaXMuY29uc3VtZU51bWVyaWNUb2tlbigpO2lmKG1uKG8scyxjKSlyZXR1cm4gdGhpcy5yZWNvbnN1bWVDb2RlUG9pbnQoZSksdGhpcy5jb25zdW1lSWRlbnRMaWtlVG9rZW4oKTtpZihzPT09Z3QmJmM9PT15dClyZXR1cm4gdGhpcy5jb25zdW1lQ29kZVBvaW50KCksdGhpcy5jb25zdW1lQ29kZVBvaW50KCksam47YnJlYWs7Y2FzZSBJdDppZihobihlLHRoaXMucGVla0NvZGVQb2ludCgwKSx0aGlzLnBlZWtDb2RlUG9pbnQoMSkpKXJldHVybiB0aGlzLnJlY29uc3VtZUNvZGVQb2ludChlKSx0aGlzLmNvbnN1bWVOdW1lcmljVG9rZW4oKTticmVhaztjYXNlIHJ0OmlmKHRoaXMucGVla0NvZGVQb2ludCgwKT09PWp0KWZvcih0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTs7KXt2YXIgbD10aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtpZihsPT09anQmJihsPXRoaXMuY29uc3VtZUNvZGVQb2ludCgpLGw9PT1ydCl8fGw9PT1VdClyZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKX1icmVhaztjYXNlIFB0OnJldHVybiBNbjtjYXNlIEZ0OnJldHVybiBObjtjYXNlIHZ0OmlmKHRoaXMucGVla0NvZGVQb2ludCgwKT09PV90JiZ0aGlzLnBlZWtDb2RlUG9pbnQoMSk9PT1ndCYmdGhpcy5wZWVrQ29kZVBvaW50KDIpPT09Z3QpcmV0dXJuIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLEFuO2JyZWFrO2Nhc2UgYnQ6aWYobW4odGhpcy5wZWVrQ29kZVBvaW50KDApLHRoaXMucGVla0NvZGVQb2ludCgxKSx0aGlzLnBlZWtDb2RlUG9pbnQoMikpKXt2YXIgYT10aGlzLmNvbnN1bWVOYW1lKCk7cmV0dXJue3R5cGU6Nyx2YWx1ZTphfX1icmVhaztjYXNlIHh0OnJldHVybiBQbjtjYXNlIGl0OmlmKHBuKGUsdGhpcy5wZWVrQ29kZVBvaW50KDApKSlyZXR1cm4gdGhpcy5yZWNvbnN1bWVDb2RlUG9pbnQoZSksdGhpcy5jb25zdW1lSWRlbnRMaWtlVG9rZW4oKTticmVhaztjYXNlIFN0OnJldHVybiBGbjtjYXNlIEN0OmlmKHRoaXMucGVla0NvZGVQb2ludCgwKT09PWN0KXJldHVybiB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSx4bjticmVhaztjYXNlIHd0OnJldHVybiBUbjtjYXNlIEV0OnJldHVybiBFbjtjYXNlIEp0OmNhc2UgJHQ6dmFyIGQ9dGhpcy5wZWVrQ29kZVBvaW50KDApLGY9dGhpcy5wZWVrQ29kZVBvaW50KDEpO3JldHVybiBkPT09TXQmJihybihmKXx8Zj09PVR0KSYmKHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLHRoaXMuY29uc3VtZVVuaWNvZGVSYW5nZVRva2VuKCkpLHRoaXMucmVjb25zdW1lQ29kZVBvaW50KGUpLHRoaXMuY29uc3VtZUlkZW50TGlrZVRva2VuKCk7Y2FzZSBEdDppZih0aGlzLnBlZWtDb2RlUG9pbnQoMCk9PT1jdClyZXR1cm4gdGhpcy5jb25zdW1lQ29kZVBvaW50KCksQ247aWYodGhpcy5wZWVrQ29kZVBvaW50KDApPT09RHQpcmV0dXJuIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLFNuO2JyZWFrO2Nhc2UgT3Q6aWYodGhpcy5wZWVrQ29kZVBvaW50KDApPT09Y3QpcmV0dXJuIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLHduO2JyZWFrO2Nhc2UgVXQ6cmV0dXJuIExufXJldHVybiBsbihlKT8odGhpcy5jb25zdW1lV2hpdGVTcGFjZSgpLEluKTp0bihlKT8odGhpcy5yZWNvbnN1bWVDb2RlUG9pbnQoZSksdGhpcy5jb25zdW1lTnVtZXJpY1Rva2VuKCkpOnVuKGUpPyh0aGlzLnJlY29uc3VtZUNvZGVQb2ludChlKSx0aGlzLmNvbnN1bWVJZGVudExpa2VUb2tlbigpKTp7dHlwZTo2LHZhbHVlOnUoZSl9fSxlLnByb3RvdHlwZS5jb25zdW1lQ29kZVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdmFsdWUuc2hpZnQoKTtyZXR1cm4gZT09PXZvaWQgMD8tMTplfSxlLnByb3RvdHlwZS5yZWNvbnN1bWVDb2RlUG9pbnQ9ZnVuY3Rpb24oZSl7dGhpcy5fdmFsdWUudW5zaGlmdChlKX0sZS5wcm90b3R5cGUucGVla0NvZGVQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fdmFsdWUubGVuZ3RoPy0xOnRoaXMuX3ZhbHVlW2VdfSxlLnByb3RvdHlwZS5jb25zdW1lVW5pY29kZVJhbmdlVG9rZW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD10aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtybih0KSYmZS5sZW5ndGg8NjspZS5wdXNoKHQpLHQ9dGhpcy5jb25zdW1lQ29kZVBvaW50KCk7Zm9yKHZhciBuPSExO3Q9PT1UdCYmZS5sZW5ndGg8NjspZS5wdXNoKHQpLHQ9dGhpcy5jb25zdW1lQ29kZVBvaW50KCksbj0hMDtpZihuKXt2YXIgcj1wYXJzZUludCh1LmFwcGx5KHZvaWQgMCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT09PVR0P1d0OmV9KSksMTYpLGk9cGFyc2VJbnQodS5hcHBseSh2b2lkIDAsZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1UdD9RdDplfSkpLDE2KTtyZXR1cm57dHlwZTozMCxzdGFydDpyLGVuZDppfX12YXIgYT1wYXJzZUludCh1LmFwcGx5KHZvaWQgMCxlKSwxNik7aWYodGhpcy5wZWVrQ29kZVBvaW50KDApPT09Z3QmJnJuKHRoaXMucGVla0NvZGVQb2ludCgxKSkpe3RoaXMuY29uc3VtZUNvZGVQb2ludCgpLHQ9dGhpcy5jb25zdW1lQ29kZVBvaW50KCk7Zm9yKHZhciBvPVtdO3JuKHQpJiZvLmxlbmd0aDw2OylvLnB1c2godCksdD10aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTt2YXIgaT1wYXJzZUludCh1LmFwcGx5KHZvaWQgMCxvKSwxNik7cmV0dXJue3R5cGU6MzAsc3RhcnQ6YSxlbmQ6aX19ZWxzZSByZXR1cm57dHlwZTozMCxzdGFydDphLGVuZDphfX0sZS5wcm90b3R5cGUuY29uc3VtZUlkZW50TGlrZVRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25zdW1lTmFtZSgpO3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PT1gdXJsYCYmdGhpcy5wZWVrQ29kZVBvaW50KDApPT09cHQ/KHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLHRoaXMuY29uc3VtZVVybFRva2VuKCkpOnRoaXMucGVla0NvZGVQb2ludCgwKT09PXB0Pyh0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSx7dHlwZToxOSx2YWx1ZTplfSk6e3R5cGU6MjAsdmFsdWU6ZX19LGUucHJvdG90eXBlLmNvbnN1bWVVcmxUb2tlbj1mdW5jdGlvbigpe3ZhciBlPVtdO2lmKHRoaXMuY29uc3VtZVdoaXRlU3BhY2UoKSx0aGlzLnBlZWtDb2RlUG9pbnQoMCk9PT1VdClyZXR1cm57dHlwZToyMix2YWx1ZTpgYH07dmFyIHQ9dGhpcy5wZWVrQ29kZVBvaW50KDApO2lmKHQ9PT1mdHx8dD09PXN0KXt2YXIgbj10aGlzLmNvbnN1bWVTdHJpbmdUb2tlbih0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSk7cmV0dXJuIG4udHlwZT09PTAmJih0aGlzLmNvbnN1bWVXaGl0ZVNwYWNlKCksdGhpcy5wZWVrQ29kZVBvaW50KDApPT09VXR8fHRoaXMucGVla0NvZGVQb2ludCgwKT09PW10KT8odGhpcy5jb25zdW1lQ29kZVBvaW50KCkse3R5cGU6MjIsdmFsdWU6bi52YWx1ZX0pOih0aGlzLmNvbnN1bWVCYWRVcmxSZW1uYW50cygpLE9uKX1mb3IoOzspe3ZhciByPXRoaXMuY29uc3VtZUNvZGVQb2ludCgpO2lmKHI9PT1VdHx8cj09PW10KXJldHVybnt0eXBlOjIyLHZhbHVlOnUuYXBwbHkodm9pZCAwLGUpfTtpZihsbihyKSlyZXR1cm4gdGhpcy5jb25zdW1lV2hpdGVTcGFjZSgpLHRoaXMucGVla0NvZGVQb2ludCgwKT09PVV0fHx0aGlzLnBlZWtDb2RlUG9pbnQoMCk9PT1tdD8odGhpcy5jb25zdW1lQ29kZVBvaW50KCkse3R5cGU6MjIsdmFsdWU6dS5hcHBseSh2b2lkIDAsZSl9KToodGhpcy5jb25zdW1lQmFkVXJsUmVtbmFudHMoKSxPbik7aWYocj09PXN0fHxyPT09ZnR8fHI9PT1wdHx8Zm4ocikpcmV0dXJuIHRoaXMuY29uc3VtZUJhZFVybFJlbW5hbnRzKCksT247aWYocj09PWl0KWlmKHBuKHIsdGhpcy5wZWVrQ29kZVBvaW50KDApKSllLnB1c2godGhpcy5jb25zdW1lRXNjYXBlZENvZGVQb2ludCgpKTtlbHNlIHJldHVybiB0aGlzLmNvbnN1bWVCYWRVcmxSZW1uYW50cygpLE9uO2Vsc2UgZS5wdXNoKHIpfX0sZS5wcm90b3R5cGUuY29uc3VtZVdoaXRlU3BhY2U9ZnVuY3Rpb24oKXtmb3IoO2xuKHRoaXMucGVla0NvZGVQb2ludCgwKSk7KXRoaXMuY29uc3VtZUNvZGVQb2ludCgpfSxlLnByb3RvdHlwZS5jb25zdW1lQmFkVXJsUmVtbmFudHM9ZnVuY3Rpb24oKXtmb3IoOzspe3ZhciBlPXRoaXMuY29uc3VtZUNvZGVQb2ludCgpO2lmKGU9PT1tdHx8ZT09PVV0KXJldHVybjtwbihlLHRoaXMucGVla0NvZGVQb2ludCgwKSkmJnRoaXMuY29uc3VtZUVzY2FwZWRDb2RlUG9pbnQoKX19LGUucHJvdG90eXBlLmNvbnN1bWVTdHJpbmdTbGljZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9NWU0LG49YGA7ZT4wOyl7dmFyIHI9TWF0aC5taW4odCxlKTtuKz11LmFwcGx5KHZvaWQgMCx0aGlzLl92YWx1ZS5zcGxpY2UoMCxyKSksZS09cn1yZXR1cm4gdGhpcy5fdmFsdWUuc2hpZnQoKSxufSxlLnByb3RvdHlwZS5jb25zdW1lU3RyaW5nVG9rZW49ZnVuY3Rpb24oZSl7dmFyIHQ9YGAsbj0wO2Rve3ZhciByPXRoaXMuX3ZhbHVlW25dO2lmKHI9PT1VdHx8cj09PXZvaWQgMHx8cj09PWUpcmV0dXJuIHQrPXRoaXMuY29uc3VtZVN0cmluZ1NsaWNlKG4pLHt0eXBlOjAsdmFsdWU6dH07aWYocj09PW50KXJldHVybiB0aGlzLl92YWx1ZS5zcGxpY2UoMCxuKSxrbjtpZihyPT09aXQpe3ZhciBpPXRoaXMuX3ZhbHVlW24rMV07aSE9PVV0JiZpIT09dm9pZCAwJiYoaT09PW50Pyh0Kz10aGlzLmNvbnN1bWVTdHJpbmdTbGljZShuKSxuPS0xLHRoaXMuX3ZhbHVlLnNoaWZ0KCkpOnBuKHIsaSkmJih0Kz10aGlzLmNvbnN1bWVTdHJpbmdTbGljZShuKSx0Kz11KHRoaXMuY29uc3VtZUVzY2FwZWRDb2RlUG9pbnQoKSksbj0tMSkpfW4rK313aGlsZSghMCl9LGUucHJvdG90eXBlLmNvbnN1bWVOdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PWV0LG49dGhpcy5wZWVrQ29kZVBvaW50KDApO2Zvcigobj09PU10fHxuPT09Z3QpJiZlLnB1c2godGhpcy5jb25zdW1lQ29kZVBvaW50KCkpO3RuKHRoaXMucGVla0NvZGVQb2ludCgwKSk7KWUucHVzaCh0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSk7bj10aGlzLnBlZWtDb2RlUG9pbnQoMCk7dmFyIHI9dGhpcy5wZWVrQ29kZVBvaW50KDEpO2lmKG49PT1JdCYmdG4ocikpZm9yKGUucHVzaCh0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSx0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSksdD10dDt0bih0aGlzLnBlZWtDb2RlUG9pbnQoMCkpOyllLnB1c2godGhpcy5jb25zdW1lQ29kZVBvaW50KCkpO249dGhpcy5wZWVrQ29kZVBvaW50KDApLHI9dGhpcy5wZWVrQ29kZVBvaW50KDEpO3ZhciBpPXRoaXMucGVla0NvZGVQb2ludCgyKTtpZigobj09PVp0fHxuPT09S3QpJiYoKHI9PT1NdHx8cj09PWd0KSYmdG4oaSl8fHRuKHIpKSlmb3IoZS5wdXNoKHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLHRoaXMuY29uc3VtZUNvZGVQb2ludCgpKSx0PXR0O3RuKHRoaXMucGVla0NvZGVQb2ludCgwKSk7KWUucHVzaCh0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSk7cmV0dXJuW2duKGUpLHRdfSxlLnByb3RvdHlwZS5jb25zdW1lTnVtZXJpY1Rva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25zdW1lTnVtYmVyKCksdD1lWzBdLG49ZVsxXSxyPXRoaXMucGVla0NvZGVQb2ludCgwKTtyZXR1cm4gbW4ocix0aGlzLnBlZWtDb2RlUG9pbnQoMSksdGhpcy5wZWVrQ29kZVBvaW50KDIpKT97dHlwZToxNSxudW1iZXI6dCxmbGFnczpuLHVuaXQ6dGhpcy5jb25zdW1lTmFtZSgpfTpyPT09ZHQ/KHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLHt0eXBlOjE2LG51bWJlcjp0LGZsYWdzOm59KTp7dHlwZToxNyxudW1iZXI6dCxmbGFnczpufX0sZS5wcm90b3R5cGUuY29uc3VtZUVzY2FwZWRDb2RlUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtpZihybihlKSl7Zm9yKHZhciB0PXUoZSk7cm4odGhpcy5wZWVrQ29kZVBvaW50KDApKSYmdC5sZW5ndGg8NjspdCs9dSh0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSk7bG4odGhpcy5wZWVrQ29kZVBvaW50KDApKSYmdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7dmFyIG49cGFyc2VJbnQodCwxNik7cmV0dXJuIG49PT0wfHxubihuKXx8bj4xMTE0MTExP0F0Om59cmV0dXJuIGU9PT1VdD9BdDplfSxlLnByb3RvdHlwZS5jb25zdW1lTmFtZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1gYDs7KXt2YXIgdD10aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtpZihkbih0KSllKz11KHQpO2Vsc2UgaWYocG4odCx0aGlzLnBlZWtDb2RlUG9pbnQoMCkpKWUrPXUodGhpcy5jb25zdW1lRXNjYXBlZENvZGVQb2ludCgpKTtlbHNlIHJldHVybiB0aGlzLnJlY29uc3VtZUNvZGVQb2ludCh0KSxlfX0sZX0oKSx6bj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fdG9rZW5zPWV9cmV0dXJuIGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBSbjtyZXR1cm4gbi53cml0ZSh0KSxuZXcgZShuLnJlYWQoKSl9LGUucGFyc2VWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGUodCkucGFyc2VDb21wb25lbnRWYWx1ZSgpfSxlLnBhcnNlVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZSh0KS5wYXJzZUNvbXBvbmVudFZhbHVlcygpfSxlLnByb3RvdHlwZS5wYXJzZUNvbXBvbmVudFZhbHVlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuY29uc3VtZVRva2VuKCk7ZS50eXBlPT09MzE7KWU9dGhpcy5jb25zdW1lVG9rZW4oKTtpZihlLnR5cGU9PT0zMil0aHJvdyBTeW50YXhFcnJvcihgRXJyb3IgcGFyc2luZyBDU1MgY29tcG9uZW50IHZhbHVlLCB1bmV4cGVjdGVkIEVPRmApO3RoaXMucmVjb25zdW1lVG9rZW4oZSk7dmFyIHQ9dGhpcy5jb25zdW1lQ29tcG9uZW50VmFsdWUoKTtkbyBlPXRoaXMuY29uc3VtZVRva2VuKCk7d2hpbGUoZS50eXBlPT09MzEpO2lmKGUudHlwZT09PTMyKXJldHVybiB0O3Rocm93IFN5bnRheEVycm9yKGBFcnJvciBwYXJzaW5nIENTUyBjb21wb25lbnQgdmFsdWUsIG11bHRpcGxlIHZhbHVlcyBmb3VuZCB3aGVuIGV4cGVjdGluZyBvbmx5IG9uZWApfSxlLnByb3RvdHlwZS5wYXJzZUNvbXBvbmVudFZhbHVlcz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXTs7KXt2YXIgdD10aGlzLmNvbnN1bWVDb21wb25lbnRWYWx1ZSgpO2lmKHQudHlwZT09PTMyKXJldHVybiBlO2UucHVzaCh0KSxlLnB1c2goKX19LGUucHJvdG90eXBlLmNvbnN1bWVDb21wb25lbnRWYWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uc3VtZVRva2VuKCk7c3dpdGNoKGUudHlwZSl7Y2FzZSAxMTpjYXNlIDI4OmNhc2UgMjpyZXR1cm4gdGhpcy5jb25zdW1lU2ltcGxlQmxvY2soZS50eXBlKTtjYXNlIDE5OnJldHVybiB0aGlzLmNvbnN1bWVGdW5jdGlvbihlKX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuY29uc3VtZVNpbXBsZUJsb2NrPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD17dHlwZTplLHZhbHVlczpbXX0sbj10aGlzLmNvbnN1bWVUb2tlbigpOzspe2lmKG4udHlwZT09PTMyfHxKbihuLGUpKXJldHVybiB0O3RoaXMucmVjb25zdW1lVG9rZW4obiksdC52YWx1ZXMucHVzaCh0aGlzLmNvbnN1bWVDb21wb25lbnRWYWx1ZSgpKSxuPXRoaXMuY29uc3VtZVRva2VuKCl9fSxlLnByb3RvdHlwZS5jb25zdW1lRnVuY3Rpb249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXtuYW1lOmUudmFsdWUsdmFsdWVzOltdLHR5cGU6MTh9Ozspe3ZhciBuPXRoaXMuY29uc3VtZVRva2VuKCk7aWYobi50eXBlPT09MzJ8fG4udHlwZT09PTMpcmV0dXJuIHQ7dGhpcy5yZWNvbnN1bWVUb2tlbihuKSx0LnZhbHVlcy5wdXNoKHRoaXMuY29uc3VtZUNvbXBvbmVudFZhbHVlKCkpfX0sZS5wcm90b3R5cGUuY29uc3VtZVRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdG9rZW5zLnNoaWZ0KCk7cmV0dXJuIGU9PT12b2lkIDA/TG46ZX0sZS5wcm90b3R5cGUucmVjb25zdW1lVG9rZW49ZnVuY3Rpb24oZSl7dGhpcy5fdG9rZW5zLnVuc2hpZnQoZSl9LGV9KCksQm49ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PTE1fSxWbj1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09MTd9LEhuPWZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0yMH0sVW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PTB9LFduPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEhuKGUpJiZlLnZhbHVlPT09dH0sR249ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZSE9PTMxfSxLbj1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlIT09MzEmJmUudHlwZSE9PTR9LHFuPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLnR5cGU9PT00KXtpZihuLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoYEVycm9yIHBhcnNpbmcgZnVuY3Rpb24gYXJncywgemVybyB0b2tlbnMgZm9yIGFyZ2ApO3QucHVzaChuKSxuPVtdO3JldHVybn1lLnR5cGUhPT0zMSYmbi5wdXNoKGUpfSksbi5sZW5ndGgmJnQucHVzaChuKSx0fSxKbj1mdW5jdGlvbihlLHQpe3JldHVybiB0PT09MTEmJmUudHlwZT09PTEyfHx0PT09MjgmJmUudHlwZT09PTI5PyEwOnQ9PT0yJiZlLnR5cGU9PT0zfSxZbj1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09MTd8fGUudHlwZT09PTE1fSxYbj1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09MTZ8fFluKGUpfSxabj1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+MT9bZVswXSxlWzFdXTpbZVswXV19LFFuPXt0eXBlOjE3LG51bWJlcjowLGZsYWdzOmV0fSwkbj17dHlwZToxNixudW1iZXI6NTAsZmxhZ3M6ZXR9LGVyPXt0eXBlOjE2LG51bWJlcjoxMDAsZmxhZ3M6ZXR9LHRyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lWzBdLGk9ZVsxXTtyZXR1cm5bcShyLHQpLHEoaT09PXZvaWQgMD9yOmksbildfSxxPWZ1bmN0aW9uKGUsdCl7aWYoZS50eXBlPT09MTYpcmV0dXJuIGUubnVtYmVyLzEwMCp0O2lmKEJuKGUpKXN3aXRjaChlLnVuaXQpe2Nhc2VgcmVtYDpjYXNlYGVtYDpyZXR1cm4gMTYqZS5udW1iZXI7ZGVmYXVsdDpyZXR1cm4gZS5udW1iZXJ9cmV0dXJuIGUubnVtYmVyfSxucj1gZGVnYCxycj1gZ3JhZGAsaXI9YHJhZGAsYXI9YHR1cm5gLG9yPXtuYW1lOmBhbmdsZWAscGFyc2U6ZnVuY3Rpb24oZSx0KXtpZih0LnR5cGU9PT0xNSlzd2l0Y2godC51bml0KXtjYXNlIG5yOnJldHVybiBNYXRoLlBJKnQubnVtYmVyLzE4MDtjYXNlIHJyOnJldHVybiBNYXRoLlBJLzIwMCp0Lm51bWJlcjtjYXNlIGlyOnJldHVybiB0Lm51bWJlcjtjYXNlIGFyOnJldHVybiBNYXRoLlBJKjIqdC5udW1iZXJ9dGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIGFuZ2xlIHR5cGVgKX19LHNyPWZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0xNSYmKGUudW5pdD09PW5yfHxlLnVuaXQ9PT1ycnx8ZS51bml0PT09aXJ8fGUudW5pdD09PWFyKX0sY3I9ZnVuY3Rpb24oZSl7c3dpdGNoKGUuZmlsdGVyKEhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KS5qb2luKGAgYCkpe2Nhc2VgdG8gYm90dG9tIHJpZ2h0YDpjYXNlYHRvIHJpZ2h0IGJvdHRvbWA6Y2FzZWBsZWZ0IHRvcGA6Y2FzZWB0b3AgbGVmdGA6cmV0dXJuW1FuLFFuXTtjYXNlYHRvIHRvcGA6Y2FzZWBib3R0b21gOnJldHVybiBscigwKTtjYXNlYHRvIGJvdHRvbSBsZWZ0YDpjYXNlYHRvIGxlZnQgYm90dG9tYDpjYXNlYHJpZ2h0IHRvcGA6Y2FzZWB0b3AgcmlnaHRgOnJldHVybltRbixlcl07Y2FzZWB0byByaWdodGA6Y2FzZWBsZWZ0YDpyZXR1cm4gbHIoOTApO2Nhc2VgdG8gdG9wIGxlZnRgOmNhc2VgdG8gbGVmdCB0b3BgOmNhc2VgcmlnaHQgYm90dG9tYDpjYXNlYGJvdHRvbSByaWdodGA6cmV0dXJuW2VyLGVyXTtjYXNlYHRvIGJvdHRvbWA6Y2FzZWB0b3BgOnJldHVybiBscigxODApO2Nhc2VgdG8gdG9wIHJpZ2h0YDpjYXNlYHRvIHJpZ2h0IHRvcGA6Y2FzZWBsZWZ0IGJvdHRvbWA6Y2FzZWBib3R0b20gbGVmdGA6cmV0dXJuW2VyLFFuXTtjYXNlYHRvIGxlZnRgOmNhc2VgcmlnaHRgOnJldHVybiBscigyNzApfXJldHVybiAwfSxscj1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5QSSplLzE4MH0sdXI9e25hbWU6YGNvbG9yYCxwYXJzZTpmdW5jdGlvbihlLHQpe2lmKHQudHlwZT09PTE4KXt2YXIgbj12clt0Lm5hbWVdO2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoYEF0dGVtcHRpbmcgdG8gcGFyc2UgYW4gdW5zdXBwb3J0ZWQgY29sb3IgZnVuY3Rpb24gImArdC5uYW1lK2AiYCk7cmV0dXJuIG4oZSx0LnZhbHVlcyl9aWYodC50eXBlPT09NSl7aWYodC52YWx1ZS5sZW5ndGg9PT0zKXt2YXIgcj10LnZhbHVlLnN1YnN0cmluZygwLDEpLGk9dC52YWx1ZS5zdWJzdHJpbmcoMSwyKSxhPXQudmFsdWUuc3Vic3RyaW5nKDIsMyk7cmV0dXJuIHByKHBhcnNlSW50KHIrciwxNikscGFyc2VJbnQoaStpLDE2KSxwYXJzZUludChhK2EsMTYpLDEpfWlmKHQudmFsdWUubGVuZ3RoPT09NCl7dmFyIHI9dC52YWx1ZS5zdWJzdHJpbmcoMCwxKSxpPXQudmFsdWUuc3Vic3RyaW5nKDEsMiksYT10LnZhbHVlLnN1YnN0cmluZygyLDMpLG89dC52YWx1ZS5zdWJzdHJpbmcoMyw0KTtyZXR1cm4gcHIocGFyc2VJbnQocityLDE2KSxwYXJzZUludChpK2ksMTYpLHBhcnNlSW50KGErYSwxNikscGFyc2VJbnQobytvLDE2KS8yNTUpfWlmKHQudmFsdWUubGVuZ3RoPT09Nil7dmFyIHI9dC52YWx1ZS5zdWJzdHJpbmcoMCwyKSxpPXQudmFsdWUuc3Vic3RyaW5nKDIsNCksYT10LnZhbHVlLnN1YnN0cmluZyg0LDYpO3JldHVybiBwcihwYXJzZUludChyLDE2KSxwYXJzZUludChpLDE2KSxwYXJzZUludChhLDE2KSwxKX1pZih0LnZhbHVlLmxlbmd0aD09PTgpe3ZhciByPXQudmFsdWUuc3Vic3RyaW5nKDAsMiksaT10LnZhbHVlLnN1YnN0cmluZygyLDQpLGE9dC52YWx1ZS5zdWJzdHJpbmcoNCw2KSxvPXQudmFsdWUuc3Vic3RyaW5nKDYsOCk7cmV0dXJuIHByKHBhcnNlSW50KHIsMTYpLHBhcnNlSW50KGksMTYpLHBhcnNlSW50KGEsMTYpLHBhcnNlSW50KG8sMTYpLzI1NSl9fWlmKHQudHlwZT09PTIwKXt2YXIgcz1iclt0LnZhbHVlLnRvVXBwZXJDYXNlKCldO2lmKHMhPT12b2lkIDApcmV0dXJuIHN9cmV0dXJuIGJyLlRSQU5TUEFSRU5UfX0sZHI9ZnVuY3Rpb24oZSl7cmV0dXJuKDI1NSZlKT09MH0sZnI9ZnVuY3Rpb24oZSl7dmFyIHQ9MjU1JmUsbj0yNTUmZT4+OCxyPTI1NSZlPj4xNixpPTI1NSZlPj4yNDtyZXR1cm4gdDwyNTU/YHJnYmEoYCtpK2AsYCtyK2AsYCtuK2AsYCt0LzI1NStgKWA6YHJnYihgK2krYCxgK3IrYCxgK24rYClgfSxwcj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4oZTw8MjR8dDw8MTZ8bjw8OHxNYXRoLnJvdW5kKHIqMjU1KTw8MCk+Pj4wfSxtcj1mdW5jdGlvbihlLHQpe2lmKGUudHlwZT09PTE3KXJldHVybiBlLm51bWJlcjtpZihlLnR5cGU9PT0xNil7dmFyIG49dD09PTM/MToyNTU7cmV0dXJuIHQ9PT0zP2UubnVtYmVyLzEwMCpuOk1hdGgucm91bmQoZS5udW1iZXIvMTAwKm4pfXJldHVybiAwfSxocj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsdGVyKEtuKTtpZihuLmxlbmd0aD09PTMpe3ZhciByPW4ubWFwKG1yKSxpPXJbMF0sYT1yWzFdLG89clsyXTtyZXR1cm4gcHIoaSxhLG8sMSl9aWYobi5sZW5ndGg9PT00KXt2YXIgcz1uLm1hcChtciksaT1zWzBdLGE9c1sxXSxvPXNbMl0sYz1zWzNdO3JldHVybiBwcihpLGEsbyxjKX1yZXR1cm4gMH07ZnVuY3Rpb24gZ3IoZSx0LG4pe3JldHVybiBuPDAmJihuKz0xKSxuPj0xJiYtLW4sbjwxLzY/KHQtZSkqbio2K2U6bjwxLzI/dDpuPDIvMz8odC1lKSo2KigyLzMtbikrZTplfXZhciBfcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsdGVyKEtuKSxyPW5bMF0saT1uWzFdLGE9blsyXSxvPW5bM10scz0oci50eXBlPT09MTc/bHIoci5udW1iZXIpOm9yLnBhcnNlKGUscikpLyhNYXRoLlBJKjIpLGM9WG4oaSk/aS5udW1iZXIvMTAwOjAsbD1YbihhKT9hLm51bWJlci8xMDA6MCx1PW8hPT12b2lkIDAmJlhuKG8pP3EobywxKToxO2lmKGM9PT0wKXJldHVybiBwcihsKjI1NSxsKjI1NSxsKjI1NSwxKTt2YXIgZD1sPD0uNT9sKihjKzEpOmwrYy1sKmMsZj1sKjItZCxwPWdyKGYsZCxzKzEvMyksbT1ncihmLGQscyksaD1ncihmLGQscy0xLzMpO3JldHVybiBwcihwKjI1NSxtKjI1NSxoKjI1NSx1KX0sdnI9e2hzbDpfcixoc2xhOl9yLHJnYjpocixyZ2JhOmhyfSx5cj1mdW5jdGlvbihlLHQpe3JldHVybiB1ci5wYXJzZShlLHpuLmNyZWF0ZSh0KS5wYXJzZUNvbXBvbmVudFZhbHVlKCkpfSxicj17QUxJQ0VCTFVFOjQwNDI4NTAzMDMsQU5USVFVRVdISVRFOjQyMDk3NjAyNTUsQVFVQToxNjc3NzIxNSxBUVVBTUFSSU5FOjIxNDc0NzI2MzksQVpVUkU6NDA0MzMwOTA1NSxCRUlHRTo0MTI2NTMwODE1LEJJU1FVRTo0MjkzMTgyNzE5LEJMQUNLOjI1NSxCTEFOQ0hFREFMTU9ORDo0MjkzNjQzNzc1LEJMVUU6NjU1MzUsQkxVRVZJT0xFVDoyMzE4MTMxOTY3LEJST1dOOjI3NzEwMDQxNTksQlVSTFlXT09EOjM3MzY2MzUzOTEsQ0FERVRCTFVFOjE2MDQyMzE0MjMsQ0hBUlRSRVVTRToyMTQ3NDE4MzY3LENIT0NPTEFURTozNTMwMTA0NTc1LENPUkFMOjQyODY1MzM4ODcsQ09STkZMT1dFUkJMVUU6MTY4NzU0NzM5MSxDT1JOU0lMSzo0Mjk0NDk5NTgzLENSSU1TT046MzY5MjMxMzg1NSxDWUFOOjE2Nzc3MjE1LERBUktCTFVFOjM1ODM5LERBUktDWUFOOjkxNDUzNDMsREFSS0dPTERFTlJPRDozMDk1ODM3Njk1LERBUktHUkFZOjI4NDY0Njg2MDcsREFSS0dSRUVOOjY1NTM4NTUsREFSS0dSRVk6Mjg0NjQ2ODYwNyxEQVJLS0hBS0k6MzE4MjkxNDU1OSxEQVJLTUFHRU5UQToyMzMyMDY4ODYzLERBUktPTElWRUdSRUVOOjE0MzMwODc5OTksREFSS09SQU5HRTo0Mjg3MzY1Mzc1LERBUktPUkNISUQ6MjU3MDI0MzMyNyxEQVJLUkVEOjIzMzIwMzMyNzksREFSS1NBTE1PTjozOTE4OTUzMjE1LERBUktTRUFHUkVFTjoyNDExNDk5NTE5LERBUktTTEFURUJMVUU6MTIxMTk5MzA4NyxEQVJLU0xBVEVHUkFZOjc5MzcyNjk3NSxEQVJLU0xBVEVHUkVZOjc5MzcyNjk3NSxEQVJLVFVSUVVPSVNFOjEzNTU0MTc1LERBUktWSU9MRVQ6MjQ4MzA4MjIzOSxERUVQUElOSzo0Mjc5NTM4Njg3LERFRVBTS1lCTFVFOjEyNTgyOTExLERJTUdSQVk6MTc2ODUxNjA5NSxESU1HUkVZOjE3Njg1MTYwOTUsRE9ER0VSQkxVRTo1MTI4MTkxOTksRklSRUJSSUNLOjI5ODg1ODE2MzEsRkxPUkFMV0hJVEU6NDI5NDYzNTc3NSxGT1JFU1RHUkVFTjo1Nzk1NDM4MDcsRlVDSFNJQTo0Mjc4MjU1NjE1LEdBSU5TQk9STzozNzA1NDYyMDE1LEdIT1NUV0hJVEU6NDE3NzA2ODAzMSxHT0xEOjQyOTIyODA1NzUsR09MREVOUk9EOjM2NjgyNTQ5NzUsR1JBWToyMTU1OTA1Mjc5LEdSRUVOOjgzODg4NjMsR1JFRU5ZRUxMT1c6MjkxOTE4MjMzNSxHUkVZOjIxNTU5MDUyNzksSE9ORVlERVc6NDA0MzMwNTIxNSxIT1RQSU5LOjQyODUxMTc2OTUsSU5ESUFOUkVEOjM0NDUzODIzOTksSU5ESUdPOjEyNTgzMjQ3MzUsSVZPUlk6NDI5NDk2MzQ1NSxLSEFLSTo0MDQxNjQxMjE1LExBVkVOREVSOjM4NzM4OTcyMTUsTEFWRU5ERVJCTFVTSDo0MjkzOTgxNjk1LExBV05HUkVFTjoyMDk2ODkwMTExLExFTU9OQ0hJRkZPTjo0Mjk0NjI2ODE1LExJR0hUQkxVRToyOTE2NjczMjc5LExJR0hUQ09SQUw6NDAzNDk1MzQ3MSxMSUdIVENZQU46Mzc3NDg3MzU5OSxMSUdIVEdPTERFTlJPRFlFTExPVzo0MjEwNzQyMDE1LExJR0hUR1JBWTozNTUzODc0OTQzLExJR0hUR1JFRU46MjQzMTU1Mzc5MSxMSUdIVEdSRVk6MzU1Mzg3NDk0MyxMSUdIVFBJTks6NDI5MDE2NzI5NSxMSUdIVFNBTE1PTjo0Mjg4NzA3MzI3LExJR0hUU0VBR1JFRU46NTQ4NTgwMDk1LExJR0hUU0tZQkxVRToyMjc4NDg4ODMxLExJR0hUU0xBVEVHUkFZOjIwMDU0NDEwMjMsTElHSFRTTEFURUdSRVk6MjAwNTQ0MTAyMyxMSUdIVFNURUVMQkxVRToyOTY1NjkyMTU5LExJR0hUWUVMTE9XOjQyOTQ5NTkzNTksTElNRToxNjcxMTkzNSxMSU1FR1JFRU46ODUyMzA4NzM1LExJTkVOOjQyMTAwOTE3NzUsTUFHRU5UQTo0Mjc4MjU1NjE1LE1BUk9PTjoyMTQ3NDgzOTAzLE1FRElVTUFRVUFNQVJJTkU6MTcyNDc1NDY4NyxNRURJVU1CTFVFOjUyNzM1LE1FRElVTU9SQ0hJRDozMTI2MTg3MDA3LE1FRElVTVBVUlBMRToyNDczNjQ3MTAzLE1FRElVTVNFQUdSRUVOOjEwMTgzOTMwODcsTUVESVVNU0xBVEVCTFVFOjIwNzA0NzQ0OTUsTUVESVVNU1BSSU5HR1JFRU46MTY0MjM2NzksTUVESVVNVFVSUVVPSVNFOjEyMjE3MDkwNTUsTUVESVVNVklPTEVUUkVEOjMzNDAwNzY1NDMsTUlETklHSFRCTFVFOjQyMTA5NzcyNyxNSU5UQ1JFQU06NDEyNzE5Mzg1NSxNSVNUWVJPU0U6NDI5MzE5MDE0MyxNT0NDQVNJTjo0MjkzMTc4ODc5LE5BVkFKT1dISVRFOjQyOTI3ODM2MTUsTkFWWTozMzAyMyxPTERMQUNFOjQyNjA3NTExMDMsT0xJVkU6MjE1NTg3MjUxMSxPTElWRURSQUI6MTgwNDQ3NzQzOSxPUkFOR0U6NDI4OTAwMzc3NSxPUkFOR0VSRUQ6NDI4MjcxMjMxOSxPUkNISUQ6MzY2NDgyODE1OSxQQUxFR09MREVOUk9EOjQwMDgyMjU1MzUsUEFMRUdSRUVOOjI1NjY2MjU1MzUsUEFMRVRVUlFVT0lTRToyOTUxNjcxNTUxLFBBTEVWSU9MRVRSRUQ6MzY4MTU4ODIyMyxQQVBBWUFXSElQOjQyOTM5MDc5NjcsUEVBQ0hQVUZGOjQyOTI1MjQ1NDMsUEVSVTozNDQ4MDYxOTUxLFBJTks6NDI5MDgyNTIxNSxQTFVNOjM3MTgzMDczMjcsUE9XREVSQkxVRToyOTY3NTI5MjE1LFBVUlBMRToyMTQ3NTE2NjcxLFJFQkVDQ0FQVVJQTEU6MTcxNDY1Nzc5MSxSRUQ6NDI3ODE5MDMzNSxST1NZQlJPV046MzE2MzUyNTExOSxST1lBTEJMVUU6MTA5NzQ1ODE3NSxTQURETEVCUk9XTjoyMzM2NTYwMTI3LFNBTE1PTjo0MjAyNzIyMDQ3LFNBTkRZQlJPV046NDEwNDQxMzQzOSxTRUFHUkVFTjo3ODA4ODM5NjcsU0VBU0hFTEw6NDI5NDMwNzU4MyxTSUVOTkE6MjY4OTc0MDI4NyxTSUxWRVI6MzIzMzg1Nzc5MSxTS1lCTFVFOjIyNzg0ODQ5OTEsU0xBVEVCTFVFOjE3ODQzMzU4NzEsU0xBVEVHUkFZOjE4ODc0NzM5MTksU0xBVEVHUkVZOjE4ODc0NzM5MTksU05PVzo0Mjk0NjM4MzM1LFNQUklOR0dSRUVOOjE2NzQ0NDQ3LFNURUVMQkxVRToxMTgyOTcxMTM1LFRBTjozNTM1MDQ3OTM1LFRFQUw6ODQyMTYzMSxUSElTVExFOjM2MzY0NTE1ODMsVE9NQVRPOjQyODQ2OTY1NzUsVFJBTlNQQVJFTlQ6MCxUVVJRVU9JU0U6MTA4ODQ3NTM5MSxWSU9MRVQ6NDAwMTU1ODI3MSxXSEVBVDo0MTI1MDEyOTkxLFdISVRFOjQyOTQ5NjcyOTUsV0hJVEVTTU9LRTo0MTI2NTM3MjE1LFlFTExPVzo0Mjk0OTAyMDE1LFlFTExPV0dSRUVOOjI1OTcxMzkxOTl9LHhyPXtuYW1lOmBiYWNrZ3JvdW5kLWNsaXBgLGluaXRpYWxWYWx1ZTpgYm9yZGVyLWJveGAscHJlZml4OiExLHR5cGU6MSxwYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbihlKXtpZihIbihlKSlzd2l0Y2goZS52YWx1ZSl7Y2FzZWBwYWRkaW5nLWJveGA6cmV0dXJuIDE7Y2FzZWBjb250ZW50LWJveGA6cmV0dXJuIDJ9cmV0dXJuIDB9KX19LFNyPXtuYW1lOmBiYWNrZ3JvdW5kLWNvbG9yYCxpbml0aWFsVmFsdWU6YHRyYW5zcGFyZW50YCxwcmVmaXg6ITEsdHlwZTozLGZvcm1hdDpgY29sb3JgfSxDcj1mdW5jdGlvbihlLHQpe3ZhciBuPXVyLnBhcnNlKGUsdFswXSkscj10WzFdO3JldHVybiByJiZYbihyKT97Y29sb3I6bixzdG9wOnJ9Ontjb2xvcjpuLHN0b3A6bnVsbH19LHdyPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVswXSxyPWVbZS5sZW5ndGgtMV07bi5zdG9wPT09bnVsbCYmKG4uc3RvcD1Rbiksci5zdG9wPT09bnVsbCYmKHIuc3RvcD1lcik7Zm9yKHZhciBpPVtdLGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPWVbb10uc3RvcDtpZihzIT09bnVsbCl7dmFyIGM9cShzLHQpO2M+YT9pLnB1c2goYyk6aS5wdXNoKGEpLGE9Y31lbHNlIGkucHVzaChudWxsKX1mb3IodmFyIGw9bnVsbCxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciB1PWlbb107aWYodT09PW51bGwpbD09PW51bGwmJihsPW8pO2Vsc2UgaWYobCE9PW51bGwpe2Zvcih2YXIgZD1vLWwsZj0odS1pW2wtMV0pLyhkKzEpLHA9MTtwPD1kO3ArKylpW2wrcC0xXT1mKnA7bD1udWxsfX1yZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm57Y29sb3I6ZS5jb2xvcixzdG9wOk1hdGgubWF4KE1hdGgubWluKDEsaVtuXS90KSwwKX19KX0sVHI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQvMixpPW4vMixhPXEoZVswXSx0KS1yLG89aS1xKGVbMV0sbik7cmV0dXJuKE1hdGguYXRhbjIobyxhKStNYXRoLlBJKjIpJShNYXRoLlBJKjIpfSxFcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dHlwZW9mIGU9PWBudW1iZXJgP2U6VHIoZSx0LG4pLGk9TWF0aC5hYnModCpNYXRoLnNpbihyKSkrTWF0aC5hYnMobipNYXRoLmNvcyhyKSksYT10LzIsbz1uLzIscz1pLzIsYz1NYXRoLnNpbihyLU1hdGguUEkvMikqcyxsPU1hdGguY29zKHItTWF0aC5QSS8yKSpzO3JldHVybltpLGEtbCxhK2wsby1jLG8rY119LERyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguc3FydChlKmUrdCp0KX0sT3I9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm5bWzAsMF0sWzAsdF0sW2UsMF0sW2UsdF1dLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBhPXRbMF0sbz10WzFdLHM9RHIobi1hLHItbyk7cmV0dXJuKGk/czxlLm9wdGltdW1EaXN0YW5jZTpzPmUub3B0aW11bURpc3RhbmNlKT97b3B0aW11bUNvcm5lcjp0LG9wdGltdW1EaXN0YW5jZTpzfTplfSx7b3B0aW11bURpc3RhbmNlOmk/MS8wOi0xLzAsb3B0aW11bUNvcm5lcjpudWxsfSkub3B0aW11bUNvcm5lcn0sa3I9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT0wLG89MDtzd2l0Y2goZS5zaXplKXtjYXNlIDA6ZS5zaGFwZT09PTA/YT1vPU1hdGgubWluKE1hdGguYWJzKHQpLE1hdGguYWJzKHQtciksTWF0aC5hYnMobiksTWF0aC5hYnMobi1pKSk6ZS5zaGFwZT09PTEmJihhPU1hdGgubWluKE1hdGguYWJzKHQpLE1hdGguYWJzKHQtcikpLG89TWF0aC5taW4oTWF0aC5hYnMobiksTWF0aC5hYnMobi1pKSkpO2JyZWFrO2Nhc2UgMjppZihlLnNoYXBlPT09MClhPW89TWF0aC5taW4oRHIodCxuKSxEcih0LG4taSksRHIodC1yLG4pLERyKHQtcixuLWkpKTtlbHNlIGlmKGUuc2hhcGU9PT0xKXt2YXIgcz1NYXRoLm1pbihNYXRoLmFicyhuKSxNYXRoLmFicyhuLWkpKS9NYXRoLm1pbihNYXRoLmFicyh0KSxNYXRoLmFicyh0LXIpKSxjPU9yKHIsaSx0LG4sITApLGw9Y1swXSx1PWNbMV07YT1EcihsLXQsKHUtbikvcyksbz1zKmF9YnJlYWs7Y2FzZSAxOmUuc2hhcGU9PT0wP2E9bz1NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyh0LXIpLE1hdGguYWJzKG4pLE1hdGguYWJzKG4taSkpOmUuc2hhcGU9PT0xJiYoYT1NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyh0LXIpKSxvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKG4taSkpKTticmVhaztjYXNlIDM6aWYoZS5zaGFwZT09PTApYT1vPU1hdGgubWF4KERyKHQsbiksRHIodCxuLWkpLERyKHQtcixuKSxEcih0LXIsbi1pKSk7ZWxzZSBpZihlLnNoYXBlPT09MSl7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMobi1pKSkvTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnModC1yKSksZD1PcihyLGksdCxuLCExKSxsPWRbMF0sdT1kWzFdO2E9RHIobC10LCh1LW4pL3MpLG89cyphfWJyZWFrfXJldHVybiBBcnJheS5pc0FycmF5KGUuc2l6ZSkmJihhPXEoZS5zaXplWzBdLHIpLG89ZS5zaXplLmxlbmd0aD09PTI/cShlLnNpemVbMV0saSk6YSksW2Esb119LEFyPWZ1bmN0aW9uKGUsdCl7dmFyIG49bHIoMTgwKSxyPVtdO3JldHVybiBxbih0KS5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7aWYoaT09PTApe3ZhciBhPXRbMF07aWYoYS50eXBlPT09MjAmJmEudmFsdWU9PT1gdG9gKXtuPWNyKHQpO3JldHVybn1lbHNlIGlmKHNyKGEpKXtuPW9yLnBhcnNlKGUsYSk7cmV0dXJufX12YXIgbz1DcihlLHQpO3IucHVzaChvKX0pLHthbmdsZTpuLHN0b3BzOnIsdHlwZToxfX0sanI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1scigxODApLHI9W107cmV0dXJuIHFuKHQpLmZvckVhY2goZnVuY3Rpb24odCxpKXtpZihpPT09MCl7dmFyIGE9dFswXTtpZihhLnR5cGU9PT0yMCYmW2B0b3BgLGBsZWZ0YCxgcmlnaHRgLGBib3R0b21gXS5pbmRleE9mKGEudmFsdWUpIT09LTEpe249Y3IodCk7cmV0dXJufWVsc2UgaWYoc3IoYSkpe249KG9yLnBhcnNlKGUsYSkrbHIoMjcwKSklbHIoMzYwKTtyZXR1cm59fXZhciBvPUNyKGUsdCk7ci5wdXNoKG8pfSkse2FuZ2xlOm4sc3RvcHM6cix0eXBlOjF9fSxNcj1mdW5jdGlvbihlLHQpe3ZhciBuPWxyKDE4MCkscj1bXSxpPTE7cmV0dXJuIHFuKHQpLmZvckVhY2goZnVuY3Rpb24odCxuKXt2YXIgYT10WzBdO2lmKG49PT0wKXtpZihIbihhKSYmYS52YWx1ZT09PWBsaW5lYXJgKXtpPTE7cmV0dXJufWVsc2UgaWYoSG4oYSkmJmEudmFsdWU9PT1gcmFkaWFsYCl7aT0yO3JldHVybn19aWYoYS50eXBlPT09MTgpe2lmKGEubmFtZT09PWBmcm9tYCl7dmFyIG89dXIucGFyc2UoZSxhLnZhbHVlc1swXSk7ci5wdXNoKHtzdG9wOlFuLGNvbG9yOm99KX1lbHNlIGlmKGEubmFtZT09PWB0b2Ape3ZhciBvPXVyLnBhcnNlKGUsYS52YWx1ZXNbMF0pO3IucHVzaCh7c3RvcDplcixjb2xvcjpvfSl9ZWxzZSBpZihhLm5hbWU9PT1gY29sb3Itc3RvcGApe3ZhciBzPWEudmFsdWVzLmZpbHRlcihLbik7aWYocy5sZW5ndGg9PT0yKXt2YXIgbz11ci5wYXJzZShlLHNbMV0pLGM9c1swXTtWbihjKSYmci5wdXNoKHtzdG9wOnt0eXBlOjE2LG51bWJlcjpjLm51bWJlcioxMDAsZmxhZ3M6Yy5mbGFnc30sY29sb3I6b30pfX19fSksaT09PTE/e2FuZ2xlOihuK2xyKDE4MCkpJWxyKDM2MCksc3RvcHM6cix0eXBlOml9OntzaXplOjMsc2hhcGU6MCxzdG9wczpyLHBvc2l0aW9uOltdLHR5cGU6aX19LE5yPWBjbG9zZXN0LXNpZGVgLFByPWBmYXJ0aGVzdC1zaWRlYCxGcj1gY2xvc2VzdC1jb3JuZXJgLElyPWBmYXJ0aGVzdC1jb3JuZXJgLExyPWBjaXJjbGVgLFJyPWBlbGxpcHNlYCx6cj1gY292ZXJgLEJyPWBjb250YWluYCxWcj1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0zLGk9W10sYT1bXTtyZXR1cm4gcW4odCkuZm9yRWFjaChmdW5jdGlvbih0LG8pe3ZhciBzPSEwO2lmKG89PT0wKXt2YXIgYz0hMTtzPXQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7aWYoYylpZihIbih0KSlzd2l0Y2godC52YWx1ZSl7Y2FzZWBjZW50ZXJgOnJldHVybiBhLnB1c2goJG4pLGU7Y2FzZWB0b3BgOmNhc2VgbGVmdGA6cmV0dXJuIGEucHVzaChRbiksZTtjYXNlYHJpZ2h0YDpjYXNlYGJvdHRvbWA6cmV0dXJuIGEucHVzaChlciksZX1lbHNlIChYbih0KXx8WW4odCkpJiZhLnB1c2godCk7ZWxzZSBpZihIbih0KSlzd2l0Y2godC52YWx1ZSl7Y2FzZSBMcjpyZXR1cm4gbj0wLCExO2Nhc2UgUnI6cmV0dXJuIG49MSwhMTtjYXNlYGF0YDpyZXR1cm4gYz0hMCwhMTtjYXNlIE5yOnJldHVybiByPTAsITE7Y2FzZSB6cjpjYXNlIFByOnJldHVybiByPTEsITE7Y2FzZSBCcjpjYXNlIEZyOnJldHVybiByPTIsITE7Y2FzZSBJcjpyZXR1cm4gcj0zLCExfWVsc2UgaWYoWW4odCl8fFhuKHQpKXJldHVybiBBcnJheS5pc0FycmF5KHIpfHwocj1bXSksci5wdXNoKHQpLCExO3JldHVybiBlfSxzKX1pZihzKXt2YXIgbD1DcihlLHQpO2kucHVzaChsKX19KSx7c2l6ZTpyLHNoYXBlOm4sc3RvcHM6aSxwb3NpdGlvbjphLHR5cGU6Mn19LEhyPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPTMsaT1bXSxhPVtdO3JldHVybiBxbih0KS5mb3JFYWNoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9ITA7aWYobz09PTA/cz10LnJlZHVjZShmdW5jdGlvbihlLHQpe2lmKEhuKHQpKXN3aXRjaCh0LnZhbHVlKXtjYXNlYGNlbnRlcmA6cmV0dXJuIGEucHVzaCgkbiksITE7Y2FzZWB0b3BgOmNhc2VgbGVmdGA6cmV0dXJuIGEucHVzaChRbiksITE7Y2FzZWByaWdodGA6Y2FzZWBib3R0b21gOnJldHVybiBhLnB1c2goZXIpLCExfWVsc2UgaWYoWG4odCl8fFluKHQpKXJldHVybiBhLnB1c2godCksITE7cmV0dXJuIGV9LHMpOm89PT0xJiYocz10LnJlZHVjZShmdW5jdGlvbihlLHQpe2lmKEhuKHQpKXN3aXRjaCh0LnZhbHVlKXtjYXNlIExyOnJldHVybiBuPTAsITE7Y2FzZSBScjpyZXR1cm4gbj0xLCExO2Nhc2UgQnI6Y2FzZSBOcjpyZXR1cm4gcj0wLCExO2Nhc2UgUHI6cmV0dXJuIHI9MSwhMTtjYXNlIEZyOnJldHVybiByPTIsITE7Y2FzZSB6cjpjYXNlIElyOnJldHVybiByPTMsITF9ZWxzZSBpZihZbih0KXx8WG4odCkpcmV0dXJuIEFycmF5LmlzQXJyYXkocil8fChyPVtdKSxyLnB1c2godCksITE7cmV0dXJuIGV9LHMpKSxzKXt2YXIgYz1DcihlLHQpO2kucHVzaChjKX19KSx7c2l6ZTpyLHNoYXBlOm4sc3RvcHM6aSxwb3NpdGlvbjphLHR5cGU6Mn19LFVyPWZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0xfSxXcj1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09Mn0sR3I9e25hbWU6YGltYWdlYCxwYXJzZTpmdW5jdGlvbihlLHQpe2lmKHQudHlwZT09PTIyKXt2YXIgbj17dXJsOnQudmFsdWUsdHlwZTowfTtyZXR1cm4gZS5jYWNoZS5hZGRJbWFnZSh0LnZhbHVlKSxufWlmKHQudHlwZT09PTE4KXt2YXIgcj1xclt0Lm5hbWVdO2lmKHI9PT12b2lkIDApdGhyb3cgRXJyb3IoYEF0dGVtcHRpbmcgdG8gcGFyc2UgYW4gdW5zdXBwb3J0ZWQgaW1hZ2UgZnVuY3Rpb24gImArdC5uYW1lK2AiYCk7cmV0dXJuIHIoZSx0LnZhbHVlcyl9dGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIGltYWdlIHR5cGUgYCt0LnR5cGUpfX07ZnVuY3Rpb24gS3IoZSl7cmV0dXJuIShlLnR5cGU9PT0yMCYmZS52YWx1ZT09PWBub25lYCkmJihlLnR5cGUhPT0xOHx8ISFxcltlLm5hbWVdKX12YXIgcXI9eyJsaW5lYXItZ3JhZGllbnQiOkFyLCItbW96LWxpbmVhci1ncmFkaWVudCI6anIsIi1tcy1saW5lYXItZ3JhZGllbnQiOmpyLCItby1saW5lYXItZ3JhZGllbnQiOmpyLCItd2Via2l0LWxpbmVhci1ncmFkaWVudCI6anIsInJhZGlhbC1ncmFkaWVudCI6VnIsIi1tb3otcmFkaWFsLWdyYWRpZW50IjpIciwiLW1zLXJhZGlhbC1ncmFkaWVudCI6SHIsIi1vLXJhZGlhbC1ncmFkaWVudCI6SHIsIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50IjpIciwiLXdlYmtpdC1ncmFkaWVudCI6TXJ9LEpyPXtuYW1lOmBiYWNrZ3JvdW5kLWltYWdlYCxpbml0aWFsVmFsdWU6YG5vbmVgLHR5cGU6MSxwcmVmaXg6ITEscGFyc2U6ZnVuY3Rpb24oZSx0KXtpZih0Lmxlbmd0aD09PTApcmV0dXJuW107dmFyIG49dFswXTtyZXR1cm4gbi50eXBlPT09MjAmJm4udmFsdWU9PT1gbm9uZWA/W106dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIEtuKGUpJiZLcihlKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gR3IucGFyc2UoZSx0KX0pfX0sWXI9e25hbWU6YGJhY2tncm91bmQtb3JpZ2luYCxpbml0aWFsVmFsdWU6YGJvcmRlci1ib3hgLHByZWZpeDohMSx0eXBlOjEscGFyc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24oZSl7aWYoSG4oZSkpc3dpdGNoKGUudmFsdWUpe2Nhc2VgcGFkZGluZy1ib3hgOnJldHVybiAxO2Nhc2VgY29udGVudC1ib3hgOnJldHVybiAyfXJldHVybiAwfSl9fSxYcj17bmFtZTpgYmFja2dyb3VuZC1wb3NpdGlvbmAsaW5pdGlhbFZhbHVlOmAwJSAwJWAsdHlwZToxLHByZWZpeDohMSxwYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiBxbih0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKFhuKX0pLm1hcChabil9fSxacj17bmFtZTpgYmFja2dyb3VuZC1yZXBlYXRgLGluaXRpYWxWYWx1ZTpgcmVwZWF0YCxwcmVmaXg6ITEsdHlwZToxLHBhcnNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFuKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoSG4pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pLmpvaW4oYCBgKX0pLm1hcChRcil9fSxRcj1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZWBuby1yZXBlYXRgOnJldHVybiAxO2Nhc2VgcmVwZWF0LXhgOmNhc2VgcmVwZWF0IG5vLXJlcGVhdGA6cmV0dXJuIDI7Y2FzZWByZXBlYXQteWA6Y2FzZWBuby1yZXBlYXQgcmVwZWF0YDpyZXR1cm4gMztkZWZhdWx0OnJldHVybiAwfX0sJHI7KGZ1bmN0aW9uKGUpe2UuQVVUTz1gYXV0b2AsZS5DT05UQUlOPWBjb250YWluYCxlLkNPVkVSPWBjb3ZlcmB9KSgkcnx8PXt9KTt2YXIgZWk9e25hbWU6YGJhY2tncm91bmQtc2l6ZWAsaW5pdGlhbFZhbHVlOmAwYCxwcmVmaXg6ITEsdHlwZToxLHBhcnNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFuKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIodGkpfSl9fSx0aT1mdW5jdGlvbihlKXtyZXR1cm4gSG4oZSl8fFhuKGUpfSxuaT1mdW5jdGlvbihlKXtyZXR1cm57bmFtZTpgYm9yZGVyLWArZStgLWNvbG9yYCxpbml0aWFsVmFsdWU6YHRyYW5zcGFyZW50YCxwcmVmaXg6ITEsdHlwZTozLGZvcm1hdDpgY29sb3JgfX0scmk9bmkoYHRvcGApLGlpPW5pKGByaWdodGApLGFpPW5pKGBib3R0b21gKSxvaT1uaShgbGVmdGApLHNpPWZ1bmN0aW9uKGUpe3JldHVybntuYW1lOmBib3JkZXItcmFkaXVzLWArZSxpbml0aWFsVmFsdWU6YDAgMGAscHJlZml4OiExLHR5cGU6MSxwYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiBabih0LmZpbHRlcihYbikpfX19LGNpPXNpKGB0b3AtbGVmdGApLGxpPXNpKGB0b3AtcmlnaHRgKSx1aT1zaShgYm90dG9tLXJpZ2h0YCksZGk9c2koYGJvdHRvbS1sZWZ0YCksZmk9ZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6YGJvcmRlci1gK2UrYC1zdHlsZWAsaW5pdGlhbFZhbHVlOmBzb2xpZGAscHJlZml4OiExLHR5cGU6MixwYXJzZTpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlYG5vbmVgOnJldHVybiAwO2Nhc2VgZGFzaGVkYDpyZXR1cm4gMjtjYXNlYGRvdHRlZGA6cmV0dXJuIDM7Y2FzZWBkb3VibGVgOnJldHVybiA0fXJldHVybiAxfX19LHBpPWZpKGB0b3BgKSxtaT1maShgcmlnaHRgKSxoaT1maShgYm90dG9tYCksZ2k9ZmkoYGxlZnRgKSxfaT1mdW5jdGlvbihlKXtyZXR1cm57bmFtZTpgYm9yZGVyLWArZStgLXdpZHRoYCxpbml0aWFsVmFsdWU6YDBgLHR5cGU6MCxwcmVmaXg6ITEscGFyc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQm4odCk/dC5udW1iZXI6MH19fSx2aT1faShgdG9wYCkseWk9X2koYHJpZ2h0YCksYmk9X2koYGJvdHRvbWApLHhpPV9pKGBsZWZ0YCksU2k9e25hbWU6YGNvbG9yYCxpbml0aWFsVmFsdWU6YHRyYW5zcGFyZW50YCxwcmVmaXg6ITEsdHlwZTozLGZvcm1hdDpgY29sb3JgfSxDaT17bmFtZTpgZGlyZWN0aW9uYCxpbml0aWFsVmFsdWU6YGx0cmAscHJlZml4OiExLHR5cGU6MixwYXJzZTpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlYHJ0bGA6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMH19fSx3aT17bmFtZTpgZGlzcGxheWAsaW5pdGlhbFZhbHVlOmBpbmxpbmUtYmxvY2tgLHByZWZpeDohMSx0eXBlOjEscGFyc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5maWx0ZXIoSG4pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlfFRpKHQudmFsdWUpfSwwKX19LFRpPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlYGJsb2NrYDpjYXNlYC13ZWJraXQtYm94YDpyZXR1cm4gMjtjYXNlYGlubGluZWA6cmV0dXJuIDQ7Y2FzZWBydW4taW5gOnJldHVybiA4O2Nhc2VgZmxvd2A6cmV0dXJuIDE2O2Nhc2VgZmxvdy1yb290YDpyZXR1cm4gMzI7Y2FzZWB0YWJsZWA6cmV0dXJuIDY0O2Nhc2VgZmxleGA6Y2FzZWAtd2Via2l0LWZsZXhgOnJldHVybiAxMjg7Y2FzZWBncmlkYDpjYXNlYC1tcy1ncmlkYDpyZXR1cm4gMjU2O2Nhc2VgcnVieWA6cmV0dXJuIDUxMjtjYXNlYHN1YmdyaWRgOnJldHVybiAxMDI0O2Nhc2VgbGlzdC1pdGVtYDpyZXR1cm4gMjA0ODtjYXNlYHRhYmxlLXJvdy1ncm91cGA6cmV0dXJuIDQwOTY7Y2FzZWB0YWJsZS1oZWFkZXItZ3JvdXBgOnJldHVybiA4MTkyO2Nhc2VgdGFibGUtZm9vdGVyLWdyb3VwYDpyZXR1cm4gMTYzODQ7Y2FzZWB0YWJsZS1yb3dgOnJldHVybiAzMjc2ODtjYXNlYHRhYmxlLWNlbGxgOnJldHVybiA2NTUzNjtjYXNlYHRhYmxlLWNvbHVtbi1ncm91cGA6cmV0dXJuIDEzMTA3MjtjYXNlYHRhYmxlLWNvbHVtbmA6cmV0dXJuIDI2MjE0NDtjYXNlYHRhYmxlLWNhcHRpb25gOnJldHVybiA1MjQyODg7Y2FzZWBydWJ5LWJhc2VgOnJldHVybiAxMDQ4NTc2O2Nhc2VgcnVieS10ZXh0YDpyZXR1cm4gMjA5NzE1MjtjYXNlYHJ1YnktYmFzZS1jb250YWluZXJgOnJldHVybiA0MTk0MzA0O2Nhc2VgcnVieS10ZXh0LWNvbnRhaW5lcmA6cmV0dXJuIDgzODg2MDg7Y2FzZWBjb250ZW50c2A6cmV0dXJuIDE2Nzc3MjE2O2Nhc2VgaW5saW5lLWJsb2NrYDpyZXR1cm4gMzM1NTQ0MzI7Y2FzZWBpbmxpbmUtbGlzdC1pdGVtYDpyZXR1cm4gNjcxMDg4NjQ7Y2FzZWBpbmxpbmUtdGFibGVgOnJldHVybiAxMzQyMTc3Mjg7Y2FzZWBpbmxpbmUtZmxleGA6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlYGlubGluZS1ncmlkYDpyZXR1cm4gNTM2ODcwOTEyfXJldHVybiAwfSxFaT17bmFtZTpgZmxvYXRgLGluaXRpYWxWYWx1ZTpgbm9uZWAscHJlZml4OiExLHR5cGU6MixwYXJzZTpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlYGxlZnRgOnJldHVybiAxO2Nhc2VgcmlnaHRgOnJldHVybiAyO2Nhc2VgaW5saW5lLXN0YXJ0YDpyZXR1cm4gMztjYXNlYGlubGluZS1lbmRgOnJldHVybiA0fXJldHVybiAwfX0sRGk9e25hbWU6YGxldHRlci1zcGFjaW5nYCxpbml0aWFsVmFsdWU6YDBgLHByZWZpeDohMSx0eXBlOjAscGFyc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50eXBlPT09MjAmJnQudmFsdWU9PT1gbm9ybWFsYD8wOnQudHlwZT09PTE3fHx0LnR5cGU9PT0xNT90Lm51bWJlcjowfX0sT2k7KGZ1bmN0aW9uKGUpe2UuTk9STUFMPWBub3JtYWxgLGUuU1RSSUNUPWBzdHJpY3RgfSkoT2l8fD17fSk7dmFyIGtpPXtuYW1lOmBsaW5lLWJyZWFrYCxpbml0aWFsVmFsdWU6YG5vcm1hbGAscHJlZml4OiExLHR5cGU6MixwYXJzZTpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlYHN0cmljdGA6cmV0dXJuIE9pLlNUUklDVDtkZWZhdWx0OnJldHVybiBPaS5OT1JNQUx9fX0sQWk9e25hbWU6YGxpbmUtaGVpZ2h0YCxpbml0aWFsVmFsdWU6YG5vcm1hbGAscHJlZml4OiExLHR5cGU6NH0samk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSG4oZSkmJmUudmFsdWU9PT1gbm9ybWFsYD8xLjIqdDplLnR5cGU9PT0xNz90KmUubnVtYmVyOlhuKGUpP3EoZSx0KTp0fSxNaT17bmFtZTpgbGlzdC1zdHlsZS1pbWFnZWAsaW5pdGlhbFZhbHVlOmBub25lYCx0eXBlOjAscHJlZml4OiExLHBhcnNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudHlwZT09PTIwJiZ0LnZhbHVlPT09YG5vbmVgP251bGw6R3IucGFyc2UoZSx0KX19LE5pPXtuYW1lOmBsaXN0LXN0eWxlLXBvc2l0aW9uYCxpbml0aWFsVmFsdWU6YG91dHNpZGVgLHByZWZpeDohMSx0eXBlOjIscGFyc2U6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZWBpbnNpZGVgOnJldHVybiAwO2RlZmF1bHQ6cmV0dXJuIDF9fX0sUGk9e25hbWU6YGxpc3Qtc3R5bGUtdHlwZWAsaW5pdGlhbFZhbHVlOmBub25lYCxwcmVmaXg6ITEsdHlwZToyLHBhcnNlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VgZGlzY2A6cmV0dXJuIDA7Y2FzZWBjaXJjbGVgOnJldHVybiAxO2Nhc2Vgc3F1YXJlYDpyZXR1cm4gMjtjYXNlYGRlY2ltYWxgOnJldHVybiAzO2Nhc2VgY2prLWRlY2ltYWxgOnJldHVybiA0O2Nhc2VgZGVjaW1hbC1sZWFkaW5nLXplcm9gOnJldHVybiA1O2Nhc2VgbG93ZXItcm9tYW5gOnJldHVybiA2O2Nhc2VgdXBwZXItcm9tYW5gOnJldHVybiA3O2Nhc2VgbG93ZXItZ3JlZWtgOnJldHVybiA4O2Nhc2VgbG93ZXItYWxwaGFgOnJldHVybiA5O2Nhc2VgdXBwZXItYWxwaGFgOnJldHVybiAxMDtjYXNlYGFyYWJpYy1pbmRpY2A6cmV0dXJuIDExO2Nhc2VgYXJtZW5pYW5gOnJldHVybiAxMjtjYXNlYGJlbmdhbGlgOnJldHVybiAxMztjYXNlYGNhbWJvZGlhbmA6cmV0dXJuIDE0O2Nhc2VgY2prLWVhcnRobHktYnJhbmNoYDpyZXR1cm4gMTU7Y2FzZWBjamstaGVhdmVubHktc3RlbWA6cmV0dXJuIDE2O2Nhc2VgY2prLWlkZW9ncmFwaGljYDpyZXR1cm4gMTc7Y2FzZWBkZXZhbmFnYXJpYDpyZXR1cm4gMTg7Y2FzZWBldGhpb3BpYy1udW1lcmljYDpyZXR1cm4gMTk7Y2FzZWBnZW9yZ2lhbmA6cmV0dXJuIDIwO2Nhc2VgZ3VqYXJhdGlgOnJldHVybiAyMTtjYXNlYGd1cm11a2hpYDpyZXR1cm4gMjI7Y2FzZWBoZWJyZXdgOnJldHVybiAyMjtjYXNlYGhpcmFnYW5hYDpyZXR1cm4gMjM7Y2FzZWBoaXJhZ2FuYS1pcm9oYWA6cmV0dXJuIDI0O2Nhc2VgamFwYW5lc2UtZm9ybWFsYDpyZXR1cm4gMjU7Y2FzZWBqYXBhbmVzZS1pbmZvcm1hbGA6cmV0dXJuIDI2O2Nhc2Vga2FubmFkYWA6cmV0dXJuIDI3O2Nhc2Vga2F0YWthbmFgOnJldHVybiAyODtjYXNlYGthdGFrYW5hLWlyb2hhYDpyZXR1cm4gMjk7Y2FzZWBraG1lcmA6cmV0dXJuIDMwO2Nhc2Vga29yZWFuLWhhbmd1bC1mb3JtYWxgOnJldHVybiAzMTtjYXNlYGtvcmVhbi1oYW5qYS1mb3JtYWxgOnJldHVybiAzMjtjYXNlYGtvcmVhbi1oYW5qYS1pbmZvcm1hbGA6cmV0dXJuIDMzO2Nhc2VgbGFvYDpyZXR1cm4gMzQ7Y2FzZWBsb3dlci1hcm1lbmlhbmA6cmV0dXJuIDM1O2Nhc2VgbWFsYXlhbGFtYDpyZXR1cm4gMzY7Y2FzZWBtb25nb2xpYW5gOnJldHVybiAzNztjYXNlYG15YW5tYXJgOnJldHVybiAzODtjYXNlYG9yaXlhYDpyZXR1cm4gMzk7Y2FzZWBwZXJzaWFuYDpyZXR1cm4gNDA7Y2FzZWBzaW1wLWNoaW5lc2UtZm9ybWFsYDpyZXR1cm4gNDE7Y2FzZWBzaW1wLWNoaW5lc2UtaW5mb3JtYWxgOnJldHVybiA0MjtjYXNlYHRhbWlsYDpyZXR1cm4gNDM7Y2FzZWB0ZWx1Z3VgOnJldHVybiA0NDtjYXNlYHRoYWlgOnJldHVybiA0NTtjYXNlYHRpYmV0YW5gOnJldHVybiA0NjtjYXNlYHRyYWQtY2hpbmVzZS1mb3JtYWxgOnJldHVybiA0NztjYXNlYHRyYWQtY2hpbmVzZS1pbmZvcm1hbGA6cmV0dXJuIDQ4O2Nhc2VgdXBwZXItYXJtZW5pYW5gOnJldHVybiA0OTtjYXNlYGRpc2Nsb3N1cmUtb3BlbmA6cmV0dXJuIDUwO2Nhc2VgZGlzY2xvc3VyZS1jbG9zZWRgOnJldHVybiA1MTtkZWZhdWx0OnJldHVybi0xfX19LEZpPWZ1bmN0aW9uKGUpe3JldHVybntuYW1lOmBtYXJnaW4tYCtlLGluaXRpYWxWYWx1ZTpgMGAscHJlZml4OiExLHR5cGU6NH19LElpPUZpKGB0b3BgKSxMaT1GaShgcmlnaHRgKSxSaT1GaShgYm90dG9tYCksemk9RmkoYGxlZnRgKSxCaT17bmFtZTpgb3ZlcmZsb3dgLGluaXRpYWxWYWx1ZTpgdmlzaWJsZWAscHJlZml4OiExLHR5cGU6MSxwYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LmZpbHRlcihIbikubWFwKGZ1bmN0aW9uKGUpe3N3aXRjaChlLnZhbHVlKXtjYXNlYGhpZGRlbmA6cmV0dXJuIDE7Y2FzZWBzY3JvbGxgOnJldHVybiAyO2Nhc2VgY2xpcGA6cmV0dXJuIDM7Y2FzZWBhdXRvYDpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAwfX0pfX0sVmk9e25hbWU6YG92ZXJmbG93LXdyYXBgLGluaXRpYWxWYWx1ZTpgbm9ybWFsYCxwcmVmaXg6ITEsdHlwZToyLHBhcnNlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VgYnJlYWstd29yZGA6cmV0dXJuYGJyZWFrLXdvcmRgO2RlZmF1bHQ6cmV0dXJuYG5vcm1hbGB9fX0sSGk9ZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6YHBhZGRpbmctYCtlLGluaXRpYWxWYWx1ZTpgMGAscHJlZml4OiExLHR5cGU6Myxmb3JtYXQ6YGxlbmd0aC1wZXJjZW50YWdlYH19LFVpPUhpKGB0b3BgKSxXaT1IaShgcmlnaHRgKSxHaT1IaShgYm90dG9tYCksS2k9SGkoYGxlZnRgKSxxaT17bmFtZTpgdGV4dC1hbGlnbmAsaW5pdGlhbFZhbHVlOmBsZWZ0YCxwcmVmaXg6ITEsdHlwZToyLHBhcnNlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VgcmlnaHRgOnJldHVybiAyO2Nhc2VgY2VudGVyYDpjYXNlYGp1c3RpZnlgOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIDB9fX0sSmk9e25hbWU6YHBvc2l0aW9uYCxpbml0aWFsVmFsdWU6YHN0YXRpY2AscHJlZml4OiExLHR5cGU6MixwYXJzZTpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlYHJlbGF0aXZlYDpyZXR1cm4gMTtjYXNlYGFic29sdXRlYDpyZXR1cm4gMjtjYXNlYGZpeGVkYDpyZXR1cm4gMztjYXNlYHN0aWNreWA6cmV0dXJuIDR9cmV0dXJuIDB9fSxZaT17bmFtZTpgdGV4dC1zaGFkb3dgLGluaXRpYWxWYWx1ZTpgbm9uZWAsdHlwZToxLHByZWZpeDohMSxwYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiB0Lmxlbmd0aD09PTEmJlduKHRbMF0sYG5vbmVgKT9bXTpxbih0KS5tYXAoZnVuY3Rpb24odCl7Zm9yKHZhciBuPXtjb2xvcjpici5UUkFOU1BBUkVOVCxvZmZzZXRYOlFuLG9mZnNldFk6UW4sYmx1cjpRbn0scj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTtZbihhKT8ocj09PTA/bi5vZmZzZXRYPWE6cj09PTE/bi5vZmZzZXRZPWE6bi5ibHVyPWEscisrKTpuLmNvbG9yPXVyLnBhcnNlKGUsYSl9cmV0dXJuIG59KX19LFhpPXtuYW1lOmB0ZXh0LXRyYW5zZm9ybWAsaW5pdGlhbFZhbHVlOmBub25lYCxwcmVmaXg6ITEsdHlwZToyLHBhcnNlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VgdXBwZXJjYXNlYDpyZXR1cm4gMjtjYXNlYGxvd2VyY2FzZWA6cmV0dXJuIDE7Y2FzZWBjYXBpdGFsaXplYDpyZXR1cm4gM31yZXR1cm4gMH19LFppPXtuYW1lOmB0cmFuc2Zvcm1gLGluaXRpYWxWYWx1ZTpgbm9uZWAscHJlZml4OiEwLHR5cGU6MCxwYXJzZTpmdW5jdGlvbihlLHQpe2lmKHQudHlwZT09PTIwJiZ0LnZhbHVlPT09YG5vbmVgKXJldHVybiBudWxsO2lmKHQudHlwZT09PTE4KXt2YXIgbj1RaVt0Lm5hbWVdO2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoYEF0dGVtcHRpbmcgdG8gcGFyc2UgYW4gdW5zdXBwb3J0ZWQgdHJhbnNmb3JtIGZ1bmN0aW9uICJgK3QubmFtZStgImApO3JldHVybiBuKHQudmFsdWVzKX1yZXR1cm4gbnVsbH19LFFpPXttYXRyaXg6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PTE3fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm51bWJlcn0pO3JldHVybiB0Lmxlbmd0aD09PTY/dDpudWxsfSxtYXRyaXgzZDpmdW5jdGlvbihlKXt2YXIgdD1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09MTd9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubnVtYmVyfSksbj10WzBdLHI9dFsxXTt0WzJdLHRbM107dmFyIGk9dFs0XSxhPXRbNV07dFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXTt2YXIgbz10WzEyXSxzPXRbMTNdO3JldHVybiB0WzE0XSx0WzE1XSx0Lmxlbmd0aD09PTE2P1tuLHIsaSxhLG8sc106bnVsbH19LCRpPXt0eXBlOjE2LG51bWJlcjo1MCxmbGFnczpldH0sZWE9WyRpLCRpXSx0YT17bmFtZTpgdHJhbnNmb3JtLW9yaWdpbmAsaW5pdGlhbFZhbHVlOmA1MCUgNTAlYCxwcmVmaXg6ITAsdHlwZToxLHBhcnNlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5maWx0ZXIoWG4pO3JldHVybiBuLmxlbmd0aD09PTI/W25bMF0sblsxXV06ZWF9fSxuYT17bmFtZTpgdmlzaWJsZWAsaW5pdGlhbFZhbHVlOmBub25lYCxwcmVmaXg6ITEsdHlwZToyLHBhcnNlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VgaGlkZGVuYDpyZXR1cm4gMTtjYXNlYGNvbGxhcHNlYDpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX19LHJhOyhmdW5jdGlvbihlKXtlLk5PUk1BTD1gbm9ybWFsYCxlLkJSRUFLX0FMTD1gYnJlYWstYWxsYCxlLktFRVBfQUxMPWBrZWVwLWFsbGB9KShyYXx8PXt9KTtmb3IodmFyIGlhPXtuYW1lOmB3b3JkLWJyZWFrYCxpbml0aWFsVmFsdWU6YG5vcm1hbGAscHJlZml4OiExLHR5cGU6MixwYXJzZTpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlYGJyZWFrLWFsbGA6cmV0dXJuIHJhLkJSRUFLX0FMTDtjYXNlYGtlZXAtYWxsYDpyZXR1cm4gcmEuS0VFUF9BTEw7ZGVmYXVsdDpyZXR1cm4gcmEuTk9STUFMfX19LGFhPXtuYW1lOmB6LWluZGV4YCxpbml0aWFsVmFsdWU6YGF1dG9gLHByZWZpeDohMSx0eXBlOjAscGFyc2U6ZnVuY3Rpb24oZSx0KXtpZih0LnR5cGU9PT0yMClyZXR1cm57YXV0bzohMCxvcmRlcjowfTtpZihWbih0KSlyZXR1cm57YXV0bzohMSxvcmRlcjp0Lm51bWJlcn07dGhyb3cgRXJyb3IoYEludmFsaWQgei1pbmRleCBudW1iZXIgcGFyc2VkYCl9fSxvYT17bmFtZTpgdGltZWAscGFyc2U6ZnVuY3Rpb24oZSx0KXtpZih0LnR5cGU9PT0xNSlzd2l0Y2godC51bml0LnRvTG93ZXJDYXNlKCkpe2Nhc2Vgc2A6cmV0dXJuIDFlMyp0Lm51bWJlcjtjYXNlYG1zYDpyZXR1cm4gdC5udW1iZXJ9dGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIHRpbWUgdHlwZWApfX0sc2E9e25hbWU6YG9wYWNpdHlgLGluaXRpYWxWYWx1ZTpgMWAsdHlwZTowLHByZWZpeDohMSxwYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiBWbih0KT90Lm51bWJlcjoxfX0sY2E9e25hbWU6YHRleHQtZGVjb3JhdGlvbi1jb2xvcmAsaW5pdGlhbFZhbHVlOmB0cmFuc3BhcmVudGAscHJlZml4OiExLHR5cGU6Myxmb3JtYXQ6YGNvbG9yYH0sbGE9e25hbWU6YHRleHQtZGVjb3JhdGlvbi1saW5lYCxpbml0aWFsVmFsdWU6YG5vbmVgLHByZWZpeDohMSx0eXBlOjEscGFyc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5maWx0ZXIoSG4pLm1hcChmdW5jdGlvbihlKXtzd2l0Y2goZS52YWx1ZSl7Y2FzZWB1bmRlcmxpbmVgOnJldHVybiAxO2Nhc2Vgb3ZlcmxpbmVgOnJldHVybiAyO2Nhc2VgbGluZS10aHJvdWdoYDpyZXR1cm4gMztjYXNlYG5vbmVgOnJldHVybiA0fXJldHVybiAwfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09MH0pfX0sdWE9e25hbWU6YGZvbnQtZmFtaWx5YCxpbml0aWFsVmFsdWU6YGAscHJlZml4OiExLHR5cGU6MSxwYXJzZTpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihlKXtzd2l0Y2goZS50eXBlKXtjYXNlIDIwOmNhc2UgMDpuLnB1c2goZS52YWx1ZSk7YnJlYWs7Y2FzZSAxNzpuLnB1c2goZS5udW1iZXIudG9TdHJpbmcoKSk7YnJlYWs7Y2FzZSA0OnIucHVzaChuLmpvaW4oYCBgKSksbi5sZW5ndGg9MDticmVha319KSxuLmxlbmd0aCYmci5wdXNoKG4uam9pbihgIGApKSxyLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRleE9mKGAgYCk9PT0tMT9lOmAnYCtlK2AnYH0pfX0sZGE9e25hbWU6YGZvbnQtc2l6ZWAsaW5pdGlhbFZhbHVlOmAwYCxwcmVmaXg6ITEsdHlwZTozLGZvcm1hdDpgbGVuZ3RoYH0sZmE9e25hbWU6YGZvbnQtd2VpZ2h0YCxpbml0aWFsVmFsdWU6YG5vcm1hbGAsdHlwZTowLHByZWZpeDohMSxwYXJzZTpmdW5jdGlvbihlLHQpe2lmKFZuKHQpKXJldHVybiB0Lm51bWJlcjtpZihIbih0KSlzd2l0Y2godC52YWx1ZSl7Y2FzZWBib2xkYDpyZXR1cm4gNzAwO2RlZmF1bHQ6cmV0dXJuIDQwMH1yZXR1cm4gNDAwfX0scGE9e25hbWU6YGZvbnQtdmFyaWFudGAsaW5pdGlhbFZhbHVlOmBub25lYCx0eXBlOjEscHJlZml4OiExLHBhcnNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZmlsdGVyKEhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KX19LG1hPXtuYW1lOmBmb250LXN0eWxlYCxpbml0aWFsVmFsdWU6YG5vcm1hbGAscHJlZml4OiExLHR5cGU6MixwYXJzZTpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlYG9ibGlxdWVgOnJldHVybmBvYmxpcXVlYDtjYXNlYGl0YWxpY2A6cmV0dXJuYGl0YWxpY2A7ZGVmYXVsdDpyZXR1cm5gbm9ybWFsYH19fSxoYT1mdW5jdGlvbihlLHQpe3JldHVybihlJnQpIT09MH0sZ2E9e25hbWU6YGNvbnRlbnRgLGluaXRpYWxWYWx1ZTpgbm9uZWAsdHlwZToxLHByZWZpeDohMSxwYXJzZTpmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgbj10WzBdO3JldHVybiBuLnR5cGU9PT0yMCYmbi52YWx1ZT09PWBub25lYD9bXTp0fX0sX2E9e25hbWU6YGNvdW50ZXItaW5jcmVtZW50YCxpbml0aWFsVmFsdWU6YG5vbmVgLHByZWZpeDohMCx0eXBlOjEscGFyc2U6ZnVuY3Rpb24oZSx0KXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIG51bGw7dmFyIG49dFswXTtpZihuLnR5cGU9PT0yMCYmbi52YWx1ZT09PWBub25lYClyZXR1cm4gbnVsbDtmb3IodmFyIHI9W10saT10LmZpbHRlcihHbiksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9aVthKzFdO2lmKG8udHlwZT09PTIwKXt2YXIgYz1zJiZWbihzKT9zLm51bWJlcjoxO3IucHVzaCh7Y291bnRlcjpvLnZhbHVlLGluY3JlbWVudDpjfSl9fXJldHVybiByfX0sdmE9e25hbWU6YGNvdW50ZXItcmVzZXRgLGluaXRpYWxWYWx1ZTpgbm9uZWAscHJlZml4OiEwLHR5cGU6MSxwYXJzZTpmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtmb3IodmFyIG49W10scj10LmZpbHRlcihHbiksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89cltpKzFdO2lmKEhuKGEpJiZhLnZhbHVlIT09YG5vbmVgKXt2YXIgcz1vJiZWbihvKT9vLm51bWJlcjowO24ucHVzaCh7Y291bnRlcjphLnZhbHVlLHJlc2V0OnN9KX19cmV0dXJuIG59fSx5YT17bmFtZTpgZHVyYXRpb25gLGluaXRpYWxWYWx1ZTpgMHNgLHByZWZpeDohMSx0eXBlOjEscGFyc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5maWx0ZXIoQm4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb2EucGFyc2UoZSx0KX0pfX0sYmE9e25hbWU6YHF1b3Rlc2AsaW5pdGlhbFZhbHVlOmBub25lYCxwcmVmaXg6ITAsdHlwZToxLHBhcnNlOmZ1bmN0aW9uKGUsdCl7aWYodC5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciBuPXRbMF07aWYobi50eXBlPT09MjAmJm4udmFsdWU9PT1gbm9uZWApcmV0dXJuIG51bGw7dmFyIHI9W10saT10LmZpbHRlcihVbik7aWYoaS5sZW5ndGglMiE9MClyZXR1cm4gbnVsbDtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErPTIpe3ZhciBvPWlbYV0udmFsdWUscz1pW2ErMV0udmFsdWU7ci5wdXNoKHtvcGVuOm8sY2xvc2U6c30pfXJldHVybiByfX0seGE9ZnVuY3Rpb24oZSx0LG4pe2lmKCFlKXJldHVybmBgO3ZhciByPWVbTWF0aC5taW4odCxlLmxlbmd0aC0xKV07cmV0dXJuIHI/bj9yLm9wZW46ci5jbG9zZTpgYH0sU2E9e25hbWU6YGJveC1zaGFkb3dgLGluaXRpYWxWYWx1ZTpgbm9uZWAsdHlwZToxLHByZWZpeDohMSxwYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiB0Lmxlbmd0aD09PTEmJlduKHRbMF0sYG5vbmVgKT9bXTpxbih0KS5tYXAoZnVuY3Rpb24odCl7Zm9yKHZhciBuPXtjb2xvcjoyNTUsb2Zmc2V0WDpRbixvZmZzZXRZOlFuLGJsdXI6UW4sc3ByZWFkOlFuLGluc2V0OiExfSxyPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO1duKGEsYGluc2V0YCk/bi5pbnNldD0hMDpZbihhKT8ocj09PTA/bi5vZmZzZXRYPWE6cj09PTE/bi5vZmZzZXRZPWE6cj09PTI/bi5ibHVyPWE6bi5zcHJlYWQ9YSxyKyspOm4uY29sb3I9dXIucGFyc2UoZSxhKX1yZXR1cm4gbn0pfX0sQ2E9e25hbWU6YHBhaW50LW9yZGVyYCxpbml0aWFsVmFsdWU6YG5vcm1hbGAscHJlZml4OiExLHR5cGU6MSxwYXJzZTpmdW5jdGlvbihlLHQpe3ZhciBuPVswLDEsMl0scj1bXTtyZXR1cm4gdC5maWx0ZXIoSG4pLmZvckVhY2goZnVuY3Rpb24oZSl7c3dpdGNoKGUudmFsdWUpe2Nhc2Vgc3Ryb2tlYDpyLnB1c2goMSk7YnJlYWs7Y2FzZWBmaWxsYDpyLnB1c2goMCk7YnJlYWs7Y2FzZWBtYXJrZXJzYDpyLnB1c2goMik7YnJlYWt9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IuaW5kZXhPZihlKT09PS0xJiZyLnB1c2goZSl9KSxyfX0sd2E9e25hbWU6YC13ZWJraXQtdGV4dC1zdHJva2UtY29sb3JgLGluaXRpYWxWYWx1ZTpgY3VycmVudGNvbG9yYCxwcmVmaXg6ITEsdHlwZTozLGZvcm1hdDpgY29sb3JgfSxUYT17bmFtZTpgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aGAsaW5pdGlhbFZhbHVlOmAwYCx0eXBlOjAscHJlZml4OiExLHBhcnNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJuKHQpP3QubnVtYmVyOjB9fSxFYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmFuaW1hdGlvbkR1cmF0aW9uPUooZSx5YSx0LmFuaW1hdGlvbkR1cmF0aW9uKSx0aGlzLmJhY2tncm91bmRDbGlwPUooZSx4cix0LmJhY2tncm91bmRDbGlwKSx0aGlzLmJhY2tncm91bmRDb2xvcj1KKGUsU3IsdC5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuYmFja2dyb3VuZEltYWdlPUooZSxKcix0LmJhY2tncm91bmRJbWFnZSksdGhpcy5iYWNrZ3JvdW5kT3JpZ2luPUooZSxZcix0LmJhY2tncm91bmRPcmlnaW4pLHRoaXMuYmFja2dyb3VuZFBvc2l0aW9uPUooZSxYcix0LmJhY2tncm91bmRQb3NpdGlvbiksdGhpcy5iYWNrZ3JvdW5kUmVwZWF0PUooZSxacix0LmJhY2tncm91bmRSZXBlYXQpLHRoaXMuYmFja2dyb3VuZFNpemU9SihlLGVpLHQuYmFja2dyb3VuZFNpemUpLHRoaXMuYm9yZGVyVG9wQ29sb3I9SihlLHJpLHQuYm9yZGVyVG9wQ29sb3IpLHRoaXMuYm9yZGVyUmlnaHRDb2xvcj1KKGUsaWksdC5ib3JkZXJSaWdodENvbG9yKSx0aGlzLmJvcmRlckJvdHRvbUNvbG9yPUooZSxhaSx0LmJvcmRlckJvdHRvbUNvbG9yKSx0aGlzLmJvcmRlckxlZnRDb2xvcj1KKGUsb2ksdC5ib3JkZXJMZWZ0Q29sb3IpLHRoaXMuYm9yZGVyVG9wTGVmdFJhZGl1cz1KKGUsY2ksdC5ib3JkZXJUb3BMZWZ0UmFkaXVzKSx0aGlzLmJvcmRlclRvcFJpZ2h0UmFkaXVzPUooZSxsaSx0LmJvcmRlclRvcFJpZ2h0UmFkaXVzKSx0aGlzLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzPUooZSx1aSx0LmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKSx0aGlzLmJvcmRlckJvdHRvbUxlZnRSYWRpdXM9SihlLGRpLHQuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyksdGhpcy5ib3JkZXJUb3BTdHlsZT1KKGUscGksdC5ib3JkZXJUb3BTdHlsZSksdGhpcy5ib3JkZXJSaWdodFN0eWxlPUooZSxtaSx0LmJvcmRlclJpZ2h0U3R5bGUpLHRoaXMuYm9yZGVyQm90dG9tU3R5bGU9SihlLGhpLHQuYm9yZGVyQm90dG9tU3R5bGUpLHRoaXMuYm9yZGVyTGVmdFN0eWxlPUooZSxnaSx0LmJvcmRlckxlZnRTdHlsZSksdGhpcy5ib3JkZXJUb3BXaWR0aD1KKGUsdmksdC5ib3JkZXJUb3BXaWR0aCksdGhpcy5ib3JkZXJSaWdodFdpZHRoPUooZSx5aSx0LmJvcmRlclJpZ2h0V2lkdGgpLHRoaXMuYm9yZGVyQm90dG9tV2lkdGg9SihlLGJpLHQuYm9yZGVyQm90dG9tV2lkdGgpLHRoaXMuYm9yZGVyTGVmdFdpZHRoPUooZSx4aSx0LmJvcmRlckxlZnRXaWR0aCksdGhpcy5ib3hTaGFkb3c9SihlLFNhLHQuYm94U2hhZG93KSx0aGlzLmNvbG9yPUooZSxTaSx0LmNvbG9yKSx0aGlzLmRpcmVjdGlvbj1KKGUsQ2ksdC5kaXJlY3Rpb24pLHRoaXMuZGlzcGxheT1KKGUsd2ksdC5kaXNwbGF5KSx0aGlzLmZsb2F0PUooZSxFaSx0LmNzc0Zsb2F0KSx0aGlzLmZvbnRGYW1pbHk9SihlLHVhLHQuZm9udEZhbWlseSksdGhpcy5mb250U2l6ZT1KKGUsZGEsdC5mb250U2l6ZSksdGhpcy5mb250U3R5bGU9SihlLG1hLHQuZm9udFN0eWxlKSx0aGlzLmZvbnRWYXJpYW50PUooZSxwYSx0LmZvbnRWYXJpYW50KSx0aGlzLmZvbnRXZWlnaHQ9SihlLGZhLHQuZm9udFdlaWdodCksdGhpcy5sZXR0ZXJTcGFjaW5nPUooZSxEaSx0LmxldHRlclNwYWNpbmcpLHRoaXMubGluZUJyZWFrPUooZSxraSx0LmxpbmVCcmVhayksdGhpcy5saW5lSGVpZ2h0PUooZSxBaSx0LmxpbmVIZWlnaHQpLHRoaXMubGlzdFN0eWxlSW1hZ2U9SihlLE1pLHQubGlzdFN0eWxlSW1hZ2UpLHRoaXMubGlzdFN0eWxlUG9zaXRpb249SihlLE5pLHQubGlzdFN0eWxlUG9zaXRpb24pLHRoaXMubGlzdFN0eWxlVHlwZT1KKGUsUGksdC5saXN0U3R5bGVUeXBlKSx0aGlzLm1hcmdpblRvcD1KKGUsSWksdC5tYXJnaW5Ub3ApLHRoaXMubWFyZ2luUmlnaHQ9SihlLExpLHQubWFyZ2luUmlnaHQpLHRoaXMubWFyZ2luQm90dG9tPUooZSxSaSx0Lm1hcmdpbkJvdHRvbSksdGhpcy5tYXJnaW5MZWZ0PUooZSx6aSx0Lm1hcmdpbkxlZnQpLHRoaXMub3BhY2l0eT1KKGUsc2EsdC5vcGFjaXR5KTt2YXIgbj1KKGUsQmksdC5vdmVyZmxvdyk7dGhpcy5vdmVyZmxvd1g9blswXSx0aGlzLm92ZXJmbG93WT1uWysobi5sZW5ndGg+MSldLHRoaXMub3ZlcmZsb3dXcmFwPUooZSxWaSx0Lm92ZXJmbG93V3JhcCksdGhpcy5wYWRkaW5nVG9wPUooZSxVaSx0LnBhZGRpbmdUb3ApLHRoaXMucGFkZGluZ1JpZ2h0PUooZSxXaSx0LnBhZGRpbmdSaWdodCksdGhpcy5wYWRkaW5nQm90dG9tPUooZSxHaSx0LnBhZGRpbmdCb3R0b20pLHRoaXMucGFkZGluZ0xlZnQ9SihlLEtpLHQucGFkZGluZ0xlZnQpLHRoaXMucGFpbnRPcmRlcj1KKGUsQ2EsdC5wYWludE9yZGVyKSx0aGlzLnBvc2l0aW9uPUooZSxKaSx0LnBvc2l0aW9uKSx0aGlzLnRleHRBbGlnbj1KKGUscWksdC50ZXh0QWxpZ24pLHRoaXMudGV4dERlY29yYXRpb25Db2xvcj1KKGUsY2EsdC50ZXh0RGVjb3JhdGlvbkNvbG9yPz90LmNvbG9yKSx0aGlzLnRleHREZWNvcmF0aW9uTGluZT1KKGUsbGEsdC50ZXh0RGVjb3JhdGlvbkxpbmU/P3QudGV4dERlY29yYXRpb24pLHRoaXMudGV4dFNoYWRvdz1KKGUsWWksdC50ZXh0U2hhZG93KSx0aGlzLnRleHRUcmFuc2Zvcm09SihlLFhpLHQudGV4dFRyYW5zZm9ybSksdGhpcy50cmFuc2Zvcm09SihlLFppLHQudHJhbnNmb3JtKSx0aGlzLnRyYW5zZm9ybU9yaWdpbj1KKGUsdGEsdC50cmFuc2Zvcm1PcmlnaW4pLHRoaXMudmlzaWJpbGl0eT1KKGUsbmEsdC52aXNpYmlsaXR5KSx0aGlzLndlYmtpdFRleHRTdHJva2VDb2xvcj1KKGUsd2EsdC53ZWJraXRUZXh0U3Ryb2tlQ29sb3IpLHRoaXMud2Via2l0VGV4dFN0cm9rZVdpZHRoPUooZSxUYSx0LndlYmtpdFRleHRTdHJva2VXaWR0aCksdGhpcy53b3JkQnJlYWs9SihlLGlhLHQud29yZEJyZWFrKSx0aGlzLnpJbmRleD1KKGUsYWEsdC56SW5kZXgpfXJldHVybiBlLnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5PjAmJnRoaXMub3BhY2l0eT4wJiZ0aGlzLnZpc2liaWxpdHk9PT0wfSxlLnByb3RvdHlwZS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRyKHRoaXMuYmFja2dyb3VuZENvbG9yKX0sZS5wcm90b3R5cGUuaXNUcmFuc2Zvcm1lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybSE9PW51bGx9LGUucHJvdG90eXBlLmlzUG9zaXRpb25lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uIT09MH0sZS5wcm90b3R5cGUuaXNQb3NpdGlvbmVkV2l0aFpJbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzUG9zaXRpb25lZCgpJiYhdGhpcy56SW5kZXguYXV0b30sZS5wcm90b3R5cGUuaXNGbG9hdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZsb2F0IT09MH0sZS5wcm90b3R5cGUuaXNJbmxpbmVMZXZlbD1mdW5jdGlvbigpe3JldHVybiBoYSh0aGlzLmRpc3BsYXksNCl8fGhhKHRoaXMuZGlzcGxheSwzMzU1NDQzMil8fGhhKHRoaXMuZGlzcGxheSwyNjg0MzU0NTYpfHxoYSh0aGlzLmRpc3BsYXksNTM2ODcwOTEyKXx8aGEodGhpcy5kaXNwbGF5LDY3MTA4ODY0KXx8aGEodGhpcy5kaXNwbGF5LDEzNDIxNzcyOCl9LGV9KCksRGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jb250ZW50PUooZSxnYSx0LmNvbnRlbnQpLHRoaXMucXVvdGVzPUooZSxiYSx0LnF1b3Rlcyl9cmV0dXJuIGV9KCksT2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jb3VudGVySW5jcmVtZW50PUooZSxfYSx0LmNvdW50ZXJJbmNyZW1lbnQpLHRoaXMuY291bnRlclJlc2V0PUooZSx2YSx0LmNvdW50ZXJSZXNldCl9cmV0dXJuIGV9KCksSj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bmV3IFJuLGk9bj09bnVsbD90LmluaXRpYWxWYWx1ZTpuLnRvU3RyaW5nKCk7ci53cml0ZShpKTt2YXIgYT1uZXcgem4oci5yZWFkKCkpO3N3aXRjaCh0LnR5cGUpe2Nhc2UgMjp2YXIgbz1hLnBhcnNlQ29tcG9uZW50VmFsdWUoKTtyZXR1cm4gdC5wYXJzZShlLEhuKG8pP28udmFsdWU6dC5pbml0aWFsVmFsdWUpO2Nhc2UgMDpyZXR1cm4gdC5wYXJzZShlLGEucGFyc2VDb21wb25lbnRWYWx1ZSgpKTtjYXNlIDE6cmV0dXJuIHQucGFyc2UoZSxhLnBhcnNlQ29tcG9uZW50VmFsdWVzKCkpO2Nhc2UgNDpyZXR1cm4gYS5wYXJzZUNvbXBvbmVudFZhbHVlKCk7Y2FzZSAzOnN3aXRjaCh0LmZvcm1hdCl7Y2FzZWBhbmdsZWA6cmV0dXJuIG9yLnBhcnNlKGUsYS5wYXJzZUNvbXBvbmVudFZhbHVlKCkpO2Nhc2VgY29sb3JgOnJldHVybiB1ci5wYXJzZShlLGEucGFyc2VDb21wb25lbnRWYWx1ZSgpKTtjYXNlYGltYWdlYDpyZXR1cm4gR3IucGFyc2UoZSxhLnBhcnNlQ29tcG9uZW50VmFsdWUoKSk7Y2FzZWBsZW5ndGhgOnZhciBzPWEucGFyc2VDb21wb25lbnRWYWx1ZSgpO3JldHVybiBZbihzKT9zOlFuO2Nhc2VgbGVuZ3RoLXBlcmNlbnRhZ2VgOnZhciBjPWEucGFyc2VDb21wb25lbnRWYWx1ZSgpO3JldHVybiBYbihjKT9jOlFuO2Nhc2VgdGltZWA6cmV0dXJuIG9hLnBhcnNlKGUsYS5wYXJzZUNvbXBvbmVudFZhbHVlKCkpfWJyZWFrfX0sa2E9YGRhdGEtaHRtbDJjYW52YXMtZGVidWdgLEFhPWZ1bmN0aW9uKGUpe3N3aXRjaChlLmdldEF0dHJpYnV0ZShrYSkpe2Nhc2VgYWxsYDpyZXR1cm4gMTtjYXNlYGNsb25lYDpyZXR1cm4gMjtjYXNlYHBhcnNlYDpyZXR1cm4gMztjYXNlYHJlbmRlcmA6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gMH19LGphPWZ1bmN0aW9uKGUsdCl7dmFyIG49QWEoZSk7cmV0dXJuIG49PT0xfHx0PT09bn0sTWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7aWYodGhpcy5jb250ZXh0PWUsdGhpcy50ZXh0Tm9kZXM9W10sdGhpcy5lbGVtZW50cz1bXSx0aGlzLmZsYWdzPTAsamEodCwzKSlkZWJ1Z2dlcjt0aGlzLnN0eWxlcz1uZXcgRWEoZSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpKSxicyh0KSYmKHRoaXMuc3R5bGVzLmFuaW1hdGlvbkR1cmF0aW9uLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU+MH0pJiYodC5zdHlsZS5hbmltYXRpb25EdXJhdGlvbj1gMHNgKSx0aGlzLnN0eWxlcy50cmFuc2Zvcm0hPT1udWxsJiYodC5zdHlsZS50cmFuc2Zvcm09YG5vbmVgKSksdGhpcy5ib3VuZHM9cyh0aGlzLmNvbnRleHQsdCksamEodCw0KSYmKHRoaXMuZmxhZ3N8PTE2KX1yZXR1cm4gZX0oKSxOYT1gQUFBQUFBQUFBQUFBRUE0QUdCa0FBRkFhQUFBQ0FBQUFBQUFJQUJBQUdBQXdBRGdBQ0FBUUFBZ0FFQUFJQUJBQUNBQVFBQWdBRUFBSUFCQUFDQUFRQUFnQUVBQUlBQkFBUUFCSUFFUUFUQUFJQUJBQUNBQVFBQWdBRUFBSUFCQUFWQUJjQUFnQUVBQUlBQkFBQ0FBUUFHQUFhQUJ3QUhnQWdBQ0lBSTRBbGdBSUFCQUFtd0NqQUtnQXNBQzJBTDRBdlFERkFNb0EwZ0JQQVZZQldnRUlBQWdBQ0FDTUFOb0FZZ0ZrQVd3QmRBRjhBWDBCaFFHTkFaVUJsZ0dlQWFNQmxRR1dBYXNCc3dGOEFic0J3d0YwQWNzQll3SFRBUWdBMndHL0FPTUJkQUY4QWVrQjhRRjBBZmtCK3dIaUFIUUJmQUVJQUFNQzVnUUlBQXNDRWdJSUFBZ0FGZ0llQWdnQUlnSXBBZ2dBTVFJNUFrQUN5Z0VJQUFnQVNBSlFBbGdDWUFJSUFBZ0FDQUFLQlFvRkNnVVRCUk1GR1FVckJTc0ZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUJkQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQm9BbWdDcndHdkFRZ0FiZ0oyQWdnQUhnRUlBQWdBQ0FEbkFYc0NDQUFJQUFnQWd3SUlBQWdBQ0FBSUFBZ0FDQUNLQWdnQWtRS1pBZ2dBUEFESkFBZ0FvUUtrQXF3Q3NnSzZBc0lDQ0FESkFnZ0EwQUlJQUFnQUNBQUlBTllDM2dJSUFBZ0FDQUFJQUFnQUNBQkFBT1lDQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQWtBU29CK1FJRUFBZ0FDQUE4QUVNQ0NBQkNCUWdBQ0FCSkJWQUZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUJUQlZvRkNBQUlBRm9GQ0FCZkJXVUZDQUFJQUFnQUNBQUlBQWdBYlFVSUFBZ0FDQUFJQUFnQUNBQnpCWHNGZlFXRkJZb0ZpZ1dLQlpFRmlnV0tCWW9GbUFXZkJhWUZyZ1d4QmJrRkNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBTUVGQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQU1nRkNBRFFCUWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFPNENDQUFJQUFnQWlRQUlBQWdBQ0FCQUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FEMEFnZ0FDQUQ4QWdnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFOWUZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBTUR2d0FJQUFnQUpBSUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUN3TVRBd2dBQ0FCOUJPc0VHd01qQXdnQUt3TXlBd3NGWWdFM0EvTUVQd01JQUVVRFRRTlJBd2dBV1FPc0FHRURDQUFJQUFnQUNBQUlBQWdBQ0FCcEF6UUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGSVFVb0JTd0ZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUJ0QXdnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FCTUFFd0FDQUFJQUFnQUNBQUlBQmdBQ0FBSUFBZ0FDQUMvQUFnQUNBQXlBUWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUNBQUlBQXdBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQUFBUkFCSUFBZ0FDQUFJQUJRQVNBQUlBQWdBSUFCd0FFQUFqZ0NJQUJzQXFBQzJBTDBBaWdEUUF0d0MrSUpJUXFWQVpVQldRcVZBWlVCbFFHVkFaVUJsUUdyQzVVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVhzS2xRR1ZBYkFLNndzckRHVU1wUXpsREpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFmQUtBQXVaQTY0QXR3Q0pBTG9DNkFEd0FBZ0F1QUNnQS9vRXBnTzZBcXNEK0FBSUFBZ0Fzd01JQUFnQUNBQUlBSWtBdXdQNUFmc0J3d1BMQXdnQUNBQUlBQWdBQ0FEUkE5a0RDQUFJQU9FRDZRTUlBQWdBQ0FBSUFBZ0FDQUR1QS9ZRENBQUlBUDREeVFBSUFBZ0FCZ1FJQUFnQVhRQU9CQWdBQ0FBSUFBZ0FDQUFJQUJNRUNBQUlBQWdBQ0FBSUFBZ0FDQUQ4QUFRQkNBQUlBQWdBR2dRaUJDb0VDQUV4QkFnQUVBRUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBNEJBZ0FDQUJBQkVZRUNBQUlBQWdBVEFRWUFRZ0FWQVFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUZvRUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FPUUVJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUIrQkFjQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUVBQmhnU01CQWdBQ0FBSUFBZ0FsQVFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUF3QUVBQVFBQkFBREFBTUFBd0FEQUFRQUJBQUVBQVFBQkFBRUFBUUFCSEFUQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBZFFNSUFBZ0FDQUFJQUFnQUNBQUlBTWtBQ0FBSUFBZ0FmUU1JQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUNGQTRrRENBQUlBQWdBQ0FBSUFPY0JDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFJY0RDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUpFRENBQUlBQWdBQ0FERkFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQmdCQWdBWmdRSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQWJBUUNCWElFQ0FBSUFIa0VDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FCQUFKd0VRQUNqQktvRXNnUUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUM2Qk1JRUNBQUlBQWdBQ0FBSUFBZ0FDQUJtQkFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBeHdRSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUdZRUNBQUlBQWdBemdRSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBaWdXS0JZb0ZpZ1dLQllvRmlnV0tCZDBGWHdVSUFPSUY2Z1h4QllvRjNnVDVCUUFHQ0FhS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1hXQklvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllzRkVBYUtCWW9GaWdXS0JZb0ZpZ1dLQlJRR0NBQ0tCWW9GaWdXS0JRZ0FDQUFJQU5FRUNBQUlBQmdHaWdVZ0JnZ0FKZ1lJQUM0R013YUtCWW9GMHdRM0JqNEdpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnVUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQWlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXTEJmLy8vLy8vL3dRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUF3QUVBQVFBQWdBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUFBQUFBQUFBQVFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFBQUFGQUFVQUFBQUZBQVVBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFFQUFRQUJBQUVBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUFRQUFBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUZBQVVBQUFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFBQUFGQUFVQUFRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQndBRkFBVUFCUUFGQUFBQUJ3QUhBQWNBQUFBSEFBY0FCd0FGQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIQUFjQUJ3QUZBQVVBQlFBRkFBY0FCd0FGQUFVQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhBQUFBQVFBQkFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBQUFCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFIQUFjQUJ3QUhBQWNBQUFBSEFBY0FBQUFBQUFVQUJRQUhBQVVBQVFBSEFBRUFCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJ3QUJBQVVBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUVBQVFBQkFBRUFBUUFCQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQndBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUFRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUJRQU5BQVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQkFBRUFBUUFCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFIQUFVQUJRQUZBQUFBQUFBQUFBY0FCUUFGQUFVQUJRQUZBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFBQUFGQUFVQUJRQUZBQVVBQUFBRkFBVUFCUUFBQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFBQUFBQUFBQUFBQVVBQlFBRkFBY0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUhBQVVBQUFBSEFBY0FCd0FGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FIQUFjQUJ3QUZBQWNBQndBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJ3QUhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBVUFCd0FIQUFVQUJRQUZBQVVBQUFBQUFBY0FCd0FBQUFBQUJ3QUhBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFBQUFBQUJRQUZBQWNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFCd0FIQUFjQUJRQUZBQUFBQUFBQUFBQUFCUUFGQUFBQUFBQUZBQVVBQlFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUFBQUFBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FGQUFVQUJRQUZBQVVBQUFBRkFBVUFCd0FBQUFjQUJ3QUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUFBQUZBQVVBQndBRkFBVUFCUUFGQUFBQUFBQUhBQWNBQUFBQUFBY0FCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBY0FCd0FBQUFBQUFBQUhBQWNBQndBQUFBY0FCd0FIQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUhBQWNBQndBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCd0FIQUFjQUJ3QUFBQVVBQlFBRkFBQUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBY0FCUUFIQUFjQUJRQUhBQWNBQUFBRkFBY0FCd0FBQUFjQUJ3QUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBY0FCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBVUFCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUFBQUFBQUFBQUFBRkFBY0FCd0FGQUFVQUJRQUFBQVVBQUFBSEFBY0FCd0FIQUFjQUJ3QUhBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBSEFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQndBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQVVBQUFBRkFBQUFBQUFBQUFBQUJ3QUhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FGQUFVQUJRQUZBQVVBQUFBRkFBVUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQVVBQndBRkFBVUFCUUFGQUFVQUJRQUFBQVVBQlFBSEFBY0FCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCUUFGQUFBQUFBQUFBQUFBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBY0FCUUFGQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFIQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FIQUFjQUJ3QUhBQWNBQndBSEFBVUFCd0FIQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJ3QUhBQWNBQndBRkFBVUFCd0FIQUFjQUFBQUFBQUFBQUFBSEFBY0FCUUFIQUFjQUJ3QUhBQWNBQndBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBY0FCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQlFBSEFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBRkFBQUFCUUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFjQUJ3QUhBQWNBQndBSEFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBQUFBQUFVQUJRQUZBQVVBQlFBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQndBRkFBY0FCd0FIQUFjQUJ3QUZBQWNBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIQUFVQUJRQUZBQVVBQndBSEFBVUFCUUFIQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBY0FCUUFGQUFjQUJ3QUhBQVVBQndBRkFBVUFCUUFIQUFjQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUhBQWNBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQWNBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFCd0FGQUFVQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQUFCUUFGQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJ3QUhBQVVBQlFBSEFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBSEFBY0FCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBSEFBY0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFjQUJ3QUZBQVVBQlFBRkFBY0FCd0FGQUFVQUJ3QUhBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQVVBQlFBRkFBY0FCd0FGQUFVQUJ3QUhBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFjQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFGQUFVQUJRQUFBQUFBQlFBRkFBQUFBQUFBQUFBQUFBQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY0FCUUFGQUFjQUJ3QUFBQUFBQUFBQUFBQUFCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBRkFBY0FCd0FGQUFjQUJ3QUFBQWNBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFBQUFVQUJRQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQlFBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCd0FGQUFVQUJRQUZBQVVBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQndBSEFBY0FCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhBQWNBQndBRkFBVUFCUUFIQUFjQUJRQUhBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQndBSEFBY0FCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJ3QUhBQWNBQndBQUFBQUFCd0FIQUFBQUFBQUhBQWNBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCd0FGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FIQUFVQUJRQUZBQWNBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUhBQWNBQlFBRkFBVUFCUUFGQUFVQUJ3QUZBQWNBQndBRkFBY0FCUUFGQUFjQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFIQUFjQUJRQUZBQVVBQlFBQUFBQUFCd0FIQUFjQUJ3QUZBQVVBQndBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjQUJ3QUhBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUhBQWNBQlFBSEFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJ3QUZBQWNBQndBRkFBVUFCUUFGQUFVQUJRQUhBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBRkFBVUFCUUFGQUFjQUJRQUZBQVVBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIQUFjQUJ3QUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUhBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCd0FGQUFVQUJRQUZBQUFBQUFBRkFBVUFCd0FIQUFjQUJ3QUZBQUFBQUFBQUFBY0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQndBSEFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY0FCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFGQUFVQUJRQUZBQWNBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFBQUhBQVVBQlFBRkFBVUFCUUFGQUFVQUJ3QUZBQVVBQndBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFCUUFBQUFVQUJRQUFBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCd0FIQUFjQUFBQUZBQVVBQUFBSEFBY0FCUUFIQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQndBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFBQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY0FCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBVUFCUUFGQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFBQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQUZBQVVBQlFBRkFBVUFEZ0FPQUE0QURnQU9BQTRBRHdBUEFBOEFEd0FQQUE4QUR3QVBBQThBRHdBUEFBOEFEd0FQQUE4QUR3QVBBQThBRHdBUEFBOEFEd0FQQUE4QUR3QVBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFBQUFBQUFBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBTUFBd0FEQUFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQUFBQUFBQUFBQUFLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBQUFBQUFBQUFBQUFzQURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QUN3QU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBNEFEZ0FPQUE0QURnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUFBQUFBQUFBQUFBRGdBT0FBNEFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FBQUE0QURnQU9BQTRBRGdBT0FBQUFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QUFBQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QUFBQUFBQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBQUFBNEFBQUFPQUFBQUFBQUFBQUFBQUFBQUFBNEFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQUFBRGdBQUFBQUFBQUFBQUE0QUFBQU9BQUFBQUFBQUFBQUFEZ0FPQUE0QUFBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBNEFEZ0FPQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUE0QURnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRBRGdBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQUFBQUFBQUFBNEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBQUFBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRBQUFBQUFBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBQUFEZ0FPQUE0QURnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQTRBRGdBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QUFBQU9BQTRBRGdBT0FBNEFEZ0FBQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFBQUFBQUFBQUFBQT1gLFBhPWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvYCxGYT10eXBlb2YgVWludDhBcnJheT5gdWA/W106bmV3IFVpbnQ4QXJyYXkoMjU2KSxJYT0wO0lhPFBhLmxlbmd0aDtJYSsrKUZhW1BhLmNoYXJDb2RlQXQoSWEpXT1JYTtmb3IodmFyIExhPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoKi43NSxuPWUubGVuZ3RoLHIsaT0wLGEsbyxzLGM7ZVtlLmxlbmd0aC0xXT09PWA9YCYmKHQtLSxlW2UubGVuZ3RoLTJdPT09YD1gJiZ0LS0pO3ZhciBsPXR5cGVvZiBBcnJheUJ1ZmZlcjxgdWAmJnR5cGVvZiBVaW50OEFycmF5PGB1YCYmVWludDhBcnJheS5wcm90b3R5cGUuc2xpY2UhPT12b2lkIDA/bmV3IEFycmF5QnVmZmVyKHQpOkFycmF5KHQpLHU9QXJyYXkuaXNBcnJheShsKT9sOm5ldyBVaW50OEFycmF5KGwpO2ZvcihyPTA7cjxuO3IrPTQpYT1GYVtlLmNoYXJDb2RlQXQocildLG89RmFbZS5jaGFyQ29kZUF0KHIrMSldLHM9RmFbZS5jaGFyQ29kZUF0KHIrMildLGM9RmFbZS5jaGFyQ29kZUF0KHIrMyldLHVbaSsrXT1hPDwyfG8+PjQsdVtpKytdPShvJjE1KTw8NHxzPj4yLHVbaSsrXT0ocyYzKTw8NnxjJjYzO3JldHVybiBsfSxSYT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1bXSxyPTA7cjx0O3IrPTIpbi5wdXNoKGVbcisxXTw8OHxlW3JdKTtyZXR1cm4gbn0semE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49W10scj0wO3I8dDtyKz00KW4ucHVzaChlW3IrM108PDI0fGVbcisyXTw8MTZ8ZVtyKzFdPDw4fGVbcl0pO3JldHVybiBufSxCYT01LFZhPTExLEhhPTIsVWE9VmEtQmEsV2E9NjU1MzY+PkJhLEdhPSgxPDxCYSktMSxLYT1XYSsoMTAyND4+QmEpKzMyLHFhPTY1NTM2Pj5WYSxKYT0oMTw8VWEpLTEsWWE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnNsaWNlP2Uuc2xpY2UodCxuKTpuZXcgVWludDE2QXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSx0LG4pKX0sWGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnNsaWNlP2Uuc2xpY2UodCxuKTpuZXcgVWludDMyQXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSx0LG4pKX0sWmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1MYShlKSxyPUFycmF5LmlzQXJyYXkobik/emEobik6bmV3IFVpbnQzMkFycmF5KG4pLGk9QXJyYXkuaXNBcnJheShuKT9SYShuKTpuZXcgVWludDE2QXJyYXkobiksYT0yNCxvPVlhKGksYS8yLHJbNF0vMikscz1yWzVdPT09Mj9ZYShpLChhK3JbNF0pLzIpOlhhKHIsTWF0aC5jZWlsKChhK3JbNF0pLzQpKTtyZXR1cm4gbmV3IFFhKHJbMF0sclsxXSxyWzJdLHJbM10sbyxzKX0sUWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxhKXt0aGlzLmluaXRpYWxWYWx1ZT1lLHRoaXMuZXJyb3JWYWx1ZT10LHRoaXMuaGlnaFN0YXJ0PW4sdGhpcy5oaWdoVmFsdWVJbmRleD1yLHRoaXMuaW5kZXg9aSx0aGlzLmRhdGE9YX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGU+PTApe2lmKGU8NTUyOTZ8fGU+NTYzMTkmJmU8PTY1NTM1KXJldHVybiB0PXRoaXMuaW5kZXhbZT4+QmFdLHQ9KHQ8PEhhKSsoZSZHYSksdGhpcy5kYXRhW3RdO2lmKGU8PTY1NTM1KXJldHVybiB0PXRoaXMuaW5kZXhbV2ErKGUtNTUyOTY+PkJhKV0sdD0odDw8SGEpKyhlJkdhKSx0aGlzLmRhdGFbdF07aWYoZTx0aGlzLmhpZ2hTdGFydClyZXR1cm4gdD1LYS1xYSsoZT4+VmEpLHQ9dGhpcy5pbmRleFt0XSx0Kz1lPj5CYSZKYSx0PXRoaXMuaW5kZXhbdF0sdD0odDw8SGEpKyhlJkdhKSx0aGlzLmRhdGFbdF07aWYoZTw9MTExNDExMSlyZXR1cm4gdGhpcy5kYXRhW3RoaXMuaGlnaFZhbHVlSW5kZXhdfXJldHVybiB0aGlzLmVycm9yVmFsdWV9LGV9KCksJGE9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9gLGVvPXR5cGVvZiBVaW50OEFycmF5PmB1YD9bXTpuZXcgVWludDhBcnJheSgyNTYpLHRvPTA7dG88JGEubGVuZ3RoO3RvKyspZW9bJGEuY2hhckNvZGVBdCh0byldPXRvO3ZhciBubz0xLHJvPTIsaW89Myxhbz00LG9vPTUsc289Nyxjbz04LGxvPTksdW89MTAsZm89MTEscG89MTIsbW89MTMsaG89MTQsZ289MTUsX289ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MCxyPWUubGVuZ3RoO248cjspe3ZhciBpPWUuY2hhckNvZGVBdChuKyspO2lmKGk+PTU1Mjk2JiZpPD01NjMxOSYmbjxyKXt2YXIgYT1lLmNoYXJDb2RlQXQobisrKTsoYSY2NDUxMik9PTU2MzIwP3QucHVzaCgoKGkmMTAyMyk8PDEwKSsoYSYxMDIzKSs2NTUzNik6KHQucHVzaChpKSxuLS0pfWVsc2UgdC5wdXNoKGkpfXJldHVybiB0fSx2bz1mdW5jdGlvbigpe3ZhciBlPVsuLi5hcmd1bWVudHNdO2lmKFN0cmluZy5mcm9tQ29kZVBvaW50KXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsZSk7dmFyIHQ9ZS5sZW5ndGg7aWYoIXQpcmV0dXJuYGA7Zm9yKHZhciBuPVtdLHI9LTEsaT1gYDsrK3I8dDspe3ZhciBhPWVbcl07YTw9NjU1MzU/bi5wdXNoKGEpOihhLT02NTUzNixuLnB1c2goKGE+PjEwKSs1NTI5NixhJTEwMjQrNTYzMjApKSwocisxPT09dHx8bi5sZW5ndGg+MTYzODQpJiYoaSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsbiksbi5sZW5ndGg9MCl9cmV0dXJuIGl9LHlvPVphKE5hKSxibz1gw5dgLHhvPWDDt2AsU289ZnVuY3Rpb24oZSl7cmV0dXJuIHlvLmdldChlKX0sQ289ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4tMixpPXRbcl0sYT10W24tMV0sbz10W25dO2lmKGE9PT1ybyYmbz09PWlvKXJldHVybiBibztpZihhPT09cm98fGE9PT1pb3x8YT09PWFvfHxvPT09cm98fG89PT1pb3x8bz09PWFvKXJldHVybiB4bztpZihhPT09Y28mJltjbyxsbyxmbyxwb10uaW5kZXhPZihvKSE9PS0xfHwoYT09PWZvfHxhPT09bG8pJiYobz09PWxvfHxvPT09dW8pfHwoYT09PXBvfHxhPT09dW8pJiZvPT09dW98fG89PT1tb3x8bz09PW9vfHxvPT09c298fGE9PT1ubylyZXR1cm4gYm87aWYoYT09PW1vJiZvPT09aG8pe2Zvcig7aT09PW9vOylpPXRbLS1yXTtpZihpPT09aG8pcmV0dXJuIGJvfWlmKGE9PT1nbyYmbz09PWdvKXtmb3IodmFyIHM9MDtpPT09Z287KXMrKyxpPXRbLS1yXTtpZihzJTI9PTApcmV0dXJuIGJvfXJldHVybiB4b30sd289ZnVuY3Rpb24oZSl7dmFyIHQ9X28oZSksbj10Lmxlbmd0aCxyPTAsaT0wLGE9dC5tYXAoU28pO3JldHVybntuZXh0OmZ1bmN0aW9uKCl7aWYocj49bilyZXR1cm57ZG9uZTohMCx2YWx1ZTpudWxsfTtmb3IodmFyIGU9Ym87cjxuJiYoZT1Dbyh0LGEsKytyKSk9PT1ibzspO2lmKGUhPT1ib3x8cj09PW4pe3ZhciBvPXZvLmFwcGx5KG51bGwsdC5zbGljZShpLHIpKTtyZXR1cm4gaT1yLHt2YWx1ZTpvLGRvbmU6ITF9fXJldHVybntkb25lOiEwLHZhbHVlOm51bGx9fX19LFRvPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD13byhlKSxuPVtdLHI7IShyPXQubmV4dCgpKS5kb25lOylyLnZhbHVlJiZuLnB1c2goci52YWx1ZS5zbGljZSgpKTtyZXR1cm4gbn0sRW89ZnVuY3Rpb24oZSl7dmFyIHQ9MTIzO2lmKGUuY3JlYXRlUmFuZ2Upe3ZhciBuPWUuY3JlYXRlUmFuZ2UoKTtpZihuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIHI9ZS5jcmVhdGVFbGVtZW50KGBib3VuZHRlc3RgKTtyLnN0eWxlLmhlaWdodD10K2BweGAsci5zdHlsZS5kaXNwbGF5PWBibG9ja2AsZS5ib2R5LmFwcGVuZENoaWxkKHIpLG4uc2VsZWN0Tm9kZShyKTt2YXIgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9TWF0aC5yb3VuZChpLmhlaWdodCk7aWYoZS5ib2R5LnJlbW92ZUNoaWxkKHIpLGE9PT10KXJldHVybiEwfX1yZXR1cm4hMX0sRG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jcmVhdGVFbGVtZW50KGBib3VuZHRlc3RgKTt0LnN0eWxlLndpZHRoPWA1MHB4YCx0LnN0eWxlLmRpc3BsYXk9YGJsb2NrYCx0LnN0eWxlLmZvbnRTaXplPWAxMnB4YCx0LnN0eWxlLmxldHRlclNwYWNpbmc9YDBweGAsdC5zdHlsZS53b3JkU3BhY2luZz1gMHB4YCxlLmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIG49ZS5jcmVhdGVSYW5nZSgpO3QuaW5uZXJIVE1MPXR5cGVvZmBgLnJlcGVhdD09YGZ1bmN0aW9uYD9gJiMxMjgxMDQ7YC5yZXBlYXQoMTApOmBgO3ZhciByPXQuZmlyc3RDaGlsZCxpPWwoci5kYXRhKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSl9KSxhPTAsbz17fSxzPWkuZXZlcnkoZnVuY3Rpb24oZSx0KXtuLnNldFN0YXJ0KHIsYSksbi5zZXRFbmQocixhK2UubGVuZ3RoKTt2YXIgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2ErPWUubGVuZ3RoO3ZhciBzPWkueD5vLnh8fGkueT5vLnk7cmV0dXJuIG89aSx0PT09MD8hMDpzfSk7cmV0dXJuIGUuYm9keS5yZW1vdmVDaGlsZCh0KSxzfSxPbz1mdW5jdGlvbigpe3JldHVybiBuZXcgSW1hZ2UoKS5jcm9zc09yaWdpbiE9PXZvaWQgMH0sa289ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG5ldyBYTUxIdHRwUmVxdWVzdCgpLnJlc3BvbnNlVHlwZT09YHN0cmluZ2B9LEFvPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBJbWFnZSxuPWUuY3JlYXRlRWxlbWVudChgY2FudmFzYCkscj1uLmdldENvbnRleHQoYDJkYCk7aWYoIXIpcmV0dXJuITE7dC5zcmM9YGRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PC9zdmc+YDt0cnl7ci5kcmF3SW1hZ2UodCwwLDApLG4udG9EYXRhVVJMKCl9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9LGpvPWZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09MCYmZVsxXT09PTI1NSYmZVsyXT09PTAmJmVbM109PT0yNTV9LE1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY3JlYXRlRWxlbWVudChgY2FudmFzYCksbj0xMDA7dC53aWR0aD1uLHQuaGVpZ2h0PW47dmFyIHI9dC5nZXRDb250ZXh0KGAyZGApO2lmKCFyKXJldHVybiBQcm9taXNlLnJlamVjdCghMSk7ci5maWxsU3R5bGU9YHJnYigwLCAyNTUsIDApYCxyLmZpbGxSZWN0KDAsMCxuLG4pO3ZhciBpPW5ldyBJbWFnZSxhPXQudG9EYXRhVVJMKCk7aS5zcmM9YTt2YXIgbz1ObyhuLG4sMCwwLGkpO3JldHVybiByLmZpbGxTdHlsZT1gcmVkYCxyLmZpbGxSZWN0KDAsMCxuLG4pLFBvKG8pLnRoZW4oZnVuY3Rpb24odCl7ci5kcmF3SW1hZ2UodCwwLDApO3ZhciBpPXIuZ2V0SW1hZ2VEYXRhKDAsMCxuLG4pLmRhdGE7ci5maWxsU3R5bGU9YHJlZGAsci5maWxsUmVjdCgwLDAsbixuKTt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQoYGRpdmApO3JldHVybiBvLnN0eWxlLmJhY2tncm91bmRJbWFnZT1gdXJsKGArYStgKWAsby5zdHlsZS5oZWlnaHQ9bitgcHhgLGpvKGkpP1BvKE5vKG4sbiwwLDAsbykpOlByb21pc2UucmVqZWN0KCExKX0pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHIuZHJhd0ltYWdlKGUsMCwwKSxqbyhyLmdldEltYWdlRGF0YSgwLDAsbixuKS5kYXRhKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KX0sTm89ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT1gaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEsYHN2Z2ApLHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEsYGZvcmVpZ25PYmplY3RgKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGVOUyhudWxsLGB3aWR0aGAsZS50b1N0cmluZygpKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsYGhlaWdodGAsdC50b1N0cmluZygpKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsYHdpZHRoYCxgMTAwJWApLHMuc2V0QXR0cmlidXRlTlMobnVsbCxgaGVpZ2h0YCxgMTAwJWApLHMuc2V0QXR0cmlidXRlTlMobnVsbCxgeGAsbi50b1N0cmluZygpKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsYHlgLHIudG9TdHJpbmcoKSkscy5zZXRBdHRyaWJ1dGVOUyhudWxsLGBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkYCxgdHJ1ZWApLG8uYXBwZW5kQ2hpbGQocykscy5hcHBlbmRDaGlsZChpKSxvfSxQbz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgSW1hZ2U7ci5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdChyKX0sci5vbmVycm9yPW4sci5zcmM9YGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LGArZW5jb2RlVVJJQ29tcG9uZW50KG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZSkpfSl9LEZvPXtnZXQgU1VQUE9SVF9SQU5HRV9CT1VORFMoKXt2YXIgZT1Fbyhkb2N1bWVudCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbyxgU1VQUE9SVF9SQU5HRV9CT1VORFNgLHt2YWx1ZTplfSksZX0sZ2V0IFNVUFBPUlRfV09SRF9CUkVBS0lORygpe3ZhciBlPUZvLlNVUFBPUlRfUkFOR0VfQk9VTkRTJiZEbyhkb2N1bWVudCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbyxgU1VQUE9SVF9XT1JEX0JSRUFLSU5HYCx7dmFsdWU6ZX0pLGV9LGdldCBTVVBQT1JUX1NWR19EUkFXSU5HKCl7dmFyIGU9QW8oZG9jdW1lbnQpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoRm8sYFNVUFBPUlRfU1ZHX0RSQVdJTkdgLHt2YWx1ZTplfSksZX0sZ2V0IFNVUFBPUlRfRk9SRUlHTk9CSkVDVF9EUkFXSU5HKCl7dmFyIGU9dHlwZW9mIEFycmF5LmZyb209PWBmdW5jdGlvbmAmJnR5cGVvZiB3aW5kb3cuZmV0Y2g9PWBmdW5jdGlvbmA/TW8oZG9jdW1lbnQpOlByb21pc2UucmVzb2x2ZSghMSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbyxgU1VQUE9SVF9GT1JFSUdOT0JKRUNUX0RSQVdJTkdgLHt2YWx1ZTplfSksZX0sZ2V0IFNVUFBPUlRfQ09SU19JTUFHRVMoKXt2YXIgZT1PbygpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoRm8sYFNVUFBPUlRfQ09SU19JTUFHRVNgLHt2YWx1ZTplfSksZX0sZ2V0IFNVUFBPUlRfUkVTUE9OU0VfVFlQRSgpe3ZhciBlPWtvKCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbyxgU1VQUE9SVF9SRVNQT05TRV9UWVBFYCx7dmFsdWU6ZX0pLGV9LGdldCBTVVBQT1JUX0NPUlNfWEhSKCl7dmFyIGU9YHdpdGhDcmVkZW50aWFsc2BpbiBuZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbyxgU1VQUE9SVF9DT1JTX1hIUmAse3ZhbHVlOmV9KSxlfSxnZXQgU1VQUE9SVF9OQVRJVkVfVEVYVF9TRUdNRU5UQVRJT04oKXt2YXIgZT0hISh0eXBlb2YgSW50bDxgdWAmJkludGwuU2VnbWVudGVyKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvLGBTVVBQT1JUX05BVElWRV9URVhUX1NFR01FTlRBVElPTmAse3ZhbHVlOmV9KSxlfX0sSW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50ZXh0PWUsdGhpcy5ib3VuZHM9dH1yZXR1cm4gZX0oKSxMbz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1Ibyh0LG4pLGE9W10scz0wO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24odCl7aWYobi50ZXh0RGVjb3JhdGlvbkxpbmUubGVuZ3RofHx0LnRyaW0oKS5sZW5ndGg+MClpZihGby5TVVBQT1JUX1JBTkdFX0JPVU5EUyl7dmFyIGk9em8ocixzLHQubGVuZ3RoKS5nZXRDbGllbnRSZWN0cygpO2lmKGkubGVuZ3RoPjEpe3ZhciBjPUJvKHQpLGw9MDtjLmZvckVhY2goZnVuY3Rpb24odCl7YS5wdXNoKG5ldyBJbyh0LG8uZnJvbURPTVJlY3RMaXN0KGUsem8ocixsK3MsdC5sZW5ndGgpLmdldENsaWVudFJlY3RzKCkpKSksbCs9dC5sZW5ndGh9KX1lbHNlIGEucHVzaChuZXcgSW8odCxvLmZyb21ET01SZWN0TGlzdChlLGkpKSl9ZWxzZXt2YXIgdT1yLnNwbGl0VGV4dCh0Lmxlbmd0aCk7YS5wdXNoKG5ldyBJbyh0LFJvKGUscikpKSxyPXV9ZWxzZSBGby5TVVBQT1JUX1JBTkdFX0JPVU5EU3x8KHI9ci5zcGxpdFRleHQodC5sZW5ndGgpKTtzKz10Lmxlbmd0aH0pLGF9LFJvPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vd25lckRvY3VtZW50O2lmKG4pe3ZhciByPW4uY3JlYXRlRWxlbWVudChgaHRtbDJjYW52YXN3cmFwcGVyYCk7ci5hcHBlbmRDaGlsZCh0LmNsb25lTm9kZSghMCkpO3ZhciBpPXQucGFyZW50Tm9kZTtpZihpKXtpLnJlcGxhY2VDaGlsZChyLHQpO3ZhciBhPXMoZSxyKTtyZXR1cm4gci5maXJzdENoaWxkJiZpLnJlcGxhY2VDaGlsZChyLmZpcnN0Q2hpbGQsciksYX19cmV0dXJuIG8uRU1QVFl9LHpvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm93bmVyRG9jdW1lbnQ7aWYoIXIpdGhyb3cgRXJyb3IoYE5vZGUgaGFzIG5vIG93bmVyIGRvY3VtZW50YCk7dmFyIGk9ci5jcmVhdGVSYW5nZSgpO3JldHVybiBpLnNldFN0YXJ0KGUsdCksaS5zZXRFbmQoZSx0K24pLGl9LEJvPWZ1bmN0aW9uKGUpe2lmKEZvLlNVUFBPUlRfTkFUSVZFX1RFWFRfU0VHTUVOVEFUSU9OKXt2YXIgdD1uZXcgSW50bC5TZWdtZW50ZXIodm9pZCAwLHtncmFudWxhcml0eTpgZ3JhcGhlbWVgfSk7cmV0dXJuIEFycmF5LmZyb20odC5zZWdtZW50KGUpKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VnbWVudH0pfXJldHVybiBUbyhlKX0sVm89ZnVuY3Rpb24oZSx0KXtpZihGby5TVVBQT1JUX05BVElWRV9URVhUX1NFR01FTlRBVElPTil7dmFyIG49bmV3IEludGwuU2VnbWVudGVyKHZvaWQgMCx7Z3JhbnVsYXJpdHk6YHdvcmRgfSk7cmV0dXJuIEFycmF5LmZyb20obi5zZWdtZW50KGUpKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VnbWVudH0pfXJldHVybiBXbyhlLHQpfSxIbz1mdW5jdGlvbihlLHQpe3JldHVybiB0LmxldHRlclNwYWNpbmc9PT0wP1ZvKGUsdCk6Qm8oZSl9LFVvPVszMiwxNjAsNDk2MSw2NTc5Miw2NTc5Myw0MTUzLDQyNDFdLFdvPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVplKGUse2xpbmVCcmVhazp0LmxpbmVCcmVhayx3b3JkQnJlYWs6dC5vdmVyZmxvd1dyYXA9PT1gYnJlYWstd29yZGA/YGJyZWFrLXdvcmRgOnQud29yZEJyZWFrfSkscj1bXSxpLGE9ZnVuY3Rpb24oKXtpZihpLnZhbHVlKXt2YXIgZT1sKGkudmFsdWUuc2xpY2UoKSksdD1gYDtlLmZvckVhY2goZnVuY3Rpb24oZSl7VW8uaW5kZXhPZihlKT09PS0xP3QrPXUoZSk6KHQubGVuZ3RoJiZyLnB1c2godCksci5wdXNoKHUoZSkpLHQ9YGApfSksdC5sZW5ndGgmJnIucHVzaCh0KX19OyEoaT1uLm5leHQoKSkuZG9uZTspYSgpO3JldHVybiByfSxHbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMudGV4dD1Lbyh0LmRhdGEsbi50ZXh0VHJhbnNmb3JtKSx0aGlzLnRleHRCb3VuZHM9TG8oZSx0aGlzLnRleHQsbix0KX1yZXR1cm4gZX0oKSxLbz1mdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIGUudG9Mb3dlckNhc2UoKTtjYXNlIDM6cmV0dXJuIGUucmVwbGFjZShxbyxKbyk7Y2FzZSAyOnJldHVybiBlLnRvVXBwZXJDYXNlKCk7ZGVmYXVsdDpyZXR1cm4gZX19LHFvPS8oXnxcc3w6fC18XCh8XCkpKFthLXpdKS9nLEpvPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5sZW5ndGg+MD90K24udG9VcHBlckNhc2UoKTplfSxZbz1mdW5jdGlvbihlKXt0KG4sZSk7ZnVuY3Rpb24gbih0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIuc3JjPW4uY3VycmVudFNyY3x8bi5zcmMsci5pbnRyaW5zaWNXaWR0aD1uLm5hdHVyYWxXaWR0aCxyLmludHJpbnNpY0hlaWdodD1uLm5hdHVyYWxIZWlnaHQsci5jb250ZXh0LmNhY2hlLmFkZEltYWdlKHIuc3JjKSxyfXJldHVybiBufShNYSksWG89ZnVuY3Rpb24oZSl7dChuLGUpO2Z1bmN0aW9uIG4odCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLmNhbnZhcz1uLHIuaW50cmluc2ljV2lkdGg9bi53aWR0aCxyLmludHJpbnNpY0hlaWdodD1uLmhlaWdodCxyfXJldHVybiBufShNYSksWm89ZnVuY3Rpb24oZSl7dChuLGUpO2Z1bmN0aW9uIG4odCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzLGk9bmV3IFhNTFNlcmlhbGl6ZXIsYT1zKHQsbik7cmV0dXJuIG4uc2V0QXR0cmlidXRlKGB3aWR0aGAsYS53aWR0aCtgcHhgKSxuLnNldEF0dHJpYnV0ZShgaGVpZ2h0YCxhLmhlaWdodCtgcHhgKSxyLnN2Zz1gZGF0YTppbWFnZS9zdmcreG1sLGArZW5jb2RlVVJJQ29tcG9uZW50KGkuc2VyaWFsaXplVG9TdHJpbmcobikpLHIuaW50cmluc2ljV2lkdGg9bi53aWR0aC5iYXNlVmFsLnZhbHVlLHIuaW50cmluc2ljSGVpZ2h0PW4uaGVpZ2h0LmJhc2VWYWwudmFsdWUsci5jb250ZXh0LmNhY2hlLmFkZEltYWdlKHIuc3ZnKSxyfXJldHVybiBufShNYSksUW89ZnVuY3Rpb24oZSl7dChuLGUpO2Z1bmN0aW9uIG4odCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnZhbHVlPW4udmFsdWUscn1yZXR1cm4gbn0oTWEpLCRvPWZ1bmN0aW9uKGUpe3QobixlKTtmdW5jdGlvbiBuKHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci5zdGFydD1uLnN0YXJ0LHIucmV2ZXJzZWQ9dHlwZW9mIG4ucmV2ZXJzZWQ9PWBib29sZWFuYCYmbi5yZXZlcnNlZD09PSEwLHJ9cmV0dXJuIG59KE1hKSxlcz1be3R5cGU6MTUsZmxhZ3M6MCx1bml0OmBweGAsbnVtYmVyOjN9XSx0cz1be3R5cGU6MTYsZmxhZ3M6MCxudW1iZXI6NTB9XSxucz1mdW5jdGlvbihlKXtyZXR1cm4gZS53aWR0aD5lLmhlaWdodD9uZXcgbyhlLmxlZnQrKGUud2lkdGgtZS5oZWlnaHQpLzIsZS50b3AsZS5oZWlnaHQsZS5oZWlnaHQpOmUud2lkdGg8ZS5oZWlnaHQ/bmV3IG8oZS5sZWZ0LGUudG9wKyhlLmhlaWdodC1lLndpZHRoKS8yLGUud2lkdGgsZS53aWR0aCk6ZX0scnM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlPT09b3M/QXJyYXkoZS52YWx1ZS5sZW5ndGgrMSkuam9pbihg4oCiYCk6ZS52YWx1ZTtyZXR1cm4gdC5sZW5ndGg9PT0wP2UucGxhY2Vob2xkZXJ8fGBgOnR9LGlzPWBjaGVja2JveGAsYXM9YHJhZGlvYCxvcz1gcGFzc3dvcmRgLHNzPTcwNzQwNjU5MSxjcz1mdW5jdGlvbihlKXt0KG4sZSk7ZnVuY3Rpb24gbih0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7c3dpdGNoKHIudHlwZT1uLnR5cGUudG9Mb3dlckNhc2UoKSxyLmNoZWNrZWQ9bi5jaGVja2VkLHIudmFsdWU9cnMobiksKHIudHlwZT09PWlzfHxyLnR5cGU9PT1hcykmJihyLnN0eWxlcy5iYWNrZ3JvdW5kQ29sb3I9MzczOTE0ODAzMSxyLnN0eWxlcy5ib3JkZXJUb3BDb2xvcj1yLnN0eWxlcy5ib3JkZXJSaWdodENvbG9yPXIuc3R5bGVzLmJvcmRlckJvdHRvbUNvbG9yPXIuc3R5bGVzLmJvcmRlckxlZnRDb2xvcj0yNzc5MDk2NTc1LHIuc3R5bGVzLmJvcmRlclRvcFdpZHRoPXIuc3R5bGVzLmJvcmRlclJpZ2h0V2lkdGg9ci5zdHlsZXMuYm9yZGVyQm90dG9tV2lkdGg9ci5zdHlsZXMuYm9yZGVyTGVmdFdpZHRoPTEsci5zdHlsZXMuYm9yZGVyVG9wU3R5bGU9ci5zdHlsZXMuYm9yZGVyUmlnaHRTdHlsZT1yLnN0eWxlcy5ib3JkZXJCb3R0b21TdHlsZT1yLnN0eWxlcy5ib3JkZXJMZWZ0U3R5bGU9MSxyLnN0eWxlcy5iYWNrZ3JvdW5kQ2xpcD1bMF0sci5zdHlsZXMuYmFja2dyb3VuZE9yaWdpbj1bMF0sci5ib3VuZHM9bnMoci5ib3VuZHMpKSxyLnR5cGUpe2Nhc2UgaXM6ci5zdHlsZXMuYm9yZGVyVG9wUmlnaHRSYWRpdXM9ci5zdHlsZXMuYm9yZGVyVG9wTGVmdFJhZGl1cz1yLnN0eWxlcy5ib3JkZXJCb3R0b21SaWdodFJhZGl1cz1yLnN0eWxlcy5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzPWVzO2JyZWFrO2Nhc2UgYXM6ci5zdHlsZXMuYm9yZGVyVG9wUmlnaHRSYWRpdXM9ci5zdHlsZXMuYm9yZGVyVG9wTGVmdFJhZGl1cz1yLnN0eWxlcy5ib3JkZXJCb3R0b21SaWdodFJhZGl1cz1yLnN0eWxlcy5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzPXRzO2JyZWFrfXJldHVybiByfXJldHVybiBufShNYSksbHM9ZnVuY3Rpb24oZSl7dChuLGUpO2Z1bmN0aW9uIG4odCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzLGk9bi5vcHRpb25zW24uc2VsZWN0ZWRJbmRleHx8MF07cmV0dXJuIHIudmFsdWU9aSYmaS50ZXh0fHxgYCxyfXJldHVybiBufShNYSksdXM9ZnVuY3Rpb24oZSl7dChuLGUpO2Z1bmN0aW9uIG4odCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnZhbHVlPW4udmFsdWUscn1yZXR1cm4gbn0oTWEpLGRzPWZ1bmN0aW9uKGUpe3QobixlKTtmdW5jdGlvbiBuKHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyLnNyYz1uLnNyYyxyLndpZHRoPXBhcnNlSW50KG4ud2lkdGgsMTApfHwwLHIuaGVpZ2h0PXBhcnNlSW50KG4uaGVpZ2h0LDEwKXx8MCxyLmJhY2tncm91bmRDb2xvcj1yLnN0eWxlcy5iYWNrZ3JvdW5kQ29sb3I7dHJ5e2lmKG4uY29udGVudFdpbmRvdyYmbi5jb250ZW50V2luZG93LmRvY3VtZW50JiZuLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtyLnRyZWU9aHModCxuLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTt2YXIgaT1uLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P3lyKHQsZ2V0Q29tcHV0ZWRTdHlsZShuLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5iYWNrZ3JvdW5kQ29sb3IpOmJyLlRSQU5TUEFSRU5ULGE9bi5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHk/eXIodCxnZXRDb21wdXRlZFN0eWxlKG4uY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3IpOmJyLlRSQU5TUEFSRU5UO3IuYmFja2dyb3VuZENvbG9yPWRyKGkpP2RyKGEpP3Iuc3R5bGVzLmJhY2tncm91bmRDb2xvcjphOml9fWNhdGNoe31yZXR1cm4gcn1yZXR1cm4gbn0oTWEpLGZzPVtgT0xgLGBVTGAsYE1FTlVgXSxwcz1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9dC5maXJzdENoaWxkLGE9dm9pZCAwO2k7aT1hKWlmKGE9aS5uZXh0U2libGluZyx2cyhpKSYmaS5kYXRhLnRyaW0oKS5sZW5ndGg+MCluLnRleHROb2Rlcy5wdXNoKG5ldyBHbyhlLGksbi5zdHlsZXMpKTtlbHNlIGlmKHlzKGkpKWlmKElzKGkpJiZpLmFzc2lnbmVkTm9kZXMpaS5hc3NpZ25lZE5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcHMoZSx0LG4scil9KTtlbHNle3ZhciBvPW1zKGUsaSk7by5zdHlsZXMuaXNWaXNpYmxlKCkmJihncyhpLG8scik/by5mbGFnc3w9NDpfcyhvLnN0eWxlcykmJihvLmZsYWdzfD0yKSxmcy5pbmRleE9mKGkudGFnTmFtZSkhPT0tMSYmKG8uZmxhZ3N8PTgpLG4uZWxlbWVudHMucHVzaChvKSxpLnNsb3QsaS5zaGFkb3dSb290P3BzKGUsaS5zaGFkb3dSb290LG8scik6IVBzKGkpJiYhRXMoaSkmJiFGcyhpKSYmcHMoZSxpLG8scikpfX0sbXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXModCk/bmV3IFlvKGUsdCk6T3ModCk/bmV3IFhvKGUsdCk6RXModCk/bmV3IFpvKGUsdCk6U3ModCk/bmV3IFFvKGUsdCk6Q3ModCk/bmV3ICRvKGUsdCk6d3ModCk/bmV3IGNzKGUsdCk6RnModCk/bmV3IGxzKGUsdCk6UHModCk/bmV3IHVzKGUsdCk6anModCk/bmV3IGRzKGUsdCk6bmV3IE1hKGUsdCl9LGhzPWZ1bmN0aW9uKGUsdCl7dmFyIG49bXMoZSx0KTtyZXR1cm4gbi5mbGFnc3w9NCxwcyhlLHQsbixuKSxufSxncz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQuc3R5bGVzLmlzUG9zaXRpb25lZFdpdGhaSW5kZXgoKXx8dC5zdHlsZXMub3BhY2l0eTwxfHx0LnN0eWxlcy5pc1RyYW5zZm9ybWVkKCl8fERzKGUpJiZuLnN0eWxlcy5pc1RyYW5zcGFyZW50KCl9LF9zPWZ1bmN0aW9uKGUpe3JldHVybiBlLmlzUG9zaXRpb25lZCgpfHxlLmlzRmxvYXRpbmcoKX0sdnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERX0seXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0sYnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHlzKGUpJiZlLnN0eWxlIT09dm9pZCAwJiYheHMoZSl9LHhzPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZS5jbGFzc05hbWU9PWBvYmplY3RgfSxTcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09YExJYH0sQ3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZT09PWBPTGB9LHdzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWU9PT1gSU5QVVRgfSxUcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09YEhUTUxgfSxFcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09YHN2Z2B9LERzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWU9PT1gQk9EWWB9LE9zPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWU9PT1gQ0FOVkFTYH0sa3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZT09PWBWSURFT2B9LEFzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWU9PT1gSU1HYH0sanM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZT09PWBJRlJBTUVgfSxNcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09YFNUWUxFYH0sTnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZT09PWBTQ1JJUFRgfSxQcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09YFRFWFRBUkVBYH0sRnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZT09PWBTRUxFQ1RgfSxJcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09YFNMT1RgfSxMcz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lLmluZGV4T2YoYC1gKT4wfSxScz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50ZXJzPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRDb3VudGVyVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb3VudGVyc1tlXTtyZXR1cm4gdCYmdC5sZW5ndGg/dFt0Lmxlbmd0aC0xXToxfSxlLnByb3RvdHlwZS5nZXRDb3VudGVyVmFsdWVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvdW50ZXJzW2VdfHxbXX0sZS5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNvdW50ZXJzW2VdLnBvcCgpfSl9LGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLmNvdW50ZXJJbmNyZW1lbnQscj1lLmNvdW50ZXJSZXNldCxpPSEwO24hPT1udWxsJiZuLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5jb3VudGVyc1tlLmNvdW50ZXJdO24mJmUuaW5jcmVtZW50IT09MCYmKGk9ITEsbi5sZW5ndGh8fG4ucHVzaCgxKSxuW01hdGgubWF4KDAsbi5sZW5ndGgtMSldKz1lLmluY3JlbWVudCl9KTt2YXIgYT1bXTtyZXR1cm4gaSYmci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY291bnRlcnNbZS5jb3VudGVyXTthLnB1c2goZS5jb3VudGVyKSxufHw9dC5jb3VudGVyc1tlLmNvdW50ZXJdPVtdLG4ucHVzaChlLnJlc2V0KX0pLGF9LGV9KCksenM9e2ludGVnZXJzOlsxZTMsOTAwLDUwMCw0MDAsMTAwLDkwLDUwLDQwLDEwLDksNSw0LDFdLHZhbHVlczpbYE1gLGBDTWAsYERgLGBDRGAsYENgLGBYQ2AsYExgLGBYTGAsYFhgLGBJWGAsYFZgLGBJVmAsYElgXX0sQnM9e2ludGVnZXJzOls5ZTMsOGUzLDdlMyw2ZTMsNWUzLDRlMywzZTMsMmUzLDFlMyw5MDAsODAwLDcwMCw2MDAsNTAwLDQwMCwzMDAsMjAwLDEwMCw5MCw4MCw3MCw2MCw1MCw0MCwzMCwyMCwxMCw5LDgsNyw2LDUsNCwzLDIsMV0sdmFsdWVzOmDVlC7Vky7Vki7VkS7VkC7Vjy7Vji7VjS7VjC7Viy7Vii7ViS7ViC7Vhy7Vhi7VhS7VhC7Vgy7Vgi7VgS7VgC7Uvy7Uvi7UvS7UvC7Uuy7Uui7UuS7UuC7Uty7Uti7UtS7UtC7Usy7Usi7UsWAuc3BsaXQoYC5gKX0sVnM9e2ludGVnZXJzOlsxZTQsOWUzLDhlMyw3ZTMsNmUzLDVlMyw0ZTMsM2UzLDJlMywxZTMsNDAwLDMwMCwyMDAsMTAwLDkwLDgwLDcwLDYwLDUwLDQwLDMwLDIwLDE5LDE4LDE3LDE2LDE1LDEwLDksOCw3LDYsNSw0LDMsMiwxXSx2YWx1ZXM6YNeZ17Mu15jXsy7Xl9ezLteW17Mu15XXsy7XlNezLteT17Mu15LXsy7XkdezLteQ17Mu16ou16ku16gu16cu16Yu16Qu16Iu16Eu16Au154u15wu15su15nXmC7XmdeXLteZ15Yu15jXli7XmNeVLteZLteYLteXLteWLteVLteULteTLteSLteRLteQYC5zcGxpdChgLmApfSxIcz17aW50ZWdlcnM6WzFlNCw5ZTMsOGUzLDdlMyw2ZTMsNWUzLDRlMywzZTMsMmUzLDFlMyw5MDAsODAwLDcwMCw2MDAsNTAwLDQwMCwzMDAsMjAwLDEwMCw5MCw4MCw3MCw2MCw1MCw0MCwzMCwyMCwxMCw5LDgsNyw2LDUsNCwzLDIsMV0sdmFsdWVzOmDhg7Uu4YOwLuGDry7hg7Qu4YOuLuGDrS7hg6wu4YOrLuGDqi7hg6ku4YOoLuGDpy7hg6Yu4YOlLuGDpC7hg7Mu4YOiLuGDoS7hg6Au4YOfLuGDni7hg50u4YOyLuGDnC7hg5su4YOaLuGDmS7hg5gu4YOXLuGDsS7hg5Yu4YOVLuGDlC7hg5Mu4YOSLuGDkS7hg5BgLnNwbGl0KGAuYCl9LFVzPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXtyZXR1cm4gZTx0fHxlPm4/bmMoZSxpLGEubGVuZ3RoPjApOnIuaW50ZWdlcnMucmVkdWNlKGZ1bmN0aW9uKHQsbixpKXtmb3IoO2U+PW47KWUtPW4sdCs9ci52YWx1ZXNbaV07cmV0dXJuIHR9LGBgKSthfSxXcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1gYDtkbyBufHxlLS0saT1yKGUpK2ksZS89dDt3aGlsZShlKnQ+PXQpO3JldHVybiBpfSxHcz1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhPW4tdCsxO3JldHVybihlPDA/YC1gOmBgKSsoV3MoTWF0aC5hYnMoZSksYSxyLGZ1bmN0aW9uKGUpe3JldHVybiB1KE1hdGguZmxvb3IoZSVhKSt0KX0pK2kpfSxLcz1mdW5jdGlvbihlLHQsbil7bj09PXZvaWQgMCYmKG49YC4gYCk7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIFdzKE1hdGguYWJzKGUpLHIsITEsZnVuY3Rpb24oZSl7cmV0dXJuIHRbTWF0aC5mbG9vcihlJXIpXX0pK259LHFzPTEsSnM9MixZcz00LFhzPTgsWnM9ZnVuY3Rpb24oZSx0LG4scixpLGEpe2lmKGU8LTk5OTl8fGU+OTk5OSlyZXR1cm4gbmMoZSw0LGkubGVuZ3RoPjApO3ZhciBvPU1hdGguYWJzKGUpLHM9aTtpZihvPT09MClyZXR1cm4gdFswXStzO2Zvcih2YXIgYz0wO28+MCYmYzw9NDtjKyspe3ZhciBsPW8lMTA7bD09PTAmJmhhKGEscXMpJiZzIT09YGA/cz10W2xdK3M6bD4xfHxsPT09MSYmYz09PTB8fGw9PT0xJiZjPT09MSYmaGEoYSxKcyl8fGw9PT0xJiZjPT09MSYmaGEoYSxZcykmJmU+MTAwfHxsPT09MSYmYz4xJiZoYShhLFhzKT9zPXRbbF0rKGM+MD9uW2MtMV06YGApK3M6bD09PTEmJmM+MCYmKHM9bltjLTFdK3MpLG89TWF0aC5mbG9vcihvLzEwKX1yZXR1cm4oZTwwP3I6YGApK3N9LFFzPWDljYHnmb7ljYPokKxgLCRzPWDmi77kvbDku5/okKxgLGVjPWDjg57jgqTjg4rjgrlgLHRjPWDrp4jsnbTrhIjsiqRgLG5jPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uP2AuIGA6YGAsaT1uP2DjgIFgOmBgLGE9bj9gLCBgOmBgLG89bj9gIGA6YGA7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm5g4oCiYCtvO2Nhc2UgMTpyZXR1cm5g4pemYCtvO2Nhc2UgMjpyZXR1cm5g4pe+YCtvO2Nhc2UgNTp2YXIgcz1HcyhlLDQ4LDU3LCEwLHIpO3JldHVybiBzLmxlbmd0aDw0P2AwYCtzOnM7Y2FzZSA0OnJldHVybiBLcyhlLGDjgIfkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ1gLGkpO2Nhc2UgNjpyZXR1cm4gVXMoZSwxLDM5OTksenMsMyxyKS50b0xvd2VyQ2FzZSgpO2Nhc2UgNzpyZXR1cm4gVXMoZSwxLDM5OTksenMsMyxyKTtjYXNlIDg6cmV0dXJuIEdzKGUsOTQ1LDk2OSwhMSxyKTtjYXNlIDk6cmV0dXJuIEdzKGUsOTcsMTIyLCExLHIpO2Nhc2UgMTA6cmV0dXJuIEdzKGUsNjUsOTAsITEscik7Y2FzZSAxMTpyZXR1cm4gR3MoZSwxNjMyLDE2NDEsITAscik7Y2FzZSAxMjpjYXNlIDQ5OnJldHVybiBVcyhlLDEsOTk5OSxCcywzLHIpO2Nhc2UgMzU6cmV0dXJuIFVzKGUsMSw5OTk5LEJzLDMscikudG9Mb3dlckNhc2UoKTtjYXNlIDEzOnJldHVybiBHcyhlLDI1MzQsMjU0MywhMCxyKTtjYXNlIDE0OmNhc2UgMzA6cmV0dXJuIEdzKGUsNjExMiw2MTIxLCEwLHIpO2Nhc2UgMTU6cmV0dXJuIEtzKGUsYOWtkOS4keWvheWNr+i+sOW3s+WNiOacqueUs+mFieaIjOS6pWAsaSk7Y2FzZSAxNjpyZXR1cm4gS3MoZSxg55Sy5LmZ5LiZ5LiB5oiK5bex5bqa6L6b5aOs55m4YCxpKTtjYXNlIDE3OmNhc2UgNDg6cmV0dXJuIFpzKGUsYOmbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5nWAsUXMsYOiyoGAsaSxKc3xZc3xYcyk7Y2FzZSA0NzpyZXR1cm4gWnMoZSxg6Zu25aO56LKz5Y+D6IKG5LyN6Zm45p+S5o2M546WYCwkcyxg6LKgYCxpLHFzfEpzfFlzfFhzKTtjYXNlIDQyOnJldHVybiBacyhlLGDpm7bkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ1gLFFzLGDotJ9gLGksSnN8WXN8WHMpO2Nhc2UgNDE6cmV0dXJuIFpzKGUsYOmbtuWjuei0sOWPgeiChuS8jemZhuafkuaNjOeOlmAsJHMsYOi0n2AsaSxxc3xKc3xZc3xYcyk7Y2FzZSAyNjpyZXR1cm4gWnMoZSxg44CH5LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5LmdYCxg5Y2B55m+5Y2D5LiHYCxlYyxpLDApO2Nhc2UgMjU6cmV0dXJuIFpzKGUsYOmbtuWjseW8kOWPguWbm+S8jeWFreS4g+WFq+S5nWAsYOaLvueZvuWNg+S4h2AsZWMsaSxxc3xKc3xZcyk7Y2FzZSAzMTpyZXR1cm4gWnMoZSxg7JiB7J287J207IK87IKs7Jik7Jyh7Lmg7YyU6rWsYCxg7Iut67Cx7LKc66eMYCx0YyxhLHFzfEpzfFlzKTtjYXNlIDMzOnJldHVybiBacyhlLGDpm7bkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ1gLGDljYHnmb7ljYPokKxgLHRjLGEsMCk7Y2FzZSAzMjpyZXR1cm4gWnMoZSxg6Zu25aO56LKz5Y+D5Zub5LqU5YWt5LiD5YWr5LmdYCxg5ou+55m+5Y2DYCx0YyxhLHFzfEpzfFlzKTtjYXNlIDE4OnJldHVybiBHcyhlLDI0MDYsMjQxNSwhMCxyKTtjYXNlIDIwOnJldHVybiBVcyhlLDEsMTk5OTksSHMsMyxyKTtjYXNlIDIxOnJldHVybiBHcyhlLDI3OTAsMjc5OSwhMCxyKTtjYXNlIDIyOnJldHVybiBHcyhlLDI2NjIsMjY3MSwhMCxyKTtjYXNlIDIyOnJldHVybiBVcyhlLDEsMTA5OTksVnMsMyxyKTtjYXNlIDIzOnJldHVybiBLcyhlLGDjgYLjgYTjgYbjgYjjgYrjgYvjgY3jgY/jgZHjgZPjgZXjgZfjgZnjgZvjgZ3jgZ/jgaHjgaTjgabjgajjgarjgavjgazjga3jga7jga/jgbLjgbXjgbjjgbvjgb7jgb/jgoDjgoHjgoLjgoTjgobjgojjgonjgorjgovjgozjgo3jgo/jgpDjgpHjgpLjgpNgKTtjYXNlIDI0OnJldHVybiBLcyhlLGDjgYTjgo3jga/jgavjgbvjgbjjgajjgaHjgorjgazjgovjgpLjgo/jgYvjgojjgZ/jgozjgZ3jgaTjga3jgarjgonjgoDjgYbjgpDjga7jgYrjgY/jgoTjgb7jgZHjgbXjgZPjgYjjgabjgYLjgZXjgY3jgobjgoHjgb/jgZfjgpHjgbLjgoLjgZvjgZlgKTtjYXNlIDI3OnJldHVybiBHcyhlLDMzMDIsMzMxMSwhMCxyKTtjYXNlIDI4OnJldHVybiBLcyhlLGDjgqLjgqTjgqbjgqjjgqrjgqvjgq3jgq/jgrHjgrPjgrXjgrfjgrnjgrvjgr3jgr/jg4Hjg4Tjg4bjg4jjg4rjg4vjg4zjg43jg47jg4/jg5Ljg5Xjg5jjg5vjg57jg5/jg6Djg6Hjg6Ljg6Tjg6bjg6jjg6njg6rjg6vjg6zjg63jg6/jg7Djg7Hjg7Ljg7NgLGkpO2Nhc2UgMjk6cmV0dXJuIEtzKGUsYOOCpOODreODj+ODi+ODm+ODmOODiOODgeODquODjOODq+ODsuODr+OCq+ODqOOCv+ODrOOCveODhOODjeODiuODqeODoOOCpuODsOODjuOCquOCr+ODpOODnuOCseODleOCs+OCqOODhuOCouOCteOCreODpuODoeODn+OCt+ODseODkuODouOCu+OCuWAsaSk7Y2FzZSAzNDpyZXR1cm4gR3MoZSwzNzkyLDM4MDEsITAscik7Y2FzZSAzNzpyZXR1cm4gR3MoZSw2MTYwLDYxNjksITAscik7Y2FzZSAzODpyZXR1cm4gR3MoZSw0MTYwLDQxNjksITAscik7Y2FzZSAzOTpyZXR1cm4gR3MoZSwyOTE4LDI5MjcsITAscik7Y2FzZSA0MDpyZXR1cm4gR3MoZSwxNzc2LDE3ODUsITAscik7Y2FzZSA0MzpyZXR1cm4gR3MoZSwzMDQ2LDMwNTUsITAscik7Y2FzZSA0NDpyZXR1cm4gR3MoZSwzMTc0LDMxODMsITAscik7Y2FzZSA0NTpyZXR1cm4gR3MoZSwzNjY0LDM2NzMsITAscik7Y2FzZSA0NjpyZXR1cm4gR3MoZSwzODcyLDM4ODEsITAscik7ZGVmYXVsdDpyZXR1cm4gR3MoZSw0OCw1NywhMCxyKX19LHJjPWBkYXRhLWh0bWwyY2FudmFzLWlnbm9yZWAsaWM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXtpZih0aGlzLmNvbnRleHQ9ZSx0aGlzLm9wdGlvbnM9bix0aGlzLnNjcm9sbGVkRWxlbWVudHM9W10sdGhpcy5yZWZlcmVuY2VFbGVtZW50PXQsdGhpcy5jb3VudGVycz1uZXcgUnMsdGhpcy5xdW90ZURlcHRoPTAsIXQub3duZXJEb2N1bWVudCl0aHJvdyBFcnJvcihgQ2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBvd25lciBkb2N1bWVudGApO3RoaXMuZG9jdW1lbnRFbGVtZW50PXRoaXMuY2xvbmVOb2RlKHQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsITEpfXJldHVybiBlLnByb3RvdHlwZS50b0lGcmFtZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMsYT1vYyhlLHQpO2lmKCFhLmNvbnRlbnRXaW5kb3cpcmV0dXJuIFByb21pc2UucmVqZWN0KGBVbmFibGUgdG8gZmluZCBpZnJhbWUgd2luZG93YCk7dmFyIG89ZS5kZWZhdWx0Vmlldy5wYWdlWE9mZnNldCxzPWUuZGVmYXVsdFZpZXcucGFnZVlPZmZzZXQsYz1hLmNvbnRlbnRXaW5kb3csbD1jLmRvY3VtZW50LHU9bGMoYSkudGhlbihmdW5jdGlvbigpe3JldHVybiByKG4sdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGkodGhpcyxmdW5jdGlvbihyKXtzd2l0Y2goci5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnNjcm9sbGVkRWxlbWVudHMuZm9yRWFjaChtYyksYyYmKGMuc2Nyb2xsVG8odC5sZWZ0LHQudG9wKSwvKGlQYWR8aVBob25lfGlQb2QpL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmKGMuc2Nyb2xsWSE9PXQudG9wfHxjLnNjcm9sbFghPT10LmxlZnQpJiYodGhpcy5jb250ZXh0LmxvZ2dlci53YXJuKGBVbmFibGUgdG8gcmVzdG9yZSBzY3JvbGwgcG9zaXRpb24gZm9yIGNsb25lZCBkb2N1bWVudGApLHRoaXMuY29udGV4dC53aW5kb3dCb3VuZHM9dGhpcy5jb250ZXh0LndpbmRvd0JvdW5kcy5hZGQoYy5zY3JvbGxYLXQubGVmdCxjLnNjcm9sbFktdC50b3AsMCwwKSkpLGU9dGhpcy5vcHRpb25zLm9uY2xvbmUsbj10aGlzLmNsb25lZFJlZmVyZW5jZUVsZW1lbnQsbj09PXZvaWQgMD9bMixQcm9taXNlLnJlamVjdChgRXJyb3IgZmluZGluZyB0aGUgYCt0aGlzLnJlZmVyZW5jZUVsZW1lbnQubm9kZU5hbWUrYCBpbiB0aGUgY2xvbmVkIGRvY3VtZW50YCldOmwuZm9udHMmJmwuZm9udHMucmVhZHk/WzQsbC5mb250cy5yZWFkeV06WzMsMl07Y2FzZSAxOnIuc2VudCgpLHIubGFiZWw9MjtjYXNlIDI6cmV0dXJuLyhBcHBsZVdlYktpdCkvZy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP1s0LGNjKGwpXTpbMyw0XTtjYXNlIDM6ci5zZW50KCksci5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/WzIsUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBlKGwsbil9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KV06WzIsYV19fSl9KX0pO3JldHVybiBsLm9wZW4oKSxsLndyaXRlKGZjKGRvY3VtZW50LmRvY3R5cGUpK2A8aHRtbD48L2h0bWw+YCkscGModGhpcy5yZWZlcmVuY2VFbGVtZW50Lm93bmVyRG9jdW1lbnQsbyxzKSxsLnJlcGxhY2VDaGlsZChsLmFkb3B0Tm9kZSh0aGlzLmRvY3VtZW50RWxlbWVudCksbC5kb2N1bWVudEVsZW1lbnQpLGwuY2xvc2UoKSx1fSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50Q2xvbmU9ZnVuY3Rpb24oZSl7aWYoamEoZSwyKSlkZWJ1Z2dlcjtpZihPcyhlKSlyZXR1cm4gdGhpcy5jcmVhdGVDYW52YXNDbG9uZShlKTtpZihrcyhlKSlyZXR1cm4gdGhpcy5jcmVhdGVWaWRlb0Nsb25lKGUpO2lmKE1zKGUpKXJldHVybiB0aGlzLmNyZWF0ZVN0eWxlQ2xvbmUoZSk7dmFyIHQ9ZS5jbG9uZU5vZGUoITEpO3JldHVybiBBcyh0KSYmKEFzKGUpJiZlLmN1cnJlbnRTcmMmJmUuY3VycmVudFNyYyE9PWUuc3JjJiYodC5zcmM9ZS5jdXJyZW50U3JjLHQuc3Jjc2V0PWBgKSx0LmxvYWRpbmc9PT1gbGF6eWAmJih0LmxvYWRpbmc9YGVhZ2VyYCkpLExzKHQpP3RoaXMuY3JlYXRlQ3VzdG9tRWxlbWVudENsb25lKHQpOnR9LGUucHJvdG90eXBlLmNyZWF0ZUN1c3RvbUVsZW1lbnRDbG9uZT1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBodG1sMmNhbnZhc2N1c3RvbWVsZW1lbnRgKTtyZXR1cm4gZGMoZS5zdHlsZSx0KSx0fSxlLnByb3RvdHlwZS5jcmVhdGVTdHlsZUNsb25lPWZ1bmN0aW9uKGUpe3RyeXt2YXIgdD1lLnNoZWV0O2lmKHQmJnQuY3NzUnVsZXMpe3ZhciBuPVtdLnNsaWNlLmNhbGwodC5jc3NSdWxlcywwKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCYmdHlwZW9mIHQuY3NzVGV4dD09YHN0cmluZ2A/ZSt0LmNzc1RleHQ6ZX0sYGApLHI9ZS5jbG9uZU5vZGUoITEpO3JldHVybiByLnRleHRDb250ZW50PW4scn19Y2F0Y2goZSl7aWYodGhpcy5jb250ZXh0LmxvZ2dlci5lcnJvcihgVW5hYmxlIHRvIGFjY2VzcyBjc3NSdWxlcyBwcm9wZXJ0eWAsZSksZS5uYW1lIT09YFNlY3VyaXR5RXJyb3JgKXRocm93IGV9cmV0dXJuIGUuY2xvbmVOb2RlKCExKX0sZS5wcm90b3R5cGUuY3JlYXRlQ2FudmFzQ2xvbmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLmlubGluZUltYWdlcyYmZS5vd25lckRvY3VtZW50KXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChgaW1nYCk7dHJ5e3JldHVybiB0LnNyYz1lLnRvRGF0YVVSTCgpLHR9Y2F0Y2h7dGhpcy5jb250ZXh0LmxvZ2dlci5pbmZvKGBVbmFibGUgdG8gaW5saW5lIGNhbnZhcyBjb250ZW50cywgY2FudmFzIGlzIHRhaW50ZWRgLGUpfX12YXIgbj1lLmNsb25lTm9kZSghMSk7dHJ5e24ud2lkdGg9ZS53aWR0aCxuLmhlaWdodD1lLmhlaWdodDt2YXIgcj1lLmdldENvbnRleHQoYDJkYCksaT1uLmdldENvbnRleHQoYDJkYCk7aWYoaSlpZighdGhpcy5vcHRpb25zLmFsbG93VGFpbnQmJnIpaS5wdXRJbWFnZURhdGEoci5nZXRJbWFnZURhdGEoMCwwLGUud2lkdGgsZS5oZWlnaHQpLDAsMCk7ZWxzZXt2YXIgYT1lLmdldENvbnRleHQoYHdlYmdsMmApPz9lLmdldENvbnRleHQoYHdlYmdsYCk7YSYmYS5nZXRDb250ZXh0QXR0cmlidXRlcygpPy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9PT0hMSYmdGhpcy5jb250ZXh0LmxvZ2dlci53YXJuKGBVbmFibGUgdG8gY2xvbmUgV2ViR0wgY29udGV4dCBhcyBpdCBoYXMgcHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlYCxlKSxpLmRyYXdJbWFnZShlLDAsMCl9cmV0dXJuIG59Y2F0Y2h7dGhpcy5jb250ZXh0LmxvZ2dlci5pbmZvKGBVbmFibGUgdG8gY2xvbmUgY2FudmFzIGFzIGl0IGlzIHRhaW50ZWRgLGUpfXJldHVybiBufSxlLnByb3RvdHlwZS5jcmVhdGVWaWRlb0Nsb25lPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGBjYW52YXNgKTt0LndpZHRoPWUub2Zmc2V0V2lkdGgsdC5oZWlnaHQ9ZS5vZmZzZXRIZWlnaHQ7dmFyIG49dC5nZXRDb250ZXh0KGAyZGApO3RyeXtyZXR1cm4gbiYmKG4uZHJhd0ltYWdlKGUsMCwwLHQud2lkdGgsdC5oZWlnaHQpLHRoaXMub3B0aW9ucy5hbGxvd1RhaW50fHxuLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCkpLHR9Y2F0Y2h7dGhpcy5jb250ZXh0LmxvZ2dlci5pbmZvKGBVbmFibGUgdG8gY2xvbmUgdmlkZW8gYXMgaXQgaXMgdGFpbnRlZGAsZSl9dmFyIHI9ZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGNhbnZhc2ApO3JldHVybiByLndpZHRoPWUub2Zmc2V0V2lkdGgsci5oZWlnaHQ9ZS5vZmZzZXRIZWlnaHQscn0sZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGROb2RlPWZ1bmN0aW9uKGUsdCxuKXsoIXlzKHQpfHwhTnModCkmJiF0Lmhhc0F0dHJpYnV0ZShyYykmJih0eXBlb2YgdGhpcy5vcHRpb25zLmlnbm9yZUVsZW1lbnRzIT1gZnVuY3Rpb25gfHwhdGhpcy5vcHRpb25zLmlnbm9yZUVsZW1lbnRzKHQpKSkmJighdGhpcy5vcHRpb25zLmNvcHlTdHlsZXN8fCF5cyh0KXx8IU1zKHQpKSYmZS5hcHBlbmRDaGlsZCh0aGlzLmNsb25lTm9kZSh0LG4pKX0sZS5wcm90b3R5cGUuY2xvbmVDaGlsZE5vZGVzPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGhpcyxpPWUuc2hhZG93Um9vdD9lLnNoYWRvd1Jvb3QuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoeXMoaSkmJklzKGkpJiZ0eXBlb2YgaS5hc3NpZ25lZE5vZGVzPT1gZnVuY3Rpb25gKXt2YXIgYT1pLmFzc2lnbmVkTm9kZXMoKTthLmxlbmd0aCYmYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiByLmFwcGVuZENoaWxkTm9kZSh0LGUsbil9KX1lbHNlIHRoaXMuYXBwZW5kQ2hpbGROb2RlKHQsaSxuKX0sZS5wcm90b3R5cGUuY2xvbmVOb2RlPWZ1bmN0aW9uKGUsdCl7aWYodnMoZSkpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuZGF0YSk7aWYoIWUub3duZXJEb2N1bWVudClyZXR1cm4gZS5jbG9uZU5vZGUoITEpO3ZhciBuPWUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztpZihuJiZ5cyhlKSYmKGJzKGUpfHx4cyhlKSkpe3ZhciByPXRoaXMuY3JlYXRlRWxlbWVudENsb25lKGUpO3Iuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PWBub25lYDt2YXIgaT1uLmdldENvbXB1dGVkU3R5bGUoZSksYT1uLmdldENvbXB1dGVkU3R5bGUoZSxgOmJlZm9yZWApLG89bi5nZXRDb21wdXRlZFN0eWxlKGUsYDphZnRlcmApO3RoaXMucmVmZXJlbmNlRWxlbWVudD09PWUmJmJzKHIpJiYodGhpcy5jbG9uZWRSZWZlcmVuY2VFbGVtZW50PXIpLERzKHIpJiZiYyhyKTt2YXIgcz10aGlzLmNvdW50ZXJzLnBhcnNlKG5ldyBPYSh0aGlzLmNvbnRleHQsaSkpLGM9dGhpcy5yZXNvbHZlUHNldWRvQ29udGVudChlLHIsYSxhYy5CRUZPUkUpO0xzKGUpJiYodD0hMCksa3MoZSl8fHRoaXMuY2xvbmVDaGlsZE5vZGVzKGUscix0KSxjJiZyLmluc2VydEJlZm9yZShjLHIuZmlyc3RDaGlsZCk7dmFyIGw9dGhpcy5yZXNvbHZlUHNldWRvQ29udGVudChlLHIsbyxhYy5BRlRFUik7cmV0dXJuIGwmJnIuYXBwZW5kQ2hpbGQobCksdGhpcy5jb3VudGVycy5wb3AocyksKGkmJih0aGlzLm9wdGlvbnMuY29weVN0eWxlc3x8eHMoZSkpJiYhanMoZSl8fHQpJiZkYyhpLHIpLChlLnNjcm9sbFRvcCE9PTB8fGUuc2Nyb2xsTGVmdCE9PTApJiZ0aGlzLnNjcm9sbGVkRWxlbWVudHMucHVzaChbcixlLnNjcm9sbExlZnQsZS5zY3JvbGxUb3BdKSwoUHMoZSl8fEZzKGUpKSYmKFBzKHIpfHxGcyhyKSkmJihyLnZhbHVlPWUudmFsdWUpLHJ9cmV0dXJuIGUuY2xvbmVOb2RlKCExKX0sZS5wcm90b3R5cGUucmVzb2x2ZVBzZXVkb0NvbnRlbnQ9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztpZihuKXt2YXIgYT1uLmNvbnRlbnQsbz10Lm93bmVyRG9jdW1lbnQ7aWYoISghb3x8IWF8fGE9PT1gbm9uZWB8fGE9PT1gLW1vei1hbHQtY29udGVudGB8fG4uZGlzcGxheT09PWBub25lYCkpe3RoaXMuY291bnRlcnMucGFyc2UobmV3IE9hKHRoaXMuY29udGV4dCxuKSk7dmFyIHM9bmV3IERhKHRoaXMuY29udGV4dCxuKSxjPW8uY3JlYXRlRWxlbWVudChgaHRtbDJjYW52YXNwc2V1ZG9lbGVtZW50YCk7ZGMobixjKSxzLmNvbnRlbnQuZm9yRWFjaChmdW5jdGlvbih0KXtpZih0LnR5cGU9PT0wKWMuYXBwZW5kQ2hpbGQoby5jcmVhdGVUZXh0Tm9kZSh0LnZhbHVlKSk7ZWxzZSBpZih0LnR5cGU9PT0yMil7dmFyIG49by5jcmVhdGVFbGVtZW50KGBpbWdgKTtuLnNyYz10LnZhbHVlLG4uc3R5bGUub3BhY2l0eT1gMWAsYy5hcHBlbmRDaGlsZChuKX1lbHNlIGlmKHQudHlwZT09PTE4KXtpZih0Lm5hbWU9PT1gYXR0cmApe3ZhciByPXQudmFsdWVzLmZpbHRlcihIbik7ci5sZW5ndGgmJmMuYXBwZW5kQ2hpbGQoby5jcmVhdGVUZXh0Tm9kZShlLmdldEF0dHJpYnV0ZShyWzBdLnZhbHVlKXx8YGApKX1lbHNlIGlmKHQubmFtZT09PWBjb3VudGVyYCl7dmFyIGE9dC52YWx1ZXMuZmlsdGVyKEtuKSxsPWFbMF0sdT1hWzFdO2lmKGwmJkhuKGwpKXt2YXIgZD1pLmNvdW50ZXJzLmdldENvdW50ZXJWYWx1ZShsLnZhbHVlKSxmPXUmJkhuKHUpP1BpLnBhcnNlKGkuY29udGV4dCx1LnZhbHVlKTozO2MuYXBwZW5kQ2hpbGQoby5jcmVhdGVUZXh0Tm9kZShuYyhkLGYsITEpKSl9fWVsc2UgaWYodC5uYW1lPT09YGNvdW50ZXJzYCl7dmFyIHA9dC52YWx1ZXMuZmlsdGVyKEtuKSxsPXBbMF0sbT1wWzFdLHU9cFsyXTtpZihsJiZIbihsKSl7dmFyIGg9aS5jb3VudGVycy5nZXRDb3VudGVyVmFsdWVzKGwudmFsdWUpLGc9dSYmSG4odSk/UGkucGFyc2UoaS5jb250ZXh0LHUudmFsdWUpOjMsXz1tJiZtLnR5cGU9PT0wP20udmFsdWU6YGAsdj1oLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmMoZSxnLCExKX0pLmpvaW4oXyk7Yy5hcHBlbmRDaGlsZChvLmNyZWF0ZVRleHROb2RlKHYpKX19fWVsc2UgaWYodC50eXBlPT09MjApc3dpdGNoKHQudmFsdWUpe2Nhc2Vgb3Blbi1xdW90ZWA6Yy5hcHBlbmRDaGlsZChvLmNyZWF0ZVRleHROb2RlKHhhKHMucXVvdGVzLGkucXVvdGVEZXB0aCsrLCEwKSkpO2JyZWFrO2Nhc2VgY2xvc2UtcXVvdGVgOmMuYXBwZW5kQ2hpbGQoby5jcmVhdGVUZXh0Tm9kZSh4YShzLnF1b3RlcywtLWkucXVvdGVEZXB0aCwhMSkpKTticmVhaztkZWZhdWx0OmMuYXBwZW5kQ2hpbGQoby5jcmVhdGVUZXh0Tm9kZSh0LnZhbHVlKSl9fSksYy5jbGFzc05hbWU9X2MrYCBgK3ZjO3ZhciBsPXI9PT1hYy5CRUZPUkU/YCBgK19jOmAgYCt2YztyZXR1cm4geHModCk/dC5jbGFzc05hbWUuYmFzZVZhbHVlKz1sOnQuY2xhc3NOYW1lKz1sLGN9fX0sZS5kZXN0cm95PWZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGU/KGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSwhMCk6ITF9LGV9KCksYWM7KGZ1bmN0aW9uKGUpe2VbZS5CRUZPUkU9MF09YEJFRk9SRWAsZVtlLkFGVEVSPTFdPWBBRlRFUmB9KShhY3x8PXt9KTt2YXIgb2M9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNyZWF0ZUVsZW1lbnQoYGlmcmFtZWApO3JldHVybiBuLmNsYXNzTmFtZT1gaHRtbDJjYW52YXMtY29udGFpbmVyYCxuLnN0eWxlLnZpc2liaWxpdHk9YGhpZGRlbmAsbi5zdHlsZS5wb3NpdGlvbj1gZml4ZWRgLG4uc3R5bGUubGVmdD1gLTEwMDAwcHhgLG4uc3R5bGUudG9wPWAwcHhgLG4uc3R5bGUuYm9yZGVyPWAwYCxuLndpZHRoPXQud2lkdGgudG9TdHJpbmcoKSxuLmhlaWdodD10LmhlaWdodC50b1N0cmluZygpLG4uc2Nyb2xsaW5nPWBub2Asbi5zZXRBdHRyaWJ1dGUocmMsYHRydWVgKSxlLmJvZHkuYXBwZW5kQ2hpbGQobiksbn0sc2M9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe2lmKGUuY29tcGxldGUpe3QoKTtyZXR1cm59aWYoIWUuc3JjKXt0KCk7cmV0dXJufWUub25sb2FkPXQsZS5vbmVycm9yPXR9KX0sY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKFtdLnNsaWNlLmNhbGwoZS5pbWFnZXMsMCkubWFwKHNjKSl9LGxjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe3ZhciByPWUuY29udGVudFdpbmRvdztpZighcilyZXR1cm4gbihgTm8gd2luZG93IGFzc2lnbmVkIGZvciBpZnJhbWVgKTt2YXIgaT1yLmRvY3VtZW50O3Iub25sb2FkPWUub25sb2FkPWZ1bmN0aW9uKCl7ci5vbmxvYWQ9ZS5vbmxvYWQ9bnVsbDt2YXIgbj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2kuYm9keS5jaGlsZE5vZGVzLmxlbmd0aD4wJiZpLnJlYWR5U3RhdGU9PT1gY29tcGxldGVgJiYoY2xlYXJJbnRlcnZhbChuKSx0KGUpKX0sNTApfX0pfSx1Yz1bYGFsbGAsYGRgLGBjb250ZW50YF0sZGM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZS5pdGVtKG4pO3VjLmluZGV4T2Yocik9PT0tMSYmdC5zdHlsZS5zZXRQcm9wZXJ0eShyLGUuZ2V0UHJvcGVydHlWYWx1ZShyKSl9cmV0dXJuIHR9LGZjPWZ1bmN0aW9uKGUpe3ZhciB0PWBgO3JldHVybiBlJiYodCs9YDwhRE9DVFlQRSBgLGUubmFtZSYmKHQrPWUubmFtZSksZS5pbnRlcm5hbFN1YnNldCYmKHQrPWUuaW50ZXJuYWxTdWJzZXQpLGUucHVibGljSWQmJih0Kz1gImArZS5wdWJsaWNJZCtgImApLGUuc3lzdGVtSWQmJih0Kz1gImArZS5zeXN0ZW1JZCtgImApLHQrPWA+YCksdH0scGM9ZnVuY3Rpb24oZSx0LG4pe2UmJmUuZGVmYXVsdFZpZXcmJih0IT09ZS5kZWZhdWx0Vmlldy5wYWdlWE9mZnNldHx8biE9PWUuZGVmYXVsdFZpZXcucGFnZVlPZmZzZXQpJiZlLmRlZmF1bHRWaWV3LnNjcm9sbFRvKHQsbil9LG1jPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9ZVsyXTt0LnNjcm9sbExlZnQ9bix0LnNjcm9sbFRvcD1yfSxoYz1gOmJlZm9yZWAsZ2M9YDphZnRlcmAsX2M9YF9fX2h0bWwyY2FudmFzX19fcHNldWRvZWxlbWVudF9iZWZvcmVgLHZjPWBfX19odG1sMmNhbnZhc19fX3BzZXVkb2VsZW1lbnRfYWZ0ZXJgLHljPWB7CiAgICBjb250ZW50OiAiIiAhaW1wb3J0YW50OwogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9YCxiYz1mdW5jdGlvbihlKXt4YyhlLGAuYCtfYytoYyt5YytgCiAgICAgICAgIC5gK3ZjK2djK3ljKX0seGM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm93bmVyRG9jdW1lbnQ7aWYobil7dmFyIHI9bi5jcmVhdGVFbGVtZW50KGBzdHlsZWApO3IudGV4dENvbnRlbnQ9dCxlLmFwcGVuZENoaWxkKHIpfX0sU2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmdldE9yaWdpbj1mdW5jdGlvbih0KXt2YXIgbj1lLl9saW5rO3JldHVybiBuPyhuLmhyZWY9dCxuLmhyZWY9bi5ocmVmLG4ucHJvdG9jb2wrbi5ob3N0bmFtZStuLnBvcnQpOmBhYm91dDpibGFua2B9LGUuaXNTYW1lT3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBlLmdldE9yaWdpbih0KT09PWUuX29yaWdpbn0sZS5zZXRDb250ZXh0PWZ1bmN0aW9uKHQpe2UuX2xpbms9dC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBhYCksZS5fb3JpZ2luPWUuZ2V0T3JpZ2luKHQubG9jYXRpb24uaHJlZil9LGUuX29yaWdpbj1gYWJvdXQ6YmxhbmtgLGV9KCksQ2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jb250ZXh0PWUsdGhpcy5fb3B0aW9ucz10LHRoaXMuX2NhY2hlPXt9fXJldHVybiBlLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbihlKXt2YXIgdD1Qcm9taXNlLnJlc29sdmUoKTtyZXR1cm4gdGhpcy5oYXMoZSl8fChBYyhlKXx8RGMoZSkpJiYodGhpcy5fY2FjaGVbZV09dGhpcy5sb2FkSW1hZ2UoZSkpLmNhdGNoKGZ1bmN0aW9uKCl7fSksdH0sZS5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NhY2hlW2VdfSxlLnByb3RvdHlwZS5sb2FkSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbz10aGlzO3JldHVybiBpKHRoaXMsZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdD1TYy5pc1NhbWVPcmlnaW4oZSksbj0hT2MoZSkmJnRoaXMuX29wdGlvbnMudXNlQ09SUz09PSEwJiZGby5TVVBQT1JUX0NPUlNfSU1BR0VTJiYhdCxyPSFPYyhlKSYmIXQmJiFBYyhlKSYmdHlwZW9mIHRoaXMuX29wdGlvbnMucHJveHk9PWBzdHJpbmdgJiZGby5TVVBQT1JUX0NPUlNfWEhSJiYhbiwhdCYmdGhpcy5fb3B0aW9ucy5hbGxvd1RhaW50PT09ITEmJiFPYyhlKSYmIUFjKGUpJiYhciYmIW4/WzJdOihhPWUscj9bNCx0aGlzLnByb3h5KGEpXTpbMywyXSk7Y2FzZSAxOmE9aS5zZW50KCksaS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb250ZXh0LmxvZ2dlci5kZWJ1ZyhgQWRkZWQgaW1hZ2UgYCtlLnN1YnN0cmluZygwLDI1NikpLFs0LG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IEltYWdlO3Iub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIGUocil9LHIub25lcnJvcj10LChrYyhhKXx8bikmJihyLmNyb3NzT3JpZ2luPWBhbm9ueW1vdXNgKSxyLnNyYz1hLHIuY29tcGxldGU9PT0hMCYmc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlKHIpfSw1MDApLG8uX29wdGlvbnMuaW1hZ2VUaW1lb3V0PjAmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdChgVGltZWQgb3V0IChgK28uX29wdGlvbnMuaW1hZ2VUaW1lb3V0K2BtcykgbG9hZGluZyBpbWFnZWApfSxvLl9vcHRpb25zLmltYWdlVGltZW91dCl9KV07Y2FzZSAzOnJldHVyblsyLGkuc2VudCgpXX19KX0pfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NhY2hlW2VdIT09dm9pZCAwfSxlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShPYmplY3Qua2V5cyh0aGlzLl9jYWNoZSkpfSxlLnByb3RvdHlwZS5wcm94eT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5fb3B0aW9ucy5wcm94eTtpZighbil0aHJvdyBFcnJvcihgTm8gcHJveHkgZGVmaW5lZGApO3ZhciByPWUuc3Vic3RyaW5nKDAsMjU2KTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxhKXt2YXIgbz1Gby5TVVBQT1JUX1JFU1BPTlNFX1RZUEU/YGJsb2JgOmB0ZXh0YCxzPW5ldyBYTUxIdHRwUmVxdWVzdDtzLm9ubG9hZD1mdW5jdGlvbigpe2lmKHMuc3RhdHVzPT09MjAwKWlmKG89PT1gdGV4dGApaShzLnJlc3BvbnNlKTtlbHNle3ZhciBlPW5ldyBGaWxlUmVhZGVyO2UuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsZnVuY3Rpb24oKXtyZXR1cm4gaShlLnJlc3VsdCl9LCExKSxlLmFkZEV2ZW50TGlzdGVuZXIoYGVycm9yYCxmdW5jdGlvbihlKXtyZXR1cm4gYShlKX0sITEpLGUucmVhZEFzRGF0YVVSTChzLnJlc3BvbnNlKX1lbHNlIGEoYEZhaWxlZCB0byBwcm94eSByZXNvdXJjZSBgK3IrYCB3aXRoIHN0YXR1cyBjb2RlIGArcy5zdGF0dXMpfSxzLm9uZXJyb3I9YTt2YXIgYz1uLmluZGV4T2YoYD9gKT4tMT9gJmA6YD9gO2lmKHMub3BlbihgR0VUYCxgYCtuK2MrYHVybD1gK2VuY29kZVVSSUNvbXBvbmVudChlKStgJnJlc3BvbnNlVHlwZT1gK28pLG8hPT1gdGV4dGAmJnMgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCYmKHMucmVzcG9uc2VUeXBlPW8pLHQuX29wdGlvbnMuaW1hZ2VUaW1lb3V0KXt2YXIgbD10Ll9vcHRpb25zLmltYWdlVGltZW91dDtzLnRpbWVvdXQ9bCxzLm9udGltZW91dD1mdW5jdGlvbigpe3JldHVybiBhKGBUaW1lZCBvdXQgKGArbCtgbXMpIHByb3h5aW5nIGArcil9fXMuc2VuZCgpfSl9LGV9KCksd2M9L15kYXRhOmltYWdlXC9zdmdcK3htbC9pLFRjPS9eZGF0YTppbWFnZVwvLio7YmFzZTY0LC9pLEVjPS9eZGF0YTppbWFnZVwvLiovaSxEYz1mdW5jdGlvbihlKXtyZXR1cm4gRm8uU1VQUE9SVF9TVkdfRFJBV0lOR3x8IWpjKGUpfSxPYz1mdW5jdGlvbihlKXtyZXR1cm4gRWMudGVzdChlKX0sa2M9ZnVuY3Rpb24oZSl7cmV0dXJuIFRjLnRlc3QoZSl9LEFjPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN1YnN0cigwLDQpPT09YGJsb2JgfSxqYz1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdWJzdHIoLTMpLnRvTG93ZXJDYXNlKCk9PT1gc3ZnYHx8d2MudGVzdChlKX0sWT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9MCx0aGlzLng9ZSx0aGlzLnk9dH1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHRoaXMueCt0LHRoaXMueStuKX0sZX0oKSxNYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5ldyBZKGUueCsodC54LWUueCkqbixlLnkrKHQueS1lLnkpKm4pfSxOYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy50eXBlPTEsdGhpcy5zdGFydD1lLHRoaXMuc3RhcnRDb250cm9sPXQsdGhpcy5lbmRDb250cm9sPW4sdGhpcy5lbmQ9cn1yZXR1cm4gZS5wcm90b3R5cGUuc3ViZGl2aWRlPWZ1bmN0aW9uKHQsbil7dmFyIHI9TWModGhpcy5zdGFydCx0aGlzLnN0YXJ0Q29udHJvbCx0KSxpPU1jKHRoaXMuc3RhcnRDb250cm9sLHRoaXMuZW5kQ29udHJvbCx0KSxhPU1jKHRoaXMuZW5kQ29udHJvbCx0aGlzLmVuZCx0KSxvPU1jKHIsaSx0KSxzPU1jKGksYSx0KSxjPU1jKG8scyx0KTtyZXR1cm4gbj9uZXcgZSh0aGlzLnN0YXJ0LHIsbyxjKTpuZXcgZShjLHMsYSx0aGlzLmVuZCl9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgZSh0aGlzLnN0YXJ0LmFkZCh0LG4pLHRoaXMuc3RhcnRDb250cm9sLmFkZCh0LG4pLHRoaXMuZW5kQ29udHJvbC5hZGQodCxuKSx0aGlzLmVuZC5hZGQodCxuKSl9LGUucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy5lbmQsdGhpcy5lbmRDb250cm9sLHRoaXMuc3RhcnRDb250cm9sLHRoaXMuc3RhcnQpfSxlfSgpLFBjPWZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0xfSxGYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5zdHlsZXMsbj1lLmJvdW5kcyxyPXRyKHQuYm9yZGVyVG9wTGVmdFJhZGl1cyxuLndpZHRoLG4uaGVpZ2h0KSxpPXJbMF0sYT1yWzFdLG89dHIodC5ib3JkZXJUb3BSaWdodFJhZGl1cyxuLndpZHRoLG4uaGVpZ2h0KSxzPW9bMF0sYz1vWzFdLGw9dHIodC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyxuLndpZHRoLG4uaGVpZ2h0KSx1PWxbMF0sZD1sWzFdLGY9dHIodC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzLG4ud2lkdGgsbi5oZWlnaHQpLHA9ZlswXSxtPWZbMV0saD1bXTtoLnB1c2goKGkrcykvbi53aWR0aCksaC5wdXNoKChwK3UpL24ud2lkdGgpLGgucHVzaCgoYSttKS9uLmhlaWdodCksaC5wdXNoKChjK2QpL24uaGVpZ2h0KTt2YXIgZz1NYXRoLm1heC5hcHBseShNYXRoLGgpO2c+MSYmKGkvPWcsYS89ZyxzLz1nLGMvPWcsdS89ZyxkLz1nLHAvPWcsbS89Zyk7dmFyIF89bi53aWR0aC1zLHY9bi5oZWlnaHQtZCx5PW4ud2lkdGgtdSxiPW4uaGVpZ2h0LW0seD10LmJvcmRlclRvcFdpZHRoLFM9dC5ib3JkZXJSaWdodFdpZHRoLEM9dC5ib3JkZXJCb3R0b21XaWR0aCx3PXQuYm9yZGVyTGVmdFdpZHRoLFQ9cSh0LnBhZGRpbmdUb3AsZS5ib3VuZHMud2lkdGgpLEU9cSh0LnBhZGRpbmdSaWdodCxlLmJvdW5kcy53aWR0aCksRD1xKHQucGFkZGluZ0JvdHRvbSxlLmJvdW5kcy53aWR0aCksTz1xKHQucGFkZGluZ0xlZnQsZS5ib3VuZHMud2lkdGgpO3RoaXMudG9wTGVmdEJvcmRlckRvdWJsZU91dGVyQm94PWk+MHx8YT4wP0xjKG4ubGVmdCt3LzMsbi50b3AreC8zLGktdy8zLGEteC8zLEljLlRPUF9MRUZUKTpuZXcgWShuLmxlZnQrdy8zLG4udG9wK3gvMyksdGhpcy50b3BSaWdodEJvcmRlckRvdWJsZU91dGVyQm94PWk+MHx8YT4wP0xjKG4ubGVmdCtfLG4udG9wK3gvMyxzLVMvMyxjLXgvMyxJYy5UT1BfUklHSFQpOm5ldyBZKG4ubGVmdCtuLndpZHRoLVMvMyxuLnRvcCt4LzMpLHRoaXMuYm90dG9tUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveD11PjB8fGQ+MD9MYyhuLmxlZnQreSxuLnRvcCt2LHUtUy8zLGQtQy8zLEljLkJPVFRPTV9SSUdIVCk6bmV3IFkobi5sZWZ0K24ud2lkdGgtUy8zLG4udG9wK24uaGVpZ2h0LUMvMyksdGhpcy5ib3R0b21MZWZ0Qm9yZGVyRG91YmxlT3V0ZXJCb3g9cD4wfHxtPjA/TGMobi5sZWZ0K3cvMyxuLnRvcCtiLHAtdy8zLG0tQy8zLEljLkJPVFRPTV9MRUZUKTpuZXcgWShuLmxlZnQrdy8zLG4udG9wK24uaGVpZ2h0LUMvMyksdGhpcy50b3BMZWZ0Qm9yZGVyRG91YmxlSW5uZXJCb3g9aT4wfHxhPjA/TGMobi5sZWZ0K3cqMi8zLG4udG9wK3gqMi8zLGktdyoyLzMsYS14KjIvMyxJYy5UT1BfTEVGVCk6bmV3IFkobi5sZWZ0K3cqMi8zLG4udG9wK3gqMi8zKSx0aGlzLnRvcFJpZ2h0Qm9yZGVyRG91YmxlSW5uZXJCb3g9aT4wfHxhPjA/TGMobi5sZWZ0K18sbi50b3AreCoyLzMscy1TKjIvMyxjLXgqMi8zLEljLlRPUF9SSUdIVCk6bmV3IFkobi5sZWZ0K24ud2lkdGgtUyoyLzMsbi50b3AreCoyLzMpLHRoaXMuYm90dG9tUmlnaHRCb3JkZXJEb3VibGVJbm5lckJveD11PjB8fGQ+MD9MYyhuLmxlZnQreSxuLnRvcCt2LHUtUyoyLzMsZC1DKjIvMyxJYy5CT1RUT01fUklHSFQpOm5ldyBZKG4ubGVmdCtuLndpZHRoLVMqMi8zLG4udG9wK24uaGVpZ2h0LUMqMi8zKSx0aGlzLmJvdHRvbUxlZnRCb3JkZXJEb3VibGVJbm5lckJveD1wPjB8fG0+MD9MYyhuLmxlZnQrdyoyLzMsbi50b3ArYixwLXcqMi8zLG0tQyoyLzMsSWMuQk9UVE9NX0xFRlQpOm5ldyBZKG4ubGVmdCt3KjIvMyxuLnRvcCtuLmhlaWdodC1DKjIvMyksdGhpcy50b3BMZWZ0Qm9yZGVyU3Ryb2tlPWk+MHx8YT4wP0xjKG4ubGVmdCt3LzIsbi50b3AreC8yLGktdy8yLGEteC8yLEljLlRPUF9MRUZUKTpuZXcgWShuLmxlZnQrdy8yLG4udG9wK3gvMiksdGhpcy50b3BSaWdodEJvcmRlclN0cm9rZT1pPjB8fGE+MD9MYyhuLmxlZnQrXyxuLnRvcCt4LzIscy1TLzIsYy14LzIsSWMuVE9QX1JJR0hUKTpuZXcgWShuLmxlZnQrbi53aWR0aC1TLzIsbi50b3AreC8yKSx0aGlzLmJvdHRvbVJpZ2h0Qm9yZGVyU3Ryb2tlPXU+MHx8ZD4wP0xjKG4ubGVmdCt5LG4udG9wK3YsdS1TLzIsZC1DLzIsSWMuQk9UVE9NX1JJR0hUKTpuZXcgWShuLmxlZnQrbi53aWR0aC1TLzIsbi50b3Arbi5oZWlnaHQtQy8yKSx0aGlzLmJvdHRvbUxlZnRCb3JkZXJTdHJva2U9cD4wfHxtPjA/TGMobi5sZWZ0K3cvMixuLnRvcCtiLHAtdy8yLG0tQy8yLEljLkJPVFRPTV9MRUZUKTpuZXcgWShuLmxlZnQrdy8yLG4udG9wK24uaGVpZ2h0LUMvMiksdGhpcy50b3BMZWZ0Qm9yZGVyQm94PWk+MHx8YT4wP0xjKG4ubGVmdCxuLnRvcCxpLGEsSWMuVE9QX0xFRlQpOm5ldyBZKG4ubGVmdCxuLnRvcCksdGhpcy50b3BSaWdodEJvcmRlckJveD1zPjB8fGM+MD9MYyhuLmxlZnQrXyxuLnRvcCxzLGMsSWMuVE9QX1JJR0hUKTpuZXcgWShuLmxlZnQrbi53aWR0aCxuLnRvcCksdGhpcy5ib3R0b21SaWdodEJvcmRlckJveD11PjB8fGQ+MD9MYyhuLmxlZnQreSxuLnRvcCt2LHUsZCxJYy5CT1RUT01fUklHSFQpOm5ldyBZKG4ubGVmdCtuLndpZHRoLG4udG9wK24uaGVpZ2h0KSx0aGlzLmJvdHRvbUxlZnRCb3JkZXJCb3g9cD4wfHxtPjA/TGMobi5sZWZ0LG4udG9wK2IscCxtLEljLkJPVFRPTV9MRUZUKTpuZXcgWShuLmxlZnQsbi50b3Arbi5oZWlnaHQpLHRoaXMudG9wTGVmdFBhZGRpbmdCb3g9aT4wfHxhPjA/TGMobi5sZWZ0K3csbi50b3AreCxNYXRoLm1heCgwLGktdyksTWF0aC5tYXgoMCxhLXgpLEljLlRPUF9MRUZUKTpuZXcgWShuLmxlZnQrdyxuLnRvcCt4KSx0aGlzLnRvcFJpZ2h0UGFkZGluZ0JveD1zPjB8fGM+MD9MYyhuLmxlZnQrTWF0aC5taW4oXyxuLndpZHRoLVMpLG4udG9wK3gsXz5uLndpZHRoK1M/MDpNYXRoLm1heCgwLHMtUyksTWF0aC5tYXgoMCxjLXgpLEljLlRPUF9SSUdIVCk6bmV3IFkobi5sZWZ0K24ud2lkdGgtUyxuLnRvcCt4KSx0aGlzLmJvdHRvbVJpZ2h0UGFkZGluZ0JveD11PjB8fGQ+MD9MYyhuLmxlZnQrTWF0aC5taW4oeSxuLndpZHRoLXcpLG4udG9wK01hdGgubWluKHYsbi5oZWlnaHQtQyksTWF0aC5tYXgoMCx1LVMpLE1hdGgubWF4KDAsZC1DKSxJYy5CT1RUT01fUklHSFQpOm5ldyBZKG4ubGVmdCtuLndpZHRoLVMsbi50b3Arbi5oZWlnaHQtQyksdGhpcy5ib3R0b21MZWZ0UGFkZGluZ0JveD1wPjB8fG0+MD9MYyhuLmxlZnQrdyxuLnRvcCtNYXRoLm1pbihiLG4uaGVpZ2h0LUMpLE1hdGgubWF4KDAscC13KSxNYXRoLm1heCgwLG0tQyksSWMuQk9UVE9NX0xFRlQpOm5ldyBZKG4ubGVmdCt3LG4udG9wK24uaGVpZ2h0LUMpLHRoaXMudG9wTGVmdENvbnRlbnRCb3g9aT4wfHxhPjA/TGMobi5sZWZ0K3crTyxuLnRvcCt4K1QsTWF0aC5tYXgoMCxpLSh3K08pKSxNYXRoLm1heCgwLGEtKHgrVCkpLEljLlRPUF9MRUZUKTpuZXcgWShuLmxlZnQrdytPLG4udG9wK3grVCksdGhpcy50b3BSaWdodENvbnRlbnRCb3g9cz4wfHxjPjA/TGMobi5sZWZ0K01hdGgubWluKF8sbi53aWR0aCt3K08pLG4udG9wK3grVCxfPm4ud2lkdGgrdytPPzA6cy13K08sYy0oeCtUKSxJYy5UT1BfUklHSFQpOm5ldyBZKG4ubGVmdCtuLndpZHRoLShTK0UpLG4udG9wK3grVCksdGhpcy5ib3R0b21SaWdodENvbnRlbnRCb3g9dT4wfHxkPjA/TGMobi5sZWZ0K01hdGgubWluKHksbi53aWR0aC0odytPKSksbi50b3ArTWF0aC5taW4odixuLmhlaWdodCt4K1QpLE1hdGgubWF4KDAsdS0oUytFKSksZC0oQytEKSxJYy5CT1RUT01fUklHSFQpOm5ldyBZKG4ubGVmdCtuLndpZHRoLShTK0UpLG4udG9wK24uaGVpZ2h0LShDK0QpKSx0aGlzLmJvdHRvbUxlZnRDb250ZW50Qm94PXA+MHx8bT4wP0xjKG4ubGVmdCt3K08sbi50b3ArYixNYXRoLm1heCgwLHAtKHcrTykpLG0tKEMrRCksSWMuQk9UVE9NX0xFRlQpOm5ldyBZKG4ubGVmdCt3K08sbi50b3Arbi5oZWlnaHQtKEMrRCkpfXJldHVybiBlfSgpLEljOyhmdW5jdGlvbihlKXtlW2UuVE9QX0xFRlQ9MF09YFRPUF9MRUZUYCxlW2UuVE9QX1JJR0hUPTFdPWBUT1BfUklHSFRgLGVbZS5CT1RUT01fUklHSFQ9Ml09YEJPVFRPTV9SSUdIVGAsZVtlLkJPVFRPTV9MRUZUPTNdPWBCT1RUT01fTEVGVGB9KShJY3x8PXt9KTt2YXIgTGM9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT00KigoTWF0aC5zcXJ0KDIpLTEpLzMpLG89biphLHM9ciphLGM9ZStuLGw9dCtyO3N3aXRjaChpKXtjYXNlIEljLlRPUF9MRUZUOnJldHVybiBuZXcgTmMobmV3IFkoZSxsKSxuZXcgWShlLGwtcyksbmV3IFkoYy1vLHQpLG5ldyBZKGMsdCkpO2Nhc2UgSWMuVE9QX1JJR0hUOnJldHVybiBuZXcgTmMobmV3IFkoZSx0KSxuZXcgWShlK28sdCksbmV3IFkoYyxsLXMpLG5ldyBZKGMsbCkpO2Nhc2UgSWMuQk9UVE9NX1JJR0hUOnJldHVybiBuZXcgTmMobmV3IFkoYyx0KSxuZXcgWShjLHQrcyksbmV3IFkoZStvLGwpLG5ldyBZKGUsbCkpO2Nhc2UgSWMuQk9UVE9NX0xFRlQ6ZGVmYXVsdDpyZXR1cm4gbmV3IE5jKG5ldyBZKGMsbCksbmV3IFkoYy1vLGwpLG5ldyBZKGUsdCtzKSxuZXcgWShlLHQpKX19LFJjPWZ1bmN0aW9uKGUpe3JldHVybltlLnRvcExlZnRCb3JkZXJCb3gsZS50b3BSaWdodEJvcmRlckJveCxlLmJvdHRvbVJpZ2h0Qm9yZGVyQm94LGUuYm90dG9tTGVmdEJvcmRlckJveF19LHpjPWZ1bmN0aW9uKGUpe3JldHVybltlLnRvcExlZnRDb250ZW50Qm94LGUudG9wUmlnaHRDb250ZW50Qm94LGUuYm90dG9tUmlnaHRDb250ZW50Qm94LGUuYm90dG9tTGVmdENvbnRlbnRCb3hdfSxCYz1mdW5jdGlvbihlKXtyZXR1cm5bZS50b3BMZWZ0UGFkZGluZ0JveCxlLnRvcFJpZ2h0UGFkZGluZ0JveCxlLmJvdHRvbVJpZ2h0UGFkZGluZ0JveCxlLmJvdHRvbUxlZnRQYWRkaW5nQm94XX0sVmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLm9mZnNldFg9ZSx0aGlzLm9mZnNldFk9dCx0aGlzLm1hdHJpeD1uLHRoaXMudHlwZT0wLHRoaXMudGFyZ2V0PTZ9cmV0dXJuIGV9KCksSGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5wYXRoPWUsdGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9MX1yZXR1cm4gZX0oKSxVYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vcGFjaXR5PWUsdGhpcy50eXBlPTIsdGhpcy50YXJnZXQ9Nn1yZXR1cm4gZX0oKSxXYz1mdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09MH0sR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PTF9LEtjPWZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0yfSxxYz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD09PXQubGVuZ3RoP2Uuc29tZShmdW5jdGlvbihlLG4pe3JldHVybiBlPT09dFtuXX0pOiExfSxKYz1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIGUuYWRkKHQsbik7Y2FzZSAxOnJldHVybiBlLmFkZCh0K3Isbik7Y2FzZSAyOnJldHVybiBlLmFkZCh0K3IsbitpKTtjYXNlIDM6cmV0dXJuIGUuYWRkKHQsbitpKX1yZXR1cm4gZX0pfSxZYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5lbGVtZW50PWUsdGhpcy5pbmxpbmVMZXZlbD1bXSx0aGlzLm5vbklubGluZUxldmVsPVtdLHRoaXMubmVnYXRpdmVaSW5kZXg9W10sdGhpcy56ZXJvT3JBdXRvWkluZGV4T3JUcmFuc2Zvcm1lZE9yT3BhY2l0eT1bXSx0aGlzLnBvc2l0aXZlWkluZGV4PVtdLHRoaXMubm9uUG9zaXRpb25lZEZsb2F0cz1bXSx0aGlzLm5vblBvc2l0aW9uZWRJbmxpbmVMZXZlbD1bXX1yZXR1cm4gZX0oKSxYYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtpZih0aGlzLmNvbnRhaW5lcj1lLHRoaXMucGFyZW50PXQsdGhpcy5lZmZlY3RzPVtdLHRoaXMuY3VydmVzPW5ldyBGYyh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXIuc3R5bGVzLm9wYWNpdHk8MSYmdGhpcy5lZmZlY3RzLnB1c2gobmV3IFVjKHRoaXMuY29udGFpbmVyLnN0eWxlcy5vcGFjaXR5KSksdGhpcy5jb250YWluZXIuc3R5bGVzLnRyYW5zZm9ybSE9PW51bGwpe3ZhciBuPXRoaXMuY29udGFpbmVyLmJvdW5kcy5sZWZ0K3RoaXMuY29udGFpbmVyLnN0eWxlcy50cmFuc2Zvcm1PcmlnaW5bMF0ubnVtYmVyLHI9dGhpcy5jb250YWluZXIuYm91bmRzLnRvcCt0aGlzLmNvbnRhaW5lci5zdHlsZXMudHJhbnNmb3JtT3JpZ2luWzFdLm51bWJlcixpPXRoaXMuY29udGFpbmVyLnN0eWxlcy50cmFuc2Zvcm07dGhpcy5lZmZlY3RzLnB1c2gobmV3IFZjKG4scixpKSl9aWYodGhpcy5jb250YWluZXIuc3R5bGVzLm92ZXJmbG93WCE9PTApe3ZhciBhPVJjKHRoaXMuY3VydmVzKSxvPUJjKHRoaXMuY3VydmVzKTtxYyhhLG8pP3RoaXMuZWZmZWN0cy5wdXNoKG5ldyBIYyhhLDYpKToodGhpcy5lZmZlY3RzLnB1c2gobmV3IEhjKGEsMikpLHRoaXMuZWZmZWN0cy5wdXNoKG5ldyBIYyhvLDQpKSl9fXJldHVybiBlLnByb3RvdHlwZS5nZXRFZmZlY3RzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bMiwzXS5pbmRleE9mKHRoaXMuY29udGFpbmVyLnN0eWxlcy5wb3NpdGlvbik9PT0tMSxuPXRoaXMucGFyZW50LHI9dGhpcy5lZmZlY3RzLnNsaWNlKDApO247KXt2YXIgaT1uLmVmZmVjdHMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFHYyhlKX0pO2lmKHR8fG4uY29udGFpbmVyLnN0eWxlcy5wb3NpdGlvbiE9PTB8fCFuLnBhcmVudCl7aWYoci51bnNoaWZ0LmFwcGx5KHIsaSksdD1bMiwzXS5pbmRleE9mKG4uY29udGFpbmVyLnN0eWxlcy5wb3NpdGlvbik9PT0tMSxuLmNvbnRhaW5lci5zdHlsZXMub3ZlcmZsb3dYIT09MCl7dmFyIGE9UmMobi5jdXJ2ZXMpLG89QmMobi5jdXJ2ZXMpO3FjKGEsbyl8fHIudW5zaGlmdChuZXcgSGMobyw2KSl9fWVsc2Ugci51bnNoaWZ0LmFwcGx5KHIsaSk7bj1uLnBhcmVudH1yZXR1cm4gci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGhhKHQudGFyZ2V0LGUpfSl9LGV9KCksWmM9ZnVuY3Rpb24oZSx0LG4scil7ZS5jb250YWluZXIuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgYT1oYShpLmZsYWdzLDQpLG89aGEoaS5mbGFncywyKSxzPW5ldyBYYyhpLGUpO2hhKGkuc3R5bGVzLmRpc3BsYXksMjA0OCkmJnIucHVzaChzKTt2YXIgYz1oYShpLmZsYWdzLDgpP1tdOnI7aWYoYXx8byl7dmFyIGw9YXx8aS5zdHlsZXMuaXNQb3NpdGlvbmVkKCk/bjp0LHU9bmV3IFljKHMpO2lmKGkuc3R5bGVzLmlzUG9zaXRpb25lZCgpfHxpLnN0eWxlcy5vcGFjaXR5PDF8fGkuc3R5bGVzLmlzVHJhbnNmb3JtZWQoKSl7dmFyIGQ9aS5zdHlsZXMuekluZGV4Lm9yZGVyO2lmKGQ8MCl7dmFyIGY9MDtsLm5lZ2F0aXZlWkluZGV4LnNvbWUoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZD5lLmVsZW1lbnQuY29udGFpbmVyLnN0eWxlcy56SW5kZXgub3JkZXI/KGY9dCwhMSk6Zj4wfSksbC5uZWdhdGl2ZVpJbmRleC5zcGxpY2UoZiwwLHUpfWVsc2UgaWYoZD4wKXt2YXIgcD0wO2wucG9zaXRpdmVaSW5kZXguc29tZShmdW5jdGlvbihlLHQpe3JldHVybiBkPj1lLmVsZW1lbnQuY29udGFpbmVyLnN0eWxlcy56SW5kZXgub3JkZXI/KHA9dCsxLCExKTpwPjB9KSxsLnBvc2l0aXZlWkluZGV4LnNwbGljZShwLDAsdSl9ZWxzZSBsLnplcm9PckF1dG9aSW5kZXhPclRyYW5zZm9ybWVkT3JPcGFjaXR5LnB1c2godSl9ZWxzZSBpLnN0eWxlcy5pc0Zsb2F0aW5nKCk/bC5ub25Qb3NpdGlvbmVkRmxvYXRzLnB1c2godSk6bC5ub25Qb3NpdGlvbmVkSW5saW5lTGV2ZWwucHVzaCh1KTtaYyhzLHUsYT91Om4sYyl9ZWxzZSBpLnN0eWxlcy5pc0lubGluZUxldmVsKCk/dC5pbmxpbmVMZXZlbC5wdXNoKHMpOnQubm9uSW5saW5lTGV2ZWwucHVzaChzKSxaYyhzLHQsbixjKTtoYShpLmZsYWdzLDgpJiZRYyhpLGMpfSl9LFFjPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUgaW5zdGFuY2VvZiAkbz9lLnN0YXJ0OjEscj1lIGluc3RhbmNlb2YgJG8/ZS5yZXZlcnNlZDohMSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07YS5jb250YWluZXIgaW5zdGFuY2VvZiBRbyYmdHlwZW9mIGEuY29udGFpbmVyLnZhbHVlPT1gbnVtYmVyYCYmYS5jb250YWluZXIudmFsdWUhPT0wJiYobj1hLmNvbnRhaW5lci52YWx1ZSksYS5saXN0VmFsdWU9bmMobixhLmNvbnRhaW5lci5zdHlsZXMubGlzdFN0eWxlVHlwZSwhMCksbis9cj8tMToxfX0sJGM9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFhjKGUsbnVsbCksbj1uZXcgWWModCkscj1bXTtyZXR1cm4gWmModCxuLG4sciksUWModC5jb250YWluZXIsciksbn0sZWw9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiBhbChlLnRvcExlZnRCb3JkZXJCb3gsZS50b3BMZWZ0UGFkZGluZ0JveCxlLnRvcFJpZ2h0Qm9yZGVyQm94LGUudG9wUmlnaHRQYWRkaW5nQm94KTtjYXNlIDE6cmV0dXJuIGFsKGUudG9wUmlnaHRCb3JkZXJCb3gsZS50b3BSaWdodFBhZGRpbmdCb3gsZS5ib3R0b21SaWdodEJvcmRlckJveCxlLmJvdHRvbVJpZ2h0UGFkZGluZ0JveCk7Y2FzZSAyOnJldHVybiBhbChlLmJvdHRvbVJpZ2h0Qm9yZGVyQm94LGUuYm90dG9tUmlnaHRQYWRkaW5nQm94LGUuYm90dG9tTGVmdEJvcmRlckJveCxlLmJvdHRvbUxlZnRQYWRkaW5nQm94KTtkZWZhdWx0OnJldHVybiBhbChlLmJvdHRvbUxlZnRCb3JkZXJCb3gsZS5ib3R0b21MZWZ0UGFkZGluZ0JveCxlLnRvcExlZnRCb3JkZXJCb3gsZS50b3BMZWZ0UGFkZGluZ0JveCl9fSx0bD1mdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIGFsKGUudG9wTGVmdEJvcmRlckJveCxlLnRvcExlZnRCb3JkZXJEb3VibGVPdXRlckJveCxlLnRvcFJpZ2h0Qm9yZGVyQm94LGUudG9wUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveCk7Y2FzZSAxOnJldHVybiBhbChlLnRvcFJpZ2h0Qm9yZGVyQm94LGUudG9wUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveCxlLmJvdHRvbVJpZ2h0Qm9yZGVyQm94LGUuYm90dG9tUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveCk7Y2FzZSAyOnJldHVybiBhbChlLmJvdHRvbVJpZ2h0Qm9yZGVyQm94LGUuYm90dG9tUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveCxlLmJvdHRvbUxlZnRCb3JkZXJCb3gsZS5ib3R0b21MZWZ0Qm9yZGVyRG91YmxlT3V0ZXJCb3gpO2RlZmF1bHQ6cmV0dXJuIGFsKGUuYm90dG9tTGVmdEJvcmRlckJveCxlLmJvdHRvbUxlZnRCb3JkZXJEb3VibGVPdXRlckJveCxlLnRvcExlZnRCb3JkZXJCb3gsZS50b3BMZWZ0Qm9yZGVyRG91YmxlT3V0ZXJCb3gpfX0sbmw9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiBhbChlLnRvcExlZnRCb3JkZXJEb3VibGVJbm5lckJveCxlLnRvcExlZnRQYWRkaW5nQm94LGUudG9wUmlnaHRCb3JkZXJEb3VibGVJbm5lckJveCxlLnRvcFJpZ2h0UGFkZGluZ0JveCk7Y2FzZSAxOnJldHVybiBhbChlLnRvcFJpZ2h0Qm9yZGVyRG91YmxlSW5uZXJCb3gsZS50b3BSaWdodFBhZGRpbmdCb3gsZS5ib3R0b21SaWdodEJvcmRlckRvdWJsZUlubmVyQm94LGUuYm90dG9tUmlnaHRQYWRkaW5nQm94KTtjYXNlIDI6cmV0dXJuIGFsKGUuYm90dG9tUmlnaHRCb3JkZXJEb3VibGVJbm5lckJveCxlLmJvdHRvbVJpZ2h0UGFkZGluZ0JveCxlLmJvdHRvbUxlZnRCb3JkZXJEb3VibGVJbm5lckJveCxlLmJvdHRvbUxlZnRQYWRkaW5nQm94KTtkZWZhdWx0OnJldHVybiBhbChlLmJvdHRvbUxlZnRCb3JkZXJEb3VibGVJbm5lckJveCxlLmJvdHRvbUxlZnRQYWRkaW5nQm94LGUudG9wTGVmdEJvcmRlckRvdWJsZUlubmVyQm94LGUudG9wTGVmdFBhZGRpbmdCb3gpfX0scmw9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiBpbChlLnRvcExlZnRCb3JkZXJTdHJva2UsZS50b3BSaWdodEJvcmRlclN0cm9rZSk7Y2FzZSAxOnJldHVybiBpbChlLnRvcFJpZ2h0Qm9yZGVyU3Ryb2tlLGUuYm90dG9tUmlnaHRCb3JkZXJTdHJva2UpO2Nhc2UgMjpyZXR1cm4gaWwoZS5ib3R0b21SaWdodEJvcmRlclN0cm9rZSxlLmJvdHRvbUxlZnRCb3JkZXJTdHJva2UpO2RlZmF1bHQ6cmV0dXJuIGlsKGUuYm90dG9tTGVmdEJvcmRlclN0cm9rZSxlLnRvcExlZnRCb3JkZXJTdHJva2UpfX0saWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gUGMoZSk/bi5wdXNoKGUuc3ViZGl2aWRlKC41LCExKSk6bi5wdXNoKGUpLFBjKHQpP24ucHVzaCh0LnN1YmRpdmlkZSguNSwhMCkpOm4ucHVzaCh0KSxufSxhbD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1bXTtyZXR1cm4gUGMoZSk/aS5wdXNoKGUuc3ViZGl2aWRlKC41LCExKSk6aS5wdXNoKGUpLFBjKG4pP2kucHVzaChuLnN1YmRpdmlkZSguNSwhMCkpOmkucHVzaChuKSxQYyhyKT9pLnB1c2goci5zdWJkaXZpZGUoLjUsITApLnJldmVyc2UoKSk6aS5wdXNoKHIpLFBjKHQpP2kucHVzaCh0LnN1YmRpdmlkZSguNSwhMSkucmV2ZXJzZSgpKTppLnB1c2godCksaX0sb2w9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ib3VuZHMsbj1lLnN0eWxlcztyZXR1cm4gdC5hZGQobi5ib3JkZXJMZWZ0V2lkdGgsbi5ib3JkZXJUb3BXaWR0aCwtKG4uYm9yZGVyUmlnaHRXaWR0aCtuLmJvcmRlckxlZnRXaWR0aCksLShuLmJvcmRlclRvcFdpZHRoK24uYm9yZGVyQm90dG9tV2lkdGgpKX0sc2w9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHlsZXMsbj1lLmJvdW5kcyxyPXEodC5wYWRkaW5nTGVmdCxuLndpZHRoKSxpPXEodC5wYWRkaW5nUmlnaHQsbi53aWR0aCksYT1xKHQucGFkZGluZ1RvcCxuLndpZHRoKSxvPXEodC5wYWRkaW5nQm90dG9tLG4ud2lkdGgpO3JldHVybiBuLmFkZChyK3QuYm9yZGVyTGVmdFdpZHRoLGErdC5ib3JkZXJUb3BXaWR0aCwtKHQuYm9yZGVyUmlnaHRXaWR0aCt0LmJvcmRlckxlZnRXaWR0aCtyK2kpLC0odC5ib3JkZXJUb3BXaWR0aCt0LmJvcmRlckJvdHRvbVdpZHRoK2ErbykpfSxjbD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09MD90LmJvdW5kczplPT09Mj9zbCh0KTpvbCh0KX0sbGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PTA/dC5ib3VuZHM6ZT09PTI/c2wodCk6b2wodCl9LHVsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jbChtbChlLnN0eWxlcy5iYWNrZ3JvdW5kT3JpZ2luLHQpLGUpLGk9bGwobWwoZS5zdHlsZXMuYmFja2dyb3VuZENsaXAsdCksZSksYT1wbChtbChlLnN0eWxlcy5iYWNrZ3JvdW5kU2l6ZSx0KSxuLHIpLG89YVswXSxzPWFbMV0sYz10cihtbChlLnN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24sdCksci53aWR0aC1vLHIuaGVpZ2h0LXMpO3JldHVybltobChtbChlLnN0eWxlcy5iYWNrZ3JvdW5kUmVwZWF0LHQpLGMsYSxyLGkpLE1hdGgucm91bmQoci5sZWZ0K2NbMF0pLE1hdGgucm91bmQoci50b3ArY1sxXSksbyxzXX0sZGw9ZnVuY3Rpb24oZSl7cmV0dXJuIEhuKGUpJiZlLnZhbHVlPT09JHIuQVVUT30sZmw9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT1gbnVtYmVyYH0scGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPWVbMF0scz1lWzFdO2lmKCFvKXJldHVyblswLDBdO2lmKFhuKG8pJiZzJiZYbihzKSlyZXR1cm5bcShvLG4ud2lkdGgpLHEocyxuLmhlaWdodCldO3ZhciBjPWZsKGEpO2lmKEhuKG8pJiYoby52YWx1ZT09PSRyLkNPTlRBSU58fG8udmFsdWU9PT0kci5DT1ZFUikpcmV0dXJuIGZsKGEpP24ud2lkdGgvbi5oZWlnaHQ8YT09KG8udmFsdWU9PT0kci5DT1ZFUik/W24uaGVpZ2h0KmEsbi5oZWlnaHRdOltuLndpZHRoLG4ud2lkdGgvYV06W24ud2lkdGgsbi5oZWlnaHRdO3ZhciBsPWZsKHIpLHU9ZmwoaSksZD1sfHx1O2lmKGRsKG8pJiYoIXN8fGRsKHMpKSlyZXR1cm4gbCYmdT9bcixpXTohYyYmIWQ/W24ud2lkdGgsbi5oZWlnaHRdOmQmJmM/W2w/cjppKmEsdT9pOnIvYV06W2w/cjpuLndpZHRoLHU/aTpuLmhlaWdodF07aWYoYyl7dmFyIGY9MCxwPTA7cmV0dXJuIFhuKG8pP2Y9cShvLG4ud2lkdGgpOlhuKHMpJiYocD1xKHMsbi5oZWlnaHQpKSxkbChvKT9mPXAqYTooIXN8fGRsKHMpKSYmKHA9Zi9hKSxbZixwXX12YXIgbT1udWxsLGg9bnVsbDtpZihYbihvKT9tPXEobyxuLndpZHRoKTpzJiZYbihzKSYmKGg9cShzLG4uaGVpZ2h0KSksbSE9PW51bGwmJighc3x8ZGwocykpJiYoaD1sJiZ1P20vcippOm4uaGVpZ2h0KSxoIT09bnVsbCYmZGwobykmJihtPWwmJnU/aC9pKnI6bi53aWR0aCksbSE9PW51bGwmJmghPT1udWxsKXJldHVyblttLGhdO3Rocm93IEVycm9yKGBVbmFibGUgdG8gY2FsY3VsYXRlIGJhY2tncm91bmQtc2l6ZSBmb3IgZWxlbWVudGApfSxtbD1mdW5jdGlvbihlLHQpe3ZhciBuPWVbdF07cmV0dXJuIG49PT12b2lkIDA/ZVswXTpufSxobD1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9blswXSxjPW5bMV07c3dpdGNoKGUpe2Nhc2UgMjpyZXR1cm5bbmV3IFkoTWF0aC5yb3VuZChyLmxlZnQpLE1hdGgucm91bmQoci50b3ArbykpLG5ldyBZKE1hdGgucm91bmQoci5sZWZ0K3Iud2lkdGgpLE1hdGgucm91bmQoci50b3ArbykpLG5ldyBZKE1hdGgucm91bmQoci5sZWZ0K3Iud2lkdGgpLE1hdGgucm91bmQoYytyLnRvcCtvKSksbmV3IFkoTWF0aC5yb3VuZChyLmxlZnQpLE1hdGgucm91bmQoYytyLnRvcCtvKSldO2Nhc2UgMzpyZXR1cm5bbmV3IFkoTWF0aC5yb3VuZChyLmxlZnQrYSksTWF0aC5yb3VuZChyLnRvcCkpLG5ldyBZKE1hdGgucm91bmQoci5sZWZ0K2ErcyksTWF0aC5yb3VuZChyLnRvcCkpLG5ldyBZKE1hdGgucm91bmQoci5sZWZ0K2ErcyksTWF0aC5yb3VuZChyLmhlaWdodCtyLnRvcCkpLG5ldyBZKE1hdGgucm91bmQoci5sZWZ0K2EpLE1hdGgucm91bmQoci5oZWlnaHQrci50b3ApKV07Y2FzZSAxOnJldHVybltuZXcgWShNYXRoLnJvdW5kKHIubGVmdCthKSxNYXRoLnJvdW5kKHIudG9wK28pKSxuZXcgWShNYXRoLnJvdW5kKHIubGVmdCthK3MpLE1hdGgucm91bmQoci50b3ArbykpLG5ldyBZKE1hdGgucm91bmQoci5sZWZ0K2ErcyksTWF0aC5yb3VuZChyLnRvcCtvK2MpKSxuZXcgWShNYXRoLnJvdW5kKHIubGVmdCthKSxNYXRoLnJvdW5kKHIudG9wK28rYykpXTtkZWZhdWx0OnJldHVybltuZXcgWShNYXRoLnJvdW5kKGkubGVmdCksTWF0aC5yb3VuZChpLnRvcCkpLG5ldyBZKE1hdGgucm91bmQoaS5sZWZ0K2kud2lkdGgpLE1hdGgucm91bmQoaS50b3ApKSxuZXcgWShNYXRoLnJvdW5kKGkubGVmdCtpLndpZHRoKSxNYXRoLnJvdW5kKGkuaGVpZ2h0K2kudG9wKSksbmV3IFkoTWF0aC5yb3VuZChpLmxlZnQpLE1hdGgucm91bmQoaS5oZWlnaHQraS50b3ApKV19fSxnbD1gZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3YCxfbD1gSGlkZGVuIFRleHRgLHZsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9kYXRhPXt9LHRoaXMuX2RvY3VtZW50PWV9cmV0dXJuIGUucHJvdG90eXBlLnBhcnNlTWV0cmljcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGRpdmApLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgaW1nYCksaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBzcGFuYCksYT10aGlzLl9kb2N1bWVudC5ib2R5O24uc3R5bGUudmlzaWJpbGl0eT1gaGlkZGVuYCxuLnN0eWxlLmZvbnRGYW1pbHk9ZSxuLnN0eWxlLmZvbnRTaXplPXQsbi5zdHlsZS5tYXJnaW49YDBgLG4uc3R5bGUucGFkZGluZz1gMGAsbi5zdHlsZS53aGl0ZVNwYWNlPWBub3dyYXBgLGEuYXBwZW5kQ2hpbGQobiksci5zcmM9Z2wsci53aWR0aD0xLHIuaGVpZ2h0PTEsci5zdHlsZS5tYXJnaW49YDBgLHIuc3R5bGUucGFkZGluZz1gMGAsci5zdHlsZS52ZXJ0aWNhbEFsaWduPWBiYXNlbGluZWAsaS5zdHlsZS5mb250RmFtaWx5PWUsaS5zdHlsZS5mb250U2l6ZT10LGkuc3R5bGUubWFyZ2luPWAwYCxpLnN0eWxlLnBhZGRpbmc9YDBgLGkuYXBwZW5kQ2hpbGQodGhpcy5fZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoX2wpKSxuLmFwcGVuZENoaWxkKGkpLG4uYXBwZW5kQ2hpbGQocik7dmFyIG89ci5vZmZzZXRUb3AtaS5vZmZzZXRUb3ArMjtuLnJlbW92ZUNoaWxkKGkpLG4uYXBwZW5kQ2hpbGQodGhpcy5fZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoX2wpKSxuLnN0eWxlLmxpbmVIZWlnaHQ9YG5vcm1hbGAsci5zdHlsZS52ZXJ0aWNhbEFsaWduPWBzdXBlcmA7dmFyIHM9ci5vZmZzZXRUb3Atbi5vZmZzZXRUb3ArMjtyZXR1cm4gYS5yZW1vdmVDaGlsZChuKSx7YmFzZWxpbmU6byxtaWRkbGU6c319LGUucHJvdG90eXBlLmdldE1ldHJpY3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lK2AgYCt0O3JldHVybiB0aGlzLl9kYXRhW25dPT09dm9pZCAwJiYodGhpcy5fZGF0YVtuXT10aGlzLnBhcnNlTWV0cmljcyhlLHQpKSx0aGlzLl9kYXRhW25dfSxlfSgpLHlsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuY29udGV4dD1lLHRoaXMub3B0aW9ucz10fXJldHVybiBlfSgpLGJsPTFlNCx4bD1mdW5jdGlvbihlKXt0KG4sZSk7ZnVuY3Rpb24gbih0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIuX2FjdGl2ZUVmZmVjdHM9W10sci5jYW52YXM9bi5jYW52YXM/bi5jYW52YXM6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgY2FudmFzYCksci5jdHg9ci5jYW52YXMuZ2V0Q29udGV4dChgMmRgKSxuLmNhbnZhc3x8KHIuY2FudmFzLndpZHRoPU1hdGguZmxvb3Iobi53aWR0aCpuLnNjYWxlKSxyLmNhbnZhcy5oZWlnaHQ9TWF0aC5mbG9vcihuLmhlaWdodCpuLnNjYWxlKSxyLmNhbnZhcy5zdHlsZS53aWR0aD1uLndpZHRoK2BweGAsci5jYW52YXMuc3R5bGUuaGVpZ2h0PW4uaGVpZ2h0K2BweGApLHIuZm9udE1ldHJpY3M9bmV3IHZsKGRvY3VtZW50KSxyLmN0eC5zY2FsZShyLm9wdGlvbnMuc2NhbGUsci5vcHRpb25zLnNjYWxlKSxyLmN0eC50cmFuc2xhdGUoLW4ueCwtbi55KSxyLmN0eC50ZXh0QmFzZWxpbmU9YGJvdHRvbWAsci5fYWN0aXZlRWZmZWN0cz1bXSxyLmNvbnRleHQubG9nZ2VyLmRlYnVnKGBDYW52YXMgcmVuZGVyZXIgaW5pdGlhbGl6ZWQgKGArbi53aWR0aCtgeGArbi5oZWlnaHQrYCkgd2l0aCBzY2FsZSBgK24uc2NhbGUpLHJ9cmV0dXJuIG4ucHJvdG90eXBlLmFwcGx5RWZmZWN0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0aGlzLl9hY3RpdmVFZmZlY3RzLmxlbmd0aDspdGhpcy5wb3BFZmZlY3QoKTtlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHlFZmZlY3QoZSl9KX0sbi5wcm90b3R5cGUuYXBwbHlFZmZlY3Q9ZnVuY3Rpb24oZSl7dGhpcy5jdHguc2F2ZSgpLEtjKGUpJiYodGhpcy5jdHguZ2xvYmFsQWxwaGE9ZS5vcGFjaXR5KSxXYyhlKSYmKHRoaXMuY3R4LnRyYW5zbGF0ZShlLm9mZnNldFgsZS5vZmZzZXRZKSx0aGlzLmN0eC50cmFuc2Zvcm0oZS5tYXRyaXhbMF0sZS5tYXRyaXhbMV0sZS5tYXRyaXhbMl0sZS5tYXRyaXhbM10sZS5tYXRyaXhbNF0sZS5tYXRyaXhbNV0pLHRoaXMuY3R4LnRyYW5zbGF0ZSgtZS5vZmZzZXRYLC1lLm9mZnNldFkpKSxHYyhlKSYmKHRoaXMucGF0aChlLnBhdGgpLHRoaXMuY3R4LmNsaXAoKSksdGhpcy5fYWN0aXZlRWZmZWN0cy5wdXNoKGUpfSxuLnByb3RvdHlwZS5wb3BFZmZlY3Q9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVFZmZlY3RzLnBvcCgpLHRoaXMuY3R4LnJlc3RvcmUoKX0sbi5wcm90b3R5cGUucmVuZGVyU3RhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGkodGhpcyxmdW5jdGlvbihuKXtzd2l0Y2gobi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0PWUuZWxlbWVudC5jb250YWluZXIuc3R5bGVzLHQuaXNWaXNpYmxlKCk/WzQsdGhpcy5yZW5kZXJTdGFja0NvbnRlbnQoZSldOlszLDJdO2Nhc2UgMTpuLnNlbnQoKSxuLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSxuLnByb3RvdHlwZS5yZW5kZXJOb2RlPWZ1bmN0aW9uKGUpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBpKHRoaXMsZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDppZihoYShlLmNvbnRhaW5lci5mbGFncywxNikpZGVidWdnZXI7cmV0dXJuIGUuY29udGFpbmVyLnN0eWxlcy5pc1Zpc2libGUoKT9bNCx0aGlzLnJlbmRlck5vZGVCYWNrZ3JvdW5kQW5kQm9yZGVycyhlKV06WzMsM107Y2FzZSAxOnJldHVybiB0LnNlbnQoKSxbNCx0aGlzLnJlbmRlck5vZGVDb250ZW50KGUpXTtjYXNlIDI6dC5zZW50KCksdC5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0sbi5wcm90b3R5cGUucmVuZGVyVGV4dFdpdGhMZXR0ZXJTcGFjaW5nPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3Q9PT0wP3RoaXMuY3R4LmZpbGxUZXh0KGUudGV4dCxlLmJvdW5kcy5sZWZ0LGUuYm91bmRzLnRvcCtuKTpCbyhlLnRleHQpLnJlZHVjZShmdW5jdGlvbih0LGkpe3JldHVybiByLmN0eC5maWxsVGV4dChpLHQsZS5ib3VuZHMudG9wK24pLHQrci5jdHgubWVhc3VyZVRleHQoaSkud2lkdGh9LGUuYm91bmRzLmxlZnQpfSxuLnByb3RvdHlwZS5jcmVhdGVGb250U3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mb250VmFyaWFudC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1gbm9ybWFsYHx8ZT09PWBzbWFsbC1jYXBzYH0pLmpvaW4oYGApLG49RWwoZS5mb250RmFtaWx5KS5qb2luKGAsIGApLHI9Qm4oZS5mb250U2l6ZSk/YGArZS5mb250U2l6ZS5udW1iZXIrZS5mb250U2l6ZS51bml0OmUuZm9udFNpemUubnVtYmVyK2BweGA7cmV0dXJuW1tlLmZvbnRTdHlsZSx0LGUuZm9udFdlaWdodCxyLG5dLmpvaW4oYCBgKSxuLHJdfSxuLnByb3RvdHlwZS5yZW5kZXJUZXh0Tm9kZT1mdW5jdGlvbihlLHQpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuLHIsYSxvLHMsYyxsLHUsZD10aGlzO3JldHVybiBpKHRoaXMsZnVuY3Rpb24oaSl7cmV0dXJuIG49dGhpcy5jcmVhdGVGb250U3R5bGUodCkscj1uWzBdLGE9blsxXSxvPW5bMl0sdGhpcy5jdHguZm9udD1yLHRoaXMuY3R4LmRpcmVjdGlvbj10LmRpcmVjdGlvbj09PTE/YHJ0bGA6YGx0cmAsdGhpcy5jdHgudGV4dEFsaWduPWBsZWZ0YCx0aGlzLmN0eC50ZXh0QmFzZWxpbmU9YGFscGhhYmV0aWNgLHM9dGhpcy5mb250TWV0cmljcy5nZXRNZXRyaWNzKGEsbyksYz1zLmJhc2VsaW5lLGw9cy5taWRkbGUsdT10LnBhaW50T3JkZXIsZS50ZXh0Qm91bmRzLmZvckVhY2goZnVuY3Rpb24oZSl7dS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIDA6ZC5jdHguZmlsbFN0eWxlPWZyKHQuY29sb3IpLGQucmVuZGVyVGV4dFdpdGhMZXR0ZXJTcGFjaW5nKGUsdC5sZXR0ZXJTcGFjaW5nLGMpO3ZhciByPXQudGV4dFNoYWRvdztyLmxlbmd0aCYmZS50ZXh0LnRyaW0oKS5sZW5ndGgmJihyLnNsaWNlKDApLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2QuY3R4LnNoYWRvd0NvbG9yPWZyKG4uY29sb3IpLGQuY3R4LnNoYWRvd09mZnNldFg9bi5vZmZzZXRYLm51bWJlcipkLm9wdGlvbnMuc2NhbGUsZC5jdHguc2hhZG93T2Zmc2V0WT1uLm9mZnNldFkubnVtYmVyKmQub3B0aW9ucy5zY2FsZSxkLmN0eC5zaGFkb3dCbHVyPW4uYmx1ci5udW1iZXIsZC5yZW5kZXJUZXh0V2l0aExldHRlclNwYWNpbmcoZSx0LmxldHRlclNwYWNpbmcsYyl9KSxkLmN0eC5zaGFkb3dDb2xvcj1gYCxkLmN0eC5zaGFkb3dPZmZzZXRYPTAsZC5jdHguc2hhZG93T2Zmc2V0WT0wLGQuY3R4LnNoYWRvd0JsdXI9MCksdC50ZXh0RGVjb3JhdGlvbkxpbmUubGVuZ3RoJiYoZC5jdHguZmlsbFN0eWxlPWZyKHQudGV4dERlY29yYXRpb25Db2xvcnx8dC5jb2xvciksdC50ZXh0RGVjb3JhdGlvbkxpbmUuZm9yRWFjaChmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAxOmQuY3R4LmZpbGxSZWN0KGUuYm91bmRzLmxlZnQsTWF0aC5yb3VuZChlLmJvdW5kcy50b3ArYyksZS5ib3VuZHMud2lkdGgsMSk7YnJlYWs7Y2FzZSAyOmQuY3R4LmZpbGxSZWN0KGUuYm91bmRzLmxlZnQsTWF0aC5yb3VuZChlLmJvdW5kcy50b3ApLGUuYm91bmRzLndpZHRoLDEpO2JyZWFrO2Nhc2UgMzpkLmN0eC5maWxsUmVjdChlLmJvdW5kcy5sZWZ0LE1hdGguY2VpbChlLmJvdW5kcy50b3ArbCksZS5ib3VuZHMud2lkdGgsMSk7YnJlYWt9fSkpO2JyZWFrO2Nhc2UgMTp0LndlYmtpdFRleHRTdHJva2VXaWR0aCYmZS50ZXh0LnRyaW0oKS5sZW5ndGgmJihkLmN0eC5zdHJva2VTdHlsZT1mcih0LndlYmtpdFRleHRTdHJva2VDb2xvciksZC5jdHgubGluZVdpZHRoPXQud2Via2l0VGV4dFN0cm9rZVdpZHRoLGQuY3R4LmxpbmVKb2luPXdpbmRvdy5jaHJvbWU/YG1pdGVyYDpgcm91bmRgLGQuY3R4LnN0cm9rZVRleHQoZS50ZXh0LGUuYm91bmRzLmxlZnQsZS5ib3VuZHMudG9wK2MpKSxkLmN0eC5zdHJva2VTdHlsZT1gYCxkLmN0eC5saW5lV2lkdGg9MCxkLmN0eC5saW5lSm9pbj1gbWl0ZXJgO2JyZWFrfX0pfSksWzJdfSl9KX0sbi5wcm90b3R5cGUucmVuZGVyUmVwbGFjZWRFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihuJiZlLmludHJpbnNpY1dpZHRoPjAmJmUuaW50cmluc2ljSGVpZ2h0PjApe3ZhciByPXNsKGUpLGk9QmModCk7dGhpcy5wYXRoKGkpLHRoaXMuY3R4LnNhdmUoKSx0aGlzLmN0eC5jbGlwKCksdGhpcy5jdHguZHJhd0ltYWdlKG4sMCwwLGUuaW50cmluc2ljV2lkdGgsZS5pbnRyaW5zaWNIZWlnaHQsci5sZWZ0LHIudG9wLHIud2lkdGgsci5oZWlnaHQpLHRoaXMuY3R4LnJlc3RvcmUoKX19LG4ucHJvdG90eXBlLnJlbmRlck5vZGVDb250ZW50PWZ1bmN0aW9uKGUpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0LHIsYSxzLGMsbCx1LHUsZCxmLHAsbSxoLGcsXyx2LHksYix4LHUsUyxoLHY7cmV0dXJuIGkodGhpcyxmdW5jdGlvbihpKXtzd2l0Y2goaS5sYWJlbCl7Y2FzZSAwOnRoaXMuYXBwbHlFZmZlY3RzKGUuZ2V0RWZmZWN0cyg0KSksdD1lLmNvbnRhaW5lcixyPWUuY3VydmVzLGE9dC5zdHlsZXMscz0wLGM9dC50ZXh0Tm9kZXMsaS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gczxjLmxlbmd0aD8obD1jW3NdLFs0LHRoaXMucmVuZGVyVGV4dE5vZGUobCxhKV0pOlszLDRdO2Nhc2UgMjppLnNlbnQoKSxpLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBzKyssWzMsMV07Y2FzZSA0OmlmKCEodCBpbnN0YW5jZW9mIFlvKSlyZXR1cm5bMyw4XTtpLmxhYmVsPTU7Y2FzZSA1OnJldHVybiBpLnRyeXMucHVzaChbNSw3LCw4XSksWzQsdGhpcy5jb250ZXh0LmNhY2hlLm1hdGNoKHQuc3JjKV07Y2FzZSA2OnJldHVybiB1PWkuc2VudCgpLHRoaXMucmVuZGVyUmVwbGFjZWRFbGVtZW50KHQscix1KSxbMyw4XTtjYXNlIDc6cmV0dXJuIGkuc2VudCgpLHRoaXMuY29udGV4dC5sb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgYCt0LnNyYyksWzMsOF07Y2FzZSA4OmlmKHQgaW5zdGFuY2VvZiBYbyYmdGhpcy5yZW5kZXJSZXBsYWNlZEVsZW1lbnQodCxyLHQuY2FudmFzKSwhKHQgaW5zdGFuY2VvZiBabykpcmV0dXJuWzMsMTJdO2kubGFiZWw9OTtjYXNlIDk6cmV0dXJuIGkudHJ5cy5wdXNoKFs5LDExLCwxMl0pLFs0LHRoaXMuY29udGV4dC5jYWNoZS5tYXRjaCh0LnN2ZyldO2Nhc2UgMTA6cmV0dXJuIHU9aS5zZW50KCksdGhpcy5yZW5kZXJSZXBsYWNlZEVsZW1lbnQodCxyLHUpLFszLDEyXTtjYXNlIDExOnJldHVybiBpLnNlbnQoKSx0aGlzLmNvbnRleHQubG9nZ2VyLmVycm9yKGBFcnJvciBsb2FkaW5nIHN2ZyBgK3Quc3ZnLnN1YnN0cmluZygwLDI1NSkpLFszLDEyXTtjYXNlIDEyOnJldHVybiB0IGluc3RhbmNlb2YgZHMmJnQudHJlZT8oZD1uZXcgbih0aGlzLmNvbnRleHQse3NjYWxlOnRoaXMub3B0aW9ucy5zY2FsZSxiYWNrZ3JvdW5kQ29sb3I6dC5iYWNrZ3JvdW5kQ29sb3IseDowLHk6MCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH0pLFs0LGQucmVuZGVyKHQudHJlZSldKTpbMywxNF07Y2FzZSAxMzpmPWkuc2VudCgpLHQud2lkdGgmJnQuaGVpZ2h0JiZ0aGlzLmN0eC5kcmF3SW1hZ2UoZiwwLDAsdC53aWR0aCx0LmhlaWdodCx0LmJvdW5kcy5sZWZ0LHQuYm91bmRzLnRvcCx0LmJvdW5kcy53aWR0aCx0LmJvdW5kcy5oZWlnaHQpLGkubGFiZWw9MTQ7Y2FzZSAxNDppZih0IGluc3RhbmNlb2YgY3MmJihwPU1hdGgubWluKHQuYm91bmRzLndpZHRoLHQuYm91bmRzLmhlaWdodCksdC50eXBlPT09aXM/dC5jaGVja2VkJiYodGhpcy5jdHguc2F2ZSgpLHRoaXMucGF0aChbbmV3IFkodC5ib3VuZHMubGVmdCtwKi4zOTM2Myx0LmJvdW5kcy50b3ArcCouNzkpLG5ldyBZKHQuYm91bmRzLmxlZnQrcCouMTYsdC5ib3VuZHMudG9wK3AqLjU1NDkpLG5ldyBZKHQuYm91bmRzLmxlZnQrcCouMjczNDcsdC5ib3VuZHMudG9wK3AqLjQ0MDcxKSxuZXcgWSh0LmJvdW5kcy5sZWZ0K3AqLjM5Njk0LHQuYm91bmRzLnRvcCtwKi41NjQ5KSxuZXcgWSh0LmJvdW5kcy5sZWZ0K3AqLjcyOTgzLHQuYm91bmRzLnRvcCtwKi4yMyksbmV3IFkodC5ib3VuZHMubGVmdCtwKi44NCx0LmJvdW5kcy50b3ArcCouMzQwODUpLG5ldyBZKHQuYm91bmRzLmxlZnQrcCouMzkzNjMsdC5ib3VuZHMudG9wK3AqLjc5KV0pLHRoaXMuY3R4LmZpbGxTdHlsZT1mcihzcyksdGhpcy5jdHguZmlsbCgpLHRoaXMuY3R4LnJlc3RvcmUoKSk6dC50eXBlPT09YXMmJnQuY2hlY2tlZCYmKHRoaXMuY3R4LnNhdmUoKSx0aGlzLmN0eC5iZWdpblBhdGgoKSx0aGlzLmN0eC5hcmModC5ib3VuZHMubGVmdCtwLzIsdC5ib3VuZHMudG9wK3AvMixwLzQsMCxNYXRoLlBJKjIsITApLHRoaXMuY3R4LmZpbGxTdHlsZT1mcihzcyksdGhpcy5jdHguZmlsbCgpLHRoaXMuY3R4LnJlc3RvcmUoKSkpLFNsKHQpJiZ0LnZhbHVlLmxlbmd0aCl7c3dpdGNoKG09dGhpcy5jcmVhdGVGb250U3R5bGUoYSksaD1tWzBdLGc9bVsxXSxfPXRoaXMuZm9udE1ldHJpY3MuZ2V0TWV0cmljcyhoLGcpLmJhc2VsaW5lLHRoaXMuY3R4LmZvbnQ9aCx0aGlzLmN0eC5maWxsU3R5bGU9ZnIoYS5jb2xvciksdGhpcy5jdHgudGV4dEJhc2VsaW5lPWBhbHBoYWJldGljYCx0aGlzLmN0eC50ZXh0QWxpZ249d2wodC5zdHlsZXMudGV4dEFsaWduKSx2PXNsKHQpLHk9MCx0LnN0eWxlcy50ZXh0QWxpZ24pe2Nhc2UgMTp5Kz12LndpZHRoLzI7YnJlYWs7Y2FzZSAyOnkrPXYud2lkdGg7YnJlYWt9Yj12LmFkZCh5LDAsMCwtdi5oZWlnaHQvMisxKSx0aGlzLmN0eC5zYXZlKCksdGhpcy5wYXRoKFtuZXcgWSh2LmxlZnQsdi50b3ApLG5ldyBZKHYubGVmdCt2LndpZHRoLHYudG9wKSxuZXcgWSh2LmxlZnQrdi53aWR0aCx2LnRvcCt2LmhlaWdodCksbmV3IFkodi5sZWZ0LHYudG9wK3YuaGVpZ2h0KV0pLHRoaXMuY3R4LmNsaXAoKSx0aGlzLnJlbmRlclRleHRXaXRoTGV0dGVyU3BhY2luZyhuZXcgSW8odC52YWx1ZSxiKSxhLmxldHRlclNwYWNpbmcsXyksdGhpcy5jdHgucmVzdG9yZSgpLHRoaXMuY3R4LnRleHRCYXNlbGluZT1gYWxwaGFiZXRpY2AsdGhpcy5jdHgudGV4dEFsaWduPWBsZWZ0YH1pZighaGEodC5zdHlsZXMuZGlzcGxheSwyMDQ4KSlyZXR1cm5bMywyMF07aWYodC5zdHlsZXMubGlzdFN0eWxlSW1hZ2U9PT1udWxsKXJldHVyblszLDE5XTtpZih4PXQuc3R5bGVzLmxpc3RTdHlsZUltYWdlLHgudHlwZSE9PTApcmV0dXJuWzMsMThdO3U9dm9pZCAwLFM9eC51cmwsaS5sYWJlbD0xNTtjYXNlIDE1OnJldHVybiBpLnRyeXMucHVzaChbMTUsMTcsLDE4XSksWzQsdGhpcy5jb250ZXh0LmNhY2hlLm1hdGNoKFMpXTtjYXNlIDE2OnJldHVybiB1PWkuc2VudCgpLHRoaXMuY3R4LmRyYXdJbWFnZSh1LHQuYm91bmRzLmxlZnQtKHUud2lkdGgrMTApLHQuYm91bmRzLnRvcCksWzMsMThdO2Nhc2UgMTc6cmV0dXJuIGkuc2VudCgpLHRoaXMuY29udGV4dC5sb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgbGlzdC1zdHlsZS1pbWFnZSBgK1MpLFszLDE4XTtjYXNlIDE4OnJldHVyblszLDIwXTtjYXNlIDE5OmUubGlzdFZhbHVlJiZ0LnN0eWxlcy5saXN0U3R5bGVUeXBlIT09LTEmJihoPXRoaXMuY3JlYXRlRm9udFN0eWxlKGEpWzBdLHRoaXMuY3R4LmZvbnQ9aCx0aGlzLmN0eC5maWxsU3R5bGU9ZnIoYS5jb2xvciksdGhpcy5jdHgudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHRoaXMuY3R4LnRleHRBbGlnbj1gcmlnaHRgLHY9bmV3IG8odC5ib3VuZHMubGVmdCx0LmJvdW5kcy50b3ArcSh0LnN0eWxlcy5wYWRkaW5nVG9wLHQuYm91bmRzLndpZHRoKSx0LmJvdW5kcy53aWR0aCxqaShhLmxpbmVIZWlnaHQsYS5mb250U2l6ZS5udW1iZXIpLzIrMSksdGhpcy5yZW5kZXJUZXh0V2l0aExldHRlclNwYWNpbmcobmV3IElvKGUubGlzdFZhbHVlLHYpLGEubGV0dGVyU3BhY2luZyxqaShhLmxpbmVIZWlnaHQsYS5mb250U2l6ZS5udW1iZXIpLzIrMiksdGhpcy5jdHgudGV4dEJhc2VsaW5lPWBib3R0b21gLHRoaXMuY3R4LnRleHRBbGlnbj1gbGVmdGApLGkubGFiZWw9MjA7Y2FzZSAyMDpyZXR1cm5bMl19fSl9KX0sbi5wcm90b3R5cGUucmVuZGVyU3RhY2tDb250ZW50PWZ1bmN0aW9uKGUpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0LG4scixhLG8scixzLGMscixsLHUscixkLGYscixwLG0scixoLGcscjtyZXR1cm4gaSh0aGlzLGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6aWYoaGEoZS5lbGVtZW50LmNvbnRhaW5lci5mbGFncywxNikpZGVidWdnZXI7cmV0dXJuWzQsdGhpcy5yZW5kZXJOb2RlQmFja2dyb3VuZEFuZEJvcmRlcnMoZS5lbGVtZW50KV07Y2FzZSAxOmkuc2VudCgpLHQ9MCxuPWUubmVnYXRpdmVaSW5kZXgsaS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gdDxuLmxlbmd0aD8ocj1uW3RdLFs0LHRoaXMucmVuZGVyU3RhY2socildKTpbMyw1XTtjYXNlIDM6aS5zZW50KCksaS5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gdCsrLFszLDJdO2Nhc2UgNTpyZXR1cm5bNCx0aGlzLnJlbmRlck5vZGVDb250ZW50KGUuZWxlbWVudCldO2Nhc2UgNjppLnNlbnQoKSxhPTAsbz1lLm5vbklubGluZUxldmVsLGkubGFiZWw9NztjYXNlIDc6cmV0dXJuIGE8by5sZW5ndGg/KHI9b1thXSxbNCx0aGlzLnJlbmRlck5vZGUocildKTpbMywxMF07Y2FzZSA4Omkuc2VudCgpLGkubGFiZWw9OTtjYXNlIDk6cmV0dXJuIGErKyxbMyw3XTtjYXNlIDEwOnM9MCxjPWUubm9uUG9zaXRpb25lZEZsb2F0cyxpLmxhYmVsPTExO2Nhc2UgMTE6cmV0dXJuIHM8Yy5sZW5ndGg/KHI9Y1tzXSxbNCx0aGlzLnJlbmRlclN0YWNrKHIpXSk6WzMsMTRdO2Nhc2UgMTI6aS5zZW50KCksaS5sYWJlbD0xMztjYXNlIDEzOnJldHVybiBzKyssWzMsMTFdO2Nhc2UgMTQ6bD0wLHU9ZS5ub25Qb3NpdGlvbmVkSW5saW5lTGV2ZWwsaS5sYWJlbD0xNTtjYXNlIDE1OnJldHVybiBsPHUubGVuZ3RoPyhyPXVbbF0sWzQsdGhpcy5yZW5kZXJTdGFjayhyKV0pOlszLDE4XTtjYXNlIDE2Omkuc2VudCgpLGkubGFiZWw9MTc7Y2FzZSAxNzpyZXR1cm4gbCsrLFszLDE1XTtjYXNlIDE4OmQ9MCxmPWUuaW5saW5lTGV2ZWwsaS5sYWJlbD0xOTtjYXNlIDE5OnJldHVybiBkPGYubGVuZ3RoPyhyPWZbZF0sWzQsdGhpcy5yZW5kZXJOb2RlKHIpXSk6WzMsMjJdO2Nhc2UgMjA6aS5zZW50KCksaS5sYWJlbD0yMTtjYXNlIDIxOnJldHVybiBkKyssWzMsMTldO2Nhc2UgMjI6cD0wLG09ZS56ZXJvT3JBdXRvWkluZGV4T3JUcmFuc2Zvcm1lZE9yT3BhY2l0eSxpLmxhYmVsPTIzO2Nhc2UgMjM6cmV0dXJuIHA8bS5sZW5ndGg/KHI9bVtwXSxbNCx0aGlzLnJlbmRlclN0YWNrKHIpXSk6WzMsMjZdO2Nhc2UgMjQ6aS5zZW50KCksaS5sYWJlbD0yNTtjYXNlIDI1OnJldHVybiBwKyssWzMsMjNdO2Nhc2UgMjY6aD0wLGc9ZS5wb3NpdGl2ZVpJbmRleCxpLmxhYmVsPTI3O2Nhc2UgMjc6cmV0dXJuIGg8Zy5sZW5ndGg/KHI9Z1toXSxbNCx0aGlzLnJlbmRlclN0YWNrKHIpXSk6WzMsMzBdO2Nhc2UgMjg6aS5zZW50KCksaS5sYWJlbD0yOTtjYXNlIDI5OnJldHVybiBoKyssWzMsMjddO2Nhc2UgMzA6cmV0dXJuWzJdfX0pfSl9LG4ucHJvdG90eXBlLm1hc2s9ZnVuY3Rpb24oZSl7dGhpcy5jdHguYmVnaW5QYXRoKCksdGhpcy5jdHgubW92ZVRvKDAsMCksdGhpcy5jdHgubGluZVRvKHRoaXMuY2FudmFzLndpZHRoLDApLHRoaXMuY3R4LmxpbmVUbyh0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY3R4LmxpbmVUbygwLHRoaXMuY2FudmFzLmhlaWdodCksdGhpcy5jdHgubGluZVRvKDAsMCksdGhpcy5mb3JtYXRQYXRoKGUuc2xpY2UoMCkucmV2ZXJzZSgpKSx0aGlzLmN0eC5jbG9zZVBhdGgoKX0sbi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbihlKXt0aGlzLmN0eC5iZWdpblBhdGgoKSx0aGlzLmZvcm1hdFBhdGgoZSksdGhpcy5jdHguY2xvc2VQYXRoKCl9LG4ucHJvdG90eXBlLmZvcm1hdFBhdGg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlLmZvckVhY2goZnVuY3Rpb24oZSxuKXt2YXIgcj1QYyhlKT9lLnN0YXJ0OmU7bj09PTA/dC5jdHgubW92ZVRvKHIueCxyLnkpOnQuY3R4LmxpbmVUbyhyLngsci55KSxQYyhlKSYmdC5jdHguYmV6aWVyQ3VydmVUbyhlLnN0YXJ0Q29udHJvbC54LGUuc3RhcnRDb250cm9sLnksZS5lbmRDb250cm9sLngsZS5lbmRDb250cm9sLnksZS5lbmQueCxlLmVuZC55KX0pfSxuLnByb3RvdHlwZS5yZW5kZXJSZXBlYXQ9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5wYXRoKGUpLHRoaXMuY3R4LmZpbGxTdHlsZT10LHRoaXMuY3R4LnRyYW5zbGF0ZShuLHIpLHRoaXMuY3R4LmZpbGwoKSx0aGlzLmN0eC50cmFuc2xhdGUoLW4sLXIpfSxuLnByb3RvdHlwZS5yZXNpemVJbWFnZT1mdW5jdGlvbihlLHQsbil7aWYoZS53aWR0aD09PXQmJmUuaGVpZ2h0PT09bilyZXR1cm4gZTt2YXIgcj0odGhpcy5jYW52YXMub3duZXJEb2N1bWVudD8/ZG9jdW1lbnQpLmNyZWF0ZUVsZW1lbnQoYGNhbnZhc2ApO3JldHVybiByLndpZHRoPU1hdGgubWF4KDEsdCksci5oZWlnaHQ9TWF0aC5tYXgoMSxuKSxyLmdldENvbnRleHQoYDJkYCkuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLHQsbikscn0sbi5wcm90b3R5cGUucmVuZGVyQmFja2dyb3VuZEltYWdlPWZ1bmN0aW9uKGUpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0LG4scixhLG8scztyZXR1cm4gaSh0aGlzLGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6dD1lLnN0eWxlcy5iYWNrZ3JvdW5kSW1hZ2UubGVuZ3RoLTEsbj1mdW5jdGlvbihuKXt2YXIgYSxvLHMsYyxsLHUsZCxmLHAsbSxjLGwsdSxkLGYsaCxnLF8sdix5LGIseCxTLEMscCx3LGMsVCxFLGQsZixELGwsdSxPLGssQSxqLE0sTixQLEY7cmV0dXJuIGkodGhpcyxmdW5jdGlvbihpKXtzd2l0Y2goaS5sYWJlbCl7Y2FzZSAwOmlmKG4udHlwZSE9PTApcmV0dXJuWzMsNV07YT12b2lkIDAsbz1uLnVybCxpLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBpLnRyeXMucHVzaChbMSwzLCw0XSksWzQsci5jb250ZXh0LmNhY2hlLm1hdGNoKG8pXTtjYXNlIDI6cmV0dXJuIGE9aS5zZW50KCksWzMsNF07Y2FzZSAzOnJldHVybiBpLnNlbnQoKSxyLmNvbnRleHQubG9nZ2VyLmVycm9yKGBFcnJvciBsb2FkaW5nIGJhY2tncm91bmQtaW1hZ2UgYCtvKSxbMyw0XTtjYXNlIDQ6cmV0dXJuIGEmJihzPXVsKGUsdCxbYS53aWR0aCxhLmhlaWdodCxhLndpZHRoL2EuaGVpZ2h0XSksYz1zWzBdLGw9c1sxXSx1PXNbMl0sZD1zWzNdLGY9c1s0XSxwPXIuY3R4LmNyZWF0ZVBhdHRlcm4oci5yZXNpemVJbWFnZShhLGQsZiksYHJlcGVhdGApLHIucmVuZGVyUmVwZWF0KGMscCxsLHUpKSxbMyw2XTtjYXNlIDU6VXIobik/KG09dWwoZSx0LFtudWxsLG51bGwsbnVsbF0pLGM9bVswXSxsPW1bMV0sdT1tWzJdLGQ9bVszXSxmPW1bNF0saD1FcihuLmFuZ2xlLGQsZiksZz1oWzBdLF89aFsxXSx2PWhbMl0seT1oWzNdLGI9aFs0XSx4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGNhbnZhc2ApLHgud2lkdGg9ZCx4LmhlaWdodD1mLFM9eC5nZXRDb250ZXh0KGAyZGApLEM9Uy5jcmVhdGVMaW5lYXJHcmFkaWVudChfLHksdixiKSx3cihuLnN0b3BzLGcpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIEMuYWRkQ29sb3JTdG9wKGUuc3RvcCxmcihlLmNvbG9yKSl9KSxTLmZpbGxTdHlsZT1DLFMuZmlsbFJlY3QoMCwwLGQsZiksZD4wJiZmPjAmJihwPXIuY3R4LmNyZWF0ZVBhdHRlcm4oeCxgcmVwZWF0YCksci5yZW5kZXJSZXBlYXQoYyxwLGwsdSkpKTpXcihuKSYmKHc9dWwoZSx0LFtudWxsLG51bGwsbnVsbF0pLGM9d1swXSxUPXdbMV0sRT13WzJdLGQ9d1szXSxmPXdbNF0sRD1uLnBvc2l0aW9uLmxlbmd0aD09PTA/WyRuXTpuLnBvc2l0aW9uLGw9cShEWzBdLGQpLHU9cShEW0QubGVuZ3RoLTFdLGYpLE89a3IobixsLHUsZCxmKSxrPU9bMF0sQT1PWzFdLGs+MCYmQT4wJiYoaj1yLmN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudChUK2wsRSt1LDAsVCtsLEUrdSxrKSx3cihuLnN0b3BzLGsqMikuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gai5hZGRDb2xvclN0b3AoZS5zdG9wLGZyKGUuY29sb3IpKX0pLHIucGF0aChjKSxyLmN0eC5maWxsU3R5bGU9aixrPT09QT9yLmN0eC5maWxsKCk6KE09ZS5ib3VuZHMubGVmdCsuNSplLmJvdW5kcy53aWR0aCxOPWUuYm91bmRzLnRvcCsuNSplLmJvdW5kcy5oZWlnaHQsUD1BL2ssRj0xL1Asci5jdHguc2F2ZSgpLHIuY3R4LnRyYW5zbGF0ZShNLE4pLHIuY3R4LnRyYW5zZm9ybSgxLDAsMCxQLDAsMCksci5jdHgudHJhbnNsYXRlKC1NLC1OKSxyLmN0eC5maWxsUmVjdChULEYqKEUtTikrTixkLGYqRiksci5jdHgucmVzdG9yZSgpKSkpLGkubGFiZWw9NjtjYXNlIDY6cmV0dXJuIHQtLSxbMl19fSl9LHI9dGhpcyxhPTAsbz1lLnN0eWxlcy5iYWNrZ3JvdW5kSW1hZ2Uuc2xpY2UoMCkucmV2ZXJzZSgpLGMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGE8by5sZW5ndGg/KHM9b1thXSxbNSxuKHMpXSk6WzMsNF07Y2FzZSAyOmMuc2VudCgpLGMubGFiZWw9MztjYXNlIDM6cmV0dXJuIGErKyxbMywxXTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LG4ucHJvdG90eXBlLnJlbmRlclNvbGlkQm9yZGVyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnBhdGgoZWwobix0KSksdGhpcy5jdHguZmlsbFN0eWxlPWZyKGUpLHRoaXMuY3R4LmZpbGwoKSxbMl19KX0pfSxuLnByb3RvdHlwZS5yZW5kZXJEb3VibGVCb3JkZXI9ZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIHIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHIsbztyZXR1cm4gaSh0aGlzLGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHQ8Mz9bNCx0aGlzLnJlbmRlclNvbGlkQm9yZGVyKGUsbixhKV06WzMsMl07Y2FzZSAxOnJldHVybiBpLnNlbnQoKSxbMl07Y2FzZSAyOnJldHVybiByPXRsKGEsbiksdGhpcy5wYXRoKHIpLHRoaXMuY3R4LmZpbGxTdHlsZT1mcihlKSx0aGlzLmN0eC5maWxsKCksbz1ubChhLG4pLHRoaXMucGF0aChvKSx0aGlzLmN0eC5maWxsKCksWzJdfX0pfSl9LG4ucHJvdG90eXBlLnJlbmRlck5vZGVCYWNrZ3JvdW5kQW5kQm9yZGVycz1mdW5jdGlvbihlKXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLHMsYyxsLHU9dGhpcztyZXR1cm4gaSh0aGlzLGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuYXBwbHlFZmZlY3RzKGUuZ2V0RWZmZWN0cygyKSksdD1lLmNvbnRhaW5lci5zdHlsZXMsbj0hZHIodC5iYWNrZ3JvdW5kQ29sb3IpfHx0LmJhY2tncm91bmRJbWFnZS5sZW5ndGgscj1be3N0eWxlOnQuYm9yZGVyVG9wU3R5bGUsY29sb3I6dC5ib3JkZXJUb3BDb2xvcix3aWR0aDp0LmJvcmRlclRvcFdpZHRofSx7c3R5bGU6dC5ib3JkZXJSaWdodFN0eWxlLGNvbG9yOnQuYm9yZGVyUmlnaHRDb2xvcix3aWR0aDp0LmJvcmRlclJpZ2h0V2lkdGh9LHtzdHlsZTp0LmJvcmRlckJvdHRvbVN0eWxlLGNvbG9yOnQuYm9yZGVyQm90dG9tQ29sb3Isd2lkdGg6dC5ib3JkZXJCb3R0b21XaWR0aH0se3N0eWxlOnQuYm9yZGVyTGVmdFN0eWxlLGNvbG9yOnQuYm9yZGVyTGVmdENvbG9yLHdpZHRoOnQuYm9yZGVyTGVmdFdpZHRofV0sYT1DbChtbCh0LmJhY2tncm91bmRDbGlwLDApLGUuY3VydmVzKSxufHx0LmJveFNoYWRvdy5sZW5ndGg/KHRoaXMuY3R4LnNhdmUoKSx0aGlzLnBhdGgoYSksdGhpcy5jdHguY2xpcCgpLGRyKHQuYmFja2dyb3VuZENvbG9yKXx8KHRoaXMuY3R4LmZpbGxTdHlsZT1mcih0LmJhY2tncm91bmRDb2xvciksdGhpcy5jdHguZmlsbCgpKSxbNCx0aGlzLnJlbmRlckJhY2tncm91bmRJbWFnZShlLmNvbnRhaW5lcildKTpbMywyXTtjYXNlIDE6aS5zZW50KCksdGhpcy5jdHgucmVzdG9yZSgpLHQuYm94U2hhZG93LnNsaWNlKDApLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3UuY3R4LnNhdmUoKTt2YXIgbj1SYyhlLmN1cnZlcykscj10Lmluc2V0PzA6YmwsaT1KYyhuLC1yKyh0Lmluc2V0PzE6LTEpKnQuc3ByZWFkLm51bWJlciwodC5pbnNldD8xOi0xKSp0LnNwcmVhZC5udW1iZXIsdC5zcHJlYWQubnVtYmVyKih0Lmluc2V0Py0yOjIpLHQuc3ByZWFkLm51bWJlcioodC5pbnNldD8tMjoyKSk7dC5pbnNldD8odS5wYXRoKG4pLHUuY3R4LmNsaXAoKSx1Lm1hc2soaSkpOih1Lm1hc2sobiksdS5jdHguY2xpcCgpLHUucGF0aChpKSksdS5jdHguc2hhZG93T2Zmc2V0WD10Lm9mZnNldFgubnVtYmVyK3IsdS5jdHguc2hhZG93T2Zmc2V0WT10Lm9mZnNldFkubnVtYmVyLHUuY3R4LnNoYWRvd0NvbG9yPWZyKHQuY29sb3IpLHUuY3R4LnNoYWRvd0JsdXI9dC5ibHVyLm51bWJlcix1LmN0eC5maWxsU3R5bGU9dC5pbnNldD9mcih0LmNvbG9yKTpgcmdiYSgwLDAsMCwxKWAsdS5jdHguZmlsbCgpLHUuY3R4LnJlc3RvcmUoKX0pLGkubGFiZWw9MjtjYXNlIDI6bz0wLHM9MCxjPXIsaS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gczxjLmxlbmd0aD8obD1jW3NdLGwuc3R5bGUhPT0wJiYhZHIobC5jb2xvcikmJmwud2lkdGg+MD9sLnN0eWxlPT09Mj9bNCx0aGlzLnJlbmRlckRhc2hlZERvdHRlZEJvcmRlcihsLmNvbG9yLGwud2lkdGgsbyxlLmN1cnZlcywyKV06WzMsNV06WzMsMTFdKTpbMywxM107Y2FzZSA0OnJldHVybiBpLnNlbnQoKSxbMywxMV07Y2FzZSA1OnJldHVybiBsLnN0eWxlPT09Mz9bNCx0aGlzLnJlbmRlckRhc2hlZERvdHRlZEJvcmRlcihsLmNvbG9yLGwud2lkdGgsbyxlLmN1cnZlcywzKV06WzMsN107Y2FzZSA2OnJldHVybiBpLnNlbnQoKSxbMywxMV07Y2FzZSA3OnJldHVybiBsLnN0eWxlPT09ND9bNCx0aGlzLnJlbmRlckRvdWJsZUJvcmRlcihsLmNvbG9yLGwud2lkdGgsbyxlLmN1cnZlcyldOlszLDldO2Nhc2UgODpyZXR1cm4gaS5zZW50KCksWzMsMTFdO2Nhc2UgOTpyZXR1cm5bNCx0aGlzLnJlbmRlclNvbGlkQm9yZGVyKGwuY29sb3IsbyxlLmN1cnZlcyldO2Nhc2UgMTA6aS5zZW50KCksaS5sYWJlbD0xMTtjYXNlIDExOm8rKyxpLmxhYmVsPTEyO2Nhc2UgMTI6cmV0dXJuIHMrKyxbMywzXTtjYXNlIDEzOnJldHVyblsyXX19KX0pfSxuLnByb3RvdHlwZS5yZW5kZXJEYXNoZWREb3R0ZWRCb3JkZXI9ZnVuY3Rpb24oZSx0LG4sYSxvKXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcixzLGMsbCx1LGQsZixwLG0saCxnLF8sdix5LGIseCxiLHg7cmV0dXJuIGkodGhpcyxmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5jdHguc2F2ZSgpLHI9cmwoYSxuKSxzPWVsKGEsbiksbz09PTImJih0aGlzLnBhdGgocyksdGhpcy5jdHguY2xpcCgpKSxQYyhzWzBdKT8oYz1zWzBdLnN0YXJ0LngsbD1zWzBdLnN0YXJ0LnkpOihjPXNbMF0ueCxsPXNbMF0ueSksUGMoc1sxXSk/KHU9c1sxXS5lbmQueCxkPXNbMV0uZW5kLnkpOih1PXNbMV0ueCxkPXNbMV0ueSksZj1NYXRoLmFicyhuPT09MHx8bj09PTI/Yy11OmwtZCksdGhpcy5jdHguYmVnaW5QYXRoKCksbz09PTM/dGhpcy5mb3JtYXRQYXRoKHIpOnRoaXMuZm9ybWF0UGF0aChzLnNsaWNlKDAsMikpLHA9dDwzP3QqMzp0KjIsbT10PDM/dCoyOnQsbz09PTMmJihwPXQsbT10KSxoPSEwLGY8PXAqMj9oPSExOmY8PXAqMittPyhnPWYvKDIqcCttKSxwKj1nLG0qPWcpOihfPU1hdGguZmxvb3IoKGYrbSkvKHArbSkpLHY9KGYtXypwKS8oXy0xKSx5PShmLShfKzEpKnApL18sbT15PD0wfHxNYXRoLmFicyhtLXYpPE1hdGguYWJzKG0teSk/djp5KSxoJiYobz09PTM/dGhpcy5jdHguc2V0TGluZURhc2goWzAscCttXSk6dGhpcy5jdHguc2V0TGluZURhc2goW3AsbV0pKSxvPT09Mz8odGhpcy5jdHgubGluZUNhcD1gcm91bmRgLHRoaXMuY3R4LmxpbmVXaWR0aD10KTp0aGlzLmN0eC5saW5lV2lkdGg9dCoyKzEuMSx0aGlzLmN0eC5zdHJva2VTdHlsZT1mcihlKSx0aGlzLmN0eC5zdHJva2UoKSx0aGlzLmN0eC5zZXRMaW5lRGFzaChbXSksbz09PTImJihQYyhzWzBdKSYmKGI9c1szXSx4PXNbMF0sdGhpcy5jdHguYmVnaW5QYXRoKCksdGhpcy5mb3JtYXRQYXRoKFtuZXcgWShiLmVuZC54LGIuZW5kLnkpLG5ldyBZKHguc3RhcnQueCx4LnN0YXJ0LnkpXSksdGhpcy5jdHguc3Ryb2tlKCkpLFBjKHNbMV0pJiYoYj1zWzFdLHg9c1syXSx0aGlzLmN0eC5iZWdpblBhdGgoKSx0aGlzLmZvcm1hdFBhdGgoW25ldyBZKGIuZW5kLngsYi5lbmQueSksbmV3IFkoeC5zdGFydC54LHguc3RhcnQueSldKSx0aGlzLmN0eC5zdHJva2UoKSkpLHRoaXMuY3R4LnJlc3RvcmUoKSxbMl19KX0pfSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGkodGhpcyxmdW5jdGlvbihuKXtzd2l0Y2gobi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yJiYodGhpcy5jdHguZmlsbFN0eWxlPWZyKHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuY3R4LmZpbGxSZWN0KHRoaXMub3B0aW9ucy54LHRoaXMub3B0aW9ucy55LHRoaXMub3B0aW9ucy53aWR0aCx0aGlzLm9wdGlvbnMuaGVpZ2h0KSksdD0kYyhlKSxbNCx0aGlzLnJlbmRlclN0YWNrKHQpXTtjYXNlIDE6cmV0dXJuIG4uc2VudCgpLHRoaXMuYXBwbHlFZmZlY3RzKFtdKSxbMix0aGlzLmNhbnZhc119fSl9KX0sbn0oeWwpLFNsPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdXN8fGUgaW5zdGFuY2VvZiBscz8hMDplIGluc3RhbmNlb2YgY3MmJmUudHlwZSE9PWFzJiZlLnR5cGUhPT1pc30sQ2w9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiBSYyh0KTtjYXNlIDI6cmV0dXJuIHpjKHQpO2RlZmF1bHQ6cmV0dXJuIEJjKHQpfX0sd2w9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm5gY2VudGVyYDtjYXNlIDI6cmV0dXJuYHJpZ2h0YDtkZWZhdWx0OnJldHVybmBsZWZ0YH19LFRsPVtgLWFwcGxlLXN5c3RlbWAsYHN5c3RlbS11aWBdLEVsPWZ1bmN0aW9uKGUpe3JldHVybi9pUGhvbmUgT1MgMTVfKDB8MSkvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpP2UuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBUbC5pbmRleE9mKGUpPT09LTF9KTplfSxEbD1mdW5jdGlvbihlKXt0KG4sZSk7ZnVuY3Rpb24gbih0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIuY2FudmFzPW4uY2FudmFzP24uY2FudmFzOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGNhbnZhc2ApLHIuY3R4PXIuY2FudmFzLmdldENvbnRleHQoYDJkYCksci5vcHRpb25zPW4sci5jYW52YXMud2lkdGg9TWF0aC5mbG9vcihuLndpZHRoKm4uc2NhbGUpLHIuY2FudmFzLmhlaWdodD1NYXRoLmZsb29yKG4uaGVpZ2h0Km4uc2NhbGUpLHIuY2FudmFzLnN0eWxlLndpZHRoPW4ud2lkdGgrYHB4YCxyLmNhbnZhcy5zdHlsZS5oZWlnaHQ9bi5oZWlnaHQrYHB4YCxyLmN0eC5zY2FsZShyLm9wdGlvbnMuc2NhbGUsci5vcHRpb25zLnNjYWxlKSxyLmN0eC50cmFuc2xhdGUoLW4ueCwtbi55KSxyLmNvbnRleHQubG9nZ2VyLmRlYnVnKGBFWFBFUklNRU5UQUwgRm9yZWlnbk9iamVjdCByZW5kZXJlciBpbml0aWFsaXplZCAoYCtuLndpZHRoK2B4YCtuLmhlaWdodCtgIGF0IGArbi54K2AsYCtuLnkrYCkgd2l0aCBzY2FsZSBgK24uc2NhbGUpLHJ9cmV0dXJuIG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBpKHRoaXMsZnVuY3Rpb24ocil7c3dpdGNoKHIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdD1Obyh0aGlzLm9wdGlvbnMud2lkdGgqdGhpcy5vcHRpb25zLnNjYWxlLHRoaXMub3B0aW9ucy5oZWlnaHQqdGhpcy5vcHRpb25zLnNjYWxlLHRoaXMub3B0aW9ucy5zY2FsZSx0aGlzLm9wdGlvbnMuc2NhbGUsZSksWzQsT2wodCldO2Nhc2UgMTpyZXR1cm4gbj1yLnNlbnQoKSx0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yJiYodGhpcy5jdHguZmlsbFN0eWxlPWZyKHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuY3R4LmZpbGxSZWN0KDAsMCx0aGlzLm9wdGlvbnMud2lkdGgqdGhpcy5vcHRpb25zLnNjYWxlLHRoaXMub3B0aW9ucy5oZWlnaHQqdGhpcy5vcHRpb25zLnNjYWxlKSksdGhpcy5jdHguZHJhd0ltYWdlKG4sLXRoaXMub3B0aW9ucy54KnRoaXMub3B0aW9ucy5zY2FsZSwtdGhpcy5vcHRpb25zLnkqdGhpcy5vcHRpb25zLnNjYWxlKSxbMix0aGlzLmNhbnZhc119fSl9KX0sbn0oeWwpLE9sPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe3ZhciByPW5ldyBJbWFnZTtyLm9ubG9hZD1mdW5jdGlvbigpe3Qocil9LHIub25lcnJvcj1uLHIuc3JjPWBkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxgK2VuY29kZVVSSUNvbXBvbmVudChuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKGUpKX0pfSxrbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5pZCxuPWUuZW5hYmxlZDt0aGlzLmlkPXQsdGhpcy5lbmFibGVkPW4sdGhpcy5zdGFydD1EYXRlLm5vdygpfXJldHVybiBlLnByb3RvdHlwZS5kZWJ1Zz1mdW5jdGlvbigpe3ZhciBlPVsuLi5hcmd1bWVudHNdO3RoaXMuZW5hYmxlZCYmKHR5cGVvZiB3aW5kb3c8YHVgJiZ3aW5kb3cuY29uc29sZSYmdHlwZW9mIGNvbnNvbGUuZGVidWc9PWBmdW5jdGlvbmA/Y29uc29sZS5kZWJ1Zy5hcHBseShjb25zb2xlLGEoW3RoaXMuaWQsdGhpcy5nZXRUaW1lKCkrYG1zYF0sZSkpOnRoaXMuaW5mby5hcHBseSh0aGlzLGUpKX0sZS5wcm90b3R5cGUuZ2V0VGltZT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpLXRoaXMuc3RhcnR9LGUucHJvdG90eXBlLmluZm89ZnVuY3Rpb24oKXt2YXIgZT1bLi4uYXJndW1lbnRzXTt0aGlzLmVuYWJsZWQmJnR5cGVvZiB3aW5kb3c8YHVgJiZ3aW5kb3cuY29uc29sZSYmdHlwZW9mIGNvbnNvbGUuaW5mbz09YGZ1bmN0aW9uYCYmY29uc29sZS5pbmZvLmFwcGx5KGNvbnNvbGUsYShbdGhpcy5pZCx0aGlzLmdldFRpbWUoKStgbXNgXSxlKSl9LGUucHJvdG90eXBlLndhcm49ZnVuY3Rpb24oKXt2YXIgZT1bLi4uYXJndW1lbnRzXTt0aGlzLmVuYWJsZWQmJih0eXBlb2Ygd2luZG93PGB1YCYmd2luZG93LmNvbnNvbGUmJnR5cGVvZiBjb25zb2xlLndhcm49PWBmdW5jdGlvbmA/Y29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsYShbdGhpcy5pZCx0aGlzLmdldFRpbWUoKStgbXNgXSxlKSk6dGhpcy5pbmZvLmFwcGx5KHRoaXMsZSkpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbigpe3ZhciBlPVsuLi5hcmd1bWVudHNdO3RoaXMuZW5hYmxlZCYmKHR5cGVvZiB3aW5kb3c8YHVgJiZ3aW5kb3cuY29uc29sZSYmdHlwZW9mIGNvbnNvbGUuZXJyb3I9PWBmdW5jdGlvbmA/Y29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLGEoW3RoaXMuaWQsdGhpcy5nZXRUaW1lKCkrYG1zYF0sZSkpOnRoaXMuaW5mby5hcHBseSh0aGlzLGUpKX0sZS5pbnN0YW5jZXM9e30sZX0oKSxBbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt0aGlzLndpbmRvd0JvdW5kcz1uLHRoaXMuaW5zdGFuY2VOYW1lPWAjYCsgZS5pbnN0YW5jZUNvdW50KyssdGhpcy5sb2dnZXI9bmV3IGtsKHtpZDp0aGlzLmluc3RhbmNlTmFtZSxlbmFibGVkOnQubG9nZ2luZ30pLHRoaXMuY2FjaGU9dC5jYWNoZT8/bmV3IENjKHRoaXMsdCl9cmV0dXJuIGUuaW5zdGFuY2VDb3VudD0xLGV9KCksamw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9e30pLE1sKGUsdCl9O3R5cGVvZiB3aW5kb3c8YHVgJiZTYy5zZXRDb250ZXh0KHdpbmRvdyk7dmFyIE1sPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcixhLGwsdSxkLGYscCxtLGgsZyxfLHYseSxiLHgsUyxDLHcsVCxFLEQsTyxEO3JldHVybiBpKHRoaXMsZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDppZighZXx8dHlwZW9mIGUhPWBvYmplY3RgKXJldHVyblsyLFByb21pc2UucmVqZWN0KGBJbnZhbGlkIGVsZW1lbnQgcHJvdmlkZWQgYXMgZmlyc3QgYXJndW1lbnRgKV07aWYocj1lLm93bmVyRG9jdW1lbnQsIXIpdGhyb3cgRXJyb3IoYEVsZW1lbnQgaXMgbm90IGF0dGFjaGVkIHRvIGEgRG9jdW1lbnRgKTtpZihhPXIuZGVmYXVsdFZpZXcsIWEpdGhyb3cgRXJyb3IoYERvY3VtZW50IGlzIG5vdCBhdHRhY2hlZCB0byBhIFdpbmRvd2ApO3JldHVybiBsPXthbGxvd1RhaW50OnQuYWxsb3dUYWludD8/ITEsaW1hZ2VUaW1lb3V0OnQuaW1hZ2VUaW1lb3V0Pz8xNWUzLHByb3h5OnQucHJveHksdXNlQ09SUzp0LnVzZUNPUlM/PyExfSx1PW4oe2xvZ2dpbmc6dC5sb2dnaW5nPz8hMCxjYWNoZTp0LmNhY2hlfSxsKSxkPXt3aW5kb3dXaWR0aDp0LndpbmRvd1dpZHRoPz9hLmlubmVyV2lkdGgsd2luZG93SGVpZ2h0OnQud2luZG93SGVpZ2h0Pz9hLmlubmVySGVpZ2h0LHNjcm9sbFg6dC5zY3JvbGxYPz9hLnBhZ2VYT2Zmc2V0LHNjcm9sbFk6dC5zY3JvbGxZPz9hLnBhZ2VZT2Zmc2V0fSxmPW5ldyBvKGQuc2Nyb2xsWCxkLnNjcm9sbFksZC53aW5kb3dXaWR0aCxkLndpbmRvd0hlaWdodCkscD1uZXcgQWwodSxmKSxtPXQuZm9yZWlnbk9iamVjdFJlbmRlcmluZz8/ITEsaD17YWxsb3dUYWludDp0LmFsbG93VGFpbnQ/PyExLG9uY2xvbmU6dC5vbmNsb25lLGlnbm9yZUVsZW1lbnRzOnQuaWdub3JlRWxlbWVudHMsaW5saW5lSW1hZ2VzOm0sY29weVN0eWxlczptfSxwLmxvZ2dlci5kZWJ1ZyhgU3RhcnRpbmcgZG9jdW1lbnQgY2xvbmUgd2l0aCBzaXplIGArZi53aWR0aCtgeGArZi5oZWlnaHQrYCBzY3JvbGxlZCB0byBgKy1mLmxlZnQrYCxgKy1mLnRvcCksZz1uZXcgaWMocCxlLGgpLF89Zy5jbG9uZWRSZWZlcmVuY2VFbGVtZW50LF8/WzQsZy50b0lGcmFtZShyLGYpXTpbMixQcm9taXNlLnJlamVjdChgVW5hYmxlIHRvIGZpbmQgZWxlbWVudCBpbiBjbG9uZWQgaWZyYW1lYCldO2Nhc2UgMTpyZXR1cm4gdj1pLnNlbnQoKSx5PURzKF8pfHxUcyhfKT9jKF8ub3duZXJEb2N1bWVudCk6cyhwLF8pLGI9eS53aWR0aCx4PXkuaGVpZ2h0LFM9eS5sZWZ0LEM9eS50b3Asdz1ObChwLF8sdC5iYWNrZ3JvdW5kQ29sb3IpLFQ9e2NhbnZhczp0LmNhbnZhcyxiYWNrZ3JvdW5kQ29sb3I6dyxzY2FsZTp0LnNjYWxlPz9hLmRldmljZVBpeGVsUmF0aW8/PzEseDoodC54Pz8wKStTLHk6KHQueT8/MCkrQyx3aWR0aDp0LndpZHRoPz9NYXRoLmNlaWwoYiksaGVpZ2h0OnQuaGVpZ2h0Pz9NYXRoLmNlaWwoeCl9LG0/KHAubG9nZ2VyLmRlYnVnKGBEb2N1bWVudCBjbG9uZWQsIHVzaW5nIGZvcmVpZ24gb2JqZWN0IHJlbmRlcmluZ2ApLEQ9bmV3IERsKHAsVCksWzQsRC5yZW5kZXIoXyldKTpbMywzXTtjYXNlIDI6cmV0dXJuIEU9aS5zZW50KCksWzMsNV07Y2FzZSAzOnJldHVybiBwLmxvZ2dlci5kZWJ1ZyhgRG9jdW1lbnQgY2xvbmVkLCBlbGVtZW50IGxvY2F0ZWQgYXQgYCtTK2AsYCtDK2Agd2l0aCBzaXplIGArYitgeGAreCtgIHVzaW5nIGNvbXB1dGVkIHJlbmRlcmluZ2ApLHAubG9nZ2VyLmRlYnVnKGBTdGFydGluZyBET00gcGFyc2luZ2ApLE89aHMocCxfKSx3PT09Ty5zdHlsZXMuYmFja2dyb3VuZENvbG9yJiYoTy5zdHlsZXMuYmFja2dyb3VuZENvbG9yPWJyLlRSQU5TUEFSRU5UKSxwLmxvZ2dlci5kZWJ1ZyhgU3RhcnRpbmcgcmVuZGVyZXIgZm9yIGVsZW1lbnQgYXQgYCtULngrYCxgK1QueStgIHdpdGggc2l6ZSBgK1Qud2lkdGgrYHhgK1QuaGVpZ2h0KSxEPW5ldyB4bChwLFQpLFs0LEQucmVuZGVyKE8pXTtjYXNlIDQ6RT1pLnNlbnQoKSxpLmxhYmVsPTU7Y2FzZSA1OnJldHVybih0LnJlbW92ZUNvbnRhaW5lcj8/ITApJiYoaWMuZGVzdHJveSh2KXx8cC5sb2dnZXIuZXJyb3IoYENhbm5vdCBkZXRhY2ggY2xvbmVkIGlmcmFtZSBhcyBpdCBpcyBub3QgaW4gdGhlIERPTSBhbnltb3JlYCkpLHAubG9nZ2VyLmRlYnVnKGBGaW5pc2hlZCByZW5kZXJpbmdgKSxbMixFXX19KX0pfSxObD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5vd25lckRvY3VtZW50LGk9ci5kb2N1bWVudEVsZW1lbnQ/eXIoZSxnZXRDb21wdXRlZFN0eWxlKHIuZG9jdW1lbnRFbGVtZW50KS5iYWNrZ3JvdW5kQ29sb3IpOmJyLlRSQU5TUEFSRU5ULGE9ci5ib2R5P3lyKGUsZ2V0Q29tcHV0ZWRTdHlsZShyLmJvZHkpLmJhY2tncm91bmRDb2xvcik6YnIuVFJBTlNQQVJFTlQsbz10eXBlb2Ygbj09YHN0cmluZ2A/eXIoZSxuKTpuPT09bnVsbD9ici5UUkFOU1BBUkVOVDo0Mjk0OTY3Mjk1O3JldHVybiB0PT09ci5kb2N1bWVudEVsZW1lbnQ/ZHIoaSk/ZHIoYSk/bzphOmk6b307cmV0dXJuIGpsfSkpfSkpLG1zPWMoe2RlZmF1bHQ6KCk9Pll9KTtmdW5jdGlvbiBocyhlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gZ3MoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX1mdW5jdGlvbiBfcyhlLHQpe3ZhciBuPWU9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYobiE9bnVsbCl7dmFyIHIsaSxhLG8scz1bXSxjPSEwLGw9ITE7dHJ5e2lmKGE9KG49bi5jYWxsKGUpKS5uZXh0LHQhPT0wKWZvcig7IShjPShyPWEuY2FsbChuKSkuZG9uZSkmJihzLnB1c2goci52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7bD0hMCxpPWV9ZmluYWxseXt0cnl7aWYoIWMmJm4ucmV0dXJuIT1udWxsJiYobz1uLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKGwpdGhyb3cgaX19cmV0dXJuIHN9fWZ1bmN0aW9uIHZzKCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24geXMoZSx0KXtyZXR1cm4gZ3MoZSl8fF9zKGUsdCl8fGJzKGUsdCl8fHZzKCl9ZnVuY3Rpb24gYnMoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGhzKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9ocyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24geHMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3QgaW5zdGFuY2VvZiBSZWdFeHAmJih0Lmxhc3RJbmRleD0wKTt2YXIgbj1bLi4uYXJndW1lbnRzXS5zbGljZSgxKTtyZXR1cm4genMoZSx0LG4pfX1mdW5jdGlvbiBTcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQnMoZSxbLi4uYXJndW1lbnRzXSl9fWZ1bmN0aW9uIENzKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnFzO2lmKGpzJiZqcyhlLG51bGwpLCFLcyh0KSlyZXR1cm4gZTtsZXQgcj10Lmxlbmd0aDtmb3IoO3ItLTspe2xldCBpPXRbcl07aWYodHlwZW9mIGk9PWBzdHJpbmdgKXtsZXQgZT1uKGkpO2UhPT1pJiYoTXModCl8fCh0W3JdPWUpLGk9ZSl9ZVtpXT0hMH1yZXR1cm4gZX1mdW5jdGlvbiB3cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylyYyhlLHQpfHwoZVt0XT1udWxsKTtyZXR1cm4gZX1mdW5jdGlvbiBUcyhlKXtsZXQgdD1McyhudWxsKTtmb3IobGV0IHIgb2YgQXMoZSkpe3ZhciBuPXlzKHIsMik7bGV0IGk9blswXSxhPW5bMV07cmMoZSxpKSYmKEtzKGEpP3RbaV09d3MoYSk6YSYmdHlwZW9mIGE9PWBvYmplY3RgJiZhLmNvbnN0cnVjdG9yPT09T2JqZWN0P3RbaV09VHMoYSk6dFtpXT1hKX1yZXR1cm4gdH1mdW5jdGlvbiBFcyhlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Vgc3RyaW5nYDpyZXR1cm4gZTtjYXNlYG51bWJlcmA6cmV0dXJuICRzKGUpO2Nhc2VgYm9vbGVhbmA6cmV0dXJuIGVjKGUpO2Nhc2VgYmlnaW50YDpyZXR1cm4gdGM/dGMoZSk6YDBgO2Nhc2Vgc3ltYm9sYDpyZXR1cm4gbmM/bmMoZSk6YFN5bWJvbCgpYDtjYXNlYHVuZGVmaW5lZGA6cmV0dXJuIGljKGUpO2Nhc2VgZnVuY3Rpb25gOmNhc2Vgb2JqZWN0YDp7aWYoZT09PW51bGwpcmV0dXJuIGljKGUpO2xldCB0PWUsbj1Ecyh0LGB0b1N0cmluZ2ApO2lmKHR5cGVvZiBuPT1gZnVuY3Rpb25gKXtsZXQgZT1uKHQpO3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2A/ZTppYyhlKX1yZXR1cm4gaWMoZSl9ZGVmYXVsdDpyZXR1cm4gaWMoZSl9fWZ1bmN0aW9uIERzKGUsdCl7Zm9yKDtlIT09bnVsbDspe2xldCBuPVBzKGUsdCk7aWYobil7aWYobi5nZXQpcmV0dXJuIHhzKG4uZ2V0KTtpZih0eXBlb2Ygbi52YWx1ZT09YGZ1bmN0aW9uYClyZXR1cm4geHMobi52YWx1ZSl9ZT1OcyhlKX1mdW5jdGlvbiBuKCl7cmV0dXJuIG51bGx9cmV0dXJuIG59ZnVuY3Rpb24gT3MoZSl7dHJ5e3JldHVybiBhYyhlLGBgKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24ga3MoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06a2MoKSx0PWU9PmtzKGUpO2lmKHQudmVyc2lvbj1gMy40LjNgLHQucmVtb3ZlZD1bXSwhZXx8IWUuZG9jdW1lbnR8fGUuZG9jdW1lbnQubm9kZVR5cGUhPT1PYy5kb2N1bWVudHx8IWUuRWxlbWVudClyZXR1cm4gdC5pc1N1cHBvcnRlZD0hMSx0O2xldCBuPWUuZG9jdW1lbnQscj1uLGk9ci5jdXJyZW50U2NyaXB0LGE9ZS5Eb2N1bWVudEZyYWdtZW50LG89ZS5IVE1MVGVtcGxhdGVFbGVtZW50LHM9ZS5Ob2RlLGM9ZS5FbGVtZW50LGw9ZS5Ob2RlRmlsdGVyLHU9ZS5OYW1lZE5vZGVNYXAsZD11PT09dm9pZCAwP2UuTmFtZWROb2RlTWFwfHxlLk1vek5hbWVkQXR0ck1hcDp1LGY9ZS5IVE1MRm9ybUVsZW1lbnQscD1lLkRPTVBhcnNlcixtPWUudHJ1c3RlZFR5cGVzLGg9Yy5wcm90b3R5cGUsZz1EcyhoLGBjbG9uZU5vZGVgKSxfPURzKGgsYHJlbW92ZWApLHY9RHMoaCxgbmV4dFNpYmxpbmdgKSx5PURzKGgsYGNoaWxkTm9kZXNgKSxiPURzKGgsYHBhcmVudE5vZGVgKTtpZih0eXBlb2Ygbz09YGZ1bmN0aW9uYCl7bGV0IGU9bi5jcmVhdGVFbGVtZW50KGB0ZW1wbGF0ZWApO2UuY29udGVudCYmZS5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihuPWUuY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgeCxTPWBgLEM9bix3PUMuaW1wbGVtZW50YXRpb24sVD1DLmNyZWF0ZU5vZGVJdGVyYXRvcixFPUMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxEPUMuZ2V0RWxlbWVudHNCeVRhZ05hbWUsTz1yLmltcG9ydE5vZGUsaz1qYygpO3QuaXNTdXBwb3J0ZWQ9dHlwZW9mIEFzPT1gZnVuY3Rpb25gJiZ0eXBlb2YgYj09YGZ1bmN0aW9uYCYmdyYmdy5jcmVhdGVIVE1MRG9jdW1lbnQhPT12b2lkIDA7bGV0IEE9dmMsaj15YyxNPWJjLE49eGMsUD1TYyxGPXdjLEk9VGMsTD1EYyxSPUNjLHo9bnVsbCxCPUNzKHt9LFsuLi5zYywuLi5jYywuLi5sYywuLi5kYywuLi5wY10pLFY9bnVsbCxlZT1Dcyh7fSxbLi4ubWMsLi4uaGMsLi4uZ2MsLi4uX2NdKSxIPU9iamVjdC5zZWFsKExzKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxVPW51bGwsVz1udWxsLEc9T2JqZWN0LnNlYWwoTHMobnVsbCx7dGFnQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfX0pKSx0ZT0hMCxuZT0hMCxyZT0hMSxpZT0hMCxhZT0hMSxLPSEwLG9lPSExLHNlPSExLGNlPSExLGxlPSExLHVlPSExLGRlPSExLGZlPSEwLHBlPSExLG1lPWB1c2VyLWNvbnRlbnQtYCxoZT0hMCxnZT0hMSxfZT17fSx2ZT1udWxsLHllPUNzKHt9LFtgYW5ub3RhdGlvbi14bWxgLGBhdWRpb2AsYGNvbGdyb3VwYCxgZGVzY2AsYGZvcmVpZ25vYmplY3RgLGBoZWFkYCxgaWZyYW1lYCxgbWF0aGAsYG1pYCxgbW5gLGBtb2AsYG1zYCxgbXRleHRgLGBub2VtYmVkYCxgbm9mcmFtZXNgLGBub3NjcmlwdGAsYHBsYWludGV4dGAsYHNjcmlwdGAsYHN0eWxlYCxgc3ZnYCxgdGVtcGxhdGVgLGB0aGVhZGAsYHRpdGxlYCxgdmlkZW9gLGB4bXBgXSksYmU9bnVsbCx4ZT1Dcyh7fSxbYGF1ZGlvYCxgdmlkZW9gLGBpbWdgLGBzb3VyY2VgLGBpbWFnZWAsYHRyYWNrYF0pLFNlPW51bGwsQ2U9Q3Moe30sW2BhbHRgLGBjbGFzc2AsYGZvcmAsYGlkYCxgbGFiZWxgLGBuYW1lYCxgcGF0dGVybmAsYHBsYWNlaG9sZGVyYCxgcm9sZWAsYHN1bW1hcnlgLGB0aXRsZWAsYHZhbHVlYCxgc3R5bGVgLGB4bWxuc2BdKSx3ZT1gaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTGAsVGU9YGh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnYCxFZT1gaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbGAsRGU9RWUsT2U9ITEsa2U9bnVsbCxBZT1Dcyh7fSxbd2UsVGUsRWVdLEpzKSxqZT1Dcyh7fSxbYG1pYCxgbW9gLGBtbmAsYG1zYCxgbXRleHRgXSksTWU9Q3Moe30sW2Bhbm5vdGF0aW9uLXhtbGBdKSxOZT1Dcyh7fSxbYHRpdGxlYCxgc3R5bGVgLGBmb250YCxgYWAsYHNjcmlwdGBdKSxQZT1udWxsLEZlPVtgYXBwbGljYXRpb24veGh0bWwreG1sYCxgdGV4dC9odG1sYF0sSWU9bnVsbCxMZT1udWxsLFJlPW4uY3JlYXRlRWxlbWVudChgZm9ybWApLHplPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgUmVnRXhwfHxlIGluc3RhbmNlb2YgRnVuY3Rpb259LEJlPWZ1bmN0aW9uKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O2lmKExlJiZMZT09PWUpcmV0dXJuOyghZXx8dHlwZW9mIGUhPWBvYmplY3RgKSYmKGU9e30pLGU9VHMoZSksUGU9RmUuaW5kZXhPZihlLlBBUlNFUl9NRURJQV9UWVBFKT09PS0xP2B0ZXh0L2h0bWxgOmUuUEFSU0VSX01FRElBX1RZUEUsSWU9UGU9PT1gYXBwbGljYXRpb24veGh0bWwreG1sYD9Kczpxcyx6PXJjKGUsYEFMTE9XRURfVEFHU2ApJiZLcyhlLkFMTE9XRURfVEFHUyk/Q3Moe30sZS5BTExPV0VEX1RBR1MsSWUpOkIsVj1yYyhlLGBBTExPV0VEX0FUVFJgKSYmS3MoZS5BTExPV0VEX0FUVFIpP0NzKHt9LGUuQUxMT1dFRF9BVFRSLEllKTplZSxrZT1yYyhlLGBBTExPV0VEX05BTUVTUEFDRVNgKSYmS3MoZS5BTExPV0VEX05BTUVTUEFDRVMpP0NzKHt9LGUuQUxMT1dFRF9OQU1FU1BBQ0VTLEpzKTpBZSxTZT1yYyhlLGBBRERfVVJJX1NBRkVfQVRUUmApJiZLcyhlLkFERF9VUklfU0FGRV9BVFRSKT9DcyhUcyhDZSksZS5BRERfVVJJX1NBRkVfQVRUUixJZSk6Q2UsYmU9cmMoZSxgQUREX0RBVEFfVVJJX1RBR1NgKSYmS3MoZS5BRERfREFUQV9VUklfVEFHUyk/Q3MoVHMoeGUpLGUuQUREX0RBVEFfVVJJX1RBR1MsSWUpOnhlLHZlPXJjKGUsYEZPUkJJRF9DT05URU5UU2ApJiZLcyhlLkZPUkJJRF9DT05URU5UUyk/Q3Moe30sZS5GT1JCSURfQ09OVEVOVFMsSWUpOnllLFU9cmMoZSxgRk9SQklEX1RBR1NgKSYmS3MoZS5GT1JCSURfVEFHUyk/Q3Moe30sZS5GT1JCSURfVEFHUyxJZSk6VHMoe30pLFc9cmMoZSxgRk9SQklEX0FUVFJgKSYmS3MoZS5GT1JCSURfQVRUUik/Q3Moe30sZS5GT1JCSURfQVRUUixJZSk6VHMoe30pLF9lPXJjKGUsYFVTRV9QUk9GSUxFU2ApP2UuVVNFX1BST0ZJTEVTJiZ0eXBlb2YgZS5VU0VfUFJPRklMRVM9PWBvYmplY3RgP1RzKGUuVVNFX1BST0ZJTEVTKTplLlVTRV9QUk9GSUxFUzohMSx0ZT1lLkFMTE9XX0FSSUFfQVRUUiE9PSExLG5lPWUuQUxMT1dfREFUQV9BVFRSIT09ITEscmU9ZS5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsaWU9ZS5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIhPT0hMSxhZT1lLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEsSz1lLlNBRkVfRk9SX1hNTCE9PSExLG9lPWUuV0hPTEVfRE9DVU1FTlR8fCExLGxlPWUuUkVUVVJOX0RPTXx8ITEsdWU9ZS5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxkZT1lLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLGNlPWUuRk9SQ0VfQk9EWXx8ITEsZmU9ZS5TQU5JVElaRV9ET00hPT0hMSxwZT1lLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxoZT1lLktFRVBfQ09OVEVOVCE9PSExLGdlPWUuSU5fUExBQ0V8fCExLFI9T3MoZS5BTExPV0VEX1VSSV9SRUdFWFApP2UuQUxMT1dFRF9VUklfUkVHRVhQOkNjLERlPXR5cGVvZiBlLk5BTUVTUEFDRT09YHN0cmluZ2A/ZS5OQU1FU1BBQ0U6RWUsamU9cmMoZSxgTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTYCkmJmUuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTJiZ0eXBlb2YgZS5NQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFM9PWBvYmplY3RgP1RzKGUuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTKTpDcyh7fSxbYG1pYCxgbW9gLGBtbmAsYG1zYCxgbXRleHRgXSksTWU9cmMoZSxgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNgKSYmZS5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyYmdHlwZW9mIGUuSFRNTF9JTlRFR1JBVElPTl9QT0lOVFM9PWBvYmplY3RgP1RzKGUuSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMpOkNzKHt9LFtgYW5ub3RhdGlvbi14bWxgXSk7bGV0IHQ9cmMoZSxgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkdgKSYmZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkc9PWBvYmplY3RgP1RzKGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcpOkxzKG51bGwpO2lmKEg9THMobnVsbCkscmModCxgdGFnTmFtZUNoZWNrYCkmJnplKHQudGFnTmFtZUNoZWNrKSYmKEgudGFnTmFtZUNoZWNrPXQudGFnTmFtZUNoZWNrKSxyYyh0LGBhdHRyaWJ1dGVOYW1lQ2hlY2tgKSYmemUodC5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoSC5hdHRyaWJ1dGVOYW1lQ2hlY2s9dC5hdHRyaWJ1dGVOYW1lQ2hlY2spLHJjKHQsYGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50c2ApJiZ0eXBlb2YgdC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9PWBib29sZWFuYCYmKEguYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPXQuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzKSxhZSYmKG5lPSExKSx1ZSYmKGxlPSEwKSxfZSYmKHo9Q3Moe30scGMpLFY9THMobnVsbCksX2UuaHRtbD09PSEwJiYoQ3MoeixzYyksQ3MoVixtYykpLF9lLnN2Zz09PSEwJiYoQ3MoeixjYyksQ3MoVixoYyksQ3MoVixfYykpLF9lLnN2Z0ZpbHRlcnM9PT0hMCYmKENzKHosbGMpLENzKFYsaGMpLENzKFYsX2MpKSxfZS5tYXRoTWw9PT0hMCYmKENzKHosZGMpLENzKFYsZ2MpLENzKFYsX2MpKSksRy50YWdDaGVjaz1udWxsLEcuYXR0cmlidXRlQ2hlY2s9bnVsbCxyYyhlLGBBRERfVEFHU2ApJiYodHlwZW9mIGUuQUREX1RBR1M9PWBmdW5jdGlvbmA/Ry50YWdDaGVjaz1lLkFERF9UQUdTOktzKGUuQUREX1RBR1MpJiYoej09PUImJih6PVRzKHopKSxDcyh6LGUuQUREX1RBR1MsSWUpKSkscmMoZSxgQUREX0FUVFJgKSYmKHR5cGVvZiBlLkFERF9BVFRSPT1gZnVuY3Rpb25gP0cuYXR0cmlidXRlQ2hlY2s9ZS5BRERfQVRUUjpLcyhlLkFERF9BVFRSKSYmKFY9PT1lZSYmKFY9VHMoVikpLENzKFYsZS5BRERfQVRUUixJZSkpKSxyYyhlLGBBRERfVVJJX1NBRkVfQVRUUmApJiZLcyhlLkFERF9VUklfU0FGRV9BVFRSKSYmQ3MoU2UsZS5BRERfVVJJX1NBRkVfQVRUUixJZSkscmMoZSxgRk9SQklEX0NPTlRFTlRTYCkmJktzKGUuRk9SQklEX0NPTlRFTlRTKSYmKHZlPT09eWUmJih2ZT1Ucyh2ZSkpLENzKHZlLGUuRk9SQklEX0NPTlRFTlRTLEllKSkscmMoZSxgQUREX0ZPUkJJRF9DT05URU5UU2ApJiZLcyhlLkFERF9GT1JCSURfQ09OVEVOVFMpJiYodmU9PT15ZSYmKHZlPVRzKHZlKSksQ3ModmUsZS5BRERfRk9SQklEX0NPTlRFTlRTLEllKSksaGUmJih6W2AjdGV4dGBdPSEwKSxvZSYmQ3MoeixbYGh0bWxgLGBoZWFkYCxgYm9keWBdKSx6LnRhYmxlJiYoQ3MoeixbYHRib2R5YF0pLGRlbGV0ZSBVLnRib2R5KSxlLlRSVVNURURfVFlQRVNfUE9MSUNZKXtpZih0eXBlb2YgZS5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT1gZnVuY3Rpb25gKXRocm93IG9jKGBUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay5gKTtpZih0eXBlb2YgZS5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwhPWBmdW5jdGlvbmApdGhyb3cgb2MoYFRSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suYCk7eD1lLlRSVVNURURfVFlQRVNfUE9MSUNZLFM9eC5jcmVhdGVIVE1MKGBgKX1lbHNlIHg9PT12b2lkIDAmJih4PUFjKG0saSkpLHghPT1udWxsJiZ0eXBlb2YgUz09YHN0cmluZ2AmJihTPXguY3JlYXRlSFRNTChgYCkpO0ZzJiZGcyhlKSxMZT1lfSxWZT1Dcyh7fSxbLi4uY2MsLi4ubGMsLi4udWNdKSxIZT1Dcyh7fSxbLi4uZGMsLi4uZmNdKSxVZT1mdW5jdGlvbihlKXtsZXQgdD1iKGUpOyghdHx8IXQudGFnTmFtZSkmJih0PXtuYW1lc3BhY2VVUkk6RGUsdGFnTmFtZTpgdGVtcGxhdGVgfSk7bGV0IG49cXMoZS50YWdOYW1lKSxyPXFzKHQudGFnTmFtZSk7cmV0dXJuIGtlW2UubmFtZXNwYWNlVVJJXT9lLm5hbWVzcGFjZVVSST09PVRlP3QubmFtZXNwYWNlVVJJPT09RWU/bj09PWBzdmdgOnQubmFtZXNwYWNlVVJJPT09d2U/bj09PWBzdmdgJiYocj09PWBhbm5vdGF0aW9uLXhtbGB8fGplW3JdKTohIVZlW25dOmUubmFtZXNwYWNlVVJJPT09d2U/dC5uYW1lc3BhY2VVUkk9PT1FZT9uPT09YG1hdGhgOnQubmFtZXNwYWNlVVJJPT09VGU/bj09PWBtYXRoYCYmTWVbcl06ISFIZVtuXTplLm5hbWVzcGFjZVVSST09PUVlP3QubmFtZXNwYWNlVVJJPT09VGUmJiFNZVtyXXx8dC5uYW1lc3BhY2VVUkk9PT13ZSYmIWplW3JdPyExOiFIZVtuXSYmKE5lW25dfHwhVmVbbl0pOiEhKFBlPT09YGFwcGxpY2F0aW9uL3hodG1sK3htbGAmJmtlW2UubmFtZXNwYWNlVVJJXSk6ITF9LFdlPWZ1bmN0aW9uKGUpe1dzKHQucmVtb3ZlZCx7ZWxlbWVudDplfSk7dHJ5e2IoZSkucmVtb3ZlQ2hpbGQoZSl9Y2F0Y2h7XyhlKX19LEdlPWZ1bmN0aW9uKGUsbil7dHJ5e1dzKHQucmVtb3ZlZCx7YXR0cmlidXRlOm4uZ2V0QXR0cmlidXRlTm9kZShlKSxmcm9tOm59KX1jYXRjaHtXcyh0LnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206bn0pfWlmKG4ucmVtb3ZlQXR0cmlidXRlKGUpLGU9PT1gaXNgKWlmKGxlfHx1ZSl0cnl7V2Uobil9Y2F0Y2h7fWVsc2UgdHJ5e24uc2V0QXR0cmlidXRlKGUsYGApfWNhdGNoe319LEtlPWZ1bmN0aW9uKGUpe2xldCB0PW51bGwscj1udWxsO2lmKGNlKWU9YDxyZW1vdmU+PC9yZW1vdmU+YCtlO2Vsc2V7bGV0IHQ9WXMoZSwvXltcclxuXHQgXSsvKTtyPXQmJnRbMF19UGU9PT1gYXBwbGljYXRpb24veGh0bWwreG1sYCYmRGU9PT1FZSYmKGU9YDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+YCtlK2A8L2JvZHk+PC9odG1sPmApO2xldCBpPXg/eC5jcmVhdGVIVE1MKGUpOmU7aWYoRGU9PT1FZSl0cnl7dD1uZXcgcCgpLnBhcnNlRnJvbVN0cmluZyhpLFBlKX1jYXRjaHt9aWYoIXR8fCF0LmRvY3VtZW50RWxlbWVudCl7dD13LmNyZWF0ZURvY3VtZW50KERlLGB0ZW1wbGF0ZWAsbnVsbCk7dHJ5e3QuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1PZT9TOml9Y2F0Y2h7fX1sZXQgYT10LmJvZHl8fHQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBlJiZyJiZhLmluc2VydEJlZm9yZShuLmNyZWF0ZVRleHROb2RlKHIpLGEuY2hpbGROb2Rlc1swXXx8bnVsbCksRGU9PT1FZT9ELmNhbGwodCxvZT9gaHRtbGA6YGJvZHlgKVswXTpvZT90LmRvY3VtZW50RWxlbWVudDphfSxxZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5jYWxsKGUub3duZXJEb2N1bWVudHx8ZSxlLGwuU0hPV19FTEVNRU5UfGwuU0hPV19DT01NRU5UfGwuU0hPV19URVhUfGwuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OfGwuU0hPV19DREFUQV9TRUNUSU9OLG51bGwpfSxKZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGYmJih0eXBlb2YgZS5ub2RlTmFtZSE9YHN0cmluZ2B8fHR5cGVvZiBlLnRleHRDb250ZW50IT1gc3RyaW5nYHx8dHlwZW9mIGUucmVtb3ZlQ2hpbGQhPWBmdW5jdGlvbmB8fCEoZS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgZCl8fHR5cGVvZiBlLnJlbW92ZUF0dHJpYnV0ZSE9YGZ1bmN0aW9uYHx8dHlwZW9mIGUuc2V0QXR0cmlidXRlIT1gZnVuY3Rpb25gfHx0eXBlb2YgZS5uYW1lc3BhY2VVUkkhPWBzdHJpbmdgfHx0eXBlb2YgZS5pbnNlcnRCZWZvcmUhPWBmdW5jdGlvbmB8fHR5cGVvZiBlLmhhc0NoaWxkTm9kZXMhPWBmdW5jdGlvbmApfSxZZT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIHM9PWBmdW5jdGlvbmAmJmUgaW5zdGFuY2VvZiBzfTtmdW5jdGlvbiBYZShlLG4scil7VnMoZSxlPT57ZS5jYWxsKHQsbixyLExlKX0pfWxldCBaZT1mdW5jdGlvbihlKXtsZXQgbj1udWxsO2lmKFhlKGsuYmVmb3JlU2FuaXRpemVFbGVtZW50cyxlLG51bGwpLEplKGUpKXJldHVybiBXZShlKSwhMDtsZXQgcj1JZShlLm5vZGVOYW1lKTtpZihYZShrLnVwb25TYW5pdGl6ZUVsZW1lbnQsZSx7dGFnTmFtZTpyLGFsbG93ZWRUYWdzOnp9KSxLJiZlLmhhc0NoaWxkTm9kZXMoKSYmIVllKGUuZmlyc3RFbGVtZW50Q2hpbGQpJiZhYygvPFsvXHchXS9nLGUuaW5uZXJIVE1MKSYmYWMoLzxbL1x3IV0vZyxlLnRleHRDb250ZW50KXx8SyYmZS5uYW1lc3BhY2VVUkk9PT1FZSYmcj09PWBzdHlsZWAmJlllKGUuZmlyc3RFbGVtZW50Q2hpbGQpfHxlLm5vZGVUeXBlPT09T2MucHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbnx8SyYmZS5ub2RlVHlwZT09PU9jLmNvbW1lbnQmJmFjKC88Wy9cd10vZyxlLmRhdGEpKXJldHVybiBXZShlKSwhMDtpZihVW3JdfHwhKEcudGFnQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmRy50YWdDaGVjayhyKSkmJiF6W3JdKXtpZighVVtyXSYmZXQocikmJihILnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmYWMoSC50YWdOYW1lQ2hlY2sscil8fEgudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkgudGFnTmFtZUNoZWNrKHIpKSlyZXR1cm4hMTtpZihoZSYmIXZlW3JdKXtsZXQgdD1iKGUpfHxlLnBhcmVudE5vZGUsbj15KGUpfHxlLmNoaWxkTm9kZXM7aWYobiYmdCl7bGV0IHI9bi5sZW5ndGg7Zm9yKGxldCBpPXItMTtpPj0wOy0taSl7bGV0IHI9ZyhuW2ldLCEwKTt0Lmluc2VydEJlZm9yZShyLHYoZSkpfX19cmV0dXJuIFdlKGUpLCEwfXJldHVybiBlIGluc3RhbmNlb2YgYyYmIVVlKGUpfHwocj09PWBub3NjcmlwdGB8fHI9PT1gbm9lbWJlZGB8fHI9PT1gbm9mcmFtZXNgKSYmYWMoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksZS5pbm5lckhUTUwpPyhXZShlKSwhMCk6KGFlJiZlLm5vZGVUeXBlPT09T2MudGV4dCYmKG49ZS50ZXh0Q29udGVudCxWcyhbQSxqLE1dLGU9PntuPVhzKG4sZSxgIGApfSksZS50ZXh0Q29udGVudCE9PW4mJihXcyh0LnJlbW92ZWQse2VsZW1lbnQ6ZS5jbG9uZU5vZGUoKX0pLGUudGV4dENvbnRlbnQ9bikpLFhlKGsuYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzLGUsbnVsbCksITEpfSxRZT1mdW5jdGlvbihlLHQscil7aWYoV1t0XXx8ZmUmJih0PT09YGlkYHx8dD09PWBuYW1lYCkmJihyIGluIG58fHIgaW4gUmUpKXJldHVybiExO2xldCBpPVZbdF18fEcuYXR0cmlidXRlQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmRy5hdHRyaWJ1dGVDaGVjayh0LGUpO2lmKCEobmUmJiFXW3RdJiZhYyhOLHQpKSYmISh0ZSYmYWMoUCx0KSkpe2lmKCFpfHxXW3RdKXtpZighKGV0KGUpJiYoSC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJmFjKEgudGFnTmFtZUNoZWNrLGUpfHxILnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZILnRhZ05hbWVDaGVjayhlKSkmJihILmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmYWMoSC5hdHRyaWJ1dGVOYW1lQ2hlY2ssdCl8fEguYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkguYXR0cmlidXRlTmFtZUNoZWNrKHQsZSkpfHx0PT09YGlzYCYmSC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihILnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmYWMoSC50YWdOYW1lQ2hlY2sscil8fEgudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkgudGFnTmFtZUNoZWNrKHIpKSkpcmV0dXJuITF9ZWxzZSBpZighU2VbdF0mJiFhYyhSLFhzKHIsSSxgYCkpJiYhKCh0PT09YHNyY2B8fHQ9PT1geGxpbms6aHJlZmB8fHQ9PT1gaHJlZmApJiZlIT09YHNjcmlwdGAmJlpzKHIsYGRhdGE6YCk9PT0wJiZiZVtlXSkmJiEocmUmJiFhYyhGLFhzKHIsSSxgYCkpKSYmcilyZXR1cm4hMX1yZXR1cm4hMH0sJGU9Q3Moe30sW2Bhbm5vdGF0aW9uLXhtbGAsYGNvbG9yLXByb2ZpbGVgLGBmb250LWZhY2VgLGBmb250LWZhY2UtZm9ybWF0YCxgZm9udC1mYWNlLW5hbWVgLGBmb250LWZhY2Utc3JjYCxgZm9udC1mYWNlLXVyaWAsYG1pc3NpbmctZ2x5cGhgXSksZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuISRlW3FzKGUpXSYmYWMoTCxlKX0sdHQ9ZnVuY3Rpb24oZSl7WGUoay5iZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMsZSxudWxsKTtsZXQgbj1lLmF0dHJpYnV0ZXM7aWYoIW58fEplKGUpKXJldHVybjtsZXQgcj17YXR0ck5hbWU6YGAsYXR0clZhbHVlOmBgLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOlYsZm9yY2VLZWVwQXR0cjp2b2lkIDB9LGk9bi5sZW5ndGg7Zm9yKDtpLS07KXtsZXQgYT1uW2ldLG89YS5uYW1lLHM9YS5uYW1lc3BhY2VVUkksYz1hLnZhbHVlLGw9SWUobyksdT1jLGQ9bz09PWB2YWx1ZWA/dTpRcyh1KTtpZihyLmF0dHJOYW1lPWwsci5hdHRyVmFsdWU9ZCxyLmtlZXBBdHRyPSEwLHIuZm9yY2VLZWVwQXR0cj12b2lkIDAsWGUoay51cG9uU2FuaXRpemVBdHRyaWJ1dGUsZSxyKSxkPXIuYXR0clZhbHVlLHBlJiYobD09PWBpZGB8fGw9PT1gbmFtZWApJiZacyhkLG1lKSE9PTAmJihHZShvLGUpLGQ9bWUrZCksSyYmYWMoLygoLS0hP3xdKT4pfDxcLyhzdHlsZXxzY3JpcHR8dGl0bGV8eG1wfHRleHRhcmVhfG5vc2NyaXB0fGlmcmFtZXxub2VtYmVkfG5vZnJhbWVzKS9pLGQpKXtHZShvLGUpO2NvbnRpbnVlfWlmKGw9PT1gYXR0cmlidXRlbmFtZWAmJllzKGQsYGhyZWZgKSl7R2UobyxlKTtjb250aW51ZX1pZihyLmZvcmNlS2VlcEF0dHIpY29udGludWU7aWYoIXIua2VlcEF0dHIpe0dlKG8sZSk7Y29udGludWV9aWYoIWllJiZhYygvXC8+L2ksZCkpe0dlKG8sZSk7Y29udGludWV9YWUmJlZzKFtBLGosTV0sZT0+e2Q9WHMoZCxlLGAgYCl9KTtsZXQgZj1JZShlLm5vZGVOYW1lKTtpZighUWUoZixsLGQpKXtHZShvLGUpO2NvbnRpbnVlfWlmKHgmJnR5cGVvZiBtPT1gb2JqZWN0YCYmdHlwZW9mIG0uZ2V0QXR0cmlidXRlVHlwZT09YGZ1bmN0aW9uYCYmIXMpc3dpdGNoKG0uZ2V0QXR0cmlidXRlVHlwZShmLGwpKXtjYXNlYFRydXN0ZWRIVE1MYDpkPXguY3JlYXRlSFRNTChkKTticmVhaztjYXNlYFRydXN0ZWRTY3JpcHRVUkxgOmQ9eC5jcmVhdGVTY3JpcHRVUkwoZCk7YnJlYWt9aWYoZCE9PXUpdHJ5e3M/ZS5zZXRBdHRyaWJ1dGVOUyhzLG8sZCk6ZS5zZXRBdHRyaWJ1dGUobyxkKSxKZShlKT9XZShlKTpVcyh0LnJlbW92ZWQpfWNhdGNoe0dlKG8sZSl9fVhlKGsuYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMsZSxudWxsKX0sbnQ9ZnVuY3Rpb24oZSl7bGV0IHQ9bnVsbCxuPXFlKGUpO2ZvcihYZShrLmJlZm9yZVNhbml0aXplU2hhZG93RE9NLGUsbnVsbCk7dD1uLm5leHROb2RlKCk7KVhlKGsudXBvblNhbml0aXplU2hhZG93Tm9kZSx0LG51bGwpLFplKHQpLHR0KHQpLHQuY29udGVudCBpbnN0YW5jZW9mIGEmJm50KHQuY29udGVudCk7WGUoay5hZnRlclNhbml0aXplU2hhZG93RE9NLGUsbnVsbCl9LHJ0PWZ1bmN0aW9uKGUpe2lmKGUubm9kZVR5cGU9PT1PYy5lbGVtZW50JiZlLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBhKXtsZXQgdD1lLnNoYWRvd1Jvb3Q7cnQodCksbnQodCl9bGV0IHQ9ZS5jaGlsZE5vZGVzO2lmKCF0KXJldHVybjtsZXQgbj1bXTtWcyh0LGU9PntXcyhuLGUpfSk7Zm9yKGxldCBlIG9mIG4pcnQoZSl9O3JldHVybiB0LnNhbml0aXplPWZ1bmN0aW9uKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxpPW51bGwsbz1udWxsLGM9bnVsbCxsPW51bGw7aWYoT2U9IWUsT2UmJihlPWA8IS0tPmApLHR5cGVvZiBlIT1gc3RyaW5nYCYmIVllKGUpJiYoZT1FcyhlKSx0eXBlb2YgZSE9YHN0cmluZ2ApKXRocm93IG9jKGBkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nYCk7aWYoIXQuaXNTdXBwb3J0ZWQpcmV0dXJuIGU7aWYoc2V8fEJlKG4pLHQucmVtb3ZlZD1bXSx0eXBlb2YgZT09YHN0cmluZ2AmJihnZT0hMSksZ2Upe2xldCB0PWUubm9kZU5hbWU7aWYodHlwZW9mIHQ9PWBzdHJpbmdgKXtsZXQgZT1JZSh0KTtpZigheltlXXx8VVtlXSl0aHJvdyBvYyhgcm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZWApfXJ0KGUpfWVsc2UgaWYoZSBpbnN0YW5jZW9mIHMpaT1LZShgPCEtLS0tPmApLG89aS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoZSwhMCksby5ub2RlVHlwZT09PU9jLmVsZW1lbnQmJm8ubm9kZU5hbWU9PT1gQk9EWWB8fG8ubm9kZU5hbWU9PT1gSFRNTGA/aT1vOmkuYXBwZW5kQ2hpbGQobykscnQobyk7ZWxzZXtpZighbGUmJiFhZSYmIW9lJiZlLmluZGV4T2YoYDxgKT09PS0xKXJldHVybiB4JiZkZT94LmNyZWF0ZUhUTUwoZSk6ZTtpZihpPUtlKGUpLCFpKXJldHVybiBsZT9udWxsOmRlP1M6YGB9aSYmY2UmJldlKGkuZmlyc3RDaGlsZCk7bGV0IHU9cWUoZ2U/ZTppKTtmb3IoO2M9dS5uZXh0Tm9kZSgpOylaZShjKSx0dChjKSxjLmNvbnRlbnQgaW5zdGFuY2VvZiBhJiZudChjLmNvbnRlbnQpO2lmKGdlKXJldHVybiBlO2lmKGxlKXtpZihhZSl7aS5ub3JtYWxpemUoKTtsZXQgZT1pLmlubmVySFRNTDtWcyhbQSxqLE1dLHQ9PntlPVhzKGUsdCxgIGApfSksaS5pbm5lckhUTUw9ZX1pZih1ZSlmb3IobD1FLmNhbGwoaS5vd25lckRvY3VtZW50KTtpLmZpcnN0Q2hpbGQ7KWwuYXBwZW5kQ2hpbGQoaS5maXJzdENoaWxkKTtlbHNlIGw9aTtyZXR1cm4oVi5zaGFkb3dyb290fHxWLnNoYWRvd3Jvb3Rtb2RlKSYmKGw9Ty5jYWxsKHIsbCwhMCkpLGx9bGV0IGQ9b2U/aS5vdXRlckhUTUw6aS5pbm5lckhUTUw7cmV0dXJuIG9lJiZ6W2AhZG9jdHlwZWBdJiZpLm93bmVyRG9jdW1lbnQmJmkub3duZXJEb2N1bWVudC5kb2N0eXBlJiZpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZhYyhFYyxpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKGQ9YDwhRE9DVFlQRSBgK2kub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtkKSxhZSYmVnMoW0EsaixNXSxlPT57ZD1YcyhkLGUsYCBgKX0pLHgmJmRlP3guY3JlYXRlSFRNTChkKTpkfSx0LnNldENvbmZpZz1mdW5jdGlvbigpe0JlKGFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSksc2U9ITB9LHQuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtMZT1udWxsLHNlPSExfSx0LmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMZXx8QmUoe30pLFFlKEllKGUpLEllKHQpLG4pfSx0LmFkZEhvb2s9ZnVuY3Rpb24oZSx0KXt0eXBlb2YgdD09YGZ1bmN0aW9uYCYmV3Moa1tlXSx0KX0sdC5yZW1vdmVIb29rPWZ1bmN0aW9uKGUsdCl7aWYodCE9PXZvaWQgMCl7bGV0IG49SHMoa1tlXSx0KTtyZXR1cm4gbj09PS0xP3ZvaWQgMDpHcyhrW2VdLG4sMSlbMF19cmV0dXJuIFVzKGtbZV0pfSx0LnJlbW92ZUhvb2tzPWZ1bmN0aW9uKGUpe2tbZV09W119LHQucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtrPWpjKCl9LHR9dmFyIEFzLGpzLE1zLE5zLFBzLEZzLElzLExzLFJzLHpzLEJzLFZzLEhzLFVzLFdzLEdzLEtzLHFzLEpzLFlzLFhzLFpzLFFzLCRzLGVjLHRjLG5jLHJjLGljLGFjLG9jLHNjLGNjLGxjLHVjLGRjLGZjLHBjLG1jLGhjLGdjLF9jLHZjLHljLGJjLHhjLFNjLENjLHdjLFRjLEVjLERjLE9jLGtjLEFjLGpjLFksTWM9bygoKCk9PntBcz1PYmplY3QuZW50cmllcyxqcz1PYmplY3Quc2V0UHJvdG90eXBlT2YsTXM9T2JqZWN0LmlzRnJvemVuLE5zPU9iamVjdC5nZXRQcm90b3R5cGVPZixQcz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEZzPU9iamVjdC5mcmVlemUsSXM9T2JqZWN0LnNlYWwsTHM9T2JqZWN0LmNyZWF0ZSxScz10eXBlb2YgUmVmbGVjdDxgdWAmJlJlZmxlY3QsenM9UnMuYXBwbHksQnM9UnMuY29uc3RydWN0LEZzfHw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LElzfHw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHpzfHw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bLi4uYXJndW1lbnRzXS5zbGljZSgyKTtyZXR1cm4gZS5hcHBseSh0LG4pfSxCc3x8PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZSguLi5bLi4uYXJndW1lbnRzXS5zbGljZSgxKSl9LFZzPXhzKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxIcz14cyhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpLFVzPXhzKEFycmF5LnByb3RvdHlwZS5wb3ApLFdzPXhzKEFycmF5LnByb3RvdHlwZS5wdXNoKSxHcz14cyhBcnJheS5wcm90b3R5cGUuc3BsaWNlKSxLcz1BcnJheS5pc0FycmF5LHFzPXhzKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLEpzPXhzKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLFlzPXhzKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLFhzPXhzKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksWnM9eHMoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxRcz14cyhTdHJpbmcucHJvdG90eXBlLnRyaW0pLCRzPXhzKE51bWJlci5wcm90b3R5cGUudG9TdHJpbmcpLGVjPXhzKEJvb2xlYW4ucHJvdG90eXBlLnRvU3RyaW5nKSx0Yz10eXBlb2YgQmlnSW50PmB1YD9udWxsOnhzKEJpZ0ludC5wcm90b3R5cGUudG9TdHJpbmcpLG5jPXR5cGVvZiBTeW1ib2w+YHVgP251bGw6eHMoU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZykscmM9eHMoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksaWM9eHMoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksYWM9eHMoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxvYz1TcyhUeXBlRXJyb3IpLHNjPUZzKGBhLmFiYnIuYWNyb255bS5hZGRyZXNzLmFyZWEuYXJ0aWNsZS5hc2lkZS5hdWRpby5iLmJkaS5iZG8uYmlnLmJsaW5rLmJsb2NrcXVvdGUuYm9keS5ici5idXR0b24uY2FudmFzLmNhcHRpb24uY2VudGVyLmNpdGUuY29kZS5jb2wuY29sZ3JvdXAuY29udGVudC5kYXRhLmRhdGFsaXN0LmRkLmRlY29yYXRvci5kZWwuZGV0YWlscy5kZm4uZGlhbG9nLmRpci5kaXYuZGwuZHQuZWxlbWVudC5lbS5maWVsZHNldC5maWdjYXB0aW9uLmZpZ3VyZS5mb250LmZvb3Rlci5mb3JtLmgxLmgyLmgzLmg0Lmg1Lmg2LmhlYWQuaGVhZGVyLmhncm91cC5oci5odG1sLmkuaW1nLmlucHV0Lmlucy5rYmQubGFiZWwubGVnZW5kLmxpLm1haW4ubWFwLm1hcmsubWFycXVlZS5tZW51Lm1lbnVpdGVtLm1ldGVyLm5hdi5ub2JyLm9sLm9wdGdyb3VwLm9wdGlvbi5vdXRwdXQucC5waWN0dXJlLnByZS5wcm9ncmVzcy5xLnJwLnJ0LnJ1Ynkucy5zYW1wLnNlYXJjaC5zZWN0aW9uLnNlbGVjdC5zaGFkb3cuc2xvdC5zbWFsbC5zb3VyY2Uuc3BhY2VyLnNwYW4uc3RyaWtlLnN0cm9uZy5zdHlsZS5zdWIuc3VtbWFyeS5zdXAudGFibGUudGJvZHkudGQudGVtcGxhdGUudGV4dGFyZWEudGZvb3QudGgudGhlYWQudGltZS50ci50cmFjay50dC51LnVsLnZhci52aWRlby53YnJgLnNwbGl0KGAuYCkpLGNjPUZzKGBzdmcuYS5hbHRnbHlwaC5hbHRnbHlwaGRlZi5hbHRnbHlwaGl0ZW0uYW5pbWF0ZWNvbG9yLmFuaW1hdGVtb3Rpb24uYW5pbWF0ZXRyYW5zZm9ybS5jaXJjbGUuY2xpcHBhdGguZGVmcy5kZXNjLmVsbGlwc2UuZW50ZXJrZXloaW50LmV4cG9ydHBhcnRzLmZpbHRlci5mb250LmcuZ2x5cGguZ2x5cGhyZWYuaGtlcm4uaW1hZ2UuaW5wdXRtb2RlLmxpbmUubGluZWFyZ3JhZGllbnQubWFya2VyLm1hc2subWV0YWRhdGEubXBhdGgucGFydC5wYXRoLnBhdHRlcm4ucG9seWdvbi5wb2x5bGluZS5yYWRpYWxncmFkaWVudC5yZWN0LnN0b3Auc3R5bGUuc3dpdGNoLnN5bWJvbC50ZXh0LnRleHRwYXRoLnRpdGxlLnRyZWYudHNwYW4udmlldy52a2VybmAuc3BsaXQoYC5gKSksbGM9RnMoW2BmZUJsZW5kYCxgZmVDb2xvck1hdHJpeGAsYGZlQ29tcG9uZW50VHJhbnNmZXJgLGBmZUNvbXBvc2l0ZWAsYGZlQ29udm9sdmVNYXRyaXhgLGBmZURpZmZ1c2VMaWdodGluZ2AsYGZlRGlzcGxhY2VtZW50TWFwYCxgZmVEaXN0YW50TGlnaHRgLGBmZURyb3BTaGFkb3dgLGBmZUZsb29kYCxgZmVGdW5jQWAsYGZlRnVuY0JgLGBmZUZ1bmNHYCxgZmVGdW5jUmAsYGZlR2F1c3NpYW5CbHVyYCxgZmVJbWFnZWAsYGZlTWVyZ2VgLGBmZU1lcmdlTm9kZWAsYGZlTW9ycGhvbG9neWAsYGZlT2Zmc2V0YCxgZmVQb2ludExpZ2h0YCxgZmVTcGVjdWxhckxpZ2h0aW5nYCxgZmVTcG90TGlnaHRgLGBmZVRpbGVgLGBmZVR1cmJ1bGVuY2VgXSksdWM9RnMoW2BhbmltYXRlYCxgY29sb3ItcHJvZmlsZWAsYGN1cnNvcmAsYGRpc2NhcmRgLGBmb250LWZhY2VgLGBmb250LWZhY2UtZm9ybWF0YCxgZm9udC1mYWNlLW5hbWVgLGBmb250LWZhY2Utc3JjYCxgZm9udC1mYWNlLXVyaWAsYGZvcmVpZ25vYmplY3RgLGBoYXRjaGAsYGhhdGNocGF0aGAsYG1lc2hgLGBtZXNoZ3JhZGllbnRgLGBtZXNocGF0Y2hgLGBtZXNocm93YCxgbWlzc2luZy1nbHlwaGAsYHNjcmlwdGAsYHNldGAsYHNvbGlkY29sb3JgLGB1bmtub3duYCxgdXNlYF0pLGRjPUZzKGBtYXRoLm1lbmNsb3NlLm1lcnJvci5tZmVuY2VkLm1mcmFjLm1nbHlwaC5taS5tbGFiZWxlZHRyLm1tdWx0aXNjcmlwdHMubW4ubW8ubW92ZXIubXBhZGRlZC5tcGhhbnRvbS5tcm9vdC5tcm93Lm1zLm1zcGFjZS5tc3FydC5tc3R5bGUubXN1Yi5tc3VwLm1zdWJzdXAubXRhYmxlLm10ZC5tdGV4dC5tdHIubXVuZGVyLm11bmRlcm92ZXIubXByZXNjcmlwdHNgLnNwbGl0KGAuYCkpLGZjPUZzKFtgbWFjdGlvbmAsYG1hbGlnbmdyb3VwYCxgbWFsaWdubWFya2AsYG1sb25nZGl2YCxgbXNjYXJyaWVzYCxgbXNjYXJyeWAsYG1zZ3JvdXBgLGBtc3RhY2tgLGBtc2xpbmVgLGBtc3Jvd2AsYHNlbWFudGljc2AsYGFubm90YXRpb25gLGBhbm5vdGF0aW9uLXhtbGAsYG1wcmVzY3JpcHRzYCxgbm9uZWBdKSxwYz1GcyhbYCN0ZXh0YF0pLG1jPUZzKGBhY2NlcHQuYWN0aW9uLmFsaWduLmFsdC5hdXRvY2FwaXRhbGl6ZS5hdXRvY29tcGxldGUuYXV0b3BpY3R1cmVpbnBpY3R1cmUuYXV0b3BsYXkuYmFja2dyb3VuZC5iZ2NvbG9yLmJvcmRlci5jYXB0dXJlLmNlbGxwYWRkaW5nLmNlbGxzcGFjaW5nLmNoZWNrZWQuY2l0ZS5jbGFzcy5jbGVhci5jb2xvci5jb2xzLmNvbHNwYW4uY29udHJvbHMuY29udHJvbHNsaXN0LmNvb3Jkcy5jcm9zc29yaWdpbi5kYXRldGltZS5kZWNvZGluZy5kZWZhdWx0LmRpci5kaXNhYmxlZC5kaXNhYmxlcGljdHVyZWlucGljdHVyZS5kaXNhYmxlcmVtb3RlcGxheWJhY2suZG93bmxvYWQuZHJhZ2dhYmxlLmVuY3R5cGUuZW50ZXJrZXloaW50LmV4cG9ydHBhcnRzLmZhY2UuZm9yLmhlYWRlcnMuaGVpZ2h0LmhpZGRlbi5oaWdoLmhyZWYuaHJlZmxhbmcuaWQuaW5lcnQuaW5wdXRtb2RlLmludGVncml0eS5pc21hcC5raW5kLmxhYmVsLmxhbmcubGlzdC5sb2FkaW5nLmxvb3AubG93Lm1heC5tYXhsZW5ndGgubWVkaWEubWV0aG9kLm1pbi5taW5sZW5ndGgubXVsdGlwbGUubXV0ZWQubmFtZS5ub25jZS5ub3NoYWRlLm5vdmFsaWRhdGUubm93cmFwLm9wZW4ub3B0aW11bS5wYXJ0LnBhdHRlcm4ucGxhY2Vob2xkZXIucGxheXNpbmxpbmUucG9wb3Zlci5wb3BvdmVydGFyZ2V0LnBvcG92ZXJ0YXJnZXRhY3Rpb24ucG9zdGVyLnByZWxvYWQucHViZGF0ZS5yYWRpb2dyb3VwLnJlYWRvbmx5LnJlbC5yZXF1aXJlZC5yZXYucmV2ZXJzZWQucm9sZS5yb3dzLnJvd3NwYW4uc3BlbGxjaGVjay5zY29wZS5zZWxlY3RlZC5zaGFwZS5zaXplLnNpemVzLnNsb3Quc3Bhbi5zcmNsYW5nLnN0YXJ0LnNyYy5zcmNzZXQuc3RlcC5zdHlsZS5zdW1tYXJ5LnRhYmluZGV4LnRpdGxlLnRyYW5zbGF0ZS50eXBlLnVzZW1hcC52YWxpZ24udmFsdWUud2lkdGgud3JhcC54bWxuc2Auc3BsaXQoYC5gKSksaGM9RnMoYGFjY2VudC1oZWlnaHQuYWNjdW11bGF0ZS5hZGRpdGl2ZS5hbGlnbm1lbnQtYmFzZWxpbmUuYW1wbGl0dWRlLmFzY2VudC5hdHRyaWJ1dGVuYW1lLmF0dHJpYnV0ZXR5cGUuYXppbXV0aC5iYXNlZnJlcXVlbmN5LmJhc2VsaW5lLXNoaWZ0LmJlZ2luLmJpYXMuYnkuY2xhc3MuY2xpcC5jbGlwcGF0aHVuaXRzLmNsaXAtcGF0aC5jbGlwLXJ1bGUuY29sb3IuY29sb3ItaW50ZXJwb2xhdGlvbi5jb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuY29sb3ItcHJvZmlsZS5jb2xvci1yZW5kZXJpbmcuY3guY3kuZC5keC5keS5kaWZmdXNlY29uc3RhbnQuZGlyZWN0aW9uLmRpc3BsYXkuZGl2aXNvci5kdXIuZWRnZW1vZGUuZWxldmF0aW9uLmVuZC5leHBvbmVudC5maWxsLmZpbGwtb3BhY2l0eS5maWxsLXJ1bGUuZmlsdGVyLmZpbHRlcnVuaXRzLmZsb29kLWNvbG9yLmZsb29kLW9wYWNpdHkuZm9udC1mYW1pbHkuZm9udC1zaXplLmZvbnQtc2l6ZS1hZGp1c3QuZm9udC1zdHJldGNoLmZvbnQtc3R5bGUuZm9udC12YXJpYW50LmZvbnQtd2VpZ2h0LmZ4LmZ5LmcxLmcyLmdseXBoLW5hbWUuZ2x5cGhyZWYuZ3JhZGllbnR1bml0cy5ncmFkaWVudHRyYW5zZm9ybS5oZWlnaHQuaHJlZi5pZC5pbWFnZS1yZW5kZXJpbmcuaW4uaW4yLmludGVyY2VwdC5rLmsxLmsyLmszLms0Lmtlcm5pbmcua2V5cG9pbnRzLmtleXNwbGluZXMua2V5dGltZXMubGFuZy5sZW5ndGhhZGp1c3QubGV0dGVyLXNwYWNpbmcua2VybmVsbWF0cml4Lmtlcm5lbHVuaXRsZW5ndGgubGlnaHRpbmctY29sb3IubG9jYWwubWFya2VyLWVuZC5tYXJrZXItbWlkLm1hcmtlci1zdGFydC5tYXJrZXJoZWlnaHQubWFya2VydW5pdHMubWFya2Vyd2lkdGgubWFza2NvbnRlbnR1bml0cy5tYXNrdW5pdHMubWF4Lm1hc2subWFzay10eXBlLm1lZGlhLm1ldGhvZC5tb2RlLm1pbi5uYW1lLm51bW9jdGF2ZXMub2Zmc2V0Lm9wZXJhdG9yLm9wYWNpdHkub3JkZXIub3JpZW50Lm9yaWVudGF0aW9uLm9yaWdpbi5vdmVyZmxvdy5wYWludC1vcmRlci5wYXRoLnBhdGhsZW5ndGgucGF0dGVybmNvbnRlbnR1bml0cy5wYXR0ZXJudHJhbnNmb3JtLnBhdHRlcm51bml0cy5wb2ludHMucHJlc2VydmVhbHBoYS5wcmVzZXJ2ZWFzcGVjdHJhdGlvLnByaW1pdGl2ZXVuaXRzLnIucngucnkucmFkaXVzLnJlZngucmVmeS5yZXBlYXRjb3VudC5yZXBlYXRkdXIucmVzdGFydC5yZXN1bHQucm90YXRlLnNjYWxlLnNlZWQuc2hhcGUtcmVuZGVyaW5nLnNsb3BlLnNwZWN1bGFyY29uc3RhbnQuc3BlY3VsYXJleHBvbmVudC5zcHJlYWRtZXRob2Quc3RhcnRvZmZzZXQuc3RkZGV2aWF0aW9uLnN0aXRjaHRpbGVzLnN0b3AtY29sb3Iuc3RvcC1vcGFjaXR5LnN0cm9rZS1kYXNoYXJyYXkuc3Ryb2tlLWRhc2hvZmZzZXQuc3Ryb2tlLWxpbmVjYXAuc3Ryb2tlLWxpbmVqb2luLnN0cm9rZS1taXRlcmxpbWl0LnN0cm9rZS1vcGFjaXR5LnN0cm9rZS5zdHJva2Utd2lkdGguc3R5bGUuc3VyZmFjZXNjYWxlLnN5c3RlbWxhbmd1YWdlLnRhYmluZGV4LnRhYmxldmFsdWVzLnRhcmdldHgudGFyZ2V0eS50cmFuc2Zvcm0udHJhbnNmb3JtLW9yaWdpbi50ZXh0LWFuY2hvci50ZXh0LWRlY29yYXRpb24udGV4dC1yZW5kZXJpbmcudGV4dGxlbmd0aC50eXBlLnUxLnUyLnVuaWNvZGUudmFsdWVzLnZpZXdib3gudmlzaWJpbGl0eS52ZXJzaW9uLnZlcnQtYWR2LXkudmVydC1vcmlnaW4teC52ZXJ0LW9yaWdpbi15LndpZHRoLndvcmQtc3BhY2luZy53cmFwLndyaXRpbmctbW9kZS54Y2hhbm5lbHNlbGVjdG9yLnljaGFubmVsc2VsZWN0b3IueC54MS54Mi54bWxucy55LnkxLnkyLnouem9vbWFuZHBhbmAuc3BsaXQoYC5gKSksZ2M9RnMoYGFjY2VudC5hY2NlbnR1bmRlci5hbGlnbi5iZXZlbGxlZC5jbG9zZS5jb2x1bW5hbGlnbi5jb2x1bW5saW5lcy5jb2x1bW5zcGFjaW5nLmNvbHVtbnNwYW4uZGVub21hbGlnbi5kZXB0aC5kaXIuZGlzcGxheS5kaXNwbGF5c3R5bGUuZW5jb2RpbmcuZmVuY2UuZnJhbWUuaGVpZ2h0LmhyZWYuaWQubGFyZ2VvcC5sZW5ndGgubGluZXRoaWNrbmVzcy5scXVvdGUubHNwYWNlLm1hdGhiYWNrZ3JvdW5kLm1hdGhjb2xvci5tYXRoc2l6ZS5tYXRodmFyaWFudC5tYXhzaXplLm1pbnNpemUubW92YWJsZWxpbWl0cy5ub3RhdGlvbi5udW1hbGlnbi5vcGVuLnJvd2FsaWduLnJvd2xpbmVzLnJvd3NwYWNpbmcucm93c3Bhbi5yc3BhY2UucnF1b3RlLnNjcmlwdGxldmVsLnNjcmlwdG1pbnNpemUuc2NyaXB0c2l6ZW11bHRpcGxpZXIuc2VsZWN0aW9uLnNlcGFyYXRvci5zZXBhcmF0b3JzLnN0cmV0Y2h5LnN1YnNjcmlwdHNoaWZ0LnN1cHNjcmlwdHNoaWZ0LnN5bW1ldHJpYy52b2Zmc2V0LndpZHRoLnhtbG5zYC5zcGxpdChgLmApKSxfYz1GcyhbYHhsaW5rOmhyZWZgLGB4bWw6aWRgLGB4bGluazp0aXRsZWAsYHhtbDpzcGFjZWAsYHhtbG5zOnhsaW5rYF0pLHZjPUlzKC97e1tcd1xXXSp8Xltcd1xXXSp9fS9nKSx5Yz1JcygvPCVbXHdcV10qfF5bXHdcV10qJT4vZyksYmM9SXMoL1wke1tcd1xXXSovZykseGM9SXMoL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdKyQvKSxTYz1JcygvXmFyaWEtW1wtXHddKyQvKSxDYz1JcygvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHB8bWF0cml4KTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksd2M9SXMoL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLFRjPUlzKC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLEVjPUlzKC9eaHRtbCQvaSksRGM9SXMoL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpLE9jPXtlbGVtZW50OjEsdGV4dDozLHByb2dyZXNzaW5nSW5zdHJ1Y3Rpb246Nyxjb21tZW50OjgsZG9jdW1lbnQ6OX0sa2M9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz5gdWA/bnVsbDp3aW5kb3d9LEFjPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHx0eXBlb2YgZS5jcmVhdGVQb2xpY3khPWBmdW5jdGlvbmApcmV0dXJuIG51bGw7bGV0IG49bnVsbCxyPWBkYXRhLXR0LXBvbGljeS1zdWZmaXhgO3QmJnQuaGFzQXR0cmlidXRlKHIpJiYobj10LmdldEF0dHJpYnV0ZShyKSk7bGV0IGk9YGRvbXB1cmlmeWArKG4/YCNgK246YGApO3RyeXtyZXR1cm4gZS5jcmVhdGVQb2xpY3koaSx7Y3JlYXRlSFRNTChlKXtyZXR1cm4gZX0sY3JlYXRlU2NyaXB0VVJMKGUpe3JldHVybiBlfX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oYFRydXN0ZWRUeXBlcyBwb2xpY3kgYCtpK2AgY291bGQgbm90IGJlIGNyZWF0ZWQuYCksbnVsbH19LGpjPWZ1bmN0aW9uKCl7cmV0dXJue2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltdLHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119fSxZPWtzKCl9KSksTmM9cygoKGUsdCk9Pnt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT09TWF0aCYmZX07dC5leHBvcnRzPW4odHlwZW9mIGdsb2JhbFRoaXM9PWBvYmplY3RgJiZnbG9iYWxUaGlzKXx8bih0eXBlb2Ygd2luZG93PT1gb2JqZWN0YCYmd2luZG93KXx8bih0eXBlb2Ygc2VsZj09YG9iamVjdGAmJnNlbGYpfHxuKHR5cGVvZiBnbG9iYWw9PWBvYmplY3RgJiZnbG9iYWwpfHxuKHR5cGVvZiBlPT1gb2JqZWN0YCYmZSl8fChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkoKXx8RnVuY3Rpb24oYHJldHVybiB0aGlzYCkoKX0pKSxQYz1zKCgoZSx0KT0+e3QuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2h7cmV0dXJuITB9fX0pKSxGYz1zKCgoZSx0KT0+e3QuZXhwb3J0cz0hUGMoKShmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV0hPT03fSl9KSksSWM9cygoKGUsdCk9Pnt0LmV4cG9ydHM9IVBjKCkoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiB0eXBlb2YgZSE9YGZ1bmN0aW9uYHx8ZS5oYXNPd25Qcm9wZXJ0eShgcHJvdG90eXBlYCl9KX0pKSxMYz1zKCgoZSx0KT0+e3ZhciBuPUljKCkscj1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDt0LmV4cG9ydHM9bj9yLmJpbmQocik6ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseShyLGFyZ3VtZW50cyl9fSkpLFJjPXMoKGU9Pnt2YXIgdD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPW4mJiF0LmNhbGwoezE6Mn0sMSk/ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTp0fSkpLHpjPXMoKChlLHQpPT57dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6IShlJjEpLGNvbmZpZ3VyYWJsZTohKGUmMiksd3JpdGFibGU6IShlJjQpLHZhbHVlOnR9fX0pKSxCYz1zKCgoZSx0KT0+e3ZhciBuPUljKCkscj1GdW5jdGlvbi5wcm90b3R5cGUsaT1yLmNhbGwsYT1uJiZyLmJpbmQuYmluZChpLGkpO3QuZXhwb3J0cz1uP2E6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfX19KSksVmM9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9bih7fS50b1N0cmluZyksaT1uKGBgLnNsaWNlKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkocihlKSw4LC0xKX19KSksSGM9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9UGMoKSxpPVZjKCksYT1PYmplY3Qsbz1uKGBgLnNwbGl0KTt0LmV4cG9ydHM9cihmdW5jdGlvbigpe3JldHVybiFhKGB6YCkucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KT9mdW5jdGlvbihlKXtyZXR1cm4gaShlKT09PWBTdHJpbmdgP28oZSxgYCk6YShlKX06YX0pKSxVYz1zKCgoZSx0KT0+e3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbH19KSksV2M9cygoKGUsdCk9Pnt2YXIgbj1VYygpLHI9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXRocm93IG5ldyByKGBDYW4ndCBjYWxsIG1ldGhvZCBvbiBgK2UpO3JldHVybiBlfX0pKSxHYz1zKCgoZSx0KT0+e3ZhciBuPUhjKCkscj1XYygpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbihyKGUpKX19KSksS2M9cygoKGUsdCk9Pnt2YXIgbj10eXBlb2YgZG9jdW1lbnQ9PWBvYmplY3RgJiZkb2N1bWVudC5hbGw7dC5leHBvcnRzPW49PT12b2lkIDAmJm4hPT12b2lkIDA/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gfHxlPT09bn06ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gfX0pKSxxYz1zKCgoZSx0KT0+e3ZhciBuPUtjKCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YG9iamVjdGA/ZSE9PW51bGw6bihlKX19KSksSmM9cygoKGUsdCk9Pnt2YXIgbj1OYygpLHI9S2MoKSxpPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpP2U6dm9pZCAwfTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2kobltlXSk6bltlXSYmbltlXVt0XX19KSksWWM9cygoKGUsdCk9Pnt0LmV4cG9ydHM9QmMoKSh7fS5pc1Byb3RvdHlwZU9mKX0pKSxYYz1zKCgoZSx0KT0+e3ZhciBuPU5jKCkubmF2aWdhdG9yLHI9biYmbi51c2VyQWdlbnQ7dC5leHBvcnRzPXI/U3RyaW5nKHIpOmBgfSkpLFpjPXMoKChlLHQpPT57dmFyIG49TmMoKSxyPVhjKCksaT1uLnByb2Nlc3MsYT1uLkRlbm8sbz1pJiZpLnZlcnNpb25zfHxhJiZhLnZlcnNpb24scz1vJiZvLnY4LGMsbDtzJiYoYz1zLnNwbGl0KGAuYCksbD1jWzBdPjAmJmNbMF08ND8xOisoY1swXStjWzFdKSksIWwmJnImJihjPXIubWF0Y2goL0VkZ2VcLyhcZCspLyksKCFjfHxjWzFdPj03NCkmJihjPXIubWF0Y2goL0Nocm9tZVwvKFxkKykvKSxjJiYobD0rY1sxXSkpKSx0LmV4cG9ydHM9bH0pKSxRYz1zKCgoZSx0KT0+e3ZhciBuPVpjKCkscj1QYygpLGk9TmMoKS5TdHJpbmc7dC5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIXIoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woYHN5bWJvbCBkZXRlY3Rpb25gKTtyZXR1cm4haShlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmbiYmbjw0MX0pfSkpLCRjPXMoKChlLHQpPT57dC5leHBvcnRzPVFjKCkmJiFTeW1ib2wuc2hhbSYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09YHN5bWJvbGB9KSksZWw9cygoKGUsdCk9Pnt2YXIgbj1KYygpLHI9S2MoKSxpPVljKCksYT0kYygpLG89T2JqZWN0O3QuZXhwb3J0cz1hP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YHN5bWJvbGB9OmZ1bmN0aW9uKGUpe3ZhciB0PW4oYFN5bWJvbGApO3JldHVybiByKHQpJiZpKHQucHJvdG90eXBlLG8oZSkpfX0pKSx0bD1zKCgoZSx0KT0+e3ZhciBuPVN0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuKGUpfWNhdGNoe3JldHVybmBPYmplY3RgfX19KSksbmw9cygoKGUsdCk9Pnt2YXIgbj1LYygpLHI9dGwoKSxpPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKSlyZXR1cm4gZTt0aHJvdyBuZXcgaShyKGUpK2AgaXMgbm90IGEgZnVuY3Rpb25gKX19KSkscmw9cygoKGUsdCk9Pnt2YXIgbj1ubCgpLHI9VWMoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgaT1lW3RdO3JldHVybiByKGkpP3ZvaWQgMDpuKGkpfX0pKSxpbD1zKCgoZSx0KT0+e3ZhciBuPUxjKCkscj1LYygpLGk9cWMoKSxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbyxzO2lmKHQ9PT1gc3RyaW5nYCYmcihvPWUudG9TdHJpbmcpJiYhaShzPW4obyxlKSl8fHIobz1lLnZhbHVlT2YpJiYhaShzPW4obyxlKSl8fHQhPT1gc3RyaW5nYCYmcihvPWUudG9TdHJpbmcpJiYhaShzPW4obyxlKSkpcmV0dXJuIHM7dGhyb3cgbmV3IGEoYENhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZWApfX0pKSxhbD1zKCgoZSx0KT0+e3QuZXhwb3J0cz0hMX0pKSxvbD1zKCgoZSx0KT0+e3ZhciBuPU5jKCkscj1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e3IobixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoe25bZV09dH1yZXR1cm4gdH19KSksc2w9cygoKGUsdCk9Pnt2YXIgbj1hbCgpLHI9TmMoKSxpPW9sKCksYT1gX19jb3JlLWpzX3NoYXJlZF9fYCxvPXQuZXhwb3J0cz1yW2FdfHxpKGEse30pOyhvLnZlcnNpb25zfHw9W10pLnB1c2goe3ZlcnNpb246YDMuNDkuMGAsbW9kZTpuP2BwdXJlYDpgZ2xvYmFsYCxjb3B5cmlnaHQ6YMKpIDIwMTPigJMyMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpLCAyMDI14oCTMjAyNiBDb3JlSlMgQ29tcGFueSAoY29yZS1qcy5pbykuIEFsbCByaWdodHMgcmVzZXJ2ZWQuYCxsaWNlbnNlOmBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQ5LjAvTElDRU5TRWAsc291cmNlOmBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qc2B9KX0pKSxjbD1zKCgoZSx0KT0+e3ZhciBuPXNsKCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5bZV18fChuW2VdPXR8fHt9KX19KSksbGw9cygoKGUsdCk9Pnt2YXIgbj1XYygpLHI9T2JqZWN0O3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihuKGUpKX19KSksdWw9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9bGwoKSxpPW4oe30uaGFzT3duUHJvcGVydHkpO3QuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihlLHQpe3JldHVybiBpKHIoZSksdCl9fSkpLGRsPXMoKChlLHQpPT57dmFyIG49QmMoKSxyPTAsaT1NYXRoLnJhbmRvbSgpLGE9bigxLjEudG9TdHJpbmcpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm5gU3ltYm9sKGArKGU9PT12b2lkIDA/YGA6ZSkrYClfYCthKCsrcitpLDM2KX19KSksZmw9cygoKGUsdCk9Pnt2YXIgbj1OYygpLHI9Y2woKSxpPXVsKCksYT1kbCgpLG89UWMoKSxzPSRjKCksYz1uLlN5bWJvbCxsPXIoYHdrc2ApLHU9cz9jLmZvcnx8YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fGE7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKGwsZSl8fChsW2VdPW8mJmkoYyxlKT9jW2VdOnUoYFN5bWJvbC5gK2UpKSxsW2VdfX0pKSxwbD1zKCgoZSx0KT0+e3ZhciBuPUxjKCkscj1xYygpLGk9ZWwoKSxhPXJsKCksbz1pbCgpLHM9ZmwoKSxjPVR5cGVFcnJvcixsPXMoYHRvUHJpbWl0aXZlYCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSl8fGkoZSkpcmV0dXJuIGU7dmFyIHM9YShlLGwpLHU7aWYocyl7aWYodD09PXZvaWQgMCYmKHQ9YGRlZmF1bHRgKSx1PW4ocyxlLHQpLCFyKHUpfHxpKHUpKXJldHVybiB1O3Rocm93IG5ldyBjKGBDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVgKX1yZXR1cm4gdD09PXZvaWQgMCYmKHQ9YG51bWJlcmApLG8oZSx0KX19KSksbWw9cygoKGUsdCk9Pnt2YXIgbj1wbCgpLHI9ZWwoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLGBzdHJpbmdgKTtyZXR1cm4gcih0KT90OnQrYGB9fSkpLGhsPXMoKChlLHQpPT57dmFyIG49TmMoKSxyPXFjKCksaT1uLmRvY3VtZW50LGE9cihpKSYmcihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gYT9pLmNyZWF0ZUVsZW1lbnQoZSk6e319fSkpLGdsPXMoKChlLHQpPT57dmFyIG49RmMoKSxyPVBjKCksaT1obCgpO3QuZXhwb3J0cz0hbiYmIXIoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGkoYGRpdmApLGBhYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYSE9PTd9KX0pKSxfbD1zKChlPT57dmFyIHQ9RmMoKSxuPUxjKCkscj1SYygpLGk9emMoKSxhPUdjKCksbz1tbCgpLHM9dWwoKSxjPWdsKCksbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj10P2w6ZnVuY3Rpb24oZSx0KXtpZihlPWEoZSksdD1vKHQpLGMpdHJ5e3JldHVybiBsKGUsdCl9Y2F0Y2h7fWlmKHMoZSx0KSlyZXR1cm4gaSghbihyLmYsZSx0KSxlW3RdKX19KSksdmw9cygoKGUsdCk9Pnt2YXIgbj1GYygpLHI9UGMoKTt0LmV4cG9ydHM9biYmcihmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXt9LGBwcm90b3R5cGVgLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZSE9PTQyfSl9KSkseWw9cygoKGUsdCk9Pnt2YXIgbj1xYygpLHI9U3RyaW5nLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IG5ldyBpKHIoZSkrYCBpcyBub3QgYW4gb2JqZWN0YCl9fSkpLGJsPXMoKGU9Pnt2YXIgdD1GYygpLG49Z2woKSxyPXZsKCksaT15bCgpLGE9bWwoKSxvPVR5cGVFcnJvcixzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbD1gZW51bWVyYWJsZWAsdT1gY29uZmlndXJhYmxlYCxkPWB3cml0YWJsZWA7ZS5mPXQ/cj9mdW5jdGlvbihlLHQsbil7aWYoaShlKSx0PWEodCksaShuKSx0eXBlb2YgZT09YGZ1bmN0aW9uYCYmdD09PWBwcm90b3R5cGVgJiZgdmFsdWVgaW4gbiYmZCBpbiBuJiYhbltkXSl7dmFyIHI9YyhlLHQpO3ImJnJbZF0mJihlW3RdPW4udmFsdWUsbj17Y29uZmlndXJhYmxlOnUgaW4gbj9uW3VdOnJbdV0sZW51bWVyYWJsZTpsIGluIG4/bltsXTpyW2xdLHdyaXRhYmxlOiExfSl9cmV0dXJuIHMoZSx0LG4pfTpzOmZ1bmN0aW9uKGUsdCxyKXtpZihpKGUpLHQ9YSh0KSxpKHIpLG4pdHJ5e3JldHVybiBzKGUsdCxyKX1jYXRjaHt9aWYoYGdldGBpbiByfHxgc2V0YGluIHIpdGhyb3cgbmV3IG8oYEFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkYCk7cmV0dXJuYHZhbHVlYGluIHImJihlW3RdPXIudmFsdWUpLGV9fSkpLHhsPXMoKChlLHQpPT57dmFyIG49RmMoKSxyPWJsKCksaT16YygpO3QuZXhwb3J0cz1uP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5mKGUsdCxpKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfX0pKSxTbD1zKCgoZSx0KT0+e3ZhciBuPUZjKCkscj11bCgpLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9biYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPXIoaSxgbmFtZWApO3QuZXhwb3J0cz17RVhJU1RTOm8sUFJPUEVSOm8mJmZ1bmN0aW9uKCl7fS5uYW1lPT09YHNvbWV0aGluZ2AsQ09ORklHVVJBQkxFOm8mJighbnx8biYmYShpLGBuYW1lYCkuY29uZmlndXJhYmxlKX19KSksQ2w9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9S2MoKSxpPXNsKCksYT1uKEZ1bmN0aW9uLnRvU3RyaW5nKTtyKGkuaW5zcGVjdFNvdXJjZSl8fChpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KSx0LmV4cG9ydHM9aS5pbnNwZWN0U291cmNlfSkpLHdsPXMoKChlLHQpPT57dmFyIG49TmMoKSxyPUtjKCksaT1uLldlYWtNYXA7dC5leHBvcnRzPXIoaSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoaSkpfSkpLFRsPXMoKChlLHQpPT57dmFyIG49Y2woKSxyPWRsKCksaT1uKGBrZXlzYCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpW2VdfHwoaVtlXT1yKGUpKX19KSksRWw9cygoKGUsdCk9Pnt0LmV4cG9ydHM9e319KSksRGw9cygoKGUsdCk9Pnt2YXIgbj13bCgpLHI9TmMoKSxpPXFjKCksYT14bCgpLG89dWwoKSxzPXNsKCksYz1UbCgpLGw9RWwoKSx1PWBPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZGAsZD1yLlR5cGVFcnJvcixmPXIuV2Vha01hcCxwLG0saCxnPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUpP20oZSk6cChlLHt9KX0sXz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIWkodCl8fChuPW0odCkpLnR5cGUhPT1lKXRocm93IG5ldyBkKGBJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIGArZStgIHJlcXVpcmVkYCk7cmV0dXJuIG59fTtpZihufHxzLnN0YXRlKXt2YXIgdj1zLnN0YXRlfHw9bmV3IGY7di5nZXQ9di5nZXQsdi5oYXM9di5oYXMsdi5zZXQ9di5zZXQscD1mdW5jdGlvbihlLHQpe2lmKHYuaGFzKGUpKXRocm93IG5ldyBkKHUpO3JldHVybiB0LmZhY2FkZT1lLHYuc2V0KGUsdCksdH0sbT1mdW5jdGlvbihlKXtyZXR1cm4gdi5nZXQoZSl8fHt9fSxoPWZ1bmN0aW9uKGUpe3JldHVybiB2LmhhcyhlKX19ZWxzZXt2YXIgeT1jKGBzdGF0ZWApO2xbeV09ITAscD1mdW5jdGlvbihlLHQpe2lmKG8oZSx5KSl0aHJvdyBuZXcgZCh1KTtyZXR1cm4gdC5mYWNhZGU9ZSxhKGUseSx0KSx0fSxtPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUseSk/ZVt5XTp7fX0saD1mdW5jdGlvbihlKXtyZXR1cm4gbyhlLHkpfX10LmV4cG9ydHM9e3NldDpwLGdldDptLGhhczpoLGVuZm9yY2U6ZyxnZXR0ZXJGb3I6X319KSksT2w9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9UGMoKSxpPUtjKCksYT11bCgpLG89RmMoKSxzPVNsKCkuQ09ORklHVVJBQkxFLGM9Q2woKSxsPURsKCksdT1sLmVuZm9yY2UsZD1sLmdldCxmPVN0cmluZyxwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxtPW4oYGAuc2xpY2UpLGg9bihgYC5yZXBsYWNlKSxnPW4oW10uam9pbiksXz1vJiYhcihmdW5jdGlvbigpe3JldHVybiBwKGZ1bmN0aW9uKCl7fSxgbGVuZ3RoYCx7dmFsdWU6OH0pLmxlbmd0aCE9PTh9KSx2PVN0cmluZyhTdHJpbmcpLnNwbGl0KGBTdHJpbmdgKSx5PXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7bShmKHQpLDAsNyk9PT1gU3ltYm9sKGAmJih0PWBbYCtoKGYodCksL15TeW1ib2xcKChbXildKilcKS4qJC8sYCQxYCkrYF1gKSxuJiZuLmdldHRlciYmKHQ9YGdldCBgK3QpLG4mJm4uc2V0dGVyJiYodD1gc2V0IGArdCksKCFhKGUsYG5hbWVgKXx8cyYmZS5uYW1lIT09dCkmJihvP3AoZSxgbmFtZWAse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSk6ZS5uYW1lPXQpLF8mJm4mJmEobixgYXJpdHlgKSYmZS5sZW5ndGghPT1uLmFyaXR5JiZwKGUsYGxlbmd0aGAse3ZhbHVlOm4uYXJpdHl9KTt0cnl7biYmYShuLGBjb25zdHJ1Y3RvcmApJiZuLmNvbnN0cnVjdG9yP28mJnAoZSxgcHJvdG90eXBlYCx7d3JpdGFibGU6ITF9KTplLnByb3RvdHlwZSYmPXZvaWQgMH1jYXRjaHt9dmFyIHI9dShlKTtyZXR1cm4gYShyLGBzb3VyY2VgKXx8KHIuc291cmNlPWcodix0eXBlb2YgdD09YHN0cmluZ2A/dDpgYCkpLGV9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz15KGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcykmJmQodGhpcykuc291cmNlfHxjKHRoaXMpfSxgdG9TdHJpbmdgKX0pKSxrbD1zKCgoZSx0KT0+e3ZhciBuPUtjKCkscj1ibCgpLGk9T2woKSxhPW9sKCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxvLHMpe3N8fD17fTt2YXIgYz1zLmVudW1lcmFibGUsbD1zLm5hbWU9PT12b2lkIDA/dDpzLm5hbWU7aWYobihvKSYmaShvLGwscykscy5nbG9iYWwpYz9lW3RdPW86YSh0LG8pO2Vsc2V7dHJ5e3MudW5zYWZlP2VbdF0mJihjPSEwKTpkZWxldGUgZVt0XX1jYXRjaHt9Yz9lW3RdPW86ci5mKGUsdCx7dmFsdWU6byxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohcy5ub25Db25maWd1cmFibGUsd3JpdGFibGU6IXMubm9uV3JpdGFibGV9KX1yZXR1cm4gZX19KSksQWw9cygoKGUsdCk9Pnt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4odD4wP3I6bikodCl9fSkpLGpsPXMoKChlLHQpPT57dmFyIG49QWwoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPT10fHx0PT09MD8wOm4odCl9fSkpLE1sPXMoKChlLHQpPT57dmFyIG49amwoKSxyPU1hdGgubWF4LGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGE9bihlKTtyZXR1cm4gYTwwP3IoYSt0LDApOmkoYSx0KX19KSksTmw9cygoKGUsdCk9Pnt2YXIgbj1qbCgpLHI9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSk7cmV0dXJuIHQ+MD9yKHQsOTAwNzE5OTI1NDc0MDk5MSk6MH19KSksUGw9cygoKGUsdCk9Pnt2YXIgbj1ObCgpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbihlLmxlbmd0aCl9fSkpLEZsPXMoKChlLHQpPT57dmFyIG49R2MoKSxyPU1sKCksaT1QbCgpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsYSxvKXt2YXIgcz1uKHQpLGM9aShzKTtpZihjPT09MClyZXR1cm4hZSYmLTE7dmFyIGw9cihvLGMpLHU7aWYoZSYmYSE9PWEpe2Zvcig7Yz5sOylpZih1PXNbbCsrXSx1IT09dSlyZXR1cm4hMH1lbHNlIGZvcig7Yz5sO2wrKylpZigoZXx8bCBpbiBzKSYmc1tsXT09PWEpcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX07dC5leHBvcnRzPXtpbmNsdWRlczphKCEwKSxpbmRleE9mOmEoITEpfX0pKSxJbD1zKCgoZSx0KT0+e3ZhciBuPUJjKCkscj11bCgpLGk9R2MoKSxhPUZsKCkuaW5kZXhPZixvPUVsKCkscz1uKFtdLnB1c2gpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPWkoZSksYz0wLGw9W10sdTtmb3IodSBpbiBuKSFyKG8sdSkmJnIobix1KSYmcyhsLHUpO2Zvcig7dC5sZW5ndGg+YzspcihuLHU9dFtjKytdKSYmKH5hKGwsdSl8fHMobCx1KSk7cmV0dXJuIGx9fSkpLExsPXMoKChlLHQpPT57dC5leHBvcnRzPVtgY29uc3RydWN0b3JgLGBoYXNPd25Qcm9wZXJ0eWAsYGlzUHJvdG90eXBlT2ZgLGBwcm9wZXJ0eUlzRW51bWVyYWJsZWAsYHRvTG9jYWxlU3RyaW5nYCxgdG9TdHJpbmdgLGB2YWx1ZU9mYF19KSksUmw9cygoZT0+e3ZhciB0PUlsKCksbj1MbCgpLmNvbmNhdChgbGVuZ3RoYCxgcHJvdG90eXBlYCk7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLG4pfX0pKSx6bD1zKChlPT57ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9KSksQmw9cygoKGUsdCk9Pnt2YXIgbj1KYygpLHI9QmMoKSxpPVJsKCksYT16bCgpLG89eWwoKSxzPXIoW10uY29uY2F0KTt0LmV4cG9ydHM9bihgUmVmbGVjdGAsYG93bktleXNgKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKG8oZSkpLG49YS5mO3JldHVybiBuP3ModCxuKGUpKTp0fX0pKSxWbD1zKCgoZSx0KT0+e3ZhciBuPXVsKCkscj1CbCgpLGk9X2woKSxhPWJsKCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHM9cih0KSxjPWEuZixsPWkuZix1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBkPXNbdV07IW4oZSxkKSYmIShvJiZuKG8sZCkpJiZjKGUsZCxsKHQsZCkpfX19KSksSGw9cygoKGUsdCk9Pnt2YXIgbj1QYygpLHI9S2MoKSxpPS8jfFwucHJvdG90eXBlXC4vLGE9ZnVuY3Rpb24oZSx0KXt2YXIgaT1zW28oZSldO3JldHVybiBpPT09bD8hMDppPT09Yz8hMTpyKHQpP24odCk6ISF0fSxvPWEubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShpLGAuYCkudG9Mb3dlckNhc2UoKX0scz1hLmRhdGE9e30sYz1hLk5BVElWRT1gTmAsbD1hLlBPTFlGSUxMPWBQYDt0LmV4cG9ydHM9YX0pKSxVbD1zKCgoZSx0KT0+e3ZhciBuPU5jKCkscj1fbCgpLmYsaT14bCgpLGE9a2woKSxvPW9sKCkscz1WbCgpLGM9SGwoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbD1lLnRhcmdldCx1PWUuZ2xvYmFsLGQ9ZS5zdGF0LGYscD11P246ZD9uW2xdfHxvKGwse30pOm5bbF0mJm5bbF0ucHJvdG90eXBlLG0saCxnLF87aWYocClmb3IobSBpbiB0KXtpZihnPXRbbV0sZS5kb250Q2FsbEdldFNldD8oXz1yKHAsbSksaD1fJiZfLnZhbHVlKTpoPXBbbV0sZj1jKHU/bTpsKyhkP2AuYDpgI2ApK20sZS5mb3JjZWQpLCFmJiZoIT09dm9pZCAwKXtpZih0eXBlb2YgZz09dHlwZW9mIGgpY29udGludWU7cyhnLGgpfShlLnNoYW18fGgmJmguc2hhbSkmJmkoZyxgc2hhbWAsITApLGEocCxtLGcsZSl9fX0pKSxXbD1zKCgoZSx0KT0+e3ZhciBuPU5jKCkscj1YYygpLGk9VmMoKSxhPWZ1bmN0aW9uKGUpe3JldHVybiByLnNsaWNlKDAsZS5sZW5ndGgpPT09ZX07dC5leHBvcnRzPShmdW5jdGlvbigpe3JldHVybiBhKGBCdW4vYCk/YEJVTmA6YShgQ2xvdWRmbGFyZS1Xb3JrZXJzYCk/YENMT1VERkxBUkVgOmEoYERlbm8vYCk/YERFTk9gOmEoYE5vZGUuanMvYCk/YE5PREVgOm4uQnVuJiZ0eXBlb2YgQnVuLnZlcnNpb249PWBzdHJpbmdgP2BCVU5gOm4uRGVubyYmdHlwZW9mIERlbm8udmVyc2lvbj09YG9iamVjdGA/YERFTk9gOmkobi5wcm9jZXNzKT09PWBwcm9jZXNzYD9gTk9ERWA6bi53aW5kb3cmJm4uZG9jdW1lbnQ/YEJST1dTRVJgOmBSRVNUYH0pKCl9KSksR2w9cygoKGUsdCk9Pnt0LmV4cG9ydHM9V2woKT09PWBOT0RFYH0pKSxLbD1zKCgoZSx0KT0+e3QuZXhwb3J0cz1OYygpfSkpLHFsPXMoKChlLHQpPT57dmFyIG49QmMoKSxyPW5sKCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXt0cnl7cmV0dXJuIG4ocihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdClbaV0pKX1jYXRjaHt9fX0pKSxKbD1zKCgoZSx0KT0+e3ZhciBuPXFjKCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUpfHxlPT09bnVsbH19KSksWWw9cygoKGUsdCk9Pnt2YXIgbj1KbCgpLHI9U3RyaW5nLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IG5ldyBpKGBDYW4ndCBzZXQgYCtyKGUpK2AgYXMgYSBwcm90b3R5cGVgKX19KSksWGw9cygoKGUsdCk9Pnt2YXIgbj1xbCgpLHI9cWMoKSxpPVdjKCksYT1ZbCgpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fChgX19wcm90b19fYGlue30/ZnVuY3Rpb24oKXt2YXIgZT0hMSx0PXt9LG87dHJ5e289bihPYmplY3QucHJvdG90eXBlLGBfX3Byb3RvX19gLGBzZXRgKSxvKHQsW10pLGU9dCBpbnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gaSh0KSxhKG4pLHIodCkmJihlP28odCxuKTp0Ll9fcHJvdG9fXz1uKSx0fX0oKTp2b2lkIDApfSkpLFpsPXMoKChlLHQpPT57dmFyIG49YmwoKS5mLHI9dWwoKSxpPWZsKCkoYHRvU3RyaW5nVGFnYCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhKXtlJiYhYSYmKGU9ZS5wcm90b3R5cGUpLGUmJiFyKGUsaSkmJm4oZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0pKSxRbD1zKCgoZSx0KT0+e3ZhciBuPU9sKCkscj1ibCgpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIGkuZ2V0JiZuKGkuZ2V0LHQse2dldHRlcjohMH0pLGkuc2V0JiZuKGkuc2V0LHQse3NldHRlcjohMH0pLHIuZihlLHQsaSl9fSkpLCRsPXMoKChlLHQpPT57dmFyIG49SmMoKSxyPVFsKCksaT1mbCgpLGE9RmMoKSxvPWkoYHNwZWNpZXNgKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKTthJiZ0JiYhdFtvXSYmcih0LG8se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19KSksZXU9cygoKGUsdCk9Pnt2YXIgbj1ZYygpLHI9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKG4odCxlKSlyZXR1cm4gZTt0aHJvdyBuZXcgcihgSW5jb3JyZWN0IGludm9jYXRpb25gKX19KSksdHU9cygoKGUsdCk9Pnt2YXIgbj1mbCgpKGB0b1N0cmluZ1RhZ2ApLHI9e307cltuXT1gemAsdC5leHBvcnRzPVN0cmluZyhyKT09PWBbb2JqZWN0IHpdYH0pKSxudT1zKCgoZSx0KT0+e3ZhciBuPXR1KCkscj1LYygpLGk9VmMoKSxhPWZsKCkoYHRvU3RyaW5nVGFnYCksbz1PYmplY3Qscz1pKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk9PT1gQXJndW1lbnRzYCxjPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoe319O3QuZXhwb3J0cz1uP2k6ZnVuY3Rpb24oZSl7dmFyIHQsbixsO3JldHVybiBlPT09dm9pZCAwP2BVbmRlZmluZWRgOmU9PT1udWxsP2BOdWxsYDp0eXBlb2Yobj1jKHQ9byhlKSxhKSk9PWBzdHJpbmdgP246cz9pKHQpOihsPWkodCkpPT09YE9iamVjdGAmJnIodC5jYWxsZWUpP2BBcmd1bWVudHNgOmx9fSkpLHJ1PXMoKChlLHQpPT57dmFyIG49QmMoKSxyPVBjKCksaT1LYygpLGE9bnUoKSxvPUpjKCkscz1DbCgpLGM9ZnVuY3Rpb24oKXt9LGw9byhgUmVmbGVjdGAsYGNvbnN0cnVjdGApLHU9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sZD1uKHUuZXhlYyksZj0hdS50ZXN0KGMpLHA9ZnVuY3Rpb24oZSl7aWYoIWkoZSkpcmV0dXJuITE7dHJ5e3JldHVybiBsKGMsW10sZSksITB9Y2F0Y2h7cmV0dXJuITF9fSxtPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3N3aXRjaChhKGUpKXtjYXNlYEFzeW5jRnVuY3Rpb25gOmNhc2VgR2VuZXJhdG9yRnVuY3Rpb25gOmNhc2VgQXN5bmNHZW5lcmF0b3JGdW5jdGlvbmA6cmV0dXJuITF9dHJ5e3JldHVybiBmfHwhIWQodSxzKGUpKX1jYXRjaHtyZXR1cm4hMH19O20uc2hhbT0hMCx0LmV4cG9ydHM9IWx8fHIoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gcChwLmNhbGwpfHwhcChPYmplY3QpfHwhcChmdW5jdGlvbigpe2U9ITB9KXx8ZX0pP206cH0pKSxpdT1zKCgoZSx0KT0+e3ZhciBuPXJ1KCkscj10bCgpLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IG5ldyBpKHIoZSkrYCBpcyBub3QgYSBjb25zdHJ1Y3RvcmApfX0pKSxhdT1zKCgoZSx0KT0+e3ZhciBuPXlsKCkscj1pdSgpLGk9VWMoKSxhPWZsKCkoYHNwZWNpZXNgKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1uKGUpLmNvbnN0cnVjdG9yLHM7cmV0dXJuIG89PT12b2lkIDB8fGkocz1uKG8pW2FdKT90OnIocyl9fSkpLG91PXMoKChlLHQpPT57dmFyIG49SWMoKSxyPUZ1bmN0aW9uLnByb3RvdHlwZSxpPXIuYXBwbHksYT1yLmNhbGw7dC5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PT1gb2JqZWN0YCYmUmVmbGVjdC5hcHBseXx8KG4/YS5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoaSxhcmd1bWVudHMpfSl9KSksc3U9cygoKGUsdCk9Pnt2YXIgbj1WYygpLHI9QmMoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKT09PWBGdW5jdGlvbmApcmV0dXJuIHIoZSl9fSkpLGN1PXMoKChlLHQpPT57dmFyIG49c3UoKSxyPW5sKCksaT1JYygpLGE9bihuLmJpbmQpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiByKGUpLHQ9PT12b2lkIDA/ZTppP2EoZSx0KTpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSkpLGx1PXMoKChlLHQpPT57dC5leHBvcnRzPUpjKCkoYGRvY3VtZW50YCxgZG9jdW1lbnRFbGVtZW50YCl9KSksdXU9cygoKGUsdCk9Pnt0LmV4cG9ydHM9QmMoKShbXS5zbGljZSl9KSksZHU9cygoKGUsdCk9Pnt2YXIgbj1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoZTx0KXRocm93IG5ldyBuKGBOb3QgZW5vdWdoIGFyZ3VtZW50c2ApO3JldHVybiBlfX0pKSxmdT1zKCgoZSx0KT0+e3ZhciBuPVhjKCk7dC5leHBvcnRzPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChuKSYmL2FwcGxld2Via2l0L2kudGVzdChuKX0pKSxwdT1zKCgoZSx0KT0+e3ZhciBuPU5jKCkscj1vdSgpLGk9Y3UoKSxhPUtjKCksbz11bCgpLHM9UGMoKSxjPWx1KCksbD11dSgpLHU9aGwoKSxkPWR1KCksZj1mdSgpLHA9R2woKSxtPW4uc2V0SW1tZWRpYXRlLGg9bi5jbGVhckltbWVkaWF0ZSxnPW4ucHJvY2VzcyxfPW4uRGlzcGF0Y2gsdj1uLkZ1bmN0aW9uLHk9bi5NZXNzYWdlQ2hhbm5lbCxiPW4uU3RyaW5nLHg9MCxTPXt9LEM9YG9ucmVhZHlzdGF0ZWNoYW5nZWAsdyxULEUsRDtzKGZ1bmN0aW9uKCl7dz1uLmxvY2F0aW9ufSk7dmFyIE89ZnVuY3Rpb24oZSl7aWYobyhTLGUpKXt2YXIgdD1TW2VdO2RlbGV0ZSBTW2VdLHQoKX19LGs9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TyhlKX19LEE9ZnVuY3Rpb24oZSl7TyhlLmRhdGEpfSxqPWZ1bmN0aW9uKGUpe24ucG9zdE1lc3NhZ2UoYihlKSx3LnByb3RvY29sK2AvL2Ardy5ob3N0KX07KCFtfHwhaCkmJihtPWZ1bmN0aW9uKGUpe2QoYXJndW1lbnRzLmxlbmd0aCwxKTt2YXIgdD1hKGUpP2U6dihlKSxuPWwoYXJndW1lbnRzLDEpO3JldHVybiBTWysreF09ZnVuY3Rpb24oKXtyKHQsdm9pZCAwLG4pfSxUKHgpLHh9LGg9ZnVuY3Rpb24oZSl7ZGVsZXRlIFNbZV19LHA/VD1mdW5jdGlvbihlKXtnLm5leHRUaWNrKGsoZSkpfTpfJiZfLm5vdz9UPWZ1bmN0aW9uKGUpe18ubm93KGsoZSkpfTp5JiYhZj8oRT1uZXcgeSxEPUUucG9ydDIsRS5wb3J0MS5vbm1lc3NhZ2U9QSxUPWkoRC5wb3N0TWVzc2FnZSxEKSk6bi5hZGRFdmVudExpc3RlbmVyJiZhKG4ucG9zdE1lc3NhZ2UpJiYhbi5pbXBvcnRTY3JpcHRzJiZ3JiZ3LnByb3RvY29sIT09YGZpbGU6YCYmIXMoaik/KFQ9aixuLmFkZEV2ZW50TGlzdGVuZXIoYG1lc3NhZ2VgLEEsITEpKTpUPUMgaW4gdShgc2NyaXB0YCk/ZnVuY3Rpb24oZSl7Yy5hcHBlbmRDaGlsZCh1KGBzY3JpcHRgKSlbQ109ZnVuY3Rpb24oKXtjLnJlbW92ZUNoaWxkKHRoaXMpLE8oZSl9fTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGsoZSksMCl9KSx0LmV4cG9ydHM9e3NldDptLGNsZWFyOmh9fSkpLG11PXMoKChlLHQpPT57dmFyIG49TmMoKSxyPUZjKCksaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcilyZXR1cm4gbltlXTt2YXIgdD1pKG4sZSk7cmV0dXJuIHQmJnQudmFsdWV9fSkpLGh1PXMoKChlLHQpPT57dmFyIG49ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbH07bi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD17aXRlbTplLG5leHQ6bnVsbH0sbj10aGlzLnRhaWw7bj9uLm5leHQ9dDp0aGlzLmhlYWQ9dCx0aGlzLnRhaWw9dH0sZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oZWFkO2lmKGUpcmV0dXJuKHRoaXMuaGVhZD1lLm5leHQpPT09bnVsbCYmKHRoaXMudGFpbD1udWxsKSxlLml0ZW19fSx0LmV4cG9ydHM9bn0pKSxndT1zKCgoZSx0KT0+e3ZhciBuPVhjKCk7dC5leHBvcnRzPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChuKSYmdHlwZW9mIFBlYmJsZTxgdWB9KSksX3U9cygoKGUsdCk9Pnt2YXIgbj1YYygpO3QuZXhwb3J0cz0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KG4pfSkpLHZ1PXMoKChlLHQpPT57dmFyIG49TmMoKSxyPW11KCksaT1jdSgpLGE9cHUoKS5zZXQsbz1odSgpLHM9ZnUoKSxjPWd1KCksbD1fdSgpLHU9R2woKSxkPW4uTXV0YXRpb25PYnNlcnZlcnx8bi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGY9bi5kb2N1bWVudCxwPW4ucHJvY2VzcyxtPW4uUHJvbWlzZSxoPXIoYHF1ZXVlTWljcm90YXNrYCksZyxfLHYseSxiO2lmKCFoKXt2YXIgeD1uZXcgbyxTPWZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IodSYmKGU9cC5kb21haW4pJiZlLmV4aXQoKTt0PXguZ2V0KCk7KXRyeXt0KCl9Y2F0Y2goZSl7dGhyb3cgeC5oZWFkJiZnKCksZX1lJiZlLmVudGVyKCl9OyFzJiYhdSYmIWwmJmQmJmY/KF89ITAsdj1mLmNyZWF0ZVRleHROb2RlKGBgKSxuZXcgZChTKS5vYnNlcnZlKHYse2NoYXJhY3RlckRhdGE6ITB9KSxnPWZ1bmN0aW9uKCl7di5kYXRhPV89IV99KTohYyYmbSYmbS5yZXNvbHZlPyh5PW0ucmVzb2x2ZSh2b2lkIDApLHkuY29uc3RydWN0b3I9bSxiPWkoeS50aGVuLHkpLGc9ZnVuY3Rpb24oKXtiKFMpfSk6dT9nPWZ1bmN0aW9uKCl7cC5uZXh0VGljayhTKX06KGE9aShhLG4pLGc9ZnVuY3Rpb24oKXthKFMpfSksaD1mdW5jdGlvbihlKXt4LmhlYWR8fGcoKSx4LmFkZChlKX19dC5leHBvcnRzPWh9KSkseXU9cygoKGUsdCk9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7YXJndW1lbnRzLmxlbmd0aD09PTE/Y29uc29sZS5lcnJvcihlKTpjb25zb2xlLmVycm9yKGUsdCl9Y2F0Y2h7fX19KSksYnU9cygoKGUsdCk9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybntlcnJvcjohMSx2YWx1ZTplKCl9fWNhdGNoKGUpe3JldHVybntlcnJvcjohMCx2YWx1ZTplfX19fSkpLHh1PXMoKChlLHQpPT57dC5leHBvcnRzPU5jKCkuUHJvbWlzZX0pKSxTdT1zKCgoZSx0KT0+e3ZhciBuPU5jKCkscj14dSgpLGk9S2MoKSxhPUhsKCksbz1DbCgpLHM9ZmwoKSxjPVdsKCksbD1hbCgpLHU9WmMoKSxkPXImJnIucHJvdG90eXBlLGY9cyhgc3BlY2llc2ApLHA9ITEsbT1pKG4uUHJvbWlzZVJlamVjdGlvbkV2ZW50KTt0LmV4cG9ydHM9e0NPTlNUUlVDVE9SOmEoYFByb21pc2VgLGZ1bmN0aW9uKCl7dmFyIGU9byhyKSx0PWUhPT1TdHJpbmcocik7aWYoIXQmJnU9PT02Nnx8bCYmIShkLmNhdGNoJiZkLmZpbmFsbHkpKXJldHVybiEwO2lmKCF1fHx1PDUxfHwhL25hdGl2ZSBjb2RlLy50ZXN0KGUpKXt2YXIgbj1uZXcgcihmdW5jdGlvbihlKXtlKDEpfSksaT1mdW5jdGlvbihlKXtlKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30pfSxhPW4uY29uc3RydWN0b3I9e307aWYoYVtmXT1pLHA9bi50aGVuKGZ1bmN0aW9uKCl7fSlpbnN0YW5jZW9mIGksIXApcmV0dXJuITB9cmV0dXJuIXQmJihjPT09YEJST1dTRVJgfHxjPT09YERFTk9gKSYmIW19KSxSRUpFQ1RJT05fRVZFTlQ6bSxTVUJDTEFTU0lORzpwfX0pKSxDdT1zKCgoZSx0KT0+e3ZhciBuPW5sKCkscj1UeXBlRXJyb3IsaT1mdW5jdGlvbihlKXt2YXIgdCxpO3RoaXMucHJvbWlzZT1uZXcgZShmdW5jdGlvbihlLG4pe2lmKHQhPT12b2lkIDB8fGkhPT12b2lkIDApdGhyb3cgbmV3IHIoYEJhZCBQcm9taXNlIGNvbnN0cnVjdG9yYCk7dD1lLGk9bn0pLHRoaXMucmVzb2x2ZT1uKHQpLHRoaXMucmVqZWN0PW4oaSl9O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaShlKX19KSksd3U9cygoKCk9Pnt2YXIgZT1VbCgpLHQ9YWwoKSxuPUdsKCkscj1OYygpLGk9S2woKSxhPUxjKCksbz1rbCgpLHM9WGwoKSxjPVpsKCksbD0kbCgpLHU9bmwoKSxkPUtjKCksZj1xYygpLHA9ZXUoKSxtPWF1KCksaD1wdSgpLnNldCxnPXZ1KCksXz15dSgpLHY9YnUoKSx5PWh1KCksYj1EbCgpLHg9eHUoKSxTPVN1KCksQz1DdSgpLHc9YFByb21pc2VgLFQ9Uy5DT05TVFJVQ1RPUixFPVMuUkVKRUNUSU9OX0VWRU5ULEQ9Uy5TVUJDTEFTU0lORyxPPWIuZ2V0dGVyRm9yKHcpLGs9Yi5zZXQsQT14JiZ4LnByb3RvdHlwZSxqPXgsTT1BLE49ci5UeXBlRXJyb3IsUD1yLmRvY3VtZW50LEY9ci5wcm9jZXNzLEk9Qy5mLEw9SSxSPSEhKFAmJlAuY3JlYXRlRXZlbnQmJnIuZGlzcGF0Y2hFdmVudCksej1gdW5oYW5kbGVkcmVqZWN0aW9uYCxCPWByZWplY3Rpb25oYW5kbGVkYCxWPTAsZWU9MSxIPTIsVT0xLFc9MixHLHRlLG5lLHJlLGllPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBmKGUpJiZkKHQ9ZS50aGVuKT90OiExfSxhZT1mdW5jdGlvbihlLHQpe3ZhciBuPXQudmFsdWUscj10LnN0YXRlPT09ZWUsaT1yP2Uub2s6ZS5mYWlsLG89ZS5yZXNvbHZlLHM9ZS5yZWplY3QsYz1lLmRvbWFpbixsLHUsZDt0cnl7aT8ocnx8KHQucmVqZWN0aW9uPT09VyYmbGUodCksdC5yZWplY3Rpb249VSksaT09PSEwP2w9bjooYyYmYy5lbnRlcigpLGw9aShuKSxjJiYoYy5leGl0KCksZD0hMCkpLGw9PT1lLnByb21pc2U/cyhuZXcgTihgUHJvbWlzZS1jaGFpbiBjeWNsZWApKToodT1pZShsKSk/YSh1LGwsbyxzKTpvKGwpKTpzKG4pfWNhdGNoKGUpe2MmJiFkJiZjLmV4aXQoKSxzKGUpfX0sSz1mdW5jdGlvbihlLHQpe2Uubm90aWZpZWR8fChlLm5vdGlmaWVkPSEwLGcoZnVuY3Rpb24oKXtmb3IodmFyIG49ZS5yZWFjdGlvbnMscjtyPW4uZ2V0KCk7KWFlKHIsZSk7ZS5ub3RpZmllZD0hMSx0JiYhZS5yZWplY3Rpb24mJnNlKGUpfSkpfSxvZT1mdW5jdGlvbihlLHQsbil7dmFyIGksYTtSPyhpPVAuY3JlYXRlRXZlbnQoYEV2ZW50YCksaS5wcm9taXNlPXQsaS5yZWFzb249bixpLmluaXRFdmVudChlLCExLCEwKSxyLmRpc3BhdGNoRXZlbnQoaSkpOmk9e3Byb21pc2U6dCxyZWFzb246bn0sIUUmJihhPXJbYG9uYCtlXSk/YShpKTplPT09eiYmXyhgVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uYCxuKX0sc2U9ZnVuY3Rpb24oZSl7YShoLHIsZnVuY3Rpb24oKXt2YXIgdD1lLmZhY2FkZSxyPWUudmFsdWUsaT1jZShlKSxhO2lmKGkmJihhPXYoZnVuY3Rpb24oKXtuP0YuZW1pdChgdW5oYW5kbGVkUmVqZWN0aW9uYCxyLHQpOm9lKHosdCxyKX0pLGUucmVqZWN0aW9uPW58fGNlKGUpP1c6VSxhLmVycm9yKSl0aHJvdyBhLnZhbHVlfSl9LGNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlamVjdGlvbiE9PVUmJiFlLnBhcmVudH0sbGU9ZnVuY3Rpb24oZSl7YShoLHIsZnVuY3Rpb24oKXt2YXIgdD1lLmZhY2FkZTtuP0YuZW1pdChgcmVqZWN0aW9uSGFuZGxlZGAsdCk6b2UoQix0LGUudmFsdWUpfSl9LHVlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7ZSh0LHIsbil9fSxkZT1mdW5jdGlvbihlLHQsbil7ZS5kb25lfHwoZS5kb25lPSEwLG4mJihlPW4pLGUudmFsdWU9dCxlLnN0YXRlPUgsSyhlLCEwKSl9LGZlPWZ1bmN0aW9uKGUsdCxuKXtpZighZS5kb25lKXtlLmRvbmU9ITAsbiYmKGU9bik7dHJ5e2lmKGUuZmFjYWRlPT09dCl0aHJvdyBuZXcgTihgUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZgKTt2YXIgcj1pZSh0KTtyP2coZnVuY3Rpb24oKXt2YXIgbj17ZG9uZTohMX07dHJ5e2Eocix0LHVlKGZlLG4sZSksdWUoZGUsbixlKSl9Y2F0Y2godCl7ZGUobix0LGUpfX0pOihlLnZhbHVlPXQsZS5zdGF0ZT1lZSxLKGUsITEpKX1jYXRjaCh0KXtkZSh7ZG9uZTohMX0sdCxlKX19fTtpZihUJiYoaj1mdW5jdGlvbihlKXtwKHRoaXMsTSksdShlKSxhKEcsdGhpcyk7dmFyIHQ9Tyh0aGlzKTt0cnl7ZSh1ZShmZSx0KSx1ZShkZSx0KSl9Y2F0Y2goZSl7ZGUodCxlKX19LE09ai5wcm90b3R5cGUsRz1mdW5jdGlvbihlKXtrKHRoaXMse3R5cGU6dyxkb25lOiExLG5vdGlmaWVkOiExLHBhcmVudDohMSxyZWFjdGlvbnM6bmV3IHkscmVqZWN0aW9uOiExLHN0YXRlOlYsdmFsdWU6bnVsbH0pfSxHLnByb3RvdHlwZT1vKE0sYHRoZW5gLGZ1bmN0aW9uKGUsdCl7dmFyIHI9Tyh0aGlzKSxpPUkobSh0aGlzLGopKTtyZXR1cm4gci5wYXJlbnQ9ITAsaS5vaz1kKGUpP2U6ITAsaS5mYWlsPWQodCkmJnQsaS5kb21haW49bj9GLmRvbWFpbjp2b2lkIDAsci5zdGF0ZT09PVY/ci5yZWFjdGlvbnMuYWRkKGkpOmcoZnVuY3Rpb24oKXthZShpLHIpfSksaS5wcm9taXNlfSksdGU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRyx0PU8oZSk7dGhpcy5wcm9taXNlPWUsdGhpcy5yZXNvbHZlPXVlKGZlLHQpLHRoaXMucmVqZWN0PXVlKGRlLHQpfSxDLmY9ST1mdW5jdGlvbihlKXtyZXR1cm4gZT09PWp8fGU9PT1uZT9uZXcgdGUoZSk6TChlKX0sIXQmJmQoeCkmJkEhPT1PYmplY3QucHJvdG90eXBlKSl7cmU9QS50aGVuLER8fG8oQSxgdGhlbmAsZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgaihmdW5jdGlvbihlLHQpe2EocmUsbixlLHQpfSkudGhlbihlLHQpfSx7dW5zYWZlOiEwfSk7dHJ5e2RlbGV0ZSBBLmNvbnN0cnVjdG9yfWNhdGNoe31zJiZzKEEsTSl9ZSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLHdyYXA6ITAsZm9yY2VkOlR9LHtQcm9taXNlOmp9KSxuZT1pLlByb21pc2UsYyhqLHcsITEsITApLGwodyl9KSksVHU9cygoKGUsdCk9Pnt0LmV4cG9ydHM9e319KSksRXU9cygoKGUsdCk9Pnt2YXIgbj1mbCgpLHI9VHUoKSxpPW4oYGl0ZXJhdG9yYCksYT1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlIT09dm9pZCAwJiYoci5BcnJheT09PWV8fGFbaV09PT1lKX19KSksRHU9cygoKGUsdCk9Pnt2YXIgbj1udSgpLHI9cmwoKSxpPVVjKCksYT1UdSgpLG89ZmwoKShgaXRlcmF0b3JgKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIWkoZSkpcmV0dXJuIHIoZSxvKXx8cihlLGBAQGl0ZXJhdG9yYCl8fGFbbihlKV19fSkpLE91PXMoKChlLHQpPT57dmFyIG49TGMoKSxyPW5sKCksaT15bCgpLGE9dGwoKSxvPUR1KCkscz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aDwyP28oZSk6dDtpZihyKGMpKXJldHVybiBpKG4oYyxlKSk7dGhyb3cgbmV3IHMoYShlKStgIGlzIG5vdCBpdGVyYWJsZWApfX0pKSxrdT1zKCgoZSx0KT0+e3ZhciBuPUxjKCkscj15bCgpLGk9cmwoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGEpe3ZhciBvLHM7cihlKTt0cnl7aWYobz1pKGUsYHJldHVybmApLCFvKXtpZih0PT09YHRocm93YCl0aHJvdyBhO3JldHVybiBhfW89bihvLGUpfWNhdGNoKGUpe3M9ITAsbz1lfWlmKHQ9PT1gdGhyb3dgKXRocm93IGE7aWYocyl0aHJvdyBvO3JldHVybiByKG8pLGF9fSkpLEF1PXMoKChlLHQpPT57dmFyIG49Y3UoKSxyPUxjKCksaT15bCgpLGE9dGwoKSxvPUV1KCkscz1QbCgpLGM9WWMoKSxsPU91KCksdT1EdSgpLGQ9a3UoKSxmPVR5cGVFcnJvcixwPWZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9wcGVkPWUsdGhpcy5yZXN1bHQ9dH0sbT1wLnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGgpe3ZhciBnPWgmJmgudGhhdCxfPSEhKGgmJmguQVNfRU5UUklFUyksdj0hIShoJiZoLklTX1JFQ09SRCkseT0hIShoJiZoLklTX0lURVJBVE9SKSxiPSEhKGgmJmguSU5URVJSVVBURUQpLHg9bih0LGcpLFMsQyx3LFQsRSxELE8saz1mdW5jdGlvbihlKXt2YXIgdD1TO3JldHVybiBTPXZvaWQgMCx0JiZkKHQsYG5vcm1hbGApLG5ldyBwKCEwLGUpfSxBPWZ1bmN0aW9uKGUpe3JldHVybiBfPyhpKGUpLGI/eChlWzBdLGVbMV0sayk6eChlWzBdLGVbMV0pKTpiP3goZSxrKTp4KGUpfTtpZih2KVM9ZS5pdGVyYXRvcjtlbHNlIGlmKHkpUz1lO2Vsc2V7aWYoQz11KGUpLCFDKXRocm93IG5ldyBmKGEoZSkrYCBpcyBub3QgaXRlcmFibGVgKTtpZihvKEMpKXtmb3Iodz0wLFQ9cyhlKTtUPnc7dysrKWlmKEU9QShlW3ddKSxFJiZjKG0sRSkpcmV0dXJuIEU7cmV0dXJuIG5ldyBwKCExKX1TPWwoZSxDKX1mb3IoRD12P2UubmV4dDpTLm5leHQ7IShPPXIoRCxTKSkuZG9uZTspe3ZhciBqPU8udmFsdWU7dHJ5e0U9QShqKX1jYXRjaChlKXtpZihTKWQoUyxgdGhyb3dgLGUpO2Vsc2UgdGhyb3cgZX1pZih0eXBlb2YgRT09YG9iamVjdGAmJkUmJmMobSxFKSlyZXR1cm4gRX1yZXR1cm4gbmV3IHAoITEpfX0pKSxqdT1zKCgoZSx0KT0+e3ZhciBuPWZsKCkoYGl0ZXJhdG9yYCkscj0hMTt0cnl7dmFyIGk9MCxhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtyPSEwfX07YVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGEsZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2h7fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3RyeXtpZighdCYmIXIpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIGk9ITE7dHJ5e3ZhciBhPXt9O2Fbbl09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOmk9ITB9fX19LGUoYSl9Y2F0Y2h7fXJldHVybiBpfX0pKSxNdT1zKCgoZSx0KT0+e3ZhciBuPXh1KCkscj1qdSgpO3QuZXhwb3J0cz1TdSgpLkNPTlNUUlVDVE9SfHwhcihmdW5jdGlvbihlKXtuLmFsbChlKS50aGVuKHZvaWQgMCxmdW5jdGlvbigpe30pfSl9KSksTnU9cygoKCk9Pnt2YXIgZT1VbCgpLHQ9TGMoKSxuPW5sKCkscj1DdSgpLGk9YnUoKSxhPUF1KCk7ZSh7dGFyZ2V0OmBQcm9taXNlYCxzdGF0OiEwLGZvcmNlZDpNdSgpfSx7YWxsOmZ1bmN0aW9uKGUpe3ZhciBvPXRoaXMscz1yLmYobyksYz1zLnJlc29sdmUsbD1zLnJlamVjdCx1PWkoZnVuY3Rpb24oKXt2YXIgcj1uKG8ucmVzb2x2ZSksaT1bXSxzPTAsdT0xO2EoZSxmdW5jdGlvbihlKXt2YXIgbj1zKyssYT0hMTt1KyssdChyLG8sZSkudGhlbihmdW5jdGlvbihlKXthfHwoYT0hMCxpW25dPWUsLS11fHxjKGkpKX0sbCl9KSwtLXV8fGMoaSl9KTtyZXR1cm4gdS5lcnJvciYmbCh1LnZhbHVlKSxzLnByb21pc2V9fSl9KSksUHU9cygoKCk9Pnt2YXIgZT1VbCgpLHQ9YWwoKSxuPVN1KCkuQ09OU1RSVUNUT1Iscj14dSgpLGk9SmMoKSxhPUtjKCksbz1rbCgpLHM9ciYmci5wcm90b3R5cGU7aWYoZSh7dGFyZ2V0OmBQcm9taXNlYCxwcm90bzohMCxmb3JjZWQ6bixyZWFsOiEwfSx7Y2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSksIXQmJmEocikpe3ZhciBjPWkoYFByb21pc2VgKS5wcm90b3R5cGUuY2F0Y2g7cy5jYXRjaCE9PWMmJm8ocyxgY2F0Y2hgLGMse3Vuc2FmZTohMH0pfX0pKSxGdT1zKCgoKT0+e3ZhciBlPVVsKCksdD1MYygpLG49bmwoKSxyPUN1KCksaT1idSgpLGE9QXUoKTtlKHt0YXJnZXQ6YFByb21pc2VgLHN0YXQ6ITAsZm9yY2VkOk11KCl9LHtyYWNlOmZ1bmN0aW9uKGUpe3ZhciBvPXRoaXMscz1yLmYobyksYz1zLnJlamVjdCxsPWkoZnVuY3Rpb24oKXt2YXIgcj1uKG8ucmVzb2x2ZSk7YShlLGZ1bmN0aW9uKGUpe3QocixvLGUpLnRoZW4ocy5yZXNvbHZlLGMpfSl9KTtyZXR1cm4gbC5lcnJvciYmYyhsLnZhbHVlKSxzLnByb21pc2V9fSl9KSksSXU9cygoKCk9Pnt2YXIgZT1VbCgpLHQ9Q3UoKSxuPVN1KCkuQ09OU1RSVUNUT1I7ZSh7dGFyZ2V0OmBQcm9taXNlYCxzdGF0OiEwLGZvcmNlZDpufSx7cmVqZWN0OmZ1bmN0aW9uKGUpe3ZhciBuPXQuZih0aGlzKSxyPW4ucmVqZWN0O3JldHVybiByKGUpLG4ucHJvbWlzZX19KX0pKSxMdT1zKCgoZSx0KT0+e3ZhciBuPXlsKCkscj1xYygpLGk9Q3UoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKGUpLHIodCkmJnQuY29uc3RydWN0b3I9PT1lKXJldHVybiB0O3ZhciBhPWkuZihlKSxvPWEucmVzb2x2ZTtyZXR1cm4gbyh0KSxhLnByb21pc2V9fSkpLFJ1PXMoKCgpPT57dmFyIGU9VWwoKSx0PUpjKCksbj1hbCgpLHI9eHUoKSxpPVN1KCkuQ09OU1RSVUNUT1IsYT1MdSgpLG89dChgUHJvbWlzZWApLHM9biYmIWk7ZSh7dGFyZ2V0OmBQcm9taXNlYCxzdGF0OiEwLGZvcmNlZDpufHxpfSx7cmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gYShzJiZ0aGlzPT09bz9yOnRoaXMsZSl9fSl9KSksenU9cygoKCk9Pnt3dSgpLE51KCksUHUoKSxGdSgpLEl1KCksUnUoKX0pKTtmdW5jdGlvbiBCdShlLHQsbixyLGksYSxvKXt0cnl7dmFyIHM9ZVthXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7bihlKTtyZXR1cm59cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4ocixpKX1mdW5jdGlvbiBWdShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe3ZhciBhPWUuYXBwbHkodCxuKTtmdW5jdGlvbiBvKGUpe0J1KGEscixpLG8scyxgbmV4dGAsZSl9ZnVuY3Rpb24gcyhlKXtCdShhLHIsaSxvLHMsYHRocm93YCxlKX1vKHZvaWQgMCl9KX19dmFyIEh1PW8oKCgpPT57fSkpLFV1PXMoKChlLHQpPT57dmFyIG49bnUoKSxyPVN0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKT09PWBTeW1ib2xgKXRocm93IFR5cGVFcnJvcihgQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmdgKTtyZXR1cm4gcihlKX19KSksV3U9cygoKGUsdCk9Pnt2YXIgbj15bCgpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPW4odGhpcyksdD1gYDtyZXR1cm4gZS5oYXNJbmRpY2VzJiYodCs9YGRgKSxlLmdsb2JhbCYmKHQrPWBnYCksZS5pZ25vcmVDYXNlJiYodCs9YGlgKSxlLm11bHRpbGluZSYmKHQrPWBtYCksZS5kb3RBbGwmJih0Kz1gc2ApLGUudW5pY29kZSYmKHQrPWB1YCksZS51bmljb2RlU2V0cyYmKHQrPWB2YCksZS5zdGlja3kmJih0Kz1geWApLHR9fSkpLEd1PXMoKChlLHQpPT57dmFyIG49UGMoKSxyPU5jKCkuUmVnRXhwLGk9bihmdW5jdGlvbigpe3ZhciBlPXIoYGFgLGB5YCk7cmV0dXJuIGUubGFzdEluZGV4PTIsZS5leGVjKGBhYmNkYCkhPT1udWxsfSksYT1pfHxuKGZ1bmN0aW9uKCl7cmV0dXJuIXIoYGFgLGB5YCkuc3RpY2t5fSk7dC5leHBvcnRzPXtCUk9LRU5fQ0FSRVQ6aXx8bihmdW5jdGlvbigpe3ZhciBlPXIoYF5yYCxgZ3lgKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixlLmV4ZWMoYHN0cmApIT09bnVsbH0pLE1JU1NFRF9TVElDS1k6YSxVTlNVUFBPUlRFRF9ZOml9fSkpLEt1PXMoKChlLHQpPT57dmFyIG49SWwoKSxyPUxsKCk7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gbihlLHIpfX0pKSxxdT1zKChlPT57dmFyIHQ9RmMoKSxuPXZsKCkscj1ibCgpLGk9eWwoKSxhPUdjKCksbz1LdSgpO2UuZj10JiYhbj9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe2koZSk7Zm9yKHZhciBuPWEodCkscz1vKHQpLGM9cy5sZW5ndGgsbD0wLHU7Yz5sOylyLmYoZSx1PXNbbCsrXSxuW3VdKTtyZXR1cm4gZX19KSksSnU9cygoKGUsdCk9Pnt2YXIgbj15bCgpLHI9cXUoKSxpPUxsKCksYT1FbCgpLG89bHUoKSxzPWhsKCksYz1UbCgpLGw9YD5gLHU9YDxgLGQ9YHByb3RvdHlwZWAsZj1gc2NyaXB0YCxwPWMoYElFX1BST1RPYCksbT1mdW5jdGlvbigpe30saD1mdW5jdGlvbihlKXtyZXR1cm4gdStmK2wrZSt1K2AvYCtmK2x9LGc9ZnVuY3Rpb24oZSl7ZS53cml0ZShoKGBgKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9LF89ZnVuY3Rpb24oKXt2YXIgZT1zKGBpZnJhbWVgKSx0PWBqYXZhYCtmK2A6YCxuO3JldHVybiBlLnN0eWxlLmRpc3BsYXk9YG5vbmVgLG8uYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKHQpLG49ZS5jb250ZW50V2luZG93LmRvY3VtZW50LG4ub3BlbigpLG4ud3JpdGUoaChgZG9jdW1lbnQuRj1PYmplY3RgKSksbi5jbG9zZSgpLG4uRn0sdix5PWZ1bmN0aW9uKCl7dHJ5e3Y9bmV3IEFjdGl2ZVhPYmplY3QoYGh0bWxmaWxlYCl9Y2F0Y2h7fXk9dHlwZW9mIGRvY3VtZW50PGB1YD9kb2N1bWVudC5kb21haW4mJnY/Zyh2KTpfKCk6Zyh2KTtmb3IodmFyIGU9aS5sZW5ndGg7ZS0tOylkZWxldGUgeVtkXVtpW2VdXTtyZXR1cm4geSgpfTthW3BdPSEwLHQuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBpO3JldHVybiBlPT09bnVsbD9pPXkoKToobVtkXT1uKGUpLGk9bmV3IG0sbVtkXT1udWxsLGlbcF09ZSksdD09PXZvaWQgMD9pOnIuZihpLHQpfX0pKSxZdT1zKCgoZSx0KT0+e3ZhciBuPVBjKCkscj1OYygpLlJlZ0V4cDt0LmV4cG9ydHM9bihmdW5jdGlvbigpe3ZhciBlPXIoYC5gLGBzYCk7cmV0dXJuIShlLmRvdEFsbCYmZS50ZXN0KGAKYCkmJmUuZmxhZ3M9PT1gc2ApfSl9KSksWHU9cygoKGUsdCk9Pnt2YXIgbj1QYygpLHI9TmMoKS5SZWdFeHA7dC5leHBvcnRzPW4oZnVuY3Rpb24oKXt2YXIgZT1yKGAoPzxhPmIpYCxgZ2ApO3JldHVybiBlLmV4ZWMoYGJgKS5ncm91cHMuYSE9PWBiYHx8YGJgLnJlcGxhY2UoZSxgJDxhPmNgKSE9PWBiY2B9KX0pKSxadT1zKCgoZSx0KT0+e3ZhciBuPUxjKCkscj1CYygpLGk9VXUoKSxhPVd1KCksbz1HdSgpLHM9Y2woKSxjPUp1KCksbD1EbCgpLmdldCx1PVl1KCksZD1YdSgpLGY9cyhgbmF0aXZlLXN0cmluZy1yZXBsYWNlYCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHA9UmVnRXhwLnByb3RvdHlwZS5leGVjLG09cCxoPXIoYGAuY2hhckF0KSxnPXIoYGAuaW5kZXhPZiksXz1yKGBgLnJlcGxhY2UpLHY9cihgYC5zbGljZSkseT0oZnVuY3Rpb24oKXt2YXIgZT0vYS8sdD0vYiovZztyZXR1cm4gbihwLGUsYGFgKSxuKHAsdCxgYWApLGUubGFzdEluZGV4IT09MHx8dC5sYXN0SW5kZXghPT0wfSkoKSxiPW8uQlJPS0VOX0NBUkVULHg9LygpPz8vLmV4ZWMoYGApWzFdIT09dm9pZCAwLFM9eXx8eHx8Ynx8dXx8ZCxDPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUuZ3JvdXBzPWMobnVsbCkscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO25baVswXV09ZVtpWzFdXX19O1MmJihtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1sKHQpLG89aShlKSxzPXIucmF3LGMsdSxkO2lmKHMpcmV0dXJuIHMubGFzdEluZGV4PXQubGFzdEluZGV4LGM9bihtLHMsbyksdC5sYXN0SW5kZXg9cy5sYXN0SW5kZXgsYyYmci5ncm91cHMmJkMoYyxyLmdyb3VwcyksYzt2YXIgUz1yLmdyb3Vwcyx3PWImJnQuc3RpY2t5LFQ9bihhLHQpLEU9dC5zb3VyY2UsRD0wLE89bztpZih3KXtUPV8oVCxgeWAsYGApLGcoVCxgZ2ApPT09LTEmJihUKz1gZ2ApLE89dihvLHQubGFzdEluZGV4KTt2YXIgaz10Lmxhc3RJbmRleD4wJiZoKG8sdC5sYXN0SW5kZXgtMSk7dC5sYXN0SW5kZXg+MCYmKCF0Lm11bHRpbGluZXx8dC5tdWx0aWxpbmUmJmshPT1gCmAmJmshPT1gXHJgJiZrIT09YFx1MjAyOGAmJmshPT1gXHUyMDI5YCkmJihFPWAoPzogKD86YCtFK2ApKWAsTz1gIGArTyxEKyspLHU9UmVnRXhwKGBeKD86YCtFK2ApYCxUKX14JiYodT1SZWdFeHAoYF5gK0UrYCQoPyFcXHMpYCxUKSkseSYmKGQ9dC5sYXN0SW5kZXgpO3ZhciBBPW4ocCx3P3U6dCxPKTtyZXR1cm4gdz9BPyhBLmlucHV0PW8sQVswXT12KEFbMF0sRCksQS5pbmRleD10Lmxhc3RJbmRleCx0Lmxhc3RJbmRleCs9QVswXS5sZW5ndGgpOnQubGFzdEluZGV4PTA6eSYmQSYmKHQubGFzdEluZGV4PXQuZ2xvYmFsP0EuaW5kZXgrQVswXS5sZW5ndGg6ZCkseCYmQSYmQS5sZW5ndGg+MSYmbihmLEFbMF0sdSxmdW5jdGlvbigpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aC0yO2UrKylhcmd1bWVudHNbZV09PT12b2lkIDAmJihBW2VdPXZvaWQgMCl9KSxBJiZTJiZDKEEsUyksQX0pLHQuZXhwb3J0cz1tfSkpLFF1PXMoKCgpPT57dmFyIGU9VWwoKSx0PVp1KCk7ZSh7dGFyZ2V0OmBSZWdFeHBgLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PXR9LHtleGVjOnR9KX0pKSwkdT1zKCgoZSx0KT0+e1F1KCk7dmFyIG49TGMoKSxyPWtsKCksaT1adSgpLGE9UGMoKSxvPWZsKCkscz14bCgpLGM9byhgc3BlY2llc2ApLGw9UmVnRXhwLnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHUsZCl7dmFyIGY9byhlKSxwPSFhKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbZl09ZnVuY3Rpb24oKXtyZXR1cm4gN30sYGBbZV0odCkhPT03fSksbT1wJiYhYShmdW5jdGlvbigpe3ZhciB0PSExLG49L2EvO2lmKGU9PT1gc3BsaXRgKXt2YXIgcj17fTtyW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG49e2NvbnN0cnVjdG9yOnIsZmxhZ3M6YGB9LG5bZl09Ly4vW2ZdfXJldHVybiBuLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdD0hMCxudWxsfSxuW2ZdKGBgKSwhdH0pO2lmKCFwfHwhbXx8dSl7dmFyIGg9Ly4vW2ZdLGc9dChmLGBgW2VdLGZ1bmN0aW9uKGUsdCxyLGEsbyl7dmFyIHM9dC5leGVjO3JldHVybiBzPT09aXx8cz09PWwuZXhlYz9wJiYhbz97ZG9uZTohMCx2YWx1ZTpuKGgsdCxyLGEpfTp7ZG9uZTohMCx2YWx1ZTpuKGUscix0LGEpfTp7ZG9uZTohMX19KTtyKFN0cmluZy5wcm90b3R5cGUsZSxnWzBdKSxyKGwsZixnWzFdKX1kJiZzKGxbZl0sYHNoYW1gLCEwKX19KSksZWQ9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9amwoKSxpPVV1KCksYT1XYygpLG89bihgYC5jaGFyQXQpLHM9bihgYC5jaGFyQ29kZUF0KSxjPW4oYGAuc2xpY2UpLGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIGw9aShhKHQpKSx1PXIobiksZD1sLmxlbmd0aCxmLHA7cmV0dXJuIHU8MHx8dT49ZD9lP2BgOnZvaWQgMDooZj1zKGwsdSksZjw1NTI5Nnx8Zj41NjMxOXx8dSsxPT09ZHx8KHA9cyhsLHUrMSkpPDU2MzIwfHxwPjU3MzQzP2U/byhsLHUpOmY6ZT9jKGwsdSx1KzIpOihmLTU1Mjk2PDwxMCkrKHAtNTYzMjApKzY1NTM2KX19O3QuZXhwb3J0cz17Y29kZUF0OmwoITEpLGNoYXJBdDpsKCEwKX19KSksdGQ9cygoKGUsdCk9Pnt2YXIgbj1lZCgpLmNoYXJBdDt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0KyhyJiZuKGUsdCkubGVuZ3RofHwxKX19KSksbmQ9cygoKGUsdCk9Pnt2YXIgbj1OYygpLHI9UGMoKSxpPW4uUmVnRXhwO3QuZXhwb3J0cz17Y29ycmVjdDohcihmdW5jdGlvbigpe3ZhciBlPSEwO3RyeXtpKGAuYCxgZGApfWNhdGNoe2U9ITF9dmFyIHQ9e30sbj1gYCxyPWU/YGRnaW1zeWA6YGdpbXN5YCxhPWZ1bmN0aW9uKGUscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4rPXIsITB9fSl9LG89e2RvdEFsbDpgc2AsZ2xvYmFsOmBnYCxpZ25vcmVDYXNlOmBpYCxtdWx0aWxpbmU6YG1gLHN0aWNreTpgeWB9O2Zvcih2YXIgcyBpbiBlJiYoby5oYXNJbmRpY2VzPWBkYCksbylhKHMsb1tzXSk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaS5wcm90b3R5cGUsYGZsYWdzYCkuZ2V0LmNhbGwodCkhPT1yfHxuIT09cn0pfX0pKSxyZD1zKCgoZSx0KT0+e3ZhciBuPUxjKCkscj11bCgpLGk9WWMoKSxhPW5kKCksbz1XdSgpLHM9UmVnRXhwLnByb3RvdHlwZTt0LmV4cG9ydHM9YS5jb3JyZWN0P2Z1bmN0aW9uKGUpe3JldHVybiBlLmZsYWdzfTpmdW5jdGlvbihlKXtyZXR1cm4hYS5jb3JyZWN0JiZpKHMsZSkmJiFyKGUsYGZsYWdzYCk/bihvLGUpOmUuZmxhZ3N9fSkpLGlkPXMoKChlLHQpPT57dmFyIG49TGMoKSxyPXlsKCksaT1LYygpLGE9VmMoKSxvPVp1KCkscz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGM9ZS5leGVjO2lmKGkoYykpe3ZhciBsPW4oYyxlLHQpO3JldHVybiBsIT09bnVsbCYmcihsKSxsfWlmKGEoZSk9PT1gUmVnRXhwYClyZXR1cm4gbihvLGUsdCk7dGhyb3cgbmV3IHMoYFJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXJgKX19KSksYWQ9cygoKCk9Pnt2YXIgZT1MYygpLHQ9QmMoKSxuPSR1KCkscj15bCgpLGk9cWMoKSxhPU5sKCksbz1VdSgpLHM9V2MoKSxjPXJsKCksbD10ZCgpLHU9cmQoKSxkPWlkKCksZj10KGBgLmluZGV4T2YpO24oYG1hdGNoYCxmdW5jdGlvbih0LG4scCl7cmV0dXJuW2Z1bmN0aW9uKG4pe3ZhciByPXModGhpcyksYT1pKG4pP2Mobix0KTp2b2lkIDA7cmV0dXJuIGE/ZShhLG4scik6bmV3IFJlZ0V4cChuKVt0XShvKHIpKX0sZnVuY3Rpb24oZSl7dmFyIHQ9cih0aGlzKSxpPW8oZSkscz1wKG4sdCxpKTtpZihzLmRvbmUpcmV0dXJuIHMudmFsdWU7dmFyIGM9byh1KHQpKTtpZighfmYoYyxgZ2ApKXJldHVybiBkKHQsaSk7dmFyIG09ISF+ZihjLGB1YCl8fCEhfmYoYyxgdmApO3QubGFzdEluZGV4PTA7Zm9yKHZhciBoPVtdLGc9MCxfOyhfPWQodCxpKSkhPT1udWxsOyl7dmFyIHY9byhfWzBdKTtoW2ddPXYsdj09PWBgJiYodC5sYXN0SW5kZXg9bChpLGEodC5sYXN0SW5kZXgpLG0pKSxnKyt9cmV0dXJuIGc9PT0wP251bGw6aH1dfSl9KSksb2Q9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9bGwoKSxpPU1hdGguZmxvb3IsYT1uKGBgLmNoYXJBdCksbz1uKGBgLnJlcGxhY2UpLHM9bihgYC5zbGljZSksYz0vXCQoWyQmJ2BdfFxkezEsMn18PFtePl0qPikvZyxsPS9cJChbJCYnYF18XGR7MSwyfSkvZzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sdSxkLGYpe3ZhciBwPW4rZS5sZW5ndGgsbT11Lmxlbmd0aCxoPWw7cmV0dXJuIGQhPT12b2lkIDAmJihkPXIoZCksaD1jKSxvKGYsaCxmdW5jdGlvbihyLG8pe3ZhciBjO3N3aXRjaChhKG8sMCkpe2Nhc2VgJGA6cmV0dXJuYCRgO2Nhc2VgJmA6cmV0dXJuIGU7Y2FzZSJgIjpyZXR1cm4gcyh0LDAsbik7Y2FzZWAnYDpyZXR1cm4gcyh0LHApO2Nhc2VgPGA6Yz1kW3MobywxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgbD0rbztpZihsPT09MClyZXR1cm4gcjtpZihsPm0pe3ZhciBmPWkobC8xMCk7cmV0dXJuIGY9PT0wP3I6Zjw9bT91W2YtMV09PT12b2lkIDA/YShvLDEpOnVbZi0xXSthKG8sMSk6cn1jPXVbbC0xXX1yZXR1cm4gYz09PXZvaWQgMD9gYDpjfSl9fSkpLHNkPXMoKCgpPT57dmFyIGU9b3UoKSx0PUxjKCksbj1CYygpLHI9JHUoKSxpPVBjKCksYT15bCgpLG89S2MoKSxzPXFjKCksYz1qbCgpLGw9TmwoKSx1PVV1KCksZD1XYygpLGY9dGQoKSxwPXJsKCksbT1vZCgpLGg9cmQoKSxnPWlkKCksXz1mbCgpKGByZXBsYWNlYCksdj1NYXRoLm1heCx5PU1hdGgubWluLGI9bihbXS5jb25jYXQpLHg9bihbXS5wdXNoKSxTPW4oYGAuaW5kZXhPZiksQz1uKGBgLnNsaWNlKSx3PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP2U6U3RyaW5nKGUpfSxUPShmdW5jdGlvbigpe3JldHVybmBhYC5yZXBsYWNlKC8uLyxgJDBgKT09PWAkMGB9KSgpLEU9KGZ1bmN0aW9uKCl7cmV0dXJuLy4vW19dPy8uL1tfXShgYWAsYCQwYCk9PT1gYDohMX0pKCk7cihgcmVwbGFjZWAsZnVuY3Rpb24obixyLGkpe3ZhciBUPUU/YCRgOmAkMGA7cmV0dXJuW2Z1bmN0aW9uKGUsbil7dmFyIGk9ZCh0aGlzKSxhPXMoZSk/cChlLF8pOnZvaWQgMDtyZXR1cm4gYT90KGEsZSxpLG4pOnQocix1KGkpLGUsbil9LGZ1bmN0aW9uKHQsbil7dmFyIHM9YSh0aGlzKSxkPXUodCkscD1vKG4pO3B8fChuPXUobikpO3ZhciBfPXUoaChzKSk7aWYodHlwZW9mIG49PWBzdHJpbmdgJiYhflMobixUKSYmIX5TKG4sYCQ8YCkmJiF+UyhfLGB5YCkpe3ZhciBFPWkocixzLGQsbik7aWYoRS5kb25lKXJldHVybiBFLnZhbHVlfXZhciBEPSEhflMoXyxgZ2ApLE87RCYmKE89ISF+UyhfLGB1YCl8fCEhflMoXyxgdmApLHMubGFzdEluZGV4PTApO2Zvcih2YXIgaz1bXSxBO0E9ZyhzLGQpLCEoQT09PW51bGx8fCh4KGssQSksIUQpKTspdShBWzBdKT09PWBgJiYocy5sYXN0SW5kZXg9ZihkLGwocy5sYXN0SW5kZXgpLE8pKTtmb3IodmFyIGo9YGAsTT0wLE49MDtOPGsubGVuZ3RoO04rKyl7QT1rW05dO2Zvcih2YXIgUD11KEFbMF0pLEY9dih5KGMoQS5pbmRleCksZC5sZW5ndGgpLDApLEk9W10sTCxSPTE7UjxBLmxlbmd0aDtSKyspeChJLHcoQVtSXSkpO3ZhciB6PUEuZ3JvdXBzO2lmKHApe3ZhciBCPWIoW1BdLEksRixkKTt6IT09dm9pZCAwJiZ4KEIseiksTD11KGUobix2b2lkIDAsQikpfWVsc2UgTD1tKFAsZCxGLEkseixuKTtGPj1NJiYoais9QyhkLE0sRikrTCxNPUYrUC5sZW5ndGgpfXJldHVybiBqK0MoZCxNKX1dfSwhIWkoZnVuY3Rpb24oKXt2YXIgZT0vLi87cmV0dXJuIGUuZXhlYz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBlLmdyb3Vwcz17YTpgN2B9LGV9LGBgLnJlcGxhY2UoZSxgJDxhPmApIT09YDdgfSl8fCFUfHxFKX0pKSxjZD1zKCgoZSx0KT0+e3ZhciBuPXFjKCkscj1WYygpLGk9ZmwoKShgbWF0Y2hgKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG4oZSkmJigodD1lW2ldKT09PXZvaWQgMD9yKGUpPT09YFJlZ0V4cGA6ISF0KX19KSksbGQ9cygoKGUsdCk9Pnt2YXIgbj1jZCgpLHI9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXRocm93IG5ldyByKGBUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnNgKTtyZXR1cm4gZX19KSksdWQ9cygoKGUsdCk9Pnt2YXIgbj1mbCgpKGBtYXRjaGApO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5e2AvLi9gW2VdKHQpfWNhdGNoe3RyeXtyZXR1cm4gdFtuXT0hMSxgLy4vYFtlXSh0KX1jYXRjaHt9fXJldHVybiExfX0pKSxkZD1zKCgoKT0+e3ZhciBlPVVsKCksdD1zdSgpLG49X2woKS5mLHI9TmwoKSxpPVV1KCksYT1sZCgpLG89V2MoKSxzPXVkKCksYz1hbCgpLGw9dChgYC5zbGljZSksdT1NYXRoLm1pbixkPXMoYHN0YXJ0c1dpdGhgKTtlKHt0YXJnZXQ6YFN0cmluZ2AscHJvdG86ITAsZm9yY2VkOiEoIWMmJiFkJiZmdW5jdGlvbigpe3ZhciBlPW4oU3RyaW5nLnByb3RvdHlwZSxgc3RhcnRzV2l0aGApO3JldHVybiBlJiYhZS53cml0YWJsZX0oKSkmJiFkfSx7c3RhcnRzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1pKG8odGhpcykpO2EoZSk7dmFyIG49aShlKSxzPXIodShhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx0Lmxlbmd0aCkpO3JldHVybiBsKHQscyxzK24ubGVuZ3RoKT09PW59fSl9KSksZmQ9cygoKGUsdCk9Pnt2YXIgbj1mbCgpLHI9SnUoKSxpPWJsKCkuZixhPW4oYHVuc2NvcGFibGVzYCksbz1BcnJheS5wcm90b3R5cGU7b1thXT09PXZvaWQgMCYmaShvLGEse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpyKG51bGwpfSksdC5leHBvcnRzPWZ1bmN0aW9uKGUpe29bYV1bZV09ITB9fSkpLHBkPXMoKChlLHQpPT57dC5leHBvcnRzPSFQYygpKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IGUpIT09ZS5wcm90b3R5cGV9KX0pKSxtZD1zKCgoZSx0KT0+e3ZhciBuPXVsKCkscj1LYygpLGk9bGwoKSxhPVRsKCksbz1wZCgpLHM9YShgSUVfUFJPVE9gKSxjPU9iamVjdCxsPWMucHJvdG90eXBlO3QuZXhwb3J0cz1vP2MuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtpZihuKHQscykpcmV0dXJuIHRbc107dmFyIGE9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gcihhKSYmdCBpbnN0YW5jZW9mIGE/YS5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIGM/bDpudWxsfX0pKSxoZD1zKCgoZSx0KT0+e3ZhciBuPVBjKCkscj1LYygpLGk9cWMoKSxhPUp1KCksbz1tZCgpLHM9a2woKSxjPWZsKCksbD1hbCgpLHU9YyhgaXRlcmF0b3JgKSxkPSExLGYscCxtO1tdLmtleXMmJihtPVtdLmtleXMoKSxgbmV4dGBpbiBtPyhwPW8obyhtKSkscCE9PU9iamVjdC5wcm90b3R5cGUmJihmPXApKTpkPSEwKSwhaShmKXx8bihmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBmW3VdLmNhbGwoZSkhPT1lfSk/Zj17fTpsJiYoZj1hKGYpKSxyKGZbdV0pfHxzKGYsdSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdC5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpmLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6ZH19KSksZ2Q9cygoKGUsdCk9Pnt2YXIgbj1oZCgpLkl0ZXJhdG9yUHJvdG90eXBlLHI9SnUoKSxpPXpjKCksYT1abCgpLG89VHUoKSxzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsYyxsKXt2YXIgdT10K2AgSXRlcmF0b3JgO3JldHVybiBlLnByb3RvdHlwZT1yKG4se25leHQ6aSgrIWwsYyl9KSxhKGUsdSwhMSwhMCksb1t1XT1zLGV9fSkpLF9kPXMoKChlLHQpPT57dmFyIG49VWwoKSxyPUxjKCksaT1hbCgpLGE9U2woKSxvPUtjKCkscz1nZCgpLGM9bWQoKSxsPVhsKCksdT1abCgpLGQ9eGwoKSxmPWtsKCkscD1mbCgpLG09VHUoKSxoPWhkKCksZz1hLlBST1BFUixfPWEuQ09ORklHVVJBQkxFLHY9aC5JdGVyYXRvclByb3RvdHlwZSx5PWguQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxiPXAoYGl0ZXJhdG9yYCkseD1ga2V5c2AsUz1gdmFsdWVzYCxDPWBlbnRyaWVzYCx3PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsYSxwLGgsVCxFKXtzKGEsdCxwKTt2YXIgRD1mdW5jdGlvbihlKXtpZihlPT09aCYmTSlyZXR1cm4gTTtpZigheSYmZSYmZSBpbiBBKXJldHVybiBBW2VdO3N3aXRjaChlKXtjYXNlIHg6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhKHRoaXMsZSl9O2Nhc2UgUzpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcyxlKX07Y2FzZSBDOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgYSh0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcyl9fSxPPXQrYCBJdGVyYXRvcmAsaz0hMSxBPWUucHJvdG90eXBlLGo9QVtiXXx8QVtgQEBpdGVyYXRvcmBdfHxoJiZBW2hdLE09IXkmJmp8fEQoaCksTj10PT09YEFycmF5YCYmQS5lbnRyaWVzfHxqLFAsRixJO2lmKE4mJihQPWMoTi5jYWxsKG5ldyBlKSksUCE9PU9iamVjdC5wcm90b3R5cGUmJlAubmV4dCYmKCFpJiZjKFApIT09diYmKGw/bChQLHYpOm8oUFtiXSl8fGYoUCxiLHcpKSx1KFAsTywhMCwhMCksaSYmKG1bT109dykpKSxnJiZoPT09UyYmaiYmai5uYW1lIT09UyYmKCFpJiZfP2QoQSxgbmFtZWAsUyk6KGs9ITAsTT1mdW5jdGlvbigpe3JldHVybiByKGosdGhpcyl9KSksaClpZihGPXt2YWx1ZXM6RChTKSxrZXlzOlQ/TTpEKHgpLGVudHJpZXM6RChDKX0sRSlmb3IoSSBpbiBGKSh5fHxrfHwhKEkgaW4gQSkpJiZmKEEsSSxGW0ldKTtlbHNlIG4oe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDp5fHxrfSxGKTtyZXR1cm4oIWl8fEUpJiZBW2JdIT09TSYmZihBLGIsTSx7bmFtZTpofSksbVt0XT1NLEZ9fSkpLHZkPXMoKChlLHQpPT57dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOmUsZG9uZTp0fX19KSkseWQ9cygoKGUsdCk9Pnt2YXIgbj1HYygpLHI9ZmQoKSxpPVR1KCksYT1EbCgpLG89YmwoKS5mLHM9X2QoKSxjPXZkKCksbD1hbCgpLHU9RmMoKSxkPWBBcnJheSBJdGVyYXRvcmAsZj1hLnNldCxwPWEuZ2V0dGVyRm9yKGQpO3QuZXhwb3J0cz1zKEFycmF5LGBBcnJheWAsZnVuY3Rpb24oZSx0KXtmKHRoaXMse3R5cGU6ZCx0YXJnZXQ6bihlKSxpbmRleDowLGtpbmQ6dH0pfSxmdW5jdGlvbigpe3ZhciBlPXAodGhpcyksdD1lLnRhcmdldCxuPWUuaW5kZXgrKztpZighdHx8bj49dC5sZW5ndGgpcmV0dXJuIGUudGFyZ2V0PW51bGwsYyh2b2lkIDAsITApO3N3aXRjaChlLmtpbmQpe2Nhc2Vga2V5c2A6cmV0dXJuIGMobiwhMSk7Y2FzZWB2YWx1ZXNgOnJldHVybiBjKHRbbl0sITEpfXJldHVybiBjKFtuLHRbbl1dLCExKX0sYHZhbHVlc2ApO3ZhciBtPWkuQXJndW1lbnRzPWkuQXJyYXk7aWYocihga2V5c2ApLHIoYHZhbHVlc2ApLHIoYGVudHJpZXNgKSwhbCYmdSYmbS5uYW1lIT09YHZhbHVlc2ApdHJ5e28obSxgbmFtZWAse3ZhbHVlOmB2YWx1ZXNgfSl9Y2F0Y2h7fX0pKSxiZD1zKCgoZSx0KT0+e3QuZXhwb3J0cz17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH19KSkseGQ9cygoKGUsdCk9Pnt2YXIgbj1obCgpKGBzcGFuYCkuY2xhc3NMaXN0LHI9biYmbi5jb25zdHJ1Y3RvciYmbi5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7dC5leHBvcnRzPXI9PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDpyfSkpLFNkPXMoKCgpPT57dmFyIGU9TmMoKSx0PWJkKCksbj14ZCgpLHI9eWQoKSxpPXhsKCksYT1abCgpLG89ZmwoKShgaXRlcmF0b3JgKSxzPXIudmFsdWVzLGM9ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihlW29dIT09cyl0cnl7aShlLG8scyl9Y2F0Y2h7ZVtvXT1zfWlmKGEoZSxuLCEwKSx0W25dKXtmb3IodmFyIGMgaW4gcilpZihlW2NdIT09cltjXSl0cnl7aShlLGMscltjXSl9Y2F0Y2h7ZVtjXT1yW2NdfX19fTtmb3IodmFyIGwgaW4gdCljKGVbbF0mJmVbbF0ucHJvdG90eXBlLGwpO2MobixgRE9NVG9rZW5MaXN0YCl9KSk7ZnVuY3Rpb24gQ2QoZSx0KXtpZihBKGUpIT1gb2JqZWN0YHx8IWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKG4hPT12b2lkIDApe3ZhciByPW4uY2FsbChlLHR8fGBkZWZhdWx0YCk7aWYoQShyKSE9YG9iamVjdGApcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKGBAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLmApfXJldHVybih0PT09YHN0cmluZ2A/U3RyaW5nOk51bWJlcikoZSl9dmFyIHdkPW8oKCgpPT57aigpfSkpO2Z1bmN0aW9uIFRkKGUpe3ZhciB0PUNkKGUsYHN0cmluZ2ApO3JldHVybiBBKHQpPT1gc3ltYm9sYD90OnQrYGB9dmFyIEVkPW8oKCgpPT57aigpLHdkKCl9KSk7ZnVuY3Rpb24gRGQoZSx0LG4pe3JldHVybih0PVRkKHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBPZD1vKCgoKT0+e0VkKCl9KSksa2Q9cygoKGUsdCk9Pnt2YXIgbj1ubCgpLHI9bGwoKSxpPUhjKCksYT1QbCgpLG89VHlwZUVycm9yLHM9YFJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWVgLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsYyxsLHUpe3ZhciBkPXIodCksZj1pKGQpLHA9YShkKTtpZihuKGMpLHA9PT0wJiZsPDIpdGhyb3cgbmV3IG8ocyk7dmFyIG09ZT9wLTE6MCxoPWU/LTE6MTtpZihsPDIpZm9yKDs7KXtpZihtIGluIGYpe3U9ZlttXSxtKz1oO2JyZWFrfWlmKG0rPWgsZT9tPDA6cDw9bSl0aHJvdyBuZXcgbyhzKX1mb3IoO2U/bT49MDpwPm07bSs9aCltIGluIGYmJih1PWModSxmW21dLG0sZCkpO3JldHVybiB1fX07dC5leHBvcnRzPXtsZWZ0OmMoITEpLHJpZ2h0OmMoITApfX0pKSxBZD1zKCgoZSx0KT0+e3ZhciBuPVBjKCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9W11bZV07cmV0dXJuISFyJiZuKGZ1bmN0aW9uKCl7ci5jYWxsKG51bGwsdHx8ZnVuY3Rpb24oKXtyZXR1cm4gMX0sMSl9KX19KSksamQ9cygoKCk9Pnt2YXIgZT1VbCgpLHQ9a2QoKS5sZWZ0LG49QWQoKSxyPVpjKCk7ZSh7dGFyZ2V0OmBBcnJheWAscHJvdG86ITAsZm9yY2VkOiFHbCgpJiZyPjc5JiZyPDgzfHwhbihgcmVkdWNlYCl9LHtyZWR1Y2U6ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gdCh0aGlzLGUsbixuPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9KSksTWQ9cygoKCk9Pnt2YXIgZT1VbCgpLHQ9c3UoKSxuPV9sKCkuZixyPU5sKCksaT1VdSgpLGE9bGQoKSxvPVdjKCkscz11ZCgpLGM9YWwoKSxsPXQoYGAuc2xpY2UpLHU9TWF0aC5taW4sZD1zKGBlbmRzV2l0aGApO2Uoe3RhcmdldDpgU3RyaW5nYCxwcm90bzohMCxmb3JjZWQ6ISghYyYmIWQmJmZ1bmN0aW9uKCl7dmFyIGU9bihTdHJpbmcucHJvdG90eXBlLGBlbmRzV2l0aGApO3JldHVybiBlJiYhZS53cml0YWJsZX0oKSkmJiFkfSx7ZW5kc1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9aShvKHRoaXMpKTthKGUpO3ZhciBuPWkoZSkscz1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxjPXQubGVuZ3RoLGQ9cz09PXZvaWQgMD9jOnUocihzKSxjKTtyZXR1cm4gbCh0LGQtbi5sZW5ndGgsZCk9PT1ufX0pfSkpLE5kPXMoKCgpPT57dmFyIGU9TGMoKSx0PUJjKCksbj0kdSgpLHI9eWwoKSxpPXFjKCksYT1XYygpLG89YXUoKSxzPXRkKCksYz1ObCgpLGw9VXUoKSx1PXJsKCksZD1yZCgpLGY9aWQoKSxwPUd1KCksbT1QYygpLGg9cC5VTlNVUFBPUlRFRF9ZLGc9NDI5NDk2NzI5NSxfPU1hdGgubWluLHY9dChbXS5wdXNoKSx5PXQoYGAuc2xpY2UpLGI9dChgYC5pbmRleE9mKSx4PSFtKGZ1bmN0aW9uKCl7dmFyIGU9Lyg/OikvLHQ9ZS5leGVjO2UuZXhlYz1mdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG49YGFiYC5zcGxpdChlKTtyZXR1cm4gbi5sZW5ndGghPT0yfHxuWzBdIT09YGFgfHxuWzFdIT09YGJgfSksUz1gYWJiY2Auc3BsaXQoLyhiKSovKVsxXT09PWBjYHx8YHRlc3RgLnNwbGl0KC8oPzopLywtMSkubGVuZ3RoIT09NHx8YGFiYC5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aCE9PTJ8fGAuYC5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGghPT00fHxgLmAuc3BsaXQoLygpKCkvKS5sZW5ndGg+MXx8YGAuc3BsaXQoLy4/LykubGVuZ3RoO24oYHNwbGl0YCxmdW5jdGlvbih0LG4scCl7dmFyIG09YDBgLnNwbGl0KHZvaWQgMCwwKS5sZW5ndGg/ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD09PXZvaWQgMCYmcj09PTA/W106ZShuLHRoaXMsdCxyKX06bjtyZXR1cm5bZnVuY3Rpb24obixyKXt2YXIgbz1hKHRoaXMpLHM9aShuKT91KG4sdCk6dm9pZCAwO3JldHVybiBzP2UocyxuLG8scik6ZShtLGwobyksbixyKX0sZnVuY3Rpb24oZSx0KXt2YXIgaT1yKHRoaXMpLGE9bChlKTtpZighUyl7dmFyIHU9cChtLGksYSx0LG0hPT1uKTtpZih1LmRvbmUpcmV0dXJuIHUudmFsdWV9dmFyIHg9byhpLFJlZ0V4cCksQz1sKGQoaSkpLHc9ISF+YihDLGB1YCl8fCEhfmIoQyxgdmApO2g/fmIoQyxgZ2ApfHwoQys9YGdgKTp+YihDLGB5YCl8fChDKz1geWApO3ZhciBUPW5ldyB4KGg/YF4oPzpgK2kuc291cmNlK2ApYDppLEMpLEU9dD09PXZvaWQgMD9nOnQ+Pj4wO2lmKEU9PT0wKXJldHVybltdO2lmKGEubGVuZ3RoPT09MClyZXR1cm4gZihULGEpPT09bnVsbD9bYV06W107Zm9yKHZhciBEPTAsTz0wLGs9W107TzxhLmxlbmd0aDspe1QubGFzdEluZGV4PWg/MDpPO3ZhciBBPWYoVCxoP3koYSxPKTphKSxqO2lmKEE9PT1udWxsfHwoaj1fKGMoVC5sYXN0SW5kZXgrKGg/TzowKSksYS5sZW5ndGgpKT09PUQpTz1zKGEsTyx3KTtlbHNle2lmKHYoayx5KGEsRCxPKSksay5sZW5ndGg9PT1FKXJldHVybiBrO2Zvcih2YXIgTT0xO008PUEubGVuZ3RoLTE7TSsrKWlmKHYoayxBW01dKSxrLmxlbmd0aD09PUUpcmV0dXJuIGs7Tz1EPWp9fXJldHVybiB2KGsseShhLEQpKSxrfV19LFN8fCF4LGgpfSkpLFBkPXMoKChlLHQpPT57KGZ1bmN0aW9uKCl7dmFyIGUsbixyLGksYSxvO3R5cGVvZiBwZXJmb3JtYW5jZTxgdWAmJnBlcmZvcm1hbmNlIT09bnVsbCYmcGVyZm9ybWFuY2Uubm93P3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06dHlwZW9mIHByb2Nlc3M8YHVgJiZwcm9jZXNzIT09bnVsbCYmcHJvY2Vzcy5ocnRpbWU/KHQuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybihlKCktYSkvMWU2fSxuPXByb2Nlc3MuaHJ0aW1lLGU9ZnVuY3Rpb24oKXt2YXIgZT1uKCk7cmV0dXJuIGVbMF0qMWU5K2VbMV19LGk9ZSgpLG89cHJvY2Vzcy51cHRpbWUoKSoxZTksYT1pLW8pOkRhdGUubm93Pyh0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1yfSxyPURhdGUubm93KCkpOih0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCktcn0scj1uZXcgRGF0ZSgpLmdldFRpbWUoKSl9KS5jYWxsKGUpfSkpLEZkPXMoKChlLHQpPT57Zm9yKHZhciBuPVBkKCkscj10eXBlb2Ygd2luZG93PmB1YD9nbG9iYWw6d2luZG93LGk9W2Btb3pgLGB3ZWJraXRgXSxhPWBBbmltYXRpb25GcmFtZWAsbz1yW2ByZXF1ZXN0YCthXSxzPXJbYGNhbmNlbGArYV18fHJbYGNhbmNlbFJlcXVlc3RgK2FdLGM9MDshbyYmYzxpLmxlbmd0aDtjKyspbz1yW2lbY10rYFJlcXVlc3RgK2FdLHM9cltpW2NdK2BDYW5jZWxgK2FdfHxyW2lbY10rYENhbmNlbFJlcXVlc3RgK2FdO2lmKCFvfHwhcyl7dmFyIGw9MCx1PTAsZD1bXSxmPTFlMy82MDtvPWZ1bmN0aW9uKGUpe2lmKGQubGVuZ3RoPT09MCl7dmFyIHQ9bigpLHI9TWF0aC5tYXgoMCxmLSh0LWwpKTtsPXIrdCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9ZC5zbGljZSgwKTtkLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKCFlW3RdLmNhbmNlbGxlZCl0cnl7ZVt0XS5jYWxsYmFjayhsKX1jYXRjaChlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0sMCl9fSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gZC5wdXNoKHtoYW5kbGU6Kyt1LGNhbGxiYWNrOmUsY2FuY2VsbGVkOiExfSksdX0scz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGQubGVuZ3RoO3QrKylkW3RdLmhhbmRsZT09PWUmJihkW3RdLmNhbmNlbGxlZD0hMCl9fXQuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gby5jYWxsKHIsZSl9LHQuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtzLmFwcGx5KHIsYXJndW1lbnRzKX0sdC5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKGUpe2V8fD1yLGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lPW8sZS5jYW5jZWxBbmltYXRpb25GcmFtZT1zfX0pKSxJZD1zKCgoZSx0KT0+e3QuZXhwb3J0cz1gCQpcdlxmXHIgXHhBMOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFx1MjAyOFx1MjAyOe+7v2B9KSksTGQ9cygoKGUsdCk9Pnt2YXIgbj1CYygpLHI9V2MoKSxpPVV1KCksYT1JZCgpLG89bihgYC5yZXBsYWNlKSxzPVJlZ0V4cChgXltgK2ErYF0rYCksYz1SZWdFeHAoYChefFteYCthK2BdKVtgK2ErYF0rJGApLGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWkocih0KSk7cmV0dXJuIGUmMSYmKG49byhuLHMsYGApKSxlJjImJihuPW8obixjLGAkMWApKSxufX07dC5leHBvcnRzPXtzdGFydDpsKDEpLGVuZDpsKDIpLHRyaW06bCgzKX19KSksUmQ9cygoKGUsdCk9Pnt2YXIgbj1TbCgpLlBST1BFUixyPVBjKCksaT1JZCgpLGE9YOKAi8KF4aCOYDt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZnVuY3Rpb24oKXtyZXR1cm4hIWlbZV0oKXx8YVtlXSgpIT09YXx8biYmaVtlXS5uYW1lIT09ZX0pfX0pKSx6ZD1zKCgoKT0+e3ZhciBlPVVsKCksdD1MZCgpLnRyaW07ZSh7dGFyZ2V0OmBTdHJpbmdgLHByb3RvOiEwLGZvcmNlZDpSZCgpKGB0cmltYCl9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyl9fSl9KSksQmQ9cygoKGUsdCk9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dGhpcy5vaz0hMSx0aGlzLmFscGhhPTEsZS5jaGFyQXQoMCk9PWAjYCYmKGU9ZS5zdWJzdHIoMSw2KSksZT1lLnJlcGxhY2UoLyAvZyxgYCksZT1lLnRvTG93ZXJDYXNlKCk7dmFyIHQ9e2FsaWNlYmx1ZTpgZjBmOGZmYCxhbnRpcXVld2hpdGU6YGZhZWJkN2AsYXF1YTpgMDBmZmZmYCxhcXVhbWFyaW5lOmA3ZmZmZDRgLGF6dXJlOmBmMGZmZmZgLGJlaWdlOmBmNWY1ZGNgLGJpc3F1ZTpgZmZlNGM0YCxibGFjazpgMDAwMDAwYCxibGFuY2hlZGFsbW9uZDpgZmZlYmNkYCxibHVlOmAwMDAwZmZgLGJsdWV2aW9sZXQ6YDhhMmJlMmAsYnJvd246YGE1MmEyYWAsYnVybHl3b29kOmBkZWI4ODdgLGNhZGV0Ymx1ZTpgNWY5ZWEwYCxjaGFydHJldXNlOmA3ZmZmMDBgLGNob2NvbGF0ZTpgZDI2OTFlYCxjb3JhbDpgZmY3ZjUwYCxjb3JuZmxvd2VyYmx1ZTpgNjQ5NWVkYCxjb3Juc2lsazpgZmZmOGRjYCxjcmltc29uOmBkYzE0M2NgLGN5YW46YDAwZmZmZmAsZGFya2JsdWU6YDAwMDA4YmAsZGFya2N5YW46YDAwOGI4YmAsZGFya2dvbGRlbnJvZDpgYjg4NjBiYCxkYXJrZ3JheTpgYTlhOWE5YCxkYXJrZ3JlZW46YDAwNjQwMGAsZGFya2toYWtpOmBiZGI3NmJgLGRhcmttYWdlbnRhOmA4YjAwOGJgLGRhcmtvbGl2ZWdyZWVuOmA1NTZiMmZgLGRhcmtvcmFuZ2U6YGZmOGMwMGAsZGFya29yY2hpZDpgOTkzMmNjYCxkYXJrcmVkOmA4YjAwMDBgLGRhcmtzYWxtb246YGU5OTY3YWAsZGFya3NlYWdyZWVuOmA4ZmJjOGZgLGRhcmtzbGF0ZWJsdWU6YDQ4M2Q4YmAsZGFya3NsYXRlZ3JheTpgMmY0ZjRmYCxkYXJrdHVycXVvaXNlOmAwMGNlZDFgLGRhcmt2aW9sZXQ6YDk0MDBkM2AsZGVlcHBpbms6YGZmMTQ5M2AsZGVlcHNreWJsdWU6YDAwYmZmZmAsZGltZ3JheTpgNjk2OTY5YCxkb2RnZXJibHVlOmAxZTkwZmZgLGZlbGRzcGFyOmBkMTkyNzVgLGZpcmVicmljazpgYjIyMjIyYCxmbG9yYWx3aGl0ZTpgZmZmYWYwYCxmb3Jlc3RncmVlbjpgMjI4YjIyYCxmdWNoc2lhOmBmZjAwZmZgLGdhaW5zYm9ybzpgZGNkY2RjYCxnaG9zdHdoaXRlOmBmOGY4ZmZgLGdvbGQ6YGZmZDcwMGAsZ29sZGVucm9kOmBkYWE1MjBgLGdyYXk6YDgwODA4MGAsZ3JlZW46YDAwODAwMGAsZ3JlZW55ZWxsb3c6YGFkZmYyZmAsaG9uZXlkZXc6YGYwZmZmMGAsaG90cGluazpgZmY2OWI0YCxpbmRpYW5yZWQ6YGNkNWM1Y2AsaW5kaWdvOmA0YjAwODJgLGl2b3J5OmBmZmZmZjBgLGtoYWtpOmBmMGU2OGNgLGxhdmVuZGVyOmBlNmU2ZmFgLGxhdmVuZGVyYmx1c2g6YGZmZjBmNWAsbGF3bmdyZWVuOmA3Y2ZjMDBgLGxlbW9uY2hpZmZvbjpgZmZmYWNkYCxsaWdodGJsdWU6YGFkZDhlNmAsbGlnaHRjb3JhbDpgZjA4MDgwYCxsaWdodGN5YW46YGUwZmZmZmAsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6YGZhZmFkMmAsbGlnaHRncmV5OmBkM2QzZDNgLGxpZ2h0Z3JlZW46YDkwZWU5MGAsbGlnaHRwaW5rOmBmZmI2YzFgLGxpZ2h0c2FsbW9uOmBmZmEwN2FgLGxpZ2h0c2VhZ3JlZW46YDIwYjJhYWAsbGlnaHRza3libHVlOmA4N2NlZmFgLGxpZ2h0c2xhdGVibHVlOmA4NDcwZmZgLGxpZ2h0c2xhdGVncmF5OmA3Nzg4OTlgLGxpZ2h0c3RlZWxibHVlOmBiMGM0ZGVgLGxpZ2h0eWVsbG93OmBmZmZmZTBgLGxpbWU6YDAwZmYwMGAsbGltZWdyZWVuOmAzMmNkMzJgLGxpbmVuOmBmYWYwZTZgLG1hZ2VudGE6YGZmMDBmZmAsbWFyb29uOmA4MDAwMDBgLG1lZGl1bWFxdWFtYXJpbmU6YDY2Y2RhYWAsbWVkaXVtYmx1ZTpgMDAwMGNkYCxtZWRpdW1vcmNoaWQ6YGJhNTVkM2AsbWVkaXVtcHVycGxlOmA5MzcwZDhgLG1lZGl1bXNlYWdyZWVuOmAzY2IzNzFgLG1lZGl1bXNsYXRlYmx1ZTpgN2I2OGVlYCxtZWRpdW1zcHJpbmdncmVlbjpgMDBmYTlhYCxtZWRpdW10dXJxdW9pc2U6YDQ4ZDFjY2AsbWVkaXVtdmlvbGV0cmVkOmBjNzE1ODVgLG1pZG5pZ2h0Ymx1ZTpgMTkxOTcwYCxtaW50Y3JlYW06YGY1ZmZmYWAsbWlzdHlyb3NlOmBmZmU0ZTFgLG1vY2Nhc2luOmBmZmU0YjVgLG5hdmFqb3doaXRlOmBmZmRlYWRgLG5hdnk6YDAwMDA4MGAsb2xkbGFjZTpgZmRmNWU2YCxvbGl2ZTpgODA4MDAwYCxvbGl2ZWRyYWI6YDZiOGUyM2Asb3JhbmdlOmBmZmE1MDBgLG9yYW5nZXJlZDpgZmY0NTAwYCxvcmNoaWQ6YGRhNzBkNmAscGFsZWdvbGRlbnJvZDpgZWVlOGFhYCxwYWxlZ3JlZW46YDk4ZmI5OGAscGFsZXR1cnF1b2lzZTpgYWZlZWVlYCxwYWxldmlvbGV0cmVkOmBkODcwOTNgLHBhcGF5YXdoaXA6YGZmZWZkNWAscGVhY2hwdWZmOmBmZmRhYjlgLHBlcnU6YGNkODUzZmAscGluazpgZmZjMGNiYCxwbHVtOmBkZGEwZGRgLHBvd2RlcmJsdWU6YGIwZTBlNmAscHVycGxlOmA4MDAwODBgLHJlYmVjY2FwdXJwbGU6YDY2MzM5OWAscmVkOmBmZjAwMDBgLHJvc3licm93bjpgYmM4ZjhmYCxyb3lhbGJsdWU6YDQxNjllMWAsc2FkZGxlYnJvd246YDhiNDUxM2Asc2FsbW9uOmBmYTgwNzJgLHNhbmR5YnJvd246YGY0YTQ2MGAsc2VhZ3JlZW46YDJlOGI1N2Asc2Vhc2hlbGw6YGZmZjVlZWAsc2llbm5hOmBhMDUyMmRgLHNpbHZlcjpgYzBjMGMwYCxza3libHVlOmA4N2NlZWJgLHNsYXRlYmx1ZTpgNmE1YWNkYCxzbGF0ZWdyYXk6YDcwODA5MGAsc25vdzpgZmZmYWZhYCxzcHJpbmdncmVlbjpgMDBmZjdmYCxzdGVlbGJsdWU6YDQ2ODJiNGAsdGFuOmBkMmI0OGNgLHRlYWw6YDAwODA4MGAsdGhpc3RsZTpgZDhiZmQ4YCx0b21hdG86YGZmNjM0N2AsdHVycXVvaXNlOmA0MGUwZDBgLHZpb2xldDpgZWU4MmVlYCx2aW9sZXRyZWQ6YGQwMjA5MGAsd2hlYXQ6YGY1ZGViM2Asd2hpdGU6YGZmZmZmZmAsd2hpdGVzbW9rZTpgZjVmNWY1YCx5ZWxsb3c6YGZmZmYwMGAseWVsbG93Z3JlZW46YDlhY2QzMmB9O2U9dFtlXXx8ZTtmb3IodmFyIG49W3tyZTovXnJnYmFcKChcZHsxLDN9KSxccyooXGR7MSwzfSksXHMqKFxkezEsM30pLFxzKigoPzpcZD9cLik/XGQpXCkkLyxleGFtcGxlOltgcmdiYSgxMjMsIDIzNCwgNDUsIDAuOClgLGByZ2JhKDI1NSwyMzQsMjQ1LDEuMClgXSxwcm9jZXNzOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdKSxwYXJzZUludChlWzJdKSxwYXJzZUludChlWzNdKSxwYXJzZUZsb2F0KGVbNF0pXX19LHtyZTovXnJnYlwoKFxkezEsM30pLFxzKihcZHsxLDN9KSxccyooXGR7MSwzfSlcKSQvLGV4YW1wbGU6W2ByZ2IoMTIzLCAyMzQsIDQ1KWAsYHJnYigyNTUsMjM0LDI0NSlgXSxwcm9jZXNzOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdKSxwYXJzZUludChlWzJdKSxwYXJzZUludChlWzNdKV19fSx7cmU6L14oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxleGFtcGxlOltgIzAwZmYwMGAsYDMzNjY5OWBdLHByb2Nlc3M6ZnVuY3Rpb24oZSl7cmV0dXJuW3BhcnNlSW50KGVbMV0sMTYpLHBhcnNlSW50KGVbMl0sMTYpLHBhcnNlSW50KGVbM10sMTYpXX19LHtyZTovXihbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGV4YW1wbGU6W2AjZmIwYCxgZjBmYF0scHJvY2VzczpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXStlWzFdLDE2KSxwYXJzZUludChlWzJdK2VbMl0sMTYpLHBhcnNlSW50KGVbM10rZVszXSwxNildfX1dLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXS5yZSxhPW5bcl0ucHJvY2VzcyxvPWkuZXhlYyhlKTtpZihvKXt2YXIgcz1hKG8pO3RoaXMucj1zWzBdLHRoaXMuZz1zWzFdLHRoaXMuYj1zWzJdLHMubGVuZ3RoPjMmJih0aGlzLmFscGhhPXNbM10pLHRoaXMub2s9ITB9fXRoaXMucj10aGlzLnI8MHx8aXNOYU4odGhpcy5yKT8wOnRoaXMucj4yNTU/MjU1OnRoaXMucix0aGlzLmc9dGhpcy5nPDB8fGlzTmFOKHRoaXMuZyk/MDp0aGlzLmc+MjU1PzI1NTp0aGlzLmcsdGhpcy5iPXRoaXMuYjwwfHxpc05hTih0aGlzLmIpPzA6dGhpcy5iPjI1NT8yNTU6dGhpcy5iLHRoaXMuYWxwaGE9dGhpcy5hbHBoYTwwPzA6dGhpcy5hbHBoYT4xfHxpc05hTih0aGlzLmFscGhhKT8xOnRoaXMuYWxwaGEsdGhpcy50b1JHQj1mdW5jdGlvbigpe3JldHVybmByZ2IoYCt0aGlzLnIrYCwgYCt0aGlzLmcrYCwgYCt0aGlzLmIrYClgfSx0aGlzLnRvUkdCQT1mdW5jdGlvbigpe3JldHVybmByZ2JhKGArdGhpcy5yK2AsIGArdGhpcy5nK2AsIGArdGhpcy5iK2AsIGArdGhpcy5hbHBoYStgKWB9LHRoaXMudG9IZXg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnIudG9TdHJpbmcoMTYpLHQ9dGhpcy5nLnRvU3RyaW5nKDE2KSxuPXRoaXMuYi50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPT0xJiYoZT1gMGArZSksdC5sZW5ndGg9PTEmJih0PWAwYCt0KSxuLmxlbmd0aD09MSYmKG49YDBgK24pLGAjYCtlK3Qrbn0sdGhpcy5nZXRIZWxwWE1MPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHI9MDtyPG4ubGVuZ3RoO3IrKylmb3IodmFyIGk9bltyXS5leGFtcGxlLGE9MDthPGkubGVuZ3RoO2ErKyllW2UubGVuZ3RoXT1pW2FdO2Zvcih2YXIgbyBpbiB0KWVbZS5sZW5ndGhdPW87dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgdWxgKTtzLnNldEF0dHJpYnV0ZShgaWRgLGByZ2Jjb2xvci1leGFtcGxlc2ApO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRyeXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaWApLGw9bmV3IFJHQkNvbG9yKGVbcl0pLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgZGl2YCk7dS5zdHlsZS5jc3NUZXh0PWBtYXJnaW46IDNweDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJhY2tncm91bmQ6YCtsLnRvSGV4KCkrYDsgY29sb3I6YCtsLnRvSGV4KCksdS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgdGVzdGApKTt2YXIgZD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgIGArZVtyXStgIC0+IGArbC50b1JHQigpK2AgLT4gYCtsLnRvSGV4KCkpO2MuYXBwZW5kQ2hpbGQodSksYy5hcHBlbmRDaGlsZChkKSxzLmFwcGVuZENoaWxkKGMpfWNhdGNoe31yZXR1cm4gc319fSkpLFZkPXMoKCgpPT57dmFyIGU9VWwoKSx0PXN1KCksbj1GbCgpLmluZGV4T2Yscj1BZCgpLGk9dChbXS5pbmRleE9mKSxhPSEhaSYmMS9pKFsxXSwxLC0wKTwwO2Uoe3RhcmdldDpgQXJyYXlgLHByb3RvOiEwLGZvcmNlZDphfHwhcihgaW5kZXhPZmApfSx7aW5kZXhPZjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gYT9pKHRoaXMsZSx0KXx8MDpuKHRoaXMsZSx0KX19KX0pKSxIZD1zKCgoKT0+e3ZhciBlPVVsKCksdD1CYygpLG49bGQoKSxyPVdjKCksaT1VdSgpLGE9dWQoKSxvPXQoYGAuaW5kZXhPZik7ZSh7dGFyZ2V0OmBTdHJpbmdgLHByb3RvOiEwLGZvcmNlZDohYShgaW5jbHVkZXNgKX0se2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiEhfm8oaShyKHRoaXMpKSxpKG4oZSkpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0pKSxVZD1zKCgoZSx0KT0+e3ZhciBuPVZjKCk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUpPT09YEFycmF5YH19KSksV2Q9cygoKCk9Pnt2YXIgZT1VbCgpLHQ9QmMoKSxuPVVkKCkscj10KFtdLnJldmVyc2UpLGk9WzEsMl07ZSh7dGFyZ2V0OmBBcnJheWAscHJvdG86ITAsZm9yY2VkOlN0cmluZyhpKT09PVN0cmluZyhpLnJldmVyc2UoKSl9LHtyZXZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcykmJih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aCkscih0aGlzKX19KX0pKTtmdW5jdGlvbiBHZChlLHQpe2lmKHR5cGVvZiB0IT1gZnVuY3Rpb25gJiZ0IT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoYENsYXNzIGV4dGVuZHMgdmFsdWUgYCtTdHJpbmcodCkrYCBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsYCk7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX10ZihlLHQpLGUucHJvdG90eXBlPXQ9PT1udWxsP09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX1mdW5jdGlvbiBLZChlKXt2YXIgdD1gYDtBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO2lmKHIudHlwZT09PVguQ0xPU0VfUEFUSCl0Kz1gemA7ZWxzZSBpZihyLnR5cGU9PT1YLkhPUklaX0xJTkVfVE8pdCs9KHIucmVsYXRpdmU/YGhgOmBIYCkrci54O2Vsc2UgaWYoci50eXBlPT09WC5WRVJUX0xJTkVfVE8pdCs9KHIucmVsYXRpdmU/YHZgOmBWYCkrci55O2Vsc2UgaWYoci50eXBlPT09WC5NT1ZFX1RPKXQrPShyLnJlbGF0aXZlP2BtYDpgTWApK3IueCtgIGArci55O2Vsc2UgaWYoci50eXBlPT09WC5MSU5FX1RPKXQrPShyLnJlbGF0aXZlP2BsYDpgTGApK3IueCtgIGArci55O2Vsc2UgaWYoci50eXBlPT09WC5DVVJWRV9UTyl0Kz0oci5yZWxhdGl2ZT9gY2A6YENgKStyLngxK2AgYCtyLnkxK2AgYCtyLngyK2AgYCtyLnkyK2AgYCtyLngrYCBgK3IueTtlbHNlIGlmKHIudHlwZT09PVguU01PT1RIX0NVUlZFX1RPKXQrPShyLnJlbGF0aXZlP2BzYDpgU2ApK3IueDIrYCBgK3IueTIrYCBgK3IueCtgIGArci55O2Vsc2UgaWYoci50eXBlPT09WC5RVUFEX1RPKXQrPShyLnJlbGF0aXZlP2BxYDpgUWApK3IueDErYCBgK3IueTErYCBgK3IueCtgIGArci55O2Vsc2UgaWYoci50eXBlPT09WC5TTU9PVEhfUVVBRF9UTyl0Kz0oci5yZWxhdGl2ZT9gdGA6YFRgKStyLngrYCBgK3IueTtlbHNle2lmKHIudHlwZSE9PVguQVJDKXRocm93IEVycm9yKGBVbmV4cGVjdGVkIGNvbW1hbmQgdHlwZSAiYCtyLnR5cGUrYCIgYXQgaW5kZXggYCtuK2AuYCk7dCs9KHIucmVsYXRpdmU/YGFgOmBBYCkrci5yWCtgIGArci5yWStgIGArci54Um90K2AgYCsgK3IubEFyY0ZsYWcrYCBgKyArci5zd2VlcEZsYWcrYCBgK3IueCtgIGArci55fX1yZXR1cm4gdH1mdW5jdGlvbiBxZChlLHQpe3ZhciBuPWVbMF0scj1lWzFdO3JldHVybltuKk1hdGguY29zKHQpLXIqTWF0aC5zaW4odCksbipNYXRoLnNpbih0KStyKk1hdGguY29zKHQpXX1mdW5jdGlvbiBKZCgpe2Zvcih2YXIgZT1bLi4uYXJndW1lbnRzXSx0PTA7dDxlLmxlbmd0aDt0KyspaWYodHlwZW9mIGVbdF0hPWBudW1iZXJgKXRocm93IEVycm9yKGBhc3NlcnROdW1iZXJzIGFyZ3VtZW50c1tgK3QrYF0gaXMgbm90IGEgbnVtYmVyLiBgK3R5cGVvZiBlW3RdK2AgPT0gdHlwZW9mIGArZVt0XSk7cmV0dXJuITB9ZnVuY3Rpb24gWWQoZSx0LG4pe2UubEFyY0ZsYWc9ZS5sQXJjRmxhZz09PTA/MDoxLGUuc3dlZXBGbGFnPWUuc3dlZXBGbGFnPT09MD8wOjE7dmFyIHI9ZS5yWCxpPWUuclksYT1lLngsbz1lLnk7cj1NYXRoLmFicyhlLnJYKSxpPU1hdGguYWJzKGUuclkpO3ZhciBzPXFkKFsodC1hKS8yLChuLW8pLzJdLC1lLnhSb3QvMTgwKm5mKSxjPXNbMF0sbD1zWzFdLHU9YyoqMi9yKioyK2wqKjIvaSoqMjsxPHUmJihyKj1NYXRoLnNxcnQodSksaSo9TWF0aC5zcXJ0KHUpKSxlLnJYPXIsZS5yWT1pO3ZhciBkPXIqKjIqbCoqMitpKioyKmMqKjIsZj0oZS5sQXJjRmxhZz09PWUuc3dlZXBGbGFnPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLChyKioyKmkqKjItZCkvZCkpLHA9cipsL2kqZixtPS1pKmMvcipmLGg9cWQoW3AsbV0sZS54Um90LzE4MCpuZik7ZS5jWD1oWzBdKyh0K2EpLzIsZS5jWT1oWzFdKyhuK28pLzIsZS5waGkxPU1hdGguYXRhbjIoKGwtbSkvaSwoYy1wKS9yKSxlLnBoaTI9TWF0aC5hdGFuMigoLWwtbSkvaSwoLWMtcCkvciksZS5zd2VlcEZsYWc9PT0wJiZlLnBoaTI+ZS5waGkxJiYoZS5waGkyLT0yKm5mKSxlLnN3ZWVwRmxhZz09PTEmJmUucGhpMjxlLnBoaTEmJihlLnBoaTIrPTIqbmYpLGUucGhpMSo9MTgwL25mLGUucGhpMio9MTgwL25mfWZ1bmN0aW9uIFhkKGUsdCxuKXtKZChlLHQsbik7dmFyIHI9ZSplK3QqdC1uKm47aWYoMD5yKXJldHVybltdO2lmKHI9PT0wKXJldHVybltbZSpuLyhlKmUrdCp0KSx0Km4vKGUqZSt0KnQpXV07dmFyIGk9TWF0aC5zcXJ0KHIpO3JldHVybltbKGUqbit0KmkpLyhlKmUrdCp0KSwodCpuLWUqaSkvKGUqZSt0KnQpXSxbKGUqbi10KmkpLyhlKmUrdCp0KSwodCpuK2UqaSkvKGUqZSt0KnQpXV19ZnVuY3Rpb24gWmQoZSx0LG4pe3JldHVybigxLW4pKmUrbip0fWZ1bmN0aW9uIFFkKGUsdCxuLHIpe3JldHVybiBlK01hdGguY29zKHIvMTgwKm5mKSp0K01hdGguc2luKHIvMTgwKm5mKSpufWZ1bmN0aW9uICRkKGUsdCxuLHIpe3ZhciBpPTFlLTYsYT10LWUsbz1uLXQscz0zKmErMyooci1uKS02Km8sYz02KihvLWEpLGw9MyphO3JldHVybiBNYXRoLmFicyhzKTxpP1stbC9jXTpmdW5jdGlvbihlLHQsbil7bj09PXZvaWQgMCYmKG49MWUtNik7dmFyIHI9ZSplLzQtdDtpZihyPC1uKXJldHVybltdO2lmKHI8PW4pcmV0dXJuWy1lLzJdO3ZhciBpPU1hdGguc3FydChyKTtyZXR1cm5bLWUvMi1pLC1lLzIraV19KGMvcyxsL3MsaSl9ZnVuY3Rpb24gZWYoZSx0LG4scixpKXt2YXIgYT0xLWk7cmV0dXJuIGUqKGEqYSphKSt0KigzKmEqYSppKStuKigzKmEqaSppKStyKihpKmkqaSl9dmFyIHRmLG5mLHJmLGFmLG9mLHNmLGNmLGxmLHVmLFgsZGYsZmY9bygoKCk9Pnt0Zj1mdW5jdGlvbihlLHQpe3JldHVybih0Zj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxuZj1NYXRoLlBJLGFmPU1hdGguUEkvMTgwLChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGkoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5yZWxhdGl2ZSYmPShlLngxIT09dm9pZCAwJiYoZS54MSs9dCksZS55MSE9PXZvaWQgMCYmKGUueTErPW4pLGUueDIhPT12b2lkIDAmJihlLngyKz10KSxlLnkyIT09dm9pZCAwJiYoZS55Mis9biksZS54IT09dm9pZCAwJiYoZS54Kz10KSxlLnkhPT12b2lkIDAmJihlLnkrPW4pLCExKSxlfSkpfWZ1bmN0aW9uIG4oKXt2YXIgZT1OYU4sdD1OYU4sbj1OYU4scj1OYU47cmV0dXJuIGkoKGZ1bmN0aW9uKGksYSxvKXtyZXR1cm4gaS50eXBlJlguU01PT1RIX0NVUlZFX1RPJiYoaS50eXBlPVguQ1VSVkVfVE8sZT1pc05hTihlKT9hOmUsdD1pc05hTih0KT9vOnQsaS54MT1pLnJlbGF0aXZlP2EtZToyKmEtZSxpLnkxPWkucmVsYXRpdmU/by10OjIqby10KSxpLnR5cGUmWC5DVVJWRV9UTz8oZT1pLnJlbGF0aXZlP2EraS54MjppLngyLHQ9aS5yZWxhdGl2ZT9vK2kueTI6aS55Mik6KGU9TmFOLHQ9TmFOKSxpLnR5cGUmWC5TTU9PVEhfUVVBRF9UTyYmKGkudHlwZT1YLlFVQURfVE8sbj1pc05hTihuKT9hOm4scj1pc05hTihyKT9vOnIsaS54MT1pLnJlbGF0aXZlP2EtbjoyKmEtbixpLnkxPWkucmVsYXRpdmU/by1yOjIqby1yKSxpLnR5cGUmWC5RVUFEX1RPPyhuPWkucmVsYXRpdmU/YStpLngxOmkueDEscj1pLnJlbGF0aXZlP28raS55MTppLnkxKToobj1OYU4scj1OYU4pLGl9KSl9ZnVuY3Rpb24gcigpe3ZhciBlPU5hTix0PU5hTjtyZXR1cm4gaSgoZnVuY3Rpb24obixyLGkpe2lmKG4udHlwZSZYLlNNT09USF9RVUFEX1RPJiYobi50eXBlPVguUVVBRF9UTyxlPWlzTmFOKGUpP3I6ZSx0PWlzTmFOKHQpP2k6dCxuLngxPW4ucmVsYXRpdmU/ci1lOjIqci1lLG4ueTE9bi5yZWxhdGl2ZT9pLXQ6MippLXQpLG4udHlwZSZYLlFVQURfVE8pe2U9bi5yZWxhdGl2ZT9yK24ueDE6bi54MSx0PW4ucmVsYXRpdmU/aStuLnkxOm4ueTE7dmFyIGE9bi54MSxvPW4ueTE7bi50eXBlPVguQ1VSVkVfVE8sbi54MT0oKG4ucmVsYXRpdmU/MDpyKSsyKmEpLzMsbi55MT0oKG4ucmVsYXRpdmU/MDppKSsyKm8pLzMsbi54Mj0obi54KzIqYSkvMyxuLnkyPShuLnkrMipvKS8zfWVsc2UgZT1OYU4sdD1OYU47cmV0dXJuIG59KSl9ZnVuY3Rpb24gaShlKXt2YXIgdD0wLG49MCxyPU5hTixpPU5hTjtyZXR1cm4gZnVuY3Rpb24oYSl7aWYoaXNOYU4ocikmJiEoYS50eXBlJlguTU9WRV9UTykpdGhyb3cgRXJyb3IoYHBhdGggbXVzdCBzdGFydCB3aXRoIG1vdmV0b2ApO3ZhciBvPWUoYSx0LG4scixpKTtyZXR1cm4gYS50eXBlJlguQ0xPU0VfUEFUSCYmKHQ9cixuPWkpLGEueCE9PXZvaWQgMCYmKHQ9YS5yZWxhdGl2ZT90K2EueDphLngpLGEueSE9PXZvaWQgMCYmKG49YS5yZWxhdGl2ZT9uK2EueTphLnkpLGEudHlwZSZYLk1PVkVfVE8mJihyPXQsaT1uKSxvfX1mdW5jdGlvbiBhKGUsdCxuLHIsYSxvKXtyZXR1cm4gSmQoZSx0LG4scixhLG8pLGkoKGZ1bmN0aW9uKGkscyxjLGwpe3ZhciB1PWkueDEsZD1pLngyLGY9aS5yZWxhdGl2ZSYmIWlzTmFOKGwpLHA9aS54PT09dm9pZCAwP2Y/MDpzOmkueCxtPWkueT09PXZvaWQgMD9mPzA6YzppLnk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSplfWkudHlwZSZYLkhPUklaX0xJTkVfVE8mJnQhPT0wJiYoaS50eXBlPVguTElORV9UTyxpLnk9aS5yZWxhdGl2ZT8wOmMpLGkudHlwZSZYLlZFUlRfTElORV9UTyYmbiE9PTAmJihpLnR5cGU9WC5MSU5FX1RPLGkueD1pLnJlbGF0aXZlPzA6cyksaS54IT09dm9pZCAwJiYoaS54PWkueCplK20qbisoZj8wOmEpKSxpLnkhPT12b2lkIDAmJihpLnk9cCp0K2kueSpyKyhmPzA6bykpLGkueDEhPT12b2lkIDAmJihpLngxPWkueDEqZStpLnkxKm4rKGY/MDphKSksaS55MSE9PXZvaWQgMCYmKGkueTE9dSp0K2kueTEqcisoZj8wOm8pKSxpLngyIT09dm9pZCAwJiYoaS54Mj1pLngyKmUraS55MipuKyhmPzA6YSkpLGkueTIhPT12b2lkIDAmJihpLnkyPWQqdCtpLnkyKnIrKGY/MDpvKSk7dmFyIGc9ZSpyLXQqbjtpZihpLnhSb3QhPT12b2lkIDAmJihlIT09MXx8dCE9PTB8fG4hPT0wfHxyIT09MSkpaWYoZz09PTApZGVsZXRlIGkuclgsZGVsZXRlIGkuclksZGVsZXRlIGkueFJvdCxkZWxldGUgaS5sQXJjRmxhZyxkZWxldGUgaS5zd2VlcEZsYWcsaS50eXBlPVguTElORV9UTztlbHNle3ZhciBfPWkueFJvdCpNYXRoLlBJLzE4MCx2PU1hdGguc2luKF8pLHk9TWF0aC5jb3MoXyksYj0xL2goaS5yWCkseD0xL2goaS5yWSksUz1oKHkpKmIraCh2KSp4LEM9Mip2KnkqKGIteCksdz1oKHYpKmIraCh5KSp4LFQ9UypyKnItQyp0KnIrdyp0KnQsRT1DKihlKnIrdCpuKS0yKihTKm4qcit3KmUqdCksRD1TKm4qbi1DKmUqbit3KmUqZSxPPShNYXRoLmF0YW4yKEUsVC1EKStNYXRoLlBJKSVNYXRoLlBJLzIsaz1NYXRoLnNpbihPKSxBPU1hdGguY29zKE8pO2kuclg9TWF0aC5hYnMoZykvTWF0aC5zcXJ0KFQqaChBKStFKmsqQStEKmgoaykpLGkuclk9TWF0aC5hYnMoZykvTWF0aC5zcXJ0KFQqaChrKS1FKmsqQStEKmgoQSkpLGkueFJvdD0xODAqTy9NYXRoLlBJfXJldHVybiBpLnN3ZWVwRmxhZyE9PXZvaWQgMCYmMD5nJiYoaS5zd2VlcEZsYWc9KyFpLnN3ZWVwRmxhZyksaX0pKX1mdW5jdGlvbiBvKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gdH19ZS5ST1VORD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBNYXRoLnJvdW5kKHQqZSkvZX1yZXR1cm4gZT09PXZvaWQgMCYmKGU9MHg5MTg0ZTcyYTAwMCksSmQoZSksZnVuY3Rpb24oZSl7cmV0dXJuIGUueDEhPT12b2lkIDAmJihlLngxPXQoZS54MSkpLGUueTEhPT12b2lkIDAmJihlLnkxPXQoZS55MSkpLGUueDIhPT12b2lkIDAmJihlLngyPXQoZS54MikpLGUueTIhPT12b2lkIDAmJihlLnkyPXQoZS55MikpLGUueCE9PXZvaWQgMCYmKGUueD10KGUueCkpLGUueSE9PXZvaWQgMCYmKGUueT10KGUueSkpLGUuclghPT12b2lkIDAmJihlLnJYPXQoZS5yWCkpLGUuclkhPT12b2lkIDAmJihlLnJZPXQoZS5yWSkpLGV9fSxlLlRPX0FCUz10LGUuVE9fUkVMPWZ1bmN0aW9uKCl7cmV0dXJuIGkoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5yZWxhdGl2ZXx8PShlLngxIT09dm9pZCAwJiYoZS54MS09dCksZS55MSE9PXZvaWQgMCYmKGUueTEtPW4pLGUueDIhPT12b2lkIDAmJihlLngyLT10KSxlLnkyIT09dm9pZCAwJiYoZS55Mi09biksZS54IT09dm9pZCAwJiYoZS54LT10KSxlLnkhPT12b2lkIDAmJihlLnktPW4pLCEwKSxlfSkpfSxlLk5PUk1BTElaRV9IVlo9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPT09dm9pZCAwJiYoZT0hMCksdD09PXZvaWQgMCYmKHQ9ITApLG49PT12b2lkIDAmJihuPSEwKSxpKChmdW5jdGlvbihyLGksYSxvLHMpe2lmKGlzTmFOKG8pJiYhKHIudHlwZSZYLk1PVkVfVE8pKXRocm93IEVycm9yKGBwYXRoIG11c3Qgc3RhcnQgd2l0aCBtb3ZldG9gKTtyZXR1cm4gdCYmci50eXBlJlguSE9SSVpfTElORV9UTyYmKHIudHlwZT1YLkxJTkVfVE8sci55PXIucmVsYXRpdmU/MDphKSxuJiZyLnR5cGUmWC5WRVJUX0xJTkVfVE8mJihyLnR5cGU9WC5MSU5FX1RPLHIueD1yLnJlbGF0aXZlPzA6aSksZSYmci50eXBlJlguQ0xPU0VfUEFUSCYmKHIudHlwZT1YLkxJTkVfVE8sci54PXIucmVsYXRpdmU/by1pOm8sci55PXIucmVsYXRpdmU/cy1hOnMpLHIudHlwZSZYLkFSQyYmKHIuclg9PT0wfHxyLnJZPT09MCkmJihyLnR5cGU9WC5MSU5FX1RPLGRlbGV0ZSByLnJYLGRlbGV0ZSByLnJZLGRlbGV0ZSByLnhSb3QsZGVsZXRlIHIubEFyY0ZsYWcsZGVsZXRlIHIuc3dlZXBGbGFnKSxyfSkpfSxlLk5PUk1BTElaRV9TVD1uLGUuUVRfVE9fQz1yLGUuSU5GTz1pLGUuU0FOSVRJWkU9ZnVuY3Rpb24oZSl7ZT09PXZvaWQgMCYmKGU9MCksSmQoZSk7dmFyIHQ9TmFOLG49TmFOLHI9TmFOLGE9TmFOO3JldHVybiBpKChmdW5jdGlvbihpLG8scyxjLGwpe3ZhciB1PU1hdGguYWJzLGQ9ITEsZj0wLHA9MDtpZihpLnR5cGUmWC5TTU9PVEhfQ1VSVkVfVE8mJihmPWlzTmFOKHQpPzA6by10LHA9aXNOYU4obik/MDpzLW4pLGkudHlwZSYoWC5DVVJWRV9UT3xYLlNNT09USF9DVVJWRV9UTyk/KHQ9aS5yZWxhdGl2ZT9vK2kueDI6aS54MixuPWkucmVsYXRpdmU/cytpLnkyOmkueTIpOih0PU5hTixuPU5hTiksaS50eXBlJlguU01PT1RIX1FVQURfVE8/KHI9aXNOYU4ocik/bzoyKm8tcixhPWlzTmFOKGEpP3M6MipzLWEpOmkudHlwZSZYLlFVQURfVE8/KHI9aS5yZWxhdGl2ZT9vK2kueDE6aS54MSxhPWkucmVsYXRpdmU/cytpLnkxOmkueTIpOihyPU5hTixhPU5hTiksaS50eXBlJlguTElORV9DT01NQU5EU3x8aS50eXBlJlguQVJDJiYoaS5yWD09PTB8fGkuclk9PT0wfHwhaS5sQXJjRmxhZyl8fGkudHlwZSZYLkNVUlZFX1RPfHxpLnR5cGUmWC5TTU9PVEhfQ1VSVkVfVE98fGkudHlwZSZYLlFVQURfVE98fGkudHlwZSZYLlNNT09USF9RVUFEX1RPKXt2YXIgbT1pLng9PT12b2lkIDA/MDppLnJlbGF0aXZlP2kueDppLngtbyxoPWkueT09PXZvaWQgMD8wOmkucmVsYXRpdmU/aS55OmkueS1zO2Y9aXNOYU4ocik/aS54MT09PXZvaWQgMD9mOmkucmVsYXRpdmU/aS54OmkueDEtbzpyLW8scD1pc05hTihhKT9pLnkxPT09dm9pZCAwP3A6aS5yZWxhdGl2ZT9pLnk6aS55MS1zOmEtczt2YXIgZz1pLngyPT09dm9pZCAwPzA6aS5yZWxhdGl2ZT9pLng6aS54Mi1vLF89aS55Mj09PXZvaWQgMD8wOmkucmVsYXRpdmU/aS55OmkueTItczt1KG0pPD1lJiZ1KGgpPD1lJiZ1KGYpPD1lJiZ1KHApPD1lJiZ1KGcpPD1lJiZ1KF8pPD1lJiYoZD0hMCl9cmV0dXJuIGkudHlwZSZYLkNMT1NFX1BBVEgmJnUoby1jKTw9ZSYmdShzLWwpPD1lJiYoZD0hMCksZD9bXTppfSkpfSxlLk1BVFJJWD1hLGUuUk9UQVRFPWZ1bmN0aW9uKGUsdCxuKXt0PT09dm9pZCAwJiYodD0wKSxuPT09dm9pZCAwJiYobj0wKSxKZChlLHQsbik7dmFyIHI9TWF0aC5zaW4oZSksaT1NYXRoLmNvcyhlKTtyZXR1cm4gYShpLHIsLXIsaSx0LXQqaStuKnIsbi10KnItbippKX0sZS5UUkFOU0xBVEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9MCksSmQoZSx0KSxhKDEsMCwwLDEsZSx0KX0sZS5TQ0FMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD1lKSxKZChlLHQpLGEoZSwwLDAsdCwwLDApfSxlLlNLRVdfWD1mdW5jdGlvbihlKXtyZXR1cm4gSmQoZSksYSgxLDAsTWF0aC5hdGFuKGUpLDEsMCwwKX0sZS5TS0VXX1k9ZnVuY3Rpb24oZSl7cmV0dXJuIEpkKGUpLGEoMSxNYXRoLmF0YW4oZSksMCwxLDAsMCl9LGUuWF9BWElTX1NZTU1FVFJZPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSxKZChlKSxhKC0xLDAsMCwxLGUsMCl9LGUuWV9BWElTX1NZTU1FVFJZPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSxKZChlKSxhKDEsMCwwLC0xLDAsZSl9LGUuQV9UT19DPWZ1bmN0aW9uKCl7cmV0dXJuIGkoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWC5BUkM9PT1lLnR5cGU/ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksYSxvO2UuY1h8fFlkKGUsdCxuKTtmb3IodmFyIHM9TWF0aC5taW4oZS5waGkxLGUucGhpMiksYz1NYXRoLm1heChlLnBoaTEsZS5waGkyKS1zLGw9TWF0aC5jZWlsKGMvOTApLHU9QXJyYXkobCksZD10LGY9bixwPTA7cDxsO3ArKyl7dmFyIG09WmQoZS5waGkxLGUucGhpMixwL2wpLGg9WmQoZS5waGkxLGUucGhpMiwocCsxKS9sKSxnPWgtbSxfPTQvMypNYXRoLnRhbihnKmFmLzQpLHY9W01hdGguY29zKG0qYWYpLV8qTWF0aC5zaW4obSphZiksTWF0aC5zaW4obSphZikrXypNYXRoLmNvcyhtKmFmKV0seT12WzBdLGI9dlsxXSx4PVtNYXRoLmNvcyhoKmFmKSxNYXRoLnNpbihoKmFmKV0sUz14WzBdLEM9eFsxXSx3PVtTK18qTWF0aC5zaW4oaCphZiksQy1fKk1hdGguY29zKGgqYWYpXSxUPXdbMF0sRT13WzFdO3VbcF09e3JlbGF0aXZlOmUucmVsYXRpdmUsdHlwZTpYLkNVUlZFX1RPfTt2YXIgRD1mdW5jdGlvbih0LG4pe3ZhciByPXFkKFt0KmUuclgsbiplLnJZXSxlLnhSb3QpLGk9clswXSxhPXJbMV07cmV0dXJuW2UuY1graSxlLmNZK2FdfTtyPUQoeSxiKSx1W3BdLngxPXJbMF0sdVtwXS55MT1yWzFdLGk9RChULEUpLHVbcF0ueDI9aVswXSx1W3BdLnkyPWlbMV0sYT1EKFMsQyksdVtwXS54PWFbMF0sdVtwXS55PWFbMV0sZS5yZWxhdGl2ZSYmKHVbcF0ueDEtPWQsdVtwXS55MS09Zix1W3BdLngyLT1kLHVbcF0ueTItPWYsdVtwXS54LT1kLHVbcF0ueS09ZiksZD0obz1bdVtwXS54LHVbcF0ueV0pWzBdLGY9b1sxXX1yZXR1cm4gdX0oZSxlLnJlbGF0aXZlPzA6dCxlLnJlbGF0aXZlPzA6bik6ZX0pKX0sZS5BTk5PVEFURV9BUkNTPWZ1bmN0aW9uKCl7cmV0dXJuIGkoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5yZWxhdGl2ZSYmKHQ9MCxuPTApLFguQVJDPT09ZS50eXBlJiZZZChlLHQsbiksZX0pKX0sZS5DTE9ORT1vLGUuQ0FMQ1VMQVRFX0JPVU5EUz1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gdH0sYT10KCksbz1yKCkscz1uKCksYz1pKChmdW5jdGlvbih0LG4scil7dmFyIGk9cyhvKGEoZSh0KSkpKTtmdW5jdGlvbiBsKGUpe2U+Yy5tYXhYJiYoYy5tYXhYPWUpLGU8Yy5taW5YJiYoYy5taW5YPWUpfWZ1bmN0aW9uIHUoZSl7ZT5jLm1heFkmJihjLm1heFk9ZSksZTxjLm1pblkmJihjLm1pblk9ZSl9aWYoaS50eXBlJlguRFJBV0lOR19DT01NQU5EUyYmKGwobiksdShyKSksaS50eXBlJlguSE9SSVpfTElORV9UTyYmbChpLngpLGkudHlwZSZYLlZFUlRfTElORV9UTyYmdShpLnkpLGkudHlwZSZYLkxJTkVfVE8mJihsKGkueCksdShpLnkpKSxpLnR5cGUmWC5DVVJWRV9UTyl7bChpLngpLHUoaS55KTtmb3IodmFyIGQ9MCxmPSRkKG4saS54MSxpLngyLGkueCk7ZDxmLmxlbmd0aDtkKyspMDwoTz1mW2RdKSYmMT5PJiZsKGVmKG4saS54MSxpLngyLGkueCxPKSk7Zm9yKHZhciBwPTAsbT0kZChyLGkueTEsaS55MixpLnkpO3A8bS5sZW5ndGg7cCsrKTA8KE89bVtwXSkmJjE+TyYmdShlZihyLGkueTEsaS55MixpLnksTykpfWlmKGkudHlwZSZYLkFSQyl7bChpLngpLHUoaS55KSxZZChpLG4scik7Zm9yKHZhciBoPWkueFJvdC8xODAqTWF0aC5QSSxnPU1hdGguY29zKGgpKmkuclgsXz1NYXRoLnNpbihoKSppLnJYLHY9LU1hdGguc2luKGgpKmkuclkseT1NYXRoLmNvcyhoKSppLnJZLGI9aS5waGkxPGkucGhpMj9baS5waGkxLGkucGhpMl06LTE4MD5pLnBoaTI/W2kucGhpMiszNjAsaS5waGkxKzM2MF06W2kucGhpMixpLnBoaTFdLHg9YlswXSxTPWJbMV0sQz1mdW5jdGlvbihlKXt2YXIgdD1lWzBdLG49ZVsxXSxyPTE4MCpNYXRoLmF0YW4yKG4sdCkvTWF0aC5QSTtyZXR1cm4gcjx4P3IrMzYwOnJ9LHc9MCxUPVhkKHYsLWcsMCkubWFwKEMpO3c8VC5sZW5ndGg7dysrKShPPVRbd10pPngmJk88UyYmbChRZChpLmNYLGcsdixPKSk7Zm9yKHZhciBFPTAsRD1YZCh5LC1fLDApLm1hcChDKTtFPEQubGVuZ3RoO0UrKyl7dmFyIE87KE89RFtFXSk+eCYmTzxTJiZ1KFFkKGkuY1ksXyx5LE8pKX19cmV0dXJuIHR9KSk7cmV0dXJuIGMubWluWD0xLzAsYy5tYXhYPS0xLzAsYy5taW5ZPTEvMCxjLm1heFk9LTEvMCxjfX0pKHJmfHw9e30pLHNmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucm91bmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLlJPVU5EKGUpKX0sZS5wcm90b3R5cGUudG9BYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ocmYuVE9fQUJTKCkpfSxlLnByb3RvdHlwZS50b1JlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybShyZi5UT19SRUwoKSl9LGUucHJvdG90eXBlLm5vcm1hbGl6ZUhWWj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLk5PUk1BTElaRV9IVlooZSx0LG4pKX0sZS5wcm90b3R5cGUubm9ybWFsaXplU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ocmYuTk9STUFMSVpFX1NUKCkpfSxlLnByb3RvdHlwZS5xdFRvQz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybShyZi5RVF9UT19DKCkpfSxlLnByb3RvdHlwZS5hVG9DPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLkFfVE9fQygpKX0sZS5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLlNBTklUSVpFKGUpKX0sZS5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLlRSQU5TTEFURShlLHQpKX0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ocmYuU0NBTEUoZSx0KSl9LGUucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLlJPVEFURShlLHQsbikpfSxlLnByb3RvdHlwZS5tYXRyaXg9ZnVuY3Rpb24oZSx0LG4scixpLGEpe3JldHVybiB0aGlzLnRyYW5zZm9ybShyZi5NQVRSSVgoZSx0LG4scixpLGEpKX0sZS5wcm90b3R5cGUuc2tld1g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLlNLRVdfWChlKSl9LGUucHJvdG90eXBlLnNrZXdZPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybShyZi5TS0VXX1koZSkpfSxlLnByb3RvdHlwZS54U3ltbWV0cnk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLlhfQVhJU19TWU1NRVRSWShlKSl9LGUucHJvdG90eXBlLnlTeW1tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ocmYuWV9BWElTX1NZTU1FVFJZKGUpKX0sZS5wcm90b3R5cGUuYW5ub3RhdGVBcmNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHJmLkFOTk9UQVRFX0FSQ1MoKSl9LGV9KCksY2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1gIGB8fGU9PT1gCWB8fGU9PT1gXHJgfHxlPT09YApgfSxsZj1mdW5jdGlvbihlKXtyZXR1cm4gNDg8PWUuY2hhckNvZGVBdCgwKSYmZS5jaGFyQ29kZUF0KDApPD01N30sdWY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gdC5jdXJOdW1iZXI9YGAsdC5jdXJDb21tYW5kVHlwZT0tMSx0LmN1ckNvbW1hbmRSZWxhdGl2ZT0hMSx0LmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITAsdC5jdXJOdW1iZXJIYXNFeHA9ITEsdC5jdXJOdW1iZXJIYXNFeHBEaWdpdHM9ITEsdC5jdXJOdW1iZXJIYXNEZWNpbWFsPSExLHQuY3VyQXJncz1bXSx0fXJldHVybiBHZCh0LGUpLHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZihlPT09dm9pZCAwJiYoZT1bXSksdGhpcy5wYXJzZShgIGAsZSksdGhpcy5jdXJBcmdzLmxlbmd0aCE9PTB8fCF0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWEpdGhyb3cgU3ludGF4RXJyb3IoYFVudGVybWluYXRlZCBjb21tYW5kIGF0IHRoZSBwYXRoIGVuZC5gKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3Q9PT12b2lkIDAmJih0PVtdKTtmb3IodmFyIHI9ZnVuY3Rpb24oZSl7dC5wdXNoKGUpLG4uY3VyQXJncy5sZW5ndGg9MCxuLmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITB9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPSEodGhpcy5jdXJDb21tYW5kVHlwZSE9PVguQVJDfHx0aGlzLmN1ckFyZ3MubGVuZ3RoIT09MyYmdGhpcy5jdXJBcmdzLmxlbmd0aCE9PTR8fHRoaXMuY3VyTnVtYmVyLmxlbmd0aCE9PTF8fHRoaXMuY3VyTnVtYmVyIT09YDBgJiZ0aGlzLmN1ck51bWJlciE9PWAxYCkscz1sZihhKSYmKHRoaXMuY3VyTnVtYmVyPT09YDBgJiZhPT09YDBgfHxvKTtpZighbGYoYSl8fHMpaWYoYSE9PWBlYCYmYSE9PWBFYClpZihhIT09YC1gJiZhIT09YCtgfHwhdGhpcy5jdXJOdW1iZXJIYXNFeHB8fHRoaXMuY3VyTnVtYmVySGFzRXhwRGlnaXRzKWlmKGEhPT1gLmB8fHRoaXMuY3VyTnVtYmVySGFzRXhwfHx0aGlzLmN1ck51bWJlckhhc0RlY2ltYWx8fG8pe2lmKHRoaXMuY3VyTnVtYmVyJiZ0aGlzLmN1ckNvbW1hbmRUeXBlIT09LTEpe3ZhciBjPU51bWJlcih0aGlzLmN1ck51bWJlcik7aWYoaXNOYU4oYykpdGhyb3cgU3ludGF4RXJyb3IoYEludmFsaWQgbnVtYmVyIGVuZGluZyBhdCBgK2kpO2lmKHRoaXMuY3VyQ29tbWFuZFR5cGU9PT1YLkFSQyl7aWYodGhpcy5jdXJBcmdzLmxlbmd0aD09PTB8fHRoaXMuY3VyQXJncy5sZW5ndGg9PT0xKXtpZigwPmMpdGhyb3cgU3ludGF4RXJyb3IoYEV4cGVjdGVkIHBvc2l0aXZlIG51bWJlciwgZ290ICJgK2MrYCIgYXQgaW5kZXggImAraStgImApfWVsc2UgaWYoKHRoaXMuY3VyQXJncy5sZW5ndGg9PT0zfHx0aGlzLmN1ckFyZ3MubGVuZ3RoPT09NCkmJnRoaXMuY3VyTnVtYmVyIT09YDBgJiZ0aGlzLmN1ck51bWJlciE9PWAxYCl0aHJvdyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgYSBmbGFnLCBnb3QgImArdGhpcy5jdXJOdW1iZXIrYCIgYXQgaW5kZXggImAraStgImApfXRoaXMuY3VyQXJncy5wdXNoKGMpLHRoaXMuY3VyQXJncy5sZW5ndGg9PT1kZlt0aGlzLmN1ckNvbW1hbmRUeXBlXSYmKFguSE9SSVpfTElORV9UTz09PXRoaXMuY3VyQ29tbWFuZFR5cGU/cih7dHlwZTpYLkhPUklaX0xJTkVfVE8scmVsYXRpdmU6dGhpcy5jdXJDb21tYW5kUmVsYXRpdmUseDpjfSk6WC5WRVJUX0xJTkVfVE89PT10aGlzLmN1ckNvbW1hbmRUeXBlP3Ioe3R5cGU6WC5WRVJUX0xJTkVfVE8scmVsYXRpdmU6dGhpcy5jdXJDb21tYW5kUmVsYXRpdmUseTpjfSk6dGhpcy5jdXJDb21tYW5kVHlwZT09PVguTU9WRV9UT3x8dGhpcy5jdXJDb21tYW5kVHlwZT09PVguTElORV9UT3x8dGhpcy5jdXJDb21tYW5kVHlwZT09PVguU01PT1RIX1FVQURfVE8/KHIoe3R5cGU6dGhpcy5jdXJDb21tYW5kVHlwZSxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4OnRoaXMuY3VyQXJnc1swXSx5OnRoaXMuY3VyQXJnc1sxXX0pLFguTU9WRV9UTz09PXRoaXMuY3VyQ29tbWFuZFR5cGUmJih0aGlzLmN1ckNvbW1hbmRUeXBlPVguTElORV9UTykpOnRoaXMuY3VyQ29tbWFuZFR5cGU9PT1YLkNVUlZFX1RPP3Ioe3R5cGU6WC5DVVJWRV9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4MTp0aGlzLmN1ckFyZ3NbMF0seTE6dGhpcy5jdXJBcmdzWzFdLHgyOnRoaXMuY3VyQXJnc1syXSx5Mjp0aGlzLmN1ckFyZ3NbM10seDp0aGlzLmN1ckFyZ3NbNF0seTp0aGlzLmN1ckFyZ3NbNV19KTp0aGlzLmN1ckNvbW1hbmRUeXBlPT09WC5TTU9PVEhfQ1VSVkVfVE8/cih7dHlwZTpYLlNNT09USF9DVVJWRV9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4Mjp0aGlzLmN1ckFyZ3NbMF0seTI6dGhpcy5jdXJBcmdzWzFdLHg6dGhpcy5jdXJBcmdzWzJdLHk6dGhpcy5jdXJBcmdzWzNdfSk6dGhpcy5jdXJDb21tYW5kVHlwZT09PVguUVVBRF9UTz9yKHt0eXBlOlguUVVBRF9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4MTp0aGlzLmN1ckFyZ3NbMF0seTE6dGhpcy5jdXJBcmdzWzFdLHg6dGhpcy5jdXJBcmdzWzJdLHk6dGhpcy5jdXJBcmdzWzNdfSk6dGhpcy5jdXJDb21tYW5kVHlwZT09PVguQVJDJiZyKHt0eXBlOlguQVJDLHJlbGF0aXZlOnRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlLHJYOnRoaXMuY3VyQXJnc1swXSxyWTp0aGlzLmN1ckFyZ3NbMV0seFJvdDp0aGlzLmN1ckFyZ3NbMl0sbEFyY0ZsYWc6dGhpcy5jdXJBcmdzWzNdLHN3ZWVwRmxhZzp0aGlzLmN1ckFyZ3NbNF0seDp0aGlzLmN1ckFyZ3NbNV0seTp0aGlzLmN1ckFyZ3NbNl19KSksdGhpcy5jdXJOdW1iZXI9YGAsdGhpcy5jdXJOdW1iZXJIYXNFeHBEaWdpdHM9ITEsdGhpcy5jdXJOdW1iZXJIYXNFeHA9ITEsdGhpcy5jdXJOdW1iZXJIYXNEZWNpbWFsPSExLHRoaXMuY2FuUGFyc2VDb21tYW5kT3JDb21tYT0hMH1pZighY2YoYSkpaWYoYT09PWAsYCYmdGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hKXRoaXMuY2FuUGFyc2VDb21tYW5kT3JDb21tYT0hMTtlbHNlIGlmKGEhPT1gK2AmJmEhPT1gLWAmJmEhPT1gLmApaWYocyl0aGlzLmN1ck51bWJlcj1hLHRoaXMuY3VyTnVtYmVySGFzRGVjaW1hbD0hMTtlbHNle2lmKHRoaXMuY3VyQXJncy5sZW5ndGghPT0wKXRocm93IFN5bnRheEVycm9yKGBVbnRlcm1pbmF0ZWQgY29tbWFuZCBhdCBpbmRleCBgK2krYC5gKTtpZighdGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hKXRocm93IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciAiYCthK2AiIGF0IGluZGV4IGAraStgLiBDb21tYW5kIGNhbm5vdCBmb2xsb3cgY29tbWFgKTtpZih0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITEsYSE9PWB6YCYmYSE9PWBaYClpZihhPT09YGhgfHxhPT09YEhgKXRoaXMuY3VyQ29tbWFuZFR5cGU9WC5IT1JJWl9MSU5FX1RPLHRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlPWE9PT1gaGA7ZWxzZSBpZihhPT09YHZgfHxhPT09YFZgKXRoaXMuY3VyQ29tbWFuZFR5cGU9WC5WRVJUX0xJTkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9YT09PWB2YDtlbHNlIGlmKGE9PT1gbWB8fGE9PT1gTWApdGhpcy5jdXJDb21tYW5kVHlwZT1YLk1PVkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9YT09PWBtYDtlbHNlIGlmKGE9PT1gbGB8fGE9PT1gTGApdGhpcy5jdXJDb21tYW5kVHlwZT1YLkxJTkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9YT09PWBsYDtlbHNlIGlmKGE9PT1gY2B8fGE9PT1gQ2ApdGhpcy5jdXJDb21tYW5kVHlwZT1YLkNVUlZFX1RPLHRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlPWE9PT1gY2A7ZWxzZSBpZihhPT09YHNgfHxhPT09YFNgKXRoaXMuY3VyQ29tbWFuZFR5cGU9WC5TTU9PVEhfQ1VSVkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9YT09PWBzYDtlbHNlIGlmKGE9PT1gcWB8fGE9PT1gUWApdGhpcy5jdXJDb21tYW5kVHlwZT1YLlFVQURfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9YT09PWBxYDtlbHNlIGlmKGE9PT1gdGB8fGE9PT1gVGApdGhpcy5jdXJDb21tYW5kVHlwZT1YLlNNT09USF9RVUFEX1RPLHRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlPWE9PT1gdGA7ZWxzZXtpZihhIT09YGFgJiZhIT09YEFgKXRocm93IFN5bnRheEVycm9yKGBVbmV4cGVjdGVkIGNoYXJhY3RlciAiYCthK2AiIGF0IGluZGV4IGAraStgLmApO3RoaXMuY3VyQ29tbWFuZFR5cGU9WC5BUkMsdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9YT09PWBhYH1lbHNlIHQucHVzaCh7dHlwZTpYLkNMT1NFX1BBVEh9KSx0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITAsdGhpcy5jdXJDb21tYW5kVHlwZT0tMX1lbHNlIHRoaXMuY3VyTnVtYmVyPWEsdGhpcy5jdXJOdW1iZXJIYXNEZWNpbWFsPWE9PT1gLmB9ZWxzZSB0aGlzLmN1ck51bWJlcis9YSx0aGlzLmN1ck51bWJlckhhc0RlY2ltYWw9ITA7ZWxzZSB0aGlzLmN1ck51bWJlcis9YTtlbHNlIHRoaXMuY3VyTnVtYmVyKz1hLHRoaXMuY3VyTnVtYmVySGFzRXhwPSEwO2Vsc2UgdGhpcy5jdXJOdW1iZXIrPWEsdGhpcy5jdXJOdW1iZXJIYXNFeHBEaWdpdHM9dGhpcy5jdXJOdW1iZXJIYXNFeHB9cmV0dXJuIHR9LHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzLHtwYXJzZTp7dmFsdWU6ZnVuY3Rpb24odCxuKXtuPT09dm9pZCAwJiYobj1bXSk7Zm9yKHZhciByPTAsaT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2UuY2FsbCh0aGlzLHQpO3I8aS5sZW5ndGg7cisrKXt2YXIgYT1pW3JdLG89ZShhKTtBcnJheS5pc0FycmF5KG8pP24ucHVzaC5hcHBseShuLG8pOm4ucHVzaChvKX1yZXR1cm4gbn19fSl9LHR9KHNmKSxYPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmNvbW1hbmRzPXR5cGVvZiBuPT1gc3RyaW5nYD90LnBhcnNlKG4pOm4scn1yZXR1cm4gR2QodCxlKSx0LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5lbmNvZGUodGhpcy5jb21tYW5kcyl9LHQucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3ZhciBlPXJmLkNBTENVTEFURV9CT1VORFMoKTtyZXR1cm4gdGhpcy50cmFuc2Zvcm0oZSksZX0sdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTAscj10aGlzLmNvbW1hbmRzO248ci5sZW5ndGg7bisrKXt2YXIgaT1lKHJbbl0pO0FycmF5LmlzQXJyYXkoaSk/dC5wdXNoLmFwcGx5KHQsaSk6dC5wdXNoKGkpfXJldHVybiB0aGlzLmNvbW1hbmRzPXQsdGhpc30sdC5lbmNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEtkKGUpfSx0LnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB1ZixuPVtdO3JldHVybiB0LnBhcnNlKGUsbiksdC5maW5pc2gobiksbn0sdC5DTE9TRV9QQVRIPTEsdC5NT1ZFX1RPPTIsdC5IT1JJWl9MSU5FX1RPPTQsdC5WRVJUX0xJTkVfVE89OCx0LkxJTkVfVE89MTYsdC5DVVJWRV9UTz0zMix0LlNNT09USF9DVVJWRV9UTz02NCx0LlFVQURfVE89MTI4LHQuU01PT1RIX1FVQURfVE89MjU2LHQuQVJDPTUxMix0LkxJTkVfQ09NTUFORFM9dC5MSU5FX1RPfHQuSE9SSVpfTElORV9UT3x0LlZFUlRfTElORV9UTyx0LkRSQVdJTkdfQ09NTUFORFM9dC5IT1JJWl9MSU5FX1RPfHQuVkVSVF9MSU5FX1RPfHQuTElORV9UT3x0LkNVUlZFX1RPfHQuU01PT1RIX0NVUlZFX1RPfHQuUVVBRF9UT3x0LlNNT09USF9RVUFEX1RPfHQuQVJDLHR9KHNmKSxkZj0oKG9mPXt9KVtYLk1PVkVfVE9dPTIsb2ZbWC5MSU5FX1RPXT0yLG9mW1guSE9SSVpfTElORV9UT109MSxvZltYLlZFUlRfTElORV9UT109MSxvZltYLkNMT1NFX1BBVEhdPTAsb2ZbWC5RVUFEX1RPXT00LG9mW1guU01PT1RIX1FVQURfVE9dPTIsb2ZbWC5DVVJWRV9UT109NixvZltYLlNNT09USF9DVVJWRV9UT109NCxvZltYLkFSQ109NyxvZil9KSkscGY9cygoKCk9Pnt2YXIgZT1TbCgpLlBST1BFUix0PWtsKCksbj15bCgpLHI9VXUoKSxpPVBjKCksYT1yZCgpLG89YHRvU3RyaW5nYCxzPVJlZ0V4cC5wcm90b3R5cGUsYz1zW29dLGw9aShmdW5jdGlvbigpe3JldHVybiBjLmNhbGwoe3NvdXJjZTpgYWAsZmxhZ3M6YGJgfSkhPT1gL2EvYmB9KSx1PWUmJmMubmFtZSE9PW87KGx8fHUpJiZ0KHMsbyxmdW5jdGlvbigpe3ZhciBlPW4odGhpcyksdD1yKGUuc291cmNlKSxpPXIoYShlKSk7cmV0dXJuYC9gK3QrYC9gK2l9LHt1bnNhZmU6ITB9KX0pKTtmdW5jdGlvbiBtZihlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBtZj10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sbWYoZSl9ZnVuY3Rpb24gaGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBUeXBlRXJyb3IoYENhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbmApfWZ1bmN0aW9uIGdmKGUsdCxuLHIsaSl7aWYodHlwZW9mIGU9PWBzdHJpbmdgJiYoZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSksIWV8fG1mKGUpIT09YG9iamVjdGB8fCEoYGdldENvbnRleHRgaW4gZSkpdGhyb3cgVHlwZUVycm9yKCJFeHBlY3RpbmcgY2FudmFzIHdpdGggYGdldENvbnRleHRgIG1ldGhvZCBpbiBwcm9jZXNzQ2FudmFzUkdCKEEpIGNhbGxzISIpO3ZhciBhPWUuZ2V0Q29udGV4dChgMmRgKTt0cnl7cmV0dXJuIGEuZ2V0SW1hZ2VEYXRhKHQsbixyLGkpfWNhdGNoKGUpe3Rocm93IEVycm9yKGB1bmFibGUgdG8gYWNjZXNzIGltYWdlIGRhdGE6IGArZSl9fWZ1bmN0aW9uIF9mKGUsdCxuLHIsaSxhKXtpZighKGlzTmFOKGEpfHxhPDEpKXthfD0wO3ZhciBvPWdmKGUsdCxuLHIsaSk7bz12ZihvLHQsbixyLGksYSksZS5nZXRDb250ZXh0KGAyZGApLnB1dEltYWdlRGF0YShvLHQsbil9fWZ1bmN0aW9uIHZmKGUsdCxuLHIsaSxhKXtmb3IodmFyIG89ZS5kYXRhLHM9MiphKzEsYz1yLTEsbD1pLTEsdT1hKzEsZD11Kih1KzEpLzIsZj1uZXcgeGYscD1mLG0saD0xO2g8cztoKyspcD1wLm5leHQ9bmV3IHhmLGg9PT11JiYobT1wKTtwLm5leHQ9Zjtmb3IodmFyIGc9bnVsbCxfPW51bGwsdj0wLHk9MCxiPXlmW2FdLHg9YmZbYV0sUz0wO1M8aTtTKyspe3A9Zjtmb3IodmFyIEM9b1t5XSx3PW9beSsxXSxUPW9beSsyXSxFPW9beSszXSxEPTA7RDx1O0QrKylwLnI9QyxwLmc9dyxwLmI9VCxwLmE9RSxwPXAubmV4dDtmb3IodmFyIE89MCxrPTAsQT0wLGo9MCxNPXUqQyxOPXUqdyxQPXUqVCxGPXUqRSxJPWQqQyxMPWQqdyxSPWQqVCx6PWQqRSxCPTE7Qjx1O0IrKyl7dmFyIFY9eSsoKGM8Qj9jOkIpPDwyKSxlZT1vW1ZdLEg9b1tWKzFdLFU9b1tWKzJdLFc9b1tWKzNdLEc9dS1CO0krPShwLnI9ZWUpKkcsTCs9KHAuZz1IKSpHLFIrPShwLmI9VSkqRyx6Kz0ocC5hPVcpKkcsTys9ZWUsays9SCxBKz1VLGorPVcscD1wLm5leHR9Zz1mLF89bTtmb3IodmFyIHRlPTA7dGU8cjt0ZSsrKXt2YXIgbmU9eipiPj4+eDtpZihvW3krM109bmUsbmUhPT0wKXt2YXIgcmU9MjU1L25lO29beV09KEkqYj4+PngpKnJlLG9beSsxXT0oTCpiPj4+eCkqcmUsb1t5KzJdPShSKmI+Pj54KSpyZX1lbHNlIG9beV09b1t5KzFdPW9beSsyXT0wO0ktPU0sTC09TixSLT1QLHotPUYsTS09Zy5yLE4tPWcuZyxQLT1nLmIsRi09Zy5hO3ZhciBpZT10ZSthKzE7aWU9disoaWU8Yz9pZTpjKTw8MixPKz1nLnI9b1tpZV0says9Zy5nPW9baWUrMV0sQSs9Zy5iPW9baWUrMl0sais9Zy5hPW9baWUrM10sSSs9TyxMKz1rLFIrPUEseis9aixnPWcubmV4dDt2YXIgYWU9XyxLPWFlLnIsb2U9YWUuZyxzZT1hZS5iLGNlPWFlLmE7TSs9SyxOKz1vZSxQKz1zZSxGKz1jZSxPLT1LLGstPW9lLEEtPXNlLGotPWNlLF89Xy5uZXh0LHkrPTR9dis9cn1mb3IodmFyIGxlPTA7bGU8cjtsZSsrKXt5PWxlPDwyO3ZhciB1ZT1vW3ldLGRlPW9beSsxXSxmZT1vW3krMl0scGU9b1t5KzNdLG1lPXUqdWUsaGU9dSpkZSxnZT11KmZlLF9lPXUqcGUsdmU9ZCp1ZSx5ZT1kKmRlLGJlPWQqZmUseGU9ZCpwZTtwPWY7Zm9yKHZhciBTZT0wO1NlPHU7U2UrKylwLnI9dWUscC5nPWRlLHAuYj1mZSxwLmE9cGUscD1wLm5leHQ7Zm9yKHZhciBDZT1yLHdlPTAsVGU9MCxFZT0wLERlPTAsT2U9MTtPZTw9YTtPZSsrKXt5PUNlK2xlPDwyO3ZhciBrZT11LU9lO3ZlKz0ocC5yPXVlPW9beV0pKmtlLHllKz0ocC5nPWRlPW9beSsxXSkqa2UsYmUrPShwLmI9ZmU9b1t5KzJdKSprZSx4ZSs9KHAuYT1wZT1vW3krM10pKmtlLERlKz11ZSx3ZSs9ZGUsVGUrPWZlLEVlKz1wZSxwPXAubmV4dCxPZTxsJiYoQ2UrPXIpfXk9bGUsZz1mLF89bTtmb3IodmFyIEFlPTA7QWU8aTtBZSsrKXt2YXIgamU9eTw8MjtvW2plKzNdPXBlPXhlKmI+Pj54LHBlPjA/KHBlPTI1NS9wZSxvW2plXT0odmUqYj4+PngpKnBlLG9bamUrMV09KHllKmI+Pj54KSpwZSxvW2plKzJdPShiZSpiPj4+eCkqcGUpOm9bamVdPW9bamUrMV09b1tqZSsyXT0wLHZlLT1tZSx5ZS09aGUsYmUtPWdlLHhlLT1fZSxtZS09Zy5yLGhlLT1nLmcsZ2UtPWcuYixfZS09Zy5hLGplPWxlKygoamU9QWUrdSk8bD9qZTpsKSpyPDwyLHZlKz1EZSs9Zy5yPW9bamVdLHllKz13ZSs9Zy5nPW9bamUrMV0sYmUrPVRlKz1nLmI9b1tqZSsyXSx4ZSs9RWUrPWcuYT1vW2plKzNdLGc9Zy5uZXh0LG1lKz11ZT1fLnIsaGUrPWRlPV8uZyxnZSs9ZmU9Xy5iLF9lKz1wZT1fLmEsRGUtPXVlLHdlLT1kZSxUZS09ZmUsRWUtPXBlLF89Xy5uZXh0LHkrPXJ9fXJldHVybiBlfXZhciB5ZixiZix4ZixTZj1vKCgoKT0+e3lmPVs1MTIsNTEyLDQ1Niw1MTIsMzI4LDQ1NiwzMzUsNTEyLDQwNSwzMjgsMjcxLDQ1NiwzODgsMzM1LDI5Miw1MTIsNDU0LDQwNSwzNjQsMzI4LDI5OCwyNzEsNDk2LDQ1Niw0MjAsMzg4LDM2MCwzMzUsMzEyLDI5MiwyNzMsNTEyLDQ4Miw0NTQsNDI4LDQwNSwzODMsMzY0LDM0NSwzMjgsMzEyLDI5OCwyODQsMjcxLDI1OSw0OTYsNDc1LDQ1Niw0MzcsNDIwLDQwNCwzODgsMzc0LDM2MCwzNDcsMzM1LDMyMywzMTIsMzAyLDI5MiwyODIsMjczLDI2NSw1MTIsNDk3LDQ4Miw0NjgsNDU0LDQ0MSw0MjgsNDE3LDQwNSwzOTQsMzgzLDM3MywzNjQsMzU0LDM0NSwzMzcsMzI4LDMyMCwzMTIsMzA1LDI5OCwyOTEsMjg0LDI3OCwyNzEsMjY1LDI1OSw1MDcsNDk2LDQ4NSw0NzUsNDY1LDQ1Niw0NDYsNDM3LDQyOCw0MjAsNDEyLDQwNCwzOTYsMzg4LDM4MSwzNzQsMzY3LDM2MCwzNTQsMzQ3LDM0MSwzMzUsMzI5LDMyMywzMTgsMzEyLDMwNywzMDIsMjk3LDI5MiwyODcsMjgyLDI3OCwyNzMsMjY5LDI2NSwyNjEsNTEyLDUwNSw0OTcsNDg5LDQ4Miw0NzUsNDY4LDQ2MSw0NTQsNDQ3LDQ0MSw0MzUsNDI4LDQyMiw0MTcsNDExLDQwNSwzOTksMzk0LDM4OSwzODMsMzc4LDM3MywzNjgsMzY0LDM1OSwzNTQsMzUwLDM0NSwzNDEsMzM3LDMzMiwzMjgsMzI0LDMyMCwzMTYsMzEyLDMwOSwzMDUsMzAxLDI5OCwyOTQsMjkxLDI4NywyODQsMjgxLDI3OCwyNzQsMjcxLDI2OCwyNjUsMjYyLDI1OSwyNTcsNTA3LDUwMSw0OTYsNDkxLDQ4NSw0ODAsNDc1LDQ3MCw0NjUsNDYwLDQ1Niw0NTEsNDQ2LDQ0Miw0MzcsNDMzLDQyOCw0MjQsNDIwLDQxNiw0MTIsNDA4LDQwNCw0MDAsMzk2LDM5MiwzODgsMzg1LDM4MSwzNzcsMzc0LDM3MCwzNjcsMzYzLDM2MCwzNTcsMzU0LDM1MCwzNDcsMzQ0LDM0MSwzMzgsMzM1LDMzMiwzMjksMzI2LDMyMywzMjAsMzE4LDMxNSwzMTIsMzEwLDMwNywzMDQsMzAyLDI5OSwyOTcsMjk0LDI5MiwyODksMjg3LDI4NSwyODIsMjgwLDI3OCwyNzUsMjczLDI3MSwyNjksMjY3LDI2NSwyNjMsMjYxLDI1OV0sYmY9WzksMTEsMTIsMTMsMTMsMTQsMTQsMTUsMTUsMTUsMTUsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjEsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjIsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjMsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjQsMjRdLHhmPWZ1bmN0aW9uIGUoKXtoZih0aGlzLGUpLHRoaXMucj0wLHRoaXMuZz0wLHRoaXMuYj0wLHRoaXMuYT0wLHRoaXMubmV4dD1udWxsfX0pKSxDZj1jKHtBRWxlbWVudDooKT0+eW0sQW5pbWF0ZUNvbG9yRWxlbWVudDooKT0+cG0sQW5pbWF0ZUVsZW1lbnQ6KCk9PmZtLEFuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OigpPT5tbSxCb3VuZGluZ0JveDooKT0+VXAsQ0IxOigpPT5SZixDQjI6KCk9PnpmLENCMzooKT0+QmYsQ0I0OigpPT5WZixDYW52ZzooKT0+Qm0sQ2lyY2xlRWxlbWVudDooKT0+JHAsQ2xpcFBhdGhFbGVtZW50OigpPT5BbSxEZWZzRWxlbWVudDooKT0+b20sRGVzY0VsZW1lbnQ6KCk9PkxtLERvY3VtZW50OigpPT56bSxFbGVtZW50OigpPT5CcCxFbGxpcHNlRWxlbWVudDooKT0+ZW0sRmVDb2xvck1hdHJpeEVsZW1lbnQ6KCk9PkRtLEZlQ29tcG9zaXRlRWxlbWVudDooKT0+UG0sRmVEcm9wU2hhZG93RWxlbWVudDooKT0+TW0sRmVHYXVzc2lhbkJsdXJFbGVtZW50OigpPT5GbSxGZU1vcnBob2xvZ3lFbGVtZW50OigpPT5ObSxGaWx0ZXJFbGVtZW50OigpPT5qbSxGb250OigpPT5IcCxGb250RWxlbWVudDooKT0+aG0sRm9udEZhY2VFbGVtZW50OigpPT5nbSxHRWxlbWVudDooKT0+c20sR2x5cGhFbGVtZW50OigpPT5xcCxHcmFkaWVudEVsZW1lbnQ6KCk9PmNtLEltYWdlRWxlbWVudDooKT0+U20sTGluZUVsZW1lbnQ6KCk9PnRtLExpbmVhckdyYWRpZW50RWxlbWVudDooKT0+bG0sTWFya2VyRWxlbWVudDooKT0+YW0sTWFza0VsZW1lbnQ6KCk9Pk9tLE1hdHJpeDooKT0+RnAsTWlzc2luZ0dseXBoRWxlbWVudDooKT0+X20sTW91c2U6KCk9PlRwLFBTRVVET19aRVJPOigpPT54cCxQYXJzZXI6KCk9PmpwLFBhdGhFbGVtZW50OigpPT5LcCxQYXRoUGFyc2VyOigpPT5XcCxQYXR0ZXJuRWxlbWVudDooKT0+aW0sUG9pbnQ6KCk9PndwLFBvbHlnb25FbGVtZW50OigpPT5ybSxQb2x5bGluZUVsZW1lbnQ6KCk9Pm5tLFByb3BlcnR5OigpPT5TcCxRQjE6KCk9PkhmLFFCMjooKT0+VWYsUUIzOigpPT5XZixSYWRpYWxHcmFkaWVudEVsZW1lbnQ6KCk9PnVtLFJlY3RFbGVtZW50OigpPT5RcCxSZW5kZXJlZEVsZW1lbnQ6KCk9PkdwLFJvdGF0ZTooKT0+TnAsU1ZHRWxlbWVudDooKT0+WnAsU1ZHRm9udExvYWRlcjooKT0+d20sU2NhbGU6KCk9PlBwLFNjcmVlbjooKT0+T3AsU2tldzooKT0+SXAsU2tld1g6KCk9PkxwLFNrZXdZOigpPT5ScCxTdG9wRWxlbWVudDooKT0+ZG0sU3R5bGVFbGVtZW50OigpPT5UbSxTeW1ib2xFbGVtZW50OigpPT5DbSxUUmVmRWxlbWVudDooKT0+dm0sVFNwYW5FbGVtZW50OigpPT5ZcCxUZXh0RWxlbWVudDooKT0+SnAsVGV4dFBhdGhFbGVtZW50OigpPT5ibSxUaXRsZUVsZW1lbnQ6KCk9PkltLFRyYW5zZm9ybTooKT0+enAsVHJhbnNsYXRlOigpPT5NcCxVbmtub3duRWxlbWVudDooKT0+VnAsVXNlRWxlbWVudDooKT0+RW0sVmlld1BvcnQ6KCk9PkNwLGNvbXByZXNzU3BhY2VzOigpPT5FZixkZWZhdWx0OigpPT5CbSxnZXRTZWxlY3RvclNwZWNpZmljaXR5OigpPT5QZixub3JtYWxpemVBdHRyaWJ1dGVOYW1lOigpPT5BZixub3JtYWxpemVDb2xvcjooKT0+TWYscGFyc2VFeHRlcm5hbFVybDooKT0+amYscHJlc2V0czooKT0+ZnAsdG9OdW1iZXJzOigpPT5rZix0cmltTGVmdDooKT0+RGYsdHJpbVJpZ2h0OigpPT5PZix2ZWN0b3JNYWduaXR1ZGU6KCk9PkZmLHZlY3RvcnNBbmdsZTooKT0+TGYsdmVjdG9yc1JhdGlvOigpPT5JZn0pO2Z1bmN0aW9uIHdmKCl7dmFye0RPTVBhcnNlcjplfT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sdD17d2luZG93Om51bGwsaWdub3JlQW5pbWF0aW9uOiEwLGlnbm9yZU1vdXNlOiEwLERPTVBhcnNlcjplLGNyZWF0ZUNhbnZhcyhlLHQpe3JldHVybiBuZXcgT2Zmc2NyZWVuQ2FudmFzKGUsdCl9LGNyZWF0ZUltYWdlKGUpe3JldHVybiBWdShmdW5jdGlvbiooKXt2YXIgdD15aWVsZCh5aWVsZCBmZXRjaChlKSkuYmxvYigpO3JldHVybiB5aWVsZCBjcmVhdGVJbWFnZUJpdG1hcCh0KX0pKCl9fTtyZXR1cm4odHlwZW9mIERPTVBhcnNlcjxgdWB8fGU9PT12b2lkIDApJiZSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHQsYERPTVBhcnNlcmApLHR9ZnVuY3Rpb24gVGYoZSl7dmFye0RPTVBhcnNlcjp0LGNhbnZhczpuLGZldGNoOnJ9PWU7cmV0dXJue3dpbmRvdzpudWxsLGlnbm9yZUFuaW1hdGlvbjohMCxpZ25vcmVNb3VzZTohMCxET01QYXJzZXI6dCxmZXRjaDpyLGNyZWF0ZUNhbnZhczpuLmNyZWF0ZUNhbnZhcyxjcmVhdGVJbWFnZTpuLmxvYWRJbWFnZX19ZnVuY3Rpb24gRWYoZSl7cmV0dXJuIGUucmVwbGFjZSgvKD8hXHUzMDAwKVxzKy9nbSxgIGApfWZ1bmN0aW9uIERmKGUpe3JldHVybiBlLnJlcGxhY2UoL15bXG4gXHRdKy8sYGApfWZ1bmN0aW9uIE9mKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcbiBcdF0rJC8sYGApfWZ1bmN0aW9uIGtmKGUpe3JldHVybigoZXx8YGApLm1hdGNoKC8tPyhcZCsoPzpcLlxkKig/OltlRV1bKy1dP1xkKyk/KT98XC5cZCspKD89XER8JCkvZ20pfHxbXSkubWFwKHBhcnNlRmxvYXQpfWZ1bmN0aW9uIEFmKGUpe3JldHVybiBwcC50ZXN0KGUpP2UudG9Mb3dlckNhc2UoKTplfWZ1bmN0aW9uIGpmKGUpe3ZhciB0PS91cmxcKCgnKFteJ10rKSd8IihbXiJdKykifChbXiciKV0rKSlcKS8uZXhlYyhlKXx8W107cmV0dXJuIHRbMl18fHRbM118fHRbNF19ZnVuY3Rpb24gTWYoZSl7aWYoIWUuc3RhcnRzV2l0aChgcmdiYCkpcmV0dXJuIGU7dmFyIHQ9MztyZXR1cm4gZS5yZXBsYWNlKC9cZCsoXC5cZCspPy9nLChlLG4pPT50LS0mJm4/U3RyaW5nKE1hdGgucm91bmQocGFyc2VGbG9hdChlKSkpOmUpfWZ1bmN0aW9uIE5mKGUsdCl7dmFyIG49dC5leGVjKGUpO3JldHVybiBuP1tlLnJlcGxhY2UodCxgIGApLG4ubGVuZ3RoXTpbZSwwXX1mdW5jdGlvbiBQZihlKXt2YXIgdD1bMCwwLDBdLG49ZS5yZXBsYWNlKC86bm90XCgoW14pXSopXCkvZyxgICAgICAkMSBgKS5yZXBsYWNlKC97W1xzXFNdKi9nbSxgIGApLHI9MDtyZXR1cm5bbixyXT1OZihuLG1wKSx0WzFdKz1yLFtuLHJdPU5mKG4saHApLHRbMF0rPXIsW24scl09TmYobixncCksdFsxXSs9cixbbixyXT1OZihuLF9wKSx0WzJdKz1yLFtuLHJdPU5mKG4sdnApLHRbMV0rPXIsW24scl09TmYobix5cCksdFsxXSs9cixuPW4ucmVwbGFjZSgvWypccys+fl0vZyxgIGApLnJlcGxhY2UoL1sjLl0vZyxgIGApLFtuLHJdPU5mKG4sYnApLHRbMl0rPXIsdC5qb2luKGBgKX1mdW5jdGlvbiBGZihlKXtyZXR1cm4gTWF0aC5zcXJ0KGVbMF0qKjIrZVsxXSoqMil9ZnVuY3Rpb24gSWYoZSx0KXtyZXR1cm4oZVswXSp0WzBdK2VbMV0qdFsxXSkvKEZmKGUpKkZmKHQpKX1mdW5jdGlvbiBMZihlLHQpe3JldHVybihlWzBdKnRbMV08ZVsxXSp0WzBdPy0xOjEpKk1hdGguYWNvcyhJZihlLHQpKX1mdW5jdGlvbiBSZihlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gemYoZSl7cmV0dXJuIDMqZSplKigxLWUpfWZ1bmN0aW9uIEJmKGUpe3JldHVybiAzKmUqKDEtZSkqKDEtZSl9ZnVuY3Rpb24gVmYoZSl7cmV0dXJuKDEtZSkqKDEtZSkqKDEtZSl9ZnVuY3Rpb24gSGYoZSl7cmV0dXJuIGUqZX1mdW5jdGlvbiBVZihlKXtyZXR1cm4gMiplKigxLWUpfWZ1bmN0aW9uIFdmKGUpe3JldHVybigxLWUpKigxLWUpfWZ1bmN0aW9uIEdmKGUpe3JldHVybiBFZihlKS50cmltKCkucmVwbGFjZSgvXCkoW2EtekEtWl0pL2csYCkgJDFgKS5yZXBsYWNlKC9cKShccz8sXHM/KS9nLGApIGApLnNwbGl0KC9ccyg/PVthLXpdKS8pfWZ1bmN0aW9uIEtmKGUpe3Zhclt0LG5dPWUuc3BsaXQoYChgKTtyZXR1cm5bdC50cmltKCksbi50cmltKCkucmVwbGFjZShgKWAsYGApXX1mdW5jdGlvbiBxZihlKXt2YXIgdD1lLnRyaW0oKTtyZXR1cm4vXignfCIpLy50ZXN0KHQpP3Q6YCIke3R9ImB9ZnVuY3Rpb24gSmYoZSl7cmV0dXJuIHR5cGVvZiBwcm9jZXNzPmB1YD9lOmUudHJpbSgpLnNwbGl0KGAsYCkubWFwKHFmKS5qb2luKGAsYCl9ZnVuY3Rpb24gWWYoZSl7aWYoIWUpcmV0dXJuYGA7dmFyIHQ9ZS50cmltKCkudG9Mb3dlckNhc2UoKTtzd2l0Y2godCl7Y2FzZWBub3JtYWxgOmNhc2VgaXRhbGljYDpjYXNlYG9ibGlxdWVgOmNhc2VgaW5oZXJpdGA6Y2FzZWBpbml0aWFsYDpjYXNlYHVuc2V0YDpyZXR1cm4gdDtkZWZhdWx0OnJldHVybi9eb2JsaXF1ZVxzKygtfClcZCtkZWckLy50ZXN0KHQpP3Q6YGB9fWZ1bmN0aW9uIFhmKGUpe2lmKCFlKXJldHVybmBgO3ZhciB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQpe2Nhc2Vgbm9ybWFsYDpjYXNlYGJvbGRgOmNhc2VgbGlnaHRlcmA6Y2FzZWBib2xkZXJgOmNhc2VgaW5oZXJpdGA6Y2FzZWBpbml0aWFsYDpjYXNlYHVuc2V0YDpyZXR1cm4gdDtkZWZhdWx0OnJldHVybi9eW1xkLl0rJC8udGVzdCh0KT90OmBgfX1mdW5jdGlvbiBaZihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFFmKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XT09bnVsbD97fTphcmd1bWVudHNbdF07dCUyP1pmKE9iamVjdChuKSwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtEZChlLHQsblt0XSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpaZihPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gJGYoZSx0LG4scixpLGEpe3JldHVybiBlW24qcio0K3QqNCthXX1mdW5jdGlvbiBlcChlLHQsbixyLGksYSxvKXtlW24qcio0K3QqNCthXT1vfWZ1bmN0aW9uIHRwKGUsdCxuKXtyZXR1cm4gZVt0XSpufWZ1bmN0aW9uIG5wKGUsdCxuLHIpe3JldHVybiB0K01hdGguY29zKGUpKm4rTWF0aC5zaW4oZSkqcn1mdW5jdGlvbiBycChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGlwKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XT09bnVsbD97fTphcmd1bWVudHNbdF07dCUyP3JwKE9iamVjdChuKSwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtEZChlLHQsblt0XSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpycChPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gYXAoZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBjYW52YXNgKTtyZXR1cm4gbi53aWR0aD1lLG4uaGVpZ2h0PXQsbn1mdW5jdGlvbiBvcChlKXtyZXR1cm4gc3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHNwKCl7cmV0dXJuIHNwPVZ1KGZ1bmN0aW9uKihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBpbWdgKTtyZXR1cm4gdCYmKG4uY3Jvc3NPcmlnaW49YEFub255bW91c2ApLG5ldyBQcm9taXNlKCh0LHIpPT57bi5vbmxvYWQ9KCk9Pnt0KG4pfSxuLm9uZXJyb3I9KGUsdCxuLGksYSk9PntyKGEpfSxuLnNyYz1lfSl9KSxzcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gY3AoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBscChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF09PW51bGw/e306YXJndW1lbnRzW3RdO3QlMj9jcChPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24odCl7RGQoZSx0LG5bdF0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Y3AoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pfXJldHVybiBlfXZhciB1cCxkcCxmcCxwcCxtcCxocCxncCxfcCx2cCx5cCxicCx4cCxTcCxDcCx3cCxUcCxFcCxEcCxPcCxrcCxBcCxqcCxNcCxOcCxQcCxGcCxJcCxMcCxScCx6cCxCcCxWcCxIcCxVcCxXcCxHcCxLcCxxcCxKcCxZcCxYcCxacCxRcCwkcCxlbSx0bSxubSxybSxpbSxhbSxvbSxzbSxjbSxsbSx1bSxkbSxmbSxwbSxtbSxobSxnbSxfbSx2bSx5bSxibSx4bSxTbSxDbSx3bSxUbSxFbSxEbSxPbSxrbSxBbSxqbSxNbSxObSxQbSxGbSxJbSxMbSxSbSx6bSxCbSxWbT1vKCgoKT0+e3p1KCksSHUoKSxhZCgpLHNkKCksZGQoKSx5ZCgpLFNkKCksT2QoKSxqZCgpLE1kKCksTmQoKSx1cD11KEZkKCksMSksemQoKSxkcD11KEJkKCksMSksVmQoKSxIZCgpLFdkKCksZmYoKSxwZigpLFNmKCksZnA9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsb2Zmc2NyZWVuOndmLG5vZGU6VGZ9KSxwcD0vXltBLVotXSskLyxtcD0vKFxbW15cXV0rXF0pL2csaHA9LygjW15ccys+fi5bOl0rKS9nLGdwPS8oXC5bXlxzKz5+Lls6XSspL2csX3A9Lyg6OlteXHMrPn4uWzpdK3w6Zmlyc3QtbGluZXw6Zmlyc3QtbGV0dGVyfDpiZWZvcmV8OmFmdGVyKS9naSx2cD0vKDpbXHctXStcKFteKV0qXCkpL2dpLHlwPS8oOlteXHMrPn4uWzpdKykvZyxicD0vKFteXHMrPn4uWzpdKykvZyx4cD0xZS04LFNwPWNsYXNzIGV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZG9jdW1lbnQ9ZSx0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPW4sdGhpcy5pc05vcm1hbGl6ZWRDb2xvcj0hMX1zdGF0aWMgZW1wdHkodCl7cmV0dXJuIG5ldyBlKHQsYEVNUFRZYCxgYCl9c3BsaXQoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06YCBgLHtkb2N1bWVudDpuLG5hbWU6cn09dGhpcztyZXR1cm4gRWYodGhpcy5nZXRTdHJpbmcoKSkudHJpbSgpLnNwbGl0KHQpLm1hcCh0PT5uZXcgZShuLHIsdCkpfWhhc1ZhbHVlKGUpe3Zhcnt2YWx1ZTp0fT10aGlzO3JldHVybiB0IT09bnVsbCYmdCE9PWBgJiYoZXx8dCE9PTApJiZ0IT09dm9pZCAwfWlzU3RyaW5nKGUpe3Zhcnt2YWx1ZTp0fT10aGlzLG49dHlwZW9mIHQ9PWBzdHJpbmdgO3JldHVybiFufHwhZT9uOmUudGVzdCh0KX1pc1VybERlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5pc1N0cmluZygvXnVybFwoLyl9aXNQaXhlbHMoKXtpZighdGhpcy5oYXNWYWx1ZSgpKXJldHVybiExO3ZhciBlPXRoaXMuZ2V0U3RyaW5nKCk7c3dpdGNoKCEwKXtjYXNlIGUuZW5kc1dpdGgoYHB4YCk6Y2FzZS9eWzAtOV0rJC8udGVzdChlKTpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1zZXRWYWx1ZShlKXtyZXR1cm4gdGhpcy52YWx1ZT1lLHRoaXN9Z2V0VmFsdWUoZSl7cmV0dXJuIGU9PT12b2lkIDB8fHRoaXMuaGFzVmFsdWUoKT90aGlzLnZhbHVlOmV9Z2V0TnVtYmVyKGUpe2lmKCF0aGlzLmhhc1ZhbHVlKCkpcmV0dXJuIGU9PT12b2lkIDA/MDpwYXJzZUZsb2F0KGUpO3Zhcnt2YWx1ZTp0fT10aGlzLG49cGFyc2VGbG9hdCh0KTtyZXR1cm4gdGhpcy5pc1N0cmluZygvJSQvKSYmKG4vPTEwMCksbn1nZXRTdHJpbmcoZSl7cmV0dXJuIGU9PT12b2lkIDB8fHRoaXMuaGFzVmFsdWUoKT90aGlzLnZhbHVlPT09dm9pZCAwP2BgOlN0cmluZyh0aGlzLnZhbHVlKTpTdHJpbmcoZSl9Z2V0Q29sb3IoZSl7dmFyIHQ9dGhpcy5nZXRTdHJpbmcoZSk7cmV0dXJuIHRoaXMuaXNOb3JtYWxpemVkQ29sb3I/dDoodGhpcy5pc05vcm1hbGl6ZWRDb2xvcj0hMCx0PU1mKHQpLHRoaXMudmFsdWU9dCx0KX1nZXREcGkoKXtyZXR1cm4gOTZ9Z2V0UmVtKCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQucm9vdEVtU2l6ZX1nZXRFbSgpe3JldHVybiB0aGlzLmRvY3VtZW50LmVtU2l6ZX1nZXRVbml0cygpe3JldHVybiB0aGlzLmdldFN0cmluZygpLnJlcGxhY2UoL1swLTkuLV0vZyxgYCl9Z2V0UGl4ZWxzKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtpZighdGhpcy5oYXNWYWx1ZSgpKXJldHVybiAwO3ZhcltuLHJdPXR5cGVvZiBlPT1gYm9vbGVhbmA/W3ZvaWQgMCxlXTpbZV0se3ZpZXdQb3J0Oml9PXRoaXMuZG9jdW1lbnQuc2NyZWVuO3N3aXRjaCghMCl7Y2FzZSB0aGlzLmlzU3RyaW5nKC92bWluJC8pOnJldHVybiB0aGlzLmdldE51bWJlcigpLzEwMCpNYXRoLm1pbihpLmNvbXB1dGVTaXplKGB4YCksaS5jb21wdXRlU2l6ZShgeWApKTtjYXNlIHRoaXMuaXNTdHJpbmcoL3ZtYXgkLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkvMTAwKk1hdGgubWF4KGkuY29tcHV0ZVNpemUoYHhgKSxpLmNvbXB1dGVTaXplKGB5YCkpO2Nhc2UgdGhpcy5pc1N0cmluZygvdnckLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkvMTAwKmkuY29tcHV0ZVNpemUoYHhgKTtjYXNlIHRoaXMuaXNTdHJpbmcoL3ZoJC8pOnJldHVybiB0aGlzLmdldE51bWJlcigpLzEwMCppLmNvbXB1dGVTaXplKGB5YCk7Y2FzZSB0aGlzLmlzU3RyaW5nKC9yZW0kLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkqdGhpcy5nZXRSZW0oKTtjYXNlIHRoaXMuaXNTdHJpbmcoL2VtJC8pOnJldHVybiB0aGlzLmdldE51bWJlcigpKnRoaXMuZ2V0RW0oKTtjYXNlIHRoaXMuaXNTdHJpbmcoL2V4JC8pOnJldHVybiB0aGlzLmdldE51bWJlcigpKnRoaXMuZ2V0RW0oKS8yO2Nhc2UgdGhpcy5pc1N0cmluZygvcHgkLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSB0aGlzLmlzU3RyaW5nKC9wdCQvKTpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKSp0aGlzLmdldERwaSgpKigxLzcyKTtjYXNlIHRoaXMuaXNTdHJpbmcoL3BjJC8pOnJldHVybiB0aGlzLmdldE51bWJlcigpKjE1O2Nhc2UgdGhpcy5pc1N0cmluZygvY20kLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkqdGhpcy5nZXREcGkoKS8yLjU0O2Nhc2UgdGhpcy5pc1N0cmluZygvbW0kLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkqdGhpcy5nZXREcGkoKS8yNS40O2Nhc2UgdGhpcy5pc1N0cmluZygvaW4kLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkqdGhpcy5nZXREcGkoKTtjYXNlIHRoaXMuaXNTdHJpbmcoLyUkLykmJnI6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkqdGhpcy5nZXRFbSgpO2Nhc2UgdGhpcy5pc1N0cmluZygvJSQvKTpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKSppLmNvbXB1dGVTaXplKG4pO2RlZmF1bHQ6dmFyIGE9dGhpcy5nZXROdW1iZXIoKTtyZXR1cm4gdCYmYTwxP2EqaS5jb21wdXRlU2l6ZShuKTphfX1nZXRNaWxsaXNlY29uZHMoKXtyZXR1cm4gdGhpcy5oYXNWYWx1ZSgpP3RoaXMuaXNTdHJpbmcoL21zJC8pP3RoaXMuZ2V0TnVtYmVyKCk6dGhpcy5nZXROdW1iZXIoKSoxZTM6MH1nZXRSYWRpYW5zKCl7aWYoIXRoaXMuaGFzVmFsdWUoKSlyZXR1cm4gMDtzd2l0Y2goITApe2Nhc2UgdGhpcy5pc1N0cmluZygvZGVnJC8pOnJldHVybiB0aGlzLmdldE51bWJlcigpKihNYXRoLlBJLzE4MCk7Y2FzZSB0aGlzLmlzU3RyaW5nKC9ncmFkJC8pOnJldHVybiB0aGlzLmdldE51bWJlcigpKihNYXRoLlBJLzIwMCk7Y2FzZSB0aGlzLmlzU3RyaW5nKC9yYWQkLyk6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKSooTWF0aC5QSS8xODApfX1nZXREZWZpbml0aW9uKCl7dmFyIGU9dGhpcy5nZXRTdHJpbmcoKSx0PS8jKFteKSciXSspLy5leGVjKGUpO3JldHVybiB0JiY9dFsxXSx0fHw9ZSx0aGlzLmRvY3VtZW50LmRlZmluaXRpb25zW3RdfWdldEZpbGxTdHlsZURlZmluaXRpb24oZSx0KXt2YXIgbj10aGlzLmdldERlZmluaXRpb24oKTtpZighbilyZXR1cm4gbnVsbDtpZih0eXBlb2Ygbi5jcmVhdGVHcmFkaWVudD09YGZ1bmN0aW9uYClyZXR1cm4gbi5jcmVhdGVHcmFkaWVudCh0aGlzLmRvY3VtZW50LmN0eCxlLHQpO2lmKHR5cGVvZiBuLmNyZWF0ZVBhdHRlcm49PWBmdW5jdGlvbmApe2lmKG4uZ2V0SHJlZkF0dHJpYnV0ZSgpLmhhc1ZhbHVlKCkpe3ZhciByPW4uZ2V0QXR0cmlidXRlKGBwYXR0ZXJuVHJhbnNmb3JtYCk7bj1uLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXREZWZpbml0aW9uKCksci5oYXNWYWx1ZSgpJiZuLmdldEF0dHJpYnV0ZShgcGF0dGVyblRyYW5zZm9ybWAsITApLnNldFZhbHVlKHIudmFsdWUpfXJldHVybiBuLmNyZWF0ZVBhdHRlcm4odGhpcy5kb2N1bWVudC5jdHgsZSx0KX1yZXR1cm4gbnVsbH1nZXRUZXh0QmFzZWxpbmUoKXtyZXR1cm4gdGhpcy5oYXNWYWx1ZSgpP2UudGV4dEJhc2VsaW5lTWFwcGluZ1t0aGlzLmdldFN0cmluZygpXTpudWxsfWFkZE9wYWNpdHkodCl7Zm9yKHZhciBuPXRoaXMuZ2V0Q29sb3IoKSxyPW4ubGVuZ3RoLGk9MCxhPTA7YTxyJiYoblthXT09PWAsYCYmaSsrLGkhPT0zKTthKyspO2lmKHQuaGFzVmFsdWUoKSYmdGhpcy5pc1N0cmluZygpJiZpIT09Myl7dmFyIG89bmV3IGRwLmRlZmF1bHQobik7by5vayYmKG8uYWxwaGE9dC5nZXROdW1iZXIoKSxuPW8udG9SR0JBKCkpfXJldHVybiBuZXcgZSh0aGlzLmRvY3VtZW50LHRoaXMubmFtZSxuKX19LFNwLnRleHRCYXNlbGluZU1hcHBpbmc9e2Jhc2VsaW5lOmBhbHBoYWJldGljYCwiYmVmb3JlLWVkZ2UiOmB0b3BgLCJ0ZXh0LWJlZm9yZS1lZGdlIjpgdG9wYCxtaWRkbGU6YG1pZGRsZWAsY2VudHJhbDpgbWlkZGxlYCwiYWZ0ZXItZWRnZSI6YGJvdHRvbWAsInRleHQtYWZ0ZXItZWRnZSI6YGJvdHRvbWAsaWRlb2dyYXBoaWM6YGlkZW9ncmFwaGljYCxhbHBoYWJldGljOmBhbHBoYWJldGljYCxoYW5naW5nOmBoYW5naW5nYCxtYXRoZW1hdGljYWw6YGFscGhhYmV0aWNgfSxDcD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudmlld1BvcnRzPVtdfWNsZWFyKCl7dGhpcy52aWV3UG9ydHM9W119c2V0Q3VycmVudChlLHQpe3RoaXMudmlld1BvcnRzLnB1c2goe3dpZHRoOmUsaGVpZ2h0OnR9KX1yZW1vdmVDdXJyZW50KCl7dGhpcy52aWV3UG9ydHMucG9wKCl9Z2V0Q3VycmVudCgpe3Zhcnt2aWV3UG9ydHM6ZX09dGhpcztyZXR1cm4gZVtlLmxlbmd0aC0xXX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy5nZXRDdXJyZW50KCkud2lkdGh9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLmdldEN1cnJlbnQoKS5oZWlnaHR9Y29tcHV0ZVNpemUoZSl7cmV0dXJuIHR5cGVvZiBlPT1gbnVtYmVyYD9lOmU9PT1geGA/dGhpcy53aWR0aDplPT09YHlgP3RoaXMuaGVpZ2h0Ok1hdGguc3FydCh0aGlzLndpZHRoKioyK3RoaXMuaGVpZ2h0KioyKS9NYXRoLnNxcnQoMil9fSx3cD1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy54PWUsdGhpcy55PXR9c3RhdGljIHBhcnNlKHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFtyPW4saT1uXT1rZih0KTtyZXR1cm4gbmV3IGUocixpKX1zdGF0aWMgcGFyc2VTY2FsZSh0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MSxbcj1uLGk9cl09a2YodCk7cmV0dXJuIG5ldyBlKHIsaSl9c3RhdGljIHBhcnNlUGF0aCh0KXtmb3IodmFyIG49a2YodCkscj1uLmxlbmd0aCxpPVtdLGE9MDthPHI7YSs9MilpLnB1c2gobmV3IGUoblthXSxuW2ErMV0pKTtyZXR1cm4gaX1hbmdsZVRvKGUpe3JldHVybiBNYXRoLmF0YW4yKGUueS10aGlzLnksZS54LXRoaXMueCl9YXBwbHlUcmFuc2Zvcm0oZSl7dmFye3g6dCx5Om59PXRoaXMscj10KmVbMF0rbiplWzJdK2VbNF0saT10KmVbMV0rbiplWzNdK2VbNV07dGhpcy54PXIsdGhpcy55PWl9fSxUcD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnNjcmVlbj1lLHRoaXMud29ya2luZz0hMSx0aGlzLmV2ZW50cz1bXSx0aGlzLmV2ZW50RWxlbWVudHM9W10sdGhpcy5vbkNsaWNrPXRoaXMub25DbGljay5iaW5kKHRoaXMpLHRoaXMub25Nb3VzZU1vdmU9dGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpfWlzV29ya2luZygpe3JldHVybiB0aGlzLndvcmtpbmd9c3RhcnQoKXtpZighdGhpcy53b3JraW5nKXt2YXJ7c2NyZWVuOmUsb25DbGljazp0LG9uTW91c2VNb3ZlOm59PXRoaXMscj1lLmN0eC5jYW52YXM7ci5vbmNsaWNrPXQsci5vbm1vdXNlbW92ZT1uLHRoaXMud29ya2luZz0hMH19c3RvcCgpe2lmKHRoaXMud29ya2luZyl7dmFyIGU9dGhpcy5zY3JlZW4uY3R4LmNhbnZhczt0aGlzLndvcmtpbmc9ITEsZS5vbmNsaWNrPW51bGwsZS5vbm1vdXNlbW92ZT1udWxsfX1oYXNFdmVudHMoKXtyZXR1cm4gdGhpcy53b3JraW5nJiZ0aGlzLmV2ZW50cy5sZW5ndGg+MH1ydW5FdmVudHMoKXtpZih0aGlzLndvcmtpbmcpe3ZhcntzY3JlZW46ZSxldmVudHM6dCxldmVudEVsZW1lbnRzOm59PXRoaXMse3N0eWxlOnJ9PWUuY3R4LmNhbnZhcztyJiYoci5jdXJzb3I9YGApLHQuZm9yRWFjaCgoZSx0KT0+e2Zvcih2YXJ7cnVuOnJ9PWUsaT1uW3RdO2k7KXIoaSksaT1pLnBhcmVudH0pLHRoaXMuZXZlbnRzPVtdLHRoaXMuZXZlbnRFbGVtZW50cz1bXX19Y2hlY2tQYXRoKGUsdCl7aWYoISghdGhpcy53b3JraW5nfHwhdCkpe3ZhcntldmVudHM6bixldmVudEVsZW1lbnRzOnJ9PXRoaXM7bi5mb3JFYWNoKChuLGkpPT57dmFye3g6YSx5Om99PW47IXJbaV0mJnQuaXNQb2ludEluUGF0aCYmdC5pc1BvaW50SW5QYXRoKGEsbykmJihyW2ldPWUpfSl9fWNoZWNrQm91bmRpbmdCb3goZSx0KXtpZighKCF0aGlzLndvcmtpbmd8fCF0KSl7dmFye2V2ZW50czpuLGV2ZW50RWxlbWVudHM6cn09dGhpcztuLmZvckVhY2goKG4saSk9Pnt2YXJ7eDphLHk6b309bjshcltpXSYmdC5pc1BvaW50SW5Cb3goYSxvKSYmKHJbaV09ZSl9KX19bWFwWFkoZSx0KXtmb3IodmFye3dpbmRvdzpuLGN0eDpyfT10aGlzLnNjcmVlbixpPW5ldyB3cChlLHQpLGE9ci5jYW52YXM7YTspaS54LT1hLm9mZnNldExlZnQsaS55LT1hLm9mZnNldFRvcCxhPWEub2Zmc2V0UGFyZW50O3JldHVybiBuLnNjcm9sbFgmJihpLngrPW4uc2Nyb2xsWCksbi5zY3JvbGxZJiYoaS55Kz1uLnNjcm9sbFkpLGl9b25DbGljayhlKXt2YXJ7eDp0LHk6bn09dGhpcy5tYXBYWShlLmNsaWVudFgsZS5jbGllbnRZKTt0aGlzLmV2ZW50cy5wdXNoKHt0eXBlOmBvbmNsaWNrYCx4OnQseTpuLHJ1bihlKXtlLm9uQ2xpY2smJmUub25DbGljaygpfX0pfW9uTW91c2VNb3ZlKGUpe3Zhcnt4OnQseTpufT10aGlzLm1hcFhZKGUuY2xpZW50WCxlLmNsaWVudFkpO3RoaXMuZXZlbnRzLnB1c2goe3R5cGU6YG9ubW91c2Vtb3ZlYCx4OnQseTpuLHJ1bihlKXtlLm9uTW91c2VNb3ZlJiZlLm9uTW91c2VNb3ZlKCl9fSl9fSxFcD10eXBlb2Ygd2luZG93PGB1YD93aW5kb3c6bnVsbCxEcD10eXBlb2YgZmV0Y2g8YHVgP2ZldGNoLmJpbmQodm9pZCAwKTpudWxsLE9wPWNsYXNze2NvbnN0cnVjdG9yKGUpe3ZhcntmZXRjaDp0PURwLHdpbmRvdzpuPUVwfT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e307dGhpcy5jdHg9ZSx0aGlzLkZSQU1FUkFURT0zMCx0aGlzLk1BWF9WSVJUVUFMX1BJWEVMUz0zZTQsdGhpcy5DTElFTlRfV0lEVEg9ODAwLHRoaXMuQ0xJRU5UX0hFSUdIVD02MDAsdGhpcy52aWV3UG9ydD1uZXcgQ3AsdGhpcy5tb3VzZT1uZXcgVHAodGhpcyksdGhpcy5hbmltYXRpb25zPVtdLHRoaXMud2FpdHM9W10sdGhpcy5mcmFtZUR1cmF0aW9uPTAsdGhpcy5pc1JlYWR5TG9jaz0hMSx0aGlzLmlzRmlyc3RSZW5kZXI9ITAsdGhpcy5pbnRlcnZhbElkPW51bGwsdGhpcy53aW5kb3c9bix0aGlzLmZldGNoPXR9d2FpdChlKXt0aGlzLndhaXRzLnB1c2goZSl9cmVhZHkoKXtyZXR1cm4gdGhpcy5yZWFkeVByb21pc2U/dGhpcy5yZWFkeVByb21pc2U6UHJvbWlzZS5yZXNvbHZlKCl9aXNSZWFkeSgpe2lmKHRoaXMuaXNSZWFkeUxvY2spcmV0dXJuITA7dmFyIGU9dGhpcy53YWl0cy5ldmVyeShlPT5lKCkpO3JldHVybiBlJiYodGhpcy53YWl0cz1bXSx0aGlzLnJlc29sdmVSZWFkeSYmdGhpcy5yZXNvbHZlUmVhZHkoKSksdGhpcy5pc1JlYWR5TG9jaz1lLGV9c2V0RGVmYXVsdHMoZSl7ZS5zdHJva2VTdHlsZT1gcmdiYSgwLDAsMCwwKWAsZS5saW5lQ2FwPWBidXR0YCxlLmxpbmVKb2luPWBtaXRlcmAsZS5taXRlckxpbWl0PTR9c2V0Vmlld0JveChlKXt2YXJ7ZG9jdW1lbnQ6dCxjdHg6bixhc3BlY3RSYXRpbzpyLHdpZHRoOmksZGVzaXJlZFdpZHRoOmEsaGVpZ2h0Om8sZGVzaXJlZEhlaWdodDpzLG1pblg6Yz0wLG1pblk6bD0wLHJlZlg6dSxyZWZZOmQsY2xpcDpmPSExLGNsaXBYOnA9MCxjbGlwWTptPTB9PWUsW2gsZ109RWYocikucmVwbGFjZSgvXmRlZmVyXHMvLGBgKS5zcGxpdChgIGApLF89aHx8YHhNaWRZTWlkYCx2PWd8fGBtZWV0YCx5PWkvYSxiPW8vcyx4PU1hdGgubWluKHksYiksUz1NYXRoLm1heCh5LGIpLEM9YSx3PXM7dj09PWBtZWV0YCYmKEMqPXgsdyo9eCksdj09PWBzbGljZWAmJihDKj1TLHcqPVMpO3ZhciBUPW5ldyBTcCh0LGByZWZYYCx1KSxFPW5ldyBTcCh0LGByZWZZYCxkKSxEPVQuaGFzVmFsdWUoKSYmRS5oYXNWYWx1ZSgpO2lmKEQmJm4udHJhbnNsYXRlKC14KlQuZ2V0UGl4ZWxzKGB4YCksLXgqRS5nZXRQaXhlbHMoYHlgKSksZil7dmFyIE89eCpwLGs9eCptO24uYmVnaW5QYXRoKCksbi5tb3ZlVG8oTyxrKSxuLmxpbmVUbyhpLGspLG4ubGluZVRvKGksbyksbi5saW5lVG8oTyxvKSxuLmNsb3NlUGF0aCgpLG4uY2xpcCgpfWlmKCFEKXt2YXIgQT12PT09YG1lZXRgJiZ4PT09YixqPXY9PT1gc2xpY2VgJiZTPT09YixNPXY9PT1gbWVldGAmJng9PT15LE49dj09PWBzbGljZWAmJlM9PT15O18uc3RhcnRzV2l0aChgeE1pZGApJiYoQXx8aikmJm4udHJhbnNsYXRlKGkvMi1DLzIsMCksXy5lbmRzV2l0aChgWU1pZGApJiYoTXx8TikmJm4udHJhbnNsYXRlKDAsby8yLXcvMiksXy5zdGFydHNXaXRoKGB4TWF4YCkmJihBfHxqKSYmbi50cmFuc2xhdGUoaS1DLDApLF8uZW5kc1dpdGgoYFlNYXhgKSYmKE18fE4pJiZuLnRyYW5zbGF0ZSgwLG8tdyl9c3dpdGNoKCEwKXtjYXNlIF89PT1gbm9uZWA6bi5zY2FsZSh5LGIpO2JyZWFrO2Nhc2Ugdj09PWBtZWV0YDpuLnNjYWxlKHgseCk7YnJlYWs7Y2FzZSB2PT09YHNsaWNlYDpuLnNjYWxlKFMsUyk7YnJlYWt9bi50cmFuc2xhdGUoLWMsLWwpfXN0YXJ0KGUpe3ZhcntlbmFibGVSZWRyYXc6dD0hMSxpZ25vcmVNb3VzZTpuPSExLGlnbm9yZUFuaW1hdGlvbjpyPSExLGlnbm9yZURpbWVuc2lvbnM6aT0hMSxpZ25vcmVDbGVhcjphPSExLGZvcmNlUmVkcmF3Om8sc2NhbGVXaWR0aDpzLHNjYWxlSGVpZ2h0OmMsb2Zmc2V0WDpsLG9mZnNldFk6dX09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LHtGUkFNRVJBVEU6ZCxtb3VzZTpmfT10aGlzLHA9MWUzL2Q7aWYodGhpcy5mcmFtZUR1cmF0aW9uPXAsdGhpcy5yZWFkeVByb21pc2U9bmV3IFByb21pc2UoZT0+e3RoaXMucmVzb2x2ZVJlYWR5PWV9KSx0aGlzLmlzUmVhZHkoKSYmdGhpcy5yZW5kZXIoZSxpLGEscyxjLGwsdSksdCl7dmFyIG09RGF0ZS5ub3coKSxoPW0sZz0wLF89KCk9PnttPURhdGUubm93KCksZz1tLWgsZz49cCYmKGg9bS1nJXAsdGhpcy5zaG91bGRVcGRhdGUocixvKSYmKHRoaXMucmVuZGVyKGUsaSxhLHMsYyxsLHUpLGYucnVuRXZlbnRzKCkpKSx0aGlzLmludGVydmFsSWQ9KDAsdXAuZGVmYXVsdCkoXyl9O258fGYuc3RhcnQoKSx0aGlzLmludGVydmFsSWQ9KDAsdXAuZGVmYXVsdCkoXyl9fXN0b3AoKXt0aGlzLmludGVydmFsSWQmJj0odXAuZGVmYXVsdC5jYW5jZWwodGhpcy5pbnRlcnZhbElkKSxudWxsKSx0aGlzLm1vdXNlLnN0b3AoKX1zaG91bGRVcGRhdGUoZSx0KXtpZighZSl7dmFye2ZyYW1lRHVyYXRpb246bn09dGhpcztpZih0aGlzLmFuaW1hdGlvbnMucmVkdWNlKChlLHQpPT50LnVwZGF0ZShuKXx8ZSwhMSkpcmV0dXJuITB9cmV0dXJuISEodHlwZW9mIHQ9PWBmdW5jdGlvbmAmJnQoKXx8IXRoaXMuaXNSZWFkeUxvY2smJnRoaXMuaXNSZWFkeSgpfHx0aGlzLm1vdXNlLmhhc0V2ZW50cygpKX1yZW5kZXIoZSx0LG4scixpLGEsbyl7dmFye0NMSUVOVF9XSURUSDpzLENMSUVOVF9IRUlHSFQ6Yyx2aWV3UG9ydDpsLGN0eDp1LGlzRmlyc3RSZW5kZXI6ZH09dGhpcyxmPXUuY2FudmFzO2wuY2xlYXIoKSxmLndpZHRoJiZmLmhlaWdodD9sLnNldEN1cnJlbnQoZi53aWR0aCxmLmhlaWdodCk6bC5zZXRDdXJyZW50KHMsYyk7dmFyIHA9ZS5nZXRTdHlsZShgd2lkdGhgKSxtPWUuZ2V0U3R5bGUoYGhlaWdodGApOyF0JiYoZHx8dHlwZW9mIHIhPWBudW1iZXJgJiZ0eXBlb2YgaSE9YG51bWJlcmApJiYocC5oYXNWYWx1ZSgpJiYoZi53aWR0aD1wLmdldFBpeGVscyhgeGApLGYuc3R5bGUmJihmLnN0eWxlLndpZHRoPWAke2Yud2lkdGh9cHhgKSksbS5oYXNWYWx1ZSgpJiYoZi5oZWlnaHQ9bS5nZXRQaXhlbHMoYHlgKSxmLnN0eWxlJiYoZi5zdHlsZS5oZWlnaHQ9YCR7Zi5oZWlnaHR9cHhgKSkpO3ZhciBoPWYuY2xpZW50V2lkdGh8fGYud2lkdGgsZz1mLmNsaWVudEhlaWdodHx8Zi5oZWlnaHQ7aWYodCYmcC5oYXNWYWx1ZSgpJiZtLmhhc1ZhbHVlKCkmJihoPXAuZ2V0UGl4ZWxzKGB4YCksZz1tLmdldFBpeGVscyhgeWApKSxsLnNldEN1cnJlbnQoaCxnKSx0eXBlb2YgYT09YG51bWJlcmAmJmUuZ2V0QXR0cmlidXRlKGB4YCwhMCkuc2V0VmFsdWUoYSksdHlwZW9mIG89PWBudW1iZXJgJiZlLmdldEF0dHJpYnV0ZShgeWAsITApLnNldFZhbHVlKG8pLHR5cGVvZiByPT1gbnVtYmVyYHx8dHlwZW9mIGk9PWBudW1iZXJgKXt2YXIgXz1rZihlLmdldEF0dHJpYnV0ZShgdmlld0JveGApLmdldFN0cmluZygpKSx2PTAseT0wO2lmKHR5cGVvZiByPT1gbnVtYmVyYCl7dmFyIGI9ZS5nZXRTdHlsZShgd2lkdGhgKTtiLmhhc1ZhbHVlKCk/dj1iLmdldFBpeGVscyhgeGApL3I6aXNOYU4oX1syXSl8fCh2PV9bMl0vcil9aWYodHlwZW9mIGk9PWBudW1iZXJgKXt2YXIgeD1lLmdldFN0eWxlKGBoZWlnaHRgKTt4Lmhhc1ZhbHVlKCk/eT14LmdldFBpeGVscyhgeWApL2k6aXNOYU4oX1szXSl8fCh5PV9bM10vaSl9dnx8PXkseXx8PXYsZS5nZXRBdHRyaWJ1dGUoYHdpZHRoYCwhMCkuc2V0VmFsdWUociksZS5nZXRBdHRyaWJ1dGUoYGhlaWdodGAsITApLnNldFZhbHVlKGkpO3ZhciBTPWUuZ2V0U3R5bGUoYHRyYW5zZm9ybWAsITAsITApO1Muc2V0VmFsdWUoYCR7Uy5nZXRTdHJpbmcoKX0gc2NhbGUoJHsxL3Z9LCAkezEveX0pYCl9bnx8dS5jbGVhclJlY3QoMCwwLGgsZyksZS5yZW5kZXIodSksZCYmKHRoaXMuaXNGaXJzdFJlbmRlcj0hMSl9fSxPcC5kZWZhdWx0V2luZG93PUVwLE9wLmRlZmF1bHRGZXRjaD1EcCx7ZGVmYXVsdEZldGNoOmtwfT1PcCxBcD10eXBlb2YgRE9NUGFyc2VyPGB1YD9ET01QYXJzZXI6bnVsbCxqcD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3ZhcntmZXRjaDplPWtwLERPTVBhcnNlcjp0PUFwfT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307dGhpcy5mZXRjaD1lLHRoaXMuRE9NUGFyc2VyPXR9cGFyc2UoZSl7dmFyIHQ9dGhpcztyZXR1cm4gVnUoZnVuY3Rpb24qKCl7cmV0dXJuIGUuc3RhcnRzV2l0aChgPGApP3QucGFyc2VGcm9tU3RyaW5nKGUpOnQubG9hZChlKX0pKCl9cGFyc2VGcm9tU3RyaW5nKGUpe3ZhciB0PW5ldyB0aGlzLkRPTVBhcnNlcjt0cnl7cmV0dXJuIHRoaXMuY2hlY2tEb2N1bWVudCh0LnBhcnNlRnJvbVN0cmluZyhlLGBpbWFnZS9zdmcreG1sYCkpfWNhdGNoe3JldHVybiB0aGlzLmNoZWNrRG9jdW1lbnQodC5wYXJzZUZyb21TdHJpbmcoZSxgdGV4dC94bWxgKSl9fWNoZWNrRG9jdW1lbnQoZSl7dmFyIHQ9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShgcGFyc2VyZXJyb3JgKVswXTtpZih0KXRocm93IEVycm9yKHQudGV4dENvbnRlbnQpO3JldHVybiBlfWxvYWQoZSl7dmFyIHQ9dGhpcztyZXR1cm4gVnUoZnVuY3Rpb24qKCl7dmFyIG49eWllbGQoeWllbGQgdC5mZXRjaChlKSkudGV4dCgpO3JldHVybiB0LnBhcnNlRnJvbVN0cmluZyhuKX0pKCl9fSxNcD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMudHlwZT1gdHJhbnNsYXRlYCx0aGlzLnBvaW50PW51bGwsdGhpcy5wb2ludD13cC5wYXJzZSh0KX1hcHBseShlKXt2YXJ7eDp0LHk6bn09dGhpcy5wb2ludDtlLnRyYW5zbGF0ZSh0fHwwLG58fDApfXVuYXBwbHkoZSl7dmFye3g6dCx5Om59PXRoaXMucG9pbnQ7ZS50cmFuc2xhdGUoLTEqdHx8MCwtMSpufHwwKX1hcHBseVRvUG9pbnQoZSl7dmFye3g6dCx5Om59PXRoaXMucG9pbnQ7ZS5hcHBseVRyYW5zZm9ybShbMSwwLDAsMSx0fHwwLG58fDBdKX19LE5wPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnR5cGU9YHJvdGF0ZWAsdGhpcy5hbmdsZT1udWxsLHRoaXMub3JpZ2luWD1udWxsLHRoaXMub3JpZ2luWT1udWxsLHRoaXMuY3g9MCx0aGlzLmN5PTA7dmFyIHI9a2YodCk7dGhpcy5hbmdsZT1uZXcgU3AoZSxgYW5nbGVgLHJbMF0pLHRoaXMub3JpZ2luWD1uWzBdLHRoaXMub3JpZ2luWT1uWzFdLHRoaXMuY3g9clsxXXx8MCx0aGlzLmN5PXJbMl18fDB9YXBwbHkoZSl7dmFye2N4OnQsY3k6bixvcmlnaW5YOnIsb3JpZ2luWTppLGFuZ2xlOmF9PXRoaXMsbz10K3IuZ2V0UGl4ZWxzKGB4YCkscz1uK2kuZ2V0UGl4ZWxzKGB5YCk7ZS50cmFuc2xhdGUobyxzKSxlLnJvdGF0ZShhLmdldFJhZGlhbnMoKSksZS50cmFuc2xhdGUoLW8sLXMpfXVuYXBwbHkoZSl7dmFye2N4OnQsY3k6bixvcmlnaW5YOnIsb3JpZ2luWTppLGFuZ2xlOmF9PXRoaXMsbz10K3IuZ2V0UGl4ZWxzKGB4YCkscz1uK2kuZ2V0UGl4ZWxzKGB5YCk7ZS50cmFuc2xhdGUobyxzKSxlLnJvdGF0ZSgtMSphLmdldFJhZGlhbnMoKSksZS50cmFuc2xhdGUoLW8sLXMpfWFwcGx5VG9Qb2ludChlKXt2YXJ7Y3g6dCxjeTpuLGFuZ2xlOnJ9PXRoaXMsaT1yLmdldFJhZGlhbnMoKTtlLmFwcGx5VHJhbnNmb3JtKFsxLDAsMCwxLHR8fDAsbnx8MF0pLGUuYXBwbHlUcmFuc2Zvcm0oW01hdGguY29zKGkpLE1hdGguc2luKGkpLC1NYXRoLnNpbihpKSxNYXRoLmNvcyhpKSwwLDBdKSxlLmFwcGx5VHJhbnNmb3JtKFsxLDAsMCwxLC10fHwwLC1ufHwwXSl9fSxQcD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy50eXBlPWBzY2FsZWAsdGhpcy5zY2FsZT1udWxsLHRoaXMub3JpZ2luWD1udWxsLHRoaXMub3JpZ2luWT1udWxsO3ZhciByPXdwLnBhcnNlU2NhbGUodCk7KHIueD09PTB8fHIueT09PTApJiYoci54PXhwLHIueT14cCksdGhpcy5zY2FsZT1yLHRoaXMub3JpZ2luWD1uWzBdLHRoaXMub3JpZ2luWT1uWzFdfWFwcGx5KGUpe3ZhcntzY2FsZTp7eDp0LHk6bn0sb3JpZ2luWDpyLG9yaWdpblk6aX09dGhpcyxhPXIuZ2V0UGl4ZWxzKGB4YCksbz1pLmdldFBpeGVscyhgeWApO2UudHJhbnNsYXRlKGEsbyksZS5zY2FsZSh0LG58fHQpLGUudHJhbnNsYXRlKC1hLC1vKX11bmFwcGx5KGUpe3ZhcntzY2FsZTp7eDp0LHk6bn0sb3JpZ2luWDpyLG9yaWdpblk6aX09dGhpcyxhPXIuZ2V0UGl4ZWxzKGB4YCksbz1pLmdldFBpeGVscyhgeWApO2UudHJhbnNsYXRlKGEsbyksZS5zY2FsZSgxL3QsMS9ufHx0KSxlLnRyYW5zbGF0ZSgtYSwtbyl9YXBwbHlUb1BvaW50KGUpe3Zhcnt4OnQseTpufT10aGlzLnNjYWxlO2UuYXBwbHlUcmFuc2Zvcm0oW3R8fDAsMCwwLG58fDAsMCwwXSl9fSxGcD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy50eXBlPWBtYXRyaXhgLHRoaXMubWF0cml4PVtdLHRoaXMub3JpZ2luWD1udWxsLHRoaXMub3JpZ2luWT1udWxsLHRoaXMubWF0cml4PWtmKHQpLHRoaXMub3JpZ2luWD1uWzBdLHRoaXMub3JpZ2luWT1uWzFdfWFwcGx5KGUpe3ZhcntvcmlnaW5YOnQsb3JpZ2luWTpuLG1hdHJpeDpyfT10aGlzLGk9dC5nZXRQaXhlbHMoYHhgKSxhPW4uZ2V0UGl4ZWxzKGB5YCk7ZS50cmFuc2xhdGUoaSxhKSxlLnRyYW5zZm9ybShyWzBdLHJbMV0sclsyXSxyWzNdLHJbNF0scls1XSksZS50cmFuc2xhdGUoLWksLWEpfXVuYXBwbHkoZSl7dmFye29yaWdpblg6dCxvcmlnaW5ZOm4sbWF0cml4OnJ9PXRoaXMsaT1yWzBdLGE9clsyXSxvPXJbNF0scz1yWzFdLGM9clszXSxsPXJbNV0sdT0wLGQ9MCxmPTEscD0xLyhpKihjKmYtbCpkKS1hKihzKmYtbCp1KStvKihzKmQtYyp1KSksbT10LmdldFBpeGVscyhgeGApLGg9bi5nZXRQaXhlbHMoYHlgKTtlLnRyYW5zbGF0ZShtLGgpLGUudHJhbnNmb3JtKHAqKGMqZi1sKmQpLHAqKGwqdS1zKmYpLHAqKG8qZC1hKmYpLHAqKGkqZi1vKnUpLHAqKGEqbC1vKmMpLHAqKG8qcy1pKmwpKSxlLnRyYW5zbGF0ZSgtbSwtaCl9YXBwbHlUb1BvaW50KGUpe2UuYXBwbHlUcmFuc2Zvcm0odGhpcy5tYXRyaXgpfX0sSXA9Y2xhc3MgZXh0ZW5kcyBGcHtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pLHRoaXMudHlwZT1gc2tld2AsdGhpcy5hbmdsZT1udWxsLHRoaXMuYW5nbGU9bmV3IFNwKGUsYGFuZ2xlYCx0KX19LExwPWNsYXNzIGV4dGVuZHMgSXB7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKSx0aGlzLnR5cGU9YHNrZXdYYCx0aGlzLm1hdHJpeD1bMSwwLE1hdGgudGFuKHRoaXMuYW5nbGUuZ2V0UmFkaWFucygpKSwxLDAsMF19fSxScD1jbGFzcyBleHRlbmRzIElwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPWBza2V3WWAsdGhpcy5tYXRyaXg9WzEsTWF0aC50YW4odGhpcy5hbmdsZS5nZXRSYWRpYW5zKCkpLDAsMSwwLDBdfX0senA9Y2xhc3MgZXtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5kb2N1bWVudD10LHRoaXMudHJhbnNmb3Jtcz1bXSxHZihuKS5mb3JFYWNoKHQ9PntpZih0IT09YG5vbmVgKXt2YXJbbixpXT1LZih0KSxhPWUudHJhbnNmb3JtVHlwZXNbbl07YSE9PXZvaWQgMCYmdGhpcy50cmFuc2Zvcm1zLnB1c2gobmV3IGEodGhpcy5kb2N1bWVudCxpLHIpKX19KX1zdGF0aWMgZnJvbUVsZW1lbnQodCxuKXt2YXIgcj1uLmdldFN0eWxlKGB0cmFuc2Zvcm1gLCExLCEwKSxbaSxhPWldPW4uZ2V0U3R5bGUoYHRyYW5zZm9ybS1vcmlnaW5gLCExLCEwKS5zcGxpdCgpLG89W2ksYV07cmV0dXJuIHIuaGFzVmFsdWUoKT9uZXcgZSh0LHIuZ2V0U3RyaW5nKCksbyk6bnVsbH1hcHBseShlKXtmb3IodmFye3RyYW5zZm9ybXM6dH09dGhpcyxuPXQubGVuZ3RoLHI9MDtyPG47cisrKXRbcl0uYXBwbHkoZSl9dW5hcHBseShlKXtmb3IodmFye3RyYW5zZm9ybXM6dH09dGhpcyxuPXQubGVuZ3RoLTE7bj49MDtuLS0pdFtuXS51bmFwcGx5KGUpfWFwcGx5VG9Qb2ludChlKXtmb3IodmFye3RyYW5zZm9ybXM6dH09dGhpcyxuPXQubGVuZ3RoLHI9MDtyPG47cisrKXRbcl0uYXBwbHlUb1BvaW50KGUpfX0senAudHJhbnNmb3JtVHlwZXM9e3RyYW5zbGF0ZTpNcCxyb3RhdGU6TnAsc2NhbGU6UHAsbWF0cml4OkZwLHNrZXdYOkxwLHNrZXdZOlJwfSxCcD1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExO2lmKHRoaXMuZG9jdW1lbnQ9ZSx0aGlzLm5vZGU9dCx0aGlzLmNhcHR1cmVUZXh0Tm9kZXM9bix0aGlzLmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3R5bGVzU3BlY2lmaWNpdHk9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmFuaW1hdGlvbkZyb3plbj0hMSx0aGlzLmFuaW1hdGlvbkZyb3plblZhbHVlPWBgLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSwhKCF0fHx0Lm5vZGVUeXBlIT09MSkpe0FycmF5LmZyb20odC5hdHRyaWJ1dGVzKS5mb3JFYWNoKHQ9Pnt2YXIgbj1BZih0Lm5vZGVOYW1lKTt0aGlzLmF0dHJpYnV0ZXNbbl09bmV3IFNwKGUsbix0LnZhbHVlKX0pLHRoaXMuYWRkU3R5bGVzRnJvbVN0eWxlRGVmaW5pdGlvbigpLHRoaXMuZ2V0QXR0cmlidXRlKGBzdHlsZWApLmhhc1ZhbHVlKCkmJnRoaXMuZ2V0QXR0cmlidXRlKGBzdHlsZWApLmdldFN0cmluZygpLnNwbGl0KGA7YCkubWFwKGU9PmUudHJpbSgpKS5mb3JFYWNoKHQ9PntpZih0KXt2YXJbbixyXT10LnNwbGl0KGA6YCkubWFwKGU9PmUudHJpbSgpKTt0aGlzLnN0eWxlc1tuXT1uZXcgU3AoZSxuLHIpfX0pO3ZhcntkZWZpbml0aW9uczpyfT1lLGk9dGhpcy5nZXRBdHRyaWJ1dGUoYGlkYCk7aS5oYXNWYWx1ZSgpJiYocltpLmdldFN0cmluZygpXXx8KHJbaS5nZXRTdHJpbmcoKV09dGhpcykpLEFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5mb3JFYWNoKHQ9PntpZih0Lm5vZGVUeXBlPT09MSl0aGlzLmFkZENoaWxkKHQpO2Vsc2UgaWYobiYmKHQubm9kZVR5cGU9PT0zfHx0Lm5vZGVUeXBlPT09NCkpe3ZhciByPWUuY3JlYXRlVGV4dE5vZGUodCk7ci5nZXRUZXh0KCkubGVuZ3RoPjAmJnRoaXMuYWRkQ2hpbGQocil9fSl9fWdldEF0dHJpYnV0ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbj10aGlzLmF0dHJpYnV0ZXNbZV07aWYoIW4mJnQpe3ZhciByPW5ldyBTcCh0aGlzLmRvY3VtZW50LGUsYGApO3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbZV09cixyfXJldHVybiBufHxTcC5lbXB0eSh0aGlzLmRvY3VtZW50KX1nZXRIcmVmQXR0cmlidXRlKCl7Zm9yKHZhciBlIGluIHRoaXMuYXR0cmlidXRlcylpZihlPT09YGhyZWZgfHxlLmVuZHNXaXRoKGA6aHJlZmApKXJldHVybiB0aGlzLmF0dHJpYnV0ZXNbZV07cmV0dXJuIFNwLmVtcHR5KHRoaXMuZG9jdW1lbnQpfWdldFN0eWxlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxyPXRoaXMuc3R5bGVzW2VdO2lmKHIpcmV0dXJuIHI7dmFyIGk9dGhpcy5nZXRBdHRyaWJ1dGUoZSk7aWYoaSE9bnVsbCYmaS5oYXNWYWx1ZSgpKXJldHVybiB0aGlzLnN0eWxlc1tlXT1pLGk7aWYoIW4pe3ZhcntwYXJlbnQ6YX09dGhpcztpZihhKXt2YXIgbz1hLmdldFN0eWxlKGUpO2lmKG8hPW51bGwmJm8uaGFzVmFsdWUoKSlyZXR1cm4gb319aWYodCl7dmFyIHM9bmV3IFNwKHRoaXMuZG9jdW1lbnQsZSxgYCk7cmV0dXJuIHRoaXMuc3R5bGVzW2VdPXMsc31yZXR1cm4gcnx8U3AuZW1wdHkodGhpcy5kb2N1bWVudCl9cmVuZGVyKGUpe2lmKCEodGhpcy5nZXRTdHlsZShgZGlzcGxheWApLmdldFN0cmluZygpPT09YG5vbmVgfHx0aGlzLmdldFN0eWxlKGB2aXNpYmlsaXR5YCkuZ2V0U3RyaW5nKCk9PT1gaGlkZGVuYCkpe2lmKGUuc2F2ZSgpLHRoaXMuZ2V0U3R5bGUoYG1hc2tgKS5oYXNWYWx1ZSgpKXt2YXIgdD10aGlzLmdldFN0eWxlKGBtYXNrYCkuZ2V0RGVmaW5pdGlvbigpO3QmJih0aGlzLmFwcGx5RWZmZWN0cyhlKSx0LmFwcGx5KGUsdGhpcykpfWVsc2UgaWYodGhpcy5nZXRTdHlsZShgZmlsdGVyYCkuZ2V0VmFsdWUoYG5vbmVgKSE9PWBub25lYCl7dmFyIG49dGhpcy5nZXRTdHlsZShgZmlsdGVyYCkuZ2V0RGVmaW5pdGlvbigpO24mJih0aGlzLmFwcGx5RWZmZWN0cyhlKSxuLmFwcGx5KGUsdGhpcykpfWVsc2UgdGhpcy5zZXRDb250ZXh0KGUpLHRoaXMucmVuZGVyQ2hpbGRyZW4oZSksdGhpcy5jbGVhckNvbnRleHQoZSk7ZS5yZXN0b3JlKCl9fXNldENvbnRleHQoZSl7fWFwcGx5RWZmZWN0cyhlKXt2YXIgdD16cC5mcm9tRWxlbWVudCh0aGlzLmRvY3VtZW50LHRoaXMpO3QmJnQuYXBwbHkoZSk7dmFyIG49dGhpcy5nZXRTdHlsZShgY2xpcC1wYXRoYCwhMSwhMCk7aWYobi5oYXNWYWx1ZSgpKXt2YXIgcj1uLmdldERlZmluaXRpb24oKTtyJiZyLmFwcGx5KGUpfX1jbGVhckNvbnRleHQoZSl7fXJlbmRlckNoaWxkcmVuKGUpe3RoaXMuY2hpbGRyZW4uZm9yRWFjaCh0PT57dC5yZW5kZXIoZSl9KX1hZGRDaGlsZCh0KXt2YXIgbj10IGluc3RhbmNlb2YgZT90OnRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtuLnBhcmVudD10aGlzLGUuaWdub3JlQ2hpbGRUeXBlcy5pbmNsdWRlcyhuLnR5cGUpfHx0aGlzLmNoaWxkcmVuLnB1c2gobil9bWF0Y2hlc1NlbGVjdG9yKGUpe3Zhcntub2RlOnR9PXRoaXM7aWYodHlwZW9mIHQubWF0Y2hlcz09YGZ1bmN0aW9uYClyZXR1cm4gdC5tYXRjaGVzKGUpO3ZhciBuPXQuZ2V0QXR0cmlidXRlPy5jYWxsKHQsYGNsYXNzYCk7cmV0dXJuIW58fG49PT1gYD8hMTpuLnNwbGl0KGAgYCkuc29tZSh0PT5gLiR7dH1gPT09ZSl9YWRkU3R5bGVzRnJvbVN0eWxlRGVmaW5pdGlvbigpe3ZhcntzdHlsZXM6ZSxzdHlsZXNTcGVjaWZpY2l0eTp0fT10aGlzLmRvY3VtZW50O2Zvcih2YXIgbiBpbiBlKWlmKCFuLnN0YXJ0c1dpdGgoYEBgKSYmdGhpcy5tYXRjaGVzU2VsZWN0b3Iobikpe3ZhciByPWVbbl0saT10W25dO2lmKHIpZm9yKHZhciBhIGluIHIpe3ZhciBvPXRoaXMuc3R5bGVzU3BlY2lmaWNpdHlbYV07bz09PXZvaWQgMCYmKG89YDAwMGApLGk+PW8mJih0aGlzLnN0eWxlc1thXT1yW2FdLHRoaXMuc3R5bGVzU3BlY2lmaWNpdHlbYV09aSl9fX1yZW1vdmVTdHlsZXMoZSx0KXtyZXR1cm4gdC5yZWR1Y2UoKHQsbik9Pnt2YXIgcj1lLmdldFN0eWxlKG4pO2lmKCFyLmhhc1ZhbHVlKCkpcmV0dXJuIHQ7dmFyIGk9ci5nZXRTdHJpbmcoKTtyZXR1cm4gci5zZXRWYWx1ZShgYCksWy4uLnQsW24saV1dfSxbXSl9cmVzdG9yZVN0eWxlcyhlLHQpe3QuZm9yRWFjaCh0PT57dmFyW24scl09dDtlLmdldFN0eWxlKG4sITApLnNldFZhbHVlKHIpfSl9aXNGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMucGFyZW50Py5jaGlsZHJlbi5pbmRleE9mKHRoaXMpPT09MH19LEJwLmlnbm9yZUNoaWxkVHlwZXM9W2B0aXRsZWBdLFZwPWNsYXNzIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKX19LEhwPWNsYXNzIGV7Y29uc3RydWN0b3IodCxuLHIsaSxhLG8pe3ZhciBzPW8/dHlwZW9mIG89PWBzdHJpbmdgP2UucGFyc2Uobyk6bzp7fTt0aGlzLmZvbnRGYW1pbHk9YXx8cy5mb250RmFtaWx5LHRoaXMuZm9udFNpemU9aXx8cy5mb250U2l6ZSx0aGlzLmZvbnRTdHlsZT10fHxzLmZvbnRTdHlsZSx0aGlzLmZvbnRXZWlnaHQ9cnx8cy5mb250V2VpZ2h0LHRoaXMuZm9udFZhcmlhbnQ9bnx8cy5mb250VmFyaWFudH1zdGF0aWMgcGFyc2UoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06YGAsbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPWBgLGk9YGAsYT1gYCxvPWBgLHM9YGAsYz1FZih0KS50cmltKCkuc3BsaXQoYCBgKSxsPXtmb250U2l6ZTohMSxmb250U3R5bGU6ITEsZm9udFdlaWdodDohMSxmb250VmFyaWFudDohMX07cmV0dXJuIGMuZm9yRWFjaCh0PT57c3dpdGNoKCEwKXtjYXNlIWwuZm9udFN0eWxlJiZlLnN0eWxlcy5pbmNsdWRlcyh0KTp0IT09YGluaGVyaXRgJiYocj10KSxsLmZvbnRTdHlsZT0hMDticmVhaztjYXNlIWwuZm9udFZhcmlhbnQmJmUudmFyaWFudHMuaW5jbHVkZXModCk6dCE9PWBpbmhlcml0YCYmKGk9dCksbC5mb250U3R5bGU9ITAsbC5mb250VmFyaWFudD0hMDticmVhaztjYXNlIWwuZm9udFdlaWdodCYmZS53ZWlnaHRzLmluY2x1ZGVzKHQpOnQhPT1gaW5oZXJpdGAmJihhPXQpLGwuZm9udFN0eWxlPSEwLGwuZm9udFZhcmlhbnQ9ITAsbC5mb250V2VpZ2h0PSEwO2JyZWFrO2Nhc2UhbC5mb250U2l6ZTp0IT09YGluaGVyaXRgJiYoW29dPXQuc3BsaXQoYC9gKSksbC5mb250U3R5bGU9ITAsbC5mb250VmFyaWFudD0hMCxsLmZvbnRXZWlnaHQ9ITAsbC5mb250U2l6ZT0hMDticmVhaztkZWZhdWx0OnQhPT1gaW5oZXJpdGAmJihzKz10KX19KSxuZXcgZShyLGksYSxvLHMsbil9dG9TdHJpbmcoKXtyZXR1cm5bWWYodGhpcy5mb250U3R5bGUpLHRoaXMuZm9udFZhcmlhbnQsWGYodGhpcy5mb250V2VpZ2h0KSx0aGlzLmZvbnRTaXplLEpmKHRoaXMuZm9udEZhbWlseSldLmpvaW4oYCBgKS50cmltKCl9fSxIcC5zdHlsZXM9YG5vcm1hbHxpdGFsaWN8b2JsaXF1ZXxpbmhlcml0YCxIcC52YXJpYW50cz1gbm9ybWFsfHNtYWxsLWNhcHN8aW5oZXJpdGAsSHAud2VpZ2h0cz1gbm9ybWFsfGJvbGR8Ym9sZGVyfGxpZ2h0ZXJ8MTAwfDIwMHwzMDB8NDAwfDUwMHw2MDB8NzAwfDgwMHw5MDB8aW5oZXJpdGAsVXA9Y2xhc3N7Y29uc3RydWN0b3IoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06TmFOLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOk5hTixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpOYU4scj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106TmFOO3RoaXMueDE9ZSx0aGlzLnkxPXQsdGhpcy54Mj1uLHRoaXMueTI9cix0aGlzLmFkZFBvaW50KGUsdCksdGhpcy5hZGRQb2ludChuLHIpfWdldCB4KCl7cmV0dXJuIHRoaXMueDF9Z2V0IHkoKXtyZXR1cm4gdGhpcy55MX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54Mi10aGlzLngxfWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55Mi10aGlzLnkxfWFkZFBvaW50KGUsdCl7ZSE9PXZvaWQgMCYmKChpc05hTih0aGlzLngxKXx8aXNOYU4odGhpcy54MikpJiYodGhpcy54MT1lLHRoaXMueDI9ZSksZTx0aGlzLngxJiYodGhpcy54MT1lKSxlPnRoaXMueDImJih0aGlzLngyPWUpKSx0IT09dm9pZCAwJiYoKGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLnkyKSkmJih0aGlzLnkxPXQsdGhpcy55Mj10KSx0PHRoaXMueTEmJih0aGlzLnkxPXQpLHQ+dGhpcy55MiYmKHRoaXMueTI9dCkpfWFkZFgoZSl7dGhpcy5hZGRQb2ludChlLG51bGwpfWFkZFkoZSl7dGhpcy5hZGRQb2ludChudWxsLGUpfWFkZEJvdW5kaW5nQm94KGUpe2lmKGUpe3Zhcnt4MTp0LHkxOm4seDI6cix5MjppfT1lO3RoaXMuYWRkUG9pbnQodCxuKSx0aGlzLmFkZFBvaW50KHIsaSl9fXN1bUN1YmljKGUsdCxuLHIsaSl7cmV0dXJuKDEtZSkqKjMqdCszKigxLWUpKioyKmUqbiszKigxLWUpKmUqKjIqcitlKiozKml9YmV6aWVyQ3VydmVBZGQoZSx0LG4scixpKXt2YXIgYT02KnQtMTIqbis2KnIsbz0tMyp0Kzkqbi05KnIrMyppLHM9MypuLTMqdDtpZihvPT09MCl7aWYoYT09PTApcmV0dXJuO3ZhciBjPS1zL2E7MDxjJiZjPDEmJihlP3RoaXMuYWRkWCh0aGlzLnN1bUN1YmljKGMsdCxuLHIsaSkpOnRoaXMuYWRkWSh0aGlzLnN1bUN1YmljKGMsdCxuLHIsaSkpKTtyZXR1cm59dmFyIGw9YSoqMi00KnMqbztpZighKGw8MCkpe3ZhciB1PSgtYStNYXRoLnNxcnQobCkpLygyKm8pOzA8dSYmdTwxJiYoZT90aGlzLmFkZFgodGhpcy5zdW1DdWJpYyh1LHQsbixyLGkpKTp0aGlzLmFkZFkodGhpcy5zdW1DdWJpYyh1LHQsbixyLGkpKSk7dmFyIGQ9KC1hLU1hdGguc3FydChsKSkvKDIqbyk7MDxkJiZkPDEmJihlP3RoaXMuYWRkWCh0aGlzLnN1bUN1YmljKGQsdCxuLHIsaSkpOnRoaXMuYWRkWSh0aGlzLnN1bUN1YmljKGQsdCxuLHIsaSkpKX19YWRkQmV6aWVyQ3VydmUoZSx0LG4scixpLGEsbyxzKXt0aGlzLmFkZFBvaW50KGUsdCksdGhpcy5hZGRQb2ludChvLHMpLHRoaXMuYmV6aWVyQ3VydmVBZGQoITAsZSxuLGksbyksdGhpcy5iZXppZXJDdXJ2ZUFkZCghMSx0LHIsYSxzKX1hZGRRdWFkcmF0aWNDdXJ2ZShlLHQsbixyLGksYSl7dmFyIG89ZSsyLzMqKG4tZSkscz10KzIvMyooci10KSxjPW8rMS8zKihpLWUpLGw9cysxLzMqKGEtdCk7dGhpcy5hZGRCZXppZXJDdXJ2ZShlLHQsbyxjLHMsbCxpLGEpfWlzUG9pbnRJbkJveChlLHQpe3Zhcnt4MTpuLHkxOnIseDI6aSx5MjphfT10aGlzO3JldHVybiBuPD1lJiZlPD1pJiZyPD10JiZ0PD1hfX0sV3A9Y2xhc3MgZXh0ZW5kcyBYe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUucmVwbGFjZSgvKFsrXC0uXSlccysvZ20sYCQxYCkucmVwbGFjZSgvW15NbVp6TGxIaFZ2Q2NTc1FxVHRBYWVcZFxzLiwrLV0uKi9nLGBgKSksdGhpcy5jb250cm9sPW51bGwsdGhpcy5zdGFydD1udWxsLHRoaXMuY3VycmVudD1udWxsLHRoaXMuY29tbWFuZD1udWxsLHRoaXMuY29tbWFuZHM9dGhpcy5jb21tYW5kcyx0aGlzLmk9LTEsdGhpcy5wcmV2aW91c0NvbW1hbmQ9bnVsbCx0aGlzLnBvaW50cz1bXSx0aGlzLmFuZ2xlcz1bXX1yZXNldCgpe3RoaXMuaT0tMSx0aGlzLmNvbW1hbmQ9bnVsbCx0aGlzLnByZXZpb3VzQ29tbWFuZD1udWxsLHRoaXMuc3RhcnQ9bmV3IHdwKDAsMCksdGhpcy5jb250cm9sPW5ldyB3cCgwLDApLHRoaXMuY3VycmVudD1uZXcgd3AoMCwwKSx0aGlzLnBvaW50cz1bXSx0aGlzLmFuZ2xlcz1bXX1pc0VuZCgpe3ZhcntpOmUsY29tbWFuZHM6dH09dGhpcztyZXR1cm4gZT49dC5sZW5ndGgtMX1uZXh0KCl7dmFyIGU9dGhpcy5jb21tYW5kc1srK3RoaXMuaV07cmV0dXJuIHRoaXMucHJldmlvdXNDb21tYW5kPXRoaXMuY29tbWFuZCx0aGlzLmNvbW1hbmQ9ZSxlfWdldFBvaW50KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmB4YCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpgeWAsbj1uZXcgd3AodGhpcy5jb21tYW5kW2VdLHRoaXMuY29tbWFuZFt0XSk7cmV0dXJuIHRoaXMubWFrZUFic29sdXRlKG4pfWdldEFzQ29udHJvbFBvaW50KGUsdCl7dmFyIG49dGhpcy5nZXRQb2ludChlLHQpO3JldHVybiB0aGlzLmNvbnRyb2w9bixufWdldEFzQ3VycmVudFBvaW50KGUsdCl7dmFyIG49dGhpcy5nZXRQb2ludChlLHQpO3JldHVybiB0aGlzLmN1cnJlbnQ9bixufWdldFJlZmxlY3RlZENvbnRyb2xQb2ludCgpe3ZhciBlPXRoaXMucHJldmlvdXNDb21tYW5kLnR5cGU7aWYoZSE9PVguQ1VSVkVfVE8mJmUhPT1YLlNNT09USF9DVVJWRV9UTyYmZSE9PVguUVVBRF9UTyYmZSE9PVguU01PT1RIX1FVQURfVE8pcmV0dXJuIHRoaXMuY3VycmVudDt2YXJ7Y3VycmVudDp7eDp0LHk6bn0sY29udHJvbDp7eDpyLHk6aX19PXRoaXM7cmV0dXJuIG5ldyB3cCgyKnQtciwyKm4taSl9bWFrZUFic29sdXRlKGUpe2lmKHRoaXMuY29tbWFuZC5yZWxhdGl2ZSl7dmFye3g6dCx5Om59PXRoaXMuY3VycmVudDtlLngrPXQsZS55Kz1ufXJldHVybiBlfWFkZE1hcmtlcihlLHQsbil7dmFye3BvaW50czpyLGFuZ2xlczppfT10aGlzO24mJmkubGVuZ3RoPjAmJiFpW2kubGVuZ3RoLTFdJiYoaVtpLmxlbmd0aC0xXT1yW3IubGVuZ3RoLTFdLmFuZ2xlVG8obikpLHRoaXMuYWRkTWFya2VyQW5nbGUoZSx0P3QuYW5nbGVUbyhlKTpudWxsKX1hZGRNYXJrZXJBbmdsZShlLHQpe3RoaXMucG9pbnRzLnB1c2goZSksdGhpcy5hbmdsZXMucHVzaCh0KX1nZXRNYXJrZXJQb2ludHMoKXtyZXR1cm4gdGhpcy5wb2ludHN9Z2V0TWFya2VyQW5nbGVzKCl7Zm9yKHZhcnthbmdsZXM6ZX09dGhpcyx0PWUubGVuZ3RoLG49MDtuPHQ7bisrKWlmKCFlW25dKXtmb3IodmFyIHI9bisxO3I8dDtyKyspaWYoZVtyXSl7ZVtuXT1lW3JdO2JyZWFrfX1yZXR1cm4gZX19LEdwPWNsYXNzIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubW9kaWZpZWRFbVNpemVTdGFjaz0hMX1jYWxjdWxhdGVPcGFjaXR5KCl7Zm9yKHZhciBlPTEsdD10aGlzO3Q7KXt2YXIgbj10LmdldFN0eWxlKGBvcGFjaXR5YCwhMSwhMCk7bi5oYXNWYWx1ZSghMCkmJihlKj1uLmdldE51bWJlcigpKSx0PXQucGFyZW50fXJldHVybiBlfXNldENvbnRleHQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO2lmKCF0KXt2YXIgbj10aGlzLmdldFN0eWxlKGBmaWxsYCkscj10aGlzLmdldFN0eWxlKGBmaWxsLW9wYWNpdHlgKSxpPXRoaXMuZ2V0U3R5bGUoYHN0cm9rZWApLGE9dGhpcy5nZXRTdHlsZShgc3Ryb2tlLW9wYWNpdHlgKTtpZihuLmlzVXJsRGVmaW5pdGlvbigpKXt2YXIgbz1uLmdldEZpbGxTdHlsZURlZmluaXRpb24odGhpcyxyKTtvJiYoZS5maWxsU3R5bGU9byl9ZWxzZSBpZihuLmhhc1ZhbHVlKCkpe24uZ2V0U3RyaW5nKCk9PT1gY3VycmVudENvbG9yYCYmbi5zZXRWYWx1ZSh0aGlzLmdldFN0eWxlKGBjb2xvcmApLmdldENvbG9yKCkpO3ZhciBzPW4uZ2V0Q29sb3IoKTtzIT09YGluaGVyaXRgJiYoZS5maWxsU3R5bGU9cz09PWBub25lYD9gcmdiYSgwLDAsMCwwKWA6cyl9aWYoci5oYXNWYWx1ZSgpJiYoZS5maWxsU3R5bGU9bmV3IFNwKHRoaXMuZG9jdW1lbnQsYGZpbGxgLGUuZmlsbFN0eWxlKS5hZGRPcGFjaXR5KHIpLmdldENvbG9yKCkpLGkuaXNVcmxEZWZpbml0aW9uKCkpe3ZhciBjPWkuZ2V0RmlsbFN0eWxlRGVmaW5pdGlvbih0aGlzLGEpO2MmJihlLnN0cm9rZVN0eWxlPWMpfWVsc2UgaWYoaS5oYXNWYWx1ZSgpKXtpLmdldFN0cmluZygpPT09YGN1cnJlbnRDb2xvcmAmJmkuc2V0VmFsdWUodGhpcy5nZXRTdHlsZShgY29sb3JgKS5nZXRDb2xvcigpKTt2YXIgbD1pLmdldFN0cmluZygpO2whPT1gaW5oZXJpdGAmJihlLnN0cm9rZVN0eWxlPWw9PT1gbm9uZWA/YHJnYmEoMCwwLDAsMClgOmwpfWEuaGFzVmFsdWUoKSYmKGUuc3Ryb2tlU3R5bGU9bmV3IFNwKHRoaXMuZG9jdW1lbnQsYHN0cm9rZWAsZS5zdHJva2VTdHlsZSkuYWRkT3BhY2l0eShhKS5nZXRTdHJpbmcoKSk7dmFyIHU9dGhpcy5nZXRTdHlsZShgc3Ryb2tlLXdpZHRoYCk7dS5oYXNWYWx1ZSgpJiYoZS5saW5lV2lkdGg9dS5nZXRQaXhlbHMoKXx8eHApO3ZhciBkPXRoaXMuZ2V0U3R5bGUoYHN0cm9rZS1saW5lY2FwYCksZj10aGlzLmdldFN0eWxlKGBzdHJva2UtbGluZWpvaW5gKSxwPXRoaXMuZ2V0U3R5bGUoYHN0cm9rZS1taXRlcmxpbWl0YCksbT10aGlzLmdldFN0eWxlKGBzdHJva2UtZGFzaGFycmF5YCksaD10aGlzLmdldFN0eWxlKGBzdHJva2UtZGFzaG9mZnNldGApO2lmKGQuaGFzVmFsdWUoKSYmKGUubGluZUNhcD1kLmdldFN0cmluZygpKSxmLmhhc1ZhbHVlKCkmJihlLmxpbmVKb2luPWYuZ2V0U3RyaW5nKCkpLHAuaGFzVmFsdWUoKSYmKGUubWl0ZXJMaW1pdD1wLmdldE51bWJlcigpKSxtLmhhc1ZhbHVlKCkmJm0uZ2V0U3RyaW5nKCkhPT1gbm9uZWApe3ZhciBnPWtmKG0uZ2V0U3RyaW5nKCkpO2Uuc2V0TGluZURhc2g9PT12b2lkIDA/ZS53ZWJraXRMaW5lRGFzaD09PXZvaWQgMD9lLm1vekRhc2ghPT12b2lkIDAmJiEoZy5sZW5ndGg9PT0xJiZnWzBdPT09MCkmJihlLm1vekRhc2g9Zyk6ZS53ZWJraXRMaW5lRGFzaD1nOmUuc2V0TGluZURhc2goZyk7dmFyIF89aC5nZXRQaXhlbHMoKTtlLmxpbmVEYXNoT2Zmc2V0PT09dm9pZCAwP2Uud2Via2l0TGluZURhc2hPZmZzZXQ9PT12b2lkIDA/ZS5tb3pEYXNoT2Zmc2V0IT09dm9pZCAwJiYoZS5tb3pEYXNoT2Zmc2V0PV8pOmUud2Via2l0TGluZURhc2hPZmZzZXQ9XzplLmxpbmVEYXNoT2Zmc2V0PV99fWlmKHRoaXMubW9kaWZpZWRFbVNpemVTdGFjaz0hMSxlLmZvbnQhPT12b2lkIDApe3ZhciB2PXRoaXMuZ2V0U3R5bGUoYGZvbnRgKSx5PXRoaXMuZ2V0U3R5bGUoYGZvbnQtc3R5bGVgKSxiPXRoaXMuZ2V0U3R5bGUoYGZvbnQtdmFyaWFudGApLHg9dGhpcy5nZXRTdHlsZShgZm9udC13ZWlnaHRgKSxTPXRoaXMuZ2V0U3R5bGUoYGZvbnQtc2l6ZWApLEM9dGhpcy5nZXRTdHlsZShgZm9udC1mYW1pbHlgKSx3PW5ldyBIcCh5LmdldFN0cmluZygpLGIuZ2V0U3RyaW5nKCkseC5nZXRTdHJpbmcoKSxTLmhhc1ZhbHVlKCk/YCR7Uy5nZXRQaXhlbHMoITApfXB4YDpgYCxDLmdldFN0cmluZygpLEhwLnBhcnNlKHYuZ2V0U3RyaW5nKCksZS5mb250KSk7eS5zZXRWYWx1ZSh3LmZvbnRTdHlsZSksYi5zZXRWYWx1ZSh3LmZvbnRWYXJpYW50KSx4LnNldFZhbHVlKHcuZm9udFdlaWdodCksUy5zZXRWYWx1ZSh3LmZvbnRTaXplKSxDLnNldFZhbHVlKHcuZm9udEZhbWlseSksZS5mb250PXcudG9TdHJpbmcoKSxTLmlzUGl4ZWxzKCkmJih0aGlzLmRvY3VtZW50LmVtU2l6ZT1TLmdldFBpeGVscygpLHRoaXMubW9kaWZpZWRFbVNpemVTdGFjaz0hMCl9dHx8KHRoaXMuYXBwbHlFZmZlY3RzKGUpLGUuZ2xvYmFsQWxwaGE9dGhpcy5jYWxjdWxhdGVPcGFjaXR5KCkpfWNsZWFyQ29udGV4dChlKXtzdXBlci5jbGVhckNvbnRleHQoZSksdGhpcy5tb2RpZmllZEVtU2l6ZVN0YWNrJiZ0aGlzLmRvY3VtZW50LnBvcEVtU2l6ZSgpfX0sS3A9Y2xhc3MgZSBleHRlbmRzIEdwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPWBwYXRoYCx0aGlzLnBhdGhQYXJzZXI9bnVsbCx0aGlzLnBhdGhQYXJzZXI9bmV3IFdwKHRoaXMuZ2V0QXR0cmlidXRlKGBkYCkuZ2V0U3RyaW5nKCkpfXBhdGgoZSl7dmFye3BhdGhQYXJzZXI6dH09dGhpcyxuPW5ldyBVcDtmb3IodC5yZXNldCgpLGUmJmUuYmVnaW5QYXRoKCk7IXQuaXNFbmQoKTspc3dpdGNoKHQubmV4dCgpLnR5cGUpe2Nhc2UgV3AuTU9WRV9UTzp0aGlzLnBhdGhNKGUsbik7YnJlYWs7Y2FzZSBXcC5MSU5FX1RPOnRoaXMucGF0aEwoZSxuKTticmVhaztjYXNlIFdwLkhPUklaX0xJTkVfVE86dGhpcy5wYXRoSChlLG4pO2JyZWFrO2Nhc2UgV3AuVkVSVF9MSU5FX1RPOnRoaXMucGF0aFYoZSxuKTticmVhaztjYXNlIFdwLkNVUlZFX1RPOnRoaXMucGF0aEMoZSxuKTticmVhaztjYXNlIFdwLlNNT09USF9DVVJWRV9UTzp0aGlzLnBhdGhTKGUsbik7YnJlYWs7Y2FzZSBXcC5RVUFEX1RPOnRoaXMucGF0aFEoZSxuKTticmVhaztjYXNlIFdwLlNNT09USF9RVUFEX1RPOnRoaXMucGF0aFQoZSxuKTticmVhaztjYXNlIFdwLkFSQzp0aGlzLnBhdGhBKGUsbik7YnJlYWs7Y2FzZSBXcC5DTE9TRV9QQVRIOnRoaXMucGF0aFooZSxuKTticmVha31yZXR1cm4gbn1nZXRCb3VuZGluZ0JveChlKXtyZXR1cm4gdGhpcy5wYXRoKCl9Z2V0TWFya2Vycygpe3ZhcntwYXRoUGFyc2VyOmV9PXRoaXMsdD1lLmdldE1hcmtlclBvaW50cygpLG49ZS5nZXRNYXJrZXJBbmdsZXMoKTtyZXR1cm4gdC5tYXAoKGUsdCk9PltlLG5bdF1dKX1yZW5kZXJDaGlsZHJlbihlKXt0aGlzLnBhdGgoZSksdGhpcy5kb2N1bWVudC5zY3JlZW4ubW91c2UuY2hlY2tQYXRoKHRoaXMsZSk7dmFyIHQ9dGhpcy5nZXRTdHlsZShgZmlsbC1ydWxlYCk7ZS5maWxsU3R5bGUhPT1gYCYmKHQuZ2V0U3RyaW5nKGBpbmhlcml0YCk9PT1gaW5oZXJpdGA/ZS5maWxsKCk6ZS5maWxsKHQuZ2V0U3RyaW5nKCkpKSxlLnN0cm9rZVN0eWxlIT09YGAmJih0aGlzLmdldEF0dHJpYnV0ZShgdmVjdG9yLWVmZmVjdGApLmdldFN0cmluZygpPT09YG5vbi1zY2FsaW5nLXN0cm9rZWA/KGUuc2F2ZSgpLGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxlLnN0cm9rZSgpLGUucmVzdG9yZSgpKTplLnN0cm9rZSgpKTt2YXIgbj10aGlzLmdldE1hcmtlcnMoKTtpZihuKXt2YXIgcj1uLmxlbmd0aC0xLGk9dGhpcy5nZXRTdHlsZShgbWFya2VyLXN0YXJ0YCksYT10aGlzLmdldFN0eWxlKGBtYXJrZXItbWlkYCksbz10aGlzLmdldFN0eWxlKGBtYXJrZXItZW5kYCk7aWYoaS5pc1VybERlZmluaXRpb24oKSl7dmFyIHM9aS5nZXREZWZpbml0aW9uKCksW2MsbF09blswXTtzLnJlbmRlcihlLGMsbCl9aWYoYS5pc1VybERlZmluaXRpb24oKSlmb3IodmFyIHU9YS5nZXREZWZpbml0aW9uKCksZD0xO2Q8cjtkKyspe3ZhcltmLHBdPW5bZF07dS5yZW5kZXIoZSxmLHApfWlmKG8uaXNVcmxEZWZpbml0aW9uKCkpe3ZhciBtPW8uZ2V0RGVmaW5pdGlvbigpLFtoLGddPW5bcl07bS5yZW5kZXIoZSxoLGcpfX19c3RhdGljIHBhdGhNKGUpe3ZhciB0PWUuZ2V0QXNDdXJyZW50UG9pbnQoKTtyZXR1cm4gZS5zdGFydD1lLmN1cnJlbnQse3BvaW50OnR9fXBhdGhNKHQsbil7dmFye3BhdGhQYXJzZXI6cn09dGhpcyx7cG9pbnQ6aX09ZS5wYXRoTShyKSx7eDphLHk6b309aTtyLmFkZE1hcmtlcihpKSxuLmFkZFBvaW50KGEsbyksdCYmdC5tb3ZlVG8oYSxvKX1zdGF0aWMgcGF0aEwoZSl7dmFye2N1cnJlbnQ6dH09ZTtyZXR1cm57Y3VycmVudDp0LHBvaW50OmUuZ2V0QXNDdXJyZW50UG9pbnQoKX19cGF0aEwodCxuKXt2YXJ7cGF0aFBhcnNlcjpyfT10aGlzLHtjdXJyZW50OmkscG9pbnQ6YX09ZS5wYXRoTChyKSx7eDpvLHk6c309YTtyLmFkZE1hcmtlcihhLGkpLG4uYWRkUG9pbnQobyxzKSx0JiZ0LmxpbmVUbyhvLHMpfXN0YXRpYyBwYXRoSChlKXt2YXJ7Y3VycmVudDp0LGNvbW1hbmQ6bn09ZSxyPW5ldyB3cCgobi5yZWxhdGl2ZT90Lng6MCkrbi54LHQueSk7cmV0dXJuIGUuY3VycmVudD1yLHtjdXJyZW50OnQscG9pbnQ6cn19cGF0aEgodCxuKXt2YXJ7cGF0aFBhcnNlcjpyfT10aGlzLHtjdXJyZW50OmkscG9pbnQ6YX09ZS5wYXRoSChyKSx7eDpvLHk6c309YTtyLmFkZE1hcmtlcihhLGkpLG4uYWRkUG9pbnQobyxzKSx0JiZ0LmxpbmVUbyhvLHMpfXN0YXRpYyBwYXRoVihlKXt2YXJ7Y3VycmVudDp0LGNvbW1hbmQ6bn09ZSxyPW5ldyB3cCh0LngsKG4ucmVsYXRpdmU/dC55OjApK24ueSk7cmV0dXJuIGUuY3VycmVudD1yLHtjdXJyZW50OnQscG9pbnQ6cn19cGF0aFYodCxuKXt2YXJ7cGF0aFBhcnNlcjpyfT10aGlzLHtjdXJyZW50OmkscG9pbnQ6YX09ZS5wYXRoVihyKSx7eDpvLHk6c309YTtyLmFkZE1hcmtlcihhLGkpLG4uYWRkUG9pbnQobyxzKSx0JiZ0LmxpbmVUbyhvLHMpfXN0YXRpYyBwYXRoQyhlKXt2YXJ7Y3VycmVudDp0fT1lO3JldHVybntjdXJyZW50OnQscG9pbnQ6ZS5nZXRQb2ludChgeDFgLGB5MWApLGNvbnRyb2xQb2ludDplLmdldEFzQ29udHJvbFBvaW50KGB4MmAsYHkyYCksY3VycmVudFBvaW50OmUuZ2V0QXNDdXJyZW50UG9pbnQoKX19cGF0aEModCxuKXt2YXJ7cGF0aFBhcnNlcjpyfT10aGlzLHtjdXJyZW50OmkscG9pbnQ6YSxjb250cm9sUG9pbnQ6byxjdXJyZW50UG9pbnQ6c309ZS5wYXRoQyhyKTtyLmFkZE1hcmtlcihzLG8sYSksbi5hZGRCZXppZXJDdXJ2ZShpLngsaS55LGEueCxhLnksby54LG8ueSxzLngscy55KSx0JiZ0LmJlemllckN1cnZlVG8oYS54LGEueSxvLngsby55LHMueCxzLnkpfXN0YXRpYyBwYXRoUyhlKXt2YXJ7Y3VycmVudDp0fT1lO3JldHVybntjdXJyZW50OnQscG9pbnQ6ZS5nZXRSZWZsZWN0ZWRDb250cm9sUG9pbnQoKSxjb250cm9sUG9pbnQ6ZS5nZXRBc0NvbnRyb2xQb2ludChgeDJgLGB5MmApLGN1cnJlbnRQb2ludDplLmdldEFzQ3VycmVudFBvaW50KCl9fXBhdGhTKHQsbil7dmFye3BhdGhQYXJzZXI6cn09dGhpcyx7Y3VycmVudDppLHBvaW50OmEsY29udHJvbFBvaW50Om8sY3VycmVudFBvaW50OnN9PWUucGF0aFMocik7ci5hZGRNYXJrZXIocyxvLGEpLG4uYWRkQmV6aWVyQ3VydmUoaS54LGkueSxhLngsYS55LG8ueCxvLnkscy54LHMueSksdCYmdC5iZXppZXJDdXJ2ZVRvKGEueCxhLnksby54LG8ueSxzLngscy55KX1zdGF0aWMgcGF0aFEoZSl7dmFye2N1cnJlbnQ6dH09ZTtyZXR1cm57Y3VycmVudDp0LGNvbnRyb2xQb2ludDplLmdldEFzQ29udHJvbFBvaW50KGB4MWAsYHkxYCksY3VycmVudFBvaW50OmUuZ2V0QXNDdXJyZW50UG9pbnQoKX19cGF0aFEodCxuKXt2YXJ7cGF0aFBhcnNlcjpyfT10aGlzLHtjdXJyZW50OmksY29udHJvbFBvaW50OmEsY3VycmVudFBvaW50Om99PWUucGF0aFEocik7ci5hZGRNYXJrZXIobyxhLGEpLG4uYWRkUXVhZHJhdGljQ3VydmUoaS54LGkueSxhLngsYS55LG8ueCxvLnkpLHQmJnQucXVhZHJhdGljQ3VydmVUbyhhLngsYS55LG8ueCxvLnkpfXN0YXRpYyBwYXRoVChlKXt2YXJ7Y3VycmVudDp0fT1lLG49ZS5nZXRSZWZsZWN0ZWRDb250cm9sUG9pbnQoKTtyZXR1cm4gZS5jb250cm9sPW4se2N1cnJlbnQ6dCxjb250cm9sUG9pbnQ6bixjdXJyZW50UG9pbnQ6ZS5nZXRBc0N1cnJlbnRQb2ludCgpfX1wYXRoVCh0LG4pe3ZhcntwYXRoUGFyc2VyOnJ9PXRoaXMse2N1cnJlbnQ6aSxjb250cm9sUG9pbnQ6YSxjdXJyZW50UG9pbnQ6b309ZS5wYXRoVChyKTtyLmFkZE1hcmtlcihvLGEsYSksbi5hZGRRdWFkcmF0aWNDdXJ2ZShpLngsaS55LGEueCxhLnksby54LG8ueSksdCYmdC5xdWFkcmF0aWNDdXJ2ZVRvKGEueCxhLnksby54LG8ueSl9c3RhdGljIHBhdGhBKGUpe3ZhcntjdXJyZW50OnQsY29tbWFuZDpufT1lLHtyWDpyLHJZOmkseFJvdDphLGxBcmNGbGFnOm8sc3dlZXBGbGFnOnN9PW4sYz1NYXRoLlBJLzE4MCphLGw9ZS5nZXRBc0N1cnJlbnRQb2ludCgpLHU9bmV3IHdwKE1hdGguY29zKGMpKih0LngtbC54KS8yK01hdGguc2luKGMpKih0LnktbC55KS8yLC1NYXRoLnNpbihjKSoodC54LWwueCkvMitNYXRoLmNvcyhjKSoodC55LWwueSkvMiksZD11LngqKjIvcioqMit1LnkqKjIvaSoqMjtkPjEmJihyKj1NYXRoLnNxcnQoZCksaSo9TWF0aC5zcXJ0KGQpKTt2YXIgZj0obz09PXM/LTE6MSkqTWF0aC5zcXJ0KChyKioyKmkqKjItcioqMip1LnkqKjItaSoqMip1LngqKjIpLyhyKioyKnUueSoqMitpKioyKnUueCoqMikpO2lzTmFOKGYpJiYoZj0wKTt2YXIgcD1uZXcgd3AoZipyKnUueS9pLGYqLWkqdS54L3IpLG09bmV3IHdwKCh0LngrbC54KS8yK01hdGguY29zKGMpKnAueC1NYXRoLnNpbihjKSpwLnksKHQueStsLnkpLzIrTWF0aC5zaW4oYykqcC54K01hdGguY29zKGMpKnAueSksaD1MZihbMSwwXSxbKHUueC1wLngpL3IsKHUueS1wLnkpL2ldKSxnPVsodS54LXAueCkvciwodS55LXAueSkvaV0sXz1bKC11LngtcC54KS9yLCgtdS55LXAueSkvaV0sdj1MZihnLF8pO3JldHVybiBJZihnLF8pPD0tMSYmKHY9TWF0aC5QSSksSWYoZyxfKT49MSYmKHY9MCkse2N1cnJlbnRQb2ludDpsLHJYOnIsclk6aSxzd2VlcEZsYWc6cyx4QXhpc1JvdGF0aW9uOmMsY2VudHA6bSxhMTpoLGFkOnZ9fXBhdGhBKHQsbil7dmFye3BhdGhQYXJzZXI6cn09dGhpcyx7Y3VycmVudFBvaW50Omksclg6YSxyWTpvLHN3ZWVwRmxhZzpzLHhBeGlzUm90YXRpb246YyxjZW50cDpsLGExOnUsYWQ6ZH09ZS5wYXRoQShyKSxmPTEtcz8xOi0xLHA9dStkLzIqZixtPW5ldyB3cChsLngrYSpNYXRoLmNvcyhwKSxsLnkrbypNYXRoLnNpbihwKSk7aWYoci5hZGRNYXJrZXJBbmdsZShtLHAtZipNYXRoLlBJLzIpLHIuYWRkTWFya2VyQW5nbGUoaSxwLWYqTWF0aC5QSSksbi5hZGRQb2ludChpLngsaS55KSx0JiYhaXNOYU4odSkmJiFpc05hTihkKSl7dmFyIGg9YT5vP2E6byxnPWE+bz8xOmEvbyxfPWE+bz9vL2E6MTt0LnRyYW5zbGF0ZShsLngsbC55KSx0LnJvdGF0ZShjKSx0LnNjYWxlKGcsXyksdC5hcmMoMCwwLGgsdSx1K2QsISEoMS1zKSksdC5zY2FsZSgxL2csMS9fKSx0LnJvdGF0ZSgtYyksdC50cmFuc2xhdGUoLWwueCwtbC55KX19c3RhdGljIHBhdGhaKGUpe2UuY3VycmVudD1lLnN0YXJ0fXBhdGhaKHQsbil7ZS5wYXRoWih0aGlzLnBhdGhQYXJzZXIpLHQmJm4ueDEhPT1uLngyJiZuLnkxIT09bi55MiYmdC5jbG9zZVBhdGgoKX19LHFwPWNsYXNzIGV4dGVuZHMgS3B7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKSx0aGlzLnR5cGU9YGdseXBoYCx0aGlzLmhvcml6QWR2WD10aGlzLmdldEF0dHJpYnV0ZShgaG9yaXotYWR2LXhgKS5nZXROdW1iZXIoKSx0aGlzLnVuaWNvZGU9dGhpcy5nZXRBdHRyaWJ1dGUoYHVuaWNvZGVgKS5nZXRTdHJpbmcoKSx0aGlzLmFyYWJpY0Zvcm09dGhpcy5nZXRBdHRyaWJ1dGUoYGFyYWJpYy1mb3JtYCkuZ2V0U3RyaW5nKCl9fSxKcD1jbGFzcyBlIGV4dGVuZHMgR3B7Y29uc3RydWN0b3IodCxuLHIpe3N1cGVyKHQsbixuZXcudGFyZ2V0PT09ZT8hMDpyKSx0aGlzLnR5cGU9YHRleHRgLHRoaXMueD0wLHRoaXMueT0wLHRoaXMubWVhc3VyZUNhY2hlPS0xfXNldENvbnRleHQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3N1cGVyLnNldENvbnRleHQoZSx0KTt2YXIgbj10aGlzLmdldFN0eWxlKGBkb21pbmFudC1iYXNlbGluZWApLmdldFRleHRCYXNlbGluZSgpfHx0aGlzLmdldFN0eWxlKGBhbGlnbm1lbnQtYmFzZWxpbmVgKS5nZXRUZXh0QmFzZWxpbmUoKTtuJiYoZS50ZXh0QmFzZWxpbmU9bil9aW5pdGlhbGl6ZUNvb3JkaW5hdGVzKCl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy5sZWFmVGV4dHM9W10sdGhpcy50ZXh0Q2h1bmtTdGFydD0wLHRoaXMubWluWD0xLzAsdGhpcy5tYXhYPS0xLzB9Z2V0Qm91bmRpbmdCb3goZSl7aWYodGhpcy50eXBlIT09YHRleHRgKXJldHVybiB0aGlzLmdldFRFbGVtZW50Qm91bmRpbmdCb3goZSk7dGhpcy5pbml0aWFsaXplQ29vcmRpbmF0ZXMoKSx0aGlzLmFkanVzdENoaWxkQ29vcmRpbmF0ZXNSZWN1cnNpdmUoZSk7dmFyIHQ9bnVsbDtyZXR1cm4gdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChuLHIpPT57dmFyIGk9dGhpcy5nZXRDaGlsZEJvdW5kaW5nQm94KGUsdGhpcyx0aGlzLHIpO3Q/dC5hZGRCb3VuZGluZ0JveChpKTp0PWl9KSx0fWdldEZvbnRTaXplKCl7dmFye2RvY3VtZW50OmUscGFyZW50OnR9PXRoaXMsbj1IcC5wYXJzZShlLmN0eC5mb250KS5mb250U2l6ZTtyZXR1cm4gdC5nZXRTdHlsZShgZm9udC1zaXplYCkuZ2V0TnVtYmVyKG4pfWdldFRFbGVtZW50Qm91bmRpbmdCb3goZSl7dmFyIHQ9dGhpcy5nZXRGb250U2l6ZSgpO3JldHVybiBuZXcgVXAodGhpcy54LHRoaXMueS10LHRoaXMueCt0aGlzLm1lYXN1cmVUZXh0KGUpLHRoaXMueSl9Z2V0R2x5cGgoZSx0LG4pe3ZhciByPXRbbl0saT1udWxsO2lmKGUuaXNBcmFiaWMpe3ZhciBhPXQubGVuZ3RoLG89dFtuLTFdLHM9dFtuKzFdLGM9YGlzb2xhdGVkYDtpZigobj09PTB8fG89PT1gIGApJiZuPGEtMSYmcyE9PWAgYCYmKGM9YHRlcm1pbmFsYCksbj4wJiZvIT09YCBgJiZuPGEtMSYmcyE9PWAgYCYmKGM9YG1lZGlhbGApLG4+MCYmbyE9PWAgYCYmKG49PT1hLTF8fHM9PT1gIGApJiYoYz1gaW5pdGlhbGApLGUuZ2x5cGhzW3JdIT09dm9pZCAwKXt2YXIgbD1lLmdseXBoc1tyXTtpPWwgaW5zdGFuY2VvZiBxcD9sOmxbY119fWVsc2UgaT1lLmdseXBoc1tyXTtyZXR1cm4gaXx8PWUubWlzc2luZ0dseXBoLGl9Z2V0VGV4dCgpe3JldHVybmBgfWdldFRleHRGcm9tTm9kZShlKXt2YXIgdD1lfHx0aGlzLm5vZGUsbj1BcnJheS5mcm9tKHQucGFyZW50Tm9kZS5jaGlsZE5vZGVzKSxyPW4uaW5kZXhPZih0KSxpPW4ubGVuZ3RoLTEsYT1FZih0LnRleHRDb250ZW50fHxgYCk7cmV0dXJuIHI9PT0wJiYoYT1EZihhKSkscj09PWkmJihhPU9mKGEpKSxhfXJlbmRlckNoaWxkcmVuKGUpe2lmKHRoaXMudHlwZSE9PWB0ZXh0YCl7dGhpcy5yZW5kZXJURWxlbWVudENoaWxkcmVuKGUpO3JldHVybn10aGlzLmluaXRpYWxpemVDb29yZGluYXRlcygpLHRoaXMuYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZShlKSx0aGlzLmNoaWxkcmVuLmZvckVhY2goKHQsbik9Pnt0aGlzLnJlbmRlckNoaWxkKGUsdGhpcyx0aGlzLG4pfSk7dmFye21vdXNlOnR9PXRoaXMuZG9jdW1lbnQuc2NyZWVuO3QuaXNXb3JraW5nKCkmJnQuY2hlY2tCb3VuZGluZ0JveCh0aGlzLHRoaXMuZ2V0Qm91bmRpbmdCb3goZSkpfXJlbmRlclRFbGVtZW50Q2hpbGRyZW4oZSl7dmFye2RvY3VtZW50OnQscGFyZW50Om59PXRoaXMscj10aGlzLmdldFRleHQoKSxpPW4uZ2V0U3R5bGUoYGZvbnQtZmFtaWx5YCkuZ2V0RGVmaW5pdGlvbigpO2lmKGkpe2Zvcih2YXJ7dW5pdHNQZXJFbTphfT1pLmZvbnRGYWNlLG89SHAucGFyc2UodC5jdHguZm9udCkscz1uLmdldFN0eWxlKGBmb250LXNpemVgKS5nZXROdW1iZXIoby5mb250U2l6ZSksYz1uLmdldFN0eWxlKGBmb250LXN0eWxlYCkuZ2V0U3RyaW5nKG8uZm9udFN0eWxlKSxsPXMvYSx1PWkuaXNSVEw/ci5zcGxpdChgYCkucmV2ZXJzZSgpLmpvaW4oYGApOnIsZD1rZihuLmdldEF0dHJpYnV0ZShgZHhgKS5nZXRTdHJpbmcoKSksZj11Lmxlbmd0aCxwPTA7cDxmO3ArKyl7dmFyIG09dGhpcy5nZXRHbHlwaChpLHUscCk7ZS50cmFuc2xhdGUodGhpcy54LHRoaXMueSksZS5zY2FsZShsLC1sKTt2YXIgaD1lLmxpbmVXaWR0aDtlLmxpbmVXaWR0aD1lLmxpbmVXaWR0aCphL3MsYz09PWBpdGFsaWNgJiZlLnRyYW5zZm9ybSgxLDAsLjQsMSwwLDApLG0ucmVuZGVyKGUpLGM9PT1gaXRhbGljYCYmZS50cmFuc2Zvcm0oMSwwLC0uNCwxLDAsMCksZS5saW5lV2lkdGg9aCxlLnNjYWxlKDEvbCwtMS9sKSxlLnRyYW5zbGF0ZSgtdGhpcy54LC10aGlzLnkpLHRoaXMueCs9cyoobS5ob3JpekFkdlh8fGkuaG9yaXpBZHZYKS9hLGRbcF0hPT12b2lkIDAmJiFpc05hTihkW3BdKSYmKHRoaXMueCs9ZFtwXSl9cmV0dXJufXZhcnt4OmcseTpffT10aGlzO2UuZmlsbFN0eWxlJiZlLmZpbGxUZXh0KHIsZyxfKSxlLnN0cm9rZVN0eWxlJiZlLnN0cm9rZVRleHQocixnLF8pfWFwcGx5QW5jaG9yaW5nKCl7aWYoISh0aGlzLnRleHRDaHVua1N0YXJ0Pj10aGlzLmxlYWZUZXh0cy5sZW5ndGgpKXt2YXIgZT10aGlzLmxlYWZUZXh0c1t0aGlzLnRleHRDaHVua1N0YXJ0XSx0PWUuZ2V0U3R5bGUoYHRleHQtYW5jaG9yYCkuZ2V0U3RyaW5nKGBzdGFydGApLG49ITEscj0wO3I9dD09PWBzdGFydGAmJiFufHx0PT09YGVuZGAmJm4/ZS54LXRoaXMubWluWDp0PT09YGVuZGAmJiFufHx0PT09YHN0YXJ0YCYmbj9lLngtdGhpcy5tYXhYOmUueC0odGhpcy5taW5YK3RoaXMubWF4WCkvMjtmb3IodmFyIGk9dGhpcy50ZXh0Q2h1bmtTdGFydDtpPHRoaXMubGVhZlRleHRzLmxlbmd0aDtpKyspdGhpcy5sZWFmVGV4dHNbaV0ueCs9cjt0aGlzLm1pblg9MS8wLHRoaXMubWF4WD0tMS8wLHRoaXMudGV4dENodW5rU3RhcnQ9dGhpcy5sZWFmVGV4dHMubGVuZ3RofX1hZGp1c3RDaGlsZENvb3JkaW5hdGVzUmVjdXJzaXZlKGUpe3RoaXMuY2hpbGRyZW4uZm9yRWFjaCgodCxuKT0+e3RoaXMuYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZUNvcmUoZSx0aGlzLHRoaXMsbil9KSx0aGlzLmFwcGx5QW5jaG9yaW5nKCl9YWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZUNvcmUoZSx0LG4scil7dmFyIGk9bi5jaGlsZHJlbltyXTtpLmNoaWxkcmVuLmxlbmd0aD4wP2kuY2hpbGRyZW4uZm9yRWFjaCgobixyKT0+e3QuYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZUNvcmUoZSx0LGkscil9KTp0aGlzLmFkanVzdENoaWxkQ29vcmRpbmF0ZXMoZSx0LG4scil9YWRqdXN0Q2hpbGRDb29yZGluYXRlcyhlLHQsbixyKXt2YXIgaT1uLmNoaWxkcmVuW3JdO2lmKHR5cGVvZiBpLm1lYXN1cmVUZXh0IT1gZnVuY3Rpb25gKXJldHVybiBpO2Uuc2F2ZSgpLGkuc2V0Q29udGV4dChlLCEwKTt2YXIgYT1pLmdldEF0dHJpYnV0ZShgeGApLG89aS5nZXRBdHRyaWJ1dGUoYHlgKSxzPWkuZ2V0QXR0cmlidXRlKGBkeGApLGM9aS5nZXRBdHRyaWJ1dGUoYGR5YCksbD1pLmdldFN0eWxlKGBmb250LWZhbWlseWApLmdldERlZmluaXRpb24oKSx1PSEhbCYmbC5pc1JUTDtyPT09MCYmKGEuaGFzVmFsdWUoKXx8YS5zZXRWYWx1ZShpLmdldEluaGVyaXRlZEF0dHJpYnV0ZShgeGApKSxvLmhhc1ZhbHVlKCl8fG8uc2V0VmFsdWUoaS5nZXRJbmhlcml0ZWRBdHRyaWJ1dGUoYHlgKSkscy5oYXNWYWx1ZSgpfHxzLnNldFZhbHVlKGkuZ2V0SW5oZXJpdGVkQXR0cmlidXRlKGBkeGApKSxjLmhhc1ZhbHVlKCl8fGMuc2V0VmFsdWUoaS5nZXRJbmhlcml0ZWRBdHRyaWJ1dGUoYGR5YCkpKTt2YXIgZD1pLm1lYXN1cmVUZXh0KGUpO3JldHVybiB1JiYodC54LT1kKSxhLmhhc1ZhbHVlKCk/KHQuYXBwbHlBbmNob3JpbmcoKSxpLng9YS5nZXRQaXhlbHMoYHhgKSxzLmhhc1ZhbHVlKCkmJihpLngrPXMuZ2V0UGl4ZWxzKGB4YCkpKToocy5oYXNWYWx1ZSgpJiYodC54Kz1zLmdldFBpeGVscyhgeGApKSxpLng9dC54KSx0Lng9aS54LHV8fCh0LngrPWQpLG8uaGFzVmFsdWUoKT8oaS55PW8uZ2V0UGl4ZWxzKGB5YCksYy5oYXNWYWx1ZSgpJiYoaS55Kz1jLmdldFBpeGVscyhgeWApKSk6KGMuaGFzVmFsdWUoKSYmKHQueSs9Yy5nZXRQaXhlbHMoYHlgKSksaS55PXQueSksdC55PWkueSx0LmxlYWZUZXh0cy5wdXNoKGkpLHQubWluWD1NYXRoLm1pbih0Lm1pblgsaS54LGkueCtkKSx0Lm1heFg9TWF0aC5tYXgodC5tYXhYLGkueCxpLngrZCksaS5jbGVhckNvbnRleHQoZSksZS5yZXN0b3JlKCksaX1nZXRDaGlsZEJvdW5kaW5nQm94KGUsdCxuLHIpe3ZhciBpPW4uY2hpbGRyZW5bcl07aWYodHlwZW9mIGkuZ2V0Qm91bmRpbmdCb3ghPWBmdW5jdGlvbmApcmV0dXJuIG51bGw7dmFyIGE9aS5nZXRCb3VuZGluZ0JveChlKTtyZXR1cm4gYT8oaS5jaGlsZHJlbi5mb3JFYWNoKChuLHIpPT57dmFyIG89dC5nZXRDaGlsZEJvdW5kaW5nQm94KGUsdCxpLHIpO2EuYWRkQm91bmRpbmdCb3gobyl9KSxhKTpudWxsfXJlbmRlckNoaWxkKGUsdCxuLHIpe3ZhciBpPW4uY2hpbGRyZW5bcl07aS5yZW5kZXIoZSksaS5jaGlsZHJlbi5mb3JFYWNoKChuLHIpPT57dC5yZW5kZXJDaGlsZChlLHQsaSxyKX0pfW1lYXN1cmVUZXh0KGUpe3ZhcnttZWFzdXJlQ2FjaGU6dH09dGhpcztpZih+dClyZXR1cm4gdDt2YXIgbj10aGlzLmdldFRleHQoKSxyPXRoaXMubWVhc3VyZVRhcmdldFRleHQoZSxuKTtyZXR1cm4gdGhpcy5tZWFzdXJlQ2FjaGU9cixyfW1lYXN1cmVUYXJnZXRUZXh0KGUsdCl7aWYoIXQubGVuZ3RoKXJldHVybiAwO3ZhcntwYXJlbnQ6bn09dGhpcyxyPW4uZ2V0U3R5bGUoYGZvbnQtZmFtaWx5YCkuZ2V0RGVmaW5pdGlvbigpO2lmKHIpe2Zvcih2YXIgaT10aGlzLmdldEZvbnRTaXplKCksYT1yLmlzUlRMP3Quc3BsaXQoYGApLnJldmVyc2UoKS5qb2luKGBgKTp0LG89a2Yobi5nZXRBdHRyaWJ1dGUoYGR4YCkuZ2V0U3RyaW5nKCkpLHM9YS5sZW5ndGgsYz0wLGw9MDtsPHM7bCsrKXt2YXIgdT10aGlzLmdldEdseXBoKHIsYSxsKTtjKz0odS5ob3JpekFkdlh8fHIuaG9yaXpBZHZYKSppL3IuZm9udEZhY2UudW5pdHNQZXJFbSxvW2xdIT09dm9pZCAwJiYhaXNOYU4ob1tsXSkmJihjKz1vW2xdKX1yZXR1cm4gY31pZighZS5tZWFzdXJlVGV4dClyZXR1cm4gdC5sZW5ndGgqMTA7ZS5zYXZlKCksdGhpcy5zZXRDb250ZXh0KGUsITApO3Zhcnt3aWR0aDpkfT1lLm1lYXN1cmVUZXh0KHQpO3JldHVybiB0aGlzLmNsZWFyQ29udGV4dChlKSxlLnJlc3RvcmUoKSxkfWdldEluaGVyaXRlZEF0dHJpYnV0ZSh0KXtmb3IodmFyIG49dGhpcztuIGluc3RhbmNlb2YgZSYmbi5pc0ZpcnN0Q2hpbGQoKTspe3ZhciByPW4ucGFyZW50LmdldEF0dHJpYnV0ZSh0KTtpZihyLmhhc1ZhbHVlKCEwKSlyZXR1cm4gci5nZXRWYWx1ZShgMGApO249bi5wYXJlbnR9cmV0dXJuIG51bGx9fSxZcD1jbGFzcyBlIGV4dGVuZHMgSnB7Y29uc3RydWN0b3IodCxuLHIpe3N1cGVyKHQsbixuZXcudGFyZ2V0PT09ZT8hMDpyKSx0aGlzLnR5cGU9YHRzcGFuYCx0aGlzLnRleHQ9dGhpcy5jaGlsZHJlbi5sZW5ndGg+MD9gYDp0aGlzLmdldFRleHRGcm9tTm9kZSgpfWdldFRleHQoKXtyZXR1cm4gdGhpcy50ZXh0fX0sWHA9Y2xhc3MgZXh0ZW5kcyBZcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWB0ZXh0Tm9kZWB9fSxacD1jbGFzcyBleHRlbmRzIEdwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YHN2Z2AsdGhpcy5yb290PSExfXNldENvbnRleHQoZSl7dmFye2RvY3VtZW50OnR9PXRoaXMse3NjcmVlbjpuLHdpbmRvdzpyfT10LGk9ZS5jYW52YXM7aWYobi5zZXREZWZhdWx0cyhlKSxpLnN0eWxlJiZlLmZvbnQhPT12b2lkIDAmJnImJnIuZ2V0Q29tcHV0ZWRTdHlsZSE9PXZvaWQgMCl7ZS5mb250PXIuZ2V0Q29tcHV0ZWRTdHlsZShpKS5nZXRQcm9wZXJ0eVZhbHVlKGBmb250YCk7dmFyIGE9bmV3IFNwKHQsYGZvbnRTaXplYCxIcC5wYXJzZShlLmZvbnQpLmZvbnRTaXplKTthLmhhc1ZhbHVlKCkmJih0LnJvb3RFbVNpemU9YS5nZXRQaXhlbHMoYHlgKSx0LmVtU2l6ZT10LnJvb3RFbVNpemUpfXRoaXMuZ2V0QXR0cmlidXRlKGB4YCkuaGFzVmFsdWUoKXx8dGhpcy5nZXRBdHRyaWJ1dGUoYHhgLCEwKS5zZXRWYWx1ZSgwKSx0aGlzLmdldEF0dHJpYnV0ZShgeWApLmhhc1ZhbHVlKCl8fHRoaXMuZ2V0QXR0cmlidXRlKGB5YCwhMCkuc2V0VmFsdWUoMCk7dmFye3dpZHRoOm8saGVpZ2h0OnN9PW4udmlld1BvcnQ7dGhpcy5nZXRTdHlsZShgd2lkdGhgKS5oYXNWYWx1ZSgpfHx0aGlzLmdldFN0eWxlKGB3aWR0aGAsITApLnNldFZhbHVlKGAxMDAlYCksdGhpcy5nZXRTdHlsZShgaGVpZ2h0YCkuaGFzVmFsdWUoKXx8dGhpcy5nZXRTdHlsZShgaGVpZ2h0YCwhMCkuc2V0VmFsdWUoYDEwMCVgKSx0aGlzLmdldFN0eWxlKGBjb2xvcmApLmhhc1ZhbHVlKCl8fHRoaXMuZ2V0U3R5bGUoYGNvbG9yYCwhMCkuc2V0VmFsdWUoYGJsYWNrYCk7dmFyIGM9dGhpcy5nZXRBdHRyaWJ1dGUoYHJlZlhgKSxsPXRoaXMuZ2V0QXR0cmlidXRlKGByZWZZYCksdT10aGlzLmdldEF0dHJpYnV0ZShgdmlld0JveGApLGQ9dS5oYXNWYWx1ZSgpP2tmKHUuZ2V0U3RyaW5nKCkpOm51bGwsZj0hdGhpcy5yb290JiZ0aGlzLmdldFN0eWxlKGBvdmVyZmxvd2ApLmdldFZhbHVlKGBoaWRkZW5gKSE9PWB2aXNpYmxlYCxwPTAsbT0wLGg9MCxnPTA7ZCYmKHA9ZFswXSxtPWRbMV0pLHRoaXMucm9vdHx8KG89dGhpcy5nZXRTdHlsZShgd2lkdGhgKS5nZXRQaXhlbHMoYHhgKSxzPXRoaXMuZ2V0U3R5bGUoYGhlaWdodGApLmdldFBpeGVscyhgeWApLHRoaXMudHlwZT09PWBtYXJrZXJgJiYoaD1wLGc9bSxwPTAsbT0wKSksbi52aWV3UG9ydC5zZXRDdXJyZW50KG8scyksdGhpcy5ub2RlJiYoIXRoaXMucGFyZW50fHx0aGlzLm5vZGUucGFyZW50Tm9kZT8ubm9kZU5hbWU9PT1gZm9yZWlnbk9iamVjdGApJiZ0aGlzLmdldFN0eWxlKGB0cmFuc2Zvcm1gLCExLCEwKS5oYXNWYWx1ZSgpJiYhdGhpcy5nZXRTdHlsZShgdHJhbnNmb3JtLW9yaWdpbmAsITEsITApLmhhc1ZhbHVlKCkmJnRoaXMuZ2V0U3R5bGUoYHRyYW5zZm9ybS1vcmlnaW5gLCEwLCEwKS5zZXRWYWx1ZShgNTAlIDUwJWApLHN1cGVyLnNldENvbnRleHQoZSksZS50cmFuc2xhdGUodGhpcy5nZXRBdHRyaWJ1dGUoYHhgKS5nZXRQaXhlbHMoYHhgKSx0aGlzLmdldEF0dHJpYnV0ZShgeWApLmdldFBpeGVscyhgeWApKSxkJiYobz1kWzJdLHM9ZFszXSksdC5zZXRWaWV3Qm94KHtjdHg6ZSxhc3BlY3RSYXRpbzp0aGlzLmdldEF0dHJpYnV0ZShgcHJlc2VydmVBc3BlY3RSYXRpb2ApLmdldFN0cmluZygpLHdpZHRoOm4udmlld1BvcnQud2lkdGgsZGVzaXJlZFdpZHRoOm8saGVpZ2h0Om4udmlld1BvcnQuaGVpZ2h0LGRlc2lyZWRIZWlnaHQ6cyxtaW5YOnAsbWluWTptLHJlZlg6Yy5nZXRWYWx1ZSgpLHJlZlk6bC5nZXRWYWx1ZSgpLGNsaXA6ZixjbGlwWDpoLGNsaXBZOmd9KSxkJiYobi52aWV3UG9ydC5yZW1vdmVDdXJyZW50KCksbi52aWV3UG9ydC5zZXRDdXJyZW50KG8scykpfWNsZWFyQ29udGV4dChlKXtzdXBlci5jbGVhckNvbnRleHQoZSksdGhpcy5kb2N1bWVudC5zY3JlZW4udmlld1BvcnQucmVtb3ZlQ3VycmVudCgpfXJlc2l6ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxyPXRoaXMuZ2V0QXR0cmlidXRlKGB3aWR0aGAsITApLGk9dGhpcy5nZXRBdHRyaWJ1dGUoYGhlaWdodGAsITApLGE9dGhpcy5nZXRBdHRyaWJ1dGUoYHZpZXdCb3hgKSxvPXRoaXMuZ2V0QXR0cmlidXRlKGBzdHlsZWApLHM9ci5nZXROdW1iZXIoMCksYz1pLmdldE51bWJlcigwKTtpZihuKWlmKHR5cGVvZiBuPT1gc3RyaW5nYCl0aGlzLmdldEF0dHJpYnV0ZShgcHJlc2VydmVBc3BlY3RSYXRpb2AsITApLnNldFZhbHVlKG4pO2Vsc2V7dmFyIGw9dGhpcy5nZXRBdHRyaWJ1dGUoYHByZXNlcnZlQXNwZWN0UmF0aW9gKTtsLmhhc1ZhbHVlKCkmJmwuc2V0VmFsdWUobC5nZXRTdHJpbmcoKS5yZXBsYWNlKC9eXHMqKFxTLipcUylccyokLyxgJDFgKSl9aWYoci5zZXRWYWx1ZShlKSxpLnNldFZhbHVlKHQpLGEuaGFzVmFsdWUoKXx8YS5zZXRWYWx1ZShgMCAwICR7c3x8ZX0gJHtjfHx0fWApLG8uaGFzVmFsdWUoKSl7dmFyIHU9dGhpcy5nZXRTdHlsZShgd2lkdGhgKSxkPXRoaXMuZ2V0U3R5bGUoYGhlaWdodGApO3UuaGFzVmFsdWUoKSYmdS5zZXRWYWx1ZShgJHtlfXB4YCksZC5oYXNWYWx1ZSgpJiZkLnNldFZhbHVlKGAke3R9cHhgKX19fSxRcD1jbGFzcyBleHRlbmRzIEtwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YHJlY3RgfXBhdGgoZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoYHhgKS5nZXRQaXhlbHMoYHhgKSxuPXRoaXMuZ2V0QXR0cmlidXRlKGB5YCkuZ2V0UGl4ZWxzKGB5YCkscj10aGlzLmdldFN0eWxlKGB3aWR0aGAsITEsITApLmdldFBpeGVscyhgeGApLGk9dGhpcy5nZXRTdHlsZShgaGVpZ2h0YCwhMSwhMCkuZ2V0UGl4ZWxzKGB5YCksYT10aGlzLmdldEF0dHJpYnV0ZShgcnhgKSxvPXRoaXMuZ2V0QXR0cmlidXRlKGByeWApLHM9YS5nZXRQaXhlbHMoYHhgKSxjPW8uZ2V0UGl4ZWxzKGB5YCk7aWYoYS5oYXNWYWx1ZSgpJiYhby5oYXNWYWx1ZSgpJiYoYz1zKSxvLmhhc1ZhbHVlKCkmJiFhLmhhc1ZhbHVlKCkmJihzPWMpLHM9TWF0aC5taW4ocyxyLzIpLGM9TWF0aC5taW4oYyxpLzIpLGUpe3ZhciBsPTQqKChNYXRoLnNxcnQoMiktMSkvMyk7ZS5iZWdpblBhdGgoKSxpPjAmJnI+MCYmKGUubW92ZVRvKHQrcyxuKSxlLmxpbmVUbyh0K3ItcyxuKSxlLmJlemllckN1cnZlVG8odCtyLXMrbCpzLG4sdCtyLG4rYy1sKmMsdCtyLG4rYyksZS5saW5lVG8odCtyLG4raS1jKSxlLmJlemllckN1cnZlVG8odCtyLG4raS1jK2wqYyx0K3ItcytsKnMsbitpLHQrci1zLG4raSksZS5saW5lVG8odCtzLG4raSksZS5iZXppZXJDdXJ2ZVRvKHQrcy1sKnMsbitpLHQsbitpLWMrbCpjLHQsbitpLWMpLGUubGluZVRvKHQsbitjKSxlLmJlemllckN1cnZlVG8odCxuK2MtbCpjLHQrcy1sKnMsbix0K3MsbiksZS5jbG9zZVBhdGgoKSl9cmV0dXJuIG5ldyBVcCh0LG4sdCtyLG4raSl9Z2V0TWFya2Vycygpe3JldHVybiBudWxsfX0sJHA9Y2xhc3MgZXh0ZW5kcyBLcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWBjaXJjbGVgfXBhdGgoZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoYGN4YCkuZ2V0UGl4ZWxzKGB4YCksbj10aGlzLmdldEF0dHJpYnV0ZShgY3lgKS5nZXRQaXhlbHMoYHlgKSxyPXRoaXMuZ2V0QXR0cmlidXRlKGByYCkuZ2V0UGl4ZWxzKCk7cmV0dXJuIGUmJnI+MCYmKGUuYmVnaW5QYXRoKCksZS5hcmModCxuLHIsMCxNYXRoLlBJKjIsITEpLGUuY2xvc2VQYXRoKCkpLG5ldyBVcCh0LXIsbi1yLHQrcixuK3IpfWdldE1hcmtlcnMoKXtyZXR1cm4gbnVsbH19LGVtPWNsYXNzIGV4dGVuZHMgS3B7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gZWxsaXBzZWB9cGF0aChlKXt2YXIgdD00KigoTWF0aC5zcXJ0KDIpLTEpLzMpLG49dGhpcy5nZXRBdHRyaWJ1dGUoYHJ4YCkuZ2V0UGl4ZWxzKGB4YCkscj10aGlzLmdldEF0dHJpYnV0ZShgcnlgKS5nZXRQaXhlbHMoYHlgKSxpPXRoaXMuZ2V0QXR0cmlidXRlKGBjeGApLmdldFBpeGVscyhgeGApLGE9dGhpcy5nZXRBdHRyaWJ1dGUoYGN5YCkuZ2V0UGl4ZWxzKGB5YCk7cmV0dXJuIGUmJm4+MCYmcj4wJiYoZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhpK24sYSksZS5iZXppZXJDdXJ2ZVRvKGkrbixhK3QqcixpK3QqbixhK3IsaSxhK3IpLGUuYmV6aWVyQ3VydmVUbyhpLXQqbixhK3IsaS1uLGErdCpyLGktbixhKSxlLmJlemllckN1cnZlVG8oaS1uLGEtdCpyLGktdCpuLGEtcixpLGEtciksZS5iZXppZXJDdXJ2ZVRvKGkrdCpuLGEtcixpK24sYS10KnIsaStuLGEpLGUuY2xvc2VQYXRoKCkpLG5ldyBVcChpLW4sYS1yLGkrbixhK3IpfWdldE1hcmtlcnMoKXtyZXR1cm4gbnVsbH19LHRtPWNsYXNzIGV4dGVuZHMgS3B7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gbGluZWB9Z2V0UG9pbnRzKCl7cmV0dXJuW25ldyB3cCh0aGlzLmdldEF0dHJpYnV0ZShgeDFgKS5nZXRQaXhlbHMoYHhgKSx0aGlzLmdldEF0dHJpYnV0ZShgeTFgKS5nZXRQaXhlbHMoYHlgKSksbmV3IHdwKHRoaXMuZ2V0QXR0cmlidXRlKGB4MmApLmdldFBpeGVscyhgeGApLHRoaXMuZ2V0QXR0cmlidXRlKGB5MmApLmdldFBpeGVscyhgeWApKV19cGF0aChlKXt2YXJbe3g6dCx5Om59LHt4OnIseTppfV09dGhpcy5nZXRQb2ludHMoKTtyZXR1cm4gZSYmKGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8odCxuKSxlLmxpbmVUbyhyLGkpKSxuZXcgVXAodCxuLHIsaSl9Z2V0TWFya2Vycygpe3ZhcltlLHRdPXRoaXMuZ2V0UG9pbnRzKCksbj1lLmFuZ2xlVG8odCk7cmV0dXJuW1tlLG5dLFt0LG5dXX19LG5tPWNsYXNzIGV4dGVuZHMgS3B7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKSx0aGlzLnR5cGU9YHBvbHlsaW5lYCx0aGlzLnBvaW50cz1bXSx0aGlzLnBvaW50cz13cC5wYXJzZVBhdGgodGhpcy5nZXRBdHRyaWJ1dGUoYHBvaW50c2ApLmdldFN0cmluZygpKX1wYXRoKGUpe3Zhcntwb2ludHM6dH09dGhpcyxbe3g6bix5OnJ9XT10LGk9bmV3IFVwKG4scik7cmV0dXJuIGUmJihlLmJlZ2luUGF0aCgpLGUubW92ZVRvKG4scikpLHQuZm9yRWFjaCh0PT57dmFye3g6bix5OnJ9PXQ7aS5hZGRQb2ludChuLHIpLGUmJmUubGluZVRvKG4scil9KSxpfWdldE1hcmtlcnMoKXt2YXJ7cG9pbnRzOmV9PXRoaXMsdD1lLmxlbmd0aC0xLG49W107cmV0dXJuIGUuZm9yRWFjaCgocixpKT0+e2khPT10JiZuLnB1c2goW3Isci5hbmdsZVRvKGVbaSsxXSldKX0pLG4ubGVuZ3RoPjAmJm4ucHVzaChbZVtlLmxlbmd0aC0xXSxuW24ubGVuZ3RoLTFdWzFdXSksbn19LHJtPWNsYXNzIGV4dGVuZHMgbm17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gcG9seWdvbmB9cGF0aChlKXt2YXIgdD1zdXBlci5wYXRoKGUpLFt7eDpuLHk6cn1dPXRoaXMucG9pbnRzO3JldHVybiBlJiYoZS5saW5lVG8obixyKSxlLmNsb3NlUGF0aCgpKSx0fX0saW09Y2xhc3MgZXh0ZW5kcyBCcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWBwYXR0ZXJuYH1jcmVhdGVQYXR0ZXJuKGUsdCxuKXt2YXIgcj10aGlzLmdldFN0eWxlKGB3aWR0aGApLmdldFBpeGVscyhgeGAsITApLGk9dGhpcy5nZXRTdHlsZShgaGVpZ2h0YCkuZ2V0UGl4ZWxzKGB5YCwhMCksYT1uZXcgWnAodGhpcy5kb2N1bWVudCxudWxsKTthLmF0dHJpYnV0ZXMudmlld0JveD1uZXcgU3AodGhpcy5kb2N1bWVudCxgdmlld0JveGAsdGhpcy5nZXRBdHRyaWJ1dGUoYHZpZXdCb3hgKS5nZXRWYWx1ZSgpKSxhLmF0dHJpYnV0ZXMud2lkdGg9bmV3IFNwKHRoaXMuZG9jdW1lbnQsYHdpZHRoYCxgJHtyfXB4YCksYS5hdHRyaWJ1dGVzLmhlaWdodD1uZXcgU3AodGhpcy5kb2N1bWVudCxgaGVpZ2h0YCxgJHtpfXB4YCksYS5hdHRyaWJ1dGVzLnRyYW5zZm9ybT1uZXcgU3AodGhpcy5kb2N1bWVudCxgdHJhbnNmb3JtYCx0aGlzLmdldEF0dHJpYnV0ZShgcGF0dGVyblRyYW5zZm9ybWApLmdldFZhbHVlKCkpLGEuY2hpbGRyZW49dGhpcy5jaGlsZHJlbjt2YXIgbz10aGlzLmRvY3VtZW50LmNyZWF0ZUNhbnZhcyhyLGkpLHM9by5nZXRDb250ZXh0KGAyZGApLGM9dGhpcy5nZXRBdHRyaWJ1dGUoYHhgKSxsPXRoaXMuZ2V0QXR0cmlidXRlKGB5YCk7Yy5oYXNWYWx1ZSgpJiZsLmhhc1ZhbHVlKCkmJnMudHJhbnNsYXRlKGMuZ2V0UGl4ZWxzKGB4YCwhMCksbC5nZXRQaXhlbHMoYHlgLCEwKSksbi5oYXNWYWx1ZSgpP3RoaXMuc3R5bGVzW2BmaWxsLW9wYWNpdHlgXT1uOlJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGhpcy5zdHlsZXMsYGZpbGwtb3BhY2l0eWApO2Zvcih2YXIgdT0tMTt1PD0xO3UrKylmb3IodmFyIGQ9LTE7ZDw9MTtkKyspcy5zYXZlKCksYS5hdHRyaWJ1dGVzLng9bmV3IFNwKHRoaXMuZG9jdW1lbnQsYHhgLHUqby53aWR0aCksYS5hdHRyaWJ1dGVzLnk9bmV3IFNwKHRoaXMuZG9jdW1lbnQsYHlgLGQqby5oZWlnaHQpLGEucmVuZGVyKHMpLHMucmVzdG9yZSgpO3JldHVybiBlLmNyZWF0ZVBhdHRlcm4obyxgcmVwZWF0YCl9fSxhbT1jbGFzcyBleHRlbmRzIEJwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YG1hcmtlcmB9cmVuZGVyKGUsdCxuKXtpZih0KXt2YXJ7eDpyLHk6aX09dCxhPXRoaXMuZ2V0QXR0cmlidXRlKGBvcmllbnRgKS5nZXRTdHJpbmcoYGF1dG9gKSxvPXRoaXMuZ2V0QXR0cmlidXRlKGBtYXJrZXJVbml0c2ApLmdldFN0cmluZyhgc3Ryb2tlV2lkdGhgKTtlLnRyYW5zbGF0ZShyLGkpLGE9PT1gYXV0b2AmJmUucm90YXRlKG4pLG89PT1gc3Ryb2tlV2lkdGhgJiZlLnNjYWxlKGUubGluZVdpZHRoLGUubGluZVdpZHRoKSxlLnNhdmUoKTt2YXIgcz1uZXcgWnAodGhpcy5kb2N1bWVudCxudWxsKTtzLnR5cGU9dGhpcy50eXBlLHMuYXR0cmlidXRlcy52aWV3Qm94PW5ldyBTcCh0aGlzLmRvY3VtZW50LGB2aWV3Qm94YCx0aGlzLmdldEF0dHJpYnV0ZShgdmlld0JveGApLmdldFZhbHVlKCkpLHMuYXR0cmlidXRlcy5yZWZYPW5ldyBTcCh0aGlzLmRvY3VtZW50LGByZWZYYCx0aGlzLmdldEF0dHJpYnV0ZShgcmVmWGApLmdldFZhbHVlKCkpLHMuYXR0cmlidXRlcy5yZWZZPW5ldyBTcCh0aGlzLmRvY3VtZW50LGByZWZZYCx0aGlzLmdldEF0dHJpYnV0ZShgcmVmWWApLmdldFZhbHVlKCkpLHMuYXR0cmlidXRlcy53aWR0aD1uZXcgU3AodGhpcy5kb2N1bWVudCxgd2lkdGhgLHRoaXMuZ2V0QXR0cmlidXRlKGBtYXJrZXJXaWR0aGApLmdldFZhbHVlKCkpLHMuYXR0cmlidXRlcy5oZWlnaHQ9bmV3IFNwKHRoaXMuZG9jdW1lbnQsYGhlaWdodGAsdGhpcy5nZXRBdHRyaWJ1dGUoYG1hcmtlckhlaWdodGApLmdldFZhbHVlKCkpLHMuYXR0cmlidXRlcy5vdmVyZmxvdz1uZXcgU3AodGhpcy5kb2N1bWVudCxgb3ZlcmZsb3dgLHRoaXMuZ2V0QXR0cmlidXRlKGBvdmVyZmxvd2ApLmdldFZhbHVlKCkpLHMuYXR0cmlidXRlcy5maWxsPW5ldyBTcCh0aGlzLmRvY3VtZW50LGBmaWxsYCx0aGlzLmdldEF0dHJpYnV0ZShgZmlsbGApLmdldENvbG9yKGBibGFja2ApKSxzLmF0dHJpYnV0ZXMuc3Ryb2tlPW5ldyBTcCh0aGlzLmRvY3VtZW50LGBzdHJva2VgLHRoaXMuZ2V0QXR0cmlidXRlKGBzdHJva2VgKS5nZXRWYWx1ZShgbm9uZWApKSxzLmNoaWxkcmVuPXRoaXMuY2hpbGRyZW4scy5yZW5kZXIoZSksZS5yZXN0b3JlKCksbz09PWBzdHJva2VXaWR0aGAmJmUuc2NhbGUoMS9lLmxpbmVXaWR0aCwxL2UubGluZVdpZHRoKSxhPT09YGF1dG9gJiZlLnJvdGF0ZSgtbiksZS50cmFuc2xhdGUoLXIsLWkpfX19LG9tPWNsYXNzIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gZGVmc2B9cmVuZGVyKCl7fX0sc209Y2xhc3MgZXh0ZW5kcyBHcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWBnYH1nZXRCb3VuZGluZ0JveChlKXt2YXIgdD1uZXcgVXA7cmV0dXJuIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChuPT57dC5hZGRCb3VuZGluZ0JveChuLmdldEJvdW5kaW5nQm94KGUpKX0pLHR9fSxjbT1jbGFzcyBleHRlbmRzIEJwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy5hdHRyaWJ1dGVzVG9Jbmhlcml0PVtgZ3JhZGllbnRVbml0c2BdLHRoaXMuc3RvcHM9W107dmFye3N0b3BzOnIsY2hpbGRyZW46aX09dGhpcztpLmZvckVhY2goZT0+e2UudHlwZT09PWBzdG9wYCYmci5wdXNoKGUpfSl9Z2V0R3JhZGllbnRVbml0cygpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZShgZ3JhZGllbnRVbml0c2ApLmdldFN0cmluZyhgb2JqZWN0Qm91bmRpbmdCb3hgKX1jcmVhdGVHcmFkaWVudChlLHQsbil7dmFyIHI9dGhpczt0aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5oYXNWYWx1ZSgpJiYocj10aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXREZWZpbml0aW9uKCksdGhpcy5pbmhlcml0U3RvcENvbnRhaW5lcihyKSk7dmFye3N0b3BzOml9PXIsYT10aGlzLmdldEdyYWRpZW50KGUsdCk7aWYoIWEpcmV0dXJuIHRoaXMuYWRkUGFyZW50T3BhY2l0eShuLGlbaS5sZW5ndGgtMV0uY29sb3IpO2lmKGkuZm9yRWFjaChlPT57YS5hZGRDb2xvclN0b3AoZS5vZmZzZXQsdGhpcy5hZGRQYXJlbnRPcGFjaXR5KG4sZS5jb2xvcikpfSksdGhpcy5nZXRBdHRyaWJ1dGUoYGdyYWRpZW50VHJhbnNmb3JtYCkuaGFzVmFsdWUoKSl7dmFye2RvY3VtZW50Om99PXRoaXMse01BWF9WSVJUVUFMX1BJWEVMUzpzLHZpZXdQb3J0OmN9PW8uc2NyZWVuLFtsXT1jLnZpZXdQb3J0cyx1PW5ldyBRcChvLG51bGwpO3UuYXR0cmlidXRlcy54PW5ldyBTcChvLGB4YCwtcy8zKSx1LmF0dHJpYnV0ZXMueT1uZXcgU3AobyxgeWAsLXMvMyksdS5hdHRyaWJ1dGVzLndpZHRoPW5ldyBTcChvLGB3aWR0aGAscyksdS5hdHRyaWJ1dGVzLmhlaWdodD1uZXcgU3AobyxgaGVpZ2h0YCxzKTt2YXIgZD1uZXcgc20obyxudWxsKTtkLmF0dHJpYnV0ZXMudHJhbnNmb3JtPW5ldyBTcChvLGB0cmFuc2Zvcm1gLHRoaXMuZ2V0QXR0cmlidXRlKGBncmFkaWVudFRyYW5zZm9ybWApLmdldFZhbHVlKCkpLGQuY2hpbGRyZW49W3VdO3ZhciBmPW5ldyBacChvLG51bGwpO2YuYXR0cmlidXRlcy54PW5ldyBTcChvLGB4YCwwKSxmLmF0dHJpYnV0ZXMueT1uZXcgU3AobyxgeWAsMCksZi5hdHRyaWJ1dGVzLndpZHRoPW5ldyBTcChvLGB3aWR0aGAsbC53aWR0aCksZi5hdHRyaWJ1dGVzLmhlaWdodD1uZXcgU3AobyxgaGVpZ2h0YCxsLmhlaWdodCksZi5jaGlsZHJlbj1bZF07dmFyIHA9by5jcmVhdGVDYW52YXMobC53aWR0aCxsLmhlaWdodCksbT1wLmdldENvbnRleHQoYDJkYCk7cmV0dXJuIG0uZmlsbFN0eWxlPWEsZi5yZW5kZXIobSksbS5jcmVhdGVQYXR0ZXJuKHAsYG5vLXJlcGVhdGApfXJldHVybiBhfWluaGVyaXRTdG9wQ29udGFpbmVyKGUpe3RoaXMuYXR0cmlidXRlc1RvSW5oZXJpdC5mb3JFYWNoKHQ9PnshdGhpcy5nZXRBdHRyaWJ1dGUodCkuaGFzVmFsdWUoKSYmZS5nZXRBdHRyaWJ1dGUodCkuaGFzVmFsdWUoKSYmdGhpcy5nZXRBdHRyaWJ1dGUodCwhMCkuc2V0VmFsdWUoZS5nZXRBdHRyaWJ1dGUodCkuZ2V0VmFsdWUoKSl9KX1hZGRQYXJlbnRPcGFjaXR5KGUsdCl7cmV0dXJuIGUuaGFzVmFsdWUoKT9uZXcgU3AodGhpcy5kb2N1bWVudCxgY29sb3JgLHQpLmFkZE9wYWNpdHkoZSkuZ2V0Q29sb3IoKTp0fX0sbG09Y2xhc3MgZXh0ZW5kcyBjbXtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pLHRoaXMudHlwZT1gbGluZWFyR3JhZGllbnRgLHRoaXMuYXR0cmlidXRlc1RvSW5oZXJpdC5wdXNoKGB4MWAsYHkxYCxgeDJgLGB5MmApfWdldEdyYWRpZW50KGUsdCl7dmFyIG49dGhpcy5nZXRHcmFkaWVudFVuaXRzKCk9PT1gb2JqZWN0Qm91bmRpbmdCb3hgLHI9bj90LmdldEJvdW5kaW5nQm94KGUpOm51bGw7aWYobiYmIXIpcmV0dXJuIG51bGw7IXRoaXMuZ2V0QXR0cmlidXRlKGB4MWApLmhhc1ZhbHVlKCkmJiF0aGlzLmdldEF0dHJpYnV0ZShgeTFgKS5oYXNWYWx1ZSgpJiYhdGhpcy5nZXRBdHRyaWJ1dGUoYHgyYCkuaGFzVmFsdWUoKSYmIXRoaXMuZ2V0QXR0cmlidXRlKGB5MmApLmhhc1ZhbHVlKCkmJih0aGlzLmdldEF0dHJpYnV0ZShgeDFgLCEwKS5zZXRWYWx1ZSgwKSx0aGlzLmdldEF0dHJpYnV0ZShgeTFgLCEwKS5zZXRWYWx1ZSgwKSx0aGlzLmdldEF0dHJpYnV0ZShgeDJgLCEwKS5zZXRWYWx1ZSgxKSx0aGlzLmdldEF0dHJpYnV0ZShgeTJgLCEwKS5zZXRWYWx1ZSgwKSk7dmFyIGk9bj9yLngrci53aWR0aCp0aGlzLmdldEF0dHJpYnV0ZShgeDFgKS5nZXROdW1iZXIoKTp0aGlzLmdldEF0dHJpYnV0ZShgeDFgKS5nZXRQaXhlbHMoYHhgKSxhPW4/ci55K3IuaGVpZ2h0KnRoaXMuZ2V0QXR0cmlidXRlKGB5MWApLmdldE51bWJlcigpOnRoaXMuZ2V0QXR0cmlidXRlKGB5MWApLmdldFBpeGVscyhgeWApLG89bj9yLngrci53aWR0aCp0aGlzLmdldEF0dHJpYnV0ZShgeDJgKS5nZXROdW1iZXIoKTp0aGlzLmdldEF0dHJpYnV0ZShgeDJgKS5nZXRQaXhlbHMoYHhgKSxzPW4/ci55K3IuaGVpZ2h0KnRoaXMuZ2V0QXR0cmlidXRlKGB5MmApLmdldE51bWJlcigpOnRoaXMuZ2V0QXR0cmlidXRlKGB5MmApLmdldFBpeGVscyhgeWApO3JldHVybiBpPT09byYmYT09PXM/bnVsbDplLmNyZWF0ZUxpbmVhckdyYWRpZW50KGksYSxvLHMpfX0sdW09Y2xhc3MgZXh0ZW5kcyBjbXtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pLHRoaXMudHlwZT1gcmFkaWFsR3JhZGllbnRgLHRoaXMuYXR0cmlidXRlc1RvSW5oZXJpdC5wdXNoKGBjeGAsYGN5YCxgcmAsYGZ4YCxgZnlgLGBmcmApfWdldEdyYWRpZW50KGUsdCl7dmFyIG49dGhpcy5nZXRHcmFkaWVudFVuaXRzKCk9PT1gb2JqZWN0Qm91bmRpbmdCb3hgLHI9dC5nZXRCb3VuZGluZ0JveChlKTtpZihuJiYhcilyZXR1cm4gbnVsbDt0aGlzLmdldEF0dHJpYnV0ZShgY3hgKS5oYXNWYWx1ZSgpfHx0aGlzLmdldEF0dHJpYnV0ZShgY3hgLCEwKS5zZXRWYWx1ZShgNTAlYCksdGhpcy5nZXRBdHRyaWJ1dGUoYGN5YCkuaGFzVmFsdWUoKXx8dGhpcy5nZXRBdHRyaWJ1dGUoYGN5YCwhMCkuc2V0VmFsdWUoYDUwJWApLHRoaXMuZ2V0QXR0cmlidXRlKGByYCkuaGFzVmFsdWUoKXx8dGhpcy5nZXRBdHRyaWJ1dGUoYHJgLCEwKS5zZXRWYWx1ZShgNTAlYCk7dmFyIGk9bj9yLngrci53aWR0aCp0aGlzLmdldEF0dHJpYnV0ZShgY3hgKS5nZXROdW1iZXIoKTp0aGlzLmdldEF0dHJpYnV0ZShgY3hgKS5nZXRQaXhlbHMoYHhgKSxhPW4/ci55K3IuaGVpZ2h0KnRoaXMuZ2V0QXR0cmlidXRlKGBjeWApLmdldE51bWJlcigpOnRoaXMuZ2V0QXR0cmlidXRlKGBjeWApLmdldFBpeGVscyhgeWApLG89aSxzPWE7dGhpcy5nZXRBdHRyaWJ1dGUoYGZ4YCkuaGFzVmFsdWUoKSYmKG89bj9yLngrci53aWR0aCp0aGlzLmdldEF0dHJpYnV0ZShgZnhgKS5nZXROdW1iZXIoKTp0aGlzLmdldEF0dHJpYnV0ZShgZnhgKS5nZXRQaXhlbHMoYHhgKSksdGhpcy5nZXRBdHRyaWJ1dGUoYGZ5YCkuaGFzVmFsdWUoKSYmKHM9bj9yLnkrci5oZWlnaHQqdGhpcy5nZXRBdHRyaWJ1dGUoYGZ5YCkuZ2V0TnVtYmVyKCk6dGhpcy5nZXRBdHRyaWJ1dGUoYGZ5YCkuZ2V0UGl4ZWxzKGB5YCkpO3ZhciBjPW4/KHIud2lkdGgrci5oZWlnaHQpLzIqdGhpcy5nZXRBdHRyaWJ1dGUoYHJgKS5nZXROdW1iZXIoKTp0aGlzLmdldEF0dHJpYnV0ZShgcmApLmdldFBpeGVscygpLGw9dGhpcy5nZXRBdHRyaWJ1dGUoYGZyYCkuZ2V0UGl4ZWxzKCk7cmV0dXJuIGUuY3JlYXRlUmFkaWFsR3JhZGllbnQobyxzLGwsaSxhLGMpfX0sZG09Y2xhc3MgZXh0ZW5kcyBCcHtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pLHRoaXMudHlwZT1gc3RvcGA7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHRoaXMuZ2V0QXR0cmlidXRlKGBvZmZzZXRgKS5nZXROdW1iZXIoKSkpLGk9dGhpcy5nZXRTdHlsZShgc3RvcC1vcGFjaXR5YCksYT10aGlzLmdldFN0eWxlKGBzdG9wLWNvbG9yYCwhMCk7YS5nZXRTdHJpbmcoKT09PWBgJiZhLnNldFZhbHVlKGAjMDAwYCksaS5oYXNWYWx1ZSgpJiYoYT1hLmFkZE9wYWNpdHkoaSkpLHRoaXMub2Zmc2V0PXIsdGhpcy5jb2xvcj1hLmdldENvbG9yKCl9fSxmbT1jbGFzcyBleHRlbmRzIEJwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPWBhbmltYXRlYCx0aGlzLmR1cmF0aW9uPTAsdGhpcy5pbml0aWFsVmFsdWU9bnVsbCx0aGlzLmluaXRpYWxVbml0cz1gYCx0aGlzLnJlbW92ZWQ9ITEsdGhpcy5mcm96ZW49ITEsZS5zY3JlZW4uYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuYmVnaW49dGhpcy5nZXRBdHRyaWJ1dGUoYGJlZ2luYCkuZ2V0TWlsbGlzZWNvbmRzKCksdGhpcy5tYXhEdXJhdGlvbj10aGlzLmJlZ2luK3RoaXMuZ2V0QXR0cmlidXRlKGBkdXJgKS5nZXRNaWxsaXNlY29uZHMoKSx0aGlzLmZyb209dGhpcy5nZXRBdHRyaWJ1dGUoYGZyb21gKSx0aGlzLnRvPXRoaXMuZ2V0QXR0cmlidXRlKGB0b2ApLHRoaXMudmFsdWVzPW5ldyBTcChlLGB2YWx1ZXNgLG51bGwpO3ZhciByPXRoaXMuZ2V0QXR0cmlidXRlKGB2YWx1ZXNgKTtyLmhhc1ZhbHVlKCkmJnRoaXMudmFsdWVzLnNldFZhbHVlKHIuZ2V0U3RyaW5nKCkuc3BsaXQoYDtgKSl9Z2V0UHJvcGVydHkoKXt2YXIgZT10aGlzLmdldEF0dHJpYnV0ZShgYXR0cmlidXRlVHlwZWApLmdldFN0cmluZygpLHQ9dGhpcy5nZXRBdHRyaWJ1dGUoYGF0dHJpYnV0ZU5hbWVgKS5nZXRTdHJpbmcoKTtyZXR1cm4gZT09PWBDU1NgP3RoaXMucGFyZW50LmdldFN0eWxlKHQsITApOnRoaXMucGFyZW50LmdldEF0dHJpYnV0ZSh0LCEwKX1jYWxjVmFsdWUoKXt2YXJ7aW5pdGlhbFVuaXRzOmV9PXRoaXMse3Byb2dyZXNzOnQsZnJvbTpuLHRvOnJ9PXRoaXMuZ2V0UHJvZ3Jlc3MoKSxpPW4uZ2V0TnVtYmVyKCkrKHIuZ2V0TnVtYmVyKCktbi5nZXROdW1iZXIoKSkqdDtyZXR1cm4gZT09PWAlYCYmKGkqPTEwMCksYCR7aX0ke2V9YH11cGRhdGUoZSl7dmFye3BhcmVudDp0fT10aGlzLG49dGhpcy5nZXRQcm9wZXJ0eSgpO2lmKHRoaXMuaW5pdGlhbFZhbHVlfHwodGhpcy5pbml0aWFsVmFsdWU9bi5nZXRTdHJpbmcoKSx0aGlzLmluaXRpYWxVbml0cz1uLmdldFVuaXRzKCkpLHRoaXMuZHVyYXRpb24+dGhpcy5tYXhEdXJhdGlvbil7dmFyIHI9dGhpcy5nZXRBdHRyaWJ1dGUoYGZpbGxgKS5nZXRTdHJpbmcoYHJlbW92ZWApO2lmKHRoaXMuZ2V0QXR0cmlidXRlKGByZXBlYXRDb3VudGApLmdldFN0cmluZygpPT09YGluZGVmaW5pdGVgfHx0aGlzLmdldEF0dHJpYnV0ZShgcmVwZWF0RHVyYCkuZ2V0U3RyaW5nKCk9PT1gaW5kZWZpbml0ZWApdGhpcy5kdXJhdGlvbj0wO2Vsc2UgaWYocj09PWBmcmVlemVgJiYhdGhpcy5mcm96ZW4pdGhpcy5mcm96ZW49ITAsdC5hbmltYXRpb25Gcm96ZW49ITAsdC5hbmltYXRpb25Gcm96ZW5WYWx1ZT1uLmdldFN0cmluZygpO2Vsc2UgaWYocj09PWByZW1vdmVgJiYhdGhpcy5yZW1vdmVkKXJldHVybiB0aGlzLnJlbW92ZWQ9ITAsbi5zZXRWYWx1ZSh0LmFuaW1hdGlvbkZyb3plbj90LmFuaW1hdGlvbkZyb3plblZhbHVlOnRoaXMuaW5pdGlhbFZhbHVlKSwhMDtyZXR1cm4hMX10aGlzLmR1cmF0aW9uKz1lO3ZhciBpPSExO2lmKHRoaXMuYmVnaW48dGhpcy5kdXJhdGlvbil7dmFyIGE9dGhpcy5jYWxjVmFsdWUoKSxvPXRoaXMuZ2V0QXR0cmlidXRlKGB0eXBlYCk7by5oYXNWYWx1ZSgpJiYoYT1gJHtvLmdldFN0cmluZygpfSgke2F9KWApLG4uc2V0VmFsdWUoYSksaT0hMH1yZXR1cm4gaX1nZXRQcm9ncmVzcygpe3Zhcntkb2N1bWVudDplLHZhbHVlczp0fT10aGlzLG49e3Byb2dyZXNzOih0aGlzLmR1cmF0aW9uLXRoaXMuYmVnaW4pLyh0aGlzLm1heER1cmF0aW9uLXRoaXMuYmVnaW4pfTtpZih0Lmhhc1ZhbHVlKCkpe3ZhciByPW4ucHJvZ3Jlc3MqKHQuZ2V0VmFsdWUoKS5sZW5ndGgtMSksaT1NYXRoLmZsb29yKHIpLGE9TWF0aC5jZWlsKHIpO24uZnJvbT1uZXcgU3AoZSxgZnJvbWAscGFyc2VGbG9hdCh0LmdldFZhbHVlKClbaV0pKSxuLnRvPW5ldyBTcChlLGB0b2AscGFyc2VGbG9hdCh0LmdldFZhbHVlKClbYV0pKSxuLnByb2dyZXNzPShyLWkpLyhhLWkpfWVsc2Ugbi5mcm9tPXRoaXMuZnJvbSxuLnRvPXRoaXMudG87cmV0dXJuIG59fSxwbT1jbGFzcyBleHRlbmRzIGZte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YGFuaW1hdGVDb2xvcmB9Y2FsY1ZhbHVlKCl7dmFye3Byb2dyZXNzOmUsZnJvbTp0LHRvOm59PXRoaXMuZ2V0UHJvZ3Jlc3MoKSxyPW5ldyBkcC5kZWZhdWx0KHQuZ2V0Q29sb3IoKSksaT1uZXcgZHAuZGVmYXVsdChuLmdldENvbG9yKCkpO2lmKHIub2smJmkub2spe3ZhciBhPXIucisoaS5yLXIucikqZSxvPXIuZysoaS5nLXIuZykqZSxzPXIuYisoaS5iLXIuYikqZTtyZXR1cm5gcmdiKCR7TWF0aC5mbG9vcihhKX0sICR7TWF0aC5mbG9vcihvKX0sICR7TWF0aC5mbG9vcihzKX0pYH1yZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoYGZyb21gKS5nZXRDb2xvcigpfX0sbW09Y2xhc3MgZXh0ZW5kcyBmbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWBhbmltYXRlVHJhbnNmb3JtYH1jYWxjVmFsdWUoKXt2YXJ7cHJvZ3Jlc3M6ZSxmcm9tOnQsdG86bn09dGhpcy5nZXRQcm9ncmVzcygpLHI9a2YodC5nZXRTdHJpbmcoKSksaT1rZihuLmdldFN0cmluZygpKTtyZXR1cm4gci5tYXAoKHQsbik9PnQrKGlbbl0tdCkqZSkuam9pbihgIGApfX0saG09Y2xhc3MgZXh0ZW5kcyBCcHtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pLHRoaXMudHlwZT1gZm9udGAsdGhpcy5nbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmhvcml6QWR2WD10aGlzLmdldEF0dHJpYnV0ZShgaG9yaXotYWR2LXhgKS5nZXROdW1iZXIoKTt2YXJ7ZGVmaW5pdGlvbnM6cn09ZSx7Y2hpbGRyZW46aX09dGhpcztmb3IodmFyIGEgb2YgaSlzd2l0Y2goYS50eXBlKXtjYXNlYGZvbnQtZmFjZWA6dGhpcy5mb250RmFjZT1hO3ZhciBvPWEuZ2V0U3R5bGUoYGZvbnQtZmFtaWx5YCk7by5oYXNWYWx1ZSgpJiYocltvLmdldFN0cmluZygpXT10aGlzKTticmVhaztjYXNlYG1pc3NpbmctZ2x5cGhgOnRoaXMubWlzc2luZ0dseXBoPWE7YnJlYWs7Y2FzZWBnbHlwaGA6dmFyIHM9YTtzLmFyYWJpY0Zvcm0/KHRoaXMuaXNSVEw9ITAsdGhpcy5pc0FyYWJpYz0hMCx0aGlzLmdseXBoc1tzLnVuaWNvZGVdPT09dm9pZCAwJiYodGhpcy5nbHlwaHNbcy51bmljb2RlXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmdseXBoc1tzLnVuaWNvZGVdW3MuYXJhYmljRm9ybV09cyk6dGhpcy5nbHlwaHNbcy51bmljb2RlXT1zO2JyZWFrfX1yZW5kZXIoKXt9fSxnbT1jbGFzcyBleHRlbmRzIEJwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPWBmb250LWZhY2VgLHRoaXMuYXNjZW50PXRoaXMuZ2V0QXR0cmlidXRlKGBhc2NlbnRgKS5nZXROdW1iZXIoKSx0aGlzLmRlc2NlbnQ9dGhpcy5nZXRBdHRyaWJ1dGUoYGRlc2NlbnRgKS5nZXROdW1iZXIoKSx0aGlzLnVuaXRzUGVyRW09dGhpcy5nZXRBdHRyaWJ1dGUoYHVuaXRzLXBlci1lbWApLmdldE51bWJlcigpfX0sX209Y2xhc3MgZXh0ZW5kcyBLcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWBtaXNzaW5nLWdseXBoYCx0aGlzLmhvcml6QWR2WD0wfX0sdm09Y2xhc3MgZXh0ZW5kcyBKcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWB0cmVmYH1nZXRUZXh0KCl7dmFyIGU9dGhpcy5nZXRIcmVmQXR0cmlidXRlKCkuZ2V0RGVmaW5pdGlvbigpO2lmKGUpe3ZhciB0PWUuY2hpbGRyZW5bMF07aWYodClyZXR1cm4gdC5nZXRUZXh0KCl9cmV0dXJuYGB9fSx5bT1jbGFzcyBleHRlbmRzIEpwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPWBhYDt2YXJ7Y2hpbGROb2RlczpyfT10LGk9clswXSxhPXIubGVuZ3RoPjAmJkFycmF5LmZyb20ocikuZXZlcnkoZT0+ZS5ub2RlVHlwZT09PTMpO3RoaXMuaGFzVGV4dD1hLHRoaXMudGV4dD1hP3RoaXMuZ2V0VGV4dEZyb21Ob2RlKGkpOmBgfWdldFRleHQoKXtyZXR1cm4gdGhpcy50ZXh0fXJlbmRlckNoaWxkcmVuKGUpe2lmKHRoaXMuaGFzVGV4dCl7c3VwZXIucmVuZGVyQ2hpbGRyZW4oZSk7dmFye2RvY3VtZW50OnQseDpuLHk6cn09dGhpcyx7bW91c2U6aX09dC5zY3JlZW4sYT1uZXcgU3AodCxgZm9udFNpemVgLEhwLnBhcnNlKHQuY3R4LmZvbnQpLmZvbnRTaXplKTtpLmlzV29ya2luZygpJiZpLmNoZWNrQm91bmRpbmdCb3godGhpcyxuZXcgVXAobixyLWEuZ2V0UGl4ZWxzKGB5YCksbit0aGlzLm1lYXN1cmVUZXh0KGUpLHIpKX1lbHNlIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3ZhciBvPW5ldyBzbSh0aGlzLmRvY3VtZW50LG51bGwpO28uY2hpbGRyZW49dGhpcy5jaGlsZHJlbixvLnBhcmVudD10aGlzLG8ucmVuZGVyKGUpfX1vbkNsaWNrKCl7dmFye3dpbmRvdzplfT10aGlzLmRvY3VtZW50O2UmJmUub3Blbih0aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXRTdHJpbmcoKSl9b25Nb3VzZU1vdmUoKXt2YXIgZT10aGlzLmRvY3VtZW50LmN0eDtlLmNhbnZhcy5zdHlsZS5jdXJzb3I9YHBvaW50ZXJgfX0sYm09Y2xhc3MgZXh0ZW5kcyBKcHtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pLHRoaXMudHlwZT1gdGV4dFBhdGhgLHRoaXMudGV4dFdpZHRoPTAsdGhpcy50ZXh0SGVpZ2h0PTAsdGhpcy5wYXRoTGVuZ3RoPS0xLHRoaXMuZ2x5cGhJbmZvPW51bGwsdGhpcy5sZXR0ZXJTcGFjaW5nQ2FjaGU9W10sdGhpcy5tZWFzdXJlc0NhY2hlPW5ldyBNYXAoW1tgYCwwXV0pO3ZhciByPXRoaXMuZ2V0SHJlZkF0dHJpYnV0ZSgpLmdldERlZmluaXRpb24oKTt0aGlzLnRleHQ9dGhpcy5nZXRUZXh0RnJvbU5vZGUoKSx0aGlzLmRhdGFBcnJheT10aGlzLnBhcnNlUGF0aERhdGEocil9Z2V0VGV4dCgpe3JldHVybiB0aGlzLnRleHR9cGF0aChlKXt2YXJ7ZGF0YUFycmF5OnR9PXRoaXM7ZSYmZS5iZWdpblBhdGgoKSx0LmZvckVhY2godD0+e3Zhcnt0eXBlOm4scG9pbnRzOnJ9PXQ7c3dpdGNoKG4pe2Nhc2UgV3AuTElORV9UTzplJiZlLmxpbmVUbyhyWzBdLHJbMV0pO2JyZWFrO2Nhc2UgV3AuTU9WRV9UTzplJiZlLm1vdmVUbyhyWzBdLHJbMV0pO2JyZWFrO2Nhc2UgV3AuQ1VSVkVfVE86ZSYmZS5iZXppZXJDdXJ2ZVRvKHJbMF0sclsxXSxyWzJdLHJbM10scls0XSxyWzVdKTticmVhaztjYXNlIFdwLlFVQURfVE86ZSYmZS5xdWFkcmF0aWNDdXJ2ZVRvKHJbMF0sclsxXSxyWzJdLHJbM10pO2JyZWFrO2Nhc2UgV3AuQVJDOnZhcltpLGEsbyxzLGMsbCx1LGRdPXIsZj1vPnM/bzpzLHA9bz5zPzE6by9zLG09bz5zP3MvbzoxO2UmJihlLnRyYW5zbGF0ZShpLGEpLGUucm90YXRlKHUpLGUuc2NhbGUocCxtKSxlLmFyYygwLDAsZixjLGMrbCwhISgxLWQpKSxlLnNjYWxlKDEvcCwxL20pLGUucm90YXRlKC11KSxlLnRyYW5zbGF0ZSgtaSwtYSkpO2JyZWFrO2Nhc2UgV3AuQ0xPU0VfUEFUSDplJiZlLmNsb3NlUGF0aCgpO2JyZWFrfX0pfXJlbmRlckNoaWxkcmVuKGUpe3RoaXMuc2V0VGV4dERhdGEoZSksZS5zYXZlKCk7dmFyIHQ9dGhpcy5wYXJlbnQuZ2V0U3R5bGUoYHRleHQtZGVjb3JhdGlvbmApLmdldFN0cmluZygpLG49dGhpcy5nZXRGb250U2l6ZSgpLHtnbHlwaEluZm86cn09dGhpcyxpPWUuZmlsbFN0eWxlO3Q9PT1gdW5kZXJsaW5lYCYmZS5iZWdpblBhdGgoKSxyLmZvckVhY2goKHIsaSk9Pnt2YXJ7cDA6YSxwMTpvLHJvdGF0aW9uOnMsdGV4dDpjfT1yO2Uuc2F2ZSgpLGUudHJhbnNsYXRlKGEueCxhLnkpLGUucm90YXRlKHMpLGUuZmlsbFN0eWxlJiZlLmZpbGxUZXh0KGMsMCwwKSxlLnN0cm9rZVN0eWxlJiZlLnN0cm9rZVRleHQoYywwLDApLGUucmVzdG9yZSgpLHQ9PT1gdW5kZXJsaW5lYCYmKGk9PT0wJiZlLm1vdmVUbyhhLngsYS55K24vOCksZS5saW5lVG8oby54LG8ueStuLzUpKX0pLHQ9PT1gdW5kZXJsaW5lYCYmKGUubGluZVdpZHRoPW4vMjAsZS5zdHJva2VTdHlsZT1pLGUuc3Ryb2tlKCksZS5jbG9zZVBhdGgoKSksZS5yZXN0b3JlKCl9Z2V0TGV0dGVyU3BhY2luZ0F0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOjA7cmV0dXJuIHRoaXMubGV0dGVyU3BhY2luZ0NhY2hlW2VdfHwwfWZpbmRTZWdtZW50VG9GaXRDaGFyKGUsdCxuLHIsaSxhLG8scyxjKXt2YXIgbD1hLHU9dGhpcy5tZWFzdXJlVGV4dChlLHMpO3M9PT1gIGAmJnQ9PT1ganVzdGlmeWAmJm48ciYmKHUrPShyLW4pL2kpLGM+LTEmJihsKz10aGlzLmdldExldHRlclNwYWNpbmdBdChjKSk7dmFyIGQ9dGhpcy50ZXh0SGVpZ2h0LzIwLGY9dGhpcy5nZXRFcXVpZGlzdGFudFBvaW50T25QYXRoKGwsZCwwKSxwPXRoaXMuZ2V0RXF1aWRpc3RhbnRQb2ludE9uUGF0aChsK3UsZCwwKSxtPXtwMDpmLHAxOnB9LGg9ZiYmcD9NYXRoLmF0YW4yKHAueS1mLnkscC54LWYueCk6MDtpZihvKXt2YXIgZz1NYXRoLmNvcyhNYXRoLlBJLzIraCkqbyxfPU1hdGguY29zKC1oKSpvO20ucDA9UWYoUWYoe30sZikse30se3g6Zi54K2cseTpmLnkrX30pLG0ucDE9UWYoUWYoe30scCkse30se3g6cC54K2cseTpwLnkrX30pfXJldHVybiBsKz11LHtvZmZzZXQ6bCxzZWdtZW50Om0scm90YXRpb246aH19bWVhc3VyZVRleHQoZSx0KXt2YXJ7bWVhc3VyZXNDYWNoZTpufT10aGlzLHI9dHx8dGhpcy5nZXRUZXh0KCk7aWYobi5oYXMocikpcmV0dXJuIG4uZ2V0KHIpO3ZhciBpPXRoaXMubWVhc3VyZVRhcmdldFRleHQoZSxyKTtyZXR1cm4gbi5zZXQocixpKSxpfXNldFRleHREYXRhKGUpe2lmKCF0aGlzLmdseXBoSW5mbyl7dmFyIHQ9dGhpcy5nZXRUZXh0KCksbj10LnNwbGl0KGBgKSxyPXQuc3BsaXQoYCBgKS5sZW5ndGgtMSxpPXRoaXMucGFyZW50LmdldEF0dHJpYnV0ZShgZHhgKS5zcGxpdCgpLm1hcChlPT5lLmdldFBpeGVscyhgeGApKSxhPXRoaXMucGFyZW50LmdldEF0dHJpYnV0ZShgZHlgKS5nZXRQaXhlbHMoYHlgKSxvPXRoaXMucGFyZW50LmdldFN0eWxlKGB0ZXh0LWFuY2hvcmApLmdldFN0cmluZyhgc3RhcnRgKSxzPXRoaXMuZ2V0U3R5bGUoYGxldHRlci1zcGFjaW5nYCksYz10aGlzLnBhcmVudC5nZXRTdHlsZShgbGV0dGVyLXNwYWNpbmdgKSxsPTA7IXMuaGFzVmFsdWUoKXx8cy5nZXRWYWx1ZSgpPT09YGluaGVyaXRgP2w9Yy5nZXRQaXhlbHMoKTpzLmhhc1ZhbHVlKCkmJnMuZ2V0VmFsdWUoKSE9PWBpbml0aWFsYCYmcy5nZXRWYWx1ZSgpIT09YHVuc2V0YCYmKGw9cy5nZXRQaXhlbHMoKSk7dmFyIHU9W10sZD10Lmxlbmd0aDt0aGlzLmxldHRlclNwYWNpbmdDYWNoZT11O2Zvcih2YXIgZj0wO2Y8ZDtmKyspdS5wdXNoKGlbZl09PT12b2lkIDA/bDppW2ZdKTt2YXIgcD11LnJlZHVjZSgoZSx0LG4pPT5uPT09MD8wOmUrdHx8MCwwKSxtPXRoaXMubWVhc3VyZVRleHQoZSksaD1NYXRoLm1heChtK3AsMCk7dGhpcy50ZXh0V2lkdGg9bSx0aGlzLnRleHRIZWlnaHQ9dGhpcy5nZXRGb250U2l6ZSgpLHRoaXMuZ2x5cGhJbmZvPVtdO3ZhciBnPXRoaXMuZ2V0UGF0aExlbmd0aCgpLF89dGhpcy5nZXRTdHlsZShgc3RhcnRPZmZzZXRgKS5nZXROdW1iZXIoMCkqZyx2PTA7KG89PT1gbWlkZGxlYHx8bz09PWBjZW50ZXJgKSYmKHY9LWgvMiksKG89PT1gZW5kYHx8bz09PWByaWdodGApJiYodj0taCksdis9XyxuLmZvckVhY2goKHQsaSk9Pnt2YXJ7b2Zmc2V0OnMsc2VnbWVudDpjLHJvdGF0aW9uOmx9PXRoaXMuZmluZFNlZ21lbnRUb0ZpdENoYXIoZSxvLGgsZyxyLHYsYSx0LGkpO3Y9cywhKCFjLnAwfHwhYy5wMSkmJnRoaXMuZ2x5cGhJbmZvLnB1c2goe3RleHQ6bltpXSxwMDpjLnAwLHAxOmMucDEscm90YXRpb246bH0pfSl9fXBhcnNlUGF0aERhdGEoZSl7aWYodGhpcy5wYXRoTGVuZ3RoPS0xLCFlKXJldHVybltdO3ZhciB0PVtdLHtwYXRoUGFyc2VyOm59PWU7Zm9yKG4ucmVzZXQoKTshbi5pc0VuZCgpOyl7dmFye2N1cnJlbnQ6cn09bixpPXI/ci54OjAsYT1yP3IueTowLG89bi5uZXh0KCkscz1vLnR5cGUsYz1bXTtzd2l0Y2goby50eXBlKXtjYXNlIFdwLk1PVkVfVE86dGhpcy5wYXRoTShuLGMpO2JyZWFrO2Nhc2UgV3AuTElORV9UTzpzPXRoaXMucGF0aEwobixjKTticmVhaztjYXNlIFdwLkhPUklaX0xJTkVfVE86cz10aGlzLnBhdGhIKG4sYyk7YnJlYWs7Y2FzZSBXcC5WRVJUX0xJTkVfVE86cz10aGlzLnBhdGhWKG4sYyk7YnJlYWs7Y2FzZSBXcC5DVVJWRV9UTzp0aGlzLnBhdGhDKG4sYyk7YnJlYWs7Y2FzZSBXcC5TTU9PVEhfQ1VSVkVfVE86cz10aGlzLnBhdGhTKG4sYyk7YnJlYWs7Y2FzZSBXcC5RVUFEX1RPOnRoaXMucGF0aFEobixjKTticmVhaztjYXNlIFdwLlNNT09USF9RVUFEX1RPOnM9dGhpcy5wYXRoVChuLGMpO2JyZWFrO2Nhc2UgV3AuQVJDOmM9dGhpcy5wYXRoQShuKTticmVhaztjYXNlIFdwLkNMT1NFX1BBVEg6S3AucGF0aFoobik7YnJlYWt9by50eXBlPT09V3AuQ0xPU0VfUEFUSD90LnB1c2goe3R5cGU6V3AuQ0xPU0VfUEFUSCxwb2ludHM6W10scGF0aExlbmd0aDowfSk6dC5wdXNoKHt0eXBlOnMscG9pbnRzOmMsc3RhcnQ6e3g6aSx5OmF9LHBhdGhMZW5ndGg6dGhpcy5jYWxjTGVuZ3RoKGksYSxzLGMpfSl9cmV0dXJuIHR9cGF0aE0oZSx0KXt2YXJ7eDpuLHk6cn09S3AucGF0aE0oZSkucG9pbnQ7dC5wdXNoKG4scil9cGF0aEwoZSx0KXt2YXJ7eDpuLHk6cn09S3AucGF0aEwoZSkucG9pbnQ7cmV0dXJuIHQucHVzaChuLHIpLFdwLkxJTkVfVE99cGF0aEgoZSx0KXt2YXJ7eDpuLHk6cn09S3AucGF0aEgoZSkucG9pbnQ7cmV0dXJuIHQucHVzaChuLHIpLFdwLkxJTkVfVE99cGF0aFYoZSx0KXt2YXJ7eDpuLHk6cn09S3AucGF0aFYoZSkucG9pbnQ7cmV0dXJuIHQucHVzaChuLHIpLFdwLkxJTkVfVE99cGF0aEMoZSx0KXt2YXJ7cG9pbnQ6bixjb250cm9sUG9pbnQ6cixjdXJyZW50UG9pbnQ6aX09S3AucGF0aEMoZSk7dC5wdXNoKG4ueCxuLnksci54LHIueSxpLngsaS55KX1wYXRoUyhlLHQpe3Zhcntwb2ludDpuLGNvbnRyb2xQb2ludDpyLGN1cnJlbnRQb2ludDppfT1LcC5wYXRoUyhlKTtyZXR1cm4gdC5wdXNoKG4ueCxuLnksci54LHIueSxpLngsaS55KSxXcC5DVVJWRV9UT31wYXRoUShlLHQpe3Zhcntjb250cm9sUG9pbnQ6bixjdXJyZW50UG9pbnQ6cn09S3AucGF0aFEoZSk7dC5wdXNoKG4ueCxuLnksci54LHIueSl9cGF0aFQoZSx0KXt2YXJ7Y29udHJvbFBvaW50Om4sY3VycmVudFBvaW50OnJ9PUtwLnBhdGhUKGUpO3JldHVybiB0LnB1c2gobi54LG4ueSxyLngsci55KSxXcC5RVUFEX1RPfXBhdGhBKGUpe3ZhcntyWDp0LHJZOm4sc3dlZXBGbGFnOnIseEF4aXNSb3RhdGlvbjppLGNlbnRwOmEsYTE6byxhZDpzfT1LcC5wYXRoQShlKTtyZXR1cm4gcj09PTAmJnM+MCYmKHMtPTIqTWF0aC5QSSkscj09PTEmJnM8MCYmKHMrPTIqTWF0aC5QSSksW2EueCxhLnksdCxuLG8scyxpLHJdfWNhbGNMZW5ndGgoZSx0LG4scil7dmFyIGk9MCxhPW51bGwsbz1udWxsLHM9MDtzd2l0Y2gobil7Y2FzZSBXcC5MSU5FX1RPOnJldHVybiB0aGlzLmdldExpbmVMZW5ndGgoZSx0LHJbMF0sclsxXSk7Y2FzZSBXcC5DVVJWRV9UTzpmb3IoaT0wLGE9dGhpcy5nZXRQb2ludE9uQ3ViaWNCZXppZXIoMCxlLHQsclswXSxyWzFdLHJbMl0sclszXSxyWzRdLHJbNV0pLHM9LjAxO3M8PTE7cys9LjAxKW89dGhpcy5nZXRQb2ludE9uQ3ViaWNCZXppZXIocyxlLHQsclswXSxyWzFdLHJbMl0sclszXSxyWzRdLHJbNV0pLGkrPXRoaXMuZ2V0TGluZUxlbmd0aChhLngsYS55LG8ueCxvLnkpLGE9bztyZXR1cm4gaTtjYXNlIFdwLlFVQURfVE86Zm9yKGk9MCxhPXRoaXMuZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcigwLGUsdCxyWzBdLHJbMV0sclsyXSxyWzNdKSxzPS4wMTtzPD0xO3MrPS4wMSlvPXRoaXMuZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcihzLGUsdCxyWzBdLHJbMV0sclsyXSxyWzNdKSxpKz10aGlzLmdldExpbmVMZW5ndGgoYS54LGEueSxvLngsby55KSxhPW87cmV0dXJuIGk7Y2FzZSBXcC5BUkM6aT0wO3ZhciBjPXJbNF0sbD1yWzVdLHU9cls0XStsLGQ9TWF0aC5QSS8xODA7aWYoTWF0aC5hYnMoYy11KTxkJiYoZD1NYXRoLmFicyhjLXUpKSxhPXRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMoclswXSxyWzFdLHJbMl0sclszXSxjLDApLGw8MClmb3Iocz1jLWQ7cz51O3MtPWQpbz10aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHJbMF0sclsxXSxyWzJdLHJbM10scywwKSxpKz10aGlzLmdldExpbmVMZW5ndGgoYS54LGEueSxvLngsby55KSxhPW87ZWxzZSBmb3Iocz1jK2Q7czx1O3MrPWQpbz10aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHJbMF0sclsxXSxyWzJdLHJbM10scywwKSxpKz10aGlzLmdldExpbmVMZW5ndGgoYS54LGEueSxvLngsby55KSxhPW87cmV0dXJuIG89dGhpcy5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhyWzBdLHJbMV0sclsyXSxyWzNdLHUsMCksaSs9dGhpcy5nZXRMaW5lTGVuZ3RoKGEueCxhLnksby54LG8ueSksaX1yZXR1cm4gMH1nZXRQb2ludE9uTGluZShlLHQsbixyLGkpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTp0LG89YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0hPT12b2lkIDA/YXJndW1lbnRzWzZdOm4scz0oaS1uKS8oci10K3hwKSxjPU1hdGguc3FydChlKmUvKDErcypzKSk7cjx0JiYoYyo9LTEpO3ZhciBsPXMqYyx1PW51bGw7aWYocj09PXQpdT17eDphLHk6bytsfTtlbHNlIGlmKChvLW4pLyhhLXQrMWUtOCk9PT1zKXU9e3g6YStjLHk6bytsfTtlbHNle3ZhciBkPTAsZj0wLHA9dGhpcy5nZXRMaW5lTGVuZ3RoKHQsbixyLGkpO2lmKHA8MWUtOClyZXR1cm4gbnVsbDt2YXIgbT0oYS10KSooci10KSsoby1uKSooaS1uKTttLz1wKnAsZD10K20qKHItdCksZj1uK20qKGktbik7dmFyIGg9dGhpcy5nZXRMaW5lTGVuZ3RoKGEsbyxkLGYpLGc9TWF0aC5zcXJ0KGUqZS1oKmgpO2M9TWF0aC5zcXJ0KGcqZy8oMStzKnMpKSxyPHQmJihjKj0tMSksbD1zKmMsdT17eDpkK2MseTpmK2x9fXJldHVybiB1fWdldFBvaW50T25QYXRoKGUpe3ZhciB0PXRoaXMuZ2V0UGF0aExlbmd0aCgpLG49MCxyPW51bGw7aWYoZTwtNWUtNXx8ZS01ZS01PnQpcmV0dXJuIG51bGw7dmFye2RhdGFBcnJheTppfT10aGlzO2Zvcih2YXIgYSBvZiBpKXtpZihhJiYoYS5wYXRoTGVuZ3RoPDVlLTV8fG4rYS5wYXRoTGVuZ3RoKzVlLTU8ZSkpe24rPWEucGF0aExlbmd0aDtjb250aW51ZX12YXIgbz1lLW4scz0wO3N3aXRjaChhLnR5cGUpe2Nhc2UgV3AuTElORV9UTzpyPXRoaXMuZ2V0UG9pbnRPbkxpbmUobyxhLnN0YXJ0LngsYS5zdGFydC55LGEucG9pbnRzWzBdLGEucG9pbnRzWzFdLGEuc3RhcnQueCxhLnN0YXJ0LnkpO2JyZWFrO2Nhc2UgV3AuQVJDOnZhciBjPWEucG9pbnRzWzRdLGw9YS5wb2ludHNbNV0sdT1hLnBvaW50c1s0XStsO2lmKHM9YytvL2EucGF0aExlbmd0aCpsLGw8MCYmczx1fHxsPj0wJiZzPnUpYnJlYWs7cj10aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKGEucG9pbnRzWzBdLGEucG9pbnRzWzFdLGEucG9pbnRzWzJdLGEucG9pbnRzWzNdLHMsYS5wb2ludHNbNl0pO2JyZWFrO2Nhc2UgV3AuQ1VSVkVfVE86cz1vL2EucGF0aExlbmd0aCxzPjEmJihzPTEpLHI9dGhpcy5nZXRQb2ludE9uQ3ViaWNCZXppZXIocyxhLnN0YXJ0LngsYS5zdGFydC55LGEucG9pbnRzWzBdLGEucG9pbnRzWzFdLGEucG9pbnRzWzJdLGEucG9pbnRzWzNdLGEucG9pbnRzWzRdLGEucG9pbnRzWzVdKTticmVhaztjYXNlIFdwLlFVQURfVE86cz1vL2EucGF0aExlbmd0aCxzPjEmJihzPTEpLHI9dGhpcy5nZXRQb2ludE9uUXVhZHJhdGljQmV6aWVyKHMsYS5zdGFydC54LGEuc3RhcnQueSxhLnBvaW50c1swXSxhLnBvaW50c1sxXSxhLnBvaW50c1syXSxhLnBvaW50c1szXSk7YnJlYWt9aWYocilyZXR1cm4gcjticmVha31yZXR1cm4gbnVsbH1nZXRMaW5lTGVuZ3RoKGUsdCxuLHIpe3JldHVybiBNYXRoLnNxcnQoKG4tZSkqKG4tZSkrKHItdCkqKHItdCkpfWdldFBhdGhMZW5ndGgoKXtyZXR1cm4gdGhpcy5wYXRoTGVuZ3RoPT09LTEmJih0aGlzLnBhdGhMZW5ndGg9dGhpcy5kYXRhQXJyYXkucmVkdWNlKChlLHQpPT50LnBhdGhMZW5ndGg+MD9lK3QucGF0aExlbmd0aDplLDApKSx0aGlzLnBhdGhMZW5ndGh9Z2V0UG9pbnRPbkN1YmljQmV6aWVyKGUsdCxuLHIsaSxhLG8scyxjKXtyZXR1cm57eDpzKlJmKGUpK2EqemYoZSkrcipCZihlKSt0KlZmKGUpLHk6YypSZihlKStvKnpmKGUpK2kqQmYoZSkrbipWZihlKX19Z2V0UG9pbnRPblF1YWRyYXRpY0JlemllcihlLHQsbixyLGksYSxvKXtyZXR1cm57eDphKkhmKGUpK3IqVWYoZSkrdCpXZihlKSx5Om8qSGYoZSkraSpVZihlKStuKldmKGUpfX1nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhlLHQsbixyLGksYSl7dmFyIG89TWF0aC5jb3MoYSkscz1NYXRoLnNpbihhKSxjPXt4Om4qTWF0aC5jb3MoaSkseTpyKk1hdGguc2luKGkpfTtyZXR1cm57eDplKyhjLngqby1jLnkqcykseTp0KyhjLngqcytjLnkqbyl9fWJ1aWxkRXF1aWRpc3RhbnRDYWNoZShlLHQpe3ZhciBuPXRoaXMuZ2V0UGF0aExlbmd0aCgpLHI9dHx8LjI1LGk9ZXx8bi8xMDA7aWYoIXRoaXMuZXF1aWRpc3RhbnRDYWNoZXx8dGhpcy5lcXVpZGlzdGFudENhY2hlLnN0ZXAhPT1pfHx0aGlzLmVxdWlkaXN0YW50Q2FjaGUucHJlY2lzaW9uIT09cil7dGhpcy5lcXVpZGlzdGFudENhY2hlPXtzdGVwOmkscHJlY2lzaW9uOnIscG9pbnRzOltdfTtmb3IodmFyIGE9MCxvPTA7bzw9bjtvKz1yKXt2YXIgcz10aGlzLmdldFBvaW50T25QYXRoKG8pLGM9dGhpcy5nZXRQb2ludE9uUGF0aChvK3IpOyFzfHwhY3x8KGErPXRoaXMuZ2V0TGluZUxlbmd0aChzLngscy55LGMueCxjLnkpLGE+PWkmJih0aGlzLmVxdWlkaXN0YW50Q2FjaGUucG9pbnRzLnB1c2goe3g6cy54LHk6cy55LGRpc3RhbmNlOm99KSxhLT1pKSl9fX1nZXRFcXVpZGlzdGFudFBvaW50T25QYXRoKGUsdCxuKXtpZih0aGlzLmJ1aWxkRXF1aWRpc3RhbnRDYWNoZSh0LG4pLGU8MHx8ZS10aGlzLmdldFBhdGhMZW5ndGgoKT41ZS01KXJldHVybiBudWxsO3ZhciByPU1hdGgucm91bmQoZS90aGlzLmdldFBhdGhMZW5ndGgoKSoodGhpcy5lcXVpZGlzdGFudENhY2hlLnBvaW50cy5sZW5ndGgtMSkpO3JldHVybiB0aGlzLmVxdWlkaXN0YW50Q2FjaGUucG9pbnRzW3JdfHxudWxsfX0seG09L15ccypkYXRhOigoW14vLDtdK1wvW14vLDtdKykoPzo7KFteLDs9XSs9W14sOz1dKykpPyk/KD86OyhiYXNlNjQpKT8sKC4qKSQvaSxTbT1jbGFzcyBleHRlbmRzIEdwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPWBpbWFnZWAsdGhpcy5sb2FkZWQ9ITE7dmFyIHI9dGhpcy5nZXRIcmVmQXR0cmlidXRlKCkuZ2V0U3RyaW5nKCk7aWYocil7dmFyIGk9ci5lbmRzV2l0aChgLnN2Z2ApfHwvXlxzKmRhdGE6aW1hZ2VcL3N2Z1wreG1sL2kudGVzdChyKTtlLmltYWdlcy5wdXNoKHRoaXMpLGk/dGhpcy5sb2FkU3ZnKHIpOnRoaXMubG9hZEltYWdlKHIpLHRoaXMuaXNTdmc9aX19bG9hZEltYWdlKGUpe3ZhciB0PXRoaXM7cmV0dXJuIFZ1KGZ1bmN0aW9uKigpe3RyeXt0LmltYWdlPXlpZWxkIHQuZG9jdW1lbnQuY3JlYXRlSW1hZ2UoZSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcihgRXJyb3Igd2hpbGUgbG9hZGluZyBpbWFnZSAiJHtlfSI6YCx0KX10LmxvYWRlZD0hMH0pKCl9bG9hZFN2ZyhlKXt2YXIgdD10aGlzO3JldHVybiBWdShmdW5jdGlvbiooKXt2YXIgbj14bS5leGVjKGUpO2lmKG4pe3ZhciByPW5bNV07bls0XT09PWBiYXNlNjRgP3QuaW1hZ2U9YXRvYihyKTp0LmltYWdlPWRlY29kZVVSSUNvbXBvbmVudChyKX1lbHNlIHRyeXt0LmltYWdlPXlpZWxkKHlpZWxkIHQuZG9jdW1lbnQuZmV0Y2goZSkpLnRleHQoKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKGBFcnJvciB3aGlsZSBsb2FkaW5nIGltYWdlICIke2V9IjpgLHQpfXQubG9hZGVkPSEwfSkoKX1yZW5kZXJDaGlsZHJlbihlKXt2YXJ7ZG9jdW1lbnQ6dCxpbWFnZTpuLGxvYWRlZDpyfT10aGlzLGk9dGhpcy5nZXRBdHRyaWJ1dGUoYHhgKS5nZXRQaXhlbHMoYHhgKSxhPXRoaXMuZ2V0QXR0cmlidXRlKGB5YCkuZ2V0UGl4ZWxzKGB5YCksbz10aGlzLmdldFN0eWxlKGB3aWR0aGApLmdldFBpeGVscyhgeGApLHM9dGhpcy5nZXRTdHlsZShgaGVpZ2h0YCkuZ2V0UGl4ZWxzKGB5YCk7aWYoISghcnx8IW58fCFvfHwhcykpe2lmKGUuc2F2ZSgpLGUudHJhbnNsYXRlKGksYSksdGhpcy5pc1N2Zyl7dmFyIGM9dC5jYW52Zy5mb3JrU3RyaW5nKGUsdGhpcy5pbWFnZSx7aWdub3JlTW91c2U6ITAsaWdub3JlQW5pbWF0aW9uOiEwLGlnbm9yZURpbWVuc2lvbnM6ITAsaWdub3JlQ2xlYXI6ITAsb2Zmc2V0WDowLG9mZnNldFk6MCxzY2FsZVdpZHRoOm8sc2NhbGVIZWlnaHQ6c30pO2MuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnBhcmVudD10aGlzLGMucmVuZGVyKCl9ZWxzZXt2YXIgbD10aGlzLmltYWdlO3Quc2V0Vmlld0JveCh7Y3R4OmUsYXNwZWN0UmF0aW86dGhpcy5nZXRBdHRyaWJ1dGUoYHByZXNlcnZlQXNwZWN0UmF0aW9gKS5nZXRTdHJpbmcoKSx3aWR0aDpvLGRlc2lyZWRXaWR0aDpsLndpZHRoLGhlaWdodDpzLGRlc2lyZWRIZWlnaHQ6bC5oZWlnaHR9KSx0aGlzLmxvYWRlZCYmKGwuY29tcGxldGU9PT12b2lkIDB8fGwuY29tcGxldGUpJiZlLmRyYXdJbWFnZShsLDAsMCl9ZS5yZXN0b3JlKCl9fWdldEJvdW5kaW5nQm94KCl7dmFyIGU9dGhpcy5nZXRBdHRyaWJ1dGUoYHhgKS5nZXRQaXhlbHMoYHhgKSx0PXRoaXMuZ2V0QXR0cmlidXRlKGB5YCkuZ2V0UGl4ZWxzKGB5YCksbj10aGlzLmdldFN0eWxlKGB3aWR0aGApLmdldFBpeGVscyhgeGApLHI9dGhpcy5nZXRTdHlsZShgaGVpZ2h0YCkuZ2V0UGl4ZWxzKGB5YCk7cmV0dXJuIG5ldyBVcChlLHQsZStuLHQrcil9fSxDbT1jbGFzcyBleHRlbmRzIEdwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YHN5bWJvbGB9cmVuZGVyKGUpe319LHdtPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZG9jdW1lbnQ9ZSx0aGlzLmxvYWRlZD0hMSxlLmZvbnRzLnB1c2godGhpcyl9bG9hZChlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIFZ1KGZ1bmN0aW9uKigpe3RyeXt2YXJ7ZG9jdW1lbnQ6cn09bixpPSh5aWVsZCByLmNhbnZnLnBhcnNlci5sb2FkKHQpKS5nZXRFbGVtZW50c0J5VGFnTmFtZShgZm9udGApO0FycmF5LmZyb20oaSkuZm9yRWFjaCh0PT57dmFyIG49ci5jcmVhdGVFbGVtZW50KHQpO3IuZGVmaW5pdGlvbnNbZV09bn0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIGxvYWRpbmcgZm9udCAiJHt0fSI6YCxlKX1uLmxvYWRlZD0hMH0pKCl9fSxUbT1jbGFzcyBleHRlbmRzIEJwe2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlLHQsbiksdGhpcy50eXBlPWBzdHlsZWAsRWYoQXJyYXkuZnJvbSh0LmNoaWxkTm9kZXMpLm1hcChlPT5lLnRleHRDb250ZW50KS5qb2luKGBgKS5yZXBsYWNlKC8oXC9cKihbXipdfFtcclxuXXwoXCorKFteKi9dfFtcclxuXSkpKSpcKitcLyl8KF5bXHNdKlwvXC8uKikvZ20sYGApLnJlcGxhY2UoL0BpbXBvcnQuKjsvZyxgYCkpLnNwbGl0KGB9YCkuZm9yRWFjaCh0PT57dmFyIG49dC50cmltKCk7aWYobil7dmFyIHI9bi5zcGxpdChge2ApLGk9clswXS5zcGxpdChgLGApLGE9clsxXS5zcGxpdChgO2ApO2kuZm9yRWFjaCh0PT57dmFyIG49dC50cmltKCk7aWYobil7dmFyIHI9ZS5zdHlsZXNbbl18fHt9O2lmKGEuZm9yRWFjaCh0PT57dmFyIG49dC5pbmRleE9mKGA6YCksaT10LnN1YnN0cigwLG4pLnRyaW0oKSxhPXQuc3Vic3RyKG4rMSx0Lmxlbmd0aC1uKS50cmltKCk7aSYmYSYmKHJbaV09bmV3IFNwKGUsaSxhKSl9KSxlLnN0eWxlc1tuXT1yLGUuc3R5bGVzU3BlY2lmaWNpdHlbbl09UGYobiksbj09PWBAZm9udC1mYWNlYCl7dmFyIGk9cltgZm9udC1mYW1pbHlgXS5nZXRTdHJpbmcoKS5yZXBsYWNlKC8ifCcvZyxgYCk7ci5zcmMuZ2V0U3RyaW5nKCkuc3BsaXQoYCxgKS5mb3JFYWNoKHQ9PntpZih0LmluZGV4T2YoYGZvcm1hdCgic3ZnIilgKT4wKXt2YXIgbj1qZih0KTtuJiZuZXcgd20oZSkubG9hZChpLG4pfX0pfX19KX19KX19LFRtLnBhcnNlRXh0ZXJuYWxVcmw9amYsRW09Y2xhc3MgZXh0ZW5kcyBHcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWB1c2VgfXNldENvbnRleHQoZSl7c3VwZXIuc2V0Q29udGV4dChlKTt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZShgeGApLG49dGhpcy5nZXRBdHRyaWJ1dGUoYHlgKTt0Lmhhc1ZhbHVlKCkmJmUudHJhbnNsYXRlKHQuZ2V0UGl4ZWxzKGB4YCksMCksbi5oYXNWYWx1ZSgpJiZlLnRyYW5zbGF0ZSgwLG4uZ2V0UGl4ZWxzKGB5YCkpfXBhdGgoZSl7dmFye2VsZW1lbnQ6dH09dGhpczt0JiZ0LnBhdGgoZSl9cmVuZGVyQ2hpbGRyZW4oZSl7dmFye2RvY3VtZW50OnQsZWxlbWVudDpufT10aGlzO2lmKG4pe3ZhciByPW47aWYobi50eXBlPT09YHN5bWJvbGAmJihyPW5ldyBacCh0LG51bGwpLHIuYXR0cmlidXRlcy52aWV3Qm94PW5ldyBTcCh0LGB2aWV3Qm94YCxuLmdldEF0dHJpYnV0ZShgdmlld0JveGApLmdldFN0cmluZygpKSxyLmF0dHJpYnV0ZXMucHJlc2VydmVBc3BlY3RSYXRpbz1uZXcgU3AodCxgcHJlc2VydmVBc3BlY3RSYXRpb2Asbi5nZXRBdHRyaWJ1dGUoYHByZXNlcnZlQXNwZWN0UmF0aW9gKS5nZXRTdHJpbmcoKSksci5hdHRyaWJ1dGVzLm92ZXJmbG93PW5ldyBTcCh0LGBvdmVyZmxvd2Asbi5nZXRBdHRyaWJ1dGUoYG92ZXJmbG93YCkuZ2V0U3RyaW5nKCkpLHIuY2hpbGRyZW49bi5jaGlsZHJlbixuLnN0eWxlcy5vcGFjaXR5PW5ldyBTcCh0LGBvcGFjaXR5YCx0aGlzLmNhbGN1bGF0ZU9wYWNpdHkoKSkpLHIudHlwZT09PWBzdmdgKXt2YXIgaT10aGlzLmdldFN0eWxlKGB3aWR0aGAsITEsITApLGE9dGhpcy5nZXRTdHlsZShgaGVpZ2h0YCwhMSwhMCk7aS5oYXNWYWx1ZSgpJiYoci5hdHRyaWJ1dGVzLndpZHRoPW5ldyBTcCh0LGB3aWR0aGAsaS5nZXRTdHJpbmcoKSkpLGEuaGFzVmFsdWUoKSYmKHIuYXR0cmlidXRlcy5oZWlnaHQ9bmV3IFNwKHQsYGhlaWdodGAsYS5nZXRTdHJpbmcoKSkpfXZhciBvPXIucGFyZW50O3IucGFyZW50PXRoaXMsci5yZW5kZXIoZSksci5wYXJlbnQ9b319Z2V0Qm91bmRpbmdCb3goZSl7dmFye2VsZW1lbnQ6dH09dGhpcztyZXR1cm4gdD90LmdldEJvdW5kaW5nQm94KGUpOm51bGx9ZWxlbWVudFRyYW5zZm9ybSgpe3Zhcntkb2N1bWVudDplLGVsZW1lbnQ6dH09dGhpcztyZXR1cm4genAuZnJvbUVsZW1lbnQoZSx0KX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmNhY2hlZEVsZW1lbnR8fD10aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXREZWZpbml0aW9uKCksdGhpcy5jYWNoZWRFbGVtZW50fX0sRG09Y2xhc3MgZXh0ZW5kcyBCcHtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0LG4pLHRoaXMudHlwZT1gZmVDb2xvck1hdHJpeGA7dmFyIHI9a2YodGhpcy5nZXRBdHRyaWJ1dGUoYHZhbHVlc2ApLmdldFN0cmluZygpKTtzd2l0Y2godGhpcy5nZXRBdHRyaWJ1dGUoYHR5cGVgKS5nZXRTdHJpbmcoYG1hdHJpeGApKXtjYXNlYHNhdHVyYXRlYDp2YXIgaT1yWzBdO3I9Wy4yMTMrLjc4NyppLC43MTUtLjcxNSppLC4wNzItLjA3MippLDAsMCwuMjEzLS4yMTMqaSwuNzE1Ky4yODUqaSwuMDcyLS4wNzIqaSwwLDAsLjIxMy0uMjEzKmksLjcxNS0uNzE1KmksLjA3MisuOTI4KmksMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDFdO2JyZWFrO2Nhc2VgaHVlUm90YXRlYDp2YXIgYT1yWzBdKk1hdGguUEkvMTgwO3I9W25wKGEsLjIxMywuNzg3LC0uMjEzKSxucChhLC43MTUsLS43MTUsLS43MTUpLG5wKGEsLjA3MiwtLjA3MiwuOTI4KSwwLDAsbnAoYSwuMjEzLC0uMjEzLC4xNDMpLG5wKGEsLjcxNSwuMjg1LC4xNCksbnAoYSwuMDcyLC0uMDcyLC0uMjgzKSwwLDAsbnAoYSwuMjEzLC0uMjEzLC0uNzg3KSxucChhLC43MTUsLS43MTUsLjcxNSksbnAoYSwuMDcyLC45MjgsLjA3MiksMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDFdO2JyZWFrO2Nhc2VgbHVtaW5hbmNlVG9BbHBoYWA6cj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLjIxMjUsLjcxNTQsLjA3MjEsMCwwLDAsMCwwLDAsMV07YnJlYWt9dGhpcy5tYXRyaXg9cix0aGlzLmluY2x1ZGVPcGFjaXR5PXRoaXMuZ2V0QXR0cmlidXRlKGBpbmNsdWRlT3BhY2l0eWApLmhhc1ZhbHVlKCl9YXBwbHkoZSx0LG4scixpKXtmb3IodmFye2luY2x1ZGVPcGFjaXR5OmEsbWF0cml4Om99PXRoaXMscz1lLmdldEltYWdlRGF0YSgwLDAscixpKSxjPTA7YzxpO2MrKylmb3IodmFyIGw9MDtsPHI7bCsrKXt2YXIgdT0kZihzLmRhdGEsbCxjLHIsaSwwKSxkPSRmKHMuZGF0YSxsLGMscixpLDEpLGY9JGYocy5kYXRhLGwsYyxyLGksMikscD0kZihzLmRhdGEsbCxjLHIsaSwzKSxtPXRwKG8sMCx1KSt0cChvLDEsZCkrdHAobywyLGYpK3RwKG8sMyxwKSt0cChvLDQsMSksaD10cChvLDUsdSkrdHAobyw2LGQpK3RwKG8sNyxmKSt0cChvLDgscCkrdHAobyw5LDEpLGc9dHAobywxMCx1KSt0cChvLDExLGQpK3RwKG8sMTIsZikrdHAobywxMyxwKSt0cChvLDE0LDEpLF89dHAobywxNSx1KSt0cChvLDE2LGQpK3RwKG8sMTcsZikrdHAobywxOCxwKSt0cChvLDE5LDEpO2EmJihtPTAsaD0wLGc9MCxfKj1wLzI1NSksZXAocy5kYXRhLGwsYyxyLGksMCxtKSxlcChzLmRhdGEsbCxjLHIsaSwxLGgpLGVwKHMuZGF0YSxsLGMscixpLDIsZyksZXAocy5kYXRhLGwsYyxyLGksMyxfKX1lLmNsZWFyUmVjdCgwLDAscixpKSxlLnB1dEltYWdlRGF0YShzLDAsMCl9fSxPbT1jbGFzcyBlIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gbWFza2B9YXBwbHkodCxuKXt2YXJ7ZG9jdW1lbnQ6cn09dGhpcyxpPXRoaXMuZ2V0QXR0cmlidXRlKGB4YCkuZ2V0UGl4ZWxzKGB4YCksYT10aGlzLmdldEF0dHJpYnV0ZShgeWApLmdldFBpeGVscyhgeWApLG89dGhpcy5nZXRTdHlsZShgd2lkdGhgKS5nZXRQaXhlbHMoYHhgKSxzPXRoaXMuZ2V0U3R5bGUoYGhlaWdodGApLmdldFBpeGVscyhgeWApO2lmKCFvJiYhcyl7dmFyIGM9bmV3IFVwO3RoaXMuY2hpbGRyZW4uZm9yRWFjaChlPT57Yy5hZGRCb3VuZGluZ0JveChlLmdldEJvdW5kaW5nQm94KHQpKX0pLGk9TWF0aC5mbG9vcihjLngxKSxhPU1hdGguZmxvb3IoYy55MSksbz1NYXRoLmZsb29yKGMud2lkdGgpLHM9TWF0aC5mbG9vcihjLmhlaWdodCl9dmFyIGw9dGhpcy5yZW1vdmVTdHlsZXMobixlLmlnbm9yZVN0eWxlcyksdT1yLmNyZWF0ZUNhbnZhcyhpK28sYStzKSxkPXUuZ2V0Q29udGV4dChgMmRgKTtyLnNjcmVlbi5zZXREZWZhdWx0cyhkKSx0aGlzLnJlbmRlckNoaWxkcmVuKGQpLG5ldyBEbShyLHtub2RlVHlwZToxLGNoaWxkTm9kZXM6W10sYXR0cmlidXRlczpbe25vZGVOYW1lOmB0eXBlYCx2YWx1ZTpgbHVtaW5hbmNlVG9BbHBoYWB9LHtub2RlTmFtZTpgaW5jbHVkZU9wYWNpdHlgLHZhbHVlOmB0cnVlYH1dfSkuYXBwbHkoZCwwLDAsaStvLGErcyk7dmFyIGY9ci5jcmVhdGVDYW52YXMoaStvLGErcykscD1mLmdldENvbnRleHQoYDJkYCk7ci5zY3JlZW4uc2V0RGVmYXVsdHMocCksbi5yZW5kZXIocCkscC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YGRlc3RpbmF0aW9uLWluYCxwLmZpbGxTdHlsZT1kLmNyZWF0ZVBhdHRlcm4odSxgbm8tcmVwZWF0YCkscC5maWxsUmVjdCgwLDAsaStvLGErcyksdC5maWxsU3R5bGU9cC5jcmVhdGVQYXR0ZXJuKGYsYG5vLXJlcGVhdGApLHQuZmlsbFJlY3QoMCwwLGkrbyxhK3MpLHRoaXMucmVzdG9yZVN0eWxlcyhuLGwpfXJlbmRlcihlKXt9fSxPbS5pZ25vcmVTdHlsZXM9W2BtYXNrYCxgdHJhbnNmb3JtYCxgY2xpcC1wYXRoYF0sa209KCk9Pnt9LEFtPWNsYXNzIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gY2xpcFBhdGhgfWFwcGx5KGUpe3Zhcntkb2N1bWVudDp0fT10aGlzLG49UmVmbGVjdC5nZXRQcm90b3R5cGVPZihlKSx7YmVnaW5QYXRoOnIsY2xvc2VQYXRoOml9PWU7biYmKG4uYmVnaW5QYXRoPWttLG4uY2xvc2VQYXRoPWttKSxSZWZsZWN0LmFwcGx5KHIsZSxbXSksdGhpcy5jaGlsZHJlbi5mb3JFYWNoKHI9PntpZihyLnBhdGghPT12b2lkIDApe3ZhciBhPXIuZWxlbWVudFRyYW5zZm9ybT09PXZvaWQgMD9udWxsOnIuZWxlbWVudFRyYW5zZm9ybSgpO2F8fD16cC5mcm9tRWxlbWVudCh0LHIpLGEmJmEuYXBwbHkoZSksci5wYXRoKGUpLG4mJihuLmNsb3NlUGF0aD1pKSxhJiZhLnVuYXBwbHkoZSl9fSksUmVmbGVjdC5hcHBseShpLGUsW10pLGUuY2xpcCgpLG4mJihuLmJlZ2luUGF0aD1yLG4uY2xvc2VQYXRoPWkpfXJlbmRlcihlKXt9fSxqbT1jbGFzcyBlIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gZmlsdGVyYH1hcHBseSh0LG4pe3Zhcntkb2N1bWVudDpyLGNoaWxkcmVuOml9PXRoaXMsYT1uLmdldEJvdW5kaW5nQm94KHQpO2lmKGEpe3ZhciBvPTAscz0wO2kuZm9yRWFjaChlPT57dmFyIHQ9ZS5leHRyYUZpbHRlckRpc3RhbmNlfHwwO289TWF0aC5tYXgobyx0KSxzPU1hdGgubWF4KHMsdCl9KTt2YXIgYz1NYXRoLmZsb29yKGEud2lkdGgpLGw9TWF0aC5mbG9vcihhLmhlaWdodCksdT1jKzIqbyxkPWwrMipzO2lmKCEodTwxfHxkPDEpKXt2YXIgZj1NYXRoLmZsb29yKGEueCkscD1NYXRoLmZsb29yKGEueSksbT10aGlzLnJlbW92ZVN0eWxlcyhuLGUuaWdub3JlU3R5bGVzKSxoPXIuY3JlYXRlQ2FudmFzKHUsZCksZz1oLmdldENvbnRleHQoYDJkYCk7ci5zY3JlZW4uc2V0RGVmYXVsdHMoZyksZy50cmFuc2xhdGUoLWYrbywtcCtzKSxuLnJlbmRlcihnKSxpLmZvckVhY2goZT0+e3R5cGVvZiBlLmFwcGx5PT1gZnVuY3Rpb25gJiZlLmFwcGx5KGcsMCwwLHUsZCl9KSx0LmRyYXdJbWFnZShoLDAsMCx1LGQsZi1vLHAtcyx1LGQpLHRoaXMucmVzdG9yZVN0eWxlcyhuLG0pfX19cmVuZGVyKGUpe319LGptLmlnbm9yZVN0eWxlcz1bYGZpbHRlcmAsYHRyYW5zZm9ybWAsYGNsaXAtcGF0aGBdLE1tPWNsYXNzIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKSx0aGlzLnR5cGU9YGZlRHJvcFNoYWRvd2AsdGhpcy5hZGRTdHlsZXNGcm9tU3R5bGVEZWZpbml0aW9uKCl9YXBwbHkoZSx0LG4scixpKXt9fSxObT1jbGFzcyBleHRlbmRzIEJwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YGZlTW9ycGhvbG9neWB9YXBwbHkoZSx0LG4scixpKXt9fSxQbT1jbGFzcyBleHRlbmRzIEJwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9YGZlQ29tcG9zaXRlYH1hcHBseShlLHQsbixyLGkpe319LEZtPWNsYXNzIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKSx0aGlzLnR5cGU9YGZlR2F1c3NpYW5CbHVyYCx0aGlzLmJsdXJSYWRpdXM9TWF0aC5mbG9vcih0aGlzLmdldEF0dHJpYnV0ZShgc3RkRGV2aWF0aW9uYCkuZ2V0TnVtYmVyKCkpLHRoaXMuZXh0cmFGaWx0ZXJEaXN0YW5jZT10aGlzLmJsdXJSYWRpdXN9YXBwbHkoZSx0LG4scixpKXt2YXJ7ZG9jdW1lbnQ6YSxibHVyUmFkaXVzOm99PXRoaXMscz1hLndpbmRvdz9hLndpbmRvdy5kb2N1bWVudC5ib2R5Om51bGwsYz1lLmNhbnZhcztjLmlkPWEuZ2V0VW5pcXVlSWQoKSxzJiYoYy5zdHlsZS5kaXNwbGF5PWBub25lYCxzLmFwcGVuZENoaWxkKGMpKSxfZihjLHQsbixyLGksbykscyYmcy5yZW1vdmVDaGlsZChjKX19LEltPWNsYXNzIGV4dGVuZHMgQnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT1gdGl0bGVgfX0sTG09Y2xhc3MgZXh0ZW5kcyBCcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPWBkZXNjYH19LFJtPXtzdmc6WnAscmVjdDpRcCxjaXJjbGU6JHAsZWxsaXBzZTplbSxsaW5lOnRtLHBvbHlsaW5lOm5tLHBvbHlnb246cm0scGF0aDpLcCxwYXR0ZXJuOmltLG1hcmtlcjphbSxkZWZzOm9tLGxpbmVhckdyYWRpZW50OmxtLHJhZGlhbEdyYWRpZW50OnVtLHN0b3A6ZG0sYW5pbWF0ZTpmbSxhbmltYXRlQ29sb3I6cG0sYW5pbWF0ZVRyYW5zZm9ybTptbSxmb250OmhtLCJmb250LWZhY2UiOmdtLCJtaXNzaW5nLWdseXBoIjpfbSxnbHlwaDpxcCx0ZXh0OkpwLHRzcGFuOllwLHRyZWY6dm0sYTp5bSx0ZXh0UGF0aDpibSxpbWFnZTpTbSxnOnNtLHN5bWJvbDpDbSxzdHlsZTpUbSx1c2U6RW0sbWFzazpPbSxjbGlwUGF0aDpBbSxmaWx0ZXI6am0sZmVEcm9wU2hhZG93Ok1tLGZlTW9ycGhvbG9neTpObSxmZUNvbXBvc2l0ZTpQbSxmZUNvbG9yTWF0cml4OkRtLGZlR2F1c3NpYW5CbHVyOkZtLHRpdGxlOkltLGRlc2M6TG19LHptPWNsYXNzIGV7Y29uc3RydWN0b3IodCl7dmFye3Jvb3RFbVNpemU6bj0xMixlbVNpemU6cj0xMixjcmVhdGVDYW52YXM6aT1lLmNyZWF0ZUNhbnZhcyxjcmVhdGVJbWFnZTphPWUuY3JlYXRlSW1hZ2UsYW5vbnltb3VzQ3Jvc3NPcmlnaW46b309YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9O3RoaXMuY2Fudmc9dCx0aGlzLmRlZmluaXRpb25zPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zdHlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnN0eWxlc1NwZWNpZmljaXR5PU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5pbWFnZXM9W10sdGhpcy5mb250cz1bXSx0aGlzLmVtU2l6ZVN0YWNrPVtdLHRoaXMudW5pcXVlSWQ9MCx0aGlzLnNjcmVlbj10LnNjcmVlbix0aGlzLnJvb3RFbVNpemU9bix0aGlzLmVtU2l6ZT1yLHRoaXMuY3JlYXRlQ2FudmFzPWksdGhpcy5jcmVhdGVJbWFnZT10aGlzLmJpbmRDcmVhdGVJbWFnZShhLG8pLHRoaXMuc2NyZWVuLndhaXQodGhpcy5pc0ltYWdlc0xvYWRlZC5iaW5kKHRoaXMpKSx0aGlzLnNjcmVlbi53YWl0KHRoaXMuaXNGb250c0xvYWRlZC5iaW5kKHRoaXMpKX1iaW5kQ3JlYXRlSW1hZ2UoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PWBib29sZWFuYD8obixyKT0+ZShuLHR5cGVvZiByPT1gYm9vbGVhbmA/cjp0KTplfWdldCB3aW5kb3coKXtyZXR1cm4gdGhpcy5zY3JlZW4ud2luZG93fWdldCBmZXRjaCgpe3JldHVybiB0aGlzLnNjcmVlbi5mZXRjaH1nZXQgY3R4KCl7cmV0dXJuIHRoaXMuc2NyZWVuLmN0eH1nZXQgZW1TaXplKCl7dmFye2VtU2l6ZVN0YWNrOmV9PXRoaXM7cmV0dXJuIGVbZS5sZW5ndGgtMV19c2V0IGVtU2l6ZShlKXt2YXJ7ZW1TaXplU3RhY2s6dH09dGhpczt0LnB1c2goZSl9cG9wRW1TaXplKCl7dmFye2VtU2l6ZVN0YWNrOmV9PXRoaXM7ZS5wb3AoKX1nZXRVbmlxdWVJZCgpe3JldHVybmBjYW52ZyR7Kyt0aGlzLnVuaXF1ZUlkfWB9aXNJbWFnZXNMb2FkZWQoKXtyZXR1cm4gdGhpcy5pbWFnZXMuZXZlcnkoZT0+ZS5sb2FkZWQpfWlzRm9udHNMb2FkZWQoKXtyZXR1cm4gdGhpcy5mb250cy5ldmVyeShlPT5lLmxvYWRlZCl9Y3JlYXRlRG9jdW1lbnRFbGVtZW50KGUpe3ZhciB0PXRoaXMuY3JlYXRlRWxlbWVudChlLmRvY3VtZW50RWxlbWVudCk7cmV0dXJuIHQucm9vdD0hMCx0LmFkZFN0eWxlc0Zyb21TdHlsZURlZmluaXRpb24oKSx0aGlzLmRvY3VtZW50RWxlbWVudD10LHR9Y3JlYXRlRWxlbWVudCh0KXt2YXIgbj10Lm5vZGVOYW1lLnJlcGxhY2UoL15bXjpdKzovLGBgKSxyPWUuZWxlbWVudFR5cGVzW25dO3JldHVybiByPT09dm9pZCAwP25ldyBWcCh0aGlzLHQpOm5ldyByKHRoaXMsdCl9Y3JlYXRlVGV4dE5vZGUoZSl7cmV0dXJuIG5ldyBYcCh0aGlzLGUpfXNldFZpZXdCb3goZSl7dGhpcy5zY3JlZW4uc2V0Vmlld0JveChpcCh7ZG9jdW1lbnQ6dGhpc30sZSkpfX0sem0uY3JlYXRlQ2FudmFzPWFwLHptLmNyZWF0ZUltYWdlPW9wLHptLmVsZW1lbnRUeXBlcz1SbSxCbT1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9O3RoaXMucGFyc2VyPW5ldyBqcChuKSx0aGlzLnNjcmVlbj1uZXcgT3AoZSxuKSx0aGlzLm9wdGlvbnM9bjt2YXIgcj1uZXcgem0odGhpcyxuKSxpPXIuY3JlYXRlRG9jdW1lbnRFbGVtZW50KHQpO3RoaXMuZG9jdW1lbnQ9cix0aGlzLmRvY3VtZW50RWxlbWVudD1pfXN0YXRpYyBmcm9tKHQsbil7dmFyIHI9YXJndW1lbnRzO3JldHVybiBWdShmdW5jdGlvbiooKXt2YXIgaT1yLmxlbmd0aD4yJiZyWzJdIT09dm9pZCAwP3JbMl06e307cmV0dXJuIG5ldyBlKHQseWllbGQgbmV3IGpwKGkpLnBhcnNlKG4pLGkpfSkoKX1zdGF0aWMgZnJvbVN0cmluZyh0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTtyZXR1cm4gbmV3IGUodCxuZXcganAocikucGFyc2VGcm9tU3RyaW5nKG4pLHIpfWZvcmsodCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e307cmV0dXJuIGUuZnJvbSh0LG4sbHAobHAoe30sdGhpcy5vcHRpb25zKSxyKSl9Zm9ya1N0cmluZyh0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTtyZXR1cm4gZS5mcm9tU3RyaW5nKHQsbixscChscCh7fSx0aGlzLm9wdGlvbnMpLHIpKX1yZWFkeSgpe3JldHVybiB0aGlzLnNjcmVlbi5yZWFkeSgpfWlzUmVhZHkoKXtyZXR1cm4gdGhpcy5zY3JlZW4uaXNSZWFkeSgpfXJlbmRlcigpe3ZhciBlPWFyZ3VtZW50cyx0PXRoaXM7cmV0dXJuIFZ1KGZ1bmN0aW9uKigpe3ZhciBuPWUubGVuZ3RoPjAmJmVbMF0hPT12b2lkIDA/ZVswXTp7fTt0LnN0YXJ0KGxwKHtlbmFibGVSZWRyYXc6ITAsaWdub3JlQW5pbWF0aW9uOiEwLGlnbm9yZU1vdXNlOiEwfSxuKSkseWllbGQgdC5yZWFkeSgpLHQuc3RvcCgpfSkoKX1zdGFydCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSx7ZG9jdW1lbnRFbGVtZW50OnQsc2NyZWVuOm4sb3B0aW9uczpyfT10aGlzO24uc3RhcnQodCxscChscCh7ZW5hYmxlUmVkcmF3OiEwfSxyKSxlKSl9c3RvcCgpe3RoaXMuc2NyZWVuLnN0b3AoKX1yZXNpemUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmUsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITE7dGhpcy5kb2N1bWVudEVsZW1lbnQucmVzaXplKGUsdCxuKX19fSkpO2Z1bmN0aW9uIEhtKCl7UmguY29uc29sZSYmdHlwZW9mIFJoLmNvbnNvbGUubG9nPT1gZnVuY3Rpb25gJiZSaC5jb25zb2xlLmxvZy5hcHBseShSaC5jb25zb2xlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVW0oZSx0LG4pe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyLm9wZW4oYEdFVGAsZSksci5yZXNwb25zZVR5cGU9YGJsb2JgLHIub25sb2FkPWZ1bmN0aW9uKCl7Qmgoci5yZXNwb25zZSx0LG4pfSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXt6aC5lcnJvcihgY291bGQgbm90IGRvd25sb2FkIGZpbGVgKX0sci5zZW5kKCl9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFhNTEh0dHBSZXF1ZXN0O3Qub3BlbihgSEVBRGAsZSwhMSk7dHJ5e3Quc2VuZCgpfWNhdGNoe31yZXR1cm4gdC5zdGF0dXM+PTIwMCYmdC5zdGF0dXM8PTI5OX1mdW5jdGlvbiBHbShlKXt0cnl7ZS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KGBjbGlja2ApKX1jYXRjaHt2YXIgdD1kb2N1bWVudC5jcmVhdGVFdmVudChgTW91c2VFdmVudHNgKTt0LmluaXRNb3VzZUV2ZW50KGBjbGlja2AsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksZS5kaXNwYXRjaEV2ZW50KHQpfX1mdW5jdGlvbiBLbShlKXt2YXIgdDtlfHw9YGAsdGhpcy5vaz0hMSxlLmNoYXJBdCgwKT09YCNgJiYoZT1lLnN1YnN0cigxLDYpKSxlPXthbGljZWJsdWU6YGYwZjhmZmAsYW50aXF1ZXdoaXRlOmBmYWViZDdgLGFxdWE6YDAwZmZmZmAsYXF1YW1hcmluZTpgN2ZmZmQ0YCxhenVyZTpgZjBmZmZmYCxiZWlnZTpgZjVmNWRjYCxiaXNxdWU6YGZmZTRjNGAsYmxhY2s6YDAwMDAwMGAsYmxhbmNoZWRhbG1vbmQ6YGZmZWJjZGAsYmx1ZTpgMDAwMGZmYCxibHVldmlvbGV0OmA4YTJiZTJgLGJyb3duOmBhNTJhMmFgLGJ1cmx5d29vZDpgZGViODg3YCxjYWRldGJsdWU6YDVmOWVhMGAsY2hhcnRyZXVzZTpgN2ZmZjAwYCxjaG9jb2xhdGU6YGQyNjkxZWAsY29yYWw6YGZmN2Y1MGAsY29ybmZsb3dlcmJsdWU6YDY0OTVlZGAsY29ybnNpbGs6YGZmZjhkY2AsY3JpbXNvbjpgZGMxNDNjYCxjeWFuOmAwMGZmZmZgLGRhcmtibHVlOmAwMDAwOGJgLGRhcmtjeWFuOmAwMDhiOGJgLGRhcmtnb2xkZW5yb2Q6YGI4ODYwYmAsZGFya2dyYXk6YGE5YTlhOWAsZGFya2dyZWVuOmAwMDY0MDBgLGRhcmtraGFraTpgYmRiNzZiYCxkYXJrbWFnZW50YTpgOGIwMDhiYCxkYXJrb2xpdmVncmVlbjpgNTU2YjJmYCxkYXJrb3JhbmdlOmBmZjhjMDBgLGRhcmtvcmNoaWQ6YDk5MzJjY2AsZGFya3JlZDpgOGIwMDAwYCxkYXJrc2FsbW9uOmBlOTk2N2FgLGRhcmtzZWFncmVlbjpgOGZiYzhmYCxkYXJrc2xhdGVibHVlOmA0ODNkOGJgLGRhcmtzbGF0ZWdyYXk6YDJmNGY0ZmAsZGFya3R1cnF1b2lzZTpgMDBjZWQxYCxkYXJrdmlvbGV0OmA5NDAwZDNgLGRlZXBwaW5rOmBmZjE0OTNgLGRlZXBza3libHVlOmAwMGJmZmZgLGRpbWdyYXk6YDY5Njk2OWAsZG9kZ2VyYmx1ZTpgMWU5MGZmYCxmZWxkc3BhcjpgZDE5Mjc1YCxmaXJlYnJpY2s6YGIyMjIyMmAsZmxvcmFsd2hpdGU6YGZmZmFmMGAsZm9yZXN0Z3JlZW46YDIyOGIyMmAsZnVjaHNpYTpgZmYwMGZmYCxnYWluc2Jvcm86YGRjZGNkY2AsZ2hvc3R3aGl0ZTpgZjhmOGZmYCxnb2xkOmBmZmQ3MDBgLGdvbGRlbnJvZDpgZGFhNTIwYCxncmF5OmA4MDgwODBgLGdyZWVuOmAwMDgwMDBgLGdyZWVueWVsbG93OmBhZGZmMmZgLGhvbmV5ZGV3OmBmMGZmZjBgLGhvdHBpbms6YGZmNjliNGAsaW5kaWFucmVkOmBjZDVjNWNgLGluZGlnbzpgNGIwMDgyYCxpdm9yeTpgZmZmZmYwYCxraGFraTpgZjBlNjhjYCxsYXZlbmRlcjpgZTZlNmZhYCxsYXZlbmRlcmJsdXNoOmBmZmYwZjVgLGxhd25ncmVlbjpgN2NmYzAwYCxsZW1vbmNoaWZmb246YGZmZmFjZGAsbGlnaHRibHVlOmBhZGQ4ZTZgLGxpZ2h0Y29yYWw6YGYwODA4MGAsbGlnaHRjeWFuOmBlMGZmZmZgLGxpZ2h0Z29sZGVucm9keWVsbG93OmBmYWZhZDJgLGxpZ2h0Z3JleTpgZDNkM2QzYCxsaWdodGdyZWVuOmA5MGVlOTBgLGxpZ2h0cGluazpgZmZiNmMxYCxsaWdodHNhbG1vbjpgZmZhMDdhYCxsaWdodHNlYWdyZWVuOmAyMGIyYWFgLGxpZ2h0c2t5Ymx1ZTpgODdjZWZhYCxsaWdodHNsYXRlYmx1ZTpgODQ3MGZmYCxsaWdodHNsYXRlZ3JheTpgNzc4ODk5YCxsaWdodHN0ZWVsYmx1ZTpgYjBjNGRlYCxsaWdodHllbGxvdzpgZmZmZmUwYCxsaW1lOmAwMGZmMDBgLGxpbWVncmVlbjpgMzJjZDMyYCxsaW5lbjpgZmFmMGU2YCxtYWdlbnRhOmBmZjAwZmZgLG1hcm9vbjpgODAwMDAwYCxtZWRpdW1hcXVhbWFyaW5lOmA2NmNkYWFgLG1lZGl1bWJsdWU6YDAwMDBjZGAsbWVkaXVtb3JjaGlkOmBiYTU1ZDNgLG1lZGl1bXB1cnBsZTpgOTM3MGQ4YCxtZWRpdW1zZWFncmVlbjpgM2NiMzcxYCxtZWRpdW1zbGF0ZWJsdWU6YDdiNjhlZWAsbWVkaXVtc3ByaW5nZ3JlZW46YDAwZmE5YWAsbWVkaXVtdHVycXVvaXNlOmA0OGQxY2NgLG1lZGl1bXZpb2xldHJlZDpgYzcxNTg1YCxtaWRuaWdodGJsdWU6YDE5MTk3MGAsbWludGNyZWFtOmBmNWZmZmFgLG1pc3R5cm9zZTpgZmZlNGUxYCxtb2NjYXNpbjpgZmZlNGI1YCxuYXZham93aGl0ZTpgZmZkZWFkYCxuYXZ5OmAwMDAwODBgLG9sZGxhY2U6YGZkZjVlNmAsb2xpdmU6YDgwODAwMGAsb2xpdmVkcmFiOmA2YjhlMjNgLG9yYW5nZTpgZmZhNTAwYCxvcmFuZ2VyZWQ6YGZmNDUwMGAsb3JjaGlkOmBkYTcwZDZgLHBhbGVnb2xkZW5yb2Q6YGVlZThhYWAscGFsZWdyZWVuOmA5OGZiOThgLHBhbGV0dXJxdW9pc2U6YGFmZWVlZWAscGFsZXZpb2xldHJlZDpgZDg3MDkzYCxwYXBheWF3aGlwOmBmZmVmZDVgLHBlYWNocHVmZjpgZmZkYWI5YCxwZXJ1OmBjZDg1M2ZgLHBpbms6YGZmYzBjYmAscGx1bTpgZGRhMGRkYCxwb3dkZXJibHVlOmBiMGUwZTZgLHB1cnBsZTpgODAwMDgwYCxyZWQ6YGZmMDAwMGAscm9zeWJyb3duOmBiYzhmOGZgLHJveWFsYmx1ZTpgNDE2OWUxYCxzYWRkbGVicm93bjpgOGI0NTEzYCxzYWxtb246YGZhODA3MmAsc2FuZHlicm93bjpgZjRhNDYwYCxzZWFncmVlbjpgMmU4YjU3YCxzZWFzaGVsbDpgZmZmNWVlYCxzaWVubmE6YGEwNTIyZGAsc2lsdmVyOmBjMGMwYzBgLHNreWJsdWU6YDg3Y2VlYmAsc2xhdGVibHVlOmA2YTVhY2RgLHNsYXRlZ3JheTpgNzA4MDkwYCxzbm93OmBmZmZhZmFgLHNwcmluZ2dyZWVuOmAwMGZmN2ZgLHN0ZWVsYmx1ZTpgNDY4MmI0YCx0YW46YGQyYjQ4Y2AsdGVhbDpgMDA4MDgwYCx0aGlzdGxlOmBkOGJmZDhgLHRvbWF0bzpgZmY2MzQ3YCx0dXJxdW9pc2U6YDQwZTBkMGAsdmlvbGV0OmBlZTgyZWVgLHZpb2xldHJlZDpgZDAyMDkwYCx3aGVhdDpgZjVkZWIzYCx3aGl0ZTpgZmZmZmZmYCx3aGl0ZXNtb2tlOmBmNWY1ZjVgLHllbGxvdzpgZmZmZjAwYCx5ZWxsb3dncmVlbjpgOWFjZDMyYH1bZT0oZT1lLnJlcGxhY2UoLyAvZyxgYCkpLnRvTG93ZXJDYXNlKCldfHxlO2Zvcih2YXIgbj1be3JlOi9ecmdiXCgoXGR7MSwzfSksXHMqKFxkezEsM30pLFxzKihcZHsxLDN9KVwpJC8sZXhhbXBsZTpbYHJnYigxMjMsIDIzNCwgNDUpYCxgcmdiKDI1NSwyMzQsMjQ1KWBdLHByb2Nlc3M6ZnVuY3Rpb24oZSl7cmV0dXJuW3BhcnNlSW50KGVbMV0pLHBhcnNlSW50KGVbMl0pLHBhcnNlSW50KGVbM10pXX19LHtyZTovXihcd3syfSkoXHd7Mn0pKFx3ezJ9KSQvLGV4YW1wbGU6W2AjMDBmZjAwYCxgMzM2Njk5YF0scHJvY2VzczpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXSwxNikscGFyc2VJbnQoZVsyXSwxNikscGFyc2VJbnQoZVszXSwxNildfX0se3JlOi9eKFx3ezF9KShcd3sxfSkoXHd7MX0pJC8sZXhhbXBsZTpbYCNmYjBgLGBmMGZgXSxwcm9jZXNzOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdK2VbMV0sMTYpLHBhcnNlSW50KGVbMl0rZVsyXSwxNikscGFyc2VJbnQoZVszXStlWzNdLDE2KV19fV0scj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdLnJlLGE9bltyXS5wcm9jZXNzLG89aS5leGVjKGUpO28mJih0PWEobyksdGhpcy5yPXRbMF0sdGhpcy5nPXRbMV0sdGhpcy5iPXRbMl0sdGhpcy5vaz0hMCl9dGhpcy5yPXRoaXMucjwwfHxpc05hTih0aGlzLnIpPzA6dGhpcy5yPjI1NT8yNTU6dGhpcy5yLHRoaXMuZz10aGlzLmc8MHx8aXNOYU4odGhpcy5nKT8wOnRoaXMuZz4yNTU/MjU1OnRoaXMuZyx0aGlzLmI9dGhpcy5iPDB8fGlzTmFOKHRoaXMuYik/MDp0aGlzLmI+MjU1PzI1NTp0aGlzLmIsdGhpcy50b1JHQj1mdW5jdGlvbigpe3JldHVybmByZ2IoYCt0aGlzLnIrYCwgYCt0aGlzLmcrYCwgYCt0aGlzLmIrYClgfSx0aGlzLnRvSGV4PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yLnRvU3RyaW5nKDE2KSx0PXRoaXMuZy50b1N0cmluZygxNiksbj10aGlzLmIudG9TdHJpbmcoMTYpO3JldHVybiBlLmxlbmd0aD09MSYmKGU9YDBgK2UpLHQubGVuZ3RoPT0xJiYodD1gMGArdCksbi5sZW5ndGg9PTEmJihuPWAwYCtuKSxgI2ArZSt0K259fWZ1bmN0aW9uIHFtKGUsdCl7dmFyIG49ZVswXSxyPWVbMV0saT1lWzJdLGE9ZVszXTtuPVltKG4scixpLGEsdFswXSw3LC02ODA4NzY5MzYpLGE9WW0oYSxuLHIsaSx0WzFdLDEyLC0zODk1NjQ1ODYpLGk9WW0oaSxhLG4scix0WzJdLDE3LDYwNjEwNTgxOSkscj1ZbShyLGksYSxuLHRbM10sMjIsLTEwNDQ1MjUzMzApLG49WW0obixyLGksYSx0WzRdLDcsLTE3NjQxODg5NyksYT1ZbShhLG4scixpLHRbNV0sMTIsMTIwMDA4MDQyNiksaT1ZbShpLGEsbixyLHRbNl0sMTcsLTE0NzMyMzEzNDEpLHI9WW0ocixpLGEsbix0WzddLDIyLC00NTcwNTk4Myksbj1ZbShuLHIsaSxhLHRbOF0sNywxNzcwMDM1NDE2KSxhPVltKGEsbixyLGksdFs5XSwxMiwtMTk1ODQxNDQxNyksaT1ZbShpLGEsbixyLHRbMTBdLDE3LC00MjA2Mykscj1ZbShyLGksYSxuLHRbMTFdLDIyLC0xOTkwNDA0MTYyKSxuPVltKG4scixpLGEsdFsxMl0sNywxODA0NjAzNjgyKSxhPVltKGEsbixyLGksdFsxM10sMTIsLTQwMzQxMTAxKSxpPVltKGksYSxuLHIsdFsxNF0sMTcsLTE1MDIwMDIyOTApLG49WG0obixyPVltKHIsaSxhLG4sdFsxNV0sMjIsMTIzNjUzNTMyOSksaSxhLHRbMV0sNSwtMTY1Nzk2NTEwKSxhPVhtKGEsbixyLGksdFs2XSw5LC0xMDY5NTAxNjMyKSxpPVhtKGksYSxuLHIsdFsxMV0sMTQsNjQzNzE3NzEzKSxyPVhtKHIsaSxhLG4sdFswXSwyMCwtMzczODk3MzAyKSxuPVhtKG4scixpLGEsdFs1XSw1LC03MDE1NTg2OTEpLGE9WG0oYSxuLHIsaSx0WzEwXSw5LDM4MDE2MDgzKSxpPVhtKGksYSxuLHIsdFsxNV0sMTQsLTY2MDQ3ODMzNSkscj1YbShyLGksYSxuLHRbNF0sMjAsLTQwNTUzNzg0OCksbj1YbShuLHIsaSxhLHRbOV0sNSw1Njg0NDY0MzgpLGE9WG0oYSxuLHIsaSx0WzE0XSw5LC0xMDE5ODAzNjkwKSxpPVhtKGksYSxuLHIsdFszXSwxNCwtMTg3MzYzOTYxKSxyPVhtKHIsaSxhLG4sdFs4XSwyMCwxMTYzNTMxNTAxKSxuPVhtKG4scixpLGEsdFsxM10sNSwtMTQ0NDY4MTQ2NyksYT1YbShhLG4scixpLHRbMl0sOSwtNTE0MDM3ODQpLGk9WG0oaSxhLG4scix0WzddLDE0LDE3MzUzMjg0NzMpLG49Wm0obixyPVhtKHIsaSxhLG4sdFsxMl0sMjAsLTE5MjY2MDc3MzQpLGksYSx0WzVdLDQsLTM3ODU1OCksYT1abShhLG4scixpLHRbOF0sMTEsLTIwMjI1NzQ0NjMpLGk9Wm0oaSxhLG4scix0WzExXSwxNiwxODM5MDMwNTYyKSxyPVptKHIsaSxhLG4sdFsxNF0sMjMsLTM1MzA5NTU2KSxuPVptKG4scixpLGEsdFsxXSw0LC0xNTMwOTkyMDYwKSxhPVptKGEsbixyLGksdFs0XSwxMSwxMjcyODkzMzUzKSxpPVptKGksYSxuLHIsdFs3XSwxNiwtMTU1NDk3NjMyKSxyPVptKHIsaSxhLG4sdFsxMF0sMjMsLTEwOTQ3MzA2NDApLG49Wm0obixyLGksYSx0WzEzXSw0LDY4MTI3OTE3NCksYT1abShhLG4scixpLHRbMF0sMTEsLTM1ODUzNzIyMiksaT1abShpLGEsbixyLHRbM10sMTYsLTcyMjUyMTk3OSkscj1abShyLGksYSxuLHRbNl0sMjMsNzYwMjkxODkpLG49Wm0obixyLGksYSx0WzldLDQsLTY0MDM2NDQ4NyksYT1abShhLG4scixpLHRbMTJdLDExLC00MjE4MTU4MzUpLGk9Wm0oaSxhLG4scix0WzE1XSwxNiw1MzA3NDI1MjApLG49UW0obixyPVptKHIsaSxhLG4sdFsyXSwyMywtOTk1MzM4NjUxKSxpLGEsdFswXSw2LC0xOTg2MzA4NDQpLGE9UW0oYSxuLHIsaSx0WzddLDEwLDExMjY4OTE0MTUpLGk9UW0oaSxhLG4scix0WzE0XSwxNSwtMTQxNjM1NDkwNSkscj1RbShyLGksYSxuLHRbNV0sMjEsLTU3NDM0MDU1KSxuPVFtKG4scixpLGEsdFsxMl0sNiwxNzAwNDg1NTcxKSxhPVFtKGEsbixyLGksdFszXSwxMCwtMTg5NDk4NjYwNiksaT1RbShpLGEsbixyLHRbMTBdLDE1LC0xMDUxNTIzKSxyPVFtKHIsaSxhLG4sdFsxXSwyMSwtMjA1NDkyMjc5OSksbj1RbShuLHIsaSxhLHRbOF0sNiwxODczMzEzMzU5KSxhPVFtKGEsbixyLGksdFsxNV0sMTAsLTMwNjExNzQ0KSxpPVFtKGksYSxuLHIsdFs2XSwxNSwtMTU2MDE5ODM4MCkscj1RbShyLGksYSxuLHRbMTNdLDIxLDEzMDkxNTE2NDkpLG49UW0obixyLGksYSx0WzRdLDYsLTE0NTUyMzA3MCksYT1RbShhLG4scixpLHRbMTFdLDEwLC0xMTIwMjEwMzc5KSxpPVFtKGksYSxuLHIsdFsyXSwxNSw3MTg3ODcyNTkpLHI9UW0ocixpLGEsbix0WzldLDIxLC0zNDM0ODU1NTEpLGVbMF09aWgobixlWzBdKSxlWzFdPWloKHIsZVsxXSksZVsyXT1paChpLGVbMl0pLGVbM109aWgoYSxlWzNdKX1mdW5jdGlvbiBKbShlLHQsbixyLGksYSl7cmV0dXJuIHQ9aWgoaWgodCxlKSxpaChyLGEpKSxpaCh0PDxpfHQ+Pj4zMi1pLG4pfWZ1bmN0aW9uIFltKGUsdCxuLHIsaSxhLG8pe3JldHVybiBKbSh0Jm58fnQmcixlLHQsaSxhLG8pfWZ1bmN0aW9uIFhtKGUsdCxuLHIsaSxhLG8pe3JldHVybiBKbSh0JnJ8biZ+cixlLHQsaSxhLG8pfWZ1bmN0aW9uIFptKGUsdCxuLHIsaSxhLG8pe3JldHVybiBKbSh0Xm5ecixlLHQsaSxhLG8pfWZ1bmN0aW9uIFFtKGUsdCxuLHIsaSxhLG8pe3JldHVybiBKbShuXih0fH5yKSxlLHQsaSxhLG8pfWZ1bmN0aW9uICRtKGUpe3ZhciB0LG49ZS5sZW5ndGgscj1bMTczMjU4NDE5MywtMjcxNzMzODc5LC0xNzMyNTg0MTk0LDI3MTczMzg3OF07Zm9yKHQ9NjQ7dDw9ZS5sZW5ndGg7dCs9NjQpcW0ocixlaChlLnN1YnN0cmluZyh0LTY0LHQpKSk7ZT1lLnN1YnN0cmluZyh0LTY0KTt2YXIgaT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF07Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylpW3Q+PjJdfD1lLmNoYXJDb2RlQXQodCk8PCh0JTQ8PDMpO2lmKGlbdD4+Ml18PTEyODw8KHQlNDw8MyksdD41NSlmb3IocW0ocixpKSx0PTA7dDwxNjt0KyspaVt0XT0wO3JldHVybiBpWzE0XT04Km4scW0ocixpKSxyfWZ1bmN0aW9uIGVoKGUpe3ZhciB0LG49W107Zm9yKHQ9MDt0PDY0O3QrPTQpblt0Pj4yXT1lLmNoYXJDb2RlQXQodCkrKGUuY2hhckNvZGVBdCh0KzEpPDw4KSsoZS5jaGFyQ29kZUF0KHQrMik8PDE2KSsoZS5jaGFyQ29kZUF0KHQrMyk8PDI0KTtyZXR1cm4gbn1mdW5jdGlvbiB0aChlKXtmb3IodmFyIHQ9YGAsbj0wO248NDtuKyspdCs9VWhbZT4+OCpuKzQmMTVdK1VoW2U+PjgqbiYxNV07cmV0dXJuIHR9ZnVuY3Rpb24gbmgoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUsKDY1MjgwJmUpPj44LCgxNjcxMTY4MCZlKT4+MTYsKDQyNzgxOTAwODAmZSk+PjI0KX1mdW5jdGlvbiByaChlKXtyZXR1cm4gJG0oZSkubWFwKG5oKS5qb2luKGBgKX1mdW5jdGlvbiBpaChlLHQpe2lmKFdoKXt2YXIgbj0oNjU1MzUmZSkrKDY1NTM1JnQpO3JldHVybihlPj4xNikrKHQ+PjE2KSsobj4+MTYpPDwxNnw2NTUzNSZufXJldHVybiBlK3QmNDI5NDk2NzI5NX1mdW5jdGlvbiBhaChlLHQpe3ZhciBuLHIsaSxhO2lmKGUhPT1uKXtmb3IodmFyIG89KGk9ZSxhPTErKDI1Ni9lLmxlbmd0aHwwKSxBcnJheShhKzEpLmpvaW4oaSkpLHM9W10sYz0wO2M8MjU2O2MrKylzW2NdPWM7dmFyIGw9MDtmb3IoYz0wO2M8MjU2O2MrKyl7dmFyIHU9c1tjXTtsPShsK3Urby5jaGFyQ29kZUF0KGMpKSUyNTYsc1tjXT1zW2xdLHNbbF09dX1uPWUscj1zfWVsc2Ugcz1yO3ZhciBkPXQubGVuZ3RoLGY9MCxwPTAsbT1gYDtmb3IoYz0wO2M8ZDtjKyspcD0ocCsodT1zW2Y9KGYrMSklMjU2XSkpJTI1NixzW2ZdPXNbcF0sc1twXT11LG89c1soc1tmXStzW3BdKSUyNTZdLG0rPVN0cmluZy5mcm9tQ2hhckNvZGUodC5jaGFyQ29kZUF0KGMpXm8pO3JldHVybiBtfWZ1bmN0aW9uIG9oKGUsdCxuLHIpe3RoaXMudj0xLHRoaXMucj0yO3ZhciBpPTE5MjtlLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoR2gucGVybSE9PXZvaWQgMCl0aHJvdyBFcnJvcihgSW52YWxpZCBwZXJtaXNzaW9uOiBgK2UpO2krPUdoW2VdfSksdGhpcy5wYWRkaW5nPWAowr9OXk51wopBZFwwTlbDv8O6AVxiLi5cMMK2w5BoPsKAL1xmwqnDvmRTaXpgO3ZhciBhPSh0K3RoaXMucGFkZGluZykuc3Vic3RyKDAsMzIpLG89KG4rdGhpcy5wYWRkaW5nKS5zdWJzdHIoMCwzMik7dGhpcy5PPXRoaXMucHJvY2Vzc093bmVyUGFzc3dvcmQoYSxvKSx0aGlzLlA9LSgxKygyNTVeaSkpLHRoaXMuZW5jcnlwdGlvbktleT1yaChhK3RoaXMuTyt0aGlzLmxzYkZpcnN0V29yZCh0aGlzLlApK3RoaXMuaGV4VG9CeXRlcyhyKSkuc3Vic3RyKDAsNSksdGhpcy5VPWFoKHRoaXMuZW5jcnlwdGlvbktleSx0aGlzLnBhZGRpbmcpfWZ1bmN0aW9uIHNoKGUpe2lmKC9bXlx1MDAwMC1cdTAwZmZdLy50ZXN0KGUpKXRocm93IEVycm9yKGBJbnZhbGlkIFBERiBOYW1lIE9iamVjdDogYCtlK2AsIE9ubHkgYWNjZXB0IEFTQ0lJIGNoYXJhY3RlcnMuYCk7Zm9yKHZhciB0PWBgLG49ZS5sZW5ndGgscj0wO3I8bjtyKyspe3ZhciBpPWUuY2hhckNvZGVBdChyKTt0Kz1pPDMzfHxpPT09MzV8fGk9PT0zN3x8aT09PTQwfHxpPT09NDF8fGk9PT00N3x8aT09PTYwfHxpPT09NjJ8fGk9PT05MXx8aT09PTkzfHxpPT09MTIzfHxpPT09MTI1fHxpPjEyNj9gI2ArKGAwYCtpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpOmVbcl19cmV0dXJuIHR9ZnVuY3Rpb24gY2goZSl7aWYoQShlKSE9PWBvYmplY3RgKXRocm93IEVycm9yKGBJbnZhbGlkIENvbnRleHQgcGFzc2VkIHRvIGluaXRpYWxpemUgUHViU3ViIChqc1BERi1tb2R1bGUpYCk7dmFyIHQ9e307dGhpcy5zdWJzY3JpYmU9ZnVuY3Rpb24oZSxuLHIpe2lmKHJ8fD0hMSx0eXBlb2YgZSE9YHN0cmluZ2B8fHR5cGVvZiBuIT1gZnVuY3Rpb25gfHx0eXBlb2YgciE9YGJvb2xlYW5gKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gUHViU3ViLnN1YnNjcmliZSAoanNQREYtbW9kdWxlKWApO3QuaGFzT3duUHJvcGVydHkoZSl8fCh0W2VdPXt9KTt2YXIgaT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM1KTtyZXR1cm4gdFtlXVtpXT1bbiwhIXJdLGl9LHRoaXMudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuIGluIHQpaWYodFtuXVtlXSlyZXR1cm4gZGVsZXRlIHRbbl1bZV0sT2JqZWN0LmtleXModFtuXSkubGVuZ3RoPT09MCYmZGVsZXRlIHRbbl0sITA7cmV0dXJuITF9LHRoaXMucHVibGlzaD1mdW5jdGlvbihuKXtpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaT1bXTtmb3IodmFyIGEgaW4gdFtuXSl7dmFyIG89dFtuXVthXTt0cnl7b1swXS5hcHBseShlLHIpfWNhdGNoKGUpe1JoLmNvbnNvbGUmJnpoLmVycm9yKGBqc1BERiBQdWJTdWIgRXJyb3JgLGUubWVzc2FnZSxlKX1vWzFdJiZpLnB1c2goYSl9aS5sZW5ndGgmJmkuZm9yRWFjaCh0aGlzLnVuc3Vic2NyaWJlKX19LHRoaXMuZ2V0VG9waWNzPWZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGxoKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGxoKSlyZXR1cm4gbmV3IGxoKGUpO3ZhciB0PWBvcGFjaXR5LHN0cm9rZS1vcGFjaXR5YC5zcGxpdChgLGApO2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuaW5kZXhPZihuKT49MCYmKHRoaXNbbl09ZVtuXSk7dGhpcy5pZD1gYCx0aGlzLm9iamVjdE51bWJlcj0tMX1mdW5jdGlvbiB1aChlLHQpe3RoaXMuZ1N0YXRlPWUsdGhpcy5tYXRyaXg9dCx0aGlzLmlkPWBgLHRoaXMub2JqZWN0TnVtYmVyPS0xfWZ1bmN0aW9uIGRoKGUsdCxuLHIsaSl7aWYoISh0aGlzIGluc3RhbmNlb2YgZGgpKXJldHVybiBuZXcgZGgoZSx0LG4scixpKTt0aGlzLnR5cGU9ZT09PWBheGlhbGA/MjozLHRoaXMuY29vcmRzPXQsdGhpcy5jb2xvcnM9bix1aC5jYWxsKHRoaXMscixpKX1mdW5jdGlvbiBmaChlLHQsbixyLGkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGZoKSlyZXR1cm4gbmV3IGZoKGUsdCxuLHIsaSk7dGhpcy5ib3VuZGluZ0JveD1lLHRoaXMueFN0ZXA9dCx0aGlzLnlTdGVwPW4sdGhpcy5zdHJlYW09YGAsdGhpcy5jbG9uZUluZGV4PTAsdWguY2FsbCh0aGlzLHIsaSl9ZnVuY3Rpb24gWihlKXt2YXIgdCxuPXR5cGVvZiBhcmd1bWVudHNbMF09PWBzdHJpbmdgP2FyZ3VtZW50c1swXTpgcGAscj1hcmd1bWVudHNbMV0saT1hcmd1bWVudHNbMl0sYT1hcmd1bWVudHNbM10sbz1bXSxzPTEsYz0xNixsPWBTYCx1PW51bGw7QShlfHw9e30pPT09YG9iamVjdGAmJihuPWUub3JpZW50YXRpb24scj1lLnVuaXR8fHIsaT1lLmZvcm1hdHx8aSxhPWUuY29tcHJlc3N8fGUuY29tcHJlc3NQZGZ8fGEsKHU9ZS5lbmNyeXB0aW9ufHxudWxsKSE9PW51bGwmJih1LnVzZXJQYXNzd29yZD11LnVzZXJQYXNzd29yZHx8YGAsdS5vd25lclBhc3N3b3JkPXUub3duZXJQYXNzd29yZHx8YGAsdS51c2VyUGVybWlzc2lvbnM9dS51c2VyUGVybWlzc2lvbnN8fFtdKSxzPXR5cGVvZiBlLnVzZXJVbml0PT1gbnVtYmVyYD9NYXRoLmFicyhlLnVzZXJVbml0KToxLGUucHJlY2lzaW9uIT09dm9pZCAwJiYodD1lLnByZWNpc2lvbiksZS5mbG9hdFByZWNpc2lvbiE9PXZvaWQgMCYmKGM9ZS5mbG9hdFByZWNpc2lvbiksbD1lLmRlZmF1bHRQYXRoT3BlcmF0aW9ufHxgU2ApLG89ZS5maWx0ZXJzfHwoITA9PT1hP1tgRmxhdGVFbmNvZGVgXTpvKSxyfHw9YG1tYCxuPShgYCsobnx8YFBgKSkudG9Mb3dlckNhc2UoKTt2YXIgZD1lLnB1dE9ubHlVc2VkRm9udHN8fCExLGY9e30scD17aW50ZXJuYWw6e30sX19wcml2YXRlX186e319O3AuX19wcml2YXRlX18uUHViU3ViPWNoO3ZhciBtPWAxLjNgLGg9cC5fX3ByaXZhdGVfXy5nZXRQZGZWZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG19O3AuX19wcml2YXRlX18uc2V0UGRmVmVyc2lvbj1mdW5jdGlvbihlKXttPWV9O3ZhciBnPXthMDpbMjM4My45NCwzMzcwLjM5XSxhMTpbMTY4My43OCwyMzgzLjk0XSxhMjpbMTE5MC41NSwxNjgzLjc4XSxhMzpbODQxLjg5LDExOTAuNTVdLGE0Ols1OTUuMjgsODQxLjg5XSxhNTpbNDE5LjUzLDU5NS4yOF0sYTY6WzI5Ny42NCw0MTkuNTNdLGE3OlsyMDkuNzYsMjk3LjY0XSxhODpbMTQ3LjQsMjA5Ljc2XSxhOTpbMTA0Ljg4LDE0Ny40XSxhMTA6WzczLjcsMTA0Ljg4XSxiMDpbMjgzNC42NSw0MDA4LjE5XSxiMTpbMjAwNC4wOSwyODM0LjY1XSxiMjpbMTQxNy4zMiwyMDA0LjA5XSxiMzpbMTAwMC42MywxNDE3LjMyXSxiNDpbNzA4LjY2LDEwMDAuNjNdLGI1Ols0OTguOSw3MDguNjZdLGI2OlszNTQuMzMsNDk4LjldLGI3OlsyNDkuNDUsMzU0LjMzXSxiODpbMTc1Ljc1LDI0OS40NV0sYjk6WzEyNC43MiwxNzUuNzVdLGIxMDpbODcuODcsMTI0LjcyXSxjMDpbMjU5OS4zNywzNjc2LjU0XSxjMTpbMTgzNi44NSwyNTk5LjM3XSxjMjpbMTI5OC4yNywxODM2Ljg1XSxjMzpbOTE4LjQzLDEyOTguMjddLGM0Ols2NDkuMTMsOTE4LjQzXSxjNTpbNDU5LjIxLDY0OS4xM10sYzY6WzMyMy4xNSw0NTkuMjFdLGM3OlsyMjkuNjEsMzIzLjE1XSxjODpbMTYxLjU3LDIyOS42MV0sYzk6WzExMy4zOSwxNjEuNTddLGMxMDpbNzkuMzcsMTEzLjM5XSxkbDpbMzExLjgxLDYyMy42Ml0sbGV0dGVyOls2MTIsNzkyXSwiZ292ZXJubWVudC1sZXR0ZXIiOls1NzYsNzU2XSxsZWdhbDpbNjEyLDEwMDhdLCJqdW5pb3ItbGVnYWwiOls1NzYsMzYwXSxsZWRnZXI6WzEyMjQsNzkyXSx0YWJsb2lkOls3OTIsMTIyNF0sImNyZWRpdC1jYXJkIjpbMTUzLDI0M119O3AuX19wcml2YXRlX18uZ2V0UGFnZUZvcm1hdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZ307dmFyIF89cC5fX3ByaXZhdGVfXy5nZXRQYWdlRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBnW2VdfTtpfHw9YGE0YDt2YXIgdj1gY29tcGF0YCx5PWBhZHZhbmNlZGAsYj12O2Z1bmN0aW9uIHgoKXt0aGlzLnNhdmVHcmFwaGljc1N0YXRlKCksSyhuZXcgemUoYmUsMCwwLC1iZSwwLENuKCkqYmUpLnRvU3RyaW5nKCkrYCBjbWApLHRoaXMuc2V0Rm9udFNpemUodGhpcy5nZXRGb250U2l6ZSgpL2JlKSxsPWBuYCxiPXl9ZnVuY3Rpb24gUygpe3RoaXMucmVzdG9yZUdyYXBoaWNzU3RhdGUoKSxsPWBTYCxiPXZ9dmFyIEM9cC5fX3ByaXZhdGVfXy5jb21iaW5lRm9udFN0eWxlQW5kRm9udFdlaWdodD1mdW5jdGlvbihlLHQpe2lmKGU9PWBib2xkYCYmdD09YG5vcm1hbGB8fGU9PWBib2xkYCYmdD09NDAwfHxlPT1gbm9ybWFsYCYmdD09YGl0YWxpY2B8fGU9PWBib2xkYCYmdD09YGl0YWxpY2ApdGhyb3cgRXJyb3IoYEludmFsaWQgQ29tYmluYXRpb24gb2YgZm9udHdlaWdodCBhbmQgZm9udHN0eWxlYCk7cmV0dXJuIHQmJihlPXQ9PTQwMHx8dD09PWBub3JtYWxgP2U9PT1gaXRhbGljYD9gaXRhbGljYDpgbm9ybWFsYDp0IT03MDAmJnQhPT1gYm9sZGB8fGUhPT1gbm9ybWFsYD8odD09NzAwP2Bib2xkYDp0KStgYCtlOmBib2xkYCksZX07cC5hZHZhbmNlZEFQST1mdW5jdGlvbihlKXt2YXIgdD1iPT09djtyZXR1cm4gdCYmeC5jYWxsKHRoaXMpLHR5cGVvZiBlIT1gZnVuY3Rpb25gfHwoZSh0aGlzKSx0JiZTLmNhbGwodGhpcykpLHRoaXN9LHAuY29tcGF0QVBJPWZ1bmN0aW9uKGUpe3ZhciB0PWI9PT15O3JldHVybiB0JiZTLmNhbGwodGhpcyksdHlwZW9mIGUhPWBmdW5jdGlvbmB8fChlKHRoaXMpLHQmJnguY2FsbCh0aGlzKSksdGhpc30scC5pc0FkdmFuY2VkQVBJPWZ1bmN0aW9uKCl7cmV0dXJuIGI9PT15fTt2YXIgdyxUPWZ1bmN0aW9uKGUpe2lmKGIhPT15KXRocm93IEVycm9yKGUrYCBpcyBvbmx5IGF2YWlsYWJsZSBpbiAnYWR2YW5jZWQnIEFQSSBtb2RlLiBZb3UgbmVlZCB0byBjYWxsIGFkdmFuY2VkQVBJKCkgZmlyc3QuYCl9LEU9cC5yb3VuZFRvUHJlY2lzaW9uPXAuX19wcml2YXRlX18ucm91bmRUb1ByZWNpc2lvbj1mdW5jdGlvbihlLG4pe3ZhciByPXR8fG47aWYoaXNOYU4oZSl8fGlzTmFOKHIpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5yb3VuZFRvUHJlY2lzaW9uYCk7cmV0dXJuIGUudG9GaXhlZChyKS5yZXBsYWNlKC8wKyQvLGBgKX07dz1wLmhwZj1wLl9fcHJpdmF0ZV9fLmhwZj10eXBlb2YgYz09YG51bWJlcmA/ZnVuY3Rpb24oZSl7aWYoaXNOYU4oZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmhwZmApO3JldHVybiBFKGUsYyl9OmM9PT1gc21hcnRgP2Z1bmN0aW9uKGUpe2lmKGlzTmFOKGUpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5ocGZgKTtyZXR1cm4gRShlLGU+LTEmJmU8MT8xNjo1KX06ZnVuY3Rpb24oZSl7aWYoaXNOYU4oZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmhwZmApO3JldHVybiBFKGUsMTYpfTt2YXIgRD1wLmYyPXAuX19wcml2YXRlX18uZjI9ZnVuY3Rpb24oZSl7aWYoaXNOYU4oZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmYyYCk7cmV0dXJuIEUoZSwyKX0sTz1wLl9fcHJpdmF0ZV9fLmYzPWZ1bmN0aW9uKGUpe2lmKGlzTmFOKGUpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5mM2ApO3JldHVybiBFKGUsMyl9LGs9cC5zY2FsZT1wLl9fcHJpdmF0ZV9fLnNjYWxlPWZ1bmN0aW9uKGUpe2lmKGlzTmFOKGUpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5zY2FsZWApO3JldHVybiBiPT09dj9lKmJlOmI9PT15P2U6dm9pZCAwfSxqPWZ1bmN0aW9uKGUpe3JldHVybiBrKGZ1bmN0aW9uKGUpe3JldHVybiBiPT09dj9DbigpLWU6Yj09PXk/ZTp2b2lkIDB9KGUpKX07cC5fX3ByaXZhdGVfXy5zZXRQcmVjaXNpb249cC5zZXRQcmVjaXNpb249ZnVuY3Rpb24oZSl7dHlwZW9mIHBhcnNlSW50KGUsMTApPT1gbnVtYmVyYCYmKHQ9cGFyc2VJbnQoZSwxMCkpfTt2YXIgTSxOPWAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGAsUD1wLl9fcHJpdmF0ZV9fLmdldEZpbGVJZD1mdW5jdGlvbigpe3JldHVybiBOfSxGPXAuX19wcml2YXRlX18uc2V0RmlsZUlkPWZ1bmN0aW9uKGUpe3JldHVybiBOPWUhPT12b2lkIDAmJi9eW2EtZkEtRjAtOV17MzJ9JC8udGVzdChlKT9lLnRvVXBwZXJDYXNlKCk6Ti5zcGxpdChgYCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuYEFCQ0RFRjAxMjM0NTY3ODlgLmNoYXJBdChNYXRoLmZsb29yKDE2Kk1hdGgucmFuZG9tKCkpKX0pLmpvaW4oYGApLHUhPT1udWxsJiYoT3Q9bmV3IG9oKHUudXNlclBlcm1pc3Npb25zLHUudXNlclBhc3N3b3JkLHUub3duZXJQYXNzd29yZCxOKSksTn07cC5zZXRGaWxlSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEYoZSksdGhpc30scC5nZXRGaWxlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUCgpfTt2YXIgST1wLl9fcHJpdmF0ZV9fLmNvbnZlcnREYXRlVG9QREZEYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKSxuPXQ8MD9gK2A6YC1gLHI9TWF0aC5mbG9vcihNYXRoLmFicyh0LzYwKSksaT1NYXRoLmFicyh0JTYwKSxhPVtuLFYociksYCdgLFYoaSksYCdgXS5qb2luKGBgKTtyZXR1cm5bYEQ6YCxlLmdldEZ1bGxZZWFyKCksVihlLmdldE1vbnRoKCkrMSksVihlLmdldERhdGUoKSksVihlLmdldEhvdXJzKCkpLFYoZS5nZXRNaW51dGVzKCkpLFYoZS5nZXRTZWNvbmRzKCkpLGFdLmpvaW4oYGApfSxMPXAuX19wcml2YXRlX18uY29udmVydFBERkRhdGVUb0RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9cGFyc2VJbnQoZS5zdWJzdHIoMiw0KSwxMCksbj1wYXJzZUludChlLnN1YnN0cig2LDIpLDEwKS0xLHI9cGFyc2VJbnQoZS5zdWJzdHIoOCwyKSwxMCksaT1wYXJzZUludChlLnN1YnN0cigxMCwyKSwxMCksYT1wYXJzZUludChlLnN1YnN0cigxMiwyKSwxMCksbz1wYXJzZUludChlLnN1YnN0cigxNCwyKSwxMCk7cmV0dXJuIG5ldyBEYXRlKHQsbixyLGksYSxvLDApfSxSPXAuX19wcml2YXRlX18uc2V0Q3JlYXRpb25EYXRlPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGU9PT12b2lkIDAmJihlPW5ldyBEYXRlKSxlIGluc3RhbmNlb2YgRGF0ZSl0PUkoZSk7ZWxzZXtpZighL15EOigyMFswLTJdWzAtOV18MjAzWzAtN118MTlbNy05XVswLTldKSgwWzAtOV18MVswLTJdKShbMC0yXVswLTldfDNbMC0xXSkoMFswLTldfDFbMC05XXwyWzAtM10pKDBbMC05XXxbMS01XVswLTldKSgwWzAtOV18WzEtNV1bMC05XSkoXCswWzAtOV18XCsxWzAtNF18LTBbMC05XXwtMVswLTFdKScoMFswLTldfFsxLTVdWzAtOV0pJz8kLy50ZXN0KGUpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5zZXRDcmVhdGlvbkRhdGVgKTt0PWV9cmV0dXJuIE09dH0sej1wLl9fcHJpdmF0ZV9fLmdldENyZWF0aW9uRGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1NO3JldHVybiBlPT09YGpzRGF0ZWAmJih0PUwoTSkpLHR9O3Auc2V0Q3JlYXRpb25EYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBSKGUpLHRoaXN9LHAuZ2V0Q3JlYXRpb25EYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB6KGUpfTt2YXIgQixWPXAuX19wcml2YXRlX18ucGFkZDI9ZnVuY3Rpb24oZSl7cmV0dXJuKGAwYCtwYXJzZUludChlKSkuc2xpY2UoLTIpfSxlZT1wLl9fcHJpdmF0ZV9fLnBhZGQySGV4PWZ1bmN0aW9uKGUpe3JldHVybihgMDBgKyhlPWUudG9TdHJpbmcoKSkpLnN1YnN0cihlLmxlbmd0aCl9LEg9MCxVPVtdLFc9W10sRz0wLHRlPVtdLG5lPVtdLHJlPSExLGllPVc7cC5fX3ByaXZhdGVfXy5zZXRDdXN0b21PdXRwdXREZXN0aW5hdGlvbj1mdW5jdGlvbihlKXtyZT0hMCxpZT1lfTt2YXIgYWU9ZnVuY3Rpb24oZSl7cmV8fChpZT1lKX07cC5fX3ByaXZhdGVfXy5yZXNldEN1c3RvbU91dHB1dERlc3RpbmF0aW9uPWZ1bmN0aW9uKCl7cmU9ITEsaWU9V307dmFyIEs9cC5fX3ByaXZhdGVfXy5vdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLEcrPWUubGVuZ3RoKzEsaWUucHVzaChlKSxpZX0sb2U9cC5fX3ByaXZhdGVfXy53cml0ZT1mdW5jdGlvbihlKXtyZXR1cm4gSyhhcmd1bWVudHMubGVuZ3RoPT09MT9lLnRvU3RyaW5nKCk6QXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsYCBgKSl9LHNlPXAuX19wcml2YXRlX18uZ2V0QXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49bmV3IEFycmF5QnVmZmVyKHQpLHI9bmV3IFVpbnQ4QXJyYXkobik7dC0tOylyW3RdPWUuY2hhckNvZGVBdCh0KTtyZXR1cm4gbn0sY2U9W1tgSGVsdmV0aWNhYCxgaGVsdmV0aWNhYCxgbm9ybWFsYCxgV2luQW5zaUVuY29kaW5nYF0sW2BIZWx2ZXRpY2EtQm9sZGAsYGhlbHZldGljYWAsYGJvbGRgLGBXaW5BbnNpRW5jb2RpbmdgXSxbYEhlbHZldGljYS1PYmxpcXVlYCxgaGVsdmV0aWNhYCxgaXRhbGljYCxgV2luQW5zaUVuY29kaW5nYF0sW2BIZWx2ZXRpY2EtQm9sZE9ibGlxdWVgLGBoZWx2ZXRpY2FgLGBib2xkaXRhbGljYCxgV2luQW5zaUVuY29kaW5nYF0sW2BDb3VyaWVyYCxgY291cmllcmAsYG5vcm1hbGAsYFdpbkFuc2lFbmNvZGluZ2BdLFtgQ291cmllci1Cb2xkYCxgY291cmllcmAsYGJvbGRgLGBXaW5BbnNpRW5jb2RpbmdgXSxbYENvdXJpZXItT2JsaXF1ZWAsYGNvdXJpZXJgLGBpdGFsaWNgLGBXaW5BbnNpRW5jb2RpbmdgXSxbYENvdXJpZXItQm9sZE9ibGlxdWVgLGBjb3VyaWVyYCxgYm9sZGl0YWxpY2AsYFdpbkFuc2lFbmNvZGluZ2BdLFtgVGltZXMtUm9tYW5gLGB0aW1lc2AsYG5vcm1hbGAsYFdpbkFuc2lFbmNvZGluZ2BdLFtgVGltZXMtQm9sZGAsYHRpbWVzYCxgYm9sZGAsYFdpbkFuc2lFbmNvZGluZ2BdLFtgVGltZXMtSXRhbGljYCxgdGltZXNgLGBpdGFsaWNgLGBXaW5BbnNpRW5jb2RpbmdgXSxbYFRpbWVzLUJvbGRJdGFsaWNgLGB0aW1lc2AsYGJvbGRpdGFsaWNgLGBXaW5BbnNpRW5jb2RpbmdgXSxbYFphcGZEaW5nYmF0c2AsYHphcGZkaW5nYmF0c2AsYG5vcm1hbGAsbnVsbF0sW2BTeW1ib2xgLGBzeW1ib2xgLGBub3JtYWxgLG51bGxdXTtwLl9fcHJpdmF0ZV9fLmdldFN0YW5kYXJkRm9udHM9ZnVuY3Rpb24oKXtyZXR1cm4gY2V9O3ZhciBsZT1lLmZvbnRTaXplfHwxNjtwLl9fcHJpdmF0ZV9fLnNldEZvbnRTaXplPXAuc2V0Rm9udFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGxlPWI9PT15P2UvYmU6ZSx0aGlzfTt2YXIgdWUsZGU9cC5fX3ByaXZhdGVfXy5nZXRGb250U2l6ZT1wLmdldEZvbnRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIGI9PT12P2xlOmxlKmJlfSxmZT1lLlIyTHx8ITE7cC5fX3ByaXZhdGVfXy5zZXRSMkw9cC5zZXRSMkw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZlPWUsdGhpc30scC5fX3ByaXZhdGVfXy5nZXRSMkw9cC5nZXRSMkw9ZnVuY3Rpb24oKXtyZXR1cm4gZmV9O3ZhciBwZSxtZT1wLl9fcHJpdmF0ZV9fLnNldFpvb21Nb2RlPWZ1bmN0aW9uKGUpe2lmKC9eKD86XGQrXC5cZCp8XGQqXC5cZCt8XGQrKSUkLy50ZXN0KGUpKXVlPWU7ZWxzZSBpZihpc05hTihlKSl7aWYoW3ZvaWQgMCxudWxsLGBmdWxsd2lkdGhgLGBmdWxsaGVpZ2h0YCxgZnVsbHBhZ2VgLGBvcmlnaW5hbGBdLmluZGV4T2YoZSk9PT0tMSl0aHJvdyBFcnJvcihgem9vbSBtdXN0IGJlIEludGVnZXIgKGUuZy4gMiksIGEgcGVyY2VudGFnZSBWYWx1ZSAoZS5nLiAzMDAlKSBvciBmdWxsd2lkdGgsIGZ1bGxoZWlnaHQsIGZ1bGxwYWdlLCBvcmlnaW5hbC4gImArZStgIiBpcyBub3QgcmVjb2duaXplZC5gKTt1ZT1lfWVsc2UgdWU9cGFyc2VJbnQoZSwxMCl9O3AuX19wcml2YXRlX18uZ2V0Wm9vbU1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdWV9O3ZhciBoZSxnZT1wLl9fcHJpdmF0ZV9fLnNldFBhZ2VNb2RlPWZ1bmN0aW9uKGUpe2lmKFt2b2lkIDAsbnVsbCxgVXNlTm9uZWAsYFVzZU91dGxpbmVzYCxgVXNlVGh1bWJzYCxgRnVsbFNjcmVlbmBdLmluZGV4T2YoZSk9PS0xKXRocm93IEVycm9yKGBQYWdlIG1vZGUgbXVzdCBiZSBvbmUgb2YgVXNlTm9uZSwgVXNlT3V0bGluZXMsIFVzZVRodW1icywgb3IgRnVsbFNjcmVlbi4gImArZStgIiBpcyBub3QgcmVjb2duaXplZC5gKTtwZT1lfTtwLl9fcHJpdmF0ZV9fLmdldFBhZ2VNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHBlfTt2YXIgX2U9cC5fX3ByaXZhdGVfXy5zZXRMYXlvdXRNb2RlPWZ1bmN0aW9uKGUpe2lmKFt2b2lkIDAsbnVsbCxgY29udGludW91c2AsYHNpbmdsZWAsYHR3b2xlZnRgLGB0d29yaWdodGAsYHR3b2BdLmluZGV4T2YoZSk9PS0xKXRocm93IEVycm9yKGBMYXlvdXQgbW9kZSBtdXN0IGJlIG9uZSBvZiBjb250aW51b3VzLCBzaW5nbGUsIHR3b2xlZnQsIHR3b3JpZ2h0LiAiYCtlK2AiIGlzIG5vdCByZWNvZ25pemVkLmApO2hlPWV9O3AuX19wcml2YXRlX18uZ2V0TGF5b3V0TW9kZT1mdW5jdGlvbigpe3JldHVybiBoZX0scC5fX3ByaXZhdGVfXy5zZXREaXNwbGF5TW9kZT1wLnNldERpc3BsYXlNb2RlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbWUoZSksX2UodCksZ2UobiksdGhpc307dmFyIHZlPXt0aXRsZTpgYCxzdWJqZWN0OmBgLGF1dGhvcjpgYCxrZXl3b3JkczpgYCxjcmVhdG9yOmBgfTtwLl9fcHJpdmF0ZV9fLmdldERvY3VtZW50UHJvcGVydHk9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0LmtleXModmUpLmluZGV4T2YoZSk9PT0tMSl0aHJvdyBFcnJvcihgSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8ganNQREYuZ2V0RG9jdW1lbnRQcm9wZXJ0eWApO3JldHVybiB2ZVtlXX0scC5fX3ByaXZhdGVfXy5nZXREb2N1bWVudFByb3BlcnRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdmV9LHAuX19wcml2YXRlX18uc2V0RG9jdW1lbnRQcm9wZXJ0aWVzPXAuc2V0UHJvcGVydGllcz1wLnNldERvY3VtZW50UHJvcGVydGllcz1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdmUpdmUuaGFzT3duUHJvcGVydHkodCkmJmVbdF0mJih2ZVt0XT1lW3RdKTtyZXR1cm4gdGhpc30scC5fX3ByaXZhdGVfXy5zZXREb2N1bWVudFByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7aWYoT2JqZWN0LmtleXModmUpLmluZGV4T2YoZSk9PT0tMSl0aHJvdyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLnNldERvY3VtZW50UHJvcGVydHlgKTtyZXR1cm4gdmVbZV09dH07dmFyIHllLGJlLHhlLFNlLENlLHdlPXt9LFRlPXt9LEVlPVtdLERlPXt9LE9lPXt9LGtlPXt9LEFlPXt9LGplPW51bGwsTWU9MCxOZT1bXSxQZT1uZXcgY2gocCksRmU9ZS5ob3RmaXhlc3x8W10sSWU9e30sTGU9e30sUmU9W10semU9ZnVuY3Rpb24gZSh0LG4scixpLGEsbyl7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpcmV0dXJuIG5ldyBlKHQsbixyLGksYSxvKTtpc05hTih0KSYmKHQ9MSksaXNOYU4obikmJihuPTApLGlzTmFOKHIpJiYocj0wKSxpc05hTihpKSYmKGk9MSksaXNOYU4oYSkmJihhPTApLGlzTmFOKG8pJiYobz0wKSx0aGlzLl9tYXRyaXg9W3QsbixyLGksYSxvXX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSxgc3hgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0cml4WzBdfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbWF0cml4WzBdPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSxgc2h5YCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFsxXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX21hdHJpeFsxXT1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsYHNoeGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbMl19LHNldDpmdW5jdGlvbihlKXt0aGlzLl9tYXRyaXhbMl09ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLGBzeWAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbM119LHNldDpmdW5jdGlvbihlKXt0aGlzLl9tYXRyaXhbM109ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLGB0eGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbNF19LHNldDpmdW5jdGlvbihlKXt0aGlzLl9tYXRyaXhbNF09ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLGB0eWAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbNV19LHNldDpmdW5jdGlvbihlKXt0aGlzLl9tYXRyaXhbNV09ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLGBhYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFswXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX21hdHJpeFswXT1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsYGJgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0cml4WzFdfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbWF0cml4WzFdPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSxgY2Ase2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbMl19LHNldDpmdW5jdGlvbihlKXt0aGlzLl9tYXRyaXhbMl09ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLGBkYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFszXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX21hdHJpeFszXT1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsYGVgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0cml4WzRdfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbWF0cml4WzRdPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSxgZmAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbNV19LHNldDpmdW5jdGlvbihlKXt0aGlzLl9tYXRyaXhbNV09ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLGByb3RhdGlvbmAse2dldDpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMuc2h4LHRoaXMuc3gpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsYHNjYWxlWGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29tcG9zZSgpLnNjYWxlLnN4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsYHNjYWxlWWAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29tcG9zZSgpLnNjYWxlLnN5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsYGlzSWRlbnRpdHlgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zeD09PTEmJnRoaXMuc2h5PT09MCYmdGhpcy5zaHg9PT0wJiZ0aGlzLnN5PT09MSYmdGhpcy50eD09PTAmJnRoaXMudHk9PT0wfX0pLHplLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGUpe3JldHVyblt0aGlzLnN4LHRoaXMuc2h5LHRoaXMuc2h4LHRoaXMuc3ksdGhpcy50eCx0aGlzLnR5XS5tYXAodykuam9pbihlKX0semUucHJvdG90eXBlLm11bHRpcGx5PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgemUoZS5zeCp0aGlzLnN4K2Uuc2h5KnRoaXMuc2h4LGUuc3gqdGhpcy5zaHkrZS5zaHkqdGhpcy5zeSxlLnNoeCp0aGlzLnN4K2Uuc3kqdGhpcy5zaHgsZS5zaHgqdGhpcy5zaHkrZS5zeSp0aGlzLnN5LGUudHgqdGhpcy5zeCtlLnR5KnRoaXMuc2h4K3RoaXMudHgsZS50eCp0aGlzLnNoeStlLnR5KnRoaXMuc3krdGhpcy50eSl9LHplLnByb3RvdHlwZS5kZWNvbXBvc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN4LHQ9dGhpcy5zaHksbj10aGlzLnNoeCxyPXRoaXMuc3ksaT10aGlzLnR4LGE9dGhpcy50eSxvPU1hdGguc3FydChlKmUrdCp0KSxzPShlLz1vKSpuKyh0Lz1vKSpyO24tPWUqcyxyLT10KnM7dmFyIGM9TWF0aC5zcXJ0KG4qbityKnIpO3JldHVybiBzLz1jLGUqKHIvPWMpPHQqKG4vPWMpJiYoZT0tZSx0PS10LHM9LXMsbz0tbykse3NjYWxlOm5ldyB6ZShvLDAsMCxjLDAsMCksdHJhbnNsYXRlOm5ldyB6ZSgxLDAsMCwxLGksYSkscm90YXRlOm5ldyB6ZShlLHQsLXQsZSwwLDApLHNrZXc6bmV3IHplKDEsMCxzLDEsMCwwKX19LHplLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5qb2luKGAgYCl9LHplLnByb3RvdHlwZS5pbnZlcnNlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc3gsdD10aGlzLnNoeSxuPXRoaXMuc2h4LHI9dGhpcy5zeSxpPXRoaXMudHgsYT10aGlzLnR5LG89MS8oZSpyLXQqbikscz1yKm8sYz0tdCpvLGw9LW4qbyx1PWUqbztyZXR1cm4gbmV3IHplKHMsYyxsLHUsLXMqaS1sKmEsLWMqaS11KmEpfSx6ZS5wcm90b3R5cGUuYXBwbHlUb1BvaW50PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZm4oZS54KnRoaXMuc3grZS55KnRoaXMuc2h4K3RoaXMudHgsZS54KnRoaXMuc2h5K2UueSp0aGlzLnN5K3RoaXMudHkpfSx6ZS5wcm90b3R5cGUuYXBwbHlUb1JlY3RhbmdsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmFwcGx5VG9Qb2ludChlKSxuPXRoaXMuYXBwbHlUb1BvaW50KG5ldyBmbihlLngrZS53LGUueStlLmgpKTtyZXR1cm4gbmV3IHBuKHQueCx0Lnksbi54LXQueCxuLnktdC55KX0semUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zeCx0PXRoaXMuc2h5LG49dGhpcy5zaHgscj10aGlzLnN5LGk9dGhpcy50eCxhPXRoaXMudHk7cmV0dXJuIG5ldyB6ZShlLHQsbixyLGksYSl9LHAuTWF0cml4PXplO3ZhciBCZT1wLm1hdHJpeE11bHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tdWx0aXBseShlKX0sVmU9bmV3IHplKDEsMCwwLDEsMCwwKTtwLnVuaXRNYXRyaXg9cC5pZGVudGl0eU1hdHJpeD1WZTt2YXIgSGU9ZnVuY3Rpb24oZSx0KXtpZighT2VbZV0pe3ZhciBuPSh0IGluc3RhbmNlb2YgZGg/YFNoYDpgUGApKyhPYmplY3Qua2V5cyhEZSkubGVuZ3RoKzEpLnRvU3RyaW5nKDEwKTt0LmlkPW4sT2VbZV09bixEZVtuXT10LFBlLnB1Ymxpc2goYGFkZFBhdHRlcm5gLHQpfX07cC5TaGFkaW5nUGF0dGVybj1kaCxwLlRpbGluZ1BhdHRlcm49ZmgscC5hZGRTaGFkaW5nUGF0dGVybj1mdW5jdGlvbihlLHQpe3JldHVybiBUKGBhZGRTaGFkaW5nUGF0dGVybigpYCksSGUoZSx0KSx0aGlzfSxwLmJlZ2luVGlsaW5nUGF0dGVybj1mdW5jdGlvbihlKXtUKGBiZWdpblRpbGluZ1BhdHRlcm4oKWApLGhuKGUuYm91bmRpbmdCb3hbMF0sZS5ib3VuZGluZ0JveFsxXSxlLmJvdW5kaW5nQm94WzJdLWUuYm91bmRpbmdCb3hbMF0sZS5ib3VuZGluZ0JveFszXS1lLmJvdW5kaW5nQm94WzFdLGUubWF0cml4KX0scC5lbmRUaWxpbmdQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7VChgZW5kVGlsaW5nUGF0dGVybigpYCksdC5zdHJlYW09bmVbQl0uam9pbihgCmApLEhlKGUsdCksUGUucHVibGlzaChgZW5kVGlsaW5nUGF0dGVybmAsdCksUmUucG9wKCkucmVzdG9yZSgpfTt2YXIgVWUsV2U9cC5fX3ByaXZhdGVfXy5uZXdPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgZT1HZSgpO3JldHVybiBLZShlLCEwKSxlfSxHZT1wLl9fcHJpdmF0ZV9fLm5ld09iamVjdERlZmVycmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEgrKyxVW0hdPWZ1bmN0aW9uKCl7cmV0dXJuIEd9LEh9LEtlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHlwZW9mIHQ9PWBib29sZWFuYCYmdCxVW2VdPUcsdCYmSyhlK2AgMCBvYmpgKSxlfSxxZT1wLl9fcHJpdmF0ZV9fLm5ld0FkZGl0aW9uYWxPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgZT17b2JqSWQ6R2UoKSxjb250ZW50OmBgfTtyZXR1cm4gdGUucHVzaChlKSxlfSxKZT1HZSgpLFllPUdlKCksWGU9cC5fX3ByaXZhdGVfXy5kZWNvZGVDb2xvclN0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KGAgYCk7aWYodC5sZW5ndGghPT0yfHx0WzFdIT09YGdgJiZ0WzFdIT09YEdgKXQubGVuZ3RoIT09NXx8dFs0XSE9PWBrYCYmdFs0XSE9PWBLYHx8KHQ9WygxLXRbMF0pKigxLXRbM10pLCgxLXRbMV0pKigxLXRbM10pLCgxLXRbMl0pKigxLXRbM10pLGByYF0pO2Vsc2V7dmFyIG49cGFyc2VGbG9hdCh0WzBdKTt0PVtuLG4sbixgcmBdfWZvcih2YXIgcj1gI2AsaT0wO2k8MztpKyspcis9KGAwYCtNYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHRbaV0pKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtyZXR1cm4gcn0sWmU9cC5fX3ByaXZhdGVfXy5lbmNvZGVDb2xvclN0cmluZz1mdW5jdGlvbihlKXt2YXIgdDt0eXBlb2YgZT09YHN0cmluZ2AmJihlPXtjaDE6ZX0pO3ZhciBuPWUuY2gxLHI9ZS5jaDIsaT1lLmNoMyxhPWUuY2g0LG89ZS5wZGZDb2xvclR5cGU9PT1gZHJhd2A/W2BHYCxgUkdgLGBLYF06W2BnYCxgcmdgLGBrYF07aWYodHlwZW9mIG49PWBzdHJpbmdgJiZuLmNoYXJBdCgwKSE9PWAjYCl7dmFyIHM9bmV3IEttKG4pO2lmKHMub2spbj1zLnRvSGV4KCk7ZWxzZSBpZighL15cZCpcLj9cZCokLy50ZXN0KG4pKXRocm93IEVycm9yKGBJbnZhbGlkIGNvbG9yICJgK24rYCIgcGFzc2VkIHRvIGpzUERGLmVuY29kZUNvbG9yU3RyaW5nLmApfWlmKHR5cGVvZiBuPT1gc3RyaW5nYCYmL14jWzAtOUEtRmEtZl17M30kLy50ZXN0KG4pJiYobj1gI2ArblsxXStuWzFdK25bMl0rblsyXStuWzNdK25bM10pLHR5cGVvZiBuPT1gc3RyaW5nYCYmL14jWzAtOUEtRmEtZl17Nn0kLy50ZXN0KG4pKXt2YXIgYz1wYXJzZUludChuLnN1YnN0cigxKSwxNik7bj1jPj4xNiYyNTUscj1jPj44JjI1NSxpPTI1NSZjfWlmKHI9PT12b2lkIDB8fGE9PT12b2lkIDAmJm49PT1yJiZyPT09aSl0PXR5cGVvZiBuPT1gc3RyaW5nYD9uK2AgYCtvWzBdOmUucHJlY2lzaW9uPT09Mj9EKG4vMjU1KStgIGArb1swXTpPKG4vMjU1KStgIGArb1swXTtlbHNlIGlmKGE9PT12b2lkIDB8fEEoYSk9PT1gb2JqZWN0YCl7aWYoYSYmIWlzTmFOKGEuYSkmJmEuYT09PTApcmV0dXJuW2AxLmAsYDEuYCxgMS5gLG9bMV1dLmpvaW4oYCBgKTt0PXR5cGVvZiBuPT1gc3RyaW5nYD9bbixyLGksb1sxXV0uam9pbihgIGApOmUucHJlY2lzaW9uPT09Mj9bRChuLzI1NSksRChyLzI1NSksRChpLzI1NSksb1sxXV0uam9pbihgIGApOltPKG4vMjU1KSxPKHIvMjU1KSxPKGkvMjU1KSxvWzFdXS5qb2luKGAgYCl9ZWxzZSB0PXR5cGVvZiBuPT1gc3RyaW5nYD9bbixyLGksYSxvWzJdXS5qb2luKGAgYCk6ZS5wcmVjaXNpb249PT0yP1tEKG4pLEQociksRChpKSxEKGEpLG9bMl1dLmpvaW4oYCBgKTpbTyhuKSxPKHIpLE8oaSksTyhhKSxvWzJdXS5qb2luKGAgYCk7cmV0dXJuIHR9LFFlPXAuX19wcml2YXRlX18uZ2V0RmlsdGVycz1mdW5jdGlvbigpe3JldHVybiBvfSwkZT1wLl9fcHJpdmF0ZV9fLnB1dFN0cmVhbT1mdW5jdGlvbihlKXt2YXIgdD0oZXx8PXt9KS5kYXRhfHxgYCxuPWUuZmlsdGVyc3x8UWUoKSxyPWUuYWxyZWFkeUFwcGxpZWRGaWx0ZXJzfHxbXSxpPWUuYWRkTGVuZ3RoMXx8ITEsYT10Lmxlbmd0aCxvPWUub2JqZWN0SWQscz1mdW5jdGlvbihlKXtyZXR1cm4gZX07aWYodSE9PW51bGwmJm89PT12b2lkIDApdGhyb3cgRXJyb3IoYE9iamVjdElkIG11c3QgYmUgcGFzc2VkIHRvIHB1dFN0cmVhbSBmb3IgZmlsZSBlbmNyeXB0aW9uYCk7dSE9PW51bGwmJihzPU90LmVuY3J5cHRvcihvLDApKTt2YXIgYz17fTshMD09PW4mJihuPVtgRmxhdGVFbmNvZGVgXSk7dmFyIGw9ZS5hZGRpdGlvbmFsS2V5VmFsdWVzfHxbXSxkPShjPVouQVBJLnByb2Nlc3NEYXRhQnlGaWx0ZXJzPT09dm9pZCAwP3tkYXRhOnQscmV2ZXJzZUNoYWluOltdfTpaLkFQSS5wcm9jZXNzRGF0YUJ5RmlsdGVycyh0LG4pKS5yZXZlcnNlQ2hhaW4rKEFycmF5LmlzQXJyYXkocik/ci5qb2luKGAgYCk6ci50b1N0cmluZygpKTtpZihjLmRhdGEubGVuZ3RoIT09MCYmKGwucHVzaCh7a2V5OmBMZW5ndGhgLHZhbHVlOmMuZGF0YS5sZW5ndGh9KSwhMD09PWkmJmwucHVzaCh7a2V5OmBMZW5ndGgxYCx2YWx1ZTphfSkpLGQubGVuZ3RoIT0wKWlmKGQuc3BsaXQoYC9gKS5sZW5ndGgtMT09MSlsLnB1c2goe2tleTpgRmlsdGVyYCx2YWx1ZTpkfSk7ZWxzZXtsLnB1c2goe2tleTpgRmlsdGVyYCx2YWx1ZTpgW2ArZCtgXWB9KTtmb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrPTEpaWYobFtmXS5rZXk9PT1gRGVjb2RlUGFybXNgKXtmb3IodmFyIHA9W10sbT0wO208Yy5yZXZlcnNlQ2hhaW4uc3BsaXQoYC9gKS5sZW5ndGgtMTttKz0xKXAucHVzaChgbnVsbGApO3AucHVzaChsW2ZdLnZhbHVlKSxsW2ZdLnZhbHVlPWBbYCtwLmpvaW4oYCBgKStgXWB9fUsoYDw8YCk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspSyhgL2ArbFtoXS5rZXkrYCBgK2xbaF0udmFsdWUpO0soYD4+YCksYy5kYXRhLmxlbmd0aCE9PTAmJihLKGBzdHJlYW1gKSxLKHMoYy5kYXRhKSksSyhgZW5kc3RyZWFtYCkpfSxldD1wLl9fcHJpdmF0ZV9fLnB1dFBhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5udW1iZXIsbj1lLmRhdGEscj1lLm9iaklkLGk9ZS5jb250ZW50c09iaklkO0tlKHIsITApLEsoYDw8L1R5cGUgL1BhZ2VgKSxLKGAvUGFyZW50IGArZS5yb290RGljdGlvbmFyeU9iaklkK2AgMCBSYCksSyhgL1Jlc291cmNlcyBgK2UucmVzb3VyY2VEaWN0aW9uYXJ5T2JqSWQrYCAwIFJgKSxLKGAvTWVkaWFCb3ggW2ArcGFyc2VGbG9hdCh3KGUubWVkaWFCb3guYm90dG9tTGVmdFgpKStgIGArcGFyc2VGbG9hdCh3KGUubWVkaWFCb3guYm90dG9tTGVmdFkpKStgIGArdyhlLm1lZGlhQm94LnRvcFJpZ2h0WCkrYCBgK3coZS5tZWRpYUJveC50b3BSaWdodFkpK2BdYCksZS5jcm9wQm94IT09bnVsbCYmSyhgL0Nyb3BCb3ggW2ArdyhlLmNyb3BCb3guYm90dG9tTGVmdFgpK2AgYCt3KGUuY3JvcEJveC5ib3R0b21MZWZ0WSkrYCBgK3coZS5jcm9wQm94LnRvcFJpZ2h0WCkrYCBgK3coZS5jcm9wQm94LnRvcFJpZ2h0WSkrYF1gKSxlLmJsZWVkQm94IT09bnVsbCYmSyhgL0JsZWVkQm94IFtgK3coZS5ibGVlZEJveC5ib3R0b21MZWZ0WCkrYCBgK3coZS5ibGVlZEJveC5ib3R0b21MZWZ0WSkrYCBgK3coZS5ibGVlZEJveC50b3BSaWdodFgpK2AgYCt3KGUuYmxlZWRCb3gudG9wUmlnaHRZKStgXWApLGUudHJpbUJveCE9PW51bGwmJksoYC9UcmltQm94IFtgK3coZS50cmltQm94LmJvdHRvbUxlZnRYKStgIGArdyhlLnRyaW1Cb3guYm90dG9tTGVmdFkpK2AgYCt3KGUudHJpbUJveC50b3BSaWdodFgpK2AgYCt3KGUudHJpbUJveC50b3BSaWdodFkpK2BdYCksZS5hcnRCb3ghPT1udWxsJiZLKGAvQXJ0Qm94IFtgK3coZS5hcnRCb3guYm90dG9tTGVmdFgpK2AgYCt3KGUuYXJ0Qm94LmJvdHRvbUxlZnRZKStgIGArdyhlLmFydEJveC50b3BSaWdodFgpK2AgYCt3KGUuYXJ0Qm94LnRvcFJpZ2h0WSkrYF1gKSx0eXBlb2YgZS51c2VyVW5pdD09YG51bWJlcmAmJmUudXNlclVuaXQhPT0xJiZLKGAvVXNlclVuaXQgYCtlLnVzZXJVbml0KSxQZS5wdWJsaXNoKGBwdXRQYWdlYCx7b2JqSWQ6cixwYWdlQ29udGV4dDpOZVt0XSxwYWdlTnVtYmVyOnQscGFnZTpufSksSyhgL0NvbnRlbnRzIGAraStgIDAgUmApLEsoYD4+YCksSyhgZW5kb2JqYCk7dmFyIGE9bi5qb2luKGAKYCk7cmV0dXJuIGI9PT15JiYoYSs9YApRYCksS2UoaSwhMCksJGUoe2RhdGE6YSxmaWx0ZXJzOlFlKCksb2JqZWN0SWQ6aX0pLEsoYGVuZG9iamApLHJ9LHR0PXAuX19wcml2YXRlX18ucHV0UGFnZXM9ZnVuY3Rpb24oKXt2YXIgZSx0LG49W107Zm9yKGU9MTtlPD1NZTtlKyspTmVbZV0ub2JqSWQ9R2UoKSxOZVtlXS5jb250ZW50c09iaklkPUdlKCk7Zm9yKGU9MTtlPD1NZTtlKyspbi5wdXNoKGV0KHtudW1iZXI6ZSxkYXRhOm5lW2VdLG9iaklkOk5lW2VdLm9iaklkLGNvbnRlbnRzT2JqSWQ6TmVbZV0uY29udGVudHNPYmpJZCxtZWRpYUJveDpOZVtlXS5tZWRpYUJveCxjcm9wQm94Ok5lW2VdLmNyb3BCb3gsYmxlZWRCb3g6TmVbZV0uYmxlZWRCb3gsdHJpbUJveDpOZVtlXS50cmltQm94LGFydEJveDpOZVtlXS5hcnRCb3gsdXNlclVuaXQ6TmVbZV0udXNlclVuaXQscm9vdERpY3Rpb25hcnlPYmpJZDpKZSxyZXNvdXJjZURpY3Rpb25hcnlPYmpJZDpZZX0pKTtLZShKZSwhMCksSyhgPDwvVHlwZSAvUGFnZXNgKTt2YXIgcj1gL0tpZHMgW2A7Zm9yKHQ9MDt0PE1lO3QrKylyKz1uW3RdK2AgMCBSIGA7SyhyK2BdYCksSyhgL0NvdW50IGArTWUpLEsoYD4+YCksSyhgZW5kb2JqYCksUGUucHVibGlzaChgcG9zdFB1dFBhZ2VzYCl9LG50PWZ1bmN0aW9uKGUpe1BlLnB1Ymxpc2goYHB1dEZvbnRgLHtmb250OmUsb3V0OkssbmV3T2JqZWN0OldlLHB1dFN0cmVhbTokZX0pLCEwIT09ZS5pc0FscmVhZHlQdXR0ZWQmJihlLm9iamVjdE51bWJlcj1XZSgpLEsoYDw8YCksSyhgL1R5cGUgL0ZvbnRgKSxLKGAvQmFzZUZvbnQgL2Arc2goZS5wb3N0U2NyaXB0TmFtZSkpLEsoYC9TdWJ0eXBlIC9UeXBlMWApLHR5cGVvZiBlLmVuY29kaW5nPT1gc3RyaW5nYCYmSyhgL0VuY29kaW5nIC9gK2UuZW5jb2RpbmcpLEsoYC9GaXJzdENoYXIgMzJgKSxLKGAvTGFzdENoYXIgMjU1YCksSyhgPj5gKSxLKGBlbmRvYmpgKSl9LHJ0PWZ1bmN0aW9uKGUpe2Uub2JqZWN0TnVtYmVyPVdlKCk7dmFyIHQ9W107dC5wdXNoKHtrZXk6YFR5cGVgLHZhbHVlOmAvWE9iamVjdGB9KSx0LnB1c2goe2tleTpgU3VidHlwZWAsdmFsdWU6YC9Gb3JtYH0pLHQucHVzaCh7a2V5OmBCQm94YCx2YWx1ZTpgW2ArW3coZS54KSx3KGUueSksdyhlLngrZS53aWR0aCksdyhlLnkrZS5oZWlnaHQpXS5qb2luKGAgYCkrYF1gfSksdC5wdXNoKHtrZXk6YE1hdHJpeGAsdmFsdWU6YFtgK2UubWF0cml4LnRvU3RyaW5nKCkrYF1gfSksJGUoe2RhdGE6ZS5wYWdlc1sxXS5qb2luKGAKYCksYWRkaXRpb25hbEtleVZhbHVlczp0LG9iamVjdElkOmUub2JqZWN0TnVtYmVyfSksSyhgZW5kb2JqYCl9LGl0PWZ1bmN0aW9uKGUsdCl7dHx8PTIxO3ZhciBuPVdlKCkscj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT0xLyh0LTEpO2ZvcihuPTA7bjwxO24rPWkpci5wdXNoKG4pO2lmKHIucHVzaCgxKSxlWzBdLm9mZnNldCE9MCl7dmFyIGE9e29mZnNldDowLGNvbG9yOmVbMF0uY29sb3J9O2UudW5zaGlmdChhKX1pZihlW2UubGVuZ3RoLTFdLm9mZnNldCE9MSl7dmFyIG89e29mZnNldDoxLGNvbG9yOmVbZS5sZW5ndGgtMV0uY29sb3J9O2UucHVzaChvKX1mb3IodmFyIHM9YGAsYz0wLGw9MDtsPHIubGVuZ3RoO2wrKyl7Zm9yKG49cltsXTtuPmVbYysxXS5vZmZzZXQ7KWMrKzt2YXIgdT1lW2NdLm9mZnNldCxkPShuLXUpLyhlW2MrMV0ub2Zmc2V0LXUpLGY9ZVtjXS5jb2xvcixwPWVbYysxXS5jb2xvcjtzKz1lZShNYXRoLnJvdW5kKCgxLWQpKmZbMF0rZCpwWzBdKS50b1N0cmluZygxNikpK2VlKE1hdGgucm91bmQoKDEtZCkqZlsxXStkKnBbMV0pLnRvU3RyaW5nKDE2KSkrZWUoTWF0aC5yb3VuZCgoMS1kKSpmWzJdK2QqcFsyXSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcy50cmltKCl9KGUuY29sb3JzLHQpLGk9W107aS5wdXNoKHtrZXk6YEZ1bmN0aW9uVHlwZWAsdmFsdWU6YDBgfSksaS5wdXNoKHtrZXk6YERvbWFpbmAsdmFsdWU6YFswLjAgMS4wXWB9KSxpLnB1c2goe2tleTpgU2l6ZWAsdmFsdWU6YFtgK3QrYF1gfSksaS5wdXNoKHtrZXk6YEJpdHNQZXJTYW1wbGVgLHZhbHVlOmA4YH0pLGkucHVzaCh7a2V5OmBSYW5nZWAsdmFsdWU6YFswLjAgMS4wIDAuMCAxLjAgMC4wIDEuMF1gfSksaS5wdXNoKHtrZXk6YERlY29kZWAsdmFsdWU6YFswLjAgMS4wIDAuMCAxLjAgMC4wIDEuMF1gfSksJGUoe2RhdGE6cixhZGRpdGlvbmFsS2V5VmFsdWVzOmksYWxyZWFkeUFwcGxpZWRGaWx0ZXJzOltgL0FTQ0lJSGV4RGVjb2RlYF0sb2JqZWN0SWQ6bn0pLEsoYGVuZG9iamApLGUub2JqZWN0TnVtYmVyPVdlKCksSyhgPDwgL1NoYWRpbmdUeXBlIGArZS50eXBlKSxLKGAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCYCk7dmFyIGE9YC9Db29yZHMgW2ArdyhwYXJzZUZsb2F0KGUuY29vcmRzWzBdKSkrYCBgK3cocGFyc2VGbG9hdChlLmNvb3Jkc1sxXSkpK2AgYDtlLnR5cGU9PT0yP2ErPXcocGFyc2VGbG9hdChlLmNvb3Jkc1syXSkpK2AgYCt3KHBhcnNlRmxvYXQoZS5jb29yZHNbM10pKTphKz13KHBhcnNlRmxvYXQoZS5jb29yZHNbMl0pKStgIGArdyhwYXJzZUZsb2F0KGUuY29vcmRzWzNdKSkrYCBgK3cocGFyc2VGbG9hdChlLmNvb3Jkc1s0XSkpK2AgYCt3KHBhcnNlRmxvYXQoZS5jb29yZHNbNV0pKSxLKGErPWBdYCksZS5tYXRyaXgmJksoYC9NYXRyaXggW2ArZS5tYXRyaXgudG9TdHJpbmcoKStgXWApLEsoYC9GdW5jdGlvbiBgK24rYCAwIFJgKSxLKGAvRXh0ZW5kIFt0cnVlIHRydWVdYCksSyhgPj5gKSxLKGBlbmRvYmpgKX0sYXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1HZSgpLHI9V2UoKTt0LnB1c2goe3Jlc291cmNlc09pZDpuLG9iamVjdE9pZDpyfSksZS5vYmplY3ROdW1iZXI9cjt2YXIgaT1bXTtpLnB1c2goe2tleTpgVHlwZWAsdmFsdWU6YC9QYXR0ZXJuYH0pLGkucHVzaCh7a2V5OmBQYXR0ZXJuVHlwZWAsdmFsdWU6YDFgfSksaS5wdXNoKHtrZXk6YFBhaW50VHlwZWAsdmFsdWU6YDFgfSksaS5wdXNoKHtrZXk6YFRpbGluZ1R5cGVgLHZhbHVlOmAxYH0pLGkucHVzaCh7a2V5OmBCQm94YCx2YWx1ZTpgW2ArZS5ib3VuZGluZ0JveC5tYXAodykuam9pbihgIGApK2BdYH0pLGkucHVzaCh7a2V5OmBYU3RlcGAsdmFsdWU6dyhlLnhTdGVwKX0pLGkucHVzaCh7a2V5OmBZU3RlcGAsdmFsdWU6dyhlLnlTdGVwKX0pLGkucHVzaCh7a2V5OmBSZXNvdXJjZXNgLHZhbHVlOm4rYCAwIFJgfSksZS5tYXRyaXgmJmkucHVzaCh7a2V5OmBNYXRyaXhgLHZhbHVlOmBbYCtlLm1hdHJpeC50b1N0cmluZygpK2BdYH0pLCRlKHtkYXRhOmUuc3RyZWFtLGFkZGl0aW9uYWxLZXlWYWx1ZXM6aSxvYmplY3RJZDplLm9iamVjdE51bWJlcn0pLEsoYGVuZG9iamApfSxvdD1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZS5vYmplY3ROdW1iZXI9V2UoKSxLKGA8PGApLGUpc3dpdGNoKHQpe2Nhc2Vgb3BhY2l0eWA6SyhgL2NhIGArRChlW3RdKSk7YnJlYWs7Y2FzZWBzdHJva2Utb3BhY2l0eWA6SyhgL0NBIGArRChlW3RdKSl9SyhgPj5gKSxLKGBlbmRvYmpgKX0sc3Q9ZnVuY3Rpb24oZSl7S2UoZS5yZXNvdXJjZXNPaWQsITApLEsoYDw8YCksSyhgL1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldYCksZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gSyhgL0ZvbnQgPDxgKSx3ZSl3ZS5oYXNPd25Qcm9wZXJ0eShlKSYmKCExPT09ZHx8ITA9PT1kJiZmLmhhc093blByb3BlcnR5KGUpKSYmSyhgL2ArZStgIGArd2VbZV0ub2JqZWN0TnVtYmVyK2AgMCBSYCk7SyhgPj5gKX0oKSxmdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKERlKS5sZW5ndGg+MCl7Zm9yKHZhciBlIGluIEsoYC9TaGFkaW5nIDw8YCksRGUpRGUuaGFzT3duUHJvcGVydHkoZSkmJkRlW2VdaW5zdGFuY2VvZiBkaCYmRGVbZV0ub2JqZWN0TnVtYmVyPj0wJiZLKGAvYCtlK2AgYCtEZVtlXS5vYmplY3ROdW1iZXIrYCAwIFJgKTtQZS5wdWJsaXNoKGBwdXRTaGFkaW5nUGF0dGVybkRpY3RgKSxLKGA+PmApfX0oKSxmdW5jdGlvbihlKXtpZihPYmplY3Qua2V5cyhEZSkubGVuZ3RoPjApe2Zvcih2YXIgdCBpbiBLKGAvUGF0dGVybiA8PGApLERlKURlLmhhc093blByb3BlcnR5KHQpJiZEZVt0XWluc3RhbmNlb2YgcC5UaWxpbmdQYXR0ZXJuJiZEZVt0XS5vYmplY3ROdW1iZXI+PTAmJkRlW3RdLm9iamVjdE51bWJlcjxlJiZLKGAvYCt0K2AgYCtEZVt0XS5vYmplY3ROdW1iZXIrYCAwIFJgKTtQZS5wdWJsaXNoKGBwdXRUaWxpbmdQYXR0ZXJuRGljdGApLEsoYD4+YCl9fShlLm9iamVjdE9pZCksZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyhrZSkubGVuZ3RoPjApe2Zvcih2YXIgZSBpbiBLKGAvRXh0R1N0YXRlIDw8YCksa2Upa2UuaGFzT3duUHJvcGVydHkoZSkmJmtlW2VdLm9iamVjdE51bWJlcj49MCYmSyhgL2ArZStgIGAra2VbZV0ub2JqZWN0TnVtYmVyK2AgMCBSYCk7UGUucHVibGlzaChgcHV0R1N0YXRlRGljdGApLEsoYD4+YCl9fSgpLGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIEsoYC9YT2JqZWN0IDw8YCksSWUpSWUuaGFzT3duUHJvcGVydHkoZSkmJkllW2VdLm9iamVjdE51bWJlcj49MCYmSyhgL2ArZStgIGArSWVbZV0ub2JqZWN0TnVtYmVyK2AgMCBSYCk7UGUucHVibGlzaChgcHV0WG9iamVjdERpY3RgKSxLKGA+PmApfSgpLEsoYD4+YCksSyhgZW5kb2JqYCl9LGN0PWZ1bmN0aW9uKGUpe1RlW2UuZm9udE5hbWVdPVRlW2UuZm9udE5hbWVdfHx7fSxUZVtlLmZvbnROYW1lXVtlLmZvbnRTdHlsZV09ZS5pZH0sbHQ9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT17aWQ6YEZgKyhPYmplY3Qua2V5cyh3ZSkubGVuZ3RoKzEpLnRvU3RyaW5nKDEwKSxwb3N0U2NyaXB0TmFtZTplLGZvbnROYW1lOnQsZm9udFN0eWxlOm4sZW5jb2Rpbmc6cixpc1N0YW5kYXJkRm9udDppfHwhMSxtZXRhZGF0YTp7fX07cmV0dXJuIFBlLnB1Ymxpc2goYGFkZEZvbnRgLHtmb250OmEsaW5zdGFuY2U6dGhpc30pLHdlW2EuaWRdPWEsY3QoYSksYS5pZH0sdXQ9cC5fX3ByaXZhdGVfXy5wZGZFc2NhcGU9cC5wZGZFc2NhcGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksYSxvLHMsYyxsLHU7aWYoaT0odHx8PXt9KS5zb3VyY2VFbmNvZGluZ3x8YFVuaWNvZGVgLG89dC5vdXRwdXRFbmNvZGluZywodC5hdXRvZW5jb2RlfHxvKSYmd2VbeWVdLm1ldGFkYXRhJiZ3ZVt5ZV0ubWV0YWRhdGFbaV0mJndlW3llXS5tZXRhZGF0YVtpXS5lbmNvZGluZyYmKGE9d2VbeWVdLm1ldGFkYXRhW2ldLmVuY29kaW5nLCFvJiZ3ZVt5ZV0uZW5jb2RpbmcmJihvPXdlW3llXS5lbmNvZGluZyksIW8mJmEuY29kZVBhZ2VzJiYobz1hLmNvZGVQYWdlc1swXSksdHlwZW9mIG89PWBzdHJpbmdgJiYobz1hW29dKSxvKSl7Zm9yKGM9ITEscz1bXSxuPTAscj1lLmxlbmd0aDtuPHI7bisrKShsPW9bZS5jaGFyQ29kZUF0KG4pXSk/cy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobCkpOnMucHVzaChlW25dKSxzW25dLmNoYXJDb2RlQXQoMCk+PjgmJihjPSEwKTtlPXMuam9pbihgYCl9Zm9yKG49ZS5sZW5ndGg7Yz09PXZvaWQgMCYmbiE9PTA7KWUuY2hhckNvZGVBdChuLTEpPj44JiYoYz0hMCksbi0tO2lmKCFjKXJldHVybiBlO2ZvcihzPXQubm9CT00/W106WzI1NCwyNTVdLG49MCxyPWUubGVuZ3RoO248cjtuKyspe2lmKCh1PShsPWUuY2hhckNvZGVBdChuKSk+PjgpPj44KXRocm93IEVycm9yKGBDaGFyYWN0ZXIgYXQgcG9zaXRpb24gYCtuK2Agb2Ygc3RyaW5nICdgK2UrYCcgZXhjZWVkcyAxNmJpdHMuIENhbm5vdCBiZSBlbmNvZGVkIGludG8gVUNTLTIgQkVgKTtzLnB1c2godSkscy5wdXNoKGwtKHU8PDgpKX1yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSh2b2lkIDAscyl9KGUsdCkucmVwbGFjZSgvXFwvZyxgXFxcXGApLnJlcGxhY2UoL1woL2csYFxcKGApLnJlcGxhY2UoL1wpL2csYFxcKWApfSxkdD1wLl9fcHJpdmF0ZV9fLmJlZ2luUGFnZT1mdW5jdGlvbihlKXtuZVsrK01lXT1bXSxOZVtNZV09e29iaklkOjAsY29udGVudHNPYmpJZDowLHVzZXJVbml0Ok51bWJlcihzKSxhcnRCb3g6bnVsbCxibGVlZEJveDpudWxsLGNyb3BCb3g6bnVsbCx0cmltQm94Om51bGwsbWVkaWFCb3g6e2JvdHRvbUxlZnRYOjAsYm90dG9tTGVmdFk6MCx0b3BSaWdodFg6TnVtYmVyKGVbMF0pLHRvcFJpZ2h0WTpOdW1iZXIoZVsxXSl9fSxtdChNZSksYWUobmVbQl0pfSxmdD1mdW5jdGlvbihlLHQpe3ZhciByLGEsbztzd2l0Y2gobj10fHxuLHR5cGVvZiBlPT1gc3RyaW5nYCYmKHI9XyhlLnRvTG93ZXJDYXNlKCkpLEFycmF5LmlzQXJyYXkocikmJihhPXJbMF0sbz1yWzFdKSksQXJyYXkuaXNBcnJheShlKSYmKGE9ZVswXSpiZSxvPWVbMV0qYmUpLGlzTmFOKGEpJiYoYT1pWzBdLG89aVsxXSksKGE+MTQ0MDB8fG8+MTQ0MDApJiYoemgud2FybihgQSBwYWdlIGluIGEgUERGIGNhbiBub3QgYmUgd2lkZXIgb3IgdGFsbGVyIHRoYW4gMTQ0MDAgdXNlclVuaXQuIGpzUERGIGxpbWl0cyB0aGUgd2lkdGgvaGVpZ2h0IHRvIDE0NDAwYCksYT1NYXRoLm1pbigxNDQwMCxhKSxvPU1hdGgubWluKDE0NDAwLG8pKSxpPVthLG9dLG4uc3Vic3RyKDAsMSkpe2Nhc2VgbGA6bz5hJiYoaT1bbyxhXSk7YnJlYWs7Y2FzZWBwYDphPm8mJihpPVtvLGFdKX1kdChpKSxKdChLdCksSyhubiksbG4hPT0wJiZLKGxuK2AgSmApLHVuIT09MCYmSyh1bitgIGpgKSxQZS5wdWJsaXNoKGBhZGRQYWdlYCx7cGFnZU51bWJlcjpNZX0pfSxwdD1mdW5jdGlvbihlKXtlPjAmJmU8PU1lJiYobmUuc3BsaWNlKGUsMSksTmUuc3BsaWNlKGUsMSksTWUtLSxCPk1lJiYoQj1NZSksdGhpcy5zZXRQYWdlKEIpKX0sbXQ9ZnVuY3Rpb24oZSl7ZT4wJiZlPD1NZSYmKEI9ZSl9LGh0PXAuX19wcml2YXRlX18uZ2V0TnVtYmVyT2ZQYWdlcz1wLmdldE51bWJlck9mUGFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbmUubGVuZ3RoLTF9LGd0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXZvaWQgMDtyZXR1cm4gbnx8PXt9LGU9ZT09PXZvaWQgMD93ZVt5ZV0uZm9udE5hbWU6ZSx0PXQ9PT12b2lkIDA/d2VbeWVdLmZvbnRTdHlsZTp0LHI9ZS50b0xvd2VyQ2FzZSgpLFRlW3JdIT09dm9pZCAwJiZUZVtyXVt0XSE9PXZvaWQgMD9pPVRlW3JdW3RdOlRlW2VdIT09dm9pZCAwJiZUZVtlXVt0XSE9PXZvaWQgMD9pPVRlW2VdW3RdOiExPT09bi5kaXNhYmxlV2FybmluZyYmemgud2FybihgVW5hYmxlIHRvIGxvb2sgdXAgZm9udCBsYWJlbCBmb3IgZm9udCAnYCtlK2AnLCAnYCt0K2AnLiBSZWZlciB0byBnZXRGb250TGlzdCgpIGZvciBhdmFpbGFibGUgZm9udHMuYCksaXx8bi5ub0ZhbGxiYWNrfHwoKGk9VGUudGltZXNbdF0pPz8oaT1UZS50aW1lcy5ub3JtYWwpKSxpfSxfdD1wLl9fcHJpdmF0ZV9fLnB1dEluZm89ZnVuY3Rpb24oKXt2YXIgZT1XZSgpLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Zvcih2YXIgbiBpbiB1IT09bnVsbCYmKHQ9T3QuZW5jcnlwdG9yKGUsMCkpLEsoYDw8YCksSyhgL1Byb2R1Y2VyIChgK3V0KHQoYGpzUERGIGArWi52ZXJzaW9uKSkrYClgKSx2ZSl2ZS5oYXNPd25Qcm9wZXJ0eShuKSYmdmVbbl0mJksoYC9gK24uc3Vic3RyKDAsMSkudG9VcHBlckNhc2UoKStuLnN1YnN0cigxKStgIChgK3V0KHQodmVbbl0pKStgKWApO0soYC9DcmVhdGlvbkRhdGUgKGArdXQodChNKSkrYClgKSxLKGA+PmApLEsoYGVuZG9iamApfSx2dD1wLl9fcHJpdmF0ZV9fLnB1dENhdGFsb2c9ZnVuY3Rpb24oZSl7dmFyIHQ9KGV8fD17fSkucm9vdERpY3Rpb25hcnlPYmpJZHx8SmU7c3dpdGNoKFdlKCksSyhgPDxgKSxLKGAvVHlwZSAvQ2F0YWxvZ2ApLEsoYC9QYWdlcyBgK3QrYCAwIFJgKSx1ZXx8PWBmdWxsd2lkdGhgLHVlKXtjYXNlYGZ1bGx3aWR0aGA6SyhgL09wZW5BY3Rpb24gWzMgMCBSIC9GaXRIIG51bGxdYCk7YnJlYWs7Y2FzZWBmdWxsaGVpZ2h0YDpLKGAvT3BlbkFjdGlvbiBbMyAwIFIgL0ZpdFYgbnVsbF1gKTticmVhaztjYXNlYGZ1bGxwYWdlYDpLKGAvT3BlbkFjdGlvbiBbMyAwIFIgL0ZpdF1gKTticmVhaztjYXNlYG9yaWdpbmFsYDpLKGAvT3BlbkFjdGlvbiBbMyAwIFIgL1hZWiBudWxsIG51bGwgMV1gKTticmVhaztkZWZhdWx0OnZhciBuPWBgK3VlO24uc3Vic3RyKG4ubGVuZ3RoLTEpPT09YCVgJiYodWU9cGFyc2VJbnQodWUpLzEwMCksdHlwZW9mIHVlPT1gbnVtYmVyYCYmSyhgL09wZW5BY3Rpb24gWzMgMCBSIC9YWVogbnVsbCBudWxsIGArRCh1ZSkrYF1gKX1zd2l0Y2goaGV8fD1gY29udGludW91c2AsaGUpe2Nhc2VgY29udGludW91c2A6SyhgL1BhZ2VMYXlvdXQgL09uZUNvbHVtbmApO2JyZWFrO2Nhc2Vgc2luZ2xlYDpLKGAvUGFnZUxheW91dCAvU2luZ2xlUGFnZWApO2JyZWFrO2Nhc2VgdHdvYDpjYXNlYHR3b2xlZnRgOksoYC9QYWdlTGF5b3V0IC9Ud29Db2x1bW5MZWZ0YCk7YnJlYWs7Y2FzZWB0d29yaWdodGA6SyhgL1BhZ2VMYXlvdXQgL1R3b0NvbHVtblJpZ2h0YCl9cGUmJksoYC9QYWdlTW9kZSAvYCtwZSksUGUucHVibGlzaChgcHV0Q2F0YWxvZ2ApLEsoYD4+YCksSyhgZW5kb2JqYCl9LHl0PXAuX19wcml2YXRlX18ucHV0VHJhaWxlcj1mdW5jdGlvbigpe0soYHRyYWlsZXJgKSxLKGA8PGApLEsoYC9TaXplIGArKEgrMSkpLEsoYC9Sb290IGArSCtgIDAgUmApLEsoYC9JbmZvIGArKEgtMSkrYCAwIFJgKSx1IT09bnVsbCYmSyhgL0VuY3J5cHQgYCtPdC5vaWQrYCAwIFJgKSxLKGAvSUQgWyA8YCtOK2A+IDxgK04rYD4gXWApLEsoYD4+YCl9LGJ0PXAuX19wcml2YXRlX18ucHV0SGVhZGVyPWZ1bmN0aW9uKCl7SyhgJVBERi1gK20pLEsoYCXCusOfwqzDoGApfSx4dD1wLl9fcHJpdmF0ZV9fLnB1dFhSZWY9ZnVuY3Rpb24oKXt2YXIgZT1gMDAwMDAwMDAwMGA7SyhgeHJlZmApLEsoYDAgYCsoSCsxKSksSyhgMDAwMDAwMDAwMCA2NTUzNSBmIGApO2Zvcih2YXIgdD0xO3Q8PUg7dCsrKXR5cGVvZiBVW3RdPT1gZnVuY3Rpb25gP0soKGUrVVt0XSgpKS5zbGljZSgtMTApK2AgMDAwMDAgbiBgKTpVW3RdPT09dm9pZCAwP0soYDAwMDAwMDAwMDAgMDAwMDAgbiBgKTpLKChlK1VbdF0pLnNsaWNlKC0xMCkrYCAwMDAwMCBuIGApfSxTdD1wLl9fcHJpdmF0ZV9fLmJ1aWxkRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZTtIPTAsRz0wLFc9W10sVT1bXSx0ZT1bXSxKZT1HZSgpLFllPUdlKCksYWUoVyksUGUucHVibGlzaChgYnVpbGREb2N1bWVudGApLGJ0KCksdHQoKSxmdW5jdGlvbigpe1BlLnB1Ymxpc2goYHB1dEFkZGl0aW9uYWxPYmplY3RzYCk7Zm9yKHZhciBlPTA7ZTx0ZS5sZW5ndGg7ZSsrKXt2YXIgdD10ZVtlXTtLZSh0Lm9iaklkLCEwKSxLKHQuY29udGVudCksSyhgZW5kb2JqYCl9UGUucHVibGlzaChgcG9zdFB1dEFkZGl0aW9uYWxPYmplY3RzYCl9KCksZT1bXSxmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB3ZSl3ZS5oYXNPd25Qcm9wZXJ0eShlKSYmKCExPT09ZHx8ITA9PT1kJiZmLmhhc093blByb3BlcnR5KGUpKSYmbnQod2VbZV0pfSgpLGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIGtlKWtlLmhhc093blByb3BlcnR5KGUpJiZvdChrZVtlXSl9KCksZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gSWUpSWUuaGFzT3duUHJvcGVydHkoZSkmJnJ0KEllW2VdKX0oKSxmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gRGUpRGUuaGFzT3duUHJvcGVydHkodCkmJihEZVt0XWluc3RhbmNlb2YgZGg/aXQoRGVbdF0pOkRlW3RdaW5zdGFuY2VvZiBmaCYmYXQoRGVbdF0sZSkpfShlKSxQZS5wdWJsaXNoKGBwdXRSZXNvdXJjZXNgKSxlLmZvckVhY2goc3QpLHN0KHtyZXNvdXJjZXNPaWQ6WWUsb2JqZWN0T2lkOjIqKjUzLTF9KSxQZS5wdWJsaXNoKGBwb3N0UHV0UmVzb3VyY2VzYCksdSE9PW51bGwmJihPdC5vaWQ9V2UoKSxLKGA8PGApLEsoYC9GaWx0ZXIgL1N0YW5kYXJkYCksSyhgL1YgYCtPdC52KSxLKGAvUiBgK090LnIpLEsoYC9VIDxgK090LnRvSGV4U3RyaW5nKE90LlUpK2A+YCksSyhgL08gPGArT3QudG9IZXhTdHJpbmcoT3QuTykrYD5gKSxLKGAvUCBgK090LlApLEsoYD4+YCksSyhgZW5kb2JqYCkpLF90KCksdnQoKTt2YXIgdD1HO3JldHVybiB4dCgpLHl0KCksSyhgc3RhcnR4cmVmYCksSyhgYCt0KSxLKGAlJUVPRmApLGFlKG5lW0JdKSxXLmpvaW4oYApgKX0sQ3Q9cC5fX3ByaXZhdGVfXy5nZXRCbG9iPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmxvYihbc2UoZSldLHt0eXBlOmBhcHBsaWNhdGlvbi9wZGZgfSl9LHd0PWZ1bmN0aW9uKGUpe2Zvcig7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCl9LFR0PWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5kb2N1bWVudCxyPW4uZG9jdW1lbnRFbGVtZW50LGk9bi5oZWFkLGE9bi5ib2R5O3JldHVybiBpfHwoaT1uLmNyZWF0ZUVsZW1lbnQoYGhlYWRgKSxyLmFwcGVuZENoaWxkKGkpKSxhfHwoYT1uLmNyZWF0ZUVsZW1lbnQoYGJvZHlgKSxyLmFwcGVuZENoaWxkKGEpKSx3dChpKSx3dChhKSwodD1uLmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCkpLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUoYGh0bWwsIGJvZHkgeyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IH0gaWZyYW1lIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYm9yZGVyOiAwO31gKSksaS5hcHBlbmRDaGlsZCh0KSx7ZG9jdW1lbnQ6bixib2R5OmF9fSxFdD1wLm91dHB1dD1wLl9fcHJpdmF0ZV9fLm91dHB1dD0oVWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godHlwZW9mKHR8fD17fSk9PWBzdHJpbmdgP3Q9e2ZpbGVuYW1lOnR9OnQuZmlsZW5hbWU9dC5maWxlbmFtZXx8YGdlbmVyYXRlZC5wZGZgLGUpe2Nhc2Ugdm9pZCAwOnJldHVybiBTdCgpO2Nhc2Vgc2F2ZWA6cC5zYXZlKHQuZmlsZW5hbWUpO2JyZWFrO2Nhc2VgYXJyYXlidWZmZXJgOnJldHVybiBzZShTdCgpKTtjYXNlYGJsb2JgOnJldHVybiBDdChTdCgpKTtjYXNlYGJsb2J1cmlgOmNhc2VgYmxvYnVybGA6aWYoUmguVVJMIT09dm9pZCAwJiZ0eXBlb2YgUmguVVJMLmNyZWF0ZU9iamVjdFVSTD09YGZ1bmN0aW9uYClyZXR1cm4gUmguVVJMJiZSaC5VUkwuY3JlYXRlT2JqZWN0VVJMKEN0KFN0KCkpKXx8dm9pZCAwO3poLndhcm4oYGJsb2J1cmwgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSwgYmVjYXVzZSBVUkwuY3JlYXRlT2JqZWN0VVJMIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLmApO2JyZWFrO2Nhc2VgZGF0YXVyaXN0cmluZ2A6Y2FzZWBkYXRhdXJsc3RyaW5nYDp2YXIgbj1gYCxyPVN0KCk7dHJ5e249SGgocil9Y2F0Y2h7bj1IaCh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQocikpKX1yZXR1cm5gZGF0YTphcHBsaWNhdGlvbi9wZGY7ZmlsZW5hbWU9YCtlbmNvZGVVUklDb21wb25lbnQodC5maWxlbmFtZSkrYDtiYXNlNjQsYCtuO2Nhc2VgcGRmb2JqZWN0bmV3d2luZG93YDppZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmgpPT09YFtvYmplY3QgV2luZG93XWApe3ZhciBpPWBodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9wZGZvYmplY3QvMi4xLjEvcGRmb2JqZWN0Lm1pbi5qc2AsYT0hdC5wZGZPYmplY3RVcmw7YXx8KGk9dC5wZGZPYmplY3RVcmwpO3ZhciBvPVJoLm9wZW4oKTtpZihvIT09bnVsbCl7dmFyIHM9VHQobyksYz1zLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYHNjcmlwdGApLGw9dGhpcztjLnNyYz1pLGEmJihjLmludGVncml0eT1gc2hhNTEyLTR6ZS9hOS80anF1K3RYOWRmT3FKWVN2eVlkNU02cXVtLzNIcENMcisvSnFmMHdoYzM3VlVia3BOR0hSNy84cFNuQ0Z3NDdUMWZtSXB3QlY3VXlTaDNnPT1gLGMuY3Jvc3NPcmlnaW49YGFub255bW91c2ApLGMub25sb2FkPWZ1bmN0aW9uKCl7by5QREZPYmplY3QuZW1iZWQobC5vdXRwdXQoYGRhdGF1cmxzdHJpbmdgKSx0KX0scy5ib2R5LmFwcGVuZENoaWxkKGMpfXJldHVybiBvfXRocm93IEVycm9yKGBUaGUgb3B0aW9uIHBkZm9iamVjdG5ld3dpbmRvdyBqdXN0IHdvcmtzIGluIGEgYnJvd3Nlci1lbnZpcm9ubWVudC5gKTtjYXNlYHBkZmpzbmV3d2luZG93YDppZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmgpPT09YFtvYmplY3QgV2luZG93XWApe3ZhciB1PXQucGRmSnNVcmx8fGBleGFtcGxlcy9QREYuanMvd2ViL3ZpZXdlci5odG1sYCxkPVJoLm9wZW4oKTtpZihkIT09bnVsbCl7dmFyIGY9VHQoZCksbT1mLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGlmcmFtZWApLGg9dS5pbmRleE9mKGA/YCk9PT0tMT9gP2A6YCZgO2w9dGhpcyxtLmlkPWBwZGZWaWV3ZXJgLG0ud2lkdGg9YDUwMHB4YCxtLmhlaWdodD1gNDAwcHhgLG0uc3JjPXUraCtgZmlsZT0mZG93bmxvYWROYW1lPWArZW5jb2RlVVJJQ29tcG9uZW50KHQuZmlsZW5hbWUpLG0ub25sb2FkPWZ1bmN0aW9uKCl7ZC5kb2N1bWVudC50aXRsZT10LmZpbGVuYW1lLG0uY29udGVudFdpbmRvdy5QREZWaWV3ZXJBcHBsaWNhdGlvbi5vcGVuKGwub3V0cHV0KGBibG9idXJsYCkpfSxmLmJvZHkuYXBwZW5kQ2hpbGQobSl9cmV0dXJuIGR9dGhyb3cgRXJyb3IoYFRoZSBvcHRpb24gcGRmanNuZXd3aW5kb3cganVzdCB3b3JrcyBpbiBhIGJyb3dzZXItZW52aXJvbm1lbnQuYCk7Y2FzZWBkYXRhdXJsbmV3d2luZG93YDppZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmgpIT09YFtvYmplY3QgV2luZG93XWApdGhyb3cgRXJyb3IoYFRoZSBvcHRpb24gZGF0YXVybG5ld3dpbmRvdyBqdXN0IHdvcmtzIGluIGEgYnJvd3Nlci1lbnZpcm9ubWVudC5gKTt2YXIgZz1SaC5vcGVuKCk7aWYoZyE9PW51bGwpe3ZhciBfPVR0KGcpLHY9Xy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBpZnJhbWVgKTt2LnNyYz10aGlzLm91dHB1dChgZGF0YXVyaXN0cmluZ2AsdCksXy5ib2R5LmFwcGVuZENoaWxkKHYpLGcuZG9jdW1lbnQudGl0bGU9dC5maWxlbmFtZX1pZihnfHx0eXBlb2Ygc2FmYXJpPmB1YClyZXR1cm4gZzticmVhaztjYXNlYGRhdGF1cmlgOmNhc2VgZGF0YXVybGA6cmV0dXJuIFJoLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5vdXRwdXQoYGRhdGF1cmlzdHJpbmdgLHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxVZS5mb289ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaChuKXt2YXIgZT1uLnN0YWNrfHxgYDt+ZS5pbmRleE9mKGAgYXQgYCkmJihlPWUuc3BsaXQoYCBhdCBgKVsxXSk7dmFyIHQ9YEVycm9yIGluIGZ1bmN0aW9uIGArZS5zcGxpdChgCmApWzBdLnNwbGl0KGA8YClbMF0rYDogYCtuLm1lc3NhZ2U7aWYoIVJoLmNvbnNvbGUpdGhyb3cgRXJyb3IodCk7UmguY29uc29sZS5lcnJvcih0LG4pLFJoLmFsZXJ0JiZhbGVydCh0KX19LFVlLmZvby5iYXI9VWUsVWUuZm9vKSxEdD1mdW5jdGlvbihlKXtyZXR1cm4hMD09PUFycmF5LmlzQXJyYXkoRmUpJiZGZS5pbmRleE9mKGUpPi0xfTtzd2l0Y2gocil7Y2FzZWBwdGA6YmU9MTticmVhaztjYXNlYG1tYDpiZT03Mi8yNS40O2JyZWFrO2Nhc2VgY21gOmJlPTcyLzIuNTQ7YnJlYWs7Y2FzZWBpbmA6YmU9NzI7YnJlYWs7Y2FzZWBweGA6YmU9RHQoYHB4X3NjYWxpbmdgKT09MT8uNzU6OTYvNzI7YnJlYWs7Y2FzZWBwY2A6Y2FzZWBlbWA6YmU9MTI7YnJlYWs7Y2FzZWBleGA6YmU9NjticmVhaztkZWZhdWx0OmlmKHR5cGVvZiByIT1gbnVtYmVyYCl0aHJvdyBFcnJvcihgSW52YWxpZCB1bml0OiBgK3IpO2JlPXJ9dmFyIE90PW51bGw7UigpLEYoKTt2YXIga3Q9cC5fX3ByaXZhdGVfXy5nZXRQYWdlSW5mbz1wLmdldFBhZ2VJbmZvPWZ1bmN0aW9uKGUpe2lmKGlzTmFOKGUpfHxlJTEhPTApdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmdldFBhZ2VJbmZvYCk7cmV0dXJue29iaklkOk5lW2VdLm9iaklkLHBhZ2VOdW1iZXI6ZSxwYWdlQ29udGV4dDpOZVtlXX19LEF0PXAuX19wcml2YXRlX18uZ2V0UGFnZUluZm9CeU9iaklkPWZ1bmN0aW9uKGUpe2lmKGlzTmFOKGUpfHxlJTEhPTApdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmdldFBhZ2VJbmZvQnlPYmpJZGApO2Zvcih2YXIgdCBpbiBOZSlpZihOZVt0XS5vYmpJZD09PWUpYnJlYWs7cmV0dXJuIGt0KHQpfSxqdD1wLl9fcHJpdmF0ZV9fLmdldEN1cnJlbnRQYWdlSW5mbz1wLmdldEN1cnJlbnRQYWdlSW5mbz1mdW5jdGlvbigpe3JldHVybntvYmpJZDpOZVtCXS5vYmpJZCxwYWdlTnVtYmVyOkIscGFnZUNvbnRleHQ6TmVbQl19fTtwLmFkZFBhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXN9LHAuc2V0UGFnZT1mdW5jdGlvbigpe3JldHVybiBtdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYWUuY2FsbCh0aGlzLG5lW0JdKSx0aGlzfSxwLmluc2VydFBhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkUGFnZSgpLHRoaXMubW92ZVBhZ2UoQixlKSx0aGlzfSxwLm1vdmVQYWdlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZihlPnQpe249bmVbZV0scj1OZVtlXTtmb3IodmFyIGk9ZTtpPnQ7aS0tKW5lW2ldPW5lW2ktMV0sTmVbaV09TmVbaS0xXTtuZVt0XT1uLE5lW3RdPXIsdGhpcy5zZXRQYWdlKHQpfWVsc2UgaWYoZTx0KXtuPW5lW2VdLHI9TmVbZV07Zm9yKHZhciBhPWU7YTx0O2ErKyluZVthXT1uZVthKzFdLE5lW2FdPU5lW2ErMV07bmVbdF09bixOZVt0XT1yLHRoaXMuc2V0UGFnZSh0KX1yZXR1cm4gdGhpc30scC5kZWxldGVQYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzfSxwLl9fcHJpdmF0ZV9fLnRleHQ9cC50ZXh0PWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGEsbyxzLGMsbCx1LGQscCxtLGg9KHJ8fD17fSkuc2NvcGV8fHRoaXM7aWYodHlwZW9mIGU9PWBudW1iZXJgJiZ0eXBlb2YgdD09YG51bWJlcmAmJih0eXBlb2Ygbj09YHN0cmluZ2B8fEFycmF5LmlzQXJyYXkobikpKXt2YXIgZz1uO249dCx0PWUsZT1nfWlmKGFyZ3VtZW50c1szXWluc3RhbmNlb2YgemU9PTA/KHM9YXJndW1lbnRzWzRdLGM9YXJndW1lbnRzWzVdLEEoZD1hcmd1bWVudHNbM10pPT09YG9iamVjdGAmJmQhPT1udWxsfHwodHlwZW9mIHM9PWBzdHJpbmdgJiYoYz1zLHM9bnVsbCksdHlwZW9mIGQ9PWBzdHJpbmdgJiYoYz1kLGQ9bnVsbCksdHlwZW9mIGQ9PWBudW1iZXJgJiYocz1kLGQ9bnVsbCkscj17ZmxhZ3M6ZCxhbmdsZTpzLGFsaWduOmN9KSk6KFQoYFRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVyIG9mIHRleHQoKSB3aXRoIGEgTWF0cml4IHZhbHVlYCksbT1pKSxpc05hTih0KXx8aXNOYU4obil8fGU9PW51bGwpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi50ZXh0YCk7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBoO3ZhciBfLHY9YGAseD10eXBlb2Ygci5saW5lSGVpZ2h0RmFjdG9yPT1gbnVtYmVyYD9yLmxpbmVIZWlnaHRGYWN0b3I6R3QsUz1oLmludGVybmFsLnNjYWxlRmFjdG9yO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGU9ZS5zcGxpdChgCWApLmpvaW4oQXJyYXkoci5UYWJMZW58fDkpLmpvaW4oYCBgKSksdXQoZSxkKX1mdW5jdGlvbiBFKGUpe2Zvcih2YXIgdCxuPWUuY29uY2F0KCkscj1bXSxpPW4ubGVuZ3RoO2ktLTspdHlwZW9mKHQ9bi5zaGlmdCgpKT09YHN0cmluZ2A/ci5wdXNoKHQpOkFycmF5LmlzQXJyYXkoZSkmJih0Lmxlbmd0aD09PTF8fHRbMV09PT12b2lkIDAmJnRbMl09PT12b2lkIDApP3IucHVzaCh0WzBdKTpyLnB1c2goW3RbMF0sdFsxXSx0WzJdXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRChlLHQpe3ZhciBuO2lmKHR5cGVvZiBlPT1gc3RyaW5nYCluPXQoZSlbMF07ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHIsaSxhPWUuY29uY2F0KCksbz1bXSxzPWEubGVuZ3RoO3MtLTspdHlwZW9mKHI9YS5zaGlmdCgpKT09YHN0cmluZ2A/by5wdXNoKHQocilbMF0pOkFycmF5LmlzQXJyYXkocikmJnR5cGVvZiByWzBdPT1gc3RyaW5nYCYmKGk9dChyWzBdLHJbMV0sclsyXSksby5wdXNoKFtpWzBdLGlbMV0saVsyXV0pKTtuPW99cmV0dXJuIG59dmFyIE89ITEsaj0hMDtpZih0eXBlb2YgZT09YHN0cmluZ2ApTz0hMDtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBNPWUuY29uY2F0KCk7bz1bXTtmb3IodmFyIE4sUD1NLmxlbmd0aDtQLS07KSh0eXBlb2YoTj1NLnNoaWZ0KCkpIT1gc3RyaW5nYHx8QXJyYXkuaXNBcnJheShOKSYmdHlwZW9mIE5bMF0hPWBzdHJpbmdgKSYmKGo9ITEpO089an1pZighMT09PU8pdGhyb3cgRXJyb3IoYFR5cGUgb2YgdGV4dCBtdXN0IGJlIHN0cmluZyBvciBBcnJheS4gImArZStgIiBpcyBub3QgcmVjb2duaXplZC5gKTt0eXBlb2YgZT09YHN0cmluZ2AmJihlPWUubWF0Y2goL1tccj9cbl0vKT9lLnNwbGl0KC9cclxufFxyfFxuL2cpOltlXSk7dmFyIEY9bGUvaC5pbnRlcm5hbC5zY2FsZUZhY3RvcixJPUYqKHgtMSk7c3dpdGNoKHIuYmFzZWxpbmUpe2Nhc2VgYm90dG9tYDpuLT1JO2JyZWFrO2Nhc2VgdG9wYDpuKz1GLUk7YnJlYWs7Y2FzZWBoYW5naW5nYDpuKz1GLTIqSTticmVhaztjYXNlYG1pZGRsZWA6bis9Ri8yLUl9aWYoKHU9ci5tYXhXaWR0aHx8MCk+MCYmKHR5cGVvZiBlPT1gc3RyaW5nYD9lPWguc3BsaXRUZXh0VG9TaXplKGUsdSk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgQXJyYXldYCYmKGU9ZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQoaC5zcGxpdFRleHRUb1NpemUodCx1KSl9LFtdKSkpLGE9e3RleHQ6ZSx4OnQseTpuLG9wdGlvbnM6cixtdXRleDp7cGRmRXNjYXBlOnV0LGFjdGl2ZUZvbnRLZXk6eWUsZm9udHM6d2UsYWN0aXZlRm9udFNpemU6bGV9fSxQZS5wdWJsaXNoKGBwcmVQcm9jZXNzVGV4dGAsYSksZT1hLnRleHQscz0ocj1hLm9wdGlvbnMpLmFuZ2xlLG0gaW5zdGFuY2VvZiB6ZT09MCYmcyYmdHlwZW9mIHM9PWBudW1iZXJgKXtzKj1NYXRoLlBJLzE4MCxyLnJvdGF0aW9uRGlyZWN0aW9uPT09MCYmKHM9LXMpLGI9PT15JiYocz0tcyk7dmFyIEw9TWF0aC5jb3MocyksUj1NYXRoLnNpbihzKTttPW5ldyB6ZShMLFIsLVIsTCwwLDApfWVsc2UgcyYmcyBpbnN0YW5jZW9mIHplJiYobT1zKTtiIT09eXx8bXx8KG09VmUpLChsPXIuY2hhclNwYWNlfHxzbikhPT12b2lkIDAmJih2Kz13KGsobCkpK2AgVGMKYCx0aGlzLnNldENoYXJTcGFjZSh0aGlzLmdldENoYXJTcGFjZSgpfHwwKSksKHA9ci5ob3Jpem9udGFsU2NhbGUpIT09dm9pZCAwJiYodis9dygxMDAqcCkrYCBUegpgKSxyLmxhbmc7dmFyIHo9LTEsQj1yLnJlbmRlcmluZ01vZGU9PT12b2lkIDA/ci5zdHJva2U6ci5yZW5kZXJpbmdNb2RlLFY9aC5pbnRlcm5hbC5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlQ29udGV4dDtzd2l0Y2goQil7Y2FzZSAwOmNhc2UhMTpjYXNlYGZpbGxgOno9MDticmVhaztjYXNlIDE6Y2FzZSEwOmNhc2Vgc3Ryb2tlYDp6PTE7YnJlYWs7Y2FzZSAyOmNhc2VgZmlsbFRoZW5TdHJva2VgOno9MjticmVhaztjYXNlIDM6Y2FzZWBpbnZpc2libGVgOno9MzticmVhaztjYXNlIDQ6Y2FzZWBmaWxsQW5kQWRkRm9yQ2xpcHBpbmdgOno9NDticmVhaztjYXNlIDU6Y2FzZWBzdHJva2VBbmRBZGRQYXRoRm9yQ2xpcHBpbmdgOno9NTticmVhaztjYXNlIDY6Y2FzZWBmaWxsVGhlblN0cm9rZUFuZEFkZFRvUGF0aEZvckNsaXBwaW5nYDp6PTY7YnJlYWs7Y2FzZSA3OmNhc2VgYWRkVG9QYXRoRm9yQ2xpcHBpbmdgOno9N312YXIgZWU9Vi51c2VkUmVuZGVyaW5nTW9kZT09PXZvaWQgMD8tMTpWLnVzZWRSZW5kZXJpbmdNb2RlO3o9PT0tMT9lZSE9PS0xJiYodis9YDAgVHIKYCk6dis9eitgIFRyCmAseiE9PS0xJiYoVi51c2VkUmVuZGVyaW5nTW9kZT16KSxjPXIuYWxpZ258fGBsZWZ0YDt2YXIgSCxVPWxlKngsVz1oLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCksRz13ZVt5ZV07bD1yLmNoYXJTcGFjZXx8c24sdT1yLm1heFdpZHRofHwwLGQ9T2JqZWN0LmFzc2lnbih7YXV0b2VuY29kZTohMCxub0JPTTohMH0sci5mbGFncyk7dmFyIHRlPVtdLG5lPWZ1bmN0aW9uKGUpe3JldHVybiBoLmdldFN0cmluZ1VuaXRXaWR0aChlLHtmb250OkcsY2hhclNwYWNlOmwsZm9udFNpemU6bGUsZG9LZXJuaW5nOiExfSkqbGUvU307aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgQXJyYXldYCl7dmFyIHJlO289RShlKSxjIT09YGxlZnRgJiYoSD1vLm1hcChuZSkpO3ZhciBpZSxhZT0wO2lmKGM9PT1gcmlnaHRgKXt0LT1IWzBdLGU9W10sUD1vLmxlbmd0aDtmb3IodmFyIG9lPTA7b2U8UDtvZSsrKW9lPT09MD8oaWU9UXQodCkscmU9JHQobikpOihpZT1rKGFlLUhbb2VdKSxyZT0tVSksZS5wdXNoKFtvW29lXSxpZSxyZV0pLGFlPUhbb2VdfWVsc2UgaWYoYz09PWBjZW50ZXJgKXt0LT1IWzBdLzIsZT1bXSxQPW8ubGVuZ3RoO2Zvcih2YXIgc2U9MDtzZTxQO3NlKyspc2U9PT0wPyhpZT1RdCh0KSxyZT0kdChuKSk6KGllPWsoKGFlLUhbc2VdKS8yKSxyZT0tVSksZS5wdXNoKFtvW3NlXSxpZSxyZV0pLGFlPUhbc2VdfWVsc2UgaWYoYz09PWBsZWZ0YCl7ZT1bXSxQPW8ubGVuZ3RoO2Zvcih2YXIgY2U9MDtjZTxQO2NlKyspZS5wdXNoKG9bY2VdKX1lbHNlIGlmKGM9PT1ganVzdGlmeWAmJkcuZW5jb2Rpbmc9PT1gSWRlbnRpdHktSGApe2U9W10sUD1vLmxlbmd0aCx1PXU9PT0wP1c6dTtmb3IodmFyIHVlPTAsZGU9MDtkZTxQO2RlKyspaWYocmU9ZGU9PT0wPyR0KG4pOi1VLGllPWRlPT09MD9RdCh0KTp1ZSxkZTxQLTEpe3ZhciBwZT1rKCh1LUhbZGVdKS8ob1tkZV0uc3BsaXQoYCBgKS5sZW5ndGgtMSkpLG1lPW9bZGVdLnNwbGl0KGAgYCk7ZS5wdXNoKFttZVswXStgIGAsaWUscmVdKSx1ZT0wO2Zvcih2YXIgaGU9MTtoZTxtZS5sZW5ndGg7aGUrKyl7dmFyIGdlPShuZShtZVtoZS0xXStgIGArbWVbaGVdKS1uZShtZVtoZV0pKSpTK3BlO2hlPT1tZS5sZW5ndGgtMT9lLnB1c2goW21lW2hlXSxnZSwwXSk6ZS5wdXNoKFttZVtoZV0rYCBgLGdlLDBdKSx1ZS09Z2V9fWVsc2UgZS5wdXNoKFtvW2RlXSxpZSxyZV0pO2UucHVzaChbYGAsdWUsMF0pfWVsc2V7aWYoYyE9PWBqdXN0aWZ5YCl0aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkIGFsaWdubWVudCBvcHRpb24sIHVzZSAibGVmdCIsICJjZW50ZXIiLCAicmlnaHQiIG9yICJqdXN0aWZ5Ii5gKTtmb3IoZT1bXSxQPW8ubGVuZ3RoLHU9dT09PTA/Vzp1LGRlPTA7ZGU8UDtkZSsrKXtyZT1kZT09PTA/JHQobik6LVUsaWU9ZGU9PT0wP1F0KHQpOjA7dmFyIF9lPW9bZGVdLnNwbGl0KGAgYCkubGVuZ3RoLTEsdmU9X2U+MD8odS1IW2RlXSkvX2U6MDtkZTxQLTE/dGUucHVzaCh3KGsodmUpKSk6dGUucHVzaCgwKSxlLnB1c2goW29bZGVdLGllLHJlXSl9fX0hMD09PSh0eXBlb2Ygci5SMkw9PWBib29sZWFuYD9yLlIyTDpmZSkmJihlPUQoZSxmdW5jdGlvbihlLHQsbil7cmV0dXJuW2Uuc3BsaXQoYGApLnJldmVyc2UoKS5qb2luKGBgKSx0LG5dfSkpLGE9e3RleHQ6ZSx4OnQseTpuLG9wdGlvbnM6cixtdXRleDp7cGRmRXNjYXBlOnV0LGFjdGl2ZUZvbnRLZXk6eWUsZm9udHM6d2UsYWN0aXZlRm9udFNpemU6bGV9fSxQZS5wdWJsaXNoKGBwb3N0UHJvY2Vzc1RleHRgLGEpLGU9YS50ZXh0LF89YS5tdXRleC5pc0hleHx8ITE7dmFyIGJlPXdlW3llXS5lbmNvZGluZztiZSE9PWBXaW5BbnNpRW5jb2RpbmdgJiZiZSE9PWBTdGFuZGFyZEVuY29kaW5nYHx8KGU9RChlLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bQyhlKSx0LG5dfSkpLG89RShlKSxlPVtdO2Zvcih2YXIgeGUsU2UsQ2UsVGU9KyEhQXJyYXkuaXNBcnJheShvWzBdKSxFZT1gYCxEZT1mdW5jdGlvbihlLHQsbil7dmFyIGk9YGA7cmV0dXJuIG4gaW5zdGFuY2VvZiB6ZT8obj10eXBlb2Ygci5hbmdsZT09YG51bWJlcmA/QmUobixuZXcgemUoMSwwLDAsMSxlLHQpKTpCZShuZXcgemUoMSwwLDAsMSxlLHQpLG4pLGI9PT15JiYobj1CZShuZXcgemUoMSwwLDAsLTEsMCwwKSxuKSksaT1uLmpvaW4oYCBgKStgIFRtCmApOmk9dyhlKStgIGArdyh0KStgIFRkCmAsaX0sT2U9MDtPZTxvLmxlbmd0aDtPZSsrKXtzd2l0Y2goRWU9YGAsVGUpe2Nhc2UgMTpDZT0oXz9gPGA6YChgKStvW09lXVswXSsoXz9gPmA6YClgKSx4ZT1wYXJzZUZsb2F0KG9bT2VdWzFdKSxTZT1wYXJzZUZsb2F0KG9bT2VdWzJdKTticmVhaztjYXNlIDA6Q2U9KF8/YDxgOmAoYCkrb1tPZV0rKF8/YD5gOmApYCkseGU9UXQodCksU2U9JHQobil9dGUhPT12b2lkIDAmJnRlW09lXSE9PXZvaWQgMCYmKEVlPXRlW09lXStgIFR3CmApLE9lPT09MD9lLnB1c2goRWUrRGUoeGUsU2UsbSkrQ2UpOlRlPT09MD9lLnB1c2goRWUrQ2UpOlRlPT09MSYmZS5wdXNoKEVlK0RlKHhlLFNlLG0pK0NlKX1lPVRlPT09MD9lLmpvaW4oYCBUagpUKiBgKTplLmpvaW4oYCBUagpgKSxlKz1gIFRqCmA7dmFyIGtlPWBCVAovYDtyZXR1cm4ga2UrPXllK2AgYCtsZStgIFRmCmAsa2UrPXcobGUqeCkrYCBUTApgLGtlKz1hbitgCmAsa2UrPXYsa2UrPWUsSyhrZSs9YEVUYCksZlt5ZV09ITAsaH07dmFyIE10PXAuX19wcml2YXRlX18uY2xpcD1wLmNsaXA9ZnVuY3Rpb24oZSl7cmV0dXJuIEsoZT09PWBldmVub2RkYD9gVypgOmBXYCksdGhpc307cC5jbGlwRXZlbk9kZD1mdW5jdGlvbigpe3JldHVybiBNdChgZXZlbm9kZGApfSxwLl9fcHJpdmF0ZV9fLmRpc2NhcmRQYXRoPXAuZGlzY2FyZFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gSyhgbmApLHRoaXN9O3ZhciBOdD1wLl9fcHJpdmF0ZV9fLmlzVmFsaWRTdHlsZT1mdW5jdGlvbihlKXt2YXIgdD0hMTtyZXR1cm5bdm9pZCAwLG51bGwsYFNgLGBEYCxgRmAsYERGYCxgRkRgLGBmYCxgZipgLGBCYCxgQipgLGBuYF0uaW5kZXhPZihlKSE9PS0xJiYodD0hMCksdH07cC5fX3ByaXZhdGVfXy5zZXREZWZhdWx0UGF0aE9wZXJhdGlvbj1wLnNldERlZmF1bHRQYXRoT3BlcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBOdChlKSYmKGw9ZSksdGhpc307dmFyIFB0PXAuX19wcml2YXRlX18uZ2V0U3R5bGU9cC5nZXRTdHlsZT1mdW5jdGlvbihlKXt2YXIgdD1sO3N3aXRjaChlKXtjYXNlYERgOmNhc2VgU2A6dD1gU2A7YnJlYWs7Y2FzZWBGYDp0PWBmYDticmVhaztjYXNlYEZEYDpjYXNlYERGYDp0PWBCYDticmVhaztjYXNlYGZgOmNhc2VgZipgOmNhc2VgQmA6Y2FzZWBCKmA6dD1lfXJldHVybiB0fSxGdD1wLmNsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIEsoYGhgKSx0aGlzfTtwLnN0cm9rZT1mdW5jdGlvbigpe3JldHVybiBLKGBTYCksdGhpc30scC5maWxsPWZ1bmN0aW9uKGUpe3JldHVybiBJdChgZmAsZSksdGhpc30scC5maWxsRXZlbk9kZD1mdW5jdGlvbihlKXtyZXR1cm4gSXQoYGYqYCxlKSx0aGlzfSxwLmZpbGxTdHJva2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEl0KGBCYCxlKSx0aGlzfSxwLmZpbGxTdHJva2VFdmVuT2RkPWZ1bmN0aW9uKGUpe3JldHVybiBJdChgQipgLGUpLHRoaXN9O3ZhciBJdD1mdW5jdGlvbihlLHQpe0EodCk9PT1gb2JqZWN0YD96dCh0LGUpOksoZSl9LEx0PWZ1bmN0aW9uKGUpe2U9PT1udWxsfHxiPT09eSYmZT09PXZvaWQgMHx8KGU9UHQoZSksSyhlKSl9O2Z1bmN0aW9uIFJ0KGUsdCxuLHIsaSl7dmFyIGE9bmV3IGZoKHR8fHRoaXMuYm91bmRpbmdCb3gsbnx8dGhpcy54U3RlcCxyfHx0aGlzLnlTdGVwLHRoaXMuZ1N0YXRlLGl8fHRoaXMubWF0cml4KTtyZXR1cm4gYS5zdHJlYW09dGhpcy5zdHJlYW0sSGUoZStgJCRgKyB0aGlzLmNsb25lSW5kZXgrKytgJCRgLGEpLGF9dmFyIHp0PWZ1bmN0aW9uKGUsdCl7dmFyIG49T2VbZS5rZXldLHI9RGVbbl07aWYociBpbnN0YW5jZW9mIGRoKUsoYHFgKSxLKEJ0KHQpKSxyLmdTdGF0ZSYmcC5zZXRHU3RhdGUoci5nU3RhdGUpLEsoZS5tYXRyaXgudG9TdHJpbmcoKStgIGNtYCksSyhgL2ArbitgIHNoYCksSyhgUWApO2Vsc2UgaWYociBpbnN0YW5jZW9mIGZoKXt2YXIgaT1uZXcgemUoMSwwLDAsLTEsMCxDbigpKTtlLm1hdHJpeCYmKGk9aS5tdWx0aXBseShlLm1hdHJpeHx8VmUpLG49UnQuY2FsbChyLGUua2V5LGUuYm91bmRpbmdCb3gsZS54U3RlcCxlLnlTdGVwLGkpLmlkKSxLKGBxYCksSyhgL1BhdHRlcm4gY3NgKSxLKGAvYCtuK2Agc2NuYCksci5nU3RhdGUmJnAuc2V0R1N0YXRlKHIuZ1N0YXRlKSxLKHQpLEsoYFFgKX19LEJ0PWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlYGZgOmNhc2VgRmA6Y2FzZWBuYDpyZXR1cm5gVyBuYDtjYXNlYGYqYDpyZXR1cm5gVyogbmA7Y2FzZWBCYDpjYXNlYFNgOnJldHVybmBXIFNgO2Nhc2VgQipgOnJldHVybmBXKiBTYH19LFZ0PXAubW92ZVRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEsodyhrKGUpKStgIGArdyhqKHQpKStgIG1gKSx0aGlzfSxIdD1wLmxpbmVUbz1mdW5jdGlvbihlLHQpe3JldHVybiBLKHcoayhlKSkrYCBgK3coaih0KSkrYCBsYCksdGhpc30sVXQ9cC5jdXJ2ZVRvPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXtyZXR1cm4gSyhbdyhrKGUpKSx3KGoodCkpLHcoayhuKSksdyhqKHIpKSx3KGsoaSkpLHcoaihhKSksYGNgXS5qb2luKGAgYCkpLHRoaXN9O3AuX19wcml2YXRlX18ubGluZT1wLmxpbmU9ZnVuY3Rpb24oZSx0LG4scixpKXtpZihpc05hTihlKXx8aXNOYU4odCl8fGlzTmFOKG4pfHxpc05hTihyKXx8IU50KGkpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYubGluZWApO3JldHVybiBiPT09dj90aGlzLmxpbmVzKFtbbi1lLHItdF1dLGUsdCxbMSwxXSxpfHxgU2ApOnRoaXMubGluZXMoW1tuLWUsci10XV0sZSx0LFsxLDFdKS5zdHJva2UoKX0scC5fX3ByaXZhdGVfXy5saW5lcz1wLmxpbmVzPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbyxzLGMsbCx1LGQsZixwLG0saCxnLF87aWYodHlwZW9mIGU9PWBudW1iZXJgJiYoXz1uLG49dCx0PWUsZT1fKSxyfHw9WzEsMV0sYXx8PSExLGlzTmFOKHQpfHxpc05hTihuKXx8IUFycmF5LmlzQXJyYXkoZSl8fCFBcnJheS5pc0FycmF5KHIpfHwhTnQoaSl8fHR5cGVvZiBhIT1gYm9vbGVhbmApdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5saW5lc2ApO2ZvcihWdCh0LG4pLG89clswXSxzPXJbMV0sbD1lLmxlbmd0aCxoPXQsZz1uLGM9MDtjPGw7YysrKSh1PWVbY10pLmxlbmd0aD09PTI/KGg9dVswXSpvK2gsZz11WzFdKnMrZyxIdChoLGcpKTooZD11WzBdKm8raCxmPXVbMV0qcytnLHA9dVsyXSpvK2gsbT11WzNdKnMrZyxoPXVbNF0qbytoLGc9dVs1XSpzK2csVXQoZCxmLHAsbSxoLGcpKTtyZXR1cm4gYSYmRnQoKSxMdChpKSx0aGlzfSxwLnBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF0scj1uLmM7c3dpdGNoKG4ub3Ape2Nhc2VgbWA6VnQoclswXSxyWzFdKTticmVhaztjYXNlYGxgOkh0KHJbMF0sclsxXSk7YnJlYWs7Y2FzZWBjYDpVdC5hcHBseSh0aGlzLHIpO2JyZWFrO2Nhc2VgaGA6RnQoKX19cmV0dXJuIHRoaXN9LHAuX19wcml2YXRlX18ucmVjdD1wLnJlY3Q9ZnVuY3Rpb24oZSx0LG4scixpKXtpZihpc05hTihlKXx8aXNOYU4odCl8fGlzTmFOKG4pfHxpc05hTihyKXx8IU50KGkpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYucmVjdGApO3JldHVybiBiPT09diYmKHI9LXIpLEsoW3coayhlKSksdyhqKHQpKSx3KGsobikpLHcoayhyKSksYHJlYF0uam9pbihgIGApKSxMdChpKSx0aGlzfSxwLl9fcHJpdmF0ZV9fLnRyaWFuZ2xlPXAudHJpYW5nbGU9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyl7aWYoaXNOYU4oZSl8fGlzTmFOKHQpfHxpc05hTihuKXx8aXNOYU4ocil8fGlzTmFOKGkpfHxpc05hTihhKXx8IU50KG8pKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYudHJpYW5nbGVgKTtyZXR1cm4gdGhpcy5saW5lcyhbW24tZSxyLXRdLFtpLW4sYS1yXSxbZS1pLHQtYV1dLGUsdCxbMSwxXSxvLCEwKSx0aGlzfSxwLl9fcHJpdmF0ZV9fLnJvdW5kZWRSZWN0PXAucm91bmRlZFJlY3Q9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyl7aWYoaXNOYU4oZSl8fGlzTmFOKHQpfHxpc05hTihuKXx8aXNOYU4ocil8fGlzTmFOKGkpfHxpc05hTihhKXx8IU50KG8pKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYucm91bmRlZFJlY3RgKTt2YXIgcz00LzMqKE1hdGguU1FSVDItMSk7cmV0dXJuIGk9TWF0aC5taW4oaSwuNSpuKSxhPU1hdGgubWluKGEsLjUqciksdGhpcy5saW5lcyhbW24tMippLDBdLFtpKnMsMCxpLGEtYSpzLGksYV0sWzAsci0yKmFdLFswLGEqcywtaSpzLGEsLWksYV0sWzIqaS1uLDBdLFstaSpzLDAsLWksLWEqcywtaSwtYV0sWzAsMiphLXJdLFswLC1hKnMsaSpzLC1hLGksLWFdXSxlK2ksdCxbMSwxXSxvLCEwKSx0aGlzfSxwLl9fcHJpdmF0ZV9fLmVsbGlwc2U9cC5lbGxpcHNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoaXNOYU4oZSl8fGlzTmFOKHQpfHxpc05hTihuKXx8aXNOYU4ocil8fCFOdChpKSl0aHJvdyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmVsbGlwc2VgKTt2YXIgYT00LzMqKE1hdGguU1FSVDItMSkqbixvPTQvMyooTWF0aC5TUVJUMi0xKSpyO3JldHVybiBWdChlK24sdCksVXQoZStuLHQtbyxlK2EsdC1yLGUsdC1yKSxVdChlLWEsdC1yLGUtbix0LW8sZS1uLHQpLFV0KGUtbix0K28sZS1hLHQrcixlLHQrciksVXQoZSthLHQrcixlK24sdCtvLGUrbix0KSxMdChpKSx0aGlzfSxwLl9fcHJpdmF0ZV9fLmNpcmNsZT1wLmNpcmNsZT1mdW5jdGlvbihlLHQsbixyKXtpZihpc05hTihlKXx8aXNOYU4odCl8fGlzTmFOKG4pfHwhTnQocikpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jaXJjbGVgKTtyZXR1cm4gdGhpcy5lbGxpcHNlKGUsdCxuLG4scil9LHAuc2V0Rm9udD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4mJih0PUModCxuKSkseWU9Z3QoZSx0LHtkaXNhYmxlV2FybmluZzohMX0pLHRoaXN9O3ZhciBXdD1wLl9fcHJpdmF0ZV9fLmdldEZvbnQ9cC5nZXRGb250PWZ1bmN0aW9uKCl7cmV0dXJuIHdlW2d0LmFwcGx5KHAsYXJndW1lbnRzKV19O3AuX19wcml2YXRlX18uZ2V0Rm9udExpc3Q9cC5nZXRGb250TGlzdD1mdW5jdGlvbigpe3ZhciBlLHQsbj17fTtmb3IoZSBpbiBUZSlpZihUZS5oYXNPd25Qcm9wZXJ0eShlKSlmb3IodCBpbiBuW2VdPVtdLFRlW2VdKVRlW2VdLmhhc093blByb3BlcnR5KHQpJiZuW2VdLnB1c2godCk7cmV0dXJuIG59LHAuYWRkRm9udD1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhPVtgU3RhbmRhcmRFbmNvZGluZ2AsYE1hY1JvbWFuRW5jb2RpbmdgLGBJZGVudGl0eS1IYCxgV2luQW5zaUVuY29kaW5nYF07cmV0dXJuIGFyZ3VtZW50c1szXSYmYS5pbmRleE9mKGFyZ3VtZW50c1szXSkhPT0tMT9pPWFyZ3VtZW50c1szXTphcmd1bWVudHNbM10mJmEuaW5kZXhPZihhcmd1bWVudHNbM10pPT0tMSYmKG49QyhuLHIpKSxsdC5jYWxsKHRoaXMsZSx0LG4saXx8PWBJZGVudGl0eS1IYCl9O3ZhciBHdCxLdD1lLmxpbmVXaWR0aHx8LjIwMDAyNSxxdD1wLl9fcHJpdmF0ZV9fLmdldExpbmVXaWR0aD1wLmdldExpbmVXaWR0aD1mdW5jdGlvbigpe3JldHVybiBLdH0sSnQ9cC5fX3ByaXZhdGVfXy5zZXRMaW5lV2lkdGg9cC5zZXRMaW5lV2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0PWUsSyh3KGsoZSkpK2Agd2ApLHRoaXN9O3AuX19wcml2YXRlX18uc2V0TGluZURhc2g9Wi5BUEkuc2V0TGluZURhc2g9Wi5BUEkuc2V0TGluZURhc2hQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7aWYoZXx8PVtdLHR8fD0wLGlzTmFOKHQpfHwhQXJyYXkuaXNBcnJheShlKSl0aHJvdyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLnNldExpbmVEYXNoYCk7cmV0dXJuIGU9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHcoayhlKSl9KS5qb2luKGAgYCksdD13KGsodCkpLEsoYFtgK2UrYF0gYCt0K2AgZGApLHRoaXN9O3ZhciBZdD1wLl9fcHJpdmF0ZV9fLmdldExpbmVIZWlnaHQ9cC5nZXRMaW5lSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIGxlKkd0fTtwLl9fcHJpdmF0ZV9fLmdldExpbmVIZWlnaHQ9cC5nZXRMaW5lSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIGxlKkd0fTt2YXIgWHQ9cC5fX3ByaXZhdGVfXy5zZXRMaW5lSGVpZ2h0RmFjdG9yPXAuc2V0TGluZUhlaWdodEZhY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mKGV8fD0xLjE1KT09YG51bWJlcmAmJihHdD1lKSx0aGlzfSxadD1wLl9fcHJpdmF0ZV9fLmdldExpbmVIZWlnaHRGYWN0b3I9cC5nZXRMaW5lSGVpZ2h0RmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEd0fTtYdChlLmxpbmVIZWlnaHQpO3ZhciBRdD1wLl9fcHJpdmF0ZV9fLmdldEhvcml6b250YWxDb29yZGluYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBrKGUpfSwkdD1wLl9fcHJpdmF0ZV9fLmdldFZlcnRpY2FsQ29vcmRpbmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYj09PXk/ZTpOZVtCXS5tZWRpYUJveC50b3BSaWdodFktTmVbQl0ubWVkaWFCb3guYm90dG9tTGVmdFktayhlKX0sZW49cC5fX3ByaXZhdGVfXy5nZXRIb3Jpem9udGFsQ29vcmRpbmF0ZVN0cmluZz1wLmdldEhvcml6b250YWxDb29yZGluYXRlU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB3KFF0KGUpKX0sdG49cC5fX3ByaXZhdGVfXy5nZXRWZXJ0aWNhbENvb3JkaW5hdGVTdHJpbmc9cC5nZXRWZXJ0aWNhbENvb3JkaW5hdGVTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHcoJHQoZSkpfSxubj1lLnN0cm9rZUNvbG9yfHxgMCBHYDtwLl9fcHJpdmF0ZV9fLmdldFN0cm9rZUNvbG9yPXAuZ2V0RHJhd0NvbG9yPWZ1bmN0aW9uKCl7cmV0dXJuIFhlKG5uKX0scC5fX3ByaXZhdGVfXy5zZXRTdHJva2VDb2xvcj1wLnNldERyYXdDb2xvcj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbm49WmUoe2NoMTplLGNoMjp0LGNoMzpuLGNoNDpyLHBkZkNvbG9yVHlwZTpgZHJhd2AscHJlY2lzaW9uOjJ9KSxLKG5uKSx0aGlzfTt2YXIgcm49ZS5maWxsQ29sb3J8fGAwIGdgO3AuX19wcml2YXRlX18uZ2V0RmlsbENvbG9yPXAuZ2V0RmlsbENvbG9yPWZ1bmN0aW9uKCl7cmV0dXJuIFhlKHJuKX0scC5fX3ByaXZhdGVfXy5zZXRGaWxsQ29sb3I9cC5zZXRGaWxsQ29sb3I9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHJuPVplKHtjaDE6ZSxjaDI6dCxjaDM6bixjaDQ6cixwZGZDb2xvclR5cGU6YGZpbGxgLHByZWNpc2lvbjoyfSksSyhybiksdGhpc307dmFyIGFuPWUudGV4dENvbG9yfHxgMCBnYCxvbj1wLl9fcHJpdmF0ZV9fLmdldFRleHRDb2xvcj1wLmdldFRleHRDb2xvcj1mdW5jdGlvbigpe3JldHVybiBYZShhbil9O3AuX19wcml2YXRlX18uc2V0VGV4dENvbG9yPXAuc2V0VGV4dENvbG9yPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBhbj1aZSh7Y2gxOmUsY2gyOnQsY2gzOm4sY2g0OnIscGRmQ29sb3JUeXBlOmB0ZXh0YCxwcmVjaXNpb246M30pLHRoaXN9O3ZhciBzbj1lLmNoYXJTcGFjZSxjbj1wLl9fcHJpdmF0ZV9fLmdldENoYXJTcGFjZT1wLmdldENoYXJTcGFjZT1mdW5jdGlvbigpe3JldHVybiBwYXJzZUZsb2F0KHNufHwwKX07cC5fX3ByaXZhdGVfXy5zZXRDaGFyU3BhY2U9cC5zZXRDaGFyU3BhY2U9ZnVuY3Rpb24oZSl7aWYoaXNOYU4oZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLnNldENoYXJTcGFjZWApO3JldHVybiBzbj1lLHRoaXN9O3ZhciBsbj0wO3AuQ2FwSm9pblN0eWxlcz17MDowLGJ1dHQ6MCxidXQ6MCxtaXRlcjowLDE6MSxyb3VuZDoxLHJvdW5kZWQ6MSxjaXJjbGU6MSwyOjIscHJvamVjdGluZzoyLHByb2plY3Q6MixzcXVhcmU6MixiZXZlbDoyfSxwLl9fcHJpdmF0ZV9fLnNldExpbmVDYXA9cC5zZXRMaW5lQ2FwPWZ1bmN0aW9uKGUpe3ZhciB0PXAuQ2FwSm9pblN0eWxlc1tlXTtpZih0PT09dm9pZCAwKXRocm93IEVycm9yKGBMaW5lIGNhcCBzdHlsZSBvZiAnYCtlK2AnIGlzIG5vdCByZWNvZ25pemVkLiBTZWUgb3IgZXh0ZW5kIC5DYXBKb2luU3R5bGVzIHByb3BlcnR5IGZvciB2YWxpZCBzdHlsZXNgKTtyZXR1cm4gbG49dCxLKHQrYCBKYCksdGhpc307dmFyIHVuPTA7cC5fX3ByaXZhdGVfXy5zZXRMaW5lSm9pbj1wLnNldExpbmVKb2luPWZ1bmN0aW9uKGUpe3ZhciB0PXAuQ2FwSm9pblN0eWxlc1tlXTtpZih0PT09dm9pZCAwKXRocm93IEVycm9yKGBMaW5lIGpvaW4gc3R5bGUgb2YgJ2ArZStgJyBpcyBub3QgcmVjb2duaXplZC4gU2VlIG9yIGV4dGVuZCAuQ2FwSm9pblN0eWxlcyBwcm9wZXJ0eSBmb3IgdmFsaWQgc3R5bGVzYCk7cmV0dXJuIHVuPXQsSyh0K2AgamApLHRoaXN9LHAuX19wcml2YXRlX18uc2V0TGluZU1pdGVyTGltaXQ9cC5fX3ByaXZhdGVfXy5zZXRNaXRlckxpbWl0PXAuc2V0TGluZU1pdGVyTGltaXQ9cC5zZXRNaXRlckxpbWl0PWZ1bmN0aW9uKGUpe2lmKGV8fD0wLGlzTmFOKGUpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5zZXRMaW5lTWl0ZXJMaW1pdGApO3JldHVybiBLKHcoayhlKSkrYCBNYCksdGhpc30scC5HU3RhdGU9bGgscC5zZXRHU3RhdGU9ZnVuY3Rpb24oZSl7KGU9dHlwZW9mIGU9PWBzdHJpbmdgP2tlW0FlW2VdXTpkbihudWxsLGUpKS5lcXVhbHMoamUpfHwoSyhgL2ArZS5pZCtgIGdzYCksamU9ZSl9O3ZhciBkbj1mdW5jdGlvbihlLHQpe2lmKCFlfHwhQWVbZV0pe3ZhciBuPSExO2Zvcih2YXIgciBpbiBrZSlpZihrZS5oYXNPd25Qcm9wZXJ0eShyKSYma2Vbcl0uZXF1YWxzKHQpKXtuPSEwO2JyZWFrfWlmKG4pdD1rZVtyXTtlbHNle3ZhciBpPWBHU2ArKE9iamVjdC5rZXlzKGtlKS5sZW5ndGgrMSkudG9TdHJpbmcoMTApO2tlW2ldPXQsdC5pZD1pfXJldHVybiBlJiYoQWVbZV09dC5pZCksUGUucHVibGlzaChgYWRkR1N0YXRlYCx0KSx0fX07cC5hZGRHU3RhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZG4oZSx0KSx0aGlzfSxwLnNhdmVHcmFwaGljc1N0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIEsoYHFgKSxFZS5wdXNoKHtrZXk6eWUsc2l6ZTpsZSxjb2xvcjphbn0pLHRoaXN9LHAucmVzdG9yZUdyYXBoaWNzU3RhdGU9ZnVuY3Rpb24oKXtLKGBRYCk7dmFyIGU9RWUucG9wKCk7cmV0dXJuIHllPWUua2V5LGxlPWUuc2l6ZSxhbj1lLmNvbG9yLGplPW51bGwsdGhpc30scC5zZXRDdXJyZW50VHJhbnNmb3JtYXRpb25NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIEsoZS50b1N0cmluZygpK2AgY21gKSx0aGlzfSxwLmNvbW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEsoYCNgK2UpLHRoaXN9O3ZhciBmbj1mdW5jdGlvbihlLHQpe3ZhciBuPWV8fDA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHhgLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufSxzZXQ6ZnVuY3Rpb24oZSl7aXNOYU4oZSl8fChuPXBhcnNlRmxvYXQoZSkpfX0pO3ZhciByPXR8fDA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHlgLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByfSxzZXQ6ZnVuY3Rpb24oZSl7aXNOYU4oZSl8fChyPXBhcnNlRmxvYXQoZSkpfX0pO3ZhciBpPWBwdGA7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGB0eXBlYCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sc2V0OmZ1bmN0aW9uKGUpe2k9ZS50b1N0cmluZygpfX0pLHRoaXN9LHBuPWZ1bmN0aW9uKGUsdCxuLHIpe2ZuLmNhbGwodGhpcyxlLHQpLHRoaXMudHlwZT1gcmVjdGA7dmFyIGk9bnx8MDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgd2Ase2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHNldDpmdW5jdGlvbihlKXtpc05hTihlKXx8KGk9cGFyc2VGbG9hdChlKSl9fSk7dmFyIGE9cnx8MDtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGhgLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhfSxzZXQ6ZnVuY3Rpb24oZSl7aXNOYU4oZSl8fChhPXBhcnNlRmxvYXQoZSkpfX0pLHRoaXN9LG1uPWZ1bmN0aW9uKCl7dGhpcy5wYWdlPU1lLHRoaXMuY3VycmVudFBhZ2U9Qix0aGlzLnBhZ2VzPW5lLnNsaWNlKDApLHRoaXMucGFnZXNDb250ZXh0PU5lLnNsaWNlKDApLHRoaXMueD14ZSx0aGlzLnk9U2UsdGhpcy5tYXRyaXg9Q2UsdGhpcy53aWR0aD1fbihCKSx0aGlzLmhlaWdodD15bihCKSx0aGlzLm91dHB1dERlc3RpbmF0aW9uPWllLHRoaXMuaWQ9YGAsdGhpcy5vYmplY3ROdW1iZXI9LTF9O21uLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKCl7TWU9dGhpcy5wYWdlLEI9dGhpcy5jdXJyZW50UGFnZSxOZT10aGlzLnBhZ2VzQ29udGV4dCxuZT10aGlzLnBhZ2VzLHhlPXRoaXMueCxTZT10aGlzLnksQ2U9dGhpcy5tYXRyaXgsdm4oQix0aGlzLndpZHRoKSxibihCLHRoaXMuaGVpZ2h0KSxpZT10aGlzLm91dHB1dERlc3RpbmF0aW9ufTt2YXIgaG49ZnVuY3Rpb24oZSx0LG4scixpKXtSZS5wdXNoKG5ldyBtbiksTWU9Qj0wLG5lPVtdLHhlPWUsU2U9dCxDZT1pLGR0KFtuLHJdKX07Zm9yKHZhciBnbiBpbiBwLmJlZ2luRm9ybU9iamVjdD1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBobihlLHQsbixyLGkpLHRoaXN9LHAuZW5kRm9ybU9iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoTGVbZV0pUmUucG9wKCkucmVzdG9yZSgpO2Vsc2V7dmFyIHQ9bmV3IG1uLG49YFhvYCsoT2JqZWN0LmtleXMoSWUpLmxlbmd0aCsxKS50b1N0cmluZygxMCk7dC5pZD1uLExlW2VdPW4sSWVbbl09dCxQZS5wdWJsaXNoKGBhZGRGb3JtT2JqZWN0YCx0KSxSZS5wb3AoKS5yZXN0b3JlKCl9fShlKSx0aGlzfSxwLmRvRm9ybU9iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBuPUllW0xlW2VdXTtyZXR1cm4gSyhgcWApLEsodC50b1N0cmluZygpK2AgY21gKSxLKGAvYCtuLmlkK2AgRG9gKSxLKGBRYCksdGhpc30scC5nZXRGb3JtT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PUllW0xlW2VdXTtyZXR1cm57eDp0LngseTp0Lnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsbWF0cml4OnQubWF0cml4fX0scC5zYXZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fD1gZ2VuZXJhdGVkLnBkZmAsKHR8fD17fSkucmV0dXJuUHJvbWlzZT10LnJldHVyblByb21pc2V8fCExLCExPT09dC5yZXR1cm5Qcm9taXNlPyhCaChDdChTdCgpKSxlKSx0eXBlb2YgQmgudW5sb2FkPT1gZnVuY3Rpb25gJiZSaC5zZXRUaW1lb3V0JiZzZXRUaW1lb3V0KEJoLnVubG9hZCw5MTEpLHRoaXMpOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7dHJ5e3ZhciByPUJoKEN0KFN0KCkpLGUpO3R5cGVvZiBCaC51bmxvYWQ9PWBmdW5jdGlvbmAmJlJoLnNldFRpbWVvdXQmJnNldFRpbWVvdXQoQmgudW5sb2FkLDkxMSksdChyKX1jYXRjaChlKXtuKGUubWVzc2FnZSl9fSl9LFouQVBJKVouQVBJLmhhc093blByb3BlcnR5KGduKSYmKGduPT09YGV2ZW50c2AmJlouQVBJLmV2ZW50cy5sZW5ndGg/ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7Zm9yKGk9dC5sZW5ndGgtMTtpIT09LTE7aS0tKW49dFtpXVswXSxyPXRbaV1bMV0sZS5zdWJzY3JpYmUuYXBwbHkoZSxbbl0uY29uY2F0KHR5cGVvZiByPT1gZnVuY3Rpb25gP1tyXTpyKSl9KFBlLFouQVBJLmV2ZW50cyk6cFtnbl09Wi5BUElbZ25dKTtmdW5jdGlvbiBfbihlKXtyZXR1cm4gTmVbZV0ubWVkaWFCb3gudG9wUmlnaHRYLU5lW2VdLm1lZGlhQm94LmJvdHRvbUxlZnRYfWZ1bmN0aW9uIHZuKGUsdCl7TmVbZV0ubWVkaWFCb3gudG9wUmlnaHRYPXQrTmVbZV0ubWVkaWFCb3guYm90dG9tTGVmdFh9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIE5lW2VdLm1lZGlhQm94LnRvcFJpZ2h0WS1OZVtlXS5tZWRpYUJveC5ib3R0b21MZWZ0WX1mdW5jdGlvbiBibihlLHQpe05lW2VdLm1lZGlhQm94LnRvcFJpZ2h0WT10K05lW2VdLm1lZGlhQm94LmJvdHRvbUxlZnRZfXZhciB4bj1wLmdldFBhZ2VXaWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gX24oZXx8PUIpL2JlfSxTbj1wLnNldFBhZ2VXaWR0aD1mdW5jdGlvbihlLHQpe3ZuKGUsdCpiZSl9LENuPXAuZ2V0UGFnZUhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4geW4oZXx8PUIpL2JlfSx3bj1wLnNldFBhZ2VIZWlnaHQ9ZnVuY3Rpb24oZSx0KXtibihlLHQqYmUpfTtyZXR1cm4gcC5pbnRlcm5hbD17cGRmRXNjYXBlOnV0LGdldFN0eWxlOlB0LGdldEZvbnQ6V3QsZ2V0Rm9udFNpemU6ZGUsZ2V0Q2hhclNwYWNlOmNuLGdldFRleHRDb2xvcjpvbixnZXRMaW5lSGVpZ2h0Oll0LGdldExpbmVIZWlnaHRGYWN0b3I6WnQsZ2V0TGluZVdpZHRoOnF0LHdyaXRlOm9lLGdldEhvcml6b250YWxDb29yZGluYXRlOlF0LGdldFZlcnRpY2FsQ29vcmRpbmF0ZTokdCxnZXRDb29yZGluYXRlU3RyaW5nOmVuLGdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZzp0bixjb2xsZWN0aW9uczp7fSxuZXdPYmplY3Q6V2UsbmV3QWRkaXRpb25hbE9iamVjdDpxZSxuZXdPYmplY3REZWZlcnJlZDpHZSxuZXdPYmplY3REZWZlcnJlZEJlZ2luOktlLGdldEZpbHRlcnM6UWUscHV0U3RyZWFtOiRlLGV2ZW50czpQZSxzY2FsZUZhY3RvcjpiZSxwYWdlU2l6ZTp7Z2V0V2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4geG4oQil9LHNldFdpZHRoOmZ1bmN0aW9uKGUpe1NuKEIsZSl9LGdldEhlaWdodDpmdW5jdGlvbigpe3JldHVybiBDbihCKX0sc2V0SGVpZ2h0OmZ1bmN0aW9uKGUpe3duKEIsZSl9fSxlbmNyeXB0aW9uT3B0aW9uczp1LGVuY3J5cHRpb246T3QsZ2V0RW5jcnlwdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB1PT09bnVsbD9mdW5jdGlvbihlKXtyZXR1cm4gZX06T3QuZW5jcnlwdG9yKGUsMCl9LG91dHB1dDpFdCxnZXROdW1iZXJPZlBhZ2VzOmh0LGdldCBwYWdlcygpe3JldHVybiBuZX0sb3V0OkssZjI6RCxmMzpPLGdldFBhZ2VJbmZvOmt0LGdldFBhZ2VJbmZvQnlPYmpJZDpBdCxnZXRDdXJyZW50UGFnZUluZm86anQsZ2V0UERGVmVyc2lvbjpoLFBvaW50OmZuLFJlY3RhbmdsZTpwbixNYXRyaXg6emUsaGFzSG90Zml4OkR0fSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5pbnRlcm5hbC5wYWdlU2l6ZSxgd2lkdGhgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geG4oQil9LHNldDpmdW5jdGlvbihlKXtTbihCLGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLmludGVybmFsLnBhZ2VTaXplLGBoZWlnaHRgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ24oQil9LHNldDpmdW5jdGlvbihlKXt3bihCLGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49Y2UubGVuZ3RoO3Q8bjt0Kyspe3ZhciByPWx0LmNhbGwodGhpcyxlW3RdWzBdLGVbdF1bMV0sZVt0XVsyXSxjZVt0XVszXSwhMCk7ITE9PT1kJiYoZltyXT0hMCk7dmFyIGk9ZVt0XVswXS5zcGxpdChgLWApO2N0KHtpZDpyLGZvbnROYW1lOmlbMF0sZm9udFN0eWxlOmlbMV18fGBgfSl9UGUucHVibGlzaChgYWRkRm9udHNgLHtmb250czp3ZSxkaWN0aW9uYXJ5OlRlfSl9LmNhbGwocCxjZSkseWU9YEYxYCxmdChpLG4pLFBlLnB1Ymxpc2goYGluaXRpYWxpemVkYCkscH1mdW5jdGlvbiBwaChlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX0se30pfWZ1bmN0aW9uIG1oKGUpe3ZhciB0PWUuZmFtaWx5LnJlcGxhY2UoLyJ8Jy9nLGBgKS50b0xvd2VyQ2FzZSgpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIE5nW2V8fD1gbm9ybWFsYF0/ZTpgbm9ybWFsYH0oZS5zdHlsZSkscj1mdW5jdGlvbihlKXtyZXR1cm4gZT90eXBlb2YgZT09YG51bWJlcmA/ZT49MTAwJiZlPD05MDAmJmUlMTAwPT0wP2U6NDAwOi9eXGQwMCQvLnRlc3QoZSk/cGFyc2VJbnQoZSk6ZT09PWBib2xkYD83MDA6NDAwOjQwMH0oZS53ZWlnaHQpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBGZ1tlfHw9YG5vcm1hbGBdPT1gbnVtYmVyYD9lOmBub3JtYWxgfShlLnN0cmV0Y2gpO3JldHVybntmYW1pbHk6dCxzdHlsZTpuLHdlaWdodDpyLHN0cmV0Y2g6aSxzcmM6ZS5zcmN8fFtdLHJlZjplLnJlZnx8e25hbWU6dCxzdHlsZTpbaSxuLHJdLmpvaW4oYCBgKX19fWZ1bmN0aW9uIGhoKGUsdCxuLHIpe3ZhciBpO2ZvcihpPW47aT49MCYmaTx0Lmxlbmd0aDtpKz1yKWlmKGVbdFtpXV0pcmV0dXJuIGVbdFtpXV07Zm9yKGk9bjtpPj0wJiZpPHQubGVuZ3RoO2ktPXIpaWYoZVt0W2ldXSlyZXR1cm4gZVt0W2ldXX1mdW5jdGlvbiBnaChlKXtyZXR1cm5bZS5zdHJldGNoLGUuc3R5bGUsZS53ZWlnaHQsZS5mYW1pbHldLmpvaW4oYCBgKX1mdW5jdGlvbiBfaChlKXtyZXR1cm4gZS50cmltTGVmdCgpfWZ1bmN0aW9uIHZoKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDspe2lmKGUuY2hhckF0KG4pPT09dClyZXR1cm5bZS5zdWJzdHJpbmcoMCxuKSxlLnN1YnN0cmluZyhuKzEpXTtuKz0xfXJldHVybiBudWxsfWZ1bmN0aW9uIHloKGUpe3ZhciB0PWUubWF0Y2goL14oLVthLXpfXXxbYS16X10pW2EtejAtOV8tXSovaSk7cmV0dXJuIHQ9PT1udWxsP251bGw6W3RbMF0sZS5zdWJzdHJpbmcodFswXS5sZW5ndGgpXX1mdW5jdGlvbiBiaChlLHQsbixyLGkpe3ZhciBhPTQsbz1DaDtzd2l0Y2goaSl7Y2FzZSBaLkFQSS5pbWFnZV9jb21wcmVzc2lvbi5GQVNUOmE9MSxvPVNoO2JyZWFrO2Nhc2UgWi5BUEkuaW1hZ2VfY29tcHJlc3Npb24uTUVESVVNOmE9NixvPXdoO2JyZWFrO2Nhc2UgWi5BUEkuaW1hZ2VfY29tcHJlc3Npb24uU0xPVzphPTksbz1UaH1lPWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaSxhPWUubGVuZ3RoL3Qsbz1uZXcgVWludDhBcnJheShlLmxlbmd0aCthKSxzPVt4aCxTaCxDaCx3aCxUaF0sYz0wO2M8YTtjKz0xKXt2YXIgbD1jKnQsdT1lLnN1YmFycmF5KGwsbCt0KTtpZihyKW8uc2V0KHIodSxuLGkpLGwrYyk7ZWxzZXtmb3IodmFyIGQ9cy5sZW5ndGgsZj1bXSxwPTA7cDxkO3ArPTEpZltwXT1zW3BdKHUsbixpKTt2YXIgbT1EaChmLmNvbmNhdCgpKTtvLnNldChmW21dLGwrYyl9aT11fXJldHVybiBvfShlLHQsTWF0aC5jZWlsKG4qci84KSxvKTt2YXIgcz1NKGUse2xldmVsOmF9KTtyZXR1cm4gWi5BUEkuX19hZGRpbWFnZV9fLmFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcocyl9ZnVuY3Rpb24geGgoZSl7dmFyIHQ9QXJyYXkuYXBwbHkoW10sZSk7cmV0dXJuIHQudW5zaGlmdCgwKSx0fWZ1bmN0aW9uIFNoKGUsdCl7dmFyIG49ZS5sZW5ndGgscj1bXTtyWzBdPTE7Zm9yKHZhciBpPTA7aTxuO2krPTEpe3ZhciBhPWVbaS10XXx8MDtyW2krMV09ZVtpXS1hKzI1NiYyNTV9cmV0dXJuIHJ9ZnVuY3Rpb24gQ2goZSx0LG4pe3ZhciByPWUubGVuZ3RoLGk9W107aVswXT0yO2Zvcih2YXIgYT0wO2E8cjthKz0xKXt2YXIgbz1uJiZuW2FdfHwwO2lbYSsxXT1lW2FdLW8rMjU2JjI1NX1yZXR1cm4gaX1mdW5jdGlvbiB3aChlLHQsbil7dmFyIHI9ZS5sZW5ndGgsaT1bXTtpWzBdPTM7Zm9yKHZhciBhPTA7YTxyO2ErPTEpe3ZhciBvPWVbYS10XXx8MCxzPW4mJm5bYV18fDA7aVthKzFdPWVbYV0rMjU2LShvK3M+Pj4xKSYyNTV9cmV0dXJuIGl9ZnVuY3Rpb24gVGgoZSx0LG4pe3ZhciByPWUubGVuZ3RoLGk9W107aVswXT00O2Zvcih2YXIgYT0wO2E8cjthKz0xKXt2YXIgbz1FaChlW2EtdF18fDAsbiYmblthXXx8MCxuJiZuW2EtdF18fDApO2lbYSsxXT1lW2FdLW8rMjU2JjI1NX1yZXR1cm4gaX1mdW5jdGlvbiBFaChlLHQsbil7aWYoZT09PXQmJnQ9PT1uKXJldHVybiBlO3ZhciByPU1hdGguYWJzKHQtbiksaT1NYXRoLmFicyhlLW4pLGE9TWF0aC5hYnMoZSt0LW4tbik7cmV0dXJuIHI8PWkmJnI8PWE/ZTppPD1hP3Q6bn1mdW5jdGlvbiBEaChlKXt2YXIgdD1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStNYXRoLmFicyh0KX0sMCl9KTtyZXR1cm4gdC5pbmRleE9mKE1hdGgubWluLmFwcGx5KG51bGwsdCkpfWZ1bmN0aW9uIE9oKGUsdCxuKXt2YXIgcj10Km4saT1NYXRoLmZsb29yKHIvOCksYT0xNi0oci04Kmkrbiksbz0oMTw8biktMTtyZXR1cm4gQWgoZSxpKT4+YSZvfWZ1bmN0aW9uIGtoKGUsdCxuLHIpe3ZhciBpPW4qcixhPU1hdGguZmxvb3IoaS84KSxvPTE2LShpLTgqYStyKSxzPSgxPDxyKS0xLGM9KHQmcyk8PG87KGZ1bmN0aW9uKGUsdCxuKXtpZih0KzE8ZS5ieXRlTGVuZ3RoKWUuc2V0VWludDE2KHQsbiwhMSk7ZWxzZXt2YXIgcj1uPj44JjI1NTtlLnNldFVpbnQ4KHQscil9fSkoZSxhLEFoKGUsYSkmfihzPDxvKSY2NTUzNXxjKX1mdW5jdGlvbiBBaChlLHQpe3JldHVybiB0KzE8ZS5ieXRlTGVuZ3RoP2UuZ2V0VWludDE2KHQsITEpOmUuZ2V0VWludDgodCk8PDh9ZnVuY3Rpb24gamgoZSl7dmFyIHQ9MDtpZihlW3QrK10hPT03MXx8ZVt0KytdIT09NzN8fGVbdCsrXSE9PTcwfHxlW3QrK10hPT01Nnx8KGVbdCsrXSsxJjI1MykhPTU2fHxlW3QrK10hPT05Nyl0aHJvdyBFcnJvcihgSW52YWxpZCBHSUYgODdhLzg5YSBoZWFkZXIuYCk7dmFyIG49ZVt0KytdfGVbdCsrXTw8OCxyPWVbdCsrXXxlW3QrK108PDgsaT1lW3QrK10sYT1pPj43LG89MTw8MSsoNyZpKTtlW3QrK10sZVt0KytdO3ZhciBzPW51bGwsYz1udWxsO2EmJihzPXQsYz1vLHQrPTMqbyk7dmFyIGw9ITAsdT1bXSxkPTAsZj1udWxsLHA9MCxtPW51bGw7Zm9yKHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD1yO2wmJnQ8ZS5sZW5ndGg7KXN3aXRjaChlW3QrK10pe2Nhc2UgMzM6c3dpdGNoKGVbdCsrXSl7Y2FzZSAyNTU6aWYoZVt0XSE9PTExfHxlW3QrMV09PTc4JiZlW3QrMl09PTY5JiZlW3QrM109PTg0JiZlW3QrNF09PTgzJiZlW3QrNV09PTY3JiZlW3QrNl09PTY1JiZlW3QrN109PTgwJiZlW3QrOF09PTY5JiZlW3QrOV09PTUwJiZlW3QrMTBdPT00NiYmZVt0KzExXT09NDgmJmVbdCsxMl09PTMmJmVbdCsxM109PTEmJmVbdCsxNl09PTApdCs9MTQsbT1lW3QrK118ZVt0KytdPDw4LHQrKztlbHNlIGZvcih0Kz0xMjs7KXtpZighKChEPWVbdCsrXSk+PTApKXRocm93IEVycm9yKGBJbnZhbGlkIGJsb2NrIHNpemVgKTtpZihEPT09MClicmVhazt0Kz1EfWJyZWFrO2Nhc2UgMjQ5OmlmKGVbdCsrXSE9PTR8fGVbdCs0XSE9PTApdGhyb3cgRXJyb3IoYEludmFsaWQgZ3JhcGhpY3MgZXh0ZW5zaW9uIGJsb2NrLmApO3ZhciBoPWVbdCsrXTtkPWVbdCsrXXxlW3QrK108PDgsZj1lW3QrK10sMSZofHwoZj1udWxsKSxwPWg+PjImNyx0Kys7YnJlYWs7Y2FzZSAyNTQ6Zm9yKDs7KXtpZighKChEPWVbdCsrXSk+PTApKXRocm93IEVycm9yKGBJbnZhbGlkIGJsb2NrIHNpemVgKTtpZihEPT09MClicmVhazt0Kz1EfWJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYFVua25vd24gZ3JhcGhpYyBjb250cm9sIGxhYmVsOiAweGArZVt0LTFdLnRvU3RyaW5nKDE2KSl9YnJlYWs7Y2FzZSA0NDp2YXIgZz1lW3QrK118ZVt0KytdPDw4LF89ZVt0KytdfGVbdCsrXTw8OCx2PWVbdCsrXXxlW3QrK108PDgseT1lW3QrK118ZVt0KytdPDw4LGI9ZVt0KytdLHg9Yj4+NiYxLFM9MTw8MSsoNyZiKSxDPXMsdz1jLFQ9ITE7Yj4+NyYmKFQ9ITAsQz10LHc9Uyx0Kz0zKlMpO3ZhciBFPXQ7Zm9yKHQrKzs7KXt2YXIgRDtpZighKChEPWVbdCsrXSk+PTApKXRocm93IEVycm9yKGBJbnZhbGlkIGJsb2NrIHNpemVgKTtpZihEPT09MClicmVhazt0Kz1EfXUucHVzaCh7eDpnLHk6Xyx3aWR0aDp2LGhlaWdodDp5LGhhc19sb2NhbF9wYWxldHRlOlQscGFsZXR0ZV9vZmZzZXQ6QyxwYWxldHRlX3NpemU6dyxkYXRhX29mZnNldDpFLGRhdGFfbGVuZ3RoOnQtRSx0cmFuc3BhcmVudF9pbmRleDpmLGludGVybGFjZWQ6ISF4LGRlbGF5OmQsZGlzcG9zYWw6cH0pO2JyZWFrO2Nhc2UgNTk6bD0hMTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGBVbmtub3duIGdpZiBibG9jazogMHhgK2VbdC0xXS50b1N0cmluZygxNikpfXRoaXMubnVtRnJhbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHUubGVuZ3RofSx0aGlzLmxvb3BDb3VudD1mdW5jdGlvbigpe3JldHVybiBtfSx0aGlzLmZyYW1lSW5mbz1mdW5jdGlvbihlKXtpZihlPDB8fGU+PXUubGVuZ3RoKXRocm93IEVycm9yKGBGcmFtZSBpbmRleCBvdXQgb2YgcmFuZ2UuYCk7cmV0dXJuIHVbZV19LHRoaXMuZGVjb2RlQW5kQmxpdEZyYW1lQkdSQT1mdW5jdGlvbih0LHIpe3ZhciBpPXRoaXMuZnJhbWVJbmZvKHQpLGE9aS53aWR0aCppLmhlaWdodDtpZihhPjUzNjg3MDkxMil0aHJvdyBFcnJvcihgSW1hZ2UgZGltZW5zaW9ucyBleGNlZWQgNTEyTUIsIHdoaWNoIGlzIHRvbyBsYXJnZS5gKTt2YXIgbz1uZXcgVWludDhBcnJheShhKTtNaChlLGkuZGF0YV9vZmZzZXQsbyxhKTt2YXIgcz1pLnBhbGV0dGVfb2Zmc2V0LGM9aS50cmFuc3BhcmVudF9pbmRleDtjPT09bnVsbCYmKGM9MjU2KTt2YXIgbD1pLndpZHRoLHU9bi1sLGQ9bCxmPTQqKGkueSpuK2kueCkscD00KigoaS55K2kuaGVpZ2h0KSpuK2kueCksbT1mLGg9NCp1OyEwPT09aS5pbnRlcmxhY2VkJiYoaCs9NCpuKjcpO2Zvcih2YXIgZz04LF89MCx2PW8ubGVuZ3RoO188djsrK18pe3ZhciB5PW9bX107aWYoZD09PTAmJihkPWwsKG0rPWgpPj1wJiYoaD00KnUrNCpuKihnLTEpLG09ZisobCt1KSooZzw8MSksZz4+PTEpKSx5PT09YyltKz00O2Vsc2V7dmFyIGI9ZVtzKzMqeV0seD1lW3MrMyp5KzFdLFM9ZVtzKzMqeSsyXTtyW20rK109UyxyW20rK109eCxyW20rK109YixyW20rK109MjU1fS0tZH19LHRoaXMuZGVjb2RlQW5kQmxpdEZyYW1lUkdCQT1mdW5jdGlvbih0LHIpe3ZhciBpPXRoaXMuZnJhbWVJbmZvKHQpLGE9aS53aWR0aCppLmhlaWdodDtpZihhPjUzNjg3MDkxMil0aHJvdyBFcnJvcihgSW1hZ2UgZGltZW5zaW9ucyBleGNlZWQgNTEyTUIsIHdoaWNoIGlzIHRvbyBsYXJnZS5gKTt2YXIgbz1uZXcgVWludDhBcnJheShhKTtNaChlLGkuZGF0YV9vZmZzZXQsbyxhKTt2YXIgcz1pLnBhbGV0dGVfb2Zmc2V0LGM9aS50cmFuc3BhcmVudF9pbmRleDtjPT09bnVsbCYmKGM9MjU2KTt2YXIgbD1pLndpZHRoLHU9bi1sLGQ9bCxmPTQqKGkueSpuK2kueCkscD00KigoaS55K2kuaGVpZ2h0KSpuK2kueCksbT1mLGg9NCp1OyEwPT09aS5pbnRlcmxhY2VkJiYoaCs9NCpuKjcpO2Zvcih2YXIgZz04LF89MCx2PW8ubGVuZ3RoO188djsrK18pe3ZhciB5PW9bX107aWYoZD09PTAmJihkPWwsKG0rPWgpPj1wJiYoaD00KnUrNCpuKihnLTEpLG09ZisobCt1KSooZzw8MSksZz4+PTEpKSx5PT09YyltKz00O2Vsc2V7dmFyIGI9ZVtzKzMqeV0seD1lW3MrMyp5KzFdLFM9ZVtzKzMqeSsyXTtyW20rK109YixyW20rK109eCxyW20rK109UyxyW20rK109MjU1fS0tZH19fWZ1bmN0aW9uIE1oKGUsdCxuLHIpe2Zvcih2YXIgaT1lW3QrK10sYT0xPDxpLG89YSsxLHM9bysxLGM9aSsxLGw9KDE8PGMpLTEsdT0wLGQ9MCxmPTAscD1lW3QrK10sbT1uZXcgSW50MzJBcnJheSg0MDk2KSxoPW51bGw7Oyl7Zm9yKDt1PDE2JiZwIT09MDspZHw9ZVt0KytdPDx1LHUrPTgscD09PTE/cD1lW3QrK106LS1wO2lmKHU8YylicmVhazt2YXIgZz1kJmw7aWYoZD4+PWMsdS09YyxnIT09YSl7aWYoZz09PW8pYnJlYWs7Zm9yKHZhciBfPWc8cz9nOmgsdj0wLHk9Xzt5PmE7KXk9bVt5XT4+OCwrK3Y7dmFyIGI9eTtpZihmK3YrKF89PT1nPzA6MSk+cilyZXR1cm4gdm9pZCB6aC5sb2coYFdhcm5pbmcsIGdpZiBzdHJlYW0gbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuYCk7bltmKytdPWI7dmFyIHg9Zis9djtmb3IoXyE9PWcmJihuW2YrK109YikseT1fO3YtLTspeT1tW3ldLG5bLS14XT0yNTUmeSx5Pj49ODtoIT09bnVsbCYmczw0MDk2JiYobVtzKytdPWg8PDh8YixzPj1sKzEmJmM8MTImJigrK2MsbD1sPDwxfDEpKSxoPWd9ZWxzZSBzPW8rMSxsPSgxPDwoYz1pKzEpKS0xLGg9bnVsbH1yZXR1cm4gZiE9PXImJnpoLmxvZyhgV2FybmluZywgZ2lmIHN0cmVhbSBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQuYCksbn1mdW5jdGlvbiBOaChlKXt2YXIgdCxuLHIsaSxhLG89TWF0aC5mbG9vcixzPUFycmF5KDY0KSxjPUFycmF5KDY0KSxsPUFycmF5KDY0KSx1PUFycmF5KDY0KSxkPUFycmF5KDY1NTM1KSxmPUFycmF5KDY1NTM1KSxwPUFycmF5KDY0KSxtPUFycmF5KDY0KSxoPVtdLGc9MCxfPTcsdj1BcnJheSg2NCkseT1BcnJheSg2NCksYj1BcnJheSg2NCkseD1BcnJheSgyNTYpLFM9QXJyYXkoMjA0OCksQz1bMCwxLDUsNiwxNCwxNSwyNywyOCwyLDQsNywxMywxNiwyNiwyOSw0MiwzLDgsMTIsMTcsMjUsMzAsNDEsNDMsOSwxMSwxOCwyNCwzMSw0MCw0NCw1MywxMCwxOSwyMywzMiwzOSw0NSw1Miw1NCwyMCwyMiwzMywzOCw0Niw1MSw1NSw2MCwyMSwzNCwzNyw0Nyw1MCw1Niw1OSw2MSwzNSwzNiw0OCw0OSw1Nyw1OCw2Miw2M10sdz1bMCwwLDEsNSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwXSxUPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExXSxFPVswLDAsMiwxLDMsMywyLDQsMyw1LDUsNCw0LDAsMCwxLDEyNV0sRD1bMSwyLDMsMCw0LDE3LDUsMTgsMzMsNDksNjUsNiwxOSw4MSw5Nyw3LDM0LDExMywyMCw1MCwxMjksMTQ1LDE2MSw4LDM1LDY2LDE3NywxOTMsMjEsODIsMjA5LDI0MCwzNiw1MSw5OCwxMTQsMTMwLDksMTAsMjIsMjMsMjQsMjUsMjYsMzcsMzgsMzksNDAsNDEsNDIsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsODMsODQsODUsODYsODcsODgsODksOTAsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwXSxPPVswLDAsMywxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDBdLGs9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTFdLEE9WzAsMCwyLDEsMiw0LDQsMyw0LDcsNSw0LDQsMCwxLDIsMTE5XSxqPVswLDEsMiwzLDE3LDQsNSwzMyw0OSw2LDE4LDY1LDgxLDcsOTcsMTEzLDE5LDM0LDUwLDEyOSw4LDIwLDY2LDE0NSwxNjEsMTc3LDE5Myw5LDM1LDUxLDgyLDI0MCwyMSw5OCwxMTQsMjA5LDEwLDIyLDM2LDUyLDIyNSwzNywyNDEsMjMsMjQsMjUsMjYsMzgsMzksNDAsNDEsNDIsNTMsNTQsNTUsNTYsNTcsNTgsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsODMsODQsODUsODYsODcsODgsODksOTAsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTBdO2Z1bmN0aW9uIE0oZSx0KXtmb3IodmFyIG49MCxyPTAsaT1bXSxhPTE7YTw9MTY7YSsrKXtmb3IodmFyIG89MTtvPD1lW2FdO28rKylpW3Rbcl1dPVtdLGlbdFtyXV1bMF09bixpW3Rbcl1dWzFdPWEscisrLG4rKztuKj0yfXJldHVybiBpfWZ1bmN0aW9uIE4oZSl7Zm9yKHZhciB0PWVbMF0sbj1lWzFdLTE7bj49MDspdCYxPDxuJiYoZ3w9MTw8Xyksbi0tLC0tXzwwJiYoZz09MjU1PyhQKDI1NSksUCgwKSk6UChnKSxfPTcsZz0wKX1mdW5jdGlvbiBQKGUpe2gucHVzaChlKX1mdW5jdGlvbiBGKGUpe1AoZT4+OCYyNTUpLFAoMjU1JmUpfWZ1bmN0aW9uIEkoZSx0LG4scixpKXtmb3IodmFyIGEsbz1pWzBdLHM9aVsyNDBdLGM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksYSxvLHMsYyxsLHUsZCxmPTA7Zm9yKHU9MDt1PDg7Kyt1KXtuPWVbZl0scj1lW2YrMV0saT1lW2YrMl0sYT1lW2YrM10sbz1lW2YrNF0scz1lW2YrNV0sYz1lW2YrNl07dmFyIG09bisobD1lW2YrN10pLGg9bi1sLGc9citjLF89ci1jLHY9aStzLHk9aS1zLGI9YStvLHg9YS1vLFM9bStiLEM9bS1iLHc9Zyt2LFQ9Zy12O2VbZl09Uyt3LGVbZis0XT1TLXc7dmFyIEU9LjcwNzEwNjc4MSooVCtDKTtlW2YrMl09QytFLGVbZis2XT1DLUU7dmFyIEQ9LjM4MjY4MzQzMyooKFM9eCt5KS0oVD1fK2gpKSxPPS41NDExOTYxKlMrRCxrPTEuMzA2NTYyOTY1KlQrRCxBPS43MDcxMDY3ODEqKHc9eStfKSxqPWgrQSxNPWgtQTtlW2YrNV09TStPLGVbZiszXT1NLU8sZVtmKzFdPWorayxlW2YrN109ai1rLGYrPTh9Zm9yKGY9MCx1PTA7dTw4OysrdSl7bj1lW2ZdLHI9ZVtmKzhdLGk9ZVtmKzE2XSxhPWVbZisyNF0sbz1lW2YrMzJdLHM9ZVtmKzQwXSxjPWVbZis0OF07dmFyIE49bisobD1lW2YrNTZdKSxQPW4tbCxGPXIrYyxJPXItYyxMPWkrcyxSPWktcyx6PWErbyxCPWEtbyxWPU4reixlZT1OLXosSD1GK0wsVT1GLUw7ZVtmXT1WK0gsZVtmKzMyXT1WLUg7dmFyIFc9LjcwNzEwNjc4MSooVStlZSk7ZVtmKzE2XT1lZStXLGVbZis0OF09ZWUtVzt2YXIgRz0uMzgyNjgzNDMzKigoVj1CK1IpLShVPUkrUCkpLHRlPS41NDExOTYxKlYrRyxuZT0xLjMwNjU2Mjk2NSpVK0cscmU9LjcwNzEwNjc4MSooSD1SK0kpLGllPVArcmUsYWU9UC1yZTtlW2YrNDBdPWFlK3RlLGVbZisyNF09YWUtdGUsZVtmKzhdPWllK25lLGVbZis1Nl09aWUtbmUsZisrfWZvcih1PTA7dTw2NDsrK3UpZD1lW3VdKnRbdV0scFt1XT1kPjA/ZCsuNXwwOmQtLjV8MDtyZXR1cm4gcH0oZSx0KSxsPTA7bDw2NDsrK2wpbVtDW2xdXT1jW2xdO3ZhciB1PW1bMF0tbjtuPW1bMF0sdT09MD9OKHJbMF0pOihOKHJbZlthPTMyNzY3K3VdXSksTihkW2FdKSk7Zm9yKHZhciBoPTYzO2g+MCYmbVtoXT09MDspaC0tO2lmKGg9PTApcmV0dXJuIE4obyksbjtmb3IodmFyIGcsXz0xO188PWg7KXtmb3IodmFyIHY9XzttW19dPT0wJiZfPD1oOykrK187dmFyIHk9Xy12O2lmKHk+PTE2KXtnPXk+PjQ7Zm9yKHZhciBiPTE7Yjw9ZzsrK2IpTihzKTt5Jj0xNX1hPTMyNzY3K21bX10sTihpWyh5PDw0KStmW2FdXSksTihkW2FdKSxfKyt9cmV0dXJuIGghPTYzJiZOKG8pLG59ZnVuY3Rpb24gTChlKXtlPU1hdGgubWluKE1hdGgubWF4KGUsMSksMTAwKSxhIT1lJiYoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVsxNiwxMSwxMCwxNiwyNCw0MCw1MSw2MSwxMiwxMiwxNCwxOSwyNiw1OCw2MCw1NSwxNCwxMywxNiwyNCw0MCw1Nyw2OSw1NiwxNCwxNywyMiwyOSw1MSw4Nyw4MCw2MiwxOCwyMiwzNyw1Niw2OCwxMDksMTAzLDc3LDI0LDM1LDU1LDY0LDgxLDEwNCwxMTMsOTIsNDksNjQsNzgsODcsMTAzLDEyMSwxMjAsMTAxLDcyLDkyLDk1LDk4LDExMiwxMDAsMTAzLDk5XSxuPTA7bjw2NDtuKyspe3ZhciByPW8oKHRbbl0qZSs1MCkvMTAwKTtyPU1hdGgubWluKE1hdGgubWF4KHIsMSksMjU1KSxzW0Nbbl1dPXJ9Zm9yKHZhciBpPVsxNywxOCwyNCw0Nyw5OSw5OSw5OSw5OSwxOCwyMSwyNiw2Niw5OSw5OSw5OSw5OSwyNCwyNiw1Niw5OSw5OSw5OSw5OSw5OSw0Nyw2Niw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OSw5OV0sYT0wO2E8NjQ7YSsrKXt2YXIgZD1vKChpW2FdKmUrNTApLzEwMCk7ZD1NYXRoLm1pbihNYXRoLm1heChkLDEpLDI1NSksY1tDW2FdXT1kfWZvcih2YXIgZj1bMSwxLjM4NzAzOTg0NSwxLjMwNjU2Mjk2NSwxLjE3NTg3NTYwMiwxLC43ODU2OTQ5NTgsLjU0MTE5NjEsLjI3NTg5OTM3OV0scD0wLG09MDttPDg7bSsrKWZvcih2YXIgaD0wO2g8ODtoKyspbFtwXT0xLyhzW0NbcF1dKmZbbV0qZltoXSo4KSx1W3BdPTEvKGNbQ1twXV0qZlttXSpmW2hdKjgpLHArK30oTWF0aC5mbG9vcihlPDUwPzVlMy9lOjIwMC0yKmUpKSxhPWUpfXRoaXMuZW5jb2RlPWZ1bmN0aW9uKGUsYSl7YSYmTChhKSxoPVtdLGc9MCxfPTcsRig2NTQ5NiksRig2NTUwNCksRigxNiksUCg3NCksUCg3MCksUCg3MyksUCg3MCksUCgwKSxQKDEpLFAoMSksUCgwKSxGKDEpLEYoMSksUCgwKSxQKDApLGZ1bmN0aW9uKCl7Rig2NTQ5OSksRigxMzIpLFAoMCk7Zm9yKHZhciBlPTA7ZTw2NDtlKyspUChzW2VdKTtQKDEpO2Zvcih2YXIgdD0wO3Q8NjQ7dCsrKVAoY1t0XSl9KCksZnVuY3Rpb24oZSx0KXtGKDY1NDcyKSxGKDE3KSxQKDgpLEYodCksRihlKSxQKDMpLFAoMSksUCgxNyksUCgwKSxQKDIpLFAoMTcpLFAoMSksUCgzKSxQKDE3KSxQKDEpfShlLndpZHRoLGUuaGVpZ2h0KSxmdW5jdGlvbigpe0YoNjU0NzYpLEYoNDE4KSxQKDApO2Zvcih2YXIgZT0wO2U8MTY7ZSsrKVAod1tlKzFdKTtmb3IodmFyIHQ9MDt0PD0xMTt0KyspUChUW3RdKTtQKDE2KTtmb3IodmFyIG49MDtuPDE2O24rKylQKEVbbisxXSk7Zm9yKHZhciByPTA7cjw9MTYxO3IrKylQKERbcl0pO1AoMSk7Zm9yKHZhciBpPTA7aTwxNjtpKyspUChPW2krMV0pO2Zvcih2YXIgYT0wO2E8PTExO2ErKylQKGtbYV0pO1AoMTcpO2Zvcih2YXIgbz0wO288MTY7bysrKVAoQVtvKzFdKTtmb3IodmFyIHM9MDtzPD0xNjE7cysrKVAoaltzXSl9KCksRig2NTQ5OCksRigxMiksUCgzKSxQKDEpLFAoMCksUCgyKSxQKDE3KSxQKDMpLFAoMTcpLFAoMCksUCg2MyksUCgwKTt2YXIgbz0wLGQ9MCxmPTA7Zz0wLF89Nyx0aGlzLmVuY29kZS5kaXNwbGF5TmFtZT1gX2VuY29kZV9gO2Zvcih2YXIgcCxtLHgsQyxNLFIseixCLFYsZWU9ZS5kYXRhLEg9ZS53aWR0aCxVPWUuaGVpZ2h0LFc9NCpILEc9MDtHPFU7KXtmb3IocD0wO3A8Vzspe2ZvcihNPVcqRytwLHo9LTEsQj0wLFY9MDtWPDY0O1YrKylSPU0rKEI9Vj4+MykqVysoej00Kig3JlYpKSxHK0I+PVUmJihSLT1XKihHKzErQi1VKSkscCt6Pj1XJiYoUi09cCt6LVcrNCksbT1lZVtSKytdLHg9ZWVbUisrXSxDPWVlW1IrK10sdltWXT0oU1ttXStTW3grMjU2fDBdK1NbQys1MTJ8MF0+PjE2KS0xMjgseVtWXT0oU1ttKzc2OHwwXStTW3grMTAyNHwwXStTW0MrMTI4MHwwXT4+MTYpLTEyOCxiW1ZdPShTW20rMTI4MHwwXStTW3grMTUzNnwwXStTW0MrMTc5MnwwXT4+MTYpLTEyODtvPUkodixsLG8sdCxyKSxkPUkoeSx1LGQsbixpKSxmPUkoYix1LGYsbixpKSxwKz0zMn1HKz04fWlmKF8+PTApe3ZhciB0ZT1bXTt0ZVsxXT1fKzEsdGVbMF09KDE8PF8rMSktMSxOKHRlKX1yZXR1cm4gRig2NTQ5NyksbmV3IFVpbnQ4QXJyYXkoaCl9LGV8fD01MCxmdW5jdGlvbigpe2Zvcih2YXIgZT1TdHJpbmcuZnJvbUNoYXJDb2RlLHQ9MDt0PDI1Njt0KyspeFt0XT1lKHQpfSgpLHQ9TSh3LFQpLG49TShPLGspLHI9TShFLEQpLGk9TShBLGopLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTEsdD0yLG49MTtuPD0xNTtuKyspe2Zvcih2YXIgcj1lO3I8dDtyKyspZlszMjc2NytyXT1uLGRbMzI3Njcrcl09W10sZFszMjc2NytyXVsxXT1uLGRbMzI3Njcrcl1bMF09cjtmb3IodmFyIGk9LSh0LTEpO2k8PS1lO2krKylmWzMyNzY3K2ldPW4sZFszMjc2NytpXT1bXSxkWzMyNzY3K2ldWzFdPW4sZFszMjc2NytpXVswXT10LTEraTtlPDw9MSx0PDw9MX19KCksZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPDI1NjtlKyspU1tlXT0xOTU5NSplLFNbZSsyNTZ8MF09Mzg0NzAqZSxTW2UrNTEyfDBdPTc0NzEqZSszMjc2OCxTW2UrNzY4fDBdPS0xMTA1OSplLFNbZSsxMDI0fDBdPS0yMTcwOSplLFNbZSsxMjgwfDBdPTMyNzY4KmUrODQyMTM3NSxTW2UrMTUzNnwwXT0tMjc0MzkqZSxTW2UrMTc5MnwwXT0tNTMyOSplfSgpLEwoZSl9ZnVuY3Rpb24gUGgoZSx0KXtpZih0aGlzLnBvcz0wLHRoaXMuYnVmZmVyPWUsdGhpcy5kYXRhdj1uZXcgRGF0YVZpZXcoZS5idWZmZXIpLHRoaXMuaXNfd2l0aF9hbHBoYT0hIXQsdGhpcy5ib3R0b21fdXA9ITAsdGhpcy5mbGFnPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5idWZmZXJbMF0pK1N0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5idWZmZXJbMV0pLHRoaXMucG9zKz0yLFtgQk1gLGBCQWAsYENJYCxgQ1BgLGBJQ2AsYFBUYF0uaW5kZXhPZih0aGlzLmZsYWcpPT09LTEpdGhyb3cgRXJyb3IoYEludmFsaWQgQk1QIEZpbGVgKTt0aGlzLnBhcnNlSGVhZGVyKCksdGhpcy5wYXJzZUJHUigpfWZ1bmN0aW9uIEZoKGUpe2Z1bmN0aW9uIHQoZSl7aWYoIWUpdGhyb3cgRXJyb3IoYGFzc2VydCA6UGApfWZ1bmN0aW9uIG4oZSx0LG4pe2Zvcih2YXIgcj0wOzQ+cjtyKyspaWYoZVt0K3JdIT1uLmNoYXJDb2RlQXQocikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcihlLHQsbixyLGkpe2Zvcih2YXIgYT0wO2E8aTthKyspZVt0K2FdPW5bcithXX1mdW5jdGlvbiBpKGUsdCxuLHIpe2Zvcih2YXIgaT0wO2k8cjtpKyspZVt0K2ldPW59ZnVuY3Rpb24gYShlKXtyZXR1cm4gbmV3IEludDMyQXJyYXkoZSl9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbj1bXSxyPTA7cjxlO3IrKyluLnB1c2gobmV3IHQpO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1bXTtyZXR1cm4gZnVuY3Rpb24gZShuLHIsaSl7Zm9yKHZhciBhPWlbcl0sbz0wO288YSYmKG4ucHVzaChpLmxlbmd0aD5yKzE/W106bmV3IHQpLCEoaS5sZW5ndGg8cisxKSk7bysrKWUobltvXSxyKzEsaSl9KG4sMCxlKSxufXZhciBjPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztmdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciBuPTE8PHQtMT4+PjA7ZSZuOyluPj4+PTE7cmV0dXJuIG4/KGUmbi0xKStuOmV9ZnVuY3Rpb24gbChlLG4scixpLGEpe3QoIShpJXIpKTtkbyBlW24rKGktPXIpXT1hO3doaWxlKDA8aSl9ZnVuY3Rpb24gdShlLG4scixpLG8pe2lmKHQoMjMyOD49byksNTEyPj1vKXZhciBzPWEoNTEyKTtlbHNlIGlmKChzPWEobykpPT1udWxsKXJldHVybiAwO3JldHVybiBmdW5jdGlvbihlLG4scixpLG8scyl7dmFyIHUsZixwPW4sbT0xPDxyLGg9YSgxNiksZz1hKDE2KTtmb3IodChvIT0wKSx0KGkhPW51bGwpLHQoZSE9bnVsbCksdCgwPHIpLGY9MDtmPG87KytmKXtpZigxNTxpW2ZdKXJldHVybiAwOysraFtpW2ZdXX1pZihoWzBdPT1vKXJldHVybiAwO2ZvcihnWzFdPTAsdT0xOzE1PnU7Kyt1KXtpZihoW3VdPjE8PHUpcmV0dXJuIDA7Z1t1KzFdPWdbdV0raFt1XX1mb3IoZj0wO2Y8bzsrK2YpdT1pW2ZdLDA8aVtmXSYmKHNbZ1t1XSsrXT1mKTtpZihnWzE1XT09MSlyZXR1cm4oaT1uZXcgZCkuZz0wLGkudmFsdWU9c1swXSxsKGUscCwxLG0saSksbTt2YXIgXyx2PS0xLHk9bS0xLGI9MCx4PTEsUz0xLEM9MTw8cjtmb3IoZj0wLHU9MSxvPTI7dTw9cjsrK3Usbzw8PTEpe2lmKHgrPVM8PD0xLDA+KFMtPWhbdV0pKXJldHVybiAwO2Zvcig7MDxoW3VdOy0taFt1XSkoaT1uZXcgZCkuZz11LGkudmFsdWU9c1tmKytdLGwoZSxwK2IsbyxDLGkpLGI9YyhiLHUpfWZvcih1PXIrMSxvPTI7MTU+PXU7Kyt1LG88PD0xKXtpZih4Kz1TPDw9MSwwPihTLT1oW3VdKSlyZXR1cm4gMDtmb3IoOzA8aFt1XTstLWhbdV0pe2lmKGk9bmV3IGQsKGImeSkhPXYpe2ZvcihwKz1DLF89MTw8KHY9dSktcjsxNT52JiYhKDA+PShfLT1oW3ZdKSk7KSsrdixfPDw9MTttKz1DPTE8PChfPXYtciksZVtuKyh2PWImeSldLmc9XytyLGVbbit2XS52YWx1ZT1wLW4tdn1pLmc9dS1yLGkudmFsdWU9c1tmKytdLGwoZSxwKyhiPj5yKSxvLEMsaSksYj1jKGIsdSl9fXJldHVybiB4PT0yKmdbMTVdLTE/bTowfShlLG4scixpLG8scyl9ZnVuY3Rpb24gZCgpe3RoaXMudmFsdWU9dGhpcy5nPTB9ZnVuY3Rpb24gZigpe3RoaXMudmFsdWU9dGhpcy5nPTB9ZnVuY3Rpb24gcCgpe3RoaXMuRz1vKDUsZCksdGhpcy5IPWEoNSksdGhpcy5qYz10aGlzLlFiPXRoaXMucWI9dGhpcy5uZD0wLHRoaXMucGQ9byhHbixmKX1mdW5jdGlvbiBtKGUsbixyLGkpe3QoZSE9bnVsbCksdChuIT1udWxsKSx0KDIxNDc0ODM2NDg+aSksZS5DYT0yNTQsZS5JPTAsZS5iPS04LGUuS2E9MCxlLm9hPW4sZS5wYT1yLGUuSmQ9bixlLlljPXIraSxlLlpjPTQ8PWk/citpLTQrMTpyLEUoZSl9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgbj0wOzA8dC0tOylufD1PKGUsMTI4KTw8dDtyZXR1cm4gbn1mdW5jdGlvbiBnKGUsdCl7dmFyIG49aChlLHQpO3JldHVybiBEKGUpPy1uOm59ZnVuY3Rpb24gXyhlLG4scixpKXt2YXIgYSxvPTA7Zm9yKHQoZSE9bnVsbCksdChuIT1udWxsKSx0KDQyOTQ5NjcyODg+aSksZS5TYj1pLGUuUmE9MCxlLnU9MCxlLmg9MCw0PGkmJihpPTQpLGE9MDthPGk7KythKW8rPW5bcithXTw8OCphO2UuUmE9byxlLmJiPWksZS5vYT1uLGUucGE9cn1mdW5jdGlvbiB2KGUpe2Zvcig7ODw9ZS51JiZlLmJiPGUuU2I7KWUuUmE+Pj49OCxlLlJhKz1lLm9hW2UucGErZS5iYl08PEpuLTg+Pj4wLCsrZS5iYixlLnUtPTg7QyhlKSYmKGUuaD0xLGUudT0wKX1mdW5jdGlvbiB5KGUsbil7aWYodCgwPD1uKSwhZS5oJiZuPD1xbil7dmFyIHI9UyhlKSZLbltuXTtyZXR1cm4gZS51Kz1uLHYoZSkscn1yZXR1cm4gZS5oPTEsZS51PTB9ZnVuY3Rpb24gYigpe3RoaXMuYj10aGlzLkNhPXRoaXMuST0wLHRoaXMub2E9W10sdGhpcy5wYT0wLHRoaXMuSmQ9W10sdGhpcy5ZYz0wLHRoaXMuWmM9W10sdGhpcy5LYT0wfWZ1bmN0aW9uIHgoKXt0aGlzLlJhPTAsdGhpcy5vYT1bXSx0aGlzLmg9dGhpcy51PXRoaXMuYmI9dGhpcy5TYj10aGlzLnBhPTB9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZS5SYT4+PihlLnUmSm4tMSk+Pj4wfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIHQoZS5iYjw9ZS5TYiksZS5ofHxlLmJiPT1lLlNiJiZlLnU+Sm59ZnVuY3Rpb24gdyhlLHQpe2UudT10LGUuaD1DKGUpfWZ1bmN0aW9uIFQoZSl7ZS51Pj1ZbiYmKHQoZS51Pj1ZbiksdihlKSl9ZnVuY3Rpb24gRShlKXt0KGUhPW51bGwmJmUub2EhPW51bGwpLGUucGE8ZS5aYz8oZS5JPShlLm9hW2UucGErK118ZS5JPDw4KT4+PjAsZS5iKz04KToodChlIT1udWxsJiZlLm9hIT1udWxsKSxlLnBhPGUuWWM/KGUuYis9OCxlLkk9ZS5vYVtlLnBhKytdfGUuSTw8OCk6ZS5LYT9lLmI9MDooZS5JPDw9OCxlLmIrPTgsZS5LYT0xKSl9ZnVuY3Rpb24gRChlKXtyZXR1cm4gaChlLDEpfWZ1bmN0aW9uIE8oZSx0KXt2YXIgbj1lLkNhOzA+ZS5iJiZFKGUpO3ZhciByPWUuYixpPW4qdD4+PjgsYT0oZS5JPj4+cj5pKSswO2ZvcihhPyhuLT1pLGUuSS09aSsxPDxyPj4+MCk6bj1pKzEscj1uLGk9MDsyNTY8PXI7KWkrPTgscj4+PTg7cmV0dXJuIHI9N15pK1huW3JdLGUuYi09cixlLkNhPShuPDxyKS0xLGF9ZnVuY3Rpb24gayhlLHQsbil7ZVt0KzBdPW4+PjI0JjI1NSxlW3QrMV09bj4+MTYmMjU1LGVbdCsyXT1uPj44JjI1NSxlW3QrM109MjU1Jm59ZnVuY3Rpb24gQShlLHQpe3JldHVybiBlW3QrMF18ZVt0KzFdPDw4fWZ1bmN0aW9uIGooZSx0KXtyZXR1cm4gQShlLHQpfGVbdCsyXTw8MTZ9ZnVuY3Rpb24gTShlLHQpe3JldHVybiBBKGUsdCl8QShlLHQrMik8PDE2fWZ1bmN0aW9uIE4oZSxuKXt2YXIgcj0xPDxuO3JldHVybiB0KGUhPW51bGwpLHQoMDxuKSxlLlg9YShyKSxlLlg9PW51bGw/MDooZS5NYj0zMi1uLGUuWGE9biwxKX1mdW5jdGlvbiBQKGUsbil7dChlIT1udWxsKSx0KG4hPW51bGwpLHQoZS5YYT09bi5YYSkscihuLlgsMCxlLlgsMCwxPDxuLlhhKX1mdW5jdGlvbiBGKCl7dGhpcy5YPVtdLHRoaXMuWGE9dGhpcy5NYj0wfWZ1bmN0aW9uIEkoZSxuLHIsaSl7dChyIT1udWxsKSx0KGkhPW51bGwpO3ZhciBhPXJbMF0sbz1pWzBdO3JldHVybiBhPT0wJiYoYT0oZSpvK24vMikvbiksbz09MCYmKG89KG4qYStlLzIpL2UpLDA+PWF8fDA+PW8/MDooclswXT1hLGlbMF09bywxKX1mdW5jdGlvbiBMKGUsdCl7cmV0dXJuIGUrKDE8PHQpLTE+Pj50fWZ1bmN0aW9uIFIoZSx0KXtyZXR1cm4oKDQyNzgyNTUzNjAmZSkrKDQyNzgyNTUzNjAmdCk+Pj4wJjQyNzgyNTUzNjApKygoMTY3MTE5MzUmZSkrKDE2NzExOTM1JnQpPj4+MCYxNjcxMTkzNSk+Pj4wfWZ1bmN0aW9uIHoodCxuKXtlW25dPWZ1bmN0aW9uKG4scixpLGEsbyxzLGMpe3ZhciBsO2ZvcihsPTA7bDxvOysrbCl7dmFyIHU9ZVt0XShzW2MrbC0xXSxpLGErbCk7c1tjK2xdPVIobltyK2xdLHUpfX19ZnVuY3Rpb24gQigpe3RoaXMudWQ9dGhpcy5oZD10aGlzLmpkPTB9ZnVuY3Rpb24gVihlLHQpe3JldHVybigoNDI3ODEyNDI4NiYoZV50KSk+Pj4xKSsoZSZ0KT4+PjB9ZnVuY3Rpb24gZWUoZSl7cmV0dXJuIDA8PWUmJjI1Nj5lP2U6MD5lPzA6MjU1PGU/MjU1OnZvaWQgMH1mdW5jdGlvbiBIKGUsdCl7cmV0dXJuIGVlKGUrKGUtdCsuNT4+MSkpfWZ1bmN0aW9uIFUoZSx0LG4pe3JldHVybiBNYXRoLmFicyh0LW4pLU1hdGguYWJzKGUtbil9ZnVuY3Rpb24gVyhlLHQsbixyLGksYSxvKXtmb3Iocj1hW28tMV0sbj0wO248aTsrK24pYVtvK25dPXI9UihlW3Qrbl0scil9ZnVuY3Rpb24gRyhlLHQsbixyLGkpe3ZhciBhO2ZvcihhPTA7YTxuOysrYSl7dmFyIG89ZVt0K2FdLHM9bz4+OCYyNTUsYz0xNjcxMTkzNSYoYz0oYz0xNjcxMTkzNSZvKSsoKHM8PDE2KStzKSk7cltpK2FdPSg0Mjc4MjU1MzYwJm8pK2M+Pj4wfX1mdW5jdGlvbiB0ZShlLHQpe3QuamQ9MjU1JmUsdC5oZD1lPj44JjI1NSx0LnVkPWU+PjE2JjI1NX1mdW5jdGlvbiBuZShlLHQsbixyLGksYSl7dmFyIG87Zm9yKG89MDtvPHI7KytvKXt2YXIgcz10W24rb10sYz1zPj4+OCxsPXMsdT0yNTUmKHU9KHU9cz4+PjE2KSsoKGUuamQ8PDI0Pj4yNCkqKGM8PDI0Pj4yNCk+Pj41KSk7bD0yNTUmKGw9KGwrPShlLmhkPDwyND4+MjQpKihjPDwyND4+MjQpPj4+NSkrKChlLnVkPDwyND4+MjQpKih1PDwyND4+MjQpPj4+NSkpLGlbYStvXT0oNDI3ODI1NTM2MCZzKSsodTw8MTYpK2x9fWZ1bmN0aW9uIHJlKHQsbixyLGksYSl7ZVtuXT1mdW5jdGlvbihlLHQsbixyLG8scyxjLGwsdSl7Zm9yKHI9YztyPGw7KytyKWZvcihjPTA7Yzx1OysrYylvW3MrK109YShuW2koZVt0KytdKV0pfSxlW3RdPWZ1bmN0aW9uKHQsbixvLHMsYyxsLHUpe3ZhciBkPTg+PnQuYixmPXQuRWEscD10LktbMF0sbT10Lnc7aWYoOD5kKWZvcih0PSgxPDx0LmIpLTEsbT0oMTw8ZCktMTtuPG87KytuKXt2YXIgaCxnPTA7Zm9yKGg9MDtoPGY7KytoKWgmdHx8KGc9aShzW2MrK10pKSxsW3UrK109YShwW2cmbV0pLGc+Pj1kfWVsc2UgZVtgVlA4TE1hcENvbG9yYCtyXShzLGMscCxtLGwsdSxuLG8sZil9fWZ1bmN0aW9uIGllKGUsdCxuLHIsaSl7Zm9yKG49dCtuO3Q8bjspe3ZhciBhPWVbdCsrXTtyW2krK109YT4+MTYmMjU1LHJbaSsrXT1hPj44JjI1NSxyW2krK109MjU1JmF9fWZ1bmN0aW9uIGFlKGUsdCxuLHIsaSl7Zm9yKG49dCtuO3Q8bjspe3ZhciBhPWVbdCsrXTtyW2krK109YT4+MTYmMjU1LHJbaSsrXT1hPj44JjI1NSxyW2krK109MjU1JmEscltpKytdPWE+PjI0JjI1NX19ZnVuY3Rpb24gSyhlLHQsbixyLGkpe2ZvcihuPXQrbjt0PG47KXt2YXIgYT0obz1lW3QrK10pPj4xNiYyNDB8bz4+MTImMTUsbz0yNDAmb3xvPj4yOCYxNTtyW2krK109YSxyW2krK109b319ZnVuY3Rpb24gb2UoZSx0LG4scixpKXtmb3Iobj10K247dDxuOyl7dmFyIGE9KG89ZVt0KytdKT4+MTYmMjQ4fG8+PjEzJjcsbz1vPj41JjIyNHxvPj4zJjMxO3JbaSsrXT1hLHJbaSsrXT1vfX1mdW5jdGlvbiBzZShlLHQsbixyLGkpe2ZvcihuPXQrbjt0PG47KXt2YXIgYT1lW3QrK107cltpKytdPTI1NSZhLHJbaSsrXT1hPj44JjI1NSxyW2krK109YT4+MTYmMjU1fX1mdW5jdGlvbiBjZShlLHQsbixpLGEsbyl7aWYobz09MClmb3Iobj10K247dDxuOylrKGksKChvPWVbdCsrXSlbMF0+PjI0fG9bMV0+PjgmNjUyODB8b1syXTw8OCYxNjcxMTY4MHxvWzNdPDwyNCk+Pj4wKSxhKz0zMjtlbHNlIHIoaSxhLGUsdCxuKX1mdW5jdGlvbiBsZSh0LG4pe2Vbbl1bMF09ZVt0K2AwYF0sZVtuXVsxXT1lW3QrYDFgXSxlW25dWzJdPWVbdCtgMmBdLGVbbl1bM109ZVt0K2AzYF0sZVtuXVs0XT1lW3QrYDRgXSxlW25dWzVdPWVbdCtgNWBdLGVbbl1bNl09ZVt0K2A2YF0sZVtuXVs3XT1lW3QrYDdgXSxlW25dWzhdPWVbdCtgOGBdLGVbbl1bOV09ZVt0K2A5YF0sZVtuXVsxMF09ZVt0K2AxMGBdLGVbbl1bMTFdPWVbdCtgMTFgXSxlW25dWzEyXT1lW3QrYDEyYF0sZVtuXVsxM109ZVt0K2AxM2BdLGVbbl1bMTRdPWVbdCtgMGBdLGVbbl1bMTVdPWVbdCtgMGBdfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBlPT1Kcnx8ZT09WXJ8fGU9PVhyfHxlPT1acn1mdW5jdGlvbiBkZSgpe3RoaXMuZWI9W10sdGhpcy5zaXplPXRoaXMuQT10aGlzLmZiPTB9ZnVuY3Rpb24gZmUoKXt0aGlzLnk9W10sdGhpcy5mPVtdLHRoaXMuZWE9W10sdGhpcy5GPVtdLHRoaXMuVGM9dGhpcy5FZD10aGlzLkNkPXRoaXMuRmQ9dGhpcy5sYj10aGlzLkRiPXRoaXMuQWI9dGhpcy5mYT10aGlzLko9dGhpcy5XPXRoaXMuTj10aGlzLk89MH1mdW5jdGlvbiBwZSgpe3RoaXMuUmQ9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLlM9MCx0aGlzLmY9e30sdGhpcy5mLlJHQkE9bmV3IGRlLHRoaXMuZi5rYj1uZXcgZmUsdGhpcy5zZD1udWxsfWZ1bmN0aW9uIG1lKCl7dGhpcy53aWR0aD1bMF0sdGhpcy5oZWlnaHQ9WzBdLHRoaXMuUGQ9WzBdLHRoaXMuUWQ9WzBdLHRoaXMuZm9ybWF0PVswXX1mdW5jdGlvbiBoZSgpe3RoaXMuSWQ9dGhpcy5mZD10aGlzLk1kPXRoaXMuaGI9dGhpcy5pYj10aGlzLmRhPXRoaXMuYmQ9dGhpcy5jZD10aGlzLmo9dGhpcy52PXRoaXMuRGE9dGhpcy5TZD10aGlzLm9iPTB9ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIGFsZXJ0KGB0b2RvOldlYlBTYW1wbGVyUHJvY2Vzc1BsYW5lYCksZS5UfWZ1bmN0aW9uIF9lKGUsdCl7dmFyIG49ZS5ULGk9dC5iYS5mLlJHQkEsYT1pLmViLG89aS5mYitlLmthKmkuQSxzPVNpW3QuYmEuU10sYz1lLnksbD1lLk8sdT1lLmYsZD1lLk4sZj1lLmVhLHA9ZS5XLG09dC5jYyxoPXQuZGMsZz10Lk1jLF89dC5OYyx2PWUua2EseT1lLmthK2UuVCxiPWUuVSx4PWIrMT4+MTtmb3Iodj09MD9zKGMsbCxudWxsLG51bGwsdSxkLGYscCx1LGQsZixwLGEsbyxudWxsLG51bGwsYik6KHModC5lYyx0LmZjLGMsbCxtLGgsZyxfLHUsZCxmLHAsYSxvLWkuQSxhLG8sYiksKytuKTt2KzI8eTt2Kz0yKW09dSxoPWQsZz1mLF89cCxkKz1lLlJjLHArPWUuUmMsbys9MippLkEscyhjLChsKz0yKmUuZmEpLWUuZmEsYyxsLG0saCxnLF8sdSxkLGYscCxhLG8taS5BLGEsbyxiKTtyZXR1cm4gbCs9ZS5mYSxlLmoreTxlLm8/KHIodC5lYyx0LmZjLGMsbCxiKSxyKHQuY2MsdC5kYyx1LGQseCkscih0Lk1jLHQuTmMsZixwLHgpLG4tLSk6MSZ5fHxzKGMsbCxudWxsLG51bGwsdSxkLGYscCx1LGQsZixwLGEsbytpLkEsbnVsbCxudWxsLGIpLG59ZnVuY3Rpb24gdmUoZSxuLHIpe3ZhciBpPWUuRixhPVtlLkpdO2lmKGkhPW51bGwpe3ZhciBvPWUuVSxzPW4uYmEuUyxjPXM9PUdyfHxzPT1YcjtuPW4uYmEuZi5SR0JBO3ZhciBsPVswXSx1PWUua2E7bFswXT1lLlQsZS5LYiYmKHU9PTA/LS1sWzBdOigtLXUsYVswXS09ZS53aWR0aCksZS5qK2Uua2ErZS5UPT1lLm8mJihsWzBdPWUuby1lLmotdSkpO3ZhciBkPW4uZWI7dT1uLmZiK3Uqbi5BLGU9QXIoaSxhWzBdLGUud2lkdGgsbyxsLGQsdSsoYz8wOjMpLG4uQSksdChyPT1sKSxlJiZ1ZShzKSYmT3IoZCx1LGMsbyxsLG4uQSl9cmV0dXJuIDB9ZnVuY3Rpb24geWUoZSl7dmFyIHQ9ZS5tYSxuPXQuYmEuUyxyPTExPm4saT1uPT1Icnx8bj09V3J8fG49PUdyfHxuPT1Lcnx8bj09MTJ8fHVlKG4pO2lmKHQubWVtb3J5PW51bGwsdC5JYj1udWxsLHQuSmI9bnVsbCx0Lk5kPW51bGwsIUhuKHQuT2EsZSxpPzExOjEyKSlyZXR1cm4gMDtpZihpJiZ1ZShuKSYmVG4oKSxlLmRhKWFsZXJ0KGB0b2RvOnVzZV9zY2FsaW5nYCk7ZWxzZXtpZihyKXtpZih0LkliPWdlLGUuS2Ipe2lmKG49ZS5VKzE+PjEsdC5tZW1vcnk9YShlLlUrMipuKSx0Lm1lbW9yeT09bnVsbClyZXR1cm4gMDt0LmVjPXQubWVtb3J5LHQuZmM9MCx0LmNjPXQuZWMsdC5kYz10LmZjK2UuVSx0Lk1jPXQuY2MsdC5OYz10LmRjK24sdC5JYj1fZSxUbigpfX1lbHNlIGFsZXJ0KGB0b2RvOkVtaXRZVVZgKTtpJiYodC5KYj12ZSxyJiZDbigpKX1pZihyJiYhSWkpe2ZvcihlPTA7MjU2PmU7KytlKUxpW2VdPTg5ODU4KihlLTEyOCkramk+PkFpLEJpW2VdPS0yMjAxNCooZS0xMjgpK2ppLHppW2VdPS00NTc3MyooZS0xMjgpLFJpW2VdPTExMzYxOCooZS0xMjgpK2ppPj5BaTtmb3IoZT1NaTtlPE5pOysrZSl0PTc2MjgzKihlLTE2KStqaT4+QWksVmlbZS1NaV09UWUodCwyNTUpLEhpW2UtTWldPVFlKHQrOD4+NCwxNSk7SWk9MX1yZXR1cm4gMX1mdW5jdGlvbiBiZShlKXt2YXIgbj1lLm1hLHI9ZS5VLGk9ZS5UO3JldHVybiB0KCEoMSZlLmthKSksMD49cnx8MD49aT8wOihyPW4uSWIoZSxuKSxuLkpiIT1udWxsJiZuLkpiKGUsbixyKSxuLkRjKz1yLDEpfWZ1bmN0aW9uIHhlKGUpe2UubWEubWVtb3J5PW51bGx9ZnVuY3Rpb24gU2UoZSx0LG4scil7cmV0dXJuIHkoZSw4KT09NDc/KHRbMF09eShlLDE0KSsxLG5bMF09eShlLDE0KSsxLHJbMF09eShlLDEpLHkoZSwzKT09MD8hZS5oOjApOjB9ZnVuY3Rpb24gQ2UoZSx0KXtpZig0PmUpcmV0dXJuIGUrMTt2YXIgbj1lLTI+PjE7cmV0dXJuKDIrKDEmZSk8PG4pK3kodCxuKSsxfWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuIDEyMDx0P3QtMTIwOjE8PShuPSgobj1yaVt0LTFdKT4+NCkqZSsoOC0oMTUmbikpKT9uOjE7dmFyIG59ZnVuY3Rpb24gVGUoZSx0LG4pe3ZhciByPVMobiksaT1lW3QrPTI1NSZyXS5nLTg7cmV0dXJuIDA8aSYmKHcobixuLnUrOCkscj1TKG4pLHQrPWVbdF0udmFsdWUsdCs9ciYoMTw8aSktMSksdyhuLG4udStlW3RdLmcpLGVbdF0udmFsdWV9ZnVuY3Rpb24gRWUoZSxuLHIpe3JldHVybiByLmcrPWUuZyxyLnZhbHVlKz1lLnZhbHVlPDxuPj4+MCx0KDg+PXIuZyksZS5nfWZ1bmN0aW9uIERlKGUsbixyKXt2YXIgaT1lLnhjO3JldHVybiB0KChuPWk9PTA/MDplLnZjW2UubWQqKHI+PmkpKyhuPj5pKV0pPGUuV2IpLGUuWWFbbl19ZnVuY3Rpb24gT2UoZSxuLGksYSl7dmFyIG89ZS5hYixzPWUuYypuLGM9ZS5DO249YytuO3ZhciBsPWksdT1hO2ZvcihhPWUuVGEsaT1lLlVhOzA8by0tOyl7dmFyIGQ9ZS5nY1tvXSxmPWMscD1uLG09bCxoPXUsZz0odT1hLGw9aSxkLkVhKTtzd2l0Y2godChmPHApLHQocDw9ZC5uYyksZC5oYyl7Y2FzZSAyOiRuKG0saCwocC1mKSpnLHUsbCk7YnJlYWs7Y2FzZSAwOnZhciBfPWYsdj1wLHk9dSxiPWwseD0oRT1kKS5FYTtfPT0wJiYoWm4obSxoLG51bGwsbnVsbCwxLHksYiksVyhtLGgrMSwwLDAseC0xLHksYisxKSxoKz14LGIrPXgsKytfKTtmb3IodmFyIFM9MTw8RS5iLEM9Uy0xLHc9TCh4LEUuYiksVD1FLkssRT1FLncrKF8+PkUuYikqdztfPHY7KXt2YXIgRD1ULE89RSxrPTE7Zm9yKFFuKG0saCx5LGIteCwxLHksYik7azx4Oyl7dmFyIEE9KGsmfkMpK1M7QT54JiYoQT14KSwoMCxycltEW08rK10+PjgmMTVdKShtLGgrICtrLHksYitrLXgsQS1rLHksYitrKSxrPUF9aCs9eCxiKz14LCsrXyZDfHwoRSs9dyl9cCE9ZC5uYyYmcih1LGwtZyx1LGwrKHAtZi0xKSpnLGcpO2JyZWFrO2Nhc2UgMTpmb3IoZz1tLHY9aCx4PShtPWQuRWEpLShiPW0mfih5PShoPTE8PGQuYiktMSkpLF89TChtLGQuYiksUz1kLkssZD1kLncrKGY+PmQuYikqXztmPHA7KXtmb3IoQz1TLHc9ZCxUPW5ldyBCLEU9ditiLEQ9dittO3Y8RTspdGUoQ1t3KytdLFQpLGlyKFQsZyx2LGgsdSxsKSx2Kz1oLGwrPWg7djxEJiYodGUoQ1t3KytdLFQpLGlyKFQsZyx2LHgsdSxsKSx2Kz14LGwrPXgpLCsrZiZ5fHwoZCs9Xyl9YnJlYWs7Y2FzZSAzOmlmKG09PXUmJmg9PWwmJjA8ZC5iKXtmb3Iodj11LG09Zz1sKyhwLWYpKmctKGI9KHAtZikqTChkLkVhLGQuYikpLGg9dSx5PWwsXz1bXSxiPSh4PWIpLTE7MDw9YjstLWIpX1tiXT1oW3krYl07Zm9yKGI9eC0xOzA8PWI7LS1iKXZbbStiXT1fW2JdO2VyKGQsZixwLHUsZyx1LGwpfWVsc2UgZXIoZCxmLHAsbSxoLHUsbCl9bD1hLHU9aX11IT1pJiZyKGEsaSxsLHUscyl9ZnVuY3Rpb24ga2UoZSxuKXt2YXIgcj1lLlYsaT1lLkJhK2UuYyplLkMsYT1uLWUuQztpZih0KG48PWUubC5vKSx0KDE2Pj1hKSwwPGEpe3ZhciBvPWUubCxzPWUuVGEsYz1lLlVhLGw9by53aWR0aDtpZihPZShlLGEscixpKSxhPWM9W2NdLHQoKHI9ZS5DKTwoaT1uKSksdChvLnY8by52YSksaT5vLm8mJihpPW8ubykscjxvLmope3ZhciB1PW8uai1yO3I9by5qLGFbMF0rPXUqbH1pZihyPj1pP3I9MDooYVswXSs9NCpvLnYsby5rYT1yLW8uaixvLlU9by52YS1vLnYsby5UPWktcixyPTEpLHIpe2lmKGM9Y1swXSwxMT4ocj1lLmNhKS5TKXt2YXIgZD1yLmYuUkdCQSxmPShpPXIuUyxhPW8uVSxvPW8uVCx1PWQuZWIsZC5BKSxwPW87Zm9yKGQ9ZC5mYitlLk1hKmQuQTswPHAtLTspe3ZhciBtPXMsaD1jLGc9YSxfPXUsdj1kO3N3aXRjaChpKXtjYXNlIFZyOmFyKG0saCxnLF8sdik7YnJlYWs7Y2FzZSBIcjpvcihtLGgsZyxfLHYpO2JyZWFrO2Nhc2UgSnI6b3IobSxoLGcsXyx2KSxPcihfLHYsMCxnLDEsMCk7YnJlYWs7Y2FzZSBVcjpscihtLGgsZyxfLHYpO2JyZWFrO2Nhc2UgV3I6Y2UobSxoLGcsXyx2LDEpO2JyZWFrO2Nhc2UgWXI6Y2UobSxoLGcsXyx2LDEpLE9yKF8sdiwwLGcsMSwwKTticmVhaztjYXNlIEdyOmNlKG0saCxnLF8sdiwwKTticmVhaztjYXNlIFhyOmNlKG0saCxnLF8sdiwwKSxPcihfLHYsMSxnLDEsMCk7YnJlYWs7Y2FzZSBLcjpzcihtLGgsZyxfLHYpO2JyZWFrO2Nhc2UgWnI6c3IobSxoLGcsXyx2KSxrcihfLHYsZywxLDApO2JyZWFrO2Nhc2UgcXI6Y3IobSxoLGcsXyx2KTticmVhaztkZWZhdWx0OnQoMCl9Yys9bCxkKz1mfWUuTWErPW99ZWxzZSBhbGVydChgdG9kbzpFbWl0UmVzY2FsZWRSb3dzWVVWQWApO3QoZS5NYTw9ci5oZWlnaHQpfX1lLkM9bix0KGUuQzw9ZS5pKX1mdW5jdGlvbiBBZShlKXt2YXIgdDtpZigwPGUudWEpcmV0dXJuIDA7Zm9yKHQ9MDt0PGUuV2I7Kyt0KXt2YXIgbj1lLllhW3RdLkcscj1lLllhW3RdLkg7aWYoMDxuWzFdW3JbMV0rMF0uZ3x8MDxuWzJdW3JbMl0rMF0uZ3x8MDxuWzNdW3JbM10rMF0uZylyZXR1cm4gMH1yZXR1cm4gMX1mdW5jdGlvbiBqZShlLG4scixpLGEsbyl7aWYoZS5aIT0wKXt2YXIgcz1lLnFkLGM9ZS5yZDtmb3IodCh4aVtlLlpdIT1udWxsKTtuPHI7KytuKXhpW2UuWl0ocyxjLGksYSxpLGEsbykscz1pLGM9YSxhKz1vO2UucWQ9cyxlLnJkPWN9fWZ1bmN0aW9uIE1lKGUsbil7dmFyIHI9ZS5sLm1hLGk9ci5aPT0wfHxyLlo9PTE/ZS5sLmo6ZS5DO2lmKGk9ZS5DPGk/aTplLkMsdChuPD1lLmwubyksbj5pKXt2YXIgYT1lLmwud2lkdGgsbz1yLmNhLHM9ci50YithKmksYz1lLlYsbD1lLkJhK2UuYyppLHU9ZS5nYzt0KGUuYWI9PTEpLHQodVswXS5oYz09MykscSh1WzBdLGksbixjLGwsbyxzKSxqZShyLGksbixvLHMsYSl9ZS5DPWUuTWE9bn1mdW5jdGlvbiBOZShlLG4scixpLGEsbyxzKXt2YXIgYz1lLiQvaSxsPWUuJCVpLHU9ZS5tLGQ9ZS5zLGY9citlLiQscD1mO2E9citpKmE7dmFyIG09citpKm8saD0yODArZC51YSxnPWUuUGI/YzoxNjc3NzIxNixfPTA8ZC51YT9kLldhOm51bGwsdj1kLndjLHk9ZjxtP0RlKGQsbCxjKTpudWxsO3QoZS5DPG8pLHQobTw9YSk7dmFyIGI9ITE7dDpmb3IoOzspe2Zvcig7Ynx8ZjxtOyl7dmFyIHg9MDtpZihjPj1nKXt2YXIgRT1mLXI7dCgoZz1lKS5QYiksZy53ZD1nLm0sZy54ZD1FLDA8Zy5zLnVhJiZQKGcucy5XYSxnLnMudmIpLGc9YythaX1pZihsJnZ8fCh5PURlKGQsbCxjKSksdCh5IT1udWxsKSx5LlFiJiYobltmXT15LnFiLGI9ITApLCFiKWlmKFQodSkseS5qYyl7eD11LEU9bjt2YXIgRD1mLE89eS5wZFtTKHgpJkduLTFdO3QoeS5qYyksMjU2Pk8uZz8odyh4LHgudStPLmcpLEVbRF09Ty52YWx1ZSx4PTApOih3KHgseC51K08uZy0yNTYpLHQoMjU2PD1PLnZhbHVlKSx4PU8udmFsdWUpLHg9PTAmJihiPSEwKX1lbHNlIHg9VGUoeS5HWzBdLHkuSFswXSx1KTtpZih1LmgpYnJlYWs7aWYoYnx8MjU2Pngpe2lmKCFiKWlmKHkubmQpbltmXT0oeS5xYnx4PDw4KT4+PjA7ZWxzZXtpZihUKHUpLGI9VGUoeS5HWzFdLHkuSFsxXSx1KSxUKHUpLEU9VGUoeS5HWzJdLHkuSFsyXSx1KSxEPVRlKHkuR1szXSx5LkhbM10sdSksdS5oKWJyZWFrO25bZl09KEQ8PDI0fGI8PDE2fHg8PDh8RSk+Pj4wfWlmKGI9ITEsKytmLCsrbD49aSYmKGw9MCwrK2MscyE9bnVsbCYmYzw9byYmIShjJTE2KSYmcyhlLGMpLF8hPW51bGwpKWZvcig7cDxmOyl4PW5bcCsrXSxfLlhbKDUwNjgzMjgyOSp4JjQyOTQ5NjcyOTUpPj4+Xy5NYl09eH1lbHNlIGlmKDI4MD54KXtpZih4PUNlKHgtMjU2LHUpLEU9VGUoeS5HWzRdLHkuSFs0XSx1KSxUKHUpLEU9d2UoaSxFPUNlKEUsdSkpLHUuaClicmVhaztpZihmLXI8RXx8YS1mPHgpYnJlYWsgdDtmb3IoRD0wO0Q8eDsrK0QpbltmK0RdPW5bZitELUVdO2ZvcihmKz14LGwrPXg7bD49aTspbC09aSwrK2MscyE9bnVsbCYmYzw9byYmIShjJTE2KSYmcyhlLGMpO2lmKHQoZjw9YSksbCZ2JiYoeT1EZShkLGwsYykpLF8hPW51bGwpZm9yKDtwPGY7KXg9bltwKytdLF8uWFsoNTA2ODMyODI5KngmNDI5NDk2NzI5NSk+Pj5fLk1iXT14fWVsc2V7aWYoISh4PGgpKWJyZWFrIHQ7Zm9yKGI9eC0yODAsdChfIT1udWxsKTtwPGY7KXg9bltwKytdLF8uWFsoNTA2ODMyODI5KngmNDI5NDk2NzI5NSk+Pj5fLk1iXT14O3g9Zix0KCEoYj4+PihFPV8pLlhhKSksblt4XT1FLlhbYl0sYj0hMH1ifHx0KHUuaD09Qyh1KSl9aWYoZS5QYiYmdS5oJiZmPGEpdChlLm0uaCksZS5hPTUsZS5tPWUud2QsZS4kPWUueGQsMDxlLnMudWEmJlAoZS5zLnZiLGUucy5XYSk7ZWxzZXtpZih1LmgpYnJlYWsgdDtzPy4oZSxjPm8/bzpjKSxlLmE9MCxlLiQ9Zi1yfXJldHVybiAxfXJldHVybiBlLmE9MywwfWZ1bmN0aW9uIFBlKGUpe3QoZSE9bnVsbCksZS52Yz1udWxsLGUueWM9bnVsbCxlLllhPW51bGw7dmFyIG49ZS5XYTtuIT1udWxsJiYobi5YPW51bGwpLGUudmI9bnVsbCx0KGUhPW51bGwpfWZ1bmN0aW9uIEZlKCl7dmFyIHQ9bmV3IHBuO3JldHVybiB0PT1udWxsP251bGw6KHQuYT0wLHQueGI9YmksbGUoYFByZWRpY3RvcmAsYFZQOExQcmVkaWN0b3JzYCksbGUoYFByZWRpY3RvcmAsYFZQOExQcmVkaWN0b3JzX0NgKSxsZShgUHJlZGljdG9yQWRkYCxgVlA4TFByZWRpY3RvcnNBZGRgKSxsZShgUHJlZGljdG9yQWRkYCxgVlA4TFByZWRpY3RvcnNBZGRfQ2ApLCRuPUcsaXI9bmUsYXI9aWUsb3I9YWUsc3I9Syxjcj1vZSxscj1zZSxlLlZQOExNYXBDb2xvcjMyYj10cixlLlZQOExNYXBDb2xvcjhiPW5yLHQpfWZ1bmN0aW9uIEllKGUsbixyLHMsYyl7dmFyIGw9MSxmPVtlXSxtPVtuXSxoPXMubSxnPXMucyxfPW51bGwsdj0wO3Q6Zm9yKDs7KXtpZihyKWZvcig7bCYmeShoLDEpOyl7dmFyIGI9Zix4PW0sQz1zLEU9MSxEPUMubSxPPUMuZ2NbQy5hYl0saz15KEQsMik7aWYoQy5PYyYxPDxrKWw9MDtlbHNle3N3aXRjaChDLk9jfD0xPDxrLE8uaGM9ayxPLkVhPWJbMF0sTy5uYz14WzBdLE8uSz1bbnVsbF0sKytDLmFiLHQoND49Qy5hYiksayl7Y2FzZSAwOmNhc2UgMTpPLmI9eShELDMpKzIsRT1JZShMKE8uRWEsTy5iKSxMKE8ubmMsTy5iKSwwLEMsTy5LKSxPLks9Ty5LWzBdO2JyZWFrO2Nhc2UgMzp2YXIgQSxqPXkoRCw4KSsxLE09MTY8aj8wOjQ8aj8xOjI8aj8yOjM7aWYoYlswXT1MKE8uRWEsTSksTy5iPU0sQT1FPUllKGosMSwwLEMsTy5LKSl7dmFyIFAsRj1qLEk9Tyx6PTE8PCg4Pj5JLmIpLEI9YSh6KTtpZihCPT1udWxsKUE9MDtlbHNle3ZhciBWPUkuS1swXSxlZT1JLnc7Zm9yKEJbMF09SS5LWzBdWzBdLFA9MTtQPDEqRjsrK1ApQltQXT1SKFZbZWUrUF0sQltQLTFdKTtmb3IoO1A8NCp6OysrUClCW1BdPTA7SS5LWzBdPW51bGwsSS5LWzBdPUIsQT0xfX1FPUE7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dCgwKX1sPUV9fWlmKGY9ZlswXSxtPW1bMF0sbCYmeShoLDEpJiYhKGw9MTw9KHY9eShoLDQpKSYmMTE+PXYpKXtzLmE9MzticmVhayB0fXZhciBIO2lmKEg9bCllOnt2YXIgVSxXLEcsdGU9cyxuZT1mLHJlPW0saWU9dixhZT1yLEs9dGUubSxvZT10ZS5zLHNlPVtudWxsXSxjZT0xLGxlPTAsdWU9aWlbaWVdO3I6Zm9yKDs7KXtpZihhZSYmeShLLDEpKXt2YXIgZGU9eShLLDMpKzIsZmU9TChuZSxkZSkscGU9TChyZSxkZSksbWU9ZmUqcGU7aWYoIUllKGZlLHBlLDAsdGUsc2UpKWJyZWFrIHI7Zm9yKHNlPXNlWzBdLG9lLnhjPWRlLFU9MDtVPG1lOysrVSl7dmFyIGhlPXNlW1VdPj44JjY1NTM1O3NlW1VdPWhlLGhlPj1jZSYmKGNlPWhlKzEpfX1pZihLLmgpYnJlYWsgcjtmb3IoVz0wOzU+VzsrK1cpe3ZhciBnZT1laVtXXTshVyYmMDxpZSYmKGdlKz0xPDxpZSksbGU8Z2UmJihsZT1nZSl9dmFyIF9lPW8oY2UqdWUsZCksdmU9Y2UseWU9byh2ZSxwKTtpZih5ZT09bnVsbCl2YXIgYmU9bnVsbDtlbHNlIHQoNjU1MzY+PXZlKSxiZT15ZTt2YXIgeGU9YShsZSk7aWYoYmU9PW51bGx8fHhlPT1udWxsfHxfZT09bnVsbCl7dGUuYT0xO2JyZWFrIHJ9dmFyIFNlPV9lO2ZvcihVPUc9MDtVPGNlOysrVSl7dmFyIENlPWJlW1VdLHdlPUNlLkcsVGU9Q2UuSCxEZT0wLE9lPTEsa2U9MDtmb3IoVz0wOzU+VzsrK1cpe2dlPWVpW1ddLHdlW1ddPVNlLFRlW1ddPUcsIVcmJjA8aWUmJihnZSs9MTw8aWUpO246e3ZhciBBZSxqZT1nZSxNZT10ZSxGZT14ZSxMZT1TZSxSZT1HLHplPTAsQmU9TWUubSxWZT15KEJlLDEpO2lmKGkoRmUsMCwwLGplKSxWZSl7dmFyIEhlPXkoQmUsMSkrMSxVZT15KEJlLHkoQmUsMSk9PTA/MTo4KTtGZVtVZV09MSxIZT09MiYmKEZlW1VlPXkoQmUsOCldPTEpO3ZhciBXZT0xfWVsc2V7dmFyIEdlPWEoMTkpLEtlPXkoQmUsNCkrNDtpZigxOTxLZSl7TWUuYT0zO3ZhciBxZT0wO2JyZWFrIG59Zm9yKEFlPTA7QWU8S2U7KytBZSlHZVtuaVtBZV1dPXkoQmUsMyk7dmFyIEplPXZvaWQgMCxZZT12b2lkIDAsWGU9TWUsWmU9R2UsUWU9amUsJGU9RmUsZXQ9MCx0dD1YZS5tLG50PTgscnQ9bygxMjgsZCk7aTpmb3IoO3UocnQsMCw3LFplLDE5KTspe2lmKHkodHQsMSkpe2lmKChKZT0yK3kodHQsMisyKnkodHQsMykpKT5RZSlicmVhayBpfWVsc2UgSmU9UWU7Zm9yKFllPTA7WWU8UWUmJkplLS07KXtUKHR0KTt2YXIgaXQ9cnRbMCsoMTI3JlModHQpKV07dyh0dCx0dC51K2l0LmcpO3ZhciBhdD1pdC52YWx1ZTtpZigxNj5hdCkkZVtZZSsrXT1hdCxhdCE9MCYmKG50PWF0KTtlbHNle3ZhciBvdD1hdD09MTYsc3Q9YXQtMTYsY3Q9JHJbc3RdLGx0PXkodHQsUXJbc3RdKStjdDtpZihZZStsdD5RZSlicmVhayBpO2Zvcih2YXIgdXQ9b3Q/bnQ6MDswPGx0LS07KSRlW1llKytdPXV0fX1ldD0xO2JyZWFrIGl9ZXR8fChYZS5hPTMpLFdlPWV0fShXZSYmPSFCZS5oKSYmKHplPXUoTGUsUmUsOCxGZSxqZSkpLFdlJiZ6ZSE9MD9xZT16ZTooTWUuYT0zLHFlPTApfWlmKHFlPT0wKWJyZWFrIHI7aWYoT2UmJnRpW1ddPT0xJiYoT2U9U2VbR10uZz09MCksRGUrPVNlW0ddLmcsRys9cWUsMz49Vyl7dmFyIGR0LGZ0PXhlWzBdO2ZvcihkdD0xO2R0PGdlOysrZHQpeGVbZHRdPmZ0JiYoZnQ9eGVbZHRdKTtrZSs9ZnR9fWlmKENlLm5kPU9lLENlLlFiPTAsT2UmJihDZS5xYj0od2VbM11bVGVbM10rMF0udmFsdWU8PDI0fHdlWzFdW1RlWzFdKzBdLnZhbHVlPDwxNnx3ZVsyXVtUZVsyXSswXS52YWx1ZSk+Pj4wLERlPT0wJiYyNTY+d2VbMF1bVGVbMF0rMF0udmFsdWUmJihDZS5RYj0xLENlLnFiKz13ZVswXVtUZVswXSswXS52YWx1ZTw8OCkpLENlLmpjPSFDZS5RYiYmNj5rZSxDZS5qYyl7dmFyIHB0LG10PUNlO2ZvcihwdD0wO3B0PEduOysrcHQpe3ZhciBodD1wdCxndD1tdC5wZFtodF0sX3Q9bXQuR1swXVttdC5IWzBdK2h0XTsyNTY8PV90LnZhbHVlPyhndC5nPV90LmcrMjU2LGd0LnZhbHVlPV90LnZhbHVlKTooZ3QuZz0wLGd0LnZhbHVlPTAsaHQ+Pj1FZShfdCw4LGd0KSxodD4+PUVlKG10LkdbMV1bbXQuSFsxXStodF0sMTYsZ3QpLGh0Pj49RWUobXQuR1syXVttdC5IWzJdK2h0XSwwLGd0KSxFZShtdC5HWzNdW210LkhbM10raHRdLDI0LGd0KSl9fX1vZS52Yz1zZSxvZS5XYj1jZSxvZS5ZYT1iZSxvZS55Yz1fZSxIPTE7YnJlYWsgZX1IPTB9aWYoIShsPUgpKXtzLmE9MzticmVhayB0fWlmKDA8dil7aWYoZy51YT0xPDx2LCFOKGcuV2Esdikpe3MuYT0xLGw9MDticmVhayB0fX1lbHNlIGcudWE9MDt2YXIgdnQ9cyx5dD1mLGJ0PW0seHQ9dnQucyxTdD14dC54YztpZih2dC5jPXl0LHZ0Lmk9YnQseHQubWQ9TCh5dCxTdCkseHQud2M9U3Q9PTA/LTE6KDE8PFN0KS0xLHIpe3MueGI9eWk7YnJlYWsgdH1pZigoXz1hKGYqbSkpPT1udWxsKXtzLmE9MSxsPTA7YnJlYWsgdH1sPShsPU5lKHMsXywwLGYsbSxtLG51bGwpKSYmIWguaDticmVhayB0fXJldHVybiBsPyhjPT1udWxsPyh0KF89PW51bGwpLHQocikpOmNbMF09XyxzLiQ9MCxyfHxQZShnKSk6UGUoZyksbH1mdW5jdGlvbiBMZShlLG4pe3ZhciByPWUuYyplLmksaT1yK24rMTYqbjtyZXR1cm4gdChlLmM8PW4pLGUuVj1hKGkpLGUuVj09bnVsbD8oZS5UYT1udWxsLGUuVWE9MCxlLmE9MSwwKTooZS5UYT1lLlYsZS5VYT1lLkJhK3IrbiwxKX1mdW5jdGlvbiBSZShlLG4pe3ZhciByPWUuQyxpPW4tcixhPWUuVixvPWUuQmErZS5jKnI7Zm9yKHQobjw9ZS5sLm8pOzA8aTspe3ZhciBzPTE2PGk/MTY6aSxjPWUubC5tYSxsPWUubC53aWR0aCx1PWwqcyxkPWMuY2EsZj1jLnRiK2wqcixwPWUuVGEsbT1lLlVhO09lKGUscyxhLG8pLGpyKHAsbSxkLGYsdSksamUoYyxyLHIrcyxkLGYsbCksaS09cyxhKz1zKmUuYyxyKz1zfXQocj09biksZS5DPWUuTWE9bn1mdW5jdGlvbiB6ZSgpe3RoaXMudWI9dGhpcy55ZD10aGlzLnRkPXRoaXMuUmI9MH1mdW5jdGlvbiBCZSgpe3RoaXMuS2Q9dGhpcy5MZD10aGlzLlVkPXRoaXMuVGQ9dGhpcy5pPXRoaXMuYz0wfWZ1bmN0aW9uIFZlKCl7dGhpcy5GYj10aGlzLkJiPXRoaXMuQ2I9MCx0aGlzLlpiPWEoNCksdGhpcy5MYj1hKDQpfWZ1bmN0aW9uIEhlKCl7dGhpcy5ZYj1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmb3IodmFyIGk9cltuXSxhPTA7YTxpJiYodC5wdXNoKHIubGVuZ3RoPm4rMT9bXTowKSwhKHIubGVuZ3RoPG4rMSkpO2ErKyllKHRbYV0sbisxLHIpfShlLDAsWzMsMTFdKSxlfSgpfWZ1bmN0aW9uIFVlKCl7dGhpcy5qYj1hKDMpLHRoaXMuV2M9cyhbNCw4XSxIZSksdGhpcy5YYz1zKFs0LDE3XSxIZSl9ZnVuY3Rpb24gV2UoKXt0aGlzLlBjPXRoaXMud2I9dGhpcy5UYj10aGlzLnpkPTAsdGhpcy52ZD1uZXcgYSg0KSx0aGlzLm9kPW5ldyBhKDQpfWZ1bmN0aW9uIEdlKCl7dGhpcy5sZD10aGlzLkxhPXRoaXMuZGQ9dGhpcy50Yz0wfWZ1bmN0aW9uIEtlKCl7dGhpcy5OYT10aGlzLmxhPTB9ZnVuY3Rpb24gcWUoKXt0aGlzLlNjPVswLDBdLHRoaXMuRWI9WzAsMF0sdGhpcy5RYz1bMCwwXSx0aGlzLmlhPXRoaXMubGM9MH1mdW5jdGlvbiBKZSgpe3RoaXMuYWQ9YSgzODQpLHRoaXMuWmE9MCx0aGlzLk9iPWEoMTYpLHRoaXMuJGI9dGhpcy5BZD10aGlzLmlhPXRoaXMuR2M9dGhpcy5IYz10aGlzLkRkPTB9ZnVuY3Rpb24gWWUoKXt0aGlzLnVjPXRoaXMuTT10aGlzLk5iPTAsdGhpcy53YT1BcnJheShuZXcgR2UpLHRoaXMuWT0wLHRoaXMueWE9QXJyYXkobmV3IEplKSx0aGlzLmFhPTAsdGhpcy5sPW5ldyAkZX1mdW5jdGlvbiBYZSgpe3RoaXMueT1hKDE2KSx0aGlzLmY9YSg4KSx0aGlzLmVhPWEoOCl9ZnVuY3Rpb24gWmUoKXt0aGlzLmNiPXRoaXMuYT0wLHRoaXMuc2M9YGAsdGhpcy5tPW5ldyBiLHRoaXMuT2Q9bmV3IHplLHRoaXMuS2M9bmV3IEJlLHRoaXMuZWQ9bmV3IFdlLHRoaXMuUWE9bmV3IFZlLHRoaXMuSWM9dGhpcy4kYz10aGlzLkFhPTAsdGhpcy5EPW5ldyBZZSx0aGlzLlhiPXRoaXMuVmE9dGhpcy5IYj10aGlzLnpiPXRoaXMueWI9dGhpcy5VYj10aGlzLnphPTAsdGhpcy5KYz1vKDgsYiksdGhpcy5pYT0wLHRoaXMucGI9byg0LHFlKSx0aGlzLlBhPW5ldyBVZSx0aGlzLkJkPXRoaXMua2M9MCx0aGlzLkFjPVtdLHRoaXMuQmM9MCx0aGlzLnpjPVswLDAsMCwwXSx0aGlzLkdkPUFycmF5KG5ldyBYZSksdGhpcy5IZD0wLHRoaXMucmI9QXJyYXkobmV3IEtlKSx0aGlzLnNiPTAsdGhpcy53YT1BcnJheShuZXcgR2UpLHRoaXMuWT0wLHRoaXMub2M9W10sdGhpcy5wYz0wLHRoaXMuc2E9W10sdGhpcy50YT0wLHRoaXMucWE9W10sdGhpcy5yYT0wLHRoaXMuSGE9W10sdGhpcy5CPXRoaXMuUj10aGlzLklhPTAsdGhpcy5FYz1bXSx0aGlzLk09dGhpcy5qYT10aGlzLlZiPXRoaXMuRmM9MCx0aGlzLnlhPUFycmF5KG5ldyBKZSksdGhpcy5MPXRoaXMuYWE9MCx0aGlzLmdkPXMoWzQsMl0sR2UpLHRoaXMuZ2E9bnVsbCx0aGlzLkZhPVtdLHRoaXMuQ2M9dGhpcy5xYz10aGlzLlA9MCx0aGlzLkdiPVtdLHRoaXMuVWM9MCx0aGlzLm1iPVtdLHRoaXMubmI9MCx0aGlzLnJjPVtdLHRoaXMuR2E9dGhpcy5WYz0wfWZ1bmN0aW9uIFFlKGUsdCl7cmV0dXJuIDA+ZT8wOmU+dD90OmV9ZnVuY3Rpb24gJGUoKXt0aGlzLlQ9dGhpcy5VPXRoaXMua2E9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMueT1bXSx0aGlzLmY9W10sdGhpcy5lYT1bXSx0aGlzLlJjPXRoaXMuZmE9dGhpcy5XPXRoaXMuTj10aGlzLk89MCx0aGlzLm1hPWB2b2lkYCx0aGlzLnB1dD1gVlA4SW9QdXRIb29rYCx0aGlzLmFjPWBWUDhJb1NldHVwSG9va2AsdGhpcy5iYz1gVlA4SW9UZWFyZG93bkhvb2tgLHRoaXMuaGE9dGhpcy5LYj0wLHRoaXMuZGF0YT1bXSx0aGlzLmhiPXRoaXMuaWI9dGhpcy5kYT10aGlzLm89dGhpcy5qPXRoaXMudmE9dGhpcy52PXRoaXMuRGE9dGhpcy5vYj10aGlzLnc9MCx0aGlzLkY9W10sdGhpcy5KPTB9ZnVuY3Rpb24gZXQoKXt2YXIgZT1uZXcgWmU7cmV0dXJuIGUhPW51bGwmJihlLmE9MCxlLnNjPWBPS2AsZS5jYj0wLGUuWGI9MCxjaXx8PWl0KSxlfWZ1bmN0aW9uIHR0KGUsdCxuKXtyZXR1cm4gZS5hPT0wJiYoZS5hPXQsZS5zYz1uLGUuY2I9MCksMH1mdW5jdGlvbiBudChlLHQsbil7cmV0dXJuIDM8PW4mJmVbdCswXT09MTU3JiZlW3QrMV09PTEmJmVbdCsyXT09NDJ9ZnVuY3Rpb24gcnQoZSxuKXtpZihlPT1udWxsKXJldHVybiAwO2lmKGUuYT0wLGUuc2M9YE9LYCxuPT1udWxsKXJldHVybiB0dChlLDIsYG51bGwgVlA4SW8gcGFzc2VkIHRvIFZQOEdldEhlYWRlcnMoKWApO3ZhciByPW4uZGF0YSxhPW4udyxvPW4uaGE7aWYoND5vKXJldHVybiB0dChlLDcsYFRydW5jYXRlZCBoZWFkZXIuYCk7dmFyIHM9clthKzBdfHJbYSsxXTw8OHxyW2ErMl08PDE2LGM9ZS5PZDtpZihjLlJiPSEoMSZzKSxjLnRkPXM+PjEmNyxjLnlkPXM+PjQmMSxjLnViPXM+PjUsMzxjLnRkKXJldHVybiB0dChlLDMsYEluY29ycmVjdCBrZXlmcmFtZSBwYXJhbWV0ZXJzLmApO2lmKCFjLnlkKXJldHVybiB0dChlLDQsYEZyYW1lIG5vdCBkaXNwbGF5YWJsZS5gKTthKz0zLG8tPTM7dmFyIGw9ZS5LYztpZihjLlJiKXtpZig3Pm8pcmV0dXJuIHR0KGUsNyxgY2Fubm90IHBhcnNlIHBpY3R1cmUgaGVhZGVyYCk7aWYoIW50KHIsYSxvKSlyZXR1cm4gdHQoZSwzLGBCYWQgY29kZSB3b3JkYCk7bC5jPTE2MzgzJihyW2ErNF08PDh8clthKzNdKSxsLlRkPXJbYSs0XT4+NixsLmk9MTYzODMmKHJbYSs2XTw8OHxyW2ErNV0pLGwuVWQ9clthKzZdPj42LGErPTcsby09NyxlLnphPWwuYysxNT4+NCxlLlViPWwuaSsxNT4+NCxuLndpZHRoPWwuYyxuLmhlaWdodD1sLmksbi5EYT0wLG4uaj0wLG4udj0wLG4udmE9bi53aWR0aCxuLm89bi5oZWlnaHQsbi5kYT0wLG4uaWI9bi53aWR0aCxuLmhiPW4uaGVpZ2h0LG4uVT1uLndpZHRoLG4uVD1uLmhlaWdodCxpKChzPWUuUGEpLmpiLDAsMjU1LHMuamIubGVuZ3RoKSx0KChzPWUuUWEpIT1udWxsKSxzLkNiPTAscy5CYj0wLHMuRmI9MSxpKHMuWmIsMCwwLHMuWmIubGVuZ3RoKSxpKHMuTGIsMCwwLHMuTGIpfWlmKGMudWI+bylyZXR1cm4gdHQoZSw3LGBiYWQgcGFydGl0aW9uIGxlbmd0aGApO20ocz1lLm0scixhLGMudWIpLGErPWMudWIsby09Yy51YixjLlJiJiYobC5MZD1EKHMpLGwuS2Q9RChzKSksbD1lLlFhO3ZhciB1LGQ9ZS5QYTtpZih0KHMhPW51bGwpLHQobCE9bnVsbCksbC5DYj1EKHMpLGwuQ2Ipe2lmKGwuQmI9RChzKSxEKHMpKXtmb3IobC5GYj1EKHMpLHU9MDs0PnU7Kyt1KWwuWmJbdV09RChzKT9nKHMsNyk6MDtmb3IodT0wOzQ+dTsrK3UpbC5MYlt1XT1EKHMpP2cocyw2KTowfWlmKGwuQmIpZm9yKHU9MDszPnU7Kyt1KWQuamJbdV09RChzKT9oKHMsOCk6MjU1fWVsc2UgbC5CYj0wO2lmKHMuS2EpcmV0dXJuIHR0KGUsMyxgY2Fubm90IHBhcnNlIHNlZ21lbnQgaGVhZGVyYCk7aWYoKGw9ZS5lZCkuemQ9RChzKSxsLlRiPWgocyw2KSxsLndiPWgocywzKSxsLlBjPUQocyksbC5QYyYmRChzKSl7Zm9yKGQ9MDs0PmQ7KytkKUQocykmJihsLnZkW2RdPWcocyw2KSk7Zm9yKGQ9MDs0PmQ7KytkKUQocykmJihsLm9kW2RdPWcocyw2KSl9aWYoZS5MPWwuVGI9PTA/MDpsLnpkPzE6MixzLkthKXJldHVybiB0dChlLDMsYGNhbm5vdCBwYXJzZSBmaWx0ZXIgaGVhZGVyYCk7dmFyIGY9bztpZihvPXU9YSxhPXUrZixsPWYsZS5YYj0oMTw8aChlLm0sMikpLTEsZjwzKihkPWUuWGIpKXI9NztlbHNle2Zvcih1Kz0zKmQsbC09MypkLGY9MDtmPGQ7KytmKXt2YXIgcD1yW28rMF18cltvKzFdPDw4fHJbbysyXTw8MTY7cD5sJiYocD1sKSxtKGUuSmNbK2ZdLHIsdSxwKSx1Kz1wLGwtPXAsbys9M31tKGUuSmNbK2RdLHIsdSxsKSxyPXU8YT8wOjV9aWYociE9MClyZXR1cm4gdHQoZSxyLGBjYW5ub3QgcGFyc2UgcGFydGl0aW9uc2ApO2ZvcihyPWgodT1lLm0sNyksbz1EKHUpP2codSw0KTowLGE9RCh1KT9nKHUsNCk6MCxsPUQodSk/Zyh1LDQpOjAsZD1EKHUpP2codSw0KTowLHU9RCh1KT9nKHUsNCk6MCxmPWUuUWEscD0wOzQ+cDsrK3Ape2lmKGYuQ2Ipe3ZhciBfPWYuWmJbcF07Zi5GYnx8KF8rPXIpfWVsc2V7aWYoMDxwKXtlLnBiW3BdPWUucGJbMF07Y29udGludWV9Xz1yfXZhciB2PWUucGJbcF07di5TY1swXT1vaVtRZShfK28sMTI3KV0sdi5TY1sxXT1zaVtRZShfKzAsMTI3KV0sdi5FYlswXT0yKm9pW1FlKF8rYSwxMjcpXSx2LkViWzFdPTEwMTU4MSpzaVtRZShfK2wsMTI3KV0+PjE2LDg+di5FYlsxXSYmKHYuRWJbMV09OCksdi5RY1swXT1vaVtRZShfK2QsMTE3KV0sdi5RY1sxXT1zaVtRZShfK3UsMTI3KV0sdi5sYz1fK3V9aWYoIWMuUmIpcmV0dXJuIHR0KGUsNCxgTm90IGEga2V5IGZyYW1lLmApO2ZvcihEKHMpLGM9ZS5QYSxyPTA7ND5yOysrcil7Zm9yKG89MDs4Pm87KytvKWZvcihhPTA7Mz5hOysrYSlmb3IobD0wOzExPmw7KytsKWQ9TyhzLG1pW3JdW29dW2FdW2xdKT9oKHMsOCk6Zmlbcl1bb11bYV1bbF0sYy5XY1tyXVtvXS5ZYlthXVtsXT1kO2ZvcihvPTA7MTc+bzsrK28pYy5YY1tyXVtvXT1jLldjW3JdW2hpW29dXX1yZXR1cm4gZS5rYz1EKHMpLGUua2MmJihlLkJkPWgocyw4KSksZS5jYj0xfWZ1bmN0aW9uIGl0KGUsdCxuLHIsaSxhLG8pe3ZhciBzPXRbaV0uWWJbbl07Zm9yKG49MDsxNj5pOysraSl7aWYoIU8oZSxzW24rMF0pKXJldHVybiBpO2Zvcig7IU8oZSxzW24rMV0pOylpZihzPXRbKytpXS5ZYlswXSxuPTAsaT09MTYpcmV0dXJuIDE2O3ZhciBjPXRbaSsxXS5ZYjtpZihPKGUsc1tuKzJdKSl7dmFyIGw9ZSx1PTA7aWYoTyhsLChmPXMpWyhkPW4pKzNdKSlpZihPKGwsZltkKzZdKSl7Zm9yKHM9MCxkPTIqKHU9TyhsLGZbZCs4XSkpKyhmPU8obCxmW2QrOSt1XSkpLHU9MCxmPWxpW2RdO2Zbc107KytzKXUrPXUrTyhsLGZbc10pO3UrPTMrKDg8PGQpfWVsc2UgTyhsLGZbZCs3XSk/KHU9NysyKk8obCwxNjUpLHUrPU8obCwxNDUpKTp1PTUrTyhsLDE1OSk7ZWxzZSB1PU8obCxmW2QrNF0pPzMrTyhsLGZbZCs1XSk6MjtzPWNbMl19ZWxzZSB1PTEscz1jWzFdO2M9byt1aVtpXSwwPihsPWUpLmImJkUobCk7dmFyIGQsZj1sLmIscD0oZD1sLkNhPj4xKS0obC5JPj5mKT4+MzE7LS1sLmIsbC5DYSs9cCxsLkNhfD0xLGwuSS09KGQrMSZwKTw8ZixhW2NdPSgodV5wKS1wKSpyWygwPGkpKzBdfXJldHVybiAxNn1mdW5jdGlvbiBhdChlKXt2YXIgdD1lLnJiW2Uuc2ItMV07dC5sYT0wLHQuTmE9MCxpKGUuemMsMCwwLGUuemMubGVuZ3RoKSxlLmphPTB9ZnVuY3Rpb24gb3QoZSx0LG4scixpKXtpPWVbdCtuKzMyKnJdKyhpPj4zKSxlW3QrbiszMipyXT0tMjU2Jmk/MD5pPzA6MjU1Oml9ZnVuY3Rpb24gc3QoZSx0LG4scixpLGEpe290KGUsdCwwLG4scitpKSxvdChlLHQsMSxuLHIrYSksb3QoZSx0LDIsbixyLWEpLG90KGUsdCwzLG4sci1pKX1mdW5jdGlvbiBjdChlKXtyZXR1cm4oMjAwOTEqZT4+MTYpK2V9ZnVuY3Rpb24gbHQoZSx0LG4scil7dmFyIGksbz0wLHM9YSgxNik7Zm9yKGk9MDs0Pmk7KytpKXt2YXIgYz1lW3QrMF0rZVt0KzhdLGw9ZVt0KzBdLWVbdCs4XSx1PSgzNTQ2OCplW3QrNF0+PjE2KS1jdChlW3QrMTJdKSxkPWN0KGVbdCs0XSkrKDM1NDY4KmVbdCsxMl0+PjE2KTtzW28rMF09YytkLHNbbysxXT1sK3Usc1tvKzJdPWwtdSxzW28rM109Yy1kLG8rPTQsdCsrfWZvcihpPW89MDs0Pmk7KytpKWM9KGU9c1tvKzBdKzQpK3Nbbys4XSxsPWUtc1tvKzhdLHU9KDM1NDY4KnNbbys0XT4+MTYpLWN0KHNbbysxMl0pLG90KG4sciwwLDAsYysoZD1jdChzW28rNF0pKygzNTQ2OCpzW28rMTJdPj4xNikpKSxvdChuLHIsMSwwLGwrdSksb3QobixyLDIsMCxsLXUpLG90KG4sciwzLDAsYy1kKSxvKysscis9MzJ9ZnVuY3Rpb24gdXQoZSx0LG4scil7dmFyIGk9ZVt0KzBdKzQsYT0zNTQ2OCplW3QrNF0+PjE2LG89Y3QoZVt0KzRdKSxzPTM1NDY4KmVbdCsxXT4+MTY7c3QobixyLDAsaStvLGU9Y3QoZVt0KzFdKSxzKSxzdChuLHIsMSxpK2EsZSxzKSxzdChuLHIsMixpLWEsZSxzKSxzdChuLHIsMyxpLW8sZSxzKX1mdW5jdGlvbiBkdChlLHQsbixyLGkpe2x0KGUsdCxuLHIpLGkmJmx0KGUsdCsxNixuLHIrNCl9ZnVuY3Rpb24gZnQoZSx0LG4scil7ZHIoZSx0KzAsbixyLDEpLGRyKGUsdCszMixuLHIrMTI4LDEpfWZ1bmN0aW9uIHB0KGUsdCxuLHIpe3ZhciBpO2ZvcihlPWVbdCswXSs0LGk9MDs0Pmk7KytpKWZvcih0PTA7ND50OysrdClvdChuLHIsdCxpLGUpfWZ1bmN0aW9uIG10KGUsdCxuLHIpe2VbdCswXSYmbXIoZSx0KzAsbixyKSxlW3QrMTZdJiZtcihlLHQrMTYsbixyKzQpLGVbdCszMl0mJm1yKGUsdCszMixuLHIrMTI4KSxlW3QrNDhdJiZtcihlLHQrNDgsbixyKzEyOCs0KX1mdW5jdGlvbiBodChlLHQsbixyKXt2YXIgaSxvPWEoMTYpO2ZvcihpPTA7ND5pOysraSl7dmFyIHM9ZVt0KzAraV0rZVt0KzEyK2ldLGM9ZVt0KzQraV0rZVt0KzgraV0sbD1lW3QrNCtpXS1lW3QrOCtpXSx1PWVbdCswK2ldLWVbdCsxMitpXTtvWzAraV09cytjLG9bOCtpXT1zLWMsb1s0K2ldPXUrbCxvWzEyK2ldPXUtbH1mb3IoaT0wOzQ+aTsrK2kpcz0oZT1vWzArNCppXSszKStvWzMrNCppXSxjPW9bMSs0KmldK29bMis0KmldLGw9b1sxKzQqaV0tb1syKzQqaV0sdT1lLW9bMys0KmldLG5bciswXT1zK2M+PjMsbltyKzE2XT11K2w+PjMsbltyKzMyXT1zLWM+PjMsbltyKzQ4XT11LWw+PjMscis9NjR9ZnVuY3Rpb24gZ3QoZSx0LG4pe3ZhciByLGk9dC0zMixhPXpyLG89MjU1LWVbaS0xXTtmb3Iocj0wO3I8bjsrK3Ipe3ZhciBzLGM9YSxsPW8rZVt0LTFdO2ZvcihzPTA7czxuOysrcyllW3Qrc109Y1tsK2VbaStzXV07dCs9MzJ9fWZ1bmN0aW9uIF90KGUsdCl7Z3QoZSx0LDQpfWZ1bmN0aW9uIHZ0KGUsdCl7Z3QoZSx0LDgpfWZ1bmN0aW9uIHl0KGUsdCl7Z3QoZSx0LDE2KX1mdW5jdGlvbiBidChlLHQpe3ZhciBuO2ZvcihuPTA7MTY+bjsrK24pcihlLHQrMzIqbixlLHQtMzIsMTYpfWZ1bmN0aW9uIHh0KGUsdCl7dmFyIG47Zm9yKG49MTY7MDxuOy0tbilpKGUsdCxlW3QtMV0sMTYpLHQrPTMyfWZ1bmN0aW9uIFN0KGUsdCxuKXt2YXIgcjtmb3Iocj0wOzE2PnI7KytyKWkodCxuKzMyKnIsZSwxNil9ZnVuY3Rpb24gQ3QoZSx0KXt2YXIgbixyPTE2O2ZvcihuPTA7MTY+bjsrK24pcis9ZVt0LTErMzIqbl0rZVt0K24tMzJdO1N0KHI+PjUsZSx0KX1mdW5jdGlvbiB3dChlLHQpe3ZhciBuLHI9ODtmb3Iobj0wOzE2Pm47KytuKXIrPWVbdC0xKzMyKm5dO1N0KHI+PjQsZSx0KX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuLHI9ODtmb3Iobj0wOzE2Pm47KytuKXIrPWVbdCtuLTMyXTtTdChyPj40LGUsdCl9ZnVuY3Rpb24gRXQoZSx0KXtTdCgxMjgsZSx0KX1mdW5jdGlvbiBEdChlLHQsbil7cmV0dXJuIGUrMip0K24rMj4+Mn1mdW5jdGlvbiBPdChlLHQpe3ZhciBuLGk9dC0zMjtmb3IoaT1uZXcgVWludDhBcnJheShbRHQoZVtpLTFdLGVbaSswXSxlW2krMV0pLER0KGVbaSswXSxlW2krMV0sZVtpKzJdKSxEdChlW2krMV0sZVtpKzJdLGVbaSszXSksRHQoZVtpKzJdLGVbaSszXSxlW2krNF0pXSksbj0wOzQ+bjsrK24pcihlLHQrMzIqbixpLDAsaS5sZW5ndGgpfWZ1bmN0aW9uIGt0KGUsdCl7dmFyIG49ZVt0LTFdLHI9ZVt0LTErMzJdLGk9ZVt0LTErNjRdLGE9ZVt0LTErOTZdO2soZSx0KzAsMTY4NDMwMDkqRHQoZVt0LTEtMzJdLG4scikpLGsoZSx0KzMyLDE2ODQzMDA5KkR0KG4scixpKSksayhlLHQrNjQsMTY4NDMwMDkqRHQocixpLGEpKSxrKGUsdCs5NiwxNjg0MzAwOSpEdChpLGEsYSkpfWZ1bmN0aW9uIEF0KGUsdCl7dmFyIG4scj00O2ZvcihuPTA7ND5uOysrbilyKz1lW3Qrbi0zMl0rZVt0LTErMzIqbl07Zm9yKHI+Pj0zLG49MDs0Pm47KytuKWkoZSx0KzMyKm4sciw0KX1mdW5jdGlvbiBqdChlLHQpe3ZhciBuPWVbdC0xKzBdLHI9ZVt0LTErMzJdLGk9ZVt0LTErNjRdLGE9ZVt0LTEtMzJdLG89ZVt0KzAtMzJdLHM9ZVt0KzEtMzJdLGM9ZVt0KzItMzJdLGw9ZVt0KzMtMzJdO2VbdCswKzk2XT1EdChyLGksZVt0LTErOTZdKSxlW3QrMSs5Nl09ZVt0KzArNjRdPUR0KG4scixpKSxlW3QrMis5Nl09ZVt0KzErNjRdPWVbdCswKzMyXT1EdChhLG4sciksZVt0KzMrOTZdPWVbdCsyKzY0XT1lW3QrMSszMl09ZVt0KzArMF09RHQobyxhLG4pLGVbdCszKzY0XT1lW3QrMiszMl09ZVt0KzErMF09RHQocyxvLGEpLGVbdCszKzMyXT1lW3QrMiswXT1EdChjLHMsbyksZVt0KzMrMF09RHQobCxjLHMpfWZ1bmN0aW9uIE10KGUsdCl7dmFyIG49ZVt0KzEtMzJdLHI9ZVt0KzItMzJdLGk9ZVt0KzMtMzJdLGE9ZVt0KzQtMzJdLG89ZVt0KzUtMzJdLHM9ZVt0KzYtMzJdLGM9ZVt0KzctMzJdO2VbdCswKzBdPUR0KGVbdCswLTMyXSxuLHIpLGVbdCsxKzBdPWVbdCswKzMyXT1EdChuLHIsaSksZVt0KzIrMF09ZVt0KzErMzJdPWVbdCswKzY0XT1EdChyLGksYSksZVt0KzMrMF09ZVt0KzIrMzJdPWVbdCsxKzY0XT1lW3QrMCs5Nl09RHQoaSxhLG8pLGVbdCszKzMyXT1lW3QrMis2NF09ZVt0KzErOTZdPUR0KGEsbyxzKSxlW3QrMys2NF09ZVt0KzIrOTZdPUR0KG8scyxjKSxlW3QrMys5Nl09RHQocyxjLGMpfWZ1bmN0aW9uIE50KGUsdCl7dmFyIG49ZVt0LTErMF0scj1lW3QtMSszMl0saT1lW3QtMSs2NF0sYT1lW3QtMS0zMl0sbz1lW3QrMC0zMl0scz1lW3QrMS0zMl0sYz1lW3QrMi0zMl0sbD1lW3QrMy0zMl07ZVt0KzArMF09ZVt0KzErNjRdPWErbysxPj4xLGVbdCsxKzBdPWVbdCsyKzY0XT1vK3MrMT4+MSxlW3QrMiswXT1lW3QrMys2NF09cytjKzE+PjEsZVt0KzMrMF09YytsKzE+PjEsZVt0KzArOTZdPUR0KGkscixuKSxlW3QrMCs2NF09RHQocixuLGEpLGVbdCswKzMyXT1lW3QrMSs5Nl09RHQobixhLG8pLGVbdCsxKzMyXT1lW3QrMis5Nl09RHQoYSxvLHMpLGVbdCsyKzMyXT1lW3QrMys5Nl09RHQobyxzLGMpLGVbdCszKzMyXT1EdChzLGMsbCl9ZnVuY3Rpb24gUHQoZSx0KXt2YXIgbj1lW3QrMC0zMl0scj1lW3QrMS0zMl0saT1lW3QrMi0zMl0sYT1lW3QrMy0zMl0sbz1lW3QrNC0zMl0scz1lW3QrNS0zMl0sYz1lW3QrNi0zMl0sbD1lW3QrNy0zMl07ZVt0KzArMF09bityKzE+PjEsZVt0KzErMF09ZVt0KzArNjRdPXIraSsxPj4xLGVbdCsyKzBdPWVbdCsxKzY0XT1pK2ErMT4+MSxlW3QrMyswXT1lW3QrMis2NF09YStvKzE+PjEsZVt0KzArMzJdPUR0KG4scixpKSxlW3QrMSszMl09ZVt0KzArOTZdPUR0KHIsaSxhKSxlW3QrMiszMl09ZVt0KzErOTZdPUR0KGksYSxvKSxlW3QrMyszMl09ZVt0KzIrOTZdPUR0KGEsbyxzKSxlW3QrMys2NF09RHQobyxzLGMpLGVbdCszKzk2XT1EdChzLGMsbCl9ZnVuY3Rpb24gRnQoZSx0KXt2YXIgbj1lW3QtMSswXSxyPWVbdC0xKzMyXSxpPWVbdC0xKzY0XSxhPWVbdC0xKzk2XTtlW3QrMCswXT1uK3IrMT4+MSxlW3QrMiswXT1lW3QrMCszMl09citpKzE+PjEsZVt0KzIrMzJdPWVbdCswKzY0XT1pK2ErMT4+MSxlW3QrMSswXT1EdChuLHIsaSksZVt0KzMrMF09ZVt0KzErMzJdPUR0KHIsaSxhKSxlW3QrMyszMl09ZVt0KzErNjRdPUR0KGksYSxhKSxlW3QrMys2NF09ZVt0KzIrNjRdPWVbdCswKzk2XT1lW3QrMSs5Nl09ZVt0KzIrOTZdPWVbdCszKzk2XT1hfWZ1bmN0aW9uIEl0KGUsdCl7dmFyIG49ZVt0LTErMF0scj1lW3QtMSszMl0saT1lW3QtMSs2NF0sYT1lW3QtMSs5Nl0sbz1lW3QtMS0zMl0scz1lW3QrMC0zMl0sYz1lW3QrMS0zMl0sbD1lW3QrMi0zMl07ZVt0KzArMF09ZVt0KzIrMzJdPW4rbysxPj4xLGVbdCswKzMyXT1lW3QrMis2NF09cituKzE+PjEsZVt0KzArNjRdPWVbdCsyKzk2XT1pK3IrMT4+MSxlW3QrMCs5Nl09YStpKzE+PjEsZVt0KzMrMF09RHQocyxjLGwpLGVbdCsyKzBdPUR0KG8scyxjKSxlW3QrMSswXT1lW3QrMyszMl09RHQobixvLHMpLGVbdCsxKzMyXT1lW3QrMys2NF09RHQocixuLG8pLGVbdCsxKzY0XT1lW3QrMys5Nl09RHQoaSxyLG4pLGVbdCsxKzk2XT1EdChhLGkscil9ZnVuY3Rpb24gTHQoZSx0KXt2YXIgbjtmb3Iobj0wOzg+bjsrK24pcihlLHQrMzIqbixlLHQtMzIsOCl9ZnVuY3Rpb24gUnQoZSx0KXt2YXIgbjtmb3Iobj0wOzg+bjsrK24paShlLHQsZVt0LTFdLDgpLHQrPTMyfWZ1bmN0aW9uIHp0KGUsdCxuKXt2YXIgcjtmb3Iocj0wOzg+cjsrK3IpaSh0LG4rMzIqcixlLDgpfWZ1bmN0aW9uIEJ0KGUsdCl7dmFyIG4scj04O2ZvcihuPTA7OD5uOysrbilyKz1lW3Qrbi0zMl0rZVt0LTErMzIqbl07enQocj4+NCxlLHQpfWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG4scj00O2ZvcihuPTA7OD5uOysrbilyKz1lW3Qrbi0zMl07enQocj4+MyxlLHQpfWZ1bmN0aW9uIEh0KGUsdCl7dmFyIG4scj00O2ZvcihuPTA7OD5uOysrbilyKz1lW3QtMSszMipuXTt6dChyPj4zLGUsdCl9ZnVuY3Rpb24gVXQoZSx0KXt6dCgxMjgsZSx0KX1mdW5jdGlvbiBXdChlLHQsbil7dmFyIHI9ZVt0LW5dLGk9ZVt0KzBdLGE9MyooaS1yKStMclsxMDIwK2VbdC0yKm5dLWVbdCtuXV0sbz1SclsxMTIrKGErND4+MyldO2VbdC1uXT16clsyNTUrcitSclsxMTIrKGErMz4+MyldXSxlW3QrMF09enJbMjU1K2ktb119ZnVuY3Rpb24gR3QoZSx0LG4scil7dmFyIGk9ZVt0KzBdLGE9ZVt0K25dO3JldHVybiBCclsyNTUrZVt0LTIqbl0tZVt0LW5dXT5yfHxCclsyNTUrYS1pXT5yfWZ1bmN0aW9uIEt0KGUsdCxuLHIpe3JldHVybiA0KkJyWzI1NStlW3Qtbl0tZVt0KzBdXStCclsyNTUrZVt0LTIqbl0tZVt0K25dXTw9cn1mdW5jdGlvbiBxdChlLHQsbixyLGkpe3ZhciBhPWVbdC0zKm5dLG89ZVt0LTIqbl0scz1lW3Qtbl0sYz1lW3QrMF0sbD1lW3Qrbl0sdT1lW3QrMipuXSxkPWVbdCszKm5dO3JldHVybiA0KkJyWzI1NStzLWNdK0JyWzI1NStvLWxdPnI/MDpCclsyNTUrZVt0LTQqbl0tYV08PWkmJkJyWzI1NSthLW9dPD1pJiZCclsyNTUrby1zXTw9aSYmQnJbMjU1K2QtdV08PWkmJkJyWzI1NSt1LWxdPD1pJiZCclsyNTUrbC1jXTw9aX1mdW5jdGlvbiBKdChlLHQsbixyKXt2YXIgaT0yKnIrMTtmb3Iocj0wOzE2PnI7KytyKUt0KGUsdCtyLG4saSkmJld0KGUsdCtyLG4pfWZ1bmN0aW9uIFl0KGUsdCxuLHIpe3ZhciBpPTIqcisxO2ZvcihyPTA7MTY+cjsrK3IpS3QoZSx0K3IqbiwxLGkpJiZXdChlLHQrcipuLDEpfWZ1bmN0aW9uIFh0KGUsdCxuLHIpe3ZhciBpO2ZvcihpPTM7MDxpOy0taSlKdChlLHQrPTQqbixuLHIpfWZ1bmN0aW9uIFp0KGUsdCxuLHIpe3ZhciBpO2ZvcihpPTM7MDxpOy0taSlZdChlLHQrPTQsbixyKX1mdW5jdGlvbiBRdChlLHQsbixyLGksYSxvLHMpe2ZvcihhPTIqYSsxOzA8aS0tOyl7aWYocXQoZSx0LG4sYSxvKSlpZihHdChlLHQsbixzKSlXdChlLHQsbik7ZWxzZXt2YXIgYz1lLGw9dCx1PW4sZD1jW2wtMip1XSxmPWNbbC11XSxwPWNbbCswXSxtPWNbbCt1XSxoPWNbbCsyKnVdLGc9MjcqKHY9THJbMTAyMCszKihwLWYpK0xyWzEwMjArZC1tXV0pKzYzPj43LF89MTgqdis2Mz4+Nyx2PTkqdis2Mz4+NztjW2wtMyp1XT16clsyNTUrY1tsLTMqdV0rdl0sY1tsLTIqdV09enJbMjU1K2QrX10sY1tsLXVdPXpyWzI1NStmK2ddLGNbbCswXT16clsyNTUrcC1nXSxjW2wrdV09enJbMjU1K20tX10sY1tsKzIqdV09enJbMjU1K2gtdl19dCs9cn19ZnVuY3Rpb24gJHQoZSx0LG4scixpLGEsbyxzKXtmb3IoYT0yKmErMTswPGktLTspe2lmKHF0KGUsdCxuLGEsbykpaWYoR3QoZSx0LG4scykpV3QoZSx0LG4pO2Vsc2V7dmFyIGM9ZSxsPXQsdT1uLGQ9Y1tsLXVdLGY9Y1tsKzBdLHA9Y1tsK3VdLG09UnJbMTEyKyg0KyhoPTMqKGYtZCkpPj4zKV0saD1SclsxMTIrKGgrMz4+MyldLGc9bSsxPj4xO2NbbC0yKnVdPXpyWzI1NStjW2wtMip1XStnXSxjW2wtdV09enJbMjU1K2QraF0sY1tsKzBdPXpyWzI1NStmLW1dLGNbbCt1XT16clsyNTUrcC1nXX10Kz1yfX1mdW5jdGlvbiBlbihlLHQsbixyLGksYSl7UXQoZSx0LG4sMSwxNixyLGksYSl9ZnVuY3Rpb24gdG4oZSx0LG4scixpLGEpe1F0KGUsdCwxLG4sMTYscixpLGEpfWZ1bmN0aW9uIG5uKGUsdCxuLHIsaSxhKXt2YXIgbztmb3Iobz0zOzA8bzstLW8pJHQoZSx0Kz00Km4sbiwxLDE2LHIsaSxhKX1mdW5jdGlvbiBybihlLHQsbixyLGksYSl7dmFyIG87Zm9yKG89MzswPG87LS1vKSR0KGUsdCs9NCwxLG4sMTYscixpLGEpfWZ1bmN0aW9uIGFuKGUsdCxuLHIsaSxhLG8scyl7UXQoZSx0LGksMSw4LGEsbyxzKSxRdChuLHIsaSwxLDgsYSxvLHMpfWZ1bmN0aW9uIG9uKGUsdCxuLHIsaSxhLG8scyl7UXQoZSx0LDEsaSw4LGEsbyxzKSxRdChuLHIsMSxpLDgsYSxvLHMpfWZ1bmN0aW9uIHNuKGUsdCxuLHIsaSxhLG8scyl7JHQoZSx0KzQqaSxpLDEsOCxhLG8scyksJHQobixyKzQqaSxpLDEsOCxhLG8scyl9ZnVuY3Rpb24gY24oZSx0LG4scixpLGEsbyxzKXskdChlLHQrNCwxLGksOCxhLG8scyksJHQobixyKzQsMSxpLDgsYSxvLHMpfWZ1bmN0aW9uIGxuKCl7dGhpcy5iYT1uZXcgcGUsdGhpcy5lYz1bXSx0aGlzLmNjPVtdLHRoaXMuTWM9W10sdGhpcy5EYz10aGlzLk5jPXRoaXMuZGM9dGhpcy5mYz0wLHRoaXMuT2E9bmV3IGhlLHRoaXMubWVtb3J5PTAsdGhpcy5JYj1gT3V0cHV0RnVuY2AsdGhpcy5KYj1gT3V0cHV0QWxwaGFGdW5jYCx0aGlzLk5kPWBPdXRwdXRSb3dGdW5jYH1mdW5jdGlvbiB1bigpe3RoaXMuZGF0YT1bXSx0aGlzLm9mZnNldD10aGlzLmtkPXRoaXMuaGE9dGhpcy53PTAsdGhpcy5uYT1bXSx0aGlzLnhhPXRoaXMuZ2I9dGhpcy5KYT10aGlzLlNhPXRoaXMuUD0wfWZ1bmN0aW9uIGRuKCl7dGhpcy5uYz10aGlzLkVhPXRoaXMuYj10aGlzLmhjPTAsdGhpcy5LPVtdLHRoaXMudz0wfWZ1bmN0aW9uIGZuKCl7dGhpcy51YT0wLHRoaXMuV2E9bmV3IEYsdGhpcy52Yj1uZXcgRix0aGlzLm1kPXRoaXMueGM9dGhpcy53Yz0wLHRoaXMudmM9W10sdGhpcy5XYj0wLHRoaXMuWWE9bmV3IHAsdGhpcy55Yz1uZXcgZH1mdW5jdGlvbiBwbigpe3RoaXMueGI9dGhpcy5hPTAsdGhpcy5sPW5ldyAkZSx0aGlzLmNhPW5ldyBwZSx0aGlzLlY9W10sdGhpcy5CYT0wLHRoaXMuVGE9W10sdGhpcy5VYT0wLHRoaXMubT1uZXcgeCx0aGlzLlBiPTAsdGhpcy53ZD1uZXcgeCx0aGlzLk1hPXRoaXMuJD10aGlzLkM9dGhpcy5pPXRoaXMuYz10aGlzLnhkPTAsdGhpcy5zPW5ldyBmbix0aGlzLmFiPTAsdGhpcy5nYz1vKDQsZG4pLHRoaXMuT2M9MH1mdW5jdGlvbiBtbigpe3RoaXMuTGM9dGhpcy5aPXRoaXMuJGE9dGhpcy5pPXRoaXMuYz0wLHRoaXMubD1uZXcgJGUsdGhpcy5pYz0wLHRoaXMuY2E9W10sdGhpcy50Yj0wLHRoaXMucWQ9bnVsbCx0aGlzLnJkPTB9ZnVuY3Rpb24gaG4oZSx0LG4scixpLGEsbyl7Zm9yKGU9ZT09bnVsbD8wOmVbdCswXSx0PTA7dDxvOysrdClpW2ErdF09ZStuW3IrdF0mMjU1LGU9aVthK3RdfWZ1bmN0aW9uIGduKGUsdCxuLHIsaSxhLG8pe3ZhciBzO2lmKGU9PW51bGwpaG4obnVsbCxudWxsLG4scixpLGEsbyk7ZWxzZSBmb3Iocz0wO3M8bzsrK3MpaVthK3NdPWVbdCtzXStuW3Irc10mMjU1fWZ1bmN0aW9uIF9uKGUsdCxuLHIsaSxhLG8pe2lmKGU9PW51bGwpaG4obnVsbCxudWxsLG4scixpLGEsbyk7ZWxzZXt2YXIgcyxjPWVbdCswXSxsPWMsdT1jO2ZvcihzPTA7czxvOysrcylsPXUrKGM9ZVt0K3NdKS1sLHU9bltyK3NdKygtMjU2Jmw/MD5sPzA6MjU1OmwpJjI1NSxsPWMsaVthK3NdPXV9fWZ1bmN0aW9uIHZuKGUsbixpLG8pe3ZhciBzPW4ud2lkdGgsYz1uLm87aWYodChlIT1udWxsJiZuIT1udWxsKSwwPml8fDA+PW98fGkrbz5jKXJldHVybiBudWxsO2lmKCFlLkNjKXtpZihlLmdhPT1udWxsKXt2YXIgbDtpZihlLmdhPW5ldyBtbiwobD1lLmdhPT1udWxsKXx8KGw9bi53aWR0aCpuLm8sdChlLkdiLmxlbmd0aD09MCksZS5HYj1hKGwpLGUuVWM9MCxlLkdiPT1udWxsP2w9MDooZS5tYj1lLkdiLGUubmI9ZS5VYyxlLnJjPW51bGwsbD0xKSxsPSFsKSwhbCl7bD1lLmdhO3ZhciB1PWUuRmEsZD1lLlAsZj1lLnFjLHA9ZS5tYixtPWUubmIsaD1kKzEsZz1mLTEsdj1sLmw7aWYodCh1IT1udWxsJiZwIT1udWxsJiZuIT1udWxsKSx4aVswXT1udWxsLHhpWzFdPWhuLHhpWzJdPWduLHhpWzNdPV9uLGwuY2E9cCxsLnRiPW0sbC5jPW4ud2lkdGgsbC5pPW4uaGVpZ2h0LHQoMDxsLmMmJjA8bC5pKSwxPj1mKW49MDtlbHNlIGlmKGwuJGE9MyZ1W2QrMF0sbC5aPXVbZCswXT4+MiYzLGwuTGM9dVtkKzBdPj40JjMsZD11W2QrMF0+PjYmMywwPmwuJGF8fDE8bC4kYXx8NDw9bC5afHwxPGwuTGN8fGQpbj0wO2Vsc2UgaWYodi5wdXQ9YmUsdi5hYz15ZSx2LmJjPXhlLHYubWE9bCx2LndpZHRoPW4ud2lkdGgsdi5oZWlnaHQ9bi5oZWlnaHQsdi5EYT1uLkRhLHYudj1uLnYsdi52YT1uLnZhLHYuaj1uLmosdi5vPW4ubyxsLiRhKXQ6e3QobC4kYT09MSksbj1GZSgpO2U6Zm9yKDs7KXtpZihuPT1udWxsKXtuPTA7YnJlYWsgdH1pZih0KGwhPW51bGwpLGwubWM9bixuLmM9bC5jLG4uaT1sLmksbi5sPWwubCxuLmwubWE9bCxuLmwud2lkdGg9bC5jLG4ubC5oZWlnaHQ9bC5pLG4uYT0wLF8obi5tLHUsaCxnKSwhSWUobC5jLGwuaSwxLG4sbnVsbCl8fChuLmFiPT0xJiZuLmdjWzBdLmhjPT0zJiZBZShuLnMpPyhsLmljPTEsdT1uLmMqbi5pLG4uVGE9bnVsbCxuLlVhPTAsbi5WPWEodSksbi5CYT0wLG4uVj09bnVsbD8obi5hPTEsbj0wKTpuPTEpOihsLmljPTAsbj1MZShuLGwuYykpLCFuKSlicmVhayBlO249MTticmVhayB0fWwubWM9bnVsbCxuPTB9ZWxzZSBuPWc+PWwuYypsLmk7bD0hbn1pZihsKXJldHVybiBudWxsO2UuZ2EuTGM9PTE/bz1jLWk6ZS5HYT0wfXQoZS5nYSE9bnVsbCksdChpK288PWMpO3Q6e2lmKG49KHU9ZS5nYSkuYyxjPXUubC5vLHUuJGE9PTApe2lmKGg9ZS5yYyxnPWUuVmMsdj1lLkZhLGQ9ZS5QKzEraSpuLGY9ZS5tYixwPWUubmIraSpuLHQoZDw9ZS5QK2UucWMpLHUuWiE9MClmb3IodCh4aVt1LlpdIT1udWxsKSxsPTA7bDxvOysrbCl4aVt1LlpdKGgsZyx2LGQsZixwLG4pLGg9ZixnPXAscCs9bixkKz1uO2Vsc2UgZm9yKGw9MDtsPG87KytsKXIoZixwLHYsZCxuKSxoPWYsZz1wLHArPW4sZCs9bjtlLnJjPWgsZS5WYz1nfWVsc2V7aWYodCh1Lm1jIT1udWxsKSxuPWkrbyx0KChsPXUubWMpIT1udWxsKSx0KG48PWwuaSksbC5DPj1uKW49MTtlbHNlIGlmKHUuaWN8fENuKCksdS5pYyl7dT1sLlYsaD1sLkJhLGc9bC5jO3ZhciB5PWwuaSxiPSh2PTEsZD1sLiQvZyxmPWwuJCVnLHA9bC5tLG09bC5zLGwuJCkseD1nKnksUz1nKm4sdz1tLndjLEU9YjxTP0RlKG0sZixkKTpudWxsO3QoYjw9eCksdChuPD15KSx0KEFlKG0pKTtlOmZvcig7Oyl7Zm9yKDshcC5oJiZiPFM7KXtpZihmJnd8fChFPURlKG0sZixkKSksdChFIT1udWxsKSxUKHApLDI1Nj4oeT1UZShFLkdbMF0sRS5IWzBdLHApKSl1W2grYl09eSwrK2IsKytmPj1nJiYoZj0wLCsrZDw9biYmIShkJTE2KSYmTWUobCxkKSk7ZWxzZXtpZighKDI4MD55KSl7dj0wO2JyZWFrIGV9eT1DZSh5LTI1NixwKTt2YXIgRCxPPVRlKEUuR1s0XSxFLkhbNF0scCk7aWYoVChwKSwhKGI+PShPPXdlKGcsTz1DZShPLHApKSkmJngtYj49eSkpe3Y9MDticmVhayBlfWZvcihEPTA7RDx5OysrRCl1W2grYitEXT11W2grYitELU9dO2ZvcihiKz15LGYrPXk7Zj49ZzspZi09ZywrK2Q8PW4mJiEoZCUxNikmJk1lKGwsZCk7YjxTJiZmJncmJihFPURlKG0sZixkKSl9dChwLmg9PUMocCkpfU1lKGwsZD5uP246ZCk7YnJlYWsgZX0hdnx8cC5oJiZiPHg/KHY9MCxsLmE9cC5oPzU6Myk6bC4kPWIsbj12fWVsc2Ugbj1OZShsLGwuVixsLkJhLGwuYyxsLmksbixSZSk7aWYoIW4pe289MDticmVhayB0fX1pK28+PWMmJihlLkNjPTEpLG89MX1pZighbylyZXR1cm4gbnVsbDtpZihlLkNjJiYoKG89ZS5nYSkhPW51bGwmJihvLm1jPW51bGwpLGUuZ2E9bnVsbCwwPGUuR2EpKXJldHVybiBhbGVydChgdG9kbzpXZWJQRGVxdWFudGl6ZUxldmVsc2ApLG51bGx9cmV0dXJuIGUubmIraSpzfWZ1bmN0aW9uIHluKGUsdCxuLHIsaSxhKXtmb3IoOzA8aS0tOyl7dmFyIG8scz1lLGM9dCsgKyEhbixsPWUsdT10KyhuPzA6Myk7Zm9yKG89MDtvPHI7KytvKXt2YXIgZD1sW3UrNCpvXTtkIT0yNTUmJihkKj0zMjg5NyxzW2MrNCpvKzBdPXNbYys0Km8rMF0qZD4+MjMsc1tjKzQqbysxXT1zW2MrNCpvKzFdKmQ+PjIzLHNbYys0Km8rMl09c1tjKzQqbysyXSpkPj4yMyl9dCs9YX19ZnVuY3Rpb24gYm4oZSx0LG4scixpKXtmb3IoOzA8ci0tOyl7dmFyIGE7Zm9yKGE9MDthPG47KythKXt2YXIgbz1lW3QrMiphKzBdLHM9MTUmKGw9ZVt0KzIqYSsxXSksYz00MzY5KnMsbD0oMjQwJmx8bD4+NCkqYz4+MTY7ZVt0KzIqYSswXT0oMjQwJm98bz4+NCkqYz4+MTYmMjQwfCgxNSZvfG88PDQpKmM+PjE2Pj40JjE1LGVbdCsyKmErMV09MjQwJmx8c310Kz1pfX1mdW5jdGlvbiB4bihlLHQsbixyLGksYSxvLHMpe3ZhciBjLGwsdT0yNTU7Zm9yKGw9MDtsPGk7KytsKXtmb3IoYz0wO2M8cjsrK2Mpe3ZhciBkPWVbdCtjXTthW28rNCpjXT1kLHUmPWR9dCs9bixvKz1zfXJldHVybiB1IT0yNTV9ZnVuY3Rpb24gU24oZSx0LG4scixpKXt2YXIgYTtmb3IoYT0wO2E8aTsrK2EpbltyK2FdPWVbdCthXT4+OH1mdW5jdGlvbiBDbigpe09yPXluLGtyPWJuLEFyPXhuLGpyPVNufWZ1bmN0aW9uIHduKG4scixpKXtlW25dPWZ1bmN0aW9uKGUsbixhLG8scyxjLGwsdSxkLGYscCxtLGgsZyxfLHYseSl7dmFyIGIseD15LTE+PjEsUz1zW2MrMF18bFt1KzBdPDwxNixDPWRbZiswXXxwW20rMF08PDE2O3QoZSE9bnVsbCk7dmFyIHc9MypTK0MrMTMxMDc0Pj4yO2ZvcihyKGVbbiswXSwyNTUmdyx3Pj4xNixoLGcpLGEhPW51bGwmJih3PTMqQytTKzEzMTA3ND4+MixyKGFbbyswXSwyNTUmdyx3Pj4xNixfLHYpKSxiPTE7Yjw9eDsrK2Ipe3ZhciBUPXNbYytiXXxsW3UrYl08PDE2LEU9ZFtmK2JdfHBbbStiXTw8MTYsRD1TK1QrQytFKzUyNDI5NixPPUQrMiooVCtDKT4+Mzt3PU8rUz4+MSxTPShEPUQrMiooUytFKT4+MykrVD4+MSxyKGVbbisyKmItMV0sMjU1Jncsdz4+MTYsaCxnKygyKmItMSkqaSkscihlW24rMipiLTBdLDI1NSZTLFM+PjE2LGgsZysoMipiLTApKmkpLGEhPW51bGwmJih3PUQrQz4+MSxTPU8rRT4+MSxyKGFbbysyKmItMV0sMjU1Jncsdz4+MTYsXyx2KygyKmItMSkqaSkscihhW28rMipiKzBdLDI1NSZTLFM+PjE2LF8sdisoMipiKzApKmkpKSxTPVQsQz1FfTEmeXx8KHc9MypTK0MrMTMxMDc0Pj4yLHIoZVtuK3ktMV0sMjU1Jncsdz4+MTYsaCxnKyh5LTEpKmkpLGEhPW51bGwmJih3PTMqQytTKzEzMTA3ND4+MixyKGFbbyt5LTFdLDI1NSZ3LHc+PjE2LF8sdisoeS0xKSppKSkpfX1mdW5jdGlvbiBUbigpe1NpW1ZyXT1DaSxTaVtIcl09VGksU2lbVXJdPXdpLFNpW1dyXT1FaSxTaVtHcl09RGksU2lbS3JdPU9pLFNpW3FyXT1raSxTaVtKcl09VGksU2lbWXJdPUVpLFNpW1hyXT1EaSxTaVtacl09T2l9ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIGUmfkZpPzA+ZT8wOjI1NTplPj5QaX1mdW5jdGlvbiBEbihlLHQpe3JldHVybiBFbigoMTkwNzcqZT4+OCkrKDI2MTQ5KnQ+PjgpLTE0MjM0KX1mdW5jdGlvbiBPbihlLHQsbil7cmV0dXJuIEVuKCgxOTA3NyplPj44KS0oNjQxOSp0Pj44KS0oMTMzMjAqbj4+OCkrODcwOCl9ZnVuY3Rpb24ga24oZSx0KXtyZXR1cm4gRW4oKDE5MDc3KmU+PjgpKygzMzA1MCp0Pj44KS0xNzY4NSl9ZnVuY3Rpb24gQW4oZSx0LG4scixpKXtyW2krMF09RG4oZSxuKSxyW2krMV09T24oZSx0LG4pLHJbaSsyXT1rbihlLHQpfWZ1bmN0aW9uIGpuKGUsdCxuLHIsaSl7cltpKzBdPWtuKGUsdCkscltpKzFdPU9uKGUsdCxuKSxyW2krMl09RG4oZSxuKX1mdW5jdGlvbiBNbihlLHQsbixyLGkpe3ZhciBhPU9uKGUsdCxuKTt0PWE8PDMmMjI0fGtuKGUsdCk+PjMscltpKzBdPTI0OCZEbihlLG4pfGE+PjUscltpKzFdPXR9ZnVuY3Rpb24gTm4oZSx0LG4scixpKXt2YXIgYT0yNDAma24oZSx0KXwxNTtyW2krMF09MjQwJkRuKGUsbil8T24oZSx0LG4pPj40LHJbaSsxXT1hfWZ1bmN0aW9uIFBuKGUsdCxuLHIsaSl7cltpKzBdPTI1NSxBbihlLHQsbixyLGkrMSl9ZnVuY3Rpb24gRm4oZSx0LG4scixpKXtqbihlLHQsbixyLGkpLHJbaSszXT0yNTV9ZnVuY3Rpb24gSW4oZSx0LG4scixpKXtBbihlLHQsbixyLGkpLHJbaSszXT0yNTV9ZnVuY3Rpb24gTG4odCxuLHIpe2VbdF09ZnVuY3Rpb24oZSx0LGksYSxvLHMsYyxsLHUpe2Zvcih2YXIgZD1sKygtMiZ1KSpyO2whPWQ7KW4oZVt0KzBdLGlbYSswXSxvW3MrMF0sYyxsKSxuKGVbdCsxXSxpW2ErMF0sb1tzKzBdLGMsbCtyKSx0Kz0yLCsrYSwrK3MsbCs9MipyOzEmdSYmbihlW3QrMF0saVthKzBdLG9bcyswXSxjLGwpfX1mdW5jdGlvbiBSbihlLHQsbil7cmV0dXJuIG49PTA/ZT09MD90PT0wPzY6NTp0PT0wPzQ6MDpufWZ1bmN0aW9uIHpuKGUsdCxuLHIsaSl7c3dpdGNoKGU+Pj4zMCl7Y2FzZSAzOmRyKHQsbixyLGksMCk7YnJlYWs7Y2FzZSAyOmZyKHQsbixyLGkpO2JyZWFrO2Nhc2UgMTptcih0LG4scixpKX19ZnVuY3Rpb24gQm4oZSx0KXt2YXIgbixhLG89dC5NLHM9dC5OYixjPWUub2MsbD1lLnBjKzQwLHU9ZS5vYyxkPWUucGMrNTg0LGY9ZS5vYyxwPWUucGMrNjAwO2ZvcihuPTA7MTY+bjsrK24pY1tsKzMyKm4tMV09MTI5O2ZvcihuPTA7OD5uOysrbil1W2QrMzIqbi0xXT0xMjksZltwKzMyKm4tMV09MTI5O2ZvcigwPG8/Y1tsLTEtMzJdPXVbZC0xLTMyXT1mW3AtMS0zMl09MTI5OihpKGMsbC0zMi0xLDEyNywyMSksaSh1LGQtMzItMSwxMjcsOSksaShmLHAtMzItMSwxMjcsOSkpLGE9MDthPGUuemE7KythKXt2YXIgbT10LnlhW3QuYWErYV07aWYoMDxhKXtmb3Iobj0tMTsxNj5uOysrbilyKGMsbCszMipuLTQsYyxsKzMyKm4rMTIsNCk7Zm9yKG49LTE7OD5uOysrbilyKHUsZCszMipuLTQsdSxkKzMyKm4rNCw0KSxyKGYscCszMipuLTQsZixwKzMyKm4rNCw0KX12YXIgaD1lLkdkLGc9ZS5IZCthLF89bS5hZCx2PW0uSGM7aWYoMDxvJiYocihjLGwtMzIsaFtnXS55LDAsMTYpLHIodSxkLTMyLGhbZ10uZiwwLDgpLHIoZixwLTMyLGhbZ10uZWEsMCw4KSksbS5aYSl7dmFyIHk9YyxiPWwtMzIrMTY7Zm9yKDA8byYmKGE+PWUuemEtMT9pKHksYixoW2ddLnlbMTVdLDQpOnIoeSxiLGhbZysxXS55LDAsNCkpLG49MDs0Pm47bisrKXlbYisxMjgrbl09eVtiKzI1NituXT15W2IrMzg0K25dPXlbYiswK25dO2ZvcihuPTA7MTY+bjsrK24sdjw8PTIpeT1jLGI9bCtVaVtuXSxfaVttLk9iW25dXSh5LGIpLHpuKHYsXywxNipuLHksYil9ZWxzZSBpZih5PVJuKGEsbyxtLk9iWzBdKSxnaVt5XShjLGwpLHYhPTApZm9yKG49MDsxNj5uOysrbix2PDw9Mil6bih2LF8sMTYqbixjLGwrVWlbbl0pO2ZvcihuPW0uR2MseT1SbihhLG8sbS5EZCksdmlbeV0odSxkKSx2aVt5XShmLHApLHY9Xyx5PXUsYj1kLDI1NSYobT0wfG4pJiYoMTcwJm0/cHIodiwyNTYseSxiKTpocih2LDI1Nix5LGIpKSxtPWYsdj1wLDI1NSYobj4+PTgpJiYoMTcwJm4/cHIoXywzMjAsbSx2KTpocihfLDMyMCxtLHYpKSxvPGUuVWItMSYmKHIoaFtnXS55LDAsYyxsKzQ4MCwxNikscihoW2ddLmYsMCx1LGQrMjI0LDgpLHIoaFtnXS5lYSwwLGYscCsyMjQsOCkpLG49OCpzKmUuQixoPWUuc2EsZz1lLnRhKzE2KmErMTYqcyplLlIsXz1lLnFhLG09ZS5yYSs4KmErbix2PWUuSGEseT1lLklhKzgqYStuLG49MDsxNj5uOysrbilyKGgsZytuKmUuUixjLGwrMzIqbiwxNik7Zm9yKG49MDs4Pm47KytuKXIoXyxtK24qZS5CLHUsZCszMipuLDgpLHIodix5K24qZS5CLGYscCszMipuLDgpfX1mdW5jdGlvbiBWbihlLHIsaSxhLG8scyxjLGwsdSl7dmFyIGQ9WzBdLGY9WzBdLHA9MCxtPXU9PW51bGw/MDp1LmtkLGg9dT8/bmV3IHVuO2lmKGU9PW51bGx8fDEyPmkpcmV0dXJuIDc7aC5kYXRhPWUsaC53PXIsaC5oYT1pLHI9W3JdLGk9W2ldLGguZ2I9W2guZ2JdO3Q6e3ZhciBnPXIsdj1pLHk9aC5nYjtpZih0KGUhPW51bGwpLHQodiE9bnVsbCksdCh5IT1udWxsKSx5WzBdPTAsMTI8PXZbMF0mJiFuKGUsZ1swXSxgUklGRmApKXtpZihuKGUsZ1swXSs4LGBXRUJQYCkpe3k9MzticmVhayB0fXZhciBiPU0oZSxnWzBdKzQpO2lmKDEyPmJ8fDQyOTQ5NjcyODY8Yil7eT0zO2JyZWFrIHR9aWYobSYmYj52WzBdLTgpe3k9NzticmVhayB0fXlbMF09YixnWzBdKz0xMix2WzBdLT0xMn15PTB9aWYoeSE9MClyZXR1cm4geTtmb3IoYj0wPGguZ2JbMF0saT1pWzBdOzspe3Q6e3ZhciBTPWU7dj1yLHk9aTt2YXIgQz1kLHc9ZixUPWc9WzBdO2lmKChPPXA9W3BdKVswXT0wLDg+eVswXSl5PTc7ZWxzZXtpZighbihTLHZbMF0sYFZQOFhgKSl7aWYoTShTLHZbMF0rNCkhPTEwKXt5PTM7YnJlYWsgdH1pZigxOD55WzBdKXt5PTc7YnJlYWsgdH12YXIgRT1NKFMsdlswXSs4KSxEPTEraihTLHZbMF0rMTIpO2lmKDIxNDc0ODM2NDg8PUQqKFM9MStqKFMsdlswXSsxNSkpKXt5PTM7YnJlYWsgdH1UIT1udWxsJiYoVFswXT1FKSxDIT1udWxsJiYoQ1swXT1EKSx3IT1udWxsJiYod1swXT1TKSx2WzBdKz0xOCx5WzBdLT0xOCxPWzBdPTF9eT0wfX1pZihwPXBbMF0sZz1nWzBdLHkhPTApcmV0dXJuIHk7aWYodj0hISgyJmcpLCFiJiZwKXJldHVybiAzO2lmKHMhPW51bGwmJihzWzBdPSEhKDE2JmcpKSxjIT1udWxsJiYoY1swXT12KSxsIT1udWxsJiYobFswXT0wKSxjPWRbMF0sZz1mWzBdLHAmJnYmJnU9PW51bGwpe3k9MDticmVha31pZig0Pmkpe3k9NzticmVha31pZihiJiZwfHwhYiYmIXAmJiFuKGUsclswXSxgQUxQSGApKXtpPVtpXSxoLm5hPVtoLm5hXSxoLlA9W2guUF0saC5TYT1baC5TYV07dDp7RT1lLHk9cixiPWk7dmFyIE89aC5nYjtDPWgubmEsdz1oLlAsVD1oLlNhLEQ9MjIsdChFIT1udWxsKSx0KGIhPW51bGwpLFM9eVswXTt2YXIgaz1iWzBdO2Zvcih0KEMhPW51bGwpLHQoVCE9bnVsbCksQ1swXT1udWxsLHdbMF09bnVsbCxUWzBdPTA7Oyl7aWYoeVswXT1TLGJbMF09ayw4Pmspe3k9NzticmVhayB0fXZhciBBPU0oRSxTKzQpO2lmKDQyOTQ5NjcyODY8QSl7eT0zO2JyZWFrIHR9dmFyIE49OCtBKzEmLTI7aWYoRCs9TiwwPE8mJkQ+Tyl7eT0zO2JyZWFrIHR9aWYoIW4oRSxTLGBWUDggYCl8fCFuKEUsUyxgVlA4TGApKXt5PTA7YnJlYWsgdH1pZihrWzBdPE4pe3k9NzticmVhayB0fW4oRSxTLGBBTFBIYCl8fChDWzBdPUUsd1swXT1TKzgsVFswXT1BKSxTKz1OLGstPU59fWlmKGk9aVswXSxoLm5hPWgubmFbMF0saC5QPWguUFswXSxoLlNhPWguU2FbMF0seSE9MClicmVha31pPVtpXSxoLkphPVtoLkphXSxoLnhhPVtoLnhhXTt0OmlmKE89ZSx5PXIsYj1pLEM9aC5nYlswXSx3PWguSmEsVD1oLnhhLEU9eVswXSxTPSFuKE8sRSxgVlA4IGApLEQ9IW4oTyxFLGBWUDhMYCksdChPIT1udWxsKSx0KGIhPW51bGwpLHQodyE9bnVsbCksdChUIT1udWxsKSw4PmJbMF0peT03O2Vsc2V7aWYoU3x8RCl7aWYoTz1NKE8sRSs0KSwxMjw9QyYmTz5DLTEyKXt5PTM7YnJlYWsgdH1pZihtJiZPPmJbMF0tOCl7eT03O2JyZWFrIHR9d1swXT1PLHlbMF0rPTgsYlswXS09OCxUWzBdPUR9ZWxzZSBUWzBdPTU8PWJbMF0mJk9bRSswXT09NDcmJiEoT1tFKzRdPj41KSx3WzBdPWJbMF07eT0wfWlmKGk9aVswXSxoLkphPWguSmFbMF0saC54YT1oLnhhWzBdLHI9clswXSx5IT0wKWJyZWFrO2lmKDQyOTQ5NjcyODY8aC5KYSlyZXR1cm4gMztpZihsPT1udWxsfHx2fHwobFswXT1oLnhhPzI6MSksYz1bY10sZz1bZ10saC54YSl7aWYoNT5pKXt5PTc7YnJlYWt9bD1jLG09Zyx2PXMsZT09bnVsbHx8NT5pP2U9MDo1PD1pJiZlW3IrMF09PTQ3JiYhKGVbcis0XT4+NSk/KGI9WzBdLE89WzBdLEM9WzBdLF8odz1uZXcgeCxlLHIsaSksU2UodyxiLE8sQyk/KGwhPW51bGwmJihsWzBdPWJbMF0pLG0hPW51bGwmJihtWzBdPU9bMF0pLHYhPW51bGwmJih2WzBdPUNbMF0pLGU9MSk6ZT0wKTplPTB9ZWxzZXtpZigxMD5pKXt5PTc7YnJlYWt9bD1nLGU9PW51bGx8fDEwPml8fCFudChlLHIrMyxpLTMpP2U9MDoobT1lW3IrMF18ZVtyKzFdPDw4fGVbcisyXTw8MTYsdj0xNjM4MyYoZVtyKzddPDw4fGVbcis2XSksZT0xNjM4MyYoZVtyKzldPDw4fGVbcis4XSksMSZtfHwzPChtPj4xJjcpfHwhKG0+PjQmMSl8fG0+PjU+PWguSmF8fCF2fHwhZT9lPTA6KGMmJihjWzBdPXYpLGwmJihsWzBdPWUpLGU9MSkpfWlmKCFlfHwoYz1jWzBdLGc9Z1swXSxwJiYoZFswXSE9Y3x8ZlswXSE9ZykpKXJldHVybiAzO3UhPW51bGwmJih1WzBdPWgsdS5vZmZzZXQ9ci11LncsdCg0Mjk0OTY3Mjg2PnItdS53KSx0KHUub2Zmc2V0PT11LmhhLWkpKTticmVha31yZXR1cm4geT09MHx8eT09NyYmcCYmdT09bnVsbD8ocyE9bnVsbCYmKHNbMF18PWgubmEhPW51bGwmJjA8aC5uYS5sZW5ndGgpLGEhPW51bGwmJihhWzBdPWMpLG8hPW51bGwmJihvWzBdPWcpLDApOnl9ZnVuY3Rpb24gSG4oZSx0LG4pe3ZhciByPXQud2lkdGgsaT10LmhlaWdodCxhPTAsbz0wLHM9cixjPWk7aWYodC5EYT1lIT1udWxsJiYwPGUuRGEsdC5EYSYmKHM9ZS5jZCxjPWUuYmQsYT1lLnYsbz1lLmosMTE+bnx8KGEmPS0yLG8mPS0yKSwwPmF8fDA+b3x8MD49c3x8MD49Y3x8YStzPnJ8fG8rYz5pKSlyZXR1cm4gMDtpZih0LnY9YSx0Lmo9byx0LnZhPWErcyx0Lm89bytjLHQuVT1zLHQuVD1jLHQuZGE9ZSE9bnVsbCYmMDxlLmRhLHQuZGEpe2lmKCFJKHMsYyxuPVtlLmliXSxhPVtlLmhiXSkpcmV0dXJuIDA7dC5pYj1uWzBdLHQuaGI9YVswXX1yZXR1cm4gdC5vYj1lIT1udWxsJiZlLm9iLHQuS2I9ZT09bnVsbHx8IWUuU2QsdC5kYSYmKHQub2I9dC5pYjwzKnIvNCYmdC5oYjwzKmkvNCx0LktiPTApLDF9ZnVuY3Rpb24gVW4oZSl7aWYoZT09bnVsbClyZXR1cm4gMjtpZigxMT5lLlMpe3ZhciB0PWUuZi5SR0JBO3QuZmIrPShlLmhlaWdodC0xKSp0LkEsdC5BPS10LkF9ZWxzZSB0PWUuZi5rYixlPWUuaGVpZ2h0LHQuTys9KGUtMSkqdC5mYSx0LmZhPS10LmZhLHQuTis9KGUtMT4+MSkqdC5BYix0LkFiPS10LkFiLHQuVys9KGUtMT4+MSkqdC5EYix0LkRiPS10LkRiLHQuRiE9bnVsbCYmKHQuSis9KGUtMSkqdC5sYix0LmxiPS10LmxiKTtyZXR1cm4gMH1mdW5jdGlvbiBXbihlLHQsbixyKXtpZihyPT1udWxsfHwwPj1lfHwwPj10KXJldHVybiAyO2lmKG4hPW51bGwpe2lmKG4uRGEpe3ZhciBpPW4uY2Qsbz1uLmJkLHM9LTImbi52LGM9LTImbi5qO2lmKDA+c3x8MD5jfHwwPj1pfHwwPj1vfHxzK2k+ZXx8YytvPnQpcmV0dXJuIDI7ZT1pLHQ9b31pZihuLmRhKXtpZighSShlLHQsaT1bbi5pYl0sbz1bbi5oYl0pKXJldHVybiAyO2U9aVswXSx0PW9bMF19fXIud2lkdGg9ZSxyLmhlaWdodD10O3Q6e3ZhciBsPXIud2lkdGgsdT1yLmhlaWdodDtpZihlPXIuUywwPj1sfHwwPj11fHwhKGU+PVZyJiYxMz5lKSllPTI7ZWxzZXtpZigwPj1yLlJkJiZyLnNkPT1udWxsKXtzPW89aT10PTA7dmFyIGQ9KGM9bCpxaVtlXSkqdTtpZigxMT5lfHwobz0odSsxKS8yKih0PShsKzEpLzIpLGU9PTEyJiYocz0oaT1sKSp1KSksKHU9YShkKzIqbytzKSk9PW51bGwpe2U9MTticmVhayB0fXIuc2Q9dSwxMT5lPygobD1yLmYuUkdCQSkuZWI9dSxsLmZiPTAsbC5BPWMsbC5zaXplPWQpOigobD1yLmYua2IpLnk9dSxsLk89MCxsLmZhPWMsbC5GZD1kLGwuZj11LGwuTj0wK2QsbC5BYj10LGwuQ2Q9byxsLmVhPXUsbC5XPTArZCtvLGwuRGI9dCxsLkVkPW8sZT09MTImJihsLkY9dSxsLko9MCtkKzIqbyksbC5UYz1zLGwubGI9aSl9aWYodD0xLGk9ci5TLG89ci53aWR0aCxzPXIuaGVpZ2h0LGk+PVZyJiYxMz5pKWlmKDExPmkpZT1yLmYuUkdCQSx0Jj0oYz1NYXRoLmFicyhlLkEpKSoocy0xKStvPD1lLnNpemUsdCY9Yz49bypxaVtpXSx0Jj1lLmViIT1udWxsO2Vsc2V7ZT1yLmYua2IsYz0obysxKS8yLGQ9KHMrMSkvMixsPU1hdGguYWJzKGUuZmEpLHU9TWF0aC5hYnMoZS5BYik7dmFyIGY9TWF0aC5hYnMoZS5EYikscD1NYXRoLmFicyhlLmxiKSxtPXAqKHMtMSkrbzt0Jj1sKihzLTEpK288PWUuRmQsdCY9dSooZC0xKStjPD1lLkNkLHQ9KHQmPWYqKGQtMSkrYzw9ZS5FZCkmbD49byZ1Pj1jJmY+PWMsdCY9ZS55IT1udWxsLHQmPWUuZiE9bnVsbCx0Jj1lLmVhIT1udWxsLGk9PTEyJiYodCY9cD49byx0Jj1tPD1lLlRjLHQmPWUuRiE9bnVsbCl9ZWxzZSB0PTA7ZT10PzA6Mn19cmV0dXJuIGUhPTB8fG4hPW51bGwmJm4uZmQmJihlPVVuKHIpKSxlfXZhciBHbj02NCxLbj1bMCwxLDMsNywxNSwzMSw2MywxMjcsMjU1LDUxMSwxMDIzLDIwNDcsNDA5NSw4MTkxLDE2MzgzLDMyNzY3LDY1NTM1LDEzMTA3MSwyNjIxNDMsNTI0Mjg3LDEwNDg1NzUsMjA5NzE1MSw0MTk0MzAzLDgzODg2MDcsMTY3NzcyMTVdLHFuPTI0LEpuPTMyLFluPTgsWG49WzAsMCwxLDEsMiwyLDIsMiwzLDMsMywzLDMsMywzLDMsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDddO3ooYFByZWRpY3RvcjBgLGBQcmVkaWN0b3JBZGQwYCksZS5QcmVkaWN0b3IwPWZ1bmN0aW9uKCl7cmV0dXJuIDQyNzgxOTAwODB9LGUuUHJlZGljdG9yMT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZS5QcmVkaWN0b3IyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdFtuKzBdfSxlLlByZWRpY3RvcjM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0W24rMV19LGUuUHJlZGljdG9yND1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRbbi0xXX0sZS5QcmVkaWN0b3I1PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVihWKGUsdFtuKzFdKSx0W24rMF0pfSxlLlByZWRpY3RvcjY9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBWKGUsdFtuLTFdKX0sZS5QcmVkaWN0b3I3PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVihlLHRbbiswXSl9LGUuUHJlZGljdG9yOD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFYodFtuLTFdLHRbbiswXSl9LGUuUHJlZGljdG9yOT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFYodFtuKzBdLHRbbisxXSl9LGUuUHJlZGljdG9yMTA9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBWKFYoZSx0W24tMV0pLFYodFtuKzBdLHRbbisxXSkpfSxlLlByZWRpY3RvcjExPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10W24rMF07cmV0dXJuIDA+PVUocj4+MjQmMjU1LGU+PjI0JjI1NSwodD10W24tMV0pPj4yNCYyNTUpK1Uocj4+MTYmMjU1LGU+PjE2JjI1NSx0Pj4xNiYyNTUpK1Uocj4+OCYyNTUsZT4+OCYyNTUsdD4+OCYyNTUpK1UoMjU1JnIsMjU1JmUsMjU1JnQpP3I6ZX0sZS5QcmVkaWN0b3IxMj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFtuKzBdO3JldHVybihlZSgoZT4+MjQmMjU1KSsocj4+MjQmMjU1KS0oKHQ9dFtuLTFdKT4+MjQmMjU1KSk8PDI0fGVlKChlPj4xNiYyNTUpKyhyPj4xNiYyNTUpLSh0Pj4xNiYyNTUpKTw8MTZ8ZWUoKGU+PjgmMjU1KSsocj4+OCYyNTUpLSh0Pj44JjI1NSkpPDw4fGVlKCgyNTUmZSkrKDI1NSZyKS0oMjU1JnQpKSk+Pj4wfSxlLlByZWRpY3RvcjEzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10W24tMV07cmV0dXJuKEgoKGU9VihlLHRbbiswXSkpPj4yNCYyNTUscj4+MjQmMjU1KTw8MjR8SChlPj4xNiYyNTUscj4+MTYmMjU1KTw8MTZ8SChlPj44JjI1NSxyPj44JjI1NSk8PDh8SCgyNTUmZSwyNTUmcikpPj4+MH07dmFyIFpuPWUuUHJlZGljdG9yQWRkMDtlLlByZWRpY3RvckFkZDE9Vyx6KGBQcmVkaWN0b3IyYCxgUHJlZGljdG9yQWRkMmApLHooYFByZWRpY3RvcjNgLGBQcmVkaWN0b3JBZGQzYCkseihgUHJlZGljdG9yNGAsYFByZWRpY3RvckFkZDRgKSx6KGBQcmVkaWN0b3I1YCxgUHJlZGljdG9yQWRkNWApLHooYFByZWRpY3RvcjZgLGBQcmVkaWN0b3JBZGQ2YCkseihgUHJlZGljdG9yN2AsYFByZWRpY3RvckFkZDdgKSx6KGBQcmVkaWN0b3I4YCxgUHJlZGljdG9yQWRkOGApLHooYFByZWRpY3RvcjlgLGBQcmVkaWN0b3JBZGQ5YCkseihgUHJlZGljdG9yMTBgLGBQcmVkaWN0b3JBZGQxMGApLHooYFByZWRpY3RvcjExYCxgUHJlZGljdG9yQWRkMTFgKSx6KGBQcmVkaWN0b3IxMmAsYFByZWRpY3RvckFkZDEyYCkseihgUHJlZGljdG9yMTNgLGBQcmVkaWN0b3JBZGQxM2ApO3ZhciBRbj1lLlByZWRpY3RvckFkZDI7cmUoYENvbG9ySW5kZXhJbnZlcnNlVHJhbnNmb3JtYCxgTWFwQVJHQmAsYDMyYmAsZnVuY3Rpb24oZSl7cmV0dXJuIGU+PjgmMjU1fSxmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHJlKGBWUDhMQ29sb3JJbmRleEludmVyc2VUcmFuc2Zvcm1BbHBoYWAsYE1hcEFscGhhYCxgOGJgLGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlKXtyZXR1cm4gZT4+OCYyNTV9KTt2YXIgJG4sZXI9ZS5Db2xvckluZGV4SW52ZXJzZVRyYW5zZm9ybSx0cj1lLk1hcEFSR0IscT1lLlZQOExDb2xvckluZGV4SW52ZXJzZVRyYW5zZm9ybUFscGhhLG5yPWUuTWFwQWxwaGEscnI9ZS5WUDhMUHJlZGljdG9yc0FkZD1bXTtyci5sZW5ndGg9MTYsKGUuVlA4TFByZWRpY3RvcnM9W10pLmxlbmd0aD0xNiwoZS5WUDhMUHJlZGljdG9yc0FkZF9DPVtdKS5sZW5ndGg9MTYsKGUuVlA4TFByZWRpY3RvcnNfQz1bXSkubGVuZ3RoPTE2O3ZhciBpcixhcixvcixzcixjcixscix1cixkcixmcixwcixtcixocixncixfcix2cix5cixicix4cixTcixDcix3cixUcixFcixEcixPcixrcixBcixqcixNcj1hKDUxMSksTnI9YSgyMDQxKSxQcj1hKDIyNSksRnI9YSg3NjcpLElyPTAsTHI9TnIsUnI9UHIsenI9RnIsQnI9TXIsVnI9MCxIcj0xLFVyPTIsV3I9MyxHcj00LEtyPTUscXI9NixKcj03LFlyPTgsWHI9OSxacj0xMCxRcj1bMiwzLDddLCRyPVszLDMsMTFdLGVpPVsyODAsMjU2LDI1NiwyNTYsNDBdLHRpPVswLDEsMSwxLDBdLG5pPVsxNywxOCwwLDEsMiwzLDQsNSwxNiw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1XSxyaT1bMjQsNywyMywyNSw0MCw2LDM5LDQxLDIyLDI2LDM4LDQyLDU2LDUsNTUsNTcsMjEsMjcsNTQsNTgsMzcsNDMsNzIsNCw3MSw3MywyMCwyOCw1Myw1OSw3MCw3NCwzNiw0NCw4OCw2OSw3NSw1Miw2MCwzLDg3LDg5LDE5LDI5LDg2LDkwLDM1LDQ1LDY4LDc2LDg1LDkxLDUxLDYxLDEwNCwyLDEwMywxMDUsMTgsMzAsMTAyLDEwNiwzNCw0Niw4NCw5Miw2Nyw3NywxMDEsMTA3LDUwLDYyLDEyMCwxLDExOSwxMjEsODMsOTMsMTcsMzEsMTAwLDEwOCw2Niw3OCwxMTgsMTIyLDMzLDQ3LDExNywxMjMsNDksNjMsOTksMTA5LDgyLDk0LDAsMTE2LDEyNCw2NSw3OSwxNiwzMiw5OCwxMTAsNDgsMTE1LDEyNSw4MSw5NSw2NCwxMTQsMTI2LDk3LDExMSw4MCwxMTMsMTI3LDk2LDExMl0saWk9WzI5NTQsMjk1NiwyOTU4LDI5NjIsMjk3MCwyOTg2LDMwMTgsMzA4MiwzMjEyLDM0NjgsMzk4MCw1MDA0XSxhaT04LG9pPVs0LDUsNiw3LDgsOSwxMCwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxNywxOCwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNSwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MSw5Myw5NSw5Niw5OCwxMDAsMTAxLDEwMiwxMDQsMTA2LDEwOCwxMTAsMTEyLDExNCwxMTYsMTE4LDEyMiwxMjQsMTI2LDEyOCwxMzAsMTMyLDEzNCwxMzYsMTM4LDE0MCwxNDMsMTQ1LDE0OCwxNTEsMTU0LDE1N10sc2k9WzQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDYwLDYyLDY0LDY2LDY4LDcwLDcyLDc0LDc2LDc4LDgwLDgyLDg0LDg2LDg4LDkwLDkyLDk0LDk2LDk4LDEwMCwxMDIsMTA0LDEwNiwxMDgsMTEwLDExMiwxMTQsMTE2LDExOSwxMjIsMTI1LDEyOCwxMzEsMTM0LDEzNywxNDAsMTQzLDE0NiwxNDksMTUyLDE1NSwxNTgsMTYxLDE2NCwxNjcsMTcwLDE3MywxNzcsMTgxLDE4NSwxODksMTkzLDE5NywyMDEsMjA1LDIwOSwyMTMsMjE3LDIyMSwyMjUsMjI5LDIzNCwyMzksMjQ1LDI0OSwyNTQsMjU5LDI2NCwyNjksMjc0LDI3OSwyODRdLGNpPW51bGwsbGk9W1sxNzMsMTQ4LDE0MCwwXSxbMTc2LDE1NSwxNDAsMTM1LDBdLFsxODAsMTU3LDE0MSwxMzQsMTMwLDBdLFsyNTQsMjU0LDI0MywyMzAsMTk2LDE3NywxNTMsMTQwLDEzMywxMzAsMTI5LDBdXSx1aT1bMCwxLDQsOCw1LDIsMyw2LDksMTIsMTMsMTAsNywxMSwxNCwxNV0sZGk9Wy0wLDEsLTEsMiwtMiwzLDQsNiwtMyw1LC00LC01LC02LDcsLTcsOCwtOCwtOV0sZmk9W1tbWzEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF1dLFtbMjUzLDEzNiwyNTQsMjU1LDIyOCwyMTksMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzE4OSwxMjksMjQyLDI1NSwyMjcsMjEzLDI1NSwyMTksMTI4LDEyOCwxMjhdLFsxMDYsMTI2LDIyNywyNTIsMjE0LDIwOSwyNTUsMjU1LDEyOCwxMjgsMTI4XV0sW1sxLDk4LDI0OCwyNTUsMjM2LDIyNiwyNTUsMjU1LDEyOCwxMjgsMTI4XSxbMTgxLDEzMywyMzgsMjU0LDIyMSwyMzQsMjU1LDE1NCwxMjgsMTI4LDEyOF0sWzc4LDEzNCwyMDIsMjQ3LDE5OCwxODAsMjU1LDIxOSwxMjgsMTI4LDEyOF1dLFtbMSwxODUsMjQ5LDI1NSwyNDMsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxODQsMTUwLDI0NywyNTUsMjM2LDIyNCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbNzcsMTEwLDIxNiwyNTUsMjM2LDIzMCwxMjgsMTI4LDEyOCwxMjgsMTI4XV0sW1sxLDEwMSwyNTEsMjU1LDI0MSwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzE3MCwxMzksMjQxLDI1MiwyMzYsMjA5LDI1NSwyNTUsMTI4LDEyOCwxMjhdLFszNywxMTYsMTk2LDI0MywyMjgsMjU1LDI1NSwyNTUsMTI4LDEyOCwxMjhdXSxbWzEsMjA0LDI1NCwyNTUsMjQ1LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMjA3LDE2MCwyNTAsMjU1LDIzOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzEwMiwxMDMsMjMxLDI1NSwyMTEsMTcxLDEyOCwxMjgsMTI4LDEyOCwxMjhdXSxbWzEsMTUyLDI1MiwyNTUsMjQwLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTc3LDEzNSwyNDMsMjU1LDIzNCwyMjUsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzgwLDEyOSwyMTEsMjU1LDE5NCwyMjQsMTI4LDEyOCwxMjgsMTI4LDEyOF1dLFtbMSwxLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMjQ2LDEsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XV1dLFtbWzE5OCwzNSwyMzcsMjIzLDE5MywxODcsMTYyLDE2MCwxNDUsMTU1LDYyXSxbMTMxLDQ1LDE5OCwyMjEsMTcyLDE3NiwyMjAsMTU3LDI1MiwyMjEsMV0sWzY4LDQ3LDE0NiwyMDgsMTQ5LDE2NywyMjEsMTYyLDI1NSwyMjMsMTI4XV0sW1sxLDE0OSwyNDEsMjU1LDIyMSwyMjQsMjU1LDI1NSwxMjgsMTI4LDEyOF0sWzE4NCwxNDEsMjM0LDI1MywyMjIsMjIwLDI1NSwxOTksMTI4LDEyOCwxMjhdLFs4MSw5OSwxODEsMjQyLDE3NiwxOTAsMjQ5LDIwMiwyNTUsMjU1LDEyOF1dLFtbMSwxMjksMjMyLDI1MywyMTQsMTk3LDI0MiwxOTYsMjU1LDI1NSwxMjhdLFs5OSwxMjEsMjEwLDI1MCwyMDEsMTk4LDI1NSwyMDIsMTI4LDEyOCwxMjhdLFsyMyw5MSwxNjMsMjQyLDE3MCwxODcsMjQ3LDIxMCwyNTUsMjU1LDEyOF1dLFtbMSwyMDAsMjQ2LDI1NSwyMzQsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxMDksMTc4LDI0MSwyNTUsMjMxLDI0NSwyNTUsMjU1LDEyOCwxMjgsMTI4XSxbNDQsMTMwLDIwMSwyNTMsMjA1LDE5MiwyNTUsMjU1LDEyOCwxMjgsMTI4XV0sW1sxLDEzMiwyMzksMjUxLDIxOSwyMDksMjU1LDE2NSwxMjgsMTI4LDEyOF0sWzk0LDEzNiwyMjUsMjUxLDIxOCwxOTAsMjU1LDI1NSwxMjgsMTI4LDEyOF0sWzIyLDEwMCwxNzQsMjQ1LDE4NiwxNjEsMjU1LDE5OSwxMjgsMTI4LDEyOF1dLFtbMSwxODIsMjQ5LDI1NSwyMzIsMjM1LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxMjQsMTQzLDI0MSwyNTUsMjI3LDIzNCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMzUsNzcsMTgxLDI1MSwxOTMsMjExLDI1NSwyMDUsMTI4LDEyOCwxMjhdXSxbWzEsMTU3LDI0NywyNTUsMjM2LDIzMSwyNTUsMjU1LDEyOCwxMjgsMTI4XSxbMTIxLDE0MSwyMzUsMjU1LDIyNSwyMjcsMjU1LDI1NSwxMjgsMTI4LDEyOF0sWzQ1LDk5LDE4OCwyNTEsMTk1LDIxNywyNTUsMjI0LDEyOCwxMjgsMTI4XV0sW1sxLDEsMjUxLDI1NSwyMTMsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsyMDMsMSwyNDgsMjU1LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzEzNywxLDE3NywyNTUsMjI0LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4XV1dLFtbWzI1Myw5LDI0OCwyNTEsMjA3LDIwOCwyNTUsMTkyLDEyOCwxMjgsMTI4XSxbMTc1LDEzLDIyNCwyNDMsMTkzLDE4NSwyNDksMTk4LDI1NSwyNTUsMTI4XSxbNzMsMTcsMTcxLDIyMSwxNjEsMTc5LDIzNiwxNjcsMjU1LDIzNCwxMjhdXSxbWzEsOTUsMjQ3LDI1MywyMTIsMTgzLDI1NSwyNTUsMTI4LDEyOCwxMjhdLFsyMzksOTAsMjQ0LDI1MCwyMTEsMjA5LDI1NSwyNTUsMTI4LDEyOCwxMjhdLFsxNTUsNzcsMTk1LDI0OCwxODgsMTk1LDI1NSwyNTUsMTI4LDEyOCwxMjhdXSxbWzEsMjQsMjM5LDI1MSwyMTgsMjE5LDI1NSwyMDUsMTI4LDEyOCwxMjhdLFsyMDEsNTEsMjE5LDI1NSwxOTYsMTg2LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFs2OSw0NiwxOTAsMjM5LDIwMSwyMTgsMjU1LDIyOCwxMjgsMTI4LDEyOF1dLFtbMSwxOTEsMjUxLDI1NSwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsyMjMsMTY1LDI0OSwyNTUsMjEzLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTQxLDEyNCwyNDgsMjU1LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF1dLFtbMSwxNiwyNDgsMjU1LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzE5MCwzNiwyMzAsMjU1LDIzNiwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzE0OSwxLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XV0sW1sxLDIyNiwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzI0NywxOTIsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsyNDAsMTI4LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XV0sW1sxLDEzNCwyNTIsMjU1LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzIxMyw2MiwyNTAsMjU1LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzU1LDkzLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XV0sW1sxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdXV0sW1tbMjAyLDI0LDIxMywyMzUsMTg2LDE5MSwyMjAsMTYwLDI0MCwxNzUsMjU1XSxbMTI2LDM4LDE4MiwyMzIsMTY5LDE4NCwyMjgsMTc0LDI1NSwxODcsMTI4XSxbNjEsNDYsMTM4LDIxOSwxNTEsMTc4LDI0MCwxNzAsMjU1LDIxNiwxMjhdXSxbWzEsMTEyLDIzMCwyNTAsMTk5LDE5MSwyNDcsMTU5LDI1NSwyNTUsMTI4XSxbMTY2LDEwOSwyMjgsMjUyLDIxMSwyMTUsMjU1LDE3NCwxMjgsMTI4LDEyOF0sWzM5LDc3LDE2MiwyMzIsMTcyLDE4MCwyNDUsMTc4LDI1NSwyNTUsMTI4XV0sW1sxLDUyLDIyMCwyNDYsMTk4LDE5OSwyNDksMjIwLDI1NSwyNTUsMTI4XSxbMTI0LDc0LDE5MSwyNDMsMTgzLDE5MywyNTAsMjIxLDI1NSwyNTUsMTI4XSxbMjQsNzEsMTMwLDIxOSwxNTQsMTcwLDI0MywxODIsMjU1LDI1NSwxMjhdXSxbWzEsMTgyLDIyNSwyNDksMjE5LDI0MCwyNTUsMjI0LDEyOCwxMjgsMTI4XSxbMTQ5LDE1MCwyMjYsMjUyLDIxNiwyMDUsMjU1LDE3MSwxMjgsMTI4LDEyOF0sWzI4LDEwOCwxNzAsMjQyLDE4MywxOTQsMjU0LDIyMywyNTUsMjU1LDEyOF1dLFtbMSw4MSwyMzAsMjUyLDIwNCwyMDMsMjU1LDE5MiwxMjgsMTI4LDEyOF0sWzEyMywxMDIsMjA5LDI0NywxODgsMTk2LDI1NSwyMzMsMTI4LDEyOCwxMjhdLFsyMCw5NSwxNTMsMjQzLDE2NCwxNzMsMjU1LDIwMywxMjgsMTI4LDEyOF1dLFtbMSwyMjIsMjQ4LDI1NSwyMTYsMjEzLDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxNjgsMTc1LDI0NiwyNTIsMjM1LDIwNSwyNTUsMjU1LDEyOCwxMjgsMTI4XSxbNDcsMTE2LDIxNSwyNTUsMjExLDIxMiwyNTUsMjU1LDEyOCwxMjgsMTI4XV0sW1sxLDEyMSwyMzYsMjUzLDIxMiwyMTQsMjU1LDI1NSwxMjgsMTI4LDEyOF0sWzE0MSw4NCwyMTMsMjUyLDIwMSwyMDIsMjU1LDIxOSwxMjgsMTI4LDEyOF0sWzQyLDgwLDE2MCwyNDAsMTYyLDE4NSwyNTUsMjA1LDEyOCwxMjgsMTI4XV0sW1sxLDEsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsyNDQsMSwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzIzOCwxLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XV1dXSxwaT1bW1syMzEsMTIwLDQ4LDg5LDExNSwxMTMsMTIwLDE1MiwxMTJdLFsxNTIsMTc5LDY0LDEyNiwxNzAsMTE4LDQ2LDcwLDk1XSxbMTc1LDY5LDE0Myw4MCw4NSw4Miw3MiwxNTUsMTAzXSxbNTYsNTgsMTAsMTcxLDIxOCwxODksMTcsMTMsMTUyXSxbMTE0LDI2LDE3LDE2Myw0NCwxOTUsMjEsMTAsMTczXSxbMTIxLDI0LDgwLDE5NSwyNiw2Miw0NCw2NCw4NV0sWzE0NCw3MSwxMCwzOCwxNzEsMjEzLDE0NCwzNCwyNl0sWzE3MCw0Niw1NSwxOSwxMzYsMTYwLDMzLDIwNiw3MV0sWzYzLDIwLDgsMTE0LDExNCwyMDgsMTIsOSwyMjZdLFs4MSw0MCwxMSw5NiwxODIsODQsMjksMTYsMzZdXSxbWzEzNCwxODMsODksMTM3LDk4LDEwMSwxMDYsMTY1LDE0OF0sWzcyLDE4NywxMDAsMTMwLDE1NywxMTEsMzIsNzUsODBdLFs2NiwxMDIsMTY3LDk5LDc0LDYyLDQwLDIzNCwxMjhdLFs0MSw1Myw5LDE3OCwyNDEsMTQxLDI2LDgsMTA3XSxbNzQsNDMsMjYsMTQ2LDczLDE2Niw0OSwyMywxNTddLFs2NSwzOCwxMDUsMTYwLDUxLDUyLDMxLDExNSwxMjhdLFsxMDQsNzksMTIsMjcsMjE3LDI1NSw4NywxNyw3XSxbODcsNjgsNzEsNDQsMTE0LDUxLDE1LDE4NiwyM10sWzQ3LDQxLDE0LDExMCwxODIsMTgzLDIxLDE3LDE5NF0sWzY2LDQ1LDI1LDEwMiwxOTcsMTg5LDIzLDE4LDIyXV0sW1s4OCw4OCwxNDcsMTUwLDQyLDQ2LDQ1LDE5NiwyMDVdLFs0Myw5NywxODMsMTE3LDg1LDM4LDM1LDE3OSw2MV0sWzM5LDUzLDIwMCw4NywyNiwyMSw0MywyMzIsMTcxXSxbNTYsMzQsNTEsMTA0LDExNCwxMDIsMjksOTMsNzddLFszOSwyOCw4NSwxNzEsNTgsMTY1LDkwLDk4LDY0XSxbMzQsMjIsMTE2LDIwNiwyMywzNCw0MywxNjYsNzNdLFsxMDcsNTQsMzIsMjYsNTEsMSw4MSw0MywzMV0sWzY4LDI1LDEwNiwyMiw2NCwxNzEsMzYsMjI1LDExNF0sWzM0LDE5LDIxLDEwMiwxMzIsMTg4LDE2LDc2LDEyNF0sWzYyLDE4LDc4LDk1LDg1LDU3LDUwLDQ4LDUxXV0sW1sxOTMsMTAxLDM1LDE1OSwyMTUsMTExLDg5LDQ2LDExMV0sWzYwLDE0OCwzMSwxNzIsMjE5LDIyOCwyMSwxOCwxMTFdLFsxMTIsMTEzLDc3LDg1LDE3OSwyNTUsMzgsMTIwLDExNF0sWzQwLDQyLDEsMTk2LDI0NSwyMDksMTAsMjUsMTA5XSxbODgsNDMsMjksMTQwLDE2NiwyMTMsMzcsNDMsMTU0XSxbNjEsNjMsMzAsMTU1LDY3LDQ1LDY4LDEsMjA5XSxbMTAwLDgwLDgsNDMsMTU0LDEsNTEsMjYsNzFdLFsxNDIsNzgsNzgsMTYsMjU1LDEyOCwzNCwxOTcsMTcxXSxbNDEsNDAsNSwxMDIsMjExLDE4Myw0LDEsMjIxXSxbNTEsNTAsMTcsMTY4LDIwOSwxOTIsMjMsMjUsODJdXSxbWzEzOCwzMSwzNiwxNzEsMjcsMTY2LDM4LDQ0LDIyOV0sWzY3LDg3LDU4LDE2OSw4MiwxMTUsMjYsNTksMTc5XSxbNjMsNTksOTAsMTgwLDU5LDE2Niw5Myw3MywxNTRdLFs0MCw0MCwyMSwxMTYsMTQzLDIwOSwzNCwzOSwxNzVdLFs0NywxNSwxNiwxODMsMzQsMjIzLDQ5LDQ1LDE4M10sWzQ2LDE3LDMzLDE4Myw2LDk4LDE1LDMyLDE4M10sWzU3LDQ2LDIyLDI0LDEyOCwxLDU0LDE3LDM3XSxbNjUsMzIsNzMsMTE1LDI4LDEyOCwyMywxMjgsMjA1XSxbNDAsMyw5LDExNSw1MSwxOTIsMTgsNiwyMjNdLFs4NywzNyw5LDExNSw1OSw3Nyw2NCwyMSw0N11dLFtbMTA0LDU1LDQ0LDIxOCw5LDU0LDUzLDEzMCwyMjZdLFs2NCw5MCw3MCwyMDUsNDAsNDEsMjMsMjYsNTddLFs1NCw1NywxMTIsMTg0LDUsNDEsMzgsMTY2LDIxM10sWzMwLDM0LDI2LDEzMywxNTIsMTE2LDEwLDMyLDEzNF0sWzM5LDE5LDUzLDIyMSwyNiwxMTQsMzIsNzMsMjU1XSxbMzEsOSw2NSwyMzQsMiwxNSwxLDExOCw3M10sWzc1LDMyLDEyLDUxLDE5MiwyNTUsMTYwLDQzLDUxXSxbODgsMzEsMzUsNjcsMTAyLDg1LDU1LDE4Niw4NV0sWzU2LDIxLDIzLDExMSw1OSwyMDUsNDUsMzcsMTkyXSxbNTUsMzgsNzAsMTI0LDczLDEwMiwxLDM0LDk4XV0sW1sxMjUsOTgsNDIsODgsMTA0LDg1LDExNywxNzUsODJdLFs5NSw4NCw1Myw4OSwxMjgsMTAwLDExMywxMDEsNDVdLFs3NSw3OSwxMjMsNDcsNTEsMTI4LDgxLDE3MSwxXSxbNTcsMTcsNSw3MSwxMDIsNTcsNTMsNDEsNDldLFszOCwzMywxMywxMjEsNTcsNzMsMjYsMSw4NV0sWzQxLDEwLDY3LDEzOCw3NywxMTAsOTAsNDcsMTE0XSxbMTE1LDIxLDIsMTAsMTAyLDI1NSwxNjYsMjMsNl0sWzEwMSwyOSwxNiwxMCw4NSwxMjgsMTAxLDE5NiwyNl0sWzU3LDE4LDEwLDEwMiwxMDIsMjEzLDM0LDIwLDQzXSxbMTE3LDIwLDE1LDM2LDE2MywxMjgsNjgsMSwyNl1dLFtbMTAyLDYxLDcxLDM3LDM0LDUzLDMxLDI0MywxOTJdLFs2OSw2MCw3MSwzOCw3MywxMTksMjgsMjIyLDM3XSxbNjgsNDUsMTI4LDM0LDEsNDcsMTEsMjQ1LDE3MV0sWzYyLDE3LDE5LDcwLDE0Niw4NSw1NSw2Miw3MF0sWzM3LDQzLDM3LDE1NCwxMDAsMTYzLDg1LDE2MCwxXSxbNjMsOSw5MiwxMzYsMjgsNjQsMzIsMjAxLDg1XSxbNzUsMTUsOSw5LDY0LDI1NSwxODQsMTE5LDE2XSxbODYsNiwyOCw1LDY0LDI1NSwyNSwyNDgsMV0sWzU2LDgsMTcsMTMyLDEzNywyNTUsNTUsMTE2LDEyOF0sWzU4LDE1LDIwLDgyLDEzNSw1NywyNiwxMjEsNDBdXSxbWzE2NCw1MCwzMSwxMzcsMTU0LDEzMywyNSwzNSwyMThdLFs1MSwxMDMsNDQsMTMxLDEzMSwxMjMsMzEsNiwxNThdLFs4Niw0MCw2NCwxMzUsMTQ4LDIyNCw0NSwxODMsMTI4XSxbMjIsMjYsMTcsMTMxLDI0MCwxNTQsMTQsMSwyMDldLFs0NSwxNiwyMSw5MSw2NCwyMjIsNywxLDE5N10sWzU2LDIxLDM5LDE1NSw2MCwxMzgsMjMsMTAyLDIxM10sWzgzLDEyLDEzLDU0LDE5MiwyNTUsNjgsNDcsMjhdLFs4NSwyNiw4NSw4NSwxMjgsMTI4LDMyLDE0NiwxNzFdLFsxOCwxMSw3LDYzLDE0NCwxNzEsNCw0LDI0Nl0sWzM1LDI3LDEwLDE0NiwxNzQsMTcxLDEyLDI2LDEyOF1dLFtbMTkwLDgwLDM1LDk5LDE4MCw4MCwxMjYsNTQsNDVdLFs4NSwxMjYsNDcsODcsMTc2LDUxLDQxLDIwLDMyXSxbMTAxLDc1LDEyOCwxMzksMTE4LDE0NiwxMTYsMTI4LDg1XSxbNTYsNDEsMTUsMTc2LDIzNiw4NSwzNyw5LDYyXSxbNzEsMzAsMTcsMTE5LDExOCwyNTUsMTcsMTgsMTM4XSxbMTAxLDM4LDYwLDEzOCw1NSw3MCw0MywyNiwxNDJdLFsxNDYsMzYsMTksMzAsMTcxLDI1NSw5NywyNywyMF0sWzEzOCw0NSw2MSw2MiwyMTksMSw4MSwxODgsNjRdLFszMiw0MSwyMCwxMTcsMTUxLDE0MiwyMCwyMSwxNjNdLFsxMTIsMTksMTIsNjEsMTk1LDEyOCw0OCw0LDI0XV1dLG1pPVtbW1syNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzE3NiwyNDYsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyMjMsMjQxLDI1MiwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjQ5LDI1MywyNTMsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI0NCwyNTIsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzIzNCwyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTMsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjQ2LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjM5LDI1MywyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNDgsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTEsMjU1LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1MywyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MSwyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTQsMjU1LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU0LDI1MywyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUwLDI1NSwyNTQsMjU1LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dXSxbW1syMTcsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjI1LDI1MiwyNDEsMjUzLDI1NSwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NV0sWzIzNCwyNTAsMjQxLDI1MCwyNTMsMjU1LDI1MywyNTQsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyMjMsMjU0LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjM4LDI1MywyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI0OCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI0OSwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjQ3LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTMsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTIsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU0LDI1MywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUwLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dXSxbW1sxODYsMjUxLDI1MCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjM0LDI1MSwyNDQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MSwyNTEsMjQzLDI1MywyNTQsMjU1LDI1NCwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTMsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyMzYsMjUzLDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUxLDI1MywyNTMsMjU0LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU0LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dXSxbW1syNDgsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUwLDI1NCwyNTIsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI0OCwyNTQsMjQ5LDI1MywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTMsMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNDYsMjUzLDI1MywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUyLDI1NCwyNTEsMjU0LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NCwyNTIsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI0OCwyNTQsMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTMsMjU1LDI1NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjUxLDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjQ1LDI1MSwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MywyNTMsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTEsMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTIsMjUzLDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1MiwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI0OSwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU1LDI1MywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUwLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dXV0saGk9WzAsMSwyLDMsNiw0LDUsNiw2LDYsNiw2LDYsNiw2LDcsMF0sZ2k9W10sX2k9W10sdmk9W10seWk9MSxiaT0yLHhpPVtdLFNpPVtdO3duKGBVcHNhbXBsZVJnYkxpbmVQYWlyYCxBbiwzKSx3bihgVXBzYW1wbGVCZ3JMaW5lUGFpcmAsam4sMyksd24oYFVwc2FtcGxlUmdiYUxpbmVQYWlyYCxJbiw0KSx3bihgVXBzYW1wbGVCZ3JhTGluZVBhaXJgLEZuLDQpLHduKGBVcHNhbXBsZUFyZ2JMaW5lUGFpcmAsUG4sNCksd24oYFVwc2FtcGxlUmdiYTQ0NDRMaW5lUGFpcmAsTm4sMiksd24oYFVwc2FtcGxlUmdiNTY1TGluZVBhaXJgLE1uLDIpO3ZhciBDaT1lLlVwc2FtcGxlUmdiTGluZVBhaXIsd2k9ZS5VcHNhbXBsZUJnckxpbmVQYWlyLFRpPWUuVXBzYW1wbGVSZ2JhTGluZVBhaXIsRWk9ZS5VcHNhbXBsZUJncmFMaW5lUGFpcixEaT1lLlVwc2FtcGxlQXJnYkxpbmVQYWlyLE9pPWUuVXBzYW1wbGVSZ2JhNDQ0NExpbmVQYWlyLGtpPWUuVXBzYW1wbGVSZ2I1NjVMaW5lUGFpcixBaT0xNixqaT0xPDxBaS0xLE1pPS0yMjcsTmk9NDgyLFBpPTYsRmk9KDI1Njw8UGkpLTEsSWk9MCxMaT1hKDI1NiksUmk9YSgyNTYpLHppPWEoMjU2KSxCaT1hKDI1NiksVmk9YShOaS1NaSksSGk9YShOaS1NaSk7TG4oYFl1dlRvUmdiUm93YCxBbiwzKSxMbihgWXV2VG9CZ3JSb3dgLGpuLDMpLExuKGBZdXZUb1JnYmFSb3dgLEluLDQpLExuKGBZdXZUb0JncmFSb3dgLEZuLDQpLExuKGBZdXZUb0FyZ2JSb3dgLFBuLDQpLExuKGBZdXZUb1JnYmE0NDQ0Um93YCxObiwyKSxMbihgWXV2VG9SZ2I1NjVSb3dgLE1uLDIpO3ZhciBVaT1bMCw0LDgsMTIsMTI4LDEzMiwxMzYsMTQwLDI1NiwyNjAsMjY0LDI2OCwzODQsMzg4LDM5MiwzOTZdLFdpPVswLDIsOF0sR2k9WzgsNyw2LDQsNCwyLDIsMiwxLDEsMSwxXSxLaT0xO3RoaXMuV2ViUERlY29kZVJHQkE9ZnVuY3Rpb24oZSxuLHMsYyxsKXt2YXIgdT1IcixkPW5ldyBsbixmPW5ldyBwZTtkLmJhPWYsZi5TPXUsZi53aWR0aD1bZi53aWR0aF0sZi5oZWlnaHQ9W2YuaGVpZ2h0XTt2YXIgcD1mLndpZHRoLG09Zi5oZWlnaHQsaD1uZXcgbWU7aWYoaD09bnVsbHx8ZT09bnVsbCl2YXIgZz0yO2Vsc2UgdChoIT1udWxsKSxnPVZuKGUsbixzLGgud2lkdGgsaC5oZWlnaHQsaC5QZCxoLlFkLGguZm9ybWF0LG51bGwpO2lmKGc9PTA/KHAhPW51bGwmJihwWzBdPWgud2lkdGhbMF0pLG0hPW51bGwmJihtWzBdPWguaGVpZ2h0WzBdKSxwPTEpOnA9MCxwKXtmLndpZHRoPWYud2lkdGhbMF0sZi5oZWlnaHQ9Zi5oZWlnaHRbMF0sYyE9bnVsbCYmKGNbMF09Zi53aWR0aCksbCE9bnVsbCYmKGxbMF09Zi5oZWlnaHQpO3Q6e2lmKGM9bmV3ICRlLChsPW5ldyB1bikuZGF0YT1lLGwudz1uLGwuaGE9cyxsLmtkPTEsbj1bMF0sdChsIT1udWxsKSwoKGU9Vm4obC5kYXRhLGwudyxsLmhhLG51bGwsbnVsbCxudWxsLG4sbnVsbCxsKSk9PTB8fGU9PTcpJiZuWzBdJiYoZT00KSwobj1lKT09MCl7aWYodChkIT1udWxsKSxjLmRhdGE9bC5kYXRhLGMudz1sLncrbC5vZmZzZXQsYy5oYT1sLmhhLWwub2Zmc2V0LGMucHV0PWJlLGMuYWM9eWUsYy5iYz14ZSxjLm1hPWQsbC54YSl7aWYoKGU9RmUoKSk9PW51bGwpe2Q9MTticmVhayB0fWlmKGZ1bmN0aW9uKGUsbil7dmFyIHI9WzBdLGk9WzBdLGE9WzBdO2U6Zm9yKDs7KXtpZihlPT1udWxsKXJldHVybiAwO2lmKG49PW51bGwpcmV0dXJuIGUuYT0yLDA7aWYoZS5sPW4sZS5hPTAsXyhlLm0sbi5kYXRhLG4udyxuLmhhKSwhU2UoZS5tLHIsaSxhKSl7ZS5hPTM7YnJlYWsgZX1pZihlLnhiPWJpLG4ud2lkdGg9clswXSxuLmhlaWdodD1pWzBdLCFJZShyWzBdLGlbMF0sMSxlLG51bGwpKWJyZWFrIGU7cmV0dXJuIDF9cmV0dXJuIHQoZS5hIT0wKSwwfShlLGMpKXtpZihjPShuPVduKGMud2lkdGgsYy5oZWlnaHQsZC5PYSxkLmJhKSk9PTApe2U6e2M9ZTtyOmZvcig7Oyl7aWYoYz09bnVsbCl7Yz0wO2JyZWFrIGV9aWYodChjLnMueWMhPW51bGwpLHQoYy5zLllhIT1udWxsKSx0KDA8Yy5zLldiKSx0KChzPWMubCkhPW51bGwpLHQoKGw9cy5tYSkhPW51bGwpLGMueGIhPTApe2lmKGMuY2E9bC5iYSxjLnRiPWwudGIsdChjLmNhIT1udWxsKSwhSG4obC5PYSxzLFdyKSl7Yy5hPTI7YnJlYWsgcn1pZighTGUoYyxzLndpZHRoKXx8cy5kYSlicmVhayByO2lmKChzLmRhfHx1ZShjLmNhLlMpKSYmQ24oKSwxMT5jLmNhLlN8fChhbGVydChgdG9kbzpXZWJQSW5pdENvbnZlcnRBUkdCVG9ZVVZgKSxjLmNhLmYua2IuRiE9bnVsbCYmQ24oKSksYy5QYiYmMDxjLnMudWEmJmMucy52Yi5YPT1udWxsJiYhTihjLnMudmIsYy5zLldhLlhhKSl7Yy5hPTE7YnJlYWsgcn1jLnhiPTB9aWYoIU5lKGMsYy5WLGMuQmEsYy5jLGMuaSxzLm8sa2UpKWJyZWFrIHI7bC5EYz1jLk1hLGM9MTticmVhayBlfXQoYy5hIT0wKSxjPTB9Yz0hY31jJiYobj1lLmEpfWVsc2Ugbj1lLmF9ZWxzZXtpZigoZT1uZXcgZXQpPT1udWxsKXtkPTE7YnJlYWsgdH1pZihlLkZhPWwubmEsZS5QPWwuUCxlLnFjPWwuU2EscnQoZSxjKSl7aWYoKG49V24oYy53aWR0aCxjLmhlaWdodCxkLk9hLGQuYmEpKT09MCl7aWYoZS5BYT0wLHM9ZC5PYSx0KChsPWUpIT1udWxsKSxzIT1udWxsKXtpZigwPChwPTA+KHA9cy5NZCk/MDoxMDA8cD8yNTU6MjU1KnAvMTAwKSl7Zm9yKG09aD0wOzQ+bTsrK20pMTI+KGc9bC5wYlttXSkubGMmJihnLmlhPXAqR2lbMD5nLmxjPzA6Zy5sY10+PjMpLGh8PWcuaWE7aCYmKGFsZXJ0KGB0b2RvOlZQOEluaXRSYW5kb21gKSxsLmlhPTEpfWwuR2E9cy5JZCwxMDA8bC5HYT9sLkdhPTEwMDowPmwuR2EmJihsLkdhPTApfShmdW5jdGlvbihlLG4pe2lmKGU9PW51bGwpcmV0dXJuIDA7aWYobj09bnVsbClyZXR1cm4gdHQoZSwyLGBOVUxMIFZQOElvIHBhcmFtZXRlciBpbiBWUDhEZWNvZGUoKS5gKTtpZighZS5jYiYmIXJ0KGUsbikpcmV0dXJuIDA7aWYodChlLmNiKSxuLmFjPT1udWxsfHxuLmFjKG4pKXtuLm9iJiYoZS5MPTApO3ZhciBzPVdpW2UuTF07aWYoZS5MPT0yPyhlLnliPTAsZS56Yj0wKTooZS55Yj1uLnYtcz4+NCxlLnpiPW4uai1zPj40LDA+ZS55YiYmKGUueWI9MCksMD5lLnpiJiYoZS56Yj0wKSksZS5WYT1uLm8rMTUrcz4+NCxlLkhiPW4udmErMTUrcz4+NCxlLkhiPmUuemEmJihlLkhiPWUuemEpLGUuVmE+ZS5VYiYmKGUuVmE9ZS5VYiksMDxlLkwpe3ZhciBjPWUuZWQ7Zm9yKHM9MDs0PnM7KytzKXt2YXIgbDtpZihlLlFhLkNiKXt2YXIgdT1lLlFhLkxiW3NdO2UuUWEuRmJ8fCh1Kz1jLlRiKX1lbHNlIHU9Yy5UYjtmb3IobD0wOzE+PWw7KytsKXt2YXIgZD1lLmdkW3NdW2xdLGY9dTtpZihjLlBjJiYoZis9Yy52ZFswXSxsJiYoZis9Yy5vZFswXSkpLDA8KGY9MD5mPzA6NjM8Zj82MzpmKSl7dmFyIHA9ZjswPGMud2ImJihwPTQ8Yy53Yj9wPj4yOnA+PjEpPjktYy53YiYmKHA9OS1jLndiKSwxPnAmJihwPTEpLGQuZGQ9cCxkLnRjPTIqZitwLGQubGQ9NDA8PWY/MjorKDE1PD1mKX1lbHNlIGQudGM9MDtkLkxhPWx9fX1zPTB9ZWxzZSB0dChlLDYsYEZyYW1lIHNldHVwIGZhaWxlZGApLHM9ZS5hO2lmKHM9cz09MCl7aWYocyl7ZS4kYz0wLDA8ZS5BYXx8KGUuSWM9S2kpO2U6e3M9ZS5JYyxjPTQqKHA9ZS56YSk7dmFyIG09MzIqcCxoPXArMSxnPTA8ZS5MP3AqKDA8ZS5BYT8yOjEpOjAsXz0oZS5BYT09Mj8yOjEpKnA7aWYoKGQ9Yys4MzIrKGw9MyooMTYqcytXaVtlLkxdKS8yKm0pKyh1PWUuRmEhPW51bGwmJjA8ZS5GYS5sZW5ndGg/ZS5LYy5jKmUuS2MuaTowKSkhPWQpcz0wO2Vsc2V7aWYoZD5lLlZiKXtpZihlLlZiPTAsZS5FYz1hKGQpLGUuRmM9MCxlLkVjPT1udWxsKXtzPXR0KGUsMSxgbm8gbWVtb3J5IGR1cmluZyBmcmFtZSBpbml0aWFsaXphdGlvbi5gKTticmVhayBlfWUuVmI9ZH1kPWUuRWMsZj1lLkZjLGUuQWM9ZCxlLkJjPWYsZis9YyxlLkdkPW8obSxYZSksZS5IZD0wLGUucmI9byhoKzEsS2UpLGUuc2I9MSxlLndhPWc/byhnLEdlKTpudWxsLGUuWT0wLGUuRC5OYj0wLGUuRC53YT1lLndhLGUuRC5ZPWUuWSwwPGUuQWEmJihlLkQuWSs9cCksdCghMCksZS5vYz1kLGUucGM9ZixmKz04MzIsZS55YT1vKF8sSmUpLGUuYWE9MCxlLkQueWE9ZS55YSxlLkQuYWE9ZS5hYSxlLkFhPT0yJiYoZS5ELmFhKz1wKSxlLlI9MTYqcCxlLkI9OCpwLHA9KG09V2lbZS5MXSkqZS5SLG09bS8yKmUuQixlLnNhPWQsZS50YT1mK3AsZS5xYT1lLnNhLGUucmE9ZS50YSsxNipzKmUuUittLGUuSGE9ZS5xYSxlLklhPWUucmErOCpzKmUuQittLGUuJGM9MCxmKz1sLGUubWI9dT9kOm51bGwsZS5uYj11P2Y6bnVsbCx0KGYrdTw9ZS5GYytlLlZiKSxhdChlKSxpKGUuQWMsZS5CYywwLGMpLHM9MX19aWYocyl7aWYobi5rYT0wLG4ueT1lLnNhLG4uTz1lLnRhLG4uZj1lLnFhLG4uTj1lLnJhLG4uZWE9ZS5IYSxuLlZkPWUuSWEsbi5mYT1lLlIsbi5SYz1lLkIsbi5GPW51bGwsbi5KPTAsIUlyKXtmb3Iocz0tMjU1OzI1NT49czsrK3MpTXJbMjU1K3NdPTA+cz8tczpzO2ZvcihzPS0xMDIwOzEwMjA+PXM7KytzKU5yWzEwMjArc109LTEyOD5zPy0xMjg6MTI3PHM/MTI3OnM7Zm9yKHM9LTExMjsxMTI+PXM7KytzKVByWzExMitzXT0tMTY+cz8tMTY6MTU8cz8xNTpzO2ZvcihzPS0yNTU7NTEwPj1zOysrcylGclsyNTUrc109MD5zPzA6MjU1PHM/MjU1OnM7SXI9MX11cj1odCxkcj1kdCxwcj1mdCxtcj1wdCxocj1tdCxmcj11dCxncj1lbixfcj10bix2cj1hbix5cj1vbixicj1ubix4cj1ybixTcj1zbixDcj1jbix3cj1KdCxUcj1ZdCxFcj1YdCxEcj1adCxfaVswXT1BdCxfaVsxXT1fdCxfaVsyXT1PdCxfaVszXT1rdCxfaVs0XT1qdCxfaVs1XT1OdCxfaVs2XT1NdCxfaVs3XT1QdCxfaVs4XT1JdCxfaVs5XT1GdCxnaVswXT1DdCxnaVsxXT15dCxnaVsyXT1idCxnaVszXT14dCxnaVs0XT13dCxnaVs1XT1UdCxnaVs2XT1FdCx2aVswXT1CdCx2aVsxXT12dCx2aVsyXT1MdCx2aVszXT1SdCx2aVs0XT1IdCx2aVs1XT1WdCx2aVs2XT1VdCxzPTF9ZWxzZSBzPTB9cyYmPWZ1bmN0aW9uKGUsbil7Zm9yKGUuTT0wO2UuTTxlLlZhOysrZS5NKXt2YXIgbyxzPWUuSmNbZS5NJmUuWGJdLGM9ZS5tLGw9ZTtmb3Iobz0wO288bC56YTsrK28pe3ZhciB1PWMsZD1sLGY9ZC5BYyxwPWQuQmMrNCpvLG09ZC56YyxoPWQueWFbZC5hYStvXTtpZihkLlFhLkJiP2guJGI9Tyh1LGQuUGEuamJbMF0pPzIrTyh1LGQuUGEuamJbMl0pOk8odSxkLlBhLmpiWzFdKTpoLiRiPTAsZC5rYyYmKGguQWQ9Tyh1LGQuQmQpKSxoLlphPSFPKHUsMTQ1KSswLGguWmEpe3ZhciBnPWguT2IsXz0wO2ZvcihkPTA7ND5kOysrZCl7dmFyIHYseT1tWzArZF07Zm9yKHY9MDs0PnY7Kyt2KXt5PXBpW2ZbcCt2XV1beV07Zm9yKHZhciBiPWRpW08odSx5WzBdKV07MDxiOyliPWRpWzIqYitPKHUseVtiXSldO3k9LWIsZltwK3ZdPXl9cihnLF8sZixwLDQpLF8rPTQsbVswK2RdPXl9fWVsc2UgeT1PKHUsMTU2KT9PKHUsMTI4KT8xOjM6Tyh1LDE2Myk/MjowLGguT2JbMF09eSxpKGYscCx5LDQpLGkobSwwLHksNCk7aC5EZD1PKHUsMTQyKT9PKHUsMTE0KT9PKHUsMTgzKT8xOjM6MjowfWlmKGwubS5LYSlyZXR1cm4gdHQoZSw3LGBQcmVtYXR1cmUgZW5kLW9mLXBhcnRpdGlvbjAgZW5jb3VudGVyZWQuYCk7Zm9yKDtlLmphPGUuemE7KytlLmphKXtpZihsPXMsdT0oYz1lKS5yYltjLnNiLTFdLGY9Yy5yYltjLnNiK2MuamFdLG89Yy55YVtjLmFhK2MuamFdLHA9Yy5rYz9vLkFkOjApdS5sYT1mLmxhPTAsby5aYXx8KHUuTmE9Zi5OYT0wKSxvLkhjPTAsby5HYz0wLG8uaWE9MDtlbHNle3ZhciB4LFM7aWYodT1mLGY9bCxwPWMuUGEuWGMsbT1jLnlhW2MuYWErYy5qYV0saD1jLnBiW20uJGJdLGQ9bS5hZCxnPTAsXz1jLnJiW2Muc2ItMV0seT12PTAsaShkLGcsMCwzODQpLG0uWmEpdmFyIEM9MCx3PXBbM107ZWxzZXtiPWEoMTYpO3ZhciBUPXUuTmErXy5OYTtpZihUPWNpKGYscFsxXSxULGguRWIsMCxiLDApLHUuTmE9Xy5OYT0oMDxUKSswLDE8VCl1cihiLDAsZCxnKTtlbHNle3ZhciBFPWJbMF0rMz4+Mztmb3IoYj0wOzI1Nj5iO2IrPTE2KWRbZytiXT1FfUM9MSx3PXBbMF19dmFyIEQ9MTUmdS5sYSxrPTE1Jl8ubGE7Zm9yKGI9MDs0PmI7KytiKXt2YXIgQT0xJms7Zm9yKEU9Uz0wOzQ+RTsrK0UpRD1EPj4xfChBPShUPWNpKGYsdyxUPUErKDEmRCksaC5TYyxDLGQsZykpPkMpPDw3LFM9Uzw8MnwoMzxUPzM6MTxUPzI6ZFtnKzBdIT0wKSxnKz0xNjtEPj49NCxrPWs+PjF8QTw8Nyx2PSh2PDw4fFMpPj4+MH1mb3Iodz1ELEM9az4+NCx4PTA7ND54O3grPTIpe2ZvcihTPTAsRD11LmxhPj40K3gsaz1fLmxhPj40K3gsYj0wOzI+YjsrK2Ipe2ZvcihBPTEmayxFPTA7Mj5FOysrRSlUPUErKDEmRCksRD1EPj4xfChBPTA8KFQ9Y2koZixwWzJdLFQsaC5RYywwLGQsZykpKTw8MyxTPVM8PDJ8KDM8VD8zOjE8VD8yOmRbZyswXSE9MCksZys9MTY7RD4+PTIsaz1rPj4xfEE8PDV9eXw9Uzw8NCp4LHd8PUQ8PDQ8PHgsQ3w9KDI0MCZrKTw8eH11LmxhPXcsXy5sYT1DLG0uSGM9dixtLkdjPXksbS5pYT00MzY5MCZ5PzA6aC5pYSxwPSEodnx5KX1pZigwPGMuTCYmKGMud2FbYy5ZK2MuamFdPWMuZ2Rbby4kYl1bby5aYV0sYy53YVtjLlkrYy5qYV0uTGF8PSFwKSxsLkthKXJldHVybiB0dChlLDcsYFByZW1hdHVyZSBlbmQtb2YtZmlsZSBlbmNvdW50ZXJlZC5gKX1pZihhdChlKSxjPW4sbD0xLG89KHM9ZSkuRCx1PTA8cy5MJiZzLk0+PXMuemImJnMuTTw9cy5WYSxzLkFhPT0wKWU6e2lmKG8uTT1zLk0sby51Yz11LEJuKHMsbyksbD0xLG89KFM9cy5EKS5OYix1PSh5PVdpW3MuTF0pKnMuUixmPXkvMipzLkIsYj0xNipvKnMuUixFPTgqbypzLkIscD1zLnNhLG09cy50YS11K2IsaD1zLnFhLGQ9cy5yYS1mK0UsZz1zLkhhLF89cy5JYS1mK0Usaz0oRD1TLk0pPT0wLHY9RD49cy5WYS0xLHMuQWE9PTImJkJuKHMsUyksUy51Yylmb3IoQT0oVD1zKS5ELk0sdChULkQudWMpLFM9VC55YjtTPFQuSGI7KytTKXtDPVMsdz1BO3ZhciBqPShNPShWPVQpLkQpLk5iO3g9Vi5SO3ZhciBNPU0ud2FbTS5ZK0NdLE49Vi5zYSxQPVYudGErMTYqaip4KzE2KkMsRj1NLmRkLEk9TS50YztpZihJIT0wKWlmKHQoMzw9SSksVi5MPT0xKTA8QyYmVHIoTixQLHgsSSs0KSxNLkxhJiZEcihOLFAseCxJKSwwPHcmJndyKE4sUCx4LEkrNCksTS5MYSYmRXIoTixQLHgsSSk7ZWxzZXt2YXIgTD1WLkIsUj1WLnFhLHo9Vi5yYSs4KmoqTCs4KkMsQj1WLkhhLFY9Vi5JYSs4KmoqTCs4KkM7aj1NLmxkLDA8QyYmKF9yKE4sUCx4LEkrNCxGLGopLHlyKFIseixCLFYsTCxJKzQsRixqKSksTS5MYSYmKHhyKE4sUCx4LEksRixqKSxDcihSLHosQixWLEwsSSxGLGopKSwwPHcmJihncihOLFAseCxJKzQsRixqKSx2cihSLHosQixWLEwsSSs0LEYsaikpLE0uTGEmJihicihOLFAseCxJLEYsaiksU3IoUix6LEIsVixMLEksRixqKSl9fWlmKHMuaWEmJmFsZXJ0KGB0b2RvOkRpdGhlclJvd2ApLGMucHV0IT1udWxsKXtpZihTPTE2KkQsRD0xNiooRCsxKSxrPyhjLnk9cy5zYSxjLk89cy50YStiLGMuZj1zLnFhLGMuTj1zLnJhK0UsYy5lYT1zLkhhLGMuVz1zLklhK0UpOihTLT15LGMueT1wLGMuTz1tLGMuZj1oLGMuTj1kLGMuZWE9ZyxjLlc9Xyksdnx8KEQtPXkpLEQ+Yy5vJiYoRD1jLm8pLGMuRj1udWxsLGMuSj1udWxsLHMuRmEhPW51bGwmJjA8cy5GYS5sZW5ndGgmJlM8RCYmKGMuSj12bihzLGMsUyxELVMpLGMuRj1zLm1iLGMuRj09bnVsbCYmYy5GLmxlbmd0aD09MCkpe2w9dHQocywzLGBDb3VsZCBub3QgZGVjb2RlIGFscGhhIGRhdGEuYCk7YnJlYWsgZX1TPGMuaiYmKHk9Yy5qLVMsUz1jLmosdCghKDEmeSkpLGMuTys9cy5SKnksYy5OKz1zLkIqKHk+PjEpLGMuVys9cy5CKih5Pj4xKSxjLkYhPW51bGwmJihjLkorPWMud2lkdGgqeSkpLFM8RCYmKGMuTys9Yy52LGMuTis9Yy52Pj4xLGMuVys9Yy52Pj4xLGMuRiE9bnVsbCYmKGMuSis9Yy52KSxjLmthPVMtYy5qLGMuVT1jLnZhLWMudixjLlQ9RC1TLGw9Yy5wdXQoYykpfW8rMSE9cy5JY3x8dnx8KHIocy5zYSxzLnRhLXUscCxtKzE2KnMuUix1KSxyKHMucWEscy5yYS1mLGgsZCs4KnMuQixmKSxyKHMuSGEscy5JYS1mLGcsXys4KnMuQixmKSl9aWYoIWwpcmV0dXJuIHR0KGUsNixgT3V0cHV0IGFib3J0ZWQuYCl9cmV0dXJuIDF9KGUsbiksbi5iYyE9bnVsbCYmbi5iYyhuKSxzJj0xfXJldHVybiBzPyhlLmNiPTAscyk6MH0pKGUsYyl8fChuPWUuYSl9fWVsc2Ugbj1lLmF9bj09MCYmZC5PYSE9bnVsbCYmZC5PYS5mZCYmKG49VW4oZC5iYSkpfWQ9bn11PWQ9PTA/MTE+dT9mLmYuUkdCQS5lYjpmLmYua2IueTpudWxsfWVsc2UgdT1udWxsO3JldHVybiB1fTt2YXIgcWk9WzMsNCwzLDQsNCwyLDIsNCw0LDQsMiwxLDFdfTtmdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciBuPWBgLHI9MDtyPDQ7cisrKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVt0KytdKTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGVbdCswXXxlW3QrMV08PDh9ZnVuY3Rpb24gZChlLHQpe3JldHVybihlW3QrMF18ZVt0KzFdPDw4fGVbdCsyXTw8MTYpPj4+MH1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuKGVbdCswXXxlW3QrMV08PDh8ZVt0KzJdPDwxNnxlW3QrM108PDI0KT4+PjB9bmV3IGM7dmFyIHA9WzBdLG09WzBdLGg9W10sZz1uZXcgYyxfPWUsdj1mdW5jdGlvbihlLHQpe3ZhciBuPXt9LHI9MCxpPSExLGE9MCxvPTA7aWYobi5mcmFtZXM9W10sIWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjw0O24rKylpZihlW3Qrbl0hPWBSSUZGYC5jaGFyQ29kZUF0KG4pKXJldHVybiEwO3JldHVybiExfShlLHQpKXtmb3IoZihlLHQrPTQpLHQrPTg7dDxlLmxlbmd0aDspe3ZhciBzPWwoZSx0KSxjPWYoZSx0Kz00KTt0Kz00O3ZhciBwPWMrKDEmYyk7c3dpdGNoKHMpe2Nhc2VgVlA4IGA6Y2FzZWBWUDhMYDpuLmZyYW1lc1tyXT09PXZvaWQgMCYmKG4uZnJhbWVzW3JdPXt9KSwoZz1uLmZyYW1lc1tyXSkuc3JjX29mZj1pP286dC04LGcuc3JjX3NpemU9YStjKzgscisrLGkmJihpPSExLGE9MCxvPTApO2JyZWFrO2Nhc2VgVlA4WGA6KGc9bi5oZWFkZXI9e30pLmZlYXR1cmVfZmxhZ3M9ZVt0XTt2YXIgbT10KzQ7Zy5jYW52YXNfd2lkdGg9MStkKGUsbSksbSs9MyxnLmNhbnZhc19oZWlnaHQ9MStkKGUsbSksbSs9MzticmVhaztjYXNlYEFMUEhgOmk9ITAsYT1wKzgsbz10LTg7YnJlYWs7Y2FzZWBBTklNYDooZz1uLmhlYWRlcikuYmdjb2xvcj1mKGUsdCksbT10KzQsZy5sb29wX2NvdW50PXUoZSxtKSxtKz0yO2JyZWFrO2Nhc2VgQU5NRmA6dmFyIGgsZzsoZz1uLmZyYW1lc1tyXT17fSkub2Zmc2V0X3g9MipkKGUsdCksdCs9MyxnLm9mZnNldF95PTIqZChlLHQpLHQrPTMsZy53aWR0aD0xK2QoZSx0KSx0Kz0zLGcuaGVpZ2h0PTErZChlLHQpLHQrPTMsZy5kdXJhdGlvbj1kKGUsdCksdCs9MyxoPWVbdCsrXSxnLmRpc3Bvc2U9MSZoLGcuYmxlbmQ9aD4+MSYxfXMhPWBBTk1GYCYmKHQrPXApfXJldHVybiBufX0oXywwKTt2LnJlc3BvbnNlPV8sdi5yZ2Jhb3V0cHV0PSEwLHYuZGF0YXVybD0hMTt2YXIgeT12LmhlYWRlcj92LmhlYWRlcjpudWxsLGI9di5mcmFtZXM/di5mcmFtZXM6bnVsbDtpZih5KXt5Lmxvb3BfY291bnRlcj15Lmxvb3BfY291bnQscD1beS5jYW52YXNfaGVpZ2h0XSxtPVt5LmNhbnZhc193aWR0aF07Zm9yKHZhciB4PTA7eDxiLmxlbmd0aCYmYlt4XS5ibGVuZCE9MDt4KyspO312YXIgUz1iWzBdLEM9Zy5XZWJQRGVjb2RlUkdCQShfLFMuc3JjX29mZixTLnNyY19zaXplLG0scCk7Uy5yZ2JhPUMsUy5pbWd3aWR0aD1tWzBdLFMuaW1naGVpZ2h0PXBbMF07Zm9yKHZhciB3PTA7dzxtWzBdKnBbMF0qNDt3KyspaFt3XT1DW3ddO3JldHVybiB0aGlzLndpZHRoPW0sdGhpcy5oZWlnaHQ9cCx0aGlzLmRhdGE9aCx0aGlzfWZ1bmN0aW9uIEloKCl7dmFyIGUsdD10aGlzLmludGVybmFsLl9fbWV0YWRhdGFfXy5tZXRhZGF0YSxuPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0KSk7ZT10aGlzLmludGVybmFsLl9fbWV0YWRhdGFfXy5yYXdYbWw/bjpgPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpqc3BkZj0iYCt0aGlzLmludGVybmFsLl9fbWV0YWRhdGFfXy5uYW1lc3BhY2VVcmkrYCI+PGpzcGRmOm1ldGFkYXRhPmArbi5yZXBsYWNlKC8mL2csYCZhbXA7YCkucmVwbGFjZSgvPC9nLGAmbHQ7YCkucmVwbGFjZSgvPi9nLGAmZ3Q7YCkucmVwbGFjZSgvIi9nLGAmcXVvdDtgKS5yZXBsYWNlKC8nL2csYCZhcG9zO2ApK2A8L2pzcGRmOm1ldGFkYXRhPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT5gLHRoaXMuaW50ZXJuYWwuX19tZXRhZGF0YV9fLm1ldGFkYXRhT2JqZWN0TnVtYmVyPXRoaXMuaW50ZXJuYWwubmV3T2JqZWN0KCksdGhpcy5pbnRlcm5hbC53cml0ZShgPDwgL1R5cGUgL01ldGFkYXRhIC9TdWJ0eXBlIC9YTUwgL0xlbmd0aCBgK2UubGVuZ3RoK2AgPj5gKSx0aGlzLmludGVybmFsLndyaXRlKGBzdHJlYW1gKSx0aGlzLmludGVybmFsLndyaXRlKGUpLHRoaXMuaW50ZXJuYWwud3JpdGUoYGVuZHN0cmVhbWApLHRoaXMuaW50ZXJuYWwud3JpdGUoYGVuZG9iamApfWZ1bmN0aW9uIExoKCl7dGhpcy5pbnRlcm5hbC5fX21ldGFkYXRhX18ubWV0YWRhdGFPYmplY3ROdW1iZXImJnRoaXMuaW50ZXJuYWwud3JpdGUoYC9NZXRhZGF0YSBgK3RoaXMuaW50ZXJuYWwuX19tZXRhZGF0YV9fLm1ldGFkYXRhT2JqZWN0TnVtYmVyK2AgMCBSYCl9dmFyIFJoLHpoLEJoLFZoLEhoLFVoLFdoLEdoLEtoLHFoLEpoLFloLFhoLFpoLFFoLCRoLGVnLHRnLG5nLHJnLGlnLGFnLG9nLHNnLGNnLGxnLHVnLGRnLGZnLHBnLG1nLGhnLGdnLF9nLHZnLHlnLGJnLHhnLFNnLENnLHdnLFRnLEVnLERnLE9nLGtnLEFnLGpnLFEsTWcsTmcsUGcsRmcsSWcsTGcsUmcsemcsQmcsVmcsSGcsVWcsV2csR2csS2cscWcsSmcsWWcsWGcsWmcsUWcsJGcsZV8sdF8sbl8scl8saV8sYV8sb18sc18sY18sbF8sdV8sZF8sZl8scF89bygoKCk9PntqKCksd2UoKSxJZSgpLGZzKCksaygpLFJoPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6dGhpc30oKSx6aD17bG9nOkhtLHdhcm46ZnVuY3Rpb24oZSl7UmguY29uc29sZSYmKHR5cGVvZiBSaC5jb25zb2xlLndhcm49PWBmdW5jdGlvbmA/UmguY29uc29sZS53YXJuLmFwcGx5KFJoLmNvbnNvbGUsYXJndW1lbnRzKTpIbS5jYWxsKG51bGwsYXJndW1lbnRzKSl9LGVycm9yOmZ1bmN0aW9uKGUpe1JoLmNvbnNvbGUmJih0eXBlb2YgUmguY29uc29sZS5lcnJvcj09YGZ1bmN0aW9uYD9SaC5jb25zb2xlLmVycm9yLmFwcGx5KFJoLmNvbnNvbGUsYXJndW1lbnRzKTpIbShlKSl9fSxCaD1SaC5zYXZlQXN8fCgodHlwZW9mIHdpbmRvdz5gdWA/YHVuZGVmaW5lZGA6QSh3aW5kb3cpKSE9PWBvYmplY3RgfHx3aW5kb3chPT1SaD9mdW5jdGlvbigpe306dHlwZW9mIEhUTUxBbmNob3JFbGVtZW50PGB1YCYmYGRvd25sb2FkYGluIEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZT9mdW5jdGlvbihlLHQsbil7dmFyIHI9UmguVVJMfHxSaC53ZWJraXRVUkwsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBhYCk7dD10fHxlLm5hbWV8fGBkb3dubG9hZGAsaS5kb3dubG9hZD10LGkucmVsPWBub29wZW5lcmAsdHlwZW9mIGU9PWBzdHJpbmdgPyhpLmhyZWY9ZSxpLm9yaWdpbj09PWxvY2F0aW9uLm9yaWdpbj9HbShpKTpXbShpLmhyZWYpP1VtKGUsdCxuKTpHbShpLGkudGFyZ2V0PWBfYmxhbmtgKSk6KGkuaHJlZj1yLmNyZWF0ZU9iamVjdFVSTChlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5yZXZva2VPYmplY3RVUkwoaS5ocmVmKX0sNGU0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7R20oaSl9LDApKX06YG1zU2F2ZU9yT3BlbkJsb2JgaW4gbmF2aWdhdG9yP2Z1bmN0aW9uKGUsdCxuKXtpZih0PXR8fGUubmFtZXx8YGRvd25sb2FkYCx0eXBlb2YgZT09YHN0cmluZ2ApaWYoV20oZSkpVW0oZSx0LG4pO2Vsc2V7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3IuaHJlZj1lLHIudGFyZ2V0PWBfYmxhbmtgLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtHbShyKX0pfWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXZvaWQgMD90PXthdXRvQm9tOiExfTpBKHQpIT09YG9iamVjdGAmJih6aC53YXJuKGBEZXByZWNhdGVkOiBFeHBlY3RlZCB0aGlyZCBhcmd1bWVudCB0byBiZSBhIG9iamVjdGApLHQ9e2F1dG9Cb206IXR9KSx0LmF1dG9Cb20mJi9eXHMqKD86dGV4dFwvXFMqfGFwcGxpY2F0aW9uXC94bWx8XFMqXC9cUypcK3htbClccyo7LipjaGFyc2V0XHMqPVxzKnV0Zi04L2kudGVzdChlLnR5cGUpP25ldyBCbG9iKFtg77u/YCxlXSx7dHlwZTplLnR5cGV9KTplfShlLG4pLHQpfTpmdW5jdGlvbihlLHQsbixyKXtpZigocnx8PW9wZW4oYGAsYF9ibGFua2ApKSYmKHIuZG9jdW1lbnQudGl0bGU9ci5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1gZG93bmxvYWRpbmcuLi5gKSx0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIFVtKGUsdCxuKTt2YXIgaT1lLnR5cGU9PT1gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYCxhPS9jb25zdHJ1Y3Rvci9pLnRlc3QoUmguSFRNTEVsZW1lbnQpfHxSaC5zYWZhcmksbz0vQ3JpT1NcL1tcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKChvfHxpJiZhKSYmKHR5cGVvZiBGaWxlUmVhZGVyPmB1YD9gdW5kZWZpbmVkYDpBKEZpbGVSZWFkZXIpKT09PWBvYmplY3RgKXt2YXIgcz1uZXcgRmlsZVJlYWRlcjtzLm9ubG9hZGVuZD1mdW5jdGlvbigpe3ZhciBlPXMucmVzdWx0O2U9bz9lOmUucmVwbGFjZSgvXmRhdGE6W147XSo7LyxgZGF0YTphdHRhY2htZW50L2ZpbGU7YCkscj9yLmxvY2F0aW9uLmhyZWY9ZTpsb2NhdGlvbj1lLHI9bnVsbH0scy5yZWFkQXNEYXRhVVJMKGUpfWVsc2V7dmFyIGM9UmguVVJMfHxSaC53ZWJraXRVUkwsbD1jLmNyZWF0ZU9iamVjdFVSTChlKTtyP3IubG9jYXRpb249bDpsb2NhdGlvbi5ocmVmPWwscj1udWxsLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJldm9rZU9iamVjdFVSTChsKX0sNGU0KX19KSxWaD1SaC5hdG9iLmJpbmQoUmgpLEhoPVJoLmJ0b2EuYmluZChSaCksVWg9YDAxMjM0NTY3ODlhYmNkZWZgLnNwbGl0KGBgKSxXaD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdPXRoKGVbdF0pO3JldHVybiBlLmpvaW4oYGApfSgkbShgaGVsbG9gKSkhPWA1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MmAsR2g9e3ByaW50OjQsbW9kaWZ5OjgsY29weToxNiwiYW5ub3QtZm9ybXMiOjMyfSxvaC5wcm90b3R5cGUubHNiRmlyc3RXb3JkPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlLGU+PjgmMjU1LGU+PjE2JjI1NSxlPj4yNCYyNTUpfSxvaC5wcm90b3R5cGUudG9IZXhTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoYGApLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oYDBgKygyNTUmZS5jaGFyQ29kZUF0KDApKS50b1N0cmluZygxNikpLnNsaWNlKC0yKX0pLmpvaW4oYGApfSxvaC5wcm90b3R5cGUuaGV4VG9CeXRlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bis9Mil0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnN1YnN0cihuLDIpLDE2KSkpO3JldHVybiB0LmpvaW4oYGApfSxvaC5wcm90b3R5cGUucHJvY2Vzc093bmVyUGFzc3dvcmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYWgocmgodCkuc3Vic3RyKDAsNSksZSl9LG9oLnByb3RvdHlwZS5lbmNyeXB0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yaCh0aGlzLmVuY3J5cHRpb25LZXkrU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmZSxlPj44JjI1NSxlPj4xNiYyNTUsMjU1JnQsdD4+OCYyNTUpKS5zdWJzdHIoMCwxMCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhaChuLGUpfX0sbGgucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXt2YXIgdCxuPWBpZCxvYmplY3ROdW1iZXIsZXF1YWxzYDtpZighZXx8QShlKSE9PUEodGhpcykpcmV0dXJuITE7dmFyIHI9MDtmb3IodCBpbiB0aGlzKWlmKCEobi5pbmRleE9mKHQpPj0wKSl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmIWUuaGFzT3duUHJvcGVydHkodCl8fHRoaXNbdF0hPT1lW3RdKXJldHVybiExO3IrK31mb3IodCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJm4uaW5kZXhPZih0KTwwJiZyLS07cmV0dXJuIHI9PT0wfSxaLkFQST17ZXZlbnRzOltdfSxaLnZlcnNpb249YDQuMi4xYCxLaD1aLkFQSSxxaD0xLEpoPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcL2csYFxcXFxgKS5yZXBsYWNlKC9cKC9nLGBcXChgKS5yZXBsYWNlKC9cKS9nLGBcXClgKX0sWWg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFxcXC9nLGBcXGApLnJlcGxhY2UoL1xcXCgvZyxgKGApLnJlcGxhY2UoL1xcXCkvZyxgKWApfSxYaD1mdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygpLnJlcGxhY2UoLyMvZyxgIzIzYCkucmVwbGFjZSgvW1xzXG5ccigpPD5bXF17fVwvJV0vZyxmdW5jdGlvbihlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuYCNgKyh0Lmxlbmd0aD09PTE/YDBgK3Q6dCl9KX0sWmg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9GaXhlZCgyKX0sUWg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9GaXhlZCg1KX0sS2guX19hY3JvZm9ybV9fPXt9LCRoPWZ1bmN0aW9uKGUsdCl7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZX0sZWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUqcWh9LHRnPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB2ZyxuPVEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpfHwwLHI9US5pbnRlcm5hbC5nZXRXaWR0aChlKXx8MDtyZXR1cm4gdC5CQm94PVswLDAsTnVtYmVyKFpoKHIpKSxOdW1iZXIoWmgobikpXSx0fSxuZz1LaC5fX2Fjcm9mb3JtX18uc2V0Qml0PWZ1bmN0aW9uKGUsdCl7aWYoZXx8PTAsdHx8PTAsaXNOYU4oZSl8fGlzTmFOKHQpKXRocm93IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuQVBJLl9fYWNyb2Zvcm1fXy5zZXRCaXRgKTtyZXR1cm4gZXwxPDx0fSxyZz1LaC5fX2Fjcm9mb3JtX18uY2xlYXJCaXQ9ZnVuY3Rpb24oZSx0KXtpZihlfHw9MCx0fHw9MCxpc05hTihlKXx8aXNOYU4odCkpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5BUEkuX19hY3JvZm9ybV9fLmNsZWFyQml0YCk7cmV0dXJuIGUmfigxPDx0KX0saWc9S2guX19hY3JvZm9ybV9fLmdldEJpdD1mdW5jdGlvbihlLHQpe2lmKGlzTmFOKGUpfHxpc05hTih0KSl0aHJvdyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLkFQSS5fX2Fjcm9mb3JtX18uZ2V0Qml0YCk7cmV0dXJuIGUmMTw8dD8xOjB9LGFnPUtoLl9fYWNyb2Zvcm1fXy5nZXRCaXRGb3JQZGY9ZnVuY3Rpb24oZSx0KXtpZihpc05hTihlKXx8aXNOYU4odCkpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5BUEkuX19hY3JvZm9ybV9fLmdldEJpdEZvclBkZmApO3JldHVybiBpZyhlLHQtMSl9LG9nPUtoLl9fYWNyb2Zvcm1fXy5zZXRCaXRGb3JQZGY9ZnVuY3Rpb24oZSx0KXtpZihpc05hTihlKXx8aXNOYU4odCkpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5BUEkuX19hY3JvZm9ybV9fLnNldEJpdEZvclBkZmApO3JldHVybiBuZyhlLHQtMSl9LHNnPUtoLl9fYWNyb2Zvcm1fXy5jbGVhckJpdEZvclBkZj1mdW5jdGlvbihlLHQpe2lmKGlzTmFOKGUpfHxpc05hTih0KSl0aHJvdyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLkFQSS5fX2Fjcm9mb3JtX18uY2xlYXJCaXRGb3JQZGZgKTtyZXR1cm4gcmcoZSx0LTEpfSxjZz1LaC5fX2Fjcm9mb3JtX18uY2FsY3VsYXRlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmludGVybmFsLmdldEhvcml6b250YWxDb29yZGluYXRlLHI9dC5pbnRlcm5hbC5nZXRWZXJ0aWNhbENvb3JkaW5hdGUsaT1lWzBdLGE9ZVsxXSxvPWVbMl0scz1lWzNdLGM9e307cmV0dXJuIGMubG93ZXJMZWZ0X1g9bihpKXx8MCxjLmxvd2VyTGVmdF9ZPXIoYStzKXx8MCxjLnVwcGVyUmlnaHRfWD1uKGkrbyl8fDAsYy51cHBlclJpZ2h0X1k9cihhKXx8MCxbTnVtYmVyKFpoKGMubG93ZXJMZWZ0X1gpKSxOdW1iZXIoWmgoYy5sb3dlckxlZnRfWSkpLE51bWJlcihaaChjLnVwcGVyUmlnaHRfWCkpLE51bWJlcihaaChjLnVwcGVyUmlnaHRfWSkpXX0sbGc9ZnVuY3Rpb24oZSl7aWYoZS5hcHBlYXJhbmNlU3RyZWFtQ29udGVudClyZXR1cm4gZS5hcHBlYXJhbmNlU3RyZWFtQ29udGVudDtpZihlLlZ8fGUuRFYpe3ZhciB0PVtdLG49dWcoZSxlLl9WfHxlLkRWKSxyPWUuc2NvcGUuaW50ZXJuYWwuZ2V0Rm9udChlLmZvbnROYW1lLGUuZm9udFN0eWxlKS5pZDt0LnB1c2goYC9UeCBCTUNgKSx0LnB1c2goYHFgKSx0LnB1c2goYEJUYCksdC5wdXNoKGUuc2NvcGUuX19wcml2YXRlX18uZW5jb2RlQ29sb3JTdHJpbmcoZS5jb2xvcikpLHQucHVzaChgL2ArcitgIGArWmgobi5mb250U2l6ZSkrYCBUZmApLHQucHVzaChgMSAwIDAgMSAwIDAgVG1gKSx0LnB1c2gobi50ZXh0KSx0LnB1c2goYEVUYCksdC5wdXNoKGBRYCksdC5wdXNoKGBFTUNgKTt2YXIgaT10ZyhlKTtyZXR1cm4gaS5zY29wZT1lLnNjb3BlLGkuc3RyZWFtPXQuam9pbihgCmApLGl9fSx1Zz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZm9udFNpemU9PT0wP2UubWF4Rm9udFNpemU6ZS5mb250U2l6ZSxyPXt0ZXh0OmBgLGZvbnRTaXplOmBgfSxpPSh0PSh0PXQuc3Vic3RyKDAsMSk9PWAoYD90LnN1YnN0cigxKTp0KS5zdWJzdHIodC5sZW5ndGgtMSk9PWApYD90LnN1YnN0cigwLHQubGVuZ3RoLTEpOnQpLnNwbGl0KGAgYCk7aT1lLm11bHRpbGluZT9pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChgCmApfSk6aS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSk7dmFyIGE9bixvPVEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpfHwwO289bzwwPy1vOm87dmFyIHM9US5pbnRlcm5hbC5nZXRXaWR0aChlKXx8MDtzPXM8MD8tczpzO3ZhciBjPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdCsxPGkubGVuZ3RoP2RnKG4rYCBgK2lbdCsxXVswXSxlLHIpLndpZHRoPD1zLTQ6ITF9O2ErKzt0OmZvcig7YT4wOyl7dD1gYCxhLS07dmFyIGwsdSxkPWRnKGAzYCxlLGEpLmhlaWdodCxmPWUubXVsdGlsaW5lP28tYTooby1kKS8yLHA9Zis9MixtPTAsaD0wLGc9MDtpZihhPD0wKXt0PWAoLi4uKSBUagpgLHQrPWAlIFdpZHRoIG9mIFRleHQ6IGArZGcodCxlLGE9MTIpLndpZHRoK2AsIEZpZWxkV2lkdGg6YCtzK2AKYDticmVha31mb3IodmFyIF89YGAsdj0wLHk9MDt5PGkubGVuZ3RoO3krKylpZihpLmhhc093blByb3BlcnR5KHkpKXt2YXIgYj0hMTtpZihpW3ldLmxlbmd0aCE9PTEmJmchPT1pW3ldLmxlbmd0aC0xKXtpZigoZCsyKSoodisyKSsyPm8pY29udGludWUgdDtfKz1pW3ldW2ddLGI9ITAsaD15LHktLX1lbHNle189KF8rPWlbeV1bZ10rYCBgKS5zdWJzdHIoXy5sZW5ndGgtMSk9PWAgYD9fLnN1YnN0cigwLF8ubGVuZ3RoLTEpOl87dmFyIHg9cGFyc2VJbnQoeSksUz1jKHgsXyxhKSxDPXk+PWkubGVuZ3RoLTE7aWYoUyYmIUMpe18rPWAgYCxnPTA7Y29udGludWV9aWYoU3x8Qyl7aWYoQyloPXg7ZWxzZSBpZihlLm11bHRpbGluZSYmKGQrMikqKHYrMikrMj5vKWNvbnRpbnVlIHR9ZWxzZXtpZighZS5tdWx0aWxpbmV8fChkKzIpKih2KzIpKzI+byljb250aW51ZSB0O2g9eH19Zm9yKHZhciB3PWBgLFQ9bTtUPD1oO1QrKyl7dmFyIEU9aVtUXTtpZihlLm11bHRpbGluZSl7aWYoVD09PWgpe3crPUVbZ10rYCBgLGc9KGcrMSklRS5sZW5ndGg7Y29udGludWV9aWYoVD09PW0pe3crPUVbRS5sZW5ndGgtMV0rYCBgO2NvbnRpbnVlfX13Kz1FWzBdK2AgYH1zd2l0Y2godz13LnN1YnN0cih3Lmxlbmd0aC0xKT09YCBgP3cuc3Vic3RyKDAsdy5sZW5ndGgtMSk6dyx1PWRnKHcsZSxhKS53aWR0aCxlLnRleHRBbGlnbil7Y2FzZWByaWdodGA6bD1zLXUtMjticmVhaztjYXNlYGNlbnRlcmA6bD0ocy11KS8yO2JyZWFrO2RlZmF1bHQ6bD0yfXQrPVpoKGwpK2AgYCtaaChwKStgIFRkCmAsdCs9YChgK0poKHcpK2ApIFRqCmAsdCs9LVpoKGwpK2AgMCBUZApgLHA9LShhKzIpLHU9MCxtPWI/aDpoKzEsdisrLF89YGB9YnJlYWt9cmV0dXJuIHIudGV4dD10LHIuZm9udFNpemU9YSxyfSxkZz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5zY29wZS5pbnRlcm5hbC5nZXRGb250KHQuZm9udE5hbWUsdC5mb250U3R5bGUpLGk9dC5zY29wZS5nZXRTdHJpbmdVbml0V2lkdGgoZSx7Zm9udDpyLGZvbnRTaXplOnBhcnNlRmxvYXQobiksY2hhclNwYWNlOjB9KSpwYXJzZUZsb2F0KG4pO3JldHVybntoZWlnaHQ6dC5zY29wZS5nZXRTdHJpbmdVbml0V2lkdGgoYDNgLHtmb250OnIsZm9udFNpemU6cGFyc2VGbG9hdChuKSxjaGFyU3BhY2U6MH0pKnBhcnNlRmxvYXQobikqMS41LHdpZHRoOml9fSxmZz17ZmllbGRzOltdLHhGb3JtczpbXSxhY3JvRm9ybURpY3Rpb25hcnlSb290Om51bGwscHJpbnRlZE91dDohMSxpbnRlcm5hbDpudWxsLGlzSW5pdGlhbGl6ZWQ6ITF9LHBnPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3R5cGU6YHJlZmVyZW5jZWAsb2JqZWN0OmV9O3QuaW50ZXJuYWwuZ2V0UGFnZUluZm8oZS5wYWdlKS5wYWdlQ29udGV4dC5hbm5vdGF0aW9ucy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT1uLnR5cGUmJmUub2JqZWN0PT09bi5vYmplY3R9KT09PXZvaWQgMCYmdC5pbnRlcm5hbC5nZXRQYWdlSW5mbyhlLnBhZ2UpLnBhZ2VDb250ZXh0LmFubm90YXRpb25zLnB1c2gobil9LG1nPWZ1bmN0aW9uKGUsdCl7aWYodC5zY29wZT1lLGUuaW50ZXJuYWwhPT12b2lkIDAmJihlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luPT09dm9pZCAwfHwhMT09PWUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uaXNJbml0aWFsaXplZCkpe2lmKGJnLkZpZWxkTnVtPTAsZS5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZnKSksZS5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290KXRocm93IEVycm9yKGBFeGNlcHRpb24gd2hpbGUgY3JlYXRpbmcgQWNyb2Zvcm1EaWN0aW9uYXJ5YCk7cWg9ZS5pbnRlcm5hbC5zY2FsZUZhY3RvcixlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3Q9bmV3IHlnLGUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5zY29wZT1lLGUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5fZXZlbnRJRD1lLmludGVybmFsLmV2ZW50cy5zdWJzY3JpYmUoYHBvc3RQdXRSZXNvdXJjZXNgLGZ1bmN0aW9uKCl7KGZ1bmN0aW9uKGUpe2UuaW50ZXJuYWwuZXZlbnRzLnVuc3Vic2NyaWJlKGUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5fZXZlbnRJRCksZGVsZXRlIGUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5fZXZlbnRJRCxlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnByaW50ZWRPdXQ9ITB9KShlKX0pLGUuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShgYnVpbGREb2N1bWVudGAsZnVuY3Rpb24oKXsoZnVuY3Rpb24oZSl7ZS5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290Lm9iaklkPXZvaWQgMDt2YXIgdD1lLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3QuRmllbGRzO2Zvcih2YXIgbiBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobikpe3ZhciByPXRbbl07ci5vYmpJZD12b2lkIDAsci5oYXNBbm5vdGF0aW9uJiZwZyhyLGUpfX0pKGUpfSksZS5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKGBwdXRDYXRhbG9nYCxmdW5jdGlvbigpeyhmdW5jdGlvbihlKXtpZihlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3Q9PT12b2lkIDApdGhyb3cgRXJyb3IoYHB1dENhdGFsb2dDYWxsYmFjazogUm9vdCBtaXNzaW5nLmApO2UuaW50ZXJuYWwud3JpdGUoYC9BY3JvRm9ybSBgK2UuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5vYmpJZCtgIDAgUmApfSkoZSl9KSxlLmludGVybmFsLmV2ZW50cy5zdWJzY3JpYmUoYHBvc3RQdXRQYWdlc2AsZnVuY3Rpb24odCl7KGZ1bmN0aW9uKGUsdCl7dmFyIG49IWU7Zm9yKHZhciByIGluIGV8fCh0LmludGVybmFsLm5ld09iamVjdERlZmVycmVkQmVnaW4odC5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290Lm9iaklkLCEwKSx0LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3QucHV0U3RyZWFtKCkpLGV8fD10LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3QuS2lkcylpZihlLmhhc093blByb3BlcnR5KHIpKXt2YXIgaT1lW3JdLGE9W10sbz1pLlJlY3Q7aWYoaS5SZWN0JiY9Y2coaS5SZWN0LHQpLHQuaW50ZXJuYWwubmV3T2JqZWN0RGVmZXJyZWRCZWdpbihpLm9iaklkLCEwKSxpLkRBPVEuY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2VTdHJlYW0oaSksQShpKT09PWBvYmplY3RgJiZ0eXBlb2YgaS5nZXRLZXlWYWx1ZUxpc3RGb3JTdHJlYW09PWBmdW5jdGlvbmAmJihhPWkuZ2V0S2V5VmFsdWVMaXN0Rm9yU3RyZWFtKCkpLGkuUmVjdD1vLGkuaGFzQXBwZWFyYW5jZVN0cmVhbSYmIWkuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQpe3ZhciBzPWxnKGkpO2EucHVzaCh7a2V5OmBBUGAsdmFsdWU6YDw8L04gYCtzK2A+PmB9KSx0LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5wdXNoKHMpfWlmKGkuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQpe3ZhciBjPWBgO2Zvcih2YXIgbCBpbiBpLmFwcGVhcmFuY2VTdHJlYW1Db250ZW50KWlmKGkuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQuaGFzT3duUHJvcGVydHkobCkpe3ZhciB1PWkuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnRbbF07aWYoYys9YC9gK2wrYCBgLGMrPWA8PGAsT2JqZWN0LmtleXModSkubGVuZ3RoPj0xfHxBcnJheS5pc0FycmF5KHUpKXtmb3IodmFyIHIgaW4gdSlpZih1Lmhhc093blByb3BlcnR5KHIpKXt2YXIgZD11W3JdO3R5cGVvZiBkPT1gZnVuY3Rpb25gJiYoZD1kLmNhbGwodCxpKSksYys9YC9gK3IrYCBgK2QrYCBgLHQuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4ueEZvcm1zLmluZGV4T2YoZCk+PTB8fHQuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4ueEZvcm1zLnB1c2goZCl9fWVsc2UgdHlwZW9mKGQ9dSk9PWBmdW5jdGlvbmAmJihkPWQuY2FsbCh0LGkpKSxjKz1gL2ArcitgIGArZCx0LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5pbmRleE9mKGQpPj0wfHx0LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5wdXNoKGQpO2MrPWA+PmB9YS5wdXNoKHtrZXk6YEFQYCx2YWx1ZTpgPDwKYCtjK2A+PmB9KX10LmludGVybmFsLnB1dFN0cmVhbSh7YWRkaXRpb25hbEtleVZhbHVlczphLG9iamVjdElkOmkub2JqSWR9KSx0LmludGVybmFsLm91dChgZW5kb2JqYCl9biYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLGk9ZVtuXTt0LmludGVybmFsLm5ld09iamVjdERlZmVycmVkQmVnaW4oaS5vYmpJZCwhMCksQShpKT09PWBvYmplY3RgJiZ0eXBlb2YgaS5wdXRTdHJlYW09PWBmdW5jdGlvbmAmJmkucHV0U3RyZWFtKCksZGVsZXRlIGVbcl19fSh0LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcyx0KX0pKHQsZSl9KSxlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmlzSW5pdGlhbGl6ZWQ9ITB9fSxoZz1LaC5fX2Fjcm9mb3JtX18uYXJyYXlUb1BkZkFycmF5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZX07aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciBpPWBbYCxhPTA7YTxlLmxlbmd0aDthKyspc3dpdGNoKGEhPT0wJiYoaSs9YCBgKSxBKGVbYV0pKXtjYXNlYGJvb2xlYW5gOmNhc2VgbnVtYmVyYDpjYXNlYG9iamVjdGA6aSs9ZVthXS50b1N0cmluZygpO2JyZWFrO2Nhc2Vgc3RyaW5nYDplW2FdLnN1YnN0cigwLDEpPT09YC9gP2krPWAvYCtYaChlW2FdLnN1YnN0cigxKSk6KHQhPT12b2lkIDAmJm4mJihyPW4uaW50ZXJuYWwuZ2V0RW5jcnlwdG9yKHQpKSxpKz1gKGArSmgocihlW2FdLnRvU3RyaW5nKCkpKStgKWApfXJldHVybiBpK2BdYH10aHJvdyBFcnJvcihgSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8ganNQREYuX19hY3JvZm9ybV9fLmFycmF5VG9QZGZBcnJheWApfSxnZz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O3JldHVybiB0IT09dm9pZCAwJiZuJiYocj1uLmludGVybmFsLmdldEVuY3J5cHRvcih0KSksKGV8fD1gYCkudG9TdHJpbmcoKSxgKGArSmgocihlKSkrYClgfSxfZz1mdW5jdGlvbigpe3RoaXMuX29iaklkPXZvaWQgMCx0aGlzLl9zY29wZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYG9iaklkYCx7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fb2JqSWQ9PT12b2lkIDApe2lmKHRoaXMuc2NvcGU9PT12b2lkIDApcmV0dXJuO3RoaXMuX29iaklkPXRoaXMuc2NvcGUuaW50ZXJuYWwubmV3T2JqZWN0RGVmZXJyZWQoKX1yZXR1cm4gdGhpcy5fb2JqSWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vYmpJZD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBzY29wZWAse3ZhbHVlOnRoaXMuX3Njb3BlLHdyaXRhYmxlOiEwfSl9LF9nLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9iaklkK2AgMCBSYH0sX2cucHJvdG90eXBlLnB1dFN0cmVhbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0S2V5VmFsdWVMaXN0Rm9yU3RyZWFtKCk7dGhpcy5zY29wZS5pbnRlcm5hbC5wdXRTdHJlYW0oe2RhdGE6dGhpcy5zdHJlYW0sYWRkaXRpb25hbEtleVZhbHVlczplLG9iamVjdElkOnRoaXMub2JqSWR9KSx0aGlzLnNjb3BlLmludGVybmFsLm91dChgZW5kb2JqYCl9LF9nLnByb3RvdHlwZS5nZXRLZXlWYWx1ZUxpc3RGb3JTdHJlYW09ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9YGNvbnRlbnRgJiZlIT1gYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnRgJiZlIT1gc2NvcGVgJiZlIT1gb2JqSWRgJiZlLnN1YnN0cmluZygwLDEpIT1gX2B9KTtmb3IodmFyIG4gaW4gdClpZighMT09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcyx0W25dKS5jb25maWd1cmFibGUpe3ZhciByPXRbbl0saT10aGlzW3JdO2kmJihBcnJheS5pc0FycmF5KGkpP2UucHVzaCh7a2V5OnIsdmFsdWU6aGcoaSx0aGlzLm9iaklkLHRoaXMuc2NvcGUpfSk6aSBpbnN0YW5jZW9mIF9nPyhpLnNjb3BlPXRoaXMuc2NvcGUsZS5wdXNoKHtrZXk6cix2YWx1ZTppLm9iaklkK2AgMCBSYH0pKTp0eXBlb2YgaSE9YGZ1bmN0aW9uYCYmZS5wdXNoKHtrZXk6cix2YWx1ZTppfSkpfXJldHVybiBlfSx2Zz1mdW5jdGlvbigpe19nLmNhbGwodGhpcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYFR5cGVgLHt2YWx1ZTpgL1hPYmplY3RgLGNvbmZpZ3VyYWJsZTohMSx3cml0YWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBTdWJ0eXBlYCx7dmFsdWU6YC9Gb3JtYCxjb25maWd1cmFibGU6ITEsd3JpdGFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgRm9ybVR5cGVgLHt2YWx1ZToxLGNvbmZpZ3VyYWJsZTohMSx3cml0YWJsZTohMH0pO3ZhciBlLHQ9W107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYEJCb3hgLHtjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LHNldDpmdW5jdGlvbihlKXt0PWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYFJlc291cmNlc2Ase3ZhbHVlOmAyIDAgUmAsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHN0cmVhbWAse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHNldDpmdW5jdGlvbih0KXtlPXQudHJpbSgpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZXx8bnVsbH19KX0sJGgodmcsX2cpLHlnPWZ1bmN0aW9uKCl7X2cuY2FsbCh0aGlzKTt2YXIgZSx0PVtdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBLaWRzYCx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQubGVuZ3RoPjA/dDp2b2lkIDB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYEZpZWxkc2Ase2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBEQWAse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe3JldHVybiBlfTtyZXR1cm4gdGhpcy5zY29wZSYmKHQ9dGhpcy5zY29wZS5pbnRlcm5hbC5nZXRFbmNyeXB0b3IodGhpcy5vYmpJZCkpLGAoYCtKaCh0KGUpKStgKWB9fSxzZXQ6ZnVuY3Rpb24odCl7ZT10fX0pfSwkaCh5ZyxfZyksYmc9ZnVuY3Rpb24gZSgpe19nLmNhbGwodGhpcyk7dmFyIHQ9NDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgRmAse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSl7aWYoaXNOYU4oZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgdmFsdWUgImArZStgIiBmb3IgYXR0cmlidXRlIEYgc3VwcGxpZWQuYCk7dD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBzaG93V2hlblByaW50ZWRgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWFnKHQsMyl9LHNldDpmdW5jdGlvbihlKXshIWU9PTE/dGhpcy5GPW9nKHQsMyk6dGhpcy5GPXNnKHQsMyl9fSk7dmFyIG49MDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgRmZgLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sc2V0OmZ1bmN0aW9uKGUpe2lmKGlzTmFOKGUpKXRocm93IEVycm9yKGBJbnZhbGlkIHZhbHVlICJgK2UrYCIgZm9yIGF0dHJpYnV0ZSBGZiBzdXBwbGllZC5gKTtuPWV9fSk7dmFyIHI9W107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYFJlY3RgLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtpZihyLmxlbmd0aCE9PTApcmV0dXJuIHJ9LHNldDpmdW5jdGlvbihlKXtyPWU9PT12b2lkIDA/W106ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgeGAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiFyfHxpc05hTihyWzBdKT8wOnJbMF19LHNldDpmdW5jdGlvbihlKXtyWzBdPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHlgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hcnx8aXNOYU4oclsxXSk/MDpyWzFdfSxzZXQ6ZnVuY3Rpb24oZSl7clsxXT1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGB3aWR0aGAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiFyfHxpc05hTihyWzJdKT8wOnJbMl19LHNldDpmdW5jdGlvbihlKXtyWzJdPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGhlaWdodGAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiFyfHxpc05hTihyWzNdKT8wOnJbM119LHNldDpmdW5jdGlvbihlKXtyWzNdPWV9fSk7dmFyIGk9YGA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYEZUYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHNldDpmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZWAvQnRuYDpjYXNlYC9UeGA6Y2FzZWAvQ2hgOmNhc2VgL1NpZ2A6aT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYEludmFsaWQgdmFsdWUgImArZStgIiBmb3IgYXR0cmlidXRlIEZUIHN1cHBsaWVkLmApfX19KTt2YXIgYT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBUYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7aWYoIWF8fGEubGVuZ3RoPDEpe2lmKHRoaXMgaW5zdGFuY2VvZiBPZylyZXR1cm47YT1gRmllbGRPYmplY3RgKyBlLkZpZWxkTnVtKyt9dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O3JldHVybiB0aGlzLnNjb3BlJiYodD10aGlzLnNjb3BlLmludGVybmFsLmdldEVuY3J5cHRvcih0aGlzLm9iaklkKSksYChgK0poKHQoYSkpK2ApYH0sc2V0OmZ1bmN0aW9uKGUpe2E9ZS50b1N0cmluZygpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBmaWVsZE5hbWVgLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0OmZ1bmN0aW9uKGUpe2E9ZX19KTt2YXIgbz1gaGVsdmV0aWNhYDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgZm9udE5hbWVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sc2V0OmZ1bmN0aW9uKGUpe289ZX19KTt2YXIgcz1gbm9ybWFsYDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgZm9udFN0eWxlYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtzPWV9fSk7dmFyIGM9MDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgZm9udFNpemVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY30sc2V0OmZ1bmN0aW9uKGUpe2M9ZX19KTt2YXIgbD12b2lkIDA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYG1heEZvbnRTaXplYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGw9PT12b2lkIDA/NTAvcWg6bH0sc2V0OmZ1bmN0aW9uKGUpe2w9ZX19KTt2YXIgdT1gYmxhY2tgO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBjb2xvcmAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fSxzZXQ6ZnVuY3Rpb24oZSl7dT1lfX0pO3ZhciBkPWAvRjEgMCBUZiAwIGdgO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBEQWAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKCEoIWR8fHRoaXMgaW5zdGFuY2VvZiBPZ3x8dGhpcyBpbnN0YW5jZW9mIEFnKSlyZXR1cm4gZ2coZCx0aGlzLm9iaklkLHRoaXMuc2NvcGUpfSxzZXQ6ZnVuY3Rpb24oZSl7ZT1lLnRvU3RyaW5nKCksZD1lfX0pO3ZhciBmPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYERWYCx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7aWYoZilyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFRnPT0wP2dnKGYsdGhpcy5vYmpJZCx0aGlzLnNjb3BlKTpmfSxzZXQ6ZnVuY3Rpb24oZSl7ZT1lLnRvU3RyaW5nKCksZj10aGlzIGluc3RhbmNlb2YgVGc9PTA/ZS5zdWJzdHIoMCwxKT09PWAoYD9ZaChlLnN1YnN0cigxLGUubGVuZ3RoLTIpKTpZaChlKTplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBkZWZhdWx0VmFsdWVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFRnPT0xP1loKGYuc3Vic3RyKDEsZi5sZW5ndGgtMSkpOmZ9LHNldDpmdW5jdGlvbihlKXtlPWUudG9TdHJpbmcoKSxmPXRoaXMgaW5zdGFuY2VvZiBUZz09MT9gL2ArWGgoZSk6ZX19KTt2YXIgcD1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBfVmAse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKHApcmV0dXJuIHB9LHNldDpmdW5jdGlvbihlKXt0aGlzLlY9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgVmAse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKHApcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBUZz09MD9nZyhwLHRoaXMub2JqSWQsdGhpcy5zY29wZSk6cH0sc2V0OmZ1bmN0aW9uKGUpe2U9ZS50b1N0cmluZygpLHA9dGhpcyBpbnN0YW5jZW9mIFRnPT0wP2Uuc3Vic3RyKDAsMSk9PT1gKGA/WWgoZS5zdWJzdHIoMSxlLmxlbmd0aC0yKSk6WWgoZSk6ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgdmFsdWVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFRnPT0xP1loKHAuc3Vic3RyKDEscC5sZW5ndGgtMSkpOnB9LHNldDpmdW5jdGlvbihlKXtlPWUudG9TdHJpbmcoKSxwPXRoaXMgaW5zdGFuY2VvZiBUZz09MT9gL2ArWGgoZSk6ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgaGFzQW5ub3RhdGlvbmAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLlJlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYFR5cGVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbm5vdGF0aW9uP2AvQW5ub3RgOm51bGx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYFN1YnR5cGVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbm5vdGF0aW9uP2AvV2lkZ2V0YDpudWxsfX0pO3ZhciBtLGg9ITE7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGhhc0FwcGVhcmFuY2VTdHJlYW1gLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGUpe2U9ISFlLGg9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgcGFnZWAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKG0pcmV0dXJuIG19LHNldDpmdW5jdGlvbihlKXttPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHJlYWRPbmx5YCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDEpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwxKTp0aGlzLkZmPXNnKHRoaXMuRmYsMSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHJlcXVpcmVkYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDIpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwyKTp0aGlzLkZmPXNnKHRoaXMuRmYsMil9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYG5vRXhwb3J0YCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDMpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwzKTp0aGlzLkZmPXNnKHRoaXMuRmYsMyl9fSk7dmFyIGc9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgUWAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKGchPT1udWxsKXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoWzAsMSwyXS5pbmRleE9mKGUpPT09LTEpdGhyb3cgRXJyb3IoYEludmFsaWQgdmFsdWUgImArZStgIiBmb3IgYXR0cmlidXRlIFEgc3VwcGxpZWQuYCk7Zz1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGB0ZXh0QWxpZ25gLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgZTtzd2l0Y2goZyl7Y2FzZSAwOmRlZmF1bHQ6ZT1gbGVmdGA7YnJlYWs7Y2FzZSAxOmU9YGNlbnRlcmA7YnJlYWs7Y2FzZSAyOmU9YHJpZ2h0YH1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsc2V0OmZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlYHJpZ2h0YDpjYXNlIDI6Zz0yO2JyZWFrO2Nhc2VgY2VudGVyYDpjYXNlIDE6Zz0xO2JyZWFrO2RlZmF1bHQ6Zz0wfX19KX0sJGgoYmcsX2cpLHhnPWZ1bmN0aW9uKCl7YmcuY2FsbCh0aGlzKSx0aGlzLkZUPWAvQ2hgLHRoaXMuVj1gKClgLHRoaXMuZm9udE5hbWU9YHphcGZkaW5nYmF0c2A7dmFyIGU9MDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgVElgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe2U9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgdG9wSW5kZXhgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe2U9dH19KTt2YXIgdD1bXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgT3B0YCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGhnKHQsdGhpcy5vYmpJZCx0aGlzLnNjb3BlKX0sc2V0OmZ1bmN0aW9uKGUpe3ZhciBuLHI9W107dHlwZW9mKG49ZSk9PWBzdHJpbmdgJiYocj1mdW5jdGlvbihlLHQsbil7bnx8PTE7Zm9yKHZhciByLGk9W107cj10LmV4ZWMoZSk7KWkucHVzaChyW25dKTtyZXR1cm4gaX0obiwvXCgoLio/KVwpL2cpKSx0PXJ9fSksdGhpcy5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHRoaXMuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXt0PWUsdGhpcy5zb3J0JiZ0LnNvcnQoKX0sdGhpcy5hZGRPcHRpb249ZnVuY3Rpb24oZSl7ZT0oZXx8PWBgKS50b1N0cmluZygpLHQucHVzaChlKSx0aGlzLnNvcnQmJnQuc29ydCgpfSx0aGlzLnJlbW92ZU9wdGlvbj1mdW5jdGlvbihlLG4pe2ZvcihufHw9ITEsZT0oZXx8PWBgKS50b1N0cmluZygpO3QuaW5kZXhPZihlKSE9PS0xJiYodC5zcGxpY2UodC5pbmRleE9mKGUpLDEpLCExIT09bik7KTt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBjb21ib2Ase2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEhYWcodGhpcy5GZiwxOCl9LHNldDpmdW5jdGlvbihlKXshIWU9PTE/dGhpcy5GZj1vZyh0aGlzLkZmLDE4KTp0aGlzLkZmPXNnKHRoaXMuRmYsMTgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBlZGl0YCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDE5KX0sc2V0OmZ1bmN0aW9uKGUpeyEwPT09dGhpcy5jb21ibyYmKCEhZT09MT90aGlzLkZmPW9nKHRoaXMuRmYsMTkpOnRoaXMuRmY9c2codGhpcy5GZiwxOSkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBzb3J0YCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDIwKX0sc2V0OmZ1bmN0aW9uKGUpeyEhZT09MT8odGhpcy5GZj1vZyh0aGlzLkZmLDIwKSx0LnNvcnQoKSk6dGhpcy5GZj1zZyh0aGlzLkZmLDIwKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgbXVsdGlTZWxlY3RgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWFnKHRoaXMuRmYsMjIpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwyMik6dGhpcy5GZj1zZyh0aGlzLkZmLDIyKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgZG9Ob3RTcGVsbENoZWNrYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDIzKX0sc2V0OmZ1bmN0aW9uKGUpeyEhZT09MT90aGlzLkZmPW9nKHRoaXMuRmYsMjMpOnRoaXMuRmY9c2codGhpcy5GZiwyMyl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGNvbW1pdE9uU2VsQ2hhbmdlYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDI3KX0sc2V0OmZ1bmN0aW9uKGUpeyEhZT09MT90aGlzLkZmPW9nKHRoaXMuRmYsMjcpOnRoaXMuRmY9c2codGhpcy5GZiwyNyl9fSksdGhpcy5oYXNBcHBlYXJhbmNlU3RyZWFtPSExfSwkaCh4ZyxiZyksU2c9ZnVuY3Rpb24oKXt4Zy5jYWxsKHRoaXMpLHRoaXMuZm9udE5hbWU9YGhlbHZldGljYWAsdGhpcy5jb21ibz0hMX0sJGgoU2cseGcpLENnPWZ1bmN0aW9uKCl7U2cuY2FsbCh0aGlzKSx0aGlzLmNvbWJvPSEwfSwkaChDZyxTZyksd2c9ZnVuY3Rpb24oKXtDZy5jYWxsKHRoaXMpLHRoaXMuZWRpdD0hMH0sJGgod2csQ2cpLFRnPWZ1bmN0aW9uKCl7YmcuY2FsbCh0aGlzKSx0aGlzLkZUPWAvQnRuYCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgbm9Ub2dnbGVUb09mZmAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEhYWcodGhpcy5GZiwxNSl9LHNldDpmdW5jdGlvbihlKXshIWU9PTE/dGhpcy5GZj1vZyh0aGlzLkZmLDE1KTp0aGlzLkZmPXNnKHRoaXMuRmYsMTUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGByYWRpb2Ase2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEhYWcodGhpcy5GZiwxNil9LHNldDpmdW5jdGlvbihlKXshIWU9PTE/dGhpcy5GZj1vZyh0aGlzLkZmLDE2KTp0aGlzLkZmPXNnKHRoaXMuRmYsMTYpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBwdXNoQnV0dG9uYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISFhZyh0aGlzLkZmLDE3KX0sc2V0OmZ1bmN0aW9uKGUpeyEhZT09MT90aGlzLkZmPW9nKHRoaXMuRmYsMTcpOnRoaXMuRmY9c2codGhpcy5GZiwxNyl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHJhZGlvSXNVbmlzb25gLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWFnKHRoaXMuRmYsMjYpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwyNik6dGhpcy5GZj1zZyh0aGlzLkZmLDI2KX19KTt2YXIgZSx0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBNS2Ase2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiBlfTtpZih0aGlzLnNjb3BlJiYoZT10aGlzLnNjb3BlLmludGVybmFsLmdldEVuY3J5cHRvcih0aGlzLm9iaklkKSksT2JqZWN0LmtleXModCkubGVuZ3RoIT09MCl7dmFyIG4scj1bXTtmb3IobiBpbiByLnB1c2goYDw8YCksdClyLnB1c2goYC9gK24rYCAoYCtKaChlKHRbbl0pKStgKWApO3JldHVybiByLnB1c2goYD4+YCksci5qb2luKGAKYCl9fSxzZXQ6ZnVuY3Rpb24oZSl7QShlKT09PWBvYmplY3RgJiYodD1lKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgY2FwdGlvbmAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LkNBfHxgYH0sc2V0OmZ1bmN0aW9uKGUpe3R5cGVvZiBlPT1gc3RyaW5nYCYmKHQuQ0E9ZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYEFTYCx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbih0KXt2YXIgbj10PT1udWxsP2BgOnQudG9TdHJpbmcoKTtuLnN1YnN0cigwLDEpPT09YC9gJiYobj1uLnN1YnN0cigxKSksZT1gL2ArWGgobil9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGFwcGVhcmFuY2VTdGF0ZWAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLnN1YnN0cigxLGUubGVuZ3RoLTEpfSxzZXQ6ZnVuY3Rpb24odCl7ZT1gL2ArWGgodCl9fSl9LCRoKFRnLGJnKSxFZz1mdW5jdGlvbigpe1RnLmNhbGwodGhpcyksdGhpcy5wdXNoQnV0dG9uPSEwfSwkaChFZyxUZyksRGc9ZnVuY3Rpb24oKXtUZy5jYWxsKHRoaXMpLHRoaXMucmFkaW89ITAsdGhpcy5wdXNoQnV0dG9uPSExO3ZhciBlPVtdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBLaWRzYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbih0KXtlPXQ9PT12b2lkIDA/W106dH19KX0sJGgoRGcsVGcpLE9nPWZ1bmN0aW9uKCl7dmFyIGUsdDtiZy5jYWxsKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBQYXJlbnRgLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe2U9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgb3B0aW9uTmFtZWAse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSl7dD1lfX0pO3ZhciBuLHI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYE1LYCx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O3RoaXMuc2NvcGUmJihlPXRoaXMuc2NvcGUuaW50ZXJuYWwuZ2V0RW5jcnlwdG9yKHRoaXMub2JqSWQpKTt2YXIgdCxuPVtdO2Zvcih0IGluIG4ucHVzaChgPDxgKSxyKW4ucHVzaChgL2ArdCtgIChgK0poKGUoclt0XSkpK2ApYCk7cmV0dXJuIG4ucHVzaChgPj5gKSxuLmpvaW4oYApgKX0sc2V0OmZ1bmN0aW9uKGUpe0EoZSk9PT1gb2JqZWN0YCYmKHI9ZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGNhcHRpb25gLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5DQXx8YGB9LHNldDpmdW5jdGlvbihlKXt0eXBlb2YgZT09YHN0cmluZ2AmJihyLkNBPWUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBBU2Ase2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiBufSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZT09bnVsbD9gYDplLnRvU3RyaW5nKCk7dC5zdWJzdHIoMCwxKT09PWAvYCYmKHQ9dC5zdWJzdHIoMSkpLG49YC9gK1hoKHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBhcHBlYXJhbmNlU3RhdGVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5zdWJzdHIoMSxuLmxlbmd0aC0xKX0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWU9PW51bGw/YGA6ZS50b1N0cmluZygpO3Quc3Vic3RyKDAsMSk9PT1gL2AmJih0PXQuc3Vic3RyKDEpKSxuPWAvYCtYaCh0KX19KSx0aGlzLmNhcHRpb249YGxgLHRoaXMuYXBwZWFyYW5jZVN0YXRlPWBPZmZgLHRoaXMuX0FwcGVhcmFuY2VUeXBlPVEuUmFkaW9CdXR0b24uQ2lyY2xlLHRoaXMuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQ9dGhpcy5fQXBwZWFyYW5jZVR5cGUuY3JlYXRlQXBwZWFyYW5jZVN0cmVhbSh0aGlzLm9wdGlvbk5hbWUpfSwkaChPZyxiZyksRGcucHJvdG90eXBlLnNldEFwcGVhcmFuY2U9ZnVuY3Rpb24oZSl7aWYoIShgY3JlYXRlQXBwZWFyYW5jZVN0cmVhbWBpbiBlKXx8IShgZ2V0Q0FgaW4gZSkpdGhyb3cgRXJyb3IoYENvdWxkbid0IGFzc2lnbiBBcHBlYXJhbmNlIHRvIFJhZGlvQnV0dG9uLiBBcHBlYXJhbmNlIHdhcyBJbnZhbGlkIWApO2Zvcih2YXIgdCBpbiB0aGlzLktpZHMpaWYodGhpcy5LaWRzLmhhc093blByb3BlcnR5KHQpKXt2YXIgbj10aGlzLktpZHNbdF07bi5hcHBlYXJhbmNlU3RyZWFtQ29udGVudD1lLmNyZWF0ZUFwcGVhcmFuY2VTdHJlYW0obi5vcHRpb25OYW1lKSxuLmNhcHRpb249ZS5nZXRDQSgpfX0sRGcucHJvdG90eXBlLmNyZWF0ZU9wdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgT2c7cmV0dXJuIHQuUGFyZW50PXRoaXMsdC5vcHRpb25OYW1lPWUsdGhpcy5LaWRzLnB1c2godCksTWcuY2FsbCh0aGlzLnNjb3BlLHQpLHR9LGtnPWZ1bmN0aW9uKCl7VGcuY2FsbCh0aGlzKSx0aGlzLmZvbnROYW1lPWB6YXBmZGluZ2JhdHNgLHRoaXMuY2FwdGlvbj1gM2AsdGhpcy5hcHBlYXJhbmNlU3RhdGU9YE9uYCx0aGlzLnZhbHVlPWBPbmAsdGhpcy50ZXh0QWxpZ249YGNlbnRlcmAsdGhpcy5hcHBlYXJhbmNlU3RyZWFtQ29udGVudD1RLkNoZWNrQm94LmNyZWF0ZUFwcGVhcmFuY2VTdHJlYW0oKX0sJGgoa2csVGcpLEFnPWZ1bmN0aW9uKCl7YmcuY2FsbCh0aGlzKSx0aGlzLkZUPWAvVHhgLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBtdWx0aWxpbmVgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWFnKHRoaXMuRmYsMTMpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwxMyk6dGhpcy5GZj1zZyh0aGlzLkZmLDEzKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgZmlsZVNlbGVjdGAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEhYWcodGhpcy5GZiwyMSl9LHNldDpmdW5jdGlvbihlKXshIWU9PTE/dGhpcy5GZj1vZyh0aGlzLkZmLDIxKTp0aGlzLkZmPXNnKHRoaXMuRmYsMjEpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBkb05vdFNwZWxsQ2hlY2tgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWFnKHRoaXMuRmYsMjMpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwyMyk6dGhpcy5GZj1zZyh0aGlzLkZmLDIzKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgZG9Ob3RTY3JvbGxgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWFnKHRoaXMuRmYsMjQpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwyNCk6dGhpcy5GZj1zZyh0aGlzLkZmLDI0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgY29tYmAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEhYWcodGhpcy5GZiwyNSl9LHNldDpmdW5jdGlvbihlKXshIWU9PTE/dGhpcy5GZj1vZyh0aGlzLkZmLDI1KTp0aGlzLkZmPXNnKHRoaXMuRmYsMjUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGByaWNoVGV4dGAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEhYWcodGhpcy5GZiwyNil9LHNldDpmdW5jdGlvbihlKXshIWU9PTE/dGhpcy5GZj1vZyh0aGlzLkZmLDI2KTp0aGlzLkZmPXNnKHRoaXMuRmYsMjYpfX0pO3ZhciBlPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYE1heExlbmAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiBlfSxzZXQ6ZnVuY3Rpb24odCl7ZT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBtYXhMZW5ndGhgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe051bWJlci5pc0ludGVnZXIodCkmJihlPXQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBoYXNBcHBlYXJhbmNlU3RyZWFtYCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVnx8dGhpcy5EVn19KX0sJGgoQWcsYmcpLGpnPWZ1bmN0aW9uKCl7QWcuY2FsbCh0aGlzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgcGFzc3dvcmRgLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWFnKHRoaXMuRmYsMTQpfSxzZXQ6ZnVuY3Rpb24oZSl7ISFlPT0xP3RoaXMuRmY9b2codGhpcy5GZiwxNCk6dGhpcy5GZj1zZyh0aGlzLkZmLDE0KX19KSx0aGlzLnBhc3N3b3JkPSEwfSwkaChqZyxBZyksUT17Q2hlY2tCb3g6e2NyZWF0ZUFwcGVhcmFuY2VTdHJlYW06ZnVuY3Rpb24oKXtyZXR1cm57Tjp7T246US5DaGVja0JveC5ZZXNOb3JtYWx9LEQ6e09uOlEuQ2hlY2tCb3guWWVzUHVzaERvd24sT2ZmOlEuQ2hlY2tCb3guT2ZmUHVzaERvd259fX0sWWVzUHVzaERvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGcoZSk7dC5zY29wZT1lLnNjb3BlO3ZhciBuPVtdLHI9ZS5zY29wZS5pbnRlcm5hbC5nZXRGb250KGUuZm9udE5hbWUsZS5mb250U3R5bGUpLmlkLGk9ZS5zY29wZS5fX3ByaXZhdGVfXy5lbmNvZGVDb2xvclN0cmluZyhlLmNvbG9yKSxhPXVnKGUsZS5jYXB0aW9uKTtyZXR1cm4gbi5wdXNoKGAwLjc0OTAyMyBnYCksbi5wdXNoKGAwIDAgYCtaaChRLmludGVybmFsLmdldFdpZHRoKGUpKStgIGArWmgoUS5pbnRlcm5hbC5nZXRIZWlnaHQoZSkpK2AgcmVgKSxuLnB1c2goYGZgKSxuLnB1c2goYEJNQ2ApLG4ucHVzaChgcWApLG4ucHVzaChgMCAwIDEgcmdgKSxuLnB1c2goYC9gK3IrYCBgK1poKGEuZm9udFNpemUpK2AgVGYgYCtpKSxuLnB1c2goYEJUYCksbi5wdXNoKGEudGV4dCksbi5wdXNoKGBFVGApLG4ucHVzaChgUWApLG4ucHVzaChgRU1DYCksdC5zdHJlYW09bi5qb2luKGAKYCksdH0sWWVzTm9ybWFsOmZ1bmN0aW9uKGUpe3ZhciB0PXRnKGUpO3Quc2NvcGU9ZS5zY29wZTt2YXIgbj1lLnNjb3BlLmludGVybmFsLmdldEZvbnQoZS5mb250TmFtZSxlLmZvbnRTdHlsZSkuaWQscj1lLnNjb3BlLl9fcHJpdmF0ZV9fLmVuY29kZUNvbG9yU3RyaW5nKGUuY29sb3IpLGk9W10sYT1RLmludGVybmFsLmdldEhlaWdodChlKSxvPVEuaW50ZXJuYWwuZ2V0V2lkdGgoZSkscz11ZyhlLGUuY2FwdGlvbik7cmV0dXJuIGkucHVzaChgMSBnYCksaS5wdXNoKGAwIDAgYCtaaChvKStgIGArWmgoYSkrYCByZWApLGkucHVzaChgZmApLGkucHVzaChgcWApLGkucHVzaChgMCAwIDEgcmdgKSxpLnB1c2goYDAgMCBgK1poKG8tMSkrYCBgK1poKGEtMSkrYCByZWApLGkucHVzaChgV2ApLGkucHVzaChgbmApLGkucHVzaChgMCBnYCksaS5wdXNoKGBCVGApLGkucHVzaChgL2ArbitgIGArWmgocy5mb250U2l6ZSkrYCBUZiBgK3IpLGkucHVzaChzLnRleHQpLGkucHVzaChgRVRgKSxpLnB1c2goYFFgKSx0LnN0cmVhbT1pLmpvaW4oYApgKSx0fSxPZmZQdXNoRG93bjpmdW5jdGlvbihlKXt2YXIgdD10ZyhlKTt0LnNjb3BlPWUuc2NvcGU7dmFyIG49W107cmV0dXJuIG4ucHVzaChgMC43NDkwMjMgZ2ApLG4ucHVzaChgMCAwIGArWmgoUS5pbnRlcm5hbC5nZXRXaWR0aChlKSkrYCBgK1poKFEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpKStgIHJlYCksbi5wdXNoKGBmYCksdC5zdHJlYW09bi5qb2luKGAKYCksdH19LFJhZGlvQnV0dG9uOntDaXJjbGU6e2NyZWF0ZUFwcGVhcmFuY2VTdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHQ9e0Q6e09mZjpRLlJhZGlvQnV0dG9uLkNpcmNsZS5PZmZQdXNoRG93bn0sTjp7fX07cmV0dXJuIHQuTltlXT1RLlJhZGlvQnV0dG9uLkNpcmNsZS5ZZXNOb3JtYWwsdC5EW2VdPVEuUmFkaW9CdXR0b24uQ2lyY2xlLlllc1B1c2hEb3duLHR9LGdldENBOmZ1bmN0aW9uKCl7cmV0dXJuYGxgfSxZZXNOb3JtYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGcoZSk7dC5zY29wZT1lLnNjb3BlO3ZhciBuPVtdLHI9US5pbnRlcm5hbC5nZXRXaWR0aChlKTw9US5pbnRlcm5hbC5nZXRIZWlnaHQoZSk/US5pbnRlcm5hbC5nZXRXaWR0aChlKS80OlEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpLzQ7cj1OdW1iZXIoKC45KnIpLnRvRml4ZWQoNSkpO3ZhciBpPVEuaW50ZXJuYWwuQmV6aWVyX0MsYT1OdW1iZXIoKHIqaSkudG9GaXhlZCg1KSk7cmV0dXJuIG4ucHVzaChgcWApLG4ucHVzaChgMSAwIDAgMSBgK1FoKFEuaW50ZXJuYWwuZ2V0V2lkdGgoZSkvMikrYCBgK1FoKFEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpLzIpK2AgY21gKSxuLnB1c2gocitgIDAgbWApLG4ucHVzaChyK2AgYCthK2AgYCthK2AgYCtyK2AgMCBgK3IrYCBjYCksbi5wdXNoKGAtYCthK2AgYCtyK2AgLWArcitgIGArYStgIC1gK3IrYCAwIGNgKSxuLnB1c2goYC1gK3IrYCAtYCthK2AgLWArYStgIC1gK3IrYCAwIC1gK3IrYCBjYCksbi5wdXNoKGErYCAtYCtyK2AgYCtyK2AgLWArYStgIGArcitgIDAgY2ApLG4ucHVzaChgZmApLG4ucHVzaChgUWApLHQuc3RyZWFtPW4uam9pbihgCmApLHR9LFllc1B1c2hEb3duOmZ1bmN0aW9uKGUpe3ZhciB0PXRnKGUpO3Quc2NvcGU9ZS5zY29wZTt2YXIgbj1bXSxyPVEuaW50ZXJuYWwuZ2V0V2lkdGgoZSk8PVEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpP1EuaW50ZXJuYWwuZ2V0V2lkdGgoZSkvNDpRLmludGVybmFsLmdldEhlaWdodChlKS80O3I9TnVtYmVyKCguOSpyKS50b0ZpeGVkKDUpKTt2YXIgaT1OdW1iZXIoKDIqcikudG9GaXhlZCg1KSksYT1OdW1iZXIoKGkqUS5pbnRlcm5hbC5CZXppZXJfQykudG9GaXhlZCg1KSksbz1OdW1iZXIoKHIqUS5pbnRlcm5hbC5CZXppZXJfQykudG9GaXhlZCg1KSk7cmV0dXJuIG4ucHVzaChgMC43NDkwMjMgZ2ApLG4ucHVzaChgcWApLG4ucHVzaChgMSAwIDAgMSBgK1FoKFEuaW50ZXJuYWwuZ2V0V2lkdGgoZSkvMikrYCBgK1FoKFEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpLzIpK2AgY21gKSxuLnB1c2goaStgIDAgbWApLG4ucHVzaChpK2AgYCthK2AgYCthK2AgYCtpK2AgMCBgK2krYCBjYCksbi5wdXNoKGAtYCthK2AgYCtpK2AgLWAraStgIGArYStgIC1gK2krYCAwIGNgKSxuLnB1c2goYC1gK2krYCAtYCthK2AgLWArYStgIC1gK2krYCAwIC1gK2krYCBjYCksbi5wdXNoKGErYCAtYCtpK2AgYCtpK2AgLWArYStgIGAraStgIDAgY2ApLG4ucHVzaChgZmApLG4ucHVzaChgUWApLG4ucHVzaChgMCBnYCksbi5wdXNoKGBxYCksbi5wdXNoKGAxIDAgMCAxIGArUWgoUS5pbnRlcm5hbC5nZXRXaWR0aChlKS8yKStgIGArUWgoUS5pbnRlcm5hbC5nZXRIZWlnaHQoZSkvMikrYCBjbWApLG4ucHVzaChyK2AgMCBtYCksbi5wdXNoKHIrYCBgK28rYCBgK28rYCBgK3IrYCAwIGArcitgIGNgKSxuLnB1c2goYC1gK28rYCBgK3IrYCAtYCtyK2AgYCtvK2AgLWArcitgIDAgY2ApLG4ucHVzaChgLWArcitgIC1gK28rYCAtYCtvK2AgLWArcitgIDAgLWArcitgIGNgKSxuLnB1c2gobytgIC1gK3IrYCBgK3IrYCAtYCtvK2AgYCtyK2AgMCBjYCksbi5wdXNoKGBmYCksbi5wdXNoKGBRYCksdC5zdHJlYW09bi5qb2luKGAKYCksdH0sT2ZmUHVzaERvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGcoZSk7dC5zY29wZT1lLnNjb3BlO3ZhciBuPVtdLHI9US5pbnRlcm5hbC5nZXRXaWR0aChlKTw9US5pbnRlcm5hbC5nZXRIZWlnaHQoZSk/US5pbnRlcm5hbC5nZXRXaWR0aChlKS80OlEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpLzQ7cj1OdW1iZXIoKC45KnIpLnRvRml4ZWQoNSkpO3ZhciBpPU51bWJlcigoMipyKS50b0ZpeGVkKDUpKSxhPU51bWJlcigoaSpRLmludGVybmFsLkJlemllcl9DKS50b0ZpeGVkKDUpKTtyZXR1cm4gbi5wdXNoKGAwLjc0OTAyMyBnYCksbi5wdXNoKGBxYCksbi5wdXNoKGAxIDAgMCAxIGArUWgoUS5pbnRlcm5hbC5nZXRXaWR0aChlKS8yKStgIGArUWgoUS5pbnRlcm5hbC5nZXRIZWlnaHQoZSkvMikrYCBjbWApLG4ucHVzaChpK2AgMCBtYCksbi5wdXNoKGkrYCBgK2ErYCBgK2ErYCBgK2krYCAwIGAraStgIGNgKSxuLnB1c2goYC1gK2ErYCBgK2krYCAtYCtpK2AgYCthK2AgLWAraStgIDAgY2ApLG4ucHVzaChgLWAraStgIC1gK2ErYCAtYCthK2AgLWAraStgIDAgLWAraStgIGNgKSxuLnB1c2goYStgIC1gK2krYCBgK2krYCAtYCthK2AgYCtpK2AgMCBjYCksbi5wdXNoKGBmYCksbi5wdXNoKGBRYCksdC5zdHJlYW09bi5qb2luKGAKYCksdH19LENyb3NzOntjcmVhdGVBcHBlYXJhbmNlU3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciB0PXtEOntPZmY6US5SYWRpb0J1dHRvbi5Dcm9zcy5PZmZQdXNoRG93bn0sTjp7fX07cmV0dXJuIHQuTltlXT1RLlJhZGlvQnV0dG9uLkNyb3NzLlllc05vcm1hbCx0LkRbZV09US5SYWRpb0J1dHRvbi5Dcm9zcy5ZZXNQdXNoRG93bix0fSxnZXRDQTpmdW5jdGlvbigpe3JldHVybmA4YH0sWWVzTm9ybWFsOmZ1bmN0aW9uKGUpe3ZhciB0PXRnKGUpO3Quc2NvcGU9ZS5zY29wZTt2YXIgbj1bXSxyPVEuaW50ZXJuYWwuY2FsY3VsYXRlQ3Jvc3MoZSk7cmV0dXJuIG4ucHVzaChgcWApLG4ucHVzaChgMSAxIGArWmgoUS5pbnRlcm5hbC5nZXRXaWR0aChlKS0yKStgIGArWmgoUS5pbnRlcm5hbC5nZXRIZWlnaHQoZSktMikrYCByZWApLG4ucHVzaChgV2ApLG4ucHVzaChgbmApLG4ucHVzaChaaChyLngxLngpK2AgYCtaaChyLngxLnkpK2AgbWApLG4ucHVzaChaaChyLngyLngpK2AgYCtaaChyLngyLnkpK2AgbGApLG4ucHVzaChaaChyLng0LngpK2AgYCtaaChyLng0LnkpK2AgbWApLG4ucHVzaChaaChyLngzLngpK2AgYCtaaChyLngzLnkpK2AgbGApLG4ucHVzaChgc2ApLG4ucHVzaChgUWApLHQuc3RyZWFtPW4uam9pbihgCmApLHR9LFllc1B1c2hEb3duOmZ1bmN0aW9uKGUpe3ZhciB0PXRnKGUpO3Quc2NvcGU9ZS5zY29wZTt2YXIgbj1RLmludGVybmFsLmNhbGN1bGF0ZUNyb3NzKGUpLHI9W107cmV0dXJuIHIucHVzaChgMC43NDkwMjMgZ2ApLHIucHVzaChgMCAwIGArWmgoUS5pbnRlcm5hbC5nZXRXaWR0aChlKSkrYCBgK1poKFEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpKStgIHJlYCksci5wdXNoKGBmYCksci5wdXNoKGBxYCksci5wdXNoKGAxIDEgYCtaaChRLmludGVybmFsLmdldFdpZHRoKGUpLTIpK2AgYCtaaChRLmludGVybmFsLmdldEhlaWdodChlKS0yKStgIHJlYCksci5wdXNoKGBXYCksci5wdXNoKGBuYCksci5wdXNoKFpoKG4ueDEueCkrYCBgK1poKG4ueDEueSkrYCBtYCksci5wdXNoKFpoKG4ueDIueCkrYCBgK1poKG4ueDIueSkrYCBsYCksci5wdXNoKFpoKG4ueDQueCkrYCBgK1poKG4ueDQueSkrYCBtYCksci5wdXNoKFpoKG4ueDMueCkrYCBgK1poKG4ueDMueSkrYCBsYCksci5wdXNoKGBzYCksci5wdXNoKGBRYCksdC5zdHJlYW09ci5qb2luKGAKYCksdH0sT2ZmUHVzaERvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGcoZSk7dC5zY29wZT1lLnNjb3BlO3ZhciBuPVtdO3JldHVybiBuLnB1c2goYDAuNzQ5MDIzIGdgKSxuLnB1c2goYDAgMCBgK1poKFEuaW50ZXJuYWwuZ2V0V2lkdGgoZSkpK2AgYCtaaChRLmludGVybmFsLmdldEhlaWdodChlKSkrYCByZWApLG4ucHVzaChgZmApLHQuc3RyZWFtPW4uam9pbihgCmApLHR9fX0sY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2VTdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY29wZS5pbnRlcm5hbC5nZXRGb250KGUuZm9udE5hbWUsZS5mb250U3R5bGUpLmlkLG49ZS5zY29wZS5fX3ByaXZhdGVfXy5lbmNvZGVDb2xvclN0cmluZyhlLmNvbG9yKTtyZXR1cm5gL2ArdCtgIGArZS5mb250U2l6ZStgIFRmIGArbn19LFEuaW50ZXJuYWw9e0Jlemllcl9DOi41NTE5MTUwMjQ0OTQsY2FsY3VsYXRlQ3Jvc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9US5pbnRlcm5hbC5nZXRXaWR0aChlKSxuPVEuaW50ZXJuYWwuZ2V0SGVpZ2h0KGUpLHI9TWF0aC5taW4odCxuKTtyZXR1cm57eDE6e3g6KHQtcikvMix5OihuLXIpLzIrcn0seDI6e3g6KHQtcikvMityLHk6KG4tcikvMn0seDM6e3g6KHQtcikvMix5OihuLXIpLzJ9LHg0Ont4Oih0LXIpLzIrcix5OihuLXIpLzIrcn19fX0sUS5pbnRlcm5hbC5nZXRXaWR0aD1mdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBBKGUpPT09YG9iamVjdGAmJih0PWVnKGUuUmVjdFsyXSkpLHR9LFEuaW50ZXJuYWwuZ2V0SGVpZ2h0PWZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIEEoZSk9PT1gb2JqZWN0YCYmKHQ9ZWcoZS5SZWN0WzNdKSksdH0sTWc9S2guYWRkRmllbGQ9ZnVuY3Rpb24oZSl7aWYobWcodGhpcyxlKSwhKGUgaW5zdGFuY2VvZiBiZykpdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmFkZEZpZWxkLmApO3ZhciB0O3JldHVybih0PWUpLnNjb3BlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnByaW50ZWRPdXQmJih0LnNjb3BlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnByaW50ZWRPdXQ9ITEsdC5zY29wZS5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290PW51bGwpLHQuc2NvcGUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5GaWVsZHMucHVzaCh0KSxlLnBhZ2U9ZS5zY29wZS5pbnRlcm5hbC5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyLHRoaXN9LEtoLkFjcm9Gb3JtQ2hvaWNlRmllbGQ9eGcsS2guQWNyb0Zvcm1MaXN0Qm94PVNnLEtoLkFjcm9Gb3JtQ29tYm9Cb3g9Q2csS2guQWNyb0Zvcm1FZGl0Qm94PXdnLEtoLkFjcm9Gb3JtQnV0dG9uPVRnLEtoLkFjcm9Gb3JtUHVzaEJ1dHRvbj1FZyxLaC5BY3JvRm9ybVJhZGlvQnV0dG9uPURnLEtoLkFjcm9Gb3JtQ2hlY2tCb3g9a2csS2guQWNyb0Zvcm1UZXh0RmllbGQ9QWcsS2guQWNyb0Zvcm1QYXNzd29yZEZpZWxkPWpnLEtoLkFjcm9Gb3JtQXBwZWFyYW5jZT1RLEtoLkFjcm9Gb3JtPXtDaG9pY2VGaWVsZDp4ZyxMaXN0Qm94OlNnLENvbWJvQm94OkNnLEVkaXRCb3g6d2csQnV0dG9uOlRnLFB1c2hCdXR0b246RWcsUmFkaW9CdXR0b246RGcsQ2hlY2tCb3g6a2csVGV4dEZpZWxkOkFnLFBhc3N3b3JkRmllbGQ6amcsQXBwZWFyYW5jZTpRfSxaLkFjcm9Gb3JtPXtDaG9pY2VGaWVsZDp4ZyxMaXN0Qm94OlNnLENvbWJvQm94OkNnLEVkaXRCb3g6d2csQnV0dG9uOlRnLFB1c2hCdXR0b246RWcsUmFkaW9CdXR0b246RGcsQ2hlY2tCb3g6a2csVGV4dEZpZWxkOkFnLFBhc3N3b3JkRmllbGQ6amcsQXBwZWFyYW5jZTpRfSxaLkFjcm9Gb3JtLChmdW5jdGlvbihlKXt2YXIgdD1gYWRkSW1hZ2VfYDtlLl9fYWRkaW1hZ2VfXz17fTt2YXIgbj1gVU5LTk9XTmAscj17UE5HOltbMTM3LDgwLDc4LDcxXV0sVElGRjpbWzc3LDc3LDAsNDJdLFs3Myw3Myw0MiwwXV0sSlBFRzpbWzI1NSwyMTYsMjU1LDIyNCx2b2lkIDAsdm9pZCAwLDc0LDcwLDczLDcwLDBdLFsyNTUsMjE2LDI1NSwyMjUsdm9pZCAwLHZvaWQgMCw2OSwxMjAsMTA1LDEwMiwwLDBdLFsyNTUsMjE2LDI1NSwyMTldLFsyNTUsMjE2LDI1NSwyMzhdXSxKUEVHMjAwMDpbWzAsMCwwLDEyLDEwNiw4MCwzMiwzMl1dLEdJRjg3YTpbWzcxLDczLDcwLDU2LDU1LDk3XV0sR0lGODlhOltbNzEsNzMsNzAsNTYsNTcsOTddXSxXRUJQOltbODIsNzMsNzAsNzAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDg3LDY5LDY2LDgwXV0sQk1QOltbNjYsNzddLFs2Niw2NV0sWzY3LDczXSxbNjcsODBdLFs3Myw2N10sWzgwLDg0XV19LGk9ZS5fX2FkZGltYWdlX18uZ2V0SW1hZ2VGaWxlVHlwZUJ5SW1hZ2VEYXRhPWZ1bmN0aW9uKGUsdCl7dmFyIGksYSxvLHMsYyxsPW47aWYoKHR8fD1uKT09PWBSR0JBYHx8ZS5kYXRhIT09dm9pZCAwJiZlLmRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSYmYGhlaWdodGBpbiBlJiZgd2lkdGhgaW4gZSlyZXR1cm5gUkdCQWA7aWYoUyhlKSlmb3IoYyBpbiByKWZvcihvPXJbY10saT0wO2k8by5sZW5ndGg7aSs9MSl7Zm9yKHM9ITAsYT0wO2E8b1tpXS5sZW5ndGg7YSs9MSlpZihvW2ldW2FdIT09dm9pZCAwJiZvW2ldW2FdIT09ZVthXSl7cz0hMTticmVha31pZighMD09PXMpe2w9YzticmVha319ZWxzZSBmb3IoYyBpbiByKWZvcihvPXJbY10saT0wO2k8by5sZW5ndGg7aSs9MSl7Zm9yKHM9ITAsYT0wO2E8b1tpXS5sZW5ndGg7YSs9MSlpZihvW2ldW2FdIT09dm9pZCAwJiZvW2ldW2FdIT09ZS5jaGFyQ29kZUF0KGEpKXtzPSExO2JyZWFrfWlmKCEwPT09cyl7bD1jO2JyZWFrfX1yZXR1cm4gbD09PW4mJnQhPT1uJiYobD10KSxsfSxhPWZ1bmN0aW9uIGUodCl7Zm9yKHZhciBuPXRoaXMuaW50ZXJuYWwud3JpdGUscj10aGlzLmludGVybmFsLnB1dFN0cmVhbSxpPSgwLHRoaXMuaW50ZXJuYWwuZ2V0RmlsdGVycykoKTtpLmluZGV4T2YoYEZsYXRlRW5jb2RlYCkhPT0tMTspaS5zcGxpY2UoaS5pbmRleE9mKGBGbGF0ZUVuY29kZWApLDEpO3Qub2JqZWN0SWQ9dGhpcy5pbnRlcm5hbC5uZXdPYmplY3QoKTt2YXIgYT1bXTtpZihhLnB1c2goe2tleTpgVHlwZWAsdmFsdWU6YC9YT2JqZWN0YH0pLGEucHVzaCh7a2V5OmBTdWJ0eXBlYCx2YWx1ZTpgL0ltYWdlYH0pLGEucHVzaCh7a2V5OmBXaWR0aGAsdmFsdWU6dC53aWR0aH0pLGEucHVzaCh7a2V5OmBIZWlnaHRgLHZhbHVlOnQuaGVpZ2h0fSksdC5jb2xvclNwYWNlPT09Xy5JTkRFWEVEP2EucHVzaCh7a2V5OmBDb2xvclNwYWNlYCx2YWx1ZTpgWy9JbmRleGVkIC9EZXZpY2VSR0IgYCsodC5wYWxldHRlLmxlbmd0aC8zLTEpK2AgYCsoYHNNYXNrYGluIHQmJnQuc01hc2shPT12b2lkIDA/dC5vYmplY3RJZCsyOnQub2JqZWN0SWQrMSkrYCAwIFJdYH0pOihhLnB1c2goe2tleTpgQ29sb3JTcGFjZWAsdmFsdWU6YC9gK3QuY29sb3JTcGFjZX0pLHQuY29sb3JTcGFjZT09PV8uREVWSUNFX0NNWUsmJmEucHVzaCh7a2V5OmBEZWNvZGVgLHZhbHVlOmBbMSAwIDEgMCAxIDAgMSAwXWB9KSksYS5wdXNoKHtrZXk6YEJpdHNQZXJDb21wb25lbnRgLHZhbHVlOnQuYml0c1BlckNvbXBvbmVudH0pLGBkZWNvZGVQYXJhbWV0ZXJzYGluIHQmJnQuZGVjb2RlUGFyYW1ldGVycyE9PXZvaWQgMCYmYS5wdXNoKHtrZXk6YERlY29kZVBhcm1zYCx2YWx1ZTpgPDxgK3QuZGVjb2RlUGFyYW1ldGVycytgPj5gfSksYHRyYW5zcGFyZW5jeWBpbiB0JiZBcnJheS5pc0FycmF5KHQudHJhbnNwYXJlbmN5KSYmdC50cmFuc3BhcmVuY3kubGVuZ3RoPjApe2Zvcih2YXIgbz1gYCxzPTAsYz10LnRyYW5zcGFyZW5jeS5sZW5ndGg7czxjO3MrKylvKz10LnRyYW5zcGFyZW5jeVtzXStgIGArdC50cmFuc3BhcmVuY3lbc10rYCBgO2EucHVzaCh7a2V5OmBNYXNrYCx2YWx1ZTpgW2ArbytgXWB9KX10LnNNYXNrIT09dm9pZCAwJiZhLnB1c2goe2tleTpgU01hc2tgLHZhbHVlOnQub2JqZWN0SWQrMStgIDAgUmB9KTt2YXIgbD10LmZpbHRlcj09PXZvaWQgMD92b2lkIDA6W2AvYCt0LmZpbHRlcl07aWYocih7ZGF0YTp0LmRhdGEsYWRkaXRpb25hbEtleVZhbHVlczphLGFscmVhZHlBcHBsaWVkRmlsdGVyczpsLG9iamVjdElkOnQub2JqZWN0SWR9KSxuKGBlbmRvYmpgKSxgc01hc2tgaW4gdCYmdC5zTWFzayE9PXZvaWQgMCl7dmFyIHU9dC5zTWFza0JpdHNQZXJDb21wb25lbnQ/P3QuYml0c1BlckNvbXBvbmVudCxkPXt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCxjb2xvclNwYWNlOmBEZXZpY2VHcmF5YCxiaXRzUGVyQ29tcG9uZW50OnUsZGF0YTp0LnNNYXNrfTtgZmlsdGVyYGluIHQmJihkLmRlY29kZVBhcmFtZXRlcnM9YC9QcmVkaWN0b3IgJHt0LnByZWRpY3Rvcn0gL0NvbG9ycyAxIC9CaXRzUGVyQ29tcG9uZW50ICR7dX0gL0NvbHVtbnMgJHt0LndpZHRofWAsZC5maWx0ZXI9dC5maWx0ZXIpLGUuY2FsbCh0aGlzLGQpfWlmKHQuY29sb3JTcGFjZT09PV8uSU5ERVhFRCl7dmFyIGY9dGhpcy5pbnRlcm5hbC5uZXdPYmplY3QoKTtyKHtkYXRhOncobmV3IFVpbnQ4QXJyYXkodC5wYWxldHRlKSksb2JqZWN0SWQ6Zn0pLG4oYGVuZG9iamApfX0sbz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbdCtgaW1hZ2VzYF07Zm9yKHZhciBuIGluIGUpYS5jYWxsKHRoaXMsZVtuXSl9LHM9ZnVuY3Rpb24oKXt2YXIgZSxuPXRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbdCtgaW1hZ2VzYF0scj10aGlzLmludGVybmFsLndyaXRlO2Zvcih2YXIgaSBpbiBuKXIoYC9JYCsoZT1uW2ldKS5pbmRleCxlLm9iamVjdElkLGAwYCxgUmApfSxjPWZ1bmN0aW9uKCl7dGhpcy5pbnRlcm5hbC5jb2xsZWN0aW9uc1t0K2BpbWFnZXNgXXx8KHRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbdCtgaW1hZ2VzYF09e30sdGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKGBwdXRSZXNvdXJjZXNgLG8pLHRoaXMuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShgcHV0WG9iamVjdERpY3RgLHMpKX0sbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbdCtgaW1hZ2VzYF07cmV0dXJuIGMuY2FsbCh0aGlzKSxlfSx1PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbdCtgaW1hZ2VzYF0pLmxlbmd0aH0sZD1mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIGVbYHByb2Nlc3NgK3QudG9VcHBlckNhc2UoKV09PWBmdW5jdGlvbmB9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIEEoZSk9PT1gb2JqZWN0YCYmZS5ub2RlVHlwZT09PTF9LHA9ZnVuY3Rpb24odCxuKXtpZih0Lm5vZGVOYW1lPT09YElNR2AmJnQuaGFzQXR0cmlidXRlKGBzcmNgKSl7dmFyIHI9YGArdC5nZXRBdHRyaWJ1dGUoYHNyY2ApO2lmKHIuaW5kZXhPZihgZGF0YTppbWFnZS9gKT09PTApcmV0dXJuIFZoKHVuZXNjYXBlKHIpLnNwbGl0KGBiYXNlNjQsYCkucG9wKCkpO3ZhciBpPWUubG9hZEZpbGUociwhMCk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaX1pZih0Lm5vZGVOYW1lPT09YENBTlZBU2Ape2lmKHQud2lkdGg9PT0wfHx0LmhlaWdodD09PTApdGhyb3cgRXJyb3IoYEdpdmVuIGNhbnZhcyBtdXN0IGhhdmUgZGF0YS4gQ2FudmFzIHdpZHRoOiBgK3Qud2lkdGgrYCwgaGVpZ2h0OiBgK3QuaGVpZ2h0KTt2YXIgYTtzd2l0Y2gobil7Y2FzZWBQTkdgOmE9YGltYWdlL3BuZ2A7YnJlYWs7Y2FzZWBXRUJQYDphPWBpbWFnZS93ZWJwYDticmVhaztkZWZhdWx0OmE9YGltYWdlL2pwZWdgfXJldHVybiBWaCh0LnRvRGF0YVVSTChhLDEpLnNwbGl0KGBiYXNlNjQsYCkucG9wKCkpfX0sbT1mdW5jdGlvbihlKXt2YXIgbj10aGlzLmludGVybmFsLmNvbGxlY3Rpb25zW3QrYGltYWdlc2BdO2lmKG4pe2Zvcih2YXIgciBpbiBuKWlmKGU9PT1uW3JdLmFsaWFzKXJldHVybiBuW3JdfX0saD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGV8fHR8fChlPS05Nix0PS05NiksZTwwJiYoZT0tMSpuLndpZHRoKjcyL2UvdGhpcy5pbnRlcm5hbC5zY2FsZUZhY3RvciksdDwwJiYodD0tMSpuLmhlaWdodCo3Mi90L3RoaXMuaW50ZXJuYWwuc2NhbGVGYWN0b3IpLGU9PT0wJiYoZT10Km4ud2lkdGgvbi5oZWlnaHQpLHQ9PT0wJiYodD1lKm4uaGVpZ2h0L24ud2lkdGgpLFtlLHRdfSxnPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbz1oLmNhbGwodGhpcyxuLHIsaSkscz10aGlzLmludGVybmFsLmdldENvb3JkaW5hdGVTdHJpbmcsYz10aGlzLmludGVybmFsLmdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZyx1PWwuY2FsbCh0aGlzKTtpZihuPW9bMF0scj1vWzFdLHVbaS5pbmRleF09aSxhKXthKj1NYXRoLlBJLzE4MDt2YXIgZD1NYXRoLmNvcyhhKSxmPU1hdGguc2luKGEpLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9GaXhlZCg0KX0sbT1bcChkKSxwKGYpLHAoLTEqZikscChkKSwwLDAsYGNtYF19dGhpcy5pbnRlcm5hbC53cml0ZShgcWApLGE/KHRoaXMuaW50ZXJuYWwud3JpdGUoWzEsYDBgLGAwYCwxLHMoZSksYyh0K3IpLGBjbWBdLmpvaW4oYCBgKSksdGhpcy5pbnRlcm5hbC53cml0ZShtLmpvaW4oYCBgKSksdGhpcy5pbnRlcm5hbC53cml0ZShbcyhuKSxgMGAsYDBgLHMociksYDBgLGAwYCxgY21gXS5qb2luKGAgYCkpKTp0aGlzLmludGVybmFsLndyaXRlKFtzKG4pLGAwYCxgMGAscyhyKSxzKGUpLGModCtyKSxgY21gXS5qb2luKGAgYCkpLHRoaXMuaXNBZHZhbmNlZEFQSSgpJiZ0aGlzLmludGVybmFsLndyaXRlKFsxLDAsMCwtMSwwLDAsYGNtYF0uam9pbihgIGApKSx0aGlzLmludGVybmFsLndyaXRlKGAvSWAraS5pbmRleCtgIERvYCksdGhpcy5pbnRlcm5hbC53cml0ZShgUWApfSxfPWUuY29sb3Jfc3BhY2VzPXtERVZJQ0VfUkdCOmBEZXZpY2VSR0JgLERFVklDRV9HUkFZOmBEZXZpY2VHcmF5YCxERVZJQ0VfQ01ZSzpgRGV2aWNlQ01ZS2AsQ0FMX0dSRVk6YENhbEdyYXlgLENBTF9SR0I6YENhbFJHQmAsTEFCOmBMYWJgLElDQ19CQVNFRDpgSUNDQmFzZWRgLElOREVYRUQ6YEluZGV4ZWRgLFBBVFRFUk46YFBhdHRlcm5gLFNFUEFSQVRJT046YFNlcGFyYXRpb25gLERFVklDRV9OOmBEZXZpY2VOYH07ZS5kZWNvZGU9e0RDVF9ERUNPREU6YERDVERlY29kZWAsRkxBVEVfREVDT0RFOmBGbGF0ZURlY29kZWAsTFpXX0RFQ09ERTpgTFpXRGVjb2RlYCxKUFhfREVDT0RFOmBKUFhEZWNvZGVgLEpCSUcyX0RFQ09ERTpgSkJJRzJEZWNvZGVgLEFTQ0lJODVfREVDT0RFOmBBU0NJSTg1RGVjb2RlYCxBU0NJSV9IRVhfREVDT0RFOmBBU0NJSUhleERlY29kZWAsUlVOX0xFTkdUSF9ERUNPREU6YFJ1bkxlbmd0aERlY29kZWAsQ0NJVFRfRkFYX0RFQ09ERTpgQ0NJVFRGYXhEZWNvZGVgfTt2YXIgdj1lLmltYWdlX2NvbXByZXNzaW9uPXtOT05FOmBOT05FYCxGQVNUOmBGQVNUYCxNRURJVU06YE1FRElVTWAsU0xPVzpgU0xPV2B9LHk9ZS5fX2FkZGltYWdlX18uc0hhc2hDb2RlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO2lmKHR5cGVvZiBlPT1gc3RyaW5nYClmb3Iobj1lLmxlbmd0aCx0PTA7dDxuO3QrKylyPShyPDw1KS1yK2UuY2hhckNvZGVBdCh0KSxyfD0wO2Vsc2UgaWYoUyhlKSlmb3Iobj1lLmJ5dGVMZW5ndGgvMix0PTA7dDxuO3QrKylyPShyPDw1KS1yK2VbdF0scnw9MDtyZXR1cm4gcn0sYj1lLl9fYWRkaW1hZ2VfXy52YWxpZGF0ZVN0cmluZ0FzQmFzZTY0PWZ1bmN0aW9uKGUpeyhlfHw9YGApLnRvU3RyaW5nKCkudHJpbSgpO3ZhciB0PSEwO3JldHVybiBlLmxlbmd0aD09PTAmJih0PSExKSxlLmxlbmd0aCU0IT0wJiYodD0hMSksITE9PT0vXltBLVphLXowLTkrL10rJC8udGVzdChlLnN1YnN0cigwLGUubGVuZ3RoLTIpKSYmKHQ9ITEpLCExPT09L15bQS1aYS16MC05L11bQS1aYS16MC05Ky9dfFtBLVphLXowLTkrL109fD09JC8udGVzdChlLnN1YnN0cigtMikpJiYodD0hMSksdH0seD1lLl9fYWRkaW1hZ2VfXy5leHRyYWN0SW1hZ2VGcm9tRGF0YVVybD1mdW5jdGlvbihlKXtpZihlPT1udWxsfHwhKGU9ZS50cmltKCkpLnN0YXJ0c1dpdGgoYGRhdGE6YCkpcmV0dXJuIG51bGw7dmFyIHQ9ZS5pbmRleE9mKGAsYCk7cmV0dXJuIHQ8MD9udWxsOmUuc3Vic3RyaW5nKDAsdCkudHJpbSgpLmVuZHNXaXRoKGBiYXNlNjRgKT9lLnN1YnN0cmluZyh0KzEpOm51bGx9O2UuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07dmFyIFM9ZS5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fGUgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHxlIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fGUgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxlIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fGUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fGUgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXl9LEM9ZS5fX2FkZGltYWdlX18uYmluYXJ5U3RyaW5nVG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxuPW5ldyBVaW50OEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09ZS5jaGFyQ29kZUF0KHIpO3JldHVybiBufSx3PWUuX19hZGRpbWFnZV9fLmFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWBgLG49UyhlKT9lOm5ldyBVaW50OEFycmF5KGUpLHI9MDtyPG4ubGVuZ3RoO3IrPTgxOTIpdCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG4uc3ViYXJyYXkocixyKzgxOTIpKTtyZXR1cm4gdH07ZS5hZGRJbWFnZT1mdW5jdGlvbigpe3ZhciBlLHQscixpLGEsbyxzLGwsdTtpZih0eXBlb2YgYXJndW1lbnRzWzFdPT1gbnVtYmVyYD8odD1uLHI9YXJndW1lbnRzWzFdLGk9YXJndW1lbnRzWzJdLGE9YXJndW1lbnRzWzNdLG89YXJndW1lbnRzWzRdLHM9YXJndW1lbnRzWzVdLGw9YXJndW1lbnRzWzZdLHU9YXJndW1lbnRzWzddKToodD1hcmd1bWVudHNbMV0scj1hcmd1bWVudHNbMl0saT1hcmd1bWVudHNbM10sYT1hcmd1bWVudHNbNF0sbz1hcmd1bWVudHNbNV0scz1hcmd1bWVudHNbNl0sbD1hcmd1bWVudHNbN10sdT1hcmd1bWVudHNbOF0pLEEoZT1hcmd1bWVudHNbMF0pPT09YG9iamVjdGAmJiFmKGUpJiZgaW1hZ2VEYXRhYGluIGUpe3ZhciBkPWU7ZT1kLmltYWdlRGF0YSx0PWQuZm9ybWF0fHx0fHxuLHI9ZC54fHxyfHwwLGk9ZC55fHxpfHwwLGE9ZC53fHxkLndpZHRofHxhLG89ZC5ofHxkLmhlaWdodHx8byxzPWQuYWxpYXN8fHMsbD1kLmNvbXByZXNzaW9ufHxsLHU9ZC5yb3RhdGlvbnx8ZC5hbmdsZXx8dX12YXIgcD10aGlzLmludGVybmFsLmdldEZpbHRlcnMoKTtpZihsPT09dm9pZCAwJiZwLmluZGV4T2YoYEZsYXRlRW5jb2RlYCkhPT0tMSYmKGw9YFNMT1dgKSxpc05hTihyKXx8aXNOYU4oaSkpdGhyb3cgRXJyb3IoYEludmFsaWQgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIGpzUERGLmFkZEltYWdlYCk7Yy5jYWxsKHRoaXMpO3ZhciBtPVQuY2FsbCh0aGlzLGUsdCxzLGwpO3JldHVybiBnLmNhbGwodGhpcyxyLGksYSxvLG0sdSksdGhpc307dmFyIFQ9ZnVuY3Rpb24odCxyLGEsbyl7dmFyIHMsYyxsO2lmKHR5cGVvZiB0PT1gc3RyaW5nYCYmaSh0KT09PW4pe3Q9dW5lc2NhcGUodCk7dmFyIGg9RSh0LCExKTsoaCE9PWBgfHwoaD1lLmxvYWRGaWxlKHQsITApKSE9PXZvaWQgMCkmJih0PWgpfWlmKGYodCkmJih0PXAodCxyKSkscj1pKHQsciksIWQocikpdGhyb3cgRXJyb3IoYGFkZEltYWdlIGRvZXMgbm90IHN1cHBvcnQgZmlsZXMgb2YgdHlwZSAnYCtyK2AnLCBwbGVhc2UgZW5zdXJlIHRoYXQgYSBwbHVnaW4gZm9yICdgK3IrYCcgc3VwcG9ydCBpcyBhZGRlZC5gKTtpZigoKGw9YSk9PW51bGx8fGwubGVuZ3RoPT09MCkmJihhPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2B8fFMoZSk/eShlKTpTKGUuZGF0YSk/eShlLmRhdGEpOm51bGx9KHQpKSwocz1tLmNhbGwodGhpcyxhKSl8fCh0IGluc3RhbmNlb2YgVWludDhBcnJheXx8cj09PWBSR0JBYHx8KGM9dCx0PUModCkpLHM9dGhpc1tgcHJvY2Vzc2Arci50b1VwcGVyQ2FzZSgpXSh0LHUuY2FsbCh0aGlzKSxhLGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdD09YHN0cmluZ2AmJih0PXQudG9VcHBlckNhc2UoKSksdCBpbiBlLmltYWdlX2NvbXByZXNzaW9uP3Q6di5OT05FfShvKSxjKSksIXMpdGhyb3cgRXJyb3IoYEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbHN0IHByb2Nlc3NpbmcgdGhlIGltYWdlLmApO3JldHVybiBzfSxFPWUuX19hZGRpbWFnZV9fLmNvbnZlcnRCYXNlNjRUb0JpbmFyeVN0cmluZz1mdW5jdGlvbihlLHQpe3Q9dHlwZW9mIHQhPWBib29sZWFuYHx8dDt2YXIgbixyPWBgO2lmKHR5cGVvZiBlPT1gc3RyaW5nYCl7bj14KGUpPz9lO3RyeXtyPVZoKG4pfWNhdGNoKGUpe2lmKHQpdGhyb3cgYihuKT9FcnJvcihgYXRvYi1FcnJvciBpbiBqc1BERi5jb252ZXJ0QmFzZTY0VG9CaW5hcnlTdHJpbmcgYCtlLm1lc3NhZ2UpOkVycm9yKGBTdXBwbGllZCBEYXRhIGlzIG5vdCBhIHZhbGlkIGJhc2U2NC1TdHJpbmcganNQREYuY29udmVydEJhc2U2NFRvQmluYXJ5U3RyaW5nIGApfX1yZXR1cm4gcn07ZS5nZXRJbWFnZVByb3BlcnRpZXM9ZnVuY3Rpb24odCl7dmFyIHIsYSxvPWBgO2lmKGYodCkmJih0PXAodCkpLHR5cGVvZiB0PT1gc3RyaW5nYCYmaSh0KT09PW4mJigobz1FKHQsITEpKT09PWBgJiYobz1lLmxvYWRGaWxlKHQpfHxgYCksdD1vKSxhPWkodCksIWQoYSkpdGhyb3cgRXJyb3IoYGFkZEltYWdlIGRvZXMgbm90IHN1cHBvcnQgZmlsZXMgb2YgdHlwZSAnYCthK2AnLCBwbGVhc2UgZW5zdXJlIHRoYXQgYSBwbHVnaW4gZm9yICdgK2ErYCcgc3VwcG9ydCBpcyBhZGRlZC5gKTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheXx8KHQ9Qyh0KSksIShyPXRoaXNbYHByb2Nlc3NgK2EudG9VcHBlckNhc2UoKV0odCkpKXRocm93IEVycm9yKGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxzdCBwcm9jZXNzaW5nIHRoZSBpbWFnZWApO3JldHVybiByLmZpbGVUeXBlPWEscn19KShaLkFQSSksZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCYmZSE9YGApcmV0dXJuITB9O1ouQVBJLmV2ZW50cy5wdXNoKFtgYWRkUGFnZWAsZnVuY3Rpb24oZSl7dGhpcy5pbnRlcm5hbC5nZXRQYWdlSW5mbyhlLnBhZ2VOdW1iZXIpLnBhZ2VDb250ZXh0LmFubm90YXRpb25zPVtdfV0pLGUuZXZlbnRzLnB1c2goW2BwdXRQYWdlYCxmdW5jdGlvbihlKXtmb3IodmFyIG4scixpLGE9dGhpcy5pbnRlcm5hbC5nZXRDb29yZGluYXRlU3RyaW5nLG89dGhpcy5pbnRlcm5hbC5nZXRWZXJ0aWNhbENvb3JkaW5hdGVTdHJpbmcscz10aGlzLmludGVybmFsLmdldFBhZ2VJbmZvQnlPYmpJZChlLm9iaklkKSxjPWUucGFnZUNvbnRleHQuYW5ub3RhdGlvbnMsbD0hMSx1PTA7dTxjLmxlbmd0aCYmIWw7dSsrKXN3aXRjaCgobj1jW3VdKS50eXBlKXtjYXNlYGxpbmtgOih0KG4ub3B0aW9ucy51cmwpfHx0KG4ub3B0aW9ucy5wYWdlTnVtYmVyKSkmJihsPSEwKTticmVhaztjYXNlYHJlZmVyZW5jZWA6Y2FzZWB0ZXh0YDpjYXNlYGZyZWV0ZXh0YDpsPSEwfWlmKGwhPTApe3RoaXMuaW50ZXJuYWwud3JpdGUoYC9Bbm5vdHMgW2ApO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtuPWNbZF07dmFyIGY9dGhpcy5pbnRlcm5hbC5wZGZFc2NhcGUscD10aGlzLmludGVybmFsLmdldEVuY3J5cHRvcihlLm9iaklkKTtzd2l0Y2gobi50eXBlKXtjYXNlYHJlZmVyZW5jZWA6dGhpcy5pbnRlcm5hbC53cml0ZShgIGArbi5vYmplY3Qub2JqSWQrYCAwIFIgYCk7YnJlYWs7Y2FzZWB0ZXh0YDp2YXIgbT10aGlzLmludGVybmFsLm5ld0FkZGl0aW9uYWxPYmplY3QoKSxoPXRoaXMuaW50ZXJuYWwubmV3QWRkaXRpb25hbE9iamVjdCgpLGc9dGhpcy5pbnRlcm5hbC5nZXRFbmNyeXB0b3IobS5vYmpJZCksXz1uLnRpdGxlfHxgTm90ZWA7aT1gPDwvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL1RleHQgYCsocj1gL1JlY3QgW2ArYShuLmJvdW5kcy54KStgIGArbyhuLmJvdW5kcy55K24uYm91bmRzLmgpK2AgYCthKG4uYm91bmRzLngrbi5ib3VuZHMudykrYCBgK28obi5ib3VuZHMueSkrYF0gYCkrYC9Db250ZW50cyAoYCtmKGcobi5jb250ZW50cykpK2ApYCxpKz1gIC9Qb3B1cCBgK2gub2JqSWQrYCAwIFJgLGkrPWAgL1AgYCtzLm9iaklkK2AgMCBSYCxpKz1gIC9UIChgK2YoZyhfKSkrYCkgPj5gLG0uY29udGVudD1pO3ZhciB2PW0ub2JqSWQrYCAwIFJgO2k9YDw8L1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9Qb3B1cCBgKyhyPWAvUmVjdCBbYCthKG4uYm91bmRzLngrMzApK2AgYCtvKG4uYm91bmRzLnkrbi5ib3VuZHMuaCkrYCBgK2Eobi5ib3VuZHMueCtuLmJvdW5kcy53KzMwKStgIGArbyhuLmJvdW5kcy55KStgXSBgKStgIC9QYXJlbnQgYCt2LG4ub3BlbiYmKGkrPWAgL09wZW4gdHJ1ZWApLGkrPWAgPj5gLGguY29udGVudD1pLHRoaXMuaW50ZXJuYWwud3JpdGUobS5vYmpJZCxgMCBSYCxoLm9iaklkLGAwIFJgKTticmVhaztjYXNlYGZyZWV0ZXh0YDpyPWAvUmVjdCBbYCthKG4uYm91bmRzLngpK2AgYCtvKG4uYm91bmRzLnkpK2AgYCthKG4uYm91bmRzLngrbi5ib3VuZHMudykrYCBgK28obi5ib3VuZHMueStuLmJvdW5kcy5oKStgXSBgO3ZhciB5PWBmb250OiBIZWx2ZXRpY2Esc2Fucy1zZXJpZiAxMi4wcHQ7IHRleHQtYWxpZ246bGVmdDsgY29sb3I6I2ArKG4uY29sb3J8fGAjMDAwMDAwYCk7aT1gPDwvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0ZyZWVUZXh0IGArcitgL0NvbnRlbnRzIChgK2YocChuLmNvbnRlbnRzKSkrYClgLGkrPWAgL0RTKGArZihwKHkpKStgKWAsaSs9YCAvQm9yZGVyIFswIDAgMF1gLGkrPWAgPj5gLHRoaXMuaW50ZXJuYWwud3JpdGUoaSk7YnJlYWs7Y2FzZWBsaW5rYDppZihuLm9wdGlvbnMubmFtZSl7dmFyIGI9dGhpcy5hbm5vdGF0aW9ucy5fbmFtZU1hcFtuLm9wdGlvbnMubmFtZV07bi5vcHRpb25zLnBhZ2VOdW1iZXI9Yi5wYWdlLG4ub3B0aW9ucy50b3A9Yi55fWVsc2Ugbi5vcHRpb25zLnRvcHx8KG4ub3B0aW9ucy50b3A9MCk7aWYocj1gL1JlY3QgW2Arbi5maW5hbEJvdW5kcy54K2AgYCtuLmZpbmFsQm91bmRzLnkrYCBgK24uZmluYWxCb3VuZHMudytgIGArbi5maW5hbEJvdW5kcy5oK2BdIGAsaT1gYCxuLm9wdGlvbnMudXJsKWk9YDw8L1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIGArcitgL0JvcmRlciBbMCAwIDBdIC9BIDw8L1MgL1VSSSAvVVJJIChgK2YocChuLm9wdGlvbnMudXJsKSkrYCkgPj5gO2Vsc2UgaWYobi5vcHRpb25zLnBhZ2VOdW1iZXIpc3dpdGNoKGk9YDw8L1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIGArcitgL0JvcmRlciBbMCAwIDBdIC9EZXN0IFtgK3RoaXMuaW50ZXJuYWwuZ2V0UGFnZUluZm8obi5vcHRpb25zLnBhZ2VOdW1iZXIpLm9iaklkK2AgMCBSYCxuLm9wdGlvbnMubWFnRmFjdG9yPW4ub3B0aW9ucy5tYWdGYWN0b3J8fGBYWVpgLG4ub3B0aW9ucy5tYWdGYWN0b3Ipe2Nhc2VgRml0YDppKz1gIC9GaXRdYDticmVhaztjYXNlYEZpdEhgOmkrPWAgL0ZpdEggYCtuLm9wdGlvbnMudG9wK2BdYDticmVhaztjYXNlYEZpdFZgOm4ub3B0aW9ucy5sZWZ0PW4ub3B0aW9ucy5sZWZ0fHwwLGkrPWAgL0ZpdFYgYCtuLm9wdGlvbnMubGVmdCtgXWA7YnJlYWs7ZGVmYXVsdDp2YXIgeD1vKG4ub3B0aW9ucy50b3ApO24ub3B0aW9ucy5sZWZ0PW4ub3B0aW9ucy5sZWZ0fHwwLG4ub3B0aW9ucy56b29tPT09dm9pZCAwJiYobi5vcHRpb25zLnpvb209MCksaSs9YCAvWFlaIGArbi5vcHRpb25zLmxlZnQrYCBgK3grYCBgK24ub3B0aW9ucy56b29tK2BdYH1pIT1gYCYmKGkrPWAgPj5gLHRoaXMuaW50ZXJuYWwud3JpdGUoaSkpfX10aGlzLmludGVybmFsLndyaXRlKGBdYCl9fV0pLGUuY3JlYXRlQW5ub3RhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLmdldEN1cnJlbnRQYWdlSW5mbygpO3N3aXRjaChlLnR5cGUpe2Nhc2VgbGlua2A6dGhpcy5saW5rKGUuYm91bmRzLngsZS5ib3VuZHMueSxlLmJvdW5kcy53LGUuYm91bmRzLmgsZSk7YnJlYWs7Y2FzZWB0ZXh0YDpjYXNlYGZyZWV0ZXh0YDp0LnBhZ2VDb250ZXh0LmFubm90YXRpb25zLnB1c2goZSl9fSxlLmxpbms9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT10aGlzLmludGVybmFsLmdldEN1cnJlbnRQYWdlSW5mbygpLG89dGhpcy5pbnRlcm5hbC5nZXRDb29yZGluYXRlU3RyaW5nLHM9dGhpcy5pbnRlcm5hbC5nZXRWZXJ0aWNhbENvb3JkaW5hdGVTdHJpbmc7YS5wYWdlQ29udGV4dC5hbm5vdGF0aW9ucy5wdXNoKHtmaW5hbEJvdW5kczp7eDpvKGUpLHk6cyh0KSx3Om8oZStuKSxoOnModCtyKX0sb3B0aW9uczppLHR5cGU6YGxpbmtgfSl9LGUudGV4dFdpdGhMaW5rPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEsbz10aGlzLmdldFRleHRXaWR0aChlKSxzPXRoaXMuaW50ZXJuYWwuZ2V0TGluZUhlaWdodCgpL3RoaXMuaW50ZXJuYWwuc2NhbGVGYWN0b3I7aWYoci5tYXhXaWR0aCE9PXZvaWQgMCl7YT1yLm1heFdpZHRoO3ZhciBjPXRoaXMuc3BsaXRUZXh0VG9TaXplKGUsYSkubGVuZ3RoO2k9TWF0aC5jZWlsKHMqYyl9ZWxzZSBhPW8saT1zO3JldHVybiB0aGlzLnRleHQoZSx0LG4sciksbis9LjIqcyxyLmFsaWduPT09YGNlbnRlcmAmJih0LT1vLzIpLHIuYWxpZ249PT1gcmlnaHRgJiYodC09byksdGhpcy5saW5rKHQsbi1zLGEsaSxyKSxvfSxlLmdldFRleHRXaWR0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLmdldEZvbnRTaXplKCk7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nVW5pdFdpZHRoKGUpKnQvdGhpcy5pbnRlcm5hbC5zY2FsZUZhY3Rvcn19KFouQVBJKSxmdW5jdGlvbihlKXt2YXIgdD17MTU2OTpbNjUxNTJdLDE1NzA6WzY1MTUzLDY1MTU0XSwxNTcxOls2NTE1NSw2NTE1Nl0sMTU3MjpbNjUxNTcsNjUxNThdLDE1NzM6WzY1MTU5LDY1MTYwXSwxNTc0Ols2NTE2MSw2NTE2Miw2NTE2Myw2NTE2NF0sMTU3NTpbNjUxNjUsNjUxNjZdLDE1NzY6WzY1MTY3LDY1MTY4LDY1MTY5LDY1MTcwXSwxNTc3Ols2NTE3MSw2NTE3Ml0sMTU3ODpbNjUxNzMsNjUxNzQsNjUxNzUsNjUxNzZdLDE1Nzk6WzY1MTc3LDY1MTc4LDY1MTc5LDY1MTgwXSwxNTgwOls2NTE4MSw2NTE4Miw2NTE4Myw2NTE4NF0sMTU4MTpbNjUxODUsNjUxODYsNjUxODcsNjUxODhdLDE1ODI6WzY1MTg5LDY1MTkwLDY1MTkxLDY1MTkyXSwxNTgzOls2NTE5Myw2NTE5NF0sMTU4NDpbNjUxOTUsNjUxOTZdLDE1ODU6WzY1MTk3LDY1MTk4XSwxNTg2Ols2NTE5OSw2NTIwMF0sMTU4NzpbNjUyMDEsNjUyMDIsNjUyMDMsNjUyMDRdLDE1ODg6WzY1MjA1LDY1MjA2LDY1MjA3LDY1MjA4XSwxNTg5Ols2NTIwOSw2NTIxMCw2NTIxMSw2NTIxMl0sMTU5MDpbNjUyMTMsNjUyMTQsNjUyMTUsNjUyMTZdLDE1OTE6WzY1MjE3LDY1MjE4LDY1MjE5LDY1MjIwXSwxNTkyOls2NTIyMSw2NTIyMiw2NTIyMyw2NTIyNF0sMTU5MzpbNjUyMjUsNjUyMjYsNjUyMjcsNjUyMjhdLDE1OTQ6WzY1MjI5LDY1MjMwLDY1MjMxLDY1MjMyXSwxNjAxOls2NTIzMyw2NTIzNCw2NTIzNSw2NTIzNl0sMTYwMjpbNjUyMzcsNjUyMzgsNjUyMzksNjUyNDBdLDE2MDM6WzY1MjQxLDY1MjQyLDY1MjQzLDY1MjQ0XSwxNjA0Ols2NTI0NSw2NTI0Niw2NTI0Nyw2NTI0OF0sMTYwNTpbNjUyNDksNjUyNTAsNjUyNTEsNjUyNTJdLDE2MDY6WzY1MjUzLDY1MjU0LDY1MjU1LDY1MjU2XSwxNjA3Ols2NTI1Nyw2NTI1OCw2NTI1OSw2NTI2MF0sMTYwODpbNjUyNjEsNjUyNjJdLDE2MDk6WzY1MjYzLDY1MjY0LDY0NDg4LDY0NDg5XSwxNjEwOls2NTI2NSw2NTI2Niw2NTI2Nyw2NTI2OF0sMTY0OTpbNjQzMzYsNjQzMzddLDE2NTU6WzY0NDc3XSwxNjU3Ols2NDM1OCw2NDM1OSw2NDM2MCw2NDM2MV0sMTY1ODpbNjQzNTAsNjQzNTEsNjQzNTIsNjQzNTNdLDE2NTk6WzY0MzM4LDY0MzM5LDY0MzQwLDY0MzQxXSwxNjYyOls2NDM0Miw2NDM0Myw2NDM0NCw2NDM0NV0sMTY2MzpbNjQzNTQsNjQzNTUsNjQzNTYsNjQzNTddLDE2NjQ6WzY0MzQ2LDY0MzQ3LDY0MzQ4LDY0MzQ5XSwxNjY3Ols2NDM3NCw2NDM3NSw2NDM3Niw2NDM3N10sMTY2ODpbNjQzNzAsNjQzNzEsNjQzNzIsNjQzNzNdLDE2NzA6WzY0Mzc4LDY0Mzc5LDY0MzgwLDY0MzgxXSwxNjcxOls2NDM4Miw2NDM4Myw2NDM4NCw2NDM4NV0sMTY3MjpbNjQzOTIsNjQzOTNdLDE2NzY6WzY0Mzg4LDY0Mzg5XSwxNjc3Ols2NDM4Niw2NDM4N10sMTY3ODpbNjQzOTAsNjQzOTFdLDE2ODE6WzY0Mzk2LDY0Mzk3XSwxNjg4Ols2NDM5NCw2NDM5NV0sMTcwMDpbNjQzNjIsNjQzNjMsNjQzNjQsNjQzNjVdLDE3MDI6WzY0MzY2LDY0MzY3LDY0MzY4LDY0MzY5XSwxNzA1Ols2NDM5OCw2NDM5OSw2NDQwMCw2NDQwMV0sMTcwOTpbNjQ0NjcsNjQ0NjgsNjQ0NjksNjQ0NzBdLDE3MTE6WzY0NDAyLDY0NDAzLDY0NDA0LDY0NDA1XSwxNzEzOls2NDQxMCw2NDQxMSw2NDQxMiw2NDQxM10sMTcxNTpbNjQ0MDYsNjQ0MDcsNjQ0MDgsNjQ0MDldLDE3MjI6WzY0NDE0LDY0NDE1XSwxNzIzOls2NDQxNiw2NDQxNyw2NDQxOCw2NDQxOV0sMTcyNjpbNjQ0MjYsNjQ0MjcsNjQ0MjgsNjQ0MjldLDE3Mjg6WzY0NDIwLDY0NDIxXSwxNzI5Ols2NDQyMiw2NDQyMyw2NDQyNCw2NDQyNV0sMTczMzpbNjQ0ODAsNjQ0ODFdLDE3MzQ6WzY0NDczLDY0NDc0XSwxNzM1Ols2NDQ3MSw2NDQ3Ml0sMTczNjpbNjQ0NzUsNjQ0NzZdLDE3Mzc6WzY0NDgyLDY0NDgzXSwxNzM5Ols2NDQ3OCw2NDQ3OV0sMTc0MDpbNjQ1MDgsNjQ1MDksNjQ1MTAsNjQ1MTFdLDE3NDQ6WzY0NDg0LDY0NDg1LDY0NDg2LDY0NDg3XSwxNzQ2Ols2NDQzMCw2NDQzMV0sMTc0NzpbNjQ0MzIsNjQ0MzNdfSxuPXs2NTI0Nzp7NjUxNTQ6NjUyNjksNjUxNTY6NjUyNzEsNjUxNjA6NjUyNzMsNjUxNjY6NjUyNzV9LDY1MjQ4Ons2NTE1NDo2NTI3MCw2NTE1Njo2NTI3Miw2NTE2MDo2NTI3NCw2NTE2Njo2NTI3Nn0sNjUxNjU6ezY1MjQ3Ons2NTI0ODp7NjUyNTg6NjUwMTB9fX0sMTYxNzp7MTYxMjo2NDYwNiwxNjEzOjY0NjA3LDE2MTQ6NjQ2MDgsMTYxNTo2NDYwOSwxNjE2OjY0NjEwfX0scj17MTYxMjo2NDYwNiwxNjEzOjY0NjA3LDE2MTQ6NjQ2MDgsMTYxNTo2NDYwOSwxNjE2OjY0NjEwfSxpPVsxNTcwLDE1NzEsMTU3MywxNTc1XTtlLl9fYXJhYmljUGFyc2VyX189e307dmFyIGE9ZS5fX2FyYWJpY1BhcnNlcl9fLmlzSW5BcmFiaWNTdWJzdGl0dXRpb25BPWZ1bmN0aW9uKGUpe3JldHVybiB0W2UuY2hhckNvZGVBdCgwKV0hPT12b2lkIDB9LG89ZS5fX2FyYWJpY1BhcnNlcl9fLmlzQXJhYmljTGV0dGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2AmJi9eW1x1MDYwMC1cdTA2RkZcdTA3NTAtXHUwNzdGXHUwOEEwLVx1MDhGRlx1RkI1MC1cdUZERkZcdUZFNzAtXHVGRUZGXSskLy50ZXN0KGUpfSxzPWUuX19hcmFiaWNQYXJzZXJfXy5pc0FyYWJpY0VuZExldHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKSYmYShlKSYmdFtlLmNoYXJDb2RlQXQoMCldLmxlbmd0aDw9Mn0sYz1lLl9fYXJhYmljUGFyc2VyX18uaXNBcmFiaWNBbGZMZXR0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkmJmkuaW5kZXhPZihlLmNoYXJDb2RlQXQoMCkpPj0wfTtlLl9fYXJhYmljUGFyc2VyX18uYXJhYmljTGV0dGVySGFzSXNvbGF0ZWRGb3JtPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpJiZhKGUpJiZ0W2UuY2hhckNvZGVBdCgwKV0ubGVuZ3RoPj0xfTt2YXIgbD1lLl9fYXJhYmljUGFyc2VyX18uYXJhYmljTGV0dGVySGFzRmluYWxGb3JtPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpJiZhKGUpJiZ0W2UuY2hhckNvZGVBdCgwKV0ubGVuZ3RoPj0yfTtlLl9fYXJhYmljUGFyc2VyX18uYXJhYmljTGV0dGVySGFzSW5pdGlhbEZvcm09ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkmJmEoZSkmJnRbZS5jaGFyQ29kZUF0KDApXS5sZW5ndGg+PTN9O3ZhciB1PWUuX19hcmFiaWNQYXJzZXJfXy5hcmFiaWNMZXR0ZXJIYXNNZWRpYWxGb3JtPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpJiZhKGUpJiZ0W2UuY2hhckNvZGVBdCgwKV0ubGVuZ3RoPT00fSxkPWUuX19hcmFiaWNQYXJzZXJfXy5yZXNvbHZlTGlnYXR1cmVzPWZ1bmN0aW9uKGUpe3ZhciB0PTAscj1uLGk9YGAsYT0wO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kz0xKXJbZS5jaGFyQ29kZUF0KHQpXT09PXZvaWQgMD8ocj1uLGkrPWUuY2hhckF0KHQtYSksdC09YSxhPTApOihhKyssdHlwZW9mKHI9cltlLmNoYXJDb2RlQXQodCldKT09YG51bWJlcmAmJihpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLHI9bixhPTApLHQ9PT1lLmxlbmd0aC0xJiYocj1uLGkrPWUuY2hhckF0KHQtKGEtMSkpLHQtPWEtMSxhPTApKTtyZXR1cm4gaX07ZS5fX2FyYWJpY1BhcnNlcl9fLmlzQXJhYmljRGlhY3JpdGljPWZ1bmN0aW9uKGUpe3JldHVybiBlIT09dm9pZCAwJiZyW2UuY2hhckNvZGVBdCgwKV0hPT12b2lkIDB9O3ZhciBmPWUuX19hcmFiaWNQYXJzZXJfXy5nZXRDb3JyZWN0Rm9ybT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG8oZSk/ITE9PT1hKGUpPy0xOiFsKGUpfHwhbyh0KSYmIW8obil8fCFvKG4pJiZzKHQpfHxzKGUpJiYhbyh0KXx8cyhlKSYmYyh0KXx8cyhlKSYmcyh0KT8wOnUoZSkmJm8odCkmJiFzKHQpJiZvKG4pJiZsKG4pPzM6cyhlKXx8IW8obik/MToyOi0xfSxwPWZ1bmN0aW9uKGUpe3ZhciBuPTAscj0wLGk9MCxhPWBgLHM9YGAsYz1gYCxsPShlfHw9YGApLnNwbGl0KGBcXHMrYCksdT1bXTtmb3Iobj0wO248bC5sZW5ndGg7bis9MSl7Zm9yKHUucHVzaChgYCkscj0wO3I8bFtuXS5sZW5ndGg7cis9MSlhPWxbbl1bcl0scz1sW25dW3ItMV0sYz1sW25dW3IrMV0sbyhhKT8oaT1mKGEscyxjKSx1W25dKz1pPT09LTE/YTpTdHJpbmcuZnJvbUNoYXJDb2RlKHRbYS5jaGFyQ29kZUF0KDApXVtpXSkpOnVbbl0rPWE7dVtuXT1kKHVbbl0pfXJldHVybiB1LmpvaW4oYCBgKX0sbT1lLl9fYXJhYmljUGFyc2VyX18ucHJvY2Vzc0FyYWJpYz1lLnByb2Nlc3NBcmFiaWM9ZnVuY3Rpb24oKXt2YXIgZSx0PXR5cGVvZiBhcmd1bWVudHNbMF09PWBzdHJpbmdgP2FyZ3VtZW50c1swXTphcmd1bWVudHNbMF0udGV4dCxuPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPTA7Zm9yKG49W10scj0wO3I8dC5sZW5ndGg7cis9MSlBcnJheS5pc0FycmF5KHRbcl0pP24ucHVzaChbcCh0W3JdWzBdKSx0W3JdWzFdLHRbcl1bMl1dKTpuLnB1c2goW3AodFtyXSldKTtlPW59ZWxzZSBlPXAodCk7cmV0dXJuIHR5cGVvZiBhcmd1bWVudHNbMF09PWBzdHJpbmdgP2U6KGFyZ3VtZW50c1swXS50ZXh0PWUsYXJndW1lbnRzWzBdKX07ZS5ldmVudHMucHVzaChbYHByZVByb2Nlc3NUZXh0YCxtXSl9KFouQVBJKSxaLkFQSS5hdXRvUHJpbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuKGV8fD17fSkudmFyaWFudD1lLnZhcmlhbnR8fGBub24tY29uZm9ybWAsZS52YXJpYW50PT09YGphdmFzY3JpcHRgP3RoaXMuYWRkSlMoYHByaW50KHt9KTtgKToodGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKGBwb3N0UHV0UmVzb3VyY2VzYCxmdW5jdGlvbigpe3Q9dGhpcy5pbnRlcm5hbC5uZXdPYmplY3QoKSx0aGlzLmludGVybmFsLm91dChgPDxgKSx0aGlzLmludGVybmFsLm91dChgL1MgL05hbWVkYCksdGhpcy5pbnRlcm5hbC5vdXQoYC9UeXBlIC9BY3Rpb25gKSx0aGlzLmludGVybmFsLm91dChgL04gL1ByaW50YCksdGhpcy5pbnRlcm5hbC5vdXQoYD4+YCksdGhpcy5pbnRlcm5hbC5vdXQoYGVuZG9iamApfSksdGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKGBwdXRDYXRhbG9nYCxmdW5jdGlvbigpe3RoaXMuaW50ZXJuYWwub3V0KGAvT3BlbkFjdGlvbiBgK3QrYCAwIFJgKX0pKSx0aGlzfSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe3ZhciBlPXZvaWQgMDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgcGRmYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbih0KXtlPXR9fSk7dmFyIHQ9MTUwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGB3aWR0aGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSl7dD1pc05hTihlKXx8ITE9PT1OdW1iZXIuaXNJbnRlZ2VyKGUpfHxlPDA/MTUwOmUsdGhpcy5nZXRDb250ZXh0KGAyZGApLnBhZ2VXcmFwWEVuYWJsZWQmJih0aGlzLmdldENvbnRleHQoYDJkYCkucGFnZVdyYXBYPXQrMSl9fSk7dmFyIG49MzAwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBoZWlnaHRgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sc2V0OmZ1bmN0aW9uKGUpe249aXNOYU4oZSl8fCExPT09TnVtYmVyLmlzSW50ZWdlcihlKXx8ZTwwPzMwMDplLHRoaXMuZ2V0Q29udGV4dChgMmRgKS5wYWdlV3JhcFlFbmFibGVkJiYodGhpcy5nZXRDb250ZXh0KGAyZGApLnBhZ2VXcmFwWT1uKzEpfX0pO3ZhciByPVtdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBjaGlsZE5vZGVzYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldDpmdW5jdGlvbihlKXtyPWV9fSk7dmFyIGk9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHN0eWxlYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHNldDpmdW5jdGlvbihlKXtpPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHBhcmVudE5vZGVgLHt9KX07dC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKChlfHw9YDJkYCkhPT1gMmRgKXJldHVybiBudWxsO2ZvcihuIGluIHQpdGhpcy5wZGYuY29udGV4dDJkLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5wZGYuY29udGV4dDJkW25dPXRbbl0pO3JldHVybiB0aGlzLnBkZi5jb250ZXh0MmQuX2NhbnZhcz10aGlzLHRoaXMucGRmLmNvbnRleHQyZH0sdC5wcm90b3R5cGUudG9EYXRhVVJMPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoYHRvRGF0YVVSTCBpcyBub3QgaW1wbGVtZW50ZWQuYCl9LGUuZXZlbnRzLnB1c2goW2Bpbml0aWFsaXplZGAsZnVuY3Rpb24oKXt0aGlzLmNhbnZhcz1uZXcgdCx0aGlzLmNhbnZhcy5wZGY9dGhpc31dKX0oWi5BUEkpLGZ1bmN0aW9uKGUpe3ZhciB0PXtsZWZ0OjAsdG9wOjAsYm90dG9tOjAscmlnaHQ6MH0sbj0hMSxyPWZ1bmN0aW9uKCl7dGhpcy5pbnRlcm5hbC5fX2NlbGxfXz09PXZvaWQgMCYmKHRoaXMuaW50ZXJuYWwuX19jZWxsX189e30sdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5wYWRkaW5nPTMsdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5oZWFkZXJGdW5jdGlvbj12b2lkIDAsdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5tYXJnaW5zPU9iamVjdC5hc3NpZ24oe30sdCksdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5tYXJnaW5zLndpZHRoPXRoaXMuZ2V0UGFnZVdpZHRoKCksaS5jYWxsKHRoaXMpKX0saT1mdW5jdGlvbigpe3RoaXMuaW50ZXJuYWwuX19jZWxsX18ubGFzdENlbGw9bmV3IGEsdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5wYWdlcz0xfSxhPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzWzBdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGB4YCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe2U9dH19KTt2YXIgdD1hcmd1bWVudHNbMV07T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHlgLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSl7dD1lfX0pO3ZhciBuPWFyZ3VtZW50c1syXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgd2lkdGhgLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufSxzZXQ6ZnVuY3Rpb24oZSl7bj1lfX0pO3ZhciByPWFyZ3VtZW50c1szXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgaGVpZ2h0YCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2V0OmZ1bmN0aW9uKGUpe3I9ZX19KTt2YXIgaT1hcmd1bWVudHNbNF07T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHRleHRgLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpfSxzZXQ6ZnVuY3Rpb24oZSl7aT1lfX0pO3ZhciBhPWFyZ3VtZW50c1s1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgbGluZU51bWJlcmAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlKXthPWV9fSk7dmFyIG89YXJndW1lbnRzWzZdO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgYWxpZ25gLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfSxzZXQ6ZnVuY3Rpb24oZSl7bz1lfX0pLHRoaXN9O2EucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhKHRoaXMueCx0aGlzLnksdGhpcy53aWR0aCx0aGlzLmhlaWdodCx0aGlzLnRleHQsdGhpcy5saW5lTnVtYmVyLHRoaXMuYWxpZ24pfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMueCx0aGlzLnksdGhpcy53aWR0aCx0aGlzLmhlaWdodCx0aGlzLnRleHQsdGhpcy5saW5lTnVtYmVyLHRoaXMuYWxpZ25dfSxlLnNldEhlYWRlckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiByLmNhbGwodGhpcyksdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5oZWFkZXJGdW5jdGlvbj10eXBlb2YgZT09YGZ1bmN0aW9uYD9lOnZvaWQgMCx0aGlzfSxlLmdldFRleHREaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7ci5jYWxsKHRoaXMpO3ZhciBuPSh0fHw9e30pLmZvbnRTaXplfHx0aGlzLmdldEZvbnRTaXplKCksaT10LmZvbnR8fHRoaXMuZ2V0Rm9udCgpLGE9dC5zY2FsZUZhY3Rvcnx8dGhpcy5pbnRlcm5hbC5zY2FsZUZhY3RvcixvPTAscz0wLGM9MCxsPXRoaXM7aWYoIUFycmF5LmlzQXJyYXkoZSkmJnR5cGVvZiBlIT1gc3RyaW5nYCl7aWYodHlwZW9mIGUhPWBudW1iZXJgKXRocm93IEVycm9yKGBnZXRUZXh0RGltZW5zaW9ucyBleHBlY3RzIHRleHQtcGFyYW1ldGVyIHRvIGJlIG9mIHR5cGUgU3RyaW5nIG9yIHR5cGUgTnVtYmVyIG9yIGFuIEFycmF5IG9mIFN0cmluZ3MuYCk7ZT1TdHJpbmcoZSl9dmFyIHU9dC5tYXhXaWR0aDt1PjA/dHlwZW9mIGU9PWBzdHJpbmdgP2U9dGhpcy5zcGxpdFRleHRUb1NpemUoZSx1KTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT1gW29iamVjdCBBcnJheV1gJiYoZT1lLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdChsLnNwbGl0VGV4dFRvU2l6ZSh0LHUpKX0sW10pKTplPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKHZhciBkPTA7ZDxlLmxlbmd0aDtkKyspbzwoYz10aGlzLmdldFN0cmluZ1VuaXRXaWR0aChlW2RdLHtmb250Oml9KSpuKSYmKG89Yyk7cmV0dXJuIG8hPT0wJiYocz1lLmxlbmd0aCkse3c6by89YSxoOk1hdGgubWF4KChzKm4qdGhpcy5nZXRMaW5lSGVpZ2h0RmFjdG9yKCktbioodGhpcy5nZXRMaW5lSGVpZ2h0RmFjdG9yKCktMSkpL2EsMCl9fSxlLmNlbGxBZGRQYWdlPWZ1bmN0aW9uKCl7ci5jYWxsKHRoaXMpLHRoaXMuYWRkUGFnZSgpO3ZhciBlPXRoaXMuaW50ZXJuYWwuX19jZWxsX18ubWFyZ2luc3x8dDtyZXR1cm4gdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5sYXN0Q2VsbD1uZXcgYShlLmxlZnQsZS50b3Asdm9pZCAwLHZvaWQgMCksdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5wYWdlcys9MSx0aGlzfTt2YXIgbz1lLmNlbGw9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHNbMF1pbnN0YW5jZW9mIGE/YXJndW1lbnRzWzBdOm5ldyBhKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdLGFyZ3VtZW50c1s2XSk7ci5jYWxsKHRoaXMpO3ZhciBpPXRoaXMuaW50ZXJuYWwuX19jZWxsX18ubGFzdENlbGwsbz10aGlzLmludGVybmFsLl9fY2VsbF9fLnBhZGRpbmcscz10aGlzLmludGVybmFsLl9fY2VsbF9fLm1hcmdpbnN8fHQsYz10aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlSGVhZGVyUm93LGw9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5wcmludEhlYWRlcnM7cmV0dXJuIGkubGluZU51bWJlciE9PXZvaWQgMCYmKGkubGluZU51bWJlcj09PWUubGluZU51bWJlcj8oZS54PShpLnh8fDApKyhpLndpZHRofHwwKSxlLnk9aS55fHwwKTppLnkraS5oZWlnaHQrZS5oZWlnaHQrcy5ib3R0b20+dGhpcy5nZXRQYWdlSGVpZ2h0KCk/KHRoaXMuY2VsbEFkZFBhZ2UoKSxlLnk9cy50b3AsbCYmYyYmKHRoaXMucHJpbnRIZWFkZXJSb3coZS5saW5lTnVtYmVyLCEwKSxlLnkrPWNbMF0uaGVpZ2h0KSk6ZS55PWkueStpLmhlaWdodHx8ZS55KSxlLnRleHRbMF0hPT12b2lkIDAmJih0aGlzLnJlY3QoZS54LGUueSxlLndpZHRoLGUuaGVpZ2h0LCEwPT09bj9gRkRgOnZvaWQgMCksZS5hbGlnbj09PWByaWdodGA/dGhpcy50ZXh0KGUudGV4dCxlLngrZS53aWR0aC1vLGUueStvLHthbGlnbjpgcmlnaHRgLGJhc2VsaW5lOmB0b3BgfSk6ZS5hbGlnbj09PWBjZW50ZXJgP3RoaXMudGV4dChlLnRleHQsZS54K2Uud2lkdGgvMixlLnkrbyx7YWxpZ246YGNlbnRlcmAsYmFzZWxpbmU6YHRvcGAsbWF4V2lkdGg6ZS53aWR0aC1vLW99KTp0aGlzLnRleHQoZS50ZXh0LGUueCtvLGUueStvLHthbGlnbjpgbGVmdGAsYmFzZWxpbmU6YHRvcGAsbWF4V2lkdGg6ZS53aWR0aC1vLW99KSksdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5sYXN0Q2VsbD1lLHRoaXN9O2UudGFibGU9ZnVuY3Rpb24oZSxuLGMsbCx1KXtpZihyLmNhbGwodGhpcyksIWMpdGhyb3cgRXJyb3IoYE5vIGRhdGEgZm9yIFBERiB0YWJsZS5gKTt2YXIgZCxmLHAsbSxoPVtdLGc9W10sXz1bXSx2PXt9LHk9e30sYj1bXSx4PVtdLFM9KHV8fD17fSkuYXV0b1NpemV8fCExLEM9ITEhPT11LnByaW50SGVhZGVycyx3PXUuY3NzJiZ1LmNzc1tgZm9udC1zaXplYF0hPT12b2lkIDA/MTYqdS5jc3NbYGZvbnQtc2l6ZWBdOnUuZm9udFNpemV8fDEyLFQ9dS5tYXJnaW5zfHxPYmplY3QuYXNzaWduKHt3aWR0aDp0aGlzLmdldFBhZ2VXaWR0aCgpfSx0KSxFPXR5cGVvZiB1LnBhZGRpbmc9PWBudW1iZXJgP3UucGFkZGluZzozLEQ9dS5oZWFkZXJCYWNrZ3JvdW5kQ29sb3J8fGAjYzhjOGM4YCxPPXUuaGVhZGVyVGV4dENvbG9yfHxgIzAwMGA7aWYoaS5jYWxsKHRoaXMpLHRoaXMuaW50ZXJuYWwuX19jZWxsX18ucHJpbnRIZWFkZXJzPUMsdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5tYXJnaW5zPVQsdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy50YWJsZV9mb250X3NpemU9dyx0aGlzLmludGVybmFsLl9fY2VsbF9fLnBhZGRpbmc9RSx0aGlzLmludGVybmFsLl9fY2VsbF9fLmhlYWRlckJhY2tncm91bmRDb2xvcj1ELHRoaXMuaW50ZXJuYWwuX19jZWxsX18uaGVhZGVyVGV4dENvbG9yPU8sdGhpcy5zZXRGb250U2l6ZSh3KSxsPT1udWxsKWc9aD1PYmplY3Qua2V5cyhjWzBdKSxfPWgubWFwKGZ1bmN0aW9uKCl7cmV0dXJuYGxlZnRgfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGwpJiZBKGxbMF0pPT09YG9iamVjdGApZm9yKGg9bC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pLGc9bC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvbXB0fHxlLm5hbWV8fGBgfSksXz1sLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5hbGlnbnx8YGxlZnRgfSksZD0wO2Q8bC5sZW5ndGg7ZCs9MSl5W2xbZF0ubmFtZV09Ljc0OTk5OTA1NTExODExMDMqbFtkXS53aWR0aDtlbHNlIEFycmF5LmlzQXJyYXkobCkmJnR5cGVvZiBsWzBdPT1gc3RyaW5nYCYmKGc9aD1sLF89aC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5gbGVmdGB9KSk7aWYoU3x8QXJyYXkuaXNBcnJheShsKSYmdHlwZW9mIGxbMF09PWBzdHJpbmdgKWZvcihkPTA7ZDxoLmxlbmd0aDtkKz0xKXtmb3IodlttPWhbZF1dPWMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW21dfSksdGhpcy5zZXRGb250KHZvaWQgMCxgYm9sZGApLGIucHVzaCh0aGlzLmdldFRleHREaW1lbnNpb25zKGdbZF0se2ZvbnRTaXplOnRoaXMuaW50ZXJuYWwuX19jZWxsX18udGFibGVfZm9udF9zaXplLHNjYWxlRmFjdG9yOnRoaXMuaW50ZXJuYWwuc2NhbGVGYWN0b3J9KS53KSxmPXZbbV0sdGhpcy5zZXRGb250KHZvaWQgMCxgbm9ybWFsYCkscD0wO3A8Zi5sZW5ndGg7cCs9MSliLnB1c2godGhpcy5nZXRUZXh0RGltZW5zaW9ucyhmW3BdLHtmb250U2l6ZTp0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlX2ZvbnRfc2l6ZSxzY2FsZUZhY3Rvcjp0aGlzLmludGVybmFsLnNjYWxlRmFjdG9yfSkudyk7eVttXT1NYXRoLm1heC5hcHBseShudWxsLGIpK0UrRSxiPVtdfWlmKEMpe3ZhciBrPXt9O2ZvcihkPTA7ZDxoLmxlbmd0aDtkKz0xKWtbaFtkXV09e30sa1toW2RdXS50ZXh0PWdbZF0sa1toW2RdXS5hbGlnbj1fW2RdO3ZhciBqPXMuY2FsbCh0aGlzLGsseSk7eD1oLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoZSxuLHlbdF0saixrW3RdLnRleHQsdm9pZCAwLGtbdF0uYWxpZ24pfSksdGhpcy5zZXRUYWJsZUhlYWRlclJvdyh4KSx0aGlzLnByaW50SGVhZGVyUm93KDEsITEpfXZhciBNPWwucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdC5uYW1lXT10LmFsaWduLGV9LHt9KTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCs9MSl7YHJvd1N0YXJ0YGluIHUmJnUucm93U3RhcnQgaW5zdGFuY2VvZiBGdW5jdGlvbiYmdS5yb3dTdGFydCh7cm93OmQsZGF0YTpjW2RdfSx0aGlzKTt2YXIgTj1zLmNhbGwodGhpcyxjW2RdLHkpO2ZvcihwPTA7cDxoLmxlbmd0aDtwKz0xKXt2YXIgUD1jW2RdW2hbcF1dO2BjZWxsU3RhcnRgaW4gdSYmdS5jZWxsU3RhcnQgaW5zdGFuY2VvZiBGdW5jdGlvbiYmdS5jZWxsU3RhcnQoe3JvdzpkLGNvbDpwLGRhdGE6UH0sdGhpcyksby5jYWxsKHRoaXMsbmV3IGEoZSxuLHlbaFtwXV0sTixQLGQrMixNW2hbcF1dKSl9fXJldHVybiB0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlX3g9ZSx0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlX3k9bix0aGlzfTt2YXIgcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuaW50ZXJuYWwuX19jZWxsX18ucGFkZGluZyxyPXRoaXMuaW50ZXJuYWwuX19jZWxsX18udGFibGVfZm9udF9zaXplLGk9dGhpcy5pbnRlcm5hbC5zY2FsZUZhY3RvcjtyZXR1cm4gT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHIpe3ZhciBpPWVbcl07cmV0dXJuIHRoaXMuc3BsaXRUZXh0VG9TaXplKGkuaGFzT3duUHJvcGVydHkoYHRleHRgKT9pLnRleHQ6aSx0W3JdLW4tbil9LHRoaXMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRMaW5lSGVpZ2h0RmFjdG9yKCkqZS5sZW5ndGgqci9pK24rbn0sdGhpcykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdCl9LDApfTtlLnNldFRhYmxlSGVhZGVyUm93PWZ1bmN0aW9uKGUpe3IuY2FsbCh0aGlzKSx0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlSGVhZGVyUm93PWV9LGUucHJpbnRIZWFkZXJSb3c9ZnVuY3Rpb24oZSx0KXtpZihyLmNhbGwodGhpcyksIXRoaXMuaW50ZXJuYWwuX19jZWxsX18udGFibGVIZWFkZXJSb3cpdGhyb3cgRXJyb3IoYFByb3BlcnR5IHRhYmxlSGVhZGVyUm93IGRvZXMgbm90IGV4aXN0LmApO3ZhciBpO2lmKG49ITAsdHlwZW9mIHRoaXMuaW50ZXJuYWwuX19jZWxsX18uaGVhZGVyRnVuY3Rpb249PWBmdW5jdGlvbmApe3ZhciBzPXRoaXMuaW50ZXJuYWwuX19jZWxsX18uaGVhZGVyRnVuY3Rpb24odGhpcyx0aGlzLmludGVybmFsLl9fY2VsbF9fLnBhZ2VzKTt0aGlzLmludGVybmFsLl9fY2VsbF9fLmxhc3RDZWxsPW5ldyBhKHNbMF0sc1sxXSxzWzJdLHNbM10sdm9pZCAwLC0xKX10aGlzLnNldEZvbnQodm9pZCAwLGBib2xkYCk7Zm9yKHZhciBjPVtdLGw9MDtsPHRoaXMuaW50ZXJuYWwuX19jZWxsX18udGFibGVIZWFkZXJSb3cubGVuZ3RoO2wrPTEpe2k9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy50YWJsZUhlYWRlclJvd1tsXS5jbG9uZSgpLHQmJihpLnk9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5tYXJnaW5zLnRvcHx8MCxjLnB1c2goaSkpLGkubGluZU51bWJlcj1lO3ZhciB1PXRoaXMuZ2V0VGV4dENvbG9yKCk7dGhpcy5zZXRUZXh0Q29sb3IodGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5oZWFkZXJUZXh0Q29sb3IpLHRoaXMuc2V0RmlsbENvbG9yKHRoaXMuaW50ZXJuYWwuX19jZWxsX18uaGVhZGVyQmFja2dyb3VuZENvbG9yKSxvLmNhbGwodGhpcyxpKSx0aGlzLnNldFRleHRDb2xvcih1KX1jLmxlbmd0aD4wJiZ0aGlzLnNldFRhYmxlSGVhZGVyUm93KGMpLHRoaXMuc2V0Rm9udCh2b2lkIDAsYG5vcm1hbGApLG49ITF9fShaLkFQSSksTmc9e2l0YWxpYzpbYGl0YWxpY2AsYG9ibGlxdWVgLGBub3JtYWxgXSxvYmxpcXVlOltgb2JsaXF1ZWAsYGl0YWxpY2AsYG5vcm1hbGBdLG5vcm1hbDpbYG5vcm1hbGAsYG9ibGlxdWVgLGBpdGFsaWNgXX0sUGc9W2B1bHRyYS1jb25kZW5zZWRgLGBleHRyYS1jb25kZW5zZWRgLGBjb25kZW5zZWRgLGBzZW1pLWNvbmRlbnNlZGAsYG5vcm1hbGAsYHNlbWktZXhwYW5kZWRgLGBleHBhbmRlZGAsYGV4dHJhLWV4cGFuZGVkYCxgdWx0cmEtZXhwYW5kZWRgXSxGZz1waChQZyksSWc9WzEwMCwyMDAsMzAwLDQwMCw1MDAsNjAwLDcwMCw4MDAsOTAwXSxMZz1waChJZyksUmc9eyJzYW5zLXNlcmlmIjpgaGVsdmV0aWNhYCxmaXhlZDpgY291cmllcmAsbW9ub3NwYWNlOmBjb3VyaWVyYCx0ZXJtaW5hbDpgY291cmllcmAsY3Vyc2l2ZTpgdGltZXNgLGZhbnRhc3k6YHRpbWVzYCxzZXJpZjpgdGltZXNgfSx6Zz17Y2FwdGlvbjpgdGltZXNgLGljb246YHRpbWVzYCxtZW51OmB0aW1lc2AsIm1lc3NhZ2UtYm94IjpgdGltZXNgLCJzbWFsbC1jYXB0aW9uIjpgdGltZXNgLCJzdGF0dXMtYmFyIjpgdGltZXNgfSxHZz1bYHRpbWVzYF0sKGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbyxzLGMsbCx1PWZ1bmN0aW9uKGUpe3JldHVybiBlfHw9e30sdGhpcy5pc1N0cm9rZVRyYW5zcGFyZW50PWUuaXNTdHJva2VUcmFuc3BhcmVudHx8ITEsdGhpcy5zdHJva2VPcGFjaXR5PWUuc3Ryb2tlT3BhY2l0eXx8MSx0aGlzLnN0cm9rZVN0eWxlPWUuc3Ryb2tlU3R5bGV8fGAjMDAwMDAwYCx0aGlzLmZpbGxTdHlsZT1lLmZpbGxTdHlsZXx8YCMwMDAwMDBgLHRoaXMuaXNGaWxsVHJhbnNwYXJlbnQ9ZS5pc0ZpbGxUcmFuc3BhcmVudHx8ITEsdGhpcy5maWxsT3BhY2l0eT1lLmZpbGxPcGFjaXR5fHwxLHRoaXMuZm9udD1lLmZvbnR8fGAxMHB4IHNhbnMtc2VyaWZgLHRoaXMudGV4dEJhc2VsaW5lPWUudGV4dEJhc2VsaW5lfHxgYWxwaGFiZXRpY2AsdGhpcy50ZXh0QWxpZ249ZS50ZXh0QWxpZ258fGBsZWZ0YCx0aGlzLmxpbmVXaWR0aD1lLmxpbmVXaWR0aHx8MSx0aGlzLmxpbmVKb2luPWUubGluZUpvaW58fGBtaXRlcmAsdGhpcy5saW5lQ2FwPWUubGluZUNhcHx8YGJ1dHRgLHRoaXMucGF0aD1lLnBhdGh8fFtdLHRoaXMudHJhbnNmb3JtPWUudHJhbnNmb3JtPT09dm9pZCAwP25ldyBjOmUudHJhbnNmb3JtLmNsb25lKCksdGhpcy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb258fGBub3JtYWxgLHRoaXMuZ2xvYmFsQWxwaGE9ZS5nbG9iYWxBbHBoYXx8MSx0aGlzLmNsaXBfcGF0aD1lLmNsaXBfcGF0aHx8W10sdGhpcy5jdXJyZW50UG9pbnQ9ZS5jdXJyZW50UG9pbnR8fG5ldyBvLHRoaXMubWl0ZXJMaW1pdD1lLm1pdGVyTGltaXR8fDEwLHRoaXMubGFzdFBvaW50PWUubGFzdFBvaW50fHxuZXcgbyx0aGlzLmxpbmVEYXNoT2Zmc2V0PWUubGluZURhc2hPZmZzZXR8fDAsdGhpcy5saW5lRGFzaD1lLmxpbmVEYXNofHxbXSx0aGlzLm1hcmdpbj1lLm1hcmdpbnx8WzAsMCwwLDBdLHRoaXMucHJldlBhZ2VMYXN0RWxlbU9mZnNldD1lLnByZXZQYWdlTGFzdEVsZW1PZmZzZXR8fDAsdGhpcy5pZ25vcmVDbGVhclJlY3Q9dHlwZW9mIGUuaWdub3JlQ2xlYXJSZWN0IT1gYm9vbGVhbmB8fGUuaWdub3JlQ2xlYXJSZWN0LHRoaXN9O2UuZXZlbnRzLnB1c2goW2Bpbml0aWFsaXplZGAsZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQyZD1uZXcgZCh0aGlzKSx0PXRoaXMuaW50ZXJuYWwuZjIsbj10aGlzLmludGVybmFsLmdldENvb3JkaW5hdGVTdHJpbmcscj10aGlzLmludGVybmFsLmdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZyxpPXRoaXMuaW50ZXJuYWwuZ2V0SG9yaXpvbnRhbENvb3JkaW5hdGUsYT10aGlzLmludGVybmFsLmdldFZlcnRpY2FsQ29vcmRpbmF0ZSxvPXRoaXMuaW50ZXJuYWwuUG9pbnQscz10aGlzLmludGVybmFsLlJlY3RhbmdsZSxjPXRoaXMuaW50ZXJuYWwuTWF0cml4LGw9bmV3IHV9XSk7dmFyIGQ9ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGNhbnZhc2Ase2dldDpmdW5jdGlvbigpe3JldHVybntwYXJlbnROb2RlOiExLHN0eWxlOiExfX19KTt2YXIgdD1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBwZGZgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH19KTt2YXIgbj0hMTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgcGFnZVdyYXBYRW5hYmxlZGAse2dldDpmdW5jdGlvbigpe3JldHVybiBufSxzZXQ6ZnVuY3Rpb24oZSl7bj0hIWV9fSk7dmFyIHI9ITE7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHBhZ2VXcmFwWUVuYWJsZWRgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2V0OmZ1bmN0aW9uKGUpe3I9ISFlfX0pO3ZhciBpPTA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHBvc1hgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sc2V0OmZ1bmN0aW9uKGUpe2lzTmFOKGUpfHwoaT1lKX19KTt2YXIgYT0wO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBwb3NZYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlKXtpc05hTihlKXx8KGE9ZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYG1hcmdpbmAse2dldDpmdW5jdGlvbigpe3JldHVybiBsLm1hcmdpbn0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3R5cGVvZiBlPT1gbnVtYmVyYD90PVtlLGUsZSxlXTooKHQ9WywsLCxdKVswXT1lWzBdLHRbMV09ZS5sZW5ndGg+PTI/ZVsxXTp0WzBdLHRbMl09ZS5sZW5ndGg+PTM/ZVsyXTp0WzBdLHRbM109ZS5sZW5ndGg+PTQ/ZVszXTp0WzFdKSxsLm1hcmdpbj10fX0pO3ZhciBvPSExO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBhdXRvUGFnaW5nYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNldDpmdW5jdGlvbihlKXtvPWV9fSk7dmFyIHM9MDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgbGFzdEJyZWFrYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtzPWV9fSk7dmFyIGM9W107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHBhZ2VCcmVha3NgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY30sc2V0OmZ1bmN0aW9uKGUpe2M9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgY3R4YCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgdSYmKGw9ZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHBhdGhgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5wYXRofSxzZXQ6ZnVuY3Rpb24oZSl7bC5wYXRoPWV9fSk7dmFyIGQ9W107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGN0eFN0YWNrYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHNldDpmdW5jdGlvbihlKXtkPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGZpbGxTdHlsZWAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5maWxsU3R5bGV9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1mKGUpO3RoaXMuY3R4LmZpbGxTdHlsZT10LnN0eWxlLHRoaXMuY3R4LmlzRmlsbFRyYW5zcGFyZW50PXQuYT09PTAsdGhpcy5jdHguZmlsbE9wYWNpdHk9dC5hLHRoaXMucGRmLnNldEZpbGxDb2xvcih0LnIsdC5nLHQuYix7YTp0LmF9KSx0aGlzLnBkZi5zZXRUZXh0Q29sb3IodC5yLHQuZyx0LmIse2E6dC5hfSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHN0cm9rZVN0eWxlYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LnN0cm9rZVN0eWxlfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTt0aGlzLmN0eC5zdHJva2VTdHlsZT10LnN0eWxlLHRoaXMuY3R4LmlzU3Ryb2tlVHJhbnNwYXJlbnQ9dC5hPT09MCx0aGlzLmN0eC5zdHJva2VPcGFjaXR5PXQuYSx0LmE9PT0wP3RoaXMucGRmLnNldERyYXdDb2xvcigyNTUsMjU1LDI1NSk6KHQuYSx0aGlzLnBkZi5zZXREcmF3Q29sb3IodC5yLHQuZyx0LmIpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgbGluZUNhcGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5saW5lQ2FwfSxzZXQ6ZnVuY3Rpb24oZSl7W2BidXR0YCxgcm91bmRgLGBzcXVhcmVgXS5pbmRleE9mKGUpIT09LTEmJih0aGlzLmN0eC5saW5lQ2FwPWUsdGhpcy5wZGYuc2V0TGluZUNhcChlKSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGxpbmVXaWR0aGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5saW5lV2lkdGh9LHNldDpmdW5jdGlvbihlKXtpc05hTihlKXx8KHRoaXMuY3R4LmxpbmVXaWR0aD1lLHRoaXMucGRmLnNldExpbmVXaWR0aChlKSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGxpbmVKb2luYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmxpbmVKb2lufSxzZXQ6ZnVuY3Rpb24oZSl7W2BiZXZlbGAsYHJvdW5kYCxgbWl0ZXJgXS5pbmRleE9mKGUpIT09LTEmJih0aGlzLmN0eC5saW5lSm9pbj1lLHRoaXMucGRmLnNldExpbmVKb2luKGUpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgbWl0ZXJMaW1pdGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5taXRlckxpbWl0fSxzZXQ6ZnVuY3Rpb24oZSl7aXNOYU4oZSl8fCh0aGlzLmN0eC5taXRlckxpbWl0PWUsdGhpcy5wZGYuc2V0TWl0ZXJMaW1pdChlKSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYHRleHRCYXNlbGluZWAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC50ZXh0QmFzZWxpbmV9LHNldDpmdW5jdGlvbihlKXt0aGlzLmN0eC50ZXh0QmFzZWxpbmU9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgdGV4dEFsaWduYCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LnRleHRBbGlnbn0sc2V0OmZ1bmN0aW9uKGUpe1tgcmlnaHRgLGBlbmRgLGBjZW50ZXJgLGBsZWZ0YCxgc3RhcnRgXS5pbmRleE9mKGUpIT09LTEmJih0aGlzLmN0eC50ZXh0QWxpZ249ZSl9fSk7dmFyIHA9bnVsbCxtPW51bGwsaD1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBmb250RmFjZXNgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGUpe3A9bnVsbCxtPW51bGwsaD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBmb250YCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmZvbnR9LHNldDpmdW5jdGlvbihlKXt2YXIgdDtpZih0aGlzLmN0eC5mb250PWUsKHQ9L15ccyooPz0oPzooPzpbLWEtel0rXHMqKXswLDJ9KGl0YWxpY3xvYmxpcXVlKSk/KSg/PSg/Oig/OlstYS16XStccyopezAsMn0oc21hbGwtY2FwcykpPykoPz0oPzooPzpbLWEtel0rXHMqKXswLDJ9KGJvbGQoPzplcik/fGxpZ2h0ZXJ8WzEtOV0wMCkpPykoPzooPzpub3JtYWx8XDF8XDJ8XDMpXHMqKXswLDN9KCg/Onh4Py0pPyg/OnNtYWxsfGxhcmdlKXxtZWRpdW18c21hbGxlcnxsYXJnZXJ8Wy5cZF0rKD86XCV8aW58W2NlbV1tfGV4fHBbY3R4XSkpKD86XHMqXC9ccyoobm9ybWFsfFsuXGRdKyg/OlwlfGlufFtjZW1dbXxleHxwW2N0eF0pKSk/XHMqKFstXyxcIlwnXHNhLXowLTldKz8pXHMqJC9pLmV4ZWMoZSkpIT09bnVsbCl7dmFyIG49dFsxXTt0WzJdO3ZhciByPXRbM10saT10WzRdO3RbNV07dmFyIGE9dFs2XSxvPS9eKFsuXGRdKykoKD86JXxpbnxbY2VtXW18ZXh8cFtjdHhdKSkkL2kuZXhlYyhpKVsyXTtpPU1hdGguZmxvb3Iobz09PWBweGA/cGFyc2VGbG9hdChpKSp0aGlzLnBkZi5pbnRlcm5hbC5zY2FsZUZhY3RvcjpvPT09YGVtYD9wYXJzZUZsb2F0KGkpKnRoaXMucGRmLmdldEZvbnRTaXplKCk6cGFyc2VGbG9hdChpKSp0aGlzLnBkZi5pbnRlcm5hbC5zY2FsZUZhY3RvciksdGhpcy5wZGYuc2V0Rm9udFNpemUoaSk7dmFyIHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVtdLGk9ZS50cmltKCk7aWYoaT09PWBgKXJldHVybiBHZztpZihpIGluIHpnKXJldHVyblt6Z1tpXV07Zm9yKDtpIT09YGA7KXtzd2l0Y2gobj1udWxsLHQ9KGk9X2goaSkpLmNoYXJBdCgwKSl7Y2FzZWAiYDpjYXNlYCdgOm49dmgoaS5zdWJzdHJpbmcoMSksdCk7YnJlYWs7ZGVmYXVsdDpuPXloKGkpfWlmKG49PT1udWxsfHwoci5wdXNoKG5bMF0pLChpPV9oKG5bMV0pKSE9PWBgJiZpLmNoYXJBdCgwKSE9PWAsYCkpcmV0dXJuIEdnO2k9aS5yZXBsYWNlKC9eLC8sYGApfXJldHVybiByfShhKTtpZih0aGlzLmZvbnRGYWNlcyl7dmFyIGM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0obnx8PXt9KS5kZWZhdWx0Rm9udEZhbWlseXx8YHRpbWVzYCxpPU9iamVjdC5hc3NpZ24oe30sUmcsbi5nZW5lcmljRm9udEZhbWlsaWVzfHx7fSksYT1udWxsLG89bnVsbCxzPTA7czx0Lmxlbmd0aDsrK3MpaWYoaVsoYT1taCh0W3NdKSkuZmFtaWx5XSYmKGEuZmFtaWx5PWlbYS5mYW1pbHldKSxlLmhhc093blByb3BlcnR5KGEuZmFtaWx5KSl7bz1lW2EuZmFtaWx5XTticmVha31pZighKG98fD1lW3JdKSl0aHJvdyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBmb250LWZhbWlseSBmb3IgdGhlIHJ1bGUgJ2ArZ2goYSkrYCcgYW5kIGRlZmF1bHQgZmFtaWx5ICdgK3IrYCcuYCk7aWYobz1mdW5jdGlvbihlLHQpe2lmKHRbZV0pcmV0dXJuIHRbZV07dmFyIG49RmdbZV0scj1oaCh0LFBnLG4sbjw9Rmcubm9ybWFsPy0xOjEpO2lmKCFyKXRocm93IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIGZvbnQtc3RyZXRjaCB2YWx1ZSBmb3IgYCtlKTtyZXR1cm4gcn0oYS5zdHJldGNoLG8pLG89ZnVuY3Rpb24oZSx0KXtpZih0W2VdKXJldHVybiB0W2VdO2Zvcih2YXIgbj1OZ1tlXSxyPTA7cjxuLmxlbmd0aDsrK3IpaWYodFtuW3JdXSlyZXR1cm4gdFtuW3JdXTt0aHJvdyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyBmb250LXN0eWxlIGZvciBgK2UpfShhLnN0eWxlLG8pLCEobz1mdW5jdGlvbihlLHQpe2lmKHRbZV0pcmV0dXJuIHRbZV07aWYoZT09PTQwMCYmdFs1MDBdKXJldHVybiB0WzUwMF07aWYoZT09PTUwMCYmdFs0MDBdKXJldHVybiB0WzQwMF07dmFyIG49TGdbZV0scj1oaCh0LElnLG4sZTw0MDA/LTE6MSk7aWYoIXIpdGhyb3cgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgbWF0Y2hpbmcgZm9udC13ZWlnaHQgZm9yIHZhbHVlIGArZSk7cmV0dXJuIHJ9KGEud2VpZ2h0LG8pKSl0aHJvdyBFcnJvcihgRmFpbGVkIHRvIHJlc29sdmUgYSBmb250IGZvciB0aGUgcnVsZSAnYCtnaChhKStgJy5gKTtyZXR1cm4gb30oZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldEZvbnRMaXN0KCkscj1KU09OLnN0cmluZ2lmeShuKTtyZXR1cm4ocD09PW51bGx8fG0hPT1yKSYmKHA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXt9LG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHI9bWgoZVtuXSksaT1yLmZhbWlseSxhPXIuc3RyZXRjaCxvPXIuc3R5bGUscz1yLndlaWdodDt0W2ldPXRbaV18fHt9LHRbaV1bYV09dFtpXVthXXx8e30sdFtpXVthXVtvXT10W2ldW2FdW29dfHx7fSx0W2ldW2FdW29dW3NdPXJ9cmV0dXJuIHR9KGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1udWxsO3N3aXRjaChlKXtjYXNlYGJvbGRgOnI9e2ZhbWlseTpuLHdlaWdodDpgYm9sZGB9O2JyZWFrO2Nhc2VgaXRhbGljYDpyPXtmYW1pbHk6bixzdHlsZTpgaXRhbGljYH07YnJlYWs7Y2FzZWBib2xkaXRhbGljYDpyPXtmYW1pbHk6bix3ZWlnaHQ6YGJvbGRgLHN0eWxlOmBpdGFsaWNgfTticmVhaztjYXNlYGA6Y2FzZWBub3JtYWxgOnI9e2ZhbWlseTpufX1yIT09bnVsbCYmKHIucmVmPXtuYW1lOm4sc3R5bGU6ZX0sdC5wdXNoKHIpKX0pfSksdH0obikuY29uY2F0KHQpKSxtPXIpLHB9KHRoaXMucGRmLHRoaXMuZm9udEZhY2VzKSxzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57ZmFtaWx5OmUsc3RyZXRjaDpgbm9ybWFsYCx3ZWlnaHQ6cixzdHlsZTpufX0pKTt0aGlzLnBkZi5zZXRGb250KGMucmVmLm5hbWUsYy5yZWYuc3R5bGUpfWVsc2V7dmFyIGw9YGA7KHI9PT1gYm9sZGB8fHBhcnNlSW50KHIsMTApPj03MDB8fG49PT1gYm9sZGApJiYobD1gYm9sZGApLG49PT1gaXRhbGljYCYmKGwrPWBpdGFsaWNgKSxsLmxlbmd0aD09PTAmJihsPWBub3JtYWxgKTtmb3IodmFyIHU9YGAsZD17YXJpYWw6YEhlbHZldGljYWAsQXJpYWw6YEhlbHZldGljYWAsdmVyZGFuYTpgSGVsdmV0aWNhYCxWZXJkYW5hOmBIZWx2ZXRpY2FgLGhlbHZldGljYTpgSGVsdmV0aWNhYCxIZWx2ZXRpY2E6YEhlbHZldGljYWAsInNhbnMtc2VyaWYiOmBIZWx2ZXRpY2FgLGZpeGVkOmBDb3VyaWVyYCxtb25vc3BhY2U6YENvdXJpZXJgLHRlcm1pbmFsOmBDb3VyaWVyYCxjdXJzaXZlOmBUaW1lc2AsZmFudGFzeTpgVGltZXNgLHNlcmlmOmBUaW1lc2B9LGY9MDtmPHMubGVuZ3RoO2YrKyl7aWYodGhpcy5wZGYuaW50ZXJuYWwuZ2V0Rm9udChzW2ZdLGwse25vRmFsbGJhY2s6ITAsZGlzYWJsZVdhcm5pbmc6ITB9KSE9PXZvaWQgMCl7dT1zW2ZdO2JyZWFrfWlmKGw9PT1gYm9sZGl0YWxpY2AmJnRoaXMucGRmLmludGVybmFsLmdldEZvbnQoc1tmXSxgYm9sZGAse25vRmFsbGJhY2s6ITAsZGlzYWJsZVdhcm5pbmc6ITB9KSE9PXZvaWQgMCl1PXNbZl0sbD1gYm9sZGA7ZWxzZSBpZih0aGlzLnBkZi5pbnRlcm5hbC5nZXRGb250KHNbZl0sYG5vcm1hbGAse25vRmFsbGJhY2s6ITAsZGlzYWJsZVdhcm5pbmc6ITB9KSE9PXZvaWQgMCl7dT1zW2ZdLGw9YG5vcm1hbGA7YnJlYWt9fWlmKHU9PT1gYCl7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspaWYoZFtzW2hdXSl7dT1kW3NbaF1dO2JyZWFrfX11PXU9PT1gYD9gVGltZXNgOnUsdGhpcy5wZGYuc2V0Rm9udCh1LGwpfX19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbmAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb259LHNldDpmdW5jdGlvbihlKXt0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxgZ2xvYmFsQWxwaGFgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2xvYmFsQWxwaGF9LHNldDpmdW5jdGlvbihlKXt0aGlzLmN0eC5nbG9iYWxBbHBoYT1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBsaW5lRGFzaE9mZnNldGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5saW5lRGFzaE9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuY3R4LmxpbmVEYXNoT2Zmc2V0PWUsUi5jYWxsKHRoaXMpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBsaW5lRGFzaGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5saW5lRGFzaH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuY3R4LmxpbmVEYXNoPWUsUi5jYWxsKHRoaXMpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGBpZ25vcmVDbGVhclJlY3RgLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguaWdub3JlQ2xlYXJSZWN0fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5jdHguaWdub3JlQ2xlYXJSZWN0PSEhZX19KX07ZC5wcm90b3R5cGUuc2V0TGluZURhc2g9ZnVuY3Rpb24oZSl7dGhpcy5saW5lRGFzaD1lfSxkLnByb3RvdHlwZS5nZXRMaW5lRGFzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxpbmVEYXNoLmxlbmd0aCUyP3RoaXMubGluZURhc2guY29uY2F0KHRoaXMubGluZURhc2gpOnRoaXMubGluZURhc2guc2xpY2UoKX0sZC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe2IuY2FsbCh0aGlzLGBmaWxsYCwhMSl9LGQucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbigpe2IuY2FsbCh0aGlzLGBzdHJva2VgLCExKX0sZC5wcm90b3R5cGUuYmVnaW5QYXRoPWZ1bmN0aW9uKCl7dGhpcy5wYXRoPVt7dHlwZTpgYmVnaW5gfV19LGQucHJvdG90eXBlLm1vdmVUbz1mdW5jdGlvbihlLHQpe2lmKGlzTmFOKGUpfHxpc05hTih0KSl0aHJvdyB6aC5lcnJvcihganNQREYuY29udGV4dDJkLm1vdmVUbzogSW52YWxpZCBhcmd1bWVudHNgLGFyZ3VtZW50cyksRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQubW92ZVRvYCk7dmFyIG49dGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5VG9Qb2ludChuZXcgbyhlLHQpKTt0aGlzLnBhdGgucHVzaCh7dHlwZTpgbXRgLHg6bi54LHk6bi55fSksdGhpcy5jdHgubGFzdFBvaW50PW5ldyBvKGUsdCl9LGQucHJvdG90eXBlLmNsb3NlUGF0aD1mdW5jdGlvbigpe3ZhciBlPW5ldyBvKDAsMCksdD0wO2Zvcih0PXRoaXMucGF0aC5sZW5ndGgtMTt0IT09LTE7dC0tKWlmKHRoaXMucGF0aFt0XS50eXBlPT09YGJlZ2luYCYmQSh0aGlzLnBhdGhbdCsxXSk9PT1gb2JqZWN0YCYmdHlwZW9mIHRoaXMucGF0aFt0KzFdLng9PWBudW1iZXJgKXtlPW5ldyBvKHRoaXMucGF0aFt0KzFdLngsdGhpcy5wYXRoW3QrMV0ueSk7YnJlYWt9dGhpcy5wYXRoLnB1c2goe3R5cGU6YGNsb3NlYH0pLHRoaXMuY3R4Lmxhc3RQb2ludD1uZXcgbyhlLngsZS55KX0sZC5wcm90b3R5cGUubGluZVRvPWZ1bmN0aW9uKGUsdCl7aWYoaXNOYU4oZSl8fGlzTmFOKHQpKXRocm93IHpoLmVycm9yKGBqc1BERi5jb250ZXh0MmQubGluZVRvOiBJbnZhbGlkIGFyZ3VtZW50c2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5saW5lVG9gKTt2YXIgbj10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyBvKGUsdCkpO3RoaXMucGF0aC5wdXNoKHt0eXBlOmBsdGAseDpuLngseTpuLnl9KSx0aGlzLmN0eC5sYXN0UG9pbnQ9bmV3IG8obi54LG4ueSl9LGQucHJvdG90eXBlLmNsaXA9ZnVuY3Rpb24oKXt0aGlzLmN0eC5jbGlwX3BhdGg9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnBhdGgpKSxiLmNhbGwodGhpcyxudWxsLCEwKX0sZC5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbz1mdW5jdGlvbihlLHQsbixyKXtpZihpc05hTihuKXx8aXNOYU4ocil8fGlzTmFOKGUpfHxpc05hTih0KSl0aHJvdyB6aC5lcnJvcihganNQREYuY29udGV4dDJkLnF1YWRyYXRpY0N1cnZlVG86IEludmFsaWQgYXJndW1lbnRzYCxhcmd1bWVudHMpLEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnF1YWRyYXRpY0N1cnZlVG9gKTt2YXIgaT10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyBvKG4scikpLGE9dGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5VG9Qb2ludChuZXcgbyhlLHQpKTt0aGlzLnBhdGgucHVzaCh7dHlwZTpgcWN0YCx4MTphLngseTE6YS55LHg6aS54LHk6aS55fSksdGhpcy5jdHgubGFzdFBvaW50PW5ldyBvKGkueCxpLnkpfSxkLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXtpZihpc05hTihpKXx8aXNOYU4oYSl8fGlzTmFOKGUpfHxpc05hTih0KXx8aXNOYU4obil8fGlzTmFOKHIpKXRocm93IHpoLmVycm9yKGBqc1BERi5jb250ZXh0MmQuYmV6aWVyQ3VydmVUbzogSW52YWxpZCBhcmd1bWVudHNgLGFyZ3VtZW50cyksRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQuYmV6aWVyQ3VydmVUb2ApO3ZhciBzPXRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseVRvUG9pbnQobmV3IG8oaSxhKSksYz10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyBvKGUsdCkpLGw9dGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5VG9Qb2ludChuZXcgbyhuLHIpKTt0aGlzLnBhdGgucHVzaCh7dHlwZTpgYmN0YCx4MTpjLngseTE6Yy55LHgyOmwueCx5MjpsLnkseDpzLngseTpzLnl9KSx0aGlzLmN0eC5sYXN0UG9pbnQ9bmV3IG8ocy54LHMueSl9LGQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihlLHQsbixyLGksYSl7aWYoaXNOYU4oZSl8fGlzTmFOKHQpfHxpc05hTihuKXx8aXNOYU4ocil8fGlzTmFOKGkpKXRocm93IHpoLmVycm9yKGBqc1BERi5jb250ZXh0MmQuYXJjOiBJbnZhbGlkIGFyZ3VtZW50c2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5hcmNgKTtpZihhPSEhYSwhdGhpcy5jdHgudHJhbnNmb3JtLmlzSWRlbnRpdHkpe3ZhciBzPXRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseVRvUG9pbnQobmV3IG8oZSx0KSk7ZT1zLngsdD1zLnk7dmFyIGM9dGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5VG9Qb2ludChuZXcgbygwLG4pKSxsPXRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseVRvUG9pbnQobmV3IG8oMCwwKSk7bj1NYXRoLnNxcnQoKGMueC1sLngpKioyKyhjLnktbC55KSoqMil9TWF0aC5hYnMoaS1yKT49MipNYXRoLlBJJiYocj0wLGk9MipNYXRoLlBJKSx0aGlzLnBhdGgucHVzaCh7dHlwZTpgYXJjYCx4OmUseTp0LHJhZGl1czpuLHN0YXJ0QW5nbGU6cixlbmRBbmdsZTppLGNvdW50ZXJjbG9ja3dpc2U6YX0pfSxkLnByb3RvdHlwZS5hcmNUbz1mdW5jdGlvbihlLHQsbixyLGkpe3Rocm93IEVycm9yKGBhcmNUbyBub3QgaW1wbGVtZW50ZWQuYCl9LGQucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oZSx0LG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKHQpfHxpc05hTihuKXx8aXNOYU4ocikpdGhyb3cgemguZXJyb3IoYGpzUERGLmNvbnRleHQyZC5yZWN0OiBJbnZhbGlkIGFyZ3VtZW50c2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5yZWN0YCk7dGhpcy5tb3ZlVG8oZSx0KSx0aGlzLmxpbmVUbyhlK24sdCksdGhpcy5saW5lVG8oZStuLHQrciksdGhpcy5saW5lVG8oZSx0K3IpLHRoaXMubGluZVRvKGUsdCksdGhpcy5saW5lVG8oZStuLHQpLHRoaXMubGluZVRvKGUsdCl9LGQucHJvdG90eXBlLmZpbGxSZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTih0KXx8aXNOYU4obil8fGlzTmFOKHIpKXRocm93IHpoLmVycm9yKGBqc1BERi5jb250ZXh0MmQuZmlsbFJlY3Q6IEludmFsaWQgYXJndW1lbnRzYCxhcmd1bWVudHMpLEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLmZpbGxSZWN0YCk7aWYoIXAuY2FsbCh0aGlzKSl7dmFyIGk9e307dGhpcy5saW5lQ2FwIT09YGJ1dHRgJiYoaS5saW5lQ2FwPXRoaXMubGluZUNhcCx0aGlzLmxpbmVDYXA9YGJ1dHRgKSx0aGlzLmxpbmVKb2luIT09YG1pdGVyYCYmKGkubGluZUpvaW49dGhpcy5saW5lSm9pbix0aGlzLmxpbmVKb2luPWBtaXRlcmApLHRoaXMuYmVnaW5QYXRoKCksdGhpcy5yZWN0KGUsdCxuLHIpLHRoaXMuZmlsbCgpLGkuaGFzT3duUHJvcGVydHkoYGxpbmVDYXBgKSYmKHRoaXMubGluZUNhcD1pLmxpbmVDYXApLGkuaGFzT3duUHJvcGVydHkoYGxpbmVKb2luYCkmJih0aGlzLmxpbmVKb2luPWkubGluZUpvaW4pfX0sZC5wcm90b3R5cGUuc3Ryb2tlUmVjdD1mdW5jdGlvbihlLHQsbixyKXtpZihpc05hTihlKXx8aXNOYU4odCl8fGlzTmFOKG4pfHxpc05hTihyKSl0aHJvdyB6aC5lcnJvcihganNQREYuY29udGV4dDJkLnN0cm9rZVJlY3Q6IEludmFsaWQgYXJndW1lbnRzYCxhcmd1bWVudHMpLEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnN0cm9rZVJlY3RgKTttLmNhbGwodGhpcyl8fCh0aGlzLmJlZ2luUGF0aCgpLHRoaXMucmVjdChlLHQsbixyKSx0aGlzLnN0cm9rZSgpKX0sZC5wcm90b3R5cGUuY2xlYXJSZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTih0KXx8aXNOYU4obil8fGlzTmFOKHIpKXRocm93IHpoLmVycm9yKGBqc1BERi5jb250ZXh0MmQuY2xlYXJSZWN0OiBJbnZhbGlkIGFyZ3VtZW50c2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5jbGVhclJlY3RgKTt0aGlzLmlnbm9yZUNsZWFyUmVjdHx8KHRoaXMuZmlsbFN0eWxlPWAjZmZmZmZmYCx0aGlzLmZpbGxSZWN0KGUsdCxuLHIpKX0sZC5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihlKXtlPXR5cGVvZiBlIT1gYm9vbGVhbmB8fGU7Zm9yKHZhciB0PXRoaXMucGRmLmludGVybmFsLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXIsbj0wO248dGhpcy5wZGYuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpO24rKyl0aGlzLnBkZi5zZXRQYWdlKG4rMSksdGhpcy5wZGYuaW50ZXJuYWwub3V0KGBxYCk7aWYodGhpcy5wZGYuc2V0UGFnZSh0KSxlKXt0aGlzLmN0eC5mb250U2l6ZT10aGlzLnBkZi5pbnRlcm5hbC5nZXRGb250U2l6ZSgpO3ZhciByPW5ldyB1KHRoaXMuY3R4KTt0aGlzLmN0eFN0YWNrLnB1c2godGhpcy5jdHgpLHRoaXMuY3R4PXJ9fSxkLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGUpe2U9dHlwZW9mIGUhPWBib29sZWFuYHx8ZTtmb3IodmFyIHQ9dGhpcy5wZGYuaW50ZXJuYWwuZ2V0Q3VycmVudFBhZ2VJbmZvKCkucGFnZU51bWJlcixuPTA7bjx0aGlzLnBkZi5pbnRlcm5hbC5nZXROdW1iZXJPZlBhZ2VzKCk7bisrKXRoaXMucGRmLnNldFBhZ2UobisxKSx0aGlzLnBkZi5pbnRlcm5hbC5vdXQoYFFgKTt0aGlzLnBkZi5zZXRQYWdlKHQpLGUmJnRoaXMuY3R4U3RhY2subGVuZ3RoIT09MCYmKHRoaXMuY3R4PXRoaXMuY3R4U3RhY2sucG9wKCksdGhpcy5maWxsU3R5bGU9dGhpcy5jdHguZmlsbFN0eWxlLHRoaXMuc3Ryb2tlU3R5bGU9dGhpcy5jdHguc3Ryb2tlU3R5bGUsdGhpcy5mb250PXRoaXMuY3R4LmZvbnQsdGhpcy5saW5lQ2FwPXRoaXMuY3R4LmxpbmVDYXAsdGhpcy5saW5lV2lkdGg9dGhpcy5jdHgubGluZVdpZHRoLHRoaXMubGluZUpvaW49dGhpcy5jdHgubGluZUpvaW4sdGhpcy5saW5lRGFzaD10aGlzLmN0eC5saW5lRGFzaCx0aGlzLmxpbmVEYXNoT2Zmc2V0PXRoaXMuY3R4LmxpbmVEYXNoT2Zmc2V0KX0sZC5wcm90b3R5cGUudG9EYXRhVVJMPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoYHRvRGF0YVVybCBub3QgaW1wbGVtZW50ZWQuYCl9O3ZhciBmPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpO2lmKCEwPT09ZS5pc0NhbnZhc0dyYWRpZW50JiYoZT1lLmdldENvbG9yKCkpLCFlKXJldHVybntyOjAsZzowLGI6MCxhOjAsc3R5bGU6ZX07aWYoL3RyYW5zcGFyZW50fHJnYmFccypcKFxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKjArXHMqXCkvLnRlc3QoZSkpdD0wLG49MCxyPTAsaT0wO2Vsc2V7dmFyIGE9L3JnYlxzKlwoXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccypcKS8uZXhlYyhlKTtpZihhIT09bnVsbCl0PXBhcnNlSW50KGFbMV0pLG49cGFyc2VJbnQoYVsyXSkscj1wYXJzZUludChhWzNdKSxpPTE7ZWxzZSBpZigoYT0vcmdiYVxzKlwoXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFtcZC5dKylccypcKS8uZXhlYyhlKSkhPT1udWxsKXQ9cGFyc2VJbnQoYVsxXSksbj1wYXJzZUludChhWzJdKSxyPXBhcnNlSW50KGFbM10pLGk9cGFyc2VGbG9hdChhWzRdKTtlbHNle2lmKGk9MSx0eXBlb2YgZT09YHN0cmluZ2AmJmUuY2hhckF0KDApIT09YCNgKXt2YXIgbz1uZXcgS20oZSk7ZT1vLm9rP28udG9IZXgoKTpgIzAwMDAwMGB9ZS5sZW5ndGg9PT00Pyh0PWUuc3Vic3RyaW5nKDEsMiksdCs9dCxuPWUuc3Vic3RyaW5nKDIsMyksbis9bixyPWUuc3Vic3RyaW5nKDMsNCkscis9cik6KHQ9ZS5zdWJzdHJpbmcoMSwzKSxuPWUuc3Vic3RyaW5nKDMsNSkscj1lLnN1YnN0cmluZyg1LDcpKSx0PXBhcnNlSW50KHQsMTYpLG49cGFyc2VJbnQobiwxNikscj1wYXJzZUludChyLDE2KX19cmV0dXJue3I6dCxnOm4sYjpyLGE6aSxzdHlsZTplfX0scD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5pc0ZpbGxUcmFuc3BhcmVudHx8dGhpcy5nbG9iYWxBbHBoYT09MH0sbT1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMuY3R4LmlzU3Ryb2tlVHJhbnNwYXJlbnR8fHRoaXMuZ2xvYmFsQWxwaGE9PTApfTtkLnByb3RvdHlwZS5maWxsVGV4dD1mdW5jdGlvbihlLHQsbixyKXtpZihpc05hTih0KXx8aXNOYU4obil8fHR5cGVvZiBlIT1gc3RyaW5nYCl0aHJvdyB6aC5lcnJvcihganNQREYuY29udGV4dDJkLmZpbGxUZXh0OiBJbnZhbGlkIGFyZ3VtZW50c2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5maWxsVGV4dGApO2lmKHI9aXNOYU4ocik/dm9pZCAwOnIsIXAuY2FsbCh0aGlzKSl7dmFyIGk9Rih0aGlzLmN0eC50cmFuc2Zvcm0ucm90YXRpb24pLGE9dGhpcy5jdHgudHJhbnNmb3JtLnNjYWxlWDtPLmNhbGwodGhpcyx7dGV4dDplLHg6dCx5Om4sc2NhbGU6YSxhbmdsZTppLGFsaWduOnRoaXMudGV4dEFsaWduLG1heFdpZHRoOnJ9KX19LGQucHJvdG90eXBlLnN0cm9rZVRleHQ9ZnVuY3Rpb24oZSx0LG4scil7aWYoaXNOYU4odCl8fGlzTmFOKG4pfHx0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgemguZXJyb3IoYGpzUERGLmNvbnRleHQyZC5zdHJva2VUZXh0OiBJbnZhbGlkIGFyZ3VtZW50c2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5zdHJva2VUZXh0YCk7aWYoIW0uY2FsbCh0aGlzKSl7cj1pc05hTihyKT92b2lkIDA6cjt2YXIgaT1GKHRoaXMuY3R4LnRyYW5zZm9ybS5yb3RhdGlvbiksYT10aGlzLmN0eC50cmFuc2Zvcm0uc2NhbGVYO08uY2FsbCh0aGlzLHt0ZXh0OmUseDp0LHk6bixzY2FsZTphLHJlbmRlcmluZ01vZGU6YHN0cm9rZWAsYW5nbGU6aSxhbGlnbjp0aGlzLnRleHRBbGlnbixtYXhXaWR0aDpyfSl9fSxkLnByb3RvdHlwZS5tZWFzdXJlVGV4dD1mdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgemguZXJyb3IoYGpzUERGLmNvbnRleHQyZC5tZWFzdXJlVGV4dDogSW52YWxpZCBhcmd1bWVudHNgLGFyZ3VtZW50cyksRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQubWVhc3VyZVRleHRgKTt2YXIgdD10aGlzLnBkZixuPXRoaXMucGRmLmludGVybmFsLnNjYWxlRmFjdG9yLHI9dC5pbnRlcm5hbC5nZXRGb250U2l6ZSgpLGk9dC5nZXRTdHJpbmdVbml0V2lkdGgoZSkqci90LmludGVybmFsLnNjYWxlRmFjdG9yO3JldHVybiBuZXcgZnVuY3Rpb24oZSl7dmFyIHQ9KGV8fD17fSkud2lkdGh8fDA7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGB3aWR0aGAse2dldDpmdW5jdGlvbigpe3JldHVybiB0fX0pLHRoaXN9KHt3aWR0aDppKj1NYXRoLnJvdW5kKDk2Km4vNzIqMWU0KS8xZTR9KX0sZC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oZSx0KXtpZihpc05hTihlKXx8aXNOYU4odCkpdGhyb3cgemguZXJyb3IoYGpzUERGLmNvbnRleHQyZC5zY2FsZTogSW52YWxpZCBhcmd1bWVudHNgLGFyZ3VtZW50cyksRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQuc2NhbGVgKTt2YXIgbj1uZXcgYyhlLDAsMCx0LDAsMCk7dGhpcy5jdHgudHJhbnNmb3JtPXRoaXMuY3R4LnRyYW5zZm9ybS5tdWx0aXBseShuKX0sZC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGUpe2lmKGlzTmFOKGUpKXRocm93IHpoLmVycm9yKGBqc1BERi5jb250ZXh0MmQucm90YXRlOiBJbnZhbGlkIGFyZ3VtZW50c2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5yb3RhdGVgKTt2YXIgdD1uZXcgYyhNYXRoLmNvcyhlKSxNYXRoLnNpbihlKSwtTWF0aC5zaW4oZSksTWF0aC5jb3MoZSksMCwwKTt0aGlzLmN0eC50cmFuc2Zvcm09dGhpcy5jdHgudHJhbnNmb3JtLm11bHRpcGx5KHQpfSxkLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oZSx0KXtpZihpc05hTihlKXx8aXNOYU4odCkpdGhyb3cgemguZXJyb3IoYGpzUERGLmNvbnRleHQyZC50cmFuc2xhdGU6IEludmFsaWQgYXJndW1lbnRzYCxhcmd1bWVudHMpLEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnRyYW5zbGF0ZWApO3ZhciBuPW5ldyBjKDEsMCwwLDEsZSx0KTt0aGlzLmN0eC50cmFuc2Zvcm09dGhpcy5jdHgudHJhbnNmb3JtLm11bHRpcGx5KG4pfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4scixpLGEpe2lmKGlzTmFOKGUpfHxpc05hTih0KXx8aXNOYU4obil8fGlzTmFOKHIpfHxpc05hTihpKXx8aXNOYU4oYSkpdGhyb3cgemguZXJyb3IoYGpzUERGLmNvbnRleHQyZC50cmFuc2Zvcm06IEludmFsaWQgYXJndW1lbnRzYCxhcmd1bWVudHMpLEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnRyYW5zZm9ybWApO3ZhciBvPW5ldyBjKGUsdCxuLHIsaSxhKTt0aGlzLmN0eC50cmFuc2Zvcm09dGhpcy5jdHgudHJhbnNmb3JtLm11bHRpcGx5KG8pfSxkLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4scixpLGEpe2U9aXNOYU4oZSk/MTplLHQ9aXNOYU4odCk/MDp0LG49aXNOYU4obik/MDpuLHI9aXNOYU4ocik/MTpyLGk9aXNOYU4oaSk/MDppLGE9aXNOYU4oYSk/MDphLHRoaXMuY3R4LnRyYW5zZm9ybT1uZXcgYyhlLHQsbixyLGksYSl9O3ZhciBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFyZ2luWzBdPjB8fHRoaXMubWFyZ2luWzFdPjB8fHRoaXMubWFyZ2luWzJdPjB8fHRoaXMubWFyZ2luWzNdPjB9O2QucHJvdG90eXBlLmRyYXdJbWFnZT1mdW5jdGlvbihlLHQsbixyLGksYSxvLGwsdSl7dmFyIGQ9dGhpcy5wZGYuZ2V0SW1hZ2VQcm9wZXJ0aWVzKGUpLGY9MSxwPTEsbT0xLF89MTtyIT09dm9pZCAwJiZsIT09dm9pZCAwJiYobT1sL3IsXz11L2ksZj1kLndpZHRoL3IqbC9yLHA9ZC5oZWlnaHQvaSp1L2kpLGE9PT12b2lkIDAmJihhPXQsbz1uLHQ9MCxuPTApLHIhPT12b2lkIDAmJmw9PT12b2lkIDAmJihsPXIsdT1pKSxyPT09dm9pZCAwJiZsPT09dm9pZCAwJiYobD1kLndpZHRoLHU9ZC5oZWlnaHQpO3ZhciBiPXRoaXMuY3R4LnRyYW5zZm9ybS5kZWNvbXBvc2UoKSxTPUYoYi5yb3RhdGUuc2h4KSxDPW5ldyBjLHc9KEM9KEM9KEM9Qy5tdWx0aXBseShiLnRyYW5zbGF0ZSkpLm11bHRpcGx5KGIuc2tldykpLm11bHRpcGx5KGIuc2NhbGUpKS5hcHBseVRvUmVjdGFuZ2xlKG5ldyBzKGEtdCptLG8tbipfLHIqZixpKnApKTtpZih0aGlzLmF1dG9QYWdpbmcpe2Zvcih2YXIgVCxFPWcuY2FsbCh0aGlzLHcpLEQ9W10sTz0wO088RS5sZW5ndGg7Tys9MSlELmluZGV4T2YoRVtPXSk9PT0tMSYmRC5wdXNoKEVbT10pO3koRCk7Zm9yKHZhciBrPURbMF0sQT1EW0QubGVuZ3RoLTFdLGo9aztqPEErMTtqKyspe3RoaXMucGRmLnNldFBhZ2Uoaik7dmFyIE09dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUud2lkdGgtdGhpcy5tYXJnaW5bM10tdGhpcy5tYXJnaW5bMV0sTj1qPT09MT90aGlzLnBvc1krdGhpcy5tYXJnaW5bMF06dGhpcy5tYXJnaW5bMF0sUD10aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQtdGhpcy5wb3NZLXRoaXMubWFyZ2luWzBdLXRoaXMubWFyZ2luWzJdLEk9dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0LXRoaXMubWFyZ2luWzBdLXRoaXMubWFyZ2luWzJdLEw9aj09PTE/MDpQKyhqLTIpKkk7aWYodGhpcy5jdHguY2xpcF9wYXRoLmxlbmd0aCE9PTApe3ZhciBSPXRoaXMucGF0aDtUPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdHguY2xpcF9wYXRoKSksdGhpcy5wYXRoPXYoVCx0aGlzLnBvc1grdGhpcy5tYXJnaW5bM10sLUwrTit0aGlzLmN0eC5wcmV2UGFnZUxhc3RFbGVtT2Zmc2V0KSx4LmNhbGwodGhpcyxgZmlsbGAsITApLHRoaXMucGF0aD1SfXZhciB6PUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodykpO3o9dihbel0sdGhpcy5wb3NYK3RoaXMubWFyZ2luWzNdLC1MK04rdGhpcy5jdHgucHJldlBhZ2VMYXN0RWxlbU9mZnNldClbMF07dmFyIEI9KGo+a3x8ajxBKSYmaC5jYWxsKHRoaXMpO0ImJih0aGlzLnBkZi5zYXZlR3JhcGhpY3NTdGF0ZSgpLHRoaXMucGRmLnJlY3QodGhpcy5tYXJnaW5bM10sdGhpcy5tYXJnaW5bMF0sTSxJLG51bGwpLmNsaXAoKS5kaXNjYXJkUGF0aCgpKSx0aGlzLnBkZi5hZGRJbWFnZShlLGBKUEVHYCx6Lngsei55LHoudyx6LmgsbnVsbCxudWxsLFMpLEImJnRoaXMucGRmLnJlc3RvcmVHcmFwaGljc1N0YXRlKCl9fWVsc2UgdGhpcy5wZGYuYWRkSW1hZ2UoZSxgSlBFR2Asdy54LHcueSx3Lncsdy5oLG51bGwsbnVsbCxTKX07dmFyIGc9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdO3R8fD10aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCxufHw9dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0LXRoaXMubWFyZ2luWzBdLXRoaXMubWFyZ2luWzJdO3ZhciBpPXRoaXMucG9zWSt0aGlzLmN0eC5wcmV2UGFnZUxhc3RFbGVtT2Zmc2V0O3N3aXRjaChlLnR5cGUpe2RlZmF1bHQ6Y2FzZWBtdGA6Y2FzZWBsdGA6ci5wdXNoKE1hdGguZmxvb3IoKGUueStpKS9uKSsxKTticmVhaztjYXNlYGFyY2A6ci5wdXNoKE1hdGguZmxvb3IoKGUueStpLWUucmFkaXVzKS9uKSsxKSxyLnB1c2goTWF0aC5mbG9vcigoZS55K2krZS5yYWRpdXMpL24pKzEpO2JyZWFrO2Nhc2VgcWN0YDp2YXIgYT1JKHRoaXMuY3R4Lmxhc3RQb2ludC54LHRoaXMuY3R4Lmxhc3RQb2ludC55LGUueDEsZS55MSxlLngsZS55KTtyLnB1c2goTWF0aC5mbG9vcigoYS55K2kpL24pKzEpLHIucHVzaChNYXRoLmZsb29yKChhLnkrYS5oK2kpL24pKzEpO2JyZWFrO2Nhc2VgYmN0YDp2YXIgbz1MKHRoaXMuY3R4Lmxhc3RQb2ludC54LHRoaXMuY3R4Lmxhc3RQb2ludC55LGUueDEsZS55MSxlLngyLGUueTIsZS54LGUueSk7ci5wdXNoKE1hdGguZmxvb3IoKG8ueStpKS9uKSsxKSxyLnB1c2goTWF0aC5mbG9vcigoby55K28uaCtpKS9uKSsxKTticmVhaztjYXNlYHJlY3RgOnIucHVzaChNYXRoLmZsb29yKChlLnkraSkvbikrMSksci5wdXNoKE1hdGguZmxvb3IoKGUueStlLmgraSkvbikrMSl9Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKz0xKWZvcig7dGhpcy5wZGYuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpPHJbc107KV8uY2FsbCh0aGlzKTtyZXR1cm4gcn0sXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZmlsbFN0eWxlLHQ9dGhpcy5zdHJva2VTdHlsZSxuPXRoaXMuZm9udCxyPXRoaXMubGluZUNhcCxpPXRoaXMubGluZVdpZHRoLGE9dGhpcy5saW5lSm9pbjt0aGlzLnBkZi5hZGRQYWdlKCksdGhpcy5maWxsU3R5bGU9ZSx0aGlzLnN0cm9rZVN0eWxlPXQsdGhpcy5mb250PW4sdGhpcy5saW5lQ2FwPXIsdGhpcy5saW5lV2lkdGg9aSx0aGlzLmxpbmVKb2luPWF9LHY9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXN3aXRjaChlW3JdLnR5cGUpe2Nhc2VgYmN0YDplW3JdLngyKz10LGVbcl0ueTIrPW47Y2FzZWBxY3RgOmVbcl0ueDErPXQsZVtyXS55MSs9bjtkZWZhdWx0OmVbcl0ueCs9dCxlW3JdLnkrPW59cmV0dXJuIGV9LHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KX0sYj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZmlsbFN0eWxlLHI9dGhpcy5zdHJva2VTdHlsZSxpPXRoaXMubGluZUNhcCxhPXRoaXMubGluZVdpZHRoLG89TWF0aC5hYnMoYSp0aGlzLmN0eC50cmFuc2Zvcm0uc2NhbGVYKSxzPXRoaXMubGluZUpvaW47aWYodGhpcy5hdXRvUGFnaW5nKXtmb3IodmFyIGMsbCx1PUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wYXRoKSksZD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGF0aCkpLGY9W10scD0wO3A8ZC5sZW5ndGg7cCsrKWlmKGRbcF0ueCE9PXZvaWQgMClmb3IodmFyIG09Zy5jYWxsKHRoaXMsZFtwXSksYj0wO2I8bS5sZW5ndGg7Yis9MSlmLmluZGV4T2YobVtiXSk9PT0tMSYmZi5wdXNoKG1bYl0pO2Zvcih2YXIgUz0wO1M8Zi5sZW5ndGg7UysrKWZvcig7dGhpcy5wZGYuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpPGZbU107KV8uY2FsbCh0aGlzKTt5KGYpO2Zvcih2YXIgQz1mWzBdLHc9ZltmLmxlbmd0aC0xXSxUPUM7VDx3KzE7VCsrKXt0aGlzLnBkZi5zZXRQYWdlKFQpLHRoaXMuZmlsbFN0eWxlPW4sdGhpcy5zdHJva2VTdHlsZT1yLHRoaXMubGluZUNhcD1pLHRoaXMubGluZVdpZHRoPW8sdGhpcy5saW5lSm9pbj1zO3ZhciBFPXRoaXMucGRmLmludGVybmFsLnBhZ2VTaXplLndpZHRoLXRoaXMubWFyZ2luWzNdLXRoaXMubWFyZ2luWzFdLEQ9VD09PTE/dGhpcy5wb3NZK3RoaXMubWFyZ2luWzBdOnRoaXMubWFyZ2luWzBdLE89dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0LXRoaXMucG9zWS10aGlzLm1hcmdpblswXS10aGlzLm1hcmdpblsyXSxrPXRoaXMucGRmLmludGVybmFsLnBhZ2VTaXplLmhlaWdodC10aGlzLm1hcmdpblswXS10aGlzLm1hcmdpblsyXSxBPVQ9PT0xPzA6TysoVC0yKSprO2lmKHRoaXMuY3R4LmNsaXBfcGF0aC5sZW5ndGghPT0wKXt2YXIgaj10aGlzLnBhdGg7Yz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3R4LmNsaXBfcGF0aCkpLHRoaXMucGF0aD12KGMsdGhpcy5wb3NYK3RoaXMubWFyZ2luWzNdLC1BK0QrdGhpcy5jdHgucHJldlBhZ2VMYXN0RWxlbU9mZnNldCkseC5jYWxsKHRoaXMsZSwhMCksdGhpcy5wYXRoPWp9aWYobD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHUpKSx0aGlzLnBhdGg9dihsLHRoaXMucG9zWCt0aGlzLm1hcmdpblszXSwtQStEK3RoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQpLCExPT09dHx8VD09PTApe3ZhciBNPShUPkN8fFQ8dykmJmguY2FsbCh0aGlzKTtNJiYodGhpcy5wZGYuc2F2ZUdyYXBoaWNzU3RhdGUoKSx0aGlzLnBkZi5yZWN0KHRoaXMubWFyZ2luWzNdLHRoaXMubWFyZ2luWzBdLEUsayxudWxsKS5jbGlwKCkuZGlzY2FyZFBhdGgoKSkseC5jYWxsKHRoaXMsZSx0KSxNJiZ0aGlzLnBkZi5yZXN0b3JlR3JhcGhpY3NTdGF0ZSgpfXRoaXMubGluZVdpZHRoPWF9dGhpcy5wYXRoPXV9ZWxzZSB0aGlzLmxpbmVXaWR0aD1vLHguY2FsbCh0aGlzLGUsdCksdGhpcy5saW5lV2lkdGg9YX0seD1mdW5jdGlvbihlLHQpe2lmKChlIT09YHN0cm9rZWB8fHR8fCFtLmNhbGwodGhpcykpJiYoZT09PWBzdHJva2VgfHx0fHwhcC5jYWxsKHRoaXMpKSl7Zm9yKHZhciBuLHIsaT1bXSxhPXRoaXMucGF0aCxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107c3dpdGNoKHMudHlwZSl7Y2FzZWBiZWdpbmA6aS5wdXNoKHtiZWdpbjohMH0pO2JyZWFrO2Nhc2VgY2xvc2VgOmkucHVzaCh7Y2xvc2U6ITB9KTticmVhaztjYXNlYG10YDppLnB1c2goe3N0YXJ0OnMsZGVsdGFzOltdLGFiczpbXX0pO2JyZWFrO2Nhc2VgbHRgOnZhciBjPWkubGVuZ3RoO2lmKGFbby0xXSYmIWlzTmFOKGFbby0xXS54KSYmKG49W3MueC1hW28tMV0ueCxzLnktYVtvLTFdLnldLGM+MCkpe2Zvcig7Yz49MDtjLS0paWYoITAhPT1pW2MtMV0uY2xvc2UmJiEwIT09aVtjLTFdLmJlZ2luKXtpW2MtMV0uZGVsdGFzLnB1c2gobiksaVtjLTFdLmFicy5wdXNoKHMpO2JyZWFrfX1icmVhaztjYXNlYGJjdGA6bj1bcy54MS1hW28tMV0ueCxzLnkxLWFbby0xXS55LHMueDItYVtvLTFdLngscy55Mi1hW28tMV0ueSxzLngtYVtvLTFdLngscy55LWFbby0xXS55XSxpW2kubGVuZ3RoLTFdLmRlbHRhcy5wdXNoKG4pO2JyZWFrO2Nhc2VgcWN0YDp2YXIgbD1hW28tMV0ueCsyLzMqKHMueDEtYVtvLTFdLngpLHU9YVtvLTFdLnkrMi8zKihzLnkxLWFbby0xXS55KSxkPXMueCsyLzMqKHMueDEtcy54KSxmPXMueSsyLzMqKHMueTEtcy55KSxoPXMueCxnPXMueTtuPVtsLWFbby0xXS54LHUtYVtvLTFdLnksZC1hW28tMV0ueCxmLWFbby0xXS55LGgtYVtvLTFdLngsZy1hW28tMV0ueV0saVtpLmxlbmd0aC0xXS5kZWx0YXMucHVzaChuKTticmVhaztjYXNlYGFyY2A6aS5wdXNoKHtkZWx0YXM6W10sYWJzOltdLGFyYzohMH0pLEFycmF5LmlzQXJyYXkoaVtpLmxlbmd0aC0xXS5hYnMpJiZpW2kubGVuZ3RoLTFdLmFicy5wdXNoKHMpfX1yPXQ/bnVsbDplPT09YHN0cm9rZWA/YHN0cm9rZWA6YGZpbGxgO2Zvcih2YXIgXz0hMSx2PTA7djxpLmxlbmd0aDt2KyspaWYoaVt2XS5hcmMpZm9yKHZhciB5PWlbdl0uYWJzLGI9MDtiPHkubGVuZ3RoO2IrKyl7dmFyIHg9eVtiXTt4LnR5cGU9PT1gYXJjYD93LmNhbGwodGhpcyx4LngseC55LHgucmFkaXVzLHguc3RhcnRBbmdsZSx4LmVuZEFuZ2xlLHguY291bnRlcmNsb2Nrd2lzZSx2b2lkIDAsdCwhXyk6ay5jYWxsKHRoaXMseC54LHgueSksXz0hMH1lbHNlIGlmKCEwPT09aVt2XS5jbG9zZSl0aGlzLnBkZi5pbnRlcm5hbC5vdXQoYGhgKSxfPSExO2Vsc2UgaWYoITAhPT1pW3ZdLmJlZ2luKXt2YXIgUz1pW3ZdLnN0YXJ0LngsQz1pW3ZdLnN0YXJ0Lnk7ai5jYWxsKHRoaXMsaVt2XS5kZWx0YXMsUyxDKSxfPSEwfXImJlQuY2FsbCh0aGlzLHIpLHQmJkUuY2FsbCh0aGlzKX19LFM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wZGYuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKS90aGlzLnBkZi5pbnRlcm5hbC5zY2FsZUZhY3RvcixuPXQqKHRoaXMucGRmLmludGVybmFsLmdldExpbmVIZWlnaHRGYWN0b3IoKS0xKTtzd2l0Y2godGhpcy5jdHgudGV4dEJhc2VsaW5lKXtjYXNlYGJvdHRvbWA6cmV0dXJuIGUtbjtjYXNlYHRvcGA6cmV0dXJuIGUrdC1uO2Nhc2VgaGFuZ2luZ2A6cmV0dXJuIGUrdC0yKm47Y2FzZWBtaWRkbGVgOnJldHVybiBlK3QvMi1uO2RlZmF1bHQ6cmV0dXJuIGV9fSxDPWZ1bmN0aW9uKGUpe3JldHVybiBlK3RoaXMucGRmLmludGVybmFsLmdldEZvbnRTaXplKCkvdGhpcy5wZGYuaW50ZXJuYWwuc2NhbGVGYWN0b3IqKHRoaXMucGRmLmludGVybmFsLmdldExpbmVIZWlnaHRGYWN0b3IoKS0xKX07ZC5wcm90b3R5cGUuY3JlYXRlTGluZWFyR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe307cmV0dXJuIGUuY29sb3JTdG9wcz1bXSxlLmFkZENvbG9yU3RvcD1mdW5jdGlvbihlLHQpe3RoaXMuY29sb3JTdG9wcy5wdXNoKFtlLHRdKX0sZS5nZXRDb2xvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yU3RvcHMubGVuZ3RoPT09MD9gIzAwMDAwMGA6dGhpcy5jb2xvclN0b3BzWzBdWzFdfSxlLmlzQ2FudmFzR3JhZGllbnQ9ITAsZX0sZC5wcm90b3R5cGUuY3JlYXRlUGF0dGVybj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNyZWF0ZUxpbmVhckdyYWRpZW50KCl9LGQucHJvdG90eXBlLmNyZWF0ZVJhZGlhbEdyYWRpZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3JlYXRlTGluZWFyR3JhZGllbnQoKX07dmFyIHc9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzLGMpe2Zvcih2YXIgbD1OLmNhbGwodGhpcyxuLHIsaSxhKSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBkPWxbdV07dT09PTAmJihjP0QuY2FsbCh0aGlzLGQueDErZSxkLnkxK3QpOmsuY2FsbCh0aGlzLGQueDErZSxkLnkxK3QpKSxNLmNhbGwodGhpcyxlLHQsZC54MixkLnkyLGQueDMsZC55MyxkLng0LGQueTQpfXM/RS5jYWxsKHRoaXMpOlQuY2FsbCh0aGlzLG8pfSxUPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlYHN0cm9rZWA6dGhpcy5wZGYuaW50ZXJuYWwub3V0KGBTYCk7YnJlYWs7Y2FzZWBmaWxsYDp0aGlzLnBkZi5pbnRlcm5hbC5vdXQoYGZgKX19LEU9ZnVuY3Rpb24oKXt0aGlzLnBkZi5jbGlwKCksdGhpcy5wZGYuZGlzY2FyZFBhdGgoKX0sRD1mdW5jdGlvbihlLHQpe3RoaXMucGRmLmludGVybmFsLm91dChuKGUpK2AgYCtyKHQpK2AgbWApfSxPPWZ1bmN0aW9uKGUpe3ZhciB0O3N3aXRjaChlLmFsaWduKXtjYXNlYHJpZ2h0YDpjYXNlYGVuZGA6dD1gcmlnaHRgO2JyZWFrO2Nhc2VgY2VudGVyYDp0PWBjZW50ZXJgO2JyZWFrO2RlZmF1bHQ6dD1gbGVmdGB9dmFyIG4scixpLGE9dGhpcy5wZGYuZ2V0VGV4dERpbWVuc2lvbnMoZS50ZXh0KSxsPVMuY2FsbCh0aGlzLGUueSksdT1DLmNhbGwodGhpcyxsKS1hLmgsZD10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyBvKGUueCxsKSk7aWYodGhpcy5hdXRvUGFnaW5nKXt2YXIgZj10aGlzLmN0eC50cmFuc2Zvcm0uZGVjb21wb3NlKCkscD1uZXcgYztwPShwPShwPXAubXVsdGlwbHkoZi50cmFuc2xhdGUpKS5tdWx0aXBseShmLnNrZXcpKS5tdWx0aXBseShmLnNjYWxlKTtmb3IodmFyIG09dGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5VG9SZWN0YW5nbGUobmV3IHMoZS54LGwsYS53LGEuaCkpLF89cC5hcHBseVRvUmVjdGFuZ2xlKG5ldyBzKGUueCx1LGEudyxhLmgpKSxiPWcuY2FsbCh0aGlzLF8pLHc9W10sVD0wO1Q8Yi5sZW5ndGg7VCs9MSl3LmluZGV4T2YoYltUXSk9PT0tMSYmdy5wdXNoKGJbVF0pO3kodyk7Zm9yKHZhciBFPXdbMF0sRD13W3cubGVuZ3RoLTFdLE89RTtPPEQrMTtPKyspe3RoaXMucGRmLnNldFBhZ2UoTyk7dmFyIGs9Tz09PTE/dGhpcy5wb3NZK3RoaXMubWFyZ2luWzBdOnRoaXMubWFyZ2luWzBdLEE9dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0LXRoaXMucG9zWS10aGlzLm1hcmdpblswXS10aGlzLm1hcmdpblsyXSxqPXRoaXMucGRmLmludGVybmFsLnBhZ2VTaXplLmhlaWdodC10aGlzLm1hcmdpblsyXSxNPWotdGhpcy5tYXJnaW5bMF0sTj10aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aC10aGlzLm1hcmdpblsxXSxQPU4tdGhpcy5tYXJnaW5bM10sRj1PPT09MT8wOkErKE8tMikqTTtpZih0aGlzLmN0eC5jbGlwX3BhdGgubGVuZ3RoIT09MCl7dmFyIEk9dGhpcy5wYXRoO249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN0eC5jbGlwX3BhdGgpKSx0aGlzLnBhdGg9dihuLHRoaXMucG9zWCt0aGlzLm1hcmdpblszXSwtMSpGK2spLHguY2FsbCh0aGlzLGBmaWxsYCwhMCksdGhpcy5wYXRoPUl9dmFyIEw9dihbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfKSldLHRoaXMucG9zWCt0aGlzLm1hcmdpblszXSwtRitrK3RoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQpWzBdO2Uuc2NhbGU+PS4wMSYmKHI9dGhpcy5wZGYuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSx0aGlzLnBkZi5zZXRGb250U2l6ZShyKmUuc2NhbGUpLGk9dGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGg9aSplLnNjYWxlKTt2YXIgUj10aGlzLmF1dG9QYWdpbmchPT1gdGV4dGA7aWYoUnx8TC55K0wuaDw9ail7aWYoUnx8TC55Pj1rJiZMLng8PU4pe3ZhciB6PVI/ZS50ZXh0OnRoaXMucGRmLnNwbGl0VGV4dFRvU2l6ZShlLnRleHQsZS5tYXhXaWR0aHx8Ti1MLngpWzBdLEI9dihbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtKSldLHRoaXMucG9zWCt0aGlzLm1hcmdpblszXSwtRitrK3RoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQpWzBdLFY9UiYmKE8+RXx8TzxEKSYmaC5jYWxsKHRoaXMpO1YmJih0aGlzLnBkZi5zYXZlR3JhcGhpY3NTdGF0ZSgpLHRoaXMucGRmLnJlY3QodGhpcy5tYXJnaW5bM10sdGhpcy5tYXJnaW5bMF0sUCxNLG51bGwpLmNsaXAoKS5kaXNjYXJkUGF0aCgpKSx0aGlzLnBkZi50ZXh0KHosQi54LEIueSx7YW5nbGU6ZS5hbmdsZSxhbGlnbjp0LHJlbmRlcmluZ01vZGU6ZS5yZW5kZXJpbmdNb2RlfSksViYmdGhpcy5wZGYucmVzdG9yZUdyYXBoaWNzU3RhdGUoKX19ZWxzZSBMLnk8aiYmKHRoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQrPWotTC55KTtlLnNjYWxlPj0uMDEmJih0aGlzLnBkZi5zZXRGb250U2l6ZShyKSx0aGlzLmxpbmVXaWR0aD1pKX19ZWxzZSBlLnNjYWxlPj0uMDEmJihyPXRoaXMucGRmLmludGVybmFsLmdldEZvbnRTaXplKCksdGhpcy5wZGYuc2V0Rm9udFNpemUociplLnNjYWxlKSxpPXRoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoPWkqZS5zY2FsZSksdGhpcy5wZGYudGV4dChlLnRleHQsZC54K3RoaXMucG9zWCxkLnkrdGhpcy5wb3NZLHthbmdsZTplLmFuZ2xlLGFsaWduOnQscmVuZGVyaW5nTW9kZTplLnJlbmRlcmluZ01vZGUsbWF4V2lkdGg6ZS5tYXhXaWR0aH0pLGUuc2NhbGU+PS4wMSYmKHRoaXMucGRmLnNldEZvbnRTaXplKHIpLHRoaXMubGluZVdpZHRoPWkpfSxrPWZ1bmN0aW9uKGUsdCxpLGEpe2l8fD0wLGF8fD0wLHRoaXMucGRmLmludGVybmFsLm91dChuKGUraSkrYCBgK3IodCthKStgIGxgKX0saj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMucGRmLmxpbmVzKGUsdCxuLG51bGwsbnVsbCl9LE09ZnVuY3Rpb24oZSxuLHIsbyxzLGMsbCx1KXt0aGlzLnBkZi5pbnRlcm5hbC5vdXQoW3QoaShyK2UpKSx0KGEobytuKSksdChpKHMrZSkpLHQoYShjK24pKSx0KGkobCtlKSksdChhKHUrbikpLGBjYF0uam9pbihgIGApKX0sTj1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9MipNYXRoLlBJLGE9TWF0aC5QSS8yO3Q+bjspdC09aTt2YXIgbz1NYXRoLmFicyhuLXQpO288aSYmciYmKG89aS1vKTtmb3IodmFyIHM9W10sYz1yPy0xOjEsbD10O28+MWUtNTspe3ZhciB1PWwrYypNYXRoLm1pbihvLGEpO3MucHVzaChQLmNhbGwodGhpcyxlLGwsdSkpLG8tPU1hdGguYWJzKHUtbCksbD11fXJldHVybiBzfSxQPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0obi10KS8yLGk9ZSpNYXRoLmNvcyhyKSxhPWUqTWF0aC5zaW4ociksbz1pLHM9LWEsYz1vKm8rcypzLGw9YytvKmkrcyphLHU9NC8zKihNYXRoLnNxcnQoMipjKmwpLWwpLyhvKmEtcyppKSxkPW8tdSpzLGY9cyt1Km8scD1kLG09LWYsaD1yK3QsZz1NYXRoLmNvcyhoKSxfPU1hdGguc2luKGgpO3JldHVybnt4MTplKk1hdGguY29zKHQpLHkxOmUqTWF0aC5zaW4odCkseDI6ZCpnLWYqXyx5MjpkKl8rZipnLHgzOnAqZy1tKl8seTM6cCpfK20qZyx4NDplKk1hdGguY29zKG4pLHk0OmUqTWF0aC5zaW4obil9fSxGPWZ1bmN0aW9uKGUpe3JldHVybiAxODAqZS9NYXRoLlBJfSxJPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbz1lKy41KihuLWUpLGM9dCsuNSooci10KSxsPWkrLjUqKG4taSksdT1hKy41KihyLWEpLGQ9TWF0aC5taW4oZSxpLG8sbCksZj1NYXRoLm1heChlLGksbyxsKSxwPU1hdGgubWluKHQsYSxjLHUpLG09TWF0aC5tYXgodCxhLGMsdSk7cmV0dXJuIG5ldyBzKGQscCxmLWQsbS1wKX0sTD1mdW5jdGlvbihlLHQsbixyLGksYSxvLGMpe3ZhciBsLHUsZCxmLHAsbSxoLGcsXyx2LHksYix4LFMsQz1uLWUsdz1yLXQsVD1pLW4sRT1hLXIsRD1vLWksTz1jLWE7Zm9yKHU9MDt1PDQxO3UrKylfPShoPShkPWUrKGw9dS80MCkqQykrbCooKHA9bitsKlQpLWQpKStsKihwK2wqKGkrbCpELXApLWgpLHY9KGc9KGY9dCtsKncpK2wqKChtPXIrbCpFKS1mKSkrbCoobStsKihhK2wqTy1tKS1nKSx1PT0wPyh5PV8sYj12LHg9XyxTPXYpOih5PU1hdGgubWluKHksXyksYj1NYXRoLm1pbihiLHYpLHg9TWF0aC5tYXgoeCxfKSxTPU1hdGgubWF4KFMsdikpO3JldHVybiBuZXcgcyhNYXRoLnJvdW5kKHkpLE1hdGgucm91bmQoYiksTWF0aC5yb3VuZCh4LXkpLE1hdGgucm91bmQoUy1iKSl9LFI9ZnVuY3Rpb24oKXtpZih0aGlzLnByZXZMaW5lRGFzaHx8dGhpcy5jdHgubGluZURhc2gubGVuZ3RofHx0aGlzLmN0eC5saW5lRGFzaE9mZnNldCl7dmFyIGUsdCxuPShlPXRoaXMuY3R4LmxpbmVEYXNoLHQ9dGhpcy5jdHgubGluZURhc2hPZmZzZXQsSlNPTi5zdHJpbmdpZnkoe2xpbmVEYXNoOmUsbGluZURhc2hPZmZzZXQ6dH0pKTt0aGlzLnByZXZMaW5lRGFzaCE9PW4mJih0aGlzLnBkZi5zZXRMaW5lRGFzaCh0aGlzLmN0eC5saW5lRGFzaCx0aGlzLmN0eC5saW5lRGFzaE9mZnNldCksdGhpcy5wcmV2TGluZURhc2g9bil9fX0pKFouQVBJKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxhLG8scyxjLGwsdTtmb3IoL1teXHgwMC1ceEZGXS8udGVzdChlKSxuPVtdLHI9MCxpPShlKz10PWBcMFwwXDBcMGAuc2xpY2UoZS5sZW5ndGglNHx8NCkpLmxlbmd0aDtpPnI7cis9NCkoYT0oZS5jaGFyQ29kZUF0KHIpPDwyNCkrKGUuY2hhckNvZGVBdChyKzEpPDwxNikrKGUuY2hhckNvZGVBdChyKzIpPDw4KStlLmNoYXJDb2RlQXQociszKSk9PT0wP24ucHVzaCgxMjIpOihvPShhPSgoYT0oKGE9KChhPShhLSh1PWElODUpKS84NSktKGw9YSU4NSkpLzg1KS0oYz1hJTg1KSkvODUpLShzPWElODUpKS84NSklODUsbi5wdXNoKG8rMzMscyszMyxjKzMzLGwrMzMsdSszMykpO3JldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10O24+MDtuLS0pZS5wb3AoKX0obix0Lmxlbmd0aCksU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsbikrYH4+YH0sbj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxhLG89U3RyaW5nLHM9YGxlbmd0aGAsYz0yNTUsbD1gY2hhckNvZGVBdGAsdT1gc2xpY2VgLGQ9YHJlcGxhY2VgO2ZvcihlW3VdKC0yKSxlPWVbdV0oMCwtMilbZF0oL1xzL2csYGApW2RdKGB6YCxgISEhISFgKSxyPVtdLGk9MCxhPShlKz10PWB1dXV1dWBbdV0oZVtzXSU1fHw1KSlbc107YT5pO2krPTUpbj01MjIwMDYyNSooZVtsXShpKS0zMykrNjE0MTI1KihlW2xdKGkrMSktMzMpKzcyMjUqKGVbbF0oaSsyKS0zMykrODUqKGVbbF0oaSszKS0zMykrKGVbbF0oaSs0KS0zMyksci5wdXNoKGMmbj4+MjQsYyZuPj4xNixjJm4+PjgsYyZuKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dDtuPjA7bi0tKWUucG9wKCl9KHIsdFtzXSksby5mcm9tQ2hhckNvZGUuYXBwbHkobyxyKX0scj1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChgYCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybihgMGArZS5jaGFyQ29kZUF0KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9KS5qb2luKGBgKStgPmB9LGk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgvXihbMC05QS1GYS1mXXsyfSkrJC8pO2lmKChlPWUucmVwbGFjZSgvXHMvZyxgYCkpLmluZGV4T2YoYD5gKSE9PS0xJiYoZT1lLnN1YnN0cigwLGUuaW5kZXhPZihgPmApKSksZS5sZW5ndGglMiYmKGUrPWAwYCksITE9PT10LnRlc3QoZSkpcmV0dXJuYGA7Zm9yKHZhciBuPWBgLHI9MDtyPGUubGVuZ3RoO3IrPTIpbis9U3RyaW5nLmZyb21DaGFyQ29kZShgMHhgKyhlW3JdK2VbcisxXSkpO3JldHVybiBufSxhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbj1lLmxlbmd0aDtuLS07KXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybih0PU0odCkpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlK1N0cmluZy5mcm9tQ2hhckNvZGUodCl9LGBgKX07ZS5wcm9jZXNzRGF0YUJ5RmlsdGVycz1mdW5jdGlvbihlLG8pe3ZhciBzPTAsYz1lfHxgYCxsPVtdO2Zvcih0eXBlb2Yob3x8PVtdKT09YHN0cmluZ2AmJihvPVtvXSkscz0wO3M8by5sZW5ndGg7cys9MSlzd2l0Y2gob1tzXSl7Y2FzZWBBU0NJSTg1RGVjb2RlYDpjYXNlYC9BU0NJSTg1RGVjb2RlYDpjPW4oYyksbC5wdXNoKGAvQVNDSUk4NUVuY29kZWApO2JyZWFrO2Nhc2VgQVNDSUk4NUVuY29kZWA6Y2FzZWAvQVNDSUk4NUVuY29kZWA6Yz10KGMpLGwucHVzaChgL0FTQ0lJODVEZWNvZGVgKTticmVhaztjYXNlYEFTQ0lJSGV4RGVjb2RlYDpjYXNlYC9BU0NJSUhleERlY29kZWA6Yz1pKGMpLGwucHVzaChgL0FTQ0lJSGV4RW5jb2RlYCk7YnJlYWs7Y2FzZWBBU0NJSUhleEVuY29kZWA6Y2FzZWAvQVNDSUlIZXhFbmNvZGVgOmM9cihjKSxsLnB1c2goYC9BU0NJSUhleERlY29kZWApO2JyZWFrO2Nhc2VgRmxhdGVFbmNvZGVgOmNhc2VgL0ZsYXRlRW5jb2RlYDpjPWEoYyksbC5wdXNoKGAvRmxhdGVEZWNvZGVgKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGBUaGUgZmlsdGVyOiAiYCtvW3NdK2AiIGlzIG5vdCBpbXBsZW1lbnRlZGApfXJldHVybntkYXRhOmMscmV2ZXJzZUNoYWluOmwucmV2ZXJzZSgpLmpvaW4oYCBgKX19fShaLkFQSSksZnVuY3Rpb24oZSl7ZS5sb2FkRmlsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt0PSExIT09dCxuPXR5cGVvZiBuPT1gZnVuY3Rpb25gP246ZnVuY3Rpb24oKXt9O3ZhciByPXZvaWQgMDt0cnl7cj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bmV3IFhNTEh0dHBSZXF1ZXN0LGk9MCxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49W10scj1TdHJpbmcuZnJvbUNoYXJDb2RlO2ZvcihpPTA7aTx0O2krPTEpbi5wdXNoKHIoMjU1JmUuY2hhckNvZGVBdChpKSkpO3JldHVybiBuLmpvaW4oYGApfTtpZihyLm9wZW4oYEdFVGAsZSwhdCksci5vdmVycmlkZU1pbWVUeXBlKGB0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkYCksITE9PT10JiYoci5vbmxvYWQ9ZnVuY3Rpb24oKXtyLnN0YXR1cz09PTIwMD9uKGEodGhpcy5yZXNwb25zZVRleHQpKTpuKHZvaWQgMCl9KSxyLnNlbmQobnVsbCksdCYmci5zdGF0dXM9PT0yMDApcmV0dXJuIGEoci5yZXNwb25zZVRleHQpfShlLHQsbil9Y2F0Y2h7fXJldHVybiByfShlLHQsbil9LGUuYWxsb3dGc1JlYWQ9dm9pZCAwLGUubG9hZEltYWdlRmlsZT1lLmxvYWRGaWxlfShaLkFQSSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybihSaC5odG1sMmNhbnZhcz9Qcm9taXNlLnJlc29sdmUoUmguaHRtbDJjYW52YXMpOk8oKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnUocHMoKSkpLHZvaWQgMCxpbXBvcnQubWV0YS51cmwpKS5jYXRjaChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoYENvdWxkIG5vdCBsb2FkIGh0bWwyY2FudmFzOiBgK2UpKX0pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVmYXVsdD9lLmRlZmF1bHQ6ZX0pfWZ1bmN0aW9uIG4oKXtyZXR1cm4oUmguRE9NUHVyaWZ5P1Byb21pc2UucmVzb2x2ZShSaC5ET01QdXJpZnkpOk8oKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihNYygpLG1zKSksdm9pZCAwLGltcG9ydC5tZXRhLnVybCkpLmNhdGNoKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChFcnJvcihgQ291bGQgbm90IGxvYWQgZG9tcHVyaWZ5OiBgK2UpKX0pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVmYXVsdD9lLmRlZmF1bHQ6ZX0pfXZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PUEoZSk7cmV0dXJuIHQ9PT1gdW5kZWZpbmVkYD9gdW5kZWZpbmVkYDp0PT09YHN0cmluZ2B8fGUgaW5zdGFuY2VvZiBTdHJpbmc/YHN0cmluZ2A6dD09PWBudW1iZXJgfHxlIGluc3RhbmNlb2YgTnVtYmVyP2BudW1iZXJgOnQ9PT1gZnVuY3Rpb25gfHxlIGluc3RhbmNlb2YgRnVuY3Rpb24/YGZ1bmN0aW9uYDplJiZlLmNvbnN0cnVjdG9yPT09QXJyYXk/YGFycmF5YDplJiZlLm5vZGVUeXBlPT09MT9gZWxlbWVudGA6dD09PWBvYmplY3RgP2BvYmplY3RgOmB1bmtub3duYH0saT1mdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7Zm9yKHZhciByIGluIHQuY2xhc3NOYW1lJiYobi5jbGFzc05hbWU9dC5jbGFzc05hbWUpLHQuaW5uZXJIVE1MJiZ0LmRvbXB1cmlmeSYmKG4uaW5uZXJIVE1MPXQuZG9tcHVyaWZ5LnNhbml0aXplKHQuaW5uZXJIVE1MKSksdC5zdHlsZSluLnN0eWxlW3JdPXQuc3R5bGVbcl07cmV0dXJuIG59LGE9ZnVuY3Rpb24gZSh0LG4pe2Zvcih2YXIgcj10Lm5vZGVUeXBlPT09Mz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0Lm5vZGVWYWx1ZSk6dC5jbG9uZU5vZGUoITEpLGk9dC5maXJzdENoaWxkO2k7aT1pLm5leHRTaWJsaW5nKSEwIT09biYmaS5ub2RlVHlwZT09PTEmJmkubm9kZU5hbWU9PT1gU0NSSVBUYHx8ci5hcHBlbmRDaGlsZChlKGksbikpO3JldHVybiB0Lm5vZGVUeXBlPT09MSYmKHQubm9kZU5hbWU9PT1gQ0FOVkFTYD8oci53aWR0aD10LndpZHRoLHIuaGVpZ2h0PXQuaGVpZ2h0LHIuZ2V0Q29udGV4dChgMmRgKS5kcmF3SW1hZ2UodCwwLDApKTp0Lm5vZGVOYW1lIT09YFRFWFRBUkVBYCYmdC5ub2RlTmFtZSE9PWBTRUxFQ1RgfHwoci52YWx1ZT10LnZhbHVlKSxyLmFkZEV2ZW50TGlzdGVuZXIoYGxvYWRgLGZ1bmN0aW9uKCl7ci5zY3JvbGxUb3A9dC5zY3JvbGxUb3Asci5zY3JvbGxMZWZ0PXQuc2Nyb2xsTGVmdH0sITApKSxyfSxvPWZ1bmN0aW9uIGUodCl7dmFyIG49T2JqZWN0LmFzc2lnbihlLmNvbnZlcnQoUHJvbWlzZS5yZXNvbHZlKCkpLEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZS50ZW1wbGF0ZSkpKSxyPWUuY29udmVydChQcm9taXNlLnJlc29sdmUoKSxuKTtyZXR1cm4ocj1yLnNldFByb2dyZXNzKDEsZSwxLFtlXSkpLnNldCh0KX07KG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUHJvbWlzZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1vLG8uY29udmVydD1mdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10fHxvLnByb3RvdHlwZSxlfSxvLnRlbXBsYXRlPXtwcm9wOntzcmM6bnVsbCxjb250YWluZXI6bnVsbCxvdmVybGF5Om51bGwsY2FudmFzOm51bGwsaW1nOm51bGwscGRmOm51bGwscGFnZVNpemU6bnVsbCxjYWxsYmFjazpmdW5jdGlvbigpe319LHByb2dyZXNzOnt2YWw6MCxzdGF0ZTpudWxsLG46MCxzdGFjazpbXX0sb3B0OntmaWxlbmFtZTpgZmlsZS5wZGZgLG1hcmdpbjpbMCwwLDAsMF0sZW5hYmxlTGlua3M6ITAseDowLHk6MCxodG1sMmNhbnZhczp7fSxqc1BERjp7fSxiYWNrZ3JvdW5kQ29sb3I6YHRyYW5zcGFyZW50YH19LG8ucHJvdG90eXBlLmZyb209ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKCl7c3dpdGNoKHR8fD1mdW5jdGlvbihlKXtzd2l0Y2gocihlKSl7Y2FzZWBzdHJpbmdgOnJldHVybmBzdHJpbmdgO2Nhc2VgZWxlbWVudGA6cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWBjYW52YXNgP2BjYW52YXNgOmBlbGVtZW50YDtkZWZhdWx0OnJldHVybmB1bmtub3duYH19KGUpLHQpe2Nhc2Vgc3RyaW5nYDpyZXR1cm4gdGhpcy50aGVuKG4pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2V0KHtzcmM6aShgZGl2YCx7aW5uZXJIVE1MOmUsZG9tcHVyaWZ5OnR9KX0pfSk7Y2FzZWBlbGVtZW50YDpyZXR1cm4gdGhpcy5zZXQoe3NyYzplfSk7Y2FzZWBjYW52YXNgOnJldHVybiB0aGlzLnNldCh7Y2FudmFzOmV9KTtjYXNlYGltZ2A6cmV0dXJuIHRoaXMuc2V0KHtpbWc6ZX0pO2RlZmF1bHQ6cmV0dXJuIHRoaXMuZXJyb3IoYFVua25vd24gc291cmNlIHR5cGUuYCl9fSl9LG8ucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlYGNvbnRhaW5lcmA6cmV0dXJuIHRoaXMudG9Db250YWluZXIoKTtjYXNlYGNhbnZhc2A6cmV0dXJuIHRoaXMudG9DYW52YXMoKTtjYXNlYGltZ2A6cmV0dXJuIHRoaXMudG9JbWcoKTtjYXNlYHBkZmA6cmV0dXJuIHRoaXMudG9QZGYoKTtkZWZhdWx0OnJldHVybiB0aGlzLmVycm9yKGBJbnZhbGlkIHRhcmdldC5gKX19LG8ucHJvdG90eXBlLnRvQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhlbkxpc3QoW2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcC5zcmN8fHRoaXMuZXJyb3IoYENhbm5vdCBkdXBsaWNhdGUgLSBubyBzb3VyY2UgSFRNTC5gKX0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wLnBhZ2VTaXplfHx0aGlzLnNldFBhZ2VTaXplKCl9XSkudGhlbihmdW5jdGlvbigpe3ZhciBlPXtwb3NpdGlvbjpgcmVsYXRpdmVgLGRpc3BsYXk6YGlubGluZS1ibG9ja2Asd2lkdGg6KHR5cGVvZiB0aGlzLm9wdC53aWR0aCE9YG51bWJlcmB8fGlzTmFOKHRoaXMub3B0LndpZHRoKXx8dHlwZW9mIHRoaXMub3B0LndpbmRvd1dpZHRoIT1gbnVtYmVyYHx8aXNOYU4odGhpcy5vcHQud2luZG93V2lkdGgpP01hdGgubWF4KHRoaXMucHJvcC5zcmMuY2xpZW50V2lkdGgsdGhpcy5wcm9wLnNyYy5zY3JvbGxXaWR0aCx0aGlzLnByb3Auc3JjLm9mZnNldFdpZHRoKTp0aGlzLm9wdC53aW5kb3dXaWR0aCkrYHB4YCxsZWZ0OjAscmlnaHQ6MCx0b3A6MCxtYXJnaW46YGF1dG9gLGJhY2tncm91bmRDb2xvcjp0aGlzLm9wdC5iYWNrZ3JvdW5kQ29sb3J9LHQ9YSh0aGlzLnByb3Auc3JjLHRoaXMub3B0Lmh0bWwyY2FudmFzLmphdmFzY3JpcHRFbmFibGVkKTt0LnRhZ05hbWU9PT1gQk9EWWAmJihlLmhlaWdodD1NYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCkrYHB4YCksdGhpcy5wcm9wLm92ZXJsYXk9aShgZGl2YCx7Y2xhc3NOYW1lOmBodG1sMnBkZl9fb3ZlcmxheWAsc3R5bGU6e3Bvc2l0aW9uOmBmaXhlZGAsb3ZlcmZsb3c6YGhpZGRlbmAsekluZGV4OjFlMyxsZWZ0OmAtMTAwMDAwcHhgLHJpZ2h0OjAsYm90dG9tOjAsdG9wOjB9fSksdGhpcy5wcm9wLmNvbnRhaW5lcj1pKGBkaXZgLHtjbGFzc05hbWU6YGh0bWwycGRmX19jb250YWluZXJgLHN0eWxlOmV9KSx0aGlzLnByb3AuY29udGFpbmVyLmFwcGVuZENoaWxkKHQpLHRoaXMucHJvcC5jb250YWluZXIuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChpKGBkaXZgLHtzdHlsZTp7Y2xlYXI6YGJvdGhgLGJvcmRlcjpgMCBub25lIHRyYW5zcGFyZW50YCxtYXJnaW46MCxwYWRkaW5nOjAsaGVpZ2h0OjB9fSkpLHRoaXMucHJvcC5jb250YWluZXIuc3R5bGUuZmxvYXQ9YG5vbmVgLHRoaXMucHJvcC5vdmVybGF5LmFwcGVuZENoaWxkKHRoaXMucHJvcC5jb250YWluZXIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wcm9wLm92ZXJsYXkpLHRoaXMucHJvcC5jb250YWluZXIuZmlyc3RDaGlsZC5zdHlsZS5wb3NpdGlvbj1gcmVsYXRpdmVgLHRoaXMucHJvcC5jb250YWluZXIuaGVpZ2h0PU1hdGgubWF4KHRoaXMucHJvcC5jb250YWluZXIuZmlyc3RDaGlsZC5jbGllbnRIZWlnaHQsdGhpcy5wcm9wLmNvbnRhaW5lci5maXJzdENoaWxkLnNjcm9sbEhlaWdodCx0aGlzLnByb3AuY29udGFpbmVyLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0KStgcHhgfSl9LG8ucHJvdG90eXBlLnRvQ2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhlbkxpc3QoW2Z1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5wcm9wLmNvbnRhaW5lcil8fHRoaXMudG9Db250YWluZXIoKX1dKS50aGVuKHQpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmFzc2lnbih7fSx0aGlzLm9wdC5odG1sMmNhbnZhcyk7cmV0dXJuIGRlbGV0ZSB0Lm9ucmVuZGVyZWQsZSh0aGlzLnByb3AuY29udGFpbmVyLHQpfSkudGhlbihmdW5jdGlvbihlKXsodGhpcy5vcHQuaHRtbDJjYW52YXMub25yZW5kZXJlZHx8ZnVuY3Rpb24oKXt9KShlKSx0aGlzLnByb3AuY2FudmFzPWUsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLnByb3Aub3ZlcmxheSl9KX0sby5wcm90b3R5cGUudG9Db250ZXh0MmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aGVuTGlzdChbZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYm9keS5jb250YWlucyh0aGlzLnByb3AuY29udGFpbmVyKXx8dGhpcy50b0NvbnRhaW5lcigpfV0pLnRoZW4odCkudGhlbihmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdC5qc1BERixuPXRoaXMub3B0LmZvbnRGYWNlcyxyPXR5cGVvZiB0aGlzLm9wdC53aWR0aCE9YG51bWJlcmB8fGlzTmFOKHRoaXMub3B0LndpZHRoKXx8dHlwZW9mIHRoaXMub3B0LndpbmRvd1dpZHRoIT1gbnVtYmVyYHx8aXNOYU4odGhpcy5vcHQud2luZG93V2lkdGgpPzE6dGhpcy5vcHQud2lkdGgvdGhpcy5vcHQud2luZG93V2lkdGgsaT1PYmplY3QuYXNzaWduKHthc3luYzohMCxhbGxvd1RhaW50OiEwLHNjYWxlOnIsc2Nyb2xsWDp0aGlzLm9wdC5zY3JvbGxYfHwwLHNjcm9sbFk6dGhpcy5vcHQuc2Nyb2xsWXx8MCxiYWNrZ3JvdW5kQ29sb3I6YCNmZmZmZmZgLGltYWdlVGltZW91dDoxNWUzLGxvZ2dpbmc6ITAscHJveHk6bnVsbCxyZW1vdmVDb250YWluZXI6ITAsZm9yZWlnbk9iamVjdFJlbmRlcmluZzohMSx1c2VDT1JTOiExfSx0aGlzLm9wdC5odG1sMmNhbnZhcyk7aWYoZGVsZXRlIGkub25yZW5kZXJlZCx0LmNvbnRleHQyZC5hdXRvUGFnaW5nPXRoaXMub3B0LmF1dG9QYWdpbmc9PT12b2lkIDB8fHRoaXMub3B0LmF1dG9QYWdpbmcsdC5jb250ZXh0MmQucG9zWD10aGlzLm9wdC54LHQuY29udGV4dDJkLnBvc1k9dGhpcy5vcHQueSx0LmNvbnRleHQyZC5tYXJnaW49dGhpcy5vcHQubWFyZ2luLHQuY29udGV4dDJkLmZvbnRGYWNlcz1uLG4pZm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2Epe3ZhciBvPW5bYV0scz1vLnNyYy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZvcm1hdD09PWB0cnVldHlwZWB9KTtzJiZ0LmFkZEZvbnQocy51cmwsby5yZWYubmFtZSxvLnJlZi5zdHlsZSl9cmV0dXJuIGkud2luZG93SGVpZ2h0PWkud2luZG93SGVpZ2h0fHwwLGkud2luZG93SGVpZ2h0PWkud2luZG93SGVpZ2h0PT0wP01hdGgubWF4KHRoaXMucHJvcC5jb250YWluZXIuY2xpZW50SGVpZ2h0LHRoaXMucHJvcC5jb250YWluZXIuc2Nyb2xsSGVpZ2h0LHRoaXMucHJvcC5jb250YWluZXIub2Zmc2V0SGVpZ2h0KTppLndpbmRvd0hlaWdodCx0LmNvbnRleHQyZC5zYXZlKCEwKSxlKHRoaXMucHJvcC5jb250YWluZXIsaSl9KS50aGVuKGZ1bmN0aW9uKGUpe3RoaXMub3B0LmpzUERGLmNvbnRleHQyZC5yZXN0b3JlKCEwKSwodGhpcy5vcHQuaHRtbDJjYW52YXMub25yZW5kZXJlZHx8ZnVuY3Rpb24oKXt9KShlKSx0aGlzLnByb3AuY2FudmFzPWUsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLnByb3Aub3ZlcmxheSl9KX0sby5wcm90b3R5cGUudG9JbWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aGVuTGlzdChbZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wLmNhbnZhc3x8dGhpcy50b0NhbnZhcygpfV0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3AuY2FudmFzLnRvRGF0YVVSTChgaW1hZ2UvYCt0aGlzLm9wdC5pbWFnZS50eXBlLHRoaXMub3B0LmltYWdlLnF1YWxpdHkpO3RoaXMucHJvcC5pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgaW1nYCksdGhpcy5wcm9wLmltZy5zcmM9ZX0pfSxvLnByb3RvdHlwZS50b1BkZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRoZW5MaXN0KFtmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvQ29udGV4dDJkKCl9XSkudGhlbihmdW5jdGlvbigpe3RoaXMucHJvcC5wZGY9dGhpcy5wcm9wLnBkZnx8dGhpcy5vcHQuanNQREZ9KX0sby5wcm90b3R5cGUub3V0cHV0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obnx8PWBwZGZgKS50b0xvd2VyQ2FzZSgpPT09YGltZ2B8fG4udG9Mb3dlckNhc2UoKT09PWBpbWFnZWA/dGhpcy5vdXRwdXRJbWcoZSx0KTp0aGlzLm91dHB1dFBkZihlLHQpfSxvLnByb3RvdHlwZS5vdXRwdXRQZGY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50aGVuTGlzdChbZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wLnBkZnx8dGhpcy50b1BkZigpfV0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wLnBkZi5vdXRwdXQoZSx0KX0pfSxvLnByb3RvdHlwZS5vdXRwdXRJbWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbkxpc3QoW2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcC5pbWd8fHRoaXMudG9JbWcoKX1dKS50aGVuKGZ1bmN0aW9uKCl7c3dpdGNoKGUpe2Nhc2Ugdm9pZCAwOmNhc2VgaW1nYDpyZXR1cm4gdGhpcy5wcm9wLmltZztjYXNlYGRhdGF1cmlzdHJpbmdgOmNhc2VgZGF0YXVybHN0cmluZ2A6cmV0dXJuIHRoaXMucHJvcC5pbWcuc3JjO2Nhc2VgZGF0YXVyaWA6Y2FzZWBkYXRhdXJsYDpyZXR1cm4gZG9jdW1lbnQubG9jYXRpb24uaHJlZj10aGlzLnByb3AuaW1nLnNyYztkZWZhdWx0OnRocm93YEltYWdlIG91dHB1dCB0eXBlICJgK2UrYCIgaXMgbm90IHN1cHBvcnRlZC5gfX0pfSxvLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW5MaXN0KFtmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3AucGRmfHx0aGlzLnRvUGRmKCl9XSkuc2V0KGU/e2ZpbGVuYW1lOmV9Om51bGwpLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnByb3AucGRmLnNhdmUodGhpcy5vcHQuZmlsZW5hbWUpfSl9LG8ucHJvdG90eXBlLmRvQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aGVuTGlzdChbZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wLnBkZnx8dGhpcy50b1BkZigpfV0pLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnByb3AuY2FsbGJhY2sodGhpcy5wcm9wLnBkZil9KX0sby5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUpe2lmKHIoZSkhPT1gb2JqZWN0YClyZXR1cm4gdGhpczt2YXIgdD1PYmplY3Qua2V5cyhlfHx7fSkubWFwKGZ1bmN0aW9uKHQpe2lmKHQgaW4gby50ZW1wbGF0ZS5wcm9wKXJldHVybiBmdW5jdGlvbigpe3RoaXMucHJvcFt0XT1lW3RdfTtzd2l0Y2godCl7Y2FzZWBtYXJnaW5gOnJldHVybiB0aGlzLnNldE1hcmdpbi5iaW5kKHRoaXMsZS5tYXJnaW4pO2Nhc2VganNQREZgOnJldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdC5qc1BERj1lLmpzUERGLHRoaXMuc2V0UGFnZVNpemUoKX07Y2FzZWBwYWdlU2l6ZWA6cmV0dXJuIHRoaXMuc2V0UGFnZVNpemUuYmluZCh0aGlzLGUucGFnZVNpemUpO2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vcHRbdF09ZVt0XX19fSx0aGlzKTtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhlbkxpc3QodCl9KX0sby5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbigpe3ZhciBuPWUgaW4gby50ZW1wbGF0ZS5wcm9wP3RoaXMucHJvcFtlXTp0aGlzLm9wdFtlXTtyZXR1cm4gdD90KG4pOm59KX0sby5wcm90b3R5cGUuc2V0TWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24oKXtzd2l0Y2gocihlKSl7Y2FzZWBudW1iZXJgOmU9W2UsZSxlLGVdO2Nhc2VgYXJyYXlgOmlmKGUubGVuZ3RoPT09MiYmKGU9W2VbMF0sZVsxXSxlWzBdLGVbMV1dKSxlLmxlbmd0aD09PTQpYnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy5lcnJvcihgSW52YWxpZCBtYXJnaW4gYXJyYXkuYCl9dGhpcy5vcHQubWFyZ2luPWV9KS50aGVuKHRoaXMuc2V0UGFnZVNpemUpfSxvLnByb3RvdHlwZS5zZXRQYWdlU2l6ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuIE1hdGguZmxvb3IoZSp0LzcyKjk2KX1yZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKCl7KGV8fD1aLmdldFBhZ2VTaXplKHRoaXMub3B0LmpzUERGKSkuaGFzT3duUHJvcGVydHkoYGlubmVyYCl8fChlLmlubmVyPXt3aWR0aDplLndpZHRoLXRoaXMub3B0Lm1hcmdpblsxXS10aGlzLm9wdC5tYXJnaW5bM10saGVpZ2h0OmUuaGVpZ2h0LXRoaXMub3B0Lm1hcmdpblswXS10aGlzLm9wdC5tYXJnaW5bMl19LGUuaW5uZXIucHg9e3dpZHRoOnQoZS5pbm5lci53aWR0aCxlLmspLGhlaWdodDp0KGUuaW5uZXIuaGVpZ2h0LGUuayl9LGUuaW5uZXIucmF0aW89ZS5pbm5lci5oZWlnaHQvZS5pbm5lci53aWR0aCksdGhpcy5wcm9wLnBhZ2VTaXplPWV9KX0sby5wcm90b3R5cGUuc2V0UHJvZ3Jlc3M9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUhPW51bGwmJih0aGlzLnByb2dyZXNzLnZhbD1lKSx0IT1udWxsJiYodGhpcy5wcm9ncmVzcy5zdGF0ZT10KSxuIT1udWxsJiYodGhpcy5wcm9ncmVzcy5uPW4pLHIhPW51bGwmJih0aGlzLnByb2dyZXNzLnN0YWNrPXIpLHRoaXMucHJvZ3Jlc3MucmF0aW89dGhpcy5wcm9ncmVzcy52YWwvdGhpcy5wcm9ncmVzcy5zdGF0ZSx0aGlzfSxvLnByb3RvdHlwZS51cGRhdGVQcm9ncmVzcz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5zZXRQcm9ncmVzcyhlP3RoaXMucHJvZ3Jlc3MudmFsK2U6bnVsbCx0fHxudWxsLG4/dGhpcy5wcm9ncmVzcy5uK246bnVsbCxyP3RoaXMucHJvZ3Jlc3Muc3RhY2suY29uY2F0KHIpOm51bGwpfSxvLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy50aGVuQ29yZShlLHQsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi51cGRhdGVQcm9ncmVzcyhudWxsLG51bGwsMSxbZV0pLFByb21pc2UucHJvdG90eXBlLnRoZW4uY2FsbCh0aGlzLGZ1bmN0aW9uKHQpe3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKG51bGwsZSksdH0pLnRoZW4oZSx0KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKDEpLGV9KX0pfSxvLnByb3RvdHlwZS50aGVuQ29yZT1mdW5jdGlvbihlLHQsbil7bnx8PVByb21pc2UucHJvdG90eXBlLnRoZW47dmFyIHI9dGhpcztlJiY9ZS5iaW5kKHIpLHQmJj10LmJpbmQocik7dmFyIGk9UHJvbWlzZS50b1N0cmluZygpLmluZGV4T2YoYFtuYXRpdmUgY29kZV1gKSE9PS0xJiZQcm9taXNlLm5hbWU9PT1gUHJvbWlzZWA/cjpvLmNvbnZlcnQoT2JqZWN0LmFzc2lnbih7fSxyKSxQcm9taXNlLnByb3RvdHlwZSksYT1uLmNhbGwoaSxlLHQpO3JldHVybiBvLmNvbnZlcnQoYSxyLl9fcHJvdG9fXyl9LG8ucHJvdG90eXBlLnRoZW5FeHRlcm5hbD1mdW5jdGlvbihlLHQpe3JldHVybiBQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwodGhpcyxlLHQpfSxvLnByb3RvdHlwZS50aGVuTGlzdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dD10LnRoZW5Db3JlKGUpfSksdH0sby5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7ZSYmPWUuYmluZCh0aGlzKTt2YXIgdD1Qcm9taXNlLnByb3RvdHlwZS5jYXRjaC5jYWxsKHRoaXMsZSk7cmV0dXJuIG8uY29udmVydCh0LHRoaXMpfSxvLnByb3RvdHlwZS5jYXRjaEV4dGVybmFsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnByb3RvdHlwZS5jYXRjaC5jYWxsKHRoaXMsZSl9LG8ucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihlKX0pfSxvLnByb3RvdHlwZS51c2luZz1vLnByb3RvdHlwZS5zZXQsby5wcm90b3R5cGUuc2F2ZUFzPW8ucHJvdG90eXBlLnNhdmUsby5wcm90b3R5cGUuZXhwb3J0PW8ucHJvdG90eXBlLm91dHB1dCxvLnByb3RvdHlwZS5ydW49by5wcm90b3R5cGUudGhlbixaLmdldFBhZ2VTaXplPWZ1bmN0aW9uKGUsdCxuKXtpZihBKGUpPT09YG9iamVjdGApe3ZhciByPWU7ZT1yLm9yaWVudGF0aW9uLHQ9ci51bml0fHx0LG49ci5mb3JtYXR8fG59dHx8PWBtbWAsbnx8PWBhNGAsZT0oYGArKGV8fGBQYCkpLnRvTG93ZXJDYXNlKCk7dmFyIGksYT0oYGArbikudG9Mb3dlckNhc2UoKSxvPXthMDpbMjM4My45NCwzMzcwLjM5XSxhMTpbMTY4My43OCwyMzgzLjk0XSxhMjpbMTE5MC41NSwxNjgzLjc4XSxhMzpbODQxLjg5LDExOTAuNTVdLGE0Ols1OTUuMjgsODQxLjg5XSxhNTpbNDE5LjUzLDU5NS4yOF0sYTY6WzI5Ny42NCw0MTkuNTNdLGE3OlsyMDkuNzYsMjk3LjY0XSxhODpbMTQ3LjQsMjA5Ljc2XSxhOTpbMTA0Ljg4LDE0Ny40XSxhMTA6WzczLjcsMTA0Ljg4XSxiMDpbMjgzNC42NSw0MDA4LjE5XSxiMTpbMjAwNC4wOSwyODM0LjY1XSxiMjpbMTQxNy4zMiwyMDA0LjA5XSxiMzpbMTAwMC42MywxNDE3LjMyXSxiNDpbNzA4LjY2LDEwMDAuNjNdLGI1Ols0OTguOSw3MDguNjZdLGI2OlszNTQuMzMsNDk4LjldLGI3OlsyNDkuNDUsMzU0LjMzXSxiODpbMTc1Ljc1LDI0OS40NV0sYjk6WzEyNC43MiwxNzUuNzVdLGIxMDpbODcuODcsMTI0LjcyXSxjMDpbMjU5OS4zNywzNjc2LjU0XSxjMTpbMTgzNi44NSwyNTk5LjM3XSxjMjpbMTI5OC4yNywxODM2Ljg1XSxjMzpbOTE4LjQzLDEyOTguMjddLGM0Ols2NDkuMTMsOTE4LjQzXSxjNTpbNDU5LjIxLDY0OS4xM10sYzY6WzMyMy4xNSw0NTkuMjFdLGM3OlsyMjkuNjEsMzIzLjE1XSxjODpbMTYxLjU3LDIyOS42MV0sYzk6WzExMy4zOSwxNjEuNTddLGMxMDpbNzkuMzcsMTEzLjM5XSxkbDpbMzExLjgxLDYyMy42Ml0sbGV0dGVyOls2MTIsNzkyXSwiZ292ZXJubWVudC1sZXR0ZXIiOls1NzYsNzU2XSxsZWdhbDpbNjEyLDEwMDhdLCJqdW5pb3ItbGVnYWwiOls1NzYsMzYwXSxsZWRnZXI6WzEyMjQsNzkyXSx0YWJsb2lkOls3OTIsMTIyNF0sImNyZWRpdC1jYXJkIjpbMTUzLDI0M119O3N3aXRjaCh0KXtjYXNlYHB0YDppPTE7YnJlYWs7Y2FzZWBtbWA6aT03Mi8yNS40O2JyZWFrO2Nhc2VgY21gOmk9NzIvMi41NDticmVhaztjYXNlYGluYDppPTcyO2JyZWFrO2Nhc2VgcHhgOmk9Ljc1O2JyZWFrO2Nhc2VgcGNgOmNhc2VgZW1gOmk9MTI7YnJlYWs7Y2FzZWBleGA6aT02O2JyZWFrO2RlZmF1bHQ6dGhyb3dgSW52YWxpZCB1bml0OiBgK3R9dmFyIHMsYz0wLGw9MDtpZihvLmhhc093blByb3BlcnR5KGEpKWM9b1thXVsxXS9pLGw9b1thXVswXS9pO2Vsc2UgdHJ5e2M9blsxXSxsPW5bMF19Y2F0Y2h7dGhyb3cgRXJyb3IoYEludmFsaWQgZm9ybWF0OiBgK24pfWlmKGU9PT1gcGB8fGU9PT1gcG9ydHJhaXRgKWU9YHBgLGw+YyYmKHM9bCxsPWMsYz1zKTtlbHNle2lmKGUhPT1gbGAmJmUhPT1gbGFuZHNjYXBlYCl0aHJvd2BJbnZhbGlkIG9yaWVudGF0aW9uOiBgK2U7ZT1gbGAsYz5sJiYocz1sLGw9YyxjPXMpfXJldHVybnt3aWR0aDpsLGhlaWdodDpjLHVuaXQ6dCxrOmksb3JpZW50YXRpb246ZX19LGUuaHRtbD1mdW5jdGlvbihlLHQpeyh0fHw9e30pLmNhbGxiYWNrPXQuY2FsbGJhY2t8fGZ1bmN0aW9uKCl7fSx0Lmh0bWwyY2FudmFzPXQuaHRtbDJjYW52YXN8fHt9LHQuaHRtbDJjYW52YXMuY2FudmFzPXQuaHRtbDJjYW52YXMuY2FudmFzfHx0aGlzLmNhbnZhcyx0LmpzUERGPXQuanNQREZ8fHRoaXMsdC5mb250RmFjZXM9dC5mb250RmFjZXM/dC5mb250RmFjZXMubWFwKG1oKTpudWxsO3ZhciBuPW5ldyBvKHQpO3JldHVybiB0Lndvcmtlcj9uOm4uZnJvbShlKS5kb0NhbGxiYWNrKCl9fShaLkFQSSksWi5BUEkuYWRkSlM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1gYCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07aWYocj09PWAoYHx8cj09PWApYCl7Zm9yKHZhciBpPTAsYT1uLTE7YT49MCYmZVthXT09PWBcXGA7YS0tKWkrKzt0Kz1pJTI9PTA/YFxcYCtyOnJ9ZWxzZSB0Kz1yfXJldHVybiB0fShlKTtyZXR1cm4gdGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKGBwb3N0UHV0UmVzb3VyY2VzYCxmdW5jdGlvbigpe3Q9dGhpcy5pbnRlcm5hbC5uZXdPYmplY3QoKSx0aGlzLmludGVybmFsLm91dChgPDxgKSx0aGlzLmludGVybmFsLm91dChgL05hbWVzIFsoRW1iZWRkZWRKUykgYCsodCsxKStgIDAgUl1gKSx0aGlzLmludGVybmFsLm91dChgPj5gKSx0aGlzLmludGVybmFsLm91dChgZW5kb2JqYCksbj10aGlzLmludGVybmFsLm5ld09iamVjdCgpLHRoaXMuaW50ZXJuYWwub3V0KGA8PGApLHRoaXMuaW50ZXJuYWwub3V0KGAvUyAvSmF2YVNjcmlwdGApLHRoaXMuaW50ZXJuYWwub3V0KGAvSlMgKGArcitgKWApLHRoaXMuaW50ZXJuYWwub3V0KGA+PmApLHRoaXMuaW50ZXJuYWwub3V0KGBlbmRvYmpgKX0pLHRoaXMuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShgcHV0Q2F0YWxvZ2AsZnVuY3Rpb24oKXt0IT09dm9pZCAwJiZuIT09dm9pZCAwJiZ0aGlzLmludGVybmFsLm91dChgL05hbWVzIDw8L0phdmFTY3JpcHQgYCt0K2AgMCBSPj5gKX0pLHRoaXN9LGZ1bmN0aW9uKGUpe3ZhciB0O2UuZXZlbnRzLnB1c2goW2Bwb3N0UHV0UmVzb3VyY2VzYCxmdW5jdGlvbigpe3ZhciBlPXRoaXMsbj0vXihcZCspIDAgb2JqJC87aWYodGhpcy5vdXRsaW5lLnJvb3QuY2hpbGRyZW4ubGVuZ3RoPjApZm9yKHZhciByPWUub3V0bGluZS5yZW5kZXIoKS5zcGxpdCgvXHJcbi8pLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPW4uZXhlYyhhKTtpZihvIT1udWxsKXt2YXIgcz1vWzFdO2UuaW50ZXJuYWwubmV3T2JqZWN0RGVmZXJyZWRCZWdpbihzLCExKX1lLmludGVybmFsLndyaXRlKGEpfWlmKHRoaXMub3V0bGluZS5jcmVhdGVOYW1lZERlc3RpbmF0aW9ucyl7dmFyIGM9dGhpcy5pbnRlcm5hbC5wYWdlcy5sZW5ndGgsbD1bXTtmb3IoaT0wO2k8YztpKyspe3ZhciB1PWUuaW50ZXJuYWwubmV3T2JqZWN0KCk7bC5wdXNoKHUpO3ZhciBkPWUuaW50ZXJuYWwuZ2V0UGFnZUluZm8oaSsxKTtlLmludGVybmFsLndyaXRlKGA8PCAvRFtgK2Qub2JqSWQrYCAwIFIgL1hZWiBudWxsIG51bGwgbnVsbF0+PiBlbmRvYmpgKX12YXIgZj1lLmludGVybmFsLm5ld09iamVjdCgpO2ZvcihlLmludGVybmFsLndyaXRlKGA8PCAvTmFtZXMgWyBgKSxpPTA7aTxsLmxlbmd0aDtpKyspZS5pbnRlcm5hbC53cml0ZShgKHBhZ2VfYCsoaSsxKStgKWArbFtpXStgIDAgUmApO2UuaW50ZXJuYWwud3JpdGUoYCBdID4+YCxgZW5kb2JqYCksdD1lLmludGVybmFsLm5ld09iamVjdCgpLGUuaW50ZXJuYWwud3JpdGUoYDw8IC9EZXN0cyBgK2YrYCAwIFJgKSxlLmludGVybmFsLndyaXRlKGA+PmAsYGVuZG9iamApfX1dKSxlLmV2ZW50cy5wdXNoKFtgcHV0Q2F0YWxvZ2AsZnVuY3Rpb24oKXt2YXIgZT10aGlzO2Uub3V0bGluZS5yb290LmNoaWxkcmVuLmxlbmd0aD4wJiYoZS5pbnRlcm5hbC53cml0ZShgL091dGxpbmVzYCx0aGlzLm91dGxpbmUubWFrZVJlZih0aGlzLm91dGxpbmUucm9vdCkpLHRoaXMub3V0bGluZS5jcmVhdGVOYW1lZERlc3RpbmF0aW9ucyYmZS5pbnRlcm5hbC53cml0ZShgL05hbWVzIGArdCtgIDAgUmApKX1dKSxlLmV2ZW50cy5wdXNoKFtgaW5pdGlhbGl6ZWRgLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLm91dGxpbmU9e2NyZWF0ZU5hbWVkRGVzdGluYXRpb25zOiExLHJvb3Q6e2NoaWxkcmVuOltdfX0sZS5vdXRsaW5lLmFkZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9e3RpdGxlOnQsb3B0aW9uczpuLGNoaWxkcmVuOltdfTtyZXR1cm4gZT8/PXRoaXMucm9vdCxlLmNoaWxkcmVuLnB1c2gocikscn0sZS5vdXRsaW5lLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eD17fSx0aGlzLmN0eC52YWw9YGAsdGhpcy5jdHgucGRmPWUsdGhpcy5nZW5JZHNfcih0aGlzLnJvb3QpLHRoaXMucmVuZGVyUm9vdCh0aGlzLnJvb3QpLHRoaXMucmVuZGVySXRlbXModGhpcy5yb290KSx0aGlzLmN0eC52YWx9LGUub3V0bGluZS5nZW5JZHNfcj1mdW5jdGlvbih0KXt0LmlkPWUuaW50ZXJuYWwubmV3T2JqZWN0RGVmZXJyZWQoKTtmb3IodmFyIG49MDtuPHQuY2hpbGRyZW4ubGVuZ3RoO24rKyl0aGlzLmdlbklkc19yKHQuY2hpbGRyZW5bbl0pfSxlLm91dGxpbmUucmVuZGVyUm9vdD1mdW5jdGlvbihlKXt0aGlzLm9ialN0YXJ0KGUpLHRoaXMubGluZShgL1R5cGUgL091dGxpbmVzYCksZS5jaGlsZHJlbi5sZW5ndGg+MCYmKHRoaXMubGluZShgL0ZpcnN0IGArdGhpcy5tYWtlUmVmKGUuY2hpbGRyZW5bMF0pKSx0aGlzLmxpbmUoYC9MYXN0IGArdGhpcy5tYWtlUmVmKGUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV0pKSksdGhpcy5saW5lKGAvQ291bnQgYCt0aGlzLmNvdW50X3Ioe2NvdW50OjB9LGUpKSx0aGlzLm9iakVuZCgpfSxlLm91dGxpbmUucmVuZGVySXRlbXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuY3R4LnBkZi5pbnRlcm5hbC5nZXRWZXJ0aWNhbENvb3JkaW5hdGVTdHJpbmcscj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgaT10LmNoaWxkcmVuW3JdO3RoaXMub2JqU3RhcnQoaSksdGhpcy5saW5lKGAvVGl0bGUgYCt0aGlzLm1ha2VTdHJpbmcoaS50aXRsZSkpLHRoaXMubGluZShgL1BhcmVudCBgK3RoaXMubWFrZVJlZih0KSkscj4wJiZ0aGlzLmxpbmUoYC9QcmV2IGArdGhpcy5tYWtlUmVmKHQuY2hpbGRyZW5bci0xXSkpLHI8dC5jaGlsZHJlbi5sZW5ndGgtMSYmdGhpcy5saW5lKGAvTmV4dCBgK3RoaXMubWFrZVJlZih0LmNoaWxkcmVuW3IrMV0pKSxpLmNoaWxkcmVuLmxlbmd0aD4wJiYodGhpcy5saW5lKGAvRmlyc3QgYCt0aGlzLm1ha2VSZWYoaS5jaGlsZHJlblswXSkpLHRoaXMubGluZShgL0xhc3QgYCt0aGlzLm1ha2VSZWYoaS5jaGlsZHJlbltpLmNoaWxkcmVuLmxlbmd0aC0xXSkpKTt2YXIgYT10aGlzLmNvdW50PXRoaXMuY291bnRfcih7Y291bnQ6MH0saSk7aWYoYT4wJiZ0aGlzLmxpbmUoYC9Db3VudCBgK2EpLGkub3B0aW9ucyYmaS5vcHRpb25zLnBhZ2VOdW1iZXIpe3ZhciBvPWUuaW50ZXJuYWwuZ2V0UGFnZUluZm8oaS5vcHRpb25zLnBhZ2VOdW1iZXIpO3RoaXMubGluZShgL0Rlc3QgW2Arby5vYmpJZCtgIDAgUiAvWFlaIDAgYCtuKDApK2AgMF1gKX10aGlzLm9iakVuZCgpfWZvcih2YXIgcz0wO3M8dC5jaGlsZHJlbi5sZW5ndGg7cysrKXRoaXMucmVuZGVySXRlbXModC5jaGlsZHJlbltzXSl9LGUub3V0bGluZS5saW5lPWZ1bmN0aW9uKGUpe3RoaXMuY3R4LnZhbCs9ZStgXHIKYH0sZS5vdXRsaW5lLm1ha2VSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQrYCAwIFJgfSxlLm91dGxpbmUubWFrZVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm5gKGArZS5pbnRlcm5hbC5wZGZFc2NhcGUodCkrYClgfSxlLm91dGxpbmUub2JqU3RhcnQ9ZnVuY3Rpb24oZSl7dGhpcy5jdHgudmFsKz1gXHIKYCtlLmlkK2AgMCBvYmpccgo8PFxyCmB9LGUub3V0bGluZS5vYmpFbmQ9ZnVuY3Rpb24oKXt0aGlzLmN0eC52YWwrPWA+PiBccgplbmRvYmpccgpgfSxlLm91dGxpbmUuY291bnRfcj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5jaGlsZHJlbi5sZW5ndGg7bisrKWUuY291bnQrKyx0aGlzLmNvdW50X3IoZSx0LmNoaWxkcmVuW25dKTtyZXR1cm4gZS5jb3VudH19XSl9KFouQVBJKSxmdW5jdGlvbihlKXt2YXIgdD1bMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OV07ZS5wcm9jZXNzSlBFRz1mdW5jdGlvbihlLG4scixpLGEsbyl7dmFyIHMsYz10aGlzLmRlY29kZS5EQ1RfREVDT0RFLGw9bnVsbDtpZih0eXBlb2YgZT09YHN0cmluZ2B8fHRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXIoZSl8fHRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXtzd2l0Y2goZT1hfHxlLGU9dGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlcihlKT9uZXcgVWludDhBcnJheShlKTplLHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuLHI9MjU2KmUuY2hhckNvZGVBdCg0KStlLmNoYXJDb2RlQXQoNSksaT1lLmxlbmd0aCxhPXt3aWR0aDowLGhlaWdodDowLG51bWNvbXBvbmVudHM6MX0sbz00O288aTtvKz0yKXtpZihvKz1yLHQuaW5kZXhPZihlLmNoYXJDb2RlQXQobysxKSkhPT0tMSl7bj0yNTYqZS5jaGFyQ29kZUF0KG8rNSkrZS5jaGFyQ29kZUF0KG8rNiksYT17d2lkdGg6MjU2KmUuY2hhckNvZGVBdChvKzcpK2UuY2hhckNvZGVBdChvKzgpLGhlaWdodDpuLG51bWNvbXBvbmVudHM6ZS5jaGFyQ29kZUF0KG8rOSl9O2JyZWFrfXI9MjU2KmUuY2hhckNvZGVBdChvKzIpK2UuY2hhckNvZGVBdChvKzMpfXJldHVybiBhfShlPXRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXJWaWV3KGUpP3RoaXMuX19hZGRpbWFnZV9fLmFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcoZSk6ZSkscy5udW1jb21wb25lbnRzKXtjYXNlIDE6bz10aGlzLmNvbG9yX3NwYWNlcy5ERVZJQ0VfR1JBWTticmVhaztjYXNlIDQ6bz10aGlzLmNvbG9yX3NwYWNlcy5ERVZJQ0VfQ01ZSzticmVhaztjYXNlIDM6bz10aGlzLmNvbG9yX3NwYWNlcy5ERVZJQ0VfUkdCfWw9e2RhdGE6ZSx3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCxjb2xvclNwYWNlOm8sYml0c1BlckNvbXBvbmVudDo4LGZpbHRlcjpjLGluZGV4Om4sYWxpYXM6cn19cmV0dXJuIGx9fShaLkFQSSksWi5BUEkucHJvY2Vzc1BORz1mdW5jdGlvbihlLHQsbixyKXtpZih0aGlzLl9fYWRkaW1hZ2VfXy5pc0FycmF5QnVmZmVyKGUpJiYoZT1uZXcgVWludDhBcnJheShlKSksdGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlclZpZXcoZSkpe3ZhciBpLGE9ZHMoZSx7Y2hlY2tDcmM6ITB9KSxvPWEud2lkdGgscz1hLmhlaWdodCxjPWEuY2hhbm5lbHMsbD1hLnBhbGV0dGUsdT1hLmRlcHRoO2k9bCYmYz09PTE/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUud2lkdGgsbj1lLmhlaWdodCxyPWUuZGF0YSxpPWUucGFsZXR0ZSxhPWUuZGVwdGgsbz0hMSxzPVtdLGM9W10sbD12b2lkIDAsdT0hMSxkPTAsZj0wO2Y8aS5sZW5ndGg7ZisrKXt2YXIgcD1GZShpW2ZdLDQpLG09cFswXSxoPXBbMV0sZz1wWzJdLF89cFszXTtzLnB1c2gobSxoLGcpLF8hPW51bGwmJihfPT09MD8oZCsrLGMubGVuZ3RoPDEmJmMucHVzaChmKSk6XzwyNTUmJih1PSEwKSl9aWYodXx8ZD4xKXtvPSEwLGM9dm9pZCAwO3ZhciB2PXQqbjtsPW5ldyBVaW50OEFycmF5KHYpO2Zvcih2YXIgeT1uZXcgRGF0YVZpZXcoci5idWZmZXIpLGI9MDtiPHY7YisrKXt2YXIgeD1GZShpW09oKHksYixhKV0sNClbM107bFtiXT14fX1lbHNlIGQ9PT0wJiYoYz12b2lkIDApO3JldHVybntjb2xvclNwYWNlOmBJbmRleGVkYCxjb2xvcnNQZXJQaXhlbDoxLHNNYXNrQml0c1BlckNvbXBvbmVudDpvPzg6dm9pZCAwLGNvbG9yQnl0ZXM6cixhbHBoYUJ5dGVzOmwsbmVlZFNNYXNrOm8scGFsZXR0ZTpzLG1hc2s6Y319KGEpOmM9PT0yfHxjPT09ND9mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5kYXRhLG49ZS53aWR0aCxyPWUuaGVpZ2h0LGk9ZS5jaGFubmVscyxhPWUuZGVwdGgsbz1pPT09Mj9gRGV2aWNlR3JheWA6YERldmljZVJHQmAscz1pLTEsYz1uKnIsbD1zLHU9YypsLGQ9MSpjLGY9TWF0aC5jZWlsKHUqYS84KSxwPU1hdGguY2VpbChkKmEvOCksbT1uZXcgVWludDhBcnJheShmKSxoPW5ldyBVaW50OEFycmF5KHApLGc9bmV3IERhdGFWaWV3KHQuYnVmZmVyKSxfPW5ldyBEYXRhVmlldyhtLmJ1ZmZlciksdj1uZXcgRGF0YVZpZXcoaC5idWZmZXIpLHk9ITEsYj0wO2I8YztiKyspe2Zvcih2YXIgeD1iKmksUz0wO1M8bDtTKyspa2goXyxPaChnLHgrUyxhKSxiKmwrUyxhKTt2YXIgQz1PaChnLHgrbCxhKTtDPCgxPDxhKS0xJiYoeT0hMCksa2godixDLDEqYixhKX1yZXR1cm57Y29sb3JTcGFjZTpvLGNvbG9yc1BlclBpeGVsOnMsc01hc2tCaXRzUGVyQ29tcG9uZW50Onk/YTp2b2lkIDAsY29sb3JCeXRlczptLGFscGhhQnl0ZXM6aCxuZWVkU01hc2s6eX19KGEpOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxuPWUuY2hhbm5lbHM9PT0xP2BEZXZpY2VHcmF5YDpgRGV2aWNlUkdCYDtyZXR1cm57Y29sb3JTcGFjZTpuLGNvbG9yc1BlclBpeGVsOm49PT1gRGV2aWNlR3JheWA/MTozLGNvbG9yQnl0ZXM6dCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxuPW5ldyBVaW50OEFycmF5KDIqdCkscj1uZXcgRGF0YVZpZXcobi5idWZmZXIsbi5ieXRlT2Zmc2V0LG4uYnl0ZUxlbmd0aCksaT0wO2k8dDtpKyspci5zZXRVaW50MTYoMippLGVbaV0sITEpO3JldHVybiBufSh0KTp0LG5lZWRTTWFzazohMX19KGEpO3ZhciBkLGYscCxtPWksaD1tLmNvbG9yU3BhY2UsZz1tLmNvbG9yc1BlclBpeGVsLF89bS5zTWFza0JpdHNQZXJDb21wb25lbnQsdj1tLmNvbG9yQnl0ZXMseT1tLmFscGhhQnl0ZXMsYj1tLm5lZWRTTWFzayx4PW0ucGFsZXR0ZSxTPW0ubWFzayxDPW51bGw7cmV0dXJuIHIhPT1aLkFQSS5pbWFnZV9jb21wcmVzc2lvbi5OT05FJiZ0eXBlb2YgTT09YGZ1bmN0aW9uYD8oQz1mdW5jdGlvbihlKXt2YXIgdDtzd2l0Y2goZSl7Y2FzZSBaLkFQSS5pbWFnZV9jb21wcmVzc2lvbi5GQVNUOnQ9MTE7YnJlYWs7Y2FzZSBaLkFQSS5pbWFnZV9jb21wcmVzc2lvbi5NRURJVU06dD0xMzticmVhaztjYXNlIFouQVBJLmltYWdlX2NvbXByZXNzaW9uLlNMT1c6dD0xNDticmVhaztkZWZhdWx0OnQ9MTJ9cmV0dXJuIHR9KHIpLGQ9dGhpcy5kZWNvZGUuRkxBVEVfREVDT0RFLGY9YC9QcmVkaWN0b3IgJHtDfSAvQ29sb3JzICR7Z30gL0JpdHNQZXJDb21wb25lbnQgJHt1fSAvQ29sdW1ucyAke299YCxlPWJoKHYsTWF0aC5jZWlsKG8qZyp1LzgpLGcsdSxyKSxiJiYocD1iaCh5LE1hdGguY2VpbChvKl8vOCksMSxfLHIpKSk6KGQ9dm9pZCAwLGY9dm9pZCAwLGU9dixiJiYocD15KSksKHRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXIoZSl8fHRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXJWaWV3KGUpKSYmKGU9dGhpcy5fX2FkZGltYWdlX18uYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhlKSksKHAmJnRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXIocCl8fHRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXJWaWV3KHApKSYmKHA9dGhpcy5fX2FkZGltYWdlX18uYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhwKSkse2FsaWFzOm4sZGF0YTplLGluZGV4OnQsZmlsdGVyOmQsZGVjb2RlUGFyYW1ldGVyczpmLHRyYW5zcGFyZW5jeTpTLHBhbGV0dGU6eCxzTWFzazpwLHByZWRpY3RvcjpDLHdpZHRoOm8saGVpZ2h0OnMsYml0c1BlckNvbXBvbmVudDp1LHNNYXNrQml0c1BlckNvbXBvbmVudDpfLGNvbG9yU3BhY2U6aH19fSxmdW5jdGlvbihlKXtlLnByb2Nlc3NHSUY4OUE9ZnVuY3Rpb24odCxuLHIsaSl7dmFyIGE9bmV3IGpoKHQpLG89YS53aWR0aCxzPWEuaGVpZ2h0LGM9W107YS5kZWNvZGVBbmRCbGl0RnJhbWVSR0JBKDAsYyk7dmFyIGw9e2RhdGE6Yyx3aWR0aDpvLGhlaWdodDpzfSx1PW5ldyBOaCgxMDApLmVuY29kZShsLDEwMCk7cmV0dXJuIGUucHJvY2Vzc0pQRUcuY2FsbCh0aGlzLHUsbixyLGkpfSxlLnByb2Nlc3NHSUY4N0E9ZS5wcm9jZXNzR0lGODlBfShaLkFQSSksUGgucHJvdG90eXBlLnBhcnNlSGVhZGVyPWZ1bmN0aW9uKCl7aWYodGhpcy5maWxlU2l6ZT10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5yZXNlcnZlZD10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5vZmZzZXQ9dGhpcy5kYXRhdi5nZXRVaW50MzIodGhpcy5wb3MsITApLHRoaXMucG9zKz00LHRoaXMuaGVhZGVyU2l6ZT10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy53aWR0aD10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5oZWlnaHQ9dGhpcy5kYXRhdi5nZXRJbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5wbGFuZXM9dGhpcy5kYXRhdi5nZXRVaW50MTYodGhpcy5wb3MsITApLHRoaXMucG9zKz0yLHRoaXMuYml0UFA9dGhpcy5kYXRhdi5nZXRVaW50MTYodGhpcy5wb3MsITApLHRoaXMucG9zKz0yLHRoaXMuY29tcHJlc3M9dGhpcy5kYXRhdi5nZXRVaW50MzIodGhpcy5wb3MsITApLHRoaXMucG9zKz00LHRoaXMucmF3U2l6ZT10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5ocj10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy52cj10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5jb2xvcnM9dGhpcy5kYXRhdi5nZXRVaW50MzIodGhpcy5wb3MsITApLHRoaXMucG9zKz00LHRoaXMuaW1wb3J0YW50Q29sb3JzPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLmJpdFBQPT09MTYmJnRoaXMuaXNfd2l0aF9hbHBoYSYmKHRoaXMuYml0UFA9MTUpLHRoaXMuYml0UFA8MTUpe3ZhciBlPXRoaXMuY29sb3JzPT09MD8xPDx0aGlzLmJpdFBQOnRoaXMuY29sb3JzO3RoaXMucGFsZXR0ZT1BcnJheShlKTtmb3IodmFyIHQ9MDt0PGU7dCsrKXt2YXIgbj10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLHI9dGhpcy5kYXRhdi5nZXRVaW50OCh0aGlzLnBvcysrLCEwKSxpPXRoaXMuZGF0YXYuZ2V0VWludDgodGhpcy5wb3MrKywhMCksYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApO3RoaXMucGFsZXR0ZVt0XT17cmVkOmksZ3JlZW46cixibHVlOm4scXVhZDphfX19dGhpcy5oZWlnaHQ8MCYmKHRoaXMuaGVpZ2h0Kj0tMSx0aGlzLmJvdHRvbV91cD0hMSl9LFBoLnByb3RvdHlwZS5wYXJzZUJHUj1mdW5jdGlvbigpe3RoaXMucG9zPXRoaXMub2Zmc2V0O3ZhciBlPWBiaXRgK3RoaXMuYml0UFAsdD10aGlzLndpZHRoKnRoaXMuaGVpZ2h0KjQ7aWYodD41MzY4NzA5MTIpdGhyb3cgRXJyb3IoYEltYWdlIGRpbWVuc2lvbnMgZXhjZWVkIDUxMk1CLCB3aGljaCBpcyB0b28gbGFyZ2UuYCk7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHQpO3RyeXt0aGlzW2VdKCl9Y2F0Y2goZSl7emgubG9nKGBiaXQgZGVjb2RlIGVycm9yOmArZSl9fSxQaC5wcm90b3R5cGUuYml0MT1mdW5jdGlvbigpe3ZhciBlLHQ9TWF0aC5jZWlsKHRoaXMud2lkdGgvOCksbj10JTQ7Zm9yKGU9dGhpcy5oZWlnaHQtMTtlPj0wO2UtLSl7Zm9yKHZhciByPXRoaXMuYm90dG9tX3VwP2U6dGhpcy5oZWlnaHQtMS1lLGk9MDtpPHQ7aSsrKWZvcih2YXIgYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLG89cip0aGlzLndpZHRoKjQrOCppKjQscz0wO3M8OCYmOCppK3M8dGhpcy53aWR0aDtzKyspe3ZhciBjPXRoaXMucGFsZXR0ZVthPj43LXMmMV07dGhpcy5kYXRhW28rNCpzXT1jLmJsdWUsdGhpcy5kYXRhW28rNCpzKzFdPWMuZ3JlZW4sdGhpcy5kYXRhW28rNCpzKzJdPWMucmVkLHRoaXMuZGF0YVtvKzQqcyszXT0yNTV9biE9PTAmJih0aGlzLnBvcys9NC1uKX19LFBoLnByb3RvdHlwZS5iaXQ0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPU1hdGguY2VpbCh0aGlzLndpZHRoLzIpLHQ9ZSU0LG49dGhpcy5oZWlnaHQtMTtuPj0wO24tLSl7Zm9yKHZhciByPXRoaXMuYm90dG9tX3VwP246dGhpcy5oZWlnaHQtMS1uLGk9MDtpPGU7aSsrKXt2YXIgYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLG89cip0aGlzLndpZHRoKjQrMippKjQscz1hPj40LGM9MTUmYSxsPXRoaXMucGFsZXR0ZVtzXTtpZih0aGlzLmRhdGFbb109bC5ibHVlLHRoaXMuZGF0YVtvKzFdPWwuZ3JlZW4sdGhpcy5kYXRhW28rMl09bC5yZWQsdGhpcy5kYXRhW28rM109MjU1LDIqaSsxPj10aGlzLndpZHRoKWJyZWFrO2w9dGhpcy5wYWxldHRlW2NdLHRoaXMuZGF0YVtvKzRdPWwuYmx1ZSx0aGlzLmRhdGFbbys0KzFdPWwuZ3JlZW4sdGhpcy5kYXRhW28rNCsyXT1sLnJlZCx0aGlzLmRhdGFbbys0KzNdPTI1NX10IT09MCYmKHRoaXMucG9zKz00LXQpfX0sUGgucHJvdG90eXBlLmJpdDg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy53aWR0aCU0LHQ9dGhpcy5oZWlnaHQtMTt0Pj0wO3QtLSl7Zm9yKHZhciBuPXRoaXMuYm90dG9tX3VwP3Q6dGhpcy5oZWlnaHQtMS10LHI9MDtyPHRoaXMud2lkdGg7cisrKXt2YXIgaT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLGE9bip0aGlzLndpZHRoKjQrNCpyO2lmKGk8dGhpcy5wYWxldHRlLmxlbmd0aCl7dmFyIG89dGhpcy5wYWxldHRlW2ldO3RoaXMuZGF0YVthXT1vLnJlZCx0aGlzLmRhdGFbYSsxXT1vLmdyZWVuLHRoaXMuZGF0YVthKzJdPW8uYmx1ZSx0aGlzLmRhdGFbYSszXT0yNTV9ZWxzZSB0aGlzLmRhdGFbYV09MjU1LHRoaXMuZGF0YVthKzFdPTI1NSx0aGlzLmRhdGFbYSsyXT0yNTUsdGhpcy5kYXRhW2ErM109MjU1fWUhPT0wJiYodGhpcy5wb3MrPTQtZSl9fSxQaC5wcm90b3R5cGUuYml0MTU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy53aWR0aCUzLHQ9MzEsbj10aGlzLmhlaWdodC0xO24+PTA7bi0tKXtmb3IodmFyIHI9dGhpcy5ib3R0b21fdXA/bjp0aGlzLmhlaWdodC0xLW4saT0wO2k8dGhpcy53aWR0aDtpKyspe3ZhciBhPXRoaXMuZGF0YXYuZ2V0VWludDE2KHRoaXMucG9zLCEwKTt0aGlzLnBvcys9Mjt2YXIgbz0oYSZ0KS90KjI1NXwwLHM9KGE+PjUmdCkvdCoyNTV8MCxjPShhPj4xMCZ0KS90KjI1NXwwLGw9YT4+MTU/MjU1OjAsdT1yKnRoaXMud2lkdGgqNCs0Kmk7dGhpcy5kYXRhW3VdPWMsdGhpcy5kYXRhW3UrMV09cyx0aGlzLmRhdGFbdSsyXT1vLHRoaXMuZGF0YVt1KzNdPWx9dGhpcy5wb3MrPWV9fSxQaC5wcm90b3R5cGUuYml0MTY9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy53aWR0aCUzLHQ9MzEsbj02MyxyPXRoaXMuaGVpZ2h0LTE7cj49MDtyLS0pe2Zvcih2YXIgaT10aGlzLmJvdHRvbV91cD9yOnRoaXMuaGVpZ2h0LTEtcixhPTA7YTx0aGlzLndpZHRoO2ErKyl7dmFyIG89dGhpcy5kYXRhdi5nZXRVaW50MTYodGhpcy5wb3MsITApO3RoaXMucG9zKz0yO3ZhciBzPShvJnQpL3QqMjU1fDAsYz0obz4+NSZuKS9uKjI1NXwwLGw9KG8+PjExKS90KjI1NXwwLHU9aSp0aGlzLndpZHRoKjQrNCphO3RoaXMuZGF0YVt1XT1sLHRoaXMuZGF0YVt1KzFdPWMsdGhpcy5kYXRhW3UrMl09cyx0aGlzLmRhdGFbdSszXT0yNTV9dGhpcy5wb3MrPWV9fSxQaC5wcm90b3R5cGUuYml0MjQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5oZWlnaHQtMTtlPj0wO2UtLSl7Zm9yKHZhciB0PXRoaXMuYm90dG9tX3VwP2U6dGhpcy5oZWlnaHQtMS1lLG49MDtuPHRoaXMud2lkdGg7bisrKXt2YXIgcj10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLGk9dGhpcy5kYXRhdi5nZXRVaW50OCh0aGlzLnBvcysrLCEwKSxhPXRoaXMuZGF0YXYuZ2V0VWludDgodGhpcy5wb3MrKywhMCksbz10KnRoaXMud2lkdGgqNCs0Km47dGhpcy5kYXRhW29dPWEsdGhpcy5kYXRhW28rMV09aSx0aGlzLmRhdGFbbysyXT1yLHRoaXMuZGF0YVtvKzNdPTI1NX10aGlzLnBvcys9dGhpcy53aWR0aCU0fX0sUGgucHJvdG90eXBlLmJpdDMyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaGVpZ2h0LTE7ZT49MDtlLS0pZm9yKHZhciB0PXRoaXMuYm90dG9tX3VwP2U6dGhpcy5oZWlnaHQtMS1lLG49MDtuPHRoaXMud2lkdGg7bisrKXt2YXIgcj10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLGk9dGhpcy5kYXRhdi5nZXRVaW50OCh0aGlzLnBvcysrLCEwKSxhPXRoaXMuZGF0YXYuZ2V0VWludDgodGhpcy5wb3MrKywhMCksbz10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLHM9dCp0aGlzLndpZHRoKjQrNCpuO3RoaXMuZGF0YVtzXT1hLHRoaXMuZGF0YVtzKzFdPWksdGhpcy5kYXRhW3MrMl09cix0aGlzLmRhdGFbcyszXT1vfX0sUGgucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfSxmdW5jdGlvbihlKXtlLnByb2Nlc3NCTVA9ZnVuY3Rpb24odCxuLHIsaSl7dmFyIGE9bmV3IFBoKHQsITEpLG89YS53aWR0aCxzPWEuaGVpZ2h0LGM9e2RhdGE6YS5nZXREYXRhKCksd2lkdGg6byxoZWlnaHQ6c30sbD1uZXcgTmgoMTAwKS5lbmNvZGUoYywxMDApO3JldHVybiBlLnByb2Nlc3NKUEVHLmNhbGwodGhpcyxsLG4scixpKX19KFouQVBJKSxGaC5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LGZ1bmN0aW9uKGUpe2UucHJvY2Vzc1dFQlA9ZnVuY3Rpb24odCxuLHIsaSl7dmFyIGE9bmV3IEZoKHQpLG89YS53aWR0aCxzPWEuaGVpZ2h0LGM9e2RhdGE6YS5nZXREYXRhKCksd2lkdGg6byxoZWlnaHQ6c30sbD1uZXcgTmgoMTAwKS5lbmNvZGUoYywxMDApO3JldHVybiBlLnByb2Nlc3NKUEVHLmNhbGwodGhpcyxsLG4scixpKX19KFouQVBJKSxaLkFQSS5wcm9jZXNzUkdCQT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPWUuZGF0YSxpPXIubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoaS80KjMpLG89bmV3IFVpbnQ4QXJyYXkoaS80KSxzPTAsYz0wLGw9MDtsPGk7bCs9NCl7dmFyIHU9cltsXSxkPXJbbCsxXSxmPXJbbCsyXSxwPXJbbCszXTthW3MrK109dSxhW3MrK109ZCxhW3MrK109ZixvW2MrK109cH12YXIgbT10aGlzLl9fYWRkaW1hZ2VfXy5hcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKGEpO3JldHVybnthbHBoYTp0aGlzLl9fYWRkaW1hZ2VfXy5hcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKG8pLGRhdGE6bSxpbmRleDp0LGFsaWFzOm4sY29sb3JTcGFjZTpgRGV2aWNlUkdCYCxiaXRzUGVyQ29tcG9uZW50Ojgsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fSxaLkFQSS5zZXRMYW5ndWFnZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzPT09dm9pZCAwJiYodGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzPXt9LHRoaXMuaW50ZXJuYWwubGFuZ3VhZ2VTZXR0aW5ncy5pc1N1YnNjcmliZWQ9ITEpLHthZjpgQWZyaWthYW5zYCxzcTpgQWxiYW5pYW5gLGFyOmBBcmFiaWMgKFN0YW5kYXJkKWAsImFyLURaIjpgQXJhYmljIChBbGdlcmlhKWAsImFyLUJIIjpgQXJhYmljIChCYWhyYWluKWAsImFyLUVHIjpgQXJhYmljIChFZ3lwdClgLCJhci1JUSI6YEFyYWJpYyAoSXJhcSlgLCJhci1KTyI6YEFyYWJpYyAoSm9yZGFuKWAsImFyLUtXIjpgQXJhYmljIChLdXdhaXQpYCwiYXItTEIiOmBBcmFiaWMgKExlYmFub24pYCwiYXItTFkiOmBBcmFiaWMgKExpYnlhKWAsImFyLU1BIjpgQXJhYmljIChNb3JvY2NvKWAsImFyLU9NIjpgQXJhYmljIChPbWFuKWAsImFyLVFBIjpgQXJhYmljIChRYXRhcilgLCJhci1TQSI6YEFyYWJpYyAoU2F1ZGkgQXJhYmlhKWAsImFyLVNZIjpgQXJhYmljIChTeXJpYSlgLCJhci1UTiI6YEFyYWJpYyAoVHVuaXNpYSlgLCJhci1BRSI6YEFyYWJpYyAoVS5BLkUuKWAsImFyLVlFIjpgQXJhYmljIChZZW1lbilgLGFuOmBBcmFnb25lc2VgLGh5OmBBcm1lbmlhbmAsYXM6YEFzc2FtZXNlYCxhc3Q6YEFzdHVyaWFuYCxhejpgQXplcmJhaWphbmlgLGV1OmBCYXNxdWVgLGJlOmBCZWxhcnVzaWFuYCxibjpgQmVuZ2FsaWAsYnM6YEJvc25pYW5gLGJyOmBCcmV0b25gLGJnOmBCdWxnYXJpYW5gLG15OmBCdXJtZXNlYCxjYTpgQ2F0YWxhbmAsY2g6YENoYW1vcnJvYCxjZTpgQ2hlY2hlbmAsemg6YENoaW5lc2VgLCJ6aC1ISyI6YENoaW5lc2UgKEhvbmcgS29uZylgLCJ6aC1DTiI6YENoaW5lc2UgKFBSQylgLCJ6aC1TRyI6YENoaW5lc2UgKFNpbmdhcG9yZSlgLCJ6aC1UVyI6YENoaW5lc2UgKFRhaXdhbilgLGN2OmBDaHV2YXNoYCxjbzpgQ29yc2ljYW5gLGNyOmBDcmVlYCxocjpgQ3JvYXRpYW5gLGNzOmBDemVjaGAsZGE6YERhbmlzaGAsbmw6YER1dGNoIChTdGFuZGFyZClgLCJubC1CRSI6YER1dGNoIChCZWxnaWFuKWAsZW46YEVuZ2xpc2hgLCJlbi1BVSI6YEVuZ2xpc2ggKEF1c3RyYWxpYSlgLCJlbi1CWiI6YEVuZ2xpc2ggKEJlbGl6ZSlgLCJlbi1DQSI6YEVuZ2xpc2ggKENhbmFkYSlgLCJlbi1JRSI6YEVuZ2xpc2ggKElyZWxhbmQpYCwiZW4tSk0iOmBFbmdsaXNoIChKYW1haWNhKWAsImVuLU5aIjpgRW5nbGlzaCAoTmV3IFplYWxhbmQpYCwiZW4tUEgiOmBFbmdsaXNoIChQaGlsaXBwaW5lcylgLCJlbi1aQSI6YEVuZ2xpc2ggKFNvdXRoIEFmcmljYSlgLCJlbi1UVCI6YEVuZ2xpc2ggKFRyaW5pZGFkICYgVG9iYWdvKWAsImVuLUdCIjpgRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pYCwiZW4tVVMiOmBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKWAsImVuLVpXIjpgRW5nbGlzaCAoWmltYmFid2UpYCxlbzpgRXNwZXJhbnRvYCxldDpgRXN0b25pYW5gLGZvOmBGYWVyb2VzZWAsZmo6YEZpamlhbmAsZmk6YEZpbm5pc2hgLGZyOmBGcmVuY2ggKFN0YW5kYXJkKWAsImZyLUJFIjpgRnJlbmNoIChCZWxnaXVtKWAsImZyLUNBIjpgRnJlbmNoIChDYW5hZGEpYCwiZnItRlIiOmBGcmVuY2ggKEZyYW5jZSlgLCJmci1MVSI6YEZyZW5jaCAoTHV4ZW1ib3VyZylgLCJmci1NQyI6YEZyZW5jaCAoTW9uYWNvKWAsImZyLUNIIjpgRnJlbmNoIChTd2l0emVybGFuZClgLGZ5OmBGcmlzaWFuYCxmdXI6YEZyaXVsaWFuYCxnZDpgR2FlbGljIChTY290cylgLCJnZC1JRSI6YEdhZWxpYyAoSXJpc2gpYCxnbDpgR2FsYWNpYW5gLGthOmBHZW9yZ2lhbmAsZGU6YEdlcm1hbiAoU3RhbmRhcmQpYCwiZGUtQVQiOmBHZXJtYW4gKEF1c3RyaWEpYCwiZGUtREUiOmBHZXJtYW4gKEdlcm1hbnkpYCwiZGUtTEkiOmBHZXJtYW4gKExpZWNodGVuc3RlaW4pYCwiZGUtTFUiOmBHZXJtYW4gKEx1eGVtYm91cmcpYCwiZGUtQ0giOmBHZXJtYW4gKFN3aXR6ZXJsYW5kKWAsZWw6YEdyZWVrYCxndTpgR3VqdXJhdGlgLGh0OmBIYWl0aWFuYCxoZTpgSGVicmV3YCxoaTpgSGluZGlgLGh1OmBIdW5nYXJpYW5gLGlzOmBJY2VsYW5kaWNgLGlkOmBJbmRvbmVzaWFuYCxpdTpgSW51a3RpdHV0YCxnYTpgSXJpc2hgLGl0OmBJdGFsaWFuIChTdGFuZGFyZClgLCJpdC1DSCI6YEl0YWxpYW4gKFN3aXR6ZXJsYW5kKWAsamE6YEphcGFuZXNlYCxrbjpgS2FubmFkYWAsa3M6YEthc2htaXJpYCxrazpgS2F6YWtoYCxrbTpgS2htZXJgLGt5OmBLaXJnaGl6YCx0bGg6YEtsaW5nb25gLGtvOmBLb3JlYW5gLCJrby1LUCI6YEtvcmVhbiAoTm9ydGggS29yZWEpYCwia28tS1IiOmBLb3JlYW4gKFNvdXRoIEtvcmVhKWAsbGE6YExhdGluYCxsdjpgTGF0dmlhbmAsbHQ6YExpdGh1YW5pYW5gLGxiOmBMdXhlbWJvdXJnaXNoYCxtazpgTm9ydGggTWFjZWRvbmlhYCxtczpgTWFsYXlgLG1sOmBNYWxheWFsYW1gLG10OmBNYWx0ZXNlYCxtaTpgTWFvcmlgLG1yOmBNYXJhdGhpYCxtbzpgTW9sZGF2aWFuYCxudjpgTmF2YWpvYCxuZzpgTmRvbmdhYCxuZTpgTmVwYWxpYCxubzpgTm9yd2VnaWFuYCxuYjpgTm9yd2VnaWFuIChCb2ttYWwpYCxubjpgTm9yd2VnaWFuIChOeW5vcnNrKWAsb2M6YE9jY2l0YW5gLG9yOmBPcml5YWAsb206YE9yb21vYCxmYTpgUGVyc2lhbmAsImZhLUlSIjpgUGVyc2lhbi9JcmFuYCxwbDpgUG9saXNoYCxwdDpgUG9ydHVndWVzZWAsInB0LUJSIjpgUG9ydHVndWVzZSAoQnJhemlsKWAscGE6YFB1bmphYmlgLCJwYS1JTiI6YFB1bmphYmkgKEluZGlhKWAsInBhLVBLIjpgUHVuamFiaSAoUGFraXN0YW4pYCxxdTpgUXVlY2h1YWAscm06YFJoYWV0by1Sb21hbmljYCxybzpgUm9tYW5pYW5gLCJyby1NTyI6YFJvbWFuaWFuIChNb2xkYXZpYSlgLHJ1OmBSdXNzaWFuYCwicnUtTU8iOmBSdXNzaWFuIChNb2xkYXZpYSlgLHN6OmBTYW1pIChMYXBwaXNoKWAsc2c6YFNhbmdvYCxzYTpgU2Fuc2tyaXRgLHNjOmBTYXJkaW5pYW5gLHNkOmBTaW5kaGlgLHNpOmBTaW5naGFsZXNlYCxzcjpgU2VyYmlhbmAsc2s6YFNsb3Zha2Asc2w6YFNsb3ZlbmlhbmAsc286YFNvbWFuaWAsc2I6YFNvcmJpYW5gLGVzOmBTcGFuaXNoYCwiZXMtQVIiOmBTcGFuaXNoIChBcmdlbnRpbmEpYCwiZXMtQk8iOmBTcGFuaXNoIChCb2xpdmlhKWAsImVzLUNMIjpgU3BhbmlzaCAoQ2hpbGUpYCwiZXMtQ08iOmBTcGFuaXNoIChDb2xvbWJpYSlgLCJlcy1DUiI6YFNwYW5pc2ggKENvc3RhIFJpY2EpYCwiZXMtRE8iOmBTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpYCwiZXMtRUMiOmBTcGFuaXNoIChFY3VhZG9yKWAsImVzLVNWIjpgU3BhbmlzaCAoRWwgU2FsdmFkb3IpYCwiZXMtR1QiOmBTcGFuaXNoIChHdWF0ZW1hbGEpYCwiZXMtSE4iOmBTcGFuaXNoIChIb25kdXJhcylgLCJlcy1NWCI6YFNwYW5pc2ggKE1leGljbylgLCJlcy1OSSI6YFNwYW5pc2ggKE5pY2FyYWd1YSlgLCJlcy1QQSI6YFNwYW5pc2ggKFBhbmFtYSlgLCJlcy1QWSI6YFNwYW5pc2ggKFBhcmFndWF5KWAsImVzLVBFIjpgU3BhbmlzaCAoUGVydSlgLCJlcy1QUiI6YFNwYW5pc2ggKFB1ZXJ0byBSaWNvKWAsImVzLUVTIjpgU3BhbmlzaCAoU3BhaW4pYCwiZXMtVVkiOmBTcGFuaXNoIChVcnVndWF5KWAsImVzLVZFIjpgU3BhbmlzaCAoVmVuZXp1ZWxhKWAsc3g6YFN1dHVgLHN3OmBTd2FoaWxpYCxzdjpgU3dlZGlzaGAsInN2LUZJIjpgU3dlZGlzaCAoRmlubGFuZClgLCJzdi1TViI6YFN3ZWRpc2ggKFN3ZWRlbilgLHRhOmBUYW1pbGAsdHQ6YFRhdGFyYCx0ZTpgVGVsdWdhYCx0aDpgVGhhaWAsdGlnOmBUaWdyZWAsdHM6YFRzb25nYWAsdG46YFRzd2FuYWAsdHI6YFR1cmtpc2hgLHRrOmBUdXJrbWVuYCx1azpgVWtyYWluaWFuYCxoc2I6YFVwcGVyIFNvcmJpYW5gLHVyOmBVcmR1YCx2ZTpgVmVuZGFgLHZpOmBWaWV0bmFtZXNlYCx2bzpgVm9sYXB1a2Asd2E6YFdhbGxvb25gLGN5OmBXZWxzaGAseGg6YFhob3NhYCxqaTpgWWlkZGlzaGAsenU6YFp1bHVgfVtlXSE9PXZvaWQgMCYmKHRoaXMuaW50ZXJuYWwubGFuZ3VhZ2VTZXR0aW5ncy5sYW5ndWFnZUNvZGU9ZSwhMT09PXRoaXMuaW50ZXJuYWwubGFuZ3VhZ2VTZXR0aW5ncy5pc1N1YnNjcmliZWQmJih0aGlzLmludGVybmFsLmV2ZW50cy5zdWJzY3JpYmUoYHB1dENhdGFsb2dgLGZ1bmN0aW9uKCl7dGhpcy5pbnRlcm5hbC53cml0ZShgL0xhbmcgKGArdGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzLmxhbmd1YWdlQ29kZStgKWApfSksdGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzLmlzU3Vic2NyaWJlZD0hMCkpLHRoaXN9LEJnPVouQVBJLFZnPUJnLmdldENoYXJXaWR0aHNBcnJheT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0odHx8PXt9KS5mb250fHx0aGlzLmludGVybmFsLmdldEZvbnQoKSxhPXQuZm9udFNpemV8fHRoaXMuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSxvPXQuY2hhclNwYWNlfHx0aGlzLmludGVybmFsLmdldENoYXJTcGFjZSgpLHM9dC53aWR0aHM/dC53aWR0aHM6aS5tZXRhZGF0YS5Vbmljb2RlLndpZHRocyxjPXMuZm9mP3MuZm9mOjEsbD10Lmtlcm5pbmc/dC5rZXJuaW5nOmkubWV0YWRhdGEuVW5pY29kZS5rZXJuaW5nLHU9bC5mb2Y/bC5mb2Y6MSxkPSExIT09dC5kb0tlcm5pbmcsZj0wLHA9ZS5sZW5ndGgsbT0wLGg9c1swXXx8YyxnPVtdO2ZvcihuPTA7bjxwO24rKylyPWUuY2hhckNvZGVBdChuKSx0eXBlb2YgaS5tZXRhZGF0YS53aWR0aE9mU3RyaW5nPT1gZnVuY3Rpb25gP2cucHVzaCgoaS5tZXRhZGF0YS53aWR0aE9mR2x5cGgoaS5tZXRhZGF0YS5jaGFyYWN0ZXJUb0dseXBoKHIpKSsxZTMvYSpvfHwwKS8xZTMpOihmPWQmJkEobFtyXSk9PT1gb2JqZWN0YCYmIWlzTmFOKHBhcnNlSW50KGxbcl1bbV0sMTApKT9sW3JdW21dL3U6MCxnLnB1c2goKHNbcl18fGgpL2MrZikpLG09cjtyZXR1cm4gZ30sSGc9QmcuZ2V0U3RyaW5nVW5pdFdpZHRoPWZ1bmN0aW9uKGUsdCl7dmFyIG49KHR8fD17fSkuZm9udFNpemV8fHRoaXMuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSxyPXQuZm9udHx8dGhpcy5pbnRlcm5hbC5nZXRGb250KCksaT10LmNoYXJTcGFjZXx8dGhpcy5pbnRlcm5hbC5nZXRDaGFyU3BhY2UoKTtyZXR1cm4gQmcucHJvY2Vzc0FyYWJpYyYmKGU9QmcucHJvY2Vzc0FyYWJpYyhlKSksdHlwZW9mIHIubWV0YWRhdGEud2lkdGhPZlN0cmluZz09YGZ1bmN0aW9uYD9yLm1ldGFkYXRhLndpZHRoT2ZTdHJpbmcoZSxuLGkpL246VmcuYXBwbHkodGhpcyxhcmd1bWVudHMpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9LDApfSxVZz1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9W10sYT0wLG89ZS5sZW5ndGgscz0wO2EhPT1vJiZzK3RbYV08bjspcys9dFthXSxhKys7aS5wdXNoKGUuc2xpY2UoMCxhKSk7dmFyIGM9YTtmb3Iocz0wO2EhPT1vOylzK3RbYV0+ciYmKGkucHVzaChlLnNsaWNlKGMsYSkpLHM9MCxjPWEpLHMrPXRbYV0sYSsrO3JldHVybiBjIT09YSYmaS5wdXNoKGUuc2xpY2UoYyxhKSksaX0sV2c9ZnVuY3Rpb24oZSx0LG4pe258fD17fTt2YXIgcixpLGEsbyxzLGMsbCx1PVtdLGQ9W3VdLGY9bi50ZXh0SW5kZW50fHwwLHA9MCxtPTAsaD1lLnNwbGl0KGAgYCksZz1WZy5hcHBseSh0aGlzLFtgIGAsbl0pWzBdO2lmKGM9bi5saW5lSW5kZW50PT09LTE/aFswXS5sZW5ndGgrMjpuLmxpbmVJbmRlbnR8fDApe3ZhciBfPUFycmF5KGMpLmpvaW4oYCBgKSx2PVtdO2gubWFwKGZ1bmN0aW9uKGUpeyhlPWUuc3BsaXQoL1xzKlxuLykpLmxlbmd0aD4xP3Y9di5jb25jYXQoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4odCYmZS5sZW5ndGg/YApgOmBgKStlfSkpOnYucHVzaChlWzBdKX0pLGg9dixjPUhnLmFwcGx5KHRoaXMsW18sbl0pfWZvcihhPTAsbz1oLmxlbmd0aDthPG87YSsrKXt2YXIgeT0wO2lmKHI9aFthXSxjJiZyWzBdPT1gCmAmJihyPXIuc3Vic3RyKDEpLHk9MSksZitwKyhtPShpPVZnLmFwcGx5KHRoaXMsW3Isbl0pKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSwwKSk+dHx8eSl7aWYobT50KXtmb3Iocz1VZy5hcHBseSh0aGlzLFtyLGksdC0oZitwKSx0XSksdS5wdXNoKHMuc2hpZnQoKSksdT1bcy5wb3AoKV07cy5sZW5ndGg7KWQucHVzaChbcy5zaGlmdCgpXSk7bT1pLnNsaWNlKHIubGVuZ3RoLSh1WzBdP3VbMF0ubGVuZ3RoOjApKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSwwKX1lbHNlIHU9W3JdO2QucHVzaCh1KSxmPW0rYyxwPWd9ZWxzZSB1LnB1c2gociksZis9cCttLHA9Z31yZXR1cm4gbD1jP2Z1bmN0aW9uKGUsdCl7cmV0dXJuKHQ/XzpgYCkrZS5qb2luKGAgYCl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oYCBgKX0sZC5tYXAobCl9LEJnLnNwbGl0VGV4dFRvU2l6ZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaT0obnx8PXt9KS5mb250U2l6ZXx8dGhpcy5pbnRlcm5hbC5nZXRGb250U2l6ZSgpLGE9ZnVuY3Rpb24oZSl7aWYoZS53aWR0aHMmJmUua2VybmluZylyZXR1cm57d2lkdGhzOmUud2lkdGhzLGtlcm5pbmc6ZS5rZXJuaW5nfTt2YXIgdD10aGlzLmludGVybmFsLmdldEZvbnQoZS5mb250TmFtZSxlLmZvbnRTdHlsZSksbj1gVW5pY29kZWA7cmV0dXJuIHQubWV0YWRhdGFbbl0/e3dpZHRoczp0Lm1ldGFkYXRhW25dLndpZHRoc3x8ezA6MX0sa2VybmluZzp0Lm1ldGFkYXRhW25dLmtlcm5pbmd8fHt9fTp7Zm9udDp0Lm1ldGFkYXRhLGZvbnRTaXplOnRoaXMuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSxjaGFyU3BhY2U6dGhpcy5pbnRlcm5hbC5nZXRDaGFyU3BhY2UoKX19LmNhbGwodGhpcyxuKTtyPUFycmF5LmlzQXJyYXkoZSk/ZTpTdHJpbmcoZSkuc3BsaXQoL1xyP1xuLyk7dmFyIG89MSp0aGlzLmludGVybmFsLnNjYWxlRmFjdG9yKnQvaTthLnRleHRJbmRlbnQ9bi50ZXh0SW5kZW50PzEqbi50ZXh0SW5kZW50KnRoaXMuaW50ZXJuYWwuc2NhbGVGYWN0b3IvaTowLGEubGluZUluZGVudD1uLmxpbmVJbmRlbnQ7dmFyIHMsYyxsPVtdO2ZvcihzPTAsYz1yLmxlbmd0aDtzPGM7cysrKWw9bC5jb25jYXQoV2cuYXBwbHkodGhpcyxbcltzXSxvLGFdKSk7cmV0dXJuIGx9LGZ1bmN0aW9uKGUpe2UuX19mb250bWV0cmljc19fPWUuX19mb250bWV0cmljc19ffHx7fTtmb3IodmFyIHQ9YDAxMjM0NTY3ODlhYmNkZWZgLG49YGtsbW5vcHFyc3R1dnd4eXpgLHI9e30saT17fSxhPTA7YTwxNjthKyspcltuW2FdXT10W2FdLGlbdFthXV09blthXTt2YXIgbz1mdW5jdGlvbihlKXtyZXR1cm5gMHhgK3BhcnNlSW50KGUsMTApLnRvU3RyaW5nKDE2KX0scz1lLl9fZm9udG1ldHJpY3NfXy5jb21wcmVzcz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsYSxjPVtge2BdO2Zvcih2YXIgbCBpbiBlKXtpZih0PWVbbF0saXNOYU4ocGFyc2VJbnQobCwxMCkpP249YCdgK2wrYCdgOihsPXBhcnNlSW50KGwsMTApLG49KG49byhsKS5zbGljZSgyKSkuc2xpY2UoMCwtMSkraVtuLnNsaWNlKC0xKV0pLHR5cGVvZiB0PT1gbnVtYmVyYCl0PDA/KHI9byh0KS5zbGljZSgzKSxhPWAtYCk6KHI9byh0KS5zbGljZSgyKSxhPWBgKSxyPWErci5zbGljZSgwLC0xKStpW3Iuc2xpY2UoLTEpXTtlbHNle2lmKEEodCkhPT1gb2JqZWN0YCl0aHJvdyBFcnJvcihgRG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdmFsdWUgdHlwZSBgK0EodCkrYC5gKTtyPXModCl9Yy5wdXNoKG4rcil9cmV0dXJuIGMucHVzaChgfWApLGMuam9pbihgYCl9LGM9ZS5fX2ZvbnRtZXRyaWNzX18udW5jb21wcmVzcz1mdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgRXJyb3IoYEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIHVuY29tcHJlc3MuYCk7Zm9yKHZhciB0LG4saSxhLG89e30scz0xLGM9byxsPVtdLHU9YGAsZD1gYCxmPWUubGVuZ3RoLTEscD0xO3A8ZjtwKz0xKShhPWVbcF0pPT1gJ2A/dD8oaT10LmpvaW4oYGApLHQ9dm9pZCAwKTp0PVtdOnQ/dC5wdXNoKGEpOmE9PWB7YD8obC5wdXNoKFtjLGldKSxjPXt9LGk9dm9pZCAwKTphPT1gfWA/KChuPWwucG9wKCkpWzBdW25bMV1dPWMsaT12b2lkIDAsYz1uWzBdKTphPT1gLWA/cz0tMTppPT09dm9pZCAwP3IuaGFzT3duUHJvcGVydHkoYSk/KHUrPXJbYV0saT1wYXJzZUludCh1LDE2KSpzLHM9MSx1PWBgKTp1Kz1hOnIuaGFzT3duUHJvcGVydHkoYSk/KGQrPXJbYV0sY1tpXT1wYXJzZUludChkLDE2KSpzLHM9MSxpPXZvaWQgMCxkPWBgKTpkKz1hO3JldHVybiBvfSxsPXtjb2RlUGFnZXM6W2BXaW5BbnNpRW5jb2RpbmdgXSxXaW5BbnNpRW5jb2Rpbmc6YyhgezE5bThuMjAxbjlxMjAxbzlyMjAxczlsMjAxdDltMjAxdThtMjAxdzluMjAxeDlvMjAxeThvMjAyazhxMjAybDhyMjAybTlwMjAycThwMjBhdzhrMjAzazh0MjAzdDh2MjAzdTl2MmNxOHMyMTJtOXQxNW04dzE1bjl3MmR3OXMxNms4dTE2bDl1MTdzOXoxN3g4eTE3eTl5fWApfSx1PXtVbmljb2RlOntDb3VyaWVyOmwsIkNvdXJpZXItQm9sZCI6bCwiQ291cmllci1Cb2xkT2JsaXF1ZSI6bCwiQ291cmllci1PYmxpcXVlIjpsLEhlbHZldGljYTpsLCJIZWx2ZXRpY2EtQm9sZCI6bCwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjpsLCJIZWx2ZXRpY2EtT2JsaXF1ZSI6bCwiVGltZXMtUm9tYW4iOmwsIlRpbWVzLUJvbGQiOmwsIlRpbWVzLUJvbGRJdGFsaWMiOmwsIlRpbWVzLUl0YWxpYyI6bH19LGQ9e1VuaWNvZGU6eyJDb3VyaWVyLU9ibGlxdWUiOmMoYHsnd2lkdGhzJ3trM3cnZm9mJzZvfSdrZXJuaW5nJ3snZm9mJy02b319YCksIlRpbWVzLUJvbGRJdGFsaWMiOmMoYHsnd2lkdGhzJ3trM28ycTR5Y3gycjIwMW4zbTIwMW82bzIwMXMybDIwMXQybDIwMXUybDIwMXczbTIwMXgzbTIwMXkzbTJrMXQybDJyMjAybTJuMm4zbTJvM20ycDVuMjAycTZvMnIxdzJzMmwydDJsMnUzbTJ2M3QydzF0MngybDJ5MXQyejF3M2szbTNsM20zbTNtM24zbTNvM20zcDNtM3EzbTNyM20zczNtMjAzdDJsMjAzdTJsM3YybDN3M3QzeDN0M3kzdDN6M200azVuNGw0bTRtNG00bjRtNG80czRwNG00cTRtNHI0czRzNHk0dDJyNHUzbTR2NG00dzN4NHg1dDR5NHM0ejRzNWszeDVsNHM1bTRtNW4zcjVvM3g1cDRzNXE0bTVyNXQ1czRtNXQzeDV1M3g1djJsNXcxdzV4Mmw1eTN0NXozbTZrMmw2bDNtNm0zbTZuMnc2bzNtNnAydzZxMmw2cjNtNnMzcjZ0MXc2dTF3NnYzbTZ3MXc2eDR5NnkzcjZ6M203azNtN2wzbTdtMnI3bjJyN28xdzdwM3I3cTJ3N3I0bTdzM203dDJ3N3Uycjd2Mm43dzFxN3gybjd5M3QyMDJsM21jbDRtYWwycmFtM21hbjNtYW8zbWFwM21hcjNtYXMybGF0NHVhdTF1YXYzbWF3M3dheTR1YXoybGJrMnNibDN0J2ZvZic2b2JvMmxicDN0YnEzbWJyMXRiczJsYnUxeWJ2M21iejNtY2s0bTIwMmszbWNtNG1jbjRtY280bWNwNG1jcTV5Y3I0bWNzNG1jdDRtY3U0bWN2NG1jdzJyMm0zcmN5MnJjejJyZGw0c2RtNHNkbjRzZG80c2RwNHNkcTRzZHM0c2R0NHNkdTRzZHY0c2R3NHNkejNtZWszbWVsM21lbTNtZW4zbWVvM21lcDNtZXE0c2VyMndlczJ3ZXQyd2V1MndldjJ3ZXcxd2V4MXdleTF3ZXoxd2ZsM3JmbTNtZm4zbWZvM21mcDNtZnEzbWZyM3RmczNtZnQzcmZ1M3JmdjNyZnczcmZ6MncyMDNrNm8yMTJtNm8yZHcybDJjcTJsM3QzbTN1MmwxN3MzeDE5bTNtfSdrZXJuaW5nJ3tjbHs0cXU1a3Q1cXQ1cnMxN3NzNXRzfTIwMXN7MjAxc3N9MjAxdHtja3M0bHNjbXNjbnNjb3NjcHNjbHMyd3UyeXUyMDF0c30yMDF4ezJ3dTJ5dX0ya3syMDF0c30yd3s0cXg1a3g1b3U1cXg1cnMxN3N1NXR1fTJ4ezE3c3U1dHU1b3V9Mnl7NHF4NWt4NW91NXF4NXJzMTdzczV0c30nZm9mJy02b2ZuezE3c3c1dHc1b3U1cXc1cnN9N3R7Y2tzY2xzY21zY25zY29zY3BzNGxzfTN1ezE3c3U1dHU1b3M1cXN9M3Z7MTdzdTV0dTVvczVxc303cHsxN3N1NXR1fWNrezRxdTVrdDVxdDVyczE3c3M1dHN9NGx7NHF1NWt0NXF0NXJzMTdzczV0c31jbXs0cXU1a3Q1cXQ1cnMxN3NzNXRzfWNuezRxdTVrdDVxdDVyczE3c3M1dHN9Y297NHF1NWt0NXF0NXJzMTdzczV0c31jcHs0cXU1a3Q1cXQ1cnMxN3NzNXRzfTZsezRxdTVvdTVxdzVydDE3c3U1dHV9NXF7Y2t1Y2x1Y211Y251Y291Y3B1NGx1fTVye2NrdWNsdWNtdWNudWNvdWNwdTRsdX03cXtja3NjbHNjbXNjbnNjb3NjcHM0bHN9NnB7NHF1NW91NXF3NXJ0MTdzdzV0d31la3s0cXU1b3U1cXc1cnQxN3N1NXR1fWVsezRxdTVvdTVxdzVydDE3c3U1dHV9ZW17NHF1NW91NXF3NXJ0MTdzdTV0dX1lbns0cXU1b3U1cXc1cnQxN3N1NXR1fWVvezRxdTVvdTVxdzVydDE3c3U1dHV9ZXB7NHF1NW91NXF3NXJ0MTdzdTV0dX1lc3sxN3NzNXRzNXFzNHF1fWV0ezRxdTVvdTVxdzVydDE3c3c1dHd9ZXV7NHF1NW91NXF3NXJ0MTdzczV0c31ldnsxN3NzNXRzNXFzNHF1fTZ6ezE3c3c1dHc1b3U1cXc1cnN9Zm17MTdzdzV0dzVvdTVxdzVyc303bnsyMDF0c31mb3sxN3N3NXR3NW91NXF3NXJzfWZwezE3c3c1dHc1b3U1cXc1cnN9ZnF7MTdzdzV0dzVvdTVxdzVyc303cntja3NjbHNjbXNjbnNjb3NjcHM0bHN9ZnN7MTdzdzV0dzVvdTVxdzVyc31mdHsxN3N1NXR1fWZ1ezE3c3U1dHV9ZnZ7MTdzdTV0dX1md3sxN3N1NXR1fWZ6e2Nrc2Nsc2Ntc2Nuc2Nvc2NwczRsc319fWApLCJIZWx2ZXRpY2EtQm9sZCI6Yyhgeyd3aWR0aHMne2szczJxNHNjeDF3MjAxbjNyMjAxbzZvMjAxczF3MjAxdDF3MjAxdTF3MjAxdzNtMjAxeDNtMjAxeTNtMmsxdzJsMmwyMDJtMm4ybjNyMm8zcjJwNXQyMDJxNm8ycjFzMnMybDJ0MmwydTJyMnYzdTJ3MXcyeDJsMnkxdzJ6MXczazNyM2wzcjNtM3IzbjNyM28zcjNwM3IzcTNyM3IzcjNzM3IyMDN0MmwyMDN1MmwzdjJsM3czdTN4M3UzeTN1M3ozeDRrNmw0bDRzNG00czRuNHM0bzRzNHA0bTRxM3g0cjR5NHM0czR0MXc0dTNyNHY0czR3M3g0eDVuNHk0czR6NHk1azRtNWw0eTVtNHM1bjRtNW8zeDVwNHM1cTRtNXI1eTVzNG01dDRtNXUzeDV2Mmw1dzF3NXgybDV5M3U1ejNyNmsybDZsM3I2bTN4Nm4zcjZvM3g2cDNyNnEybDZyM3g2czN4NnQxdzZ1MXc2djNyNncxdzZ4NXQ2eTN4NnozeDdrM3g3bDN4N20ycjduM3I3bzJsN3AzeDdxM3I3cjR5N3Mzcjd0M3I3dTNtN3Yycjd3MXc3eDJyN3kzdTIwMmwzcmNsNHNhbDJsYW0zcmFuM3JhbzNyYXAzcmFyM3JhczJsYXQ0dGF1MnBhdjNyYXczdWF5NHRhejJsYmsyc2JsM3UnZm9mJzZvYm8ybGJwM3hicTNyYnIxd2JzMmxidTJvYnYzcmJ6M3hjazRzMjAyazNyY200c2NuNHNjbzRzY3A0c2NxNm9jcjRzY3M0bWN0NG1jdTRtY3Y0bWN3MXcybTJ6Y3kxd2N6MXdkbDRzZG00eWRuNHlkbzR5ZHA0eWRxNHlkczR5ZHQ0c2R1NHNkdjRzZHc0c2R6M3hlazNyZWwzcmVtM3JlbjNyZW8zcmVwM3JlcTV0ZXIzcmVzM3JldDNyZXUzcmV2M3JldzF3ZXgxd2V5MXdlejF3ZmwzeGZtM3hmbjN4Zm8zeGZwM3hmcTN4ZnIzdWZzM3hmdDN4ZnUzeGZ2M3hmdzN4ZnozcjIwM2s2bzIxMm02bzJkdzJsMmNxMmwzdDNyM3UybDE3czRtMTltM3J9J2tlcm5pbmcne2NsezRxczVrdTVvdDVxczE3c3Y1dHZ9MjAxdHsyd3c0d3kyeXd9MjAxd3sya3N9MjAxeHsyd3c0d3kyeXd9Mmt7MjAxdHMyMDF4c30yd3s3cXM0cXU1a3c1b3M1cXc1cnMxN3N1NXR1N3RzZnpzfTJ4ezVvdzVxc30yeXs3cXM0cXU1a3c1b3M1cXc1cnMxN3N1NXR1N3RzZnpzfSdmb2YnLTZvN3B7MTdzdTV0dTVvdH1ja3s0cXM1a3U1b3Q1cXMxN3N2NXR2fTRsezRxczVrdTVvdDVxczE3c3Y1dHZ9Y217NHFzNWt1NW90NXFzMTdzdjV0dn1jbns0cXM1a3U1b3Q1cXMxN3N2NXR2fWNvezRxczVrdTVvdDVxczE3c3Y1dHZ9Y3B7NHFzNWt1NW90NXFzMTdzdjV0dn02bHsxN3N0NXR0NW9zfTE3c3sya3djbHZjbXZjbnZjb3ZjcHY0bHY0d3dja3Z9NW97Mmt1Y2x0Y210Y250Y290Y3B0NGx0NHd0Y2t0fTVxezJrc2Nsc2Ntc2Nuc2Nvc2NwczRsczR3dmNrc301cnsya3M0d3N9NXR7Mmt3Y2x2Y212Y252Y292Y3B2NGx2NHd3Y2t2fWVvezE3c3Q1dHQ1b3N9ZnV7MTdzdTV0dTVvdH02cHsxN3NzNXRzfWVrezE3c3Q1dHQ1b3N9ZWx7MTdzdDV0dDVvc31lbXsxN3N0NXR0NW9zfWVuezE3c3Q1dHQ1b3N9Nm97MjAxdHN9ZXB7MTdzdDV0dDVvc31lc3sxN3NzNXRzfWV0ezE3c3M1dHN9ZXV7MTdzczV0c31ldnsxN3NzNXRzfTZ6ezE3c3U1dHU1b3M1cXR9Zm17MTdzdTV0dTVvczVxdH1mbnsxN3N1NXR1NW9zNXF0fWZvezE3c3U1dHU1b3M1cXR9ZnB7MTdzdTV0dTVvczVxdH1mcXsxN3N1NXR1NW9zNXF0fWZzezE3c3U1dHU1b3M1cXR9ZnR7MTdzdTV0dTVvdH03bXs1b3N9ZnZ7MTdzdTV0dTVvdH1md3sxN3N1NXR1NW90fX19YCksQ291cmllcjpjKGB7J3dpZHRocyd7azN3J2ZvZic2b30na2VybmluZyd7J2ZvZictNm99fWApLCJDb3VyaWVyLUJvbGRPYmxpcXVlIjpjKGB7J3dpZHRocyd7azN3J2ZvZic2b30na2VybmluZyd7J2ZvZictNm99fWApLCJUaW1lcy1Cb2xkIjpjKGB7J3dpZHRocyd7azNxMnE1bmN4MnIyMDFuM20yMDFvNm8yMDFzMmwyMDF0MmwyMDF1MmwyMDF3M20yMDF4M20yMDF5M20yazF0MmwybDIwMm0ybjJuM20ybzNtMnA2bzIwMnE2bzJyMXcyczJsMnQybDJ1M20ydjN0MncxdDJ4MmwyeTF0MnoxdzNrM20zbDNtM20zbTNuM20zbzNtM3AzbTNxM20zcjNtM3MzbTIwM3QybDIwM3UybDN2MmwzdzN0M3gzdDN5M3QzejNtNGs1eDRsNHM0bTRtNG40czRvNHM0cDRtNHEzeDRyNHk0czR5NHQycjR1M200djR5NHc0bTR4NXk0eTRzNHo0eTVrM3g1bDR5NW00czVuM3I1bzRtNXA0czVxNHM1cjZvNXM0czV0NHM1dTRtNXYybDV3MXc1eDJsNXkzdTV6M202azJsNmwzbTZtM3I2bjJ3Nm8zcjZwMnc2cTJsNnIzbTZzM3I2dDF3NnUybDZ2M3I2dzF3Nng1bjZ5M3I2ejNtN2szcjdsM3I3bTJ3N24ycjdvMmw3cDNyN3EzbTdyNHM3czNtN3QzbTd1Mnc3djJyN3cxcTd4MnI3eTNvMjAybDNtY2w0c2FsMmxhbTNtYW4zbWFvM21hcDNtYXIzbWFzMmxhdDR1YXUxeWF2M21hdzN0YXk0dWF6MmxiazJzYmwzdCdmb2YnNm9ibzJsYnAzcmJyMXRiczJsYnUybGJ2M21iejNtY2s0czIwMmszbWNtNHNjbjRzY280c2NwNHNjcTZvY3I0c2NzNG1jdDRtY3U0bWN2NG1jdzJyMm0zcmN5MnJjejJyZGw0c2RtNHlkbjR5ZG80eWRwNHlkcTR5ZHM0eWR0NHNkdTRzZHY0c2R3NHNkejNyZWszbWVsM21lbTNtZW4zbWVvM21lcDNtZXE0c2VyMndlczJ3ZXQyd2V1MndldjJ3ZXcxd2V4MXdleTF3ZXoxd2ZsM3JmbTNtZm4zbWZvM21mcDNtZnEzbWZyM3RmczNtZnQzcmZ1M3JmdjNyZnczcmZ6M20yMDNrNm8yMTJtNm8yZHcybDJjcTJsM3QzbTN1MmwxN3M0czE5bTNtfSdrZXJuaW5nJ3tjbHs0cXQ1a3M1b3Q1cXk1cncxN3N2NXR2fTIwMXR7Y2tzNGxzY21zY25zY29zY3BzY2xzNHd2fTJrezIwMXRzfTJ3ezRxdTVrdTdtdTVvczVxeDVydTE3c3U1dHV9Mnh7MTdzdTV0dTVvdTVxc30yeXs0cXY1a3Y3bXU1b3Q1cXo1cnUxN3N1NXR1fSdmb2YnLTZvN3R7Y2tzY2xzY21zY25zY29zY3BzNGxzfTN1ezE3c3U1dHU1b3M1cXV9M3Z7MTdzdTV0dTVvczVxdX1mdXsxN3N1NXR1NW91NXF1fTdwezE3c3U1dHU1b3U1cXV9Y2t7NHF0NWtzNW90NXF5NXJ3MTdzdjV0dn00bHs0cXQ1a3M1b3Q1cXk1cncxN3N2NXR2fWNtezRxdDVrczVvdDVxeTVydzE3c3Y1dHZ9Y257NHF0NWtzNW90NXF5NXJ3MTdzdjV0dn1jb3s0cXQ1a3M1b3Q1cXk1cncxN3N2NXR2fWNwezRxdDVrczVvdDVxeTVydzE3c3Y1dHZ9Nmx7MTdzdDV0dDVvdTVxdX0xN3N7Y2t1Y2x1Y211Y251Y291Y3B1NGx1NHd1fTVve2NrdWNsdWNtdWNudWNvdWNwdTRsdTR3dX01cXtja3pjbHpjbXpjbnpjb3pjcHo0bHo0d3V9NXJ7Y2t4Y2x4Y214Y254Y294Y3B4NGx4NHd1fTV0e2NrdWNsdWNtdWNudWNvdWNwdTRsdTR3dX03cXtja3VjbHVjbXVjbnVjb3VjcHU0bHV9NnB7MTdzdzV0dzVvdTVxdX1la3sxN3N0NXR0NXF1fWVsezE3c3Q1dHQ1b3U1cXV9ZW17MTdzdDV0dDVxdX1lbnsxN3N0NXR0NXF1fWVvezE3c3Q1dHQ1cXV9ZXB7MTdzdDV0dDVvdTVxdX1lc3sxN3NzNXRzNXF1fWV0ezE3c3c1dHc1b3U1cXV9ZXV7MTdzdzV0dzVvdTVxdX1ldnsxN3NzNXRzNXF1fTZ6ezE3c3c1dHc1b3U1cXU1cnN9Zm17MTdzdzV0dzVvdTVxdTVyc31mbnsxN3N3NXR3NW91NXF1NXJzfWZvezE3c3c1dHc1b3U1cXU1cnN9ZnB7MTdzdzV0dzVvdTVxdTVyc31mcXsxN3N3NXR3NW91NXF1NXJzfTdye2NrdGNsdGNtdGNudGNvdGNwdDRsdDVvc31mc3sxN3N3NXR3NW91NXF1NXJzfWZ0ezE3c3U1dHU1b3U1cXV9N217NW9zfWZ2ezE3c3U1dHU1b3U1cXV9Znd7MTdzdTV0dTVvdTVxdX1mentja3NjbHNjbXNjbnNjb3NjcHM0bHN9fX1gKSxTeW1ib2w6Yyhgeyd3aWR0aHMne2szdWF3NHIxOW0zbTJrMXQybDJsMjAybTJ5Mm4zbTJwNW4yMDJxNm8zazNtMnMybDJ0MmwydjNyMncxdDNtM20yeTF0Mnoxd2JrMnNibDNyJ2ZvZic2bzNuM20zbzNtM3AzbTNxM20zcjNtM3MzbTN0M20zdTF3M3YxdzN3M3IzeDNyM3kzcjN6MndicDN0M2wzbTV2Mmw1eDJsNXozbTJxNHlmcjNyN3Yzazd3MW83eDNrfSdrZXJuaW5nJ3snZm9mJy02b319YCksSGVsdmV0aWNhOmMoYHsnd2lkdGhzJ3trM3AycTRtY3gxdzIwMW4zcjIwMW82bzIwMXMxcTIwMXQxcTIwMXUxcTIwMXcybDIwMXgybDIwMXkybDJrMXcybDF3MjAybTJuMm4zcjJvM3IycDV0MjAycTZvMnIxbjJzMmwydDJsMnUycjJ2M3UydzF3MngybDJ5MXcyejF3M2szcjNsM3IzbTNyM24zcjNvM3IzcDNyM3EzcjNyM3IzczNyMjAzdDJsMjAzdTJsM3YxdzN3M3UzeDN1M3kzdTN6M3I0azZwNGw0bTRtNG00bjRzNG80czRwNG00cTN4NHI0eTRzNHM0dDF3NHUzbTR2NG00dzNyNHg1bjR5NHM0ejR5NWs0bTVsNHk1bTRzNW40bTVvM3g1cDRzNXE0bTVyNXk1czRtNXQ0bTV1M3g1djF3NXcxdzV4MXc1eTJ6NXozcjZrMmw2bDNyNm0zcjZuM202bzNyNnAzcjZxMXc2cjNyNnMzcjZ0MXE2dTFxNnYzbTZ3MXE2eDVuNnkzcjZ6M3I3azNyN2wzcjdtMmw3bjNtN28xdzdwM3I3cTNtN3I0czdzM203dDNtN3UzbTd2Mmw3dzF1N3gybDd5M3UyMDJsM3JjbDRtYWwybGFtM3JhbjNyYW8zcmFwM3JhcjNyYXMybGF0NHRhdTJwYXYzcmF3M3VheTR0YXoybGJrMnNibDN1J2ZvZic2b2JvMmxicDNyYnIxd2JzMmxidTJvYnYzcmJ6M3hjazRtMjAyazNyY200bWNuNG1jbzRtY3A0bWNxNm9jcjRzY3M0bWN0NG1jdTRtY3Y0bWN3MXcybTJuY3kxd2N6MXdkbDRzZG00eWRuNHlkbzR5ZHA0eWRxNHlkczR5ZHQ0c2R1NHNkdjRzZHc0c2R6M3hlazNyZWwzcmVtM3JlbjNyZW8zcmVwM3JlcTV0ZXIzbWVzM3JldDNyZXUzcmV2M3JldzF3ZXgxd2V5MXdlejF3ZmwzcmZtM3JmbjNyZm8zcmZwM3JmcTNyZnIzdWZzM3hmdDNyZnUzcmZ2M3JmdzNyZnozbTIwM2s2bzIxMm02bzJkdzJsMmNxMmwzdDNyM3UxdzE3czRtMTltM3J9J2tlcm5pbmcnezVxezR3dn1jbHs0cXM1a3c1b3c1cXMxN3N2NXR2fTIwMXR7Mnd1NHcxazJ5dX0yMDF4ezJ3dTR3eTJ5dX0xN3N7Mmt0Y2x1Y211Y251NG90Y3B1NGx1NHd5Y291Y2t1fTJ3ezdxczRxejVrMW0xN3N5NW93NXF4NXJzZnN1NXR5N3R1Znp1fTJ4ezE3c3k1dHk1b3k1cXN9Mnl7N3FzNHF6NWsxbTE3c3k1b3c1cXg1cnNmc3U1dHk3dHVmenV9J2ZvZictNm83cHsxN3N2NXR2NW93fWNrezRxczVrdzVvdzVxczE3c3Y1dHZ9NGx7NHFzNWt3NW93NXFzMTdzdjV0dn1jbXs0cXM1a3c1b3c1cXMxN3N2NXR2fWNuezRxczVrdzVvdzVxczE3c3Y1dHZ9Y297NHFzNWt3NW93NXFzMTdzdjV0dn1jcHs0cXM1a3c1b3c1cXMxN3N2NXR2fTZsezE3c3k1dHk1b3d9ZG97MTdzdDV0dH00ensxN3N0NXR0fTdze2ZzdH1kbXsxN3N0NXR0fWRuezE3c3Q1dHR9NW97Y2t3Y2x3Y213Y253Y293Y3B3NGx3NHd2fWRwezE3c3Q1dHR9ZHF7MTdzdDV0dH03dHs1b3d9ZHN7MTdzdDV0dH01dHsya3RjbHVjbXVjbnU0b3RjcHU0bHU0d3ljb3Vja3V9ZnV7MTdzdjV0djVvd302cHsxN3N5NXR5NW93NXFzfWVrezE3c3k1dHk1b3d9ZWx7MTdzeTV0eTVvd31lbXsxN3N5NXR5NW93fWVuezV0eX1lb3sxN3N5NXR5NW93fWVwezE3c3k1dHk1b3d9ZXN7MTdzeTV0eTVxc31ldHsxN3N5NXR5NW93NXFzfWV1ezE3c3k1dHk1b3c1cXN9ZXZ7MTdzeTV0eTVvdzVxc302ensxN3N5NXR5NW93NXFzfWZtezE3c3k1dHk1b3c1cXN9Zm57MTdzeTV0eTVvdzVxc31mb3sxN3N5NXR5NW93NXFzfWZwezE3c3k1dHk1cXN9ZnF7MTdzeTV0eTVvdzVxc303cns1b3d9ZnN7MTdzeTV0eTVvdzVxc31mdHsxN3N2NXR2NW93fTdtezVvd31mdnsxN3N2NXR2NW93fWZ3ezE3c3Y1dHY1b3d9fX1gKSwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjpjKGB7J3dpZHRocyd7azNzMnE0c2N4MXcyMDFuM3IyMDFvNm8yMDFzMXcyMDF0MXcyMDF1MXcyMDF3M20yMDF4M20yMDF5M20yazF3MmwybDIwMm0ybjJuM3IybzNyMnA1dDIwMnE2bzJyMXMyczJsMnQybDJ1MnIydjN1MncxdzJ4MmwyeTF3MnoxdzNrM3IzbDNyM20zcjNuM3IzbzNyM3AzcjNxM3IzcjNyM3MzcjIwM3QybDIwM3UybDN2MmwzdzN1M3gzdTN5M3UzejN4NGs2bDRsNHM0bTRzNG40czRvNHM0cDRtNHEzeDRyNHk0czRzNHQxdzR1M3I0djRzNHczeDR4NW40eTRzNHo0eTVrNG01bDR5NW00czVuNG01bzN4NXA0czVxNG01cjV5NXM0bTV0NG01dTN4NXYybDV3MXc1eDJsNXkzdTV6M3I2azJsNmwzcjZtM3g2bjNyNm8zeDZwM3I2cTJsNnIzeDZzM3g2dDF3NnUxdzZ2M3I2dzF3Nng1dDZ5M3g2ejN4N2szeDdsM3g3bTJyN24zcjdvMmw3cDN4N3EzcjdyNHk3czNyN3Qzcjd1M203djJyN3cxdzd4MnI3eTN1MjAybDNyY2w0c2FsMmxhbTNyYW4zcmFvM3JhcDNyYXIzcmFzMmxhdDR0YXUycGF2M3JhdzN1YXk0dGF6MmxiazJzYmwzdSdmb2YnNm9ibzJsYnAzeGJxM3JicjF3YnMybGJ1Mm9idjNyYnozeGNrNHMyMDJrM3JjbTRzY240c2NvNHNjcDRzY3E2b2NyNHNjczRtY3Q0bWN1NG1jdjRtY3cxdzJtMnpjeTF3Y3oxd2RsNHNkbTR5ZG40eWRvNHlkcDR5ZHE0eWRzNHlkdDRzZHU0c2R2NHNkdzRzZHozeGVrM3JlbDNyZW0zcmVuM3JlbzNyZXAzcmVxNXRlcjNyZXMzcmV0M3JldTNyZXYzcmV3MXdleDF3ZXkxd2V6MXdmbDN4Zm0zeGZuM3hmbzN4ZnAzeGZxM3hmcjN1ZnMzeGZ0M3hmdTN4ZnYzeGZ3M3hmejNyMjAzazZvMjEybTZvMmR3MmwyY3EybDN0M3IzdTJsMTdzNG0xOW0zcn0na2VybmluZyd7Y2x7NHFzNWt1NW90NXFzMTdzdjV0dn0yMDF0ezJ3dzR3eTJ5d30yMDF3ezJrc30yMDF4ezJ3dzR3eTJ5d30ya3syMDF0czIwMXhzfTJ3ezdxczRxdTVrdzVvczVxdzVyczE3c3U1dHU3dHNmenN9Mnh7NW93NXFzfTJ5ezdxczRxdTVrdzVvczVxdzVyczE3c3U1dHU3dHNmenN9J2ZvZictNm83cHsxN3N1NXR1NW90fWNrezRxczVrdTVvdDVxczE3c3Y1dHZ9NGx7NHFzNWt1NW90NXFzMTdzdjV0dn1jbXs0cXM1a3U1b3Q1cXMxN3N2NXR2fWNuezRxczVrdTVvdDVxczE3c3Y1dHZ9Y297NHFzNWt1NW90NXFzMTdzdjV0dn1jcHs0cXM1a3U1b3Q1cXMxN3N2NXR2fTZsezE3c3Q1dHQ1b3N9MTdzezJrd2NsdmNtdmNudmNvdmNwdjRsdjR3d2Nrdn01b3sya3VjbHRjbXRjbnRjb3RjcHQ0bHQ0d3Rja3R9NXF7MmtzY2xzY21zY25zY29zY3BzNGxzNHd2Y2tzfTVyezJrczR3c301dHsya3djbHZjbXZjbnZjb3ZjcHY0bHY0d3dja3Z9ZW97MTdzdDV0dDVvc31mdXsxN3N1NXR1NW90fTZwezE3c3M1dHN9ZWt7MTdzdDV0dDVvc31lbHsxN3N0NXR0NW9zfWVtezE3c3Q1dHQ1b3N9ZW57MTdzdDV0dDVvc302b3syMDF0c31lcHsxN3N0NXR0NW9zfWVzezE3c3M1dHN9ZXR7MTdzczV0c31ldXsxN3NzNXRzfWV2ezE3c3M1dHN9Nnp7MTdzdTV0dTVvczVxdH1mbXsxN3N1NXR1NW9zNXF0fWZuezE3c3U1dHU1b3M1cXR9Zm97MTdzdTV0dTVvczVxdH1mcHsxN3N1NXR1NW9zNXF0fWZxezE3c3U1dHU1b3M1cXR9ZnN7MTdzdTV0dTVvczVxdH1mdHsxN3N1NXR1NW90fTdtezVvc31mdnsxN3N1NXR1NW90fWZ3ezE3c3U1dHU1b3R9fX1gKSxaYXBmRGluZ2JhdHM6Yyhgeyd3aWR0aHMne2s0dTJrMXcnZm9mJzZvfSdrZXJuaW5nJ3snZm9mJy02b319YCksIkNvdXJpZXItQm9sZCI6Yyhgeyd3aWR0aHMne2szdydmb2YnNm99J2tlcm5pbmcneydmb2YnLTZvfX1gKSwiVGltZXMtSXRhbGljIjpjKGB7J3dpZHRocyd7azNuMnE0eWN4MmwyMDFuM20yMDFvNXQyMDFzMmwyMDF0MmwyMDF1MmwyMDF3M3IyMDF4M3IyMDF5M3IyazF0MmwybDIwMm0ybjJuM20ybzNtMnA1bjIwMnE1dDJyMXAyczJsMnQybDJ1M20ydjRuMncxdDJ4MmwyeTF0MnoxdzNrM20zbDNtM20zbTNuM20zbzNtM3AzbTNxM20zcjNtM3MzbTIwM3QybDIwM3UybDN2MmwzdzRuM3g0bjN5NG4zejNtNGs1dzRsM3g0bTN4NG40bTRvNHM0cDN4NHEzeDRyNHM0czRzNHQybDR1Mnc0djRtNHczcjR4NW40eTRtNHo0czVrM3g1bDRzNW0zeDVuM201bzNyNXA0czVxM3g1cjVuNXMzeDV0M3I1dTNyNXYycjV3MXc1eDJyNXkydTV6M202azJsNmwzbTZtM202bjJ3Nm8zbTZwMnc2cTF3NnIzbTZzM202dDF3NnUxdzZ2Mnc2dzF3Nng0czZ5M202ejNtN2szbTdsM203bTJyN24ycjdvMXc3cDNtN3EydzdyNG03czJ3N3Qydzd1MnI3djJzN3cxdjd4MnM3eTNxMjAybDNtY2wzeGFsMnJhbTNtYW4zbWFvM21hcDNtYXIzbWFzMmxhdDR3YXUxdmF2M21hdzRuYXk0d2F6MmxiazJzYmw0bidmb2YnNm9ibzJsYnAzbWJxM29icjF0YnMybGJ1MXpidjNtYnozbWNrM3gyMDJrM21jbTN4Y24zeGNvM3hjcDN4Y3E1dGNyNG1jczN4Y3QzeGN1M3hjdjN4Y3cybDJtMnVjeTJsY3oybGRsNG1kbTRzZG40c2RvNHNkcDRzZHE0c2RzNHNkdDRzZHU0c2R2NHNkdzRzZHozbWVrM21lbDNtZW0zbWVuM21lbzNtZXAzbWVxNG1lcjJ3ZXMyd2V0MndldTJ3ZXYyd2V3MXdleDF3ZXkxd2V6MXdmbDNtZm0zbWZuM21mbzNtZnAzbWZxM21mcjRuZnMzbWZ0M21mdTNtZnYzbWZ3M21mejJ3MjAzazZvMjEybTZtMmR3MmwyY3EybDN0M20zdTJsMTdzM3IxOW0zbX0na2VybmluZyd7Y2x7NWt0NHF3fTIwMXN7MjAxc3d9MjAxdHsyMDF0dzJ3eTJ5eTZxLXR9MjAxeHsyd3kyeXl9Mmt7MjAxdHd9Mnd7N3FzNHF5N3JzNWt5N213NW9zNXF4NXJ1MTdzdTV0dX0yeHsxN3NzNXRzNW9zfTJ5ezdxczRxeTdyczVreTdtdzVvczVxeDVydTE3c3U1dHV9J2ZvZictNm82dHsxN3NzNXRzNXFzfTd0ezVvc30zdns1cXN9N3B7MTdzdTV0dTVxc31ja3s1a3Q0cXd9NGx7NWt0NHF3fWNtezVrdDRxd31jbns1a3Q0cXd9Y297NWt0NHF3fWNwezVrdDRxd302bHs0cXM1a3M1b3U1cXc1cnUxN3N1NXR1fTE3c3sya3N9NXF7Y2t2Y2x2Y212Y252Y292Y3B2NGx2fTVye2NrdWNsdWNtdWNudWNvdWNwdTRsdX01dHsya3N9NnB7NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1la3s0cXM1a3M1b3U1cXc1cnUxN3N1NXR1fWVsezRxczVrczVvdTVxdzVydTE3c3U1dHV9ZW17NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1lbns0cXM1a3M1b3U1cXc1cnUxN3N1NXR1fWVvezRxczVrczVvdTVxdzVydTE3c3U1dHV9ZXB7NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1lc3s1a3M1cXM0cXN9ZXR7NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1ldXs0cXM1a3M1cXc1cnUxN3N1NXR1fWV2ezVrczVxczRxc31leHsxN3NzNXRzNXFzfTZ6ezRxdjVrczVvdTVxdzVydTE3c3U1dHV9Zm17NHF2NWtzNW91NXF3NXJ1MTdzdTV0dX1mbns0cXY1a3M1b3U1cXc1cnUxN3N1NXR1fWZvezRxdjVrczVvdTVxdzVydTE3c3U1dHV9ZnB7NHF2NWtzNW91NXF3NXJ1MTdzdTV0dX1mcXs0cXY1a3M1b3U1cXc1cnUxN3N1NXR1fTdyezVvc31mc3s0cXY1a3M1b3U1cXc1cnUxN3N1NXR1fWZ0ezE3c3U1dHU1cXN9ZnV7MTdzdTV0dTVxc31mdnsxN3N1NXR1NXFzfWZ3ezE3c3U1dHU1cXN9fX1gKSwiVGltZXMtUm9tYW4iOmMoYHsnd2lkdGhzJ3trM24ycTR5Y3gybDIwMW4zbTIwMW82bzIwMXMybDIwMXQybDIwMXUybDIwMXcydzIwMXgydzIwMXkydzJrMXQybDJsMjAybTJuMm4zbTJvM20ycDVuMjAycTZvMnIxbTJzMmwydDJsMnUzbTJ2M3MydzF0MngybDJ5MXQyejF3M2szbTNsM20zbTNtM24zbTNvM20zcDNtM3EzbTNyM20zczNtMjAzdDJsMjAzdTJsM3YxdzN3M3MzeDNzM3kzczN6Mnc0azV3NGw0czRtNG00bjRtNG80czRwM3g0cTNyNHI0czRzNHM0dDJsNHUycjR2NHM0dzN4NHg1dDR5NHM0ejRzNWszcjVsNHM1bTRtNW4zcjVvM3g1cDRzNXE0czVyNXk1czRzNXQ0czV1M3g1djJsNXcxdzV4Mmw1eTJ6NXozbTZrMmw2bDJ3Nm0zbTZuMnc2bzNtNnAydzZxMmw2cjNtNnMzbTZ0MXc2dTF3NnYzbTZ3MXc2eDR5NnkzbTZ6M203azNtN2wzbTdtMmw3bjJyN28xdzdwM203cTNtN3I0czdzM203dDNtN3Uydzd2M2s3dzFvN3gzazd5M3EyMDJsM21jbDRzYWwybGFtM21hbjNtYW8zbWFwM21hcjNtYXMybGF0NHdhdTF2YXYzbWF3M3NheTR3YXoybGJrMnNibDNzJ2ZvZic2b2JvMmxicDNtYnEyeGJyMXRiczJsYnUxemJ2M21iejJ3Y2s0czIwMmszbWNtNHNjbjRzY280c2NwNHNjcTV0Y3I0bWNzM3hjdDN4Y3UzeGN2M3hjdzJsMm0ydGN5MmxjejJsZGw0c2RtNHNkbjRzZG80c2RwNHNkcTRzZHM0c2R0NHNkdTRzZHY0c2R3NHNkejNtZWsyd2VsMndlbTJ3ZW4yd2VvMndlcDJ3ZXE0bWVyMndlczJ3ZXQyd2V1MndldjJ3ZXcxd2V4MXdleTF3ZXoxd2ZsM21mbTNtZm4zbWZvM21mcDNtZnEzbWZyM3NmczNtZnQzbWZ1M21mdjNtZnczbWZ6M20yMDNrNm8yMTJtNm0yZHcybDJjcTJsM3QzbTN1MXcxN3M0czE5bTNtfSdrZXJuaW5nJ3tjbHs0cXM1a3UxN3N3NW91NXF5NXJ3MjAxc3M1dHcyMDF3c30yMDFzezIwMXNzfTIwMXR7Y2t3NGx3Y213Y253Y293Y3B3Y2x3NHd1MjAxdHN9Mmt7MjAxdHN9Mnd7NHFzNWt3NW9zNXF4NXJ1MTdzeDV0eH0yeHsxN3N3NXR3NW91NXF1fTJ5ezRxczVrdzVvczVxeDVydTE3c3g1dHh9J2ZvZictNm83dHtja3VjbHVjbXVjbnVjb3VjcHU0bHU1b3M1cnN9M3V7MTdzdTV0dTVxc30zdnsxN3N1NXR1NXFzfTdwezE3c3c1dHc1cXN9Y2t7NHFzNWt1MTdzdzVvdTVxeTVydzIwMXNzNXR3MjAxd3N9NGx7NHFzNWt1MTdzdzVvdTVxeTVydzIwMXNzNXR3MjAxd3N9Y217NHFzNWt1MTdzdzVvdTVxeTVydzIwMXNzNXR3MjAxd3N9Y257NHFzNWt1MTdzdzVvdTVxeTVydzIwMXNzNXR3MjAxd3N9Y297NHFzNWt1MTdzdzVvdTVxeTVydzIwMXNzNXR3MjAxd3N9Y3B7NHFzNWt1MTdzdzVvdTVxeTVydzIwMXNzNXR3MjAxd3N9Nmx7MTdzdTV0dTVvczVxdzVyc30xN3N7Mmt0Y2x2Y212Y252Y292Y3B2NGx2NHd1Y2t2fTVve2Nrd2Nsd2Ntd2Nud2Nvd2NwdzRsdzR3dX01cXtja3ljbHljbXljbnljb3ljcHk0bHk0d3U1bXN9NXJ7Y2t0Y2x0Y210Y250Y290Y3B0NGx0NHdzfTV0ezJrdGNsdmNtdmNudmNvdmNwdjRsdjR3dWNrdn03cXtja3NjbHNjbXNjbnNjb3NjcHM0bHN9NnB7MTdzdTV0dTVxdzVyc31la3s1cXM1cnN9ZWx7MTdzdTV0dTVvczVxdzVyc31lbXsxN3N1NXR1NW9zNXFzNXJzfWVuezE3c3U1cXM1cnN9ZW97NXFzNXJzfWVwezE3c3U1dHU1b3M1cXc1cnN9ZXN7NXFzfWV0ezE3c3U1dHU1cXc1cnN9ZXV7MTdzdTV0dTVxczVyc31ldns1cXN9Nnp7MTdzdjV0djVvczVxeDVyc31mbXs1b3M1cXQ1cnN9Zm57MTdzdjV0djVvczVxeDVyc31mb3sxN3N2NXR2NW9zNXF4NXJzfWZwezVvczVxdDVyc31mcXs1b3M1cXQ1cnN9N3J7Y2t1Y2x1Y211Y251Y291Y3B1NGx1NW9zfWZzezE3c3Y1dHY1b3M1cXg1cnN9ZnR7MTdzczV0czVxc31mdXsxN3N3NXR3NXFzfWZ2ezE3c3c1dHc1cXN9Znd7MTdzczV0czVxc31mentja3VjbHVjbXVjbnVjb3VjcHU0bHU1b3M1cnN9fX1gKSwiSGVsdmV0aWNhLU9ibGlxdWUiOmMoYHsnd2lkdGhzJ3trM3AycTRtY3gxdzIwMW4zcjIwMW82bzIwMXMxcTIwMXQxcTIwMXUxcTIwMXcybDIwMXgybDIwMXkybDJrMXcybDF3MjAybTJuMm4zcjJvM3IycDV0MjAycTZvMnIxbjJzMmwydDJsMnUycjJ2M3UydzF3MngybDJ5MXcyejF3M2szcjNsM3IzbTNyM24zcjNvM3IzcDNyM3EzcjNyM3IzczNyMjAzdDJsMjAzdTJsM3YxdzN3M3UzeDN1M3kzdTN6M3I0azZwNGw0bTRtNG00bjRzNG80czRwNG00cTN4NHI0eTRzNHM0dDF3NHUzbTR2NG00dzNyNHg1bjR5NHM0ejR5NWs0bTVsNHk1bTRzNW40bTVvM3g1cDRzNXE0bTVyNXk1czRtNXQ0bTV1M3g1djF3NXcxdzV4MXc1eTJ6NXozcjZrMmw2bDNyNm0zcjZuM202bzNyNnAzcjZxMXc2cjNyNnMzcjZ0MXE2dTFxNnYzbTZ3MXE2eDVuNnkzcjZ6M3I3azNyN2wzcjdtMmw3bjNtN28xdzdwM3I3cTNtN3I0czdzM203dDNtN3UzbTd2Mmw3dzF1N3gybDd5M3UyMDJsM3JjbDRtYWwybGFtM3JhbjNyYW8zcmFwM3JhcjNyYXMybGF0NHRhdTJwYXYzcmF3M3VheTR0YXoybGJrMnNibDN1J2ZvZic2b2JvMmxicDNyYnIxd2JzMmxidTJvYnYzcmJ6M3hjazRtMjAyazNyY200bWNuNG1jbzRtY3A0bWNxNm9jcjRzY3M0bWN0NG1jdTRtY3Y0bWN3MXcybTJuY3kxd2N6MXdkbDRzZG00eWRuNHlkbzR5ZHA0eWRxNHlkczR5ZHQ0c2R1NHNkdjRzZHc0c2R6M3hlazNyZWwzcmVtM3JlbjNyZW8zcmVwM3JlcTV0ZXIzbWVzM3JldDNyZXUzcmV2M3JldzF3ZXgxd2V5MXdlejF3ZmwzcmZtM3JmbjNyZm8zcmZwM3JmcTNyZnIzdWZzM3hmdDNyZnUzcmZ2M3JmdzNyZnozbTIwM2s2bzIxMm02bzJkdzJsMmNxMmwzdDNyM3UxdzE3czRtMTltM3J9J2tlcm5pbmcnezVxezR3dn1jbHs0cXM1a3c1b3c1cXMxN3N2NXR2fTIwMXR7Mnd1NHcxazJ5dX0yMDF4ezJ3dTR3eTJ5dX0xN3N7Mmt0Y2x1Y211Y251NG90Y3B1NGx1NHd5Y291Y2t1fTJ3ezdxczRxejVrMW0xN3N5NW93NXF4NXJzZnN1NXR5N3R1Znp1fTJ4ezE3c3k1dHk1b3k1cXN9Mnl7N3FzNHF6NWsxbTE3c3k1b3c1cXg1cnNmc3U1dHk3dHVmenV9J2ZvZictNm83cHsxN3N2NXR2NW93fWNrezRxczVrdzVvdzVxczE3c3Y1dHZ9NGx7NHFzNWt3NW93NXFzMTdzdjV0dn1jbXs0cXM1a3c1b3c1cXMxN3N2NXR2fWNuezRxczVrdzVvdzVxczE3c3Y1dHZ9Y297NHFzNWt3NW93NXFzMTdzdjV0dn1jcHs0cXM1a3c1b3c1cXMxN3N2NXR2fTZsezE3c3k1dHk1b3d9ZG97MTdzdDV0dH00ensxN3N0NXR0fTdze2ZzdH1kbXsxN3N0NXR0fWRuezE3c3Q1dHR9NW97Y2t3Y2x3Y213Y253Y293Y3B3NGx3NHd2fWRwezE3c3Q1dHR9ZHF7MTdzdDV0dH03dHs1b3d9ZHN7MTdzdDV0dH01dHsya3RjbHVjbXVjbnU0b3RjcHU0bHU0d3ljb3Vja3V9ZnV7MTdzdjV0djVvd302cHsxN3N5NXR5NW93NXFzfWVrezE3c3k1dHk1b3d9ZWx7MTdzeTV0eTVvd31lbXsxN3N5NXR5NW93fWVuezV0eX1lb3sxN3N5NXR5NW93fWVwezE3c3k1dHk1b3d9ZXN7MTdzeTV0eTVxc31ldHsxN3N5NXR5NW93NXFzfWV1ezE3c3k1dHk1b3c1cXN9ZXZ7MTdzeTV0eTVvdzVxc302ensxN3N5NXR5NW93NXFzfWZtezE3c3k1dHk1b3c1cXN9Zm57MTdzeTV0eTVvdzVxc31mb3sxN3N5NXR5NW93NXFzfWZwezE3c3k1dHk1cXN9ZnF7MTdzeTV0eTVvdzVxc303cns1b3d9ZnN7MTdzeTV0eTVvdzVxc31mdHsxN3N2NXR2NW93fTdtezVvd31mdnsxN3N2NXR2NW93fWZ3ezE3c3Y1dHY1b3d9fX1gKX19O2UuZXZlbnRzLnB1c2goW2BhZGRGb250YCxmdW5jdGlvbihlKXt2YXIgdD1lLmZvbnQsbj1kLlVuaWNvZGVbdC5wb3N0U2NyaXB0TmFtZV07biYmKHQubWV0YWRhdGEuVW5pY29kZT17fSx0Lm1ldGFkYXRhLlVuaWNvZGUud2lkdGhzPW4ud2lkdGhzLHQubWV0YWRhdGEuVW5pY29kZS5rZXJuaW5nPW4ua2VybmluZyk7dmFyIHI9dS5Vbmljb2RlW3QucG9zdFNjcmlwdE5hbWVdO3ImJih0Lm1ldGFkYXRhLlVuaWNvZGUuZW5jb2Rpbmc9cix0LmVuY29kaW5nPXIuY29kZVBhZ2VzWzBdKX1dKX0oWi5BUEkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxuPW5ldyBVaW50OEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09ZS5jaGFyQ29kZUF0KHIpO3JldHVybiBufTtlLkFQSS5ldmVudHMucHVzaChbYGFkZEZvbnRgLGZ1bmN0aW9uKG4pe3ZhciByPXZvaWQgMCxpPW4uZm9udCxhPW4uaW5zdGFuY2U7aWYoIWkuaXNTdGFuZGFyZEZvbnQpe2lmKGE9PT12b2lkIDApdGhyb3cgRXJyb3IoYEZvbnQgZG9lcyBub3QgZXhpc3QgaW4gdkZTLCBpbXBvcnQgZm9udHMgb3IgcmVtb3ZlIGRlY2xhcmF0aW9uIGRvYy5hZGRGb250KCdgK2kucG9zdFNjcmlwdE5hbWUrYCcpLmApO2lmKHR5cGVvZihyPSExPT09YS5leGlzdHNGaWxlSW5WRlMoaS5wb3N0U2NyaXB0TmFtZSk/YS5sb2FkRmlsZShpLnBvc3RTY3JpcHROYW1lKTphLmdldEZpbGVGcm9tVkZTKGkucG9zdFNjcmlwdE5hbWUpKSE9YHN0cmluZ2ApdGhyb3cgRXJyb3IoYEZvbnQgaXMgbm90IHN0b3JlZCBhcyBzdHJpbmctZGF0YSBpbiB2RlMsIGltcG9ydCBmb250cyBvciByZW1vdmUgZGVjbGFyYXRpb24gZG9jLmFkZEZvbnQoJ2AraS5wb3N0U2NyaXB0TmFtZStgJykuYCk7KGZ1bmN0aW9uKG4scil7cj0vXlx4MDBceDAxXHgwMFx4MDAvLnRlc3Qocik/dChyKTp0KFZoKHIpKSxuLm1ldGFkYXRhPWUuQVBJLlRURkZvbnQub3BlbihyKSxuLm1ldGFkYXRhLlVuaWNvZGU9bi5tZXRhZGF0YS5Vbmljb2RlfHx7ZW5jb2Rpbmc6e30sa2VybmluZzp7fSx3aWR0aHM6W119LG4ubWV0YWRhdGEuZ2x5SWRzVXNlZD1bMF19KShpLHIpfX1dKX0oWiksWi5BUEkuYWRkU3ZnQXNJbWFnZT1mdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe2lmKGlzTmFOKHQpfHxpc05hTihuKSl0aHJvdyB6aC5lcnJvcihganNQREYuYWRkU3ZnQXNJbWFnZTogSW52YWxpZCBjb29yZGluYXRlc2AsYXJndW1lbnRzKSxFcnJvcihgSW52YWxpZCBjb29yZGluYXRlcyBwYXNzZWQgdG8ganNQREYuYWRkU3ZnQXNJbWFnZWApO2lmKGlzTmFOKHIpfHxpc05hTihpKSl0aHJvdyB6aC5lcnJvcihganNQREYuYWRkU3ZnQXNJbWFnZTogSW52YWxpZCBtZWFzdXJlbWVudHNgLGFyZ3VtZW50cyksRXJyb3IoYEludmFsaWQgbWVhc3VyZW1lbnRzICh3aWR0aCBhbmQvb3IgaGVpZ2h0KSBwYXNzZWQgdG8ganNQREYuYWRkU3ZnQXNJbWFnZWApO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGNhbnZhc2ApO2Mud2lkdGg9cixjLmhlaWdodD1pO3ZhciBsPWMuZ2V0Q29udGV4dChgMmRgKTtsLmZpbGxTdHlsZT1gI2ZmZmAsbC5maWxsUmVjdCgwLDAsYy53aWR0aCxjLmhlaWdodCk7dmFyIHU9e2lnbm9yZU1vdXNlOiEwLGlnbm9yZUFuaW1hdGlvbjohMCxpZ25vcmVEaW1lbnNpb25zOiEwfSxkPXRoaXM7cmV0dXJuKFJoLmNhbnZnP1Byb21pc2UucmVzb2x2ZShSaC5jYW52Zyk6TygoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFZtKCksQ2YpKSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKSkuY2F0Y2goZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEVycm9yKGBDb3VsZCBub3QgbG9hZCBjYW52ZzogYCtlKSl9KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZmF1bHQ/ZS5kZWZhdWx0OmV9KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdHJpbmcobCxlLHUpfSxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlamVjdChFcnJvcihgQ291bGQgbm90IGxvYWQgY2FudmcuYCkpfSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXIodSl9KS50aGVuKGZ1bmN0aW9uKCl7ZC5hZGRJbWFnZShjLnRvRGF0YVVSTChgaW1hZ2UvanBlZ2AsMSksdCxuLHIsaSxvLHMpfSl9LFouQVBJLnB1dFRvdGFsUGFnZXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj0wO3BhcnNlSW50KHRoaXMuaW50ZXJuYWwuZ2V0Rm9udCgpLmlkLnN1YnN0cigxKSwxMCk8MTU/KHQ9bmV3IFJlZ0V4cChlLGBnYCksbj10aGlzLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKSk6KHQ9bmV3IFJlZ0V4cCh0aGlzLnBkZkVzY2FwZTE2KGUsdGhpcy5pbnRlcm5hbC5nZXRGb250KCkpLGBnYCksbj10aGlzLnBkZkVzY2FwZTE2KHRoaXMuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpK2BgLHRoaXMuaW50ZXJuYWwuZ2V0Rm9udCgpKSk7Zm9yKHZhciByPTE7cjw9dGhpcy5pbnRlcm5hbC5nZXROdW1iZXJPZlBhZ2VzKCk7cisrKWZvcih2YXIgaT0wO2k8dGhpcy5pbnRlcm5hbC5wYWdlc1tyXS5sZW5ndGg7aSsrKXRoaXMuaW50ZXJuYWwucGFnZXNbcl1baV09dGhpcy5pbnRlcm5hbC5wYWdlc1tyXVtpXS5yZXBsYWNlKHQsbik7cmV0dXJuIHRoaXN9LFouQVBJLnZpZXdlclByZWZlcmVuY2VzPWZ1bmN0aW9uKGUsdCl7dmFyIG47ZXx8PXt9LHR8fD0hMTt2YXIgcixpLGEsbz17SGlkZVRvb2xiYXI6e2RlZmF1bHRWYWx1ZTohMSx2YWx1ZTohMSx0eXBlOmBib29sZWFuYCxleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbITAsITFdLHBkZlZlcnNpb246MS4zfSxIaWRlTWVudWJhcjp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6YGJvb2xlYW5gLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OlshMCwhMV0scGRmVmVyc2lvbjoxLjN9LEhpZGVXaW5kb3dVSTp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6YGJvb2xlYW5gLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OlshMCwhMV0scGRmVmVyc2lvbjoxLjN9LEZpdFdpbmRvdzp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6YGJvb2xlYW5gLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OlshMCwhMV0scGRmVmVyc2lvbjoxLjN9LENlbnRlcldpbmRvdzp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6YGJvb2xlYW5gLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OlshMCwhMV0scGRmVmVyc2lvbjoxLjN9LERpc3BsYXlEb2NUaXRsZTp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6YGJvb2xlYW5gLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OlshMCwhMV0scGRmVmVyc2lvbjoxLjR9LE5vbkZ1bGxTY3JlZW5QYWdlTW9kZTp7ZGVmYXVsdFZhbHVlOmBVc2VOb25lYCx2YWx1ZTpgVXNlTm9uZWAsdHlwZTpgbmFtZWAsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6W2BVc2VOb25lYCxgVXNlT3V0bGluZXNgLGBVc2VUaHVtYnNgLGBVc2VPQ2BdLHBkZlZlcnNpb246MS4zfSxEaXJlY3Rpb246e2RlZmF1bHRWYWx1ZTpgTDJSYCx2YWx1ZTpgTDJSYCx0eXBlOmBuYW1lYCxleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbYEwyUmAsYFIyTGBdLHBkZlZlcnNpb246MS4zfSxWaWV3QXJlYTp7ZGVmYXVsdFZhbHVlOmBDcm9wQm94YCx2YWx1ZTpgQ3JvcEJveGAsdHlwZTpgbmFtZWAsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6W2BNZWRpYUJveGAsYENyb3BCb3hgLGBUcmltQm94YCxgQmxlZWRCb3hgLGBBcnRCb3hgXSxwZGZWZXJzaW9uOjEuNH0sVmlld0NsaXA6e2RlZmF1bHRWYWx1ZTpgQ3JvcEJveGAsdmFsdWU6YENyb3BCb3hgLHR5cGU6YG5hbWVgLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OltgTWVkaWFCb3hgLGBDcm9wQm94YCxgVHJpbUJveGAsYEJsZWVkQm94YCxgQXJ0Qm94YF0scGRmVmVyc2lvbjoxLjR9LFByaW50QXJlYTp7ZGVmYXVsdFZhbHVlOmBDcm9wQm94YCx2YWx1ZTpgQ3JvcEJveGAsdHlwZTpgbmFtZWAsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6W2BNZWRpYUJveGAsYENyb3BCb3hgLGBUcmltQm94YCxgQmxlZWRCb3hgLGBBcnRCb3hgXSxwZGZWZXJzaW9uOjEuNH0sUHJpbnRDbGlwOntkZWZhdWx0VmFsdWU6YENyb3BCb3hgLHZhbHVlOmBDcm9wQm94YCx0eXBlOmBuYW1lYCxleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbYE1lZGlhQm94YCxgQ3JvcEJveGAsYFRyaW1Cb3hgLGBCbGVlZEJveGAsYEFydEJveGBdLHBkZlZlcnNpb246MS40fSxQcmludFNjYWxpbmc6e2RlZmF1bHRWYWx1ZTpgQXBwRGVmYXVsdGAsdmFsdWU6YEFwcERlZmF1bHRgLHR5cGU6YG5hbWVgLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OltgQXBwRGVmYXVsdGAsYE5vbmVgXSxwZGZWZXJzaW9uOjEuNn0sRHVwbGV4OntkZWZhdWx0VmFsdWU6YGAsdmFsdWU6YG5vbmVgLHR5cGU6YG5hbWVgLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OltgU2ltcGxleGAsYER1cGxleEZsaXBTaG9ydEVkZ2VgLGBEdXBsZXhGbGlwTG9uZ0VkZ2VgLGBub25lYF0scGRmVmVyc2lvbjoxLjd9LFBpY2tUcmF5QnlQREZTaXplOntkZWZhdWx0VmFsdWU6ITEsdmFsdWU6ITEsdHlwZTpgYm9vbGVhbmAsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6WyEwLCExXSxwZGZWZXJzaW9uOjEuN30sUHJpbnRQYWdlUmFuZ2U6e2RlZmF1bHRWYWx1ZTpgYCx2YWx1ZTpgYCx0eXBlOmBhcnJheWAsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6bnVsbCxwZGZWZXJzaW9uOjEuN30sTnVtQ29waWVzOntkZWZhdWx0VmFsdWU6MSx2YWx1ZToxLHR5cGU6YGludGVnZXJgLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0Om51bGwscGRmVmVyc2lvbjoxLjd9fSxzPU9iamVjdC5rZXlzKG8pLGM9W10sbD0wLHU9MCxkPTA7ZnVuY3Rpb24gZihlLHQpe3ZhciBuLHI9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rPTEpZVtuXT09PXQmJihyPSEwKTtyZXR1cm4gcn1pZih0aGlzLmludGVybmFsLnZpZXdlcnByZWZlcmVuY2VzPT09dm9pZCAwJiYodGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcz17fSx0aGlzLmludGVybmFsLnZpZXdlcnByZWZlcmVuY2VzLmNvbmZpZ3VyYXRpb249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSksdGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcy5pc1N1YnNjcmliZWQ9ITEpLG49dGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcy5jb25maWd1cmF0aW9uLGU9PT1gcmVzZXRgfHwhMD09PXQpe3ZhciBwPXMubGVuZ3RoO2ZvcihkPTA7ZDxwO2QrPTEpbltzW2RdXS52YWx1ZT1uW3NbZF1dLmRlZmF1bHRWYWx1ZSxuW3NbZF1dLmV4cGxpY2l0U2V0PSExfWlmKEEoZSk9PT1gb2JqZWN0YCl7Zm9yKGkgaW4gZSlpZihhPWVbaV0sZihzLGkpJiZhIT09dm9pZCAwKXtpZihuW2ldLnR5cGU9PT1gYm9vbGVhbmAmJnR5cGVvZiBhPT1gYm9vbGVhbmApbltpXS52YWx1ZT1hO2Vsc2UgaWYobltpXS50eXBlPT09YG5hbWVgJiZmKG5baV0udmFsdWVTZXQsYSkpbltpXS52YWx1ZT1hO2Vsc2UgaWYobltpXS50eXBlPT09YGludGVnZXJgJiZOdW1iZXIuaXNJbnRlZ2VyKGEpKW5baV0udmFsdWU9YTtlbHNlIGlmKG5baV0udHlwZT09PWBhcnJheWApe2ZvcihsPTA7bDxhLmxlbmd0aDtsKz0xKWlmKHI9ITAsYVtsXS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVtsXVswXT09YG51bWJlcmApYy5wdXNoKFN0cmluZyhhW2xdLTEpKTtlbHNlIGlmKGFbbF0ubGVuZ3RoPjEpe2Zvcih1PTA7dTxhW2xdLmxlbmd0aDt1Kz0xKXR5cGVvZiBhW2xdW3VdIT1gbnVtYmVyYCYmKHI9ITEpOyEwPT09ciYmYy5wdXNoKFthW2xdWzBdLTEsYVtsXVsxXS0xXS5qb2luKGAgYCkpfW5baV0udmFsdWU9YFtgK2Muam9pbihgIGApK2BdYH1lbHNlIG5baV0udmFsdWU9bltpXS5kZWZhdWx0VmFsdWU7bltpXS5leHBsaWNpdFNldD0hMH19cmV0dXJuITE9PT10aGlzLmludGVybmFsLnZpZXdlcnByZWZlcmVuY2VzLmlzU3Vic2NyaWJlZCYmKHRoaXMuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShgcHV0Q2F0YWxvZ2AsZnVuY3Rpb24oKXt2YXIgZSx0PVtdO2ZvcihlIGluIG4pITA9PT1uW2VdLmV4cGxpY2l0U2V0JiYobltlXS50eXBlPT09YG5hbWVgP3QucHVzaChgL2ArZStgIC9gK25bZV0udmFsdWUpOnQucHVzaChgL2ArZStgIGArbltlXS52YWx1ZSkpO3QubGVuZ3RoIT09MCYmdGhpcy5pbnRlcm5hbC53cml0ZShgL1ZpZXdlclByZWZlcmVuY2VzCjw8CmArdC5qb2luKGAKYCkrYAo+PmApfSksdGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcy5pc1N1YnNjcmliZWQ9ITApLHRoaXMuaW50ZXJuYWwudmlld2VycHJlZmVyZW5jZXMuY29uZmlndXJhdGlvbj1uLHRoaXN9LFouQVBJLmFkZE1ldGFkYXRhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW50ZXJuYWwuX19tZXRhZGF0YV9fPT09dm9pZCAwJiYodGhpcy5pbnRlcm5hbC5fX21ldGFkYXRhX189e21ldGFkYXRhOmUsbmFtZXNwYWNlVXJpOnQ/P2BodHRwOi8vanNwZGYuZGVmYXVsdC5uYW1lc3BhY2V1cmkvYCxyYXdYbWw6dHlwZW9mIHQ9PWBib29sZWFuYCYmdH0sdGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKGBwdXRDYXRhbG9nYCxMaCksdGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKGBwb3N0UHV0UmVzb3VyY2VzYCxJaCkpLHRoaXN9LGZ1bmN0aW9uKGUpe3ZhciB0PWUuQVBJLG49dC5wZGZFc2NhcGUxNj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPXQubWV0YWRhdGEuVW5pY29kZS53aWR0aHMsaT1bYGAsYDBgLGAwMGAsYDAwMGAsYDAwMDBgXSxhPVtgYF0sbz0wLHM9ZS5sZW5ndGg7bzxzOysrbyl7aWYobj10Lm1ldGFkYXRhLmNoYXJhY3RlclRvR2x5cGgoZS5jaGFyQ29kZUF0KG8pKSx0Lm1ldGFkYXRhLmdseUlkc1VzZWQucHVzaChuKSx0Lm1ldGFkYXRhLnRvVW5pY29kZVtuXT1lLmNoYXJDb2RlQXQobyksci5pbmRleE9mKG4pPT0tMSYmKHIucHVzaChuKSxyLnB1c2goW3BhcnNlSW50KHQubWV0YWRhdGEud2lkdGhPZkdseXBoKG4pLDEwKV0pKSxuPT1gMGApcmV0dXJuIGEuam9pbihgYCk7bj1uLnRvU3RyaW5nKDE2KSxhLnB1c2goaVs0LW4ubGVuZ3RoXSxuKX1yZXR1cm4gYS5qb2luKGBgKX0scj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxhLG8scztmb3IoYT1gL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luCjEyIGRpY3QgYmVnaW4KYmVnaW5jbWFwCi9DSURTeXN0ZW1JbmZvIDw8CiAgL1JlZ2lzdHJ5IChBZG9iZSkKICAvT3JkZXJpbmcgKFVDUykKICAvU3VwcGxlbWVudCAwCj4+IGRlZgovQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWYKL0NNYXBUeXBlIDIgZGVmCjEgYmVnaW5jb2Rlc3BhY2VyYW5nZQo8MDAwMD48ZmZmZj4KZW5kY29kZXNwYWNlcmFuZ2VgLHI9W10sbz0wLHM9KG49T2JqZWN0LmtleXMoZSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSkubGVuZ3RoO288cztvKyspdD1uW29dLHIubGVuZ3RoPj0xMDAmJihhKz1gCmArci5sZW5ndGgrYCBiZWdpbmJmY2hhcgpgK3Iuam9pbihgCmApK2AKZW5kYmZjaGFyYCxyPVtdKSxlW3RdIT09dm9pZCAwJiZlW3RdIT09bnVsbCYmdHlwZW9mIGVbdF0udG9TdHJpbmc9PWBmdW5jdGlvbmAmJihpPShgMDAwMGArZVt0XS50b1N0cmluZygxNikpLnNsaWNlKC00KSx0PShgMDAwMGArKCt0KS50b1N0cmluZygxNikpLnNsaWNlKC00KSxyLnB1c2goYDxgK3QrYD48YCtpK2A+YCkpO3JldHVybiByLmxlbmd0aCYmKGErPWAKYCtyLmxlbmd0aCtgIGJlZ2luYmZjaGFyCmArci5qb2luKGAKYCkrYAplbmRiZmNoYXIKYCksYStgZW5kY21hcApDTWFwTmFtZSBjdXJyZW50ZGljdCAvQ01hcCBkZWZpbmVyZXNvdXJjZSBwb3AKZW5kCmVuZGB9O3QuZXZlbnRzLnB1c2goW2BwdXRGb250YCxmdW5jdGlvbih0KXsoZnVuY3Rpb24odCl7dmFyIG49dC5mb250LGk9dC5vdXQsYT10Lm5ld09iamVjdCxvPXQucHV0U3RyZWFtO2lmKG4ubWV0YWRhdGEgaW5zdGFuY2VvZiBlLkFQSS5UVEZGb250JiZuLmVuY29kaW5nPT09YElkZW50aXR5LUhgKXtmb3IodmFyIHM9bi5tZXRhZGF0YS5Vbmljb2RlLndpZHRocyxjPW4ubWV0YWRhdGEuc3Vic2V0LmVuY29kZShuLm1ldGFkYXRhLmdseUlkc1VzZWQsMSksbD1gYCx1PTA7dTxjLmxlbmd0aDt1KyspbCs9U3RyaW5nLmZyb21DaGFyQ29kZShjW3VdKTt2YXIgZD1hKCk7byh7ZGF0YTpsLGFkZExlbmd0aDE6ITAsb2JqZWN0SWQ6ZH0pLGkoYGVuZG9iamApO3ZhciBmPWEoKTtvKHtkYXRhOnIobi5tZXRhZGF0YS50b1VuaWNvZGUpLGFkZExlbmd0aDE6ITAsb2JqZWN0SWQ6Zn0pLGkoYGVuZG9iamApO3ZhciBwPWEoKTtpKGA8PGApLGkoYC9UeXBlIC9Gb250RGVzY3JpcHRvcmApLGkoYC9Gb250TmFtZSAvYCtzaChuLmZvbnROYW1lKSksaShgL0ZvbnRGaWxlMiBgK2QrYCAwIFJgKSxpKGAvRm9udEJCb3ggYCtlLkFQSS5QREZPYmplY3QuY29udmVydChuLm1ldGFkYXRhLmJib3gpKSxpKGAvRmxhZ3MgYCtuLm1ldGFkYXRhLmZsYWdzKSxpKGAvU3RlbVYgYCtuLm1ldGFkYXRhLnN0ZW1WKSxpKGAvSXRhbGljQW5nbGUgYCtuLm1ldGFkYXRhLml0YWxpY0FuZ2xlKSxpKGAvQXNjZW50IGArbi5tZXRhZGF0YS5hc2NlbmRlciksaShgL0Rlc2NlbnQgYCtuLm1ldGFkYXRhLmRlY2VuZGVyKSxpKGAvQ2FwSGVpZ2h0IGArbi5tZXRhZGF0YS5jYXBIZWlnaHQpLGkoYD4+YCksaShgZW5kb2JqYCk7dmFyIG09YSgpO2koYDw8YCksaShgL1R5cGUgL0ZvbnRgKSxpKGAvQmFzZUZvbnQgL2Arc2gobi5mb250TmFtZSkpLGkoYC9Gb250RGVzY3JpcHRvciBgK3ArYCAwIFJgKSxpKGAvVyBgK2UuQVBJLlBERk9iamVjdC5jb252ZXJ0KHMpKSxpKGAvQ0lEVG9HSURNYXAgL0lkZW50aXR5YCksaShgL0RXIDEwMDBgKSxpKGAvU3VidHlwZSAvQ0lERm9udFR5cGUyYCksaShgL0NJRFN5c3RlbUluZm9gKSxpKGA8PGApLGkoYC9TdXBwbGVtZW50IDBgKSxpKGAvUmVnaXN0cnkgKEFkb2JlKWApLGkoYC9PcmRlcmluZyAoYCtuLmVuY29kaW5nK2ApYCksaShgPj5gKSxpKGA+PmApLGkoYGVuZG9iamApLG4ub2JqZWN0TnVtYmVyPWEoKSxpKGA8PGApLGkoYC9UeXBlIC9Gb250YCksaShgL1N1YnR5cGUgL1R5cGUwYCksaShgL1RvVW5pY29kZSBgK2YrYCAwIFJgKSxpKGAvQmFzZUZvbnQgL2Arc2gobi5mb250TmFtZSkpLGkoYC9FbmNvZGluZyAvYCtuLmVuY29kaW5nKSxpKGAvRGVzY2VuZGFudEZvbnRzIFtgK20rYCAwIFJdYCksaShgPj5gKSxpKGBlbmRvYmpgKSxuLmlzQWxyZWFkeVB1dHRlZD0hMH19KSh0KX1dKSx0LmV2ZW50cy5wdXNoKFtgcHV0Rm9udGAsZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBuPXQuZm9udCxpPXQub3V0LGE9dC5uZXdPYmplY3Qsbz10LnB1dFN0cmVhbTtpZihuLm1ldGFkYXRhIGluc3RhbmNlb2YgZS5BUEkuVFRGRm9udCYmbi5lbmNvZGluZz09PWBXaW5BbnNpRW5jb2RpbmdgKXtmb3IodmFyIHM9bi5tZXRhZGF0YS5yYXdEYXRhLGM9YGAsbD0wO2w8cy5sZW5ndGg7bCsrKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoc1tsXSk7dmFyIHU9YSgpO28oe2RhdGE6YyxhZGRMZW5ndGgxOiEwLG9iamVjdElkOnV9KSxpKGBlbmRvYmpgKTt2YXIgZD1hKCk7byh7ZGF0YTpyKG4ubWV0YWRhdGEudG9Vbmljb2RlKSxhZGRMZW5ndGgxOiEwLG9iamVjdElkOmR9KSxpKGBlbmRvYmpgKTt2YXIgZj1hKCk7aShgPDxgKSxpKGAvRGVzY2VudCBgK24ubWV0YWRhdGEuZGVjZW5kZXIpLGkoYC9DYXBIZWlnaHQgYCtuLm1ldGFkYXRhLmNhcEhlaWdodCksaShgL1N0ZW1WIGArbi5tZXRhZGF0YS5zdGVtViksaShgL1R5cGUgL0ZvbnREZXNjcmlwdG9yYCksaShgL0ZvbnRGaWxlMiBgK3UrYCAwIFJgKSxpKGAvRmxhZ3MgOTZgKSxpKGAvRm9udEJCb3ggYCtlLkFQSS5QREZPYmplY3QuY29udmVydChuLm1ldGFkYXRhLmJib3gpKSxpKGAvRm9udE5hbWUgL2Arc2gobi5mb250TmFtZSkpLGkoYC9JdGFsaWNBbmdsZSBgK24ubWV0YWRhdGEuaXRhbGljQW5nbGUpLGkoYC9Bc2NlbnQgYCtuLm1ldGFkYXRhLmFzY2VuZGVyKSxpKGA+PmApLGkoYGVuZG9iamApLG4ub2JqZWN0TnVtYmVyPWEoKTtmb3IodmFyIHA9MDtwPG4ubWV0YWRhdGEuaG10eC53aWR0aHMubGVuZ3RoO3ArKyluLm1ldGFkYXRhLmhtdHgud2lkdGhzW3BdPXBhcnNlSW50KG4ubWV0YWRhdGEuaG10eC53aWR0aHNbcF0qKDFlMy9uLm1ldGFkYXRhLmhlYWQudW5pdHNQZXJFbSkpO2koYDw8L1N1YnR5cGUvVHJ1ZVR5cGUvVHlwZS9Gb250L1RvVW5pY29kZSBgK2QrYCAwIFIvQmFzZUZvbnQvYCtzaChuLmZvbnROYW1lKStgL0ZvbnREZXNjcmlwdG9yIGArZitgIDAgUi9FbmNvZGluZy9gK24uZW5jb2RpbmcrYCAvRmlyc3RDaGFyIDI5IC9MYXN0Q2hhciAyNTUgL1dpZHRocyBgK2UuQVBJLlBERk9iamVjdC5jb252ZXJ0KG4ubWV0YWRhdGEuaG10eC53aWR0aHMpK2A+PmApLGkoYGVuZG9iamApLG4uaXNBbHJlYWR5UHV0dGVkPSEwfX0pKHQpfV0pO3ZhciBpPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS50ZXh0fHxgYCxpPWUueCxhPWUueSxvPWUub3B0aW9uc3x8e30scz1lLm11dGV4fHx7fSxjPXMucGRmRXNjYXBlLGw9cy5hY3RpdmVGb250S2V5LHU9cy5mb250cyxkPWwsZj1gYCxwPTAsbT1gYCxoPXVbZF0uZW5jb2Rpbmc7aWYodVtkXS5lbmNvZGluZyE9PWBJZGVudGl0eS1IYClyZXR1cm57dGV4dDpyLHg6aSx5OmEsb3B0aW9uczpvLG11dGV4OnN9O2ZvcihtPXIsZD1sLEFycmF5LmlzQXJyYXkocikmJihtPXJbMF0pLHA9MDtwPG0ubGVuZ3RoO3ArPTEpdVtkXS5tZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShgY21hcGApJiYodD11W2RdLm1ldGFkYXRhLmNtYXAudW5pY29kZS5jb2RlTWFwW21bcF0uY2hhckNvZGVBdCgwKV0pLHR8fG1bcF0uY2hhckNvZGVBdCgwKTwyNTYmJnVbZF0ubWV0YWRhdGEuaGFzT3duUHJvcGVydHkoYFVuaWNvZGVgKT9mKz1tW3BdOmYrPWBgO3ZhciBnPWBgO3JldHVybiBwYXJzZUludChkLnNsaWNlKDEpKTwxNHx8aD09PWBXaW5BbnNpRW5jb2RpbmdgP2c9YyhmLGQpLnNwbGl0KGBgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNil9KS5qb2luKGBgKTpoPT09YElkZW50aXR5LUhgJiYoZz1uKGYsdVtkXSkpLHMuaXNIZXg9ITAse3RleHQ6Zyx4OmkseTphLG9wdGlvbnM6byxtdXRleDpzfX07dC5ldmVudHMucHVzaChbYHBvc3RQcm9jZXNzVGV4dGAsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50ZXh0fHxgYCxuPVtdLHI9e3RleHQ6dCx4OmUueCx5OmUueSxvcHRpb25zOmUub3B0aW9ucyxtdXRleDplLm11dGV4fTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgYT0wO2ZvcihhPTA7YTx0Lmxlbmd0aDthKz0xKUFycmF5LmlzQXJyYXkodFthXSkmJnRbYV0ubGVuZ3RoPT09Mz9uLnB1c2goW2koT2JqZWN0LmFzc2lnbih7fSxyLHt0ZXh0OnRbYV1bMF19KSkudGV4dCx0W2FdWzFdLHRbYV1bMl1dKTpuLnB1c2goaShPYmplY3QuYXNzaWduKHt9LHIse3RleHQ6dFthXX0pKS50ZXh0KTtlLnRleHQ9bn1lbHNlIGUudGV4dD1pKE9iamVjdC5hc3NpZ24oe30scix7dGV4dDp0fSkpLnRleHR9XSl9KFopLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW50ZXJuYWwudkZTPT09dm9pZCAwJiYodGhpcy5pbnRlcm5hbC52RlM9e30pLCEwfTtlLmV4aXN0c0ZpbGVJblZGUz1mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMpLHRoaXMuaW50ZXJuYWwudkZTW2VdIT09dm9pZCAwfSxlLmFkZEZpbGVUb1ZGUz1mdW5jdGlvbihlLG4pe3JldHVybiB0LmNhbGwodGhpcyksdGhpcy5pbnRlcm5hbC52RlNbZV09bix0aGlzfSxlLmdldEZpbGVGcm9tVkZTPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyksdGhpcy5pbnRlcm5hbC52RlNbZV09PT12b2lkIDA/bnVsbDp0aGlzLmludGVybmFsLnZGU1tlXX19KFouQVBJKSxmdW5jdGlvbihlKXtlLl9fYmlkaUVuZ2luZV9fPWUucHJvdG90eXBlLl9fYmlkaUVuZ2luZV9fPWZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxhLG8scyxjLGw9dCx1PVtbMCwzLDAsMSwwLDAsMF0sWzAsMywwLDEsMiwyLDBdLFswLDMsMCwxNywyLDAsMV0sWzAsMyw1LDUsNCwxLDBdLFswLDMsMjEsMjEsNCwwLDFdLFswLDMsNSw1LDQsMiwwXV0sZD1bWzIsMCwxLDEsMCwxLDBdLFsyLDAsMSwxLDAsMiwwXSxbMiwwLDIsMSwzLDIsMF0sWzIsMCwyLDMzLDMsMSwxXV0sZj17TDowLFI6MSxFTjoyLEFOOjMsTjo0LEI6NSxTOjZ9LHA9ezA6MCw1OjEsNjoyLDc6MywzMjo0LDI1MTo1LDI1NDo2LDI1NTo3fSxtPWAoLikuKC48Lj4uPC5bLl0uWy57Ln0uey7Cqy7Cuy7Cqy7igLku4oC6LuKAuS7igYUu4oGGLuKBhS7igb0u4oG+LuKBvS7igo0u4oKOLuKCjS7iiaQu4omlLuKJpC7ijKku4oyqLuKMqS7vuZku77maLu+5mS7vuZsu77mcLu+5my7vuZ0u77meLu+5nS7vuaQu77mlLu+5pGAuc3BsaXQoYC5gKSxoPW5ldyBSZWdFeHAoL14oWzEtNHw5XXwxWzAtOV18MlswLTldfDNbMDE2OF18NFswNDU4OV18NVswMTJdfDdbNzhdfDE1OXwxNlswLTldfDE3WzAtMl18MjFbNTY5XXwyMlswMzQ4OV18MjUwKSQvKSxnPSExLF89MDt0aGlzLl9fYmlkaUVuZ2luZV9fPXt9O3ZhciB2PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hhckNvZGVBdCgpLG49dD4+OCxyPXBbbl07cmV0dXJuIHI9PT12b2lkIDA/bj09PTI1Mnx8bj09PTI1Mz9gQUxgOmgudGVzdChuKT9gTGA6bj09PTg/YFJgOmBOYDpsWzI1NipyKygyNTUmdCldfSx5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTA7bjxlLmxlbmd0aDtuKyspe2lmKCh0PXYoZS5jaGFyQXQobikpKT09PWBMYClyZXR1cm4hMTtpZih0PT09YFJgKXJldHVybiEwfXJldHVybiExfSxiPWZ1bmN0aW9uKGUsdCxvLHMpe3ZhciBjLGwsdSxkLGY9dFtzXTtzd2l0Y2goZil7Y2FzZWBMYDpjYXNlYFJgOmNhc2VgTFJFYDpjYXNlYFJMRWA6Y2FzZWBMUk9gOmNhc2VgUkxPYDpjYXNlYFBERmA6Zz0hMTticmVhaztjYXNlYE5gOmNhc2VgQU5gOmJyZWFrO2Nhc2VgRU5gOmcmJihmPWBBTmApO2JyZWFrO2Nhc2VgQUxgOmc9ITAsZj1gUmA7YnJlYWs7Y2FzZWBXU2A6Y2FzZWBCTmA6Zj1gTmA7YnJlYWs7Y2FzZWBDU2A6czwxfHxzKzE+PXQubGVuZ3RofHwoYz1vW3MtMV0pIT09YEVOYCYmYyE9PWBBTmB8fChsPXRbcysxXSkhPT1gRU5gJiZsIT09YEFOYD9mPWBOYDpnJiYobD1gQU5gKSxmPWw9PT1jP2w6YE5gO2JyZWFrO2Nhc2VgRVNgOmY9KGM9cz4wP29bcy0xXTpgQmApPT09YEVOYCYmcysxPHQubGVuZ3RoJiZ0W3MrMV09PT1gRU5gP2BFTmA6YE5gO2JyZWFrO2Nhc2VgRVRgOmlmKHM+MCYmb1tzLTFdPT09YEVOYCl7Zj1gRU5gO2JyZWFrfWlmKGcpe2Y9YE5gO2JyZWFrfWZvcih1PXMrMSxkPXQubGVuZ3RoO3U8ZCYmdFt1XT09PWBFVGA7KXUrKztmPXU8ZCYmdFt1XT09PWBFTmA/YEVOYDpgTmA7YnJlYWs7Y2FzZWBOU01gOmlmKGkmJiFhKXtmb3IoZD10Lmxlbmd0aCx1PXMrMTt1PGQmJnRbdV09PT1gTlNNYDspdSsrO2lmKHU8ZCl7dmFyIHA9ZVtzXSxtPXA+PTE0MjUmJnA8PTIzMDN8fHA9PT02NDI4NjtpZihjPXRbdV0sbSYmKGM9PT1gUmB8fGM9PT1gQUxgKSl7Zj1gUmA7YnJlYWt9fX1mPXM8MXx8KGM9dFtzLTFdKT09PWBCYD9gTmA6b1tzLTFdO2JyZWFrO2Nhc2VgQmA6Zz0hMSxuPSEwLGY9XzticmVhaztjYXNlYFNgOnI9ITAsZj1gTmB9cmV0dXJuIGZ9LHg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuc3BsaXQoYGApO3JldHVybiBuJiZTKHIsbix7aGlMZXZlbDpffSksci5yZXZlcnNlKCksdCYmdC5yZXZlcnNlKCksci5qb2luKGBgKX0sUz1mdW5jdGlvbihlLHQsaSl7dmFyIGEsbyxzLGMsbCxwPS0xLG09ZS5sZW5ndGgsaD0wLHk9W10seD1fP2Q6dSxTPVtdO2ZvcihnPSExLG49ITEscj0hMSxvPTA7bzxtO28rKylTW29dPXYoZVtvXSk7Zm9yKHM9MDtzPG07cysrKXtpZihsPWgseVtzXT1iKGUsUyx5LHMpLGE9MjQwJihoPXhbbF1bZlt5W3NdXV0pLGgmPTE1LHRbc109Yz14W2hdWzVdLGE+MClpZihhPT09MTYpe2ZvcihvPXA7bzxzO28rKyl0W29dPTE7cD0tMX1lbHNlIHA9LTE7aWYoeFtoXVs2XSlwPT09LTEmJihwPXMpO2Vsc2UgaWYocD4tMSl7Zm9yKG89cDtvPHM7bysrKXRbb109YztwPS0xfVNbc109PT1gQmAmJih0W3NdPTApLGkuaGlMZXZlbHw9Y31yJiZmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTA7cjxuO3IrKylpZihlW3JdPT09YFNgKXt0W3JdPV87Zm9yKHZhciBpPXItMTtpPj0wJiZlW2ldPT09YFdTYDtpLS0pdFtpXT1ffX0oUyx0LG0pfSxDPWZ1bmN0aW9uKGUsdCxyLGksYSl7aWYoIShhLmhpTGV2ZWw8ZSkpe2lmKGU9PT0xJiZfPT09MSYmIW4pcmV0dXJuIHQucmV2ZXJzZSgpLHZvaWQociYmci5yZXZlcnNlKCkpO2Zvcih2YXIgbyxzLGMsbCx1PXQubGVuZ3RoLGQ9MDtkPHU7KXtpZihpW2RdPj1lKXtmb3IoYz1kKzE7Yzx1JiZpW2NdPj1lOyljKys7Zm9yKGw9ZCxzPWMtMTtsPHM7bCsrLHMtLSlvPXRbbF0sdFtsXT10W3NdLHRbc109byxyJiYobz1yW2xdLHJbbF09cltzXSxyW3NdPW8pO2Q9Y31kKyt9fX0sdz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5zcGxpdChgYCksaT17aGlMZXZlbDpffTtyZXR1cm4gbnx8PVtdLFMocixuLGkpLGZ1bmN0aW9uKGUsdCxuKXtpZihuLmhpTGV2ZWwhPT0wJiZjKWZvcih2YXIgcixpPTA7aTxlLmxlbmd0aDtpKyspdFtpXT09PTEmJihyPW0uaW5kZXhPZihlW2ldKSk+PTAmJihlW2ldPW1bcisxXSl9KHIsbixpKSxDKDIscix0LG4saSksQygxLHIsdCxuLGkpLHIuam9pbihgYCl9O3JldHVybiB0aGlzLl9fYmlkaUVuZ2luZV9fLmRvQmlkaVJlb3JkZXI9ZnVuY3Rpb24oZSx0LG4pe2lmKGZ1bmN0aW9uKGUsdCl7aWYodClmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0W25dPW47YT09PXZvaWQgMCYmKGE9eShlKSkscz09PXZvaWQgMCYmKHM9eShlKSl9KGUsdCksaXx8IW98fHMpaWYoaSYmbyYmYV5zKV89KyEhYSxlPXgoZSx0LG4pO2Vsc2UgaWYoIWkmJm8mJnMpXz0rISFhLGU9dyhlLHQsbiksZT14KGUsdCk7ZWxzZSBpZighaXx8YXx8b3x8cyl7aWYoaSYmIW8mJmFecyllPXgoZSx0KSxhPyhfPTAsZT13KGUsdCxuKSk6KF89MSxlPXcoZSx0LG4pLGU9eChlLHQpKTtlbHNlIGlmKGkmJmEmJiFvJiZzKV89MSxlPXcoZSx0LG4pLGU9eChlLHQpO2Vsc2UgaWYoIWkmJiFvJiZhXnMpe3ZhciByPWM7YT8oXz0xLGU9dyhlLHQsbiksXz0wLGM9ITEsZT13KGUsdCxuKSxjPXIpOihfPTAsZT13KGUsdCxuKSxlPXgoZSx0KSxfPTEsYz0hMSxlPXcoZSx0LG4pLGM9cixlPXgoZSx0KSl9fWVsc2UgXz0wLGU9dyhlLHQsbik7ZWxzZSBfPSshIWEsZT13KGUsdCxuKTtyZXR1cm4gZX0sdGhpcy5fX2JpZGlFbmdpbmVfXy5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe2UmJihpPWUuaXNJbnB1dFZpc3VhbCxvPWUuaXNPdXRwdXRWaXN1YWwsYT1lLmlzSW5wdXRSdGwscz1lLmlzT3V0cHV0UnRsLGM9ZS5pc1N5bW1ldHJpY1N3YXBwaW5nKX0sdGhpcy5fX2JpZGlFbmdpbmVfXy5zZXRPcHRpb25zKGUpLHRoaXMuX19iaWRpRW5naW5lX199O3ZhciB0PWBCTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5TLkIuUy5XUy5CLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkJOLkIuQi5CLlMuV1MuTi5OLkVULkVULkVULk4uTi5OLk4uTi5FUy5DUy5FUy5DUy5DUy5FTi5FTi5FTi5FTi5FTi5FTi5FTi5FTi5FTi5FTi5DUy5OLk4uTi5OLk4uTi5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTi5OLk4uTi5OLk4uTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLk4uTi5OLk4uQk4uQk4uQk4uQk4uQk4uQk4uQi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5CTi5DUy5OLkVULkVULkVULkVULk4uTi5OLk4uTC5OLk4uQk4uTi5OLkVULkVULkVOLkVOLk4uTC5OLk4uTi5FTi5MLk4uTi5OLk4uTi5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTi5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLk4uTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLk4uTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLk4uTi5MLkwuTC5MLkwuTC5MLk4uTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTi5MLk4uTi5OLk4uTi5FVC5OLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLlIuTlNNLlIuTlNNLk5TTS5SLk5TTS5OU00uUi5OU00uTi5OLk4uTi5OLk4uTi5OLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLk4uTi5OLk4uTi5SLlIuUi5SLlIuTi5OLk4uTi5OLk4uTi5OLk4uTi5OLkFOLkFOLkFOLkFOLkFOLkFOLk4uTi5BTC5FVC5FVC5BTC5DUy5BTC5OLk4uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5BTC5BTC5OLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLkFOLkFOLkFOLkFOLkFOLkFOLkFOLkFOLkFOLkFOLkVULkFOLkFOLkFMLkFMLkFMLk5TTS5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uQU4uTi5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5BTC5BTC5OU00uTlNNLk4uTlNNLk5TTS5OU00uTlNNLkFMLkFMLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLk4uQUwuQUwuTlNNLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk4uTi5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLkFMLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLlIuUi5OLk4uTi5OLlIuTi5OLk4uTi5OLldTLldTLldTLldTLldTLldTLldTLldTLldTLldTLldTLkJOLkJOLkJOLkwuUi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5XUy5CLkxSRS5STEUuUERGLkxSTy5STE8uQ1MuRVQuRVQuRVQuRVQuRVQuTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uQ1MuTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLldTLkJOLkJOLkJOLkJOLkJOLk4uTFJJLlJMSS5GU0kuUERJLkJOLkJOLkJOLkJOLkJOLkJOLkVOLkwuTi5OLkVOLkVOLkVOLkVOLkVOLkVOLkVTLkVTLk4uTi5OLkwuRU4uRU4uRU4uRU4uRU4uRU4uRU4uRU4uRU4uRU4uRVMuRVMuTi5OLk4uTi5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLk4uTi5OLkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULkVULk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5MLkwuTC5MLkwuTC5MLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLkwuTC5MLkwuTC5OLk4uTi5OLk4uUi5OU00uUi5SLlIuUi5SLlIuUi5SLlIuUi5FUy5SLlIuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLk4uUi5SLlIuUi5SLk4uUi5OLlIuUi5OLlIuUi5OLlIuUi5SLlIuUi5SLlIuUi5SLlIuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuQUwuTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLkFMLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OU00uTlNNLk5TTS5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uQ1MuTi5DUy5OLk4uQ1MuTi5OLk4uTi5OLk4uTi5OLk4uRVQuTi5OLkVTLkVTLk4uTi5OLk4uTi5FVC5FVC5OLk4uTi5OLk4uQUwuQUwuQUwuQUwuQUwuTi5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5BTC5OLk4uQk4uTi5OLk4uRVQuRVQuRVQuTi5OLk4uTi5OLkVTLkNTLkVTLkNTLkNTLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkVOLkNTLk4uTi5OLk4uTi5OLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5OLk4uTi5OLk4uTi5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTi5OLk4uTi5OLk4uTi5OLk4uTi5OLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5MLkwuTC5OLk4uTi5MLkwuTC5MLkwuTC5OLk4uTC5MLkwuTC5MLkwuTi5OLkwuTC5MLkwuTC5MLk4uTi5MLkwuTC5OLk4uTi5FVC5FVC5OLk4uTi5FVC5FVC5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OLk4uTi5OYC5zcGxpdChgLmApLG49bmV3IGUuX19iaWRpRW5naW5lX18oe2lzSW5wdXRWaXN1YWw6ITB9KTtlLkFQSS5ldmVudHMucHVzaChbYHBvc3RQcm9jZXNzVGV4dGAsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50ZXh0O2UueCxlLnk7dmFyIHI9ZS5vcHRpb25zfHx7fTtlLm11dGV4LHIubGFuZzt2YXIgaT1bXTtpZihyLmlzSW5wdXRWaXN1YWw9dHlwZW9mIHIuaXNJbnB1dFZpc3VhbCE9YGJvb2xlYW5gfHxyLmlzSW5wdXRWaXN1YWwsbi5zZXRPcHRpb25zKHIpLE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PWBbb2JqZWN0IEFycmF5XWApe3ZhciBhPTA7Zm9yKGk9W10sYT0wO2E8dC5sZW5ndGg7YSs9MSlPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodFthXSk9PT1gW29iamVjdCBBcnJheV1gP2kucHVzaChbbi5kb0JpZGlSZW9yZGVyKHRbYV1bMF0pLHRbYV1bMV0sdFthXVsyXV0pOmkucHVzaChbbi5kb0JpZGlSZW9yZGVyKHRbYV0pXSk7ZS50ZXh0PWl9ZWxzZSBlLnRleHQ9bi5kb0JpZGlSZW9yZGVyKHQpO24uc2V0T3B0aW9ucyh7aXNJbnB1dFZpc3VhbDohMH0pfV0pfShaKSxaLkFQSS5UVEZGb250PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdDtpZih0aGlzLnJhd0RhdGE9ZSx0PXRoaXMuY29udGVudHM9bmV3IHFnKGUpLHRoaXMuY29udGVudHMucG9zPTQsdC5yZWFkU3RyaW5nKDQpPT09YHR0Y2ZgKXRocm93IEVycm9yKGBUVENGIG5vdCBzdXBwb3J0ZWQuYCk7dC5wb3M9MCx0aGlzLnBhcnNlKCksdGhpcy5zdWJzZXQ9bmV3IGZfKHRoaXMpLHRoaXMucmVnaXN0ZXJUVEYoKX1yZXR1cm4gZS5vcGVuPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0KX0sZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXJlY3Rvcnk9bmV3IEpnKHRoaXMuY29udGVudHMpLHRoaXMuaGVhZD1uZXcgWmcodGhpcyksdGhpcy5uYW1lPW5ldyBpXyh0aGlzKSx0aGlzLmNtYXA9bmV3ICRnKHRoaXMpLHRoaXMudG9Vbmljb2RlPXt9LHRoaXMuaGhlYT1uZXcgZV8odGhpcyksdGhpcy5tYXhwPW5ldyBhXyh0aGlzKSx0aGlzLmhtdHg9bmV3IG9fKHRoaXMpLHRoaXMucG9zdD1uZXcgbl8odGhpcyksdGhpcy5vczI9bmV3IHRfKHRoaXMpLHRoaXMubG9jYT1uZXcgZF8odGhpcyksdGhpcy5nbHlmPW5ldyBjXyh0aGlzKSx0aGlzLmFzY2VuZGVyPXRoaXMub3MyLmV4aXN0cyYmdGhpcy5vczIuYXNjZW5kZXJ8fHRoaXMuaGhlYS5hc2NlbmRlcix0aGlzLmRlY2VuZGVyPXRoaXMub3MyLmV4aXN0cyYmdGhpcy5vczIuZGVjZW5kZXJ8fHRoaXMuaGhlYS5kZWNlbmRlcix0aGlzLmxpbmVHYXA9dGhpcy5vczIuZXhpc3RzJiZ0aGlzLm9zMi5saW5lR2FwfHx0aGlzLmhoZWEubGluZUdhcCx0aGlzLmJib3g9W3RoaXMuaGVhZC54TWluLHRoaXMuaGVhZC55TWluLHRoaXMuaGVhZC54TWF4LHRoaXMuaGVhZC55TWF4XX0sZS5wcm90b3R5cGUucmVnaXN0ZXJUVEY9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpO2lmKHRoaXMuc2NhbGVGYWN0b3I9MWUzL3RoaXMuaGVhZC51bml0c1BlckVtLHRoaXMuYmJveD1mdW5jdGlvbigpe3ZhciB0LG4scixpO2ZvcihpPVtdLHQ9MCxuPShyPXRoaXMuYmJveCkubGVuZ3RoO3Q8bjt0KyspZT1yW3RdLGkucHVzaChNYXRoLnJvdW5kKGUqdGhpcy5zY2FsZUZhY3RvcikpO3JldHVybiBpfS5jYWxsKHRoaXMpLHRoaXMuc3RlbVY9MCx0aGlzLnBvc3QuZXhpc3RzPyhuPTI1NSYocj10aGlzLnBvc3QuaXRhbGljX2FuZ2xlKSwzMjc2OCYodD1yPj4xNikmJih0PS0oMSsoNjU1MzVedCkpKSx0aGlzLml0YWxpY0FuZ2xlPSsodCtgLmArbikpOnRoaXMuaXRhbGljQW5nbGU9MCx0aGlzLmFzY2VuZGVyPU1hdGgucm91bmQodGhpcy5hc2NlbmRlcip0aGlzLnNjYWxlRmFjdG9yKSx0aGlzLmRlY2VuZGVyPU1hdGgucm91bmQodGhpcy5kZWNlbmRlcip0aGlzLnNjYWxlRmFjdG9yKSx0aGlzLmxpbmVHYXA9TWF0aC5yb3VuZCh0aGlzLmxpbmVHYXAqdGhpcy5zY2FsZUZhY3RvciksdGhpcy5jYXBIZWlnaHQ9dGhpcy5vczIuZXhpc3RzJiZ0aGlzLm9zMi5jYXBIZWlnaHR8fHRoaXMuYXNjZW5kZXIsdGhpcy54SGVpZ2h0PXRoaXMub3MyLmV4aXN0cyYmdGhpcy5vczIueEhlaWdodHx8MCx0aGlzLmZhbWlseUNsYXNzPSh0aGlzLm9zMi5leGlzdHMmJnRoaXMub3MyLmZhbWlseUNsYXNzfHwwKT4+OCx0aGlzLmlzU2VyaWY9KGk9dGhpcy5mYW1pbHlDbGFzcyk9PT0xfHxpPT09Mnx8aT09PTN8fGk9PT00fHxpPT09NXx8aT09PTcsdGhpcy5pc1NjcmlwdD10aGlzLmZhbWlseUNsYXNzPT09MTAsdGhpcy5mbGFncz0wLHRoaXMucG9zdC5pc0ZpeGVkUGl0Y2gmJih0aGlzLmZsYWdzfD0xKSx0aGlzLmlzU2VyaWYmJih0aGlzLmZsYWdzfD0yKSx0aGlzLmlzU2NyaXB0JiYodGhpcy5mbGFnc3w9OCksdGhpcy5pdGFsaWNBbmdsZSE9PTAmJih0aGlzLmZsYWdzfD02NCksdGhpcy5mbGFnc3w9MzIsIXRoaXMuY21hcC51bmljb2RlKXRocm93IEVycm9yKGBObyB1bmljb2RlIGNtYXAgZm9yIGZvbnRgKX0sZS5wcm90b3R5cGUuY2hhcmFjdGVyVG9HbHlwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbWFwLnVuaWNvZGU/LmNvZGVNYXBbZV18fDB9LGUucHJvdG90eXBlLndpZHRoT2ZHbHlwaD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdD0xZTMvdGhpcy5oZWFkLnVuaXRzUGVyRW0sdGhpcy5obXR4LmZvckdseXBoKGUpLmFkdmFuY2UqdH0sZS5wcm90b3R5cGUud2lkdGhPZlN0cmluZz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxhLG87Zm9yKGE9MCxpPTAsbz0oZT1gYCtlKS5sZW5ndGg7MDw9bz9pPG86aT5vO2k9MDw9bz8rK2k6LS1pKXI9ZS5jaGFyQ29kZUF0KGkpLGErPXRoaXMud2lkdGhPZkdseXBoKHRoaXMuY2hhcmFjdGVyVG9HbHlwaChyKSkrMWUzL3Qqbnx8MDtyZXR1cm4gdC8xZTMqYX0sZS5wcm90b3R5cGUubGluZUhlaWdodD1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiB0Pz89ITEsbj10P3RoaXMubGluZUdhcDowLCh0aGlzLmFzY2VuZGVyK24tdGhpcy5kZWNlbmRlcikvMWUzKmV9LGV9KCkscWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuZGF0YT1lPz9bXSx0aGlzLnBvcz0wLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGh9cmV0dXJuIGUucHJvdG90eXBlLnJlYWRCeXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnBvcysrXX0sZS5wcm90b3R5cGUud3JpdGVCeXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGFbdGhpcy5wb3MrK109ZX0sZS5wcm90b3R5cGUucmVhZFVJbnQzMj1mdW5jdGlvbigpe3JldHVybiAxNjc3NzIxNip0aGlzLnJlYWRCeXRlKCkrKHRoaXMucmVhZEJ5dGUoKTw8MTYpKyh0aGlzLnJlYWRCeXRlKCk8PDgpK3RoaXMucmVhZEJ5dGUoKX0sZS5wcm90b3R5cGUud3JpdGVVSW50MzI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMud3JpdGVCeXRlKGU+Pj4yNCYyNTUpLHRoaXMud3JpdGVCeXRlKGU+PjE2JjI1NSksdGhpcy53cml0ZUJ5dGUoZT4+OCYyNTUpLHRoaXMud3JpdGVCeXRlKDI1NSZlKX0sZS5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5yZWFkVUludDMyKCkpPj0yMTQ3NDgzNjQ4P2UtNDI5NDk2NzI5NjplfSxlLnByb3RvdHlwZS53cml0ZUludDMyPWZ1bmN0aW9uKGUpe3JldHVybiBlPDAmJihlKz00Mjk0OTY3Mjk2KSx0aGlzLndyaXRlVUludDMyKGUpfSxlLnByb3RvdHlwZS5yZWFkVUludDE2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZEJ5dGUoKTw8OHx0aGlzLnJlYWRCeXRlKCl9LGUucHJvdG90eXBlLndyaXRlVUludDE2PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlQnl0ZShlPj44JjI1NSksdGhpcy53cml0ZUJ5dGUoMjU1JmUpfSxlLnByb3RvdHlwZS5yZWFkSW50MTY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT10aGlzLnJlYWRVSW50MTYoKSk+PTMyNzY4P2UtNjU1MzY6ZX0sZS5wcm90b3R5cGUud3JpdGVJbnQxNj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwJiYoZSs9NjU1MzYpLHRoaXMud3JpdGVVSW50MTYoZSl9LGUucHJvdG90eXBlLnJlYWRTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbjtmb3Iobj1bXSx0PTA7MDw9ZT90PGU6dD5lO3Q9MDw9ZT8rK3Q6LS10KW5bdF09U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRCeXRlKCkpO3JldHVybiBuLmpvaW4oYGApfSxlLnByb3RvdHlwZS53cml0ZVN0cmluZz1mdW5jdGlvbihlKXt2YXIgdCxuLHI7Zm9yKHI9W10sdD0wLG49ZS5sZW5ndGg7MDw9bj90PG46dD5uO3Q9MDw9bj8rK3Q6LS10KXIucHVzaCh0aGlzLndyaXRlQnl0ZShlLmNoYXJDb2RlQXQodCkpKTtyZXR1cm4gcn0sZS5wcm90b3R5cGUucmVhZFNob3J0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZEludDE2KCl9LGUucHJvdG90eXBlLndyaXRlU2hvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMud3JpdGVJbnQxNihlKX0sZS5wcm90b3R5cGUucmVhZExvbmdMb25nPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxhLG8scztyZXR1cm4gZT10aGlzLnJlYWRCeXRlKCksdD10aGlzLnJlYWRCeXRlKCksbj10aGlzLnJlYWRCeXRlKCkscj10aGlzLnJlYWRCeXRlKCksaT10aGlzLnJlYWRCeXRlKCksYT10aGlzLnJlYWRCeXRlKCksbz10aGlzLnJlYWRCeXRlKCkscz10aGlzLnJlYWRCeXRlKCksMTI4JmU/LTEqKDcyMDU3NTk0MDM3OTI3OTQwKigyNTVeZSkrMjgxNDc0OTc2NzEwNjU2KigyNTVedCkrMTA5OTUxMTYyNzc3NiooMjU1Xm4pKzQyOTQ5NjcyOTYqKDI1NV5yKSsxNjc3NzIxNiooMjU1XmkpKzY1NTM2KigyNTVeYSkrMjU2KigyNTVebykrKDI1NV5zKSsxKTo3MjA1NzU5NDAzNzkyNzk0MCplKzI4MTQ3NDk3NjcxMDY1Nip0KzEwOTk1MTE2Mjc3NzYqbis0Mjk0OTY3Mjk2KnIrMTY3NzcyMTYqaSs2NTUzNiphKzI1NipvK3N9LGUucHJvdG90eXBlLndyaXRlTG9uZ0xvbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gdD1NYXRoLmZsb29yKGUvNDI5NDk2NzI5Niksbj00Mjk0OTY3Mjk1JmUsdGhpcy53cml0ZUJ5dGUodD4+MjQmMjU1KSx0aGlzLndyaXRlQnl0ZSh0Pj4xNiYyNTUpLHRoaXMud3JpdGVCeXRlKHQ+PjgmMjU1KSx0aGlzLndyaXRlQnl0ZSgyNTUmdCksdGhpcy53cml0ZUJ5dGUobj4+MjQmMjU1KSx0aGlzLndyaXRlQnl0ZShuPj4xNiYyNTUpLHRoaXMud3JpdGVCeXRlKG4+PjgmMjU1KSx0aGlzLndyaXRlQnl0ZSgyNTUmbil9LGUucHJvdG90eXBlLnJlYWRJbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkSW50MzIoKX0sZS5wcm90b3R5cGUud3JpdGVJbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMud3JpdGVJbnQzMihlKX0sZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXt2YXIgdCxuO2Zvcih0PVtdLG49MDswPD1lP248ZTpuPmU7bj0wPD1lPysrbjotLW4pdC5wdXNoKHRoaXMucmVhZEJ5dGUoKSk7cmV0dXJuIHR9LGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpO2ZvcihpPVtdLG49MCxyPWUubGVuZ3RoO248cjtuKyspdD1lW25dLGkucHVzaCh0aGlzLndyaXRlQnl0ZSh0KSk7cmV0dXJuIGl9LGV9KCksSmc9ZnVuY3Rpb24oKXt2YXIgZTtmdW5jdGlvbiB0KGUpe3ZhciB0LG4scjtmb3IodGhpcy5zY2FsYXJUeXBlPWUucmVhZEludCgpLHRoaXMudGFibGVDb3VudD1lLnJlYWRTaG9ydCgpLHRoaXMuc2VhcmNoUmFuZ2U9ZS5yZWFkU2hvcnQoKSx0aGlzLmVudHJ5U2VsZWN0b3I9ZS5yZWFkU2hvcnQoKSx0aGlzLnJhbmdlU2hpZnQ9ZS5yZWFkU2hvcnQoKSx0aGlzLnRhYmxlcz17fSxuPTAscj10aGlzLnRhYmxlQ291bnQ7MDw9cj9uPHI6bj5yO249MDw9cj8rK246LS1uKXQ9e3RhZzplLnJlYWRTdHJpbmcoNCksY2hlY2tzdW06ZS5yZWFkSW50KCksb2Zmc2V0OmUucmVhZEludCgpLGxlbmd0aDplLnJlYWRJbnQoKX0sdGhpcy50YWJsZXNbdC50YWddPXR9cmV0dXJuIHQucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0KXt2YXIgbixyLGksYSxvLHMsYyxsLHUsZCxmLHAsbTtmb3IobSBpbiBmPU9iamVjdC5rZXlzKHQpLmxlbmd0aCxzPU1hdGgubG9nKDIpLHU9MTYqTWF0aC5mbG9vcihNYXRoLmxvZyhmKS9zKSxhPU1hdGguZmxvb3IodS9zKSxsPTE2KmYtdSwocj1uZXcgcWcpLndyaXRlSW50KHRoaXMuc2NhbGFyVHlwZSksci53cml0ZVNob3J0KGYpLHIud3JpdGVTaG9ydCh1KSxyLndyaXRlU2hvcnQoYSksci53cml0ZVNob3J0KGwpLGk9MTYqZixjPXIucG9zK2ksbz1udWxsLHA9W10sdClmb3IoZD10W21dLHIud3JpdGVTdHJpbmcobSksci53cml0ZUludChlKGQpKSxyLndyaXRlSW50KGMpLHIud3JpdGVJbnQoZC5sZW5ndGgpLHA9cC5jb25jYXQoZCksbT09PWBoZWFkYCYmKG89YyksYys9ZC5sZW5ndGg7YyU0OylwLnB1c2goMCksYysrO3JldHVybiByLndyaXRlKHApLG49Mjk4MTE0NjU1NC1lKHIuZGF0YSksci5wb3M9bys4LHIud3JpdGVVSW50MzIobiksci5kYXRhfSxlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpO2ZvcihlPXNfLmNhbGwoZSk7ZS5sZW5ndGglNDspZS5wdXNoKDApO2ZvcihyPW5ldyBxZyhlKSxuPTAsdD0wLGk9ZS5sZW5ndGg7dDxpO3Q9dCs9NCluKz1yLnJlYWRVSW50MzIoKTtyZXR1cm4gNDI5NDk2NzI5NSZufSx0fSgpLFlnPXt9Lmhhc093blByb3BlcnR5LFhnPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpWWcuY2FsbCh0LG4pJiYoZVtuXT10W25dKTtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXJldHVybiByLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgcixlLl9fc3VwZXJfXz10LnByb3RvdHlwZSxlfSxLZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ7dGhpcy5maWxlPWUsdD10aGlzLmZpbGUuZGlyZWN0b3J5LnRhYmxlc1t0aGlzLnRhZ10sdGhpcy5leGlzdHM9ISF0LHQmJih0aGlzLm9mZnNldD10Lm9mZnNldCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLnBhcnNlKHRoaXMuZmlsZS5jb250ZW50cykpfXJldHVybiBlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGlzdHM/KHRoaXMuZmlsZS5jb250ZW50cy5wb3M9dGhpcy5vZmZzZXQsdGhpcy5maWxlLmNvbnRlbnRzLnJlYWQodGhpcy5sZW5ndGgpKTpudWxsfSxlfSgpLFpnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3JldHVybiBlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIFhnKGUsS2cpLGUucHJvdG90eXBlLnRhZz1gaGVhZGAsZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucG9zPXRoaXMub2Zmc2V0LHRoaXMudmVyc2lvbj1lLnJlYWRJbnQoKSx0aGlzLnJldmlzaW9uPWUucmVhZEludCgpLHRoaXMuY2hlY2tTdW1BZGp1c3RtZW50PWUucmVhZEludCgpLHRoaXMubWFnaWNOdW1iZXI9ZS5yZWFkSW50KCksdGhpcy5mbGFncz1lLnJlYWRTaG9ydCgpLHRoaXMudW5pdHNQZXJFbT1lLnJlYWRTaG9ydCgpLHRoaXMuY3JlYXRlZD1lLnJlYWRMb25nTG9uZygpLHRoaXMubW9kaWZpZWQ9ZS5yZWFkTG9uZ0xvbmcoKSx0aGlzLnhNaW49ZS5yZWFkU2hvcnQoKSx0aGlzLnlNaW49ZS5yZWFkU2hvcnQoKSx0aGlzLnhNYXg9ZS5yZWFkU2hvcnQoKSx0aGlzLnlNYXg9ZS5yZWFkU2hvcnQoKSx0aGlzLm1hY1N0eWxlPWUucmVhZFNob3J0KCksdGhpcy5sb3dlc3RSZWNQUEVNPWUucmVhZFNob3J0KCksdGhpcy5mb250RGlyZWN0aW9uSGludD1lLnJlYWRTaG9ydCgpLHRoaXMuaW5kZXhUb0xvY0Zvcm1hdD1lLnJlYWRTaG9ydCgpLHRoaXMuZ2x5cGhEYXRhRm9ybWF0PWUucmVhZFNob3J0KCl9LGUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4odD1uZXcgcWcpLndyaXRlSW50KHRoaXMudmVyc2lvbiksdC53cml0ZUludCh0aGlzLnJldmlzaW9uKSx0LndyaXRlSW50KHRoaXMuY2hlY2tTdW1BZGp1c3RtZW50KSx0LndyaXRlSW50KHRoaXMubWFnaWNOdW1iZXIpLHQud3JpdGVTaG9ydCh0aGlzLmZsYWdzKSx0LndyaXRlU2hvcnQodGhpcy51bml0c1BlckVtKSx0LndyaXRlTG9uZ0xvbmcodGhpcy5jcmVhdGVkKSx0LndyaXRlTG9uZ0xvbmcodGhpcy5tb2RpZmllZCksdC53cml0ZVNob3J0KHRoaXMueE1pbiksdC53cml0ZVNob3J0KHRoaXMueU1pbiksdC53cml0ZVNob3J0KHRoaXMueE1heCksdC53cml0ZVNob3J0KHRoaXMueU1heCksdC53cml0ZVNob3J0KHRoaXMubWFjU3R5bGUpLHQud3JpdGVTaG9ydCh0aGlzLmxvd2VzdFJlY1BQRU0pLHQud3JpdGVTaG9ydCh0aGlzLmZvbnREaXJlY3Rpb25IaW50KSx0LndyaXRlU2hvcnQoZSksdC53cml0ZVNob3J0KHRoaXMuZ2x5cGhEYXRhRm9ybWF0KSx0LmRhdGF9LGV9KCksUWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG4scixpLGEsbyxzLGMsbCx1LGQsZixwLG0saCxnLF8sdjtzd2l0Y2godGhpcy5wbGF0Zm9ybUlEPWUucmVhZFVJbnQxNigpLHRoaXMuZW5jb2RpbmdJRD1lLnJlYWRTaG9ydCgpLHRoaXMub2Zmc2V0PXQrZS5yZWFkSW50KCksdT1lLnBvcyxlLnBvcz10aGlzLm9mZnNldCx0aGlzLmZvcm1hdD1lLnJlYWRVSW50MTYoKSx0aGlzLmxlbmd0aD1lLnJlYWRVSW50MTYoKSx0aGlzLmxhbmd1YWdlPWUucmVhZFVJbnQxNigpLHRoaXMuaXNVbmljb2RlPXRoaXMucGxhdGZvcm1JRD09PTMmJnRoaXMuZW5jb2RpbmdJRD09PTEmJnRoaXMuZm9ybWF0PT09NHx8dGhpcy5wbGF0Zm9ybUlEPT09MCYmdGhpcy5mb3JtYXQ9PT00LHRoaXMuY29kZU1hcD17fSx0aGlzLmZvcm1hdCl7Y2FzZSAwOmZvcihzPTA7czwyNTY7KytzKXRoaXMuY29kZU1hcFtzXT1lLnJlYWRCeXRlKCk7YnJlYWs7Y2FzZSA0OmZvcihmPWUucmVhZFVJbnQxNigpLGQ9Zi8yLGUucG9zKz02LGk9ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPVtdLHM9dD0wOzA8PWQ/dDxkOnQ+ZDtzPTA8PWQ/Kyt0Oi0tdCluLnB1c2goZS5yZWFkVUludDE2KCkpO3JldHVybiBufSgpLGUucG9zKz0yLG09ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPVtdLHM9dD0wOzA8PWQ/dDxkOnQ+ZDtzPTA8PWQ/Kyt0Oi0tdCluLnB1c2goZS5yZWFkVUludDE2KCkpO3JldHVybiBufSgpLGM9ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPVtdLHM9dD0wOzA8PWQ/dDxkOnQ+ZDtzPTA8PWQ/Kyt0Oi0tdCluLnB1c2goZS5yZWFkVUludDE2KCkpO3JldHVybiBufSgpLGw9ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPVtdLHM9dD0wOzA8PWQ/dDxkOnQ+ZDtzPTA8PWQ/Kyt0Oi0tdCluLnB1c2goZS5yZWFkVUludDE2KCkpO3JldHVybiBufSgpLHI9KHRoaXMubGVuZ3RoLWUucG9zK3RoaXMub2Zmc2V0KS8yLG89ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPVtdLHM9dD0wOzA8PXI/dDxyOnQ+cjtzPTA8PXI/Kyt0Oi0tdCluLnB1c2goZS5yZWFkVUludDE2KCkpO3JldHVybiBufSgpLHM9Zz0wLHY9aS5sZW5ndGg7Zzx2O3M9KytnKWZvcihoPWlbc10sbj1fPXA9bVtzXTtwPD1oP188PWg6Xz49aDtuPXA8PWg/KytfOi0tXylsW3NdPT09MD9hPW4rY1tzXTooYT1vW2xbc10vMisobi1wKS0oZC1zKV18fDApIT09MCYmKGErPWNbc10pLHRoaXMuY29kZU1hcFtuXT02NTUzNSZhfWUucG9zPXV9cmV0dXJuIGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLGEsbyxzLGMsbCx1LGQsZixwLG0saCxnLF8sdix5LGIseCxTLEMsdyxULEUsRCxPLGssQSxqLE0sTixQLEYsSSxMLFIseixCLFYsZWUsSCxVLFcsRyx0ZTtzd2l0Y2goaz1uZXcgcWcsYT1PYmplY3Qua2V5cyhlKS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pLHQpe2Nhc2VgbWFjcm9tYW5gOmZvcihtPTAsaD1mdW5jdGlvbigpe3ZhciBlPVtdO2ZvcihwPTA7cDwyNTY7KytwKWUucHVzaCgwKTtyZXR1cm4gZX0oKSxfPXswOjB9LGk9e30sQT0wLFA9YS5sZW5ndGg7QTxQO0ErKylfW1U9ZVtyPWFbQV1dXT8/KF9bVV09KyttKSxpW3JdPXtvbGQ6ZVtyXSxuZXc6X1tlW3JdXX0saFtyXT1fW2Vbcl1dO3JldHVybiBrLndyaXRlVUludDE2KDEpLGsud3JpdGVVSW50MTYoMCksay53cml0ZVVJbnQzMigxMiksay53cml0ZVVJbnQxNigwKSxrLndyaXRlVUludDE2KDI2Miksay53cml0ZVVJbnQxNigwKSxrLndyaXRlKGgpLHtjaGFyTWFwOmksc3VidGFibGU6ay5kYXRhLG1heEdseXBoSUQ6bSsxfTtjYXNlYHVuaWNvZGVgOmZvcihEPVtdLHU9W10sdj0wLF89e30sbj17fSxnPWM9bnVsbCxqPTAsRj1hLmxlbmd0aDtqPEY7aisrKV9bYj1lW3I9YVtqXV1dPz8oX1tiXT0rK3YpLG5bcl09e29sZDpiLG5ldzpfW2JdfSxvPV9bYl0tcixnIT1udWxsJiZvPT09Y3x8KGcmJnUucHVzaChnKSxELnB1c2gociksYz1vKSxnPXI7Zm9yKGcmJnUucHVzaChnKSx1LnB1c2goNjU1MzUpLEQucHVzaCg2NTUzNSksVD0yKih3PUQubGVuZ3RoKSxDPTIqKE1hdGgubG9nKHcpL01hdGguTE4yKSoqMixkPU1hdGgubG9nKEMvMikvTWF0aC5MTjIsUz0yKnctQyxzPVtdLHg9W10sZj1bXSxwPU09MCxJPUQubGVuZ3RoO008STtwPSsrTSl7aWYoRT1EW3BdLGw9dVtwXSxFPT09NjU1MzUpe3MucHVzaCgwKSx4LnB1c2goMCk7YnJlYWt9aWYoRS0oTz1uW0VdLm5ldyk+PTMyNzY4KWZvcihzLnB1c2goMCkseC5wdXNoKDIqKGYubGVuZ3RoK3ctcCkpLHI9Tj1FO0U8PWw/Tjw9bDpOPj1sO3I9RTw9bD8rK046LS1OKWYucHVzaChuW3JdLm5ldyk7ZWxzZSBzLnB1c2goTy1FKSx4LnB1c2goMCl9Zm9yKGsud3JpdGVVSW50MTYoMyksay53cml0ZVVJbnQxNigxKSxrLndyaXRlVUludDMyKDEyKSxrLndyaXRlVUludDE2KDQpLGsud3JpdGVVSW50MTYoMTYrOCp3KzIqZi5sZW5ndGgpLGsud3JpdGVVSW50MTYoMCksay53cml0ZVVJbnQxNihUKSxrLndyaXRlVUludDE2KEMpLGsud3JpdGVVSW50MTYoZCksay53cml0ZVVJbnQxNihTKSxlZT0wLEw9dS5sZW5ndGg7ZWU8TDtlZSsrKXI9dVtlZV0say53cml0ZVVJbnQxNihyKTtmb3Ioay53cml0ZVVJbnQxNigwKSxIPTAsUj1ELmxlbmd0aDtIPFI7SCsrKXI9RFtIXSxrLndyaXRlVUludDE2KHIpO2ZvcihXPTAsej1zLmxlbmd0aDtXPHo7VysrKW89c1tXXSxrLndyaXRlVUludDE2KG8pO2ZvcihHPTAsQj14Lmxlbmd0aDtHPEI7RysrKXk9eFtHXSxrLndyaXRlVUludDE2KHkpO2Zvcih0ZT0wLFY9Zi5sZW5ndGg7dGU8Vjt0ZSsrKW09Zlt0ZV0say53cml0ZVVJbnQxNihtKTtyZXR1cm57Y2hhck1hcDpuLHN1YnRhYmxlOmsuZGF0YSxtYXhHbHlwaElEOnYrMX19fSxlfSgpLCRnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3JldHVybiBlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIFhnKGUsS2cpLGUucHJvdG90eXBlLnRhZz1gY21hcGAsZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2ZvcihlLnBvcz10aGlzLm9mZnNldCx0aGlzLnZlcnNpb249ZS5yZWFkVUludDE2KCkscj1lLnJlYWRVSW50MTYoKSx0aGlzLnRhYmxlcz1bXSx0aGlzLnVuaWNvZGU9bnVsbCxuPTA7MDw9cj9uPHI6bj5yO249MDw9cj8rK246LS1uKXQ9bmV3IFFnKGUsdGhpcy5vZmZzZXQpLHRoaXMudGFibGVzLnB1c2godCksdC5pc1VuaWNvZGUmJnRoaXMudW5pY29kZT09bnVsbCYmKHRoaXMudW5pY29kZT10KTtyZXR1cm4hMH0sZS5lbmNvZGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3JldHVybiB0Pz89YG1hY3JvbWFuYCxuPVFnLmVuY29kZShlLHQpLChyPW5ldyBxZykud3JpdGVVSW50MTYoMCksci53cml0ZVVJbnQxNigxKSxuLnRhYmxlPXIuZGF0YS5jb25jYXQobi5zdWJ0YWJsZSksbn0sZX0oKSxlXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBYZyhlLEtnKSxlLnByb3RvdHlwZS50YWc9YGhoZWFgLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcz10aGlzLm9mZnNldCx0aGlzLnZlcnNpb249ZS5yZWFkSW50KCksdGhpcy5hc2NlbmRlcj1lLnJlYWRTaG9ydCgpLHRoaXMuZGVjZW5kZXI9ZS5yZWFkU2hvcnQoKSx0aGlzLmxpbmVHYXA9ZS5yZWFkU2hvcnQoKSx0aGlzLmFkdmFuY2VXaWR0aE1heD1lLnJlYWRTaG9ydCgpLHRoaXMubWluTGVmdFNpZGVCZWFyaW5nPWUucmVhZFNob3J0KCksdGhpcy5taW5SaWdodFNpZGVCZWFyaW5nPWUucmVhZFNob3J0KCksdGhpcy54TWF4RXh0ZW50PWUucmVhZFNob3J0KCksdGhpcy5jYXJldFNsb3BlUmlzZT1lLnJlYWRTaG9ydCgpLHRoaXMuY2FyZXRTbG9wZVJ1bj1lLnJlYWRTaG9ydCgpLHRoaXMuY2FyZXRPZmZzZXQ9ZS5yZWFkU2hvcnQoKSxlLnBvcys9OCx0aGlzLm1ldHJpY0RhdGFGb3JtYXQ9ZS5yZWFkU2hvcnQoKSx0aGlzLm51bWJlck9mTWV0cmljcz1lLnJlYWRVSW50MTYoKX0sZX0oKSx0Xz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBYZyhlLEtnKSxlLnByb3RvdHlwZS50YWc9YE9TLzJgLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe2lmKGUucG9zPXRoaXMub2Zmc2V0LHRoaXMudmVyc2lvbj1lLnJlYWRVSW50MTYoKSx0aGlzLmF2ZXJhZ2VDaGFyV2lkdGg9ZS5yZWFkU2hvcnQoKSx0aGlzLndlaWdodENsYXNzPWUucmVhZFVJbnQxNigpLHRoaXMud2lkdGhDbGFzcz1lLnJlYWRVSW50MTYoKSx0aGlzLnR5cGU9ZS5yZWFkU2hvcnQoKSx0aGlzLnlTdWJzY3JpcHRYU2l6ZT1lLnJlYWRTaG9ydCgpLHRoaXMueVN1YnNjcmlwdFlTaXplPWUucmVhZFNob3J0KCksdGhpcy55U3Vic2NyaXB0WE9mZnNldD1lLnJlYWRTaG9ydCgpLHRoaXMueVN1YnNjcmlwdFlPZmZzZXQ9ZS5yZWFkU2hvcnQoKSx0aGlzLnlTdXBlcnNjcmlwdFhTaXplPWUucmVhZFNob3J0KCksdGhpcy55U3VwZXJzY3JpcHRZU2l6ZT1lLnJlYWRTaG9ydCgpLHRoaXMueVN1cGVyc2NyaXB0WE9mZnNldD1lLnJlYWRTaG9ydCgpLHRoaXMueVN1cGVyc2NyaXB0WU9mZnNldD1lLnJlYWRTaG9ydCgpLHRoaXMueVN0cmlrZW91dFNpemU9ZS5yZWFkU2hvcnQoKSx0aGlzLnlTdHJpa2VvdXRQb3NpdGlvbj1lLnJlYWRTaG9ydCgpLHRoaXMuZmFtaWx5Q2xhc3M9ZS5yZWFkU2hvcnQoKSx0aGlzLnBhbm9zZT1mdW5jdGlvbigpe3ZhciB0LG47Zm9yKG49W10sdD0wO3Q8MTA7Kyt0KW4ucHVzaChlLnJlYWRCeXRlKCkpO3JldHVybiBufSgpLHRoaXMuY2hhclJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQsbjtmb3Iobj1bXSx0PTA7dDw0OysrdCluLnB1c2goZS5yZWFkSW50KCkpO3JldHVybiBufSgpLHRoaXMudmVuZG9ySUQ9ZS5yZWFkU3RyaW5nKDQpLHRoaXMuc2VsZWN0aW9uPWUucmVhZFNob3J0KCksdGhpcy5maXJzdENoYXJJbmRleD1lLnJlYWRTaG9ydCgpLHRoaXMubGFzdENoYXJJbmRleD1lLnJlYWRTaG9ydCgpLHRoaXMudmVyc2lvbj4wJiYodGhpcy5hc2NlbnQ9ZS5yZWFkU2hvcnQoKSx0aGlzLmRlc2NlbnQ9ZS5yZWFkU2hvcnQoKSx0aGlzLmxpbmVHYXA9ZS5yZWFkU2hvcnQoKSx0aGlzLndpbkFzY2VudD1lLnJlYWRTaG9ydCgpLHRoaXMud2luRGVzY2VudD1lLnJlYWRTaG9ydCgpLHRoaXMuY29kZVBhZ2VSYW5nZT1mdW5jdGlvbigpe3ZhciB0LG47Zm9yKG49W10sdD0wO3Q8Mjt0PSsrdCluLnB1c2goZS5yZWFkSW50KCkpO3JldHVybiBufSgpLHRoaXMudmVyc2lvbj4xKSlyZXR1cm4gdGhpcy54SGVpZ2h0PWUucmVhZFNob3J0KCksdGhpcy5jYXBIZWlnaHQ9ZS5yZWFkU2hvcnQoKSx0aGlzLmRlZmF1bHRDaGFyPWUucmVhZFNob3J0KCksdGhpcy5icmVha0NoYXI9ZS5yZWFkU2hvcnQoKSx0aGlzLm1heENvbnRleHQ9ZS5yZWFkU2hvcnQoKX0sZX0oKSxuXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBYZyhlLEtnKSxlLnByb3RvdHlwZS50YWc9YHBvc3RgLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtzd2l0Y2goZS5wb3M9dGhpcy5vZmZzZXQsdGhpcy5mb3JtYXQ9ZS5yZWFkSW50KCksdGhpcy5pdGFsaWNBbmdsZT1lLnJlYWRJbnQoKSx0aGlzLnVuZGVybGluZVBvc2l0aW9uPWUucmVhZFNob3J0KCksdGhpcy51bmRlcmxpbmVUaGlja25lc3M9ZS5yZWFkU2hvcnQoKSx0aGlzLmlzRml4ZWRQaXRjaD1lLnJlYWRJbnQoKSx0aGlzLm1pbk1lbVR5cGU0Mj1lLnJlYWRJbnQoKSx0aGlzLm1heE1lbVR5cGU0Mj1lLnJlYWRJbnQoKSx0aGlzLm1pbk1lbVR5cGUxPWUucmVhZEludCgpLHRoaXMubWF4TWVtVHlwZTE9ZS5yZWFkSW50KCksdGhpcy5mb3JtYXQpe2Nhc2UgNjU1MzY6Y2FzZSAxOTY2MDg6YnJlYWs7Y2FzZSAxMzEwNzI6dmFyIGk7Zm9yKG49ZS5yZWFkVUludDE2KCksdGhpcy5nbHlwaE5hbWVJbmRleD1bXSxpPTA7MDw9bj9pPG46aT5uO2k9MDw9bj8rK2k6LS1pKXRoaXMuZ2x5cGhOYW1lSW5kZXgucHVzaChlLnJlYWRVSW50MTYoKSk7Zm9yKHRoaXMubmFtZXM9W10scj1bXTtlLnBvczx0aGlzLm9mZnNldCt0aGlzLmxlbmd0aDspdD1lLnJlYWRCeXRlKCksci5wdXNoKHRoaXMubmFtZXMucHVzaChlLnJlYWRTdHJpbmcodCkpKTtyZXR1cm4gcjtjYXNlIDE1MTU1MjpyZXR1cm4gbj1lLnJlYWRVSW50MTYoKSx0aGlzLm9mZnNldHM9ZS5yZWFkKG4pO2Nhc2UgMjYyMTQ0OnJldHVybiB0aGlzLm1hcD1mdW5jdGlvbigpe3ZhciB0LG4scjtmb3Iocj1bXSxpPXQ9MCxuPXRoaXMuZmlsZS5tYXhwLm51bUdseXBoczswPD1uP3Q8bjp0Pm47aT0wPD1uPysrdDotLXQpci5wdXNoKGUucmVhZFVJbnQzMigpKTtyZXR1cm4gcn0uY2FsbCh0aGlzKX19LGV9KCkscl89ZnVuY3Rpb24oZSx0KXt0aGlzLnJhdz1lLHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMucGxhdGZvcm1JRD10LnBsYXRmb3JtSUQsdGhpcy5lbmNvZGluZ0lEPXQuZW5jb2RpbmdJRCx0aGlzLmxhbmd1YWdlSUQ9dC5sYW5ndWFnZUlEfSxpXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBYZyhlLEtnKSxlLnByb3RvdHlwZS50YWc9YG5hbWVgLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbyxzLGMsbCx1LGQ7Zm9yKGUucG9zPXRoaXMub2Zmc2V0LGUucmVhZFNob3J0KCksdD1lLnJlYWRTaG9ydCgpLG89ZS5yZWFkU2hvcnQoKSxuPVtdLGk9MDswPD10P2k8dDppPnQ7aT0wPD10PysraTotLWkpbi5wdXNoKHtwbGF0Zm9ybUlEOmUucmVhZFNob3J0KCksZW5jb2RpbmdJRDplLnJlYWRTaG9ydCgpLGxhbmd1YWdlSUQ6ZS5yZWFkU2hvcnQoKSxuYW1lSUQ6ZS5yZWFkU2hvcnQoKSxsZW5ndGg6ZS5yZWFkU2hvcnQoKSxvZmZzZXQ6dGhpcy5vZmZzZXQrbytlLnJlYWRTaG9ydCgpfSk7Zm9yKHM9e30saT1sPTAsdT1uLmxlbmd0aDtsPHU7aT0rK2wpcj1uW2ldLGUucG9zPXIub2Zmc2V0LGM9ZS5yZWFkU3RyaW5nKHIubGVuZ3RoKSxhPW5ldyByXyhjLHIpLHNbZD1yLm5hbWVJRF0/PyhzW2RdPVtdKSxzW3IubmFtZUlEXS5wdXNoKGEpO3RoaXMuc3RyaW5ncz1zLHRoaXMuY29weXJpZ2h0PXNbMF0sdGhpcy5mb250RmFtaWx5PXNbMV0sdGhpcy5mb250U3ViZmFtaWx5PXNbMl0sdGhpcy51bmlxdWVTdWJmYW1pbHk9c1szXSx0aGlzLmZvbnROYW1lPXNbNF0sdGhpcy52ZXJzaW9uPXNbNV07dHJ5e3RoaXMucG9zdHNjcmlwdE5hbWU9c1s2XVswXS5yYXcucmVwbGFjZSgvW1x4MDAtXHgxOVx4ODAtXHhmZl0vZyxgYCl9Y2F0Y2h7dGhpcy5wb3N0c2NyaXB0TmFtZT1zWzRdWzBdLnJhdy5yZXBsYWNlKC9bXHgwMC1ceDE5XHg4MC1ceGZmXS9nLGBgKX1yZXR1cm4gdGhpcy50cmFkZW1hcms9c1s3XSx0aGlzLm1hbnVmYWN0dXJlcj1zWzhdLHRoaXMuZGVzaWduZXI9c1s5XSx0aGlzLmRlc2NyaXB0aW9uPXNbMTBdLHRoaXMudmVuZG9yVXJsPXNbMTFdLHRoaXMuZGVzaWduZXJVcmw9c1sxMl0sdGhpcy5saWNlbnNlPXNbMTNdLHRoaXMubGljZW5zZVVybD1zWzE0XSx0aGlzLnByZWZlcnJlZEZhbWlseT1zWzE1XSx0aGlzLnByZWZlcnJlZFN1YmZhbWlseT1zWzE3XSx0aGlzLmNvbXBhdGlibGVGdWxsPXNbMThdLHRoaXMuc2FtcGxlVGV4dD1zWzE5XX0sZX0oKSxhXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBYZyhlLEtnKSxlLnByb3RvdHlwZS50YWc9YG1heHBgLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcz10aGlzLm9mZnNldCx0aGlzLnZlcnNpb249ZS5yZWFkSW50KCksdGhpcy5udW1HbHlwaHM9ZS5yZWFkVUludDE2KCksdGhpcy5tYXhQb2ludHM9ZS5yZWFkVUludDE2KCksdGhpcy5tYXhDb250b3Vycz1lLnJlYWRVSW50MTYoKSx0aGlzLm1heENvbXBvc2l0ZVBvaW50cz1lLnJlYWRVSW50MTYoKSx0aGlzLm1heENvbXBvbmVudENvbnRvdXJzPWUucmVhZFVJbnQxNigpLHRoaXMubWF4Wm9uZXM9ZS5yZWFkVUludDE2KCksdGhpcy5tYXhUd2lsaWdodFBvaW50cz1lLnJlYWRVSW50MTYoKSx0aGlzLm1heFN0b3JhZ2U9ZS5yZWFkVUludDE2KCksdGhpcy5tYXhGdW5jdGlvbkRlZnM9ZS5yZWFkVUludDE2KCksdGhpcy5tYXhJbnN0cnVjdGlvbkRlZnM9ZS5yZWFkVUludDE2KCksdGhpcy5tYXhTdGFja0VsZW1lbnRzPWUucmVhZFVJbnQxNigpLHRoaXMubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zPWUucmVhZFVJbnQxNigpLHRoaXMubWF4Q29tcG9uZW50RWxlbWVudHM9ZS5yZWFkVUludDE2KCksdGhpcy5tYXhDb21wb25lbnREZXB0aD1lLnJlYWRVSW50MTYoKX0sZX0oKSxvXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBYZyhlLEtnKSxlLnByb3RvdHlwZS50YWc9YGhtdHhgLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbyxzO2ZvcihlLnBvcz10aGlzLm9mZnNldCx0aGlzLm1ldHJpY3M9W10sdD0wLG89dGhpcy5maWxlLmhoZWEubnVtYmVyT2ZNZXRyaWNzOzA8PW8/dDxvOnQ+bzt0PTA8PW8/Kyt0Oi0tdCl0aGlzLm1ldHJpY3MucHVzaCh7YWR2YW5jZTplLnJlYWRVSW50MTYoKSxsc2I6ZS5yZWFkSW50MTYoKX0pO2ZvcihyPXRoaXMuZmlsZS5tYXhwLm51bUdseXBocy10aGlzLmZpbGUuaGhlYS5udW1iZXJPZk1ldHJpY3MsdGhpcy5sZWZ0U2lkZUJlYXJpbmdzPWZ1bmN0aW9uKCl7dmFyIG4saTtmb3IoaT1bXSx0PW49MDswPD1yP248cjpuPnI7dD0wPD1yPysrbjotLW4paS5wdXNoKGUucmVhZEludDE2KCkpO3JldHVybiBpfSgpLHRoaXMud2lkdGhzPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7Zm9yKHI9W10sZT0wLHQ9KG49dGhpcy5tZXRyaWNzKS5sZW5ndGg7ZTx0O2UrKylpPW5bZV0sci5wdXNoKGkuYWR2YW5jZSk7cmV0dXJuIHJ9LmNhbGwodGhpcyksbj10aGlzLndpZHRoc1t0aGlzLndpZHRocy5sZW5ndGgtMV0scz1bXSx0PWE9MDswPD1yP2E8cjphPnI7dD0wPD1yPysrYTotLWEpcy5wdXNoKHRoaXMud2lkdGhzLnB1c2gobikpO3JldHVybiBzfSxlLnByb3RvdHlwZS5mb3JHbHlwaD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLm1ldHJpY3M/dGhpcy5tZXRyaWNzW2VdOnthZHZhbmNlOnRoaXMubWV0cmljc1t0aGlzLm1ldHJpY3MubGVuZ3RoLTFdLmFkdmFuY2UsbHNiOnRoaXMubGVmdFNpZGVCZWFyaW5nc1tlLXRoaXMubWV0cmljcy5sZW5ndGhdfX0sZX0oKSxzXz1bXS5zbGljZSxjXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBYZyhlLEtnKSxlLnByb3RvdHlwZS50YWc9YGdseWZgLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FjaGU9e319LGUucHJvdG90eXBlLmdseXBoRm9yPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbyxzLGMsbCx1O3JldHVybiBlIGluIHRoaXMuY2FjaGU/dGhpcy5jYWNoZVtlXTooaT10aGlzLmZpbGUubG9jYSx0PXRoaXMuZmlsZS5jb250ZW50cyxuPWkuaW5kZXhPZihlKSwocj1pLmxlbmd0aE9mKGUpKT09PTA/dGhpcy5jYWNoZVtlXT1udWxsOih0LnBvcz10aGlzLm9mZnNldCtuLGE9KG89bmV3IHFnKHQucmVhZChyKSkpLnJlYWRTaG9ydCgpLGM9by5yZWFkU2hvcnQoKSx1PW8ucmVhZFNob3J0KCkscz1vLnJlYWRTaG9ydCgpLGw9by5yZWFkU2hvcnQoKSx0aGlzLmNhY2hlW2VdPWE9PT0tMT9uZXcgdV8obyxjLHUscyxsKTpuZXcgbF8obyxhLGMsdSxzLGwpLHRoaXMuY2FjaGVbZV0pKX0sZS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLGEsbyxzO2ZvcihhPVtdLGk9W10sbz0wLHM9dC5sZW5ndGg7bzxzO28rKylyPWVbdFtvXV0saS5wdXNoKGEubGVuZ3RoKSxyJiYoYT1hLmNvbmNhdChyLmVuY29kZShuKSkpO3JldHVybiBpLnB1c2goYS5sZW5ndGgpLHt0YWJsZTphLG9mZnNldHM6aX19LGV9KCksbF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxhKXt0aGlzLnJhdz1lLHRoaXMubnVtYmVyT2ZDb250b3Vycz10LHRoaXMueE1pbj1uLHRoaXMueU1pbj1yLHRoaXMueE1heD1pLHRoaXMueU1heD1hLHRoaXMuY29tcG91bmQ9ITF9cmV0dXJuIGUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhdy5kYXRhfSxlfSgpLHVfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLGkpe3ZhciBhLG87Zm9yKHRoaXMucmF3PWUsdGhpcy54TWluPXQsdGhpcy55TWluPW4sdGhpcy54TWF4PXIsdGhpcy55TWF4PWksdGhpcy5jb21wb3VuZD0hMCx0aGlzLmdseXBoSURzPVtdLHRoaXMuZ2x5cGhPZmZzZXRzPVtdLGE9dGhpcy5yYXc7bz1hLnJlYWRTaG9ydCgpLHRoaXMuZ2x5cGhPZmZzZXRzLnB1c2goYS5wb3MpLHRoaXMuZ2x5cGhJRHMucHVzaChhLnJlYWRVSW50MTYoKSksMzImbzspYS5wb3MrPTEmbz80OjIsMTI4Jm8/YS5wb3MrPTg6NjQmbz9hLnBvcys9NDo4Jm8mJihhLnBvcys9Mil9cmV0dXJuIGUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe3ZhciBlLHQsbjtmb3IodD1uZXcgcWcoc18uY2FsbCh0aGlzLnJhdy5kYXRhKSksZT0wLG49dGhpcy5nbHlwaElEcy5sZW5ndGg7ZTxuOysrZSl0LnBvcz10aGlzLmdseXBoT2Zmc2V0c1tlXTtyZXR1cm4gdC5kYXRhfSxlfSgpLGRfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3JldHVybiBlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIFhnKGUsS2cpLGUucHJvdG90eXBlLnRhZz1gbG9jYWAsZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gZS5wb3M9dGhpcy5vZmZzZXQsdD10aGlzLmZpbGUuaGVhZC5pbmRleFRvTG9jRm9ybWF0LHRoaXMub2Zmc2V0cz10PT09MD9mdW5jdGlvbigpe3ZhciB0LHI7Zm9yKHI9W10sbj0wLHQ9dGhpcy5sZW5ndGg7bjx0O24rPTIpci5wdXNoKDIqZS5yZWFkVUludDE2KCkpO3JldHVybiByfS5jYWxsKHRoaXMpOmZ1bmN0aW9uKCl7dmFyIHQscjtmb3Iocj1bXSxuPTAsdD10aGlzLmxlbmd0aDtuPHQ7bis9NClyLnB1c2goZS5yZWFkVUludDMyKCkpO3JldHVybiByfS5jYWxsKHRoaXMpfSxlLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9mZnNldHNbZV19LGUucHJvdG90eXBlLmxlbmd0aE9mPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9mZnNldHNbZSsxXS10aGlzLm9mZnNldHNbZV19LGUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgVWludDMyQXJyYXkodGhpcy5vZmZzZXRzLmxlbmd0aCkscj0wLGk9MCxhPTA7YTxuLmxlbmd0aDsrK2EpaWYoblthXT1yLGk8dC5sZW5ndGgmJnRbaV09PWEpeysraSxuW2FdPXI7dmFyIG89dGhpcy5vZmZzZXRzW2FdLHM9dGhpcy5vZmZzZXRzW2ErMV0tbztzPjAmJihyKz1zKX1mb3IodmFyIGM9QXJyYXkoNCpuLmxlbmd0aCksbD0wO2w8bi5sZW5ndGg7KytsKWNbNCpsKzNdPTI1NSZuW2xdLGNbNCpsKzJdPSg2NTI4MCZuW2xdKT4+OCxjWzQqbCsxXT0oMTY3MTE2ODAmbltsXSk+PjE2LGNbNCpsXT0oNDI3ODE5MDA4MCZuW2xdKT4+MjQ7cmV0dXJuIGN9LGV9KCksZl89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuZm9udD1lLHRoaXMuc3Vic2V0PXt9LHRoaXMudW5pY29kZXM9e30sdGhpcy5uZXh0PTMzfXJldHVybiBlLnByb3RvdHlwZS5nZW5lcmF0ZUNtYXA9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpO2Zvcih0IGluIHI9dGhpcy5mb250LmNtYXAudGFibGVzWzBdLmNvZGVNYXAsZT17fSxpPXRoaXMuc3Vic2V0KW49aVt0XSxlW3RdPXJbbl07cmV0dXJuIGV9LGUucHJvdG90eXBlLmdseXBoc0Zvcj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxhLG8scztmb3Iocj17fSxhPTAsbz1lLmxlbmd0aDthPG87YSsrKXJbaT1lW2FdXT10aGlzLmZvbnQuZ2x5Zi5nbHlwaEZvcihpKTtmb3IoaSBpbiB0PVtdLHIpKG49cltpXSkhPW51bGwmJm4uY29tcG91bmQmJnQucHVzaC5hcHBseSh0LG4uZ2x5cGhJRHMpO2lmKHQubGVuZ3RoPjApZm9yKGkgaW4gcz10aGlzLmdseXBoc0Zvcih0KSluPXNbaV0scltpXT1uO3JldHVybiByfSxlLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksYSxvLHMsYyxsLHUsZCxmLHAsbSxoLGc7Zm9yKHIgaW4gbj0kZy5lbmNvZGUodGhpcy5nZW5lcmF0ZUNtYXAoKSxgdW5pY29kZWApLGE9dGhpcy5nbHlwaHNGb3IoZSksZj17MDowfSxnPW4uY2hhck1hcClmWyhzPWdbcl0pLm9sZF09cy5uZXc7Zm9yKHAgaW4gZD1uLm1heEdseXBoSUQsYSlwIGluIGZ8fChmW3BdPWQrKyk7cmV0dXJuIGw9ZnVuY3Rpb24oZSl7dmFyIHQsbjtmb3IodCBpbiBuPXt9LGUpbltlW3RdXT10O3JldHVybiBufShmKSx1PU9iamVjdC5rZXlzKGwpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSksbT1mdW5jdGlvbigpe3ZhciBlLHQsbjtmb3Iobj1bXSxlPTAsdD11Lmxlbmd0aDtlPHQ7ZSsrKW89dVtlXSxuLnB1c2gobFtvXSk7cmV0dXJuIG59KCksaT10aGlzLmZvbnQuZ2x5Zi5lbmNvZGUoYSxtLGYpLGM9dGhpcy5mb250LmxvY2EuZW5jb2RlKGkub2Zmc2V0cyxtKSxoPXtjbWFwOnRoaXMuZm9udC5jbWFwLnJhdygpLGdseWY6aS50YWJsZSxsb2NhOmMsaG10eDp0aGlzLmZvbnQuaG10eC5yYXcoKSxoaGVhOnRoaXMuZm9udC5oaGVhLnJhdygpLG1heHA6dGhpcy5mb250Lm1heHAucmF3KCkscG9zdDp0aGlzLmZvbnQucG9zdC5yYXcoKSxuYW1lOnRoaXMuZm9udC5uYW1lLnJhdygpLGhlYWQ6dGhpcy5mb250LmhlYWQuZW5jb2RlKHQpfSx0aGlzLmZvbnQub3MyLmV4aXN0cyYmKGhbYE9TLzJgXT10aGlzLmZvbnQub3MyLnJhdygpKSx0aGlzLmZvbnQuZGlyZWN0b3J5LmVuY29kZShoKX0sZX0oKSxaLkFQSS5QREZPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgZTtmdW5jdGlvbiB0KCl7fXJldHVybiBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKEFycmF5KHQrMSkuam9pbihgMGApK2UpLnNsaWNlKC10KX0sdC5jb252ZXJ0PWZ1bmN0aW9uKG4pe3ZhciByLGksYSxvO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuYFtgK2Z1bmN0aW9uKCl7dmFyIGUsaSxhO2ZvcihhPVtdLGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspcj1uW2VdLGEucHVzaCh0LmNvbnZlcnQocikpO3JldHVybiBhfSgpLmpvaW4oYCBgKStgXWA7aWYodHlwZW9mIG49PWBzdHJpbmdgKXJldHVybmAvYCtuO2lmKG4/LmlzU3RyaW5nKXJldHVybmAoYCtuK2ApYDtpZihuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm5gKEQ6YCtlKG4uZ2V0VVRDRnVsbFllYXIoKSw0KStlKG4uZ2V0VVRDTW9udGgoKSwyKStlKG4uZ2V0VVRDRGF0ZSgpLDIpK2Uobi5nZXRVVENIb3VycygpLDIpK2Uobi5nZXRVVENNaW51dGVzKCksMikrZShuLmdldFVUQ1NlY29uZHMoKSwyKStgWilgO2lmKHt9LnRvU3RyaW5nLmNhbGwobik9PT1gW29iamVjdCBPYmplY3RdYCl7Zm9yKGkgaW4gYT1bYDw8YF0sbilvPW5baV0sYS5wdXNoKGAvYCtpK2AgYCt0LmNvbnZlcnQobykpO3JldHVybiBhLnB1c2goYD4+YCksYS5qb2luKGAKYCl9cmV0dXJuYGArbn0sdH0oKX0pKTtmdW5jdGlvbiBtXyhlLHQsbixyLGkpe3J8fD17fTt2YXIgYT0xLjE1LG89aS5pbnRlcm5hbC5zY2FsZUZhY3RvcixzPWkuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKS9vLGM9cyooaS5nZXRMaW5lSGVpZ2h0RmFjdG9yP2kuZ2V0TGluZUhlaWdodEZhY3RvcigpOmEpLGw9L1xyXG58XHJ8XG4vZyx1PWBgLGQ9MTtpZigoci52YWxpZ249PT1gbWlkZGxlYHx8ci52YWxpZ249PT1gYm90dG9tYHx8ci5oYWxpZ249PT1gY2VudGVyYHx8ci5oYWxpZ249PT1gcmlnaHRgKSYmKHU9dHlwZW9mIGU9PWBzdHJpbmdgP2Uuc3BsaXQobCk6ZSxkPXUubGVuZ3RofHwxKSxuKz1zKigyLWEpLHIudmFsaWduPT09YG1pZGRsZWA/bi09ZC8yKmM6ci52YWxpZ249PT1gYm90dG9tYCYmKG4tPWQqYyksci5oYWxpZ249PT1gY2VudGVyYHx8ci5oYWxpZ249PT1gcmlnaHRgKXt2YXIgZj1zO2lmKHIuaGFsaWduPT09YGNlbnRlcmAmJihmKj0uNSksdSYmZD49MSl7Zm9yKHZhciBwPTA7cDx1Lmxlbmd0aDtwKyspaS50ZXh0KHVbcF0sdC1pLmdldFN0cmluZ1VuaXRXaWR0aCh1W3BdKSpmLG4pLG4rPWM7cmV0dXJuIGl9dC09aS5nZXRTdHJpbmdVbml0V2lkdGgoZSkqZn1yZXR1cm4gci5oYWxpZ249PT1ganVzdGlmeWA/aS50ZXh0KGUsdCxuLHttYXhXaWR0aDpyLm1heFdpZHRofHwxMDAsYWxpZ246YGp1c3RpZnlgfSk6aS50ZXh0KGUsdCxuKSxpfWZ1bmN0aW9uIGhfKGUsdCl7aWYodHlwZW9mIHQhPWBmdW5jdGlvbmAmJnQhPT1udWxsKXRocm93IFR5cGVFcnJvcihgQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBgK1N0cmluZyh0KStgIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxgKTtDdihlLHQpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9ZS5wcm90b3R5cGU9dD09PW51bGw/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfWZ1bmN0aW9uIGdfKGUpe3JldHVybntmb250OmBoZWx2ZXRpY2FgLGZvbnRTdHlsZTpgbm9ybWFsYCxvdmVyZmxvdzpgbGluZWJyZWFrYCxmaWxsQ29sb3I6ITEsdGV4dENvbG9yOjIwLGhhbGlnbjpgbGVmdGAsdmFsaWduOmB0b3BgLGZvbnRTaXplOjEwLGNlbGxQYWRkaW5nOjUvZSxsaW5lQ29sb3I6MjAwLGxpbmVXaWR0aDowLGNlbGxXaWR0aDpgYXV0b2AsbWluQ2VsbEhlaWdodDowLG1pbkNlbGxXaWR0aDowfX1mdW5jdGlvbiBfXyhlKXtyZXR1cm57c3RyaXBlZDp7dGFibGU6e2ZpbGxDb2xvcjoyNTUsdGV4dENvbG9yOjgwLGZvbnRTdHlsZTpgbm9ybWFsYH0saGVhZDp7dGV4dENvbG9yOjI1NSxmaWxsQ29sb3I6WzQxLDEyOCwxODVdLGZvbnRTdHlsZTpgYm9sZGB9LGJvZHk6e30sZm9vdDp7dGV4dENvbG9yOjI1NSxmaWxsQ29sb3I6WzQxLDEyOCwxODVdLGZvbnRTdHlsZTpgYm9sZGB9LGFsdGVybmF0ZVJvdzp7ZmlsbENvbG9yOjI0NX19LGdyaWQ6e3RhYmxlOntmaWxsQ29sb3I6MjU1LHRleHRDb2xvcjo4MCxmb250U3R5bGU6YG5vcm1hbGAsbGluZVdpZHRoOi4xfSxoZWFkOnt0ZXh0Q29sb3I6MjU1LGZpbGxDb2xvcjpbMjYsMTg4LDE1Nl0sZm9udFN0eWxlOmBib2xkYCxsaW5lV2lkdGg6MH0sYm9keTp7fSxmb290Ont0ZXh0Q29sb3I6MjU1LGZpbGxDb2xvcjpbMjYsMTg4LDE1Nl0sZm9udFN0eWxlOmBib2xkYCxsaW5lV2lkdGg6MH0sYWx0ZXJuYXRlUm93Ont9fSxwbGFpbjp7aGVhZDp7Zm9udFN0eWxlOmBib2xkYH0sZm9vdDp7Zm9udFN0eWxlOmBib2xkYH19fVtlXX1mdW5jdGlvbiB2XyhlLHQsbil7cmV0dXJuIG4uYXBwbHlTdHlsZXModCwhMCksKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5nZXRUZXh0V2lkdGgoZSl9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0KX0sMCl9ZnVuY3Rpb24geV8oZSx0LG4scil7dmFyIGk9dC5zZXR0aW5ncy50YWJsZUxpbmVXaWR0aCxhPXQuc2V0dGluZ3MudGFibGVMaW5lQ29sb3I7ZS5hcHBseVN0eWxlcyh7bGluZVdpZHRoOmksbGluZUNvbG9yOmF9KTt2YXIgbz1iXyhpLCExKTtvJiZlLnJlY3Qobi54LG4ueSx0LmdldFdpZHRoKGUucGFnZVNpemUoKS53aWR0aCksci55LW4ueSxvKX1mdW5jdGlvbiBiXyhlLHQpe3ZhciBuPWU+MCxyPXR8fHQ9PT0wO3JldHVybiBuJiZyP2BERmA6bj9gU2A6cj9gRmA6bnVsbH1mdW5jdGlvbiB4XyhlLHQpe2lmKGV8fD10LEFycmF5LmlzQXJyYXkoZSkpe2lmKGUubGVuZ3RoPj00KXJldHVybnt0b3A6ZVswXSxyaWdodDplWzFdLGJvdHRvbTplWzJdLGxlZnQ6ZVszXX07aWYoZS5sZW5ndGg9PT0zKXJldHVybnt0b3A6ZVswXSxyaWdodDplWzFdLGJvdHRvbTplWzJdLGxlZnQ6ZVsxXX07aWYoZS5sZW5ndGg9PT0yKXJldHVybnt0b3A6ZVswXSxyaWdodDplWzFdLGJvdHRvbTplWzBdLGxlZnQ6ZVsxXX07ZT1lLmxlbmd0aD09PTE/ZVswXTp0fXJldHVybiB0eXBlb2YgZT09YG9iamVjdGA/KHR5cGVvZiBlLnZlcnRpY2FsPT1gbnVtYmVyYCYmKGUudG9wPWUudmVydGljYWwsZS5ib3R0b209ZS52ZXJ0aWNhbCksdHlwZW9mIGUuaG9yaXpvbnRhbD09YG51bWJlcmAmJihlLnJpZ2h0PWUuaG9yaXpvbnRhbCxlLmxlZnQ9ZS5ob3Jpem9udGFsKSx7bGVmdDplLmxlZnQ/P3QsdG9wOmUudG9wPz90LHJpZ2h0OmUucmlnaHQ/P3QsYm90dG9tOmUuYm90dG9tPz90fSk6KHR5cGVvZiBlIT1gbnVtYmVyYCYmKGU9dCkse3RvcDplLHJpZ2h0OmUsYm90dG9tOmUsbGVmdDplfSl9ZnVuY3Rpb24gU18oZSx0KXt2YXIgbj14Xyh0LnNldHRpbmdzLm1hcmdpbiwwKTtyZXR1cm4gZS5wYWdlU2l6ZSgpLndpZHRoLShuLmxlZnQrbi5yaWdodCl9ZnVuY3Rpb24gQ18oZSx0LG4scixpKXt2YXIgYT17fSxvPTk2LzcyLHM9VF8odCxmdW5jdGlvbihlKXtyZXR1cm4gaS5nZXRDb21wdXRlZFN0eWxlKGUpLmJhY2tncm91bmRDb2xvcn0pO3MhPW51bGwmJihhLmZpbGxDb2xvcj1zKTt2YXIgYz1UXyh0LGZ1bmN0aW9uKGUpe3JldHVybiBpLmdldENvbXB1dGVkU3R5bGUoZSkuY29sb3J9KTtjIT1udWxsJiYoYS50ZXh0Q29sb3I9Yyk7dmFyIGw9RF8ocixuKTtsJiYoYS5jZWxsUGFkZGluZz1sKTt2YXIgdT1gYm9yZGVyVG9wQ29sb3JgLGQ9bypuLGY9ci5ib3JkZXJUb3BXaWR0aDtpZihyLmJvcmRlckJvdHRvbVdpZHRoPT09ZiYmci5ib3JkZXJSaWdodFdpZHRoPT09ZiYmci5ib3JkZXJMZWZ0V2lkdGg9PT1mKXt2YXIgcD0ocGFyc2VGbG9hdChmKXx8MCkvZDtwJiYoYS5saW5lV2lkdGg9cCl9ZWxzZSBhLmxpbmVXaWR0aD17dG9wOihwYXJzZUZsb2F0KHIuYm9yZGVyVG9wV2lkdGgpfHwwKS9kLHJpZ2h0OihwYXJzZUZsb2F0KHIuYm9yZGVyUmlnaHRXaWR0aCl8fDApL2QsYm90dG9tOihwYXJzZUZsb2F0KHIuYm9yZGVyQm90dG9tV2lkdGgpfHwwKS9kLGxlZnQ6KHBhcnNlRmxvYXQoci5ib3JkZXJMZWZ0V2lkdGgpfHwwKS9kfSxhLmxpbmVXaWR0aC50b3B8fChhLmxpbmVXaWR0aC5yaWdodD91PWBib3JkZXJSaWdodENvbG9yYDphLmxpbmVXaWR0aC5ib3R0b20/dT1gYm9yZGVyQm90dG9tQ29sb3JgOmEubGluZVdpZHRoLmxlZnQmJih1PWBib3JkZXJMZWZ0Q29sb3JgKSk7dmFyIG09VF8odCxmdW5jdGlvbihlKXtyZXR1cm4gaS5nZXRDb21wdXRlZFN0eWxlKGUpW3VdfSk7bSE9bnVsbCYmKGEubGluZUNvbG9yPW0pO3ZhciBoPVtgbGVmdGAsYHJpZ2h0YCxgY2VudGVyYCxganVzdGlmeWBdO2guaW5kZXhPZihyLnRleHRBbGlnbikhPT0tMSYmKGEuaGFsaWduPXIudGV4dEFsaWduKSxoPVtgbWlkZGxlYCxgYm90dG9tYCxgdG9wYF0saC5pbmRleE9mKHIudmVydGljYWxBbGlnbikhPT0tMSYmKGEudmFsaWduPXIudmVydGljYWxBbGlnbik7dmFyIGc9cGFyc2VJbnQoci5mb250U2l6ZXx8YGApO2lzTmFOKGcpfHwoYS5mb250U2l6ZT1nL28pO3ZhciBfPXdfKHIpO18mJihhLmZvbnRTdHlsZT1fKTt2YXIgdj0oci5mb250RmFtaWx5fHxgYCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gZS5pbmRleE9mKHYpIT09LTEmJihhLmZvbnQ9diksYX1mdW5jdGlvbiB3XyhlKXt2YXIgdD1gYDtyZXR1cm4oZS5mb250V2VpZ2h0PT09YGJvbGRgfHxlLmZvbnRXZWlnaHQ9PT1gYm9sZGVyYHx8cGFyc2VJbnQoZS5mb250V2VpZ2h0KT49NzAwKSYmKHQ9YGJvbGRgKSwoZS5mb250U3R5bGU9PT1gaXRhbGljYHx8ZS5mb250U3R5bGU9PT1gb2JsaXF1ZWApJiYodCs9YGl0YWxpY2ApLHR9ZnVuY3Rpb24gVF8oZSx0KXt2YXIgbj1FXyhlLHQpO2lmKCFuKXJldHVybiBudWxsO3ZhciByPW4ubWF0Y2goL15yZ2JhP1woKFxkKyksXHMqKFxkKyksXHMqKFxkKykoPzosXHMqKFxkKlwuP1xkKikpP1wpJC8pO2lmKCFyfHwhQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gbnVsbDt2YXIgaT1bcGFyc2VJbnQoclsxXSkscGFyc2VJbnQoclsyXSkscGFyc2VJbnQoclszXSldO3JldHVybiBwYXJzZUludChyWzRdKT09PTB8fGlzTmFOKGlbMF0pfHxpc05hTihpWzFdKXx8aXNOYU4oaVsyXSk/bnVsbDppfWZ1bmN0aW9uIEVfKGUsdCl7dmFyIG49dChlKTtyZXR1cm4gbj09PWByZ2JhKDAsIDAsIDAsIDApYHx8bj09PWB0cmFuc3BhcmVudGB8fG49PT1gaW5pdGlhbGB8fG49PT1gaW5oZXJpdGA/ZS5wYXJlbnRFbGVtZW50PT1udWxsP251bGw6RV8oZS5wYXJlbnRFbGVtZW50LHQpOm59ZnVuY3Rpb24gRF8oZSx0KXt2YXIgbj1bZS5wYWRkaW5nVG9wLGUucGFkZGluZ1JpZ2h0LGUucGFkZGluZ0JvdHRvbSxlLnBhZGRpbmdMZWZ0XSxyPTk2Lyg3Mi90KSxpPShwYXJzZUludChlLmxpbmVIZWlnaHQpLXBhcnNlSW50KGUuZm9udFNpemUpKS90LzIsYT14XyhuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZXx8YDBgKS9yfSksMCk7cmV0dXJuIGk+YS50b3AmJihhLnRvcD1pKSxpPmEuYm90dG9tJiYoYS5ib3R0b209aSksYX1mdW5jdGlvbiBPXyhlLHQsbixyLGkpe3I9PT12b2lkIDAmJihyPSExKSxpPT09dm9pZCAwJiYoaT0hMSk7dmFyIGE9dHlwZW9mIHQ9PWBzdHJpbmdgP24uZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0LG89T2JqZWN0LmtleXMoZS5nZXRGb250TGlzdCgpKSxzPWUuc2NhbGVGYWN0b3IoKSxjPVtdLGw9W10sdT1bXTtpZighYSlyZXR1cm4gY29uc29sZS5lcnJvcihgSHRtbCB0YWJsZSBjb3VsZCBub3QgYmUgZm91bmQgd2l0aCBpbnB1dDogYCx0KSx7aGVhZDpjLGJvZHk6bCxmb290OnV9O2Zvcih2YXIgZD0wO2Q8YS5yb3dzLmxlbmd0aDtkKyspe3ZhciBmPWEucm93c1tkXSxwPShmPy5wYXJlbnRFbGVtZW50Py50YWdOYW1lKT8udG9Mb3dlckNhc2UoKSxtPWtfKG8scyxuLGYscixpKTttJiYocD09PWB0aGVhZGA/Yy5wdXNoKG0pOnA9PT1gdGZvb3RgP3UucHVzaChtKTpsLnB1c2gobSkpfXJldHVybntoZWFkOmMsYm9keTpsLGZvb3Q6dX19ZnVuY3Rpb24ga18oZSx0LG4scixpLGEpe2Zvcih2YXIgbz1uZXcgd3Yocikscz0wO3M8ci5jZWxscy5sZW5ndGg7cysrKXt2YXIgYz1yLmNlbGxzW3NdLGw9bi5nZXRDb21wdXRlZFN0eWxlKGMpO2lmKGl8fGwuZGlzcGxheSE9PWBub25lYCl7dmFyIHU9dm9pZCAwO2EmJih1PUNfKGUsYyx0LGwsbikpLG8ucHVzaCh7cm93U3BhbjpjLnJvd1NwYW4sY29sU3BhbjpjLmNvbFNwYW4sc3R5bGVzOnUsX2VsZW1lbnQ6Yyxjb250ZW50OkFfKGMpfSl9fXZhciBkPW4uZ2V0Q29tcHV0ZWRTdHlsZShyKTtpZihvLmxlbmd0aD4wJiYoaXx8ZC5kaXNwbGF5IT09YG5vbmVgKSlyZXR1cm4gb31mdW5jdGlvbiBBXyhlKXt2YXIgdD1lLmNsb25lTm9kZSghMCk7cmV0dXJuIHQuaW5uZXJIVE1MPXQuaW5uZXJIVE1MLnJlcGxhY2UoL1xuL2csYGApLnJlcGxhY2UoLyArL2csYCBgKSx0LmlubmVySFRNTD10LmlubmVySFRNTC5zcGxpdCgvPGJyLio/Pi8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KS5qb2luKGAKYCksdC5pbm5lclRleHR8fHQudGV4dENvbnRlbnR8fGBgfWZ1bmN0aW9uIGpfKGUsdCxuKXtmb3IodmFyIHI9MCxpPVtlLHQsbl07cjxpLmxlbmd0aDtyKyspe3ZhciBhPWlbcl07YSYmdHlwZW9mIGEhPWBvYmplY3RgJiZjb25zb2xlLmVycm9yKGBUaGUgb3B0aW9ucyBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9mIHR5cGUgb2JqZWN0LCBpczogYCt0eXBlb2YgYSksYS5zdGFydFkmJnR5cGVvZiBhLnN0YXJ0WSE9YG51bWJlcmAmJihjb25zb2xlLmVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciBzdGFydFkgb3B0aW9uYCxhLnN0YXJ0WSksZGVsZXRlIGEuc3RhcnRZKX19ZnVuY3Rpb24gTV8oZSx0LG4scixpKXtpZihlPT1udWxsKXRocm93IFR5cGVFcnJvcihgQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0YCk7Zm9yKHZhciBhPU9iamVjdChlKSxvPTE7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7dmFyIHM9YXJndW1lbnRzW29dO2lmKHMhPW51bGwpZm9yKHZhciBjIGluIHMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsYykmJihhW2NdPXNbY10pfXJldHVybiBhfWZ1bmN0aW9uIE5fKGUsdCl7dmFyIG49bmV3IFN2KGUpLHI9bi5nZXREb2N1bWVudE9wdGlvbnMoKSxpPW4uZ2V0R2xvYmFsT3B0aW9ucygpO2pfKGkscix0KTt2YXIgYT1NXyh7fSxpLHIsdCksbzt0eXBlb2Ygd2luZG93PGB1YCYmKG89d2luZG93KTt2YXIgcz1QXyhpLHIsdCksYz1GXyhpLHIsdCksbD1JXyhuLGEpLHU9Ul8obixhLG8pO3JldHVybntpZDp0LnRhYmxlSWQsY29udGVudDp1LGhvb2tzOmMsc3R5bGVzOnMsc2V0dGluZ3M6bH19ZnVuY3Rpb24gUF8oZSx0LG4pe2Zvcih2YXIgcj17c3R5bGVzOnt9LGhlYWRTdHlsZXM6e30sYm9keVN0eWxlczp7fSxmb290U3R5bGVzOnt9LGFsdGVybmF0ZVJvd1N0eWxlczp7fSxjb2x1bW5TdHlsZXM6e319LGk9ZnVuY3Rpb24oaSl7aWYoaT09PWBjb2x1bW5TdHlsZXNgKXt2YXIgYT1lW2ldLG89dFtpXSxzPW5baV07ci5jb2x1bW5TdHlsZXM9TV8oe30sYSxvLHMpfWVsc2V7dmFyIGM9W2UsdCxuXS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbaV18fHt9fSk7cltpXT1NXyh7fSxjWzBdLGNbMV0sY1syXSl9fSxhPTAsbz1PYmplY3Qua2V5cyhyKTthPG8ubGVuZ3RoO2ErKyl7dmFyIHM9b1thXTtpKHMpfXJldHVybiByfWZ1bmN0aW9uIEZfKGUsdCxuKXtmb3IodmFyIHI9W2UsdCxuXSxpPXtkaWRQYXJzZUNlbGw6W10sd2lsbERyYXdDZWxsOltdLGRpZERyYXdDZWxsOltdLHdpbGxEcmF3UGFnZTpbXSxkaWREcmF3UGFnZTpbXX0sYT0wLG89cjthPG8ubGVuZ3RoO2ErKyl7dmFyIHM9b1thXTtzLmRpZFBhcnNlQ2VsbCYmaS5kaWRQYXJzZUNlbGwucHVzaChzLmRpZFBhcnNlQ2VsbCkscy53aWxsRHJhd0NlbGwmJmkud2lsbERyYXdDZWxsLnB1c2gocy53aWxsRHJhd0NlbGwpLHMuZGlkRHJhd0NlbGwmJmkuZGlkRHJhd0NlbGwucHVzaChzLmRpZERyYXdDZWxsKSxzLndpbGxEcmF3UGFnZSYmaS53aWxsRHJhd1BhZ2UucHVzaChzLndpbGxEcmF3UGFnZSkscy5kaWREcmF3UGFnZSYmaS5kaWREcmF3UGFnZS5wdXNoKHMuZGlkRHJhd1BhZ2UpfXJldHVybiBpfWZ1bmN0aW9uIElfKGUsdCl7dmFyIG49eF8odC5tYXJnaW4sNDAvZS5zY2FsZUZhY3RvcigpKSxyPUxfKGUsdC5zdGFydFkpPz9uLnRvcCxpPXQuc2hvd0Zvb3Q9PT0hMD9gZXZlcnlQYWdlYDp0LnNob3dGb290PT09ITE/YG5ldmVyYDp0LnNob3dGb290Pz9gZXZlcnlQYWdlYCxhPXQuc2hvd0hlYWQ9PT0hMD9gZXZlcnlQYWdlYDp0LnNob3dIZWFkPT09ITE/YG5ldmVyYDp0LnNob3dIZWFkPz9gZXZlcnlQYWdlYCxvPXQudXNlQ3NzPz8hMSxzPXQudGhlbWV8fChvP2BwbGFpbmA6YHN0cmlwZWRgKSxjPSEhdC5ob3Jpem9udGFsUGFnZUJyZWFrLGw9dC5ob3Jpem9udGFsUGFnZUJyZWFrUmVwZWF0Pz9udWxsO3JldHVybntpbmNsdWRlSGlkZGVuSHRtbDp0LmluY2x1ZGVIaWRkZW5IdG1sPz8hMSx1c2VDc3M6byx0aGVtZTpzLHN0YXJ0WTpyLG1hcmdpbjpuLHBhZ2VCcmVhazp0LnBhZ2VCcmVhaz8/YGF1dG9gLHJvd1BhZ2VCcmVhazp0LnJvd1BhZ2VCcmVhaz8/YGF1dG9gLHRhYmxlV2lkdGg6dC50YWJsZVdpZHRoPz9gYXV0b2Asc2hvd0hlYWQ6YSxzaG93Rm9vdDppLHRhYmxlTGluZVdpZHRoOnQudGFibGVMaW5lV2lkdGg/PzAsdGFibGVMaW5lQ29sb3I6dC50YWJsZUxpbmVDb2xvcj8/MjAwLGhvcml6b250YWxQYWdlQnJlYWs6Yyxob3Jpem9udGFsUGFnZUJyZWFrUmVwZWF0OmwsaG9yaXpvbnRhbFBhZ2VCcmVha0JlaGF2aW91cjp0Lmhvcml6b250YWxQYWdlQnJlYWtCZWhhdmlvdXI/P2BhZnRlckFsbFJvd3NgfX1mdW5jdGlvbiBMXyhlLHQpe3ZhciBuPWUuZ2V0TGFzdEF1dG9UYWJsZSgpLHI9ZS5zY2FsZUZhY3RvcigpLGk9ZS5wYWdlTnVtYmVyKCksYT0hMTtyZXR1cm4gbiYmbi5zdGFydFBhZ2VOdW1iZXImJihhPW4uc3RhcnRQYWdlTnVtYmVyK24ucGFnZU51bWJlci0xPT09aSksdHlwZW9mIHQ9PWBudW1iZXJgP3Q6KHQ9PW51bGx8fHQ9PT0hMSkmJmEmJm4/LmZpbmFsWSE9bnVsbD9uLmZpbmFsWSsyMC9yOm51bGx9ZnVuY3Rpb24gUl8oZSx0LG4pe3ZhciByPXQuaGVhZHx8W10saT10LmJvZHl8fFtdLGE9dC5mb290fHxbXTtpZih0Lmh0bWwpe3ZhciBvPXQuaW5jbHVkZUhpZGRlbkh0bWw7aWYobil7dmFyIHM9T18oZSx0Lmh0bWwsbixvLHQudXNlQ3NzKXx8e307cj1zLmhlYWR8fHIsaT1zLmJvZHl8fHIsYT1zLmZvb3R8fHJ9ZWxzZSBjb25zb2xlLmVycm9yKGBDYW5ub3QgcGFyc2UgaHRtbCBpbiBub24gYnJvd3NlciBlbnZpcm9ubWVudGApfXJldHVybntjb2x1bW5zOnQuY29sdW1uc3x8el8ocixpLGEpLGhlYWQ6cixib2R5OmksZm9vdDphfX1mdW5jdGlvbiB6XyhlLHQsbil7dmFyIHI9ZVswXXx8dFswXXx8blswXXx8W10saT1bXTtyZXR1cm4gT2JqZWN0LmtleXMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09YF9lbGVtZW50YH0pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9MSxuPUFycmF5LmlzQXJyYXkocik/cltwYXJzZUludChlKV06cltlXTt0eXBlb2Ygbj09YG9iamVjdGAmJiFBcnJheS5pc0FycmF5KG4pJiYodD1uPy5jb2xTcGFufHwxKTtmb3IodmFyIGE9MDthPHQ7YSsrKXt2YXIgbz12b2lkIDA7bz1BcnJheS5pc0FycmF5KHIpP2kubGVuZ3RoOmUrKGE+MD9gXyR7YX1gOmBgKTt2YXIgcz17ZGF0YUtleTpvfTtpLnB1c2gocyl9fSksaX1mdW5jdGlvbiBCXyhlLHQpe1ZfKGUsdCk7dmFyIG49W10scj0wO3QuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPWUuZ2V0TWF4Q3VzdG9tQ2VsbFdpZHRoKHQpO2k/ZS53aWR0aD1pOihlLndpZHRoPWUud3JhcHBlZFdpZHRoLG4ucHVzaChlKSkscis9ZS53aWR0aH0pO3ZhciBpPXQuZ2V0V2lkdGgoZS5wYWdlU2l6ZSgpLndpZHRoKS1yO2kmJj1IXyhuLGksZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KGUubWluUmVhZGFibGVXaWR0aCxlLm1pbldpZHRoKX0pLGkmJj1IXyhuLGksZnVuY3Rpb24oZSl7cmV0dXJuIGUubWluV2lkdGh9KSxpPU1hdGguYWJzKGkpLCF0LnNldHRpbmdzLmhvcml6b250YWxQYWdlQnJlYWsmJmk+LjEvZS5zY2FsZUZhY3RvcigpJiYoaT1pPDE/aTpNYXRoLnJvdW5kKGkpLGNvbnNvbGUubG9nKGBPZiB0aGUgdGFibGUgY29udGVudCwgJHtpfSB1bml0cyB3aWR0aCBjb3VsZCBub3QgZml0IHBhZ2VgKSksV18odCksR18odCxlKSxVXyh0KX1mdW5jdGlvbiBWXyhlLHQpe3ZhciBuPWUuc2NhbGVGYWN0b3IoKSxyPXQuc2V0dGluZ3MuaG9yaXpvbnRhbFBhZ2VCcmVhayxpPVNfKGUsdCk7dC5hbGxSb3dzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtmb3IodmFyIG89MCxzPXQuY29sdW1ucztvPHMubGVuZ3RoO28rKyl7dmFyIGM9c1tvXSxsPWEuY2VsbHNbYy5pbmRleF07aWYobCl7dmFyIHU9dC5ob29rcy5kaWRQYXJzZUNlbGw7dC5jYWxsQ2VsbEhvb2tzKGUsdSxsLGEsYyxudWxsKTt2YXIgZD1sLnBhZGRpbmcoYGhvcml6b250YWxgKTtpZihsLmNvbnRlbnRXaWR0aD12XyhsLnRleHQsbC5zdHlsZXMsZSkrZCxsLm1pblJlYWRhYmxlV2lkdGg9dl8obC50ZXh0LmpvaW4oYCBgKS5zcGxpdCgvW15cU1x1MDBBMF0rLyksbC5zdHlsZXMsZSkrbC5wYWRkaW5nKGBob3Jpem9udGFsYCksdHlwZW9mIGwuc3R5bGVzLmNlbGxXaWR0aD09YG51bWJlcmApbC5taW5XaWR0aD1sLnN0eWxlcy5jZWxsV2lkdGgsbC53cmFwcGVkV2lkdGg9bC5zdHlsZXMuY2VsbFdpZHRoO2Vsc2UgaWYobC5zdHlsZXMuY2VsbFdpZHRoPT09YHdyYXBgfHxyPT09ITApbC5jb250ZW50V2lkdGg+aT8obC5taW5XaWR0aD1pLGwud3JhcHBlZFdpZHRoPWkpOihsLm1pbldpZHRoPWwuY29udGVudFdpZHRoLGwud3JhcHBlZFdpZHRoPWwuY29udGVudFdpZHRoKTtlbHNle3ZhciBmPTEwL247bC5taW5XaWR0aD1sLnN0eWxlcy5taW5DZWxsV2lkdGh8fGYsbC53cmFwcGVkV2lkdGg9bC5jb250ZW50V2lkdGgsbC5taW5XaWR0aD5sLndyYXBwZWRXaWR0aCYmKGwud3JhcHBlZFdpZHRoPWwubWluV2lkdGgpfX19fSksdC5hbGxSb3dzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIG49MCxyPXQuY29sdW1ucztuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxhPWUuY2VsbHNbaS5pbmRleF07aWYoYSYmYS5jb2xTcGFuPT09MSlpLndyYXBwZWRXaWR0aD1NYXRoLm1heChpLndyYXBwZWRXaWR0aCxhLndyYXBwZWRXaWR0aCksaS5taW5XaWR0aD1NYXRoLm1heChpLm1pbldpZHRoLGEubWluV2lkdGgpLGkubWluUmVhZGFibGVXaWR0aD1NYXRoLm1heChpLm1pblJlYWRhYmxlV2lkdGgsYS5taW5SZWFkYWJsZVdpZHRoKTtlbHNle3ZhciBvPXQuc3R5bGVzLmNvbHVtblN0eWxlc1tpLmRhdGFLZXldfHx0LnN0eWxlcy5jb2x1bW5TdHlsZXNbaS5pbmRleF18fHt9LHM9by5jZWxsV2lkdGh8fG8ubWluQ2VsbFdpZHRoO3MmJnR5cGVvZiBzPT1gbnVtYmVyYCYmKGkubWluV2lkdGg9cyxpLndyYXBwZWRXaWR0aD1zKX1hJiYoYS5jb2xTcGFuPjEmJiFpLm1pbldpZHRoJiYoaS5taW5XaWR0aD1hLm1pbldpZHRoKSxhLmNvbFNwYW4+MSYmIWkud3JhcHBlZFdpZHRoJiYoaS53cmFwcGVkV2lkdGg9YS5taW5XaWR0aCkpfX0pfWZ1bmN0aW9uIEhfKGUsdCxuKXtmb3IodmFyIHI9dCxpPWUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC53cmFwcGVkV2lkdGh9LDApLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXSxzPXIqKG8ud3JhcHBlZFdpZHRoL2kpLGM9by53aWR0aCtzLGw9bihvKSx1PWM8bD9sOmM7dC09dS1vLndpZHRoLG8ud2lkdGg9dX1pZih0PU1hdGgucm91bmQodCoxZTEwKS8xZTEwLHQpe3ZhciBkPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0PDA/ZS53aWR0aD5uKGUpOiEwfSk7ZC5sZW5ndGgmJih0PUhfKGQsdCxuKSl9cmV0dXJuIHR9ZnVuY3Rpb24gVV8oZSl7Zm9yKHZhciB0PXt9LG49MSxyPWUuYWxsUm93cygpLGk9MDtpPHIubGVuZ3RoO2krKylmb3IodmFyIGE9cltpXSxvPTAscz1lLmNvbHVtbnM7bzxzLmxlbmd0aDtvKyspe3ZhciBjPXNbb10sbD10W2MuaW5kZXhdO2lmKG4+MSluLS0sZGVsZXRlIGEuY2VsbHNbYy5pbmRleF07ZWxzZSBpZihsKWwuY2VsbC5oZWlnaHQrPWEuaGVpZ2h0LG49bC5jZWxsLmNvbFNwYW4sZGVsZXRlIGEuY2VsbHNbYy5pbmRleF0sbC5sZWZ0LS0sbC5sZWZ0PD0xJiZkZWxldGUgdFtjLmluZGV4XTtlbHNle3ZhciB1PWEuY2VsbHNbYy5pbmRleF07aWYoIXUpY29udGludWU7aWYodS5oZWlnaHQ9YS5oZWlnaHQsdS5yb3dTcGFuPjEpe3ZhciBkPXIubGVuZ3RoLWksZj11LnJvd1NwYW4+ZD9kOnUucm93U3Bhbjt0W2MuaW5kZXhdPXtjZWxsOnUsbGVmdDpmLHJvdzphfX19fX1mdW5jdGlvbiBXXyhlKXtmb3IodmFyIHQ9ZS5hbGxSb3dzKCksbj0wO248dC5sZW5ndGg7bisrKWZvcih2YXIgcj10W25dLGk9bnVsbCxhPTAsbz0wLHM9MDtzPGUuY29sdW1ucy5sZW5ndGg7cysrKXt2YXIgYz1lLmNvbHVtbnNbc107aWYoLS1vLG8+MSYmZS5jb2x1bW5zW3MrMV0pYSs9Yy53aWR0aCxkZWxldGUgci5jZWxsc1tjLmluZGV4XTtlbHNlIGlmKGkpe3ZhciBsPWk7ZGVsZXRlIHIuY2VsbHNbYy5pbmRleF0saT1udWxsLGwud2lkdGg9Yy53aWR0aCthfWVsc2V7dmFyIGw9ci5jZWxsc1tjLmluZGV4XTtpZighbCljb250aW51ZTtpZihvPWwuY29sU3BhbixhPTAsbC5jb2xTcGFuPjEpe2k9bCxhKz1jLndpZHRoO2NvbnRpbnVlfWwud2lkdGg9Yy53aWR0aCthfX19ZnVuY3Rpb24gR18oZSx0KXtmb3IodmFyIG49e2NvdW50OjAsaGVpZ2h0OjB9LHI9MCxpPWUuYWxsUm93cygpO3I8aS5sZW5ndGg7cisrKXtmb3IodmFyIGE9aVtyXSxvPTAscz1lLmNvbHVtbnM7bzxzLmxlbmd0aDtvKyspe3ZhciBjPXNbb10sbD1hLmNlbGxzW2MuaW5kZXhdO2lmKGwpe3QuYXBwbHlTdHlsZXMobC5zdHlsZXMsITApO3ZhciB1PWwud2lkdGgtbC5wYWRkaW5nKGBob3Jpem9udGFsYCk7aWYobC5zdHlsZXMub3ZlcmZsb3c9PT1gbGluZWJyZWFrYClsLnRleHQ9dC5zcGxpdFRleHRUb1NpemUobC50ZXh0LHUrMS90LnNjYWxlRmFjdG9yKCkse2ZvbnRTaXplOmwuc3R5bGVzLmZvbnRTaXplfSk7ZWxzZSBpZihsLnN0eWxlcy5vdmVyZmxvdz09PWBlbGxpcHNpemVgKWwudGV4dD1LXyhsLnRleHQsdSxsLnN0eWxlcyx0LGAuLi5gKTtlbHNlIGlmKGwuc3R5bGVzLm92ZXJmbG93PT09YGhpZGRlbmApbC50ZXh0PUtfKGwudGV4dCx1LGwuc3R5bGVzLHQsYGApO2Vsc2UgaWYodHlwZW9mIGwuc3R5bGVzLm92ZXJmbG93PT1gZnVuY3Rpb25gKXt2YXIgZD1sLnN0eWxlcy5vdmVyZmxvdyhsLnRleHQsdSk7dHlwZW9mIGQ9PWBzdHJpbmdgP2wudGV4dD1bZF06bC50ZXh0PWR9bC5jb250ZW50SGVpZ2h0PWwuZ2V0Q29udGVudEhlaWdodCh0LnNjYWxlRmFjdG9yKCksdC5nZXRMaW5lSGVpZ2h0RmFjdG9yKCkpO3ZhciBmPWwuY29udGVudEhlaWdodC9sLnJvd1NwYW47bC5yb3dTcGFuPjEmJm4uY291bnQqbi5oZWlnaHQ8ZipsLnJvd1NwYW4/bj17aGVpZ2h0OmYsY291bnQ6bC5yb3dTcGFufTpuJiZuLmNvdW50PjAmJm4uaGVpZ2h0PmYmJihmPW4uaGVpZ2h0KSxmPmEuaGVpZ2h0JiYoYS5oZWlnaHQ9Zil9fW4uY291bnQtLX19ZnVuY3Rpb24gS18oZSx0LG4scixpKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHFfKGUsdCxuLHIsaSl9KX1mdW5jdGlvbiBxXyhlLHQsbixyLGkpe3ZhciBhPTFlNCpyLnNjYWxlRmFjdG9yKCk7aWYodD1NYXRoLmNlaWwodCphKS9hLHQ+PXZfKGUsbixyKSlyZXR1cm4gZTtmb3IoO3Q8dl8oZStpLG4scikmJiEoZS5sZW5ndGg8PTEpOyllPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGUudHJpbSgpK2l9ZnVuY3Rpb24gSl8oZSx0KXt2YXIgbj1uZXcgU3YoZSkscj1uZXcgRHYodCxZXyh0LG4uc2NhbGVGYWN0b3IoKSkpO3JldHVybiBCXyhuLHIpLG4uYXBwbHlTdHlsZXMobi51c2VyU3R5bGVzKSxyfWZ1bmN0aW9uIFlfKGUsdCl7dmFyIG49ZS5jb250ZW50LHI9JF8obi5jb2x1bW5zKTtpZihuLmhlYWQubGVuZ3RoPT09MCl7dmFyIGk9Wl8ocixgaGVhZGApO2kmJm4uaGVhZC5wdXNoKGkpfWlmKG4uZm9vdC5sZW5ndGg9PT0wKXt2YXIgaT1aXyhyLGBmb290YCk7aSYmbi5mb290LnB1c2goaSl9dmFyIGE9ZS5zZXR0aW5ncy50aGVtZSxvPWUuc3R5bGVzO3JldHVybntjb2x1bW5zOnIsaGVhZDpYXyhgaGVhZGAsbi5oZWFkLHIsbyxhLHQpLGJvZHk6WF8oYGJvZHlgLG4uYm9keSxyLG8sYSx0KSxmb290OlhfKGBmb290YCxuLmZvb3QscixvLGEsdCl9fWZ1bmN0aW9uIFhfKGUsdCxuLHIsaSxhKXt2YXIgbz17fTtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxzKXtmb3IodmFyIGM9MCxsPXt9LHU9MCxkPTAsZj0wLHA9bjtmPHAubGVuZ3RoO2YrKyl7dmFyIG09cFtmXTtpZihvW20uaW5kZXhdPT1udWxsfHxvW20uaW5kZXhdLmxlZnQ9PT0wKWlmKGQ9PT0wKXt2YXIgaD12b2lkIDA7aD1BcnJheS5pc0FycmF5KHQpP3RbbS5pbmRleC11LWNdOnRbbS5kYXRhS2V5XTt2YXIgZz17fTt0eXBlb2YgaD09YG9iamVjdGAmJiFBcnJheS5pc0FycmF5KGgpJiYoZz1oPy5zdHlsZXN8fHt9KTt2YXIgXz1ldihlLG0scyxpLHIsYSxnKSx2PW5ldyBrdihoLF8sZSk7bFttLmRhdGFLZXldPXYsbFttLmluZGV4XT12LGQ9di5jb2xTcGFuLTEsb1ttLmluZGV4XT17bGVmdDp2LnJvd1NwYW4tMSx0aW1lczpkfX1lbHNlIGQtLSx1Kys7ZWxzZSBvW20uaW5kZXhdLmxlZnQtLSxkPW9bbS5pbmRleF0udGltZXMsYysrfXJldHVybiBuZXcgT3YodCxzLGUsbCl9KX1mdW5jdGlvbiBaXyhlLHQpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5yYXchPW51bGwpe3ZhciByPVFfKHQsZS5yYXcpO3IhPW51bGwmJihuW2UuZGF0YUtleV09cil9fSksT2JqZWN0LmtleXMobikubGVuZ3RoPjA/bjpudWxsfWZ1bmN0aW9uIFFfKGUsdCl7aWYoZT09PWBoZWFkYCl7aWYodHlwZW9mIHQ9PWBvYmplY3RgKXJldHVybiB0LmhlYWRlcnx8bnVsbDtpZih0eXBlb2YgdD09YHN0cmluZ2B8fHR5cGVvZiB0PT1gbnVtYmVyYClyZXR1cm4gdH1lbHNlIGlmKGU9PT1gZm9vdGAmJnR5cGVvZiB0PT1gb2JqZWN0YClyZXR1cm4gdC5mb290ZXI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gJF8oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU9PWBvYmplY3RgP2UuZGF0YUtleT8/dDp0O3JldHVybiBuZXcgQXYobixlLHQpfSl9ZnVuY3Rpb24gZXYoZSx0LG4scixpLGEsbyl7dmFyIHM9X18ociksYztlPT09YGhlYWRgP2M9aS5oZWFkU3R5bGVzOmU9PT1gYm9keWA/Yz1pLmJvZHlTdHlsZXM6ZT09PWBmb290YCYmKGM9aS5mb290U3R5bGVzKTt2YXIgbD1NXyh7fSxzLnRhYmxlLHNbZV0saS5zdHlsZXMsYyksdT1pLmNvbHVtblN0eWxlc1t0LmRhdGFLZXldfHxpLmNvbHVtblN0eWxlc1t0LmluZGV4XXx8e30sZD1lPT09YGJvZHlgP3U6e30sZj1lPT09YGJvZHlgJiZuJTI9PTA/TV8oe30scy5hbHRlcm5hdGVSb3csaS5hbHRlcm5hdGVSb3dTdHlsZXMpOnt9O3JldHVybiBNXyhNXyh7fSxnXyhhKSxsLGYsZCksbyl9ZnVuY3Rpb24gdHYoZSx0LG4pe249PT12b2lkIDAmJihuPXt9KTt2YXIgcj1TXyhlLHQpLGk9bmV3IE1hcCxhPVtdLG89W10scz1bXTtBcnJheS5pc0FycmF5KHQuc2V0dGluZ3MuaG9yaXpvbnRhbFBhZ2VCcmVha1JlcGVhdCk/cz10LnNldHRpbmdzLmhvcml6b250YWxQYWdlQnJlYWtSZXBlYXQ6KHR5cGVvZiB0LnNldHRpbmdzLmhvcml6b250YWxQYWdlQnJlYWtSZXBlYXQ9PWBzdHJpbmdgfHx0eXBlb2YgdC5zZXR0aW5ncy5ob3Jpem9udGFsUGFnZUJyZWFrUmVwZWF0PT1gbnVtYmVyYCkmJihzPVt0LnNldHRpbmdzLmhvcml6b250YWxQYWdlQnJlYWtSZXBlYXRdKSxzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5jb2x1bW5zLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YUtleT09PWV8fHQuaW5kZXg9PT1lfSk7biYmIWkuaGFzKG4uaW5kZXgpJiYoaS5zZXQobi5pbmRleCwhMCksYS5wdXNoKG4uaW5kZXgpLG8ucHVzaCh0LmNvbHVtbnNbbi5pbmRleF0pLHItPW4ud3JhcHBlZFdpZHRoKX0pO2Zvcih2YXIgYz0hMCxsPW4/LnN0YXJ0Pz8wO2w8dC5jb2x1bW5zLmxlbmd0aDspe2lmKGkuaGFzKGwpKXtsKys7Y29udGludWV9dmFyIHU9dC5jb2x1bW5zW2xdLndyYXBwZWRXaWR0aDtpZihjfHxyPj11KWM9ITEsYS5wdXNoKGwpLG8ucHVzaCh0LmNvbHVtbnNbbF0pLHItPXU7ZWxzZSBicmVhaztsKyt9cmV0dXJue2NvbEluZGV4ZXM6YSxjb2x1bW5zOm8sbGFzdEluZGV4OmwtMX19ZnVuY3Rpb24gbnYoZSx0KXtmb3IodmFyIG49W10scj0wO3I8dC5jb2x1bW5zLmxlbmd0aDtyKyspe3ZhciBpPXR2KGUsdCx7c3RhcnQ6cn0pO2kuY29sdW1ucy5sZW5ndGgmJihuLnB1c2goaSkscj1pLmxhc3RJbmRleCl9cmV0dXJuIG59ZnVuY3Rpb24gcnYoZSx0KXt2YXIgbj10LnNldHRpbmdzLHI9bi5zdGFydFksaT1uLm1hcmdpbixhPXt4OmkubGVmdCx5OnJ9LG89dC5nZXRIZWFkSGVpZ2h0KHQuY29sdW1ucykrdC5nZXRGb290SGVpZ2h0KHQuY29sdW1ucykscz1yK2kuYm90dG9tK287aWYobi5wYWdlQnJlYWs9PT1gYXZvaWRgKXt2YXIgYz10LmJvZHkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5oZWlnaHR9LDApO3MrPWN9dmFyIGw9bmV3IFN2KGUpOyhuLnBhZ2VCcmVhaz09PWBhbHdheXNgfHxuLnN0YXJ0WSE9bnVsbCYmcz5sLnBhZ2VTaXplKCkuaGVpZ2h0KSYmKHZ2KGwpLGEueT1pLnRvcCksdC5jYWxsV2lsbERyYXdQYWdlSG9va3MobCxhKTt2YXIgdT1NXyh7fSxhKTt0LnN0YXJ0UGFnZU51bWJlcj1sLnBhZ2VOdW1iZXIoKSxuLmhvcml6b250YWxQYWdlQnJlYWs/aXYobCx0LHUsYSk6KGwuYXBwbHlTdHlsZXMobC51c2VyU3R5bGVzKSwobi5zaG93SGVhZD09PWBmaXJzdFBhZ2VgfHxuLnNob3dIZWFkPT09YGV2ZXJ5UGFnZWApJiZ0LmhlYWQuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gcHYobCx0LGUsYSx0LmNvbHVtbnMpfSksbC5hcHBseVN0eWxlcyhsLnVzZXJTdHlsZXMpLHQuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZnYobCx0LGUsbj09PXQuYm9keS5sZW5ndGgtMSx1LGEsdC5jb2x1bW5zKX0pLGwuYXBwbHlTdHlsZXMobC51c2VyU3R5bGVzKSwobi5zaG93Rm9vdD09PWBsYXN0UGFnZWB8fG4uc2hvd0Zvb3Q9PT1gZXZlcnlQYWdlYCkmJnQuZm9vdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBwdihsLHQsZSxhLHQuY29sdW1ucyl9KSkseV8obCx0LHUsYSksdC5jYWxsRW5kUGFnZUhvb2tzKGwsYSksdC5maW5hbFk9YS55LGUubGFzdEF1dG9UYWJsZT10LGwuYXBwbHlTdHlsZXMobC51c2VyU3R5bGVzKX1mdW5jdGlvbiBpdihlLHQsbixyKXt2YXIgaT1udihlLHQpO2lmKHQuc2V0dGluZ3MuaG9yaXpvbnRhbFBhZ2VCcmVha0JlaGF2aW91cj09PWBhZnRlckFsbFJvd3NgKWkuZm9yRWFjaChmdW5jdGlvbihpLGEpe2UuYXBwbHlTdHlsZXMoZS51c2VyU3R5bGVzKSxhPjA/X3YoZSx0LG4scixpLmNvbHVtbnMsITApOmF2KGUsdCxyLGkuY29sdW1ucyksb3YoZSx0LG4scixpLmNvbHVtbnMpLGN2KGUsdCxyLGkuY29sdW1ucyl9KTtlbHNlIGZvcih2YXIgYT0tMSxvPWlbMF0scz1mdW5jdGlvbigpe3ZhciBzPWE7aWYobyl7ZS5hcHBseVN0eWxlcyhlLnVzZXJTdHlsZXMpO3ZhciBjPW8uY29sdW1uczthPj0wP192KGUsdCxuLHIsYywhMCk6YXYoZSx0LHIsYykscz1zdihlLHQsYSsxLHIsYyksY3YoZSx0LHIsYyl9dmFyIGw9cy1hO2kuc2xpY2UoMSkuZm9yRWFjaChmdW5jdGlvbihpKXtlLmFwcGx5U3R5bGVzKGUudXNlclN0eWxlcyksX3YoZSx0LG4scixpLmNvbHVtbnMsITApLHN2KGUsdCxhKzEscixpLmNvbHVtbnMsbCksY3YoZSx0LHIsaS5jb2x1bW5zKX0pLGE9c307YTx0LmJvZHkubGVuZ3RoLTE7KXMoKX1mdW5jdGlvbiBhdihlLHQsbixyKXt2YXIgaT10LnNldHRpbmdzO2UuYXBwbHlTdHlsZXMoZS51c2VyU3R5bGVzKSwoaS5zaG93SGVhZD09PWBmaXJzdFBhZ2VgfHxpLnNob3dIZWFkPT09YGV2ZXJ5UGFnZWApJiZ0LmhlYWQuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gcHYoZSx0LGksbixyKX0pfWZ1bmN0aW9uIG92KGUsdCxuLHIsaSl7ZS5hcHBseVN0eWxlcyhlLnVzZXJTdHlsZXMpLHQuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKGEsbyl7ZnYoZSx0LGEsbz09PXQuYm9keS5sZW5ndGgtMSxuLHIsaSl9KX1mdW5jdGlvbiBzdihlLHQsbixyLGksYSl7ZS5hcHBseVN0eWxlcyhlLnVzZXJTdHlsZXMpLGE/Pz10LmJvZHkubGVuZ3RoO3ZhciBvPU1hdGgubWluKG4rYSx0LmJvZHkubGVuZ3RoKSxzPS0xO3JldHVybiB0LmJvZHkuc2xpY2UobixvKS5mb3JFYWNoKGZ1bmN0aW9uKGEsbyl7dmFyIGM9Z3YoZSx0LG4rbz09PXQuYm9keS5sZW5ndGgtMSxyKTthLmNhbkVudGlyZVJvd0ZpdChjLGkpJiYocHYoZSx0LGEscixpKSxzPW4rbyl9KSxzfWZ1bmN0aW9uIGN2KGUsdCxuLHIpe3ZhciBpPXQuc2V0dGluZ3M7ZS5hcHBseVN0eWxlcyhlLnVzZXJTdHlsZXMpLChpLnNob3dGb290PT09YGxhc3RQYWdlYHx8aS5zaG93Rm9vdD09PWBldmVyeVBhZ2VgKSYmdC5mb290LmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIHB2KGUsdCxpLG4scil9KX1mdW5jdGlvbiBsdihlLHQsbil7dmFyIHI9bi5nZXRMaW5lSGVpZ2h0KGUuc3R5bGVzLmZvbnRTaXplKSxpPWUucGFkZGluZyhgdmVydGljYWxgKSxhPU1hdGguZmxvb3IoKHQtaSkvcik7cmV0dXJuIE1hdGgubWF4KDAsYSl9ZnVuY3Rpb24gdXYoZSx0LG4scil7dmFyIGk9e307ZS5zcGFuc011bHRpcGxlUGFnZXM9ITAsZS5oZWlnaHQ9MDtmb3IodmFyIGE9MCxvPTAscz1uLmNvbHVtbnM7bzxzLmxlbmd0aDtvKyspe3ZhciBjPXNbb10sbD1lLmNlbGxzW2MuaW5kZXhdO2lmKGwpe0FycmF5LmlzQXJyYXkobC50ZXh0KXx8KGwudGV4dD1bbC50ZXh0XSk7dmFyIHU9bmV3IGt2KGwucmF3LGwuc3R5bGVzLGwuc2VjdGlvbik7dT1NXyh1LGwpLHUudGV4dD1bXTt2YXIgZD1sdihsLHQscik7bC50ZXh0Lmxlbmd0aD5kJiYodS50ZXh0PWwudGV4dC5zcGxpY2UoZCxsLnRleHQubGVuZ3RoKSk7dmFyIGY9ci5zY2FsZUZhY3RvcigpLHA9ci5nZXRMaW5lSGVpZ2h0RmFjdG9yKCk7bC5jb250ZW50SGVpZ2h0PWwuZ2V0Q29udGVudEhlaWdodChmLHApLGwuY29udGVudEhlaWdodD49dCYmKGwuY29udGVudEhlaWdodD10LHUuc3R5bGVzLm1pbkNlbGxIZWlnaHQtPXQpLGwuY29udGVudEhlaWdodD5lLmhlaWdodCYmKGUuaGVpZ2h0PWwuY29udGVudEhlaWdodCksdS5jb250ZW50SGVpZ2h0PXUuZ2V0Q29udGVudEhlaWdodChmLHApLHUuY29udGVudEhlaWdodD5hJiYoYT11LmNvbnRlbnRIZWlnaHQpLGlbYy5pbmRleF09dX19dmFyIG09bmV3IE92KGUucmF3LC0xLGUuc2VjdGlvbixpLCEwKTttLmhlaWdodD1hO2Zvcih2YXIgaD0wLGc9bi5jb2x1bW5zO2g8Zy5sZW5ndGg7aCsrKXt2YXIgYz1nW2hdLHU9bS5jZWxsc1tjLmluZGV4XTt1JiYodS5oZWlnaHQ9bS5oZWlnaHQpO3ZhciBsPWUuY2VsbHNbYy5pbmRleF07bCYmKGwuaGVpZ2h0PWUuaGVpZ2h0KX1yZXR1cm4gbX1mdW5jdGlvbiBkdihlLHQsbixyKXt2YXIgaT1lLnBhZ2VTaXplKCkuaGVpZ2h0LGE9ci5zZXR0aW5ncy5tYXJnaW4sbz1pLShhLnRvcCthLmJvdHRvbSk7dC5zZWN0aW9uPT09YGJvZHlgJiYoby09ci5nZXRIZWFkSGVpZ2h0KHIuY29sdW1ucykrci5nZXRGb290SGVpZ2h0KHIuY29sdW1ucykpO3ZhciBzPXQuZ2V0TWluaW11bVJvd0hlaWdodChyLmNvbHVtbnMsZSksYz1zPG47aWYocz5vKXJldHVybiBjb25zb2xlLmxvZyhgV2lsbCBub3QgYmUgYWJsZSB0byBwcmludCByb3cgJHt0LmluZGV4fSBjb3JyZWN0bHkgc2luY2UgaXQncyBtaW5pbXVtIGhlaWdodCBpcyBsYXJnZXIgdGhhbiBwYWdlIGhlaWdodGApLCEwO2lmKCFjKXJldHVybiExO3ZhciBsPXQuaGFzUm93U3BhbihyLmNvbHVtbnMpO3JldHVybiB0LmdldE1heENlbGxIZWlnaHQoci5jb2x1bW5zKT5vPyhsJiZjb25zb2xlLmxvZyhgVGhlIGNvbnRlbnQgb2Ygcm93ICR7dC5pbmRleH0gd2lsbCBub3QgYmUgZHJhd24gY29ycmVjdGx5IHNpbmNlIGRyYXdpbmcgcm93cyB3aXRoIGEgaGVpZ2h0IGxhcmdlciB0aGFuIHRoZSBwYWdlIGhlaWdodCBhbmQgaGFzIGNlbGxzIHdpdGggcm93c3BhbnMgaXMgbm90IHN1cHBvcnRlZC5gKSwhMCk6IShsfHxyLnNldHRpbmdzLnJvd1BhZ2VCcmVhaz09PWBhdm9pZGApfWZ1bmN0aW9uIGZ2KGUsdCxuLHIsaSxhLG8pe3ZhciBzPWd2KGUsdCxyLGEpO2lmKG4uY2FuRW50aXJlUm93Rml0KHMsbykpcHYoZSx0LG4sYSxvKTtlbHNlIGlmKGR2KGUsbixzLHQpKXt2YXIgYz11dihuLHMsdCxlKTtwdihlLHQsbixhLG8pLF92KGUsdCxpLGEsbyksZnYoZSx0LGMscixpLGEsbyl9ZWxzZSBfdihlLHQsaSxhLG8pLGZ2KGUsdCxuLHIsaSxhLG8pfWZ1bmN0aW9uIHB2KGUsdCxuLHIsaSl7ci54PXQuc2V0dGluZ3MubWFyZ2luLmxlZnQ7Zm9yKHZhciBhPTAsbz1pO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdLGM9bi5jZWxsc1tzLmluZGV4XTtpZighYyl7ci54Kz1zLndpZHRoO2NvbnRpbnVlfWlmKGUuYXBwbHlTdHlsZXMoYy5zdHlsZXMpLGMueD1yLngsYy55PXIueSx0LmNhbGxDZWxsSG9va3MoZSx0Lmhvb2tzLndpbGxEcmF3Q2VsbCxjLG4scyxyKT09PSExKXtyLngrPXMud2lkdGg7Y29udGludWV9bXYoZSxjLHIpO3ZhciBsPWMuZ2V0VGV4dFBvcygpO21fKGMudGV4dCxsLngsbC55LHtoYWxpZ246Yy5zdHlsZXMuaGFsaWduLHZhbGlnbjpjLnN0eWxlcy52YWxpZ24sbWF4V2lkdGg6TWF0aC5jZWlsKGMud2lkdGgtYy5wYWRkaW5nKGBsZWZ0YCktYy5wYWRkaW5nKGByaWdodGApKX0sZS5nZXREb2N1bWVudCgpKSx0LmNhbGxDZWxsSG9va3MoZSx0Lmhvb2tzLmRpZERyYXdDZWxsLGMsbixzLHIpLHIueCs9cy53aWR0aH1yLnkrPW4uaGVpZ2h0fWZ1bmN0aW9uIG12KGUsdCxuKXt2YXIgcj10LnN0eWxlcztpZihlLmdldERvY3VtZW50KCkuc2V0RmlsbENvbG9yKGUuZ2V0RG9jdW1lbnQoKS5nZXRGaWxsQ29sb3IoKSksdHlwZW9mIHIubGluZVdpZHRoPT1gbnVtYmVyYCl7dmFyIGk9Yl8oci5saW5lV2lkdGgsci5maWxsQ29sb3IpO2kmJmUucmVjdCh0Lngsbi55LHQud2lkdGgsdC5oZWlnaHQsaSl9ZWxzZSB0eXBlb2Ygci5saW5lV2lkdGg9PWBvYmplY3RgJiYoci5maWxsQ29sb3ImJmUucmVjdCh0Lngsbi55LHQud2lkdGgsdC5oZWlnaHQsYEZgKSxodihlLHQsbixyLmxpbmVXaWR0aCkpfWZ1bmN0aW9uIGh2KGUsdCxuLHIpe3ZhciBpLGEsbyxzO3IudG9wJiYoaT1uLngsYT1uLnksbz1uLngrdC53aWR0aCxzPW4ueSxyLnJpZ2h0JiYobys9LjUqci5yaWdodCksci5sZWZ0JiYoaS09LjUqci5sZWZ0KSxjKHIudG9wLGksYSxvLHMpKSxyLmJvdHRvbSYmKGk9bi54LGE9bi55K3QuaGVpZ2h0LG89bi54K3Qud2lkdGgscz1uLnkrdC5oZWlnaHQsci5yaWdodCYmKG8rPS41KnIucmlnaHQpLHIubGVmdCYmKGktPS41KnIubGVmdCksYyhyLmJvdHRvbSxpLGEsbyxzKSksci5sZWZ0JiYoaT1uLngsYT1uLnksbz1uLngscz1uLnkrdC5oZWlnaHQsci50b3AmJihhLT0uNSpyLnRvcCksci5ib3R0b20mJihzKz0uNSpyLmJvdHRvbSksYyhyLmxlZnQsaSxhLG8scykpLHIucmlnaHQmJihpPW4ueCt0LndpZHRoLGE9bi55LG89bi54K3Qud2lkdGgscz1uLnkrdC5oZWlnaHQsci50b3AmJihhLT0uNSpyLnRvcCksci5ib3R0b20mJihzKz0uNSpyLmJvdHRvbSksYyhyLnJpZ2h0LGksYSxvLHMpKTtmdW5jdGlvbiBjKHQsbixyLGksYSl7ZS5nZXREb2N1bWVudCgpLnNldExpbmVXaWR0aCh0KSxlLmdldERvY3VtZW50KCkubGluZShuLHIsaSxhLGBTYCl9fWZ1bmN0aW9uIGd2KGUsdCxuLHIpe3ZhciBpPXQuc2V0dGluZ3MubWFyZ2luLmJvdHRvbSxhPXQuc2V0dGluZ3Muc2hvd0Zvb3Q7cmV0dXJuKGE9PT1gZXZlcnlQYWdlYHx8YT09PWBsYXN0UGFnZWAmJm4pJiYoaSs9dC5nZXRGb290SGVpZ2h0KHQuY29sdW1ucykpLGUucGFnZVNpemUoKS5oZWlnaHQtci55LWl9ZnVuY3Rpb24gX3YoZSx0LG4scixpLGEpe2k9PT12b2lkIDAmJihpPVtdKSxhPT09dm9pZCAwJiYoYT0hMSksZS5hcHBseVN0eWxlcyhlLnVzZXJTdHlsZXMpLHQuc2V0dGluZ3Muc2hvd0Zvb3Q9PT1gZXZlcnlQYWdlYCYmIWEmJnQuZm9vdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBwdihlLHQsbixyLGkpfSksdC5jYWxsRW5kUGFnZUhvb2tzKGUscik7dmFyIG89dC5zZXR0aW5ncy5tYXJnaW47eV8oZSx0LG4sciksdnYoZSksdC5wYWdlTnVtYmVyKyssci54PW8ubGVmdCxyLnk9by50b3Asbi55PW8udG9wLHQuY2FsbFdpbGxEcmF3UGFnZUhvb2tzKGUsciksdC5zZXR0aW5ncy5zaG93SGVhZD09PWBldmVyeVBhZ2VgJiYodC5oZWFkLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHB2KGUsdCxuLHIsaSl9KSxlLmFwcGx5U3R5bGVzKGUudXNlclN0eWxlcykpfWZ1bmN0aW9uIHZ2KGUpe3ZhciB0PWUucGFnZU51bWJlcigpO3JldHVybiBlLnNldFBhZ2UodCsxKSxlLnBhZ2VOdW1iZXIoKT09PXQ/KGUuYWRkUGFnZSgpLCEwKTohMX1mdW5jdGlvbiB5dihlKXtlLkFQSS5hdXRvVGFibGU9ZnVuY3Rpb24oKXt2YXIgZT1bLi4uYXJndW1lbnRzXVswXSx0PU5fKHRoaXMsZSksbj1KXyh0aGlzLHQpO3JldHVybiBydih0aGlzLG4pLHRoaXN9LGUuQVBJLmxhc3RBdXRvVGFibGU9ITEsZS5BUEkuYXV0b1RhYmxlVGV4dD1mdW5jdGlvbihlLHQsbixyKXttXyhlLHQsbixyLHRoaXMpfSxlLkFQSS5hdXRvVGFibGVTZXREZWZhdWx0cz1mdW5jdGlvbihlKXtyZXR1cm4gU3Yuc2V0RGVmYXVsdHMoZSx0aGlzKSx0aGlzfSxlLmF1dG9UYWJsZVNldERlZmF1bHRzPWZ1bmN0aW9uKGUsdCl7U3Yuc2V0RGVmYXVsdHMoZSx0KX0sZS5BUEkuYXV0b1RhYmxlSHRtbFRvSnNvbj1mdW5jdGlvbihlLHQpe2lmKHQ9PT12b2lkIDAmJih0PSExKSx0eXBlb2Ygd2luZG93PmB1YClyZXR1cm4gY29uc29sZS5lcnJvcihgQ2Fubm90IHJ1biBhdXRvVGFibGVIdG1sVG9Kc29uIGluIG5vbiBicm93c2VyIGVudmlyb25tZW50YCksbnVsbDt2YXIgbj1PXyhuZXcgU3YodGhpcyksZSx3aW5kb3csdCwhMSkscj1uLmhlYWQsaT1uLmJvZHk7cmV0dXJue2NvbHVtbnM6clswXT8ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRlbnR9KXx8W10scm93czppLGRhdGE6aX19fWZ1bmN0aW9uIGJ2KGUsdCl7cnYoZSxKXyhlLE5fKGUsdCkpKX12YXIgeHYsU3YsQ3Ysd3YsVHYsRXYsRHYsT3Ysa3YsQXYsanYsTXYsTnY9bygoKCk9Pnt4dj17fSxTdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5qc1BERkRvY3VtZW50PWUsdGhpcy51c2VyU3R5bGVzPXt0ZXh0Q29sb3I6ZS5nZXRUZXh0Q29sb3I/dGhpcy5qc1BERkRvY3VtZW50LmdldFRleHRDb2xvcigpOjAsZm9udFNpemU6ZS5pbnRlcm5hbC5nZXRGb250U2l6ZSgpLGZvbnRTdHlsZTplLmludGVybmFsLmdldEZvbnQoKS5mb250U3R5bGUsZm9udDplLmludGVybmFsLmdldEZvbnQoKS5mb250TmFtZSxsaW5lV2lkdGg6ZS5nZXRMaW5lV2lkdGg/dGhpcy5qc1BERkRvY3VtZW50LmdldExpbmVXaWR0aCgpOjAsbGluZUNvbG9yOmUuZ2V0RHJhd0NvbG9yP3RoaXMuanNQREZEb2N1bWVudC5nZXREcmF3Q29sb3IoKTowfX1yZXR1cm4gZS5zZXREZWZhdWx0cz1mdW5jdGlvbihlLHQpe3Q9PT12b2lkIDAmJih0PW51bGwpLHQ/dC5fX2F1dG9UYWJsZURvY3VtZW50RGVmYXVsdHM9ZTp4dj1lfSxlLnVuaWZ5Q29sb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTp0eXBlb2YgZT09YG51bWJlcmA/W2UsZSxlXTp0eXBlb2YgZT09YHN0cmluZ2A/W2VdOm51bGx9LGUucHJvdG90eXBlLmFwcGx5U3R5bGVzPWZ1bmN0aW9uKHQsbil7dmFyIHIsaSxhO249PT12b2lkIDAmJihuPSExKSx0LmZvbnRTdHlsZSYmdGhpcy5qc1BERkRvY3VtZW50LnNldEZvbnRTdHlsZSYmdGhpcy5qc1BERkRvY3VtZW50LnNldEZvbnRTdHlsZSh0LmZvbnRTdHlsZSk7dmFyIG89dGhpcy5qc1BERkRvY3VtZW50LmludGVybmFsLmdldEZvbnQoKSxzPW8uZm9udFN0eWxlLGM9by5mb250TmFtZTtpZih0LmZvbnQmJihjPXQuZm9udCksdC5mb250U3R5bGUpe3M9dC5mb250U3R5bGU7dmFyIGw9dGhpcy5nZXRGb250TGlzdCgpW2NdO2wmJmwuaW5kZXhPZihzKT09PS0xJiZ0aGlzLmpzUERGRG9jdW1lbnQuc2V0Rm9udFN0eWxlJiYodGhpcy5qc1BERkRvY3VtZW50LnNldEZvbnRTdHlsZShsWzBdKSxzPWxbMF0pfWlmKHRoaXMuanNQREZEb2N1bWVudC5zZXRGb250KGMscyksdC5mb250U2l6ZSYmdGhpcy5qc1BERkRvY3VtZW50LnNldEZvbnRTaXplKHQuZm9udFNpemUpLCFuKXt2YXIgdT1lLnVuaWZ5Q29sb3IodC5maWxsQ29sb3IpO3UmJihyPXRoaXMuanNQREZEb2N1bWVudCkuc2V0RmlsbENvbG9yLmFwcGx5KHIsdSksdT1lLnVuaWZ5Q29sb3IodC50ZXh0Q29sb3IpLHUmJihpPXRoaXMuanNQREZEb2N1bWVudCkuc2V0VGV4dENvbG9yLmFwcGx5KGksdSksdT1lLnVuaWZ5Q29sb3IodC5saW5lQ29sb3IpLHUmJihhPXRoaXMuanNQREZEb2N1bWVudCkuc2V0RHJhd0NvbG9yLmFwcGx5KGEsdSksdHlwZW9mIHQubGluZVdpZHRoPT1gbnVtYmVyYCYmdGhpcy5qc1BERkRvY3VtZW50LnNldExpbmVXaWR0aCh0LmxpbmVXaWR0aCl9fSxlLnByb3RvdHlwZS5zcGxpdFRleHRUb1NpemU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmpzUERGRG9jdW1lbnQuc3BsaXRUZXh0VG9TaXplKGUsdCxuKX0sZS5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiB0aGlzLmpzUERGRG9jdW1lbnQucmVjdChlLHQsbixyLGkpfSxlLnByb3RvdHlwZS5nZXRMYXN0QXV0b1RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuanNQREZEb2N1bWVudC5sYXN0QXV0b1RhYmxlfHxudWxsfSxlLnByb3RvdHlwZS5nZXRUZXh0V2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuanNQREZEb2N1bWVudC5nZXRUZXh0V2lkdGgoZSl9LGUucHJvdG90eXBlLmdldERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuanNQREZEb2N1bWVudH0sZS5wcm90b3R5cGUuc2V0UGFnZT1mdW5jdGlvbihlKXt0aGlzLmpzUERGRG9jdW1lbnQuc2V0UGFnZShlKX0sZS5wcm90b3R5cGUuYWRkUGFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmpzUERGRG9jdW1lbnQuYWRkUGFnZSgpfSxlLnByb3RvdHlwZS5nZXRGb250TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmpzUERGRG9jdW1lbnQuZ2V0Rm9udExpc3QoKX0sZS5wcm90b3R5cGUuZ2V0R2xvYmFsT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB4dnx8e319LGUucHJvdG90eXBlLmdldERvY3VtZW50T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmpzUERGRG9jdW1lbnQuX19hdXRvVGFibGVEb2N1bWVudERlZmF1bHRzfHx7fX0sZS5wcm90b3R5cGUucGFnZVNpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmpzUERGRG9jdW1lbnQuaW50ZXJuYWwucGFnZVNpemU7cmV0dXJuIGUud2lkdGg/PyhlPXt3aWR0aDplLmdldFdpZHRoKCksaGVpZ2h0OmUuZ2V0SGVpZ2h0KCl9KSxlfSxlLnByb3RvdHlwZS5zY2FsZUZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmpzUERGRG9jdW1lbnQuaW50ZXJuYWwuc2NhbGVGYWN0b3J9LGUucHJvdG90eXBlLmdldExpbmVIZWlnaHRGYWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmpzUERGRG9jdW1lbnQ7cmV0dXJuIGUuZ2V0TGluZUhlaWdodEZhY3Rvcj9lLmdldExpbmVIZWlnaHRGYWN0b3IoKToxLjE1fSxlLnByb3RvdHlwZS5nZXRMaW5lSGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBlL3RoaXMuc2NhbGVGYWN0b3IoKSp0aGlzLmdldExpbmVIZWlnaHRGYWN0b3IoKX0sZS5wcm90b3R5cGUucGFnZU51bWJlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuanNQREZEb2N1bWVudC5pbnRlcm5hbC5nZXRDdXJyZW50UGFnZUluZm8oKTtyZXR1cm4gZT9lLnBhZ2VOdW1iZXI6dGhpcy5qc1BERkRvY3VtZW50LmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKX0sZX0oKSxDdj1mdW5jdGlvbihlLHQpe3JldHVybiBDdj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9LEN2KGUsdCl9LHd2PWZ1bmN0aW9uKGUpe2hfKHQsZSk7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2VsZW1lbnQ9dCxufXJldHVybiB0fShBcnJheSksVHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnRhYmxlPXQsdGhpcy5wYWdlTnVtYmVyPXQucGFnZU51bWJlcix0aGlzLnNldHRpbmdzPXQuc2V0dGluZ3MsdGhpcy5jdXJzb3I9bix0aGlzLmRvYz1lLmdldERvY3VtZW50KCl9cmV0dXJuIGV9KCksRXY9ZnVuY3Rpb24oZSl7aF8odCxlKTtmdW5jdGlvbiB0KHQsbixyLGksYSxvKXt2YXIgcz1lLmNhbGwodGhpcyx0LG4sbyl8fHRoaXM7cmV0dXJuIHMuY2VsbD1yLHMucm93PWkscy5jb2x1bW49YSxzLnNlY3Rpb249aS5zZWN0aW9uLHN9cmV0dXJuIHR9KFR2KSxEdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnBhZ2VOdW1iZXI9MSx0aGlzLmlkPWUuaWQsdGhpcy5zZXR0aW5ncz1lLnNldHRpbmdzLHRoaXMuc3R5bGVzPWUuc3R5bGVzLHRoaXMuaG9va3M9ZS5ob29rcyx0aGlzLmNvbHVtbnM9dC5jb2x1bW5zLHRoaXMuaGVhZD10LmhlYWQsdGhpcy5ib2R5PXQuYm9keSx0aGlzLmZvb3Q9dC5mb290fXJldHVybiBlLnByb3RvdHlwZS5nZXRIZWFkSGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhlYWQucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQrbi5nZXRNYXhDZWxsSGVpZ2h0KGUpfSwwKX0sZS5wcm90b3R5cGUuZ2V0Rm9vdEhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mb290LnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K24uZ2V0TWF4Q2VsbEhlaWdodChlKX0sMCl9LGUucHJvdG90eXBlLmFsbFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmNvbmNhdCh0aGlzLmJvZHkpLmNvbmNhdCh0aGlzLmZvb3QpfSxlLnByb3RvdHlwZS5jYWxsQ2VsbEhvb2tzPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKyspe3ZhciBjPXNbb10sbD1jKG5ldyBFdihlLHRoaXMsbixyLGksYSkpPT09ITE7aWYobi50ZXh0PUFycmF5LmlzQXJyYXkobi50ZXh0KT9uLnRleHQ6W24udGV4dF0sbClyZXR1cm4hMX1yZXR1cm4hMH0sZS5wcm90b3R5cGUuY2FsbEVuZFBhZ2VIb29rcz1mdW5jdGlvbihlLHQpe2UuYXBwbHlTdHlsZXMoZS51c2VyU3R5bGVzKTtmb3IodmFyIG49MCxyPXRoaXMuaG9va3MuZGlkRHJhd1BhZ2U7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aShuZXcgVHYoZSx0aGlzLHQpKX19LGUucHJvdG90eXBlLmNhbGxXaWxsRHJhd1BhZ2VIb29rcz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9dGhpcy5ob29rcy53aWxsRHJhd1BhZ2U7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aShuZXcgVHYoZSx0aGlzLHQpKX19LGUucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKGUpe2lmKHR5cGVvZiB0aGlzLnNldHRpbmdzLnRhYmxlV2lkdGg9PWBudW1iZXJgKXJldHVybiB0aGlzLnNldHRpbmdzLnRhYmxlV2lkdGg7aWYodGhpcy5zZXR0aW5ncy50YWJsZVdpZHRoPT09YHdyYXBgKXJldHVybiB0aGlzLmNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC53cmFwcGVkV2lkdGh9LDApO3ZhciB0PXRoaXMuc2V0dGluZ3MubWFyZ2luO3JldHVybiBlLXQubGVmdC10LnJpZ2h0fSxlfSgpLE92PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLGkpe2k9PT12b2lkIDAmJihpPSExKSx0aGlzLmhlaWdodD0wLHRoaXMucmF3PWUsZSBpbnN0YW5jZW9mIHd2JiYodGhpcy5yYXc9ZS5fZWxlbWVudCx0aGlzLmVsZW1lbnQ9ZS5fZWxlbWVudCksdGhpcy5pbmRleD10LHRoaXMuc2VjdGlvbj1uLHRoaXMuY2VsbHM9cix0aGlzLnNwYW5zTXVsdGlwbGVQYWdlcz1pfXJldHVybiBlLnByb3RvdHlwZS5nZXRNYXhDZWxsSGVpZ2h0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIE1hdGgubWF4KGUsdC5jZWxsc1tuLmluZGV4XT8uaGVpZ2h0fHwwKX0sMCl9LGUucHJvdG90eXBlLmhhc1Jvd1NwYW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7dmFyIG49dC5jZWxsc1tlLmluZGV4XTtyZXR1cm4gbj9uLnJvd1NwYW4+MTohMX0pLmxlbmd0aD4wfSxlLnByb3RvdHlwZS5jYW5FbnRpcmVSb3dGaXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRNYXhDZWxsSGVpZ2h0KHQpPD1lfSxlLnByb3RvdHlwZS5nZXRNaW5pbXVtUm93SGVpZ2h0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgaT1uLmNlbGxzW3IuaW5kZXhdO2lmKCFpKXJldHVybiAwO3ZhciBhPXQuZ2V0TGluZUhlaWdodChpLnN0eWxlcy5mb250U2l6ZSksbz1pLnBhZGRpbmcoYHZlcnRpY2FsYCkrYTtyZXR1cm4gbz5lP286ZX0sMCl9LGV9KCksa3Y9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmNvbnRlbnRIZWlnaHQ9MCx0aGlzLmNvbnRlbnRXaWR0aD0wLHRoaXMud3JhcHBlZFdpZHRoPTAsdGhpcy5taW5SZWFkYWJsZVdpZHRoPTAsdGhpcy5taW5XaWR0aD0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMueD0wLHRoaXMueT0wLHRoaXMuc3R5bGVzPXQsdGhpcy5zZWN0aW9uPW4sdGhpcy5yYXc9ZTt2YXIgcj1lO3R5cGVvZiBlPT1gb2JqZWN0YCYmZSYmIUFycmF5LmlzQXJyYXkoZSk/KHRoaXMucm93U3Bhbj1lLnJvd1NwYW58fDEsdGhpcy5jb2xTcGFuPWUuY29sU3Bhbnx8MSxyPWUuY29udGVudD8/ZSxlLl9lbGVtZW50JiYodGhpcy5yYXc9ZS5fZWxlbWVudCkpOih0aGlzLnJvd1NwYW49MSx0aGlzLmNvbFNwYW49MSk7dmFyIGk9cj09bnVsbD9gYDpgYCtyLGE9L1xyXG58XHJ8XG4vZzt0aGlzLnRleHQ9aS5zcGxpdChhKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VGV4dFBvcz1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuc3R5bGVzLnZhbGlnbj09PWB0b3BgKWU9dGhpcy55K3RoaXMucGFkZGluZyhgdG9wYCk7ZWxzZSBpZih0aGlzLnN0eWxlcy52YWxpZ249PT1gYm90dG9tYCllPXRoaXMueSt0aGlzLmhlaWdodC10aGlzLnBhZGRpbmcoYGJvdHRvbWApO2Vsc2V7dmFyIHQ9dGhpcy5oZWlnaHQtdGhpcy5wYWRkaW5nKGB2ZXJ0aWNhbGApO2U9dGhpcy55K3QvMit0aGlzLnBhZGRpbmcoYHRvcGApfXZhciBuO2lmKHRoaXMuc3R5bGVzLmhhbGlnbj09PWByaWdodGApbj10aGlzLngrdGhpcy53aWR0aC10aGlzLnBhZGRpbmcoYHJpZ2h0YCk7ZWxzZSBpZih0aGlzLnN0eWxlcy5oYWxpZ249PT1gY2VudGVyYCl7dmFyIHI9dGhpcy53aWR0aC10aGlzLnBhZGRpbmcoYGhvcml6b250YWxgKTtuPXRoaXMueCtyLzIrdGhpcy5wYWRkaW5nKGBsZWZ0YCl9ZWxzZSBuPXRoaXMueCt0aGlzLnBhZGRpbmcoYGxlZnRgKTtyZXR1cm57eDpuLHk6ZX19LGUucHJvdG90eXBlLmdldENvbnRlbnRIZWlnaHQ9ZnVuY3Rpb24oZSx0KXt0PT09dm9pZCAwJiYodD0xLjE1KTt2YXIgbj0oQXJyYXkuaXNBcnJheSh0aGlzLnRleHQpP3RoaXMudGV4dC5sZW5ndGg6MSkqKHRoaXMuc3R5bGVzLmZvbnRTaXplL2UqdCkrdGhpcy5wYWRkaW5nKGB2ZXJ0aWNhbGApO3JldHVybiBNYXRoLm1heChuLHRoaXMuc3R5bGVzLm1pbkNlbGxIZWlnaHQpfSxlLnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXhfKHRoaXMuc3R5bGVzLmNlbGxQYWRkaW5nLDApO3JldHVybiBlPT09YHZlcnRpY2FsYD90LnRvcCt0LmJvdHRvbTplPT09YGhvcml6b250YWxgP3QubGVmdCt0LnJpZ2h0OnRbZV19LGV9KCksQXY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLndyYXBwZWRXaWR0aD0wLHRoaXMubWluUmVhZGFibGVXaWR0aD0wLHRoaXMubWluV2lkdGg9MCx0aGlzLndpZHRoPTAsdGhpcy5kYXRhS2V5PWUsdGhpcy5yYXc9dCx0aGlzLmluZGV4PW59cmV0dXJuIGUucHJvdG90eXBlLmdldE1heEN1c3RvbUNlbGxXaWR0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTAscj1lLmFsbFJvd3MoKTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXS5jZWxsc1t0aGlzLmluZGV4XTtpJiZ0eXBlb2YgaS5zdHlsZXMuY2VsbFdpZHRoPT1gbnVtYmVyYCYmKHQ9TWF0aC5tYXgodCxpLnN0eWxlcy5jZWxsV2lkdGgpKX1yZXR1cm4gdH0sZX0oKTt0cnl7dHlwZW9mIHdpbmRvdzxgdWAmJndpbmRvdyYmKGp2PXdpbmRvdyxNdj1qdi5qc1BERnx8anYuanNwZGY/LmpzUERGLE12JiZ5dihNdikpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCBhcHBseSBhdXRvVGFibGUgcGx1Z2luYCxlKX19KSksUHY9Yyh7Z2VuZXJhclBERjooKT0+cXZ9KSxGdixJdixMdixSdix6dixCdixWdixIdixVdixXdixHdixLdixxdixKdj1vKCgoKT0+e3BfKCksTnYoKSxGdj1bMTk2LDE4LDQ4XSxJdj0yMTAsTHY9MTQsUnY9ZT0+KGV8fGBgKS5zcGxpdChgLmApWzBdLnRyaW0oKSx6dj1lPT4oZXx8W10pLm1hcChSdikuZmlsdGVyKEJvb2xlYW4pLmpvaW4oYCxgKSxCdj0oKT0+e2xldCBlPW5ldyBEYXRlLHQ9W2BlbmVyb2AsYGZlYnJlcm9gLGBtYXJ6b2AsYGFicmlsYCxgbWF5b2AsYGp1bmlvYCxganVsaW9gLGBhZ29zdG9gLGBzZXB0aWVtYnJlYCxgb2N0dWJyZWAsYG5vdmllbWJyZWAsYGRpY2llbWJyZWBdLG49U3RyaW5nKGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMixgMGApLHI9U3RyaW5nKGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLGAwYCksaT1TdHJpbmcoZS5nZXRTZWNvbmRzKCkpLnBhZFN0YXJ0KDIsYDBgKTtyZXR1cm5gJHtlLmdldERhdGUoKX0gZGUgJHt0W2UuZ2V0TW9udGgoKV19IGRlICR7ZS5nZXRGdWxsWWVhcigpfSwgJHtufToke3J9OiR7aX1gfSxWdj0oZSx0LG4pPT57ZS5zZXRGaWxsQ29sb3IoLi4uRnYpLGUucmVjdChMdixuLEl2LUx2KjIsOSxgRmApLGUuc2V0VGV4dENvbG9yKDI1NSwyNTUsMjU1KSxlLnNldEZvbnRTaXplKDEwKSxlLnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKTtsZXQgcj1lLnNwbGl0VGV4dFRvU2l6ZSh0LEl2LUx2KjItOCk7aWYoci5sZW5ndGg+MSl7ZS5zZXRGaWxsQ29sb3IoMjU1LDI1NSwyNTUpLGUucmVjdChMdixuLEl2LUx2KjIsOSxgRmApO2xldCB0PTUrci5sZW5ndGgqNTtyZXR1cm4gZS5zZXRGaWxsQ29sb3IoLi4uRnYpLGUucmVjdChMdixuLEl2LUx2KjIsdCxgRmApLGUuc2V0VGV4dENvbG9yKDI1NSwyNTUsMjU1KSxlLnRleHQocixJdi8yLG4rNCsodC00KS8yLShyLmxlbmd0aC0xKSoyLjUse2FsaWduOmBjZW50ZXJgLGJhc2VsaW5lOmBtaWRkbGVgfSksZS5zZXRUZXh0Q29sb3IoMCwwLDApLG4rdCs0fXJldHVybiBlLnRleHQodCxJdi8yLG4rNS41LHthbGlnbjpgY2VudGVyYH0pLGUuc2V0VGV4dENvbG9yKDAsMCwwKSxuKzEzfSxIdj0oZSx0LG49MzApPT50K24+Mjg1PyhlLmFkZFBhZ2UoKSwyMCk6dCxVdj0oZSx0LG4scik9PihidihlLHtzdGFydFk6cixoZWFkOlt0XSxib2R5OltuXSx0aGVtZTpgZ3JpZGAsaGVhZFN0eWxlczp7ZmlsbENvbG9yOlsyNTUsMjU1LDI1NV0sdGV4dENvbG9yOjAsZm9udFN0eWxlOmBib2xkYCxsaW5lQ29sb3I6MCxsaW5lV2lkdGg6LjF9LGJvZHlTdHlsZXM6e3RleHRDb2xvcjowLGxpbmVDb2xvcjowLGxpbmVXaWR0aDouMX0sc3R5bGVzOntmb250U2l6ZTo4LGNlbGxQYWRkaW5nOjJ9LG1hcmdpbjp7bGVmdDpMdixyaWdodDpMdn19KSxlLmxhc3RBdXRvVGFibGUuZmluYWxZKzQpLFd2PShlLHQsbixyKT0+bi5sZW5ndGg/KGJ2KGUse3N0YXJ0WTpyLGhlYWQ6W3RdLGJvZHk6bix0aGVtZTpgZ3JpZGAsaGVhZFN0eWxlczp7ZmlsbENvbG9yOlsyNTUsMjU1LDI1NV0sdGV4dENvbG9yOjAsZm9udFN0eWxlOmBib2xkYCxsaW5lQ29sb3I6MCxsaW5lV2lkdGg6LjF9LGJvZHlTdHlsZXM6e3RleHRDb2xvcjowLGxpbmVDb2xvcjowLGxpbmVXaWR0aDouMX0sc3R5bGVzOntmb250U2l6ZTo4LGNlbGxQYWRkaW5nOjJ9LG1hcmdpbjp7bGVmdDpMdixyaWdodDpMdn19KSxlLmxhc3RBdXRvVGFibGUuZmluYWxZKzQpOnIsR3Y9KGUsdCxuLHIpPT57ZS5zZXRGb250U2l6ZSg5KSxlLnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSxlLnRleHQodCxMdixyKTtsZXQgaT1lLmdldFRleHRXaWR0aCh0KTtyZXR1cm4gZS5zZXRGb250KGBoZWx2ZXRpY2FgLGBub3JtYWxgKSxlLnRleHQobnx8YGAsTHYraSsyLHIpLHIrNn0sS3Y9KGUsdCxuLHIpPT57bGV0IGk9MjA7cnx8KGUuYWRkUGFnZSgpLGk9MjApLGk9VnYoZSxgMDMuMS4gREFUT1MgUEVSU09OQUxFUywgU09MSUNJVFVELCBERUNMQVJBQ0lPTkVTLCBTT01FVElNSUVOVE8gQSBBUkJJVFJBSkUgWSBUUkFUQU1JRU5UTyBERSBEQVRPUyBERSBDQVLDgUNURVIgUEVSU09OQUxgLGkpLGk9VXYoZSxbYE5vbWJyZWAsYEFwZWxsaWRvc2AsYE5JRmAsYEZlY2hhIGRlIG5hY2ltaWVudG9gXSxbdC5ub21icmUsdC5hcGVsbGlkb3MsdC5uaWYsdC5mZWNoYV9uYWNdLGkpLGk9VXYoZSxbYEPDs2RpZ28gcG9zdGFsYCxgVGVsw6lmb25vYCxgVGVsw6lmb25vIG3Ds3ZpbGAsYENvcnJlbyBlbGVjdHLDs25pY29gXSxbYGAsYGAsdC5tb3ZpbCx0LmVtYWlsXSxpKSxpPUh2KGUsaSwzMCksaT1WdihlLGAwMy4yLiBDVVJTT1MgUEFSQSBMT1MgUVVFIERFU0VBIEhPTU9MT0dBUlNFOmAsaSksZS5zZXRGb250U2l6ZSg5KSxlLnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSxlLnRleHQoYENVUlNPUyBTRUxFQ0NJT05BRE9TOmAsTHYsaSksaSs9NSxlLnNldEZvbnQoYGhlbHZldGljYWAsYG5vcm1hbGApO2xldCBhPSh0LmN1cnNvc3x8W10pLmpvaW4oYCwgYCksbz1lLnNwbGl0VGV4dFRvU2l6ZShhfHxg4oCUYCxJdi1MdioyKTtlLnRleHQobyxMdixpKSxpKz1vLmxlbmd0aCo0KzQsaT1IdihlLGksNDApLGk9VnYoZSxgMDMuMy4gREFUT1MgQUNBRMOJTUlDT1NgLGkpLGUuc2V0Rm9udFNpemUoOSksZS5zZXRGb250KGBoZWx2ZXRpY2FgLGBib2xkYCksZS50ZXh0KGBBLiBUSVRVTEFDScOTTiBIQUJJTElUQU5URSBSRUxBQ0lPTkFEQSBDT04gTEFTIE1BVEVSSUFTIEEgSU1QQVJUSVI6YCxMdixpKSxpKz00O2xldCBzPSh0Lm1lcml0b3M/LmhhYmlsaXRhbnRlfHxbXSkuZmlsdGVyKGU9PmUudGl0dWxvfHxlLmNlbnRyb3x8ZS5hbmlvfHxlLmN1cnNvcyYmZS5jdXJzb3MubGVuZ3RoKS5tYXAoZT0+W2UudGl0dWxvfHxgYCxlLmNlbnRyb3x8YGAsZS5hbmlvfHxgYCx6dihlLmN1cnNvcyksYGBdKTtzLmxlbmd0aD9pPVd2KGUsW2BUaXR1bGFjacOzbmAsYFVuaXZlcnNpZGFkIC8gQ2VudHJvYCxgQcOxb2AsYEPDs2RpZ29gLGBDb3BpYSBkZWwgdMOtdHVsb2BdLHMsaSk6aSs9NCxbe2tleTpgb3Ryb3NfdGl0dWxvc2AsbGFiZWw6YEIuIE9UUk9TIFTDjVRVTE9TIFVOSVZFUlNJVEFSSU9TIChMSUNFTkNJQVRVUkFTIE8gR1JBRE9TKWB9LHtrZXk6YG1hc18zMDBgLGxhYmVsOmBDLiBDVVJTT1MgLyBNw4FTVEVSIFkgT1RSQVMgVElUVUxBQ0lPTkVTIChNw4FTIERFIDMwMCBILik6YH0se2tleTpgcjIwMV8zMDBgLGxhYmVsOmBELiBDVVJTT1MvIE3DgVNURVIgWSBPVFJBUyBUSVRVTEFDSU9ORVMgKERFIDIwMSBBIDMwMCBIKTpgfSx7a2V5OmByMTAxXzIwMGAsbGFiZWw6YEUuIENVUlNPUyBZIE9UUkFTIFRJVFVMQUNJT05FUyAoREUgMTAxIEEgMjAwIEgpOmB9LHtrZXk6YHIzMF8xMDBgLGxhYmVsOmBGLiBDVVJTT1MgWSBPVFJBUyBUSVRVTEFDSU9ORVMgKERFIDMwIEEgMTAwIEgpOmB9XS5mb3JFYWNoKG49PntpPUh2KGUsaSwxNSk7bGV0IHI9dC5tZXJpdG9zPy5bbi5rZXldLGE9cj8uYWN0aXZvPT09YFPDjWA7ZS5zZXRGb250U2l6ZSg5KSxlLnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSxlLnRleHQobi5sYWJlbCxMdixpKSxhJiYoZS5zZXRGb250KGBoZWx2ZXRpY2FgLGBub3JtYWxgKSxlLnRleHQoYCBTaWAsTHYrZS5nZXRUZXh0V2lkdGgobi5sYWJlbCksaSkpLGkrPTYsYSYmcj8uaXRlbXM/Lmxlbmd0aCYmKGk9V3YoZSxbYFRpdHVsYWNpw7NuYCxgQ2VudHJvYCxgSG9yYXNgLGBBw7FvYCxgQ29waWFgXSxyLml0ZW1zLm1hcChlPT5bZS50aXR1bG98fGBgLGUuY2VudHJvfHxgYCxlLmhvcmFzfHxgYCxlLmFuaW98fGBgLGBgXSksaSkpfSksaT1IdihlLGksNDApLGk9VnYoZSxgMDMuNC4gRVhQRVJJRU5DSUEgRE9DRU5URWAsaSk7bGV0IGM9KHQuZXhwZXJpZW5jaWF8fFtdKS5maWx0ZXIoZT0+ZS5pbnN0aXR1Y2lvbnx8ZS5tYXRlcmlhfHxlLmRlc2RlfHxlLmhhc3RhfHxlLmhvcmFzKS5tYXAoZT0+W2UuaW5zdGl0dWNpb258fGBgLGUubWF0ZXJpYXx8YGAsZS5kZXNkZXx8YGAsZS5oYXN0YXx8YGAsZS5ob3Jhc3x8YGAsYGBdKTtjLmxlbmd0aD9pPVd2KGUsW2BJbnN0aXR1Y2nDs25gLGBNYXRlcmlhIGltcGFydGlkYWAsYERlc2RlYCxgSGFzdGFgLGBIb3Jhc2AsYENvcGlhIGRlbCBjZXJ0aWZpY2Fkb2BdLGMsaSk6KGUuc2V0Rm9udFNpemUoOSksZS5zZXRGb250KGBoZWx2ZXRpY2FgLGBpdGFsaWNgKSxlLnRleHQoYFNpbiBleHBlcmllbmNpYSBkb2NlbnRlIHJlZ2lzdHJhZGEuYCxMdixpKSxpKz02KSxpPUh2KGUsaSwyNSksaT1WdihlLGAwMy41LiBQUk9QVUVTVEEgREUgQUNDSU9ORVMgR1JVUEFMRVNgLGkpLGUuc2V0Rm9udFNpemUoOSksZS5zZXRGb250KGBoZWx2ZXRpY2FgLGBib2xkYCksZS50ZXh0KGBET0NVTUVOVEFDScOTTjpgLEx2LGkpLGkrPTYsZS5zZXRGb250KGBoZWx2ZXRpY2FgLGBib2xkYCksZS50ZXh0KGBDw7NtbyBkZXNlYSBpbXBhcnRpciBlbCBjdXJzbzpgLEx2LGkpLGUuc2V0Rm9udChgaGVsdmV0aWNhYCxgbm9ybWFsYCksZS50ZXh0KGAgYCsodC5wcm9wdWVzdGE/Lm1vZGFsaWRhZHx8YEluZGl2aWR1YWxgKSxMditlLmdldFRleHRXaWR0aChgQ8OzbW8gZGVzZWEgaW1wYXJ0aXIgZWwgY3Vyc286YCksaSksaSs9NixlLnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKTtsZXQgbD1lLnNwbGl0VGV4dFRvU2l6ZShgSW5mb3JtYWNpw7NuIGRlIGxvcyBkb2NlbnRlcyBxdWUgc2UgcHJlc2VudGFyYW4gZGUgZm9ybWEgY29uanVudGEgZW4gY2FkYSB1bmEgZGUgbGFzIHByb3Bvc2ljaW9uZXMgaW5kaXZpZHVhbG1lbnRlIHByZXNlbnRhZGFzLmAsSXYtTHYqMik7cmV0dXJuIGUudGV4dChsLEx2LGkpLGkrPWwubGVuZ3RoKjQrNCxpPUh2KGUsaSwyMCksaT1WdihlLGAwMy42LiBJTkZPUk1BQ0nDk04gQURJQ0lPTkFMYCxpKSxlLnNldEZvbnRTaXplKDkpLGUuc2V0Rm9udChgaGVsdmV0aWNhYCxgYm9sZGApLGUudGV4dChgQWNlcHRhIHJlY2liaXIgZGljaGFzIGNvbXVuaWNhY2lvbmVzOmAsTHYsaSksaSs9NixpfSxxdj0oZSx0KT0+e2xldCBuPW5ldyBaKHt1bml0OmBtbWAsZm9ybWF0OmBhNGB9KTtuLnNldEZvbnRTaXplKDE2KSxuLnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSxuLnNldFRleHRDb2xvciguLi5Gdiksbi50ZXh0KGBTT0xJQ0lUVUQgREUgSE9NT0xPR0FDScOTTmAsSXYvMiwyNSx7YWxpZ246YGNlbnRlcmB9KSxuLnNldFRleHRDb2xvcigwLDAsMCksbi5zZXRGb250U2l6ZSgxMCksbi5zZXRGb250KGBoZWx2ZXRpY2FgLGBpdGFsaWNgKSxuLnRleHQoYEPDoW1hcmEgT2ZpY2lhbCBkZSBDb21lcmNpbywgSW5kdXN0cmlhIHkgU2VydmljaW9zIGRlIFRvbGVkb2AsSXYvMiwzMix7YWxpZ246YGNlbnRlcmB9KSxuLnRleHQoYEV4cGVkaWVudGUgQU1ILzAxLzIwMjZgLEl2LzIsMzgse2FsaWduOmBjZW50ZXJgfSk7bGV0IHI9NDg7cj1WdihuLGAwMS4gREFUT1MgREVMIFNPTElDSVRBTlRFLCBTT0xJQ0lUVUQsIERFQ0xBUkFDSU9ORVMgWSBUUkFUQU1JRU5UTyBERSBEQVRPUyBERSBDQVLDgUNURVIgUEVSU09OQUxgLHIpLHI9VXYobixbYFJhesOzbiBTb2NpYWxgLGBEaXJlY2Npw7NuYCxgQ0lGIEVudGlkYWRgLGBNdW5pY2lwaW9gLGBQcm92aW5jaWFgXSxbZS5yYXpvbl9zb2NpYWwsZS5kaXJlY2Npb24sZS5jaWYsZS5tdW5pY2lwaW8sZS5wcm92aW5jaWFdLHIpLHI9VXYobixbYEPDs2RpZ28gcG9zdGFsYCxgVGVsw6lmb25vYCxgVGVsw6lmb25vIG3Ds3ZpbGAsYENvcnJlbyBlbGVjdHLDs25pY29gXSxbZS5jcCxlLnRlbGVmb25vLGBgLGUuZW1haWxdLHIpLHI9VXYobixbYE5vbWJyZSBkZWwgUmVwcmVzZW50YW50ZSBMZWdhbGAsYEFwZWxsaWRvcyBkZWwgUmVwcmVzZW50YW50ZSBMZWdhbGAsYE5JRmAsYENhcmdvYF0sW2UucmVwX25vbWJyZSxlLnJlcF9hcGVsbGlkb3MsZS5yZXBfbmlmLGUucmVwX2NhcmdvXSxyKSxyPVV2KG4sW2BOb21icmUgZGUgbGEgcGVyc29uYSBkZSBjb250YWN0b2AsYEFwZWxsaWRvcyBkZSBsYSBwZXJzb25hIGRlIGNvbnRhY3RvYCxgVGVsw6lmb25vIGRlIGxhIHBlcnNvbmEgZGUgY29udGFjdG9gXSxbZS5jb250X25vbWJyZSxgYCxlLmNvbnRfdGVsZWZvbm9dLHIpLHI9VXYobixbYENvcnJlbyBlbGVjdHLDs25pY28gZGUgbGEgcGVyc29uYSBkZSBjb250YWN0b2AsYENhcmdvIGRlIGxhIHBlcnNvbmEgZGUgY29udGFjdG9gXSxbZS5jb250X2VtYWlsLGUuY29udF9jYXJnb10scikscj1IdihuLHIsMzApLG4uc2V0Rm9udFNpemUoOSksbi5zZXRGb250KGBoZWx2ZXRpY2FgLGBib2xkYCksbi50ZXh0KGBET0NVTUVOVEFDScOTTiBBREpVTlRBREFgLEx2LHIpLHIrPTUsbi5zZXRGb250KGBoZWx2ZXRpY2FgLGBpdGFsaWNgKSxuLnRleHQoYChMb3MgYXJjaGl2b3Mgc2UgYWRqdW50YW4gcG9yIHNlcGFyYWRvIGVuIGxhIHNvbGljaXR1ZClgLEx2LHIpLHIrPTgscj1HdihuLGBTT0xJQ0lUQSBRVUUgU0UgVEVOR0EgUE9SIFBSRVNFTlRBREEgRElDSEEgRE9DVU1FTlRBQ0nDk046YCxlLmFjZXB0YV9zb2xpY2l0dWQ/YFNpYDpgTm9gLHIpLHI9R3YobixgREVDTEFSQSBCQUpPIFNVIFJFU1BPTlNBQklMSURBRCBDQURBIFVOQSBERSBMQVMgQ09ORElDSU9ORVMgRVNUQUJMRUNJREFTOmAsZS5hY2VwdGFfZGVjbGFyYWNpb24/YFNpYDpgTm9gLHIpLHI9R3YobixgQUNFUFRBIEVMIFRSQVRBTUlFTlRPIERFIERBVE9TIERFIENBUsOBQ1RFUiBQRVJTT05BTDpgLGUuYWNlcHRhX3JncGQ/YFNpYDpgTm9gLHIpLG4uYWRkUGFnZSgpLHI9MjAscj1WdihuLGAwMi4gSU5GT1JNQUNJw5NOIEFESUNJT05BTGAsciksbi5zZXRGb250U2l6ZSg5KSxuLnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSxuLnRleHQoYENMQVVTVUxBIElORk9STUFUSVZBIEEgQ0FORElEQVRPUyBET0NFTlRFU2AsTHYscikscis9NixuLnNldEZvbnQoYGhlbHZldGljYWAsYG5vcm1hbGApLG4udGV4dChlLmFjZXB0YV9jb211bmljYWNpb25lcz9gU2lgOmBOb2AsTHYscikscis9MTAscj1WdihuLGAwMy4gTlVFVk8gRE9DRU5URSBBIEhPTU9MT0dBUmAsciksdC5mb3JFYWNoKChlLHQpPT57S3YobixlLHQsdD09PTApfSk7bGV0IGk9bi5pbnRlcm5hbC5wYWdlcy5sZW5ndGgtMTtuLnNldFBhZ2UoaSksbi5zZXRGb250U2l6ZSg4KSxuLnNldEZvbnQoYGhlbHZldGljYWAsYGl0YWxpY2ApLG4uc2V0VGV4dENvbG9yKDgwLDgwLDgwKSxuLnRleHQoYEZlY2hhIGRlIGdlbmVyYWNpw7NuOiAke0J2KCl9YCxJdi1MdiwyODUse2FsaWduOmByaWdodGB9KTtsZXQgYT0oZS5yYXpvbl9zb2NpYWx8fGBzb2xpY2l0dWRgKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZyxgX2ApLnNsaWNlKDAsNDApfHxgc29saWNpdHVkYDtuLnNhdmUoYCR7YX1faG9tb2xvZ2FjaW9uLnBkZmApfX0pKSwkPXcoKTtrKCk7dmFyIFl2PSh7b3B0aW9uczplLHNlbGVjdGVkOnQsb25DaGFuZ2U6bixwbGFjZWhvbGRlcjpyfSk9PntsZXRbaSxhXT0oMCx5LnVzZVN0YXRlKSghMSksW28sc109KDAseS51c2VTdGF0ZSkoYGApLGM9KDAseS51c2VSZWYpKG51bGwpOygwLHkudXNlRWZmZWN0KSgoKT0+e2lmKCFpKXJldHVybjtsZXQgZT1lPT57Yy5jdXJyZW50JiYhYy5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KSYmKGEoITEpLHMoYGApKX0sdD1lPT57ZS5rZXk9PT1gRXNjYXBlYCYmKGEoITEpLHMoYGApKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYG1vdXNlZG93bmAsZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihga2V5ZG93bmAsdCksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBtb3VzZWRvd25gLGUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGtleWRvd25gLHQpfX0sW2ldKTtsZXQgbD1lLmZpbHRlcihlPT5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoby50b0xvd2VyQ2FzZSgpKSYmIXQuaW5jbHVkZXMoZSkpLHU9ZT0+e24odC5pbmNsdWRlcyhlKT90LmZpbHRlcih0PT50IT09ZSk6Wy4uLnQsZV0pfTtyZXR1cm4oMCwkLmpzeHMpKGBkaXZgLHtyZWY6YyxjbGFzc05hbWU6YHJlbGF0aXZlYCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBtaW4taC1bNDJweF0gcC0xIGJvcmRlciBib3JkZXItYmxhY2sgcm91bmRlZC1tZCBiZy13aGl0ZSBmbGV4IGZsZXgtd3JhcCBnYXAtMSBjdXJzb3ItdGV4dGAsb25DbGljazooKT0+YSghMCksY2hpbGRyZW46W3QubGVuZ3RoPT09MCYmIW8mJigwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1ncmF5LTQwMCBwLTEgdGV4dC1zbWAsY2hpbGRyZW46cn0pLHQubWFwKGU9PigwLCQuanN4cykoYHNwYW5gLHtjbGFzc05hbWU6YGJnLXJlZC01MCB0ZXh0LWNhbWFyYS1yZWQgdGV4dC1bMTBweF0gcHgtMiBweS0xIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBmb250LWJvbGRgLGNoaWxkcmVuOltlLCgwLCQuanN4KShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOnQ9Pnt0LnN0b3BQcm9wYWdhdGlvbigpLHUoZSl9LGNsYXNzTmFtZTpgaG92ZXI6dGV4dC1yZWQtNzAwIGZvbnQtYmxhY2tgLGNoaWxkcmVuOmDDl2B9KV19LGUpKSwoMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOmBmbGV4LTEgb3V0bGluZS1ub25lIHRleHQtc20gcC0xIG1pbi13LVsxMjBweF1gLHZhbHVlOm8sb25DaGFuZ2U6ZT0+cyhlLnRhcmdldC52YWx1ZSksb25Gb2N1czooKT0+YSghMCl9KV19KSxpJiYoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGFic29sdXRlIHotNTAgdy1mdWxsIG10LTEgYmctd2hpdGUgYm9yZGVyIHJvdW5kZWQtbWQgc2hhZG93LXhsIG1heC1oLTYwIG92ZXJmbG93LXktYXV0b2AsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgcC0yIGJvcmRlci1iIHN0aWNreSB0b3AtMCBiZy1ncmF5LTUwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlcmAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlYCxjaGlsZHJlbjpgT3BjaW9uZXMgZGlzcG9uaWJsZXNgfSksKDAsJC5qc3gpKGBidXR0b25gLHt0eXBlOmBidXR0b25gLG9uQ2xpY2s6KCk9PmEoITEpLGNsYXNzTmFtZTpgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwYCxjaGlsZHJlbjpgw5dgfSldfSksbC5sZW5ndGg9PT0wPygwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmBwLTMgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGl0YWxpY2AsY2hpbGRyZW46YE5vIHNlIGVuY29udHJhcm9uIHJlc3VsdGFkb3NgfSk6bC5tYXAoZT0+KDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHAtMiB0ZXh0LXhzIGhvdmVyOmJnLXJlZC01MCBjdXJzb3ItcG9pbnRlciBib3JkZXItYiBsYXN0OmJvcmRlci0wYCxvbkNsaWNrOigpPT57dShlKSxzKGBgKX0sY2hpbGRyZW46ZX0sZSkpXX0pXX0pfSxYdj0oe3RpdGxlOmV9KT0+KDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSBweC00IHB5LTMgbXQtOCBtYi00IHctZnVsbCBmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtc20gdHJhY2tpbmctd2lkZWAsY2hpbGRyZW46ZX0pLFp2PSh7bGFiZWw6ZSxjaGlsZHJlbjp0LHJlcXVpcmVkOm59KT0+KDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBtYi00YCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGJsb2NrIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNjAwIHVwcGVyY2FzZSBtYi0xYCxjaGlsZHJlbjpbZSxgIGAsbiYmKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmB0ZXh0LXJlZC01MDBgLGNoaWxkcmVuOmAqYH0pXX0pLHRdfSksUXY9KHtsYWJlbDplLHJlcXVpcmVkOnQsbXVsdGlwbGU6bj0hMSxvbkNoYW5nZTpyfSk9PigwLCQuanN4KShadix7bGFiZWw6ZSxyZXF1aXJlZDp0LGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHt0eXBlOmBmaWxlYCxtdWx0aXBsZTpuLG9uQ2hhbmdlOnIsY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGZpbGU6bXItNCBmaWxlOnB5LTIgZmlsZTpweC00IGZpbGU6cm91bmRlZC1tZCBmaWxlOmJvcmRlci0wIGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtc2VtaWJvbGQgZmlsZTpiZy1yZWQtNTAgZmlsZTp0ZXh0LXJlZC03MDAgaG92ZXI6ZmlsZTpiZy1yZWQtMTAwIGJvcmRlciBib3JkZXItYmxhY2sgcm91bmRlZC1tZCBwLTFgfSl9KTtmdW5jdGlvbiAkdigpe3JldHVybntpZDpEYXRlLm5vdygpK01hdGgucmFuZG9tKCksbm9tYnJlOmBgLGFwZWxsaWRvczpgYCxuaWY6YGAsZmVjaGFfbmFjOmBgLG1vdmlsOmBgLGVtYWlsOmBgLGN1cnNvczpbXSxtZXJpdG9zOntoYWJpbGl0YW50ZTpbe3RpdHVsbzpgYCxjZW50cm86YGAsYW5pbzpgYCxjdXJzb3M6W119XSxvdHJvc190aXR1bG9zOnthY3Rpdm86YE5PYCxpdGVtczpbXX0sbWFzXzMwMDp7YWN0aXZvOmBOT2AsaXRlbXM6W119LHIyMDFfMzAwOnthY3Rpdm86YE5PYCxpdGVtczpbXX0scjEwMV8yMDA6e2FjdGl2bzpgTk9gLGl0ZW1zOltdfSxyMzBfMTAwOnthY3Rpdm86YE5PYCxpdGVtczpbXX19LGV4cGVyaWVuY2lhOlt7aW5zdGl0dWNpb246YGAsbWF0ZXJpYTpgYCxkZXNkZTpgYCxoYXN0YTpgYCxob3JhczpgYH1dLHByb3B1ZXN0YTp7bW9kYWxpZGFkOmBJbmRpdmlkdWFsYH19fXZhciBleT17cmF6b25fc29jaWFsOmBgLGNpZjpgYCxkaXJlY2Npb246YGAsbXVuaWNpcGlvOmBgLHByb3ZpbmNpYTpgYCxjcDpgYCx0ZWxlZm9ubzpgYCxlbWFpbDpgYCxyZXBfbm9tYnJlOmBgLHJlcF9hcGVsbGlkb3M6YGAscmVwX25pZjpgYCxyZXBfY2FyZ286YGAsY29udF9ub21icmU6YGAsY29udF90ZWxlZm9ubzpgYCxjb250X2VtYWlsOmBgLGNvbnRfY2FyZ286YGAsYWNlcHRhX3NvbGljaXR1ZDohMSxhY2VwdGFfZGVjbGFyYWNpb246ITEsYWNlcHRhX3JncGQ6ITEsYWNlcHRhX2NvbXVuaWNhY2lvbmVzOiExfTtmdW5jdGlvbiB0eSgpe2xldFtlLHRdPSgwLHkudXNlU3RhdGUpKGV5KSxbbixyXT0oMCx5LnVzZVN0YXRlKShbJHYoKV0pLFtpLGFdPSgwLHkudXNlU3RhdGUpKCExKSxbbyxzXT0oMCx5LnVzZVN0YXRlKShudWxsKSxbYyxsXT0oMCx5LnVzZVN0YXRlKSghMSksW3UsZF09KDAseS51c2VTdGF0ZSkoITEpLFtmLHBdPSgwLHkudXNlU3RhdGUpKHtjYXJnYW5kbzohMCxndWFyZGFuZG86ITEsdXN1YXJpb0xvZ3VlYWRvOiExLHVsdGltYUFjdHVhbGl6YWNpb246bnVsbCxub25jZTpudWxsLGVycm9yOm51bGx9KSxtPSgwLHkudXNlUmVmKSghMSk7KDAseS51c2VFZmZlY3QpKCgpPT57bGV0IGU9ITE7cmV0dXJuKGFzeW5jKCk9Pnt0cnl7bGV0IG49KGF3YWl0KGF3YWl0IGZldGNoKFMoYC93cC1hZG1pbi9hZG1pbi1hamF4LnBocD9hY3Rpb249cmVzdC1ub25jZWApLHtjcmVkZW50aWFsczpgaW5jbHVkZWB9KSkudGV4dCgpKS50cmltKCk7aWYobiYmbi5sZW5ndGg+NSYmbi5sZW5ndGg8MzApe2xldCBpPWF3YWl0IGZldGNoKFMoYC93cC1qc29uL2NhbWFyYS92MS9ib3JyYWRvcmApLHtjcmVkZW50aWFsczpgaW5jbHVkZWAsaGVhZGVyczp7IlgtV1AtTm9uY2UiOm59fSk7aWYoaS5vayl7bGV0IGE9YXdhaXQgaS5qc29uKCk7aWYoIWUpe2E/LnBheWxvYWQmJihhLnBheWxvYWQuZW50aWRhZCYmdCh7Li4uZXksLi4uYS5wYXlsb2FkLmVudGlkYWR9KSxBcnJheS5pc0FycmF5KGEucGF5bG9hZC5kb2NlbnRlcykmJmEucGF5bG9hZC5kb2NlbnRlcy5sZW5ndGgmJnIoYS5wYXlsb2FkLmRvY2VudGVzKSkscChlPT4oey4uLmUsY2FyZ2FuZG86ITEsdXN1YXJpb0xvZ3VlYWRvOiEwLG5vbmNlOm4sdWx0aW1hQWN0dWFsaXphY2lvbjphPy51cGRhdGVkX2F0fHxudWxsfSkpLG0uY3VycmVudD0hMDtyZXR1cm59fWV8fChoKCkscChlPT4oey4uLmUsY2FyZ2FuZG86ITEsdXN1YXJpb0xvZ3VlYWRvOiEwLG5vbmNlOm59KSksbS5jdXJyZW50PSEwKX1lbHNlIGV8fChoKCkscChlPT4oey4uLmUsY2FyZ2FuZG86ITEsdXN1YXJpb0xvZ3VlYWRvOiExfSkpLG0uY3VycmVudD0hMCl9Y2F0Y2godCl7ZXx8KGgoKSxwKGU9Pih7Li4uZSxjYXJnYW5kbzohMSxlcnJvcjp0Lm1lc3NhZ2V9KSksbS5jdXJyZW50PSEwKX19KSgpLCgpPT57ZT0hMH19LFtdKTtmdW5jdGlvbiBoKCl7dHJ5e2xldCBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKGBjYW1hcmFfYm9ycmFkb3JfbG9jYWxgKTtpZighZSlyZXR1cm47bGV0IG49SlNPTi5wYXJzZShlKTtuPy5lbnRpZGFkJiZ0KHsuLi5leSwuLi5uLmVudGlkYWR9KSxBcnJheS5pc0FycmF5KG4/LmRvY2VudGVzKSYmbi5kb2NlbnRlcy5sZW5ndGgmJnIobi5kb2NlbnRlcyl9Y2F0Y2h7fX0oMCx5LnVzZUVmZmVjdCkoKCk9PntpZighbS5jdXJyZW50KXJldHVybjtsZXQgdD1zZXRJbnRlcnZhbCgoKT0+e3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgY2FtYXJhX2JvcnJhZG9yX2xvY2FsYCxKU09OLnN0cmluZ2lmeSh7ZW50aWRhZDplLGRvY2VudGVzOm4sdHM6RGF0ZS5ub3coKX0pKX1jYXRjaHt9fSwzZTQpO3JldHVybigpPT5jbGVhckludGVydmFsKHQpfSxbZSxuXSk7bGV0IGc9YXN5bmMoKT0+e2lmKCFmLnVzdWFyaW9Mb2d1ZWFkb3x8IWYubm9uY2Upe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgY2FtYXJhX2JvcnJhZG9yX2xvY2FsYCxKU09OLnN0cmluZ2lmeSh7ZW50aWRhZDplLGRvY2VudGVzOm4sdHM6RGF0ZS5ub3coKX0pKSxhbGVydChgQm9ycmFkb3IgZ3VhcmRhZG8gZW4gZXN0ZSBuYXZlZ2Fkb3IuIEluaWNpYSBzZXNpw7NuIGVuIGxhIHdlYiBwYXJhIGd1YXJkYXJsbyBlbiB0dSBjdWVudGEgeSBwb2RlciByZXRvbWFybG8gZGVzZGUgb3RybyBkaXNwb3NpdGl2by5gKX1jYXRjaHthbGVydChgTm8gc2UgcHVkbyBndWFyZGFyIGVsIGJvcnJhZG9yIGxvY2FsbWVudGUuYCl9cmV0dXJufXAoZT0+KHsuLi5lLGd1YXJkYW5kbzohMCxlcnJvcjpudWxsfSkpO3RyeXtsZXQgdD1hd2FpdCBmZXRjaChTKGAvd3AtanNvbi9jYW1hcmEvdjEvYm9ycmFkb3JgKSx7bWV0aG9kOmBQT1NUYCxjcmVkZW50aWFsczpgaW5jbHVkZWAsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6YGFwcGxpY2F0aW9uL2pzb25gLCJYLVdQLU5vbmNlIjpmLm5vbmNlfSxib2R5OkpTT04uc3RyaW5naWZ5KHtwYXlsb2FkOntlbnRpZGFkOmUsZG9jZW50ZXM6bn19KX0pO2lmKCF0Lm9rKXRocm93IEVycm9yKGBIVFRQIGArdC5zdGF0dXMpO2xldCByPWF3YWl0IHQuanNvbigpO3AoZT0+KHsuLi5lLGd1YXJkYW5kbzohMSx1bHRpbWFBY3R1YWxpemFjaW9uOnI/LnVwZGF0ZWRfYXR8fG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0pKX1jYXRjaChlKXtwKHQ9Pih7Li4udCxndWFyZGFuZG86ITEsZXJyb3I6YE5vIHNlIHB1ZG8gZ3VhcmRhcjogYCtlLm1lc3NhZ2V9KSl9fSxfPWFzeW5jKCk9PntpZihjb25maXJtKGDCv1NlZ3VybyBxdWUgcXVpZXJlcyBkZXNjYXJ0YXIgZXN0ZSBib3JyYWRvciB5IGVtcGV6YXIgZGUgY2Vybz8gRXN0YSBhY2Npw7NuIG5vIHNlIHB1ZWRlIGRlc2hhY2VyLmApKXt0cnl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYGNhbWFyYV9ib3JyYWRvcl9sb2NhbGApLGYudXN1YXJpb0xvZ3VlYWRvJiZmLm5vbmNlJiZhd2FpdCBmZXRjaChTKGAvd3AtanNvbi9jYW1hcmEvdjEvYm9ycmFkb3JgKSx7bWV0aG9kOmBERUxFVEVgLGNyZWRlbnRpYWxzOmBpbmNsdWRlYCxoZWFkZXJzOnsiWC1XUC1Ob25jZSI6Zi5ub25jZX19KX1jYXRjaHt9dChleSkscihbJHYoKV0pLHAoZT0+KHsuLi5lLHVsdGltYUFjdHVhbGl6YWNpb246bnVsbH0pKX19LHY9YXN5bmMoKT0+e3RyeXtkKCEwKTtsZXR7Z2VuZXJhclBERjp0fT1hd2FpdCBPKGFzeW5jKCk9PntsZXR7Z2VuZXJhclBERjplfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSnYoKSxQdikpO3JldHVybntnZW5lcmFyUERGOmV9fSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTt0KGUsbil9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihgRXJyb3IgZ2VuZXJhbmRvIFBERjpgLGUpLGFsZXJ0KGBObyBzZSBwdWRvIGdlbmVyYXIgZWwgUERGLiBJbnTDqW50YWxvIGRlIG51ZXZvLmApfWZpbmFsbHl7ZCghMSl9fSxiPShlLG4pPT50KHQ9Pih7Li4udCxbZV06bn0pKSxDPShlLHQsbik9PntyKHI9PntsZXQgaT1bLi4ucl07cmV0dXJuIGlbZV09ey4uLmlbZV0sW3RdOm59LGl9KX0sdz0oZSx0LG4saSxhKT0+e3Iocj0+e2xldCBvPVsuLi5yXSxzPXsuLi5vW2VdfTtyZXR1cm4gcy5tZXJpdG9zPXsuLi5zLm1lcml0b3N9LHQ9PT1gaGFiaWxpdGFudGVgP3MubWVyaXRvcy5oYWJpbGl0YW50ZT1zLm1lcml0b3MuaGFiaWxpdGFudGUubWFwKChlLHQpPT50PT09bj97Li4uZSxbaV06YX06ZSk6cy5tZXJpdG9zW3RdPXsuLi5zLm1lcml0b3NbdF0saXRlbXM6cy5tZXJpdG9zW3RdLml0ZW1zLm1hcCgoZSx0KT0+dD09PW4/ey4uLmUsW2ldOmF9OmUpfSxvW2VdPXMsb30pfSxUPShlLHQsbixpKT0+e3Iocj0+e2xldCBhPVsuLi5yXSxvPXsuLi5hW2VdfTtyZXR1cm4gby5leHBlcmllbmNpYT1vLmV4cGVyaWVuY2lhLm1hcCgoZSxyKT0+cj09PXQ/ey4uLmUsW25dOml9OmUpLGFbZV09byxhfSl9LEU9KGUsdCk9PntyKG49PntsZXQgcj1bLi4ubl07cmV0dXJuIHJbZV09ey4uLnJbZV0scHJvcHVlc3RhOnttb2RhbGlkYWQ6dH19LHJ9KX0sRD0oKT0+cihlPT5bLi4uZSwkdigpXSksaz1lPT57bi5sZW5ndGg+MT9yKHQ9PnQuZmlsdGVyKCh0LG4pPT5uIT09ZSkpOmFsZXJ0KGBEZWJlIGluY2x1aXIgYWwgbWVub3MgdW4gZG9jZW50ZSBlbiBsYSBzb2xpY2l0dWQuYCl9LEE9KGUsdCk9PntyKG49PntsZXQgcj1bLi4ubl0saT17Li4ucltlXX07cmV0dXJuIGkubWVyaXRvcz17Li4uaS5tZXJpdG9zfSx0PT09YGhhYmlsaXRhbnRlYD9pLm1lcml0b3MuaGFiaWxpdGFudGU9Wy4uLmkubWVyaXRvcy5oYWJpbGl0YW50ZSx7dGl0dWxvOmBgLGNlbnRybzpgYCxhbmlvOmBgLGN1cnNvczpbXX1dOnQ9PT1gZXhwZXJpZW5jaWFgP2kuZXhwZXJpZW5jaWE9Wy4uLmkuZXhwZXJpZW5jaWEse2luc3RpdHVjaW9uOmBgLG1hdGVyaWE6YGAsZGVzZGU6YGAsaGFzdGE6YGAsaG9yYXM6YGB9XTppLm1lcml0b3NbdF09ey4uLmkubWVyaXRvc1t0XSxpdGVtczpbLi4uaS5tZXJpdG9zW3RdLml0ZW1zLHt0aXR1bG86YGAsY2VudHJvOmBgLGhvcmFzOmBgLGFuaW86YGB9XX0scltlXT1pLHJ9KX0saj0oZSx0LG4pPT57cihyPT57bGV0IGk9Wy4uLnJdLGE9ey4uLmlbZV19O3JldHVybiBhLm1lcml0b3M9ey4uLmEubWVyaXRvc30sYS5tZXJpdG9zW3RdPXsuLi5hLm1lcml0b3NbdF0sYWN0aXZvOm59LG49PT1gU8ONYCYmYS5tZXJpdG9zW3RdLml0ZW1zLmxlbmd0aD09PTAmJihhLm1lcml0b3NbdF0uaXRlbXM9W3t0aXR1bG86YGAsY2VudHJvOmBgLGhvcmFzOmBgLGFuaW86YGB9XSksaVtlXT1hLGl9KX0sTT1hc3luYyB0PT57dC5wcmV2ZW50RGVmYXVsdCgpLGEoITApLHMobnVsbCksbCghMSksY29uc29sZS5sb2coYEpTT04gcXVlIHNlIGVudmlhcsOtYTpgLHtlbnRpZGFkOmUsZG9jZW50ZXM6bn0pLGF3YWl0IG5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSw4MDApKSxsKCEwKSxhKCExKSx3aW5kb3cuc2Nyb2xsVG8oMCwwKX07aWYoYylyZXR1cm4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHctZnVsbCBteC1hdXRvIHAtMTIgdGV4dC1jZW50ZXIgYmctd2hpdGUgYm9yZGVyLTQgYm9yZGVyLWNhbWFyYS1yZWQgYW5pbWF0ZS1pbiBmYWRlLWluIGR1cmF0aW9uLTcwMGAsY2hpbGRyZW46WygwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmB3LTI0IGgtMjQgYmctcmVkLTUwIHRleHQtY2FtYXJhLXJlZCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXgtYXV0byBtYi04YCxjaGlsZHJlbjooMCwkLmpzeCkoYHN2Z2Ase2NsYXNzTmFtZTpgdy0xMiBoLTEyYCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgM2AsZDpgTTUgMTNsNCA0TDE5IDdgfSl9KX0pLCgwLCQuanN4KShgaDJgLHtjbGFzc05hbWU6YHRleHQtNHhsIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCBtYi00IHRyYWNraW5nLXRpZ2h0ZXIgdXBwZXJjYXNlYCxjaGlsZHJlbjpgwqFTT0xJQ0lUVUQgRU5WSUFEQSBDT04gw4lYSVRPIWB9KSwoMCwkLmpzeHMpKGBwYCx7Y2xhc3NOYW1lOmB0ZXh0LXhsIHRleHQtZ3JheS02MDAgbWF4LXctMnhsIG14LWF1dG8gbWItMTAgbGVhZGluZy10aWdodGAsY2hpbGRyZW46W2BTdSBzb2xpY2l0dWQgZGUgaG9tb2xvZ2FjacOzbiBoYSBzaWRvIHJlY2liaWRhIGNvcnJlY3RhbWVudGUgcG9yIGxhIGAsKDAsJC5qc3gpKGBzdHJvbmdgLHtjaGlsZHJlbjpgQ8OhbWFyYSBkZSBDb21lcmNpb2B9KSxgLiBSZXZpc2FyZW1vcyBzdSBwcm9wdWVzdGEgeSBub3MgcG9uZHJlbW9zIGVuIGNvbnRhY3RvIHByb250by5gXX0pLCgwLCQuanN4KShgYnV0dG9uYCx7b25DbGljazooKT0+d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpLGNsYXNzTmFtZTpgYmctY2FtYXJhLXJlZCB0ZXh0LXdoaXRlIHB4LTEyIHB5LTQgZm9udC1ibGFjayB1cHBlcmNhc2Ugcm91bmRlZC1sZyBob3ZlcjpiZy1jYW1hcmEtcmVkLWRhcmsgdHJhbnNpdGlvbi1hbGwgc2hhZG93LXNvZnQtbGcgaG92ZXI6c2hhZG93LWxnIHRyYWNraW5nLXdpZGVgLGNoaWxkcmVuOmBFbnZpYXIgb3RyYSBzb2xpY2l0dWRgfSldfSk7bGV0IE49YHctZnVsbCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgcC0yIGJnLXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1jYW1hcmEtcmVkLzMwIGZvY3VzOmJvcmRlci1jYW1hcmEtcmVkYDtyZXR1cm4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHctZnVsbCBteC1hdXRvIGZvbnQtc2FucyB0ZXh0LWdyYXktOTAwYCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBtYi04YCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgaDFgLHtjbGFzc05hbWU6YHRleHQtM3hsIG1kOnRleHQtNHhsIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCB0cmFja2luZy10aWdodGAsY2hpbGRyZW46W2BTb2xpY2l0dWQgZGUgYCwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQtY2FtYXJhLXJlZGAsY2hpbGRyZW46YEhvbW9sb2dhY2nDs25gfSldfSksKDAsJC5qc3gpKGBwYCx7Y2xhc3NOYW1lOmB0ZXh0LXNtIHRleHQtZ3JheS01MDAgbXQtMSBpdGFsaWNgLGNoaWxkcmVuOmBFbnRpZGFkIGZvcm1hdGl2YSDCtyB1bm8gbyB2YXJpb3MgZG9jZW50ZXNgfSksKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHctMjAgaC0xIGJnLWNhbWFyYS1yZWQgcm91bmRlZC1mdWxsIG10LTNgfSldfSksbyYmKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBiZy1yZWQtNTAgYm9yZGVyLWwtOCBib3JkZXItY2FtYXJhLXJlZCB0ZXh0LWNhbWFyYS1yZWQgcC02IG1iLTggZm9udC1ib2xkIGFuaW1hdGUtcHVsc2VgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHBgLHtjbGFzc05hbWU6YHRleHQtc20gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtYi0xIG9wYWNpdHktNzBgLGNoaWxkcmVuOmBFcnJvciBlbiBlbCBlbnbDrW9gfSksKDAsJC5qc3gpKGBwYCx7Y2xhc3NOYW1lOmB0ZXh0LWxnYCxjaGlsZHJlbjpvfSldfSksKDAsJC5qc3gpKGBmb3JtYCx7b25TdWJtaXQ6TSxjaGlsZHJlbjooMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHNwYWNlLXktMTJgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBzZWN0aW9uYCx7Y2xhc3NOYW1lOmBiZy13aGl0ZSBwLTggYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWxnIHNoYWRvdy1zb2Z0YCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBwYi00IG1iLTggYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy05IGgtOSByb3VuZGVkLWZ1bGwgYmctY2FtYXJhLXJlZCB0ZXh0LXdoaXRlIGZvbnQtYmxhY2sgdGV4dC1zbWAsY2hpbGRyZW46YDAxYH0pLCgwLCQuanN4KShgaDJgLHtjbGFzc05hbWU6YHRleHQteGwgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtZ3JheS04MDBgLGNoaWxkcmVuOmBEYXRvcyBkZWwgU29saWNpdGFudGVgfSldfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0zIGdhcC14LTYgZ2FwLXktNGAsY2hpbGRyZW46WygwLCQuanN4KShadix7bGFiZWw6YFJhesOzbiBTb2NpYWxgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLnJhem9uX3NvY2lhbCxvbkNoYW5nZTplPT5iKGByYXpvbl9zb2NpYWxgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgQ0lGIEVudGlkYWRgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLmNpZixvbkNoYW5nZTplPT5iKGBjaWZgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgRGlyZWNjacOzbmAscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YHRleHRgLHZhbHVlOmUuZGlyZWNjaW9uLG9uQ2hhbmdlOmU9PmIoYGRpcmVjY2lvbmAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBNdW5pY2lwaW9gLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLm11bmljaXBpbyxvbkNoYW5nZTplPT5iKGBtdW5pY2lwaW9gLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgUHJvdmluY2lhYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgdGV4dGAsdmFsdWU6ZS5wcm92aW5jaWEsb25DaGFuZ2U6ZT0+YihgcHJvdmluY2lhYCxlLnRhcmdldC52YWx1ZSkscmVxdWlyZWQ6ITB9KX0pLCgwLCQuanN4KShadix7bGFiZWw6YEPDs2RpZ28gUG9zdGFsYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgdGV4dGAsdmFsdWU6ZS5jcCxvbkNoYW5nZTplPT5iKGBjcGAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBUZWzDqWZvbm9gLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLnRlbGVmb25vLG9uQ2hhbmdlOmU9PmIoYHRlbGVmb25vYCxlLnRhcmdldC52YWx1ZSkscmVxdWlyZWQ6ITB9KX0pLCgwLCQuanN4KShadix7bGFiZWw6YEVtYWlsYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgZW1haWxgLHZhbHVlOmUuZW1haWwsb25DaGFuZ2U6ZT0+YihgZW1haWxgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSldfSksKDAsJC5qc3gpKGBoM2Ase2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtY2FtYXJhLXJlZCBtdC04IG1iLTQgYm9yZGVyLWwtNCBib3JkZXItY2FtYXJhLXJlZCBwbC0zIHVwcGVyY2FzZSB0ZXh0LXNtIHRyYWNraW5nLXdpZGVyYCxjaGlsZHJlbjpgUmVwcmVzZW50YW50ZSBMZWdhbGB9KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTQgZ2FwLTRgLGNoaWxkcmVuOlsoMCwkLmpzeCkoWnYse2xhYmVsOmBOb21icmVgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLnJlcF9ub21icmUsb25DaGFuZ2U6ZT0+YihgcmVwX25vbWJyZWAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBBcGVsbGlkb3NgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLnJlcF9hcGVsbGlkb3Msb25DaGFuZ2U6ZT0+YihgcmVwX2FwZWxsaWRvc2AsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBOSUZgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLnJlcF9uaWYsb25DaGFuZ2U6ZT0+YihgcmVwX25pZmAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBDYXJnb2AscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YHRleHRgLHZhbHVlOmUucmVwX2NhcmdvLG9uQ2hhbmdlOmU9PmIoYHJlcF9jYXJnb2AsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KV19KSwoMCwkLmpzeCkoYGgzYCx7Y2xhc3NOYW1lOmBmb250LWJvbGQgdGV4dC1jYW1hcmEtcmVkIG10LTggbWItNCBib3JkZXItbC00IGJvcmRlci1jYW1hcmEtcmVkIHBsLTMgdXBwZXJjYXNlIHRleHQtc20gdHJhY2tpbmctd2lkZXJgLGNoaWxkcmVuOmBQZXJzb25hIGRlIENvbnRhY3RvYH0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtNCBnYXAtNGAsY2hpbGRyZW46WygwLCQuanN4KShadix7bGFiZWw6YE5vbWJyZWAscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YHRleHRgLHZhbHVlOmUuY29udF9ub21icmUsb25DaGFuZ2U6ZT0+YihgY29udF9ub21icmVgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgVGVsw6lmb25vYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgdGV4dGAsdmFsdWU6ZS5jb250X3RlbGVmb25vLG9uQ2hhbmdlOmU9PmIoYGNvbnRfdGVsZWZvbm9gLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgRW1haWxgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmBlbWFpbGAsdmFsdWU6ZS5jb250X2VtYWlsLG9uQ2hhbmdlOmU9PmIoYGNvbnRfZW1haWxgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgQ2FyZ29gLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLmNvbnRfY2FyZ28sb25DaGFuZ2U6ZT0+YihgY29udF9jYXJnb2AsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KV19KSwoMCwkLmpzeHMpKGBoM2Ase2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtY2FtYXJhLXJlZCBtdC04IG1iLTQgYm9yZGVyLWwtNCBib3JkZXItY2FtYXJhLXJlZCBwbC0zIHVwcGVyY2FzZSB0ZXh0LXNtIHRyYWNraW5nLXdpZGVyIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzdmdgLHtjbGFzc05hbWU6YHctNCBoLTRgLGZpbGw6YG5vbmVgLHN0cm9rZTpgY3VycmVudENvbG9yYCx2aWV3Qm94OmAwIDAgMjQgMjRgLGNoaWxkcmVuOigwLCQuanN4KShgcGF0aGAse3N0cm9rZUxpbmVjYXA6YHJvdW5kYCxzdHJva2VMaW5lam9pbjpgcm91bmRgLHN0cm9rZVdpZHRoOmAyYCxkOmBNMTUuMTcyIDdsLTYuNTg2IDYuNTg2YTIgMiAwIDEwMi44MjggMi44MjhsNi40MTQtNi41ODZhNCA0IDAgMDAtNS42NTYtNS42NTZsLTYuNDE1IDYuNTg1YTYgNiAwIDEwOC40ODYgOC40ODZMMjAuNSAxM2B9KX0pLGAwMy4gRE9DVU1FTlRBQ0nDk04gQSBBREpVTlRBUmBdfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBiZy15ZWxsb3ctNTAgYm9yZGVyIGJvcmRlci15ZWxsb3ctMjAwIHAtNCByb3VuZGVkLW1kIG1iLTQgdGV4dC14cyB0ZXh0LXllbGxvdy04MDAgaXRhbGljYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzdHJvbmdgLHtjaGlsZHJlbjpgSU1QT1JUQU5URTpgfSksYCBMYSBubyBhcG9ydGFjacOzbiBkZSBjdWFscXVpZXJhIGRlIGxvcyBkb2N1bWVudG9zIHF1ZSBzZSBpbmRpY2FuIHNlcsOhIGNhdXNhIGRlIGRlc2VzdGltYWNpw7NuIGRlIGxhIHByb3B1ZXN0YS4gRm9ybWF0b3MgYWRtaXRpZG9zOiBgLCgwLCQuanN4KShgc3Ryb25nYCx7Y2hpbGRyZW46YFBERmB9KSxgLiBUYW1hw7FvIG3DoXhpbW86IGAsKDAsJC5qc3gpKGBzdHJvbmdgLHtjaGlsZHJlbjpgMTAgTUJgfSksYC4gQ2FyZ2EgbcOheGltYTogMTAwIGFyY2hpdm9zLmBdfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00YCxjaGlsZHJlbjpbKDAsJC5qc3gpKFF2LHtsYWJlbDpgQ0lGIERFIExBIEVOVElEQURgLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKFF2LHtsYWJlbDpgQUxUQSBFTiBFTCBJQUVgLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKFF2LHtsYWJlbDpgQ0VSVElGSUNBRE8gQUwgQ09SUklFTlRFIEFFQVRgLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKFF2LHtsYWJlbDpgQ0VSVElGSUNBRE8gQUwgQ09SUklFTlRFIFRHU1NgLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKFF2LHtsYWJlbDpgRE5JIE8gRVFVSVZBTEVOVEUgREVMIFJFUFJFU0VOVEFOVEUgTEVHQUxgLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKFF2LHtsYWJlbDpgUE9ERVIgREUgUkVQUkVTRU5UQUNJw5NOYCxyZXF1aXJlZDohMH0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgbXQtOCBwLTYgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLW1kYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBoNGAse2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtZ3JheS03MDAgbWItNCBib3JkZXItYiBwYi0yIHVwcGVyY2FzZSB0ZXh0LXhzYCxjaGlsZHJlbjpgRWwgc29saWNpdGFudGUgREVDTEFSQTpgfSksKDAsJC5qc3hzKShgdWxgLHtjbGFzc05hbWU6YGxpc3QtZGlzYyBsaXN0LW91dHNpZGUgbWwtNSB0ZXh0LVsxMXB4XSB0ZXh0LWdyYXktNjAwIHNwYWNlLXktMiBtYi00YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBsaWAse2NoaWxkcmVuOmBRdWUgZXMgY29ub2NlZG9yL2EgZGUgbG9zIFBsaWVnb3MgcXVlIHJpZ2VuIGVsICJFeHBlZGllbnRlIEFNSC8wMS8yMDI2OiBBY3VlcmRvIE1hcmNvIHBhcmEgbGEgSG9tb2xvZ2FjacOzbiBkZSBkb2NlbnRlcy4uLiBkdXJhbnRlIGVsIGVqZXJjaWNpbyAyMDI2Iiwgc2Vnw7puIHByb2NlZGltaWVudG8gYXByb2JhZG8gcG9yIGxhIEPDoW1hcmEgZGUgQ29tZXJjaW8sIEluZHVzdHJpYSB5IFNlcnZpY2lvcyBkZSBUb2xlZG8sIGFjZXB0YW5kbyDDrW50ZWdyYW1lbnRlIGVsIGNvbnRlbmlkbyBkZSBsb3MgbWlzbW9zLmB9KSwoMCwkLmpzeCkoYGxpYCx7Y2hpbGRyZW46YFF1ZSBsb3MgZG9jdW1lbnRvcyBhcG9ydGFkb3Mgc29uIGNvcGlhIGRlIG9yaWdpbmFsZXMgbyBjb3BpYXMgYXV0w6ludGljYXMgZGUgbG9zIHF1ZSBlbCBzb2xpY2l0YW50ZSBkaXNwb25lIHkgcHVlZGUgYXBvcnRhciBlbiBjYXNvIGRlIHNlcmxlIGFzw60gc29saWNpdGFkby5gfSksKDAsJC5qc3gpKGBsaWAse2NoaWxkcmVuOmBRdWUgcHJlc2VudGEgdG9kYSBsYSBkb2N1bWVudGFjacOzbiBleGlnaWRhIGVuIGxvcyBwbGllZ29zLmB9KSwoMCwkLmpzeCkoYGxpYCx7Y2hpbGRyZW46YFF1ZSBlbCBhbGNhbmNlIGRlIGxhcyBob21vbG9nYWNpb25lcyBvYmpldG8gZGUgbGEgcHJvcG9zaWNpw7NuIHNlIGVzcGVjaWZpY2EgZW4gZWwgYXBhcnRhZG8gc2VndW5kbyBkZSBjYWRhIHVuYSBkZSBsYXMgc29saWNpdHVkZXMgZGUgaG9tb2xvZ2FjacOzbiBwcmVzZW50YWRhcy5gfSldfSksKDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBjdXJzb3ItcG9pbnRlciBiZy1yZWQtNTAgcC0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1yZWQtMTAwIGhvdmVyOmJnLXJlZC0xMDAgdHJhbnNpdGlvbi1jb2xvcnNgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGlucHV0YCx7dHlwZTpgY2hlY2tib3hgLGNsYXNzTmFtZTpgdy00IGgtNCB0ZXh0LWNhbWFyYS1yZWQgcm91bmRlZCBmb2N1czpyaW5nLWNhbWFyYS1yZWRgLGNoZWNrZWQ6ZS5hY2VwdGFfc29saWNpdHVkLG9uQ2hhbmdlOmU9PmIoYGFjZXB0YV9zb2xpY2l0dWRgLGUudGFyZ2V0LmNoZWNrZWQpLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWNhbWFyYS1yZWQgdXBwZXJjYXNlYCxjaGlsZHJlbjpgU29saWNpdHVkIGRlbCBwYXJ0aWNpcGFudGUgKmB9KV19KV19KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YG10LTYgcC02IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1tZGAsY2hpbGRyZW46WygwLCQuanN4KShgaDRgLHtjbGFzc05hbWU6YGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTQgYm9yZGVyLWIgcGItMiB1cHBlcmNhc2UgdGV4dC14c2AsY2hpbGRyZW46YERFQ0xBUkEgQkFKTyBTVSBSRVNQT05TQUJJTElEQUQgUVVFOmB9KSwoMCwkLmpzeHMpKGB1bGAse2NsYXNzTmFtZTpgbGlzdC1kaXNjIGxpc3Qtb3V0c2lkZSBtbC01IHRleHQtWzExcHhdIHRleHQtZ3JheS02MDAgc3BhY2UteS0yIG1iLTRgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGxpYCx7Y2hpbGRyZW46YFJlw7puZSB0b2RhcyB5IGNhZGEgdW5hIGRlIGxhcyBjb25kaWNpb25lcyBleGlnaWRhcyBwb3IgZWwgUGxpZWdvIGRlIENsw6F1c3VsYXMgQWRtaW5pc3RyYXRpdmFzIHkgcG9yIGxhcyBJbnN0cnVjY2lvbmVzIGRlIENvbnRyYXRhY2nDs24gZGUgbGEgQ8OhbWFyYSBPZmljaWFsIGRlIENvbWVyY2lvLi4uYH0pLCgwLCQuanN4KShgbGlgLHtjaGlsZHJlbjpgU2UgaGFsbGEgYWwgY29ycmllbnRlIGRlbCBjdW1wbGltaWVudG8gZGUgbGFzIG9ibGlnYWNpb25lcyB0cmlidXRhcmlhcyB5IGNvbiBsYSBTZWd1cmlkYWQgU29jaWFsIGltcHVlc3RhcyBwb3IgbGFzIGRpc3Bvc2ljaW9uZXMgdmlnZW50ZXMuYH0pLCgwLCQuanN4KShgbGlgLHtjaGlsZHJlbjpgQWNlcHRhIGVsIFBsaWVnbyBkZSBDb25kaWNpb25lcyBkZSBMaWNpdGFjacOzbiB5IGVsIGRlIFByZXNjcmlwY2lvbmVzIFTDqWNuaWNhcyBkZSBsYSBsaWNpdGFjacOzbiBkZWwgIkV4cGVkaWVudGUgQU1ILzAxLzIwMjYuLi4gZHVyYW50ZSBlbCBlamVyY2ljaW8gMjAyNi4iLmB9KSwoMCwkLmpzeCkoYGxpYCx7Y2hpbGRyZW46YERlY2xhcmFjacOzbiByZXNwb25zYWJsZSBkZSBubyBlc3RhciBpbmN1cnNvIGVuIG5pbmd1bmEgZGUgbGFzIHByb2hpYmljaW9uZXMgcGFyYSBjb250cmF0YXIuYH0pLCgwLCQuanN4KShgbGlgLHtjaGlsZHJlbjpgQXV0b3JpemEgZXhwcmVzYW1lbnRlIGEgbGEgQ8OhbWFyYSBkZSBDb21lcmNpbyBkZSBUb2xlZG8gcGFyYSBxdWUgbGUgcmVtaXRhIHBvciBjb3JyZW8gZWxlY3Ryw7NuaWNvIGN1YWxxdWllciBub3RpZmljYWNpw7NuIHJlbGFjaW9uYWRhIGNvbiBlbCBwcmVzZW50ZSBwcm9jZWRpbWllbnRvLmB9KV19KSwoMCwkLmpzeHMpKGBsYWJlbGAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIGN1cnNvci1wb2ludGVyIGJnLXJlZC01MCBwLTMgcm91bmRlZCBib3JkZXIgYm9yZGVyLXJlZC0xMDAgaG92ZXI6YmctcmVkLTEwMCB0cmFuc2l0aW9uLWNvbG9yc2AsY2hpbGRyZW46WygwLCQuanN4KShgaW5wdXRgLHt0eXBlOmBjaGVja2JveGAsY2xhc3NOYW1lOmB3LTQgaC00IHRleHQtY2FtYXJhLXJlZCByb3VuZGVkIGZvY3VzOnJpbmctY2FtYXJhLXJlZGAsY2hlY2tlZDplLmFjZXB0YV9kZWNsYXJhY2lvbixvbkNoYW5nZTplPT5iKGBhY2VwdGFfZGVjbGFyYWNpb25gLGUudGFyZ2V0LmNoZWNrZWQpLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWNhbWFyYS1yZWQgdXBwZXJjYXNlYCxjaGlsZHJlbjpgRGVjbGFyYWNpw7NuIGRlIGNvbmRpY2lvbmVzICpgfSldfSldfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBtdC02IHAtNiBiZy1ncmF5LTUwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1tZGAsY2hpbGRyZW46WygwLCQuanN4KShgaDRgLHtjbGFzc05hbWU6YGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTQgYm9yZGVyLWIgcGItMiB1cHBlcmNhc2UgdGV4dC14c2AsY2hpbGRyZW46YFRSQVRBTUlFTlRPIERFIExPUyBEQVRPUyBERSBDQVLDgUNURVIgUEVSU09OQUxgfSksKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdIHRleHQtZ3JheS01MDAgbGVhZGluZy1yZWxheGVkIG1iLTQgdGV4dC1qdXN0aWZ5YCxjaGlsZHJlbjpgRGUgYWN1ZXJkbyBjb24gbG8gZXN0YWJsZWNpZG8gZW4gbGEgbGVnaXNsYWNpw7NuIHZpZ2VudGUgZW4gbWF0ZXJpYSBkZSBQcm90ZWNjacOzbiBkZSBEYXRvcyBkZSBDYXLDoWN0ZXIgUGVyc29uYWwsIGRveSBtaSBjb25zZW50aW1pZW50byBwYXJhIHF1ZSBlc3RvcyBkYXRvcy4uLiBzZWFuIGluY2x1aWRvcyBlbiB1biBmaWNoZXJvIGRlbCBxdWUgZXMgdGl0dWxhciBsYSBDw6FtYXJhIE9maWNpYWwgZGUgQ29tZXJjaW8sIEluZHVzdHJpYSB5IFNlcnZpY2lvcyBkZSBUb2xlZG8sIENJRiBRLTQ1NzMwMDEtRy4uLiBFbCB0cmF0YW1pZW50byBzZSBiYXNhIGVuIGVsIGNvbnNlbnRpbWllbnRvIG90b3JnYWRvIG1lZGlhbnRlIGVzdGEgYWNlcHRhY2nDs24uIEFzaW1pc21vLCBjb25zaWVudG8gcXVlIG1pcyBkYXRvcyBzZWFuIGNlZGlkb3MgYSBsYSBDw6FtYXJhIGRlIEVzcGHDsWEgeSBBZG1pbmlzdHJhY2lvbmVzIFDDumJsaWNhcywgcGFyYSBxdWUgc2VhbiB0cmF0YWRvcyBjb24gbGEgZmluYWxpZGFkIHNlw7FhbGFkYS5gfSksKDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBjdXJzb3ItcG9pbnRlciBiZy1yZWQtNTAgcC0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1yZWQtMTAwIGhvdmVyOmJnLXJlZC0xMDAgdHJhbnNpdGlvbi1jb2xvcnNgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGlucHV0YCx7dHlwZTpgY2hlY2tib3hgLGNsYXNzTmFtZTpgdy00IGgtNCB0ZXh0LWNhbWFyYS1yZWQgcm91bmRlZCBmb2N1czpyaW5nLWNhbWFyYS1yZWRgLGNoZWNrZWQ6ZS5hY2VwdGFfcmdwZCxvbkNoYW5nZTplPT5iKGBhY2VwdGFfcmdwZGAsZS50YXJnZXQuY2hlY2tlZCkscmVxdWlyZWQ6ITB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQteHMgZm9udC1ib2xkIHRleHQtY2FtYXJhLXJlZCB1cHBlcmNhc2VgLGNoaWxkcmVuOmBBY2VwdGFjacOzbiBkZSB0cmF0YW1pZW50byBkZSBkYXRvcyAqYH0pXX0pXX0pXX0pLG4ubWFwKChlLHQpPT4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW4gbWItMTIgcmVsYXRpdmUgZ3JvdXAgc2hhZG93LXNvZnQgYmctd2hpdGVgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGJnLXJlZC01MCBib3JkZXItYiBib3JkZXItcmVkLTEwMCBwLTQgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyYCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgaDJgLHtjbGFzc05hbWU6YHRleHQtYmFzZSBtZDp0ZXh0LWxnIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LWNhbWFyYS1yZWQgZmxleCBpdGVtcy1jZW50ZXJgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSB3LTcgaC03IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtci0zIHRleHQteHMgZm9udC1ibGFja2AsY2hpbGRyZW46dCsxfSksYDAyLiBEb2NlbnRlIGEgaG9tb2xvZ2FyYF19KSxuLmxlbmd0aD4xJiYoMCwkLmpzeHMpKGBidXR0b25gLHt0eXBlOmBidXR0b25gLG9uQ2xpY2s6KCk9PmsodCksY2xhc3NOYW1lOmBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXJlZC0yMDAgdGV4dC1jYW1hcmEtcmVkIGhvdmVyOmJnLWNhbWFyYS1yZWQgaG92ZXI6dGV4dC13aGl0ZSB0ZXh0LVsxMHB4XSBmb250LWJvbGQgcHgtMyBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB0cmFuc2l0aW9uLWNvbG9yc2AsY2hpbGRyZW46WygwLCQuanN4KShgc3ZnYCx7Y2xhc3NOYW1lOmB3LTMgaC0zYCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgMmAsZDpgTTE5IDdsLS44NjcgMTIuMTQyQTIgMiAwIDAxMTYuMTM4IDIxSDcuODYyYTIgMiAwIDAxLTEuOTk1LTEuODU4TDUgN201IDR2Nm00LTZ2Nm0xLTEwVjRhMSAxIDAgMDAtMS0xaC00YTEgMSAwIDAwLTEgMXYzTTQgN2gxNmB9KX0pLGBFTElNSU5BUiBET0NFTlRFYF19KV19KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHAtNiBzcGFjZS15LTZgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTMgZ2FwLTRgLGNoaWxkcmVuOlsoMCwkLmpzeCkoWnYse2xhYmVsOmBOb21icmVgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLm5vbWJyZSxvbkNoYW5nZTplPT5DKHQsYG5vbWJyZWAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBBcGVsbGlkb3NgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLmFwZWxsaWRvcyxvbkNoYW5nZTplPT5DKHQsYGFwZWxsaWRvc2AsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBOSUYvTklFYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgdGV4dGAsdmFsdWU6ZS5uaWYsb25DaGFuZ2U6ZT0+Qyh0LGBuaWZgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgRmVjaGEgTmFjaW1pZW50b2AscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YGRhdGVgLHZhbHVlOmUuZmVjaGFfbmFjLG9uQ2hhbmdlOmU9PkModCxgZmVjaGFfbmFjYCxlLnRhcmdldC52YWx1ZSkscmVxdWlyZWQ6ITB9KX0pLCgwLCQuanN4KShadix7bGFiZWw6YE3Ds3ZpbGAscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YHRleHRgLHZhbHVlOmUubW92aWwsb25DaGFuZ2U6ZT0+Qyh0LGBtb3ZpbGAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBFbWFpbGAscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YGVtYWlsYCx2YWx1ZTplLmVtYWlsLG9uQ2hhbmdlOmU9PkModCxgZW1haWxgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSldfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBiZy1yZWQtNTAgcC00IHJvdW5kZWQtbm9uZSBib3JkZXIgYm9yZGVyLXJlZC0xMDBgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBoM2Ase2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtY2FtYXJhLXJlZCBtYi0yIHVwcGVyY2FzZSB0ZXh0LXhzIGZsZXggaXRlbXMtY2VudGVyYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzdmdgLHtjbGFzc05hbWU6YHctNCBoLTQgbXItMWAsZmlsbDpgbm9uZWAsc3Ryb2tlOmBjdXJyZW50Q29sb3JgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46KDAsJC5qc3gpKGBwYXRoYCx7c3Ryb2tlTGluZWNhcDpgcm91bmRgLHN0cm9rZUxpbmVqb2luOmByb3VuZGAsc3Ryb2tlV2lkdGg6YDJgLGQ6YE0xMiA2LjI1M3YxM20wLTEzQzEwLjgzMiA1LjQ3NyA5LjI0NiA1IDcuNSA1UzQuMTY4IDUuNDc3IDMgNi4yNTN2MTNDNC4xNjggMTguNDc3IDUuNzU0IDE4IDcuNSAxOHMzLjMzMi40NzcgNC41IDEuMjUzbTAtMTNDMTMuMTY4IDUuNDc3IDE0Ljc1NCA1IDE2LjUgNWMxLjc0NyAwIDMuMzMyLjQ3NyA0LjUgMS4yNTN2MTNDMTkuODMyIDE4LjQ3NyAxOC4yNDcgMTggMTYuNSAxOGMtMS43NDYgMC0zLjMzMi40NzctNC41IDEuMjUzYH0pfSksYEN1cnNvcyBwYXJhIGxvcyBxdWUgZGVzZWEgSG9tb2xvZ2Fyc2VgXX0pLCgwLCQuanN4KShZdix7b3B0aW9uczp4LHNlbGVjdGVkOmUuY3Vyc29zLHBsYWNlaG9sZGVyOmBCdXNjYSB5IHNlbGVjY2lvbmEgY3Vyc29zIChFajogRXN0aWxpc21vLCBNYXJrZXRpbmcuLi4pYCxvbkNoYW5nZTplPT5DKHQsYGN1cnNvc2AsZSl9KSwoMCwkLmpzeCkoYHBgLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdIHRleHQtY2FtYXJhLXJlZCBvcGFjaXR5LTc1IG10LTEgaXRhbGljYCxjaGlsZHJlbjpgUHVlZGVzIHNlbGVjY2lvbmFyIG3Dumx0aXBsZXMgY3Vyc29zIGVzY3JpYmllbmRvIHN1IG5vbWJyZS5gfSldfSksKDAsJC5qc3gpKFh2LHt0aXRsZTpgMDMuMyBEYXRvcyBBY2Fkw6ltaWNvc2B9KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHNwYWNlLXktNGAsY2hpbGRyZW46WygwLCQuanN4KShgaDRgLHtjbGFzc05hbWU6YGZvbnQtYm9sZCB0ZXh0LXNtIHRleHQtZ3JheS03MDBgLGNoaWxkcmVuOmBBLiBUaXR1bGFjacOzbiBIYWJpbGl0YW50ZWB9KSxlLm1lcml0b3MuaGFiaWxpdGFudGUubWFwKChuLHIpPT4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHAtNCBiZy1ncmF5LTEwMCByb3VuZGVkLW1kIHNwYWNlLXktNGAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtNCBnYXAtNGAsY2hpbGRyZW46WygwLCQuanN4KShadix7bGFiZWw6YFRpdHVsYWNpw7NuYCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgdGV4dGAsdmFsdWU6bi50aXR1bG8sb25DaGFuZ2U6ZT0+dyh0LGBoYWJpbGl0YW50ZWAscixgdGl0dWxvYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShadix7bGFiZWw6YENlbnRyb2AsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YHRleHRgLHZhbHVlOm4uY2VudHJvLG9uQ2hhbmdlOmU9PncodCxgaGFiaWxpdGFudGVgLHIsYGNlbnRyb2AsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBBw7FvYCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgdGV4dGAsdmFsdWU6bi5hbmlvLG9uQ2hhbmdlOmU9PncodCxgaGFiaWxpdGFudGVgLHIsYGFuaW9gLGUudGFyZ2V0LnZhbHVlKX0pfSksKDAsJC5qc3gpKFF2LHtsYWJlbDpgUERGIFTDrXR1bG9gfSldfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgQ3Vyc29zIHBhcmEgbG9zIHF1ZSBlcyB0w610dWxvIGhhYmlsaXRhbnRlYCxjaGlsZHJlbjplLmN1cnNvcy5sZW5ndGg9PT0wPygwLCQuanN4KShgcGAse2NsYXNzTmFtZTpgdGV4dC1bMTFweF0gaXRhbGljIHRleHQtZ3JheS01MDAgYmcteWVsbG93LTUwIGJvcmRlciBib3JkZXIteWVsbG93LTIwMCBwLTIgcm91bmRlZGAsY2hpbGRyZW46YFByaW1lcm8gc2VsZWNjaW9uYSBhcnJpYmEgbG9zIGN1cnNvcyBwYXJhIGxvcyBxdWUgZWwgZG9jZW50ZSBkZXNlYSBob21vbG9nYXJzZS5gfSk6KDAsJC5qc3gpKFl2LHtvcHRpb25zOmUuY3Vyc29zLHNlbGVjdGVkOm4uY3Vyc29zfHxbXSxwbGFjZWhvbGRlcjpgU2VsZWNjaW9uYSBsb3MgY3Vyc29zIGFwbGljYWJsZXMgYSBlc3RhIHRpdHVsYWNpw7NuLi4uYCxvbkNoYW5nZTplPT53KHQsYGhhYmlsaXRhbnRlYCxyLGBjdXJzb3NgLGUpfSl9KV19LHIpKSwoMCwkLmpzeHMpKGBidXR0b25gLHt0eXBlOmBidXR0b25gLG9uQ2xpY2s6KCk9PkEodCxgaGFiaWxpdGFudGVgKSxjbGFzc05hbWU6YHRleHQteHMgYmctY2FtYXJhLXJlZCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLW1kIGZvbnQtYm9sZCBob3ZlcjpiZy1jYW1hcmEtcmVkLWRhcmsgdHJhbnNpdGlvbi1jb2xvcnMgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQtYmFzZSBsZWFkaW5nLW5vbmVgLGNoaWxkcmVuOmArYH0pLGAgQcOxYWRpciBvdHJhIHRpdHVsYWNpw7NuIEFgXX0pXX0pLFt7aWQ6YG90cm9zX3RpdHVsb3NgLGxhYmVsOmBCLiBPdHJvcyBUw610dWxvcyBVbml2ZXJzaXRhcmlvc2B9LHtpZDpgbWFzXzMwMGAsbGFiZWw6YEMuIEN1cnNvcy9Nw6FzdGVyICszMDBoYH0se2lkOmByMjAxXzMwMGAsbGFiZWw6YEQuIEN1cnNvcy9Nw6FzdGVyIDIwMS0zMDBoYH0se2lkOmByMTAxXzIwMGAsbGFiZWw6YEUuIEN1cnNvcyAxMDEtMjAwaGB9LHtpZDpgcjMwXzEwMGAsbGFiZWw6YEYuIEN1cnNvcyAzMC0xMDBoYH1dLm1hcChuPT4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHB0LTQgYm9yZGVyLXRgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0yYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBoNGAse2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtc20gdGV4dC1ncmF5LTcwMGAsY2hpbGRyZW46bi5sYWJlbH0pLCgwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmBmbGV4IHNwYWNlLXgtNGAsY2hpbGRyZW46W2BTw41gLGBOT2BdLm1hcChyPT4oMCwkLmpzeHMpKGBsYWJlbGAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIHRleHQteHNgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGlucHV0YCx7dHlwZTpgcmFkaW9gLG5hbWU6YCR7bi5pZH1fJHtlLmlkfWAsY2hlY2tlZDplLm1lcml0b3Nbbi5pZF0uYWN0aXZvPT09cixvbkNoYW5nZTooKT0+aih0LG4uaWQscil9KSwoMCwkLmpzeCkoYHNwYW5gLHtjaGlsZHJlbjpyfSldfSxyKSl9KV19KSxlLm1lcml0b3Nbbi5pZF0uYWN0aXZvPT09YFPDjWAmJigwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgc3BhY2UteS00YCxjaGlsZHJlbjpbZS5tZXJpdG9zW24uaWRdLml0ZW1zLm1hcCgoZSxyKT0+KDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy01IGdhcC00IHAtNCBiZy1ncmF5LTUwIGJvcmRlci1sLTQgYm9yZGVyLWNhbWFyYS1yZWRgLGNoaWxkcmVuOlsoMCwkLmpzeCkoWnYse2xhYmVsOmBUaXR1bGFjacOzbmAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YHRleHRgLHZhbHVlOmUudGl0dWxvLG9uQ2hhbmdlOmU9PncodCxuLmlkLHIsYHRpdHVsb2AsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBDZW50cm9gLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLmNlbnRybyxvbkNoYW5nZTplPT53KHQsbi5pZCxyLGBjZW50cm9gLGUudGFyZ2V0LnZhbHVlKX0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgSG9yYXNgLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLmhvcmFzLG9uQ2hhbmdlOmU9PncodCxuLmlkLHIsYGhvcmFzYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShadix7bGFiZWw6YEHDsW9gLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLmFuaW8sb25DaGFuZ2U6ZT0+dyh0LG4uaWQscixgYW5pb2AsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoUXYse2xhYmVsOmBQREZgfSldfSxyKSksKDAsJC5qc3hzKShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOigpPT5BKHQsbi5pZCksY2xhc3NOYW1lOmB0ZXh0LVsxMHB4XSB1bmRlcmxpbmUgdGV4dC1jYW1hcmEtcmVkIGZvbnQtYm9sZCBob3Zlcjpuby11bmRlcmxpbmVgLGNoaWxkcmVuOltgQcORQURJUiBPVFJPIE3DiVJJVE8gYCxuLmlkLnRvVXBwZXJDYXNlKCldfSldfSldfSxuLmlkKSksKDAsJC5qc3gpKFh2LHt0aXRsZTpgMDMuNCBFeHBlcmllbmNpYSBEb2NlbnRlICjDmmx0aW1vcyA1IGHDsW9zKWB9KSxlLmV4cGVyaWVuY2lhLm1hcCgoZSxuKT0+KDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy01IGdhcC0zIHAtNCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbm9uZSBiZy13aGl0ZWAsY2hpbGRyZW46WygwLCQuanN4KShadix7bGFiZWw6YEluc3RpdHVjacOzbmAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YHRleHRgLHZhbHVlOmUuaW5zdGl0dWNpb24sb25DaGFuZ2U6ZT0+VCh0LG4sYGluc3RpdHVjaW9uYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShadix7bGFiZWw6YE1hdGVyaWFgLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmB0ZXh0YCx2YWx1ZTplLm1hdGVyaWEsb25DaGFuZ2U6ZT0+VCh0LG4sYG1hdGVyaWFgLGUudGFyZ2V0LnZhbHVlKX0pfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgRGVzZGVgLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6Tix0eXBlOmBkYXRlYCx2YWx1ZTplLmRlc2RlLG9uQ2hhbmdlOmU9PlQodCxuLGBkZXNkZWAsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoWnYse2xhYmVsOmBIYXN0YWAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpOLHR5cGU6YGRhdGVgLHZhbHVlOmUuaGFzdGEsb25DaGFuZ2U6ZT0+VCh0LG4sYGhhc3RhYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShadix7bGFiZWw6YEhvcmFzYCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOk4sdHlwZTpgbnVtYmVyYCx2YWx1ZTplLmhvcmFzLG9uQ2hhbmdlOmU9PlQodCxuLGBob3Jhc2AsZS50YXJnZXQudmFsdWUpfSl9KV19LG4pKSwoMCwkLmpzeHMpKGBidXR0b25gLHt0eXBlOmBidXR0b25gLG9uQ2xpY2s6KCk9PkEodCxgZXhwZXJpZW5jaWFgKSxjbGFzc05hbWU6YHRleHQteHMgYmctY2FtYXJhLXJlZCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLW1kIGZvbnQtYm9sZCBob3ZlcjpiZy1jYW1hcmEtcmVkLWRhcmsgdHJhbnNpdGlvbi1hbGwgYWN0aXZlOnNjYWxlLTk1IGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmB0ZXh0LWJhc2UgbGVhZGluZy1ub25lYCxjaGlsZHJlbjpgK2B9KSxgIEHDsWFkaXIgZXhwZXJpZW5jaWFgXX0pLCgwLCQuanN4KShYdix7dGl0bGU6YDAzLjUgUHJvcHVlc3RhIFBlZGFnw7NnaWNhYH0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNiBwLTQgYmctZ3JheS01MCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbm9uZWAsY2hpbGRyZW46WygwLCQuanN4KShRdix7bGFiZWw6YEFkanVudGFyIFByb3B1ZXN0YSAoTcOheCAxMCBhcmNoaXZvcylgLG11bHRpcGxlOiEwfSksKDAsJC5qc3gpKFp2LHtsYWJlbDpgTW9kYWxpZGFkYCxjaGlsZHJlbjooMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBzcGFjZS14LTYgbXQtMmAsY2hpbGRyZW46W2BJbmRpdmlkdWFsYCxgR3J1cGFsYF0ubWFwKG49PigwLCQuanN4cykoYGxhYmVsYCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTcwMCBjdXJzb3ItcG9pbnRlcmAsY2hpbGRyZW46WygwLCQuanN4KShgaW5wdXRgLHt0eXBlOmByYWRpb2AsbmFtZTpgbW9kXyR7ZS5pZH1gLGNoZWNrZWQ6ZS5wcm9wdWVzdGEubW9kYWxpZGFkPT09bixvbkNoYW5nZTooKT0+RSh0LG4pLGNsYXNzTmFtZTpgdy00IGgtNCB0ZXh0LWNhbWFyYS1yZWQgZm9jdXM6cmluZy1jYW1hcmEtcmVkYH0pLCgwLCQuanN4KShgc3BhbmAse2NoaWxkcmVuOm59KV19LG4pKX0pfSldfSldfSldfSxlLmlkKSksKDAsJC5qc3gpKGBidXR0b25gLHt0eXBlOmBidXR0b25gLG9uQ2xpY2s6RCxjbGFzc05hbWU6YHctZnVsbCBweS01IGJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLXJlZC0yMDAgdGV4dC1jYW1hcmEtcmVkIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSByb3VuZGVkLWxnIGhvdmVyOmJvcmRlci1jYW1hcmEtcmVkIGhvdmVyOmJnLXJlZC01MC81MCB0cmFuc2l0aW9uLWFsbCBncm91cCBiZy13aGl0ZWAsY2hpbGRyZW46KDAsJC5qc3hzKShgc3BhbmAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgdGV4dC1zbWAsY2hpbGRyZW46WygwLCQuanN4KShgc3ZnYCx7Y2xhc3NOYW1lOmB3LTUgaC01IGdyb3VwLWhvdmVyOnJvdGF0ZS05MCB0cmFuc2l0aW9uLXRyYW5zZm9ybWAsZmlsbDpgbm9uZWAsc3Ryb2tlOmBjdXJyZW50Q29sb3JgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46KDAsJC5qc3gpKGBwYXRoYCx7c3Ryb2tlTGluZWNhcDpgcm91bmRgLHN0cm9rZUxpbmVqb2luOmByb3VuZGAsc3Ryb2tlV2lkdGg6YDIuNWAsZDpgTTEyIDR2MTZtOC04SDRgfSl9KSxgQcOxYWRpciBudWV2byBkb2NlbnRlYF19KX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgYmctd2hpdGUgcC04IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBzaGFkb3ctc29mdGAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcGItNCBtYi02IGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMGAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctOSBoLTkgcm91bmRlZC1mdWxsIGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSBmb250LWJsYWNrIHRleHQtc21gLGNoaWxkcmVuOmAwM2B9KSwoMCwkLmpzeCkoYGgzYCx7Y2xhc3NOYW1lOmB0ZXh0LXhsIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LWdyYXktODAwYCxjaGlsZHJlbjpgSW5mb3JtYWNpw7NuIEFkaWNpb25hbGB9KV19KSwoMCwkLmpzeCkoYGg0YCx7Y2xhc3NOYW1lOmBmb250LWJvbGQgdGV4dC14cyB0ZXh0LWdyYXktNjAwIG1iLTMgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdGAsY2hpbGRyZW46YENMQVVTVUxBIElORk9STUFUSVZBIEEgQ0FORElEQVRPUyBET0NFTlRFU2B9KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdIHRleHQtZ3JheS01MDAgbGVhZGluZy1yZWxheGVkIHRleHQtanVzdGlmeSBzcGFjZS15LTMgb3ZlcmZsb3cteS1hdXRvIG1heC1oLTQ4IHAtNiBiZy1ncmF5LTUwIHJvdW5kZWQtbm9uZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGN1c3RvbS1zY3JvbGxiYXJgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBwYCx7Y2hpbGRyZW46W2BFbCByZXNwb25zYWJsZSBkZWwgdHJhdGFtaWVudG8gZGUgc3VzIGRhdG9zIHNlcsOhIGxhIGAsKDAsJC5qc3gpKGBzdHJvbmdgLHtjaGlsZHJlbjpgQ8OBTUFSQSBPRklDSUFMIERFIENPTUVSQ0lPLi4uYH0pLGAgKExBIEPDgU1BUkEgREUgQ09NRVJDSU8gREUgVE9MRURPKSwgZG9taWNpbGlhZGEgZW4gQ2FsbGUgRGluYW1hcmNhLCA0LCA0NTAwNSAtIFRvbGVkby4gTGEgZmluYWxpZGFkIGRlIGxvcyBkaWZlcmVudGVzIHRyYXRhbWllbnRvcyBxdWUgc2UgaGFyw6FuIHNvYnJlIHN1cyBkYXRvcyBwZXJzb25hbGVzIHNlcsOhIGxhIGRlIGluY2x1aXIgcHJvZmVzaW9uYWxlcyBhIGxhIGJvbHNhIGRlIGRvY2VudGVzIGhvbW9sb2dhZG9zLi4uYF19KSwoMCwkLmpzeCkoYHBgLHtjaGlsZHJlbjpgRWwgaW50ZXJlc2FkbyBjb25zZXJ2YXLDoSBlbCBkZXJlY2hvIGEgc29saWNpdGFyIGEgTEEgQ8OBTUFSQSBERSBDT01FUkNJTyBERSBUT0xFRE8gZWwgZWplcmNpY2lvIGRlbCBkZXJlY2hvIGRlIGFjY2VzbyBhIGxvcyBkYXRvcyBwZXJzb25hbGVzLi4uIG1lZGlhbnRlIHNvbGljaXR1ZCwgYW5leGFuZG8gZm90b2NvcGlhIGRlIHN1IEROSS4uLmB9KV19KSwoMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgbXQtNiBiZy1jYW1hcmEtcmVkIHAtNiByb3VuZGVkLW5vbmUgdGV4dC13aGl0ZWAsY2hpbGRyZW46KDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtc3RhcnQgc3BhY2UteC00IGN1cnNvci1wb2ludGVyIGdyb3VwYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBpbnB1dGAse3R5cGU6YGNoZWNrYm94YCxjbGFzc05hbWU6YG10LTEgdy01IGgtNSByb3VuZGVkIGJnLXdoaXRlIGJvcmRlci1ub25lIHRleHQtY2FtYXJhLXJlZCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpyaW5nLXdoaXRlIHRyYW5zaXRpb24tYWxsYCxjaGVja2VkOmUuYWNlcHRhX2NvbXVuaWNhY2lvbmVzLG9uQ2hhbmdlOmU9PmIoYGFjZXB0YV9jb211bmljYWNpb25lc2AsZS50YXJnZXQuY2hlY2tlZCl9KSwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQteHMgZm9udC1tZWRpdW0gbGVhZGluZy1yZWxheGVkIGdyb3VwLWhvdmVyOnRleHQtZ3JheS0yMDBgLGNoaWxkcmVuOmBEb3kgbWkgY29uc2VudGltaWVudG8gcGFyYSBxdWUgbGEgQ8OhbWFyYSBkZSBDb21lcmNpbyBkZSBUb2xlZG8gcHVlZGEgdXRpbGl6YXIgbWlzIGRhdG9zIHBhcmEgcmVtaXRpcm1lIGluZm9ybWFjacOzbiBzb2JyZSBjb252b2NhdG9yaWFzLCBhY3RpdmlkYWRlcywgbm90aWNpYXMgcmVsYWNpb25hZGFzIHkgYm9sZXRpbmVzIGluZm9ybWF0aXZvcy5gfSldfSl9KSwoMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgbXQtMTAgcC00IGJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLW5vbmVgLGNoaWxkcmVuOigwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuIGdhcC0zYCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmB0ZXh0LXhzIHRleHQtZ3JheS02MDAgbGVhZGluZy10aWdodGAsY2hpbGRyZW46W2YuY2FyZ2FuZG8/KDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmBpdGFsaWNgLGNoaWxkcmVuOmBDYXJnYW5kbyBib3JyYWRvcuKApmB9KTpmLnVzdWFyaW9Mb2d1ZWFkbz8oMCwkLmpzeHMpKCQuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGZvbnQtYm9sZCB0ZXh0LWNhbWFyYS1yZWQgdXBwZXJjYXNlYCxjaGlsZHJlbjpgQm9ycmFkb3IgZW4gdHUgY3VlbnRhYH0pLGYudWx0aW1hQWN0dWFsaXphY2lvbiYmKDAsJC5qc3hzKShgZGl2YCx7Y2hpbGRyZW46W2DDmmx0aW1hIHZlcnNpw7NuIGd1YXJkYWRhOiBgLCgwLCQuanN4KShgc3Ryb25nYCx7Y2hpbGRyZW46bmV3IERhdGUoZi51bHRpbWFBY3R1YWxpemFjaW9uLnJlcGxhY2UoYCBgLGBUYCkpLnRvTG9jYWxlU3RyaW5nKGBlcy1FU2ApfSldfSksKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHRleHQtZ3JheS01MDBgLGNoaWxkcmVuOmBQdWVkZXMgcmV0b21hcmxvIGRlc2RlIGN1YWxxdWllciBkaXNwb3NpdGl2byBpbmljaWFuZG8gc2VzacOzbi5gfSldfSk6KDAsJC5qc3hzKSgkLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmBmb250LWJvbGQgdGV4dC1ncmF5LTcwMCB1cHBlcmNhc2VgLGNoaWxkcmVuOmBCb3JyYWRvciBsb2NhbGB9KSwoMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgdGV4dC1ncmF5LTUwMGAsY2hpbGRyZW46YE5vIGhhcyBpbmljaWFkbyBzZXNpw7NuOiB0dSBib3JyYWRvciBzZSBndWFyZGEgc29sbyBlbiBlc3RlIG5hdmVnYWRvci5gfSldfSksZi5lcnJvciYmKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHRleHQtcmVkLTYwMCBmb250LWJvbGQgbXQtMWAsY2hpbGRyZW46Zi5lcnJvcn0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBnYXAtMiBmbGV4LXNocmluay0wYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBidXR0b25gLHt0eXBlOmBidXR0b25gLG9uQ2xpY2s6ZyxkaXNhYmxlZDpmLmd1YXJkYW5kb3x8Zi5jYXJnYW5kbyxjbGFzc05hbWU6YGJnLWdyYXktNzAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSByb3VuZGVkLW5vbmUgaG92ZXI6YmctZ3JheS04MDAgZGlzYWJsZWQ6b3BhY2l0eS02MCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMmAsY2hpbGRyZW46Zi5ndWFyZGFuZG8/KDAsJC5qc3hzKSgkLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsJC5qc3hzKShgc3ZnYCx7Y2xhc3NOYW1lOmBhbmltYXRlLXNwaW4gaC00IHctNGAsZmlsbDpgbm9uZWAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBjaXJjbGVgLHtjbGFzc05hbWU6YG9wYWNpdHktMjVgLGN4OmAxMmAsY3k6YDEyYCxyOmAxMGAsc3Ryb2tlOmBjdXJyZW50Q29sb3JgLHN0cm9rZVdpZHRoOmA0YH0pLCgwLCQuanN4KShgcGF0aGAse2NsYXNzTmFtZTpgb3BhY2l0eS03NWAsZmlsbDpgY3VycmVudENvbG9yYCxkOmBNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6YH0pXX0pLGBHdWFyZGFuZG/igKZgXX0pOigwLCQuanN4cykoJC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLCQuanN4KShgc3ZnYCx7Y2xhc3NOYW1lOmB3LTQgaC00YCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgMmAsZDpgTTggN0g1YTIgMiAwIDAwLTIgMnY5YTIgMiAwIDAwMiAyaDE0YTIgMiAwIDAwMi0yVjlhMiAyIDAgMDAtMi0yaC0zbS0xIDRsLTMgM20wIDBsLTMtM20zIDNWNGB9KX0pLGBHdWFyZGFyIGJvcnJhZG9yYF19KX0pLCgwLCQuanN4KShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOl8sY2xhc3NOYW1lOmBiZy13aGl0ZSB0ZXh0LWdyYXktNjAwIGJvcmRlciBib3JkZXItZ3JheS00MDAgcHgtMyBweS0yIHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSByb3VuZGVkLW5vbmUgaG92ZXI6YmctZ3JheS0xMDBgLHRpdGxlOmBEZXNjYXJ0YXIgYm9ycmFkb3IgeSBlbXBlemFyIGRlIGNlcm9gLGNoaWxkcmVuOmBEZXNjYXJ0YXJgfSldfSldfSl9KSwoMCwkLmpzeCkoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsb25DbGljazp2LGRpc2FibGVkOnUsY2xhc3NOYW1lOmBtdC00IHctZnVsbCBiZy13aGl0ZSB0ZXh0LWNhbWFyYS1yZWQgYm9yZGVyLTIgYm9yZGVyLWNhbWFyYS1yZWQgcHktNCByb3VuZGVkLW5vbmUgZm9udC1ibGFjayB0ZXh0LWxnIGhvdmVyOmJnLXJlZC01MCB0cmFuc2l0aW9uLWFsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBkaXNhYmxlZDpvcGFjaXR5LTYwYCxjaGlsZHJlbjp1PygwLCQuanN4cykoJC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLCQuanN4cykoYHN2Z2Ase2NsYXNzTmFtZTpgYW5pbWF0ZS1zcGluIGgtNSB3LTVgLGZpbGw6YG5vbmVgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46WygwLCQuanN4KShgY2lyY2xlYCx7Y2xhc3NOYW1lOmBvcGFjaXR5LTI1YCxjeDpgMTJgLGN5OmAxMmAscjpgMTBgLHN0cm9rZTpgY3VycmVudENvbG9yYCxzdHJva2VXaWR0aDpgNGB9KSwoMCwkLmpzeCkoYHBhdGhgLHtjbGFzc05hbWU6YG9wYWNpdHktNzVgLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpgTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0emB9KV19KSxgR0VORVJBTkRPIFBERi4uLmBdfSk6KDAsJC5qc3hzKSgkLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsJC5qc3gpKGBzdmdgLHtjbGFzc05hbWU6YHctNSBoLTVgLGZpbGw6YG5vbmVgLHN0cm9rZTpgY3VycmVudENvbG9yYCx2aWV3Qm94OmAwIDAgMjQgMjRgLGNoaWxkcmVuOigwLCQuanN4KShgcGF0aGAse3N0cm9rZUxpbmVjYXA6YHJvdW5kYCxzdHJva2VMaW5lam9pbjpgcm91bmRgLHN0cm9rZVdpZHRoOmAyYCxkOmBNMTIgMTB2Nm0wIDBsLTMtM20zIDNsMy0zTTMgMTdWN2EyIDIgMCAwMTItMmg2bDIgMmg2YTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0yemB9KX0pLGBERVNDQVJHQVIgUERGIERFIExBIFNPTElDSVRVRGBdfSl9KSwoMCwkLmpzeCkoYGJ1dHRvbmAse3R5cGU6YHN1Ym1pdGAsZGlzYWJsZWQ6aSxjbGFzc05hbWU6YG10LTQgdy1mdWxsIGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSBweS00IHJvdW5kZWQtbGcgZm9udC1ibGFjayB0ZXh0LXhsIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIGhvdmVyOmJnLWNhbWFyYS1yZWQtZGFyayB0cmFuc2l0aW9uLWFsbCBzaGFkb3ctc29mdC1sZyBob3ZlcjpzaGFkb3ctbGcgZGlzYWJsZWQ6b3BhY2l0eS01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtM2AsY2hpbGRyZW46aT8oMCwkLmpzeHMpKCQuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCwkLmpzeHMpKGBzdmdgLHtjbGFzc05hbWU6YGFuaW1hdGUtc3BpbiBoLTYgdy02IHRleHQtd2hpdGVgLGZpbGw6YG5vbmVgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46WygwLCQuanN4KShgY2lyY2xlYCx7Y2xhc3NOYW1lOmBvcGFjaXR5LTI1YCxjeDpgMTJgLGN5OmAxMmAscjpgMTBgLHN0cm9rZTpgY3VycmVudENvbG9yYCxzdHJva2VXaWR0aDpgNGB9KSwoMCwkLmpzeCkoYHBhdGhgLHtjbGFzc05hbWU6YG9wYWNpdHktNzVgLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpgTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0em0yIDUuMjkxQTcuOTYyIDcuOTYyIDAgMDE0IDEySDBjMCAzLjA0MiAxLjEzNSA1LjgyNCAzIDcuOTM4bDMtMi42NDd6YH0pXX0pLGBQUk9DRVNBTkRPLi4uYF19KTpgRU5WSUFSIFNPTElDSVRVRCBBIExBIEPDgU1BUkFgfSldfSldfSl9KV19KX12YXIgbnk9YHctZnVsbCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgcC0yIGJnLXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1jYW1hcmEtcmVkLzMwIGZvY3VzOmJvcmRlci1jYW1hcmEtcmVkYCxyeT0oe29wdGlvbnM6ZSxzZWxlY3RlZDp0LG9uQ2hhbmdlOm4scGxhY2Vob2xkZXI6cn0pPT57bGV0W2ksYV09KDAseS51c2VTdGF0ZSkoITEpLFtvLHNdPSgwLHkudXNlU3RhdGUpKGBgKSxjPSgwLHkudXNlUmVmKShudWxsKTsoMCx5LnVzZUVmZmVjdCkoKCk9PntpZighaSlyZXR1cm47bGV0IGU9ZT0+e2MuY3VycmVudCYmIWMuY3VycmVudC5jb250YWlucyhlLnRhcmdldCkmJihhKCExKSxzKGBgKSl9LHQ9ZT0+e2Uua2V5PT09YEVzY2FwZWAmJihhKCExKSxzKGBgKSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGBtb3VzZWRvd25gLGUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGtleWRvd25gLHQpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgbW91c2Vkb3duYCxlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBrZXlkb3duYCx0KX19LFtpXSk7bGV0IGw9ZS5maWx0ZXIoZT0+ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG8udG9Mb3dlckNhc2UoKSkmJiF0LmluY2x1ZGVzKGUpKSx1PWU9PntuKHQuaW5jbHVkZXMoZSk/dC5maWx0ZXIodD0+dCE9PWUpOlsuLi50LGVdKX07cmV0dXJuKDAsJC5qc3hzKShgZGl2YCx7cmVmOmMsY2xhc3NOYW1lOmByZWxhdGl2ZWAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgbWluLWgtWzQ0cHhdIHAtMS41IGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCBiZy13aGl0ZSBmbGV4IGZsZXgtd3JhcCBnYXAtMS41IGN1cnNvci10ZXh0IHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXdpdGhpbjpib3JkZXItY2FtYXJhLXJlZCBmb2N1cy13aXRoaW46cmluZy0yIGZvY3VzLXdpdGhpbjpyaW5nLWNhbWFyYS1yZWQvMzBgLG9uQ2xpY2s6KCk9PmEoITApLGNoaWxkcmVuOlt0Lmxlbmd0aD09PTAmJiFvJiYoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQtZ3JheS00MDAgcC0xIHRleHQtc21gLGNoaWxkcmVuOnJ9KSx0Lm1hcChlPT4oMCwkLmpzeHMpKGBzcGFuYCx7Y2xhc3NOYW1lOmBiZy1yZWQtNTAgdGV4dC1jYW1hcmEtcmVkIHRleHQtWzExcHhdIHB4LTIuNSBweS0xIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGZvbnQtc2VtaWJvbGQgYm9yZGVyIGJvcmRlci1yZWQtMTAwYCxjaGlsZHJlbjpbZSwoMCwkLmpzeCkoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsb25DbGljazp0PT57dC5zdG9wUHJvcGFnYXRpb24oKSx1KGUpfSxjbGFzc05hbWU6YGhvdmVyOnRleHQtY2FtYXJhLXJlZC1kYXJrIGZvbnQtYmxhY2sgbGVhZGluZy1ub25lYCxjaGlsZHJlbjpgw5dgfSldfSxlKSksKDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpgZmxleC0xIG91dGxpbmUtbm9uZSB0ZXh0LXNtIHAtMSBtaW4tdy1bMTIwcHhdIGJnLXRyYW5zcGFyZW50YCx2YWx1ZTpvLG9uQ2hhbmdlOmU9PnMoZS50YXJnZXQudmFsdWUpLG9uRm9jdXM6KCk9PmEoITApfSldfSksaSYmKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB6LTUwIHctZnVsbCBtdC0xIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1tZCBzaGFkb3ctc29mdC1sZyBtYXgtaC02MCBvdmVyZmxvdy15LWF1dG9gLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHAtMiBib3JkZXItYiBzdGlja3kgdG9wLTAgYmctZ3JheS01MCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlcmAsY2hpbGRyZW46YE9wY2lvbmVzIGRpc3BvbmlibGVzYH0pLCgwLCQuanN4KShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOigpPT5hKCExKSxjbGFzc05hbWU6YHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBsZWFkaW5nLW5vbmUgdGV4dC1sZ2AsY2hpbGRyZW46YMOXYH0pXX0pLGwubGVuZ3RoPT09MD8oMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgcC0zIHRleHQtc20gdGV4dC1ncmF5LTUwMCBpdGFsaWNgLGNoaWxkcmVuOmBObyBzZSBlbmNvbnRyYXJvbiByZXN1bHRhZG9zYH0pOmwubWFwKGU9PigwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmBwLTIuNSB0ZXh0LXhzIGhvdmVyOmJnLXJlZC01MCBob3Zlcjp0ZXh0LWNhbWFyYS1yZWQgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGxhc3Q6Ym9yZGVyLTAgdHJhbnNpdGlvbi1jb2xvcnNgLG9uQ2xpY2s6KCk9Pnt1KGUpLHMoYGApfSxjaGlsZHJlbjplfSxlKSldfSldfSl9LGl5PSh7bGFiZWw6ZSxjaGlsZHJlbjp0LHJlcXVpcmVkOm59KT0+KDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBtYi00YCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGJsb2NrIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIG1iLTEuNWAsY2hpbGRyZW46W2UsYCBgLG4mJigwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkYCxjaGlsZHJlbjpgKmB9KV19KSx0XX0pLGF5PSh7bGFiZWw6ZSxyZXF1aXJlZDp0LG11bHRpcGxlOm49ITEsb25DaGFuZ2U6cn0pPT4oMCwkLmpzeCkoaXkse2xhYmVsOmUscmVxdWlyZWQ6dCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7dHlwZTpgZmlsZWAsbXVsdGlwbGU6bixvbkNoYW5nZTpyLGNsYXNzTmFtZTpgYmxvY2sgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTUwMCBmaWxlOm1yLTQgZmlsZTpweS0yIGZpbGU6cHgtNCBmaWxlOnJvdW5kZWQtbWQgZmlsZTpib3JkZXItMCBmaWxlOnRleHQtc20gZmlsZTpmb250LXNlbWlib2xkIGZpbGU6YmctcmVkLTUwIGZpbGU6dGV4dC1jYW1hcmEtcmVkIGhvdmVyOmZpbGU6YmctcmVkLTEwMCBmaWxlOmN1cnNvci1wb2ludGVyIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCBwLTEuNSBiZy13aGl0ZWB9KX0pLG95PWMoe2dlbmVyYXJQREZJbmRpdmlkdWFsOigpPT52eX0pLHN5LGN5LGx5LHV5LGR5LGZ5LHB5LG15LGh5LGd5LF95LHZ5LHl5PW8oKCgpPT57cF8oKSxOdigpLHN5PVsxOTYsMTgsNDhdLGN5PTIxMCxseT0xNCx1eT1lPT4oZXx8YGApLnNwbGl0KGAuYClbMF0udHJpbSgpLGR5PWU9PihlfHxbXSkubWFwKHV5KS5maWx0ZXIoQm9vbGVhbikuam9pbihgLGApLGZ5PSgpPT57bGV0IGU9bmV3IERhdGUsdD1bYGVuZXJvYCxgZmVicmVyb2AsYG1hcnpvYCxgYWJyaWxgLGBtYXlvYCxganVuaW9gLGBqdWxpb2AsYGFnb3N0b2AsYHNlcHRpZW1icmVgLGBvY3R1YnJlYCxgbm92aWVtYnJlYCxgZGljaWVtYnJlYF0sbj1TdHJpbmcoZS5nZXRIb3VycygpKS5wYWRTdGFydCgyLGAwYCkscj1TdHJpbmcoZS5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsYDBgKSxpPVN0cmluZyhlLmdldFNlY29uZHMoKSkucGFkU3RhcnQoMixgMGApO3JldHVybmAke2UuZ2V0RGF0ZSgpfSBkZSAke3RbZS5nZXRNb250aCgpXX0gZGUgJHtlLmdldEZ1bGxZZWFyKCl9LCAke259OiR7cn06JHtpfWB9LHB5PShlLHQsbik9PntlLnNldEZpbGxDb2xvciguLi5zeSksZS5zZXRUZXh0Q29sb3IoMjU1LDI1NSwyNTUpLGUuc2V0Rm9udFNpemUoMTApLGUuc2V0Rm9udChgaGVsdmV0aWNhYCxgYm9sZGApO2xldCByPWUuc3BsaXRUZXh0VG9TaXplKHQsY3ktbHkqMi04KTtpZihyLmxlbmd0aD4xKXtsZXQgdD01K3IubGVuZ3RoKjU7cmV0dXJuIGUucmVjdChseSxuLGN5LWx5KjIsdCxgRmApLGUudGV4dChyLGN5LzIsbis0Kyh0LTQpLzItKHIubGVuZ3RoLTEpKjIuNSx7YWxpZ246YGNlbnRlcmAsYmFzZWxpbmU6YG1pZGRsZWB9KSxlLnNldFRleHRDb2xvcigwLDAsMCksbit0KzR9cmV0dXJuIGUucmVjdChseSxuLGN5LWx5KjIsOSxgRmApLGUudGV4dCh0LGN5LzIsbis1LjUse2FsaWduOmBjZW50ZXJgfSksZS5zZXRUZXh0Q29sb3IoMCwwLDApLG4rMTN9LG15PShlLHQsbj0zMCk9PnQrbj4yODU/KGUuYWRkUGFnZSgpLDIwKTp0LGh5PShlLHQsbixyKT0+KGJ2KGUse3N0YXJ0WTpyLGhlYWQ6W3RdLGJvZHk6W25dLHRoZW1lOmBncmlkYCxoZWFkU3R5bGVzOntmaWxsQ29sb3I6WzI1NSwyNTUsMjU1XSx0ZXh0Q29sb3I6MCxmb250U3R5bGU6YGJvbGRgLGxpbmVDb2xvcjowLGxpbmVXaWR0aDouMX0sYm9keVN0eWxlczp7dGV4dENvbG9yOjAsbGluZUNvbG9yOjAsbGluZVdpZHRoOi4xfSxzdHlsZXM6e2ZvbnRTaXplOjgsY2VsbFBhZGRpbmc6Mn0sbWFyZ2luOntsZWZ0Omx5LHJpZ2h0Omx5fX0pLGUubGFzdEF1dG9UYWJsZS5maW5hbFkrNCksZ3k9KGUsdCxuLHIpPT5uLmxlbmd0aD8oYnYoZSx7c3RhcnRZOnIsaGVhZDpbdF0sYm9keTpuLHRoZW1lOmBncmlkYCxoZWFkU3R5bGVzOntmaWxsQ29sb3I6WzI1NSwyNTUsMjU1XSx0ZXh0Q29sb3I6MCxmb250U3R5bGU6YGJvbGRgLGxpbmVDb2xvcjowLGxpbmVXaWR0aDouMX0sYm9keVN0eWxlczp7dGV4dENvbG9yOjAsbGluZUNvbG9yOjAsbGluZVdpZHRoOi4xfSxzdHlsZXM6e2ZvbnRTaXplOjgsY2VsbFBhZGRpbmc6Mn0sbWFyZ2luOntsZWZ0Omx5LHJpZ2h0Omx5fX0pLGUubGFzdEF1dG9UYWJsZS5maW5hbFkrNCk6cixfeT0oZSx0LG4scik9PntlLnNldEZvbnRTaXplKDkpLGUuc2V0Rm9udChgaGVsdmV0aWNhYCxgYm9sZGApLGUudGV4dCh0LGx5LHIpO2xldCBpPWUuZ2V0VGV4dFdpZHRoKHQpO3JldHVybiBlLnNldEZvbnQoYGhlbHZldGljYWAsYG5vcm1hbGApLGUudGV4dChufHxgYCxseStpKzIscikscis2fSx2eT1lPT57bGV0IHQ9bmV3IFooe3VuaXQ6YG1tYCxmb3JtYXQ6YGE0YH0pO3Quc2V0Rm9udFNpemUoMTYpLHQuc2V0Rm9udChgaGVsdmV0aWNhYCxgYm9sZGApLHQuc2V0VGV4dENvbG9yKC4uLnN5KSx0LnRleHQoYFNPTElDSVRVRCBERSBIT01PTE9HQUNJw5NOYCxjeS8yLDI1LHthbGlnbjpgY2VudGVyYH0pLHQuc2V0VGV4dENvbG9yKDAsMCwwKSx0LnNldEZvbnRTaXplKDExKSx0LnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSx0LnRleHQoYERvY2VudGUgaW5kaXZpZHVhbCDCtyBQZXJzb25hIGbDrXNpY2EgcG9yIGN1ZW50YSBwcm9waWFgLGN5LzIsMzMse2FsaWduOmBjZW50ZXJgfSksdC5zZXRGb250U2l6ZSgxMCksdC5zZXRGb250KGBoZWx2ZXRpY2FgLGBpdGFsaWNgKSx0LnRleHQoYEPDoW1hcmEgT2ZpY2lhbCBkZSBDb21lcmNpbywgSW5kdXN0cmlhIHkgU2VydmljaW9zIGRlIFRvbGVkb2AsY3kvMiw0MCx7YWxpZ246YGNlbnRlcmB9KSx0LnRleHQoYEV4cGVkaWVudGUgQU1ILzAxLzIwMjZgLGN5LzIsNDYse2FsaWduOmBjZW50ZXJgfSk7bGV0IG49NTY7bj1weSh0LGAwMS4gREFUT1MgUEVSU09OQUxFUyBERUwgU09MSUNJVEFOVEUtRE9DRU5URWAsbiksbj1oeSh0LFtgTm9tYnJlYCxgQXBlbGxpZG9zYCxgTklGIC8gTklFYCxgRmVjaGEgZGUgbmFjaW1pZW50b2BdLFtlLm5vbWJyZSxlLmFwZWxsaWRvcyxlLm5pZixlLmZlY2hhX25hY10sbiksbj1oeSh0LFtgTmFjaW9uYWxpZGFkYCxgRGlyZWNjacOzbiBwYXJ0aWN1bGFyYCxgTXVuaWNpcGlvYCxgUHJvdmluY2lhYF0sW2UubmFjaW9uYWxpZGFkLGUuZGlyZWNjaW9uLGUubXVuaWNpcGlvLGUucHJvdmluY2lhXSxuKSxuPWh5KHQsW2BDw7NkaWdvIHBvc3RhbGAsYFRlbMOpZm9ub2AsYFRlbMOpZm9ubyBtw7N2aWxgLGBDb3JyZW8gZWxlY3Ryw7NuaWNvYF0sW2UuY3AsZS50ZWxlZm9ubyxlLm1vdmlsLGUuZW1haWxdLG4pLG49X3kodCxgU0lUVUFDScOTTiBQUk9GRVNJT05BTDpgLGUuc2l0dWFjaW9ufHxg4oCUYCxuKSxuPW15KHQsbiwyNSksbj1weSh0LGAwMi4gRE9DVU1FTlRBQ0nDk04gUEVSU09OQUwgQURKVU5UQURBYCxuKSx0LnNldEZvbnRTaXplKDkpLHQuc2V0Rm9udChgaGVsdmV0aWNhYCxgaXRhbGljYCksdC50ZXh0KGBMb3MgYXJjaGl2b3MgUERGIHNlIGFkanVudGFuIHBvciBzZXBhcmFkbyBlbiBsYSBzb2xpY2l0dWQgKEROSSwgQ1YsIGNlcnRpZmljYWRvcywgZXRjLilgLGx5LG4pLG4rPTgsbj1teSh0LG4sMzApLG49cHkodCxgMDMuIENVUlNPUyBQQVJBIExPUyBRVUUgREVTRUEgSE9NT0xPR0FSU0VgLG4pLHQuc2V0Rm9udFNpemUoOSksdC5zZXRGb250KGBoZWx2ZXRpY2FgLGBib2xkYCksdC50ZXh0KGBDVVJTT1MgU0VMRUNDSU9OQURPUzpgLGx5LG4pLG4rPTUsdC5zZXRGb250KGBoZWx2ZXRpY2FgLGBub3JtYWxgKTtsZXQgcj0oZS5jdXJzb3N8fFtdKS5qb2luKGAsIGApLGk9dC5zcGxpdFRleHRUb1NpemUocnx8YOKAlGAsY3ktbHkqMik7dC50ZXh0KGksbHksbiksbis9aS5sZW5ndGgqNCs2LG49bXkodCxuLDQwKSxuPXB5KHQsYDA0LiBEQVRPUyBBQ0FEw4lNSUNPU2AsbiksdC5zZXRGb250U2l6ZSg5KSx0LnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSx0LnRleHQoYEEuIFRJVFVMQUNJw5NOIEhBQklMSVRBTlRFIFJFTEFDSU9OQURBIENPTiBMQVMgTUFURVJJQVMgQSBJTVBBUlRJUjpgLGx5LG4pLG4rPTQ7bGV0IGE9KGUubWVyaXRvcz8uaGFiaWxpdGFudGV8fFtdKS5maWx0ZXIoZT0+ZS50aXR1bG98fGUuY2VudHJvfHxlLmFuaW98fGUuY3Vyc29zJiZlLmN1cnNvcy5sZW5ndGgpLm1hcChlPT5bZS50aXR1bG98fGBgLGUuY2VudHJvfHxgYCxlLmFuaW98fGBgLGR5KGUuY3Vyc29zKSxgYF0pO2EubGVuZ3RoP249Z3kodCxbYFRpdHVsYWNpw7NuYCxgVW5pdmVyc2lkYWQgLyBDZW50cm9gLGBBw7FvYCxgQ8OzZGlnbyBkZSBjdXJzb3NgLGBDb3BpYSBkZWwgdMOtdHVsb2BdLGEsbik6bis9NCxbe2tleTpgb3Ryb3NfdGl0dWxvc2AsbGFiZWw6YEIuIE9UUk9TIFTDjVRVTE9TIFVOSVZFUlNJVEFSSU9TIChMSUNFTkNJQVRVUkFTIE8gR1JBRE9TKWB9LHtrZXk6YG1hc18zMDBgLGxhYmVsOmBDLiBDVVJTT1MgLyBNw4FTVEVSIFkgT1RSQVMgVElUVUxBQ0lPTkVTIChNw4FTIERFIDMwMCBILik6YH0se2tleTpgcjIwMV8zMDBgLGxhYmVsOmBELiBDVVJTT1MgLyBNw4FTVEVSIFkgT1RSQVMgVElUVUxBQ0lPTkVTIChERSAyMDEgQSAzMDAgSCk6YH0se2tleTpgcjEwMV8yMDBgLGxhYmVsOmBFLiBDVVJTT1MgWSBPVFJBUyBUSVRVTEFDSU9ORVMgKERFIDEwMSBBIDIwMCBIKTpgfSx7a2V5OmByMzBfMTAwYCxsYWJlbDpgRi4gQ1VSU09TIFkgT1RSQVMgVElUVUxBQ0lPTkVTIChERSAzMCBBIDEwMCBIKTpgfV0uZm9yRWFjaChyPT57bj1teSh0LG4sMTUpO2xldCBpPWUubWVyaXRvcz8uW3Iua2V5XSxhPWk/LmFjdGl2bz09PWBTw41gO3Quc2V0Rm9udFNpemUoOSksdC5zZXRGb250KGBoZWx2ZXRpY2FgLGBib2xkYCksdC50ZXh0KHIubGFiZWwsbHksbiksYSYmKHQuc2V0Rm9udChgaGVsdmV0aWNhYCxgbm9ybWFsYCksdC50ZXh0KGAgU8OtYCxseSt0LmdldFRleHRXaWR0aChyLmxhYmVsKSxuKSksbis9NixhJiZpPy5pdGVtcz8ubGVuZ3RoJiYobj1neSh0LFtgVGl0dWxhY2nDs25gLGBDZW50cm9gLGBIb3Jhc2AsYEHDsW9gLGBDb3BpYWBdLGkuaXRlbXMubWFwKGU9PltlLnRpdHVsb3x8YGAsZS5jZW50cm98fGBgLGUuaG9yYXN8fGBgLGUuYW5pb3x8YGAsYGBdKSxuKSl9KSxuPW15KHQsbiw0MCksbj1weSh0LGAwNS4gRVhQRVJJRU5DSUEgRE9DRU5URSAow5pMVElNT1MgNSBBw5FPUylgLG4pO2xldCBvPShlLmV4cGVyaWVuY2lhfHxbXSkuZmlsdGVyKGU9PmUuaW5zdGl0dWNpb258fGUubWF0ZXJpYXx8ZS5kZXNkZXx8ZS5oYXN0YXx8ZS5ob3JhcykubWFwKGU9PltlLmluc3RpdHVjaW9ufHxgYCxlLm1hdGVyaWF8fGBgLGUuZGVzZGV8fGBgLGUuaGFzdGF8fGBgLGUuaG9yYXN8fGBgLGBgXSk7by5sZW5ndGg/bj1neSh0LFtgSW5zdGl0dWNpw7NuYCxgTWF0ZXJpYSBpbXBhcnRpZGFgLGBEZXNkZWAsYEhhc3RhYCxgSG9yYXNgLGBDb3BpYSBkZWwgY2VydGlmaWNhZG9gXSxvLG4pOih0LnNldEZvbnRTaXplKDkpLHQuc2V0Rm9udChgaGVsdmV0aWNhYCxgaXRhbGljYCksdC50ZXh0KGBTaW4gZXhwZXJpZW5jaWEgZG9jZW50ZSByZWdpc3RyYWRhLmAsbHksbiksbis9Niksbj1teSh0LG4sMjUpLG49cHkodCxgMDYuIFBST1BVRVNUQSBQRURBR8OTR0lDQWAsbiksdC5zZXRGb250U2l6ZSg5KSx0LnNldEZvbnQoYGhlbHZldGljYWAsYGJvbGRgKSx0LnRleHQoYE1vZGFsaWRhZCBkZSBpbXBhcnRpY2nDs246YCxseSxuKSx0LnNldEZvbnQoYGhlbHZldGljYWAsYG5vcm1hbGApLHQudGV4dChgIGArKGUucHJvcHVlc3RhPy5tb2RhbGlkYWR8fGBJbmRpdmlkdWFsYCksbHkrdC5nZXRUZXh0V2lkdGgoYE1vZGFsaWRhZCBkZSBpbXBhcnRpY2nDs246YCksbiksbis9Nix0LnNldEZvbnQoYGhlbHZldGljYWAsYGl0YWxpY2ApLHQudGV4dChgTGEgcHJvcHVlc3RhIHBlZGFnw7NnaWNhIHNlIGFwb3J0YSBlbiBhcmNoaXZvcyBQREYgYWRqdW50b3MgYSBsYSBzb2xpY2l0dWQuYCxseSxuKSxuKz04LG49bXkodCxuLDM1KSxuPXB5KHQsYDA3LiBERUNMQVJBQ0lPTkVTIFkgQ09OU0VOVElNSUVOVE8gUkdQRGAsbiksbj1feSh0LGBTT0xJQ0lUQSBRVUUgU0UgVEVOR0EgUE9SIFBSRVNFTlRBREEgRElDSEEgRE9DVU1FTlRBQ0nDk046YCxlLmFjZXB0YV9zb2xpY2l0dWQ/YFPDrWA6YE5vYCxuKSxuPV95KHQsYERFQ0xBUkEgQkFKTyBTVSBSRVNQT05TQUJJTElEQUQgQ0FEQSBVTkEgREUgTEFTIENPTkRJQ0lPTkVTIEVTVEFCTEVDSURBUzpgLGUuYWNlcHRhX2RlY2xhcmFjaW9uP2BTw61gOmBOb2Asbiksbj1feSh0LGBBQ0VQVEEgRUwgVFJBVEFNSUVOVE8gREUgREFUT1MgREUgQ0FSw4FDVEVSIFBFUlNPTkFMOmAsZS5hY2VwdGFfcmdwZD9gU8OtYDpgTm9gLG4pLG49X3kodCxgQUNFUFRBIFJFQ0lCSVIgQ09NVU5JQ0FDSU9ORVMgSU5GT1JNQVRJVkFTOmAsZS5hY2VwdGFfY29tdW5pY2FjaW9uZXM/YFPDrWA6YE5vYCxuKTtsZXQgcz10LmludGVybmFsLnBhZ2VzLmxlbmd0aC0xO3Quc2V0UGFnZShzKSx0LnNldEZvbnRTaXplKDgpLHQuc2V0Rm9udChgaGVsdmV0aWNhYCxgaXRhbGljYCksdC5zZXRUZXh0Q29sb3IoODAsODAsODApLHQudGV4dChgRmVjaGEgZGUgZ2VuZXJhY2nDs246ICR7ZnkoKX1gLGN5LWx5LDI4NSx7YWxpZ246YHJpZ2h0YH0pO2xldCBjPWAkeyhlLmFwZWxsaWRvc3x8YHNvbGljaXRhbnRlYCkucmVwbGFjZSgvW15hLXpBLVowLTldL2csYF9gKS5zbGljZSgwLDMwKX1fJHsoZS5ub21icmV8fGBgKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZyxgX2ApLnNsaWNlKDAsMzApfV9ob21vbG9nYWNpb25gLnJlcGxhY2UoL18rJC8sYGApfHxgc29saWNpdHVkYDt0LnNhdmUoYCR7Y30ucGRmYCl9fSkpO2soKTt2YXIgYnk9e25vbWJyZTpgYCxhcGVsbGlkb3M6YGAsbmlmOmBgLGZlY2hhX25hYzpgYCxuYWNpb25hbGlkYWQ6YEVzcGHDsW9sYWAsZGlyZWNjaW9uOmBgLG11bmljaXBpbzpgYCxwcm92aW5jaWE6YGAsY3A6YGAsdGVsZWZvbm86YGAsbW92aWw6YGAsZW1haWw6YGAsc2l0dWFjaW9uOmBUcmFiYWphZG9yIHBvciBjdWVudGEgcHJvcGlhIChhdXTDs25vbW8pYCxjdXJzb3M6W10sbWVyaXRvczp7aGFiaWxpdGFudGU6W3t0aXR1bG86YGAsY2VudHJvOmBgLGFuaW86YGAsY3Vyc29zOltdfV0sb3Ryb3NfdGl0dWxvczp7YWN0aXZvOmBOT2AsaXRlbXM6W119LG1hc18zMDA6e2FjdGl2bzpgTk9gLGl0ZW1zOltdfSxyMjAxXzMwMDp7YWN0aXZvOmBOT2AsaXRlbXM6W119LHIxMDFfMjAwOnthY3Rpdm86YE5PYCxpdGVtczpbXX0scjMwXzEwMDp7YWN0aXZvOmBOT2AsaXRlbXM6W119fSxleHBlcmllbmNpYTpbe2luc3RpdHVjaW9uOmBgLG1hdGVyaWE6YGAsZGVzZGU6YGAsaGFzdGE6YGAsaG9yYXM6YGB9XSxwcm9wdWVzdGE6e21vZGFsaWRhZDpgSW5kaXZpZHVhbGB9LGFjZXB0YV9zb2xpY2l0dWQ6ITEsYWNlcHRhX2RlY2xhcmFjaW9uOiExLGFjZXB0YV9yZ3BkOiExLGFjZXB0YV9jb211bmljYWNpb25lczohMX0seHk9W2BUcmFiYWphZG9yIHBvciBjdWVudGEgcHJvcGlhIChhdXTDs25vbW8pYCxgVHJhYmFqYWRvciBwb3IgY3VlbnRhIGFqZW5hYCxgRW4gZGVzZW1wbGVvYCxgT3RyYWBdLFN5PWBjYW1hcmFfYm9ycmFkb3JfaW5kaXZpZHVhbF9sb2NhbGA7ZnVuY3Rpb24gQ3koKXtsZXRbZSx0XT0oMCx5LnVzZVN0YXRlKShieSksW24scl09KDAseS51c2VTdGF0ZSkoITEpLFtpLGFdPSgwLHkudXNlU3RhdGUpKG51bGwpLFtvLHNdPSgwLHkudXNlU3RhdGUpKCExKSxbYyxsXT0oMCx5LnVzZVN0YXRlKSghMSksW3UsZF09KDAseS51c2VTdGF0ZSkoe2NhcmdhbmRvOiEwLGd1YXJkYW5kbzohMSx1c3VhcmlvTG9ndWVhZG86ITEsdWx0aW1hQWN0dWFsaXphY2lvbjpudWxsLG5vbmNlOm51bGwsZXJyb3I6bnVsbH0pLGY9KDAseS51c2VSZWYpKCExKTsoMCx5LnVzZUVmZmVjdCkoKCk9PntsZXQgZT0hMTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtsZXQgbj0oYXdhaXQoYXdhaXQgZmV0Y2goUyhgL3dwLWFkbWluL2FkbWluLWFqYXgucGhwP2FjdGlvbj1yZXN0LW5vbmNlYCkse2NyZWRlbnRpYWxzOmBpbmNsdWRlYH0pKS50ZXh0KCkpLnRyaW0oKTtpZihuJiZuLmxlbmd0aD41JiZuLmxlbmd0aDwzMCl7bGV0IHI9YXdhaXQgZmV0Y2goUyhgL3dwLWpzb24vY2FtYXJhL3YxL2JvcnJhZG9yLWluZGl2aWR1YWxgKSx7Y3JlZGVudGlhbHM6YGluY2x1ZGVgLGhlYWRlcnM6eyJYLVdQLU5vbmNlIjpufX0pO2lmKHIub2spe2xldCBpPWF3YWl0IHIuanNvbigpO2lmKCFlKXtpPy5wYXlsb2FkPy5kb2MmJnQoey4uLmJ5LC4uLmkucGF5bG9hZC5kb2N9KSxkKGU9Pih7Li4uZSxjYXJnYW5kbzohMSx1c3VhcmlvTG9ndWVhZG86ITAsbm9uY2U6bix1bHRpbWFBY3R1YWxpemFjaW9uOmk/LnVwZGF0ZWRfYXR8fG51bGx9KSksZi5jdXJyZW50PSEwO3JldHVybn19ZXx8KHAoKSxkKGU9Pih7Li4uZSxjYXJnYW5kbzohMSx1c3VhcmlvTG9ndWVhZG86ITAsbm9uY2U6bn0pKSxmLmN1cnJlbnQ9ITApfWVsc2UgZXx8KHAoKSxkKGU9Pih7Li4uZSxjYXJnYW5kbzohMSx1c3VhcmlvTG9ndWVhZG86ITF9KSksZi5jdXJyZW50PSEwKX1jYXRjaCh0KXtlfHwocCgpLGQoZT0+KHsuLi5lLGNhcmdhbmRvOiExLGVycm9yOnQubWVzc2FnZX0pKSxmLmN1cnJlbnQ9ITApfX0pKCksKCk9PntlPSEwfX0sW10pO2Z1bmN0aW9uIHAoKXt0cnl7bGV0IGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oU3kpO2lmKCFlKXJldHVybjtsZXQgbj1KU09OLnBhcnNlKGUpO24/LmRvYyYmdCh7Li4uYnksLi4ubi5kb2N9KX1jYXRjaHt9fSgwLHkudXNlRWZmZWN0KSgoKT0+e2lmKCFmLmN1cnJlbnQpcmV0dXJuO2xldCB0PXNldEludGVydmFsKCgpPT57dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKFN5LEpTT04uc3RyaW5naWZ5KHtkb2M6ZSx0czpEYXRlLm5vdygpfSkpfWNhdGNoe319LDNlNCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwodCl9LFtlXSk7bGV0IG09KGUsbik9PnQodD0+KHsuLi50LFtlXTpufSkpLGg9KGUsbixyLGkpPT57dCh0PT57bGV0IGE9ey4uLnQsbWVyaXRvczp7Li4udC5tZXJpdG9zfX07cmV0dXJuIGU9PT1gaGFiaWxpdGFudGVgP2EubWVyaXRvcy5oYWJpbGl0YW50ZT1hLm1lcml0b3MuaGFiaWxpdGFudGUubWFwKChlLHQpPT50PT09bj97Li4uZSxbcl06aX06ZSk6YS5tZXJpdG9zW2VdPXsuLi5hLm1lcml0b3NbZV0saXRlbXM6YS5tZXJpdG9zW2VdLml0ZW1zLm1hcCgoZSx0KT0+dD09PW4/ey4uLmUsW3JdOml9OmUpfSxhfSl9LGc9KGUsbixyKT0+e3QodD0+KHsuLi50LGV4cGVyaWVuY2lhOnQuZXhwZXJpZW5jaWEubWFwKCh0LGkpPT5pPT09ZT97Li4udCxbbl06cn06dCl9KSl9LF89ZT0+e3QodD0+e2xldCBuPXsuLi50fTtyZXR1cm4gZT09PWBoYWJpbGl0YW50ZWA/bi5tZXJpdG9zPXsuLi5uLm1lcml0b3MsaGFiaWxpdGFudGU6Wy4uLm4ubWVyaXRvcy5oYWJpbGl0YW50ZSx7dGl0dWxvOmBgLGNlbnRybzpgYCxhbmlvOmBgLGN1cnNvczpbXX1dfTplPT09YGV4cGVyaWVuY2lhYD9uLmV4cGVyaWVuY2lhPVsuLi5uLmV4cGVyaWVuY2lhLHtpbnN0aXR1Y2lvbjpgYCxtYXRlcmlhOmBgLGRlc2RlOmBgLGhhc3RhOmBgLGhvcmFzOmBgfV06bi5tZXJpdG9zPXsuLi5uLm1lcml0b3MsW2VdOnsuLi5uLm1lcml0b3NbZV0saXRlbXM6Wy4uLm4ubWVyaXRvc1tlXS5pdGVtcyx7dGl0dWxvOmBgLGNlbnRybzpgYCxob3JhczpgYCxhbmlvOmBgfV19fSxufSl9LHY9KGUsbik9Pnt0KHQ9PntsZXQgcj17Li4udH07aWYoZT09PWBoYWJpbGl0YW50ZWApe2xldCBlPXIubWVyaXRvcy5oYWJpbGl0YW50ZS5maWx0ZXIoKGUsdCk9PnQhPT1uKTtyLm1lcml0b3M9ey4uLnIubWVyaXRvcyxoYWJpbGl0YW50ZTplLmxlbmd0aD9lOlt7dGl0dWxvOmBgLGNlbnRybzpgYCxhbmlvOmBgLGN1cnNvczpbXX1dfX1lbHNlIGlmKGU9PT1gZXhwZXJpZW5jaWFgKXtsZXQgZT1yLmV4cGVyaWVuY2lhLmZpbHRlcigoZSx0KT0+dCE9PW4pO3IuZXhwZXJpZW5jaWE9ZS5sZW5ndGg/ZTpbe2luc3RpdHVjaW9uOmBgLG1hdGVyaWE6YGAsZGVzZGU6YGAsaGFzdGE6YGAsaG9yYXM6YGB9XX1lbHNlIHIubWVyaXRvcz17Li4uci5tZXJpdG9zLFtlXTp7Li4uci5tZXJpdG9zW2VdLGl0ZW1zOnIubWVyaXRvc1tlXS5pdGVtcy5maWx0ZXIoKGUsdCk9PnQhPT1uKX19O3JldHVybiByfSl9LGI9KGUsbik9Pnt0KHQ9PntsZXQgcj17Li4udCxtZXJpdG9zOnsuLi50Lm1lcml0b3MsW2VdOnsuLi50Lm1lcml0b3NbZV0sYWN0aXZvOm59fX07cmV0dXJuIG49PT1gU8ONYCYmci5tZXJpdG9zW2VdLml0ZW1zLmxlbmd0aD09PTAmJihyLm1lcml0b3NbZV0uaXRlbXM9W3t0aXR1bG86YGAsY2VudHJvOmBgLGhvcmFzOmBgLGFuaW86YGB9XSkscn0pfTtyZXR1cm4gbz8oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHctZnVsbCBteC1hdXRvIHAtMTIgdGV4dC1jZW50ZXIgYmctd2hpdGUgYm9yZGVyLTQgYm9yZGVyLWNhbWFyYS1yZWQgYW5pbWF0ZS1pbiBmYWRlLWluIGR1cmF0aW9uLTcwMGAsY2hpbGRyZW46WygwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmB3LTI0IGgtMjQgYmctcmVkLTUwIHRleHQtY2FtYXJhLXJlZCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXgtYXV0byBtYi04YCxjaGlsZHJlbjooMCwkLmpzeCkoYHN2Z2Ase2NsYXNzTmFtZTpgdy0xMiBoLTEyYCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgM2AsZDpgTTUgMTNsNCA0TDE5IDdgfSl9KX0pLCgwLCQuanN4KShgaDJgLHtjbGFzc05hbWU6YHRleHQtNHhsIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCBtYi00IHRyYWNraW5nLXRpZ2h0ZXIgdXBwZXJjYXNlYCxjaGlsZHJlbjpgwqFTT0xJQ0lUVUQgRU5WSUFEQSBDT04gw4lYSVRPIWB9KSwoMCwkLmpzeHMpKGBwYCx7Y2xhc3NOYW1lOmB0ZXh0LXhsIHRleHQtZ3JheS02MDAgbWF4LXctMnhsIG14LWF1dG8gbWItMTAgbGVhZGluZy10aWdodGAsY2hpbGRyZW46W2BTdSBzb2xpY2l0dWQgZGUgaG9tb2xvZ2FjacOzbiBjb21vIGRvY2VudGUgaGEgc2lkbyByZWNpYmlkYSBjb3JyZWN0YW1lbnRlIHBvciBsYSBgLCgwLCQuanN4KShgc3Ryb25nYCx7Y2hpbGRyZW46YEPDoW1hcmEgZGUgQ29tZXJjaW9gfSksYC4gUmV2aXNhcmVtb3Mgc3UgcHJvcHVlc3RhIHkgbm9zIHBvbmRyZW1vcyBlbiBjb250YWN0byBwcm9udG8uYF19KSwoMCwkLmpzeCkoYGJ1dHRvbmAse29uQ2xpY2s6KCk9PndpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKSxjbGFzc05hbWU6YGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSBweC0xMiBweS00IGZvbnQtYmxhY2sgdXBwZXJjYXNlIHJvdW5kZWQtbGcgaG92ZXI6YmctY2FtYXJhLXJlZC1kYXJrIHRyYW5zaXRpb24tYWxsIHNoYWRvdy1zb2Z0LWxnIGhvdmVyOnNoYWRvdy1sZyB0cmFja2luZy13aWRlYCxjaGlsZHJlbjpgRW52aWFyIG90cmEgc29saWNpdHVkYH0pXX0pOigwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgdy1mdWxsIG14LWF1dG8gZm9udC1zYW5zIHRleHQtZ3JheS05MDBgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YG1iLThgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBoMWAse2NsYXNzTmFtZTpgdGV4dC0zeGwgbWQ6dGV4dC00eGwgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIHRyYWNraW5nLXRpZ2h0YCxjaGlsZHJlbjpbYFNvbGljaXR1ZCBkZSBgLCgwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkYCxjaGlsZHJlbjpgSG9tb2xvZ2FjacOzbmB9KV19KSwoMCwkLmpzeCkoYHBgLHtjbGFzc05hbWU6YHRleHQtc20gdGV4dC1ncmF5LTUwMCBtdC0xIGl0YWxpY2AsY2hpbGRyZW46YERvY2VudGUgaW5kaXZpZHVhbCDCtyBQZXJzb25hIGbDrXNpY2EgcG9yIGN1ZW50YSBwcm9waWFgfSksKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHctMjAgaC0xIGJnLWNhbWFyYS1yZWQgcm91bmRlZC1mdWxsIG10LTNgfSldfSksaSYmKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBiZy1yZWQtNTAgYm9yZGVyLWwtOCBib3JkZXItY2FtYXJhLXJlZCB0ZXh0LWNhbWFyYS1yZWQgcC02IG1iLTggZm9udC1ib2xkIGFuaW1hdGUtcHVsc2VgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHBgLHtjbGFzc05hbWU6YHRleHQtc20gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtYi0xIG9wYWNpdHktNzBgLGNoaWxkcmVuOmBFcnJvciBlbiBlbCBlbnbDrW9gfSksKDAsJC5qc3gpKGBwYCx7Y2xhc3NOYW1lOmB0ZXh0LWxnYCxjaGlsZHJlbjppfSldfSksKDAsJC5qc3gpKGBmb3JtYCx7b25TdWJtaXQ6YXN5bmMgdD0+e3QucHJldmVudERlZmF1bHQoKSxyKCEwKSxhKG51bGwpLHMoITEpLGNvbnNvbGUubG9nKGBKU09OIHF1ZSBzZSBlbnZpYXLDrWE6YCx7dGlwbzpgaW5kaXZpZHVhbGAsZG9jOmV9KSxhd2FpdCBuZXcgUHJvbWlzZShlPT5zZXRUaW1lb3V0KGUsODAwKSkscyghMCkscighMSksd2luZG93LnNjcm9sbFRvKDAsMCl9LGNoaWxkcmVuOigwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgc3BhY2UteS0xMmAsY2hpbGRyZW46WygwLCQuanN4cykoYHNlY3Rpb25gLHtjbGFzc05hbWU6YGJnLXdoaXRlIHAtOCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LXNvZnRgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHBiLTQgbWItOCBib3JkZXItYiBib3JkZXItZ3JheS0xMDBgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTkgaC05IHJvdW5kZWQtZnVsbCBiZy1jYW1hcmEtcmVkIHRleHQtd2hpdGUgZm9udC1ibGFjayB0ZXh0LXNtYCxjaGlsZHJlbjpgMDFgfSksKDAsJC5qc3gpKGBoMmAse2NsYXNzTmFtZTpgdGV4dC14bCBmb250LWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUgdGV4dC1ncmF5LTgwMGAsY2hpbGRyZW46YERhdG9zIHBlcnNvbmFsZXMgZGVsIHNvbGljaXRhbnRlYH0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMyBnYXAteC02IGdhcC15LTRgLGNoaWxkcmVuOlsoMCwkLmpzeCkoaXkse2xhYmVsOmBOb21icmVgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6ZS5ub21icmUsb25DaGFuZ2U6ZT0+bShgbm9tYnJlYCxlLnRhcmdldC52YWx1ZSkscmVxdWlyZWQ6ITB9KX0pLCgwLCQuanN4KShpeSx7bGFiZWw6YEFwZWxsaWRvc2AscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpueSx0eXBlOmB0ZXh0YCx2YWx1ZTplLmFwZWxsaWRvcyxvbkNoYW5nZTplPT5tKGBhcGVsbGlkb3NgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKGl5LHtsYWJlbDpgTklGIC8gTklFYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOm55LHR5cGU6YHRleHRgLHZhbHVlOmUubmlmLG9uQ2hhbmdlOmU9Pm0oYG5pZmAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBGZWNoYSBOYWNpbWllbnRvYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOm55LHR5cGU6YGRhdGVgLHZhbHVlOmUuZmVjaGFfbmFjLG9uQ2hhbmdlOmU9Pm0oYGZlY2hhX25hY2AsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBOYWNpb25hbGlkYWRgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6ZS5uYWNpb25hbGlkYWQsb25DaGFuZ2U6ZT0+bShgbmFjaW9uYWxpZGFkYCxlLnRhcmdldC52YWx1ZSkscmVxdWlyZWQ6ITB9KX0pLCgwLCQuanN4KShpeSx7bGFiZWw6YFNpdHVhY2nDs24gcHJvZmVzaW9uYWxgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgc2VsZWN0YCx7Y2xhc3NOYW1lOm55LHZhbHVlOmUuc2l0dWFjaW9uLG9uQ2hhbmdlOmU9Pm0oYHNpdHVhY2lvbmAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwLGNoaWxkcmVuOnh5Lm1hcChlPT4oMCwkLmpzeCkoYG9wdGlvbmAse3ZhbHVlOmUsY2hpbGRyZW46ZX0sZSkpfSl9KV19KSwoMCwkLmpzeCkoYGgzYCx7Y2xhc3NOYW1lOmBmb250LWJvbGQgdGV4dC1jYW1hcmEtcmVkIG10LTggbWItNCBib3JkZXItbC00IGJvcmRlci1jYW1hcmEtcmVkIHBsLTMgdXBwZXJjYXNlIHRleHQtc20gdHJhY2tpbmctd2lkZXJgLGNoaWxkcmVuOmBEaXJlY2Npw7NuIFBhcnRpY3VsYXJgfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy00IGdhcC00YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YG1kOmNvbC1zcGFuLTJgLGNoaWxkcmVuOigwLCQuanN4KShpeSx7bGFiZWw6YERpcmVjY2nDs25gLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6ZS5kaXJlY2Npb24sb25DaGFuZ2U6ZT0+bShgZGlyZWNjaW9uYCxlLnRhcmdldC52YWx1ZSkscmVxdWlyZWQ6ITB9KX0pfSksKDAsJC5qc3gpKGl5LHtsYWJlbDpgTXVuaWNpcGlvYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOm55LHR5cGU6YHRleHRgLHZhbHVlOmUubXVuaWNpcGlvLG9uQ2hhbmdlOmU9Pm0oYG11bmljaXBpb2AsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBQcm92aW5jaWFgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6ZS5wcm92aW5jaWEsb25DaGFuZ2U6ZT0+bShgcHJvdmluY2lhYCxlLnRhcmdldC52YWx1ZSkscmVxdWlyZWQ6ITB9KX0pLCgwLCQuanN4KShpeSx7bGFiZWw6YEPDs2RpZ28gUG9zdGFsYCxyZXF1aXJlZDohMCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOm55LHR5cGU6YHRleHRgLHZhbHVlOmUuY3Asb25DaGFuZ2U6ZT0+bShgY3BgLGUudGFyZ2V0LnZhbHVlKSxyZXF1aXJlZDohMH0pfSksKDAsJC5qc3gpKGl5LHtsYWJlbDpgVGVsw6lmb25vIGZpam9gLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6ZS50ZWxlZm9ubyxvbkNoYW5nZTplPT5tKGB0ZWxlZm9ub2AsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBNw7N2aWxgLHJlcXVpcmVkOiEwLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6ZS5tb3ZpbCxvbkNoYW5nZTplPT5tKGBtb3ZpbGAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBFbWFpbGAscmVxdWlyZWQ6ITAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpueSx0eXBlOmBlbWFpbGAsdmFsdWU6ZS5lbWFpbCxvbkNoYW5nZTplPT5tKGBlbWFpbGAsZS50YXJnZXQudmFsdWUpLHJlcXVpcmVkOiEwfSl9KV19KV19KSwoMCwkLmpzeHMpKGBzZWN0aW9uYCx7Y2xhc3NOYW1lOmBiZy13aGl0ZSBwLTggYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWxnIHNoYWRvdy1zb2Z0YCxjaGlsZHJlbjpbKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBwYi00IG1iLTYgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy05IGgtOSByb3VuZGVkLWZ1bGwgYmctY2FtYXJhLXJlZCB0ZXh0LXdoaXRlIGZvbnQtYmxhY2sgdGV4dC1zbWAsY2hpbGRyZW46YDAyYH0pLCgwLCQuanN4KShgaDJgLHtjbGFzc05hbWU6YHRleHQteGwgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtZ3JheS04MDBgLGNoaWxkcmVuOmBEb2N1bWVudGFjacOzbiBwZXJzb25hbGB9KV19KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGJnLXllbGxvdy01MCBib3JkZXIgYm9yZGVyLXllbGxvdy0yMDAgcC00IHJvdW5kZWQtbWQgbWItNCB0ZXh0LXhzIHRleHQteWVsbG93LTgwMCBpdGFsaWNgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHN0cm9uZ2Ase2NoaWxkcmVuOmBJTVBPUlRBTlRFOmB9KSxgIExhIG5vIGFwb3J0YWNpw7NuIGRlIGN1YWxxdWllcmEgZGUgbG9zIGRvY3VtZW50b3MgZXhpZ2lkb3Mgc2Vyw6EgY2F1c2EgZGUgZGVzZXN0aW1hY2nDs24gZGUgbGEgcHJvcHVlc3RhLiBGb3JtYXRvcyBhZG1pdGlkb3M6IGAsKDAsJC5qc3gpKGBzdHJvbmdgLHtjaGlsZHJlbjpgUERGYH0pLGAuIFRhbWHDsW8gbcOheGltbzogYCwoMCwkLmpzeCkoYHN0cm9uZ2Ase2NoaWxkcmVuOmAxMCBNQmB9KSxgIHBvciBhcmNoaXZvLmBdfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGF5LHtsYWJlbDpgRE5JIC8gTklFIGVuIHZpZ29yYCxyZXF1aXJlZDohMH0pLCgwLCQuanN4KShheSx7bGFiZWw6YEN1cnLDrWN1bHVtIFZpdGFlIGFjdHVhbGl6YWRvYCxyZXF1aXJlZDohMH0pLGUuc2l0dWFjaW9uPT09YFRyYWJhamFkb3IgcG9yIGN1ZW50YSBwcm9waWEgKGF1dMOzbm9tbylgJiYoMCwkLmpzeHMpKCQuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCwkLmpzeCkoYXkse2xhYmVsOmBBbHRhIGVuIGVsIElBRSAvIFJFVEFgLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKGF5LHtsYWJlbDpgQ2VydGlmaWNhZG8gYWwgY29ycmllbnRlIEFFQVRgLHJlcXVpcmVkOiEwfSksKDAsJC5qc3gpKGF5LHtsYWJlbDpgQ2VydGlmaWNhZG8gYWwgY29ycmllbnRlIFRHU1NgLHJlcXVpcmVkOiEwfSldfSksZS5zaXR1YWNpb249PT1gVHJhYmFqYWRvciBwb3IgY3VlbnRhIGFqZW5hYCYmKDAsJC5qc3gpKGF5LHtsYWJlbDpgVmlkYSBsYWJvcmFsIC8gSW5mb3JtZSBkZSBTZWd1cmlkYWQgU29jaWFsYCxyZXF1aXJlZDohMH0pLGUuc2l0dWFjaW9uPT09YEVuIGRlc2VtcGxlb2AmJigwLCQuanN4KShheSx7bGFiZWw6YENlcnRpZmljYWRvIC8gREFSREUgZGVsIFNFUEVgLHJlcXVpcmVkOiEwfSldfSldfSksKDAsJC5qc3hzKShgc2VjdGlvbmAse2NsYXNzTmFtZTpgYmctd2hpdGUgcC04IGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctc29mdGAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcGItNCBtYi02IGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMGAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctOSBoLTkgcm91bmRlZC1mdWxsIGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSBmb250LWJsYWNrIHRleHQtc21gLGNoaWxkcmVuOmAwM2B9KSwoMCwkLmpzeCkoYGgyYCx7Y2xhc3NOYW1lOmB0ZXh0LXhsIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LWdyYXktODAwYCxjaGlsZHJlbjpgQ3Vyc29zIHBhcmEgbG9zIHF1ZSBkZXNlYSBob21vbG9nYXJzZWB9KV19KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGJnLXJlZC01MC82MCBwLTQgYm9yZGVyIGJvcmRlci1yZWQtMTAwIHJvdW5kZWQtbWRgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHBgLHtjbGFzc05hbWU6YHRleHQtWzExcHhdIHRleHQtZ3JheS03MDAgbWItM2AsY2hpbGRyZW46YEJ1c2NhIHkgc2VsZWNjaW9uYSBkZWwgY2F0w6Fsb2dvIHRvZG9zIGxvcyBjdXJzb3MgcGFyYSBsb3MgcXVlIHRlIGNvbnNpZGVyZXMgY2FwYWNpdGFkbyBwYXJhIGltcGFydGlyLmB9KSwoMCwkLmpzeCkocnkse29wdGlvbnM6eCxzZWxlY3RlZDplLmN1cnNvcyxwbGFjZWhvbGRlcjpgQnVzY2EgeSBzZWxlY2Npb25hIGN1cnNvcyAoRWo6IEVzdGlsaXNtbywgTWFya2V0aW5nLCBFeGNlbC4uLilgLG9uQ2hhbmdlOmU9Pm0oYGN1cnNvc2AsZSl9KSwoMCwkLmpzeCkoYHBgLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdIHRleHQtY2FtYXJhLXJlZCBvcGFjaXR5LTc1IG10LTEgaXRhbGljYCxjaGlsZHJlbjpgUHVlZGVzIHNlbGVjY2lvbmFyIG3Dumx0aXBsZXMgY3Vyc29zIGVzY3JpYmllbmRvIHN1IG5vbWJyZSBvIG7Dum1lcm8uYH0pXX0pXX0pLCgwLCQuanN4cykoYHNlY3Rpb25gLHtjbGFzc05hbWU6YGJnLXdoaXRlIHAtOCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LXNvZnRgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHBiLTQgbWItNiBib3JkZXItYiBib3JkZXItZ3JheS0xMDBgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTkgaC05IHJvdW5kZWQtZnVsbCBiZy1jYW1hcmEtcmVkIHRleHQtd2hpdGUgZm9udC1ibGFjayB0ZXh0LXNtYCxjaGlsZHJlbjpgMDRgfSksKDAsJC5qc3gpKGBoMmAse2NsYXNzTmFtZTpgdGV4dC14bCBmb250LWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUgdGV4dC1ncmF5LTgwMGAsY2hpbGRyZW46YERhdG9zIGFjYWTDqW1pY29zYH0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgc3BhY2UteS00YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBoNGAse2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtc20gdGV4dC1ncmF5LTcwMGAsY2hpbGRyZW46YEEuIFRpdHVsYWNpw7NuIEhhYmlsaXRhbnRlIFJlbGFjaW9uYWRhIGNvbiBsYXMgTWF0ZXJpYXMgYSBJbXBhcnRpcmB9KSxlLm1lcml0b3MuaGFiaWxpdGFudGUubWFwKCh0LG4pPT4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHAtNCBiZy1ncmF5LTEwMCByb3VuZGVkLW1kIHNwYWNlLXktNCByZWxhdGl2ZWAsY2hpbGRyZW46W2UubWVyaXRvcy5oYWJpbGl0YW50ZS5sZW5ndGg+MSYmKDAsJC5qc3gpKGBidXR0b25gLHt0eXBlOmBidXR0b25gLG9uQ2xpY2s6KCk9PnYoYGhhYmlsaXRhbnRlYCxuKSxjbGFzc05hbWU6YGFic29sdXRlIHRvcC0yIHJpZ2h0LTIgdGV4dC14cyB0ZXh0LXJlZC02MDAgaG92ZXI6dW5kZXJsaW5lYCxjaGlsZHJlbjpgRWxpbWluYXJgfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy00IGdhcC00YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGl5LHtsYWJlbDpgVGl0dWxhY2nDs25gLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6dC50aXR1bG8sb25DaGFuZ2U6ZT0+aChgaGFiaWxpdGFudGVgLG4sYHRpdHVsb2AsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBVbml2ZXJzaWRhZCAvIENlbnRyb2AsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpueSx0eXBlOmB0ZXh0YCx2YWx1ZTp0LmNlbnRybyxvbkNoYW5nZTplPT5oKGBoYWJpbGl0YW50ZWAsbixgY2VudHJvYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShpeSx7bGFiZWw6YEHDsW9gLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgdGV4dGAsdmFsdWU6dC5hbmlvLG9uQ2hhbmdlOmU9PmgoYGhhYmlsaXRhbnRlYCxuLGBhbmlvYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShheSx7bGFiZWw6YFBERiBUw610dWxvYH0pXX0pLCgwLCQuanN4KShpeSx7bGFiZWw6YEN1cnNvcyBwYXJhIGxvcyBxdWUgZXMgdMOtdHVsbyBoYWJpbGl0YW50ZWAsY2hpbGRyZW46ZS5jdXJzb3MubGVuZ3RoPT09MD8oMCwkLmpzeCkoYHBgLHtjbGFzc05hbWU6YHRleHQtWzExcHhdIGl0YWxpYyB0ZXh0LWdyYXktNTAwIGJnLXllbGxvdy01MCBib3JkZXIgYm9yZGVyLXllbGxvdy0yMDAgcC0yIHJvdW5kZWRgLGNoaWxkcmVuOmBQcmltZXJvIHNlbGVjY2lvbmEgYXJyaWJhIGxvcyBjdXJzb3MgcGFyYSBsb3MgcXVlIGRlc2VhcyBob21vbG9nYXJ0ZS5gfSk6KDAsJC5qc3gpKHJ5LHtvcHRpb25zOmUuY3Vyc29zLHNlbGVjdGVkOnQuY3Vyc29zfHxbXSxwbGFjZWhvbGRlcjpgU2VsZWNjaW9uYSBsb3MgY3Vyc29zIGFwbGljYWJsZXMgYSBlc3RhIHRpdHVsYWNpw7NuLi4uYCxvbkNoYW5nZTplPT5oKGBoYWJpbGl0YW50ZWAsbixgY3Vyc29zYCxlKX0pfSldfSxuKSksKDAsJC5qc3hzKShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOigpPT5fKGBoYWJpbGl0YW50ZWApLGNsYXNzTmFtZTpgdGV4dC14cyBiZy1jYW1hcmEtcmVkIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbWQgZm9udC1ib2xkIGhvdmVyOmJnLWNhbWFyYS1yZWQtZGFyayB0cmFuc2l0aW9uLWNvbG9ycyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNWAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1iYXNlIGxlYWRpbmctbm9uZWAsY2hpbGRyZW46YCtgfSksYCBBw7FhZGlyIG90cmEgdGl0dWxhY2nDs24gQWBdfSldfSksW3tpZDpgb3Ryb3NfdGl0dWxvc2AsbGFiZWw6YEIuIE90cm9zIFTDrXR1bG9zIFVuaXZlcnNpdGFyaW9zIChMaWNlbmNpYXR1cmFzIG8gR3JhZG9zKWB9LHtpZDpgbWFzXzMwMGAsbGFiZWw6YEMuIEN1cnNvcy9Nw6FzdGVyICszMDBoYH0se2lkOmByMjAxXzMwMGAsbGFiZWw6YEQuIEN1cnNvcy9Nw6FzdGVyIDIwMS0zMDBoYH0se2lkOmByMTAxXzIwMGAsbGFiZWw6YEUuIEN1cnNvcyAxMDEtMjAwaGB9LHtpZDpgcjMwXzEwMGAsbGFiZWw6YEYuIEN1cnNvcyAzMC0xMDBoYH1dLm1hcCh0PT4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHB0LTQgbXQtNCBib3JkZXItdGAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGg0YCx7Y2xhc3NOYW1lOmBmb250LWJvbGQgdGV4dC1zbSB0ZXh0LWdyYXktNzAwYCxjaGlsZHJlbjp0LmxhYmVsfSksKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggc3BhY2UteC00YCxjaGlsZHJlbjpbYFPDjWAsYE5PYF0ubWFwKG49PigwLCQuanN4cykoYGxhYmVsYCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEgdGV4dC14c2AsY2hpbGRyZW46WygwLCQuanN4KShgaW5wdXRgLHt0eXBlOmByYWRpb2AsbmFtZTpgJHt0LmlkfV9pbmRpdmAsY2hlY2tlZDplLm1lcml0b3NbdC5pZF0uYWN0aXZvPT09bixvbkNoYW5nZTooKT0+Yih0LmlkLG4pfSksKDAsJC5qc3gpKGBzcGFuYCx7Y2hpbGRyZW46bn0pXX0sbikpfSldfSksZS5tZXJpdG9zW3QuaWRdLmFjdGl2bz09PWBTw41gJiYoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHNwYWNlLXktNGAsY2hpbGRyZW46W2UubWVyaXRvc1t0LmlkXS5pdGVtcy5tYXAoKGUsbik9PigwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtNiBnYXAtMyBwLTQgYmctZ3JheS01MCBib3JkZXItbC00IGJvcmRlci1jYW1hcmEtcmVkIHJlbGF0aXZlYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGl5LHtsYWJlbDpgVGl0dWxhY2nDs25gLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6YHctZnVsbCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgcC0yIGJnLXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1jYW1hcmEtcmVkLzMwIGZvY3VzOmJvcmRlci1jYW1hcmEtcmVkYCx0eXBlOmB0ZXh0YCx2YWx1ZTplLnRpdHVsbyxvbkNoYW5nZTplPT5oKHQuaWQsbixgdGl0dWxvYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShpeSx7bGFiZWw6YENlbnRyb2AsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpgdy1mdWxsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCBwLTIgYmctd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWNhbWFyYS1yZWQvMzAgZm9jdXM6Ym9yZGVyLWNhbWFyYS1yZWRgLHR5cGU6YHRleHRgLHZhbHVlOmUuY2VudHJvLG9uQ2hhbmdlOmU9PmgodC5pZCxuLGBjZW50cm9gLGUudGFyZ2V0LnZhbHVlKX0pfSksKDAsJC5qc3gpKGl5LHtsYWJlbDpgSG9yYXNgLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6YHctZnVsbCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgcC0yIGJnLXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1jYW1hcmEtcmVkLzMwIGZvY3VzOmJvcmRlci1jYW1hcmEtcmVkYCx0eXBlOmB0ZXh0YCx2YWx1ZTplLmhvcmFzLG9uQ2hhbmdlOmU9PmgodC5pZCxuLGBob3Jhc2AsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBBw7FvYCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOmB3LWZ1bGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLW1kIHAtMiBiZy13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctY2FtYXJhLXJlZC8zMCBmb2N1czpib3JkZXItY2FtYXJhLXJlZGAsdHlwZTpgdGV4dGAsdmFsdWU6ZS5hbmlvLG9uQ2hhbmdlOmU9PmgodC5pZCxuLGBhbmlvYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShheSx7bGFiZWw6YFBERmB9KSwoMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1lbmRgLGNoaWxkcmVuOigwLCQuanN4KShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOigpPT52KHQuaWQsbiksY2xhc3NOYW1lOmB0ZXh0LXhzIHRleHQtcmVkLTYwMCBob3Zlcjp1bmRlcmxpbmUgbWItNGAsY2hpbGRyZW46YEVsaW1pbmFyYH0pfSldfSxuKSksKDAsJC5qc3hzKShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOigpPT5fKHQuaWQpLGNsYXNzTmFtZTpgdGV4dC1bMTBweF0gdW5kZXJsaW5lIHRleHQtY2FtYXJhLXJlZCBmb250LWJvbGQgaG92ZXI6bm8tdW5kZXJsaW5lYCxjaGlsZHJlbjpbYEHDkUFESVIgT1RSTyBNw4lSSVRPIGAsdC5pZC50b1VwcGVyQ2FzZSgpXX0pXX0pXX0sdC5pZCkpXX0pLCgwLCQuanN4cykoYHNlY3Rpb25gLHtjbGFzc05hbWU6YGJnLXdoaXRlIHAtOCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LXNvZnRgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHBiLTQgbWItNiBib3JkZXItYiBib3JkZXItZ3JheS0xMDBgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTkgaC05IHJvdW5kZWQtZnVsbCBiZy1jYW1hcmEtcmVkIHRleHQtd2hpdGUgZm9udC1ibGFjayB0ZXh0LXNtYCxjaGlsZHJlbjpgMDVgfSksKDAsJC5qc3hzKShgaDJgLHtjbGFzc05hbWU6YHRleHQteGwgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtZ3JheS04MDBgLGNoaWxkcmVuOltgRXhwZXJpZW5jaWEgZG9jZW50ZSBgLCgwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1ncmF5LTQwMCBub3JtYWwtY2FzZSBmb250LW5vcm1hbCB0ZXh0LXNtYCxjaGlsZHJlbjpgKMO6bHRpbW9zIDUgYcOxb3MpYH0pXX0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgc3BhY2UteS00YCxjaGlsZHJlbjpbZS5leHBlcmllbmNpYS5tYXAoKHQsbik9PigwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtNiBnYXAtMyBwLTQgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBiZy13aGl0ZSByZWxhdGl2ZWAsY2hpbGRyZW46WygwLCQuanN4KShpeSx7bGFiZWw6YEluc3RpdHVjacOzbmAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpueSx0eXBlOmB0ZXh0YCx2YWx1ZTp0Lmluc3RpdHVjaW9uLG9uQ2hhbmdlOmU9PmcobixgaW5zdGl0dWNpb25gLGUudGFyZ2V0LnZhbHVlKX0pfSksKDAsJC5qc3gpKGl5LHtsYWJlbDpgTWF0ZXJpYWAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpueSx0eXBlOmB0ZXh0YCx2YWx1ZTp0Lm1hdGVyaWEsb25DaGFuZ2U6ZT0+ZyhuLGBtYXRlcmlhYCxlLnRhcmdldC52YWx1ZSl9KX0pLCgwLCQuanN4KShpeSx7bGFiZWw6YERlc2RlYCxjaGlsZHJlbjooMCwkLmpzeCkoYGlucHV0YCx7Y2xhc3NOYW1lOm55LHR5cGU6YGRhdGVgLHZhbHVlOnQuZGVzZGUsb25DaGFuZ2U6ZT0+ZyhuLGBkZXNkZWAsZS50YXJnZXQudmFsdWUpfSl9KSwoMCwkLmpzeCkoaXkse2xhYmVsOmBIYXN0YWAsY2hpbGRyZW46KDAsJC5qc3gpKGBpbnB1dGAse2NsYXNzTmFtZTpueSx0eXBlOmBkYXRlYCx2YWx1ZTp0Lmhhc3RhLG9uQ2hhbmdlOmU9PmcobixgaGFzdGFgLGUudGFyZ2V0LnZhbHVlKX0pfSksKDAsJC5qc3gpKGl5LHtsYWJlbDpgSG9yYXNgLGNoaWxkcmVuOigwLCQuanN4KShgaW5wdXRgLHtjbGFzc05hbWU6bnksdHlwZTpgbnVtYmVyYCx2YWx1ZTp0LmhvcmFzLG9uQ2hhbmdlOmU9PmcobixgaG9yYXNgLGUudGFyZ2V0LnZhbHVlKX0pfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWVuZCBqdXN0aWZ5LWJldHdlZW5gLGNoaWxkcmVuOlsoMCwkLmpzeCkoYXkse2xhYmVsOmBDZXJ0aWZpY2Fkb2B9KSxlLmV4cGVyaWVuY2lhLmxlbmd0aD4xJiYoMCwkLmpzeCkoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsb25DbGljazooKT0+dihgZXhwZXJpZW5jaWFgLG4pLGNsYXNzTmFtZTpgdGV4dC14cyB0ZXh0LXJlZC02MDAgaG92ZXI6dW5kZXJsaW5lIG1iLTQgbWwtMmAsY2hpbGRyZW46YMOXYH0pXX0pXX0sbikpLCgwLCQuanN4cykoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsb25DbGljazooKT0+XyhgZXhwZXJpZW5jaWFgKSxjbGFzc05hbWU6YHRleHQteHMgYmctY2FtYXJhLXJlZCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLW1kIGZvbnQtYm9sZCBob3ZlcjpiZy1jYW1hcmEtcmVkLWRhcmsgdHJhbnNpdGlvbi1jb2xvcnMgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQtYmFzZSBsZWFkaW5nLW5vbmVgLGNoaWxkcmVuOmArYH0pLGAgQcOxYWRpciBleHBlcmllbmNpYWBdfSldfSldfSksKDAsJC5qc3hzKShgc2VjdGlvbmAse2NsYXNzTmFtZTpgYmctd2hpdGUgcC04IGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctc29mdGAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcGItNCBtYi02IGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMGAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctOSBoLTkgcm91bmRlZC1mdWxsIGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSBmb250LWJsYWNrIHRleHQtc21gLGNoaWxkcmVuOmAwNmB9KSwoMCwkLmpzeCkoYGgyYCx7Y2xhc3NOYW1lOmB0ZXh0LXhsIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LWdyYXktODAwYCxjaGlsZHJlbjpgUHJvcHVlc3RhIHBlZGFnw7NnaWNhYH0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNiBwLTQgYmctZ3JheS01MCBib3JkZXIgYm9yZGVyLWdyYXktMjAwYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGF5LHtsYWJlbDpgQWRqdW50YXIgUHJvcHVlc3RhIFBlZGFnw7NnaWNhIChNw6F4LiAxMCBhcmNoaXZvcyBQREYpYCxtdWx0aXBsZTohMH0pLCgwLCQuanN4KShpeSx7bGFiZWw6YE1vZGFsaWRhZCBkZSBpbXBhcnRpY2nDs25gLGNoaWxkcmVuOigwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmBmbGV4IHNwYWNlLXgtNiBtdC0yYCxjaGlsZHJlbjpbYEluZGl2aWR1YWxgLGBHcnVwYWxgXS5tYXAodD0+KDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIGN1cnNvci1wb2ludGVyYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBpbnB1dGAse3R5cGU6YHJhZGlvYCxuYW1lOmBtb2RfaW5kaXZgLGNoZWNrZWQ6ZS5wcm9wdWVzdGEubW9kYWxpZGFkPT09dCxvbkNoYW5nZTooKT0+bShgcHJvcHVlc3RhYCx7bW9kYWxpZGFkOnR9KSxjbGFzc05hbWU6YHctNCBoLTQgdGV4dC1jYW1hcmEtcmVkIGZvY3VzOnJpbmctY2FtYXJhLXJlZGB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjaGlsZHJlbjp0fSldfSx0KSl9KX0pXX0pXX0pLCgwLCQuanN4cykoYHNlY3Rpb25gLHtjbGFzc05hbWU6YGJnLXdoaXRlIHAtOCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LXNvZnRgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHBiLTQgbWItNiBib3JkZXItYiBib3JkZXItZ3JheS0xMDBgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTkgaC05IHJvdW5kZWQtZnVsbCBiZy1jYW1hcmEtcmVkIHRleHQtd2hpdGUgZm9udC1ibGFjayB0ZXh0LXNtYCxjaGlsZHJlbjpgMDdgfSksKDAsJC5qc3gpKGBoMmAse2NsYXNzTmFtZTpgdGV4dC14bCBmb250LWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUgdGV4dC1ncmF5LTgwMGAsY2hpbGRyZW46YERlY2xhcmFjaW9uZXMgeSBjb25zZW50aW1pZW50byBSR1BEYH0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgbXQtNCBwLTYgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMGAsY2hpbGRyZW46WygwLCQuanN4KShgaDRgLHtjbGFzc05hbWU6YGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTQgYm9yZGVyLWIgcGItMiB1cHBlcmNhc2UgdGV4dC14c2AsY2hpbGRyZW46YEVsIHNvbGljaXRhbnRlIERFQ0xBUkE6YH0pLCgwLCQuanN4cykoYHVsYCx7Y2xhc3NOYW1lOmBsaXN0LWRpc2MgbGlzdC1vdXRzaWRlIG1sLTUgdGV4dC1bMTFweF0gdGV4dC1ncmF5LTYwMCBzcGFjZS15LTIgbWItNGAsY2hpbGRyZW46WygwLCQuanN4KShgbGlgLHtjaGlsZHJlbjpgUXVlIGVzIGNvbm9jZWRvci9hIGRlIGxvcyBQbGllZ29zIHF1ZSByaWdlbiBlbCAiRXhwZWRpZW50ZSBBTUgvMDEvMjAyNjogQWN1ZXJkbyBNYXJjbyBwYXJhIGxhIEhvbW9sb2dhY2nDs24gZGUgZG9jZW50ZXMuLi4gZHVyYW50ZSBlbCBlamVyY2ljaW8gMjAyNiIsIHNlZ8O6biBwcm9jZWRpbWllbnRvIGFwcm9iYWRvIHBvciBsYSBDw6FtYXJhIGRlIENvbWVyY2lvLCBJbmR1c3RyaWEgeSBTZXJ2aWNpb3MgZGUgVG9sZWRvLCBhY2VwdGFuZG8gw61udGVncmFtZW50ZSBlbCBjb250ZW5pZG8gZGUgbG9zIG1pc21vcy5gfSksKDAsJC5qc3gpKGBsaWAse2NoaWxkcmVuOmBRdWUgbG9zIGRvY3VtZW50b3MgYXBvcnRhZG9zIHNvbiBjb3BpYSBkZSBvcmlnaW5hbGVzIG8gY29waWFzIGF1dMOpbnRpY2FzIGRlIGxvcyBxdWUgZWwgc29saWNpdGFudGUgZGlzcG9uZSB5IHB1ZWRlIGFwb3J0YXIgZW4gY2FzbyBkZSBzZXJsZSBhc8OtIHNvbGljaXRhZG8uYH0pLCgwLCQuanN4KShgbGlgLHtjaGlsZHJlbjpgUXVlIHByZXNlbnRhIHRvZGEgbGEgZG9jdW1lbnRhY2nDs24gZXhpZ2lkYSBlbiBsb3MgcGxpZWdvcy5gfSksKDAsJC5qc3gpKGBsaWAse2NoaWxkcmVuOmBRdWUgZWwgYWxjYW5jZSBkZSBsYXMgaG9tb2xvZ2FjaW9uZXMgb2JqZXRvIGRlIGxhIHByb3Bvc2ljacOzbiBzZSBlc3BlY2lmaWNhIGVuIGVsIGFwYXJ0YWRvIHRlcmNlcm8gZGUgbGEgcHJlc2VudGUgc29saWNpdHVkLmB9KV19KSwoMCwkLmpzeHMpKGBsYWJlbGAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIGN1cnNvci1wb2ludGVyIGJnLXJlZC01MCBwLTMgcm91bmRlZCBib3JkZXIgYm9yZGVyLXJlZC0xMDAgaG92ZXI6YmctcmVkLTEwMCB0cmFuc2l0aW9uLWNvbG9yc2AsY2hpbGRyZW46WygwLCQuanN4KShgaW5wdXRgLHt0eXBlOmBjaGVja2JveGAsY2xhc3NOYW1lOmB3LTQgaC00IHRleHQtY2FtYXJhLXJlZCByb3VuZGVkIGZvY3VzOnJpbmctY2FtYXJhLXJlZGAsY2hlY2tlZDplLmFjZXB0YV9zb2xpY2l0dWQsb25DaGFuZ2U6ZT0+bShgYWNlcHRhX3NvbGljaXR1ZGAsZS50YXJnZXQuY2hlY2tlZCkscmVxdWlyZWQ6ITB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQteHMgZm9udC1ib2xkIHRleHQtY2FtYXJhLXJlZCB1cHBlcmNhc2VgLGNoaWxkcmVuOmBTb2xpY2l0dWQgZGVsIHBhcnRpY2lwYW50ZSAqYH0pXX0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgbXQtNiBwLTYgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMGAsY2hpbGRyZW46WygwLCQuanN4KShgaDRgLHtjbGFzc05hbWU6YGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTQgYm9yZGVyLWIgcGItMiB1cHBlcmNhc2UgdGV4dC14c2AsY2hpbGRyZW46YERFQ0xBUkEgQkFKTyBTVSBSRVNQT05TQUJJTElEQUQgUVVFOmB9KSwoMCwkLmpzeHMpKGB1bGAse2NsYXNzTmFtZTpgbGlzdC1kaXNjIGxpc3Qtb3V0c2lkZSBtbC01IHRleHQtWzExcHhdIHRleHQtZ3JheS02MDAgc3BhY2UteS0yIG1iLTRgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGxpYCx7Y2hpbGRyZW46YFJlw7puZSB0b2RhcyB5IGNhZGEgdW5hIGRlIGxhcyBjb25kaWNpb25lcyBleGlnaWRhcyBwb3IgZWwgUGxpZWdvIGRlIENsw6F1c3VsYXMgQWRtaW5pc3RyYXRpdmFzIHkgcG9yIGxhcyBJbnN0cnVjY2lvbmVzIGRlIENvbnRyYXRhY2nDs24gZGUgbGEgQ8OhbWFyYSBPZmljaWFsIGRlIENvbWVyY2lvIGRlIFRvbGVkby5gfSksKDAsJC5qc3gpKGBsaWAse2NoaWxkcmVuOmBTZSBoYWxsYSBhbCBjb3JyaWVudGUgZGVsIGN1bXBsaW1pZW50byBkZSBsYXMgb2JsaWdhY2lvbmVzIHRyaWJ1dGFyaWFzIHkgY29uIGxhIFNlZ3VyaWRhZCBTb2NpYWwgaW1wdWVzdGFzIHBvciBsYXMgZGlzcG9zaWNpb25lcyB2aWdlbnRlcy5gfSksKDAsJC5qc3gpKGBsaWAse2NoaWxkcmVuOmBBY2VwdGEgZWwgUGxpZWdvIGRlIENvbmRpY2lvbmVzIGRlIExpY2l0YWNpw7NuIHkgZWwgZGUgUHJlc2NyaXBjaW9uZXMgVMOpY25pY2FzIGRlIGxhIGxpY2l0YWNpw7NuIGRlbCAiRXhwZWRpZW50ZSBBTUgvMDEvMjAyNi4uLiBkdXJhbnRlIGVsIGVqZXJjaWNpbyAyMDI2Ii5gfSksKDAsJC5qc3gpKGBsaWAse2NoaWxkcmVuOmBEZWNsYXJhY2nDs24gcmVzcG9uc2FibGUgZGUgbm8gZXN0YXIgaW5jdXJzbyBlbiBuaW5ndW5hIGRlIGxhcyBwcm9oaWJpY2lvbmVzIHBhcmEgY29udHJhdGFyLmB9KSwoMCwkLmpzeCkoYGxpYCx7Y2hpbGRyZW46YEF1dG9yaXphIGV4cHJlc2FtZW50ZSBhIGxhIEPDoW1hcmEgZGUgQ29tZXJjaW8gZGUgVG9sZWRvIHBhcmEgcXVlIGxlIHJlbWl0YSBwb3IgY29ycmVvIGVsZWN0csOzbmljbyBjdWFscXVpZXIgbm90aWZpY2FjacOzbiByZWxhY2lvbmFkYSBjb24gZWwgcHJlc2VudGUgcHJvY2VkaW1pZW50by5gfSldfSksKDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBjdXJzb3ItcG9pbnRlciBiZy1yZWQtNTAgcC0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1yZWQtMTAwIGhvdmVyOmJnLXJlZC0xMDAgdHJhbnNpdGlvbi1jb2xvcnNgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGlucHV0YCx7dHlwZTpgY2hlY2tib3hgLGNsYXNzTmFtZTpgdy00IGgtNCB0ZXh0LWNhbWFyYS1yZWQgcm91bmRlZCBmb2N1czpyaW5nLWNhbWFyYS1yZWRgLGNoZWNrZWQ6ZS5hY2VwdGFfZGVjbGFyYWNpb24sb25DaGFuZ2U6ZT0+bShgYWNlcHRhX2RlY2xhcmFjaW9uYCxlLnRhcmdldC5jaGVja2VkKSxyZXF1aXJlZDohMH0pLCgwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC14cyBmb250LWJvbGQgdGV4dC1jYW1hcmEtcmVkIHVwcGVyY2FzZWAsY2hpbGRyZW46YERlY2xhcmFjacOzbiBkZSBjb25kaWNpb25lcyAqYH0pXX0pXX0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgbXQtNiBwLTYgYmctZ3JheS01MCBib3JkZXIgYm9yZGVyLWdyYXktMjAwYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBoNGAse2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtZ3JheS03MDAgbWItNCBib3JkZXItYiBwYi0yIHVwcGVyY2FzZSB0ZXh0LXhzYCxjaGlsZHJlbjpgVFJBVEFNSUVOVE8gREUgTE9TIERBVE9TIERFIENBUsOBQ1RFUiBQRVJTT05BTGB9KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdIHRleHQtZ3JheS01MDAgbGVhZGluZy1yZWxheGVkIG1iLTQgdGV4dC1qdXN0aWZ5YCxjaGlsZHJlbjpbYEVsIHJlc3BvbnNhYmxlIGRlbCB0cmF0YW1pZW50byBkZSBzdXMgZGF0b3Mgc2Vyw6EgbGEgYCwoMCwkLmpzeCkoYHN0cm9uZ2Ase2NoaWxkcmVuOmBDw4FNQVJBIE9GSUNJQUwgREUgQ09NRVJDSU8sIElORFVTVFJJQSBZIFNFUlZJQ0lPUyBERSBUT0xFRE9gfSksYCwgQ0lGIFEtNDU3MzAwMS1HLCBjb24gZG9taWNpbGlvIGVuIENhbGxlIERpbmFtYXJjYSwgNCwgNDUwMDUgLSBUb2xlZG8uIExhIGZpbmFsaWRhZCBkZWwgdHJhdGFtaWVudG8gZXMgbGEgaW5jbHVzacOzbiBlbiBsYSBib2xzYSBkZSBkb2NlbnRlcyBob21vbG9nYWRvcyB5IGxhIGdlc3Rpw7NuIGRlbCBFeHBlZGllbnRlIEFNSC8wMS8yMDI2LiBMYSBiYXNlIGp1csOtZGljYSBlcyBlbCBjb25zZW50aW1pZW50byBkZWwgaW50ZXJlc2Fkby4gTG9zIGRhdG9zIHBvZHLDoW4gc2VyIGNlZGlkb3MgYSBsYSBDw6FtYXJhIGRlIEVzcGHDsWEgeSBBZG1pbmlzdHJhY2lvbmVzIFDDumJsaWNhcyBjb21wZXRlbnRlcy4gRWwgaW50ZXJlc2FkbyBwb2Ryw6EgZWplcmNlciBzdXMgZGVyZWNob3MgZGUgYWNjZXNvLCByZWN0aWZpY2FjacOzbiwgc3VwcmVzacOzbiwgb3Bvc2ljacOzbiwgbGltaXRhY2nDs24geSBwb3J0YWJpbGlkYWQgbWVkaWFudGUgc29saWNpdHVkIGVzY3JpdGEsIGFuZXhhbmRvIGZvdG9jb3BpYSBkZWwgRE5JLmBdfSksKDAsJC5qc3hzKShgbGFiZWxgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBjdXJzb3ItcG9pbnRlciBiZy1yZWQtNTAgcC0zIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1yZWQtMTAwIGhvdmVyOmJnLXJlZC0xMDAgdHJhbnNpdGlvbi1jb2xvcnNgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYGlucHV0YCx7dHlwZTpgY2hlY2tib3hgLGNsYXNzTmFtZTpgdy00IGgtNCB0ZXh0LWNhbWFyYS1yZWQgcm91bmRlZCBmb2N1czpyaW5nLWNhbWFyYS1yZWRgLGNoZWNrZWQ6ZS5hY2VwdGFfcmdwZCxvbkNoYW5nZTplPT5tKGBhY2VwdGFfcmdwZGAsZS50YXJnZXQuY2hlY2tlZCkscmVxdWlyZWQ6ITB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQteHMgZm9udC1ib2xkIHRleHQtY2FtYXJhLXJlZCB1cHBlcmNhc2VgLGNoaWxkcmVuOmBBY2VwdGFjacOzbiBkZSB0cmF0YW1pZW50byBkZSBkYXRvcyAqYH0pXX0pXX0pLCgwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmBtdC02IGJnLWNhbWFyYS1yZWQgcC02IHRleHQtd2hpdGVgLGNoaWxkcmVuOigwLCQuanN4cykoYGxhYmVsYCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLXN0YXJ0IHNwYWNlLXgtNCBjdXJzb3ItcG9pbnRlciBncm91cGAsY2hpbGRyZW46WygwLCQuanN4KShgaW5wdXRgLHt0eXBlOmBjaGVja2JveGAsY2xhc3NOYW1lOmBtdC0xIHctNSBoLTUgcm91bmRlZCBiZy13aGl0ZSBib3JkZXItbm9uZSB0ZXh0LWNhbWFyYS1yZWQgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy13aGl0ZSB0cmFuc2l0aW9uLWFsbGAsY2hlY2tlZDplLmFjZXB0YV9jb211bmljYWNpb25lcyxvbkNoYW5nZTplPT5tKGBhY2VwdGFfY29tdW5pY2FjaW9uZXNgLGUudGFyZ2V0LmNoZWNrZWQpfSksKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIGxlYWRpbmctcmVsYXhlZCBncm91cC1ob3Zlcjp0ZXh0LWdyYXktMjAwYCxjaGlsZHJlbjpgRG95IG1pIGNvbnNlbnRpbWllbnRvIHBhcmEgcXVlIGxhIEPDoW1hcmEgZGUgQ29tZXJjaW8gZGUgVG9sZWRvIHB1ZWRhIHV0aWxpemFyIG1pcyBkYXRvcyBwYXJhIHJlbWl0aXJtZSBpbmZvcm1hY2nDs24gc29icmUgY29udm9jYXRvcmlhcywgYWN0aXZpZGFkZXMsIG5vdGljaWFzIHJlbGFjaW9uYWRhcyB5IGJvbGV0aW5lcyBpbmZvcm1hdGl2b3MuYH0pXX0pfSldfSksKDAsJC5qc3hzKShgZGl2YCx7Y2xhc3NOYW1lOmBiZy13aGl0ZSBwLTggcm91bmRlZC1ub25lIGJvcmRlci0yIGJvcmRlci1ncmF5LTEwMGAsY2hpbGRyZW46WygwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmBtdC0yIHAtNCBiZy1ncmF5LTUwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1ub25lYCxjaGlsZHJlbjooMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBnYXAtM2AsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgdGV4dC14cyB0ZXh0LWdyYXktNjAwIGxlYWRpbmctdGlnaHRgLGNoaWxkcmVuOlt1LmNhcmdhbmRvPygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgaXRhbGljYCxjaGlsZHJlbjpgQ2FyZ2FuZG8gYm9ycmFkb3LigKZgfSk6dS51c3VhcmlvTG9ndWVhZG8/KDAsJC5qc3hzKSgkLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmBmb250LWJvbGQgdGV4dC1jYW1hcmEtcmVkIHVwcGVyY2FzZWAsY2hpbGRyZW46YEJvcnJhZG9yIGVuIHR1IGN1ZW50YWB9KSx1LnVsdGltYUFjdHVhbGl6YWNpb24mJigwLCQuanN4cykoYGRpdmAse2NoaWxkcmVuOltgw5psdGltYSB2ZXJzacOzbiBndWFyZGFkYTogYCwoMCwkLmpzeCkoYHN0cm9uZ2Ase2NoaWxkcmVuOm5ldyBEYXRlKHUudWx0aW1hQWN0dWFsaXphY2lvbi5yZXBsYWNlKGAgYCxgVGApKS50b0xvY2FsZVN0cmluZyhgZXMtRVNgKX0pXX0pLCgwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmB0ZXh0LWdyYXktNTAwYCxjaGlsZHJlbjpgUHVlZGVzIHJldG9tYXJsbyBkZXNkZSBjdWFscXVpZXIgZGlzcG9zaXRpdm8gaW5pY2lhbmRvIHNlc2nDs24uYH0pXX0pOigwLCQuanN4cykoJC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgZm9udC1ib2xkIHRleHQtZ3JheS03MDAgdXBwZXJjYXNlYCxjaGlsZHJlbjpgQm9ycmFkb3IgbG9jYWxgfSksKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHRleHQtZ3JheS01MDBgLGNoaWxkcmVuOmBObyBoYXMgaW5pY2lhZG8gc2VzacOzbjogdHUgYm9ycmFkb3Igc2UgZ3VhcmRhIHNvbG8gZW4gZXN0ZSBuYXZlZ2Fkb3IuYH0pXX0pLHUuZXJyb3ImJigwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmB0ZXh0LXJlZC02MDAgZm9udC1ib2xkIG10LTFgLGNoaWxkcmVuOnUuZXJyb3J9KV19KSwoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGZsZXggZ2FwLTIgZmxleC1zaHJpbmstMGAsY2hpbGRyZW46WygwLCQuanN4KShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOmFzeW5jKCk9PntpZighdS51c3VhcmlvTG9ndWVhZG98fCF1Lm5vbmNlKXt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oU3ksSlNPTi5zdHJpbmdpZnkoe2RvYzplLHRzOkRhdGUubm93KCl9KSksYWxlcnQoYEJvcnJhZG9yIGd1YXJkYWRvIGVuIGVzdGUgbmF2ZWdhZG9yLiBJbmljaWEgc2VzacOzbiBlbiBsYSB3ZWIgcGFyYSBndWFyZGFybG8gZW4gdHUgY3VlbnRhIHkgcG9kZXIgcmV0b21hcmxvIGRlc2RlIG90cm8gZGlzcG9zaXRpdm8uYCl9Y2F0Y2h7YWxlcnQoYE5vIHNlIHB1ZG8gZ3VhcmRhciBlbCBib3JyYWRvciBsb2NhbG1lbnRlLmApfXJldHVybn1kKGU9Pih7Li4uZSxndWFyZGFuZG86ITAsZXJyb3I6bnVsbH0pKTt0cnl7bGV0IHQ9YXdhaXQgZmV0Y2goUyhgL3dwLWpzb24vY2FtYXJhL3YxL2JvcnJhZG9yLWluZGl2aWR1YWxgKSx7bWV0aG9kOmBQT1NUYCxjcmVkZW50aWFsczpgaW5jbHVkZWAsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6YGFwcGxpY2F0aW9uL2pzb25gLCJYLVdQLU5vbmNlIjp1Lm5vbmNlfSxib2R5OkpTT04uc3RyaW5naWZ5KHtwYXlsb2FkOntkb2M6ZX19KX0pO2lmKCF0Lm9rKXRocm93IEVycm9yKGBIVFRQIGArdC5zdGF0dXMpO2xldCBuPWF3YWl0IHQuanNvbigpO2QoZT0+KHsuLi5lLGd1YXJkYW5kbzohMSx1bHRpbWFBY3R1YWxpemFjaW9uOm4/LnVwZGF0ZWRfYXR8fG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0pKX1jYXRjaChlKXtkKHQ9Pih7Li4udCxndWFyZGFuZG86ITEsZXJyb3I6YE5vIHNlIHB1ZG8gZ3VhcmRhcjogYCtlLm1lc3NhZ2V9KSl9fSxkaXNhYmxlZDp1Lmd1YXJkYW5kb3x8dS5jYXJnYW5kbyxjbGFzc05hbWU6YGJnLWdyYXktNzAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSByb3VuZGVkLW5vbmUgaG92ZXI6YmctZ3JheS04MDAgZGlzYWJsZWQ6b3BhY2l0eS02MCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMmAsY2hpbGRyZW46dS5ndWFyZGFuZG8/KDAsJC5qc3hzKSgkLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsJC5qc3hzKShgc3ZnYCx7Y2xhc3NOYW1lOmBhbmltYXRlLXNwaW4gaC00IHctNGAsZmlsbDpgbm9uZWAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBjaXJjbGVgLHtjbGFzc05hbWU6YG9wYWNpdHktMjVgLGN4OmAxMmAsY3k6YDEyYCxyOmAxMGAsc3Ryb2tlOmBjdXJyZW50Q29sb3JgLHN0cm9rZVdpZHRoOmA0YH0pLCgwLCQuanN4KShgcGF0aGAse2NsYXNzTmFtZTpgb3BhY2l0eS03NWAsZmlsbDpgY3VycmVudENvbG9yYCxkOmBNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6YH0pXX0pLGBHdWFyZGFuZG/igKZgXX0pOigwLCQuanN4cykoJC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLCQuanN4KShgc3ZnYCx7Y2xhc3NOYW1lOmB3LTQgaC00YCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgMmAsZDpgTTggN0g1YTIgMiAwIDAwLTIgMnY5YTIgMiAwIDAwMiAyaDE0YTIgMiAwIDAwMi0yVjlhMiAyIDAgMDAtMi0yaC0zbS0xIDRsLTMgM20wIDBsLTMtM20zIDNWNGB9KX0pLGBHdWFyZGFyIGJvcnJhZG9yYF19KX0pLCgwLCQuanN4KShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOmFzeW5jKCk9PntpZihjb25maXJtKGDCv1NlZ3VybyBxdWUgcXVpZXJlcyBkZXNjYXJ0YXIgZXN0ZSBib3JyYWRvciB5IGVtcGV6YXIgZGUgY2Vybz8gRXN0YSBhY2Npw7NuIG5vIHNlIHB1ZWRlIGRlc2hhY2VyLmApKXt0cnl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU3kpLHUudXN1YXJpb0xvZ3VlYWRvJiZ1Lm5vbmNlJiZhd2FpdCBmZXRjaChTKGAvd3AtanNvbi9jYW1hcmEvdjEvYm9ycmFkb3ItaW5kaXZpZHVhbGApLHttZXRob2Q6YERFTEVURWAsY3JlZGVudGlhbHM6YGluY2x1ZGVgLGhlYWRlcnM6eyJYLVdQLU5vbmNlIjp1Lm5vbmNlfX0pfWNhdGNoe310KGJ5KSxkKGU9Pih7Li4uZSx1bHRpbWFBY3R1YWxpemFjaW9uOm51bGx9KSl9fSxjbGFzc05hbWU6YGJnLXdoaXRlIHRleHQtZ3JheS02MDAgYm9yZGVyIGJvcmRlci1ncmF5LTQwMCBweC0zIHB5LTIgdGV4dC14cyBmb250LWJvbGQgdXBwZXJjYXNlIHJvdW5kZWQtbm9uZSBob3ZlcjpiZy1ncmF5LTEwMGAsdGl0bGU6YERlc2NhcnRhciBib3JyYWRvciB5IGVtcGV6YXIgZGUgY2Vyb2AsY2hpbGRyZW46YERlc2NhcnRhcmB9KV19KV19KX0pLCgwLCQuanN4KShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxvbkNsaWNrOmFzeW5jKCk9Pnt0cnl7bCghMCk7bGV0e2dlbmVyYXJQREZJbmRpdmlkdWFsOnR9PWF3YWl0IE8oYXN5bmMoKT0+e2xldHtnZW5lcmFyUERGSW5kaXZpZHVhbDplfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeXkoKSxveSkpO3JldHVybntnZW5lcmFyUERGSW5kaXZpZHVhbDplfX0sdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7dChlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGBFcnJvciBnZW5lcmFuZG8gUERGOmAsZSksYWxlcnQoYE5vIHNlIHB1ZG8gZ2VuZXJhciBlbCBQREYuIEludMOpbnRhbG8gZGUgbnVldm8uYCl9ZmluYWxseXtsKCExKX19LGRpc2FibGVkOmMsY2xhc3NOYW1lOmBtdC00IHctZnVsbCBiZy13aGl0ZSB0ZXh0LWNhbWFyYS1yZWQgYm9yZGVyLTIgYm9yZGVyLWNhbWFyYS1yZWQgcHktNCByb3VuZGVkLW5vbmUgZm9udC1ibGFjayB0ZXh0LWxnIGhvdmVyOmJnLXJlZC01MCB0cmFuc2l0aW9uLWFsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBkaXNhYmxlZDpvcGFjaXR5LTYwYCxjaGlsZHJlbjpjPygwLCQuanN4cykoJC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLCQuanN4cykoYHN2Z2Ase2NsYXNzTmFtZTpgYW5pbWF0ZS1zcGluIGgtNSB3LTVgLGZpbGw6YG5vbmVgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46WygwLCQuanN4KShgY2lyY2xlYCx7Y2xhc3NOYW1lOmBvcGFjaXR5LTI1YCxjeDpgMTJgLGN5OmAxMmAscjpgMTBgLHN0cm9rZTpgY3VycmVudENvbG9yYCxzdHJva2VXaWR0aDpgNGB9KSwoMCwkLmpzeCkoYHBhdGhgLHtjbGFzc05hbWU6YG9wYWNpdHktNzVgLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpgTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0emB9KV19KSxgR0VORVJBTkRPIFBERuKApmBdfSk6KDAsJC5qc3hzKSgkLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsJC5qc3gpKGBzdmdgLHtjbGFzc05hbWU6YHctNSBoLTVgLGZpbGw6YG5vbmVgLHN0cm9rZTpgY3VycmVudENvbG9yYCx2aWV3Qm94OmAwIDAgMjQgMjRgLGNoaWxkcmVuOigwLCQuanN4KShgcGF0aGAse3N0cm9rZUxpbmVjYXA6YHJvdW5kYCxzdHJva2VMaW5lam9pbjpgcm91bmRgLHN0cm9rZVdpZHRoOmAyYCxkOmBNMTIgMTB2Nm0wIDBsLTMtM20zIDNsMy0zTTMgMTdWN2EyIDIgMCAwMTItMmg2bDIgMmg2YTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0yemB9KX0pLGBERVNDQVJHQVIgUERGIERFIExBIFNPTElDSVRVRGBdfSl9KSwoMCwkLmpzeCkoYGJ1dHRvbmAse3R5cGU6YHN1Ym1pdGAsZGlzYWJsZWQ6bixjbGFzc05hbWU6YG10LTQgdy1mdWxsIGJnLWNhbWFyYS1yZWQgdGV4dC13aGl0ZSBweS00IHJvdW5kZWQtbGcgZm9udC1ibGFjayB0ZXh0LXhsIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIGhvdmVyOmJnLWNhbWFyYS1yZWQtZGFyayB0cmFuc2l0aW9uLWFsbCBzaGFkb3ctc29mdC1sZyBob3ZlcjpzaGFkb3ctbGcgZGlzYWJsZWQ6b3BhY2l0eS01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtM2AsY2hpbGRyZW46bj8oMCwkLmpzeHMpKCQuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCwkLmpzeHMpKGBzdmdgLHtjbGFzc05hbWU6YGFuaW1hdGUtc3BpbiBoLTYgdy02IHRleHQtd2hpdGVgLGZpbGw6YG5vbmVgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46WygwLCQuanN4KShgY2lyY2xlYCx7Y2xhc3NOYW1lOmBvcGFjaXR5LTI1YCxjeDpgMTJgLGN5OmAxMmAscjpgMTBgLHN0cm9rZTpgY3VycmVudENvbG9yYCxzdHJva2VXaWR0aDpgNGB9KSwoMCwkLmpzeCkoYHBhdGhgLHtjbGFzc05hbWU6YG9wYWNpdHktNzVgLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpgTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0em0yIDUuMjkxQTcuOTYyIDcuOTYyIDAgMDE0IDEySDBjMCAzLjA0MiAxLjEzNSA1LjgyNCAzIDcuOTM4bDMtMi42NDd6YH0pXX0pLGBQUk9DRVNBTkRPLi4uYF19KTpgRU5WSUFSIFNPTElDSVRVRCBBIExBIEPDgU1BUkFgfSldfSldfSl9KV19KX12YXIgd3k9YGNhbWFyYV90aXBvX3NvbGljaXR1ZGA7ZnVuY3Rpb24gVHkoKXtsZXRbZSx0XT0oMCx5LnVzZVN0YXRlKShudWxsKTtyZXR1cm4oMCx5LnVzZUVmZmVjdCkoKCk9Pnt0cnl7bGV0IGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0od3kpOyhlPT09YGVudGlkYWRgfHxlPT09YGluZGl2aWR1YWxgKSYmdChlKX1jYXRjaHt9fSxbXSksZT09PWBlbnRpZGFkYHx8ZT09PWBpbmRpdmlkdWFsYD8oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YG1pbi1oLXNjcmVlbmAsY2hpbGRyZW46WygwLCQuanN4KShFeSx7dGlwbzplLG9uVm9sdmVyOigpPT57dChudWxsKTt0cnl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0od3kpfWNhdGNoe313aW5kb3cuc2Nyb2xsVG8oMCwwKX19KSwoMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgbWF4LXctN3hsIG14LWF1dG8gcHgtNCBtZDpweC04IHB5LThgLGNoaWxkcmVuOmU9PT1gZW50aWRhZGA/KDAsJC5qc3gpKHR5LHt9KTooMCwkLmpzeCkoQ3kse30pfSldfSk6KDAsJC5qc3gpKER5LHtvbkVsZWdpcjplPT57dChlKTt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0od3ksZSl9Y2F0Y2h7fX19KX1mdW5jdGlvbiBFeSh7dGlwbzplLG9uVm9sdmVyOnR9KXtyZXR1cm4oMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YGJnLXdoaXRlIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBweC00IG1kOnB4LTggcHktMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdGV4dC14cyBzaGFkb3ctc29mdCBzdGlja3kgdG9wLTAgei00MGAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgdGV4dC1ncmF5LTYwMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMmAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctNiBoLTYgcm91bmRlZC1mdWxsIGJnLXJlZC01MCB0ZXh0LWNhbWFyYS1yZWRgLGNoaWxkcmVuOmU9PT1gZW50aWRhZGA/KDAsJC5qc3gpKGBzdmdgLHtjbGFzc05hbWU6YHctMy41IGgtMy41YCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgMmAsZDpgTTE5IDIxVjVhMiAyIDAgMDAtMi0ySDdhMiAyIDAgMDAtMiAydjE2bTE0IDBoMm0tMiAwaC01bS05IDBIM20yIDBoNU05IDdoMW0tMSA0aDFtNC00aDFtLTEgNGgxbS01IDEwdi01YTEgMSAwIDAxMS0xaDJhMSAxIDAgMDExIDF2NW0tNCAwaDRgfSl9KTooMCwkLmpzeCkoYHN2Z2Ase2NsYXNzTmFtZTpgdy0zLjUgaC0zLjVgLGZpbGw6YG5vbmVgLHN0cm9rZTpgY3VycmVudENvbG9yYCx2aWV3Qm94OmAwIDAgMjQgMjRgLGNoaWxkcmVuOigwLCQuanN4KShgcGF0aGAse3N0cm9rZUxpbmVjYXA6YHJvdW5kYCxzdHJva2VMaW5lam9pbjpgcm91bmRgLHN0cm9rZVdpZHRoOmAyYCxkOmBNMTYgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6TTEyIDE0YTcgNyAwIDAwLTcgN2gxNGE3IDcgMCAwMC03LTd6YH0pfSl9KSwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMGAsY2hpbGRyZW46ZT09PWBlbnRpZGFkYD9gRW50aWRhZCBmb3JtYXRpdmFgOmBEb2NlbnRlIGluZGl2aWR1YWxgfSksKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmBoaWRkZW4gbWQ6aW5saW5lIHRleHQtZ3JheS00MDBgLGNoaWxkcmVuOmDCt2B9KSwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YGhpZGRlbiBtZDppbmxpbmUgdGV4dC1ncmF5LTQwMGAsY2hpbGRyZW46ZT09PWBlbnRpZGFkYD9gVW5vIG8gdmFyaW9zIGRvY2VudGVzYDpgUGVyc29uYSBmw61zaWNhIHBvciBjdWVudGEgcHJvcGlhYH0pXX0pLCgwLCQuanN4cykoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsb25DbGljazp0LGNsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkIGZvbnQtc2VtaWJvbGQgaG92ZXI6dGV4dC1jYW1hcmEtcmVkLWRhcmsgdHJhbnNpdGlvbi1jb2xvcnMgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHN2Z2Ase2NsYXNzTmFtZTpgdy0zIGgtM2AsZmlsbDpgbm9uZWAsc3Ryb2tlOmBjdXJyZW50Q29sb3JgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46KDAsJC5qc3gpKGBwYXRoYCx7c3Ryb2tlTGluZWNhcDpgcm91bmRgLHN0cm9rZUxpbmVqb2luOmByb3VuZGAsc3Ryb2tlV2lkdGg6YDIuNWAsZDpgTTE1IDE5bC03LTcgNy03YH0pfSksYENhbWJpYXIgdGlwb2BdfSldfSl9ZnVuY3Rpb24gRHkoe29uRWxlZ2lyOmV9KXtyZXR1cm4oMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgbWluLWgtc2NyZWVuIHB5LTE2IHB4LTZgLGNoaWxkcmVuOigwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgbWF4LXctNXhsIG14LWF1dG9gLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBkaXZgLHtjbGFzc05hbWU6YHRleHQtY2VudGVyIG1iLTE0YCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC00IHB5LTEuNSBiZy1yZWQtNTAgdGV4dC1jYW1hcmEtcmVkIHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciByb3VuZGVkLWZ1bGwgbWItNCBib3JkZXIgYm9yZGVyLXJlZC0xMDBgLGNoaWxkcmVuOmBFeHBlZGllbnRlIEFNSC8wMS8yMDI2YH0pLCgwLCQuanN4cykoYGgxYCx7Y2xhc3NOYW1lOmB0ZXh0LTR4bCBtZDp0ZXh0LTV4bCBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgdHJhY2tpbmctdGlnaHQgbWItM2AsY2hpbGRyZW46W2BTb2xpY2l0dWQgZGUgYCwoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQtY2FtYXJhLXJlZGAsY2hpbGRyZW46YEhvbW9sb2dhY2nDs25gfSldfSksKDAsJC5qc3gpKGBwYCx7Y2xhc3NOYW1lOmB0ZXh0LWxnIHRleHQtZ3JheS02MDAgbWItMmAsY2hpbGRyZW46YEPDoW1hcmEgT2ZpY2lhbCBkZSBDb21lcmNpbywgSW5kdXN0cmlhIHkgU2VydmljaW9zIGRlIFRvbGVkb2B9KSwoMCwkLmpzeCkoYGRpdmAse2NsYXNzTmFtZTpgdy0xNiBoLTEgYmctY2FtYXJhLXJlZCByb3VuZGVkLWZ1bGwgbXgtYXV0byBtdC02YH0pXX0pLCgwLCQuanN4KShgcGAse2NsYXNzTmFtZTpgdGV4dC1jZW50ZXIgdGV4dC1ncmF5LTYwMCBtYi0xMiBtYXgtdy0zeGwgbXgtYXV0byBsZWFkaW5nLXJlbGF4ZWRgLGNoaWxkcmVuOmBQYXJhIGNvbWVuemFyLCBpbmRpY2EgcXXDqSB0aXBvIGRlIHNvbGljaXR1ZCBxdWllcmVzIHByZXNlbnRhci4gUG9kcsOhcyBjYW1iaWFyIGRlIG9wY2nDs24gbcOhcyBhZGVsYW50ZSBzaSBsbyBuZWNlc2l0YXMuYH0pLCgwLCQuanN4cykoYGRpdmAse2NsYXNzTmFtZTpgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNmAsY2hpbGRyZW46WygwLCQuanN4cykoYGRpdmAse3JvbGU6YGJ1dHRvbmAsdGFiSW5kZXg6MCxvbkNsaWNrOigpPT5lKGBlbnRpZGFkYCksb25LZXlEb3duOnQ9PnsodC5rZXk9PT1gRW50ZXJgfHx0LmtleT09PWAgYCkmJih0LnByZXZlbnREZWZhdWx0KCksZShgZW50aWRhZGApKX0sY2xhc3NOYW1lOmBncm91cCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJvcmRlci1jYW1hcmEtcmVkIHJvdW5kZWQtMnhsIHAtOCB0ZXh0LWxlZnQgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0xIHNoYWRvdy1zb2Z0IGhvdmVyOnNoYWRvdy1zb2Z0LWxnYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBkaXZgLHtjbGFzc05hbWU6YHctMTQgaC0xNCBiZy1yZWQtNTAgdGV4dC1jYW1hcmEtcmVkIHJvdW5kZWQteGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWItNiBncm91cC1ob3ZlcjpiZy1jYW1hcmEtcmVkIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnNgLGNoaWxkcmVuOigwLCQuanN4KShgc3ZnYCx7Y2xhc3NOYW1lOmB3LTcgaC03YCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgMmAsZDpgTTE5IDIxVjVhMiAyIDAgMDAtMi0ySDdhMiAyIDAgMDAtMiAydjE2bTE0IDBoMm0tMiAwaC01bS05IDBIM20yIDBoNU05IDdoMW0tMSA0aDFtNC00aDFtLTEgNGgxbS01IDEwdi01YTEgMSAwIDAxMS0xaDJhMSAxIDAgMDExIDF2NW0tNCAwaDRgfSl9KX0pLCgwLCQuanN4KShgaDJgLHtjbGFzc05hbWU6YHRleHQteGwgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIG1iLTJgLGNoaWxkcmVuOmBTb3kgdW5hIGVudGlkYWQgZm9ybWF0aXZhYH0pLCgwLCQuanN4KShgcGAse2NsYXNzTmFtZTpgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTUgbGVhZGluZy1yZWxheGVkYCxjaGlsZHJlbjpgUHJlc2VudGEgdW5vIG8gdmFyaW9zIGRvY2VudGVzIGVuIG5vbWJyZSBkZSB0dSBlbXByZXNhLCBhc29jaWFjacOzbiBvIGNlbnRybyBkZSBmb3JtYWNpw7NuLmB9KSwoMCwkLmpzeHMpKGB1bGAse2NsYXNzTmFtZTpgdGV4dC14cyB0ZXh0LWdyYXktNTAwIHNwYWNlLXktMS41IG1iLTZgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBsaWAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1zdGFydCBnYXAtMmAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkIG10LTAuNWAsY2hpbGRyZW46YOKAomB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjaGlsZHJlbjpgRGF0b3MgZmlzY2FsZXMgZGUgbGEgZW50aWRhZCAocmF6w7NuIHNvY2lhbCwgQ0lG4oCmKWB9KV19KSwoMCwkLmpzeHMpKGBsaWAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1zdGFydCBnYXAtMmAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkIG10LTAuNWAsY2hpbGRyZW46YOKAomB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjaGlsZHJlbjpgUmVwcmVzZW50YW50ZSBsZWdhbCB5IHBlcnNvbmEgZGUgY29udGFjdG9gfSldfSksKDAsJC5qc3hzKShgbGlgLHtjbGFzc05hbWU6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTJgLGNoaWxkcmVuOlsoMCwkLmpzeCkoYHNwYW5gLHtjbGFzc05hbWU6YHRleHQtY2FtYXJhLXJlZCBtdC0wLjVgLGNoaWxkcmVuOmDigKJgfSksKDAsJC5qc3gpKGBzcGFuYCx7Y2hpbGRyZW46YERvY3VtZW50YWNpw7NuIGNvcnBvcmF0aXZhIChJQUUsIEFFQVQsIFRHU1PigKYpYH0pXX0pLCgwLCQuanN4cykoYGxpYCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmB0ZXh0LWNhbWFyYS1yZWQgbXQtMC41YCxjaGlsZHJlbjpg4oCiYH0pLCgwLCQuanN4KShgc3BhbmAse2NoaWxkcmVuOmBNw7psdGlwbGVzIGRvY2VudGVzIGVuIHVuYSBtaXNtYSBzb2xpY2l0dWRgfSldfSldfSksKDAsJC5qc3hzKShgc3BhbmAse2NsYXNzTmFtZTpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHRleHQtY2FtYXJhLXJlZCBmb250LWJvbGQgdGV4dC1zbSBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0xIHRyYW5zaXRpb24tdHJhbnNmb3JtYCxjaGlsZHJlbjpbYEVtcGV6YXIgc29saWNpdHVkYCwoMCwkLmpzeCkoYHN2Z2Ase2NsYXNzTmFtZTpgdy00IGgtNCBtbC0xYCxmaWxsOmBub25lYCxzdHJva2U6YGN1cnJlbnRDb2xvcmAsdmlld0JveDpgMCAwIDI0IDI0YCxjaGlsZHJlbjooMCwkLmpzeCkoYHBhdGhgLHtzdHJva2VMaW5lY2FwOmByb3VuZGAsc3Ryb2tlTGluZWpvaW46YHJvdW5kYCxzdHJva2VXaWR0aDpgMi41YCxkOmBNMTcgOGw0IDRtMCAwbC00IDRtNC00SDNgfSl9KV19KV19KSwoMCwkLmpzeHMpKGBkaXZgLHtyb2xlOmBidXR0b25gLHRhYkluZGV4OjAsb25DbGljazooKT0+ZShgaW5kaXZpZHVhbGApLG9uS2V5RG93bjp0PT57KHQua2V5PT09YEVudGVyYHx8dC5rZXk9PT1gIGApJiYodC5wcmV2ZW50RGVmYXVsdCgpLGUoYGluZGl2aWR1YWxgKSl9LGNsYXNzTmFtZTpgZ3JvdXAgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBob3Zlcjpib3JkZXItY2FtYXJhLXJlZCByb3VuZGVkLTJ4bCBwLTggdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjotdHJhbnNsYXRlLXktMSBzaGFkb3ctc29mdCBob3ZlcjpzaGFkb3ctc29mdC1sZ2AsY2hpbGRyZW46WygwLCQuanN4KShgZGl2YCx7Y2xhc3NOYW1lOmB3LTE0IGgtMTQgYmctcmVkLTUwIHRleHQtY2FtYXJhLXJlZCByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgZ3JvdXAtaG92ZXI6YmctY2FtYXJhLXJlZCBncm91cC1ob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzYCxjaGlsZHJlbjooMCwkLmpzeCkoYHN2Z2Ase2NsYXNzTmFtZTpgdy03IGgtN2AsZmlsbDpgbm9uZWAsc3Ryb2tlOmBjdXJyZW50Q29sb3JgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46KDAsJC5qc3gpKGBwYXRoYCx7c3Ryb2tlTGluZWNhcDpgcm91bmRgLHN0cm9rZUxpbmVqb2luOmByb3VuZGAsc3Ryb2tlV2lkdGg6YDJgLGQ6YE0xNiA3YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHpNMTIgMTRhNyA3IDAgMDAtNyA3aDE0YTcgNyAwIDAwLTctN3pgfSl9KX0pLCgwLCQuanN4KShgaDJgLHtjbGFzc05hbWU6YHRleHQteGwgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIG1iLTJgLGNoaWxkcmVuOmBTb3kgdW4gZG9jZW50ZSBpbmRpdmlkdWFsYH0pLCgwLCQuanN4KShgcGAse2NsYXNzTmFtZTpgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTUgbGVhZGluZy1yZWxheGVkYCxjaGlsZHJlbjpgUGVyc29uYSBmw61zaWNhIHF1ZSBzZSBwcmVzZW50YSBwb3IgY3VlbnRhIHByb3BpYSwgc2luIGVzdGFyIHJlc3BhbGRhZGEgcG9yIHVuYSBlbnRpZGFkLmB9KSwoMCwkLmpzeHMpKGB1bGAse2NsYXNzTmFtZTpgdGV4dC14cyB0ZXh0LWdyYXktNTAwIHNwYWNlLXktMS41IG1iLTZgLGNoaWxkcmVuOlsoMCwkLmpzeHMpKGBsaWAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1zdGFydCBnYXAtMmAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkIG10LTAuNWAsY2hpbGRyZW46YOKAomB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjaGlsZHJlbjpgRGF0b3MgcGVyc29uYWxlcyBkZWwgZG9jZW50ZWB9KV19KSwoMCwkLmpzeHMpKGBsaWAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1zdGFydCBnYXAtMmAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkIG10LTAuNWAsY2hpbGRyZW46YOKAomB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjaGlsZHJlbjpgRG9jdW1lbnRhY2nDs24gcGVyc29uYWwgKEROSSwgQ1YsIHNpdHVhY2nDs24pYH0pXX0pLCgwLCQuanN4cykoYGxpYCx7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yYCxjaGlsZHJlbjpbKDAsJC5qc3gpKGBzcGFuYCx7Y2xhc3NOYW1lOmB0ZXh0LWNhbWFyYS1yZWQgbXQtMC41YCxjaGlsZHJlbjpg4oCiYH0pLCgwLCQuanN4KShgc3BhbmAse2NoaWxkcmVuOmBNw6lyaXRvcyBhY2Fkw6ltaWNvcyB5IGV4cGVyaWVuY2lhIHByb3BpYWB9KV19KSwoMCwkLmpzeHMpKGBsaWAse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1zdGFydCBnYXAtMmAsY2hpbGRyZW46WygwLCQuanN4KShgc3BhbmAse2NsYXNzTmFtZTpgdGV4dC1jYW1hcmEtcmVkIG10LTAuNWAsY2hpbGRyZW46YOKAomB9KSwoMCwkLmpzeCkoYHNwYW5gLHtjaGlsZHJlbjpgVW5hIHNvbGEgc29saWNpdHVkIHBvciBwZXJzb25hYH0pXX0pXX0pLCgwLCQuanN4cykoYHNwYW5gLHtjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNhbWFyYS1yZWQgZm9udC1ib2xkIHRleHQtc20gZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMSB0cmFuc2l0aW9uLXRyYW5zZm9ybWAsY2hpbGRyZW46W2BFbXBlemFyIHNvbGljaXR1ZGAsKDAsJC5qc3gpKGBzdmdgLHtjbGFzc05hbWU6YHctNCBoLTQgbWwtMWAsZmlsbDpgbm9uZWAsc3Ryb2tlOmBjdXJyZW50Q29sb3JgLHZpZXdCb3g6YDAgMCAyNCAyNGAsY2hpbGRyZW46KDAsJC5qc3gpKGBwYXRoYCx7c3Ryb2tlTGluZWNhcDpgcm91bmRgLHN0cm9rZUxpbmVqb2luOmByb3VuZGAsc3Ryb2tlV2lkdGg6YDIuNWAsZDpgTTE3IDhsNCA0bTAgMGwtNCA0bTQtNEgzYH0pfSldfSldfSldfSksKDAsJC5qc3gpKGBwYCx7Y2xhc3NOYW1lOmB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMTIgaXRhbGljYCxjaGlsZHJlbjpgU2kgdGllbmVzIGR1ZGFzIHNvYnJlIHF1w6kgb3BjacOzbiBlbGVnaXIsIHBvbnRlIGVuIGNvbnRhY3RvIGNvbiBsYSBDw6FtYXJhIGRlIENvbWVyY2lvIGRlIFRvbGVkby5gfSldfSl9KX0oMCxiLmNyZWF0ZVJvb3QpKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW1hcmEtZm9ybS1yb290IikpLnJlbmRlcigoMCwkLmpzeCkoeS5TdHJpY3RNb2RlLHtjaGlsZHJlbjooMCwkLmpzeCkoVHkse30pfSkpOw==
Cerrar
Cerrar