I built this game to practice Korean the way I actually use it: ordering coffee, finding my way, making small talk with new people. Twelve quests take you from your first 안녕하세요 to handling daily life with confidence. Learn the words, live them in a short story, then speak them out loud — the game listens and coaches your pronunciation, syllable by syllable. It is free, it works on desktop and mobile, and the voice features work best in Chrome. Take it slowly, and have fun.
PHN0eWxlPgogIDpyb290IHsKICAgIC0tYmc6dHJhbnNwYXJlbnQ7IC0tY2FyZDojRkJGNkVBOyAtLWNhcmQyOiNFQ0UzQ0I7IC0tYWNjZW50OiNDNjhGM0U7IC0tYWNjZW50MjojNTAzQUE4OwogICAgLS1nb2xkOiNCMDdEMjg7IC0tZ3JlZW46IzJGN0Q0RjsgLS1yZWQ6I0NGMkUyRTsgLS10ZXh0OiMyQTJBMkE7IC0tbXV0ZWQ6Izc1NjY0RDsKICB9CiAgKiB7IG1hcmdpbjowOyBwYWRkaW5nOjA7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50OyB9CiAgI2txLWFwcCB7CiAgICB3aWR0aDoxMDB2dzsKICAgIHBvc2l0aW9uOnJlbGF0aXZlOwogICAgbGVmdDo1MCU7CiAgICBtYXJnaW4tbGVmdDotNTB2dzsKICAgIHBhZGRpbmc6MThweCAwIDUwcHg7CiAgICBmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUkiLCJBcHBsZSBTRCBHb3RoaWMgTmVvIixzYW5zLXNlcmlmOwogICAgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGNvbG9yOnZhcigtLXRleHQpOyBtaW4taGVpZ2h0OjEwMHZoOwogICAgYmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAxMCUsICNDNjhGM0UxOCAwJSwgdHJhbnNwYXJlbnQgNTAlKSwKICAgICAgICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgOTAlLCAjNTAzQUE4MTAgMCUsIHRyYW5zcGFyZW50IDUwJSk7CiAgfQogIC53cmFwIHsgbWF4LXdpZHRoOjY0MHB4OyBtYXJnaW46MCBhdXRvOyBwYWRkaW5nOjE2cHggMTRweCA3MHB4OyB9CgogIC8qIEhVRCAqLwogIC5odWQgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlci1yYWRpdXM6MTZweDsgcGFkZGluZzoxMHB4IDE0cHg7IG1hcmdpbi1ib3R0b206MTRweDsgYm94LXNoYWRvdzowIDRweCAyMHB4IHJnYmEoMCwwLDAsLjA4KTsgfQogIC5hdmF0YXIgeyB3aWR0aDo0NnB4OyBoZWlnaHQ6NDZweDsgYm9yZGVyLXJhZGl1czoxMnB4OyBmb250LXNpemU6MjZweDsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNDNjhGM0UzMywjNTAzQUE4MzMpOyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYm9yZGVyOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpOyBmbGV4Om5vbmU7IH0KICAuaHVkLW1pZCB7IGZsZXg6MTsgbWluLXdpZHRoOjA7IH0KICAuaHVkLXRpdGxlIHsgZm9udC13ZWlnaHQ6ODAwOyBmb250LXNpemU6MTRweDsgd2hpdGUtc3BhY2U6bm93cmFwOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IH0KICAueHBiYXIgeyBoZWlnaHQ6OXB4OyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEwKTsgYm9yZGVyLXJhZGl1czo2cHg7IG1hcmdpbi10b3A6NXB4OyBvdmVyZmxvdzpoaWRkZW47IH0KICAueHBmaWxsIHsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLWFjY2VudCksdmFyKC0tZ29sZCkpOyBib3JkZXItcmFkaXVzOjZweDsgdHJhbnNpdGlvbjp3aWR0aCAuNXM7IH0KICAuaHVkLXN1YiB7IGZvbnQtc2l6ZToxMC41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDozcHg7IH0KICAuc3RyZWFrIHsgdGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZsZXg6bm9uZTsgfQogIC5zdHJlYWsgYiB7IGRpc3BsYXk6YmxvY2s7IGZvbnQtc2l6ZToxOHB4OyBjb2xvcjp2YXIoLS1nb2xkKTsgfQoKICAuc2NyZWVuIHsgZGlzcGxheTpub25lOyBhbmltYXRpb246cG9wIC4yNXMgZWFzZTsgfQogIC5zY3JlZW4uYWN0aXZlIHsgZGlzcGxheTpibG9jazsgfQogIEBrZXlmcmFtZXMgcG9wIHsgZnJvbSB7IG9wYWNpdHk6MDsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoLjk4KTt9IHRvIHsgb3BhY2l0eToxOyB0cmFuc2Zvcm06bm9uZTsgfSB9CiAgaDEgeyBmb250LXNpemU6MjNweDsgbWFyZ2luLWJvdHRvbToycHg7IH0KICAuc3VidGl0bGUgeyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxM3B4OyBtYXJnaW4tYm90dG9tOjE0cHg7IH0KCiAgLyogTUFQICovCiAgLm1hcC1ncmlkIHsgZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjsgZ2FwOjEwcHg7IH0KICBAbWVkaWEgKG1pbi13aWR0aDo1MjBweCkgeyAubWFwLWdyaWQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7IH0gfQogIC5sY2FyZCB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlci1yYWRpdXM6MTZweDsgcGFkZGluZzoxNHB4IDEycHg7IGN1cnNvcjpwb2ludGVyOyBib3JkZXI6MnB4IHNvbGlkIHRyYW5zcGFyZW50OyB0cmFuc2l0aW9uOmFsbCAuMTVzOyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogIC5sY2FyZDpob3ZlciB7IGJvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQyKTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7IH0KICAubGNhcmQgLmxudW0geyBmb250LXNpemU6MTBweDsgZm9udC13ZWlnaHQ6ODAwOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGxldHRlci1zcGFjaW5nOjFweDsgfQogIC5sY2FyZCAubGVtb2ppIHsgZm9udC1zaXplOjMwcHg7IG1hcmdpbjo0cHggMDsgfQogIC5sY2FyZCAubGtyIHsgZm9udC1zaXplOjE3cHg7IGZvbnQtd2VpZ2h0OjgwMDsgfQogIC5sY2FyZCAubGVuIHsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgfQogIC5sY2FyZCAubHN0YXJzIHsgbWFyZ2luLXRvcDo2cHg7IGZvbnQtc2l6ZToxMnB4OyBsZXR0ZXItc3BhY2luZzoxcHg7IH0KICAubGNhcmQgLmxwcm9nIHsgaGVpZ2h0OjVweDsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMCk7IGJvcmRlci1yYWRpdXM6NHB4OyBtYXJnaW4tdG9wOjZweDsgb3ZlcmZsb3c6aGlkZGVuOyB9CiAgLmxjYXJkIC5scHJvZyBpIHsgZGlzcGxheTpibG9jazsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6dmFyKC0tZ3JlZW4pOyBib3JkZXItcmFkaXVzOjRweDsgfQoKICAvKiBMRVNTT04gaGVhZGVyICsgdGFicyAqLwogIC5saGVhZCB7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTBweDsgbWFyZ2luLWJvdHRvbToxMnB4OyB9CiAgLmJhY2sgeyBjdXJzb3I6cG9pbnRlcjsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXNpemU6MTRweDsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyOm5vbmU7IGZvbnQtd2VpZ2h0OjcwMDsgcGFkZGluZzo5cHggMTNweDsgYm9yZGVyLXJhZGl1czoxMnB4OyB9CiAgLmxoZWFkIC50IHsgZmxleDoxOyB9CiAgLmxoZWFkIC50IGIgeyBmb250LXNpemU6MThweDsgZGlzcGxheTpibG9jazsgfQogIC5saGVhZCAudCBzcGFuIHsgZm9udC1zaXplOjExLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyB9CiAgLnRhYnMgeyBkaXNwbGF5OmZsZXg7IGdhcDo2cHg7IG1hcmdpbi1ib3R0b206MTRweDsgb3ZlcmZsb3cteDphdXRvOyBwYWRkaW5nLWJvdHRvbToycHg7IH0KICAudGFiIHsgZmxleDoxOyBtaW4td2lkdGg6NzBweDsgcGFkZGluZzo5cHggNHB4OyBib3JkZXItcmFkaXVzOjEycHg7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxMnB4OyBjdXJzb3I6cG9pbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfQogIC50YWIub24geyBib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTsgY29sb3I6dmFyKC0tdGV4dCk7IGJhY2tncm91bmQ6I0M2OEYzRTFhOyB9CgogIC8qIExFQVJOIGNhcmQgKi8KICAud2NhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjIycHg7IHBhZGRpbmc6MjRweCAxOHB4IDE4cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3gtc2hhZG93OjAgNHB4IDI0cHggcmdiYSgwLDAsMCwuMTApOyB9CiAgLndjYXJkIC53ZW1vamkgeyBmb250LXNpemU6NjRweDsgbGluZS1oZWlnaHQ6MS4xOyBmaWx0ZXI6ZHJvcC1zaGFkb3coMCA2cHggMTRweCAjMDAwMDAwNjYpOyB9CiAgLndjYXJkIC53a3IgeyBmb250LXNpemU6MzJweDsgZm9udC13ZWlnaHQ6ODAwOyBtYXJnaW4tdG9wOjhweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAud2NhcmQgLndybyB7IGZvbnQtc2l6ZToxM3B4OyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgbWFyZ2luLXRvcDoycHg7IH0KICAud2NhcmQgLndtZWFuIHsgZm9udC1zaXplOjE4cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tZ29sZCk7IG1hcmdpbi10b3A6MTBweDsgfQogIC53Y2FyZCAud3ZpIHsgZm9udC1zaXplOjEzcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDoycHg7IH0KICAud2NhcmQgLndleCB7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYpOyBib3JkZXItcmFkaXVzOjE0cHg7IHBhZGRpbmc6MTJweDsgbWFyZ2luLXRvcDoxNHB4OyBmb250LXNpemU6MTVweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAud2NhcmQgLndleCAuZXhlbiB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc3R5bGU6aXRhbGljOyBtYXJnaW4tdG9wOjRweDsgfQogIC5sZWFybi1uYXYgeyBkaXNwbGF5OmZsZXg7IGdhcDo4cHg7IG1hcmdpbi10b3A6MTJweDsgfQogIC5sZWFybi1uYXYgLmJ0biB7IGZsZXg6MTsgfQogIC5rbm93IHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHZhcigtLWdyZWVuKSwjMUY1QTM4KSAhaW1wb3J0YW50OyB9CiAgLmxlYXJuLWNvdW50IHsgdGV4dC1hbGlnbjpjZW50ZXI7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEycHg7IG1hcmdpbi10b3A6MTBweDsgfQogIC5zbmRidG4geyBkaXNwbGF5OmlubGluZS1ibG9jazsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgY29sb3I6dmFyKC0tdGV4dCk7IGJvcmRlci1yYWRpdXM6MTJweDsgcGFkZGluZzo3cHggMTRweDsgZm9udC1zaXplOjE0cHg7IGN1cnNvcjpwb2ludGVyOyBmb250LXdlaWdodDo3MDA7IG1hcmdpbjoxMHB4IDNweCAwOyB9CiAgLnNuZGJ0bjphY3RpdmUgeyB0cmFuc2Zvcm06c2NhbGUoLjk1KTsgfQoKICAvKiBTVE9SWSAqLwogIC5zdGFnZSB7IGJvcmRlci1yYWRpdXM6MjBweDsgbWluLWhlaWdodDoxNTBweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGdhcDoxNHB4OyBwYWRkaW5nOjE4cHg7IG1hcmdpbi1ib3R0b206MTJweDsgYm94LXNoYWRvdzppbnNldCAwIC0zMHB4IDQwcHggcmdiYSgwLDAsMCwuMDYpLCAwIDRweCAyMHB4IHJnYmEoMCwwLDAsLjA4KTsgcG9zaXRpb246cmVsYXRpdmU7IG92ZXJmbG93OmhpZGRlbjsgfQogIC5zdGFnZSAuYWN0b3IgeyBmb250LXNpemU6NDZweDsgYW5pbWF0aW9uOmJvYiAyLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOyBmaWx0ZXI6ZHJvcC1zaGFkb3coMCA2cHggMTBweCByZ2JhKDAsMCwwLC4xMCkpOyB9CiAgLnN0YWdlIC5hY3RvcjpudGgtY2hpbGQoMikgeyBhbmltYXRpb24tZGVsYXk6LjRzOyBmb250LXNpemU6NTJweDsgfQogIC5zdGFnZSAuYWN0b3I6bnRoLWNoaWxkKDMpIHsgYW5pbWF0aW9uLWRlbGF5Oi44czsgfQogIEBrZXlmcmFtZXMgYm9iIHsgNTAlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTlweCk7IH0gfQogIC5zdGFnZS5meC1zaGFrZSAuYWN0b3IgeyBhbmltYXRpb246c3RzaGFrZSAuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH0KICBAa2V5ZnJhbWVzIHN0c2hha2UgeyAyNSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNXB4KSByb3RhdGUoLTRkZWcpO30gNzUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoNXB4KSByb3RhdGUoNGRlZyk7fSB9CiAgLnN0YWdlLmZ4LXJ1biAuYWN0b3I6Zmlyc3QtY2hpbGQgeyBhbmltYXRpb246cnVuYnkgMS42cyBlYXNlLWluLW91dCBpbmZpbml0ZTsgfQogIEBrZXlmcmFtZXMgcnVuYnkgeyAwJSwxMDAlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTE0cHgpO30gNTAlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTRweCkgcm90YXRlKDZkZWcpO30gfQogIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7IC5zdGFnZSAuYWN0b3IgeyBhbmltYXRpb246bm9uZSAhaW1wb3J0YW50OyB9IH0KICAuYmctZGF3biB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjMmIxYTRhLCNiODVjN2EpOyB9CiAgLmJnLWRheSB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjMWQzNTU3LCM0NTdiOWQpOyB9CiAgLmJnLW5pZ2h0IHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCMwYjBkMmEsIzJiMmQ2ZSk7IH0KICAuYmctaW5kb29yIHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCMzYTJlMmEsIzZiNGYzYSk7IH0KICAuYmctZmVzdGl2ZSB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjNGExOTQyLCM4ZjJkNTYpOyB9CiAgLmJnLW5hdHVyZSB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjMTQ0MzJhLCMzYTdkNDQpOyB9CiAgLmJnLWNpdHkgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzIzMjk0NiwjNWY2YzhhKTsgfQogIC5iZy1zaG9wIHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCM0MDM1NmIsIzdhNWNhMyk7IH0KICAuc3QtbmFyIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNHB4OyBwYWRkaW5nOjEycHggMTRweDsgZm9udC1zaXplOjEzLjVweDsgbGluZS1oZWlnaHQ6MS41OyBjb2xvcjp2YXIoLS10ZXh0KTsgbWFyZ2luLWJvdHRvbToxMHB4OyBib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tZ29sZCk7IH0KICAuYnViYmxlIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlci1yYWRpdXM6MTZweCAxNnB4IDE2cHggNHB4OyBwYWRkaW5nOjEycHggMTRweDsgbWFyZ2luLWJvdHRvbToxMnB4OyBjdXJzb3I6cG9pbnRlcjsgfQogIC5idWJibGUgLndobyB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgZm9udC13ZWlnaHQ6ODAwOyB9CiAgLmJ1YmJsZSAuYmtyIHsgZm9udC1zaXplOjE4cHg7IGZvbnQtd2VpZ2h0OjcwMDsgbWFyZ2luLXRvcDozcHg7IH0KICAuYnViYmxlIC5iZW4geyBmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXN0eWxlOml0YWxpYzsgbWFyZ2luLXRvcDozcHg7IH0KICAuc3QtZG90cyB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tdG9wOjEycHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEzcHg7IGxldHRlci1zcGFjaW5nOjNweDsgfQogIC5hbnMgLmFlbiB7IGZvbnQtc2l6ZToxMS41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC13ZWlnaHQ6NDAwOyBtYXJnaW4tdG9wOjJweDsgfQoKICAvKiBUQUxLIChjb252ZXJzYXRpb24pICovCiAgLmNoYXQgeyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjhweDsgbWluLWhlaWdodDoxNDBweDsgbWFyZ2luLWJvdHRvbToxMHB4OyB9CiAgLm1zZyB7IG1heC13aWR0aDo4NiU7IHBhZGRpbmc6MTBweCAxM3B4OyBib3JkZXItcmFkaXVzOjE2cHg7IGZvbnQtc2l6ZToxNS41cHg7IGxpbmUtaGVpZ2h0OjEuNDU7IGFuaW1hdGlvbjpwb3AgLjI1cyBlYXNlOyB9CiAgLm1zZyAubWVuIHsgZm9udC1zaXplOjExLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXN0eWxlOml0YWxpYzsgbWFyZ2luLXRvcDozcHg7IH0KICAubXNnLm5wYyB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBhbGlnbi1zZWxmOmZsZXgtc3RhcnQ7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4OyBjdXJzb3I6cG9pbnRlcjsgfQogIC5tc2cubnBjIC53aG8geyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tYWNjZW50Mik7IGZvbnQtd2VpZ2h0OjgwMDsgbWFyZ2luLWJvdHRvbToycHg7IH0KICAubXNnLm1lIHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNDNjhGM0UyZSwjQTA2RjI0M2QpOyBib3JkZXI6MXB4IHNvbGlkICNDNjhGM0U1NTsgYWxpZ24tc2VsZjpmbGV4LWVuZDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4OyB9CiAgLm1zZy5tZSAuc2NvcmUgeyBmb250LXNpemU6MTEuNXB4OyBjb2xvcjp2YXIoLS1ncmVlbik7IGZvbnQtd2VpZ2h0OjgwMDsgbWFyZ2luLXRvcDozcHg7IH0KICAubXNnLnN5cyB7IGFsaWduLXNlbGY6Y2VudGVyOyBiYWNrZ3JvdW5kOm5vbmU7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEycHg7IH0KICAubXNnLnR5cGluZyBzcGFuIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGFuaW1hdGlvbjpibGluayAxcyBpbmZpbml0ZTsgfQogIC5tc2cudHlwaW5nIHNwYW46bnRoLWNoaWxkKDIpIHsgYW5pbWF0aW9uLWRlbGF5Oi4yczsgfSAubXNnLnR5cGluZyBzcGFuOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTouNHM7IH0KICBAa2V5ZnJhbWVzIGJsaW5rIHsgNTAlIHsgb3BhY2l0eTouMjsgfSB9CiAgLm1hc2tlZCB7IGNvbG9yOnZhcigtLWFjY2VudDIpOyBmb250LXdlaWdodDo3MDA7IH0KICAudGstdGFzayB7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYpOyBib3JkZXI6MXB4IGRhc2hlZCAjRDlDOUE4OyBib3JkZXItcmFkaXVzOjEycHg7IHBhZGRpbmc6MTBweCAxMnB4OyBmb250LXNpemU6MTMuNXB4OyBtYXJnaW4tYm90dG9tOjEwcHg7IGxpbmUtaGVpZ2h0OjEuNTsgfQogIC50ay10YXNrIC5oaW50bGluZSB7IG1hcmdpbi10b3A6NnB4OyBmb250LXNpemU6MTZweDsgZm9udC13ZWlnaHQ6NzAwOyB9CiAgLnRrLWNvbnRyb2xzIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGdhcDoxNHB4OyBtYXJnaW4tdG9wOjJweDsgfQogIC50ay1taWMgeyB3aWR0aDo2NHB4OyBoZWlnaHQ6NjRweDsgZm9udC1zaXplOjI2cHg7IG1hcmdpbi10b3A6MDsgfQoKICAvKiBHUkFNTUFSICovCiAgLmdjYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxOHB4OyBwYWRkaW5nOjE4cHg7IG1hcmdpbi1ib3R0b206MTJweDsgfQogIC5ncGF0IHsgZm9udC1zaXplOjIycHg7IGZvbnQtd2VpZ2h0OjgwMDsgY29sb3I6dmFyKC0tYWNjZW50Mik7IH0KICAuZ21lYW4geyBmb250LXNpemU6MTRweDsgY29sb3I6dmFyKC0tZ29sZCk7IGZvbnQtd2VpZ2h0OjcwMDsgbWFyZ2luLXRvcDozcHg7IH0KICAuZ3ZpIHsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLW11dGVkKTsgfQogIC5nbm90ZSB7IGZvbnQtc2l6ZToxM3B4OyBjb2xvcjp2YXIoLS10ZXh0KTsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNik7IGJvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpOyBib3JkZXItcmFkaXVzOjhweDsgcGFkZGluZzoxMHB4IDEycHg7IG1hcmdpbi10b3A6MTBweDsgbGluZS1oZWlnaHQ6MS41OyB9CiAgLmdleCB7IG1hcmdpbi10b3A6MTBweDsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7IGJvcmRlci1yYWRpdXM6MTJweDsgcGFkZGluZzoxMHB4IDEycHg7IGN1cnNvcjpwb2ludGVyOyB9CiAgLmdleCAuayB7IGZvbnQtc2l6ZToxNS41cHg7IGZvbnQtd2VpZ2h0OjYwMDsgfQogIC5nZXggLmUgeyBmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXN0eWxlOml0YWxpYzsgbWFyZ2luLXRvcDoycHg7IH0KICAuZ2V4IC5zcGsgeyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgZm9udC1zaXplOjEycHg7IH0KCiAgLyogU1BFQUsgKi8KICAuc2NhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjIwcHg7IHBhZGRpbmc6MjJweCAxOHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogIC5zY2FyZCAuc2tyIHsgZm9udC1zaXplOjI0cHg7IGZvbnQtd2VpZ2h0OjgwMDsgbGluZS1oZWlnaHQ6MS40OyB9CiAgLnNjYXJkIC5zZW4geyBmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXN0eWxlOml0YWxpYzsgbWFyZ2luLXRvcDo2cHg7IH0KICAubWljIHsgd2lkdGg6ODRweDsgaGVpZ2h0Ojg0cHg7IGJvcmRlci1yYWRpdXM6NTAlOyBib3JkZXI6bm9uZTsgZm9udC1zaXplOjM2cHg7IG1hcmdpbi10b3A6MTZweDsgY3Vyc29yOnBvaW50ZXI7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyx2YXIoLS1hY2NlbnQpLCNBMDZGMjQpOyBjb2xvcjojZmZmOyBib3gtc2hhZG93OjAgNnB4IDI0cHggI0M2OEYzRTU1OyB0cmFuc2l0aW9uOmFsbCAuMnM7IH0KICAubWljLmxpc3RlbmluZyB7IGFuaW1hdGlvbjpwdWxzZTIgMXMgaW5maW5pdGU7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyx2YXIoLS1yZWQpLCM4RjFGMUYpOyB9CiAgQGtleWZyYW1lcyBwdWxzZTIgeyA1MCUgeyB0cmFuc2Zvcm06c2NhbGUoMS4xKTsgYm94LXNoYWRvdzowIDAgMCAxOHB4ICNDRjJFMkUyMjsgfSB9CiAgLnNyZXN1bHQgeyBtaW4taGVpZ2h0OjQ0cHg7IG1hcmdpbi10b3A6MTJweDsgZm9udC1zaXplOjE1cHg7IGZvbnQtd2VpZ2h0OjcwMDsgfQogIC5zcmVzdWx0IC5oZWFyZCB7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEzcHg7IGZvbnQtd2VpZ2h0OjQwMDsgbWFyZ2luLXRvcDozcHg7IH0KICAuc2VsZmdyYWRlIHsgZGlzcGxheTpub25lOyBnYXA6OHB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBtYXJnaW4tdG9wOjEwcHg7IH0KICAuc3BrLWRpZmYgeyBmb250LXNpemU6MjRweDsgZm9udC13ZWlnaHQ6ODAwOyBsaW5lLWhlaWdodDoxLjY7IG1hcmdpbi10b3A6OHB4OyBsZXR0ZXItc3BhY2luZzoxcHg7IH0KICAuc3lsLW9rIHsgY29sb3I6dmFyKC0tZ3JlZW4pOyB9CiAgLnN5bC1iYWQgeyBjb2xvcjp2YXIoLS1yZWQpOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDsgY3Vyc29yOnBvaW50ZXI7IH0KICAubWljLWhpbnQgeyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjZweDsgfQogIC5maXhsaW5lIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlcjoxcHggc29saWQgI0Q5QzlBODsgYm9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLXJlZCk7IGJvcmRlci1yYWRpdXM6MTBweDsgcGFkZGluZzo5cHggMTFweDsgbWFyZ2luLXRvcDo3cHg7IGZvbnQtc2l6ZToxM3B4OyBsaW5lLWhlaWdodDoxLjU7IGN1cnNvcjpwb2ludGVyOyB0ZXh0LWFsaWduOmxlZnQ7IH0KICAuZml4bGluZSBiIHsgZm9udC1zaXplOjE2cHg7IH0KICAjc3BrUGxheWJhY2sgeyBkaXNwbGF5Om5vbmU7IG1hcmdpbi10b3A6MTBweDsgfQoKICAvKiBQTEFZIHRhYiAqLwogIC5tb2RlcyB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoxMHB4OyB9CiAgLm1vZGUgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjE2cHg7IHBhZGRpbmc6MTZweCAxNHB4OyBjdXJzb3I6cG9pbnRlcjsgYm9yZGVyOjJweCBzb2xpZCB0cmFuc3BhcmVudDsgdHJhbnNpdGlvbjphbGwgLjE1czsgcG9zaXRpb246cmVsYXRpdmU7IH0KICAubW9kZTpob3ZlciB7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpOyBib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTsgfQogIC5tb2RlIC5lbW9qaSB7IGZvbnQtc2l6ZTozMHB4OyB9CiAgLm1vZGUgaDMgeyBmb250LXNpemU6MTRweDsgbWFyZ2luOjZweCAwIDNweDsgfQogIC5tb2RlIHAgeyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBsaW5lLWhlaWdodDoxLjQ7IH0KCiAgLyogR0FNRVMgc2hhcmVkICovCiAgLmdhbWViYXIgeyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczpjZW50ZXI7IG1hcmdpbi1ib3R0b206MTRweDsgZm9udC13ZWlnaHQ6NzAwOyBnYXA6OHB4OyB9CiAgLnRpbWVyIHsgZm9udC1zaXplOjE4cHg7IGNvbG9yOnZhcigtLWFjY2VudDIpOyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7IH0KICAudGltZXIubG93IHsgY29sb3I6dmFyKC0tcmVkKTsgYW5pbWF0aW9uOnB1bHNlIC41cyBpbmZpbml0ZSBhbHRlcm5hdGU7IH0KICBAa2V5ZnJhbWVzIHB1bHNlIHsgdG8geyB0cmFuc2Zvcm06c2NhbGUoMS4xNSk7IH0gfQogIC5zY29yZS1waWxsIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IHBhZGRpbmc6NnB4IDEzcHg7IGJvcmRlci1yYWRpdXM6MjBweDsgZm9udC1zaXplOjEzcHg7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfQogIC5jb21ibyB7IGNvbG9yOnZhcigtLWdvbGQpOyBmb250LXNpemU6MTJweDsgbWFyZ2luLWxlZnQ6NXB4OyB9CiAgLnF1ZXN0aW9uLWNhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjE4cHg7IHBhZGRpbmc6MjJweCAxNnB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luLWJvdHRvbToxNHB4OyBib3gtc2hhZG93OjAgNHB4IDIwcHggcmdiYSgwLDAsMCwuMDgpOyB9CiAgLnEtbGFiZWwgeyBmb250LXNpemU6MTAuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6MXB4OyBtYXJnaW4tYm90dG9tOjhweDsgfQogIC5xLXdvcmQgeyBmb250LXNpemU6MjhweDsgZm9udC13ZWlnaHQ6ODAwOyBsaW5lLWhlaWdodDoxLjM7IH0KICAucS1oaW50IHsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDo2cHg7IH0KICAuYW5zd2VycyB7IGRpc3BsYXk6Z3JpZDsgZ2FwOjlweDsgfQogIC5hbnMgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTsgYm9yZGVyOjJweCBzb2xpZCAjRDlDOUE4OyBib3JkZXItcmFkaXVzOjEzcHg7IHBhZGRpbmc6MTNweCAxNXB4OyBmb250LXNpemU6MTZweDsgZm9udC13ZWlnaHQ6NjAwOyBjb2xvcjp2YXIoLS10ZXh0KTsgY3Vyc29yOnBvaW50ZXI7IHRleHQtYWxpZ246bGVmdDsgdHJhbnNpdGlvbjphbGwgLjEyczsgd2lkdGg6MTAwJTsgfQogIC5hbnMuY29ycmVjdCB7IGJhY2tncm91bmQ6IzJGN0Q0RjMzOyBib3JkZXItY29sb3I6dmFyKC0tZ3JlZW4pOyB9CiAgLmFucy53cm9uZyB7IGJhY2tncm91bmQ6I0NGMkUyRTMzOyBib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgYW5pbWF0aW9uOnNoYWtlIC4zczsgfQogIEBrZXlmcmFtZXMgc2hha2UgeyAyNSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNnB4KTt9IDc1JSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKDZweCk7fSB9CgogIC5tYXRjaC1ncmlkIHsgZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjsgZ2FwOjlweDsgfQogIC50aWxlIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgYm9yZGVyLXJhZGl1czoxM3B4OyBwYWRkaW5nOjE0cHggOHB4OyBmb250LXNpemU6MTVweDsgZm9udC13ZWlnaHQ6NzAwOyBjdXJzb3I6cG9pbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IHRyYW5zaXRpb246YWxsIC4xNXM7IG1pbi1oZWlnaHQ6NThweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IH0KICAudGlsZS5zZWwgeyBib3JkZXItY29sb3I6dmFyKC0tZ29sZCk7IGJhY2tncm91bmQ6I0IwN0QyODIyOyB0cmFuc2Zvcm06c2NhbGUoMS4wNCk7IH0KICAudGlsZS5kb25lIHsgb3BhY2l0eTowOyBwb2ludGVyLWV2ZW50czpub25lOyB0cmFuc2Zvcm06c2NhbGUoLjgpOyB9CiAgLnRpbGUuYmFkIHsgYm9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGJhY2tncm91bmQ6I0NGMkUyRTMzOyBhbmltYXRpb246c2hha2UgLjNzOyB9CgogIC5idWlsZC10YXJnZXQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjE1cHg7IHBhZGRpbmc6MTZweDsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi1ib3R0b206MTJweDsgfQogIC5idWlsZC1lbiB7IGZvbnQtc2l6ZToxN3B4OyBmb250LXdlaWdodDo3MDA7IH0KICAuYnVpbGQtc2xvdCB7IG1pbi1oZWlnaHQ6NjBweDsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNik7IGJvcmRlcjoycHggZGFzaGVkICNEOUM5QTg7IGJvcmRlci1yYWRpdXM6MTNweDsgcGFkZGluZzo5cHg7IGRpc3BsYXk6ZmxleDsgZmxleC13cmFwOndyYXA7IGdhcDo3cHg7IG1hcmdpbi1ib3R0b206MTJweDsgYWxpZ24taXRlbXM6Y2VudGVyOyB9CiAgLmJ1aWxkLXBvb2wgeyBkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6N3B4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB9CiAgLndvcmRjaGlwIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgYm9yZGVyLXJhZGl1czoxMXB4OyBwYWRkaW5nOjlweCAxM3B4OyBmb250LXNpemU6MTdweDsgZm9udC13ZWlnaHQ6NzAwOyBjdXJzb3I6cG9pbnRlcjsgdHJhbnNpdGlvbjphbGwgLjEyczsgfQogIC53b3JkY2hpcC5wbGFjZWQgeyBiYWNrZ3JvdW5kOiM1MDNBQTgyMjsgYm9yZGVyLWNvbG9yOnZhcigtLWFjY2VudDIpOyBvcGFjaXR5Oi40OyB9CgogIC5ib3NzLWFyZW5hIHsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi1ib3R0b206MTJweDsgfQogIC5ib3NzLXNwcml0ZSB7IGZvbnQtc2l6ZTo1NnB4OyBkaXNwbGF5OmlubGluZS1ibG9jazsgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1czsgfQogIC5ib3NzLXNwcml0ZS5oaXQgeyBhbmltYXRpb246Ym9zc2hpdCAuMzVzOyB9CiAgQGtleWZyYW1lcyBib3NzaGl0IHsgMzAlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpIHJvdGF0ZSgtOGRlZyk7IGZpbHRlcjpicmlnaHRuZXNzKDIpO30gNjAlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoOHB4KTt9IH0KICAuaHBiYXIgeyBoZWlnaHQ6MTRweDsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMCk7IGJvcmRlci1yYWRpdXM6OHB4OyBvdmVyZmxvdzpoaWRkZW47IG1hcmdpbjo3cHggYXV0bzsgbWF4LXdpZHRoOjMwMHB4OyBib3JkZXI6MXB4IHNvbGlkICNEOUM5QTg7IH0KICAuaHBmaWxsIHsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLXJlZCksI0Q5QTg1Nik7IHRyYW5zaXRpb246d2lkdGggLjRzOyB9CiAgLmJvc3MtbmFtZSB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtd2VpZ2h0OjcwMDsgfQogIC5oZWFydHMgeyBmb250LXNpemU6MjBweDsgbGV0dGVyLXNwYWNpbmc6M3B4OyBtYXJnaW4tdG9wOjRweDsgfQoKICAucmVzdWx0LWNhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjIycHg7IHBhZGRpbmc6MzJweCAyMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogIC5yZXN1bHQtZW1vamkgeyBmb250LXNpemU6NTZweDsgfQogIC5yZXN1bHQtdGl0bGUgeyBmb250LXNpemU6MjRweDsgZm9udC13ZWlnaHQ6ODAwOyBtYXJnaW46OHB4IDAgNHB4OyB9CiAgLnJlc3VsdC1zdGF0cyB7IGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgZ2FwOjIycHg7IG1hcmdpbjoxOHB4IDA7IH0KICAucnN0YXQgYiB7IGRpc3BsYXk6YmxvY2s7IGZvbnQtc2l6ZToyNHB4OyBjb2xvcjp2YXIoLS1nb2xkKTsgfQogIC5yc3RhdCBzcGFuIHsgZm9udC1zaXplOjEwLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOjFweDsgfQogIC5idG4geyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tYWNjZW50KSwjQTA2RjI0KTsgY29sb3I6I2ZmZjsgYm9yZGVyOm5vbmU7IHBhZGRpbmc6MTNweCAyNHB4OyBib3JkZXItcmFkaXVzOjEzcHg7IGZvbnQtc2l6ZToxNXB4OyBmb250LXdlaWdodDo4MDA7IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTJzOyBtYXJnaW46M3B4OyB9CiAgLmJ0bjphY3RpdmUgeyB0cmFuc2Zvcm06c2NhbGUoLjk2KTsgfQogIC5idG4uZ2hvc3QgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTsgYm9yZGVyOjJweCBzb2xpZCAjRDlDOUE4OyB9CgogIC5meC1mbG9hdCB7IHBvc2l0aW9uOmZpeGVkOyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToyMXB4OyBwb2ludGVyLWV2ZW50czpub25lOyB6LWluZGV4Ojk5OyBhbmltYXRpb246ZmxvYXR1cCAxcyBlYXNlIGZvcndhcmRzOyB9CiAgQGtleWZyYW1lcyBmbG9hdHVwIHsgdG8geyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNzBweCk7IG9wYWNpdHk6MDsgfSB9CiAgLmxldmVsdXAtYmFubmVyIHsgcG9zaXRpb246Zml4ZWQ7IHRvcDozMCU7IGxlZnQ6NTAlOyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyx2YXIoLS1nb2xkKSwjRDlBODU2KTsgY29sb3I6IzNhMjAwMDsgcGFkZGluZzoxOHB4IDM0cHg7IGJvcmRlci1yYWRpdXM6MThweDsgZm9udC1zaXplOjIycHg7IGZvbnQtd2VpZ2h0OjgwMDsgei1pbmRleDoxMDA7IGFuaW1hdGlvbjpiYW5uZXIgMnMgZWFzZSBmb3J3YXJkczsgYm94LXNoYWRvdzowIDEwcHggNTBweCAjQjA3RDI4ODg7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfQogIEBrZXlmcmFtZXMgYmFubmVyIHsgMTUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEuMSk7fSAyNSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSk7fSA4NSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSk7IG9wYWNpdHk6MTt9IDEwMCUgeyBvcGFjaXR5OjA7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtODAlKSBzY2FsZSgxKTt9IH0KICAuY29uZmV0dGkgeyBwb3NpdGlvbjpmaXhlZDsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IHotaW5kZXg6OTg7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGFuaW1hdGlvbjpmYWxsIGxpbmVhciBmb3J3YXJkczsgfQogIEBrZXlmcmFtZXMgZmFsbCB7IHRvIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTEwdmgpIHJvdGF0ZSg3MjBkZWcpOyB9IH0KCiAgYm9keSB7IG92ZXJmbG93LXg6IGNsaXA7IH0KPC9zdHlsZT4KPGRpdiBpZD0ia3EtYXBwIj4KPGRpdiBjbGFzcz0id3JhcCI+CgogIDxkaXYgY2xhc3M9Imh1ZCI+CiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIiPvCfkK88L2Rpdj4KICAgIDxkaXYgY2xhc3M9Imh1ZC1taWQiPgogICAgICA8ZGl2IGNsYXNzPSJodWQtdGl0bGUiPkx2IDxzcGFuIGlkPSJodWRMZXZlbCI+MTwvc3Bhbj4gwrcgPHNwYW4gaWQ9Imh1ZFJhbmsiPkhhbmdldWwgSGF0Y2hsaW5nPC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ4cGJhciI+PGRpdiBjbGFzcz0ieHBmaWxsIiBpZD0ieHBGaWxsIiBzdHlsZT0id2lkdGg6MCUiPjwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJodWQtc3ViIj48c3BhbiBpZD0iaHVkWHAiPjA8L3NwYW4+IFhQIMK3IDxzcGFuIGlkPSJodWROZXh0Ij4xMDA8L3NwYW4+IHRvIG5leHQ8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ic3RyZWFrIj7wn5SlPGIgaWQ9Imh1ZFN0cmVhayI+MDwvYj5jb21ibzwvZGl2PgogIDwvZGl2PgoKICA8IS0tIE1BUCAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4gYWN0aXZlIiBpZD0ibWFwIj4KICAgIDxoMT5Ub20ncyBLb3JlYW4gUXVlc3Qg8J+HsPCfh7c8L2gxPgogICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPlJlYWwtbGlmZSBLb3JlYW4sIG9uZSBxdWVzdCBhdCBhIHRpbWUg4oCUIDEyIHF1ZXN0cyBmcm9tIHlvdXIgZmlyc3Qg7JWI64WV7ZWY7IS47JqUIHRvIGxpdmluZyBsaWtlIGEgbG9jYWwuPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtYXAtZ3JpZCIgaWQ9Im1hcEdyaWQiPjwvZGl2PgogIDwvZGl2PgoKICA8IS0tIExFU1NPTiAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJsZXNzb24iPgogICAgPGRpdiBjbGFzcz0ibGhlYWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrIiBvbmNsaWNrPSJnb01hcCgpIj7ihpA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0idCI+PGIgaWQ9ImxUaXRsZSI+PC9iPjxzcGFuIGlkPSJsU3ViIj48L3NwYW4+PC9kaXY+CiAgICAgIDxkaXYgaWQ9ImxTdGFycyIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InRhYnMiPgogICAgICA8ZGl2IGNsYXNzPSJ0YWIgb24iIGRhdGEtdGFiPSJsZWFybiIgb25jbGljaz0ic2V0VGFiKCdsZWFybicpIj7wn5OWIExlYXJuPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgZGF0YS10YWI9InN0b3J5IiBvbmNsaWNrPSJzZXRUYWIoJ3N0b3J5JykiPvCfjq0gU3Rvcnk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGFiIiBkYXRhLXRhYj0idGFsayIgb25jbGljaz0ic2V0VGFiKCd0YWxrJykiPvCfkqwgVGFsazwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0YWIiIGRhdGEtdGFiPSJncmFtbWFyIiBvbmNsaWNrPSJzZXRUYWIoJ2dyYW1tYXInKSI+8J+nqSBQYXR0ZXJuczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0YWIiIGRhdGEtdGFiPSJzcGVhayIgb25jbGljaz0ic2V0VGFiKCdzcGVhaycpIj7wn5ej77iPIFNwZWFrPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgZGF0YS10YWI9InBsYXkiIG9uY2xpY2s9InNldFRhYigncGxheScpIj7wn46uIFBsYXk8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InRhYi1sZWFybiI+CiAgICAgIDxkaXYgY2xhc3M9IndjYXJkIiBpZD0id2NhcmQiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsZWFybi1uYXYiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgb25jbGljaz0ibGVhcm5Nb3ZlKC0xKSI+4oaQPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGtub3ciIGlkPSJrbm93QnRuIiBvbmNsaWNrPSJsZWFybktub3coKSI+4pyTIEdvdCBpdCEgKCszIFhQKTwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgb25jbGljaz0ibGVhcm5Nb3ZlKDEpIj7ihpI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlYXJuLWNvdW50IiBpZD0ibGVhcm5Db3VudCI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJ0YWItc3RvcnkiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6ODAwO21hcmdpbi1ib3R0b206MTBweDsiIGlkPSJzdFRpdGxlIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3RhZ2UiIGlkPSJzdFN0YWdlIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3QtbmFyIiBpZD0ic3ROYXIiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJidWJibGUiIGlkPSJzdEJ1YmJsZSIgb25jbGljaz0ic2F5U3RvcnkoKSI+CiAgICAgICAgPGRpdiBjbGFzcz0id2hvIiBpZD0ic3RXaG8iPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJrciIgaWQ9InN0S3IiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJlbiIgaWQ9InN0RW4iPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icS1sYWJlbCIgaWQ9InN0UHJvbXB0IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHg7Ij5XaGF0IGRvIHlvdSBzYXk/PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFuc3dlcnMiIGlkPSJzdENob2ljZXMiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdC1kb3RzIiBpZD0ic3REb3RzIj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InRhYi10YWxrIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTo4cHg7Z2FwOjhweDsiPgogICAgICAgIDxkaXYgaWQ9InRrVGl0bGUiIHN0eWxlPSJmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0cHg7Ij48L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBpZD0idGtFYXIiIG9uY2xpY2s9InRvZ2dsZUVhcigpIiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEycHg7Ij7wn46nIExpc3RlbmluZyBtb2RlPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InRrUmVzdGFydCgpIiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEycHg7Ij7ihro8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoYXQiIGlkPSJ0a0NoYXQiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0ay10YXNrIiBpZD0idGtUYXNrIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGstY29udHJvbHMiPgogICAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0idGtIaW50KCkiIHN0eWxlPSJtYXJnaW46MDsiPvCfkqEgSGludDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1pYyB0ay1taWMiIGlkPSJ0a01pYyIgb25jbGljaz0idGtNaWNUYXAoKSI+8J+OpDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0idGtTa2lwKCkiIHN0eWxlPSJtYXJnaW46MDsiPuKPrSBTa2lwPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0idGtSZXN1bHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzcGstZGlmZiIgaWQ9InRrRGlmZiIgc3R5bGU9ImZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyOyI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRrRml4ZXMiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWxmZ3JhZGUiIGlkPSJ0a1NlbGZHcmFkZSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBvbmNsaWNrPSJ0a0dyYWRlKGZhbHNlKSI+8J+YhSBUcnkgYWdhaW48L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9InRrR3JhZGUodHJ1ZSkiPvCfmI4gSSBzYWlkIGl0PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0idGFiLWdyYW1tYXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2Rpdj4KCiAgICA8ZGl2IGlkPSJ0YWItc3BlYWsiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgPGRpdiBjbGFzcz0ic2NhcmQiPgogICAgICAgIDxkaXYgY2xhc3M9InEtbGFiZWwiPkxpc3RlbiwgdGhlbiBzYXkgaXQgb3V0IGxvdWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJza3IiIGlkPSJzcGtLciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VuIiBpZD0ic3BrRW4iPjwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InNheUN1cigpIj7ilrbvuI8gTGlzdGVuPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InNheUN1cigwLjYpIj7wn5CiIFNsb3c8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtaWMiIGlkPSJtaWNCdG4iIG9uY2xpY2s9Im1pY1RhcCgpIj7wn46kPC9idXR0b24+CiAgICAgICAgPGRpdiBjbGFzcz0ibWljLWhpbnQiIGlkPSJtaWNIaW50Ij5UYXAg8J+OpCwgcmVhZCB0aGUgc2VudGVuY2UsIHRoZW4gdGFwIOKPuSDigJQgaXQgY2hlY2tzIHdoYXQgeW91IHNhaWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0ic3BrUmVzdWx0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGstZGlmZiIgaWQ9InNwa0RpZmYiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InNwa0ZpeGVzIj48L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzcGtQbGF5YmFjayI+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InBsYXlNeVJlYygpIj7ilrbvuI8gTXkgdm9pY2U8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0ic2F5Q3VyKCkiPvCflIogTmF0aXZlPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InNheUN1cigwLjYpIj7wn5CiIFNsb3c8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWxmZ3JhZGUiIGlkPSJzZWxmR3JhZGUiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBvbmNsaWNrPSJzcGVha0dyYWRlKGZhbHNlKSI+8J+YhSBBbG1vc3Q8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0ic3BlYWtHcmFkZSh0cnVlKSI+8J+YjiBOYWlsZWQgaXQ8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlYXJuLW5hdiI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBvbmNsaWNrPSJzcGVha01vdmUoLTEpIj7ihpA8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIG9uY2xpY2s9InNwZWFrTW92ZSgxKSI+4oaSPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsZWFybi1jb3VudCIgaWQ9InNwZWFrQ291bnQiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0idGFiLXBsYXkiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgPGRpdiBjbGFzcz0ibW9kZXMiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGUiIG9uY2xpY2s9InN0YXJ0UXVpeigpIj48ZGl2IGNsYXNzPSJlbW9qaSI+4pqhPC9kaXY+PGgzPlNwZWVkIFF1aXo8L2gzPjxwPjYwcywgY29tYm8gbXVsdGlwbGllcnM8L3A+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kZSIgb25jbGljaz0ic3RhcnRNYXRjaCgpIj48ZGl2IGNsYXNzPSJlbW9qaSI+8J+nqTwvZGl2PjxoMz5Xb3JkIE1hdGNoPC9oMz48cD5QYWlyIEtSIOKGlCBFTiBmYXN0PC9wPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGUiIG9uY2xpY2s9InN0YXJ0QnVpbGRlcigpIj48ZGl2IGNsYXNzPSJlbW9qaSI+8J+UqDwvZGl2PjxoMz5TZW50ZW5jZSBCdWlsZGVyPC9oMz48cD5SZWJ1aWxkIHJlYWwgc2VudGVuY2VzPC9wPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGUiIG9uY2xpY2s9InN0YXJ0Qm9zcygpIj48ZGl2IGNsYXNzPSJlbW9qaSI+8J+RuTwvZGl2PjxoMz5Cb3NzIEJhdHRsZTwvaDM+PHA+QmVhdCB0aGUgbGVzc29uIGd1YXJkaWFuIOKtkDwvcD48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBGUkVFIFRBTEsgLS0+CiAgPGRpdiBjbGFzcz0ic2NyZWVuIiBpZD0iZnJlZSI+CiAgICA8ZGl2IGNsYXNzPSJnYW1lYmFyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFjayIgb25jbGljaz0iZ29NYXAoKSI+4oaQPC9idXR0b24+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjgwMDsiPvCfjpkgRnJlZSBUYWxrPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgaWQ9ImZ0RW5naW5lIiBvbmNsaWNrPSJmdEVuZ2luZVRhcCgpIiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEycHg7Ij7wn6SWIEJ1aWx0LWluPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNoYXQiIGlkPSJmdENoYXQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0idGstY29udHJvbHMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7Ij4KICAgICAgPGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBpZD0iZnRBdXRvIiBvbmNsaWNrPSJmdFRvZ2dsZUF1dG8oKSIgc3R5bGU9Im1hcmdpbjowOyI+8J+UgSBBdXRvOiBvZmY8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibWljIHRrLW1pYyIgaWQ9ImZ0TWljIiBvbmNsaWNrPSJmdE1pY1RhcCgpIj7wn46kPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0iZnROdWRnZSgpIiBzdHlsZT0ibWFyZ2luOjA7Ij7inZMgTmV3IHRvcGljPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNyZXN1bHQiIGlkPSJmdFN0YXR1cyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21pbi1oZWlnaHQ6MjBweDsiPjwvZGl2PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLXRvcDo2cHg7Ij4KICAgICAgPGlucHV0IGlkPSJmdFRleHQiIHBsYWNlaG9sZGVyPSLigKZvciB0eXBlIGluIEtvcmVhbiBhbmQgcHJlc3MgRW50ZXIiCiAgICAgICAgc3R5bGU9ImZsZXg6MTtiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTtib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweCAxM3B4O2NvbG9yOnZhcigtLXRleHQpO2ZvbnQtc2l6ZToxNXB4O291dGxpbmU6bm9uZTsiPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJwYWRkaW5nOjExcHggMTZweDsiIG9uY2xpY2s9ImZ0U2VuZFRleHQoKSI+4p6kPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBRVUlaIC0tPgogIDxkaXYgY2xhc3M9InNjcmVlbiIgaWQ9InF1aXoiPgogICAgPGRpdiBjbGFzcz0iZ2FtZWJhciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJhY2siIG9uY2xpY2s9ImJhY2tUb0xlc3NvbigpIj7ihpA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0idGltZXIiIGlkPSJxdWl6VGltZXIiPjYwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLXBpbGwiPuKtkCA8c3BhbiBpZD0icXVpelNjb3JlIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJjb21ibyIgaWQ9InF1aXpDb21ibyI+PC9zcGFuPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJxdWVzdGlvbi1jYXJkIj4KICAgICAgPGRpdiBjbGFzcz0icS1sYWJlbCIgaWQ9InF1aXpMYWJlbCI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InEtd29yZCIgaWQ9InF1aXpXb3JkIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icS1oaW50IiBpZD0icXVpekhpbnQiPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhbnN3ZXJzIiBpZD0icXVpekFuc3dlcnMiPjwvZGl2PgogIDwvZGl2PgoKICA8IS0tIE1BVENIIC0tPgogIDxkaXYgY2xhc3M9InNjcmVlbiIgaWQ9Im1hdGNoIj4KICAgIDxkaXYgY2xhc3M9ImdhbWViYXIiPgogICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrIiBvbmNsaWNrPSJiYWNrVG9MZXNzb24oKSI+4oaQPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9InRpbWVyIiBpZD0ibWF0Y2hUaW1lciI+OTA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtcGlsbCI+8J+nqSA8c3BhbiBpZD0ibWF0Y2hMZWZ0Ij44PC9zcGFuPiBsZWZ0PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1hdGNoLWdyaWQiIGlkPSJtYXRjaEdyaWQiPjwvZGl2PgogIDwvZGl2PgoKICA8IS0tIEJVSUxERVIgLS0+CiAgPGRpdiBjbGFzcz0ic2NyZWVuIiBpZD0iYnVpbGRlciI+CiAgICA8ZGl2IGNsYXNzPSJnYW1lYmFyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFjayIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPuKGkDwvYnV0dG9uPgogICAgICA8ZGl2IGlkPSJidWlsZFByb2dyZXNzIiBzdHlsZT0iY29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZToxNHB4OyI+MSAvIDU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtcGlsbCI+4q2QIDxzcGFuIGlkPSJidWlsZFNjb3JlIj4wPC9zcGFuPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJidWlsZC10YXJnZXQiPgogICAgICA8ZGl2IGNsYXNzPSJxLWxhYmVsIj5CdWlsZCB0aGlzIHNlbnRlbmNlIGluIEtvcmVhbjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJidWlsZC1lbiIgaWQ9ImJ1aWxkRW4iPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJidWlsZC1zbG90IiBpZD0iYnVpbGRTbG90Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImJ1aWxkLXBvb2wiIGlkPSJidWlsZFBvb2wiPjwvZGl2PgogICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDoxNHB4OyI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgb25jbGljaz0iYnVpbGRlclJlc2V0KCkiPuKGujwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImJ1aWxkZXJDaGVjaygpIj5DaGVjayDinJM8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8IS0tIEJPU1MgLS0+CiAgPGRpdiBjbGFzcz0ic2NyZWVuIiBpZD0iYm9zcyI+CiAgICA8ZGl2IGNsYXNzPSJnYW1lYmFyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFjayIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPuKGkCBGbGVlPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImJvc3MtbmFtZSIgaWQ9ImJvc3NUaXRsZSI+8J+RuSBHdWFyZGlhbjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzY29yZS1waWxsIj7impTvuI8gPHNwYW4gaWQ9ImJvc3NEbWciPjA8L3NwYW4+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImJvc3MtYXJlbmEiPgogICAgICA8ZGl2IGNsYXNzPSJib3NzLXNwcml0ZSIgaWQ9ImJvc3NTcHJpdGUiPvCfkbk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaHBiYXIiPjxkaXYgY2xhc3M9ImhwZmlsbCIgaWQ9ImJvc3NIcCIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoZWFydHMiIGlkPSJib3NzSGVhcnRzIj7inaTvuI/inaTvuI/inaTvuI88L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icXVlc3Rpb24tY2FyZCIgc3R5bGU9InBhZGRpbmc6MTZweDsiPgogICAgICA8ZGl2IGNsYXNzPSJxLWxhYmVsIiBpZD0iYm9zc0xhYmVsIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icS13b3JkIiBpZD0iYm9zc1dvcmQiIHN0eWxlPSJmb250LXNpemU6MjJweDsiPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhbnN3ZXJzIiBpZD0iYm9zc0Fuc3dlcnMiPjwvZGl2PgogIDwvZGl2PgoKICA8IS0tIFJFU1VMVCAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJyZXN1bHQiPgogICAgPGRpdiBjbGFzcz0icmVzdWx0LWNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtZW1vamkiIGlkPSJyZXNFbW9qaSI+8J+OiTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtdGl0bGUiIGlkPSJyZXNUaXRsZSI+PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTNweDsiIGlkPSJyZXNTdWIiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtc3RhdHMiPgogICAgICAgIDxkaXYgY2xhc3M9InJzdGF0Ij48YiBpZD0icmVzU2NvcmUiPjA8L2I+PHNwYW4+c2NvcmU8L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icnN0YXQiPjxiIGlkPSJyZXNYcCI+KzA8L2I+PHNwYW4+eHA8L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icnN0YXQiPjxiIGlkPSJyZXNDb21ibyI+MDwvYj48c3Bhbj5jb21ibzwvc3Bhbj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InJlc1JlcGxheSI+UGxheSBhZ2FpbiDwn5SBPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPkxlc3NvbiDwn5OaPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCjwvZGl2PgoKPHNjcmlwdD4KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBEQVRBIOKAlCBUb20ncyBLb3JlYW4gUXVlc3Q6IDEyIG9yaWdpbmFsIGRhaWx5LWxpZmUgcXVlc3RzLgogICBWb2NhYnVsYXJ5IGRyYXduIGZyb20gdGhlIHN0YW5kYXJkIFRPUElLIDEgYmVnaW5uZXIgd29yZCBwb29sOwogICBhcnJhbmdlbWVudCwgZXhhbXBsZXMsIHN0b3JpZXMgYW5kIGNvbnZlcnNhdGlvbnMgYXJlIG9yaWdpbmFsLgogICBXb3JkOiBba3IsIHJvbWFuaXphdGlvbiwgZW4sIHZpLCBlbW9qaSwgZXhhbXBsZUtyLCBleGFtcGxlRW5dCiAgIEdyYW1tYXI6IFtwYXR0ZXJuLCBtZWFuaW5nLWVuLCBtZWFuaW5nLXZpLCB1c2FnZSBub3RlLCBleDFrciwgZXgxZW4sIGV4MmtyLCBleDJlbl0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCBMRVNTT05TID0gWwp7bjoxLCBrcjoi7LKrIOunjOuCqCIsIGVuOiJGaXJzdCBNZWV0aW5ncyIsIHZpOiJZb3VyIGZpcnN0IGhlbGxvIiwgZW1vamk6IvCfpJ0iLCBib3NzOiLwn5G6IiwgYm9zc05hbWU6IkF3a3dhcmQtU2lsZW5jZSBJbXAiLAogd29yZHM6WwogIFsi7JWI64WV7ZWY7IS47JqUIiwiYW4tbnllb25nLWhhLXNlLXlvIiwiaGVsbG8iLCJUaGUgYWxsLXB1cnBvc2UgcG9saXRlIGhlbGxvIOKAlCB3b3JrcyBtb3JuaW5nLCBub29uIGFuZCBuaWdodCIsIvCfkYsiLCLslYjrhZXtlZjshLjsmpQhIOunjOuCmOyEnCDrsJjqsJHsirXri4jri6QuIiwiSGVsbG8hIEdsYWQgdG8gbWVldCB5b3UuIl0sCiAgWyLsnbTrpoQiLCJpLXJldW0iLCJuYW1lIiwiQXNrIOydtOumhOydtCDrrZDsmIjsmpQ/IOKAlCBXaGF0IGlzIHlvdXIgbmFtZT8iLCLwn5ObIiwi7J2066aE7J20IOutkOyYiOyalD8iLCJXaGF0IGlzIHlvdXIgbmFtZT8iXSwKICBbIuunjOuCmOyEnCDrsJjqsJHsirXri4jri6QiLCJtYW4tbmEtc2VvIGJhbi1nYXAtc2V1bS1uaS1kYSIsImdsYWQgdG8gbWVldCB5b3UiLCJTYXkgaXQgcmlnaHQgYWZ0ZXIgaW50cm9kdWN0aW9ucyDigJQgaW5zdGFudCB3YXJtdGgiLCLwn5iKIiwi66eM64KY7IScIOygleunkCDrsJjqsJHsirXri4jri6QhIiwiUmVhbGx5IGdsYWQgdG8gbWVldCB5b3UhIl0sCiAgWyLrgpjrnbwiLCJuYS1yYSIsImNvdW50cnkiLCLslrTripAg64KY6528ID0gd2hpY2ggY291bnRyeSDigJQgdGhlICMxIHF1ZXN0aW9uIHlvdSB3aWxsIGhlYXIiLCLwn4yNIiwi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IiwiV2hpY2ggY291bnRyeSBhcmUgeW91IGZyb20/Il0sCiAgWyLsgqzrnowiLCJzYS1yYW0iLCJwZXJzb24iLCJDb3VudHJ5ICsg7IKs656MID0gbmF0aW9uYWxpdHk6IOy6kOuCmOuLpCDsgqzrnowiLCLwn6eRIiwi7KCA64qUIOy6kOuCmOuLpCDsgqzrnozsnbTsl5DsmpQuIiwiSSBhbSBDYW5hZGlhbi4iXSwKICBbIuy5nOq1rCIsImNoaW4tZ3UiLCJmcmllbmQiLCJBbHNvIHVzZWQgbG9vc2VseSBmb3IgcGVvcGxlIHlvdXIgYWdlIiwi8J+RqyIsIuyasOumrCDsoovsnYAg7Lmc6rWsIO2VtOyalCEiLCJMZXQgdXMgYmUgZ29vZCBmcmllbmRzISJdLAogIFsi6rCQ7IKs7ZWp64uI64ukIiwiZ2FtLXNhLWhhbS1uaS1kYSIsInRoYW5rIHlvdSIsIlRoZSBzYWZlLCBwb2xpdGUgdGhhbmsteW91IGZvciBhbnkgc2l0dWF0aW9uIiwi8J+ZjyIsIuuPhOyZgOyjvOyFlOyEnCDqsJDsgqztlanri4jri6QuIiwiVGhhbmsgeW91IGZvciBoZWxwaW5nIG1lLiJdLAogIFsi7KOE7Iah7ZWp64uI64ukIiwiam9lLXNvbmctaGFtLW5pLWRhIiwiSSBhbSBzb3JyeSIsIk1vcmUgZm9ybWFsIHRoYW4g66+47JWI7ZW07JqUIOKAlCB1c2Ugd2l0aCBzdHJhbmdlcnMiLCLwn5mHIiwi64qm7Ja07IScIOyjhOyGoe2VqeuLiOuLpC4iLCJTb3JyeSBmb3IgYmVpbmcgbGF0ZS4iXSwKICBbIuuEpCAvIOyVhOuLiOyalCIsIm5lIC8gYS1uaS15byIsInllcyAvIG5vIiwi64SkIGFsc28gd29ya3MgYXMgJ0kgaGVhciB5b3UnIHdoaWxlIGxpc3RlbmluZyIsIuKchSIsIuuEpCwg66ee7JWE7JqULiIsIlllcywgdGhhdCBpcyByaWdodC4iXSwKICBbIuyemCDrtoDtg4Hrk5zrpr3ri4jri6QiLCJqYWwgYnUtdGFrLWRldS1yaW0tbmktZGEiLCJwbGVhc2UgdGFrZSBjYXJlIG9mIG1lIiwiU2FpZCB3aGVuIGpvaW5pbmcgYSBncm91cCBvciBzdGFydGluZyBzb21ldGhpbmcgdG9nZXRoZXIiLCLwn6SyIiwi7JWe7Jy866GcIOyemCDrtoDtg4Hrk5zrpr3ri4jri6QhIiwiSSBsb29rIGZvcndhcmQgdG8gd29ya2luZyB3aXRoIHlvdSEiXSwKICBbIuyViOuFle2eiCDqsIDshLjsmpQiLCJhbi1ueWVvbmctaGkgZ2Etc2UteW8iLCJnb29kYnllICh0aGV5IGxlYXZlKSIsIlRvIHRoZSBwZXJzb24gbGVhdmluZzsg7JWI64WV7Z6IIOqzhOyEuOyalCBpZiBZT1UgbGVhdmUiLCLwn5qqIiwi7JWI64WV7Z6IIOqwgOyEuOyalCEiLCJHb29kYnllIOKAlCBnbyB3ZWxsISJdLAogIFsi65iQIOunjOuCmOyalCIsInR0byBtYW4tbmEteW8iLCJzZWUgeW91IGFnYWluIiwiRnJpZW5kbHkgY2xvc2VyIHRoYXQga2VlcHMgdGhlIGRvb3Igb3BlbiIsIvCflIEiLCLri6TsnYzsl5Ag65iQIOunjOuCmOyalCEiLCJTZWUgeW91IGFnYWluIG5leHQgdGltZSEiXV0sCiBncmFtbWFyOlsKICBbIuyggOuKlCBO7J207JeQ7JqUL+yYiOyalCIsIkkgYW0gTiIsIkludHJvZHVjaW5nIHlvdXJzZWxmIOKAlCBuYW1lLCBqb2IsIG5hdGlvbmFsaXR5Iiwi7J207JeQ7JqUIGFmdGVyIGEgY29uc29uYW50ICjsgqzrnozsnbTsl5DsmpQpLCDsmIjsmpQgYWZ0ZXIgYSB2b3dlbCAo66+87IiY7JiI7JqUKS4iLCLsoIDripQg7Yaw7J207JeQ7JqULiIsIkkgYW0gVG9tLiIsIuyggOuKlCDsupDrgpjri6Qg7IKs656M7J207JeQ7JqULiIsIkkgYW0gQ2FuYWRpYW4uIl0sCiAgWyJO7J20L+qwgCDrrZDsmIjsmpQ/Iiwid2hhdCBpcyBOPyIsIkFza2luZyBhYm91dCBhbnl0aGluZyB5b3UgcG9pbnQgYXQgb3Igd2FudCB0byBrbm93Iiwi7J20IGFmdGVyIGNvbnNvbmFudCwg6rCAIGFmdGVyIHZvd2VsLiBUaGUgdW5pdmVyc2FsIHF1ZXN0aW9uIHN0YXJ0ZXIuIiwi7J2066aE7J20IOutkOyYiOyalD8iLCJXaGF0IGlzIHlvdXIgbmFtZT8iLCLsnbTqsbDripQg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhpcz8iXSwKICBbIk7sl5DshJwg7JmU7Ja07JqUIiwiSSBjYW1lIGZyb20gTiIsIlNoYXJpbmcgKG9yIGFza2luZykgd2hlcmUgc29tZW9uZSBpcyBmcm9tIiwi7JeQ7IScIG1hcmtzIHRoZSBvcmlnaW4uIFF1ZXN0aW9uOiDslrTrlJTsl5DshJwg7JmU7Ja07JqUPyIsIuyggOuKlCDrsqDtirjrgqjsl5DshJwg7JmU7Ja07JqULiIsIkkgY2FtZSBmcm9tIFZpZXRuYW0uIiwi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IiwiV2hpY2ggY291bnRyeSBkaWQgeW91IGNvbWUgZnJvbT8iXV19LAoKe246Miwga3I6Iuy5tO2OmCIsIGVuOiJBdCB0aGUgQ2Fmw6kiLCB2aToiT3JkZXIgbGlrZSBhIHJlZ3VsYXIiLCBlbW9qaToi4piVIiwgYm9zczoi8J+QsiIsIGJvc3NOYW1lOiJEZWNhZiBEcmFnb24iLAogd29yZHM6WwogIFsi7Luk7ZS8Iiwia2VvLXBpIiwiY29mZmVlIiwiS29yZWEgcnVucyBvbiBjb2ZmZWUg4oCUIGNhZsOpcyBvbiBldmVyeSBjb3JuZXIiLCLimJUiLCLsu6TtlLwg7ZWcIOyelCDso7zshLjsmpQuIiwiT25lIGNvZmZlZSwgcGxlYXNlLiJdLAogIFsi7KO87IS47JqUIiwianUtc2UteW8iLCJwbGVhc2UgZ2l2ZSBtZSIsIlRIRSBtYWdpYyB3b3JkIOKAlCBhdHRhY2ggaXQgdG8gYW55dGhpbmcgeW91IHdhbnQiLCLwn6SyIiwi66y8IOyigCDso7zshLjsmpQuIiwiU29tZSB3YXRlciwgcGxlYXNlLiJdLAogIFsi7JWE7J207IqkIiwiYS1pLXNldSIsImljZWQiLCJLb3JlYW5zIGRyaW5rIGljZWQgY29mZmVlIGV2ZW4gaW4gd2ludGVyIiwi8J+niiIsIuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7KO87IS47JqULiIsIkFuIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIl0sCiAgWyLrlLDrnLvtlZwiLCJ0dGEtdHRldS10YW4iLCJob3QgKGRyaW5rKSIsIkxpdGVyYWxseSAnd2FybScg4oCUIHRoZSBzdGFuZGFyZCB3b3JkIGZvciBob3QgZHJpbmtzIiwi4pmo77iPIiwi65Sw65y77ZWcIOudvO2FjCDso7zshLjsmpQuIiwiQSBob3QgbGF0dGUsIHBsZWFzZS4iXSwKICBbIu2VnCDsnpQiLCJoYW4gamFuIiwib25lIGN1cCIsIuyelCA9IGN1cCBjb3VudGVyOiDtlZwg7J6ULCDrkZAg7J6ULCDshLgg7J6UIiwi8J+lpCIsIuy7pO2UvCDrkZAg7J6UIOyjvOyEuOyalC4iLCJUd28gY29mZmVlcywgcGxlYXNlLiJdLAogIFsi7Y+s7J6lIiwicG8tamFuZyIsInRha2VvdXQiLCLtj6zsnqXtlbQg7KO87IS47JqUID0gdG8gZ287IOuoueqzoCDqsIjqsozsmpQgPSBmb3IgaGVyZSIsIvCfpaEiLCLtj6zsnqXtlbQg7KO87IS47JqULiIsIlRvIGdvLCBwbGVhc2UuIl0sCiAgWyLslrzrp4jsmIjsmpQiLCJlb2wtbWEteWUteW8iLCJob3cgbXVjaCBpcyBpdCIsIldvcmtzIGZvciBldmVyeXRoaW5nIHdpdGggYSBwcmljZSB0YWciLCLwn5KwIiwi7J206rGwIOyWvOuniOyYiOyalD8iLCJIb3cgbXVjaCBpcyB0aGlzPyJdLAogIFsi7Lm065OcIiwia2EtZGV1IiwiY2FyZCIsIuy5tOuTnOuhnCA9IGJ5IGNhcmQ7IG5lYXJseSBldmVyeXdoZXJlIHRha2VzIGNhcmRzIiwi8J+SsyIsIuy5tOuTnOuhnCDtlaDqsozsmpQuIiwiSSB3aWxsIHBheSBieSBjYXJkLiJdLAogIFsi7ZiE6riIIiwiaHllb24tZ2V1bSIsImNhc2giLCJTb21lIG1hcmtldHMgYXJlIHN0aWxsIGNhc2gtb25seSIsIvCfkrUiLCLtmITquIjrp4wg64+87JqUPyIsIklzIGl0IGNhc2ggb25seT8iXSwKICBbIuy8gOydtO2BrCIsImtlLWkta2V1IiwiY2FrZSIsIkNhZsOpIGNha2VzIGFyZSBhIHdob2xlIGN1bHR1cmUgaW4gS29yZWEiLCLwn42wIiwi7LmY7KaIIOy8gOydtO2BrCDtlZjrgpgg7KO87IS47JqULiIsIk9uZSBjaGVlc2VjYWtlLCBwbGVhc2UuIl0sCiAgWyLshKTtg5UiLCJzZW9sLXRhbmciLCJzdWdhciIsIuu5vCDso7zshLjsmpQgPSBsZWF2ZSBpdCBvdXQiLCLwn42sIiwi7ISk7YOVIOu5vCDso7zshLjsmpQuIiwiTm8gc3VnYXIsIHBsZWFzZS4iXSwKICBbIuyekOumrCIsImphLXJpIiwic2VhdCIsIkNoZWNrIGJlZm9yZSB5b3Ugb3JkZXIgYXQgYnVzeSBjYWbDqXMiLCLwn6qRIiwi7J6Q66asIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBhIHNlYXQ/Il1dLAogZ3JhbW1hcjpbCiAgWyJOIOyjvOyEuOyalCIsInBsZWFzZSBnaXZlIG1lIE4iLCJPcmRlcmluZyBBTllUSElORyDigJQgZHJpbmtzLCBmb29kLCB0aGUgYmlsbCIsIk5vdW4gKyDso7zshLjsmpQuIEFkZCDsooAgdG8gc29mdGVuOiDrrLwg7KKAIOyjvOyEuOyalC4iLCLslYTsnbTsiqQg7JWE66mU66as7Lm064W4IOyjvOyEuOyalC4iLCJBbiBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsIuuplOuJtCDsooAg7KO87IS47JqULiIsIlRoZSBtZW51LCBwbGVhc2UuIl0sCiAgWyJOKOycvCnroZwg7ZWg6rKM7JqUIiwiSSB3aWxsIGdvIHdpdGggTiIsIkNob29zaW5nIGFuIG9wdGlvbiDigJQgcGF5bWVudCwgZmxhdm9yLCBzaXplIiwiKOycvCnroZwgbWFya3MgeW91ciBjaG9pY2U7IH7jhLnqsozsmpQgPSBmcmllbmRseSAnSSB3aWxsJy4iLCLsubTrk5zroZwg7ZWg6rKM7JqULiIsIkkgd2lsbCBwYXkgYnkgY2FyZC4iLCLtgbAg7IKs7J207KaI66GcIO2VoOqyjOyalC4iLCJJIHdpbGwgdGFrZSB0aGUgbGFyZ2Ugc2l6ZS4iXSwKICBbIk4g67m8IOyjvOyEuOyalCIsIndpdGhvdXQgTiwgcGxlYXNlIiwiQ3VzdG9taXppbmcgeW91ciBvcmRlciIsIuu5vOuLpCA9IHJlbW92ZS4gT3Bwb3NpdGU6IOuNlCDso7zshLjsmpQgKG1vcmUgcGxlYXNlKS4iLCLshKTtg5Ug67m8IOyjvOyEuOyalC4iLCJXaXRob3V0IHN1Z2FyLCBwbGVhc2UuIiwi7Ja87J2MIOu5vCDso7zshLjsmpQuIiwiTm8gaWNlLCBwbGVhc2UuIl1dfSwKCntuOjMsIGtyOiLsi53ri7kiLCBlbjoiQXQgdGhlIFJlc3RhdXJhbnQiLCB2aToiTmV2ZXIgZ28gaHVuZ3J5IiwgZW1vamk6IvCfjZwiLCBib3NzOiLwn4y277iPIiwgYm9zc05hbWU6IlNwaWNlIEdvYmxpbiIsCiB3b3JkczpbCiAgWyLrqZTribQiLCJtZS1ueXUiLCJtZW51Iiwi66mU64m07YyQID0gdGhlIHBoeXNpY2FsIG1lbnUgYm9hcmQvYm9vayIsIvCfk4siLCLrqZTribQg7KKAIOyjvOyEuOyalC4iLCJUaGUgbWVudSwgcGxlYXNlLiJdLAogIFsi7LaU7LKcIiwiY2h1LWNoZW9uIiwicmVjb21tZW5kYXRpb24iLCJTZXJ2ZXJzIGxvdmUgdGhpcyBxdWVzdGlvbiDigJQgaW5zdGFudCBnb29kIGZvb2QiLCLwn5GNIiwi7LaU7LKc7ZW0IOyjvOyEuOyalCEiLCJQbGVhc2UgcmVjb21tZW5kIHNvbWV0aGluZyEiXSwKICBbIuunteuLpCIsIm1hZXAtZGEiLCJzcGljeSIsIkVzc2VudGlhbCBzdXJ2aXZhbCBjaGVjazog66ek7JuM7JqUPyA9IGlzIGl0IHNwaWN5PyIsIvCfjLbvuI8iLCLsnbTqsbAg66eO7J20IOunpOybjOyalD8iLCJJcyB0aGlzIHZlcnkgc3BpY3k/Il0sCiAgWyLrrLwiLCJtdWwiLCJ3YXRlciIsIlVzdWFsbHkgc2VsZi1zZXJ2ZSDigJQgbG9vayBmb3IgdGhlIHdhdGVyIHN0YXRpb24iLCLwn5KnIiwi66y87J2AIOyFgO2UhOyYiOyalC4iLCJXYXRlciBpcyBzZWxmLXNlcnZlLiJdLAogIFsi67CY7LCsIiwiYmFuLWNoYW4iLCJzaWRlIGRpc2hlcyIsIkZyZWUgYW5kIHJlZmlsbGFibGUgYXQgbW9zdCBLb3JlYW4gcmVzdGF1cmFudHMhIiwi8J+loiIsIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iXSwKICBbIuunm+yeiOuLpCIsIm1hcy1pdC1kYSIsImRlbGljaW91cyIsIkNvbXBsaW1lbnQgdGhlIGZvb2Qg4oCUIGl0IG1ha2VzIGV2ZXJ5b25lIGhhcHB5Iiwi8J+YiyIsIuyZgCwg7KCV66eQIOunm+yeiOyWtOyalCEiLCJXb3csIHRoaXMgaXMgcmVhbGx5IGRlbGljaW91cyEiXSwKICBbIuqzhOyCsOyEnCIsImd5ZS1zYW4tc2VvIiwiYmlsbCIsIk9mdGVuIHlvdSBqdXN0IHBheSBhdCB0aGUgY291bnRlciBieSB0aGUgZG9vciIsIvCfp74iLCLqs4TsgrDshJwg7KO87IS47JqULiIsIlRoZSBiaWxsLCBwbGVhc2UuIl0sCiAgWyLrlLDroZwiLCJ0dGEtcm8iLCJzZXBhcmF0ZWx5Iiwi65Sw66Gc65Sw66GcIOqzhOyCsCA9IHNwbGl0IHRoZSBiaWxsIiwi8J+SuCIsIuuUsOuhnCDqs4TsgrDtlbQg7KO87IS47JqULiIsIlNlcGFyYXRlIGJpbGxzLCBwbGVhc2UuIl0sCiAgWyLtmZTsnqXsi6QiLCJod2EtamFuZy1zaWwiLCJyZXN0cm9vbSIsIlNvbWV0aW1lcyBvdXRzaWRlIHRoZSByZXN0YXVyYW50IOKAlCBhc2sgZm9yIHRoZSBjb2RlISIsIvCfmrsiLCLtmZTsnqXsi6TsnbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSByZXN0cm9vbT8iXSwKICBbIuyYiOyVvSIsInllLXlhayIsInJlc2VydmF0aW9uIiwi7JiI7JW97ZaI7Ja07JqUID0gSSBoYXZlIGEgcmVzZXJ2YXRpb24iLCLwn5OFIiwi65GQIOuqheycvOuhnCDsmIjslb3tlojslrTsmpQuIiwiSSByZXNlcnZlZCBmb3IgdHdvIHBlb3BsZS4iXSwKICBbIuygk+qwgOudvSIsImplb3QtZ2EtcmFrIiwiY2hvcHN0aWNrcyIsIk9mdGVuIGluIGEgYm94IG9uIHRoZSB0YWJsZSBzaWRlIGRyYXdlciIsIvCfpaIiLCLsoJPqsIDrnb0g7ZWY64KYIOuNlCDso7zshLjsmpQuIiwiT25lIG1vcmUgcGFpciBvZiBjaG9wc3RpY2tzLCBwbGVhc2UuIl0sCiAgWyLrsLDrtoDrpbTri6QiLCJiYWUtYnUtcmV1LWRhIiwidG8gYmUgZnVsbCIsIlRoZSBoYXBwaWVzdCBzZW50ZW5jZSBhZnRlciBhIGdvb2QgbWVhbCIsIvCfq4MiLCLslYQsIOuwsOu2iOufrOyalCEiLCJBaCwgSSBhbSBmdWxsISJdXSwKIGdyYW1tYXI6WwogIFsiTiDrjZQg7KO87IS47JqUIiwibW9yZSBOLCBwbGVhc2UiLCJSZWZpbGxzIOKAlCBzaWRlIGRpc2hlcywgd2F0ZXIsIGFueXRoaW5nIiwi642UID0gbW9yZS4gS29yZWFuIHJlc3RhdXJhbnRzIGV4cGVjdCB0aGlzLCBkbyBub3QgYmUgc2h5LiIsIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLCLrrLwg642UIOyjvOyEuOyalC4iLCJNb3JlIHdhdGVyLCBwbGVhc2UuIl0sCiAgWyLslYggKyBhZGplY3RpdmUiLCJub3QgfiIsIkFza2luZyBmb3IgZm9vZCB5b3VyIHdheSIsIuyViCDrp7XqsowgPSBub3Qgc3BpY3kobHkpLiDslYggZ29lcyByaWdodCBiZWZvcmUgdGhlIHdvcmQuIiwi7JWIIOunteqyjCDtlbQg7KO87IS47JqULiIsIlBsZWFzZSBtYWtlIGl0IG5vdCBzcGljeS4iLCLslYgg7Kec6rKMIO2VtCDso7zshLjsmpQuIiwiUGxlYXNlIG1ha2UgaXQgbm90IHNhbHR5LiJdLAogIFsifijsnLwp44S5IOyImCDsnojslrTsmpQ/IiwiY2FuIHlvdSAvIGlzIGl0IHBvc3NpYmxlPyIsIlBvbGl0ZWx5IGNoZWNraW5nIGlmIHNvbWV0aGluZyBjYW4gYmUgZG9uZSIsIlZlcmIgc3RlbSArICjsnLwp44S5IOyImCDsnojslrTsmpQuIFRoZSB1bml2ZXJzYWwgcG9zc2liaWxpdHkgY2hlY2suIiwi642cIOunteqyjCDtlaAg7IiYIOyeiOyWtOyalD8iLCJDYW4geW91IG1ha2UgaXQgbGVzcyBzcGljeT8iLCLsp4DquIgg7KO866y47ZWgIOyImCDsnojslrTsmpQ/IiwiQ2FuIEkgb3JkZXIgbm93PyJdXX0sCgp7bjo0LCBrcjoi6ri4IOywvuq4sCIsIGVuOiJBc2tpbmcgRGlyZWN0aW9ucyIsIHZpOiJOZXZlciB0cnVseSBsb3N0IiwgZW1vamk6IvCfl7rvuI8iLCBib3NzOiLwn4yAIiwgYm9zc05hbWU6Ik1hemUgUGhhbnRvbSIsCiB3b3JkczpbCiAgWyLslrTrlJQiLCJlby1kaSIsIndoZXJlIiwi7Ja065SU7JiI7JqUPyB3b3JrcyBmb3IgcGxhY2VzLCByZXN0cm9vbXMsIGV4aXRzLCBldmVyeXRoaW5nIiwi4p2TIiwi7KeA7ZWY7LKg7Jet7J20IOyWtOuUlOyYiOyalD8iLCJXaGVyZSBpcyB0aGUgc3Vid2F5IHN0YXRpb24/Il0sCiAgWyLsmbzsqr0iLCJvZW4tampvayIsImxlZnQiLCIo7Jy8KeuhnCBtYXJrcyB0aGUgZGlyZWN0aW9uOiDsmbzsqr3snLzroZwiLCLirIXvuI8iLCLsmbzsqr3snLzroZwg6rCA7IS47JqULiIsIkdvIHRvIHRoZSBsZWZ0LiJdLAogIFsi7Jik66W47Kq9Iiwiby1yZXVuLWpqb2siLCJyaWdodCIsIkxlYXJuIOyZvOyqvS/smKTrpbjsqr0gYXMgYSBwYWlyIiwi4p6h77iPIiwi7Jik66W47Kq97Jy866GcIOuPhOyEuOyalC4iLCJUdXJuIHJpZ2h0LiJdLAogIFsi7K2JIiwiamp1ayIsInN0cmFpZ2h0IGFoZWFkIiwi7K2JIOqwgOyEuOyalCA9IGtlZXAgZ29pbmcgc3RyYWlnaHQg4oCUIHlvdSB3aWxsIGhlYXIgdGhpcyBhIGxvdCIsIuKshu+4jyIsIuydtCDquLjroZwg7K2JIOqwgOyEuOyalC4iLCJHbyBzdHJhaWdodCBhbG9uZyB0aGlzIHJvYWQuIl0sCiAgWyLsgqzqsbDrpqwiLCJzYS1nZW8tcmkiLCJpbnRlcnNlY3Rpb24iLCLsgqwgPSBmb3VyLCDqsbDrpqwgPSB3YXk6IGEgZm91ci13YXkgY3Jvc3NpbmciLCLinpUiLCLsgqzqsbDrpqzsl5DshJwg7Jm87Kq97J207JeQ7JqULiIsIkF0IHRoZSBpbnRlcnNlY3Rpb24sIGl0IGlzIG9uIHRoZSBsZWZ0LiJdLAogIFsi7Iug7Zi465OxIiwic2luLWhvLWRldW5nIiwidHJhZmZpYyBsaWdodCIsIkEgZmF2b3JpdGUgbGFuZG1hcmsgaW4gZGlyZWN0aW9ucyIsIvCfmqYiLCLsi6DtmLjrk7Hsl5DshJwg6rG064SI7IS47JqULiIsIkNyb3NzIGF0IHRoZSB0cmFmZmljIGxpZ2h0LiJdLAogIFsi6rG064SI64ukIiwiZ2Vvbi1uZW8tZGEiLCJ0byBjcm9zcyIsIuq4uOydhCDqsbTrhIjri6QgPSBjcm9zcyB0aGUgc3RyZWV0Iiwi8J+atiIsIu2aoeuLqOuztOuPhOyXkOyEnCDquLjsnYQg6rG064SI7IS47JqULiIsIkNyb3NzIHRoZSBzdHJlZXQgYXQgdGhlIGNyb3Nzd2Fsay4iXSwKICBbIuqwgOq5neuLpCIsImdhLWtrYXAtZGEiLCJuZWFyIiwi6rCA6rmM7JuM7JqUPyA9IGlzIGl0IGNsb3NlPyBHcmVhdCBiZWZvcmUgY29tbWl0dGluZyB0byB3YWxrIiwi8J+TjSIsIuyXrOq4sOyEnCDqsIDquYzsm4zsmpQ/IiwiSXMgaXQgbmVhciBoZXJlPyJdLAogIFsi66mA64ukIiwibWVvbC1kYSIsImZhciIsIuupgOyWtOyalCA9IGl0IGlzIGZhciDihpIgdGFrZSBhIGJ1cyBpbnN0ZWFkIiwi8J+alyIsIuqxuOyWtOyEnCDsooAg66mA7Ja07JqULiIsIkl0IGlzIGEgYml0IGZhciBvbiBmb290LiJdLAogIFsi7JiGIiwieWVvcCIsIm5leHQgdG8iLCJOIOyYhuyXkCA9IGJlc2lkZSBOOiDsnYDtlokg7JiG7JeQIiwi4oaU77iPIiwi7Lm07Y6Y64qUIOydgO2WiSDsmIbsl5Ag7J6I7Ja07JqULiIsIlRoZSBjYWbDqSBpcyBuZXh0IHRvIHRoZSBiYW5rLiJdLAogIFsi7JWeIiwiYXAiLCJpbiBmcm9udCBvZiIsIk4g7JWe7JeQ7IScIOunjOuCmOyalCA9IGNsYXNzaWMgbWVldGluZyBpbnN0cnVjdGlvbiIsIvCfj6IiLCLtjrjsnZjsoJAg7JWe7JeQ7IScIOunjOuCmOyalC4iLCJMZXQgdXMgbWVldCBpbiBmcm9udCBvZiB0aGUgY29udmVuaWVuY2Ugc3RvcmUuIl0sCiAgWyLrqocg67aEIiwibXllb3QgYnVuIiwiaG93IG1hbnkgbWludXRlcyIsIuqxuOyWtOyEnCDrqocg67aE7J207JeQ7JqUPyA9IGhvdyBtYW55IG1pbnV0ZXMgb24gZm9vdD8iLCLij7HvuI8iLCLqsbjslrTshJwg66qHIOu2hCDqsbjroKTsmpQ/IiwiSG93IG1hbnkgbWludXRlcyBkb2VzIGl0IHRha2Ugb24gZm9vdD8iXV0sCiBncmFtbWFyOlsKICBbIk7snbQv6rCAIOyWtOuUlOyYiOyalD8iLCJ3aGVyZSBpcyBOPyIsIlRoZSBvbmUgc2VudGVuY2UgdGhhdCB1bmxvY2tzIGFueSBjaXR5IiwiSnVzdCBuYW1lICsg7Ja065SU7JiI7JqULiBQb2ludCBhdCB5b3VyIHBob25lIG1hcCBmb3IgYm9udXMgY2xhcml0eS4iLCLtmZTsnqXsi6TsnbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSByZXN0cm9vbT8iLCLrsoTsiqQg7KCV66WY7J6l7J20IOyWtOuUlOyYiOyalD8iLCJXaGVyZSBpcyB0aGUgYnVzIHN0b3A/Il0sCiAgWyJ+KOycvCnroZwg6rCA7IS47JqUIiwiZ28gdG93YXJkIH4iLCJVbmRlcnN0YW5kaW5nIHRoZSBkaXJlY3Rpb25zIHlvdSBnZXQgYmFjayIsIijsnLwp66GcID0gZGlyZWN0aW9uIG1hcmtlci4g64+E7IS47JqUID0gdHVybi4iLCLsmbzsqr3snLzroZwg6rCA7IS47JqULiIsIkdvIGxlZnQuIiwi7KCAIOyLoO2YuOuTseyXkOyEnCDsmKTrpbjsqr3snLzroZwg64+E7IS47JqULiIsIlR1cm4gcmlnaHQgYXQgdGhhdCB0cmFmZmljIGxpZ2h0LiJdLAogIFsifuyXkOyEnCDqsIDquYzsm4zsmpQv66mA7Ja07JqUIiwibmVhciAvIGZhciBmcm9tIH4iLCJKdWRnaW5nIGRpc3RhbmNlIGJlZm9yZSB5b3Ugc3RhcnQgd2Fsa2luZyIsIuyXkOyEnCA9IGZyb20uIEFkZCDqsbjslrTshJwgPSBvbiBmb290LiIsIu2YuO2FlOyXkOyEnCDqsIDquYzsm4zsmpQuIiwiSXQgaXMgY2xvc2UgdG8gdGhlIGhvdGVsLiIsIuyXrOq4sOyEnCDrqYDslrTsmpQ/IiwiSXMgaXQgZmFyIGZyb20gaGVyZT8iXV19LAoKe246NSwga3I6IuuMgOykkeq1kO2GtSIsIGVuOiJCdXNlcywgVHJhaW5zICYgVGF4aXMiLCB2aToiTW92ZSBsaWtlIGEgbG9jYWwiLCBlbW9qaToi8J+ahyIsIGJvc3M6IvCfl78iLCBib3NzTmFtZToiUnVzaC1Ib3VyIEdvbGVtIiwKIHdvcmRzOlsKICBbIuyngO2VmOyyoCIsImppLWhhLWNoZW9sIiwic3Vid2F5IiwiU2VvdWwncyBzdWJ3YXkgaXMgd29ybGQtY2xhc3Mg4oCUIHNpZ25zIGhhdmUgRW5nbGlzaCB0b28iLCLwn5qHIiwi7KeA7ZWY7LKg7J20IOygnOydvCDruajrnbzsmpQuIiwiVGhlIHN1YndheSBpcyB0aGUgZmFzdGVzdC4iXSwKICBbIuuyhOyKpCIsImJlby1zZXUiLCJidXMiLCJUYXAgeW91ciBjYXJkIHdoZW4gYm9hcmRpbmcgQU5EIGxlYXZpbmciLCLwn5qMIiwi7J20IOuyhOyKpOqwgCDsi5zssq3sl5Ag6rCA7JqUPyIsIkRvZXMgdGhpcyBidXMgZ28gdG8gQ2l0eSBIYWxsPyJdLAogIFsi7YOd7IucIiwidGFlay1zaSIsInRheGkiLCJTaG93IHRoZSBhZGRyZXNzIGluIEtvcmVhbiBmb3Igc21vb3RoIHJpZGVzIiwi8J+alSIsIu2DneyLnOulvCDtg4Dqs6Ag6rCI6rKM7JqULiIsIkkgd2lsbCB0YWtlIGEgdGF4aS4iXSwKICBbIuyXrSIsInllb2siLCJzdGF0aW9uICh0cmFpbi9zdWJ3YXkpIiwiQXR0YWNoIHRvIG5hbWVzOiDshJzsmrjsl60sIOqwleuCqOyXrSIsIvCfmokiLCLri6TsnYwg7Jet7J20IOyWtOuUlOyYiOyalD8iLCJXaGF0IGlzIHRoZSBuZXh0IHN0YXRpb24/Il0sCiAgWyLsoJXrpZjsnqUiLCJqZW9uZy1ueXUtamFuZyIsImJ1cyBzdG9wIiwi67KE7IqkIOygleulmOyepSDigJQgZGlmZmVyZW50IHdvcmQgZnJvbSDsl60hIiwi8J+ajyIsIuygleulmOyepeydtCDslrTrlJTsl5Ag7J6I7Ja07JqUPyIsIldoZXJlIGlzIHRoZSBidXMgc3RvcD8iXSwKICBbIu2DgOuLpCIsInRhLWRhIiwidG8gcmlkZSAvIHRha2UiLCJVc2VkIGZvciBldmVyeSB2ZWhpY2xlOiDrsoTsiqTrpbwg7YOA7JqULCDsp4DtlZjssqDsnYQg7YOA7JqUIiwi8J+OqyIsIuyXrOq4sOyEnCAy7Zi47ISg7J2EIO2DgOyEuOyalC4iLCJUYWtlIGxpbmUgMiBmcm9tIGhlcmUuIl0sCiAgWyLrgrTrpqzri6QiLCJuYWUtcmktZGEiLCJ0byBnZXQgb2ZmIiwi7KCAIOuCtOugpOyalCEgPSBJIGFtIGdldHRpbmcgb2ZmISAoYnVzIHN1cnZpdmFsIHBocmFzZSkiLCLirIfvuI8iLCLri6TsnYwg7KCV66WY7J6l7JeQ7IScIOuCtOumrOyEuOyalC4iLCJHZXQgb2ZmIGF0IHRoZSBuZXh0IHN0b3AuIl0sCiAgWyLqsIjslYTtg4Dri6QiLCJnYWwtYS10YS1kYSIsInRvIHRyYW5zZmVyIiwi6rCI7JWE7YOA64qUIOqzsyA9IHRyYW5zZmVyIHBvaW50IChmb2xsb3cgdGhlIHNpZ25zKSIsIvCflIAiLCLsi5zssq3sl63sl5DshJwg6rCI7JWE7YOA7IS47JqULiIsIlRyYW5zZmVyIGF0IENpdHkgSGFsbCBTdGF0aW9uLiJdLAogIFsi6rWQ7Ya17Lm065OcIiwiZ3lvLXRvbmcta2EtZGV1IiwidHJhbnNpdCBjYXJkIiwiVC1tb25leSBjYXJkIOKAlCBidXkgb25lIGF0IGFueSBjb252ZW5pZW5jZSBzdG9yZSIsIvCfkrMiLCLqtZDthrXsubTrk5zrpbwg7Lap7KCE7ZW0IOyjvOyEuOyalC4iLCJQbGVhc2UgcmVjaGFyZ2UgbXkgdHJhbnNpdCBjYXJkLiJdLAogIFsi66qHIO2YuOyEoCIsIm15ZW90IGhvLXNlb24iLCJ3aGljaCBsaW5lIiwiU3Vid2F5IGxpbmVzIGFyZSBudW1iZXJzICsgY29sb3JzIiwi8J+UoiIsIuuqhyDtmLjshKDsnYQg7YOA7JW8IO2VtOyalD8iLCJXaGljaCBsaW5lIHNob3VsZCBJIHRha2U/Il0sCiAgWyLslrzrp4jrgpgg6rG466Ck7JqUIiwiZW9sLW1hLW5hIGdlb2wtbHllby15byIsImhvdyBsb25nIGRvZXMgaXQgdGFrZSIsIldvcmtzIGZvciBhbnkgdHJpcCwgYW55IHRyYW5zcG9ydCIsIuKPsyIsIuqzte2Vreq5jOyngCDslrzrp4jrgpgg6rG466Ck7JqUPyIsIkhvdyBsb25nIGRvZXMgaXQgdGFrZSB0byB0aGUgYWlycG9ydD8iXSwKICBbIuyEuOybjCDso7zshLjsmpQiLCJzZS13byBqdS1zZS15byIsInBsZWFzZSBzdG9wICh0aGUgY2FyKSIsIkluIGEgdGF4aTog7Jes6riw7IScIOyEuOybjCDso7zshLjsmpQgPSBzdG9wIGhlcmUiLCLwn5uRIiwi7KCAIO2OuOydmOygkCDslZ7sl5DshJwg7IS47JuMIOyjvOyEuOyalC4iLCJQbGVhc2Ugc3RvcCBpbiBmcm9udCBvZiB0aGF0IGNvbnZlbmllbmNlIHN0b3JlLiJdXSwKIGdyYW1tYXI6WwogIFsiTuydhC/rpbwg7YOA7IS47JqUIiwidGFrZSB0aGUgTiIsIkdldHRpbmcgdG9sZCB3aGljaCBidXMvdHJhaW4gdG8gY2F0Y2giLCLtg4Dri6QgPSByaWRlLiDsnYQgYWZ0ZXIgY29uc29uYW50LCDrpbwgYWZ0ZXIgdm93ZWwuIiwiMjcz67KIIOuyhOyKpOulvCDtg4DshLjsmpQuIiwiVGFrZSBidXMgbnVtYmVyIDI3My4iLCIy7Zi47ISg7J2EIO2DgOyEuOyalC4iLCJUYWtlIGxpbmUgMi4iXSwKICBbIn7sl5DshJwg64K066as7IS47JqUIC8g6rCI7JWE7YOA7IS47JqUIiwiZ2V0IG9mZiAvIHRyYW5zZmVyIGF0IH4iLCJUaGUgdHdvIHZlcmJzIHRoYXQgY29tcGxldGUgYW55IHJvdXRlIiwi7JeQ7IScIG1hcmtzIHRoZSBzdGF0aW9uIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4iLCLqsJXrgqjsl63sl5DshJwg64K066as7IS47JqULiIsIkdldCBvZmYgYXQgR2FuZ25hbSBTdGF0aW9uLiIsIuyLnOyyreyXreyXkOyEnCAz7Zi47ISg7Jy866GcIOqwiOyVhO2DgOyEuOyalC4iLCJUcmFuc2ZlciB0byBsaW5lIDMgYXQgQ2l0eSBIYWxsLiJdLAogIFsiTuq5jOyngCDslrzrp4jrgpgg6rG466Ck7JqUPyIsImhvdyBsb25nIHRvIE4/IiwiUGxhbm5pbmcgeW91ciB0aW1lIGxpa2UgYSBsb2NhbCIsIuq5jOyngCA9IHVwIHRvL3VudGlsLiBBbnN3ZXIgY29tZXMgYXMgfuu2hC/si5zqsIQg6rG466Ck7JqULiIsIuqzte2Vreq5jOyngCDslrzrp4jrgpgg6rG466Ck7JqUPyIsIkhvdyBsb25nIGRvZXMgaXQgdGFrZSB0byB0aGUgYWlycG9ydD8iLCLqsbjslrTshJwgMTDrtoQg6rG466Ck7JqULiIsIkl0IHRha2VzIDEwIG1pbnV0ZXMgb24gZm9vdC4iXV19LAoKe246Niwga3I6IuyHvO2VkSIsIGVuOiJTaG9wcGluZyAmIFByaWNlcyIsIHZpOiJTaG9wIHNtYXJ0IiwgZW1vamk6IvCfm43vuI8iLCBib3NzOiLwn6aKIiwgYm9zc05hbWU6Ik92ZXJwcmljZSBGb3giLAogd29yZHM6WwogIFsi7Ja866eIIiwiZW9sLW1hIiwiaG93IG11Y2giLCLsnbTqsbAg7Ja866eI7JiI7JqUPyDigJQgeW91ciBtb3N0LXVzZWQgc2hvcHBpbmcgc2VudGVuY2UiLCLwn5KwIiwi7J206rGwIOyWvOuniOyYiOyalD8iLCJIb3cgbXVjaCBpcyB0aGlzPyJdLAogIFsi67mE7Iu464ukIiwiYmktc3NhLWRhIiwiZXhwZW5zaXZlIiwi64SI66y0IOu5hOyLuOyalCA9IHRvbyBleHBlbnNpdmUgKGEgaGFnZ2xpbmcgb3BlbmVyKSIsIvCfkrgiLCLsooAg67mE7Iu464Sk7JqULiIsIlRoYXQgaXMgYSBiaXQgZXhwZW5zaXZlLiJdLAogIFsi7Iu464ukIiwic3NhLWRhIiwiY2hlYXAiLCLsi7jqs6Ag7KKL7JWE7JqUID0gY2hlYXAgYW5kIGdvb2Qg4oCUIHRoZSBkcmVhbSIsIvCfj7fvuI8iLCLsnbTqsowg642UIOyLuOyalC4iLCJUaGlzIG9uZSBpcyBjaGVhcGVyLiJdLAogIFsi6rmO7JWEIOyjvOyEuOyalCIsImtrYWtrLWEganUtc2UteW8iLCJwbGVhc2UgZ2l2ZSBhIGRpc2NvdW50IiwiV29ya3MgYXQgbWFya2V0czsgbm90IGF0IGRlcGFydG1lbnQgc3RvcmVzIiwi4pyC77iPIiwi7KGw6riI66eMIOq5juyVhCDso7zshLjsmpQuIiwiSnVzdCBhIHNtYWxsIGRpc2NvdW50LCBwbGVhc2UuIl0sCiAgWyLsnoXslrQg67O064ukIiwiaWItZW8gYm8tZGEiLCJ0byB0cnkgb24iLCLsnoXslrQg67SQ64+EIOuPvOyalD8gPSBtYXkgSSB0cnkgaXQgb24/Iiwi8J+RlSIsIuydtOqxsCDsnoXslrQg67SQ64+EIOuPvOyalD8iLCJNYXkgSSB0cnkgdGhpcyBvbj8iXSwKICBbIuyCrOydtOymiCIsInNhLWktamV1Iiwic2l6ZSIsIuuNlCDtgbAv7J6R7J2AIOyCrOydtOymiCA9IGJpZ2dlci9zbWFsbGVyIHNpemUiLCLwn5OPIiwi642UIO2BsCDsgqzsnbTspogg7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIGEgYmlnZ2VyIHNpemU/Il0sCiAgWyLsg4nquZQiLCJzYWVrLWtrYWwiLCJjb2xvciIsIuuLpOuluCDsg4nquZQgPSBvdGhlciBjb2xvcnMiLCLwn46oIiwi64uk66W4IOyDieq5lOuPhCDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgb3RoZXIgY29sb3JzPyJdLAogIFsi7J206rGwIiwiaS1nZW8iLCJ0aGlzIG9uZSIsIuydtOqxsC/qt7jqsbAv7KCA6rGwID0gdGhpcy90aGF0L3RoYXQgb3ZlciB0aGVyZSIsIvCfkYkiLCLsnbTqsbAg7KO87IS47JqULiIsIkkgd2lsbCB0YWtlIHRoaXMgb25lLiJdLAogIFsi7ZWY64KYIOuNlCIsImhhLW5hIGRlbyIsIm9uZSBtb3JlIiwiQnV5IHR3bywgaGFnZ2xlIGhhcmRlciIsIuKelSIsIu2VmOuCmCDrjZQg7KO87IS47JqULiIsIk9uZSBtb3JlLCBwbGVhc2UuIl0sCiAgWyLrtIntiKwiLCJib25nLXR1IiwiYmFnIiwiUGxhc3RpYyBiYWdzIHVzdWFsbHkgY29zdCBleHRyYSDigJQgYnJpbmcgeW91ciBvd24iLCLwn5uN77iPIiwi67SJ7YisIO2VhOyalCDsl4bslrTsmpQuIiwiSSBkbyBub3QgbmVlZCBhIGJhZy4iXSwKICBbIu2ZmOu2iCIsImh3YW4tYnVsIiwicmVmdW5kIiwi7ZmY67aIIOuPvOyalD8gPSBjYW4gSSBnZXQgYSByZWZ1bmQ/IEtlZXAgdGhlIHJlY2VpcHQiLCLwn5KxIiwi7J206rGwIO2ZmOu2iCDrj7zsmpQ/IiwiQ2FuIEkgZ2V0IGEgcmVmdW5kIG9uIHRoaXM/Il0sCiAgWyLshKDrrLwiLCJzZW9uLW11bCIsImdpZnQiLCLshKDrrLwg7Y+s7J6lID0gZ2lmdCB3cmFwcGluZyAob2Z0ZW4gZnJlZSEpIiwi8J+OgSIsIuyEoOusvCDtj6zsnqUg64+87JqUPyIsIkNhbiB5b3UgZ2lmdC13cmFwIGl0PyJdXSwKIGdyYW1tYXI6WwogIFsifuyVhC/slrQg67SQ64+EIOuPvOyalD8iLCJtYXkgSSB0cnkgfj8iLCJUcnlpbmcgY2xvdGhlcywgc2FtcGxlcywgdGVzdGVycyIsIuuztOuLpCBhZGRzICd0cnknOyDrj4Qg64+87JqUIGFza3MgcGVybWlzc2lvbi4iLCLsnoXslrQg67SQ64+EIOuPvOyalD8iLCJNYXkgSSB0cnkgaXQgb24/Iiwi66i57Ja0IOu0kOuPhCDrj7zsmpQ/IiwiTWF5IEkgdGFzdGUgaXQ/Il0sCiAgWyLrhIjrrLQgfu2VtOyalCIsInRvbyB+IC8gc28gfiIsIlJlYWN0aW5nIHRvIHByaWNlcyBhbmQgcXVhbGl0eSIsIuuEiOustCBhbXBsaWZpZXMgYW55dGhpbmc6IOuEiOustCDsmIjru5DsmpQsIOuEiOustCDruYTsi7jsmpQuIiwi64SI66y0IOu5hOyLuOyalCEiLCJJdCBpcyB0b28gZXhwZW5zaXZlISIsIuydtOqxsCDrhIjrrLQg7JiI67uQ7JqULiIsIlRoaXMgaXMgc28gcHJldHR5LiJdLAogIFsiTiDrj7zsmpQ/IiwiZG9lcyBOIHdvcmsgLyBpcyBOIHBvc3NpYmxlPyIsIlF1aWNrIHllcy9ubyBjaGVja3M6IHJlZnVuZD8gY2FyZD8gZGVsaXZlcnk/IiwiVGhlIHNob3J0ZXN0IHVzZWZ1bCBxdWVzdGlvbiBpbiBzaG9wcGluZy4iLCLsubTrk5wg64+87JqUPyIsIkRvIHlvdSB0YWtlIGNhcmRzPyIsIuq1kO2ZmCDrj7zsmpQ/IiwiQ2FuIEkgZXhjaGFuZ2UgaXQ/Il1dfSwKCntuOjcsIGtyOiLsiqTrqrDthqDtgawiLCBlbjoiU21hbGwgVGFsayIsIHZpOiJNYWtlIGEgbmV3IGZyaWVuZCIsIGVtb2ppOiLwn5KsIiwgYm9zczoi8J+mgSIsIGJvc3NOYW1lOiJTbWFsbC1UYWxrIFNwaGlueCIsCiB3b3JkczpbCiAgWyLst6jrr7giLCJjaHdpLW1pIiwiaG9iYnkiLCLst6jrr7jqsIAg662Q7JiI7JqUPyDigJQgdGhlIGZyaWVuZGxpZXN0IGljZWJyZWFrZXIiLCLwn46oIiwi7Leo66+46rCAIOutkOyYiOyalD8iLCJXaGF0IGlzIHlvdXIgaG9iYnk/Il0sCiAgWyLrgqDslKgiLCJuYWwtc3NpIiwid2VhdGhlciIsIlRoZSB1bml2ZXJzYWwgc21hbGwtdGFsayBzdGFydGVyLCBpbiBLb3JlYSB0b28iLCLimIDvuI8iLCLsmKTripgg64Kg7JSoIOynhOynnCDsoovrhKTsmpQhIiwiVGhlIHdlYXRoZXIgaXMgcmVhbGx5IG5pY2UgdG9kYXkhIl0sCiAgWyLso7zrp5AiLCJqdS1tYWwiLCJ3ZWVrZW5kIiwi7KO866eQ7JeQIOutkCDtlbTsmpQ/ID0gaW5zdGFudCBjb252ZXJzYXRpb24iLCLwn5OGIiwi7KO866eQ7JeQIOuztO2GtSDrrZAg7ZW07JqUPyIsIldoYXQgZG8geW91IHVzdWFsbHkgZG8gb24gd2Vla2VuZHM/Il0sCiAgWyLsoovslYTtlZjri6QiLCJqby1hLWhhLWRhIiwidG8gbGlrZSIsIk7snYQv66W8IOyii+yVhO2VtOyalCDigJQgc2hhcmUgd2hhdCB5b3UgbG92ZSIsIuKdpO+4jyIsIuyggOuKlCDtlZzqta0g7J2M7Iud7J2EIOyii+yVhO2VtOyalC4iLCJJIGxpa2UgS29yZWFuIGZvb2QuIl0sCiAgWyLsmrTrj5kiLCJ1bi1kb25nIiwiZXhlcmNpc2UgLyBzcG9ydHMiLCJBbHNvIG1lYW5zIHdvcmtpbmcgb3V0IGF0IHRoZSBneW0iLCLwn4+DIiwi7Jq064+Z7J2EIOyekOyjvCDtlbTsmpQ/IiwiRG8geW91IGV4ZXJjaXNlIG9mdGVuPyJdLAogIFsi7J2M7JWFIiwiZXVtLWFrIiwibXVzaWMiLCLrrLTsiqgg7J2M7JWFID0gd2hhdCBraW5kIG9mIG11c2ljIiwi8J+OtSIsIuustOyKqCDsnYzslYXsnYQg65Ok7Ja07JqUPyIsIldoYXQgbXVzaWMgZG8geW91IGxpc3RlbiB0bz8iXSwKICBbIuyXrO2WiSIsInllby1oYWVuZyIsInRyYXZlbCIsIkV2ZXJ5b25lIGhhcyBhIHRyYXZlbCBzdG9yeSDigJQgYXNrIGZvciBpdCIsIuKciO+4jyIsIuyXrO2WieydhCDsoJXrp5Ag7KKL7JWE7ZW07JqULiIsIkkgcmVhbGx5IGxvdmUgdHJhdmVsaW5nLiJdLAogIFsi7JqU7KaYIiwieW8tamV1bSIsInRoZXNlIGRheXMiLCLsmpTsppgg7Ja065WM7JqUPyA9IGhvdyBhcmUgdGhpbmdzIGxhdGVseT8iLCLwn5WQIiwi7JqU7KaYIOyWtOuWu+qyjCDsp4DrgrTsmpQ/IiwiSG93IGhhdmUgeW91IGJlZW4gdGhlc2UgZGF5cz8iXSwKICBbIuyerOuvuOyeiOuLpCIsImphZS1taS1pdC1kYSIsImZ1biAvIGludGVyZXN0aW5nIiwi7J6s66+47J6I7Ja07JqUISA9IGl0J3MgZnVuISDsnqzrr7jsl4bslrTsmpQgPSBib3JpbmciLCLwn5iEIiwi6re46rGwIOynhOynnCDsnqzrr7jsnojslrTsmpQhIiwiVGhhdCBpcyByZWFsbHkgZnVuISJdLAogIFsi6rCZ7J20IiwiZ2EtY2hpIiwidG9nZXRoZXIiLCLqsJnsnbQg6rCA7JqUISA9IGxldCdzIGdvIHRvZ2V0aGVyIChwcm9ub3VuY2VkIOqwgOy5mCkiLCLwn6SdIiwi64uk7J2M7JeQIOqwmeydtCDqsIDsmpQhIiwiTGV0IHVzIGdvIHRvZ2V0aGVyIG5leHQgdGltZSEiXSwKICBbIuynhOynnCIsImppbi1qamEiLCJyZWFsbHkiLCLsp4Tsp5zsmpQ/ID0gcmVhbGx5PyEg4oCUIHlvdXIgIzEgbGlzdGVuaW5nIHJlYWN0aW9uIiwi8J+YsiIsIuynhOynnOyalD8g64yA64uo7ZW07JqUISIsIlJlYWxseT8gVGhhdCBpcyBhbWF6aW5nISJdLAogIFsi64yA67CVIiwiZGFlLWJhayIsImF3ZXNvbWUgLyBubyB3YXkiLCJDYXN1YWwgc2xhbmcgZm9yIGFueXRoaW5nIGltcHJlc3NpdmUiLCLwn6SpIiwi64yA67CVISDstpXtlZjtlbTsmpQhIiwiTm8gd2F5ISBDb25ncmF0dWxhdGlvbnMhIl1dLAogZ3JhbW1hcjpbCiAgWyJ+64qUIOqyg+ydhCDsoovslYTtlbTsmpQiLCJJIGxpa2UgfmluZyIsIlRhbGtpbmcgYWJvdXQgaG9iYmllcyBuYXR1cmFsbHkiLCJWZXJiICsg64qUIOqygyB0dXJucyBhbiBhY3Rpb24gaW50byBhIHRoaW5nIHlvdSBjYW4gbGlrZS4iLCLsoIDripQg7JqU66as7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQuIiwiSSBsaWtlIGNvb2tpbmcuIiwi7JiB7ZmUIOuztOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqUPyIsIkRvIHlvdSBsaWtlIHdhdGNoaW5nIG1vdmllcz8iXSwKICBbIuqwmeydtCB+KOycvCnjhLnrnpjsmpQ/Iiwic2hhbGwgd2UgfiB0b2dldGhlcj8iLCJUdXJuaW5nIHNtYWxsIHRhbGsgaW50byBhY3R1YWwgcGxhbnMiLCJGcmllbmRseSBpbnZpdGF0aW9uOyDrnpjsmpQga2VlcHMgaXQgY2FzdWFsIGFuZCBsaWdodC4iLCLqsJnsnbQg7Luk7ZS8IOuniOyLpOuemOyalD8iLCJTaGFsbCB3ZSBnZXQgY29mZmVlIHRvZ2V0aGVyPyIsIuyjvOunkOyXkCDqsJnsnbQg65Ox7IKwIOqwiOuemOyalD8iLCJXYW50IHRvIGdvIGhpa2luZyB0b2dldGhlciB0aGlzIHdlZWtlbmQ/Il0sCiAgWyJO7J2AL+uKlCDslrTrlYzsmpQ/IiwiaG93IGFib3V0IE4/IiwiQm91bmNpbmcgdGhlIHF1ZXN0aW9uIGJhY2sg4oCUIGNvbnZlcnNhdGlvbnMgYXJlIHR3by13YXkiLCJBbHNvIGdyZWF0IGZvciBzdWdnZXN0aW9uczog6riI7JqU7J287J2AIOyWtOuVjOyalD8iLCLsoIDripQg7J6YIOyngOuCtOyalC4g66+87IiYIOyUqOuKlCDslrTrlYzsmpQ/IiwiSSBhbSBkb2luZyB3ZWxsLiBIb3cgYWJvdXQgeW91LCBNaW5zdT8iLCLsnbQg7Lm07Y6Y64qUIOyWtOuVjOyalD8iLCJIb3cgYWJvdXQgdGhpcyBjYWbDqT8iXV19LAoKe246OCwga3I6IuyghO2ZlOyZgCDslb3sho0iLCBlbjoiQ2FsbHMgJiBQbGFucyIsIHZpOiJOZXZlciBtaXNzIGEgbWVldHVwIiwgZW1vamk6IvCfk7EiLCBib3NzOiLwn5G5IiwgYm9zc05hbWU6Ik5vLVNob3cgR3JlbWxpbiIsCiB3b3JkczpbCiAgWyLsl6zrs7TshLjsmpQiLCJ5ZW8tYm8tc2UteW8iLCJoZWxsbyAob24gdGhlIHBob25lKSIsIk9ubHkgZm9yIGFuc3dlcmluZyB0aGUgcGhvbmUg4oCUIG5ldmVyIGluIHBlcnNvbiIsIuKYju+4jyIsIuyXrOuztOyEuOyalCwg64iE6rWs7IS47JqUPyIsIkhlbGxvLCB3aG8gaXMgdGhpcz8iXSwKICBbIuyghO2ZlO2VmOuLpCIsImplb24taHdhLWhhLWRhIiwidG8gY2FsbCIsIuydtOuUsOqwgCDsoITtmZTtlaDqsozsmpQgPSBJIHdpbGwgY2FsbCB5b3UgbGF0ZXIiLCLwn5OeIiwi64K07J28IOyghO2ZlO2VoOqyjOyalC4iLCJJIHdpbGwgY2FsbCB5b3UgdG9tb3Jyb3cuIl0sCiAgWyLrrLjsnpAiLCJtdW4tamEiLCJ0ZXh0IG1lc3NhZ2UiLCLrrLjsnpAg67O064K86rKM7JqUID0gSSB3aWxsIHRleHQgeW91Iiwi8J+TqSIsIuusuOyekOuhnCDrs7TrgrQg7KO87IS47JqULiIsIlBsZWFzZSBzZW5kIGl0IGJ5IHRleHQuIl0sCiAgWyLslb3sho0iLCJ5YWstc29rIiwicGxhbnMgLyBhcHBvaW50bWVudCIsIuyVveyGjSDsnojslrTsmpQgPSBJIGhhdmUgcGxhbnMgKHRoZSBwb2xpdGUgZXhjdXNlISkiLCLwn5OFIiwi7Jik64qYIOyggOuFgeyXkCDslb3sho3snbQg7J6I7Ja07JqULiIsIkkgaGF2ZSBwbGFucyB0aGlzIGV2ZW5pbmcuIl0sCiAgWyLsi5zqsIQg7J6I7Ja07JqUPyIsInNpLWdhbiBpc3MtZW8teW8iLCJkbyB5b3UgaGF2ZSB0aW1lPyIsIlRoZSBnZW50bGUgd2F5IHRvIHN0YXJ0IGFuIGludml0YXRpb24iLCLij7AiLCLrgrTsnbwg7Iuc6rCEIOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSB0aW1lIHRvbW9ycm93PyJdLAogIFsi64qm64ukIiwibmV1dC1kYSIsInRvIGJlIGxhdGUiLCLsobDquIgg64qm7Ja07JqUID0gcnVubmluZyBhIGxpdHRsZSBsYXRlIOKAlCBzZW5kIGl0IGVhcmx5ISIsIuKPsyIsIuuvuOyViO2VtOyalCwgMTDrtoQg64qm7Ja07JqULiIsIlNvcnJ5LCBJIGFtIDEwIG1pbnV0ZXMgbGF0ZS4iXSwKICBbIuuPhOywqe2VmOuLpCIsImRvLWNoYS1rYS1kYSIsInRvIGFycml2ZSIsIuqxsOydmCDrj4TssKntlojslrTsmpQgPSBhbG1vc3QgdGhlcmUgKHdlIGFsbCBzZW5kIHRoaXMpIiwi8J+TjSIsIuyngOq4iCDqsbDsnZgg64+E7LCp7ZaI7Ja07JqULiIsIkkgaGF2ZSBhbG1vc3QgYXJyaXZlZC4iXSwKICBbIuq4sOuLpOumrOuLpCIsImdpLWRhLXJpLWRhIiwidG8gd2FpdCIsIuyynOyynO2eiCDsmKTshLjsmpQsIOq4sOuLpOumtOqyjOyalCA9IHRha2UgeW91ciB0aW1lLCBJIHdpbGwgd2FpdCIsIvCfp40iLCLsubTtjpjsl5DshJwg6riw64uk66a06rKM7JqULiIsIkkgd2lsbCB3YWl0IGF0IHRoZSBjYWbDqS4iXSwKICBbIuuwlOq+uOuLpCIsImJhLWtrdS1kYSIsInRvIGNoYW5nZSIsIuyLnOqwhOydhCDrsJTqvrjri6QgPSBjaGFuZ2UgdGhlIHRpbWUiLCLwn5SEIiwi7JW97IaNIOyLnOqwhOydhCDrsJTqv4Ag7IiYIOyeiOyWtOyalD8iLCJDYW4gd2UgY2hhbmdlIHRoZSBtZWV0aW5nIHRpbWU/Il0sCiAgWyLst6jshoztlZjri6QiLCJjaHdpLXNvLWhhLWRhIiwidG8gY2FuY2VsIiwiQmV0dGVyIHRvIHJlc2NoZWR1bGUgdGhhbiBnaG9zdCEiLCLwn5qrIiwi66+47JWI7ZWY7KeA66eMIOy3qOyGjO2VtOyVvCDtlbTsmpQuIiwiU29ycnksIGJ1dCBJIGhhdmUgdG8gY2FuY2VsLiJdLAogIFsi6rSc7LCu7JWE7JqUIiwiZ3dhZW4tY2hhbi1hLXlvIiwiaXQgaXMgb2theSIsIkFsc286IG5vIHRoYW5rcywgSSdtIGZpbmUsIG5vIHByb2JsZW0g4oCUIHN1cGVyIHZlcnNhdGlsZSIsIvCfkYwiLCLqtJzssK7slYTsmpQsIOyynOyynO2eiCDsmKTshLjsmpQuIiwiSXQgaXMgZmluZSwgdGFrZSB5b3VyIHRpbWUuIl0sCiAgWyLsnbTrlLDqsIAiLCJpLXR0YS1nYSIsImxhdGVyICh0b2RheSkiLCLsnbTrlLDqsIAg67SQ7JqUID0gc2VlIHlvdSBpbiBhIGJpdCIsIvCflJwiLCLsnbTrlLDqsIAg7Jew65297ZWg6rKM7JqULiIsIkkgd2lsbCBjb250YWN0IHlvdSBsYXRlci4iXV0sCiBncmFtbWFyOlsKICBbIn4o7Jy8KeOEueqyjOyalCIsIkkgd2lsbCAocHJvbWlzZSkiLCJDb25maXJtaW5nIHBsYW5zIGFuZCBwcm9taXNlcyIsIlNwZWFrZXIncyBmcmllbmRseSBjb21taXRtZW50OiDqsIjqsozsmpQsIOq4sOuLpOumtOqyjOyalCwg7KCE7ZmU7ZWg6rKM7JqULiIsIjbsi5zquYzsp4Ag6rCI6rKM7JqULiIsIkkgd2lsbCBiZSB0aGVyZSBieSA2LiIsIuuPhOywqe2VmOuptCDrrLjsnpDtlaDqsozsmpQuIiwiSSB3aWxsIHRleHQgeW91IHdoZW4gSSBhcnJpdmUuIl0sCiAgWyJ+6rOgIOyeiOyWtOyalCIsIkkgYW0gfmluZyByaWdodCBub3ciLCJMaXZlIHVwZGF0ZXMgd2hlbiBtZWV0aW5nIHVwIiwiUHJvZ3Jlc3NpdmU6IHdoYXQgaXMgaGFwcGVuaW5nIGF0IHRoaXMgbW9tZW50LiIsIuyngOq4iCDqsIDqs6Ag7J6I7Ja07JqUISIsIkkgYW0gb24gbXkgd2F5IG5vdyEiLCLsubTtjpjsl5DshJwg6riw64uk66as6rOgIOyeiOyWtOyalC4iLCJJIGFtIHdhaXRpbmcgYXQgdGhlIGNhZsOpLiJdLAogIFsifuq4sOuhnCDtlbTsmpQiLCJsZXQgdXMgZGVjaWRlIHRvIH4iLCJMb2NraW5nIGluIHRoZSBwbGFuIiwiRml4ZXMgdGhlIGRlY2lzaW9uOiB0aW1lLCBwbGFjZSwgYWN0aXZpdHkuIiwi7Yag7JqU7J287JeQIOunjOuCmOq4sOuhnCDtlbTsmpQuIiwiTGV0IHVzIG1lZXQgb24gU2F0dXJkYXkuIiwiN+yLnOyXkCDrs7TquLDroZwg7ZW07JqULiIsIkxldCB1cyBwbGFuIHRvIG1lZXQgYXQgNy4iXV19LAoKe246OSwga3I6IuqwkOygleqzvCDrpqzslaHshZgiLCBlbjoiUmVhY3Rpb25zICYgRmVlbGluZ3MiLCB2aToiU291bmQgaHVtYW4sIG5vdCB0ZXh0Ym9vayIsIGVtb2ppOiLwn46tIiwgYm9zczoi4piB77iPIiwgYm9zc05hbWU6Ikdsb29tIENsb3VkIiwKIHdvcmRzOlsKICBbIuq4sOu2hCIsImdpLWJ1biIsIm1vb2QgLyBmZWVsaW5nIiwi6riw67aE7J20IOyii+yVhOyalC/rgpjruaDsmpQgPSBnb29kL2JhZCBtb29kIiwi8J+ZgiIsIuyYpOuKmCDquLDrtoTsnbQg7KCV66eQIOyii+yVhOyalC4iLCJJIGFtIGluIGEgcmVhbGx5IGdvb2QgbW9vZCB0b2RheS4iXSwKICBbIu2Wieuzte2VmOuLpCIsImhhZW5nLWJvLWthLWRhIiwidG8gYmUgaGFwcHkiLCJUaGUgYmlnIHdvcmQg4oCUIGZvciByZWFsIGhhcHBpbmVzcyIsIvCfmIoiLCLsmpTsppgg7KCV66eQIO2Wieuzte2VtOyalC4iLCJJIGFtIHJlYWxseSBoYXBweSB0aGVzZSBkYXlzLiJdLAogIFsi7ZS86rOk7ZWY64ukIiwicGktZ29uLWhhLWRhIiwidG8gYmUgdGlyZWQiLCJLb3JlYSdzIG1vc3QtdXNlZCBmZWVsaW5nIHdvcmQsIGhvbmVzdGx5Iiwi8J+lsSIsIuyYpOuKmCDrhIjrrLQg7ZS86rOk7ZW07JqULiIsIkkgYW0gc28gdGlyZWQgdG9kYXkuIl0sCiAgWyLrsLDqs6DtlITri6QiLCJiYWUtZ28tcGV1LWRhIiwidG8gYmUgaHVuZ3J5Iiwi67Cw6rOg7YyM7JqUISDigJQgbGVhZHMgbmF0dXJhbGx5IHRvIOutkCDrqLnsnYTquYzsmpQ/Iiwi8J+NmiIsIuyVhCwg67Cw6rOg7YyM7JqULiDrsKUg66i57Jy865+sIOqwgOyalCEiLCJBaCwgSSBhbSBodW5ncnkuIExldCB1cyBnbyBlYXQhIl0sCiAgWyLsi6zsi6ztlZjri6QiLCJzaW0tc2ltLWhhLWRhIiwidG8gYmUgYm9yZWQiLCLsi6zsi6ztlbTsmpQg4oaSIHBlcmZlY3QgZXhjdXNlIHRvIGludml0ZSBzb21lb25lIG91dCIsIvCfmJAiLCLso7zrp5Dsl5Ag7Ius7Ius7ZaI7Ja07JqULiIsIkkgd2FzIGJvcmVkIG9uIHRoZSB3ZWVrZW5kLiJdLAogIFsi6rGx7KCV7ZWY64ukIiwiZ2Vvay1qZW9uZy1oYS1kYSIsInRvIHdvcnJ5Iiwi6rGx7KCV7ZWY7KeAIOuniOyEuOyalCA9IGRvbid0IHdvcnJ5IOKAlCBpbnN0YW50IGNvbWZvcnQiLCLwn5ifIiwi64SI66y0IOqxseygle2VmOyngCDrp4jshLjsmpQuIiwiRG8gbm90IHdvcnJ5IHRvbyBtdWNoLiJdLAogIFsi7ZmU7J207YyFIiwiaHdhLWktdGluZyIsInlvdSBjYW4gZG8gaXQhIiwiS29yZWEncyBmYXZvcml0ZSBjaGVlciDigJQgdXNlIGl0IGdlbmVyb3VzbHkiLCLwn5KqIiwi7Iuc7ZeYIOyemCDrtJDsmpQhIO2ZlOydtO2MhSEiLCJHb29kIGx1Y2sgb24gdGhlIGV4YW0hIEZpZ2h0aW5nISJdLAogIFsi7LaV7ZWY7ZW07JqUIiwiY2h1ay1hLWhhZS15byIsImNvbmdyYXR1bGF0aW9ucyIsIkZvciBiaXJ0aGRheXMsIGpvYnMsIHdpbnMg4oCUIGFkZCDsoJXrp5AgZm9yIGVtcGhhc2lzIiwi8J+OiSIsIu2VqeqyqSDstpXtlZjtlbTsmpQhIiwiQ29uZ3JhdHVsYXRpb25zIG9uIHBhc3NpbmchIl0sCiAgWyLsnpjtlojslrTsmpQiLCJqYWwtaGFlc3MtZW8teW8iLCJ3ZWxsIGRvbmUiLCJQcmFpc2UgdGhhdCB3b3JrcyBmb3IgZXZlcnlvbmUiLCLwn5GPIiwi7JmALCDsoJXrp5Ag7J6Y7ZaI7Ja07JqUISIsIldvdywgcmVhbGx5IHdlbGwgZG9uZSEiXSwKICBbIuyVhOyJveuLpCIsImEtc3dpcC1kYSIsInRvIGJlIGEgcGl0eSIsIuyVhOyJrOybjOyalCA9IHdoYXQgYSBzaGFtZSAvIEkgd2lzaCBpdCB3b3JrZWQgb3V0Iiwi8J+YlCIsIuuquyDqsIDshJwg64SI66y0IOyVhOyJrOybjOyalC4iLCJJdCBpcyBzdWNoIGEgcGl0eSBJIGNhbm5vdCBnby4iXSwKICBbIu2emOuTpOuLpCIsImhpbS1kZXVsLWRhIiwidG8gYmUgaGFyZCAvIHRvdWdoIiwi7Z6Y65Ok7Ja07JqUID0gSSdtIGhhdmluZyBhIGhhcmQgdGltZSAocGh5c2ljYWwgb3IgZW1vdGlvbmFsKSIsIvCfmK7igI3wn5KoIiwi7JqU7KaYIOydvOydtCDsooAg7Z6Y65Ok7Ja07JqULiIsIldvcmsgaGFzIGJlZW4gYSBiaXQgdG91Z2ggbGF0ZWx5LiJdLAogIFsi6rSc7LCu7JWE7JqUPyIsImd3YWVuLWNoYW4tYS15byIsImFyZSB5b3Ugb2theT8iLCJDaGVja2luZyBvbiBzb21lb25lIOKAlCB0aGUgY2FyaW5nIHF1ZXN0aW9uIiwi8J+klyIsIuustOyKqCDsnbwg7J6I7Ja07JqUPyDqtJzssK7slYTsmpQ/IiwiSXMgc29tZXRoaW5nIHdyb25nPyBBcmUgeW91IG9rYXk/Il1dLAogZ3JhbW1hcjpbCiAgWyJ+7KeAIOuniOyEuOyalCIsInBsZWFzZSBkbyBub3QgfiIsIkNvbWZvcnRpbmcgYW5kIGdlbnRsZSB3YXJuaW5ncyIsIuqxseygle2VmOyngCDrp4jshLjsmpQsIOuKpuyngCDrp4jshLjsmpQg4oCUIHZlcmIgKyDsp4Ag66eI7IS47JqULiIsIuqxseygle2VmOyngCDrp4jshLjsmpQuIOuLpCDsnpgg65CgIOqxsOyYiOyalC4iLCJEbyBub3Qgd29ycnkuIEV2ZXJ5dGhpbmcgd2lsbCBiZSBmaW5lLiIsIu2PrOq4sO2VmOyngCDrp4jshLjsmpQhIiwiRG8gbm90IGdpdmUgdXAhIl0sCiAgWyJ+7JWEL+yWtCDrs7Tsl6zsmpQiLCJ5b3UgbG9vayB+IiwiTm90aWNpbmcgaG93IHNvbWVvbmUgc2VlbXMiLCJBZGplY3RpdmUgKyDrs7Tsl6zsmpQ6IO2UvOqzpO2VtCDrs7Tsl6zsmpQgPSB5b3UgbG9vayB0aXJlZC4iLCLsmKTripgg7ZS86rOk7ZW0IOuztOyXrOyalC4iLCJZb3UgbG9vayB0aXJlZCB0b2RheS4iLCLquLDrtoTsnbQg7KKL7JWEIOuztOyXrOyalCEiLCJZb3UgbG9vayBoYXBweSEiXSwKICBbIuuEiOustCB+7JWEL+yWtOyEnCIsImJlY2F1c2UgKGl0IGlzKSBzbyB+IiwiRXhwbGFpbmluZyB5b3VyIGZlZWxpbmdzIiwiUmVhc29uICsgZmVlbGluZzogdG9vIHRpcmVkIOKGkiBnb2luZyBob21lIGVhcmx5LiIsIuuEiOustCDtlLzqs6TtlbTshJwg7J287LCNIOyemCDqsbDsmIjsmpQuIiwiSSBhbSBzbyB0aXJlZCB0aGF0IEkgd2lsbCBzbGVlcCBlYXJseS4iLCLsmIHtmZTqsIAg64SI66y0IOyKrO2NvOyEnCDsmrjsl4jslrTsmpQuIiwiVGhlIG1vdmllIHdhcyBzbyBzYWQgdGhhdCBJIGNyaWVkLiJdXX0sCgp7bjoxMCwga3I6IuyVhO2UjCDrlYwiLCBlbjoiRmVlbGluZyBTaWNrIiwgdmk6IkdldCBoZWxwIGZhc3QiLCBlbW9qaToi8J+kkiIsIGJvc3M6IvCfpqAiLCBib3NzTmFtZToiU25pZmZsZSBTbGltZSIsCiB3b3JkczpbCiAgWyLslYTtlITri6QiLCJhLXBldS1kYSIsInRvIGh1cnQgLyBiZSBzaWNrIiwiQm9keSBwYXJ0ICsg7J20L+qwgCDslYTtjIzsmpQgY292ZXJzIGFsbW9zdCBldmVyeXRoaW5nIiwi8J+klSIsIuuouOumrOqwgCDslYTtjIzsmpQuIiwiTXkgaGVhZCBodXJ0cy4iXSwKICBbIuuouOumrCIsIm1lby1yaSIsImhlYWQiLCJBbHNvIG1lYW5zIGhhaXIhIiwi8J+noCIsIuyWtOygnOu2gO2EsCDrqLjrpqzqsIAg7JWE7YyM7JqULiIsIk15IGhlYWQgaGFzIGh1cnQgc2luY2UgeWVzdGVyZGF5LiJdLAogIFsi67CwIiwiYmFlIiwic3RvbWFjaCIsIuuwsOqwgCDslYTtjIzsmpQg4oCUIHRoZSBjbGFzc2ljIiwi8J+rgyIsIuuwsOqwgCDrhIjrrLQg7JWE7YyM7JqULiIsIk15IHN0b21hY2ggcmVhbGx5IGh1cnRzLiJdLAogIFsi6rCQ6riwIiwiZ2FtLWdpIiwiYSBjb2xkIiwi6rCQ6riw7JeQIOqxuOuguOyWtOyalCA9IEkgY2F1Z2h0IGEgY29sZCIsIvCfpKciLCLqsJDquLDsl5Ag6rG466awIOqygyDqsJnslYTsmpQuIiwiSSB0aGluayBJIGNhdWdodCBhIGNvbGQuIl0sCiAgWyLsl7QiLCJ5ZW9sIiwiZmV2ZXIiLCLsl7TsnbQg64KY7JqUID0gSSBoYXZlIGEgZmV2ZXIiLCLwn4yh77iPIiwi7Je07J20IOyigCDsnojslrTsmpQuIiwiSSBoYXZlIGEgc2xpZ2h0IGZldmVyLiJdLAogIFsi7JW96rWtIiwieWFrLWd1ayIsInBoYXJtYWN5IiwiR3JlZW4gY3Jvc3Mgc2lnbiDigJQgcGhhcm1hY2lzdHMgZ2l2ZSBncmVhdCBhZHZpY2UiLCLimpXvuI8iLCLslb3qta3snbQg7Ja065SU7JeQIOyeiOyWtOyalD8iLCJXaGVyZSBpcyBhIHBoYXJtYWN5PyJdLAogIFsi7JW9IiwieWFrIiwibWVkaWNpbmUiLCLqsJDquLDslb0gPSBjb2xkIG1lZGljaW5lLCDrkZDthrXslb0gPSBoZWFkYWNoZSBtZWRpY2luZSIsIvCfkooiLCLqsJDquLDslb0g7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIGNvbGQgbWVkaWNpbmU/Il0sCiAgWyLrs5Hsm5AiLCJieWVvbmctd29uIiwiaG9zcGl0YWwgLyBjbGluaWMiLCJLb3JlYW4gY2xpbmljcyBhcmUgZmFzdCBhbmQgYWZmb3JkYWJsZSIsIvCfj6UiLCLrs5Hsm5Dsl5Ag6rCAIOuztOyEuOyalC4iLCJZb3Ugc2hvdWxkIGdvIHNlZSBhIGRvY3Rvci4iXSwKICBbIu2RuSDsiazri6QiLCJwdWsgc3dpLWRhIiwidG8gcmVzdCB3ZWxsIiwi7ZG5ID0gZGVlcGx5L2NvbXBsZXRlbHkg4oCUIO2RuSDsiazshLjsmpQhIiwi8J+YtCIsIuyYpOuKmOydgCDsp5Hsl5DshJwg7ZG5IOyJrOyEuOyalC4iLCJSZXN0IHdlbGwgYXQgaG9tZSB0b2RheS4iXSwKICBbIuuCq+uLpCIsIm5hdC1kYSIsInRvIGdldCBiZXR0ZXIiLCLruajrpqwg64KY7Jy87IS47JqUISA9IGdldCB3ZWxsIHNvb24hIiwi4pyoIiwi67mo66asIOuCmOycvOyEuOyalCEiLCJHZXQgd2VsbCBzb29uISJdLAogIFsi7JWM66CI66W06riwIiwiYWwtbGUtcmV1LWdpIiwiYWxsZXJneSIsIkNyaXRpY2FsIGZvciBmb29kIGFuZCBtZWRpY2luZSDigJQga25vdyB0aGlzIHdvcmQiLCLwn6WcIiwi65WF7L2pIOyVjOugiOultOq4sOqwgCDsnojslrTsmpQuIiwiSSBoYXZlIGEgcGVhbnV0IGFsbGVyZ3kuIl0sCiAgWyLrsLTrk5wiLCJiYWVuLWRldSIsImJhbmQtYWlkIiwiS29uZ2xpc2gg4oCUIHNvbGQgYXQgZXZlcnkgY29udmVuaWVuY2Ugc3RvcmUiLCLwn6m5Iiwi67C065OcIOyigCDso7zshLjsmpQuIiwiQSBiYW5kLWFpZCwgcGxlYXNlLiJdXSwKIGdyYW1tYXI6WwogIFsiTuydtC/qsIAg7JWE7YyM7JqUIiwibXkgTiBodXJ0cyIsIlRlbGxpbmcgYW55b25lIGV4YWN0bHkgd2hlcmUgaXQgaHVydHMiLCJQb2ludCArIHNheSBpdC4g66i466as6rCALCDrsLDqsIAsIOuqqeydtCDslYTtjIzsmpQuIiwi66qp7J20IOyVhO2MjOyalC4iLCJNeSB0aHJvYXQgaHVydHMuIiwi7Jes6riw6rCAIOyVhO2MjOyalC4iLCJJdCBodXJ0cyBoZXJlLiJdLAogIFsifuu2gO2EsCIsInNpbmNlIH4iLCJFeHBsYWluaW5nIHdoZW4gaXQgc3RhcnRlZCIsIlRpbWUgKyDrtoDthLA6IOyWtOygnOu2gO2EsCwg7JWE7Lmo67aA7YSwLiIsIuyWtOygnOu2gO2EsCDsl7TsnbQg64KY7JqULiIsIkkgaGF2ZSBoYWQgYSBmZXZlciBzaW5jZSB5ZXN0ZXJkYXkuIiwi7JWE7Lmo67aA7YSwIOuwsOqwgCDslYTtjIzsmpQuIiwiTXkgc3RvbWFjaCBoYXMgaHVydCBzaW5jZSBtb3JuaW5nLiJdLAogIFsi7ZWY66Oo7JeQIH4g67KIIiwifiB0aW1lcyBhIGRheSIsIlVuZGVyc3RhbmRpbmcgbWVkaWNpbmUgaW5zdHJ1Y3Rpb25zIiwi7ZWY66Oo7JeQIOyEuCDrsoggPSB0aHJlZSB0aW1lcyBhIGRheS4g7Iud7ZuEID0gYWZ0ZXIgbWVhbHMuIiwi7ZWY66Oo7JeQIOyEuCDrsogg65Oc7IS47JqULiIsIlRha2UgaXQgdGhyZWUgdGltZXMgYSBkYXkuIiwi7ZWY66Oo7JeQIOuRkCDrsogg66i57Ja07JqUPyIsIkRvIEkgdGFrZSBpdCB0d2ljZSBhIGRheT8iXV19LAoKe246MTEsIGtyOiLsl6ztlonqs7wg7IiZ7IaMIiwgZW46IlRyYXZlbCAmIEhvdGVscyIsIHZpOiJXZWVrZW5kIGFkdmVudHVyZXIiLCBlbW9qaToi8J+nsyIsIGJvc3M6IvCfpqMiLCBib3NzTmFtZToiTG9zdC1MdWdnYWdlIFlldGkiLAogd29yZHM6WwogIFsi7JiI7JW97ZWY64ukIiwieWUteWEta2EtZGEiLCJ0byByZXNlcnZlIiwi7JiI7JW97ZaI7Ja07JqUID0gSSBoYXZlIGEgcmVzZXJ2YXRpb24gKG1hZ2ljIGNoZWNrLWluIHdvcmRzKSIsIvCfk4UiLCLsmKjrnbzsnbjsnLzroZwg7JiI7JW97ZaI7Ja07JqULiIsIkkgcmVzZXJ2ZWQgb25saW5lLiJdLAogIFsi7LK07YGs7J24IiwiY2hlLWtldS1pbiIsImNoZWNrLWluIiwiS29uZ2xpc2gg4oCUIOyytO2BrOyduO2VoOqyjOyalCA9IEkgd291bGQgbGlrZSB0byBjaGVjayBpbiIsIvCfm47vuI8iLCLssrTtgazsnbjtlZjqs6Ag7Iu27Ja07JqULiIsIkkgd291bGQgbGlrZSB0byBjaGVjayBpbi4iXSwKICBbIuuwqSIsImJhbmciLCJyb29tIiwi67CpIO2CpCA9IHJvb20ga2V5OyDrqocg7Zi4ID0gd2hhdCByb29tIG51bWJlciIsIvCfmqoiLCLrsKnsnbQg66qHIO2YuOyYiOyalD8iLCJXaGF0IGlzIG15IHJvb20gbnVtYmVyPyJdLAogIFsi7ZWY66O767CkIiwiaGEtcnV0LWJhbSIsIm9uZSBuaWdodCIsIu2VmOuju+uwpOyXkCDslrzrp4jsmIjsmpQ/ID0gaG93IG11Y2ggcGVyIG5pZ2h0PyIsIvCfjJkiLCLtlZjro7vrsKTsl5Ag7Ja866eI7JiI7JqUPyIsIkhvdyBtdWNoIGZvciBvbmUgbmlnaHQ/Il0sCiAgWyLsmYDsnbTtjIzsnbQiLCJ3YS1pLXBhLWkiLCJ3aWZpIiwiVGhlIHJlYWwgZmlyc3QgcXVlc3Rpb24gYXQgYW55IGhvdGVsIiwi8J+TtiIsIuyZgOydtO2MjOydtCDruYTrsIDrsojtmLjqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/Il0sCiAgWyLruYTrsIDrsojtmLgiLCJiaS1taWwtYmVvbi1obyIsInBhc3N3b3JkIiwi67mE67CAID0gc2VjcmV0LCDrsojtmLggPSBudW1iZXIiLCLwn5SQIiwi67mE67CA67KI7Zi466W8IOyVjOugpCDso7zshLjsmpQuIiwiUGxlYXNlIHRlbGwgbWUgdGhlIHBhc3N3b3JkLiJdLAogIFsi7KeQIiwiamltIiwibHVnZ2FnZSIsIuynkOydhCDrp6HquLDri6QgPSBsZWF2ZSBsdWdnYWdlIChiZWZvcmUgY2hlY2staW4hKSIsIvCfp7MiLCLsp5DsnYQg66eh6ri4IOyImCDsnojslrTsmpQ/IiwiQ2FuIEkgbGVhdmUgbXkgbHVnZ2FnZT8iXSwKICBbIuqyvey5mCIsImd5ZW9uZy1jaGkiLCJzY2VuZXJ5IC8gdmlldyIsIuqyvey5mOqwgCDsoovsnYAg67CpID0gcm9vbSB3aXRoIGEgdmlldyIsIvCfj57vuI8iLCLsmYAsIOqyvey5mOqwgCDsoJXrp5Ag7KKL64Sk7JqUISIsIldvdywgdGhlIHZpZXcgaXMgYW1hemluZyEiXSwKICBbIuyCrOynhCIsInNhLWppbiIsInBob3RvIiwi7IKs7KeEIOyigCDssI3slrQg7KO87IS47JqUID0gcGxlYXNlIHRha2UgYSBwaG90byBvZiBtZSIsIvCfk7giLCLsgqzsp4Qg7KKAIOywjeyWtCDso7zsi5zqsqDslrTsmpQ/IiwiQ291bGQgeW91IHRha2UgYSBwaG90byBmb3IgbWU/Il0sCiAgWyLtkZwiLCJweW8iLCJ0aWNrZXQiLCLquLDssKjtkZwsIOyYge2ZlO2RnCwg7J6F7J6l6raMIOKAlCBhbGwgdGlja2V0cyIsIvCfjqsiLCLsnoXsnqUg7ZGcIOuRkCDsnqUg7KO87IS47JqULiIsIlR3byBlbnRyYW5jZSB0aWNrZXRzLCBwbGVhc2UuIl0sCiAgWyLqtIDqtJHsp4AiLCJnd2FuLWd3YW5nLWppIiwidG91cmlzdCBhdHRyYWN0aW9uIiwi7Jyg66qF7ZWcIOq0gOq0keyngCA9IGZhbW91cyBzaWdodHMiLCLwn5e8Iiwi7Jyg66qF7ZWcIOq0gOq0keyngOqwgCDslrTrlJTsmIjsmpQ/IiwiV2hlcmUgYXJlIHRoZSBmYW1vdXMgc2lnaHRzPyJdLAogIFsi6re87LKYIiwiZ2V1bi1jaGVvIiwibmVhcmJ5Iiwi6re87LKY7JeQIH4g7J6I7Ja07JqUPyA9IGlzIHRoZXJlIGEgfiBuZWFyYnk/Iiwi8J+TjSIsIuq3vOyymOyXkCDrp5vsp5Eg7J6I7Ja07JqUPyIsIklzIHRoZXJlIGEgZ29vZCByZXN0YXVyYW50IG5lYXJieT8iXV0sCiBncmFtbWFyOlsKICBbIn7slYQv7Ja0IOyjvOyEuOyalCIsInBsZWFzZSBkbyB+IGZvciBtZSIsIlJlcXVlc3RzIG9mIGV2ZXJ5IGtpbmQg4oCUIHRoZSB0cmF2ZWxlcidzIGJlc3QgcGF0dGVybiIsIlZlcmIgKyDslYQv7Ja0IOyjvOyEuOyalDog7LCN7Ja0IOyjvOyEuOyalCwg7JWM66CkIOyjvOyEuOyalCwg64+E7JmA7KO87IS47JqULiIsIuyCrOynhCDsooAg7LCN7Ja0IOyjvOyEuOyalC4iLCJQbGVhc2UgdGFrZSBhIHBob3RvIGZvciBtZS4iLCLtg53si5zrpbwg67aI65+sIOyjvOyEuOyalC4iLCJQbGVhc2UgY2FsbCBhIHRheGkgZm9yIG1lLiJdLAogIFsi6re87LKY7JeQIE4g7J6I7Ja07JqUPyIsImlzIHRoZXJlIGEgTiBuZWFyYnk/IiwiRmluZGluZyBmb29kLCBBVE1zLCBwaGFybWFjaWVzIHdoZXJldmVyIHlvdSBhcmUiLCLqt7zsspggPSB2aWNpbml0eS4gTG9jYWxzIGFsd2F5cyBrbm93IHRoZSBiZXN0IGFuc3dlci4iLCLqt7zsspjsl5Ag7Y647J2Y7KCQIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBhIGNvbnZlbmllbmNlIHN0b3JlIG5lYXJieT8iLCLqt7zsspjsl5Ag7KKL7J2AIOyLneuLuSDsnojslrTsmpQ/IiwiSXMgdGhlcmUgYSBnb29kIHJlc3RhdXJhbnQgbmVhcmJ5PyJdLAogIFsi66qHIOyLnOyXkCB+7ZW07JqUPyIsImF0IHdoYXQgdGltZSB+PyIsIkNoZWNrLW91dCwgYnJlYWtmYXN0LCBvcGVuaW5nIGhvdXJzIiwi66qHIOyLnCA9IHdoYXQgdGltZS4g67aA7YSwL+q5jOyngCA9IGZyb20vdW50aWwuIiwi7KGw7Iud7J2AIOuqhyDsi5zsl5Ag7Iuc7J6R7ZW07JqUPyIsIldoYXQgdGltZSBkb2VzIGJyZWFrZmFzdCBzdGFydD8iLCLssrTtgazslYTsm4PsnYAg66qHIOyLnOq5jOyngOyYiOyalD8iLCJVbnRpbCB3aGF0IHRpbWUgaXMgY2hlY2stb3V0PyJdXX0sCgp7bjoxMiwga3I6IuuPhOybgCDsmpTssq0iLCBlbjoiV2hlbiBZb3UgTmVlZCBIZWxwIiwgdmk6IkNvbmZpZGVuY2UgYW55d2hlcmUiLCBlbW9qaToi8J+GmCIsIGJvc3M6IvCfkJkiLCBib3NzTmFtZToiQ29uZnVzaW9uIEtyYWtlbiIsCiB3b3JkczpbCiAgWyLrj4TsmYDso7zshLjsmpQiLCJkby13YS1qdS1zZS15byIsInBsZWFzZSBoZWxwIG1lIiwiVGhlIHNlbnRlbmNlIHRvIGtub3cgYmVmb3JlIHlvdSBuZWVkIGl0Iiwi8J+GmCIsIuyggCDsooAg64+E7JmA7KO87IS47JqUISIsIlBsZWFzZSBoZWxwIG1lISJdLAogIFsi7J6D7Ja067KE66as64ukIiwiaWwtZW8tYmVvLXJpLWRhIiwidG8gbG9zZSAoc29tZXRoaW5nKSIsIuyeg+yWtOuyhOuguOyWtOyalCA9IEkgbG9zdCBpdCDigJQgaG9wZWZ1bGx5IG5ldmVyIG5lZWRlZCIsIvCfmLEiLCLsp4DqsJHsnYQg7J6D7Ja067KE66C47Ja07JqULiIsIkkgbG9zdCBteSB3YWxsZXQuIl0sCiAgWyLsp4DqsJEiLCJqaS1nYXAiLCJ3YWxsZXQiLCJLb3JlYSBpcyBmYW1vdXNseSBnb29kIGF0IHJldHVybmluZyBsb3N0IHdhbGxldHMiLCLwn5GbIiwi7KeA6rCR7J2EIOuquyDssL7qsqDslrTsmpQuIiwiSSBjYW5ub3QgZmluZCBteSB3YWxsZXQuIl0sCiAgWyLtnLTrjIDtj7AiLCJoeXUtZGFlLXBvbiIsImNlbGwgcGhvbmUiLCJBbHNvIO2VuOuTnO2PsCDigJQgYm90aCB3b3JrIGV2ZXJ5d2hlcmUiLCLwn5OxIiwi7Zy064yA7Y+w7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJJIGxvc3QgbXkgcGhvbmUuIl0sCiAgWyLqsr3ssLAiLCJneWVvbmctY2hhbCIsInBvbGljZSIsIuqyveywsOyEnCA9IHBvbGljZSBzdGF0aW9uOyDsp4DqtazrjIAgPSBsb2NhbCBwb2xpY2UgYm94Iiwi8J+RriIsIuqyveywsOyXkCDsi6Dqs6DtlojslrTsmpQuIiwiSSByZXBvcnRlZCBpdCB0byB0aGUgcG9saWNlLiJdLAogIFsi7LKc7LKc7Z6IIiwiY2hlb24tY2hlb24taGkiLCJzbG93bHkiLCLsspzsspztnogg66eQ7ZW0IOyjvOyEuOyalCDigJQgc2F2ZXMgZXZlcnkgY29udmVyc2F0aW9uIiwi8J+QoiIsIuyynOyynO2eiCDrp5DtlbQg7KO87IS47JqULiIsIlBsZWFzZSBzcGVhayBzbG93bHkuIl0sCiAgWyLri6Tsi5wiLCJkYS1zaSIsImFnYWluIiwi64uk7IucIO2VnOuyiCA9IG9uZSBtb3JlIHRpbWUiLCLwn5SBIiwi64uk7IucIO2VnOuyiCDrp5DtlbQg7KO87IS47JqULiIsIlBsZWFzZSBzYXkgdGhhdCBvbmUgbW9yZSB0aW1lLiJdLAogIFsi66qw65287JqUIiwibW9sLWxhLXlvIiwiSSBkbyBub3Qga25vdyIsIkhvbmVzdCBhbmQgdXNlZnVsIOKAlCBub2JvZHkgbWluZHMiLCLwn6S3Iiwi7KOE7Iah7ZW07JqULCDsnpgg66qw65287JqULiIsIlNvcnJ5LCBJIGRvIG5vdCByZWFsbHkga25vdy4iXSwKICBbIuyVjOyVhOyalCIsImFsLWEteW8iLCJJIGtub3ciLCLslYzqsqDslrTsmpQgPSB1bmRlcnN0b29kIC8gZ290IGl0Iiwi8J+SoSIsIuuEpCwg7JWM6rKg7Ja07JqUISIsIlllcywgZ290IGl0ISJdLAogIFsi7ZWc6rWt7Ja0IiwiaGFuLWd1Zy1lbyIsIktvcmVhbiAobGFuZ3VhZ2UpIiwi7KGw6riIIO2VoCDsiJgg7J6I7Ja07JqUID0gSSBjYW4gc3BlYWsgYSBsaXR0bGUiLCLwn4ew8J+HtyIsIu2VnOq1reyWtOulvCDsobDquIgg7ZWgIOyImCDsnojslrTsmpQuIiwiSSBjYW4gc3BlYWsgYSBsaXR0bGUgS29yZWFuLiJdLAogIFsi7JiB7Ja0IiwieWVvbmctZW8iLCJFbmdsaXNoIiwi7JiB7Ja0IO2VoCDsiJgg7J6I7Ja07JqUPyDigJQgd29ydGggYXNraW5nIHBvbGl0ZWx5Iiwi8J+MkCIsIuyYgeyWtCDtlaAg7IiYIOyeiOuKlCDrtoQg7J6I7Ja07JqUPyIsIklzIHRoZXJlIHNvbWVvbmUgd2hvIHNwZWFrcyBFbmdsaXNoPyJdLAogIFsi7J207ZW07ZWY64ukIiwiaS1oYWUtaGEtZGEiLCJ0byB1bmRlcnN0YW5kIiwi7J207ZW07ZaI7Ja07JqUID0gdW5kZXJzdG9vZDsg7J207ZW0IOuquyDtlojslrTsmpQgPSBJIGRpZG4ndCBnZXQgaXQiLCLwn6egIiwi7JWELCDsnbTsoJwg7J207ZW07ZaI7Ja07JqUISIsIkFoLCBub3cgSSB1bmRlcnN0YW5kISJdXSwKIGdyYW1tYXI6WwogIFsi7LKc7LKc7Z6IL+uLpOyLnCDrp5DtlbQg7KO87IS47JqUIiwic3BlYWsgc2xvd2x5IC8gc2F5IGl0IGFnYWluIiwiUmVzY3VpbmcgYW55IGNvbnZlcnNhdGlvbiB0aGF0IG1vdmVzIHRvbyBmYXN0IiwiTm9ib2R5IGlzIGFubm95ZWQgYnkgdGhpcyDigJQgS29yZWFucyBhcHByZWNpYXRlIHRoZSBlZmZvcnQuIiwi7KOE7Iah7ZWY7KeA66eMLCDsspzsspztnogg66eQ7ZW0IOyjvOyEuOyalC4iLCJTb3JyeSwgYnV0IHBsZWFzZSBzcGVhayBzbG93bHkuIiwi64uk7IucIO2VnOuyiCDrp5DtlbQg7KO87Iuc6rKg7Ja07JqUPyIsIkNvdWxkIHlvdSBzYXkgdGhhdCBvbmNlIG1vcmU/Il0sCiAgWyJO7J2EL+ulvCDsnoPslrTrsoTroLjslrTsmpQiLCJJIGxvc3QgbXkgTiIsIlJlcG9ydGluZyBsb3N0IGl0ZW1zIGF0IHBvbGljZSBib3hlcyBhbmQgY291bnRlcnMiLCJGb2xsb3cgd2l0aCDslrTrlJTsl5DshJwg7LC+7J2EIOyImCDsnojslrTsmpQ/ID0gd2hlcmUgY2FuIEkgZmluZCBpdD8iLCLsl6zqtozsnYQg7J6D7Ja067KE66C47Ja07JqULiIsIkkgbG9zdCBteSBwYXNzcG9ydC4iLCLsp4DtlZjssqDsl5DshJwg6rCA67Cp7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJJIGxvc3QgbXkgYmFnIG9uIHRoZSBzdWJ3YXkuIl0sCiAgWyJ+KOycvCnjhLkg7IiYIOyeiOyWtOyalC/sl4bslrTsmpQiLCJJIGNhbiAvIGNhbm5vdCB+IiwiU3RhdGluZyB5b3VyIGFiaWxpdGllcyBob25lc3RseSIsIu2VnOq1reyWtOulvCDsobDquIgg7ZWgIOyImCDsnojslrTsmpQgb3BlbnMgZXZlcnkgZG9vciB3aXRoIGEgc21pbGUuIiwi7ZWc6rWt7Ja066W8IOyhsOq4iCDtlaAg7IiYIOyeiOyWtOyalC4iLCJJIGNhbiBzcGVhayBhIGxpdHRsZSBLb3JlYW4uIiwi7KeA6riI7J2AIOqwiCDsiJgg7JeG7Ja07JqULiIsIkkgY2Fubm90IGdvIHJpZ2h0IG5vdy4iXV19Cl07CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFNUT1JJRVMg4oCUIG9uZSBpbGx1c3RyYXRlZCBzY2VuYXJpbyBwZXIgcXVlc3QgKGFsbCBvcmlnaW5hbCkuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KY29uc3QgU1RPUklFUyA9IHsKMTp7dDoi8J+RiyBUaGUgTmV3IE5laWdoYm9yIiwgc3RlcHM6Wwoge2JnOiJkYXkiLHNjOiLwn5Om8J+PoPCfmYIiLG5hcjoiTW92aW5nIGRheSEgWW91IGFyZSBjYXJyeWluZyBib3hlcyBpbnRvIHlvdXIgbmV3IHBsYWNlIHdoZW4gdGhlIG5laWdoYm9yJ3MgZG9vciBvcGVucy4iLHdobzoi8J+ZgiDsnbTsm4MiLGtyOiLslYjrhZXtlZjshLjsmpQhIOyDiOuhnCDsnbTsgqwg7Jik7IWo7Ja07JqUPyIsZW46IkhlbGxvISBEaWQgeW91IGp1c3QgbW92ZSBpbj8iLGNoOltbIuuEpCwg7JWI64WV7ZWY7IS47JqUISDrp4zrgpjshJwg67CY6rCR7Iq164uI64ukLiIsIlllcywgaGVsbG8hIEdsYWQgdG8gbWVldCB5b3UuIiwxXSxbIuqzhOyCsOyEnCDso7zshLjsmpQuIiwiVGhlIGJpbGwsIHBsZWFzZS4iLDBdLFsi7KCAIO2OuOydmOygkCDslZ7sl5DshJwg7IS47JuMIOyjvOyEuOyalC4iLCJQbGVhc2Ugc3RvcCBpbiBmcm9udCBvZiB0aGF0IGNvbnZlbmllbmNlIHN0b3JlLiIsMF1dfSwKIHtiZzoiZGF5IixzYzoi8J+knfCfmYLwn5iKIixuYXI6IlNoZSBzbWlsZXMgd2FybWx5LiBUaW1lIHRvIGludHJvZHVjZSB5b3Vyc2VsZiBwcm9wZXJseS4iLHdobzoi8J+ZgiDsnbTsm4MiLGtyOiLsoIDripQg6rmA7ZWY64KY7JiI7JqULiDsnbTrpoTsnbQg662Q7JiI7JqUPyIsZW46IkkgYW0gS2ltIEhhbmEuIFdoYXQgaXMgeW91ciBuYW1lPyIsY2g6W1si7KCA64qUIO2GsOydtOyXkOyalC4g7J6YIOu2gO2DgeuTnOumveuLiOuLpCEiLCJJIGFtIFRvbS4gUGxlYXNlIHRha2UgY2FyZSBvZiBtZSEiLDFdLFsi7ZmY67aIIOuPvOyalD8iLCJDYW4gSSBnZXQgYSByZWZ1bmQ/IiwwXSxbIuuLpOydjCDsl63sl5DshJwg64K066as7IS47JqULiIsIkdldCBvZmYgYXQgdGhlIG5leHQgc3RhdGlvbi4iLDBdXX0sCiB7Ymc6ImRheSIsc2M6IvCfjI3inIjvuI/wn5mCIixuYXI6IlNoZSBpcyBjdXJpb3VzIGFib3V0IHRoZSBuZXcgZmFjZSBpbiB0aGUgYnVpbGRpbmcuIix3aG86IvCfmYIg7ZWY64KYIixrcjoi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IixlbjoiV2hpY2ggY291bnRyeSBhcmUgeW91IGZyb20/IixjaDpbWyLsupDrgpjri6Tsl5DshJwg7JmU7Ja07JqULiDsupDrgpjri6Qg7IKs656M7J207JeQ7JqULiIsIkkgY2FtZSBmcm9tIENhbmFkYS4gSSBhbSBDYW5hZGlhbi4iLDFdLFsi7JWE7J207IqkIOyVhOuplOumrOy5tOuFuCDso7zshLjsmpQuIiwiQW4gaWNlZCBhbWVyaWNhbm8sIHBsZWFzZS4iLDBdLFsi7Je07J20IOyigCDsnojslrTsmpQuIiwiSSBoYXZlIGEgc2xpZ2h0IGZldmVyLiIsMF1dfSwKIHtiZzoiZGF3biIsc2M6IvCfj6Dwn5GL8J+YiiIsbmFyOiJUaGUgYm94ZXMgd2lsbCBub3QgY2FycnkgdGhlbXNlbHZlcy4gV3JhcCBpdCB1cCBsaWtlIGEgcHJvIOKAlCBhbmQga2VlcCB0aGUgZG9vciBvcGVuIGZvciBuZXh0IHRpbWUuIix3aG86IvCfmYIg7ZWY64KYIixrcjoi7ZWE7JqU7ZWcIOqxsCDsnojsnLzrqbQg7Ja47KCc65Og7KeAIOunkO2VtOyalCEiLGVuOiJJZiB5b3UgbmVlZCBhbnl0aGluZywganVzdCBzYXkgc28gYW55dGltZSEiLGNoOltbIuqwkOyCrO2VqeuLiOuLpCEg64uk7J2M7JeQIOuYkCDrp4zrgpjsmpQhIiwiVGhhbmsgeW91ISBTZWUgeW91IGFnYWluIG5leHQgdGltZSEiLDFdLFsi7KOE7Iah7ZWY7KeA66eMLCDsnbTqsbAg64SI66y0IOu5hOyLuOyalC4iLCJTb3JyeSwgYnV0IHRoaXMgaXMgdG9vIGV4cGVuc2l2ZS4iLDBdLFsi7JmA7J207YyM7J20IOu5hOuwgOuyiO2YuOqwgCDrrZDsmIjsmpQ/IiwiV2hhdCBpcyB0aGUgd2lmaSBwYXNzd29yZD8iLDBdXX1dfSwKMjp7dDoi4piVIFJ1c2ggSG91ciBhdCB0aGUgQ2Fmw6kiLCBzdGVwczpbCiB7Ymc6ImluZG9vciIsc2M6IuKYlfCfp5HigI3wn42z8J+TiyIsbmFyOiJNb3JuaW5nIHJ1c2guIFRoZSBsaW5lIGZpbmFsbHkgbW92ZXMg4oCUIHlvdSBhcmUgdXAuIFRoZSBiYXJpc3RhIGxvb2tzIGF0IHlvdSBleHBlY3RhbnRseS4iLHdobzoi8J+nkeKAjfCfjbMg67CU66as7Iqk7YOAIixrcjoi7Ja07IScIOyYpOyEuOyalCEg7KO866y47ZWY7Iuc6rKg7Ja07JqUPyIsZW46IldlbGNvbWUhIFdvdWxkIHlvdSBsaWtlIHRvIG9yZGVyPyIsY2g6W1si64SkISDslYTsnbTsiqQg7JWE66mU66as7Lm064W4IO2VnCDsnpQg7KO87IS47JqULiIsIlllcyEgT25lIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIiwxXSxbIuyngOqwkeydhCDsnoPslrTrsoTroLjslrTsmpQuIiwiSSBsb3N0IG15IHdhbGxldC4iLDBdLFsi67mo66asIOuCmOycvOyEuOyalCEiLCJHZXQgd2VsbCBzb29uISIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+NsPCfkYDwn5iLIixuYXI6IlRoZSBjYWtlIGRpc3BsYXkgaXMgcmlnaHQgdGhlcmUuIEdsaXN0ZW5pbmcuIENhbGxpbmcgeW91ciBuYW1lLiIsd2hvOiLwn6eR4oCN8J+NsyDrsJTrpqzsiqTtg4AiLGtyOiLri6Trpbgg6rG0IO2VhOyalCDsl4bsnLzshLjsmpQ/IixlbjoiQW55dGhpbmcgZWxzZT8iLGNoOltbIuy5mOymiCDsvIDsnbTtgazrj4Qg7ZWY64KYIOyjvOyEuOyalC4iLCJPbmUgY2hlZXNlY2FrZSB0b28sIHBsZWFzZS4iLDFdLFsi7Jm87Kq97Jy866GcIOqwgOyEuOyalC4iLCJHbyB0byB0aGUgbGVmdC4iLDBdLFsi6rK97LCw7JeQIOyLoOqzoO2WiOyWtOyalC4iLCJJIHJlcG9ydGVkIGl0IHRvIHRoZSBwb2xpY2UuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn6Wh4p2T8J+ZgiIsbmFyOiJUaGUgY2Fmw6kgaXMgcGFja2VkIOKAlCBub3QgYSBzaW5nbGUgZnJlZSB0YWJsZSBpbiBzaWdodC4iLHdobzoi8J+nkeKAjfCfjbMg67CU66as7Iqk7YOAIixrcjoi65Oc7Iuc6rOgIOqwgOyEuOyalCwg7JWE64uI66m0IO2PrOyepeydtOyEuOyalD8iLGVuOiJGb3IgaGVyZSwgb3IgdG8gZ28/IixjaDpbWyLsnpDrpqzqsIAg7JeG7Jy864uI6rmMIO2PrOyepe2VtCDso7zshLjsmpQuIiwiVGhlcmUgYXJlIG5vIHNlYXRzLCBzbyBtYWtlIGl0IHRvIGdvLCBwbGVhc2UuIiwxXSxbIuuouOumrOqwgCDslYTtjIzsmpQuIiwiTXkgaGVhZCBodXJ0cy4iLDBdLFsi6rWQ7Ya17Lm065Oc66W8IOy2qeyghO2VtCDso7zshLjsmpQuIiwiUGxlYXNlIHJlY2hhcmdlIG15IHRyYW5zaXQgY2FyZC4iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfkrPwn6e+4pyFIixuYXI6IlRvdGFsOiAxMSwwMDAgd29uLiBUaW1lIHRvIHBheSBhbmQgY2xhaW0geW91ciBicmVha2Zhc3QuIix3aG86IvCfp5HigI3wn42zIOuwlOumrOyKpO2DgCIsa3I6IuunjOyynCDsm5DsnoXri4jri6QuIOyWtOuWu+qyjCDqs4TsgrDtlZjsi5zqsqDslrTsmpQ/IixlbjoiVGhhdCBpcyAxMSwwMDAgd29uLiBIb3cgd291bGQgeW91IGxpa2UgdG8gcGF5PyIsY2g6W1si7Lm065Oc66GcIO2VoOqyjOyalC4g6rCQ7IKs7ZWp64uI64ukISIsIkJ5IGNhcmQsIHBsZWFzZS4gVGhhbmsgeW91ISIsMV0sWyLsi6DtmLjrk7Hsl5DshJwg6rG064SI7IS47JqULiIsIkNyb3NzIGF0IHRoZSB0cmFmZmljIGxpZ2h0LiIsMF0sWyLtkbkg7Ims7IS47JqULiIsIlJlc3Qgd2VsbC4iLDBdXX1dfSwKMzp7dDoi8J+NnCBUaGUgTGVnZW5kYXJ5IE5vb2RsZSBIb3VzZSIsIHN0ZXBzOlsKIHtiZzoiaW5kb29yIixzYzoi8J+NnPCfmYvwn6WiIixuYXI6IkEgdGlueSByZXN0YXVyYW50IHdpdGggYSBsb25nIGxpbmUg4oCUIGFsd2F5cyBhIGdvb2Qgc2lnbi4gWW91IGZpbmFsbHkgZ2V0IGEgdGFibGUuIix3aG86IvCfmYsg7IKs7J6l64uYIixrcjoi7Ja07IScIOyYpOyEuOyalCEg662QIOuTnOumtOq5jOyalD8iLGVuOiJXZWxjb21lISBXaGF0IGNhbiBJIGdldCB5b3U/IixjaDpbWyLrqZTribQg7KKAIOyjvOyEuOyalC4g6re466as6rOgIOy2lOyynO2VtCDso7zshLjsmpQhIiwiVGhlIG1lbnUsIHBsZWFzZS4gQW5kIHBsZWFzZSByZWNvbW1lbmQgc29tZXRoaW5nISIsMV0sWyLrsKnsnbQg66qHIO2YuOyYiOyalD8iLCJXaGF0IGlzIG15IHJvb20gbnVtYmVyPyIsMF0sWyLrsLTrk5wg7KKAIOyjvOyEuOyalC4iLCJBIGJhbmQtYWlkLCBwbGVhc2UuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn4y277iP8J+YsOKdkyIsbmFyOiJTaGUgcG9pbnRzIGF0IHRoZSBob3VzZSBzcGVjaWFsLiBJdCBpcyBHTE9XSU5HIHJlZC4gWW91IGhhdmXigKYgcXVlc3Rpb25zLiIsd2hvOiLwn5mLIOyCrOyepeuLmCIsa3I6IuydtOqyjCDsoJzsnbwg66eb7J6I7Ja07JqULiDrp6TsmrQg6rWt7IiY7JiI7JqUISIsZW46IlRoaXMgaXMgdGhlIGJlc3Qg4oCUIHNwaWN5IG5vb2RsZXMhIixjaDpbWyLrp47snbQg66ek7JuM7JqUPyDslYgg66e16rKMIO2VoCDsiJgg7J6I7Ja07JqUPyIsIklzIGl0IHZlcnkgc3BpY3k/IENhbiB5b3UgbWFrZSBpdCBub3Qgc3BpY3k/IiwxXSxbIuq1kO2Gtey5tOuTnCDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgYSB0cmFuc2l0IGNhcmQ/IiwwXSxbIuyytO2BrOyduO2VmOqzoCDsi7bslrTsmpQuIiwiSSB3b3VsZCBsaWtlIHRvIGNoZWNrIGluLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+lovCfmIvwn42cIixuYXI6IlRoZSBub29kbGVzIGFycml2ZSDigJQgbWlsZCB2ZXJzaW9uLCBpbmNyZWRpYmxlIHNtZWxsLiBUaGUgc2lkZSBkaXNoZXMgdmFuaXNoIGZhc3QuIix3aG86IvCfmYsg7IKs7J6l64uYIixrcjoi66eb7J20IOyWtOuVjOyalD8iLGVuOiJIb3cgaXMgdGhlIHRhc3RlPyIsY2g6W1si7KCV66eQIOunm+yeiOyWtOyalCEg67CY7LCsIOuNlCDso7zshLjsmpQuIiwiUmVhbGx5IGRlbGljaW91cyEgTW9yZSBzaWRlIGRpc2hlcywgcGxlYXNlLiIsMV0sWyLrqocg7Zi47ISg7J2EIO2DgOyVvCDtlbTsmpQ/IiwiV2hpY2ggbGluZSBzaG91bGQgSSB0YWtlPyIsMF0sWyLsi6zsi6ztlbTsmpQuIiwiSSBhbSBib3JlZC4iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfp77wn5Kw8J+YiiIsbmFyOiJCb3dscyBlbXB0eSwgc3RvbWFjaCBmdWxsLCBoZWFydCBoYXBweS4gVGltZSB0byBzZXR0bGUgdXAgYXQgdGhlIGNvdW50ZXIuIix3aG86IvCfmYsg7IKs7J6l64uYIixrcjoi7YyU7LKcIOybkOyeheuLiOuLpCEiLGVuOiJUaGF0IHdpbGwgYmUgOCwwMDAgd29uISIsY2g6W1si7Jes6riw7JqULiDsnpgg66i57JeI7Iq164uI64ukISDrmJAg7Jis6rKM7JqULiIsIkhlcmUgeW91IGdvLiBUaGFuayB5b3UgZm9yIHRoZSBtZWFsISBJIHdpbGwgY29tZSBhZ2Fpbi4iLDFdLFsi7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQuIiwiUGxlYXNlIHNwZWFrIHNsb3dseS4iLDBdLFsi64uk66W4IOyDieq5lOuPhCDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgb3RoZXIgY29sb3JzPyIsMF1dfV19LAo0Ont0OiLwn5e677iPIFRoZSBIaWRkZW4gQm9va3Nob3AiLCBzdGVwczpbCiB7Ymc6ImNpdHkiLHNjOiLwn5Ox8J+YlfCfj5nvuI8iLG5hcjoiQSBmcmllbmQgdG9sZCB5b3UgYWJvdXQgYSBtYWdpY2FsIGxpdHRsZSBib29rc2hvcC4gWW91ciBtYXAgYXBwIHNheXMgeW91IGhhdmUgYXJyaXZlZC4gWW91IGNsZWFybHkgaGF2ZSBub3QuIix3aG86IvCfmrYg7ZaJ7J24Iixrcjoi662QIOywvuycvOyEuOyalD8g64+E7JmA65Oc66a06rmM7JqUPyIsZW46Ikxvb2tpbmcgZm9yIHNvbWV0aGluZz8gQ2FuIEkgaGVscD8iLGNoOltbIuuEpCEg7ZWc67mbIOyEnOygkOydtCDslrTrlJTsmIjsmpQ/IiwiWWVzISBXaGVyZSBpcyBIYW5iaXQgQm9va3Nob3A/IiwxXSxbIuyEpO2DlSDrubwg7KO87IS47JqULiIsIk5vIHN1Z2FyLCBwbGVhc2UuIiwwXSxbIu2VmOuju+uwpOyXkCDslrzrp4jsmIjsmpQ/IiwiSG93IG11Y2ggZm9yIG9uZSBuaWdodD8iLDBdXX0sCiB7Ymc6ImNpdHkiLHNjOiLwn5qm8J+RieKelSIsbmFyOiJIZSBwb2ludHMgZG93biB0aGUgc3RyZWV0IHdpdGggY29uZmlkZW5jZS4iLHdobzoi8J+atiDtlonsnbgiLGtyOiLsnbQg6ri466GcIOytiSDqsIDshLjsmpQuIOq3uOumrOqzoCDsgqzqsbDrpqzsl5DshJwg7Jm87Kq97Jy866GcIOuPhOyEuOyalC4iLGVuOiJHbyBzdHJhaWdodCBhbG9uZyB0aGlzIHJvYWQsIHRoZW4gdHVybiBsZWZ0IGF0IHRoZSBpbnRlcnNlY3Rpb24uIixjaDpbWyLsgqzqsbDrpqzsl5DshJwg7Jm87Kq97J207JqUPyDsl6zquLDshJwg6rCA6rmM7JuM7JqUPyIsIkxlZnQgYXQgdGhlIGludGVyc2VjdGlvbj8gSXMgaXQgY2xvc2UgdG8gaGVyZT8iLDFdLFsi6rCQ6riw7JeQIOqxuOumsCDqsoMg6rCZ7JWE7JqULiIsIkkgdGhpbmsgSSBjYXVnaHQgYSBjb2xkLiIsMF0sWyLshKDrrLwg7Y+s7J6lIOuPvOyalD8iLCJDYW4geW91IGdpZnQtd3JhcCBpdD8iLDBdXX0sCiB7Ymc6ImNpdHkiLHNjOiLwn5q24qyF77iP8J+PoiIsbmFyOiJGaXZlIG1pbnV0ZXMgb24gZm9vdCwgaGUgc2F5cy4gWW91IGZvbGxvdyB0aGUgcm9hZCwgdHVybiBsZWZ04oCmIGFuZCBzZWUgYSBzbWFsbCBiYW5rIG9uIHRoZSBjb3JuZXIuIix3aG86IvCfmrYg7ZaJ7J24Iixrcjoi7J2A7ZaJIOuztOydtOyjoD8g7ISc7KCQ7J2AIOq3uCDsnYDtlokg67CU66GcIOyYhuyXkCDsnojslrTsmpQuIixlbjoiU2VlIHRoZSBiYW5rPyBUaGUgYm9va3Nob3AgaXMgcmlnaHQgbmV4dCB0byBpdC4iLGNoOltbIuyVhCwg7J2A7ZaJIOyYhuydtOyalCEg6rCQ7IKs7ZWp64uI64ukISIsIkFoLCBuZXh0IHRvIHRoZSBiYW5rISBUaGFuayB5b3UhIiwxXSxbIu2VmOuCmCDrjZQg7KO87IS47JqULiIsIk9uZSBtb3JlLCBwbGVhc2UuIiwwXSxbIuusuOyekOuhnCDrs7TrgrQg7KO87IS47JqULiIsIlBsZWFzZSBzZW5kIGl0IGJ5IHRleHQuIiwwXV19LAoge2JnOiJkYXduIixzYzoi8J+TmuKcqPCfmIoiLG5hcjoiVGhlcmUgaXQgaXMg4oCUIHdhcm0gbGlnaHQsIHdvb2RlbiBzaGVsdmVzLCBhIHNsZWVwaW5nIGNhdCBpbiB0aGUgd2luZG93LiBXb3J0aCBldmVyeSB3cm9uZyB0dXJuLiIsd2hvOiLwn5OaIOyjvOyduCIsa3I6IuyWtOyEnCDsmKTshLjsmpQuIOyemCDssL7slYTsmKTshajrhKTsmpQhIixlbjoiV2VsY29tZS4gWW91IGZvdW5kIHVzIHdlbGwhIixjaDpbWyLrhKQsIOq4uOydhCDrrLzslrTrtJDshJwg7JmU7Ja07JqULiDsl6zquLAg7KCV66eQIOyii+uEpOyalCEiLCJZZXMsIEkgYXNrZWQgZm9yIGRpcmVjdGlvbnMuIFRoaXMgcGxhY2UgaXMgd29uZGVyZnVsISIsMV0sWyLrlLDroZwg6rOE7IKw7ZW0IOyjvOyEuOyalC4iLCJTZXBhcmF0ZSBiaWxscywgcGxlYXNlLiIsMF0sWyLslb3sho0g7Iuc6rCE7J2EIOuwlOq/gCDsiJgg7J6I7Ja07JqUPyIsIkNhbiB3ZSBjaGFuZ2UgdGhlIG1lZXRpbmcgdGltZT8iLDBdXX1dfSwKNTp7dDoi8J+ahyBDb25jZXJ0IEFjcm9zcyBUb3duIiwgc3RlcHM6Wwoge2JnOiJjaXR5IixzYzoi8J+Oq/CflZbwn5qHIixuYXI6IllvdSBzY29yZWQgYSB0aWNrZXQgdG8gdG9uaWdodCdzIGNvbmNlcnQg4oCUIGJ1dCB0aGUgdmVudWUgaXMgYWNyb3NzIHRoZSBjaXR5IGFuZCBkb29ycyBvcGVuIGluIG9uZSBob3VyLiBBIHN0YXRpb24gYXR0ZW5kYW50IGlzIG5lYXJieS4iLHdobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AiLGtyOiLrhKQsIOutmCDrj4TsmYDrk5zrprTquYzsmpQ/IixlbjoiWWVzLCBob3cgY2FuIEkgaGVscCB5b3U/IixjaDpbWyLsmKzrprztlL0g6rO17JuQ6rmM7KeAIOyWtOuWu+qyjCDqsIDsmpQ/IOuqhyDtmLjshKDsnbTsl5DsmpQ/IiwiSG93IGRvIEkgZ2V0IHRvIE9seW1waWMgUGFyaz8gV2hpY2ggbGluZSBpcyBpdD8iLDFdLFsi7LmY7KaIIOy8gOydtO2BrCDtlZjrgpgg7KO87IS47JqULiIsIk9uZSBjaGVlc2VjYWtlLCBwbGVhc2UuIiwwXSxbIuu5qOumrCDrgpjsnLzshLjsmpQhIiwiR2V0IHdlbGwgc29vbiEiLDBdXX0sCiB7Ymc6ImNpdHkiLHNjOiLwn5SA8J+aifCfl7rvuI8iLG5hcjoiSGUgY2hlY2tzIHRoZSBtYXAgYW5kIHRyYWNlcyB0aGUgcm91dGUgd2l0aCBoaXMgZmluZ2VyLiIsd2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCIsa3I6IjLtmLjshKDsnYQg7YOA7IS47JqULiDqt7jrpqzqs6Ag7J6g7Iuk7Jet7JeQ7IScIDjtmLjshKDsnLzroZwg6rCI7JWE7YOA7IS47JqULiIsZW46IlRha2UgbGluZSAyLCB0aGVuIHRyYW5zZmVyIHRvIGxpbmUgOCBhdCBKYW1zaWwgU3RhdGlvbi4iLGNoOltbIuyeoOyLpOyXreyXkOyEnCDqsIjslYTtg4DsmpQ/IOyWvOuniOuCmCDqsbjroKTsmpQ/IiwiVHJhbnNmZXIgYXQgSmFtc2lsPyBIb3cgbG9uZyBkb2VzIGl0IHRha2U/IiwxXSxbIuyeheyWtCDrtJDrj4Qg64+87JqUPyIsIk1heSBJIHRyeSBpdCBvbj8iLDBdLFsi65WF7L2pIOyVjOugiOultOq4sOqwgCDsnojslrTsmpQuIiwiSSBoYXZlIGEgcGVhbnV0IGFsbGVyZ3kuIiwwXV19LAoge2JnOiJuaWdodCIsc2M6IvCfmofwn5iF4o+wIixuYXI6IjQwIG1pbnV0ZXMsIGhlIHNheXMuIFRpZ2h0IGJ1dCBkb2FibGUuIE9uIHRoZSB0cmFpbiwgYW4gYW5ub3VuY2VtZW50IGNyYWNrbGVzIOKAlCB5b3UgY2F0Y2ggdGhlIHdvcmQg7J6g7IukISIsd2hvOiLwn5OiIOyViOuCtOuwqeyGoSIsa3I6IuydtOuyiCDsl63snYAg7J6g7IukLCDsnqDsi6Tsl63snoXri4jri6QuIixlbjoiVGhpcyBzdG9wIGlzIEphbXNpbCwgSmFtc2lsIFN0YXRpb24uIixjaDpbWyLsl6zquLDshJwg64K066Ck7IScIDjtmLjshKDsnLzroZwg6rCI7JWE7YOA7JW8IO2VtOyalCEiLCJJIG5lZWQgdG8gZ2V0IG9mZiBoZXJlIGFuZCB0cmFuc2ZlciB0byBsaW5lIDghIiwxXSxbIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLDBdLFsi7JmA7J207YyM7J20IOu5hOuwgOuyiO2YuOqwgCDrrZDsmIjsmpQ/IiwiV2hhdCBpcyB0aGUgd2lmaSBwYXNzd29yZD8iLDBdXX0sCiB7Ymc6Im5pZ2h0IixzYzoi8J+alfCfjrbwn4+f77iPIixuYXI6IkxpbmUgOCBpcyBkZWxheWVkISBFbWVyZ2VuY3kgcGxhbjogdGF4aSBmb3IgdGhlIGxhc3Qgc3RyZXRjaC4gVGhlIGRyaXZlciBub2RzIGFzIHRoZSBhcmVuYSBsaWdodHMgYXBwZWFyLiIsd2hvOiLwn5qVIOq4sOyCrOuLmCIsa3I6IuqzteyXsOyepSDsoJXrrLgg7JWe7JeQIOyEuOybjCDrk5zrprTquYzsmpQ/IixlbjoiU2hhbGwgSSBzdG9wIGluIGZyb250IG9mIHRoZSBtYWluIGdhdGU/IixjaDpbWyLrhKQhIOyggOq4sCDsnoXqtawg7JWe7JeQ7IScIOyEuOybjCDso7zshLjsmpQhIiwiWWVzISBQbGVhc2Ugc3RvcCBpbiBmcm9udCBvZiB0aGF0IGVudHJhbmNlISIsMV0sWyLrqrDrnbzsmpQuIiwiSSBkbyBub3Qga25vdy4iLDBdLFsi7ISk7YOVIOu5vCDso7zshLjsmpQuIiwiTm8gc3VnYXIsIHBsZWFzZS4iLDBdXX1dfSwKNjp7dDoi8J+bje+4jyBHaWZ0IEh1bnQgYXQgdGhlIE1hcmtldCIsIHN0ZXBzOlsKIHtiZzoic2hvcCIsc2M6IvCfjoHwn6SU8J+PqiIsbmFyOiJZb3VyIGJlc3QgZnJpZW5kJ3MgYmlydGhkYXkgaXMgdG9tb3Jyb3cuIFRoZSB0cmFkaXRpb25hbCBtYXJrZXQgaXMgYnV6emluZyDigJQgYW5kIG9uZSBzY2FyZiBzdGFsbCBjYXRjaGVzIHlvdXIgZXllLiIsd2hvOiLwn6eTIOyCrOyepeuLmCIsa3I6IuyWtOyEnCDsmKTshLjsmpQhIOq1rOqyve2VmOqzoCDqsIDshLjsmpQhIixlbjoiV2VsY29tZSEgQ29tZSB0YWtlIGEgbG9vayEiLGNoOltbIuydtCDsiqTsubTtlIQg7JiI7IGY64Sk7JqULiDslrzrp4jsmIjsmpQ/IiwiVGhpcyBzY2FyZiBpcyBwcmV0dHkuIEhvdyBtdWNoIGlzIGl0PyIsMV0sWyLsl7TsnbQg7KKAIOyeiOyWtOyalC4iLCJJIGhhdmUgYSBzbGlnaHQgZmV2ZXIuIiwwXSxbIuyytO2BrOyduO2VmOqzoCDsi7bslrTsmpQuIiwiSSB3b3VsZCBsaWtlIHRvIGNoZWNrIGluLiIsMF1dfSwKIHtiZzoic2hvcCIsc2M6IvCfkrDwn5iy4pyC77iPIixuYXI6IjM1LDAwMCB3b24/ISBGb3IgdGhhdCBwcmljZSBpdCBzaG91bGQgY29tZSB3aXRoIGEgZnJlZSBsdW5jaC4gVGltZSB0byBuZWdvdGlhdGUsIG1hcmtldC1zdHlsZS4iLHdobzoi8J+nkyDsgqzsnqXri5giLGtyOiLsgrzrp4wg7Jik7LKcIOybkOydtOyXkOyalC4g7ZKI7KeI7J20IOyVhOyjvCDsoovslYTsmpQhIixlbjoiSXQgaXMgMzUsMDAwIHdvbi4gVGhlIHF1YWxpdHkgaXMgZXhjZWxsZW50ISIsY2g6W1si64SI66y0IOu5hOyLuOyalCEg7KGw6riI66eMIOq5juyVhCDso7zshLjsmpQuIiwiVGhhdCBpcyB0b28gZXhwZW5zaXZlISBQbGVhc2UgZ2l2ZSBtZSBhIHNtYWxsIGRpc2NvdW50LiIsMV0sWyLri6Tsi5wg7ZWc67KIIOunkO2VtCDso7zshLjsmpQuIiwiUGxlYXNlIHNheSB0aGF0IGFnYWluLiIsMF0sWyLtkbkg7Ims7IS47JqULiIsIlJlc3Qgd2VsbC4iLDBdXX0sCiB7Ymc6InNob3AiLHNjOiLwn46o4p2T8J+noyIsbmFyOiJTaGUgbGF1Z2hzIGFuZCBkcm9wcyBpdCB0byAyOCwwMDAuIFByb2dyZXNzISBCdXQgeW91ciBmcmllbmQncyBmYXZvcml0ZSBjb2xvciBpcyBibHVl4oCmIix3aG86IvCfp5Mg7IKs7J6l64uYIixrcjoi7KKL7JWE7JqULCDsnbTrp4wg7YyU7LKcIOybkCEg7J20IOu5qOqwhOyDiSDslrTrlYzsmpQ/IixlbjoiRmluZSwgMjgsMDAwISBIb3cgYWJvdXQgdGhpcyByZWQgb25lPyIsY2g6W1si7Zi57IucIO2MjOuegOyDieuPhCDsnojslrTsmpQ/IOyEoOusvOydtOyXkOyalC4iLCJEbyB5b3UgaGF2ZSBpdCBpbiBibHVlPyBJdCBpcyBhIGdpZnQuIiwxXSxbIuuwsOqwgCDrhIjrrLQg7JWE7YyM7JqULiIsIk15IHN0b21hY2ggcmVhbGx5IGh1cnRzLiIsMF0sWyLri6TsnYwg7KCV66WY7J6l7JeQ7IScIOuCtOumrOyEuOyalC4iLCJHZXQgb2ZmIGF0IHRoZSBuZXh0IHN0b3AuIiwwXV19LAoge2JnOiJzaG9wIixzYzoi8J+OgfCfkpnwn5iKIixuYXI6IlNoZSBkaWdzIG91dCBhIGJlYXV0aWZ1bCBibHVlIG9uZSBBTkQgd3JhcHMgaXQgYXMgYSBnaWZ0LiBNYXJrZXQgZ3JhbmRtb3RoZXJzIGFyZSB0aGUgYmVzdC4iLHdobzoi8J+nkyDsgqzsnqXri5giLGtyOiLshKDrrLwg7Y+s7J6lIO2VtCDrk5zrprTqsozsmpQuIOy5nOq1rOqwgCDsoovslYTtlaAg6rGw7JiI7JqUISIsZW46Ikkgd2lsbCBnaWZ0LXdyYXAgaXQgZm9yIHlvdS4gWW91ciBmcmllbmQgd2lsbCBsb3ZlIGl0ISIsY2g6W1si6rCQ7IKs7ZWp64uI64ukISDsubTrk5wg64+87JqUPyIsIlRoYW5rIHlvdSEgRG8geW91IHRha2UgY2FyZHM/IiwxXSxbIuyggOuKlCDsi6zsi6ztlbTsmpQuIiwiSSBhbSBib3JlZC4iLDBdLFsi67OR7JuQ7JeQIOqwgCDrs7TshLjsmpQuIiwiWW91IHNob3VsZCBnbyBzZWUgYSBkb2N0b3IuIiwwXV19XX0sCjc6e3Q6IvCfkqwgVGhlIEhpa2luZyBDbHViIE5ld2JpZSIsIHN0ZXBzOlsKIHtiZzoibmF0dXJlIixzYzoi4puw77iP8J+ZgvCfkZ8iLG5hcjoiWW91IGpvaW5lZCBhIGxvY2FsIGhpa2luZyBjbHViIHRvIG1lZXQgcGVvcGxlLiBBdCB0aGUgdHJhaWxoZWFkLCBhbm90aGVyIG1lbWJlciBmYWxscyBpbiBzdGVwIGJlc2lkZSB5b3UuIix3aG86IvCfmYIg7KeA7IiYIixrcjoi7JWI64WV7ZWY7IS47JqUISDsspjsnYwg7Jik7IWo7KOgPyDsmKTripgg64Kg7JSoIOynhOynnCDsoovrhKTsmpQhIixlbjoiSGkhIEZpcnN0IHRpbWUgaGVyZSwgcmlnaHQ/IFRoZSB3ZWF0aGVyIGlzIGFtYXppbmcgdG9kYXkhIixjaDpbWyLrhKQsIOyymOydjOydtOyXkOyalCEg64Kg7JSo6rCAIOygleunkCDsoovslYTsmpQuIiwiWWVzLCBpdCBpcyBteSBmaXJzdCB0aW1lISBUaGUgd2VhdGhlciBpcyByZWFsbHkgbmljZS4iLDFdLFsi6rOE7IKw7IScIOyjvOyEuOyalC4iLCJUaGUgYmlsbCwgcGxlYXNlLiIsMF0sWyLtmZjrtogg64+87JqUPyIsIkNhbiBJIGdldCBhIHJlZnVuZD8iLDBdXX0sCiB7Ymc6Im5hdHVyZSIsc2M6IvCfjqjwn4618J+klCIsbmFyOiJUaGUgdHJhaWwgd2luZHMgdXAgZ2VudGx5LiBUaW1lIGZvciB0aGUgY2xhc3NpYyBnZXR0aW5nLXRvLWtub3cteW91IHF1ZXN0aW9uLiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuuTseyCsCDrp5Dqs6Ag7Leo66+46rCAIOutkOyYiOyalD8iLGVuOiJCZXNpZGVzIGhpa2luZywgd2hhdCBhcmUgeW91ciBob2JiaWVzPyIsY2g6W1si7KCA64qUIOyalOumrO2VmOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqULiDsp4DsiJgg7JSo64qU7JqUPyIsIkkgbGlrZSBjb29raW5nLiBIb3cgYWJvdXQgeW91LCBKaXN1PyIsMV0sWyLsnbTrsogg7Jet7J2AIOyeoOyLpOyeheuLiOuLpC4iLCJUaGlzIHN0b3AgaXMgSmFtc2lsLiIsMF0sWyLrtIntiKwg7ZWE7JqUIOyXhuyWtOyalC4iLCJJIGRvIG5vdCBuZWVkIGEgYmFnLiIsMF1dfSwKIHtiZzoibmF0dXJlIixzYzoi8J+YsvCfjZzwn5KsIixuYXI6IkhlciBleWVzIGxpZ2h0IHVwIOKAlCBzaGUgaXMgYSBjZXJ0aWZpZWQgZm9vZGllLiBZb3UgbWVudGlvbiB0aGUgbGVnZW5kYXJ5IG5vb2RsZSBob3VzZSB5b3UgZm91bmQuIix3aG86IvCfmYIg7KeA7IiYIixrcjoi7KeE7Kec7JqUPyDsoIDrj4Qg6rWt7IiYIOyZhOyghCDsoovslYTtlbTsmpQhIOqxsOq4sCDslrTrlJTsmIjsmpQ/IixlbjoiUmVhbGx5PyBJIExPVkUgbm9vZGxlcyB0b28hIFdoZXJlIGlzIHRoYXQgcGxhY2U/IixjaDpbWyLsi5zsnqUg6re87LKY7JeQIOyeiOyWtOyalC4g64uk7J2M7JeQIOqwmeydtCDqsIjrnpjsmpQ/IiwiSXQgaXMgbmVhciB0aGUgbWFya2V0LiBTaGFsbCB3ZSBnbyB0b2dldGhlciBzb21ldGltZT8iLDFdLFsi7Je07J20IOuCmOyalC4iLCJJIGhhdmUgYSBmZXZlci4iLDBdLFsi6rWQ7Ya17Lm065Oc66W8IOy2qeyghO2VtCDso7zshLjsmpQuIiwiUGxlYXNlIHJlY2hhcmdlIG15IHRyYW5zaXQgY2FyZC4iLDBdXX0sCiB7Ymc6ImRhd24iLHNjOiLwn4yE8J+knfCfk7EiLG5hcjoiU3VtbWl0IHJlYWNoZWQhIENpdHkgdmlldywgdmljdG9yeSBzbmFja3MsIGFuZCDigJQgZXZlbiBiZXR0ZXIg4oCUIGEgbmV3IGZyaWVuZC4iLHdobzoi8J+ZgiDsp4DsiJgiLGtyOiLsoovslYTsmpQhIOyXsOudveyymCDslYzroKQg7KO87IS47JqULiDso7zrp5DsnYAg7Ja065WM7JqUPyIsZW46IkRlYWwhIEdpdmUgbWUgeW91ciBudW1iZXIuIEhvdyBhYm91dCB0aGlzIHdlZWtlbmQ/IixjaDpbWyLso7zrp5Ag7KKL7JWE7JqUISDthqDsmpTsnbzsl5Ag66eM64KY6riw66GcIO2VtOyalC4iLCJUaGUgd2Vla2VuZCB3b3JrcyEgTGV0IHVzIG1lZXQgb24gU2F0dXJkYXkuIiwxXSxbIuyjhOyGoe2VmOyngOunjCDsnpgg66qw65287JqULiIsIlNvcnJ5LCBJIGRvIG5vdCByZWFsbHkga25vdy4iLDBdLFsi7JW96rWt7J20IOyWtOuUlOyXkCDsnojslrTsmpQ/IiwiV2hlcmUgaXMgYSBwaGFybWFjeT8iLDBdXX1dfSwKODp7dDoi8J+TsSBUaGUgRHlpbmcgUGhvbmUgQ3Jpc2lzIiwgc3RlcHM6Wwoge2JnOiJuaWdodCIsc2M6IvCfk7Hwn5SL8J+YsSIsbmFyOiJZb3UgYXJlIG1lZXRpbmcgSmlzdSBhdCA3LiBJdCBpcyA2OjQwLCB5b3UgYXJlIG9uIHRoZSBidXMsIGFuZCB5b3VyIHBob25lIHNob3dzIDIlIGJhdHRlcnkuIEl0IHJpbmdzIOKAlCBKaXN1ISIsd2hvOiLwn5OxIOyngOyImCIsa3I6IuyXrOuztOyEuOyalCEg7KeA6riIIOyWtOuUlOyYiOyalD8iLGVuOiJIZWxsbyEgV2hlcmUgYXJlIHlvdSBub3c/IixjaDpbWyLrsoTsiqTsl5DshJwg6rCA6rOgIOyeiOyWtOyalCEg7KGw6riIIOuKpuyWtOyalCwg66+47JWI7ZW07JqUISIsIkkgYW0gb24gdGhlIGJ1cyBvbiBteSB3YXkhIEkgYW0gYSBsaXR0bGUgbGF0ZSwgc29ycnkhIiwxXSxbIuydtOqxsCDsnoXslrQg67SQ64+EIOuPvOyalD8iLCJNYXkgSSB0cnkgdGhpcyBvbj8iLDBdLFsi67CY7LCsIOuNlCDso7zshLjsmpQuIiwiTW9yZSBzaWRlIGRpc2hlcywgcGxlYXNlLiIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLwn5SL4pqh8J+YsCIsbmFyOiIxJS4gWW91IHRhbGsgZmFzdCDigJQgdGhlcmUgaXMgb25lIGNydWNpYWwgdGhpbmcgdG8gc2F5IGJlZm9yZSB0aGUgc2NyZWVuIGdvZXMgZGFyay4iLHdobzoi8J+TsSDsp4DsiJgiLGtyOiLqtJzssK7slYTsmpQsIOyynOyynO2eiCDsmKTshLjsmpQhIOq3vOuNsCDrqqnshozrpqzqsIAg7JmcIOq3uOuemOyalD8iLGVuOiJObyBwcm9ibGVtLCB0YWtlIHlvdXIgdGltZSEgQnV0IHdoeSBkbyB5b3Ugc291bmQgc3RyZXNzZWQ/IixjaDpbWyLtnLTrjIDtj7Ag67Cw7YSw66as6rCAIOyXhuyWtOyalCEg7Lm07Y6YIOyVnuyXkOyEnCDquLDri6TroKQg7KO87IS47JqUISIsIk15IHBob25lIGJhdHRlcnkgaXMgZHlpbmchIFBsZWFzZSB3YWl0IGluIGZyb250IG9mIHRoZSBjYWbDqSEiLDFdLFsi7JW96rWt7J20IOyWtOuUlOyXkCDsnojslrTsmpQ/IiwiV2hlcmUgaXMgdGhlIHBoYXJtYWN5PyIsMF0sWyLsnbTqsowg642UIOyLuOyalC4iLCJUaGlzIG9uZSBpcyBjaGVhcGVyLiIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLwn5O18J+ajPCfpJ4iLG5hcjoiQmxhY2sgc2NyZWVuLiBObyBtYXAsIG5vIG1lc3NhZ2VzIOKAlCBvbGQgc2Nob29sIG5hdmlnYXRpb24gb25seS4gWW91IHNwb3QgYSBsYW5kbWFyazogdGhlIGJpZyBiYW5rIGZyb20gbGFzdCB3ZWVrISIsd2hvOiLwn6egICjsg53qsIEpIixrcjoiKOydgO2WieKApiDqt7gg7JiG7JeQIOyEnOygkOKApiDsubTtjpjripQg6re4IOyVnuydtOyVvCEpIixlbjoiKFRoZSBiYW5r4oCmIHRoZSBib29rc2hvcCBuZXh0IHRvIGl04oCmIHRoZSBjYWbDqSBpcyByaWdodCBpbiBmcm9udCEpIixjaDpbWyLsl6zquLDshJwg64K066Ck7IScIOqxuOyWtOqwgOyVvOqyoOyWtOyalCEiLCJJIHNob3VsZCBnZXQgb2ZmIGhlcmUgYW5kIHdhbGshIiwxXSxbIu2VmOujqOyXkCDshLgg67KIIOuTnOyEuOyalC4iLCJUYWtlIGl0IHRocmVlIHRpbWVzIGEgZGF5LiIsMF0sWyLrqocg7Iuc7JeQIOyytO2BrOyduO2VtOyalD8iLCJXaGF0IHRpbWUgaXMgY2hlY2staW4/IiwwXV19LAoge2JnOiJuaWdodCIsc2M6IuKYlfCfmIXwn5mMIixuYXI6Ijc6MDQgcG0uIFlvdSBqb2cgYXJvdW5kIHRoZSBjb3JuZXIg4oCUIEppc3UgaXMgdGhlcmUsIHR3byB3YXJtIGRyaW5rcyBpbiBoYW5kLCBsYXVnaGluZyBhdCB5b3VyIGRyYW1hdGljIGFycml2YWwuIix3aG86IvCfmYIg7KeA7IiYIixrcjoi7JmU64Sk7JqUISA067aEIOuKpuyXiOyWtOyalC4g7ZWY7ZWYISIsZW46IllvdSBtYWRlIGl0ISBGb3VyIG1pbnV0ZXMgbGF0ZS4gSGFoYSEiLGNoOltbIuuKpuyWtOyEnCDrr7jslYjtlbTsmpQhIOuLpOydjOyXkOuKlCDslYgg64qm7J2E6rKM7JqULCDslb3sho3tlbTsmpQhIiwiU29ycnkgZm9yIGJlaW5nIGxhdGUhIE5leHQgdGltZSBJIHdpbGwgbm90IGJlIGxhdGUsIEkgcHJvbWlzZSEiLDFdLFsi7J206rGwIOyWvOuniOyYiOyalD8iLCJIb3cgbXVjaCBpcyB0aGlzPyIsMF0sWyLtkZwg65GQIOyepSDso7zshLjsmpQuIiwiVHdvIHRpY2tldHMsIHBsZWFzZS4iLDBdXX1dfSwKOTp7dDoi8J+OrSBUaGUgUmFpbnkgRGF5IFJlc2N1ZSIsIHN0ZXBzOlsKIHtiZzoiZGF3biIsc2M6IvCfjKfvuI/wn5iU8J+TsSIsbmFyOiJTdW5kYXkgZXZlbmluZy4gSmlzdSB0ZXh0cyDigJQgaGVyIGJpZyBjb29raW5nIGNvbnRlc3QgZGlkIG5vdCBnbyB3ZWxsLiBTaGUgc291bmRzIGRvd24uIFlvdSBjYWxsIGhlciByaWdodCBhd2F5LiIsd2hvOiLwn5OxIOyngOyImCIsa3I6IuyXrOuztOyEuOyalOKApiDslYQsIOyViOuFle2VmOyEuOyalC4iLGVuOiJIZWxsb+KApiBvaCwgaGkuIixjaDpbWyLrqqnshozrpqzqsIAg7JWIIOyii+yVhCDrs7Tsl6zsmpQuIOq0nOywruyVhOyalD8iLCJZb3UgZG8gbm90IHNvdW5kIGdvb2QuIEFyZSB5b3Ugb2theT8iLDFdLFsi64yA67CVISDstpXtlZjtlbTsmpQhIiwiTm8gd2F5ISBDb25ncmF0dWxhdGlvbnMhIiwwXSxbIuu0ie2IrCDtlYTsmpTtlZjshLjsmpQ/IiwiRG8geW91IG5lZWQgYSBiYWc/IiwwXV19LAoge2JnOiJkYXduIixzYzoi8J+YlPCfpYjwn5KsIixuYXI6IlNoZSBnb3Qgc2Vjb25kIHBsYWNlIOKAlCBvbmUgcG9pbnQgYmVoaW5kIHRoZSB3aW5uZXIuIFNvIGNsb3NlIGl0IGh1cnRzLiIsd2hvOiLwn5OxIOyngOyImCIsa3I6IjHsoJAg7LCo7J2066GcIDLrk7Eg7ZaI7Ja07JqU4oCmIOuEiOustCDslYTsiazsm4zsmpQuIixlbjoiSSBnb3Qgc2Vjb25kIHBsYWNlIGJ5IG9uZSBwb2ludOKApiBpdCBpcyBzdWNoIGEgcGl0eS4iLGNoOltbIuyXkOydtCwgMuuTseuPhCDrjIDri6jtlbTsmpQhIOygleunkCDsnpjtlojslrTsmpQhIiwiSGV5LCBzZWNvbmQgcGxhY2UgaXMgYW1hemluZyEgWW91IGRpZCByZWFsbHkgd2VsbCEiLDFdLFsi66qHIO2YuOyEoOydtOyXkOyalD8iLCJXaGljaCBsaW5lIGlzIGl0PyIsMF0sWyLtj6zsnqXtlbQg7KO87IS47JqULiIsIlRvIGdvLCBwbGVhc2UuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn42c8J+SqvCfmYIiLG5hcjoiWW91IGtub3cgZXhhY3RseSB3aGF0IGZpeGVzIGEgaGFyZCBkYXkuIFlvdSBuYW1lIHRoZSBwbGFjZTsgc2hlIGNhbm5vdCByZXNpc3QuIix3aG86IvCfk7Eg7KeA7IiYIixrcjoi7ZWY7ZWYLCDqs6Drp4jsm4zsmpQuIOq4sOu2hOydtCDsooAg64KY7JWE7KGM7Ja07JqULiIsZW46IkhhaGEsIHRoYW5rIHlvdS4gSSBmZWVsIGEgYml0IGJldHRlciBub3cuIixjaDpbWyLrsLDqs6DtlITso6A/IOq1reyImCDrqLnsnLzrn6wg6rCA7JqUISDsoJzqsIAg7IK06rKM7JqULiIsIllvdSBhcmUgaHVuZ3J5LCByaWdodD8gTGV0IHVzIGdldCBub29kbGVzISBNeSB0cmVhdC4iLDFdLFsi7Jik66W47Kq97Jy866GcIOuPhOyEuOyalC4iLCJUdXJuIHJpZ2h0LiIsMF0sWyLrsKkg7YKk66W8IOyeg+yWtOuyhOuguOyWtOyalC4iLCJJIGxvc3QgdGhlIHJvb20ga2V5LiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+NnPCfmITwn6WCIixuYXI6Ik92ZXIgc3RlYW1pbmcgYm93bHMsIHRoZSBjb250ZXN0IGJlY29tZXMgYSBmdW5ueSBzdG9yeSBpbnN0ZWFkIG9mIGEgc2FkIG9uZS4gTmV4dCB5ZWFyLCBnb2xkLiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuuCtOuFhOyXkOuKlCDqvK0gMeuTsSDtlaAg6rGw7JiI7JqUISIsZW46Ik5leHQgeWVhciBJIHdpbGwgZGVmaW5pdGVseSB3aW4gZmlyc3QgcGxhY2UhIixjaDpbWyLri7nsl7DtlZjso6AhIO2ZlOydtO2MhSEg7KCA64qUIOydkeybkO2VoOqyjOyalC4iLCJPZiBjb3Vyc2UhIEZpZ2h0aW5nISBJIHdpbGwgYmUgY2hlZXJpbmcgZm9yIHlvdS4iLDFdLFsi7ZiE6riI66eMIOuPvOyalD8iLCJJcyBpdCBjYXNoIG9ubHk/IiwwXSxbIuyngO2VmOyyoOyXreydtCDslrTrlJTsmIjsmpQ/IiwiV2hlcmUgaXMgdGhlIHN1YndheSBzdGF0aW9uPyIsMF1dfV19LAoxMDp7dDoi8J+kkiBUaGUgQ29udmVuaWVuY2UgU3RvcmUgRG9jdG9yIiwgc3RlcHM6Wwoge2JnOiJkYXduIixzYzoi8J+kp/Cfm4/vuI/wn4yh77iPIixuYXI6IllvdSB3YWtlIHVwIHdpdGggYSBidXJuaW5nIHRocm9hdCBhbmQgYSBoZWF2eSBoZWFkLiBUaGUgaGlraW5nIHRyaXAgaXMgT0ZGLiBUaW1lIHRvIGZpbmQgbWVkaWNpbmUg4oCUIHRoZSBwaGFybWFjeSBmaXJzdC4iLHdobzoi4pqV77iPIOyVveyCrCIsa3I6IuyWtOyEnCDsmKTshLjsmpQuIOyWtOuUlOqwgCDrtojtjrjtlZjshLjsmpQ/IixlbjoiV2VsY29tZS4gV2hhdCBzZWVtcyB0byBiZSB0aGUgcHJvYmxlbT8iLGNoOltbIuyWtOygnOu2gO2EsCDrqqnsnbQg7JWE7ZSE6rOgIOyXtOydtCDrgpjsmpQuIiwiU2luY2UgeWVzdGVyZGF5IG15IHRocm9hdCBodXJ0cyBhbmQgSSBoYXZlIGEgZmV2ZXIuIiwxXSxbIuyCrOqxsOumrOyXkOyEnCDsmbzsqr3snLzroZwg64+E7IS47JqULiIsIlR1cm4gbGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uLiIsMF0sWyLshKDrrLwg7Y+s7J6lIOuPvOyalD8iLCJDYW4geW91IGdpZnQtd3JhcCBpdD8iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IuKale+4j/CfkorinZMiLG5hcjoiVGhlIHBoYXJtYWNpc3Qgbm9kcyBrbm93aW5nbHkgYW5kIHJlYWNoZXMgZm9yIGEgYm94LiBCdXQgeW91IHJlbWVtYmVyIHNvbWV0aGluZyBpbXBvcnRhbnQuIix3aG86IuKale+4jyDslb3sgqwiLGtyOiLqsJDquLDrhKTsmpQuIOydtCDslb3snYQg65Oc7IS47JqULiIsZW46Ikl0IGlzIGEgY29sZC4gVGFrZSB0aGlzIG1lZGljaW5lLiIsY2g6W1si6rCQ7IKs7ZWp64uI64ukLiDqt7jrn7DrjbAg7KCA64qUIOuVhey9qSDslYzroIjrpbTquLDqsIAg7J6I7Ja07JqULiDqtJzssK7slYTsmpQ/IiwiVGhhbmsgeW91LiBCdXQgSSBoYXZlIGEgcGVhbnV0IGFsbGVyZ3kuIElzIGl0IG9rYXk/IiwxXSxbIuu0ie2IrCDtlYTsmpQg7JeG7Ja07JqULiIsIkkgZG8gbm90IG5lZWQgYSBiYWcuIiwwXSxbIuqwmeydtCDrk7HsgrAg6rCI656Y7JqUPyIsIldhbnQgdG8gZ28gaGlraW5nIHRvZ2V0aGVyPyIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+SivCfk53wn5WQIixuYXI6IlNhZmUgdG8gdGFrZS4gTm93IOKAlCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBldmVyeSBwaGFybWFjaXN0IGV4cGVjdHMuIix3aG86IuKale+4jyDslb3sgqwiLGtyOiLrhKQsIOq0nOywruyVhOyalC4g7Iud7IKsIO2bhOyXkCDrk5zshLjsmpQuIixlbjoiWWVzLCBpdCBpcyBmaW5lLiBUYWtlIGl0IGFmdGVyIG1lYWxzLiIsY2g6W1si7ZWY66Oo7JeQIOuqhyDrsogg66i57Ja07JW8IO2VtOyalD8iLCJIb3cgbWFueSB0aW1lcyBhIGRheSBzaG91bGQgSSB0YWtlIGl0PyIsMV0sWyLslrTripAg64KY65287JeQ7IScIOyZlOyWtOyalD8iLCJXaGljaCBjb3VudHJ5IGFyZSB5b3UgZnJvbT8iLDBdLFsi7J206rGwIOuEiOustCDsmIjru5DsmpQuIiwiVGhpcyBpcyBzbyBwcmV0dHkuIiwwXV19LAoge2JnOiJuaWdodCIsc2M6IvCfm4/vuI/wn4218J+YtCIsbmFyOiJUaHJlZSB0aW1lcyBhIGRheSwgYWZ0ZXIgbWVhbHMsIGFuZCDigJQgdGhlIHBoYXJtYWNpc3QgaW5zaXN0cyDigJQgUkVTVC4gSmlzdSB0ZXh0czogJ0dldCBiZXR0ZXIgb3IgZWxzZSEg8J+YpCciLHdobzoi8J+TsSDsp4DsiJgiLGtyOiLslb0g66i57JeI7Ja07JqUPyDsmKTripjsnYAg7ZG5IOyJrOyEuOyalCEiLGVuOiJEaWQgeW91IHRha2UgdGhlIG1lZGljaW5lPyBSZXN0IHdlbGwgdG9kYXkhIixjaDpbWyLrhKQsIOuoueyXiOyWtOyalC4g6rGx7KCV7ZWY7KeAIOuniOyEuOyalC4g7ZG5IOyJtOqyjOyalCEiLCJZZXMsIEkgdG9vayBpdC4gRG8gbm90IHdvcnJ5LiBJIHdpbGwgcmVzdCB3ZWxsISIsMV0sWyLrmJAg66eM64KY7JqUISIsIlNlZSB5b3UgYWdhaW4hIiwwXSxbIuydtCDrsoTsiqTqsIAg7Iuc7LKt7JeQIOqwgOyalD8iLCJEb2VzIHRoaXMgYnVzIGdvIHRvIENpdHkgSGFsbD8iLDBdXX1dfSwKMTE6e3Q6IvCfp7MgVGhlIFNlYXNpZGUgR3Vlc3Rob3VzZSIsIHN0ZXBzOlsKIHtiZzoibmF0dXJlIixzYzoi8J+MivCfmonwn6ezIixuYXI6IlJlY292ZXJlZCBhbmQgcmVzdGxlc3MsIHlvdSBib29rIGEgd2Vla2VuZCBieSB0aGUgc2VhLiBUaGUgZ3Vlc3Rob3VzZSBzaXRzIG9uIGEgaGlsbCDigJQgdGhlIG93bmVyIHdhdmVzIGZyb20gdGhlIHBvcmNoLiIsd2hvOiLwn5mCIOyCrOyepeuLmCIsa3I6IuyWtOyEnCDsmKTshLjsmpQhIOyYiOyVve2VmOyFqOyWtOyalD8iLGVuOiJXZWxjb21lISBEbyB5b3UgaGF2ZSBhIHJlc2VydmF0aW9uPyIsY2g6W1si64SkLCDsmKjrnbzsnbjsnLzroZwg7JiI7JW97ZaI7Ja07JqULiDssrTtgazsnbjtlZjqs6Ag7Iu27Ja07JqULiIsIlllcywgSSByZXNlcnZlZCBvbmxpbmUuIEkgd291bGQgbGlrZSB0byBjaGVjayBpbi4iLDFdLFsi642cIOunteqyjCDtlaAg7IiYIOyeiOyWtOyalD8iLCJDYW4geW91IG1ha2UgaXQgbGVzcyBzcGljeT8iLDBdLFsi6rK97LCw7JeQIOyLoOqzoO2WiOyWtOyalC4iLCJJIHJlcG9ydGVkIGl0IHRvIHRoZSBwb2xpY2UuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn5SR8J+TtvCfmYIiLG5hcjoiUm9vbSAyMDMsIG9jZWFuIHNpZGUuIEJlZm9yZSBzaGUgZGlzYXBwZWFycywgZ3JhYiB0aGUgdHdvIGZhY3RzIGV2ZXJ5IHRyYXZlbGVyIG5lZWRzLiIsd2hvOiLwn5mCIOyCrOyepeuLmCIsa3I6IuuwqeydgCAyMDPtmLjsmIjsmpQuIO2VhOyalO2VnCDqsbAg7J6I7Jy87IS47JqUPyIsZW46IllvdXIgcm9vbSBpcyAyMDMuIERvIHlvdSBuZWVkIGFueXRoaW5nPyIsY2g6W1si64SkISDsmYDsnbTtjIzsnbQg67mE67CA67KI7Zi46rCAIOutkOyYiOyalD8g6re466as6rOgIOyhsOyLneydgCDrqocg7Iuc7JeQIOyLnOyeke2VtOyalD8iLCJZZXMhIFdoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/IEFuZCB3aGF0IHRpbWUgZG9lcyBicmVha2Zhc3Qgc3RhcnQ/IiwxXSxbIuuUsOuhnCDqs4TsgrDtlbQg7KO87IS47JqULiIsIlNlcGFyYXRlIGJpbGxzLCBwbGVhc2UuIiwwXSxbIuyggCDsooAg64+E7JmA7KO87IS47JqUISIsIlBsZWFzZSBoZWxwIG1lISIsMF1dfSwKIHtiZzoibmF0dXJlIixzYzoi8J+MhfCfk7jwn6SzIixuYXI6IlRoZSBzdW5zZXQgb3ZlciB0aGUgd2F0ZXIgaXMgdW5yZWFsLiBBIGNvdXBsZSB3YWxrcyBieSDigJQgcGVyZmVjdCBwaG90byBvcHBvcnR1bml0eSAoZm9yIHlvdSwgYnkgdGhlbSkuIix3aG86IvCfmrYg7Jes7ZaJ6rCdIixrcjoi64SkPyDrrZDrnbzqs6Ag7ZWY7IWo7Ja07JqUPyIsZW46Illlcz8gV2hhdCBkaWQgeW91IHNheT8iLGNoOltbIuyCrOynhCDsooAg7LCN7Ja0IOyjvOyLnOqyoOyWtOyalD8g6rK97LmY6rCAIOuEiOustCDsoovslYTshJzsmpQhIiwiQ291bGQgeW91IHRha2UgYSBwaG90byBmb3IgbWU/IFRoZSB2aWV3IGlzIHNvIGJlYXV0aWZ1bCEiLDFdLFsi7JW97IaN7J2EIOy3qOyGjO2VtOyVvCDtlbTsmpQuIiwiSSBoYXZlIHRvIGNhbmNlbCB0aGUgcGxhbnMuIiwwXSxbIuy5tOuTnOuhnCDtlaDqsozsmpQuIiwiSSB3aWxsIHBheSBieSBjYXJkLiIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLwn6aR8J+Nve+4j+KtkCIsbmFyOiJCYWNrIGF0IHRoZSBndWVzdGhvdXNlLCB0aGUgb3duZXIgaXMgZ3JpbGxpbmcgc29tZXRoaW5nIHRoYXQgc21lbGxzIGluY3JlZGlibGUuIE9uZSBsYXN0IHF1ZXN0aW9uIGJlZm9yZSBkaW5uZXLigKYiLHdobzoi8J+ZgiDsgqzsnqXri5giLGtyOiLrgrTsnbzsnYAg662QIO2VoCDqsbDsmIjsmpQ/IixlbjoiV2hhdCB3aWxsIHlvdSBkbyB0b21vcnJvdz8iLGNoOltbIuq3vOyymOyXkCDsnKDrqoXtlZwg6rSA6rSR7KeAIOyeiOyWtOyalD8g7LaU7LKc7ZW0IOyjvOyEuOyalCEiLCJBcmUgdGhlcmUgZmFtb3VzIHNpZ2h0cyBuZWFyYnk/IFBsZWFzZSByZWNvbW1lbmQgc29tZSEiLDFdLFsi7KCT6rCA6529IO2VmOuCmCDrjZQg7KO87IS47JqULiIsIk9uZSBtb3JlIHBhaXIgb2YgY2hvcHN0aWNrcywgcGxlYXNlLiIsMF0sWyLrrLjsnpDroZwg67O064K0IOyjvOyEuOyalC4iLCJTZW5kIGl0IGJ5IHRleHQsIHBsZWFzZS4iLDBdXX1dfSwKMTI6e3Q6IvCfhpggVGhlIExvc3QgV2FsbGV0IE1pcmFjbGUiLCBzdGVwczpbCiB7Ymc6ImNpdHkiLHNjOiLwn5Gb8J+YsfCfmociLG5hcjoiQmFjayBpbiB0aGUgY2l0eSwgeW91IHJlYWNoIGZvciB5b3VyIHdhbGxldCBhdCB0aGUgdHVybnN0aWxlIOKAlCBHT05FLiBDYXJkcywgY2FzaCwgZXZlcnl0aGluZy4gRGVlcCBicmVhdGguIFlvdSBhcHByb2FjaCBhIHN0YXRpb24gd29ya2VyLiIsd2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCIsa3I6IuustOyKqCDsnbzsnbTshLjsmpQ/IixlbjoiV2hhdCBpcyB0aGUgbWF0dGVyPyIsY2g6W1si7KCAIOyigCDrj4TsmYDso7zshLjsmpQhIOyngO2VmOyyoOyXkOyEnCDsp4DqsJHsnYQg7J6D7Ja067KE66C47Ja07JqULiIsIlBsZWFzZSBoZWxwIG1lISBJIGxvc3QgbXkgd2FsbGV0IG9uIHRoZSBzdWJ3YXkuIiwxXSxbIuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7KO87IS47JqULiIsIkFuIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIiwwXSxbIuuCtOuFhOyXkOuKlCDqvK0gMeuTsSDtlaAg6rGw7JiI7JqULiIsIk5leHQgeWVhciBJIHdpbGwgd2luIGZpcnN0IHBsYWNlLiIsMF1dfSwKIHtiZzoiY2l0eSIsc2M6IvCfl6PvuI/wn5Ko8J+YtSIsbmFyOiJIZSByYXR0bGVzIG9mZiBpbnN0cnVjdGlvbnMgYXQgbmF0aXZlIHNwZWVkLiBZb3UgY2F0Y2ggbWF5YmUgdGhyZWUgd29yZHMuIERvIG5vdCBwYW5pYyDigJQgeW91IGtub3cgdGhlIHJlc2N1ZSBwaHJhc2UuIix3aG86IvCfp5HigI3inIjvuI8g7Jet66y07JuQIixrcjoi7Jyg7Iuk66y87IS87YSw6rCA7KCA7Kq97JeQ7J6I64qU642w7KeA6riI7J2A4oCmIixlbjoiKFZlcnkgZmFzdCkgVGhlIGxvc3QtYW5kLWZvdW5kIGlzIG92ZXIgdGhlcmUgYnV0IHJpZ2h0IG5vd+KApiIsY2g6W1si7KOE7Iah7ZWY7KeA66eMLCDsspzsspztnogg66eQ7ZW0IOyjvOyEuOyalC4g7ZWc6rWt7Ja066W8IOyhsOq4iCDtlaAg7IiYIOyeiOyWtOyalC4iLCJTb3JyeSwgYnV0IHBsZWFzZSBzcGVhayBzbG93bHkuIEkgc3BlYWsgYSBsaXR0bGUgS29yZWFuLiIsMV0sWyLrjIDrsJUhIOynhOynnOyalD8iLCJObyB3YXkhIFJlYWxseT8iLDBdLFsi7ISk7YOVIOu5vCDso7zshLjsmpQuIiwiTm8gc3VnYXIsIHBsZWFzZS4iLDBdXX0sCiB7Ymc6ImNpdHkiLHNjOiLwn5Ci8J+ZgvCfk50iLG5hcjoiSGUgc21pbGVzLCBzbG93cyB3YXkgZG93biwgYW5kIHdyaXRlcyB0aGUgbG9zdC1hbmQtZm91bmQgbnVtYmVyIG9uIGEgc2xpcCBvZiBwYXBlci4gVGhpcyB0aW1lLCBldmVyeSB3b3JkIGxhbmRzLiIsd2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCIsa3I6IuycoOyLpOusvOyEvO2EsOyXkCDsoITtmZTtlbQg67O07IS47JqULiDrqocg7Zi47ISg7JeQ7IScIOyeg+yWtOuyhOuguOyWtOyalD8iLGVuOiJDYWxsIHRoZSBsb3N0LWFuZC1mb3VuZCBjZW50ZXIuIE9uIHdoaWNoIGxpbmUgZGlkIHlvdSBsb3NlIGl0PyIsY2g6W1siMu2YuOyEoOydtOyXkOyalC4gMzDrtoQg7KCE7JeQ7JqULiDsoJXrp5Ag6rCQ7IKs7ZWp64uI64ukISIsIkxpbmUgMiwgYWJvdXQgMzAgbWludXRlcyBhZ28uIFRoYW5rIHlvdSBzbyBtdWNoISIsMV0sWyLrp6TsmrQg6rWt7IiYIOyjvOyEuOyalC4iLCJTcGljeSBub29kbGVzLCBwbGVhc2UuIiwwXSxbIuyCrOynhCDsooAg7LCN7Ja0IOyjvOyEuOyalC4iLCJQbGVhc2UgdGFrZSBhIHBob3RvIGZvciBtZS4iLDBdXX0sCiB7Ymc6ImRhd24iLHNjOiLwn5Gb4pyo8J+ZjCIsbmFyOiJUd2VudHkgbWludXRlcyBsYXRlciwgdGhlIHBob25lIGNhbGw6IEZPVU5ELiBDYXNoIHVudG91Y2hlZCDigJQgc29tZW9uZSB0dXJuZWQgaXQgaW4gd2l0aGluIG1pbnV0ZXMuIEtvcmVhLCB5b3UgYmVhdXR5LiIsd2hvOiLwn5OeIOycoOyLpOusvOyEvO2EsCIsa3I6IuyngOqwkSDssL7slZjsirXri4jri6QhIOyLoOu2hOymnSDqsIDsp4Dqs6Ag7Jik7IS47JqULiIsZW46IldlIGZvdW5kIHlvdXIgd2FsbGV0ISBCcmluZyB5b3VyIElEIHRvIHBpY2sgaXQgdXAuIixjaDpbWyLsoJXrp5DsmpQ/IOqwkOyCrO2VqeuLiOuLpCEg7KeA6riIIOuwlOuhnCDqsIjqsozsmpQhIiwiUmVhbGx5PyBUaGFuayB5b3UhIEkgd2lsbCBjb21lIHJpZ2h0IG5vdyEiLDFdLFsi7JWIIOunteqyjCDtlbQg7KO87IS47JqULiIsIk5vdCBzcGljeSwgcGxlYXNlLiIsMF0sWyLso7zrp5Dsl5Ag67O07Ya1IOutkCDtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgdXN1YWxseSBkbyBvbiB3ZWVrZW5kcz8iLDBdXX1dfQp9OwpMRVNTT05TLmZvckVhY2goTCA9PiBMLnN0b3J5ID0gU1RPUklFU1tMLm5dKTsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVEFMS1Mg4oCUIHNwb2tlbiBjb252ZXJzYXRpb24gcGVyIHF1ZXN0IChhbGwgb3JpZ2luYWwpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmNvbnN0IFRBTEtTID0gewoxOnt3aG86IvCfmYIg7ZWY64KYICh5b3VyIG5laWdoYm9yKSIsIHQ6Ik1lZXRpbmcgeW91ciBuZXcgbmVpZ2hib3IiLCB0dXJuczpbCiB7cToi7JWI64WV7ZWY7IS47JqUISDsspjsnYwg67WZ64qUIOu2hOydtOuEpOyalC4iLHFFbjoiSGVsbG8hIEkgaGF2ZSBub3Qgc2VlbiB5b3UgYmVmb3JlLiIsdGFzazoiU2F5IGhlbGxvIGFuZCB0aGF0IHlvdSBhcmUgZ2xhZCB0byBtZWV0IGhlci4iLGE6IuyViOuFle2VmOyEuOyalCEg66eM64KY7IScIOuwmOqwkeyKteuLiOuLpC4iLGFFbjoiSGVsbG8hIEdsYWQgdG8gbWVldCB5b3UuIixhbHQ6WyLslYjrhZXtlZjshLjsmpQsIOuwmOqwkeyKteuLiOuLpC4iXX0sCiB7cToi7J2066aE7J20IOutkOyYiOyalD8iLHFFbjoiV2hhdCBpcyB5b3VyIG5hbWU/Iix0YXNrOiJTYXkgJ0kgYW0g4oCmJyDigJQgdXNlIHlvdXIgb3duIG5hbWUhIixhOiLsoIDripQg7Yaw7J207JeQ7JqULiIsYUVuOiJJIGFtIFRvbS4gKHVzZSBZT1VSIG5hbWUpIixhbHQ6WyLsoJwg7J2066aE7J2AIO2GsOydtOyXkOyalC4iXX0sCiB7cToi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IixxRW46IldoaWNoIGNvdW50cnkgYXJlIHlvdSBmcm9tPyIsdGFzazoiU2F5IHdoaWNoIGNvdW50cnkgeW91IGNhbWUgZnJvbS4iLGE6Iuy6kOuCmOuLpOyXkOyEnCDsmZTslrTsmpQuIixhRW46IkkgY2FtZSBmcm9tIENhbmFkYS4gKHVzZSBZT1VSIGNvdW50cnkpIixhbHQ6WyLsoIDripQg7LqQ64KY64ukIOyCrOuejOydtOyXkOyalC4iLCLrsqDtirjrgqjsl5DshJwg7JmU7Ja07JqULiJdfSwKIHtxOiLsmrDsmYAsIOuwmOqwgOybjOyalCEg7ZWc6rWt7J2AIOyymOydjOydtOyXkOyalD8iLHFFbjoiV293LCBuaWNlISBJcyB0aGlzIHlvdXIgZmlyc3QgdGltZSBpbiBLb3JlYT8iLHRhc2s6IlNheSB5ZXMsIGFuZCBhc2sgaGVyIHRvIHRha2UgY2FyZSBvZiB5b3UuIixhOiLrhKQsIOyymOydjOydtOyXkOyalC4g7J6YIOu2gO2DgeuTnOumveuLiOuLpCEiLGFFbjoiWWVzLCBpdCBpcyBteSBmaXJzdCB0aW1lLiBQbGVhc2UgdGFrZSBjYXJlIG9mIG1lISIsYWx0Olsi64SkLCDsnpgg67aA7YOB65Oc66a964uI64ukLiJdfSwKIHtxOiLtlYTsmpTtlZwg6rGwIOyeiOycvOuptCDrp5DtlbTsmpQuIOq3uOufvCDrmJAg67SQ7JqUISIscUVuOiJUZWxsIG1lIGlmIHlvdSBuZWVkIGFueXRoaW5nLiBTZWUgeW91IGFyb3VuZCEiLHRhc2s6IlRoYW5rIGhlciBhbmQgc2F5IHNlZSB5b3UgYWdhaW4uIixhOiLqsJDsgqztlanri4jri6QuIOuYkCDrp4zrgpjsmpQhIixhRW46IlRoYW5rIHlvdS4gU2VlIHlvdSBhZ2FpbiEiLGFsdDpbIuqwkOyCrO2VqeuLiOuLpC4g7JWI64WV7Z6IIOqwgOyEuOyalCEiXX1dfSwKMjp7d2hvOiLwn6eR4oCN8J+NsyDrsJTrpqzsiqTtg4AgKGJhcmlzdGEpIiwgdDoiT3JkZXJpbmcgeW91ciBtb3JuaW5nIGNvZmZlZSIsIHR1cm5zOlsKIHtxOiLslrTshJwg7Jik7IS47JqUISDso7zrrLjtlZjsi5zqsqDslrTsmpQ/IixxRW46IldlbGNvbWUhIFdvdWxkIHlvdSBsaWtlIHRvIG9yZGVyPyIsdGFzazoiT3JkZXIgb25lIGljZWQgYW1lcmljYW5vLiIsYToi7JWE7J207IqkIOyVhOuplOumrOy5tOuFuCDtlZwg7J6UIOyjvOyEuOyalC4iLGFFbjoiT25lIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIixhbHQ6WyLslYTsnbTsiqQg7JWE66mU66as7Lm064W4IOyjvOyEuOyalC4iXX0sCiB7cToi7IKs7J207KaI64qUIOyWtOuWu+qyjCDrk5zrprTquYzsmpQ/IixxRW46IldoYXQgc2l6ZSB3b3VsZCB5b3UgbGlrZT8iLHRhc2s6IlNheSB5b3Ugd2lsbCB0YWtlIHRoZSBsYXJnZSBzaXplLiIsYToi7YGwIOyCrOydtOymiOuhnCDtlaDqsozsmpQuIixhRW46Ikkgd2lsbCB0YWtlIHRoZSBsYXJnZSBzaXplLiIsYWx0Olsi7YGwIOqxsOuhnCDso7zshLjsmpQuIl19LAoge3E6IuuLpOuluCDqsbQg7ZWE7JqUIOyXhuycvOyEuOyalD8iLHFFbjoiQW55dGhpbmcgZWxzZT8iLHRhc2s6Ik9yZGVyIG9uZSBjaGVlc2VjYWtlIHRvby4iLGE6Iuy5mOymiCDsvIDsnbTtgazrj4Qg7ZWY64KYIOyjvOyEuOyalC4iLGFFbjoiT25lIGNoZWVzZWNha2UgdG9vLCBwbGVhc2UuIixhbHQ6WyLsvIDsnbTtgawg7ZWY64KYIOyjvOyEuOyalC4iXX0sCiB7cToi65Oc7Iuc6rOgIOqwgOyEuOyalCwg7JWE64uI66m0IO2PrOyepeydtOyEuOyalD8iLHFFbjoiRm9yIGhlcmUgb3IgdG8gZ28/Iix0YXNrOiJTYXkgdG8gZ28sIHBsZWFzZS4iLGE6Iu2PrOyepe2VtCDso7zshLjsmpQuIixhRW46IlRvIGdvLCBwbGVhc2UuIixhbHQ6WyLtj6zsnqXsnbTsmpQuIl19LAoge3E6IuunjOyynCDsm5DsnoXri4jri6QuIixxRW46IlRoYXQgaXMgMTEsMDAwIHdvbi4iLHRhc2s6IlNheSB5b3Ugd2lsbCBwYXkgYnkgY2FyZC4iLGE6Iuy5tOuTnOuhnCDtlaDqsozsmpQuIixhRW46Ikkgd2lsbCBwYXkgYnkgY2FyZC4iLGFsdDpbIuy5tOuTnOuhnCDqs4TsgrDtlaDqsozsmpQuIl19XX0sCjM6e3dobzoi8J+ZiyDsgqzsnqXri5ggKHJlc3RhdXJhbnQgb3duZXIpIiwgdDoiRGlubmVyIGF0IGEgbG9jYWwgcmVzdGF1cmFudCIsIHR1cm5zOlsKIHtxOiLslrTshJwg7Jik7IS47JqUISDrqocg67aE7J207IS47JqUPyIscUVuOiJXZWxjb21lISBIb3cgbWFueSBwZW9wbGU/Iix0YXNrOiJTYXkgdHdvIHBlb3BsZS4iLGE6IuuRkCDrqoXsnbTsl5DsmpQuIixhRW46IlR3byBwZW9wbGUuIixhbHQ6WyLrkZAg66qF7J207JqULiJdfSwKIHtxOiLrqZTribQg7Jes6riwIOyeiOyWtOyalC4g662QIOuTnOumtOq5jOyalD8iLHFFbjoiSGVyZSBpcyB0aGUgbWVudS4gV2hhdCBjYW4gSSBnZXQgeW91PyIsdGFzazoiQXNrIGhlciB0byByZWNvbW1lbmQgc29tZXRoaW5nLiIsYToi7LaU7LKc7ZW0IOyjvOyEuOyalC4g662Q6rCAIOygnOydvCDrp5vsnojslrTsmpQ/IixhRW46IlBsZWFzZSByZWNvbW1lbmQgc29tZXRoaW5nLiBXaGF0IGlzIHRoZSBiZXN0PyIsYWx0Olsi7LaU7LKc7ZW0IOyjvOyEuOyalC4iXX0sCiB7cToi66ek7Jq0IOq1reyImOqwgCDsoJzsnbwg7J246riwIOyeiOyWtOyalCEiLHFFbjoiVGhlIHNwaWN5IG5vb2RsZXMgYXJlIHRoZSBtb3N0IHBvcHVsYXIhIix0YXNrOiJBc2sgaWYgaXQgaXMgdmVyeSBzcGljeS4iLGE6IuunjuydtCDrp6Tsm4zsmpQ/IixhRW46IklzIGl0IHZlcnkgc3BpY3k/IixhbHQ6WyLqt7jqsbAg66ek7JuM7JqUPyJdfSwKIHtxOiLsobDquIgg66ek7JuM7JqULiDrjZwg66e16rKMIO2VtCDrk5zrprTquYzsmpQ/IixxRW46Ikl0IGlzIGEgbGl0dGxlIHNwaWN5LiBTaGFsbCBJIG1ha2UgaXQgbWlsZGVyPyIsdGFzazoiU2F5IHllcyBwbGVhc2UsIGFuZCBhc2sgZm9yIHdhdGVyIHRvby4iLGE6IuuEpCwg6re466as6rOgIOusvCDsooAg7KO87IS47JqULiIsYUVuOiJZZXMsIGFuZCBzb21lIHdhdGVyIHBsZWFzZS4iLGFsdDpbIuuEpCwg66y864+EIOyjvOyEuOyalC4iXX0sCiB7cToi66eb7J6I6rKMIOuTnOyFqOyWtOyalD8iLHFFbjoiRGlkIHlvdSBlbmpveSB0aGUgbWVhbD8iLHRhc2s6IlNheSBpdCB3YXMgcmVhbGx5IGRlbGljaW91cyBhbmQgYXNrIGZvciB0aGUgYmlsbC4iLGE6IuygleunkCDrp5vsnojsl4jslrTsmpQhIOqzhOyCsOyEnCDso7zshLjsmpQuIixhRW46Ikl0IHdhcyByZWFsbHkgZGVsaWNpb3VzISBUaGUgYmlsbCwgcGxlYXNlLiIsYWx0Olsi66eb7J6I7JeI7Ja07JqULiDqs4TsgrDtlaDqsozsmpQuIl19XX0sCjQ6e3dobzoi8J+atiDtlonsnbggKHBhc3NlcmJ5KSIsIHQ6IkZpbmRpbmcgdGhlIGJvb2tzaG9wIiwgdHVybnM6Wwoge3E6IuuEpD8g66y07IqoIOydvOydtOyEuOyalD8iLHFFbjoiWWVzPyBXaGF0IGlzIGl0PyIsdGFzazoiQXNrIHdoZXJlIEhhbmJpdCBCb29rc2hvcCBpcy4iLGE6Iu2VnOu5myDshJzsoJDsnbQg7Ja065SU7JiI7JqUPyIsYUVuOiJXaGVyZSBpcyBIYW5iaXQgQm9va3Nob3A/IixhbHQ6WyLshJzsoJDsnbQg7Ja065SU7JeQIOyeiOyWtOyalD8iXX0sCiB7cToi7J20IOq4uOuhnCDsrYkg6rCA7IS47JqULiA167aE7K+kIOqxuOugpOyalC4iLHFFbjoiR28gc3RyYWlnaHQgYWxvbmcgdGhpcyByb2FkLiBJdCB0YWtlcyBhYm91dCA1IG1pbnV0ZXMuIix0YXNrOiJBc2sgaWYgaXQgaXMgY2xvc2UgdG8gaGVyZS4iLGE6IuyXrOq4sOyEnCDqsIDquYzsm4zsmpQ/IixhRW46IklzIGl0IGNsb3NlIHRvIGhlcmU/IixhbHQ6WyLqsIDquYzsm4zsmpQ/Il19LAoge3E6IuuEpCwg6rCA6rmM7JuM7JqULiDsgqzqsbDrpqzsl5DshJwg7Jm87Kq97Jy866GcIOuPhOyEuOyalC4iLHFFbjoiWWVzLCBpdCBpcyBjbG9zZS4gVHVybiBsZWZ0IGF0IHRoZSBpbnRlcnNlY3Rpb24uIix0YXNrOiJDb25maXJtOiBsZWZ0IGF0IHRoZSBpbnRlcnNlY3Rpb24/IixhOiLsgqzqsbDrpqzsl5DshJwg7Jm87Kq97J207JqUPyIsYUVuOiJMZWZ0IGF0IHRoZSBpbnRlcnNlY3Rpb24/IixhbHQ6WyLsmbzsqr3snLzroZwg6rCA7JqUPyJdfSwKIHtxOiLrp57slYTsmpQuIOydgO2WiSDsmIbsl5Ag7J6I7Ja07JqULiIscUVuOiJSaWdodC4gSXQgaXMgbmV4dCB0byB0aGUgYmFuay4iLHRhc2s6IlNheSBhaCwgbmV4dCB0byB0aGUgYmFuayDigJQgZ290IGl0LiIsYToi7JWELCDsnYDtlokg7JiG7J207JqULiDslYzqsqDslrTsmpQhIixhRW46IkFoLCBuZXh0IHRvIHRoZSBiYW5rLiBHb3QgaXQhIixhbHQ6WyLrhKQsIOyVjOqyoOyWtOyalC4iXX0sCiB7cToi6riI67CpIOywvuydhCDqsbDsmIjsmpQhIixxRW46IllvdSB3aWxsIGZpbmQgaXQgaW4gbm8gdGltZSEiLHRhc2s6IlRoYW5rIHRoZW0gYW5kIHdpc2ggdGhlbSBhIGdvb2QgZGF5LiIsYToi6rCQ7IKs7ZWp64uI64ukISDsoovsnYAg7ZWY66OoIOuQmOyEuOyalCEiLGFFbjoiVGhhbmsgeW91ISBIYXZlIGEgZ29vZCBkYXkhIixhbHQ6WyLsoJXrp5Ag6rCQ7IKs7ZWp64uI64ukISJdfV19LAo1Ont3aG86IvCfp5HigI3inIjvuI8g7Jet66y07JuQIChzdGF0aW9uIGF0dGVuZGFudCkiLCB0OiJHZXR0aW5nIHRvIHRoZSBjb25jZXJ0IiwgdHVybnM6Wwoge3E6IuuEpCwg662YIOuPhOyZgOuTnOumtOq5jOyalD8iLHFFbjoiWWVzLCBob3cgY2FuIEkgaGVscCB5b3U/Iix0YXNrOiJBc2sgaG93IHRvIGdldCB0byBPbHltcGljIFBhcmsuIixhOiLsmKzrprztlL0g6rO17JuQ6rmM7KeAIOyWtOuWu+qyjCDqsIDsmpQ/IixhRW46IkhvdyBkbyBJIGdldCB0byBPbHltcGljIFBhcms/IixhbHQ6WyLsmKzrprztlL0g6rO17JuQ7JeQIOyWtOuWu+qyjCDqsIDsmpQ/Il19LAoge3E6IjLtmLjshKDsnYQg7YOA6rOgIOyeoOyLpOyXreycvOuhnCDqsIDshLjsmpQuIixxRW46IlRha2UgbGluZSAyIHRvIEphbXNpbCBTdGF0aW9uLiIsdGFzazoiQXNrIHdoZXJlIHlvdSBzaG91bGQgdHJhbnNmZXIuIixhOiLslrTrlJTsl5DshJwg6rCI7JWE7YOA7JW8IO2VtOyalD8iLGFFbjoiV2hlcmUgc2hvdWxkIEkgdHJhbnNmZXI/IixhbHQ6WyLslrTrlJTshJwg6rCI7JWE7YOA7JqUPyJdfSwKIHtxOiLsnqDsi6Tsl63sl5DshJwgOO2YuOyEoOycvOuhnCDqsIjslYTtg4DshLjsmpQuIixxRW46IlRyYW5zZmVyIHRvIGxpbmUgOCBhdCBKYW1zaWwuIix0YXNrOiJBc2sgaG93IGxvbmcgaXQgdGFrZXMuIixhOiLslrzrp4jrgpgg6rG466Ck7JqUPyIsYUVuOiJIb3cgbG9uZyBkb2VzIGl0IHRha2U/IixhbHQ6WyLsi5zqsITsnbQg7Ja866eI64KYIOqxuOugpOyalD8iXX0sCiB7cToiNDDrtoTsr6Qg6rG466Ck7JqULiIscUVuOiJBYm91dCA0MCBtaW51dGVzLiIsdGFzazoiQXNrIHdoZXJlIHlvdSBnZXQgb2ZmLiIsYToi7Ja064qQIOyXreyXkOyEnCDrgrTroKTsmpQ/IixhRW46IldoaWNoIHN0YXRpb24gZG8gSSBnZXQgb2ZmIGF0PyIsYWx0Olsi7Ja065SU7JeQ7IScIOuCtOugpOyalD8iXX0sCiB7cToi66q97LSM7Yag7ISx7Jet7JeQ7IScIOuCtOumrOyEuOyalC4iLHFFbjoiR2V0IG9mZiBhdCBNb25nY2hvbnRvc2VvbmcgU3RhdGlvbi4iLHRhc2s6IlRoYW5rIGhpbSBhbmQgc2F5IGdvdCBpdC4iLGE6IuuEpCwg7JWM6rKg7Ja07JqULiDqsJDsgqztlanri4jri6QhIixhRW46IkdvdCBpdC4gVGhhbmsgeW91ISIsYWx0Olsi6rCQ7IKs7ZWp64uI64ukISJdfV19LAo2Ont3aG86IvCfp5Mg7IKs7J6l64uYIChtYXJrZXQgdmVuZG9yKSIsIHQ6IkJ1eWluZyB0aGUgcGVyZmVjdCBnaWZ0IiwgdHVybnM6Wwoge3E6IuyWtOyEnCDsmKTshLjsmpQhIOutkCDssL7snLzshLjsmpQ/IixxRW46IldlbGNvbWUhIFdoYXQgYXJlIHlvdSBsb29raW5nIGZvcj8iLHRhc2s6IlNheSB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgZ2lmdCBmb3IgYSBmcmllbmQuIixhOiLsuZzqtawg7ISg66y87J2EIOywvuqzoCDsnojslrTsmpQuIixhRW46IkkgYW0gbG9va2luZyBmb3IgYSBnaWZ0IGZvciBhIGZyaWVuZC4iLGFsdDpbIuyEoOusvOydhCDssL7qs6Ag7J6I7Ja07JqULiJdfSwKIHtxOiLsnbQg7Iqk7Lm07ZSEIOyWtOuVjOyalD8g7IK866eMIOyYpOyynCDsm5DsnbTsl5DsmpQuIixxRW46IkhvdyBhYm91dCB0aGlzIHNjYXJmPyBJdCBpcyAzNSwwMDAgd29uLiIsdGFzazoiU2F5IGl0IGlzIHRvbyBleHBlbnNpdmUg4oCUIGFzayBmb3IgYSBkaXNjb3VudC4iLGE6IuuEiOustCDruYTsi7jsmpQuIOq5juyVhCDso7zshLjsmpQhIixhRW46IlRvbyBleHBlbnNpdmUuIFBsZWFzZSBnaXZlIG1lIGEgZGlzY291bnQhIixhbHQ6WyLsobDquIjrp4wg6rmO7JWEIOyjvOyEuOyalC4iXX0sCiB7cToi6re465+8IOydtOunjCDtjJTsspwg7JuQ7JeQIOuTnOumtOqyjOyalC4iLHFFbjoiVGhlbiBJIHdpbGwgZ2l2ZSBpdCB0byB5b3UgZm9yIDI4LDAwMC4iLHRhc2s6IkFzayBpZiB0aGVyZSBhcmUgb3RoZXIgY29sb3JzLiIsYToi64uk66W4IOyDieq5lOuPhCDsnojslrTsmpQ/IixhRW46IkRvIHlvdSBoYXZlIG90aGVyIGNvbG9ycz8iLGFsdDpbIu2MjOuegOyDiSDsnojslrTsmpQ/Il19LAoge3E6Iu2MjOuegOyDieuPhCDsnojslrTsmpQuIOyYiOyBmOyjoD8iLHFFbjoiVGhlcmUgaXMgYSBibHVlIG9uZSB0b28uIFByZXR0eSwgcmlnaHQ/Iix0YXNrOiJTYXkgeW91IHdpbGwgdGFrZSB0aGlzIG9uZSDigJQgYXNrIGlmIHRoZXkgY2FuIGdpZnQtd3JhcC4iLGE6IuydtOqxsCDso7zshLjsmpQuIOyEoOusvCDtj6zsnqUg64+87JqUPyIsYUVuOiJJIHdpbGwgdGFrZSB0aGlzIG9uZS4gQ2FuIHlvdSBnaWZ0LXdyYXAgaXQ/IixhbHQ6WyLsnbTqsbDroZwg7ZWg6rKM7JqULiDtj6zsnqUg64+87JqUPyJdfSwKIHtxOiLqt7jrn7zsmpQhIOyYiOyBmOqyjCDtj6zsnqXtlbQg65Oc66a06rKM7JqULiIscUVuOiJPZiBjb3Vyc2UhIEkgd2lsbCB3cmFwIGl0IGJlYXV0aWZ1bGx5LiIsdGFzazoiVGhhbmsgaGVyIGFuZCBhc2sgaWYgdGhleSB0YWtlIGNhcmRzLiIsYToi6rCQ7IKs7ZWp64uI64ukISDsubTrk5wg64+87JqUPyIsYUVuOiJUaGFuayB5b3UhIERvIHlvdSB0YWtlIGNhcmRzPyIsYWx0Olsi7Lm065Oc66GcIOqzhOyCsO2VoCDsiJgg7J6I7Ja07JqUPyJdfV19LAo3Ont3aG86IvCfmYIg7KeA7IiYIChoaWtpbmcgY2x1YiBtZW1iZXIpIiwgdDoiU21hbGwgdGFsayBvbiB0aGUgdHJhaWwiLCB0dXJuczpbCiB7cToi7Jik64qYIOuCoOyUqCDsp4Tsp5wg7KKL64Sk7JqUISIscUVuOiJUaGUgd2VhdGhlciBpcyByZWFsbHkgbmljZSB0b2RheSEiLHRhc2s6IkFncmVlIOKAlCBzYXkgdGhlIHdlYXRoZXIgaXMgcmVhbGx5IG5pY2UuIixhOiLrhKQsIOuCoOyUqOqwgCDsoJXrp5Ag7KKL7JWE7JqUISIsYUVuOiJZZXMsIHRoZSB3ZWF0aGVyIGlzIHJlYWxseSBuaWNlISIsYWx0Olsi66ee7JWE7JqULCDsp4Tsp5wg7KKL64Sk7JqULiJdfSwKIHtxOiLst6jrr7jqsIAg662Q7JiI7JqUPyIscUVuOiJXaGF0IGFyZSB5b3VyIGhvYmJpZXM/Iix0YXNrOiJTYXkgeW91IGxpa2UgY29va2luZy4iLGE6IuyggOuKlCDsmpTrpqztlZjripQg6rKD7J2EIOyii+yVhO2VtOyalC4iLGFFbjoiSSBsaWtlIGNvb2tpbmcuIixhbHQ6WyLsmpTrpqzrpbwg7KKL7JWE7ZW07JqULiJdfSwKIHtxOiLsmrDsmYAhIOustOyKqCDsmpTrpqzrpbwg7J6Y7ZW07JqUPyIscUVuOiJXb3chIFdoYXQgZG8geW91IGNvb2sgd2VsbD8iLHRhc2s6IlNheSB5b3UgY29vayBLb3JlYW4gZm9vZCBvZnRlbiB0aGVzZSBkYXlzLiIsYToi7JqU7KaYIO2VnOq1rSDsnYzsi53snYQg7J6Q7KO8IO2VtOyalC4iLGFFbjoiVGhlc2UgZGF5cyBJIG9mdGVuIGNvb2sgS29yZWFuIGZvb2QuIixhbHQ6WyLtlZzqta0g7J2M7Iud7J2EIOyekOyjvCDrp4zrk6TslrTsmpQuIl19LAoge3E6IuuMgOuwlSEg7KCA64+EIO2VnOq1rSDsnYzsi50g7JmE7KCEIOyii+yVhO2VtOyalC4iLHFFbjoiTm8gd2F5ISBJIHRvdGFsbHkgbG92ZSBLb3JlYW4gZm9vZCB0b28uIix0YXNrOiJJbnZpdGUgaGVyOiBzaGFsbCB3ZSBlYXQgdG9nZXRoZXIgc29tZXRpbWU/IixhOiLri6TsnYzsl5Ag6rCZ7J20IOuoueycvOufrCDqsIjrnpjsmpQ/IixhRW46IlNoYWxsIHdlIGdvIGVhdCB0b2dldGhlciBzb21ldGltZT8iLGFsdDpbIuqwmeydtCDrqLnsnLzrn6wg6rCA7JqUISJdfSwKIHtxOiLsoovslYTsmpQhIOyjvOunkOydgCDslrTrlYzsmpQ/IixxRW46IlN1cmUhIEhvdyBhYm91dCB0aGUgd2Vla2VuZD8iLHRhc2s6IlNheSB0aGUgd2Vla2VuZCBpcyBnb29kIOKAlCBsZXQgdXMgbWVldCBTYXR1cmRheS4iLGE6IuyjvOunkCDsoovslYTsmpQhIO2GoOyalOydvOyXkCDrp4zrgpjsmpQuIixhRW46IlRoZSB3ZWVrZW5kIHdvcmtzISBMZXQgdXMgbWVldCBTYXR1cmRheS4iLGFsdDpbIu2GoOyalOydvOyXkCDrp4zrgpjquLDroZwg7ZW07JqULiJdfV19LAo4Ont3aG86IvCfk7Eg7KeA7IiYIChvbiB0aGUgcGhvbmUpIiwgdDoiUnVubmluZyBsYXRlIOKAlCB0aGUgcGhvbmUgY2FsbCIsIHR1cm5zOlsKIHtxOiLsl6zrs7TshLjsmpQhIOyngOq4iCDslrTrlJTsmIjsmpQ/IixxRW46IkhlbGxvISBXaGVyZSBhcmUgeW91IG5vdz8iLHRhc2s6IlNheSB5b3UgYXJlIG9uIHRoZSBidXMsIG9uIHlvdXIgd2F5LiIsYToi67KE7Iqk7JeQ7IScIOqwgOqzoCDsnojslrTsmpQhIixhRW46IkkgYW0gb24gdGhlIGJ1cywgb24gbXkgd2F5ISIsYWx0Olsi7KeA6riIIOqwgOqzoCDsnojslrTsmpQuIl19LAoge3E6IuuqhyDrtoTsr6Qg6rG466Ck7JqUPyIscUVuOiJBYm91dCBob3cgbWFueSBtaW51dGVzIHdpbGwgaXQgdGFrZT8iLHRhc2s6IlNheSBzb3JyeSwgeW91IHdpbGwgYmUgYWJvdXQgMTAgbWludXRlcyBsYXRlLiIsYToi66+47JWI7ZW07JqULCAxMOu2hOyvpCDriqbslrTsmpQuIixhRW46IlNvcnJ5LCBJIHdpbGwgYmUgYWJvdXQgMTAgbWludXRlcyBsYXRlLiIsYWx0Olsi7KGw6riIIOuKpuyWtOyalC4g66+47JWI7ZW07JqULiJdfSwKIHtxOiLqtJzssK7slYTsmpQhIOyWtOuUlOyXkOyEnCDrp4zrgqDquYzsmpQ/IixxRW46Ik5vIHByb2JsZW0hIFdoZXJlIHNoYWxsIHdlIG1lZXQ/Iix0YXNrOiJTYXk6IHdhaXQgaW4gZnJvbnQgb2YgdGhlIGNhZsOpLCBwbGVhc2UuIixhOiLsubTtjpgg7JWe7JeQ7IScIOq4sOuLpOugpCDso7zshLjsmpQuIixhRW46IlBsZWFzZSB3YWl0IGluIGZyb250IG9mIHRoZSBjYWbDqS4iLGFsdDpbIuy5tO2OmCDslZ7sl5DshJwg66eM64KY7JqULiJdfSwKIHtxOiLrhKQhIOuwsO2EsOumrOuKlCDqtJzssK7slYTsmpQ/IixxRW46Ik9rYXkhIElzIHlvdXIgYmF0dGVyeSBob2xkaW5nIHVwPyIsdGFzazoiU2F5IHlvdXIgYmF0dGVyeSBpcyBhbG1vc3QgZGVhZCwgc28geW91IHdpbGwgaGFuZyB1cC4iLGE6IuuwsO2EsOumrOqwgCDsl4bslrTshJwg64GK7J2E6rKM7JqUISIsYUVuOiJNeSBiYXR0ZXJ5IGlzIGR5aW5nLCBzbyBJIHdpbGwgaGFuZyB1cCEiLGFsdDpbIuuwsO2EsOumrOqwgCDsl4bslrTsmpQuIOydtOuUsOqwgCDrtJDsmpQhIl19LAoge3E6IuyVjOqyoOyWtOyalCwg7KGw7Ius7Z6IIOyZgOyalCEiLHFFbjoiR290IGl0LCBjb21lIHNhZmVseSEiLHRhc2s6IlNheSB5b3UgaGF2ZSBhbG1vc3QgYXJyaXZlZCDigJQgc2VlIHlvdSBzb29uISIsYToi6rGw7J2YIOuPhOywqe2WiOyWtOyalC4g7J2065Sw6rCAIOu0kOyalCEiLGFFbjoiSSBoYXZlIGFsbW9zdCBhcnJpdmVkLiBTZWUgeW91IHNvb24hIixhbHQ6WyLquIjrsKkg6rCA7JqUISJdfV19LAo5Ont3aG86IvCfmYIg7KeA7IiYICh5b3VyIGZyaWVuZCkiLCB0OiJDaGVlcmluZyB1cCBhIGZyaWVuZCIsIHR1cm5zOlsKIHtxOiLslYTigKYg7JqU66asIOuMgO2ajOyXkOyEnCAy65OxIO2WiOyWtOyalC4iLHFFbjoiQWjigKYgSSBnb3Qgc2Vjb25kIHBsYWNlIGluIHRoZSBjb29raW5nIGNvbnRlc3QuIix0YXNrOiJTYXkgc2Vjb25kIHBsYWNlIGlzIGFtYXppbmcg4oCUIHdlbGwgZG9uZSEiLGE6IjLrk7Hrj4Qg64yA64uo7ZW07JqUISDsoJXrp5Ag7J6Y7ZaI7Ja07JqUISIsYUVuOiJTZWNvbmQgcGxhY2UgaXMgYW1hemluZyEgWW91IGRpZCByZWFsbHkgd2VsbCEiLGFsdDpbIuyZgCwg7J6Y7ZaI7Ja07JqUISJdfSwKIHtxOiLqs6Drp4jsm4zsmpQuIOq3uOuemOuPhCDrhIjrrLQg7JWE7Ims7JuM7JqULiIscUVuOiJUaGFua3MuIFN0aWxsLCBpdCBpcyBzdWNoIGEgcGl0eS4iLHRhc2s6IlRlbGwgaGVyIG5vdCB0byB3b3JyeSDigJQgbmV4dCB0aW1lIHNoZSB3aWxsIHdpbi4iLGE6Iuqxseygle2VmOyngCDrp4jshLjsmpQuIOuLpOydjOyXkOuKlCDqvK0gMeuTsSDtlaAg6rGw7JiI7JqUISIsYUVuOiJEbyBub3Qgd29ycnkuIE5leHQgdGltZSB5b3Ugd2lsbCBkZWZpbml0ZWx5IHdpbiEiLGFsdDpbIuuLpOydjOyXkCDsnpgg65CgIOqxsOyYiOyalC4iXX0sCiB7cToi7ZWY7ZWYLCDquLDrtoTsnbQg7KKAIOuCmOyVhOyhjOyWtOyalC4iLHFFbjoiSGFoYSwgSSBmZWVsIGEgYml0IGJldHRlci4iLHRhc2s6IkFzayBpZiBzaGUgaXMgaHVuZ3J5IOKAlCBzdWdnZXN0IGVhdGluZyB0b2dldGhlci4iLGE6IuuwsOqzoO2UhOyjoD8g6rCZ7J20IOuwpSDrqLnsnLzrn6wg6rCA7JqUISIsYUVuOiJZb3UgYXJlIGh1bmdyeSwgcmlnaHQ/IExldCB1cyBnbyBlYXQgdG9nZXRoZXIhIixhbHQ6WyLqsJnsnbQg66i57Jy865+sIOqwiOuemOyalD8iXX0sCiB7cToi7KKL7JWE7JqUISDrrZAg66i57J2E6rmM7JqUPyIscUVuOiJTdXJlISBXaGF0IHNoYWxsIHdlIGVhdD8iLHRhc2s6IlN1Z2dlc3QgdGhlIG5vb2RsZXMg4oCUIHNheSB0aGV5IGFyZSByZWFsbHkgZGVsaWNpb3VzLiIsYToi6rWt7IiYIOyWtOuVjOyalD8g7KCV66eQIOunm+yeiOyWtOyalCEiLGFFbjoiSG93IGFib3V0IG5vb2RsZXM/IFRoZXkgYXJlIHJlYWxseSBkZWxpY2lvdXMhIixhbHQ6WyLqta3siJgg66i57Jy865+sIOqwgOyalC4iXX0sCiB7cToi7JmE7KCEIOyii+yVhOyalC4g64uk7J2MIOuMgO2ajOuPhCDrgpjqsIgg6rGw7JiI7JqUISIscUVuOiJQZXJmZWN0LiBJIHdpbGwgZW50ZXIgdGhlIG5leHQgY29udGVzdCB0b28hIix0YXNrOiJDaGVlciBoZXIgb24g4oCUIGZpZ2h0aW5nISBZb3Ugd2lsbCBiZSBjaGVlcmluZyBmb3IgaGVyLiIsYToi7ZmU7J207YyFISDsoJzqsIAg7J2R7JuQ7ZWg6rKM7JqUISIsYUVuOiJGaWdodGluZyEgSSB3aWxsIGNoZWVyIGZvciB5b3UhIixhbHQ6WyLtmZTsnbTtjIUhIl19XX0sCjEwOnt3aG86IuKale+4jyDslb3sgqwgKHBoYXJtYWNpc3QpIiwgdDoiQXQgdGhlIHBoYXJtYWN5IiwgdHVybnM6Wwoge3E6IuyWtOyEnCDsmKTshLjsmpQuIOyWtOuUlOqwgCDrtojtjrjtlZjshLjsmpQ/IixxRW46IldlbGNvbWUuIFdoYXQgc2VlbXMgdG8gYmUgdGhlIHByb2JsZW0/Iix0YXNrOiJTYXkgeW91ciB0aHJvYXQgaHVydHMgYW5kIHlvdSBoYXZlIGEgZmV2ZXIuIixhOiLrqqnsnbQg7JWE7ZSE6rOgIOyXtOydtCDrgpjsmpQuIixhRW46Ik15IHRocm9hdCBodXJ0cyBhbmQgSSBoYXZlIGEgZmV2ZXIuIixhbHQ6WyLrqqnsnbQg7JWE7YyM7JqULiDsl7Trj4Qg7J6I7Ja07JqULiJdfSwKIHtxOiLslrjsoJzrtoDthLAg7JWE7Yyg7Ja07JqUPyIscUVuOiJTaW5jZSB3aGVuIGhhdmUgeW91IGJlZW4gc2ljaz8iLHRhc2s6IlNheSBzaW5jZSB5ZXN0ZXJkYXkuIixhOiLslrTsoJzrtoDthLDsmpQuIixhRW46IlNpbmNlIHllc3RlcmRheS4iLGFsdDpbIuyWtOygnOu2gO2EsCDslYTtjKDslrTsmpQuIl19LAoge3E6IuqwkOq4sOuEpOyalC4g7J20IOyVveydtCDsnpgg65Ok7Ja07JqULiIscUVuOiJJdCBpcyBhIGNvbGQuIFRoaXMgbWVkaWNpbmUgd29ya3Mgd2VsbC4iLHRhc2s6IkFzayBob3cgbWFueSB0aW1lcyBhIGRheSB0byB0YWtlIGl0LiIsYToi7ZWY66Oo7JeQIOuqhyDrsogg66i57Ja07JW8IO2VtOyalD8iLGFFbjoiSG93IG1hbnkgdGltZXMgYSBkYXkgc2hvdWxkIEkgdGFrZSBpdD8iLGFsdDpbIuuqhyDrsogg66i57Ja07JqUPyJdfSwKIHtxOiLtlZjro6jsl5Ag7IS4IOuyiCwg7Iud7IKsIO2bhOyXkCDrk5zshLjsmpQuIixxRW46IlRocmVlIHRpbWVzIGEgZGF5LCBhZnRlciBtZWFscy4iLHRhc2s6IlNheSB5b3UgaGF2ZSBhIHBlYW51dCBhbGxlcmd5IOKAlCBpcyBpdCBva2F5PyIsYToi7KCA64qUIOuVhey9qSDslYzroIjrpbTquLDqsIAg7J6I7Ja07JqULiDqtJzssK7slYTsmpQ/IixhRW46IkkgaGF2ZSBhIHBlYW51dCBhbGxlcmd5LiBJcyBpdCBva2F5PyIsYWx0Olsi7JWM66CI66W06riw6rCAIOyeiOyWtOyalC4g6rSc7LCu7JWE7JqUPyJdfSwKIHtxOiLrhKQsIOq0nOywruyVhOyalC4g7ZG5IOyJrOyEuOyalCEiLHFFbjoiWWVzLCBpdCBpcyBmaW5lLiBSZXN0IHdlbGwhIix0YXNrOiJUaGFuayB0aGVtIGFuZCBzYXkgeW91IHdpbGwgcmVzdCB3ZWxsLiIsYToi6rCQ7IKs7ZWp64uI64ukLiDtkbkg7Im06rKM7JqUISIsYUVuOiJUaGFuayB5b3UuIEkgd2lsbCByZXN0IHdlbGwhIixhbHQ6WyLrhKQsIOqwkOyCrO2VqeuLiOuLpC4iXX1dfSwKMTE6e3dobzoi8J+ZgiDsgqzsnqXri5ggKGd1ZXN0aG91c2Ugb3duZXIpIiwgdDoiQ2hlY2tpbmcgaW4gYnkgdGhlIHNlYSIsIHR1cm5zOlsKIHtxOiLslrTshJwg7Jik7IS47JqUISDsmIjslb3tlZjshajslrTsmpQ/IixxRW46IldlbGNvbWUhIERvIHlvdSBoYXZlIGEgcmVzZXJ2YXRpb24/Iix0YXNrOiJTYXkgeWVzLCB5b3UgcmVzZXJ2ZWQgb25saW5lLiIsYToi64SkLCDsmKjrnbzsnbjsnLzroZwg7JiI7JW97ZaI7Ja07JqULiIsYUVuOiJZZXMsIEkgcmVzZXJ2ZWQgb25saW5lLiIsYWx0Olsi7JiI7JW97ZaI7Ja07JqULiJdfSwKIHtxOiLrhKQsIO2ZleyduOuQkOyWtOyalC4g67Cp7J2AIDIwM+2YuOyYiOyalC4iLHFFbjoiQ29uZmlybWVkLiBZb3VyIHJvb20gaXMgMjAzLiIsdGFzazoiQXNrIHdoYXQgdGhlIHdpZmkgcGFzc3dvcmQgaXMuIixhOiLsmYDsnbTtjIzsnbQg67mE67CA67KI7Zi46rCAIOutkOyYiOyalD8iLGFFbjoiV2hhdCBpcyB0aGUgd2lmaSBwYXNzd29yZD8iLGFsdDpbIuyZgOydtO2MjOydtCDruYTrsIDrsojtmLgg7KKAIOyVjOugpCDso7zshLjsmpQuIl19LAoge3E6Iuu5hOuwgOuyiO2YuOuKlCDrrLjsl5Ag67aZ7Ja0IOyeiOyWtOyalC4iLHFFbjoiVGhlIHBhc3N3b3JkIGlzIHBvc3RlZCBvbiB0aGUgZG9vci4iLHRhc2s6IkFzayB3aGF0IHRpbWUgYnJlYWtmYXN0IHN0YXJ0cy4iLGE6IuyhsOyLneydgCDrqocg7Iuc7JeQIOyLnOyeke2VtOyalD8iLGFFbjoiV2hhdCB0aW1lIGRvZXMgYnJlYWtmYXN0IHN0YXJ0PyIsYWx0Olsi7JWE7Lmo7J2AIOuqhyDsi5zsmIjsmpQ/Il19LAoge3E6IuyVhOy5qCA47Iuc67aA7YSwIDEw7Iuc6rmM7KeA7JiI7JqULiIscUVuOiJGcm9tIDggdG8gMTAgaW4gdGhlIG1vcm5pbmcuIix0YXNrOiJBc2sgaWYgdGhlcmUgYXJlIGZhbW91cyBzaWdodHMgbmVhcmJ5LiIsYToi6re87LKY7JeQIOycoOuqhe2VnCDqtIDqtJHsp4Ag7J6I7Ja07JqUPyIsYUVuOiJBcmUgdGhlcmUgZmFtb3VzIHNpZ2h0cyBuZWFyYnk/IixhbHQ6WyLqt7zsspjsl5Ag662Q6rCAIOycoOuqhe2VtOyalD8iXX0sCiB7cToi67CU64ukIOyCsOyxheq4uOydtCDsoJXrp5Ag7JWE66aE64uk7JuM7JqUISIscUVuOiJUaGUgc2Vhc2lkZSB3YWxraW5nIHBhdGggaXMgcmVhbGx5IGJlYXV0aWZ1bCEiLHRhc2s6IlNheSB0aGUgc2NlbmVyeSBpcyBhbWF6aW5nIOKAlCB0aGFuayBoZXIuIixhOiLqsr3suZjqsIAg7KCV66eQIOyii+uEpOyalCEg6rCQ7IKs7ZWp64uI64ukISIsYUVuOiJUaGUgc2NlbmVyeSBpcyBhbWF6aW5nISBUaGFuayB5b3UhIixhbHQ6WyLsmYAsIOyii+uEpOyalC4g6rCQ7IKs7ZWp64uI64ukISJdfV19LAoxMjp7d2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCAoc3RhdGlvbiBhdHRlbmRhbnQpIiwgdDoiVGhlIGxvc3Qgd2FsbGV0IiwgdHVybnM6Wwoge3E6IuustOyKqCDsnbzsnbTshLjsmpQ/IixxRW46IldoYXQgaXMgdGhlIG1hdHRlcj8iLHRhc2s6IkFzayBmb3IgaGVscCDigJQgeW91IGxvc3QgeW91ciB3YWxsZXQuIixhOiLrj4TsmYDso7zshLjsmpQhIOyngOqwkeydhCDsnoPslrTrsoTroLjslrTsmpQuIixhRW46IlBsZWFzZSBoZWxwIG1lISBJIGxvc3QgbXkgd2FsbGV0LiIsYWx0Olsi7KeA6rCR7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iXX0sCiB7cToi7JWE7J206rOgISDslrTrlJTsl5DshJwg7J6D7Ja067KE66C47Ja07JqUPyIscUVuOiJPaCBubyEgV2hlcmUgZGlkIHlvdSBsb3NlIGl0PyIsdGFzazoiU2F5IG9uIHRoZSBzdWJ3YXksIG9uIGxpbmUgMi4iLGE6IuyngO2VmOyyoCAy7Zi47ISg7JeQ7IScIOyeg+yWtOuyhOuguOyWtOyalC4iLGFFbjoiSSBsb3N0IGl0IG9uIHN1YndheSBsaW5lIDIuIixhbHQ6WyIy7Zi47ISg7JeQ7ISc7JqULiJdfSwKIHtxOiLsnKDsi6TrrLzshLzthLDsl5DsoITtmZTtlZjrqbTrkJjripTrjbDsp4DquIjrsJTroZzigKYiLHFFbjoiKHZlcnkgZmFzdCkgWW91IGNhbiBjYWxsIHRoZSBsb3N0LWFuZC1mb3VuZCBhbmQgcmlnaHQgbm934oCmIix0YXNrOiJBc2sgdGhlbSB0byBzcGVhayBzbG93bHksIHBsZWFzZS4iLGE6IuyjhOyGoe2VmOyngOunjCwg7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQuIixhRW46IlNvcnJ5LCBidXQgcGxlYXNlIHNwZWFrIHNsb3dseS4iLGFsdDpbIuyynOyynO2eiCDrp5DtlbQg7KO87IS47JqULiJdfSwKIHtxOiLslYQsIOuEpCEg7Jyg7Iuk66y87IS87YSw7JeQIOyghO2ZlO2VtCDrs7TshLjsmpQuIixxRW46IkFoLCBzdXJlISBUcnkgY2FsbGluZyB0aGUgbG9zdC1hbmQtZm91bmQgY2VudGVyLiIsdGFzazoiU2F5IHlvdSB1bmRlcnN0YW5kIOKAlCBhc2sgdGhlbSB0byBzYXkgdGhlIG51bWJlciBhZ2Fpbi4iLGE6IuyVjOqyoOyWtOyalC4g67KI7Zi466W8IOuLpOyLnCDtlZzrsogg66eQ7ZW0IOyjvOyEuOyalC4iLGFFbjoiVW5kZXJzdG9vZC4gUGxlYXNlIHNheSB0aGUgbnVtYmVyIG9uZSBtb3JlIHRpbWUuIixhbHQ6WyLri6Tsi5wg7ZWc67KIIOunkO2VtCDso7zshLjsmpQuIl19LAoge3E6IjAyLTYxMTAtMTEyMuyYiOyalC4g6rytIOywvuydhCDqsbDsmIjsmpQhIixxRW46Ikl0IGlzIDAyLTYxMTAtMTEyMi4gWW91IHdpbGwgc3VyZWx5IGZpbmQgaXQhIix0YXNrOiJUaGFuayB0aGVtIHNpbmNlcmVseSBmb3IgdGhlIGhlbHAuIixhOiLsoJXrp5Ag6rCQ7IKs7ZWp64uI64ukISDtgbAg64+E7JuA7J20IOuQkOyWtOyalCEiLGFFbjoiVGhhbmsgeW91IHNvIG11Y2ghIFlvdSB3ZXJlIGEgYmlnIGhlbHAhIixhbHQ6WyLsoJXrp5Ag6rCQ7IKs7ZWp64uI64ukISJdfV19Cn07CgovKiA9PT09PT09PT09PT09PT0gU1RBVEUgPT09PT09PT09PT09PT09ICovCmNvbnN0IFNBVkVfS0VZID0gInRvbXNLb3JlYW5RdWVzdFYxIjsKbGV0IHNhdmUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNBVkVfS0VZKSB8fCAibnVsbCIpIHx8IHsgeHA6MCwgbGV2ZWw6MSwgYmVzdENvbWJvOjAsIGxlc3NvbnM6e30gfTsKZnVuY3Rpb24gbHN0YXRlKG4pIHsKICBpZiAoIXNhdmUubGVzc29uc1tuXSkgc2F2ZS5sZXNzb25zW25dID0geyBrbm93bjpbXSwgc3Bva2VuOltdLCBzdGFyczp7bGVhcm46ZmFsc2UsIGJvc3M6ZmFsc2UsIHNwZWFrOmZhbHNlLCBzdG9yeTpmYWxzZSwgdGFsazpmYWxzZX0gfTsKICByZXR1cm4gc2F2ZS5sZXNzb25zW25dOwp9CmxldCBjdXIgPSBudWxsOyAgICAgIC8vIGN1cnJlbnQgbGVzc29uIG9iamVjdApsZXQgbGVhcm5JZHggPSAwLCBzcGVha0lkeCA9IDA7CmNvbnN0IFJBTktTID0gWyJIYW5nZXVsIEhhdGNobGluZyIsIktpbWNoaSBDYWRldCIsIlNlb3VsIFNjaG9sYXIiLCJIYW5ib2sgSGVybyIsIkJpYmltYmFwIEJvc3MiLCJLLVBvcCBQcm9kaWd5IiwiVE9QSUsgVGl0YW4iLCJLLURyYW1hIExlZ2VuZCJdOwpmdW5jdGlvbiB4cEZvckxldmVsKGx2KSB7IHJldHVybiBsdiAqIDEwMDsgfQpmdW5jdGlvbiBwZXJzaXN0KCkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTQVZFX0tFWSwgSlNPTi5zdHJpbmdpZnkoc2F2ZSkpOyB9CgpmdW5jdGlvbiByZW5kZXJIdWQoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh1ZExldmVsIikudGV4dENvbnRlbnQgPSBzYXZlLmxldmVsOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodWRSYW5rIikudGV4dENvbnRlbnQgPSBSQU5LU1tNYXRoLm1pbihzYXZlLmxldmVsIC0gMSwgUkFOS1MubGVuZ3RoIC0gMSldOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodWRYcCIpLnRleHRDb250ZW50ID0gc2F2ZS54cDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHVkTmV4dCIpLnRleHRDb250ZW50ID0geHBGb3JMZXZlbChzYXZlLmxldmVsKSAtIHNhdmUueHA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhwRmlsbCIpLnN0eWxlLndpZHRoID0gTWF0aC5taW4oMTAwLCBzYXZlLnhwIC8geHBGb3JMZXZlbChzYXZlLmxldmVsKSAqIDEwMCkgKyAiJSI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh1ZFN0cmVhayIpLnRleHRDb250ZW50ID0gc2F2ZS5iZXN0Q29tYm87Cn0KZnVuY3Rpb24gZ2FpblhwKG4pIHsKICBzYXZlLnhwICs9IG47CiAgd2hpbGUgKHNhdmUueHAgPj0geHBGb3JMZXZlbChzYXZlLmxldmVsKSkgeyBzYXZlLnhwIC09IHhwRm9yTGV2ZWwoc2F2ZS5sZXZlbCk7IHNhdmUubGV2ZWwrKzsgbGV2ZWxVcEZ4KCk7IH0KICBwZXJzaXN0KCk7IHJlbmRlckh1ZCgpOwp9CgovKiA9PT09PT09PT09PT09PT0gU09VTkQgJiBGWCA9PT09PT09PT09PT09PT0gKi8KbGV0IGF1ZGlvQ3R4OwpmdW5jdGlvbiBiZWVwKGZyZXEsIGR1ciwgdHlwZSA9ICJzaW5lIiwgdm9sID0gMC4xNSkgewogIHRyeSB7CiAgICBhdWRpb0N0eCA9IGF1ZGlvQ3R4IHx8IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgY29uc3QgbyA9IGF1ZGlvQ3R4LmNyZWF0ZU9zY2lsbGF0b3IoKSwgZyA9IGF1ZGlvQ3R4LmNyZWF0ZUdhaW4oKTsKICAgIG8udHlwZSA9IHR5cGU7IG8uZnJlcXVlbmN5LnZhbHVlID0gZnJlcTsKICAgIGcuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2b2wsIGF1ZGlvQ3R4LmN1cnJlbnRUaW1lKTsKICAgIGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAxLCBhdWRpb0N0eC5jdXJyZW50VGltZSArIGR1cik7CiAgICBvLmNvbm5lY3QoZyk7IGcuY29ubmVjdChhdWRpb0N0eC5kZXN0aW5hdGlvbik7CiAgICBvLnN0YXJ0KCk7IG8uc3RvcChhdWRpb0N0eC5jdXJyZW50VGltZSArIGR1cik7CiAgfSBjYXRjaChlKSB7fQp9CmNvbnN0IHNmeCA9IHsKICBnb29kKCkgeyBiZWVwKDY2MCwuMTIpOyBzZXRUaW1lb3V0KCgpPT5iZWVwKDg4MCwuMTUpLDkwKTsgfSwKICBiYWQoKSB7IGJlZXAoMTgwLC4yNSwic2F3dG9vdGgiLC4xKTsgfSwKICB3aW4oKSB7IFs1MjMsNjU5LDc4NCwxMDQ3XS5mb3JFYWNoKChmLGkpPT5zZXRUaW1lb3V0KCgpPT5iZWVwKGYsLjIpLGkqMTMwKSk7IH0sCiAgaGl0KCkgeyBiZWVwKDEyMCwuMTUsInNxdWFyZSIsLjEyKTsgYmVlcCg0MDAsLjA4LCJzYXd0b290aCIsLjA4KTsgfQp9OwpmdW5jdGlvbiBmbG9hdEZ4KHRleHQsIGNvbG9yLCB4LCB5KSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBlbC5jbGFzc05hbWUgPSAiZngtZmxvYXQiOyBlbC50ZXh0Q29udGVudCA9IHRleHQ7IGVsLnN0eWxlLmNvbG9yID0gY29sb3I7CiAgZWwuc3R5bGUubGVmdCA9ICh4ID8/IHdpbmRvdy5pbm5lcldpZHRoLzIgLSAyMCkgKyAicHgiOwogIGVsLnN0eWxlLnRvcCA9ICh5ID8/IHdpbmRvdy5pbm5lckhlaWdodC8yKSArICJweCI7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7IHNldFRpbWVvdXQoKCk9PmVsLnJlbW92ZSgpLCAxMDAwKTsKfQpmdW5jdGlvbiBsZXZlbFVwRngoKSB7CiAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGIuY2xhc3NOYW1lID0gImxldmVsdXAtYmFubmVyIjsgYi50ZXh0Q29udGVudCA9ICLirIbvuI8gTEVWRUwgVVAhIEx2ICIgKyBzYXZlLmxldmVsOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7IHNldFRpbWVvdXQoKCk9PmIucmVtb3ZlKCksIDIxMDApOwogIGNvbmZldHRpKCk7IHNmeC53aW4oKTsKfQpmdW5jdGlvbiBjb25mZXR0aSgpIHsKICBjb25zdCBjb2xvcnMgPSBbIiNDNjhGM0UiLCIjNTAzQUE4IiwiI0IwN0QyOCIsIiMyRjdENEYiXTsKICBmb3IgKGxldCBpID0gMDsgaSA8IDUwOyBpKyspIHsKICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGMuY2xhc3NOYW1lID0gImNvbmZldHRpIjsKICAgIGMuc3R5bGUubGVmdCA9IE1hdGgucmFuZG9tKCkqMTAwICsgInZ3IjsgYy5zdHlsZS50b3AgPSAiLTEwcHgiOwogICAgYy5zdHlsZS5iYWNrZ3JvdW5kID0gY29sb3JzW2kgJSA0XTsKICAgIGMuc3R5bGUuYW5pbWF0aW9uRHVyYXRpb24gPSAoMC45ICsgTWF0aC5yYW5kb20oKSoxLjQpICsgInMiOwogICAgYy5zdHlsZS5ib3JkZXJSYWRpdXMgPSBNYXRoLnJhbmRvbSgpID4gLjUgPyAiNTAlIiA6ICIycHgiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKTsgc2V0VGltZW91dCgoKT0+Yy5yZW1vdmUoKSwgMjUwMCk7CiAgfQp9CgovKiA9PT09PT09PT09PT09PT0gVFRTIChzcGVha2luZyB2b2ljZSkgPT09PT09PT09PT09PT09ICovCmxldCBrb1ZvaWNlID0gbnVsbDsKZnVuY3Rpb24gcGlja1ZvaWNlKCkgewogIGNvbnN0IHZzID0gc3BlZWNoU3ludGhlc2lzLmdldFZvaWNlcygpLmZpbHRlcih2ID0+IHYubGFuZyAmJiB2Lmxhbmcuc3RhcnRzV2l0aCgia28iKSk7CiAga29Wb2ljZSA9IHZzLmZpbmQodiA9PiAvWXVuYXxTb3JhfEdvb2dsZS9pLnRlc3Qodi5uYW1lKSkgfHwgdnNbMF0gfHwgbnVsbDsKfQppZiAoInNwZWVjaFN5bnRoZXNpcyIgaW4gd2luZG93KSB7CiAgcGlja1ZvaWNlKCk7CiAgc3BlZWNoU3ludGhlc2lzLm9udm9pY2VzY2hhbmdlZCA9IHBpY2tWb2ljZTsKfQpmdW5jdGlvbiBzYXkodGV4dCwgcmF0ZSA9IDAuOSwgb25lbmQpIHsKICBpZiAoISgic3BlZWNoU3ludGhlc2lzIiBpbiB3aW5kb3cpKSB7IGlmIChvbmVuZCkgc2V0VGltZW91dChvbmVuZCwgNjAwKTsgcmV0dXJuOyB9CiAgc3BlZWNoU3ludGhlc2lzLmNhbmNlbCgpOwogIGNvbnN0IHUgPSBuZXcgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKHRleHQpOwogIHUubGFuZyA9ICJrby1LUiI7IGlmIChrb1ZvaWNlKSB1LnZvaWNlID0ga29Wb2ljZTsKICB1LnJhdGUgPSByYXRlOwogIGlmIChvbmVuZCkgdS5vbmVuZCA9IG9uZW5kOwogIHNwZWVjaFN5bnRoZXNpcy5zcGVhayh1KTsKfQoKLyogPT09PT09PT09PT09PT09IE5BViA9PT09PT09PT09PT09PT0gKi8KbGV0IGFjdGl2ZVRpbWVyID0gbnVsbDsKZnVuY3Rpb24gc2hvdyhpZCkgewogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5zY3JlZW4iKS5mb3JFYWNoKHMgPT4gcy5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUiKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTGlzdC5hZGQoImFjdGl2ZSIpOwogIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKfQpmdW5jdGlvbiBnb01hcCgpIHsgY2xlYXJJbnRlcnZhbChhY3RpdmVUaW1lcik7IGFjdGl2ZVRpbWVyID0gbnVsbDsgaGFyZFN0b3BBdWRpbygpOyByZW5kZXJNYXAoKTsgcmVuZGVySHVkKCk7IHNob3coIm1hcCIpOyB9CmZ1bmN0aW9uIGJhY2tUb0xlc3NvbigpIHsgY2xlYXJJbnRlcnZhbChhY3RpdmVUaW1lcik7IGFjdGl2ZVRpbWVyID0gbnVsbDsgb3Blbkxlc3NvbihjdXIubiwgY3VycmVudFRhYik7IH0KZnVuY3Rpb24gc2h1ZmZsZShhKSB7IGE9Wy4uLmFdOyBmb3IgKGxldCBpPWEubGVuZ3RoLTE7aT4wO2ktLSl7Y29uc3Qgaj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGkrMSkpO1thW2ldLGFbal1dPVthW2pdLGFbaV1dO30gcmV0dXJuIGE7IH0KCi8qID09PT09PT09PT09PT09PSBNQVAgPT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIHN0YXJzT2YobikgewogIGNvbnN0IHMgPSBsc3RhdGUobikuc3RhcnM7CiAgcmV0dXJuIChzLmxlYXJuPyLirZAiOiLimIYiKSArIChzLnN0b3J5PyLirZAiOiLimIYiKSArIChzLnRhbGs/IuKtkCI6IuKYhiIpICsgKHMuc3BlYWs/IuKtkCI6IuKYhiIpICsgKHMuYm9zcz8i4q2QIjoi4piGIik7Cn0KZnVuY3Rpb24gcmVuZGVyTWFwKCkgewogIGNvbnN0IGcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFwR3JpZCIpOwogIGcuaW5uZXJIVE1MID0gIiI7CiAgTEVTU09OUy5mb3JFYWNoKEwgPT4gewogICAgY29uc3Qgc3QgPSBsc3RhdGUoTC5uKTsKICAgIGNvbnN0IHBjdCA9IE1hdGgucm91bmQoc3Qua25vd24ubGVuZ3RoIC8gTC53b3Jkcy5sZW5ndGggKiAxMDApOwogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZC5jbGFzc05hbWUgPSAibGNhcmQiOwogICAgZC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0ibG51bSI+UVVFU1QgJHtTdHJpbmcoTC5uKS5wYWRTdGFydCgyLCIwIil9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlbW9qaSI+JHtMLmVtb2ppfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsa3IiPiR7TC5rcn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGVuIj4ke0wuZW59IMK3ICR7TC52aX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibHN0YXJzIj4ke3N0YXJzT2YoTC5uKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibHByb2ciPjxpIHN0eWxlPSJ3aWR0aDoke3BjdH0lIj48L2k+PC9kaXY+YDsKICAgIGQub25jbGljayA9ICgpID0+IG9wZW5MZXNzb24oTC5uKTsKICAgIGcuYXBwZW5kQ2hpbGQoZCk7CiAgfSk7CiAgLy8gUmV2aWV3IHdvcmtvdXQgY2FyZCDigJQgcmFuZG9tIGNvbnZlcnNhdGlvbiBhY3Jvc3Mgc3RhcnJlZCBsZXNzb25zCiAgY29uc3Qgc3RhcnJlZCA9IExFU1NPTlMuZmlsdGVyKEwgPT4gbHN0YXRlKEwubikuc3RhcnMudGFsaykubGVuZ3RoOwogIGNvbnN0IHJ2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgcnYuY2xhc3NOYW1lID0gImxjYXJkIjsKICBydi5zdHlsZS5ncmlkQ29sdW1uID0gIjEgLyAtMSI7CiAgcnYuc3R5bGUuYm9yZGVyID0gIjJweCBkYXNoZWQgI0IwN0QyODY2IjsKICBydi5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0ibG51bSI+UkVWSUVXIFdPUktPVVQ8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7Ij4KICAgICAgPGRpdiBjbGFzcz0ibGVtb2ppIiBzdHlsZT0ibWFyZ2luOjA7Ij7wn46yPC9kaXY+CiAgICAgIDxkaXY+PGRpdiBjbGFzcz0ibGtyIj5SYW5kb20gQ29udmVyc2F0aW9uPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlbiI+JHtzdGFycmVkCiAgICAgICAgPyBgTWl4ZXMgcXVlc3Rpb25zIGZyb20geW91ciAke3N0YXJyZWR9IOKtkCBjb252ZXJzYXRpb24ke3N0YXJyZWQgPiAxID8gInMiIDogIiJ9IOKAlCBhbnN3ZXIgYnkgdm9pY2UhYAogICAgICAgIDogIk5vIFRhbGsg4q2QIHlldCDigJQgbWl4ZXMgQUxMIGxlc3NvbnMgZm9yIG5vdy4gRmluaXNoIGxlc3NvbiB0YWxrcyB0byBmb2N1cyB0aGUgbWl4ISJ9PC9kaXY+PC9kaXY+CiAgICA8L2Rpdj5gOwogIHJ2Lm9uY2xpY2sgPSBvcGVuUmV2aWV3OwogIGcucHJlcGVuZChydik7CiAgLy8gRnJlZSBUYWxrIGNhcmQKICBjb25zdCBmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGZ0LmNsYXNzTmFtZSA9ICJsY2FyZCI7CiAgZnQuc3R5bGUuZ3JpZENvbHVtbiA9ICIxIC8gLTEiOwogIGZ0LnN0eWxlLmJvcmRlciA9ICIycHggZGFzaGVkICM1MDNBQTg2NiI7CiAgZnQuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImxudW0iPkZSRUUgVEFMSzwvZGl2PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDsiPgogICAgICA8ZGl2IGNsYXNzPSJsZW1vamkiIHN0eWxlPSJtYXJnaW46MDsiPvCfjpk8L2Rpdj4KICAgICAgPGRpdj48ZGl2IGNsYXNzPSJsa3IiPlNwZWFrIGFib3V0IGFueXRoaW5nPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlbiI+T3BlbiBjb252ZXJzYXRpb24g4oCUIHlvdSB0YWxrLCB0aGUgZ2FtZSBsaXN0ZW5zIGFuZCBhbnN3ZXJzLiBPcHRpb25hbCBDbGF1ZGUgQUkgbW9kZSBmb3IgdW5saW1pdGVkIHRvcGljcy48L2Rpdj48L2Rpdj4KICAgIDwvZGl2PmA7CiAgZnQub25jbGljayA9IG9wZW5GcmVlOwogIGcucHJlcGVuZChmdCk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgRlJFRSBUQUxLIOKAlCBvcGVuIHZvaWNlIGNvbnZlcnNhdGlvbi4KICAgRW5naW5lIDEgKGJ1aWx0LWluLCBmcmVlKTogdG9waWMtYXdhcmUgS29yZWFuIGNoYXRib3QgdXNpbmcgdGV4dGJvb2sgdGhlbWVzLgogICBFbmdpbmUgMiAob3B0aW9uYWwpOiBDbGF1ZGUgQVBJIHdpdGggdGhlIHVzZXIncyBvd24ga2V5IChzdG9yZWQgbG9jYWxseSkuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KY29uc3QgRlRfVE9QSUNTID0gewogIHdlYXRoZXI6IHsgbWF0Y2g6IC/rgqDslKh867mE6rCAfOu5hCDsmYB864iI7J20fOuNpXzstpTsm4x87LaU7Jq0fOunkXztnZDrpqx867CU656MLywgbmFtZTogIuuCoOyUqCIsCiAgICBxOiBbWyLsmKTripgg64Kg7JSo6rCAIOyWtOuVjOyalD8iLCJIb3cgaXMgdGhlIHdlYXRoZXIgdG9kYXk/Il0sWyLslrTrlqQg64Kg7JSo66W8IOyii+yVhO2VtOyalD8iLCJXaGF0IHdlYXRoZXIgZG8geW91IGxpa2U/Il0sWyLruYTqsIAg7JisIOuVjCDrs7TthrUg662QIO2VtOyalD8iLCJXaGF0IGRvIHlvdSB1c3VhbGx5IGRvIHdoZW4gaXQgcmFpbnM/Il1dIH0sCiAgZm9vZDogeyBtYXRjaDogL+uouXzsnYzsi51867ClfOunm+yeiHzrp5vsl4Z87JqU66asfOuwsOqzoHzquYDsuZh867aI6rOg6riwfOudvOuptC8sIG5hbWU6ICLsnYzsi50iLAogICAgcTogW1si66y07IqoIOydjOyLneydhCDsoJzsnbwg7KKL7JWE7ZW07JqUPyIsIldoYXQgZm9vZCBkbyB5b3UgbGlrZSBtb3N0PyJdLFsi7ZWc6rWtIOydjOyLnSDspJHsl5DshJwg662Q6rCAIOygnOydvCDrp5vsnojslrTsmpQ/IiwiV2hpY2ggS29yZWFuIGZvb2QgaXMgdGhlIHRhc3RpZXN0PyJdLFsi7JqU66as66W8IOyekOyjvCDtlbTsmpQ/IiwiRG8geW91IGNvb2sgb2Z0ZW4/Il0sWyLsmKTripgg662QIOuoueyXiOyWtOyalD8iLCJXaGF0IGRpZCB5b3UgZWF0IHRvZGF5PyJdXSB9LAogIGZhbWlseTogeyBtYXRjaDogL+qwgOyhsXzsl4Trp4h87JWE67mgfOyWtOuouOuLiHzslYTrsoTsp4B864+Z7IOdfOuIhOuCmHzslrjri4h87ZiVfOyYpOu5oHzslYTrgrR864Ko7Y64fOu2gOuqqC8sIG5hbWU6ICLqsIDsobEiLAogICAgcTogW1si6rCA7KGx7J20IOuqhyDrqoXsnbTsl5DsmpQ/IiwiSG93IG1hbnkgcGVvcGxlIGFyZSBpbiB5b3VyIGZhbWlseT8iXSxbIuqwgOyhse2VmOqzoCDrrZAg7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgbGlrZSB0byBkbyB3aXRoIHlvdXIgZmFtaWx5PyJdLFsi6rCA7KGxIOykkeyXkOyEnCDriITqtazrpbwg7KCc7J28IOuLruyVmOyWtOyalD8iLCJXaG8gaW4geW91ciBmYW1pbHkgZG8geW91IHJlc2VtYmxlIG1vc3Q/Il1dIH0sCiAgdHJhdmVsOiB7IG1hdGNoOiAv7Jes7ZaJfOygnOyjvHzrsJTri6R87IKwfOq0gOq0kXzruYTtlonquLB87Zi47YWUfO2ctOqwgHzrsKntlZkvLCBuYW1lOiAi7Jes7ZaJIiwKICAgIHE6IFtbIuyWtOuUlOuhnCDsl6ztlokg6rCA6rOgIOyLtuyWtOyalD8iLCJXaGVyZSBkbyB5b3Ugd2FudCB0byB0cmF2ZWw/Il0sWyLsoJzso7zrj4Tsl5Ag6rCAIOuzuCDsoIHsnbQg7J6I7Ja07JqUPyIsIkhhdmUgeW91IGJlZW4gdG8gSmVqdSBJc2xhbmQ/Il0sWyLsl6ztlontlaAg65WMIOutkCDtlZjripQg6rKD7J2EIOyii+yVhO2VtOyalD8iLCJXaGF0IGRvIHlvdSBsaWtlIGRvaW5nIHdoZW4geW91IHRyYXZlbD8iXV0gfSwKICBtb3ZpZXM6IHsgbWF0Y2g6IC/smIHtmZR865Oc652866eIfOuwsOyasHzrs7Tri6TqsIB87J6s66+47J6IfOustOyEnHzsiqztlIR87L2U66+465SULywgbmFtZTogIuyYge2ZlCIsCiAgICBxOiBbWyLrrLTsiqgg7JiB7ZmU66W8IOyii+yVhO2VtOyalD8iLCJXaGF0IG1vdmllcyBkbyB5b3UgbGlrZT8iXSxbIuy1nOq3vOyXkCDrrZAg67Sk7Ja07JqUPyIsIldoYXQgZGlkIHlvdSB3YXRjaCByZWNlbnRseT8iXSxbIuyii+yVhO2VmOuKlCDrsLDsmrDqsIAg7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIGEgZmF2b3JpdGUgYWN0b3I/Il1dIH0sCiAgc3R1ZHk6IHsgbWF0Y2g6IC/qs7XrtoB87ZWc6rWt7Ja0fOyLnO2XmHzthqDtlL1864uo7Ja0fOuwsOyasHztlZnqtZB87IiY7JeFfOyxhS8sIG5hbWU6ICLqs7XrtoAiLAogICAgcTogW1si7ZWc6rWt7Ja066W8IOyZnCDqs7XrtoDtlbTsmpQ/IiwiV2h5IGRvIHlvdSBzdHVkeSBLb3JlYW4/Il0sWyLtlZzqta3slrQg6rO167aA7ZWcIOyngCDslrzrp4jrgpgg65CQ7Ja07JqUPyIsIkhvdyBsb25nIGhhdmUgeW91IHN0dWRpZWQgS29yZWFuPyJdLFsi662Q6rCAIOygnOydvCDslrTroKTsm4zsmpQ/IiwiV2hhdCBpcyB0aGUgbW9zdCBkaWZmaWN1bHQgcGFydD8iXV0gfSwKICB3b3JrOiB7IG1hdGNoOiAv7J28fO2ajOyCrHzrsJTsgZh87KeB7J6lfOy2nOq3vHzsgqzsnqV87JuU6riJfOy3qOyngS8sIG5hbWU6ICLsnbwiLAogICAgcTogW1si66y07IqoIOydvOydhCDtlbTsmpQ/IiwiV2hhdCB3b3JrIGRvIHlvdSBkbz8iXSxbIuyalOymmCDrp47snbQg67CU67mg7JqUPyIsIkFyZSB5b3UgdmVyeSBidXN5IHRoZXNlIGRheXM/Il0sWyLslrTrlqQg7KeB7JeF7J2EIOqwluqzoCDsi7bslrTsmpQ/IiwiV2hhdCBqb2IgZG8geW91IHdhbnQgdG8gaGF2ZT8iXV0gfSwKICB3ZWVrZW5kOiB7IG1hdGNoOiAv7KO866eQfO2GoOyalOydvHzsnbzsmpTsnbx87JW97IaNfOy5nOq1rHzrp4zrgph87ImsLywgbmFtZTogIuyjvOunkCIsCiAgICBxOiBbWyLso7zrp5Dsl5Ag67O07Ya1IOutkCDtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgdXN1YWxseSBkbyBvbiB3ZWVrZW5kcz8iXSxbIuydtOuyiCDso7zrp5Dsl5Ag7JW97IaN7J20IOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSBwbGFucyB0aGlzIHdlZWtlbmQ/Il0sWyLso7zrp5Dsl5Ag7Ja065SU7JeQIOqwgOqzoCDsi7bslrTsmpQ/IiwiV2hlcmUgZG8geW91IHdhbnQgdG8gZ28gdGhpcyB3ZWVrZW5kPyJdXSB9LAogIGhvbWU6IHsgbWF0Y2g6IC/sp5F87IK0fOybkOujuHzquLDsiJnsgqx87JuU7IS4fOydtOyCrHzrj5nrhKR86rOg7ZalLywgbmFtZTogIuynkSIsCiAgICBxOiBbWyLslrTrlJTsl5Ag7IK07JWE7JqUPyIsIldoZXJlIGRvIHlvdSBsaXZlPyJdLFsi6rOg7Zal7J20IOyWtOuUlOyYiOyalD8iLCJXaGVyZSBpcyB5b3VyIGhvbWV0b3duPyJdLFsi6rOg7Zal7J20IOq3uOumrOybjOyalD8iLCJEbyB5b3UgbWlzcyB5b3VyIGhvbWV0b3duPyJdXSB9LAogIGhvYmJ5OiB7IG1hdGNoOiAv7Leo66+4fOyatOuPmXzsnYzslYV864W4656YfOqyjOyehHzssYV864+F7IScfOq3uOumvHzsgqzsp4QvLCBuYW1lOiAi7Leo66+4IiwKICAgIHE6IFtbIuy3qOuvuOqwgCDrrZDsmIjsmpQ/IiwiV2hhdCBpcyB5b3VyIGhvYmJ5PyJdLFsi7Jq064+Z7J2EIOyekOyjvCDtlbTsmpQ/IiwiRG8geW91IGV4ZXJjaXNlIG9mdGVuPyJdLFsi66y07IqoIOydjOyVheydhCDsoovslYTtlbTsmpQ/IiwiV2hhdCBtdXNpYyBkbyB5b3UgbGlrZT8iXV0gfSwKICBrb3JlYTogeyBtYXRjaDogL+2VnOq1rXzshJzsmrh867aA7IKwfOy8gOydtO2MnXztlZzquIB86rmA7LmYfOusuO2ZlC8sIG5hbWU6ICLtlZzqta0iLAogICAgcTogW1si7ZWc6rWt7JeQ7IScIOyWtOuUlOyXkCDqsIAg67O06rOgIOyLtuyWtOyalD8iLCJXaGVyZSBpbiBLb3JlYSBkbyB5b3Ugd2FudCB0byB2aXNpdD8iXSxbIu2VnOq1rSDrrLjtmZQg7KSR7JeQ7IScIOutkOqwgCDsoJzsnbwg7J6s66+47J6I7Ja07JqUPyIsIldoYXQgcGFydCBvZiBLb3JlYW4gY3VsdHVyZSBpcyBtb3N0IGludGVyZXN0aW5nPyJdLFsi7LyA7J207Yyd7J2EIOyii+yVhO2VtOyalD8iLCJEbyB5b3UgbGlrZSBLLXBvcD8iXV0gfSwKICBmZWVsaW5nczogeyBtYXRjaDogL+q4sOu2hHztlLzqs6R87ZaJ67O1fOyKrO2NvHzsoovslYTsmpR87Z6Y65OkfOyKpO2KuOugiOyKpHzsobjroKQvLCBuYW1lOiAi6riw67aEIiwKICAgIHE6IFtbIuyYpOuKmCDquLDrtoTsnbQg7Ja065WM7JqUPyIsIkhvdyBkbyB5b3UgZmVlbCB0b2RheT8iXSxbIu2UvOqzpO2VoCDrlYwg662QIO2VtOyalD8iLCJXaGF0IGRvIHlvdSBkbyB3aGVuIHlvdSBhcmUgdGlyZWQ/Il0sWyLrrZAg7ZWgIOuVjCDsoJzsnbwg7ZaJ67O17ZW07JqUPyIsIldoZW4gYXJlIHlvdSBoYXBwaWVzdD8iXV0gfQp9Owpjb25zdCBGVF9SRUFDVCA9IFtbIuyVhCwg6re4656Y7JqUPyIsIk9oLCByZWFsbHk/Il0sWyLsnqzrr7jsnojrhKTsmpQhIiwiVGhhdCBpcyBpbnRlcmVzdGluZyEiXSxbIuyZgCwg7KKL64Sk7JqUISIsIldvdywgbmljZSEiXSxbIuq3uOugh+q1sOyalC4iLCJJIHNlZS4iXSxbIuygleunkOyalD8iLCJSZWFsbHk/Il0sWyLtlZjtlZgsIOyii+yVhOyalCEiLCJIYWhhLCBncmVhdCEiXV07CmNvbnN0IEZUX1NFTEYgPSBbCiAgWy/snbTrpoTsnbQg662QfOydtOumhOydgC8sIFsi7KCcIOydtOumhOydgCDtlZzqta0g7YCY7Iqk7Yq47JiI7JqUISIsIk15IG5hbWUgaXMgS29yZWFuIFF1ZXN0ISJdXSwKICBbL+uqhyDsgrR864KY7J206rCALywgWyLsoIDripQg7ZWcIOyCtOydtOyXkOyalC4g7JWE6riwIOqyjOyehOydtOyXkOyalCEg7ZWY7ZWYLiIsIkkgYW0gb25lIHllYXIgb2xkLiBBIGJhYnkgZ2FtZSEgSGFoYS4iXV0sCiAgWy/slrTrlJTsl5Ag7IK0fOyWtOuUlCDsgrR87Ja065SU7JeQIOyeiC8sIFsi7KCA64qUIOy7tO2TqO2EsCDslYjsl5Ag7IK07JWE7JqUISIsIkkgbGl2ZSBpbnNpZGUgdGhlIGNvbXB1dGVyISJdXSwKICBbL+utkCDtlbTsmpR8662QIO2VmOqzoC8sIFsi7KCA64qUIOyngOq4iCDri7nsi6DtlZjqs6Ag7J207JW86riw7ZW07JqULiDsnqzrr7jsnojslrTsmpQhIiwiSSBhbSB0YWxraW5nIHdpdGggeW91IHJpZ2h0IG5vdy4gSXQgaXMgZnVuISJdXSwKICBbL+yii+yVhO2VtOyalFw/fOyii+yVhO2VmOyEuOyalFw/LywgWyLrhKQsIOygleunkCDsoovslYTtlbTsmpQhIOuLueyLoOydgOyalD8iLCJZZXMsIEkgcmVhbGx5IGxpa2UgaXQhIEhvdyBhYm91dCB5b3U/Il1dCl07CmxldCBGID0geyBsb2c6IFtdLCB0b3BpYzogbnVsbCwgcWk6IHt9LCB1c2VkOiBbXSwgaGlzdDogW10sIGF1dG86IGZhbHNlLCBidXN5OiBmYWxzZSB9OwpmdW5jdGlvbiBvcGVuRnJlZSgpIHsKICBGID0geyBsb2c6IFtdLCB0b3BpYzogbnVsbCwgcWk6IHt9LCB1c2VkOiBbXSwgaGlzdDogW10sIGF1dG86IEYuYXV0bywgYnVzeTogZmFsc2UgfTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRDaGF0IikuaW5uZXJIVE1MID0gIiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikudGV4dENvbnRlbnQgPSAiIjsKICByZW5kZXJGdEVuZ2luZSgpOwogIHNob3coImZyZWUiKTsKICBmdEJvdCgi7JWI64WV7ZWY7IS47JqUISDsoIDripQg7ZWc6rWt7Ja0IOy5nOq1rOyYiOyalC4g7Jik64qYIOutkCDtlZjqs6Ag7Iu27Ja07JqUPyDslYTrrLTqsbDrgpgg7J207JW86riw7ZW07JqUISIsICJIZWxsbyEgSSBhbSB5b3VyIEtvcmVhbiBmcmllbmQuIFdoYXQgZG8geW91IHdhbnQgdG8gZG8gdG9kYXk/IExldCB1cyB0YWxrIGFib3V0IGFueXRoaW5nISIpOwogIGNvbnN0IGlucCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFRleHQiKTsKICBpbnAub25rZXlkb3duID0gZSA9PiB7IGlmIChlLmtleSA9PT0gIkVudGVyIikgZnRTZW5kVGV4dCgpOyB9Owp9CmZ1bmN0aW9uIGZ0QnViYmxlKHdobywga3IsIGVuLCBleHRyYSkgewogIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBkLmNsYXNzTmFtZSA9ICJtc2cgIiArIHdobzsKICBpZiAod2hvID09PSAibnBjIikgewogICAgZC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0id2hvIj4ke2Z0QXBpS2V5KCkgPyAi4pyoIO2VnOq1reyWtCDsuZzqtawiIDogIvCfpJYg7ZWc6rWt7Ja0IOy5nOq1rCJ9PC9kaXY+JHtrcn0gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWFjY2VudDIpO2ZvbnQtc2l6ZToxMnB4Ij7wn5SKPC9zcGFuPmAgKyAoZW4gPyBgPGRpdiBjbGFzcz0ibWVuIj4ke2VufTwvZGl2PmAgOiAiIik7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiBzYXkoa3IpOwogIH0gZWxzZSB7CiAgICBkLmlubmVySFRNTCA9IGtyICsgKGV4dHJhID8gYDxkaXYgY2xhc3M9InNjb3JlIj4ke2V4dHJhfTwvZGl2PmAgOiAiIik7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiBzYXkoa3IpOwogIH0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRDaGF0IikuYXBwZW5kQ2hpbGQoZCk7CiAgZC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAic21vb3RoIiwgYmxvY2s6ICJuZWFyZXN0IiB9KTsKfQpmdW5jdGlvbiBmdEJvdChrciwgZW4sIGZpeCkgewogIEYubG9nLnB1c2goeyB3aG86ICJucGMiLCBrciwgZW4gfSk7CiAgRi5oaXN0LnB1c2goeyByb2xlOiAiYXNzaXN0YW50IiwgY29udGVudDoga3IgfSk7CiAgZnRCdWJibGUoIm5wYyIsIGtyLCBlbik7CiAgaWYgKGZpeCkgewogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZC5jbGFzc05hbWUgPSAiZml4bGluZSI7CiAgICBkLmlubmVySFRNTCA9IGDwn5KhICR7Zml4fWA7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRDaGF0IikuYXBwZW5kQ2hpbGQoZCk7CiAgfQogIHNheShrciwgMC45MiwgKCkgPT4geyBpZiAoRi5hdXRvKSBzZXRUaW1lb3V0KGZ0TGlzdGVuLCAzMDApOyB9KTsKfQphc3luYyBmdW5jdGlvbiBmdFVzZXIodGV4dCkgewogIGlmICghdGV4dCB8fCBGLmJ1c3kpIHJldHVybjsKICBGLmJ1c3kgPSB0cnVlOwogIEYuaGlzdC5wdXNoKHsgcm9sZTogInVzZXIiLCBjb250ZW50OiB0ZXh0IH0pOwogIGZ0QnViYmxlKCJtZSIsIHRleHQpOwogIGdhaW5YcCgzKTsgZmxvYXRGeCgiKzMgWFAiLCAiIzJGN0Q0RiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpLnRleHRDb250ZW50ID0gIuKApiI7CiAgdHJ5IHsKICAgIGNvbnN0IHIgPSBmdEFwaUtleSgpID8gYXdhaXQgZnRDbGF1ZGVSZXBseSh0ZXh0KSA6IGZ0QnVpbHRpblJlcGx5KHRleHQpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikudGV4dENvbnRlbnQgPSAiIjsKICAgIGZ0Qm90KHIua3IsIHIuZW4sIHIuZml4KTsKICB9IGNhdGNoIChlKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRTdGF0dXMiKS50ZXh0Q29udGVudCA9ICLimqDvuI8gQUkgZXJyb3IgKCIgKyAoZS5tZXNzYWdlIHx8IGUpLnRvU3RyaW5nKCkuc2xpY2UoMCwgNjApICsgIikg4oCUIHVzaW5nIGJ1aWx0LWluIGJyYWluLiI7CiAgICBjb25zdCByID0gZnRCdWlsdGluUmVwbHkodGV4dCk7CiAgICBmdEJvdChyLmtyLCByLmVuKTsKICB9CiAgRi5idXN5ID0gZmFsc2U7Cn0KLyogLS0tIEVuZ2luZSAxOiBidWlsdC1pbiBicmFpbiAtLS0gKi8KZnVuY3Rpb24gZnRQaWNrUShrZXkpIHsKICBjb25zdCB0ID0gRlRfVE9QSUNTW2tleV07CiAgY29uc3QgaSA9IEYucWlba2V5XSB8fCAwOwogIGlmIChpID49IHQucS5sZW5ndGgpIHJldHVybiBudWxsOwogIEYucWlba2V5XSA9IGkgKyAxOwogIHJldHVybiB0LnFbaV07Cn0KZnVuY3Rpb24gZnRCdWlsdGluUmVwbHkodGV4dCkgewogIC8vIHBlcnNvbmFsIHF1ZXN0aW9ucyB0byB0aGUgYm90CiAgZm9yIChjb25zdCBbcmUsIGFuc10gb2YgRlRfU0VMRikgaWYgKHJlLnRlc3QodGV4dCkpIHJldHVybiB7IGtyOiBhbnNbMF0sIGVuOiBhbnNbMV0gfTsKICAvLyBnb29kYnllCiAgaWYgKC/slYjrhZXtnoh87J6YIOqwgHzsnpjqsIB864GdfOq3uOunjC8udGVzdCh0ZXh0KSkgcmV0dXJuIHsga3I6ICLsmKTripgg7J207JW86riwIOygleunkCDsnqzrr7jsnojsl4jslrTsmpQhIOuYkCDsnbTslbzquLDtlbTsmpQuIOyViOuFle2eiCDqsIDshLjsmpQhIiwgZW46ICJUb2RheSdzIHRhbGsgd2FzIHJlYWxseSBmdW4hIExldCB1cyB0YWxrIGFnYWluLiBHb29kYnllISIgfTsKICBjb25zdCByZWFjdCA9IEZUX1JFQUNUW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIEZUX1JFQUNULmxlbmd0aCldOwogIC8vIGRpZCB0aGV5IG1lbnRpb24gYSBuZXcgdG9waWM/CiAgbGV0IG5ld1RvcGljID0gbnVsbDsKICBmb3IgKGNvbnN0IGsgb2Ygc2h1ZmZsZShPYmplY3Qua2V5cyhGVF9UT1BJQ1MpKSkgewogICAgaWYgKGsgIT09IEYudG9waWMgJiYgRlRfVE9QSUNTW2tdLm1hdGNoLnRlc3QodGV4dCkgJiYgKEYucWlba10gfHwgMCkgPCBGVF9UT1BJQ1Nba10ucS5sZW5ndGgpIHsgbmV3VG9waWMgPSBrOyBicmVhazsgfQogIH0KICBpZiAobmV3VG9waWMpIHsKICAgIEYudG9waWMgPSBuZXdUb3BpYzsKICAgIGNvbnN0IHEgPSBmdFBpY2tRKG5ld1RvcGljKTsKICAgIHJldHVybiB7IGtyOiBgJHtyZWFjdFswXX0gJHtxWzBdfWAsIGVuOiBgJHtyZWFjdFsxXX0gJHtxWzFdfWAgfTsKICB9CiAgLy8gY29udGludWUgY3VycmVudCB0b3BpYwogIGlmIChGLnRvcGljKSB7CiAgICBjb25zdCBxID0gZnRQaWNrUShGLnRvcGljKTsKICAgIGlmIChxKSByZXR1cm4geyBrcjogYCR7cmVhY3RbMF19IOq3uOufvCwgJHtxWzBdfWAsIGVuOiBgJHtyZWFjdFsxXX0gVGhlbiwgJHtxWzFdfWAgfTsKICB9CiAgLy8gZnJlc2ggdG9waWMKICBjb25zdCBmcmVzaCA9IE9iamVjdC5rZXlzKEZUX1RPUElDUykuZmlsdGVyKGsgPT4gKEYucWlba10gfHwgMCkgPCBGVF9UT1BJQ1Nba10ucS5sZW5ndGgpOwogIGlmICghZnJlc2gubGVuZ3RoKSByZXR1cm4geyBrcjogIuyasOyZgCwg7Jqw66asIOygleunkCDrp47snbQg7J207JW86riw7ZaI64Sk7JqUISDsmKTripgg7LWc6rOg7JiI7JqUISIsIGVuOiAiV293LCB3ZSB0YWxrZWQgc28gbXVjaCEgWW91IGRpZCBncmVhdCB0b2RheSEiIH07CiAgRi50b3BpYyA9IGZyZXNoW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGZyZXNoLmxlbmd0aCldOwogIGNvbnN0IHEgPSBmdFBpY2tRKEYudG9waWMpOwogIHJldHVybiB7IGtyOiBgJHtyZWFjdFswXX0gJHtxWzBdfWAsIGVuOiBgJHtyZWFjdFsxXX0gJHtxWzFdfWAgfTsKfQpmdW5jdGlvbiBmdE51ZGdlKCkgewogIGlmIChGLmJ1c3kpIHJldHVybjsKICBjb25zdCByID0gKCgpID0+IHsgRi50b3BpYyA9IG51bGw7IHJldHVybiBmdEJ1aWx0aW5SZXBseSgiIik7IH0pKCk7CiAgZnRCb3Qoci5rciwgci5lbik7Cn0KLyogLS0tIEVuZ2luZSAyOiBDbGF1ZGUgQVBJICh1c2VyJ3Mgb3duIGtleSwgc3RvcmVkIG9ubHkgaW4gdGhpcyBicm93c2VyKSAtLS0gKi8KZnVuY3Rpb24gZnRBcGlLZXkoKSB7IHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgia3FBcGlLZXkiKSB8fCAiIjsgfQpmdW5jdGlvbiByZW5kZXJGdEVuZ2luZSgpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRFbmdpbmUiKS50ZXh0Q29udGVudCA9IGZ0QXBpS2V5KCkgPyAi4pyoIENsYXVkZSBBSSIgOiAi8J+kliBCdWlsdC1pbiI7Cn0KZnVuY3Rpb24gZnRFbmdpbmVUYXAoKSB7CiAgaWYgKGZ0QXBpS2V5KCkpIHsKICAgIGlmIChjb25maXJtKCJDbGF1ZGUgQUkgbW9kZSBpcyBPTiAoeW91ciBBUEkga2V5IGlzIHN0b3JlZCBvbmx5IGluIHRoaXMgYnJvd3NlcikuIFJlbW92ZSB0aGUga2V5IGFuZCBzd2l0Y2ggYmFjayB0byB0aGUgYnVpbHQtaW4gcGFydG5lcj8iKSkgewogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgia3FBcGlLZXkiKTsKICAgIH0KICB9IGVsc2UgewogICAgY29uc3QgayA9IHByb21wdCgiUGFzdGUgeW91ciBBbnRocm9waWMgQVBJIGtleSAoc2stYW50LeKApikgZm9yIG9wZW4tdG9waWMgQUkgY29udmVyc2F0aW9uLlxuXG5JdCBpcyBzYXZlZCBPTkxZIGluIHRoaXMgYnJvd3NlciAobG9jYWxTdG9yYWdlKSBhbmQgc2VudCBvbmx5IHRvIGFwaS5hbnRocm9waWMuY29tLiBBUEkgdXNhZ2UgaXMgYmlsbGVkIHRvIHlvdXIga2V5LlxuTGVhdmUgZW1wdHkgdG8ga2VlcCB0aGUgZnJlZSBidWlsdC1pbiBwYXJ0bmVyLiIpOwogICAgaWYgKGsgJiYgay50cmltKCkuc3RhcnRzV2l0aCgic2stYW50IikpIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJrcUFwaUtleSIsIGsudHJpbSgpKTsKICAgIGVsc2UgaWYgKGspIGFsZXJ0KCJUaGF0IGRvZXMgbm90IGxvb2sgbGlrZSBhbiBBbnRocm9waWMga2V5IChzay1hbnQt4oCmKS4gTm90IHNhdmVkLiIpOwogIH0KICByZW5kZXJGdEVuZ2luZSgpOwp9CmFzeW5jIGZ1bmN0aW9uIGZ0Q2xhdWRlUmVwbHkodGV4dCkgewogIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCJodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzIiwgewogICAgbWV0aG9kOiAiUE9TVCIsCiAgICBoZWFkZXJzOiB7CiAgICAgICJjb250ZW50LXR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICJ4LWFwaS1rZXkiOiBmdEFwaUtleSgpLAogICAgICAiYW50aHJvcGljLXZlcnNpb24iOiAiMjAyMy0wNi0wMSIsCiAgICAgICJhbnRocm9waWMtZGFuZ2Vyb3VzLWRpcmVjdC1icm93c2VyLWFjY2VzcyI6ICJ0cnVlIgogICAgfSwKICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgbW9kZWw6ICJjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxIiwKICAgICAgbWF4X3Rva2VuczogMzAwLAogICAgICBzeXN0ZW06ICJZb3UgYXJlIO2VnOq1reyWtCDsuZzqtawsIGEgd2FybSBLb3JlYW4gY29udmVyc2F0aW9uIHBhcnRuZXIgZm9yIGEgYmVnaW5uZXIgbGVhcm5lciAoYXJvdW5kIFRPUElLIDEgbGV2ZWwpLiBSZXBseSBpbiBzaW1wbGUgcG9saXRlIEtvcmVhbiAo7ZW07JqU7LK0KSwgMS0yIHNob3J0IHNlbnRlbmNlcywgdGhlbiBhc2sgT05FIHNpbXBsZSBmb2xsb3ctdXAgcXVlc3Rpb24uIEFueSB0b3BpYyBpcyBmaW5lLiBJZiB0aGUgdXNlcidzIEtvcmVhbiBoYXMgYSBjbGVhciBtaXN0YWtlLCBhZGQgYSBnZW50bGUgZml4LiBSZXNwb25kIHdpdGggT05MWSB0aGlzIEpTT046IHtcImtyXCI6XCJ5b3VyIEtvcmVhbiByZXBseVwiLFwiZW5cIjpcIkVuZ2xpc2ggdHJhbnNsYXRpb25cIixcImZpeFwiOm51bGwgb3IgXCJ3aGF0IHRoZXkgc2FpZCDihpIgbW9yZSBuYXR1cmFsIHZlcnNpb24gKHNob3J0IHJlYXNvbilcIn0iLAogICAgICBtZXNzYWdlczogRi5oaXN0LnNsaWNlKC0xMikKICAgIH0pCiAgfSk7CiAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcigiQVBJICIgKyByZXMuc3RhdHVzKTsKICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTsKICBjb25zdCByYXcgPSBkYXRhLmNvbnRlbnRbMF0udGV4dDsKICBjb25zdCBtID0gcmF3Lm1hdGNoKC9ce1tcc1xTXSpcfS8pOwogIGNvbnN0IGogPSBKU09OLnBhcnNlKG0gPyBtWzBdIDogcmF3KTsKICByZXR1cm4geyBrcjogai5rciwgZW46IGouZW4sIGZpeDogai5maXggfTsKfQovKiAtLS0gVm9pY2UgbG9vcCAtLS0gKi8KZnVuY3Rpb24gZnRMaXN0ZW4oKSB7CiAgaWYgKCFTUiB8fCBzckJsb2NrZWQgfHwgcmVjb2duaXppbmcgfHwgRi5idXN5IHx8IGRvY3VtZW50LmhpZGRlbikgcmV0dXJuOwogIGNvbnN0IG1pYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdE1pYyIpOwogIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpOwogIHJlY29nbml6aW5nID0gdHJ1ZTsKICBtaWMuY2xhc3NMaXN0LmFkZCgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLij7kiOwogIHN0YXR1cy50ZXh0Q29udGVudCA9ICLwn46ZIFNwZWFrIG5vdyDigJQgdGFwIOKPuSB3aGVuIHlvdSBmaW5pc2guIjsKICBjb25zdCByZWMgPSBuZXcgU1IoKTsKICBhY3RpdmVSZWMgPSByZWM7CiAgcmVjLmxhbmcgPSAia28tS1IiOyByZWMuaW50ZXJpbVJlc3VsdHMgPSBmYWxzZTsgcmVjLm1heEFsdGVybmF0aXZlcyA9IDE7CiAgcmVjLm9ucmVzdWx0ID0gZSA9PiB7CiAgICBjb25zdCBoZWFyZCA9IGUucmVzdWx0c1swXVswXS50cmFuc2NyaXB0LnRyaW0oKTsKICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICIiOwogICAgaWYgKGhlYXJkKSBmdFVzZXIoaGVhcmQpOwogIH07CiAgcmVjLm9uZXJyb3IgPSBldiA9PiB7CiAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBldi5lcnJvciA9PT0gIm5vLXNwZWVjaCIgPyAiSSBkaWQgbm90IGhlYXIgYW55dGhpbmcg4oCUIHRhcCDwn46kIHRvIHRyeSBhZ2Fpbi4iIDogIk1pYyBpc3N1ZSAoIiArIGV2LmVycm9yICsgIikg4oCUIHlvdSBjYW4gYWxzbyB0eXBlIGJlbG93LiI7CiAgICBpZiAoZXYuZXJyb3IgPT09ICJub3QtYWxsb3dlZCIpIHsgc3RhdHVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7IEYuYXV0byA9IGZhbHNlOyBmdFRvZ2dsZUF1dG8odHJ1ZSk7IH0KICB9OwogIHJlYy5vbmVuZCA9ICgpID0+IHsgcmVjb2duaXppbmcgPSBmYWxzZTsgYWN0aXZlUmVjID0gbnVsbDsgbWljLmNsYXNzTGlzdC5yZW1vdmUoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7IH07CiAgYXJtTGlzdGVuKHJlYyk7IHJlYy5zdGFydCgpOwp9CmFzeW5jIGZ1bmN0aW9uIGZ0TWljVGFwKCkgewogIC8vIHNlY29uZCB0YXAgPSAiSSBmaW5pc2hlZCBzcGVha2luZyIg4oaSIHN0b3AgY2FwdHVyZSwgdHJhbnNjcmliZSBpbW1lZGlhdGVseQogIGlmIChyZWNvZ25pemluZyAmJiBhY3RpdmVSZWMpIHsgdHJ5IHsgYWN0aXZlUmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30gcmV0dXJuOyB9CiAgaWYgKCFTUiB8fCBzckJsb2NrZWQpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpLmlubmVySFRNTCA9ICI8c3BhbiBjbGFzcz0naGVhcmQnPlZvaWNlIGlucHV0IG5lZWRzIENocm9tZSBvciBTYWZhcmkgMTcrLiBZb3UgY2FuIHR5cGUgeW91ciBLb3JlYW4gYmVsb3cgaW5zdGVhZCE8L3NwYW4+IjsKICAgIHJldHVybjsKICB9CiAgaWYgKCEoYXdhaXQgZW5zdXJlTWljKCkpKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRTdGF0dXMiKS5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgcmV0dXJuOwogIH0KICBmdExpc3RlbigpOwp9CmZ1bmN0aW9uIGZ0VG9nZ2xlQXV0byhzaWxlbnQpIHsKICBpZiAoIXNpbGVudCkgRi5hdXRvID0gIUYuYXV0bzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRBdXRvIikudGV4dENvbnRlbnQgPSAi8J+UgSBBdXRvOiAiICsgKEYuYXV0byA/ICJvbiIgOiAib2ZmIik7CiAgaWYgKEYuYXV0byAmJiAhc2lsZW50KSBmdE1pY1RhcCgpOwp9CmZ1bmN0aW9uIGZ0U2VuZFRleHQoKSB7CiAgY29uc3QgaW5wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0VGV4dCIpOwogIGNvbnN0IHQgPSBpbnAudmFsdWUudHJpbSgpOwogIGlmICghdCkgcmV0dXJuOwogIGlucC52YWx1ZSA9ICIiOwogIGZ0VXNlcih0KTsKfQpmdW5jdGlvbiBvcGVuUmV2aWV3KCkgewogIGNvbnN0IHNyYyA9IExFU1NPTlMuZmlsdGVyKEwgPT4gbHN0YXRlKEwubikuc3RhcnMudGFsayk7CiAgY29uc3QgcG9vbEwgPSBzcmMubGVuZ3RoID8gc3JjIDogTEVTU09OUzsKICBjb25zdCB0dXJucyA9IHNodWZmbGUocG9vbEwuZmxhdE1hcChMID0+IFRBTEtTW0wubl0udHVybnMubWFwKHQgPT4gKHsgLi4udCwgbnBjV2hvOiBUQUxLU1tMLm5dLndobyB9KSkpKS5zbGljZSgwLCA4KTsKICBUQUxLUy5SID0geyB3aG86ICLwn46yIE1peGVkIHBhcnRuZXJzIiwgdDogIlJldmlldyB3b3Jrb3V0IOKAlCAiICsgcG9vbEwubGVuZ3RoICsgIiBsZXNzb25zIGluIHRoZSBtaXgiLCB0dXJucyB9OwogIGRlbGV0ZSBUSy5SOwogIGN1ciA9IHsgbjogIlIiLCBrcjogIuuzteyKtSIsIGVuOiAiUmV2aWV3Iiwgdmk6ICLDlG4gdOG6rXAiLCBlbW9qaTogIvCfjrIiLCB3b3JkczogcG9vbEwuZmxhdE1hcChMID0+IEwud29yZHMpLCBncmFtbWFyOiBbXSB9OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsVGl0bGUiKS50ZXh0Q29udGVudCA9ICLwn46yIOuzteyKtSDigJQgUmFuZG9tIENvbnZlcnNhdGlvbiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdWIiKS50ZXh0Q29udGVudCA9IChzcmMubGVuZ3RoID8gIkZyb20geW91ciDirZAgY29udmVyc2F0aW9ucyIgOiAiRnJvbSBhbGwgbGVzc29ucyIpICsgIiDCtyAiICsgdHVybnMubGVuZ3RoICsgIiBzdXJwcmlzZSBxdWVzdGlvbnMiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9ICLwn46yIjsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudGFiIikuZm9yRWFjaChlbCA9PiBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuZGF0YXNldC50YWIgPT09ICJ0YWxrIiA/ICIiIDogIm5vbmUiKTsKICBzZXRUYWIoInRhbGsiKTsKICBzaG93KCJsZXNzb24iKTsKfQoKLyogPT09PT09PT09PT09PT09IExFU1NPTiA9PT09PT09PT09PT09PT0gKi8KbGV0IGN1cnJlbnRUYWIgPSAibGVhcm4iOwpmdW5jdGlvbiBvcGVuTGVzc29uKG4sIHRhYiA9ICJsZWFybiIpIHsKICBjdXIgPSBMRVNTT05TLmZpbmQoTCA9PiBMLm4gPT09IG4pOwogIGxlYXJuSWR4ID0gMDsgc3BlYWtJZHggPSAwOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi50YWIiKS5mb3JFYWNoKGVsID0+IGVsLnN0eWxlLmRpc3BsYXkgPSAiIik7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxUaXRsZSIpLnRleHRDb250ZW50ID0gYCR7Y3VyLmVtb2ppfSAke2N1ci5rcn0g4oCUICR7Y3VyLmVufWA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdWIiKS50ZXh0Q29udGVudCA9IGBRdWVzdCAke2N1ci5ufSDCtyAke2N1ci52aX0gwrcgJHtjdXIud29yZHMubGVuZ3RofSB3b3JkcyDCtyAke2N1ci5ncmFtbWFyLmxlbmd0aH0gcGF0dGVybnNgOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2Yobik7CiAgcmVuZGVyR3JhbW1hcigpOwogIHNldFRhYih0YWIpOwogIHNob3coImxlc3NvbiIpOwp9CmZ1bmN0aW9uIHNldFRhYih0KSB7CiAgY3VycmVudFRhYiA9IHQ7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnRhYiIpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnRvZ2dsZSgib24iLCBlbC5kYXRhc2V0LnRhYiA9PT0gdCkpOwogIFsibGVhcm4iLCJzdG9yeSIsInRhbGsiLCJncmFtbWFyIiwic3BlYWsiLCJwbGF5Il0uZm9yRWFjaCh4ID0+IHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItIiArIHgpLnN0eWxlLmRpc3BsYXkgPSB4ID09PSB0ID8gIiIgOiAibm9uZSI7CiAgfSk7CiAgaWYgKHQgPT09ICJsZWFybiIpIHJlbmRlckxlYXJuKCk7CiAgaWYgKHQgPT09ICJzdG9yeSIpIHsgc3RvcnlJZHggPSAwOyByZW5kZXJTdG9yeSgpOyB9CiAgaWYgKHQgPT09ICJ0YWxrIikgcmVuZGVyVGFsaygpOwogIGlmICh0ID09PSAic3BlYWsiKSByZW5kZXJTcGVhaygpOwp9CgovKiAtLS0gU3RvcnkgdGFiIC0tLSAqLwpsZXQgc3RvcnlJZHggPSAwOwpmdW5jdGlvbiBzZWdtZW50RW1vamkocykgewogIGlmICh0eXBlb2YgSW50bCAhPT0gInVuZGVmaW5lZCIgJiYgSW50bC5TZWdtZW50ZXIpIHsKICAgIHJldHVybiBbLi4ubmV3IEludGwuU2VnbWVudGVyKCJlbiIsIHtncmFudWxhcml0eToiZ3JhcGhlbWUifSkuc2VnbWVudChzKV0ubWFwKHggPT4geC5zZWdtZW50KTsKICB9CiAgcmV0dXJuIFsuLi5zXTsgLy8gZmFsbGJhY2s6IG1heSBzcGxpdCBaV0ogZW1vamkgb24gdmVyeSBvbGQgYnJvd3NlcnMKfQpmdW5jdGlvbiByZW5kZXJTdG9yeSgpIHsKICBjb25zdCBzdCA9IGN1ci5zdG9yeSwgc3RlcCA9IHN0LnN0ZXBzW3N0b3J5SWR4XTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RUaXRsZSIpLnRleHRDb250ZW50ID0gc3QudDsKICBjb25zdCBzdGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFN0YWdlIik7CiAgc3RhZ2UuY2xhc3NOYW1lID0gInN0YWdlIGJnLSIgKyBzdGVwLmJnICsgKHN0ZXAuZnggPyAiIGZ4LSIgKyBzdGVwLmZ4IDogIiIpOwogIHN0YWdlLmlubmVySFRNTCA9IHNlZ21lbnRFbW9qaShzdGVwLnNjKS5tYXAoZSA9PiBgPHNwYW4gY2xhc3M9ImFjdG9yIj4ke2V9PC9zcGFuPmApLmpvaW4oIiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdE5hciIpLnRleHRDb250ZW50ID0gc3RlcC5uYXI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0V2hvIikudGV4dENvbnRlbnQgPSBzdGVwLndobzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RLciIpLnRleHRDb250ZW50ID0gc3RlcC5rciArICIg8J+UiiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0RW4iKS50ZXh0Q29udGVudCA9IHN0ZXAuZW47CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0UHJvbXB0IikudGV4dENvbnRlbnQgPSAiV2hhdCBkbyB5b3Ugc2F5PyI7CiAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0Q2hvaWNlcyIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBzaHVmZmxlKHN0ZXAuY2gpLmZvckVhY2goYyA9PiB7CiAgICBjb25zdCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICBiLmNsYXNzTmFtZSA9ICJhbnMiOwogICAgYi5pbm5lckhUTUwgPSBgPGRpdj4ke2NbMF19PC9kaXY+PGRpdiBjbGFzcz0iYWVuIj4ke2NbMV19PC9kaXY+YDsKICAgIGIub25jbGljayA9IGV2ID0+IHN0b3J5Q2hvaWNlKGIsIGMsIGV2KTsKICAgIGJveC5hcHBlbmRDaGlsZChiKTsKICB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3REb3RzIikudGV4dENvbnRlbnQgPQogICAgc3Quc3RlcHMubWFwKChfLCBpKSA9PiBpIDwgc3RvcnlJZHggPyAi4pePIiA6IGkgPT09IHN0b3J5SWR4ID8gIuKXiSIgOiAi4peLIikuam9pbigiICIpOwogIHNheShzdGVwLmtyLnJlcGxhY2UoL1woLio/XCkvZywgIiIpKTsKfQpmdW5jdGlvbiBzYXlTdG9yeSgpIHsgc2F5KGN1ci5zdG9yeS5zdGVwc1tzdG9yeUlkeF0ua3IucmVwbGFjZSgvXCguKj9cKS9nLCAiIikpOyB9CmZ1bmN0aW9uIHN0b3J5Q2hvaWNlKGJ0biwgYywgZXYpIHsKICBpZiAoY1syXSkgewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3N0Q2hvaWNlcyAuYW5zIikuZm9yRWFjaChiID0+IGIub25jbGljayA9IG51bGwpOwogICAgYnRuLmNsYXNzTGlzdC5hZGQoImNvcnJlY3QiKTsKICAgIHNmeC5nb29kKCk7CiAgICBnYWluWHAoNCk7IGZsb2F0RngoIis0IFhQIiwgIiMyRjdENEYiLCBldi5jbGllbnRYLCBldi5jbGllbnRZKTsKICAgIHN0b3J5SWR4Kys7CiAgICAvLyBzcGVhayB0aGUgY2hvc2VuIHNlbnRlbmNlIGluIGZ1bGwsIFRIRU4gYWR2YW5jZSAoZmFsbGJhY2sgdGltZXIgaWYgVFRTIGlzIHNpbGVudCkKICAgIGxldCBhZHZhbmNlZCA9IGZhbHNlOwogICAgY29uc3QgYWR2YW5jZSA9ICgpID0+IHsKICAgICAgaWYgKGFkdmFuY2VkKSByZXR1cm47CiAgICAgIGFkdmFuY2VkID0gdHJ1ZTsKICAgICAgc3RvcnlBZHZhbmNlKCk7CiAgICB9OwogICAgc2F5KGNbMF0sIDAuOSwgKCkgPT4gc2V0VGltZW91dChhZHZhbmNlLCAyNTApKTsKICAgIHNldFRpbWVvdXQoYWR2YW5jZSwgTWF0aC5tYXgoMzUwMCwgY1swXS5sZW5ndGggKiAyMjApKTsKICB9IGVsc2UgewogICAgYnRuLmNsYXNzTGlzdC5hZGQoIndyb25nIik7IHNmeC5iYWQoKTsKICAgIGZsb2F0RngoIvCfmKwg4oCmYXdrd2FyZCBzaWxlbmNl4oCmIiwgIiNCMDdEMjgiLCBldi5jbGllbnRYLCBldi5jbGllbnRZIC0gMzApOwogICAgc2V0VGltZW91dCgoKSA9PiBidG4uY2xhc3NMaXN0LnJlbW92ZSgid3JvbmciKSwgNjAwKTsKICB9Cn0KZnVuY3Rpb24gc3RvcnlBZHZhbmNlKCkgewogIGlmIChzdG9yeUlkeCA+PSBjdXIuc3Rvcnkuc3RlcHMubGVuZ3RoKSB7CiAgICBjb25zdCBscyA9IGxzdGF0ZShjdXIubik7CiAgICBjb25zdCBmaXJzdCA9ICFscy5zdGFycy5zdG9yeTsKICAgIGxzLnN0YXJzLnN0b3J5ID0gdHJ1ZTsgcGVyc2lzdCgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdGFycyIpLnRleHRDb250ZW50ID0gc3RhcnNPZihjdXIubik7CiAgICBnYWluWHAoMTUpOyBjb25mZXR0aSgpOyBzZngud2luKCk7CiAgICBjb25zdCBzdGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFN0YWdlIik7CiAgICBzdGFnZS5jbGFzc05hbWUgPSAic3RhZ2UgYmctZmVzdGl2ZSI7CiAgICBzdGFnZS5pbm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J2FjdG9yJz7wn46JPC9zcGFuPjxzcGFuIGNsYXNzPSdhY3Rvcic+8J+Phjwvc3Bhbj48c3BhbiBjbGFzcz0nYWN0b3InPvCfjoo8L3NwYW4+IjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdE5hciIpLnRleHRDb250ZW50ID0gIlNjZW5hcmlvIGNvbXBsZXRlISBZb3Ugc3Vydml2ZWQgdGhlIHNpdHVhdGlvbiBpbiBLb3JlYW4uICsxNSBYUCIgKyAoZmlyc3QgPyAiIGFuZCBhIOKtkCBTdG9yeSBzdGFyISIgOiAiIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RXaG8iKS50ZXh0Q29udGVudCA9ICLwn46tIFRoZSBFbmQiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0S3IiKS50ZXh0Q29udGVudCA9ICLsoJXrp5Ag7J6Y7ZaI7Ja07JqUISI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RFbiIpLnRleHRDb250ZW50ID0gIllvdSBkaWQgcmVhbGx5IHdlbGwhIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFByb21wdCIpLnRleHRDb250ZW50ID0gIiI7CiAgICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RDaG9pY2VzIik7CiAgICBib3guaW5uZXJIVE1MID0gIiI7CiAgICBjb25zdCBhZ2FpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYWdhaW4uY2xhc3NOYW1lID0gImJ0biI7IGFnYWluLnRleHRDb250ZW50ID0gIlJlcGxheSBzdG9yeSDwn5SBIjsKICAgIGFnYWluLm9uY2xpY2sgPSAoKSA9PiB7IHN0b3J5SWR4ID0gMDsgcmVuZGVyU3RvcnkoKTsgfTsKICAgIGJveC5hcHBlbmRDaGlsZChhZ2Fpbik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3REb3RzIikudGV4dENvbnRlbnQgPSBjdXIuc3Rvcnkuc3RlcHMubWFwKCgpID0+ICLil48iKS5qb2luKCIgIik7CiAgICBzYXkoIuygleunkCDsnpjtlojslrTsmpQhIik7CiAgfSBlbHNlIHsKICAgIHJlbmRlclN0b3J5KCk7CiAgfQp9CgovKiAtLS0gTGVhcm4gdGFiIC0tLSAqLwpmdW5jdGlvbiByZW5kZXJMZWFybigpIHsKICBjb25zdCB3ID0gY3VyLndvcmRzW2xlYXJuSWR4XTsKICBjb25zdCBzdCA9IGxzdGF0ZShjdXIubik7CiAgY29uc3Qga25vd24gPSBzdC5rbm93bi5pbmNsdWRlcyh3WzBdKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2NhcmQiKS5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJ3ZW1vamkiPiR7d1s0XX08L2Rpdj4KICAgIDxkaXYgY2xhc3M9IndrciIgb25jbGljaz0ic2F5KCcke3dbMF0ucmVwbGFjZSgvJy9nLCJcXCciKX0nKSI+JHt3WzBdfSA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Y29sb3I6dmFyKC0tYWNjZW50MikiPvCflIo8L3NwYW4+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ3cm8iPiR7d1sxXX08L2Rpdj4KICAgIDxkaXYgY2xhc3M9IndtZWFuIj4ke3dbMl19PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ3dmkiPvCfkqEgJHt3WzNdfTwvZGl2PgogICAgPGRpdiBjbGFzcz0id2V4IiBvbmNsaWNrPSJzYXkoJyR7d1s1XS5yZXBsYWNlKC8nL2csIlxcJyIpfScpIj4KICAgICAgJHt3WzVdfSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tYWNjZW50Mik7Zm9udC1zaXplOjEycHgiPvCflIo8L3NwYW4+CiAgICAgIDxkaXYgY2xhc3M9ImV4ZW4iPiR7d1s2XX08L2Rpdj4KICAgIDwvZGl2PmA7CiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtub3dCdG4iKTsKICBidG4udGV4dENvbnRlbnQgPSBrbm93biA/ICLinJMgTGVhcm5lZCEiIDogIuKckyBHb3QgaXQhICgrMyBYUCkiOwogIGJ0bi5zdHlsZS5vcGFjaXR5ID0ga25vd24gPyAuNTUgOiAxOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZWFybkNvdW50IikudGV4dENvbnRlbnQgPQogICAgYCR7bGVhcm5JZHggKyAxfSAvICR7Y3VyLndvcmRzLmxlbmd0aH0gwrcgbGVhcm5lZCAke3N0Lmtub3duLmxlbmd0aH0vJHtjdXIud29yZHMubGVuZ3RofWA7CiAgc2F5KHdbMF0pOwp9CmZ1bmN0aW9uIGxlYXJuTW92ZShkKSB7CiAgbGVhcm5JZHggPSAobGVhcm5JZHggKyBkICsgY3VyLndvcmRzLmxlbmd0aCkgJSBjdXIud29yZHMubGVuZ3RoOwogIHJlbmRlckxlYXJuKCk7Cn0KZnVuY3Rpb24gbGVhcm5Lbm93KCkgewogIGNvbnN0IHcgPSBjdXIud29yZHNbbGVhcm5JZHhdOwogIGNvbnN0IHN0ID0gbHN0YXRlKGN1ci5uKTsKICBpZiAoIXN0Lmtub3duLmluY2x1ZGVzKHdbMF0pKSB7CiAgICBzdC5rbm93bi5wdXNoKHdbMF0pOwogICAgZ2FpblhwKDMpOyBzZnguZ29vZCgpOyBmbG9hdEZ4KCIrMyBYUCIsICIjMkY3RDRGIik7CiAgICBpZiAoc3Qua25vd24ubGVuZ3RoID09PSBjdXIud29yZHMubGVuZ3RoICYmICFzdC5zdGFycy5sZWFybikgewogICAgICBzdC5zdGFycy5sZWFybiA9IHRydWU7IHBlcnNpc3QoKTsgY29uZmV0dGkoKTsgc2Z4LndpbigpOwogICAgICBmbG9hdEZ4KCLirZAgVm9jYWJ1bGFyeSBzdGFyISIsICIjQjA3RDI4Iik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2YoY3VyLm4pOwogICAgfQogICAgcGVyc2lzdCgpOwogIH0KICBsZWFybk1vdmUoMSk7Cn0KCi8qIC0tLSBHcmFtbWFyIHRhYiAtLS0gKi8KZnVuY3Rpb24gcmVuZGVyR3JhbW1hcigpIHsKICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFiLWdyYW1tYXIiKTsKICBib3guaW5uZXJIVE1MID0gIiI7CiAgY3VyLmdyYW1tYXIuZm9yRWFjaChnID0+IHsKICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGQuY2xhc3NOYW1lID0gImdjYXJkIjsKICAgIGQuaW5uZXJIVE1MID0gYAogICAgICA8ZGl2IGNsYXNzPSJncGF0Ij4ke2dbMF19PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImdtZWFuIj4ke2dbMV19PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Imd2aSI+8J+XoyBXaGVuIHRvIHVzZTogJHtnWzJdfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJnbm90ZSI+8J+SoSAke2dbM119PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImdleCIgb25jbGljaz0ic2F5KCcke2dbNF0ucmVwbGFjZSgvJy9nLCJcXCciKX0nKSI+PGRpdiBjbGFzcz0iayI+JHtnWzRdfSA8c3BhbiBjbGFzcz0ic3BrIj7wn5SKPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImUiPiR7Z1s1XX08L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ2V4IiBvbmNsaWNrPSJzYXkoJyR7Z1s2XS5yZXBsYWNlKC8nL2csIlxcJyIpfScpIj48ZGl2IGNsYXNzPSJrIj4ke2dbNl19IDxzcGFuIGNsYXNzPSJzcGsiPvCflIo8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZSI+JHtnWzddfTwvZGl2PjwvZGl2PmA7CiAgICBib3guYXBwZW5kQ2hpbGQoZCk7CiAgfSk7Cn0KCi8qIC0tLSBTcGVhayB0YWIgLS0tICovCmZ1bmN0aW9uIHNwZWFrU2VudGVuY2VzKCkgewogIHJldHVybiBjdXIud29yZHMuZmlsdGVyKHcgPT4gd1s1XS5zcGxpdCgiICIpLmxlbmd0aCA+PSAyKS5zbGljZSgwLCA4KS5tYXAodyA9PiBbd1s1XSwgd1s2XV0pOwp9CmZ1bmN0aW9uIHJlbmRlclNwZWFrKCkgewogIGNvbnN0IHNzID0gc3BlYWtTZW50ZW5jZXMoKTsKICBjb25zdCBzID0gc3Nbc3BlYWtJZHggJSBzcy5sZW5ndGhdOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGtLciIpLnRleHRDb250ZW50ID0gc1swXTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrRW4iKS50ZXh0Q29udGVudCA9IHNbMV07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa1Jlc3VsdCIpLmlubmVySFRNTCA9ICIiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGtEaWZmIikuaW5uZXJIVE1MID0gIiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0ZpeGVzIikuaW5uZXJIVE1MID0gIiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa1BsYXliYWNrIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICBjb25zdCBtaWMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWljQnRuIik7CiAgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOyBtaWMuY2xhc3NMaXN0LnJlbW92ZSgibGlzdGVuaW5nIik7CiAgcmVjb3JkaW5nID0gZmFsc2U7IHN0b3BSZWNvcmRpbmcoKTsKICBjb25zdCBzdCA9IGxzdGF0ZShjdXIubik7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwZWFrQ291bnQiKS50ZXh0Q29udGVudCA9CiAgICBgJHsoc3BlYWtJZHggJSBzcy5sZW5ndGgpICsgMX0gLyAke3NzLmxlbmd0aH0gwrcgc3Bva2VuICR7c3Quc3Bva2VuLmxlbmd0aH0vNSBmb3Ig4q2QYDsKfQpmdW5jdGlvbiBzYXlDdXIocmF0ZSA9IDAuOSkgeyBzYXkoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0tyIikudGV4dENvbnRlbnQsIHJhdGUpOyB9CmZ1bmN0aW9uIHNwZWFrTW92ZShkKSB7CiAgY29uc3Qgc3MgPSBzcGVha1NlbnRlbmNlcygpOwogIHNwZWFrSWR4ID0gKHNwZWFrSWR4ICsgZCArIHNzLmxlbmd0aCkgJSBzcy5sZW5ndGg7CiAgcmVuZGVyU3BlYWsoKTsKfQovKiAtLS0gVGFsayB0YWI6IHNwb2tlbiBjb252ZXJzYXRpb24gd2l0aCB0aGUgZ2FtZSAtLS0gKi8KbGV0IFRLID0ge307ICAgICAgICAvLyBwZXItbGVzc29uIGluLXNlc3Npb24gY29udmVyc2F0aW9uIHN0YXRlCmxldCBlYXJNb2RlID0gZmFsc2U7CmZ1bmN0aW9uIHRhbGtTdGF0ZSgpIHsKICBpZiAoIVRLW2N1ci5uXSkgVEtbY3VyLm5dID0geyBpOiAwLCBsb2c6IFtdLCBkb25lOiBmYWxzZSwgaGludFVzZWQ6IGZhbHNlIH07CiAgcmV0dXJuIFRLW2N1ci5uXTsKfQpmdW5jdGlvbiB0YWxrKCkgeyByZXR1cm4gVEFMS1NbY3VyLm5dOyB9CmZ1bmN0aW9uIHJlbmRlclRhbGsoKSB7CiAgY29uc3QgVCA9IHRhbGsoKSwgc3QgPSB0YWxrU3RhdGUoKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtUaXRsZSIpLnRleHRDb250ZW50ID0gIvCfkqwgIiArIFQudDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtTZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIHJlYnVpbGRDaGF0KCk7CiAgaWYgKHN0LmxvZy5sZW5ndGggPT09IDAgJiYgIXN0LmRvbmUpIG5wY1R1cm4odHJ1ZSk7CiAgZWxzZSBpZiAoIXN0LmRvbmUpIHNob3dUYXNrKCk7CiAgZWxzZSBzaG93VGFzaygpOyAvLyBkb25lOiB0YXNrIGJveCBzaG93cyBjb21wbGV0aW9uIG5vdGUgZnJvbSBsb2cKfQpmdW5jdGlvbiByZWJ1aWxkQ2hhdCgpIHsKICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtDaGF0Iik7CiAgYm94LmlubmVySFRNTCA9ICIiOwogIHRhbGtTdGF0ZSgpLmxvZy5mb3JFYWNoKG0gPT4gYm94LmFwcGVuZENoaWxkKG1ha2VCdWJibGUobSkpKTsKICBzY3JvbGxDaGF0KCk7Cn0KZnVuY3Rpb24gbWFrZUJ1YmJsZShtKSB7CiAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGQuY2xhc3NOYW1lID0gIm1zZyAiICsgbS53aG87CiAgaWYgKG0ud2hvID09PSAibnBjIikgewogICAgY29uc3QgbWFza2VkID0gZWFyTW9kZSAmJiAhbS5yZXZlYWxlZDsKICAgIGQuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9IndobyI+JHttLm5wY1dobyB8fCB0YWxrKCkud2hvfTwvZGl2PmAgKwogICAgICAobWFza2VkID8gYDxzcGFuIGNsYXNzPSJtYXNrZWQiPvCfjqcgdGFwIHRvIHJldmVhbDwvc3Bhbj5gCiAgICAgICAgICAgICAgOiBgJHttLmtyfSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tYWNjZW50Mik7Zm9udC1zaXplOjEycHgiPvCflIo8L3NwYW4+PGRpdiBjbGFzcz0ibWVuIj4ke20uZW59PC9kaXY+YCk7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiB7IG0ucmV2ZWFsZWQgPSB0cnVlOyByZWJ1aWxkQ2hhdCgpOyBzYXkobS5rcik7IH07CiAgfSBlbHNlIGlmIChtLndobyA9PT0gIm1lIikgewogICAgZC5pbm5lckhUTUwgPSBgJHttLmtyfSR7bS5zY29yZSA/IGA8ZGl2IGNsYXNzPSJzY29yZSI+JHttLnNjb3JlfTwvZGl2PmAgOiAiIn1gOwogICAgZC5vbmNsaWNrID0gKCkgPT4gc2F5KG0ua3IpOwogIH0gZWxzZSB7CiAgICBkLnRleHRDb250ZW50ID0gbS5rcjsKICB9CiAgcmV0dXJuIGQ7Cn0KZnVuY3Rpb24gc2Nyb2xsQ2hhdCgpIHsKICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtDaGF0Iik7CiAgaWYgKGJveC5sYXN0Q2hpbGQpIGJveC5sYXN0Q2hpbGQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogInNtb290aCIsIGJsb2NrOiAibmVhcmVzdCIgfSk7Cn0KZnVuY3Rpb24gbnBjVHVybihmaXJzdCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCksIFQgPSB0YWxrKCk7CiAgY29uc3QgdHVybiA9IFQudHVybnNbc3QuaV07CiAgY29uc3QgdHlwaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgdHlwaW5nLmNsYXNzTmFtZSA9ICJtc2cgbnBjIHR5cGluZyI7CiAgdHlwaW5nLmlubmVySFRNTCA9ICI8c3Bhbj7il488L3NwYW4+PHNwYW4+4pePPC9zcGFuPjxzcGFuPuKXjzwvc3Bhbj4iOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0NoYXQiKS5hcHBlbmRDaGlsZCh0eXBpbmcpOwogIHNjcm9sbENoYXQoKTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHR5cGluZy5yZW1vdmUoKTsKICAgIHN0LmxvZy5wdXNoKHsgd2hvOiAibnBjIiwga3I6IHR1cm4ucSwgZW46IHR1cm4ucUVuLCBucGNXaG86IHR1cm4ubnBjV2hvIH0pOwogICAgcmVidWlsZENoYXQoKTsKICAgIHNheSh0dXJuLnEpOwogICAgc2hvd1Rhc2soKTsKICB9LCBmaXJzdCA/IDUwMCA6IDEwMDApOwp9CmZ1bmN0aW9uIHNob3dUYXNrKCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCksIFQgPSB0YWxrKCk7CiAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrVGFzayIpOwogIGlmIChzdC5kb25lKSB7CiAgICBib3guaW5uZXJIVE1MID0gIvCfj4EgQ29udmVyc2F0aW9uIGNvbXBsZXRlISBSZXBsYXkgaXQgd2l0aCDihrosIG9yIHRyeSDwn46nIExpc3RlbmluZyBtb2RlIGZvciBleHRyYSBlYXIgdHJhaW5pbmcuIjsKICAgIHJldHVybjsKICB9CiAgY29uc3QgdHVybiA9IFQudHVybnNbc3QuaV07CiAgYm94LmlubmVySFRNTCA9IGDwn46vIDxiPllvdXIgdHVybiAoJHtzdC5pICsgMX0vJHtULnR1cm5zLmxlbmd0aH0pOjwvYj4gJHt0dXJuLnRhc2t9PGRpdiBpZD0idGtIaW50Qm94Ij48L2Rpdj5gOwogIHN0LmhpbnRVc2VkID0gZmFsc2U7CiAgY29uc3QgdGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtEaWZmIiksIHRmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrRml4ZXMiKTsKICBpZiAodGQpIHRkLmlubmVySFRNTCA9ICIiOwogIGlmICh0ZikgdGYuaW5uZXJIVE1MID0gIiI7Cn0KZnVuY3Rpb24gdGtIaW50KCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCk7CiAgaWYgKHN0LmRvbmUpIHJldHVybjsKICBjb25zdCB0dXJuID0gdGFsaygpLnR1cm5zW3N0LmldOwogIHN0LmhpbnRVc2VkID0gdHJ1ZTsKICBjb25zdCBoYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0hpbnRCb3giKTsKICBpZiAoaGIpIGhiLmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJoaW50bGluZSI+8J+SoSAke3R1cm4uYX0gPHNwYW4gY2xhc3M9InNuZGJ0biIgc3R5bGU9InBhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTJweDsiIG9uY2xpY2s9InNheSgnJHt0dXJuLmEucmVwbGFjZSgvJy9nLCJcXCciKX0nLDAuNykiPvCfkKI8L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0iY29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZToxMnB4OyI+JHt0dXJuLmFFbn08L2Rpdj5gOwp9CmZ1bmN0aW9uIHRrU2tpcCgpIHsKICBjb25zdCBzdCA9IHRhbGtTdGF0ZSgpOwogIGlmIChzdC5kb25lKSByZXR1cm47CiAgY29uc3QgdHVybiA9IHRhbGsoKS50dXJuc1tzdC5pXTsKICBzdC5sb2cucHVzaCh7IHdobzogIm1lIiwga3I6IHR1cm4uYSwgc2NvcmU6ICLij60gc2tpcHBlZCDigJQgcmVwZWF0IGl0IGFmdGVyIHRoZSB2b2ljZSEiIH0pOwogIHJlYnVpbGRDaGF0KCk7CiAgbGV0IGFkdmFuY2VkID0gZmFsc2U7CiAgY29uc3QgZ28gPSAoKSA9PiB7IGlmIChhZHZhbmNlZCkgcmV0dXJuOyBhZHZhbmNlZCA9IHRydWU7IHRrTmV4dCgpOyB9OwogIHNheSh0dXJuLmEsIDAuOCwgKCkgPT4gc2V0VGltZW91dChnbywgMjAwKSk7CiAgc2V0VGltZW91dChnbywgTWF0aC5tYXgoMzUwMCwgdHVybi5hLmxlbmd0aCAqIDIyMCkpOwp9CmZ1bmN0aW9uIHRrTmV4dCgpIHsKICBjb25zdCBzdCA9IHRhbGtTdGF0ZSgpLCBUID0gdGFsaygpOwogIGlmIChzdC5pICsgMSA+PSBULnR1cm5zLmxlbmd0aCkgewogICAgc3QuZG9uZSA9IHRydWU7CiAgICBzdC5sb2cucHVzaCh7IHdobzogIm5wYyIsIGtyOiAi7Jik64qYIOuMgO2ZlCDsoJXrp5Ag7KKL7JWY7Ja07JqUISDri6TsnYzsl5Ag65iQIOydtOyVvOq4sO2VtOyalCEg8J+OiSIsIGVuOiAiVG9kYXkncyBjb252ZXJzYXRpb24gd2FzIGdyZWF0ISBMZXQncyB0YWxrIGFnYWluIG5leHQgdGltZSEiLCByZXZlYWxlZDogdHJ1ZSB9KTsKICAgIHJlYnVpbGRDaGF0KCk7CiAgICBzYXkoIuyYpOuKmCDrjIDtmZQg7KCV66eQIOyii+yVmOyWtOyalCEg64uk7J2M7JeQIOuYkCDsnbTslbzquLDtlbTsmpQhIik7CiAgICBnYWluWHAoMjApOyBjb25mZXR0aSgpOyBzZngud2luKCk7CiAgICBpZiAoY3VyLm4gPT09ICJSIikgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPQogICAgICAgIGDwn4+GIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1nb2xkKSI+UmV2aWV3IHdvcmtvdXQgY29tcGxldGUhICsyMCBYUCDigJQgdGFwIOKGuiBmb3IgYSBmcmVzaCByYW5kb20gbWl4Ljwvc3Bhbj5gOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgbHMgPSBsc3RhdGUoY3VyLm4pOwogICAgICBjb25zdCBmaXJzdFdpbiA9ICFscy5zdGFycy50YWxrOwogICAgICBscy5zdGFycy50YWxrID0gdHJ1ZTsgcGVyc2lzdCgpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibFN0YXJzIikudGV4dENvbnRlbnQgPSBzdGFyc09mKGN1ci5uKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrUmVzdWx0IikuaW5uZXJIVE1MID0KICAgICAgICBg8J+PhiA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ29sZCkiPkNvbnZlcnNhdGlvbiBjb21wbGV0ZSEgKzIwIFhQJHtmaXJzdFdpbiA/ICIgYW5kIGEg4q2QIFRhbGsgc3RhciEiIDogIiJ9PC9zcGFuPmA7CiAgICB9CiAgICBzaG93VGFzaygpOwogIH0gZWxzZSB7CiAgICBzdC5pKys7CiAgICBucGNUdXJuKGZhbHNlKTsKICB9Cn0KZnVuY3Rpb24gdGtHcmFkZShvaykgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKTsKICBjb25zdCB0dXJuID0gdGFsaygpLnR1cm5zW3N0LmldOwogIGlmIChvaykgewogICAgc3QubG9nLnB1c2goeyB3aG86ICJtZSIsIGtyOiB0dXJuLmEsIHNjb3JlOiAi8J+OmSBzZWxmLWNoZWNrZWQg4pyTIiB9KTsKICAgIHJlYnVpbGRDaGF0KCk7CiAgICBnYWluWHAoc3QuaGludFVzZWQgPyA0IDogOCk7CiAgICBmbG9hdEZ4KCIrIiArIChzdC5oaW50VXNlZCA/IDQgOiA4KSArICIgWFAiLCAiIzJGN0Q0RiIpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrUmVzdWx0IikuaW5uZXJIVE1MID0gIiI7CiAgICBzZXRUaW1lb3V0KHRrTmV4dCwgNjAwKTsKICB9IGVsc2UgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrUmVzdWx0IikuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJoZWFyZCI+TGlzdGVuIPCfkKIgd2l0aCB0aGUgaGludCwgdGhlbiB0cnkgb25jZSBtb3JlITwvc3Bhbj5gOwogICAgdGtIaW50KCk7CiAgfQp9CmFzeW5jIGZ1bmN0aW9uIHRrTWljVGFwKCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCk7CiAgaWYgKHN0LmRvbmUpIHJldHVybjsKICBjb25zdCB0dXJuID0gdGFsaygpLnR1cm5zW3N0LmldOwogIGNvbnN0IHJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1Jlc3VsdCIpOwogIGNvbnN0IG1pYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a01pYyIpOwogIGlmIChTUiAmJiAhc3JCbG9ja2VkKSB7CiAgICBpZiAocmVjb2duaXppbmcgJiYgYWN0aXZlUmVjKSB7IHRyeSB7IGFjdGl2ZVJlYy5zdG9wKCk7IH0gY2F0Y2ggKGUpIHt9IHJldHVybjsgfSAvLyB0YXAg4o+5ID0gZG9uZSBzcGVha2luZwogICAgaWYgKHJlY29nbml6aW5nKSByZXR1cm47CiAgICBpZiAoIShhd2FpdCBlbnN1cmVNaWMoKSkpIHsKICAgICAgcmVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICAgIHRrSGludCgpOwogICAgICByZXR1cm47CiAgICB9CiAgICByZWNvZ25pemluZyA9IHRydWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtTZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgY29uc3QgcmVjID0gbmV3IFNSKCk7CiAgICBhY3RpdmVSZWMgPSByZWM7CiAgICByZWMubGFuZyA9ICJrby1LUiI7IHJlYy5pbnRlcmltUmVzdWx0cyA9IGZhbHNlOyByZWMubWF4QWx0ZXJuYXRpdmVzID0gNTsKICAgIG1pYy5jbGFzc0xpc3QuYWRkKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIuKPuSI7CiAgICByZXMudGV4dENvbnRlbnQgPSAi8J+OmSBTcGVhayB5b3VyIGFuc3dlciDigJQgdGFwIOKPuSB3aGVuIHlvdSBmaW5pc2guIjsKICAgIHJlYy5vbnJlc3VsdCA9IGUgPT4gewogICAgICBjb25zdCBhbHRzID0gWy4uLmUucmVzdWx0c1swXV0ubWFwKHIgPT4gci50cmFuc2NyaXB0KTsKICAgICAgY29uc3QgdGFyZ2V0cyA9IFt0dXJuLmEsIC4uLih0dXJuLmFsdCB8fCBbXSldOwogICAgICBsZXQgYmVzdCA9IHsgcGN0OiAtMSwgaGVhcmQ6ICIiLCB0YXJnZXQ6IHR1cm4uYSwgZGlmZkh0bWw6ICIiLCBmaXhlc0h0bWw6ICIiIH07CiAgICAgIHRhcmdldHMuZm9yRWFjaCh0ID0+IHsKICAgICAgICBhbHRzLmZvckVhY2goYSA9PiB7CiAgICAgICAgICBjb25zdCBmYiA9IHByb25GZWVkYmFjayh0LCBhKTsKICAgICAgICAgIGlmIChmYi5wY3QgPiBiZXN0LnBjdCkgYmVzdCA9IHsgLi4uZmIsIGhlYXJkOiBhLnRyaW0oKSwgdGFyZ2V0OiB0IH07CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICBjb25zdCBkaWZmQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrRGlmZiIpOwogICAgICBjb25zdCBmaXhCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtGaXhlcyIpOwogICAgICBpZiAoYmVzdC5wY3QgPj0gNjApIHsKICAgICAgICBzdC5sb2cucHVzaCh7IHdobzogIm1lIiwga3I6IGJlc3QuaGVhcmQsIHNjb3JlOiBg4pyTICR7YmVzdC5wY3R9JSBtYXRjaGAgfSk7CiAgICAgICAgcmVidWlsZENoYXQoKTsKICAgICAgICBzZnguZ29vZCgpOwogICAgICAgIGdhaW5YcChzdC5oaW50VXNlZCA/IDQgOiA4KTsKICAgICAgICBmbG9hdEZ4KCIrIiArIChzdC5oaW50VXNlZCA/IDQgOiA4KSArICIgWFAiLCAiIzJGN0Q0RiIpOwogICAgICAgIGlmIChiZXN0LnBjdCA+PSA5MCkgewogICAgICAgICAgcmVzLmlubmVySFRNTCA9IGDinIUgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdyZWVuKSI+JHtiZXN0LnBjdH0lIOKAlCBwZXJmZWN0IHJlcGx5ITwvc3Bhbj5gOwogICAgICAgICAgZGlmZkJveC5pbm5lckhUTUwgPSAiIjsgZml4Qm94LmlubmVySFRNTCA9ICIiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4ke2Jlc3QucGN0fSUg4oCUIHVuZGVyc3Rvb2QhIFBvbGlzaCBmb3IgbmV4dCB0aW1lOjwvc3Bhbj5gOwogICAgICAgICAgZGlmZkJveC5pbm5lckhUTUwgPSBiZXN0LmRpZmZIdG1sOwogICAgICAgICAgZml4Qm94LmlubmVySFRNTCA9IGJlc3QuZml4ZXNIdG1sOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KHRrTmV4dCwgYmVzdC5wY3QgPj0gOTAgPyA5MDAgOiAyNjAwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZnguYmFkKCk7CiAgICAgICAgcmVzLmlubmVySFRNTCA9IGDwn5mJIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1nb2xkKSI+JHtiZXN0LnBjdH0lIOKAlCBub3QgcXVpdGUuIEhlcmUgaXMgd2hhdCB0byBmaXgsIHRoZW4gdGFwIPCfjqQgYW5kIHRyeSBhZ2Fpbjo8L3NwYW4+PGRpdiBjbGFzcz0iaGVhcmQiPkhlYXJkOiDigJwke2Jlc3QuaGVhcmR94oCdPC9kaXY+YDsKICAgICAgICBkaWZmQm94LmlubmVySFRNTCA9IGJlc3QuZGlmZkh0bWw7CiAgICAgICAgZml4Qm94LmlubmVySFRNTCA9IGJlc3QuZml4ZXNIdG1sOwogICAgICAgIHRrSGludCgpOwogICAgICB9CiAgICB9OwogICAgcmVjLm9uZXJyb3IgPSBldiA9PiB7CiAgICAgIHJlY29nbml6aW5nID0gZmFsc2U7IG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsKICAgICAgaWYgKGV2LmVycm9yID09PSAibm90LWFsbG93ZWQiIHx8IGV2LmVycm9yID09PSAic2VydmljZS1ub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJuZXR3b3JrIikgewogICAgICAgIC8vIG1pYyBpdHNlbGYgaXMgZmluZSAocHJlZmxpZ2h0IHBhc3NlZCkgYnV0IHRoZSByZWNvZ25pdGlvbiBzZXJ2aWNlIGlzIGJsb2NrZWQKICAgICAgICAvLyBpbiB0aGlzIGJyb3dzZXIg4oaSIHBlcm1hbmVudGx5IHN3aXRjaCB0byByZWNvcmQgJiBzZWxmLWNoZWNrIG1vZGUKICAgICAgICBzckJsb2NrZWQgPSB0cnVlOwogICAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5Wb2ljZSByZWNvZ25pdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgYnJvd3NlciDigJQgc3dpdGNoaW5nIHRvIPCfjpkgcmVjb3JkICZhbXA7IHNlbGYtY2hlY2sgbW9kZS4gVGFwIHRoZSBtaWMgYWdhaW4hPC9zcGFuPmA7CiAgICAgIH0gZWxzZSBpZiAoZXYuZXJyb3IgPT09ICJuby1zcGVlY2giKSB7CiAgICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPkkgZGlkIG5vdCBoZWFyIGFueXRoaW5nIOKAlCB0YXAgdGhlIG1pYyBhbmQgdHJ5IGFnYWluLjwvc3Bhbj5gOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5TcGVlY2ggY2hlY2sgZmFpbGVkICgke2V2LmVycm9yfSkuIFVzZSDwn5KhIGhpbnQsIHNheSBpdCBhbG91ZCwgdGhlbiBncmFkZSB5b3Vyc2VsZjo8L3NwYW4+YDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtTZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICAgIHRrSGludCgpOwogICAgICB9CiAgICB9OwogICAgcmVjLm9uZW5kID0gKCkgPT4geyByZWNvZ25pemluZyA9IGZhbHNlOyBhY3RpdmVSZWMgPSBudWxsOyBtaWMuY2xhc3NMaXN0LnJlbW92ZSgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLwn46kIjsgfTsKICAgIGFybUxpc3RlbihyZWMpOyByZWMuc3RhcnQoKTsKICB9IGVsc2UgewogICAgLy8gTm8gcmVjb2duaXRpb24gc2VydmljZSAob2xkZXIgaVBob25lcywgYXBwIHByZXZpZXdzKTogcmVjb3JkIHdpdGggYXV0by1zdG9wLAogICAgLy8gdGhlbiBjb21wYXJlIHlvdXIgdm9pY2UgdG8gdGhlIGhpbnQgYW5kIHNlbGYtZ3JhZGUuCiAgICBpZiAocmVjb3JkaW5nKSB7IC8vIG1hbnVhbCBzdG9wIHN0aWxsIHBvc3NpYmxlCiAgICAgIHJlY29yZGluZyA9IGZhbHNlOyBzdG9wUmVjb3JkaW5nKCk7CiAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBvayA9IGF3YWl0IHN0YXJ0UmVjb3JkaW5nKHRydWUsICgpID0+IHsKICAgICAgcmVjb3JkaW5nID0gZmFsc2U7CiAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICByZXMuaW5uZXJIVE1MID0gYDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0icGxheU15UmVjKCkiIHN0eWxlPSJtYXJnaW46MCA2cHggMCAwOyI+4pa277iPIE15IGFuc3dlcjwvYnV0dG9uPjxzcGFuIGNsYXNzPSJoZWFyZCI+Q29tcGFyZSB3aXRoIHRoZSDwn5KhIGhpbnQsIHRoZW4gZ3JhZGUgeW91cnNlbGY6PC9zcGFuPmA7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICAgIHRrSGludCgpOwogICAgfSk7CiAgICBpZiAoIW9rKSB7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtTZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICB0a0hpbnQoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmVjb3JkaW5nID0gdHJ1ZTsgbWljLmNsYXNzTGlzdC5hZGQoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi4o+5IjsKICAgIHJlcy50ZXh0Q29udGVudCA9ICLwn5S0IFJlY29yZGluZ+KApiBzcGVhayB5b3VyIGFuc3dlciwgdGhlbiBwYXVzZSDigJQgaXQgc3RvcHMgYnkgaXRzZWxmLiI7CiAgfQp9CmZ1bmN0aW9uIHRvZ2dsZUVhcigpIHsKICBlYXJNb2RlID0gIWVhck1vZGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrRWFyIikudGV4dENvbnRlbnQgPSBlYXJNb2RlID8gIvCfkYAgU2hvdyB0ZXh0IiA6ICLwn46nIExpc3RlbmluZyBtb2RlIjsKICByZWJ1aWxkQ2hhdCgpOwp9CmZ1bmN0aW9uIHRrUmVzdGFydCgpIHsKICBpZiAoY3VyLm4gPT09ICJSIikgeyBvcGVuUmV2aWV3KCk7IHJldHVybjsgfSAvLyBmcmVzaCByYW5kb20gbWl4CiAgZGVsZXRlIFRLW2N1ci5uXTsKICByZW5kZXJUYWxrKCk7Cn0KCi8qIC0tLSBQcm9udW5jaWF0aW9uIGNvYWNoIC0tLSAqLwpjb25zdCBTUiA9IHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fCB3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb247CmxldCByZWNvZ25pemluZyA9IGZhbHNlLCBtZWRpYVJlYyA9IG51bGwsIHJlY0NodW5rcyA9IFtdLCBteVJlY1VybCA9IG51bGwsIHJlY29yZGluZyA9IGZhbHNlOwpsZXQgbWljUGVybSA9IG51bGwsIHNyQmxvY2tlZCA9IGZhbHNlLCB2YWRDYW5jZWwgPSBudWxsLCBhY3RpdmVSZWMgPSBudWxsOwoKLyogUmVsZWFzZSB0aGUgbWljcm9waG9uZSBDT01QTEVURUxZIOKAlCBjYWxsZWQgd2hlbiBsZWF2aW5nIHRoZSBwYWdlL3NjcmVlbiBzbyB0aGUKICAgT1MgbWljIGluZGljYXRvciBuZXZlciBsaW5nZXJzIGFmdGVyIHRoZSBicm93c2VyIGlzIGNsb3NlZCBvciBiYWNrZ3JvdW5kZWQuICovCmxldCBtaWNTdHJlYW0gPSBudWxsLCBsaXN0ZW5UaW1lb3V0ID0gbnVsbDsKZnVuY3Rpb24ga2lsbE1pY1N0cmVhbSgpIHsKICB0cnkgeyBpZiAobWljU3RyZWFtKSBtaWNTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0ID0+IHQuc3RvcCgpKTsgfSBjYXRjaCAoZSkge30KICBtaWNTdHJlYW0gPSBudWxsOwp9CmZ1bmN0aW9uIGFybUxpc3RlbihyZWMpIHsKICBjbGVhclRpbWVvdXQobGlzdGVuVGltZW91dCk7CiAgLy8gaGFyZCBjYXA6IG5ldmVyIGhvbGQgdGhlIG1pYyBtb3JlIHRoYW4gMTVzIHdpdGhvdXQgYSByZXN1bHQgKGlPUyByYXJlbHkgYXV0by1lbmRzKQogIGxpc3RlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsgaWYgKGFjdGl2ZVJlYyA9PT0gcmVjKSB7IHRyeSB7IHJlYy5zdG9wKCk7IH0gY2F0Y2ggKGUpIHt9IH0gfSwgMTUwMDApOwp9CmZ1bmN0aW9uIGhhcmRTdG9wQXVkaW8oKSB7CiAgY2xlYXJUaW1lb3V0KGxpc3RlblRpbWVvdXQpOwogIHRyeSB7CiAgICBpZiAoYWN0aXZlUmVjKSB7CiAgICAgIGFjdGl2ZVJlYy5vbnJlc3VsdCA9IG51bGw7IGFjdGl2ZVJlYy5vbmVycm9yID0gbnVsbDsgYWN0aXZlUmVjLm9uZW5kID0gbnVsbDsKICAgICAgdHJ5IHsgYWN0aXZlUmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30KICAgICAgdHJ5IHsgYWN0aXZlUmVjLmFib3J0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgfSBjYXRjaCAoZSkge30KICBhY3RpdmVSZWMgPSBudWxsOyByZWNvZ25pemluZyA9IGZhbHNlOwogIHN0b3BSZWNvcmRpbmcoKTsgcmVjb3JkaW5nID0gZmFsc2U7CiAga2lsbE1pY1N0cmVhbSgpOwogIHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKTsgfSBjYXRjaCAoZSkge30KICB0cnkgeyBGLmF1dG8gPSBmYWxzZTsgfSBjYXRjaCAoZSkge30KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWljIikuZm9yRWFjaChtID0+IHsgbS5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbS50ZXh0Q29udGVudCA9ICLwn46kIjsgfSk7CiAgY29uc3QgZmEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRBdXRvIik7IGlmIChmYSkgZmEudGV4dENvbnRlbnQgPSAi8J+UgSBBdXRvOiBvZmYiOwp9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLCAoKSA9PiB7IGlmIChkb2N1bWVudC5oaWRkZW4pIGhhcmRTdG9wQXVkaW8oKTsgfSk7CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsIGhhcmRTdG9wQXVkaW8pOwp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIiwgaGFyZFN0b3BBdWRpbyk7CgovKiBBc2sgZm9yIHRoZSBtaWMgdGhyb3VnaCBnZXRVc2VyTWVkaWEgZmlyc3Qg4oCUIHRoaXMgcmVsaWFibHkgc2hvd3MgdGhlIGJyb3dzZXIncwogICBwZXJtaXNzaW9uIHByb21wdC4gU3BlZWNoUmVjb2duaXRpb24gYWxvbmUgY2FuIGZhaWwgd2l0aCAibm90LWFsbG93ZWQiIHdpdGhvdXQgYXNraW5nLiAqLwphc3luYyBmdW5jdGlvbiBlbnN1cmVNaWMoKSB7CiAgaWYgKG1pY1Blcm0gPT09ICJncmFudGVkIikgcmV0dXJuIHRydWU7CiAgaWYgKCFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzIHx8ICFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSkgeyBtaWNQZXJtID0gImRlbmllZCI7IHJldHVybiBmYWxzZTsgfQogIHRyeSB7CiAgICBjb25zdCBzID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSB9KTsKICAgIHMuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0ID0+IHQuc3RvcCgpKTsKICAgIG1pY1Blcm0gPSAiZ3JhbnRlZCI7IHJldHVybiB0cnVlOwogIH0gY2F0Y2ggKGUpIHsgbWljUGVybSA9ICJkZW5pZWQiOyByZXR1cm4gZmFsc2U7IH0KfQpmdW5jdGlvbiBtaWNIZWxwSHRtbCgpIHsKICByZXR1cm4gYDxzcGFuIGNsYXNzPSJoZWFyZCI+8J+Ome+4jyBUaGUgbWljcm9waG9uZSBpcyBibG9ja2VkIGhlcmUuPGJyPgogIOKAoiBDbGljayB0aGUg8J+UkiAvIG1pYyBpY29uIGluIHRoZSBhZGRyZXNzIGJhciDihpIgPGI+QWxsb3cgbWljcm9waG9uZTwvYj4sIHRoZW4gcmVsb2FkLjxicj4KICDigKIgVmlld2luZyB0aGlzIGluc2lkZSBhbiBhcHAgcHJldmlldz8gPGEgaHJlZj0iIyIgb25jbGljaz0id2luZG93Lm9wZW4obG9jYXRpb24uaHJlZiwnX2JsYW5rJyk7cmV0dXJuIGZhbHNlIiBzdHlsZT0iY29sb3I6dmFyKC0tYWNjZW50MikiPk9wZW4gaW4geW91ciBicm93c2VyPC9hPiDigJQgdm9pY2Ugd29ya3MgYmVzdCBpbiBDaHJvbWUuPC9zcGFuPmA7Cn0KLyogVm9pY2UtYWN0aXZpdHkgZGV0ZWN0aW9uOiBhdXRvLXN0b3AgcmVjb3JkaW5nIH4xLjRzIGFmdGVyIHlvdSBzdG9wIHNwZWFraW5nICovCmZ1bmN0aW9uIGF0dGFjaFZBRChzdHJlYW0sIG9uU2lsZW5jZSkgewogIGxldCBjdHg7CiAgdHJ5IHsgY3R4ID0gbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0KICBjb25zdCBhbiA9IGN0eC5jcmVhdGVBbmFseXNlcigpOyBhbi5mZnRTaXplID0gNTEyOwogIGN0eC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShzdHJlYW0pLmNvbm5lY3QoYW4pOwogIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShhbi5mcmVxdWVuY3lCaW5Db3VudCk7CiAgbGV0IHNwb2tlID0gZmFsc2UsIHF1aWV0U2luY2UgPSAwLCBzdG9wcGVkID0gZmFsc2U7CiAgZnVuY3Rpb24gbG9vcCh0cykgewogICAgaWYgKHN0b3BwZWQpIHJldHVybjsKICAgIGFuLmdldEJ5dGVUaW1lRG9tYWluRGF0YShkYXRhKTsKICAgIGxldCBzdW0gPSAwOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7IGNvbnN0IHYgPSAoZGF0YVtpXSAtIDEyOCkgLyAxMjg7IHN1bSArPSB2ICogdjsgfQogICAgY29uc3Qgcm1zID0gTWF0aC5zcXJ0KHN1bSAvIGRhdGEubGVuZ3RoKTsKICAgIGlmIChybXMgPiAwLjA0NSkgeyBzcG9rZSA9IHRydWU7IHF1aWV0U2luY2UgPSAwOyB9CiAgICBlbHNlIGlmIChzcG9rZSkgewogICAgICBpZiAoIXF1aWV0U2luY2UpIHF1aWV0U2luY2UgPSB0czsKICAgICAgZWxzZSBpZiAodHMgLSBxdWlldFNpbmNlID4gMTQwMCkgeyBzdG9wcGVkID0gdHJ1ZTsgdHJ5IHsgY3R4LmNsb3NlKCk7IH0gY2F0Y2ggKGUpIHt9IG9uU2lsZW5jZSgpOyByZXR1cm47IH0KICAgIH0KICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTsKICB9CiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApOwogIHJldHVybiAoKSA9PiB7IHN0b3BwZWQgPSB0cnVlOyB0cnkgeyBjdHguY2xvc2UoKTsgfSBjYXRjaCAoZSkge30gfTsKfQoKYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWNvcmRpbmcoYXV0b1N0b3AgPSBmYWxzZSwgb25BdXRvU3RvcCA9IG51bGwpIHsKICBsZXQgc3RyZWFtOwogIHRyeSB7CiAgICBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pOwogICAgbWljUGVybSA9ICJncmFudGVkIjsKICB9IGNhdGNoIChlKSB7IG1pY1Blcm0gPSAiZGVuaWVkIjsgcmV0dXJuIGZhbHNlOyB9CiAgbWljU3RyZWFtID0gc3RyZWFtOyAvLyBrZWVwIGEgaGFuZGxlIHNvIGhhcmRTdG9wQXVkaW8gY2FuIGZvcmNlLXJlbGVhc2UgdGhlIG1pYwogIHRyeSB7CiAgICBtZWRpYVJlYyA9IG5ldyBNZWRpYVJlY29yZGVyKHN0cmVhbSk7CiAgfSBjYXRjaCAoZSkgewogICAgLy8gZS5nLiBpT1MgU2FmYXJpIHdpdGhvdXQgTWVkaWFSZWNvcmRlciDigJQgcmVsZWFzZSB0aGUgbWljIHdlIGp1c3Qgb3BlbmVkLCBuZXZlciBsZWFrIGl0CiAgICBraWxsTWljU3RyZWFtKCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJlY0NodW5rcyA9IFtdOwogIG1lZGlhUmVjLm9uZGF0YWF2YWlsYWJsZSA9IGUgPT4geyBpZiAoZS5kYXRhLnNpemUpIHJlY0NodW5rcy5wdXNoKGUuZGF0YSk7IH07CiAgbWVkaWFSZWMub25zdG9wID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgaWYgKG15UmVjVXJsKSBVUkwucmV2b2tlT2JqZWN0VVJMKG15UmVjVXJsKTsKICAgICAgbXlSZWNVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKHJlY0NodW5rcywgeyB0eXBlOiBtZWRpYVJlYy5taW1lVHlwZSB8fCAiYXVkaW8vd2VibSIgfSkpOwogICAgICBjb25zdCBwYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGtQbGF5YmFjayIpOyBpZiAocGIpIHBiLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgfSBjYXRjaCAoZSkge30KICAgIGtpbGxNaWNTdHJlYW0oKTsKICAgIGlmICh2YWRDYW5jZWwpIHsgdmFkQ2FuY2VsKCk7IHZhZENhbmNlbCA9IG51bGw7IH0KICB9OwogIG1lZGlhUmVjLnN0YXJ0KCk7CiAgaWYgKGF1dG9TdG9wICYmIG9uQXV0b1N0b3ApIHZhZENhbmNlbCA9IGF0dGFjaFZBRChzdHJlYW0sICgpID0+IHsgc3RvcFJlY29yZGluZygpOyBzZXRUaW1lb3V0KG9uQXV0b1N0b3AsIDM1MCk7IH0pOwogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHN0b3BSZWNvcmRpbmcoKSB7CiAgdHJ5IHsgaWYgKG1lZGlhUmVjICYmIG1lZGlhUmVjLnN0YXRlICE9PSAiaW5hY3RpdmUiKSBtZWRpYVJlYy5zdG9wKCk7IH0gY2F0Y2ggKGUpIHt9Cn0KZnVuY3Rpb24gcGxheU15UmVjKCkgewogIGlmICghbXlSZWNVcmwpIHJldHVybjsKICBzcGVlY2hTeW50aGVzaXMuY2FuY2VsKCk7CiAgbmV3IEF1ZGlvKG15UmVjVXJsKS5wbGF5KCk7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1pY1RhcCgpIHsKICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrS3IiKS50ZXh0Q29udGVudDsKICBjb25zdCByZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrUmVzdWx0Iik7CiAgY29uc3QgbWljID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1pY0J0biIpOwoKICBpZiAoU1IgJiYgIXNyQmxvY2tlZCkgewogICAgLy8gRnVsbCBjb2FjaDogcmVjb2duaXplIHNwZWVjaCArIHJlY29yZCBhdWRpbyBhdCB0aGUgc2FtZSB0aW1lCiAgICBpZiAocmVjb2duaXppbmcgJiYgYWN0aXZlUmVjKSB7IHRyeSB7IGFjdGl2ZVJlYy5zdG9wKCk7IH0gY2F0Y2ggKGUpIHt9IHJldHVybjsgfSAvLyB0YXAg4o+5ID0gZG9uZQogICAgaWYgKHJlY29nbml6aW5nKSByZXR1cm47CiAgICBpZiAoIShhd2FpdCBlbnN1cmVNaWMoKSkpIHsKICAgICAgcmVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICByZXR1cm47CiAgICB9CiAgICByZWNvZ25pemluZyA9IHRydWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrRGlmZiIpLmlubmVySFRNTCA9ICIiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBhd2FpdCBzdGFydFJlY29yZGluZygpOyAvLyBiZXN0IGVmZm9ydDsgcmVjb2duaXRpb24gd29ya3MgZXZlbiBpZiB0aGlzIGZhaWxzCiAgICBjb25zdCByZWMgPSBuZXcgU1IoKTsKICAgIGFjdGl2ZVJlYyA9IHJlYzsKICAgIHJlYy5sYW5nID0gImtvLUtSIjsgcmVjLmludGVyaW1SZXN1bHRzID0gZmFsc2U7IHJlYy5tYXhBbHRlcm5hdGl2ZXMgPSA1OwogICAgbWljLmNsYXNzTGlzdC5hZGQoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi4o+5IjsKICAgIHJlcy50ZXh0Q29udGVudCA9ICLwn46ZIFJlYWQgdGhlIHNlbnRlbmNlIOKAlCB0YXAg4o+5IHdoZW4geW91IGZpbmlzaC4iOwogICAgcmVjLm9ucmVzdWx0ID0gZSA9PiBhbmFseXplUHJvbih0YXJnZXQsIFsuLi5lLnJlc3VsdHNbMF1dLm1hcChyID0+IHIudHJhbnNjcmlwdCkpOwogICAgcmVjLm9uZXJyb3IgPSBldiA9PiB7CiAgICAgIHJlY29nbml6aW5nID0gZmFsc2U7IG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgc3RvcFJlY29yZGluZygpOwogICAgICBpZiAoZXYuZXJyb3IgPT09ICJub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJzZXJ2aWNlLW5vdC1hbGxvd2VkIiB8fCBldi5lcnJvciA9PT0gIm5ldHdvcmsiKSB7CiAgICAgICAgc3JCbG9ja2VkID0gdHJ1ZTsKICAgICAgICByZXMuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJoZWFyZCI+Vm9pY2UgcmVjb2duaXRpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGJyb3dzZXIg4oCUIHN3aXRjaGluZyB0byDwn46ZIHJlY29yZCAmYW1wOyBjb21wYXJlIG1vZGUuIFRhcCB0aGUgbWljIGFnYWluITwvc3Bhbj5gOwogICAgICB9IGVsc2UgaWYgKGV2LmVycm9yID09PSAibm8tc3BlZWNoIikgewogICAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5JIGRpZCBub3QgaGVhciBhbnl0aGluZyDigJQgdGFwIHRoZSBtaWMgYW5kIHRyeSBhZ2Fpbi48L3NwYW4+YDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXMuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJoZWFyZCI+U3BlZWNoIGNoZWNrIGZhaWxlZCAoJHtldi5lcnJvcn0pLiBSZWNvcmQsIGNvbXBhcmUsIGFuZCBncmFkZSB5b3Vyc2VsZjo8L3NwYW4+YDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgfQogICAgfTsKICAgIHJlYy5vbmVuZCA9ICgpID0+IHsgcmVjb2duaXppbmcgPSBmYWxzZTsgYWN0aXZlUmVjID0gbnVsbDsgbWljLmNsYXNzTGlzdC5yZW1vdmUoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7IHN0b3BSZWNvcmRpbmcoKTsgfTsKICAgIGFybUxpc3RlbihyZWMpOyByZWMuc3RhcnQoKTsKICB9IGVsc2UgewogICAgLy8gTm8gcmVjb2duaXRpb24gc2VydmljZTogcmVjb3JkIHdpdGggYXV0by1zdG9wIOKGlCBjb21wYXJlIOKGlCBzZWxmLWdyYWRlCiAgICBpZiAocmVjb3JkaW5nKSB7IC8vIG1hbnVhbCBzdG9wIHN0aWxsIHBvc3NpYmxlCiAgICAgIHJlY29yZGluZyA9IGZhbHNlOyBzdG9wUmVjb3JkaW5nKCk7CiAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBvayA9IGF3YWl0IHN0YXJ0UmVjb3JkaW5nKHRydWUsICgpID0+IHsKICAgICAgcmVjb3JkaW5nID0gZmFsc2U7CiAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICByZXMuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJoZWFyZCI+Tm93IGNvbXBhcmU6IOKWtu+4jyB5b3VyIHZvaWNlIHZzIPCflIogbmF0aXZlLiBIb3cgY2xvc2Ugd2VyZSB5b3U/PC9zcGFuPmA7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgfSk7CiAgICBpZiAoIW9rKSB7CiAgICAgIHNheSh0YXJnZXQpOwogICAgICByZXMuaW5uZXJIVE1MID0gbWljSGVscEh0bWwoKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJlY29yZGluZyA9IHRydWU7IG1pYy5jbGFzc0xpc3QuYWRkKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIuKPuSI7CiAgICByZXMudGV4dENvbnRlbnQgPSAi8J+UtCBSZWNvcmRpbmfigKYgcmVhZCB0aGUgc2VudGVuY2UsIHRoZW4gcGF1c2Ug4oCUIGl0IHN0b3BzIGJ5IGl0c2VsZi4iOwogIH0KfQoKZnVuY3Rpb24gY2xlYW5LcihzKSB7IHJldHVybiBzLnJlcGxhY2UoL1tccy4sIT/igKZ+XC3igJPigJQiJygpXS9nLCAiIik7IH0KLyogTGV2ZW5zaHRlaW4gYWxpZ25tZW50IHdpdGggYmFja3RyYWNlOiBmb3IgZWFjaCB0YXJnZXQgc3lsbGFibGUsIHdhcyBpdCBtYXRjaGVkCiAgIGFuZCBXSEFUIHdhcyBoZWFyZCBpbnN0ZWFkIChzdWJzdGl0dXRpb24pIG9yIG5vdGhpbmcgKHNraXBwZWQpLiAqLwpmdW5jdGlvbiBhbGlnblBhaXJzKHQsIGgpIHsKICBjb25zdCBtID0gdC5sZW5ndGgsIG4gPSBoLmxlbmd0aDsKICBjb25zdCBkID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogbSArIDEgfSwgKCkgPT4gQXJyYXkobiArIDEpLmZpbGwoMCkpOwogIGZvciAobGV0IGkgPSAwOyBpIDw9IG07IGkrKykgZFtpXVswXSA9IGk7CiAgZm9yIChsZXQgaiA9IDA7IGogPD0gbjsgaisrKSBkWzBdW2pdID0gajsKICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspCiAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspCiAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihkW2ktMV1bai0xXSArICh0W2ktMV0gPT09IGhbai0xXSA/IDAgOiAxKSwgZFtpLTFdW2pdICsgMSwgZFtpXVtqLTFdICsgMSk7CiAgY29uc3Qgb3V0ID0gQXJyYXkobSkuZmlsbChudWxsKTsKICBsZXQgaSA9IG0sIGogPSBuOwogIHdoaWxlIChpID4gMCB8fCBqID4gMCkgewogICAgaWYgKGkgPiAwICYmIGogPiAwICYmIGRbaV1bal0gPT09IGRbaS0xXVtqLTFdICsgKHRbaS0xXSA9PT0gaFtqLTFdID8gMCA6IDEpKSB7CiAgICAgIG91dFtpLTFdID0geyBvazogdFtpLTFdID09PSBoW2otMV0sIGhlYXJkOiBoW2otMV0gfTsgaS0tOyBqLS07CiAgICB9IGVsc2UgaWYgKGkgPiAwICYmIChqID09PSAwIHx8IGRbaV1bal0gPT09IGRbaS0xXVtqXSArIDEpKSB7CiAgICAgIG91dFtpLTFdID0geyBvazogZmFsc2UsIGhlYXJkOiBudWxsIH07IGktLTsKICAgIH0gZWxzZSBqLS07CiAgfQogIHJldHVybiBvdXQ7Cn0KZnVuY3Rpb24gc2NvcmVPZihwYWlycykgeyByZXR1cm4gcGFpcnMuZmlsdGVyKHAgPT4gcCAmJiBwLm9rKS5sZW5ndGggLyBNYXRoLm1heCgxLCBwYWlycy5sZW5ndGgpOyB9CgovKiAtLS0gSGFuZ3VsIGphbW8gZGVjb21wb3NpdGlvbjogZXhwbGFpbiBIT1cgYSBzeWxsYWJsZSB3YXMgbWlzcHJvbm91bmNlZCAtLS0gKi8KY29uc3QgSkFNT19JID0gWy4uLiLjhLHjhLLjhLTjhLfjhLjjhLnjhYHjhYLjhYPjhYXjhYbjhYfjhYjjhYnjhYrjhYvjhYzjhY3jhY4iXTsKY29uc3QgSkFNT19NID0gWyLjhY8iLCLjhZAiLCLjhZEiLCLjhZIiLCLjhZMiLCLjhZQiLCLjhZUiLCLjhZYiLCLjhZciLCLjhZgiLCLjhZkiLCLjhZoiLCLjhZsiLCLjhZwiLCLjhZ0iLCLjhZ4iLCLjhZ8iLCLjhaAiLCLjhaEiLCLjhaIiLCLjhaMiXTsKY29uc3QgSkFNT19GID0gWyIiLCLjhLEiLCLjhLIiLCLjhLMiLCLjhLQiLCLjhLUiLCLjhLYiLCLjhLciLCLjhLkiLCLjhLoiLCLjhLsiLCLjhLwiLCLjhL0iLCLjhL4iLCLjhL8iLCLjhYAiLCLjhYEiLCLjhYIiLCLjhYQiLCLjhYUiLCLjhYYiLCLjhYciLCLjhYgiLCLjhYoiLCLjhYsiLCLjhYwiLCLjhY0iLCLjhY4iXTsKY29uc3QgUk9NID0geyLjhLEiOiJnL2siLCLjhLIiOiJrayIsIuOEtCI6Im4iLCLjhLciOiJkL3QiLCLjhLgiOiJ0dCIsIuOEuSI6InIvbCIsIuOFgSI6Im0iLCLjhYIiOiJiL3AiLCLjhYMiOiJwcCIsIuOFhSI6InMiLCLjhYYiOiJzcyIsIuOFhyI6Im5nIiwi44WIIjoiaiIsIuOFiSI6ImpqIiwi44WKIjoiY2giLCLjhYsiOiJrIiwi44WMIjoidCIsIuOFjSI6InAiLCLjhY4iOiJoIiwKICLjhY8iOiJhIiwi44WQIjoiYWUiLCLjhZEiOiJ5YSIsIuOFkiI6InlhZSIsIuOFkyI6ImVvIiwi44WUIjoiZSIsIuOFlSI6InllbyIsIuOFliI6InllIiwi44WXIjoibyIsIuOFmCI6IndhIiwi44WZIjoid2FlIiwi44WaIjoib2UiLCLjhZsiOiJ5byIsIuOFnCI6InUiLCLjhZ0iOiJ3byIsIuOFniI6IndlIiwi44WfIjoid2kiLCLjhaAiOiJ5dSIsIuOFoSI6ImV1Iiwi44WiIjoidWkiLCLjhaMiOiJpIiwKICLjhLMiOiJrcyIsIuOEtSI6Im5qIiwi44S2IjoibmgiLCLjhLoiOiJsZyIsIuOEuyI6ImxtIiwi44S8IjoibGIiLCLjhL0iOiJscyIsIuOEviI6Imx0Iiwi44S/IjoibHAiLCLjhYAiOiJsaCIsIuOFhCI6InBzIn07CmZ1bmN0aW9uIGRlY0phbW8oY2gpIHsKICBjb25zdCBjID0gY2guY2hhckNvZGVBdCgwKSAtIDB4QUMwMDsKICBpZiAoYyA8IDAgfHwgYyA+IDExMTcxKSByZXR1cm4gbnVsbDsKICByZXR1cm4geyBpOiBNYXRoLmZsb29yKGMgLyA1ODgpLCBtOiBNYXRoLmZsb29yKChjICUgNTg4KSAvIDI4KSwgZjogYyAlIDI4IH07Cn0KZnVuY3Rpb24gZml4VGlwKHRDaCwgcCkgewogIGlmICghcCB8fCBwLmhlYXJkID09PSBudWxsKSByZXR1cm4gInlvdSBza2lwcGVkIHRoaXMgc3lsbGFibGUg4oCUIHNheSBpdCBjbGVhcmx5IjsKICBjb25zdCBhID0gZGVjSmFtbyh0Q2gpLCBiID0gZGVjSmFtbyhwLmhlYXJkKTsKICBpZiAoIWEgfHwgIWIpIHJldHVybiBgSSBoZWFyZCDigJwke3AuaGVhcmR94oCdIOKAlCBzYXkg4oCcJHt0Q2h94oCdYDsKICBjb25zdCB0aXBzID0gW107CiAgaWYgKGEuaSAhPT0gYi5pKSB0aXBzLnB1c2goYHN0YXJ0IHdpdGggPGI+JHtKQU1PX0lbYS5pXX08L2I+ICgke1JPTVtKQU1PX0lbYS5pXV0gfHwgIiJ9KSDigJQgSSBoZWFyZCAke0pBTU9fSVtiLmldfSAoJHtST01bSkFNT19JW2IuaV1dIHx8ICIifSlgKTsKICBpZiAoYS5tICE9PSBiLm0pIHRpcHMucHVzaChgdGhlIHZvd2VsIGlzIDxiPiR7SkFNT19NW2EubV19PC9iPiAoJHtST01bSkFNT19NW2EubV1dfSkg4oCUIEkgaGVhcmQgJHtKQU1PX01bYi5tXX0gKCR7Uk9NW0pBTU9fTVtiLm1dXX0pYCk7CiAgaWYgKGEuZiAhPT0gYi5mKSB7CiAgICBpZiAoYS5mID09PSAwKSB0aXBzLnB1c2goYG5vIGZpbmFsIHNvdW5kIOKAlCBJIGhlYXJkIGFuIGV4dHJhIDxiPiR7SkFNT19GW2IuZl19PC9iPmApOwogICAgZWxzZSBpZiAoYi5mID09PSAwKSB0aXBzLnB1c2goYGZpbmlzaCB3aXRoIHRoZSBmaW5hbCA8Yj4ke0pBTU9fRlthLmZdfTwvYj4gKCR7Uk9NW0pBTU9fRlthLmZdXSB8fCAiIn0pIOKAlCBpdCB3YXMgbWlzc2luZ2ApOwogICAgZWxzZSB0aXBzLnB1c2goYHRoZSBmaW5hbCBpcyA8Yj4ke0pBTU9fRlthLmZdfTwvYj4gKCR7Uk9NW0pBTU9fRlthLmZdXSB8fCAiIn0pIOKAlCBJIGhlYXJkICR7SkFNT19GW2IuZl19ICgke1JPTVtKQU1PX0ZbYi5mXV0gfHwgIiJ9KWApOwogIH0KICByZXR1cm4gdGlwcy5qb2luKCI7ICIpIHx8IGBzYXkg4oCcJHt0Q2h94oCdIG1vcmUgY2xlYXJseWA7Cn0KLyogRnVsbCBmZWVkYmFjazogY29sb3JlZCBzeWxsYWJsZXMgKyBjb25jcmV0ZSBmaXggaW5zdHJ1Y3Rpb25zICovCmZ1bmN0aW9uIHByb25GZWVkYmFjayh0YXJnZXQsIGhlYXJkUmF3KSB7CiAgY29uc3QgY3QgPSBjbGVhbktyKHRhcmdldCk7CiAgY29uc3QgcGFpcnMgPSBhbGlnblBhaXJzKGN0LCBjbGVhbktyKGhlYXJkUmF3KSk7CiAgbGV0IGsgPSAwOwogIGNvbnN0IGRpZmZIdG1sID0gWy4uLnRhcmdldF0ubWFwKGMgPT4gewogICAgaWYgKGNsZWFuS3IoYykgPT09ICIiKSByZXR1cm4gYzsKICAgIGNvbnN0IHAgPSBwYWlyc1trXTsgaysrOwogICAgcmV0dXJuIGA8c3BhbiBjbGFzcz0iJHtwICYmIHAub2sgPyAic3lsLW9rIiA6ICJzeWwtYmFkIn0iIG9uY2xpY2s9InNheSgnJHtjfScsMC40NSkiPiR7Y308L3NwYW4+YDsKICB9KS5qb2luKCIiKTsKICBjb25zdCBmaXhlcyA9IFtdOwogIGxldCBrMiA9IDA7CiAgZm9yIChjb25zdCBjIG9mIGN0KSB7CiAgICBjb25zdCBwID0gcGFpcnNbazJdOyBrMisrOwogICAgaWYgKCEocCAmJiBwLm9rKSAmJiBmaXhlcy5sZW5ndGggPCA0KQogICAgICBmaXhlcy5wdXNoKGA8ZGl2IGNsYXNzPSJmaXhsaW5lIiBvbmNsaWNrPSJzYXkoJyR7Y30nLDAuNCkiPjxiPiR7Y308L2I+IOKAlCAke2ZpeFRpcChjLCBwKX0gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWFjY2VudDIpO3doaXRlLXNwYWNlOm5vd3JhcDsiPvCflIogdGFwID0gc2xvdzwvc3Bhbj48L2Rpdj5gKTsKICB9CiAgcmV0dXJuIHsgcGN0OiBNYXRoLnJvdW5kKHNjb3JlT2YocGFpcnMpICogMTAwKSwgZGlmZkh0bWwsIGZpeGVzSHRtbDogZml4ZXMuam9pbigiIikgfTsKfQoKZnVuY3Rpb24gYW5hbHl6ZVByb24odGFyZ2V0LCBhbHRzKSB7CiAgbGV0IGJlc3QgPSB7IHBjdDogLTEsIGhlYXJkOiAiIiB9OwogIGFsdHMuZm9yRWFjaChhID0+IHsKICAgIGNvbnN0IGZiID0gcHJvbkZlZWRiYWNrKHRhcmdldCwgYSk7CiAgICBpZiAoZmIucGN0ID4gYmVzdC5wY3QpIGJlc3QgPSB7IC4uLmZiLCBoZWFyZDogYS50cmltKCkgfTsKICB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrRGlmZiIpLmlubmVySFRNTCA9IGJlc3QuZGlmZkh0bWw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0ZpeGVzIikuaW5uZXJIVE1MID0gYmVzdC5maXhlc0h0bWw7CiAgY29uc3QgcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa1Jlc3VsdCIpOwogIGNvbnN0IGhlYXJkID0gYDxkaXYgY2xhc3M9ImhlYXJkIj5IZWFyZDog4oCcJHtiZXN0LmhlYXJkfeKAnTwvZGl2PmA7CiAgaWYgKGJlc3QucGN0ID49IDk1KSB7CiAgICByZXMuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4ke2Jlc3QucGN0fSUg4oCUIHBlcmZlY3QgcHJvbnVuY2lhdGlvbiE8L3NwYW4+JHtoZWFyZH1gOwogICAgc3BlYWtHcmFkZSh0cnVlLCB0cnVlKTsKICB9IGVsc2UgaWYgKGJlc3QucGN0ID49IDgwKSB7CiAgICByZXMuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4ke2Jlc3QucGN0fSUg4oCUIGdyZWF0ISBTbWFsbCBwb2xpc2ggYmVsb3c6PC9zcGFuPiR7aGVhcmR9YDsKICAgIHNwZWFrR3JhZGUodHJ1ZSwgdHJ1ZSk7CiAgfSBlbHNlIGlmIChiZXN0LnBjdCA+PSA1MCkgewogICAgcmVzLmlubmVySFRNTCA9IGDwn5+hIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1nb2xkKSI+JHtiZXN0LnBjdH0lIOKAlCBjbG9zZSEgRml4IHRoZSByZWQgc3lsbGFibGVzIGJlbG93LCB0aGVuIHRyeSBhZ2Fpbi48L3NwYW4+JHtoZWFyZH1gOwogICAgc2Z4LmJhZCgpOwogIH0gZWxzZSB7CiAgICByZXMuaW5uZXJIVE1MID0gYPCfmYkgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiPiR7YmVzdC5wY3R9JSDigJQgbGlzdGVuIPCfkKIgc2xvdyBmaXJzdCwgdGhlbiByZXBlYXQgb25lIHdvcmQgYXQgYSB0aW1lLjwvc3Bhbj4ke2hlYXJkfWA7CiAgICBzZnguYmFkKCk7CiAgfQp9CmZ1bmN0aW9uIHNwZWFrR3JhZGUob2ssIHNpbGVudCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGlmIChvaykgewogICAgY29uc3Qgc3QgPSBsc3RhdGUoY3VyLm4pOwogICAgY29uc3Qga2V5ID0gc3BlYWtJZHggJSBzcGVha1NlbnRlbmNlcygpLmxlbmd0aDsKICAgIGlmICghc3Quc3Bva2VuLmluY2x1ZGVzKGtleSkpIHN0LnNwb2tlbi5wdXNoKGtleSk7CiAgICBnYWluWHAoNSk7IGlmICghc2lsZW50KSB7IHNmeC5nb29kKCk7IGZsb2F0RngoIis1IFhQIiwgIiMyRjdENEYiKTsgfQogICAgaWYgKHN0LnNwb2tlbi5sZW5ndGggPj0gNSAmJiAhc3Quc3RhcnMuc3BlYWspIHsKICAgICAgc3Quc3RhcnMuc3BlYWsgPSB0cnVlOyBjb25mZXR0aSgpOyBzZngud2luKCk7IGZsb2F0RngoIuKtkCBTcGVha2luZyBzdGFyISIsICIjQjA3RDI4Iik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2YoY3VyLm4pOwogICAgfQogICAgcGVyc2lzdCgpOwogICAgc2V0VGltZW91dCgoKSA9PiBzcGVha01vdmUoMSksIDE4MDApOyAvLyBnaXZlIHRpbWUgdG8gc2VlIHRoZSBzY29yZS9kaWZmIGJlZm9yZSBhZHZhbmNpbmcKICB9IGVsc2UgewogICAgZ2FpblhwKDEpOyBmbG9hdEZ4KCIrMSBYUCBmb3IgdHJ5aW5nIiwgIiM3NTY2NEQiKTsKICB9Cn0KCi8qID09PT09PT09PT09PT09PSBHQU1FIEhFTFBFUlMgPT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIGdhbWVQb29sKCkgeyByZXR1cm4gY3VyLndvcmRzOyB9CmZ1bmN0aW9uIHNob3dSZXN1bHQoe2Vtb2ppLCB0aXRsZSwgc3ViLCBzY29yZSwgeHAsIGNvbWJvLCByZXBsYXl9KSB7CiAgY2xlYXJJbnRlcnZhbChhY3RpdmVUaW1lcik7IGFjdGl2ZVRpbWVyID0gbnVsbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzRW1vamkiKS50ZXh0Q29udGVudCA9IGVtb2ppOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNUaXRsZSIpLnRleHRDb250ZW50ID0gdGl0bGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc1N1YiIpLnRleHRDb250ZW50ID0gc3ViIHx8ICIiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNTY29yZSIpLnRleHRDb250ZW50ID0gc2NvcmU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc1hwIikudGV4dENvbnRlbnQgPSAiKyIgKyB4cDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzQ29tYm8iKS50ZXh0Q29udGVudCA9IGNvbWJvOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNSZXBsYXkiKS5vbmNsaWNrID0gcmVwbGF5OwogIGlmIChjb21ibyA+IHNhdmUuYmVzdENvbWJvKSBzYXZlLmJlc3RDb21ibyA9IGNvbWJvOwogIGdhaW5YcCh4cCk7IHBlcnNpc3QoKTsgcmVuZGVySHVkKCk7IHNob3coInJlc3VsdCIpOwogIGlmICh4cCA+IDApIHsgY29uZmV0dGkoKTsgc2Z4LndpbigpOyB9Cn0KCi8qID09PT09PT09PT09PT09PSBTUEVFRCBRVUlaID09PT09PT09PT09PT09PSAqLwpsZXQgUSA9IHt9OwpmdW5jdGlvbiBzdGFydFF1aXooKSB7CiAgUSA9IHsgc2NvcmU6MCwgY29tYm86MCwgbWF4Q29tYm86MCwgdGltZTo2MCwgeHA6MCB9OwogIHNob3coInF1aXoiKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpelNjb3JlIikudGV4dENvbnRlbnQgPSAwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6Q29tYm8iKS50ZXh0Q29udGVudCA9ICIiOwogIHF1aXpOZXh0KCk7IHF1aXpUaWNrKCk7CiAgYWN0aXZlVGltZXIgPSBzZXRJbnRlcnZhbChxdWl6VGljaywgMTAwMCk7Cn0KZnVuY3Rpb24gcXVpelRpY2soKSB7CiAgY29uc3QgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6VGltZXIiKTsKICB0LnRleHRDb250ZW50ID0gUS50aW1lOyB0LmNsYXNzTGlzdC50b2dnbGUoImxvdyIsIFEudGltZSA8PSAxMCk7CiAgaWYgKFEudGltZSA8PSAwKSB7CiAgICBzaG93UmVzdWx0KHsgZW1vamk6IFEuc2NvcmUgPj0gMTAwID8gIvCfj4YiIDogIvCfkqoiLCB0aXRsZTogIlRpbWUncyB1cCEiLAogICAgICBzdWI6ICJNYXggY29tYm8gw5ciICsgUS5tYXhDb21ibywgc2NvcmU6IFEuc2NvcmUsIHhwOiBRLnhwLCBjb21ibzogUS5tYXhDb21ibywgcmVwbGF5OiBzdGFydFF1aXogfSk7CiAgICByZXR1cm47CiAgfQogIFEudGltZS0tOwp9CmZ1bmN0aW9uIHF1aXpOZXh0KCkgewogIGNvbnN0IGNhcmRzID0gc2h1ZmZsZShnYW1lUG9vbCgpKTsKICBjb25zdCBjYXJkID0gY2FyZHNbMF07CiAgY29uc3QgcmV2ZXJzZSA9IE1hdGgucmFuZG9tKCkgPiAwLjU7CiAgUS5hbnN3ZXIgPSByZXZlcnNlID8gY2FyZFswXSA6IGNhcmRbMl07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpMYWJlbCIpLnRleHRDb250ZW50ID0gcmV2ZXJzZSA/ICJXaGljaCBpcyBLb3JlYW4gZm9y4oCmIiA6ICJXaGF0IGRvZXMgdGhpcyBtZWFuPyI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpXb3JkIikudGV4dENvbnRlbnQgPSAocmV2ZXJzZSA/ICIiIDogY2FyZFs0XSArICIgIikgKyAocmV2ZXJzZSA/IGNhcmRbMl0gOiBjYXJkWzBdKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpekhpbnQiKS50ZXh0Q29udGVudCA9IHJldmVyc2UgPyAiIiA6IGNhcmRbMV07CiAgaWYgKCFyZXZlcnNlKSBzYXkoY2FyZFswXSk7CiAgY29uc3Qgb3B0aW9ucyA9IHNodWZmbGUoY2FyZHMuc2xpY2UoMCwgNCkpOwogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6QW5zd2VycyIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBvcHRpb25zLmZvckVhY2gobyA9PiB7CiAgICBjb25zdCBsYWJlbCA9IHJldmVyc2UgPyBvWzBdIDogb1syXTsKICAgIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIGIuY2xhc3NOYW1lID0gImFucyI7IGIudGV4dENvbnRlbnQgPSBsYWJlbDsKICAgIGIub25jbGljayA9IGV2ID0+IHF1aXpBbnN3ZXIoYiwgbGFiZWwgPT09IFEuYW5zd2VyLCBldik7CiAgICBib3guYXBwZW5kQ2hpbGQoYik7CiAgfSk7Cn0KZnVuY3Rpb24gcXVpekFuc3dlcihidG4sIG9rLCBldikgewogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNxdWl6QW5zd2VycyAuYW5zIikuZm9yRWFjaChiID0+IGIub25jbGljayA9IG51bGwpOwogIGlmIChvaykgewogICAgYnRuLmNsYXNzTGlzdC5hZGQoImNvcnJlY3QiKTsKICAgIFEuY29tYm8rKzsgUS5tYXhDb21ibyA9IE1hdGgubWF4KFEubWF4Q29tYm8sIFEuY29tYm8pOwogICAgY29uc3QgbXVsdCA9IDEgKyBNYXRoLmZsb29yKFEuY29tYm8gLyAzKTsKICAgIGNvbnN0IHB0cyA9IDEwICogbXVsdDsKICAgIFEuc2NvcmUgKz0gcHRzOyBRLnhwICs9IDIgKiBtdWx0OwogICAgc2Z4Lmdvb2QoKTsKICAgIGZsb2F0RngoIisiICsgcHRzICsgKG11bHQgPiAxID8gIiDDlyIgKyBtdWx0IDogIiIpLCAiIzJGN0Q0RiIsIGV2LmNsaWVudFgsIGV2LmNsaWVudFkpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpTY29yZSIpLnRleHRDb250ZW50ID0gUS5zY29yZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6Q29tYm8iKS50ZXh0Q29udGVudCA9IFEuY29tYm8gPj0gMyA/ICLwn5Slw5ciICsgbXVsdCA6ICIiOwogICAgc2V0VGltZW91dChxdWl6TmV4dCwgMzUwKTsKICB9IGVsc2UgewogICAgYnRuLmNsYXNzTGlzdC5hZGQoIndyb25nIik7CiAgICBRLmNvbWJvID0gMDsgc2Z4LmJhZCgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpDb21ibyIpLnRleHRDb250ZW50ID0gIiI7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjcXVpekFuc3dlcnMgLmFucyIpLmZvckVhY2goYiA9PiB7CiAgICAgIGlmIChiLnRleHRDb250ZW50ID09PSBRLmFuc3dlcikgYi5jbGFzc0xpc3QuYWRkKCJjb3JyZWN0Iik7CiAgICB9KTsKICAgIHNldFRpbWVvdXQocXVpek5leHQsIDkwMCk7CiAgfQp9CgovKiA9PT09PT09PT09PT09PT0gV09SRCBNQVRDSCA9PT09PT09PT09PT09PT0gKi8KbGV0IE0gPSB7fTsKZnVuY3Rpb24gc3RhcnRNYXRjaCgpIHsKICBjb25zdCBjYXJkcyA9IHNodWZmbGUoZ2FtZVBvb2woKSkuc2xpY2UoMCwgOCk7CiAgTSA9IHsgdGltZTo5MCwgbGVmdDpjYXJkcy5sZW5ndGgsIHNlbDpudWxsLCBzdGFydDpEYXRlLm5vdygpLCB4cDowIH07CiAgc2hvdygibWF0Y2giKTsKICBjb25zdCB0aWxlcyA9IHNodWZmbGUoWwogICAgLi4uY2FyZHMubWFwKGMgPT4gKHtpZDpjWzBdLCBsYWJlbDpjWzBdLCBzaWRlOiJrciJ9KSksCiAgICAuLi5jYXJkcy5tYXAoYyA9PiAoe2lkOmNbMF0sIGxhYmVsOmNbNF0gKyAiICIgKyBjWzJdLCBzaWRlOiJlbiJ9KSkKICBdKTsKICBjb25zdCBncmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoR3JpZCIpOwogIGdyaWQuaW5uZXJIVE1MID0gIiI7CiAgdGlsZXMuZm9yRWFjaCh0ID0+IHsKICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGQuY2xhc3NOYW1lID0gInRpbGUiOyBkLnRleHRDb250ZW50ID0gdC5sYWJlbDsKICAgIGQuZGF0YXNldC5pZCA9IHQuaWQ7IGQuZGF0YXNldC5zaWRlID0gdC5zaWRlOwogICAgZC5vbmNsaWNrID0gKCkgPT4gbWF0Y2hQaWNrKGQpOwogICAgZ3JpZC5hcHBlbmRDaGlsZChkKTsKICB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWF0Y2hMZWZ0IikudGV4dENvbnRlbnQgPSBNLmxlZnQ7CiAgbWF0Y2hUaWNrKCk7CiAgYWN0aXZlVGltZXIgPSBzZXRJbnRlcnZhbChtYXRjaFRpY2ssIDEwMDApOwp9CmZ1bmN0aW9uIG1hdGNoVGljaygpIHsKICBjb25zdCB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoVGltZXIiKTsKICB0LnRleHRDb250ZW50ID0gTS50aW1lOyB0LmNsYXNzTGlzdC50b2dnbGUoImxvdyIsIE0udGltZSA8PSAxNSk7CiAgaWYgKE0udGltZSA8PSAwKSB7CiAgICBzaG93UmVzdWx0KHsgZW1vamk6IuKPsCIsIHRpdGxlOiJPdXQgb2YgdGltZSEiLCBzdWI6TS5sZWZ0ICsgIiBwYWlycyBsZWZ0IOKAlCB0cnkgYWdhaW4hIiwKICAgICAgc2NvcmU6KDggLSBNLmxlZnQpICsgIi84IiwgeHA6TS54cCwgY29tYm86MCwgcmVwbGF5OnN0YXJ0TWF0Y2ggfSk7CiAgICByZXR1cm47CiAgfQogIE0udGltZS0tOwp9CmZ1bmN0aW9uIG1hdGNoUGljayh0aWxlKSB7CiAgaWYgKHRpbGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJkb25lIikpIHJldHVybjsKICBpZiAoTS5zZWwgPT09IHRpbGUpIHsgdGlsZS5jbGFzc0xpc3QucmVtb3ZlKCJzZWwiKTsgTS5zZWwgPSBudWxsOyByZXR1cm47IH0KICBpZiAodGlsZS5kYXRhc2V0LnNpZGUgPT09ICJrciIpIHNheSh0aWxlLmRhdGFzZXQuaWQsIDEpOwogIGlmICghTS5zZWwpIHsgTS5zZWwgPSB0aWxlOyB0aWxlLmNsYXNzTGlzdC5hZGQoInNlbCIpOyByZXR1cm47IH0KICBjb25zdCBhID0gTS5zZWwsIGIgPSB0aWxlOwogIE0uc2VsID0gbnVsbDsgYS5jbGFzc0xpc3QucmVtb3ZlKCJzZWwiKTsKICBpZiAoYS5kYXRhc2V0LmlkID09PSBiLmRhdGFzZXQuaWQgJiYgYS5kYXRhc2V0LnNpZGUgIT09IGIuZGF0YXNldC5zaWRlKSB7CiAgICBhLmNsYXNzTGlzdC5hZGQoImRvbmUiKTsgYi5jbGFzc0xpc3QuYWRkKCJkb25lIik7CiAgICBNLmxlZnQtLTsgTS54cCArPSA1OyBzZnguZ29vZCgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoTGVmdCIpLnRleHRDb250ZW50ID0gTS5sZWZ0OwogICAgaWYgKE0ubGVmdCA9PT0gMCkgewogICAgICBjb25zdCBzZWNzID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIE0uc3RhcnQpIC8gMTAwMCk7CiAgICAgIE0ueHAgKz0gTWF0aC5mbG9vcihNYXRoLm1heCgwLCA5MCAtIHNlY3MpIC8gMyk7CiAgICAgIHNob3dSZXN1bHQoeyBlbW9qaToi8J+nqSIsIHRpdGxlOiJBbGwgbWF0Y2hlZCBpbiAiICsgc2VjcyArICJzISIsCiAgICAgICAgc3ViOiJTcGVlZCBib251cyBpbmNsdWRlZCIsIHNjb3JlOnNlY3MgKyAicyIsIHhwOk0ueHAsIGNvbWJvOjAsIHJlcGxheTpzdGFydE1hdGNoIH0pOwogICAgfQogIH0gZWxzZSB7CiAgICBhLmNsYXNzTGlzdC5hZGQoImJhZCIpOyBiLmNsYXNzTGlzdC5hZGQoImJhZCIpOyBzZnguYmFkKCk7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsgYS5jbGFzc0xpc3QucmVtb3ZlKCJiYWQiKTsgYi5jbGFzc0xpc3QucmVtb3ZlKCJiYWQiKTsgfSwgNDAwKTsKICB9Cn0KCi8qID09PT09PT09PT09PT09PSBTRU5URU5DRSBCVUlMREVSID09PT09PT09PT09PT09PSAqLwpsZXQgQiA9IHt9OwpmdW5jdGlvbiBzdGFydEJ1aWxkZXIoKSB7CiAgY29uc3QgdXNhYmxlID0gZ2FtZVBvb2woKS5maWx0ZXIoYyA9PiBjWzVdLnNwbGl0KCIgIikubGVuZ3RoID49IDMpOwogIEIgPSB7IHJvdW5kczogc2h1ZmZsZSh1c2FibGUpLnNsaWNlKDAsIDUpLCBpOjAsIHNjb3JlOjAsIHhwOjAsIHRyaWVzOjAgfTsKICBpZiAoIUIucm91bmRzLmxlbmd0aCkgeyBhbGVydCgiVGhpcyBsZXNzb24gaGFzIG5vIGxvbmcgc2VudGVuY2VzIHlldCDigJQgdHJ5IGFub3RoZXIgbW9kZSEiKTsgcmV0dXJuOyB9CiAgc2hvdygiYnVpbGRlciIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNjb3JlIikudGV4dENvbnRlbnQgPSAwOwogIGJ1aWxkZXJSb3VuZCgpOwp9CmZ1bmN0aW9uIGJ1aWxkZXJSb3VuZCgpIHsKICBjb25zdCBjYXJkID0gQi5yb3VuZHNbQi5pXTsKICBCLndvcmRzID0gY2FyZFs1XS5zcGxpdCgiICIpOwogIEIucGxhY2VkID0gW107IEIudHJpZXMgPSAwOyBCLnNlbnRlbmNlID0gY2FyZFs1XTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVpbGRQcm9ncmVzcyIpLnRleHRDb250ZW50ID0gKEIuaSArIDEpICsgIiAvICIgKyBCLnJvdW5kcy5sZW5ndGg7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkRW4iKS50ZXh0Q29udGVudCA9IGNhcmRbNl07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2xvdCIpLmlubmVySFRNTCA9ICIiOwogIGNvbnN0IHBvb2xCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVpbGRQb29sIik7CiAgcG9vbEJveC5pbm5lckhUTUwgPSAiIjsKICBzaHVmZmxlKEIud29yZHMubWFwKCh3LCBpZHgpID0+ICh7dywgaWR4fSkpKS5mb3JFYWNoKGl0ZW0gPT4gewogICAgY29uc3QgY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgY2hpcC5jbGFzc05hbWUgPSAid29yZGNoaXAiOyBjaGlwLnRleHRDb250ZW50ID0gaXRlbS53OwogICAgY2hpcC5vbmNsaWNrID0gKCkgPT4gewogICAgICBpZiAoY2hpcC5jbGFzc0xpc3QuY29udGFpbnMoInBsYWNlZCIpKSByZXR1cm47CiAgICAgIGNoaXAuY2xhc3NMaXN0LmFkZCgicGxhY2VkIik7CiAgICAgIEIucGxhY2VkLnB1c2goeyB3OiBpdGVtLncsIGNoaXAgfSk7CiAgICAgIGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgcy5jbGFzc05hbWUgPSAid29yZGNoaXAiOyBzLnRleHRDb250ZW50ID0gaXRlbS53OwogICAgICBzLm9uY2xpY2sgPSAoKSA9PiB7IEIucGxhY2VkID0gQi5wbGFjZWQuZmlsdGVyKHAgPT4gcC5jaGlwICE9PSBjaGlwKTsgY2hpcC5jbGFzc0xpc3QucmVtb3ZlKCJwbGFjZWQiKTsgcy5yZW1vdmUoKTsgfTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2xvdCIpLmFwcGVuZENoaWxkKHMpOwogICAgfTsKICAgIHBvb2xCb3guYXBwZW5kQ2hpbGQoY2hpcCk7CiAgfSk7Cn0KZnVuY3Rpb24gYnVpbGRlclJlc2V0KCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNsb3QiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjYnVpbGRQb29sIC53b3JkY2hpcCIpLmZvckVhY2goYyA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoInBsYWNlZCIpKTsKICBCLnBsYWNlZCA9IFtdOwp9CmZ1bmN0aW9uIGJ1aWxkZXJDaGVjaygpIHsKICBjb25zdCBhdHRlbXB0ID0gQi5wbGFjZWQubWFwKHAgPT4gcC53KS5qb2luKCIgIik7CiAgaWYgKGF0dGVtcHQgPT09IEIud29yZHMuam9pbigiICIpKSB7CiAgICBjb25zdCBwdHMgPSBCLnRyaWVzID09PSAwID8gMjAgOiAxMDsKICAgIEIuc2NvcmUgKz0gcHRzOyBCLnhwICs9IEIudHJpZXMgPT09IDAgPyA4IDogNDsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNjb3JlIikudGV4dENvbnRlbnQgPSBCLnNjb3JlOwogICAgc2Z4Lmdvb2QoKTsgZmxvYXRGeCgiKyIgKyBwdHMsICIjMkY3RDRGIik7CiAgICBzYXkoQi5zZW50ZW5jZSk7CiAgICBCLmkrKzsKICAgIGlmIChCLmkgPj0gQi5yb3VuZHMubGVuZ3RoKSB7CiAgICAgIHNob3dSZXN1bHQoeyBlbW9qaTogQi5zY29yZSA9PT0gMTAwID8gIvCfkq8iIDogIvCflKgiLAogICAgICAgIHRpdGxlOiBCLnNjb3JlID09PSAxMDAgPyAiUEVSRkVDVCBydW4hIiA6ICJTZW50ZW5jZXMgYnVpbHQhIiwKICAgICAgICBzdWI6ICJSZWFsIHNlbnRlbmNlcyBmcm9tIFF1ZXN0ICIgKyBjdXIubiwgc2NvcmU6IEIuc2NvcmUsIHhwOiBCLnhwLCBjb21ibzogMCwgcmVwbGF5OiBzdGFydEJ1aWxkZXIgfSk7CiAgICB9IGVsc2Ugc2V0VGltZW91dChidWlsZGVyUm91bmQsIDkwMCk7CiAgfSBlbHNlIHsKICAgIEIudHJpZXMrKzsgc2Z4LmJhZCgpOwogICAgY29uc3Qgc2xvdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNsb3QiKTsKICAgIHNsb3Quc3R5bGUuYW5pbWF0aW9uID0gInNoYWtlIC4zcyI7CiAgICBzZXRUaW1lb3V0KCgpID0+IHNsb3Quc3R5bGUuYW5pbWF0aW9uID0gIiIsIDM1MCk7CiAgICBpZiAoQi50cmllcyA+PSAyKSBmbG9hdEZ4KCJIaW50OiAiICsgQi53b3Jkc1swXSArICIg4oCmIiwgIiNCMDdEMjgiKTsKICB9Cn0KCi8qID09PT09PT09PT09PT09PSBCT1NTIEJBVFRMRSA9PT09PT09PT09PT09PT0gKi8KbGV0IFggPSB7fTsKZnVuY3Rpb24gc3RhcnRCb3NzKCkgewogIFggPSB7IGhwOjEwMCwgaGVhcnRzOjMsIGRtZzowLCB4cDowLCBjb21ibzowLCBtYXhDb21ibzowIH07CiAgc2hvdygiYm9zcyIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzVGl0bGUiKS50ZXh0Q29udGVudCA9IGN1ci5ib3NzICsgIiAiICsgY3VyLmJvc3NOYW1lOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzU3ByaXRlIikudGV4dENvbnRlbnQgPSBjdXIuYm9zczsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc0hwIikuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NIZWFydHMiKS50ZXh0Q29udGVudCA9ICLinaTvuI/inaTvuI/inaTvuI8iOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzRG1nIikudGV4dENvbnRlbnQgPSAwOwogIGJvc3NOZXh0KCk7Cn0KZnVuY3Rpb24gYm9zc05leHQoKSB7CiAgY29uc3QgY2FyZHMgPSBzaHVmZmxlKGdhbWVQb29sKCkpOwogIGNvbnN0IGNhcmQgPSBjYXJkc1swXTsKICBjb25zdCBtb2RlID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyk7CiAgbGV0IGxhYmVsLCB3b3JkLCBhbnN3ZXIsIG9wdHM7CiAgaWYgKG1vZGUgPT09IDApIHsgbGFiZWwgPSAiVHJhbnNsYXRlIHRvIEVuZ2xpc2giOyB3b3JkID0gY2FyZFs0XSArICIgIiArIGNhcmRbMF07IGFuc3dlciA9IGNhcmRbMl07IG9wdHMgPSBjYXJkcy5zbGljZSgxLDQpLm1hcChjID0+IGNbMl0pOyBzYXkoY2FyZFswXSk7IH0KICBlbHNlIGlmIChtb2RlID09PSAxKSB7IGxhYmVsID0gIldoaWNoIGlzIEtvcmVhbiBmb3LigKYiOyB3b3JkID0gY2FyZFs0XSArICIgIiArIGNhcmRbMl07IGFuc3dlciA9IGNhcmRbMF07IG9wdHMgPSBjYXJkcy5zbGljZSgxLDQpLm1hcChjID0+IGNbMF0pOyB9CiAgZWxzZSB7CiAgICBjb25zdCBmaXJzdCA9IGNhcmRbMF0uc3BsaXQoIiAiKVswXTsKICAgIGxhYmVsID0gIkNvbXBsZXRlOiAiICsgY2FyZFs2XTsKICAgIHdvcmQgPSBjYXJkWzVdLnJlcGxhY2UoZmlyc3QsICJfX19fIik7CiAgICBhbnN3ZXIgPSBmaXJzdDsgb3B0cyA9IGNhcmRzLnNsaWNlKDEsNCkubWFwKGMgPT4gY1swXS5zcGxpdCgiICIpWzBdKTsKICB9CiAgWC5hbnN3ZXIgPSBhbnN3ZXI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NMYWJlbCIpLnRleHRDb250ZW50ID0gbGFiZWw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NXb3JkIikudGV4dENvbnRlbnQgPSB3b3JkOwogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzQW5zd2VycyIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBzaHVmZmxlKFthbnN3ZXIsIC4uLm9wdHNdKS5mb3JFYWNoKG8gPT4gewogICAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYi5jbGFzc05hbWUgPSAiYW5zIjsgYi50ZXh0Q29udGVudCA9IG87CiAgICBiLm9uY2xpY2sgPSBldiA9PiBib3NzQW5zd2VyKGIsIG8gPT09IGFuc3dlciwgZXYpOwogICAgYm94LmFwcGVuZENoaWxkKGIpOwogIH0pOwp9CmZ1bmN0aW9uIGJvc3NBbnN3ZXIoYnRuLCBvaywgZXYpIHsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjYm9zc0Fuc3dlcnMgLmFucyIpLmZvckVhY2goYiA9PiBiLm9uY2xpY2sgPSBudWxsKTsKICBjb25zdCBzcHJpdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc1Nwcml0ZSIpOwogIGlmIChvaykgewogICAgWC5jb21ibysrOyBYLm1heENvbWJvID0gTWF0aC5tYXgoWC5tYXhDb21ibywgWC5jb21ibyk7CiAgICBjb25zdCBkbWcgPSAxMCArIChYLmNvbWJvID49IDMgPyA1IDogMCk7CiAgICBYLmhwID0gTWF0aC5tYXgoMCwgWC5ocCAtIGRtZyk7CiAgICBYLmRtZyArPSBkbWc7IFgueHAgKz0gNDsKICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCJjb3JyZWN0Iik7IHNmeC5oaXQoKTsKICAgIHNwcml0ZS5jbGFzc0xpc3QuYWRkKCJoaXQiKTsgc2V0VGltZW91dCgoKSA9PiBzcHJpdGUuY2xhc3NMaXN0LnJlbW92ZSgiaGl0IiksIDQwMCk7CiAgICBmbG9hdEZ4KCItIiArIGRtZyArICIgSFAiLCAiI0NGMkUyRSIsIGV2LmNsaWVudFgsIGV2LmNsaWVudFkpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NIcCIpLnN0eWxlLndpZHRoID0gWC5ocCArICIlIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzRG1nIikudGV4dENvbnRlbnQgPSBYLmRtZzsKICAgIGlmIChYLmhwIDw9IDApIHsKICAgICAgc3ByaXRlLnRleHRDb250ZW50ID0gIvCfkoAiOyBYLnhwICs9IDMwOwogICAgICBjb25zdCBzdCA9IGxzdGF0ZShjdXIubik7CiAgICAgIGNvbnN0IGZpcnN0V2luID0gIXN0LnN0YXJzLmJvc3M7CiAgICAgIHN0LnN0YXJzLmJvc3MgPSB0cnVlOyBwZXJzaXN0KCk7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHNob3dSZXN1bHQoeyBlbW9qaToi4pqU77iPIiwgdGl0bGU6IGN1ci5ib3NzTmFtZSArICIgZGVmZWF0ZWQhIiwKICAgICAgICAgIHN1YjogZmlyc3RXaW4gPyAi4q2QIEJvc3Mgc3RhciBlYXJuZWQhICszMCBYUCBib251cyIgOiAiKzMwIFhQIHZpY3RvcnkgYm9udXMiLAogICAgICAgICAgc2NvcmU6IFguZG1nLCB4cDogWC54cCwgY29tYm86IFgubWF4Q29tYm8sIHJlcGxheTogc3RhcnRCb3NzIH0pOwogICAgICB9LCA4MDApOwogICAgICByZXR1cm47CiAgICB9CiAgfSBlbHNlIHsKICAgIFguY29tYm8gPSAwOyBYLmhlYXJ0cy0tOwogICAgYnRuLmNsYXNzTGlzdC5hZGQoIndyb25nIik7IHNmeC5iYWQoKTsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNib3NzQW5zd2VycyAuYW5zIikuZm9yRWFjaChiID0+IHsKICAgICAgaWYgKGIudGV4dENvbnRlbnQgPT09IFguYW5zd2VyKSBiLmNsYXNzTGlzdC5hZGQoImNvcnJlY3QiKTsKICAgIH0pOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NIZWFydHMiKS50ZXh0Q29udGVudCA9ICLinaTvuI8iLnJlcGVhdChYLmhlYXJ0cykgKyAi8J+WpCIucmVwZWF0KDMgLSBYLmhlYXJ0cyk7CiAgICBpZiAoWC5oZWFydHMgPD0gMCkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBzaG93UmVzdWx0KHsgZW1vamk6IvCfmLUiLCB0aXRsZToiRGVmZWF0ZWTigKYiLAogICAgICAgICAgc3ViOiBjdXIuYm9zc05hbWUgKyAiIGhhZCAiICsgWC5ocCArICIgSFAgbGVmdC4gUmV2aWV3IHRoZSBsZXNzb24gYW5kIHJldHVybiEiLAogICAgICAgICAgc2NvcmU6IFguZG1nLCB4cDogTWF0aC5mbG9vcihYLnhwIC8gMiksIGNvbWJvOiBYLm1heENvbWJvLCByZXBsYXk6IHN0YXJ0Qm9zcyB9KTsKICAgICAgfSwgOTAwKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0KICBzZXRUaW1lb3V0KGJvc3NOZXh0LCBvayA/IDUwMCA6IDEwMDApOwp9CgpyZW5kZXJNYXAoKTsgcmVuZGVySHVkKCk7Cjwvc2NyaXB0Pgo8L2Rpdj4=