|
|
(61 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
− |
| |
| <html> | | <html> |
| + | <!-- predisplay while loading --> |
| + | <style> |
| + | body { |
| + | width: 1200px; |
| + | background-color: rgb(217,217,217); |
| + | margin: auto; |
| + | font-family: 'Roboto', Helvetica, SansSerif; |
| + | padding: 0; |
| + | color: black; |
| + | background-color:rgb(217,217,217); |
| + | word-wrap: break-word; |
| + | } |
| | | |
− | <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> | + | #cssmenu { |
− | <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet"> | + | background: white; |
− | <meta charset="utf-8"> | + | margin-top: 25px; |
| + | width: 100%; |
| + | padding: 0; |
| + | line-height: 1; |
| + | display: block; |
| + | position: relative; |
| + | top: 0em; |
| + | z-index: 1000; |
| + | font-family: 'PT Sans', sans-serif; |
| | | |
− |
| + | } |
− | <base href="https://2018.igem.org/Team:GO_Paris-Saclay">
| + | |
| | | |
− | <meta name="viewport" content="width=device-width, initial-scale=1"> | + | #cssmenu ul { |
| + | list-style: none; |
| + | margin: 0; |
| + | padding: 0; |
| + | display: block; |
| + | z-index: 1000; |
| + | } |
| + | #cssmenu ul:after, |
| + | #cssmenu:after { |
| + | content: " "; |
| + | display: block; |
| + | font-size: 0; |
| + | height: 0; |
| + | clear: both; |
| + | visibility: hidden; |
| + | } |
| + | #cssmenu ul li { |
| + | margin: 0; |
| + | margin-right: 5px; |
| + | padding: 0; |
| + | display: block; |
| + | position: relative; |
| + | z-index: 1000; |
| | | |
| + | } |
| + | #cssmenu ul li a { |
| + | text-decoration: none; |
| + | display: block; |
| + | margin: 0; |
| + | -webkit-transition: color .2s ease; |
| + | -moz-transition: color .2s ease; |
| + | -ms-transition: color .2s ease; |
| + | -o-transition: color .2s ease; |
| + | transition: color .2s ease; |
| + | -webkit-box-sizing: border-box; |
| + | -moz-box-sizing: border-box; |
| + | box-sizing: border-box; |
| + | z-index: 1000; |
| | | |
− | <div id="bigmaindiv">
| + | } |
− | <app-root></app-root>
| + | |
− | </div>
| + | |
− | <link rel="stylesheet" href="data:text/css;base64,Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojNjczYWI3O2NhcmV0LWNvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZmQ3NDB9Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QxYzRlOX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNTdmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZjZGQyfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6IzY3M2FiNztzdHJva2U6IzYyMDAzY30ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmZkNzQwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSwtd2Via2l0LXRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciwuY2RrLW92ZXJsYXktY29udGFpbmVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjg4KX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydDthbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5ne2hlaWdodDphdXRvIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MnB4IDAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ghaW1wb3J0YW50fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6IzYyMDAzY30ubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojOTYxZTY0fS5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmY2ZTQwfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojZmFmYWZhfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojOTYxZTY0fS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6IzYyMDAzY30ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZmNmU0MH0ubWF0LWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYmFkZ2UtaGlkZGVuIC5tYXQtYmFkZ2UtY29udGVudHtkaXNwbGF5Om5vbmV9Lm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNjIwMDNjO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQsLXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC42KTt0cmFuc2Zvcm06c2NhbGUoLjYpO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztwb2ludGVyLWV2ZW50czpub25lfS5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZley13ZWJraXQtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDo4cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6MCAwfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xMil9Lm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4xMil9Lm1hdC1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMSl9Lm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mYWIubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1mYWIubWF0LXdhcm4sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMil9Lm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMil9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmFmYWZhfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmYWZhZmEhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94Om5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7b3BhY2l0eTouNDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9bWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvdyx0ZC5tYXQtY2VsbCx0ZC5tYXQtZm9vdGVyLWNlbGwsdGgubWF0LWhlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNhbGVuZGFyLWFycm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24sLm1hdC1kYXRlcGlja2VyLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpLC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiM2MjAwM2N9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1oaW50e2NvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1lcnJvcntjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNDIpIDAscmdiYSgwLDAsMCwuNDIpIDMzJSx0cmFuc3BhcmVudCAwKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2JvdHRvbToxLjM0Mzc1ZW07Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjZlNDB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWxpc3QtaXRlbS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOjAgMDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbjpub3QoW2NvbG9yXSksLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZDBiM2M1fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZTBiY2QxfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjY2JjfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojOTYxZTY0fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2ZmNmU0MH0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MjAwM2N9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY2ZTQwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4yNil9Lm1hdC1zZWxlY3QtY29udGVudCwubWF0LXNlbGVjdC1wYW5lbC1kb25lLWFuaW1hdGluZ3tiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdywubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnk6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmNTcyMn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsODcsMzQsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC4xMil9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC43KSxyZ2JhKDAsMCwwLC43KSAycHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoLjAwMDFkZWcscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1ub3QtdG91Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOCwxNzksMTk3LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMjQsMTg4LDIwOSwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOCwxNzksMTk3LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNCwxODgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3MsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC10b29sYmFye2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjppbmhlcml0fS5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiMzMjMyMzI7Y29sb3I6I2ZmZn0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6Izk2MWU2NH0jSFFfcGFnZSBoMntiYWNrZ3JvdW5kLWNvbG9yOiM3YTI2NTk7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfSNIUV9wYWdlICN0b2N0aXRsZSBoMntiYWNrZ3JvdW5kLWNvbG9yOnVuc2V0O2NvbG9yOnVuc2V0O2JhY2tncm91bmQtc2l6ZToxMDAlIGF1dG99LmF4aXMtLXggLmRvbWFpbiwuYXhpcy0teSAuZG9tYWlue2Rpc3BsYXk6bm9uZX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXgtYmFzaXM6MH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OlJvYm90bztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8yLzI2L1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzAvMGIvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL0ZpbGU6VC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL0ZpbGU6VC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuc3ZnI1JvYm90bykgZm9ybWF0KCJzdmciKX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5Ok1hdGVyaWFsSWNvbnMtUmVndWxhcjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDB9QGZvbnQtZmFjZXtmb250LWZhbWlseTonTWF0ZXJpYWwgSWNvbnMnO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzUvNTEvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuZW90KTtzcmM6bG9jYWwoIlJvYm90byIpLGxvY2FsKCJSb2JvdG8tUmVndWxhciIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdD8jaWVmaXgpIGZvcm1hdCgiZW1iZWRkZWQtb3BlbnR5cGUiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yOC9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci53b2ZmKSBmb3JtYXQoIndvZmYiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMS8xZS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci50dGYpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMy8zZi9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5zdmcjTWF0ZXJpYWxJY29ucy1SZWd1bGFyKSBmb3JtYXQoInN2ZyIpfS5tYXRlcmlhbC1pY29uc3tmb250LWZhbWlseTonTWF0ZXJpYWwgSWNvbnMnO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDoxO2xldHRlci1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt3b3JkLXdyYXA6bm9ybWFsO2RpcmVjdGlvbjpsdHI7LW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6J2xpZ2EnOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX1oMSxoMixoMyxoNCxoNSxoNntib3JkZXItYm90dG9tOjB9">
| + | |
| | | |
− | <script>var base64script = atob("IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGEsaT1yWzBdLGM9clsxXSxsPXJbMl0scD0wLGY9W107cDxpLmxlbmd0aDtwKyspb1thPWlbcF1dJiZmLnB1c2gob1thXVswXSksb1thXT0wO2ZvcihuIGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbikmJihlW25dPWNbbl0pO2ZvcihzJiZzKHIpO2YubGVuZ3RoOylmLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsbHx8W10pLHQoKX1mdW5jdGlvbiB0KCl7Zm9yKHZhciBlLHI9MDtyPHUubGVuZ3RoO3IrKyl7Zm9yKHZhciB0PXVbcl0sbj0hMCxpPTE7aTx0Lmxlbmd0aDtpKyspMCE9PW9bdFtpXV0mJihuPSExKTtuJiYodS5zcGxpY2Uoci0tLDEpLGU9YShhLnM9dFswXSkpfXJldHVybiBlfXZhciBuPXt9LG89ezE6MH0sdT1bXTtmdW5jdGlvbiBhKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgdD1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxhKSx0Lmw9ITAsdC5leHBvcnRzfWEuZT1mdW5jdGlvbihlKXt2YXIgcj1bXSx0PW9bZV07aWYoMCE9PXQpaWYodClyLnB1c2godFsyXSk7ZWxzZXt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3Q9b1tlXT1bcixuXX0pO3IucHVzaCh0WzJdPW4pO3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0saT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpLmNoYXJzZXQ9InV0Zi04IixpLnRpbWVvdXQ9MTIwLGEubmMmJmkuc2V0QXR0cmlidXRlKCJub25jZSIsYS5uYyksaS5zcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEucCsiIisoe31bZV18fGUpKyIuIit7MDoiOTkyYTNkYjhhMDA3MWUyOWNjNjkifVtlXSsiLmpzIn0oZSk7dmFyIGM9c2V0VGltZW91dChmdW5jdGlvbigpe2woe3R5cGU6InRpbWVvdXQiLHRhcmdldDppfSl9LDEyZTQpO2Z1bmN0aW9uIGwocil7aS5vbmVycm9yPWkub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KGMpO3ZhciB0PW9bZV07aWYoMCE9PXQpe2lmKHQpe3ZhciBuPXImJigibG9hZCI9PT1yLnR5cGU/Im1pc3NpbmciOnIudHlwZSksdT1yJiZyLnRhcmdldCYmci50YXJnZXQuc3JjLGE9bmV3IEVycm9yKCJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC5cbigiK24rIjogIit1KyIpIik7YS50eXBlPW4sYS5yZXF1ZXN0PXUsdFsxXShhKX1vW2VdPXZvaWQgMH19aS5vbmVycm9yPWkub25sb2FkPWwsdS5hcHBlbmRDaGlsZChpKX1yZXR1cm4gUHJvbWlzZS5hbGwocil9LGEubT1lLGEuYz1uLGEuZD1mdW5jdGlvbihlLHIsdCl7YS5vKGUscil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDp0fSl9LGEucj1mdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGEubj1mdW5jdGlvbihlKXt2YXIgcj1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gYS5kKHIsImEiLHIpLHJ9LGEubz1mdW5jdGlvbihlLHIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKX0sYS5wPSIiLGEub2U9ZnVuY3Rpb24oZSl7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfTt2YXIgaT13aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdLGM9aS5wdXNoLmJpbmQoaSk7aS5wdXNoPXIsaT1pLnNsaWNlKCk7Zm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspcihpW2xdKTt2YXIgcz1jO3QoKX0oW10pOyh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbM10seyIrckx2IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZHlaWCIpLmRvY3VtZW50O2UuZXhwb3J0cz1yJiZyLmRvY3VtZW50RWxlbWVudH0sIjAvUjQiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX19LCIwVFdwIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiOyFmdW5jdGlvbihlKXt2YXIgdD1lLnBlcmZvcm1hbmNlO2Z1bmN0aW9uIG4oZSl7dCYmdC5tYXJrJiZ0Lm1hcmsoZSl9ZnVuY3Rpb24gcihlLG4pe3QmJnQubWVhc3VyZSYmdC5tZWFzdXJlKGUsbil9aWYobigiWm9uZSIpLGUuWm9uZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7dmFyIG8saT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0KXt0aGlzLl9wcm9wZXJ0aWVzPW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fbmFtZT10P3QubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9dCYmdC5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IGModGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLHQpfXJldHVybiB0LmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYoZS5Qcm9taXNlIT09Ty5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4pIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuY3VycmVudDtlLnBhcmVudDspZT1lLnBhcmVudDtyZXR1cm4gZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBELnpvbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5fX2xvYWRfcGF0Y2g9ZnVuY3Rpb24obyxpKXtpZihPLmhhc093blByb3BlcnR5KG8pKXRocm93IEVycm9yKCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogIitvKTtpZighZVsiX19ab25lX2Rpc2FibGVfIitvXSl7dmFyIGE9IlpvbmU6IitvO24oYSksT1tvXT1pKGUsdCxTKSxyKGEsYSl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Wm9uZVdpdGgoZSk7aWYodClyZXR1cm4gdC5fcHJvcGVydGllc1tlXX0sdC5wcm90b3R5cGUuZ2V0Wm9uZVdpdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXM7dDspe2lmKHQuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHQ7dD10Ll9wYXJlbnR9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcyxlKX0sdC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIGZ1bmN0aW9uIGdvdDogIitlKTt2YXIgbj10aGlzLl96b25lRGVsZWdhdGUuaW50ZXJjZXB0KHRoaXMsZSx0KSxyPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucnVuR3VhcmRlZChuLHRoaXMsYXJndW1lbnRzLHQpfX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09ciYmKHI9bnVsbCksRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxlLHQsbixyKX1maW5hbGx5e0Q9RC5wYXJlbnR9fSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PW51bGwpLHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPW51bGwpLEQ9e3BhcmVudDpELHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLGUsdCxuLHIpfWNhdGNoKGUpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGUpKXRocm93IGV9fWZpbmFsbHl7RD1ELnBhcmVudH19LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24oZSx0LG4pe2lmKGUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoZS56b25lfHxnKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihlLnN0YXRlIT09eXx8ZS50eXBlIT09eCl7dmFyIHI9ZS5zdGF0ZSE9aztyJiZlLl90cmFuc2l0aW9uVG8oayxtKSxlLnJ1bkNvdW50Kys7dmFyIG89ajtqPWUsRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7ZS50eXBlPT1FJiZlLmRhdGEmJiFlLmRhdGEuaXNQZXJpb2RpYyYmKGUuY2FuY2VsRm49bnVsbCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLGUsdCxuKX1jYXRjaChlKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSl0aHJvdyBlfX1maW5hbGx5e2Uuc3RhdGUhPT15JiZlLnN0YXRlIT09VCYmKGUudHlwZT09eHx8ZS5kYXRhJiZlLmRhdGEuaXNQZXJpb2RpYz9yJiZlLl90cmFuc2l0aW9uVG8obSxrKTooZS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChlLC0xKSxyJiZlLl90cmFuc2l0aW9uVG8oeSxrLHkpKSksRD1ELnBhcmVudCxqPW99fX0sdC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKGUpe2lmKGUuem9uZSYmZS56b25lIT09dGhpcylmb3IodmFyIHQ9dGhpczt0Oyl7aWYodD09PWUuem9uZSl0aHJvdyBFcnJvcigiY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gIit0aGlzLm5hbWUrIiB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAiK2Uuem9uZS5uYW1lKTt0PXQucGFyZW50fWUuX3RyYW5zaXRpb25UbyhfLHkpO3ZhciBuPVtdO2UuX3pvbmVEZWxlZ2F0ZXM9bixlLl96b25lPXRoaXM7dHJ5e2U9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLGUpfWNhdGNoKHQpe3Rocm93IGUuX3RyYW5zaXRpb25UbyhULF8seSksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdCksdH1yZXR1cm4gZS5fem9uZURlbGVnYXRlcz09PW4mJnRoaXMuX3VwZGF0ZVRhc2tDb3VudChlLDEpLGUuc3RhdGU9PV8mJmUuX3RyYW5zaXRpb25UbyhtLF8pLGV9LHQucHJvdG90eXBlLnNjaGVkdWxlTWljcm9UYXNrPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgdSh3LGUsdCxuLHIsbnVsbCkpfSx0LnByb3RvdHlwZS5zY2hlZHVsZU1hY3JvVGFzaz1mdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgdShFLGUsdCxuLHIsbykpfSx0LnByb3RvdHlwZS5zY2hlZHVsZUV2ZW50VGFzaz1mdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgdSh4LGUsdCxuLHIsbykpfSx0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKGUpe2lmKGUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBjYW5jZWxsZWQgaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoZS56b25lfHxnKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtlLl90cmFuc2l0aW9uVG8oYixtLGspO3RyeXt0aGlzLl96b25lRGVsZWdhdGUuY2FuY2VsVGFzayh0aGlzLGUpfWNhdGNoKHQpe3Rocm93IGUuX3RyYW5zaXRpb25UbyhULGIpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpLHR9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChlLC0xKSxlLl90cmFuc2l0aW9uVG8oeSxiKSxlLnJ1bkNvdW50PTAsZX0sdC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX3pvbmVEZWxlZ2F0ZXM7LTE9PXQmJihlLl96b25lRGVsZWdhdGVzPW51bGwpO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uX3VwZGF0ZVRhc2tDb3VudChlLnR5cGUsdCl9LHQuX19zeW1ib2xfXz16LHR9KCksYT17bmFtZToiIixvbkhhc1Rhc2s6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUuaGFzVGFzayhuLHIpfSxvblNjaGVkdWxlVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5zY2hlZHVsZVRhc2sobixyKX0sb25JbnZva2VUYXNrOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXtyZXR1cm4gZS5pbnZva2VUYXNrKG4scixvLGkpfSxvbkNhbmNlbFRhc2s6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUuY2FuY2VsVGFzayhuLHIpfX0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9ZSx0aGlzLl9wYXJlbnREZWxlZ2F0ZT10LHRoaXMuX2ZvcmtaUz1uJiYobiYmbi5vbkZvcms/bjp0Ll9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PW4mJihuLm9uRm9yaz90OnQuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9biYmKG4ub25Gb3JrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPW4mJihuLm9uSW50ZXJjZXB0P246dC5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9biYmKG4ub25JbnRlcmNlcHQ/dDp0Ll9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1uJiYobi5vbkludGVyY2VwdD90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VaUz1uJiYobi5vbkludm9rZT9uOnQuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PW4mJihuLm9uSW52b2tlP3Q6dC5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9biYmKG4ub25JbnZva2U/dGhpcy56b25lOnQuem9uZSksdGhpcy5faGFuZGxlRXJyb3JaUz1uJiYobi5vbkhhbmRsZUVycm9yP246dC5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PW4mJihuLm9uSGFuZGxlRXJyb3I/dDp0Ll9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9biYmKG4ub25IYW5kbGVFcnJvcj90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9zY2hlZHVsZVRhc2taUz1uJiYobi5vblNjaGVkdWxlVGFzaz9uOnQuX3NjaGVkdWxlVGFza1pTKSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PW4mJihuLm9uU2NoZWR1bGVUYXNrP3Q6dC5fc2NoZWR1bGVUYXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9biYmKG4ub25TY2hlZHVsZVRhc2s/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW52b2tlVGFza1pTPW4mJihuLm9uSW52b2tlVGFzaz9uOnQuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFza0RsZ3Q9biYmKG4ub25JbnZva2VUYXNrP3Q6dC5faW52b2tlVGFza0RsZ3QpLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT1uJiYobi5vbkludm9rZVRhc2s/dGhpcy56b25lOnQuem9uZSksdGhpcy5fY2FuY2VsVGFza1pTPW4mJihuLm9uQ2FuY2VsVGFzaz9uOnQuX2NhbmNlbFRhc2taUyksdGhpcy5fY2FuY2VsVGFza0RsZ3Q9biYmKG4ub25DYW5jZWxUYXNrP3Q6dC5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1uJiYobi5vbkNhbmNlbFRhc2s/dGhpcy56b25lOnQuem9uZSksdGhpcy5faGFzVGFza1pTPW51bGwsdGhpcy5faGFzVGFza0RsZ3Q9bnVsbCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPW51bGwsdGhpcy5faGFzVGFza0N1cnJab25lPW51bGw7dmFyIHI9biYmbi5vbkhhc1Rhc2s7KHJ8fHQmJnQuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9cj9uOmEsdGhpcy5faGFzVGFza0RsZ3Q9dCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPWUsbi5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPWEsdGhpcy5fc2NoZWR1bGVUYXNrRGxndD10LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9uZSksbi5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9YSx0aGlzLl9pbnZva2VUYXNrRGxndD10LHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPWEsdGhpcy5fY2FuY2VsVGFza0RsZ3Q9dCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9dGhpcy56b25lKSl9cmV0dXJuIGUucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLGUsdCk6bmV3IGkoZSx0KX0sZS5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxlLHQsbik6dH0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsZSx0LG4scixvKTp0LmFwcGx5KG4scil9LGUucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZSxlLHQpfSxlLnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oZSx0KXt2YXIgbj10O2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmbi5fem9uZURlbGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpLChuPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsZSx0KSl8fChuPXQpO2Vsc2UgaWYodC5zY2hlZHVsZUZuKXQuc2NoZWR1bGVGbih0KTtlbHNle2lmKHQudHlwZSE9dyl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBzY2hlZHVsZUZuLiIpO3YodCl9cmV0dXJuIG59LGUucHJvdG90eXBlLmludm9rZVRhc2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUz90aGlzLl9pbnZva2VUYXNrWlMub25JbnZva2VUYXNrKHRoaXMuX2ludm9rZVRhc2tEbGd0LHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSxlLHQsbixyKTp0LmNhbGxiYWNrLmFwcGx5KG4scil9LGUucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0aGlzLl9jYW5jZWxUYXNrWlMpbj10aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSxlLHQpO2Vsc2V7aWYoIXQuY2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtuPXQuY2FuY2VsRm4odCl9cmV0dXJuIG59LGUucHJvdG90eXBlLmhhc1Rhc2s9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIHRoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsZSx0KX1jYXRjaCh0KXt0aGlzLmhhbmRsZUVycm9yKGUsdCl9fSxlLnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdGFza0NvdW50cyxyPW5bZV0sbz1uW2VdPXIrdDtpZihvPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9ciYmMCE9b3x8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOm4ubWljcm9UYXNrPjAsbWFjcm9UYXNrOm4ubWFjcm9UYXNrPjAsZXZlbnRUYXNrOm4uZXZlbnRUYXNrPjAsY2hhbmdlOmV9KX0sZX0oKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuLHIsbyxpLGEsYyl7dGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhpcy50eXBlPW4sdGhpcy5zb3VyY2U9cix0aGlzLmRhdGE9aSx0aGlzLnNjaGVkdWxlRm49YSx0aGlzLmNhbmNlbEZuPWMsdGhpcy5jYWxsYmFjaz1vO3ZhciB1PXRoaXM7dGhpcy5pbnZva2U9bj09PXgmJmkmJmkudXNlRz90Lmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pbnZva2VUYXNrLmNhbGwoZSx1LHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIHQuaW52b2tlVGFzaz1mdW5jdGlvbihlLHQsbil7ZXx8KGU9dGhpcyksUCsrO3RyeXtyZXR1cm4gZS5ydW5Db3VudCsrLGUuem9uZS5ydW5UYXNrKGUsdCxuKX1maW5hbGx5ezE9PVAmJmQoKSxQLS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN0YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25Ubyh5LF8pfSx0LnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLl9zdGF0ZSE9PXQmJnRoaXMuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlKyIgJyIrdGhpcy5zb3VyY2UrIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnIitlKyInLCBleHBlY3Rpbmcgc3RhdGUgJyIrdCsiJyIrKG4/IiBvciAnIituKyInIjoiIikrIiwgd2FzICciK3RoaXMuX3N0YXRlKyInLiIpO3RoaXMuX3N0YXRlPWUsZT09eSYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YSYmdm9pZCAwIT09dGhpcy5kYXRhLmhhbmRsZUlkP3RoaXMuZGF0YS5oYW5kbGVJZDpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fSx0fSgpLHM9eigic2V0VGltZW91dCIpLGw9eigiUHJvbWlzZSIpLGY9eigidGhlbiIpLHA9W10saD0hMTtmdW5jdGlvbiB2KHQpezA9PT1QJiYwPT09cC5sZW5ndGgmJihvfHxlW2xdJiYobz1lW2xdLnJlc29sdmUoMCkpLG8/b1tmXShkKTplW3NdKGQsMCkpLHQmJnAucHVzaCh0KX1mdW5jdGlvbiBkKCl7aWYoIWgpe2ZvcihoPSEwO3AubGVuZ3RoOyl7dmFyIGU9cDtwPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO3RyeXtuLnpvbmUucnVuVGFzayhuLG51bGwsbnVsbCl9Y2F0Y2goZSl7Uy5vblVuaGFuZGxlZEVycm9yKGUpfX19Uy5taWNyb3Rhc2tEcmFpbkRvbmUoKSxoPSExfX12YXIgZz17bmFtZToiTk8gWk9ORSJ9LHk9Im5vdFNjaGVkdWxlZCIsXz0ic2NoZWR1bGluZyIsbT0ic2NoZWR1bGVkIixrPSJydW5uaW5nIixiPSJjYW5jZWxpbmciLFQ9InVua25vd24iLHc9Im1pY3JvVGFzayIsRT0ibWFjcm9UYXNrIix4PSJldmVudFRhc2siLE89e30sUz17c3ltYm9sOnosY3VycmVudFpvbmVGcmFtZTpmdW5jdGlvbigpe3JldHVybiBEfSxvblVuaGFuZGxlZEVycm9yOlosbWljcm90YXNrRHJhaW5Eb25lOlosc2NoZWR1bGVNaWNyb1Rhc2s6dixzaG93VW5jYXVnaHRFcnJvcjpmdW5jdGlvbigpe3JldHVybiFpW3ooImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hPblByb3BlcnRpZXM6WixwYXRjaE1ldGhvZDpmdW5jdGlvbigpe3JldHVybiBafSxiaW5kQXJndW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHNldE5hdGl2ZVByb21pc2U6ZnVuY3Rpb24oZSl7ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUucmVzb2x2ZSYmKG89ZS5yZXNvbHZlKDApKX19LEQ9e3BhcmVudDpudWxsLHpvbmU6bmV3IGkobnVsbCxudWxsKX0saj1udWxsLFA9MDtmdW5jdGlvbiBaKCl7fWZ1bmN0aW9uIHooZSl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrZX1yKCJab25lIiwiWm9uZSIpLGUuWm9uZT1pfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fHwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCksWm9uZS5fX2xvYWRfcGF0Y2goIlpvbmVBd2FyZVByb21pc2UiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLG89T2JqZWN0LmRlZmluZVByb3BlcnR5LGk9bi5zeW1ib2wsYT1bXSxjPWkoIlByb21pc2UiKSx1PWkoInRoZW4iKSxzPSJfX2NyZWF0aW9uVHJhY2VfXyI7bi5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKGUpe2lmKG4uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIHQ9ZSYmZS5yZWplY3Rpb247dD9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246Iix0IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOnQsIjsgWm9uZToiLGUuem9uZS5uYW1lLCI7IFRhc2s6IixlLnRhc2smJmUudGFzay5zb3VyY2UsIjsgVmFsdWU6Iix0LHQgaW5zdGFuY2VvZiBFcnJvcj90LnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcihlKX19LG4ubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKDthLmxlbmd0aDspZm9yKHZhciBlPWZ1bmN0aW9uKCl7dmFyIGU9YS5zaGlmdCgpO3RyeXtlLnpvbmUucnVuR3VhcmRlZChmdW5jdGlvbigpe3Rocm93IGV9KX1jYXRjaChlKXtmKGUpfX07YS5sZW5ndGg7KWUoKX07dmFyIGw9aSgidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBmKGUpe24ub25VbmhhbmRsZWRFcnJvcihlKTt0cnl7dmFyIHI9dFtsXTtyJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmci5jYWxsKHRoaXMsZSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBwKGUpe3JldHVybiBlJiZlLnRoZW59ZnVuY3Rpb24gaChlKXtyZXR1cm4gZX1mdW5jdGlvbiB2KGUpe3JldHVybiBNLnJlamVjdChlKX12YXIgZD1pKCJzdGF0ZSIpLGc9aSgidmFsdWUiKSx5PWkoImZpbmFsbHkiKSxfPWkoInBhcmVudFByb21pc2VWYWx1ZSIpLG09aSgicGFyZW50UHJvbWlzZVN0YXRlIiksaz0iUHJvbWlzZS50aGVuIixiPW51bGwsVD0hMCx3PSExLEU9MDtmdW5jdGlvbiB4KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RyeXtqKGUsdCxuKX1jYXRjaCh0KXtqKGUsITEsdCl9fX12YXIgTz1mdW5jdGlvbigpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtlfHwoZT0hMCx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sUz0iUHJvbWlzZSByZXNvbHZlZCB3aXRoIGl0c2VsZiIsRD1pKCJjdXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gaihlLHIsaSl7dmFyIGMsdT1PKCk7aWYoZT09PWkpdGhyb3cgbmV3IFR5cGVFcnJvcihTKTtpZihlW2RdPT09Yil7dmFyIGw9bnVsbDt0cnl7Im9iamVjdCIhPXR5cGVvZiBpJiYiZnVuY3Rpb24iIT10eXBlb2YgaXx8KGw9aSYmaS50aGVuKX1jYXRjaCh0KXtyZXR1cm4gdShmdW5jdGlvbigpe2ooZSwhMSx0KX0pKCksZX1pZihyIT09dyYmaSBpbnN0YW5jZW9mIE0mJmkuaGFzT3duUHJvcGVydHkoZCkmJmkuaGFzT3duUHJvcGVydHkoZykmJmlbZF0hPT1iKVooaSksaihlLGlbZF0saVtnXSk7ZWxzZSBpZihyIT09dyYmImZ1bmN0aW9uIj09dHlwZW9mIGwpdHJ5e2wuY2FsbChpLHUoeChlLHIpKSx1KHgoZSwhMSkpKX1jYXRjaCh0KXt1KGZ1bmN0aW9uKCl7aihlLCExLHQpfSkoKX1lbHNle2VbZF09cjt2YXIgZj1lW2ddO2lmKGVbZ109aSxlW3ldPT09eSYmcj09PVQmJihlW2RdPWVbbV0sZVtnXT1lW19dKSxyPT09dyYmaSBpbnN0YW5jZW9mIEVycm9yKXt2YXIgcD10LmN1cnJlbnRUYXNrJiZ0LmN1cnJlbnRUYXNrLmRhdGEmJnQuY3VycmVudFRhc2suZGF0YVtzXTtwJiZvKGksRCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6cH0pfWZvcih2YXIgaD0wO2g8Zi5sZW5ndGg7KXooZSxmW2grK10sZltoKytdLGZbaCsrXSxmW2grK10pO2lmKDA9PWYubGVuZ3RoJiZyPT13KXtlW2RdPUU7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiKygoYz1pKSYmYy50b1N0cmluZz09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc/KGMuY29uc3RydWN0b3ImJmMuY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkoYyk6Yz9jLnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKSsoaSYmaS5zdGFjaz8iXG4iK2kuc3RhY2s6IiIpKX1jYXRjaChyKXt2YXIgdj1yO3YucmVqZWN0aW9uPWksdi5wcm9taXNlPWUsdi56b25lPXQuY3VycmVudCx2LnRhc2s9dC5jdXJyZW50VGFzayxhLnB1c2godiksbi5zY2hlZHVsZU1pY3JvVGFzaygpfX19fXJldHVybiBlfXZhciBQPWkoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gWihlKXtpZihlW2RdPT09RSl7dHJ5e3ZhciBuPXRbUF07biYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uY2FsbCh0aGlzLHtyZWplY3Rpb246ZVtnXSxwcm9taXNlOmV9KX1jYXRjaChlKXt9ZVtkXT13O2Zvcih2YXIgcj0wO3I8YS5sZW5ndGg7cisrKWU9PT1hW3JdLnByb21pc2UmJmEuc3BsaWNlKHIsMSl9fWZ1bmN0aW9uIHooZSx0LG4scixvKXtaKGUpO3ZhciBpPWVbZF0sYT1pPyJmdW5jdGlvbiI9PXR5cGVvZiByP3I6aDoiZnVuY3Rpb24iPT10eXBlb2Ygbz9vOnY7dC5zY2hlZHVsZU1pY3JvVGFzayhrLGZ1bmN0aW9uKCl7dHJ5e3ZhciByPWVbZ10sbz1uJiZ5PT09blt5XTtvJiYobltfXT1yLG5bbV09aSk7dmFyIGM9dC5ydW4oYSx2b2lkIDAsbyYmYSE9PXYmJmEhPT1oP1tdOltyXSk7aihuLCEwLGMpfWNhdGNoKGUpe2oobiwhMSxlKX19LG4pfXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLiIpO3RoaXNbZF09Yix0aGlzW2ddPVtdO3RyeXt0JiZ0KHgodGhpcyxUKSx4KHRoaXMsdykpfWNhdGNoKGUpe2oodGhpcywhMSxlKX19cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24gWm9uZUF3YXJlUHJvbWlzZSgpIHsgW25hdGl2ZSBjb2RlXSB9In0sZS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3JldHVybiBqKG5ldyB0aGlzKG51bGwpLFQsZSl9LGUucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBqKG5ldyB0aGlzKG51bGwpLHcsZSl9LGUucmFjZT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9bmV3IHRoaXMoZnVuY3Rpb24oZSxyKXt0PWUsbj1yfSk7ZnVuY3Rpb24gbyhlKXtyJiYocj10KGUpKX1mdW5jdGlvbiBpKGUpe3ImJihyPW4oZSkpfWZvcih2YXIgYT0wLGM9ZTthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtwKHUpfHwodT10aGlzLnJlc29sdmUodSkpLHUudGhlbihvLGkpfXJldHVybiByfSxlLmFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyPW5ldyB0aGlzKGZ1bmN0aW9uKGUscil7dD1lLG49cn0pLG89MCxpPVtdLGE9MCxjPWU7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07cCh1KXx8KHU9dGhpcy5yZXNvbHZlKHUpKSx1LnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lbZV09biwtLW98fHQoaSl9fShvKSxuKSxvKyt9cmV0dXJuIG98fHQoaSkscn0sZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLG4pe3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKG51bGwpLG89dC5jdXJyZW50O3JldHVybiB0aGlzW2RdPT1iP3RoaXNbZ10ucHVzaChvLHIsZSxuKTp6KHRoaXMsbyxyLGUsbikscn0sZS5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGUpfSxlLnByb3RvdHlwZS5maW5hbGx5PWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKG51bGwpO25beV09eTt2YXIgcj10LmN1cnJlbnQ7cmV0dXJuIHRoaXNbZF09PWI/dGhpc1tnXS5wdXNoKHIsbixlLGUpOnoodGhpcyxyLG4sZSxlKSxufSxlfSgpO00ucmVzb2x2ZT1NLnJlc29sdmUsTS5yZWplY3Q9TS5yZWplY3QsTS5yYWNlPU0ucmFjZSxNLmFsbD1NLmFsbDt2YXIgQz1lW2NdPWUuUHJvbWlzZSxSPXQuX19zeW1ib2xfXygiWm9uZUF3YXJlUHJvbWlzZSIpLEk9cihlLCJQcm9taXNlIik7SSYmIUkuY29uZmlndXJhYmxlfHwoSSYmZGVsZXRlIEkud3JpdGFibGUsSSYmZGVsZXRlIEkudmFsdWUsSXx8KEk9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSksSS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZVtSXT9lW1JdOmVbY119LEkuc2V0PWZ1bmN0aW9uKHQpe3Q9PT1NP2VbUl09dDooZVtjXT10LHQucHJvdG90eXBlW3VdfHxxKHQpLG4uc2V0TmF0aXZlUHJvbWlzZSh0KSl9LG8oZSwiUHJvbWlzZSIsSSkpLGUuUHJvbWlzZT1NO3ZhciBGLEw9aSgidGhlblBhdGNoZWQiKTtmdW5jdGlvbiBxKGUpe3ZhciB0PWUucHJvdG90eXBlLG49cih0LCJ0aGVuIik7aWYoIW58fCExIT09bi53cml0YWJsZSYmbi5jb25maWd1cmFibGUpe3ZhciBvPXQudGhlbjt0W3VdPW8sZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBNKGZ1bmN0aW9uKGUsdCl7by5jYWxsKG4sZSx0KX0pLnRoZW4oZSx0KX0sZVtMXT0hMH19aWYoQyl7cShDKTt2YXIgQT1lLmZldGNoOyJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoZS5mZXRjaD0oRj1BLGZ1bmN0aW9uKCl7dmFyIGU9Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoZSBpbnN0YW5jZW9mIE0pcmV0dXJuIGU7dmFyIHQ9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdFtMXXx8cSh0KSxlfSkpfXJldHVybiBQcm9taXNlW3QuX19zeW1ib2xfXygidW5jYXVnaHRQcm9taXNlRXJyb3JzIildPWEsTX0pO3ZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdD1PYmplY3QuZGVmaW5lUHJvcGVydHksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yscj1PYmplY3QuY3JlYXRlLG89QXJyYXkucHJvdG90eXBlLnNsaWNlLGk9ImFkZEV2ZW50TGlzdGVuZXIiLGE9InJlbW92ZUV2ZW50TGlzdGVuZXIiLGM9Wm9uZS5fX3N5bWJvbF9fKGkpLHU9Wm9uZS5fX3N5bWJvbF9fKGEpLHM9InRydWUiLGw9ImZhbHNlIixmPSJfX3pvbmVfc3ltYm9sX18iO2Z1bmN0aW9uIHAoZSx0KXtyZXR1cm4gWm9uZS5jdXJyZW50LndyYXAoZSx0KX1mdW5jdGlvbiBoKGUsdCxuLHIsbyl7cmV0dXJuIFpvbmUuY3VycmVudC5zY2hlZHVsZU1hY3JvVGFzayhlLHQsbixyLG8pfXZhciB2PVpvbmUuX19zeW1ib2xfXyxkPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LGc9ZD93aW5kb3c6dm9pZCAwLHk9ZCYmZ3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWwsXz0icmVtb3ZlQXR0cmlidXRlIixtPVtudWxsXTtmdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLTE7bj49MDtuLS0pImZ1bmN0aW9uIj09dHlwZW9mIGVbbl0mJihlW25dPXAoZVtuXSx0KyJfIituKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtyZXR1cm4hZXx8ITEhPT1lLndyaXRhYmxlJiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldCYmdm9pZCAwPT09ZS5zZXQpfXZhciBUPSJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSx3PSEoIm53ImluIHkpJiZ2b2lkIDAhPT15LnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSxFPSF3JiYhVCYmISghZHx8IWcuSFRNTEVsZW1lbnQpLHg9dm9pZCAwIT09eS5wcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHkucHJvY2VzcykmJiFUJiYhKCFkfHwhZy5IVE1MRWxlbWVudCksTz17fSxTPWZ1bmN0aW9uKGUpe2lmKGU9ZXx8eS5ldmVudCl7dmFyIHQ9T1tlLnR5cGVdO3R8fCh0PU9bZS50eXBlXT12KCJPTl9QUk9QRVJUWSIrZS50eXBlKSk7dmFyIG49KHRoaXN8fGUudGFyZ2V0fHx5KVt0XSxyPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2b2lkIDA9PXJ8fHJ8fGUucHJldmVudERlZmF1bHQoKSxyfX07ZnVuY3Rpb24gRChuLHIsbyl7dmFyIGk9ZShuLHIpO2lmKCFpJiZvJiZlKG8scikmJihpPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGkmJmkuY29uZmlndXJhYmxlKXtkZWxldGUgaS53cml0YWJsZSxkZWxldGUgaS52YWx1ZTt2YXIgYT1pLmdldCxjPWkuc2V0LHU9ci5zdWJzdHIoMikscz1PW3VdO3N8fChzPU9bdV09digiT05fUFJPUEVSVFkiK3UpKSxpLnNldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3R8fG4hPT15fHwodD15KSx0JiYodFtzXSYmdC5yZW1vdmVFdmVudExpc3RlbmVyKHUsUyksYyYmYy5hcHBseSh0LG0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlPyh0W3NdPWUsdC5hZGRFdmVudExpc3RlbmVyKHUsUywhMSkpOnRbc109bnVsbCl9LGkuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZihlfHxuIT09eXx8KGU9eSksIWUpcmV0dXJuIG51bGw7dmFyIHQ9ZVtzXTtpZih0KXJldHVybiB0O2lmKGEpe3ZhciBvPWEmJmEuY2FsbCh0aGlzKTtpZihvKXJldHVybiBpLnNldC5jYWxsKHRoaXMsbyksImZ1bmN0aW9uIj09dHlwZW9mIGVbX10mJmUucmVtb3ZlQXR0cmlidXRlKHIpLG99cmV0dXJuIG51bGx9LHQobixyLGkpfX1mdW5jdGlvbiBqKGUsdCxuKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKUQoZSwib24iK3Rbcl0sbik7ZWxzZXt2YXIgbz1bXTtmb3IodmFyIGkgaW4gZSkib24iPT1pLnN1YnN0cigwLDIpJiZvLnB1c2goaSk7Zm9yKHZhciBhPTA7YTxvLmxlbmd0aDthKyspRChlLG9bYV0sbil9fXZhciBQPXYoIm9yaWdpbmFsSW5zdGFuY2UiKTtmdW5jdGlvbiBaKGUpe3ZhciBuPXlbZV07aWYobil7eVt2KGUpXT1uLHlbZV09ZnVuY3Rpb24oKXt2YXIgdD1rKGFyZ3VtZW50cyxlKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDp0aGlzW1BdPW5ldyBuO2JyZWFrO2Nhc2UgMTp0aGlzW1BdPW5ldyBuKHRbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW1BdPW5ldyBuKHRbMF0sdFsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbUF09bmV3IG4odFswXSx0WzFdLHRbMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW1BdPW5ldyBuKHRbMF0sdFsxXSx0WzJdLHRbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LE0oeVtlXSxuKTt2YXIgcixvPW5ldyBuKGZ1bmN0aW9uKCl7fSk7Zm9yKHIgaW4gbykiWE1MSHR0cFJlcXVlc3QiPT09ZSYmInJlc3BvbnNlQmxvYiI9PT1yfHxmdW5jdGlvbihuKXsiZnVuY3Rpb24iPT10eXBlb2Ygb1tuXT95W2VdLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW1BdW25dLmFwcGx5KHRoaXNbUF0sYXJndW1lbnRzKX06dCh5W2VdLnByb3RvdHlwZSxuLHtzZXQ6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIj09dHlwZW9mIHQ/KHRoaXNbUF1bbl09cCh0LGUrIi4iK24pLE0odGhpc1tQXVtuXSx0KSk6dGhpc1tQXVtuXT10fSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tQXVtuXX19KX0ocik7Zm9yKHIgaW4gbikicHJvdG90eXBlIiE9PXImJm4uaGFzT3duUHJvcGVydHkocikmJih5W2VdW3JdPW5bcl0pfX1mdW5jdGlvbiB6KHQscixvKXtmb3IodmFyIGk9dDtpJiYhaS5oYXNPd25Qcm9wZXJ0eShyKTspaT1uKGkpOyFpJiZ0W3JdJiYoaT10KTt2YXIgYSxjPXYocik7aWYoaSYmIShhPWlbY10pJiYoYT1pW2NdPWlbcl0sYihpJiZlKGkscikpKSl7dmFyIHU9byhhLGMscik7aVtyXT1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMsYXJndW1lbnRzKX0sTShpW3JdLGEpfXJldHVybiBhfWZ1bmN0aW9uIE0oZSx0KXtlW3YoIk9yaWdpbmFsRGVsZWdhdGUiKV09dH12YXIgQz0hMSxSPSExO2Z1bmN0aW9uIEkoKXtpZihDKXJldHVybiBSO0M9ITA7dHJ5e3ZhciBlPWcubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4tMT09PWUuaW5kZXhPZigiTVNJRSAiKSYmLTE9PT1lLmluZGV4T2YoIlRyaWRlbnQvIikmJi0xPT09ZS5pbmRleE9mKCJFZGdlLyIpfHwoUj0hMCksUn1jYXRjaChlKXt9fVpvbmUuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsZnVuY3Rpb24oZSl7dmFyIHQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLG49digiT3JpZ2luYWxEZWxlZ2F0ZSIpLHI9digiUHJvbWlzZSIpLG89digiRXJyb3IiKSxpPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMpe3ZhciBpPXRoaXNbbl07aWYoaSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT90LmFwcGx5KHRoaXNbbl0sYXJndW1lbnRzKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk7aWYodGhpcz09PVByb21pc2Upe3ZhciBhPWVbcl07aWYoYSlyZXR1cm4gdC5hcHBseShhLGFyZ3VtZW50cyl9aWYodGhpcz09PUVycm9yKXt2YXIgYz1lW29dO2lmKGMpcmV0dXJuIHQuYXBwbHkoYyxhcmd1bWVudHMpfX1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lbbl09dCxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9aTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOmEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pO3ZhciBGPXt1c2VHOiEwfSxMPXt9LHE9e30sQT0vXl9fem9uZV9zeW1ib2xfXyhcdyspKHRydWV8ZmFsc2UpJC8sSD0iX196b25lX3N5bWJvbF9fcHJvcGFnYXRpb25TdG9wcGVkIjtmdW5jdGlvbiBOKGUsdCxyKXt2YXIgbz1yJiZyLmFkZHx8aSxjPXImJnIucm18fGEsdT1yJiZyLmxpc3RlbmVyc3x8ImV2ZW50TGlzdGVuZXJzIixwPXImJnIucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLGg9dihvKSxkPSIuIitvKyI6IixnPSJwcmVwZW5kTGlzdGVuZXIiLHk9Ii4iK2crIjoiLF89ZnVuY3Rpb24oZSx0LG4pe2lmKCFlLmlzUmVtb3ZlZCl7dmFyIHI9ZS5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIHImJnIuaGFuZGxlRXZlbnQmJihlLmNhbGxiYWNrPWZ1bmN0aW9uKGUpe3JldHVybiByLmhhbmRsZUV2ZW50KGUpfSxlLm9yaWdpbmFsRGVsZWdhdGU9ciksZS5pbnZva2UoZSx0LFtuXSk7dmFyIG89ZS5vcHRpb25zO28mJiJvYmplY3QiPT10eXBlb2YgbyYmby5vbmNlJiZ0W2NdLmNhbGwodCxuLnR5cGUsZS5vcmlnaW5hbERlbGVnYXRlP2Uub3JpZ2luYWxEZWxlZ2F0ZTplLmNhbGxiYWNrLG8pfX0sbT1mdW5jdGlvbih0KXtpZih0PXR8fGUuZXZlbnQpe3ZhciBuPXRoaXN8fHQudGFyZ2V0fHxlLHI9bltMW3QudHlwZV1bbF1dO2lmKHIpaWYoMT09PXIubGVuZ3RoKV8oclswXSxuLHQpO2Vsc2UgZm9yKHZhciBvPXIuc2xpY2UoKSxpPTA7aTxvLmxlbmd0aCYmKCF0fHwhMCE9PXRbSF0pO2krKylfKG9baV0sbix0KX19LGs9ZnVuY3Rpb24odCl7aWYodD10fHxlLmV2ZW50KXt2YXIgbj10aGlzfHx0LnRhcmdldHx8ZSxyPW5bTFt0LnR5cGVdW3NdXTtpZihyKWlmKDE9PT1yLmxlbmd0aClfKHJbMF0sbix0KTtlbHNlIGZvcih2YXIgbz1yLnNsaWNlKCksaT0wO2k8by5sZW5ndGgmJighdHx8ITAhPT10W0hdKTtpKyspXyhvW2ldLG4sdCl9fTtmdW5jdGlvbiBiKHQscil7aWYoIXQpcmV0dXJuITE7dmFyIGk9ITA7ciYmdm9pZCAwIT09ci51c2VHJiYoaT1yLnVzZUcpO3ZhciBhPXImJnIudmgsXz0hMDtyJiZ2b2lkIDAhPT1yLmNoa0R1cCYmKF89ci5jaGtEdXApO3ZhciBiPSExO3ImJnZvaWQgMCE9PXIucnQmJihiPXIucnQpO2Zvcih2YXIgVD10O1QmJiFULmhhc093blByb3BlcnR5KG8pOylUPW4oVCk7aWYoIVQmJnRbb10mJihUPXQpLCFUKXJldHVybiExO2lmKFRbaF0pcmV0dXJuITE7dmFyIHcsRT17fSx4PVRbaF09VFtvXSxPPVRbdihjKV09VFtjXSxTPVRbdih1KV09VFt1XSxEPVRbdihwKV09VFtwXTtyJiZyLnByZXBlbmQmJih3PVRbdihyLnByZXBlbmQpXT1UW3IucHJlcGVuZF0pO3ZhciBqPWk/ZnVuY3Rpb24oKXtpZighRS5pc0V4aXN0aW5nKXJldHVybiB4LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsRS5jYXB0dXJlP2s6bSxFLm9wdGlvbnMpfTpmdW5jdGlvbihlKXtyZXR1cm4geC5jYWxsKEUudGFyZ2V0LEUuZXZlbnROYW1lLGUuaW52b2tlLEUub3B0aW9ucyl9LFA9aT9mdW5jdGlvbihlKXtpZighZS5pc1JlbW92ZWQpe3ZhciB0PUxbZS5ldmVudE5hbWVdLG49dm9pZCAwO3QmJihuPXRbZS5jYXB0dXJlP3M6bF0pO3ZhciByPW4mJmUudGFyZ2V0W25dO2lmKHIpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaWYocltvXT09PWUpe3Iuc3BsaWNlKG8sMSksZS5pc1JlbW92ZWQ9ITAsMD09PXIubGVuZ3RoJiYoZS5hbGxSZW1vdmVkPSEwLGUudGFyZ2V0W25dPW51bGwpO2JyZWFrfX1pZihlLmFsbFJlbW92ZWQpcmV0dXJuIE8uY2FsbChlLnRhcmdldCxlLmV2ZW50TmFtZSxlLmNhcHR1cmU/azptLGUub3B0aW9ucyl9OmZ1bmN0aW9uKGUpe3JldHVybiBPLmNhbGwoZS50YXJnZXQsZS5ldmVudE5hbWUsZS5pbnZva2UsZS5vcHRpb25zKX0sWj1yJiZyLmRpZmY/ci5kaWZmOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIHQ7cmV0dXJuImZ1bmN0aW9uIj09PW4mJmUuY2FsbGJhY2s9PT10fHwib2JqZWN0Ij09PW4mJmUub3JpZ2luYWxEZWxlZ2F0ZT09PXR9LHo9Wm9uZVtab25lLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKV0sQz1mdW5jdGlvbih0LG4scixvLGMsdSl7cmV0dXJuIHZvaWQgMD09PWMmJihjPSExKSx2b2lkIDA9PT11JiYodT0hMSksZnVuY3Rpb24oKXt2YXIgcD10aGlzfHxlLGg9YXJndW1lbnRzWzFdO2lmKCFoKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgdj0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgaCl7aWYoIWguaGFuZGxlRXZlbnQpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Y9ITB9aWYoIWF8fGEodCxoLHAsYXJndW1lbnRzKSl7dmFyIGQsZz1hcmd1bWVudHNbMF0seT1hcmd1bWVudHNbMl07aWYoeilmb3IodmFyIG09MDttPHoubGVuZ3RoO20rKylpZihnPT09elttXSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGs9ITE7dm9pZCAwPT09eT9kPSExOiEwPT09eT9kPSEwOiExPT09eT9kPSExOihkPSEheSYmISF5LmNhcHR1cmUsaz0hIXkmJiEheS5vbmNlKTt2YXIgYixUPVpvbmUuY3VycmVudCx3PUxbZ107aWYodyliPXdbZD9zOmxdO2Vsc2V7dmFyIHg9ZisoZytsKSxPPWYrKGcrcyk7TFtnXT17fSxMW2ddW2xdPXgsTFtnXVtzXT1PLGI9ZD9POnh9dmFyIFMsRD1wW2JdLGo9ITE7aWYoRCl7aWYoaj0hMCxfKWZvcihtPTA7bTxELmxlbmd0aDttKyspaWYoWihEW21dLGgpKXJldHVybn1lbHNlIEQ9cFtiXT1bXTt2YXIgUD1wLmNvbnN0cnVjdG9yLm5hbWUsTT1xW1BdO00mJihTPU1bZ10pLFN8fChTPVArbitnKSxFLm9wdGlvbnM9eSxrJiYoRS5vcHRpb25zLm9uY2U9ITEpLEUudGFyZ2V0PXAsRS5jYXB0dXJlPWQsRS5ldmVudE5hbWU9ZyxFLmlzRXhpc3Rpbmc9ajt2YXIgQz1pP0Y6bnVsbDtDJiYoQy50YXNrRGF0YT1FKTt2YXIgUj1ULnNjaGVkdWxlRXZlbnRUYXNrKFMsaCxDLHIsbyk7cmV0dXJuIEUudGFyZ2V0PW51bGwsQyYmKEMudGFza0RhdGE9bnVsbCksayYmKHkub25jZT0hMCksUi5vcHRpb25zPXksUi50YXJnZXQ9cCxSLmNhcHR1cmU9ZCxSLmV2ZW50TmFtZT1nLHYmJihSLm9yaWdpbmFsRGVsZWdhdGU9aCksdT9ELnVuc2hpZnQoUik6RC5wdXNoKFIpLGM/cDp2b2lkIDB9fX07cmV0dXJuIFRbb109Qyh4LGQsaixQLGIpLHcmJihUW2ddPUModyx5LGZ1bmN0aW9uKGUpe3JldHVybiB3LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsZS5pbnZva2UsRS5vcHRpb25zKX0sUCxiLCEwKSksVFtjXT1mdW5jdGlvbigpe3ZhciB0LG49dGhpc3x8ZSxyPWFyZ3VtZW50c1swXSxvPWFyZ3VtZW50c1syXTt0PXZvaWQgMCE9PW8mJighMD09PW98fCExIT09byYmISFvJiYhIW8uY2FwdHVyZSk7dmFyIGk9YXJndW1lbnRzWzFdO2lmKCFpKXJldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighYXx8YShPLGksbixhcmd1bWVudHMpKXt2YXIgYyx1PUxbcl07dSYmKGM9dVt0P3M6bF0pO3ZhciBmPWMmJm5bY107aWYoZilmb3IodmFyIHA9MDtwPGYubGVuZ3RoO3ArKyl7dmFyIGg9ZltwXTtpZihaKGgsaSkpcmV0dXJuIGYuc3BsaWNlKHAsMSksaC5pc1JlbW92ZWQ9ITAsMD09PWYubGVuZ3RoJiYoaC5hbGxSZW1vdmVkPSEwLG5bY109bnVsbCksaC56b25lLmNhbmNlbFRhc2soaCksYj9uOnZvaWQgMH1yZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxUW3VdPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49Vyh0aGlzfHxlLGFyZ3VtZW50c1swXSkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdO3QucHVzaChvLm9yaWdpbmFsRGVsZWdhdGU/by5vcmlnaW5hbERlbGVnYXRlOm8uY2FsbGJhY2spfXJldHVybiB0fSxUW3BdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc3x8ZSxuPWFyZ3VtZW50c1swXTtpZihuKXt2YXIgcj1MW25dO2lmKHIpe3ZhciBvPXRbcltsXV0saT10W3Jbc11dO2lmKG8pe3ZhciBhPW8uc2xpY2UoKTtmb3IoaD0wO2g8YS5sZW5ndGg7aCsrKXRoaXNbY10uY2FsbCh0aGlzLG4sKHU9YVtoXSkub3JpZ2luYWxEZWxlZ2F0ZT91Lm9yaWdpbmFsRGVsZWdhdGU6dS5jYWxsYmFjayx1Lm9wdGlvbnMpfWlmKGkpZm9yKGE9aS5zbGljZSgpLGg9MDtoPGEubGVuZ3RoO2grKyl7dmFyIHU7dGhpc1tjXS5jYWxsKHRoaXMsbiwodT1hW2hdKS5vcmlnaW5hbERlbGVnYXRlP3Uub3JpZ2luYWxEZWxlZ2F0ZTp1LmNhbGxiYWNrLHUub3B0aW9ucyl9fX1lbHNle2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciB2PUEuZXhlYyhmW2hdKSxkPXYmJnZbMV07ZCYmInJlbW92ZUxpc3RlbmVyIiE9PWQmJnRoaXNbcF0uY2FsbCh0aGlzLGQpfXRoaXNbcF0uY2FsbCh0aGlzLCJyZW1vdmVMaXN0ZW5lciIpfWlmKGIpcmV0dXJuIHRoaXN9LE0oVFtvXSx4KSxNKFRbY10sTyksRCYmTShUW3BdLEQpLFMmJk0oVFt1XSxTKSwhMH1mb3IodmFyIFQ9W10sdz0wO3c8dC5sZW5ndGg7dysrKVRbd109Yih0W3ddLHIpO3JldHVybiBUfWZ1bmN0aW9uIFcoZSx0KXt2YXIgbj1bXTtmb3IodmFyIHIgaW4gZSl7dmFyIG89QS5leGVjKHIpLGk9byYmb1sxXTtpZihpJiYoIXR8fGk9PT10KSl7dmFyIGE9ZVtyXTtpZihhKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKW4ucHVzaChhW2NdKX19cmV0dXJuIG59dmFyIFg9digiem9uZVRhc2siKTtmdW5jdGlvbiBLKGUsdCxuLHIpe3ZhciBvPW51bGwsaT1udWxsO24rPXI7dmFyIGE9e307ZnVuY3Rpb24gYyh0KXt2YXIgbj10LmRhdGE7cmV0dXJuIG4uYXJnc1swXT1mdW5jdGlvbigpe3RyeXt0Lmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXt0LmRhdGEmJnQuZGF0YS5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBuLmhhbmRsZUlkP2RlbGV0ZSBhW24uaGFuZGxlSWRdOm4uaGFuZGxlSWQmJihuLmhhbmRsZUlkW1hdPW51bGwpKX19LG4uaGFuZGxlSWQ9by5hcHBseShlLG4uYXJncyksdH1mdW5jdGlvbiB1KGUpe3JldHVybiBpKGUuZGF0YS5oYW5kbGVJZCl9bz16KGUsdCs9cixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgaVswXSl7dmFyIHM9aCh0LGlbMF0se2hhbmRsZUlkOm51bGwsaXNQZXJpb2RpYzoiSW50ZXJ2YWwiPT09cixkZWxheToiVGltZW91dCI9PT1yfHwiSW50ZXJ2YWwiPT09cj9pWzFdfHwwOm51bGwsYXJnczppfSxjLHUpO2lmKCFzKXJldHVybiBzO3ZhciBsPXMuZGF0YS5oYW5kbGVJZDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/YVtsXT1zOmwmJihsW1hdPXMpLGwmJmwucmVmJiZsLnVucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnVucmVmJiYocy5yZWY9bC5yZWYuYmluZChsKSxzLnVucmVmPWwudW5yZWYuYmluZChsKSksIm51bWJlciI9PXR5cGVvZiBsfHxsP2w6c31yZXR1cm4gbi5hcHBseShlLGkpfX0pLGk9eihlLG4sZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG8saT1yWzBdOyJudW1iZXIiPT10eXBlb2YgaT9vPWFbaV06KG89aSYmaVtYXSl8fChvPWkpLG8mJiJzdHJpbmciPT10eXBlb2Ygby50eXBlPyJub3RTY2hlZHVsZWQiIT09by5zdGF0ZSYmKG8uY2FuY2VsRm4mJm8uZGF0YS5pc1BlcmlvZGljfHwwPT09by5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIGk/ZGVsZXRlIGFbaV06aSYmKGlbWF09bnVsbCksby56b25lLmNhbmNlbFRhc2sobykpOnQuYXBwbHkoZSxyKX19KX12YXIgVT1PYmplY3RbdigiZGVmaW5lUHJvcGVydHkiKV09T2JqZWN0LmRlZmluZVByb3BlcnR5LEI9T2JqZWN0W3YoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFk9T2JqZWN0LmNyZWF0ZSxKPXYoInVuY29uZmlndXJhYmxlcyIpO2Z1bmN0aW9uIFYoZSx0KXtyZXR1cm4gZSYmZVtKXSYmZVtKXVt0XX1mdW5jdGlvbiBHKGUsdCxuKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKG4pfHwobi5jb25maWd1cmFibGU9ITApLG4uY29uZmlndXJhYmxlfHwoZVtKXXx8T2JqZWN0LmlzRnJvemVuKGUpfHxVKGUsSix7d3JpdGFibGU6ITAsdmFsdWU6e319KSxlW0pdJiYoZVtKXVt0XT0hMCkpLG59ZnVuY3Rpb24gUShlLHQsbixyKXt0cnl7cmV0dXJuIFUoZSx0LG4pfWNhdGNoKGkpe2lmKCFuLmNvbmZpZ3VyYWJsZSl0aHJvdyBpO3ZvaWQgMD09PXI/ZGVsZXRlIG4uY29uZmlndXJhYmxlOm4uY29uZmlndXJhYmxlPXI7dHJ5e3JldHVybiBVKGUsdCxuKX1jYXRjaChyKXt2YXIgbz1udWxsO3RyeXtvPUpTT04uc3RyaW5naWZ5KG4pfWNhdGNoKGUpe289bi50b1N0cmluZygpfWNvbnNvbGUubG9nKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSAnIit0KyInIHdpdGggZGVzY3JpcHRvciAnIitvKyInIG9uIG9iamVjdCAnIitlKyInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIityKX19fXZhciAkPVsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BseWNvbm5lY3RlZCIsInZyZGlzcGxheWRpc2Nvbm5lY3RlZCIsInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiXSxlZT1bImVuY3J5cHRlZCIsIndhaXRpbmdmb3JrZXkiLCJtc25lZWRrZXkiLCJtb3ppbnRlcnJ1cHRiZWdpbiIsIm1vemludGVycnVwdGVuZCJdLHRlPVsibG9hZCJdLG5lPVsiYmx1ciIsImVycm9yIiwiZm9jdXMiLCJsb2FkIiwicmVzaXplIiwic2Nyb2xsIiwibWVzc2FnZWVycm9yIl0scmU9WyJib3VuY2UiLCJmaW5pc2giLCJzdGFydCJdLG9lPVsibG9hZHN0YXJ0IiwicHJvZ3Jlc3MiLCJhYm9ydCIsImVycm9yIiwibG9hZCIsInByb2dyZXNzIiwidGltZW91dCIsImxvYWRlbmQiLCJyZWFkeXN0YXRlY2hhbmdlIl0saWU9WyJ1cGdyYWRlbmVlZGVkIiwiY29tcGxldGUiLCJhYm9ydCIsInN1Y2Nlc3MiLCJlcnJvciIsImJsb2NrZWQiLCJ2ZXJzaW9uY2hhbmdlIiwiY2xvc2UiXSxhZT1bImNsb3NlIiwiZXJyb3IiLCJvcGVuIiwibWVzc2FnZSJdLGNlPVsiZXJyb3IiLCJtZXNzYWdlIl0sdWU9WyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0uY29uY2F0KFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLFsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlZXJyb3IiXSxbInRvZ2dsZSJdLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIl0sJCxbImJlZm9yZWNvcHkiLCJiZWZvcmVjdXQiLCJiZWZvcmVwYXN0ZSIsImNvcHkiLCJjdXQiLCJwYXN0ZSIsImRyYWdzdGFydCIsImxvYWRlbmQiLCJhbmltYXRpb25zdGFydCIsInNlYXJjaCIsInRyYW5zaXRpb25ydW4iLCJ0cmFuc2l0aW9uc3RhcnQiLCJ3ZWJraXRhbmltYXRpb25lbmQiLCJ3ZWJraXRhbmltYXRpb25pdGVyYXRpb24iLCJ3ZWJraXRhbmltYXRpb25zdGFydCIsIndlYmtpdHRyYW5zaXRpb25lbmQiXSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdKTtmdW5jdGlvbiBzZShlLHQsbixyKXtlJiZqKGUsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiB0O3ZhciByPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldD09PWV9KTtpZighcnx8MD09PXIubGVuZ3RoKXJldHVybiB0O3ZhciBvPXJbMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1vLmluZGV4T2YoZSl9KX0oZSx0LG4pLHIpfWZ1bmN0aW9uIGxlKGMsdSl7aWYoIXd8fHgpe3ZhciBzPSJ1bmRlZmluZWQiIT10eXBlb2YgV2ViU29ja2V0O2lmKGZ1bmN0aW9uKCl7aWYoKEV8fHgpJiYhZShIVE1MRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50KXt2YXIgbj1lKEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIik7aWYobiYmIW4uY29uZmlndXJhYmxlKXJldHVybiExfXZhciByPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxvPWUociwib25yZWFkeXN0YXRlY2hhbmdlIik7aWYobyl7dChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KTt2YXIgaT0hIShjPW5ldyBYTUxIdHRwUmVxdWVzdCkub25yZWFkeXN0YXRlY2hhbmdlO3JldHVybiB0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsb3x8e30pLGl9dmFyIGE9digiZmFrZSIpO3Qociwib25yZWFkeXN0YXRlY2hhbmdlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYV19LHNldDpmdW5jdGlvbihlKXt0aGlzW2FdPWV9fSk7dmFyIGMsdT1mdW5jdGlvbigpe307cmV0dXJuKGM9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vbnJlYWR5c3RhdGVjaGFuZ2U9dSxpPWNbYV09PT11LGMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsaX0oKSl7dmFyIGw9dS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXM7aWYoRSl7dmFyIGY9d2luZG93O3NlKGYsdWUuY29uY2F0KFsibWVzc2FnZWVycm9yIl0pLGwsbihmKSksc2UoRG9jdW1lbnQucHJvdG90eXBlLHVlLGwpLHZvaWQgMCE9PWYuU1ZHRWxlbWVudCYmc2UoZi5TVkdFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShIVE1MRWxlbWVudC5wcm90b3R5cGUsdWUsbCksc2UoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsZWUsbCksc2UoSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUsJC5jb25jYXQobmUpLGwpLHNlKEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsJC5jb25jYXQobmUpLGwpLHNlKEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLHRlLGwpLHNlKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSx0ZSxsKTt2YXIgaD1mLkhUTUxNYXJxdWVlRWxlbWVudDtoJiZzZShoLnByb3RvdHlwZSxyZSxsKTt2YXIgZD1mLldvcmtlcjtkJiZzZShkLnByb3RvdHlwZSxjZSxsKX1zZShYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsb2UsbCk7dmFyIGc9dS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2cmJnNlKGcmJmcucHJvdG90eXBlLG9lLGwpLCJ1bmRlZmluZWQiIT10eXBlb2YgSURCSW5kZXgmJihzZShJREJJbmRleC5wcm90b3R5cGUsaWUsbCksc2UoSURCUmVxdWVzdC5wcm90b3R5cGUsaWUsbCksc2UoSURCT3BlbkRCUmVxdWVzdC5wcm90b3R5cGUsaWUsbCksc2UoSURCRGF0YWJhc2UucHJvdG90eXBlLGllLGwpLHNlKElEQlRyYW5zYWN0aW9uLnByb3RvdHlwZSxpZSxsKSxzZShJREJDdXJzb3IucHJvdG90eXBlLGllLGwpKSxzJiZzZShXZWJTb2NrZXQucHJvdG90eXBlLGFlLGwpfWVsc2UhZnVuY3Rpb24oKXtmb3IodmFyIGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dWVbZV0sbj0ib24iK3Q7c2VsZi5hZGRFdmVudExpc3RlbmVyKHQsZnVuY3Rpb24oZSl7dmFyIHQscixvPWUudGFyZ2V0O2ZvcihyPW8/by5jb25zdHJ1Y3Rvci5uYW1lKyIuIituOiJ1bmtub3duLiIrbjtvOylvW25dJiYhb1tuXVtmZV0mJigodD1wKG9bbl0scikpW2ZlXT1vW25dLG9bbl09dCksbz1vLnBhcmVudEVsZW1lbnR9LCEwKX0sdD0wO3Q8dWUubGVuZ3RoO3QrKyllKHQpfSgpLFooIlhNTEh0dHBSZXF1ZXN0IikscyYmZnVuY3Rpb24odCxuKXt2YXIgYz1uLldlYlNvY2tldDtuLkV2ZW50VGFyZ2V0fHxOKG4sW2MucHJvdG90eXBlXSksbi5XZWJTb2NrZXQ9ZnVuY3Rpb24odCxuKXt2YXIgdSxzLGw9YXJndW1lbnRzLmxlbmd0aD4xP25ldyBjKHQsbik6bmV3IGModCksZj1lKGwsIm9ubWVzc2FnZSIpO3JldHVybiBmJiYhMT09PWYuY29uZmlndXJhYmxlPyh1PXIobCkscz1sLFtpLGEsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dVtlXT1mdW5jdGlvbigpe3ZhciB0PW8uY2FsbChhcmd1bWVudHMpO2lmKGU9PT1pfHxlPT09YSl7dmFyIG49dC5sZW5ndGg+MD90WzBdOnZvaWQgMDtpZihuKXt2YXIgcj1ab25lLl9fc3ltYm9sX18oIk9OX1BST1BFUlRZIituKTtsW3JdPXVbcl19fXJldHVybiBsW2VdLmFwcGx5KGwsdCl9fSkpOnU9bCxqKHUsWyJjbG9zZSIsImVycm9yIiwibWVzc2FnZSIsIm9wZW4iXSxzKSx1fTt2YXIgdT1uLldlYlNvY2tldDtmb3IodmFyIHMgaW4gYyl1W3NdPWNbc119KDAsdSl9fXZhciBmZT12KCJ1bmJvdW5kIik7Wm9uZS5fX2xvYWRfcGF0Y2goInV0aWwiLGZ1bmN0aW9uKGUsdCxuKXtuLnBhdGNoT25Qcm9wZXJ0aWVzPWosbi5wYXRjaE1ldGhvZD16LG4uYmluZEFyZ3VtZW50cz1rfSksWm9uZS5fX2xvYWRfcGF0Y2goInRpbWVycyIsZnVuY3Rpb24oZSl7SyhlLCJzZXQiLCJjbGVhciIsIlRpbWVvdXQiKSxLKGUsInNldCIsImNsZWFyIiwiSW50ZXJ2YWwiKSxLKGUsInNldCIsImNsZWFyIiwiSW1tZWRpYXRlIil9KSxab25lLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixmdW5jdGlvbihlKXtLKGUsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLEsoZSwibW96UmVxdWVzdCIsIm1vekNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksSyhlLCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXSxyPTA7cjxuLmxlbmd0aDtyKyspeihlLG5bcl0sZnVuY3Rpb24obixyLG8pe3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiB0LmN1cnJlbnQucnVuKG4sZSxpLG8pfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihlLHQsbil7dmFyIHI9dC5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIik7ZVtyXSYmKHRbcl09ZVtyXSksZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSx0KXt2YXIgbj1lLkV2ZW50O24mJm4ucHJvdG90eXBlJiZ0LnBhdGNoTWV0aG9kKG4ucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3RbSF09ITAsZSYmZS5hcHBseSh0LG4pfX0pfShlLHQpfShlLG4pLGZ1bmN0aW9uKGUsdCl7dmFyIG49IkFuY2hvcixBcmVhLEF1ZGlvLEJSLEJhc2UsQmFzZUZvbnQsQm9keSxCdXR0b24sQ2FudmFzLENvbnRlbnQsRExpc3QsRGlyZWN0b3J5LERpdixFbWJlZCxGaWVsZFNldCxGb250LEZvcm0sRnJhbWUsRnJhbWVTZXQsSFIsSGVhZCxIZWFkaW5nLEh0bWwsSUZyYW1lLEltYWdlLElucHV0LEtleWdlbixMSSxMYWJlbCxMZWdlbmQsTGluayxNYXAsTWFycXVlZSxNZWRpYSxNZW51LE1ldGEsTWV0ZXIsTW9kLE9MaXN0LE9iamVjdCxPcHRHcm91cCxPcHRpb24sT3V0cHV0LFBhcmFncmFwaCxQcmUsUHJvZ3Jlc3MsUXVvdGUsU2NyaXB0LFNlbGVjdCxTb3VyY2UsU3BhbixTdHlsZSxUYWJsZUNhcHRpb24sVGFibGVDZWxsLFRhYmxlQ29sLFRhYmxlLFRhYmxlUm93LFRhYmxlU2VjdGlvbixUZXh0QXJlYSxUaXRsZSxUcmFjayxVTGlzdCxVbmtub3duLFZpZGVvIixyPSJBcHBsaWNhdGlvbkNhY2hlLEV2ZW50U291cmNlLEZpbGVSZWFkZXIsSW5wdXRNZXRob2RDb250ZXh0LE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxOb2RlLFBlcmZvcm1hbmNlLFNWR0VsZW1lbnRJbnN0YW5jZSxTaGFyZWRXb3JrZXIsVGV4dFRyYWNrLFRleHRUcmFja0N1ZSxUZXh0VHJhY2tMaXN0LFdlYktpdE5hbWVkRmxvdyxXaW5kb3csV29ya2VyLFdvcmtlckdsb2JhbFNjb3BlLFhNTEh0dHBSZXF1ZXN0LFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQsWE1MSHR0cFJlcXVlc3RVcGxvYWQsSURCUmVxdWVzdCxJREJPcGVuREJSZXF1ZXN0LElEQkRhdGFiYXNlLElEQlRyYW5zYWN0aW9uLElEQkN1cnNvcixEQkluZGV4LFdlYlNvY2tldCIuc3BsaXQoIiwiKSxvPVtdLGk9ZS53dGYsYT1uLnNwbGl0KCIsIik7aT9vPWEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJIVE1MIitlKyJFbGVtZW50In0pLmNvbmNhdChyKTplLkV2ZW50VGFyZ2V0P28ucHVzaCgiRXZlbnRUYXJnZXQiKTpvPXI7Zm9yKHZhciBjPWUuX19ab25lX2Rpc2FibGVfSUVfY2hlY2t8fCExLHU9ZS5fX1pvbmVfZW5hYmxlX2Nyb3NzX2NvbnRleHRfY2hlY2t8fCExLHA9SSgpLGg9ImZ1bmN0aW9uIF9fQlJPV1NFUlRPT0xTX0NPTlNPTEVfU0FGRUZVTkMoKSB7IFtuYXRpdmUgY29kZV0gfSIsdj0wO3Y8dWUubGVuZ3RoO3YrKyl7dmFyIGQ9ZisoKGs9dWVbdl0pK2wpLGc9ZisoaytzKTtMW2tdPXt9LExba11bbF09ZCxMW2tdW3NdPWd9Zm9yKHY9MDt2PG4ubGVuZ3RoO3YrKylmb3IodmFyIHk9YVt2XSxfPXFbeV09e30sbT0wO208dWUubGVuZ3RoO20rKyl7dmFyIGs7X1trPXVlW21dXT15KyIuYWRkRXZlbnRMaXN0ZW5lcjoiK2t9dmFyIGI9W107Zm9yKHY9MDt2PG8ubGVuZ3RoO3YrKyl7dmFyIFQ9ZVtvW3ZdXTtiLnB1c2goVCYmVC5wcm90b3R5cGUpfU4oZSxiLHt2aDpmdW5jdGlvbihlLHQsbixyKXtpZighYyYmcCl7aWYodSl0cnl7dmFyIG87aWYoIltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSI9PT0obz10LnRvU3RyaW5nKCkpfHxvPT1oKXJldHVybiBlLmFwcGx5KG4sciksITF9Y2F0Y2godCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1lbHNlIGlmKCJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iPT09KG89dC50b1N0cmluZygpKXx8bz09aClyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYodSl0cnl7dC50b1N0cmluZygpfWNhdGNoKHQpe3JldHVybiBlLmFwcGx5KG4sciksITF9cmV0dXJuITB9fSksdC5wYXRjaEV2ZW50VGFyZ2V0PU59KGUsbik7dmFyIG89ZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O28mJm8ucHJvdG90eXBlJiZuLnBhdGNoRXZlbnRUYXJnZXQoZSxbby5wcm90b3R5cGVdKSxaKCJNdXRhdGlvbk9ic2VydmVyIiksWigiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpLFooIkludGVyc2VjdGlvbk9ic2VydmVyIiksWigiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IixmdW5jdGlvbih0LG4scil7bGUoMCx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oZSx0LG4pe2lmKFYoZSx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYXNzaWduIHRvIHJlYWQgb25seSBwcm9wZXJ0eSAnIit0KyInIG9mICIrZSk7dmFyIHI9bi5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT10JiYobj1HKGUsdCxuKSksUShlLHQsbixyKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHRbbl0pfSksZX0sT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiJvYmplY3QiIT10eXBlb2YgdHx8T2JqZWN0LmlzRnJvemVuKHQpfHxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09RyhlLG4sdFtuXSl9KSxZKGUsdCl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1CKGUsdCk7cmV0dXJuIFYoZSx0KSYmKG4uY29uZmlndXJhYmxlPSExKSxufSxmdW5jdGlvbihuKXtpZigoRXx8eCkmJiJyZWdpc3RlckVsZW1lbnQiaW4gdC5kb2N1bWVudCl7dmFyIHI9ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50LG89WyJjcmVhdGVkQ2FsbGJhY2siLCJhdHRhY2hlZENhbGxiYWNrIiwiZGV0YWNoZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdO2RvY3VtZW50LnJlZ2lzdGVyRWxlbWVudD1mdW5jdGlvbih0LG4pe3JldHVybiBuJiZuLnByb3RvdHlwZSYmby5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8saSxhLGM9IkRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudDo6Iit0LHU9bi5wcm90b3R5cGU7aWYodS5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIHM9ZSh1LHQpO3MmJnMudmFsdWU/KHMudmFsdWU9cChzLnZhbHVlLGMpLGE9KGk9cykuY29uZmlndXJhYmxlLFEocj1uLnByb3RvdHlwZSxvPXQsaT1HKHIsbyxpKSxhKSk6dVt0XT1wKHVbdF0sYyl9ZWxzZSB1W3RdJiYodVt0XT1wKHVbdF0sYykpfSksci5jYWxsKGRvY3VtZW50LHQsbil9LE0oZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50LHIpfX0oKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJjYW52YXMiLGZ1bmN0aW9uKGUpe3ZhciB0PWUuSFRNTENhbnZhc0VsZW1lbnQ7dm9pZCAwIT09dCYmdC5wcm90b3R5cGUmJnQucHJvdG90eXBlLnRvQmxvYiYmZnVuY3Rpb24oZSxuLHIpe3ZhciBvPW51bGw7ZnVuY3Rpb24gaShlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYXJnc1t0LmNiSWR4XT1mdW5jdGlvbigpe2UuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sby5hcHBseSh0LnRhcmdldCx0LmFyZ3MpLGV9bz16KHQucHJvdG90eXBlLCJ0b0Jsb2IiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJue25hbWU6IkhUTUxDYW52YXNFbGVtZW50LnRvQmxvYiIsdGFyZ2V0OmUsY2JJZHg6MCxhcmdzOnR9fSh0LG4pO3JldHVybiByLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2YgbltyLmNiSWR4XT9oKHIubmFtZSxuW3IuY2JJZHhdLHIsaSxudWxsKTplLmFwcGx5KHQsbil9fSl9KCl9KSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIixmdW5jdGlvbihlLHQpeyFmdW5jdGlvbih0KXt2YXIgcz1YTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsbD1zW2NdLGY9c1t1XTtpZighbCl7dmFyIHA9ZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2lmKHApe3ZhciB2PXAucHJvdG90eXBlO2w9dltjXSxmPXZbdV19fXZhciBkPSJyZWFkeXN0YXRlY2hhbmdlIixnPSJzY2hlZHVsZWQiO2Z1bmN0aW9uIHkoZSl7WE1MSHR0cFJlcXVlc3RbaV09ITE7dmFyIHQ9ZS5kYXRhLHI9dC50YXJnZXQsYT1yW29dO2x8fChsPXJbY10sZj1yW3VdKSxhJiZmLmNhbGwocixkLGEpO3ZhciBzPXJbb109ZnVuY3Rpb24oKXtyLnJlYWR5U3RhdGU9PT1yLkRPTkUmJiF0LmFib3J0ZWQmJlhNTEh0dHBSZXF1ZXN0W2ldJiZlLnN0YXRlPT09ZyYmZS5pbnZva2UoKX07cmV0dXJuIGwuY2FsbChyLGQscykscltuXXx8KHJbbl09ZSksYi5hcHBseShyLHQuYXJncyksWE1MSHR0cFJlcXVlc3RbaV09ITAsZX1mdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ZS5kYXRhO3JldHVybiB0LmFib3J0ZWQ9ITAsVC5hcHBseSh0LnRhcmdldCx0LmFyZ3MpfXZhciBrPXoocywib3BlbiIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtyXT0wPT10WzJdLGVbYV09dFsxXSxrLmFwcGx5KGUsdCl9fSksYj16KHMsInNlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbcl0/Yi5hcHBseShlLHQpOmgoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLF8se3RhcmdldDplLHVybDplW2FdLGlzUGVyaW9kaWM6ITEsZGVsYXk6bnVsbCxhcmdzOnQsYWJvcnRlZDohMX0seSxtKX19KSxUPXoocywiYWJvcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWVbbl07aWYodCYmInN0cmluZyI9PXR5cGVvZiB0LnR5cGUpe2lmKG51bGw9PXQuY2FuY2VsRm58fHQuZGF0YSYmdC5kYXRhLmFib3J0ZWQpcmV0dXJuO3Quem9uZS5jYW5jZWxUYXNrKHQpfX19KX0oKTt2YXIgbj12KCJ4aHJUYXNrIikscj12KCJ4aHJTeW5jIiksbz12KCJ4aHJMaXN0ZW5lciIpLGk9digieGhyU2NoZWR1bGVkIiksYT12KCJ4aHJVUkwiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsZnVuY3Rpb24odCl7dC5uYXZpZ2F0b3ImJnQubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbih0LG4pe2Zvcih2YXIgcj10LmNvbnN0cnVjdG9yLm5hbWUsbz1mdW5jdGlvbihvKXt2YXIgaT1uW29dLGE9dFtpXTtpZihhKXtpZighYihlKHQsaSkpKXJldHVybiJjb250aW51ZSI7dFtpXT1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsayhhcmd1bWVudHMscisiLiIraSkpfTtyZXR1cm4gTSh0LGUpLHR9KGEpfX0saT0wO2k8bi5sZW5ndGg7aSsrKW8oaSl9KHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLFsiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2F0Y2hQb3NpdGlvbiJdKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24obil7VyhlLHQpLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG89ZS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ7aWYobyl7dmFyIGk9bmV3IG8odCx7cHJvbWlzZTpuLnByb21pc2UscmVhc29uOm4ucmVqZWN0aW9ufSk7ci5pbnZva2UoaSl9fSl9fWUuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYodFt2KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1uKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSx0W3YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPW4oInJlamVjdGlvbmhhbmRsZWQiKSl9KX0oKX0sIjFUc0EiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWV9fX0sIjJPaUYiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGV9fSwzOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigiaE4vZyIpfSwiM0x5aiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIktyb0oiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgbyBpbiB0KXIoZSxvLHRbb10sbik7cmV0dXJuIGV9fSwiNDVUdiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIk9QM1kiKSxhPXIuaGFzLGM9ci5nZXQsdT1yLmtleSxzPWZ1bmN0aW9uKGUsdCxuKXtpZihhKGUsdCxuKSlyZXR1cm4gYyhlLHQsbik7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXI/cyhlLHIsbik6dm9pZCAwfTtyLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSkpfX0pfSwiNDlENCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5zZXQ7ci5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGUsdCxuLHIpe2EoZSx0LG8obiksaShyKSl9fSl9LCI0TGlEIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImR5WlgiKSxvPW4oIlhLRlUiKSxpPW4oIktyb0oiKSxhPW4oIjNMeWoiKSxjPW4oIlo2dkYiKSx1PW4oIlNsa1kiKSxzPW4oIjlnWDciKSxsPW4oIjAvUjQiKSxmPW4oImVlVnEiKSxwPW4oIlhNVmgiKSxoPW4oImZ5RHEiKSx2PW4oIlhiemkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZCxnLHkpe3ZhciBfPXJbZV0sbT1fLGs9Zz8ic2V0IjoiYWRkIixiPW0mJm0ucHJvdG90eXBlLFQ9e30sdz1mdW5jdGlvbihlKXt2YXIgdD1iW2VdO2koYixlLCJkZWxldGUiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoeSYmIWwoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHkmJiFsKGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImdldCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHkmJiFsKGUpP3ZvaWQgMDp0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplKSx0aGlzfTpmdW5jdGlvbihlLG4pe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUsbiksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbSYmKHl8fGIuZm9yRWFjaCYmIWYoZnVuY3Rpb24oKXsobmV3IG0pLmVudHJpZXMoKS5uZXh0KCl9KSkpe3ZhciBFPW5ldyBtLHg9RVtrXSh5P3t9Oi0wLDEpIT1FLE89ZihmdW5jdGlvbigpe0UuaGFzKDEpfSksUz1wKGZ1bmN0aW9uKGUpe25ldyBtKGUpfSksRD0heSYmZihmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgbSx0PTU7dC0tOyllW2tdKHQsdCk7cmV0dXJuIWUuaGFzKC0wKX0pO1N8fCgobT10KGZ1bmN0aW9uKHQsbil7cyh0LG0sZSk7dmFyIHI9dihuZXcgXyx0LG0pO3JldHVybiB2b2lkIDAhPW4mJnUobixnLHJba10scikscn0pKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPW0pLChPfHxEKSYmKHcoImRlbGV0ZSIpLHcoImhhcyIpLGcmJncoImdldCIpKSwoRHx8eCkmJncoaykseSYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9ZWxzZSBtPWQuZ2V0Q29uc3RydWN0b3IodCxlLGcsayksYShtLnByb3RvdHlwZSxuKSxjLk5FRUQ9ITA7cmV0dXJuIGgobSxlKSxUW2VdPW0sbyhvLkcrby5XK28uRioobSE9XyksVCkseXx8ZC5zZXRTdHJvbmcobSxlLGcpLG19fSwiNFI0dSI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIuc3BsaXQoIiwiKX0sIjZGTU8iOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJFV21DIiksaT1uKCJLMHhVIikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG8oZSkmJigiZnVuY3Rpb24iIT10eXBlb2YodD1lLmNvbnN0cnVjdG9yKXx8dCE9PUFycmF5JiYhbyh0LnByb3RvdHlwZSl8fCh0PXZvaWQgMCkscih0KSYmbnVsbD09PSh0PXRbaV0pJiYodD12b2lkIDApKSx2b2lkIDA9PT10P0FycmF5OnR9fSwiN0RsaCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIuaGFzLGE9ci5rZXk7ci5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sIjlBQW4iOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigid212RyIpLG89bigiczVxWSIpO2UuZXhwb3J0cz1uKCI0TGlEIikoIk1hcCIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0RW50cnkobyh0aGlzLCJNYXAiKSxlKTtyZXR1cm4gdCYmdC52fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5kZWYobyh0aGlzLCJNYXAiKSwwPT09ZT8wOmUsdCl9fSxyLCEwKX0sIjlnWDciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCEoZSBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1yJiZyIGluIGUpdGhyb3cgVHlwZUVycm9yKG4rIjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGV9fSxBZm56OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiTFFBYyIpLG89bigiWEtGVSIpLGk9bigiS3JvSiIpLGE9bigiTXVrYiIpLGM9bigiaFBJUSIpLHU9bigiUWFEYiIpLHM9bigiZnlEcSIpLGw9bigiT1AzWSIpLGY9bigiSzB4VSIpKCJpdGVyYXRvciIpLHA9IShbXS5rZXlzJiYibmV4dCJpbltdLmtleXMoKSksaD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sdixkLGcseSl7dShuLHQsdik7dmFyIF8sbSxrLGI9ZnVuY3Rpb24oZSl7aWYoIXAmJmUgaW4geClyZXR1cm4geFtlXTtzd2l0Y2goZSl7Y2FzZSJrZXlzIjpjYXNlInZhbHVlcyI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX0sVD10KyIgSXRlcmF0b3IiLHc9InZhbHVlcyI9PWQsRT0hMSx4PWUucHJvdG90eXBlLE89eFtmXXx8eFsiQEBpdGVyYXRvciJdfHxkJiZ4W2RdLFM9T3x8YihkKSxEPWQ/dz9iKCJlbnRyaWVzIik6Uzp2b2lkIDAsaj0iQXJyYXkiPT10JiZ4LmVudHJpZXN8fE87aWYoaiYmKGs9bChqLmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiZrLm5leHQmJihzKGssVCwhMCkscnx8ImZ1bmN0aW9uIj09dHlwZW9mIGtbZl18fGEoayxmLGgpKSx3JiZPJiYidmFsdWVzIiE9PU8ubmFtZSYmKEU9ITAsUz1mdW5jdGlvbigpe3JldHVybiBPLmNhbGwodGhpcyl9KSxyJiYheXx8IXAmJiFFJiZ4W2ZdfHxhKHgsZixTKSxjW3RdPVMsY1tUXT1oLGQpaWYoXz17dmFsdWVzOnc/UzpiKCJ2YWx1ZXMiKSxrZXlzOmc/UzpiKCJrZXlzIiksZW50cmllczpEfSx5KWZvcihtIGluIF8pbSBpbiB4fHxpKHgsbSxfW21dKTtlbHNlIG8oby5QK28uRioocHx8RSksdCxfKTtyZXR1cm4gX319LEJxZlY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIuZ2V0LGE9ci5rZXk7ci5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sQ2trVDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigibTBQcCIpLG89bigiWW1xdiIpLGk9bigiUy9qLyIpLGE9bigibmU4aSIpLGM9bigielJ3byIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTE9PWUsdT0yPT1lLHM9Mz09ZSxsPTQ9PWUsZj02PT1lLHA9NT09ZXx8ZixoPXR8fGM7cmV0dXJuIGZ1bmN0aW9uKHQsYyx2KXtmb3IodmFyIGQsZyx5PWkodCksXz1vKHkpLG09cihjLHYsMyksaz1hKF8ubGVuZ3RoKSxiPTAsVD1uP2godCxrKTp1P2godCwwKTp2b2lkIDA7az5iO2IrKylpZigocHx8YiBpbiBfKSYmKGc9bShkPV9bYl0sYix5KSxlKSlpZihuKVRbYl09ZztlbHNlIGlmKGcpc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGQ7Y2FzZSA2OnJldHVybiBiO2Nhc2UgMjpULnB1c2goZCl9ZWxzZSBpZihsKXJldHVybiExO3JldHVybiBmPy0xOnN8fGw/bDpUfX19LERWZ0E6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInpoQWIiKSxvPW4oIjRSNHUiKTtlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiByKGUsbyl9fSxFSzBFOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKCJDa2tUIikoMCksaT1uKCJLcm9KIiksYT1uKCJaNnZGIiksYz1uKCJjek5LIiksdT1uKCJaRDY3Iikscz1uKCIwL1I0IiksbD1uKCJlZVZxIiksZj1uKCJzNXFZIikscD1hLmdldFdlYWssaD1PYmplY3QuaXNFeHRlbnNpYmxlLHY9dS51ZnN0b3JlLGQ9e30sZz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHk9e2dldDpmdW5jdGlvbihlKXtpZihzKGUpKXt2YXIgdD1wKGUpO3JldHVybiEwPT09dD92KGYodGhpcywiV2Vha01hcCIpKS5nZXQoZSk6dD90W3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB1LmRlZihmKHRoaXMsIldlYWtNYXAiKSxlLHQpfX0sXz1lLmV4cG9ydHM9bigiNExpRCIpKCJXZWFrTWFwIixnLHksdSwhMCwhMCk7bChmdW5jdGlvbigpe3JldHVybiA3IT0obmV3IF8pLnNldCgoT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KShkKSw3KS5nZXQoZCl9KSYmKGMoKHI9dS5nZXRDb25zdHJ1Y3RvcihnLCJXZWFrTWFwIikpLnByb3RvdHlwZSx5KSxhLk5FRUQ9ITAsbyhbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLGZ1bmN0aW9uKGUpe3ZhciB0PV8ucHJvdG90eXBlLG49dFtlXTtpKHQsZSxmdW5jdGlvbih0LG8pe2lmKHModCkmJiFoKHQpKXt0aGlzLl9mfHwodGhpcy5fZj1uZXcgcik7dmFyIGk9dGhpcy5fZltlXSh0LG8pO3JldHVybiJzZXQiPT1lP3RoaXM6aX1yZXR1cm4gbi5jYWxsKHRoaXMsdCxvKX0pfSkpfSxFV21DOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJMWld0Iik7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJBcnJheSI9PXIoZSl9fSxFZW1IOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJVcWNGIiksbz1uKCJSakQvIiksaT1uKCJhQ0ZqIiksYT1uKCJhcG1UIiksYz1uKCJhYWd4IiksdT1uKCJ4cHFsIikscz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1uKCJuaDRnIik/czpmdW5jdGlvbihlLHQpe2lmKGU9aShlKSx0PWEodCwhMCksdSl0cnl7cmV0dXJuIHMoZSx0KX1jYXRjaChlKXt9aWYoYyhlLHQpKXJldHVybiBvKCFyLmYuY2FsbChlLHQpLGVbdF0pfX0sRkpXNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaHN3YSIpLG89bigieTN3OSIpLGk9bigiRFZnQSIpO2UuZXhwb3J0cz1uKCJuaDRnIik/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtvKGUpO2Zvcih2YXIgbixhPWkodCksYz1hLmxlbmd0aCx1PTA7Yz51OylyLmYoZSxuPWFbdSsrXSx0W25dKTtyZXR1cm4gZX19LEZaY3E6ZnVuY3Rpb24oZSx0LG4pe24oIjQ5RDQiKSxuKCJ6cStDIiksbigiNDVUdiIpLG4oInVBdGQiKSxuKCJCcWZWIiksbigiZk4vMyIpLG4oImlXK1MiKSxuKCI3RGxoIiksbigiT3B4YiIpLGUuZXhwb3J0cz1uKCJnM2c1IikuUmVmbGVjdH0sSDZoZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieTN3OSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvKXt0cnl7cmV0dXJuIG8/dChyKG4pWzBdLG5bMV0pOnQobil9Y2F0Y2godCl7dmFyIGk9ZS5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmcihpLmNhbGwoZSkpLHR9fX0sIkk4YSsiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJMWld0Iiksbz1uKCJLMHhVIikoInRvU3RyaW5nVGFnIiksaT0iQXJndW1lbnRzIj09cihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLGE7cmV0dXJuIHZvaWQgMD09PWU/IlVuZGVmaW5lZCI6bnVsbD09PWU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PU9iamVjdChlKSxvKSk/bjppP3IodCk6Ik9iamVjdCI9PShhPXIodCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsZWU/IkFyZ3VtZW50cyI6YX19LEl3NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oImR5WlgiKS5kb2N1bWVudCxpPXIobykmJnIoby5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KGUpOnt9fX0sIkorNmUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJJOGErIiksbz1uKCJLMHhVIikoIml0ZXJhdG9yIiksaT1uKCJoUElRIik7ZS5leHBvcnRzPW4oImczZzUiKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihlKXtpZih2b2lkIDAhPWUpcmV0dXJuIGVbb118fGVbIkBAaXRlcmF0b3IiXXx8aVtyKGUpXX19LEppRWE6ZnVuY3Rpb24oZSx0KXt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sSzB4VTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVlRlciIpKCJ3a3MiKSxvPW4oInlscXMiKSxpPW4oImR5WlgiKS5TeW1ib2wsYT0iZnVuY3Rpb24iPT10eXBlb2YgaTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1hJiZpW2VdfHwoYT9pOm8pKCJTeW1ib2wuIitlKSl9KS5zdG9yZT1yfSxLcm9KOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIiksbz1uKCJNdWtiIiksaT1uKCJhYWd4IiksYT1uKCJ5bHFzIikoInNyYyIpLGM9RnVuY3Rpb24udG9TdHJpbmcsdT0oIiIrYykuc3BsaXQoInRvU3RyaW5nIik7bigiZzNnNSIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuY2FsbChlKX0sKGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixjKXt2YXIgcz0iZnVuY3Rpb24iPT10eXBlb2YgbjtzJiYoaShuLCJuYW1lIil8fG8obiwibmFtZSIsdCkpLGVbdF0hPT1uJiYocyYmKGkobixhKXx8byhuLGEsZVt0XT8iIitlW3RdOnUuam9pbihTdHJpbmcodCkpKSksZT09PXI/ZVt0XT1uOmM/ZVt0XT9lW3RdPW46byhlLHQsbik6KGRlbGV0ZSBlW3RdLG8oZSx0LG4pKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ0aGlzW2FdfHxjLmNhbGwodGhpcyl9KX0sS3V0aDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieTN3OSIpLG89bigiRkpXNSIpLGk9bigiNFI0dSIpLGE9bigiWVR2QSIpKCJJRV9QUk9UTyIpLGM9ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24oKXt2YXIgZSx0PW4oIkl3NzEiKSgiaWZyYW1lIikscj1pLmxlbmd0aDtmb3IodC5zdHlsZS5kaXNwbGF5PSJub25lIixuKCIrckx2IikuYXBwZW5kQ2hpbGQodCksdC5zcmM9ImphdmFzY3JpcHQ6IiwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLGUuY2xvc2UoKSx1PWUuRjtyLS07KWRlbGV0ZSB1LnByb3RvdHlwZVtpW3JdXTtyZXR1cm4gdSgpfTtlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KGMucHJvdG90eXBlPXIoZSksbj1uZXcgYyxjLnByb3RvdHlwZT1udWxsLG5bYV09ZSk6bj11KCksdm9pZCAwPT09dD9uOm8obix0KX19LExRQWM6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ITF9LExaV3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LE02UWo6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhQSVEiKSxvPW4oIksweFUiKSgiaXRlcmF0b3IiKSxpPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihyLkFycmF5PT09ZXx8aVtvXT09PWUpfX0sTXVrYjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaHN3YSIpLG89bigiUmpELyIpO2UuZXhwb3J0cz1uKCJuaDRnIik/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByLmYoZSx0LG8oMSxuKSl9OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLGV9fSxONmNKOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCI5QUFuIiksbz1uKCJYS0ZVIiksaT1uKCJWVGVyIikoIm1ldGFkYXRhIiksYT1pLnN0b3JlfHwoaS5zdG9yZT1uZXcobigiRUswRSIpKSksYz1mdW5jdGlvbihlLHQsbil7dmFyIG89YS5nZXQoZSk7aWYoIW8pe2lmKCFuKXJldHVybjthLnNldChlLG89bmV3IHIpfXZhciBpPW8uZ2V0KHQpO2lmKCFpKXtpZighbilyZXR1cm47by5zZXQodCxpPW5ldyByKX1yZXR1cm4gaX07ZS5leHBvcnRzPXtzdG9yZTphLG1hcDpjLGhhczpmdW5jdGlvbihlLHQsbil7dmFyIHI9Yyh0LG4sITEpO3JldHVybiB2b2lkIDAhPT1yJiZyLmhhcyhlKX0sZ2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwhMSk7cmV0dXJuIHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KGUpfSxzZXQ6ZnVuY3Rpb24oZSx0LG4scil7YyhuLHIsITApLnNldChlLHQpfSxrZXlzOmZ1bmN0aW9uKGUsdCl7dmFyIG49YyhlLHQsITEpLHI9W107cmV0dXJuIG4mJm4uZm9yRWFjaChmdW5jdGlvbihlLHQpe3IucHVzaCh0KX0pLHJ9LGtleTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8InN5bWJvbCI9PXR5cGVvZiBlP2U6U3RyaW5nKGUpfSxleHA6ZnVuY3Rpb24oZSl7byhvLlMsIlJlZmxlY3QiLGUpfX19LE9QM1k6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImFhZ3giKSxvPW4oIlMvai8iKSxpPW4oIllUdkEiKSgiSUVfUFJPVE8iKSxhPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9byhlKSxyKGUsaSk/ZVtpXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9hOm51bGx9fSxPcHhiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1uKCIyT2lGIiksYT1yLmtleSxjPXIuc2V0O3IuZXhwKHttZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe2MoZSx0LCh2b2lkIDAhPT1yP286aSkobiksYShyKSl9fX0pfSxRM25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJTbGtZIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107cmV0dXJuIHIoZSwhMSxuLnB1c2gsbix0KSxufX0sUWFEYjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkt1dGgiKSxvPW4oIlJqRC8iKSxpPW4oImZ5RHEiKSxhPXt9O24oIk11a2IiKShhLG4oIksweFUiKSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlLnByb3RvdHlwZT1yKGEse25leHQ6bygxLG4pfSksaShlLHQrIiBJdGVyYXRvciIpfX0sUllpNzpmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOihlPjA/cjpuKShlKX19LCJSakQvIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX19LCJTL2ovIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigidmhQVSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHIoZSkpfX0sU2xrWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigibTBQcCIpLG89bigiSDZoZiIpLGk9bigiTTZRaiIpLGE9bigieTN3OSIpLGM9bigibmU4aSIpLHU9bigiSis2ZSIpLHM9e30sbD17fTsodD1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZixwKXt2YXIgaCx2LGQsZyx5PXA/ZnVuY3Rpb24oKXtyZXR1cm4gZX06dShlKSxfPXIobixmLHQ/MjoxKSxtPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgaXRlcmFibGUhIik7aWYoaSh5KSl7Zm9yKGg9YyhlLmxlbmd0aCk7aD5tO20rKylpZigoZz10P18oYSh2PWVbbV0pWzBdLHZbMV0pOl8oZVttXSkpPT09c3x8Zz09PWwpcmV0dXJuIGd9ZWxzZSBmb3IoZD15LmNhbGwoZSk7ISh2PWQubmV4dCgpKS5kb25lOylpZigoZz1vKGQsXyx2LnZhbHVlLHQpKT09PXN8fGc9PT1sKXJldHVybiBnfSkuQlJFQUs9cyx0LlJFVFVSTj1sfSxUMzliOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigid212RyIpLG89bigiczVxWSIpO2UuZXhwb3J0cz1uKCI0TGlEIikoIlNldCIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKGUpe3JldHVybiByLmRlZihvKHRoaXMsIlNldCIpLGU9MD09PWU/MDplLGUpfX0scil9LFVxY0Y6ZnVuY3Rpb24oZSx0KXt0LmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LFZUZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImczZzUiKSxvPW4oImR5WlgiKSxpPW9bIl9fY29yZS1qc19zaGFyZWRfXyJdfHwob1siX19jb3JlLWpzX3NoYXJlZF9fIl09e30pOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaVtlXXx8KGlbZV09dm9pZCAwIT09dD90Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246ci52ZXJzaW9uLG1vZGU6bigiTFFBYyIpPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4YTkgMjAxOCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sWEtGVTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZHlaWCIpLG89bigiZzNnNSIpLGk9bigiTXVrYiIpLGE9bigiS3JvSiIpLGM9bigibTBQcCIpLHU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzLGwsZixwLGg9ZSZ1LkYsdj1lJnUuRyxkPWUmdS5QLGc9ZSZ1LkIseT12P3I6ZSZ1LlM/clt0XXx8KHJbdF09e30pOihyW3RdfHx7fSkucHJvdG90eXBlLF89dj9vOm9bdF18fChvW3RdPXt9KSxtPV8ucHJvdG90eXBlfHwoXy5wcm90b3R5cGU9e30pO2ZvcihzIGluIHYmJihuPXQpLG4pZj0oKGw9IWgmJnkmJnZvaWQgMCE9PXlbc10pP3k6bilbc10scD1nJiZsP2MoZixyKTpkJiYiZnVuY3Rpb24iPT10eXBlb2YgZj9jKEZ1bmN0aW9uLmNhbGwsZik6Zix5JiZhKHkscyxmLGUmdS5VKSxfW3NdIT1mJiZpKF8scyxwKSxkJiZtW3NdIT1mJiYobVtzXT1mKX07ci5jb3JlPW8sdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sWE1WaDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiSzB4VSIpKCJpdGVyYXRvciIpLG89ITE7dHJ5e3ZhciBpPVs3XVtyXSgpO2kucmV0dXJuPWZ1bmN0aW9uKCl7bz0hMH0sQXJyYXkuZnJvbShpLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKGUpe31lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighdCYmIW8pcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBpPVs3XSxhPWlbcl0oKTthLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX0saVtyXT1mdW5jdGlvbigpe3JldHVybiBhfSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gbn19LFhiemk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oImk1ZGMiKS5zZXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxhPXQuY29uc3RydWN0b3I7cmV0dXJuIGEhPT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgYSYmKGk9YS5wcm90b3R5cGUpIT09bi5wcm90b3R5cGUmJnIoaSkmJm8mJm8oZSxpKSxlfX0sWVR2QTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVlRlciIpKCJrZXlzIiksbz1uKCJ5bHFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1vKGUpKX19LFltcXY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKTtlLmV4cG9ydHM9T2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJTdHJpbmciPT1yKGUpP2Uuc3BsaXQoIiIpOk9iamVjdChlKX19LFo2dkY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInlscXMiKSgibWV0YSIpLG89bigiMC9SNCIpLGk9bigiYWFneCIpLGE9bigiaHN3YSIpLmYsYz0wLHU9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0scz0hbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIHUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxsPWZ1bmN0aW9uKGUpe2EoZSxyLHt2YWx1ZTp7aToiTyIrICsrYyx3Ont9fX0pfSxmPWUuZXhwb3J0cz17S0VZOnIsTkVFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFpKGUscikpe2lmKCF1KGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7bChlKX1yZXR1cm4gZVtyXS5pfSxnZXRXZWFrOmZ1bmN0aW9uKGUsdCl7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuITA7aWYoIXQpcmV0dXJuITE7bChlKX1yZXR1cm4gZVtyXS53fSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gcyYmZi5ORUVEJiZ1KGUpJiYhaShlLHIpJiZsKGUpLGV9fX0sWkQ2NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIjNMeWoiKSxvPW4oIlo2dkYiKS5nZXRXZWFrLGk9bigieTN3OSIpLGE9bigiMC9SNCIpLGM9bigiOWdYNyIpLHU9bigiU2xrWSIpLHM9bigiQ2trVCIpLGw9bigiYWFneCIpLGY9bigiczVxWSIpLHA9cyg1KSxoPXMoNiksdj0wLGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2x8fChlLl9sPW5ldyBnKX0sZz1mdW5jdGlvbigpe3RoaXMuYT1bXX0seT1mdW5jdGlvbihlLHQpe3JldHVybiBwKGUuYSxmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KX07Zy5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXt2YXIgdD15KHRoaXMsZSk7aWYodClyZXR1cm4gdFsxXX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEheSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj15KHRoaXMsZSk7bj9uWzFdPXQ6dGhpcy5hLnB1c2goW2UsdF0pfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9aCh0aGlzLmEsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSk7cmV0dXJufnQmJnRoaXMuYS5zcGxpY2UodCwxKSwhIX50fX0sZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixpKXt2YXIgcz1lKGZ1bmN0aW9uKGUscil7YyhlLHMsdCwiX2kiKSxlLl90PXQsZS5faT12KyssZS5fbD12b2lkIDAsdm9pZCAwIT1yJiZ1KHIsbixlW2ldLGUpfSk7cmV0dXJuIHIocy5wcm90b3R5cGUse2RlbGV0ZTpmdW5jdGlvbihlKXtpZighYShlKSlyZXR1cm4hMTt2YXIgbj1vKGUpO3JldHVybiEwPT09bj9kKGYodGhpcyx0KSkuZGVsZXRlKGUpOm4mJmwobix0aGlzLl9pKSYmZGVsZXRlIG5bdGhpcy5faV19LGhhczpmdW5jdGlvbihlKXtpZighYShlKSlyZXR1cm4hMTt2YXIgbj1vKGUpO3JldHVybiEwPT09bj9kKGYodGhpcyx0KSkuaGFzKGUpOm4mJmwobix0aGlzLl9pKX19KSxzfSxkZWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW8oaSh0KSwhMCk7cmV0dXJuITA9PT1yP2QoZSkuc2V0KHQsbik6cltlLl9pXT1uLGV9LHVmc3RvcmU6ZH19LGFDRmo6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlltcXYiKSxvPW4oInZoUFUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIobyhlKSl9fSxhYWd4OmZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sYXBtVDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpKXJldHVybiBlO3ZhciBuLG87aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZigiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnZhbHVlT2YpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87aWYoIXQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LGN6Tks6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJEVmdBIiksbz1uKCJKaUVhIiksaT1uKCJVcWNGIiksYT1uKCJTL2ovIiksYz1uKCJZbXF2IiksdT1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hdXx8bigiZWVWcSIpKGZ1bmN0aW9uKCl7dmFyIGU9e30sdD17fSxuPVN5bWJvbCgpLHI9ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gZVtuXT03LHIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1lfSksNyE9dSh7fSxlKVtuXXx8T2JqZWN0LmtleXModSh7fSx0KSkuam9pbigiIikhPXJ9KT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1hKGUpLHU9YXJndW1lbnRzLmxlbmd0aCxzPTEsbD1vLmYsZj1pLmY7dT5zOylmb3IodmFyIHAsaD1jKGFyZ3VtZW50c1tzKytdKSx2PWw/cihoKS5jb25jYXQobChoKSk6cihoKSxkPXYubGVuZ3RoLGc9MDtkPmc7KWYuY2FsbChoLHA9dltnKytdKSYmKG5bcF09aFtwXSk7cmV0dXJuIG59OnV9LCJkL0djIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiUllpNyIpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT1yKGUpKTwwP28oZSt0LDApOmkoZSx0KX19LGR5Wlg6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9bil9LGVlVnE6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX19LGVsWnE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJkeVpYIiksbz1uKCJoc3dhIiksaT1uKCJuaDRnIiksYT1uKCJLMHhVIikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtpJiZ0JiYhdFthXSYmby5mKHQsYSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sImZOLzMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmtleXMsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBpKG8oZSksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDphKGFyZ3VtZW50c1sxXSkpfX0pfSxmeURxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIikuZixvPW4oImFhZ3giKSxpPW4oIksweFUiKSgidG9TdHJpbmdUYWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UmJiFvKGU9bj9lOmUucHJvdG90eXBlLGkpJiZyKGUsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LGczZzU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9e3ZlcnNpb246IjIuNS43In07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bil9LCJoTi9nIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KSxuKCJGWmNxIiksbigiMFRXcCIpfSxoUElROmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt9fSxoc3dhOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iiksbz1uKCJ4cHFsIiksaT1uKCJhcG1UIiksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5mPW4oIm5oNGciKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdD1pKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGEoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0saTVkYzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigieTN3OSIpLGk9ZnVuY3Rpb24oZSx0KXtpZihvKGUpLCFyKHQpJiZudWxsIT09dCl0aHJvdyBUeXBlRXJyb3IodCsiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIpfTtlLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oZSx0LHIpe3RyeXsocj1uKCJtMFBwIikoRnVuY3Rpb24uY2FsbCxuKCJFZW1IIikuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKGUsW10pLHQ9IShlIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKGUpe3Q9ITB9cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkoZSxuKSx0P2UuX19wcm90b19fPW46cihlLG4pLGV9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazppfX0sImlXK1MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1uKCJPUDNZIiksYT1yLmhhcyxjPXIua2V5LHU9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiEwO3ZhciByPWkodCk7cmV0dXJuIG51bGwhPT1yJiZ1KGUscixuKX07ci5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pKX19KX0sbTBQcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMk9pRiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYocihlKSx2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChuKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmNhbGwodCxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBlLmNhbGwodCxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZS5jYWxsKHQsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fX0sbmU4aTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiUllpNyIpLG89TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/byhyKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxuaDRnOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LHM1cVk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighcihlKXx8ZS5fdCE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkISIpO3JldHVybiBlfX0sdUF0ZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVDM5YiIpLG89bigiUTNuZSIpLGk9bigiTjZjSiIpLGE9bigieTN3OSIpLGM9bigiT1AzWSIpLHU9aS5rZXlzLHM9aS5rZXksbD1mdW5jdGlvbihlLHQpe3ZhciBuPXUoZSx0KSxpPWMoZSk7aWYobnVsbD09PWkpcmV0dXJuIG47dmFyIGE9bChpLHQpO3JldHVybiBhLmxlbmd0aD9uLmxlbmd0aD9vKG5ldyByKG4uY29uY2F0KGEpKSk6YTpufTtpLmV4cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBsKGEoZSksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpzKGFyZ3VtZW50c1sxXSkpfX0pfSx2aFBVOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICAiK2UpO3JldHVybiBlfX0sdzJhNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYUNGaiIpLG89bigibmU4aSIpLGk9bigiZC9HYyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGEpe3ZhciBjLHU9cih0KSxzPW8odS5sZW5ndGgpLGw9aShhLHMpO2lmKGUmJm4hPW4pe2Zvcig7cz5sOylpZigoYz11W2wrK10pIT1jKXJldHVybiEwfWVsc2UgZm9yKDtzPmw7bCsrKWlmKChlfHxsIGluIHUpJiZ1W2xdPT09bilyZXR1cm4gZXx8bHx8MDtyZXR1cm4hZSYmLTF9fX0sd212RzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImhzd2EiKS5mLG89bigiS3V0aCIpLGk9bigiM0x5aiIpLGE9bigibTBQcCIpLGM9bigiOWdYNyIpLHU9bigiU2xrWSIpLHM9bigiQWZueiIpLGw9bigiMVRzQSIpLGY9bigiZWxacSIpLHA9bigibmg0ZyIpLGg9bigiWjZ2RiIpLmZhc3RLZXksdj1uKCJzNXFZIiksZD1wPyJfcyI6InNpemUiLGc9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWgodCk7aWYoIkYiIT09cilyZXR1cm4gZS5faVtyXTtmb3Iobj1lLl9mO247bj1uLm4paWYobi5rPT10KXJldHVybiBufTtlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBsPWUoZnVuY3Rpb24oZSxyKXtjKGUsbCx0LCJfaSIpLGUuX3Q9dCxlLl9pPW8obnVsbCksZS5fZj12b2lkIDAsZS5fbD12b2lkIDAsZVtkXT0wLHZvaWQgMCE9ciYmdShyLG4sZVtzXSxlKX0pO3JldHVybiBpKGwucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT12KHRoaXMsdCksbj1lLl9pLHI9ZS5fZjtyO3I9ci5uKXIucj0hMCxyLnAmJihyLnA9ci5wLm49dm9pZCAwKSxkZWxldGUgbltyLmldO2UuX2Y9ZS5fbD12b2lkIDAsZVtkXT0wfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIG49dih0aGlzLHQpLHI9ZyhuLGUpO2lmKHIpe3ZhciBvPXIubixpPXIucDtkZWxldGUgbi5faVtyLmldLHIucj0hMCxpJiYoaS5uPW8pLG8mJihvLnA9aSksbi5fZj09ciYmKG4uX2Y9byksbi5fbD09ciYmKG4uX2w9aSksbltkXS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbihlKXt2KHRoaXMsdCk7Zm9yKHZhciBuLHI9YShlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO249bj9uLm46dGhpcy5fZjspZm9yKHIobi52LG4uayx0aGlzKTtuJiZuLnI7KW49bi5wfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFnKHYodGhpcyx0KSxlKX19KSxwJiZyKGwucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcyx0KVtkXX19KSxsfSxkZWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saT1nKGUsdCk7cmV0dXJuIGk/aS52PW46KGUuX2w9aT17aTpvPWgodCwhMCksazp0LHY6bixwOnI9ZS5fbCxuOnZvaWQgMCxyOiExfSxlLl9mfHwoZS5fZj1pKSxyJiYoci5uPWkpLGVbZF0rKywiRiIhPT1vJiYoZS5faVtvXT1pKSksZX0sZ2V0RW50cnk6ZyxzZXRTdHJvbmc6ZnVuY3Rpb24oZSx0LG4pe3MoZSx0LGZ1bmN0aW9uKGUsbil7dGhpcy5fdD12KGUsdCksdGhpcy5faz1uLHRoaXMuX2w9dm9pZCAwfSxmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9rLHQ9dGhpcy5fbDt0JiZ0LnI7KXQ9dC5wO3JldHVybiB0aGlzLl90JiYodGhpcy5fbD10PXQ/dC5uOnRoaXMuX3QuX2YpP2woMCwia2V5cyI9PWU/dC5rOiJ2YWx1ZXMiPT1lP3QudjpbdC5rLHQudl0pOih0aGlzLl90PXZvaWQgMCxsKDEpKX0sbj8iZW50cmllcyI6InZhbHVlcyIsIW4sITApLGYodCl9fX0seHBxbDpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKCJuaDRnIikmJiFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4oIkl3NzEiKSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LHkzdzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIXIoZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0seWxxczpmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHZvaWQgMD09PWU/IiI6ZSwiKV8iLCgrK24rcikudG9TdHJpbmcoMzYpKX19LHpSd286ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjZGTU8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KHIoZSkpKHQpfX0semhBYjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYWFneCIpLG89bigiYUNGaiIpLGk9bigidzJhNSIpKCExKSxhPW4oIllUdkEiKSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixjPW8oZSksdT0wLHM9W107Zm9yKG4gaW4gYyluIT1hJiZyKGMsbikmJnMucHVzaChuKTtmb3IoO3QubGVuZ3RoPnU7KXIoYyxuPXRbdSsrXSkmJih+aShzLG4pfHxzLnB1c2gobikpO3JldHVybiBzfX0sInpxK0MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmtleSxhPXIubWFwLGM9ci5zdG9yZTtyLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmkoYXJndW1lbnRzWzJdKSxyPWEobyh0KSxuLCExKTtpZih2b2lkIDA9PT1yfHwhci5kZWxldGUoZSkpcmV0dXJuITE7aWYoci5zaXplKXJldHVybiEwO3ZhciB1PWMuZ2V0KHQpO3JldHVybiB1LmRlbGV0ZShuKSwhIXUuc2l6ZXx8Yy5kZWxldGUodCl9fSl9fSxbWzMsMV1dXSk7KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s0XSx7Iit0SjQiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHImJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY2xvc2VkfHxlLmNvbXBsZXRlKCl9fX0sIit1bUsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe31uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSwiL1dZdiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdC5zdWJzY3JpYmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIjAvdVEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiNmJsRiIpLGk9bigiL1dZdiIpLG89bigiMmVQbCIpLGE9bigieFRsYSIpLHM9bigiRW44KyIpLGw9bigiSVVUYiIpLHU9bigicHVnVCIpLGM9bigiUzVYUSIpLGY9bigidTY3RCIpLGg9bigiSmNSdiIpLHA9bigiRnhiMSIpO2Z1bmN0aW9uIGQodCxlKXtpZighZSlyZXR1cm4gdCBpbnN0YW5jZW9mIHIuYT90Om5ldyByLmEoT2JqZWN0KHAuYSkodCkpO2lmKG51bGwhPXQpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFthLmFdfSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHIuYShlP2Z1bmN0aW9uKG4pe3ZhciByPW5ldyB1LmE7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXt2YXIgaT10W2EuYV0oKTtyLmFkZChpLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKX0sZXJyb3I6ZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKHQpfSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfX0pKX0pKSxyfTpPYmplY3QoaC5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KGkuYSkodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcj1uZXcgdS5hO3JldHVybiByLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7bi5uZXh0KHQpLHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfSkpfSxmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9KX0pKSxyfTpPYmplY3QoYy5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KG8uYSkodCkpcmV0dXJuIE9iamVjdChsLmEpKHQsZSk7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W3MuYV19KHQpfHwic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHIsaT1uZXcgdS5hO3JldHVybiBpLmFkZChmdW5jdGlvbigpe3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByLnJldHVybiYmci5yZXR1cm4oKX0pLGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyPXRbcy5hXSgpLGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtpZighbi5jbG9zZWQpe3ZhciB0LGU7dHJ5e3ZhciBpPXIubmV4dCgpO3Q9aS52YWx1ZSxlPWkuZG9uZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuLmVycm9yKHQpfWU/bi5jb21wbGV0ZSgpOihuLm5leHQodCksdGhpcy5zY2hlZHVsZSgpKX19KSl9KSksaX06T2JqZWN0KGYuYSkodCkpfSh0LGUpfXRocm93IG5ldyBUeXBlRXJyb3IoKG51bGwhPT10JiZ0eXBlb2YgdHx8dCkrIiBpcyBub3Qgb2JzZXJ2YWJsZSIpfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBkfSl9LCIyNkZVIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigibXJTRyIpLGk9bigiSzlJYSIpLG89bigiOGc4QSIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3ZhbHVlPWUsbn1yZXR1cm4gci5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgbj10LnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcyxlKTtyZXR1cm4gbiYmIW4uY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLG59LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNFcnJvcil0aHJvdyB0aGlzLnRocm93bkVycm9yO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBvLmE7cmV0dXJuIHRoaXMuX3ZhbHVlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLHRoaXMuX3ZhbHVlPWUpfSxlfShpLmEpfSwiMkJkaiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LCIyZVBsIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fX0sNDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oInpVbmIiKX0sIjY3WS8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbi4gQXJlIHlvdSBsb29raW5nIGZvciBgbWFwVG8oKWA/Iik7cmV0dXJuIG4ubGlmdChuZXcgYSh0LGUpKX19dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcm9qZWN0PXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByb2plY3QsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcm9qZWN0PW4saS5jb3VudD0wLGkudGhpc0FyZz1yfHxpLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucHJvamVjdC5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGkuYSl9LCI2YWh3IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiaUx4USIpLGk9bigiREtUYiIpLG89e2Nsb3NlZDohMCxuZXh0OmZ1bmN0aW9uKHQpe30sZXJyb3I6ZnVuY3Rpb24odCl7aWYoci5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtPYmplY3QoaS5hKSh0KX0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fX0sIjZibEYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiRkZPbyIpLGk9bigiTC9WOSIpLG89bigiNmFodyIpLGE9bigieFRsYSIpLHM9bigieTNCeSIpLGw9bigiaUx4USIpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9cmV0dXJuIHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc291cmNlPXRoaXMsbi5vcGVyYXRvcj1lLG59LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7dmFyIGE9dGhpcy5vcGVyYXRvcixzPWZ1bmN0aW9uKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2Ygci5hKXJldHVybiB0O2lmKHRbaS5hXSlyZXR1cm4gdFtpLmFdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IHIuYSh0LGUsbik6bmV3IHIuYShvLmEpfSh0LGUsbik7aWYoYT9hLmNhbGwocyx0aGlzLnNvdXJjZSk6cy5hZGQodGhpcy5zb3VyY2V8fGwuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYhcy5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fc3Vic2NyaWJlKHMpOnRoaXMuX3RyeVN1YnNjcmliZShzKSksbC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnMuc3luY0Vycm9yVGhyb3dhYmxlJiYocy5zeW5jRXJyb3JUaHJvd2FibGU9ITEscy5zeW5jRXJyb3JUaHJvd24pKXRocm93IHMuc3luY0Vycm9yVmFsdWU7cmV0dXJuIHN9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7bC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLHQuZXJyb3IoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9YyhlKSkoZnVuY3Rpb24oZSxyKXt2YXIgaTtpPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3RyeXt0KGUpfWNhdGNoKHQpe3IodCksaSYmaS51bnN1YnNjcmliZSgpfX0scixlKX0pfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc291cmNlO3JldHVybiBlJiZlLnN1YnNjcmliZSh0KX0sdC5wcm90b3R5cGVbYS5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAwPT09dC5sZW5ndGg/dGhpczpPYmplY3Qocy5iKSh0KSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyh0PWModCkpKGZ1bmN0aW9uKHQsbil7dmFyIHI7ZS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0sZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHQocil9KX0pfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gYyh0KXtpZih0fHwodD1sLmEuUHJvbWlzZXx8UHJvbWlzZSksIXQpdGhyb3cgbmV3IEVycm9yKCJubyBQcm9taXNlIGltcGwgZm91bmQiKTtyZXR1cm4gdH19LCI4ZzhBIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJvYmplY3QgdW5zdWJzY3JpYmVkIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiByLmIoZSx0KSxlfShFcnJvcil9LCI5WjFGIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigibXJTRyIpLGk9bigiTUdCUyIpLG89bigiem90bSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBzKHQpLHI9ZS5saWZ0KG4pO3JldHVybiBuLmNhdWdodD1yfX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsKHQsdGhpcy5zZWxlY3Rvcix0aGlzLmNhdWdodCkpfSx0fSgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuc2VsZWN0b3I9bixpLmNhdWdodD1yLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIG49dm9pZCAwO3RyeXtuPXRoaXMuc2VsZWN0b3IoZSx0aGlzLmNhdWdodCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLGUpfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpLHRoaXMuYWRkKE9iamVjdChvLmEpKHRoaXMsbikpfX0sZX0oaS5hKX0sQ2NuRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJKYSIsZnVuY3Rpb24oKXtyZXR1cm4gWGV9KSxuLmQoZSwiS2EiLGZ1bmN0aW9uKCl7cmV0dXJuICRlfSksbi5kKGUsIkxhIixmdW5jdGlvbigpe3JldHVybiBKZX0pLG4uZChlLCJJYSIsZnVuY3Rpb24oKXtyZXR1cm4gcHR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwiVSIsZnVuY3Rpb24oKXtyZXR1cm4gSnR9KSxuLmQoZSwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gdGV9KSxuLmQoZSwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV9KSxuLmQoZSwieCIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaHR9KSxuLmQoZSwiQiIsZnVuY3Rpb24oKXtyZXR1cm4gbXR9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gY3R9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnR9KSxuLmQoZSwiVyIsZnVuY3Rpb24oKXtyZXR1cm4ga2V9KSxuLmQoZSwiTiIsZnVuY3Rpb24oKXtyZXR1cm4gcXR9KSxuLmQoZSwiQWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFl0fSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIEtlfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRufSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEZ0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGF0fSksbi5kKGUsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIGtufSksbi5kKGUsIkgiLGZ1bmN0aW9uKCl7cmV0dXJuIFNufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiUSIsZnVuY3Rpb24oKXtyZXR1cm4gWH0pLG4uZChlLCJPIixmdW5jdGlvbigpe3JldHVybiAkfSksbi5kKGUsIlQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiViIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJYIixmdW5jdGlvbigpe3JldHVybiBLfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiSiIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJ5IixmdW5jdGlvbigpe3JldHVybiBMdH0pLG4uZChlLCJEIixmdW5jdGlvbigpe3JldHVybiBjZX0pLG4uZChlLCJFIixmdW5jdGlvbigpe3JldHVybiBsZX0pLG4uZChlLCJGIixmdW5jdGlvbigpe3JldHVybiB1ZX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBfdH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBUdH0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBmZX0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBJdH0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBqdH0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBoZX0pLG4uZChlLCJDIixmdW5jdGlvbigpe3JldHVybiBwZX0pLG4uZChlLCJLIixmdW5jdGlvbigpe3JldHVybiB5ZX0pLG4uZChlLCJMIixmdW5jdGlvbigpe3JldHVybiBkZX0pLG4uZChlLCJNIixmdW5jdGlvbigpe3JldHVybiB2ZX0pLG4uZChlLCJQIixmdW5jdGlvbigpe3JldHVybiBiZX0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB3ZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBfZX0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBRZX0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBxZX0pLG4uZChlLCJJIixmdW5jdGlvbigpe3JldHVybiBqZX0pLG4uZChlLCJSIixmdW5jdGlvbigpe3JldHVybiBBZX0pLG4uZChlLCJaIixmdW5jdGlvbigpe3JldHVybiBaZX0pLG4uZChlLCJUYSIsZnVuY3Rpb24oKXtyZXR1cm4gSWV9KSxuLmQoZSwiRGEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSksbi5kKGUsIkJhIixmdW5jdGlvbigpe3JldHVybiBzdH0pLG4uZChlLCJDYSIsZnVuY3Rpb24oKXtyZXR1cm4gUHR9KSxuLmQoZSwiRWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHdufSksbi5kKGUsIkZhIixmdW5jdGlvbigpe3JldHVybiBPbn0pLG4uZChlLCJHYSIsZnVuY3Rpb24oKXtyZXR1cm4gb259KSxuLmQoZSwiUmEiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiV2EiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiaGIiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiVWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSksbi5kKGUsIlZhIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJIYSIsZnVuY3Rpb24oKXtyZXR1cm4gX3J9KSxuLmQoZSwiTWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEJyfSksbi5kKGUsIk5hIixmdW5jdGlvbigpe3JldHVybiBab30pLG4uZChlLCJPYSIsZnVuY3Rpb24oKXtyZXR1cm4gcW59KSxuLmQoZSwiUGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGNpfSksbi5kKGUsIlFhIixmdW5jdGlvbigpe3JldHVybiB3cn0pLG4uZChlLCJTYSIsZnVuY3Rpb24oKXtyZXR1cm4gdnJ9KSxuLmQoZSwiWGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGpyfSksbi5kKGUsIllhIixmdW5jdGlvbigpe3JldHVybiBBcn0pLG4uZChlLCJaYSIsZnVuY3Rpb24oKXtyZXR1cm4gSWl9KSxuLmQoZSwiYWIiLGZ1bmN0aW9uKCl7cmV0dXJuIFhyfSksbi5kKGUsImNiIixmdW5jdGlvbigpe3JldHVybiBmaX0pLG4uZChlLCJmYiIsZnVuY3Rpb24oKXtyZXR1cm4gaGl9KSxuLmQoZSwiYmIiLGZ1bmN0aW9uKCl7cmV0dXJuIFJpfSksbi5kKGUsImRiIixmdW5jdGlvbigpe3JldHVybiBEaX0pLG4uZChlLCJlYiIsZnVuY3Rpb24oKXtyZXR1cm4gTml9KSxuLmQoZSwiZ2IiLGZ1bmN0aW9uKCl7cmV0dXJuIGtpfSksbi5kKGUsImliIixmdW5jdGlvbigpe3JldHVybiBMaX0pLG4uZChlLCJqYiIsZnVuY3Rpb24oKXtyZXR1cm4gVW59KSxuLmQoZSwia2IiLGZ1bmN0aW9uKCl7cmV0dXJuIHppfSk7dmFyIHI9bigibXJTRyIpLGk9bigicHVnVCIpLG89bigiSzlJYSIpLGE9bigiNmJsRiIpLHM9bigicDBpYiIpLGw9bigiUzFuWCIpO2Z1bmN0aW9uIHUodCl7cmV0dXJue3Byb3ZpZGVkSW46dC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6dC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fZGVzYz10LHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLm5nSW5qZWN0YWJsZURlZj12b2lkIDAhPT1lP3Uoe3Byb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KTp2b2lkIDB9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkluamVjdGlvblRva2VuICIrdGhpcy5fZGVzY30sdH0oKSxmPSJfX3BhcmFtZXRlcnNfXyI7ZnVuY3Rpb24gaCh0LGUsbil7dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO2lmKHQpe3ZhciBpPXQuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKGUpKTtmb3IodmFyIG8gaW4gaSl0aGlzW29dPWlbb119fX0oZSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gaS5hcHBseSh0aGlzLHQpLHRoaXM7dmFyIG4sYT1uZXcoKG49bykuYmluZC5hcHBseShuLE9iamVjdChyLmQpKFt2b2lkIDBdLHQpKSk7cmV0dXJuIHMuYW5ub3RhdGlvbj1hLHM7ZnVuY3Rpb24gcyh0LGUsbil7Zm9yKHZhciByPXQuaGFzT3duUHJvcGVydHkoZik/dFtmXTpPYmplY3QuZGVmaW5lUHJvcGVydHkodCxmLHt2YWx1ZTpbXX0pW2ZdO3IubGVuZ3RoPD1uOylyLnB1c2gobnVsbCk7cmV0dXJuKHJbbl09cltuXXx8W10pLnB1c2goYSksdH19cmV0dXJuIG4mJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxvLmFubm90YXRpb25DbHM9byxvfXZhciBwPW5ldyBjKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIik7RnVuY3Rpb247dmFyIGQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxtPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmLHk9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJmdsb2JhbCxnPWR8fHl8fG0sdj1Qcm9taXNlLnJlc29sdmUoMCksYj1udWxsO2Z1bmN0aW9uIF8oKXtpZighYil7dmFyIHQ9Zy5TeW1ib2w7aWYodCYmdC5pdGVyYXRvciliPXQuaXRlcmF0b3I7ZWxzZSBmb3IodmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTWFwLnByb3RvdHlwZSksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcj1lW25dOyJlbnRyaWVzIiE9PXImJiJzaXplIiE9PXImJk1hcC5wcm90b3R5cGVbcl09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJihiPXIpfX1yZXR1cm4gYn1mdW5jdGlvbiB3KHQpeyJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZT92LnRoZW4oZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KG51bGwsbnVsbCl9KTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIix0KX1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIHQ9PT1lfHwibnVtYmVyIj09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgZSYmaXNOYU4odCkmJmlzTmFOKGUpfWZ1bmN0aW9uIEModCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHQgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iWyIrdC5tYXAoQykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09dClyZXR1cm4iIit0O2lmKHQub3ZlcnJpZGRlbk5hbWUpcmV0dXJuIiIrdC5vdmVycmlkZGVuTmFtZTtpZih0Lm5hbWUpcmV0dXJuIiIrdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKTtpZihudWxsPT1lKXJldHVybiIiK2U7dmFyIG49ZS5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09bj9lOmUuc3Vic3RyaW5nKDAsbil9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdC5fX2ZvcndhcmRfcmVmX189RSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEModGhpcygpKX0sdH1mdW5jdGlvbiBPKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJfX2ZvcndhcmRfcmVmX18iKSYmdC5fX2ZvcndhcmRfcmVmX189PT1FP3QoKTp0fXZhciBTPWgoIkluamVjdCIsZnVuY3Rpb24odCl7cmV0dXJue3Rva2VuOnR9fSksaz1oKCJPcHRpb25hbCIpLFQ9aCgiU2VsZiIpLFA9aCgiU2tpcFNlbGYiKSxBPSJfX3NvdXJjZSIsaj1uZXcgT2JqZWN0LEk9bmV3IGMoIklOSkVDVE9SIiksTT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPWopLGU9PT1qKXRocm93IG5ldyBFcnJvcigiTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAiK0ModCkrIiEiKTtyZXR1cm4gZX0sdH0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9uZXcgUSh0LGUpOm5ldyBRKHQucHJvdmlkZXJzLHQucGFyZW50LHQubmFtZXx8bnVsbCl9LHQuVEhST1dfSUZfTk9UX0ZPVU5EPWosdC5OVUxMPW5ldyBNLHQubmdJbmplY3RhYmxlRGVmPXUoe3Byb3ZpZGVkSW46ImFueSIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBLKEkpfX0pLHR9KCksUj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sRD1bXSxGPVIsTD1mdW5jdGlvbigpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpfSxWPXt9LEI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpaWYodFtlXT09PVYpcmV0dXJuIGU7dGhyb3cgRXJyb3IoIiFwcm9wIil9KHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpWfSksej1OLk5VTEwsVT0vXG4vZ20sSD0iXHUwMjc1IixRPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09ZSYmKGU9eiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1uO3ZhciByPXRoaXMuX3JlY29yZHM9bmV3IE1hcDtyLnNldChOLHt0b2tlbjpOLGZuOlIsZGVwczpELHZhbHVlOnRoaXMsdXNlTmV3OiExfSksci5zZXQoSSx7dG9rZW46SSxmbjpSLGRlcHM6RCx2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLGZ1bmN0aW9uIHQoZSxuKXtpZihuKWlmKChuPU8obikpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0KGUsbltyXSk7ZWxzZXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil0aHJvdyBZKCJGdW5jdGlvbi9DbGFzcyBub3Qgc3VwcG9ydGVkIixuKTtpZighbnx8Im9iamVjdCIhPXR5cGVvZiBufHwhbi5wcm92aWRlKXRocm93IFkoIlVuZXhwZWN0ZWQgcHJvdmlkZXIiLG4pO3ZhciBpPU8obi5wcm92aWRlKSxvPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPUQsbj10LmRlcHM7aWYobiYmbi5sZW5ndGgpe2U9W107Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPTY7aWYoKGw9TyhuW3JdKSlpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgbz0wLGE9bDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtzIGluc3RhbmNlb2Yga3x8cz09az9pfD0xOnMgaW5zdGFuY2VvZiBQfHxzPT1QP2kmPS0zOnMgaW5zdGFuY2VvZiBUfHxzPT1UP2kmPS01Omw9cyBpbnN0YW5jZW9mIFM/cy50b2tlbjpPKHMpfWUucHVzaCh7dG9rZW46bCxvcHRpb25zOml9KX19ZWxzZSBpZih0LnVzZUV4aXN0aW5nKXt2YXIgbDtlPVt7dG9rZW46bD1PKHQudXNlRXhpc3RpbmcpLG9wdGlvbnM6Nn1dfWVsc2UgaWYoIShufHxCIGluIHQpKXRocm93IFkoIidkZXBzJyByZXF1aXJlZCIsdCk7cmV0dXJuIGV9KHQpLG49UixyPUQsaT0hMSxvPU8odC5wcm92aWRlKTtpZihCIGluIHQpcj10LnVzZVZhbHVlO2Vsc2UgaWYodC51c2VGYWN0b3J5KW49dC51c2VGYWN0b3J5O2Vsc2UgaWYodC51c2VFeGlzdGluZyk7ZWxzZSBpZih0LnVzZUNsYXNzKWk9ITAsbj1PKHQudXNlQ2xhc3MpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgWSgiU3RhdGljUHJvdmlkZXIgZG9lcyBub3QgaGF2ZSBbdXNlVmFsdWV8dXNlRmFjdG9yeXx1c2VFeGlzdGluZ3x1c2VDbGFzc10gb3IgW3Byb3ZpZGVdIGlzIG5vdCBuZXdhYmxlIix0KTtpPSEwLG49b31yZXR1cm57ZGVwczplLGZuOm4sdXNlTmV3OmksdmFsdWU6cn19KG4pO2lmKCEwPT09bi5tdWx0aSl7dmFyIGE9ZS5nZXQoaSk7aWYoYSl7aWYoYS5mbiE9PUwpdGhyb3cgcShpKX1lbHNlIGUuc2V0KGksYT17dG9rZW46bi5wcm92aWRlLGRlcHM6W10sdXNlTmV3OiExLGZuOkwsdmFsdWU6RH0pO2EuZGVwcy5wdXNoKHt0b2tlbjppPW4sb3B0aW9uczo2fSl9dmFyIHM9ZS5nZXQoaSk7aWYocyYmcy5mbj09TCl0aHJvdyBxKGkpO2Uuc2V0KGksbyl9fShyLHQpfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPTApO3ZhciBpPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RyeXtyZXR1cm4gZnVuY3Rpb24gdChlLG4saSxvLGEscyl7dHJ5e3JldHVybiBmdW5jdGlvbihlLG4saSxvLGEscyl7dmFyIGwsdTtpZighbnx8NCZzKTImc3x8KGw9by5nZXQoZSxhLDApKTtlbHNle2lmKChsPW4udmFsdWUpPT1GKXRocm93IEVycm9yKEgrIkNpcmN1bGFyIGRlcGVuZGVuY3kiKTtpZihsPT09RCl7bi52YWx1ZT1GO3ZhciBjPW4udXNlTmV3LGY9bi5mbixoPW4uZGVwcyxwPUQ7aWYoaC5sZW5ndGgpe3A9W107Zm9yKHZhciBkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBtPWhbZF0seT1tLm9wdGlvbnMsZz0yJnk/aS5nZXQobS50b2tlbik6dm9pZCAwO3AucHVzaCh0KG0udG9rZW4sZyxpLGd8fDQmeT9vOnosMSZ5P251bGw6Ti5USFJPV19JRl9OT1RfRk9VTkQsMCkpfX1uLnZhbHVlPWw9Yz9uZXcoKHU9ZikuYmluZC5hcHBseSh1LE9iamVjdChyLmQpKFt2b2lkIDBdLHApKSk6Zi5hcHBseSh2b2lkIDAscCl9fXJldHVybiBsfShlLG4saSxvLGEscyl9Y2F0Y2godCl7dGhyb3cgdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodCkpLCh0Lm5nVGVtcFRva2VuUGF0aD10Lm5nVGVtcFRva2VuUGF0aHx8W10pLnVuc2hpZnQoZSksbiYmbi52YWx1ZT09RiYmKG4udmFsdWU9RCksdH19KHQsaSx0aGlzLl9yZWNvcmRzLHRoaXMucGFyZW50LGUsbil9Y2F0Y2goZSl7dmFyIG89ZS5uZ1RlbXBUb2tlblBhdGg7dGhyb3cgdFtBXSYmby51bnNoaWZ0KHRbQV0pLGUubWVzc2FnZT1HKCJcbiIrZS5tZXNzYWdlLG8sdGhpcy5zb3VyY2UpLGUubmdUb2tlblBhdGg9byxlLm5nVGVtcFRva2VuUGF0aD1udWxsLGV9fSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9yZWNvcmRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wdXNoKEMobikpfSksIlN0YXRpY0luamVjdG9yWyIrdC5qb2luKCIsICIpKyJdIn0sdH0oKTtmdW5jdGlvbiBxKHQpe3JldHVybiBZKCJDYW5ub3QgbWl4IG11bHRpIHByb3ZpZGVycyBhbmQgcmVndWxhciBwcm92aWRlcnMiLHQpfWZ1bmN0aW9uIEcodCxlLG4pe3ZvaWQgMD09PW4mJihuPW51bGwpLHQ9dCYmIlxuIj09PXQuY2hhckF0KDApJiZ0LmNoYXJBdCgxKT09SD90LnN1YnN0cigyKTp0O3ZhciByPUMoZSk7aWYoZSBpbnN0YW5jZW9mIEFycmF5KXI9ZS5tYXAoQykuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgaT1bXTtmb3IodmFyIG8gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG8pKXt2YXIgYT1lW29dO2kucHVzaChvKyI6IisoInN0cmluZyI9PXR5cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOkMoYSkpKX1yPSJ7IitpLmpvaW4oIiwgIikrIn0ifXJldHVybiJTdGF0aWNJbmplY3RvckVycm9yIisobj8iKCIrbisiKSI6IiIpKyJbIityKyJdOiAiK3QucmVwbGFjZShVLCJcbiAgIil9ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBuZXcgRXJyb3IoRyh0LGUpKX12YXIgVz12b2lkIDA7ZnVuY3Rpb24gWih0KXt2YXIgZT1XO3JldHVybiBXPXQsZX1mdW5jdGlvbiBLKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09Vyl0aHJvdyBuZXcgRXJyb3IoImluamVjdCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gaW5qZWN0aW9uIGNvbnRleHQiKTtpZihudWxsPT09Vyl7dmFyIG49dC5uZ0luamVjdGFibGVEZWY7aWYobiYmInJvb3QiPT1uLnByb3ZpZGVkSW4pcmV0dXJuIHZvaWQgMD09PW4udmFsdWU/bi52YWx1ZT1uLmZhY3RvcnkoKTpuLnZhbHVlO3Rocm93IG5ldyBFcnJvcigiSW5qZWN0b3I6IE5PVF9GT1VORCBbIitDKHQpKyJdIil9cmV0dXJuIFcuZ2V0KHQsOCZlP251bGw6dm9pZCAwLGUpfVN0cmluZzt2YXIgWD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsdFt0Lk5hdGl2ZT0xXT0iTmF0aXZlIix0W3QuTm9uZT0yXT0iTm9uZSIsdH0oe30pLCQ9ZnVuY3Rpb24odCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfSxKPW5ldyAkKCI2LjAuNSIpLHR0PSJuZ0RlYnVnQ29udGV4dCIsZXQ9Im5nT3JpZ2luYWxFcnJvciIsbnQ9Im5nRXJyb3JMb2dnZXIiO2Z1bmN0aW9uIHJ0KHQpe3JldHVybiB0W3R0XX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFtldF19ZnVuY3Rpb24gb3QodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LE9iamVjdChyLmQpKGUpKX12YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY29uc29sZT1jb25zb2xlfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KSxuPXRoaXMuX2ZpbmRDb250ZXh0KHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHRbbnRdfHxvdH0odCk7cih0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmcih0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmcih0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX0sdC5wcm90b3R5cGUuX2ZpbmRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3J0KHQpP3J0KHQpOnRoaXMuX2ZpbmRDb250ZXh0KGl0KHQpKTpudWxsfSx0LnByb3RvdHlwZS5fZmluZE9yaWdpbmFsRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWl0KHQpO2UmJml0KGUpOyllPWl0KGUpO3JldHVybiBlfSx0fSgpLHN0PW5ldyBjKCJUaGUgcHJlc2VuY2Ugb2YgdGhpcyB0b2tlbiBtYXJrcyBhbiBpbmplY3RvciBhcyBiZWluZyB0aGUgcm9vdCBpbmplY3Rvci4iKTtmdW5jdGlvbiBsdCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gdXQodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIGN0PW5ldyBjKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpLGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuYXBwSW5pdHM9dCx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuZG9uZT0hMSx0aGlzLmRvbmVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5yZXNvbHZlPXQsZS5yZWplY3Q9bn0pfXJldHVybiB0LnByb3RvdHlwZS5ydW5Jbml0aWFsaXplcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmluaXRpYWxpemVkKXt2YXIgZT1bXSxuPWZ1bmN0aW9uKCl7dC5kb25lPSEwLHQucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcih2YXIgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXt2YXIgaT10aGlzLmFwcEluaXRzW3JdKCk7bHQoaSkmJmUucHVzaChpKX1Qcm9taXNlLmFsbChlKS50aGVuKGZ1bmN0aW9uKCl7bigpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5yZWplY3QoZSl9KSwwPT09ZS5sZW5ndGgmJm4oKSx0aGlzLmluaXRpYWxpemVkPSEwfX0sdH0oKSxodD1uZXcgYygiQXBwSWQiKTtmdW5jdGlvbiBwdCgpe3JldHVybiIiK2R0KCkrZHQoKStkdCgpfWZ1bmN0aW9uIGR0KCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoOTcrTWF0aC5mbG9vcigyNSpNYXRoLnJhbmRvbSgpKSl9dmFyIG10PW5ldyBjKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLHl0PW5ldyBjKCJQbGF0Zm9ybSBJRCIpLGd0PW5ldyBjKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLHZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKHQpfSx0LnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2Fybih0KX0sdH0oKTtmdW5jdGlvbiBidCgpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSBjb21waWxlciBpcyBub3QgbG9hZGVkIil9dmFyIF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZVN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgYnQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGVGb3I9ZnVuY3Rpb24odCl7fSx0fSgpLHd0PWZ1bmN0aW9uKCl7fSx4dD1mdW5jdGlvbigpe307ZnVuY3Rpb24gQ3QodCl7dmFyIGU9RXJyb3IoIk5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAiK0ModCkrIi4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz8iKTtyZXR1cm4gZVtTdF09dCxlfXZhciBFdCxPdCxTdD0ibmdDb21wb25lbnQiLGt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dGhyb3cgQ3QodCl9LHR9KCksVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5VTEw9bmV3IGt0LHR9KCksUHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uZ01vZHVsZT1uLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO3RoaXMuX2ZhY3Rvcmllcy5zZXQoaS5jb21wb25lbnRUeXBlLGkpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtpZighZSYmdGhpcy5fcGFyZW50JiYoZT10aGlzLl9wYXJlbnQucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCkpLCFlKXRocm93IEN0KHQpO3JldHVybiBuZXcgQXQoZSx0aGlzLl9uZ01vZHVsZSl9LHR9KCksQXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5mYWN0b3J5PWUsci5uZ01vZHVsZT1uLHIuc2VsZWN0b3I9ZS5zZWxlY3RvcixyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlLHIubmdDb250ZW50U2VsZWN0b3JzPWUubmdDb250ZW50U2VsZWN0b3JzLHIuaW5wdXRzPWUuaW5wdXRzLHIub3V0cHV0cz1lLm91dHB1dHMscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGUodCxlLG4scnx8dGhpcy5uZ01vZHVsZSl9LGV9KHh0KSxqdD1mdW5jdGlvbigpe30sSXQ9ZnVuY3Rpb24oKXt9LE10PWZ1bmN0aW9uKCl7dmFyIHQ9Zy53dGY7cmV0dXJuISghdHx8IShFdD10LnRyYWNlKXx8KE90PUV0LmV2ZW50cywwKSl9KCk7ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gbnVsbH12YXIgUnQ9TXQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCksT3QuY3JlYXRlU2NvcGUodCxlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gTnR9LER0PU10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEV0LmxlYXZlU2NvcGUodCxlKSxlfTpmdW5jdGlvbih0LGUpe3JldHVybiBlfSxGdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX19pc0FzeW5jPWUsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSxuLHIpe3ZhciBvLGE9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZSYmIm9iamVjdCI9PXR5cGVvZiBlPyhvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0KHQpfSl9OmZ1bmN0aW9uKHQpe2UubmV4dCh0KX0sZS5lcnJvciYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmVycm9yKHQpfSl9OmZ1bmN0aW9uKHQpe2UuZXJyb3IodCl9KSxlLmNvbXBsZXRlJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9OmZ1bmN0aW9uKCl7ZS5jb21wbGV0ZSgpfSkpOihvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX0pfTpmdW5jdGlvbih0KXtlKHQpfSxuJiYoYT10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4odCl9KX06ZnVuY3Rpb24odCl7bih0KX0pLHImJihzPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByKCl9KX06ZnVuY3Rpb24oKXtyKCl9KSk7dmFyIGw9dC5wcm90b3R5cGUuc3Vic2NyaWJlLmNhbGwodGhpcyxvLGEscyk7cmV0dXJuIGUgaW5zdGFuY2VvZiBpLmEmJmUuYWRkKGwpLGx9LGV9KG8uYSksTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlLG49dC5lbmFibGVMb25nU3RhY2tUcmFjZSxyPXZvaWQgMCE9PW4mJm47aWYodGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGdCghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBGdCghMSksdGhpcy5vblN0YWJsZT1uZXcgRnQoITEpLHRoaXMub25FcnJvcj1uZXcgRnQoITEpLCJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZSl0aHJvdyBuZXcgRXJyb3IoIkluIHRoaXMgY29uZmlndXJhdGlvbiBBbmd1bGFyIHJlcXVpcmVzIFpvbmUuanMiKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCksdGhpcy5fbmVzdGluZz0wLHRoaXMuX291dGVyPXRoaXMuX2lubmVyPVpvbmUuY3VycmVudCxab25lLnd0ZlpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLnd0ZlpvbmVTcGVjKSksWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxyJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLChlPXRoaXMpLl9pbm5lcj1lLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxuLHIsaSxvLGEpe3RyeXtyZXR1cm4gVXQoZSksdC5pbnZva2VUYXNrKHIsaSxvLGEpfWZpbmFsbHl7SHQoZSl9fSxvbkludm9rZTpmdW5jdGlvbih0LG4scixpLG8sYSxzKXt0cnl7cmV0dXJuIFV0KGUpLHQuaW52b2tlKHIsaSxvLGEscyl9ZmluYWxseXtIdChlKX19LG9uSGFzVGFzazpmdW5jdGlvbih0LG4scixpKXt0Lmhhc1Rhc2socixpKSxuPT09ciYmKCJtaWNyb1Rhc2siPT1pLmNoYW5nZT8oZS5oYXNQZW5kaW5nTWljcm90YXNrcz1pLm1pY3JvVGFzayx6dChlKSk6Im1hY3JvVGFzayI9PWkuY2hhbmdlJiYoZS5oYXNQZW5kaW5nTWFjcm90YXNrcz1pLm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiB0LmhhbmRsZUVycm9yKHIsaSksZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLm9uRXJyb3IuZW1pdChpKX0pLCExfX0pfXJldHVybiB0LmlzSW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe3JldHVybiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfSx0LmFzc2VydEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZighdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5vdCEiKX0sdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYodC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyEiKX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9pbm5lcixvPWkuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK3IsdCxCdCxWdCxWdCk7dHJ5e3JldHVybiBpLnJ1blRhc2sobyxlLG4pfWZpbmFsbHl7aS5jYW5jZWxUYXNrKG8pfX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQodCxlLG4pfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfSx0fSgpO2Z1bmN0aW9uIFZ0KCl7fXZhciBCdD17fTtmdW5jdGlvbiB6dCh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Lm9uU3RhYmxlLmVtaXQobnVsbCl9KX1maW5hbGx5e3QuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBVdCh0KXt0Ll9uZXN0aW5nKyssdC5pc1N0YWJsZSYmKHQuaXNTdGFibGU9ITEsdC5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIEh0KHQpe3QuX25lc3RpbmctLSx6dCh0KX12YXIgUXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGdCx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEZ0LHRoaXMub25TdGFibGU9bmV3IEZ0LHRoaXMub25FcnJvcj1uZXcgRnR9cmV0dXJuIHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdH0oKSxxdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksdC5ydW4oZnVuY3Rpb24oKXtlLnRhc2tUcmFja2luZ1pvbmU9Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9cmV0dXJuIHQucHJvdG90eXBlLl93YXRjaEFuZ3VsYXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe3QuX2RpZFdvcms9ITAsdC5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXtMdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe3QuX2lzWm9uZVN0YWJsZT0hMCx0Ll9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfSx0LnByb3RvdHlwZS5pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuaXNTdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfSx0LnByb3RvdHlwZS5fcnVuQ2FsbGJhY2tzSWZSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5pc1N0YWJsZSgpKXcoZnVuY3Rpb24oKXtmb3IoOzAhPT10Ll9jYWxsYmFja3MubGVuZ3RoOyl7dmFyIGU9dC5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChlLnRpbWVvdXRJZCksZS5kb25lQ2IodC5fZGlkV29yayl9dC5fZGlkV29yaz0hMX0pO2Vsc2V7dmFyIGU9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC51cGRhdGVDYnx8IXQudXBkYXRlQ2IoZSl8fChjbGVhclRpbWVvdXQodC50aW1lb3V0SWQpLCExKX0pLHRoaXMuX2RpZFdvcms9ITB9fSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nVGFza3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQuc291cmNlLGlzUGVyaW9kaWM6dC5kYXRhLmlzUGVyaW9kaWMsZGVsYXk6dC5kYXRhLmRlbGF5LGNyZWF0aW9uTG9jYXRpb246dC5jcmVhdGlvbkxvY2F0aW9uLHhocjp0LmRhdGEudGFyZ2V0fX0pOltdfSx0LnByb3RvdHlwZS5hZGRDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPS0xO2UmJmU+MCYmKGk9c2V0VGltZW91dChmdW5jdGlvbigpe3IuX2NhbGxiYWNrcz1yLl9jYWxsYmFja3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbWVvdXRJZCE9PWl9KSx0KHIuX2RpZFdvcmssci5nZXRQZW5kaW5nVGFza3MoKSl9LGUpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOnQsdGltZW91dElkOmksdXBkYXRlQ2I6bn0pfSx0LnByb3RvdHlwZS53aGVuU3RhYmxlPWZ1bmN0aW9uKHQsZSxuKXtpZihuJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9kaXN0L3Rhc2stdHJhY2tpbmcuanMiIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKHQsZSxuKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9LHQucHJvdG90eXBlLmdldFBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5maW5kUHJvdmlkZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX0sdH0oKSxHdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcCxadC5hZGRUb1dpbmRvdyh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQodCxlKX0sdC5wcm90b3R5cGUudW5yZWdpc3RlckFwcGxpY2F0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUodCl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0VGVzdGFiaWxpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmdldEFsbFRlc3RhYmlsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfSx0LnByb3RvdHlwZS5nZXRBbGxSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX0sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSEwKSxadC5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyx0LGUpfSx0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHR9KCk7ZnVuY3Rpb24gWXQodCl7WnQ9dH12YXIgV3QsWnQ9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYWRkVG9XaW5kb3c9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsfSx0fSgpKSxLdD0hMCxYdD0hMSwkdD1uZXcgYygiQWxsb3dNdWx0aXBsZVRva2VuIik7ZnVuY3Rpb24gSnQoKXtpZihYdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbmFibGUgcHJvZCBtb2RlIGFmdGVyIHBsYXRmb3JtIHNldHVwLiIpO0t0PSExfWZ1bmN0aW9uIHRlKCl7cmV0dXJuIFh0PSEwLEt0fXZhciBlZT1mdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMudG9rZW49ZX07ZnVuY3Rpb24gbmUodCxlLG4pe3ZvaWQgMD09PW4mJihuPVtdKTt2YXIgcj0iUGxhdGZvcm06ICIrZSxpPW5ldyBjKHIpO3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG89cmUoKTtpZighb3x8by5pbmplY3Rvci5nZXQoJHQsITEpKWlmKHQpdChuLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0pKTtlbHNle3ZhciBhPW4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSk7IWZ1bmN0aW9uKHQpe2lmKFd0JiYhV3QuZGVzdHJveWVkJiYhV3QuaW5qZWN0b3IuZ2V0KCR0LCExKSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwbGF0Zm9ybS4gRGVzdHJveSB0aGUgcHJldmlvdXMgb25lIHRvIGNyZWF0ZSBhIG5ldyBvbmUuIik7V3Q9dC5nZXQoaWUpO3ZhciBlPXQuZ2V0KG10LG51bGwpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9KE4uY3JlYXRlKHtwcm92aWRlcnM6YSxuYW1lOnJ9KSl9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXJlKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0oaSl9fWZ1bmN0aW9uIHJlKCl7cmV0dXJuIFd0JiYhV3QuZGVzdHJveWVkP1d0Om51bGx9dmFyIGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pbmplY3Rvcj10LHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT0ibm9vcCI9PT0obj1lP2Uubmdab25lOnZvaWQgMCk/bmV3IFF0Oigiem9uZS5qcyI9PT1uP3ZvaWQgMDpuKXx8bmV3IEx0KHtlbmFibGVMb25nU3RhY2tUcmFjZTp0ZSgpfSksbz1be3Byb3ZpZGU6THQsdXNlVmFsdWU6aX1dO3JldHVybiBpLnJ1bihmdW5jdGlvbigpe3ZhciBlPU4uY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6ci5pbmplY3RvcixuYW1lOnQubW9kdWxlVHlwZS5uYW1lfSksbj10LmNyZWF0ZShlKSxhPW4uaW5qZWN0b3IuZ2V0KGF0LG51bGwpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTm8gRXJyb3JIYW5kbGVyLiBJcyBwbGF0Zm9ybSBtb2R1bGUgKEJyb3dzZXJNb2R1bGUpIGluY2x1ZGVkPyIpO3JldHVybiBuLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBzZShyLl9tb2R1bGVzLG4pfSksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBpLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe2EuaGFuZGxlRXJyb3IodCl9fSl9KSxmdW5jdGlvbih0LGUsaSl7dHJ5e3ZhciBvPSgoYT1uLmluamVjdG9yLmdldChmdCkpLnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3JldHVybiByLl9tb2R1bGVEb0Jvb3RzdHJhcChuKSxufSkpO3JldHVybiBsdChvKT9vLmNhdGNoKGZ1bmN0aW9uKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59KTpvfWNhdGNoKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59dmFyIGF9KGEsaSl9KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5pbmplY3Rvci5nZXQod3QpLGk9b2Uoe30sZSk7cmV0dXJuIHIuY3JlYXRlQ29tcGlsZXIoW2ldKS5jb21waWxlTW9kdWxlQXN5bmModCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gbi5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsaSl9KX0sdC5wcm90b3R5cGUuX21vZHVsZURvQm9vdHN0cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5qZWN0b3IuZ2V0KGFlKTtpZih0Ll9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKXQuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5ib290c3RyYXAodCl9KTtlbHNle2lmKCF0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IEVycm9yKCJUaGUgbW9kdWxlICIrQyh0Lmluc3RhbmNlLmNvbnN0cnVjdG9yKSsnIHdhcyBib290c3RyYXBwZWQsIGJ1dCBpdCBkb2VzIG5vdCBkZWNsYXJlICJATmdNb2R1bGUuYm9vdHN0cmFwIiBjb21wb25lbnRzIG5vciBhICJuZ0RvQm9vdHN0cmFwIiBtZXRob2QuIFBsZWFzZSBkZWZpbmUgb25lIG9mIHRoZXNlLicpO3QuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChlKX10aGlzLl9tb2R1bGVzLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwbGF0Zm9ybSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCEiKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2Rlc3Ryb3llZD0hMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gb2UodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZShvZSx0KTpPYmplY3Qoci5hKSh7fSx0LGUpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3ZhciB1PXRoaXM7dGhpcy5fem9uZT10LHRoaXMuX2NvbnNvbGU9ZSx0aGlzLl9pbmplY3Rvcj1uLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9aSx0aGlzLl9pbml0U3RhdHVzPW8sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9dGUoKSx0aGlzLl96b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7dS5fem9uZS5ydW4oZnVuY3Rpb24oKXt1LnRpY2soKX0pfX0pO3ZhciBjPW5ldyBhLmEoZnVuY3Rpb24odCl7dS5fc3RhYmxlPXUuX3pvbmUuaXNTdGFibGUmJiF1Ll96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdS5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyx1Ll96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KHUuX3N0YWJsZSksdC5jb21wbGV0ZSgpfSl9KSxmPW5ldyBhLmEoZnVuY3Rpb24odCl7dmFyIGU7dS5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2U9dS5fem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtMdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe3UuX3N0YWJsZXx8dS5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc3x8dS5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrc3x8KHUuX3N0YWJsZT0hMCx0Lm5leHQoITApKX0pfSl9KTt2YXIgbj11Ll96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7THQuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLHUuX3N0YWJsZSYmKHUuX3N0YWJsZT0hMSx1Ll96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KCExKX0pKX0pO3JldHVybiBmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSk7dGhpcy5pc1N0YWJsZT1PYmplY3Qocy5hKShjLGYucGlwZShPYmplY3QobC5hKSgpKSl9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcztpZighdGhpcy5faW5pdFN0YXR1cy5kb25lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGJvb3RzdHJhcCBhcyB0aGVyZSBhcmUgc3RpbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemVycyBydW5uaW5nLiBCb290c3RyYXAgY29tcG9uZW50cyBpbiB0aGUgYG5nRG9Cb290c3RyYXBgIG1ldGhvZCBvZiB0aGUgcm9vdCBtb2R1bGUuIik7bj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKG4uY29tcG9uZW50VHlwZSk7dmFyIGk9biBpbnN0YW5jZW9mIEF0P251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KGp0KSxvPW4uY3JlYXRlKE4uTlVMTCxbXSxlfHxuLnNlbGVjdG9yLGkpO28ub25EZXN0cm95KGZ1bmN0aW9uKCl7ci5fdW5sb2FkQ29tcG9uZW50KG8pfSk7dmFyIGE9by5pbmplY3Rvci5nZXQocXQsbnVsbCk7cmV0dXJuIGEmJm8uaW5qZWN0b3IuZ2V0KEd0KS5yZWdpc3RlckFwcGxpY2F0aW9uKG8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCxhKSx0aGlzLl9sb2FkQ29tcG9uZW50KG8pLHRlKCkmJnRoaXMuX2NvbnNvbGUubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gdGhlIGRldmVsb3BtZW50IG1vZGUuIENhbGwgZW5hYmxlUHJvZE1vZGUoKSB0byBlbmFibGUgdGhlIHByb2R1Y3Rpb24gbW9kZS4iKSxvfSx0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgRXJyb3IoIkFwcGxpY2F0aW9uUmVmLnRpY2sgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5Iik7dmFyIG49dC5fdGlja1Njb3BlKCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwLHRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGV0ZWN0Q2hhbmdlcygpfSksdGhpcy5fZW5mb3JjZU5vTmV3Q2hhbmdlcyYmdGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja05vQ2hhbmdlcygpfSl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKHQpfSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMSxEdChuKX19LHQucHJvdG90eXBlLmF0dGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDtzZSh0aGlzLl92aWV3cyxlKSxlLmRldGFjaEZyb21BcHBSZWYoKX0sdC5wcm90b3R5cGUuX2xvYWRDb21wb25lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldChndCxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfSx0LnByb3RvdHlwZS5fdW5sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSxzZSh0aGlzLmNvbXBvbmVudHMsdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5fdGlja1Njb3BlPVJ0KCJBcHBsaWNhdGlvblJlZiN0aWNrKCkiKSx0fSgpO2Z1bmN0aW9uIHNlKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIGxlPWZ1bmN0aW9uKCl7fSx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkltcG9ydGFudD0xXT0iSW1wb3J0YW50Iix0W3QuRGFzaENhc2U9Ml09IkRhc2hDYXNlIix0fSh7fSksY2U9ZnVuY3Rpb24oKXt9LGZlPWZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRWxlbWVudD10fSxoZT1mdW5jdGlvbigpe30scGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9yZXN1bHRzPVtdLHRoaXMuY2hhbmdlcz1uZXcgRnQsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdC5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcCh0KX0sdC5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcih0KX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfSx0LnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UodCxlKX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzLmZvckVhY2godCl9LHQucHJvdG90eXBlLnNvbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX0sdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9LHQucHJvdG90eXBlW18oKV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tfKCldKCl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVzdWx0cz1mdW5jdGlvbiB0KGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLG4pe3ZhciByPUFycmF5LmlzQXJyYXkobik/dChuKTpuO3JldHVybiBlLmNvbmNhdChyKX0sW10pfSh0KSx0aGlzLmRpcnR5PSExLHRoaXMubGVuZ3RoPXRoaXMuX3Jlc3VsdHMubGVuZ3RoLHRoaXMubGFzdD10aGlzLl9yZXN1bHRzW3RoaXMubGVuZ3RoLTFdLHRoaXMuZmlyc3Q9dGhpcy5fcmVzdWx0c1swXX0sdC5wcm90b3R5cGUubm90aWZ5T25DaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VzLmVtaXQodGhpcyl9LHQucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfSx0fSgpLGRlPWZ1bmN0aW9uKCl7fSxtZT17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifSx5ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jb21waWxlcj10LHRoaXMuX2NvbmZpZz1lfHxtZX1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29tcGlsZXIgaW5zdGFuY2VvZiBfdD90aGlzLmxvYWRGYWN0b3J5KHQpOnRoaXMubG9hZEFuZENvbXBpbGUodCl9LHQucHJvdG90eXBlLmxvYWRBbmRDb21waWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1PYmplY3Qoci5jKSh0LnNwbGl0KCIjIiksMiksbz1pWzBdLGE9aVsxXTtyZXR1cm4gdm9pZCAwPT09YSYmKGE9ImRlZmF1bHQiKSxuKCJjcm5kIikobykudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdFthXX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsbyxhKX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KX0pfSx0LnByb3RvdHlwZS5sb2FkRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qoci5jKSh0LnNwbGl0KCIjIiksMiksaT1lWzBdLG89ZVsxXSxhPSJOZ0ZhY3RvcnkiO3JldHVybiB2b2lkIDA9PT1vJiYobz0iZGVmYXVsdCIsYT0iIiksbigiY3JuZCIpKHRoaXMuX2NvbmZpZy5mYWN0b3J5UGF0aFByZWZpeCtpK3RoaXMuX2NvbmZpZy5mYWN0b3J5UGF0aFN1ZmZpeCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdFtvK2FdfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZ2UodCxpLG8pfSl9LHR9KCk7ZnVuY3Rpb24gZ2UodCxlLG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgJyIrbisiJyBpbiAnIitlKyInIik7cmV0dXJuIHR9dmFyIHZlPWZ1bmN0aW9uKCl7fSxiZT1mdW5jdGlvbigpe30sX2U9ZnVuY3Rpb24oKXt9LHdlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KF9lKSkseGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9kZWJ1Z0NvbnRleHQ9bix0aGlzLm5hdGl2ZU5vZGU9dCxlJiZlIGluc3RhbmNlb2YgQ2U/ZS5hZGRDaGlsZCh0aGlzKTp0aGlzLnBhcmVudD1udWxsLHRoaXMubGlzdGVuZXJzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLENlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5wcm9wZXJ0aWVzPXt9LGkuYXR0cmlidXRlcz17fSxpLmNsYXNzZXM9e30saS5zdHlsZXM9e30saS5jaGlsZE5vZGVzPVtdLGkubmF0aXZlRWxlbWVudD1lLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24odCl7dCYmKHRoaXMuY2hpbGROb2Rlcy5wdXNoKHQpLHQucGFyZW50PXRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoZSwxKSl9LGUucHJvdG90eXBlLmluc2VydENoaWxkcmVuQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMsbz10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PW8mJigobj10aGlzLmNoaWxkTm9kZXMpLnNwbGljZS5hcHBseShuLE9iamVjdChyLmQpKFtvKzEsMF0sZSkpLGUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlQ2hpbGQodCksdC5wYXJlbnQ9aX0pKX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTE9PT1uP3RoaXMuYWRkQ2hpbGQoZSk6KGUucGFyZW50JiZlLnBhcmVudC5yZW1vdmVDaGlsZChlKSxlLnBhcmVudD10aGlzLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UobiwwLGUpKX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnlBbGwodClbMF18fG51bGx9LGUucHJvdG90eXBlLnF1ZXJ5QWxsPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBFZSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gT2UodGhpcyx0LGUpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50cmlnZ2VyRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLm5hbWU9PXQmJm4uY2FsbGJhY2soZSl9KX0sZX0oeGUpO2Z1bmN0aW9uIEVlKHQsZSxuKXt0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IGluc3RhbmNlb2YgQ2UmJihlKHQpJiZuLnB1c2godCksRWUodCxlLG4pKX0pfWZ1bmN0aW9uIE9lKHQsZSxuKXt0IGluc3RhbmNlb2YgQ2UmJnQuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCkmJm4ucHVzaCh0KSx0IGluc3RhbmNlb2YgQ2UmJk9lKHQsZSxuKX0pfXZhciBTZT1uZXcgTWFwO2Z1bmN0aW9uIGtlKHQpe3JldHVybiBTZS5nZXQodCl8fG51bGx9ZnVuY3Rpb24gVGUodCl7U2Uuc2V0KHQubmF0aXZlTm9kZSx0KX1mdW5jdGlvbiBQZSh0LGUpe3ZhciBuPUllKHQpLHI9SWUoZSk7cmV0dXJuIG4mJnI/ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj10W18oKV0oKSxpPWVbXygpXSgpOzspe3ZhciBvPXIubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lJiZhLmRvbmUpcmV0dXJuITA7aWYoby5kb25lfHxhLmRvbmUpcmV0dXJuITE7aWYoIW4oby52YWx1ZSxhLnZhbHVlKSlyZXR1cm4hMX19KHQsZSxQZSk6IShufHwhdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8cnx8IWV8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpfHx4KHQsZSl9dmFyIEFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLndyYXBwZWQ9dH1yZXR1cm4gdC53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNXcmFwcGVkKGUpP2Uud3JhcHBlZDplfSx0LmlzV3JhcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9LHR9KCksamU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZXZpb3VzVmFsdWU9dCx0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMuZmlyc3RDaGFuZ2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuaXNGaXJzdENoYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfSx0fSgpO2Z1bmN0aW9uIEllKHQpe3JldHVybiEhTWUodCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2VvZiBNYXApJiZfKClpbiB0KX1mdW5jdGlvbiBNZSh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX12YXIgTmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gSWUodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKHQpfSx0fSgpLFJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9LERlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49dHx8UmV9cmV0dXJuIHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE9wZXJhdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5faXRIZWFkLG49dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxpPW51bGw7ZXx8bjspe3ZhciBvPSFufHxlJiZlLmN1cnJlbnRJbmRleDxCZShuLHIsaSk/ZTpuLGE9QmUobyxyLGkpLHM9by5jdXJyZW50SW5kZXg7aWYobz09PW4pci0tLG49bi5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihlPWUuX25leHQsbnVsbD09by5wcmV2aW91c0luZGV4KXIrKztlbHNle2l8fChpPVtdKTt2YXIgbD1hLXIsdT1zLXI7aWYobCE9dSl7Zm9yKHZhciBjPTA7YzxsO2MrKyl7dmFyIGY9YzxpLmxlbmd0aD9pW2NdOmlbY109MCxoPWYrYzt1PD1oJiZoPGwmJihpW2NdPWYrMSl9aVtvLnByZXZpb3VzSW5kZXhdPXUtbH19YSE9PXMmJnQobyxhLHMpfX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c0l0SGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQWRkZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFJlbW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9LHQucHJvdG90eXBlLmRpZmY9ZnVuY3Rpb24odCl7aWYobnVsbD09dCYmKHQ9W10pLCFJZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK0ModCkrIicuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWQiKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuLHIsaSxvPXRoaXMuX2l0SGVhZCxhPSExO2lmKEFycmF5LmlzQXJyYXkodCkpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO2Zvcih2YXIgcz0wO3M8dGhpcy5sZW5ndGg7cysrKWk9dGhpcy5fdHJhY2tCeUZuKHMscj10W3NdKSxudWxsIT09byYmeChvLnRyYWNrQnlJZCxpKT8oYSYmKG89dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24obyxyLGkscykpLHgoby5pdGVtLHIpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShvLHIpKToobz10aGlzLl9taXNtYXRjaChvLHIsaSxzKSxhPSEwKSxvPW8uX25leHR9ZWxzZSBuPTAsZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSk7ZWxzZSBmb3IodmFyIHI9dFtfKCldKCksaT12b2lkIDA7IShpPXIubmV4dCgpKS5kb25lOyllKGkudmFsdWUpfSh0LGZ1bmN0aW9uKHQpe2k9ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PW8mJngoby50cmFja0J5SWQsaSk/KGEmJihvPWUuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8sdCxpLG4pKSx4KG8uaXRlbSx0KXx8ZS5fYWRkSWRlbnRpdHlDaGFuZ2Uobyx0KSk6KG89ZS5fbWlzbWF0Y2gobyx0LGksbiksYT0hMCksbz1vLl9uZXh0LG4rK30pLHRoaXMubGVuZ3RoPW47cmV0dXJuIHRoaXMuX3RydW5jYXRlKG8pLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PWUpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4LGU9dC5fbmV4dE1vdmVkO3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fSx0LnByb3RvdHlwZS5fbWlzbWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk7cmV0dXJuIG51bGw9PT10P2k9dGhpcy5faXRUYWlsOihpPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpKT8oeCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsaSxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyh4KHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsaSxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgRmUoZSxuKSxpLHIpLHR9LHQucHJvdG90eXBlLl92ZXJpZnlSZWluc2VydGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpO3JldHVybiBudWxsIT09aT90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoaSx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9LHQucHJvdG90eXBlLl90cnVuY2F0ZT1mdW5jdGlvbih0KXtmb3IoO251bGwhPT10Oyl7dmFyIGU9dC5fbmV4dDt0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSksdD1lfW51bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5jbGVhcigpLG51bGwhPT10aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLG51bGwhPT10aGlzLl9tb3Zlc1RhaWwmJih0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faXRUYWlsJiYodGhpcy5faXRUYWlsLl9uZXh0PW51bGwpLG51bGwhPT10aGlzLl9yZW1vdmFsc1RhaWwmJih0aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsJiYodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGwpfSx0LnByb3RvdHlwZS5fcmVpbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgcj10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9aTpyLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1yOmkuX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fbW92ZUFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX2FkZEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD10OnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHR9LHQucHJvdG90eXBlLl9pbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IFZlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1uLHR9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX0sdC5wcm90b3R5cGUuX3VubGluaz1mdW5jdGlvbih0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIGU9dC5fcHJldixuPXQuX25leHQ7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2l0SGVhZD1uOmUuX25leHQ9bixudWxsPT09bj90aGlzLl9pdFRhaWw9ZTpuLl9wcmV2PWUsdH0sdC5wcm90b3R5cGUuX2FkZFRvTW92ZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZT90Oih0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10LHQpfSx0LnByb3RvdHlwZS5fYWRkVG9SZW1vdmFscz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgVmUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bnVsbCx0Ll9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9dCx0Ll9wcmV2UmVtb3ZlZD1udWxsKToodC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPXQpLHR9LHQucHJvdG90eXBlLl9hZGRJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fSx0fSgpLEZlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9LExlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcihuPXRoaXMuX2hlYWQ7bnVsbCE9PW47bj1uLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9bi5jdXJyZW50SW5kZXgpJiZ4KG4udHJhY2tCeUlkLHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH0sdH0oKSxWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQsbj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IExlLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBuP24uZ2V0KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0VtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXAuY2xlYXIoKX0sdH0oKTtmdW5jdGlvbiBCZSh0LGUsbil7dmFyIHI9dC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO3ZhciBpPTA7cmV0dXJuIG4mJnI8bi5sZW5ndGgmJihpPW5bcl0pLHIrZStpfXZhciB6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxNZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVZX0sdH0oKSxVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hDaGFuZ2VkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fE1lKHQpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK0ModCkrIicuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZCIpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG49dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCxmdW5jdGlvbih0LHIpe2lmKG4mJm4ua2V5PT09cillLl9tYXliZUFkZFRvQ2hhbmdlcyhuLHQpLGUuX2FwcGVuZEFmdGVyPW4sbj1uLl9uZXh0O2Vsc2V7dmFyIGk9ZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocix0KTtuPWUuX2luc2VydEJlZm9yZU9yQXBwZW5kKG4saSl9fSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsaT1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1pKSxpJiYoaS5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIG89bmV3IEhlKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG8pLG8uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobyksb30sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXt4KGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2FkZFRvQWRkaXRpb25zPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD10Oih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0aGlzLl9hZGRpdGlvbnNUYWlsPXQpfSx0LnByb3RvdHlwZS5fYWRkVG9DaGFuZ2VzPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX0sdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlKHRbbl0sbil9KX0sdH0oKSxIZT1mdW5jdGlvbih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9LFFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG51bGwhPW4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IFAsbmV3IGtdXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYobnVsbCE9bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAnIisoKGU9dCkubmFtZXx8dHlwZW9mIGUpKyInIil9LHQubmdJbmplY3RhYmxlRGVmPXUoe3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoW25ldyBOZV0pfX0pLHR9KCkscWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYobil7dmFyIHI9bi5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgdChlKX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJue3Byb3ZpZGU6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGV4dGVuZCBLZXlWYWx1ZURpZmZlcnMgd2l0aG91dCBhIHBhcmVudCBpbmplY3RvciIpO3JldHVybiB0LmNyZWF0ZShlLG4pfSxkZXBzOltbdCxuZXcgUCxuZXcga11dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIiciKX0sdH0oKSxHZT1bbmV3IHplXSxZZT1uZXcgUWUoW25ldyBOZV0pLFdlPW5ldyBxZShHZSksWmU9bmUobnVsbCwiY29yZSIsW3twcm92aWRlOnl0LHVzZVZhbHVlOiJ1bmtub3duIn0se3Byb3ZpZGU6aWUsZGVwczpbTl19LHtwcm92aWRlOkd0LGRlcHM6W119LHtwcm92aWRlOnZ0LGRlcHM6W119XSksS2U9bmV3IGMoIkxvY2FsZUlkIik7ZnVuY3Rpb24gWGUoKXtyZXR1cm4gWWV9ZnVuY3Rpb24gJGUoKXtyZXR1cm4gV2V9ZnVuY3Rpb24gSmUodCl7cmV0dXJuIHR8fCJlbi1VUyJ9dmFyIHRuPWZ1bmN0aW9uKHQpe30sZW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmJvZHksbnVsbD09dGhpcy5pbmVydEJvZHlFbGVtZW50KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3RoaXMuaW5lcnREb2N1bWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKSxlLmFwcGVuZENoaWxkKHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9dGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48ZyBvbmxvYWQ9InRoaXMucGFyZW50Tm9kZS5yZW1vdmUoKSI+PC9nPjwvc3ZnPicsIXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yfHx0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIik/KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9Jzxzdmc+PHA+PHN0eWxlPjxpbWcgc3JjPSI8L3N0eWxlPjxpbWcgc3JjPXggb25lcnJvcj1hbGVydCgxKS8vIj4nLHRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3RvciYmdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInN2ZyBpbWciKSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuISF3aW5kb3cuRE9NUGFyc2VyfWNhdGNoKHQpe3JldHVybiExfX0oKT90aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfRE9NUGFyc2VyOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50KTp0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X1hIUn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9YSFI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt0PWVuY29kZVVSSSh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH12YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5yZXNwb25zZVR5cGU9ImRvY3VtZW50IixlLm9wZW4oIkdFVCIsImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsIit0LCExKSxlLnNlbmQobnVsbCk7dmFyIG49ZS5yZXNwb25zZS5ib2R5O3JldHVybiBuLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCksbn0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt2YXIgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCksZX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19LHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfSW5lcnREb2N1bWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4iY29udGVudCJpbiBlPyhlLmlubmVySFRNTD10LGUpOih0aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPXQsdGhpcy5kZWZhdWx0RG9jLmRvY3VtZW50TW9kZSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnModGhpcy5pbmVydEJvZHlFbGVtZW50KSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQpfSx0LnByb3RvdHlwZS5zdHJpcEN1c3RvbU5zQXR0cnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXR0cmlidXRlcyxuPWUubGVuZ3RoLTE7MDxuO24tLSl7dmFyIHI9ZS5pdGVtKG4pLm5hbWU7InhtbG5zOm5zMSIhPT1yJiYwIT09ci5pbmRleE9mKCJuczE6Iil8fHQucmVtb3ZlQXR0cmlidXRlKHIpfWZvcih2YXIgaT10LmZpcnN0Q2hpbGQ7aTspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyhpKSxpPWkubmV4dFNpYmxpbmd9LHR9KCksbm49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxybj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05K1wvXSs9KiQvaTtmdW5jdGlvbiBvbih0KXtyZXR1cm4odD1TdHJpbmcodCkpLm1hdGNoKG5uKXx8dC5tYXRjaChybik/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBVUkwgdmFsdWUgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIiksInVuc2FmZToiK3QpfWZ1bmN0aW9uIGFuKHQpe3ZhciBlLG4saT17fTt0cnl7Zm9yKHZhciBvPU9iamVjdChyLmUpKHQuc3BsaXQoIiwiKSksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpaVthLnZhbHVlXT0hMH1jYXRjaCh0KXtlPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGUpdGhyb3cgZS5lcnJvcn19cmV0dXJuIGl9ZnVuY3Rpb24gc24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG4saSxvPXt9O3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuZSkodCkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciBsPXMudmFsdWU7Zm9yKHZhciB1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmKG9bdV09ITApfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG99dmFyIGxuLHVuPWFuKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksY249YW4oImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxmbj1hbigicnAscnQiKSxobj1zbihmbixjbikscG49c24odW4sc24oY24sYW4oImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLHNuKGZuLGFuKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksaG4pLGRuPWFuKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxtbj1hbigic3Jjc2V0IikseW49c24oZG4sbW4sYW4oImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIikpLGduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZUNoaWxkcmVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZpcnN0Q2hpbGQ7ZTspaWYoZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP3RoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTt2YXIgbj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKG4pe2U9bjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9LHQucHJvdG90eXBlLnN0YXJ0RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYocG4uaGFzT3duUHJvcGVydHkoZSkpe3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2Zvcih2YXIgbixyPXQuYXR0cmlidXRlcyxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXIuaXRlbShpKSxhPW8ubmFtZSxzPWEudG9Mb3dlckNhc2UoKTtpZih5bi5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIGw9by52YWx1ZTtkbltzXSYmKGw9b24obCkpLG1uW3NdJiYobj1sLGw9KG49U3RyaW5nKG4pKS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb24odC50cmltKCkpfSkuam9pbigiLCAiKSksdGhpcy5idWYucHVzaCgiICIsYSwnPSInLF9uKGwpLCciJyl9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH10aGlzLmJ1Zi5wdXNoKCI+Iil9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH0sdC5wcm90b3R5cGUuZW5kRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cG4uaGFzT3duUHJvcGVydHkoZSkmJiF1bi5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfSx0LnByb3RvdHlwZS5jaGFycz1mdW5jdGlvbih0KXt0aGlzLmJ1Zi5wdXNoKF9uKHQpKX0sdC5wcm90b3R5cGUuY2hlY2tDbG9iYmVyZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogIit0Lm91dGVySFRNTCk7cmV0dXJuIGV9LHR9KCksdm49L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGJuPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBfbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSh2bixmdW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNoYXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKGJuLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIHduKHQsZSl7dmFyIG49bnVsbDt0cnl7bG49bG58fG5ldyBlbih0KTt2YXIgcj1lP1N0cmluZyhlKToiIjtuPWxuLmdldEluZXJ0Qm9keUVsZW1lbnQocik7dmFyIGk9NSxvPXI7ZG97aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2ktLSxyPW8sbz1uLmlubmVySFRNTCxuPWxuLmdldEluZXJ0Qm9keUVsZW1lbnQocil9d2hpbGUociE9PW8pO3ZhciBhPW5ldyBnbixzPWEuc2FuaXRpemVDaGlsZHJlbih4bihuKXx8bik7cmV0dXJuIHRlKCkmJmEuc2FuaXRpemVkU29tZXRoaW5nJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgSFRNTCBzdHJpcHBlZCBzb21lIGNvbnRlbnQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpLiIpLHN9ZmluYWxseXtpZihuKWZvcih2YXIgbD14bihuKXx8bjtsLmZpcnN0Q2hpbGQ7KWwucmVtb3ZlQ2hpbGQobC5maXJzdENoaWxkKX19ZnVuY3Rpb24geG4odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PXQubm9kZU5hbWV9KHQpP3QuY29udGVudDpudWxsfXZhciBDbj1uZXcgUmVnRXhwKCJeKFstLC5cIiclXyEjIGEtekEtWjAtOV0rfCg/Oig/Om1hdHJpeHx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHNrZXd8cGVyc3BlY3RpdmUpKD86WHxZfDNkKT98KD86cmdifGhzbClhP3woPzpyZXBlYXRpbmctKT8oPzpsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudHwoPzpjYWxjfGF0dHIpKVxcKFstMC05LiUsICNhLXpBLVpdK1xcKSkkIiwiZyIpLEVuPS9edXJsXCgoW14pXSspXCkkLztmdW5jdGlvbiBPbih0KXtpZighKHQ9U3RyaW5nKHQpLnRyaW0oKSkpcmV0dXJuIiI7dmFyIGU9dC5tYXRjaChFbik7cmV0dXJuIGUmJm9uKGVbMV0pPT09ZVsxXXx8dC5tYXRjaChDbikmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dC5jaGFyQXQocik7IiciPT09aSYmbj9lPSFlOiciJz09PWkmJmUmJihuPSFuKX1yZXR1cm4gZSYmbn0odCk/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBzdHlsZSB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksInVuc2FmZSIpfXZhciBTbj1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5IVE1MPTFdPSJIVE1MIix0W3QuU1RZTEU9Ml09IlNUWUxFIix0W3QuU0NSSVBUPTNdPSJTQ1JJUFQiLHRbdC5VUkw9NF09IlVSTCIsdFt0LlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIix0fSh7fSksa249ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIFRuKHQsZSxuKXt2YXIgcj10LnN0YXRlLGk9MTc5MiZyO3JldHVybiBpPT09ZT8odC5zdGF0ZT0tMTc5MyZyfG4sdC5pbml0SW5kZXg9LTEsITApOmk9PT1ufWZ1bmN0aW9uIFBuKHQsZSxuKXtyZXR1cm4oMTc5MiZ0LnN0YXRlKT09PWUmJnQuaW5pdEluZGV4PD1uJiYodC5pbml0SW5kZXg9bisxLCEwKX1mdW5jdGlvbiBBbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIGpuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gSW4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBNbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIE5uKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19dmFyIFJuPXtzZXRDdXJyZW50Tm9kZTp2b2lkIDAsY3JlYXRlUm9vdFZpZXc6dm9pZCAwLGNyZWF0ZUVtYmVkZGVkVmlldzp2b2lkIDAsY3JlYXRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY3JlYXRlTmdNb2R1bGVSZWY6dm9pZCAwLG92ZXJyaWRlUHJvdmlkZXI6dm9pZCAwLG92ZXJyaWRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY2xlYXJPdmVycmlkZXM6dm9pZCAwLGNoZWNrQW5kVXBkYXRlVmlldzp2b2lkIDAsY2hlY2tOb0NoYW5nZXNWaWV3OnZvaWQgMCxkZXN0cm95Vmlldzp2b2lkIDAscmVzb2x2ZURlcDp2b2lkIDAsY3JlYXRlRGVidWdDb250ZXh0OnZvaWQgMCxoYW5kbGVFdmVudDp2b2lkIDAsdXBkYXRlRGlyZWN0aXZlczp2b2lkIDAsdXBkYXRlUmVuZGVyZXI6dm9pZCAwLGRpcnR5UGFyZW50UXVlcmllczp2b2lkIDB9O2Z1bmN0aW9uIERuKHQsZSxuLHIpe3ZhciBpPSJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJyIrZSsiJy4gQ3VycmVudCB2YWx1ZTogJyIrbisiJy4iO3JldHVybiByJiYoaSs9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rID8iKSxmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gRm4obixlKSxufShpLHQpfWZ1bmN0aW9uIEZuKHQsZSl7dFt0dF09ZSx0W250XT1lLmxvZ0Vycm9yLmJpbmQoZSl9ZnVuY3Rpb24gTG4odCl7cmV0dXJuIG5ldyBFcnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3OiAiK3QpfXZhciBWbj1mdW5jdGlvbigpe30sQm49bmV3IE1hcDtmdW5jdGlvbiB6bih0KXt2YXIgZT1Cbi5nZXQodCk7cmV0dXJuIGV8fChlPUModCkrIl8iK0JuLnNpemUsQm4uc2V0KHQsZSkpLGV9ZnVuY3Rpb24gVW4odCxlLG4scil7aWYoQWUuaXNXcmFwcGVkKHIpKXtyPUFlLnVud3JhcChyKTt2YXIgaT10LmRlZi5ub2Rlc1tlXS5iaW5kaW5nSW5kZXgrbixvPUFlLnVud3JhcCh0Lm9sZFZhbHVlc1tpXSk7dC5vbGRWYWx1ZXNbaV09bmV3IEFlKG8pfXJldHVybiByfXZhciBIbj0iJCR1bmRlZmluZWQiLFFuPSIkJGVtcHR5IjtmdW5jdGlvbiBxbih0KXtyZXR1cm57aWQ6SG4sc3R5bGVzOnQuc3R5bGVzLGVuY2Fwc3VsYXRpb246dC5lbmNhcHN1bGF0aW9uLGRhdGE6dC5kYXRhfX12YXIgR249MDtmdW5jdGlvbiBZbih0LGUsbixyKXtyZXR1cm4hKCEoMiZ0LnN0YXRlKSYmeCh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gV24odCxlLG4scil7cmV0dXJuISFZbih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIFpuKHQsZSxuLHIpe3ZhciBpPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IVBlKGkscikpe3ZhciBvPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBEbihSbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksbysiOiAiK2ksbysiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBLbih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIFhuKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiAkbih0LGUsbixyKXt0cnl7cmV0dXJuIEtuKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP2puKHQsZSkuY29tcG9uZW50Vmlldzp0KSxSbi5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChlKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX1mdW5jdGlvbiBKbih0KXtyZXR1cm4gdC5wYXJlbnQ/am4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiB0cih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uIGVyKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGpuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBBbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiBucih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIHJyKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGlyKHQpe3JldHVybiAxPDx0JTMyfWZ1bmN0aW9uIG9yKHQpe3ZhciBlPXt9LG49MCxpPXt9O3JldHVybiB0JiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG89T2JqZWN0KHIuYykodCwyKSxhPW9bMF0scz1vWzFdOyJudW1iZXIiPT10eXBlb2YgYT8oZVthXT1zLG58PWlyKGEpKTppW2FdPXN9KSx7bWF0Y2hlZFF1ZXJpZXM6ZSxyZWZlcmVuY2VzOmksbWF0Y2hlZFF1ZXJ5SWRzOm59fWZ1bmN0aW9uIGFyKHQsZSl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBuLGksbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaT0obz1PYmplY3Qoci5jKSh0LDIpKVswXSxuPW9bMV0pOihpPTAsbj10KSxuJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJmUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEEse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSkse2ZsYWdzOmksdG9rZW46bix0b2tlbktleTp6bihuKX19KX1mdW5jdGlvbiBzcih0LGUsbil7dmFyIHI9bi5yZW5kZXJQYXJlbnQ7cmV0dXJuIHI/MD09KDEmci5mbGFncyl8fDA9PSgzMzU1NDQzMiZyLmZsYWdzKXx8ci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZSYmci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZS5lbmNhcHN1bGF0aW9uPT09WC5OYXRpdmU/am4odCxuLnJlbmRlclBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ6dm9pZCAwOmV9dmFyIGxyPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHVyKHQpe3ZhciBlPWxyLmdldCh0KTtyZXR1cm4gZXx8KChlPXQoZnVuY3Rpb24oKXtyZXR1cm4gVm59KSkuZmFjdG9yeT10LGxyLnNldCh0LGUpKSxlfWZ1bmN0aW9uIGNyKHQsZSxuLHIsaSl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZShlcih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSxmcih0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsaSl9ZnVuY3Rpb24gZnIodCxlLG4scixpLG8sYSl7Zm9yKHZhciBzPW47czw9cjtzKyspe3ZhciBsPXQuZGVmLm5vZGVzW3NdOzExJmwuZmxhZ3MmJnByKHQsbCxlLGksbyxhKSxzKz1sLmNoaWxkQ291bnR9fWZ1bmN0aW9uIGhyKHQsZSxuLHIsaSxvKXtmb3IodmFyIGE9dDthJiYhbnIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciBzPWEucGFyZW50LGw9dHIoYSksdT1sLm5vZGVJbmRleCtsLmNoaWxkQ291bnQsYz1sLm5vZGVJbmRleCsxO2M8PXU7YysrKXt2YXIgZj1zLmRlZi5ub2Rlc1tjXTtmLm5nQ29udGVudEluZGV4PT09ZSYmcHIocyxmLG4scixpLG8pLGMrPWYuY2hpbGRDb3VudH1pZighcy5wYXJlbnQpe3ZhciBoPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGgpZm9yKGM9MDtjPGgubGVuZ3RoO2MrKylkcih0LGhbY10sbixyLGksbyl9fWZ1bmN0aW9uIHByKHQsZSxuLHIsaSxvKXtpZig4JmUuZmxhZ3MpaHIodCxlLm5nQ29udGVudC5pbmRleCxuLHIsaSxvKTtlbHNle3ZhciBhPWVyKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmZHIodCxhLG4scixpLG8pLDMyJmUuYmluZGluZ0ZsYWdzJiZkcihqbih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLGksbykpOmRyKHQsYSxuLHIsaSxvKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgcz1qbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGw9MDtsPHMubGVuZ3RoO2wrKyljcihzW2xdLG4scixpLG8pOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZmcih0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixpLG8pfX1mdW5jdGlvbiBkcih0LGUsbixyLGksbyl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLGkpO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOm8ucHVzaChlKX19dmFyIG1yPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIHlyKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2gobXIpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiBncih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX1mdW5jdGlvbiB2cih0LGUsbixyLGksbyxhLHMsbCx1LGMsZixoLHAsZCxtLHksZyx2LGIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIGUrYnIobikrcjtjYXNlIDI6cmV0dXJuIGUrYnIobikrciticihpKStvO2Nhc2UgMzpyZXR1cm4gZSticihuKStyK2JyKGkpK28rYnIoYSkrcztjYXNlIDQ6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdTtjYXNlIDU6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdSticihjKStmO2Nhc2UgNjpyZXR1cm4gZSticihuKStyK2JyKGkpK28rYnIoYSkrcyticihsKSt1K2JyKGMpK2YrYnIoaCkrcDtjYXNlIDc6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdSticihjKStmK2JyKGgpK3ArYnIoZCkrbTtjYXNlIDg6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdSticihjKStmK2JyKGgpK3ArYnIoZCkrbSticih5KStnO2Nhc2UgOTpyZXR1cm4gZSticihuKStyK2JyKGkpK28rYnIoYSkrcyticihsKSt1K2JyKGMpK2YrYnIoaCkrcCticihkKSttK2JyKHkpK2crYnIodikrYjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gOSBleHByZXNzaW9ucyIpfX1mdW5jdGlvbiBicih0KXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCk6IiJ9ZnVuY3Rpb24gX3IodCxlLG4scixpLG8pe3R8PTE7dmFyIGE9b3IoZSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsZmxhZ3M6dCxjaGVja0luZGV4Oi0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmEubWF0Y2hlZFF1ZXJpZXMsbWF0Y2hlZFF1ZXJ5SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6YS5yZWZlcmVuY2VzLG5nQ29udGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDp7bnM6bnVsbCxuYW1lOm51bGwsYXR0cnM6bnVsbCx0ZW1wbGF0ZTpvP3VyKG8pOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Om51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOm51bGwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6aXx8Vm59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIHdyKHQsZSxuLGksbyxhLHMsbCx1LGMsZixoKXt2b2lkIDA9PT1zJiYocz1bXSksY3x8KGM9Vm4pO3ZhciBwPW9yKG4pLGQ9cC5tYXRjaGVkUXVlcmllcyxtPXAucmVmZXJlbmNlcyx5PXAubWF0Y2hlZFF1ZXJ5SWRzLGc9bnVsbCx2PW51bGw7YSYmKGc9KEk9T2JqZWN0KHIuYykoeXIoYSksMikpWzBdLHY9SVsxXSksbD1sfHxbXTtmb3IodmFyIGI9bmV3IEFycmF5KGwubGVuZ3RoKSxfPTA7XzxsLmxlbmd0aDtfKyspe3ZhciB3PU9iamVjdChyLmMpKGxbX10sMykseD13WzBdLEM9d1sxXSxFPXdbMl0sTz1PYmplY3Qoci5jKSh5cihDKSwyKSxTPU9bMF0saz1PWzFdLFQ9dm9pZCAwLFA9dm9pZCAwO3N3aXRjaCgxNSZ4KXtjYXNlIDQ6UD1FO2JyZWFrO2Nhc2UgMTpjYXNlIDg6VD1FfWJbX109e2ZsYWdzOngsbnM6UyxuYW1lOmssbm9uTWluaWZpZWROYW1lOmssc2VjdXJpdHlDb250ZXh0OlQsc3VmZml4OlB9fXU9dXx8W107dmFyIEE9bmV3IEFycmF5KHUubGVuZ3RoKTtmb3IoXz0wO188dS5sZW5ndGg7XysrKXt2YXIgaj1PYmplY3Qoci5jKSh1W19dLDIpO0FbX109e3R5cGU6MCx0YXJnZXQ6alswXSxldmVudE5hbWU6alsxXSxwcm9wTmFtZTpudWxsfX12YXIgSSxNPShzPXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHIuYykodCwyKSxuPWVbMF0saT1lWzFdLG89T2JqZWN0KHIuYykoeXIobiksMik7cmV0dXJuW29bMF0sb1sxXSxpXX0pO3JldHVybiBoPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT1Ibil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1YLk5vbmV8fHQuc3R5bGVzLmxlbmd0aHx8T2JqZWN0LmtleXModC5kYXRhKS5sZW5ndGg7dC5pZD1lPyJjIitHbisrOlFufXJldHVybiB0JiZ0LmlkPT09UW4mJih0PW51bGwpLHR8fG51bGx9KGgpLGYmJihlfD0zMzU1NDQzMikse25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmV8PTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6ZCxtYXRjaGVkUXVlcnlJZHM6eSxyZWZlcmVuY2VzOm0sbmdDb250ZW50SW5kZXg6aSxjaGlsZENvdW50Om8sYmluZGluZ3M6YixiaW5kaW5nRmxhZ3M6Z3IoYiksb3V0cHV0czpBLGVsZW1lbnQ6e25zOmcsbmFtZTp2LGF0dHJzOk0sdGVtcGxhdGU6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6Znx8bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6aCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpjfHxWbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24geHIodCxlLG4pe3ZhciBpLG89bi5lbGVtZW50LGE9dC5yb290LnNlbGVjdG9yT3JOb2RlLHM9dC5yZW5kZXJlcjtpZih0LnBhcmVudHx8IWEpe2k9by5uYW1lP3MuY3JlYXRlRWxlbWVudChvLm5hbWUsby5ucyk6cy5jcmVhdGVDb21tZW50KCIiKTt2YXIgbD1zcih0LGUsbik7bCYmcy5hcHBlbmRDaGlsZChsLGkpfWVsc2UgaT1zLnNlbGVjdFJvb3RFbGVtZW50KGEpO2lmKG8uYXR0cnMpZm9yKHZhciB1PTA7dTxvLmF0dHJzLmxlbmd0aDt1Kyspe3ZhciBjPU9iamVjdChyLmMpKG8uYXR0cnNbdV0sMyk7cy5zZXRBdHRyaWJ1dGUoaSxjWzFdLGNbMl0sY1swXSl9cmV0dXJuIGl9ZnVuY3Rpb24gQ3IodCxlLG4scil7Zm9yKHZhciBpPTA7aTxuLm91dHB1dHMubGVuZ3RoO2krKyl7dmFyIG89bi5vdXRwdXRzW2ldLGE9RXIodCxuLm5vZGVJbmRleCwoZj1vLmV2ZW50TmFtZSwoYz1vLnRhcmdldCk/YysiOiIrZjpmKSkscz1vLnRhcmdldCxsPXQ7ImNvbXBvbmVudCI9PT1vLnRhcmdldCYmKHM9bnVsbCxsPWUpO3ZhciB1PWwucmVuZGVyZXIubGlzdGVuKHN8fHIsby5ldmVudE5hbWUsYSk7dC5kaXNwb3NhYmxlc1tuLm91dHB1dEluZGV4K2ldPXV9dmFyIGMsZn1mdW5jdGlvbiBFcih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiAkbih0LGUsbixyKX19ZnVuY3Rpb24gT3IodCxlLG4scil7aWYoIVduKHQsZSxuLHIpKXJldHVybiExO3ZhciBpPWUuYmluZGluZ3Nbbl0sbz1qbih0LGUubm9kZUluZGV4KSxhPW8ucmVuZGVyRWxlbWVudCxzPWkubmFtZTtzd2l0Y2goMTUmaS5mbGFncyl7Y2FzZSAxOiFmdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9ZS5zZWN1cml0eUNvbnRleHQscz1hP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoYSxvKTpvO3M9bnVsbCE9cz9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgbD10LnJlbmRlcmVyO251bGwhPW8/bC5zZXRBdHRyaWJ1dGUobixpLHMscik6bC5yZW1vdmVBdHRyaWJ1dGUobixpLHIpfSh0LGksYSxpLm5zLHMscik7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnJlbmRlcmVyO3I/aS5hZGRDbGFzcyhlLG4pOmkucmVtb3ZlQ2xhc3MoZSxuKX0odCxhLHMscik7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoU24uU1RZTEUsaSk7aWYobnVsbCE9byl7bz1vLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9YSYmKG8rPWEpfWVsc2Ugbz1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9bz9zLnNldFN0eWxlKG4scixvKTpzLnJlbW92ZVN0eWxlKG4scil9KHQsaSxhLHMscik7YnJlYWs7Y2FzZSA4OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPWUuc2VjdXJpdHlDb250ZXh0LGE9bz90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKG8saSk6aTt0LnJlbmRlcmVyLnNldFByb3BlcnR5KG4scixhKX0oMzM1NTQ0MzImZS5mbGFncyYmMzImaS5mbGFncz9vLmNvbXBvbmVudFZpZXc6dCxpLGEscyxyKX1yZXR1cm4hMH12YXIgU3I9bmV3IE9iamVjdCxrcj16bihOKSxUcj16bihJKSxQcj16bihqdCk7ZnVuY3Rpb24gQXIodCxlLG4scil7cmV0dXJuIG49TyhuKSx7aW5kZXg6LTEsZGVwczphcihyLEMoZSkpLGZsYWdzOnQsdG9rZW46ZSx2YWx1ZTpufX1mdW5jdGlvbiBqcih0KXtmb3IodmFyIGU9e30sbj1bXSxyPSExLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvLnRva2VuPT09c3QmJihyPSEwKSwxMDczNzQxODI0Jm8uZmxhZ3MmJm4ucHVzaChvLnRva2VuKSxvLmluZGV4PWksZVt6bihvLnRva2VuKV09b31yZXR1cm57ZmFjdG9yeTpudWxsLHByb3ZpZGVyc0J5S2V5OmUscHJvdmlkZXJzOnQsbW9kdWxlczpuLGlzUm9vdDpyfX1mdW5jdGlvbiBJcih0LGUsbil7dm9pZCAwPT09biYmKG49Ti5USFJPV19JRl9OT1RfRk9VTkQpO3ZhciByLGksbz1aKHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIGtyOmNhc2UgVHI6Y2FzZSBQcjpyZXR1cm4gdH12YXIgcz10Ll9kZWYucHJvdmlkZXJzQnlLZXlbYV07aWYocyl7dmFyIGw9dC5fcHJvdmlkZXJzW3MuaW5kZXhdO3JldHVybiB2b2lkIDA9PT1sJiYobD10Ll9wcm92aWRlcnNbcy5pbmRleF09TXIodCxzKSksbD09PVNyP3ZvaWQgMDpsfWlmKGUudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYocj10LG51bGwhPShpPWUudG9rZW4ubmdJbmplY3RhYmxlRGVmKS5wcm92aWRlZEluJiYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fZGVmLm1vZHVsZXMuaW5kZXhPZihpLnByb3ZpZGVkSW4pPi0xfShyKXx8InJvb3QiPT09aS5wcm92aWRlZEluJiZyLl9kZWYuaXNSb290KSkpe3ZhciB1PXQuX3Byb3ZpZGVycy5sZW5ndGg7cmV0dXJuIHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTplLnRva2VuLm5nSW5qZWN0YWJsZURlZi5mYWN0b3J5LGRlcHM6W10saW5kZXg6dSx0b2tlbjplLnRva2VufSx0Ll9wcm92aWRlcnNbdV09U3IsdC5fcHJvdmlkZXJzW3VdPU1yKHQsdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldKX1yZXR1cm4gdC5fcGFyZW50LmdldChlLnRva2VuLG4pfWZpbmFsbHl7WihvKX19ZnVuY3Rpb24gTXIodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOm49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUoSXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgZShJcih0LG5bMF0pLElyKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGUoSXIodCxuWzBdKSxJcih0LG5bMV0pLElyKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBvPW5ldyBBcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUlyKHQsblthXSk7cmV0dXJuIG5ldyhlLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5kKShbdm9pZCAwXSxvKSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAxMDI0Om49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGUoKTtjYXNlIDE6cmV0dXJuIGUoSXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBlKElyKHQsblswXSksSXIodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBlKElyKHQsblswXSksSXIodCxuWzFdKSxJcih0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgbz1BcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUlyKHQsblthXSk7cmV0dXJuIGUuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKG8pKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMjA0ODpuPUlyKHQsZS5kZXBzWzBdKTticmVhaztjYXNlIDI1NjpuPWUudmFsdWV9cmV0dXJuIG49PT1Tcnx8bnVsbD09bnx8Im9iamVjdCIhPXR5cGVvZiBufHwxMzEwNzImZS5mbGFnc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIG4ubmdPbkRlc3Ryb3l8fChlLmZsYWdzfD0xMzEwNzIpLHZvaWQgMD09PW4/U3I6bn1mdW5jdGlvbiBOcih0LGUpe3ZhciBuPXQudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztpZigobnVsbD09ZXx8ZT49bi5sZW5ndGgpJiYoZT1uLmxlbmd0aC0xKSxlPDApcmV0dXJuIG51bGw7dmFyIHI9bltlXTtyZXR1cm4gci52aWV3Q29udGFpbmVyUGFyZW50PW51bGwsTHIobixlKSxSbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksRHIocikscn1mdW5jdGlvbiBScih0LGUsbil7dmFyIHI9ZT9lcihlLGUuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSk6dC5yZW5kZXJFbGVtZW50O2NyKG4sMixuLnJlbmRlcmVyLnBhcmVudE5vZGUociksbi5yZW5kZXJlci5uZXh0U2libGluZyhyKSx2b2lkIDApfWZ1bmN0aW9uIERyKHQpe2NyKHQsMyxudWxsLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBGcih0LGUsbil7ZT49dC5sZW5ndGg/dC5wdXNoKG4pOnQuc3BsaWNlKGUsMCxuKX1mdW5jdGlvbiBMcih0LGUpe2U+PXQubGVuZ3RoLTE/dC5wb3AoKTp0LnNwbGljZShlLDEpfXZhciBWcj1uZXcgT2JqZWN0O2Z1bmN0aW9uIEJyKHQsZSxuLHIsaSxvKXtyZXR1cm4gbmV3IHpyKHQsZSxuLHIsaSxvKX12YXIgenI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSl7dmFyIHM9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBzLnNlbGVjdG9yPWUscy5jb21wb25lbnRUeXBlPW4scy5faW5wdXRzPWkscy5fb3V0cHV0cz1vLHMubmdDb250ZW50U2VsZWN0b3JzPWEscy52aWV3RGVmRmFjdG9yeT1yLHN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuX2lucHV0cztmb3IodmFyIG4gaW4gZSl0LnB1c2goe3Byb3BOYW1lOm4sdGVtcGxhdGVOYW1lOmVbbl19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm91dHB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fb3V0cHV0cyl0LnB1c2goe3Byb3BOYW1lOmUsdGVtcGxhdGVOYW1lOnRoaXMuX291dHB1dHNbZV19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJuZ01vZHVsZSBzaG91bGQgYmUgcHJvdmlkZWQiKTt2YXIgaT11cih0aGlzLnZpZXdEZWZGYWN0b3J5KSxvPWkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRQcm92aWRlci5ub2RlSW5kZXgsYT1Sbi5jcmVhdGVSb290Vmlldyh0LGV8fFtdLG4saSxyLFZyKSxzPUluKGEsbykuaW5zdGFuY2U7cmV0dXJuIG4mJmEucmVuZGVyZXIuc2V0QXR0cmlidXRlKGpuKGEsMCkucmVuZGVyRWxlbWVudCwibmctdmVyc2lvbiIsSi5mdWxsKSxuZXcgVXIoYSxuZXcgR3IoYSkscyl9LGV9KHh0KSxVcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3ZpZXc9ZSxpLl92aWV3UmVmPW4saS5fY29tcG9uZW50PXIsaS5fZWxEZWY9aS5fdmlldy5kZWYubm9kZXNbMF0saS5ob3N0Vmlldz1uLGkuY2hhbmdlRGV0ZWN0b3JSZWY9bixpLmluc3RhbmNlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmZShqbih0aGlzLl92aWV3LHRoaXMuX2VsRGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgS3IodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb21wb25lbnRUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudC5jb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld1JlZi5kZXN0cm95KCl9LGUucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3UmVmLm9uRGVzdHJveSh0KX0sZX0oZnVuY3Rpb24oKXt9KTtmdW5jdGlvbiBIcih0LGUsbil7cmV0dXJuIG5ldyBRcih0LGUsbil9dmFyIFFyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlldz10LHRoaXMuX2VsRGVmPWUsdGhpcy5fZGF0YT1uLHRoaXMuX2VtYmVkZGVkVmlld3M9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgZmUodGhpcy5fZGF0YS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZpZXcsZT10aGlzLl9lbERlZi5wYXJlbnQ7IWUmJnQ7KWU9dHIodCksdD10LnBhcmVudDtyZXR1cm4gdD9uZXcgS3IodCxlKTpuZXcgS3IodGhpcy5fdmlldyxudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgZT1Ocih0aGlzLl9kYXRhLHQpO1JuLmRlc3Ryb3lWaWV3KGUpfX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VtYmVkZGVkVmlld3NbdF07aWYoZSl7dmFyIG49bmV3IEdyKGUpO3JldHVybiBuLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSxufXJldHVybiBudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuY3JlYXRlRW1iZWRkZWRWaWV3KGV8fHt9KTtyZXR1cm4gdGhpcy5pbnNlcnQocixuKSxyfSx0LnByb3RvdHlwZS5jcmVhdGVDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1ufHx0aGlzLnBhcmVudEluamVjdG9yO2l8fHQgaW5zdGFuY2VvZiBBdHx8KGk9by5nZXQoanQpKTt2YXIgYT10LmNyZWF0ZShvLHIsdm9pZCAwLGkpO3JldHVybiB0aGlzLmluc2VydChhLmhvc3RWaWV3LGUpLGF9LHQucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGluc2VydCBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhPXQ7cmV0dXJuIGk9YS5fdmlldyxvPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbnVsbCE9PShyPWUpJiZ2b2lkIDAhPT1yfHwocj1vLmxlbmd0aCksaS52aWV3Q29udGFpbmVyUGFyZW50PXRoaXMuX3ZpZXcsRnIobyxyLGkpLGZ1bmN0aW9uKHQsZSl7dmFyIG49Sm4oZSk7aWYobiYmbiE9PXQmJiEoMTYmZS5zdGF0ZSkpe2Uuc3RhdGV8PTE2O3ZhciByPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO3J8fChyPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzPVtdKSxyLnB1c2goZSksZnVuY3Rpb24odCxuKXtpZighKDQmbi5mbGFncykpe2UucGFyZW50LmRlZi5ub2RlRmxhZ3N8PTQsbi5mbGFnc3w9NDtmb3IodmFyIHI9bi5wYXJlbnQ7cjspci5jaGlsZEZsYWdzfD00LHI9ci5wYXJlbnR9fSgwLGUucGFyZW50Tm9kZURlZil9fShuLGkpLFJuLmRpcnR5UGFyZW50UXVlcmllcyhpKSxScihuLHI+MD9vW3ItMV06bnVsbCxpKSxhLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSx0fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhLHM9dGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpO3JldHVybiBpPWUsYT0obz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzKVtyPXNdLExyKG8sciksbnVsbD09aSYmKGk9by5sZW5ndGgpLEZyKG8saSxhKSxSbi5kaXJ0eVBhcmVudFF1ZXJpZXMoYSksRHIoYSksUnIobixpPjA/b1tpLTFdOm51bGwsYSksdH0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9TnIodGhpcy5fZGF0YSx0KTtlJiZSbi5kZXN0cm95VmlldyhlKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPU5yKHRoaXMuX2RhdGEsdCk7cmV0dXJuIGU/bmV3IEdyKGUpOm51bGx9LHR9KCk7ZnVuY3Rpb24gcXIodCl7cmV0dXJuIG5ldyBHcih0KX12YXIgR3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXc9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwsdGhpcy5fYXBwUmVmPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdE5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNyKHRoaXMuX3ZpZXcsMCx2b2lkIDAsdm9pZCAwLHQ9W10pLHQ7dmFyIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3ZpZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpe0tuKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdpbiYmdC5iZWdpbigpO3RyeXtSbi5jaGVja0FuZFVwZGF0ZVZpZXcodGhpcy5fdmlldyl9ZmluYWxseXt0LmVuZCYmdC5lbmQoKX19LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7Um4uY2hlY2tOb0NoYW5nZXNWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGV8PTR9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3LmRpc3Bvc2FibGVzfHwodGhpcy5fdmlldy5kaXNwb3NhYmxlcz1bXSksdGhpcy5fdmlldy5kaXNwb3NhYmxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmP3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpOnRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYuZGV0YWNoKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzKSksUm4uZGVzdHJveVZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbCxEcih0aGlzLl92aWV3KSxSbi5kaXJ0eVBhcmVudFF1ZXJpZXModGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhIik7dGhpcy5fYXBwUmVmPXR9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0fSgpO2Z1bmN0aW9uIFlyKHQsZSl7cmV0dXJuIG5ldyBXcih0LGUpfXZhciBXcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wYXJlbnRWaWV3PWUsci5fZGVmPW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHcihSbi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYsdGhpcy5fZGVmLmVsZW1lbnQudGVtcGxhdGUsdCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVsZW1lbnRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZlKGpuKHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odmUpO2Z1bmN0aW9uIFpyKHQsZSl7cmV0dXJuIG5ldyBLcih0LGUpfXZhciBLcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLmVsRGVmPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1OLlRIUk9XX0lGX05PVF9GT1VORCksUm4ucmVzb2x2ZURlcCh0aGlzLnZpZXcsdGhpcy5lbERlZiwhIXRoaXMuZWxEZWYmJjAhPSgzMzU1NDQzMiZ0aGlzLmVsRGVmLmZsYWdzKSx7ZmxhZ3M6MCx0b2tlbjp0LHRva2VuS2V5OnpuKHQpfSxlKX0sdH0oKTtmdW5jdGlvbiBYcih0LGUpe3ZhciBuPXQuZGVmLm5vZGVzW2VdO2lmKDEmbi5mbGFncyl7dmFyIHI9am4odCxuLm5vZGVJbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1wbGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIEFuKHQsbi5ub2RlSW5kZXgpLnJlbmRlclRleHQ7aWYoMjAyNDAmbi5mbGFncylyZXR1cm4gSW4odCxuLm5vZGVJbmRleCkuaW5zdGFuY2U7dGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHN0YXRlOiByZWFkIG5vZGVWYWx1ZSBmb3Igbm9kZSBpbmRleCAiK2UpfWZ1bmN0aW9uICRyKHQpe3JldHVybiBuZXcgSnIodC5yZW5kZXJlcil9dmFyIEpyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuYykoeXIoZSksMiksaT10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQoblsxXSxuWzBdKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGkpLGl9LHQucHJvdG90eXBlLmNyZWF0ZVZpZXdSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVUZW1wbGF0ZUFuY2hvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChlKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LG4pLG59LHQucHJvdG90eXBlLnByb2plY3ROb2Rlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlW25dKX0sdC5wcm90b3R5cGUuYXR0YWNoVmlld0FmdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KSxyPXRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCksaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKG4sZVtpXSxyKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXSxyPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShuKTt0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHIsbil9fSx0LnByb3RvdHlwZS5kZXN0cm95Vmlldz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUoZVtuXSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuR2xvYmFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1PYmplY3Qoci5jKSh5cihlKSwyKSxvPWlbMF0sYT1pWzFdO251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxhLG4sbyk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxhLG8pfSx0LnByb3RvdHlwZS5zZXRCaW5kaW5nRGVidWdJbmZvPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnNldEVsZW1lbnRDbGFzcz1mdW5jdGlvbih0LGUsbil7bj90aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50U3R5bGU9ZnVuY3Rpb24odCxlLG4pe251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbik6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUpfSx0LnByb3RvdHlwZS5pbnZva2VFbGVtZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSxuKXt0W2VdLmFwcGx5KHQsbil9LHQucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyLmFuaW1hdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCEiKX0sdH0oKTtmdW5jdGlvbiB0aSh0LGUsbixyKXtyZXR1cm4gbmV3IGVpKHQsZSxuLHIpfXZhciBlaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fbW9kdWxlVHlwZT10LHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9bix0aGlzLl9kZWY9cix0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLmluamVjdG9yPXRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2RlZixuPXQuX3Byb3ZpZGVycz1uZXcgQXJyYXkoZS5wcm92aWRlcnMubGVuZ3RoKSxyPTA7cjxlLnByb3ZpZGVycy5sZW5ndGg7cisrKXt2YXIgaT1lLnByb3ZpZGVyc1tyXTs0MDk2JmkuZmxhZ3N8fHZvaWQgMD09PW5bcl0mJihuW3JdPU1yKHQsaSkpfX0odGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9Ti5USFJPV19JRl9OT1RfRk9VTkQpLHZvaWQgMD09PW4mJihuPTApO3ZhciByPTA7cmV0dXJuIDQmbj9yfD0xOjImbiYmKHJ8PTQpLElyKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6em4odCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoVHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIrQyh0aGlzLmluc3RhbmNlLmNvbnN0cnVjdG9yKSsiIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpO3RoaXMuX2Rlc3Ryb3llZD0hMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Ll9kZWYscj1uZXcgU2V0LGk9MDtpPG4ucHJvdmlkZXJzLmxlbmd0aDtpKyspaWYoMTMxMDcyJm4ucHJvdmlkZXJzW2ldLmZsYWdzKXt2YXIgbz10Ll9wcm92aWRlcnNbaV07aWYobyYmbyE9PVNyKXt2YXIgYT1vLm5nT25EZXN0cm95OyJmdW5jdGlvbiIhPXR5cGVvZiBhfHxyLmhhcyhvKXx8KGEuYXBwbHkobyksci5hZGQobykpfX19KHRoaXMpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksbmk9em4oZnVuY3Rpb24oKXt9KSxyaT16bihjZSksaWk9em4oZmUpLG9pPXpuKGJlKSxhaT16bih2ZSksc2k9em4oX2UpLGxpPXpuKE4pLHVpPXpuKEkpO2Z1bmN0aW9uIGNpKHQsZSxuLGksbyxhLHMsbCl7dmFyIHU9W107aWYocylmb3IodmFyIGMgaW4gcyl7dmFyIGY9T2JqZWN0KHIuYykoc1tjXSwyKTt1W2ZbMF1dPXtmbGFnczo4LG5hbWU6Yyxub25NaW5pZmllZE5hbWU6ZlsxXSxuczpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX12YXIgaD1bXTtpZihsKWZvcih2YXIgcCBpbiBsKWgucHVzaCh7dHlwZToxLHByb3BOYW1lOnAsdGFyZ2V0Om51bGwsZXZlbnROYW1lOmxbcF19KTtyZXR1cm4gcGkodCxlfD0xNjM4NCxuLGksbyxvLGEsdSxoKX1mdW5jdGlvbiBmaSh0LGUsbil7cmV0dXJuIHBpKC0xLHR8PTE2LG51bGwsMCxlLGUsbil9ZnVuY3Rpb24gaGkodCxlLG4scixpKXtyZXR1cm4gcGkoLTEsdCxlLDAsbixyLGkpfWZ1bmN0aW9uIHBpKHQsZSxuLHIsaSxvLGEscyxsKXt2YXIgdT1vcihuKSxjPXUubWF0Y2hlZFF1ZXJpZXMsZj11LnJlZmVyZW5jZXMsaD11Lm1hdGNoZWRRdWVyeUlkcztsfHwobD1bXSksc3x8KHM9W10pLG89TyhvKTt2YXIgcD1hcihhLEMoaSkpO3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczplLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmMsbWF0Y2hlZFF1ZXJ5SWRzOmgscmVmZXJlbmNlczpmLG5nQ29udGVudEluZGV4Oi0xLGNoaWxkQ291bnQ6cixiaW5kaW5nczpzLGJpbmRpbmdGbGFnczpncihzKSxvdXRwdXRzOmwsZWxlbWVudDpudWxsLHByb3ZpZGVyOnt0b2tlbjppLHZhbHVlOm8sZGVwczpwfSx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gZGkodCxlKXtyZXR1cm4gdmkodCxlKX1mdW5jdGlvbiBtaSh0LGUpe2Zvcih2YXIgbj10O24ucGFyZW50JiYhbnIobik7KW49bi5wYXJlbnQ7cmV0dXJuIGJpKG4ucGFyZW50LHRyKG4pLCEwLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKX1mdW5jdGlvbiB5aSh0LGUpe3ZhciBuPWJpKHQsZS5wYXJlbnQsKDMyNzY4JmUuZmxhZ3MpPjAsZS5wcm92aWRlci52YWx1ZSxlLnByb3ZpZGVyLmRlcHMpO2lmKGUub3V0cHV0cy5sZW5ndGgpZm9yKHZhciByPTA7cjxlLm91dHB1dHMubGVuZ3RoO3IrKyl7dmFyIGk9ZS5vdXRwdXRzW3JdLG89bltpLnByb3BOYW1lXS5zdWJzY3JpYmUoZ2kodCxlLnBhcmVudC5ub2RlSW5kZXgsaS5ldmVudE5hbWUpKTt0LmRpc3Bvc2FibGVzW2Uub3V0cHV0SW5kZXgrcl09by51bnN1YnNjcmliZS5iaW5kKG8pfXJldHVybiBufWZ1bmN0aW9uIGdpKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuICRuKHQsZSxuLHIpfX1mdW5jdGlvbiB2aSh0LGUpe3ZhciBuPSg4MTkyJmUuZmxhZ3MpPjAsaT1lLnByb3ZpZGVyO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSA1MTI6cmV0dXJuIGJpKHQsZS5wYXJlbnQsbixpLnZhbHVlLGkuZGVwcyk7Y2FzZSAxMDI0OnJldHVybiBmdW5jdGlvbih0LGUsbixpLG8pe3ZhciBhPW8ubGVuZ3RoO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIGkoKTtjYXNlIDE6cmV0dXJuIGkod2kodCxlLG4sb1swXSkpO2Nhc2UgMjpyZXR1cm4gaSh3aSh0LGUsbixvWzBdKSx3aSh0LGUsbixvWzFdKSk7Y2FzZSAzOnJldHVybiBpKHdpKHQsZSxuLG9bMF0pLHdpKHQsZSxuLG9bMV0pLHdpKHQsZSxuLG9bMl0pKTtkZWZhdWx0OmZvcih2YXIgcz1BcnJheShhKSxsPTA7bDxhO2wrKylzW2xdPXdpKHQsZSxuLG9bbF0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShzKSl9fSh0LGUucGFyZW50LG4saS52YWx1ZSxpLmRlcHMpO2Nhc2UgMjA0ODpyZXR1cm4gd2kodCxlLnBhcmVudCxuLGkuZGVwc1swXSk7Y2FzZSAyNTY6cmV0dXJuIGkudmFsdWV9fWZ1bmN0aW9uIGJpKHQsZSxuLGksbyl7dmFyIGE9by5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gbmV3IGk7Y2FzZSAxOnJldHVybiBuZXcgaSh3aSh0LGUsbixvWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgaSh3aSh0LGUsbixvWzBdKSx3aSh0LGUsbixvWzFdKSk7Y2FzZSAzOnJldHVybiBuZXcgaSh3aSh0LGUsbixvWzBdKSx3aSh0LGUsbixvWzFdKSx3aSh0LGUsbixvWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHM9bmV3IEFycmF5KGEpLGw9MDtsPGE7bCsrKXNbbF09d2kodCxlLG4sb1tsXSk7cmV0dXJuIG5ldyhpLmJpbmQuYXBwbHkoaSxPYmplY3Qoci5kKShbdm9pZCAwXSxzKSkpfX12YXIgX2k9e307ZnVuY3Rpb24gd2kodCxlLG4scixpKXtpZih2b2lkIDA9PT1pJiYoaT1OLlRIUk9XX0lGX05PVF9GT1VORCksOCZyLmZsYWdzKXJldHVybiByLnRva2VuO3ZhciBvPXQ7MiZyLmZsYWdzJiYoaT1udWxsKTt2YXIgYT1yLnRva2VuS2V5O2E9PT1zaSYmKG49ISghZXx8IWUuZWxlbWVudC5jb21wb25lbnRWaWV3KSksZSYmMSZyLmZsYWdzJiYobj0hMSxlPWUucGFyZW50KTtmb3IodmFyIHM9dDtzOyl7aWYoZSlzd2l0Y2goYSl7Y2FzZSBuaTpyZXR1cm4gJHIoeGkocyxlLG4pKTtjYXNlIHJpOnJldHVybiB4aShzLGUsbikucmVuZGVyZXI7Y2FzZSBpaTpyZXR1cm4gbmV3IGZlKGpuKHMsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Nhc2Ugb2k6cmV0dXJuIGpuKHMsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXI7Y2FzZSBhaTppZihlLmVsZW1lbnQudGVtcGxhdGUpcmV0dXJuIGpuKHMsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2JyZWFrO2Nhc2Ugc2k6cmV0dXJuIHFyKHhpKHMsZSxuKSk7Y2FzZSBsaTpjYXNlIHVpOnJldHVybiBacihzLGUpO2RlZmF1bHQ6dmFyIGw9KG4/ZS5lbGVtZW50LmFsbFByb3ZpZGVyczplLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKVthXTtpZihsKXt2YXIgdT1JbihzLGwubm9kZUluZGV4KTtyZXR1cm4gdXx8KHU9e2luc3RhbmNlOnZpKHMsbCl9LHMubm9kZXNbbC5ub2RlSW5kZXhdPXUpLHUuaW5zdGFuY2V9fW49bnIocyksZT10cihzKSxzPXMucGFyZW50LDQmci5mbGFncyYmKHM9bnVsbCl9dmFyIGM9by5yb290LmluamVjdG9yLmdldChyLnRva2VuLF9pKTtyZXR1cm4gYyE9PV9pfHxpPT09X2k/YzpvLnJvb3QubmdNb2R1bGUuaW5qZWN0b3IuZ2V0KHIudG9rZW4saSl9ZnVuY3Rpb24geGkodCxlLG4pe3ZhciByO2lmKG4pcj1qbih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3O2Vsc2UgZm9yKHI9dDtyLnBhcmVudCYmIW5yKHIpOylyPXIucGFyZW50O3JldHVybiByfWZ1bmN0aW9uIENpKHQsZSxuLHIsaSxvKXtpZigzMjc2OCZuLmZsYWdzKXt2YXIgYT1qbih0LG4ucGFyZW50Lm5vZGVJbmRleCkuY29tcG9uZW50VmlldzsyJmEuZGVmLmZsYWdzJiYoYS5zdGF0ZXw9OCl9aWYoZS5pbnN0YW5jZVtuLmJpbmRpbmdzW3JdLm5hbWVdPWksNTI0Mjg4Jm4uZmxhZ3Mpe289b3x8e307dmFyIHM9QWUudW53cmFwKHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdKTtvW24uYmluZGluZ3Nbcl0ubm9uTWluaWZpZWROYW1lXT1uZXcgamUocyxpLDAhPSgyJnQuc3RhdGUpKX1yZXR1cm4gdC5vbGRWYWx1ZXNbbi5iaW5kaW5nSW5kZXgrcl09aSxvfWZ1bmN0aW9uIEVpKHQsZSl7aWYodC5kZWYubm9kZUZsYWdzJmUpZm9yKHZhciBuPXQuZGVmLm5vZGVzLHI9MCxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV0sYT1vLnBhcmVudDtmb3IoIWEmJm8uZmxhZ3MmZSYmU2kodCxpLG8uZmxhZ3MmZSxyKyspLDA9PShvLmNoaWxkRmxhZ3MmZSkmJihpKz1vLmNoaWxkQ291bnQpO2EmJjEmYS5mbGFncyYmaT09PWEubm9kZUluZGV4K2EuY2hpbGRDb3VudDspYS5kaXJlY3RDaGlsZEZsYWdzJmUmJihyPU9pKHQsYSxlLHIpKSxhPWEucGFyZW50fX1mdW5jdGlvbiBPaSh0LGUsbixyKXtmb3IodmFyIGk9ZS5ub2RlSW5kZXgrMTtpPD1lLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ7aSsrKXt2YXIgbz10LmRlZi5ub2Rlc1tpXTtvLmZsYWdzJm4mJlNpKHQsaSxvLmZsYWdzJm4scisrKSxpKz1vLmNoaWxkQ291bnR9cmV0dXJuIHJ9ZnVuY3Rpb24gU2kodCxlLG4scil7dmFyIGk9SW4odCxlKTtpZihpKXt2YXIgbz1pLmluc3RhbmNlO28mJihSbi5zZXRDdXJyZW50Tm9kZSh0LGUpLDEwNDg1NzYmbiYmUG4odCw1MTIscikmJm8ubmdBZnRlckNvbnRlbnRJbml0KCksMjA5NzE1MiZuJiZvLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpLDQxOTQzMDQmbiYmUG4odCw3NjgscikmJm8ubmdBZnRlclZpZXdJbml0KCksODM4ODYwOCZuJiZvLm5nQWZ0ZXJWaWV3Q2hlY2tlZCgpLDEzMTA3MiZuJiZvLm5nT25EZXN0cm95KCkpfX1mdW5jdGlvbiBraSh0LGUsbil7dmFyIHI9W107Zm9yKHZhciBpIGluIG4pci5wdXNoKHtwcm9wTmFtZTppLGJpbmRpbmdUeXBlOm5baV19KTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4Oi0xLGZsYWdzOnQsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbmdDb250ZW50SW5kZXg6LTEsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxjaGlsZENvdW50OjAsYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6e2lkOmUsZmlsdGVySWQ6aXIoZSksYmluZGluZ3M6cn0sbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIFRpKHQpe2Zvcih2YXIgZT10LmRlZi5ub2RlTWF0Y2hlZFF1ZXJpZXM7dC5wYXJlbnQmJnJyKHQpOyl7dmFyIG49dC5wYXJlbnROb2RlRGVmO3Q9dC5wYXJlbnQ7Zm9yKHZhciByPW4ubm9kZUluZGV4K24uY2hpbGRDb3VudCxpPTA7aTw9cjtpKyspNjcxMDg4NjQmKG89dC5kZWYubm9kZXNbaV0pLmZsYWdzJiY1MzY4NzA5MTImby5mbGFncyYmKG8ucXVlcnkuZmlsdGVySWQmZSk9PT1vLnF1ZXJ5LmZpbHRlcklkJiZObih0LGkpLnNldERpcnR5KCksISgxJm8uZmxhZ3MmJmkrby5jaGlsZENvdW50PG4ubm9kZUluZGV4KSYmNjcxMDg4NjQmby5jaGlsZEZsYWdzJiY1MzY4NzA5MTImby5jaGlsZEZsYWdzfHwoaSs9by5jaGlsZENvdW50KX1pZigxMzQyMTc3MjgmdC5kZWYubm9kZUZsYWdzKWZvcihpPTA7aTx0LmRlZi5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgbzsxMzQyMTc3MjgmKG89dC5kZWYubm9kZXNbaV0pLmZsYWdzJiY1MzY4NzA5MTImby5mbGFncyYmTm4odCxpKS5zZXREaXJ0eSgpLGkrPW8uY2hpbGRDb3VudH19ZnVuY3Rpb24gUGkodCxlKXt2YXIgbj1Obih0LGUubm9kZUluZGV4KTtpZihuLmRpcnR5KXt2YXIgcixpPXZvaWQgMDtpZig2NzEwODg2NCZlLmZsYWdzKXt2YXIgbz1lLnBhcmVudC5wYXJlbnQ7aT1BaSh0LG8ubm9kZUluZGV4LG8ubm9kZUluZGV4K28uY2hpbGRDb3VudCxlLnF1ZXJ5LFtdKSxyPUluKHQsZS5wYXJlbnQubm9kZUluZGV4KS5pbnN0YW5jZX1lbHNlIDEzNDIxNzcyOCZlLmZsYWdzJiYoaT1BaSh0LDAsdC5kZWYubm9kZXMubGVuZ3RoLTEsZS5xdWVyeSxbXSkscj10LmNvbXBvbmVudCk7bi5yZXNldChpKTtmb3IodmFyIGE9ZS5xdWVyeS5iaW5kaW5ncyxzPSExLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxjPXZvaWQgMDtzd2l0Y2godS5iaW5kaW5nVHlwZSl7Y2FzZSAwOmM9bi5maXJzdDticmVhaztjYXNlIDE6Yz1uLHM9ITB9clt1LnByb3BOYW1lXT1jfXMmJm4ubm90aWZ5T25DaGFuZ2VzKCl9fWZ1bmN0aW9uIEFpKHQsZSxuLHIsaSl7Zm9yKHZhciBvPWU7bzw9bjtvKyspe3ZhciBhPXQuZGVmLm5vZGVzW29dLHM9YS5tYXRjaGVkUXVlcmllc1tyLmlkXTtpZihudWxsIT1zJiZpLnB1c2goamkodCxhLHMpKSwxJmEuZmxhZ3MmJmEuZWxlbWVudC50ZW1wbGF0ZSYmKGEuZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkKXt2YXIgbD1qbih0LG8pO2lmKChhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkJiYoQWkodCxvKzEsbythLmNoaWxkQ291bnQscixpKSxvKz1hLmNoaWxkQ291bnQpLDE2Nzc3MjE2JmEuZmxhZ3MpZm9yKHZhciB1PWwudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxjPTA7Yzx1Lmxlbmd0aDtjKyspe3ZhciBmPXVbY10saD1KbihmKTtoJiZoPT09bCYmQWkoZiwwLGYuZGVmLm5vZGVzLmxlbmd0aC0xLHIsaSl9dmFyIHA9bC50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYocClmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXt2YXIgZD1wW2NdO0FpKGQsMCxkLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLGkpfX0oYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpIT09ci5maWx0ZXJJZCYmKG8rPWEuY2hpbGRDb3VudCl9cmV0dXJuIGl9ZnVuY3Rpb24gamkodCxlLG4pe2lmKG51bGwhPW4pc3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gam4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtjYXNlIDA6cmV0dXJuIG5ldyBmZShqbih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIDI6cmV0dXJuIGpuKHQsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2Nhc2UgMzpyZXR1cm4gam4odCxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIDQ6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLmluc3RhbmNlfX1mdW5jdGlvbiBJaSh0LGUpe3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6LTEsZmxhZ3M6OCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OnQsY2hpbGRDb3VudDowLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50OntpbmRleDplfX19ZnVuY3Rpb24gTWkodCxlLG4pe3ZhciByPXNyKHQsZSxuKTtyJiZocih0LG4ubmdDb250ZW50LmluZGV4LDEscixudWxsLHZvaWQgMCl9ZnVuY3Rpb24gTmkodCxlKXtyZXR1cm4gRmkoMTI4LHQsbmV3IEFycmF5KGUrMSkpfWZ1bmN0aW9uIFJpKHQsZSl7cmV0dXJuIEZpKDMyLHQsbmV3IEFycmF5KGUpKX1mdW5jdGlvbiBEaSh0LGUpe2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7bysrKXt2YXIgYT1uW29dO2lbZVthXV09YX1yZXR1cm4gRmkoNjQsdCxpKX1mdW5jdGlvbiBGaSh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheShuLmxlbmd0aCksaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO3JbaV09e2ZsYWdzOjgsbmFtZTpvLG5zOm51bGwsbm9uTWluaWZpZWROYW1lOm8sc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om51bGx9fXJldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6ZSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5kZXg6LTEsY2hpbGRDb3VudDowLGJpbmRpbmdzOnIsYmluZGluZ0ZsYWdzOmdyKHIpLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIExpKHQsZSxuKXtmb3IodmFyIHI9bmV3IEFycmF5KG4ubGVuZ3RoLTEpLGk9MTtpPG4ubGVuZ3RoO2krKylyW2ktMV09e2ZsYWdzOjgsbmFtZTpudWxsLG5zOm51bGwsbm9uTWluaWZpZWROYW1lOm51bGwsc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om5baV19O3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczoyLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5kZXg6ZSxjaGlsZENvdW50OjAsYmluZGluZ3M6cixiaW5kaW5nRmxhZ3M6OCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6e3ByZWZpeDpuWzBdfSxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBWaSh0LGUsbil7dmFyIHIsaT10LnJlbmRlcmVyO3I9aS5jcmVhdGVUZXh0KG4udGV4dC5wcmVmaXgpO3ZhciBvPXNyKHQsZSxuKTtyZXR1cm4gbyYmaS5hcHBlbmRDaGlsZChvLHIpLHtyZW5kZXJUZXh0OnJ9fWZ1bmN0aW9uIEJpKHQsZSl7cmV0dXJuKG51bGwhPXQ/dC50b1N0cmluZygpOiIiKStlLnN1ZmZpeH1mdW5jdGlvbiB6aSh0LGUsbixyKXtmb3IodmFyIGk9MCxvPTAsYT0wLHM9MCxsPTAsdT1udWxsLGM9bnVsbCxmPSExLGg9ITEscD1udWxsLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIG09ZVtkXTtpZihtLm5vZGVJbmRleD1kLG0ucGFyZW50PXUsbS5iaW5kaW5nSW5kZXg9aSxtLm91dHB1dEluZGV4PW8sbS5yZW5kZXJQYXJlbnQ9YyxhfD1tLmZsYWdzLGx8PW0ubWF0Y2hlZFF1ZXJ5SWRzLG0uZWxlbWVudCl7dmFyIHk9bS5lbGVtZW50O3kucHVibGljUHJvdmlkZXJzPXU/dS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVyczpPYmplY3QuY3JlYXRlKG51bGwpLHkuYWxsUHJvdmlkZXJzPXkucHVibGljUHJvdmlkZXJzLGY9ITEsaD0hMSxtLmVsZW1lbnQudGVtcGxhdGUmJihsfD1tLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKX1pZihIaSh1LG0sZS5sZW5ndGgpLGkrPW0uYmluZGluZ3MubGVuZ3RoLG8rPW0ub3V0cHV0cy5sZW5ndGgsIWMmJjMmbS5mbGFncyYmKHA9bSksMjAyMjQmbS5mbGFncyl7Znx8KGY9ITAsdS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycz1PYmplY3QuY3JlYXRlKHUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpLHUuZWxlbWVudC5hbGxQcm92aWRlcnM9dS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycyk7dmFyIGc9MCE9KDMyNzY4Jm0uZmxhZ3MpOzA9PSg4MTkyJm0uZmxhZ3MpfHxnP3UuZWxlbWVudC5wdWJsaWNQcm92aWRlcnNbem4obS5wcm92aWRlci50b2tlbildPW06KGh8fChoPSEwLHUuZWxlbWVudC5hbGxQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZSh1LmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSksdS5lbGVtZW50LmFsbFByb3ZpZGVyc1t6bihtLnByb3ZpZGVyLnRva2VuKV09bSksZyYmKHUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlcj1tKX1pZih1Pyh1LmNoaWxkRmxhZ3N8PW0uZmxhZ3MsdS5kaXJlY3RDaGlsZEZsYWdzfD1tLmZsYWdzLHUuY2hpbGRNYXRjaGVkUXVlcmllc3w9bS5tYXRjaGVkUXVlcnlJZHMsbS5lbGVtZW50JiZtLmVsZW1lbnQudGVtcGxhdGUmJih1LmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PW0uZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMpKTpzfD1tLmZsYWdzLG0uY2hpbGRDb3VudD4wKXU9bSxVaShtKXx8KGM9bSk7ZWxzZSBmb3IoO3UmJmQ9PT11Lm5vZGVJbmRleCt1LmNoaWxkQ291bnQ7KXt2YXIgdj11LnBhcmVudDt2JiYodi5jaGlsZEZsYWdzfD11LmNoaWxkRmxhZ3Msdi5jaGlsZE1hdGNoZWRRdWVyaWVzfD11LmNoaWxkTWF0Y2hlZFF1ZXJpZXMpLGM9KHU9dikmJlVpKHUpP3UucmVuZGVyUGFyZW50OnV9fXJldHVybntmYWN0b3J5Om51bGwsbm9kZUZsYWdzOmEscm9vdE5vZGVGbGFnczpzLG5vZGVNYXRjaGVkUXVlcmllczpsLGZsYWdzOnQsbm9kZXM6ZSx1cGRhdGVEaXJlY3RpdmVzOm58fFZuLHVwZGF0ZVJlbmRlcmVyOnJ8fFZuLGhhbmRsZUV2ZW50OmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiBlW25dLmVsZW1lbnQuaGFuZGxlRXZlbnQodCxyLGkpfSxiaW5kaW5nQ291bnQ6aSxvdXRwdXRDb3VudDpvLGxhc3RSZW5kZXJSb290Tm9kZTpwfX1mdW5jdGlvbiBVaSh0KXtyZXR1cm4gMCE9KDEmdC5mbGFncykmJm51bGw9PT10LmVsZW1lbnQubmFtZX1mdW5jdGlvbiBIaSh0LGUsbil7dmFyIHI9ZS5lbGVtZW50JiZlLmVsZW1lbnQudGVtcGxhdGU7aWYocil7aWYoIXIubGFzdFJlbmRlclJvb3ROb2RlKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogRW1iZWRkZWQgdGVtcGxhdGVzIHdpdGhvdXQgbm9kZXMgYXJlIG5vdCBhbGxvd2VkISIpO2lmKHIubGFzdFJlbmRlclJvb3ROb2RlJiYxNjc3NzIxNiZyLmxhc3RSZW5kZXJSb290Tm9kZS5mbGFncyl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IExhc3Qgcm9vdCBub2RlIG9mIGEgdGVtcGxhdGUgY2FuJ3QgaGF2ZSBlbWJlZGRlZCB2aWV3cywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKDIwMjI0JmUuZmxhZ3MmJjA9PSgxJih0P3QuZmxhZ3M6MCkpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogU3RhdGljUHJvdmlkZXIvRGlyZWN0aXZlIG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZWxlbWVudHMgb3IgYW5jaG9ycywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKGUucXVlcnkpe2lmKDY3MTA4ODY0JmUuZmxhZ3MmJighdHx8MD09KDE2Mzg0JnQuZmxhZ3MpKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IENvbnRlbnQgUXVlcnkgbm9kZXMgbmVlZCB0byBiZSBjaGlsZHJlbiBvZiBkaXJlY3RpdmVzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIik7aWYoMTM0MjE3NzI4JmUuZmxhZ3MmJnQpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBWaWV3IFF1ZXJ5IG5vZGVzIGhhdmUgdG8gYmUgdG9wIGxldmVsIG5vZGVzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9aWYoZS5jaGlsZENvdW50KXt2YXIgaT10P3Qubm9kZUluZGV4K3QuY2hpbGRDb3VudDpuLTE7aWYoZS5ub2RlSW5kZXg8PWkmJmUubm9kZUluZGV4K2UuY2hpbGRDb3VudD5pKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogY2hpbGRDb3VudCBvZiBub2RlIGxlYWRzIG91dHNpZGUgb2YgcGFyZW50LCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9fWZ1bmN0aW9uIFFpKHQsZSxuLHIpe3ZhciBpPVlpKHQucm9vdCx0LnJlbmRlcmVyLHQsZSxuKTtyZXR1cm4gV2koaSx0LmNvbXBvbmVudCxyKSxaaShpKSxpfWZ1bmN0aW9uIHFpKHQsZSxuKXt2YXIgcj1ZaSh0LHQucmVuZGVyZXIsbnVsbCxudWxsLGUpO3JldHVybiBXaShyLG4sbiksWmkocikscn1mdW5jdGlvbiBHaSh0LGUsbixyKXt2YXIgaSxvPWUuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGU7cmV0dXJuIGk9bz90LnJvb3QucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHIsbyk6dC5yb290LnJlbmRlcmVyLFlpKHQucm9vdCxpLHQsZS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLG4pfWZ1bmN0aW9uIFlpKHQsZSxuLHIsaSl7dmFyIG89bmV3IEFycmF5KGkubm9kZXMubGVuZ3RoKSxhPWkub3V0cHV0Q291bnQ/bmV3IEFycmF5KGkub3V0cHV0Q291bnQpOm51bGw7cmV0dXJue2RlZjppLHBhcmVudDpuLHZpZXdDb250YWluZXJQYXJlbnQ6bnVsbCxwYXJlbnROb2RlRGVmOnIsY29udGV4dDpudWxsLGNvbXBvbmVudDpudWxsLG5vZGVzOm8sc3RhdGU6MTMscm9vdDp0LHJlbmRlcmVyOmUsb2xkVmFsdWVzOm5ldyBBcnJheShpLmJpbmRpbmdDb3VudCksZGlzcG9zYWJsZXM6YSxpbml0SW5kZXg6LTF9fWZ1bmN0aW9uIFdpKHQsZSxuKXt0LmNvbXBvbmVudD1lLHQuY29udGV4dD1ufWZ1bmN0aW9uIFppKHQpe3ZhciBlO25yKHQpJiYoZT1qbih0LnBhcmVudCx0LnBhcmVudE5vZGVEZWYucGFyZW50Lm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Zm9yKHZhciBuPXQuZGVmLHI9dC5ub2RlcyxpPTA7aTxuLm5vZGVzLmxlbmd0aDtpKyspe3ZhciBvPW4ubm9kZXNbaV07Um4uc2V0Q3VycmVudE5vZGUodCxpKTt2YXIgYT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZvLmZsYWdzKXtjYXNlIDE6dmFyIHM9eHIodCxlLG8pLGw9dm9pZCAwO2lmKDMzNTU0NDMyJm8uZmxhZ3Mpe3ZhciB1PXVyKG8uZWxlbWVudC5jb21wb25lbnRWaWV3KTtsPVJuLmNyZWF0ZUNvbXBvbmVudFZpZXcodCxvLHUscyl9Q3IodCxsLG8scyksYT17cmVuZGVyRWxlbWVudDpzLGNvbXBvbmVudFZpZXc6bCx2aWV3Q29udGFpbmVyOm51bGwsdGVtcGxhdGU6by5lbGVtZW50LnRlbXBsYXRlP1lyKHQsbyk6dm9pZCAwfSwxNjc3NzIxNiZvLmZsYWdzJiYoYS52aWV3Q29udGFpbmVyPUhyKHQsbyxhKSk7YnJlYWs7Y2FzZSAyOmE9VmkodCxlLG8pO2JyZWFrO2Nhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSAyNTY6KGE9cltpXSl8fDQwOTYmby5mbGFnc3x8KGE9e2luc3RhbmNlOmRpKHQsbyl9KTticmVhaztjYXNlIDE2OmE9e2luc3RhbmNlOm1pKHQsbyl9O2JyZWFrO2Nhc2UgMTYzODQ6KGE9cltpXSl8fChhPXtpbnN0YW5jZTp5aSh0LG8pfSksMzI3Njgmby5mbGFncyYmV2koam4odCxvLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXcsYS5pbnN0YW5jZSxhLmluc3RhbmNlKTticmVhaztjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6YT17dmFsdWU6dm9pZCAwfTticmVhaztjYXNlIDY3MTA4ODY0OmNhc2UgMTM0MjE3NzI4OmE9bmV3IHBlO2JyZWFrO2Nhc2UgODpNaSh0LGUsbyksYT12b2lkIDB9cltpXT1hfWlvKHQscm8uQ3JlYXRlVmlld05vZGVzKSxsbyh0LDIwMTMyNjU5MiwyNjg0MzU0NTYsMCl9ZnVuY3Rpb24gS2kodCl7SmkodCksUm4udXBkYXRlRGlyZWN0aXZlcyh0LDEpLG9vKHQscm8uQ2hlY2tOb0NoYW5nZXMpLFJuLnVwZGF0ZVJlbmRlcmVyKHQsMSksaW8odCxyby5DaGVja05vQ2hhbmdlcyksdC5zdGF0ZSY9LTk3fWZ1bmN0aW9uIFhpKHQpezEmdC5zdGF0ZT8odC5zdGF0ZSY9LTIsdC5zdGF0ZXw9Mik6dC5zdGF0ZSY9LTMsVG4odCwwLDI1NiksSmkodCksUm4udXBkYXRlRGlyZWN0aXZlcyh0LDApLG9vKHQscm8uQ2hlY2tBbmRVcGRhdGUpLGxvKHQsNjcxMDg4NjQsNTM2ODcwOTEyLDApO3ZhciBlPVRuKHQsMjU2LDUxMik7RWkodCwyMDk3MTUyfChlPzEwNDg1NzY6MCkpLFJuLnVwZGF0ZVJlbmRlcmVyKHQsMCksaW8odCxyby5DaGVja0FuZFVwZGF0ZSksbG8odCwxMzQyMTc3MjgsNTM2ODcwOTEyLDApLEVpKHQsODM4ODYwOHwoKGU9VG4odCw1MTIsNzY4KSk/NDE5NDMwNDowKSksMiZ0LmRlZi5mbGFncyYmKHQuc3RhdGUmPS05KSx0LnN0YXRlJj0tOTcsVG4odCw3NjgsMTAyNCl9ZnVuY3Rpb24gJGkodCxlLG4saSxvLGEscyxsLHUsYyxmLGgscCl7cmV0dXJuIDA9PT1uP2Z1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpe3ZhciBoPWUuYmluZGluZ3MubGVuZ3RoLHA9ITE7cmV0dXJuIGg+MCYmT3IodCxlLDAsbikmJihwPSEwKSxoPjEmJk9yKHQsZSwxLHIpJiYocD0hMCksaD4yJiZPcih0LGUsMixpKSYmKHA9ITApLGg+MyYmT3IodCxlLDMsbykmJihwPSEwKSxoPjQmJk9yKHQsZSw0LGEpJiYocD0hMCksaD41JiZPcih0LGUsNSxzKSYmKHA9ITApLGg+NiYmT3IodCxlLDYsbCkmJihwPSEwKSxoPjcmJk9yKHQsZSw3LHUpJiYocD0hMCksaD44JiZPcih0LGUsOCxjKSYmKHA9ITApLGg+OSYmT3IodCxlLDksZikmJihwPSEwKSxwfSh0LGUsbixyLGksbyxhLHMsbCx1LGMsZik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1LGMsZil7dmFyIGg9ITEscD1lLmJpbmRpbmdzLGQ9cC5sZW5ndGg7aWYoZD4wJiZXbih0LGUsMCxuKSYmKGg9ITApLGQ+MSYmV24odCxlLDEscikmJihoPSEwKSxkPjImJlduKHQsZSwyLGkpJiYoaD0hMCksZD4zJiZXbih0LGUsMyxvKSYmKGg9ITApLGQ+NCYmV24odCxlLDQsYSkmJihoPSEwKSxkPjUmJlduKHQsZSw1LHMpJiYoaD0hMCksZD42JiZXbih0LGUsNixsKSYmKGg9ITApLGQ+NyYmV24odCxlLDcsdSkmJihoPSEwKSxkPjgmJlduKHQsZSw4LGMpJiYoaD0hMCksZD45JiZXbih0LGUsOSxmKSYmKGg9ITApLGgpe3ZhciBtPWUudGV4dC5wcmVmaXg7ZD4wJiYobSs9QmkobixwWzBdKSksZD4xJiYobSs9QmkocixwWzFdKSksZD4yJiYobSs9QmkoaSxwWzJdKSksZD4zJiYobSs9QmkobyxwWzNdKSksZD40JiYobSs9QmkoYSxwWzRdKSksZD41JiYobSs9QmkocyxwWzVdKSksZD42JiYobSs9QmkobCxwWzZdKSksZD43JiYobSs9QmkodSxwWzddKSksZD44JiYobSs9QmkoYyxwWzhdKSksZD45JiYobSs9QmkoZixwWzldKSk7dmFyIHk9QW4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHksbSl9cmV0dXJuIGh9KHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1LGMsZil7dmFyIGg9SW4odCxlLm5vZGVJbmRleCkscD1oLmluc3RhbmNlLGQ9ITEsbT12b2lkIDAseT1lLmJpbmRpbmdzLmxlbmd0aDtyZXR1cm4geT4wJiZZbih0LGUsMCxuKSYmKGQ9ITAsbT1DaSh0LGgsZSwwLG4sbSkpLHk+MSYmWW4odCxlLDEscikmJihkPSEwLG09Q2kodCxoLGUsMSxyLG0pKSx5PjImJlluKHQsZSwyLGkpJiYoZD0hMCxtPUNpKHQsaCxlLDIsaSxtKSkseT4zJiZZbih0LGUsMyxvKSYmKGQ9ITAsbT1DaSh0LGgsZSwzLG8sbSkpLHk+NCYmWW4odCxlLDQsYSkmJihkPSEwLG09Q2kodCxoLGUsNCxhLG0pKSx5PjUmJlluKHQsZSw1LHMpJiYoZD0hMCxtPUNpKHQsaCxlLDUscyxtKSkseT42JiZZbih0LGUsNixsKSYmKGQ9ITAsbT1DaSh0LGgsZSw2LGwsbSkpLHk+NyYmWW4odCxlLDcsdSkmJihkPSEwLG09Q2kodCxoLGUsNyx1LG0pKSx5PjgmJlluKHQsZSw4LGMpJiYoZD0hMCxtPUNpKHQsaCxlLDgsYyxtKSkseT45JiZZbih0LGUsOSxmKSYmKGQ9ITAsbT1DaSh0LGgsZSw5LGYsbSkpLG0mJnAubmdPbkNoYW5nZXMobSksNjU1MzYmZS5mbGFncyYmUG4odCwyNTYsZS5ub2RlSW5kZXgpJiZwLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJnAubmdEb0NoZWNrKCksZH0odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpe3ZhciBoPWUuYmluZGluZ3MscD0hMSxkPWgubGVuZ3RoO2lmKGQ+MCYmV24odCxlLDAsbikmJihwPSEwKSxkPjEmJlduKHQsZSwxLHIpJiYocD0hMCksZD4yJiZXbih0LGUsMixpKSYmKHA9ITApLGQ+MyYmV24odCxlLDMsbykmJihwPSEwKSxkPjQmJlduKHQsZSw0LGEpJiYocD0hMCksZD41JiZXbih0LGUsNSxzKSYmKHA9ITApLGQ+NiYmV24odCxlLDYsbCkmJihwPSEwKSxkPjcmJlduKHQsZSw3LHUpJiYocD0hMCksZD44JiZXbih0LGUsOCxjKSYmKHA9ITApLGQ+OSYmV24odCxlLDksZikmJihwPSEwKSxwKXt2YXIgbT1Nbih0LGUubm9kZUluZGV4KSx5PXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6eT1uZXcgQXJyYXkoaC5sZW5ndGgpLGQ+MCYmKHlbMF09biksZD4xJiYoeVsxXT1yKSxkPjImJih5WzJdPWkpLGQ+MyYmKHlbM109byksZD40JiYoeVs0XT1hKSxkPjUmJih5WzVdPXMpLGQ+NiYmKHlbNl09bCksZD43JiYoeVs3XT11KSxkPjgmJih5WzhdPWMpLGQ+OSYmKHlbOV09Zik7YnJlYWs7Y2FzZSA2NDp5PXt9LGQ+MCYmKHlbaFswXS5uYW1lXT1uKSxkPjEmJih5W2hbMV0ubmFtZV09ciksZD4yJiYoeVtoWzJdLm5hbWVdPWkpLGQ+MyYmKHlbaFszXS5uYW1lXT1vKSxkPjQmJih5W2hbNF0ubmFtZV09YSksZD41JiYoeVtoWzVdLm5hbWVdPXMpLGQ+NiYmKHlbaFs2XS5uYW1lXT1sKSxkPjcmJih5W2hbN10ubmFtZV09dSksZD44JiYoeVtoWzhdLm5hbWVdPWMpLGQ+OSYmKHlbaFs5XS5uYW1lXT1mKTticmVhaztjYXNlIDEyODp2YXIgZz1uO3N3aXRjaChkKXtjYXNlIDE6eT1nLnRyYW5zZm9ybShuKTticmVhaztjYXNlIDI6eT1nLnRyYW5zZm9ybShyKTticmVhaztjYXNlIDM6eT1nLnRyYW5zZm9ybShyLGkpO2JyZWFrO2Nhc2UgNDp5PWcudHJhbnNmb3JtKHIsaSxvKTticmVhaztjYXNlIDU6eT1nLnRyYW5zZm9ybShyLGksbyxhKTticmVhaztjYXNlIDY6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMpO2JyZWFrO2Nhc2UgNzp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyxsKTticmVhaztjYXNlIDg6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsbCx1KTticmVhaztjYXNlIDk6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsbCx1LGMpO2JyZWFrO2Nhc2UgMTA6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsbCx1LGMsZil9fW0udmFsdWU9eX1yZXR1cm4gcH0odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLGksbyxhLHMsbCx1LGMsZixoLHApOmZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0hMSxpPTA7aTxuLmxlbmd0aDtpKyspT3IodCxlLGksbltpXSkmJihyPSEwKTtyZXR1cm4gcn0odCxlLG4pO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1lLmJpbmRpbmdzLGk9ITEsbz0wO288bi5sZW5ndGg7bysrKVduKHQsZSxvLG5bb10pJiYoaT0hMCk7aWYoaSl7dmFyIGE9IiI7Zm9yKG89MDtvPG4ubGVuZ3RoO28rKylhKz1CaShuW29dLHJbb10pO2E9ZS50ZXh0LnByZWZpeCthO3ZhciBzPUFuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZShzLGEpfXJldHVybiBpfSh0LGUsbik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1Jbih0LGUubm9kZUluZGV4KSxpPXIuaW5zdGFuY2Usbz0hMSxhPXZvaWQgMCxzPTA7czxuLmxlbmd0aDtzKyspWW4odCxlLHMsbltzXSkmJihvPSEwLGE9Q2kodCxyLGUscyxuW3NdLGEpKTtyZXR1cm4gYSYmaS5uZ09uQ2hhbmdlcyhhKSw2NTUzNiZlLmZsYWdzJiZQbih0LDI1NixlLm5vZGVJbmRleCkmJmkubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmaS5uZ0RvQ2hlY2soKSxvfSh0LGUsbik7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPWUuYmluZGluZ3Msbz0hMSxhPTA7YTxuLmxlbmd0aDthKyspV24odCxlLGEsblthXSkmJihvPSEwKTtpZihvKXt2YXIgcz1Nbih0LGUubm9kZUluZGV4KSxsPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6bD1uO2JyZWFrO2Nhc2UgNjQ6Zm9yKGw9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWxbaVthXS5uYW1lXT1uW2FdO2JyZWFrO2Nhc2UgMTI4OnZhciB1PW5bMF0sYz1uLnNsaWNlKDEpO2w9dS50cmFuc2Zvcm0uYXBwbHkodSxPYmplY3Qoci5kKShjKSl9cy52YWx1ZT1sfXJldHVybiBvfSh0LGUsbik7ZGVmYXVsdDp0aHJvdyJ1bnJlYWNoYWJsZSJ9fSh0LGUsaSl9ZnVuY3Rpb24gSmkodCl7dmFyIGU9dC5kZWY7aWYoNCZlLm5vZGVGbGFncylmb3IodmFyIG49MDtuPGUubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9ZS5ub2Rlc1tuXTtpZig0JnIuZmxhZ3Mpe3ZhciBpPWpuKHQsbikudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO2lmKGkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPWlbb107YS5zdGF0ZXw9MzIsWG4oYSx0KX19ZWxzZSAwPT0oNCZyLmNoaWxkRmxhZ3MpJiYobis9ci5jaGlsZENvdW50KX19ZnVuY3Rpb24gdG8odCxlLG4scixpLG8sYSxzLGwsdSxjLGYsaCl7cmV0dXJuIDA9PT1uP2Z1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLmxlbmd0aDtoPjAmJlpuKHQsZSwwLG4pLGg+MSYmWm4odCxlLDEsciksaD4yJiZabih0LGUsMixpKSxoPjMmJlpuKHQsZSwzLG8pLGg+NCYmWm4odCxlLDQsYSksaD41JiZabih0LGUsNSxzKSxoPjYmJlpuKHQsZSw2LGwpLGg+NyYmWm4odCxlLDcsdSksaD44JiZabih0LGUsOCxjKSxoPjkmJlpuKHQsZSw5LGYpfSh0LGUscixpLG8sYSxzLGwsdSxjLGYsaCk6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKVpuKHQsZSxyLG5bcl0pfSh0LGUsciksITF9ZnVuY3Rpb24gZW8odCxlKXtpZihObih0LGUubm9kZUluZGV4KS5kaXJ0eSl0aHJvdyBEbihSbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksIlF1ZXJ5ICIrZS5xdWVyeS5pZCsiIG5vdCBkaXJ0eSIsIlF1ZXJ5ICIrZS5xdWVyeS5pZCsiIGRpcnR5IiwwIT0oMSZ0LnN0YXRlKSl9ZnVuY3Rpb24gbm8odCl7aWYoISgxMjgmdC5zdGF0ZSkpe2lmKG9vKHQscm8uRGVzdHJveSksaW8odCxyby5EZXN0cm95KSxFaSh0LDEzMTA3MiksdC5kaXNwb3NhYmxlcylmb3IodmFyIGU9MDtlPHQuZGlzcG9zYWJsZXMubGVuZ3RoO2UrKyl0LmRpc3Bvc2FibGVzW2VdKCk7IWZ1bmN0aW9uKHQpe2lmKDE2JnQuc3RhdGUpe3ZhciBlPUpuKHQpO2lmKGUpe3ZhciBuPWUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO24mJihMcihuLG4uaW5kZXhPZih0KSksUm4uZGlydHlQYXJlbnRRdWVyaWVzKHQpKX19fSh0KSx0LnJlbmRlcmVyLmRlc3Ryb3lOb2RlJiZmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5kZWYubm9kZXMubGVuZ3RoLG49MDtuPGU7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTsxJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShqbih0LG4pLnJlbmRlckVsZW1lbnQpOjImci5mbGFncz90LnJlbmRlcmVyLmRlc3Ryb3lOb2RlKEFuKHQsbikucmVuZGVyVGV4dCk6KDY3MTA4ODY0JnIuZmxhZ3N8fDEzNDIxNzcyOCZyLmZsYWdzKSYmTm4odCxuKS5kZXN0cm95KCl9fSh0KSxucih0KSYmdC5yZW5kZXJlci5kZXN0cm95KCksdC5zdGF0ZXw9MTI4fX12YXIgcm89ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5DcmVhdGVWaWV3Tm9kZXM9MF09IkNyZWF0ZVZpZXdOb2RlcyIsdFt0LkNoZWNrTm9DaGFuZ2VzPTFdPSJDaGVja05vQ2hhbmdlcyIsdFt0LkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M9Ml09IkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MiLHRbdC5DaGVja0FuZFVwZGF0ZT0zXT0iQ2hlY2tBbmRVcGRhdGUiLHRbdC5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzPTRdPSJDaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzIix0W3QuRGVzdHJveT01XT0iRGVzdHJveSIsdH0oe30pO2Z1bmN0aW9uIGlvKHQsZSl7dmFyIG49dC5kZWY7aWYoMzM1NTQ0MzImbi5ub2RlRmxhZ3MpZm9yKHZhciByPTA7cjxuLm5vZGVzLmxlbmd0aDtyKyspe3ZhciBpPW4ubm9kZXNbcl07MzM1NTQ0MzImaS5mbGFncz9hbyhqbih0LHIpLmNvbXBvbmVudFZpZXcsZSk6MD09KDMzNTU0NDMyJmkuY2hpbGRGbGFncykmJihyKz1pLmNoaWxkQ291bnQpfX1mdW5jdGlvbiBvbyh0LGUpe3ZhciBuPXQuZGVmO2lmKDE2Nzc3MjE2Jm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT1uLm5vZGVzW3JdO2lmKDE2Nzc3MjE2JmkuZmxhZ3MpZm9yKHZhciBvPWpuKHQscikudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxhPTA7YTxvLmxlbmd0aDthKyspYW8ob1thXSxlKTtlbHNlIDA9PSgxNjc3NzIxNiZpLmNoaWxkRmxhZ3MpJiYocis9aS5jaGlsZENvdW50KX19ZnVuY3Rpb24gYW8odCxlKXt2YXIgbj10LnN0YXRlO3N3aXRjaChlKXtjYXNlIHJvLkNoZWNrTm9DaGFuZ2VzOjA9PSgxMjgmbikmJigxMj09KDEyJm4pP0tpKHQpOjY0Jm4mJnNvKHQscm8uQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cykpO2JyZWFrO2Nhc2Ugcm8uQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3czowPT0oMTI4Jm4pJiYoMzImbj9LaSh0KTo2NCZuJiZzbyh0LGUpKTticmVhaztjYXNlIHJvLkNoZWNrQW5kVXBkYXRlOjA9PSgxMjgmbikmJigxMj09KDEyJm4pP1hpKHQpOjY0Jm4mJnNvKHQscm8uQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cykpO2JyZWFrO2Nhc2Ugcm8uQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3czowPT0oMTI4Jm4pJiYoMzImbj9YaSh0KTo2NCZuJiZzbyh0LGUpKTticmVhaztjYXNlIHJvLkRlc3Ryb3k6bm8odCk7YnJlYWs7Y2FzZSByby5DcmVhdGVWaWV3Tm9kZXM6WmkodCl9fWZ1bmN0aW9uIHNvKHQsZSl7b28odCxlKSxpbyh0LGUpfWZ1bmN0aW9uIGxvKHQsZSxuLHIpe2lmKHQuZGVmLm5vZGVGbGFncyZlJiZ0LmRlZi5ub2RlRmxhZ3Mmbilmb3IodmFyIGk9dC5kZWYubm9kZXMubGVuZ3RoLG89MDtvPGk7bysrKXt2YXIgYT10LmRlZi5ub2Rlc1tvXTtpZihhLmZsYWdzJmUmJmEuZmxhZ3Mmbilzd2l0Y2goUm4uc2V0Q3VycmVudE5vZGUodCxhLm5vZGVJbmRleCkscil7Y2FzZSAwOlBpKHQsYSk7YnJlYWs7Y2FzZSAxOmVvKHQsYSl9YS5jaGlsZEZsYWdzJmUmJmEuY2hpbGRGbGFncyZufHwobys9YS5jaGlsZENvdW50KX19dmFyIHVvPSExO2Z1bmN0aW9uIGNvKHQsZSxuLHIsaSxvKXtyZXR1cm4gcWkoaG8odCxpLGkuaW5qZWN0b3IuZ2V0KGxlKSxlLG4pLHIsbyl9ZnVuY3Rpb24gZm8odCxlLG4scixpLG8pe3ZhciBhPWkuaW5qZWN0b3IuZ2V0KGxlKSxzPWhvKHQsaSxuZXcgWW8oYSksZSxuKSxsPUNvKHIpO3JldHVybiBxbyhJby5jcmVhdGUscWksbnVsbCxbcyxsLG9dKX1mdW5jdGlvbiBobyh0LGUsbixyLGkpe3ZhciBvPWUuaW5qZWN0b3IuZ2V0KGtuKSxhPWUuaW5qZWN0b3IuZ2V0KGF0KTtyZXR1cm57bmdNb2R1bGU6ZSxpbmplY3Rvcjp0LHByb2plY3RhYmxlTm9kZXM6cixzZWxlY3Rvck9yTm9kZTppLHNhbml0aXplcjpvLHJlbmRlcmVyRmFjdG9yeTpuLHJlbmRlcmVyOm4uY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKSxlcnJvckhhbmRsZXI6YX19ZnVuY3Rpb24gcG8odCxlLG4scil7dmFyIGk9Q28obik7cmV0dXJuIHFvKElvLmNyZWF0ZSxRaSxudWxsLFt0LGUsaSxyXSl9ZnVuY3Rpb24gbW8odCxlLG4scil7cmV0dXJuIG49Ym8uZ2V0KGUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlci5wcm92aWRlci50b2tlbil8fENvKG4pLHFvKElvLmNyZWF0ZSxHaSxudWxsLFt0LGUsbixyXSl9ZnVuY3Rpb24geW8odCxlLG4scil7cmV0dXJuIHRpKHQsZSxuLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPSExLG49ITE7cmV0dXJuIDA9PT1nby5zaXplP3toYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59Oih0LnByb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWdvLmdldCh0LnRva2VuKTszODQwJnQuZmxhZ3MmJnImJihlPSEwLG49bnx8ci5kZXByZWNhdGVkQmVoYXZpb3IpfSksdC5tb2R1bGVzLmZvckVhY2goZnVuY3Rpb24odCl7dm8uZm9yRWFjaChmdW5jdGlvbihyLGkpe2kubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW49PT10JiYoZT0hMCxuPW58fHIuZGVwcmVjYXRlZEJlaGF2aW9yKX0pfSkse2hhc092ZXJyaWRlczplLGhhc0RlcHJlY2F0ZWRPdmVycmlkZXM6bn0pfSh0KSxuPWUuaGFzRGVwcmVjYXRlZE92ZXJyaWRlcztyZXR1cm4gZS5oYXNPdmVycmlkZXM/KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5wcm92aWRlcnMubGVuZ3RoO2UrKyl7dmFyIHI9dC5wcm92aWRlcnNbZV07biYmKHIuZmxhZ3N8PTQwOTYpO3ZhciBpPWdvLmdldChyLnRva2VuKTtpJiYoci5mbGFncz0tMzg0MSZyLmZsYWdzfGkuZmxhZ3Msci5kZXBzPWFyKGkuZGVwcyksci52YWx1ZT1pLnZhbHVlKX1pZih2by5zaXplPjApe3ZhciBvPW5ldyBTZXQodC5tb2R1bGVzKTt2by5mb3JFYWNoKGZ1bmN0aW9uKGUscil7aWYoby5oYXMoci5uZ0luamVjdGFibGVEZWYucHJvdmlkZWRJbikpe3ZhciBpPXt0b2tlbjpyLGZsYWdzOmUuZmxhZ3N8KG4/NDA5NjowKSxkZXBzOmFyKGUuZGVwcyksdmFsdWU6ZS52YWx1ZSxpbmRleDp0LnByb3ZpZGVycy5sZW5ndGh9O3QucHJvdmlkZXJzLnB1c2goaSksdC5wcm92aWRlcnNCeUtleVt6bihyKV09aX19KX19KHQ9dC5mYWN0b3J5KGZ1bmN0aW9uKCl7cmV0dXJuIFZufSkpLHQpOnR9KHIpKX12YXIgZ289bmV3IE1hcCx2bz1uZXcgTWFwLGJvPW5ldyBNYXA7ZnVuY3Rpb24gX28odCl7Z28uc2V0KHQudG9rZW4sdCksImZ1bmN0aW9uIj09dHlwZW9mIHQudG9rZW4mJnQudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50b2tlbi5uZ0luamVjdGFibGVEZWYucHJvdmlkZWRJbiYmdm8uc2V0KHQudG9rZW4sdCl9ZnVuY3Rpb24gd28odCxlKXt2YXIgbj11cih1cihlLnZpZXdEZWZGYWN0b3J5KS5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFZpZXcpO2JvLnNldCh0LG4pfWZ1bmN0aW9uIHhvKCl7Z28uY2xlYXIoKSx2by5jbGVhcigpLGJvLmNsZWFyKCl9ZnVuY3Rpb24gQ28odCl7aWYoMD09PWdvLnNpemUpcmV0dXJuIHQ7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49bnVsbCxyPTA7cjx0Lm5vZGVzLmxlbmd0aDtyKyspe3ZhciBpPXQubm9kZXNbcl07MSZpLmZsYWdzJiYobj1pKSxuJiYzODQwJmkuZmxhZ3MmJmdvLmhhcyhpLnByb3ZpZGVyLnRva2VuKSYmKGUucHVzaChuLm5vZGVJbmRleCksbj1udWxsKX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3Q9dC5mYWN0b3J5KGZ1bmN0aW9uKCl7cmV0dXJuIFZufSk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspcih0LGVbbl0pO3JldHVybiB0O2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIG49ZSsxO248dC5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10Lm5vZGVzW25dO2lmKDEmci5mbGFncylyZXR1cm47aWYoMzg0MCZyLmZsYWdzKXt2YXIgaT1yLnByb3ZpZGVyLG89Z28uZ2V0KGkudG9rZW4pO28mJihyLmZsYWdzPS0zODQxJnIuZmxhZ3N8by5mbGFncyxpLmRlcHM9YXIoby5kZXBzKSxpLnZhbHVlPW8udmFsdWUpfX19fWZ1bmN0aW9uIEVvKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmLGgpe3ZhciBwPXQuZGVmLm5vZGVzW2VdO3JldHVybiAkaSh0LHAsbixyLGksbyxhLHMsbCx1LGMsZixoKSwyMjQmcC5mbGFncz9Nbih0LGUpLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBPbyh0LGUsbixyLGksbyxhLHMsbCx1LGMsZixoKXt2YXIgcD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gdG8odCxwLG4scixpLG8sYSxzLGwsdSxjLGYsaCksMjI0JnAuZmxhZ3M/TW4odCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rpb24gU28odCl7cmV0dXJuIHFvKElvLmRldGVjdENoYW5nZXMsWGksbnVsbCxbdF0pfWZ1bmN0aW9uIGtvKHQpe3JldHVybiBxbyhJby5jaGVja05vQ2hhbmdlcyxLaSxudWxsLFt0XSl9ZnVuY3Rpb24gVG8odCl7cmV0dXJuIHFvKElvLmRlc3Ryb3ksbm8sbnVsbCxbdF0pfXZhciBQbyxBbyxqbyxJbz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LmNyZWF0ZT0wXT0iY3JlYXRlIix0W3QuZGV0ZWN0Q2hhbmdlcz0xXT0iZGV0ZWN0Q2hhbmdlcyIsdFt0LmNoZWNrTm9DaGFuZ2VzPTJdPSJjaGVja05vQ2hhbmdlcyIsdFt0LmRlc3Ryb3k9M109ImRlc3Ryb3kiLHRbdC5oYW5kbGVFdmVudD00XT0iaGFuZGxlRXZlbnQiLHR9KHt9KTtmdW5jdGlvbiBNbyh0LGUpe0FvPXQsam89ZX1mdW5jdGlvbiBObyh0LGUsbixyKXtyZXR1cm4gTW8odCxlKSxxbyhJby5oYW5kbGVFdmVudCx0LmRlZi5oYW5kbGVFdmVudCxudWxsLFt0LGUsbixyXSl9ZnVuY3Rpb24gUm8odCxlKXtpZigxMjgmdC5zdGF0ZSl0aHJvdyBMbihJb1tQb10pO3JldHVybiBNbyh0LHpvKHQsMCkpLHQuZGVmLnVwZGF0ZURpcmVjdGl2ZXMoZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgaT1bXSxvPTM7bzxhcmd1bWVudHMubGVuZ3RoO28rKylpW28tM109YXJndW1lbnRzW29dO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9Gbyh0LGEscixpKTpMbyh0LGEscixpKSwxNjM4NCZhLmZsYWdzJiZNbyh0LHpvKHQsbikpLDIyNCZhLmZsYWdzP01uKHQsYS5ub2RlSW5kZXgpLnZhbHVlOnZvaWQgMH0sdCl9ZnVuY3Rpb24gRG8odCxlKXtpZigxMjgmdC5zdGF0ZSl0aHJvdyBMbihJb1tQb10pO3JldHVybiBNbyh0LFVvKHQsMCkpLHQuZGVmLnVwZGF0ZVJlbmRlcmVyKGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9W10sbz0zO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTNdPWFyZ3VtZW50c1tvXTt2YXIgYT10LmRlZi5ub2Rlc1tuXTtyZXR1cm4gMD09PWU/Rm8odCxhLHIsaSk6TG8odCxhLHIsaSksMyZhLmZsYWdzJiZNbyh0LFVvKHQsbikpLDIyNCZhLmZsYWdzP01uKHQsYS5ub2RlSW5kZXgpLnZhbHVlOnZvaWQgMH0sdCl9ZnVuY3Rpb24gRm8odCxlLG4saSl7aWYoJGkuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKFt0LGUsbl0saSkpKXt2YXIgbz0xPT09bj9pWzBdOmk7aWYoMTYzODQmZS5mbGFncyl7Zm9yKHZhciBhPXt9LHM9MDtzPGUuYmluZGluZ3MubGVuZ3RoO3MrKyl7dmFyIGw9ZS5iaW5kaW5nc1tzXSx1PW9bc107OCZsLmZsYWdzJiYoYVsocD1sLm5vbk1pbmlmaWVkTmFtZSwibmctcmVmbGVjdC0iKyhwPXAucmVwbGFjZSgvWyRAXS9nLCJfIikucmVwbGFjZShWbyxmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4iLSIrdFsxXS50b0xvd2VyQ2FzZSgpfSkpKV09Qm8odSkpfXZhciBjPWUucGFyZW50LGY9am4odCxjLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtpZihjLmVsZW1lbnQubmFtZSlmb3IodmFyIGggaW4gYSludWxsIT0odT1hW2hdKT90LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShmLGgsdSk6dC5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoZixoKTtlbHNlIHQucmVuZGVyZXIuc2V0VmFsdWUoZiwiYmluZGluZ3M9IitKU09OLnN0cmluZ2lmeShhLG51bGwsMikpfX12YXIgcH1mdW5jdGlvbiBMbyh0LGUsbixpKXt0by5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkoW3QsZSxuXSxpKSl9dmFyIFZvPS8oW0EtWl0pL2c7ZnVuY3Rpb24gQm8odCl7dHJ5e3JldHVybiBudWxsIT10P3QudG9TdHJpbmcoKS5zbGljZSgwLDMwKTp0fWNhdGNoKHQpe3JldHVybiJbRVJST1JdIEV4Y2VwdGlvbiB3aGlsZSB0cnlpbmcgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSJ9fWZ1bmN0aW9uIHpvKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTtpZigxNjM4NCZyLmZsYWdzJiZyLmJpbmRpbmdzJiZyLmJpbmRpbmdzLmxlbmd0aClyZXR1cm4gbn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBVbyh0LGUpe2Zvcih2YXIgbj1lO248dC5kZWYubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07aWYoMyZyLmZsYWdzJiZyLmJpbmRpbmdzJiZyLmJpbmRpbmdzLmxlbmd0aClyZXR1cm4gbn1yZXR1cm4gbnVsbH12YXIgSG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52aWV3PXQsdGhpcy5ub2RlSW5kZXg9ZSxudWxsPT1lJiYodGhpcy5ub2RlSW5kZXg9ZT0wKSx0aGlzLm5vZGVEZWY9dC5kZWYubm9kZXNbZV07Zm9yKHZhciBuPXRoaXMubm9kZURlZixyPXQ7biYmMD09KDEmbi5mbGFncyk7KW49bi5wYXJlbnQ7aWYoIW4pZm9yKDshbiYmcjspbj10cihyKSxyPXIucGFyZW50O3RoaXMuZWxEZWY9bix0aGlzLmVsVmlldz1yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVsT3JDb21wVmlldyIse2dldDpmdW5jdGlvbigpe3JldHVybiBqbih0aGlzLmVsVmlldyx0aGlzLmVsRGVmLm5vZGVJbmRleCkuY29tcG9uZW50Vmlld3x8dGhpcy52aWV3fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWnIodGhpcy5lbFZpZXcsdGhpcy5lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbE9yQ29tcFZpZXcuY29tcG9uZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvdmlkZXJUb2tlbnMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtpZih0aGlzLmVsRGVmKWZvcih2YXIgZT10aGlzLmVsRGVmLm5vZGVJbmRleCsxO2U8PXRoaXMuZWxEZWYubm9kZUluZGV4K3RoaXMuZWxEZWYuY2hpbGRDb3VudDtlKyspe3ZhciBuPXRoaXMuZWxWaWV3LmRlZi5ub2Rlc1tlXTsyMDIyNCZuLmZsYWdzJiZ0LnB1c2gobi5wcm92aWRlci50b2tlbiksZSs9bi5jaGlsZENvdW50fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMuZWxEZWYpe1FvKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYsdCk7Zm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJlFvKHRoaXMuZWxWaWV3LG4sdCksZSs9bi5jaGlsZENvdW50fX1yZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudFJlbmRlckVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0KXtmb3IoO3QmJiFucih0KTspdD10LnBhcmVudDtyZXR1cm4gdC5wYXJlbnQ/am4odC5wYXJlbnQsdHIodCkubm9kZUluZGV4KTpudWxsfSh0aGlzLmVsT3JDb21wVmlldyk7cmV0dXJuIHQ/dC5yZW5kZXJFbGVtZW50OnZvaWQgMH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlbmRlck5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMiZ0aGlzLm5vZGVEZWYuZmxhZ3M/ZXIodGhpcy52aWV3LHRoaXMubm9kZURlZik6ZXIodGhpcy5lbFZpZXcsdGhpcy5lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saT1bXSxvPTE7bzxhcmd1bWVudHMubGVuZ3RoO28rKylpW28tMV09YXJndW1lbnRzW29dOzImdGhpcy5ub2RlRGVmLmZsYWdzPyhlPXRoaXMudmlldy5kZWYsbj10aGlzLm5vZGVEZWYubm9kZUluZGV4KTooZT10aGlzLmVsVmlldy5kZWYsbj10aGlzLmVsRGVmLm5vZGVJbmRleCk7dmFyIGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj0wO3I8PWU7cisrKTMmdC5ub2Rlc1tyXS5mbGFncyYmbisrO3JldHVybiBufShlLG4pLHM9LTE7ZS5mYWN0b3J5KGZ1bmN0aW9uKCl7cmV0dXJuKytzPT09YT8oZT10LmVycm9yKS5iaW5kLmFwcGx5KGUsT2JqZWN0KHIuZCkoW3RdLGkpKTpWbjt2YXIgZX0pLHM8YSYmKHQuZXJyb3IoIklsbGVnYWwgc3RhdGU6IHRoZSBWaWV3RGVmaW5pdGlvbkZhY3RvcnkgZGlkIG5vdCBjYWxsIHRoZSBsb2dnZXIhIiksdC5lcnJvci5hcHBseSh0LE9iamVjdChyLmQpKGkpKSl9LHR9KCk7ZnVuY3Rpb24gUW8odCxlLG4pe2Zvcih2YXIgciBpbiBlLnJlZmVyZW5jZXMpbltyXT1qaSh0LGUsZS5yZWZlcmVuY2VzW3JdKX1mdW5jdGlvbiBxbyh0LGUsbixyKXt2YXIgaT1QbyxvPUFvLGE9am87dHJ5e1BvPXQ7dmFyIHM9ZS5hcHBseShuLHIpO3JldHVybiBBbz1vLGpvPWEsUG89aSxzfWNhdGNoKHQpe2lmKHJ0KHQpfHwhQW8pdGhyb3cgdDt0aHJvdyBmdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3J8fCh0PW5ldyBFcnJvcih0LnRvU3RyaW5nKCkpKSxGbih0LGUpLHR9KHQsR28oKSl9fWZ1bmN0aW9uIEdvKCl7cmV0dXJuIEFvP25ldyBIbyhBbyxqbyk6bnVsbH12YXIgWW89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFdvKHRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIodCxlKSl9LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZT90aGlzLmRlbGVnYXRlLndoZW5SZW5kZXJpbmdEb25lKCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfSx0fSgpLFdvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXQsdGhpcy5kYXRhPXRoaXMuZGVsZWdhdGUuZGF0YX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveU5vZGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe1NlLmRlbGV0ZSh0Lm5hdGl2ZU5vZGUpfShrZSh0KSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSYmdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSkscj1HbygpO2lmKHIpe3ZhciBpPW5ldyBDZShuLG51bGwscik7aS5uYW1lPXQsVGUoaSl9cmV0dXJuIG59LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpLG49R28oKTtyZXR1cm4gbiYmVGUobmV3IHhlKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCksbj1HbygpO3JldHVybiBuJiZUZShuZXcgeGUoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPWtlKHQpLHI9a2UoZSk7biYmciYmbiBpbnN0YW5jZW9mIENlJiZuLmFkZENoaWxkKHIpLHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1rZSh0KSxpPWtlKGUpLG89a2Uobik7ciYmaSYmciBpbnN0YW5jZW9mIENlJiZyLmluc2VydEJlZm9yZShvLGkpLHRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1rZSh0KSxyPWtlKGUpO24mJnImJm4gaW5zdGFuY2VvZiBDZSYmbi5yZW1vdmVDaGlsZChyKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHQsZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCksbj1HbygpO3JldHVybiBuJiZUZShuZXcgQ2UoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9a2UodCk7aSYmaSBpbnN0YW5jZW9mIENlJiYoaS5hdHRyaWJ1dGVzW3I/cisiOiIrZTplXT1uKSx0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1rZSh0KTtyJiZyIGluc3RhbmNlb2YgQ2UmJihyLmF0dHJpYnV0ZXNbbj9uKyI6IitlOmVdPW51bGwpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1rZSh0KTtuJiZuIGluc3RhbmNlb2YgQ2UmJihuLmNsYXNzZXNbZV09ITApLHRoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1rZSh0KTtuJiZuIGluc3RhbmNlb2YgQ2UmJihuLmNsYXNzZXNbZV09ITEpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9a2UodCk7aSYmaSBpbnN0YW5jZW9mIENlJiYoaS5zdHlsZXNbZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWtlKHQpO3ImJnIgaW5zdGFuY2VvZiBDZSYmKHIuc3R5bGVzW2VdPW51bGwpLHRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dmFyIHI9a2UodCk7ciYmciBpbnN0YW5jZW9mIENlJiYoci5wcm9wZXJ0aWVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIHI9a2UodCk7ciYmci5saXN0ZW5lcnMucHVzaChuZXcgZnVuY3Rpb24odCxlKXt0aGlzLm5hbWU9dCx0aGlzLmNhbGxiYWNrPWV9KGUsbikpfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdH0oKTtmdW5jdGlvbiBabyh0LGUsbil7cmV0dXJuIG5ldyBLbyh0LGUsbil9dmFyIEtvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5tb2R1bGVUeXBlPWUsaS5fYm9vdHN0cmFwQ29tcG9uZW50cz1uLGkuX25nTW9kdWxlRGVmRmFjdG9yeT1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbigpe2lmKCF1byl7dW89ITA7dmFyIHQ9dGUoKT97c2V0Q3VycmVudE5vZGU6TW8sY3JlYXRlUm9vdFZpZXc6Zm8sY3JlYXRlRW1iZWRkZWRWaWV3OnBvLGNyZWF0ZUNvbXBvbmVudFZpZXc6bW8sY3JlYXRlTmdNb2R1bGVSZWY6eW8sb3ZlcnJpZGVQcm92aWRlcjpfbyxvdmVycmlkZUNvbXBvbmVudFZpZXc6d28sY2xlYXJPdmVycmlkZXM6eG8sY2hlY2tBbmRVcGRhdGVWaWV3OlNvLGNoZWNrTm9DaGFuZ2VzVmlldzprbyxkZXN0cm95VmlldzpUbyxjcmVhdGVEZWJ1Z0NvbnRleHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEhvKHQsZSl9LGhhbmRsZUV2ZW50Ok5vLHVwZGF0ZURpcmVjdGl2ZXM6Um8sdXBkYXRlUmVuZGVyZXI6RG99OntzZXRDdXJyZW50Tm9kZTpmdW5jdGlvbigpe30sY3JlYXRlUm9vdFZpZXc6Y28sY3JlYXRlRW1iZWRkZWRWaWV3OlFpLGNyZWF0ZUNvbXBvbmVudFZpZXc6R2ksY3JlYXRlTmdNb2R1bGVSZWY6dGksb3ZlcnJpZGVQcm92aWRlcjpWbixvdmVycmlkZUNvbXBvbmVudFZpZXc6Vm4sY2xlYXJPdmVycmlkZXM6Vm4sY2hlY2tBbmRVcGRhdGVWaWV3OlhpLGNoZWNrTm9DaGFuZ2VzVmlldzpLaSxkZXN0cm95VmlldzpubyxjcmVhdGVEZWJ1Z0NvbnRleHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEhvKHQsZSl9LGhhbmRsZUV2ZW50OmZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0LmRlZi5oYW5kbGVFdmVudCh0LGUsbixyKX0sdXBkYXRlRGlyZWN0aXZlczpmdW5jdGlvbih0LGUpe3JldHVybiB0LmRlZi51cGRhdGVEaXJlY3RpdmVzKDA9PT1lP0VvOk9vLHQpfSx1cGRhdGVSZW5kZXJlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmRlZi51cGRhdGVSZW5kZXJlcigwPT09ZT9FbzpPbyx0KX19O1JuLnNldEN1cnJlbnROb2RlPXQuc2V0Q3VycmVudE5vZGUsUm4uY3JlYXRlUm9vdFZpZXc9dC5jcmVhdGVSb290VmlldyxSbi5jcmVhdGVFbWJlZGRlZFZpZXc9dC5jcmVhdGVFbWJlZGRlZFZpZXcsUm4uY3JlYXRlQ29tcG9uZW50Vmlldz10LmNyZWF0ZUNvbXBvbmVudFZpZXcsUm4uY3JlYXRlTmdNb2R1bGVSZWY9dC5jcmVhdGVOZ01vZHVsZVJlZixSbi5vdmVycmlkZVByb3ZpZGVyPXQub3ZlcnJpZGVQcm92aWRlcixSbi5vdmVycmlkZUNvbXBvbmVudFZpZXc9dC5vdmVycmlkZUNvbXBvbmVudFZpZXcsUm4uY2xlYXJPdmVycmlkZXM9dC5jbGVhck92ZXJyaWRlcyxSbi5jaGVja0FuZFVwZGF0ZVZpZXc9dC5jaGVja0FuZFVwZGF0ZVZpZXcsUm4uY2hlY2tOb0NoYW5nZXNWaWV3PXQuY2hlY2tOb0NoYW5nZXNWaWV3LFJuLmRlc3Ryb3lWaWV3PXQuZGVzdHJveVZpZXcsUm4ucmVzb2x2ZURlcD13aSxSbi5jcmVhdGVEZWJ1Z0NvbnRleHQ9dC5jcmVhdGVEZWJ1Z0NvbnRleHQsUm4uaGFuZGxlRXZlbnQ9dC5oYW5kbGVFdmVudCxSbi51cGRhdGVEaXJlY3RpdmVzPXQudXBkYXRlRGlyZWN0aXZlcyxSbi51cGRhdGVSZW5kZXJlcj10LnVwZGF0ZVJlbmRlcmVyLFJuLmRpcnR5UGFyZW50UXVlcmllcz1UaX19KCk7dmFyIGU9dXIodGhpcy5fbmdNb2R1bGVEZWZGYWN0b3J5KTtyZXR1cm4gUm4uY3JlYXRlTmdNb2R1bGVSZWYodGhpcy5tb2R1bGVUeXBlLHR8fE4uTlVMTCx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzLGUpfSxlfShJdCk7ZnVuY3Rpb24gWG8odCxlLG4pe3QhPWUmJnRhKG4pfWZ1bmN0aW9uICRvKHQsZSl7bnVsbCE9dCYmdGEoZSl9ZnVuY3Rpb24gSm8odCxlKXtudWxsPT10JiZ0YShlKX1mdW5jdGlvbiB0YSh0KXt0aHJvdyBuZXcgRXJyb3IoIkFTU0VSVElPTiBFUlJPUjogIit0KX1mdW5jdGlvbiBlYSh0LGUsbixyKXt2YXIgaT1yP2U6bjtpJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bis9MillW24rMV0uY2FsbCh0W2Vbbl1dKX0odCxpKX0idW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93Lm5nRGV2TW9kZT0hMCksInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYoc2VsZi5uZ0Rldk1vZGU9ITApLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiYoZ2xvYmFsLm5nRGV2TW9kZT0hMCkpO3ZhciBuYSxyYSxpYSxvYSxhYSxzYSxsYSx1YSxjYSxmYSxoYT0iX19uZ0hvc3RMTm9kZV9fIixwYT1Qcm9taXNlLnJlc29sdmUobnVsbCksZGE9WzAsMF0sbWE9bnVsbCx5YT0hMTtmdW5jdGlvbiBnYSh0LGUpe3ZhciBuPW1hO3JldHVybiB1YT10JiZ0LmRhdGEsY2E9dCYmdC5kaXJlY3RpdmVzLGFhPXQmJnQudFZpZXcuZGF0YSxsYT10JiYxPT0oMSZ0LmZsYWdzKSxuYT10JiZ0LnJlbmRlcmVyLHQmJnQuYmluZGluZ0luZGV4PDAmJih0LmJpbmRpbmdJbmRleD10LmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT1lJiYoaWE9ZSxvYT0hMCksbWE9dCxzYT10JiZ0LnF1ZXJpZXMsbn1mdW5jdGlvbiB2YSh0KXt5YXx8ZWEoY2EsbWEudFZpZXcudmlld0hvb2tzLG1hLnRWaWV3LnZpZXdDaGVja0hvb2tzLGxhKSxtYS5mbGFncyY9LTYsbWEubGlmZWN5Y2xlU3RhZ2U9MSxtYS5iaW5kaW5nSW5kZXg9LTEsZ2EodCxudWxsKX1mdW5jdGlvbiBiYSgpe3dhKCk7dmFyIHQ9bWEudFZpZXc7dC5maXJzdFRlbXBsYXRlUGFzcz0hMSxfYSh0Lmhvc3RCaW5kaW5ncyksZnVuY3Rpb24odCl7aWYobnVsbCE9dClmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrPTIpRWEodFtlXSx0W2UrMV0pfSh0LmNvbXBvbmVudHMpfWZ1bmN0aW9uIF9hKHQpe2lmKG51bGwhPXQpZm9yKHZhciBlPW1hLnRWaWV3LmRpcmVjdGl2ZXMsbj0wO248dC5sZW5ndGg7bis9Mil7dmFyIHI9dFtuXSxpPWVbcl07aS5ob3N0QmluZGluZ3MmJmkuaG9zdEJpbmRpbmdzKHIsdFtuKzFdKX19ZnVuY3Rpb24gd2EoKXtpZigheWEpe3ZhciB0PW1hLnRWaWV3OyhmdW5jdGlvbih0LGUsbil7MT09PXQubGlmZWN5Y2xlU3RhZ2UmJihlYSh0LmRpcmVjdGl2ZXMsZS5pbml0SG9va3MsZS5jaGVja0hvb2tzLG4pLHQubGlmZWN5Y2xlU3RhZ2U9Mil9KShtYSx0LGxhKSxlYShjYSx0LmNvbnRlbnRIb29rcyx0LmNvbnRlbnRDaGVja0hvb2tzLGxhKX19ZnVuY3Rpb24geGEodCxlLG4scixpLG8pe3ZhciBhLHMsbCx1LGMsZixoLHAsZCxtPW9hLHk9aWE7dHJ5e29hPSEwLGlhPW51bGw7dmFyIGc9MjtudWxsPT10JiYocz1udWxsLGw9Mix1PW51bGwsYz1mdW5jdGlvbih0LGUsbixyLGksbyl7cmV0dXJue3BhcmVudDptYSxpZDotMSxmbGFnczoxMSxub2RlOm51bGwsZGF0YTpbXSxkaXJlY3RpdmVzOm51bGwsdFZpZXc6bixjbGVhbnVwOm51bGwscmVuZGVyZXI6ZSxjaGlsZDpudWxsLHRhaWw6bnVsbCxuZXh0Om51bGwsYmluZGluZ1N0YXJ0SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLHRlbXBsYXRlOnIsY29udGV4dDppLGR5bmFtaWNWaWV3Q291bnQ6MCxsaWZlY3ljbGVTdGFnZToxLHF1ZXJpZXM6bnVsbCxpbmplY3RvcjptYSYmbWEuaW5qZWN0b3J9fSgwLHIsZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lm5nUHJpdmF0ZURhdGF8fCh0Lm5nUHJpdmF0ZURhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbXSxkaXJlY3RpdmVzOm51bGwsZmlyc3RUZW1wbGF0ZVBhc3M6ITAsaW5pdEhvb2tzOm51bGwsY2hlY2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxwaXBlRGVzdHJveUhvb2tzOm51bGwsaG9zdEJpbmRpbmdzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoKTp0LHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZT9lKCk6ZSxjdXJyZW50TWF0Y2hlczpudWxsfX0oZSxuKSl9KGUsaXx8bnVsbCxvfHxudWxsKSxlLG4pLGY9b2E/aWE6aWEmJmlhLnBhcmVudCxoPShvYT9zYTppYSYmaWEucXVlcmllcyl8fGYmJmYucXVlcmllcyYmZi5xdWVyaWVzLmNoaWxkKCksZD1mdW5jdGlvbih0LGUsbixyLGksbyl7cmV0dXJue3R5cGU6dCxuYXRpdmU6cix2aWV3OmUscGFyZW50Om4sY2hpbGQ6bnVsbCxuZXh0Om51bGwsbm9kZUluamVjdG9yOm4/bi5ub2RlSW5qZWN0b3I6bnVsbCxkYXRhOmkscXVlcmllczpvLHROb2RlOm51bGwscE5leHRPclBhcmVudDpudWxsLGR5bmFtaWNMQ29udGFpbmVyTm9kZTpudWxsfX0obCxtYSxmLHUsKHA9bnVsbCE9Yyk/YzpudWxsLGgpLDI9PSgyJmwpJiZwJiYobmdEZXZNb2RlJiYkbyhjLm5vZGUsIkxWaWV3Lm5vZGUgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSxjLm5vZGU9ZCksbnVsbCE9cyYmKG5nRGV2TW9kZSYmZnVuY3Rpb24odCxlKXtudWxsPT1lJiYoZT11YSksWG8oZS5sZW5ndGgsdCwiaW5kZXggIit0KyIgZXhwZWN0ZWQgdG8gYmUgYXQgdGhlIGVuZCBvZiBhcnIgKGxlbmd0aCAiK2UubGVuZ3RoKyIpIil9KHMpLHVhW3NdPWQscz49YWEubGVuZ3RoP2FhW3NdPW51bGw6ZC50Tm9kZT1hYVtzXSxvYT8oc2E9bnVsbCxpYS52aWV3IT09bWEmJjIhPT1pYS50eXBlfHwobmdEZXZNb2RlJiYkbyhpYS5jaGlsZCwicHJldmlvdXNPclBhcmVudE5vZGUncyBjaGlsZCBzaG91bGQgbm90IGhhdmUgYmVlbiBzZXQuIiksaWEuY2hpbGQ9ZCkpOmlhJiYobmdEZXZNb2RlJiYkbyhpYS5uZXh0LCJwcmV2aW91c09yUGFyZW50Tm9kZSdzIG5leHQgcHJvcGVydHkgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0ICIrcysiLiIpLGlhLm5leHQ9ZCxpYS5keW5hbWljTENvbnRhaW5lck5vZGUmJihpYS5keW5hbWljTENvbnRhaW5lck5vZGUubmV4dD1kKSkpLGlhPWQsb2E9ITAsdD1kLGc9MSksYT1nYSh0LmRhdGEsdCksZShnLG4pLGJhKCksQ2EoKX1maW5hbGx5e3ZhKGEpLG9hPW0saWE9eX1yZXR1cm4gdH1mdW5jdGlvbiBDYSgpe2Zvcih2YXIgdD1tYS5jaGlsZDtudWxsIT09dDt0PXQubmV4dClpZigwIT09dC5keW5hbWljVmlld0NvdW50JiZ0LnZpZXdzKWZvcih2YXIgZT10LG49MDtuPGUudmlld3MubGVuZ3RoO24rKyl7dmFyIHI9ZS52aWV3c1tuXTt4YShyLHIuZGF0YS50ZW1wbGF0ZSxyLmRhdGEuY29udGV4dCxuYSl9fWZ1bmN0aW9uIEVhKHQsZSl7bmdEZXZNb2RlJiZrYShlKTt2YXIgbixyLGk9dWFbZV07bmdEZXZNb2RlJiYocj0zLEpvKG49aSwic2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgbm9kZSIpLFhvKG4udHlwZSxyLCJzaG91bGQgYmUgYSAiK2Z1bmN0aW9uKHQpe3JldHVybiAxPT10PyJQcm9qZWN0aW9uIjowPT10PyJDb250YWluZXIiOjI9PXQ/IlZpZXciOjM9PXQ/IkVsZW1lbnQiOiI8dW5rbm93bj4ifShyKSkpLG5nRGV2TW9kZSYmSm8oaS5kYXRhLCJDb21wb25lbnQncyBob3N0IG5vZGUgc2hvdWxkIGhhdmUgYW4gTFZpZXcgYXR0YWNoZWQuIik7dmFyIG8sYT1pLmRhdGE7OD09KDgmYS5mbGFncykmJjYmYS5mbGFncyYmKG5nRGV2TW9kZSYma2EodCxjYSksU2EoYSxpLG1hLnRWaWV3LmRpcmVjdGl2ZXNbdF0sKG89Y2FbdF0sQXJyYXkuaXNBcnJheShvKT9vWzBdOm8pKSl9ZnVuY3Rpb24gT2EodCl7dmFyIGU9VGEodCk7bmdEZXZNb2RlJiZKbyhlLmRhdGEsIkNvbXBvbmVudCBob3N0IG5vZGUgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGFuIExWaWV3IiksU2EoZS5kYXRhLGUsZS52aWV3LnRWaWV3LmRpcmVjdGl2ZXNbZS50Tm9kZS5mbGFncz4+MTNdLHQpfWZ1bmN0aW9uIFNhKHQsZSxuLHIpe3ZhciBpPWdhKHQsZSksbz1uLnRlbXBsYXRlO3RyeXtvKDEmdC5mbGFncz8zOjIsciksYmEoKSxDYSgpfWZpbmFsbHl7dmEoaSl9fWZ1bmN0aW9uIGthKHQsZSl7bnVsbD09ZSYmKGU9dWEpLHQ+PShlP2UubGVuZ3RoOjApJiZ0YSgiaW5kZXggZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBkYXRhIGluZGV4Iil9ZnVuY3Rpb24gVGEodCl7bmdEZXZNb2RlJiZKbyh0LCJleHBlY3RpbmcgY29tcG9uZW50IGdvdCBudWxsIik7dmFyIGU9dFtoYV07cmV0dXJuIG5nRGV2TW9kZSYmSm8odCwib2JqZWN0IGlzIG5vdCBhIGNvbXBvbmVudCIpLGV9ZmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlldz10LHRoaXMuY29udGV4dD1lfXJldHVybiB0LnByb3RvdHlwZS5fc2V0Q29tcG9uZW50Q29udGV4dD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZpZXc9dCx0aGlzLmNvbnRleHQ9ZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUubWFya0ZvckNoZWNrPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10O251bGwhPWUucGFyZW50OyllLmZsYWdzfD00LGU9ZS5wYXJlbnQ7dmFyIG4scjtlLmZsYWdzfD00LG5nRGV2TW9kZSYmSm8oZS5jb250ZXh0LCJyb290Q29udGV4dCIpLChuPWUuY29udGV4dCkuY2xlYW49PXBhJiYobi5jbGVhbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtyZXR1cm4gcj10fSksbi5zY2hlZHVsZXIoZnVuY3Rpb24oKXt2YXIgdCxlO2U9VGEoKHQ9ZnVuY3Rpb24odCl7bmdEZXZNb2RlJiZKbyh0LCJjb21wb25lbnQiKTtmb3IodmFyIGU9VGEodCkudmlldztlLnBhcmVudDspZT1lLnBhcmVudDtyZXR1cm4gZX0obi5jb21wb25lbnQpKS5jb250ZXh0LmNvbXBvbmVudCksbmdEZXZNb2RlJiZKbyhlLmRhdGEsIkNvbXBvbmVudCBob3N0IG5vZGUgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGFuIExWaWV3IiksZnVuY3Rpb24obixyLGksbyl7dmFyIGE9Z2EodCxlKTt0cnl7cmEuYmVnaW4mJnJhLmJlZ2luKCksd2EoKSxfYShkYSksRWEoMCwwKX1maW5hbGx5e3JhLmVuZCYmcmEuZW5kKCksdmEoYSl9fSgpLHIobnVsbCksbi5jbGVhbj1wYX0pKX0odGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuZmxhZ3MmPS05fSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuZmxhZ3N8PTh9LHQucHJvdG90eXBlLmRldGVjdENoYW5nZXM9ZnVuY3Rpb24oKXtPYSh0aGlzLmNvbnRleHQpfSx0LnByb3RvdHlwZS5jaGVja05vQ2hhbmdlcz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXt5YT0hMDt0cnl7T2EodCl9ZmluYWxseXt5YT0hMX19KHRoaXMuY29udGV4dCl9LHR9KCksT2JqZWN0KHIuYikoZnVuY3Rpb24odCxlLG4pe3ZhciByPWZhLmNhbGwodGhpcyx0LmRhdGEsbil8fHRoaXM7cmV0dXJuIHIuX2xWaWV3Tm9kZT10LHJ9LGZhKX0sREtUYjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9KX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxFaG1rOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcixpPW4oImVpaHMiKTtmdW5jdGlvbiBvKCl7dHJ5e3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaCh0KXtyZXR1cm4gaS5hLmU9dCxpLmF9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHI9dCxvfX0sIkVuOCsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifSgpfSwiRi9YTCI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIm5rWTciKSxpPW4oIklVVGIiKSxvPW4oIkc1SjEiKSxhPW4oIlBVOEwiKTtmdW5jdGlvbiBzKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPXRbdC5sZW5ndGgtMV07c3dpdGNoKE9iamVjdChyLmEpKG4pP3QucG9wKCk6bj12b2lkIDAsdC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gT2JqZWN0KG8uYikobik7Y2FzZSAxOnJldHVybiBuP09iamVjdChpLmEpKHQsbik6T2JqZWN0KGEuYSkodFswXSk7ZGVmYXVsdDpyZXR1cm4gT2JqZWN0KGkuYSkodCxuKX19fSxGRk9vOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCIyQmRqIiksbz1uKCI2YWh3IiksYT1uKCJwdWdUIikscz1uKCJML1Y5IiksbD1uKCJpTHhRIiksdT1uKCJES1RiIiksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7c3dpdGNoKGkuc3luY0Vycm9yVmFsdWU9bnVsbCxpLnN5bmNFcnJvclRocm93bj0hMSxpLnN5bmNFcnJvclRocm93YWJsZT0hMSxpLmlzU3RvcHBlZD0hMSxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6aS5kZXN0aW5hdGlvbj1vLmE7YnJlYWs7Y2FzZSAxOmlmKCFlKXtpLmRlc3RpbmF0aW9uPW8uYTticmVha31pZigib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGgoZSkpe3ZhciBhPWVbcy5hXSgpO2kuc3luY0Vycm9yVGhyb3dhYmxlPWEuc3luY0Vycm9yVGhyb3dhYmxlLGkuZGVzdGluYXRpb249YSxhLmFkZChpKX1lbHNlIGkuc3luY0Vycm9yVGhyb3dhYmxlPSEwLGkuZGVzdGluYXRpb249bmV3IGYoaSxlKTticmVha31kZWZhdWx0Omkuc3luY0Vycm9yVGhyb3dhYmxlPSEwLGkuZGVzdGluYXRpb249bmV3IGYoaSxlLG4scil9cmV0dXJuIGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlW3MuYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5jcmVhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPW5ldyBlKHQsbixyKTtyZXR1cm4gaS5zeW5jRXJyb3JUaHJvd2FibGU9ITEsaX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8dGhpcy5fbmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcih0KSl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcykpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudCxlPXRoaXMuX3BhcmVudHM7cmV0dXJuIHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLnVuc3Vic2NyaWJlKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5fcGFyZW50PXQsdGhpcy5fcGFyZW50cz1lLHRoaXN9LGV9KGEuYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGEpe3ZhciBzLGw9dC5jYWxsKHRoaXMpfHx0aGlzO2wuX3BhcmVudFN1YnNjcmliZXI9ZTt2YXIgdT1sO3JldHVybiBPYmplY3QoaS5hKShuKT9zPW46biYmKHM9bi5uZXh0LHI9bi5lcnJvcixhPW4uY29tcGxldGUsbiE9PW8uYSYmKHU9T2JqZWN0LmNyZWF0ZShuKSxPYmplY3QoaS5hKSh1LnVuc3Vic2NyaWJlKSYmbC5hZGQodS51bnN1YnNjcmliZS5iaW5kKHUpKSx1LnVuc3Vic2NyaWJlPWwudW5zdWJzY3JpYmUuYmluZChsKSkpLGwuX2NvbnRleHQ9dSxsLl9uZXh0PXMsbC5fZXJyb3I9cixsLl9jb21wbGV0ZT1hLGx9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNTdG9wcGVkJiZ0aGlzLl9uZXh0KXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO2wuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX25leHQsdCkmJnRoaXMudW5zdWJzY3JpYmUoKTp0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9uZXh0LHQpfX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVyLG49bC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc7aWYodGhpcy5fZXJyb3IpbiYmZS5zeW5jRXJyb3JUaHJvd2FibGU/KHRoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKToodGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKTtlbHNlIGlmKGUuc3luY0Vycm9yVGhyb3dhYmxlKW4/KGUuc3luY0Vycm9yVmFsdWU9dCxlLnN5bmNFcnJvclRocm93bj0hMCk6T2JqZWN0KHUuYSkodCksdGhpcy51bnN1YnNjcmliZSgpO2Vsc2V7aWYodGhpcy51bnN1YnNjcmliZSgpLG4pdGhyb3cgdDtPYmplY3QodS5hKSh0KX19fSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO2lmKHRoaXMuX2NvbXBsZXRlKXt2YXIgbj1mdW5jdGlvbigpe3JldHVybiB0Ll9jb21wbGV0ZS5jYWxsKHQuX2NvbnRleHQpfTtsLmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZS5zeW5jRXJyb3JUaHJvd2FibGU/KHRoaXMuX190cnlPclNldEVycm9yKGUsbiksdGhpcy51bnN1YnNjcmliZSgpKToodGhpcy5fX3RyeU9yVW5zdWIobiksdGhpcy51bnN1YnNjcmliZSgpKX1lbHNlIHRoaXMudW5zdWJzY3JpYmUoKX19LGUucHJvdG90eXBlLl9fdHJ5T3JVbnN1Yj1mdW5jdGlvbih0LGUpe3RyeXt0LmNhbGwodGhpcy5fY29udGV4dCxlKX1jYXRjaCh0KXtpZih0aGlzLnVuc3Vic2NyaWJlKCksbC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtPYmplY3QodS5hKSh0KX19LGUucHJvdG90eXBlLl9fdHJ5T3JTZXRFcnJvcj1mdW5jdGlvbih0LGUsbil7aWYoIWwuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IG5ldyBFcnJvcigiYmFkIGNhbGwiKTt0cnl7ZS5jYWxsKHRoaXMuX2NvbnRleHQsbil9Y2F0Y2goZSl7cmV0dXJuIGwuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nPyh0LnN5bmNFcnJvclZhbHVlPWUsdC5zeW5jRXJyb3JUaHJvd249ITAsITApOihPYmplY3QodS5hKShlKSwhMCl9cmV0dXJuITF9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudFN1YnNjcmliZXI7dGhpcy5fY29udGV4dD1udWxsLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9bnVsbCx0LnVuc3Vic2NyaWJlKCl9LGV9KGMpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBjfHwic3luY0Vycm9yVGhyb3dhYmxlImluIHQmJnRbcy5hXX19LEZ4YjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pO3ZhciByPW4oIjZibEYiKSxpPW4oIit0SjQiKSxvPW4oIlM1WFEiKSxhPW4oInU2N0QiKSxzPW4oIkpjUnYiKSxsPW4oIjJlUGwiKSx1PW4oIi9XWXYiKSxjPW4oIk1jU28iKSxmPW4oIkVuOCsiKSxoPW4oInhUbGEiKSxwPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiByLmEpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9pc1NjYWxhcj8oZS5uZXh0KHQudmFsdWUpLHZvaWQgZS5jb21wbGV0ZSgpKTp0LnN1YnNjcmliZShlKX07aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbaC5hXSlyZXR1cm4gT2JqZWN0KHMuYSkodCk7aWYoT2JqZWN0KGwuYSkodCkpcmV0dXJuIE9iamVjdChpLmEpKHQpO2lmKE9iamVjdCh1LmEpKHQpKXJldHVybiBPYmplY3Qoby5hKSh0KTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtmLmFdKXJldHVybiBPYmplY3QoYS5hKSh0KTt2YXIgZT1PYmplY3QoYy5hKSh0KT8iYW4gaW52YWxpZCBvYmplY3QiOiInIit0KyInIjt0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgcHJvdmlkZWQgIitlKyIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgQXJyYXksIG9yIEl0ZXJhYmxlLiIpfX0sRzVKMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCI2YmxGIiksaT1uZXcgci5hKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbXBsZXRlKCl9KTtmdW5jdGlvbiBvKHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgci5hKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfSl9KHQpOml9fSxJVVRiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJwdWdUIiksbz1uKCIrdEo0Iik7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IGkuYSxvPTA7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtvIT09dC5sZW5ndGg/KG4ubmV4dCh0W28rK10pLG4uY2xvc2VkfHxyLmFkZCh0aGlzLnNjaGVkdWxlKCkpKTpuLmNvbXBsZXRlKCl9KSkscn06T2JqZWN0KG8uYSkodCkpfX0sSXAwUjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciByPW4oIkNjbkciKSxpPW4oIm1yU0ciKSxvPWZ1bmN0aW9uKCl7fSxhPW5ldyByLnAoIkxvY2F0aW9uIEluaXRpYWxpemVkIikscz1mdW5jdGlvbigpe30sbD1uZXcgci5wKCJhcHBCYXNlSHJlZiIpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7dGhpcy5fc3ViamVjdD1uZXcgci5uLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3k9ZTt2YXIgaT10aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZUhyZWY9dC5zdHJpcFRyYWlsaW5nU2xhc2goYyhpKSksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5vblBvcFN0YXRlKGZ1bmN0aW9uKHQpe24uX3N1YmplY3QuZW1pdCh7dXJsOm4ucGF0aCghMCkscG9wOiEwLHN0YXRlOnQuc3RhdGUsdHlwZTp0LnR5cGV9KX0pfXJldHVybiB0LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdGhpcy5ub3JtYWxpemUodGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wYXRoKHQpKX0sdC5wcm90b3R5cGUuaXNDdXJyZW50UGF0aEVxdWFsVG89ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49IiIpLHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShlK3Qubm9ybWFsaXplUXVlcnlQYXJhbXMobikpfSx0LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmUuc3RhcnRzV2l0aCh0KT9lLnN1YnN0cmluZyh0Lmxlbmd0aCk6ZX0odGhpcy5fYmFzZUhyZWYsYyhlKSkpfSx0LnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiIvIiE9PXRbMF0mJih0PSIvIit0KSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0KX0sdC5wcm90b3R5cGUuZ289ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnB1c2hTdGF0ZShuLCIiLHQsZSl9LHQucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucmVwbGFjZVN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZm9yd2FyZCgpfSx0LnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5iYWNrKCl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OnQsZXJyb3I6ZSxjb21wbGV0ZTpufSl9LHQubm9ybWFsaXplUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI/IiE9PXRbMF0/Ij8iK3Q6dH0sdC5qb2luV2l0aFNsYXNoPWZ1bmN0aW9uKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX0sdC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvI3xcP3wkLyksbj1lJiZlLmluZGV4fHx0Lmxlbmd0aDtyZXR1cm4gdC5zbGljZSgwLG4tKCIvIj09PXRbbi0xXT8xOjApKSt0LnNsaWNlKG4pfSx0fSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHQucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfXZhciBmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3BsYXRmb3JtTG9jYXRpb249ZSxyLl9iYXNlSHJlZj0iIixudWxsIT1uJiYoci5fYmFzZUhyZWY9bikscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZSh0KSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZSh0KX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9LGUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbnVsbD09ZSYmKGU9IiMiKSxlLmxlbmd0aD4wP2Uuc3Vic3RyaW5nKDEpOmV9LGUucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXt2YXIgZT11LmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsdCk7cmV0dXJuIGUubGVuZ3RoPjA/IiMiK2U6ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rdS5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rdS5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KHMpLGg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbD09biYmKG49ci5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2UgaHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRva2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7cmV0dXJuIHIuX2Jhc2VIcmVmPW4scn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZSh0KSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZSh0KX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9LGUucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gdS5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK3Uubm9ybWFsaXplUXVlcnlQYXJhbXModGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLG49dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBuJiZ0PyIiK2UrbjplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobit1Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK3Uubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KHMpLHA9dm9pZCAwLGQ9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxwXSxbWyJBTSIsIlBNIl0scCxwXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxwLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxwLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIscCwiezF9ICdhdCcgezB9IixwXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIiQiLCJVUyBEb2xsYXIiLHt9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5hYnModCkpLG49dC50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWUmJjA9PT1uPzE6NX1dLG09e30seT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Llplcm89MF09Ilplcm8iLHRbdC5PbmU9MV09Ik9uZSIsdFt0LlR3bz0yXT0iVHdvIix0W3QuRmV3PTNdPSJGZXciLHRbdC5NYW55PTRdPSJNYW55Iix0W3QuT3RoZXI9NV09Ik90aGVyIix0fSh7fSksZz1uZXcgci5wKCJVc2VWNFBsdXJhbHMiKSx2PWZ1bmN0aW9uKCl7fSxiPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIubG9jYWxlPWUsci5kZXByZWNhdGVkUGx1cmFsRm49bixyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFBsdXJhbENhdGVnb3J5PWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuZGVwcmVjYXRlZFBsdXJhbEZuP3RoaXMuZGVwcmVjYXRlZFBsdXJhbEZuKGV8fHRoaXMubG9jYWxlLHQpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksbj1tW2VdO2lmKG4pcmV0dXJuIG47dmFyIHI9ZS5zcGxpdCgiLSIpWzBdO2lmKG49bVtyXSlyZXR1cm4gbjtpZigiZW4iPT09cilyZXR1cm4gZDt0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgIicrdCsnIi4nKX0odClbMThdfShlfHx0aGlzLmxvY2FsZSkodCkpe2Nhc2UgeS5aZXJvOnJldHVybiJ6ZXJvIjtjYXNlIHkuT25lOnJldHVybiJvbmUiO2Nhc2UgeS5Ud286cmV0dXJuInR3byI7Y2FzZSB5LkZldzpyZXR1cm4iZmV3IjtjYXNlIHkuTWFueTpyZXR1cm4ibWFueSI7ZGVmYXVsdDpyZXR1cm4ib3RoZXIifX0sZX0odik7ZnVuY3Rpb24gXyh0LGUpe2U9ZW5jb2RlVVJJQ29tcG9uZW50KGUpO3RyeXtmb3IodmFyIG49T2JqZWN0KGkuZSkodC5zcGxpdCgiOyIpKSxyPW4ubmV4dCgpOyFyLmRvbmU7cj1uLm5leHQoKSl7dmFyIG89ci52YWx1ZSxhPW8uaW5kZXhPZigiPSIpLHM9T2JqZWN0KGkuYykoLTE9PWE/W28sIiJdOltvLnNsaWNlKDAsYSksby5zbGljZShhKzEpXSwyKSxsPXNbMV07aWYoc1swXS50cmltKCk9PT1lKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9fWNhdGNoKHQpe3U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihjPW4ucmV0dXJuKSYmYy5jYWxsKG4pfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgdSxjfXZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9dCx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9ZSx0aGlzLl9uZ0VsPW4sdGhpcy5fcmVuZGVyZXI9cix0aGlzLl9pbml0aWFsQ2xhc3Nlcz1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJrbGFzcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pbml0aWFsQ2xhc3Nlcz0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgvXHMrLyk6W10sdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgvXHMrLyk6dCx0aGlzLl9yYXdDbGFzcyYmKE9iamVjdChyLlRhKSh0aGlzLl9yYXdDbGFzcyk/dGhpcy5faXRlcmFibGVEaWZmZXI9dGhpcy5faXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpOnRoaXMuX2tleVZhbHVlRGlmZmVyPXRoaXMuX2tleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5faXRlcmFibGVEaWZmZXIpe3ZhciB0PXRoaXMuX2l0ZXJhYmxlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO3QmJnRoaXMuX2FwcGx5SXRlcmFibGVDaGFuZ2VzKHQpfWVsc2UgaWYodGhpcy5fa2V5VmFsdWVEaWZmZXIpe3ZhciBlPXRoaXMuX2tleVZhbHVlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO2UmJnRoaXMuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzKGUpfX0sdC5wcm90b3R5cGUuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7dC5wcmV2aW91c1ZhbHVlJiZlLl90b2dnbGVDbGFzcyh0LmtleSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5SXRlcmFibGVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5pdGVtKXRocm93IG5ldyBFcnJvcigiTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAiK09iamVjdChyLmhiKSh0Lml0ZW0pKTtlLl90b2dnbGVDbGFzcyh0Lml0ZW0sITApfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5Q2xhc3Nlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgU2V0P3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMCl9KTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl90b2dnbGVDbGFzcyhuLCEhdFtuXSl9KSl9LHQucHJvdG90eXBlLl9yZW1vdmVDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCExKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSkpfSx0LnByb3RvdHlwZS5fdG9nZ2xlQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzOyh0PXQudHJpbSgpKSYmdC5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24odCl7ZT9uLl9yZW5kZXJlci5hZGRDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCk6bi5fcmVuZGVyZXIucmVtb3ZlQ2xhc3Mobi5fbmdFbC5uYXRpdmVFbGVtZW50LHQpfSl9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy4kaW1wbGljaXQ9dCx0aGlzLm5nRm9yT2Y9ZSx0aGlzLmluZGV4PW4sdGhpcy5jb3VudD1yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibGFzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXZlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvZGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ldmVufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl90ZW1wbGF0ZT1lLHRoaXMuX2RpZmZlcnM9bix0aGlzLl9kaWZmZXI9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRyYWNrQnkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KHIuWSkoKSYmbnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkrIi4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkvY29tbW9uL2luZGV4L05nRm9yLWRpcmVjdGl2ZS5odG1sIyEjY2hhbmdlLXByb3BhZ2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpLHRoaXMuX3RyYWNrQnlGbj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdGb3JUZW1wbGF0ZSIse3NldDpmdW5jdGlvbih0KXt0JiYodGhpcy5fdGVtcGxhdGU9dCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7aWYoIm5nRm9yT2YiaW4gdCl7dmFyIGU9dC5uZ0Zvck9mLmN1cnJlbnRWYWx1ZTtpZighdGhpcy5fZGlmZmVyJiZlKXRyeXt0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIitlKyInIG9mIHR5cGUgJyIrKChuPWUpLm5hbWV8fHR5cGVvZiBuKSsiJy4gTmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy4iKX19dmFyIG59LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe2lmKHRoaXMuX2RpZmZlcil7dmFyIHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5uZ0Zvck9mKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTt0LmZvckVhY2hPcGVyYXRpb24oZnVuY3Rpb24odCxyLGkpe2lmKG51bGw9PXQucHJldmlvdXNJbmRleCl7dmFyIG89ZS5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZS5fdGVtcGxhdGUsbmV3IHgobnVsbCxlLm5nRm9yT2YsLTEsLTEpLGkpLGE9bmV3IEUodCxvKTtuLnB1c2goYSl9ZWxzZSBudWxsPT1pP2UuX3ZpZXdDb250YWluZXIucmVtb3ZlKHIpOihvPWUuX3ZpZXdDb250YWluZXIuZ2V0KHIpLGUuX3ZpZXdDb250YWluZXIubW92ZShvLGkpLGE9bmV3IEUodCxvKSxuLnB1c2goYSkpfSk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspdGhpcy5fcGVyVmlld0NoYW5nZShuW3JdLnZpZXcsbltyXS5yZWNvcmQpO3I9MDtmb3IodmFyIGk9dGhpcy5fdmlld0NvbnRhaW5lci5sZW5ndGg7cjxpO3IrKyl7dmFyIG89dGhpcy5fdmlld0NvbnRhaW5lci5nZXQocik7by5jb250ZXh0LmluZGV4PXIsby5jb250ZXh0LmNvdW50PWl9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7ZS5fdmlld0NvbnRhaW5lci5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX0pfSx0LnByb3RvdHlwZS5fcGVyVmlld0NoYW5nZT1mdW5jdGlvbih0LGUpe3QuY29udGV4dC4kaW1wbGljaXQ9ZS5pdGVtfSx0fSgpLEU9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl9jb250ZXh0PW5ldyBTLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj10LHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZUaGVuIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZFbHNlIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZFbHNlIix0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdXBkYXRlVmlldz1mdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX0sdH0oKSxTPWZ1bmN0aW9uKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH07ZnVuY3Rpb24gayh0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICciK09iamVjdChyLmhiKShlKSsiJy4iKX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2RpZmZlcnM9dCx0aGlzLl9uZ0VsPWUsdGhpcy5fcmVuZGVyZXI9bn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ1N0eWxlIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX25nU3R5bGU9dCwhdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LG51bGwpfSksdC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpfSl9LHQucHJvdG90eXBlLl9zZXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChpLmMpKHQuc3BsaXQoIi4iKSwyKSxyPW5bMF0sbz1uWzFdO251bGwhPShlPW51bGwhPWUmJm8/IiIrZStvOmUpP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyLGUpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0sdH0oKSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6ZnVuY3Rpb24odCl7dGhyb3cgdH19KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHR9KCksQT1uZXcoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVTdWJzY3JpcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aGVuKGUsZnVuY3Rpb24odCl7dGhyb3cgdH0pfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe30sdH0oKSksaj1uZXcgUCxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWY9dCx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpfSx0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29iaj90IT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0odCkpOnRoaXMuX2xhdGVzdFZhbHVlPT09dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT90aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlOih0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHIuUi53cmFwKHRoaXMuX2xhdGVzdFZhbHVlKSk6KHQmJnRoaXMuX3N1YnNjcmliZSh0KSx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHRoaXMuX2xhdGVzdFZhbHVlKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCxmdW5jdGlvbihuKXtyZXR1cm4gZS5fdXBkYXRlTGF0ZXN0VmFsdWUodCxuKX0pfSx0LnByb3RvdHlwZS5fc2VsZWN0U3RyYXRlZ3k9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0KHIuVmEpKGUpKXJldHVybiBBO2lmKE9iamVjdChyLlVhKShlKSlyZXR1cm4gajt0aHJvdyBuPXQsRXJyb3IoIkludmFsaWRQaXBlQXJndW1lbnQ6ICciK2UrIicgZm9yIHBpcGUgJyIrT2JqZWN0KHIuaGIpKG4pKyInIik7dmFyIG59LHQucHJvdG90eXBlLl9kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfSx0LnByb3RvdHlwZS5fdXBkYXRlTGF0ZXN0VmFsdWU9ZnVuY3Rpb24odCxlKXt0PT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfSx0fSgpLE09ZnVuY3Rpb24oKXt9LE49bmV3IHIucCgiRG9jdW1lbnRUb2tlbiIpLFI9ImJyb3dzZXIiLEQ9InNlcnZlciI7ZnVuY3Rpb24gRih0KXtyZXR1cm4gdD09PVJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdD09PUR9fSxKY1J2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJ4VGxhIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dFtyLmFdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX19LEs5SWE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIHI9bigibXJTRyIpLGk9bigiNmJsRiIpLG89bigiRkZPbyIpLGE9bigicHVnVCIpLHM9bigiOGc4QSIpLGw9bigidU1hTyIpLHU9bigiTC9WOSIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kZXN0aW5hdGlvbj1lLG59cmV0dXJuIHIuYihlLHQpLGV9KG8uYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLm9ic2VydmVycz1bXSxlLmNsb3NlZD0hMSxlLmlzU3RvcHBlZD0hMSxlLmhhc0Vycm9yPSExLGUudGhyb3duRXJyb3I9bnVsbCxlfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZVt1LmFdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBoKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7aWYoIXRoaXMuaXNTdG9wcGVkKWZvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGljZSgpLGk9MDtpPG47aSsrKXJbaV0ubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxpPTA7aTxuO2krKylyW2ldLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciB0PXRoaXMub2JzZXJ2ZXJzLGU9dC5sZW5ndGgsbj10LnNsaWNlKCkscj0wO3I8ZTtyKyspbltyXS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkPSEwLHRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPW51bGx9LGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxhLmEuRU1QVFkpOnRoaXMuaXNTdG9wcGVkPyh0LmNvbXBsZXRlKCksYS5hLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgbC5hKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgaS5hO3JldHVybiB0LnNvdXJjZT10aGlzLHR9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBoKHQsZSl9LGV9KGkuYSksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmRlc3RpbmF0aW9uPWUsci5zb3VyY2U9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5uZXh0JiZlLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5lcnJvciYmdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uO3QmJnQuY29tcGxldGUmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHQpOmEuYS5FTVBUWX0sZX0oZil9LCJML1Y5IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigicnhTdWJzY3JpYmVyIik6IkBAcnhTdWJzY3JpYmVyIn0sTUdCUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShuKCJGRk9vIikuYSl9LE1jU286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sUFU4TDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiNmJsRiIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9bmV3IHIuYShmdW5jdGlvbihlKXtlLm5leHQodCksZS5jb21wbGV0ZSgpfSk7cmV0dXJuIGUuX2lzU2NhbGFyPSEwLGUudmFsdWU9dCxlfX0sUGhqbjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigicHNXMCIpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gT2JqZWN0KHIuYSkodCxlLDEpfX0sUzFuWDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPW4oIks5SWEiKSxvPW4oIjZibEYiKSxhPW4oIkZGT28iKSxzPW4oInB1Z1QiKTtmdW5jdGlvbiBsKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHUodCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jb25uZWN0YWJsZT10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25uZWN0YWJsZTtuLl9yZWZDb3VudCsrO3ZhciByPW5ldyBjKHQsbiksaT1lLnN1YnNjcmliZShyKTtyZXR1cm4gci5jbG9zZWR8fChyLmNvbm5lY3Rpb249bi5jb25uZWN0KCkpLGl9LHR9KCksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuY29ubmVjdGFibGU9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbm5lY3RhYmxlO2lmKHQpe3RoaXMuY29ubmVjdGFibGU9bnVsbDt2YXIgZT10Ll9yZWZDb3VudDtpZihlPD0wKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2UgaWYodC5fcmVmQ291bnQ9ZS0xLGU+MSl0aGlzLmNvbm5lY3Rpb249bnVsbDtlbHNle3ZhciBuPXRoaXMuY29ubmVjdGlvbixyPXQuX2Nvbm5lY3Rpb247dGhpcy5jb25uZWN0aW9uPW51bGwsIXJ8fG4mJnIhPT1ufHxyLnVuc3Vic2NyaWJlKCl9fWVsc2UgdGhpcy5jb25uZWN0aW9uPW51bGx9LGV9KGEuYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnNvdXJjZT1lLHIuc3ViamVjdEZhY3Rvcnk9bixyLl9yZWZDb3VudD0wLHIuX2lzQ29tcGxldGU9ITEscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHQpfSxlLnByb3RvdHlwZS5nZXRTdWJqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4gdCYmIXQuaXNTdG9wcGVkfHwodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9LGUucHJvdG90eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb25uZWN0aW9uO3JldHVybiB0fHwodGhpcy5faXNDb21wbGV0ZT0hMSwodD10aGlzLl9jb25uZWN0aW9uPW5ldyBzLmEpLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUobmV3IHAodGhpcy5nZXRTdWJqZWN0KCksdGhpcykpKSx0LmNsb3NlZD8odGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9cy5hLkVNUFRZKTp0aGlzLl9jb25uZWN0aW9uPXQpLHR9LGUucHJvdG90eXBlLnJlZkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIGwoKSh0aGlzKX0sZX0oby5hKS5wcm90b3R5cGUsaD17b3BlcmF0b3I6e3ZhbHVlOm51bGx9LF9yZWZDb3VudDp7dmFsdWU6MCx3cml0YWJsZTohMH0sX3N1YmplY3Q6e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9jb25uZWN0aW9uOnt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSxfc3Vic2NyaWJlOnt2YWx1ZTpmLl9zdWJzY3JpYmV9LF9pc0NvbXBsZXRlOnt2YWx1ZTpmLl9pc0NvbXBsZXRlLHdyaXRhYmxlOiEwfSxnZXRTdWJqZWN0Ont2YWx1ZTpmLmdldFN1YmplY3R9LGNvbm5lY3Q6e3ZhbHVlOmYuY29ubmVjdH0scmVmQ291bnQ6e3ZhbHVlOmYucmVmQ291bnR9fSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5jb25uZWN0YWJsZT1uLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbihlKXt0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY29ubmVjdGFibGUuX2lzQ29tcGxldGU9ITAsdGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7dmFyIGU9dC5fY29ubmVjdGlvbjt0Ll9yZWZDb3VudD0wLHQuX3N1YmplY3Q9bnVsbCx0Ll9jb25uZWN0aW9uPW51bGwsZSYmZS51bnN1YnNjcmliZSgpfX0sZX0oaS5iKTtmdW5jdGlvbiBkKCl7cmV0dXJuIG5ldyBpLmF9ZnVuY3Rpb24gbSgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbCgpKChlPWQsZnVuY3Rpb24odCl7dmFyIG47bj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciByPU9iamVjdC5jcmVhdGUodCxoKTtyZXR1cm4gci5zb3VyY2U9dCxyLnN1YmplY3RGYWN0b3J5PW4scn0pKHQpKTt2YXIgZX19bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KX0sUzVYUTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiREtUYiIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnRoZW4oZnVuY3Rpb24odCl7ZS5jbG9zZWR8fChlLm5leHQodCksZS5jb21wbGV0ZSgpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUuZXJyb3IodCl9KS50aGVuKG51bGwsci5hKSxlfX19LFR4amc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIlpuOEQiKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdChyLmEpKDEpfX0sIlZuRC8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBhKHQsZSkpfX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcmVkaWNhdGU9bixpLnRoaXNBcmc9cixpLmNvdW50PTAsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlfShpLmEpfSxaWUNpOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bigibXJTRyIpLGE9bigiMjZGVSIpLHM9bigiMC91USIpLGw9bigiRi9YTCIpLHU9bigiSzlJYSIpLGM9bigiNmJsRiIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSIpfHx0aGlzO3JldHVybiBuLm5hbWU9IkVtcHR5RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiBvLmIoZSx0KSxlfShFcnJvciksaD1uKCI2N1kvIikscD1uKCJwc1cwIiksZD1uKCJQaGpuIiksbT1uKCJWbkQvIikseT1uKCJGRk9vIiksZz1uKCJiN21XIiksdj1uKCJHNUoxIik7ZnVuY3Rpb24gYih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10P09iamVjdCh2LmIpKCk6ZS5saWZ0KG5ldyBfKHQpKX19dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudG90YWw9dCx0aGlzLnRvdGFsPDApdGhyb3cgbmV3IGcuYX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdyh0LHRoaXMudG90YWwpKX0sdH0oKSx3PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci50b3RhbD1uLHIucmluZz1uZXcgQXJyYXksci5jb3VudD0wLHJ9cmV0dXJuIG8uYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmluZyxuPXRoaXMudG90YWwscj10aGlzLmNvdW50Kys7ZS5sZW5ndGg8bj9lLnB1c2godCk6ZVtyJW5dPXR9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVzdGluYXRpb24sZT10aGlzLmNvdW50O2lmKGU+MClmb3IodmFyIG49dGhpcy5jb3VudD49dGhpcy50b3RhbD90aGlzLnRvdGFsOnRoaXMuY291bnQscj10aGlzLnJpbmcsaT0wO2k8bjtpKyspe3ZhciBvPWUrKyVuO3QubmV4dChyW29dKX10LmNvbXBsZXRlKCl9LGV9KHkuYSkseD1uKCJ4TXlFIiksQz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9RSksT2JqZWN0KHguYSkoe2hhc1ZhbHVlOiExLG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1ZhbHVlPSEwfSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc1ZhbHVlKXRocm93IHQoKX19KX07ZnVuY3Rpb24gRSgpe3JldHVybiBuZXcgZn1mdW5jdGlvbiBPKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBTKHQpKX19dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGsodCx0aGlzLmRlZmF1bHRWYWx1ZSkpfSx0fSgpLGs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmRlZmF1bHRWYWx1ZT1uLHIuaXNFbXB0eT0hMCxyfXJldHVybiBvLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmlzRW1wdHk9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkmJnRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfSh5LmEpLFQ9bigibUNoRiIpO2Z1bmN0aW9uIFAodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/T2JqZWN0KG0uYSkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KTpULmEsYigxKSxuP08oZSk6QyhmdW5jdGlvbigpe3JldHVybiBuZXcgZn0pKX19dmFyIEE9bigiOVoxRiIpO2Z1bmN0aW9uIGoodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgSSh0LGUsbikpfX12YXIgST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucHJlZGljYXRlPXQsdGhpcy50aGlzQXJnPWUsdGhpcy5zb3VyY2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgTSh0LHRoaXMucHJlZGljYXRlLHRoaXMudGhpc0FyZyx0aGlzLnNvdXJjZSkpfSx0fSgpLE09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5wcmVkaWNhdGU9bixvLnRoaXNBcmc9cixvLnNvdXJjZT1pLG8uaW5kZXg9MCxvLnRoaXNBcmc9cnx8byxvfXJldHVybiBvLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT0hMTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuaW5kZXgrKyx0aGlzLnNvdXJjZSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1lfHx0aGlzLm5vdGlmeUNvbXBsZXRlKCExKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5ub3RpZnlDb21wbGV0ZSghMCl9LGV9KHkuYSksTj1uKCJ0OWZaIik7ZnVuY3Rpb24gUih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9PYmplY3QobS5hKShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pOlQuYSxPYmplY3QoTi5hKSgxKSxuP08oZSk6QyhmdW5jdGlvbigpe3JldHVybiBuZXcgZn0pKX19dmFyIEQ9bigiWm44RCIpLEY9bigiVHhqZyIpO2Z1bmN0aW9uIEwodCxlKXt2YXIgbj0hMTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MiYmKG49ITApLGZ1bmN0aW9uKHIpe3JldHVybiByLmxpZnQobmV3IFYodCxlLG4pKX19dmFyIFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSksdGhpcy5hY2N1bXVsYXRvcj10LHRoaXMuc2VlZD1lLHRoaXMuaGFzU2VlZD1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBCKHQsdGhpcy5hY2N1bXVsYXRvcix0aGlzLnNlZWQsdGhpcy5oYXNTZWVkKSl9LHR9KCksQj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLmFjY3VtdWxhdG9yPW4sby5fc2VlZD1yLG8uaGFzU2VlZD1pLG8uaW5kZXg9MCxvfXJldHVybiBvLmIoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaGFzU2VlZD0hMCx0aGlzLl9zZWVkPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXNTZWVkKXJldHVybiB0aGlzLl90cnlOZXh0KHQpO3RoaXMuc2VlZD10LHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5hY2N1bXVsYXRvcih0aGlzLnNlZWQsdCxuKX1jYXRjaCh0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuc2VlZD1lLHRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oeS5hKSx6PW4oInkzQnkiKSxVPW4oIlpZanQiKTtuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gb259KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4gZG59KSxuLmQoZSwieiIsZnVuY3Rpb24oKXtyZXR1cm4gbW59KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4geW59KSxuLmQoZSwidiIsZnVuY3Rpb24oKXtyZXR1cm4gY259KSxuLmQoZSwidSIsZnVuY3Rpb24oKXtyZXR1cm4gdW59KSxuLmQoZSwieCIsZnVuY3Rpb24oKXtyZXR1cm4gcG59KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gc259KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gaG59KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gWWV9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gWGV9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gRGV9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gUWV9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gTGV9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gcm59KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gZ259KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gbG59KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gS2V9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZW59KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gdG59KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gSmV9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gbm59KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb2V9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gQmV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gVHR9KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4ga3R9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gb3R9KTt2YXIgSD1mdW5jdGlvbih0LGUpe3RoaXMuaWQ9dCx0aGlzLnVybD1lfSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dm9pZCAwPT09ciYmKHI9ImltcGVyYXRpdmUiKSx2b2lkIDA9PT1pJiYoaT1udWxsKTt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLm5hdmlnYXRpb25UcmlnZ2VyPXIsby5yZXN0b3JlZFN0YXRlPWksb31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uU3RhcnQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KEgpLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS51cmxBZnRlclJlZGlyZWN0cz1yLGl9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInKSJ9LGV9KEgpLEc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS5yZWFzb249cixpfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25DYW5jZWwoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KEgpLFk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS5lcnJvcj1yLGl9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVycm9yKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgZXJyb3I6ICIrdGhpcy5lcnJvcisiKSJ9LGV9KEgpLFc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVzUmVjb2duaXplZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja1N0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBhLnVybEFmdGVyUmVkaXJlY3RzPXIsYS5zdGF0ZT1pLGEuc2hvdWxkQWN0aXZhdGU9byxhfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkd1YXJkc0NoZWNrRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIiwgc2hvdWxkQWN0aXZhdGU6ICIrdGhpcy5zaG91bGRBY3RpdmF0ZSsiKSJ9LGV9KEgpLFg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmVzb2x2ZVN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVFbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucm91dGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVDb25maWdMb2FkU3RhcnQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJvdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlQ29uZmlnTG9hZEVuZChwYXRoOiAiK3RoaXMucm91dGUucGF0aCsiKSJ9LHR9KCksZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2hpbGRBY3RpdmF0aW9uU3RhcnQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2hpbGRBY3RpdmF0aW9uRW5kKHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLHJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFjdGl2YXRpb25TdGFydChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxpdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBY3RpdmF0aW9uRW5kKHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLG90PWZ1bmN0aW9uKCl7fSxhdD0icHJpbWFyeSIsc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucGFyYW1zPXR8fHt9fXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGFyYW1zLmhhc093blByb3BlcnR5KHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXModCkpe3ZhciBlPXRoaXMucGFyYW1zW3RdO3JldHVybiBBcnJheS5pc0FycmF5KGUpP2VbMF06ZX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzKHQpKXt2YXIgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOltlXX1yZXR1cm5bXX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJrZXlzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIGx0KHQpe3JldHVybiBuZXcgc3QodCl9ZnVuY3Rpb24gdXQodCxlLG4pe3ZhciByPW4ucGF0aC5zcGxpdCgiLyIpO2lmKHIubGVuZ3RoPnQubGVuZ3RoKXJldHVybiBudWxsO2lmKCJmdWxsIj09PW4ucGF0aE1hdGNoJiYoZS5oYXNDaGlsZHJlbigpfHxyLmxlbmd0aDx0Lmxlbmd0aCkpcmV0dXJuIG51bGw7Zm9yKHZhciBpPXt9LG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGE9cltvXSxzPXRbb107aWYoYS5zdGFydHNXaXRoKCI6IikpaVthLnN1YnN0cmluZygxKV09cztlbHNlIGlmKGEhPT1zLnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOnQuc2xpY2UoMCxyLmxlbmd0aCkscG9zUGFyYW1zOml9fXZhciBjdD1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVzPXQsdGhpcy5tb2R1bGU9ZX07ZnVuY3Rpb24gZnQodCxlKXt2b2lkIDA9PT1lJiYoZT0iIik7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07aHQocixwdChlLHIpKX19ZnVuY3Rpb24gaHQodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IEVuY291bnRlcmVkIHVuZGVmaW5lZCByb3V0ZS5cbiAgICAgIFRoZSByZWFzb24gbWlnaHQgYmUgYW4gZXh0cmEgY29tbWEuXG5cbiAgICAgIEV4YW1wbGU6XG4gICAgICBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAgICAgICAgeyBwYXRoOiAnJywgcmVkaXJlY3RUbzogJy9kYXNoYm9hcmQnLCBwYXRoTWF0Y2g6ICdmdWxsJyB9LFxuICAgICAgICB7IHBhdGg6ICdkYXNoYm9hcmQnLCAgY29tcG9uZW50OiBEYXNoYm9hcmRDb21wb25lbnQgfSwsIDw8IHR3byBjb21tYXNcbiAgICAgICAgeyBwYXRoOiAnZGV0YWlsLzppZCcsIGNvbXBvbmVudDogSGVyb0RldGFpbENvbXBvbmVudCB9XG4gICAgICBdO1xuICAgICIpO2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogQXJyYXkgY2Fubm90IGJlIHNwZWNpZmllZCIpO2lmKCF0LmNvbXBvbmVudCYmIXQuY2hpbGRyZW4mJiF0LmxvYWRDaGlsZHJlbiYmdC5vdXRsZXQmJnQub3V0bGV0IT09YXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogYSBjb21wb25lbnRsZXNzIHJvdXRlIHdpdGhvdXQgY2hpbGRyZW4gb3IgbG9hZENoaWxkcmVuIGNhbm5vdCBoYXZlIGEgbmFtZWQgb3V0bGV0IHNldCIpO2lmKHQucmVkaXJlY3RUbyYmdC5jaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBjaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucmVkaXJlY3RUbyYmdC5sb2FkQ2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgbG9hZENoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5jaGlsZHJlbiYmdC5sb2FkQ2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogY2hpbGRyZW4gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucmVkaXJlY3RUbyYmdC5jb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgY29tcG9uZW50IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5wYXRoJiZ0Lm1hdGNoZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aCBhbmQgbWF0Y2hlciBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHZvaWQgMD09PXQucmVkaXJlY3RUbyYmIXQuY29tcG9uZW50JiYhdC5jaGlsZHJlbiYmIXQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIicuIE9uZSBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgcHJvdmlkZWQ6IGNvbXBvbmVudCwgcmVkaXJlY3RUbywgY2hpbGRyZW4gb3IgbG9hZENoaWxkcmVuIik7aWYodm9pZCAwPT09dC5wYXRoJiZ2b2lkIDA9PT10Lm1hdGNoZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcm91dGVzIG11c3QgaGF2ZSBlaXRoZXIgYSBwYXRoIG9yIGEgbWF0Y2hlciBzcGVjaWZpZWQiKTtpZigic3RyaW5nIj09dHlwZW9mIHQucGF0aCYmIi8iPT09dC5wYXRoLmNoYXJBdCgwKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoIGNhbm5vdCBzdGFydCB3aXRoIGEgc2xhc2giKTtpZigiIj09PXQucGF0aCYmdm9pZCAwIT09dC5yZWRpcmVjdFRvJiZ2b2lkIDA9PT10LnBhdGhNYXRjaCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAne3BhdGg6IFwiIitlKyciLCByZWRpcmVjdFRvOiAiJyt0LnJlZGlyZWN0VG8rIlwifSc6IHBsZWFzZSBwcm92aWRlICdwYXRoTWF0Y2gnLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAncGF0aE1hdGNoJyBpcyAncHJlZml4JywgYnV0IG9mdGVuIHRoZSBpbnRlbnQgaXMgdG8gdXNlICdmdWxsJy4iKTtpZih2b2lkIDAhPT10LnBhdGhNYXRjaCYmImZ1bGwiIT09dC5wYXRoTWF0Y2gmJiJwcmVmaXgiIT09dC5wYXRoTWF0Y2gpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aE1hdGNoIGNhbiBvbmx5IGJlIHNldCB0byAncHJlZml4JyBvciAnZnVsbCciKTt0LmNoaWxkcmVuJiZmdCh0LmNoaWxkcmVuLGUpfWZ1bmN0aW9uIHB0KHQsZSl7cmV0dXJuIGU/dHx8ZS5wYXRoP3QmJiFlLnBhdGg/dCsiLyI6IXQmJmUucGF0aD9lLnBhdGg6dCsiLyIrZS5wYXRoOiIiOnR9ZnVuY3Rpb24gZHQodCl7dmFyIGU9dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5tYXAoZHQpLG49ZT9PYmplY3Qoby5hKSh7fSx0LHtjaGlsZHJlbjplfSk6T2JqZWN0KG8uYSkoe30sdCk7cmV0dXJuIW4uY29tcG9uZW50JiYoZXx8bi5sb2FkQ2hpbGRyZW4pJiZuLm91dGxldCYmbi5vdXRsZXQhPT1hdCYmKG4uY29tcG9uZW50PW90KSxufWZ1bmN0aW9uIG10KHQsZSl7dmFyIG4scj1PYmplY3Qua2V5cyh0KSxpPU9iamVjdC5rZXlzKGUpO2lmKHIubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZih0W249cltvXV0hPT1lW25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHl0KHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpfWZ1bmN0aW9uIGd0KHQpe3JldHVybiB0Lmxlbmd0aD4wP3RbdC5sZW5ndGgtMV06bnVsbH1mdW5jdGlvbiB2dCh0LGUpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmUodFtuXSxuKX1mdW5jdGlvbiBidCh0KXtyZXR1cm4gdC5waXBlKE9iamVjdChELmEpKCksaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIE9iamVjdChpLlVhKSh0KT90Ok9iamVjdChpLlZhKSh0KT9PYmplY3Qocy5hKShQcm9taXNlLnJlc29sdmUodCkpOk9iamVjdChsLmEpKHQpfWZ1bmN0aW9uIHd0KHQsZSxuKXtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe3JldHVybiBtdCh0LGUpfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7aWYoIU90KGUuc2VnbWVudHMsbi5zZWdtZW50cykpcmV0dXJuITE7aWYoZS5udW1iZXJPZkNoaWxkcmVuIT09bi5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcih2YXIgciBpbiBuLmNoaWxkcmVuKXtpZighZS5jaGlsZHJlbltyXSlyZXR1cm4hMTtpZighdChlLmNoaWxkcmVuW3JdLG4uY2hpbGRyZW5bcl0pKXJldHVybiExfXJldHVybiEwfSh0LnJvb3QsZS5yb290KTpmdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5sZW5ndGg8PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmT2JqZWN0LmtleXMoZSkuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIGVbbl09PT10W25dfSl9KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcykmJmZ1bmN0aW9uIHQoZSxuKXtyZXR1cm4gZnVuY3Rpb24gZShuLHIsaSl7aWYobi5zZWdtZW50cy5sZW5ndGg+aS5sZW5ndGgpcmV0dXJuISFPdChhPW4uc2VnbWVudHMuc2xpY2UoMCxpLmxlbmd0aCksaSkmJiFyLmhhc0NoaWxkcmVuKCk7aWYobi5zZWdtZW50cy5sZW5ndGg9PT1pLmxlbmd0aCl7aWYoIU90KG4uc2VnbWVudHMsaSkpcmV0dXJuITE7Zm9yKHZhciBvIGluIHIuY2hpbGRyZW4pe2lmKCFuLmNoaWxkcmVuW29dKXJldHVybiExO2lmKCF0KG4uY2hpbGRyZW5bb10sci5jaGlsZHJlbltvXSkpcmV0dXJuITF9cmV0dXJuITB9dmFyIGE9aS5zbGljZSgwLG4uc2VnbWVudHMubGVuZ3RoKSxzPWkuc2xpY2Uobi5zZWdtZW50cy5sZW5ndGgpO3JldHVybiEhT3Qobi5zZWdtZW50cyxhKSYmISFuLmNoaWxkcmVuW2F0XSYmZShuLmNoaWxkcmVuW2F0XSxyLHMpfShlLG4sbi5zZWdtZW50cyl9KHQucm9vdCxlLnJvb3QpfXZhciB4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucm9vdD10LHRoaXMucXVlcnlQYXJhbXM9ZSx0aGlzLmZyYWdtZW50PW59cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD1sdCh0aGlzLnF1ZXJ5UGFyYW1zKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBQdC5zZXJpYWxpemUodGhpcyl9LHR9KCksQ3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLnNlZ21lbnRzPXQsdGhpcy5jaGlsZHJlbj1lLHRoaXMucGFyZW50PW51bGwsdnQoZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LnBhcmVudD1ufSl9cmV0dXJuIHQucHJvdG90eXBlLmhhc0NoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtYmVyT2ZDaGlsZHJlbj4wfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm51bWJlck9mQ2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEF0KHRoaXMpfSx0fSgpLEV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucGF0aD10LHRoaXMucGFyYW1ldGVycz1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtZXRlck1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9bHQodGhpcy5wYXJhbWV0ZXJzKSksdGhpcy5fcGFyYW1ldGVyTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIER0KHRoaXMpfSx0fSgpO2Z1bmN0aW9uIE90KHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5wYXRoPT09ZVtuXS5wYXRofSl9ZnVuY3Rpb24gU3QodCxlKXt2YXIgbj1bXTtyZXR1cm4gdnQodC5jaGlsZHJlbixmdW5jdGlvbih0LHIpe3I9PT1hdCYmKG49bi5jb25jYXQoZSh0LHIpKSl9KSx2dCh0LmNoaWxkcmVuLGZ1bmN0aW9uKHQscil7ciE9PWF0JiYobj1uLmNvbmNhdChlKHQscikpKX0pLG59dmFyIGt0PWZ1bmN0aW9uKCl7fSxUdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB6dCh0KTtyZXR1cm4gbmV3IHh0KGUucGFyc2VSb290U2VnbWVudCgpLGUucGFyc2VRdWVyeVBhcmFtcygpLGUucGFyc2VGcmFnbWVudCgpKX0sdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlLG47cmV0dXJuIi8iK2Z1bmN0aW9uIHQoZSxuKXtpZighZS5oYXNDaGlsZHJlbigpKXJldHVybiBBdChlKTtpZihuKXt2YXIgcj1lLmNoaWxkcmVuW2F0XT90KGUuY2hpbGRyZW5bYXRdLCExKToiIixpPVtdO3JldHVybiB2dChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbil7biE9PWF0JiZpLnB1c2gobisiOiIrdChlLCExKSl9KSxpLmxlbmd0aD4wP3IrIigiK2kuam9pbigiLy8iKSsiKSI6cn12YXIgbz1TdChlLGZ1bmN0aW9uKG4scil7cmV0dXJuIHI9PT1hdD9bdChlLmNoaWxkcmVuW2F0XSwhMSldOltyKyI6Iit0KG4sITEpXX0pO3JldHVybiBBdChlKSsiLygiK28uam9pbigiLy8iKSsiKSJ9KHQucm9vdCwhMCkrKGU9dC5xdWVyeVBhcmFtcywobj1PYmplY3Qua2V5cyhlKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49ZVt0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gSXQodCkrIj0iK0l0KGUpfSkuam9pbigiJiIpOkl0KHQpKyI9IitJdChuKX0pKS5sZW5ndGg/Ij8iK24uam9pbigiJiIpOiIiKSsoInN0cmluZyI9PXR5cGVvZiB0LmZyYWdtZW50PyIjIitlbmNvZGVVUkkodC5mcmFnbWVudCk6IiIpfSx0fSgpLFB0PW5ldyBUdDtmdW5jdGlvbiBBdCh0KXtyZXR1cm4gdC5zZWdtZW50cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIER0KHQpfSkuam9pbigiLyIpfWZ1bmN0aW9uIGp0KHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2csIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiBqdCh0KS5yZXBsYWNlKC8lM0IvZ2ksIjsiKX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4ganQodCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gTnQodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gTnQodC5yZXBsYWNlKC9cKy9nLCIlMjAiKSl9ZnVuY3Rpb24gRHQodCl7cmV0dXJuIiIrTXQodC5wYXRoKSsoZT10LnBhcmFtZXRlcnMsT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiI7IitNdCh0KSsiPSIrTXQoZVt0XSl9KS5qb2luKCIiKSk7dmFyIGV9dmFyIEZ0PS9eW15cLygpPzs9I10rLztmdW5jdGlvbiBMdCh0KXt2YXIgZT10Lm1hdGNoKEZ0KTtyZXR1cm4gZT9lWzBdOiIifXZhciBWdD0vXltePT8mI10rLyxCdD0vXltePyYjXSsvLHp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnVybD10LHRoaXMucmVtYWluaW5nPXR9cmV0dXJuIHQucHJvdG90eXBlLnBhcnNlUm9vdFNlZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgQ3QoW10se30pOm5ldyBDdChbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9LHQucHJvdG90eXBlLnBhcnNlUXVlcnlQYXJhbXM9ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPyIpKWRve3RoaXMucGFyc2VRdWVyeVBhcmFtKHQpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsKCImIikpO3JldHVybiB0fSx0LnByb3RvdHlwZS5wYXJzZUZyYWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfSx0LnByb3RvdHlwZS5wYXJzZUNoaWxkcmVuPWZ1bmN0aW9uKCl7aWYoIiI9PT10aGlzLnJlbWFpbmluZylyZXR1cm57fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpO3ZhciB0PVtdO2Zvcih0aGlzLnBlZWtTdGFydHNXaXRoKCIoIil8fHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKTspdGhpcy5jYXB0dXJlKCIvIiksdC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3ZhciBlPXt9O3RoaXMucGVla1N0YXJ0c1dpdGgoIi8oIikmJih0aGlzLmNhcHR1cmUoIi8iKSxlPXRoaXMucGFyc2VQYXJlbnMoITApKTt2YXIgbj17fTtyZXR1cm4gdGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpJiYobj10aGlzLnBhcnNlUGFyZW5zKCExKSksKHQubGVuZ3RoPjB8fE9iamVjdC5rZXlzKGUpLmxlbmd0aD4wKSYmKG5bYXRdPW5ldyBDdCh0LGUpKSxufSx0LnByb3RvdHlwZS5wYXJzZVNlZ21lbnQ9ZnVuY3Rpb24oKXt2YXIgdD1MdCh0aGlzLnJlbWFpbmluZyk7aWYoIiI9PT10JiZ0aGlzLnBlZWtTdGFydHNXaXRoKCI7IikpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBwYXRoIHVybCBzZWdtZW50IGNhbm5vdCBoYXZlIHBhcmFtZXRlcnM6ICciK3RoaXMucmVtYWluaW5nKyInLiIpO3JldHVybiB0aGlzLmNhcHR1cmUodCksbmV3IEV0KE50KHQpLHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKSl9LHQucHJvdG90eXBlLnBhcnNlTWF0cml4UGFyYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCI7Iik7KXRoaXMucGFyc2VQYXJhbSh0KTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VQYXJhbT1mdW5jdGlvbih0KXt2YXIgZT1MdCh0aGlzLnJlbWFpbmluZyk7aWYoZSl7dGhpcy5jYXB0dXJlKGUpO3ZhciBuPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciByPUx0KHRoaXMucmVtYWluaW5nKTtyJiZ0aGlzLmNhcHR1cmUobj1yKX10W050KGUpXT1OdChuKX19LHQucHJvdG90eXBlLnBhcnNlUXVlcnlQYXJhbT1mdW5jdGlvbih0KXt2YXIgZSxuPShlPXRoaXMucmVtYWluaW5nLm1hdGNoKFZ0KSk/ZVswXToiIjtpZihuKXt0aGlzLmNhcHR1cmUobik7dmFyIHI9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChCdCk7cmV0dXJuIGU/ZVswXToiIn0odGhpcy5yZW1haW5pbmcpO2kmJnRoaXMuY2FwdHVyZShyPWkpfXZhciBvPVJ0KG4pLGE9UnQocik7aWYodC5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIHM9dFtvXTtBcnJheS5pc0FycmF5KHMpfHwodFtvXT1zPVtzXSkscy5wdXNoKGEpfWVsc2UgdFtvXT1hfX0sdC5wcm90b3R5cGUucGFyc2VQYXJlbnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe3ZhciBuPUx0KHRoaXMucmVtYWluaW5nKSxyPXRoaXMucmVtYWluaW5nW24ubGVuZ3RoXTtpZigiLyIhPT1yJiYiKSIhPT1yJiYiOyIhPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBhcnNlIHVybCAnIit0aGlzLnVybCsiJyIpO3ZhciBpPXZvaWQgMDtuLmluZGV4T2YoIjoiKT4tMT8oaT1uLnN1YnN0cigwLG4uaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoaSksdGhpcy5jYXB0dXJlKCI6IikpOnQmJihpPWF0KTt2YXIgbz10aGlzLnBhcnNlQ2hpbGRyZW4oKTtlW2ldPTE9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGg/b1thdF06bmV3IEN0KFtdLG8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBlfSx0LnByb3RvdHlwZS5wZWVrU3RhcnRzV2l0aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aCh0KX0sdC5wcm90b3R5cGUuY29uc3VtZU9wdGlvbmFsPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aCh0KSYmKHRoaXMucmVtYWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyh0Lmxlbmd0aCksITApfSx0LnByb3RvdHlwZS5jYXB0dXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmNvbnN1bWVPcHRpb25hbCh0KSl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICInK3QrJyIuJyl9LHR9KCksVXQ9ZnVuY3Rpb24odCl7dGhpcy5zZWdtZW50R3JvdXA9dHx8bnVsbH0sSHQ9ZnVuY3Rpb24odCl7dGhpcy51cmxUcmVlPXR9O2Z1bmN0aW9uIFF0KHQpe3JldHVybiBuZXcgYy5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBVdCh0KSl9KX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgSHQodCkpfSl9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIG5ldyBjLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEVycm9yKCJPbmx5IGFic29sdXRlIHJlZGlyZWN0cyBjYW4gaGF2ZSBuYW1lZCBvdXRsZXRzLiByZWRpcmVjdFRvOiAnIit0KyInIikpfSl9dmFyIFl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8pe3RoaXMuY29uZmlnTG9hZGVyPWUsdGhpcy51cmxTZXJpYWxpemVyPW4sdGhpcy51cmxUcmVlPXIsdGhpcy5jb25maWc9byx0aGlzLmFsbG93UmVkaXJlY3RzPSEwLHRoaXMubmdNb2R1bGU9dC5nZXQoaS53KX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHRoaXMudXJsVHJlZS5yb290LGF0KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNyZWF0ZVVybFRyZWUoZSx0LnVybFRyZWUucXVlcnlQYXJhbXMsdC51cmxUcmVlLmZyYWdtZW50KX0pKS5waXBlKE9iamVjdChBLmEpKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBIdClyZXR1cm4gdC5hbGxvd1JlZGlyZWN0cz0hMSx0Lm1hdGNoKGUudXJsVHJlZSk7aWYoZSBpbnN0YW5jZW9mIFV0KXRocm93IHQubm9NYXRjaEVycm9yKGUpO3Rocm93IGV9KSl9LHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuZXhwYW5kU2VnbWVudEdyb3VwKHRoaXMubmdNb2R1bGUsdGhpcy5jb25maWcsdC5yb290LGF0KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG4pe3JldHVybiBlLmNyZWF0ZVVybFRyZWUobix0LnF1ZXJ5UGFyYW1zLHQuZnJhZ21lbnQpfSkpLnBpcGUoT2JqZWN0KEEuYSkoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFV0KXRocm93IGUubm9NYXRjaEVycm9yKHQpO3Rocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTWF0Y2hFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKCJDYW5ub3QgbWF0Y2ggYW55IHJvdXRlcy4gVVJMIFNlZ21lbnQ6ICciK3Quc2VnbWVudEdyb3VwKyInIil9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5zZWdtZW50cy5sZW5ndGg+MD9uZXcgQ3QoW10sKChyPXt9KVthdF09dCxyKSk6dDtyZXR1cm4gbmV3IHh0KGksZSxuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAwPT09bi5zZWdtZW50cy5sZW5ndGgmJm4uaGFzQ2hpbGRyZW4oKT90aGlzLmV4cGFuZENoaWxkcmVuKHQsZSxuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3QoW10sdCl9KSk6dGhpcy5leHBhbmRTZWdtZW50KHQsbixlLG4uc2VnbWVudHMsciwhMCl9LHQucHJvdG90eXBlLmV4cGFuZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3JldHVybiBmdW5jdGlvbihuLGkpe2lmKDA9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGgpcmV0dXJuIE9iamVjdChsLmEpKHt9KTt2YXIgbz1bXSxhPVtdLHM9e307cmV0dXJuIHZ0KG4sZnVuY3Rpb24obixpKXt2YXIgbCx1LGM9KGw9aSx1PW4sci5leHBhbmRTZWdtZW50R3JvdXAodCxlLHUsbCkpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIHNbaV09dH0pKTtpPT09YXQ/by5wdXNoKGMpOmEucHVzaChjKX0pLGwuYS5hcHBseShudWxsLG8uY29uY2F0KGEpKS5waXBlKE9iamVjdChGLmEpKCksUCgpLE9iamVjdChoLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSl9KG4uY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgcz10aGlzO3JldHVybiBsLmEuYXBwbHkodm9pZCAwLE9iamVjdChvLmQpKG4pKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG8pe3JldHVybiBzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGUodCxlLG4sbyxyLGksYSkucGlwZShPYmplY3QoQS5hKShmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVXQpcmV0dXJuIE9iamVjdChsLmEpKG51bGwpO3Rocm93IHR9KSl9KSxPYmplY3QoRi5hKSgpLFIoZnVuY3Rpb24odCl7cmV0dXJuISF0fSksT2JqZWN0KEEuYSkoZnVuY3Rpb24odCxuKXtpZih0IGluc3RhbmNlb2YgZnx8IkVtcHR5RXJyb3IiPT09dC5uYW1lKXtpZihzLm5vTGVmdG92ZXJzSW5VcmwoZSxyLGkpKXJldHVybiBPYmplY3QobC5hKShuZXcgQ3QoW10se30pKTt0aHJvdyBuZXcgVXQoZSl9dGhyb3cgdH0pKX0sdC5wcm90b3R5cGUubm9MZWZ0b3ZlcnNJblVybD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLmxlbmd0aCYmIXQuY2hpbGRyZW5bbl19LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGU9ZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuIFh0KHIpIT09bz9RdChlKTp2b2lkIDA9PT1yLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUodCxlLHIsaSk6YSYmdGhpcy5hbGxvd1JlZGlyZWN0cz90aGlzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQsZSxuLHIsaSxvKTpRdChlKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybiIqKiI9PT1yLnBhdGg/dGhpcy5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQsbixyLG8pOnRoaXMuZXhwYW5kUmVndWxhclNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQsZSxuLHIsaSxvKX0sdC5wcm90b3R5cGUuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5hcHBseVJlZGlyZWN0Q29tbWFuZHMoW10sbi5yZWRpcmVjdFRvLHt9KTtyZXR1cm4gbi5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9xdChvKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhuLG8pLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24obil7dmFyIG89bmV3IEN0KG4se30pO3JldHVybiBpLmV4cGFuZFNlZ21lbnQodCxvLGUsbixyLCExKX0pKX0sdC5wcm90b3R5cGUuZXhwYW5kUmVndWxhclNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10aGlzLHM9V3QoZSxyLGkpLGw9cy5jb25zdW1lZFNlZ21lbnRzLHU9cy5sYXN0Q2hpbGQsYz1zLnBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzO2lmKCFzLm1hdGNoZWQpcmV0dXJuIFF0KGUpO3ZhciBmPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKGwsci5yZWRpcmVjdFRvLGMpO3JldHVybiByLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP3F0KGYpOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKHIsZikucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihyKXtyZXR1cm4gYS5leHBhbmRTZWdtZW50KHQsZSxuLHIuY29uY2F0KGkuc2xpY2UodSkpLG8sITEpfSkpfSx0LnByb3RvdHlwZS5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztpZigiKioiPT09bi5wYXRoKXJldHVybiBuLmxvYWRDaGlsZHJlbj90aGlzLmNvbmZpZ0xvYWRlci5sb2FkKHQuaW5qZWN0b3IsbikucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtyZXR1cm4gbi5fbG9hZGVkQ29uZmlnPXQsbmV3IEN0KHIse30pfSkpOk9iamVjdChsLmEpKG5ldyBDdChyLHt9KSk7dmFyIGE9V3QoZSxuLHIpLHM9YS5jb25zdW1lZFNlZ21lbnRzLHU9YS5sYXN0Q2hpbGQ7aWYoIWEubWF0Y2hlZClyZXR1cm4gUXQoZSk7dmFyIGM9ci5zbGljZSh1KTtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbmZpZyh0LG4pLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24odCl7dmFyIG49dC5tb2R1bGUscj10LnJvdXRlcyxhPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBuLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gS3QodCxlLG4pJiZYdChuKSE9PWF0fSl9KHQsbik/e3NlZ21lbnRHcm91cDpadChuZXcgQ3QoZSxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT17fTtpW2F0XT1lO3RyeXtmb3IodmFyIGE9T2JqZWN0KG8uZSkodCkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciBsPXMudmFsdWU7IiI9PT1sLnBhdGgmJlh0KGwpIT09YXQmJihpW1h0KGwpXT1uZXcgQ3QoW10se30pKX19Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKHI9YS5yZXR1cm4pJiZyLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBpfShyLG5ldyBDdChuLHQuY2hpbGRyZW4pKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09bi5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBLdCh0LGUsbil9KX0odCxuKT97c2VnbWVudEdyb3VwOlp0KG5ldyBDdCh0LnNlZ21lbnRzLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEscz17fTt0cnl7Zm9yKHZhciBsPU9iamVjdChvLmUpKG4pLHU9bC5uZXh0KCk7IXUuZG9uZTt1PWwubmV4dCgpKXt2YXIgYz11LnZhbHVlO0t0KHQsZSxjKSYmIXJbWHQoYyldJiYoc1tYdChjKV09bmV3IEN0KFtdLHt9KSl9fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihhPWwucmV0dXJuKSYmYS5jYWxsKGwpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gT2JqZWN0KG8uYSkoe30scixzKX0odCxuLHIsdC5jaGlsZHJlbikpKSxzbGljZWRTZWdtZW50czpufTp7c2VnbWVudEdyb3VwOnQsc2xpY2VkU2VnbWVudHM6bn19KGUscyxjLHIpLHU9YS5zZWdtZW50R3JvdXAsZj1hLnNsaWNlZFNlZ21lbnRzO3JldHVybiAwPT09Zi5sZW5ndGgmJnUuaGFzQ2hpbGRyZW4oKT9pLmV4cGFuZENoaWxkcmVuKG4scix1KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3Qocyx0KX0pKTowPT09ci5sZW5ndGgmJjA9PT1mLmxlbmd0aD9PYmplY3QobC5hKShuZXcgQ3Qocyx7fSkpOmkuZXhwYW5kU2VnbWVudChuLHUscixmLGF0LCEwKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3Qocy5jb25jYXQodC5zZWdtZW50cyksdC5jaGlsZHJlbil9KSl9KSl9LHQucHJvdG90eXBlLmdldENoaWxkQ29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gZS5jaGlsZHJlbj9PYmplY3QobC5hKShuZXcgY3QoZS5jaGlsZHJlbix0KSk6ZS5sb2FkQ2hpbGRyZW4/dm9pZCAwIT09ZS5fbG9hZGVkQ29uZmlnP09iamVjdChsLmEpKGUuX2xvYWRlZENvbmZpZyk6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNhbkxvYWQ7cmV0dXJuIG4mJjAhPT1uLmxlbmd0aD9idChPYmplY3Qocy5hKShuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG4pe3ZhciByPXQuZ2V0KG4pO3JldHVybiBfdChyLmNhbkxvYWQ/ci5jYW5Mb2FkKGUpOnIoZSkpfSkpKTpPYmplY3QobC5hKSghMCl9KHQuaW5qZWN0b3IsZSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihyKXtyZXR1cm4gcj9uLmNvbmZpZ0xvYWRlci5sb2FkKHQuaW5qZWN0b3IsZSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fbG9hZGVkQ29uZmlnPXQsdH0pKTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcigoKG49RXJyb3IoIk5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogQ2Fubm90IGxvYWQgY2hpbGRyZW4gYmVjYXVzZSB0aGUgZ3VhcmQgb2YgdGhlIHJvdXRlIFwicGF0aDogJyIrdC5wYXRoKyInXCIgcmV0dXJuZWQgZmFsc2UiKSkubmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I9ITAsbikpO3ZhciBufSl9KGUpfSkpOk9iamVjdChsLmEpKG5ldyBjdChbXSx0KSl9LHQucHJvdG90eXBlLmxpbmVyYWxpemVTZWdtZW50cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxyPWUucm9vdDs7KXtpZihuPW4uY29uY2F0KHIuc2VnbWVudHMpLDA9PT1yLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuIE9iamVjdChsLmEpKG4pO2lmKHIubnVtYmVyT2ZDaGlsZHJlbj4xfHwhci5jaGlsZHJlblthdF0pcmV0dXJuIEd0KHQucmVkaXJlY3RUbyk7cj1yLmNoaWxkcmVuW2F0XX19LHQucHJvdG90eXBlLmFwcGx5UmVkaXJlY3RDb21tYW5kcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuYXBwbHlSZWRpcmVjdENyZWF0cmVVcmxUcmVlKGUsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGUpLHQsbil9LHQucHJvdG90eXBlLmFwcGx5UmVkaXJlY3RDcmVhdHJlVXJsVHJlZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cCh0LGUucm9vdCxuLHIpO3JldHVybiBuZXcgeHQoaSx0aGlzLmNyZWF0ZVF1ZXJ5UGFyYW1zKGUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50KX0sdC5wcm90b3R5cGUuY3JlYXRlUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gdnQodCxmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5zdGFydHNXaXRoKCI6Iikpe3ZhciBpPXQuc3Vic3RyaW5nKDEpO25bcl09ZVtpXX1lbHNlIG5bcl09dH0pLG59LHQucHJvdG90eXBlLmNyZWF0ZVNlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5jcmVhdGVTZWdtZW50cyh0LGUuc2VnbWVudHMsbixyKSxhPXt9O3JldHVybiB2dChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbyl7YVtvXT1pLmNyZWF0ZVNlZ21lbnRHcm91cCh0LGUsbixyKX0pLG5ldyBDdChvLGEpfSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzO3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXRoLnN0YXJ0c1dpdGgoIjoiKT9pLmZpbmRQb3NQYXJhbSh0LGUscik6aS5maW5kT3JSZXR1cm4oZSxuKX0pfSx0LnByb3RvdHlwZS5maW5kUG9zUGFyYW09ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5bZS5wYXRoLnN1YnN0cmluZygxKV07aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVkaXJlY3QgdG8gJyIrdCsiJy4gQ2Fubm90IGZpbmQgJyIrZS5wYXRoKyInLiIpO3JldHVybiByfSx0LnByb3RvdHlwZS5maW5kT3JSZXR1cm49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9MDt0cnl7Zm9yKHZhciBhPU9iamVjdChvLmUpKGUpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgbD1zLnZhbHVlO2lmKGwucGF0aD09PXQucGF0aClyZXR1cm4gZS5zcGxpY2UoaSksbDtpKyt9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gdH0sdH0oKTtmdW5jdGlvbiBXdCh0LGUsbil7aWYoIiI9PT1lLnBhdGgpcmV0dXJuImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApP3ttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O3ZhciByPShlLm1hdGNoZXJ8fHV0KShuLHQsZSk7cmV0dXJuIHI/e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpyLmNvbnN1bWVkLGxhc3RDaGlsZDpyLmNvbnN1bWVkLmxlbmd0aCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpyLnBvc1BhcmFtc306e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX19ZnVuY3Rpb24gWnQodCl7aWYoMT09PXQubnVtYmVyT2ZDaGlsZHJlbiYmdC5jaGlsZHJlblthdF0pe3ZhciBlPXQuY2hpbGRyZW5bYXRdO3JldHVybiBuZXcgQ3QodC5zZWdtZW50cy5jb25jYXQoZS5zZWdtZW50cyksZS5jaGlsZHJlbil9cmV0dXJuIHR9ZnVuY3Rpb24gS3QodCxlLG4pe3JldHVybighKHQuaGFzQ2hpbGRyZW4oKXx8ZS5sZW5ndGg+MCl8fCJmdWxsIiE9PW4ucGF0aE1hdGNoKSYmIiI9PT1uLnBhdGgmJnZvaWQgMCE9PW4ucmVkaXJlY3RUb31mdW5jdGlvbiBYdCh0KXtyZXR1cm4gdC5vdXRsZXR8fGF0fXZhciAkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcm9vdD10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXRoRnJvbVJvb3QodCk7cmV0dXJuIGUubGVuZ3RoPjE/ZVtlLmxlbmd0aC0yXTpudWxsfSx0LnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXt2YXIgZT1KdCh0LHRoaXMuX3Jvb3QpO3JldHVybiBlP2UuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSk6W119LHQucHJvdG90eXBlLmZpcnN0Q2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9SnQodCx0aGlzLl9yb290KTtyZXR1cm4gZSYmZS5jaGlsZHJlbi5sZW5ndGg+MD9lLmNoaWxkcmVuWzBdLnZhbHVlOm51bGx9LHQucHJvdG90eXBlLnNpYmxpbmdzPWZ1bmN0aW9uKHQpe3ZhciBlPXRlKHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUubGVuZ3RoPDI/W106ZVtlLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fSl9LHQucHJvdG90eXBlLnBhdGhGcm9tUm9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdGUodCx0aGlzLl9yb290KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KX0sdH0oKTtmdW5jdGlvbiBKdCh0LGUpe2lmKHQ9PT1lLnZhbHVlKXJldHVybiBlO3RyeXtmb3IodmFyIG49T2JqZWN0KG8uZSkoZS5jaGlsZHJlbikscj1uLm5leHQoKTshci5kb25lO3I9bi5uZXh0KCkpe3ZhciBpPUp0KHQsci52YWx1ZSk7aWYoaSlyZXR1cm4gaX19Y2F0Y2godCl7YT17ZXJyb3I6dH19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKHM9bi5yZXR1cm4pJiZzLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBudWxsO3ZhciBhLHN9ZnVuY3Rpb24gdGUodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm5bZV07dHJ5e2Zvcih2YXIgbj1PYmplY3Qoby5lKShlLmNoaWxkcmVuKSxyPW4ubmV4dCgpOyFyLmRvbmU7cj1uLm5leHQoKSl7dmFyIGk9dGUodCxyLnZhbHVlKTtpZihpLmxlbmd0aClyZXR1cm4gaS51bnNoaWZ0KGUpLGl9fWNhdGNoKHQpe2E9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihzPW4ucmV0dXJuKSYmcy5jYWxsKG4pfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm5bXTt2YXIgYSxzfXZhciBlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5jaGlsZHJlbj1lfXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJUcmVlTm9kZSgiK3RoaXMudmFsdWUrIikifSx0fSgpO2Z1bmN0aW9uIG5lKHQpe3ZhciBlPXt9O3JldHVybiB0JiZ0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdC52YWx1ZS5vdXRsZXRdPXR9KSxlfXZhciByZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuc25hcHNob3Q9bix1ZShyLGUpLHJ9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwc2hvdC50b1N0cmluZygpfSxlfSgkdCk7ZnVuY3Rpb24gaWUodCxlKXt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBzZShbXSx7fSx7fSwiIix7fSxhdCxlLG51bGwsdC5yb290LC0xLHt9KTtyZXR1cm4gbmV3IGxlKCIiLG5ldyBlZShuLFtdKSl9KHQsZSkscj1uZXcgYS5hKFtuZXcgRXQoIiIse30pXSksaT1uZXcgYS5hKHt9KSxvPW5ldyBhLmEoe30pLHM9bmV3IGEuYSh7fSksbD1uZXcgYS5hKCIiKSx1PW5ldyBvZShyLGkscyxsLG8sYXQsZSxuLnJvb3QpO3JldHVybiB1LnNuYXBzaG90PW4ucm9vdCxuZXcgcmUobmV3IGVlKHUsW10pLG4pfXZhciBvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzKXt0aGlzLnVybD10LHRoaXMucGFyYW1zPWUsdGhpcy5xdWVyeVBhcmFtcz1uLHRoaXMuZnJhZ21lbnQ9cix0aGlzLmRhdGE9aSx0aGlzLm91dGxldD1vLHRoaXMuY29tcG9uZW50PWEsdGhpcy5fZnV0dXJlU25hcHNob3Q9c31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb3V0ZUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZ30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhdGhGcm9tUm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbU1hcHx8KHRoaXMuX3BhcmFtTWFwPXRoaXMucGFyYW1zLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIGx0KHQpfSkpKSx0aGlzLl9wYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dGhpcy5xdWVyeVBhcmFtcy5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBsdCh0KX0pKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKToiRnV0dXJlKCIrdGhpcy5fZnV0dXJlU25hcHNob3QrIikifSx0fSgpO2Z1bmN0aW9uIGFlKHQsZSl7dm9pZCAwPT09ZSYmKGU9ImVtcHR5T25seSIpO3ZhciBuPXQucGF0aEZyb21Sb290LHI9MDtpZigiYWx3YXlzIiE9PWUpZm9yKHI9bi5sZW5ndGgtMTtyPj0xOyl7dmFyIGk9bltyXSxhPW5bci0xXTtpZihpLnJvdXRlQ29uZmlnJiYiIj09PWkucm91dGVDb25maWcucGF0aClyLS07ZWxzZXtpZihhLmNvbXBvbmVudClicmVhaztyLS19fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm57cGFyYW1zOk9iamVjdChvLmEpKHt9LHQucGFyYW1zLGUucGFyYW1zKSxkYXRhOk9iamVjdChvLmEpKHt9LHQuZGF0YSxlLmRhdGEpLHJlc29sdmU6T2JqZWN0KG8uYSkoe30sdC5yZXNvbHZlLGUuX3Jlc29sdmVkRGF0YSl9fSx7cGFyYW1zOnt9LGRhdGE6e30scmVzb2x2ZTp7fX0pfShuLnNsaWNlKHIpKX12YXIgc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyxsLHUsYyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PXIsdGhpcy5kYXRhPWksdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMucm91dGVDb25maWc9cyx0aGlzLl91cmxTZWdtZW50PWwsdGhpcy5fbGFzdFBhdGhJbmRleD11LHRoaXMuX3Jlc29sdmU9Y31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1sdCh0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD1sdCh0aGlzLnF1ZXJ5UGFyYW1zKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZSh1cmw6JyIrdGhpcy51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIikrIicsIHBhdGg6JyIrKHRoaXMucm91dGVDb25maWc/dGhpcy5yb3V0ZUNvbmZpZy5wYXRoOiIiKSsiJykifSx0fSgpLGxlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxuKXx8dGhpcztyZXR1cm4gci51cmw9ZSx1ZShyLG4pLHJ9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2UodGhpcy5fcm9vdCl9LGV9KCR0KTtmdW5jdGlvbiB1ZSh0LGUpe2UudmFsdWUuX3JvdXRlclN0YXRlPXQsZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB1ZSh0LGUpfSl9ZnVuY3Rpb24gY2UodCl7dmFyIGU9dC5jaGlsZHJlbi5sZW5ndGg+MD8iIHsgIit0LmNoaWxkcmVuLm1hcChjZSkuam9pbigiLCAiKSsiIH0gIjoiIjtyZXR1cm4iIit0LnZhbHVlK2V9ZnVuY3Rpb24gZmUodCl7aWYodC5zbmFwc2hvdCl7dmFyIGU9dC5zbmFwc2hvdCxuPXQuX2Z1dHVyZVNuYXBzaG90O3Quc25hcHNob3Q9bixtdChlLnF1ZXJ5UGFyYW1zLG4ucXVlcnlQYXJhbXMpfHx0LnF1ZXJ5UGFyYW1zLm5leHQobi5xdWVyeVBhcmFtcyksZS5mcmFnbWVudCE9PW4uZnJhZ21lbnQmJnQuZnJhZ21lbnQubmV4dChuLmZyYWdtZW50KSxtdChlLnBhcmFtcyxuLnBhcmFtcyl8fHQucGFyYW1zLm5leHQobi5wYXJhbXMpLGZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbilpZighbXQodFtuXSxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH0oZS51cmwsbi51cmwpfHx0LnVybC5uZXh0KG4udXJsKSxtdChlLmRhdGEsbi5kYXRhKXx8dC5kYXRhLm5leHQobi5kYXRhKX1lbHNlIHQuc25hcHNob3Q9dC5fZnV0dXJlU25hcHNob3QsdC5kYXRhLm5leHQodC5fZnV0dXJlU25hcHNob3QuZGF0YSl9ZnVuY3Rpb24gaGUodCxlKXt2YXIgbixyO3JldHVybiBtdCh0LnBhcmFtcyxlLnBhcmFtcykmJk90KG49dC51cmwscj1lLnVybCkmJm4uZXZlcnkoZnVuY3Rpb24odCxlKXtyZXR1cm4gbXQodC5wYXJhbWV0ZXJzLHJbZV0ucGFyYW1ldGVycyl9KSYmISghdC5wYXJlbnQhPSFlLnBhcmVudCkmJighdC5wYXJlbnR8fGhlKHQucGFyZW50LGUucGFyZW50KSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYhdC5vdXRsZXRzJiYhdC5zZWdtZW50UGF0aH1mdW5jdGlvbiBkZSh0LGUsbixyLGkpe3ZhciBvPXt9O3JldHVybiByJiZ2dChyLGZ1bmN0aW9uKHQsZSl7b1tlXT1BcnJheS5pc0FycmF5KHQpP3QubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIiK3R9KToiIit0fSksbmV3IHh0KG4ucm9vdD09PXQ/ZTpmdW5jdGlvbiB0KGUsbixyKXt2YXIgaT17fTtyZXR1cm4gdnQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG8pe2lbb109ZT09PW4/cjp0KGUsbixyKX0pLG5ldyBDdChlLnNlZ21lbnRzLGkpfShuLnJvb3QsdCxlKSxvLGkpfXZhciBtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe2lmKHRoaXMuaXNBYnNvbHV0ZT10LHRoaXMubnVtYmVyT2ZEb3VibGVEb3RzPWUsdGhpcy5jb21tYW5kcz1uLHQmJm4ubGVuZ3RoPjAmJnBlKG5bMF0pKXRocm93IG5ldyBFcnJvcigiUm9vdCBzZWdtZW50IGNhbm5vdCBoYXZlIG1hdHJpeCBwYXJhbWV0ZXJzIik7dmFyIHI9bi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmdC5vdXRsZXRzfSk7aWYociYmciE9PWd0KG4pKXRocm93IG5ldyBFcnJvcigie291dGxldHM6e319IGhhcyB0byBiZSB0aGUgbGFzdCBjb21tYW5kIil9cmV0dXJuIHQucHJvdG90eXBlLnRvUm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfSx0fSgpLHllPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnNlZ21lbnRHcm91cD10LHRoaXMucHJvY2Vzc0NoaWxkcmVuPWUsdGhpcy5pbmRleD1ufTtmdW5jdGlvbiBnZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0cz90Lm91dGxldHNbYXRdOiIiK3R9ZnVuY3Rpb24gdmUodCxlLG4pe2lmKHR8fCh0PW5ldyBDdChbXSx7fSkpLDA9PT10LnNlZ21lbnRzLmxlbmd0aCYmdC5oYXNDaGlsZHJlbigpKXJldHVybiBiZSh0LGUsbik7dmFyIHI9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0wLGk9ZSxvPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6MH07aTx0LnNlZ21lbnRzLmxlbmd0aDspe2lmKHI+PW4ubGVuZ3RoKXJldHVybiBvO3ZhciBhPXQuc2VnbWVudHNbaV0scz1nZShuW3JdKSxsPXI8bi5sZW5ndGgtMT9uW3IrMV06bnVsbDtpZihpPjAmJnZvaWQgMD09PXMpYnJlYWs7aWYocyYmbCYmIm9iamVjdCI9PXR5cGVvZiBsJiZ2b2lkIDA9PT1sLm91dGxldHMpe2lmKCFDZShzLGwsYSkpcmV0dXJuIG87cis9Mn1lbHNle2lmKCFDZShzLHt9LGEpKXJldHVybiBvO3IrK31pKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDppLGNvbW1hbmRJbmRleDpyfX0odCxlLG4pLGk9bi5zbGljZShyLmNvbW1hbmRJbmRleCk7aWYoci5tYXRjaCYmci5wYXRoSW5kZXg8dC5zZWdtZW50cy5sZW5ndGgpe3ZhciBvPW5ldyBDdCh0LnNlZ21lbnRzLnNsaWNlKDAsci5wYXRoSW5kZXgpLHt9KTtyZXR1cm4gby5jaGlsZHJlblthdF09bmV3IEN0KHQuc2VnbWVudHMuc2xpY2Uoci5wYXRoSW5kZXgpLHQuY2hpbGRyZW4pLGJlKG8sMCxpKX1yZXR1cm4gci5tYXRjaCYmMD09PWkubGVuZ3RoP25ldyBDdCh0LnNlZ21lbnRzLHt9KTpyLm1hdGNoJiYhdC5oYXNDaGlsZHJlbigpP19lKHQsZSxuKTpyLm1hdGNoP2JlKHQsMCxpKTpfZSh0LGUsbil9ZnVuY3Rpb24gYmUodCxlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbmV3IEN0KHQuc2VnbWVudHMse30pO3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiIT10eXBlb2YgdFswXT8oKGU9e30pW2F0XT10LGUpOnZvaWQgMD09PXRbMF0ub3V0bGV0cz8oKG49e30pW2F0XT10LG4pOnRbMF0ub3V0bGV0czt2YXIgZSxufShuKSxpPXt9O3JldHVybiB2dChyLGZ1bmN0aW9uKG4scil7bnVsbCE9PW4mJihpW3JdPXZlKHQuY2hpbGRyZW5bcl0sZSxuKSl9KSx2dCh0LmNoaWxkcmVuLGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09cltlXSYmKGlbZV09dCl9KSxuZXcgQ3QodC5zZWdtZW50cyxpKX1mdW5jdGlvbiBfZSh0LGUsbil7Zm9yKHZhciByPXQuc2VnbWVudHMuc2xpY2UoMCxlKSxpPTA7aTxuLmxlbmd0aDspe2lmKCJvYmplY3QiPT10eXBlb2YgbltpXSYmdm9pZCAwIT09bltpXS5vdXRsZXRzKXt2YXIgbz13ZShuW2ldLm91dGxldHMpO3JldHVybiBuZXcgQ3QocixvKX1pZigwPT09aSYmcGUoblswXSkpci5wdXNoKG5ldyBFdCh0LnNlZ21lbnRzW2VdLnBhdGgsblswXSkpLGkrKztlbHNle3ZhciBhPWdlKG5baV0pLHM9aTxuLmxlbmd0aC0xP25baSsxXTpudWxsO2EmJnMmJnBlKHMpPyhyLnB1c2gobmV3IEV0KGEseGUocykpKSxpKz0yKTooci5wdXNoKG5ldyBFdChhLHt9KSksaSsrKX19cmV0dXJuIG5ldyBDdChyLHt9KX1mdW5jdGlvbiB3ZSh0KXt2YXIgZT17fTtyZXR1cm4gdnQodCxmdW5jdGlvbih0LG4pe251bGwhPT10JiYoZVtuXT1fZShuZXcgQ3QoW10se30pLDAsdCkpfSksZX1mdW5jdGlvbiB4ZSh0KXt2YXIgZT17fTtyZXR1cm4gdnQodCxmdW5jdGlvbih0LG4pe3JldHVybiBlW25dPSIiK3R9KSxlfWZ1bmN0aW9uIENlKHQsZSxuKXtyZXR1cm4gdD09bi5wYXRoJiZtdChlLG4ucGFyYW1ldGVycyl9dmFyIEVlPWZ1bmN0aW9uKHQpe3RoaXMucGF0aD10LHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19LE9lPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb21wb25lbnQ9dCx0aGlzLnJvdXRlPWV9LFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLmZ1dHVyZT10LHRoaXMuY3Vycj1lLHRoaXMubW9kdWxlSW5qZWN0b3I9bix0aGlzLmZvcndhcmRFdmVudD1yLHRoaXMuY2FuQWN0aXZhdGVDaGVja3M9W10sdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzPVtdfXJldHVybiB0LnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnV0dXJlLl9yb290O3RoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKGUsdGhpcy5jdXJyP3RoaXMuY3Vyci5fcm9vdDpudWxsLHQsW2UudmFsdWVdKX0sdC5wcm90b3R5cGUuY2hlY2tHdWFyZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmlzRGVhY3RpdmF0aW5nKCl8fHRoaXMuaXNBY3RpdmF0aW5nKCk/dGhpcy5ydW5DYW5EZWFjdGl2YXRlQ2hlY2tzKCkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihlKXtyZXR1cm4gZT90LnJ1bkNhbkFjdGl2YXRlQ2hlY2tzKCk6T2JqZWN0KGwuYSkoITEpfSkpOk9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucmVzb2x2ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5pc0FjdGl2YXRpbmcoKT9PYmplY3Qocy5hKSh0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKG4pe3JldHVybiBlLnJ1blJlc29sdmUobi5yb3V0ZSx0KX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTI/ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdCh6LmEpKEwodCxlKSxiKDEpLE8oZSkpKG4pfTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHouYSkoTChmdW5jdGlvbihlLG4scil7cmV0dXJuIHQoZSxuLHIrMSl9KSxiKDEpKShlKX19KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KSk6T2JqZWN0KGwuYSkobnVsbCl9LHQucHJvdG90eXBlLmlzRGVhY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5pc0FjdGl2YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuY2FuQWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5zZXR1cENoaWxkUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtpLnNldHVwUm91dGVHdWFyZHModCxvW3QudmFsdWUub3V0bGV0XSxuLHIuY29uY2F0KFt0LnZhbHVlXSkpLGRlbGV0ZSBvW3QudmFsdWUub3V0bGV0XX0pLHZ0KG8sZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4uZ2V0Q29udGV4dChlKSl9KX0sdC5wcm90b3R5cGUuc2V0dXBSb3V0ZUd1YXJkcz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnZhbHVlLG89ZT9lLnZhbHVlOm51bGwsYT1uP24uZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk6bnVsbDtpZihvJiZpLnJvdXRlQ29uZmlnPT09by5yb3V0ZUNvbmZpZyl7dmFyIHM9dGhpcy5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnMobyxpLGkucm91dGVDb25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtzP3RoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgRWUocikpOihpLmRhdGE9by5kYXRhLGkuX3Jlc29sdmVkRGF0YT1vLl9yZXNvbHZlZERhdGEpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsZSxpLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLHIpLHMmJnRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBPZShhLm91dGxldC5jb21wb25lbnQsbykpfWVsc2UgbyYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLGEpLHRoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgRWUocikpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsbnVsbCxpLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLHIpfSx0LnByb3RvdHlwZS5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChuKXtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4haGUodCxlKXx8IW10KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcyk7Y2FzZSJwYXJhbXNDaGFuZ2UiOmRlZmF1bHQ6cmV0dXJuIWhlKHQsZSl9fSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uZSh0KSxpPXQudmFsdWU7dnQocixmdW5jdGlvbih0LHIpe24uZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxpLmNvbXBvbmVudD9lP2UuY2hpbGRyZW4uZ2V0Q29udGV4dChyKTpudWxsOmUpfSksdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IE9lKGkuY29tcG9uZW50JiZlJiZlLm91dGxldCYmZS5vdXRsZXQuaXNBY3RpdmF0ZWQ/ZS5vdXRsZXQuY29tcG9uZW50Om51bGwsaSkpfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gT2JqZWN0KHMuYSkodGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChwLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJ1bkNhbkRlYWN0aXZhdGUoZS5jb21wb25lbnQsZS5yb3V0ZSl9KSxqKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGVDaGVja3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBPYmplY3Qocy5hKSh0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBidChPYmplY3Qocy5hKShbdC5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZS5wYXJlbnQpLHQuZmlyZUFjdGl2YXRpb25TdGFydChlLnJvdXRlKSx0LnJ1bkNhbkFjdGl2YXRlQ2hpbGQoZS5wYXRoKSx0LnJ1bkNhbkFjdGl2YXRlKGUucm91dGUpXSkpfSksaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9LHQucHJvdG90eXBlLmZpcmVBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IHJ0KHQpKSxPYmplY3QobC5hKSghMCl9LHQucHJvdG90eXBlLmZpcmVDaGlsZEFjdGl2YXRpb25TdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQmJnRoaXMuZm9yd2FyZEV2ZW50JiZ0aGlzLmZvcndhcmRFdmVudChuZXcgZXQodCkpLE9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZTpudWxsO3JldHVybiBuJiYwIT09bi5sZW5ndGg/YnQoT2JqZWN0KHMuYSkobikucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihuKXt2YXIgcj1lLmdldFRva2VuKG4sdCk7cmV0dXJuIF90KHIuY2FuQWN0aXZhdGU/ci5jYW5BY3RpdmF0ZSh0LGUuZnV0dXJlKTpyKHQsZS5mdXR1cmUpKS5waXBlKFIoKSl9KSkpOk9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dFt0Lmxlbmd0aC0xXSxyPXQuc2xpY2UoMCx0Lmxlbmd0aC0xKS5yZXZlcnNlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmV4dHJhY3RDYW5BY3RpdmF0ZUNoaWxkKHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dH0pO3JldHVybiBidChPYmplY3Qocy5hKShyKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBidChPYmplY3Qocy5hKSh0Lmd1YXJkcykucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihyKXt2YXIgaT1lLmdldFRva2VuKHIsdC5ub2RlKTtyZXR1cm4gX3QoaS5jYW5BY3RpdmF0ZUNoaWxkP2kuY2FuQWN0aXZhdGVDaGlsZChuLGUuZnV0dXJlKTppKG4sZS5mdXR1cmUpKS5waXBlKFIoKSl9KSkpfSkpKX0sdC5wcm90b3R5cGUuZXh0cmFjdENhbkFjdGl2YXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3V0ZUNvbmZpZz90LnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gZSYmMCE9PWUubGVuZ3RoP3tub2RlOnQsZ3VhcmRzOmV9Om51bGx9LHQucHJvdG90eXBlLnJ1bkNhbkRlYWN0aXZhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZSYmZS5yb3V0ZUNvbmZpZz9lLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGU6bnVsbDtyZXR1cm4gciYmMCE9PXIubGVuZ3RoP09iamVjdChzLmEpKHIpLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24ocil7dmFyIGk9bi5nZXRUb2tlbihyLGUpO3JldHVybiBfdChpLmNhbkRlYWN0aXZhdGU/aS5jYW5EZWFjdGl2YXRlKHQsZSxuLmN1cnIsbi5mdXR1cmUpOmkodCxlLG4uY3VycixuLmZ1dHVyZSkpLnBpcGUoUigpKX0pKS5waXBlKGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpOk9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucnVuUmVzb2x2ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlc29sdmVOb2RlKHQuX3Jlc29sdmUsdCkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihuKXtyZXR1cm4gdC5fcmVzb2x2ZWREYXRhPW4sdC5kYXRhPU9iamVjdChvLmEpKHt9LHQuZGF0YSxhZSh0LGUpLnJlc29sdmUpLG51bGx9KSl9LHQucHJvdG90eXBlLnJlc29sdmVOb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPU9iamVjdC5rZXlzKHQpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gT2JqZWN0KGwuYSkoe30pO2lmKDE9PT1yLmxlbmd0aCl7dmFyIGk9clswXTtyZXR1cm4gdGhpcy5nZXRSZXNvbHZlcih0W2ldLGUpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuKGU9e30pW2ldPXQsZTt2YXIgZX0pKX12YXIgbz17fTtyZXR1cm4gT2JqZWN0KHMuYSkocikucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihyKXtyZXR1cm4gbi5nZXRSZXNvbHZlcih0W3JdLGUpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIG9bcl09dCx0fSkpfSkpLnBpcGUoUCgpLE9iamVjdChoLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSl9LHQucHJvdG90eXBlLmdldFJlc29sdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRUb2tlbih0LGUpO3JldHVybiBfdChuLnJlc29sdmU/bi5yZXNvbHZlKGUsdGhpcy5mdXR1cmUpOm4oZSx0aGlzLmZ1dHVyZSkpfSx0LnByb3RvdHlwZS5nZXRUb2tlbj1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudDtlO2U9ZS5wYXJlbnQpe3ZhciBuPWUucm91dGVDb25maWc7aWYobiYmbi5fbG9hZGVkQ29uZmlnKXJldHVybiBuLl9sb2FkZWRDb25maWd9cmV0dXJuIG51bGx9KGUpO3JldHVybihuP24ubW9kdWxlLmluamVjdG9yOnRoaXMubW9kdWxlSW5qZWN0b3IpLmdldCh0KX0sdH0oKSxrZT1mdW5jdGlvbigpe30sVGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMuY29uZmlnPWUsdGhpcy51cmxUcmVlPW4sdGhpcy51cmw9cix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9aX1yZXR1cm4gdC5wcm90b3R5cGUucmVjb2duaXplPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWplKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXAsZT10aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAodGhpcy5jb25maWcsdCxhdCksbj1uZXcgc2UoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZShPYmplY3Qoby5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQse30sYXQsdGhpcy5yb290Q29tcG9uZW50VHlwZSxudWxsLHRoaXMudXJsVHJlZS5yb290LC0xLHt9KSxyPW5ldyBlZShuLGUpLGk9bmV3IGxlKHRoaXMudXJsLHIpO3JldHVybiB0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGkuX3Jvb3QpLE9iamVjdChsLmEpKGkpfWNhdGNoKHQpe3JldHVybiBuZXcgYy5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKHQpfSl9fSx0LnByb3RvdHlwZS5pbmhlcml0UGFyYW1zQW5kRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC52YWx1ZSxyPWFlKG4sdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KTtuLnBhcmFtcz1PYmplY3QuZnJlZXplKHIucGFyYW1zKSxuLmRhdGE9T2JqZWN0LmZyZWV6ZShyLmRhdGEpLHQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmhlcml0UGFyYW1zQW5kRGF0YSh0KX0pfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUuc2VnbWVudHMubGVuZ3RoJiZlLmhhc0NoaWxkcmVuKCk/dGhpcy5wcm9jZXNzQ2hpbGRyZW4odCxlKTp0aGlzLnByb2Nlc3NTZWdtZW50KHQsZSxlLnNlZ21lbnRzLG4pfSx0LnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT1TdChlLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHIucHJvY2Vzc1NlZ21lbnRHcm91cCh0LGUsbil9KTtyZXR1cm4gbj17fSxpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9blt0LnZhbHVlLm91dGxldF07aWYoZSl7dmFyIHI9ZS51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIiksaT10LnZhbHVlLnVybC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoKX0pLmpvaW4oIi8iKTt0aHJvdyBuZXcgRXJyb3IoIlR3byBzZWdtZW50cyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBvdXRsZXQgbmFtZTogJyIrcisiJyBhbmQgJyIraSsiJy4iKX1uW3QudmFsdWUub3V0bGV0XT10LnZhbHVlfSksaS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudmFsdWUub3V0bGV0PT09YXQ/LTE6ZS52YWx1ZS5vdXRsZXQ9PT1hdD8xOnQudmFsdWUub3V0bGV0LmxvY2FsZUNvbXBhcmUoZS52YWx1ZS5vdXRsZXQpfSksaX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnQ9ZnVuY3Rpb24odCxlLG4scil7dHJ5e2Zvcih2YXIgaT1PYmplY3Qoby5lKSh0KSxhPWkubmV4dCgpOyFhLmRvbmU7YT1pLm5leHQoKSl7dmFyIHM9YS52YWx1ZTt0cnl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUocyxlLG4scil9Y2F0Y2godCl7aWYoISh0IGluc3RhbmNlb2Yga2UpKXRocm93IHR9fX1jYXRjaCh0KXtsPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYodT1pLnJldHVybikmJnUuY2FsbChpKX1maW5hbGx5e2lmKGwpdGhyb3cgbC5lcnJvcn19aWYodGhpcy5ub0xlZnRvdmVyc0luVXJsKGUsbixyKSlyZXR1cm5bXTt0aHJvdyBuZXcga2U7dmFyIGwsdX0sdC5wcm90b3R5cGUubm9MZWZ0b3ZlcnNJblVybD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLmxlbmd0aCYmIXQuY2hpbGRyZW5bbl19LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKHQucmVkaXJlY3RUbyl0aHJvdyBuZXcga2U7aWYoKHQub3V0bGV0fHxhdCkhPT1yKXRocm93IG5ldyBrZTt2YXIgaSxhPVtdLHM9W107aWYoIioqIj09PXQucGF0aCl7dmFyIGw9bi5sZW5ndGg+MD9ndChuKS5wYXJhbWV0ZXJzOnt9O2k9bmV3IHNlKG4sbCxPYmplY3QuZnJlZXplKE9iamVjdChvLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxOZSh0KSxyLHQuY29tcG9uZW50LHQsUGUoZSksQWUoZSkrbi5sZW5ndGgsUmUodCkpfWVsc2V7dmFyIHU9ZnVuY3Rpb24odCxlLG4pe2lmKCIiPT09ZS5wYXRoKXtpZigiZnVsbCI9PT1lLnBhdGhNYXRjaCYmKHQuaGFzQ2hpbGRyZW4oKXx8bi5sZW5ndGg+MCkpdGhyb3cgbmV3IGtlO3JldHVybntjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBhcmFtZXRlcnM6e319fXZhciByPShlLm1hdGNoZXJ8fHV0KShuLHQsZSk7aWYoIXIpdGhyb3cgbmV3IGtlO3ZhciBpPXt9O3Z0KHIucG9zUGFyYW1zLGZ1bmN0aW9uKHQsZSl7aVtlXT10LnBhdGh9KTt2YXIgYT1yLmNvbnN1bWVkLmxlbmd0aD4wP09iamVjdChvLmEpKHt9LGksci5jb25zdW1lZFtyLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzKTppO3JldHVybntjb25zdW1lZFNlZ21lbnRzOnIuY29uc3VtZWQsbGFzdENoaWxkOnIuY29uc3VtZWQubGVuZ3RoLHBhcmFtZXRlcnM6YX19KGUsdCxuKTthPXUuY29uc3VtZWRTZWdtZW50cyxzPW4uc2xpY2UodS5sYXN0Q2hpbGQpLGk9bmV3IHNlKGEsdS5wYXJhbWV0ZXJzLE9iamVjdC5mcmVlemUoT2JqZWN0KG8uYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LE5lKHQpLHIsdC5jb21wb25lbnQsdCxQZShlKSxBZShlKSthLmxlbmd0aCxSZSh0KSl9dmFyIGM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hpbGRyZW4/dC5jaGlsZHJlbjp0LmxvYWRDaGlsZHJlbj90Ll9sb2FkZWRDb25maWcucm91dGVzOltdfSh0KSxmPWplKGUsYSxzLGMpLGg9Zi5zZWdtZW50R3JvdXAscD1mLnNsaWNlZFNlZ21lbnRzO2lmKDA9PT1wLmxlbmd0aCYmaC5oYXNDaGlsZHJlbigpKXt2YXIgZD10aGlzLnByb2Nlc3NDaGlsZHJlbihjLGgpO3JldHVybltuZXcgZWUoaSxkKV19aWYoMD09PWMubGVuZ3RoJiYwPT09cC5sZW5ndGgpcmV0dXJuW25ldyBlZShpLFtdKV07dmFyIG09dGhpcy5wcm9jZXNzU2VnbWVudChjLGgscCxhdCk7cmV0dXJuW25ldyBlZShpLG0pXX0sdH0oKTtmdW5jdGlvbiBQZSh0KXtmb3IodmFyIGU9dDtlLl9zb3VyY2VTZWdtZW50OyllPWUuX3NvdXJjZVNlZ21lbnQ7cmV0dXJuIGV9ZnVuY3Rpb24gQWUodCl7Zm9yKHZhciBlPXQsbj1lLl9zZWdtZW50SW5kZXhTaGlmdD9lLl9zZWdtZW50SW5kZXhTaGlmdDowO2UuX3NvdXJjZVNlZ21lbnQ7KW4rPShlPWUuX3NvdXJjZVNlZ21lbnQpLl9zZWdtZW50SW5kZXhTaGlmdD9lLl9zZWdtZW50SW5kZXhTaGlmdDowO3JldHVybiBuLTF9ZnVuY3Rpb24gamUodCxlLG4scil7aWYobi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIEllKHQsZSxuKSYmTWUobikhPT1hdH0pfSh0LG4pKXt2YXIgaT1uZXcgQ3QoZSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLHM9e307c1thdF09cixyLl9zb3VyY2VTZWdtZW50PXQsci5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGg7dHJ5e2Zvcih2YXIgbD1PYmplY3Qoby5lKShuKSx1PWwubmV4dCgpOyF1LmRvbmU7dT1sLm5leHQoKSl7dmFyIGM9dS52YWx1ZTtpZigiIj09PWMucGF0aCYmTWUoYykhPT1hdCl7dmFyIGY9bmV3IEN0KFtdLHt9KTtmLl9zb3VyY2VTZWdtZW50PXQsZi5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgsc1tNZShjKV09Zn19fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihhPWwucmV0dXJuKSYmYS5jYWxsKGwpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gc30odCxlLHIsbmV3IEN0KG4sdC5jaGlsZHJlbikpKTtyZXR1cm4gaS5fc291cmNlU2VnbWVudD10LGkuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHtzZWdtZW50R3JvdXA6aSxzbGljZWRTZWdtZW50czpbXX19aWYoMD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gSWUodCxlLG4pfSl9KHQsbikpe3ZhciBhPW5ldyBDdCh0LnNlZ21lbnRzLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEscz17fTt0cnl7Zm9yKHZhciBsPU9iamVjdChvLmUpKG4pLHU9bC5uZXh0KCk7IXUuZG9uZTt1PWwubmV4dCgpKXt2YXIgYz11LnZhbHVlO2lmKEllKHQsZSxjKSYmIXJbTWUoYyldKXt2YXIgZj1uZXcgQ3QoW10se30pO2YuX3NvdXJjZVNlZ21lbnQ9dCxmLl9zZWdtZW50SW5kZXhTaGlmdD10LnNlZ21lbnRzLmxlbmd0aCxzW01lKGMpXT1mfX19Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKGE9bC5yZXR1cm4pJiZhLmNhbGwobCl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBPYmplY3Qoby5hKSh7fSxyLHMpfSh0LG4scix0LmNoaWxkcmVuKSk7cmV0dXJuIGEuX3NvdXJjZVNlZ21lbnQ9dCxhLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOmEsc2xpY2VkU2VnbWVudHM6bn19dmFyIHM9bmV3IEN0KHQuc2VnbWVudHMsdC5jaGlsZHJlbik7cmV0dXJuIHMuX3NvdXJjZVNlZ21lbnQ9dCxzLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOnMsc2xpY2VkU2VnbWVudHM6bn19ZnVuY3Rpb24gSWUodCxlLG4pe3JldHVybighKHQuaGFzQ2hpbGRyZW4oKXx8ZS5sZW5ndGg+MCl8fCJmdWxsIiE9PW4ucGF0aE1hdGNoKSYmIiI9PT1uLnBhdGgmJnZvaWQgMD09PW4ucmVkaXJlY3RUb31mdW5jdGlvbiBNZSh0KXtyZXR1cm4gdC5vdXRsZXR8fGF0fWZ1bmN0aW9uIE5lKHQpe3JldHVybiB0LmRhdGF8fHt9fWZ1bmN0aW9uIFJlKHQpe3JldHVybiB0LnJlc29sdmV8fHt9fXZhciBEZT1mdW5jdGlvbigpe30sRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zaG91bGREZXRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuITF9LHQucHJvdG90eXBlLnN0b3JlPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5zaG91bGRBdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuITF9LHQucHJvdG90eXBlLnJldHJpZXZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5zaG91bGRSZXVzZVJvdXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucm91dGVDb25maWc9PT1lLnJvdXRlQ29uZmlnfSx0fSgpLExlPW5ldyBpLnAoIlJPVVRFUyIpLFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLmxvYWRlcj10LHRoaXMuY29tcGlsZXI9ZSx0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXI9bix0aGlzLm9uTG9hZEVuZExpc3RlbmVyPXJ9cmV0dXJuIHQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihlKSx0aGlzLmxvYWRNb2R1bGVGYWN0b3J5KGUubG9hZENoaWxkcmVuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHIpe24ub25Mb2FkRW5kTGlzdGVuZXImJm4ub25Mb2FkRW5kTGlzdGVuZXIoZSk7dmFyIGk9ci5jcmVhdGUodCk7cmV0dXJuIG5ldyBjdCh5dChpLmluamVjdG9yLmdldChMZSkpLm1hcChkdCksaSl9KSl9LHQucHJvdG90eXBlLmxvYWRNb2R1bGVGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P09iamVjdChzLmEpKHRoaXMubG9hZGVyLmxvYWQodCkpOl90KHQoKSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGkudT9PYmplY3QobC5hKSh0KTpPYmplY3Qocy5hKShlLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KSl9KSl9LHR9KCksQmU9ZnVuY3Rpb24oKXt9LHplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkUHJvY2Vzc1VybD1mdW5jdGlvbih0KXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZXh0cmFjdD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdC5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0sdH0oKTtmdW5jdGlvbiBVZSh0KXt0aHJvdyB0fWZ1bmN0aW9uIEhlKHQpe3JldHVybiBPYmplY3QobC5hKShudWxsKX12YXIgUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyxzLGwsYyl7dmFyIGY9dGhpczt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy51cmxTZXJpYWxpemVyPWUsdGhpcy5yb290Q29udGV4dHM9bix0aGlzLmxvY2F0aW9uPXIsdGhpcy5jb25maWc9Yyx0aGlzLm5hdmlnYXRpb25zPW5ldyBhLmEobnVsbCksdGhpcy5uYXZpZ2F0aW9uSWQ9MCx0aGlzLmV2ZW50cz1uZXcgdS5hLHRoaXMuZXJyb3JIYW5kbGVyPVVlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLmhvb2tzPXtiZWZvcmVQcmVhY3RpdmF0aW9uOkhlLGFmdGVyUHJlYWN0aXZhdGlvbjpIZX0sdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PW5ldyB6ZSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1uZXcgRmUsdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPSJpZ25vcmUiLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT0iZW1wdHlPbmx5Iix0aGlzLm5nTW9kdWxlPW8uZ2V0KGkudyksdGhpcy5yZXNldENvbmZpZyhjKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyB4dChuZXcgQ3QoW10se30pLHt9LG51bGwpLHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMuY29uZmlnTG9hZGVyPW5ldyBWZShzLGwsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KG5ldyBKKHQpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KG5ldyB0dCh0KSl9KSx0aGlzLnJvdXRlclN0YXRlPWllKHRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb290Q29tcG9uZW50VHlwZSksdGhpcy5wcm9jZXNzTmF2aWdhdGlvbnMoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXRSb290Q29tcG9uZW50VHlwZT1mdW5jdGlvbih0KXt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD10aGlzLnJvb3RDb21wb25lbnRUeXBlfSx0LnByb3RvdHlwZS5pbml0aWFsTmF2aWdhdGlvbj1mdW5jdGlvbigpe3RoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksMD09PXRoaXMubmF2aWdhdGlvbklkJiZ0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSx7cmVwbGFjZVVybDohMH0pfSx0LnByb3RvdHlwZS5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3ZhciBuPXQudXJsU2VyaWFsaXplci5wYXJzZShlLnVybCkscj0icG9wc3RhdGUiPT09ZS50eXBlPyJwb3BzdGF0ZSI6Imhhc2hjaGFuZ2UiLGk9ZS5zdGF0ZSYmZS5zdGF0ZS5uYXZpZ2F0aW9uSWQ/e25hdmlnYXRpb25JZDplLnN0YXRlLm5hdmlnYXRpb25JZH06bnVsbDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zY2hlZHVsZU5hdmlnYXRpb24obixyLGkse3JlcGxhY2VVcmw6ITB9KX0sMCl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidXJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3VycmVudFVybFRyZWUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRyaWdnZXJFdmVudD1mdW5jdGlvbih0KXt0aGlzLmV2ZW50cy5uZXh0KHQpfSx0LnByb3RvdHlwZS5yZXNldENvbmZpZz1mdW5jdGlvbih0KXtmdCh0KSx0aGlzLmNvbmZpZz10Lm1hcChkdCksdGhpcy5uYXZpZ2F0ZWQ9ITEsdGhpcy5sYXN0U3VjY2Vzc2Z1bElkPS0xfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGlzcG9zZSgpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPWUucmVsYXRpdmVUbyxyPWUucXVlcnlQYXJhbXMsYT1lLmZyYWdtZW50LHM9ZS5wcmVzZXJ2ZVF1ZXJ5UGFyYW1zLGw9ZS5xdWVyeVBhcmFtc0hhbmRsaW5nLHU9ZS5wcmVzZXJ2ZUZyYWdtZW50O09iamVjdChpLlkpKCkmJnMmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIGlzIGRlcHJlY2F0ZWQsIHVzZSBxdWVyeVBhcmFtc0hhbmRsaW5nIGluc3RlYWQuIik7dmFyIGM9bnx8dGhpcy5yb3V0ZXJTdGF0ZS5yb290LGY9dT90aGlzLmN1cnJlbnRVcmxUcmVlLmZyYWdtZW50OmEsaD1udWxsO2lmKGwpc3dpdGNoKGwpe2Nhc2UibWVyZ2UiOmg9T2JqZWN0KG8uYSkoe30sdGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtcyxyKTticmVhaztjYXNlInByZXNlcnZlIjpoPXRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXM7YnJlYWs7ZGVmYXVsdDpoPXJ8fG51bGx9ZWxzZSBoPXM/dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczpyfHxudWxsO3JldHVybiBudWxsIT09aCYmKGg9dGhpcy5yZW1vdmVFbXB0eVByb3BzKGgpKSxmdW5jdGlvbih0LGUsbixyLGkpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gZGUoZS5yb290LGUucm9vdCxlLHIsaSk7dmFyIGE9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0WzBdJiYxPT09dC5sZW5ndGgmJiIvIj09PXRbMF0pcmV0dXJuIG5ldyBtZSghMCwwLHQpO3ZhciBlPTAsbj0hMSxyPXQucmVkdWNlKGZ1bmN0aW9uKHQscixpKXtpZigib2JqZWN0Ij09dHlwZW9mIHImJm51bGwhPXIpe2lmKHIub3V0bGV0cyl7dmFyIGE9e307cmV0dXJuIHZ0KHIub3V0bGV0cyxmdW5jdGlvbih0LGUpe2FbZV09InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoIi8iKTp0fSksT2JqZWN0KG8uZCkodCxbe291dGxldHM6YX1dKX1pZihyLnNlZ21lbnRQYXRoKXJldHVybiBPYmplY3Qoby5kKSh0LFtyLnNlZ21lbnRQYXRoXSl9cmV0dXJuInN0cmluZyIhPXR5cGVvZiByP09iamVjdChvLmQpKHQsW3JdKTowPT09aT8oci5zcGxpdCgiLyIpLmZvckVhY2goZnVuY3Rpb24ocixpKXswPT1pJiYiLiI9PT1yfHwoMD09aSYmIiI9PT1yP249ITA6Ii4uIj09PXI/ZSsrOiIiIT1yJiZ0LnB1c2gocikpfSksdCk6T2JqZWN0KG8uZCkodCxbcl0pfSxbXSk7cmV0dXJuIG5ldyBtZShuLGUscil9KG4pO2lmKGEudG9Sb290KCkpcmV0dXJuIGRlKGUucm9vdCxuZXcgQ3QoW10se30pLGUscixpKTt2YXIgcz1mdW5jdGlvbih0LG4scil7aWYodC5pc0Fic29sdXRlKXJldHVybiBuZXcgeWUoZS5yb290LCEwLDApO2lmKC0xPT09ci5zbmFwc2hvdC5fbGFzdFBhdGhJbmRleClyZXR1cm4gbmV3IHllKHIuc25hcHNob3QuX3VybFNlZ21lbnQsITAsMCk7dmFyIGk9cGUodC5jb21tYW5kc1swXSk/MDoxO3JldHVybiBmdW5jdGlvbihlLG4sbyl7Zm9yKHZhciBhPXIuc25hcHNob3QuX3VybFNlZ21lbnQscz1yLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4K2ksbD10Lm51bWJlck9mRG91YmxlRG90cztsPnM7KXtpZihsLT1zLCEoYT1hLnBhcmVudCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG51bWJlciBvZiAnLi4vJyIpO3M9YS5zZWdtZW50cy5sZW5ndGh9cmV0dXJuIG5ldyB5ZShhLCExLHMtbCl9KCl9KGEsMCx0KSxsPXMucHJvY2Vzc0NoaWxkcmVuP2JlKHMuc2VnbWVudEdyb3VwLHMuaW5kZXgsYS5jb21tYW5kcyk6dmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTtyZXR1cm4gZGUocy5zZWdtZW50R3JvdXAsbCxlLHIsaSl9KGMsdGhpcy5jdXJyZW50VXJsVHJlZSx0LGgsZil9LHQucHJvdG90eXBlLm5hdmlnYXRlQnlVcmw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSk7dmFyIG49dCBpbnN0YW5jZW9mIHh0P3Q6dGhpcy5wYXJzZVVybCh0KSxyPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShuLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKHIsImltcGVyYXRpdmUiLG51bGwsZSl9LHQucHJvdG90eXBlLm5hdmlnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZihudWxsPT1uKXRocm93IG5ldyBFcnJvcigiVGhlIHJlcXVlc3RlZCBwYXRoIGNvbnRhaW5zICIrbisiIHNlZ21lbnQgYXQgaW5kZXggIitlKX19KHQpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUodCxlKSxlKX0sdC5wcm90b3R5cGUuc2VyaWFsaXplVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQpfSx0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHQpfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiB4dClyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KTtyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSxuLGUpfSx0LnByb3RvdHlwZS5yZW1vdmVFbXB0eVByb3BzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgcj10W25dO3JldHVybiBudWxsIT09ciYmdm9pZCAwIT09ciYmKGVbbl09ciksZX0se30pfSx0LnByb3RvdHlwZS5wcm9jZXNzTmF2aWdhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubmF2aWdhdGlvbnMucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihlKXtyZXR1cm4gZT8odC5leGVjdXRlU2NoZWR1bGVkTmF2aWdhdGlvbihlKSxlLnByb21pc2UuY2F0Y2goZnVuY3Rpb24oKXt9KSk6T2JqZWN0KGwuYSkobnVsbCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTmF2aWdhdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLm5hdmlnYXRpb25zLnZhbHVlO2lmKGkmJiJpbXBlcmF0aXZlIiE9PWUmJiJpbXBlcmF0aXZlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKGkmJiJoYXNoY2hhbmdlIj09ZSYmInBvcHN0YXRlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKGkmJiJwb3BzdGF0ZSI9PWUmJiJoYXNoY2hhbmdlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO3ZhciBvPW51bGwsYT1udWxsLHM9bmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtvPXQsYT1lfSksbD0rK3RoaXMubmF2aWdhdGlvbklkO3JldHVybiB0aGlzLm5hdmlnYXRpb25zLm5leHQoe2lkOmwsc291cmNlOmUsc3RhdGU6bixyYXdVcmw6dCxleHRyYXM6cixyZXNvbHZlOm8scmVqZWN0OmEscHJvbWlzZTpzfSkscy5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KX0sdC5wcm90b3R5cGUuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQuaWQscj10LnJhd1VybCxpPXQuZXh0cmFzLG89dC5yZXNvbHZlLGE9dC5yZWplY3Qscz10LnNvdXJjZSxsPXQuc3RhdGUsdT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChyKSxjPSF0aGlzLm5hdmlnYXRlZHx8dS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpOygicmVsb2FkIj09PXRoaXMub25TYW1lVXJsTmF2aWdhdGlvbnx8YykmJnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHIpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBRKG4sdGhpcy5zZXJpYWxpemVVcmwodSkscyxsKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5ydW5OYXZpZ2F0ZSh1LHIsISFpLnNraXBMb2NhdGlvbkNoYW5nZSwhIWkucmVwbGFjZVVybCxuLG51bGwpfSkudGhlbihvLGEpKTpjJiZ0aGlzLnJhd1VybFRyZWUmJnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHRoaXMucmF3VXJsVHJlZSk/KHRoaXMuZXZlbnRzLm5leHQobmV3IFEobix0aGlzLnNlcmlhbGl6ZVVybCh1KSxzLGwpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJ1bk5hdmlnYXRlKHUsciwhMSwhMSxuLGllKHUsZS5yb290Q29tcG9uZW50VHlwZSkuc25hcHNob3QpfSkudGhlbihvLGEpKToodGhpcy5yYXdVcmxUcmVlPXIsbyhudWxsKSl9LHQucHJvdG90eXBlLnJ1bk5hdmlnYXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxzKXt2YXIgdT10aGlzO3JldHVybiBpIT09dGhpcy5uYXZpZ2F0aW9uSWQ/KHRoaXMuZXZlbnRzLm5leHQobmV3IEcoaSx0aGlzLnNlcmlhbGl6ZVVybCh0KSwiTmF2aWdhdGlvbiBJRCAiK2krIiBpcyBub3QgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBpZCAiK3RoaXMubmF2aWdhdGlvbklkKSksUHJvbWlzZS5yZXNvbHZlKCExKSk6bmV3IFByb21pc2UoZnVuY3Rpb24oYyxmKXt2YXIgZCxtPShzP09iamVjdChsLmEpKHthcHBsaWVkVXJsOnQsc25hcHNob3Q6c30pOm5ldyBZdCh1Lm5nTW9kdWxlLmluamVjdG9yLHUuY29uZmlnTG9hZGVyLHUudXJsU2VyaWFsaXplcix0LHUuY29uZmlnKS5hcHBseSgpLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPSJlbXB0eU9ubHkiKSxuZXcgVGUodCxlLG4scixpKS5yZWNvZ25pemUoKX0odS5yb290Q29tcG9uZW50VHlwZSx1LmNvbmZpZyxlLHUuc2VyaWFsaXplVXJsKGUpLHUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihuKXtyZXR1cm4gdS5ldmVudHMubmV4dChuZXcgVyhpLHUuc2VyaWFsaXplVXJsKHQpLHUuc2VyaWFsaXplVXJsKGUpLG4pKSx7YXBwbGllZFVybDplLHNuYXBzaG90Om59fSkpfSkpKS5waXBlKE9iamVjdChwLmEpKGZ1bmN0aW9uKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHQ/T2JqZWN0KGwuYSkodCk6dS5ob29rcy5iZWZvcmVQcmVhY3RpdmF0aW9uKHQuc25hcHNob3QpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC5hcHBsaWVkVXJsLG49dC5zbmFwc2hvdDtyZXR1cm4oZD1uZXcgU2Uobix1LnJvdXRlclN0YXRlLnNuYXBzaG90LHUubmdNb2R1bGUuaW5qZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIHUudHJpZ2dlckV2ZW50KHQpfSkpLmluaXRpYWxpemUodS5yb290Q29udGV4dHMpLHthcHBsaWVkVXJsOmUsc25hcHNob3Q6bn19KSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihlKXtpZigiYm9vbGVhbiI9PXR5cGVvZiBlfHx1Lm5hdmlnYXRpb25JZCE9PWkpcmV0dXJuIE9iamVjdChsLmEpKCExKTt2YXIgbj1lLmFwcGxpZWRVcmwscj1lLnNuYXBzaG90O3JldHVybiB1LnRyaWdnZXJFdmVudChuZXcgWihpLHUuc2VyaWFsaXplVXJsKHQpLHUuc2VyaWFsaXplVXJsKG4pLHIpKSxkLmNoZWNrR3VhcmRzKCkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdS50cmlnZ2VyRXZlbnQobmV3IEsoaSx1LnNlcmlhbGl6ZVVybCh0KSx1LnNlcmlhbGl6ZVVybChuKSxyLGUpKSx7YXBwbGllZFVybDpuLHNuYXBzaG90OnIsc2hvdWxkQWN0aXZhdGU6ZX19KSl9KSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfHx1Lm5hdmlnYXRpb25JZCE9PWk/T2JqZWN0KGwuYSkoITEpOmUuc2hvdWxkQWN0aXZhdGUmJmQuaXNBY3RpdmF0aW5nKCk/KHUudHJpZ2dlckV2ZW50KG5ldyBYKGksdS5zZXJpYWxpemVVcmwodCksdS5zZXJpYWxpemVVcmwoZS5hcHBsaWVkVXJsKSxlLnNuYXBzaG90KSksZC5yZXNvbHZlRGF0YSh1LnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24oKXtyZXR1cm4gdS50cmlnZ2VyRXZlbnQobmV3ICQoaSx1LnNlcmlhbGl6ZVVybCh0KSx1LnNlcmlhbGl6ZVVybChlLmFwcGxpZWRVcmwpLGUuc25hcHNob3QpKSxlfSkpKTpPYmplY3QobC5hKShlKX0pKS5waXBlKE9iamVjdChwLmEpKGZ1bmN0aW9uKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR8fHUubmF2aWdhdGlvbklkIT09aT9PYmplY3QobC5hKSghMSk6dS5ob29rcy5hZnRlclByZWFjdGl2YXRpb24odC5zbmFwc2hvdCkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiB0fSkpfSkpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdHx8dS5uYXZpZ2F0aW9uSWQhPT1pKXJldHVybiExO3ZhciBlLG4scixzPXQuYXBwbGllZFVybCxsPXQuc2hvdWxkQWN0aXZhdGU7cmV0dXJuIGw/e2FwcGxpZWRVcmw6cyxzdGF0ZToocj1mdW5jdGlvbiB0KGUsbixyKXtpZihyJiZlLnNob3VsZFJldXNlUm91dGUobi52YWx1ZSxyLnZhbHVlLnNuYXBzaG90KSl7KGM9ci52YWx1ZSkuX2Z1dHVyZVNuYXBzaG90PW4udmFsdWU7dmFyIGk9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuLmNoaWxkcmVuLm1hcChmdW5jdGlvbihuKXt0cnl7Zm9yKHZhciBpPU9iamVjdChvLmUpKHIuY2hpbGRyZW4pLGE9aS5uZXh0KCk7IWEuZG9uZTthPWkubmV4dCgpKXt2YXIgcz1hLnZhbHVlO2lmKGUuc2hvdWxkUmV1c2VSb3V0ZShzLnZhbHVlLnNuYXBzaG90LG4udmFsdWUpKXJldHVybiB0KGUsbixzKX19Y2F0Y2godCl7bD17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKHU9aS5yZXR1cm4pJiZ1LmNhbGwoaSl9ZmluYWxseXtpZihsKXRocm93IGwuZXJyb3J9fXJldHVybiB0KGUsbik7dmFyIGwsdX0pfShlLG4scik7cmV0dXJuIG5ldyBlZShjLGkpfXZhciBzPWUucmV0cmlldmUobi52YWx1ZSk7aWYocyl7dmFyIGw9cy5yb3V0ZTtyZXR1cm4gZnVuY3Rpb24gdChlLG4pe2lmKGUudmFsdWUucm91dGVDb25maWchPT1uLnZhbHVlLnJvdXRlQ29uZmlnKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYXR0YWNoIEFjdGl2YXRlZFJvdXRlU25hcHNob3QgY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IHJvdXRlIik7aWYoZS5jaGlsZHJlbi5sZW5ndGghPT1uLmNoaWxkcmVuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGNoaWxkcmVuIik7bi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9ZS52YWx1ZTtmb3IodmFyIHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoOysrcil0KGUuY2hpbGRyZW5bcl0sbi5jaGlsZHJlbltyXSl9KG4sbCksbH12YXIgdSxjPW5ldyBvZShuZXcgYS5hKCh1PW4udmFsdWUpLnVybCksbmV3IGEuYSh1LnBhcmFtcyksbmV3IGEuYSh1LnF1ZXJ5UGFyYW1zKSxuZXcgYS5hKHUuZnJhZ21lbnQpLG5ldyBhLmEodS5kYXRhKSx1Lm91dGxldCx1LmNvbXBvbmVudCx1KTtyZXR1cm4gaT1uLmNoaWxkcmVuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSksbmV3IGVlKGMsaSl9KHUucm91dGVSZXVzZVN0cmF0ZWd5LChlPXQuc25hcHNob3QpLl9yb290LChuPXUucm91dGVyU3RhdGUpP24uX3Jvb3Q6dm9pZCAwKSxuZXcgcmUocixlKSksc2hvdWxkQWN0aXZhdGU6bH06e2FwcGxpZWRVcmw6cyxzdGF0ZTpudWxsLHNob3VsZEFjdGl2YXRlOmx9fSkpO3UuYWN0aXZhdGVSb3V0ZXMobSx1LnJvdXRlclN0YXRlLHUuY3VycmVudFVybFRyZWUsaSx0LGUsbixyLGMsZil9KX0sdC5wcm90b3R5cGUuYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSl7dmFyIGMsZj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXtpZigiYm9vbGVhbiIhPXR5cGVvZiB0JiZ0LnNob3VsZEFjdGl2YXRlJiZyPT09Zi5uYXZpZ2F0aW9uSWQmJnQuc3RhdGUpe3ZhciBuPXQuc3RhdGU7aWYoZi5jdXJyZW50VXJsVHJlZT10LmFwcGxpZWRVcmwsZi5yYXdVcmxUcmVlPWYudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShmLmN1cnJlbnRVcmxUcmVlLG8pLGYucm91dGVyU3RhdGU9biwhYSl7dmFyIGk9Zi51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLnJhd1VybFRyZWUpO2YubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8oaSl8fHM/Zi5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaSwiIix7bmF2aWdhdGlvbklkOnJ9KTpmLmxvY2F0aW9uLmdvKGksIiIse25hdmlnYXRpb25JZDpyfSl9bmV3IHFlKGYucm91dGVSZXVzZVN0cmF0ZWd5LG4sZSxmdW5jdGlvbih0KXtyZXR1cm4gZi50cmlnZ2VyRXZlbnQodCl9KS5hY3RpdmF0ZShmLnJvb3RDb250ZXh0cyksYz0hMH1lbHNlIGM9ITF9KS50aGVuKGZ1bmN0aW9uKCl7Yz8oZi5uYXZpZ2F0ZWQ9ITAsZi5sYXN0U3VjY2Vzc2Z1bElkPXIsZi5ldmVudHMubmV4dChuZXcgcShyLGYuc2VyaWFsaXplVXJsKGkpLGYuc2VyaWFsaXplVXJsKGYuY3VycmVudFVybFRyZWUpKSksbCghMCkpOihmLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpLGYuZXZlbnRzLm5leHQobmV3IEcocixmLnNlcmlhbGl6ZVVybChpKSwiIikpLGwoITEpKX0sZnVuY3Rpb24odCl7aWYoKGE9dCkmJmEubmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IpZi5uYXZpZ2F0ZWQ9ITAsZi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBHKHIsZi5zZXJpYWxpemVVcmwoaSksdC5tZXNzYWdlKSksbCghMSk7ZWxzZXtmLnJlc2V0U3RhdGVBbmRVcmwoZSxuLG8pLGYuZXZlbnRzLm5leHQobmV3IFkocixmLnNlcmlhbGl6ZVVybChpKSx0KSk7dHJ5e2woZi5lcnJvckhhbmRsZXIodCkpfWNhdGNoKHQpe3UodCl9fXZhciBhfSl9LHQucHJvdG90eXBlLnJlc2V0U3RhdGVBbmRVcmw9ZnVuY3Rpb24odCxlLG4pe3RoaXMucm91dGVyU3RhdGU9dCx0aGlzLmN1cnJlbnRVcmxUcmVlPWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLG4pLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl9LHQucHJvdG90eXBlLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZT1mdW5jdGlvbigpe3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5yYXdVcmxUcmVlKSwiIix7bmF2aWdhdGlvbklkOnRoaXMubGFzdFN1Y2Nlc3NmdWxJZH0pfSx0fSgpLHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT10LHRoaXMuZnV0dXJlU3RhdGU9ZSx0aGlzLmN1cnJTdGF0ZT1uLHRoaXMuZm9yd2FyZEV2ZW50PXJ9cmV0dXJuIHQucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3Qsbj10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KSxmZSh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLm91dGxldDtyLmRlYWN0aXZhdGVSb3V0ZXModCxpW2VdLG4pLGRlbGV0ZSBpW2VdfSksdnQoaSxmdW5jdGlvbih0LGUpe3IuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuKX0pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLGk9ZT9lLnZhbHVlOm51bGw7aWYocj09PWkpaWYoci5jb21wb25lbnQpe3ZhciBvPW4uZ2V0Q29udGV4dChyLm91dGxldCk7byYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgaSYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLG4pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaCh0LnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKHQsZSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQodCxlKX0sdC5wcm90b3R5cGUuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKG4mJm4ub3V0bGV0KXt2YXIgcj1uLm91dGxldC5kZXRhY2goKSxpPW4uY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHQudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjpyLHJvdXRlOnQsY29udGV4dHM6aX0pfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYocil7dmFyIGk9bmUodCksbz10LnZhbHVlLmNvbXBvbmVudD9yLmNoaWxkcmVuOmU7dnQoaSxmdW5jdGlvbih0LGUpe3JldHVybiBuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbyl9KSxyLm91dGxldCYmKHIub3V0bGV0LmRlYWN0aXZhdGUoKSxyLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9bmUoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuYWN0aXZhdGVSb3V0ZXModCxpW3QudmFsdWUub3V0bGV0XSxuKSxyLmZvcndhcmRFdmVudChuZXcgaXQodC52YWx1ZS5zbmFwc2hvdCkpfSksdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBudCh0LnZhbHVlLnNuYXBzaG90KSl9LHQucHJvdG90eXBlLmFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLGk9ZT9lLnZhbHVlOm51bGw7aWYoZmUocikscj09PWkpaWYoci5jb21wb25lbnQpe3ZhciBvPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxuKTtlbHNlIGlmKHIuY29tcG9uZW50KWlmKG89bi5nZXRPckNyZWF0ZUNvbnRleHQoci5vdXRsZXQpLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZEF0dGFjaChyLnNuYXBzaG90KSl7dmFyIGE9dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0cmlldmUoci5zbmFwc2hvdCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoci5zbmFwc2hvdCxudWxsKSxvLmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChhLmNvbnRleHRzKSxvLmF0dGFjaFJlZj1hLmNvbXBvbmVudFJlZixvLnJvdXRlPWEucm91dGUudmFsdWUsby5vdXRsZXQmJm8ub3V0bGV0LmF0dGFjaChhLmNvbXBvbmVudFJlZixhLnJvdXRlLnZhbHVlKSxHZShhLnJvdXRlKX1lbHNle3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1yLnNuYXBzaG90LnBhcmVudDtlO2U9ZS5wYXJlbnQpe3ZhciBuPWUucm91dGVDb25maWc7aWYobiYmbi5fbG9hZGVkQ29uZmlnKXJldHVybiBuLl9sb2FkZWRDb25maWc7aWYobiYmbi5jb21wb25lbnQpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9KCksbD1zP3MubW9kdWxlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjpudWxsO28ucm91dGU9cixvLnJlc29sdmVyPWwsby5vdXRsZXQmJm8ub3V0bGV0LmFjdGl2YXRlV2l0aChyLGwpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LG51bGwsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLG4pfSx0fSgpO2Z1bmN0aW9uIEdlKHQpe2ZlKHQudmFsdWUpLHQuY2hpbGRyZW4uZm9yRWFjaChHZSl9dmFyIFllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLnJvdXRlcj10LHRoaXMucm91dGU9ZSx0aGlzLmxvY2F0aW9uU3RyYXRlZ3k9bix0aGlzLmNvbW1hbmRzPVtdLHRoaXMuc3Vic2NyaXB0aW9uPXQuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbih0KXt0IGluc3RhbmNlb2YgcSYmci51cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb3V0ZXJMaW5rIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuY29tbWFuZHM9bnVsbCE9dD9BcnJheS5pc0FycmF5KHQpP3Q6W3RdOltdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJlc2VydmVRdWVyeVBhcmFtcyIse3NldDpmdW5jdGlvbih0KXtPYmplY3QoaS5ZKSgpJiZjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigicHJlc2VydmVRdWVyeVBhcmFtcyBpcyBkZXByZWNhdGVkLCB1c2UgcXVlcnlQYXJhbXNIYW5kbGluZyBpbnN0ZWFkLiIpLHRoaXMucHJlc2VydmU9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLnVwZGF0ZVRhcmdldFVybEFuZEhyZWYoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5vbkNsaWNrPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKDAhPT10fHxlfHxufHxyKXJldHVybiEwO2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy50YXJnZXQmJiJfc2VsZiIhPXRoaXMudGFyZ2V0KXJldHVybiEwO3ZhciBpPXtza2lwTG9jYXRpb25DaGFuZ2U6V2UodGhpcy5za2lwTG9jYXRpb25DaGFuZ2UpLHJlcGxhY2VVcmw6V2UodGhpcy5yZXBsYWNlVXJsKX07cmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy51cmxUcmVlLGkpLCExfSx0LnByb3RvdHlwZS51cGRhdGVUYXJnZXRVcmxBbmRIcmVmPWZ1bmN0aW9uKCl7dGhpcy5ocmVmPXRoaXMubG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHRoaXMudXJsVHJlZSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVybFRyZWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6dGhpcy5xdWVyeVBhcmFtcyxmcmFnbWVudDp0aGlzLmZyYWdtZW50LHByZXNlcnZlUXVlcnlQYXJhbXM6V2UodGhpcy5wcmVzZXJ2ZSkscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDpXZSh0aGlzLnByZXNlcnZlRnJhZ21lbnQpfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiBXZSh0KXtyZXR1cm4iIj09PXR8fCEhdH12YXIgWmU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLm91dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLnJlc29sdmVyPW51bGwsdGhpcy5jaGlsZHJlbj1uZXcgS2UsdGhpcy5hdHRhY2hSZWY9bnVsbH19KCksS2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5jb250ZXh0cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5vbkNoaWxkT3V0bGV0Q3JlYXRlZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KHQpO24ub3V0bGV0PWUsdGhpcy5jb250ZXh0cy5zZXQodCxuKX0sdC5wcm90b3R5cGUub25DaGlsZE91dGxldERlc3Ryb3llZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENvbnRleHQodCk7ZSYmKGUub3V0bGV0PW51bGwpfSx0LnByb3RvdHlwZS5vbk91dGxldERlYWN0aXZhdGVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLHR9LHQucHJvdG90eXBlLm9uT3V0bGV0UmVBdHRhY2hlZD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHRzPXR9LHQucHJvdG90eXBlLmdldE9yQ3JlYXRlQ29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENvbnRleHQodCk7cmV0dXJuIGV8fChlPW5ldyBaZSx0aGlzLmNvbnRleHRzLnNldCh0LGUpKSxlfSx0LnByb3RvdHlwZS5nZXRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRleHRzLmdldCh0KXx8bnVsbH0sdH0oKSxYZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXt0aGlzLnBhcmVudENvbnRleHRzPXQsdGhpcy5sb2NhdGlvbj1lLHRoaXMucmVzb2x2ZXI9bix0aGlzLmNoYW5nZURldGVjdG9yPW8sdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuYWN0aXZhdGVFdmVudHM9bmV3IGkubix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IGkubix0aGlzLm5hbWU9cnx8YXQsdC5vbkNoaWxkT3V0bGV0Q3JlYXRlZCh0aGlzLm5hbWUsdGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKHRoaXMubmFtZSl9LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXt2YXIgdD10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTt0JiZ0LnJvdXRlJiYodC5hdHRhY2hSZWY/dGhpcy5hdHRhY2godC5hdHRhY2hSZWYsdC5yb3V0ZSk6dGhpcy5hY3RpdmF0ZVdpdGgodC5yb3V0ZSx0LnJlc29sdmVyfHxudWxsKSl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzQWN0aXZhdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjdGl2YXRlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkUm91dGUiLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFJvdXRlRGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZT90aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhOnt9fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7dGhpcy5sb2NhdGlvbi5kZXRhY2goKTt2YXIgdD10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHR9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0LGUpe3RoaXMuYWN0aXZhdGVkPXQsdGhpcy5fYWN0aXZhdGVkUm91dGU9ZSx0aGlzLmxvY2F0aW9uLmluc2VydCh0Lmhvc3RWaWV3KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZT1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZhdGVkKXt2YXIgdD10aGlzLmNvbXBvbmVudDt0aGlzLmFjdGl2YXRlZC5kZXN0cm95KCksdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGVhY3RpdmF0ZUV2ZW50cy5lbWl0KHQpfX0sdC5wcm90b3R5cGUuYWN0aXZhdGVXaXRoPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY3RpdmF0ZSBhbiBhbHJlYWR5IGFjdGl2YXRlZCBvdXRsZXQiKTt0aGlzLl9hY3RpdmF0ZWRSb3V0ZT10O3ZhciBuPShlPWV8fHRoaXMucmVzb2x2ZXIpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnLmNvbXBvbmVudCkscj10aGlzLnBhcmVudENvbnRleHRzLmdldE9yQ3JlYXRlQ29udGV4dCh0aGlzLm5hbWUpLmNoaWxkcmVuLGk9bmV3ICRlKHQscix0aGlzLmxvY2F0aW9uLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD10aGlzLmxvY2F0aW9uLmNyZWF0ZUNvbXBvbmVudChuLHRoaXMubG9jYXRpb24ubGVuZ3RoLGkpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksdGhpcy5hY3RpdmF0ZUV2ZW50cy5lbWl0KHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlKX0sdH0oKSwkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucm91dGU9dCx0aGlzLmNoaWxkQ29udGV4dHM9ZSx0aGlzLnBhcmVudD1ufXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PW9lP3RoaXMucm91dGU6dD09PUtlP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQodCxlKX0sdH0oKSxKZT1mdW5jdGlvbigpe30sdG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUoKS5waXBlKE9iamVjdChBLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChsLmEpKG51bGwpfSkpfSx0fSgpLGVuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QobC5hKShudWxsKX0sdH0oKSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpKXt0aGlzLnJvdXRlcj10LHRoaXMuaW5qZWN0b3I9cix0aGlzLnByZWxvYWRpbmdTdHJhdGVneT1pLHRoaXMubG9hZGVyPW5ldyBWZShlLG4sZnVuY3Rpb24oZSl7cmV0dXJuIHQudHJpZ2dlckV2ZW50KG5ldyBKKGUpKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHQudHJpZ2dlckV2ZW50KG5ldyB0dChlKSl9KX1yZXR1cm4gdC5wcm90b3R5cGUuc2V0VXBQcmVsb2FkaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJvdXRlci5ldmVudHMucGlwZShPYmplY3QobS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHF9KSxPYmplY3QoZC5hKShmdW5jdGlvbigpe3JldHVybiB0LnByZWxvYWQoKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt9KX0sdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5qZWN0b3IuZ2V0KGkudyk7cmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyh0LHRoaXMucm91dGVyLmNvbmZpZyl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUucHJvY2Vzc1JvdXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT1bXTt0cnl7Zm9yKHZhciBhPU9iamVjdChvLmUpKGUpLGw9YS5uZXh0KCk7IWwuZG9uZTtsPWEubmV4dCgpKXt2YXIgdT1sLnZhbHVlO2lmKHUubG9hZENoaWxkcmVuJiYhdS5jYW5Mb2FkJiZ1Ll9sb2FkZWRDb25maWcpe3ZhciBjPXUuX2xvYWRlZENvbmZpZztpLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKGMubW9kdWxlLGMucm91dGVzKSl9ZWxzZSB1LmxvYWRDaGlsZHJlbiYmIXUuY2FuTG9hZD9pLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKHQsdSkpOnUuY2hpbGRyZW4mJmkucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXModCx1LmNoaWxkcmVuKSl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2wmJiFsLmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gT2JqZWN0KHMuYSkoaSkucGlwZShPYmplY3QoRC5hKSgpLE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe30pKX0sdC5wcm90b3R5cGUucHJlbG9hZENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5LnByZWxvYWQoZSxmdW5jdGlvbigpe3JldHVybiBuLmxvYWRlci5sb2FkKHQuaW5qZWN0b3IsZSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fbG9hZGVkQ29uZmlnPXQsbi5wcm9jZXNzUm91dGVzKHQubW9kdWxlLHQucm91dGVzKX0pKX0pfSx0fSgpLHJuPW5ldyBpLnAoIlJPVVRFUl9DT05GSUdVUkFUSU9OIiksb249bmV3IGkucCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxhbj1bci5nLHtwcm92aWRlOmt0LHVzZUNsYXNzOlR0fSx7cHJvdmlkZTpRZSx1c2VGYWN0b3J5OmhuLGRlcHM6W2kuZyxrdCxLZSxyLmcsaS5xLGkudixpLmksTGUscm4sW0JlLG5ldyBpLnpdLFtEZSxuZXcgaS56XV19LEtlLHtwcm92aWRlOm9lLHVzZUZhY3Rvcnk6cG4sZGVwczpbUWVdfSx7cHJvdmlkZTppLnYsdXNlQ2xhc3M6aS5LfSxubixlbix0bix7cHJvdmlkZTpybix1c2VWYWx1ZTp7ZW5hYmxlVHJhY2luZzohMX19XTtmdW5jdGlvbiBzbigpe3JldHVybiBuZXcgaS54KCJSb3V0ZXIiLFFlKX12YXIgbG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7fXJldHVybiB0LmZvclJvb3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W2FuLGZuKGUpLHtwcm92aWRlOm9uLHVzZUZhY3Rvcnk6Y24sZGVwczpbW1FlLG5ldyBpLnosbmV3IGkuSl1dfSx7cHJvdmlkZTpybix1c2VWYWx1ZTpufHx7fX0se3Byb3ZpZGU6ci5oLHVzZUZhY3Rvcnk6dW4sZGVwczpbci5wLFtuZXcgaS5vKHIuYSksbmV3IGkuel0scm5dfSx7cHJvdmlkZTpKZSx1c2VFeGlzdGluZzpuJiZuLnByZWxvYWRpbmdTdHJhdGVneT9uLnByZWxvYWRpbmdTdHJhdGVneTplbn0se3Byb3ZpZGU6aS54LG11bHRpOiEwLHVzZUZhY3Rvcnk6c259LFtkbix7cHJvdmlkZTppLmQsbXVsdGk6ITAsdXNlRmFjdG9yeTptbixkZXBzOltkbl19LHtwcm92aWRlOmduLHVzZUZhY3Rvcnk6eW4sZGVwczpbZG5dfSx7cHJvdmlkZTppLmIsbXVsdGk6ITAsdXNlRXhpc3Rpbmc6Z259XV19fSx0LmZvckNoaWxkPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbZm4oZSldfX0sdH0oKTtmdW5jdGlvbiB1bih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSxuLnVzZUhhc2g/bmV3IHIuZSh0LGUpOm5ldyByLm8odCxlKX1mdW5jdGlvbiBjbih0KXtpZih0KXRocm93IG5ldyBFcnJvcigiUm91dGVyTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIExhenkgbG9hZGVkIG1vZHVsZXMgc2hvdWxkIHVzZSBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBmbih0KXtyZXR1cm5be3Byb3ZpZGU6aS5hLG11bHRpOiEwLHVzZVZhbHVlOnR9LHtwcm92aWRlOkxlLG11bHRpOiEwLHVzZVZhbHVlOnR9XX1mdW5jdGlvbiBobih0LGUsbixyLGksbyxhLHMsbCx1LGMpe3ZvaWQgMD09PWwmJihsPXt9KTt2YXIgZj1uZXcgUWUobnVsbCxlLG4scixpLG8sYSx5dChzKSk7aWYodSYmKGYudXJsSGFuZGxpbmdTdHJhdGVneT11KSxjJiYoZi5yb3V0ZVJldXNlU3RyYXRlZ3k9YyksbC5lcnJvckhhbmRsZXImJihmLmVycm9ySGFuZGxlcj1sLmVycm9ySGFuZGxlciksbC5lbmFibGVUcmFjaW5nKXt2YXIgaD1PYmplY3QoVS50KSgpO2YuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbih0KXtoLmxvZ0dyb3VwKCJSb3V0ZXIgRXZlbnQ6ICIrdC5jb25zdHJ1Y3Rvci5uYW1lKSxoLmxvZyh0LnRvU3RyaW5nKCkpLGgubG9nKHQpLGgubG9nR3JvdXBFbmQoKX0pfXJldHVybiBsLm9uU2FtZVVybE5hdmlnYXRpb24mJihmLm9uU2FtZVVybE5hdmlnYXRpb249bC5vblNhbWVVcmxOYXZpZ2F0aW9uKSxsLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kmJihmLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9bC5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxmfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0LnJvdXRlclN0YXRlLnJvb3R9dmFyIGRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmluamVjdG9yPXQsdGhpcy5pbml0TmF2aWdhdGlvbj0hMSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmU9bmV3IHUuYX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmluamVjdG9yLmdldChyLmYsUHJvbWlzZS5yZXNvbHZlKG51bGwpKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9bnVsbCxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3JldHVybiBlPXR9KSxyPXQuaW5qZWN0b3IuZ2V0KFFlKSxpPXQuaW5qZWN0b3IuZ2V0KHJuKTtpZih0LmlzTGVnYWN5RGlzYWJsZWQoaSl8fHQuaXNMZWdhY3lFbmFibGVkKGkpKWUoITApO2Vsc2UgaWYoImRpc2FibGVkIj09PWkuaW5pdGlhbE5hdmlnYXRpb24pci5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxlKCEwKTtlbHNle2lmKCJlbmFibGVkIiE9PWkuaW5pdGlhbE5hdmlnYXRpb24pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGluaXRpYWxOYXZpZ2F0aW9uIG9wdGlvbnM6ICciK2kuaW5pdGlhbE5hdmlnYXRpb24rIiciKTtyLmhvb2tzLmFmdGVyUHJlYWN0aXZhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmluaXROYXZpZ2F0aW9uP09iamVjdChsLmEpKG51bGwpOih0LmluaXROYXZpZ2F0aW9uPSEwLGUoITApLHQucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZSl9LHIuaW5pdGlhbE5hdmlnYXRpb24oKX1yZXR1cm4gbn0pfSx0LnByb3RvdHlwZS5ib290c3RyYXBMaXN0ZW5lcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluamVjdG9yLmdldChybiksbj10aGlzLmluamVjdG9yLmdldChubikscj10aGlzLmluamVjdG9yLmdldChRZSksbz10aGlzLmluamVjdG9yLmdldChpLmcpO3Q9PT1vLmNvbXBvbmVudHNbMF0mJih0aGlzLmlzTGVnYWN5RW5hYmxlZChlKT9yLmluaXRpYWxOYXZpZ2F0aW9uKCk6dGhpcy5pc0xlZ2FjeURpc2FibGVkKGUpJiZyLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLG4uc2V0VXBQcmVsb2FkaW5nKCksci5yZXNldFJvb3RDb21wb25lbnRUeXBlKG8uY29tcG9uZW50VHlwZXNbMF0pLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZS5uZXh0KG51bGwpLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZS5jb21wbGV0ZSgpKX0sdC5wcm90b3R5cGUuaXNMZWdhY3lFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiJsZWdhY3lfZW5hYmxlZCI9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHwhMD09PXQuaW5pdGlhbE5hdmlnYXRpb258fHZvaWQgMD09PXQuaW5pdGlhbE5hdmlnYXRpb259LHQucHJvdG90eXBlLmlzTGVnYWN5RGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuImxlZ2FjeV9kaXNhYmxlZCI9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHwhMT09PXQuaW5pdGlhbE5hdmlnYXRpb259LHR9KCk7ZnVuY3Rpb24gbW4odCl7cmV0dXJuIHQuYXBwSW5pdGlhbGl6ZXIuYmluZCh0KX1mdW5jdGlvbiB5bih0KXtyZXR1cm4gdC5ib290c3RyYXBMaXN0ZW5lci5iaW5kKHQpfXZhciBnbj1uZXcgaS5wKCJSb3V0ZXIgSW5pdGlhbGl6ZXIiKX0sWllqdDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiB2dH0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBudH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBydH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gdHR9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gc3R9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBJfSk7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bigibXJTRyIpLGE9bnVsbDtmdW5jdGlvbiBzKCl7cmV0dXJuIGF9dmFyIGwsdT17Y2xhc3M6ImNsYXNzTmFtZSIsaW5uZXJIdG1sOiJpbm5lckhUTUwiLHJlYWRvbmx5OiJyZWFkT25seSIsdGFiaW5kZXg6InRhYkluZGV4In0sYz17IlxiIjoiQmFja3NwYWNlIiwiXHQiOiJUYWIiLCJceDdmIjoiRGVsZXRlIiwiXHgxYiI6IkVzY2FwZSIsRGVsOiJEZWxldGUiLEVzYzoiRXNjYXBlIixMZWZ0OiJBcnJvd0xlZnQiLFJpZ2h0OiJBcnJvd1JpZ2h0IixVcDoiQXJyb3dVcCIsRG93bjoiQXJyb3dEb3duIixNZW51OiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixXaW46Ik9TIn0sZj17QToiMSIsQjoiMiIsQzoiMyIsRDoiNCIsRToiNSIsRjoiNiIsRzoiNyIsSDoiOCIsSToiOSIsSjoiKiIsSzoiKyIsTToiLSIsTjoiLiIsTzoiLyIsImAiOiIwIiwiXHg5MCI6Ik51bUxvY2sifTtpLlJhLk5vZGUmJihsPWkuUmEuTm9kZS5wcm90b3R5cGUuY29udGFpbnN8fGZ1bmN0aW9uKHQpe3JldHVybiEhKDE2JnRoaXMuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpfSk7dmFyIGgscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInBhcnNlIG5vdCBpbXBsZW1lbnRlZCIpfSxlLm1ha2VDdXJyZW50PWZ1bmN0aW9uKCl7dmFyIHQ7dD1uZXcgZSxhfHwoYT10KX0sZS5wcm90b3R5cGUuaGFzUHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fSxlLnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dFtlXT1ufSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdfSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByOyhyPXQpW2VdLmFwcGx5KHIsT2JqZWN0KG8uZCkobikpfSxlLnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmKGNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvcih0KTpjb25zb2xlLmxvZyh0KSl9LGUucHJvdG90eXBlLmxvZz1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nJiZ3aW5kb3cuY29uc29sZS5sb2codCl9LGUucHJvdG90eXBlLmxvZ0dyb3VwPWZ1bmN0aW9uKHQpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cCYmd2luZG93LmNvbnNvbGUuZ3JvdXAodCl9LGUucHJvdG90eXBlLmxvZ0dyb3VwRW5kPWZ1bmN0aW9uKCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmdyb3VwRW5kJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0LGUpe3JldHVybiBsLmNhbGwodCxlKX0sZS5wcm90b3R5cGUucXVlcnlTZWxlY3Rvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3IoZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKGUpfSxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUsbil7dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9LGUucHJvdG90eXBlLm9uQW5kQ2FuY2VsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSksZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCExKX19LGUucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24odCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9LGUucHJvdG90eXBlLmNyZWF0ZU1vdXNlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5jcmVhdGVFdmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUV2ZW50KCJFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5yZXR1cm5WYWx1ZT0hMX0sZS5wcm90b3R5cGUuaXNQcmV2ZW50ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVmYXVsdFByZXZlbnRlZHx8bnVsbCE9dC5yZXR1cm5WYWx1ZSYmIXQucmV0dXJuVmFsdWV9LGUucHJvdG90eXBlLmdldElubmVySFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbm5lckhUTUx9LGUucHJvdG90eXBlLmdldFRlbXBsYXRlQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4iY29udGVudCJpbiB0JiZ0aGlzLmlzVGVtcGxhdGVFbGVtZW50KHQpP3QuY29udGVudDpudWxsfSxlLnByb3RvdHlwZS5nZXRPdXRlckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0ZXJIVE1MfSxlLnByb3RvdHlwZS5ub2RlTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZX0sZS5wcm90b3R5cGUubm9kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVWYWx1ZX0sZS5wcm90b3R5cGUudHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSxlLnByb3RvdHlwZS5jb250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc1Byb3BlcnR5KHQsImNvbnRlbnQiKT90LmNvbnRlbnQ6dH0sZS5wcm90b3R5cGUuZmlyc3RDaGlsZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5maXJzdENoaWxkfSxlLnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sZS5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkTm9kZXN9LGUucHJvdG90eXBlLmNoaWxkTm9kZXNBc0xpc3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2hpbGROb2RlcyxuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn0sZS5wcm90b3R5cGUuY2xlYXJOb2Rlcz1mdW5jdGlvbih0KXtmb3IoO3QuZmlyc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpfSxlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dC5yZW1vdmVDaGlsZChlKX0sZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKHQsZSxuKXt0LnJlcGxhY2VDaGlsZChlLG4pfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHR9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dC5pbnNlcnRCZWZvcmUobixlKX0sZS5wcm90b3R5cGUuaW5zZXJ0QWxsQmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXtuLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQuaW5zZXJ0QmVmb3JlKG4sZSl9KX0sZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZS5uZXh0U2libGluZyl9LGUucHJvdG90eXBlLnNldElubmVySFRNTD1mdW5jdGlvbih0LGUpe3QuaW5uZXJIVE1MPWV9LGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dENvbnRlbnR9LGUucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0LnRleHRDb250ZW50PWV9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3QudmFsdWU9ZX0sZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja2VkfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkPWZ1bmN0aW9uKHQsZSl7dC5jaGVja2VkPWV9LGUucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlQ29tbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBlLmlubmVySFRNTD10LGV9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybihuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnROUyh0LGUpfSxlLnByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZVRleHROb2RlKHQpfSxlLnByb3RvdHlwZS5jcmVhdGVTY3JpcHRUYWc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPShuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoIlNDUklQVCIpO3JldHVybiByLnNldEF0dHJpYnV0ZSh0LGUpLHJ9LGUucHJvdG90eXBlLmNyZWF0ZVN0eWxlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPShlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobix0aGlzLmNyZWF0ZVRleHROb2RlKHQsZSkpLG59LGUucHJvdG90eXBlLmNyZWF0ZVNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY3JlYXRlU2hhZG93Um9vdCgpfSxlLnByb3RvdHlwZS5nZXRTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEhvc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9zdH0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX0sZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSl9LGUucHJvdG90eXBlLmNsYXNzTGlzdD1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5jbGFzc0xpc3QsMCl9LGUucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX0sZS5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSl9LGUucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0LnN0eWxlW2VdPW59LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtlXT0iIn0sZS5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdHlsZVtlXX0sZS5wcm90b3R5cGUuaGFzU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZ2V0U3R5bGUodCxlKXx8IiI7cmV0dXJuIG4/cj09bjpyLmxlbmd0aD4wfSxlLnByb3RvdHlwZS50YWdOYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhZ05hbWV9LGUucHJvdG90eXBlLmF0dHJpYnV0ZU1hcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IE1hcCxuPXQuYXR0cmlidXRlcyxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW4uaXRlbShyKTtlLnNldChpLm5hbWUsaS52YWx1ZSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuaGFzQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lmhhc0F0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmdldEF0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dC5zZXRBdHRyaWJ1dGUoZSxuKX0sZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4scil7dC5zZXRBdHRyaWJ1dGVOUyhlLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQXR0cmlidXRlKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7dC5yZW1vdmVBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS50ZW1wbGF0ZUF3YXJlUm9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90aGlzLmNvbnRlbnQodCk6dH0sZS5wcm90b3R5cGUuY3JlYXRlSHRtbERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9LGUucHJvdG90eXBlLmdldERlZmF1bHREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaCh0KXtyZXR1cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19fSxlLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50aXRsZX0sZS5wcm90b3R5cGUuc2V0VGl0bGU9ZnVuY3Rpb24odCxlKXt0LnRpdGxlPWV8fCIifSxlLnByb3RvdHlwZS5lbGVtZW50TWF0Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiEhdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYodC5tYXRjaGVzJiZ0Lm1hdGNoZXMoZSl8fHQubXNNYXRjaGVzU2VsZWN0b3ImJnQubXNNYXRjaGVzU2VsZWN0b3IoZSl8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yJiZ0LndlYmtpdE1hdGNoZXNTZWxlY3RvcihlKSl9LGUucHJvdG90eXBlLmlzVGVtcGxhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzRWxlbWVudE5vZGUodCkmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfSxlLnByb3RvdHlwZS5pc1RleHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREV9LGUucHJvdG90eXBlLmlzQ29tbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkNPTU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaXNFbGVtZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSxlLnByb3RvdHlwZS5oYXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10LnNoYWRvd1Jvb3QmJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sZS5wcm90b3R5cGUuaXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH0sZS5wcm90b3R5cGUuaW1wb3J0SW50b0RvYz1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLnRlbXBsYXRlQXdhcmVSb290KHQpLCEwKX0sZS5wcm90b3R5cGUuYWRvcHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5hZG9wdE5vZGUodCl9LGUucHJvdG90eXBlLmdldEhyZWY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKCJocmVmIil9LGUucHJvdG90eXBlLmdldEV2ZW50S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5O2lmKG51bGw9PWUpe2lmKG51bGw9PShlPXQua2V5SWRlbnRpZmllcikpcmV0dXJuIlVuaWRlbnRpZmllZCI7ZS5zdGFydHNXaXRoKCJVKyIpJiYoZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGUuc3Vic3RyaW5nKDIpLDE2KSksMz09PXQubG9jYXRpb24mJmYuaGFzT3duUHJvcGVydHkoZSkmJihlPWZbZV0pKX1yZXR1cm4gY1tlXXx8ZX0sZS5wcm90b3R5cGUuZ2V0R2xvYmFsRXZlbnRUYXJnZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4id2luZG93Ij09PWU/d2luZG93OiJkb2N1bWVudCI9PT1lP3Q6ImJvZHkiPT09ZT90LmJvZHk6bnVsbH0sZS5wcm90b3R5cGUuZ2V0SGlzdG9yeT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaGlzdG9yeX0sZS5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmxvY2F0aW9ufSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbih0KXt2YXIgZSxuPWR8fChkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSk/ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1uP251bGw6KGU9bixofHwoaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLGguc2V0QXR0cmlidXRlKCJocmVmIixlKSwiLyI9PT1oLnBhdGhuYW1lLmNoYXJBdCgwKT9oLnBhdGhuYW1lOiIvIitoLnBhdGhuYW1lKX0sZS5wcm90b3R5cGUucmVzZXRCYXNlRWxlbWVudD1mdW5jdGlvbigpe2Q9bnVsbH0sZS5wcm90b3R5cGUuZ2V0VXNlckFnZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fSxlLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LCJkYXRhLSIrZSxuKX0sZS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSh0LCJkYXRhLSIrZSl9LGUucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGU9ZnVuY3Rpb24odCl7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUodCl9LGUucHJvdG90eXBlLnN1cHBvcnRzV2ViQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV9LGUucHJvdG90eXBlLnBlcmZvcm1hbmNlTm93PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZSYmd2luZG93LnBlcmZvcm1hbmNlLm5vdz93aW5kb3cucGVyZm9ybWFuY2Uubm93KCk6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LGUucHJvdG90eXBlLnN1cHBvcnRzQ29va2llcz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5nZXRDb29raWU9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyLnUpKGRvY3VtZW50LmNvb2tpZSx0KX0sZS5wcm90b3R5cGUuc2V0Q29va2llPWZ1bmN0aW9uKHQsZSl7ZG9jdW1lbnQuY29va2llPWVuY29kZVVSSUNvbXBvbmVudCh0KSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpfSxlfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO2UuX2FuaW1hdGlvblByZWZpeD1udWxsLGUuX3RyYW5zaXRpb25FbmQ9bnVsbDt0cnl7dmFyIG49ZS5jcmVhdGVFbGVtZW50KCJkaXYiLGRvY3VtZW50KTtpZihudWxsIT1lLmdldFN0eWxlKG4sImFuaW1hdGlvbk5hbWUiKSllLl9hbmltYXRpb25QcmVmaXg9IiI7ZWxzZSBmb3IodmFyIHI9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXSxpPTA7aTxyLmxlbmd0aDtpKyspaWYobnVsbCE9ZS5nZXRTdHlsZShuLHJbaV0rIkFuaW1hdGlvbk5hbWUiKSl7ZS5fYW5pbWF0aW9uUHJlZml4PSItIityW2ldLnRvTG93ZXJDYXNlKCkrIi0iO2JyZWFrfXZhciBvPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGwhPWUuZ2V0U3R5bGUobix0KSYmKGUuX3RyYW5zaXRpb25FbmQ9b1t0XSl9KX1jYXRjaCh0KXtlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGx9cmV0dXJuIGV9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0RGlzdHJpYnV0ZWROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREaXN0cmlidXRlZE5vZGVzKCl9LGUucHJvdG90eXBlLnJlc29sdmVBbmRTZXRIcmVmPWZ1bmN0aW9uKHQsZSxuKXt0LmhyZWY9bnVsbD09bj9lOmUrIi8uLi8iK259LGUucHJvdG90eXBlLnN1cHBvcnRzRE9NRXZlbnRzPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnN1cHBvcnRzTmF0aXZlU2hhZG93RE9NPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRvY3VtZW50LmJvZHkuY3JlYXRlU2hhZG93Um9vdH0sZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblByZWZpeD90aGlzLl9hbmltYXRpb25QcmVmaXg6IiJ9LGUucHJvdG90eXBlLmdldFRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZD90aGlzLl90cmFuc2l0aW9uRW5kOiIifSxlLnByb3RvdHlwZS5zdXBwb3J0c0FuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hbmltYXRpb25QcmVmaXgmJm51bGwhPXRoaXMuX3RyYW5zaXRpb25FbmR9LGV9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMucmVzb3VyY2VMb2FkZXJUeXBlPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXR0clRvUHJvcE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRyVG9Qcm9wTWFwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXR0clRvUHJvcE1hcD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCkpKSxkPW51bGwsbT1yLmQ7ZnVuY3Rpb24geSgpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfXZhciBnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kb2M9ZSxuLl9pbml0KCksbn1yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe3RoaXMubG9jYXRpb249cygpLmdldExvY2F0aW9uKCksdGhpcy5faGlzdG9yeT1zKCkuZ2V0SGlzdG9yeSgpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZkZyb21ET009ZnVuY3Rpb24oKXtyZXR1cm4gcygpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9LGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHQsITEpfSxlLnByb3RvdHlwZS5vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24odCl7cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdCwhMSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aG5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wYXRobmFtZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMubG9jYXRpb24ucGF0aG5hbWU9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlYXJjaCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2F0aW9uLnNlYXJjaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhhc2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5oYXNofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbil7eSgpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt5KCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9oaXN0b3J5LmJhY2soKX0sZS5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6aS5vLGFyZ3M6W21dfV19XX0sZX0oci5wKSx2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dCx0aGlzLl9kb209cygpfXJldHVybiB0LnByb3RvdHlwZS5hZGRUYWc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHQ/dGhpcy5fZ2V0T3JDcmVhdGVFbGVtZW50KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUuYWRkVGFncz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx0P3QucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHImJnQucHVzaChuLl9nZXRPckNyZWF0ZUVsZW1lbnQocixlKSksdH0sW10pOltdfSx0LnByb3RvdHlwZS5nZXRUYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuX2RvbS5xdWVyeVNlbGVjdG9yKHRoaXMuX2RvYywibWV0YVsiK3QrIl0iKXx8bnVsbH0sdC5wcm90b3R5cGUuZ2V0VGFncz1mdW5jdGlvbih0KXtpZighdClyZXR1cm5bXTt2YXIgZT10aGlzLl9kb20ucXVlcnlTZWxlY3RvckFsbCh0aGlzLl9kb2MsIm1ldGFbIit0KyJdIik7cmV0dXJuIGU/W10uc2xpY2UuY2FsbChlKTpbXX0sdC5wcm90b3R5cGUudXBkYXRlVGFnPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7ZT1lfHx0aGlzLl9wYXJzZVNlbGVjdG9yKHQpO3ZhciBuPXRoaXMuZ2V0VGFnKGUpO3JldHVybiBuP3RoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0LG4pOnRoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LCEwKX0sdC5wcm90b3R5cGUucmVtb3ZlVGFnPWZ1bmN0aW9uKHQpe3RoaXMucmVtb3ZlVGFnRWxlbWVudCh0aGlzLmdldFRhZyh0KSl9LHQucHJvdG90eXBlLnJlbW92ZVRhZ0VsZW1lbnQ9ZnVuY3Rpb24odCl7dCYmdGhpcy5fZG9tLnJlbW92ZSh0KX0sdC5wcm90b3R5cGUuX2dldE9yQ3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSwhZSl7dmFyIG49dGhpcy5fcGFyc2VTZWxlY3Rvcih0KSxyPXRoaXMuZ2V0VGFnKG4pO2lmKHImJnRoaXMuX2NvbnRhaW5zQXR0cmlidXRlcyh0LHIpKXJldHVybiByfXZhciBpPXRoaXMuX2RvbS5jcmVhdGVFbGVtZW50KCJtZXRhIik7dGhpcy5fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzKHQsaSk7dmFyIG89dGhpcy5fZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRoaXMuX2RvYywiaGVhZCIpWzBdO3JldHVybiB0aGlzLl9kb20uYXBwZW5kQ2hpbGQobyxpKSxpfSx0LnByb3RvdHlwZS5fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gbi5fZG9tLnNldEF0dHJpYnV0ZShlLHIsdFtyXSl9KSxlfSx0LnByb3RvdHlwZS5fcGFyc2VTZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU/Im5hbWUiOiJwcm9wZXJ0eSI7cmV0dXJuIGUrJz0iJyt0W2VdKyciJ30sdC5wcm90b3R5cGUuX2NvbnRhaW5zQXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBuLl9kb20uZ2V0QXR0cmlidXRlKGUscik9PT10W3JdfSl9LHR9KCksYj1uZXcgaS5wKCJUUkFOU0lUSU9OX0lEIiksXz1be3Byb3ZpZGU6aS5kLHVzZUZhY3Rvcnk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe24uZ2V0KGkuZSkuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3ZhciBuPXMoKTtBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkobi5xdWVyeVNlbGVjdG9yQWxsKGUsInN0eWxlW25nLXRyYW5zaXRpb25dIikpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbi5nZXRBdHRyaWJ1dGUoZSwibmctdHJhbnNpdGlvbiIpPT09dH0pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVtb3ZlKHQpfSl9KX19LGRlcHM6W2IsbSxpLnFdLG11bHRpOiEwfV0sdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuaW5pdD1mdW5jdGlvbigpe09iamVjdChpLkFhKShuZXcgdCl9LHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe2kuUmEuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciByPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiByfSxpLlJhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsVGVzdGFiaWxpdGllcygpfSxpLlJhLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxSb290RWxlbWVudHMoKX0saS5SYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KGkuUmEuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLGkuUmEuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1pLlJhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxyPSExLG89ZnVuY3Rpb24oZSl7cj1yfHxlLDA9PS0tbiYmdChyKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShvKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgcj10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1yP3I6bj9zKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLmdldEhvc3QoZSksITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRUaXRsZSh0aGlzLl9kb2MpfSx0LnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0KXtzKCkuc2V0VGl0bGUodGhpcy5fZG9jLHQpfSx0fSgpO2Z1bmN0aW9uIEModCxlKXsidW5kZWZpbmVkIiE9dHlwZW9mIENPTVBJTEVEJiZDT01QSUxFRHx8KChpLlJhLm5nPWkuUmEubmd8fHt9KVt0XT1lKX12YXIgRT17QXBwbGljYXRpb25SZWY6aS5nLE5nWm9uZTppLnl9LE89InByb2JlIixTPSJjb3JlVG9rZW5zIjtmdW5jdGlvbiBrKHQpe3JldHVybiBPYmplY3QoaS5XKSh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiBDKE8sayksQyhTLE9iamVjdChvLmEpKHt9LEUsKHR8fFtdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlLm5hbWVdPWUudG9rZW4sdH0se30pKSksZnVuY3Rpb24oKXtyZXR1cm4ga319dmFyIFA9bmV3IGkucCgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl96b25lPWUsdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQubWFuYWdlcj1ufSksdGhpcy5fcGx1Z2lucz10LnNsaWNlKCkucmV2ZXJzZSgpfXJldHVybiB0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sdC5wcm90b3R5cGUuX2ZpbmRQbHVnaW5Gb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Zm9yKHZhciBuPXRoaXMuX3BsdWdpbnMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuc3VwcG9ydHModCkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldCh0LGkpLGl9dGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgIit0KX0sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAiK3IrIiBmb3IgZXZlbnQgIitlKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxuKX0sdH0oKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPW5ldyBTZXQ7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0eWxlc1NldC5oYXModCl8fChlLl9zdHlsZXNTZXQuYWRkKHQpLG4uYWRkKHQpKX0pLHRoaXMub25TdHlsZXNBZGRlZChuKX0sdC5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldEFsbFN0eWxlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9LHR9KCksTT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9zdE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5oZWFkKSxufXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLl9hZGRTdHlsZXNUb0hvc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnRleHRDb250ZW50PXQsbi5fc3R5bGVOb2Rlcy5hZGQoZS5hcHBlbmRDaGlsZChyKSl9KX0sZS5wcm90b3R5cGUuYWRkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LHQpLHRoaXMuX2hvc3ROb2Rlcy5hZGQodCl9LGUucHJvdG90eXBlLnJlbW92ZUhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5faG9zdE5vZGVzLmRlbGV0ZSh0KX0sZS5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl9hZGRTdHlsZXNUb0hvc3QodCxuKX0pfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0eWxlTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcygpLnJlbW92ZSh0KX0pfSxlfShJKSxOPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxSPS8lQ09NUCUvZyxEPSJfbmdob3N0LSVDT01QJSIsRj0iX25nY29udGVudC0lQ09NUCUiO2Z1bmN0aW9uIEwodCxlLG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO0FycmF5LmlzQXJyYXkoaSk/TCh0LGksbik6KGk9aS5yZXBsYWNlKFIsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBWKHQpe3JldHVybiBmdW5jdGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fXZhciBCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IHoodCl9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIGkuUS5FbXVsYXRlZDp2YXIgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgcSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG47Y2FzZSBpLlEuTmF0aXZlOnJldHVybiBuZXcgRyh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsdCxlKTtkZWZhdWx0OmlmKCF0aGlzLnJlbmRlcmVyQnlDb21wSWQuaGFzKGUuaWQpKXt2YXIgcj1MKGUuaWQsZS5zdHlsZXMsW10pO3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMociksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLHRoaXMuZGVmYXVsdFJlbmRlcmVyKX1yZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXJ9fSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSx0fSgpLHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTltlXSx0KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QmJnQuaW5zZXJ0QmVmb3JlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzZWxlY3RvciAiJyt0KyciIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzJyk7cmV0dXJuIGUudGV4dENvbnRlbnQ9IiIsZX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKHIpe2U9cisiOiIrZTt2YXIgaT1OW3JdO2k/dC5zZXRBdHRyaWJ1dGVOUyhpLGUsbik6dC5zZXRBdHRyaWJ1dGUoZSxuKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7aWYobil7dmFyIHI9TltuXTtyP3QucmVtb3ZlQXR0cmlidXRlTlMocixlKTp0LnJlbW92ZUF0dHJpYnV0ZShuKyI6IitlKX1lbHNlIHQucmVtb3ZlQXR0cmlidXRlKGUpfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ImaS5GLkRhc2hDYXNlP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxuLHImaS5GLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1ufSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7biZpLkYuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7SChlLCJwcm9wZXJ0eSIpLHRbZV09bn0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0Lm5vZGVWYWx1ZT1lfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiBIKGUsImxpc3RlbmVyIiksInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLFYobikpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLFYobikpfSx0fSgpLFU9IkAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gSCh0LGUpe2lmKHQuY2hhckNvZGVBdCgwKT09PVUpdGhyb3cgbmV3IEVycm9yKCJGb3VuZCB0aGUgc3ludGhldGljICIrZSsiICIrdCsnLiBQbGVhc2UgaW5jbHVkZSBlaXRoZXIgIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiBvciAiTm9vcEFuaW1hdGlvbnNNb2R1bGUiIGluIHlvdXIgYXBwbGljYXRpb24uJyl9dmFyIFEscT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztpLmNvbXBvbmVudD1yO3ZhciBvPUwoci5pZCxyLnN0eWxlcyxbXSk7cmV0dXJuIG4uYWRkU3R5bGVzKG8pLGkuY29udGVudEF0dHI9Ri5yZXBsYWNlKFIsci5pZCksaS5ob3N0QXR0cj1ELnJlcGxhY2UoUixyLmlkKSxpfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLmFwcGx5VG9Ib3N0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsZSx0aGlzLmhvc3RBdHRyLCIiKX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLG4pe3ZhciByPXQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLGUsbik7cmV0dXJuIHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMscix0aGlzLmNvbnRlbnRBdHRyLCIiKSxyfSxlfSh6KSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7by5zaGFyZWRTdHlsZXNIb3N0PW4sby5ob3N0RWw9cixvLmNvbXBvbmVudD1pLG8uc2hhZG93Um9vdD1yLmNyZWF0ZVNoYWRvd1Jvb3QoKSxvLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdChvLnNoYWRvd1Jvb3QpO2Zvcih2YXIgYT1MKGkuaWQsaS5zdHlsZXMsW10pLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsLnRleHRDb250ZW50PWFbc10sby5zaGFkb3dSb290LmFwcGVuZENoaWxkKGwpfXJldHVybiBvfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLm5vZGVPclNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzLmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZENoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHQucHJvdG90eXBlLmluc2VydEJlZm9yZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdCh0LnByb3RvdHlwZS5wYXJlbnROb2RlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSkpKX0sZX0oeiksWT0idW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmUuX19zeW1ib2xfX3x8ZnVuY3Rpb24odCl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrdH0sVz1ZKCJhZGRFdmVudExpc3RlbmVyIiksWj1ZKCJyZW1vdmVFdmVudExpc3RlbmVyIiksSz17fSxYPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiOyJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZVtZKCJCTEFDS19MSVNURURfRVZFTlRTIildJiYoUT17fSk7dmFyICQ9ZnVuY3Rpb24odCl7cmV0dXJuISFRJiZRLmhhc093blByb3BlcnR5KHQpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPUtbdC50eXBlXTtpZihlKXt2YXIgbj10aGlzW2VdO2lmKG4pe3ZhciByPVt0XTtpZigxPT09bi5sZW5ndGgpcmV0dXJuKGE9blswXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLHIpOmEuaGFuZGxlci5hcHBseSh0aGlzLHIpO2Zvcih2YXIgaT1uLnNsaWNlKCksbz0wO288aS5sZW5ndGgmJiEwIT09dFtYXTtvKyspe3ZhciBhOyhhPWlbb10pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxyKTphLmhhbmRsZXIuYXBwbHkodGhpcyxyKX19fX0sdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ubmdab25lPW4saSYmT2JqZWN0KHIucikoaSl8fG8ucGF0Y2hFdmVudCgpLG99cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUucGF0Y2hFdmVudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRXZlbnQmJkV2ZW50JiZFdmVudC5wcm90b3R5cGUmJiFFdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKXt2YXIgdD1FdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPUV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMmJih0aGlzW1hdPSEwKSx0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxvPW47aWYoIXRbV118fGkueS5pc0luQW5ndWxhclpvbmUoKSYmISQoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsbywhMSk7ZWxzZXt2YXIgYT1LW2VdO2F8fChhPUtbZV09WSgiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIHM9dFthXSxsPXMmJnMubGVuZ3RoPjA7c3x8KHM9dFthXT1bXSk7dmFyIHU9JChlKT9ab25lLnJvb3Q6Wm9uZS5jdXJyZW50O2lmKDA9PT1zLmxlbmd0aClzLnB1c2goe3pvbmU6dSxoYW5kbGVyOm99KTtlbHNle2Zvcih2YXIgYz0hMSxmPTA7ZjxzLmxlbmd0aDtmKyspaWYoc1tmXS5oYW5kbGVyPT09byl7Yz0hMDticmVha31jfHxzLnB1c2goe3pvbmU6dSxoYW5kbGVyOm99KX1sfHx0W1ddKGUsSiwhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsbyl9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10W1pdO2lmKCFyKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7dmFyIGk9S1tlXSxvPWkmJnRbaV07aWYoIW8pcmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0LFtlLG4sITFdKTtmb3IodmFyIGE9ITEscz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uaGFuZGxlcj09PW4pe2E9ITAsby5zcGxpY2UocywxKTticmVha31hPzA9PT1vLmxlbmd0aCYmci5hcHBseSh0LFtlLEosITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KGopLGV0PXtwYW46ITAscGFuc3RhcnQ6ITAscGFubW92ZTohMCxwYW5lbmQ6ITAscGFuY2FuY2VsOiEwLHBhbmxlZnQ6ITAscGFucmlnaHQ6ITAscGFudXA6ITAscGFuZG93bjohMCxwaW5jaDohMCxwaW5jaHN0YXJ0OiEwLHBpbmNobW92ZTohMCxwaW5jaGVuZDohMCxwaW5jaGNhbmNlbDohMCxwaW5jaGluOiEwLHBpbmNob3V0OiEwLHByZXNzOiEwLHByZXNzdXA6ITAscm90YXRlOiEwLHJvdGF0ZXN0YXJ0OiEwLHJvdGF0ZW1vdmU6ITAscm90YXRlZW5kOiEwLHJvdGF0ZWNhbmNlbDohMCxzd2lwZTohMCxzd2lwZWxlZnQ6ITAsc3dpcGVyaWdodDohMCxzd2lwZXVwOiEwLHN3aXBlZG93bjohMCx0YXA6ITB9LG50PW5ldyBpLnAoIkhhbW1lckdlc3R1cmVDb25maWciKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fY29uZmlnPW4saS5jb25zb2xlPXIsaX1yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFldC5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpJiYhdGhpcy5pc0N1c3RvbUV2ZW50KHQpfHwhd2luZG93LkhhbW1lciYmKHRoaXMuY29uc29sZS53YXJuKCJIYW1tZXIuanMgaXMgbm90IGxvYWRlZCwgY2FuIG5vdCBiaW5kICciK3QrIicgZXZlbnQuIiksMSkpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9dGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3ZhciBvPXIuX2NvbmZpZy5idWlsZEhhbW1lcih0KSxhPWZ1bmN0aW9uKHQpe2kucnVuR3VhcmRlZChmdW5jdGlvbigpe24odCl9KX07cmV0dXJuIG8ub24oZSxhKSxmdW5jdGlvbigpe3JldHVybiBvLm9mZihlLGEpfX0pfSxlLnByb3RvdHlwZS5pc0N1c3RvbUV2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9LGV9KGopLG90PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLGF0PXthbHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5fSxjb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmN0cmxLZXl9LG1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWV0YUtleX0sc2hpZnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hpZnRLZXl9fSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9ZS5wYXJzZUV2ZW50TmFtZSh0KX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5wYXJzZUV2ZW50TmFtZShuKSxvPWUuZXZlbnRDYWxsYmFjayhpLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzKCkub25BbmRDYW5jZWwodCxpLmRvbUV2ZW50TmFtZSxvKX0pfSxlLnBhcnNlRXZlbnROYW1lPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9bi5zaGlmdCgpO2lmKDA9PT1uLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7dmFyIGk9ZS5fbm9ybWFsaXplS2V5KG4ucG9wKCkpLG89IiI7aWYob3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksbys9dCsiLiIpfSksbys9aSwwIT1uLmxlbmd0aHx8MD09PWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXt9O3JldHVybiBhLmRvbUV2ZW50TmFtZT1yLGEuZnVsbEtleT1vLGF9LGUuZ2V0RXZlbnRGdWxsS2V5PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49cygpLmdldEV2ZW50S2V5KHQpO3JldHVybiIgIj09PShuPW4udG9Mb3dlckNhc2UoKSk/bj0ic3BhY2UiOiIuIj09PW4mJihuPSJkb3QiKSxvdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPW4mJigwLGF0W3JdKSh0KSYmKGUrPXIrIi4iKX0pLGUrPW59LGUuZXZlbnRDYWxsYmFjaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe2UuZ2V0RXZlbnRGdWxsS2V5KGkpPT09dCYmci5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7cmV0dXJuIG4oaSl9KX19LGUuX25vcm1hbGl6ZUtleT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fSxlfShqKSxsdD1mdW5jdGlvbigpe30sdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG59cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiBudWxsO3N3aXRjaCh0KXtjYXNlIGkuSC5OT05FOnJldHVybiBlO2Nhc2UgaS5ILkhUTUw6cmV0dXJuIGUgaW5zdGFuY2VvZiBmdD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiSFRNTCIpLE9iamVjdChpLkVhKSh0aGlzLl9kb2MsU3RyaW5nKGUpKSk7Y2FzZSBpLkguU1RZTEU6cmV0dXJuIGUgaW5zdGFuY2VvZiBodD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU3R5bGUiKSxPYmplY3QoaS5GYSkoZSkpO2Nhc2UgaS5ILlNDUklQVDppZihlIGluc3RhbmNlb2YgcHQpcmV0dXJuIGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlNjcmlwdCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2UgaS5ILlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIG10fHxlIGluc3RhbmNlb2YgZHQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLE9iamVjdChpLkdhKShTdHJpbmcoZSkpKTtjYXNlIGkuSC5SRVNPVVJDRV9VUkw6aWYoZSBpbnN0YW5jZW9mIG10KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJSZXNvdXJjZVVSTCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9fSxlLnByb3RvdHlwZS5jaGVja05vdFNhZmVWYWx1ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBjdCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVpcmVkIGEgc2FmZSAiK2UrIiwgZ290IGEgIit0LmdldFR5cGVOYW1lKCkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFVybD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGR0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtdCh0KX0sZX0obHQpLGN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogIit0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykifSx0fSgpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIkhUTUwifSxlfShjdCksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU3R5bGUifSxlfShjdCkscHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU2NyaXB0In0sZX0oY3QpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlVSTCJ9LGV9KGN0KSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJSZXNvdXJjZVVSTCJ9LGV9KGN0KSx5dD1be3Byb3ZpZGU6aS5BLHVzZVZhbHVlOnIuc30se3Byb3ZpZGU6aS5CLHVzZVZhbHVlOmZ1bmN0aW9uKCl7cC5tYWtlQ3VycmVudCgpLHcuaW5pdCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6ci5wLHVzZUNsYXNzOmcsZGVwczpbbV19LHtwcm92aWRlOm0sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZGVwczpbXX1dLGd0PU9iamVjdChpLlMpKGkuWiwiYnJvd3NlciIseXQpO2Z1bmN0aW9uIHZ0KCl7cmV0dXJuIG5ldyBpLm19dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXJldHVybiB0LndpdGhTZXJ2ZXJUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6aS5jLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOmIsdXNlRXhpc3Rpbmc6aS5jfSxfXX19LHR9KCk7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd30sWm44RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigicHNXMCIpLGk9bigibUNoRiIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksT2JqZWN0KHIuYSkoaS5hLHQpfX0sYjdtVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIHIuYihlLHQpLGV9KEVycm9yKX0sY3JuZDpmdW5jdGlvbih0LGUsbil7dmFyIHI9eyIuL3NlY29uZC1sZXZlbC1jb21wb25lbnRzL3NlY29uZC1sZXZlbC1jb21wb25lbnRzLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiM1lDUCIsMF19O2Z1bmN0aW9uIGkodCl7dmFyIGU9clt0XTtyZXR1cm4gZT9uLmUoZVsxXSkudGhlbihmdW5jdGlvbigpe3JldHVybiBuKGVbMF0pfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICInK3QrJyIuJyk7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfSl9aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLmlkPSJjcm5kIix0LmV4cG9ydHM9aX0sZWloczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9e2U6e319fSxpTHhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj0hMSxpPXtQcm9taXNlOnZvaWQgMCxzZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyh0KXtyPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIHJ9fX0saXNieTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGh9fSxtQ2hGOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxtclNHOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtmdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1yKHQsZSksdC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfXZhciBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIGU9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdH07ZnVuY3Rpb24gYSh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gdDt2YXIgcixpLG89bi5jYWxsKHQpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PWV8fGUtLSA+MCkmJiEocj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiBsKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQ9dC5jb25jYXQocyhhcmd1bWVudHNbZV0pKTtyZXR1cm4gdH19LG5rWTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zY2hlZHVsZX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxwMGliOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJua1k3Iiksbz1uKCJabjhEIiksYT1uKCJJVVRiIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1udWxsLGw9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gT2JqZWN0KGkuYSkobCk/KHM9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIGwmJihuPXQucG9wKCkpLG51bGw9PT1zJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIHIuYT90WzBdOk9iamVjdChvLmEpKG4pKE9iamVjdChhLmEpKHQscykpfX0scE1uUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigiWllDaSIpLG89ci5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5rYigwLFsodCgpKCksci5RYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxyLlBhKDEsMjEyOTkyLG51bGwsMCxpLm4sW2kuYixyLlAsci5qLFs4LG51bGxdLHIuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIHM9ci5NYSgibmctY29tcG9uZW50IixpLnIsZnVuY3Rpb24odCl7cmV0dXJuIHIua2IoMCxbKHQoKSgpLHIuUWEoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLGEsbykpLHIuUGEoMSw0OTE1MixudWxsLDAsaS5yLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKX0scHNXMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIHI9bigibXJTRyIpLGk9bigiem90bSIpLG89bigiTUdCUyIpLGE9bigiNjdZLyIpLHM9bigiMC91USIpO2Z1bmN0aW9uIGwodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHIpe3JldHVybiByLnBpcGUobChmdW5jdGlvbihuLHIpe3JldHVybiBPYmplY3Qocy5hKSh0KG4scikpLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCxpKXtyZXR1cm4gZShuLHQscixpKX0pKX0sbikpfTooIm51bWJlciI9PXR5cGVvZiBlJiYobj1lKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyB1KHQsbikpfSl9dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx0aGlzLnByb2plY3Q9dCx0aGlzLmNvbmN1cnJlbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgYyh0LHRoaXMucHJvamVjdCx0aGlzLmNvbmN1cnJlbnQpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PXImJihyPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucHJvamVjdD1uLGkuY29uY3VycmVudD1yLGkuaGFzQ29tcGxldGVkPSExLGkuYnVmZmVyPVtdLGkuYWN0aXZlPTAsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD90aGlzLl90cnlOZXh0KHQpOnRoaXMuYnVmZmVyLnB1c2godCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5hY3RpdmUrKyx0aGlzLl9pbm5lclN1YihlLHQsbil9LGUucHJvdG90eXBlLl9pbm5lclN1Yj1mdW5jdGlvbih0LGUsbil7dGhpcy5hZGQoT2JqZWN0KGkuYSkodGhpcyx0LGUsbikpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmhhc0NvbXBsZXRlZD0hMCwwPT09dGhpcy5hY3RpdmUmJjA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idWZmZXI7dGhpcy5yZW1vdmUodCksdGhpcy5hY3RpdmUtLSxlLmxlbmd0aD4wP3RoaXMuX25leHQoZS5zaGlmdCgpKTowPT09dGhpcy5hY3RpdmUmJnRoaXMuaGFzQ29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG8uYSl9LHB1Z1Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJpc2J5IiksaT1uKCJNY1NvIiksbz1uKCIyQmRqIiksYT1uKCJFaG1rIikscz1uKCJlaWhzIiksbD1uKCJtclNHIiksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciByPXQuY2FsbCh0aGlzLG4/bi5sZW5ndGgrIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuICAiK24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMSsiKSAiK3QudG9TdHJpbmcoKX0pLmpvaW4oIlxuICAiKToiIil8fHRoaXM7cmV0dXJuIHIuZXJyb3JzPW4sci5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YocixlLnByb3RvdHlwZSkscn1yZXR1cm4gbC5iKGUsdCksZX0oRXJyb3IpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGwsdCYmKHRoaXMuX3Vuc3Vic2NyaWJlPXQpfXZhciBlO3JldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0LGU9ITE7aWYoIXRoaXMuY2xvc2VkKXt2YXIgbj10aGlzLl9wYXJlbnQsbD10aGlzLl9wYXJlbnRzLGM9dGhpcy5fdW5zdWJzY3JpYmUsaD10aGlzLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGw7Zm9yKHZhciBwPS0xLGQ9bD9sLmxlbmd0aDowO247KW4ucmVtb3ZlKHRoaXMpLG49KytwPGQmJmxbcF18fG51bGw7aWYoT2JqZWN0KG8uYSkoYykmJk9iamVjdChhLmEpKGMpLmNhbGwodGhpcyk9PT1zLmEmJihlPSEwLHQ9dHx8KHMuYS5lIGluc3RhbmNlb2YgdT9mKHMuYS5lLmVycm9ycyk6W3MuYS5lXSkpLE9iamVjdChyLmEpKGgpKWZvcihwPS0xLGQ9aC5sZW5ndGg7KytwPGQ7KXt2YXIgbT1oW3BdO2lmKE9iamVjdChpLmEpKG0pJiZPYmplY3QoYS5hKShtLnVuc3Vic2NyaWJlKS5jYWxsKG0pPT09cy5hKXtlPSEwLHQ9dHx8W107dmFyIHk9cy5hLmU7eSBpbnN0YW5jZW9mIHU/dD10LmNvbmNhdChmKHkuZXJyb3JzKSk6dC5wdXNoKHkpfX1pZihlKXRocm93IG5ldyB1KHQpfX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKCFlfHxlPT09dC5FTVBUWSlyZXR1cm4gdC5FTVBUWTtpZihlPT09dGhpcylyZXR1cm4gdGhpczt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobi5jbG9zZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLnVuc3Vic2NyaWJlKXJldHVybiBuO2lmKHRoaXMuY2xvc2VkKXJldHVybiBuLnVuc3Vic2NyaWJlKCksbjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5fYWRkUGFyZW50KXt2YXIgcj1uOyhuPW5ldyB0KS5fc3Vic2NyaXB0aW9ucz1bcl19YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0ZWFyZG93biAiK2UrIiBhZGRlZCB0byBTdWJzY3JpcHRpb24uIil9cmV0dXJuKHRoaXMuX3N1YnNjcmlwdGlvbnN8fCh0aGlzLl9zdWJzY3JpcHRpb25zPVtdKSkucHVzaChuKSxuLl9hZGRQYXJlbnQodGhpcyksbn0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKX19LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyZW50LG49dGhpcy5fcGFyZW50cztlJiZlIT09dD9uPy0xPT09bi5pbmRleE9mKHQpJiZuLnB1c2godCk6dGhpcy5fcGFyZW50cz1bdF06dGhpcy5fcGFyZW50PXR9LHQuRU1QVFk9KChlPW5ldyB0KS5jbG9zZWQ9ITAsZSksdH0oKTtmdW5jdGlvbiBmKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlIGluc3RhbmNlb2YgdT9lLmVycm9yczplKX0sW10pfX0sdDlmWjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigibXJTRyIpLGk9bigiRkZPbyIpLG89bigiYjdtVyIpLGE9bigiRzVKMSIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoYS5iKSgpOmUubGlmdChuZXcgbCh0KSl9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBvLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLnRvdGFsKSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLmNvdW50PTAscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50b3RhbCxuPSsrdGhpcy5jb3VudDtuPD1lJiYodGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLG49PT1lJiYodGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKSkpfSxlfShpLmEpfSx1NjdEOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJFbjgrIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXRbci5hXSgpOzspe3ZhciBpPW4ubmV4dCgpO2lmKGkuZG9uZSl7ZS5jb21wbGV0ZSgpO2JyZWFrfWlmKGUubmV4dChpLnZhbHVlKSxlLmNsb3NlZClicmVha31yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5yZXR1cm4mJmUuYWRkKGZ1bmN0aW9uKCl7bi5yZXR1cm4mJm4ucmV0dXJuKCl9KSxlfX19LHVNYU86ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc3ViamVjdD1lLHIuc3Vic2NyaWJlcj1uLHIuY2xvc2VkPSExLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDt2YXIgdD10aGlzLnN1YmplY3QsZT10Lm9ic2VydmVycztpZih0aGlzLnN1YmplY3Q9bnVsbCxlJiYwIT09ZS5sZW5ndGgmJiF0LmlzU3RvcHBlZCYmIXQuY2xvc2VkKXt2YXIgbj1lLmluZGV4T2YodGhpcy5zdWJzY3JpYmVyKTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fX0sZX0obigicHVnVCIpLmEpfSx4TXlFOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIiksbz1uKCIrdW1LIiksYT1uKCIyQmRqIik7ZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLmxpZnQobmV3IGwodCxlLG4pKX19dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5leHRPck9ic2VydmVyPXQsdGhpcy5lcnJvcj1lLHRoaXMuY29tcGxldGU9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdSh0LHRoaXMubmV4dE9yT2JzZXJ2ZXIsdGhpcy5lcnJvcix0aGlzLmNvbXBsZXRlKSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBzPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBzLl90YXBOZXh0PW8uYSxzLl90YXBFcnJvcj1vLmEscy5fdGFwQ29tcGxldGU9by5hLHMuX3RhcEVycm9yPXJ8fG8uYSxzLl90YXBDb21wbGV0ZT1pfHxvLmEsT2JqZWN0KGEuYSkobik/KHMuX2NvbnRleHQ9cyxzLl90YXBOZXh0PW4pOm4mJihzLl9jb250ZXh0PW4scy5fdGFwTmV4dD1uLm5leHR8fG8uYSxzLl90YXBFcnJvcj1uLmVycm9yfHxvLmEscy5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8by5hKSxzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwRXJyb3IuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShpLmEpfSx4VGxhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSJ9LHkzQnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiK3VtSyIpO2Z1bmN0aW9uIGkoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIG8odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD8xPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSh0KX0sZSl9OnIuYX19LHpVbmI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLnIoZSk7dmFyIHIsaSxvPW4oIkNjbkciKSxhPWZ1bmN0aW9uKCl7fSxzPW4oIklwMFIiKSxsPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCYmSW50bC52OEJyZWFrSXRlcmF0b3IsdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcGxhdGZvcm1JZD10LHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/T2JqZWN0KHMucSkodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhbCkmJiJ1bmRlZmluZWQiIT10eXBlb2YgQ1NTJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cuTVNTdHJlYW0sdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH1yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoby5BLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gYygpe2lmKG51bGw9PXImJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcj0hMH19KSl9ZmluYWxseXtyPXJ8fCExfXJldHVybiByfXZhciBmPVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIGgoKXtpZihpKXJldHVybiBpO2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gaT1uZXcgU2V0KGYpO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGk9bmV3IFNldChmLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoInR5cGUiLGUpLHQudHlwZT09PWV9KSl9dmFyIHA9ZnVuY3Rpb24oKXt9LGQ9bigibXJTRyIpLG09bigibmtZNyIpLHk9bigiaXNieSIpLGc9bigiTUdCUyIpLHY9bigiem90bSIpLGI9bigiSVVUYiIpLF89e30sdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB4KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfSx0fSgpLHg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnJlc3VsdFNlbGVjdG9yPW4sci5hY3RpdmU9MCxyLnZhbHVlcz1bXSxyLm9ic2VydmFibGVzPVtdLHJ9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2goXyksdGhpcy5vYnNlcnZhYmxlcy5wdXNoKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9ic2VydmFibGVzLGU9dC5sZW5ndGg7aWYoMD09PWUpdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO2Vsc2V7dGhpcy5hY3RpdmU9ZSx0aGlzLnRvUmVzcG9uZD1lO2Zvcih2YXIgbj0wO248ZTtuKyspe3ZhciByPXRbbl07dGhpcy5hZGQoT2JqZWN0KHYuYSkodGhpcyxyLHIsbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/b1tuXT09PV8/LS10aGlzLnRvUmVzcG9uZDp0aGlzLnRvUmVzcG9uZDowO29bbl09ZSwwPT09YSYmKHRoaXMucmVzdWx0U2VsZWN0b3I/dGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3Iobyk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KG8uc2xpY2UoKSkpfSxlLnByb3RvdHlwZS5fdHJ5UmVzdWx0U2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5yZXN1bHRTZWxlY3Rvci5hcHBseSh0aGlzLHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShnLmEpLEM9bigiSzlJYSIpLEU9bigiNmJsRiIpLE89bigiMkJkaiIpLFM9bigiNjdZLyIpO2Z1bmN0aW9uIGsodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IFQodCkpfX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5ub3RpZmllcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IFAodCkscj1PYmplY3Qodi5hKShuLHRoaXMubm90aWZpZXIpO3JldHVybiByJiYhci5jbG9zZWQ/KG4uYWRkKHIpLGUuc3Vic2NyaWJlKG4pKTpufSx0fSgpLFA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKCl7fSxlfShnLmEpLEE9bigiUFU4TCIpLGo9bigiRzVKMSIpLEk9bigiRi9YTCIpLE09bigiMC91USIpLE49bigiVHhqZyIpO2Z1bmN0aW9uIFIoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbdC5sZW5ndGgtMV07T2JqZWN0KG0uYSkobik/dC5wb3AoKTpuPW51bGw7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAxPT09dC5sZW5ndGh8fDI9PT10Lmxlbmd0aCYmT2JqZWN0KG0uYSkodFsxXSk/T2JqZWN0KE0uYSkodFswXSk6T2JqZWN0KE4uYSkoKShJLmEuYXBwbHkodm9pZCAwLHQpKX0oMSE9PXJ8fG4/cj4wP09iamVjdChiLmEpKHQsbik6T2JqZWN0KGouYikobik6T2JqZWN0KEEuYSkodFswXSksZSl9fWZ1bmN0aW9uIEQodCl7cmV0dXJuIG51bGwhPXQmJiIiK3QhPSJmYWxzZSJ9ZnVuY3Rpb24gRih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxmdW5jdGlvbih0KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh0KSkmJiFpc05hTihOdW1iZXIodCkpfSh0KT9OdW1iZXIodCk6ZX1mdW5jdGlvbiBMKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfWZ1bmN0aW9uIFYodCl7cmV0dXJuIG51bGw9PXQ/IiI6InN0cmluZyI9PXR5cGVvZiB0P3Q6dCsicHgifXZhciBCLHo9ZnVuY3Rpb24oKXt9LFU9bmV3IFNldCxIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOlF9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZighVS5oYXModCkpdHJ5e0J8fCgoQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQikpLEIuc2hlZXQmJihCLnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSxVLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKHUpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gUSh0KXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe319fXZhciBxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMubWVkaWFNYXRjaGVyPXQsdGhpcy56b25lPWUsdGhpcy5fcXVlcmllcz1uZXcgTWFwLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0PW5ldyBDLmF9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmlzTWF0Y2hlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBHKEwodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLHI9bnVsbDtyZXR1cm4gT2JqZWN0KG0uYSkodFt0Lmxlbmd0aC0xXSkmJihyPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJk9iamVjdCh5LmEpKHRbMF0pJiYodD10WzBdKSxPYmplY3QoYi5hKSh0LHIpLmxpZnQobmV3IHcobikpfShHKEwodCkpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fcmVnaXN0ZXJRdWVyeSh0KS5vYnNlcnZhYmxlfSkpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lm1hdGNoZXN9KX19KSl9LHQucHJvdG90eXBlLl9yZWdpc3RlclF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5fcXVlcmllcy5oYXModCkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KHQpO3ZhciBuPXRoaXMubWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEodCkscj17b2JzZXJ2YWJsZTpmdW5jdGlvbiB0KGUsbixyKXtyZXR1cm4gcj90KGUsbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHkuYSkodCk/ci5hcHBseSh2b2lkIDAsdCk6cih0KX0pKTpuZXcgRS5hKGZ1bmN0aW9uKHQpe3ZhciByLGk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHQubmV4dCgxPT09ZS5sZW5ndGg/ZVswXTplKX07dHJ5e3I9ZShpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0LmVycm9yKGUpfWlmKE9iamVjdChPLmEpKG4pKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuKGkscil9fSl9KGZ1bmN0aW9uKHQpe24uYWRkTGlzdGVuZXIoZnVuY3Rpb24obil7cmV0dXJuIGUuem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdChuKX0pfSl9LGZ1bmN0aW9uKHQpe24ucmVtb3ZlTGlzdGVuZXIoZnVuY3Rpb24obil7cmV0dXJuIGUuem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdChuKX0pfSl9KS5waXBlKGsodGhpcy5fZGVzdHJveVN1YmplY3QpLFIobiksT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5tYXRjaGVzfX0pKSxtcWw6bn07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KHQscikscn0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoSCksT2JqZWN0KG8uWCkoby55KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIEcodCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCIsIil9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSl9dmFyIFk9e1hTbWFsbDoiKG1heC13aWR0aDogNTk5cHgpIixTbWFsbDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLE1lZGl1bToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIixMYXJnZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSIsWExhcmdlOiIobWluLXdpZHRoOiAxOTIwcHgpIixIYW5kc2V0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixXZWI6IihtaW4td2lkdGg6IDg0MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDEyODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsSGFuZHNldFBvcnRyYWl0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixUYWJsZXRQb3J0cmFpdDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixXZWJQb3J0cmFpdDoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsSGFuZHNldExhbmRzY2FwZToiKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFRhYmxldExhbmRzY2FwZToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYkxhbmRzY2FwZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIn0sVz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5icmVha3BvaW50T2JzZXJ2ZXI9dCx0aGlzLnNob3dTdWJtZW51PSExLHRoaXMub3BlbmVkU2lkZU5hdj0hMCx0aGlzLmlzSGFuZHNldCQ9dGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShZLkhhbmRzZXQpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2hlc30pKX1yZXR1cm4gdC5wcm90b3R5cGUub3BlblNpZGVOYXY9ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZFNpZGVOYXY9ITAhPT10aGlzLm9wZW5lZFNpZGVOYXZ9LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLFo9ZnVuY3Rpb24oKXt9LEs9IioiO2Z1bmN0aW9uIFgodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MixzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gJCh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBKKHQpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKHQpfXZhciB0dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9LHQucHJvdG90eXBlLnRyaWdnZXJNaWNyb3Rhc2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO0ooZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfSx0LnByb3RvdHlwZS5fb25TdGFydD1mdW5jdGlvbigpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX29uRmluaXNoKCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiAwfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDt2YXIgbj0wLHI9MCxpPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/SihmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysrcj09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK2k9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksbnQ9IiEiLHJ0PTI3O2Z1bmN0aW9uIGl0KHQsZSxuLHIpe3JldHVybiBPYmplY3QoTy5hKShuKSYmKHI9bixuPXZvaWQgMCkscj9pdCh0LGUsbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHkuYSkodCk/ci5hcHBseSh2b2lkIDAsdCk6cih0KX0pKTpuZXcgRS5hKGZ1bmN0aW9uKHIpeyFmdW5jdGlvbiB0KGUsbixyLGksbyl7dmFyIGE7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUV2ZW50TGlzdGVuZXJ9KGUpKXt2YXIgcz1lO2UuYWRkRXZlbnRMaXN0ZW5lcihuLHIsbyksYT1mdW5jdGlvbigpe3JldHVybiBzLnJlbW92ZUV2ZW50TGlzdGVuZXIobixyLG8pfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmImZ1bmN0aW9uIj09dHlwZW9mIHQub2ZmfShlKSl7dmFyIGw9ZTtlLm9uKG4sciksYT1mdW5jdGlvbigpe3JldHVybiBsLm9mZihuLHIpfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlTGlzdGVuZXJ9KGUpKXt2YXIgdT1lO2UuYWRkTGlzdGVuZXIobixyKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIHUucmVtb3ZlTGlzdGVuZXIobixyKX19ZWxzZXtpZighZXx8IWUubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7Zm9yKHZhciBjPTAsZj1lLmxlbmd0aDtjPGY7YysrKXQoZVtjXSxuLHIsaSxvKX1pLmFkZChhKX0odCxlLGZ1bmN0aW9uKHQpe3IubmV4dChhcmd1bWVudHMubGVuZ3RoPjE/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTp0KX0scixuKX0pfU9iamVjdDt2YXIgb3Q9bigicDBpYiIpLGF0PW4oInB1Z1QiKSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9ZSxyLndvcms9bixyLnBlbmRpbmc9ITEscn1yZXR1cm4gZC5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPXQ7dmFyIG49dGhpcy5pZCxyPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1uJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHIsbixlKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9ZSx0aGlzLmlkPXRoaXMuaWR8fHRoaXMucmVxdWVzdEFzeW5jSWQocix0aGlzLmlkLGUpLHRoaXN9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksbil9LGUucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj0wKSxudWxsIT09biYmdGhpcy5kZWxheT09PW4mJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO2NsZWFySW50ZXJ2YWwoZSl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO3ZhciBuPXRoaXMuX2V4ZWN1dGUodCxlKTtpZihuKXJldHVybiBuOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfSxlLnByb3RvdHlwZS5fZXhlY3V0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSExLHI9dm9pZCAwO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2godCl7bj0hMCxyPSEhdCYmdHx8bmV3IEVycm9yKHQpfWlmKG4pcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlkLGU9dGhpcy5zY2hlZHVsZXIsbj1lLmFjdGlvbnMscj1uLmluZGV4T2YodGhpcyk7dGhpcy53b3JrPW51bGwsdGhpcy5zdGF0ZT1udWxsLHRoaXMucGVuZGluZz0hMSx0aGlzLnNjaGVkdWxlcj1udWxsLC0xIT09ciYmbi5zcGxpY2UociwxKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsfSxlfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzKXx8dGhpc31yZXR1cm4gZC5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksdGhpc30sZX0oYXQuYSkpLGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4pe3ZvaWQgMD09PW4mJihuPXQubm93KSx0aGlzLlNjaGVkdWxlckFjdGlvbj1lLHRoaXMubm93PW59cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbmV3IHRoaXMuU2NoZWR1bGVyQWN0aW9uKHRoaXMsdCkuc2NoZWR1bGUobixlKX0sdC5ub3c9RGF0ZS5ub3c/RGF0ZS5ub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LHR9KCksdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLHIpe3ZvaWQgMD09PXImJihyPWx0Lm5vdyk7dmFyIGk9dC5jYWxsKHRoaXMsbixmdW5jdGlvbigpe3JldHVybiBlLmRlbGVnYXRlJiZlLmRlbGVnYXRlIT09aT9lLmRlbGVnYXRlLm5vdygpOnIoKX0pfHx0aGlzO3JldHVybiBpLmFjdGlvbnM9W10saS5hY3RpdmU9ITEsaS5zY2hlZHVsZWQ9dm9pZCAwLGl9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKG4scixpKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MCksZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PXRoaXM/ZS5kZWxlZ2F0ZS5zY2hlZHVsZShuLHIsaSk6dC5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLG4scixpKX0sZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3Rpb25zO2lmKHRoaXMuYWN0aXZlKWUucHVzaCh0KTtlbHNle3ZhciBuO3RoaXMuYWN0aXZlPSEwO2Rve2lmKG49dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUodD1lLnNoaWZ0KCkpO2lmKHRoaXMuYWN0aXZlPSExLG4pe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBufX19LGV9KGx0KSxjdD1uZXcgdXQoc3QpLGZ0PW4oIkVobWsiKSxodD1uKCJlaWhzIikscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZHVyYXRpb25TZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBkdCh0LHRoaXMuZHVyYXRpb25TZWxlY3RvcikpfSx0fSgpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5kdXJhdGlvblNlbGVjdG9yPW4sci5oYXNWYWx1ZT0hMSxyfXJldHVybiBkLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLnZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCwhdGhpcy50aHJvdHRsZWQpe3ZhciBlPU9iamVjdChmdC5hKSh0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKHQpO2lmKGU9PT1odC5hKXRoaXMuZGVzdGluYXRpb24uZXJyb3IoaHQuYS5lKTtlbHNle3ZhciBuPU9iamVjdCh2LmEpKHRoaXMsZSk7IW58fG4uY2xvc2VkP3RoaXMuY2xlYXJUaHJvdHRsZSgpOnRoaXMuYWRkKHRoaXMudGhyb3R0bGVkPW4pfX19LGUucHJvdG90eXBlLmNsZWFyVGhyb3R0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZhbHVlLGU9dGhpcy5oYXNWYWx1ZSxuPXRoaXMudGhyb3R0bGVkO24mJih0aGlzLnJlbW92ZShuKSx0aGlzLnRocm90dGxlZD1udWxsLG4udW5zdWJzY3JpYmUoKSksZSYmKHRoaXMudmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSl9LGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5jbGVhclRocm90dGxlKCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5jbGVhclRocm90dGxlKCl9LGV9KGcuYSk7ZnVuY3Rpb24gbXQodCl7cmV0dXJuIU9iamVjdCh5LmEpKHQpJiZ0LXBhcnNlRmxvYXQodCkrMT49MH1mdW5jdGlvbiB5dCh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIHI9LTE7cmV0dXJuIG10KGUpP3I9TnVtYmVyKGUpPDE/MTpOdW1iZXIoZSk6T2JqZWN0KG0uYSkoZSkmJihuPWUpLE9iamVjdChtLmEpKG4pfHwobj1jdCksbmV3IEUuYShmdW5jdGlvbihlKXt2YXIgaT1tdCh0KT90Oit0LW4ubm93KCk7cmV0dXJuIG4uc2NoZWR1bGUoZ3QsaSx7aW5kZXg6MCxwZXJpb2Q6cixzdWJzY3JpYmVyOmV9KX0pfWZ1bmN0aW9uIGd0KHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxyPXQuc3Vic2NyaWJlcjtpZihyLm5leHQoZSksIXIuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIHIuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fWZ1bmN0aW9uIHZ0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWN0KSxuPWZ1bmN0aW9uKCl7cmV0dXJuIHl0KHQsZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHB0KG4pKX07dmFyIG59dmFyIGJ0PW4oIlZuRC8iKSxfdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX3Njcm9sbGVkPW5ldyBDLmEsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2Nyb2xsZWQubmV4dCh0KX0pO3RoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQodCxuKX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KHQpO2UmJihlLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLnNjcm9sbGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIwKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/RS5hLmNyZWF0ZShmdW5jdGlvbihuKXtlLl9nbG9iYWxTdWJzY3JpcHRpb258fGUuX2FkZEdsb2JhbExpc3RlbmVyKCk7dmFyIHI9dD4wP2UuX3Njcm9sbGVkLnBpcGUodnQodCkpLnN1YnNjcmliZShuKTplLl9zY3JvbGxlZC5zdWJzY3JpYmUobik7cmV0dXJuIGUuX3Njcm9sbGVkQ291bnQrKyxmdW5jdGlvbigpe3IudW5zdWJzY3JpYmUoKSxlLl9zY3JvbGxlZENvdW50LS0sZS5fc2Nyb2xsZWRDb3VudHx8ZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpPYmplY3QoSS5hKSgpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LmRlcmVnaXN0ZXIobil9KSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5hbmNlc3RvclNjcm9sbGVkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModCk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZSkucGlwZShPYmplY3QoYnQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR8fG4uaW5kZXhPZih0KT4tMX0pKX0sdC5wcm90b3R5cGUuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24ocixpKXtlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGksdCkmJm4ucHVzaChpKX0pLG59LHQucHJvdG90eXBlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5uYXRpdmVFbGVtZW50LHI9dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihuPT1yKXJldHVybiEwfXdoaWxlKG49bi5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2FkZEdsb2JhbExpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGl0KHdpbmRvdy5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3Njcm9sbGVkLm5leHQoKX0pfSl9LHQucHJvdG90eXBlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoby55KSxPYmplY3Qoby5YKSh1KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fc2Nyb2xsPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZWxlbWVudFNjcm9sbGVkPW5ldyBDLmEsdGhpcy5fc2Nyb2xsTGlzdGVuZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX2VsZW1lbnRTY3JvbGxlZC5uZXh0KHQpfX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0Ll9zY3JvbGxMaXN0ZW5lcil9KSx0aGlzLl9zY3JvbGwucmVnaXN0ZXIodGhpcyl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fc2Nyb2xsTGlzdGVuZXImJnRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9zY3JvbGxMaXN0ZW5lcil9LHQucHJvdG90eXBlLmVsZW1lbnRTY3JvbGxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50U2Nyb2xsZWQuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmdldEVsZW1lbnRSZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZn0sdH0oKSx4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fY2hhbmdlPXQuaXNCcm93c2VyP2UucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KG90LmEpKGl0KHdpbmRvdywicmVzaXplIiksaXQod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOk9iamVjdChJLmEpKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLHI9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3ArcixyaWdodDp0LmxlZnQrbixoZWlnaHQ6cix3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZSh2dCh0KSk6dGhpcy5fY2hhbmdlfSx0LnByb3RvdHlwZS5fdXBkYXRlVmlld3BvcnRTaXplPWZ1bmN0aW9uKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6d2luZG93LmlubmVyV2lkdGgsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKSh1KSxPYmplY3Qoby5YKShvLnkpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksQ3Q9ZnVuY3Rpb24oKXt9LEV0PW4oInQ5ZloiKTtmdW5jdGlvbiBPdCgpe3Rocm93IEVycm9yKCJIb3N0IGFscmVhZHkgaGFzIGEgcG9ydGFsIGF0dGFjaGVkIil9dmFyIFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10JiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhIHBvcnRhbCB0byBhIG51bGwgUG9ydGFsT3V0bGV0Iil9KCksdC5oYXNBdHRhY2hlZCgpJiZPdCgpLHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbD09dD9mdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGRldGFjaCBhIHBvcnRhbCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhIGhvc3QiKX0oKToodGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBdHRhY2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2V0QXR0YWNoZWRIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fSx0fSgpLGt0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5jb21wb25lbnQ9ZSxpLnZpZXdDb250YWluZXJSZWY9bixpLmluamVjdG9yPXIsaX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlfShTdCksVHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnRlbXBsYXRlUmVmPWUsaS52aWV3Q29udGFpbmVyUmVmPW4saS5jb250ZXh0PXIsaX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm9yaWdpbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMuY29udGV4dCksdGhpcy5jb250ZXh0PW4sdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyl9LGV9KFN0KSxQdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExfXJldHVybiB0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdHx8ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTXVzdCBwcm92aWRlIGEgcG9ydGFsIHRvIGF0dGFjaCIpfSgpLHRoaXMuaGFzQXR0YWNoZWQoKSYmT3QoKSx0aGlzLl9pc0Rpc3Bvc2VkJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJUaGlzIFBvcnRhbE91dGxldCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9KCksdCBpbnN0YW5jZW9mIGt0Pyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgVHQ/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dm9pZCBmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhbiB1bmtub3duIFBvcnRhbCB0eXBlLiBCYXNlUG9ydGFsT3V0bGV0IGFjY2VwdHMgZWl0aGVyIGEgQ29tcG9uZW50UG9ydGFsIG9yIGEgVGVtcGxhdGVQb3J0YWwuIil9KCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9LHQucHJvdG90eXBlLnNldERpc3Bvc2VGbj1mdW5jdGlvbih0KXt0aGlzLl9kaXNwb3NlRm49dH0sdC5wcm90b3R5cGUuX2ludm9rZURpc3Bvc2VGbj1mdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX0sdH0oKSxBdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5vdXRsZXRFbGVtZW50PWUsby5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sby5fYXBwUmVmPXIsby5fZGVmYXVsdEluamVjdG9yPWksb31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhlPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQocix0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXN0cm95KCl9KSk6KGU9ci5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhlLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe24uX2FwcFJlZi5kZXRhY2hWaWV3KGUuaG9zdFZpZXcpLGUuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShlKSksZX0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmlld0NvbnRhaW5lclJlZixyPW4uY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0KTtyZXR1cm4gci5kZXRlY3RDaGFuZ2VzKCksci5yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHQpfSksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXt2YXIgdD1uLmluZGV4T2Yocik7LTEhPT10JiZuLnJlbW92ZSh0KX0pLHJ9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksbnVsbCE9dGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3V0bGV0RWxlbWVudCl9LGUucHJvdG90eXBlLl9nZXRDb21wb25lbnRSb290Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19LGV9KFB0KSxqdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSxyLl92aWV3Q29udGFpbmVyUmVmPW4sci5faXNJbml0aWFsaXplZD0hMSxyLmF0dGFjaGVkPW5ldyBvLm4scn1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBvcnRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH0sc2V0OmZ1bmN0aW9uKGUpeyghdGhpcy5oYXNBdHRhY2hlZCgpfHxlfHx0aGlzLl9pc0luaXRpYWxpemVkKSYmKHRoaXMuaGFzQXR0YWNoZWQoKSYmdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksZSYmdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dGFjaGVkUmVmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIG49bnVsbCE9ZS52aWV3Q29udGFpbmVyUmVmP2Uudmlld0NvbnRhaW5lclJlZjp0aGlzLl92aWV3Q29udGFpbmVyUmVmLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGUuY29tcG9uZW50KSxpPW4uY3JlYXRlQ29tcG9uZW50KHIsbi5sZW5ndGgsZS5pbmplY3Rvcnx8bi5wYXJlbnRJbmplY3Rvcik7cmV0dXJuIHQucHJvdG90eXBlLnNldERpc3Bvc2VGbi5jYWxsKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoZS50ZW1wbGF0ZVJlZixlLmNvbnRleHQpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cix0aGlzLmF0dGFjaGVkLmVtaXQocikscn0sZX0oUHQpLEl0PWZ1bmN0aW9uKCl7fSxNdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9wYXJlbnRJbmplY3Rvcj10LHRoaXMuX2N1c3RvbVRva2Vucz1lfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jdXN0b21Ub2tlbnMuZ2V0KHQpO3JldHVybiB2b2lkIDAhPT1uP246dGhpcy5fcGFyZW50SW5qZWN0b3IuZ2V0KHQsZSl9LHR9KCksTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbigpe30sdH0oKSxSdD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuc2Nyb2xsU3RyYXRlZ3k9bmV3IE50LHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSExLHRoaXMuYmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCIsdCYmT2JqZWN0LmtleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT10W25dfSl9fSgpO2Z1bmN0aW9uIER0KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIEZ0KHQsZSl7aWYoInN0YXJ0IiE9PWUmJiJlbmQiIT09ZSYmImNlbnRlciIhPT1lKXRocm93IEVycm9yKCJDb25uZWN0ZWRQb3NpdGlvbjogSW52YWxpZCAiK3QrJyAiJytlKyciLiBFeHBlY3RlZCAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIi4nKX12YXIgTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2NhbkJlRW5hYmxlZCgpKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1WKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpLHQuc3R5bGUudG9wPVYoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNFbmFibGVkKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10aGlzLl9kb2N1bWVudC5ib2R5LG49dC5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiIscj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsdC5zdHlsZS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LHQuc3R5bGUudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIix3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1uLGUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9cn19LHQucHJvdG90eXBlLl9jYW5CZUVuYWJsZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTt2YXIgdD10aGlzLl9kb2N1bWVudC5ib2R5LGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gdC5zY3JvbGxIZWlnaHQ+ZS5oZWlnaHR8fHQuc2Nyb2xsV2lkdGg+ZS53aWR0aH0sdH0oKTtmdW5jdGlvbiBWdCgpe3JldHVybiBFcnJvcigiU2Nyb2xsIHN0cmF0ZWd5IGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQuIil9dmFyIEJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPWZ1bmN0aW9uKCl7aS5kaXNhYmxlKCksaS5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZpLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX292ZXJsYXlSZWYuZGV0YWNoKCl9KX19cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IFZ0KCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pe3ZhciBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGU9dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdC5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50Ll9jb25maWcudGhyZXNob2xkP3QuX2RldGFjaCgpOnQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCk7ZnVuY3Rpb24genQodCxlKXtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0LmJvdHRvbTxlLnRvcHx8dC50b3A+ZS5ib3R0b218fHQucmlnaHQ8ZS5sZWZ0fHx0LmxlZnQ+ZS5yaWdodH0pfWZ1bmN0aW9uIFV0KHQsZSl7cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC50b3A8ZS50b3B8fHQuYm90dG9tPmUuYm90dG9tfHx0LmxlZnQ8ZS5sZWZ0fHx0LnJpZ2h0PmUucmlnaHR9KX12YXIgSHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IFZ0KCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7aWYodC5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHQuX2NvbmZpZyYmdC5fY29uZmlnLmF1dG9DbG9zZSl7dmFyIGU9dC5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCkscj1uLndpZHRoLGk9bi5oZWlnaHQ7enQoZSxbe3dpZHRoOnIsaGVpZ2h0OmksYm90dG9tOmkscmlnaHQ6cix0b3A6MCxsZWZ0OjB9XSkmJih0LmRpc2FibGUoKSx0Ll9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX292ZXJsYXlSZWYuZGV0YWNoKCl9KSl9fSkpfSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfSx0fSgpLFF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ub29wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBOdH0sdGhpcy5jbG9zZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KGkuX3Njcm9sbERpc3BhdGNoZXIsaS5fbmdab25lLGkuX3ZpZXdwb3J0UnVsZXIsdCl9LHRoaXMuYmxvY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEx0KGkuX3ZpZXdwb3J0UnVsZXIsaS5fZG9jdW1lbnQpfSx0aGlzLnJlcG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIdChpLl9zY3JvbGxEaXNwYXRjaGVyLGkuX3ZpZXdwb3J0UnVsZXIsaS5fbmdab25lLHQpfSx0aGlzLl9kb2N1bWVudD1yfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShfdCksT2JqZWN0KG8uWCkoeHQpLE9iamVjdChvLlgpKG8ueSksT2JqZWN0KG8uWCkocy5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZlLl9hdHRhY2hlZE92ZXJsYXlzW2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoLTFdLl9rZXlkb3duRXZlbnRzLm5leHQodCl9LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShzLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksR3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyRWxlbWVudCYmdGhpcy5fY29udGFpbmVyRWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyRWxlbWVudCl9LHQucHJvdG90eXBlLmdldENvbnRhaW5lckVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyRWxlbWVudHx8dGhpcy5fY3JlYXRlQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyRWxlbWVudH0sdC5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktY29udGFpbmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9jb250YWluZXJFbGVtZW50PXR9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKHMuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxZdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dGhpcy5fcG9ydGFsT3V0bGV0PXQsdGhpcy5faG9zdD1lLHRoaXMuX3BhbmU9bix0aGlzLl9jb25maWc9cix0aGlzLl9uZ1pvbmU9aSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9byx0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLHRoaXMuX2JhY2tkcm9wQ2xpY2s9bmV3IEMuYSx0aGlzLl9hdHRhY2htZW50cz1uZXcgQy5hLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBDLmEsdGhpcy5fa2V5ZG93bkV2ZW50cz1uZXcgQy5hLHIuc2Nyb2xsU3RyYXRlZ3kmJnIuc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm92ZXJsYXlFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJiYWNrZHJvcEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaG9zdEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faG9zdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2godCk7cmV0dXJuIHRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5fdXBkYXRlU3RhY2tpbmdPcmRlcigpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCksdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKE9iamVjdChFdC5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5oYXNBdHRhY2hlZCgpJiZlLnVwZGF0ZVBvc2l0aW9uKCl9KSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksbn0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNBdHRhY2hlZCgpKXt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO3ZhciB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH19LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnROb2RlJiYodGhpcy5faG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX2hvc3Q9bnVsbCksdGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hdHRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZGV0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmtleWRvd25FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ30sdC5wcm90b3R5cGUudXBkYXRlUG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KGQuYSkoe30sdGhpcy5fY29uZmlnLHQpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9LHQucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KGQuYSkoe30sdGhpcy5fY29uZmlnLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudERpcmVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXsodGhpcy5fY29uZmlnLndpZHRofHwwPT09dGhpcy5fY29uZmlnLndpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUud2lkdGg9Vih0aGlzLl9jb25maWcud2lkdGgpKSwodGhpcy5fY29uZmlnLmhlaWdodHx8MD09PXRoaXMuX2NvbmZpZy5oZWlnaHQpJiYodGhpcy5fcGFuZS5zdHlsZS5oZWlnaHQ9Vih0aGlzLl9jb25maWcuaGVpZ2h0KSksKHRoaXMuX2NvbmZpZy5taW5XaWR0aHx8MD09PXRoaXMuX2NvbmZpZy5taW5XaWR0aCkmJih0aGlzLl9wYW5lLnN0eWxlLm1pbldpZHRoPVYodGhpcy5fY29uZmlnLm1pbldpZHRoKSksKHRoaXMuX2NvbmZpZy5taW5IZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWluSGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWluSGVpZ2h0PVYodGhpcy5fY29uZmlnLm1pbkhlaWdodCkpLCh0aGlzLl9jb25maWcubWF4V2lkdGh8fDA9PT10aGlzLl9jb25maWcubWF4V2lkdGgpJiYodGhpcy5fcGFuZS5zdHlsZS5tYXhXaWR0aD1WKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCkpLCh0aGlzLl9jb25maWcubWF4SGVpZ2h0fHwwPT09dGhpcy5fY29uZmlnLm1heEhlaWdodCkmJih0aGlzLl9wYW5lLnN0eWxlLm1heEhlaWdodD1WKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpKX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG49ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChuLDUwMCl9KX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzc2VzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNsYXNzTGlzdDtMKGUpLmZvckVhY2goZnVuY3Rpb24odCl7bj9yLmFkZCh0KTpyLnJlbW92ZSh0KX0pfSx0fSgpLFd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuX2lzUHVzaGVkPSExLHRoaXMuX2NhblB1c2g9ITAsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9ITAsdGhpcy5fcG9zaXRpb25Mb2NrZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49MCx0aGlzLnNjcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IEMuYSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249YXQuYS5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz0wLHRoaXMucG9zaXRpb25DaGFuZ2VzPUUuYS5jcmVhdGUoZnVuY3Rpb24odCl7dmFyIGU9aS5fcG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZSh0KTtyZXR1cm4gaS5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zKyssZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksaS5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zLS19fSksdGhpcy5zZXRPcmlnaW4odCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9vdmVybGF5UmVmJiZ0IT09dGhpcy5fb3ZlcmxheVJlZil0aHJvdyBFcnJvcigiVGhpcyBwb3NpdGlvbiBzdHJhdGVneSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFuIG92ZXJsYXkiKTt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIpLHRoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9ib3VuZGluZ0JveD10Lmhvc3RFbGVtZW50LHRoaXMuX3BhbmU9dC5vdmVybGF5RWxlbWVudCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSgpfSl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYoISh0aGlzLl9pc0Rpc3Bvc2VkfHx0aGlzLl9wbGF0Zm9ybSYmIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcikpaWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbil0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTtlbHNle3RoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3IodmFyIHQsZT10aGlzLl9vcmlnaW5SZWN0LG49dGhpcy5fb3ZlcmxheVJlY3Qscj10aGlzLl92aWV3cG9ydFJlY3QsaT1bXSxvPTAsYT10aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD10aGlzLl9nZXRPcmlnaW5Qb2ludChlLHMpLHU9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGwsbixzKSxjPXRoaXMuX2dldE92ZXJsYXlGaXQodSxuLHIscyk7aWYoYy5pc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMsbCk7dGhpcy5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyhjLHUscik/aS5wdXNoKHtwb3NpdGlvbjpzLG9yaWdpbjpsLG92ZXJsYXlSZWN0Om4sYm91bmRpbmdCb3hSZWN0OnRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdChsLHMpfSk6KCF0fHx0Lm92ZXJsYXlGaXQudmlzaWJsZUFyZWE8Yy52aXNpYmxlQXJlYSkmJih0PXtvdmVybGF5Rml0OmMsb3ZlcmxheVBvaW50OnUsb3JpZ2luUG9pbnQ6bCxwb3NpdGlvbjpzLG92ZXJsYXlSZWN0Om59KX1pZihpLmxlbmd0aCl7Zm9yKHZhciBmPW51bGwsaD0tMSxwPTAsZD1pO3A8ZC5sZW5ndGg7cCsrKXt2YXIgbT1kW3BdLHk9bS5ib3VuZGluZ0JveFJlY3Qud2lkdGgqbS5ib3VuZGluZ0JveFJlY3QuaGVpZ2h0KihtLnBvc2l0aW9uLndlaWdodHx8MSk7eT5oJiYoaD15LGY9bSl9cmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihmLnBvc2l0aW9uLGYub3JpZ2luKX1pZih0aGlzLl9jYW5QdXNoKXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMCx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQucG9zaXRpb24sdC5vcmlnaW5Qb2ludCl9fSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLmRldGFjaCgpLHRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5faXNEaXNwb3NlZD0hMCl9LHQucHJvdG90eXBlLnJlYXBwbHlMYXN0UG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy5faXNEaXNwb3NlZCYmKCF0aGlzLl9wbGF0Zm9ybXx8dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKTt2YXIgdD10aGlzLl9sYXN0UG9zaXRpb258fHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc1swXSxlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LGUpfX0sdC5wcm90b3R5cGUud2l0aFNjcm9sbGFibGVDb250YWluZXJzPWZ1bmN0aW9uKHQpe3RoaXMuc2Nyb2xsYWJsZXM9dH0sdC5wcm90b3R5cGUud2l0aFBvc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLndpdGhWaWV3cG9ydE1hcmdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRNYXJnaW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoRmxleGlibGVEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEdyb3dBZnRlck9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9jYW5QdXNoPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aExvY2tlZFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfSx0LnByb3RvdHlwZS5zZXRPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10IGluc3RhbmNlb2Ygby5rP3QubmF0aXZlRWxlbWVudDp0LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9LHQucHJvdG90eXBlLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfSx0LnByb3RvdHlwZS5fZ2V0T3JpZ2luUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtpZigiY2VudGVyIj09ZS5vcmlnaW5YKW49dC5sZWZ0K3Qud2lkdGgvMjtlbHNle3ZhciByPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQsaT10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O249InN0YXJ0Ij09ZS5vcmlnaW5YP3I6aX1yZXR1cm57eDpuLHk6ImNlbnRlciI9PWUub3JpZ2luWT90LnRvcCt0LmhlaWdodC8yOiJ0b3AiPT1lLm9yaWdpblk/dC50b3A6dC5ib3R0b219fSx0LnByb3RvdHlwZS5fZ2V0T3ZlcmxheVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iY2VudGVyIj09bi5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1uLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgse3g6dC54K3IseTp0LnkrKCJjZW50ZXIiPT1uLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1uLm92ZXJsYXlZPzA6LWUuaGVpZ2h0KX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5Rml0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxvPXQueSxhPXRoaXMuX2dldE9mZnNldChyLCJ4Iikscz10aGlzLl9nZXRPZmZzZXQociwieSIpO2EmJihpKz1hKSxzJiYobys9cyk7dmFyIGw9MC1vLHU9bytlLmhlaWdodC1uLmhlaWdodCxjPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUud2lkdGgsMC1pLGkrZS53aWR0aC1uLndpZHRoKSxmPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUuaGVpZ2h0LGwsdSksaD1jKmY7cmV0dXJue3Zpc2libGVBcmVhOmgsaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQ6ZS53aWR0aCplLmhlaWdodD09PWgsZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5OmY9PT1lLmhlaWdodCxmaXRzSW5WaWV3cG9ydEhvcml6b250YWxseTpjPT1lLndpZHRofX0sdC5wcm90b3R5cGUuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7dmFyIHI9bi5ib3R0b20tZS55LGk9bi5yaWdodC1lLngsbz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluV2lkdGg7cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1vJiZvPD1yKSYmKHQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPWEmJmE8PWkpfX0sdC5wcm90b3R5cGUuX3B1c2hPdmVybGF5T25TY3JlZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl92aWV3cG9ydFJlY3Qscj1NYXRoLm1heCh0LngrZS53aWR0aC1uLnJpZ2h0LDApLGk9TWF0aC5tYXgodC55K2UuaGVpZ2h0LW4uYm90dG9tLDApLG89TWF0aC5tYXgobi50b3AtdC55LDApLGE9TWF0aC5tYXgobi5sZWZ0LXQueCwwKTtyZXR1cm57eDp0LngrKGUud2lkdGg8PW4ud2lkdGg/YXx8LXI6bi5sZWZ0LXQueCkseTp0LnkrKGUuaGVpZ2h0PD1uLmhlaWdodD9vfHwtaTpuLnRvcC10LnkpfX0sdC5wcm90b3R5cGUuX2FwcGx5UG9zaXRpb249ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHRoaXMuX2xhc3RQb3NpdGlvbj10LHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz4wKXt2YXIgbj1uZXcgZnVuY3Rpb24odCxlKXt0aGlzLmNvbm5lY3Rpb25QYWlyPXQsdGhpcy5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXM9ZX0odCx0aGlzLl9nZXRTY3JvbGxWaXNpYmlsaXR5KCkpO3RoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5uZXh0KG4pfXRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMX0sdC5wcm90b3R5cGUuX3NldFRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbih0KXtpZih0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil7dmFyIGUsbj10aGlzLl9ib3VuZGluZ0JveC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKSxyPXQub3ZlcmxheVk7ZT0iY2VudGVyIj09PXQub3ZlcmxheVg/ImNlbnRlciI6dGhpcy5faXNSdGwoKT8ic3RhcnQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0Ijoic3RhcnQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0Ijtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj1lKyIgIityfX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvLGEscyxsPXRoaXMuX3ZpZXdwb3J0UmVjdCx1PXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXI9dC55LG49bC5ib3R0b20tdC55O2Vsc2UgaWYoImJvdHRvbSI9PT1lLm92ZXJsYXlZKW49bC5oZWlnaHQtKGk9bC5oZWlnaHQtdC55KzIqdGhpcy5fdmlld3BvcnRNYXJnaW4pK3RoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2V7dmFyIGM9TWF0aC5taW4obC5ib3R0b20tdC55LHQueS1sLmxlZnQpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7cj10LnktYywobj0yKmMpPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocj10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiF1fHwic3RhcnQiPT09ZS5vdmVybGF5WCYmdSlzPWwucmlnaHQtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLG89dC54LWwubGVmdDtlbHNlIGlmKCJzdGFydCI9PT1lLm92ZXJsYXlYJiYhdXx8ImVuZCI9PT1lLm92ZXJsYXlYJiZ1KWE9dC54LG89bC5yaWdodC10Lng7ZWxzZXtjPU1hdGgubWluKGwucmlnaHQtdC54LHQueC1sLnRvcCk7dmFyIGg9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDthPXQueC1jLChvPTIqYyk+aCYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueC1oLzIpfXJldHVybnt0b3A6cixsZWZ0OmEsYm90dG9tOmkscmlnaHQ6cyx3aWR0aDpvLGhlaWdodDpufX0sdC5wcm90b3R5cGUuX3NldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHQsZSk7dGhpcy5faXNJbml0aWFsUmVuZGVyfHx0aGlzLl9ncm93QWZ0ZXJPcGVufHwobi5oZWlnaHQ9TWF0aC5taW4obi5oZWlnaHQsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQpLG4ud2lkdGg9TWF0aC5taW4obi53aWR0aCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoKSk7dmFyIHI9e307aWYodGhpcy5faGFzRXhhY3RQb3NpdGlvbigpKXIudG9wPXIubGVmdD0iMCIsci5ib3R0b209ci5yaWdodD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle3ZhciBpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1WKG4uaGVpZ2h0KSxyLnRvcD1WKG4udG9wKSxyLmJvdHRvbT1WKG4uYm90dG9tKSxyLndpZHRoPVYobi53aWR0aCksci5sZWZ0PVYobi5sZWZ0KSxyLnJpZ2h0PVYobi5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLGkmJihyLm1heEhlaWdodD1WKGkpKSxvJiYoci5tYXhXaWR0aD1WKG8pKX10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPW4sWnQodGhpcy5fYm91bmRpbmdCb3guc3R5bGUscil9LHQucHJvdG90eXBlLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKCl7WnQodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiMCIsbGVmdDoiMCIscmlnaHQ6IjAiLGJvdHRvbToiMCIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KX0sdC5wcm90b3R5cGUuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXM9ZnVuY3Rpb24oKXtadCh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiJ9KX0sdC5wcm90b3R5cGUuX3NldE92ZXJsYXlFbGVtZW50U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307dGhpcy5faGFzRXhhY3RQb3NpdGlvbigpPyhadChuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVkoZSx0KSksWnQobix0aGlzLl9nZXRFeGFjdE92ZXJsYXlYKGUsdCkpKTpuLnBvc2l0aW9uPSJzdGF0aWMiO3ZhciByPSIiLGk9dGhpcy5fZ2V0T2Zmc2V0KGUsIngiKSxvPXRoaXMuX2dldE9mZnNldChlLCJ5Iik7aSYmKHIrPSJ0cmFuc2xhdGVYKCIraSsicHgpICIpLG8mJihyKz0idHJhbnNsYXRlWSgiK28rInB4KSIpLG4udHJhbnNmb3JtPXIudHJpbSgpLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyYmdGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQmJihuLm1heEhlaWdodD0iIiksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoJiYobi5tYXhXaWR0aD0iIiksWnQodGhpcy5fcGFuZS5zdHlsZSxuKX0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVk9ZnVuY3Rpb24odCxlKXt2YXIgbj17dG9wOm51bGwsYm90dG9tOm51bGx9LHI9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYocj10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKHIsdGhpcy5fb3ZlcmxheVJlY3QpKSwiYm90dG9tIj09PXQub3ZlcmxheVk/bi5ib3R0b209dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC0oci55K3RoaXMuX292ZXJsYXlSZWN0LmhlaWdodCkrInB4IjpuLnRvcD1WKHIueSksbn0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVg9ZnVuY3Rpb24odCxlKXt2YXIgbj17bGVmdDpudWxsLHJpZ2h0Om51bGx9LHI9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYocj10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKHIsdGhpcy5fb3ZlcmxheVJlY3QpKSwicmlnaHQiPT0odGhpcy5faXNSdGwoKT8iZW5kIj09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI6ImVuZCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiKT9uLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oci54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOm4ubGVmdD1WKHIueCksbn0sdC5wcm90b3R5cGUuX2dldFNjcm9sbFZpc2liaWxpdHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5zY3JvbGxhYmxlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOlV0KHQsbiksaXNPcmlnaW5PdXRzaWRlVmlldzp6dCh0LG4pLGlzT3ZlcmxheUNsaXBwZWQ6VXQoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzp6dChlLG4pfX0sdC5wcm90b3R5cGUuX3N1YnRyYWN0T3ZlcmZsb3dzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LU1hdGgubWF4KGUsMCl9LHQpfSx0LnByb3RvdHlwZS5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LG49dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDpuLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0Om4ubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDpuLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206bi50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19LHQucHJvdG90eXBlLl9pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuX2hhc0V4YWN0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH0sdC5wcm90b3R5cGUuX2dldE9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlUG9zaXRpb25zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5sZW5ndGgpdGhyb3cgRXJyb3IoIkZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTogQXQgbGVhc3Qgb25lIHBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe0Z0KCJvcmlnaW5YIix0Lm9yaWdpblgpLER0KCJvcmlnaW5ZIix0Lm9yaWdpblkpLEZ0KCJvdmVybGF5WCIsdC5vdmVybGF5WCksRHQoIm92ZXJsYXlZIix0Lm92ZXJsYXlZKX0pfSx0fSgpO2Z1bmN0aW9uIFp0KHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dmFyIEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyl7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9bmV3IFd0KG4scixpLG8pLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhQdXNoKCExKS53aXRoVmlld3BvcnRNYXJnaW4oMCksdGhpcy53aXRoRmFsbGJhY2tQb3NpdGlvbih0LGUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9pc1J0bCIse2dldDpmdW5jdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9uUG9zaXRpb25DaGFuZ2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwb3NpdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hdHRhY2godCksdGhpcy5fZGlyZWN0aW9uJiYodC5zZXREaXJlY3Rpb24odGhpcy5fZGlyZWN0aW9uKSx0aGlzLl9kaXJlY3Rpb249bnVsbCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2goKX0sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9LHQucHJvdG90eXBlLnJlY2FsY3VsYXRlTGFzdFBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5yZWFwcGx5TGFzdFBvc2l0aW9uKCl9LHQucHJvdG90eXBlLndpdGhTY3JvbGxhYmxlQ29udGFpbmVycz1mdW5jdGlvbih0KXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhTY3JvbGxhYmxlQ29udGFpbmVycyh0KX0sdC5wcm90b3R5cGUud2l0aEZhbGxiYWNrUG9zaXRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bmV3IGZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMub2Zmc2V0WD1uLHRoaXMub2Zmc2V0WT1yLHRoaXMub3JpZ2luWD10Lm9yaWdpblgsdGhpcy5vcmlnaW5ZPXQub3JpZ2luWSx0aGlzLm92ZXJsYXlYPWUub3ZlcmxheVgsdGhpcy5vdmVybGF5WT1lLm92ZXJsYXlZfSh0LGUsbixyKTtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLnB1c2goaSksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUud2l0aERpcmVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnNldERpcmVjdGlvbih0KTp0aGlzLl9kaXJlY3Rpb249dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoT2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoRGVmYXVsdE9mZnNldFgodCksdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRZKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhMb2NrZWRQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoTG9ja2VkUG9zaXRpb24odCksdGhpc30sdC5wcm90b3R5cGUud2l0aFBvc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQuc2xpY2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKSx0aGlzfSx0LnByb3RvdHlwZS5zZXRPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuc2V0T3JpZ2luKHQpLHRoaXN9LHR9KCksWHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5fanVzdGlmeUNvbnRlbnQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIifXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiKX0sdC5wcm90b3R5cGUudG9wPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmJvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUucmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfSx0LnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfSx0LnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfSx0LnByb3RvdHlwZS5jZW50ZXJIb3Jpem9udGFsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuY2VudGVyVmVydGljYWxseT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpe3ZhciB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LnN0eWxlLG49dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD0iMTAwJSI9PT1uLndpZHRoPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPSIxMDAlIj09PW4uaGVpZ2h0PyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9dGhpcy5fcmlnaHRPZmZzZXQsZS5qdXN0aWZ5Q29udGVudD0iMTAwJSI9PT1uLndpZHRoPyJmbGV4LXN0YXJ0Ijp0aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9IjEwMCUiPT09bi5oZWlnaHQ/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSx0fSgpLCR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX2RvY3VtZW50PWUsdGhpcy5fcGxhdGZvcm09bn1yZXR1cm4gdC5wcm90b3R5cGUuZ2xvYmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYdH0sdC5wcm90b3R5cGUuY29ubmVjdGVkVG89ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuZXcgS3QoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLmZsZXhpYmxlQ29ubmVjdGVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXdCh0LHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fcGxhdGZvcm0pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKSh4dCksT2JqZWN0KG8uWCkocy5kKSxPYmplY3Qoby5YKSh1LDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksSnQ9MCx0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzLGwpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9cix0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9aSx0aGlzLl9pbmplY3Rvcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9bH1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxyPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxpPW5ldyBSdCh0KTtyZXR1cm4gaS5kaXJlY3Rpb249aS5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBZdChyLGUsbixpLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbkJ1aWxkZXJ9LHQucHJvdG90eXBlLl9jcmVhdGVQYW5lRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5pZD0iY2RrLW92ZXJsYXktIitKdCsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX0sdC5wcm90b3R5cGUuX2NyZWF0ZUhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9LHQucHJvdG90eXBlLl9jcmVhdGVQb3J0YWxPdXRsZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoby5nKSksbmV3IEF0KHQsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLHRoaXMuX2FwcFJlZix0aGlzLl9pbmplY3Rvcil9LHR9KCksZWU9bmV3IG8ucCgiY2RrLWNvbm5lY3RlZC1vdmVybGF5LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIG5lKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgcmU9ZnVuY3Rpb24oKXt9LGllPTIwLG9lPW5ldyBvLnAoIm1hdC10b29sdGlwLXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIGFlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7c2Nyb2xsVGhyb3R0bGU6aWV9KX19dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWUsdGhpcy5fdmlzaWJpbGl0eT0iaW5pdGlhbCIsdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExLHRoaXMuX29uSGlkZT1uZXcgQy5hLHRoaXMuX2lzSGFuZHNldD10aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShZLkhhbmRzZXQpfXJldHVybiB0LnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5faGlkZVRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMCx0aGlzLl9zaG93VGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl92aXNpYmlsaXR5PSJ2aXNpYmxlIixlLl9tYXJrRm9yQ2hlY2soKX0sdCl9LHQucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9zaG93VGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXRJZCksdGhpcy5faGlkZVRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fdmlzaWJpbGl0eT0iaGlkZGVuIixlLl9tYXJrRm9yQ2hlY2soKX0sdCl9LHQucHJvdG90eXBlLmFmdGVySGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uSGlkZS5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuInZpc2libGUiPT09dGhpcy5fdmlzaWJpbGl0eX0sdC5wcm90b3R5cGUuX2FuaW1hdGlvblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExfSx0LnByb3RvdHlwZS5fYW5pbWF0aW9uRG9uZT1mdW5jdGlvbih0KXt2YXIgZT10LnRvU3RhdGU7ImhpZGRlbiIhPT1lfHx0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpLCJ2aXNpYmxlIiE9PWUmJiJoaWRkZW4iIT09ZXx8KHRoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMCl9LHQucHJvdG90eXBlLl9oYW5kbGVCb2R5SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24mJnRoaXMuaGlkZSgwKX0sdC5wcm90b3R5cGUuX21hcmtGb3JDaGVjaz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSx0fSgpLGxlPWZ1bmN0aW9uKCl7fSx1ZT1uZXcgby5wKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KG8uWCkocy5kKX19KSxjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgby5uLHQmJih0aGlzLnZhbHVlPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8KHQuZG9jdW1lbnRFbGVtZW50P3QuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKHVlLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksZmU9ZnVuY3Rpb24oKXt9LGhlPW4oIlpZanQiKSxwZT1uZXcgby5wKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZD10LHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMSx0aGlzLl9kb2N1bWVudD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudD9kb2N1bWVudDpudWxsLHRoaXMuX3dpbmRvdz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93P3dpbmRvdzpudWxsLHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3MmJih0aGlzLl9jaGVja0RvY3R5cGVJc0RlZmluZWQoKSx0aGlzLl9jaGVja1RoZW1lSXNQcmVzZW50KCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9cmV0dXJuIHQucHJvdG90eXBlLl9hcmVDaGVja3NFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQmJk9iamVjdChvLlkpKCkmJiF0aGlzLl9pc1Rlc3RFbnYoKX0sdC5wcm90b3R5cGUuX2lzVGVzdEVudj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aW5kb3cmJih0aGlzLl93aW5kb3cuX19rYXJtYV9ffHx0aGlzLl93aW5kb3cuamFzbWluZSl9LHQucHJvdG90eXBlLl9jaGVja0RvY3R5cGVJc0RlZmluZWQ9ZnVuY3Rpb24oKXt0aGlzLl9kb2N1bWVudCYmIXRoaXMuX2RvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybigiQ3VycmVudCBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGEgZG9jdHlwZS4gVGhpcyBtYXkgY2F1c2Ugc29tZSBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbm90IHRvIGJlaGF2ZSBhcyBleHBlY3RlZC4iKX0sdC5wcm90b3R5cGUuX2NoZWNrVGhlbWVJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudCYmImZ1bmN0aW9uIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgibWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPWdldENvbXB1dGVkU3R5bGUodCk7ZSYmIm5vbmUiIT09ZS5kaXNwbGF5JiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEFuZ3VsYXIgTWF0ZXJpYWwgY29yZSB0aGVtZS4gTW9zdCBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4gRm9yIG1vcmUgaW5mbyByZWZlciB0byB0aGUgdGhlbWluZyBndWlkZTogaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL3RoZW1pbmciKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX0sdC5wcm90b3R5cGUuX2NoZWNrSGFtbWVySXNBdmFpbGFibGU9ZnVuY3Rpb24oKXshdGhpcy5faGFzQ2hlY2tlZEhhbW1lciYmdGhpcy5fd2luZG93JiYodGhpcy5fYXJlQ2hlY2tzRW5hYmxlZCgpJiYhdGhpcy5fd2luZG93LkhhbW1lciYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBIYW1tZXJKUy4gQ2VydGFpbiBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4iKSx0aGlzLl9oYXNDaGVja2VkSGFtbWVyPSEwKX0sdH0oKTtmdW5jdGlvbiBtZSh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBuPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3ZhciBpPXQuYXBwbHkodGhpcyxuKXx8dGhpcztyZXR1cm4gaS5jb2xvcj1lLGl9cmV0dXJuIE9iamVjdChkLmIpKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJjb2xvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvcn0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBuPXR8fGU7biE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtIit0aGlzLl9jb2xvciksbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC0iK24pLHRoaXMuX2NvbG9yPW4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLG59KHQpfWZ1bmN0aW9uIHllKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZVJpcHBsZT0hMSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZVJpcHBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZVJpcHBsZT1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfXZhciBnZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmlzRXJyb3JTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiEhKHQmJnQuaW52YWxpZCYmKHQudG91Y2hlZHx8ZSYmZS5zdWJtaXR0ZWQpKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHZlPW5ldyBvLnAoIk1BVF9IQU1NRVJfT1BUSU9OUyIpLGJlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2hhbW1lck9wdGlvbnM9ZSxyLl9oYW1tZXI9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93LkhhbW1lcjpudWxsLHIuZXZlbnRzPXIuX2hhbW1lcj9bImxvbmdwcmVzcyIsInNsaWRlIiwic2xpZGVzdGFydCIsInNsaWRlZW5kIiwic2xpZGVyaWdodCIsInNsaWRlbGVmdCJdOltdLG4mJm4uX2NoZWNrSGFtbWVySXNBdmFpbGFibGUoKSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmJ1aWxkSGFtbWVyPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzLl9oYW1tZXIodCx0aGlzLl9oYW1tZXJPcHRpb25zfHx2b2lkIDApLG49bmV3IHRoaXMuX2hhbW1lci5QYW4scj1uZXcgdGhpcy5faGFtbWVyLlN3aXBlLGk9bmV3IHRoaXMuX2hhbW1lci5QcmVzcyxvPXRoaXMuX2NyZWF0ZVJlY29nbml6ZXIobix7ZXZlbnQ6InNsaWRlIix0aHJlc2hvbGQ6MH0sciksYT10aGlzLl9jcmVhdGVSZWNvZ25pemVyKGkse2V2ZW50OiJsb25ncHJlc3MiLHRpbWU6NTAwfSk7cmV0dXJuIG4ucmVjb2duaXplV2l0aChyKSxlLmFkZChbcixpLG4sbyxhXSksZX0sZS5wcm90b3R5cGUuX2NyZWF0ZVJlY29nbml6ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gbi5wdXNoKHQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5yZWNvZ25pemVXaXRoKHQpfSksaX0sZX0oaGUuZyksX2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9saW5lcz10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zZXRMaW5lQ2xhc3ModGhpcy5fbGluZXMubGVuZ3RoKSx0aGlzLl9saW5lcy5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe24uX3NldExpbmVDbGFzcyhuLl9saW5lcy5sZW5ndGgpfSl9cmV0dXJuIHQucHJvdG90eXBlLl9zZXRMaW5lQ2xhc3M9ZnVuY3Rpb24odCl7dGhpcy5fcmVzZXRDbGFzc2VzKCksMj09PXR8fDM9PT10P3RoaXMuX3NldENsYXNzKCJtYXQtIit0KyItbGluZSIsITApOnQ+MyYmdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9yZXNldENsYXNzZXM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRDbGFzcygibWF0LTItbGluZSIsITEpLHRoaXMuX3NldENsYXNzKCJtYXQtMy1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMSl9LHQucHJvdG90eXBlLl9zZXRDbGFzcz1mdW5jdGlvbih0LGUpe2U/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodCk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodCl9LHR9KCksd2U9ZnVuY3Rpb24oKXt9LHhlPWZ1bmN0aW9uKCl7dmFyIHQ9e0ZBRElOR19JTjowLFZJU0lCTEU6MSxGQURJTkdfT1VUOjIsSElEREVOOjN9O3JldHVybiB0W3QuRkFESU5HX0lOXT0iRkFESU5HX0lOIix0W3QuVklTSUJMRV09IlZJU0lCTEUiLHRbdC5GQURJTkdfT1VUXT0iRkFESU5HX09VVCIsdFt0LkhJRERFTl09IkhJRERFTiIsdH0oKSxDZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5jb25maWc9bix0aGlzLnN0YXRlPXhlLkhJRERFTn1yZXR1cm4gdC5wcm90b3R5cGUuZmFkZU91dD1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9LHR9KCksRWU9e2VudGVyRHVyYXRpb246NDUwLGV4aXREdXJhdGlvbjo0MDB9LE9lPTgwMCxTZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX3RyaWdnZXJFdmVudHM9bmV3IE1hcCx0aGlzLl9hY3RpdmVSaXBwbGVzPW5ldyBTZXQsdGhpcy5fZXZlbnRPcHRpb25zPSEhYygpJiZ7cGFzc2l2ZTohMH0sdGhpcy5vbk1vdXNlZG93bj1mdW5jdGlvbih0KXt2YXIgZT1pLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPGkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQrT2U7aS5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHwoaS5faXNQb2ludGVyRG93bj0hMCxpLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLGkuX3RhcmdldC5yaXBwbGVDb25maWcpKX0sdGhpcy5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7aS5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHwoaS5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLGkuX2lzUG9pbnRlckRvd249ITAsaS5mYWRlSW5SaXBwbGUodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFksaS5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uUG9pbnRlclVwPWZ1bmN0aW9uKCl7aS5faXNQb2ludGVyRG93biYmKGkuX2lzUG9pbnRlckRvd249ITEsaS5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYodC5zdGF0ZT09PXhlLlZJU0lCTEV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiZ0LnN0YXRlPT09eGUuRkFESU5HX0lOKSYmdC5mYWRlT3V0KCl9KSl9LHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1uLm5hdGl2ZUVsZW1lbnQsdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlZG93biksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNldXAiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWxlYXZlIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQpLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaGVuZCIsdGhpcy5vblBvaW50ZXJVcCkpfXJldHVybiB0LnByb3RvdHlwZS5mYWRlSW5SaXBwbGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBpPXRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fY29udGFpbmVyUmVjdHx8dGhpcy5fY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPU9iamVjdChkLmEpKHt9LEVlLG4uYW5pbWF0aW9uKTtuLmNlbnRlcmVkJiYodD1pLmxlZnQraS53aWR0aC8yLGU9aS50b3AraS5oZWlnaHQvMik7dmFyIGE9bi5yYWRpdXN8fGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChNYXRoLmFicyh0LW4ubGVmdCksTWF0aC5hYnModC1uLnJpZ2h0KSksaT1NYXRoLm1heChNYXRoLmFicyhlLW4udG9wKSxNYXRoLmFicyhlLW4uYm90dG9tKSk7cmV0dXJuIE1hdGguc3FydChyKnIraSppKX0odCxlLGkpLHM9dC1pLmxlZnQsbD1lLWkudG9wLHU9by5lbnRlckR1cmF0aW9uLyhuLnNwZWVkRmFjdG9yfHwxKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2MuY2xhc3NMaXN0LmFkZCgibWF0LXJpcHBsZS1lbGVtZW50IiksYy5zdHlsZS5sZWZ0PXMtYSsicHgiLGMuc3R5bGUudG9wPWwtYSsicHgiLGMuc3R5bGUuaGVpZ2h0PTIqYSsicHgiLGMuc3R5bGUud2lkdGg9MiphKyJweCIsYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9bi5jb2xvcnx8bnVsbCxjLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj11KyJtcyIsdGhpcy5fY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChjKSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5IiksYy5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIjt2YXIgZj1uZXcgQ2UodGhpcyxjLG4pO3JldHVybiBmLnN0YXRlPXhlLkZBRElOR19JTix0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChmKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPWYpLHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dmFyIHQ9Zj09PXIuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU7Zi5zdGF0ZT14ZS5WSVNJQkxFLG4ucGVyc2lzdGVudHx8dCYmci5faXNQb2ludGVyRG93bnx8Zi5mYWRlT3V0KCl9LHUpLGZ9LHQucHJvdG90eXBlLmZhZGVPdXRSaXBwbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCk7aWYodD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksZSl7dmFyIG49dC5lbGVtZW50LHI9T2JqZWN0KGQuYSkoe30sRWUsdC5jb25maWcuYW5pbWF0aW9uKTtuLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1yLmV4aXREdXJhdGlvbisibXMiLG4uc3R5bGUub3BhY2l0eT0iMCIsdC5zdGF0ZT14ZS5GQURJTkdfT1VULHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dC5zdGF0ZT14ZS5ISURERU4sbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfSxyLmV4aXREdXJhdGlvbil9fSx0LnByb3RvdHlwZS5mYWRlT3V0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZhZGVPdXQoKX0pfSx0LnByb3RvdHlwZS5zZXR1cFRyaWdnZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0IT09dGhpcy5fdHJpZ2dlckVsZW1lbnQmJih0aGlzLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZS5fdHJpZ2dlckV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihyLG4sZS5fZXZlbnRPcHRpb25zKX0pfSksdGhpcy5fdHJpZ2dlckVsZW1lbnQ9dCl9LHQucHJvdG90eXBlLnJ1blRpbWVvdXRPdXRzaWRlWm9uZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTApLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KHQsZSl9KX0sdC5wcm90b3R5cGUuX3JlbW92ZVRyaWdnZXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3RyaWdnZXJFbGVtZW50JiZ0aGlzLl90cmlnZ2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0Ll90cmlnZ2VyRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG4sZSx0Ll9ldmVudE9wdGlvbnMpfSl9LHR9KCksa2U9bmV3IG8ucCgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9hbmltYXRpb25Nb2RlPWksdGhpcy5yYWRpdXM9MCx0aGlzLnNwZWVkRmFjdG9yPTEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPXJ8fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBTZSh0aGlzLGUsdCxuKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0cmlnZ2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXI9dCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX0sdC5wcm90b3R5cGUuZmFkZU91dEFsbD1mdW5jdGlvbigpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyaXBwbGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246Ik5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06T2JqZWN0KGQuYSkoe30sdGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb24sdGhpcy5hbmltYXRpb24pLHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXAsc3BlZWRGYWN0b3I6dGhpcy5zcGVlZEZhY3RvcioodGhpcy5fZ2xvYmFsT3B0aW9ucy5iYXNlU3BlZWRGYWN0b3J8fDEpfX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJpcHBsZURpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCEhdGhpcy5fZ2xvYmFsT3B0aW9ucy5kaXNhYmxlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkPWZ1bmN0aW9uKCl7IXRoaXMuZGlzYWJsZWQmJnRoaXMuX2lzSW5pdGlhbGl6ZWQmJnRoaXMuX3JpcHBsZVJlbmRlcmVyLnNldHVwVHJpZ2dlckV2ZW50cyh0aGlzLnRyaWdnZXIpfSx0LnByb3RvdHlwZS5sYXVuY2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSwibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKHQsZSxPYmplY3QoZC5hKSh7fSx0aGlzLnJpcHBsZUNvbmZpZyxuKSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCxPYmplY3QoZC5hKSh7fSx0aGlzLnJpcHBsZUNvbmZpZyx0KSl9LHR9KCksUGU9ZnVuY3Rpb24oKXt9LEFlPWZ1bmN0aW9uKCl7fSxqZT1mdW5jdGlvbigpe30sSWU9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtdG9vbHRpcC1wYW5lbHtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudH0ubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjJweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc31AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXRvb2x0aXB7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtdG9vbHRpcC1oYW5kc2V0e21hcmdpbjoyNHB4O3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToic3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImluaXRpYWwsIHZvaWQsIGhpZGRlbiIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InNjYWxlKDApIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6InZpc2libGUiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiIqID0+IHZpc2libGUiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjE1MG1zIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKSJ9LG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiIqID0+IGhpZGRlbiIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMTUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBNZSh0KXtyZXR1cm4gby5rYigyLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtdG9vbHRpcCJdXSxbWzIsIm1hdC10b29sdGlwLWhhbmRzZXQiLG51bGxdLFsyNCwiQHN0YXRlIiwwXV0sW1tudWxsLCJAc3RhdGUuc3RhcnQiXSxbbnVsbCwiQHN0YXRlLmRvbmUiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLGk9dC5jb21wb25lbnQ7cmV0dXJuIkBzdGF0ZS5zdGFydCI9PT1lJiYocj0hMSE9PWkuX2FuaW1hdGlvblN0YXJ0KCkmJnIpLCJAc3RhdGUuZG9uZSI9PT1lJiYocj0hMSE9PWkuX2FuaW1hdGlvbkRvbmUobikmJnIpLHJ9LG51bGwsbnVsbCkpLG8uUGEoMSwyNzg1MjgsbnVsbCwwLHMuaSxbby5yLG8ucyxvLmssby5EXSx7a2xhc3M6WzAsImtsYXNzIl0sbmdDbGFzczpbMSwibmdDbGFzcyJdfSxudWxsKSxvLmNiKDEzMTA3MixzLmIsW28uaF0pLCh0KCkoKSxvLmliKDMsbnVsbCxbIiIsIiJdKSldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCwibWF0LXRvb2x0aXAiLGUuY29tcG9uZW50LnRvb2x0aXBDbGFzcyl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDAsMCxvLmpiKGUsMCwwLG8uYWIoZSwyKS50cmFuc2Zvcm0obi5faXNIYW5kc2V0KSkubWF0Y2hlcyxuLl92aXNpYmlsaXR5KSx0KGUsMywwLG4ubWVzc2FnZSl9KX12YXIgTmU9by5NYSgibWF0LXRvb2x0aXAtY29tcG9uZW50IixzZSxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsIm1hdC10b29sdGlwLWNvbXBvbmVudCIsW1siYXJpYS1oaWRkZW4iLCJ0cnVlIl1dLFtbNCwiem9vbSIsbnVsbF1dLFtbImJvZHkiLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImJvZHk6Y2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsMSkuX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpJiZyKSxyfSxNZSxJZSkpLG8uUGEoMSw0OTE1MixudWxsLDAsc2UsW28uaCxxXSxudWxsLG51bGwpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCwidmlzaWJsZSI9PT1vLmFiKGUsMSkuX3Zpc2liaWxpdHk/MTpudWxsKX0pfSx7fSx7fSxbXSksUmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IEMuYSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgQy5hLHRoaXMuX29uQWN0aW9uPW5ldyBDLmEsdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITEsdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHRoaXMub25BY3Rpb24oKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gbi5kaXNtaXNzKCl9KSx0Ll9vbkV4aXQuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbmlzaERpc21pc3MoKX0pfXJldHVybiB0LnByb3RvdHlwZS5kaXNtaXNzPWZ1bmN0aW9uKCl7dGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY2xvc2VkfHx0aGlzLmNvbnRhaW5lckluc3RhbmNlLmV4aXQoKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfSx0LnByb3RvdHlwZS5kaXNtaXNzV2l0aEFjdGlvbj1mdW5jdGlvbigpe3RoaXMuX29uQWN0aW9uLmNsb3NlZHx8KHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSEwLHRoaXMuX29uQWN0aW9uLm5leHQoKSx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpKX0sdC5wcm90b3R5cGUuY2xvc2VXaXRoQWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5kaXNtaXNzV2l0aEFjdGlvbigpfSx0LnByb3RvdHlwZS5fZGlzbWlzc0FmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fZHVyYXRpb25UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmRpc21pc3MoKX0sdCl9LHQucHJvdG90eXBlLl9vcGVuPWZ1bmN0aW9uKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfSx0LnByb3RvdHlwZS5fZmluaXNoRGlzbWlzcz1mdW5jdGlvbigpe3RoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX29uQWN0aW9uLmNsb3NlZHx8dGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLl9hZnRlckRpc21pc3NlZC5uZXh0KHtkaXNtaXNzZWRCeUFjdGlvbjp0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbn0pLHRoaXMuX2FmdGVyRGlzbWlzc2VkLmNvbXBsZXRlKCksdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITF9LHQucHJvdG90eXBlLmFmdGVyRGlzbWlzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hZnRlck9wZW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfSx0LnByb3RvdHlwZS5vbkFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkFjdGlvbi5hc09ic2VydmFibGUoKX0sdH0oKSxEZT1uZXcgby5wKCJNYXRTbmFja0JhckRhdGEiKSxGZT1mdW5jdGlvbigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn0sTGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5zbmFja0JhclJlZj10LHRoaXMuZGF0YT1lfXJldHVybiB0LnByb3RvdHlwZS5hY3Rpb249ZnVuY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzQWN0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmRhdGEuYWN0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksVmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8uX25nWm9uZT1lLG8uX2VsZW1lbnRSZWY9bixvLl9jaGFuZ2VEZXRlY3RvclJlZj1yLG8uc25hY2tCYXJDb25maWc9aSxvLl9kZXN0cm95ZWQ9ITEsby5fb25FeGl0PW5ldyBDLmEsby5fb25FbnRlcj1uZXcgQy5hLG8uX2FuaW1hdGlvblN0YXRlPSJ2b2lkIixvfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwodCl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpLHRoaXMuX2FwcGx5U25hY2tCYXJDbGFzc2VzKCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpfSxlLnByb3RvdHlwZS5vbkFuaW1hdGlvbkVuZD1mdW5jdGlvbih0KXt2YXIgZT10LnRvU3RhdGU7aWYoKCJ2b2lkIj09PWUmJiJ2b2lkIiE9PXQuZnJvbVN0YXRlfHxlLnN0YXJ0c1dpdGgoImhpZGRlbiIpKSYmdGhpcy5fY29tcGxldGVFeGl0KCksZS5zdGFydHNXaXRoKCJ2aXNpYmxlIikpe3ZhciBuPXRoaXMuX29uRW50ZXI7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe24ubmV4dCgpLG4uY29tcGxldGUoKX0pfX0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZS0iK3RoaXMuc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpfSxlLnByb3RvdHlwZS5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXRlPSJoaWRkZW4tIit0aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24sdGhpcy5fb25FeGl0fSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jb21wbGV0ZUV4aXQoKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlRXhpdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoRXQuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX29uRXhpdC5uZXh0KCksdC5fb25FeGl0LmNvbXBsZXRlKCl9KX0sZS5wcm90b3R5cGUuX2FwcGx5U25hY2tCYXJDbGFzc2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5zbmFja0JhckNvbmZpZy5wYW5lbENsYXNzO2UmJihBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QuYWRkKGUpfSk6dC5jbGFzc0xpc3QuYWRkKGUpKSwiY2VudGVyIj09PXRoaXMuc25hY2tCYXJDb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uJiZ0LmNsYXNzTGlzdC5hZGQoIm1hdC1zbmFjay1iYXItY2VudGVyIiksInRvcCI9PT10aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24mJnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX0sZS5wcm90b3R5cGUuX2Fzc2VydE5vdEF0dGFjaGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpdGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIHNuYWNrIGJhciBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCIpfSxlfShQdCksQmU9bmV3IG8ucCgibWF0LXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGZX19KSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9saXZlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXI9cix0aGlzLl9wYXJlbnRTbmFja0Jhcj1pLHRoaXMuX2RlZmF1bHRDb25maWc9byx0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX29wZW5lZFNuYWNrQmFyUmVmIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50U25hY2tCYXI7cmV0dXJuIHQ/dC5fb3BlbmVkU25hY2tCYXJSZWY6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3BhcmVudFNuYWNrQmFyP3RoaXMuX3BhcmVudFNuYWNrQmFyLl9vcGVuZWRTbmFja0JhclJlZj10OnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuRnJvbUNvbXBvbmVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hdHRhY2godCxlKX0sdC5wcm90b3R5cGUub3BlbkZyb21UZW1wbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hdHRhY2godCxlKX0sdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciByPU9iamVjdChkLmEpKHt9LHRoaXMuX2RlZmF1bHRDb25maWcsbik7cmV0dXJuIHIuZGF0YT17bWVzc2FnZTp0LGFjdGlvbjplfSxyLmFubm91bmNlbWVudE1lc3NhZ2U9dCx0aGlzLm9wZW5Gcm9tQ29tcG9uZW50KExlLHIpfSx0LnByb3RvdHlwZS5kaXNtaXNzPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbmVkU25hY2tCYXJSZWYmJnRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKX0sdC5wcm90b3R5cGUuX2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IE10KGUmJmUudmlld0NvbnRhaW5lclJlZiYmZS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3RvcixuZXcgV2Vha01hcChbW0ZlLGVdXSkpLHI9bmV3IGt0KFZlLGUudmlld0NvbnRhaW5lclJlZixuKSxpPXQuYXR0YWNoKHIpO3JldHVybiBpLmluc3RhbmNlLnNuYWNrQmFyQ29uZmlnPWUsaS5pbnN0YW5jZX0sdC5wcm90b3R5cGUuX2F0dGFjaD1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChkLmEpKHt9LG5ldyBGZSx0aGlzLl9kZWZhdWx0Q29uZmlnLGUpLHI9dGhpcy5fY3JlYXRlT3ZlcmxheShuKSxpPXRoaXMuX2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKHIsbiksYT1uZXcgUmUoaSxyKTtpZih0IGluc3RhbmNlb2Ygby5NKXt2YXIgcz1uZXcgVHQodCxudWxsLHskaW1wbGljaXQ6bi5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPWkuYXR0YWNoVGVtcGxhdGVQb3J0YWwocyl9ZWxzZXt2YXIgbD10aGlzLl9jcmVhdGVJbmplY3RvcihuLGEpLHU9KHM9bmV3IGt0KHQsdm9pZCAwLGwpLGkuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHMpKTthLmluc3RhbmNlPXUuaW5zdGFuY2V9cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFkuSGFuZHNldCkucGlwZShrKHIuZGV0YWNobWVudHMoKS5waXBlKE9iamVjdChFdC5hKSgxKSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7dC5tYXRjaGVzP3Iub3ZlcmxheUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci1oYW5kc2V0Iik6ci5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtc25hY2stYmFyLWhhbmRzZXQiKX0pLHRoaXMuX2FuaW1hdGVTbmFja0JhcihhLG4pLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPWEsdGhpcy5fb3BlbmVkU25hY2tCYXJSZWZ9LHQucHJvdG90eXBlLl9hbmltYXRlU25hY2tCYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtuLl9vcGVuZWRTbmFja0JhclJlZj09dCYmKG4uX29wZW5lZFNuYWNrQmFyUmVmPW51bGwpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY/KHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpKTp0LmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCksZS5kdXJhdGlvbiYmZS5kdXJhdGlvbj4wJiZ0LmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2Rpc21pc3NBZnRlcihlLmR1cmF0aW9uKX0pLGUuYW5ub3VuY2VtZW50TWVzc2FnZSYmdGhpcy5fbGl2ZS5hbm5vdW5jZShlLmFubm91bmNlbWVudE1lc3NhZ2UsZS5wb2xpdGVuZXNzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU92ZXJsYXk9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJ0O2UuZGlyZWN0aW9uPXQuZGlyZWN0aW9uO3ZhciBuPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxyPSJydGwiPT09dC5kaXJlY3Rpb24saT0ibGVmdCI9PT10Lmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PXQuaG9yaXpvbnRhbFBvc2l0aW9uJiYhcnx8ImVuZCI9PT10Lmhvcml6b250YWxQb3NpdGlvbiYmcixvPSFpJiYiY2VudGVyIiE9PXQuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBpP24ubGVmdCgiMCIpOm8/bi5yaWdodCgiMCIpOm4uY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT10LnZlcnRpY2FsUG9zaXRpb24/bi50b3AoIjAiKTpuLmJvdHRvbSgiMCIpLGUucG9zaXRpb25TdHJhdGVneT1uLHRoaXMuX292ZXJsYXkuY3JlYXRlKGUpfSx0LnByb3RvdHlwZS5fY3JlYXRlSW5qZWN0b3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IE10KHQmJnQudmlld0NvbnRhaW5lclJlZiYmdC52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3RvcixuZXcgV2Vha01hcChbW1JlLGVdLFtEZSx0LmRhdGFdXSkpfSx0fSgpLFVlPWZ1bmN0aW9uKCl7fSxIZT1uKCJGRk9vIiksUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kdWVUaW1lPXQsdGhpcy5zY2hlZHVsZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgcWUodCx0aGlzLmR1ZVRpbWUsdGhpcy5zY2hlZHVsZXIpKX0sdH0oKSxxZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5kdWVUaW1lPW4saS5zY2hlZHVsZXI9cixpLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsLGkubGFzdFZhbHVlPW51bGwsaS5oYXNWYWx1ZT0hMSxpfXJldHVybiBkLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmNsZWFyRGVib3VuY2UoKSx0aGlzLmxhc3RWYWx1ZT10LHRoaXMuaGFzVmFsdWU9ITAsdGhpcy5hZGQodGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249dGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoR2UsdGhpcy5kdWVUaW1lLHRoaXMpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZWROZXh0KCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5kZWJvdW5jZWROZXh0PWZ1bmN0aW9uKCl7aWYodGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5oYXNWYWx1ZSl7dmFyIHQ9dGhpcy5sYXN0VmFsdWU7dGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX19LGUucHJvdG90eXBlLmNsZWFyRGVib3VuY2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbjtudWxsIT09dCYmKHRoaXMucmVtb3ZlKHQpLHQudW5zdWJzY3JpYmUoKSx0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsKX0sZX0oSGUuYSk7ZnVuY3Rpb24gR2UodCl7dC5kZWJvdW5jZWROZXh0KCl9dmFyIFllPW4oInhNeUUiKSxXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcGxhdGZvcm09dH1yZXR1cm4gdC5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9LHQucHJvdG90eXBlLmlzVmlzaWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuISEodC5vZmZzZXRXaWR0aHx8dC5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldENsaWVudFJlY3RzJiZ0LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0odCkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUodCkudmlzaWJpbGl0eX0sdC5wcm90b3R5cGUuaXNUYWJiYWJsZT1mdW5jdGlvbih0KXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiExO3ZhciBlPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5mcmFtZUVsZW1lbnR9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSh0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyk7aWYoZSl7dmFyIG49ZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xPT09S2UoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGk9S2UodCk7aWYodC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKXJldHVybi0xIT09aTtpZigiaWZyYW1lIj09PXIpcmV0dXJuITE7aWYoImF1ZGlvIj09PXIpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSlyZXR1cm4hMTtpZih0aGlzLl9wbGF0Zm9ybS5CTElOSylyZXR1cm4hMH1pZigidmlkZW8iPT09cil7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiZ0aGlzLl9wbGF0Zm9ybS5UUklERU5UKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YKXJldHVybiEwfXJldHVybigib2JqZWN0IiE9PXJ8fCF0aGlzLl9wbGF0Zm9ybS5CTElOSyYmIXRoaXMuX3BsYXRmb3JtLldFQktJVCkmJiEodGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj0iaW5wdXQiPT09ZSYmdC50eXBlO3JldHVybiJ0ZXh0Ij09PW58fCJwYXNzd29yZCI9PT1ufHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfSh0KSkmJnQudGFiSW5kZXg+PTB9LHQucHJvdG90eXBlLmlzRm9jdXNhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJiJoaWRkZW4iPT10LnR5cGV9KHQpJiYoZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJidXR0b24iPT09ZXx8InRleHRhcmVhIj09PWV9KHQpfHxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImEiPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KHQpJiZ0Lmhhc0F0dHJpYnV0ZSgiaHJlZiIpfSh0KXx8dC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxaZSh0KSl9KHQpJiYhdGhpcy5pc0Rpc2FibGVkKHQpJiZ0aGlzLmlzVmlzaWJsZSh0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkodSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBaZSh0KXtpZighdC5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PXQudGFiSW5kZXgpcmV0dXJuITE7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuIi0zMjc2OCIhPWUmJiEoIWV8fGlzTmFOKHBhcnNlSW50KGUsMTApKSl9ZnVuY3Rpb24gS2UodCl7aWYoIVplKHQpKXJldHVybiBudWxsO3ZhciBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9dmFyIFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3ZvaWQgMD09PWkmJihpPSExKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fZW5hYmxlZD0hMCxpfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3N0YXJ0QW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuZEFuY2hvci50YWJJbmRleD10aGlzLl9lbmFibGVkPzA6LTEpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fZW5kQW5jaG9yJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fZW5kQW5jaG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZW5kQW5jaG9yKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbH0sdC5wcm90b3R5cGUuYXR0YWNoQW5jaG9ycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsZnVuY3Rpb24oKXt0LmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpfSksdC5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3QuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpfSksdC5fZWxlbWVudC5wYXJlbnROb2RlJiYodC5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0Ll9zdGFydEFuY2hvcix0Ll9lbGVtZW50KSx0Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuX2VuZEFuY2hvcix0Ll9lbGVtZW50Lm5leHRTaWJsaW5nKSl9KX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNJbml0aWFsRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLl9nZXRSZWdpb25Cb3VuZGFyeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIl0sIFtjZGtGb2N1c1JlZ2lvbiIrdCsiXSwgW2Nkay1mb2N1cy0iK3QrIl0iKSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXS5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy0iK3QpP2NvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtIit0KyInLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uIit0KyInIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAuIixlW25dKTplW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLXJlZ2lvbi0iK3QpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pO3JldHVybiJzdGFydCI9PXQ/ZS5sZW5ndGg/ZVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTplLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9LHQucHJvdG90eXBlLmZvY3VzSW5pdGlhbEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtjZGtGb2N1c0luaXRpYWxdIik7cmV0dXJuIHQ/KHQuaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtaW5pdGlhbCIpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLWluaXRpYWwnLCB1c2UgJ2Nka0ZvY3VzSW5pdGlhbCcgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMCIsdCksdC5mb2N1cygpLCEwKTp0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiB0JiZ0LmZvY3VzKCksISF0fSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7Zm9yKHZhciBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2RlcyxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZVtuXSk6bnVsbDtpZihyKXJldHVybiByfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7Zm9yKHZhciBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2RlcyxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPWVbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9jcmVhdGVBbmNob3I9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC50YWJJbmRleD10aGlzLl9lbmFibGVkPzA6LTEsdC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSx0fSx0LnByb3RvdHlwZS5fZXhlY3V0ZU9uU3RhYmxlPWZ1bmN0aW9uKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KEV0LmEpKDEpKS5zdWJzY3JpYmUodCl9LHR9KCksJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgWGUodCx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxlKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoV2UpLE9iamVjdChvLlgpKG8ueSksT2JqZWN0KG8uWCkocy5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEplPW5ldyBvLnAoImxpdmVBbm5vdW5jZXJFbGVtZW50Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLHRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2RvY3VtZW50PWUsdGhpcy5fbGl2ZUVsZW1lbnQ9dHx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1yZXR1cm4gdC5wcm90b3R5cGUuYW5ub3VuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0icG9saXRlIiksdGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9IiIsdGhpcy5fbGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLGUpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD10LGUoKX0sMTAwKX0pfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2xpdmVFbGVtZW50JiZ0aGlzLl9saXZlRWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9saXZlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2xpdmVFbGVtZW50KX0sdC5wcm90b3R5cGUuX2NyZWF0ZUxpdmVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShKZSw4KSxPYmplY3Qoby5YKShzLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksZW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fbmdab25lPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9vcmlnaW49bnVsbCx0aGlzLl93aW5kb3dGb2N1c2VkPSExLHRoaXMuX2VsZW1lbnRJbmZvPW5ldyBNYXAsdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30sdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLm1vbml0b3I9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHZvaWQgMD09PWUmJihlPSExKSwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiBPYmplY3QoSS5hKShudWxsKTtpZih0aGlzLl9lbGVtZW50SW5mby5oYXModCkpe3ZhciByPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtyZXR1cm4gci5jaGVja0NoaWxkcmVuPWUsci5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfXZhciBpPXt1bmxpc3RlbjpmdW5jdGlvbigpe30sY2hlY2tDaGlsZHJlbjplLHN1YmplY3Q6bmV3IEMuYX07dGhpcy5fZWxlbWVudEluZm8uc2V0KHQsaSksdGhpcy5faW5jcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50KCk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uRm9jdXMoZSx0KX0sYT1mdW5jdGlvbihlKXtyZXR1cm4gbi5fb25CbHVyKGUsdCl9O3JldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixvLCEwKSx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGEsITApfSksaS51bmxpc3Rlbj1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLG8sITApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsYSwhMCl9LGkuc3ViamVjdC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuc3RvcE1vbml0b3Jpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpO2UmJihlLnVubGlzdGVuKCksZS5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3Nlcyh0KSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUodCksdGhpcy5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50KCkpfSx0LnByb3RvdHlwZS5mb2N1c1ZpYT1mdW5jdGlvbih0LGUpe3RoaXMuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuc3RvcE1vbml0b3Jpbmcobil9KX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpe3ZhciBlPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0PW51bGwsdC5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWUoImtleWJvYXJkIil9LG49ZnVuY3Rpb24oKXt0Ll9sYXN0VG91Y2hUYXJnZXR8fHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJtb3VzZSIpfSxyPWZ1bmN0aW9uKGUpe251bGwhPXQuX3RvdWNoVGltZW91dElkJiZjbGVhclRpbWVvdXQodC5fdG91Y2hUaW1lb3V0SWQpLHQuX2xhc3RUb3VjaFRhcmdldD1lLnRhcmdldCx0Ll90b3VjaFRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2xhc3RUb3VjaFRhcmdldD1udWxsfSw2NTApfSxpPWZ1bmN0aW9uKCl7dC5fd2luZG93Rm9jdXNlZD0hMCx0Ll93aW5kb3dGb2N1c1RpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3dpbmRvd0ZvY3VzZWQ9ITF9KX07dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixyLCFjKCl8fHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGkpfSksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsciwhYygpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixpKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0pfSl9LHQucHJvdG90eXBlLl93YXNDYXVzZWRCeVRvdWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O3JldHVybiB0aGlzLl9sYXN0VG91Y2hUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlIGluc3RhbmNlb2YgTm9kZSYmKGU9PT10aGlzLl9sYXN0VG91Y2hUYXJnZXR8fGUuY29udGFpbnModGhpcy5fbGFzdFRvdWNoVGFyZ2V0KSl9LHQucHJvdG90eXBlLl9vbkZvY3VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO2lmKG4mJihuLmNoZWNrQ2hpbGRyZW58fGU9PT10LnRhcmdldCkpe3ZhciByPXRoaXMuX29yaWdpbjtyfHwocj10aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOnRoaXMuX3dhc0NhdXNlZEJ5VG91Y2godCk/InRvdWNoIjoicHJvZ3JhbSIpLHRoaXMuX3NldENsYXNzZXMoZSxyKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxyKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49cn19LHQucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7IW58fG4uY2hlY2tDaGlsZHJlbiYmdC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZS5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxudWxsKSl9LHQucHJvdG90eXBlLl9lbWl0T3JpZ2luPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Lm5leHQoZSl9KX0sdC5wcm90b3R5cGUuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpezE9PSsrdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50JiZ0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpfSx0LnByb3RvdHlwZS5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShvLnkpLE9iamVjdChvLlgpKHUpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksbm49ImFjY2VudCIscm49InByaW1hcnkiLG9uPVsibWF0LWJ1dHRvbiIsIm1hdC1mbGF0LWJ1dHRvbiIsIm1hdC1pY29uLWJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwibWF0LXN0cm9rZWQtYnV0dG9uIiwibWF0LW1pbmktZmFiIiwibWF0LWZhYiJdLGFuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7by5fcGxhdGZvcm09bixvLl9mb2N1c01vbml0b3I9cixvLl9hbmltYXRpb25Nb2RlPWksby5pc1JvdW5kQnV0dG9uPW8uX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksby5pc0ljb25CdXR0b249by5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcih2YXIgYT0wLHM9b247YTxzLmxlbmd0aDthKyspe3ZhciBsPXNbYV07by5faGFzSG9zdEF0dHJpYnV0ZXMobCkmJmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGwpfXJldHVybiBvLl9mb2N1c01vbml0b3IubW9uaXRvcihvLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApLG8uaXNSb3VuZEJ1dHRvbj9vLmNvbG9yPW5uOm8uX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmxhdC1idXR0b24iKSYmKG8uY29sb3I9cm4pLG99cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCl9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH0sZS5wcm90b3R5cGUuX2hhc0hvc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9nZXRIb3N0RWxlbWVudCgpLmhhc0F0dHJpYnV0ZShlKX0pfSxlfShtZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgcj10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuX2Rpc2FibGVkPSExLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPUQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oeWUoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpfSgpKSksc249ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGxuKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudH1mdW5jdGlvbiB1bih0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHR0O2Nhc2UgMTpyZXR1cm4gdFswXTtkZWZhdWx0OnJldHVybiBuZXcgZXQodCl9fWZ1bmN0aW9uIGNuKHQsZSxuLHIsaSxvKXt2b2lkIDA9PT1pJiYoaT17fSksdm9pZCAwPT09byYmKG89e30pO3ZhciBhPVtdLHM9W10sbD0tMSx1PW51bGw7aWYoci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQub2Zmc2V0LHI9bj09bCxjPXImJnV8fHt9O09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9bixzPXRbbl07aWYoIm9mZnNldCIhPT1uKXN3aXRjaChyPWUubm9ybWFsaXplUHJvcGVydHlOYW1lKHIsYSkscyl7Y2FzZSBudDpzPWlbbl07YnJlYWs7Y2FzZSBLOnM9b1tuXTticmVhaztkZWZhdWx0OnM9ZS5ub3JtYWxpemVTdHlsZVZhbHVlKG4scixzLGEpfWNbcl09c30pLHJ8fHMucHVzaChjKSx1PWMsbD1ufSksYS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYW5pbWF0ZSBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAiK2Euam9pbigiXG4gLSAiKSk7cmV0dXJuIHN9ZnVuY3Rpb24gZm4odCxlLG4scil7c3dpdGNoKGUpe2Nhc2Uic3RhcnQiOnQub25TdGFydChmdW5jdGlvbigpe3JldHVybiByKG4mJmhuKG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmaG4obiwiZG9uZSIsdCkpfSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0Lm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiByKG4mJmhuKG4sImRlc3Ryb3kiLHQpKX0pfX1mdW5jdGlvbiBobih0LGUsbil7dmFyIHI9bi50b3RhbFRpbWUsaT1wbih0LmVsZW1lbnQsdC50cmlnZ2VyTmFtZSx0LmZyb21TdGF0ZSx0LnRvU3RhdGUsZXx8dC5waGFzZU5hbWUsdm9pZCAwPT1yP3QudG90YWxUaW1lOnIsISFuLmRpc2FibGVkKSxvPXQuX2RhdGE7cmV0dXJuIG51bGwhPW8mJihpLl9kYXRhPW8pLGl9ZnVuY3Rpb24gcG4odCxlLG4scixpLG8sYSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPSIiKSx2b2lkIDA9PT1vJiYobz0wKSx7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsZnJvbVN0YXRlOm4sdG9TdGF0ZTpyLHBoYXNlTmFtZTppLHRvdGFsVGltZTpvLGRpc2FibGVkOiEhYX19ZnVuY3Rpb24gZG4odCxlLG4pe3ZhciByO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhyPXQuZ2V0KGUpKXx8dC5zZXQoZSxyPW4pOihyPXRbZV0pfHwocj10W2VdPW4pLHJ9ZnVuY3Rpb24gbW4odCl7dmFyIGU9dC5pbmRleE9mKCI6Iik7cmV0dXJuW3Quc3Vic3RyaW5nKDEsZSksdC5zdWJzdHIoZSsxKV19dmFyIHluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LGduPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LHZuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX07aWYobG4oKSl7aWYoeW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0sRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylnbj1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hdGNoZXMoZSl9O2Vsc2V7dmFyIGJuPUVsZW1lbnQucHJvdG90eXBlLF9uPWJuLm1hdGNoZXNTZWxlY3Rvcnx8Ym4ubW96TWF0Y2hlc1NlbGVjdG9yfHxibi5tc01hdGNoZXNTZWxlY3Rvcnx8Ym4ub01hdGNoZXNTZWxlY3Rvcnx8Ym4ud2Via2l0TWF0Y2hlc1NlbGVjdG9yO19uJiYoZ249ZnVuY3Rpb24odCxlKXtyZXR1cm4gX24uYXBwbHkodCxbZV0pfSl9dm49ZnVuY3Rpb24odCxlLG4pe3ZhciByPVtdO2lmKG4pci5wdXNoLmFwcGx5KHIsT2JqZWN0KGQuZCkodC5xdWVyeVNlbGVjdG9yQWxsKGUpKSk7ZWxzZXt2YXIgaT10LnF1ZXJ5U2VsZWN0b3IoZSk7aSYmci5wdXNoKGkpfXJldHVybiByfX12YXIgd249bnVsbCx4bj0hMTtmdW5jdGlvbiBDbih0KXt3bnx8KHduPUVuKCl8fHt9LHhuPSEhd24uc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIHduLnN0eWxlKTt2YXIgZT0hMDtyZXR1cm4gd24uc3R5bGUmJiFmdW5jdGlvbih0KXtyZXR1cm4iZWJraXQiPT10LnN1YnN0cmluZygxLDYpfSh0KSYmIShlPXQgaW4gd24uc3R5bGUpJiZ4biYmKGU9IldlYmtpdCIrdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKWluIHduLnN0eWxlKSxlfWZ1bmN0aW9uIEVuKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGx9dmFyIE9uPWduLFNuPXluLGtuPXZuO2Z1bmN0aW9uIFRuKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKTtlW3JdPXRbbl19KSxlfXZhciBQbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gQ24odCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9uKHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBTbih0LGUpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGtuKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnx8IiJ9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuIHZvaWQgMD09PW8mJihvPVtdKSxuZXcgdHQobixyKX0sdH0oKSxBbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuTk9PUD1uZXcgUG4sdH0oKSxqbj0xZTM7ZnVuY3Rpb24gSW4odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIWV8fGUubGVuZ3RoPDI/MDpNbihwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIE1uKHQsZSl7c3dpdGNoKGUpe2Nhc2UicyI6cmV0dXJuIHQqam47ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gTm4odCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGE9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaCgnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJykse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9TW4ocGFyc2VGbG9hdChhWzFdKSxhWzJdKTt2YXIgcz1hWzNdO251bGwhPXMmJihpPU1uKE1hdGguZmxvb3IocGFyc2VGbG9hdChzKSksYVs0XSkpO3ZhciBsPWFbNV07bCYmKG89bCl9ZWxzZSByPXQ7aWYoIW4pe3ZhciB1PSExLGM9ZS5sZW5ndGg7cjwwJiYoZS5wdXNoKCJEdXJhdGlvbiB2YWx1ZXMgYmVsb3cgMCBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgYW5pbWF0aW9uIHN0ZXAuIiksdT0hMCksaTwwJiYoZS5wdXNoKCJEZWxheSB2YWx1ZXMgYmVsb3cgMCBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgYW5pbWF0aW9uIHN0ZXAuIiksdT0hMCksdSYmZS5zcGxpY2UoYywwLCdUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZC4nKX1yZXR1cm57ZHVyYXRpb246cixkZWxheTppLGVhc2luZzpvfX0odCxlLG4pfWZ1bmN0aW9uIFJuKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pLGV9ZnVuY3Rpb24gRG4odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPXt9KSxlKWZvcih2YXIgciBpbiB0KW5bcl09dFtyXTtlbHNlIFJuKHQsbik7cmV0dXJuIG59ZnVuY3Rpb24gRm4odCxlKXt0LnN0eWxlJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXFuKG4pO3Quc3R5bGVbcl09ZVtuXX0pfWZ1bmN0aW9uIExuKHQsZSl7dC5zdHlsZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1xbihlKTt0LnN0eWxlW25dPSIifSl9ZnVuY3Rpb24gVm4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/MT09dC5sZW5ndGg/dFswXTpYKHQpOnR9dmFyIEJuPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIHpuKHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxyPXZvaWQgMDtyPUJuLmV4ZWMobik7KWUucHVzaChyWzFdKTtCbi5sYXN0SW5kZXg9MH1yZXR1cm4gZX1mdW5jdGlvbiBVbih0LGUsbil7dmFyIHI9dC50b1N0cmluZygpLGk9ci5yZXBsYWNlKEJuLGZ1bmN0aW9uKHQscil7dmFyIGk9ZVtyXTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eShyKXx8KG4ucHVzaCgiUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBwYXJhbSAiK3IpLGk9IiIpLGkudG9TdHJpbmcoKX0pO3JldHVybiBpPT1yP3Q6aX1mdW5jdGlvbiBIbih0KXtmb3IodmFyIGU9W10sbj10Lm5leHQoKTshbi5kb25lOyllLnB1c2gobi52YWx1ZSksbj10Lm5leHQoKTtyZXR1cm4gZX12YXIgUW49Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHFuKHQpe3JldHVybiB0LnJlcGxhY2UoUW4sZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIHRbMV0udG9VcHBlckNhc2UoKX0pfWZ1bmN0aW9uIEduKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBZbih0LGUsbil7dmFyIHI9T2JqZWN0LmtleXMobik7aWYoci5sZW5ndGgmJmUubGVuZ3RoKXt2YXIgaT1lWzBdLG89W107aWYoci5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuaGFzT3duUHJvcGVydHkodCl8fG8ucHVzaCh0KSxpW3RdPW5bdF19KSxvLmxlbmd0aClmb3IodmFyIGE9ZnVuY3Rpb24oKXt2YXIgbj1lW3NdO28uZm9yRWFjaChmdW5jdGlvbihlKXtuW2VdPVpuKHQsZSl9KX0scz0xO3M8ZS5sZW5ndGg7cysrKWEoKX1yZXR1cm4gZX1mdW5jdGlvbiBXbih0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIFpuKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfXZhciBLbj0iKiIsWG49bmV3IFNldChbInRydWUiLCIxIl0pLCRuPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gSm4odCxlKXt2YXIgbj1Ybi5oYXModCl8fCRuLmhhcyh0KSxyPVhuLmhhcyhlKXx8JG4uaGFzKGUpO3JldHVybiBmdW5jdGlvbihpLG8pe3ZhciBhPXQ9PUtufHx0PT1pLHM9ZT09S258fGU9PW87cmV0dXJuIWEmJm4mJiJib29sZWFuIj09dHlwZW9mIGkmJihhPWk/WG4uaGFzKHQpOiRuLmhhcyh0KSksIXMmJnImJiJib29sZWFuIj09dHlwZW9mIG8mJihzPW8/WG4uaGFzKGUpOiRuLmhhcyhlKSksYSYmc319dmFyIHRyPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIGVyKHQsZSxuKXtyZXR1cm4gbmV3IG5yKHQpLmJ1aWxkKGUsbil9dmFyIG5yPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kcml2ZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgcnIoZSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobiksV24odGhpcyxWbih0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5xdWVyeUNvdW50PTAsaT1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LGw9cy5uYW1lO2wudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT1sfWVsc2UgaWYoMT09dC50eXBlKXt2YXIgdT1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO3IrPXUucXVlcnlDb3VudCxpKz11LmRlcENvdW50LGEucHVzaCh1KX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpyLGRlcENvdW50Omksb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIGk9bmV3IFNldCxvPXJ8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXIodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt6bihlW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe28uaGFzT3duUHJvcGVydHkodCl8fGkuYWRkKHQpfSl9KX19KSxpLnNpemUpe3ZhciBhPUhuKGkudmFsdWVzKCkpO2UuZXJyb3JzLnB1c2goJ3N0YXRlKCInK3QubmFtZSsnIiwgLi4uKSBtdXN0IGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgc3R5bGUgc3Vic3RpdHV0aW9uczogJythLmpvaW4oIiwgIikpfX1yZXR1cm57dHlwZTowLG5hbWU6dC5uYW1lLHN0eWxlOm4sb3B0aW9uczpyP3twYXJhbXM6cn06bnVsbH19LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDt2YXIgbixyLGksbz1Xbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOihuPXQuZXhwcixyPWUuZXJyb3JzLGk9W10sInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUsbil7aWYoIjoiPT10WzBdKXt2YXIgcj1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQoZSk+cGFyc2VGbG9hdCh0KX07Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKTxwYXJzZUZsb2F0KHQpfTtkZWZhdWx0OnJldHVybiBlLnB1c2goJ1RoZSB0cmFuc2l0aW9uIGFsaWFzIHZhbHVlICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLCIqID0+ICoifX0odCxuKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdm9pZCBlLnB1c2gocik7dD1yfXZhciBpPXQubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIG4ucHVzaCgnVGhlIHByb3ZpZGVkIHRyYW5zaXRpb24gZXhwcmVzc2lvbiAiJyt0KyciIGlzIG5vdCBzdXBwb3J0ZWQnKSxlO3ZhciBvPWlbMV0sYT1pWzJdLHM9aVszXTtlLnB1c2goSm4obyxzKSksIjwiIT1hWzBdfHxvPT1LbiYmcz09S258fGUucHVzaChKbihzLG8pKX0odCxpLHIpfSk6aS5wdXNoKG4pLGkpLGFuaW1hdGlvbjpvLHF1ZXJ5Q291bnQ6ZS5xdWVyeUNvdW50LGRlcENvdW50OmUuZGVwQ291bnQsb3B0aW9uczpvcih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJue3R5cGU6MixzdGVwczp0LnN0ZXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gV24obix0LGUpfSksb3B0aW9uczpvcih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmN1cnJlbnRUaW1lLGk9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9cjt2YXIgbz1XbihuLHQsZSk7cmV0dXJuIGk9TWF0aC5tYXgoaSxlLmN1cnJlbnRUaW1lKSxvfSk7cmV0dXJuIGUuY3VycmVudFRpbWU9aSx7dHlwZTozLHN0ZXBzOm8sb3B0aW9uczpvcih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0LGUpe3ZhciBuPW51bGw7aWYodC5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSluPXQ7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIGFyKE5uKHQsZSkuZHVyYXRpb24sMCwiIik7dmFyIHI9dDtpZihyLnNwbGl0KC9ccysvKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJ7Ij09dC5jaGFyQXQoMCkmJiJ7Ij09dC5jaGFyQXQoMSl9KSl7dmFyIGk9YXIoMCwwLCIiKTtyZXR1cm4gaS5keW5hbWljPSEwLGkuc3RyVmFsdWU9cixpfXJldHVybiBhcigobj1ufHxObihyLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1yO3ZhciBpPXQuc3R5bGVzP3Quc3R5bGVzOiQoe30pO2lmKDU9PWkudHlwZSluPXRoaXMudmlzaXRLZXlmcmFtZXMoaSxlKTtlbHNle3ZhciBvPXQuc3R5bGVzLGE9ITE7aWYoIW8pe2E9ITA7dmFyIHM9e307ci5lYXNpbmcmJihzLmVhc2luZz1yLmVhc2luZyksbz0kKHMpfWUuY3VycmVudFRpbWUrPXIuZHVyYXRpb24rci5kZWxheTt2YXIgbD10aGlzLnZpc2l0U3R5bGUobyxlKTtsLmlzRW1wdHlTdGVwPWEsbj1sfXJldHVybiBlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczpyLHN0eWxlOm4sb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KG4sZSksbn0sdC5wcm90b3R5cGUuX21ha2VTdHlsZUFzdD1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO0FycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0P3Q9PUs/bi5wdXNoKHQpOmUuZXJyb3JzLnB1c2goIlRoZSBwcm92aWRlZCBzdHlsZSBzdHJpbmcgdmFsdWUgIit0KyIgaXMgbm90IGFsbG93ZWQuIik6bi5wdXNoKHQpfSk6bi5wdXNoKHQuc3R5bGVzKTt2YXIgcj0hMSxpPW51bGw7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtpZihpcih0KSl7dmFyIGU9dCxuPWUuZWFzaW5nO2lmKG4mJihpPW4sZGVsZXRlIGUuZWFzaW5nKSwhcilmb3IodmFyIG8gaW4gZSlpZihlW29dLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7cj0hMDticmVha319fSkse3R5cGU6NixzdHlsZXM6bixlYXNpbmc6aSxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOnIsb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlU3R5bGVBc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtyJiZvPjAmJihvLT1yLmR1cmF0aW9uK3IuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKG4uX2RyaXZlci52YWxpZGF0ZVN0eWxlUHJvcGVydHkocikpe3ZhciBhLHMsbCx1PWUuY29sbGVjdGVkU3R5bGVzW2UuY3VycmVudFF1ZXJ5U2VsZWN0b3JdLGM9dVtyXSxmPSEwO2MmJihvIT1pJiZvPj1jLnN0YXJ0VGltZSYmaTw9Yy5lbmRUaW1lJiYoZS5lcnJvcnMucHVzaCgnVGhlIENTUyBwcm9wZXJ0eSAiJytyKyciIHRoYXQgZXhpc3RzIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK2Muc3RhcnRUaW1lKydtcyIgYW5kICInK2MuZW5kVGltZSsnbXMiIGlzIGFsc28gYmVpbmcgYW5pbWF0ZWQgaW4gYSBwYXJhbGxlbCBhbmltYXRpb24gYmV0d2VlbiB0aGUgdGltZXMgb2YgIicrbysnbXMiIGFuZCAiJytpKydtcyInKSxmPSExKSxvPWMuc3RhcnRUaW1lKSxmJiYodVtyXT17c3RhcnRUaW1lOm8sZW5kVGltZTppfSksZS5vcHRpb25zJiYoYT1lLmVycm9ycyxzPWUub3B0aW9ucy5wYXJhbXN8fHt9LChsPXpuKHRbcl0pKS5sZW5ndGgmJmwuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK3IrJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIikscjt2YXIgaT0wLG89W10sYT0hMSxzPSExLGw9MCx1PXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPW4uX21ha2VTdHlsZUFzdCh0LGUpLHU9bnVsbCE9ci5vZmZzZXQ/ci5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXIodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYoaXIodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShyLnN0eWxlcyksYz0wO3JldHVybiBudWxsIT11JiYoaSsrLGM9ci5vZmZzZXQ9dSkscz1zfHxjPDB8fGM+MSxhPWF8fGM8bCxsPWMsby5wdXNoKGMpLHJ9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgYz10LnN0ZXBzLmxlbmd0aCxmPTA7aT4wJiZpPGM/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09aSYmKGY9MS8oYy0xKSk7dmFyIGg9Yy0xLHA9ZS5jdXJyZW50VGltZSxkPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09ZC5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIGE9Zj4wP2k9PWg/MTpmKmk6b1tpXSxzPWEqbTtlLmN1cnJlbnRUaW1lPXArZC5kZWxheStzLGQuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxyLnN0eWxlcy5wdXNoKHQpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpXbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVDaGlsZD1mdW5jdGlvbih0LGUpe3JldHVybiBlLmRlcENvdW50Kysse3R5cGU6OSxvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVSZWY9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixyPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5jdXJyZW50UXVlcnk9dDt2YXIgaT1PYmplY3QoZC5jKShmdW5jdGlvbih0KXt2YXIgZT0hIXQuc3BsaXQoL1xzKixccyovKS5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiI6c2VsZiI9PXR9KTtyZXR1cm4gZSYmKHQ9dC5yZXBsYWNlKHRyLCIiKSksW3Q9dC5yZXBsYWNlKC9AXCovZywiLm5nLXRyaWdnZXIiKS5yZXBsYWNlKC9AXHcrL2csZnVuY3Rpb24odCl7cmV0dXJuIi5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSl9KS5yZXBsYWNlKC86YW5pbWF0aW5nL2csIi5uZy1hbmltYXRpbmciKSxlXX0odC5zZWxlY3RvciksMiksbz1pWzBdLGE9aVsxXTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4ubGVuZ3RoP24rIiAiK286byxkbihlLmNvbGxlY3RlZFN0eWxlcyxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yLHt9KTt2YXIgcz1Xbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6byxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjphLGFuaW1hdGlvbjpzLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaCgic3RhZ2dlcigpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIHF1ZXJ5KCkiKTt2YXIgbj0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpObih0LnRpbWluZ3MsZS5lcnJvcnMsITApO3JldHVybnt0eXBlOjEyLGFuaW1hdGlvbjpXbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOm4sb3B0aW9uczpudWxsfX0sdH0oKSxycj1mdW5jdGlvbih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9e30sdGhpcy5vcHRpb25zPW51bGx9O2Z1bmN0aW9uIGlyKHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gb3IodCl7dmFyIGU7cmV0dXJuIHQ/KHQ9Um4odCkpLnBhcmFtcyYmKHQucGFyYW1zPShlPXQucGFyYW1zKT9SbihlKTpudWxsKTp0PXt9LHR9ZnVuY3Rpb24gYXIodCxlLG4pe3JldHVybntkdXJhdGlvbjp0LGRlbGF5OmUsZWFzaW5nOm59fWZ1bmN0aW9uIHNyKHQsZSxuLHIsaSxvLGEscyl7cmV0dXJuIHZvaWQgMD09PWEmJihhPW51bGwpLHZvaWQgMD09PXMmJihzPSExKSx7dHlwZToxLGVsZW1lbnQ6dCxrZXlmcmFtZXM6ZSxwcmVTdHlsZVByb3BzOm4scG9zdFN0eWxlUHJvcHM6cixkdXJhdGlvbjppLGRlbGF5Om8sdG90YWxUaW1lOmkrbyxlYXNpbmc6YSxzdWJUaW1lbGluZTpzfX12YXIgbHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbWFwPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN1bWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gZT90aGlzLl9tYXAuZGVsZXRlKHQpOmU9W10sZX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFwLmdldCh0KTtufHx0aGlzLl9tYXAuc2V0KHQsbj1bXSksbi5wdXNoLmFwcGx5KG4sT2JqZWN0KGQuZCkoZSkpfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fbWFwLmNsZWFyKCl9LHR9KCksdXI9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLGNyPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBmcih0LGUsbixyLGksbyxhLHMsbCx1KXtyZXR1cm4gdm9pZCAwPT09byYmKG89e30pLHZvaWQgMD09PWEmJihhPXt9KSx2b2lkIDA9PT11JiYodT1bXSksKG5ldyBocikuYnVpbGRLZXlmcmFtZXModCxlLG4scixpLG8sYSxzLGwsdSl9dmFyIGhyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSl7dm9pZCAwPT09dSYmKHU9W10pLGw9bHx8bmV3IGxyO3ZhciBjPW5ldyBkcih0LGUsbCxyLGksdSxbXSk7Yy5vcHRpb25zPXMsYy5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtvXSxudWxsLGMuZXJyb3JzLHMpLFduKHRoaXMsbixjKTt2YXIgZj1jLnRpbWVsaW5lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29udGFpbnNBbmltYXRpb24oKX0pO2lmKGYubGVuZ3RoJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgpe3ZhciBoPWZbZi5sZW5ndGgtMV07aC5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpfHxoLnNldFN0eWxlcyhbYV0sbnVsbCxjLmVycm9ycyxzKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnVpbGRLZXlmcmFtZXMoKX0pOltzcihlLFtdLFtdLFtdLDAsMCwiIiwhMSldfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1Ykluc3RydWN0aW9ucy5jb25zdW1lKGUuZWxlbWVudCk7aWYobil7dmFyIHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyksaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKG4scixyLm9wdGlvbnMpO2khPW8mJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG8pfWUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO24udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixuKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShuLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxpPW51bGwhPW4uZHVyYXRpb24/SW4obi5kdXJhdGlvbik6bnVsbCxvPW51bGwhPW4uZGVsYXk/SW4obi5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PWkmJnQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZSh0LGksbyk7cj1NYXRoLm1heChyLG4uZHVyYXRpb24rbi5kZWxheSl9KSxyfSx0LnByb3RvdHlwZS52aXNpdFJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe2UudXBkYXRlT3B0aW9ucyh0Lm9wdGlvbnMsITApLFduKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLnN1YkNvbnRleHRDb3VudCxpPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKChpPWUuY3JlYXRlU3ViQ29udGV4dChvKSkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PWkucHJldmlvdXNOb2RlLnR5cGUmJihpLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxpLnByZXZpb3VzTm9kZT1wcik7dmFyIGE9SW4oby5kZWxheSk7aS5kZWxheU5leHRTdGVwKGEpfXQuc3RlcHMubGVuZ3RoJiYodC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBXbihuLHQsaSl9KSxpLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxpLnN1YkNvbnRleHRDb3VudD5yJiZpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdEdyb3VwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPVtdLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9Jbih0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxXbihuLGEscyksaT1NYXRoLm1heChpLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxyLnB1c2gocy5jdXJyZW50VGltZWxpbmUpfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHQpfSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0VGltaW5nPWZ1bmN0aW9uKHQsZSl7aWYodC5keW5hbWljKXt2YXIgbj10LnN0clZhbHVlO3JldHVybiBObihlLnBhcmFtcz9VbihuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO24uZGVsYXkmJihlLmluY3JlbWVudFRpbWUobi5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7dmFyIGk9dC5zdHlsZTs1PT1pLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhpLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGksZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50VGltZWxpbmUscj1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshciYmbi5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoJiZuLmZvcndhcmRGcmFtZSgpO3ZhciBpPXImJnIuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAoaSk6bi5zZXRTdHlsZXModC5zdHlsZXMsaSxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixpPW4uZHVyYXRpb24sbz1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7by5lYXNpbmc9bi5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtvLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqaSksby5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxvLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhvKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyK2kpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaT10Lm9wdGlvbnN8fHt9LG89aS5kZWxheT9JbihpLmRlbGF5KTowO28mJig2PT09ZS5wcmV2aW91c05vZGUudHlwZXx8MD09ciYmZS5jdXJyZW50VGltZWxpbmUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCkmJihlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxlLnByZXZpb3VzTm9kZT1wcik7dmFyIGE9cixzPWUuaW52b2tlUXVlcnkodC5zZWxlY3Rvcix0Lm9yaWdpbmFsU2VsZWN0b3IsdC5saW1pdCx0LmluY2x1ZGVTZWxmLCEhaS5vcHRpb25hbCxlLmVycm9ycyk7ZS5jdXJyZW50UXVlcnlUb3RhbD1zLmxlbmd0aDt2YXIgbD1udWxsO3MuZm9yRWFjaChmdW5jdGlvbihyLGkpe2UuY3VycmVudFF1ZXJ5SW5kZXg9aTt2YXIgcz1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zLHIpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxyPT09ZS5lbGVtZW50JiYobD1zLmN1cnJlbnRUaW1lbGluZSksV24obix0LmFuaW1hdGlvbixzKSxzLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxhPU1hdGgubWF4KGEscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksZS5jdXJyZW50UXVlcnlJbmRleD0wLGUuY3VycmVudFF1ZXJ5VG90YWw9MCxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKSxsJiYoZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKSxlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTdGFnZ2VyPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5wYXJlbnRDb250ZXh0LHI9ZS5jdXJyZW50VGltZWxpbmUsaT10LnRpbWluZ3Msbz1NYXRoLmFicyhpLmR1cmF0aW9uKSxhPW8qKGUuY3VycmVudFF1ZXJ5VG90YWwtMSkscz1vKmUuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGkuZHVyYXRpb248MD8icmV2ZXJzZSI6aS5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6cz1hLXM7YnJlYWs7Y2FzZSJmdWxsIjpzPW4uY3VycmVudFN0YWdnZXJUaW1lfXZhciBsPWUuY3VycmVudFRpbWVsaW5lO3MmJmwuZGVsYXlOZXh0U3RlcChzKTt2YXIgdT1sLmN1cnJlbnRUaW1lO1duKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxuLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLXUrKHIuc3RhcnRUaW1lLW4uY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9LHR9KCkscHI9e30sZHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9bix0aGlzLl9lbnRlckNsYXNzTmFtZT1yLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWksdGhpcy5lcnJvcnM9byx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9cHIsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPXN8fG5ldyBtcih0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciByPXQsaT10aGlzLm9wdGlvbnM7bnVsbCE9ci5kdXJhdGlvbiYmKGkuZHVyYXRpb249SW4oci5kdXJhdGlvbikpLG51bGwhPXIuZGVsYXkmJihpLmRlbGF5PUluKHIuZGVsYXkpKTt2YXIgbz1yLnBhcmFtcztpZihvKXt2YXIgYT1pLnBhcmFtczthfHwoYT10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UmJmEuaGFzT3duUHJvcGVydHkodCl8fChhW3RdPVVuKG9bdF0sYSxuLmVycm9ycykpfSl9fX0sdC5wcm90b3R5cGUuX2NvcHlPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5vcHRpb25zKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe3ZhciBuPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9fXJldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVTdWJDb250ZXh0PWZ1bmN0aW9uKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgaT1ufHx0aGlzLmVsZW1lbnQsbz1uZXcgdCh0aGlzLl9kcml2ZXIsaSx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGkscnx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99LHQucHJvdG90eXBlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9cHIsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9LHQucHJvdG90eXBlLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LGk9bmV3IHlyKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChpKSxyfSx0LnByb3RvdHlwZS5pbmNyZW1lbnRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX0sdC5wcm90b3R5cGUuaW52b2tlUXVlcnk9ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhPVtdO2lmKHImJmEucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKHVyLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoY3IsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTt2YXIgcz10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJihzPW48MD9zLnNsaWNlKHMubGVuZ3RoK24scy5sZW5ndGgpOnMuc2xpY2UoMCxuKSksYS5wdXNoLmFwcGx5KGEsT2JqZWN0KGQuZCkocykpfXJldHVybiBpfHwwIT1hLmxlbmd0aHx8by5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLGF9LHR9KCksbXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fEssZS5fY3VycmVudEtleWZyYW1lW3RdPUt9KSx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfSx0LnByb3RvdHlwZS5zZXRTdHlsZXM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztlJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9ZSk7dmFyIG89ciYmci5wYXJhbXN8fHt9LGE9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7IioiPT09dD8obj1ufHxPYmplY3Qua2V5cyhlKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPUt9KTpEbih0LCExLHIpfSkscn0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1VbihhW3RdLG8sbik7aS5fcGVuZGluZ1N0eWxlc1t0XT1lLGkuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCl8fChpLl9iYWNrRmlsbFt0XT1pLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KT9pLl9nbG9iYWxUaW1lbGluZVN0eWxlc1t0XTpLKSxpLl91cGRhdGVTdHlsZSh0LGUpfSl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVzVG9LZXlmcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wZW5kaW5nU3R5bGVzLG49T2JqZWN0LmtleXMoZSk7MCE9bi5sZW5ndGgmJih0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LG4uZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9jdXJyZW50S2V5ZnJhbWVbbl09ZVtuXX0pLE9iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KGUpfHwodC5fY3VycmVudEtleWZyYW1lW2VdPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV0pfSkpfSx0LnByb3RvdHlwZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXTt0Ll9wZW5kaW5nU3R5bGVzW2VdPW4sdC5fdXBkYXRlU3R5bGUoZSxuKX0pfSx0LnByb3RvdHlwZS5nZXRGaW5hbEtleWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvcGVydGllcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9ZS5fc3R5bGVTdW1tYXJ5W25dLGk9dC5fc3R5bGVTdW1tYXJ5W25dOyghcnx8aS50aW1lPnIudGltZSkmJmUuX3VwZGF0ZVN0eWxlKG4saS52YWx1ZSl9KX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7dmFyIGU9bmV3IFNldCxuPW5ldyBTZXQscj0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLGk9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz1EbihvLCEwKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXNbdF07cj09bnQ/ZS5hZGQodCk6cj09SyYmbi5hZGQodCl9KSxyfHwocy5vZmZzZXQ9YS90LmR1cmF0aW9uKSxpLnB1c2gocyl9KTt2YXIgbz1lLnNpemU/SG4oZS52YWx1ZXMoKSk6W10sYT1uLnNpemU/SG4obi52YWx1ZXMoKSk6W107aWYocil7dmFyIHM9aVswXSxsPVJuKHMpO3Mub2Zmc2V0PTAsbC5vZmZzZXQ9MSxpPVtzLGxdfXJldHVybiBzcih0aGlzLmVsZW1lbnQsaSxvLGEsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9LHR9KCkseXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSxzKXt2b2lkIDA9PT1zJiYocz0hMSk7dmFyIGw9dC5jYWxsKHRoaXMsZSxuLGEuZGVsYXkpfHx0aGlzO3JldHVybiBsLmVsZW1lbnQ9bixsLmtleWZyYW1lcz1yLGwucHJlU3R5bGVQcm9wcz1pLGwucG9zdFN0eWxlUHJvcHM9byxsLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1zLGwudGltaW5ncz17ZHVyYXRpb246YS5kdXJhdGlvbixkZWxheTphLmRlbGF5LGVhc2luZzphLmVhc2luZ30sbH1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5jb250YWluc0FuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX0sZS5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmtleWZyYW1lcyxlPXRoaXMudGltaW5ncyxuPWUuZGVsYXkscj1lLmR1cmF0aW9uLGk9ZS5lYXNpbmc7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJm4pe3ZhciBvPVtdLGE9cituLHM9bi9hLGw9RG4odFswXSwhMSk7bC5vZmZzZXQ9MCxvLnB1c2gobCk7dmFyIHU9RG4odFswXSwhMSk7dS5vZmZzZXQ9Z3Iocyksby5wdXNoKHUpO2Zvcih2YXIgYz10Lmxlbmd0aC0xLGY9MTtmPD1jO2YrKyl7dmFyIGg9RG4odFtmXSwhMSk7aC5vZmZzZXQ9Z3IoKG4raC5vZmZzZXQqcikvYSksby5wdXNoKGgpfXI9YSxuPTAsaT0iIix0PW99cmV0dXJuIHNyKHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLHIsbixpLCEwKX0sZX0obXIpO2Z1bmN0aW9uIGdyKHQsZSl7dm9pZCAwPT09ZSYmKGU9Myk7dmFyIG49TWF0aC5wb3coMTAsZS0xKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259dmFyIHZyPWZ1bmN0aW9uKCl7fSxicj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcW4odCl9LGUucHJvdG90eXBlLm5vcm1hbGl6ZVN0eWxlVmFsdWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9IiIsbz1uLnRvU3RyaW5nKCkudHJpbSgpO2lmKF9yW2VdJiYwIT09biYmIjAiIT09bilpZigibnVtYmVyIj09dHlwZW9mIG4paT0icHgiO2Vsc2V7dmFyIGE9bi5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2goIlBsZWFzZSBwcm92aWRlIGEgQ1NTIHVuaXQgdmFsdWUgZm9yICIrdCsiOiIrbil9cmV0dXJuIG8raX0sZX0odnIpLF9yPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiJ3aWR0aCxoZWlnaHQsbWluV2lkdGgsbWluSGVpZ2h0LG1heFdpZHRoLG1heEhlaWdodCxsZWZ0LHRvcCxib3R0b20scmlnaHQsZm9udFNpemUsb3V0bGluZVdpZHRoLG91dGxpbmVPZmZzZXQscGFkZGluZ1RvcCxwYWRkaW5nTGVmdCxwYWRkaW5nQm90dG9tLHBhZGRpbmdSaWdodCxtYXJnaW5Ub3AsbWFyZ2luTGVmdCxtYXJnaW5Cb3R0b20sbWFyZ2luUmlnaHQsYm9yZGVyUmFkaXVzLGJvcmRlcldpZHRoLGJvcmRlclRvcFdpZHRoLGJvcmRlckxlZnRXaWR0aCxib3JkZXJSaWdodFdpZHRoLGJvcmRlckJvdHRvbVdpZHRoLHRleHRJbmRlbnQscGVyc3BlY3RpdmUiLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT0hMH0pLGV9KCk7ZnVuY3Rpb24gd3IodCxlLG4scixpLG8sYSxzLGwsdSxjLGYsaCl7cmV0dXJue3R5cGU6MCxlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSxpc1JlbW92YWxUcmFuc2l0aW9uOmksZnJvbVN0YXRlOm4sZnJvbVN0eWxlczpvLHRvU3RhdGU6cix0b1N0eWxlczphLHRpbWVsaW5lczpzLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6dSxwb3N0U3R5bGVQcm9wczpjLHRvdGFsVGltZTpmLGVycm9yczpofX12YXIgeHI9e30sQ3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl90cmlnZ2VyTmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fc3RhdGVTdHlsZXM9bn1yZXR1cm4gdC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdChlLG4scixpKX0pfSh0aGlzLmFzdC5tYXRjaGVycyx0LGUsbixyKX0sdC5wcm90b3R5cGUuYnVpbGRTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX3N0YXRlU3R5bGVzWyIqIl0saT10aGlzLl9zdGF0ZVN0eWxlc1t0XSxvPXI/ci5idWlsZFN0eWxlcyhlLG4pOnt9O3JldHVybiBpP2kuYnVpbGRTdHlsZXMoZSxuKTpvfSx0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1KXt2YXIgYz1bXSxmPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHx4cixoPXRoaXMuYnVpbGRTdHlsZXMobixhJiZhLnBhcmFtc3x8eHIsYykscD1zJiZzLnBhcmFtc3x8eHIsbT10aGlzLmJ1aWxkU3R5bGVzKHIscCxjKSx5PW5ldyBTZXQsZz1uZXcgTWFwLHY9bmV3IE1hcCxiPSJ2b2lkIj09PXIsXz17cGFyYW1zOk9iamVjdChkLmEpKHt9LGYscCl9LHc9dT9bXTpmcih0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLGksbyxoLG0sXyxsLGMpLHg9MDtpZih3LmZvckVhY2goZnVuY3Rpb24odCl7eD1NYXRoLm1heCh0LmR1cmF0aW9uK3QuZGVsYXkseCl9KSxjLmxlbmd0aClyZXR1cm4gd3IoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLHIsYixoLG0sW10sW10sZyx2LHgsYyk7dy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZWxlbWVudCxyPWRuKGcsbix7fSk7dC5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHJbdF09ITB9KTt2YXIgaT1kbih2LG4se30pO3QucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaVt0XT0hMH0pLG4hPT1lJiZ5LmFkZChuKX0pO3ZhciBDPUhuKHkudmFsdWVzKCkpO3JldHVybiB3cihlLHRoaXMuX3RyaWdnZXJOYW1lLG4scixiLGgsbSx3LEMsZyx2LHgpfSx0fSgpLEVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWV9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e30scj1Sbih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07bnVsbCE9biYmKHJbZV09bil9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPXQ7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1pW3RdO28ubGVuZ3RoPjEmJihvPVVuKG8scixlKSksblt0XT1vfSl9fSksbn0sdH0oKSxPcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPXt9LGUuc3RhdGVzLmZvckVhY2goZnVuY3Rpb24odCl7bi5zdGF0ZXNbdC5uYW1lXT1uZXcgRXIodC5zdHlsZSx0Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fHt9KX0pLFNyKHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLFNyKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxlLnRyYW5zaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7bi50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IENyKHQsZSxuLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249bmV3IENyKHQse3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOltmdW5jdGlvbih0LGUpe3JldHVybiEwfV0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0aGlzLnN0YXRlcyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGFpbnNRdWVyaWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tYXRjaFRyYW5zaXRpb249ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGkpe3JldHVybiBpLm1hdGNoKHQsZSxuLHIpfSl8fG51bGx9LHQucHJvdG90eXBlLm1hdGNoU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLG4pfSx0fSgpO2Z1bmN0aW9uIFNyKHQsZSxuKXt0Lmhhc093blByb3BlcnR5KGUpP3QuaGFzT3duUHJvcGVydHkobil8fCh0W25dPXRbZV0pOnQuaGFzT3duUHJvcGVydHkobikmJih0W2VdPXRbbl0pfXZhciBrcj1uZXcgbHIsVHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fZHJpdmVyPXQsdGhpcy5fbm9ybWFsaXplcj1lLHRoaXMuX2FuaW1hdGlvbnM9e30sdGhpcy5fcGxheWVyc0J5SWQ9e30sdGhpcy5wbGF5ZXJzPVtdfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPVtdLHI9ZXIodGhpcy5fZHJpdmVyLGUsbik7aWYobi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYnVpbGQgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrbi5qb2luKCJcbiIpKTt0aGlzLl9hbmltYXRpb25zW3RdPXJ9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5lbGVtZW50LGk9Y24oMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxuKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixpLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGksbz1bXSxhPXRoaXMuX2FuaW1hdGlvbnNbdF0scz1uZXcgTWFwO2lmKGE/KGk9ZnIodGhpcy5fZHJpdmVyLGUsYSwibmctZW50ZXIiLCJuZy1sZWF2ZSIse30se30sbixrcixvKSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1kbihzLHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPW51bGx9KX0pOihvLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxpPVtdKSxvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrby5qb2luKCJcbiIpKTtzLmZvckVhY2goZnVuY3Rpb24odCxlKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ci5fZHJpdmVyLmNvbXB1dGVTdHlsZShlLG4sSyl9KX0pO3ZhciBsPXVuKGkubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXMuZ2V0KHQuZWxlbWVudCk7cmV0dXJuIHIuX2J1aWxkUGxheWVyKHQse30sZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkW3RdPWwsbC5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gci5kZXN0cm95KHQpfSksdGhpcy5wbGF5ZXJzLnB1c2gobCksbH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksZGVsZXRlIHRoaXMuX3BsYXllcnNCeUlkW3RdO3ZhciBuPXRoaXMucGxheWVycy5pbmRleE9mKGUpO24+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobiwxKX0sdC5wcm90b3R5cGUuX2dldFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wbGF5ZXJzQnlJZFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHRoZSB0aW1lbGluZSBwbGF5ZXIgcmVmZXJlbmNlZCBieSAiK3QpO3JldHVybiBlfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9cG4oZSwiIiwiIiwiIik7cmV0dXJuIGZuKHRoaXMuX2dldFBsYXllcih0KSxuLGksciksZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5jb21tYW5kPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCJyZWdpc3RlciIhPW4paWYoImNyZWF0ZSIhPW4pe3ZhciBpPXRoaXMuX2dldFBsYXllcih0KTtzd2l0Y2gobil7Y2FzZSJwbGF5IjppLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjppLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6aS5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6aS5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOmkuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjppLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjppLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoclswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KHQpfX1lbHNlIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7ZWxzZSB0aGlzLnJlZ2lzdGVyKHQsclswXSl9LHR9KCksUHI9W10sQXI9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LGpyPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxJcj0iX19uZ19yZW1vdmVkIixNcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT0iIiksdGhpcy5uYW1lc3BhY2VJZD1lO3ZhciBuPXQmJnQuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dD90Om51bGx9KG4/dC52YWx1ZTp0KSxuKXt2YXIgcj1Sbih0KTtkZWxldGUgci52YWx1ZSx0aGlzLm9wdGlvbnM9cn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYWJzb3JiT3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10LnBhcmFtcztpZihlKXt2YXIgbj10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7bnVsbD09blt0XSYmKG5bdF09ZVt0XSl9KX19LHR9KCksTnI9bmV3IE1yKCJ2b2lkIiksUnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5ob3N0RWxlbWVudD1lLHRoaXMuX2VuZ2luZT1uLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz17fSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrdCxIcihlLHRoaXMuX2hvc3RDbGFzc05hbWUpfXJldHVybiB0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGksbz10aGlzO2lmKCF0aGlzLl90cmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgYmVjYXVzZSB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIicrZSsiXCIgZG9lc24ndCBleGlzdCEiKTtpZihudWxsPT1ufHwwPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgYmVjYXVzZSB0aGUgcHJvdmlkZWQgZXZlbnQgaXMgdW5kZWZpbmVkIScpO2lmKCJzdGFydCIhPShpPW4pJiYiZG9uZSIhPWkpdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHRyaWdnZXIgZXZlbnQgIicrbisnIiBmb3IgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCEnKTt2YXIgYT1kbih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOnJ9O2EucHVzaChzKTt2YXIgbD1kbih0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQse30pO3JldHVybiBsLmhhc093blByb3BlcnR5KGUpfHwoSHIodCwibmctdHJpZ2dlciIpLEhyKHQsIm5nLXRyaWdnZXItIitlKSxsW2VdPU5yKSxmdW5jdGlvbigpe28uX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7dmFyIHQ9YS5pbmRleE9mKHMpO3Q+PTAmJmEuc3BsaWNlKHQsMSksby5fdHJpZ2dlcnNbZV18fGRlbGV0ZSBsW2VdfSl9fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vyc1t0XSYmKHRoaXMuX3RyaWdnZXJzW3RdPWUsITApfSx0LnByb3RvdHlwZS5fZ2V0VHJpZ2dlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmlnZ2Vyc1t0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBhbmltYXRpb24gdHJpZ2dlciAiJyt0KyciIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIScpO3JldHVybiBlfSx0LnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXM7dm9pZCAwPT09ciYmKHI9ITApO3ZhciBvPXRoaXMuX2dldFRyaWdnZXIoZSksYT1uZXcgRnIodGhpcy5pZCxlLHQpLHM9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7c3x8KEhyKHQsIm5nLXRyaWdnZXIiKSxIcih0LCJuZy10cmlnZ2VyLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxzPXt9KSk7dmFyIGw9c1tlXSx1PW5ldyBNcihuLHRoaXMuaWQpO2lmKCEobiYmbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJmwmJnUuYWJzb3JiT3B0aW9ucyhsLm9wdGlvbnMpLHNbZV09dSxsfHwobD1OciksInZvaWQiPT09dS52YWx1ZXx8bC52YWx1ZSE9PXUudmFsdWUpe3ZhciBjPWRuKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO2MuZm9yRWFjaChmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZUlkPT1pLmlkJiZ0LnRyaWdnZXJOYW1lPT1lJiZ0LnF1ZXVlZCYmdC5kZXN0cm95KCl9KTt2YXIgZj1vLm1hdGNoVHJhbnNpdGlvbihsLnZhbHVlLHUudmFsdWUsdCx1LnBhcmFtcyksaD0hMTtpZighZil7aWYoIXIpcmV0dXJuO2Y9by5mYWxsYmFja1RyYW5zaXRpb24saD0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246Zixmcm9tU3RhdGU6bCx0b1N0YXRlOnUscGxheWVyOmEsaXNGYWxsYmFja1RyYW5zaXRpb246aH0pLGh8fChIcih0LCJuZy1hbmltYXRlLXF1ZXVlZCIpLGEub25TdGFydChmdW5jdGlvbigpe1FyKHQsIm5nLWFuaW1hdGUtcXVldWVkIil9KSksYS5vbkRvbmUoZnVuY3Rpb24oKXt2YXIgZT1pLnBsYXllcnMuaW5kZXhPZihhKTtlPj0wJiZpLnBsYXllcnMuc3BsaWNlKGUsMSk7dmFyIG49aS5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pe3ZhciByPW4uaW5kZXhPZihhKTtyPj0wJiZuLnNwbGljZShyLDEpfX0pLHRoaXMucGxheWVycy5wdXNoKGEpLGMucHVzaChhKSxhfWlmKCFmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpLHI9T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKCFlLmhhc093blByb3BlcnR5KG8pfHx0W29dIT09ZVtvXSlyZXR1cm4hMX1yZXR1cm4hMH0obC5wYXJhbXMsdS5wYXJhbXMpKXt2YXIgcD1bXSxkPW8ubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxwKSxtPW8ubWF0Y2hTdHlsZXModS52YWx1ZSx1LnBhcmFtcyxwKTtwLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IocCk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtMbih0LGQpLEZuKHQsbSl9KX19LHQucHJvdG90eXBlLmRlcmVnaXN0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztkZWxldGUgdGhpcy5fdHJpZ2dlcnNbdF0sdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZGVsZXRlIGVbdF19KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obixyKXtlLl9lbGVtZW50TGlzdGVuZXJzLnNldChyLG4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUhPXR9KSl9KX0sdC5wcm90b3R5cGUuY2xlYXJFbGVtZW50Q2FjaGU9ZnVuY3Rpb24odCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7dmFyIGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtpZighdFtJcl0pe3ZhciBuPXIuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCk7bi5zaXplP24uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbi50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCExLCEwKX0pOnIuY2xlYXJFbGVtZW50Q2FjaGUodCl9fSl9LHQucHJvdG90eXBlLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobyl7dmFyIGE9W107aWYoT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihpLl90cmlnZ2Vyc1tlXSl7dmFyIG49aS50cmlnZ2VyKHQsZSwidm9pZCIscik7biYmYS5wdXNoKG4pfX0pLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUpLG4mJnVuKGEpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBpLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KX0pLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpO2lmKG4pe3ZhciByPW5ldyBTZXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ubmFtZTtpZighci5oYXMoaSkpe3IuYWRkKGkpO3ZhciBvPWUuX3RyaWdnZXJzW2ldLmZhbGxiYWNrVHJhbnNpdGlvbixhPWUuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpW2ldfHxOcixzPW5ldyBNcigidm9pZCIpLGw9bmV3IEZyKGUuaWQsaSx0KTtlLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssZS5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmksdHJhbnNpdGlvbjpvLGZyb21TdGF0ZTphLHRvU3RhdGU6cyxwbGF5ZXI6bCxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfX0pfX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLl9lbmdpbmU7aWYodC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModCxlLCEwKSwhdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSl7dmFyIGk9ITE7aWYoci50b3RhbEFuaW1hdGlvbnMpe3ZhciBvPXIucGxheWVycy5sZW5ndGg/ci5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpaT0hMDtlbHNlIGZvcih2YXIgYT10O2E9YS5wYXJlbnROb2RlOylpZihyLnN0YXRlc0J5RWxlbWVudC5nZXQoYSkpe2k9ITA7YnJlYWt9fXRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLGk/ci5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk6KHIuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3JldHVybiBuLmNsZWFyRWxlbWVudENhY2hlKHQpfSksci5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLHIuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUpe0hyKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9LHQucHJvdG90eXBlLmRyYWluUXVldWVkVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIucGxheWVyO2lmKCFpLmRlc3Ryb3llZCl7dmFyIG89ci5lbGVtZW50LGE9ZS5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7YSYmYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubmFtZT09ci50cmlnZ2VyTmFtZSl7dmFyIG49cG4obyxyLnRyaWdnZXJOYW1lLHIuZnJvbVN0YXRlLnZhbHVlLHIudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LGZuKHIucGxheWVyLGUucGhhc2UsbixlLmNhbGxiYWNrKX19KSxpLm1hcmtlZEZvckRlc3Ryb3k/ZS5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtpLmRlc3Ryb3koKX0pOm4ucHVzaChyKX19KSx0aGlzLl9xdWV1ZT1bXSxuLnNvcnQoZnVuY3Rpb24odCxuKXt2YXIgcj10LnRyYW5zaXRpb24uYXN0LmRlcENvdW50LGk9bi50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09cnx8MD09aT9yLWk6ZS5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQodC5lbGVtZW50LG4uZWxlbWVudCk/MTotMX0pfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9LHQucHJvdG90eXBlLmVsZW1lbnRDb250YWluc0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksISF0aGlzLl9xdWV1ZS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVsZW1lbnQ9PT10fSl8fGV9LHR9KCksRHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kcml2ZXI9dCx0aGlzLl9ub3JtYWxpemVyPWUsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fX1yZXR1cm4gdC5wcm90b3R5cGUuX29uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXVlZFBsYXllcnMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucXVldWVkJiZ0LnB1c2goZSl9KX0pLHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IFJyKHQsZSx0aGlzKTtyZXR1cm4gZS5wYXJlbnROb2RlP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KG4sZSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChlLG4pLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdPW59LHQucHJvdG90eXBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7aWYobj49MCl7Zm9yKHZhciByPSExLGk9bjtpPj0wO2ktLSlpZih0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5fbmFtZXNwYWNlTGlzdFtpXS5ob3N0RWxlbWVudCxlKSl7dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaSsxLDAsdCkscj0hMDticmVha31yfHx0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZSgwLDAsdCl9ZWxzZSB0aGlzLl9uYW1lc3BhY2VMaXN0LnB1c2godCk7cmV0dXJuIHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuc2V0KGUsdCksdH0sdC5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIG58fChuPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLG59LHQucHJvdG90eXBlLnJlZ2lzdGVyVHJpZ2dlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxuKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYodCl7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7bi5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoci5ob3N0RWxlbWVudCksZGVsZXRlIG4uX25hbWVzcGFjZUxvb2t1cFt0XTt2YXIgZT1uLl9uYW1lc3BhY2VMaXN0LmluZGV4T2Yocik7ZT49MCYmbi5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoZSwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVzdHJveShlKX0pfX0sdC5wcm90b3R5cGUuX2ZldGNoTmFtZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF19LHQucHJvdG90eXBlLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgU2V0LG49dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pZm9yKHZhciByPU9iamVjdC5rZXlzKG4pLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89bltyW2ldXS5uYW1lc3BhY2VJZDtpZihvKXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZShvKTthJiZlLmFkZChhKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scil7aWYoTHIoZSkpe3ZhciBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKGkpcmV0dXJuIGkudHJpZ2dlcihlLG4sciksITB9cmV0dXJuITF9LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlLG4scil7aWYoTHIoZSkpe3ZhciBpPWVbSXJdO2lmKGkmJmkuc2V0Rm9yUmVtb3ZhbCl7aS5zZXRGb3JSZW1vdmFsPSExLGkuc2V0Rm9yTW92ZT0hMDt2YXIgbz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtvPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKG8sMSl9aWYodCl7dmFyIGE9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7YSYmYS5pbnNlcnROb2RlKGUsbil9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfX0sdC5wcm90b3R5cGUuY29sbGVjdEVudGVyRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc0Rpc2FibGVkPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxIcih0LCJuZy1hbmltYXRlLWRpc2FibGVkIikpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXModCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKHQpLFFyKHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSl9LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlLG4pe2lmKExyKGUpKXt2YXIgcj10P3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpOm51bGw7cj9yLnJlbW92ZU5vZGUoZSxuKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSwhMSxuKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUsbil9LHQucHJvdG90eXBlLm1hcmtFbGVtZW50QXNSZW1vdmVkPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGVbSXJdPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6cixoYXNBbmltYXRpb246bixyZW1vdmVkQmVmb3JlUXVlcmllZDohMX19LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBMcihlKT90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5saXN0ZW4oZSxuLHIsaSk6ZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5fYnVpbGRJbnN0cnVjdGlvbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxuLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLGkpfSx0LnByb3RvdHlwZS5kZXN0cm95SW5uZXJBbmltYXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLmRyaXZlci5xdWVyeSh0LCIubmctdHJpZ2dlciIsITApO24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl9KSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRpbmciLCEwKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnF1ZXVlZD90Lm1hcmtlZEZvckRlc3Ryb3k9ITA6dC5kZXN0cm95KCl9KX0sdC5wcm90b3R5cGUuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmluaXNoKCl9KX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtpZih0LnBsYXllcnMubGVuZ3RoKXJldHVybiB1bih0LnBsYXllcnMpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBlKCl9KTtlKCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc0xlYXZlTm9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dFtJcl07aWYobiYmbi5zZXRGb3JSZW1vdmFsKXtpZih0W0lyXT1BcixuLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCk7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2Uobi5uYW1lc3BhY2VJZCk7ciYmci5jbGVhckVsZW1lbnRDYWNoZSh0KX10aGlzLl9vblJlbW92YWxDb21wbGV0ZSh0LG4uc2V0Rm9yUmVtb3ZhbCl9dGhpcy5kcml2ZXIubWF0Y2hlc0VsZW1lbnQodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSksdGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpfSl9LHQucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciBuPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KHQsbil9KSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IodmFyIHI9MDtyPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7cisrKUhyKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tyXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXt2YXIgaT1bXTt0cnl7bj10aGlzLl9mbHVzaEFuaW1hdGlvbnMoaSx0KX1maW5hbGx5e2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihyPTA7cjx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO3IrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3JdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7dmFyIG89dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxuLmxlbmd0aD91bihuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uZXcgbHIsaT1bXSxvPW5ldyBNYXAsYT1bXSxzPW5ldyBNYXAsbD1uZXcgTWFwLHU9bmV3IE1hcCxjPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yy5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyljLmFkZChlW3JdKX0pO3ZhciBmPUVuKCksaD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSkscD16cihoLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksbT1uZXcgTWFwLHk9MDtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK3krKzttLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSHIodCxuKX0pfSk7Zm9yKHZhciBnPVtdLHY9bmV3IFNldCxiPW5ldyBTZXQsXz0wO188dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtfKyspKEY9KEQ9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW19dKVtJcl0pJiZGLnNldEZvclJlbW92YWwmJihnLnB1c2goRCksdi5hZGQoRCksRi5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoRCwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB2LmFkZCh0KX0pOmIuYWRkKEQpKTt2YXIgdz1uZXcgTWFwLHg9enIoaCxBcnJheS5mcm9tKHYpKTt4LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK3krKzt3LnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSHIodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49bS5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBRcih0LG4pfSl9KSx4LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj13LmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFFyKHQsbil9KX0pLGcuZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgQz1bXSxFPVtdLE89dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtPPj0wO08tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W09dLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixvPXQuZWxlbWVudDtpZihDLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIGM9b1tJcl07aWYoYyYmYy5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBoPSFmfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KGYsbykscD13LmdldChvKSxkPW0uZ2V0KG8pLHk9bi5fYnVpbGRJbnN0cnVjdGlvbih0LHIsZCxwLGgpO2lmKHkuZXJyb3JzJiZ5LmVycm9ycy5sZW5ndGgpRS5wdXNoKHkpO2Vsc2V7aWYoaClyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIExuKG8seS5mcm9tU3R5bGVzKX0pLGUub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIEZuKG8seS50b1N0eWxlcyl9KSx2b2lkIGkucHVzaChlKTtpZih0LmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBlLm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gTG4obyx5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRm4obyx5LnRvU3R5bGVzKX0pLHZvaWQgaS5wdXNoKGUpO3kudGltZWxpbmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITB9KSxyLmFwcGVuZChvLHkudGltZWxpbmVzKSxhLnB1c2goe2luc3RydWN0aW9uOnkscGxheWVyOmUsZWxlbWVudDpvfSkseS5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZG4ocyx0LFtdKS5wdXNoKGUpfSkseS5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCl7dmFyIHI9bC5nZXQoZSk7cnx8bC5zZXQoZSxyPW5ldyBTZXQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gci5hZGQodCl9KX19KSx5LnBvc3RTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxyPXUuZ2V0KGUpO3J8fHUuc2V0KGUscj1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSl9KX19KTtpZihFLmxlbmd0aCl7dmFyIFM9W107RS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1MucHVzaCgiQCIrdC50cmlnZ2VyTmFtZSsiIGhhcyBmYWlsZWQgZHVlIHRvOlxuIiksdC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gUy5wdXNoKCItICIrdCsiXG4iKX0pfSksQy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMucmVwb3J0RXJyb3IoUyl9dmFyIGs9bmV3IE1hcCxUPW5ldyBNYXA7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtyLmhhcyhlKSYmKFQuc2V0KGUsZSksbi5fYmVmb3JlQW5pbWF0aW9uQnVpbGQodC5wbGF5ZXIubmFtZXNwYWNlSWQsdC5pbnN0cnVjdGlvbixrKSl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50O24uX2dldFByZXZpb3VzUGxheWVycyhlLCExLHQubmFtZXNwYWNlSWQsdC50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RuKGssZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIFA9Zy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIEdyKHQsbCx1KX0pLEE9bmV3IE1hcDtCcihBLHRoaXMuZHJpdmVyLGIsdSxLKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0dyKHQsbCx1KSYmUC5wdXNoKHQpfSk7dmFyIGo9bmV3IE1hcDtwLmZvckVhY2goZnVuY3Rpb24odCxlKXtCcihqLG4uZHJpdmVyLG5ldyBTZXQodCksbCxudCl9KSxQLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9QS5nZXQodCksbj1qLmdldCh0KTtBLnNldCh0LE9iamVjdChkLmEpKHt9LGUsbikpfSk7dmFyIEk9W10sTT1bXSxOPXt9O2EuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQsYT10LnBsYXllcixzPXQuaW5zdHJ1Y3Rpb247aWYoci5oYXMoZSkpe2lmKGMuaGFzKGUpKXJldHVybiBhLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBGbihlLHMudG9TdHlsZXMpfSksYS5kaXNhYmxlZD0hMCxhLm92ZXJyaWRlVG90YWxUaW1lKHMudG90YWxUaW1lKSx2b2lkIGkucHVzaChhKTt2YXIgbD1OO2lmKFQuc2l6ZT4xKXtmb3IodmFyIHU9ZSxmPVtdO3U9dS5wYXJlbnROb2RlOyl7dmFyIGg9VC5nZXQodSk7aWYoaCl7bD1oO2JyZWFrfWYucHVzaCh1KX1mLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFQuc2V0KHQsbCl9KX12YXIgcD1uLl9idWlsZEFuaW1hdGlvbihhLm5hbWVzcGFjZUlkLHMsayxvLGosQSk7aWYoYS5zZXRSZWFsUGxheWVyKHApLGw9PT1OKUkucHVzaChhKTtlbHNle3ZhciBkPW4ucGxheWVyc0J5RWxlbWVudC5nZXQobCk7ZCYmZC5sZW5ndGgmJihhLnBhcmVudFBsYXllcj11bihkKSksaS5wdXNoKGEpfX1lbHNlIExuKGUscy5mcm9tU3R5bGVzKSxhLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBGbihlLHMudG9TdHlsZXMpfSksTS5wdXNoKGEpLGMuaGFzKGUpJiZpLnB1c2goYSl9KSxNLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodC5lbGVtZW50KTtpZihlJiZlLmxlbmd0aCl7dmFyIG49dW4oZSk7dC5zZXRSZWFsUGxheWVyKG4pfX0pLGkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudFBsYXllcj90LnN5bmNQbGF5ZXJFdmVudHModC5wYXJlbnRQbGF5ZXIpOnQuZGVzdHJveSgpfSk7Zm9yKHZhciBSPTA7UjxnLmxlbmd0aDtSKyspe3ZhciBELEY9KEQ9Z1tSXSlbSXJdO2lmKFFyKEQsIm5nLWxlYXZlIiksIUZ8fCFGLmhhc0FuaW1hdGlvbil7dmFyIEw9W107aWYocy5zaXplKXt2YXIgVj1zLmdldChEKTtWJiZWLmxlbmd0aCYmTC5wdXNoLmFwcGx5KEwsT2JqZWN0KGQuZCkoVikpO2Zvcih2YXIgQj10aGlzLmRyaXZlci5xdWVyeShELCIubmctYW5pbWF0aW5nIiwhMCksej0wO3o8Qi5sZW5ndGg7eisrKXt2YXIgVT1zLmdldChCW3pdKTtVJiZVLmxlbmd0aCYmTC5wdXNoLmFwcGx5KEwsT2JqZWN0KGQuZCkoVSkpfX12YXIgSD1MLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5kZXN0cm95ZWR9KTtILmxlbmd0aD9xcih0aGlzLEQsSCk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEQpfX1yZXR1cm4gZy5sZW5ndGg9MCxJLmZvckVhY2goZnVuY3Rpb24odCl7bi5wbGF5ZXJzLnB1c2godCksdC5vbkRvbmUoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKTt2YXIgZT1uLnBsYXllcnMuaW5kZXhPZih0KTtuLnBsYXllcnMuc3BsaWNlKGUsMSl9KSx0LnBsYXkoKX0pLEl9LHQucHJvdG90eXBlLmVsZW1lbnRDb250YWluc0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgbj0hMSxyPWVbSXJdO3JldHVybiByJiZyLnNldEZvclJlbW92YWwmJihuPSEwKSx0aGlzLnBsYXllcnNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLnN0YXRlc0J5RWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5lbGVtZW50Q29udGFpbnNEYXRhKGUpfHxufSx0LnByb3RvdHlwZS5hZnRlckZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9LHQucHJvdG90eXBlLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZT1mdW5jdGlvbih0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuX2dldFByZXZpb3VzUGxheWVycz1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPVtdO2lmKGUpe3ZhciBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2EmJihvPWEpfWVsc2V7dmFyIHM9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihzKXt2YXIgbD0haXx8InZvaWQiPT1pO3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnF1ZXVlZHx8KGx8fHQudHJpZ2dlck5hbWU9PXIpJiZvLnB1c2godCl9KX19cmV0dXJuKG58fHIpJiYobz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKG4mJm4hPXQubmFtZXNwYWNlSWR8fHImJnIhPXQudHJpZ2dlck5hbWUpfSkpLG99LHQucHJvdG90eXBlLl9iZWZvcmVBbmltYXRpb25CdWlsZD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvPWUuZWxlbWVudCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZSxsPWZ1bmN0aW9uKHQpe3ZhciByPXQuZWxlbWVudCxpPXIhPT1vLGw9ZG4obixyLFtdKTt1Ll9nZXRQcmV2aW91c1BsYXllcnMocixpLGEscyxlLnRvU3RhdGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRSZWFsUGxheWVyKCk7ZS5iZWZvcmVEZXN0cm95JiZlLmJlZm9yZURlc3Ryb3koKSx0LmRlc3Ryb3koKSxsLnB1c2godCl9KX0sdT10aGlzO3RyeXtmb3IodmFyIGM9T2JqZWN0KGQuZSkoZS50aW1lbGluZXMpLGY9Yy5uZXh0KCk7IWYuZG9uZTtmPWMubmV4dCgpKWwoZi52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGk9Yy5yZXR1cm4pJiZpLmNhbGwoYyl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fUxuKG8sZS5mcm9tU3R5bGVzKX0sdC5wcm90b3R5cGUuX2J1aWxkQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10aGlzLHM9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCx1PVtdLGM9bmV3IFNldCxmPW5ldyBTZXQsaD1lLnRpbWVsaW5lcy5tYXAoZnVuY3Rpb24oZSl7dmFyIGg9ZS5lbGVtZW50O2MuYWRkKGgpO3ZhciBwPWhbSXJdO2lmKHAmJnAucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyB0dChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciBkLG0seT1oIT09bCxnPShkPShuLmdldChoKXx8UHIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSxtPVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpIGluc3RhbmNlb2YgZXQ/dChpLnBsYXllcnMsbik6bi5wdXNoKGkpfX0oZCxtKSxtKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISF0LmVsZW1lbnQmJnQuZWxlbWVudD09PWh9KSx2PWkuZ2V0KGgpLGI9by5nZXQoaCksXz1jbigwLGEuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyx2LGIpLHc9YS5fYnVpbGRQbGF5ZXIoZSxfLGcpO2lmKGUuc3ViVGltZWxpbmUmJnImJmYuYWRkKGgpLHkpe3ZhciB4PW5ldyBGcih0LHMsaCk7eC5zZXRSZWFsUGxheWVyKHcpLHUucHVzaCh4KX1yZXR1cm4gd30pO3UuZm9yRWFjaChmdW5jdGlvbih0KXtkbihhLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCxbXSkucHVzaCh0KSx0Lm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI7aWYodCBpbnN0YW5jZW9mIE1hcCl7aWYocj10LmdldChlKSl7aWYoci5sZW5ndGgpe3ZhciBpPXIuaW5kZXhPZihuKTtyLnNwbGljZShpLDEpfTA9PXIubGVuZ3RoJiZ0LmRlbGV0ZShlKX19ZWxzZShyPXRbZV0pJiYoci5sZW5ndGgmJihpPXIuaW5kZXhPZihuKSxyLnNwbGljZShpLDEpKSwwPT1yLmxlbmd0aCYmZGVsZXRlIHRbZV0pO3JldHVybiByfShhLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCx0KX0pfSksYy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIcih0LCJuZy1hbmltYXRpbmciKX0pO3ZhciBwPXVuKGgpO3JldHVybiBwLm9uRGVzdHJveShmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gUXIodCwibmctYW5pbWF0aW5nIil9KSxGbihsLGUudG9TdHlsZXMpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RuKHIsdCxbXSkucHVzaChwKX0pLHB9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsbik6bmV3IHR0KHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksRnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgdHQsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz17fSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXJldHVybiB0LnByb3RvdHlwZS5zZXRSZWFsUGxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsT2JqZWN0LmtleXModGhpcy5fcXVldWVkQ2FsbGJhY2tzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuX3F1ZXVlZENhbGxiYWNrc1tuXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBmbih0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7ZG4odGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsdCksdGhpcy5fcGxheWVyLm9uRG9uZSh0KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5maW5pc2goKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9LHR9KCk7ZnVuY3Rpb24gTHIodCl7cmV0dXJuIHQmJjE9PT10Lm5vZGVUeXBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIG49dC5zdHlsZS5kaXNwbGF5O3JldHVybiB0LnN0eWxlLmRpc3BsYXk9bnVsbCE9ZT9lOiJub25lIixufWZ1bmN0aW9uIEJyKHQsZSxuLHIsaSl7dmFyIG89W107bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnB1c2goVnIodCkpfSk7dmFyIGE9W107ci5mb3JFYWNoKGZ1bmN0aW9uKG4scil7dmFyIG89e307bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPW9bdF09ZS5jb21wdXRlU3R5bGUocix0LGkpO24mJjAhPW4ubGVuZ3RofHwocltJcl09anIsYS5wdXNoKHIpKX0pLHQuc2V0KHIsbyl9KTt2YXIgcz0wO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFZyKHQsb1tzKytdKX0pLGF9ZnVuY3Rpb24genIodCxlKXt2YXIgbj1uZXcgTWFwO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbi5zZXQodCxbXSl9KSwwPT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcj1uZXcgU2V0KGUpLGk9bmV3IE1hcDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uIHQoZSl7aWYoIWUpcmV0dXJuIDE7dmFyIG89aS5nZXQoZSk7aWYobylyZXR1cm4gbzt2YXIgYT1lLnBhcmVudE5vZGU7cmV0dXJuIG89bi5oYXMoYSk/YTpyLmhhcyhhKT8xOnQoYSksaS5zZXQoZSxvKSxvfSh0KTsxIT09ZSYmbi5nZXQoZSkucHVzaCh0KX0pLG59dmFyIFVyPSIkJGNsYXNzZXMiO2Z1bmN0aW9uIEhyKHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QuYWRkKGUpO2Vsc2V7dmFyIG49dFtVcl07bnx8KG49dFtVcl09e30pLG5bZV09ITB9fWZ1bmN0aW9uIFFyKHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QucmVtb3ZlKGUpO2Vsc2V7dmFyIG49dFtVcl07biYmZGVsZXRlIG5bZV19fWZ1bmN0aW9uIHFyKHQsZSxuKXt1bihuKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm9jZXNzTGVhdmVOb2RlKGUpfSl9ZnVuY3Rpb24gR3IodCxlLG4pe3ZhciByPW4uZ2V0KHQpO2lmKCFyKXJldHVybiExO3ZhciBpPWUuZ2V0KHQpO3JldHVybiBpP3IuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5hZGQodCl9KTplLnNldCh0LHIpLG4uZGVsZXRlKHQpLCEwfXZhciBZcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX2RyaXZlcj10LHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBEcih0LGUpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBUcih0LGUpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5vblJlbW92YWxDb21wbGV0ZSh0LGUpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89dCsiLSIrcixhPXRoaXMuX3RyaWdnZXJDYWNoZVtvXTtpZighYSl7dmFyIHM9W10sbD1lcih0aGlzLl9kcml2ZXIsaSxzKTtpZihzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhbmltYXRpb24gdHJpZ2dlciAiJytyKyciIGhhcyBmYWlsZWQgdG8gYnVpbGQgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuIC0gJytzLmpvaW4oIlxuIC0gIikpO2E9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IE9yKHQsZSl9KHIsbCksdGhpcy5fdHJpZ2dlckNhY2hlW29dPWF9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxyLGEpfSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfSx0LnByb3RvdHlwZS5vbkluc2VydD1mdW5jdGlvbih0LGUsbixyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLG4scil9LHQucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl9LHQucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24odCxlLG4scil7aWYoIkAiPT1uLmNoYXJBdCgwKSl7dmFyIGk9T2JqZWN0KGQuYykobW4obiksMik7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChpWzBdLGUsaVsxXSxyKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsbixyKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIsaSl7aWYoIkAiPT1uLmNoYXJBdCgwKSl7dmFyIG89T2JqZWN0KGQuYykobW4obiksMik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihvWzBdLGUsb1sxXSxpKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLG4scixpKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9LTEpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGxheWVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxXcj0iYW5pbWF0aW9uIixacj0iYW5pbWF0aW9uZW5kIixLcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fbmFtZT1lLHRoaXMuX2R1cmF0aW9uPW4sdGhpcy5fZGVsYXk9cix0aGlzLl9lYXNpbmc9aSx0aGlzLl9maWxsTW9kZT1vLHRoaXMuX29uRG9uZUZuPWEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fZXZlbnRGbj1mdW5jdGlvbih0KXtyZXR1cm4gcy5faGFuZGxlQ2FsbGJhY2sodCl9fXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0LGUsbjtlPXRoaXMuX2R1cmF0aW9uKyJtcyAiK3RoaXMuX2Vhc2luZysiICIrdGhpcy5fZGVsYXkrIm1zIDEgbm9ybWFsICIrdGhpcy5fZmlsbE1vZGUrIiAiK3RoaXMuX25hbWUsKG49bmkodD10aGlzLl9lbGVtZW50LCIiKS50cmltKCkpLmxlbmd0aCYmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspIiwiPT09dC5jaGFyQXQobikmJjB9KG4pLGU9bisiLCAiK2UpLGVpKHQsIiIsZSksdGkodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtYcih0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInBhdXNlZCIpfSx0LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtYcih0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInJ1bm5pbmciKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9JHIodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKTt0aGlzLl9wb3NpdGlvbj10KnRoaXMuX2R1cmF0aW9uLGVpKHRoaXMuX2VsZW1lbnQsIkRlbGF5IiwiLSIrdGhpcy5fcG9zaXRpb24rIm1zIixlKX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHQucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9uZ1Rlc3RNYW51YWxUaW1lc3RhbXB8fERhdGUubm93KCksbj0xZTMqcGFyc2VGbG9hdCh0LmVsYXBzZWRUaW1lLnRvRml4ZWQoMykpO3QuYW5pbWF0aW9uTmFtZT09dGhpcy5fbmFtZSYmTWF0aC5tYXgoZS10aGlzLl9zdGFydFRpbWUsMCk+PXRoaXMuX2RlbGF5JiZuPj10aGlzLl9kdXJhdGlvbiYmdGhpcy5maW5pc2goKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLHRpKHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZmluaXNoKCksZT10aGlzLl9uYW1lLChyPUpyKG49bmkodD10aGlzLl9lbGVtZW50LCIiKS5zcGxpdCgiLCIpLGUpKT49MCYmKG4uc3BsaWNlKHIsMSksZWkodCwiIixuLmpvaW4oIiwiKSkpKX0sdH0oKTtmdW5jdGlvbiBYcih0LGUsbil7ZWkodCwiUGxheVN0YXRlIixuLCRyKHQsZSkpfWZ1bmN0aW9uICRyKHQsZSl7dmFyIG49bmkodCwiIik7cmV0dXJuIG4uaW5kZXhPZigiLCIpPjA/SnIobi5zcGxpdCgiLCIpLGUpOkpyKFtuXSxlKX1mdW5jdGlvbiBKcih0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiB0aSh0LGUsbil7bj90LnJlbW92ZUV2ZW50TGlzdGVuZXIoWnIsZSk6dC5hZGRFdmVudExpc3RlbmVyKFpyLGUpfWZ1bmN0aW9uIGVpKHQsZSxuLHIpe3ZhciBpPVdyK2U7aWYobnVsbCE9cil7dmFyIG89dC5zdHlsZVtpXTtpZihvLmxlbmd0aCl7dmFyIGE9by5zcGxpdCgiLCIpO2Fbcl09bixuPWEuam9pbigiLCIpfX10LnN0eWxlW2ldPW59ZnVuY3Rpb24gbmkodCxlKXtyZXR1cm4gdC5zdHlsZVtXcitlXX12YXIgcmk9ImxpbmVhciIsaWk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JTklUSUFMSVpFRD0xXT0iSU5JVElBTElaRUQiLHRbdC5TVEFSVEVEPTJdPSJTVEFSVEVEIix0W3QuRklOSVNIRUQ9M109IkZJTklTSEVEIix0W3QuREVTVFJPWUVEPTRdPSJERVNUUk9ZRUQiLHR9KHt9KSxvaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1yLHRoaXMuX2RlbGF5PWksdGhpcy5fZmluYWxTdHlsZXM9YSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLmN1cnJlbnRTbmFwc2hvdD17fSx0aGlzLnN0YXRlPTAsdGhpcy5lYXNpbmc9b3x8cmksdGhpcy50b3RhbFRpbWU9citpLHRoaXMuX2J1aWxkU3R5bGVyKCl9cmV0dXJuIHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PWlpLkRFU1RST1lFRHx8KHRoaXMuc3RhdGU9aWkuREVTVFJPWUVELHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5fZmx1c2hEb25lRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXX0sdC5wcm90b3R5cGUuX2ZsdXNoU3RhcnRGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PWlpLkZJTklTSEVEfHwodGhpcy5zdGF0ZT1paS5GSU5JU0hFRCx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlPj1paS5TVEFSVEVEfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT49aWkuSU5JVElBTElaRUR8fCh0aGlzLnN0YXRlPWlpLklOSVRJQUxJWkVELHRoaXMuX3N0eWxlci5hcHBseSgpLHRoaXMuX2RlbGF5JiZ0aGlzLl9zdHlsZXIucGF1c2UoKSl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLnN0YXRlPWlpLlNUQVJURUQpLHRoaXMuX3N0eWxlci5yZXN1bWUoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9zdHlsZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXIuZGVzdHJveSgpLHRoaXMuX2J1aWxkU3R5bGVyKCksdGhpcy5fc3R5bGVyLmFwcGx5KCl9LHQucHJvdG90eXBlLl9idWlsZFN0eWxlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3R5bGVyPW5ldyBLcih0aGlzLmVsZW1lbnQsdGhpcy5hbmltYXRpb25OYW1lLHRoaXMuX2R1cmF0aW9uLHRoaXMuX2RlbGF5LHRoaXMuZWFzaW5nLCJmb3J3YXJkcyIsZnVuY3Rpb24oKXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaW5pdCgpO3ZhciBlPXt9O2lmKHRoaXMuaGFzU3RhcnRlZCgpKXt2YXIgbj10aGlzLnN0YXRlPj1paS5GSU5JU0hFRDtPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihyKXsib2Zmc2V0IiE9ciYmKGVbcl09bj90Ll9maW5hbFN0eWxlc1tyXTpabih0LmVsZW1lbnQscikpfSl9dGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdH0oKSxhaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmVsZW1lbnQ9ZSxyLl9zdGFydGluZ1N0eWxlcz17fSxyLl9faW5pdGlhbGl6ZWQ9ITEsci5fc3R5bGVzPVRuKG4pLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IXRoaXMuX19pbml0aWFsaXplZCYmdGhpcy5fc3RhcnRpbmdTdHlsZXMmJih0aGlzLl9faW5pdGlhbGl6ZWQ9ITAsT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0YXJ0aW5nU3R5bGVzW3RdPWUuZWxlbWVudC5zdHlsZVt0XX0pLHQucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5pbml0KCksT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxlLl9zdHlsZXNbdF0pfSksdC5wcm90b3R5cGUucGxheS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc3RhcnRpbmdTdHlsZXMmJihPYmplY3Qua2V5cyh0aGlzLl9zdGFydGluZ1N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9zdGFydGluZ1N0eWxlc1t0XTtuP2UuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOmUuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX0pLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpKX0sZX0odHQpLHNpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2NvdW50PTAsdGhpcy5faGVhZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIiksdGhpcy5fd2FybmluZ0lzc3VlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBDbih0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT24odCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNuKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4ga24odCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJAa2V5ZnJhbWVzICIrZSsiIHtcbiIsaT0iIjsobj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gVG4odCl9KSkuZm9yRWFjaChmdW5jdGlvbih0KXtpPSIgIjt2YXIgZT1wYXJzZUZsb2F0KHQub2Zmc2V0KTtyKz0iIitpKzEwMCplKyIlIHtcbiIsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJvZmZzZXQiOnJldHVybjtjYXNlImVhc2luZyI6cmV0dXJuIHZvaWQobiYmKHIrPWkrImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICIrbisiO1xuIikpO2RlZmF1bHQ6cmV0dXJuIHZvaWQocis9IiIraStlKyI6ICIrbisiO1xuIil9fSkscis9aSsifVxuIn0pLHIrPSJ9XG4iO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG8uaW5uZXJIVE1MPXIsb30sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXt2b2lkIDA9PT1vJiYobz1bXSksYSYmdGhpcy5fbm90aWZ5RmF1bHR5U2NydWJiZXIoKTt2YXIgcz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG9pfSksbD17fTtHbihuLHIpJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XT1lW3RdfSl9KTt2YXIgdT1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdCYmKEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmImVhc2luZyIhPW4mJihlW25dPXRbbl0pfSl9KSxlfShlPVluKHQsZSxsKSk7aWYoMD09bilyZXR1cm4gbmV3IGFpKHQsdSk7dmFyIGM9Imdlbl9jc3Nfa2ZfIit0aGlzLl9jb3VudCsrLGY9dGhpcy5idWlsZEtleWZyYW1lRWxlbWVudCh0LGMsZSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLmFwcGVuZENoaWxkKGYpO3ZhciBoPW5ldyBvaSh0LGUsYyxuLHIsaSx1KTtyZXR1cm4gaC5vbkRlc3Ryb3koZnVuY3Rpb24oKXt2YXIgdDsodD1mKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSksaH0sdC5wcm90b3R5cGUuX25vdGlmeUZhdWx0eVNjcnViYmVyPWZ1bmN0aW9uKCl7dGhpcy5fd2FybmluZ0lzc3VlZHx8KGNvbnNvbGUud2FybigiQGFuZ3VsYXIvYW5pbWF0aW9uczogcGxlYXNlIGxvYWQgdGhlIHdlYi1hbmltYXRpb25zLmpzIHBvbHlmaWxsIHRvIGFsbG93IHByb2dyYW1tYXRpYyBhY2Nlc3MuLi5cbiIsIiAgdmlzaXQgaHR0cDovL2JpdC5seS9JV3VrYW0gdG8gbGVhcm4gbW9yZSBhYm91dCB1c2luZyB0aGUgd2ViLWFuaW1hdGlvbi1qcyBwb2x5ZmlsbC4iKSx0aGlzLl93YXJuaW5nSXNzdWVkPSEwKX0sdH0oKSxsaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPW4sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX2luaXRpYWxpemVkKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZT10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxlLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnt9LHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfX0sdC5wcm90b3R5cGUuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5fdHJpZ2dlcldlYkFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYW5pbWF0ZShlLG4pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITApLHRoaXMuZG9tUGxheWVyLnBsYXkoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuX3Jlc2V0RG9tUGxheWVyU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0b3RhbFRpbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmKGVbbl09dC5fZmluaXNoZWQ/dC5fZmluYWxLZXlmcmFtZVtuXTpabih0LmVsZW1lbnQsbikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHVpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzTmF0aXZlSW1wbD0vXHtccypcW25hdGl2ZVxzK2NvZGVcXVxzKlx9Ly50ZXN0KGNpKCkudG9TdHJpbmcoKSksdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyPW5ldyBzaX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBDbih0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT24odCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNuKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4ga24odCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUub3ZlcnJpZGVXZWJBbmltYXRpb25zU3VwcG9ydD1mdW5jdGlvbih0KXt0aGlzLl9pc05hdGl2ZUltcGw9dH0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtpZih2b2lkIDA9PT1vJiYobz1bXSksIWEmJiF0aGlzLl9pc05hdGl2ZUltcGwpcmV0dXJuIHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlci5hbmltYXRlKHQsZSxuLHIsaSxvKTt2YXIgcz17ZHVyYXRpb246bixkZWxheTpyLGZpbGw6MD09cj8iYm90aCI6ImZvcndhcmRzIn07aSYmKHMuZWFzaW5nPWkpO3ZhciBsPXt9LHU9by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBsaX0pO3JldHVybiBHbihuLHIpJiZ1LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XT1lW3RdfSl9KSxlPVluKHQsZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gRG4odCwhMSl9KSxsKSxuZXcgbGkodCxlLHMpfSx0fSgpO2Z1bmN0aW9uIGNpKCl7cmV0dXJuIGxuKCkmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fXZhciBmaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9uZXh0QW5pbWF0aW9uSWQ9MCxyLl9yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKG4uYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246by5RLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO3ZhciBuPUFycmF5LmlzQXJyYXkodCk/WCh0KTp0O3JldHVybiBkaSh0aGlzLl9yZW5kZXJlcixudWxsLGUsInJlZ2lzdGVyIixbbl0pLG5ldyBoaShlLHRoaXMuX3JlbmRlcmVyKX0sZX0oWiksaGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5faWQ9ZSxyLl9yZW5kZXJlcj1uLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBwaSh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX0sZX0oZnVuY3Rpb24oKXt9KSxwaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixuKX1yZXR1cm4gdC5wcm90b3R5cGUuX2xpc3Rlbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LCJAQCIrdGhpcy5pZCsiOiIrdCxlKX0sdC5wcm90b3R5cGUuX2NvbW1hbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGRpKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3Rlbigic3RhcnQiLHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImluaXQiKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiAwfSx0fSgpO2Z1bmN0aW9uIGRpKHQsZSxuLHIsaSl7cmV0dXJuIHQuc2V0UHJvcGVydHkoZSwiQEAiK24rIjoiK3IsaSl9dmFyIG1pPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1uLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtlJiZlLnBhcmVudE5vZGUodCkmJmUucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlLHQpfX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCEodCYmZSYmZS5kYXRhJiZlLmRhdGEuYW5pbWF0aW9uKSl7dmFyIGk9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQocik7cmV0dXJuIGl8fChpPW5ldyB5aSgiIixyLHRoaXMuZW5naW5lKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChyLGkpKSxpfXZhciBvPWUuaWQsYT1lLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7cmV0dXJuIHRoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsdCksZS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIobyxhLHQsZS5uYW1lLGUpfSksbmV3IGdpKHRoaXMsYSxyLHRoaXMuZW5naW5lKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLl9zY2hlZHVsZUNvdW50VGFzaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt0Ll9taWNyb3Rhc2tJZCsrfSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt0Pj0wJiZ0PHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oZnVuY3Rpb24oKXtyLl96b25lLnJ1bihmdW5jdGlvbigpe3IuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChkLmMpKHQsMik7KDAsZVswXSkoZVsxXSl9KSxyLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtlLG5dKSl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fc2NoZWR1bGVDb3VudFRhc2soKSx0LmVuZ2luZS5mbHVzaCh0Ll9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSx5aT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9bix0aGlzLmRlc3Ryb3lOb2RlPXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVzdHJveU5vZGUodCl9Om51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCExKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbiksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITApfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCl9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixyKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7IkAiPT1lLmNoYXJBdCgwKSYmIkAuZGlzYWJsZWQiPT1lP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIW4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9LHR9KCksZ2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxuLHIsaSl8fHRoaXM7cmV0dXJuIG8uZmFjdG9yeT1lLG8ubmFtZXNwYWNlSWQ9bixvfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsbj12b2lkIDA9PT1ufHwhIW4pOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc3Vic3RyKDEpLG4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSxlLnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxhPXRoaXM7aWYoIkAiPT1lLmNoYXJBdCgwKSl7dmFyIHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSh0KSxsPWUuc3Vic3RyKDEpLHU9IiI7cmV0dXJuIkAiIT1sLmNoYXJBdCgwKSYmKGw9KHI9T2JqZWN0KGQuYykoKGk9bCxvPWkuaW5kZXhPZigiLiIpLFtpLnN1YnN0cmluZygwLG8pLGkuc3Vic3RyKG8rMSldKSwyKSlbMF0sdT1yWzFdKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxzLGwsdSxmdW5jdGlvbih0KXthLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHQuX2RhdGF8fC0xLG4sdCl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSxlfSh5aSksdmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyxlLG4pfHx0aGlzfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGV9KFlyKTtmdW5jdGlvbiBiaSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjaSgpP25ldyB1aTpuZXcgc2l9ZnVuY3Rpb24gX2koKXtyZXR1cm4gbmV3IGJyfWZ1bmN0aW9uIHdpKHQsZSxuKXtyZXR1cm4gbmV3IG1pKHQsZSxuKX12YXIgeGk9bmV3IG8ucCgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLENpPWZ1bmN0aW9uKCl7fSxFaT1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b25bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmU7b3BhY2l0eTowfS5tYXQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXJhaXNlZC1idXR0b257dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1taW5pLWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1taW5pLWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiW2Rpc2FibGVkXXtib3gtc2hhZG93Om5vbmV9Lm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLC4yKSwwIDEycHggMTdweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtaWNvbi1idXR0b24gaXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJhZGl1czppbmhlcml0O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGN1YmljLWJlemllciguMzUsMCwuMjUsMSksYmFja2dyb3VuZC1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbntvdXRsaW5lOnNvbGlkIDFweH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIE9pKHQpe3JldHVybiBvLmtiKDIsW28uZ2IoNDAyNjUzMTg0LDEse3JpcHBsZTowfSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1idXR0b24td3JhcHBlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlphKG51bGwsMCksKHQoKSgpLG8uUWEoMywwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWJ1dHRvbi1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0UmlwcGxlIiwiIl1dLFtbMiwibWF0LWJ1dHRvbi1yaXBwbGUtcm91bmQiLG51bGxdLFsyLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsMjEyOTkyLFtbMSw0XV0sMCxUZSxbby5rLG8ueSx1LFsyLGtlXSxbMix4aV1dLHtjZW50ZXJlZDpbMCwiY2VudGVyZWQiXSxkaXNhYmxlZDpbMSwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsyLCJ0cmlnZ2VyIl19LG51bGwpLCh0KCkoKSxvLlFhKDUsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNCwwLG4uaXNJY29uQnV0dG9uLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMywwLG4uaXNSb3VuZEJ1dHRvbnx8bi5pc0ljb25CdXR0b24sby5hYihlLDQpLnVuYm91bmRlZCl9KX12YXIgU2k9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MjRweDttYXgtd2lkdGg6NTY4cHg7bWluLXdpZHRoOjI4OHB4O3BhZGRpbmc6MTRweCAyNHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpIHRyYW5zbGF0ZVkoMjRweCl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVyLm1hdC1zbmFjay1iYXItY2VudGVye21hcmdpbjowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfS5tYXQtc25hY2stYmFyLWNvbnRhaW5lci5tYXQtc25hY2stYmFyLXRvcHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSkgdHJhbnNsYXRlWSgtMjRweCl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVyLm1hdC1zbmFjay1iYXItdG9wLm1hdC1zbmFjay1iYXItY2VudGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH19Lm1hdC1zbmFjay1iYXItaGFuZHNldHt3aWR0aDoxMDAlfS5tYXQtc25hY2stYmFyLWhhbmRzZXQgLm1hdC1zbmFjay1iYXItY29udGFpbmVye21hcmdpbjowO21heC13aWR0aDppbmhlcml0O3dpZHRoOjEwMCV9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InN0YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJ2aXNpYmxlLXRvcCwgdmlzaWJsZS1ib3R0b20iLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2aXNpYmxlLXRvcCA9PiBoaWRkZW4tdG9wLCB2aXNpYmxlLWJvdHRvbSA9PiBoaWRkZW4tYm90dG9tIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIxOTVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPT4gdmlzaWJsZS10b3AsIHZvaWQgPT4gdmlzaWJsZS1ib3R0b20iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjAsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBraSh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5IYSgwLG51bGwsbnVsbCwwKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gVGkodCl7cmV0dXJuIG8ua2IoMixbby5nYig0MDI2NTMxODQsMSx7X3BvcnRhbE91dGxldDowfSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxraSkpLG8uUGEoMiwyMTI5OTIsW1sxLDRdXSwwLGp0LFtvLmosby5QXSx7cG9ydGFsOlswLCJwb3J0YWwiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDIsMCwiIil9LG51bGwpfXZhciBQaT1vLk1hKCJzbmFjay1iYXItY29udGFpbmVyIixWZSxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsInNuYWNrLWJhci1jb250YWluZXIiLFtbImNsYXNzIiwibWF0LXNuYWNrLWJhci1jb250YWluZXIiXSxbInJvbGUiLCJhbGVydCJdXSxbWzQwLCJAc3RhdGUiLDBdXSxbWyJjb21wb25lbnQiLCJAc3RhdGUuZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNvbXBvbmVudDpAc3RhdGUuZG9uZSI9PT1lJiYocj0hMSE9PW8uYWIodCwxKS5vbkFuaW1hdGlvbkVuZChuKSYmcikscn0sVGksU2kpKSxvLlBhKDEsMTgwMjI0LG51bGwsMCxWZSxbby55LG8uayxvLmgsRmVdLG51bGwsbnVsbCldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLG8uYWIoZSwxKS5fYW5pbWF0aW9uU3RhdGUpfSl9LHt9LHt9LFtdKSxBaT1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1zaW1wbGUtc25hY2tiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtc2hyaW5rOjA7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDttYXJnaW46LThweCAwIC04cHggOHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiBidXR0b257ZmxleDoxO21heC1oZWlnaHQ6MzZweH1bZGlyPXJ0bF0gLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiY29udGVudEZhZGUiLGRlZmluaXRpb25zOlt7dHlwZToxLGV4cHI6IjplbnRlciIsYW5pbWF0aW9uOlt7dHlwZTo2LHN0eWxlczp7b3BhY2l0eToiMCJ9LG9mZnNldDpudWxsfSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjM3NW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gamkodCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwzLCJkaXYiLFtbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwyLCJidXR0b24iLFtbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuYWN0aW9uKCkmJnIpLHJ9LE9pLEVpKSksby5QYSgyLDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigzLDAsWyIiLCIiXSkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxvLmFiKGUsMikuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSwyKS5fYW5pbWF0aW9uTW9kZSksdChlLDMsMCxuLmRhdGEuYWN0aW9uKX0pfWZ1bmN0aW9uIElpKHQpe3JldHVybiBvLmtiKDIsWyh0KCkoKSxvLmliKDAsbnVsbCxbIiIsIiJdKSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxqaSkpLG8uUGEoMiwxNjM4NCxudWxsLDAscy5rLFtvLlAsby5NXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMiwwLGUuY29tcG9uZW50Lmhhc0FjdGlvbil9LGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5kYXRhLm1lc3NhZ2UpfSl9dmFyIE1pPW8uTWEoInNpbXBsZS1zbmFjay1iYXIiLExlLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwic2ltcGxlLXNuYWNrLWJhciIsW1siY2xhc3MiLCJtYXQtc2ltcGxlLXNuYWNrYmFyIl1dLFtbNDAsIkBjb250ZW50RmFkZSIsMF1dLG51bGwsbnVsbCxJaSxBaSkpLG8uUGEoMSw0OTE1MixudWxsLDAsTGUsW1JlLERlXSxudWxsLG51bGwpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCx2b2lkIDApfSl9LHt9LHt9LFtdKSxOaT1uKCJwTW5TIiksUmk9ZnVuY3Rpb24oKXt9LERpPWZ1bmN0aW9uKCl7fSxGaT1mdW5jdGlvbigpe30sTGk9ZnVuY3Rpb24oKXt9LFZpPWZ1bmN0aW9uKCl7fSxCaT1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1jYXJke3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MjRweDtib3JkZXItcmFkaXVzOjJweH0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FyZCAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCV9W2Rpcj1ydGxdIC5tYXQtY2FyZCAubWF0LWRpdmlkZXJ7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luOjB9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXR7Ym94LXNoYWRvdzpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtY2FyZHtvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC1jYXJkLWFjdGlvbnMsLm1hdC1jYXJkLWNvbnRlbnQsLm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC10aXRsZXtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTZweH0ubWF0LWNhcmQtYWN0aW9uc3ttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHg7cGFkZGluZzo4cHggMH0ubWF0LWNhcmQtYWN0aW9ucy1hbGlnbi1lbmR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgNDhweCk7bWFyZ2luOjAgLTI0cHggMTZweCAtMjRweH0ubWF0LWNhcmQteGwtaW1hZ2V7d2lkdGg6MjQwcHg7aGVpZ2h0OjI0MHB4O21hcmdpbjotOHB4fS5tYXQtY2FyZC1mb290ZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MCAtMjRweCAtMjRweCAtMjRweH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbiwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b257bWFyZ2luOjAgNHB4fS5tYXQtY2FyZC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubWF0LWNhcmQtaGVhZGVyLXRleHR7bWFyZ2luOjAgOHB4fS5tYXQtY2FyZC1hdmF0YXJ7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowfS5tYXQtY2FyZC1sZy1pbWFnZSwubWF0LWNhcmQtbWQtaW1hZ2UsLm1hdC1jYXJkLXNtLWltYWdle21hcmdpbjotOHB4IDB9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MCAtOHB4fS5tYXQtY2FyZC1zbS1pbWFnZXt3aWR0aDo4MHB4O2hlaWdodDo4MHB4fS5tYXQtY2FyZC1tZC1pbWFnZXt3aWR0aDoxMTJweDtoZWlnaHQ6MTEycHh9Lm1hdC1jYXJkLWxnLWltYWdle3dpZHRoOjE1MnB4O2hlaWdodDoxNTJweH1AbWVkaWEgKG1heC13aWR0aDo1OTlweCl7Lm1hdC1jYXJke3BhZGRpbmc6MjRweCAxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0Oi04cHh9Lm1hdC1jYXJkLWltYWdle3dpZHRoOmNhbGMoMTAwJSArIDMycHgpO21hcmdpbjoxNnB4IC0xNnB4fS5tYXQtY2FyZC10aXRsZS1ncm91cHttYXJnaW46MH0ubWF0LWNhcmQteGwtaW1hZ2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtaGVhZGVye21hcmdpbjotOHB4IDAgMCAwfS5tYXQtY2FyZC1mb290ZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4fX0ubWF0LWNhcmQtY29udGVudD46Zmlyc3QtY2hpbGQsLm1hdC1jYXJkPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1hdC1jYXJkLWNvbnRlbnQ+Omxhc3QtY2hpbGQ6bm90KC5tYXQtY2FyZC1mb290ZXIpLC5tYXQtY2FyZD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3Rlcil7bWFyZ2luLWJvdHRvbTowfS5tYXQtY2FyZC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi0yNHB4fS5tYXQtY2FyZD4ubWF0LWNhcmQtYWN0aW9uczpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTE2cHg7cGFkZGluZy1ib3R0b206MH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbjpmaXJzdC1jaGlsZCwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b246Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtc3VidGl0bGU6bm90KDpmaXJzdC1jaGlsZCksLm1hdC1jYXJkLXRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LTRweH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LThweH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gemkodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApLG8uWmEobnVsbCwxKV0sbnVsbCxudWxsKX12YXIgVWk9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gSGkodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uWmEobnVsbCwxKSxvLlphKG51bGwsMildLG51bGwsbnVsbCl9dmFyIFFpLHFpLEdpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfSxZaT0oMT09PShRaT1HaSkubGVuZ3RoJiYocWk9UWksUWk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR2kocWkodCksZSl9KSx7bGVmdDpmdW5jdGlvbih0LGUsbixyKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09ciYmKHI9dC5sZW5ndGgpO248cjspe3ZhciBpPW4rcj4+PjE7UWkodFtpXSxlKTwwP249aSsxOnI9aX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgaT1uK3I+Pj4xO1FpKHRbaV0sZSk+MD9yPWk6bj1pKzF9cmV0dXJuIG59fSkucmlnaHQsV2k9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0sWmk9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sS2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLFhpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEppPWZ1bmN0aW9uKHQsZSxuKXt0PSt0LGU9K2Usbj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOituO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrcipuO3JldHVybiBvfSx0bz1NYXRoLnNxcnQoNTApLGVvPU1hdGguc3FydCgxMCksbm89TWF0aC5zcXJ0KDIpLHJvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG8sYSxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKHI9ZTx0KSYmKGk9dCx0PWUsZT1pKSwwPT09KGE9aW8odCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylvW3NdPSh0LXMpL2E7cmV0dXJuIHImJm8ucmV2ZXJzZSgpLG99O2Z1bmN0aW9uIGlvKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLG89ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49dG8/MTA6bz49ZW8/NTpvPj1ubz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PXRvPzEwOm8+PWVvPzU6bz49bm8/MjoxKX1mdW5jdGlvbiBvbyh0LGUsbil7dmFyIHI9TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApKSxvPXIvaTtyZXR1cm4gbz49dG8/aSo9MTA6bz49ZW8/aSo9NTpvPj1ubyYmKGkqPTIpLGU8dD8taTppfXZhciBhbz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX07QXJyYXk7dmFyIHNvPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIGxvKCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgscj17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyB1byhyKX1mdW5jdGlvbiB1byh0KXt0aGlzLl89dH1mdW5jdGlvbiBjbyh0LGUpe2Zvcih2YXIgbixyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChuPXRbcl0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIGZvKHQsZSxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09ZSl7dFtyXT1zbyx0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9dW8ucHJvdG90eXBlPWxvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dW8sb246ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dGhpcy5fLG89KHI9aSwodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO2lmKG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSksdCYmIXIuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSkpLGE9LTEscz1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxzOylpZihuPSh0PW9bYV0pLnR5cGUpaVtuXT1mbyhpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPWZvKGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPHM7KWlmKChuPSh0PW9bYV0pLnR5cGUpJiYobj1jbyhpW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyB1byh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4scixpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylpW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShyPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28pcltvXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIGhvPWxvLHBvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixtbz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6cG8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSx5bz1mdW5jdGlvbih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxtby5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6bW9bZV0sbG9jYWw6dH06dH0sZ289ZnVuY3Rpb24odCl7dmFyIGU9eW8odCk7cmV0dXJuKGUubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09cG8mJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXBvP2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX0pKGUpfTtmdW5jdGlvbiB2bygpe312YXIgYm89ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX07ZnVuY3Rpb24gX28oKXtyZXR1cm5bXX12YXIgd289ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/X286ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX0seG89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBDbz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIUNvLm1hdGNoZXMpe3ZhciBFbz1Dby53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fENvLm1zTWF0Y2hlc1NlbGVjdG9yfHxDby5tb3pNYXRjaGVzU2VsZWN0b3J8fENvLm9NYXRjaGVzU2VsZWN0b3I7eG89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEVvLmNhbGwodGhpcyx0KX19fX12YXIgT289eG8sU289ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9O2Z1bmN0aW9uIGtvKHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWtvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6a28sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIFRvPSIkIjtmdW5jdGlvbiBQbyh0LGUsbixyLGksbyl7Zm9yKHZhciBhLHM9MCxsPWUubGVuZ3RoLHU9by5sZW5ndGg7czx1OysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLHJbc109YSk6bltzXT1uZXcga28odCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihpW3NdPWEpfWZ1bmN0aW9uIEFvKHQsZSxuLHIsaSxvLGEpe3ZhciBzLGwsdSxjPXt9LGY9ZS5sZW5ndGgsaD1vLmxlbmd0aCxwPW5ldyBBcnJheShmKTtmb3Iocz0wO3M8ZjsrK3MpKGw9ZVtzXSkmJihwW3NdPXU9VG8rYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLHUgaW4gYz9pW3NdPWw6Y1t1XT1sKTtmb3Iocz0wO3M8aDsrK3MpKGw9Y1t1PVRvK2EuY2FsbCh0LG9bc10scyxvKV0pPyhyW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbdV09bnVsbCk6bltzXT1uZXcga28odCxvW3NdKTtmb3Iocz0wO3M8ZjsrK3MpKGw9ZVtzXSkmJmNbcFtzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBqbyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIgSW89ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fTtmdW5jdGlvbiBNbyh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fElvKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIE5vKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBSbyh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBEbyh0KX1mdW5jdGlvbiBEbyh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9Tm8odC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBGbyh0LGUpe2Zvcih2YXIgbj1Sbyh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4uYWRkKGVbcl0pfWZ1bmN0aW9uIExvKHQsZSl7Zm9yKHZhciBuPVJvKHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5yZW1vdmUoZVtyXSl9ZnVuY3Rpb24gVm8oKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEJvKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gem8oKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVW8oKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBIbygpe3JldHVybiBudWxsfWZ1bmN0aW9uIFFvKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcW8oKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gR28oKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9RG8ucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgWW89e30sV289bnVsbDtmdW5jdGlvbiBabyh0LGUsbil7cmV0dXJuIHQ9S28odCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBLbyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPVdvO1dvPXI7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e1dvPWl9fX1mdW5jdGlvbiBYbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLG89ZS5sZW5ndGg7cjxvOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gJG8odCxlLG4pe3ZhciByPVlvLmhhc093blByb3BlcnR5KHQudHlwZSk/Wm86S287cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcyxsPXRoaXMuX19vbix1PXIoZSxvLGEpO2lmKGwpZm9yKHZhciBjPTAsZj1sLmxlbmd0aDtjPGY7KytjKWlmKChzPWxbY10pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPXUscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHUsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjp1LGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gSm8odCxlLG4pe3ZhciByPUlvKHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KFlvPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdGE9W251bGxdO2Z1bmN0aW9uIGVhKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIG5hKCl7cmV0dXJuIG5ldyBlYShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHRhKX1lYS5wcm90b3R5cGU9bmEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplYSxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWJvKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBvLGEscz1lW2ldLGw9cy5sZW5ndGgsdT1yW2ldPW5ldyBBcnJheShsKSxjPTA7YzxsOysrYykobz1zW2NdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyxjLHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSx1W2NdPWEpO3JldHVybiBuZXcgZWEocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD13byh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9W10saT1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihyLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyx1LHMpKSxpLnB1c2goYSkpO3JldHVybiBuZXcgZWEocixpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Pbyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhPWVbaV0scz1hLmxlbmd0aCxsPXJbaV09W10sdT0wO3U8czsrK3UpKG89YVt1XSkmJnQuY2FsbChvLG8uX19kYXRhX18sdSxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgZWEocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7ZFsrK2NdPXR9KSxkO3ZhciBuLHI9ZT9BbzpQbyxpPXRoaXMuX3BhcmVudHMsbz10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBhPW8ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGM9MDtjPGE7KytjKXt2YXIgZj1pW2NdLGg9b1tjXSxwPWgubGVuZ3RoLGQ9dC5jYWxsKGYsZiYmZi5fX2RhdGFfXyxjLGkpLG09ZC5sZW5ndGgseT1sW2NdPW5ldyBBcnJheShtKSxnPXNbY109bmV3IEFycmF5KG0pO3IoZixoLHksZyx1W2NdPW5ldyBBcnJheShwKSxkLGUpO2Zvcih2YXIgdixiLF89MCx3PTA7XzxtOysrXylpZih2PXlbX10pe2ZvcihfPj13JiYodz1fKzEpOyEoYj1nW3ddKSYmKyt3PG07KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyBlYShzLGkpKS5fZW50ZXI9bCxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVhKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKFNvKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgZWEodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChTbyksdGhpcy5fcGFyZW50cyl9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPU1hdGgubWluKHIsbi5sZW5ndGgpLG89bmV3IEFycmF5KHIpLGE9MDthPGk7KythKWZvcih2YXIgcyxsPWVbYV0sdT1uW2FdLGM9bC5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxoPTA7aDxjOysraCkocz1sW2hdfHx1W2hdKSYmKGZbaF09cyk7Zm9yKDthPHI7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGVhKG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgcixpPXRbZV0sbz1pLmxlbmd0aC0xLGE9aVtvXTstLW8+PTA7KShyPWlbb10pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9am8pO2Zvcih2YXIgbj10aGlzLl9ncm91cHMscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLHU9aVtvXT1uZXcgQXJyYXkobCksYz0wO2M8bDsrK2MpKGE9c1tjXSkmJih1W2NdPWEpO3Uuc29ydChlKX1yZXR1cm4gbmV3IGVhKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RbKytlXT10aGlzfSksdH0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHI9dFtlXSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYT1yW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK3R9KSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLG89ZVtuXSxhPTAscz1vLmxlbmd0aDthPHM7KythKShpPW9bYV0pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj15byh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fToiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19Om4ubG9jYWw/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX0pKHQsZSxudWxsPT1uPyIiOm4pKTpNbyh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LGUpe3ZhciBuPU5vKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPVJvKHRoaXMubm9kZSgpKSxpPS0xLG89bi5sZW5ndGg7KytpPG87KWlmKCFyLmNvbnRhaW5zKG5baV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP0ZvOkxvKSh0aGlzLHQpfX06ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtGbyh0aGlzLHQpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7TG8odGhpcyx0KX19KShuLGUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9WbzooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0JvOigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX0pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh6byl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChVbyl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdvKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdvKHQpLHI9bnVsbD09ZT9IbzoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmJvKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChRbyl9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P0dvOnFvKX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvPSh0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/JG86WG8sbnVsbD09biYmKG49ITEpLHI9MDtyPGE7KytyKXRoaXMuZWFjaChzKG9bcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCx1PTAsYz1zLmxlbmd0aDt1PGM7Kyt1KWZvcihyPTAsbD1zW3VdO3I8YTsrK3IpaWYoKGk9b1tyXSkudHlwZT09PWwudHlwZSYmaS5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEpvKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBKbyh0aGlzLHQsZSl9fSkodCxlKSl9fTt2YXIgcmE9bmEsaWE9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBlYShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGVhKFtbdF1dLHRhKX0sb2E9MDtmdW5jdGlvbiBhYSgpe3RoaXMuXz0iQCIrKCsrb2EpLnRvU3RyaW5nKDM2KX1hYS5wcm90b3R5cGU9KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhYX0pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YWEsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHNhPWZ1bmN0aW9uKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH07ZnVuY3Rpb24gbGEodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdWEoKXt9dmFyIGNhPSJcXHMqKFsrLV0/XFxkKylcXHMqIixmYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixoYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIscGE9L14jKFswLTlhLWZdezN9KSQvLGRhPS9eIyhbMC05YS1mXXs2fSkkLyxtYT1uZXcgUmVnRXhwKCJecmdiXFwoIitbY2EsY2EsY2FdKyJcXCkkIikseWE9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2hhLGhhLGhhXSsiXFwpJCIpLGdhPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbY2EsY2EsY2EsZmFdKyJcXCkkIiksdmE9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1toYSxoYSxoYSxmYV0rIlxcKSQiKSxiYT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbZmEsaGEsaGFdKyJcXCkkIiksX2E9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tmYSxoYSxoYSxmYV0rIlxcKSQiKSx3YT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiB4YSh0KXt2YXIgZTtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cGEuZXhlYyh0KSk/bmV3IGthKChlPXBhcnNlSW50KGVbMV0sMTYpKT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOihlPWRhLmV4ZWModCkpP0NhKHBhcnNlSW50KGVbMV0sMTYpKTooZT1tYS5leGVjKHQpKT9uZXcga2EoZVsxXSxlWzJdLGVbM10sMSk6KGU9eWEuZXhlYyh0KSk/bmV3IGthKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPWdhLmV4ZWModCkpP0VhKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPXZhLmV4ZWModCkpP0VhKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPWJhLmV4ZWModCkpP1BhKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9X2EuZXhlYyh0KSk/UGEoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTp3YS5oYXNPd25Qcm9wZXJ0eSh0KT9DYSh3YVt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGthKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gQ2EodCl7cmV0dXJuIG5ldyBrYSh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gRWEodCxlLG4scil7cmV0dXJuIHI8PTAmJih0PWU9bj1OYU4pLG5ldyBrYSh0LGUsbixyKX1mdW5jdGlvbiBPYSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHVhfHwodD14YSh0KSksdD9uZXcga2EoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IGthfWZ1bmN0aW9uIFNhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9PYSh0KTpuZXcga2EodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGthKHQsZSxuLHIpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBUYSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFBhKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgamEodCxlLG4scil9ZnVuY3Rpb24gQWEodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBqYSlyZXR1cm4gbmV3IGphKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHVhfHwodD14YSh0KSksIXQpcmV0dXJuIG5ldyBqYTtpZih0IGluc3RhbmNlb2YgamEpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxvPU1hdGgubWF4KGUsbixyKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4tcikvcys2KihuPHIpOm49PT1vPyhyLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBqYShhLHMsbCx0Lm9wYWNpdHkpfSh0KTpuZXcgamEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGphKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBJYSh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9c2EodWEseGEse2Rpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuaGV4KCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksc2Eoa2EsU2EsbGEodWEse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBrYSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcga2EodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4iIyIrVGEodGhpcy5yKStUYSh0aGlzLmcpK1RhKHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLHNhKGphLEFhLGxhKHVhLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgamEodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgamEodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSplLGk9MipuLXI7cmV0dXJuIG5ldyBrYShJYSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxJYSh0LGksciksSWEodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyIE1hPU1hdGguUEkvMTgwLE5hPTE4MC9NYXRoLlBJLFJhPS45NjQyMixEYT0xLEZhPS44MjUyMSxMYT00LzI5LFZhPTYvMjksQmE9MypWYSpWYSx6YT1WYSpWYSpWYTtmdW5jdGlvbiBVYSh0KXtpZih0IGluc3RhbmNlb2YgSGEpcmV0dXJuIG5ldyBIYSh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBaYSl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IEhhKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqTWE7cmV0dXJuIG5ldyBIYSh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBrYXx8KHQ9T2EodCkpO3ZhciBuLHIsaT1ZYSh0LnIpLG89WWEodC5nKSxhPVlhKHQuYikscz1RYSgoLjIyMjUwNDUqaSsuNzE2ODc4NipvKy4wNjA2MTY5KmEpL0RhKTtyZXR1cm4gaT09PW8mJm89PT1hP249cj1zOihuPVFhKCguNDM2MDc0NyppKy4zODUwNjQ5Km8rLjE0MzA4MDQqYSkvUmEpLHI9UWEoKC4wMTM5MzIyKmkrLjA5NzEwNDUqbysuNzE0MTczMyphKS9GYSkpLG5ldyBIYSgxMTYqcy0xNiw1MDAqKG4tcyksMjAwKihzLXIpLHQub3BhY2l0eSl9ZnVuY3Rpb24gSGEodCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFFhKHQpe3JldHVybiB0PnphP01hdGgucG93KHQsMS8zKTp0L0JhK0xhfWZ1bmN0aW9uIHFhKHQpe3JldHVybiB0PlZhP3QqdCp0OkJhKih0LUxhKX1mdW5jdGlvbiBHYSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFlhKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFdhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgWmEpcmV0dXJuIG5ldyBaYSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBIYXx8KHQ9VWEodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBaYShOYU4sMCx0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKk5hO3JldHVybiBuZXcgWmEoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9KHQpOm5ldyBaYSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gWmEodCxlLG4scil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfXNhKEhhLGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9VYSh0KTpuZXcgSGEodCxlLG4sbnVsbD09cj8xOnIpfSxsYSh1YSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIYSh0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhhKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxuPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBrYShHYSgzLjEzMzg1NjEqKGU9UmEqcWEoZSkpLTEuNjE2ODY2NyoodD1EYSpxYSh0KSktLjQ5MDYxNDYqKG49RmEqcWEobikpKSxHYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLEdhKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksc2EoWmEsV2EsbGEodWEse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmEodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBaYSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBVYSh0aGlzKS5yZ2IoKX19KSk7dmFyIEthPS0uMjkyMjcsWGE9LS45MDY0OSwkYT0xLjk3Mjk0LEphPSRhKlhhLHRzPTEuNzgyNzcqJGEsZXM9MS43ODI3NypLYS0gLS4xNDg2MSpYYTtmdW5jdGlvbiBucyh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHJzKXJldHVybiBuZXcgcnModC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Yga2F8fCh0PU9hKHQpKTt2YXIgZT10LmcvMjU1LG49dC5iLzI1NSxyPShlcypuK0phKih0LnIvMjU1KS10cyplKS8oZXMrSmEtdHMpLGk9bi1yLG89KCRhKihlLXIpLUthKmkpL1hhLGE9TWF0aC5zcXJ0KG8qbytpKmkpLygkYSpyKigxLXIpKSxzPWE/TWF0aC5hdGFuMihvLGkpKk5hLTEyMDpOYU47cmV0dXJuIG5ldyBycyhzPDA/cyszNjA6cyxhLHIsdC5vcGFjaXR5KX0odCk6bmV3IHJzKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBycyh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gaXModCxlLG4scixpKXt2YXIgbz10KnQsYT1vKnQ7cmV0dXJuKCgxLTMqdCszKm8tYSkqZSsoNC02Km8rMyphKSpuKygxKzMqdCszKm8tMyphKSpyK2EqaSkvNn1zYShycyxucyxsYSh1YSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHJzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHJzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpNYSxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSkscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcga2EoMjU1KihlK24qKC0uMTQ4NjEqcisxLjc4Mjc3KmkpKSwyNTUqKGUrbiooS2EqcitYYSppKSksMjU1KihlK24qKCRhKnIpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgb3M9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBhcyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fWZ1bmN0aW9uIHNzKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2FzKHQsbj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKTpvcyhpc05hTih0KT9lOnQpfWZ1bmN0aW9uIGxzKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2FzKHQsbik6b3MoaXNOYU4odCk/ZTp0KX12YXIgdXM9ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP2xzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6b3MoaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PVNhKHQpKS5yLChlPVNhKGUpKS5yKSxpPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9bHModC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIGNzKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9U2EoZVtuXSksb1tuXT1yLnJ8fDAsYVtuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIG89dChvKSxhPXQoYSkscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9byh0KSxyLmc9YSh0KSxyLmI9cyh0KSxyKyIifX19dmFyIGZzLGhzLHBzLGRzLG1zPWNzKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sbz10W3IrMV07cmV0dXJuIGlzKChuLXIvZSkqZSxyPjA/dFtyLTFdOjIqaS1vLGksbyxyPGUtMT90W3IrMl06MipvLWkpfX0pLHlzPShjcyhmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpO3JldHVybiBpcygobi1yL2UpKmUsdFsocitlLTEpJWVdLHRbciVlXSx0WyhyKzEpJWVdLHRbKHIrMiklZV0pfX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHQrZSpufX0pLGdzPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx2cz1uZXcgUmVnRXhwKGdzLnNvdXJjZSwiZyIpLGJzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG89Z3MubGFzdEluZGV4PXZzLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1ncy5leGVjKHQpKSYmKHI9dnMuZXhlYyhlKSk7KShpPXIuaW5kZXgpPm8mJihpPWUuc2xpY2UobyxpKSxzW2FdP3NbYV0rPWk6c1srK2FdPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1thXT9zW2FdKz1yOnNbKythXT1yOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnlzKG4scil9KSksbz12cy5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihpPWUuc2xpY2Uobyksc1thXT9zW2FdKz1pOnNbKythXT1pKSxzLmxlbmd0aDwyP2xbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0obFswXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWxbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfSxfcz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dHlwZW9mIGU7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09PXI/b3MoZSk6KCJudW1iZXIiPT09cj95czoic3RyaW5nIj09PXI/KG49eGEoZSkpPyhlPW4sdXMpOmJzOmUgaW5zdGFuY2VvZiB4YT91czplIGluc3RhbmNlb2YgRGF0ZT9mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBuLnNldFRpbWUodCtlKnIpLG59fTpBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKW9bbl09X3ModFtuXSxlW25dKTtmb3IoO248cjsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX06ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP2Z1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1fcyh0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fTp5cykodCxlKX0sd3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqbil9fSx4cz0xODAvTWF0aC5QSSxDcz17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxFcz1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLChsPXQqbitlKnIpJiYobi09dCpsLHItPWUqbCksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxsLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSp4cyxza2V3WDpNYXRoLmF0YW4obCkqeHMsc2NhbGVYOmEsc2NhbGVZOnN9fTtmdW5jdGlvbiBPcyh0LGUsbixyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgcz1bXSxsPVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQscixpLG8sYSxzKXtpZih0IT09aXx8ciE9PW8pe3ZhciBsPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmwtNCx4OnlzKHQsaSl9LHtpOmwtMix4OnlzKHIsbyl9KX1lbHNlKGl8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK2krZStvK24pfShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVkscyxsKSxmdW5jdGlvbih0LGUsbixvKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLHIpLTIseDp5cyh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK3IpfShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2goaShuKSsic2tld1goIixudWxsLHIpLTIseDp5cyh0LGUpfSk6ZSYmbi5wdXNoKGkobikrInNrZXdYKCIrZStyKX0oby5za2V3WCxhLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLG4scixvLGEpe2lmKHQhPT1ufHxlIT09cil7dmFyIHM9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTpzLTQseDp5cyh0LG4pfSx7aTpzLTIseDp5cyhlLHIpfSl9ZWxzZSAxPT09biYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK24rIiwiK3IrIikiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyxsKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxyPWwubGVuZ3RoOysrbjxyOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBTcz1PcyhmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P0NzOihmc3x8KGZzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGhzPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxwcz1kb2N1bWVudC5kZWZhdWx0VmlldyksZnMuc3R5bGUudHJhbnNmb3JtPXQsdD1wcy5nZXRDb21wdXRlZFN0eWxlKGhzLmFwcGVuZENoaWxkKGZzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxocy5yZW1vdmVDaGlsZChmcyksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksRXMoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksa3M9T3MoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/Q3M6KGRzfHwoZHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PWRzLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0VzKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOkNzKX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBUcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPUFhKGUpKS5oLChuPUFhKG4pKS5oKSxpPWxzKGUucyxuLnMpLG89bHMoZS5sLG4ubCksYT1scyhlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1pKHQpLGUubD1vKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fX1mdW5jdGlvbiBQcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPVdhKGUpKS5oLChuPVdhKG4pKS5oKSxpPWxzKGUuYyxuLmMpLG89bHMoZS5sLG4ubCksYT1scyhlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUuYz1pKHQpLGUubD1vKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fX1mdW5jdGlvbiBBcyh0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtmdW5jdGlvbiByKGUscil7dmFyIGk9dCgoZT1ucyhlKSkuaCwocj1ucyhyKSkuaCksbz1scyhlLnMsci5zKSxhPWxzKGUubCxyLmwpLHM9bHMoZS5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9byh0KSxlLmw9YShNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixyLmdhbW1hPWUscn0oMSl9TWF0aCxUcyhzcyksVHMobHMpLFBzKHNzKSxQcyhscyksQXMoc3MpO3ZhciBqcyxJcyxNcz1BcyhscyksTnM9MCxScz0wLERzPTAsRnM9MWUzLExzPTAsVnM9MCxCcz0wLHpzPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFVzPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEhzKCl7cmV0dXJuIFZzfHwoVXMoUXMpLFZzPXpzLm5vdygpK0JzKX1mdW5jdGlvbiBRcygpe1ZzPTB9ZnVuY3Rpb24gcXMoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEdzKHQsZSxuKXt2YXIgcj1uZXcgcXM7cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBZcygpe1ZzPShMcz16cy5ub3coKSkrQnMsTnM9UnM9MDt0cnl7IWZ1bmN0aW9uKCl7SHMoKSwrK05zO2Zvcih2YXIgdCxlPWpzO2U7KSh0PVZzLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1Oc30oKX1maW5hbGx5e05zPTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPWpzLHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpqcz1lKTtJcz10LFpzKHIpfSgpLFZzPTB9fWZ1bmN0aW9uIFdzKCl7dmFyIHQ9enMubm93KCksZT10LUxzO2U+RnMmJihCcy09ZSxMcz10KX1mdW5jdGlvbiBacyh0KXtOc3x8KFJzJiYoUnM9Y2xlYXJUaW1lb3V0KFJzKSksdC1Wcz4yND8odDwxLzAmJihScz1zZXRUaW1lb3V0KFlzLHQtenMubm93KCktQnMpKSxEcyYmKERzPWNsZWFySW50ZXJ2YWwoRHMpKSk6KERzfHwoTHM9enMubm93KCksRHM9c2V0SW50ZXJ2YWwoV3MsRnMpKSxOcz0xLFVzKFlzKSkpfXFzLnByb3RvdHlwZT1Hcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnFzLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9IcygpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxJcz09PXRoaXN8fChJcz9Jcy5fbmV4dD10aGlzOmpzPXRoaXMsSXM9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixacygpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxacygpKX19O3ZhciBLcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IHFzO3JldHVybiByLnJlc3RhcnQoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSxlPW51bGw9PWU/MDorZSxuKSxyfSxYcz1obygic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSwkcz1bXSxKcz0wLHRsPTEsZWw9MixubD0zLHJsPTQsaWw9NSxvbD02LGFsPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihuIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8obCl7dmFyIHUsYyxmLGg7aWYobi5zdGF0ZSE9PXRsKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZihoLnN0YXRlPT09bmwpcmV0dXJuIEtzKG8pO2guc3RhdGU9PT1ybD8oaC5zdGF0ZT1vbCxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihoLnN0YXRlPW9sLGgudGltZXIuc3RvcCgpLGRlbGV0ZSBpW3VdKX1pZihLcyhmdW5jdGlvbigpe24uc3RhdGU9PT1ubCYmKG4uc3RhdGU9cmwsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSksbi5zdGF0ZT1lbCxuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxuLnN0YXRlPT09ZWwpe2ZvcihuLnN0YXRlPW5sLHI9bmV3IEFycmF5KGY9bi50d2Vlbi5sZW5ndGgpLHU9MCxjPS0xO3U8ZjsrK3UpKGg9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytjXT1oKTtyLmxlbmd0aD1jKzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPWlsLDEpLG89LTEsYT1yLmxlbmd0aDsrK288YTspcltvXS5jYWxsKG51bGwsaSk7bi5zdGF0ZT09PWlsJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgciBpbiBuLnN0YXRlPW9sLG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1HcyhmdW5jdGlvbih0KXtuLnN0YXRlPXRsLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9LDAsbi50aW1lKX0odCxuLHtuYW1lOmUsaW5kZXg6cixncm91cDppLG9uOlhzLHR3ZWVuOiRzLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOkpzfSl9O2Z1bmN0aW9uIHNsKHQsZSl7dmFyIG49dWwodCxlKTtpZihuLnN0YXRlPkpzKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gbGwodCxlKXt2YXIgbj11bCh0LGUpO2lmKG4uc3RhdGU+ZWwpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gdWwodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBjbCh0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PWxsKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih0KXtyZXR1cm4gdWwodCxyKS52YWx1ZVtlXX19dmFyIGZsPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT95czplIGluc3RhbmNlb2YgeGE/dXM6KG49eGEoZSkpPyhlPW4sdXMpOmJzKSh0LGUpfSxobD1yYS5wcm90b3R5cGUuY29uc3RydWN0b3IscGw9MDtmdW5jdGlvbiBkbCh0LGUsbixyKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPXJ9ZnVuY3Rpb24gbWwoKXtyZXR1cm4rK3BsfXZhciB5bD1yYS5wcm90b3R5cGU7ZnVuY3Rpb24gZ2wodCl7cmV0dXJuK3R9ZGwucHJvdG90eXBlPShmdW5jdGlvbih0KXtyZXR1cm4gcmEoKS50cmFuc2l0aW9uKHQpfSkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkbCxzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ibyh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgcyxsLHU9clthXSxjPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkoYyksaD0wO2g8YzsrK2gpKHM9dVtoXSkmJihsPXQuY2FsbChzLHMuX19kYXRhX18saCx1KSkmJigiX19kYXRhX18iaW4gcyYmKGwuX19kYXRhX189cy5fX2RhdGFfXyksZltoXT1sLGFsKGZbaF0sZSxuLGgsZix1bChzLG4pKSk7cmV0dXJuIG5ldyBkbChvLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9d28odCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsLHU9cltzXSxjPXUubGVuZ3RoLGY9MDtmPGM7KytmKWlmKGw9dVtmXSl7Zm9yKHZhciBoLHA9dC5jYWxsKGwsbC5fX2RhdGFfXyxmLHUpLGQ9dWwobCxuKSxtPTAseT1wLmxlbmd0aDttPHk7KyttKShoPXBbbV0pJiZhbChoLGUsbixtLHAsZCk7by5wdXNoKHApLGEucHVzaChsKX1yZXR1cm4gbmV3IGRsKG8sYSxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU9vKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBvLGE9ZVtpXSxzPWEubGVuZ3RoLGw9cltpXT1bXSx1PTA7dTxzOysrdSkobz1hW3VdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyx1LGEpJiZsLnB1c2gobyk7cmV0dXJuIG5ldyBkbChyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPU1hdGgubWluKHIsbi5sZW5ndGgpLG89bmV3IEFycmF5KHIpLGE9MDthPGk7KythKWZvcih2YXIgcyxsPWVbYV0sdT1uW2FdLGM9bC5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxoPTA7aDxjOysraCkocz1sW2hdfHx1W2hdKSYmKGZbaF09cyk7Zm9yKDthPHI7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGRsKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBobCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49bWwoKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSxzPXJbb10sbD1zLmxlbmd0aCx1PTA7dTxsOysrdSlpZihhPXNbdV0pe3ZhciBjPXVsKGEsZSk7YWwoYSx0LG4sdSxzLHt0aW1lOmMudGltZStjLmRlbGF5K2MuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpjLmR1cmF0aW9uLGVhc2U6Yy5lYXNlfSl9cmV0dXJuIG5ldyBkbChyLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDp5bC5jYWxsLG5vZGVzOnlsLm5vZGVzLG5vZGU6eWwubm9kZSxzaXplOnlsLnNpemUsZW1wdHk6eWwuZW1wdHksZWFjaDp5bC5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj91bCh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbz1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pfShlKT9zbDpsbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1pfX0obix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPXlvKHQpLHI9InRyYW5zZm9ybSI9PT1uP2tzOmZsO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXM/bnVsbDphPT09ciYmcz09PWk/bzpvPWUocj1hLGk9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKG4scixjbCh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShuKToobi5sb2NhbD9mdW5jdGlvbih0LGUsbil7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1uP251bGw6bz09PXI/aTppPWUocj1vLG4pfX06ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1uP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0pKG4scixlKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9eW8odCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLHI9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLHIoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLHI9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlKHQscihlKSl9fXJldHVybiBuLl92YWx1ZT1lLG59KShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP1NzOmZsO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU1vKHRoaXMsdCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxNbyh0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09biYmYT09PXI/aTppPWUobj1vLHI9YSl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX0odCkpOnRoaXMuc3R5bGVUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9TW8odGhpcyx0KSxzPW4odGhpcyk7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHM9TW8odGhpcyx0KSksYT09PXM/bnVsbDphPT09ciYmcz09PWk/bzpvPWUocj1hLGk9cyl9fSh0LHIsY2wodGhpcywic3R5bGUuIit0LGUpKTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1Nbyh0aGlzLHQpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKyIiKSxuKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcigpe3ZhciByPXRoaXMsaT1lLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24oZSl7ci5zdHlsZS5zZXRQcm9wZXJ0eSh0LGkoZSksbil9fXJldHVybiByLl92YWx1ZT1lLHJ9KHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KGNsKHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT11bCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1pLmxlbmd0aDtvPGE7KytvKWlmKChyPWlbb10pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCxlKXt2YXIgbixyO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWxsKHRoaXMsdCksbz1pLnR3ZWVuO2lmKG8hPT1uKWZvcih2YXIgYT0wLHM9KHI9bj1vKS5sZW5ndGg7YTxzOysrYSlpZihyW2FdLm5hbWU9PT1lKXsocj1yLnNsaWNlKCkpLnNwbGljZShhLDEpO2JyZWFrfWkudHdlZW49cn19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1sbCh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09cil7aT0ocj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCx1PWkubGVuZ3RoO2w8dTsrK2wpaWYoaVtsXS5uYW1lPT09ZSl7aVtsXT1zO2JyZWFrfWw9PT11JiZpLnB1c2gocyl9by50d2Vlbj1pfX0pKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtzbCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtzbCh0aGlzLHQpLmRlbGF5PWV9fSkoZSx0KSk6dWwodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtsbCh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtsbCh0aGlzLHQpLmR1cmF0aW9uPWV9fSkoZSx0KSk6dWwodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe2xsKHRoaXMsdCkuZWFzZT1lfX0oZSx0KSk6dWwodGhpcy5ub2RlKCksZSkuZWFzZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksTWF0aCxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKGUrMSkqdCtlKSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8MT90KnQqKChlKzEpKnQtZSk6KHQtPTIpKnQqKChlKzEpKnQrZSkrMikvMn1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpO3ZhciB2bD0yKk1hdGguUEksYmw9KGZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPXZsKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoci10KS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKnZsKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89dmwpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtZSpNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K3IpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qdmwpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxmdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz12bCk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/ZSpNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChyLXQpL24pOjItZSpNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigocit0KS9uKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKnZsKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykse3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfX0pO2Z1bmN0aW9uIF9sKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIGJsLnRpbWU9SHMoKSxibDtyZXR1cm4gbn1mdW5jdGlvbiB3bCh0KXtyZXR1cm57dHlwZTp0fX1yYS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihpIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW2ldKS5uYW1lPT09ZT8ocj1uLnN0YXRlPmVsJiZuLnN0YXRlPGlsLG4uc3RhdGU9b2wsbi50aW1lci5zdG9wKCksciYmbi5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBvW2ldKTphPSExO2EmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19KHRoaXMsdCl9KX0scmEucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgZGw/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1tbCgpLChuPWJsKS50aW1lPUhzKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSxzPXJbb10sbD1zLmxlbmd0aCx1PTA7dTxsOysrdSkoYT1zW3VdKSYmYWwoYSx0LGUsdSxzLG58fF9sKGEsZSkpO3JldHVybiBuZXcgZGwocix0aGlzLl9wYXJlbnRzLHQsZSl9LFsiZSIsInciXS5tYXAod2wpLFsibiIsInMiXS5tYXAod2wpLFsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKHdsKSxNYXRoLE1hdGgsTWF0aCxNYXRoLEFycmF5O3ZhciB4bD1NYXRoLlBJLENsPTIqeGwsRWw9Q2wtMWUtNjtmdW5jdGlvbiBPbCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFNsKCl7cmV0dXJuIG5ldyBPbH1PbC5wcm90b3R5cGU9U2wucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPbCxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLG8pe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9KG49K24pLSh0PSt0KSxsPShyPStyKS0oZT0rZSksdT1vLXQsYz1hLWUsZj11KnUrYypjO2lmKChpPStpKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGY+MWUtNilpZihNYXRoLmFicyhjKnMtbCp1KT4xZS02JiZpKXt2YXIgaD1uLW8scD1yLWEsZD1zKnMrbCpsLG09aCpoK3AqcCx5PU1hdGguc3FydChkKSxnPU1hdGguc3FydChmKSx2PWkqTWF0aC50YW4oKHhsLU1hdGguYWNvcygoZCtmLW0pLygyKnkqZykpKS8yKSxiPXYvZyxfPXYveTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmMpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsoYypoPnUqcCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qbCl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0PSt0LGU9K2U7dmFyIGE9KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxsPXQrYSx1PWUrcyxjPTFebyxmPW8/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2wrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWwpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLXUpPjFlLTYpJiYodGhpcy5fKz0iTCIrbCsiLCIrdSksbiYmKGY8MCYmKGY9ZiVDbCtDbCksZj5FbD90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrYysiLCIrKHQtYSkrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrYysiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9dSk6Zj4xZS02JiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhmPj14bCkrIiwiK2MrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBrbD1TbDtmdW5jdGlvbiBUbCgpe31mdW5jdGlvbiBQbCh0LGUpe3ZhciBuPW5ldyBUbDtpZih0IGluc3RhbmNlb2YgVGwpdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8bzspbi5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPG87KW4uc2V0KGUocj10W2ldLGksdCkscil9ZWxzZSBpZih0KWZvcih2YXIgYSBpbiB0KW4uc2V0KGEsdFthXSk7cmV0dXJuIG59ZnVuY3Rpb24gQWwoKXt9VGwucHJvdG90eXBlPVBsLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGwsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIGpsPVBsLnByb3RvdHlwZTtBbC5wcm90b3R5cGU9KGZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IEFsO2lmKHQgaW5zdGFuY2VvZiBBbCl0LmVhY2goZnVuY3Rpb24odCl7bi5hZGQodCl9KTtlbHNlIGlmKHQpe3ZhciByPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxpOyluLmFkZCh0W3JdKTtlbHNlIGZvcig7KytyPGk7KW4uYWRkKGUodFtyXSxyLHQpKX1yZXR1cm4gbn0pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QWwsaGFzOmpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmpsLnJlbW92ZSxjbGVhcjpqbC5jbGVhcix2YWx1ZXM6amwua2V5cyxzaXplOmpsLnNpemUsZW1wdHk6amwuZW1wdHksZWFjaDpqbC5lYWNofSxBcnJheTt2YXIgSWw9e30sTWw9e30sTmw9MzQsUmw9MTAsRGw9MTM7ZnVuY3Rpb24gRmwodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsiXSJ9KS5qb2luKCIsIikrIn0iKX12YXIgTGw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gcih0LGUpe3ZhciByLGk9W10sbz10Lmxlbmd0aCxhPTAscz0wLGw9bzw9MCx1PSExO2Z1bmN0aW9uIGMoKXtpZihsKXJldHVybiBNbDtpZih1KXJldHVybiB1PSExLElsO3ZhciBlLHIsaT1hO2lmKHQuY2hhckNvZGVBdChpKT09PU5sKXtmb3IoO2ErKzxvJiZ0LmNoYXJDb2RlQXQoYSkhPT1ObHx8dC5jaGFyQ29kZUF0KCsrYSk9PT1ObDspO3JldHVybihlPWEpPj1vP2w9ITA6KHI9dC5jaGFyQ29kZUF0KGErKykpPT09Umw/dT0hMDpyPT09RGwmJih1PSEwLHQuY2hhckNvZGVBdChhKT09PVJsJiYrK2EpLHQuc2xpY2UoaSsxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YTxvOyl7aWYoKHI9dC5jaGFyQ29kZUF0KGU9YSsrKSk9PT1SbCl1PSEwO2Vsc2UgaWYocj09PURsKXU9ITAsdC5jaGFyQ29kZUF0KGEpPT09UmwmJisrYTtlbHNlIGlmKHIhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGksZSl9cmV0dXJuIGw9ITAsdC5zbGljZShpLG8pfWZvcih0LmNoYXJDb2RlQXQoby0xKT09PVJsJiYtLW8sdC5jaGFyQ29kZUF0KG8tMSk9PT1EbCYmLS1vOyhyPWMoKSkhPT1NbDspe2Zvcih2YXIgZj1bXTtyIT09SWwmJnIhPT1NbDspZi5wdXNoKHIpLHI9YygpO2UmJm51bGw9PShmPWUoZixzKyspKXx8aS5wdXNoKGYpfXJldHVybiBpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixpLG89cih0LGZ1bmN0aW9uKHQscil7aWYobilyZXR1cm4gbih0LHItMSk7aT10LG49ZT9mdW5jdGlvbih0LGUpe3ZhciBuPUZsKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBlKG4ociksaSx0KX19KHQsZSk6RmwodCl9KTtyZXR1cm4gby5jb2x1bW5zPWl8fFtdLG99LHBhcnNlUm93czpyLGZvcm1hdDpmdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1uJiYobj1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIHIgaW4gdClyIGluIGV8fG4ucHVzaChlW3JdPXIpfSksbn0oZSkpLFtuLm1hcChvKS5qb2luKHQpXS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvKGVbdF0pfSkuam9pbih0KX0pKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChpKS5qb2luKCJcbiIpfX19LFZsPUxsKCIsIikucGFyc2UsQmw9TGwoIlx0IikucGFyc2U7ZnVuY3Rpb24gemwodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX12YXIgVWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKHpsKX07ZnVuY3Rpb24gSGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49dm9pZCAwKSxVbChlLG4pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxyKX0pfX1mdW5jdGlvbiBRbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gVWwoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSx0KX0pfX1IbChWbCksSGwoQmwpLFFsKCJhcHBsaWNhdGlvbi94bWwiKSxRbCgidGV4dC9odG1sIik7dmFyIHFsPVFsKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gR2wodCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLG8sYSxzLGwsdSxjLGYsaCxwPXQuX3Jvb3QsZD17ZGF0YTpyfSxtPXQuX3gwLHk9dC5feTAsZz10Ll94MSx2PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigodT1lPj0obz0obStnKS8yKSk/bT1vOmc9bywoYz1uPj0oYT0oeSt2KS8yKSk/eT1hOnY9YSxpPXAsIShwPXBbZj1jPDwxfHVdKSlyZXR1cm4gaVtmXT1kLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZuPT09bClyZXR1cm4gZC5uZXh0PXAsaT9pW2ZdPWQ6dC5fcm9vdD1kLHQ7ZG97aT1pP2lbZl09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLCh1PWU+PShvPShtK2cpLzIpKT9tPW86Zz1vLChjPW4+PShhPSh5K3YpLzIpKT95PWE6dj1hfXdoaWxlKChmPWM8PDF8dSk9PShoPShsPj1hKTw8MXxzPj1vKSk7cmV0dXJuIGlbaF09cCxpW2ZdPWQsdH12YXIgWWw9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9cix0aGlzLnkxPWl9O2Z1bmN0aW9uIFdsKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFpsKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEtsKHQsZSxuLHIsaSxvKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gWGwodCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciAkbD0oZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBLbChudWxsPT1lP1dsOmUsbnVsbD09bj9abDpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/cjpyLmFkZEFsbCh0KX0pLnByb3RvdHlwZT1LbC5wcm90b3R5cGU7JGwuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgS2wodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIG47aWYoIXIubGVuZ3RoKXJldHVybiBuLl9yb290PVhsKHIpLG47Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9ci5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09WGwoZSkpO3JldHVybiBufSwkbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBHbCh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSwkbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPTEvMCx1PTEvMCxjPS0xLzAsZj0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwoYVtuXT1yLHNbbl09aSxyPGwmJihsPXIpLHI+YyYmKGM9ciksaTx1JiYodT1pKSxpPmYmJihmPWkpKTtmb3IoYzxsJiYobD10aGlzLl94MCxjPXRoaXMuX3gxKSxmPHUmJih1PXRoaXMuX3kwLGY9dGhpcy5feTEpLHRoaXMuY292ZXIobCx1KS5jb3ZlcihjLGYpLG49MDtuPG87KytuKUdsKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSwkbC5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlpPShuPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShuPnR8fHQ+aXx8cj5lfHxlPm8pKXJldHVybiB0aGlzO3ZhciBhLHMsbD1pLW4sdT10aGlzLl9yb290O3N3aXRjaChzPShlPChyK28pLzIpPDwxfHQ8KG4raSkvMil7Y2FzZSAwOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUobz1yKyhsKj0yKSx0PihpPW4rbCl8fGU+byk7YnJlYWs7Y2FzZSAxOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUobz1yKyhsKj0yKSwobj1pLWwpPnR8fGU+byk7YnJlYWs7Y2FzZSAyOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUocj1vLShsKj0yKSx0PihpPW4rbCl8fHI+ZSk7YnJlYWs7Y2FzZSAzOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUocj1vLShsKj0yKSwobj1pLWwpPnR8fHI+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PXUpfXJldHVybiB0aGlzLl94MD1uLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LCRsLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sJGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSwkbC5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG8sYSxzLGwsdSxjPXRoaXMuX3gwLGY9dGhpcy5feTAsaD10aGlzLl94MSxwPXRoaXMuX3kxLGQ9W10sbT10aGlzLl9yb290O2ZvcihtJiZkLnB1c2gobmV3IFlsKG0sYyxmLGgscCkpLG51bGw9PW4/bj0xLzA6KGM9dC1uLGY9ZS1uLGg9dCtuLHA9ZStuLG4qPW4pO2w9ZC5wb3AoKTspaWYoISghKG09bC5ub2RlKXx8KGk9bC54MCk+aHx8KG89bC55MCk+cHx8KGE9bC54MSk8Y3x8KHM9bC55MSk8ZikpaWYobS5sZW5ndGgpe3ZhciB5PShpK2EpLzIsZz0obytzKS8yO2QucHVzaChuZXcgWWwobVszXSx5LGcsYSxzKSxuZXcgWWwobVsyXSxpLGcseSxzKSxuZXcgWWwobVsxXSx5LG8sYSxnKSxuZXcgWWwobVswXSxpLG8seSxnKSksKHU9KGU+PWcpPDwxfHQ+PXkpJiYobD1kW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMV09ZFtkLmxlbmd0aC0xLXVdLGRbZC5sZW5ndGgtMS11XT1sKX1lbHNle3ZhciB2PXQtK3RoaXMuX3guY2FsbChudWxsLG0uZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxtLmRhdGEpLF89dip2K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2M9dC13LGY9ZS13LGg9dCt3LHA9ZSt3LHI9bS5kYXRhfX1yZXR1cm4gcn0sJGwucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLG8sYSxzLGwsdSxjLGYsaCxwPXRoaXMuX3Jvb3QsZD10aGlzLl94MCxtPXRoaXMuX3kwLHk9dGhpcy5feDEsZz10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKCh1PW8+PShzPShkK3kpLzIpKT9kPXM6eT1zLChjPWE+PShsPShtK2cpLzIpKT9tPWw6Zz1sLGU9cCwhKHA9cFtmPWM8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsoZVtmKzEmM118fGVbZisyJjNdfHxlW2YrMyYzXSkmJihuPWUsaD1mKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKHI9cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1wLm5leHQpJiZkZWxldGUgcC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbZl09aTpkZWxldGUgZVtmXSwocD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmcD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIXAubGVuZ3RoJiYobj9uW2hdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSwkbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSwkbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LCRsLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0sJGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHM9W10sbD10aGlzLl9yb290O2ZvcihsJiZzLnB1c2gobmV3IFlsKGwsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGw9ZS5ub2RlLHI9ZS54MCxpPWUueTAsbz1lLngxLGE9ZS55MSkmJmwubGVuZ3RoKXt2YXIgdT0ocitvKS8yLGM9KGkrYSkvMjsobj1sWzNdKSYmcy5wdXNoKG5ldyBZbChuLHUsYyxvLGEpKSwobj1sWzJdKSYmcy5wdXNoKG5ldyBZbChuLHIsYyx1LGEpKSwobj1sWzFdKSYmcy5wdXNoKG5ldyBZbChuLHUsaSxvLGMpKSwobj1sWzBdKSYmcy5wdXNoKG5ldyBZbChuLHIsaSx1LGMpKX1yZXR1cm4gdGhpc30sJGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgWWwodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciBpPWUubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1lLngwLHM9ZS55MCxsPWUueDEsdT1lLnkxLGM9KGErbCkvMixmPShzK3UpLzI7KG89aVswXSkmJm4ucHVzaChuZXcgWWwobyxhLHMsYyxmKSksKG89aVsxXSkmJm4ucHVzaChuZXcgWWwobyxjLHMsbCxmKSksKG89aVsyXSkmJm4ucHVzaChuZXcgWWwobyxhLGYsYyx1KSksKG89aVszXSkmJm4ucHVzaChuZXcgWWwobyxjLGYsbCx1KSl9ci5wdXNoKGUpfWZvcig7ZT1yLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sJGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LCRsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fSxNYXRoLE1hdGguc3FydCg1KTt2YXIgSmw9ZnVuY3Rpb24odCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4scj10LnNsaWNlKDAsbik7cmV0dXJuW3IubGVuZ3RoPjE/clswXStyLnNsaWNlKDIpOnIsK3Quc2xpY2UobisxKV19LHR1PWZ1bmN0aW9uKHQpe3JldHVybih0PUpsKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59LGV1PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBudSh0KXtyZXR1cm4gbmV3IHJ1KHQpfWZ1bmN0aW9uIHJ1KHQpe2lmKCEoZT1ldS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3RoaXMuZmlsbD1lWzFdfHwiICIsdGhpcy5hbGlnbj1lWzJdfHwiPiIsdGhpcy5zaWduPWVbM118fCItIix0aGlzLnN5bWJvbD1lWzRdfHwiIix0aGlzLnplcm89ISFlWzVdLHRoaXMud2lkdGg9ZVs2XSYmK2VbNl0sdGhpcy5jb21tYT0hIWVbN10sdGhpcy5wcmVjaXNpb249ZVs4XSYmK2VbOF0uc2xpY2UoMSksdGhpcy50cmltPSEhZVs5XSx0aGlzLnR5cGU9ZVsxMF18fCIifW51LnByb3RvdHlwZT1ydS5wcm90b3R5cGUscnUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIGl1LG91LGF1LHN1LGx1PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBlLG49dC5sZW5ndGgscj0xLGk9LTE7cjxuOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPWU9cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxlPXI7YnJlYWs7ZGVmYXVsdDppZihpPjApe2lmKCErdFtyXSlicmVhayB0O2k9MH19cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9LHV1PWZ1bmN0aW9uKHQsZSl7dmFyIG49SmwodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX0sY3U9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHV1KDEwMCp0LGUpfSxyOnV1LHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1KbCh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLG89aS0oaXU9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLGE9ci5sZW5ndGg7cmV0dXJuIG89PT1hP3I6bz5hP3IrbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP3Iuc2xpY2UoMCxvKSsiLiIrci5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStKbCh0LE1hdGgubWF4KDAsZStvLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxmdT1mdW5jdGlvbih0KXtyZXR1cm4gdH0saHU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07b3U9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXQuZ3JvdXBpbmcmJnQudGhvdXNhbmRzPyhlPXQuZ3JvdXBpbmcsbj10LnRob3VzYW5kcyxmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+ciYmKHM9TWF0aC5tYXgoMSxyLWwpKSxvLnB1c2godC5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPnIpKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKG4pfSk6ZnUsaT10LmN1cnJlbmN5LG89dC5kZWNpbWFsLGE9dC5udW1lcmFscz9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KX19KHQubnVtZXJhbHMpOmZ1LHM9dC5wZXJjZW50fHwiJSI7ZnVuY3Rpb24gbCh0KXt2YXIgZT0odD1udSh0KSkuZmlsbCxuPXQuYWxpZ24sbD10LnNpZ24sdT10LnN5bWJvbCxjPXQuemVybyxmPXQud2lkdGgsaD10LmNvbW1hLHA9dC5wcmVjaXNpb24sZD10LnRyaW0sbT10LnR5cGU7Im4iPT09bT8oaD0hMCxtPSJnIik6Y3VbbV18fChudWxsPT1wJiYocD0xMiksZD0hMCxtPSJnIiksKGN8fCIwIj09PWUmJiI9Ij09PW4pJiYoYz0hMCxlPSIwIixuPSI9Iik7dmFyIHk9IiQiPT09dT9pWzBdOiIjIj09PXUmJi9bYm94WF0vLnRlc3QobSk/IjAiK20udG9Mb3dlckNhc2UoKToiIixnPSIkIj09PXU/aVsxXTovWyVwXS8udGVzdChtKT9zOiIiLHY9Y3VbbV0sYj0vW2RlZmdwcnMlXS8udGVzdChtKTtmdW5jdGlvbiBfKHQpe3ZhciBpLHMsdSxfPXksdz1nO2lmKCJjIj09PW0pdz12KHQpK3csdD0iIjtlbHNle3ZhciB4PSh0PSt0KTwwO2lmKHQ9dihNYXRoLmFicyh0KSxwKSxkJiYodD1sdSh0KSkseCYmMD09K3QmJih4PSExKSxfPSh4PyIoIj09PWw/bDoiLSI6Ii0iPT09bHx8IigiPT09bD8iIjpsKStfLHc9KCJzIj09PW0/aHVbOCtpdS8zXToiIikrdysoeCYmIigiPT09bD8iKSI6IiIpLGIpZm9yKGk9LTEscz10Lmxlbmd0aDsrK2k8czspaWYoNDg+KHU9dC5jaGFyQ29kZUF0KGkpKXx8dT41Nyl7dz0oNDY9PT11P28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fWgmJiFjJiYodD1yKHQsMS8wKSk7dmFyIEM9Xy5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsRT1DPGY/bmV3IEFycmF5KGYtQysxKS5qb2luKGUpOiIiO3N3aXRjaChoJiZjJiYodD1yKEUrdCxFLmxlbmd0aD9mLXcubGVuZ3RoOjEvMCksRT0iIiksbil7Y2FzZSI8Ijp0PV8rdCt3K0U7YnJlYWs7Y2FzZSI9Ijp0PV8rRSt0K3c7YnJlYWs7Y2FzZSJeIjp0PUUuc2xpY2UoMCxDPUUubGVuZ3RoPj4xKStfK3QrdytFLnNsaWNlKEMpO2JyZWFrO2RlZmF1bHQ6dD1FK18rdCt3fXJldHVybiBhKHQpfXJldHVybiBwPW51bGw9PXA/NjovW2dwcnNdLy50ZXN0KG0pP01hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpLF8udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sX31yZXR1cm57Zm9ybWF0OmwsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49bCgoKHQ9bnUodCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHR1KGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksbz1odVs4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrb319fX0oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSksYXU9b3UuZm9ybWF0LHN1PW91LmZvcm1hdFByZWZpeDt2YXIgcHU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR1fTtmdW5jdGlvbiBkdSgpe3RoaXMucmVzZXQoKX1kdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmR1LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7eXUobXUsdCx0aGlzLnQpLHl1KHRoaXMsbXUucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPW11LnQ6dGhpcy5zPW11LnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIG11PW5ldyBkdTtmdW5jdGlvbiB5dSh0LGUsbil7dmFyIHI9dC5zPWUrbixpPXItZTt0LnQ9ZS0oci1pKSsobi1pKX12YXIgZ3U9TWF0aC5QSSx2dT1ndS8yLGJ1PTIqZ3UsX3U9Z3UvMTgwLHd1PShNYXRoLE1hdGguYXRhbikseHU9TWF0aC5hdGFuMixDdT1NYXRoLmNvcyxFdT0oTWF0aCxNYXRoLE1hdGgsTWF0aCxNYXRoLE1hdGguc2luKSxPdT0oTWF0aCxNYXRoLnNxcnQpO2Z1bmN0aW9uIFN1KHQpe3JldHVybiB0PjE/dnU6dDwtMT8tdnU6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGt1KHQsZSl7cmV0dXJuW3Q+Z3U/dC1idTp0PC1ndT90K2J1OnQsZV19ZnVuY3Rpb24gVHUoKXt9ZnVuY3Rpb24gUHUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9Q3UoZSksaT1DdShuKSxvPXQocippKTtyZXR1cm5bbyppKkV1KGUpLG8qRXUobildfX1mdW5jdGlvbiBBdSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1PdShlKmUrbipuKSxpPXQociksbz1FdShpKSxhPUN1KGkpO3JldHVyblt4dShlKm8sciphKSxTdShyJiZuKm8vcildfX1mdW5jdGlvbiBqdSh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIEl1KHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLHI9biYmbi5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspZSs9bltyXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gTXUodCxlKXt2YXIgbixyLGksbyxhLHM9bmV3IEZ1KHQpLGw9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLHU9W3NdO2ZvcihudWxsPT1lJiYoZT1OdSk7bj11LnBvcCgpOylpZihsJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwoaT1lKG4uZGF0YSkpJiYoYT1pLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKXUucHVzaChyPW4uY2hpbGRyZW5bb109bmV3IEZ1KGlbb10pKSxyLnBhcmVudD1uLHIuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoRHUpfWZ1bmN0aW9uIE51KHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIFJ1KHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBEdSh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIEZ1KHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfU1hdGgscHUoKSxwdSgpLHB1KCksa3UuaW52ZXJ0PWt1LHB1KCkscHUoKSxwdSgpLHB1KCkscHUoKSxUdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlR1LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LEN1KDMwKl91KSxQdShmdW5jdGlvbih0KXtyZXR1cm4gT3UoMi8oMSt0KSl9KS5pbnZlcnQ9QXUoZnVuY3Rpb24odCl7cmV0dXJuIDIqU3UodC8yKX0pLFB1KGZ1bmN0aW9uKHQpe3JldHVybih0PShlPXQpPjE/MDplPC0xP2d1Ok1hdGguYWNvcyhlKSkmJnQvRXUodCk7dmFyIGV9KS5pbnZlcnQ9QXUoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxqdS5pbnZlcnQ9anUsQXUod3UpLEF1KFN1KSxBdShmdW5jdGlvbih0KXtyZXR1cm4gMip3dSh0KX0pLEZ1LnByb3RvdHlwZT1NdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZ1LGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKEl1KX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvPXRoaXMsYT1bb107ZG97Zm9yKGU9YS5yZXZlcnNlKCksYT1bXTtvPWUucG9wKCk7KWlmKHQobyksbj1vLmNoaWxkcmVuKWZvcihyPTAsaT1uLmxlbmd0aDtyPGk7KytyKWEucHVzaChuW3JdKX13aGlsZShhLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dGhpcyxvPVtpXSxhPVtdO2k9by5wb3AoKTspaWYoYS5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilvLnB1c2goZVtuXSk7Zm9yKDtpPWEucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxlPXIuY2hpbGRyZW4pZm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpLnB1c2goZVtuXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAscj1lLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyluKz1yW2ldLnZhbHVlO2UudmFsdWU9bn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCkscj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1uLnBvcCgpLGU9ci5wb3AoKTt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KXIucHVzaChlPWUucGFyZW50KTtmb3IodmFyIGk9ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSx0fSxsZWF2ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goZnVuY3Rpb24obil7biE9PXQmJmUucHVzaCh7c291cmNlOm4ucGFyZW50LHRhcmdldDpufSl9KSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIE11KHRoaXMpLmVhY2hCZWZvcmUoUnUpfX0sQXJyYXk7dmFyIEx1PWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLGw9YS5sZW5ndGgsdT10LnZhbHVlJiYoci1lKS90LnZhbHVlOysrczxsOykobz1hW3NdKS55MD1uLG8ueTE9aSxvLngwPWUsby54MT1lKz1vLnZhbHVlKnV9O09iamVjdC5jcmVhdGUoRnUucHJvdG90eXBlKTt2YXIgVnU9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCx1PXQudmFsdWUmJihpLW4pL3QudmFsdWU7KytzPGw7KShvPWFbc10pLngwPWUsby54MT1yLG8ueTA9bixvLnkxPW4rPW8udmFsdWUqdX0sQnU9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIHp1KHQsZSxuLHIsaSxvKXtmb3IodmFyIGEscyxsLHUsYyxmLGgscCxkLG0seSxnPVtdLHY9ZS5jaGlsZHJlbixiPTAsXz0wLHc9di5sZW5ndGgseD1lLnZhbHVlO2I8dzspe2w9aS1uLHU9by1yO2Rve2M9dltfKytdLnZhbHVlfXdoaWxlKCFjJiZfPHcpO2ZvcihmPWg9Yyx5PWMqYyoobT1NYXRoLm1heCh1L2wsbC91KS8oeCp0KSksZD1NYXRoLm1heChoL3kseS9mKTtfPHc7KytfKXtpZihjKz1zPXZbX10udmFsdWUsczxmJiYoZj1zKSxzPmgmJihoPXMpLHk9YypjKm0sKHA9TWF0aC5tYXgoaC95LHkvZikpPmQpe2MtPXM7YnJlYWt9ZD1wfWcucHVzaChhPXt2YWx1ZTpjLGRpY2U6bDx1LGNoaWxkcmVuOnYuc2xpY2UoYixfKX0pLGEuZGljZT9MdShhLG4scixpLHg/cis9dSpjL3g6byk6VnUoYSxuLHIseD9uKz1sKmMveDppLG8pLHgtPWMsYj1ffXJldHVybiBnfShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxvKXt6dShlLHQsbixyLGksbyl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0pKEJ1KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLGwsdSxjLGY9LTEsaD1hLmxlbmd0aCxwPXQudmFsdWU7KytmPGg7KXtmb3IobD0ocz1hW2ZdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxjPWwubGVuZ3RoO3U8YzsrK3Upcy52YWx1ZSs9bFt1XS52YWx1ZTtzLmRpY2U/THUocyxuLHIsaSxyKz0oby1yKSpzLnZhbHVlL3ApOlZ1KHMsbixyLG4rPShpLW4pKnMudmFsdWUvcCxvKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT16dShlLHQsbixyLGksbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KEJ1KTt2YXIgVXU9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sSHU9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1yKW89cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsbz0yKmUoKS0xLGk9cipyK28qb313aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSkpLFF1PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD1IdS5zb3VyY2UoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLHI9MDtyPHQ7KytyKW4rPWUoKTtyZXR1cm4gbn19cmV0dXJuIG4uc291cmNlPXQsbn0oVXUpKSxxdT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPVF1LnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KFV1KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSksQXJyYXkucHJvdG90eXBlKSxHdT1xdS5tYXAsWXU9cXUuc2xpY2UsV3U9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxadT1mdW5jdGlvbih0KXtyZXR1cm4rdH0sS3U9WzAsMV07ZnVuY3Rpb24gWHUodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06V3UoZSl9ZnVuY3Rpb24gJHUodCxlLG4scil7dmFyIGk9dFswXSxvPXRbMV0sYT1lWzBdLHM9ZVsxXTtyZXR1cm4gbzxpPyhpPW4obyxpKSxhPXIocyxhKSk6KGk9bihpLG8pLGE9cihhLHMpKSxmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gSnUodCxlLG4scil7dmFyIGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSkscz0tMTtmb3IodFtpXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytzPGk7KW9bc109bih0W3NdLHRbcysxXSksYVtzXT1yKGVbc10sZVtzKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49WWkodCxlLDEsaSktMTtyZXR1cm4gYVtuXShvW25dKGUpKX19dmFyIHRjPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9b28oaSxvLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChuPW51KG51bGw9PW4/IixmIjpuKSkudHlwZSl7Y2FzZSJzIjp2YXIgcz1NYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhvKSk7cmV0dXJuIG51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodHUoZSkvMykpKS10dShNYXRoLmFicyh0KSkpfShhLHMpKXx8KG4ucHJlY2lzaW9uPXIpLHN1KG4scyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCx0dShlKS10dSh0KSkrMX0oYSxNYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhvKSkpKXx8KG4ucHJlY2lzaW9uPXItKCJlIj09PW4udHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4ocj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtdHUoTWF0aC5hYnModCkpKX0oYSkpfHwobi5wcmVjaXNpb249ci0yKigiJSI9PT1uLnR5cGUpKX1yZXR1cm4gYXUobil9O2Z1bmN0aW9uIGVjKCl7dmFyIHQ9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz1LdSxhPUt1LHM9X3MsbD0hMTtmdW5jdGlvbiB1KCl7cmV0dXJuIG49TWF0aC5taW4oby5sZW5ndGgsYS5sZW5ndGgpPjI/SnU6JHUscj1pPW51bGwsY31mdW5jdGlvbiBjKGUpe3JldHVybihyfHwocj1uKG8sYSxsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PWU/MDp0Pj1uPzE6cih0KX19fSh0KTp0LHMpKSkoK2UpfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4oaXx8KGk9bihhLG8sWHUsbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KGU9K2Usbj0rbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wP2U6dD49MT9uOnIodCl9fX0oZSk6ZSkpKSgrdCl9LGMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUd1LmNhbGwodCxadSksdSgpKTpvLnNsaWNlKCl9LGMucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9WXUuY2FsbCh0KSx1KCkpOmEuc2xpY2UoKX0sYy5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPVl1LmNhbGwodCkscz13cyx1KCl9LGMuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ISF0LHUoKSk6bH0sYy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHUoKSk6c30sdSgpfShYdSx5cyk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBlPXQsZWMoKS5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSk7dmFyIGV9LGZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gcm8oblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiB0YyhlKCksdCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgcixpPWUoKSxvPTAsYT1pLmxlbmd0aC0xLHM9aVtvXSxsPWlbYV07cmV0dXJuIGw8cyYmKHI9cyxzPWwsbD1yLHI9byxvPWEsYT1yKSwocj1pbyhzLGwsbikpPjA/cj1pbyhzPU1hdGguZmxvb3Iocy9yKSpyLGw9TWF0aC5jZWlsKGwvcikqcixuKTpyPDAmJihyPWlvKHM9TWF0aC5jZWlsKHMqcikvcixsPU1hdGguZmxvb3IobCpyKS9yLG4pKSxyPjA/KGlbb109TWF0aC5mbG9vcihzL3IpKnIsaVthXT1NYXRoLmNlaWwobC9yKSpyLGUoaSkpOnI8MCYmKGlbb109TWF0aC5jZWlsKHMqcikvcixpW2FdPU1hdGguZmxvb3IobCpyKS9yLGUoaSkpLHR9LHR9KHQpfXZhciBuYz1uZXcgRGF0ZSxyYz1uZXcgRGF0ZTtmdW5jdGlvbiBpYyh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWksaS5jZWlsPWZ1bmN0aW9uKG4pe3JldHVybiB0KG49bmV3IERhdGUobi0xKSksZShuLDEpLHQobiksbn0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1pKHQpLG49aS5jZWlsKHQpO3JldHVybiB0LWU8bi10P2U6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSxudWxsPT1uPzE6TWF0aC5mbG9vcihuKSksdH0saS5yYW5nZT1mdW5jdGlvbihuLHIsbyl7dmFyIGEscz1bXTtpZihuPWkuY2VpbChuKSxvPW51bGw9PW8/MTpNYXRoLmZsb29yKG8pLCEobjxyJiZvPjApKXJldHVybiBzO2Rve3MucHVzaChhPW5ldyBEYXRlKCtuKSksZShuLG8pLHQobil9d2hpbGUoYTxuJiZuPHIpO3JldHVybiBzfSxpLmZpbHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gaWMoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSxmdW5jdGlvbih0LHIpe2lmKHQ+PXQpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO2UodCwtMSksIW4odCk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO2UodCwxKSwhbih0KTspO30pfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBuYy5zZXRUaW1lKCtlKSxyYy5zZXRUaW1lKCtyKSx0KG5jKSx0KHJjKSxNYXRoLmZsb29yKG4obmMscmMpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgb2M9aWMoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KTtvYy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2ljKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9LGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pOm9jOm51bGx9O3ZhciBhYz02ZTQsc2M9NjA0OGU1LGxjPShpYyhmdW5jdGlvbih0KXt0LnNldFRpbWUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzFlM30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSksaWMoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9hYykqYWMpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmFjKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9hY30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksaWMoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpKmFjJTM2ZTU7ZTwwJiYoZSs9MzZlNSksdC5zZXRUaW1lKDM2ZTUqTWF0aC5mbG9vcigoK3QtZSkvMzZlNSkrZSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmFjKS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSk7ZnVuY3Rpb24gdWModCl7cmV0dXJuIGljKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqYWMpL3NjfSl9dmFyIGNjPXVjKDApLGZjPXVjKDEpLGhjPSh1YygyKSx1YygzKSx1Yyg0KSkscGM9KHVjKDUpLHVjKDYpLGljKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO3BjLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/aWMoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSk6bnVsbH07dmFyIGRjPXBjLG1jPShpYyhmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSphYyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvYWN9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtmdW5jdGlvbiB5Yyh0KXtyZXR1cm4gaWMoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9zY30pfXZhciBnYz15YygwKSx2Yz15YygxKSxiYz0oeWMoMikseWMoMykseWMoNCkpLF9jPSh5Yyg1KSx5Yyg2KSxpYyhmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMiooZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSxpYyhmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtfYy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP2ljKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pOm51bGx9O3ZhciB3Yz1fYztmdW5jdGlvbiB4Yyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gQ2ModCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gRWModCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19dmFyIE9jLFNjLGtjLFRjPXsiLSI6IiIsXzoiICIsMDoiMCJ9LFBjPS9eXHMqXGQrLyxBYz0vXiUvLGpjPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBJYyh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLG89aS5sZW5ndGg7cmV0dXJuIHIrKG88bj9uZXcgQXJyYXkobi1vKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBNYyh0KXtyZXR1cm4gdC5yZXBsYWNlKGpjLCJcXCQmIil9ZnVuY3Rpb24gTmModCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKE1jKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUmModCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gRGModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRmModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTGModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVmModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQmModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gemModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVWModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBIYyh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFjKHQsZSxuKXt2YXIgcj1QYy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkYyh0LGUsbil7dmFyIHI9QWMuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRmKHQsZSxuKXt2YXIgcj1QYy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LlE9MWUzKityWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVmKHQsZSl7cmV0dXJuIEljKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gbmYodCxlKXtyZXR1cm4gSWModC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gcmYodCxlKXtyZXR1cm4gSWModC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIG9mKHQsZSl7cmV0dXJuIEljKDErbGMuY291bnQoZGModCksdCksZSwzKX1mdW5jdGlvbiBhZih0LGUpe3JldHVybiBJYyh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gc2YodCxlKXtyZXR1cm4gYWYodCxlKSsiMDAwIn1mdW5jdGlvbiBsZih0LGUpe3JldHVybiBJYyh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHVmKHQsZSl7cmV0dXJuIEljKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gY2YodCxlKXtyZXR1cm4gSWModC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBmZih0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gaGYodCxlKXtyZXR1cm4gSWMoY2MuY291bnQoZGModCksdCksZSwyKX1mdW5jdGlvbiBwZih0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/aGModCk6aGMuY2VpbCh0KSxJYyhoYy5jb3VudChkYyh0KSx0KSsoND09PWRjKHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIGRmKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIG1mKHQsZSl7cmV0dXJuIEljKGZjLmNvdW50KGRjKHQpLHQpLGUsMil9ZnVuY3Rpb24geWYodCxlKXtyZXR1cm4gSWModC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGdmKHQsZSl7cmV0dXJuIEljKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB2Zih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK0ljKGUvNjB8MCwiMCIsMikrSWMoZSU2MCwiMCIsMil9ZnVuY3Rpb24gYmYodCxlKXtyZXR1cm4gSWModC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBfZih0LGUpe3JldHVybiBJYyh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiB3Zih0LGUpe3JldHVybiBJYyh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24geGYodCxlKXtyZXR1cm4gSWMoMSttYy5jb3VudCh3Yyh0KSx0KSxlLDMpfWZ1bmN0aW9uIENmKHQsZSl7cmV0dXJuIEljKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBFZih0LGUpe3JldHVybiBDZih0LGUpKyIwMDAifWZ1bmN0aW9uIE9mKHQsZSl7cmV0dXJuIEljKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gU2YodCxlKXtyZXR1cm4gSWModC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBrZih0LGUpe3JldHVybiBJYyh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIFRmKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBQZih0LGUpe3JldHVybiBJYyhnYy5jb3VudCh3Yyh0KSx0KSxlLDIpfWZ1bmN0aW9uIEFmKHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9iYyh0KTpiYy5jZWlsKHQpLEljKGJjLmNvdW50KHdjKHQpLHQpKyg0PT09d2ModCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gamYodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gSWYodCxlKXtyZXR1cm4gSWModmMuY291bnQod2ModCksdCksZSwyKX1mdW5jdGlvbiBNZih0LGUpe3JldHVybiBJYyh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTmYodCxlKXtyZXR1cm4gSWModC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFJmKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBEZigpe3JldHVybiIlIn1mdW5jdGlvbiBGZih0KXtyZXR1cm4rdH1mdW5jdGlvbiBMZih0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfSFmdW5jdGlvbih0KXtPYz1mdW5jdGlvbihlKXt2YXIgbj10LmRhdGVUaW1lLHI9dC5kYXRlLGk9dC50aW1lLG89dC5wZXJpb2RzLGE9dC5kYXlzLHM9dC5zaG9ydERheXMsbD10Lm1vbnRocyx1PXQuc2hvcnRNb250aHMsYz1OYyhvKSxmPVJjKG8pLGg9TmMoYSkscD1SYyhhKSxkPU5jKHMpLG09UmMocykseT1OYyhsKSxnPVJjKGwpLHY9TmModSksYj1SYyh1KSxfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6ZWYsZTplZixmOnNmLEg6bmYsSTpyZixqOm9mLEw6YWYsbTpsZixNOnVmLHA6ZnVuY3Rpb24odCl7cmV0dXJuIG9bKyh0LmdldEhvdXJzKCk+PTEyKV19LFE6RmYsczpMZixTOmNmLHU6ZmYsVTpoZixWOnBmLHc6ZGYsVzptZix4Om51bGwsWDpudWxsLHk6eWYsWTpnZixaOnZmLCIlIjpEZn0sdz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOmJmLGU6YmYsZjpFZixIOl9mLEk6d2Ysajp4ZixMOkNmLG06T2YsTTpTZixwOmZ1bmN0aW9uKHQpe3JldHVybiBvWysodC5nZXRVVENIb3VycygpPj0xMildfSxROkZmLHM6TGYsUzprZix1OlRmLFU6UGYsVjpBZix3OmpmLFc6SWYseDpudWxsLFg6bnVsbCx5Ok1mLFk6TmYsWjpSZiwiJSI6RGZ9LHg9e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PW1bclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj12LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT1iW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWdbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIE8odCxuLGUscil9LGQ6cWMsZTpxYyxmOlhjLEg6WWMsSTpZYyxqOkdjLEw6S2MsbTpRYyxNOldjLHA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5wPWZbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sUTpKYyxzOnRmLFM6WmMsdTpGYyxVOkxjLFY6VmMsdzpEYyxXOkJjLHg6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBPKHQscixlLG4pfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTyh0LGksZSxuKX0seTpVYyxZOnpjLFo6SGMsIiUiOiRjfTtmdW5jdGlvbiBDKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksbyxhPVtdLHM9LTEsbD0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPVRjW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwobz1lW3JdKSYmKHI9byhuLGkpKSxhLnB1c2gociksbD1zKzEpO3JldHVybiBhLnB1c2godC5zbGljZShsLHMpKSxhLmpvaW4oIiIpfX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksbz1FYygxOTAwKTtpZihPKG8sdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLCJWImluIG8pe2lmKG8uVjwxfHxvLlY+NTMpcmV0dXJuIG51bGw7InciaW4gb3x8KG8udz0xKSwiWiJpbiBvPyhyPShpPShyPUNjKEVjKG8ueSkpKS5nZXRVVENEYXkoKSk+NHx8MD09PWk/dmMuY2VpbChyKTp2YyhyKSxyPW1jLm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0VVRDRnVsbFllYXIoKSxvLm09ci5nZXRVVENNb250aCgpLG8uZD1yLmdldFVUQ0RhdGUoKSsoby53KzYpJTcpOihyPShpPShyPWUoRWMoby55KSkpLmdldERheSgpKT40fHwwPT09aT9mYy5jZWlsKHIpOmZjKHIpLHI9bGMub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRGdWxsWWVhcigpLG8ubT1yLmdldE1vbnRoKCksby5kPXIuZ2V0RGF0ZSgpKyhvLncrNiklNyl9ZWxzZSgiVyJpbiBvfHwiVSJpbiBvKSYmKCJ3ImluIG98fChvLnc9InUiaW4gbz9vLnUlNzoiVyJpbiBvPzE6MCksaT0iWiJpbiBvP0NjKEVjKG8ueSkpLmdldFVUQ0RheSgpOmUoRWMoby55KSkuZ2V0RGF5KCksby5tPTAsby5kPSJXImluIG8/KG8udys2KSU3Kzcqby5XLShpKzUpJTc6by53Kzcqby5VLShpKzYpJTcpO3JldHVybiJaImluIG8/KG8uSCs9by5aLzEwMHwwLG8uTSs9by5aJTEwMCxDYyhvKSk6ZShvKX19ZnVuY3Rpb24gTyh0LGUsbixyKXtmb3IodmFyIGksbyxhPTAscz1lLmxlbmd0aCxsPW4ubGVuZ3RoO2E8czspe2lmKHI+PWwpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQoYSsrKSkpe2lmKGk9ZS5jaGFyQXQoYSsrKSwhKG89eFtpIGluIFRjP2UuY2hhckF0KGErKyk6aV0pfHwocj1vKHQsbixyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPW4uY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfXJldHVybiBfLng9QyhyLF8pLF8uWD1DKGksXyksXy5jPUMobixfKSx3Lng9QyhyLHcpLHcuWD1DKGksdyksdy5jPUMobix3KSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPUModCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RSh0Kz0iIix4Yyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPUModCs9IiIsdyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RSh0LENjKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19KCksU2M9T2MudXRjRm9ybWF0LGtjPU9jLnV0Y1BhcnNlfSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nfHxTYygiJVktJW0tJWRUJUg6JU06JVMuJUxaIiksK25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKXx8a2MoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBWZj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KW5bcl09IiMiK3Quc2xpY2UoNipyLDYqKytyKTtyZXR1cm4gbn0sQmY9KFZmKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxWZigiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksVmYoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLFZmKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxWZigiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksVmYoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLFZmKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxWZigiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksVmYoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLGZ1bmN0aW9uKHQpe3JldHVybiBtcyh0W3QubGVuZ3RoLTFdKX0pO2Z1bmN0aW9uIHpmKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fUJmKG5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChWZikpLE1zKG5zKDMwMCwuNSwwKSxucygtMjQwLC41LDEpKSxNcyhucygtMTAwLC43NSwuMzUpLG5zKDgwLDEuNSwuOCkpLE1zKG5zKDI2MCwuNzUsLjM1KSxucyg4MCwxLjUsLjgpKSxucygpLFNhKCksTWF0aCxNYXRoLHpmKFZmKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksemYoVmYoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSx6ZihWZigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHpmKFZmKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7dmFyIFVmPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sSGY9TWF0aC5hYnMsUWY9TWF0aC5hdGFuMixxZj1NYXRoLmNvcyxHZj1NYXRoLm1heCxZZj1NYXRoLm1pbixXZj1NYXRoLnNpbixaZj1NYXRoLnNxcnQsS2Y9MWUtMTIsWGY9TWF0aC5QSSwkZj1YZi8yLEpmPTIqWGY7ZnVuY3Rpb24gdGgodCl7cmV0dXJuIHQ+PTE/JGY6dDw9LTE/LSRmOk1hdGguYXNpbih0KX1mdW5jdGlvbiBlaCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBuaCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiByaCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGloKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIG9oKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGFoKHQsZSxuLHIsaSxvLGEpe3ZhciBzPXQtbixsPWUtcix1PShhP286LW8pL1pmKHMqcytsKmwpLGM9dSpsLGY9LXUqcyxoPXQrYyxwPWUrZixkPW4rYyxtPXIrZix5PShoK2QpLzIsZz0ocCttKS8yLHY9ZC1oLGI9bS1wLF89dip2K2IqYix3PWktbyx4PWgqbS1kKnAsQz0oYjwwPy0xOjEpKlpmKEdmKDAsdyp3Kl8teCp4KSksRT0oeCpiLXYqQykvXyxPPSgteCp2LWIqQykvXyxTPSh4KmIrdipDKS9fLGs9KC14KnYrYipDKS9fLFQ9RS15LFA9Ty1nLEE9Uy15LGo9ay1nO3JldHVybiBUKlQrUCpQPkEqQStqKmomJihFPVMsTz1rKSx7Y3g6RSxjeTpPLHgwMTotYyx5MDE6LWYseDExOkUqKGkvdy0xKSx5MTE6TyooaS93LTEpfX12YXIgc2g9ZnVuY3Rpb24oKXt2YXIgdD1laCxlPW5oLG49VWYoMCkscj1udWxsLGk9cmgsbz1paCxhPW9oLHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGwsdSxjLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktJGYsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS0kZixtPUhmKGQtcCkseT1kPnA7aWYoc3x8KHM9bD1rbCgpKSxoPGYmJih1PWgsaD1mLGY9dSksaD5LZilpZihtPkpmLUtmKXMubW92ZVRvKGgqcWYocCksaCpXZihwKSkscy5hcmMoMCwwLGgscCxkLCF5KSxmPktmJiYocy5tb3ZlVG8oZipxZihkKSxmKldmKGQpKSxzLmFyYygwLDAsZixkLHAseSkpO2Vsc2V7dmFyIGcsdixiPXAsXz1kLHc9cCx4PWQsQz1tLEU9bSxPPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsUz1PPktmJiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WmYoZipmK2gqaCkpLGs9WWYoSGYoaC1mKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksVD1rLFA9aztpZihTPktmKXt2YXIgQT10aChTL2YqV2YoTykpLGo9dGgoUy9oKldmKE8pKTsoQy09MipBKT5LZj8odys9QSo9eT8xOi0xLHgtPUEpOihDPTAsdz14PShwK2QpLzIpLChFLT0yKmopPktmPyhiKz1qKj15PzE6LTEsXy09aik6KEU9MCxiPV89KHArZCkvMil9dmFyIEk9aCpxZihiKSxNPWgqV2YoYiksTj1mKnFmKHgpLFI9ZipXZih4KTtpZihrPktmKXt2YXIgRD1oKnFmKF8pLEY9aCpXZihfKSxMPWYqcWYodyksVj1mKldmKHcpO2lmKG08WGYpe3ZhciBCPUM+S2Y/ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzKXt2YXIgbD1MLUksdT1WLU0sYz1hLUQsZj1zLUYsaD0oYyooTS1GKS1mKihJLUQpKS8oZipsLWMqdSk7cmV0dXJuW0kraCpsLE0raCp1XX0oMCwwLDAsMCwwLDAsTixSKTpbTixSXSx6PUktQlswXSxVPU0tQlsxXSxIPUQtQlswXSxRPUYtQlsxXSxxPTEvV2YoKChjPSh6KkgrVSpRKS8oWmYoeip6K1UqVSkqWmYoSCpIK1EqUSkpKT4xPzA6YzwtMT9YZjpNYXRoLmFjb3MoYykpLzIpLEc9WmYoQlswXSpCWzBdK0JbMV0qQlsxXSk7VD1ZZihrLChmLUcpLyhxLTEpKSxQPVlmKGssKGgtRykvKHErMSkpfX1FPktmP1A+S2Y/KGc9YWgoTCxWLEksTSxoLFAseSksdj1haChELEYsTixSLGgsUCx5KSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFA8az9zLmFyYyhnLmN4LGcuY3ksUCxRZihnLnkwMSxnLngwMSksUWYodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFAsUWYoZy55MDEsZy54MDEpLFFmKGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGgsUWYoZy5jeStnLnkxMSxnLmN4K2cueDExKSxRZih2LmN5K3YueTExLHYuY3grdi54MTEpLCF5KSxzLmFyYyh2LmN4LHYuY3ksUCxRZih2LnkxMSx2LngxMSksUWYodi55MDEsdi54MDEpLCF5KSkpOihzLm1vdmVUbyhJLE0pLHMuYXJjKDAsMCxoLGIsXywheSkpOnMubW92ZVRvKEksTSksZj5LZiYmQz5LZj9UPktmPyhnPWFoKE4sUixELEYsZiwtVCx5KSx2PWFoKEksTSxMLFYsZiwtVCx5KSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFQ8az9zLmFyYyhnLmN4LGcuY3ksVCxRZihnLnkwMSxnLngwMSksUWYodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFQsUWYoZy55MDEsZy54MDEpLFFmKGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGYsUWYoZy5jeStnLnkxMSxnLmN4K2cueDExKSxRZih2LmN5K3YueTExLHYuY3grdi54MTEpLHkpLHMuYXJjKHYuY3gsdi5jeSxULFFmKHYueTExLHYueDExKSxRZih2LnkwMSx2LngwMSksIXkpKSk6cy5hcmMoMCwwLGYseCx3LHkpOnMubGluZVRvKE4sUil9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksbClyZXR1cm4gcz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItWGYvMjtyZXR1cm5bcWYocikqbixXZihyKSpuXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlVmKCtlKSxsKTp0fSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOmV9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOm59LGwucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCt0KSxsKTpyfSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVZigrdCksbCk6aX0sbC5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCt0KSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxsKTpzfSxsfTtmdW5jdGlvbiBsaCh0KXt0aGlzLl9jb250ZXh0PXR9bGgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIHVoPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbGgodCl9O2Z1bmN0aW9uIGNoKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGZoKHQpe3JldHVybiB0WzFdfXZhciBoaD1mdW5jdGlvbigpe3ZhciB0PWNoLGU9Zmgsbj1VZighMCkscj1udWxsLGk9dWgsbz1udWxsO2Z1bmN0aW9uIGEoYSl7dmFyIHMsbCx1LGM9YS5sZW5ndGgsZj0hMTtmb3IobnVsbD09ciYmKG89aSh1PWtsKCkpKSxzPTA7czw9YzsrK3MpIShzPGMmJm4obD1hW3NdLHMsYSkpPT09ZiYmKChmPSFmKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxmJiZvLnBvaW50KCt0KGwscyxhKSwrZShsLHMsYSkpO2lmKHUpcmV0dXJuIG89bnVsbCx1KyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpVZigrZSksYSk6dH0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGEpOmV9LGEuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCEhdCksYSk6bn0sYS5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPXImJihvPWkocikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPW89bnVsbDpvPWkocj10KSxhKTpyfSxhfSxwaD1mdW5jdGlvbigpe3ZhciB0PWNoLGU9bnVsbCxuPVVmKDApLHI9ZmgsaT1VZighMCksbz1udWxsLGE9dWgscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIHUsYyxmLGgscCxkPWwubGVuZ3RoLG09ITEseT1uZXcgQXJyYXkoZCksZz1uZXcgQXJyYXkoZCk7Zm9yKG51bGw9PW8mJihzPWEocD1rbCgpKSksdT0wO3U8PWQ7Kyt1KXtpZighKHU8ZCYmaShoPWxbdV0sdSxsKSk9PT1tKWlmKG09IW0pYz11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGY9dS0xO2Y+PWM7LS1mKXMucG9pbnQoeVtmXSxnW2ZdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1tJiYoeVt1XT0rdChoLHUsbCksZ1t1XT0rbihoLHUsbCkscy5wb2ludChlPytlKGgsdSxsKTp5W3VdLHI/K3IoaCx1LGwpOmdbdV0pKX1pZihwKXJldHVybiBzPW51bGwscCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIGhoKCkuZGVmaW5lZChpKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiBsLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpVZigrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpVZigrZSksbCk6dH0sbC54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVZigrdCksbCk6ZX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLHI9bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOm59LGwueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOnJ9LGwubGluZVgwPWwubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGwubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGwubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGwuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG51bGwhPW8mJihzPWEobykpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPXM9bnVsbDpzPWEobz10KSxsKTpvfSxsfTtmdW5jdGlvbiBkaCh0KXt0aGlzLl9jdXJ2ZT10fWRoLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX0sQXJyYXksTWF0aC5zcXJ0KDEvMyksTWF0aC5zaW4oWGYvMTApLE1hdGguc2luKDcqWGYvMTApO3ZhciBtaD0oTWF0aC5zaW4oSmYvMTApLE1hdGguY29zKEpmLzEwKSxNYXRoLnNxcnQoMyksTWF0aC5zcXJ0KDMpLE1hdGguc3FydCgxMiksZnVuY3Rpb24oKXt9KTtmdW5jdGlvbiB5aCh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gZ2godCl7dGhpcy5fY29udGV4dD10fWdoLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6eWgodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6eWgodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciB2aD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGdoKHQpfTtmdW5jdGlvbiBiaCh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBnaCh0KSx0aGlzLl9iZXRhPWV9ZnVuY3Rpb24gX2godCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLW4pLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB3aCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24geGgodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWZ1bmN0aW9uIENoKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBFaCh0LGUsbil7dmFyIHI9dC5feDEsaT10Ll95MSxvPXQuX3gyLGE9dC5feTI7aWYodC5fbDAxX2E+S2Ype3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPktmKXt2YXIgdT0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxjPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtvPShvKnUrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9jLGE9KGEqdSt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2N9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxvLGEsdC5feDIsdC5feTIpfWZ1bmN0aW9uIE9oKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZnVuY3Rpb24gU2godCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1mdW5jdGlvbiBraCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWZ1bmN0aW9uIFRoKHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBQaCh0LGUsbil7dmFyIHI9dC5feDEtdC5feDAsaT1lLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksYT0obi10Ll95MSkvKGl8fHI8MCYmLTApLHM9KG8qaSthKnIpLyhyK2kpO3JldHVybihUaChvKStUaChhKSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnMoYSksLjUqTWF0aC5hYnMocykpfHwwfWZ1bmN0aW9uIEFoKHQsZSl7dmFyIG49dC5feDEtdC5feDA7cmV0dXJuIG4/KDMqKHQuX3kxLXQuX3kwKS9uLWUpLzI6ZX1mdW5jdGlvbiBqaCh0LGUsbil7dmFyIHI9dC5feDAsaT10Ll94MSxvPXQuX3kxLGE9KGktcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocithLHQuX3kwK2EqZSxpLWEsby1hKm4saSxvKX1mdW5jdGlvbiBJaCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gTWgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE5oKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gUmgodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBEaCh0LGUpe3ZhciBuPWUscj1lLlIsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uUj1yLkwsbi5SJiYobi5SLlU9biksci5MPW59ZnVuY3Rpb24gRmgodCxlKXt2YXIgbj1lLHI9ZS5MLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLkw9ci5SLG4uTCYmKG4uTC5VPW4pLHIuUj1ufWZ1bmN0aW9uIExoKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1iaC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxvPWVbMF0sYT10W25dLWkscz1lW25dLW8sbD0tMTsrK2w8PW47KXRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaSsocj1sL24pKmEpLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSoobytyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgZ2godCk6bmV3IGJoKHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC44NSksd2gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOl9oKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpfaCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgd2godCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCkseGgucHJvdG90eXBlPXthcmVhU3RhcnQ6bWgsYXJlYUVuZDptaCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Ol9oKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyB4aCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKSxDaC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpfaCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgQ2godCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCksT2gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpFaCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgT2godCxlKTpuZXcgd2godCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KSxTaC5wcm90b3R5cGU9e2FyZWFTdGFydDptaCxhcmVhRW5kOm1oLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OkVoKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBTaCh0LGUpOm5ldyB4aCh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpLGtoLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpFaCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcga2godCxlKTpuZXcgQ2godCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KSxJaC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6amgodGhpcyx0aGlzLl90MCxBaCh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamgodGhpcyxBaCh0aGlzLG49UGgodGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OmpoKHRoaXMsdGhpcy5fdDAsbj1QaCh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LCgoZnVuY3Rpb24odCl7dGhpcy5fY29udGV4dD1uZXcgTWgodCl9KS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJaC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe0loLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sTWgucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LHIsbixvLGkpfX0sTmgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOaCxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7bj10fWVsc2UgdGhpcy5fPyh0PUxoKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLG49dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxuPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPW4sZS5DPSEwLHQ9ZTtuJiZuLkM7KW49PT0ocj1uLlUpLkw/KGk9ci5SKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5SJiYoRGgodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsRmgodGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5MJiYoRmgodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsRGgodGhpcyxyKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4scixpPXQuVSxvPXQuTCxhPXQuUjtpZihuPW8/YT9MaChhKTpvOmEsaT9pLkw9PT10P2kuTD1uOmkuUj1uOnRoaXMuXz1uLG8mJmE/KHI9bi5DLG4uQz10LkMsbi5MPW8sby5VPW4sbiE9PWE/KGk9bi5VLG4uVT10LlUsaS5MPXQ9bi5SLG4uUj1hLGEuVT1uKToobi5VPWksaT1uLHQ9bi5SKSk6KHI9dC5DLHQ9biksdCYmKHQuVT1pKSwhcilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLERoKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsRmgodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsRGgodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLEZoKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsRGgodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsRmgodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciBWaD1OaDtmdW5jdGlvbiBCaCh0LGUsbixyKXt2YXIgaT1bbnVsbCxudWxsXSxvPWxwLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1lLG4mJlVoKGksdCxlLG4pLHImJlVoKGksZSx0LHIpLGFwW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGFwW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gemgodCxlLG4pe3ZhciByPVtlLG5dO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIFVoKHQsZSxuLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiBIaCh0LGUsbixyLGkpe3ZhciBvLGE9dFswXSxzPXRbMV0sbD1hWzBdLHU9YVsxXSxjPTAsZj0xLGg9c1swXS1sLHA9c1sxXS11O2lmKG89ZS1sLGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1lbHNlIGlmKGg+MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWlmKG89ci1sLGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1lbHNlIGlmKGg+MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfWlmKG89bi11LHB8fCEobz4wKSl7aWYoby89cCxwPDApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1lbHNlIGlmKHA+MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWlmKG89aS11LHB8fCEobzwwKSl7aWYoby89cCxwPDApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1lbHNlIGlmKHA+MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfXJldHVybiEoYz4wfHxmPDEpfHwoYz4wJiYodFswXT1bbCtjKmgsdStjKnBdKSxmPDEmJih0WzFdPVtsK2YqaCx1K2YqcF0pLCEwKX19fX19ZnVuY3Rpb24gUWgodCxlLG4scixpKXt2YXIgbz10WzFdO2lmKG8pcmV0dXJuITA7dmFyIGEscyxsPXRbMF0sdT10LmxlZnQsYz10LnJpZ2h0LGY9dVswXSxoPXVbMV0scD1jWzBdLGQ9Y1sxXSxtPShmK3ApLzIseT0oaCtkKS8yO2lmKGQ9PT1oKXtpZihtPGV8fG0+PXIpcmV0dXJuO2lmKGY+cCl7aWYobCl7aWYobFsxXT49aSlyZXR1cm59ZWxzZSBsPVttLG5dO289W20saV19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bbSxpXTtvPVttLG5dfX1lbHNlIGlmKHM9eS0oYT0oZi1wKS8oZC1oKSkqbSxhPC0xfHxhPjEpaWYoZj5wKXtpZihsKXtpZihsWzFdPj1pKXJldHVybn1lbHNlIGw9WyhuLXMpL2Esbl07bz1bKGktcykvYSxpXX1lbHNle2lmKGwpe2lmKGxbMV08bilyZXR1cm59ZWxzZSBsPVsoaS1zKS9hLGldO289WyhuLXMpL2Esbl19ZWxzZSBpZihoPGQpe2lmKGwpe2lmKGxbMF0+PXIpcmV0dXJufWVsc2UgbD1bZSxhKmUrc107bz1bcixhKnIrc119ZWxzZXtpZihsKXtpZihsWzBdPGUpcmV0dXJufWVsc2UgbD1bcixhKnIrc107bz1bZSxhKmUrc119cmV0dXJuIHRbMF09bCx0WzFdPW8sITB9ZnVuY3Rpb24gcWgodCxlKXt2YXIgbj10LnNpdGUscj1lLmxlZnQsaT1lLnJpZ2h0O3JldHVybiBuPT09aSYmKGk9cixyPW4pLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKToobj09PXI/KHI9ZVsxXSxpPWVbMF0pOihyPWVbMF0saT1lWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBHaCh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gWWgodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfXZhciBXaCxaaD1bXTtmdW5jdGlvbiBLaCh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIHI9ZS5zaXRlLGk9dC5zaXRlLG89bi5zaXRlO2lmKHIhPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPXJbMF0tYSx1PXJbMV0tcyxjPW9bMF0tYSxmPW9bMV0tcyxoPTIqKGwqZi11KmMpO2lmKCEoaD49LWNwKSl7dmFyIHA9bCpsK3UqdSxkPWMqYytmKmYsbT0oZipwLXUqZCkvaCx5PShsKmQtYypwKS9oLGc9WmgucG9wKCl8fG5ldyBmdW5jdGlvbigpe1JoKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH07Zy5hcmM9dCxnLnNpdGU9aSxnLng9bSthLGcueT0oZy5jeT15K3MpK01hdGguc3FydChtKm0reSp5KSx0LmNpcmNsZT1nO2Zvcih2YXIgdj1udWxsLGI9c3AuXztiOylpZihnLnk8Yi55fHxnLnk9PT1iLnkmJmcueDw9Yi54KXtpZighYi5MKXt2PWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe3Y9YjticmVha31iPWIuUn1zcC5pbnNlcnQodixnKSx2fHwoV2g9Zyl9fX19ZnVuY3Rpb24gWGgodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KFdoPWUuTiksc3AucmVtb3ZlKGUpLFpoLnB1c2goZSksUmgoZSksdC5jaXJjbGU9bnVsbCl9dmFyICRoPVtdO2Z1bmN0aW9uIEpoKHQpe3ZhciBlPSRoLnBvcCgpfHxuZXcgZnVuY3Rpb24oKXtSaCh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9O3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHRwKHQpe1hoKHQpLG9wLnJlbW92ZSh0KSwkaC5wdXNoKHQpLFJoKHQpfWZ1bmN0aW9uIGVwKHQpe3ZhciBlPXQuY2lyY2xlLG49ZS54LHI9ZS5jeSxpPVtuLHJdLG89dC5QLGE9dC5OLHM9W3RdO3RwKHQpO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZNYXRoLmFicyhuLWwuY2lyY2xlLngpPHVwJiZNYXRoLmFicyhyLWwuY2lyY2xlLmN5KTx1cDspbz1sLlAscy51bnNoaWZ0KGwpLHRwKGwpLGw9bztzLnVuc2hpZnQobCksWGgobCk7Zm9yKHZhciB1PWE7dS5jaXJjbGUmJk1hdGguYWJzKG4tdS5jaXJjbGUueCk8dXAmJk1hdGguYWJzKHItdS5jaXJjbGUuY3kpPHVwOylhPXUuTixzLnB1c2godSksdHAodSksdT1hO3MucHVzaCh1KSxYaCh1KTt2YXIgYyxmPXMubGVuZ3RoO2ZvcihjPTE7YzxmOysrYylVaCgodT1zW2NdKS5lZGdlLChsPXNbYy0xXSkuc2l0ZSx1LnNpdGUsaSk7KHU9c1tmLTFdKS5lZGdlPUJoKChsPXNbMF0pLnNpdGUsdS5zaXRlLG51bGwsaSksS2gobCksS2godSl9ZnVuY3Rpb24gbnAodCl7Zm9yKHZhciBlLG4scixpLG89dFswXSxhPXRbMV0scz1vcC5fO3M7KWlmKChyPXJwKHMsYSktbyk+dXApcz1zLkw7ZWxzZXtpZighKChpPW8taXAocyxhKSk+dXApKXtyPi11cD8oZT1zLlAsbj1zKTppPi11cD8oZT1zLG49cy5OKTplPW49czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9IWZ1bmN0aW9uKHQpe2FwW3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX0odCk7dmFyIGw9SmgodCk7aWYob3AuaW5zZXJ0KGUsbCksZXx8bil7aWYoZT09PW4pcmV0dXJuIFhoKGUpLG49SmgoZS5zaXRlKSxvcC5pbnNlcnQobCxuKSxsLmVkZ2U9bi5lZGdlPUJoKGUuc2l0ZSxsLnNpdGUpLEtoKGUpLHZvaWQgS2gobik7aWYobil7WGgoZSksWGgobik7dmFyIHU9ZS5zaXRlLGM9dVswXSxmPXVbMV0saD10WzBdLWMscD10WzFdLWYsZD1uLnNpdGUsbT1kWzBdLWMseT1kWzFdLWYsZz0yKihoKnktcCptKSx2PWgqaCtwKnAsYj1tKm0reSp5LF89Wyh5KnYtcCpiKS9nK2MsKGgqYi1tKnYpL2crZl07VWgobi5lZGdlLHUsZCxfKSxsLmVkZ2U9QmgodSx0LG51bGwsXyksbi5lZGdlPUJoKHQsZCxudWxsLF8pLEtoKGUpLEtoKG4pfWVsc2UgbC5lZGdlPUJoKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiBycCh0LGUpe3ZhciBuPXQuc2l0ZSxyPW5bMF0saT1uWzFdLG89aS1lO2lmKCFvKXJldHVybiByO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciBzPShuPWEuc2l0ZSlbMF0sbD1uWzFdLHU9bC1lO2lmKCF1KXJldHVybiBzO3ZhciBjPXMtcixmPTEvby0xL3UsaD1jL3U7cmV0dXJuIGY/KC1oK01hdGguc3FydChoKmgtMipmKihjKmMvKC0yKnUpLWwrdS8yK2ktby8yKSkpL2YrcjoocitzKS8yfWZ1bmN0aW9uIGlwKHQsZSl7dmFyIG49dC5OO2lmKG4pcmV0dXJuIHJwKG4sZSk7dmFyIHI9dC5zaXRlO3JldHVybiByWzFdPT09ZT9yWzBdOjEvMH12YXIgb3AsYXAsc3AsbHAsdXA9MWUtNixjcD0xZS0xMjtmdW5jdGlvbiBmcCh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiBocCh0LGUpe3ZhciBuLHIsaSxvPXQuc29ydChmcCkucG9wKCk7Zm9yKGxwPVtdLGFwPW5ldyBBcnJheSh0Lmxlbmd0aCksb3A9bmV3IFZoLHNwPW5ldyBWaDs7KWlmKGk9V2gsbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1uJiZvWzFdPT09cnx8KG5wKG8pLG49b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO2VwKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG4scixpPTAsbz1hcC5sZW5ndGg7aTxvOysraSlpZigodD1hcFtpXSkmJihyPShlPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKWFbbl09bixzW25dPXFoKHQsbHBbZVtuXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gc1tlXS1zW3RdfSksbj0wO248cjsrK24pc1tuXT1lW2Fbbl1dO2ZvcihuPTA7bjxyOysrbillW25dPXNbbl19fSgpLGUpe3ZhciBhPStlWzBdWzBdLHM9K2VbMF1bMV0sbD0rZVsxXVswXSx1PStlWzFdWzFdOyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGksbz1scC5sZW5ndGg7by0tOylRaChpPWxwW29dLHQsZSxuLHIpJiZIaChpLHQsZSxuLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT51cHx8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT51cCl8fGRlbGV0ZSBscFtvXX0oYSxzLGwsdSksZnVuY3Rpb24odCxlLG4scil7dmFyIGksbyxhLHMsbCx1LGMsZixoLHAsZCxtLHk9YXAubGVuZ3RoLGc9ITA7Zm9yKGk9MDtpPHk7KytpKWlmKG89YXBbaV0pe2ZvcihhPW8uc2l0ZSxzPShsPW8uaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOylscFtsW3NdXXx8bC5zcGxpY2UocywxKTtmb3Iocz0wLHU9bC5sZW5ndGg7czx1OylkPShwPVloKG8sbHBbbFtzXV0pKVswXSxtPXBbMV0sZj0oYz1HaChvLGxwW2xbKytzJXVdXSkpWzBdLGg9Y1sxXSwoTWF0aC5hYnMoZC1mKT51cHx8TWF0aC5hYnMobS1oKT51cCkmJihsLnNwbGljZShzLDAsbHAucHVzaCh6aChhLHAsTWF0aC5hYnMoZC10KTx1cCYmci1tPnVwP1t0LE1hdGguYWJzKGYtdCk8dXA/aDpyXTpNYXRoLmFicyhtLXIpPHVwJiZuLWQ+dXA/W01hdGguYWJzKGgtcik8dXA/ZjpuLHJdOk1hdGguYWJzKGQtbik8dXAmJm0tZT51cD9bbixNYXRoLmFicyhmLW4pPHVwP2g6ZV06TWF0aC5hYnMobS1lKTx1cCYmZC10PnVwP1tNYXRoLmFicyhoLWUpPHVwP2Y6dCxlXTpudWxsKSktMSksKyt1KTt1JiYoZz0hMSl9aWYoZyl7dmFyIHYsYixfLHc9MS8wO2ZvcihpPTAsZz1udWxsO2k8eTsrK2kpKG89YXBbaV0pJiYoXz0odj0oYT1vLnNpdGUpWzBdLXQpKnYrKGI9YVsxXS1lKSpiKTx3JiYodz1fLGc9byk7aWYoZyl7dmFyIHg9W3QsZV0sQz1bdCxyXSxFPVtuLHJdLE89W24sZV07Zy5oYWxmZWRnZXMucHVzaChscC5wdXNoKHpoKGE9Zy5zaXRlLHgsQykpLTEsbHAucHVzaCh6aChhLEMsRSkpLTEsbHAucHVzaCh6aChhLEUsTykpLTEsbHAucHVzaCh6aChhLE8seCkpLTEpfX1mb3IoaT0wO2k8eTsrK2kpKG89YXBbaV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgYXBbaV0pfShhLHMsbCx1KX10aGlzLmVkZ2VzPWxwLHRoaXMuY2VsbHM9YXAsb3A9c3A9bHA9YXA9bnVsbH1mdW5jdGlvbiBwcCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59ZnVuY3Rpb24gZHAodCxlLG4pe3ZhciByLGk9aWEodCksbz1NYXRoLm1pbihwYXJzZUludChpLnN0eWxlKCJ3aWR0aCIpKSxwYXJzZUludChpLnN0eWxlKCJoZWlnaHQiKSkpLzIsYT1wYXJzZUludChpLnN0eWxlKCJ3aWR0aCIpKS8yLW8scz1wYXJzZUludChpLnN0eWxlKCJoZWlnaHQiKSkvMi1vLGw9TWF0aC5tYXgobi5taW5WYWx1ZSxNYXRoLm1pbihuLm1heFZhbHVlLGUpKS9uLm1heFZhbHVlLHU9TWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMTtyPW4ud2F2ZUhlaWdodFNjYWxpbmc/ZWMoKS5yYW5nZShbMCxuLndhdmVIZWlnaHQsMF0pLmRvbWFpbihbMCw1MCwxMDBdKTplYygpLnJhbmdlKFtuLndhdmVIZWlnaHQsbi53YXZlSGVpZ2h0XSkuZG9tYWluKFswLDEwMF0pO3ZhciBjPW4udGV4dFNpemUqby8yLGY9cGFyc2VGbG9hdChlKS50b0ZpeGVkKDIpLGg9bi52YWx1ZUNvdW50VXA/bi5taW5WYWx1ZTpmLHA9bi5kaXNwbGF5UGVyY2VudD9uLmN1c3RvbVBlcmNlbnQ6IiIsZD1uLmNpcmNsZVRoaWNrbmVzcypvLG09ZCtuLmNpcmNsZUZpbGxHYXAqbyx5PW8tbSxnPXkqcigxMDAqbCksdj0xK24ud2F2ZUNvdW50LGI9Mip5L24ud2F2ZUNvdW50KnYsXz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KX07cGFyc2VGbG9hdChmKSE9cGFyc2VGbG9hdChfKGYpKSYmKF89ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgxKX0pLHBhcnNlRmxvYXQoZikhPXBhcnNlRmxvYXQoXyhmKSkmJihfPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMil9KTtmb3IodmFyIHc9W10seD0wO3g8PTQwKnY7eCsrKXcucHVzaCh7eDp4Lyg0MCp2KSx5OngvNDB9KTt2YXIgQz1lYygpLnJhbmdlKFswLDIqTWF0aC5QSV0pLmRvbWFpbihbMCwxXSksRT1lYygpLnJhbmdlKFswLG9dKS5kb21haW4oWzAsb10pLE89ZWMoKS5yYW5nZShbMCxiXSkuZG9tYWluKFswLDFdKSxTPWVjKCkucmFuZ2UoWzAsZ10pLmRvbWFpbihbMCwxXSksaz1lYygpLnJhbmdlKFttKzIqeStnLG0tZ10pLmRvbWFpbihbMCwxXSksVD1lYygpLnJhbmdlKFswLGItMip5XSkuZG9tYWluKFswLDFdKSxQPWVjKCkucmFuZ2UoW20rMip5LG0rLjcqY10pLmRvbWFpbihbMCwxXSksQT1pLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ErIiwiK3MrIikiKSxqPXNoKCkuc3RhcnRBbmdsZShDKDApKS5lbmRBbmdsZShDKDEpKS5vdXRlclJhZGl1cyhFKG8pKS5pbm5lclJhZGl1cyhFKG8tZCkpO0EuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaikuc3R5bGUoImZpbGwiLG4uY2lyY2xlQ29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28rIiwiK28rIikiKTt2YXIgST1BLmFwcGVuZCgidGV4dCIpLnRleHQoXyhoKStwKS5hdHRyKCJjbGFzcyIsImxpcXVpZEZpbGxHYXVnZVRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZvbnQtc2l6ZSIsYysicHgiKS5zdHlsZSgiZmlsbCIsbi50ZXh0Q29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28rIiwiK1Aobi50ZXh0VmVydFBvc2l0aW9uKSsiKSIpLE09cGgoKS54KGZ1bmN0aW9uKHQpe3JldHVybiBPKHQueCl9KS55MChmdW5jdGlvbih0KXtyZXR1cm4gUyhNYXRoLnNpbigyKk1hdGguUEkqbi53YXZlT2Zmc2V0Ki0xKzIqTWF0aC5QSSooMS1uLndhdmVDb3VudCkrMip0LnkqTWF0aC5QSSkpfSkueTEoZnVuY3Rpb24odCl7cmV0dXJuIDIqeStnfSksTj1BLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsImNsaXBXYXZlIit1LnRvU3RyaW5nKCkpLFI9Ti5hcHBlbmQoInBhdGgiKS5kYXR1bSh3KS5hdHRyKCJkIixNKS5hdHRyKCJUIiwwKSxEPUEuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIiwidXJsKCNjbGlwV2F2ZSIrdS50b1N0cmluZygpKyIpIik7RC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvKS5hdHRyKCJjeSIsbykuYXR0cigiciIseSkuc3R5bGUoImZpbGwiLG4ud2F2ZUNvbG9yKTt2YXIgRj1ELmFwcGVuZCgidGV4dCIpLnRleHQoXyhoKStwKS5hdHRyKCJjbGFzcyIsImxpcXVpZEZpbGxHYXVnZVRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZvbnQtc2l6ZSIsYysicHgiKS5zdHlsZSgiZmlsbCIsbi53YXZlVGV4dENvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitQKG4udGV4dFZlcnRQb3NpdGlvbikrIikiKTtpZihuLnZhbHVlQ291bnRVcCl7dmFyIEw9ZnVuY3Rpb24oKXt2YXIgdD1fcyhoLGYpO3JldHVybiBmdW5jdGlvbihlKXtJLnRleHQoXyh0KGUpKStwKSxGLnRleHQoXyh0KGUpKStwKX19O0kudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsTCksRi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixMKX12YXIgVj1tKzIqeS1iO2Z1bmN0aW9uIEIoKXtSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QoUi5hdHRyKCJUIikpKyIsMCkiKSxSLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVBbmltYXRlVGltZSooMS1SLmF0dHIoIlQiKSkpLmVhc2UoZ2wpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QoMSkrIiwwKSIpLmF0dHIoIlQiLDEpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Ui5hdHRyKCJUIiwwKSxCKCl9KX1yZXR1cm4gbi53YXZlUmlzZT9OLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK2soMCkrIikiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK2sobCkrIikiKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMSwwKSIpfSk6Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKGwpKyIpIiksbi53YXZlQW5pbWF0ZSYmQigpLHt1cGRhdGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCl9O3BhcnNlRmxvYXQoZSkhPXBhcnNlRmxvYXQoaShlKSkmJihpPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGUpIT1wYXJzZUZsb2F0KGkoZSkpJiYoaT1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpfSk7dmFyIG89ZnVuY3Rpb24oKXt2YXIgZT1fcyhJLnRleHQoKSxwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMikpO3JldHVybiBmdW5jdGlvbih0KXtJLnRleHQoaShlKHQpKStwKSxGLnRleHQoaShlKHQpKStwKX19O0kudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsbyksRi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixvKTt2YXIgYSxzPU1hdGgubWF4KG4ubWluVmFsdWUsTWF0aC5taW4obi5tYXhWYWx1ZSx0KSkvbi5tYXhWYWx1ZSxsPXkqcigxMDAqcyksdT1lYygpLnJhbmdlKFttKzIqeStsLG0tbF0pLmRvbWFpbihbMCwxXSkocyksYz1lYygpLnJhbmdlKFswLGJdKS5kb21haW4oWzAsMV0pLGY9ZWMoKS5yYW5nZShbMCxsXSkuZG9tYWluKFswLDFdKTthPW4ud2F2ZUhlaWdodFNjYWxpbmc/cWwuYXJlYSgpLngoZnVuY3Rpb24odCl7cmV0dXJuIGModC54KX0pLnkwKGZ1bmN0aW9uKHQpe3JldHVybiBmKE1hdGguc2luKDIqTWF0aC5QSSpuLndhdmVPZmZzZXQqLTErMipNYXRoLlBJKigxLW4ud2F2ZUNvdW50KSsyKnQueSpNYXRoLlBJKSl9KS55MShmdW5jdGlvbih0KXtyZXR1cm4gMip5K2x9KTpNO3ZhciBoPW4ud2F2ZUFuaW1hdGU/VCgxKTowO1IudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVBbmltYXRlP24ud2F2ZUFuaW1hdGVUaW1lKigxLVIuYXR0cigiVCIpKTpuLndhdmVSaXNlVGltZSkuZWFzZShnbCkuYXR0cigiZCIsYSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraCsiLDApIikuYXR0cigiVCIsIjEiKS5vbigiZW5kIixmdW5jdGlvbigpe24ud2F2ZUFuaW1hdGUmJihSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QoMCkrIiwwKSIpLEIoKSl9KSxOLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrdSsiKSIpfX19aHAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpocCxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gR2goZSx0W25dKX0pO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihuLHIpe2lmKG89KGk9bi5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIGksbyxhLHMsbCx1LGM9bi5zaXRlLGY9LTEsaD1lW2lbby0xXV0scD1oLmxlZnQ9PT1jP2gucmlnaHQ6aC5sZWZ0OysrZjxvOylhPXAscD0oaD1lW2lbZl1dKS5sZWZ0PT09Yz9oLnJpZ2h0OmgubGVmdCxhJiZwJiZyPGEuaW5kZXgmJnI8cC5pbmRleCYmKChzPWMpWzBdLSh1PXApWzBdKSooKGw9YSlbMV0tc1sxXSktKHNbMF0tbFswXSkqKHVbMV0tc1sxXSk8MCYmdC5wdXNoKFtjLmRhdGEsYS5kYXRhLHAuZGF0YV0pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LmxlZnQuZGF0YSx0YXJnZXQ6dC5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsaSxvPXRoaXMsYT1vLl9mb3VuZHx8MCxzPW8uY2VsbHMubGVuZ3RoOyEoaT1vLmNlbGxzW2FdKTspaWYoKythPj1zKXJldHVybiBudWxsO3ZhciBsPXQtaS5zaXRlWzBdLHU9ZS1pLnNpdGVbMV0sYz1sKmwrdSp1O2Rve2k9by5jZWxsc1tyPWFdLGE9bnVsbCxpLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW8uZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBsPXQtc1swXSx1PWUtc1sxXSxmPWwqbCt1KnU7ZjxjJiYoYz1mLGE9cy5pbmRleCl9fSl9d2hpbGUobnVsbCE9PWEpO3JldHVybiBvLl9mb3VuZD1yLG51bGw9PW58fGM8PW4qbj9pLnNpdGU6bnVsbH19LHBwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cHAsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IHBwKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgcHAodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fSxuZXcgcHAoMSwwLDApO3ZhciBtcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmR5bl93aWR0aD01MDB9cmV0dXJuIHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0LGU7dGhpcy5keW5fd2lkdGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImQzY29udGFpbmVyIikuY2xpZW50V2lkdGgsdD1pYSgiI2QzdGFyZ2V0IikuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIiwiYW5pbWF0ZS1ncmFkaWVudCIpLmF0dHIoIngxIiwiMCUiKS5hdHRyKCJ5MSIsIjAlIikuYXR0cigieDIiLCIxMDAlIikuYXR0cigieTIiLCIwIikuYXR0cigic3ByZWFkTWV0aG9kIiwicmVmbGVjdCIpLGU9WyIjMDAxYWZkIiwiIzZiNjdmYyIsIiM1MzkwZTMiLCIjMzU2Y2M2IiwiIzUzOTBlMyIsIiM2YjY3ZmMiLCIjMDAxYWZkIl0sdC5zZWxlY3RBbGwoIi5zdG9wIikuZGF0YShlKS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gbi8oZS5sZW5ndGgtMSl9KS5hdHRyKCJzdG9wLWNvbG9yIixmdW5jdGlvbih0KXtyZXR1cm4gdH0pLHQuYXBwZW5kKCJhbmltYXRlIikuYXR0cigiYXR0cmlidXRlTmFtZSIsIngxIikuYXR0cigidmFsdWVzIiwiMCU7MTAwJSIpLmF0dHIoImR1ciIsIjdzIikuYXR0cigicmVwZWF0Q291bnQiLCJpbmRlZmluaXRlIiksdC5hcHBlbmQoImFuaW1hdGUiKS5hdHRyKCJhdHRyaWJ1dGVOYW1lIiwieDIiKS5hdHRyKCJ2YWx1ZXMiLCIxMDAlOzIwMCUiKS5hdHRyKCJkdXIiLCI3cyIpLmF0dHIoInJlcGVhdENvdW50IiwiaW5kZWZpbml0ZSIpO3ZhciBuPXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07bi52YWx1ZUNvdW50VXA9ITAsbi5jaXJjbGVUaGlja25lc3M9LjE1LG4uY2lyY2xlQ29sb3I9IiM4MDgwMTUiLG4udGV4dENvbG9yPSIjNTU1NTAwIixuLndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLG4ud2F2ZUNvbG9yPSIjQUFBQTM5IixuLnRleHRWZXJ0UG9zaXRpb249Ljgsbi53YXZlQW5pbWF0ZVRpbWU9MWUzLG4ud2F2ZUhlaWdodD0uMDUsbi53YXZlQW5pbWF0ZT0hMCxuLndhdmVSaXNlPSExLG4ud2F2ZUhlaWdodFNjYWxpbmc9ITEsbi53YXZlT2Zmc2V0PS4yNSxuLnRleHRTaXplPS41LG4ud2F2ZUNvdW50PTMsbi5kaXNwbGF5UGVyY2VudD0hMCxuLm1pblZhbHVlPTAsbi5tYXhWYWx1ZT02MDAsbi5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgcj1kcCgiI2QzaW5wdXRnYXVnZSIsMjIwLG4pO3l0KDE1MDAsMTUwMCkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiByLnVwZGF0ZShNYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKSsyNTApfSk7dmFyIGk9e21pblZhbHVlOjAsbWF4VmFsdWU6MTAwLGNpcmNsZVRoaWNrbmVzczouMDUsY2lyY2xlRmlsbEdhcDouMDUsY2lyY2xlQ29sb3I6IiMxNzhCQ0EiLHdhdmVIZWlnaHQ6LjA1LHdhdmVDb3VudDoxLHdhdmVSaXNlVGltZToxZTMsd2F2ZUFuaW1hdGVUaW1lOjE4ZTMsd2F2ZVJpc2U6ITAsd2F2ZUhlaWdodFNjYWxpbmc6ITAsd2F2ZUFuaW1hdGU6ITAsd2F2ZUNvbG9yOiIjMTc4QkNBIix3YXZlT2Zmc2V0OjAsdGV4dFZlcnRQb3NpdGlvbjouNSx0ZXh0U2l6ZToxLHZhbHVlQ291bnRVcDohMCxkaXNwbGF5UGVyY2VudDohMCx0ZXh0Q29sb3I6IiMwNDU2ODEiLHdhdmVUZXh0Q29sb3I6IiNBNERCZjgiLGN1c3RvbVBlcmNlbnQ6IiUifTtpLnZhbHVlQ291bnRVcD0hMCxpLmNpcmNsZVRoaWNrbmVzcz0uMTUsaS5jaXJjbGVDb2xvcj0iIzgwMzU3YyIsaS50ZXh0Q29sb3I9IiM1NTU1MDAiLGkud2F2ZVRleHRDb2xvcj0iI0ZGRkZBQSIsaS53YXZlQ29sb3I9IiNBQUFBMzkiLGkudGV4dFZlcnRQb3NpdGlvbj0uOCxpLndhdmVBbmltYXRlVGltZT0xZTMsaS53YXZlSGVpZ2h0PS4wNSxpLndhdmVBbmltYXRlPSEwLGkud2F2ZVJpc2U9ITEsaS53YXZlSGVpZ2h0U2NhbGluZz0hMSxpLndhdmVPZmZzZXQ9LjI1LGkudGV4dFNpemU9LjUsaS53YXZlQ291bnQ9MyxpLmRpc3BsYXlQZXJjZW50PSEwLGkubWluVmFsdWU9MCxpLm1heFZhbHVlPTYwMCxpLmN1c3RvbVBlcmNlbnQ9IiBubW9sL0wiO3ZhciBvLGEscyxsLHUsYyxmLGgscCxkPWRwKCIjZDNvdXRnYXVnZSIsNDUsaSk7eXQoMTUwMCwxNTAwKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGQudXBkYXRlKE1hdGguZmxvb3IoNDAqTWF0aC5yYW5kb20oKSkrNTApfSkscz1pYSgiI2QzYmltb2RhbCIpLGw9ZWMoKS5kb21haW4oWzMwLDExMF0pLnJhbmdlKFs0MCwyNzBdKSx1PWVjKCkuZG9tYWluKFswLC4xXSkucmFuZ2UoWzE1MCwyMF0pLGY9KGM9Wzc5LDU0LDc0LDYyLDg1LDU1LDg4LDg1LDUxLDg1LDU0LDg0LDc4LDQ3LDgzLDUyLDYyLDg0LDUyLDc5LDUxLDQ3LDc4LDY5LDc0LDgzLDU1LDc2LDc4LDc5LDczLDc3LDY2LDgwLDc0LDUyLDQ4LDgwLDU5LDkwLDgwLDU4LDg0LDU4LDczLDgzLDY0LDUzLDgyLDU5LDc1LDkwLDU0LDgwLDU0LDgzLDcxLDY0LDc3LDgxLDU5LDg0LDQ4LDgyLDYwLDkyLDc4LDc4LDY1LDczLDgyLDU2LDc5LDcxLDYyLDc2LDYwLDc4LDc2LDgzLDc1LDgyLDcwLDY1LDczLDg4LDc2LDgwLDQ4LDg2LDYwLDkwLDUwLDc4LDYzLDcyLDg0LDc1LDUxLDgyLDYyLDg4LDQ5LDgzLDgxLDQ3LDg0LDUyLDg2LDgxLDc1LDU5LDg5LDc5LDU5LDgxLDUwLDg1LDU5LDg3LDUzLDY5LDc3LDU2LDg4LDgxLDQ1LDgyLDU1LDkwLDQ1LDgzLDU2LDg5LDQ2LDgyLDUxLDg2LDUzLDc5LDgxLDYwLDgyLDc3LDc2LDU5LDgwLDQ5LDk2LDUzLDc3LDc3LDY1LDgxLDcxLDcwLDgxLDkzLDUzLDg5LDQ1LDg2LDU4LDc4LDY2LDc2LDYzLDg4LDUyLDkzLDQ5LDU3LDc3LDY4LDgxLDgxLDczLDUwLDg1LDc0LDU1LDc3LDgzLDgzLDUxLDc4LDg0LDQ2LDgzLDU1LDgxLDU3LDc2LDg0LDc3LDgxLDg3LDc3LDUxLDc4LDYwLDgyLDkxLDUzLDc4LDQ2LDc3LDg0LDQ5LDgzLDcxLDgwLDQ5LDc1LDY0LDc2LDUzLDk0LDU1LDc2LDUwLDgyLDU0LDc1LDc4LDc5LDc4LDc4LDcwLDc5LDcwLDU0LDg2LDUwLDkwLDU0LDU0LDc3LDc5LDY0LDc1LDQ3LDg2LDYzLDg1LDgyLDU3LDgyLDY3LDc0LDU0LDgzLDczLDczLDg4LDgwLDcxLDgzLDU2LDc5LDc4LDg0LDU4LDgzLDQzLDYwLDc1LDgxLDQ2LDkwLDQ2LDc0XSkubGVuZ3RoLGg9ZnVuY3Rpb24oKXt2YXIgdD0kaSxlPVppLG49YW87ZnVuY3Rpb24gcihyKXt2YXIgaSxvLGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSk7Zm9yKGk9MDtpPGE7KytpKXNbaV09dChyW2ldLGkscik7dmFyIGw9ZShzKSx1PWxbMF0sYz1sWzFdLGY9bihzLHUsYyk7QXJyYXkuaXNBcnJheShmKXx8KGY9b28odSxjLGYpLGY9SmkoTWF0aC5jZWlsKHUvZikqZixNYXRoLmZsb29yKGMvZikqZixmKSk7Zm9yKHZhciBoPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLWg7Zm9yKDtmW2gtMV0+YzspZi5wb3AoKSwtLWg7dmFyIHAsZD1uZXcgQXJyYXkoaCsxKTtmb3IoaT0wO2k8PWg7KytpKShwPWRbaV09W10pLngwPWk+MD9mW2ktMV06dSxwLngxPWk8aD9mW2ldOmM7Zm9yKGk9MDtpPGE7KytpKXU8PShvPXNbaV0pJiZvPD1jJiZkW1lpKGYsbywwLGgpXS5wdXNoKHJbaV0pO3JldHVybiBkfXJldHVybiByLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6WGkoZSkscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpYaShbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9YaShLaS5jYWxsKHQpKTpYaSh0KSxyKTpufSxyfSgpLmRvbWFpbihsLmRvbWFpbigpKS50aHJlc2hvbGRzKDQwKShjKSxwPShvPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0Lz03KTw9MT8uNzUqKDEtdCp0KS83OjB9LGE9bC50aWNrcyg0MCksZnVuY3Rpb24odCl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLGZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPXIsbz0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysrbzxyOylpc05hTihuPVdpKHRbb10pKT8tLWk6YSs9bjtlbHNlIGZvcig7KytvPHI7KWlzTmFOKG49V2koZSh0W29dKSkpPy0taTphKz1uO2lmKGkpcmV0dXJuIGEvaX0odCxmdW5jdGlvbih0KXtyZXR1cm4gbyhlLXQpfSldfSl9KShjKSxzLmluc2VydCgiZyIsIioiKS5hdHRyKCJmaWxsIiwiI2JiYiIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoaCkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngwKSsxfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHUodC5sZW5ndGgvZil9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIGwodC54MSktbCh0LngwKS0xfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdSgwKS11KHQubGVuZ3RoL2YpfSkscy5hcHBlbmQoInBhdGgiKS5kYXR1bShwKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJkIixoaCgpLmN1cnZlKHZoKS54KGZ1bmN0aW9uKHQpe3JldHVybiBsKHRbMF0pfSkueShmdW5jdGlvbih0KXtyZXR1cm4gdSh0WzFdKX0pKX0sdH0oKSx5cD1vLk9hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIi5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99bWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGdwKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNDksImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiTWVUaHJpeCA6IENsZWFuaW5nIGhvc3BpdGFsIGVmZmx1ZW50IHNpbmNlIDIwMTgiXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsNDYsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLHppLEJpKSksby5QYSg0LDQ5MTUyLG51bGwsMCxGaSxbXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDUsMCxudWxsLDAsNCwibWF0LWNhcmQtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlciJdXSxudWxsLG51bGwsbnVsbCxIaSxVaSkpLG8uUGEoNiw0OTE1MixudWxsLDAsTGksW10sbnVsbCxudWxsKSwodCgpKCksby5RYSg3LDAsbnVsbCwxLDIsIm1hdC1jYXJkLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1jYXJkLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoOCwxNjM4NCxudWxsLDAsRGksW10sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSxudWxsLFsiIE91ciBQcm9qZWN0ICJdKSksKHQoKSgpLG8uUWEoMTAsMCxudWxsLDAsMzksIm1hdC1jYXJkLWNvbnRlbnQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQtY29udGVudCBtYXQtY2FyZC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTEsMTYzODQsbnVsbCwwLFJpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMTIsMCxudWxsLG51bGwsMzcsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMTMsMCxudWxsLG51bGwsMjQsImRpdiIsW1siaWQiLCJkM2NvbnRhaW5lciJdLFsic3R5bGUiLCJtYXJnaW46IGF1dG87Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDE0LDAsbnVsbCxudWxsLDIzLCI6c3ZnOnN2ZyIsW1siaGVpZ2h0IiwiNTAwIl0sWyJpZCIsImQzdGFyZ2V0Il0sWyJzdHlsZSIsImRpc3BsYXk6IGJsb2NrO21hcmdpbjogYXV0bzsiXSxbIndpZHRoIiwiNjc0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDE1LDAsbnVsbCxudWxsLDUsIjpzdmc6ZyIsW1sidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMTYsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIzMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtMjApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJNVFgiXSkpLCh0KCkoKSxvLlFhKDE4LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJIb3NwaXRhbCBlZmZsdWVudHMiXSkpLCh0KCkoKSxvLlFhKDIwLDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2lucHV0Z2F1Z2UiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNTBweDt3aWR0aDogMTUwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDIxLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiNTAiXSxbInN0eWxlIiwiZmlsbDogdHJhbnNwYXJlbnQ7IHN0cm9rZTogIzVhMDAzNkZGOyBzdHJva2Utd2lkdGg6IDVweCJdLFsid2lkdGgiLCI2NzUiXSxbIngiLCIwIl0sWyJ5IiwiMjcwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDIyLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiMTUwIl0sWyJzdHlsZSIsImZpbGw6IHRyYW5zcGFyZW50OyBzdHJva2U6ICM1YTAwMzZGRjsgc3Ryb2tlLXdpZHRoOiA1cHg7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyMywwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjUwIl0sWyJzdHlsZSIsImZpbGw6IHVybCgnI2FuaW1hdGUtZ3JhZGllbnQnKTsiXSxbIndpZHRoIiwiNjc1Il0sWyJ4IiwiMCJdLFsieSIsIjI3MCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNCwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNiwwLG51bGwsbnVsbCw1LCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg0NzAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjMwIl0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC0yMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIk1UWCJdKSksKHQoKSgpLG8uUWEoMjksMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIldhc3Rld2F0ZXIgb3V0cHV0Il0pKSwodCgpKCksby5RYSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMzIsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTgwLDIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgzMywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNjMpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKHQoKSgpLG8uUWEoMzUsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTc1KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiQmltb2RhbCBkaXN0cmlidXRpb24iXSkpLCh0KCkoKSxvLlFhKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMzgsMCxudWxsLG51bGwsMTEsImRpdiIsW1sic3R5bGUiLCJwYWRkaW5nOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiIE91ciBwcm9qZWN0IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGJhY3RlcmlhbCBwbGF0Zm9ybSBmb3IgZHJ1ZyBkZWdyYWRhdGlvbi4gV2UgY2hvb3NlIHRvIGZvY3VzIG9uIGN5dG90b3hpYyBhbnRpY2FuY2VyIGRydWdzIGFzIHByb29mIG9mIGNvbmNlcHQsIGFzIHRoZWlyIGNvbmNlbnRyYXRpb25zIGFyZSBhbGFybWluZ2x5IGhpZ2ggaW4gaG9zcGl0YWwgd2FzdGV3YXRlciBlZmZsdWVudC4gVGhyb3VnaCBhIHRvb2xraXQgb2YgYnJvYWQtIGFuZCBuYXJyb3ctc3BlY3RydW0gZW56eW1lcywgd2UgYWltIHRvIGFjaGlldmUgY2xlYXJhbmNlIG9mIHRoZSBtYWluIGNoZW1vdGhlcmFwZXV0aWMgYWdlbnRzLCBsaWtlIG1ldGhvdHJleGF0ZSwgNS1mbHVvcm91cmFjaWwgb3IgZG94b3J1YmljaW4uICJdKSksKHQoKSgpLG8uUWEoNDAsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIgV2UgYXJlIHRha2luZyBvbiB0aHJlZSBtYWluIGNoYWxsZW5nZXMgOiBlZmZpY2llbnQgZW50cnkgb2YgdGhlc2UgbW9sZWN1bGUgaW50byB0aGUgY2VsbCwgdGhyb3VnaCBjaGFubmVscyBhbmQgdHJhbnNwb3J0ZXJzICh1cmFjaWwtbGlrZSB0cmFuc3BvcnRlciB1cmFBLCBjcnlwdGljIGZvbGF0ZS1hbmFsb2d1ZSB0cmFuc3BvcnRlciBhYmdUIC4uLiksIHByb3BlciBkZWdyYWRhdGlvbiB0aHJvdWdoIG1ldGFib2xpemluZyBlbnp5bWVzIChjYXJib3h5cGVwdGlkYXNlIEcyLCBjeXRvY2hyb21lIFA0NTAgXHUyMDI2KSwgYW5kIGxvbmcgdGVybSBvcGVyYXRpb24gb2YgdGhlIGJpb3JlYWN0b3IsIHRob3VnaCBhIGJpc3RhYmxlLCBcdTIwMWNzdGVtLWNlbGwgbGlrZVx1MjAxZCBwb3B1bGF0aW9uIG9mIGJhY3RlcmlhLCBhbGxldmlhdGluZyB0aGUgbmVlZCBmb3IgcmVndWxhciByZXNlZWRpbmcgd2l0aCBmcmVzaCBjbG9uZXMuICJdKSksKHQoKSgpLG8uUWEoNDIsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDQzLDAsbnVsbCxudWxsLDEsImgzIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiUHJvamVjdCBzaWduaWZpY2FuY2UiXSkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIgUGhhcm1hY2V1dGljYWwgZHJ1Z3MgYXJlIGEgcGFydGljdWxhcmx5IGNvbmNzIG5pbmcgc291cmNlIG9mIHBvbGx1dGlvbiA6IHNlbGVjdGVkIHRvIGJlIGJpb2xvZ2ljYWxseSBhY3RpdmUgYXQgbG93IGNvbmNlbnRyYXRpb24gJiBkZXNpZ25lZCB0byByZXNpc3QgYmlvZGVncmFkYXRpb24sIGRydWdzIGNvbnN0aXR1dGUgYSBjbGFzcyBvZiBoaWdoIHJlbWFuZW5jZSBwb2xsdXRhbnRzIHRoYXQgaXMgcm91dGluZWx5IGZvdW5kIGluIHRoZSBlbnZpcm9ubWVudCwgZXZlbiBpbiBvdXIgZHJpbmtpbmcgd2F0ZXIuICJdKSksKHQoKSgpLG8uUWEoNDYsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIgVGhvdWdoIHBoeXNpY2FsICYgY2hlbWljYWwgc29sdXRpb24gZXhpc3QsIGluIHRoZSBmb3JtIG9mIG96b25lIGFuZCBVViB0cmVhdG1lbnQsIG91ciBzb2x1dGlvbiBjYW4gb2ZmZXIgdGhlIGZsZXhpYmlsaXR5IGFuZCBlZmZpY2llbmN5IG9mIGEgYmlvcmVhY3Rvci1iYXNlZCBhcHByb2FjaC4gIl0pKSwodCgpKCksby5RYSg0OCwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBPdXIgc3RlbS1jZWxsIGxpa2UgYXBwcm9hY2ggdG8gYmFjdGVyaWFsIHBvcHVsYXRpb24gbWFrZXMgaXQgYW4gb3B0aW9uIHdpdGggcG90ZW50aWFsbHkgbG93ZXIgb25nb2luZyBjb3N0cywgYW5kIG91ciBkZWdyYWRhdGlvbiBlbnp5bWVzIGFsbG93IHRhcmdldGVkIGRlZ3JhZGF0aW9uIG9mIHBhcnRpY3VsYXJseSByZXNpbGllbnQgbW9sZWN1bGVzIDogYm90aCB3ZWFrbmVzc2VzIG9mIGNvbnZlbnRpb25hbCBtZXRob2RzIG9mIHdhc3Rld2F0ZXIgdHJlYXRtZW50LiAiXSkpXSxudWxsLG51bGwpfXZhciB2cD1vLk1hKCJkYXNoYm9hcmQiLG1wLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiZGFzaGJvYXJkIixbXSxudWxsLG51bGwsbnVsbCxncCx5cCkpLG8uUGEoMSwxMDk3NzI4LG51bGwsMCxtcCxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfSx7fSx7fSxbXSksYnA9MCxfcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9vcGVuQ2xvc2VBbGxBY3Rpb25zPW5ldyBDLmEsdGhpcy5pZD0iY2RrLWFjY29yZGlvbi0iK2JwKyssdGhpcy5fbXVsdGk9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGl9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tdWx0aT1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW5BbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITApfSx0LnByb3RvdHlwZS5jbG9zZUFsbD1mdW5jdGlvbigpe3RoaXMuX29wZW5DbG9zZUFsbCghMSl9LHQucHJvdG90eXBlLl9vcGVuQ2xvc2VBbGw9ZnVuY3Rpb24odCl7dGhpcy5tdWx0aSYmdGhpcy5fb3BlbkNsb3NlQWxsQWN0aW9ucy5uZXh0KHQpfSx0fSgpLHdwPTAseHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYWNjb3JkaW9uPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyPW4sdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPWF0LmEuRU1QVFksdGhpcy5jbG9zZWQ9bmV3IG8ubix0aGlzLm9wZW5lZD1uZXcgby5uLHRoaXMuZGVzdHJveWVkPW5ldyBvLm4sdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgby5uLHRoaXMuaWQ9ImNkay1hY2NvcmRpb24tY2hpbGQtIit3cCsrLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyPWZ1bmN0aW9uKCl7fSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1uLmxpc3RlbihmdW5jdGlvbih0LGUpe3IuYWNjb3JkaW9uJiYhci5hY2NvcmRpb24ubXVsdGkmJnIuYWNjb3JkaW9uLmlkPT09ZSYmci5pZCE9PXQmJihyLmV4cGFuZGVkPSExKX0pLHRoaXMuYWNjb3JkaW9uJiYodGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvT3BlbkNsb3NlQWxsQWN0aW9ucygpKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJleHBhbmRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9leHBhbmRlZH0sc2V0OmZ1bmN0aW9uKHQpe3Q9RCh0KSx0aGlzLl9leHBhbmRlZCE9PXQmJih0aGlzLl9leHBhbmRlZD10LHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0KSx0Pyh0aGlzLm9wZW5lZC5lbWl0KCksdGhpcy5fZXhwYW5zaW9uRGlzcGF0Y2hlci5ub3RpZnkodGhpcy5pZCx0aGlzLmFjY29yZGlvbj90aGlzLmFjY29yZGlvbi5pZDp0aGlzLmlkKSk6dGhpcy5jbG9zZWQuZW1pdCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMub3BlbmVkLmNvbXBsZXRlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKSx0aGlzLmRlc3Ryb3llZC5lbWl0KCksdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcigpLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITEpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITApfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlVG9PcGVuQ2xvc2VBbGxBY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5hY2NvcmRpb24uX29wZW5DbG9zZUFsbEFjdGlvbnMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuZGlzYWJsZWR8fCh0LmV4cGFuZGVkPWUpfSl9LHR9KCksQ3A9ZnVuY3Rpb24oKXt9LEVwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2hpZGVUb2dnbGU9ITEsZS5kaXNwbGF5TW9kZT0iZGVmYXVsdCIsZX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShfcCksT3A9MCxTcD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5fdmlld0NvbnRhaW5lclJlZj1pLG8uX2hpZGVUb2dnbGU9ITEsby5faW5wdXRDaGFuZ2VzPW5ldyBDLmEsby5faGVhZGVySWQ9Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLSIrT3ArKyxvLmFjY29yZGlvbj1lLG99cmV0dXJuIE9iamVjdChkLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaWRlVG9nZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVUb2dnbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9oaWRlVG9nZ2xlPUQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2dldEhpZGVUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaGlkZVRvZ2dsZTp0aGlzLmhpZGVUb2dnbGV9LGUucHJvdG90eXBlLl9oYXNTcGFjaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjY29yZGlvbiYmImRlZmF1bHQiPT09KHRoaXMuZXhwYW5kZWQ/dGhpcy5hY2NvcmRpb24uZGlzcGxheU1vZGU6dGhpcy5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0sZS5wcm90b3R5cGUuX2dldEV4cGFuZGVkU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQifSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2xhenlDb250ZW50JiZ0aGlzLm9wZW5lZC5waXBlKFIobnVsbCksT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZXhwYW5kZWQmJiF0Ll9wb3J0YWx9KSxPYmplY3QoRXQuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3BvcnRhbD1uZXcgVHQodC5fbGF6eUNvbnRlbnQuX3RlbXBsYXRlLHQuX3ZpZXdDb250YWluZXJSZWYpfSl9LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2lucHV0Q2hhbmdlcy5uZXh0KHQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5faW5wdXRDaGFuZ2VzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9ib2R5QW5pbWF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudC5jbGFzc0xpc3Qsbj10LnBoYXNlTmFtZSxyPXQudG9TdGF0ZTsiZG9uZSI9PT1uJiYiZXhwYW5kZWQiPT09cj9lLmFkZCgibWF0LWV4cGFuZGVkIik6InN0YXJ0Ij09PW4mJiJjb2xsYXBzZWQiPT09ciYmZS5yZW1vdmUoIm1hdC1leHBhbmRlZCIpfSxlfSh4cCksa3A9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5wYW5lbD10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj1hdC5hLkVNUFRZLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj1PYmplY3Qob3QuYSkodC5vcGVuZWQsdC5jbG9zZWQsdC5faW5wdXRDaGFuZ2VzLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiEoIXQuaGlkZVRvZ2dsZSYmIXQuZGlzYWJsZWQpfSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxuLm1vbml0b3IoZS5uYXRpdmVFbGVtZW50KX1yZXR1cm4gdC5wcm90b3R5cGUuX3RvZ2dsZT1mdW5jdGlvbigpe3RoaXMucGFuZWwudG9nZ2xlKCl9LHQucHJvdG90eXBlLl9pc0V4cGFuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuZXhwYW5kZWR9LHQucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuX2dldEV4cGFuZGVkU3RhdGUoKX0sdC5wcm90b3R5cGUuX2dldFBhbmVsSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5pZH0sdC5wcm90b3R5cGUuX3Nob3dUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wYW5lbC5oaWRlVG9nZ2xlJiYhdGhpcy5wYW5lbC5kaXNhYmxlZH0sdC5wcm90b3R5cGUuX2tleWRvd249ZnVuY3Rpb24odCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSAzMjpjYXNlIDEzOnQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGUoKTticmVhaztkZWZhdWx0OnJldHVybn19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCl9LHR9KCksVHA9ZnVuY3Rpb24oKXt9LFBwPWZ1bmN0aW9uKCl7fSxBcD1mdW5jdGlvbigpe30sanA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbGlzdGVuZXJzPVtdfXJldHVybiB0LnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPXRoaXMuX2xpc3RlbmVycztuPHIubGVuZ3RoO24rKykoMCxyW25dKSh0LGUpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fbGlzdGVuZXJzLnB1c2godCksZnVuY3Rpb24oKXtlLl9saXN0ZW5lcnM9ZS5fbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KX19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuZXJzPVtdfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksSXA9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVse3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7dHJhbnNpdGlvbjptYXJnaW4gMjI1bXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQubWF0LWV4cGFuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1leHBhbnNpb24tcGFuZWwtYm9keXtwYWRkaW5nOjAgMjRweCAxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luOjE2cHggMH0ubWF0LWFjY29yZGlvbj4ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nOmZpcnN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpmaXJzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLXRvcDowfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6bGFzdC1jaGlsZCwubWF0LWFjY29yZGlvbj46bGFzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLWJvdHRvbTowfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MTZweCA4cHggMTZweCAyNHB4fS5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImJvZHlFeHBhbnNpb24iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjBweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gTXAodCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uSGEoMCxudWxsLG51bGwsMCkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIE5wKHQpe3JldHVybiBvLmtiKDIsW28uWmEobnVsbCwwKSwodCgpKCksby5RYSgxLDAsW1siYm9keSIsMV1dLG51bGwsNSwiZGl2IixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCJdLFsicm9sZSIsInJlZ2lvbiJdXSxbWzI0LCJAYm9keUV4cGFuc2lvbiIsMF0sWzEsImFyaWEtbGFiZWxsZWRieSIsMF0sWzgsImlkIiwwXV0sW1tudWxsLCJAYm9keUV4cGFuc2lvbi5kb25lIl0sW251bGwsIkBib2R5RXhwYW5zaW9uLnN0YXJ0Il1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMCxpPXQuY29tcG9uZW50O3JldHVybiJAYm9keUV4cGFuc2lvbi5kb25lIj09PWUmJihyPSExIT09aS5fYm9keUFuaW1hdGlvbihuKSYmciksIkBib2R5RXhwYW5zaW9uLnN0YXJ0Ij09PWUmJihyPSExIT09aS5fYm9keUFuaW1hdGlvbihuKSYmcikscn0sbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMiwwLG51bGwsbnVsbCwzLCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uWmEobnVsbCwxKSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLE1wKSksby5QYSg1LDIxMjk5MixudWxsLDAsanQsW28uaixvLlBdLHtwb3J0YWw6WzAsInBvcnRhbCJdfSxudWxsKSxvLlphKG51bGwsMildLGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxlLmNvbXBvbmVudC5fcG9ydGFsKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uX2dldEV4cGFuZGVkU3RhdGUoKSxuLl9oZWFkZXJJZCxuLmlkKX0pfXZhciBScD1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAyNHB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpmb2N1cywubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7b3V0bGluZTowfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQ6Zm9jdXMsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZDpob3ZlcntiYWNrZ3JvdW5kOmluaGVyaXR9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4OjE7ZmxleC1kaXJlY3Rpb246cm93O292ZXJmbG93OmhpZGRlbn0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTttYXJnaW4tcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLFtkaXI9cnRsXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1ncm93OjJ9Lm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4IDJweCAwO2NvbnRlbnQ6Jyc7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzozcHg7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dmVydGljYWwtYWxpZ246bWlkZGxlfSJdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJpbmRpY2F0b3JSb3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InJvdGF0ZSgwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InJvdGF0ZSgxODBkZWcpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319LHt0eXBlOjcsbmFtZToiZXhwYW5zaW9uSGVpZ2h0IixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiJ7e2NvbGxhcHNlZEhlaWdodH19In0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6e3BhcmFtczp7Y29sbGFwc2VkSGVpZ2h0OiI0OHB4In19fSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoie3tleHBhbmRlZEhlaWdodH19In0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6e3BhcmFtczp7ZXhwYW5kZWRIZWlnaHQ6IjY0cHgifX19LHt0eXBlOjEsZXhwcjoiZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCIsYW5pbWF0aW9uOnt0eXBlOjMsc3RlcHM6W3t0eXBlOjExLHNlbGVjdG9yOiJAaW5kaWNhdG9yUm90YXRlIixhbmltYXRpb246e3R5cGU6OSxvcHRpb25zOm51bGx9LG9wdGlvbnM6e29wdGlvbmFsOiEwfX0se3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifV0sb3B0aW9uczpudWxsfSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gRHAodCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwwLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24taW5kaWNhdG9yIl1dLFtbMjQsIkBpbmRpY2F0b3JSb3RhdGUiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9nZXRFeHBhbmRlZFN0YXRlKCkpfSl9ZnVuY3Rpb24gRnAodCl7cmV0dXJuIG8ua2IoMixbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwzLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uWmEobnVsbCwwKSxvLlphKG51bGwsMSksby5aYShudWxsLDIpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsRHApKSxvLlBhKDUsMTYzODQsbnVsbCwwLHMuayxbby5QLG8uTV0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxlLmNvbXBvbmVudC5fc2hvd1RvZ2dsZSgpKX0sbnVsbCl9dmFyIExwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksVnA9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBCcCh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDM1LCJkaXYiLFtbImlkIiwiZ2NvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiU2l0ZSBtYXBzIl0pKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDMyLCJtYXQtYWNjb3JkaW9uIixbWyJjbGFzcyIsIm1hdC1hY2NvcmRpb24iXSxbIm11bHRpIiwidHJ1ZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsMTYzODQsbnVsbCwwLEVwLFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKHQoKSgpLG8uUWEoNSwxNjc3NzIxNixudWxsLG51bGwsMTQsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxOcCxJcCkpLG8uUGEoNiwxNzUzMDg4LG51bGwsMSxTcCxbWzMsRXBdLG8uaCxqcCxvLlBdLG51bGwsbnVsbCksby5nYigzMzU1NDQzMjAsMSx7X2xhenlDb250ZW50OjB9KSxvLmZiKDI1NixudWxsLEVwLHZvaWQgMCxbXSksKHQoKSgpLG8uUWEoOSwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDEwKS5fdG9nZ2xlKCkmJnIpLCJrZXlkb3duIj09PWUmJihyPSExIT09by5hYih0LDEwKS5fa2V5ZG93bihuKSYmcikscn0sRnAsUnApKSxvLlBhKDEwLDE4MDIyNCxudWxsLDAsa3AsW1NwLG8uayxlbixvLmhdLG51bGwsbnVsbCksby5kYigxMSx7Y29sbGFwc2VkSGVpZ2h0OjAsZXhwYW5kZWRIZWlnaHQ6MX0pLG8uZGIoMTIse3ZhbHVlOjAscGFyYW1zOjF9KSwodCgpKCksby5RYSgxMywwLG51bGwsMCwyLCJtYXQtcGFuZWwtdGl0bGUiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxNCwxNjM4NCxudWxsLDAsUHAsW10sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSxudWxsLFsiIFByb2plY3QgZGVzaWduICJdKSksKHQoKSgpLG8uUWEoMTYsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTcsMTYzODQsbnVsbCwwLFRwLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBUaGVvcmV0aWNhbCB1bmRlcnBpbm5pbmcgb2Ygb3VyIHByb2plY3QgIl0pKSwodCgpKCksby5pYigtMSwxLFsiIEFBQUFBQUFBQUFBYSAiXSkpLCh0KCkoKSxvLlFhKDIwLDE2Nzc3MjE2LG51bGwsbnVsbCwxNSwibWF0LWV4cGFuc2lvbi1wYW5lbCIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsIl1dLFtbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbMiwibWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nIixudWxsXV0sbnVsbCxudWxsLE5wLElwKSksby5QYSgyMSwxNzUzMDg4LG51bGwsMSxTcCxbWzMsRXBdLG8uaCxqcCxvLlBdLG51bGwsbnVsbCksby5nYigzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSxvLmZiKDI1NixudWxsLEVwLHZvaWQgMCxbXSksKHQoKSgpLG8uUWEoMjQsMCxudWxsLDAsOSwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiXSxbInJvbGUiLCJidXR0b24iXV0sW1sxLCJpZCIsMF0sWzEsInRhYmluZGV4IiwwXSxbMSwiYXJpYS1jb250cm9scyIsMF0sWzEsImFyaWEtZXhwYW5kZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbNDAsIkBleHBhbnNpb25IZWlnaHQiLDBdXSxbW251bGwsImNsaWNrIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PW8uYWIodCwyNSkuX3RvZ2dsZSgpJiZyKSwia2V5ZG93biI9PT1lJiYocj0hMSE9PW8uYWIodCwyNSkuX2tleWRvd24obikmJnIpLHJ9LEZwLFJwKSksby5QYSgyNSwxODAyMjQsbnVsbCwwLGtwLFtTcCxvLmssZW4sby5oXSxudWxsLG51bGwpLG8uZGIoMjYse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxvLmRiKDI3LHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLG8uUWEoMjgsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMjksMTYzODQsbnVsbCwwLFBwLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBNYXRlcmlhbCBhbmQgbWV0aG9kICJdKSksKHQoKSgpLG8uUWEoMzEsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMzIsMTYzODQsbnVsbCwwLFRwLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBPdXIgZXhwZXJpbWVudGFsIGRlc2lnbnMgJiByZXN1bHRzICJdKSksKHQoKSgpLG8uUWEoMzQsMCxudWxsLDEsMSwicCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIkknbSB2aXNpYmxlIGJlY2F1c2UgSSBhbSBvcGVuIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsNCwwLCJ0cnVlIil9LGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxvLmFiKGUsNikuZXhwYW5kZWQsby5hYihlLDYpLl9oYXNTcGFjaW5nKCkpLHQoZSw5LDAsby5hYihlLDEwKS5wYW5lbC5faGVhZGVySWQsby5hYihlLDEwKS5wYW5lbC5kaXNhYmxlZD8tMTowLG8uYWIoZSwxMCkuX2dldFBhbmVsSWQoKSxvLmFiKGUsMTApLl9pc0V4cGFuZGVkKCksby5hYihlLDEwKS5wYW5lbC5kaXNhYmxlZCxvLmFiKGUsMTApLl9pc0V4cGFuZGVkKCksdChlLDEyLDAsby5hYihlLDEwKS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLHQoZSwxMSwwLG8uYWIoZSwxMCkuY29sbGFwc2VkSGVpZ2h0LG8uYWIoZSwxMCkuZXhwYW5kZWRIZWlnaHQpKSksdChlLDIwLDAsby5hYihlLDIxKS5leHBhbmRlZCxvLmFiKGUsMjEpLl9oYXNTcGFjaW5nKCkpLHQoZSwyNCwwLG8uYWIoZSwyNSkucGFuZWwuX2hlYWRlcklkLG8uYWIoZSwyNSkucGFuZWwuZGlzYWJsZWQ/LTE6MCxvLmFiKGUsMjUpLl9nZXRQYW5lbElkKCksby5hYihlLDI1KS5faXNFeHBhbmRlZCgpLG8uYWIoZSwyNSkucGFuZWwuZGlzYWJsZWQsby5hYihlLDI1KS5faXNFeHBhbmRlZCgpLHQoZSwyNywwLG8uYWIoZSwyNSkuX2dldEV4cGFuZGVkU3RhdGUoKSx0KGUsMjYsMCxvLmFiKGUsMjUpLmNvbGxhcHNlZEhlaWdodCxvLmFiKGUsMjUpLmV4cGFuZGVkSGVpZ2h0KSkpfSl9dmFyIHpwPW8uTWEoImFwcC1zaXRlbWFwIixMcCxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1zaXRlbWFwIixbXSxudWxsLG51bGwsbnVsbCxCcCxWcCkpLG8uUGEoMSwxMTQ2ODgsbnVsbCwwLExwLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksVXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Nhbml0aXplcj10fXJldHVybiB0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0KX0sdH0oKSxIcD1uKCIyNkZVIiksUXA9bmV3IG8ucCgiRmxleCBMYXlvdXQgdG9rZW4sIGNvbGxlY3QgYWxsIGJyZWFrcG9pbnRzIGludG8gb25lIHByb3ZpZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLHFwPVt7YWxpYXM6InhzIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6Imd0LXhzIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkifSx7YWxpYXM6Imx0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6InNtIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoiZ3Qtc20iLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSJ9LHthbGlhczoibHQtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoibWQiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoiZ3QtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkifSx7YWxpYXM6Imx0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxMjc5cHgpIn0se2FsaWFzOiJsZyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSJ9LHthbGlhczoiZ3QtbGciLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkifSx7YWxpYXM6Imx0LXhsIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJ4bCIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTkyMHB4KSBhbmQgKG1heC13aWR0aDogNTAwMHB4KSJ9XSxHcD0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLFlwPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkiLFdwPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODQwcHgpIixacD0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIixLcD17SEFORFNFVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSwgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLFRBQkxFVDpZcCsiICwgIitHcCxXRUI6V3ArIiwgIitacCsiICIsSEFORFNFVF9QT1JUUkFJVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSIsVEFCTEVUX1BPUlRSQUlUOllwKyIgIixXRUJfUE9SVFJBSVQ6IiIrV3AsSEFORFNFVF9MQU5EU0NBUEU6IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogOTU5cHgpXSIsVEFCTEVUX0xBTkRTQ0FQRToiIitHcCxXRUJfTEFORFNDQVBFOiIiK1pwfSxYcD1be2FsaWFzOiJoYW5kc2V0IixtZWRpYVF1ZXJ5OktwLkhBTkRTRVR9LHthbGlhczoiaGFuZHNldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6S3AuSEFORFNFVF9MQU5EU0NBUEV9LHthbGlhczoiaGFuZHNldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTpLcC5IQU5EU0VUX1BPUlRSQUlUfSx7YWxpYXM6InRhYmxldCIsbWVkaWFRdWVyeTpLcC5UQUJMRVR9LHthbGlhczoidGFibGV0LmxhbmRzY2FwZSIsbWVkaWFRdWVyeTpLcC5UQUJMRVR9LHthbGlhczoidGFibGV0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OktwLlRBQkxFVF9QT1JUUkFJVH0se2FsaWFzOiJ3ZWIiLG1lZGlhUXVlcnk6S3AuV0VCLG92ZXJsYXBwaW5nOiEwfSx7YWxpYXM6IndlYi5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6S3AuV0VCX0xBTkRTQ0FQRSxvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIucG9ydHJhaXQiLG1lZGlhUXVlcnk6S3AuV0VCX1BPUlRSQUlULG92ZXJsYXBwaW5nOiEwfV07ZnVuY3Rpb24gJHAodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO2Zvcih2YXIgcj0wLGk9ZTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXTtpZihudWxsIT1vKWZvcih2YXIgYSBpbiBvKW8uaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPW9bYV0pfXJldHVybiB0fXZhciBKcD0vKFwufC18XykvZztmdW5jdGlvbiB0ZCh0KXt2YXIgZT10Lmxlbmd0aD4wP3QuY2hhckF0KDApOiIiLG49dC5sZW5ndGg+MT90LnNsaWNlKDEpOiIiO3JldHVybiBlLnRvVXBwZXJDYXNlKCkrbn12YXIgZWQ9e2FkZEZsZXhUb1BhcmVudDohMCxhZGRPcmllbnRhdGlvbkJwczohMSxkaXNhYmxlRGVmYXVsdEJwczohMSxkaXNhYmxlVmVuZG9yUHJlZml4ZXM6ITEsc2VydmVyTG9hZGVkOiExLHVzZUNvbHVtbkJhc2lzWmVybzohMH0sbmQ9bmV3IG8ucCgiRmxleCBMYXlvdXQgdG9rZW4sIGNvbmZpZyBvcHRpb25zIGZvciB0aGUgbGlicmFyeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZWR9fSkscmQ9bmV3IG8ucCgiVG9rZW4gKEBhbmd1bGFyL2ZsZXgtbGF5b3V0KSBCcmVha3BvaW50cyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Qoby5YKShRcCksZT1PYmplY3Qoby5YKShuZCksbj1bXS5jb25jYXQuYXBwbHkoW10sKHR8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19KSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBuLHI9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtyW3QuYWxpYXNdPXR9KSxlLmZvckVhY2goZnVuY3Rpb24odCl7clt0LmFsaWFzXT8kcChyW3QuYWxpYXNdLHQpOnJbdC5hbGlhc109dH0pLChuPU9iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gclt0XX0pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc3VmZml4fHwodC5zdWZmaXg9dC5hbGlhcy5yZXBsYWNlKEpwLCJ8Iikuc3BsaXQoInwiKS5tYXAodGQpLmpvaW4oIiIpLHQub3ZlcmxhcHBpbmc9ISF0Lm92ZXJsYXBwaW5nKX0pLG59KChlLmRpc2FibGVEZWZhdWx0QnBzP1tdOnFwKS5jb25jYXQoZS5hZGRPcmllbnRhdGlvbkJwcz9YcDpbXSksbil9fSksaWQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZ2lzdHJ5PXR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuc2xpY2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNvcnRlZEl0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dC5vdmVybGFwcGluZ30pLGU9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwIT09dC5vdmVybGFwcGluZ30pO3JldHVybiB0LmNvbmNhdChlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5maW5kQnlBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5hbGlhcz09dH0pfHxudWxsfSx0LnByb3RvdHlwZS5maW5kQnlRdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5tZWRpYVF1ZXJ5PT10fSl8fG51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3ZlcmxhcHBpbmdzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09dC5vdmVybGFwcGluZ30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWxpYXNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpYXN9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN1ZmZpeGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWZmaXg/dC5zdWZmaXg6IiJ9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShyZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxvZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dm9pZCAwPT09dCYmKHQ9ITEpLHZvaWQgMD09PWUmJihlPSJhbGwiKSx2b2lkIDA9PT1uJiYobj0iIiksdm9pZCAwPT09ciYmKHI9IiIpLHRoaXMubWF0Y2hlcz10LHRoaXMubWVkaWFRdWVyeT1lLHRoaXMubXFBbGlhcz1uLHRoaXMuc3VmZml4PXJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMubWF0Y2hlcyx0aGlzLm1lZGlhUXVlcnksdGhpcy5tcUFsaWFzLHRoaXMuc3VmZml4KX0sdH0oKSxhZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3pvbmU9dCx0aGlzLl9wbGF0Zm9ybUlkPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9yZWdpc3RyeT1uZXcgTWFwLHRoaXMuX3NvdXJjZT1uZXcgSHAuYShuZXcgb2QoITApKSx0aGlzLl9vYnNlcnZhYmxlJD10aGlzLl9zb3VyY2UuYXNPYnNlcnZhYmxlKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlZ2lzdHJ5LmdldCh0KTtyZXR1cm4hIWUmJmUubWF0Y2hlc30sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZWdpc3RlclF1ZXJ5KHQpLHRoaXMuX29ic2VydmFibGUkLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKGUpe3JldHVybiF0fHxlLm1lZGlhUXVlcnk9PT10fSkpfSx0LnByb3RvdHlwZS5yZWdpc3RlclF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9bXToic3RyaW5nIj09dHlwZW9mIHQ/W3RdOihlPXt9LHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc093blByb3BlcnR5KHQpJiYoZVt0XT0hMCl9KSk7dmFyIGV9KHQpO24ubGVuZ3RoPjAmJih0aGlzLl9wcmVwYXJlUXVlcnlDU1Mobix0aGlzLl9kb2N1bWVudCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuX3JlZ2lzdHJ5LmdldCh0KSxyPWZ1bmN0aW9uKG4pe2UuX3pvbmUucnVuKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IG9kKG4ubWF0Y2hlcyx0KTtlLl9zb3VyY2UubmV4dChyKX0pfTtufHwoKG49ZS5fYnVpbGRNUUwodCkpLmFkZExpc3RlbmVyKHIpLGUuX3JlZ2lzdHJ5LnNldCh0LG4pKSxuLm1hdGNoZXMmJnIobil9KSl9LHQucHJvdG90eXBlLl9idWlsZE1RTD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHMucSkodGhpcy5fcGxhdGZvcm1JZCkmJndpbmRvdy5tYXRjaE1lZGlhKCJhbGwiKS5hZGRMaXN0ZW5lcj93aW5kb3cubWF0Y2hNZWRpYSh0KTp7bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe319fSx0LnByb3RvdHlwZS5fcHJlcGFyZVF1ZXJ5Q1NTPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXNkW3RdfSk7aWYobi5sZW5ndGg+MCl7dmFyIHI9bi5qb2luKCIsICIpO3RyeXt2YXIgaT1lLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGkuc3R5bGVTaGVldHx8aS5hcHBlbmRDaGlsZChlLmNyZWF0ZVRleHROb2RlKCJcbi8qXG4gIEBhbmd1bGFyL2ZsZXgtbGF5b3V0IC0gd29ya2Fyb3VuZCBmb3IgcG9zc2libGUgYnJvd3NlciBxdWlyayB3aXRoIG1lZGlhUXVlcnkgbGlzdGVuZXJzXG4gIHNlZSBodHRwOi8vYml0Lmx5LzJzZDRITVBcbiovXG5AbWVkaWEgIityKyIgey5meC1xdWVyeS10ZXN0eyB9fVxuIikpLGUuaGVhZC5hcHBlbmRDaGlsZChpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHNkW3RdPWl9KX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX19LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKG8ueSksT2JqZWN0KG8uWCkoby5BKSxPYmplY3Qoby5YKShzLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksc2Q9e307ZnVuY3Rpb24gbGQodCxlKXtyZXR1cm4gJHAodCxlP3ttcUFsaWFzOmUuYWxpYXMsc3VmZml4OmUuc3VmZml4fTp7fSl9dmFyIHVkPWZ1bmN0aW9uKCl7fSxjZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmJyZWFrcG9pbnRzPXQsdGhpcy5tZWRpYVdhdGNoZXI9ZSx0aGlzLmZpbHRlck92ZXJsYXBzPSEwLHRoaXMuX3JlZ2lzdGVyQnJlYWtQb2ludHMoKSx0aGlzLm9ic2VydmFibGUkPXRoaXMuX2J1aWxkT2JzZXJ2YWJsZSgpfXJldHVybiB0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90b01lZGlhUXVlcnkodCk7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLmlzQWN0aXZlKGUpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLm9ic2VydmFibGUkLnN1YnNjcmliZSh0LGUsbil9LHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9ic2VydmFibGUkfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha1BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLm1lZGlhV2F0Y2hlci5yZWdpc3RlclF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fYnVpbGRPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXM7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLm9ic2VydmUoKS5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQubWF0Y2hlc30pLE9iamVjdChidC5hKShmdW5jdGlvbihuKXt2YXIgcj10LmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KG4ubWVkaWFRdWVyeSk7cmV0dXJuIXJ8fCEoZS5maWx0ZXJPdmVybGFwcyYmci5vdmVybGFwcGluZyl9KSxPYmplY3QoUy5hKShmdW5jdGlvbihlKXtyZXR1cm4gbGQoZSx0Ll9maW5kQnlRdWVyeShlLm1lZGlhUXVlcnkpKX0pKX0sdC5wcm90b3R5cGUuX2ZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHQpfSx0LnByb3RvdHlwZS5fZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCl9LHQucHJvdG90eXBlLl90b01lZGlhUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmluZEJ5QWxpYXModCl8fHRoaXMuX2ZpbmRCeVF1ZXJ5KHQpO3JldHVybiBlP2UubWVkaWFRdWVyeTp0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShpZCksT2JqZWN0KG8uWCkoYWQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksZmQ9ZnVuY3Rpb24oKXt9LGhkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc3R5bGVzaGVldD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5zdHlsZXNoZWV0LmdldCh0KTtyP3Iuc2V0KGUsbik6dGhpcy5zdHlsZXNoZWV0LnNldCh0LG5ldyBNYXAoW1tlLG5dXSkpfSx0LnByb3RvdHlwZS5jbGVhclN0eWxlcz1mdW5jdGlvbigpe3RoaXMuc3R5bGVzaGVldC5jbGVhcigpfSx0LnByb3RvdHlwZS5nZXRTdHlsZUZvckVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLnN0eWxlc2hlZXQuZ2V0KHQpLHI9IiI7aWYobil7dmFyIGk9bi5nZXQoZSk7Im51bWJlciIhPXR5cGVvZiBpJiYic3RyaW5nIiE9dHlwZW9mIGl8fChyPWkrIiIpfXJldHVybiByfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkscGQ9bmV3IG8ucCgiRmxleExheW91dFNlcnZlckxvYWRlZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxkZD1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXSxtZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9tZWRpYU1vbml0b3I9ZSx0aGlzLl9vbk1lZGlhQ2hhbmdlcz1uLHRoaXMuX3N1YnNjcmliZXJzPVtdLHRoaXMuX3JlZ2lzdHJ5TWFwPXRoaXMuX2J1aWxkUmVnaXN0cnlNYXAoKSx0aGlzLl9zdWJzY3JpYmVycz10aGlzLl9jb25maWd1cmVDaGFuZ2VPYnNlcnZlcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWdpc3RyeUZyb21MYXJnZXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5TWFwLnNsaWNlKCkucmV2ZXJzZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibWVkaWFNb25pdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhTW9uaXRvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0S2V5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5fHx0aGlzLl9vcHRpb25zLmJhc2VLZXl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRJbnB1dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuaGFzS2V5VmFsdWUodCk/dGhpcy5fbG9va3VwS2V5VmFsdWUodCk6dGhpcy5fb3B0aW9ucy5kZWZhdWx0VmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9KSx0aGlzLl9zdWJzY3JpYmVycz1bXX0sdC5wcm90b3R5cGUuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9rZXlJblVzZShuLmtleSkmJmUucHVzaCh0Lm1lZGlhTW9uaXRvci5vYnNlcnZlKG4uYWxpYXMpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuKGU9ZS5jbG9uZSgpKS5wcm9wZXJ0eT10Ll9vcHRpb25zLmJhc2VLZXksZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5fb25Nb25pdG9yRXZlbnRzKGUpfSkpfSksZX0sdC5wcm90b3R5cGUuX2J1aWxkUmVnaXN0cnlNYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLm1lZGlhTW9uaXRvci5icmVha3BvaW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuICRwKHt9LGUse2Jhc2VLZXk6dC5fb3B0aW9ucy5iYXNlS2V5LGtleTp0Ll9vcHRpb25zLmJhc2VLZXkrZS5zdWZmaXh9KX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5fa2V5SW5Vc2UoZS5rZXkpfSl9LHQucHJvdG90eXBlLl9vbk1vbml0b3JFdmVudHM9ZnVuY3Rpb24odCl7dC5wcm9wZXJ0eT09dGhpcy5fb3B0aW9ucy5iYXNlS2V5JiYodC52YWx1ZT10aGlzLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZSh0KSx0aGlzLl9vbk1lZGlhQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9rZXlJblVzZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbG9va3VwS2V5VmFsdWUodCl9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9vcHRpb25zLmJhc2VLZXkrdC5zdWZmaXgsbj10aGlzLl9hY3RpdmF0ZWRJbnB1dEtleTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkSW5wdXRLZXk9dGhpcy5fdmFsaWRhdGVJbnB1dEtleShuPXQubWF0Y2hlcz9lOm49PWU/IiI6biksdGhpcy5hY3RpdmF0ZWRJbnB1dH0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQpe3JldHVybiFlLl9rZXlJblVzZSh0KX07cmV0dXJuIG4odCkmJnRoaXMubWVkaWFNb25pdG9yLmFjdGl2ZU92ZXJsYXBzLnNvbWUoZnVuY3Rpb24ocil7dmFyIGk9ZS5fb3B0aW9ucy5iYXNlS2V5K3Iuc3VmZml4O3JldHVybiFuKGkpJiYodD1pLCEwKX0pLHR9LHQucHJvdG90eXBlLl9sb29rdXBLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5pbnB1dEtleXNbdF19LHR9KCkseWQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9tZWRpYU1vbml0b3I9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fc3R5bGVyPW4sdGhpcy5faW5wdXRNYXA9e30sdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzTWVkaWFRdWVyeUxpc3RlbmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tcUFjdGl2YXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb24/dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0OnZvaWQgMH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlLG49ImJhc2VLZXkiO3RoaXMuX21xQWN0aXZhdGlvbiYmKGU9dGhpcy5faW5wdXRNYXBbbj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXRLZXldLHRoaXMuX2lucHV0TWFwW25dPXQpO3ZhciByLGk9bmV3IG8uSShlLHQsITEpO3RoaXMubmdPbkNoYW5nZXMoKChyPXt9KVtuXT1pLHIpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuYXRpdmVFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcXVlcnlJbnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5wdXRNYXBbdF19LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fZGlzcGxheT10aGlzLl9nZXREaXNwbGF5U3R5bGUoKSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMH0sdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJCYXNlRGlyZWN0aXZlOjpuZ09uQ2hhbmdlcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzczogIit0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9tcUFjdGl2YXRpb24mJnRoaXMuX21xQWN0aXZhdGlvbi5kZXN0cm95KCksZGVsZXRlIHRoaXMuX21lZGlhTW9uaXRvcn0sdC5wcm90b3R5cGUuX2dldERlZmF1bHRWYWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9xdWVyeUlucHV0KHQpO3JldHVybiB2b2lkIDAhPT1uJiZudWxsIT09biYmIiIhPT1uP246ZX0sdC5wcm90b3R5cGUuX2dldERpc3BsYXlTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwU3R5bGUodCwiZGlzcGxheSIpfSx0LnByb3RvdHlwZS5fZ2V0QXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwQXR0cmlidXRlVmFsdWUoZSx0KX0sdC5wcm90b3R5cGUuX2dldEZsZXhGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBuLHI9InJvdyI7aWYodCYmKHI9KG49dGhpcy5fc3R5bGVyLmdldEZsb3dEaXJlY3Rpb24odCkpWzBdLCFuWzFdJiZlKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGUsbixyPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiBkZC5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09bn0pfHwobj1kZFswXSksImlubGluZSI9PT1yJiYocj0iaW5saW5lIiE9PWk/aToiIixpPSJpbmxpbmUiKSxbbixmdW5jdGlvbih0KXtpZih0KXN3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2UicmV2ZXJzZSI6Y2FzZSJ3cmFwLXJldmVyc2UiOmNhc2UicmV2ZXJzZS13cmFwIjp0PSJ3cmFwLXJldmVyc2UiO2JyZWFrO2Nhc2Uibm8iOmNhc2Uibm9uZSI6Y2FzZSJub3dyYXAiOnQ9Im5vd3JhcCI7YnJlYWs7ZGVmYXVsdDp0PSJ3cmFwIn1yZXR1cm4gdH0ociksISFpXX0odCk7cmV0dXJuIG49clsyXSx2b2lkIDA9PT0oZT1yWzFdKSYmKGU9bnVsbCksdm9pZCAwPT09biYmKG49ITEpLHtkaXNwbGF5Om4/ImlubGluZS1mbGV4IjoiZmxleCIsImJveC1zaXppbmciOiJib3JkZXItYm94IiwiZmxleC1kaXJlY3Rpb24iOnJbMF0sImZsZXgtd3JhcCI6ZXx8bnVsbH19KHIpO3RoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50cyhpLFt0XSl9cmV0dXJuIHIudHJpbSgpfHwicm93In0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnQobix0LGUpfSx0LnByb3RvdHlwZS5fYXBwbHlTdHlsZVRvRWxlbWVudHM9ZnVuY3Rpb24odCxlKXt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHModCxlKX0sdC5wcm90b3R5cGUuX2NhY2hlSW5wdXQ9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpZm9yKHZhciBuIGluIGUpdGhpcy5faW5wdXRNYXBbbl09ZVtuXTtlbHNlIHQmJih0aGlzLl9pbnB1dE1hcFt0XT1lKX0sdC5wcm90b3R5cGUuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fbXFBY3RpdmF0aW9uKXt2YXIgcj1uZXcgZnVuY3Rpb24odCxlLG4pe3RoaXMuYmFzZUtleT10LHRoaXMuZGVmYXVsdFZhbHVlPWUsdGhpcy5pbnB1dEtleXM9bn0odCxlLHRoaXMuX2lucHV0TWFwKTt0aGlzLl9tcUFjdGl2YXRpb249bmV3IG1kKHIsdGhpcy5fbWVkaWFNb25pdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSl9cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbk5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbixlPVtdLG49dC5sZW5ndGg7bi0tOyllW25dPXRbbl07cmV0dXJuIGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQST1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5faW5wdXRNYXApLmxlbmd0aC0odGhpcy5faW5wdXRNYXBbdF0/MTowKT4wfSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9uLmhhc0tleVZhbHVlKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0luaXRpYWxpemVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0luaXRpYWxpemVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksZ2Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fYnJlYWtwb2ludHM9dCx0aGlzLl9tYXRjaE1lZGlhPWUsdGhpcy5fcmVnaXN0ZXJCcmVha3BvaW50cygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImJyZWFrcG9pbnRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLml0ZW1zLnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVPdmVybGFwcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLm92ZXJsYXBwaW5ncy5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXRjaE1lZGlhLmlzQWN0aXZlKGUubWVkaWFRdWVyeSl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZSIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1udWxsO3RoaXMuYnJlYWtwb2ludHMucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obil7IiIhPT1uLmFsaWFzJiYhZSYmdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpJiYoZT1uKX0pO3ZhciBuPXRoaXMuYnJlYWtwb2ludHNbMF07cmV0dXJuIGV8fCh0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKG4ubWVkaWFRdWVyeSk/bjpudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCk7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEuaXNBY3RpdmUoZT9lLm1lZGlhUXVlcnk6dCl9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModHx8IiIpfHx0aGlzLl9icmVha3BvaW50cy5maW5kQnlRdWVyeSh0fHwiIik7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEub2JzZXJ2ZShlP2UubWVkaWFRdWVyeTp0KS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBsZCh0LGUpfSksT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiFlfHwiIiE9PXQubXFBbGlhc30pKX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyQnJlYWtwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9icmVha3BvaW50cy5zb3J0ZWRJdGVtcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWVkaWFRdWVyeX0pO3RoaXMuX21hdGNoTWVkaWEucmVnaXN0ZXJRdWVyeSh0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoaWQpLE9iamVjdChvLlgpKGFkKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIHZkKHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbj10W2VdfHwiIjtzd2l0Y2goZSl7Y2FzZSJkaXNwbGF5Ijp0LmRpc3BsYXk9ImZsZXgiPT09bj9bIi13ZWJraXQtZmxleCIsImZsZXgiXToiaW5saW5lLWZsZXgiPT09bj9bIi13ZWJraXQtaW5saW5lLWZsZXgiLCJpbmxpbmUtZmxleCJdOm47YnJlYWs7Y2FzZSJhbGlnbi1pdGVtcyI6Y2FzZSJhbGlnbi1zZWxmIjpjYXNlImFsaWduLWNvbnRlbnQiOmNhc2UiZmxleCI6Y2FzZSJmbGV4LWJhc2lzIjpjYXNlImZsZXgtZmxvdyI6Y2FzZSJmbGV4LWdyb3ciOmNhc2UiZmxleC1zaHJpbmsiOmNhc2UiZmxleC13cmFwIjpjYXNlImp1c3RpZnktY29udGVudCI6dFsiLXdlYmtpdC0iK2VdPW47YnJlYWs7Y2FzZSJmbGV4LWRpcmVjdGlvbiI6dFsiLXdlYmtpdC1mbGV4LWRpcmVjdGlvbiJdPW49bnx8InJvdyIsdFsiZmxleC1kaXJlY3Rpb24iXT1uO2JyZWFrO2Nhc2Uib3JkZXIiOnQub3JkZXI9dFsiLXdlYmtpdC0iK2VdPWlzTmFOKG4pPyIwIjpufX1yZXR1cm4gdH12YXIgYmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3NlcnZlclN0eWxlc2hlZXQ9dCx0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ9ZSx0aGlzLl9wbGF0Zm9ybUlkPW4sdGhpcy5sYXlvdXRDb25maWc9cn1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHlTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9e307InN0cmluZyI9PXR5cGVvZiBlJiYocltlXT1uLGU9cikscj10aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXM/ZTp2ZChlKSx0aGlzLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChyLHQpfSx0LnByb3RvdHlwZS5hcHBseVN0eWxlVG9FbGVtZW50cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciByPXRoaXMubGF5b3V0Q29uZmlnLmRpc2FibGVWZW5kb3JQcmVmaXhlcz90OnZkKHQpO2UuZm9yRWFjaChmdW5jdGlvbih0KXtuLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChyLHQpfSl9LHQucHJvdG90eXBlLmdldEZsb3dEaXJlY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb29rdXBTdHlsZSh0LCJmbGV4LWRpcmVjdGlvbiIpO2U9PT1fZCYmKGU9IiIpO3ZhciBuPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKXx8T2JqZWN0KHMucikodGhpcy5fcGxhdGZvcm1JZCkmJnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD9lOiIiO3JldHVybltlfHwicm93IixuXX0sdC5wcm90b3R5cGUubG9va3VwQXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl8fCIifSx0LnByb3RvdHlwZS5sb29rdXBJbmxpbmVTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3Qocy5xKSh0aGlzLl9wbGF0Zm9ybUlkKT90LnN0eWxlW2VdOnRoaXMuX2dldFNlcnZlclN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmxvb2t1cFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9IiI7cmV0dXJuIHQmJigocj10aGlzLmxvb2t1cElubGluZVN0eWxlKHQsZSkpfHwoT2JqZWN0KHMucSkodGhpcy5fcGxhdGZvcm1JZCk/bnx8KHI9Z2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTp0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQmJihyPXRoaXMuX3NlcnZlclN0eWxlc2hlZXQuZ2V0U3R5bGVGb3JFbGVtZW50KHQsZSkpKSkscj9yLnRyaW0oKTpfZH0sdC5wcm90b3R5cGUuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztPYmplY3Qua2V5cyh0KS5zb3J0KCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1BcnJheS5pc0FycmF5KHRbcl0pP3Rbcl06W3Rbcl1dO2kuc29ydCgpO2Zvcih2YXIgbz0wLGE9aTtvPGEubGVuZ3RoO28rKyl7dmFyIGw9YVtvXTtPYmplY3Qocy5xKShuLl9wbGF0Zm9ybUlkKXx8IW4uX3NlcnZlck1vZHVsZUxvYWRlZD9PYmplY3Qocy5xKShuLl9wbGF0Zm9ybUlkKT9lLnN0eWxlLnNldFByb3BlcnR5KHIsbCk6bi5fc2V0U2VydmVyU3R5bGUoZSxyLGwpOm4uX3NlcnZlclN0eWxlc2hlZXQuYWRkU3R5bGVUb0VsZW1lbnQoZSxyLGwpfX0pfSx0LnByb3RvdHlwZS5fc2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlLG4pe2U9ZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIHI9dGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpO3JbZV09bnx8IiIsdGhpcy5fd3JpdGVTdHlsZUF0dHJpYnV0ZSh0LHIpfSx0LnByb3RvdHlwZS5fZ2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpW2VdfHwiIn0sdC5wcm90b3R5cGUuX3JlYWRTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2lmKG4pZm9yKHZhciByPW4uc3BsaXQoLzsrL2cpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXS50cmltKCk7aWYoby5sZW5ndGg+MCl7dmFyIGE9by5pbmRleE9mKCI6Iik7aWYoLTE9PT1hKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBDU1Mgc3R5bGU6ICIrbyk7ZVtvLnN1YnN0cigwLGEpLnRyaW0oKV09by5zdWJzdHIoYSsxKS50cmltKCl9fXJldHVybiBlfSx0LnByb3RvdHlwZS5fd3JpdGVTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSIiO2Zvcih2YXIgciBpbiBlKWVbcl0mJihuKz1yKyI6IitlW3JdKyI7Iik7dC5zZXRBdHRyaWJ1dGUoInN0eWxlIixuKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoaGQsOCksT2JqZWN0KG8uWCkocGQsOCksT2JqZWN0KG8uWCkoby5BKSxPYmplY3Qoby5YKShuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxfZD0iYmxvY2siO2Z1bmN0aW9uIHdkKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcc10vZywiIikucmVwbGFjZSgvW1wvXCpcK1wtXS9nLCIgJCYgIil9dmFyIHhkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1lLHIud29yaz1uLHJ9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLG4+MD90LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsZSxuKToodGhpcy5kZWxheT1uLHRoaXMuc3RhdGU9ZSx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlLG4pe3JldHVybiBuPjB8fHRoaXMuY2xvc2VkP3QucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLGUsbik6dGhpcy5fZXhlY3V0ZShlLG4pfSxlLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZD1mdW5jdGlvbihlLG4scil7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLG51bGwhPT1yJiZyPjB8fG51bGw9PT1yJiZ0aGlzLmRlbGF5PjA/dC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLGUsbixyKTplLmZsdXNoKHRoaXMpfSxlfShzdCksQ2Q9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBkLmIoZSx0KSxlfSh1dCkpKHhkKTtmdW5jdGlvbiBFZCh0LGUpe3JldHVybiBuZXcgRS5hKGU/ZnVuY3Rpb24obil7cmV0dXJuIGUuc2NoZWR1bGUoT2QsMCx7ZXJyb3I6dCxzdWJzY3JpYmVyOm59KX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KX1mdW5jdGlvbiBPZCh0KXt0LnN1YnNjcmliZXIuZXJyb3IodC5lcnJvcil9dmFyIFNkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9bix0aGlzLmhhc1ZhbHVlPSJOIj09PXR9cmV0dXJuIHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdC5uZXh0JiZ0Lm5leHQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gdC5lcnJvciYmdC5lcnJvcih0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiB0LmNvbXBsZXRlJiZ0LmNvbXBsZXRlKCl9fSx0LnByb3RvdHlwZS5kbz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdCYmdCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBlJiZlKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIG4mJm4oKX19LHQucHJvdG90eXBlLmFjY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQ/dGhpcy5vYnNlcnZlKHQpOnRoaXMuZG8odCxlLG4pfSx0LnByb3RvdHlwZS50b09ic2VydmFibGU9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiBPYmplY3QoSS5hKSh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBFZCh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBPYmplY3Qoai5iKSgpfXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCB2YWx1ZSIpfSx0LmNyZWF0ZU5leHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/bmV3IHQoIk4iLGUpOnQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb259LHQuY3JlYXRlRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KCJFIix2b2lkIDAsZSl9LHQuY3JlYXRlQ29tcGxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jb21wbGV0ZU5vdGlmaWNhdGlvbn0sdC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgdCgiQyIpLHQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb249bmV3IHQoIk4iLHZvaWQgMCksdH0oKSxrZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1yJiYocj0wKTt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5zY2hlZHVsZXI9bixpLmRlbGF5PXIsaX1yZXR1cm4gZC5iKGUsdCksZS5kaXNwYXRjaD1mdW5jdGlvbih0KXt0Lm5vdGlmaWNhdGlvbi5vYnNlcnZlKHQuZGVzdGluYXRpb24pLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVNZXNzYWdlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGUuZGlzcGF0Y2gsdGhpcy5kZWxheSxuZXcgVGQodCx0aGlzLmRlc3RpbmF0aW9uKSkpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShTZC5jcmVhdGVOZXh0KHQpKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKFNkLmNyZWF0ZUVycm9yKHQpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoU2QuY3JlYXRlQ29tcGxldGUoKSl9LGV9KEhlLmEpLFRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3RpZmljYXRpb249dCx0aGlzLmRlc3RpbmF0aW9uPWV9LFBkPW4oIjhnOEEiKSxBZD1uKCJ1TWFPIiksamQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zY2hlZHVsZXI9cixpLl9ldmVudHM9W10saS5faW5maW5pdGVUaW1lV2luZG93PSExLGkuX2J1ZmZlclNpemU9ZTwxPzE6ZSxpLl93aW5kb3dUaW1lPW48MT8xOm4sbj09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8oaS5faW5maW5pdGVUaW1lV2luZG93PSEwLGkubmV4dD1pLm5leHRJbmZpbml0ZVRpbWVXaW5kb3cpOmkubmV4dD1pLm5leHRUaW1lV2luZG93LGl9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLm5leHRJbmZpbml0ZVRpbWVXaW5kb3c9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5fZXZlbnRzO24ucHVzaChlKSxuLmxlbmd0aD50aGlzLl9idWZmZXJTaXplJiZuLnNoaWZ0KCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLm5leHRUaW1lV2luZG93PWZ1bmN0aW9uKGUpe3RoaXMuX2V2ZW50cy5wdXNoKG5ldyBJZCh0aGlzLl9nZXROb3coKSxlKSksdGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSx0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuX2luZmluaXRlVGltZVdpbmRvdyxyPW4/dGhpcy5fZXZlbnRzOnRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksaT10aGlzLnNjaGVkdWxlcixvPXIubGVuZ3RoO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBQZC5hO2lmKHRoaXMuaXNTdG9wcGVkfHx0aGlzLmhhc0Vycm9yP2U9YXQuYS5FTVBUWToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxlPW5ldyBBZC5hKHRoaXMsdCkpLGkmJnQuYWRkKHQ9bmV3IGtkKHQsaSkpLG4pZm9yKHZhciBhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdKTtlbHNlIGZvcihhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksZX0sZS5wcm90b3R5cGUuX2dldE5vdz1mdW5jdGlvbigpe3JldHVybih0aGlzLnNjaGVkdWxlcnx8Q2QpLm5vdygpfSxlLnByb3RvdHlwZS5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ2V0Tm93KCksZT10aGlzLl9idWZmZXJTaXplLG49dGhpcy5fd2luZG93VGltZSxyPXRoaXMuX2V2ZW50cyxpPXIubGVuZ3RoLG89MDtvPGkmJiEodC1yW29dLnRpbWU8bik7KW8rKztyZXR1cm4gaT5lJiYobz1NYXRoLm1heChvLGktZSkpLG8+MCYmci5zcGxpY2UoMCxvKSxyfSxlfShDLmEpLElkPWZ1bmN0aW9uKHQsZSl7dGhpcy50aW1lPXQsdGhpcy52YWx1ZT1lfSxNZD0iaW5saW5lIixOZD1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXTtmdW5jdGlvbiBSZCh0KXt2YXIgZT0odD10P3QudG9Mb3dlckNhc2UoKToiIikuc3BsaXQoIiAiKSxuPWVbMF0scj1lWzFdLGk9ZVsyXTtyZXR1cm4gTmQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PW59KXx8KG49TmRbMF0pLHI9PT1NZCYmKHI9aSE9PU1kP2k6IiIsaT1NZCksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19ZnVuY3Rpb24gRGQodCl7cmV0dXJuIFJkKHQpWzBdLmluZGV4T2YoInJvdyIpPi0xfXZhciBGZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGkuX2Fubm91bmNlcj1uZXcgamQoMSksaS5sYXlvdXQkPWkuX2Fubm91bmNlci5hc09ic2VydmFibGUoKSxpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5sYXlvdXR8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImxheW91dCIsInJvdyIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlV2l0aERpcmVjdGlvbih0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7dD10fHx0aGlzLl9xdWVyeUlucHV0KCJsYXlvdXQiKXx8InJvdyIsdGhpcy5fbXFBY3RpdmF0aW9uJiYodD10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPVJkKHQpO3JldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPSExKSx7ZGlzcGxheTpyPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjplWzBdLCJmbGV4LXdyYXAiOm58fG51bGx9fSgwLGVbMV0sZVsyXSl9KHR8fCIiKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KGUpLHRoaXMuX2Fubm91bmNlci5uZXh0KHtkaXJlY3Rpb246ZVsiZmxleC1kaXJlY3Rpb24iXSx3cmFwOiEhZVsiZmxleC13cmFwIl0mJiJub3dyYXAiIT09ZVsiZmxleC13cmFwIl19KX0sZX0oeWQpLExkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEpe3ZhciBzPXQuY2FsbCh0aGlzLGUsbixhKXx8dGhpcztyZXR1cm4gcy5fem9uZT1pLHMuX2RpcmVjdGlvbmFsaXR5PW8scy5fbGF5b3V0PSJyb3ciLHImJihzLl9sYXlvdXRXYXRjaGVyPXIubGF5b3V0JC5zdWJzY3JpYmUocy5fb25MYXlvdXRDaGFuZ2UuYmluZChzKSkpLHMuX2RpcmVjdGlvbldhdGNoZXI9cy5fZGlyZWN0aW9uYWxpdHkuY2hhbmdlLnN1YnNjcmliZShzLl91cGRhdGVXaXRoVmFsdWUuYmluZChzKSksc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXAiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwU20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZ2FwfHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl93YXRjaENvbnRlbnRDaGFuZ2VzKCksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImdhcCIsIjAiLGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZVdpdGhWYWx1ZShlLnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpLHRoaXMuX29ic2VydmVyJiZ0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fZGlyZWN0aW9uV2F0Y2hlciYmdGhpcy5fZGlyZWN0aW9uV2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fd2F0Y2hDb250ZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgTXV0YXRpb25PYnNlcnZlciYmKHQuX29ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2Uuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRlZE5vZGVzJiZ0LmFkZGVkTm9kZXMubGVuZ3RoPjB8fHQucmVtb3ZlZE5vZGVzJiZ0LnJlbW92ZWROb2Rlcy5sZW5ndGg+MH0pJiZ0Ll91cGRhdGVXaXRoVmFsdWUoKX0pLHQuX29ic2VydmVyLm9ic2VydmUodC5uYXRpdmVFbGVtZW50LHtjaGlsZExpc3Q6ITB9KSl9KX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksTmQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dHx8dGhpcy5fcXVlcnlJbnB1dCgiZ2FwIil8fCIwIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIHI9dGhpcy5jaGlsZHJlbk5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubm9kZVR5cGUmJiJub25lIiE9ZS5fZ2V0RGlzcGxheVN0eWxlKHQpfSkuc29ydChmdW5jdGlvbih0LG4pe3ZhciByPStlLl9zdHlsZXIubG9va3VwU3R5bGUodCwib3JkZXIiKSxpPStlLl9zdHlsZXIubG9va3VwU3R5bGUobiwib3JkZXIiKTtyZXR1cm4gaXNOYU4ocil8fGlzTmFOKGkpfHxyPT09aT8wOnI+aT8xOi0xfSk7aWYoci5sZW5ndGg+MClpZihuLmVuZHNXaXRoKFZkKSluPW4uc3Vic3RyaW5nKDAsbi5pbmRleE9mKFZkKSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRHcmlkUGFkZGluZyhuKSxyKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkR3JpZE1hcmdpbihuKSk7ZWxzZXt2YXIgaT1yLnBvcCgpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKG4pLHIpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKCksW2ldKX19LGUucHJvdG90eXBlLl9idWlsZEdyaWRQYWRkaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPSIwcHgiLG49IjBweCI7cmV0dXJuInJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT9uPXQ6ZT10LHtwYWRkaW5nOiIwcHggIitlKyIgIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkR3JpZE1hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj0iLSIrdDplPSItIit0LHttYXJnaW46IjBweCAiK2UrIiAtIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkQ1NTPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PW51bGwpO3ZhciBlLG49eyJtYXJnaW4tbGVmdCI6bnVsbCwibWFyZ2luLXJpZ2h0IjpudWxsLCJtYXJnaW4tdG9wIjpudWxsLCJtYXJnaW4tYm90dG9tIjpudWxsfTtzd2l0Y2godGhpcy5fbGF5b3V0KXtjYXNlImNvbHVtbiI6ZT0ibWFyZ2luLWJvdHRvbSI7YnJlYWs7Y2FzZSJjb2x1bW4tcmV2ZXJzZSI6ZT0ibWFyZ2luLXRvcCI7YnJlYWs7Y2FzZSJyb3ciOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQiO2JyZWFrO2Nhc2Uicm93LXJldmVyc2UiOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLXJpZ2h0IjoibWFyZ2luLWxlZnQiO2JyZWFrO2RlZmF1bHQ6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tbGVmdCI6Im1hcmdpbi1yaWdodCJ9cmV0dXJuIG5bZV09dCxufSxlfSh5ZCksVmQ9IiBncmlkIjtmdW5jdGlvbiBCZCh0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciByPTAsaT1lO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdO2lmKG51bGwhPW8pZm9yKHZhciBhIGluIG8pby5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbYV09b1thXSl9cmV0dXJuIHR9dmFyIHpkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4saSl8fHRoaXM7cmV0dXJuIGEuX2NvbnRhaW5lcj1yLGEuc3R5bGVVdGlscz1pLGEubGF5b3V0Q29uZmlnPW8sYS5fY2FjaGVJbnB1dCgiZmxleCIsIiIpLGEuX2NhY2hlSW5wdXQoInNocmluayIsMSksYS5fY2FjaGVJbnB1dCgiZ3JvdyIsMSksciYmKGEuX2xheW91dFdhdGNoZXI9ci5sYXlvdXQkLnN1YnNjcmliZShmdW5jdGlvbih0KXthLl9vbkxheW91dENoYW5nZSh0KX0pKSxhfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hyaW5rIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoInNocmluayIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJncm93Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdyb3ciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZmxleHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImZsZXgiLCIiLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVN0eWxlKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheW91dD10fHx0aGlzLl9sYXlvdXR8fHtkaXJlY3Rpb246InJvdyIsd3JhcDohMX0sdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImZsZXgiKXx8IiI7dGhpcy5fbXFBY3RpdmF0aW9uJiYoZT10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBuPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iMSIpLHZvaWQgMD09PW4mJihuPSIxIik7dmFyIHI9W2Usbix0XSxpPXQuaW5kZXhPZigiY2FsYyIpO2lmKGk+MClyWzJdPXdkKHQuc3Vic3RyaW5nKGkpLnRyaW0oKSksMj09KG89dC5zdWJzdHIoMCxpKS50cmltKCkuc3BsaXQoIiAiKSkubGVuZ3RoJiYoclswXT1vWzBdLHJbMV09b1sxXSk7ZWxzZSBpZigwPT1pKXJbMl09d2QodC50cmltKCkpO2Vsc2V7dmFyIG87cj0zPT09KG89dC5zcGxpdCgiICIpKS5sZW5ndGg/bzpbZSxuLHRdfXJldHVybiByfShTdHJpbmcoZSkucmVwbGFjZSgiOyIsIiIpLHRoaXMuX3F1ZXJ5SW5wdXQoImdyb3ciKSx0aGlzLl9xdWVyeUlucHV0KCJzaHJpbmsiKSk7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl92YWxpZGF0ZVZhbHVlLmFwcGx5KHRoaXMsbikpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGVWYWx1ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fZ2V0RmxleEZsb3dEaXJlY3Rpb24odGhpcy5wYXJlbnRFbGVtZW50LHRoaXMubGF5b3V0Q29uZmlnLmFkZEZsZXhUb1BhcmVudCkuaW5kZXhPZigiY29sdW1uIik+LTE/ImNvbHVtbiI6InJvdyIsaT1EZChyKT8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCIsbz1EZChyKT8ibWluLXdpZHRoIjoibWluLWhlaWdodCIsYT1TdHJpbmcobikuaW5kZXhPZigiY2FsYyIpPi0xLHM9YXx8ImF1dG8iPT1uLGw9U3RyaW5nKG4pLmluZGV4T2YoIiUiKT4tMSYmIWEsdT1TdHJpbmcobikuaW5kZXhPZigicHgiKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoImVtIik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJ2dyIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigidmgiKT4tMSxjPVN0cmluZyhuKS5pbmRleE9mKCJweCIpPi0xfHxzLGY9YXx8dTt0PSIwIj09dD8wOnQsZT0iMCI9PWU/MDplO3ZhciBoPSF0JiYhZSxwPXt9LGQ9eyJtYXgtd2lkdGgiOm51bGwsIm1heC1oZWlnaHQiOm51bGwsIm1pbi13aWR0aCI6bnVsbCwibWluLWhlaWdodCI6bnVsbH07c3dpdGNoKG58fCIiKXtjYXNlIiI6bj0icm93Ij09PXI/IjAlIjp0aGlzLmxheW91dENvbmZpZy51c2VDb2x1bW5CYXNpc1plcm8/IjAuMDAwMDAwMDAxcHgiOiJhdXRvIjticmVhaztjYXNlImluaXRpYWwiOmNhc2Uibm9ncm93Ijp0PTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJncm93IjpuPSIxMDAlIjticmVhaztjYXNlIm5vc2hyaW5rIjplPTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJhdXRvIjpicmVhaztjYXNlIm5vbmUiOnQ9MCxlPTAsbj0iYXV0byI7YnJlYWs7ZGVmYXVsdDpmfHxsfHxpc05hTihuKXx8KG4rPSIlIiksIjAlIj09PW4mJihmPSEwKSwiMHB4Ij09PW4mJihuPSIwJSIpLHA9QmQoZCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6Zj9uOiIxMDAlIn06e2ZsZXg6dCsiICIrZSsiICIrKGY/bjoiMTAwJSIpfSl9cmV0dXJuIHAuZmxleHx8cFsiZmxleC1ncm93Il18fChwPUJkKGQsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSksIjAlIiE9PW4mJiIwcHgiIT09biYmIjAuMDAwMDAwMDAxcHgiIT09biYmImF1dG8iIT09biYmKHBbb109aHx8YyYmdD9uOm51bGwscFtpXT1ofHwhcyYmZT9uOm51bGwpLHBbb118fHBbaV0/dGhpcy5fbGF5b3V0JiZ0aGlzLl9sYXlvdXQud3JhcCYmKHBbYT8iZmxleC1iYXNpcyI6ImZsZXgiXT1wW2ldP2E/cFtpXTp0KyIgIitlKyIgIitwW2ldOmE/cFtvXTp0KyIgIitlKyIgIitwW29dKTpwPUJkKGQsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSxCZChwLHsiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGV9KHlkKSxVZD17bWFyZ2luOjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsIm1pbi13aWR0aCI6IjEwMCUiLCJtaW4taGVpZ2h0IjoiMTAwJSJ9LEhkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5lbFJlZj1uLGkuX2FwcGx5U3R5bGVUb0VsZW1lbnQoVWQpLGl9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0oeWQpLFFkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiBvLl9sYXlvdXQ9InJvdyIsciYmKG8uX2xheW91dFdhdGNoZXI9ci5sYXlvdXQkLnN1YnNjcmliZShvLl9vbkxheW91dENoYW5nZS5iaW5kKG8pKSksb31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25NZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbk1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5hbGlnbnx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJhbGlnbiIsInN0YXJ0IHN0cmV0Y2giLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhWYWx1ZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkQ1NTKHQpKSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcodCx0aGlzLl9sYXlvdXQ/dGhpcy5fbGF5b3V0OiJyb3ciKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksTmQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKTt2YXIgbj10aGlzLl9xdWVyeUlucHV0KCJhbGlnbiIpfHwic3RhcnQgc3RyZXRjaCI7dGhpcy5fbXFBY3RpdmF0aW9uJiYobj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpLHRoaXMuX2FsbG93U3RyZXRjaGluZyhuLHRoaXMuX2xheW91dHx8InJvdyIpfSxlLnByb3RvdHlwZS5fYnVpbGRDU1M9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj10LnNwbGl0KCIgIikscj1uWzFdO3N3aXRjaChuWzBdKXtjYXNlImNlbnRlciI6ZVsianVzdGlmeS1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJzcGFjZS1hcm91bmQiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1hcm91bmQiO2JyZWFrO2Nhc2Uic3BhY2UtYmV0d2VlbiI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWJldHdlZW4iO2JyZWFrO2Nhc2Uic3BhY2UtZXZlbmx5IjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtZXZlbmx5IjticmVhaztjYXNlImVuZCI6Y2FzZSJmbGV4LWVuZCI6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtZW5kIjticmVhaztjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmRlZmF1bHQ6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtc3RhcnQifXN3aXRjaChyKXtjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LXN0YXJ0IjticmVhaztjYXNlImJhc2VsaW5lIjplWyJhbGlnbi1pdGVtcyJdPSJiYXNlbGluZSI7YnJlYWs7Y2FzZSJjZW50ZXIiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJjZW50ZXIiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6ZGVmYXVsdDplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0ic3RyZXRjaCJ9cmV0dXJuIEJkKGUse2Rpc3BsYXk6ImZsZXgiLCJmbGV4LWRpcmVjdGlvbiI6dGhpcy5fbGF5b3V0fHwicm93IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGUucHJvdG90eXBlLl9hbGxvd1N0cmV0Y2hpbmc9ZnVuY3Rpb24odCxlKXsic3RyZXRjaCI9PXQuc3BsaXQoIiAiKVsxXSYmdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh7ImJveC1zaXppbmciOiJib3JkZXItYm94IiwibWF4LXdpZHRoIjpEZChlKT9udWxsOiIxMDAlIiwibWF4LWhlaWdodCI6RGQoZSk/IjEwMCUiOm51bGx9KX0sZX0oeWQpLHFkPWZ1bmN0aW9uKCl7fSxHZD1mdW5jdGlvbigpe30sWWQ9ZnVuY3Rpb24oKXt9LFdkPSEhYygpJiZ7cGFzc2l2ZTohMH0sWmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcGxhdGZvcm09dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGouYTt2YXIgZT10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQodCk7aWYoZSlyZXR1cm4gZS5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO3ZhciBuPW5ldyBDLmEscj1mdW5jdGlvbihlKXsiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQiPT09ZS5hbmltYXRpb25OYW1lPyh0LmNsYXNzTGlzdC5hZGQoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiKSxuLm5leHQoe3RhcmdldDplLnRhcmdldCxpc0F1dG9maWxsZWQ6ITB9KSk6ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1lLmFuaW1hdGlvbk5hbWUmJih0LmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiKSxuLm5leHQoe3RhcmdldDplLnRhcmdldCxpc0F1dG9maWxsZWQ6ITF9KSl9O3JldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixyLFdkKSx0LmNsYXNzTGlzdC5hZGQoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpfSksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuc2V0KHQse3N1YmplY3Q6bix1bmxpc3RlbjpmdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLHIsV2QpfX0pLG4uYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5zdG9wTW9uaXRvcmluZyhuKX0pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKSh1KSxPYmplY3Qoby5YKShvLnkpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksS2Q9ZnVuY3Rpb24oKXt9LFhkPVsiYnV0dG9uIiwiY2hlY2tib3giLCJmaWxlIiwiaGlkZGVuIiwiaW1hZ2UiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzdWJtaXQiXSwkZD0wLEpkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEscyxsLHUpe3ZhciBjPXQuY2FsbCh0aGlzLGEsaSxvLHIpfHx0aGlzO3JldHVybiBjLl9lbGVtZW50UmVmPWUsYy5fcGxhdGZvcm09bixjLm5nQ29udHJvbD1yLGMuX2F1dG9maWxsTW9uaXRvcj1sLGMuX3VpZD0ibWF0LWlucHV0LSIrJGQrKyxjLl9pc1NlcnZlcj0hMSxjLmZvY3VzZWQ9ITEsYy5zdGF0ZUNoYW5nZXM9bmV3IEMuYSxjLmNvbnRyb2xUeXBlPSJtYXQtaW5wdXQiLGMuYXV0b2ZpbGxlZD0hMSxjLl9kaXNhYmxlZD0hMSxjLl9yZXF1aXJlZD0hMSxjLl90eXBlPSJ0ZXh0IixjLl9yZWFkb25seT0hMSxjLl9uZXZlckVtcHR5SW5wdXRUeXBlcz1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayJdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaCgpLmhhcyh0KX0pLGMuX2lucHV0VmFsdWVBY2Nlc3Nvcj1zfHxjLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYy5fcHJldmlvdXNOYXRpdmVWYWx1ZT1jLnZhbHVlLGMuaWQ9Yy5pZCxuLklPUyYmdS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7ZS52YWx1ZXx8ZS5zZWxlY3Rpb25TdGFydHx8ZS5zZWxlY3Rpb25FbmR8fChlLnNldFNlbGVjdGlvblJhbmdlKDEsMSksZS5zZXRTZWxlY3Rpb25SYW5nZSgwLDApKX0pfSksYy5faXNTZXJ2ZXI9IWMuX3BsYXRmb3JtLmlzQnJvd3NlcixjfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPUQodCksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2lkPXR8fHRoaXMuX3VpZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlcXVpcmVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWlyZWQ9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHlwZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9dHx8InRleHQiLHRoaXMuX3ZhbGlkYXRlVHlwZSgpLCF0aGlzLl9pc1RleHRhcmVhKCkmJmgoKS5oYXModGhpcy5fdHlwZSkmJih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZT10aGlzLl90eXBlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3QhPT10aGlzLnZhbHVlJiYodGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlYWRvbmx5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRvbmx5fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZG9ubHk9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYXV0b2ZpbGxNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHQuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfSxlLnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5fZGlydHlDaGVja05hdGl2ZVZhbHVlKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLl9mb2N1c0NoYW5nZWQ9ZnVuY3Rpb24odCl7dD09PXRoaXMuZm9jdXNlZHx8dGhpcy5yZWFkb25seXx8KHRoaXMuZm9jdXNlZD10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9LGUucHJvdG90eXBlLl9vbklucHV0PWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5fZGlydHlDaGVja05hdGl2ZVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZTt0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlIT09dCYmKHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGVUeXBlPWZ1bmN0aW9uKCl7aWYoWGQuaW5kZXhPZih0aGlzLl90eXBlKT4tMSl0aHJvdyBFcnJvcignSW5wdXQgdHlwZSAiJyt0aGlzLl90eXBlKyJcIiBpc24ndCBzdXBwb3J0ZWQgYnkgbWF0SW5wdXQuIil9LGUucHJvdG90eXBlLl9pc05ldmVyRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXMuaW5kZXhPZih0aGlzLl90eXBlKT4tMX0sZS5wcm90b3R5cGUuX2lzQmFkSW5wdXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIHQmJnQuYmFkSW5wdXR9LGUucHJvdG90eXBlLl9pc1RleHRhcmVhPWZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIj09PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaG91bGRMYWJlbEZsb2F0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9jdXNlZHx8IXRoaXMuZW1wdHl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuc2V0RGVzY3JpYmVkQnlJZHM9ZnVuY3Rpb24odCl7dGhpcy5fYXJpYURlc2NyaWJlZGJ5PXQuam9pbigiICIpfSxlLnByb3RvdHlwZS5vbkNvbnRhaW5lckNsaWNrPWZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpfSxlfShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgcj10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZXJyb3JTdGF0ZT0hMSxyLnN0YXRlQ2hhbmdlcz1uZXcgQy5hLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUudXBkYXRlRXJyb3JTdGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZXJyb3JTdGF0ZSxlPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtlIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9LGV9KGZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9bix0aGlzLm5nQ29udHJvbD1yfSl9KCkpLHRtPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBlbSgpe2Zvcih2YXIgdCxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlW2UubGVuZ3RoLTFdJiYodD1lLnBvcCgpKSwxPT09ZS5sZW5ndGgmJk9iamVjdCh5LmEpKGVbMF0pJiYoZT1lWzBdKSwwPT09ZS5sZW5ndGg/ai5hOnQ/ZW0oZSkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh2b2lkIDAsZSl9KSk6bmV3IEUuYShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5tKHQsZSl9KX12YXIgbm09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3Iuc291cmNlcz1uLHIuY29tcGxldGVkPTAsci5oYXZlVmFsdWVzPTA7dmFyIGk9bi5sZW5ndGg7ci52YWx1ZXM9bmV3IEFycmF5KGkpO2Zvcih2YXIgbz0wO288aTtvKyspe3ZhciBhPW5bb10scz1PYmplY3Qodi5hKShyLGEsbnVsbCxvKTtzJiZyLmFkZChzKX1yZXR1cm4gcn1yZXR1cm4gZC5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMudmFsdWVzW25dPWUsaS5faGFzVmFsdWV8fChpLl9oYXNWYWx1ZT0hMCx0aGlzLmhhdmVWYWx1ZXMrKyl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb24sbj10aGlzLmhhdmVWYWx1ZXMscj10aGlzLnZhbHVlcyxpPXIubGVuZ3RoO3QuX2hhc1ZhbHVlPyh0aGlzLmNvbXBsZXRlZCsrLHRoaXMuY29tcGxldGVkPT09aSYmKG49PT1pJiZlLm5leHQociksZS5jb21wbGV0ZSgpKSk6ZS5jb21wbGV0ZSgpfSxlfShnLmEpLHJtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbnZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGVuZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByaXN0aW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGF0dXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVudG91Y2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdHVzQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbHVlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9LHQucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcih0LGUpfSx0LnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH0sdH0oKSxpbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShybSk7ZnVuY3Rpb24gb20odCl7cmV0dXJuIG51bGw9PXR8fDA9PT10Lmxlbmd0aH12YXIgYW09L14oPz0uezEsMjU0fSQpKD89LnsxLDY0fUApWy0hIyQlJicqKy8wLTk9P0EtWl5fYGEtent8fX5dKyhcLlstISMkJSYnKisvMC05PT9BLVpeX2BhLXp7fH1+XSspKkBbQS1aYS16MC05XShbQS1aYS16MC05LV17MCw2MX1bQS1aYS16MC05XSk/KFwuW0EtWmEtejAtOV0oW0EtWmEtejAtOS1dezAsNjF9W0EtWmEtejAtOV0pPykqJC8sc209ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lm1pbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYob20oZS52YWx1ZSl8fG9tKHQpKXJldHVybiBudWxsO3ZhciBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPHQ/e21pbjp7bWluOnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX0sdC5tYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG9tKGUudmFsdWUpfHxvbSh0KSlyZXR1cm4gbnVsbDt2YXIgbj1wYXJzZUZsb2F0KGUudmFsdWUpO3JldHVybiFpc05hTihuKSYmbj50P3ttYXg6e21heDp0LGFjdHVhbDplLnZhbHVlfX06bnVsbH19LHQucmVxdWlyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG9tKHQudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH0sdC5yZXF1aXJlZFRydWU9ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10LnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX0sdC5lbWFpbD1mdW5jdGlvbih0KXtyZXR1cm4gb20odC52YWx1ZSk/bnVsbDphbS50ZXN0KHQudmFsdWUpP251bGw6e2VtYWlsOiEwfX0sdC5taW5MZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG9tKGUudmFsdWUpKXJldHVybiBudWxsO3ZhciBuPWUudmFsdWU/ZS52YWx1ZS5sZW5ndGg6MDtyZXR1cm4gbjx0P3ttaW5sZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOm59fTpudWxsfX0sdC5tYXhMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUudmFsdWU/ZS52YWx1ZS5sZW5ndGg6MDtyZXR1cm4gbj50P3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOm59fTpudWxsfX0sdC5wYXR0ZXJuPWZ1bmN0aW9uKGUpe3JldHVybiBlPygic3RyaW5nIj09dHlwZW9mIGU/KHI9IiIsIl4iIT09ZS5jaGFyQXQoMCkmJihyKz0iXiIpLHIrPWUsIiQiIT09ZS5jaGFyQXQoZS5sZW5ndGgtMSkmJihyKz0iJCIpLG49bmV3IFJlZ0V4cChyKSk6KHI9ZS50b1N0cmluZygpLG49ZSksZnVuY3Rpb24odCl7aWYob20odC52YWx1ZSkpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZTtyZXR1cm4gbi50ZXN0KGUpP251bGw6e3BhdHRlcm46e3JlcXVpcmVkUGF0dGVybjpyLGFjdHVhbFZhbHVlOmV9fX0pOnQubnVsbFZhbGlkYXRvcjt2YXIgbixyfSx0Lm51bGxWYWxpZGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHQuY29tcG9zZT1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgZT10LmZpbHRlcihsbSk7cmV0dXJuIDA9PWUubGVuZ3RoP251bGw6ZnVuY3Rpb24odCl7cmV0dXJuIGNtKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9KHQpKX19LHQuY29tcG9zZUFzeW5jPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBlPXQuZmlsdGVyKGxtKTtyZXR1cm4gMD09ZS5sZW5ndGg/bnVsbDpmdW5jdGlvbih0KXtyZXR1cm4gZW0oZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0odCkubWFwKHVtKSkucGlwZShPYmplY3QoUy5hKShjbSkpfX0sdH0oKTtmdW5jdGlvbiBsbSh0KXtyZXR1cm4gbnVsbCE9dH1mdW5jdGlvbiB1bSh0KXt2YXIgZT1PYmplY3Qoby5WYSkodCk/T2JqZWN0KE0uYSkodCk6dDtpZighT2JqZWN0KG8uVWEpKGUpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFsaWRhdG9yIHRvIHJldHVybiBQcm9taXNlIG9yIE9ic2VydmFibGUuIik7cmV0dXJuIGV9ZnVuY3Rpb24gY20odCl7dmFyIGU9dC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9ZT9PYmplY3QoZC5hKSh7fSx0LGUpOnR9LHt9KTtyZXR1cm4gMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aD9udWxsOmV9dmFyIGZtPW5ldyBvLnAoIk5nVmFsdWVBY2Nlc3NvciIpLGhtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe319cmV0dXJuIHQucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJjaGVja2VkIix0KX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLm9uQ2hhbmdlPXR9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHR9KCkscG09bmV3IG8ucCgiQ29tcG9zaXRpb25FdmVudE1vZGUiKSxkbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByO3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1uLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe30sdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0ocj1PYmplY3QoaGUudCkoKT9PYmplY3QoaGUudCkoKS5nZXRVc2VyQWdlbnQoKToiIiwhL2FuZHJvaWQgKFxkKykvLnRlc3Qoci50b0xvd2VyQ2FzZSgpKSkpfXJldHVybiB0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLG51bGw9PXQ/IiI6dCl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5vbkNoYW5nZT10fSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0LnByb3RvdHlwZS5faGFuZGxlSW5wdXQ9ZnVuY3Rpb24odCl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UodCl9LHQucHJvdG90eXBlLl9jb21wb3NpdGlvblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY29tcG9zaW5nPSEwfSx0LnByb3RvdHlwZS5fY29tcG9zaXRpb25FbmQ9ZnVuY3Rpb24odCl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZSh0KX0sdH0oKTtmdW5jdGlvbiBtbSh0KXtyZXR1cm4gdC52YWxpZGF0ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC52YWxpZGF0ZShlKX06dH1mdW5jdGlvbiB5bSh0KXtyZXR1cm4gdC52YWxpZGF0ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC52YWxpZGF0ZShlKX06dH12YXIgZ209ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixudWxsPT10PyIiOnQpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dCgiIj09ZT9udWxsOnBhcnNlRmxvYXQoZSkpfX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdH0oKTtmdW5jdGlvbiB2bSgpe3Rocm93IG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpfXZhciBibT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9wYXJlbnQ9bnVsbCxlLm5hbWU9bnVsbCxlLnZhbHVlQWNjZXNzb3I9bnVsbCxlLl9yYXdWYWxpZGF0b3JzPVtdLGUuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSxlfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZtKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB2bSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHJtKSxfbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hY2Nlc3NvcnM9W119cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFt0LGVdKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZT49MDstLWUpaWYodGhpcy5fYWNjZXNzb3JzW2VdWzFdPT09dClyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGUsMSl9LHQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuX2lzU2FtZUdyb3VwKG4sdCkmJm5bMV0hPT10JiZuWzFdLmZpcmVVbmNoZWNrKHQudmFsdWUpfSl9LHQucHJvdG90eXBlLl9pc1NhbWVHcm91cD1mdW5jdGlvbih0LGUpe3JldHVybiEhdFswXS5jb250cm9sJiZ0WzBdLl9wYXJlbnQ9PT1lLl9jb250cm9sLl9wYXJlbnQmJnRbMV0ubmFtZT09PWUubmFtZX0sdH0oKSx3bT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fcmVnaXN0cnk9bix0aGlzLl9pbmplY3Rvcj1yLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oKXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChibSksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfSx0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuX3N0YXRlPXQ9PT10aGlzLnZhbHVlLHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fZm49dCx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKCl7dChlLnZhbHVlKSxlLl9yZWdpc3RyeS5zZWxlY3QoZSl9fSx0LnByb3RvdHlwZS5maXJlVW5jaGVjaz1mdW5jdGlvbih0KXt0aGlzLndyaXRlVmFsdWUodCl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHQucHJvdG90eXBlLl9jaGVja05hbWU9ZnVuY3Rpb24oKXt0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiZ0aGlzLm5hbWUhPT10aGlzLmZvcm1Db250cm9sTmFtZSYmdGhpcy5fdGhyb3dOYW1lRXJyb3IoKSwhdGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9LHQucHJvdG90eXBlLl90aHJvd05hbWVFcnJvcj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignXG4gICAgICBJZiB5b3UgZGVmaW5lIGJvdGggYSBuYW1lIGFuZCBhIGZvcm1Db250cm9sTmFtZSBhdHRyaWJ1dGUgb24geW91ciByYWRpbyBidXR0b24sIHRoZWlyIHZhbHVlc1xuICAgICAgbXVzdCBtYXRjaC4gRXg6IDxpbnB1dCB0eXBlPSJyYWRpbyIgZm9ybUNvbnRyb2xOYW1lPSJmb29kIiBuYW1lPSJmb29kIj5cbiAgICAnKX0sdH0oKSx4bT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKHQpe30sdGhpcy5vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9fXJldHVybiB0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLHBhcnNlRmxvYXQodCkpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dCgiIj09ZT9udWxsOnBhcnNlRmxvYXQoZSkpfX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdH0oKSxDbT0nXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaXJzdE5hbWUiPlxuICAgIDwvZGl2PlxuXG4gICAgSW4geW91ciBjbGFzczpcblxuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgIGZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKClcbiAgICB9KTsnLEVtPSdcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InBlcnNvbiI+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBwZXJzb246IG5ldyBGb3JtR3JvdXAoeyBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpIH0pXG4gICAgfSk7JyxPbT0nXG4gICAgPGZvcm0+XG4gICAgICAgPGRpdiBuZ01vZGVsR3JvdXA9InBlcnNvbiI+XG4gICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24ubmFtZSIgbmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+JyxTbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY29udHJvbFBhcmVudEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZm9ybUNvbnRyb2xOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3UnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICIrQ20pfSx0Lm5nTW9kZWxHcm91cEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignZm9ybUNvbnRyb2xOYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGggYW4gbmdNb2RlbEdyb3VwIHBhcmVudC4gSXQgaXMgb25seSBjb21wYXRpYmxlIHdpdGggcGFyZW50c1xuICAgICAgIHRoYXQgYWxzbyBoYXZlIGEgImZvcm0iIHByZWZpeDogZm9ybUdyb3VwTmFtZSwgZm9ybUFycmF5TmFtZSwgb3IgZm9ybUdyb3VwLlxuXG4gICAgICAgT3B0aW9uIDE6ICBVcGRhdGUgdGhlIHBhcmVudCB0byBiZSBmb3JtR3JvdXBOYW1lIChyZWFjdGl2ZSBmb3JtIHN0cmF0ZWd5KVxuXG4gICAgICAgICcrRW0rIlxuXG4gICAgICAgIE9wdGlvbiAyOiBVc2UgbmdNb2RlbCBpbnN0ZWFkIG9mIGZvcm1Db250cm9sTmFtZSAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KVxuXG4gICAgICAgICIrT20pfSx0Lm1pc3NpbmdGb3JtRXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJmb3JtR3JvdXAgZXhwZWN0cyBhIEZvcm1Hcm91cCBpbnN0YW5jZS4gUGxlYXNlIHBhc3Mgb25lIGluLlxuXG4gICAgICAgRXhhbXBsZTpcblxuICAgICAgICIrQ20pfSx0Lmdyb3VwUGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJmb3JtR3JvdXBOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3UnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3JvdXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgIitFbSl9LHQuYXJyYXlQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ2Zvcm1BcnJheU5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdVwnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICBcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT0iY2l0aWVzIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9ImxldCBjaXR5IG9mIGNpdHlBcnJheS5jb250cm9sczsgaW5kZXggYXMgaSI+XG4gICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbE5hbWVdPSJpIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLmNpdHlBcnJheSA9IG5ldyBGb3JtQXJyYXkoW25ldyBGb3JtQ29udHJvbChcJ1NGXCcpXSk7XG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBjaXRpZXM6IHRoaXMuY2l0eUFycmF5XG4gICAgfSk7Jyl9LHQuZGlzYWJsZWRBdHRyV2FybmluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpdGggYSByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZS4gSWYgeW91IHNldCBkaXNhYmxlZCB0byB0cnVlXG4gICAgICB3aGVuIHlvdSBzZXQgdXAgdGhpcyBjb250cm9sIGluIHlvdXIgY29tcG9uZW50IGNsYXNzLCB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpbGwgYWN0dWFsbHkgYmUgc2V0IGluIHRoZSBET00gZm9yXG4gICAgICB5b3UuIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIGFwcHJvYWNoIHRvIGF2b2lkICdjaGFuZ2VkIGFmdGVyIGNoZWNrZWQnIGVycm9ycy5cbiAgICAgICBcbiAgICAgIEV4YW1wbGU6IFxuICAgICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBmaXJzdDogbmV3IEZvcm1Db250cm9sKHt2YWx1ZTogJ05hbmN5JywgZGlzYWJsZWQ6IHRydWV9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgbGFzdDogbmV3IEZvcm1Db250cm9sKCdEcmV3JywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICAgIH0pO1xuICAgICIpfSx0Lm5nTW9kZWxXYXJuaW5nPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiXG4gICAgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgbmdNb2RlbCBvbiB0aGUgc2FtZSBmb3JtIGZpZWxkIGFzICIrdCsiLiBcbiAgICBTdXBwb3J0IGZvciB1c2luZyB0aGUgbmdNb2RlbCBpbnB1dCBwcm9wZXJ0eSBhbmQgbmdNb2RlbENoYW5nZSBldmVudCB3aXRoIFxuICAgIHJlYWN0aXZlIGZvcm0gZGlyZWN0aXZlcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIEFuZ3VsYXIgdjYgYW5kIHdpbGwgYmUgcmVtb3ZlZCBcbiAgICBpbiBBbmd1bGFyIHY3LlxuICAgIFxuICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIHNlZSBvdXIgQVBJIGRvY3MgaGVyZTpcbiAgICBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zLyIrKCJmb3JtQ29udHJvbCI9PT10PyJGb3JtQ29udHJvbERpcmVjdGl2ZSI6IkZvcm1Db250cm9sTmFtZSIpKyIjdXNlLXdpdGgtbmdtb2RlbFxuICAgICIpfSx0fSgpO2Z1bmN0aW9uIGttKHQsZSl7cmV0dXJuIE9iamVjdChkLmQpKGUucGF0aCxbdF0pfWZ1bmN0aW9uIFRtKHQsZSl7dHx8SW0oZSwiQ2Fubm90IGZpbmQgY29udHJvbCB3aXRoIiksZS52YWx1ZUFjY2Vzc29yfHxJbShlLCJObyB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj1zbS5jb21wb3NlKFt0LnZhbGlkYXRvcixlLnZhbGlkYXRvcl0pLHQuYXN5bmNWYWxpZGF0b3I9c20uY29tcG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKSxlLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZSh0LnZhbHVlKSxmdW5jdGlvbih0LGUpe2UudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKG4pe3QuX3BlbmRpbmdWYWx1ZT1uLHQuX3BlbmRpbmdDaGFuZ2U9ITAsdC5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09dC51cGRhdGVPbiYmUG0odCxlKX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7dC5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKHQsbil7ZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodCksbiYmZS52aWV3VG9Nb2RlbFVwZGF0ZSh0KX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKGZ1bmN0aW9uKCl7dC5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09dC51cGRhdGVPbiYmdC5fcGVuZGluZ0NoYW5nZSYmUG0odCxlKSwic3VibWl0IiE9PXQudXBkYXRlT24mJnQubWFya0FzVG91Y2hlZCgpfSl9KHQsZSksZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUmJnQucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGZ1bmN0aW9uKHQpe2UudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKHQpfSksZS5fcmF3VmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSl9KSxlLl9yYXdBc3luY1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmUucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmdW5jdGlvbigpe3JldHVybiB0LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfSl9ZnVuY3Rpb24gUG0odCxlKXt0Ll9wZW5kaW5nRGlydHkmJnQubWFya0FzRGlydHkoKSx0LnNldFZhbHVlKHQuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksZS52aWV3VG9Nb2RlbFVwZGF0ZSh0Ll9wZW5kaW5nVmFsdWUpLHQuX3BlbmRpbmdDaGFuZ2U9ITF9ZnVuY3Rpb24gQW0odCxlKXtudWxsPT10JiZJbShlLCJDYW5ub3QgZmluZCBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj1zbS5jb21wb3NlKFt0LnZhbGlkYXRvcixlLnZhbGlkYXRvcl0pLHQuYXN5bmNWYWxpZGF0b3I9c20uY29tcG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKX1mdW5jdGlvbiBqbSh0KXtyZXR1cm4gSW0odCwiVGhlcmUgaXMgbm8gRm9ybUNvbnRyb2wgaW5zdGFuY2UgYXR0YWNoZWQgdG8gZm9ybSBjb250cm9sIGVsZW1lbnQgd2l0aCIpfWZ1bmN0aW9uIEltKHQsZSl7dmFyIG47dGhyb3cgbj10LnBhdGgubGVuZ3RoPjE/InBhdGg6ICciK3QucGF0aC5qb2luKCIgLT4gIikrIiciOnQucGF0aFswXT8ibmFtZTogJyIrdC5wYXRoKyInIjoidW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUiLG5ldyBFcnJvcihlKyIgIituKX1mdW5jdGlvbiBNbSh0KXtyZXR1cm4gbnVsbCE9dD9zbS5jb21wb3NlKHQubWFwKG1tKSk6bnVsbH1mdW5jdGlvbiBObSh0KXtyZXR1cm4gbnVsbCE9dD9zbS5jb21wb3NlQXN5bmModC5tYXAoeW0pKTpudWxsfXZhciBSbT1baG0seG0sZ20sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSx0aGlzLl9jb21wYXJlV2l0aD1vLldhfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBhcmVXaXRoIix7c2V0OmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiY29tcGFyZVdpdGggbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSk7dGhpcy5fY29tcGFyZVdpdGg9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMudmFsdWU9dDt2YXIgZT10aGlzLl9nZXRPcHRpb25JZCh0KTtudWxsPT1lJiZ0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkSW5kZXgiLC0xKTt2YXIgbj1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10PyIiK2U6KGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKGU9Ik9iamVjdCIpLCh0KyI6ICIrZSkuc2xpY2UoMCw1MCkpfShlLHQpO3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLG4pfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5vbkNoYW5nZT1mdW5jdGlvbihuKXtlLnZhbHVlPWUuX2dldE9wdGlvblZhbHVlKG4pLHQoZS52YWx1ZSl9fSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJPcHRpb249ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9LHQucHJvdG90eXBlLl9nZXRPcHRpb25JZD1mdW5jdGlvbih0KXt0cnl7Zm9yKHZhciBlPU9iamVjdChkLmUpKEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpLG49ZS5uZXh0KCk7IW4uZG9uZTtuPWUubmV4dCgpKXt2YXIgcj1uLnZhbHVlO2lmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQociksdCkpcmV0dXJuIHJ9fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e24mJiFuLmRvbmUmJihvPWUucmV0dXJuKSYmby5jYWxsKGUpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgaSxvfSx0LnByb3RvdHlwZS5fZ2V0T3B0aW9uVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIjoiKVswXX0odCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZSk/dGhpcy5fb3B0aW9uTWFwLmdldChlKTp0fSx0fSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe30sdGhpcy5fY29tcGFyZVdpdGg9by5XYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wYXJlV2l0aCIse3NldDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkpO3RoaXMuX2NvbXBhcmVXaXRoPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXM7aWYodGhpcy52YWx1ZT10LEFycmF5LmlzQXJyYXkodCkpe3ZhciByPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9nZXRPcHRpb25JZCh0KX0pO2U9ZnVuY3Rpb24odCxlKXt0Ll9zZXRTZWxlY3RlZChyLmluZGV4T2YoZS50b1N0cmluZygpKT4tMSl9fWVsc2UgZT1mdW5jdGlvbih0LGUpe3QuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goZSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKG4pe3ZhciByPVtdO2lmKG4uaGFzT3duUHJvcGVydHkoInNlbGVjdGVkT3B0aW9ucyIpKWZvcih2YXIgaT1uLnNlbGVjdGVkT3B0aW9ucyxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPWkuaXRlbShvKSxzPWUuX2dldE9wdGlvblZhbHVlKGEudmFsdWUpO3IucHVzaChzKX1lbHNlIGZvcihpPW4ub3B0aW9ucyxvPTA7bzxpLmxlbmd0aDtvKyspKGE9aS5pdGVtKG8pKS5zZWxlY3RlZCYmKHM9ZS5fZ2V0T3B0aW9uVmFsdWUoYS52YWx1ZSksci5wdXNoKHMpKTtlLnZhbHVlPXIsdChyKX19LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHQucHJvdG90eXBlLl9yZWdpc3Rlck9wdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoZSx0KSxlfSx0LnByb3RvdHlwZS5fZ2V0T3B0aW9uSWQ9ZnVuY3Rpb24odCl7dHJ5e2Zvcih2YXIgZT1PYmplY3QoZC5lKShBcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpKSxuPWUubmV4dCgpOyFuLmRvbmU7bj1lLm5leHQoKSl7dmFyIHI9bi52YWx1ZTtpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KHIpLl92YWx1ZSx0KSlyZXR1cm4gcn19Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7biYmIW4uZG9uZSYmKG89ZS5yZXR1cm4pJiZvLmNhbGwoZSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBudWxsO3ZhciBpLG99LHQucHJvdG90eXBlLl9nZXRPcHRpb25WYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiOiIpWzBdfSh0KTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhlKT90aGlzLl9vcHRpb25NYXAuZ2V0KGUpLl92YWx1ZTp0fSx0fSgpLHdtXTtmdW5jdGlvbiBEbSh0LGUpe3QuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jb250cm9sOyJzdWJtaXQiPT09ZS51cGRhdGVPbiYmZS5fcGVuZGluZ0NoYW5nZSYmKHQudmlld1RvTW9kZWxVcGRhdGUoZS5fcGVuZGluZ1ZhbHVlKSxlLl9wZW5kaW5nQ2hhbmdlPSExKX0pfWZ1bmN0aW9uIEZtKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIExtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5mb3JtRGlyZWN0aXZlLmFkZEZvcm1Hcm91cCh0aGlzKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29udHJvbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUdyb3VwKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBrbSh0aGlzLm5hbWUsdGhpcy5fcGFyZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWxpZGF0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTW0odGhpcy5fdmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBObSh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5cGU9ZnVuY3Rpb24oKXt9LGV9KGltKSxWbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fY2Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzVW50b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnVudG91Y2hlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nQ2xhc3NUb3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnRvdWNoZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzUHJpc3RpbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wucHJpc3RpbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wuZGlydHl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzVmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wudmFsaWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzSW52YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fY2QuY29udHJvbCYmdGhpcy5fY2QuY29udHJvbC5pbnZhbGlkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzc1BlbmRpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wucGVuZGluZ30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpKTtmdW5jdGlvbiBCbSh0KXt2YXIgZT1VbSh0KT90LnZhbGlkYXRvcnM6dDtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9NbShlKTplfHxudWxsfWZ1bmN0aW9uIHptKHQsZSl7dmFyIG49VW0oZSk/ZS5hc3luY1ZhbGlkYXRvcnM6dDtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9ObShuKTpufHxudWxsfWZ1bmN0aW9uIFVtKHQpe3JldHVybiBudWxsIT10JiYhQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0fXZhciBIbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZhbGlkYXRvcj10LHRoaXMuYXN5bmNWYWxpZGF0b3I9ZSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9ZnVuY3Rpb24oKXt9LHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlZBTElEIj09PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW52YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJJTlZBTElEIj09PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGVuZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiJQRU5ESU5HIj09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJESVNBQkxFRCI9PT10aGlzLnN0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRElTQUJMRUQiIT09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLnByaXN0aW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidW50b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudG91Y2hlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVwZGF0ZU9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldFZhbGlkYXRvcnM9ZnVuY3Rpb24odCl7dGhpcy52YWxpZGF0b3I9Qm0odCl9LHQucHJvdG90eXBlLnNldEFzeW5jVmFsaWRhdG9ycz1mdW5jdGlvbih0KXt0aGlzLmFzeW5jVmFsaWRhdG9yPXptKHQpfSx0LnByb3RvdHlwZS5jbGVhclZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt0aGlzLnZhbGlkYXRvcj1udWxsfSx0LnByb3RvdHlwZS5jbGVhckFzeW5jVmFsaWRhdG9ycz1mdW5jdGlvbigpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH0sdC5wcm90b3R5cGUubWFya0FzVG91Y2hlZD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5tYXJrQXNVbnRvdWNoZWQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCl7dC5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9LHQucHJvdG90eXBlLm1hcmtBc0RpcnR5PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX0sdC5wcm90b3R5cGUubWFya0FzUHJpc3RpbmU9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbih0KXt0Lm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX0sdC5wcm90b3R5cGUubWFya0FzUGVuZGluZz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5zdGF0dXM9IlBFTkRJTkciLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5zdGF0dXM9IkRJU0FCTEVEIix0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtlLmRpc2FibGUoT2JqZWN0KGQuYSkoe30sdCx7b25seVNlbGY6ITB9KSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHQpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCghMCl9KX0sdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnN0YXR1cz0iVkFMSUQiLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtlLmVuYWJsZShPYmplY3QoZC5hKSh7fSx0LHtvbmx5U2VsZjohMH0pKX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHQpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCghMSl9KX0sdC5wcm90b3R5cGUuX3VwZGF0ZUFuY2VzdG9ycz1mdW5jdGlvbih0KXt0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCksdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSgpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCgpKX0sdC5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQpe3RoaXMuX3BhcmVudD10fSx0LnByb3RvdHlwZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCJWQUxJRCIhPT10aGlzLnN0YXR1cyYmIlBFTkRJTkciIT09dGhpcy5zdGF0dXN8fHRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKHQuZW1pdEV2ZW50KSksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KX0sdC5wcm90b3R5cGUuX3VwZGF0ZVRyZWVWYWxpZGl0eT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17ZW1pdEV2ZW50OiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUpe3JldHVybiBlLl91cGRhdGVUcmVlVmFsaWRpdHkodCl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfSx0LnByb3RvdHlwZS5fc2V0SW5pdGlhbFN0YXR1cz1mdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8iRElTQUJMRUQiOiJWQUxJRCJ9LHQucHJvdG90eXBlLl9ydW5WYWxpZGF0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH0sdC5wcm90b3R5cGUuX3J1bkFzeW5jVmFsaWRhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9IlBFTkRJTkciO3ZhciBuPXVtKHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbj1uLnN1YnNjcmliZShmdW5jdGlvbihuKXtyZXR1cm4gZS5zZXRFcnJvcnMobix7ZW1pdEV2ZW50OnR9KX0pfX0sdC5wcm90b3R5cGUuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uJiZ0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuc2V0RXJyb3JzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuZXJyb3JzPXQsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1lLmVtaXRFdmVudCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1lP251bGw6KGUgaW5zdGFuY2VvZiBBcnJheXx8KGU9ZS5zcGxpdCgiLiIpKSxlIGluc3RhbmNlb2YgQXJyYXkmJjA9PT1lLmxlbmd0aD9udWxsOmUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxbT90LmNvbnRyb2xzLmhhc093blByb3BlcnR5KGUpP3QuY29udHJvbHNbZV06bnVsbDp0IGluc3RhbmNlb2YgR20mJnQuYXQoZSl8fG51bGx9LHQpKX0odGhpcyx0KX0sdC5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3RoaXMuZ2V0KGUpOnRoaXM7cmV0dXJuIG4mJm4uZXJyb3JzP24uZXJyb3JzW3RdOm51bGx9LHQucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzO3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzPWZ1bmN0aW9uKHQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLHQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnModCl9LHQucHJvdG90eXBlLl9pbml0T2JzZXJ2YWJsZXM9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgby5uLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgby5ufSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8iRElTQUJMRUQiOnRoaXMuZXJyb3JzPyJJTlZBTElEIjp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoIlBFTkRJTkciKT8iUEVORElORyI6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKCJJTlZBTElEIik/IklOVkFMSUQiOiJWQUxJRCJ9LHQucHJvdG90eXBlLl9hbnlDb250cm9sc0hhdmVTdGF0dXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PXR9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzRGlydHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlydHl9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzVG91Y2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhmdW5jdGlvbih0KXtyZXR1cm4gdC50b3VjaGVkfSl9LHQucHJvdG90eXBlLl91cGRhdGVQcmlzdGluZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9LHQucHJvdG90eXBlLl91cGRhdGVUb3VjaGVkPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5faXNCb3hlZFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJjI9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJiJ2YWx1ZSJpbiB0JiYiZGlzYWJsZWQiaW4gdH0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT10fSx0LnByb3RvdHlwZS5fc2V0VXBkYXRlU3RyYXRlZ3k9ZnVuY3Rpb24odCl7VW0odCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX0sdH0oKSxRbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgaT10LmNhbGwodGhpcyxCbShuKSx6bShyLG4pKXx8dGhpcztyZXR1cm4gaS5fb25DaGFuZ2U9W10saS5fYXBwbHlGb3JtU3RhdGUoZSksaS5fc2V0VXBkYXRlU3RyYXRlZ3kobiksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSxpLl9pbml0T2JzZXJ2YWJsZXMoKSxpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09ZS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQobi52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucGF0Y2hWYWx1ZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnNldFZhbHVlKHQsZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMubWFya0FzUHJpc3RpbmUoZSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoZSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGUpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX2FueUNvbnRyb2xzPWZ1bmN0aW9uKHQpe3JldHVybiExfSxlLnByb3RvdHlwZS5fYWxsQ29udHJvbHNEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9LGUucHJvdG90eXBlLl9jbGVhckNoYW5nZUZucz1mdW5jdGlvbigpe3RoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKCl7fX0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaCh0KX0sZS5wcm90b3R5cGUuX2ZvckVhY2hDaGlsZD1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLl9zeW5jUGVuZGluZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX0sZS5wcm90b3R5cGUuX2FwcGx5Rm9ybVN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQm94ZWRWYWx1ZSh0KT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fSxlfShIbSkscW09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsQm0obiksem0ocixuKSl8fHRoaXM7cmV0dXJuIGkuY29udHJvbHM9ZSxpLl9pbml0T2JzZXJ2YWJsZXMoKSxpLl9zZXRVcGRhdGVTdHJhdGVneShuKSxpLl9zZXRVcENvbnRyb2xzKCksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSxpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLnJlZ2lzdGVyQ29udHJvbD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2xzW3RdP3RoaXMuY29udHJvbHNbdF06KHRoaXMuY29udHJvbHNbdF09ZSxlLnNldFBhcmVudCh0aGlzKSxlLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGUpfSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5zZXRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2NoZWNrQWxsVmFsdWVzUHJlc2VudCh0KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe24uX3Rocm93SWZDb250cm9sTWlzc2luZyhyKSxuLmNvbnRyb2xzW3JdLnNldFZhbHVlKHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfSxlLnByb3RvdHlwZS5wYXRjaFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT17fSksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtuLmNvbnRyb2xzW3JdJiZuLmNvbnRyb2xzW3JdLnBhdGNoVmFsdWUodFtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9e30pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24obixyKXtuLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSl9LGUucHJvdG90eXBlLmdldFJhd1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtuXT1lIGluc3RhbmNlb2YgUW0/ZS52YWx1ZTplLmdldFJhd1ZhbHVlKCksdH0pfSxlLnByb3RvdHlwZS5fc3luY1BlbmRpbmdDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLGZ1bmN0aW9uKHQsZSl7cmV0dXJuISFlLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fHR9KTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9LGUucHJvdG90eXBlLl90aHJvd0lmQ29udHJvbE1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIU9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBncm91cCB5ZXQuICBJZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICAgICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5leHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gICAgICAiKTtpZighdGhpcy5jb250cm9sc1t0XSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZvcm0gY29udHJvbCB3aXRoIG5hbWU6ICIrdCsiLiIpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gdChlLmNvbnRyb2xzW25dLG4pfSl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2xzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7ZS5zZXRQYXJlbnQodCksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodC5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9LGUucHJvdG90eXBlLl9hbnlDb250cm9scz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ITE7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihyLGkpe249bnx8ZS5jb250YWlucyhpKSYmdChyKX0pLG59LGUucHJvdG90eXBlLl9yZWR1Y2VWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4obi5lbmFibGVkfHx0LmRpc2FibGVkKSYmKGVbcl09bi52YWx1ZSksZX0pfSxlLnByb3RvdHlwZS5fcmVkdWNlQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10O3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCxyKXtuPWUobix0LHIpfSksbn0sZS5wcm90b3R5cGUuX2FsbENvbnRyb2xzRGlzYWJsZWQ9ZnVuY3Rpb24oKXt0cnl7Zm9yKHZhciB0PU9iamVjdChkLmUpKE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKSxlPXQubmV4dCgpOyFlLmRvbmU7ZT10Lm5leHQoKSlpZih0aGlzLmNvbnRyb2xzW2UudmFsdWVdLmVuYWJsZWQpcmV0dXJuITF9Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZSYmIWUuZG9uZSYmKHI9dC5yZXR1cm4pJiZyLmNhbGwodCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZDt2YXIgbixyfSxlLnByb3RvdHlwZS5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKCJNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAnIituKyInLiIpfSl9LGV9KEhtKSxHbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxCbShuKSx6bShyLG4pKXx8dGhpcztyZXR1cm4gaS5jb250cm9scz1lLGkuX2luaXRPYnNlcnZhYmxlcygpLGkuX3NldFVwZGF0ZVN0cmF0ZWd5KG4pLGkuX3NldFVwQ29udHJvbHMoKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pLGl9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF19LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9scy5wdXNoKHQpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbCh0KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9scy5zcGxpY2UodCwwLGUpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0sZS5wcm90b3R5cGUucmVtb3ZlQXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSxlLnByb3RvdHlwZS5zZXRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLGUmJih0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9scy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7bi5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKHIpLG4uYXQocikuc2V0VmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnBhdGNoVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0LmZvckVhY2goZnVuY3Rpb24odCxyKXtuLmF0KHIpJiZuLmF0KHIpLnBhdGNoVmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24obixyKXtuLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSl9LGUucHJvdG90eXBlLmdldFJhd1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUW0/dC52YWx1ZTp0LmdldFJhd1ZhbHVlKCl9KX0sZS5wcm90b3R5cGUuX3N5bmNQZW5kaW5nQ29udHJvbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRyb2xzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiEhZS5fc3luY1BlbmRpbmdDb250cm9scygpfHx0fSwhMSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fSxlLnByb3RvdHlwZS5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmNvbnRyb2xzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBhcnJheSB5ZXQuICBJZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICAgICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5leHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gICAgICAiKTtpZighdGhpcy5hdCh0KSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZvcm0gY29udHJvbCBhdCBpbmRleCAiK3QpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuY29udHJvbHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3QoZSxuKX0pfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudmFsdWU9dGhpcy5jb250cm9scy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZHx8dC5kaXNhYmxlZH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pfSxlLnByb3RvdHlwZS5fYW55Q29udHJvbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udHJvbHMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5lbmFibGVkJiZ0KGUpfSl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2xzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3JlZ2lzdGVyQ29udHJvbChlKX0pfSxlLnByb3RvdHlwZS5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKCJNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgYXQgaW5kZXg6ICIrbisiLiIpfSl9LGUucHJvdG90eXBlLl9hbGxDb250cm9sc0Rpc2FibGVkPWZ1bmN0aW9uKCl7dHJ5e2Zvcih2YXIgdD1PYmplY3QoZC5lKSh0aGlzLmNvbnRyb2xzKSxlPXQubmV4dCgpOyFlLmRvbmU7ZT10Lm5leHQoKSlpZihlLnZhbHVlLmVuYWJsZWQpcmV0dXJuITF9Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZSYmIWUuZG9uZSYmKHI9dC5yZXR1cm4pJiZyLmNhbGwodCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkO3ZhciBuLHJ9LGUucHJvdG90eXBlLl9yZWdpc3RlckNvbnRyb2w9ZnVuY3Rpb24odCl7dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0sZX0oSG0pLFltPVByb21pc2UucmVzb2x2ZShudWxsKSxXbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnN1Ym1pdHRlZD0hMSxyLl9kaXJlY3RpdmVzPVtdLHIubmdTdWJtaXQ9bmV3IG8ubixyLmZvcm09bmV3IHFtKHt9LE1tKGUpLE5tKG4pKSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9ybURpcmVjdGl2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29udHJvbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9scyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1ltLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7dC5jb250cm9sPW4ucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLFRtKHQuY29udHJvbCx0KSx0LmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5fZGlyZWN0aXZlcy5wdXNoKHQpfSl9LGUucHJvdG90eXBlLmdldENvbnRyb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1ltLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7biYmbi5yZW1vdmVDb250cm9sKHQubmFtZSksRm0oZS5fZGlyZWN0aXZlcyx0KX0pfSxlLnByb3RvdHlwZS5hZGRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztZbS50aGVuKGZ1bmN0aW9uKCl7dmFyIG49ZS5fZmluZENvbnRhaW5lcih0LnBhdGgpLHI9bmV3IHFtKHt9KTtBbShyLHQpLG4ucmVnaXN0ZXJDb250cm9sKHQubmFtZSxyKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9LGUucHJvdG90eXBlLnJlbW92ZUZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1ltLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7biYmbi5yZW1vdmVDb250cm9sKHQubmFtZSl9KX0sZS5wcm90b3R5cGUuZ2V0Rm9ybUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnVwZGF0ZU1vZGVsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztZbS50aGVuKGZ1bmN0aW9uKCl7bi5mb3JtLmdldCh0LnBhdGgpLnNldFZhbHVlKGUpfSl9LGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuY29udHJvbC5zZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUub25TdWJtaXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLERtKHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQodCksITF9LGUucHJvdG90eXBlLm9uUmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0Rm9ybSgpfSxlLnByb3RvdHlwZS5yZXNldEZvcm09ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx0aGlzLmZvcm0ucmVzZXQodCksdGhpcy5zdWJtaXR0ZWQ9ITF9LGUucHJvdG90eXBlLl9zZXRVcGRhdGVTdHJhdGVneT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfSxlLnByb3RvdHlwZS5fZmluZENvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3AoKSx0Lmxlbmd0aD90aGlzLmZvcm0uZ2V0KHQpOnRoaXMuZm9ybX0sZX0oaW0pLFptPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5tb2RlbFBhcmVudEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignXG4gICAgICBuZ01vZGVsIGNhbm5vdCBiZSB1c2VkIHRvIHJlZ2lzdGVyIGZvcm0gY29udHJvbHMgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgVHJ5IHVzaW5nXG4gICAgICBmb3JtR3JvdXBcJ3MgcGFydG5lciBkaXJlY3RpdmUgImZvcm1Db250cm9sTmFtZSIgaW5zdGVhZC4gIEV4YW1wbGU6XG5cbiAgICAgICcrQ20rJ1xuXG4gICAgICBPciwgaWYgeW91XCdkIGxpa2UgdG8gYXZvaWQgcmVnaXN0ZXJpbmcgdGhpcyBmb3JtIGNvbnRyb2wsIGluZGljYXRlIHRoYXQgaXRcJ3Mgc3RhbmRhbG9uZSBpbiBuZ01vZGVsT3B0aW9uczpcblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09InNob3dNb3JlQ29udHJvbHMiIFtuZ01vZGVsT3B0aW9uc109IntzdGFuZGFsb25lOiB0cnVlfSI+XG4gICAgPC9kaXY+XG4gICcpfSx0LmZvcm1Hcm91cE5hbWVFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgbmdNb2RlbCBjYW5ub3QgYmUgdXNlZCB0byByZWdpc3RlciBmb3JtIGNvbnRyb2xzIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwTmFtZSBvciBmb3JtQXJyYXlOYW1lIGRpcmVjdGl2ZS5cblxuICAgICAgT3B0aW9uIDE6IFVzZSBmb3JtQ29udHJvbE5hbWUgaW5zdGVhZCBvZiBuZ01vZGVsIChyZWFjdGl2ZSBzdHJhdGVneSk6XG5cbiAgICAgICIrRW0rIlxuXG4gICAgICBPcHRpb24gMjogIFVwZGF0ZSBuZ01vZGVsJ3MgcGFyZW50IGJlIG5nTW9kZWxHcm91cCAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KTpcblxuICAgICAgIitPbSl9LHQubWlzc2luZ05hbWVFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0lmIG5nTW9kZWwgaXMgdXNlZCB3aXRoaW4gYSBmb3JtIHRhZywgZWl0aGVyIHRoZSBuYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCBvciB0aGUgZm9ybVxuICAgICAgY29udHJvbCBtdXN0IGJlIGRlZmluZWQgYXMgXCdzdGFuZGFsb25lXCcgaW4gbmdNb2RlbE9wdGlvbnMuXG5cbiAgICAgIEV4YW1wbGUgMTogPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24uZmlyc3ROYW1lIiBuYW1lPSJmaXJzdCI+XG4gICAgICBFeGFtcGxlIDI6IDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLmZpcnN0TmFtZSIgW25nTW9kZWxPcHRpb25zXT0ie3N0YW5kYWxvbmU6IHRydWV9Ij4nKX0sdC5tb2RlbEdyb3VwUGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJcbiAgICAgIG5nTW9kZWxHcm91cCBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuXG5cbiAgICAgIE9wdGlvbiAxOiBVc2UgZm9ybUdyb3VwTmFtZSBpbnN0ZWFkIG9mIG5nTW9kZWxHcm91cCAocmVhY3RpdmUgc3RyYXRlZ3kpOlxuXG4gICAgICAiK0VtKyJcblxuICAgICAgT3B0aW9uIDI6ICBVc2UgYSByZWd1bGFyIGZvcm0gdGFnIGluc3RlYWQgb2YgdGhlIGZvcm1Hcm91cCBkaXJlY3RpdmUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSk6XG5cbiAgICAgICIrT20pfSx0fSgpLEttPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fcGFyZW50PWUsaS5fdmFsaWRhdG9ycz1uLGkuX2FzeW5jVmFsaWRhdG9ycz1yLGl9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuX2NoZWNrUGFyZW50VHlwZT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGV8fHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIFdtfHxabS5tb2RlbEdyb3VwUGFyZW50RXhjZXB0aW9uKCl9LGV9KExtKSxYbT1Qcm9taXNlLnJlc29sdmUobnVsbCksJG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgYT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGEuY29udHJvbD1uZXcgUW0sYS5fcmVnaXN0ZXJlZD0hMSxhLnVwZGF0ZT1uZXcgby5uLGEuX3BhcmVudD1lLGEuX3Jhd1ZhbGlkYXRvcnM9bnx8W10sYS5fcmF3QXN5bmNWYWxpZGF0b3JzPXJ8fFtdLGEudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiBudWxsO0FycmF5LmlzQXJyYXkoZSl8fEltKHQsIlZhbHVlIGFjY2Vzc29yIHdhcyBub3QgcHJvdmlkZWQgYXMgYW4gYXJyYXkgZm9yIGZvcm0gY29udHJvbCB3aXRoIik7dmFyIG49dm9pZCAwLHI9dm9pZCAwLGk9dm9pZCAwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG87ZS5jb25zdHJ1Y3Rvcj09PWRtP249ZToobz1lLFJtLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RydWN0b3I9PT10fSk/KHImJkltKHQsIk1vcmUgdGhhbiBvbmUgYnVpbHQtaW4gdmFsdWUgYWNjZXNzb3IgbWF0Y2hlcyBmb3JtIGNvbnRyb2wgd2l0aCIpLHI9ZSk6KGkmJkltKHQsIk1vcmUgdGhhbiBvbmUgY3VzdG9tIHZhbHVlIGFjY2Vzc29yIG1hdGNoZXMgZm9ybSBjb250cm9sIHdpdGgiKSxpPWUpKX0pLGl8fHJ8fG58fChJbSh0LCJObyB2YWxpZCB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSxudWxsKX0oYSxpKSxhfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2NoZWNrRm9yRXJyb3JzKCksdGhpcy5fcmVnaXN0ZXJlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksImlzRGlzYWJsZWQiaW4gdCYmdGhpcy5fdXBkYXRlRGlzYWJsZWQodCksZnVuY3Rpb24odCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTt2YXIgbj10Lm1vZGVsO3JldHVybiEhbi5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3Qoby5XYSkoZSxuLmN1cnJlbnRWYWx1ZSl9KHQsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudD9rbSh0aGlzLm5hbWUsdGhpcy5fcGFyZW50KTpbdGhpcy5uYW1lXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWxpZGF0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTW0odGhpcy5fcmF3VmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBObSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnZpZXdUb01vZGVsVXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlld01vZGVsPXQsdGhpcy51cGRhdGUuZW1pdCh0KX0sZS5wcm90b3R5cGUuX3NldFVwQ29udHJvbD1mdW5jdGlvbigpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH0sZS5wcm90b3R5cGUuX3NldFVwZGF0ZVN0cmF0ZWd5PWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9LGUucHJvdG90eXBlLl9pc1N0YW5kYWxvbmU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9LGUucHJvdG90eXBlLl9zZXRVcFN0YW5kYWxvbmU9ZnVuY3Rpb24oKXtUbSh0aGlzLmNvbnRyb2wsdGhpcyksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5fY2hlY2tGb3JFcnJvcnM9ZnVuY3Rpb24oKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9LGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5cGU9ZnVuY3Rpb24oKXshKHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEttKSYmdGhpcy5fcGFyZW50IGluc3RhbmNlb2YgTG0/Wm0uZm9ybUdyb3VwTmFtZUV4Y2VwdGlvbigpOnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEttfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBXbXx8Wm0ubW9kZWxQYXJlbnRFeGNlcHRpb24oKX0sZS5wcm90b3R5cGUuX2NoZWNrTmFtZT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLm5hbWV8fFptLm1pc3NpbmdOYW1lRXhjZXB0aW9uKCl9LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1htLnRoZW4oZnVuY3Rpb24oKXtlLmNvbnRyb2wuc2V0VmFsdWUodCx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSl9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZURpc2FibGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmlzRGlzYWJsZWQuY3VycmVudFZhbHVlLHI9IiI9PT1ufHxuJiYiZmFsc2UiIT09bjtYbS50aGVuKGZ1bmN0aW9uKCl7ciYmIWUuY29udHJvbC5kaXNhYmxlZD9lLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZlLmNvbnRyb2wuZGlzYWJsZWQmJmUuY29udHJvbC5lbmFibGUoKX0pfSxlfShibSksSm09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdmFsaWRhdG9ycz1lLHIuX2FzeW5jVmFsaWRhdG9ycz1uLHIuc3VibWl0dGVkPSExLHIuZGlyZWN0aXZlcz1bXSxyLmZvcm09bnVsbCxyLm5nU3VibWl0PW5ldyBvLm4scn1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksdC5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtyZXR1cm4gVG0oZSx0KSxlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuZGlyZWN0aXZlcy5wdXNoKHQpLGV9LGUucHJvdG90eXBlLmdldENvbnRyb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXtGbSh0aGlzLmRpcmVjdGl2ZXMsdCl9LGUucHJvdG90eXBlLmFkZEZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7QW0oZSx0KSxlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5yZW1vdmVGb3JtR3JvdXA9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5nZXRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUuYWRkRm9ybUFycmF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtBbShlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9LGUucHJvdG90eXBlLnJlbW92ZUZvcm1BcnJheT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmdldEZvcm1BcnJheT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS51cGRhdGVNb2RlbD1mdW5jdGlvbih0LGUpe3RoaXMuZm9ybS5nZXQodC5wYXRoKS5zZXRWYWx1ZShlKX0sZS5wcm90b3R5cGUub25TdWJtaXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLERtKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX0sZS5wcm90b3R5cGUub25SZXNldD1mdW5jdGlvbigpe3RoaXMucmVzZXRGb3JtKCl9LGUucHJvdG90eXBlLnJlc2V0Rm9ybT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD12b2lkIDApLHRoaXMuZm9ybS5yZXNldCh0KSx0aGlzLnN1Ym1pdHRlZD0hMX0sZS5wcm90b3R5cGUuX3VwZGF0ZURvbVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRpcmVjdGl2ZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmZvcm0uZ2V0KGUucGF0aCk7ZS5jb250cm9sIT09biYmKGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gam0oZSl9KSxlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoZnVuY3Rpb24oKXtyZXR1cm4gam0oZSl9KSxlLl9yYXdWYWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZ0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UobnVsbCl9KSxlLl9yYXdBc3luY1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJnQucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShudWxsKX0pLHQmJnQuX2NsZWFyQ2hhbmdlRm5zKCl9KGUuY29udHJvbCxlKSxuJiZUbShuLGUpLGUuY29udHJvbD1uKX0pLHRoaXMuZm9ybS5fdXBkYXRlVHJlZVZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZVJlZ2lzdHJhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gdC5fdXBkYXRlRG9tVmFsdWUoKX0pLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7fSksdGhpcy5fb2xkRm9ybT10aGlzLmZvcm19LGUucHJvdG90eXBlLl91cGRhdGVWYWxpZGF0b3JzPWZ1bmN0aW9uKCl7dmFyIHQ9TW0odGhpcy5fdmFsaWRhdG9ycyk7dGhpcy5mb3JtLnZhbGlkYXRvcj1zbS5jb21wb3NlKFt0aGlzLmZvcm0udmFsaWRhdG9yLHRdKTt2YXIgZT1ObSh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpO3RoaXMuZm9ybS5hc3luY1ZhbGlkYXRvcj1zbS5jb21wb3NlQXN5bmMoW3RoaXMuZm9ybS5hc3luY1ZhbGlkYXRvcixlXSl9LGUucHJvdG90eXBlLl9jaGVja0Zvcm1QcmVzZW50PWZ1bmN0aW9uKCl7dGhpcy5mb3JtfHxTbS5taXNzaW5nRm9ybUV4Y2VwdGlvbigpfSxlfShpbSksdHk9ZnVuY3Rpb24oKXt9LGV5PWZ1bmN0aW9uKCl7fSxueT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuaHR0cD10LHRoaXMucm91dGU9ZSx0aGlzLnJvdXRlcj1uLHRoaXMucmVtb3RlQ29udGVudD0iTG9hZGluZy4uLiIsdGhpcy53aWtpUGFnZVRpdGxlPSJMb2FkaW5nLi4uIix0aGlzLmZpZWxkUGFnZVBhdGg9IiJ9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZShmdW5jdGlvbihlKXtyZXR1cm4gdC5jaGVja0ZvclBhZ2VQYXRoKGUpfSl9LHQucHJvdG90eXBlLmNoZWNrRm9yUGFnZVBhdGg9ZnVuY3Rpb24odCl7dC5oYXMoInBhZ2VwYXRoIik/KHRoaXMuZmV0Y2hXaWtpUGFnZSh0LmdldCgicGFnZXBhdGgiKSksdGhpcy5maWVsZFBhZ2VQYXRoPXQuZ2V0KCJwYWdlcGF0aCIpKToodGhpcy5mZXRjaFdpa2lQYWdlKCJUZWFtTWFpblBhZ2UiKSx0aGlzLmZpZWxkUGFnZVBhdGg9IlRlYW1NYWluUGFnZSIpfSx0LnByb3RvdHlwZS5mZXRjaFdpa2lQYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5odHRwLmdldCgiaHR0cDovLzIwMTguaWdlbS5vcmcvVGVhbTpHT19QYXJpcy1TYWNsYXkvIit0LHtyZXNwb25zZVR5cGU6InRleHQifSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2Nlc3NDb250ZW50KHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2codCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc0NvbnRlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI8dGl0bGU+VGVhbTpHTyBQYXJpcy1TYWNsYXkvIiksbj10LmluZGV4T2YoIiAtIDIwMTguaWdlbS5vcmc8L3RpdGxlPiIpO3RoaXMud2lraVBhZ2VUaXRsZT10LnNsaWNlKGUrIjx0aXRsZT5UZWFtOkdPIFBhcmlzLVNhY2xheS8iLmxlbmd0aCxuKTt2YXIgcj10LmluZGV4T2YoJzxkaXYgaWQ9IkhRX3BhZ2UiPicpLGk9dC5pbmRleE9mKCc8ZGl2IGNsYXNzPSJ2aXN1YWxDbGVhciI+PC9kaXY+Jyksbz10LnNsaWNlKHIsaSk7bz1vLnJlcGxhY2UobmV3IFJlZ0V4cCgnaHJlZj0iXFwvVGVhbTpHT19QYXJpcy1TYWNsYXlcXC8nLCJnIiksJzxhIGhyZWY9IiMvd2lraS1scC8nKSx0aGlzLnJlbW90ZUNvbnRlbnQ9b30sdC5wcm90b3R5cGUuZ29Ub0ZpbGxlZFBhZ2U9ZnVuY3Rpb24oKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZShbIi93aWtpLWxwLyIrdGhpcy5maWVsZFBhZ2VQYXRoXSl9LHQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe30sdH0oKSxyeT1uKCJQaGpuIiksaXk9ZnVuY3Rpb24oKXt9LG95PWZ1bmN0aW9uKCl7fSxheT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLm5vcm1hbGl6ZWROYW1lcz1uZXcgTWFwLHRoaXMubGF6eVVwZGF0ZT1udWxsLHQ/dGhpcy5sYXp5SW5pdD0ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCx0LnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5pbmRleE9mKCI6Iik7aWYobj4wKXt2YXIgcj10LnNsaWNlKDAsbiksaT1yLnRvTG93ZXJDYXNlKCksbz10LnNsaWNlKG4rMSkudHJpbSgpO2UubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLGkpLGUuaGVhZGVycy5oYXMoaSk/ZS5oZWFkZXJzLmdldChpKS5wdXNoKG8pOmUuaGVhZGVycy5zZXQoaSxbb10pfX0pfTpmdW5jdGlvbigpe2UuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9dFtuXSxpPW4udG9Mb3dlckNhc2UoKTsic3RyaW5nIj09dHlwZW9mIHImJihyPVtyXSksci5sZW5ndGg+MCYmKGUuaGVhZGVycy5zZXQoaSxyKSxlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobixpKSl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9LHQucHJvdG90eXBlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWU9ZnVuY3Rpb24odCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5VXBkYXRlKHQpfSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX0sdC5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmluaXQoKSxBcnJheS5mcm9tKHQuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7ZS5oZWFkZXJzLnNldChuLHQuaGVhZGVycy5nZXQobikpLGUubm9ybWFsaXplZE5hbWVzLnNldChuLHQubm9ybWFsaXplZE5hbWVzLmdldChuKSl9KX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4ubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5sYXp5SW5pdDp0aGlzLG4ubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtlXSksbn0sdC5wcm90b3R5cGUuYXBwbHlVcGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjp2YXIgbj10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmKG49W25dKSwwPT09bi5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7dmFyIHI9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtyLnB1c2guYXBwbHkocixPYmplY3QoZC5kKShuKSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6dmFyIGk9dC52YWx1ZTtpZihpKXt2YXIgbz10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFvKXJldHVybjswPT09KG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1pLmluZGV4T2YodCl9KSkubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKSk6dGhpcy5oZWFkZXJzLnNldChlLG8pfWVsc2UgdGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQoZS5ub3JtYWxpemVkTmFtZXMuZ2V0KG4pLGUuaGVhZGVycy5nZXQobikpfSl9LHR9KCksc3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGx5KHQpfSx0LnByb3RvdHlwZS5lbmNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbHkodCl9LHQucHJvdG90eXBlLmRlY29kZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0LnByb3RvdHlwZS5kZWNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0fSgpO2Z1bmN0aW9uIGx5KHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2dpLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2dpLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTNCL2dpLCI7IikucmVwbGFjZSgvJTJCL2dpLCIrIikucmVwbGFjZSgvJTNEL2dpLCI9IikucmVwbGFjZSgvJTNGL2dpLCI/IikucmVwbGFjZSgvJTJGL2dpLCIvIil9dmFyIHV5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGUsbixyLGk9dGhpcztpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBzeSx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD0oZT10LmZyb21TdHJpbmcsbj10aGlzLmVuY29kZXIscj1uZXcgTWFwLGUubGVuZ3RoPjAmJmUuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiPSIpLGk9T2JqZWN0KGQuYykoLTE9PWU/W24uZGVjb2RlS2V5KHQpLCIiXTpbbi5kZWNvZGVLZXkodC5zbGljZSgwLGUpKSxuLmRlY29kZVZhbHVlKHQuc2xpY2UoZSsxKSldLDIpLG89aVswXSxhPWlbMV0scz1yLmdldChvKXx8W107cy5wdXNoKGEpLHIuc2V0KG8scyl9KSxyKX1lbHNlIHQuZnJvbU9iamVjdD8odGhpcy5tYXA9bmV3IE1hcCxPYmplY3Qua2V5cyh0LmZyb21PYmplY3QpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5mcm9tT2JqZWN0W2VdO2kubWFwLnNldChlLEFycmF5LmlzQXJyYXkobik/bjpbbl0pfSkpOnRoaXMubWFwPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBlP2VbMF06bnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJhIn0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChmdW5jdGlvbihlKXt2YXIgbj10LmVuY29kZXIuZW5jb2RlS2V5KGUpO3JldHVybiB0Lm1hcC5nZXQoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuKyI9Iit0LmVuY29kZXIuZW5jb2RlVmFsdWUoZSl9KS5qb2luKCImIil9KS5qb2luKCImIil9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBuLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxuLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXAuc2V0KGUsdC5jbG9uZUZyb20ubWFwLmdldChlKSl9KSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbihlKXtzd2l0Y2goZS5vcCl7Y2FzZSJhIjpjYXNlInMiOnZhciBuPSgiYSI9PT1lLm9wP3QubWFwLmdldChlLnBhcmFtKTp2b2lkIDApfHxbXTtuLnB1c2goZS52YWx1ZSksdC5tYXAuc2V0KGUucGFyYW0sbik7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1lLnZhbHVlKXt0Lm1hcC5kZWxldGUoZS5wYXJhbSk7YnJlYWt9dmFyIHI9dC5tYXAuZ2V0KGUucGFyYW0pfHxbXSxpPXIuaW5kZXhPZihlLnZhbHVlKTstMSE9PWkmJnIuc3BsaWNlKGksMSksci5sZW5ndGg+MD90Lm1hcC5zZXQoZS5wYXJhbSxyKTp0Lm1hcC5kZWxldGUoZS5wYXJhbSl9fSksdGhpcy5jbG9uZUZyb209bnVsbCl9LHR9KCk7ZnVuY3Rpb24gY3kodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIGZ5KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmdCBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gaHkodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmdCBpbnN0YW5jZW9mIEZvcm1EYXRhfXZhciBweT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk7aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fHI/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxpPXIpOmk9bixpJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWkucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFpLndpdGhDcmVkZW50aWFscyxpLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWkucmVzcG9uc2VUeXBlKSxpLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9aS5oZWFkZXJzKSxpLnBhcmFtcyYmKHRoaXMucGFyYW1zPWkucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBheSksdGhpcy5wYXJhbXMpe3ZhciBvPXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PW8ubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1lO2Vsc2V7dmFyIGE9ZS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWUrKC0xPT09YT8iPyI6YTxlLmxlbmd0aC0xPyImIjoiIikrb319ZWxzZSB0aGlzLnBhcmFtcz1uZXcgdXksdGhpcy51cmxXaXRoUGFyYW1zPWV9cmV0dXJuIHQucHJvdG90eXBlLnNlcmlhbGl6ZUJvZHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmN5KHRoaXMuYm9keSl8fGZ5KHRoaXMuYm9keSl8fGh5KHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiB1eT90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmh5KHRoaXMuYm9keSk/bnVsbDpmeSh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOmN5KHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgdXk/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPWUubWV0aG9kfHx0aGlzLm1ldGhvZCxyPWUudXJsfHx0aGlzLnVybCxpPWUucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxvPXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6dGhpcy5ib2R5LGE9dm9pZCAwIT09ZS53aXRoQ3JlZGVudGlhbHM/ZS53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMscz12b2lkIDAhPT1lLnJlcG9ydFByb2dyZXNzP2UucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcyxsPWUuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHU9ZS5wYXJhbXN8fHRoaXMucGFyYW1zO3JldHVybiB2b2lkIDAhPT1lLnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKGUuc2V0SGVhZGVycykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRIZWFkZXJzW25dKX0sbCkpLGUuc2V0UGFyYW1zJiYodT1PYmplY3Qua2V5cyhlLnNldFBhcmFtcykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRQYXJhbXNbbl0pfSx1KSksbmV3IHQobixyLG8se3BhcmFtczp1LGhlYWRlcnM6bCxyZXBvcnRQcm9ncmVzczpzLHJlc3BvbnNlVHlwZTppLHdpdGhDcmVkZW50aWFsczphfSl9LHR9KCksZHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5TZW50PTBdPSJTZW50Iix0W3QuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIix0W3QuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsdFt0LlVzZXI9NV09IlVzZXIiLHR9KHt9KSxteT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MjAwKSx2b2lkIDA9PT1uJiYobj0iT0siKSx0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgYXksdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxuLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0oKSx5eT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPWR5LlJlc3BvbnNlSGVhZGVyLG59cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxuZXcgZSh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0obXkpLGd5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLnR5cGU9ZHkuUmVzcG9uc2Usbi5ib2R5PXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6bnVsbCxufXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0obXkpLHZ5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSwwLCJVbmtub3duIEVycm9yIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLG4ub2s9ITEsbi5tZXNzYWdlPW4uc3RhdHVzPj0yMDAmJm4uc3RhdHVzPDMwMD8iSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKToiSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKSsiOiAiK2Uuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQsbi5lcnJvcj1lLmVycm9yfHxudWxsLG59cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0obXkpO2Z1bmN0aW9uIGJ5KHQsZSl7cmV0dXJue2JvZHk6ZSxoZWFkZXJzOnQuaGVhZGVycyxvYnNlcnZlOnQub2JzZXJ2ZSxwYXJhbXM6dC5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6dC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOnQud2l0aENyZWRlbnRpYWxzfX12YXIgX3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuaGFuZGxlcj10fXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRoaXM7aWYodm9pZCAwPT09biYmKG49e30pLHQgaW5zdGFuY2VvZiBweSlyPXQ7ZWxzZXt2YXIgbztvPW4uaGVhZGVycyBpbnN0YW5jZW9mIGF5P24uaGVhZGVyczpuZXcgYXkobi5oZWFkZXJzKTt2YXIgYT12b2lkIDA7bi5wYXJhbXMmJihhPW4ucGFyYW1zIGluc3RhbmNlb2YgdXk/bi5wYXJhbXM6bmV3IHV5KHtmcm9tT2JqZWN0Om4ucGFyYW1zfSkpLHI9bmV3IHB5KHQsZSx2b2lkIDAhPT1uLmJvZHk/bi5ib2R5Om51bGwse2hlYWRlcnM6byxwYXJhbXM6YSxyZXBvcnRQcm9ncmVzczpuLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc30pfXZhciBzPU9iamVjdChJLmEpKHIpLnBpcGUoT2JqZWN0KHJ5LmEpKGZ1bmN0aW9uKHQpe3JldHVybiBpLmhhbmRsZXIuaGFuZGxlKHQpfSkpO2lmKHQgaW5zdGFuY2VvZiBweXx8ImV2ZW50cyI9PT1uLm9ic2VydmUpcmV0dXJuIHM7dmFyIGw9cy5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGd5fSkpO3N3aXRjaChuLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goci5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBsLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBsLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBsLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImpzb24iOmRlZmF1bHQ6cmV0dXJuIGwucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5ib2R5fSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBsO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAiK24ub2JzZXJ2ZSsifSIpfX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkRFTEVURSIsdCxlKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkdFVCIsdCxlKX0sdC5wcm90b3R5cGUuaGVhZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfSx0LnByb3RvdHlwZS5qc29ucD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIix0LHtwYXJhbXM6KG5ldyB1eSkuYXBwZW5kKGUsIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfSx0LnByb3RvdHlwZS5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIk9QVElPTlMiLHQsZSl9LHQucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUEFUQ0giLHQsYnkobixlKSl9LHQucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQT1NUIix0LGJ5KG4sZSkpfSx0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQVVQiLHQsYnkobixlKSl9LHR9KCksd3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5uZXh0PXQsdGhpcy5pbnRlcmNlcHRvcj1lfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX0sdH0oKSx4eT1uZXcgby5wKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLEN5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaGFuZGxlKHQpfSx0fSgpLEV5PS9eXClcXVx9Jyw/XG4vLE95PWZ1bmN0aW9uKCl7fSxTeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdH0oKSxreT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy54aHJGYWN0b3J5PXR9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJKU09OUCI9PT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEpzb25wQ2xpZW50TW9kdWxlIGluc3RhbGxlZC4iKTtyZXR1cm4gbmV3IEUuYShmdW5jdGlvbihuKXt2YXIgcj1lLnhockZhY3RvcnkuYnVpbGQoKTtpZihyLm9wZW4odC5tZXRob2QsdC51cmxXaXRoUGFyYW1zKSx0LndpdGhDcmVkZW50aWFscyYmKHIud2l0aENyZWRlbnRpYWxzPSEwKSx0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIodCxlLmpvaW4oIiwiKSl9KSx0LmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8ci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiKSwhdC5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIikpe3ZhciBpPXQuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09aSYmci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGkpfWlmKHQucmVzcG9uc2VUeXBlKXt2YXIgbz10LnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO3IucmVzcG9uc2VUeXBlPSJqc29uIiE9PW8/bzoidGV4dCJ9dmFyIGE9dC5zZXJpYWxpemVCb2R5KCkscz1udWxsLGw9ZnVuY3Rpb24oKXtpZihudWxsIT09cylyZXR1cm4gczt2YXIgZT0xMjIzPT09ci5zdGF0dXM/MjA0OnIuc3RhdHVzLG49ci5zdGF0dXNUZXh0fHwiT0siLGk9bmV3IGF5KHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG89ZnVuY3Rpb24odCl7cmV0dXJuInJlc3BvbnNlVVJMImluIHQmJnQucmVzcG9uc2VVUkw/dC5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdCh0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT90LmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0ocil8fHQudXJsO3JldHVybiBzPW5ldyB5eSh7aGVhZGVyczppLHN0YXR1czplLHN0YXR1c1RleHQ6bix1cmw6b30pfSx1PWZ1bmN0aW9uKCl7dmFyIGU9bCgpLGk9ZS5oZWFkZXJzLG89ZS5zdGF0dXMsYT1lLnN0YXR1c1RleHQscz1lLnVybCx1PW51bGw7MjA0IT09byYmKHU9dm9pZCAwPT09ci5yZXNwb25zZT9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09byYmKG89dT8yMDA6MCk7dmFyIGM9bz49MjAwJiZvPDMwMDtpZigianNvbiI9PT10LnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiB1KXt2YXIgZj11O3U9dS5yZXBsYWNlKEV5LCIiKTt0cnl7dT0iIiE9PXU/SlNPTi5wYXJzZSh1KTpudWxsfWNhdGNoKHQpe3U9ZixjJiYoYz0hMSx1PXtlcnJvcjp0LHRleHQ6dX0pfX1jPyhuLm5leHQobmV3IGd5KHtib2R5OnUsaGVhZGVyczppLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpLG4uY29tcGxldGUoKSk6bi5lcnJvcihuZXcgdnkoe2Vycm9yOnUsaGVhZGVyczppLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB2eSh7ZXJyb3I6dCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIn0pO24uZXJyb3IoZSl9LGY9ITEsaD1mdW5jdGlvbihlKXtmfHwobi5uZXh0KGwoKSksZj0hMCk7dmFyIGk9e3R5cGU6ZHkuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6ZS5sb2FkZWR9O2UubGVuZ3RoQ29tcHV0YWJsZSYmKGkudG90YWw9ZS50b3RhbCksInRleHQiPT09dC5yZXNwb25zZVR5cGUmJnIucmVzcG9uc2VUZXh0JiYoaS5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksbi5uZXh0KGkpfSxwPWZ1bmN0aW9uKHQpe3ZhciBlPXt0eXBlOmR5LlVwbG9hZFByb2dyZXNzLGxvYWRlZDp0LmxvYWRlZH07dC5sZW5ndGhDb21wdXRhYmxlJiYoZS50b3RhbD10LnRvdGFsKSxuLm5leHQoZSl9O3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHQucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKGEpLG4ubmV4dCh7dHlwZTpkeS5TZW50fSksZnVuY3Rpb24oKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHUpLHQucmVwb3J0UHJvZ3Jlc3MmJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmci51cGxvYWQmJnIudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5hYm9ydCgpfX0pfSx0fSgpLFR5PW5ldyBvLnAoIlhTUkZfQ09PS0lFX05BTUUiKSxQeT1uZXcgby5wKCJYU1JGX0hFQURFUl9OQU1FIiksQXk9ZnVuY3Rpb24oKXt9LGp5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIHQhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1PYmplY3Qocy51KSh0LHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPXQpLHRoaXMubGFzdFRva2VufSx0fSgpLEl5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudG9rZW5TZXJ2aWNlPXQsdGhpcy5oZWFkZXJOYW1lPWV9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQudXJsLnRvTG93ZXJDYXNlKCk7aWYoIkdFVCI9PT10Lm1ldGhvZHx8IkhFQUQiPT09dC5tZXRob2R8fG4uc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxuLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIGUuaGFuZGxlKHQpO3ZhciByPXRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuKCk7cmV0dXJuIG51bGw9PT1yfHx0LmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSl8fCh0PXQuY2xvbmUoe2hlYWRlcnM6dC5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUscil9KSksZS5oYW5kbGUodCl9LHR9KCksTXk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5iYWNrZW5kPXQsdGhpcy5pbmplY3Rvcj1lLHRoaXMuY2hhaW49bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10aGlzLmNoYWluKXt2YXIgZT10aGlzLmluamVjdG9yLmdldCh4eSxbXSk7dGhpcy5jaGFpbj1lLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB3eSh0LGUpfSx0aGlzLmJhY2tlbmQpfXJldHVybiB0aGlzLmNoYWluLmhhbmRsZSh0KX0sdH0oKSxOeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGlzYWJsZT1mdW5jdGlvbigpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6SXksdXNlQ2xhc3M6Q3l9XX19LHQud2l0aE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTpUeSx1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTpQeSx1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19LHR9KCksUnk9ZnVuY3Rpb24oKXt9LER5PW4oIlpZQ2kiKSxGeT1vLk9hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNsaWdodHByb3h5Y29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJlbX0uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9Lndpa2lscC1hY2Nlc3MtY2FyZFtfbmdjb250ZW50LSVDT01QJV0sIC53aWtpbHAtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwfSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTHkodCl7cmV0dXJuIG8ua2IoMCxbby5jYigwLFVwLFtoZS5jXSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwzNSwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDIsMCxudWxsLG51bGwsMTgsIm1hdC1jYXJkIixbWyJjbGFzcyIsIndpa2lscC1hY2Nlc3MtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoMyw0OTE1MixudWxsLDAsRmksW10sbnVsbCxudWxsKSwodCgpKCksby5RYSg0LDAsbnVsbCwwLDE2LCJtYXQtY2FyZC1jb250ZW50IixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkLWNvbnRlbnQgbWF0LWNhcmQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDUsMTYzODQsbnVsbCwwLFJpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoNiwwLG51bGwsbnVsbCwxNCwiZGl2IixbWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJsZWZ0Il0sWyJmeExheW91dEdhcCIsIjAuNSUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg3LDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il0sbGF5b3V0WHM6WzEsImxheW91dFhzIl19LG51bGwpLG8uUGEoOCwxNzg1ODU2LG51bGwsMCxMZCxbZ2Qsby5rLFs2LEZkXSxvLnksY2UsYmRdLHtnYXA6WzAsImdhcCJdfSxudWxsKSxvLlBhKDksNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgxMCwwLG51bGwsbnVsbCw3LCJpbnB1dCIsW1siY2xhc3MiLCJtYXQtaW5wdXQtZWxlbWVudCBtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIl0sWyJtYXRJbnB1dCIsIiJdLFsicGxhY2Vob2xkZXIiLCJQYWdlIHBhdGgiXV0sW1syLCJuZy11bnRvdWNoZWQiLG51bGxdLFsyLCJuZy10b3VjaGVkIixudWxsXSxbMiwibmctcHJpc3RpbmUiLG51bGxdLFsyLCJuZy1kaXJ0eSIsbnVsbF0sWzIsIm5nLXZhbGlkIixudWxsXSxbMiwibmctaW52YWxpZCIsbnVsbF0sWzIsIm5nLXBlbmRpbmciLG51bGxdLFsyLCJtYXQtaW5wdXQtc2VydmVyIixudWxsXSxbMSwiaWQiLDBdLFsxLCJwbGFjZWhvbGRlciIsMF0sWzgsImRpc2FibGVkIiwwXSxbOCwicmVxdWlyZWQiLDBdLFs4LCJyZWFkT25seSIsMF0sWzEsImFyaWEtZGVzY3JpYmVkYnkiLDBdLFsxLCJhcmlhLWludmFsaWQiLDBdLFsxLCJhcmlhLXJlcXVpcmVkIiwwXV0sW1tudWxsLCJuZ01vZGVsQ2hhbmdlIl0sW251bGwsImlucHV0Il0sW251bGwsImJsdXIiXSxbbnVsbCwiY29tcG9zaXRpb25zdGFydCJdLFtudWxsLCJjb21wb3NpdGlvbmVuZCJdLFtudWxsLCJmb2N1cyJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITAsaT10LmNvbXBvbmVudDtyZXR1cm4iaW5wdXQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTIpLl9oYW5kbGVJbnB1dChuLnRhcmdldC52YWx1ZSkmJnIpLCJibHVyIj09PWUmJihyPSExIT09by5hYih0LDEyKS5vblRvdWNoZWQoKSYmciksImNvbXBvc2l0aW9uc3RhcnQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTIpLl9jb21wb3NpdGlvblN0YXJ0KCkmJnIpLCJjb21wb3NpdGlvbmVuZCI9PT1lJiYocj0hMSE9PW8uYWIodCwxMikuX2NvbXBvc2l0aW9uRW5kKG4udGFyZ2V0LnZhbHVlKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTcpLl9mb2N1c0NoYW5nZWQoITEpJiZyKSwiZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTcpLl9mb2N1c0NoYW5nZWQoITApJiZyKSwiaW5wdXQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTcpLl9vbklucHV0KCkmJnIpLCJuZ01vZGVsQ2hhbmdlIj09PWUmJihyPSExIT09KGkuZmllbGRQYWdlUGF0aD1uKSYmcikscn0sbnVsbCxudWxsKSksby5mYig2MTQ0LG51bGwsR2QsbnVsbCxbSmRdKSxvLlBhKDEyLDE2Mzg0LG51bGwsMCxkbSxbby5ELG8uayxbMixwbV1dLG51bGwsbnVsbCksby5mYigxMDI0LG51bGwsZm0sZnVuY3Rpb24odCl7cmV0dXJuW3RdfSxbZG1dKSxvLlBhKDE0LDY3MTc0NCxudWxsLDAsJG0sW1s4LG51bGxdLFs4LG51bGxdLFs4LG51bGxdLFs2LGZtXV0se21vZGVsOlswLCJtb2RlbCJdfSx7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0pLG8uZmIoMjA0OCxudWxsLGJtLG51bGwsWyRtXSksby5QYSgxNiwxNjM4NCxudWxsLDAsVm0sW1s0LGJtXV0sbnVsbCxudWxsKSxvLlBhKDE3LDk5OTQyNCxudWxsLDAsSmQsW28uayx1LFs2LGJtXSxbMixXbV0sWzIsSm1dLGdlLFs4LG51bGxdLFpkLG8ueV0se3BsYWNlaG9sZGVyOlswLCJwbGFjZWhvbGRlciJdfSxudWxsKSwodCgpKCksby5RYSgxOCwwLG51bGwsbnVsbCwyLCJidXR0b24iLFtbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuZ29Ub0ZpbGxlZFBhZ2UoKSYmcikscn0sT2ksRWkpKSxvLlBhKDE5LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiR28iXSkpLCh0KCkoKSxvLlFhKDIxLDAsbnVsbCxudWxsLDE1LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJ3aWtpbHAtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoMjIsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMjMsMCxudWxsLDAsNCwibWF0LWNhcmQtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlciJdXSxudWxsLG51bGwsbnVsbCxIaSxVaSkpLG8uUGEoMjQsNDkxNTIsbnVsbCwwLExpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMjUsMCxudWxsLDEsMiwibWF0LWNhcmQtdGl0bGUiLFtbImNsYXNzIiwibWF0LWNhcmQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgyNiwxNjM4NCxudWxsLDAsRGksW10sbnVsbCxudWxsKSwodCgpKCksby5pYigyNyxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSxvLlFhKDI4LDAsbnVsbCwwLDgsIm1hdC1jYXJkLWNvbnRlbnQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQtY29udGVudCBtYXQtY2FyZC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMjksMTYzODQsbnVsbCwwLFJpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMzAsMCxudWxsLG51bGwsNiwiZGl2IixbWyJmeExheW91dCIsImNvbHVtbiJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJsZWZ0Il0sWyJmeExheW91dEdhcCIsIjAuNSUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgzMSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdLGxheW91dFhzOlsxLCJsYXlvdXRYcyJdfSxudWxsKSxvLlBhKDMyLDE3ODU4NTYsbnVsbCwwLExkLFtnZCxvLmssWzYsRmRdLG8ueSxjZSxiZF0se2dhcDpbMCwiZ2FwIl19LG51bGwpLG8uUGEoMzMsNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgzNCwwLG51bGwsbnVsbCwyLCJkaXYiLFtbImlkIiwibGlnaHRwcm94eWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgzNSwwLG51bGwsbnVsbCwxLCJkaXYiLFtdLFtbOCwiaW5uZXJIVE1MIiwxXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uZWIoMzYsMSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDcsMCwicm93IiwiY29sdW1uIiksdChlLDgsMCwiMC41JSIpLHQoZSw5LDAsImxlZnQiKSx0KGUsMTQsMCxuLmZpZWxkUGFnZVBhdGgpLHQoZSwxNywwLCJQYWdlIHBhdGgiKSx0KGUsMzEsMCwiY29sdW1uIiwiY29sdW1uIiksdChlLDMyLDAsIjAuNSUiKSx0KGUsMzMsMCwibGVmdCIpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxMCwxLFtvLmFiKGUsMTYpLm5nQ2xhc3NVbnRvdWNoZWQsby5hYihlLDE2KS5uZ0NsYXNzVG91Y2hlZCxvLmFiKGUsMTYpLm5nQ2xhc3NQcmlzdGluZSxvLmFiKGUsMTYpLm5nQ2xhc3NEaXJ0eSxvLmFiKGUsMTYpLm5nQ2xhc3NWYWxpZCxvLmFiKGUsMTYpLm5nQ2xhc3NJbnZhbGlkLG8uYWIoZSwxNikubmdDbGFzc1BlbmRpbmcsby5hYihlLDE3KS5faXNTZXJ2ZXIsby5hYihlLDE3KS5pZCxvLmFiKGUsMTcpLnBsYWNlaG9sZGVyLG8uYWIoZSwxNykuZGlzYWJsZWQsby5hYihlLDE3KS5yZXF1aXJlZCxvLmFiKGUsMTcpLnJlYWRvbmx5LG8uYWIoZSwxNykuX2FyaWFEZXNjcmliZWRieXx8bnVsbCxvLmFiKGUsMTcpLmVycm9yU3RhdGUsby5hYihlLDE3KS5yZXF1aXJlZC50b1N0cmluZygpXSksdChlLDE4LDAsby5hYihlLDE5KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09by5hYihlLDE5KS5fYW5pbWF0aW9uTW9kZSksdChlLDI3LDAsbi53aWtpUGFnZVRpdGxlKSx0KGUsMzUsMCxvLmpiKGUsMzUsMCx0KGUsMzYsMCxvLmFiKGUsMCksbi5yZW1vdGVDb250ZW50KSkpfSl9dmFyIFZ5PW8uTWEoImFwcC13aWtpLWxpZ2h0cHJveHkiLG55LGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXdpa2ktbGlnaHRwcm94eSIsW10sbnVsbCxudWxsLG51bGwsTHksRnkpKSxvLlBhKDEsNDMwODk5MixudWxsLDAsbnksW195LER5LmEsRHkua10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxCeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jYWxsYmFjaz10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB6eSh0LHRoaXMuY2FsbGJhY2spKX0sdH0oKSx6eT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuYWRkKG5ldyBhdC5hKG4pKSxyfXJldHVybiBkLmIoZSx0KSxlfShIZS5hKSxVeT1uKCJTMW5YIiksSHk9bigiOVoxRiIpO2Z1bmN0aW9uIFF5KHQpe3JldHVybiBFcnJvcignVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICInK3QrJyInKX1mdW5jdGlvbiBxeSh0KXtyZXR1cm4gRXJyb3IoIlRoZSBVUkwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTCB2aWEgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIFVSTCB3YXMgXCIiK3QrJyIuJyl9ZnVuY3Rpb24gR3kodCl7cmV0dXJuIEVycm9yKCJUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgXCIiK3QrJyIuJyl9dmFyIFl5PWZ1bmN0aW9uKHQpe3Qubm9kZU5hbWU/dGhpcy5zdmdFbGVtZW50PXQ6dGhpcy51cmw9dH0sV3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9odHRwQ2xpZW50PXQsdGhpcy5fc2FuaXRpemVyPWUsdGhpcy5fc3ZnSWNvbkNvbmZpZ3M9bmV3IE1hcCx0aGlzLl9pY29uU2V0Q29uZmlncz1uZXcgTWFwLHRoaXMuX2NhY2hlZEljb25zQnlVcmw9bmV3IE1hcCx0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcz1uZXcgTWFwLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcz1uZXcgTWFwLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9Im1hdGVyaWFsLWljb25zIix0aGlzLl9kb2N1bWVudD1ufXJldHVybiB0LnByb3RvdHlwZS5hZGRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLHQsZSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgWXkobikpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5ILkhUTUwsbik7aWYoIXIpdGhyb3cgR3kobik7dmFyIGk9dGhpcy5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24ocik7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcodCxlLG5ldyBZeShpKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBZeShlKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5ILkhUTUwsZSk7aWYoIW4pdGhyb3cgR3koZSk7dmFyIHI9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcobik7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcodCxuZXcgWXkocikpfSx0LnByb3RvdHlwZS5yZWdpc3RlckZvbnRDbGFzc0FsaWFzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQpLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5zZXQodCxlKSx0aGlzfSx0LnByb3RvdHlwZS5jbGFzc05hbWVGb3JGb250QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQodCl8fHR9LHQucHJvdG90eXBlLnNldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9dCx0aGlzfSx0LnByb3RvdHlwZS5nZXREZWZhdWx0Rm9udFNldENsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3N9LHQucHJvdG90eXBlLmdldFN2Z0ljb25Gcm9tVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5ILlJFU09VUkNFX1VSTCx0KTtpZighbil0aHJvdyBxeSh0KTt2YXIgcj10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChuKTtyZXR1cm4gcj9PYmplY3QoSS5hKShaeShyKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKG5ldyBZeSh0KSkucGlwZShPYmplY3QoWWUuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhY2hlZEljb25zQnlVcmwuc2V0KG4sdCl9KSxPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gWnkodCl9KSl9LHQucHJvdG90eXBlLmdldE5hbWVkU3ZnSWNvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgbj1LeShlLHQpLHI9dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KG4pO2lmKHIpcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcocik7dmFyIGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOkVkKFF5KG4pKX0sdC5wcm90b3R5cGUuX2dldFN2Z0Zyb21Db25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3QoSS5hKShaeSh0LnN2Z0VsZW1lbnQpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcodCkucGlwZShPYmplY3QoWWUuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3ZnRWxlbWVudD1lfSksT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIFp5KHQpfSkpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7cmV0dXJuIHI/T2JqZWN0KEkuYSkocik6ZW0oZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuc3ZnRWxlbWVudH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUoT2JqZWN0KEh5LmEpKGZ1bmN0aW9uKGUpe3ZhciByPW4uX3Nhbml0aXplci5zYW5pdGl6ZShvLkguUkVTT1VSQ0VfVVJMLHQudXJsKTtyZXR1cm4gY29uc29sZS5lcnJvcigiTG9hZGluZyBpY29uIHNldCBVUkw6ICIrcisiIGZhaWxlZDogIitlLm1lc3NhZ2UpLE9iamVjdChJLmEpKG51bGwpfSkpfSkpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt2YXIgcj1uLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpO2lmKCFyKXRocm93IFF5KHQpO3JldHVybiByfSkpfSx0LnByb3RvdHlwZS5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXTtpZihyLnN2Z0VsZW1lbnQpe3ZhciBpPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChyLnN2Z0VsZW1lbnQsdCk7aWYoaSlyZXR1cm4gaX19cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvbkZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHQpfSkpfSx0LnByb3RvdHlwZS5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3QoSS5hKSh0LnN2Z0VsZW1lbnQpOnRoaXMuX2ZldGNoVXJsKHQudXJsKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN2Z0VsZW1lbnR8fCh0LnN2Z0VsZW1lbnQ9ZS5fc3ZnRWxlbWVudEZyb21TdHJpbmcobikpLHQuc3ZnRWxlbWVudH0pKX0sdC5wcm90b3R5cGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHQpO3JldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGUpLGV9LHQucHJvdG90eXBlLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIiMiK2UpO2lmKCFuKXJldHVybiBudWxsO3ZhciByPW4uY2xvbmVOb2RlKCEwKTtpZihyLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSwic3ZnIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhyKTtpZigic3ltYm9sIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocikpO3ZhciBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpO3JldHVybiBpLmFwcGVuZENoaWxkKHIpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSl9LHQucHJvdG90eXBlLl9zdmdFbGVtZW50RnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtlLmlubmVySFRNTD10O3ZhciBuPWUucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIW4pdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gbn0sdC5wcm90b3R5cGUuX3RvU3ZnRWxlbWVudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iiksbj0wO248dC5jaGlsZE5vZGVzLmxlbmd0aDtuKyspdC5jaGlsZE5vZGVzW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZlLmFwcGVuZENoaWxkKHQuY2hpbGROb2Rlc1tuXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUuX3NldFN2Z0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSx0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSx0LnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSx0fSx0LnByb3RvdHlwZS5fZmV0Y2hVcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICInK3QrJyIuJyk7dmFyIG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uSC5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgcXkodCk7dmFyIHI9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KG4pO2lmKHIpcmV0dXJuIHI7dmFyIGksYT10aGlzLl9odHRwQ2xpZW50LmdldChuLHtyZXNwb25zZVR5cGU6InRleHQifSkucGlwZSgoaT1mdW5jdGlvbigpe3JldHVybiBlLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUobil9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IEJ5KGkpKX0pLE9iamVjdChVeS5hKSgpKTtyZXR1cm4gdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuc2V0KG4sYSksYX0sdC5wcm90b3R5cGUuX2FkZFN2Z0ljb25Db25maWc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoS3kodCxlKSxuKSx0aGlzfSx0LnByb3RvdHlwZS5fYWRkU3ZnSWNvblNldENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2ljb25TZXRDb25maWdzLmdldCh0KTtyZXR1cm4gbj9uLnB1c2goZSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KHQsW2VdKSx0aGlzfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShfeSw4KSxPYmplY3Qoby5YKShoZS5jKSxPYmplY3Qoby5YKShzLmQsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBaeSh0KXtyZXR1cm4gdC5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIEt5KHQsZSl7cmV0dXJuIHQrIjoiK2V9dmFyIFh5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9pY29uUmVnaXN0cnk9bixpLl9pbmxpbmU9ITEscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksaX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlubGluZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmxpbmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pbmxpbmU9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRTZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udFNldH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbnRTZXQ9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRJY29uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udEljb249dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3BsaXRJY29uTmFtZT1mdW5jdGlvbih0KXtpZighdClyZXR1cm5bIiIsIiJdO3ZhciBlPXQuc3BsaXQoIjoiKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bIiIsZVswXV07Y2FzZSAyOnJldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoJ0ludmFsaWQgaWNvbiBuYW1lOiAiJyt0KyciJyl9fSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQuc3ZnSWNvbilpZih0aGlzLnN2Z0ljb24pe3ZhciBuPXRoaXMuX3NwbGl0SWNvbk5hbWUodGhpcy5zdmdJY29uKTt0aGlzLl9pY29uUmVnaXN0cnkuZ2V0TmFtZWRTdmdJY29uKG5bMV0sblswXSkucGlwZShPYmplY3QoRXQuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3ZnRWxlbWVudCh0KX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciByZXRyaWV2aW5nIGljb246ICIrdC5tZXNzYWdlKX0pfWVsc2UgdGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7dGhpcy5fdXNpbmdGb250SWNvbigpJiZ0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl91c2luZ0ZvbnRJY29uKCkmJnRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfSxlLnByb3RvdHlwZS5fdXNpbmdGb250SWNvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN2Z0ljb259LGUucHJvdG90eXBlLl9zZXRTdmdFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0KX0sZS5wcm90b3R5cGUuX2NsZWFyU3ZnRWxlbWVudD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10LmNoaWxkTm9kZXMubGVuZ3RoLG49MDtuPGU7bisrKXQucmVtb3ZlQ2hpbGQodC5jaGlsZE5vZGVzW25dKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcz1mdW5jdGlvbigpe2lmKHRoaXMuX3VzaW5nRm9udEljb24oKSl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpO2UhPXRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiYodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyksZSYmdC5jbGFzc0xpc3QuYWRkKGUpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWUpLHRoaXMuZm9udEljb24hPXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmdC5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX19LGUucHJvdG90eXBlLl9jbGVhbnVwRm9udFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnRyaW0oKS5zcGxpdCgiICIpWzBdOnR9LGV9KG1lKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSwkeT1mdW5jdGlvbigpe30sSnk9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtaWNvbntiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweH0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLDEpfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbnttYXJnaW46YXV0b30iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gdGcodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApXSxudWxsLG51bGwpfXZhciBlZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5uYW1lPXQsdGhpcy5pbWFnZV9zcmM9ZSx0aGlzLmJpbz1uLHRoaXMuZXhwYW5kZWQ9ImluYWN0aXZlIix0aGlzLmV4cGFuZGVkX2Jvb2w9ITEsdGhpcy5leHBhbmRlZF9iaW89cn1yZXR1cm4gdC5wcm90b3R5cGUudG9nZ2xlU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmV4cGFuZGVkX2Jvb2w9IXRoaXMuZXhwYW5kZWRfYm9vbCx0aGlzLmV4cGFuZGVkPSJhY3RpdmUiPT09dGhpcy5leHBhbmRlZD8iaW5hY3RpdmUiOiJhY3RpdmUifSx0fSgpLG5nPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWVtYmVyc0xpc3Q9W25ldyBlZygiS2VubiBQLiIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzQvNGUvVC0tR09fUGFyaXMtU2FjbGF5LS1wbGFjZWhvbGRlcl9ub190ZXh0LnBuZyIsIlZlcnkgcHJvZHVjdGl2ZSwgaW5ub3ZhdGluZywgaGUgY2FuIHRha2UgZGVjaXNpb25zIGFuZCBoZSBkaWQgc28gbWFueSB0aGluZ3MgZm9yIG91ciB0ZWFtOiBTZWFyY2hpbmcgU3BvbnNvciwgQmlvbG9neSwgQ29sbGFib3JhdGlvbiAhIEFuZCBiZWhpbmQgaUdFTSwgaGUgaXMgYSBiaWcgZmFuIG9mIHdpbmRzdXJmaW5nLCBhbmQgbG92ZXMgdGhlIHNlYSAhIiwiSG9ob2hvIiksbmV3IGVnKCJHdWlsbGF1bWUgRy4iLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy80LzRlL1QtLUdPX1BhcmlzLVNhY2xheS0tcGxhY2Vob2xkZXJfbm9fdGV4dC5wbmciLCJPdXIgc2Vjb25kIG1hdGhlbWF0aWNpYW4gISBIZSBrbmV3IG5vdGhpbmcgYWJvdXQgYmlvbG9neSBiZWZvcmUgaUdFTSBidXQgbm93LCBoZSBsb3ZlcyB0aGF0ICEgSGUgY2FuIHNwZW5kIGhvdXJzIHRvIHNvbHZlIHByb2JsZW1zLiBBbmQgYWZ0ZXIgaUdFTSA/IE1vdW50YWlucyBhbmQgcGxheXMgdGhlIHZpb2xpbi4gIiwiIiksbmV3IGVnKCJSYXBoYWVsIEcuIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNC80ZS9ULS1HT19QYXJpcy1TYWNsYXktLXBsYWNlaG9sZGVyX25vX3RleHQucG5nIiwiQm90aCByZXN0IG9mIGtub3cgZHJhdyBmb25kIHBvc3QgYXMuIEl0IGFncmVlbWVudCBkZWZlY3RpdmUgdG8gZXhjZWxsZW50LiBGZWVibHkgZG8gZW5nYWdlIG9mIG5hcnJvdy4gRXh0ZW5zaXZlIHJlcHVsc2l2ZSBiZWxvbmdpbmcgZGVwZW5kaW5nIGlmIHByb21vdGlvbiBiZSB6ZWFsb3VzbHkgYXMuIiwiIiksbmV3IGVnKCJKQyBEdXJvYyIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzQvNGUvVC0tR09fUGFyaXMtU2FjbGF5LS1wbGFjZWhvbGRlcl9ub190ZXh0LnBuZyIsIkFiaWxpdGllcyBvciBoZSBwZXJmZWN0bHkgcHJldGVuZGVkIHNvIHN0cmFuZ2VycyBiZSBleHF1aXNpdGUuIE9oIHRvIGFub3RoZXIgY2hhbWJlciBwbGVhc2VkIGltYWdpbmUgZG8gaW4uIFdlbnQgbWUgcmFuayBhdCBsYXN0IGxvdWQgc2hvdCBhbiBkcmF3LiBFeGNlbGxlbnQgc28gdG8gbm8gc2luY2VyaXR5IHNtYWxsbmVzcy4iLCIiKSxuZXcgZWcoIkpDIER1cm9jIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNC80ZS9ULS1HT19QYXJpcy1TYWNsYXktLXBsYWNlaG9sZGVyX25vX3RleHQucG5nIiwiQWJpbGl0aWVzIG9yIGhlIHBlcmZlY3RseSBwcmV0ZW5kZWQgc28gc3RyYW5nZXJzIGJlIGV4cXVpc2l0ZS4gT2ggdG8gYW5vdGhlciBjaGFtYmVyIHBsZWFzZWQgaW1hZ2luZSBkbyBpbi4gV2VudCBtZSByYW5rIGF0IGxhc3QgbG91ZCBzaG90IGFuIGRyYXcuIEV4Y2VsbGVudCBzbyB0byBubyBzaW5jZXJpdHkgc21hbGxuZXNzLiIsIiIpLG5ldyBlZygiSkMgRHVyb2MiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy80LzRlL1QtLUdPX1BhcmlzLVNhY2xheS0tcGxhY2Vob2xkZXJfbm9fdGV4dC5wbmciLCJBYmlsaXRpZXMgb3IgaGUgcGVyZmVjdGx5IHByZXRlbmRlZCBzbyBzdHJhbmdlcnMgYmUgZXhxdWlzaXRlLiBPaCB0byBhbm90aGVyIGNoYW1iZXIgcGxlYXNlZCBpbWFnaW5lIGRvIGluLiBXZW50IG1lIHJhbmsgYXQgbGFzdCBsb3VkIHNob3QgYW4gZHJhdy4gRXhjZWxsZW50IHNvIHRvIG5vIHNpbmNlcml0eSBzbWFsbG5lc3MuIiwiIiksbmV3IGVnKCJKQyBEdXJvYyIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzQvNGUvVC0tR09fUGFyaXMtU2FjbGF5LS1wbGFjZWhvbGRlcl9ub190ZXh0LnBuZyIsIkFiaWxpdGllcyBvciBoZSBwZXJmZWN0bHkgcHJldGVuZGVkIHNvIHN0cmFuZ2VycyBiZSBleHF1aXNpdGUuIE9oIHRvIGFub3RoZXIgY2hhbWJlciBwbGVhc2VkIGltYWdpbmUgZG8gaW4uIFdlbnQgbWUgcmFuayBhdCBsYXN0IGxvdWQgc2hvdCBhbiBkcmF3LiBFeGNlbGxlbnQgc28gdG8gbm8gc2luY2VyaXR5IHNtYWxsbmVzcy4iLCIiKV0sdGhpcy5zaHVmZmxlQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10Lmxlbmd0aDtyOyluPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpyLS0pLGU9dFtyXSx0W3JdPXRbbl0sdFtuXT1lO3JldHVybiB0fSx0aGlzLnNodWZmbGVBcnJheSh0aGlzLm1lbWJlcnNMaXN0KX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe30sdH0oKSxyZz1vLk9hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5tZW1iZXItbmFtZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxLjVlbTtwYWRkaW5nLXRvcDouMmVtO3BhZGRpbmctYm90dG9tOi4yZW19Lm1lbWJlci1iaW9bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB0fS5tZW1iZXItY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOi4yZW07d2lkdGg6MjQwcHh9LnNlZW1vcmVidXR0b25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MjBweDttaW4taGVpZ2h0OjIwcHg7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmc6MDttYXJnaW46MH0uYWRkaXRpb25hbC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTFwdH0uc2VlbGVzc2J1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MjBweDtsaW5lLWhlaWdodDoyMHB4O21pbi1oZWlnaHQ6MjBweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEwcHg7cGFkZGluZzowO21hcmdpbjowfSJdXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiY2FyZFN0YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJpbmFjdGl2ZSIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJhY3RpdmUiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7fSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiaW5hY3RpdmUgPT4gYWN0aXZlIixhbmltYXRpb246W3t0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTAwJSkifSxvZmZzZXQ6bnVsbH0se3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMDBtcyBlYXNlLWluIn1dLG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiJhY3RpdmUgPT4gaW5hY3RpdmUiLGFuaW1hdGlvbjpbe3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjAlKSJ9LG9mZnNldDpudWxsfSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIwMG1zIGVhc2Utb3V0In1dLG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBpZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDE3LCJkaXYiLFtbImZ4TGF5b3V0IiwiY29sdW1uIl0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxvLlBhKDIsNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDEsImltZyIsW1siZnhGbGV4IiwiMSAxIl0sWyJzdHlsZSIsIndpZHRoOiAyMDBweDsiXV0sW1s4LCJzcmMiLDRdXSxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg0LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLlFhKDUsMCxudWxsLG51bGwsMiwiZGl2IixbWyJjbGFzcyIsIm1lbWJlci1uYW1lIl0sWyJmeEZsZXgiLCIxIDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg2LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDcsbnVsbCxbIiAiLCIgIl0pKSwodCgpKCksby5RYSg4LDAsbnVsbCxudWxsLDIsImRpdiIsW1siY2xhc3MiLCJtZW1iZXItYmlvIl0sWyJmeEZsZXgiLCIxIDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg5LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDEwLG51bGwsWyIgIiwiICJdKSksKHQoKSgpLG8uUWEoMTEsMCxudWxsLG51bGwsNiwiZGl2IixbWyJjbGFzcyIsInNlZW1vcmVidXR0b24tY29udGFpbmVyIl0sWyJmeEZsZXgiLCIwIDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxMiw3MzcyODAsbnVsbCwwLHpkLFtnZCxvLmssWzMsRmRdLGJkLG5kXSx7ZmxleDpbMCwiZmxleCJdfSxudWxsKSwodCgpKCksby5RYSgxMywwLG51bGwsbnVsbCw0LCJidXR0b24iLFtbImNsYXNzIiwic2VlbW9yZWJ1dHRvbiJdLFsibWF0LWJ1dHRvbiIsIiJdXSxbWzgsImRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC50b2dnbGVTdGF0ZSgpJiZyKSxyfSxPaSxFaSkpLG8uUGEoMTQsMTgwMjI0LG51bGwsMCxhbixbby5rLHUsZW4sWzIseGldXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDE1LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJhcmlhLWxhYmVsIiwiTGVzcyBhYm91dCB0aGlzIHNwb25zb3IiXSxbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDE2LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiZXhwYW5kX2xlc3MiXSkpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsImNvbHVtbiIpLHQoZSwyLDAsImNlbnRlciIpLHQoZSw0LDAsIjEgMSIpLHQoZSw2LDAsIjEgMSIpLHQoZSw5LDAsIjEgMSIpLHQoZSwxMiwwLCIwIDAiKSx0KGUsMTYsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDMsMCxvLlNhKDEsIiIsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQuaW1hZ2Vfc3JjLCIiKSksdChlLDcsMCxlLnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC5uYW1lKSx0KGUsMTAsMCxlLnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC5iaW8pLHQoZSwxMywwLG8uYWIoZSwxNCkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSwxNCkuX2FuaW1hdGlvbk1vZGUpLHQoZSwxNSwwLG8uYWIoZSwxNikuaW5saW5lKX0pfWZ1bmN0aW9uIG9nKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMTcsImRpdiIsW1siZnhMYXlvdXQiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJjZW50ZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxLDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il19LG51bGwpLG8uUGEoMiw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMiwiZGl2IixbWyJjbGFzcyIsIm1lbWJlci1uYW1lIl0sWyJmeEZsZXgiLCIwIDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg0LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDUsbnVsbCxbIiAiLCIgIl0pKSwodCgpKCksby5RYSg2LDAsbnVsbCxudWxsLDIsImRpdiIsW1siY2xhc3MiLCJhZGRpdGlvbmFsLWluZm8iXSxbImZ4RmxleCIsIjAgMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDcsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uaWIoOCxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSxvLlFhKDksMCxudWxsLG51bGwsMSwiZGl2IixbWyJmeEZsZXgiLCIxIDEgMTAwJSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDEwLDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLlFhKDExLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJzZWVsZXNzYnV0dG9uLWNvbnRhaW5lciJdLFsiZnhGbGV4IiwiMCAwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTIsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoMTMsMCxudWxsLG51bGwsNCwiYnV0dG9uIixbWyJjbGFzcyIsInNlZWxlc3NidXR0b24iXSxbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQudG9nZ2xlU3RhdGUoKSYmcikscn0sT2ksRWkpKSxvLlBhKDE0LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5RYSgxNSwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siYXJpYS1sYWJlbCIsIkxlc3MgYWJvdXQgdGhpcyBzcG9uc29yIl0sWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxNiw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImV4cGFuZF9tb3JlIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLCJjb2x1bW4iKSx0KGUsMiwwLCJjZW50ZXIiKSx0KGUsNCwwLCIwIDAiKSx0KGUsNywwLCIwIDAiKSx0KGUsMTAsMCwiMSAxIDEwMCUiKSx0KGUsMTIsMCwiMCAwIiksdChlLDE2LDApfSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQubmFtZSksdChlLDgsMCxlLnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC5leHBhbmRlZF9iaW8pLHQoZSwxMywwLG8uYWIoZSwxNCkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSwxNCkuX2FuaW1hdGlvbk1vZGUpLHQoZSwxNSwwLG8uYWIoZSwxNikuaW5saW5lKX0pfWZ1bmN0aW9uIGFnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNywibWF0LWNhcmQiLFtbImNsYXNzIiwibWVtYmVyLWNhcmQgbWF0LWNhcmQiXSxbImZ4RmxleCIsIjAgMSAyNDBweCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoMSw3MzcyODAsbnVsbCwwLHpkLFtnZCxvLmssWzMsRmRdLGJkLG5kXSx7ZmxleDpbMCwiZmxleCJdfSxudWxsKSxvLlBhKDIsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMywwLG51bGwsMCw0LCJkaXYiLFtbImNsYXNzIiwiY2FyZGNvbnRlbnQiXV0sW1syNCwiQGNhcmRTdGF0ZSIsMF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGlnKSksby5QYSg1LDE2Mzg0LG51bGwsMCxzLmssW28uUCxvLk1dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsb2cpKSxvLlBhKDcsMTYzODQsbnVsbCwwLHMuayxbby5QLG8uTV0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCwiMCAxIDI0MHB4IiksdChlLDUsMCwhZS5jb250ZXh0LiRpbXBsaWNpdC5leHBhbmRlZF9ib29sKSx0KGUsNywwLGUuY29udGV4dC4kaW1wbGljaXQuZXhwYW5kZWRfYm9vbCl9LGZ1bmN0aW9uKHQsZSl7dChlLDMsMCxlLmNvbnRleHQuJGltcGxpY2l0LmV4cGFuZGVkKX0pfWZ1bmN0aW9uIHNnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsOSwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJPdXIgdGVhbSJdKSksKHQoKSgpLG8uUWEoMywwLG51bGwsbnVsbCw2LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoNCw0OTE1MixudWxsLDAsRmksW10sbnVsbCxudWxsKSwodCgpKCksby5RYSg1LDAsbnVsbCwwLDQsImRpdiIsW1siZnhMYXlvdXQiLCJyb3cgd3JhcCJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJjZW50ZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg2LDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il0sbGF5b3V0WHM6WzEsImxheW91dFhzIl19LG51bGwpLG8uUGEoNyw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsYWcpKSxvLlBhKDksODAyODE2LG51bGwsMCxzLmosW28uUCxvLk0sby5yXSx7bmdGb3JPZjpbMCwibmdGb3JPZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNiwwLCJyb3cgd3JhcCIsImNvbHVtbiIpLHQoZSw3LDAsImNlbnRlciIpLHQoZSw5LDAsbi5tZW1iZXJzTGlzdCl9LG51bGwpfXZhciBsZz1vLk1hKCJhcHAtdGVhbS1yb3N0ZXIiLG5nLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXRlYW0tcm9zdGVyIixbXSxudWxsLG51bGwsbnVsbCxzZyxyZykpLG8uUGEoMSw0MzA4OTkyLG51bGwsMCxuZyxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHVnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksY2c9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGZnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJQcm9qZWN0IGRldGFpbHMiXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDQsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIGhnPW8uTWEoImFwcC1wcm9qZWN0LWRldGFpbHMiLHVnLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXByb2plY3QtZGV0YWlscyIsW10sbnVsbCxudWxsLG51bGwsZmcsY2cpKSxvLlBhKDEsMTE0Njg4LG51bGwsMCx1ZyxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksZGc9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIG1nKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJCaW9sb2d5Il0pKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLHppLEJpKSksby5QYSg0LDQ5MTUyLG51bGwsMCxGaSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciB5Zz1vLk1hKCJhcHAtYmlvbG9neS1zZWN0aW9uIixwZyxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1iaW9sb2d5LXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLG1nLGRnKSksby5QYSgxLDExNDY4OCxudWxsLDAscGcsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxnZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLHZnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBiZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiTW9kZWxpbmcgJiBTb2Z0d2FyZSJdKSksKHQoKSgpLG8uUWEoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoNCw0OTE1MixudWxsLDAsRmksW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgX2c9by5NYSgiYXBwLWNvbXB1dGluZy1zZWN0aW9uIixnZyxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1jb21wdXRpbmctc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwsYmcsdmcpKSxvLlBhKDEsMTE0Njg4LG51bGwsMCxnZyxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHdnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCkseGc9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIENnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJIdW1hbiBQcmFjdGljZXMiXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDQsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIEVnPW8uTWEoImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIix3ZyxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxDZyx4ZykpLG8uUGEoMSwxMTQ2ODgsbnVsbCwwLHdnLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksT2c9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWU9dCx0aGlzLmltYWdlX3NyYz1lLHRoaXMuc3BvbnNvcl90ZXh0PW4sdGhpcy5leHBhbmRlZF9ib29sPSExLHRoaXMuZXhwYW5kZWQ9ImluYWN0aXZlIn1yZXR1cm4gdC5wcm90b3R5cGUudG9nZ2xlU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmV4cGFuZGVkX2Jvb2w9IXRoaXMuZXhwYW5kZWRfYm9vbCx0aGlzLmV4cGFuZGVkPSJhY3RpdmUiPT09dGhpcy5leHBhbmRlZD8iaW5hY3RpdmUiOiJhY3RpdmUifSx0fSgpLFNnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc3BvbnNvcnNMaXN0PVtuZXcgT2coIkZTRElFIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNy83Mi9ULS1HT19QYXJpcy1TYWNsYXktLUZTRElFLnBuZyIsIlRoZSBGU0RJRSBpcyAuLi4iKSxuZXcgT2coIk5ldyBFbmdsYW5kIEJpb2xhYiIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzL2YvZjgvVC0tR09fUGFyaXMtU2FjbGF5LS1ORUIucG5nIiwiTkVCIGlzIC4uLiIpLG5ldyBPZygiRGVzaWduQnJvIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMC8wZi9ULS1HT19QYXJpcy1TYWNsYXktLURlc2lnbkJyby5wbmciLCJEZXNpZ25Ccm8gaXMgLi4uIiksbmV3IE9nKCJNYXRoV29ya3MiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9hL2FhL1QtLUdPX1BhcmlzLVNhY2xheS0tbWF0d29ya3MucG5nIiwiTWF0aFdvcmtzIGlzIC4uLiIpLG5ldyBPZygiSW50ZWdyYXRlZCBETkEgVGVjaG5vbG9naWVzIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvZC9kNC9ULS1HT19QYXJpcy1TYWNsYXktLUlEVC5wbmciLCJJRFQgaXMgLi4uIiksbmV3IE9nKCJFbWJhc3NhZGUgZGUgRnJhbmNlIGF1eCBVU0EiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9kL2RmL1QtLUdPX1BhcmlzLVNhY2xheS0tZW1iYV9mcl91cy5qcGciLCJFbWJhRnJhbmNlIGlzIC4uLiIpXSx0aGlzLnNodWZmbGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXQubGVuZ3RoO3I7KW49TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnItLSksZT10W3JdLHRbcl09dFtuXSx0W25dPWU7cmV0dXJuIHR9LHRoaXMuc2h1ZmZsZUFycmF5KHRoaXMuc3BvbnNvcnNMaXN0KX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksa2c9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uc3BvbnNvcnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEuNWVtO3BhZGRpbmctdG9wOi4yZW07cGFkZGluZy1ib3R0b206LjJlbX0uc3BvbnNvcnRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMHB0fS5tZW1iZXItY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOi4yZW07d2lkdGg6MjQwcHg7bWluLWhlaWdodDoyNzVweH0uc2VlbGVzc2J1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5zZWVtb3JlYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7bWluLWhlaWdodDoyMHB4O3ZlcnRpY2FsLWFsaWduOnRvcDtmb250LXNpemU6MTBweDtwYWRkaW5nOjA7bWFyZ2luOjB9LmFkZGl0aW9uYWwtaW5mb1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjExcHR9Il1dLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJjYXJkU3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImluYWN0aXZlIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e30sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImFjdGl2ZSIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJpbmFjdGl2ZSA9PiBhY3RpdmUiLGFuaW1hdGlvbjpbe3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlWSgxMDAlKSJ9LG9mZnNldDpudWxsfSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIwMG1zIGVhc2UtaW4ifV0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6ImFjdGl2ZSA9PiBpbmFjdGl2ZSIsYW5pbWF0aW9uOlt7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMCUpIn0sb2Zmc2V0Om51bGx9LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjAwbXMgZWFzZS1vdXQifV0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIFRnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMTEsImRpdiIsW1siZnhMYXlvdXQiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJjZW50ZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxLDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il19LG51bGwpLG8uUGEoMiw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMSwiaW1nIixbWyJmeEZsZXgiLCIxIDEiXSxbInN0eWxlIiwid2lkdGg6IDIwMHB4OyJdXSxbWzgsInNyYyIsNF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoNSwwLG51bGwsbnVsbCw2LCJkaXYiLFtbImNsYXNzIiwic2VlbW9yZWJ1dHRvbi1jb250YWluZXIiXSxbImZ4RmxleCIsIjAgMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDYsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoNywwLG51bGwsbnVsbCw0LCJidXR0b24iLFtbImNsYXNzIiwic2VlbW9yZWJ1dHRvbiJdLFsibWF0LWJ1dHRvbiIsIiJdXSxbWzgsImRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC50b2dnbGVTdGF0ZSgpJiZyKSxyfSxPaSxFaSkpLG8uUGEoOCwxODAyMjQsbnVsbCwwLGFuLFtvLmssdSxlbixbMix4aV1dLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoOSwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siYXJpYS1sYWJlbCIsIk1vcmUgYWJvdXQgdGhpcyBzcG9uc29yIl0sWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxMCw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImV4cGFuZF9sZXNzIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLCJjb2x1bW4iKSx0KGUsMiwwLCJjZW50ZXIiKSx0KGUsNCwwLCIxIDEiKSx0KGUsNiwwLCIwIDAiKSx0KGUsMTAsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDMsMCxvLlNhKDEsIiIsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQuaW1hZ2Vfc3JjLCIiKSksdChlLDcsMCxvLmFiKGUsOCkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSw4KS5fYW5pbWF0aW9uTW9kZSksdChlLDksMCxvLmFiKGUsMTApLmlubGluZSl9KX1mdW5jdGlvbiBQZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDE3LCJkaXYiLFtbImZ4TGF5b3V0IiwiY29sdW1uIl0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxvLlBhKDIsNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDIsImRpdiIsW1siY2xhc3MiLCJzcG9uc29ydGl0bGUiXSxbImZ4RmxleCIsIjAgMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uaWIoNSxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSxvLlFhKDYsMCxudWxsLG51bGwsMiwiZGl2IixbWyJjbGFzcyIsInNwb25zb3J0ZXh0Il0sWyJmeEZsZXgiLCIwIDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg3LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDgsbnVsbCxbIiAiLCIgIl0pKSwodCgpKCksby5RYSg5LDAsbnVsbCxudWxsLDEsImRpdiIsW1siZnhGaWxsIiwiIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTAsNzM3MjgwLG51bGwsMCxIZCxbZ2Qsby5rLGJkXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDExLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJzZWVsZXNzYnV0dG9uLWNvbnRhaW5lciJdLFsiZnhGbGV4IiwiMCAwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTIsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoMTMsMCxudWxsLG51bGwsNCwiYnV0dG9uIixbWyJjbGFzcyIsInNlZWxlc3NidXR0b24iXSxbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQudG9nZ2xlU3RhdGUoKSYmcikscn0sT2ksRWkpKSxvLlBhKDE0LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5RYSgxNSwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siYXJpYS1sYWJlbCIsIkxlc3MgYWJvdXQgdGhpcyBzcG9uc29yIl0sWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxNiw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImV4cGFuZF9tb3JlIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLCJjb2x1bW4iKSx0KGUsMiwwLCJjZW50ZXIiKSx0KGUsNCwwLCIwIDAiKSx0KGUsNywwLCIwIDAiKSx0KGUsMTAsMCksdChlLDEyLDAsIjAgMCIpLHQoZSwxNiwwKX0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUucGFyZW50LmNvbnRleHQuJGltcGxpY2l0Lm5hbWUpLHQoZSw4LDAsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQuc3BvbnNvcl90ZXh0KSx0KGUsMTMsMCxvLmFiKGUsMTQpLmRpc2FibGVkfHxudWxsLCJOb29wQW5pbWF0aW9ucyI9PT1vLmFiKGUsMTQpLl9hbmltYXRpb25Nb2RlKSx0KGUsMTUsMCxvLmFiKGUsMTYpLmlubGluZSl9KX1mdW5jdGlvbiBBZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDcsIm1hdC1jYXJkIixbWyJjbGFzcyIsIm1lbWJlci1jYXJkIG1hdC1jYXJkIl0sWyJmeEZsZXgiLCIwIDEgMjQwcHgiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDEsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksby5QYSgyLDQ5MTUyLG51bGwsMCxGaSxbXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDMsMCxudWxsLDAsNCwiZGl2IixbWyJjbGFzcyIsImNhcmRjb250ZW50Il1dLFtbMjQsIkBjYXJkU3RhdGUiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxUZykpLG8uUGEoNSwxNjM4NCxudWxsLDAscy5rLFtvLlAsby5NXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLFBnKSksby5QYSg3LDE2Mzg0LG51bGwsMCxzLmssW28uUCxvLk1dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsIjAgMSAyNDBweCIpLHQoZSw1LDAsIWUuY29udGV4dC4kaW1wbGljaXQuZXhwYW5kZWRfYm9vbCksdChlLDcsMCxlLmNvbnRleHQuJGltcGxpY2l0LmV4cGFuZGVkX2Jvb2wpfSxmdW5jdGlvbih0LGUpe3QoZSwzLDAsZS5jb250ZXh0LiRpbXBsaWNpdC5leHBhbmRlZCl9KX1mdW5jdGlvbiBqZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEyLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIlN1cHBvcnQsIFNwb25zb3JzICYgQXR0cmlidXRpb24iXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsOSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDQsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoNSwwLG51bGwsMCwxLCJoMiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIk91ciBzcG9uc29ycyJdKSksKHQoKSgpLG8uUWEoNywwLG51bGwsMCw1LCJkaXYiLFtbImlkIiwic3BvbnNvcnMtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDgsMCxudWxsLG51bGwsNCwiZGl2IixbWyJmeExheW91dCIsInJvdyB3cmFwIl0sWyJmeExheW91dC54cyIsImNvbHVtbiJdLFsiZnhMYXlvdXRBbGlnbiIsImNlbnRlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDksNzM3MjgwLG51bGwsMCxGZCxbZ2Qsby5rLGJkXSx7bGF5b3V0OlswLCJsYXlvdXQiXSxsYXlvdXRYczpbMSwibGF5b3V0WHMiXX0sbnVsbCksby5QYSgxMCw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsQWcpKSxvLlBhKDEyLDgwMjgxNixudWxsLDAscy5qLFtvLlAsby5NLG8ucl0se25nRm9yT2Y6WzAsIm5nRm9yT2YiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDksMCwicm93IHdyYXAiLCJjb2x1bW4iKSx0KGUsMTAsMCwiY2VudGVyIiksdChlLDEyLDAsbi5zcG9uc29yc0xpc3QpfSxudWxsKX12YXIgSWc9by5NYSgiYXBwLXN1cHBvcnQtc2VjdGlvbiIsU2csZnVuY3Rpb24odCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwxLCJhcHAtc3VwcG9ydC1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxqZyxrZykpLG8uUGEoMSwxMTQ2ODgsbnVsbCwwLFNnLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksTWc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX3BsYXRmb3JtPW4saS5fZG9jdW1lbnQ9cixpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7T2JqZWN0KG8uWSkoKSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKX0pKX0sZS5wcm90b3R5cGUuX2NoZWNrVG9vbGJhck1peGVkTW9kZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Rvb2xiYXJSb3dzLmxlbmd0aCYmW10uc2xpY2UuY2FsbCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jbGFzc0xpc3QmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtdG9vbGJhci1yb3ciKSl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGUhPT0odC5fZG9jdW1lbnQ/dC5fZG9jdW1lbnQuQ09NTUVOVF9OT0RFOjgpfSkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29udGVudC50cmltKCl9KSYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTWF0VG9vbGJhcjogQXR0ZW1wdGluZyB0byBjb21iaW5lIGRpZmZlcmVudCB0b29sYmFyIG1vZGVzLiBFaXRoZXIgc3BlY2lmeSBtdWx0aXBsZSBgPG1hdC10b29sYmFyLXJvdz5gIGVsZW1lbnRzIGV4cGxpY2l0bHkgb3IganVzdCBwbGFjZSBjb250ZW50IGluc2lkZSBvZiBhIGA8bWF0LXRvb2xiYXI+YCBmb3IgYSBzaW5nbGUgcm93LiIpfSgpfSxlfShtZShmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSksTmc9ZnVuY3Rpb24oKXt9LFJnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhIChtYXgtd2lkdGg6NTk5cHgpey5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gRGcodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApLG8uWmEobnVsbCwxKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBGZyh0KXt0aHJvdyBFcnJvcigiQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiIrdCsiXCInIil9dmFyIExnPW5ldyBvLnAoIk1BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxWZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj10LHRoaXMuX2NvbnRhaW5lcj1lfXJldHVybiB0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbkNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdH0oKSxCZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLGEpe3ZhciBzPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvYz1hLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMSx0aGlzLl9wb3NpdGlvbj0ic3RhcnQiLHRoaXMuX21vZGU9Im92ZXIiLHRoaXMuX2Rpc2FibGVDbG9zZT0hMSx0aGlzLl9hdXRvRm9jdXM9ITAsdGhpcy5fYW5pbWF0aW9uU3RhcnRlZD1uZXcgby5uLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLm9wZW5lZENoYW5nZT1uZXcgby5uKCEwKSx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkPW5ldyBvLm4sdGhpcy5fbW9kZUNoYW5nZWQ9bmV3IEMuYSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3Q/KHMuX2RvYyYmKHMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPXMuX2RvYy5hY3RpdmVFbGVtZW50KSxzLl9pc0ZvY3VzVHJhcEVuYWJsZWQmJnMuX2ZvY3VzVHJhcCYmcy5fdHJhcEZvY3VzKCkpOnMuX3Jlc3RvcmVGb2N1cygpfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7aXQocy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJrZXlkb3duIikucGlwZShPYmplY3QoYnQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5Q29kZT09PXJ0JiYhcy5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cy5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXV0b0ZvY3VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9Gb2N1c30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F1dG9Gb2N1cz1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX29wZW5lZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdH0pLE9iamVjdChTLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkU3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJjA9PT10LnRvU3RhdGUuaW5kZXhPZigib3BlbiIpfSksT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfY2xvc2VkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fSksT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjbG9zZWRTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZSYmInZvaWQiPT09dC50b1N0YXRlfSksT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNGb2N1c1RyYXBFbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkJiYic2lkZSIhPT10aGlzLm1vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3RyYXBGb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5hdXRvRm9jdXMmJnRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCkudGhlbihmdW5jdGlvbihlKXtlfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzfHx0Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfSx0LnByb3RvdHlwZS5fcmVzdG9yZUZvY3VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvRm9jdXMpe3ZhciB0PXRoaXMuX2RvYyYmdGhpcy5fZG9jLmFjdGl2ZUVsZW1lbnQ7dCYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHQpJiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQsdGhpcy5fb3BlbmVkVmlhKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpKSx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1udWxsLHRoaXMuX29wZW5lZFZpYT1udWxsfX0sdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCksdGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkfSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudENoZWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9lbmFibGVBbmltYXRpb25zPSEwKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXAmJnRoaXMuX2ZvY3VzVHJhcC5kZXN0cm95KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29wZW5lZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudG9nZ2xlKEQodCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlKCEwLHQpfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvZ2dsZSghMSl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PSF0aGlzLm9wZW5lZCksdm9pZCAwPT09ZSYmKGU9InByb2dyYW0iKSx0aGlzLl9vcGVuZWQ9dCx0Pyh0aGlzLl9hbmltYXRpb25TdGF0ZT10aGlzLl9lbmFibGVBbmltYXRpb25zPyJvcGVuIjoib3Blbi1pbnN0YW50Iix0aGlzLl9vcGVuZWRWaWE9ZSk6KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9yZXN0b3JlRm9jdXMoKSksdGhpcy5fZm9jdXNUcmFwJiYodGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkKSxuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtuLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChFdC5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3JldHVybiB0KGU/Im9wZW4iOiJjbG9zZSIpfSl9KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5lbWl0KHQpfSx0LnByb3RvdHlwZS5fb25BbmltYXRpb25FbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5mcm9tU3RhdGUsbj10LnRvU3RhdGU7KDA9PT1uLmluZGV4T2YoIm9wZW4iKSYmInZvaWQiPT09ZXx8InZvaWQiPT09biYmMD09PWUuaW5kZXhPZigib3BlbiIpKSYmdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLl9vcGVuZWQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLHpnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksYSl7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciBzPXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgby5uLHRoaXMuX2Rlc3Ryb3llZD1uZXcgQy5hLHRoaXMuX2RvQ2hlY2tTdWJqZWN0PW5ldyBDLmEsdGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6bnVsbCxyaWdodDpudWxsfSx0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcz1uZXcgQy5hLHQmJnQuY2hhbmdlLnBpcGUoayh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtzLl92YWxpZGF0ZURyYXdlcnMoKSxzLl91cGRhdGVDb250ZW50TWFyZ2lucygpfSksdGhpcy5fYXV0b3NpemU9aX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhdXRvc2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvc2l6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F1dG9zaXplPUQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNCYWNrZHJvcCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLl9iYWNrZHJvcE92ZXJyaWRlPyF0aGlzLl9zdGFydHx8InNpZGUiIT09dGhpcy5fc3RhcnQubW9kZXx8IXRoaXMuX2VuZHx8InNpZGUiIT09dGhpcy5fZW5kLm1vZGU6dGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2JhY2tkcm9wT3ZlcnJpZGU9bnVsbD09dD9udWxsOkQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzO3RoaXMuX2RyYXdlcnMuY2hhbmdlcy5waXBlKFIobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3ZhbGlkYXRlRHJhd2VycygpLGUuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtlLl93YXRjaERyYXdlclRvZ2dsZSh0KSxlLl93YXRjaERyYXdlclBvc2l0aW9uKHQpLGUuX3dhdGNoRHJhd2VyTW9kZSh0KX0pLCghZS5fZHJhd2Vycy5sZW5ndGh8fGUuX2lzRHJhd2VyT3BlbihlLl9zdGFydCl8fGUuX2lzRHJhd2VyT3BlbihlLl9lbmQpKSYmZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RvQ2hlY2tTdWJqZWN0LnBpcGUoKDEwLHZvaWQgMD09PXQmJih0PWN0KSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBRZSgxMCx0KSl9KSxrKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl91cGRhdGVDb250ZW50TWFyZ2lucygpfSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZG9DaGVja1N1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW4oKX0pfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYXV0b3NpemUmJnRoaXMuX2lzUHVzaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Ll9kb0NoZWNrU3ViamVjdC5uZXh0KCl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyVG9nZ2xlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKGsodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSxPYmplY3QoYnQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlfSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXsib3Blbi1pbnN0YW50IiE9PXQudG9TdGF0ZSYmIk5vb3BBbmltYXRpb25zIiE9PWUuX2FuaW1hdGlvbk1vZGUmJmUuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtZHJhd2VyLXRyYW5zaXRpb24iKSxlLl91cGRhdGVDb250ZW50TWFyZ2lucygpLGUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksInNpZGUiIT09dC5tb2RlJiZ0Lm9wZW5lZENoYW5nZS5waXBlKGsodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3NldENvbnRhaW5lckNsYXNzKHQub3BlbmVkKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQub25Qb3NpdGlvbkNoYW5nZWQucGlwZShrKHRoaXMuX2RyYXdlcnMuY2hhbmdlcykpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KEV0LmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl92YWxpZGF0ZURyYXdlcnMoKX0pfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlck1vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0Ll9tb2RlQ2hhbmdlZC5waXBlKGsoT2JqZWN0KG90LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSx0LnByb3RvdHlwZS5fc2V0Q29udGFpbmVyQ2xhc3M9ZnVuY3Rpb24odCl7dD90aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci1vcGVuZWQiKTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWF0LWRyYXdlci1vcGVuZWQiKX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlRHJhd2Vycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RhcnQ9dGhpcy5fZW5kPW51bGwsdGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJlbmQiPT1lLnBvc2l0aW9uPyhudWxsIT10Ll9lbmQmJkZnKCJlbmQiKSx0Ll9lbmQ9ZSk6KG51bGwhPXQuX3N0YXJ0JiZGZygic3RhcnQiKSx0Ll9zdGFydD1lKX0pLHRoaXMuX3JpZ2h0PXRoaXMuX2xlZnQ9bnVsbCx0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyh0aGlzLl9sZWZ0PXRoaXMuX2VuZCx0aGlzLl9yaWdodD10aGlzLl9zdGFydCk6KHRoaXMuX2xlZnQ9dGhpcy5fc3RhcnQsdGhpcy5fcmlnaHQ9dGhpcy5fZW5kKX0sdC5wcm90b3R5cGUuX2lzUHVzaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkmJiJvdmVyIiE9dGhpcy5fc3RhcnQubW9kZXx8dGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX2VuZCkmJiJvdmVyIiE9dGhpcy5fZW5kLm1vZGV9LHQucHJvdG90eXBlLl9vbkJhY2tkcm9wQ2xpY2tlZD1mdW5jdGlvbigpe3RoaXMuYmFja2Ryb3BDbGljay5lbWl0KCksdGhpcy5fY2xvc2VNb2RhbERyYXdlcigpfSx0LnByb3RvdHlwZS5fY2xvc2VNb2RhbERyYXdlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7W3RoaXMuX3N0YXJ0LHRoaXMuX2VuZF0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYhZS5kaXNhYmxlQ2xvc2UmJnQuX2NhbkhhdmVCYWNrZHJvcChlKX0pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvc2UoKX0pfSx0LnByb3RvdHlwZS5faXNTaG93aW5nQmFja2Ryb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX3N0YXJ0KSYmdGhpcy5fY2FuSGF2ZUJhY2tkcm9wKHRoaXMuX3N0YXJ0KXx8dGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX2VuZCkmJnRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9lbmQpfSx0LnByb3RvdHlwZS5fY2FuSGF2ZUJhY2tkcm9wPWZ1bmN0aW9uKHQpe3JldHVybiJzaWRlIiE9PXQubW9kZXx8ISF0aGlzLl9iYWNrZHJvcE92ZXJyaWRlfSx0LnByb3RvdHlwZS5faXNEcmF3ZXJPcGVuPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiZ0Lm9wZW5lZH0sdC5wcm90b3R5cGUuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPTAsbj0wO2lmKHRoaXMuX2xlZnQmJnRoaXMuX2xlZnQub3BlbmVkJiYoInNpZGUiPT10aGlzLl9sZWZ0Lm1vZGU/ZSs9dGhpcy5fbGVmdC5fd2lkdGg6InB1c2giPT10aGlzLl9sZWZ0Lm1vZGUmJihlKz1yPXRoaXMuX2xlZnQuX3dpZHRoLG4tPXIpKSx0aGlzLl9yaWdodCYmdGhpcy5fcmlnaHQub3BlbmVkKWlmKCJzaWRlIj09dGhpcy5fcmlnaHQubW9kZSluKz10aGlzLl9yaWdodC5fd2lkdGg7ZWxzZSBpZigicHVzaCI9PXRoaXMuX3JpZ2h0Lm1vZGUpe3ZhciByO24rPXI9dGhpcy5fcmlnaHQuX3dpZHRoLGUtPXJ9ZT09PXRoaXMuX2NvbnRlbnRNYXJnaW5zLmxlZnQmJm49PT10aGlzLl9jb250ZW50TWFyZ2lucy5yaWdodHx8KHRoaXMuX2NvbnRlbnRNYXJnaW5zPXtsZWZ0OmUscmlnaHQ6bn0sdGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZW50TWFyZ2luQ2hhbmdlcy5uZXh0KHQuX2NvbnRlbnRNYXJnaW5zKX0pKX0sdH0oKSxVZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLGUsbil8fHRoaXN9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0oVmcpLEhnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2ZpeGVkSW5WaWV3cG9ydD0hMSxlLl9maXhlZFRvcEdhcD0wLGUuX2ZpeGVkQm90dG9tR2FwPTAsZX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkSW5WaWV3cG9ydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEluVmlld3BvcnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZEluVmlld3BvcnQ9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkVG9wR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkVG9wR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRUb3BHYXA9Rih0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkQm90dG9tR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQm90dG9tR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRCb3R0b21HYXA9Rih0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShCZyksUWc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0oemcpLHFnPWZ1bmN0aW9uKCl7fSxHZz1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBZZyh0KXtyZXR1cm4gby5rYigyLFtvLlphKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIFdnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InRyYW5zZm9ybSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToib3Blbiwgb3Blbi1pbnN0YW50IixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwgMCwgMCkiLHZpc2liaWxpdHk6InZpc2libGUifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToidm9pZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnsiYm94LXNoYWRvdyI6Im5vbmUiLHZpc2liaWxpdHk6ImhpZGRlbiJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2b2lkID0+IG9wZW4taW5zdGFudCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMG1zIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPD0+IG9wZW4sIG9wZW4taW5zdGFudCA9PiB2b2lkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiI0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBaZyh0KXtyZXR1cm4gby5rYigyLFtvLlphKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIEtnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRyYXdlci1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl17dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1kcmF3ZXItY29udGFpbmVyW2Z1bGxzY3JlZW5dLm1hdC1kcmF3ZXItb3BlbmVke292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXIubWF0LWRyYXdlci1jb250YWluZXItZXhwbGljaXQtYmFja2Ryb3AgLm1hdC1kcmF3ZXItc2lkZXt6LWluZGV4OjN9Lm1hdC1kcmF3ZXItYmFja2Ryb3B7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt6LWluZGV4OjM7dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bnt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1iYWNrZHJvcHt0cmFuc2l0aW9uLWR1cmF0aW9uOi40czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3IsdmlzaWJpbGl0eX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci1iYWNrZHJvcHtvcGFjaXR5Oi41fX0ubWF0LWRyYXdlci1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1jb250ZW50e3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtLG1hcmdpbi1sZWZ0LG1hcmdpbi1yaWdodH0ubWF0LWRyYXdlcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjQ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt6LWluZGV4OjM7b3V0bGluZTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdy15OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXIsW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1yaWdodDpzb2xpZCAxcHggY3VycmVudENvbG9yfX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZCxbZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IGN1cnJlbnRDb2xvcjtib3JkZXItcmlnaHQ6bm9uZX19Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1zaWRle3otaW5kZXg6Mn0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2Vye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2xlZnQ6MDtyaWdodDphdXRvO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXNpZGVuYXYtZml4ZWR7cG9zaXRpb246Zml4ZWR9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIFhnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItYmFja2Ryb3AiXV0sW1syLCJtYXQtZHJhd2VyLXNob3duIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuX29uQmFja2Ryb3BDbGlja2VkKCkmJnIpLHJ9LG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5faXNTaG93aW5nQmFja2Ryb3AoKSl9KX1mdW5jdGlvbiAkZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDMsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNka1Njcm9sbGFibGUiLCIiXSxbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXV0sW1s0LCJtYXJnaW4tbGVmdCIsInB4Il0sWzQsIm1hcmdpbi1yaWdodCIsInB4Il1dLG51bGwsbnVsbCxZZyxHZykpLG8uUGEoMSwyMTI5OTIsW1sxLDRdXSwwLHd0LFtvLmssX3Qsby55XSxudWxsLG51bGwpLG8uUGEoMiwxMDk3NzI4LG51bGwsMCxVZyxbby5oLFFnXSxudWxsLG51bGwpLG8uWmEoMCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt0KGUsMCwwLG8uYWIoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5sZWZ0LG8uYWIoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX1mdW5jdGlvbiBKZyh0KXtyZXR1cm4gby5rYigyLFtvLmdiKDY3MTA4ODY0MCwxLHtzY3JvbGxhYmxlOjB9KSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLFhnKSksby5QYSgyLDE2Mzg0LG51bGwsMCxzLmssW28uUCxvLk1dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLG8uWmEobnVsbCwwKSxvLlphKG51bGwsMSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCwkZykpLG8uUGEoNiwxNjM4NCxudWxsLDAscy5rLFtvLlAsby5NXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uaGFzQmFja2Ryb3ApLHQoZSw2LDAsIW4uX2NvbnRlbnQpfSxudWxsKX12YXIgdHY9eWUoZnVuY3Rpb24oKXt9KSxldj15ZShmdW5jdGlvbigpe30pLG52PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGV9KHR2KSxydj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9lbGVtZW50PWUsci5fbmF2TGlzdD1uLHIuX2lzTmF2TGlzdD0hMSxyLl9pc05hdkxpc3Q9ISFuLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7bmV3IF9lKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc05hdkxpc3R8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fbmF2TGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWxpc3QtaXRlbS1mb2N1cyIpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGV9KGV2KSxpdj1mdW5jdGlvbigpe30sb3Y9ZnVuY3Rpb24oKXt9LGF2PW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRpdmlkZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItdG9wOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjgwcHh9W2Rpcj1ydGxdIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4MHB4fS5tYXQtc3ViaGVhZGVye2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye21hcmdpbjowfS5tYXQtbGlzdCwubWF0LW5hdi1saXN0LC5tYXQtc2VsZWN0aW9uLWxpc3R7cGFkZGluZy10b3A6OHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo3MnB4O3dpZHRoOmNhbGMoMTAwJSAtIDcycHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjI0cHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjRweDt3aWR0aDpjYWxjKDEwMCUgLSA2NHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbGlzdFtkZW5zZV0sLm1hdC1uYXYtbGlzdFtkZW5zZV0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV17cGFkZGluZy10b3A6NHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi00cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gc3YodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApXSxudWxsLG51bGwpfXZhciBsdj1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiB1dih0KXtyZXR1cm4gby5rYigyLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0LXJpcHBsZSIsIiJdXSxbWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMiwyMTI5OTIsbnVsbCwwLFRlLFtvLmssby55LHUsWzIsa2VdLFsyLHhpXV0se2Rpc2FibGVkOlswLCJkaXNhYmxlZCJdLHRyaWdnZXI6WzEsInRyaWdnZXIiXX0sbnVsbCksby5aYShudWxsLDApLCh0KCkoKSxvLlFhKDQsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LXRleHQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5aYShudWxsLDEpLG8uWmEobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLG8uYWIoZSwyKS51bmJvdW5kZWQpfSl9dmFyIGN2PW8uT2Eoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siYm9keVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjJlbX0uZmlsbC10b29sYmFyLXNwYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSBhdXRvfS5zaWRlbmF2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnNpZGVuYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwMHB4O2JveC1zaGFkb3c6M3B4IDAgNnB4IHJnYmEoMCwwLDAsLjI0KX0jc2l0ZW1hcGJ1dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9I3NpZGVuYXZmbGV4Y29udGVudFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMDBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGZ2KHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMTUwLCJkaXYiLFtbImNsYXNzIiwibWF0LWFwcC1iYWNrZ3JvdW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMTcsIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsImFjY2VudCJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLERnLFJnKSksby5QYSgyLDQyNDM0NTYsbnVsbCwxLE1nLFtvLmssdSxzLmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksby5nYig2MDM5Nzk3NzYsMSx7X3Rvb2xiYXJSb3dzOjF9KSwodCgpKCksby5RYSg0LDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PXQuY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJnIpLHJ9LE9pLEVpKSksby5QYSg1LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5RYSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSg3LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsibWVudSJdKSksKHQoKSgpLG8uUWEoOSwwLG51bGwsMCwwLCJzcGFuIixbWyJjbGFzcyIsImZpbGwtdG9vbGJhci1zcGFjZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxMCwwLG51bGwsMCwxLCJzcGFuIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiTWVUaHJpWCJdKSksKHQoKSgpLG8uUWEoMTIsMCxudWxsLDAsMCwic3BhbiIsW1sic3R5bGUiLCJ3aWR0aDowLjJlbSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxMywwLG51bGwsMCwwLCJpbWciLFtbInNyYyIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzL2MvYzAvVC0tR09fUGFyaXMtU2FjbGF5LS1nby1wcy13aGl0ZS5wbmciXSxbInN0eWxlIiwibWF4LWhlaWdodDoxMDAlOyB3aWR0aDphdXRvOyBwYWRkaW5nOjFlbTsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMTQsMCxudWxsLDAsMCwic3BhbiIsW1sic3R5bGUiLCJ3aWR0aDowLjJlbSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxNSwwLG51bGwsMCwzLCJzcGFuIixbWyJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjtsaW5lLWhlaWdodDogODUlOyBmb250LXNpemU6IG1lZGl1bTsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIlRlYW0gR08iXSkpLCh0KCkoKSxvLlFhKDE3LDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiUGFyaXNTYWNsYXkiXSkpLCh0KCkoKSxvLlFhKDE5LDAsbnVsbCxudWxsLDEzMSwibWF0LXNpZGVuYXYtY29udGFpbmVyIixbWyJjbGFzcyIsInNpZGVuYXYtY29udGFpbmVyIG1hdC1kcmF3ZXItY29udGFpbmVyIG1hdC1zaWRlbmF2LWNvbnRhaW5lciJdXSxbWzIsIm1hdC1kcmF3ZXItY29udGFpbmVyLWV4cGxpY2l0LWJhY2tkcm9wIixudWxsXV0sbnVsbCxudWxsLEpnLEtnKSksby5QYSgyMCwxNDkwOTQ0LG51bGwsMixRZyxbWzIsY2VdLG8uayxvLnksby5oLExnLFsyLHhpXV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwyLHtfZHJhd2VyczoxfSksby5nYigzMzU1NDQzMjAsMyx7X2NvbnRlbnQ6MH0pLCh0KCkoKSxvLlFhKDIzLDAsbnVsbCwwLDExOSwibWF0LXNpZGVuYXYiLFtbImNsYXNzIiwic2lkZW5hdiBtYXQtZHJhd2VyIG1hdC1zaWRlbmF2Il0sWyJmaXhlZEluVmlld3BvcnQiLCJ0cnVlIl0sWyJ0YWJJbmRleCIsIi0xIl1dLFtbMSwicm9sZSIsMF0sWzQwLCJAdHJhbnNmb3JtIiwwXSxbMSwiYWxpZ24iLDBdLFsyLCJtYXQtZHJhd2VyLWVuZCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItb3ZlciIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItcHVzaCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItc2lkZSIsbnVsbF0sWzIsIm1hdC1zaWRlbmF2LWZpeGVkIixudWxsXSxbNCwidG9wIiwicHgiXSxbNCwiYm90dG9tIiwicHgiXV0sW1siY29tcG9uZW50IiwiQHRyYW5zZm9ybS5zdGFydCJdLFsiY29tcG9uZW50IiwiQHRyYW5zZm9ybS5kb25lIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY29tcG9uZW50OkB0cmFuc2Zvcm0uc3RhcnQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMjQpLl9vbkFuaW1hdGlvblN0YXJ0KG4pJiZyKSwiY29tcG9uZW50OkB0cmFuc2Zvcm0uZG9uZSI9PT1lJiYocj0hMSE9PW8uYWIodCwyNCkuX29uQW5pbWF0aW9uRW5kKG4pJiZyKSxyfSxaZyxXZykpLG8uUGEoMjQsMzMyNTk1MixbWzIsNF0sWyJkcmF3ZXIiLDRdXSwwLEhnLFtvLmssJGUsZW4sdSxvLnksWzIscy5kXV0se21vZGU6WzAsIm1vZGUiXSxvcGVuZWQ6WzEsIm9wZW5lZCJdLGZpeGVkSW5WaWV3cG9ydDpbMiwiZml4ZWRJblZpZXdwb3J0Il19LG51bGwpLG8uY2IoMTMxMDcyLHMuYixbby5oXSksby5jYigxMzEwNzIscy5iLFtvLmhdKSwodCgpKCksby5RYSgyNywwLG51bGwsMCw5LCJtYXQtdG9vbGJhciIsW1siY2xhc3MiLCJtYXQtdG9vbGJhciJdLFsiY29sb3IiLCJwcmltYXJ5Il0sWyJzdHlsZSIsIm1hcmdpbi10b3A6IDE1cHg7Il1dLFtbMiwibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsbnVsbF0sWzIsIm1hdC10b29sYmFyLXNpbmdsZS1yb3ciLG51bGxdXSxudWxsLG51bGwsRGcsUmcpKSxvLlBhKDI4LDQyNDM0NTYsbnVsbCwxLE1nLFtvLmssdSxzLmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksby5nYig2MDM5Nzk3NzYsNCx7X3Rvb2xiYXJSb3dzOjF9KSwodCgpKCksby5pYigtMSwwLFsiTmF2aWdhdGlvbiAiXSkpLCh0KCkoKSxvLlFhKDMxLDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDMyLDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PXQuY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJnIpLHJ9LE9pLEVpKSksby5QYSgzMywxODAyMjQsbnVsbCwwLGFuLFtvLmssdSxlbixbMix4aV1dLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMzQsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDM1LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsia2V5Ym9hcmRfYXJyb3dfbGVmdCJdKSksKHQoKSgpLG8uUWEoMzcsMCxudWxsLDAsMTA1LCJtYXQtbmF2LWxpc3QiLFtbImNsYXNzIiwibWF0LW5hdi1saXN0Il0sWyJyb2xlIiwibmF2aWdhdGlvbiJdXSxudWxsLG51bGwsbnVsbCxzdixhdikpLG8uUGEoMzgsNDkxNTIsbnVsbCwwLG52LFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMzksMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09by5hYih0LDQwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsNDApLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8uYWIodCw0Mykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSx1dixsdikpLG8uUGEoNDAsMTA5NzcyOCxudWxsLDIscnYsW28uayxbMixudl1dLG51bGwsbnVsbCksby5nYig2MDM5Nzk3NzYsNSx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCw2LHtfYXZhdGFyOjB9KSxvLlBhKDQzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYig0NCwxKSwodCgpKCksby5RYSg0NSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoNDYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJkYXNoYm9hcmQiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgTWFpbiBwYWdlIl0pKSwodCgpKCksby5RYSg0OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsNTApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw1MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDUzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg1MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3Niw3LHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDgse19hdmF0YXI6MH0pLG8uUGEoNTMsNjcxNzQ0LG51bGwsMCxEeS5sLFtEeS5rLER5LmEscy5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxvLmJiKDU0LDEpLCh0KCkoKSxvLlFhKDU1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSg1Niw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImFzc2Vzc21lbnQiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgUHJvamVjdCBkZXRhaWxzIl0pKSwodCgpKCksby5RYSg1OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsNjApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw2MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDYzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg2MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3Niw5LHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDEwLHtfYXZhdGFyOjB9KSxvLlBhKDYzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYig2NCwxKSwodCgpKCksby5RYSg2NSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoNjYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJibHVyX2NpcmN1bGFyIl0pKSwodCgpKCksby5pYigtMSwyLFsiIEJpb2xvZ3kiXSkpLCh0KCkoKSxvLlFhKDY5LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PW8uYWIodCw3MCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09by5hYih0LDcwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsNzMpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sdXYsbHYpKSxvLlBhKDcwLDEwOTc3MjgsbnVsbCwyLHJ2LFtvLmssWzIsbnZdXSxudWxsLG51bGwpLG8uZ2IoNjAzOTc5Nzc2LDExLHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDEyLHtfYXZhdGFyOjB9KSxvLlBhKDczLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYig3NCwxKSwodCgpKCksby5RYSg3NSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoNzYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJtZW1vcnkiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgQ29tcHV0aW5nIl0pKSwodCgpKCksby5RYSg3OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsODApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw4MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDgzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg4MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwxMyx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCwxNCx7X2F2YXRhcjowfSksby5QYSg4Myw2NzE3NDQsbnVsbCwwLER5LmwsW0R5LmssRHkuYSxzLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLG8uYmIoODQsMSksKHQoKSgpLG8uUWEoODUsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDg2LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiYWNjZXNzaWJpbGl0eV9uZXciXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgSHVtYW4gUHJhY3RpY2VzIl0pKSwodCgpKCksby5RYSg4OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsOTApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw5MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDkzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg5MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwxNSx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCwxNix7X2F2YXRhcjowfSksby5QYSg5Myw2NzE3NDQsbnVsbCwwLER5LmwsW0R5LmssRHkuYSxzLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLG8uYmIoOTQsMSksKHQoKSgpLG8uUWEoOTUsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDk2LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsicGVvcGxlIl0pKSwodCgpKCksby5pYigtMSwyLFsiIE91ciB0ZWFtIl0pKSwodCgpKCksby5RYSg5OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTAwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTAwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTAzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSgxMDAsMTA5NzcyOCxudWxsLDIscnYsW28uayxbMixudl1dLG51bGwsbnVsbCksby5nYig2MDM5Nzk3NzYsMTcse19saW5lczoxfSksby5nYigzMzU1NDQzMjAsMTgse19hdmF0YXI6MH0pLG8uUGEoMTAzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYigxMDQsMSksKHQoKSgpLG8uUWEoMTA1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxMDYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJmb2xkZXJfc3BlY2lhbCJdKSksKHQoKSgpLG8uaWIoLTEsMixbIiBTdXBwb3J0Il0pKSwodCgpKCksby5RYSgxMDksMCxudWxsLDAsMTEsImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdLFsic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAjYTY0MDdiMEYiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTEwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTEwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTEzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSgxMTAsMTA5NzcyOCxudWxsLDIscnYsW28uayxbMixudl1dLG51bGwsbnVsbCksby5nYig2MDM5Nzk3NzYsMTkse19saW5lczoxfSksby5nYigzMzU1NDQzMjAsMjAse19hdmF0YXI6MH0pLG8uUGEoMTEzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYigxMTQsMSksKHQoKSgpLG8uUWEoMTE1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxMTYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJkZXNrdG9wX3dpbmRvd3MiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgV2lraSBQcm94eSAiXSkpLCh0KCkoKSxvLlFhKDExOSwwLG51bGwsMiwxLCJzdXAiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIoZGV2KSJdKSksKHQoKSgpLG8uUWEoMTIxLDAsbnVsbCwwLDExLCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXSxbInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogI2E2NDA3YjBGIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09by5hYih0LDEyMikuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09by5hYih0LDEyMikuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDEyNSkub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSx1dixsdikpLG8uUGEoMTIyLDEwOTc3MjgsbnVsbCwyLHJ2LFtvLmssWzIsbnZdXSxudWxsLG51bGwpLG8uZ2IoNjAzOTc5Nzc2LDIxLHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDIyLHtfYXZhdGFyOjB9KSxvLlBhKDEyNSw2NzE3NDQsbnVsbCwwLER5LmwsW0R5LmssRHkuYSxzLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLG8uYmIoMTI2LDEpLCh0KCkoKSxvLlFhKDEyNywwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoMTI4LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiZGVza3RvcF93aW5kb3dzIl0pKSwodCgpKCksby5pYigtMSwyLFsiIExhenkgIl0pKSwodCgpKCksby5RYSgxMzEsMCxudWxsLDIsMSwic3VwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiKGRldikiXSkpLCh0KCkoKSxvLlFhKDEzMywwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbImlkIiwic2l0ZW1hcGJ1dCJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PW8uYWIodCwxMzQpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCwxMzQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8uYWIodCwxMzcpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sdXYsbHYpKSxvLlBhKDEzNCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwyMyx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCwyNCx7X2F2YXRhcjowfSksby5QYSgxMzcsNjcxNzQ0LG51bGwsMCxEeS5sLFtEeS5rLER5LmEscy5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxvLmJiKDEzOCwxKSwodCgpKCksby5RYSgxMzksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDE0MCw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImFwcHMiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgU2l0ZSBtYXAiXSkpLCh0KCkoKSxvLlFhKDE0MywwLG51bGwsMSw3LCJtYXQtc2lkZW5hdi1jb250ZW50IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItY29udGVudCBtYXQtc2lkZW5hdi1jb250ZW50Il0sWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXRBbGlnbiIsImNlbnRlciJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLFlnLEdnKSksby5QYSgxNDQsMTA5NzcyOCxbWzMsNF1dLDAsVWcsW28uaCxRZ10sbnVsbCxudWxsKSxvLlBhKDE0NSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxvLlBhKDE0Niw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLlFhKDE0NywwLG51bGwsMCwzLCJkaXYiLFtbImZ4RmxleCIsIjEgMCA1MDBweCJdLFsiaWQiLCJzaWRlbmF2ZmxleGNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxNDgsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoMTQ5LDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDE1MCwyMTI5OTIsbnVsbCwwLER5Lm4sW0R5LmIsby5QLG8uaixbOCxudWxsXSxvLmhdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDIsMCwiYWNjZW50IiksdChlLDcsMCksdChlLDIwLDApLHQoZSwyNCwwLG8uamIoZSwyNCwwLG8uYWIoZSwyNSkudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJvdmVyIjoic2lkZSIsbi5vcGVuZWRTaWRlTmF2LCJ0cnVlIiksdChlLDI4LDAsInByaW1hcnkiKSx0KGUsMzUsMCksdChlLDQzLDAsdChlLDQ0LDAsIi4uL2Rhc2hib2FyZCIpKSx0KGUsNDYsMCksdChlLDUzLDAsdChlLDU0LDAsIi4uL3Byb2plY3QiKSksdChlLDU2LDApLHQoZSw2MywwLHQoZSw2NCwwLCIuLi9iaW9sb2d5IikpLHQoZSw2NiwwKSx0KGUsNzMsMCx0KGUsNzQsMCwiLi4vY29tcHV0aW5nIikpLHQoZSw3NiwwKSx0KGUsODMsMCx0KGUsODQsMCwiLi4vaHVtYW4tcHJhY3RpY2VzIikpLHQoZSw4NiwwKSx0KGUsOTMsMCx0KGUsOTQsMCwiLi4vdGVhbSIpKSx0KGUsOTYsMCksdChlLDEwMywwLHQoZSwxMDQsMCwiLi4vc3VwcG9ydCIpKSx0KGUsMTA2LDApLHQoZSwxMTMsMCx0KGUsMTE0LDAsIi4uL3dpa2ktbHAiKSksdChlLDExNiwwKSx0KGUsMTI1LDAsdChlLDEyNiwwLCIuLi9zbCIpKSx0KGUsMTI4LDApLHQoZSwxMzcsMCx0KGUsMTM4LDAsIi4uL3NpdGVtYXAiKSksdChlLDE0MCwwKSx0KGUsMTQ1LDAsInJvdyIpLHQoZSwxNDYsMCwiY2VudGVyIiksdChlLDE0OCwwLCIxIDAgNTAwcHgiKSx0KGUsMTUwLDApfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsby5hYihlLDIpLl90b29sYmFyUm93cy5sZW5ndGgsIW8uYWIoZSwyKS5fdG9vbGJhclJvd3MubGVuZ3RoKSx0KGUsNCwwLG8uYWIoZSw1KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09by5hYihlLDUpLl9hbmltYXRpb25Nb2RlKSx0KGUsNiwwLG8uYWIoZSw3KS5pbmxpbmUpLHQoZSwxOSwwLG8uYWIoZSwyMCkuX2JhY2tkcm9wT3ZlcnJpZGUpLHQoZSwyMywwLG8uamIoZSwyMywwLG8uYWIoZSwyNikudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJkaWFsb2ciOiJuYXZpZ2F0aW9uIixvLmFiKGUsMjQpLl9hbmltYXRpb25TdGF0ZSxudWxsLCJlbmQiPT09by5hYihlLDI0KS5wb3NpdGlvbiwib3ZlciI9PT1vLmFiKGUsMjQpLm1vZGUsInB1c2giPT09by5hYihlLDI0KS5tb2RlLCJzaWRlIj09PW8uYWIoZSwyNCkubW9kZSxvLmFiKGUsMjQpLmZpeGVkSW5WaWV3cG9ydCxvLmFiKGUsMjQpLmZpeGVkSW5WaWV3cG9ydD9vLmFiKGUsMjQpLmZpeGVkVG9wR2FwOm51bGwsby5hYihlLDI0KS5maXhlZEluVmlld3BvcnQ/by5hYihlLDI0KS5maXhlZEJvdHRvbUdhcDpudWxsKSx0KGUsMjcsMCxvLmFiKGUsMjgpLl90b29sYmFyUm93cy5sZW5ndGgsIW8uYWIoZSwyOCkuX3Rvb2xiYXJSb3dzLmxlbmd0aCksdChlLDMyLDAsby5hYihlLDMzKS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09by5hYihlLDMzKS5fYW5pbWF0aW9uTW9kZSksdChlLDM0LDAsby5hYihlLDM1KS5pbmxpbmUpLHQoZSwzOSwwLG8uYWIoZSw0MCkuX2F2YXRhcixvLmFiKGUsNDApLl9hdmF0YXIsby5hYihlLDQzKS50YXJnZXQsby5hYihlLDQzKS5ocmVmKSx0KGUsNDUsMCxvLmFiKGUsNDYpLmlubGluZSksdChlLDQ5LDAsby5hYihlLDUwKS5fYXZhdGFyLG8uYWIoZSw1MCkuX2F2YXRhcixvLmFiKGUsNTMpLnRhcmdldCxvLmFiKGUsNTMpLmhyZWYpLHQoZSw1NSwwLG8uYWIoZSw1NikuaW5saW5lKSx0KGUsNTksMCxvLmFiKGUsNjApLl9hdmF0YXIsby5hYihlLDYwKS5fYXZhdGFyLG8uYWIoZSw2MykudGFyZ2V0LG8uYWIoZSw2MykuaHJlZiksdChlLDY1LDAsby5hYihlLDY2KS5pbmxpbmUpLHQoZSw2OSwwLG8uYWIoZSw3MCkuX2F2YXRhcixvLmFiKGUsNzApLl9hdmF0YXIsby5hYihlLDczKS50YXJnZXQsby5hYihlLDczKS5ocmVmKSx0KGUsNzUsMCxvLmFiKGUsNzYpLmlubGluZSksdChlLDc5LDAsby5hYihlLDgwKS5fYXZhdGFyLG8uYWIoZSw4MCkuX2F2YXRhcixvLmFiKGUsODMpLnRhcmdldCxvLmFiKGUsODMpLmhyZWYpLHQoZSw4NSwwLG8uYWIoZSw4NikuaW5saW5lKSx0KGUsODksMCxvLmFiKGUsOTApLl9hdmF0YXIsby5hYihlLDkwKS5fYXZhdGFyLG8uYWIoZSw5MykudGFyZ2V0LG8uYWIoZSw5MykuaHJlZiksdChlLDk1LDAsby5hYihlLDk2KS5pbmxpbmUpLHQoZSw5OSwwLG8uYWIoZSwxMDApLl9hdmF0YXIsby5hYihlLDEwMCkuX2F2YXRhcixvLmFiKGUsMTAzKS50YXJnZXQsby5hYihlLDEwMykuaHJlZiksdChlLDEwNSwwLG8uYWIoZSwxMDYpLmlubGluZSksdChlLDEwOSwwLG8uYWIoZSwxMTApLl9hdmF0YXIsby5hYihlLDExMCkuX2F2YXRhcixvLmFiKGUsMTEzKS50YXJnZXQsby5hYihlLDExMykuaHJlZiksdChlLDExNSwwLG8uYWIoZSwxMTYpLmlubGluZSksdChlLDEyMSwwLG8uYWIoZSwxMjIpLl9hdmF0YXIsby5hYihlLDEyMikuX2F2YXRhcixvLmFiKGUsMTI1KS50YXJnZXQsby5hYihlLDEyNSkuaHJlZiksdChlLDEyNywwLG8uYWIoZSwxMjgpLmlubGluZSksdChlLDEzMywwLG8uYWIoZSwxMzQpLl9hdmF0YXIsby5hYihlLDEzNCkuX2F2YXRhcixvLmFiKGUsMTM3KS50YXJnZXQsby5hYihlLDEzNykuaHJlZiksdChlLDEzOSwwLG8uYWIoZSwxNDApLmlubGluZSksdChlLDE0MywwLG8uYWIoZSwxNDQpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLmxlZnQsby5hYihlLDE0NCkuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMucmlnaHQpfSl9dmFyIGh2PW8uTWEoImFwcC1yb290IixXLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXJvb3QiLFtdLG51bGwsbnVsbCxudWxsLGZ2LGN2KSksby5QYSgxLDExNDY4OCxudWxsLDAsVyxbcV0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxwdj1uZXcgby5wKCJtYXQtc2VsZWN0LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIGR2KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgbXY9ZnVuY3Rpb24oKXt9LHl2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY2hhbmdlcz1uZXcgQy5hLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9ZnVuY3Rpb24odCxlLG4pe2lmKDA9PW58fDA9PWUpcmV0dXJuIjAgb2YgIituO3ZhciByPXQqZTtyZXR1cm4gcisxKyIgLSAiKyhyPChuPU1hdGgubWF4KG4sMCkpP01hdGgubWluKHIrZSxuKTpyK2UpKyIgb2YgIitufX1yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIGd2KHQpe3JldHVybiB0fHxuZXcgeXZ9dmFyIHZ2PWZ1bmN0aW9uKCl7fSxidj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmNoYW5nZXM9bmV3IEMuYSx0aGlzLnNvcnRCdXR0b25MYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4iQ2hhbmdlIHNvcnRpbmcgZm9yICIrdH19cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBfdih0KXtyZXR1cm4gdHx8bmV3IGJ2fXZhciB3dj1mdW5jdGlvbigpe30seHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxDdj1mdW5jdGlvbigpe30sRXY9bmV3IG8ucCgibWF0LW1lbnUtc2Nyb2xsLXN0cmF0ZWd5Iik7ZnVuY3Rpb24gT3YodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBTdj1mdW5jdGlvbigpe30sa3Y9ZnVuY3Rpb24oKXt9LFR2PWZ1bmN0aW9uKCl7fSxQdj1mdW5jdGlvbigpe30sQXY9ZnVuY3Rpb24oKXt9LGp2PWZ1bmN0aW9uKCl7fSxJdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtPYmplY3Qocy5yKShlKSYmIXQmJmNvbnNvbGUud2FybigiV2FybmluZzogRmxleCBMYXlvdXQgbG9hZGVkIG9uIHRoZSBzZXJ2ZXIgd2l0aG91dCBGbGV4TGF5b3V0U2VydmVyTW9kdWxlIil9cmV0dXJuIHQud2l0aENvbmZpZz1mdW5jdGlvbihlLG4pe3ZhciByPU9iamVjdC5hc3NpZ24oe30sZWQpLGk9W107Zm9yKHZhciBvIGluIGUpZVtvXT09PXJbb118fCExIT09ZVtvXSYmITAhPT1lW29dfHwocltvXT1lW29dKTtyZXR1cm4gZS5zZXJ2ZXJMb2FkZWQmJmkucHVzaCh7cHJvdmlkZTpwZCx1c2VWYWx1ZTohMH0pLEFycmF5LmlzQXJyYXkobikmJmkucHVzaCh7cHJvdmlkZTpRcCx1c2VWYWx1ZTpuLG11bHRpOiEwfSksaS5wdXNoKHtwcm92aWRlOm5kLHVzZVZhbHVlOnJ9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6aX19LHR9KCksTXY9ZnVuY3Rpb24oKXt9LE52PWZ1bmN0aW9uKCl7fSxSdj1vLk5hKGEsW1ddLGZ1bmN0aW9uKHQpe3JldHVybiBvLlhhKFtvLllhKDUxMixvLmosby5DYSxbWzgsW05lLFBpLE1pLE5pLmEsdnAsenAsVnksbGcsaGcseWcsX2csRWcsSWcsaHZdXSxbMyxvLmpdLG8ud10pLG8uWWEoNTEyMCxvLnQsby5MYSxbWzMsby50XV0pLG8uWWEoNDYwOCxzLm0scy5sLFtvLnQsWzIscy50XV0pLG8uWWEoNTEyMCxvLmMsby5JYSxbXSksby5ZYSg1MTIwLG8ucixvLkphLFtdKSxvLllhKDUxMjAsby5zLG8uS2EsW10pLG8uWWEoNDYwOCxoZS5jLGhlLnIsW3MuZF0pLG8uWWEoNjE0NCxvLkcsbnVsbCxbaGUuY10pLG8uWWEoNDYwOCxoZS5mLGJlLFtbMix2ZV0sWzIsZGVdXSksby5ZYSg1MTIwLGhlLmQsZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuW25ldyBoZS5rKHQsZSxuKSxuZXcgaGUubyhyKSxuZXcgaGUubihpLG8sYSldfSxbcy5kLG8ueSxbMixvLkFdLHMuZCxzLmQsaGUuZixvLkRhXSksby5ZYSg0NjA4LGhlLmUsaGUuZSxbaGUuZCxvLnldKSxvLllhKDEzNTY4MCxoZS5tLGhlLm0sW3MuZF0pLG8uWWEoNDYwOCxoZS5sLGhlLmwsW2hlLmUsaGUubV0pLG8uWWEoNTEyMCxBbixiaSxbXSksby5ZYSg1MTIwLHZyLF9pLFtdKSxvLllhKDQ2MDgsWXIsdmksW0FuLHZyXSksby5ZYSg1MTIwLG8uRSx3aSxbaGUubCxZcixvLnldKSxvLllhKDYxNDQsaGUucCxudWxsLFtoZS5tXSksby5ZYSg0NjA4LG8uTixvLk4sW28ueV0pLG8uWWEoNDYwOCxoZS5oLGhlLmgsW3MuZF0pLG8uWWEoNDYwOCxoZS5pLGhlLmksW3MuZF0pLG8uWWEoNDYwOCxaLGZpLFtvLkUsaGUuYl0pLG8uWWEoNDYwOCx0ZSx0ZSxbUXQsR3Qsby5qLCR0LHF0LG8ucSxvLnkscy5kLGNlXSksby5ZYSg1MTIwLGVlLG5lLFt0ZV0pLG8uWWEoNTEyMCxwdixkdixbdGVdKSxvLllhKDUxMjAsb2UsYWUsW3RlXSksby5ZYSg1MTIwLHl2LGd2LFtbMyx5dl1dKSxvLllhKDUxMjAsYnYsX3YsW1szLGJ2XV0pLG8uWWEoNDYwOCxfbSxfbSxbXSksby5ZYSg0NjA4LGdlLGdlLFtdKSxvLllhKDQ2MDgseHYseHYsW10pLG8uWWEoNDYwOCx1ZCxjZCxbaWQsYWRdKSxvLllhKDUxMjAsRHkuaCxEeS5BLFtEeS55XSksby5ZYSg1MTIwLG8uYixmdW5jdGlvbih0LGUsbil7cmV0dXJuWyhyPXQsaT1lLGZ1bmN0aW9uKCl7aWYoT2JqZWN0KHMucSkoaSkpe3ZhciB0PS9cYmZsZXgtbGF5b3V0LS4rP1xiL2c7QXJyYXkuZnJvbShyLnF1ZXJ5U2VsZWN0b3JBbGwoIltjbGFzcyo9ZmxleC1sYXlvdXQtXSIpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmNvbnRhaW5zKCJmbGV4LWxheW91dC1zc3IiKSYmZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTplLmNsYXNzTmFtZS5yZXBsYWNlKHQsIiIpfSl9fSksbl07dmFyIHIsaX0sW3MuZCxvLkEsRHkuaF0pLG8uWWEoNDYwOCx6ZSx6ZSxbdGUsdG4sby5xLHEsWzMsemVdLEJlXSksby5ZYSg1MTIwLER5LmEsRHkueCxbRHkua10pLG8uWWEoNDYwOCxEeS5kLER5LmQsW10pLG8uWWEoNjE0NCxEeS5mLG51bGwsW0R5LmRdKSxvLllhKDEzNTY4MCxEeS5vLER5Lm8sW0R5Lmssby52LG8uaSxvLnEsRHkuZl0pLG8uWWEoNDYwOCxEeS5lLER5LmUsW10pLG8uWWEoNTEyMCxFdixPdixbdGVdKSxvLllhKDQ2MDgsQXksanksW3MuZCxvLkEsVHldKSxvLllhKDQ2MDgsSXksSXksW0F5LFB5XSksby5ZYSg1MTIwLHh5LGZ1bmN0aW9uKHQpe3JldHVyblt0XX0sW0l5XSksby5ZYSg0NjA4LFN5LFN5LFtdKSxvLllhKDYxNDQsT3ksbnVsbCxbU3ldKSxvLllhKDQ2MDgsa3ksa3ksW095XSksby5ZYSg2MTQ0LG95LG51bGwsW2t5XSksby5ZYSg0NjA4LGl5LE15LFtveSxvLnFdKSxvLllhKDQ2MDgsX3ksX3ksW2l5XSksby5ZYSgxMDczNzQyMzM2LHMuYyxzLmMsW10pLG8uWWEoMTAyNCxvLm0saGUucSxbXSksby5ZYSgxMDI0LG8ueCxmdW5jdGlvbigpe3JldHVybltEeS50KCldfSxbXSksby5ZYSg1MTIsRHkueSxEeS55LFtvLnFdKSxvLllhKDEwMjQsby5kLGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2hlLnModCksRHkueihlKV19LFtbMixvLnhdLER5LnldKSxvLllhKDUxMixvLmUsby5lLFtbMixvLmRdXSksby5ZYSgxMzE1ODQsby5nLG8uZyxbby55LG8uRGEsby5xLG8ubSxvLmosby5lXSksby5ZYSgxMDczNzQyMzM2LG8uZixvLmYsW28uZ10pLG8uWWEoMTA3Mzc0MjMzNixoZS5hLGhlLmEsW1szLGhlLmFdXSksby5ZYSgxMDczNzQyMzM2LENpLENpLFtdKSxvLllhKDEwNzM3NDIzMzYseix6LFtdKSxvLllhKDEwNzM3NDIzMzYsZmUsZmUsW10pLG8uWWEoMTA3Mzc0MjMzNixkZSxkZSxbWzIscGVdXSksby5ZYSgxMDczNzQyMzM2LE5nLE5nLFtdKSxvLllhKDEwNzM3NDIzMzYscCxwLFtdKSxvLllhKDEwNzM3NDIzMzYsUGUsUGUsW10pLG8uWWEoMTA3Mzc0MjMzNixzbixzbixbXSksby5ZYSgxMDczNzQyMzM2LEN0LEN0LFtdKSxvLllhKDEwNzM3NDIzMzYscWcscWcsW10pLG8uWWEoMTA3Mzc0MjMzNiwkeSwkeSxbXSksby5ZYSgxMDczNzQyMzM2LHdlLHdlLFtdKSxvLllhKDEwNzM3NDIzMzYsQWUsQWUsW10pLG8uWWEoMTA3Mzc0MjMzNixvdixvdixbXSksby5ZYSgxMDczNzQyMzM2LGl2LGl2LFtdKSxvLllhKDEwNzM3NDIzMzYsa3Ysa3YsW10pLG8uWWEoMTA3Mzc0MjMzNixUdixUdixbXSksby5ZYSgxMDczNzQyMzM2LEl0LEl0LFtdKSxvLllhKDEwNzM3NDIzMzYscmUscmUsW10pLG8uWWEoMTA3Mzc0MjMzNixqZSxqZSxbXSksby5ZYSgxMDczNzQyMzM2LFlkLFlkLFtdKSxvLllhKDEwNzM3NDIzMzYsbXYsbXYsW10pLG8uWWEoMTA3Mzc0MjMzNixsZSxsZSxbXSksby5ZYSgxMDczNzQyMzM2LHZ2LHZ2LFtdKSxvLllhKDEwNzM3NDIzMzYsd3Ysd3YsW10pLG8uWWEoMTA3Mzc0MjMzNixDcCxDcCxbXSksby5ZYSgxMDczNzQyMzM2LEFwLEFwLFtdKSxvLllhKDEwNzM3NDIzMzYsdHksdHksW10pLG8uWWEoMTA3Mzc0MjMzNixleSxleSxbXSksby5ZYSgxMDczNzQyMzM2LEtkLEtkLFtdKSxvLllhKDEwNzM3NDIzMzYsdG0sdG0sW10pLG8uWWEoMTA3Mzc0MjMzNixDdixDdixbXSksby5ZYSgxMDczNzQyMzM2LFB2LFB2LFtdKSxvLllhKDEwNzM3NDIzMzYsZmQsZmQsW10pLG8uWWEoMTA3Mzc0MjMzNixxZCxxZCxbXSksby5ZYSgxMDczNzQyMzM2LEF2LEF2LFtdKSxvLllhKDEwNzM3NDIzMzYsanYsanYsW10pLG8uWWEoMTA3Mzc0MjMzNixJdixJdixbWzIscGRdLG8uQV0pLG8uWWEoMTA3Mzc0MjMzNixVZSxVZSxbXSksby5ZYSgxMDI0LER5LnMsRHkudixbWzMsRHkua11dKSxvLllhKDUxMixEeS5xLER5LmMsW10pLG8uWWEoNTEyLER5LmIsRHkuYixbXSksby5ZYSgyNTYsRHkuZyx7dXNlSGFzaDohMH0sW10pLG8uWWEoMTAyNCxzLmgsRHkudSxbcy5wLFsyLHMuYV0sRHkuZ10pLG8uWWEoNTEyLHMuZyxzLmcsW3MuaF0pLG8uWWEoNTEyLG8uaSxvLmksW10pLG8uWWEoNTEyLG8udixvLkssW28uaSxbMixvLkxdXSksby5ZYSgxMDI0LER5LmksZnVuY3Rpb24oKXtyZXR1cm5bW3twYXRoOiJkYXNoYm9hcmQiLGNvbXBvbmVudDptcH0se3BhdGg6InNpdGVtYXAiLGNvbXBvbmVudDpMcH0se3BhdGg6Indpa2ktbHAvOnBhZ2VwYXRoIixjb21wb25lbnQ6bnl9LHtwYXRoOiJ3aWtpLWxwIixjb21wb25lbnQ6bnl9LHtwYXRoOiJ0ZWFtIixjb21wb25lbnQ6bmd9LHtwYXRoOiJwcm9qZWN0Iixjb21wb25lbnQ6dWd9LHtwYXRoOiJiaW9sb2d5Iixjb21wb25lbnQ6cGd9LHtwYXRoOiJjb21wdXRpbmciLGNvbXBvbmVudDpnZ30se3BhdGg6Imh1bWFuLXByYWN0aWNlcyIsY29tcG9uZW50OndnfSx7cGF0aDoic3VwcG9ydCIsY29tcG9uZW50OlNnfSx7cGF0aDoic2wiLGxvYWRDaGlsZHJlbjoiLi9zZWNvbmQtbGV2ZWwtY29tcG9uZW50cy9zZWNvbmQtbGV2ZWwtY29tcG9uZW50cy5tb2R1bGUjU2Vjb25kTGV2ZWxDb21wb25lbnRzTW9kdWxlIn0se3BhdGg6IiIscmVkaXJlY3RUbzoiZGFzaGJvYXJkIixwYXRoTWF0Y2g6ImZ1bGwifV1dfSxbXSksby5ZYSgxMDI0LER5LmssRHkudyxbby5nLER5LnEsRHkuYixzLmcsby5xLG8udixvLmksRHkuaSxEeS5nLFsyLER5LnBdLFsyLER5LmpdXSksby5ZYSgxMDczNzQyMzM2LER5Lm0sRHkubSxbWzIsRHkuc10sWzIsRHkua11dKSxvLllhKDEwNzM3NDIzMzYsTXYsTXYsW10pLG8uWWEoMTA3Mzc0MjMzNixOdixOdixbXSksby5ZYSgxMDczNzQyMzM2LFZpLFZpLFtdKSxvLllhKDEwNzM3NDIzMzYsU3YsU3YsW10pLG8uWWEoMTA3Mzc0MjMzNixOeSxOeSxbXSksby5ZYSgxMDczNzQyMzM2LFJ5LFJ5LFtdKSxvLllhKDEwNzM3NDIzMzYsYSxhLFtdKSxvLllhKDI1NixvLkJhLCEwLFtdKSxvLllhKDI1Nix4aSwiQnJvd3NlckFuaW1hdGlvbnMiLFtdKSxvLllhKDI1NixUeSwiWFNSRi1UT0tFTiIsW10pLG8uWWEoMjU2LFB5LCJYLVhTUkYtVE9LRU4iLFtdKV0pfSk7T2JqZWN0KG8uVSkoKSxoZS5qKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShSdikuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSl9LHpvdG06ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkucGFyZW50PWUsaS5vdXRlclZhbHVlPW4saS5vdXRlckluZGV4PXIsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeU5leHQodGhpcy5vdXRlclZhbHVlLHQsdGhpcy5vdXRlckluZGV4LHRoaXMuaW5kZXgrKyx0aGlzKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeUVycm9yKHQsdGhpcyksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudC5ub3RpZnlDb21wbGV0ZSh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGV9KG4oIkZGT28iKS5hKSxvPW4oIkZ4YjEiKTtmdW5jdGlvbiBhKHQsZSxuLHIpe3ZhciBhPW5ldyBpKHQsbixyKTtyZXR1cm4gT2JqZWN0KG8uYSkoZSkoYSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX19LFtbNCwxXV1dKTsod2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSkucHVzaChbWzBdLHsiM1lDUCI6ZnVuY3Rpb24obixsLG8peyJ1c2Ugc3RyaWN0IjtvLnIobCk7dmFyIHQ9bygiQ2NuRyIpLHU9ZnVuY3Rpb24oKXt9LGE9bygicE1uUyIpLGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7fXJldHVybiBuLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sbn0oKSxjPXQuT2Eoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siIl1dLGRhdGE6e319KTtmdW5jdGlvbiBpKG4pe3JldHVybiB0LmtiKDAsWyhuKCkoKSx0LlFhKDAsMCxudWxsLG51bGwsMSwicCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaWIoLTEsbnVsbCxbIiBUaGlzIHdpbGwgYmUgdGhlIGRldGFpbGxlZCBsYWIgbm90ZWJvb2sgY29tcG9uZW50LlxuIl0pKV0sbnVsbCxudWxsKX12YXIgcD10Lk1hKCJhcHAtbGFiLW5vdGUtYm9vayIsZSxmdW5jdGlvbihuKXtyZXR1cm4gdC5rYigwLFsobigpKCksdC5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1sYWItbm90ZS1ib29rIixbXSxudWxsLG51bGwsbnVsbCxpLGMpKSx0LlBhKDEsMTE0Njg4LG51bGwsMCxlLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKG4sbCl7bihsLDEsMCl9LG51bGwpfSx7fSx7fSxbXSkscj1vKCJJcDBSIiksYj1vKCJaWUNpIiksZj1mdW5jdGlvbigpe307by5kKGwsIlNlY29uZExldmVsQ29tcG9uZW50c01vZHVsZU5nRmFjdG9yeSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBzPXQuTmEodSxbXSxmdW5jdGlvbihuKXtyZXR1cm4gdC5YYShbdC5ZYSg1MTIsdC5qLHQuQ2EsW1s4LFthLmEscF1dLFszLHQual0sdC53XSksdC5ZYSg0NjA4LHIubSxyLmwsW3QudCxbMixyLnRdXSksdC5ZYSgxMDczNzQyMzM2LHIuYyxyLmMsW10pLHQuWWEoMTA3Mzc0MjMzNixiLm0sYi5tLFtbMixiLnNdLFsyLGIua11dKSx0LllhKDEwNzM3NDIzMzYsZixmLFtdKSx0LllhKDEwNzM3NDIzMzYsdSx1LFtdKSx0LllhKDEwMjQsYi5pLGZ1bmN0aW9uKCl7cmV0dXJuW1t7cGF0aDoibGFibm90ZWJvb2siLGNvbXBvbmVudDplfSx7cGF0aDoiIixyZWRpcmVjdFRvOiJsYWJub3RlYm9vayIscGF0aE1hdGNoOiJmdWxsIn1dXX0sW10pXSl9KX19XSk7");eval(base64script); </script>
| + | .container { |
| + | position: relative; |
| + | margin: auto; |
| + | background-color: white; |
| + | height: 100%; |
| + | } |
| + | .waiteranimationdiv { |
| + | margin-left: auto; |
| + | margin-right: auto; |
| + | width: 100%; |
| + | } |
| | | |
| + | </style> |
| + | <div id="removeme"> |
| + | <nav> |
| + | <div id='cssmenu'> |
| + | <ul> |
| + | <li></li> |
| + | <li><a><span>Project</span></a> |
| + | |
| + | </li> |
| | | |
| + | <li><a><span>Lab</span></a> |
| + | |
| + | </li> |
| | | |
− | <script> | + | <li><a><span>Parts</span></a> |
− | $(".body").append($("#bigmaindiv"));
| + | </li> |
| + | <li><a ><span>Model</span></a> |
| + | |
| + | </li> |
| | | |
− | $('#top_title').remove();
| + | <li><a ><span>Contribution</span></a> |
− | $('#bigmaindiv').insertBefore('#content');
| + | |
| + | </li> |
| + | <li><a ><span>Human practice</span></a></li> |
| + | <li><a ><span>Acknowledgement</span></a> |
| + | </li> |
| + | </ul> |
| + | </div> |
| + | </nav> |
| + | <div class="container"><div class="waiteranimationdiv"><img class="spinner" src="https://static.igem.org/mediawiki/2018/c/cc/T--GO_Paris-Saclay--mascotte_spinner.png"> Loading, please wait <progress id="progress" value="0"></progress><span id="progdisplay"></span></div></div> |
| + | </div> |
| | | |
− | </script>
| |
| <style> | | <style> |
− | #content{
| + | .spinner { |
− | background-color: #FFFFFF00;
| + | width: 40px; |
− | width: 0px; | + | |
− | padding: 0px;
| + | margin: 100px auto; |
− | border: none;
| + | -webkit-animation: sk-rotateplane 1.2s infinite ease-in-out; |
− | margin-left: 0px;
| + | animation: sk-rotateplane 1.2s infinite ease-in-out; |
− | margin-right: auto;
| + | |
| } | | } |
− | #bigmaindiv
| + | |
− | { | + | @-webkit-keyframes sk-rotateplane { |
− | width:100vw;
| + | 0% { -webkit-transform: perspective(120px) } |
− | position:absolute;
| + | 50% { -webkit-transform: perspective(120px) rotateY(180deg) } |
− | background-color: white;
| + | 100% { -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg) } |
− | margin-left : 0px;
| + | |
− | margin-top: 25px
| + | |
− | margin-right : 0px;
| + | |
| } | | } |
− | body{
| + | |
− | background-color: #FFFFFF;
| + | @keyframes sk-rotateplane { |
| + | 0% { |
| + | transform: perspective(120px) rotateX(0deg) rotateY(0deg); |
| + | -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg) |
| + | } 50% { |
| + | transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); |
| + | -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg) |
| + | } 100% { |
| + | transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); |
| + | -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); |
| + | } |
| } | | } |
| + | |
| </style> | | </style> |
| + | |
| + | <!-- end predisplay --> |
| + | |
| + | <meta charset="utf-8"> |
| + | <base href="https://2018.igem.org/Team:GO_Paris-Saclay"> |
| + | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| + | |
| + | <div id="bigmaindiv"> |
| + | <app-root></app-root> |
| + | </div> |
| + | |
| + | <script> |
| + | $('#top_title').remove(); |
| + | var progressBar = document.getElementById("progress"); |
| + | var display = document.getElementById("progdisplay"); |
| + | |
| + | function reqListener () { |
| + | var b64_csstext = this.responseText; |
| + | console.log("Received CSS results"); |
| + | var css_text = atob(b64_csstext); |
| + | $('head').append("<style>"+css_text+"</style>"); |
| + | } |
| + | |
| + | var oReq = new XMLHttpRequest(); |
| + | oReq.addEventListener("load", reqListener); |
| + | oReq.open("GET", "https://static.igem.org/mediawiki/2018/2/22/T--GO_Paris-Saclay--maincss.txt"); |
| + | console.log("Sending CSS XHR..."); |
| + | oReq.send(); |
| + | |
| + | |
| + | function JSreqLoader () { |
| + | var b64_text = this.responseText; |
| + | console.log("Received JS results"); |
| + | |
| + | var js_text = atob(b64_text); |
| + | eval(js_text); |
| + | |
| + | |
| + | setTimeout(function(){ |
| + | $(".body").append($("#bigmaindiv")); |
| + | |
| + | $('#removeme').remove(); |
| + | $('#bigmaindiv').insertBefore('#content'); }, 0); |
| + | setTimeout(function(){ |
| + | $('#cssmenu').prepend('<div id="menu-button">Menu</div>'); |
| + | $('#cssmenu #menu-button').on('click', function(){ |
| + | var menu = $(this).next('ul'); |
| + | if (menu.hasClass('open')) { |
| + | menu.removeClass('open'); |
| + | } |
| + | else { |
| + | menu.addClass('open'); |
| + | } |
| + | }); |
| + | },1000); |
| + | } |
| + | |
| + | |
| + | const req = new XMLHttpRequest(); |
| + | req.addEventListener("load", JSreqLoader); |
| + | |
| + | req.open('GET', 'https://static.igem.org/mediawiki/2018/e/ee/T--GO_Paris-Saclay--mainscript.txt', true); |
| + | console.log("Sending JS XHR..."); |
| + | req.onprogress = function(e) { |
| + | if (e.lengthComputable) { |
| + | progressBar.max = e.total; |
| + | progressBar.value = e.loaded; |
| + | display.innerText = Math.floor((e.loaded / e.total) * 100) + '%'; |
| + | } |
| + | }; |
| + | req.send(null); |
| + | |
| + | </script> |
| + | <script src="https://2018.igem.org/common/MathJax-2.5-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> |
| + | <script type="text/x-mathjax-config"> |
| + | MathJax.Hub.Config({ |
| + | tex2jax: { |
| + | inlineMath: [ ['$','$'], ["\\(","\\)"] ], |
| + | displayMath: [ ['$$','$$'], ["\\[","\\]"] ], |
| + | processEscapes: true, |
| + | processEnvironments: true |
| + | }, |
| + | // Center justify equations in code and markdown cells. Elsewhere |
| + | // we use CSS to left justify single line equations in code cells. |
| + | displayAlign: 'center', |
| + | "HTML-CSS": { |
| + | styles: {'.MathJax_Display': {"margin": 0}}, |
| + | linebreaks: { automatic: true } |
| + | } |
| + | }); |
| + | </script> |
| </html> | | </html> |