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.
PHN0eWxlPgogIDpyb290IHsKICAgIC0tYmc6dHJhbnNwYXJlbnQ7IC0tY2FyZDojRkJGNkVBOyAtLWNhcmQyOiNFQ0UzQ0I7IC0tYWNjZW50OiNDNjhGM0U7IC0tYWNjZW50MjojNTAzQUE4OwogICAgLS1nb2xkOiNCMDdEMjg7IC0tZ3JlZW46IzJGN0Q0RjsgLS1yZWQ6I0NGMkUyRTsgLS10ZXh0OiMyQTJBMkE7IC0tbXV0ZWQ6Izc1NjY0RDsKICB9CiAgKiB7IG1hcmdpbjowOyBwYWRkaW5nOjA7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50OyB9CiAgI2txLWFwcCB7CiAgICB3aWR0aDoxMDB2dzsKICAgIHBvc2l0aW9uOnJlbGF0aXZlOwogICAgbGVmdDo1MCU7CiAgICBtYXJnaW4tbGVmdDotNTB2dzsKICAgIHBhZGRpbmc6MThweCAwIDUwcHg7CiAgICBmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUkiLCJBcHBsZSBTRCBHb3RoaWMgTmVvIixzYW5zLXNlcmlmOwogICAgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGNvbG9yOnZhcigtLXRleHQpOyBtaW4taGVpZ2h0OjEwMHZoOwogICAgYmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAxMCUsICNDNjhGM0UxOCAwJSwgdHJhbnNwYXJlbnQgNTAlKSwKICAgICAgICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgOTAlLCAjNTAzQUE4MTAgMCUsIHRyYW5zcGFyZW50IDUwJSk7CiAgfQogIC53cmFwIHsgbWF4LXdpZHRoOjY0MHB4OyBtYXJnaW46MCBhdXRvOyBwYWRkaW5nOjE2cHggMTRweCA3MHB4OyB9CiAgLyogZGVza3RvcDogdXNlIHRoZSByb29tIOKAlCBtYXAgc2NyZWVucyBnbyB3aWRlLCBmb2N1c2VkIHNjcmVlbnMgc3RheSByZWFkYWJsZSAqLwogIEBtZWRpYSAobWluLXdpZHRoOjkwMHB4KSB7CiAgICAud3JhcCB7IG1heC13aWR0aDoxMDgwcHg7IH0KICAgIC53cmFwIC5tYXAtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCwgMWZyKTsgfQogICAgI2xlc3NvbiwgI2ZyZWUsICNxdWl6LCAjbWF0Y2gsICNidWlsZGVyLCAjYm9zcywgI3Jlc3VsdCB7IG1heC13aWR0aDo3MjBweDsgbWFyZ2luOjAgYXV0bzsgfQogIH0KCiAgLyogSFVEICovCiAgLmh1ZCB7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTJweDsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNnB4OyBwYWRkaW5nOjEwcHggMTRweDsgbWFyZ2luLWJvdHRvbToxNHB4OyBib3gtc2hhZG93OjAgNHB4IDIwcHggcmdiYSgwLDAsMCwuMDgpOyB9CiAgLmF2YXRhciB7IHdpZHRoOjQ2cHg7IGhlaWdodDo0NnB4OyBib3JkZXItcmFkaXVzOjEycHg7IGZvbnQtc2l6ZToyNnB4OyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsI0M2OEYzRTMzLCM1MDNBQTgzMyk7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7IGZsZXg6bm9uZTsgfQogIC5odWQtbWlkIHsgZmxleDoxOyBtaW4td2lkdGg6MDsgfQogIC5odWQtdGl0bGUgeyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxNHB4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IG92ZXJmbG93OmhpZGRlbjsgdGV4dC1vdmVyZmxvdzplbGxpcHNpczsgfQogIC54cGJhciB7IGhlaWdodDo5cHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTApOyBib3JkZXItcmFkaXVzOjZweDsgbWFyZ2luLXRvcDo1cHg7IG92ZXJmbG93OmhpZGRlbjsgfQogIC54cGZpbGwgeyBoZWlnaHQ6MTAwJTsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tYWNjZW50KSx2YXIoLS1nb2xkKSk7IGJvcmRlci1yYWRpdXM6NnB4OyB0cmFuc2l0aW9uOndpZHRoIC41czsgfQogIC5odWQtc3ViIHsgZm9udC1zaXplOjEwLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjNweDsgfQogIC5zdHJlYWsgeyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZmxleDpub25lOyB9CiAgLnNwZGJ0biB7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1hY2NlbnQpOyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBjb2xvcjp2YXIoLS1hY2NlbnQpOyBib3JkZXItcmFkaXVzOjk5OXB4OyBwYWRkaW5nOjNweCAxMHB4OyBmb250LXNpemU6MTFweDsgZm9udC13ZWlnaHQ6NzAwOyBjdXJzb3I6cG9pbnRlcjsgZm9udC1mYW1pbHk6aW5oZXJpdDsgd2hpdGUtc3BhY2U6bm93cmFwOyB9CiAgLnN0cmVhayBiIHsgZGlzcGxheTpibG9jazsgZm9udC1zaXplOjE4cHg7IGNvbG9yOnZhcigtLWdvbGQpOyB9CgogIC5zY3JlZW4geyBkaXNwbGF5Om5vbmU7IGFuaW1hdGlvbjpwb3AgLjI1cyBlYXNlOyB9CiAgLnNjcmVlbi5hY3RpdmUgeyBkaXNwbGF5OmJsb2NrOyB9CiAgQGtleWZyYW1lcyBwb3AgeyBmcm9tIHsgb3BhY2l0eTowOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMHB4KSBzY2FsZSguOTgpO30gdG8geyBvcGFjaXR5OjE7IHRyYW5zZm9ybTpub25lOyB9IH0KICBoMSB7IGZvbnQtc2l6ZToyM3B4OyBtYXJnaW4tYm90dG9tOjJweDsgfQogIC5zdWJ0aXRsZSB7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEzcHg7IG1hcmdpbi1ib3R0b206MTRweDsgfQoKICAvKiBNQVAgKi8KICAubWFwLWdyaWQgeyBkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyOyBnYXA6MTBweDsgfQogIEBtZWRpYSAobWluLXdpZHRoOjUyMHB4KSB7IC5tYXAtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcjsgfSB9CiAgLmxjYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNnB4OyBwYWRkaW5nOjE0cHggMTJweDsgY3Vyc29yOnBvaW50ZXI7IGJvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7IHRyYW5zaXRpb246YWxsIC4xNXM7IHBvc2l0aW9uOnJlbGF0aXZlOyB9CiAgLmxjYXJkOmhvdmVyIHsgYm9yZGVyLWNvbG9yOnZhcigtLWFjY2VudDIpOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTsgfQogIC5sY2FyZCAubG51bSB7IGZvbnQtc2l6ZToxMHB4OyBmb250LXdlaWdodDo4MDA7IGNvbG9yOnZhcigtLW11dGVkKTsgbGV0dGVyLXNwYWNpbmc6MXB4OyB9CiAgLmxjYXJkIC5sZW1vamkgeyBmb250LXNpemU6MzBweDsgbWFyZ2luOjRweCAwOyB9CiAgLmxjYXJkIC5sa3IgeyBmb250LXNpemU6MTdweDsgZm9udC13ZWlnaHQ6ODAwOyB9CiAgLmxjYXJkIC5sZW4geyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyB9CiAgLmxjYXJkIC5sc3RhcnMgeyBtYXJnaW4tdG9wOjZweDsgZm9udC1zaXplOjEycHg7IGxldHRlci1zcGFjaW5nOjFweDsgfQogIC5sY2FyZCAubHByb2cgeyBoZWlnaHQ6NXB4OyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEwKTsgYm9yZGVyLXJhZGl1czo0cHg7IG1hcmdpbi10b3A6NnB4OyBvdmVyZmxvdzpoaWRkZW47IH0KICAubGNhcmQgLmxwcm9nIGkgeyBkaXNwbGF5OmJsb2NrOyBoZWlnaHQ6MTAwJTsgYmFja2dyb3VuZDp2YXIoLS1ncmVlbik7IGJvcmRlci1yYWRpdXM6NHB4OyB9CgogIC8qIExFU1NPTiBoZWFkZXIgKyB0YWJzICovCiAgLmxoZWFkIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMHB4OyBtYXJnaW4tYm90dG9tOjEycHg7IH0KICAvKiBBIGJhcmUgZ3JleSBhcnJvdyBvbiBhIGNyZWFtIGNhcmQgcmVhZHMgYXMgZGVjb3JhdGlvbiwgbm90IGEgY29udHJvbCAtLSBhCiAgICAgZmlyc3QtdGltZSB0ZXN0ZXIgY291bGQgbm90IGZpbmQgaXQuIEl0IG5vdyBjYXJyaWVzIHRoZSBhcHAncyBvd24gYnV0dG9uCiAgICAgbGFuZ3VhZ2U6IGdvbGQgYm9yZGVyLCB0aGUgd29yZCBCYWNrLCBhbmQgYSA0NHB4IHRhcCB0YXJnZXQuICovCiAgLmJhY2sgeyBjdXJzb3I6cG9pbnRlcjsgY29sb3I6dmFyKC0tZ29sZCk7IGZvbnQtc2l6ZToxNXB4OyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLWdvbGQpOyBmb250LXdlaWdodDo4MDA7IHBhZGRpbmc6MTBweCAxNXB4OyBib3JkZXItcmFkaXVzOjEycHg7IG1pbi1oZWlnaHQ6NDRweDsgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBnYXA6NnB4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IGZsZXg6bm9uZTsgfQogIC5iYWNrOm5vdCguYmFjay1sYWJlbGxlZCk6OmFmdGVyIHsgY29udGVudDoiQmFjayI7IH0KICAuYmFjazphY3RpdmUgeyBvcGFjaXR5Oi42NTsgfQogIC5saGVhZCAudCB7IGZsZXg6MTsgfQogIC5saGVhZCAudCBiIHsgZm9udC1zaXplOjE4cHg7IGRpc3BsYXk6YmxvY2s7IH0KICAubGhlYWQgLnQgc3BhbiB7IGZvbnQtc2l6ZToxMS41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgfQogIC50YWJzIHsgZGlzcGxheTpmbGV4OyBnYXA6NnB4OyBtYXJnaW4tYm90dG9tOjE0cHg7IG92ZXJmbG93LXg6YXV0bzsgcGFkZGluZy1ib3R0b206MnB4OyB9CiAgLnRhYiB7IGZsZXg6MTsgbWluLXdpZHRoOjcwcHg7IHBhZGRpbmc6OXB4IDRweDsgYm9yZGVyLXJhZGl1czoxMnB4OyBib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC13ZWlnaHQ6ODAwOyBmb250LXNpemU6MTJweDsgY3Vyc29yOnBvaW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyB3aGl0ZS1zcGFjZTpub3dyYXA7IH0KICAudGFiLm9uIHsgYm9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7IGNvbG9yOnZhcigtLXRleHQpOyBiYWNrZ3JvdW5kOiNDNjhGM0UxYTsgfQoKICAvKiBMRUFSTiBjYXJkICovCiAgLndjYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoyMnB4OyBwYWRkaW5nOjI0cHggMThweCAxOHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm94LXNoYWRvdzowIDRweCAyNHB4IHJnYmEoMCwwLDAsLjEwKTsgfQogIC53Y2FyZCAud2Vtb2ppIHsgZm9udC1zaXplOjY0cHg7IGxpbmUtaGVpZ2h0OjEuMTsgZmlsdGVyOmRyb3Atc2hhZG93KDAgNnB4IDE0cHggIzAwMDAwMDY2KTsgfQogIC53Y2FyZCAud2tyIHsgZm9udC1zaXplOjMycHg7IGZvbnQtd2VpZ2h0OjgwMDsgbWFyZ2luLXRvcDo4cHg7IGN1cnNvcjpwb2ludGVyOyB9CiAgLndjYXJkIC53cm8geyBmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tYWNjZW50Mik7IG1hcmdpbi10b3A6MnB4OyB9CiAgLndjYXJkIC53bWVhbiB7IGZvbnQtc2l6ZToxOHB4OyBmb250LXdlaWdodDo3MDA7IGNvbG9yOnZhcigtLWdvbGQpOyBtYXJnaW4tdG9wOjEwcHg7IH0KICAud2NhcmQgLnd2aSB7IGZvbnQtc2l6ZToxM3B4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6MnB4OyB9CiAgLndjYXJkIC53ZXggeyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA2KTsgYm9yZGVyLXJhZGl1czoxNHB4OyBwYWRkaW5nOjEycHg7IG1hcmdpbi10b3A6MTRweDsgZm9udC1zaXplOjE1cHg7IGN1cnNvcjpwb2ludGVyOyB9CiAgLndjYXJkIC53ZXggLmV4ZW4geyBmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXN0eWxlOml0YWxpYzsgbWFyZ2luLXRvcDo0cHg7IH0KICAubGVhcm4tbmF2IHsgZGlzcGxheTpmbGV4OyBnYXA6OHB4OyBtYXJnaW4tdG9wOjEycHg7IH0KICAubGVhcm4tbmF2IC5idG4geyBmbGV4OjE7IH0KICAua25vdyB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyx2YXIoLS1ncmVlbiksIzFGNUEzOCkgIWltcG9ydGFudDsgfQogIC5sZWFybi1jb3VudCB7IHRleHQtYWxpZ246Y2VudGVyOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMnB4OyBtYXJnaW4tdG9wOjEwcHg7IH0KICAuc25kYnRuIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7IGNvbG9yOnZhcigtLXRleHQpOyBib3JkZXItcmFkaXVzOjEycHg7IHBhZGRpbmc6N3B4IDE0cHg7IGZvbnQtc2l6ZToxNHB4OyBjdXJzb3I6cG9pbnRlcjsgZm9udC13ZWlnaHQ6NzAwOyBtYXJnaW46MTBweCAzcHggMDsgfQogIC5zbmRidG46YWN0aXZlIHsgdHJhbnNmb3JtOnNjYWxlKC45NSk7IH0KCiAgLyogU1RPUlkgKi8KICAuc3RhZ2UgeyBib3JkZXItcmFkaXVzOjIwcHg7IG1pbi1oZWlnaHQ6MTUwcHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBnYXA6MTRweDsgcGFkZGluZzoxOHB4OyBtYXJnaW4tYm90dG9tOjEycHg7IGJveC1zaGFkb3c6aW5zZXQgMCAtMzBweCA0MHB4IHJnYmEoMCwwLDAsLjA2KSwgMCA0cHggMjBweCByZ2JhKDAsMCwwLC4wOCk7IHBvc2l0aW9uOnJlbGF0aXZlOyBvdmVyZmxvdzpoaWRkZW47IH0KICAuc3RhZ2UgLmFjdG9yIHsgZm9udC1zaXplOjQ2cHg7IGFuaW1hdGlvbjpib2IgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZTsgZmlsdGVyOmRyb3Atc2hhZG93KDAgNnB4IDEwcHggcmdiYSgwLDAsMCwuMTApKTsgfQogIC5zdGFnZSAuYWN0b3I6bnRoLWNoaWxkKDIpIHsgYW5pbWF0aW9uLWRlbGF5Oi40czsgZm9udC1zaXplOjUycHg7IH0KICAuc3RhZ2UgLmFjdG9yOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTouOHM7IH0KICBAa2V5ZnJhbWVzIGJvYiB7IDUwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKC05cHgpOyB9IH0KICAuc3RhZ2UuZngtc2hha2UgLmFjdG9yIHsgYW5pbWF0aW9uOnN0c2hha2UgLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOyB9CiAgQGtleWZyYW1lcyBzdHNoYWtlIHsgMjUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTVweCkgcm90YXRlKC00ZGVnKTt9IDc1JSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKDVweCkgcm90YXRlKDRkZWcpO30gfQogIC5zdGFnZS5meC1ydW4gLmFjdG9yOmZpcnN0LWNoaWxkIHsgYW5pbWF0aW9uOnJ1bmJ5IDEuNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH0KICBAa2V5ZnJhbWVzIHJ1bmJ5IHsgMCUsMTAwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xNHB4KTt9IDUwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKDE0cHgpIHJvdGF0ZSg2ZGVnKTt9IH0KICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgeyAuc3RhZ2UgLmFjdG9yIHsgYW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudDsgfSB9CiAgLmJnLWRhd24geyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzJiMWE0YSwjYjg1YzdhKTsgfQogIC5iZy1kYXkgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzFkMzU1NywjNDU3YjlkKTsgfQogIC5iZy1uaWdodCB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjMGIwZDJhLCMyYjJkNmUpOyB9CiAgLmJnLWluZG9vciB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjM2EyZTJhLCM2YjRmM2EpOyB9CiAgLmJnLWZlc3RpdmUgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzRhMTk0MiwjOGYyZDU2KTsgfQogIC5iZy1uYXR1cmUgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzE0NDMyYSwjM2E3ZDQ0KTsgfQogIC5iZy1jaXR5IHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCMyMzI5NDYsIzVmNmM4YSk7IH0KICAuYmctc2hvcCB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjNDAzNTZiLCM3YTVjYTMpOyB9CiAgLnN0LW5hciB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlci1yYWRpdXM6MTRweDsgcGFkZGluZzoxMnB4IDE0cHg7IGZvbnQtc2l6ZToxMy41cHg7IGxpbmUtaGVpZ2h0OjEuNTsgY29sb3I6dmFyKC0tdGV4dCk7IG1hcmdpbi1ib3R0b206MTBweDsgYm9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWdvbGQpOyB9CiAgLmJ1YmJsZSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXItcmFkaXVzOjE2cHggMTZweCAxNnB4IDRweDsgcGFkZGluZzoxMnB4IDE0cHg7IG1hcmdpbi1ib3R0b206MTJweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAuYnViYmxlIC53aG8geyBmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tYWNjZW50Mik7IGZvbnQtd2VpZ2h0OjgwMDsgfQogIC5idWJibGUgLmJrciB7IGZvbnQtc2l6ZToxOHB4OyBmb250LXdlaWdodDo3MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLmJ1YmJsZSAuYmVuIHsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6M3B4OyB9CiAgLnN0LWRvdHMgeyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luLXRvcDoxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxM3B4OyBsZXR0ZXItc3BhY2luZzozcHg7IH0KICAuYW5zIC5hZW4geyBmb250LXNpemU6MTEuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtd2VpZ2h0OjQwMDsgbWFyZ2luLXRvcDoycHg7IH0KCiAgLyogVEFMSyAoY29udmVyc2F0aW9uKSAqLwogIC5jaGF0IHsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDo4cHg7IG1pbi1oZWlnaHQ6MTQwcHg7IG1hcmdpbi1ib3R0b206MTBweDsgfQogIC5tc2cgeyBtYXgtd2lkdGg6ODYlOyBwYWRkaW5nOjEwcHggMTNweDsgYm9yZGVyLXJhZGl1czoxNnB4OyBmb250LXNpemU6MTUuNXB4OyBsaW5lLWhlaWdodDoxLjQ1OyBhbmltYXRpb246cG9wIC4yNXMgZWFzZTsgfQogIC5tc2cgLm1lbiB7IGZvbnQtc2l6ZToxMS41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6M3B4OyB9CiAgLm1zZy5ucGMgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTsgYWxpZ24tc2VsZjpmbGV4LXN0YXJ0OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAubXNnLm5wYyAud2hvIHsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLWFjY2VudDIpOyBmb250LXdlaWdodDo4MDA7IG1hcmdpbi1ib3R0b206MnB4OyB9CiAgLm1zZy5tZSB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjQzY4RjNFMmUsI0EwNkYyNDNkKTsgYm9yZGVyOjFweCBzb2xpZCAjQzY4RjNFNTU7IGFsaWduLXNlbGY6ZmxleC1lbmQ7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDsgfQogIC5tc2cubWUgLnNjb3JlIHsgZm9udC1zaXplOjExLjVweDsgY29sb3I6dmFyKC0tZ3JlZW4pOyBmb250LXdlaWdodDo4MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLm1zZy5zeXMgeyBhbGlnbi1zZWxmOmNlbnRlcjsgYmFja2dyb3VuZDpub25lOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMnB4OyB9CiAgLm1zZy50eXBpbmcgc3BhbiB7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBhbmltYXRpb246YmxpbmsgMXMgaW5maW5pdGU7IH0KICAubXNnLnR5cGluZyBzcGFuOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTouMnM7IH0gLm1zZy50eXBpbmcgc3BhbjpudGgtY2hpbGQoMykgeyBhbmltYXRpb24tZGVsYXk6LjRzOyB9CiAgQGtleWZyYW1lcyBibGluayB7IDUwJSB7IG9wYWNpdHk6LjI7IH0gfQogIC5tYXNrZWQgeyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgZm9udC13ZWlnaHQ6NzAwOyB9CiAgLnRrLXRhc2sgeyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA2KTsgYm9yZGVyOjFweCBkYXNoZWQgI0Q5QzlBODsgYm9yZGVyLXJhZGl1czoxMnB4OyBwYWRkaW5nOjEwcHggMTJweDsgZm9udC1zaXplOjEzLjVweDsgbWFyZ2luLWJvdHRvbToxMHB4OyBsaW5lLWhlaWdodDoxLjU7IH0KICAudGstdGFzayAuaGludGxpbmUgeyBtYXJnaW4tdG9wOjZweDsgZm9udC1zaXplOjE2cHg7IGZvbnQtd2VpZ2h0OjcwMDsgfQogIC50ay1jb250cm9scyB7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBnYXA6MTRweDsgbWFyZ2luLXRvcDoycHg7IH0KICAudGstbWljIHsgd2lkdGg6NjRweDsgaGVpZ2h0OjY0cHg7IGZvbnQtc2l6ZToyNnB4OyBtYXJnaW4tdG9wOjA7IH0KCiAgLyogR1JBTU1BUiAqLwogIC5nY2FyZCB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlci1yYWRpdXM6MThweDsgcGFkZGluZzoxOHB4OyBtYXJnaW4tYm90dG9tOjEycHg7IH0KICAuZ3BhdCB7IGZvbnQtc2l6ZToyMnB4OyBmb250LXdlaWdodDo4MDA7IGNvbG9yOnZhcigtLWFjY2VudDIpOyB9CiAgLmdtZWFuIHsgZm9udC1zaXplOjE0cHg7IGNvbG9yOnZhcigtLWdvbGQpOyBmb250LXdlaWdodDo3MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLmd2aSB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IH0KICAuZ25vdGUgeyBmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tdGV4dCk7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYpOyBib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KTsgYm9yZGVyLXJhZGl1czo4cHg7IHBhZGRpbmc6MTBweCAxMnB4OyBtYXJnaW4tdG9wOjEwcHg7IGxpbmUtaGVpZ2h0OjEuNTsgfQogIC5nZXggeyBtYXJnaW4tdG9wOjEwcHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpOyBib3JkZXItcmFkaXVzOjEycHg7IHBhZGRpbmc6MTBweCAxMnB4OyBjdXJzb3I6cG9pbnRlcjsgfQogIC5nZXggLmsgeyBmb250LXNpemU6MTUuNXB4OyBmb250LXdlaWdodDo2MDA7IH0KICAuZ2V4IC5lIHsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6MnB4OyB9CiAgLmdleCAuc3BrIHsgY29sb3I6dmFyKC0tYWNjZW50Mik7IGZvbnQtc2l6ZToxMnB4OyB9CgogIC8qIFNQRUFLICovCiAgLnNjYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoyMHB4OyBwYWRkaW5nOjIycHggMThweDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAuc2NhcmQgLnNrciB7IGZvbnQtc2l6ZToyNHB4OyBmb250LXdlaWdodDo4MDA7IGxpbmUtaGVpZ2h0OjEuNDsgfQogIC5zY2FyZCAuc2VuIHsgZm9udC1zaXplOjEzcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6NnB4OyB9CiAgLm1pYyB7IHdpZHRoOjg0cHg7IGhlaWdodDo4NHB4OyBib3JkZXItcmFkaXVzOjUwJTsgYm9yZGVyOm5vbmU7IGZvbnQtc2l6ZTozNnB4OyBtYXJnaW4tdG9wOjE2cHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tYWNjZW50KSwjQTA2RjI0KTsgY29sb3I6I2ZmZjsgYm94LXNoYWRvdzowIDZweCAyNHB4ICNDNjhGM0U1NTsgdHJhbnNpdGlvbjphbGwgLjJzOyB9CiAgLm1pYy5saXN0ZW5pbmcgeyBhbmltYXRpb246cHVsc2UyIDFzIGluZmluaXRlOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tcmVkKSwjOEYxRjFGKTsgfQogIEBrZXlmcmFtZXMgcHVsc2UyIHsgNTAlIHsgdHJhbnNmb3JtOnNjYWxlKDEuMSk7IGJveC1zaGFkb3c6MCAwIDAgMThweCAjQ0YyRTJFMjI7IH0gfQogIC5zcmVzdWx0IHsgbWluLWhlaWdodDo0NHB4OyBtYXJnaW4tdG9wOjEycHg7IGZvbnQtc2l6ZToxNXB4OyBmb250LXdlaWdodDo3MDA7IH0KICAuc3Jlc3VsdCAuaGVhcmQgeyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxM3B4OyBmb250LXdlaWdodDo0MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLnNlbGZncmFkZSB7IGRpc3BsYXk6bm9uZTsgZ2FwOjhweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgbWFyZ2luLXRvcDoxMHB4OyB9CiAgLnNway1kaWZmIHsgZm9udC1zaXplOjI0cHg7IGZvbnQtd2VpZ2h0OjgwMDsgbGluZS1oZWlnaHQ6MS42OyBtYXJnaW4tdG9wOjhweDsgbGV0dGVyLXNwYWNpbmc6MXB4OyB9CiAgLnN5bC1vayB7IGNvbG9yOnZhcigtLWdyZWVuKTsgfQogIC5zeWwtYmFkIHsgY29sb3I6dmFyKC0tcmVkKTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7IGN1cnNvcjpwb2ludGVyOyB9CiAgLm1pYy1oaW50IHsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDo2cHg7IH0KICAuZml4bGluZSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MXB4IHNvbGlkICNEOUM5QTg7IGJvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1yZWQpOyBib3JkZXItcmFkaXVzOjEwcHg7IHBhZGRpbmc6OXB4IDExcHg7IG1hcmdpbi10b3A6N3B4OyBmb250LXNpemU6MTNweDsgbGluZS1oZWlnaHQ6MS41OyBjdXJzb3I6cG9pbnRlcjsgdGV4dC1hbGlnbjpsZWZ0OyB9CiAgLmZpeGxpbmUgYiB7IGZvbnQtc2l6ZToxNnB4OyB9CiAgLnNheXJvdyB7IGRpc3BsYXk6ZmxleDsgZ2FwOjhweDsgbWFyZ2luLXRvcDoxMnB4OyBhbGlnbi1pdGVtczpzdHJldGNoOyB9CiAgLnNheWJ0biB7IGZsZXg6MTsgbWFyZ2luOjA7IHBhZGRpbmc6MTRweCAxNnB4OyBmb250LXNpemU6MTUuNXB4OyBib3JkZXItcmFkaXVzOjE0cHg7IH0KICAuc2F5cm93IC5zbmRidG4geyBtYXJnaW46MDsgfQogIC5zYXlidG4uc3RvcG1vZGUgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tcmVkKSwjOEYxRjFGKTsgYW5pbWF0aW9uOnB1bHNlMiAxcyBpbmZpbml0ZTsgfQoKICAvKiBEQUlMWSBHT0FMUyAmIEFDSElFVkVNRU5UUyAqLwogIC5kYWlseSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlcjoycHggc29saWQgI0IwN0QyODQ0OyBib3JkZXItcmFkaXVzOjE2cHg7IHBhZGRpbmc6MTRweCAxNnB4OyBtYXJnaW4tYm90dG9tOjE0cHg7IH0KICAuZGFpbHkgaDMgeyBmb250LXNpemU6MTMuNXB4OyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjRweDsgfQogIC5kYWlseSBoMyAuc3RyZWFrbGJsIHsgY29sb3I6dmFyKC0tZ29sZCk7IGZvbnQtc2l6ZToxMnB4OyB9CiAgLmdvYWwgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgZm9udC1zaXplOjEzcHg7IG1hcmdpbi10b3A6OXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IH0KICAuZ29hbC5kb25lIHsgY29sb3I6dmFyKC0tZ3JlZW4pOyB9CiAgLmdvYWwgLmdsYWJlbCB7IGZsZXg6MTsgfQogIC5nb2FsIC5iYXIgeyB3aWR0aDo3MHB4OyBoZWlnaHQ6NnB4OyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA2KTsgYm9yZGVyLXJhZGl1czo0cHg7IG92ZXJmbG93OmhpZGRlbjsgZmxleDpub25lOyB9CiAgLmdvYWwgLmJhciBpIHsgZGlzcGxheTpibG9jazsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6dmFyKC0tZ29sZCk7IGJvcmRlci1yYWRpdXM6NHB4OyB9CiAgLmdvYWwuZG9uZSAuYmFyIGkgeyBiYWNrZ3JvdW5kOnZhcigtLWdyZWVuKTsgfQogIC5jbGFpbWJ0biB7IG1hcmdpbjoxMnB4IDAgMDsgd2lkdGg6MTAwJTsgcGFkZGluZzoxMXB4OyBmb250LXNpemU6MTRweDsgfQogIC5hY2hyb3cgeyBmb250LXNpemU6MTlweDsgbGV0dGVyLXNwYWNpbmc6M3B4OyBtYXJnaW4tdG9wOjEwcHg7IH0KICAuYWNocm93IC5hY2hjb3VudCB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGxldHRlci1zcGFjaW5nOjA7IG1hcmdpbi1yaWdodDo0cHg7IH0KICAucHJvZ2xpbmUgeyBmb250LXNpemU6MTEuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6N3B4OyB9CiAgI3Nwa1BsYXliYWNrIHsgZGlzcGxheTpub25lOyBtYXJnaW4tdG9wOjEwcHg7IH0KCiAgLyogUExBWSB0YWIgKi8KICAubW9kZXMgeyBkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyOyBnYXA6MTBweDsgfQogIC5tb2RlIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNnB4OyBwYWRkaW5nOjE2cHggMTRweDsgY3Vyc29yOnBvaW50ZXI7IGJvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7IHRyYW5zaXRpb246YWxsIC4xNXM7IHBvc2l0aW9uOnJlbGF0aXZlOyB9CiAgLm1vZGU6aG92ZXIgeyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTsgYm9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7IH0KICAubW9kZSAuZW1vamkgeyBmb250LXNpemU6MzBweDsgfQogIC5tb2RlIGgzIHsgZm9udC1zaXplOjE0cHg7IG1hcmdpbjo2cHggMCAzcHg7IH0KICAubW9kZSBwIHsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbGluZS1oZWlnaHQ6MS40OyB9CgogIC8qIEdBTUVTIHNoYXJlZCAqLwogIC5nYW1lYmFyIHsgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6Y2VudGVyOyBtYXJnaW4tYm90dG9tOjE0cHg7IGZvbnQtd2VpZ2h0OjcwMDsgZ2FwOjhweDsgfQogIC50aW1lciB7IGZvbnQtc2l6ZToxOHB4OyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zOyB9CiAgLnRpbWVyLmxvdyB7IGNvbG9yOnZhcigtLXJlZCk7IGFuaW1hdGlvbjpwdWxzZSAuNXMgaW5maW5pdGUgYWx0ZXJuYXRlOyB9CiAgQGtleWZyYW1lcyBwdWxzZSB7IHRvIHsgdHJhbnNmb3JtOnNjYWxlKDEuMTUpOyB9IH0KICAuc2NvcmUtcGlsbCB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBwYWRkaW5nOjZweCAxM3B4OyBib3JkZXItcmFkaXVzOjIwcHg7IGZvbnQtc2l6ZToxM3B4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IH0KICAuY29tYm8geyBjb2xvcjp2YXIoLS1nb2xkKTsgZm9udC1zaXplOjEycHg7IG1hcmdpbi1sZWZ0OjVweDsgfQogIC5xdWVzdGlvbi1jYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxOHB4OyBwYWRkaW5nOjIycHggMTZweDsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi1ib3R0b206MTRweDsgYm94LXNoYWRvdzowIDRweCAyMHB4IHJnYmEoMCwwLDAsLjA4KTsgfQogIC5xLWxhYmVsIHsgZm9udC1zaXplOjEwLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOjFweDsgbWFyZ2luLWJvdHRvbTo4cHg7IH0KICAucS13b3JkIHsgZm9udC1zaXplOjI4cHg7IGZvbnQtd2VpZ2h0OjgwMDsgbGluZS1oZWlnaHQ6MS4zOyB9CiAgLnEtaGludCB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6NnB4OyB9CiAgLmFuc3dlcnMgeyBkaXNwbGF5OmdyaWQ7IGdhcDo5cHg7IH0KICAuYW5zIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgYm9yZGVyLXJhZGl1czoxM3B4OyBwYWRkaW5nOjEzcHggMTVweDsgZm9udC1zaXplOjE2cHg7IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tdGV4dCk7IGN1cnNvcjpwb2ludGVyOyB0ZXh0LWFsaWduOmxlZnQ7IHRyYW5zaXRpb246YWxsIC4xMnM7IHdpZHRoOjEwMCU7IH0KICAuYW5zLmNvcnJlY3QgeyBiYWNrZ3JvdW5kOiMyRjdENEYzMzsgYm9yZGVyLWNvbG9yOnZhcigtLWdyZWVuKTsgfQogIC5hbnMud3JvbmcgeyBiYWNrZ3JvdW5kOiNDRjJFMkUzMzsgYm9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGFuaW1hdGlvbjpzaGFrZSAuM3M7IH0KICBAa2V5ZnJhbWVzIHNoYWtlIHsgMjUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTZweCk7fSA3NSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlWCg2cHgpO30gfQoKICAubWF0Y2gtZ3JpZCB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDo5cHg7IH0KICAudGlsZSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7IGJvcmRlci1yYWRpdXM6MTNweDsgcGFkZGluZzoxNHB4IDhweDsgZm9udC1zaXplOjE1cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY3Vyc29yOnBvaW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyB0cmFuc2l0aW9uOmFsbCAuMTVzOyBtaW4taGVpZ2h0OjU4cHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB9CiAgLnRpbGUuc2VsIHsgYm9yZGVyLWNvbG9yOnZhcigtLWdvbGQpOyBiYWNrZ3JvdW5kOiNCMDdEMjgyMjsgdHJhbnNmb3JtOnNjYWxlKDEuMDQpOyB9CiAgLnRpbGUuZG9uZSB7IG9wYWNpdHk6MDsgcG9pbnRlci1ldmVudHM6bm9uZTsgdHJhbnNmb3JtOnNjYWxlKC44KTsgfQogIC50aWxlLmJhZCB7IGJvcmRlci1jb2xvcjp2YXIoLS1yZWQpOyBiYWNrZ3JvdW5kOiNDRjJFMkUzMzsgYW5pbWF0aW9uOnNoYWtlIC4zczsgfQoKICAuYnVpbGQtdGFyZ2V0IHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNXB4OyBwYWRkaW5nOjE2cHg7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tYm90dG9tOjEycHg7IH0KICAuYnVpbGQtZW4geyBmb250LXNpemU6MTdweDsgZm9udC13ZWlnaHQ6NzAwOyB9CiAgLmJ1aWxkLXNsb3QgeyBtaW4taGVpZ2h0OjYwcHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYpOyBib3JkZXI6MnB4IGRhc2hlZCAjRDlDOUE4OyBib3JkZXItcmFkaXVzOjEzcHg7IHBhZGRpbmc6OXB4OyBkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6N3B4OyBtYXJnaW4tYm90dG9tOjEycHg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgfQogIC5idWlsZC1wb29sIHsgZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjdweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgfQogIC53b3JkY2hpcCB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7IGJvcmRlci1yYWRpdXM6MTFweDsgcGFkZGluZzo5cHggMTNweDsgZm9udC1zaXplOjE3cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIC4xMnM7IH0KICAud29yZGNoaXAucGxhY2VkIHsgYmFja2dyb3VuZDojNTAzQUE4MjI7IGJvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQyKTsgb3BhY2l0eTouNDsgfQoKICAuYm9zcy1hcmVuYSB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tYm90dG9tOjEycHg7IH0KICAuYm9zcy1zcHJpdGUgeyBmb250LXNpemU6NTZweDsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHRyYW5zaXRpb246dHJhbnNmb3JtIC4xNXM7IH0KICAuYm9zcy1zcHJpdGUuaGl0IHsgYW5pbWF0aW9uOmJvc3NoaXQgLjM1czsgfQogIEBrZXlmcmFtZXMgYm9zc2hpdCB7IDMwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMHB4KSByb3RhdGUoLThkZWcpOyBmaWx0ZXI6YnJpZ2h0bmVzcygyKTt9IDYwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKDhweCk7fSB9CiAgLmhwYmFyIHsgaGVpZ2h0OjE0cHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTApOyBib3JkZXItcmFkaXVzOjhweDsgb3ZlcmZsb3c6aGlkZGVuOyBtYXJnaW46N3B4IGF1dG87IG1heC13aWR0aDozMDBweDsgYm9yZGVyOjFweCBzb2xpZCAjRDlDOUE4OyB9CiAgLmhwZmlsbCB7IGhlaWdodDoxMDAlOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1yZWQpLCNEOUE4NTYpOyB0cmFuc2l0aW9uOndpZHRoIC40czsgfQogIC5ib3NzLW5hbWUgeyBmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDo3MDA7IH0KICAuaGVhcnRzIHsgZm9udC1zaXplOjIwcHg7IGxldHRlci1zcGFjaW5nOjNweDsgbWFyZ2luLXRvcDo0cHg7IH0KCiAgLnJlc3VsdC1jYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoyMnB4OyBwYWRkaW5nOjMycHggMjBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAucmVzdWx0LWVtb2ppIHsgZm9udC1zaXplOjU2cHg7IH0KICAucmVzdWx0LXRpdGxlIHsgZm9udC1zaXplOjI0cHg7IGZvbnQtd2VpZ2h0OjgwMDsgbWFyZ2luOjhweCAwIDRweDsgfQogIC5yZXN1bHQtc3RhdHMgeyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGdhcDoyMnB4OyBtYXJnaW46MThweCAwOyB9CiAgLnJzdGF0IGIgeyBkaXNwbGF5OmJsb2NrOyBmb250LXNpemU6MjRweDsgY29sb3I6dmFyKC0tZ29sZCk7IH0KICAucnN0YXQgc3BhbiB7IGZvbnQtc2l6ZToxMC41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzoxcHg7IH0KICAuYnRuIHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHZhcigtLWFjY2VudCksI0EwNkYyNCk7IGNvbG9yOiNmZmY7IGJvcmRlcjpub25lOyBwYWRkaW5nOjEzcHggMjRweDsgYm9yZGVyLXJhZGl1czoxM3B4OyBmb250LXNpemU6MTVweDsgZm9udC13ZWlnaHQ6ODAwOyBjdXJzb3I6cG9pbnRlcjsgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjEyczsgbWFyZ2luOjNweDsgfQogIC5idG46YWN0aXZlIHsgdHJhbnNmb3JtOnNjYWxlKC45Nik7IH0KICAuYnRuLmdob3N0IHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgfQoKICAuZngtZmxvYXQgeyBwb3NpdGlvbjpmaXhlZDsgZm9udC13ZWlnaHQ6ODAwOyBmb250LXNpemU6MjFweDsgcG9pbnRlci1ldmVudHM6bm9uZTsgei1pbmRleDo5OTsgYW5pbWF0aW9uOmZsb2F0dXAgMXMgZWFzZSBmb3J3YXJkczsgfQogIEBrZXlmcmFtZXMgZmxvYXR1cCB7IHRvIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTcwcHgpOyBvcGFjaXR5OjA7IH0gfQogIC5sZXZlbHVwLWJhbm5lciB7IHBvc2l0aW9uOmZpeGVkOyB0b3A6MzAlOyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tZ29sZCksI0Q5QTg1Nik7IGNvbG9yOiMzYTIwMDA7IHBhZGRpbmc6MThweCAzNHB4OyBib3JkZXItcmFkaXVzOjE4cHg7IGZvbnQtc2l6ZToyMnB4OyBmb250LXdlaWdodDo4MDA7IHotaW5kZXg6MTAwOyBhbmltYXRpb246YmFubmVyIDJzIGVhc2UgZm9yd2FyZHM7IGJveC1zaGFkb3c6MCAxMHB4IDUwcHggI0IwN0QyODg4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IH0KICBAa2V5ZnJhbWVzIGJhbm5lciB7IDE1JSB7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxLjEpO30gMjUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpO30gODUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpOyBvcGFjaXR5OjE7fSAxMDAlIHsgb3BhY2l0eTowOyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTgwJSkgc2NhbGUoMSk7fSB9CiAgLmNvbmZldHRpIHsgcG9zaXRpb246Zml4ZWQ7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyB6LWluZGV4Ojk4OyBwb2ludGVyLWV2ZW50czpub25lOyBhbmltYXRpb246ZmFsbCBsaW5lYXIgZm9yd2FyZHM7IH0KICBAa2V5ZnJhbWVzIGZhbGwgeyB0byB7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDExMHZoKSByb3RhdGUoNzIwZGVnKTsgfSB9CgogIGJvZHkgeyBvdmVyZmxvdy14OiBjbGlwOyB9Cjwvc3R5bGU+CjxkaXYgaWQ9ImtxLWFwcCI+CjxkaXYgY2xhc3M9IndyYXAiPgoKICA8ZGl2IGNsYXNzPSJodWQiPgogICAgPGRpdiBjbGFzcz0iYXZhdGFyIj7wn5CvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJodWQtbWlkIj4KICAgICAgPGRpdiBjbGFzcz0iaHVkLXRpdGxlIj5MdiA8c3BhbiBpZD0iaHVkTGV2ZWwiPjE8L3NwYW4+IMK3IDxzcGFuIGlkPSJodWRSYW5rIj5IYW5nZXVsIEhhdGNobGluZzwvc3Bhbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ieHBiYXIiPjxkaXYgY2xhc3M9InhwZmlsbCIgaWQ9InhwRmlsbCIgc3R5bGU9IndpZHRoOjAlIj48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaHVkLXN1YiI+PHNwYW4gaWQ9Imh1ZFhwIj4wPC9zcGFuPiBYUCDCtyA8c3BhbiBpZD0iaHVkTmV4dCI+MTAwPC9zcGFuPiB0byBuZXh0IMK3IPCfk5ogPHNwYW4gaWQ9Imh1ZFdvcmRzIj4wPC9zcGFuPiB3b3JkczwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2dhcDo1cHg7Ij4KICAgICAgPGRpdiBjbGFzcz0ic3RyZWFrIj7wn5SlPGIgaWQ9Imh1ZFN0cmVhayI+MDwvYj5kYXkgc3RyZWFrPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9InNwZGJ0biIgaWQ9InNwZEJ0biIgb25jbGljaz0ib3BlblZvaWNlU2V0KCkiIHRpdGxlPSJDaG9vc2UgdGhlIEtvcmVhbiB2b2ljZSBhbmQgaG93IGZhc3QgaXQgc3BlYWtzIj7wn46ZIFZvaWNlIMK3IOKWtiBOb3JtYWw8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8IS0tIE1BUCAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4gYWN0aXZlIiBpZD0ibWFwIj4KICAgIDxoMT5Ub20ncyBLb3JlYW4gUXVlc3Qg8J+HsPCfh7c8L2gxPgogICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPlJlYWwtbGlmZSBLb3JlYW4sIG9uZSBxdWVzdCBhdCBhIHRpbWUg4oCUIDEyIHF1ZXN0cyBmcm9tIHlvdXIgZmlyc3Qg7JWI64WV7ZWY7IS47JqUIHRvIGxpdmluZyBsaWtlIGEgbG9jYWwuPC9kaXY+CiAgICA8ZGl2IGlkPSJkYWlseUJveCI+PC9kaXY+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+OpCBhbmQgcmVhZCB0aGUgc2VudGVuY2Ug4oCUIGl0IGNoZWNrcyB3aGVuIHlvdSBwYXVzZSAob3IgdGFwIOKPuSk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0ic3BrUmVzdWx0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGstZGlmZiIgaWQ9InNwa0RpZmYiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InNwa0ZpeGVzIj48L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzcGtQbGF5YmFjayI+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+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjgwMDsiIGlkPSJmdFRpdGxlIj7wn46ZIEZyZWUgVGFsazwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIGlkPSJmdEVuZ2luZSIgb25jbGljaz0iZnRFbmdpbmVUYXAoKSIgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToxMnB4OyI+8J+kliBCdWlsdC1pbjwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjaGF0IiBpZD0iZnRDaGF0Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InRrLWNvbnRyb2xzIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4OyI+CiAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgaWQ9ImZ0QXV0byIgb25jbGljaz0iZnRUb2dnbGVBdXRvKCkiIHN0eWxlPSJtYXJnaW46MDsiPvCflIEgQXV0bzogb2ZmPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9Im1pYyB0ay1taWMiIGlkPSJmdE1pYyIgb25jbGljaz0iZnRNaWNUYXAoKSI+8J+OpDwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9ImZ0TnVkZ2UoKSIgc3R5bGU9Im1hcmdpbjowOyI+4p2TIE5ldyB0b3BpYzwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIGlkPSJmdFN0dWNrQnRuIiBvbmNsaWNrPSJmdFN0dWNrKCkiIHN0eWxlPSJtYXJnaW46MDtkaXNwbGF5Om5vbmU7Ij7wn4aYIFN0dWNrPzwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJmdFN0dWNrQm94IiBzdHlsZT0iZGlzcGxheTpub25lOyI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0iZnRTdGF0dXMiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttaW4taGVpZ2h0OjIwcHg7Ij48L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6NnB4OyI+CiAgICAgIDxpbnB1dCBpZD0iZnRUZXh0IiBwbGFjZWhvbGRlcj0i4oCmb3IgdHlwZSBpbiBLb3JlYW4gYW5kIHByZXNzIEVudGVyIgogICAgICAgIHN0eWxlPSJmbGV4OjE7YmFja2dyb3VuZDp2YXIoLS1jYXJkMik7Ym9yZGVyOjJweCBzb2xpZCAjRDlDOUE4O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHggMTNweDtjb2xvcjp2YXIoLS10ZXh0KTtmb250LXNpemU6MTVweDtvdXRsaW5lOm5vbmU7Ij4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0icGFkZGluZzoxMXB4IDE2cHg7IiBvbmNsaWNrPSJmdFNlbmRUZXh0KCkiPuKepDwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDwhLS0gUVVJWiAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJxdWl6Ij4KICAgIDxkaXYgY2xhc3M9ImdhbWViYXIiPgogICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrIiBvbmNsaWNrPSJiYWNrVG9MZXNzb24oKSI+4oaQPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9InRpbWVyIiBpZD0icXVpelRpbWVyIj42MDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzY29yZS1waWxsIj7irZAgPHNwYW4gaWQ9InF1aXpTY29yZSI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iY29tYm8iIGlkPSJxdWl6Q29tYm8iPjwvc3Bhbj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icXVlc3Rpb24tY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9InEtbGFiZWwiIGlkPSJxdWl6TGFiZWwiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJxLXdvcmQiIGlkPSJxdWl6V29yZCI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InEtaGludCIgaWQ9InF1aXpIaW50Ij48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYW5zd2VycyIgaWQ9InF1aXpBbnN3ZXJzIj48L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBNQVRDSCAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJtYXRjaCI+CiAgICA8ZGl2IGNsYXNzPSJnYW1lYmFyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFjayIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPuKGkDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJ0aW1lciIgaWQ9Im1hdGNoVGltZXIiPjkwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLXBpbGwiPvCfp6kgPHNwYW4gaWQ9Im1hdGNoTGVmdCI+ODwvc3Bhbj4gbGVmdDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtYXRjaC1ncmlkIiBpZD0ibWF0Y2hHcmlkIj48L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBCVUlMREVSIC0tPgogIDxkaXYgY2xhc3M9InNjcmVlbiIgaWQ9ImJ1aWxkZXIiPgogICAgPGRpdiBjbGFzcz0iZ2FtZWJhciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJhY2siIG9uY2xpY2s9ImJhY2tUb0xlc3NvbigpIj7ihpA8L2J1dHRvbj4KICAgICAgPGRpdiBpZD0iYnVpbGRQcm9ncmVzcyIgc3R5bGU9ImNvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTRweDsiPjEgLyA1PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLXBpbGwiPuKtkCA8c3BhbiBpZD0iYnVpbGRTY29yZSI+MDwvc3Bhbj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYnVpbGQtdGFyZ2V0Ij4KICAgICAgPGRpdiBjbGFzcz0icS1sYWJlbCI+QnVpbGQgdGhpcyBzZW50ZW5jZSBpbiBLb3JlYW48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYnVpbGQtZW4iIGlkPSJidWlsZEVuIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYnVpbGQtc2xvdCIgaWQ9ImJ1aWxkU2xvdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJidWlsZC1wb29sIiBpZD0iYnVpbGRQb29sIj48L2Rpdj4KICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6MTRweDsiPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIG9uY2xpY2s9ImJ1aWxkZXJSZXNldCgpIj7ihro8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJidWlsZGVyQ2hlY2soKSI+Q2hlY2sg4pyTPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBCT1NTIC0tPgogIDxkaXYgY2xhc3M9InNjcmVlbiIgaWQ9ImJvc3MiPgogICAgPGRpdiBjbGFzcz0iZ2FtZWJhciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJhY2sgYmFjay1sYWJlbGxlZCIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPuKGkCBGbGVlPC9idXR0b24+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+47JWI7ZW07JqUIOKAlCB1c2Ugd2l0aCBzdHJhbmdlcnMiLCLwn5mHIiwi64qm7Ja07IScIOyjhOyGoe2VqeuLiOuLpC4iLCJTb3JyeSBmb3IgYmVpbmcgbGF0ZS4iXSwKICBbIuuEpCAvIOyVhOuLiOyalCIsIm5lIC8gYS1uaS15byIsInllcyAvIG5vIiwi64SkIGFsc28gd29ya3MgYXMgJ0kgaGVhciB5b3UnIHdoaWxlIGxpc3RlbmluZyIsIuKchSIsIuuEpCwg66ee7JWE7JqULiIsIlllcywgdGhhdCBpcyByaWdodC4iXSwKICBbIuyemCDrtoDtg4Hrk5zrpr3ri4jri6QiLCJqYWwgYnUtdGFrLWRldS1yaW0tbmktZGEiLCJwbGVhc2UgdGFrZSBjYXJlIG9mIG1lIiwiU2FpZCB3aGVuIGpvaW5pbmcgYSBncm91cCBvciBzdGFydGluZyBzb21ldGhpbmcgdG9nZXRoZXIiLCLwn6SyIiwi7JWe7Jy866GcIOyemCDrtoDtg4Hrk5zrpr3ri4jri6QhIiwiSSBsb29rIGZvcndhcmQgdG8gd29ya2luZyB3aXRoIHlvdSEiXSwKICBbIuyViOuFle2eiCDqsIDshLjsmpQiLCJhbi1ueWVvbmctaGkgZ2Etc2UteW8iLCJnb29kYnllICh0aGV5IGxlYXZlKSIsIlRvIHRoZSBwZXJzb24gbGVhdmluZzsg7JWI64WV7Z6IIOqzhOyEuOyalCBpZiBZT1UgbGVhdmUiLCLwn5qqIiwi7JWI64WV7Z6IIOqwgOyEuOyalCEiLCJHb29kYnllIOKAlCBnbyB3ZWxsISJdLAogIFsi65iQIOunjOuCmOyalCIsInR0byBtYW4tbmEteW8iLCJzZWUgeW91IGFnYWluIiwiRnJpZW5kbHkgY2xvc2VyIHRoYXQga2VlcHMgdGhlIGRvb3Igb3BlbiIsIvCflIEiLCLri6TsnYzsl5Ag65iQIOunjOuCmOyalCEiLCJTZWUgeW91IGFnYWluIG5leHQgdGltZSEiXSwKICBbIuyggCIsICJqZW8iLCAiSSAvIG1lIChodW1ibGUpIiwgIlRoZSBwb2xpdGUgd2F5IHRvIHNheSAnSScg4oCUIHVzZSBpdCB3aXRoIHN0cmFuZ2VycyBhbmQgZWxkZXJzIiwgIvCfmYsiLCAi7KCA64qUIO2VmeyDneydtOyXkOyalC4iLCAiSSBhbSBhIHN0dWRlbnQuIl0sCiAgWyLsp4Hsl4UiLCAiamlnLWVvcCIsICJqb2IgLyBvY2N1cGF0aW9uIiwgIuyngeyXheydtCDrrZDsmIjsmpQ/IGlzIGEgbmF0dXJhbCBnZXQtdG8ta25vdy15b3UgcXVlc3Rpb24iLCAi8J+SvCIsICLsp4Hsl4XsnbQg662Q7JiI7JqUPyIsICJXaGF0IGlzIHlvdXIgam9iPyJdLAogIFsi7ZWZ7IOdIiwgImhhay1zYWVuZyIsICJzdHVkZW50IiwgIldvcmtzIGZvciBhbnkga2luZCBvZiBzdHVkZW50LCB1bml2ZXJzaXR5IGluY2x1ZGVkIiwgIvCfjpMiLCAi7KCA64qUIO2VnOq1reyWtCDtlZnsg53snbTsl5DsmpQuIiwgIkkgYW0gYSBLb3JlYW4tbGFuZ3VhZ2Ugc3R1ZGVudC4iXSwKICBbIu2ajOyCrOybkCIsICJob2Utc2Etd29uIiwgIm9mZmljZSB3b3JrZXIiLCAiVGhlIG1vc3QgY29tbW9uIGpvYiBhbnN3ZXIgaW4gS29yZWEiLCAi8J+PoiIsICLsoJwg7Lmc6rWs64qUIO2ajOyCrOybkOydtOyXkOyalC4iLCAiTXkgZnJpZW5kIGlzIGFuIG9mZmljZSB3b3JrZXIuIl0sCiAgWyLrgpjsnbQiLCAibmEtaSIsICJhZ2UiLCAiQXNrZWQgb2Z0ZW4gaW4gS29yZWEg4oCUIGFnZSBkZWNpZGVzIHNwZWVjaCBzdHlsZSEiLCAi8J+OgiIsICLrgpjsnbTqsIAg7Ja065a76rKMIOuQmOyEuOyalD8iLCAiTWF5IEkgYXNrIHlvdXIgYWdlPyJdLAogIFsi7LKY7J2MIiwgImNoZW8tZXVtIiwgImZpcnN0IHRpbWUiLCAi7ZWc6rWt7J2AIOyymOydjOydtOyXkOyalCA9IGl0IGlzIG15IGZpcnN0IHRpbWUgaW4gS29yZWEiLCAiMe+4j+KDoyIsICLtlZzqta3snYAg7J2067KI7J20IOyymOydjOydtOyXkOyalC4iLCAiVGhpcyBpcyBteSBmaXJzdCB0aW1lIGluIEtvcmVhLiJdLAogIFsi7Jik656c66eM7J207JeQ7JqUIiwgIm8tcmFlbi1tYW4taS1lLXlvIiwgImxvbmcgdGltZSBubyBzZWUiLCAiU2F5IGl0IHdoZW4gbWVldGluZyBzb21lb25lIGFmdGVyIGEgd2hpbGUiLCAi8J+VsO+4jyIsICLsmYAsIOygleunkCDsmKTrnpzrp4zsnbTsl5DsmpQhIiwgIldvdywgaXQgaGFzIHJlYWxseSBiZWVuIGEgd2hpbGUhIl0sCiAgWyLsnpgg7KeA64OI7Ja07JqUPyIsICJqYWwgamktbmFlc3MtZW8teW8iLCAiaG93IGhhdmUgeW91IGJlZW4/IiwgIlRoZSBuYXR1cmFsIGZvbGxvdy11cCB0byDsmKTrnpzrp4zsnbTsl5DsmpQiLCAi8J+ZgiIsICLsmpTsppgg7J6YIOyngOuDiOyWtOyalD8iLCAiSGF2ZSB5b3UgYmVlbiB3ZWxsIGxhdGVseT8iXSwKICBbIuyXsOudveyymCIsICJ5ZW9sLWxhay1jaGVvIiwgImNvbnRhY3QgaW5mbyIsICJFeGNoYW5nZSBpdCB0byBrZWVwIHRoZSBmcmllbmRzaGlwIGdvaW5nIiwgIvCfk4ciLCAi7Jew65297LKY66W8IOyVjOugpCDso7zshLjsmpQuIiwgIlBsZWFzZSBnaXZlIG1lIHlvdXIgY29udGFjdCBpbmZvLiJdLAogIFsi66qF7ZWoIiwgIm15ZW9uZy1oYW0iLCAiYnVzaW5lc3MgY2FyZCIsICJHaXZlIGFuZCByZWNlaXZlIHdpdGggdHdvIGhhbmRzIOKAlCBnb29kIG1hbm5lcnMiLCAi8J+qqiIsICLrqoXtlagg7Jes6riwIOyeiOyWtOyalC4iLCAiSGVyZSBpcyBteSBidXNpbmVzcyBjYXJkLiJdLAogIFsi7IaM6rCc7ZWY64ukIiwgInNvLWdhZS1oYS1kYSIsICJ0byBpbnRyb2R1Y2UiLCAi7KCcIOy5nOq1rOulvCDshozqsJztlaDqsozsmpQgPSBsZXQgbWUgaW50cm9kdWNlIG15IGZyaWVuZCIsICLwn6SdIiwgIuygnCDsuZzqtazrpbwg7IaM6rCc7ZWg6rKM7JqULiIsICJMZXQgbWUgaW50cm9kdWNlIG15IGZyaWVuZC4iXSwKICBbIu2ZmOyYge2VtOyalCIsICJod2FuLXllb25nLWhhZS15byIsICJ3ZWxjb21lISIsICJHcmVldCBuZXdjb21lcnMgd2FybWx5IHdpdGggdGhpcyIsICLwn46JIiwgIuyasOumrCDrqqjsnoTsl5Ag7ZmY7JiB7ZW07JqUISIsICJXZWxjb21lIHRvIG91ciBncm91cCEiXV0sCiBncmFtbWFyOlsKICBbIuyggOuKlCBO7J207JeQ7JqUL+yYiOyalCIsIkkgYW0gTiIsIkludHJvZHVjaW5nIHlvdXJzZWxmIOKAlCBuYW1lLCBqb2IsIG5hdGlvbmFsaXR5Iiwi7J207JeQ7JqUIGFmdGVyIGEgY29uc29uYW50ICjsgqzrnozsnbTsl5DsmpQpLCDsmIjsmpQgYWZ0ZXIgYSB2b3dlbCAo66+87IiY7JiI7JqUKS4iLCLsoIDripQg7Yaw7J207JeQ7JqULiIsIkkgYW0gVG9tLiIsIuyggOuKlCDsupDrgpjri6Qg7IKs656M7J207JeQ7JqULiIsIkkgYW0gQ2FuYWRpYW4uIl0sCiAgWyJO7J20L+qwgCDrrZDsmIjsmpQ/Iiwid2hhdCBpcyBOPyIsIkFza2luZyBhYm91dCBhbnl0aGluZyB5b3UgcG9pbnQgYXQgb3Igd2FudCB0byBrbm93Iiwi7J20IGFmdGVyIGNvbnNvbmFudCwg6rCAIGFmdGVyIHZvd2VsLiBUaGUgdW5pdmVyc2FsIHF1ZXN0aW9uIHN0YXJ0ZXIuIiwi7J2066aE7J20IOutkOyYiOyalD8iLCJXaGF0IGlzIHlvdXIgbmFtZT8iLCLsnbTqsbDripQg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhpcz8iXSwKICBbIk7sl5DshJwg7JmU7Ja07JqUIiwiSSBjYW1lIGZyb20gTiIsIlNoYXJpbmcgKG9yIGFza2luZykgd2hlcmUgc29tZW9uZSBpcyBmcm9tIiwi7JeQ7IScIG1hcmtzIHRoZSBvcmlnaW4uIFF1ZXN0aW9uOiDslrTrlJTsl5DshJwg7JmU7Ja07JqUPyIsIuyggOuKlCDrsqDtirjrgqjsl5DshJwg7JmU7Ja07JqULiIsIkkgY2FtZSBmcm9tIFZpZXRuYW0uIiwi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IiwiV2hpY2ggY291bnRyeSBkaWQgeW91IGNvbWUgZnJvbT8iXV19LAoKe246Miwga3I6Iuy5tO2OmCIsIGVuOiJBdCB0aGUgQ2Fmw6kiLCB2aToiT3JkZXIgbGlrZSBhIHJlZ3VsYXIiLCBlbW9qaToi4piVIiwgYm9zczoi8J+QsiIsIGJvc3NOYW1lOiJEZWNhZiBEcmFnb24iLAogd29yZHM6WwogIFsi7Luk7ZS8Iiwia2VvLXBpIiwiY29mZmVlIiwiS29yZWEgcnVucyBvbiBjb2ZmZWUg4oCUIGNhZsOpcyBvbiBldmVyeSBjb3JuZXIiLCLimJUiLCLsu6TtlLwg7ZWcIOyelCDso7zshLjsmpQuIiwiT25lIGNvZmZlZSwgcGxlYXNlLiJdLAogIFsi7KO87IS47JqUIiwianUtc2UteW8iLCJwbGVhc2UgZ2l2ZSBtZSIsIlRIRSBtYWdpYyB3b3JkIOKAlCBhdHRhY2ggaXQgdG8gYW55dGhpbmcgeW91IHdhbnQiLCLwn6SyIiwi66y8IOyigCDso7zshLjsmpQuIiwiU29tZSB3YXRlciwgcGxlYXNlLiJdLAogIFsi7JWE7J207IqkIiwiYS1pLXNldSIsImljZWQiLCJLb3JlYW5zIGRyaW5rIGljZWQgY29mZmVlIGV2ZW4gaW4gd2ludGVyIiwi8J+niiIsIuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7KO87IS47JqULiIsIkFuIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIl0sCiAgWyLrlLDrnLvtlZwiLCJ0dGEtdHRldS10YW4iLCJob3QgKGRyaW5rKSIsIkxpdGVyYWxseSAnd2FybScg4oCUIHRoZSBzdGFuZGFyZCB3b3JkIGZvciBob3QgZHJpbmtzIiwi4pmo77iPIiwi65Sw65y77ZWcIOudvO2FjCDso7zshLjsmpQuIiwiQSBob3QgbGF0dGUsIHBsZWFzZS4iXSwKICBbIu2VnCDsnpQiLCJoYW4gamFuIiwib25lIGN1cCIsIuyelCA9IGN1cCBjb3VudGVyOiDtlZwg7J6ULCDrkZAg7J6ULCDshLgg7J6UIiwi8J+lpCIsIuy7pO2UvCDrkZAg7J6UIOyjvOyEuOyalC4iLCJUd28gY29mZmVlcywgcGxlYXNlLiJdLAogIFsi7Y+s7J6lIiwicG8tamFuZyIsInRha2VvdXQiLCLtj6zsnqXtlbQg7KO87IS47JqUID0gdG8gZ287IOuoueqzoCDqsIjqsozsmpQgPSBmb3IgaGVyZSIsIvCfpaEiLCLtj6zsnqXtlbQg7KO87IS47JqULiIsIlRvIGdvLCBwbGVhc2UuIl0sCiAgWyLslrzrp4jsmIjsmpQiLCJlb2wtbWEteWUteW8iLCJob3cgbXVjaCBpcyBpdCIsIldvcmtzIGZvciBldmVyeXRoaW5nIHdpdGggYSBwcmljZSB0YWciLCLwn5KwIiwi7J206rGwIOyWvOuniOyYiOyalD8iLCJIb3cgbXVjaCBpcyB0aGlzPyJdLAogIFsi7Lm065OcIiwia2EtZGV1IiwiY2FyZCIsIuy5tOuTnOuhnCA9IGJ5IGNhcmQ7IG5lYXJseSBldmVyeXdoZXJlIHRha2VzIGNhcmRzIiwi8J+SsyIsIuy5tOuTnOuhnCDtlaDqsozsmpQuIiwiSSB3aWxsIHBheSBieSBjYXJkLiJdLAogIFsi7ZiE6riIIiwiaHllb24tZ2V1bSIsImNhc2giLCJTb21lIG1hcmtldHMgYXJlIHN0aWxsIGNhc2gtb25seSIsIvCfkrUiLCLtmITquIjrp4wg64+87JqUPyIsIklzIGl0IGNhc2ggb25seT8iXSwKICBbIuy8gOydtO2BrCIsImtlLWkta2V1IiwiY2FrZSIsIkNhZsOpIGNha2VzIGFyZSBhIHdob2xlIGN1bHR1cmUgaW4gS29yZWEiLCLwn42wIiwi7LmY7KaIIOy8gOydtO2BrCDtlZjrgpgg7KO87IS47JqULiIsIk9uZSBjaGVlc2VjYWtlLCBwbGVhc2UuIl0sCiAgWyLshKTtg5UiLCJzZW9sLXRhbmciLCJzdWdhciIsIuu5vCDso7zshLjsmpQgPSBsZWF2ZSBpdCBvdXQiLCLwn42sIiwi7ISk7YOVIOu5vCDso7zshLjsmpQuIiwiTm8gc3VnYXIsIHBsZWFzZS4iXSwKICBbIuyekOumrCIsImphLXJpIiwic2VhdCIsIkNoZWNrIGJlZm9yZSB5b3Ugb3JkZXIgYXQgYnVzeSBjYWbDqXMiLCLwn6qRIiwi7J6Q66asIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBhIHNlYXQ/Il0sCiAgWyLrnbzthYwiLCAibGEtdGUiLCAibGF0dGUiLCAiQ2Fmw6kgbGF0dGVzIGNvbWUgaW4gbWFueSBmbGF2b3JzOiDrsJTri5DrnbwsIOuFueywqOKApiIsICLwn6WbIiwgIuuwlOuLkOudvCDrnbzthYwg7KO87IS47JqULiIsICJBIHZhbmlsbGEgbGF0dGUsIHBsZWFzZS4iXSwKICBbIuuFueywqCIsICJub2stY2hhIiwgImdyZWVuIHRlYSIsICJBbHNvIGEgYmVsb3ZlZCBsYXR0ZSBhbmQgaWNlLWNyZWFtIGZsYXZvciIsICLwn421IiwgIuuFueywqCDrnbzthYzrj4Qg7J6I7Ja07JqUPyIsICJEbyB5b3UgYWxzbyBoYXZlIGdyZWVuIHRlYSBsYXR0ZXM/Il0sCiAgWyLso7zsiqQiLCAianUtc2V1IiwgImp1aWNlIiwgIktvbmdsaXNoIOKAlCBzb3VuZHMganVzdCBsaWtlICdqdWljZSciLCAi8J+ngyIsICLsmKTroIzsp4Ag7KO87IqkIOyjvOyEuOyalC4iLCAiT3JhbmdlIGp1aWNlLCBwbGVhc2UuIl0sCiAgWyLsmrDsnKAiLCAidS15dSIsICJtaWxrIiwgIuuRkOycoCA9IHNveSBtaWxrIGlmIHlvdSBhdm9pZCBkYWlyeSIsICLwn6WbIiwgIuyasOycoCDrjIDsi6Ag65GQ7Jyg66GcIOyjvOyEuOyalC4iLCAiU295IG1pbGsgaW5zdGVhZCBvZiBtaWxrLCBwbGVhc2UuIl0sCiAgWyLslrzsnYwiLCAiZW9sLWV1bSIsICJpY2UiLCAi7Ja87J2MIOunjuydtC/sobDquIggPSBsb3RzIG9mIC8gYSBsaXR0bGUgaWNlIiwgIvCfp4oiLCAi7Ja87J2MIOyhsOq4iOunjCDso7zshLjsmpQuIiwgIkp1c3QgYSBsaXR0bGUgaWNlLCBwbGVhc2UuIl0sCiAgWyLri6zri6QiLCAiZGFsLWRhIiwgInN3ZWV0IiwgIuuEiOustCDri6zslYTsmpQgPSB0b28gc3dlZXQgKEtvcmVhbiBjYWbDqSBkcmlua3Mgb2Z0ZW4gYXJlISkiLCAi8J+NryIsICLsnbQg7J2M66OM7IiY64qUIOuEiOustCDri6zslYTsmpQuIiwgIlRoaXMgZHJpbmsgaXMgdG9vIHN3ZWV0LiJdLAogIFsi7JOw64ukIiwgInNzZXUtZGEiLCAiYml0dGVyIiwgIkRlc2NyaWJlcyBzdHJvbmcgY29mZmVlIHBlcmZlY3RseSIsICLimJUiLCAi7J20IOy7pO2UvOuKlCDsobDquIgg7I2o7JqULiIsICJUaGlzIGNvZmZlZSBpcyBhIGJpdCBiaXR0ZXIuIl0sCiAgWyLsp4Trj5nrsqgiLCAiamluLWRvbmctYmVsIiwgImJ1enplciBwYWdlciIsICJLb3JlYW4gY2Fmw6lzIGhhbmQgeW91IG9uZSDigJQgaXQgYnV6emVzIHdoZW4geW91ciBvcmRlciBpcyByZWFkeSIsICLwn5OzIiwgIuynhOuPmeuyqOydtCDsmrjrpqzrqbQg7Jik7IS47JqULiIsICJDb21lIHdoZW4gdGhlIGJ1enplciByaW5ncy4iXSwKICBbIuumrO2VhCIsICJyaS1waWwiLCAicmVmaWxsIiwgIuumrO2VhCDrj7zsmpQ/ID0gZG8geW91IGRvIHJlZmlsbHM/IiwgIvCflIQiLCAi66as7ZWEIOuPvOyalD8iLCAiQ2FuIEkgZ2V0IGEgcmVmaWxsPyJdLAogIFsi7L2Y7IS87Yq4IiwgImtvbi1zZW4tdGV1IiwgInBvd2VyIG91dGxldCIsICJDYWbDqS13b3JrZXIgc3Vydml2YWwgd29yZCIsICLwn5SMIiwgIuy9mOyEvO2KuCDsnojripQg7J6Q66asIOyeiOyWtOyalD8iLCAiSXMgdGhlcmUgYSBzZWF0IHdpdGggYW4gb3V0bGV0PyJdLAogIFsi66i46re47Lu1IiwgIm1lby1nZXUta2VvcCIsICJtdWciLCAi66i46re47Lu17JeQIOyjvOyEuOyalCA9IGZvciBoZXJlLCBpbiBhIG11ZyAoZWNvLWZyaWVuZGx5ISkiLCAi4piVIiwgIuuouOq3uOy7teyXkCDso7zshLjsmpQuIiwgIkluIGEgbXVnLCBwbGVhc2UuIl0sCiAgWyLruajrjIAiLCAicHBhbC1kYWUiLCAic3RyYXciLCAiVXN1YWxseSBhdCB0aGUgcGlja3VwIGNvdW50ZXIiLCAi8J+lpCIsICLruajrjIDripQg7Ja065SU7JeQIOyeiOyWtOyalD8iLCAiV2hlcmUgYXJlIHRoZSBzdHJhd3M/Il1dLAogZ3JhbW1hcjpbCiAgWyJOIOyjvOyEuOyalCIsInBsZWFzZSBnaXZlIG1lIE4iLCJPcmRlcmluZyBBTllUSElORyDigJQgZHJpbmtzLCBmb29kLCB0aGUgYmlsbCIsIk5vdW4gKyDso7zshLjsmpQuIEFkZCDsooAgdG8gc29mdGVuOiDrrLwg7KKAIOyjvOyEuOyalC4iLCLslYTsnbTsiqQg7JWE66mU66as7Lm064W4IOyjvOyEuOyalC4iLCJBbiBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsIuuplOuJtCDsooAg7KO87IS47JqULiIsIlRoZSBtZW51LCBwbGVhc2UuIl0sCiAgWyJOKOycvCnroZwg7ZWg6rKM7JqUIiwiSSB3aWxsIGdvIHdpdGggTiIsIkNob29zaW5nIGFuIG9wdGlvbiDigJQgcGF5bWVudCwgZmxhdm9yLCBzaXplIiwiKOycvCnroZwgbWFya3MgeW91ciBjaG9pY2U7IH7jhLnqsozsmpQgPSBmcmllbmRseSAnSSB3aWxsJy4iLCLsubTrk5zroZwg7ZWg6rKM7JqULiIsIkkgd2lsbCBwYXkgYnkgY2FyZC4iLCLtgbAg7IKs7J207KaI66GcIO2VoOqyjOyalC4iLCJJIHdpbGwgdGFrZSB0aGUgbGFyZ2Ugc2l6ZS4iXSwKICBbIk4g67m8IOyjvOyEuOyalCIsIndpdGhvdXQgTiwgcGxlYXNlIiwiQ3VzdG9taXppbmcgeW91ciBvcmRlciIsIuu5vOuLpCA9IHJlbW92ZS4gT3Bwb3NpdGU6IOuNlCDso7zshLjsmpQgKG1vcmUgcGxlYXNlKS4iLCLshKTtg5Ug67m8IOyjvOyEuOyalC4iLCJXaXRob3V0IHN1Z2FyLCBwbGVhc2UuIiwi7Ja87J2MIOu5vCDso7zshLjsmpQuIiwiTm8gaWNlLCBwbGVhc2UuIl1dfSwKCntuOjMsIGtyOiLsi53ri7kiLCBlbjoiQXQgdGhlIFJlc3RhdXJhbnQiLCB2aToiTmV2ZXIgZ28gaHVuZ3J5IiwgZW1vamk6IvCfjZwiLCBib3NzOiLwn4y277iPIiwgYm9zc05hbWU6IlNwaWNlIEdvYmxpbiIsCiB3b3JkczpbCiAgWyLrqZTribQiLCJtZS1ueXUiLCJtZW51Iiwi66mU64m07YyQID0gdGhlIHBoeXNpY2FsIG1lbnUgYm9hcmQvYm9vayIsIvCfk4siLCLrqZTribQg7KKAIOyjvOyEuOyalC4iLCJUaGUgbWVudSwgcGxlYXNlLiJdLAogIFsi7LaU7LKcIiwiY2h1LWNoZW9uIiwicmVjb21tZW5kYXRpb24iLCJTZXJ2ZXJzIGxvdmUgdGhpcyBxdWVzdGlvbiDigJQgaW5zdGFudCBnb29kIGZvb2QiLCLwn5GNIiwi7LaU7LKc7ZW0IOyjvOyEuOyalCEiLCJQbGVhc2UgcmVjb21tZW5kIHNvbWV0aGluZyEiXSwKICBbIuunteuLpCIsIm1hZXAtZGEiLCJzcGljeSIsIkVzc2VudGlhbCBzdXJ2aXZhbCBjaGVjazog66ek7JuM7JqUPyA9IGlzIGl0IHNwaWN5PyIsIvCfjLbvuI8iLCLsnbTqsbAg66eO7J20IOunpOybjOyalD8iLCJJcyB0aGlzIHZlcnkgc3BpY3k/Il0sCiAgWyLrrLwiLCJtdWwiLCJ3YXRlciIsIlVzdWFsbHkgc2VsZi1zZXJ2ZSDigJQgbG9vayBmb3IgdGhlIHdhdGVyIHN0YXRpb24iLCLwn5KnIiwi66y87J2AIOyFgO2UhOyYiOyalC4iLCJXYXRlciBpcyBzZWxmLXNlcnZlLiJdLAogIFsi67CY7LCsIiwiYmFuLWNoYW4iLCJzaWRlIGRpc2hlcyIsIkZyZWUgYW5kIHJlZmlsbGFibGUgYXQgbW9zdCBLb3JlYW4gcmVzdGF1cmFudHMhIiwi8J+loiIsIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iXSwKICBbIuunm+yeiOuLpCIsIm1hcy1pdC1kYSIsImRlbGljaW91cyIsIkNvbXBsaW1lbnQgdGhlIGZvb2Qg4oCUIGl0IG1ha2VzIGV2ZXJ5b25lIGhhcHB5Iiwi8J+YiyIsIuyZgCwg7KCV66eQIOunm+yeiOyWtOyalCEiLCJXb3csIHRoaXMgaXMgcmVhbGx5IGRlbGljaW91cyEiXSwKICBbIuqzhOyCsOyEnCIsImd5ZS1zYW4tc2VvIiwiYmlsbCIsIk9mdGVuIHlvdSBqdXN0IHBheSBhdCB0aGUgY291bnRlciBieSB0aGUgZG9vciIsIvCfp74iLCLqs4TsgrDshJwg7KO87IS47JqULiIsIlRoZSBiaWxsLCBwbGVhc2UuIl0sCiAgWyLrlLDroZwiLCJ0dGEtcm8iLCJzZXBhcmF0ZWx5Iiwi65Sw66Gc65Sw66GcIOqzhOyCsCA9IHNwbGl0IHRoZSBiaWxsIiwi8J+SuCIsIuuUsOuhnCDqs4TsgrDtlbQg7KO87IS47JqULiIsIlNlcGFyYXRlIGJpbGxzLCBwbGVhc2UuIl0sCiAgWyLtmZTsnqXsi6QiLCJod2EtamFuZy1zaWwiLCJyZXN0cm9vbSIsIlNvbWV0aW1lcyBvdXRzaWRlIHRoZSByZXN0YXVyYW50IOKAlCBhc2sgZm9yIHRoZSBjb2RlISIsIvCfmrsiLCLtmZTsnqXsi6TsnbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSByZXN0cm9vbT8iXSwKICBbIuyYiOyVvSIsInllLXlhayIsInJlc2VydmF0aW9uIiwi7JiI7JW97ZaI7Ja07JqUID0gSSBoYXZlIGEgcmVzZXJ2YXRpb24iLCLwn5OFIiwi65GQIOuqheycvOuhnCDsmIjslb3tlojslrTsmpQuIiwiSSByZXNlcnZlZCBmb3IgdHdvIHBlb3BsZS4iXSwKICBbIuygk+qwgOudvSIsImplb3QtZ2EtcmFrIiwiY2hvcHN0aWNrcyIsIk9mdGVuIGluIGEgYm94IG9uIHRoZSB0YWJsZSBzaWRlIGRyYXdlciIsIvCfpaIiLCLsoJPqsIDrnb0g7ZWY64KYIOuNlCDso7zshLjsmpQuIiwiT25lIG1vcmUgcGFpciBvZiBjaG9wc3RpY2tzLCBwbGVhc2UuIl0sCiAgWyLrsLDrtoDrpbTri6QiLCJiYWUtYnUtcmV1LWRhIiwidG8gYmUgZnVsbCIsIlRoZSBoYXBwaWVzdCBzZW50ZW5jZSBhZnRlciBhIGdvb2QgbWVhbCIsIvCfq4MiLCLslYQsIOuwsOu2iOufrOyalCEiLCJBaCwgSSBhbSBmdWxsISJdLAogIFsi67ClIiwgImJhcCIsICJyaWNlIC8gYSBtZWFsIiwgIuuwpSDrqLnsl4jslrTsmpQ/ID0gZGlkIHlvdSBlYXQ/IChhIGdyZWV0aW5nIG9mIGNhcmUhKSIsICLwn42aIiwgIuuwpSDrqLnsl4jslrTsmpQ/IiwgIkhhdmUgeW91IGVhdGVuPyJdLAogIFsi6rWtIiwgImd1ayIsICJzb3VwIiwgIktvcmVhbiBtZWFscyBhbG1vc3QgYWx3YXlzIGluY2x1ZGUgb25lIiwgIvCfjbIiLCAi6rWt7J20IOygleunkCDrlLDrnLvtlbTsmpQuIiwgIlRoZSBzb3VwIGlzIHJlYWxseSB3YXJtLiJdLAogIFsi6rOg6riwIiwgImdvLWdpIiwgIm1lYXQiLCAi6rOg6riwIOq1rOybjCDrqLnslrTsmpQgPSBLb3JlYW4gQkJRIG5pZ2h0IiwgIvCfpakiLCAi6rOg6riwIOyii+yVhO2VtOyalD8iLCAiRG8geW91IGxpa2UgbWVhdD8iXSwKICBbIuuPvOyngOqzoOq4sCIsICJkd2FlLWppLWdvLWdpIiwgInBvcmsiLCAi64+87KeAIHBpZyArIOqzoOq4sCBtZWF0IOKAlCB0aGUgcGF0dGVybiBmb3IgYWxsIG1lYXRzIiwgIvCfkLciLCAi64+87KeA6rOg6riw66GcIOyjvOyEuOyalC4iLCAiUG9yaywgcGxlYXNlLiJdLAogIFsi64ut6rOg6riwIiwgImRhay1nby1naSIsICJjaGlja2VuIiwgIuy5mO2CqCA9IGZyaWVkIGNoaWNrZW47IOuLreqzoOq4sCA9IGNoaWNrZW4gbWVhdCIsICLwn42XIiwgIuuLreqzoOq4sCDsmpTrpqzqsIAg66eb7J6I7Ja07JqULiIsICJUaGUgY2hpY2tlbiBkaXNoZXMgYXJlIGRlbGljaW91cy4iXSwKICBbIu2VtOusvCIsICJoYWUtbXVsIiwgInNlYWZvb2QiLCAi7ZW066y8IO2MjOyghCA9IHNlYWZvb2QgcGFuY2FrZSwgYSBjbGFzc2ljIiwgIvCfppAiLCAi7ZW066y87J2EIOuquyDrqLnslrTsmpQuIiwgIkkgY2Fubm90IGVhdCBzZWFmb29kLiJdLAogIFsi7LGE7IaMIiwgImNoYWUtc28iLCAidmVnZXRhYmxlcyIsICLslbzssYQgaXMgYWxzbyB1c2VkIOKAlCBib3RoIGFyZSBmaW5lIiwgIvCfpawiLCAi7LGE7IaM66W8IOunjuydtCDrqLnslrTsmpQuIiwgIkkgZWF0IGEgbG90IG9mIHZlZ2V0YWJsZXMuIl0sCiAgWyLsiJ/qsIDrnb0iLCAic3V0LWdhLXJhayIsICJzcG9vbiIsICJLb3JlYW5zIGVhdCByaWNlIHdpdGggYSBzcG9vbiwgbm90IGNob3BzdGlja3MiLCAi8J+lhCIsICLsiJ/qsIDrnb0g7ZWY64KYIOyjvOyEuOyalC4iLCAiT25lIHNwb29uLCBwbGVhc2UuIl0sCiAgWyLsp5zri6QiLCAiamphLWRhIiwgInNhbHR5IiwgIuyigCDsp5zsmpQgPSBhIGJpdCBzYWx0eSIsICLwn6eCIiwgIuydtCDqta3snYAg7KKAIOynnOyalC4iLCAiVGhpcyBzb3VwIGlzIGEgYml0IHNhbHR5LiJdLAogIFsi67Cw64usIiwgImJhZS1kYWwiLCAiZGVsaXZlcnkiLCAiS29yZWEncyBkZWxpdmVyeSBjdWx0dXJlIGlzIHdvcmxkLWZhbW91cyIsICLwn5u1IiwgIuuwsOuLrCDrj7zsmpQ/IiwgIkRvIHlvdSBkZWxpdmVyPyJdLAogIFsi66eb7KeRIiwgIm1hdC1qaXAiLCAiZmFtb3VzIHRhc3R5IHJlc3RhdXJhbnQiLCAi66ebIHRhc3RlICsg7KeRIGhvdXNlIOKAlCBldmVyeW9uZSBodW50cyDrp5vsp5EhIiwgIuKtkCIsICLsl6zquLDqsIAg7Jyg66qF7ZWcIOunm+ynkeydtOyXkOyalC4iLCAiVGhpcyBpcyBhIGZhbW91cyBtdXN0LWVhdCBwbGFjZS4iXSwKICBbIuyCrOyepeuLmCIsICJzYS1qYW5nLW5pbSIsICJvd25lciAvIGJvc3MiLCAiUG9saXRlbHkgY2FsbCByZXN0YXVyYW50IG93bmVycyB0aGlzIOKAlCB0aGV5IGxvdmUgaXQiLCAi8J+ZiyIsICLsgqzsnqXri5gsIOusvCDsooAg7KO87IS47JqUISIsICJFeGN1c2UgbWUsIHNvbWUgd2F0ZXIgcGxlYXNlISJdXSwKIGdyYW1tYXI6WwogIFsiTiDrjZQg7KO87IS47JqUIiwibW9yZSBOLCBwbGVhc2UiLCJSZWZpbGxzIOKAlCBzaWRlIGRpc2hlcywgd2F0ZXIsIGFueXRoaW5nIiwi642UID0gbW9yZS4gS29yZWFuIHJlc3RhdXJhbnRzIGV4cGVjdCB0aGlzLCBkbyBub3QgYmUgc2h5LiIsIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLCLrrLwg642UIOyjvOyEuOyalC4iLCJNb3JlIHdhdGVyLCBwbGVhc2UuIl0sCiAgWyLslYggKyBhZGplY3RpdmUiLCJub3QgfiIsIkFza2luZyBmb3IgZm9vZCB5b3VyIHdheSIsIuyViCDrp7XqsowgPSBub3Qgc3BpY3kobHkpLiDslYggZ29lcyByaWdodCBiZWZvcmUgdGhlIHdvcmQuIiwi7JWIIOunteqyjCDtlbQg7KO87IS47JqULiIsIlBsZWFzZSBtYWtlIGl0IG5vdCBzcGljeS4iLCLslYgg7Kec6rKMIO2VtCDso7zshLjsmpQuIiwiUGxlYXNlIG1ha2UgaXQgbm90IHNhbHR5LiJdLAogIFsifijsnLwp44S5IOyImCDsnojslrTsmpQ/IiwiY2FuIHlvdSAvIGlzIGl0IHBvc3NpYmxlPyIsIlBvbGl0ZWx5IGNoZWNraW5nIGlmIHNvbWV0aGluZyBjYW4gYmUgZG9uZSIsIlZlcmIgc3RlbSArICjsnLwp44S5IOyImCDsnojslrTsmpQuIFRoZSB1bml2ZXJzYWwgcG9zc2liaWxpdHkgY2hlY2suIiwi642cIOunteqyjCDtlaAg7IiYIOyeiOyWtOyalD8iLCJDYW4geW91IG1ha2UgaXQgbGVzcyBzcGljeT8iLCLsp4DquIgg7KO866y47ZWgIOyImCDsnojslrTsmpQ/IiwiQ2FuIEkgb3JkZXIgbm93PyJdXX0sCgp7bjo0LCBrcjoi6ri4IOywvuq4sCIsIGVuOiJBc2tpbmcgRGlyZWN0aW9ucyIsIHZpOiJOZXZlciB0cnVseSBsb3N0IiwgZW1vamk6IvCfl7rvuI8iLCBib3NzOiLwn4yAIiwgYm9zc05hbWU6Ik1hemUgUGhhbnRvbSIsCiB3b3JkczpbCiAgWyLslrTrlJQiLCJlby1kaSIsIndoZXJlIiwi7Ja065SU7JiI7JqUPyB3b3JrcyBmb3IgcGxhY2VzLCByZXN0cm9vbXMsIGV4aXRzLCBldmVyeXRoaW5nIiwi4p2TIiwi7KeA7ZWY7LKg7Jet7J20IOyWtOuUlOyYiOyalD8iLCJXaGVyZSBpcyB0aGUgc3Vid2F5IHN0YXRpb24/Il0sCiAgWyLsmbzsqr0iLCJvZW4tampvayIsImxlZnQiLCIo7Jy8KeuhnCBtYXJrcyB0aGUgZGlyZWN0aW9uOiDsmbzsqr3snLzroZwiLCLirIXvuI8iLCLsmbzsqr3snLzroZwg6rCA7IS47JqULiIsIkdvIHRvIHRoZSBsZWZ0LiJdLAogIFsi7Jik66W47Kq9Iiwiby1yZXVuLWpqb2siLCJyaWdodCIsIkxlYXJuIOyZvOyqvS/smKTrpbjsqr0gYXMgYSBwYWlyIiwi4p6h77iPIiwi7Jik66W47Kq97Jy866GcIOuPhOyEuOyalC4iLCJUdXJuIHJpZ2h0LiJdLAogIFsi7K2JIiwiamp1ayIsInN0cmFpZ2h0IGFoZWFkIiwi7K2JIOqwgOyEuOyalCA9IGtlZXAgZ29pbmcgc3RyYWlnaHQg4oCUIHlvdSB3aWxsIGhlYXIgdGhpcyBhIGxvdCIsIuKshu+4jyIsIuydtCDquLjroZwg7K2JIOqwgOyEuOyalC4iLCJHbyBzdHJhaWdodCBhbG9uZyB0aGlzIHJvYWQuIl0sCiAgWyLsgqzqsbDrpqwiLCJzYS1nZW8tcmkiLCJpbnRlcnNlY3Rpb24iLCLsgqwgPSBmb3VyLCDqsbDrpqwgPSB3YXk6IGEgZm91ci13YXkgY3Jvc3NpbmciLCLinpUiLCLsgqzqsbDrpqzsl5DshJwg7Jm87Kq97J207JeQ7JqULiIsIkF0IHRoZSBpbnRlcnNlY3Rpb24sIGl0IGlzIG9uIHRoZSBsZWZ0LiJdLAogIFsi7Iug7Zi465OxIiwic2luLWhvLWRldW5nIiwidHJhZmZpYyBsaWdodCIsIkEgZmF2b3JpdGUgbGFuZG1hcmsgaW4gZGlyZWN0aW9ucyIsIvCfmqYiLCLsi6DtmLjrk7Hsl5DshJwg6rG064SI7IS47JqULiIsIkNyb3NzIGF0IHRoZSB0cmFmZmljIGxpZ2h0LiJdLAogIFsi6rG064SI64ukIiwiZ2Vvbi1uZW8tZGEiLCJ0byBjcm9zcyIsIuq4uOydhCDqsbTrhIjri6QgPSBjcm9zcyB0aGUgc3RyZWV0Iiwi8J+atiIsIu2aoeuLqOuztOuPhOyXkOyEnCDquLjsnYQg6rG064SI7IS47JqULiIsIkNyb3NzIHRoZSBzdHJlZXQgYXQgdGhlIGNyb3Nzd2Fsay4iXSwKICBbIuqwgOq5neuLpCIsImdhLWtrYXAtZGEiLCJuZWFyIiwi6rCA6rmM7JuM7JqUPyA9IGlzIGl0IGNsb3NlPyBHcmVhdCBiZWZvcmUgY29tbWl0dGluZyB0byB3YWxrIiwi8J+TjSIsIuyXrOq4sOyEnCDqsIDquYzsm4zsmpQ/IiwiSXMgaXQgbmVhciBoZXJlPyJdLAogIFsi66mA64ukIiwibWVvbC1kYSIsImZhciIsIuupgOyWtOyalCA9IGl0IGlzIGZhciDihpIgdGFrZSBhIGJ1cyBpbnN0ZWFkIiwi8J+alyIsIuqxuOyWtOyEnCDsooAg66mA7Ja07JqULiIsIkl0IGlzIGEgYml0IGZhciBvbiBmb290LiJdLAogIFsi7JiGIiwieWVvcCIsIm5leHQgdG8iLCJOIOyYhuyXkCA9IGJlc2lkZSBOOiDsnYDtlokg7JiG7JeQIiwi4oaU77iPIiwi7Lm07Y6Y64qUIOydgO2WiSDsmIbsl5Ag7J6I7Ja07JqULiIsIlRoZSBjYWbDqSBpcyBuZXh0IHRvIHRoZSBiYW5rLiJdLAogIFsi7JWeIiwiYXAiLCJpbiBmcm9udCBvZiIsIk4g7JWe7JeQ7IScIOunjOuCmOyalCA9IGNsYXNzaWMgbWVldGluZyBpbnN0cnVjdGlvbiIsIvCfj6IiLCLtjrjsnZjsoJAg7JWe7JeQ7IScIOunjOuCmOyalC4iLCJMZXQgdXMgbWVldCBpbiBmcm9udCBvZiB0aGUgY29udmVuaWVuY2Ugc3RvcmUuIl0sCiAgWyLrqocg67aEIiwibXllb3QgYnVuIiwiaG93IG1hbnkgbWludXRlcyIsIuqxuOyWtOyEnCDrqocg67aE7J207JeQ7JqUPyA9IGhvdyBtYW55IG1pbnV0ZXMgb24gZm9vdD8iLCLij7HvuI8iLCLqsbjslrTshJwg66qHIOu2hCDqsbjroKTsmpQ/IiwiSG93IG1hbnkgbWludXRlcyBkb2VzIGl0IHRha2Ugb24gZm9vdD8iXSwKICBbIuy2nOq1rCIsICJjaHVsLWd1IiwgImV4aXQiLCAiU3Vid2F5IGV4aXRzIGFyZSBudW1iZXJlZCDigJQgM+uyiCDstpzqtawgPSBleGl0IDMiLCAi8J+aqiIsICIz67KIIOy2nOq1rOuhnCDrgpjsmKTshLjsmpQuIiwgIkNvbWUgb3V0IG9mIGV4aXQgMy4iXSwKICBbIuyeheq1rCIsICJpcC1ndSIsICJlbnRyYW5jZSIsICJUaGUgcGFpciBvZiDstpzqtawiLCAi4p6h77iPIiwgIuyeheq1rOqwgCDslrTrlJTsmIjsmpQ/IiwgIldoZXJlIGlzIHRoZSBlbnRyYW5jZT8iXSwKICBbIuqzqOuqqSIsICJnb2wtbW9rIiwgImFsbGV5IiwgIlRoZSBiZXN0IHJlc3RhdXJhbnRzIGhpZGUgaW4gYWxsZXlzIiwgIvCfj5jvuI8iLCAi7J20IOqzqOuqqeyXkCDrp5vsp5HsnbQg66eO7JWE7JqULiIsICJUaGlzIGFsbGV5IGhhcyBtYW55IGdyZWF0IGVhdGVyaWVzLiJdLAogIFsi66qo7YmB7J20IiwgIm1vLXR1bmctaSIsICJjb3JuZXIiLCAi66qo7YmB7J2066W8IOuPjOuptCA9IGFyb3VuZCB0aGUgY29ybmVyIiwgIvCfk5AiLCAi66qo7YmB7J2066W8IOuPjOuptCDrsJTroZwg7J6I7Ja07JqULiIsICJJdCBpcyByaWdodCBhcm91bmQgdGhlIGNvcm5lci4iXSwKICBbIuqxtOusvCIsICJnZW9uLW11bCIsICJidWlsZGluZyIsICLsoIAg6rG066y8ID0gdGhhdCBidWlsZGluZyAocG9pbnQgYXQgaXQhKSIsICLwn4+iIiwgIuyggCDtgbAg6rG066y8IOyYhuydtOyXkOyalC4iLCAiSXQgaXMgbmV4dCB0byB0aGF0IGJpZyBidWlsZGluZy4iXSwKICBbIu2OuOydmOygkCIsICJweWVvbi11aS1qZW9tIiwgImNvbnZlbmllbmNlIHN0b3JlIiwgIktvcmVhJ3MgbGFuZG1hcmsga2luZyDigJQgb25lIG9uIGV2ZXJ5IGJsb2NrIiwgIvCfj6oiLCAi7Y647J2Y7KCQ7JeQ7IScIOyYpOuluOyqveycvOuhnCDqsIDshLjsmpQuIiwgIlR1cm4gcmlnaHQgYXQgdGhlIGNvbnZlbmllbmNlIHN0b3JlLiJdLAogIFsi7J2A7ZaJIiwgImV1bi1oYWVuZyIsICJiYW5rIiwgIkEgY2xhc3NpYyBkaXJlY3Rpb24gbGFuZG1hcmsiLCAi8J+PpiIsICLsnYDtlokg7JWe7JeQ7IScIOunjOuCmOyalC4iLCAiTGV0IHVzIG1lZXQgaW4gZnJvbnQgb2YgdGhlIGJhbmsuIl0sCiAgWyLqs7Xsm5AiLCAiZ29uZy13b24iLCAicGFyayIsICLtlZzqsJUg6rO17JuQID0gSGFuIFJpdmVyIFBhcmssIFNlb3VsJ3MgZmF2b3JpdGUiLCAi8J+MsyIsICLqs7Xsm5DquYzsp4Ag6rG47Ja06rCA7JqULiIsICJMZXQgdXMgd2FsayB0byB0aGUgcGFyay4iXSwKICBbIuuLpOumrCIsICJkYS1yaSIsICJicmlkZ2UiLCAiQWxzbyBtZWFucyAnbGVnJyDigJQgY29udGV4dCB0ZWxscyB5b3Ugd2hpY2ghIiwgIvCfjIkiLCAi64uk66as66W8IOqxtOuEiOuptCDsi5zsnqXsnbQg7J6I7Ja07JqULiIsICJDcm9zcyB0aGUgYnJpZGdlIGFuZCB0aGVyZSBpcyBhIG1hcmtldC4iXSwKICBbIuuPjOuLpCIsICJkb2wtZGEiLCAidG8gdHVybiIsICLsmbzsqr3snLzroZwg64+E7IS47JqUID0gdHVybiBsZWZ0IiwgIuKGqe+4jyIsICLsoIDquLDsl5DshJwg7Jm87Kq97Jy866GcIOuPhOyEuOyalC4iLCAiVHVybiBsZWZ0IG92ZXIgdGhlcmUuIl0sCiAgWyLsp4Drj4QiLCAiamktZG8iLCAibWFwIiwgIuyngOuPhOuhnCDrs7Tsl6wg7KO87IS47JqUID0gc2hvdyBtZSBvbiB0aGUgbWFwIiwgIvCfl7rvuI8iLCAi7KeA64+E66W8IOuztOyXrCDso7zsi5zqsqDslrTsmpQ/IiwgIkNvdWxkIHlvdSBzaG93IG1lIG9uIHRoZSBtYXA/Il0sCiAgWyLquLjsnYQg7J6D64ukIiwgImdpbC1ldWwgaWwtdGEiLCAidG8gZ2V0IGxvc3QiLCAi6ri47J2EIOyeg+yXiOyWtOyalCBnZXRzIHlvdSBpbnN0YW50IGhlbHAiLCAi8J+YtSIsICLquLjsnYQg7J6D7JeI7Ja07JqULiDrj4TsmYDso7zshLjsmpQhIiwgIkkgZ290IGxvc3QuIFBsZWFzZSBoZWxwIG1lISJdXSwKIGdyYW1tYXI6WwogIFsiTuydtC/qsIAg7Ja065SU7JiI7JqUPyIsIndoZXJlIGlzIE4/IiwiVGhlIG9uZSBzZW50ZW5jZSB0aGF0IHVubG9ja3MgYW55IGNpdHkiLCJKdXN0IG5hbWUgKyDslrTrlJTsmIjsmpQuIFBvaW50IGF0IHlvdXIgcGhvbmUgbWFwIGZvciBib251cyBjbGFyaXR5LiIsIu2ZlOyepeyLpOydtCDslrTrlJTsmIjsmpQ/IiwiV2hlcmUgaXMgdGhlIHJlc3Ryb29tPyIsIuuyhOyKpCDsoJXrpZjsnqXsnbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSBidXMgc3RvcD8iXSwKICBbIn4o7Jy8KeuhnCDqsIDshLjsmpQiLCJnbyB0b3dhcmQgfiIsIlVuZGVyc3RhbmRpbmcgdGhlIGRpcmVjdGlvbnMgeW91IGdldCBiYWNrIiwiKOycvCnroZwgPSBkaXJlY3Rpb24gbWFya2VyLiDrj4TshLjsmpQgPSB0dXJuLiIsIuyZvOyqveycvOuhnCDqsIDshLjsmpQuIiwiR28gbGVmdC4iLCLsoIAg7Iug7Zi465Ox7JeQ7IScIOyYpOuluOyqveycvOuhnCDrj4TshLjsmpQuIiwiVHVybiByaWdodCBhdCB0aGF0IHRyYWZmaWMgbGlnaHQuIl0sCiAgWyJ+7JeQ7IScIOqwgOq5jOybjOyalC/rqYDslrTsmpQiLCJuZWFyIC8gZmFyIGZyb20gfiIsIkp1ZGdpbmcgZGlzdGFuY2UgYmVmb3JlIHlvdSBzdGFydCB3YWxraW5nIiwi7JeQ7IScID0gZnJvbS4gQWRkIOqxuOyWtOyEnCA9IG9uIGZvb3QuIiwi7Zi47YWU7JeQ7IScIOqwgOq5jOybjOyalC4iLCJJdCBpcyBjbG9zZSB0byB0aGUgaG90ZWwuIiwi7Jes6riw7IScIOupgOyWtOyalD8iLCJJcyBpdCBmYXIgZnJvbSBoZXJlPyJdXX0sCgp7bjo1LCBrcjoi64yA7KSR6rWQ7Ya1IiwgZW46IkJ1c2VzLCBUcmFpbnMgJiBUYXhpcyIsIHZpOiJNb3ZlIGxpa2UgYSBsb2NhbCIsIGVtb2ppOiLwn5qHIiwgYm9zczoi8J+XvyIsIGJvc3NOYW1lOiJSdXNoLUhvdXIgR29sZW0iLAogd29yZHM6WwogIFsi7KeA7ZWY7LKgIiwiamktaGEtY2hlb2wiLCJzdWJ3YXkiLCJTZW91bCdzIHN1YndheSBpcyB3b3JsZC1jbGFzcyDigJQgc2lnbnMgaGF2ZSBFbmdsaXNoIHRvbyIsIvCfmociLCLsp4DtlZjssqDsnbQg7KCc7J28IOu5qOudvOyalC4iLCJUaGUgc3Vid2F5IGlzIHRoZSBmYXN0ZXN0LiJdLAogIFsi67KE7IqkIiwiYmVvLXNldSIsImJ1cyIsIlRhcCB5b3VyIGNhcmQgd2hlbiBib2FyZGluZyBBTkQgbGVhdmluZyIsIvCfmowiLCLsnbQg67KE7Iqk6rCAIOyLnOyyreyXkCDqsIDsmpQ/IiwiRG9lcyB0aGlzIGJ1cyBnbyB0byBDaXR5IEhhbGw/Il0sCiAgWyLtg53si5wiLCJ0YWVrLXNpIiwidGF4aSIsIlNob3cgdGhlIGFkZHJlc3MgaW4gS29yZWFuIGZvciBzbW9vdGggcmlkZXMiLCLwn5qVIiwi7YOd7Iuc66W8IO2DgOqzoCDqsIjqsozsmpQuIiwiSSB3aWxsIHRha2UgYSB0YXhpLiJdLAogIFsi7JetIiwieWVvayIsInN0YXRpb24gKHRyYWluL3N1YndheSkiLCJBdHRhY2ggdG8gbmFtZXM6IOyEnOyauOyXrSwg6rCV64Ko7JetIiwi8J+aiSIsIuuLpOydjCDsl63snbQg7Ja065SU7JiI7JqUPyIsIldoYXQgaXMgdGhlIG5leHQgc3RhdGlvbj8iXSwKICBbIuygleulmOyepSIsImplb25nLW55dS1qYW5nIiwiYnVzIHN0b3AiLCLrsoTsiqQg7KCV66WY7J6lIOKAlCBkaWZmZXJlbnQgd29yZCBmcm9tIOyXrSEiLCLwn5qPIiwi7KCV66WY7J6l7J20IOyWtOuUlOyXkCDsnojslrTsmpQ/IiwiV2hlcmUgaXMgdGhlIGJ1cyBzdG9wPyJdLAogIFsi7YOA64ukIiwidGEtZGEiLCJ0byByaWRlIC8gdGFrZSIsIlVzZWQgZm9yIGV2ZXJ5IHZlaGljbGU6IOuyhOyKpOulvCDtg4DsmpQsIOyngO2VmOyyoOydhCDtg4DsmpQiLCLwn46rIiwi7Jes6riw7IScIDLtmLjshKDsnYQg7YOA7IS47JqULiIsIlRha2UgbGluZSAyIGZyb20gaGVyZS4iXSwKICBbIuuCtOumrOuLpCIsIm5hZS1yaS1kYSIsInRvIGdldCBvZmYiLCLsoIAg64K066Ck7JqUISA9IEkgYW0gZ2V0dGluZyBvZmYhIChidXMgc3Vydml2YWwgcGhyYXNlKSIsIuKsh++4jyIsIuuLpOydjCDsoJXrpZjsnqXsl5DshJwg64K066as7IS47JqULiIsIkdldCBvZmYgYXQgdGhlIG5leHQgc3RvcC4iXSwKICBbIuqwiOyVhO2DgOuLpCIsImdhbC1hLXRhLWRhIiwidG8gdHJhbnNmZXIiLCLqsIjslYTtg4DripQg6rOzID0gdHJhbnNmZXIgcG9pbnQgKGZvbGxvdyB0aGUgc2lnbnMpIiwi8J+UgCIsIuyLnOyyreyXreyXkOyEnCDqsIjslYTtg4DshLjsmpQuIiwiVHJhbnNmZXIgYXQgQ2l0eSBIYWxsIFN0YXRpb24uIl0sCiAgWyLqtZDthrXsubTrk5wiLCJneW8tdG9uZy1rYS1kZXUiLCJ0cmFuc2l0IGNhcmQiLCJULW1vbmV5IGNhcmQg4oCUIGJ1eSBvbmUgYXQgYW55IGNvbnZlbmllbmNlIHN0b3JlIiwi8J+SsyIsIuq1kO2Gtey5tOuTnOulvCDstqnsoITtlbQg7KO87IS47JqULiIsIlBsZWFzZSByZWNoYXJnZSBteSB0cmFuc2l0IGNhcmQuIl0sCiAgWyLrqocg7Zi47ISgIiwibXllb3QgaG8tc2VvbiIsIndoaWNoIGxpbmUiLCJTdWJ3YXkgbGluZXMgYXJlIG51bWJlcnMgKyBjb2xvcnMiLCLwn5SiIiwi66qHIO2YuOyEoOydhCDtg4Dslbwg7ZW07JqUPyIsIldoaWNoIGxpbmUgc2hvdWxkIEkgdGFrZT8iXSwKICBbIuyWvOuniOuCmCDqsbjroKTsmpQiLCJlb2wtbWEtbmEgZ2VvbC1seWVvLXlvIiwiaG93IGxvbmcgZG9lcyBpdCB0YWtlIiwiV29ya3MgZm9yIGFueSB0cmlwLCBhbnkgdHJhbnNwb3J0Iiwi4o+zIiwi6rO17ZWt6rmM7KeAIOyWvOuniOuCmCDqsbjroKTsmpQ/IiwiSG93IGxvbmcgZG9lcyBpdCB0YWtlIHRvIHRoZSBhaXJwb3J0PyJdLAogIFsi7IS47JuMIOyjvOyEuOyalCIsInNlLXdvIGp1LXNlLXlvIiwicGxlYXNlIHN0b3AgKHRoZSBjYXIpIiwiSW4gYSB0YXhpOiDsl6zquLDshJwg7IS47JuMIOyjvOyEuOyalCA9IHN0b3AgaGVyZSIsIvCfm5EiLCLsoIAg7Y647J2Y7KCQIOyVnuyXkOyEnCDshLjsm4wg7KO87IS47JqULiIsIlBsZWFzZSBzdG9wIGluIGZyb250IG9mIHRoYXQgY29udmVuaWVuY2Ugc3RvcmUuIl0sCiAgWyLquLDssKgiLCAiZ2ktY2hhIiwgInRyYWluIiwgIktUWCA9IEtvcmVhJ3MgYnVsbGV0IHRyYWluIiwgIvCfmoYiLCAi67aA7IKw6rmM7KeAIOq4sOywqOuhnCDqsIDsmpQuIiwgIkkgYW0gZ29pbmcgdG8gQnVzYW4gYnkgdHJhaW4uIl0sCiAgWyLruYTtlonquLAiLCAiYmktaGFlbmctZ2kiLCAiYWlycGxhbmUiLCAi67mE7ZaJ6riwIO2RnCA9IHBsYW5lIHRpY2tldCIsICLinIjvuI8iLCAi67mE7ZaJ6riw6rCAIOuNlCDruajrnbzsmpQuIiwgIlRoZSBwbGFuZSBpcyBmYXN0ZXIuIl0sCiAgWyLqs7Xtla0iLCAiZ29uZy1oYW5nIiwgImFpcnBvcnQiLCAi7J247LKc6rO17ZWtID0gS29yZWEncyBtYWluIGdhdGV3YXkiLCAi8J+bqyIsICLqs7Xtla3rsoTsiqTqsIAg7Ja065SU7JeQIOyeiOyWtOyalD8iLCAiV2hlcmUgaXMgdGhlIGFpcnBvcnQgYnVzPyJdLAogIFsi7J6Q7KCE6rGwIiwgImphLWplb24tZ2VvIiwgImJpY3ljbGUiLCAiUmVudGFibGUgYnkgYXBwIGFsb25nIHRoZSBIYW4gUml2ZXIiLCAi8J+asiIsICLsnpDsoITqsbDrpbwg7YOA6rOgIOqzteybkOyXkCDqsIDsmpQuIiwgIkkgcmlkZSBhIGJpa2UgdG8gdGhlIHBhcmsuIl0sCiAgWyLrhbjshKDrj4QiLCAibm8tc2Vvbi1kbyIsICJyb3V0ZSBtYXAiLCAiVGhlIGNvbG9yZnVsIHN1YndheSBtYXAg4oCUIHlvdXIgYmVzdCBmcmllbmQiLCAi8J+Xuu+4jyIsICLrhbjshKDrj4Trpbwg67O06rOgIOyeiOyWtOyalC4iLCAiSSBhbSBsb29raW5nIGF0IHRoZSByb3V0ZSBtYXAuIl0sCiAgWyLstpzrsJwiLCAiY2h1bC1iYWwiLCAiZGVwYXJ0dXJlIiwgIuy2nOuwnO2WiOyWtOyalD8gPSBoYXZlIHlvdSBsZWZ0IHlldD8iLCAi4pa277iPIiwgIuuqhyDsi5zsl5Ag7Lac67Cc7ZW07JqUPyIsICJXaGF0IHRpbWUgZG8gd2UgZGVwYXJ0PyJdLAogIFsi64+E7LCpIiwgImRvLWNoYWsiLCAiYXJyaXZhbCIsICLqs6cg64+E7LCp7ZW07JqUID0gYXJyaXZpbmcgc29vbiIsICLwn5ONIiwgIuuPhOywqe2VmOuptCDsoITtmZTtlbQg7KO87IS47JqULiIsICJDYWxsIG1lIHdoZW4geW91IGFycml2ZS4iXSwKICBbIuunieywqCIsICJtYWstY2hhIiwgImxhc3QgdHJhaW4gLyBidXMiLCAiTWlzcyBpdCBhbmQgaXQgaXMgdGF4aSB0aW1lIiwgIvCfjJkiLCAi66eJ7LCo6rCAIOuqhyDsi5zsmIjsmpQ/IiwgIldoYXQgdGltZSBpcyB0aGUgbGFzdCB0cmFpbj8iXSwKICBbIu2ZmOyKuSIsICJod2FuLXNldW5nIiwgInRyYW5zZmVyIChub3VuKSIsICJUaGUgd29yZCBvbiBhbGwgdGhlIG9yYW5nZSBzdWJ3YXkgc2lnbnMiLCAi8J+UgCIsICLsl6zquLDshJwg7ZmY7Iq57ZWY7IS47JqULiIsICJUcmFuc2ZlciBoZXJlLiJdLAogIFsi7JqU6riIIiwgInlvLWdldW0iLCAiZmFyZSIsICLtg53si5wg7JqU6riILCDrsoTsiqQg7JqU6riIIOKAlCBhbnkgdHJhbnNwb3J0IGNvc3QiLCAi8J+SsCIsICLsmpTquIjsnbQg7Ja866eI7JiI7JqUPyIsICJIb3cgbXVjaCBpcyB0aGUgZmFyZT8iXSwKICBbIuu5oOultOuLpCIsICJwcGEtcmV1LWRhIiwgImZhc3QiLCAi7KeA7ZWY7LKg7J20IOygnOydvCDruajrnbzsmpQg4oCUIHVzdWFsbHkgdHJ1ZSEiLCAi4pqhIiwgIuyngO2VmOyyoOydtCDsoJzsnbwg67mo65287JqULiIsICJUaGUgc3Vid2F5IGlzIHRoZSBmYXN0ZXN0LiJdLAogIFsi64qQ66as64ukIiwgIm5ldS1yaS1kYSIsICJzbG93IiwgIuuyhOyKpOuKlCDsooAg64qQ66Ck7JqUIGluIHJ1c2ggaG91ciIsICLwn5CiIiwgIuuyhOyKpOuKlCDsobDquIgg64qQ66Ck7JqULiIsICJUaGUgYnVzIGlzIGEgbGl0dGxlIHNsb3cuIl1dLAogZ3JhbW1hcjpbCiAgWyJO7J2EL+ulvCDtg4DshLjsmpQiLCJ0YWtlIHRoZSBOIiwiR2V0dGluZyB0b2xkIHdoaWNoIGJ1cy90cmFpbiB0byBjYXRjaCIsIu2DgOuLpCA9IHJpZGUuIOydhCBhZnRlciBjb25zb25hbnQsIOulvCBhZnRlciB2b3dlbC4iLCIyNzPrsogg67KE7Iqk66W8IO2DgOyEuOyalC4iLCJUYWtlIGJ1cyBudW1iZXIgMjczLiIsIjLtmLjshKDsnYQg7YOA7IS47JqULiIsIlRha2UgbGluZSAyLiJdLAogIFsifuyXkOyEnCDrgrTrpqzshLjsmpQgLyDqsIjslYTtg4DshLjsmpQiLCJnZXQgb2ZmIC8gdHJhbnNmZXIgYXQgfiIsIlRoZSB0d28gdmVyYnMgdGhhdCBjb21wbGV0ZSBhbnkgcm91dGUiLCLsl5DshJwgbWFya3MgdGhlIHN0YXRpb24gd2hlcmUgdGhlIGFjdGlvbiBoYXBwZW5zLiIsIuqwleuCqOyXreyXkOyEnCDrgrTrpqzshLjsmpQuIiwiR2V0IG9mZiBhdCBHYW5nbmFtIFN0YXRpb24uIiwi7Iuc7LKt7Jet7JeQ7IScIDPtmLjshKDsnLzroZwg6rCI7JWE7YOA7IS47JqULiIsIlRyYW5zZmVyIHRvIGxpbmUgMyBhdCBDaXR5IEhhbGwuIl0sCiAgWyJO6rmM7KeAIOyWvOuniOuCmCDqsbjroKTsmpQ/IiwiaG93IGxvbmcgdG8gTj8iLCJQbGFubmluZyB5b3VyIHRpbWUgbGlrZSBhIGxvY2FsIiwi6rmM7KeAID0gdXAgdG8vdW50aWwuIEFuc3dlciBjb21lcyBhcyB+67aEL+yLnOqwhCDqsbjroKTsmpQuIiwi6rO17ZWt6rmM7KeAIOyWvOuniOuCmCDqsbjroKTsmpQ/IiwiSG93IGxvbmcgZG9lcyBpdCB0YWtlIHRvIHRoZSBhaXJwb3J0PyIsIuqxuOyWtOyEnCAxMOu2hCDqsbjroKTsmpQuIiwiSXQgdGFrZXMgMTAgbWludXRlcyBvbiBmb290LiJdXX0sCgp7bjo2LCBrcjoi7Ie87ZWRIiwgZW46IlNob3BwaW5nICYgUHJpY2VzIiwgdmk6IlNob3Agc21hcnQiLCBlbW9qaToi8J+bje+4jyIsIGJvc3M6IvCfpooiLCBib3NzTmFtZToiT3ZlcnByaWNlIEZveCIsCiB3b3JkczpbCiAgWyLslrzrp4giLCJlb2wtbWEiLCJob3cgbXVjaCIsIuydtOqxsCDslrzrp4jsmIjsmpQ/IOKAlCB5b3VyIG1vc3QtdXNlZCBzaG9wcGluZyBzZW50ZW5jZSIsIvCfkrAiLCLsnbTqsbAg7Ja866eI7JiI7JqUPyIsIkhvdyBtdWNoIGlzIHRoaXM/Il0sCiAgWyLruYTsi7jri6QiLCJiaS1zc2EtZGEiLCJleHBlbnNpdmUiLCLrhIjrrLQg67mE7Iu47JqUID0gdG9vIGV4cGVuc2l2ZSAoYSBoYWdnbGluZyBvcGVuZXIpIiwi8J+SuCIsIuyigCDruYTsi7jrhKTsmpQuIiwiVGhhdCBpcyBhIGJpdCBleHBlbnNpdmUuIl0sCiAgWyLsi7jri6QiLCJzc2EtZGEiLCJjaGVhcCIsIuyLuOqzoCDsoovslYTsmpQgPSBjaGVhcCBhbmQgZ29vZCDigJQgdGhlIGRyZWFtIiwi8J+Pt++4jyIsIuydtOqyjCDrjZQg7Iu47JqULiIsIlRoaXMgb25lIGlzIGNoZWFwZXIuIl0sCiAgWyLquY7slYQg7KO87IS47JqUIiwia2tha2stYSBqdS1zZS15byIsInBsZWFzZSBnaXZlIGEgZGlzY291bnQiLCJXb3JrcyBhdCBtYXJrZXRzOyBub3QgYXQgZGVwYXJ0bWVudCBzdG9yZXMiLCLinILvuI8iLCLsobDquIjrp4wg6rmO7JWEIOyjvOyEuOyalC4iLCJKdXN0IGEgc21hbGwgZGlzY291bnQsIHBsZWFzZS4iXSwKICBbIuyeheyWtCDrs7Tri6QiLCJpYi1lbyBiby1kYSIsInRvIHRyeSBvbiIsIuyeheyWtCDrtJDrj4Qg64+87JqUPyA9IG1heSBJIHRyeSBpdCBvbj8iLCLwn5GVIiwi7J206rGwIOyeheyWtCDrtJDrj4Qg64+87JqUPyIsIk1heSBJIHRyeSB0aGlzIG9uPyJdLAogIFsi7IKs7J207KaIIiwic2EtaS1qZXUiLCJzaXplIiwi642UIO2BsC/snpHsnYAg7IKs7J207KaIID0gYmlnZ2VyL3NtYWxsZXIgc2l6ZSIsIvCfk48iLCLrjZQg7YGwIOyCrOydtOymiCDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgYSBiaWdnZXIgc2l6ZT8iXSwKICBbIuyDieq5lCIsInNhZWsta2thbCIsImNvbG9yIiwi64uk66W4IOyDieq5lCA9IG90aGVyIGNvbG9ycyIsIvCfjqgiLCLri6Trpbgg7IOJ6rmU64+EIOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSBvdGhlciBjb2xvcnM/Il0sCiAgWyLsnbTqsbAiLCJpLWdlbyIsInRoaXMgb25lIiwi7J206rGwL+q3uOqxsC/soIDqsbAgPSB0aGlzL3RoYXQvdGhhdCBvdmVyIHRoZXJlIiwi8J+RiSIsIuydtOqxsCDso7zshLjsmpQuIiwiSSB3aWxsIHRha2UgdGhpcyBvbmUuIl0sCiAgWyLtlZjrgpgg642UIiwiaGEtbmEgZGVvIiwib25lIG1vcmUiLCJCdXkgdHdvLCBoYWdnbGUgaGFyZGVyIiwi4p6VIiwi7ZWY64KYIOuNlCDso7zshLjsmpQuIiwiT25lIG1vcmUsIHBsZWFzZS4iXSwKICBbIuu0ie2IrCIsImJvbmctdHUiLCJiYWciLCJQbGFzdGljIGJhZ3MgdXN1YWxseSBjb3N0IGV4dHJhIOKAlCBicmluZyB5b3VyIG93biIsIvCfm43vuI8iLCLrtIntiKwg7ZWE7JqUIOyXhuyWtOyalC4iLCJJIGRvIG5vdCBuZWVkIGEgYmFnLiJdLAogIFsi7ZmY67aIIiwiaHdhbi1idWwiLCJyZWZ1bmQiLCLtmZjrtogg64+87JqUPyA9IGNhbiBJIGdldCBhIHJlZnVuZD8gS2VlcCB0aGUgcmVjZWlwdCIsIvCfkrEiLCLsnbTqsbAg7ZmY67aIIOuPvOyalD8iLCJDYW4gSSBnZXQgYSByZWZ1bmQgb24gdGhpcz8iXSwKICBbIuyEoOusvCIsInNlb24tbXVsIiwiZ2lmdCIsIuyEoOusvCDtj6zsnqUgPSBnaWZ0IHdyYXBwaW5nIChvZnRlbiBmcmVlISkiLCLwn46BIiwi7ISg66y8IO2PrOyepSDrj7zsmpQ/IiwiQ2FuIHlvdSBnaWZ0LXdyYXAgaXQ/Il0sCiAgWyLqsIDqsowiLCAiZ2EtZ2UiLCAic2hvcCAvIHN0b3JlIiwgIlRoZSBldmVyeWRheSB3b3JkIGZvciBhbnkgc21hbGwgc3RvcmUiLCAi8J+PrCIsICLsnbQg6rCA6rKMIOygleunkCDsoovslYTsmpQuIiwgIlRoaXMgc2hvcCBpcyByZWFsbHkgbmljZS4iXSwKICBbIuyLnOyepSIsICJzaS1qYW5nIiwgIm1hcmtldCIsICJUcmFkaXRpb25hbCBtYXJrZXRzID0gYmVzdCBwcmljZXMgKyBiZXN0IHN0cmVldCBmb29kIiwgIvCfj64iLCAi7Iuc7J6l7JeQ7IScIOqzvOydvOydhCDsgqzsmpQuIiwgIkkgYnV5IGZydWl0IGF0IHRoZSBtYXJrZXQuIl0sCiAgWyLrsLHtmZTsoJAiLCAiYmFlay1od2EtamVvbSIsICJkZXBhcnRtZW50IHN0b3JlIiwgIkZhbmN5LCBmaXhlZCBwcmljZXMg4oCUIG5vIGhhZ2dsaW5nIGhlcmUhIiwgIvCfj6IiLCAi67Cx7ZmU7KCQ7J2AIOyigCDruYTsi7jsmpQuIiwgIkRlcGFydG1lbnQgc3RvcmVzIGFyZSBhIGJpdCBleHBlbnNpdmUuIl0sCiAgWyLsmLciLCAib3QiLCAiY2xvdGhlcyIsICLsmLcg6rCA6rKMID0gY2xvdGhpbmcgc3RvcmUiLCAi8J+RlSIsICLsmLfsnYQg7IKs65+sIOyZlOyWtOyalC4iLCAiSSBjYW1lIHRvIGJ1eSBjbG90aGVzLiJdLAogIFsi7Iug67CcIiwgInNpbi1iYWwiLCAic2hvZXMiLCAiVGFrZSB0aGVtIG9mZiBpbmRvb3JzIOKAlCBhbHdheXMhIiwgIvCfkZ8iLCAi7J20IOyLoOuwnCDsmIjsgZjrhKTsmpQuIiwgIlRoZXNlIHNob2VzIGFyZSBwcmV0dHkuIl0sCiAgWyLqsIDrsKkiLCAiZ2EtYmFuZyIsICJiYWciLCAiSGFuZGJhZ3MsIGJhY2twYWNrcyDigJQgYWxsIOqwgOuwqSIsICLwn5GcIiwgIuydtCDqsIDrsKkg7Ja866eI7JiI7JqUPyIsICJIb3cgbXVjaCBpcyB0aGlzIGJhZz8iXSwKICBbIuuqqOyekCIsICJtby1qYSIsICJoYXQgLyBjYXAiLCAiU3VuIHByb3RlY3Rpb24gKyBzdHlsZSIsICLwn6eiIiwgIuuqqOyekOulvCDsjagg67O07IS47JqULiIsICJUcnkgb24gdGhlIGhhdC4iXSwKICBbIuuwlOyngCIsICJiYS1qaSIsICJwYW50cyIsICLssq3rsJTsp4AgPSBqZWFucyAobGl0ZXJhbGx5ICdibHVlIHBhbnRzJykiLCAi8J+RliIsICLrsJTsp4DqsIAg7KKAIOq4uOyWtOyalC4iLCAiVGhlIHBhbnRzIGFyZSBhIGJpdCBsb25nLiJdLAogIFsi7YGs64ukIiwgImtldS1kYSIsICJiaWciLCAi7Luk7JqUID0gaXQgaXMgYmlnIiwgIvCfkJgiLCAi7J20IOyYt+ydgCDrhIjrrLQg7Luk7JqULiIsICJUaGVzZSBjbG90aGVzIGFyZSB0b28gYmlnLiJdLAogIFsi7J6R64ukIiwgImphay1kYSIsICJzbWFsbCIsICLsnpHslYTsmpQgPSBpdCBpcyBzbWFsbCDigJQgdGhlIGZpdHRpbmctcm9vbSBwYWlyIiwgIvCfkK0iLCAi7Iug67Cc7J20IOyhsOq4iCDsnpHslYTsmpQuIiwgIlRoZSBzaG9lcyBhcmUgYSBsaXR0bGUgc21hbGwuIl0sCiAgWyLshLjsnbwiLCAic2UtaWwiLCAic2FsZSIsICLshLjsnbwg7KSRID0gb24gc2FsZSwgdGhlIG1hZ2ljIHdvcmRzIiwgIvCfj7fvuI8iLCAi7KeA6riIIOyEuOydvCDspJHsnbTsl5DsmpQuIiwgIkl0IGlzIG9uIHNhbGUgbm93LiJdLAogIFsi7JiB7IiY7KadIiwgInllb25nLXN1LWpldW5nIiwgInJlY2VpcHQiLCAiTmVlZGVkIGZvciByZWZ1bmRzIOKAlCBrZWVwIGl0ISIsICLwn6e+IiwgIuyYgeyImOymnSDso7zshLjsmpQuIiwgIlRoZSByZWNlaXB0LCBwbGVhc2UuIl1dLAogZ3JhbW1hcjpbCiAgWyJ+7JWEL+yWtCDrtJDrj4Qg64+87JqUPyIsIm1heSBJIHRyeSB+PyIsIlRyeWluZyBjbG90aGVzLCBzYW1wbGVzLCB0ZXN0ZXJzIiwi67O064ukIGFkZHMgJ3RyeSc7IOuPhCDrj7zsmpQgYXNrcyBwZXJtaXNzaW9uLiIsIuyeheyWtCDrtJDrj4Qg64+87JqUPyIsIk1heSBJIHRyeSBpdCBvbj8iLCLrqLnslrQg67SQ64+EIOuPvOyalD8iLCJNYXkgSSB0YXN0ZSBpdD8iXSwKICBbIuuEiOustCB+7ZW07JqUIiwidG9vIH4gLyBzbyB+IiwiUmVhY3RpbmcgdG8gcHJpY2VzIGFuZCBxdWFsaXR5Iiwi64SI66y0IGFtcGxpZmllcyBhbnl0aGluZzog64SI66y0IOyYiOu7kOyalCwg64SI66y0IOu5hOyLuOyalC4iLCLrhIjrrLQg67mE7Iu47JqUISIsIkl0IGlzIHRvbyBleHBlbnNpdmUhIiwi7J206rGwIOuEiOustCDsmIjru5DsmpQuIiwiVGhpcyBpcyBzbyBwcmV0dHkuIl0sCiAgWyJOIOuPvOyalD8iLCJkb2VzIE4gd29yayAvIGlzIE4gcG9zc2libGU/IiwiUXVpY2sgeWVzL25vIGNoZWNrczogcmVmdW5kPyBjYXJkPyBkZWxpdmVyeT8iLCJUaGUgc2hvcnRlc3QgdXNlZnVsIHF1ZXN0aW9uIGluIHNob3BwaW5nLiIsIuy5tOuTnCDrj7zsmpQ/IiwiRG8geW91IHRha2UgY2FyZHM/Iiwi6rWQ7ZmYIOuPvOyalD8iLCJDYW4gSSBleGNoYW5nZSBpdD8iXV19LAoKe246Nywga3I6IuyKpOuqsO2GoO2BrCIsIGVuOiJTbWFsbCBUYWxrIiwgdmk6Ik1ha2UgYSBuZXcgZnJpZW5kIiwgZW1vamk6IvCfkqwiLCBib3NzOiLwn6aBIiwgYm9zc05hbWU6IlNtYWxsLVRhbGsgU3BoaW54IiwKIHdvcmRzOlsKICBbIuy3qOuvuCIsImNod2ktbWkiLCJob2JieSIsIuy3qOuvuOqwgCDrrZDsmIjsmpQ/IOKAlCB0aGUgZnJpZW5kbGllc3QgaWNlYnJlYWtlciIsIvCfjqgiLCLst6jrr7jqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgeW91ciBob2JieT8iXSwKICBbIuuCoOyUqCIsIm5hbC1zc2kiLCJ3ZWF0aGVyIiwiVGhlIHVuaXZlcnNhbCBzbWFsbC10YWxrIHN0YXJ0ZXIsIGluIEtvcmVhIHRvbyIsIuKYgO+4jyIsIuyYpOuKmCDrgqDslKgg7KeE7KecIOyii+uEpOyalCEiLCJUaGUgd2VhdGhlciBpcyByZWFsbHkgbmljZSB0b2RheSEiXSwKICBbIuyjvOunkCIsImp1LW1hbCIsIndlZWtlbmQiLCLso7zrp5Dsl5Ag662QIO2VtOyalD8gPSBpbnN0YW50IGNvbnZlcnNhdGlvbiIsIvCfk4YiLCLso7zrp5Dsl5Ag67O07Ya1IOutkCDtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgdXN1YWxseSBkbyBvbiB3ZWVrZW5kcz8iXSwKICBbIuyii+yVhO2VmOuLpCIsImpvLWEtaGEtZGEiLCJ0byBsaWtlIiwiTuydhC/rpbwg7KKL7JWE7ZW07JqUIOKAlCBzaGFyZSB3aGF0IHlvdSBsb3ZlIiwi4p2k77iPIiwi7KCA64qUIO2VnOq1rSDsnYzsi53snYQg7KKL7JWE7ZW07JqULiIsIkkgbGlrZSBLb3JlYW4gZm9vZC4iXSwKICBbIuyatOuPmSIsInVuLWRvbmciLCJleGVyY2lzZSAvIHNwb3J0cyIsIkFsc28gbWVhbnMgd29ya2luZyBvdXQgYXQgdGhlIGd5bSIsIvCfj4MiLCLsmrTrj5nsnYQg7J6Q7KO8IO2VtOyalD8iLCJEbyB5b3UgZXhlcmNpc2Ugb2Z0ZW4/Il0sCiAgWyLsnYzslYUiLCJldW0tYWsiLCJtdXNpYyIsIuustOyKqCDsnYzslYUgPSB3aGF0IGtpbmQgb2YgbXVzaWMiLCLwn461Iiwi66y07IqoIOydjOyVheydhCDrk6TslrTsmpQ/IiwiV2hhdCBtdXNpYyBkbyB5b3UgbGlzdGVuIHRvPyJdLAogIFsi7Jes7ZaJIiwieWVvLWhhZW5nIiwidHJhdmVsIiwiRXZlcnlvbmUgaGFzIGEgdHJhdmVsIHN0b3J5IOKAlCBhc2sgZm9yIGl0Iiwi4pyI77iPIiwi7Jes7ZaJ7J2EIOygleunkCDsoovslYTtlbTsmpQuIiwiSSByZWFsbHkgbG92ZSB0cmF2ZWxpbmcuIl0sCiAgWyLsmpTsppgiLCJ5by1qZXVtIiwidGhlc2UgZGF5cyIsIuyalOymmCDslrTrlYzsmpQ/ID0gaG93IGFyZSB0aGluZ3MgbGF0ZWx5PyIsIvCflZAiLCLsmpTsppgg7Ja065a76rKMIOyngOuCtOyalD8iLCJIb3cgaGF2ZSB5b3UgYmVlbiB0aGVzZSBkYXlzPyJdLAogIFsi7J6s66+47J6I64ukIiwiamFlLW1pLWl0LWRhIiwiZnVuIC8gaW50ZXJlc3RpbmciLCLsnqzrr7jsnojslrTsmpQhID0gaXQncyBmdW4hIOyerOuvuOyXhuyWtOyalCA9IGJvcmluZyIsIvCfmIQiLCLqt7jqsbAg7KeE7KecIOyerOuvuOyeiOyWtOyalCEiLCJUaGF0IGlzIHJlYWxseSBmdW4hIl0sCiAgWyLqsJnsnbQiLCJnYS1jaGkiLCJ0b2dldGhlciIsIuqwmeydtCDqsIDsmpQhID0gbGV0J3MgZ28gdG9nZXRoZXIgKHByb25vdW5jZWQg6rCA7LmYKSIsIvCfpJ0iLCLri6TsnYzsl5Ag6rCZ7J20IOqwgOyalCEiLCJMZXQgdXMgZ28gdG9nZXRoZXIgbmV4dCB0aW1lISJdLAogIFsi7KeE7KecIiwiamluLWpqYSIsInJlYWxseSIsIuynhOynnOyalD8gPSByZWFsbHk/ISDigJQgeW91ciAjMSBsaXN0ZW5pbmcgcmVhY3Rpb24iLCLwn5iyIiwi7KeE7Kec7JqUPyDrjIDri6jtlbTsmpQhIiwiUmVhbGx5PyBUaGF0IGlzIGFtYXppbmchIl0sCiAgWyLrjIDrsJUiLCJkYWUtYmFrIiwiYXdlc29tZSAvIG5vIHdheSIsIkNhc3VhbCBzbGFuZyBmb3IgYW55dGhpbmcgaW1wcmVzc2l2ZSIsIvCfpKkiLCLrjIDrsJUhIOy2le2VmO2VtOyalCEiLCJObyB3YXkhIENvbmdyYXR1bGF0aW9ucyEiXSwKICBbIuyYge2ZlCIsICJ5ZW9uZy1od2EiLCAibW92aWUiLCAi7JiB7ZmUIOuzvOuemOyalD8gPSB0aGUgY2xhc3NpYyBoYW5nb3V0IGludml0ZSIsICLwn46sIiwgIuyjvOunkOyXkCDsmIHtmZQg67Sk7Ja07JqULiIsICJJIHdhdGNoZWQgYSBtb3ZpZSBvbiB0aGUgd2Vla2VuZC4iXSwKICBbIuuTnOudvOuniCIsICJkZXUtcmEtbWEiLCAiZHJhbWEgLyBUViBzZXJpZXMiLCAiSy1kcmFtYSB0YWxrID0gaW5zdGFudCBmcmllbmRzaGlwIiwgIvCfk7oiLCAi7JqU7KaYIOustOyKqCDrk5zrnbzrp4gg67SQ7JqUPyIsICJXaGF0IGRyYW1hIGFyZSB5b3Ugd2F0Y2hpbmcgbGF0ZWx5PyJdLAogIFsi64W4656YIiwgIm5vLXJhZSIsICJzb25nIiwgIuuFuOuemOuwqSA9IGthcmFva2Ugcm9vbSwgS29yZWEncyBwbGF5Z3JvdW5kIiwgIvCfjqQiLCAi7J20IOuFuOuemCDsp4Tsp5wg7KKL7JWE7JqULiIsICJUaGlzIHNvbmcgaXMgcmVhbGx5IGdvb2QuIl0sCiAgWyLstpXqtawiLCAiY2h1ay1ndSIsICJzb2NjZXIiLCAiVGhlIHNhZmVzdCBzcG9ydHMgc21hbGwtdGFsayBpbiBLb3JlYSIsICLimr0iLCAi7LaV6rWsIOuztOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqULiIsICJJIGxpa2Ugd2F0Y2hpbmcgc29jY2VyLiJdLAogIFsi65Ox7IKwIiwgImRldW5nLXNhbiIsICJoaWtpbmciLCAiS29yZWEncyBuYXRpb25hbCB3ZWVrZW5kIGhvYmJ5IiwgIuKbsO+4jyIsICLso7zrp5Drp4jri6Qg65Ox7IKw7J2EIOqwgOyalC4iLCAiSSBnbyBoaWtpbmcgZXZlcnkgd2Vla2VuZC4iXSwKICBbIuuPheyEnCIsICJkb2stc2VvIiwgInJlYWRpbmciLCAi7LGFIOydveq4sCB3b3JrcyB0b28g4oCUIOuPheyEnCBzb3VuZHMgY2xhc3NpZXIiLCAi8J+TmiIsICLsoJwg7Leo66+464qUIOuPheyEnOyYiOyalC4iLCAiTXkgaG9iYnkgaXMgcmVhZGluZy4iXSwKICBbIuyalOumrCIsICJ5by1yaSIsICJjb29raW5nIiwgIuyalOumrO2VmOuLpCA9IHRvIGNvb2siLCAi8J+NsyIsICLsmpTrpqzrpbwg67Cw7Jqw6rOgIOyeiOyWtOyalC4iLCAiSSBhbSBsZWFybmluZyB0byBjb29rLiJdLAogIFsi6rKM7J6EIiwgImdlLWltIiwgImdhbWUiLCAiUEPrsKkgPSBLb3JlYSdzIGdhbWluZyBjYWbDqSBjdWx0dXJlIiwgIvCfjq4iLCAi6rKM7J6E7J2EIOyekOyjvCDtlbTsmpQ/IiwgIkRvIHlvdSBnYW1lIG9mdGVuPyJdLAogIFsi6re466a8IiwgImdldS1yaW0iLCAiZHJhd2luZyAvIHBhaW50aW5nIiwgIuq3uOumvOydhCDqt7jrpqzri6QgPSB0byBkcmF3IiwgIvCfjqgiLCAi6re466a8IOq3uOumrOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqULiIsICJJIGxpa2UgZHJhd2luZy4iXSwKICBbIuyekOyjvCIsICJqYS1qdSIsICJvZnRlbiIsICLslrzrp4jrgpgg7J6Q7KO84oCmPyA9IGhvdyBvZnRlbuKApj8iLCAi8J+UgSIsICLslrzrp4jrgpgg7J6Q7KO8IOyatOuPme2VtOyalD8iLCAiSG93IG9mdGVuIGRvIHlvdSBleGVyY2lzZT8iXSwKICBbIuqwgOuBlCIsICJnYS1ra2V1bSIsICJzb21ldGltZXMiLCAiVGhlIGhvbmVzdCBhbnN3ZXIgdG8gbW9zdCDsnpDso7wgcXVlc3Rpb25zIiwgIvCfjJciLCAi6rCA64GUIOuTseyCsOydhCDqsIDsmpQuIiwgIkkgc29tZXRpbWVzIGdvIGhpa2luZy4iXSwKICBbIuyCsOyxhSIsICJzYW4tY2hhZWsiLCAiYSB3YWxrIC8gc3Ryb2xsIiwgIu2VnOqwlSDsgrDssYUgPSB0aGUgY2xhc3NpYyBTZW91bCBldmVuaW5nIiwgIvCfmrYiLCAi7KCA64WB7JeQIOyCsOyxheydhCDtlbTsmpQuIiwgIkkgdGFrZSBhIHdhbGsgaW4gdGhlIGV2ZW5pbmcuIl1dLAogZ3JhbW1hcjpbCiAgWyJ+64qUIOqyg+ydhCDsoovslYTtlbTsmpQiLCJJIGxpa2UgfmluZyIsIlRhbGtpbmcgYWJvdXQgaG9iYmllcyBuYXR1cmFsbHkiLCJWZXJiICsg64qUIOqygyB0dXJucyBhbiBhY3Rpb24gaW50byBhIHRoaW5nIHlvdSBjYW4gbGlrZS4iLCLsoIDripQg7JqU66as7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQuIiwiSSBsaWtlIGNvb2tpbmcuIiwi7JiB7ZmUIOuztOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqUPyIsIkRvIHlvdSBsaWtlIHdhdGNoaW5nIG1vdmllcz8iXSwKICBbIuqwmeydtCB+KOycvCnjhLnrnpjsmpQ/Iiwic2hhbGwgd2UgfiB0b2dldGhlcj8iLCJUdXJuaW5nIHNtYWxsIHRhbGsgaW50byBhY3R1YWwgcGxhbnMiLCJGcmllbmRseSBpbnZpdGF0aW9uOyDrnpjsmpQga2VlcHMgaXQgY2FzdWFsIGFuZCBsaWdodC4iLCLqsJnsnbQg7Luk7ZS8IOuniOyLpOuemOyalD8iLCJTaGFsbCB3ZSBnZXQgY29mZmVlIHRvZ2V0aGVyPyIsIuyjvOunkOyXkCDqsJnsnbQg65Ox7IKwIOqwiOuemOyalD8iLCJXYW50IHRvIGdvIGhpa2luZyB0b2dldGhlciB0aGlzIHdlZWtlbmQ/Il0sCiAgWyJO7J2AL+uKlCDslrTrlYzsmpQ/IiwiaG93IGFib3V0IE4/IiwiQm91bmNpbmcgdGhlIHF1ZXN0aW9uIGJhY2sg4oCUIGNvbnZlcnNhdGlvbnMgYXJlIHR3by13YXkiLCJBbHNvIGdyZWF0IGZvciBzdWdnZXN0aW9uczog6riI7JqU7J287J2AIOyWtOuVjOyalD8iLCLsoIDripQg7J6YIOyngOuCtOyalC4g66+87IiYIOyUqOuKlCDslrTrlYzsmpQ/IiwiSSBhbSBkb2luZyB3ZWxsLiBIb3cgYWJvdXQgeW91LCBNaW5zdT8iLCLsnbQg7Lm07Y6Y64qUIOyWtOuVjOyalD8iLCJIb3cgYWJvdXQgdGhpcyBjYWbDqT8iXV19LAoKe246OCwga3I6IuyghO2ZlOyZgCDslb3sho0iLCBlbjoiQ2FsbHMgJiBQbGFucyIsIHZpOiJOZXZlciBtaXNzIGEgbWVldHVwIiwgZW1vamk6IvCfk7EiLCBib3NzOiLwn5G5IiwgYm9zc05hbWU6Ik5vLVNob3cgR3JlbWxpbiIsCiB3b3JkczpbCiAgWyLsl6zrs7TshLjsmpQiLCJ5ZW8tYm8tc2UteW8iLCJoZWxsbyAob24gdGhlIHBob25lKSIsIk9ubHkgZm9yIGFuc3dlcmluZyB0aGUgcGhvbmUg4oCUIG5ldmVyIGluIHBlcnNvbiIsIuKYju+4jyIsIuyXrOuztOyEuOyalCwg64iE6rWs7IS47JqUPyIsIkhlbGxvLCB3aG8gaXMgdGhpcz8iXSwKICBbIuyghO2ZlO2VmOuLpCIsImplb24taHdhLWhhLWRhIiwidG8gY2FsbCIsIuydtOuUsOqwgCDsoITtmZTtlaDqsozsmpQgPSBJIHdpbGwgY2FsbCB5b3UgbGF0ZXIiLCLwn5OeIiwi64K07J28IOyghO2ZlO2VoOqyjOyalC4iLCJJIHdpbGwgY2FsbCB5b3UgdG9tb3Jyb3cuIl0sCiAgWyLrrLjsnpAiLCJtdW4tamEiLCJ0ZXh0IG1lc3NhZ2UiLCLrrLjsnpAg67O064K86rKM7JqUID0gSSB3aWxsIHRleHQgeW91Iiwi8J+TqSIsIuusuOyekOuhnCDrs7TrgrQg7KO87IS47JqULiIsIlBsZWFzZSBzZW5kIGl0IGJ5IHRleHQuIl0sCiAgWyLslb3sho0iLCJ5YWstc29rIiwicGxhbnMgLyBhcHBvaW50bWVudCIsIuyVveyGjSDsnojslrTsmpQgPSBJIGhhdmUgcGxhbnMgKHRoZSBwb2xpdGUgZXhjdXNlISkiLCLwn5OFIiwi7Jik64qYIOyggOuFgeyXkCDslb3sho3snbQg7J6I7Ja07JqULiIsIkkgaGF2ZSBwbGFucyB0aGlzIGV2ZW5pbmcuIl0sCiAgWyLsi5zqsIQg7J6I7Ja07JqUPyIsInNpLWdhbiBpc3MtZW8teW8iLCJkbyB5b3UgaGF2ZSB0aW1lPyIsIlRoZSBnZW50bGUgd2F5IHRvIHN0YXJ0IGFuIGludml0YXRpb24iLCLij7AiLCLrgrTsnbwg7Iuc6rCEIOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSB0aW1lIHRvbW9ycm93PyJdLAogIFsi64qm64ukIiwibmV1dC1kYSIsInRvIGJlIGxhdGUiLCLsobDquIgg64qm7Ja07JqUID0gcnVubmluZyBhIGxpdHRsZSBsYXRlIOKAlCBzZW5kIGl0IGVhcmx5ISIsIuKPsyIsIuuvuOyViO2VtOyalCwgMTDrtoQg64qm7Ja07JqULiIsIlNvcnJ5LCBJIGFtIDEwIG1pbnV0ZXMgbGF0ZS4iXSwKICBbIuuPhOywqe2VmOuLpCIsImRvLWNoYS1rYS1kYSIsInRvIGFycml2ZSIsIuqxsOydmCDrj4TssKntlojslrTsmpQgPSBhbG1vc3QgdGhlcmUgKHdlIGFsbCBzZW5kIHRoaXMpIiwi8J+TjSIsIuyngOq4iCDqsbDsnZgg64+E7LCp7ZaI7Ja07JqULiIsIkkgaGF2ZSBhbG1vc3QgYXJyaXZlZC4iXSwKICBbIuq4sOuLpOumrOuLpCIsImdpLWRhLXJpLWRhIiwidG8gd2FpdCIsIuyynOyynO2eiCDsmKTshLjsmpQsIOq4sOuLpOumtOqyjOyalCA9IHRha2UgeW91ciB0aW1lLCBJIHdpbGwgd2FpdCIsIvCfp40iLCLsubTtjpjsl5DshJwg6riw64uk66a06rKM7JqULiIsIkkgd2lsbCB3YWl0IGF0IHRoZSBjYWbDqS4iXSwKICBbIuuwlOq+uOuLpCIsImJhLWtrdS1kYSIsInRvIGNoYW5nZSIsIuyLnOqwhOydhCDrsJTqvrjri6QgPSBjaGFuZ2UgdGhlIHRpbWUiLCLwn5SEIiwi7JW97IaNIOyLnOqwhOydhCDrsJTqv4Ag7IiYIOyeiOyWtOyalD8iLCJDYW4gd2UgY2hhbmdlIHRoZSBtZWV0aW5nIHRpbWU/Il0sCiAgWyLst6jshoztlZjri6QiLCJjaHdpLXNvLWhhLWRhIiwidG8gY2FuY2VsIiwiQmV0dGVyIHRvIHJlc2NoZWR1bGUgdGhhbiBnaG9zdCEiLCLwn5qrIiwi66+47JWI7ZWY7KeA66eMIOy3qOyGjO2VtOyVvCDtlbTsmpQuIiwiU29ycnksIGJ1dCBJIGhhdmUgdG8gY2FuY2VsLiJdLAogIFsi6rSc7LCu7JWE7JqUIiwiZ3dhZW4tY2hhbi1hLXlvIiwiaXQgaXMgb2theSIsIkFsc286IG5vIHRoYW5rcywgSSdtIGZpbmUsIG5vIHByb2JsZW0g4oCUIHN1cGVyIHZlcnNhdGlsZSIsIvCfkYwiLCLqtJzssK7slYTsmpQsIOyynOyynO2eiCDsmKTshLjsmpQuIiwiSXQgaXMgZmluZSwgdGFrZSB5b3VyIHRpbWUuIl0sCiAgWyLsnbTrlLDqsIAiLCJpLXR0YS1nYSIsImxhdGVyICh0b2RheSkiLCLsnbTrlLDqsIAg67SQ7JqUID0gc2VlIHlvdSBpbiBhIGJpdCIsIvCflJwiLCLsnbTrlLDqsIAg7Jew65297ZWg6rKM7JqULiIsIkkgd2lsbCBjb250YWN0IHlvdSBsYXRlci4iXSwKICBbIuyLnOqwhCIsICJzaS1nYW4iLCAidGltZSIsICLsi5zqsIQg7J6I7Ja07JqUPyA9IHRoZSBpbnZpdGF0aW9uIG9wZW5lciIsICLij7AiLCAi64K07J28IOyLnOqwhCDsnojslrTsmpQ/IiwgIkRvIHlvdSBoYXZlIHRpbWUgdG9tb3Jyb3c/Il0sCiAgWyLsmKTsoIQiLCAiby1qZW9uIiwgIm1vcm5pbmcgKGEubS4pIiwgIuyYpOyghCAxMOyLnCA9IDEwIGEubS4iLCAi8J+MhSIsICLsmKTsoITsl5Ag7Iuc6rCEIOyeiOyWtOyalD8iLCAiQXJlIHlvdSBmcmVlIGluIHRoZSBtb3JuaW5nPyJdLAogIFsi7Jik7ZuEIiwgIm8taHUiLCAiYWZ0ZXJub29uIChwLm0uKSIsICLsmKTtm4QgM+yLnCA9IDMgcC5tLiIsICLwn4yHIiwgIuyYpO2bhCAz7Iuc7JeQIOunjOuCmOyalC4iLCAiTGV0IHVzIG1lZXQgYXQgMyBwLm0uIl0sCiAgWyLrtoQiLCAiYnVuIiwgIm1pbnV0ZSIsICIxMOu2hCDriqbslrTsmpQgPSAxMCBtaW51dGVzIGxhdGUiLCAi4o+x77iPIiwgIjXrtoTrp4wg6riw64uk66CkIOyjvOyEuOyalC4iLCAiUGxlYXNlIHdhaXQganVzdCBmaXZlIG1pbnV0ZXMuIl0sCiAgWyLrgrTsnbwiLCAibmFlLWlsIiwgInRvbW9ycm93IiwgIuuCtOydvCDrtJDsmpQgPSBzZWUgeW91IHRvbW9ycm93IiwgIvCfk4UiLCAi64K07J28IOutkCDtlbTsmpQ/IiwgIldoYXQgYXJlIHlvdSBkb2luZyB0b21vcnJvdz8iXSwKICBbIuuqqOugiCIsICJtby1yZSIsICJkYXkgYWZ0ZXIgdG9tb3Jyb3ciLCAiQSB3b3JkIEVuZ2xpc2ggd2lzaGVzIGl0IGhhZCIsICLwn5OGIiwgIuuqqOugiOuKlCDslrTrlYzsmpQ/IiwgIkhvdyBhYm91dCB0aGUgZGF5IGFmdGVyIHRvbW9ycm93PyJdLAogIFsi64uk7J2MIOyjvCIsICJkYS1ldW0ganUiLCAibmV4dCB3ZWVrIiwgIuuLpOydjCDso7zsl5Ag66eM64KY7JqUID0gc2VlIHlvdSBuZXh0IHdlZWsiLCAi8J+Xk++4jyIsICLri6TsnYwg7KO87JeQIOyLnOqwhCDsnojslrTsmpQ/IiwgIkRvIHlvdSBoYXZlIHRpbWUgbmV4dCB3ZWVrPyJdLAogIFsi7J287LCNIiwgImlsLWpqaWsiLCAiZWFybHkiLCAi7J287LCNIOqwiOqyjOyalCA9IEkgd2lsbCBjb21lIGVhcmx5IiwgIvCfjIQiLCAi7KGw6riIIOydvOywjSDrj4TssKntlojslrTsmpQuIiwgIkkgYXJyaXZlZCBhIGxpdHRsZSBlYXJseS4iXSwKICBbIuuvuOumrCIsICJtaS1yaSIsICJpbiBhZHZhbmNlIiwgIuuvuOumrCDsmIjslb3tlZjshLjsmpQgPSBib29rIGFoZWFkIiwgIvCfk50iLCAi66+466asIOyXsOudve2VtCDso7zshLjsmpQuIiwgIlBsZWFzZSBjb250YWN0IG1lIGluIGFkdmFuY2UuIl0sCiAgWyLsl7Drnb3tlZjri6QiLCAieWVvbC1sYS1rYS1kYSIsICJ0byBjb250YWN0IiwgIuyXsOudve2VoOqyjOyalCA9IEkgd2lsbCBiZSBpbiB0b3VjaCIsICLwn5OyIiwgIuuPhOywqe2VmOuptCDsl7Drnb3tlaDqsozsmpQuIiwgIkkgd2lsbCBjb250YWN0IHlvdSB3aGVuIEkgYXJyaXZlLiJdLAogIFsi67Cb64ukIiwgImJhdC1kYSIsICJ0byByZWNlaXZlIiwgIuyghO2ZlOulvCDrsJvri6QgPSB0byBhbnN3ZXIgdGhlIHBob25lIiwgIvCfk6UiLCAi66y47J6Q66W8IOuwm+yVmOyWtOyalD8iLCAiRGlkIHlvdSBnZXQgbXkgdGV4dD8iXSwKICBbIuuBiuuLpCIsICJra2V1bi10YSIsICJ0byBoYW5nIHVwIiwgIuydtOunjCDrgYrsnYTqsozsmpQgPSBwb2xpdGUgY2FsbCBjbG9zZXIiLCAi8J+TtCIsICLrqLzsoIAg64GK7J2E6rKM7JqUISIsICJJIHdpbGwgaGFuZyB1cCBmaXJzdCEiXV0sCiBncmFtbWFyOlsKICBbIn4o7Jy8KeOEueqyjOyalCIsIkkgd2lsbCAocHJvbWlzZSkiLCJDb25maXJtaW5nIHBsYW5zIGFuZCBwcm9taXNlcyIsIlNwZWFrZXIncyBmcmllbmRseSBjb21taXRtZW50OiDqsIjqsozsmpQsIOq4sOuLpOumtOqyjOyalCwg7KCE7ZmU7ZWg6rKM7JqULiIsIjbsi5zquYzsp4Ag6rCI6rKM7JqULiIsIkkgd2lsbCBiZSB0aGVyZSBieSA2LiIsIuuPhOywqe2VmOuptCDrrLjsnpDtlaDqsozsmpQuIiwiSSB3aWxsIHRleHQgeW91IHdoZW4gSSBhcnJpdmUuIl0sCiAgWyJ+6rOgIOyeiOyWtOyalCIsIkkgYW0gfmluZyByaWdodCBub3ciLCJMaXZlIHVwZGF0ZXMgd2hlbiBtZWV0aW5nIHVwIiwiUHJvZ3Jlc3NpdmU6IHdoYXQgaXMgaGFwcGVuaW5nIGF0IHRoaXMgbW9tZW50LiIsIuyngOq4iCDqsIDqs6Ag7J6I7Ja07JqUISIsIkkgYW0gb24gbXkgd2F5IG5vdyEiLCLsubTtjpjsl5DshJwg6riw64uk66as6rOgIOyeiOyWtOyalC4iLCJJIGFtIHdhaXRpbmcgYXQgdGhlIGNhZsOpLiJdLAogIFsifuq4sOuhnCDtlbTsmpQiLCJsZXQgdXMgZGVjaWRlIHRvIH4iLCJMb2NraW5nIGluIHRoZSBwbGFuIiwiRml4ZXMgdGhlIGRlY2lzaW9uOiB0aW1lLCBwbGFjZSwgYWN0aXZpdHkuIiwi7Yag7JqU7J287JeQIOunjOuCmOq4sOuhnCDtlbTsmpQuIiwiTGV0IHVzIG1lZXQgb24gU2F0dXJkYXkuIiwiN+yLnOyXkCDrs7TquLDroZwg7ZW07JqULiIsIkxldCB1cyBwbGFuIHRvIG1lZXQgYXQgNy4iXV19LAoKe246OSwga3I6IuqwkOygleqzvCDrpqzslaHshZgiLCBlbjoiUmVhY3Rpb25zICYgRmVlbGluZ3MiLCB2aToiU291bmQgaHVtYW4sIG5vdCB0ZXh0Ym9vayIsIGVtb2ppOiLwn46tIiwgYm9zczoi4piB77iPIiwgYm9zc05hbWU6Ikdsb29tIENsb3VkIiwKIHdvcmRzOlsKICBbIuq4sOu2hCIsImdpLWJ1biIsIm1vb2QgLyBmZWVsaW5nIiwi6riw67aE7J20IOyii+yVhOyalC/rgpjruaDsmpQgPSBnb29kL2JhZCBtb29kIiwi8J+ZgiIsIuyYpOuKmCDquLDrtoTsnbQg7KCV66eQIOyii+yVhOyalC4iLCJJIGFtIGluIGEgcmVhbGx5IGdvb2QgbW9vZCB0b2RheS4iXSwKICBbIu2Wieuzte2VmOuLpCIsImhhZW5nLWJvLWthLWRhIiwidG8gYmUgaGFwcHkiLCJUaGUgYmlnIHdvcmQg4oCUIGZvciByZWFsIGhhcHBpbmVzcyIsIvCfmIoiLCLsmpTsppgg7KCV66eQIO2Wieuzte2VtOyalC4iLCJJIGFtIHJlYWxseSBoYXBweSB0aGVzZSBkYXlzLiJdLAogIFsi7ZS86rOk7ZWY64ukIiwicGktZ29uLWhhLWRhIiwidG8gYmUgdGlyZWQiLCJLb3JlYSdzIG1vc3QtdXNlZCBmZWVsaW5nIHdvcmQsIGhvbmVzdGx5Iiwi8J+lsSIsIuyYpOuKmCDrhIjrrLQg7ZS86rOk7ZW07JqULiIsIkkgYW0gc28gdGlyZWQgdG9kYXkuIl0sCiAgWyLrsLDqs6DtlITri6QiLCJiYWUtZ28tcGV1LWRhIiwidG8gYmUgaHVuZ3J5Iiwi67Cw6rOg7YyM7JqUISDigJQgbGVhZHMgbmF0dXJhbGx5IHRvIOutkCDrqLnsnYTquYzsmpQ/Iiwi8J+NmiIsIuyVhCwg67Cw6rOg7YyM7JqULiDrsKUg66i57Jy865+sIOqwgOyalCEiLCJBaCwgSSBhbSBodW5ncnkuIExldCB1cyBnbyBlYXQhIl0sCiAgWyLsi6zsi6ztlZjri6QiLCJzaW0tc2ltLWhhLWRhIiwidG8gYmUgYm9yZWQiLCLsi6zsi6ztlbTsmpQg4oaSIHBlcmZlY3QgZXhjdXNlIHRvIGludml0ZSBzb21lb25lIG91dCIsIvCfmJAiLCLso7zrp5Dsl5Ag7Ius7Ius7ZaI7Ja07JqULiIsIkkgd2FzIGJvcmVkIG9uIHRoZSB3ZWVrZW5kLiJdLAogIFsi6rGx7KCV7ZWY64ukIiwiZ2Vvay1qZW9uZy1oYS1kYSIsInRvIHdvcnJ5Iiwi6rGx7KCV7ZWY7KeAIOuniOyEuOyalCA9IGRvbid0IHdvcnJ5IOKAlCBpbnN0YW50IGNvbWZvcnQiLCLwn5ifIiwi64SI66y0IOqxseygle2VmOyngCDrp4jshLjsmpQuIiwiRG8gbm90IHdvcnJ5IHRvbyBtdWNoLiJdLAogIFsi7ZmU7J207YyFIiwiaHdhLWktdGluZyIsInlvdSBjYW4gZG8gaXQhIiwiS29yZWEncyBmYXZvcml0ZSBjaGVlciDigJQgdXNlIGl0IGdlbmVyb3VzbHkiLCLwn5KqIiwi7Iuc7ZeYIOyemCDrtJDsmpQhIO2ZlOydtO2MhSEiLCJHb29kIGx1Y2sgb24gdGhlIGV4YW0hIEZpZ2h0aW5nISJdLAogIFsi7LaV7ZWY7ZW07JqUIiwiY2h1ay1hLWhhZS15byIsImNvbmdyYXR1bGF0aW9ucyIsIkZvciBiaXJ0aGRheXMsIGpvYnMsIHdpbnMg4oCUIGFkZCDsoJXrp5AgZm9yIGVtcGhhc2lzIiwi8J+OiSIsIu2VqeqyqSDstpXtlZjtlbTsmpQhIiwiQ29uZ3JhdHVsYXRpb25zIG9uIHBhc3NpbmchIl0sCiAgWyLsnpjtlojslrTsmpQiLCJqYWwtaGFlc3MtZW8teW8iLCJ3ZWxsIGRvbmUiLCJQcmFpc2UgdGhhdCB3b3JrcyBmb3IgZXZlcnlvbmUiLCLwn5GPIiwi7JmALCDsoJXrp5Ag7J6Y7ZaI7Ja07JqUISIsIldvdywgcmVhbGx5IHdlbGwgZG9uZSEiXSwKICBbIuyVhOyJveuLpCIsImEtc3dpcC1kYSIsInRvIGJlIGEgcGl0eSIsIuyVhOyJrOybjOyalCA9IHdoYXQgYSBzaGFtZSAvIEkgd2lzaCBpdCB3b3JrZWQgb3V0Iiwi8J+YlCIsIuuquyDqsIDshJwg64SI66y0IOyVhOyJrOybjOyalC4iLCJJdCBpcyBzdWNoIGEgcGl0eSBJIGNhbm5vdCBnby4iXSwKICBbIu2emOuTpOuLpCIsImhpbS1kZXVsLWRhIiwidG8gYmUgaGFyZCAvIHRvdWdoIiwi7Z6Y65Ok7Ja07JqUID0gSSdtIGhhdmluZyBhIGhhcmQgdGltZSAocGh5c2ljYWwgb3IgZW1vdGlvbmFsKSIsIvCfmK7igI3wn5KoIiwi7JqU7KaYIOydvOydtCDsooAg7Z6Y65Ok7Ja07JqULiIsIldvcmsgaGFzIGJlZW4gYSBiaXQgdG91Z2ggbGF0ZWx5LiJdLAogIFsi6rSc7LCu7JWE7JqUPyIsImd3YWVuLWNoYW4tYS15byIsImFyZSB5b3Ugb2theT8iLCJDaGVja2luZyBvbiBzb21lb25lIOKAlCB0aGUgY2FyaW5nIHF1ZXN0aW9uIiwi8J+klyIsIuustOyKqCDsnbwg7J6I7Ja07JqUPyDqtJzssK7slYTsmpQ/IiwiSXMgc29tZXRoaW5nIHdyb25nPyBBcmUgeW91IG9rYXk/Il0sCiAgWyLsiqztlITri6QiLCAic2V1bC1wZXUtZGEiLCAic2FkIiwgIuyKrO2NvOyalCDigJQgZHJhbWEgZW5kaW5ncywgZ29vZGJ5ZXMiLCAi8J+YoiIsICLsmIHtmZTqsIAg64SI66y0IOyKrO2OkOyWtOyalC4iLCAiVGhlIG1vdmllIHdhcyBzbyBzYWQuIl0sCiAgWyLquLDsgZjri6QiLCAiZ2ktcHBldS1kYSIsICJnbGFkIC8gam95ZnVsIiwgIu2Vqeqyqe2VtOyEnCDsoJXrp5Ag6riw67uQ7JqUID0gc28gZ2xhZCBJIHBhc3NlZCIsICLwn5iKIiwgIuygleunkCDquLDru5DsmpQhIiwgIkkgYW0gc28gZ2xhZCEiXSwKICBbIuustOyEreuLpCIsICJtdS1zZW9wLWRhIiwgInNjYXJ5IC8gc2NhcmVkIiwgIuustOyEnOybjOyalCA9IEkgYW0gc2NhcmVkIC8gaXQgaXMgc2NhcnkiLCAi8J+YsSIsICLqs7Xtj6wg7JiB7ZmU64qUIOustOyEnOybjOyalC4iLCAiSG9ycm9yIG1vdmllcyBhcmUgc2NhcnkuIl0sCiAgWyLrhoDrnbzri6QiLCAibm9sLWxhLWRhIiwgInRvIGJlIHN1cnByaXNlZCIsICLquZzsp50g64aA656Q7Ja07JqUID0gSSB3YXMgc3RhcnRsZWQhIiwgIvCfmLIiLCAi6rmc7KedIOuGgOuekOyWtOyalCEiLCAiWW91IHN0YXJ0bGVkIG1lISJdLAogIFsi7Iug64KY64ukIiwgInNpbi1uYS1kYSIsICJ0byBiZSBleGNpdGVkIiwgIuyLoOuCmOyalCEgPSB0aGlzIGlzIHNvIGZ1biEiLCAi8J+lsyIsICLsl6ztlokg6rCA7IScIOygleunkCDsi6DrgpjsmpQhIiwgIkkgYW0gc28gZXhjaXRlZCB0byB0cmF2ZWwhIl0sCiAgWyLrtoDrn73ri6QiLCAiYnUtcmVvcC1kYSIsICJlbnZpb3VzIChuaWNlbHkpIiwgIuu2gOufrOybjOyalCEgPSBJIGFtIGplYWxvdXMhIChhIGNvbXBsaW1lbnQgaGVyZSkiLCAi8J+kqSIsICLsmYAsIOu2gOufrOybjOyalCEiLCAiV293LCBJIGFtIGplYWxvdXMhIl0sCiAgWyLqt4Dsl73ri6QiLCAiZ3dpLXllb3AtZGEiLCAiY3V0ZSIsICLqsJXslYTsp4DqsIAg6reA7Jes7JuM7JqUIOKAlCBwdXBwaWVzLCBiYWJpZXMsIGtleWNoYWlucyIsICLwn5C2IiwgIuyVhOq4sOqwgCDsoJXrp5Ag6reA7Jes7JuM7JqULiIsICJUaGUgYmFieSBpcyBzbyBjdXRlLiJdLAogIFsi66mL7J6I64ukIiwgIm1lb3MtaXQtZGEiLCAiY29vbCAvIGF3ZXNvbWUiLCAiUGVvcGxlLCBvdXRmaXRzLCB2aWV3cyDigJQgYWxsIGNhbiBiZSDrqYvsnojslrTsmpQiLCAi8J+YjiIsICLsmKTripgg7KCV66eQIOupi+yeiOyWtOyalCEiLCAiWW91IGxvb2sgcmVhbGx5IGNvb2wgdG9kYXkhIl0sCiAgWyLsm4Pri6QiLCAidXQtZGEiLCAidG8gbGF1Z2giLCAi66eO7J20IOybg+yXiOyWtOyalCA9IEkgbGF1Z2hlZCBhIGxvdCIsICLwn5iEIiwgIuuEiOustCDrp47snbQg7JuD7JeI7Ja07JqULiIsICJJIGxhdWdoZWQgc28gbXVjaC4iXSwKICBbIuyauOuLpCIsICJ1bC1kYSIsICJ0byBjcnkiLCAi7Jq47KeAIOuniOyEuOyalCA9IGRvIG5vdCBjcnkiLCAi8J+YrSIsICLsmIHtmZQg67O06rOgIOyauOyXiOyWtOyalC4iLCAiSSBjcmllZCB3YXRjaGluZyB0aGUgbW92aWUuIl0sCiAgWyLsgqzrnpHtlZjri6QiLCAic2EtcmFuZy1oYS1kYSIsICJ0byBsb3ZlIiwgIuyCrOueke2VtOyalCDigJQgeW91IGtub3cgdGhpcyBvbmUgZnJvbSBkcmFtYXMiLCAi4p2k77iPIiwgIuqwgOyhseydhCDsgqzrnpHtlbTsmpQuIiwgIkkgbG92ZSBteSBmYW1pbHkuIl0sCiAgWyLquLDrtoTsnbQg7KKL64ukIiwgImdpLWJ1bi1pIGpvLXRhIiwgInRvIGZlZWwgZ3JlYXQiLCAi7Jik64qYIOq4sOu2hOydtCDsoovslYTsmpQgPSBmZWVsaW5nIGdvb2QgdG9kYXkiLCAi8J+MiCIsICLrgqDslKjqsIAg7KKL7JWE7IScIOq4sOu2hOydtCDsoovslYTsmpQuIiwgIlRoZSBuaWNlIHdlYXRoZXIgcHV0cyBtZSBpbiBhIGdvb2QgbW9vZC4iXV0sCiBncmFtbWFyOlsKICBbIn7sp4Ag66eI7IS47JqUIiwicGxlYXNlIGRvIG5vdCB+IiwiQ29tZm9ydGluZyBhbmQgZ2VudGxlIHdhcm5pbmdzIiwi6rGx7KCV7ZWY7KeAIOuniOyEuOyalCwg64qm7KeAIOuniOyEuOyalCDigJQgdmVyYiArIOyngCDrp4jshLjsmpQuIiwi6rGx7KCV7ZWY7KeAIOuniOyEuOyalC4g64ukIOyemCDrkKAg6rGw7JiI7JqULiIsIkRvIG5vdCB3b3JyeS4gRXZlcnl0aGluZyB3aWxsIGJlIGZpbmUuIiwi7Y+s6riw7ZWY7KeAIOuniOyEuOyalCEiLCJEbyBub3QgZ2l2ZSB1cCEiXSwKICBbIn7slYQv7Ja0IOuztOyXrOyalCIsInlvdSBsb29rIH4iLCJOb3RpY2luZyBob3cgc29tZW9uZSBzZWVtcyIsIkFkamVjdGl2ZSArIOuztOyXrOyalDog7ZS86rOk7ZW0IOuztOyXrOyalCA9IHlvdSBsb29rIHRpcmVkLiIsIuyYpOuKmCDtlLzqs6TtlbQg67O07Jes7JqULiIsIllvdSBsb29rIHRpcmVkIHRvZGF5LiIsIuq4sOu2hOydtCDsoovslYQg67O07Jes7JqUISIsIllvdSBsb29rIGhhcHB5ISJdLAogIFsi64SI66y0IH7slYQv7Ja07IScIiwiYmVjYXVzZSAoaXQgaXMpIHNvIH4iLCJFeHBsYWluaW5nIHlvdXIgZmVlbGluZ3MiLCJSZWFzb24gKyBmZWVsaW5nOiB0b28gdGlyZWQg4oaSIGdvaW5nIGhvbWUgZWFybHkuIiwi64SI66y0IO2UvOqzpO2VtOyEnCDsnbzssI0g7J6YIOqxsOyYiOyalC4iLCJJIGFtIHNvIHRpcmVkIHRoYXQgSSB3aWxsIHNsZWVwIGVhcmx5LiIsIuyYge2ZlOqwgCDrhIjrrLQg7Iqs7Y287IScIOyauOyXiOyWtOyalC4iLCJUaGUgbW92aWUgd2FzIHNvIHNhZCB0aGF0IEkgY3JpZWQuIl1dfSwKCntuOjEwLCBrcjoi7JWE7ZSMIOuVjCIsIGVuOiJGZWVsaW5nIFNpY2siLCB2aToiR2V0IGhlbHAgZmFzdCIsIGVtb2ppOiLwn6SSIiwgYm9zczoi8J+moCIsIGJvc3NOYW1lOiJTbmlmZmxlIFNsaW1lIiwKIHdvcmRzOlsKICBbIuyVhO2UhOuLpCIsImEtcGV1LWRhIiwidG8gaHVydCAvIGJlIHNpY2siLCJCb2R5IHBhcnQgKyDsnbQv6rCAIOyVhO2MjOyalCBjb3ZlcnMgYWxtb3N0IGV2ZXJ5dGhpbmciLCLwn6SVIiwi66i466as6rCAIOyVhO2MjOyalC4iLCJNeSBoZWFkIGh1cnRzLiJdLAogIFsi66i466asIiwibWVvLXJpIiwiaGVhZCIsIkFsc28gbWVhbnMgaGFpciEiLCLwn6egIiwi7Ja07KCc67aA7YSwIOuouOumrOqwgCDslYTtjIzsmpQuIiwiTXkgaGVhZCBoYXMgaHVydCBzaW5jZSB5ZXN0ZXJkYXkuIl0sCiAgWyLrsLAiLCJiYWUiLCJzdG9tYWNoIiwi67Cw6rCAIOyVhO2MjOyalCDigJQgdGhlIGNsYXNzaWMiLCLwn6uDIiwi67Cw6rCAIOuEiOustCDslYTtjIzsmpQuIiwiTXkgc3RvbWFjaCByZWFsbHkgaHVydHMuIl0sCiAgWyLqsJDquLAiLCJnYW0tZ2kiLCJhIGNvbGQiLCLqsJDquLDsl5Ag6rG466C47Ja07JqUID0gSSBjYXVnaHQgYSBjb2xkIiwi8J+kpyIsIuqwkOq4sOyXkCDqsbjrprAg6rKDIOqwmeyVhOyalC4iLCJJIHRoaW5rIEkgY2F1Z2h0IGEgY29sZC4iXSwKICBbIuyXtCIsInllb2wiLCJmZXZlciIsIuyXtOydtCDrgpjsmpQgPSBJIGhhdmUgYSBmZXZlciIsIvCfjKHvuI8iLCLsl7TsnbQg7KKAIOyeiOyWtOyalC4iLCJJIGhhdmUgYSBzbGlnaHQgZmV2ZXIuIl0sCiAgWyLslb3qta0iLCJ5YWstZ3VrIiwicGhhcm1hY3kiLCJHcmVlbiBjcm9zcyBzaWduIOKAlCBwaGFybWFjaXN0cyBnaXZlIGdyZWF0IGFkdmljZSIsIuKale+4jyIsIuyVveq1reydtCDslrTrlJTsl5Ag7J6I7Ja07JqUPyIsIldoZXJlIGlzIGEgcGhhcm1hY3k/Il0sCiAgWyLslb0iLCJ5YWsiLCJtZWRpY2luZSIsIuqwkOq4sOyVvSA9IGNvbGQgbWVkaWNpbmUsIOuRkO2GteyVvSA9IGhlYWRhY2hlIG1lZGljaW5lIiwi8J+SiiIsIuqwkOq4sOyVvSDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgY29sZCBtZWRpY2luZT8iXSwKICBbIuuzkeybkCIsImJ5ZW9uZy13b24iLCJob3NwaXRhbCAvIGNsaW5pYyIsIktvcmVhbiBjbGluaWNzIGFyZSBmYXN0IGFuZCBhZmZvcmRhYmxlIiwi8J+PpSIsIuuzkeybkOyXkCDqsIAg67O07IS47JqULiIsIllvdSBzaG91bGQgZ28gc2VlIGEgZG9jdG9yLiJdLAogIFsi7ZG5IOyJrOuLpCIsInB1ayBzd2ktZGEiLCJ0byByZXN0IHdlbGwiLCLtkbkgPSBkZWVwbHkvY29tcGxldGVseSDigJQg7ZG5IOyJrOyEuOyalCEiLCLwn5i0Iiwi7Jik64qY7J2AIOynkeyXkOyEnCDtkbkg7Ims7IS47JqULiIsIlJlc3Qgd2VsbCBhdCBob21lIHRvZGF5LiJdLAogIFsi64Kr64ukIiwibmF0LWRhIiwidG8gZ2V0IGJldHRlciIsIuu5qOumrCDrgpjsnLzshLjsmpQhID0gZ2V0IHdlbGwgc29vbiEiLCLinKgiLCLruajrpqwg64KY7Jy87IS47JqUISIsIkdldCB3ZWxsIHNvb24hIl0sCiAgWyLslYzroIjrpbTquLAiLCJhbC1sZS1yZXUtZ2kiLCJhbGxlcmd5IiwiQ3JpdGljYWwgZm9yIGZvb2QgYW5kIG1lZGljaW5lIOKAlCBrbm93IHRoaXMgd29yZCIsIvCfpZwiLCLrlYXsvakg7JWM66CI66W06riw6rCAIOyeiOyWtOyalC4iLCJJIGhhdmUgYSBwZWFudXQgYWxsZXJneS4iXSwKICBbIuuwtOuTnCIsImJhZW4tZGV1IiwiYmFuZC1haWQiLCJLb25nbGlzaCDigJQgc29sZCBhdCBldmVyeSBjb252ZW5pZW5jZSBzdG9yZSIsIvCfqbkiLCLrsLTrk5wg7KKAIOyjvOyEuOyalC4iLCJBIGJhbmQtYWlkLCBwbGVhc2UuIl0sCiAgWyLrqqkiLCAibW9rIiwgInRocm9hdCAvIG5lY2siLCAi66qp7J20IOyVhO2MjOyalCA9IHNvcmUgdGhyb2F0IiwgIvCfl6PvuI8iLCAi66qp7J20IOyVhO2UhOqzoCDquLDsuajtlbTsmpQuIiwgIk15IHRocm9hdCBodXJ0cyBhbmQgSSBjb3VnaC4iXSwKICBbIuuIiCIsICJudW4iLCAiZXllIiwgIkFsc28gbWVhbnMgc25vdyEgQ29udGV4dCBkZWNpZGVzIiwgIvCfkYHvuI8iLCAi64iI7J20IOyigCDslYTtjIzsmpQuIiwgIk15IGV5ZSBodXJ0cyBhIGJpdC4iXSwKICBbIuy9lCIsICJrbyIsICJub3NlIiwgIuy9lOqwgCDrp4ntmJTslrTsmpQgPSBzdHVmZnkgbm9zZSIsICLwn5GDIiwgIuy9lOqwgCDrp4ntmJTslrTsmpQuIiwgIk15IG5vc2UgaXMgc3R1ZmZlZC4iXSwKICBbIuq3gCIsICJnd2kiLCAiZWFyIiwgIuq3gOqwgCDslYTtjIzsmpQgb24gYWlycGxhbmVzIiwgIvCfkYIiLCAi6reA6rCAIOyhsOq4iCDslYTtjIzsmpQuIiwgIk15IGVhciBodXJ0cyBhIGxpdHRsZS4iXSwKICBbIuyGkCIsICJzb24iLCAiaGFuZCIsICLshpDsnYQg7JS77Jy87IS47JqUID0gd2FzaCB5b3VyIGhhbmRzIiwgIuKciyIsICLshpDsnYQg7J6Q7KO8IOyUu+ycvOyEuOyalC4iLCAiV2FzaCB5b3VyIGhhbmRzIG9mdGVuLiJdLAogIFsi67CcIiwgImJhbCIsICJmb290IiwgIuuwnOydtCDslYTtjIzsmpQgYWZ0ZXIgYSBkYXkgb2Ygd2Fsa2luZyIsICLwn6a2IiwgIuunjuydtCDqsbjslrTshJwg67Cc7J20IOyVhO2MjOyalC4iLCAiTXkgZmVldCBodXJ0IGZyb20gd2Fsa2luZyBhIGxvdC4iXSwKICBbIuq4sOy5qCIsICJnaS1jaGltIiwgImNvdWdoIChub3VuKSIsICLquLDsuajsnbQg64KY7JqUID0gSSBoYXZlIGEgY291Z2giLCAi8J+YtyIsICLquLDsuajsnbQg6rOE7IaNIOuCmOyalC4iLCAiSSBrZWVwIGNvdWdoaW5nLiJdLAogIFsi7L2n66y8IiwgImtvbi1tdWwiLCAicnVubnkgbm9zZSIsICLsvafrrLzsnbQg64KY7JqUIOKAlCBjb2xkLXNlYXNvbiByZWd1bGFyIiwgIvCfkqciLCAi7L2n66y87J20IOuCmOqzoCDsl7Trj4Qg7J6I7Ja07JqULiIsICJJIGhhdmUgYSBydW5ueSBub3NlIGFuZCBhIGZldmVyLiJdLAogIFsi7Ja07KeA65+964ukIiwgImVvLWppLXJlb3AtZGEiLCAiZGl6enkiLCAi7Ja07KeA65+s7JuM7JqUID0gSSBmZWVsIGRpenp5IiwgIvCfkqsiLCAi7KGw6riIIOyWtOyngOufrOybjOyalC4iLCAiSSBmZWVsIGEgbGl0dGxlIGRpenp5LiJdLAogIFsi64uk7LmY64ukIiwgImRhLWNoaS1kYSIsICJ0byBnZXQgaHVydCIsICLri6Tss6TslrTsmpQgPSBJIGdvdCBodXJ0IC8gaW5qdXJlZCIsICLwn6SVIiwgIuuEmOyWtOyguOyEnCDri6Tss6TslrTsmpQuIiwgIkkgZmVsbCBhbmQgZ290IGh1cnQuIl0sCiAgWyLso7zsgqwiLCAianUtc2EiLCAiaW5qZWN0aW9uIC8gc2hvdCIsICLso7zsgqzrpbwg66ee64ukID0gdG8gZ2V0IGEgc2hvdCIsICLwn5KJIiwgIuyjvOyCrOulvCDrp57slYTslbwg7ZW07JqUPyIsICJEbyBJIG5lZWQgdG8gZ2V0IGEgc2hvdD8iXSwKICBbIuyVveyCrCIsICJ5YWstc2EiLCAicGhhcm1hY2lzdCIsICJLb3JlYSdzIHBoYXJtYWNpc3RzIGdpdmUgZ3JlYXQgYWR2aWNlIiwgIvCfp5HigI3impXvuI8iLCAi7JW97IKs64uY7J20IOy5nOygiO2VtOyalC4iLCAiVGhlIHBoYXJtYWNpc3QgaXMga2luZC4iXV0sCiBncmFtbWFyOlsKICBbIk7snbQv6rCAIOyVhO2MjOyalCIsIm15IE4gaHVydHMiLCJUZWxsaW5nIGFueW9uZSBleGFjdGx5IHdoZXJlIGl0IGh1cnRzIiwiUG9pbnQgKyBzYXkgaXQuIOuouOumrOqwgCwg67Cw6rCALCDrqqnsnbQg7JWE7YyM7JqULiIsIuuqqeydtCDslYTtjIzsmpQuIiwiTXkgdGhyb2F0IGh1cnRzLiIsIuyXrOq4sOqwgCDslYTtjIzsmpQuIiwiSXQgaHVydHMgaGVyZS4iXSwKICBbIn7rtoDthLAiLCJzaW5jZSB+IiwiRXhwbGFpbmluZyB3aGVuIGl0IHN0YXJ0ZWQiLCJUaW1lICsg67aA7YSwOiDslrTsoJzrtoDthLAsIOyVhOy5qOu2gO2EsC4iLCLslrTsoJzrtoDthLAg7Je07J20IOuCmOyalC4iLCJJIGhhdmUgaGFkIGEgZmV2ZXIgc2luY2UgeWVzdGVyZGF5LiIsIuyVhOy5qOu2gO2EsCDrsLDqsIAg7JWE7YyM7JqULiIsIk15IHN0b21hY2ggaGFzIGh1cnQgc2luY2UgbW9ybmluZy4iXSwKICBbIu2VmOujqOyXkCB+IOuyiCIsIn4gdGltZXMgYSBkYXkiLCJVbmRlcnN0YW5kaW5nIG1lZGljaW5lIGluc3RydWN0aW9ucyIsIu2VmOujqOyXkCDshLgg67KIID0gdGhyZWUgdGltZXMgYSBkYXkuIOyLne2bhCA9IGFmdGVyIG1lYWxzLiIsIu2VmOujqOyXkCDshLgg67KIIOuTnOyEuOyalC4iLCJUYWtlIGl0IHRocmVlIHRpbWVzIGEgZGF5LiIsIu2VmOujqOyXkCDrkZAg67KIIOuoueyWtOyalD8iLCJEbyBJIHRha2UgaXQgdHdpY2UgYSBkYXk/Il1dfSwKCntuOjExLCBrcjoi7Jes7ZaJ6rO8IOyImeyGjCIsIGVuOiJUcmF2ZWwgJiBIb3RlbHMiLCB2aToiV2Vla2VuZCBhZHZlbnR1cmVyIiwgZW1vamk6IvCfp7MiLCBib3NzOiLwn6ajIiwgYm9zc05hbWU6Ikxvc3QtTHVnZ2FnZSBZZXRpIiwKIHdvcmRzOlsKICBbIuyYiOyVve2VmOuLpCIsInllLXlhLWthLWRhIiwidG8gcmVzZXJ2ZSIsIuyYiOyVve2WiOyWtOyalCA9IEkgaGF2ZSBhIHJlc2VydmF0aW9uIChtYWdpYyBjaGVjay1pbiB3b3JkcykiLCLwn5OFIiwi7Jio65287J247Jy866GcIOyYiOyVve2WiOyWtOyalC4iLCJJIHJlc2VydmVkIG9ubGluZS4iXSwKICBbIuyytO2BrOyduCIsImNoZS1rZXUtaW4iLCJjaGVjay1pbiIsIktvbmdsaXNoIOKAlCDssrTtgazsnbjtlaDqsozsmpQgPSBJIHdvdWxkIGxpa2UgdG8gY2hlY2sgaW4iLCLwn5uO77iPIiwi7LK07YGs7J247ZWY6rOgIOyLtuyWtOyalC4iLCJJIHdvdWxkIGxpa2UgdG8gY2hlY2sgaW4uIl0sCiAgWyLrsKkiLCJiYW5nIiwicm9vbSIsIuuwqSDtgqQgPSByb29tIGtleTsg66qHIO2YuCA9IHdoYXQgcm9vbSBudW1iZXIiLCLwn5qqIiwi67Cp7J20IOuqhyDtmLjsmIjsmpQ/IiwiV2hhdCBpcyBteSByb29tIG51bWJlcj8iXSwKICBbIu2VmOuju+uwpCIsImhhLXJ1dC1iYW0iLCJvbmUgbmlnaHQiLCLtlZjro7vrsKTsl5Ag7Ja866eI7JiI7JqUPyA9IGhvdyBtdWNoIHBlciBuaWdodD8iLCLwn4yZIiwi7ZWY66O767Ck7JeQIOyWvOuniOyYiOyalD8iLCJIb3cgbXVjaCBmb3Igb25lIG5pZ2h0PyJdLAogIFsi7JmA7J207YyM7J20Iiwid2EtaS1wYS1pIiwid2lmaSIsIlRoZSByZWFsIGZpcnN0IHF1ZXN0aW9uIGF0IGFueSBob3RlbCIsIvCfk7YiLCLsmYDsnbTtjIzsnbQg67mE67CA67KI7Zi46rCAIOutkOyYiOyalD8iLCJXaGF0IGlzIHRoZSB3aWZpIHBhc3N3b3JkPyJdLAogIFsi67mE67CA67KI7Zi4IiwiYmktbWlsLWJlb24taG8iLCJwYXNzd29yZCIsIuu5hOuwgCA9IHNlY3JldCwg67KI7Zi4ID0gbnVtYmVyIiwi8J+UkCIsIuu5hOuwgOuyiO2YuOulvCDslYzroKQg7KO87IS47JqULiIsIlBsZWFzZSB0ZWxsIG1lIHRoZSBwYXNzd29yZC4iXSwKICBbIuynkCIsImppbSIsImx1Z2dhZ2UiLCLsp5DsnYQg66eh6riw64ukID0gbGVhdmUgbHVnZ2FnZSAoYmVmb3JlIGNoZWNrLWluISkiLCLwn6ezIiwi7KeQ7J2EIOunoeq4uCDsiJgg7J6I7Ja07JqUPyIsIkNhbiBJIGxlYXZlIG15IGx1Z2dhZ2U/Il0sCiAgWyLqsr3suZgiLCJneWVvbmctY2hpIiwic2NlbmVyeSAvIHZpZXciLCLqsr3suZjqsIAg7KKL7J2AIOuwqSA9IHJvb20gd2l0aCBhIHZpZXciLCLwn4+e77iPIiwi7JmALCDqsr3suZjqsIAg7KCV66eQIOyii+uEpOyalCEiLCJXb3csIHRoZSB2aWV3IGlzIGFtYXppbmchIl0sCiAgWyLsgqzsp4QiLCJzYS1qaW4iLCJwaG90byIsIuyCrOynhCDsooAg7LCN7Ja0IOyjvOyEuOyalCA9IHBsZWFzZSB0YWtlIGEgcGhvdG8gb2YgbWUiLCLwn5O4Iiwi7IKs7KeEIOyigCDssI3slrQg7KO87Iuc6rKg7Ja07JqUPyIsIkNvdWxkIHlvdSB0YWtlIGEgcGhvdG8gZm9yIG1lPyJdLAogIFsi7ZGcIiwicHlvIiwidGlja2V0Iiwi6riw7LCo7ZGcLCDsmIHtmZTtkZwsIOyeheyepeq2jCDigJQgYWxsIHRpY2tldHMiLCLwn46rIiwi7J6F7J6lIO2RnCDrkZAg7J6lIOyjvOyEuOyalC4iLCJUd28gZW50cmFuY2UgdGlja2V0cywgcGxlYXNlLiJdLAogIFsi6rSA6rSR7KeAIiwiZ3dhbi1nd2FuZy1qaSIsInRvdXJpc3QgYXR0cmFjdGlvbiIsIuycoOuqhe2VnCDqtIDqtJHsp4AgPSBmYW1vdXMgc2lnaHRzIiwi8J+XvCIsIuycoOuqhe2VnCDqtIDqtJHsp4DqsIAg7Ja065SU7JiI7JqUPyIsIldoZXJlIGFyZSB0aGUgZmFtb3VzIHNpZ2h0cz8iXSwKICBbIuq3vOyymCIsImdldW4tY2hlbyIsIm5lYXJieSIsIuq3vOyymOyXkCB+IOyeiOyWtOyalD8gPSBpcyB0aGVyZSBhIH4gbmVhcmJ5PyIsIvCfk40iLCLqt7zsspjsl5Ag66eb7KeRIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBhIGdvb2QgcmVzdGF1cmFudCBuZWFyYnk/Il0sCiAgWyLsl6zqtowiLCAieWVvLWd3b24iLCAicGFzc3BvcnQiLCAiQ2hlY2sgdGhlIGhvdGVsIHNhZmUgYmVmb3JlIHlvdSBsZWF2ZSEiLCAi8J+bgiIsICLsl6zqtozsnYQg7ZmV7J247ZWY7IS47JqULiIsICJDaGVjayB5b3VyIHBhc3Nwb3J0LiJdLAogIFsi67mE7J6QIiwgImJpLWphIiwgInZpc2EiLCAiQ2hlY2sgYmVmb3JlIHlvdSBmbHkhIiwgIvCfm4MiLCAi67mE7J6Q6rCAIO2VhOyalO2VtOyalD8iLCAiRG8gSSBuZWVkIGEgdmlzYT8iXSwKICBbIu2ZmOyghCIsICJod2FuLWplb24iLCAiY3VycmVuY3kgZXhjaGFuZ2UiLCAi7ZmY7KCE7IaMID0gZXhjaGFuZ2UgYm9vdGgiLCAi8J+SsSIsICLslrTrlJTsl5DshJwg7ZmY7KCE7ZWgIOyImCDsnojslrTsmpQ/IiwgIldoZXJlIGNhbiBJIGV4Y2hhbmdlIG1vbmV5PyJdLAogIFsi6rSA6rSRIiwgImd3YW4tZ3dhbmciLCAic2lnaHRzZWVpbmciLCAi6rSA6rSR6rCdID0gdG91cmlzdCIsICLwn5O4IiwgIuyYpOuKmOydgCDsi5zrgrQg6rSA6rSR7J2EIO2VtOyalC4iLCAiVG9kYXkgd2Ugc2lnaHRzZWUgZG93bnRvd24uIl0sCiAgWyLquLDrhZDtkogiLCAiZ2ktbnllb20tcHVtIiwgInNvdXZlbmlyIiwgIuq4sOuFkO2SiCDqsIDqsowgPSBzb3V2ZW5pciBzaG9wIiwgIvCfjoEiLCAi6riw64WQ7ZKI7J2EIOyCrOqzoCDsi7bslrTsmpQuIiwgIkkgd2FudCB0byBidXkgc291dmVuaXJzLiJdLAogIFsi7ZW067OAIiwgImhhZS1ieWVvbiIsICJiZWFjaCIsICLrsJTri7fqsIAgd29ya3MgdG9vIiwgIvCfj5bvuI8iLCAi7ZW067OA7JeQ7IScIOyImOyYge2WiOyWtOyalC4iLCAiSSBzd2FtIGF0IHRoZSBiZWFjaC4iXSwKICBbIuyCsCIsICJzYW4iLCAibW91bnRhaW4iLCAi7ZWc65287IKwLCDshKTslYXsgrAg4oCUIEtvcmVhIGxvdmVzIGl0cyBtb3VudGFpbnMiLCAi4puw77iPIiwgIuyCsCDqsr3suZjqsIAg7KCV66eQIOupi+yeiOyWtOyalC4iLCAiVGhlIG1vdW50YWluIHNjZW5lcnkgaXMgYW1hemluZy4iXSwKICBbIuyErCIsICJzZW9tIiwgImlzbGFuZCIsICLsoJzso7zrj4TsnZgg64+EIGFsc28gbWVhbnMgaXNsYW5kIiwgIvCfj53vuI8iLCAi7J6R7J2AIOyErOyXkCDqsIAg67O06rOgIOyLtuyWtOyalC4iLCAiSSB3YW50IHRvIHZpc2l0IGEgc21hbGwgaXNsYW5kLiJdLAogIFsi67CV66y86rSAIiwgImJhay1tdWwtZ3dhbiIsICJtdXNldW0iLCAiTWFueSBhcmUgZnJlZSBpbiBTZW91bCIsICLwn4+b77iPIiwgIuuwleusvOq0gOydgCDsm5TsmpTsnbzsl5Ag7Ims7Ja07JqULiIsICJUaGUgbXVzZXVtIGlzIGNsb3NlZCBvbiBNb25kYXlzLiJdLAogIFsi7J287KCVIiwgImlsLWplb25nIiwgInNjaGVkdWxlIC8gaXRpbmVyYXJ5IiwgIuyXrO2WiSDsnbzsoJUgPSB0cmF2ZWwgaXRpbmVyYXJ5IiwgIvCfk4siLCAi64K07J28IOydvOygleydtCDslrTrlrvqsowg64+87JqUPyIsICJXaGF0IGlzIHRvbW9ycm93J3Mgc2NoZWR1bGU/Il0sCiAgWyLst6jshowiLCAiY2h3aS1zbyIsICJjYW5jZWxsYXRpb24iLCAi7Leo7IaMIOyImOyImOujjCA9IGNhbmNlbGxhdGlvbiBmZWUg4oCUIHJlYWQgdGhlIGZpbmUgcHJpbnQiLCAi8J+aqyIsICLsmIjslb3snYQg7Leo7IaM7ZWY6rOgIOyLtuyWtOyalC4iLCAiSSB3b3VsZCBsaWtlIHRvIGNhbmNlbCBteSByZXNlcnZhdGlvbi4iXSwKICBbIu2MgSIsICJ0aXAiLCAidGlwIChncmF0dWl0eSkiLCAiS29yZWEgaGFzIE5PIHRpcHBpbmcgY3VsdHVyZSDigJQga2VlcCB5b3VyIGNoYW5nZSEiLCAi8J+StSIsICLtlZzqta3snYAg7YyB7J20IOyXhuyWtOyalC4iLCAiS29yZWEgaGFzIG5vIHRpcHBpbmcuIl1dLAogZ3JhbW1hcjpbCiAgWyJ+7JWEL+yWtCDso7zshLjsmpQiLCJwbGVhc2UgZG8gfiBmb3IgbWUiLCJSZXF1ZXN0cyBvZiBldmVyeSBraW5kIOKAlCB0aGUgdHJhdmVsZXIncyBiZXN0IHBhdHRlcm4iLCJWZXJiICsg7JWEL+yWtCDso7zshLjsmpQ6IOywjeyWtCDso7zshLjsmpQsIOyVjOugpCDso7zshLjsmpQsIOuPhOyZgOyjvOyEuOyalC4iLCLsgqzsp4Qg7KKAIOywjeyWtCDso7zshLjsmpQuIiwiUGxlYXNlIHRha2UgYSBwaG90byBmb3IgbWUuIiwi7YOd7Iuc66W8IOu2iOufrCDso7zshLjsmpQuIiwiUGxlYXNlIGNhbGwgYSB0YXhpIGZvciBtZS4iXSwKICBbIuq3vOyymOyXkCBOIOyeiOyWtOyalD8iLCJpcyB0aGVyZSBhIE4gbmVhcmJ5PyIsIkZpbmRpbmcgZm9vZCwgQVRNcywgcGhhcm1hY2llcyB3aGVyZXZlciB5b3UgYXJlIiwi6re87LKYID0gdmljaW5pdHkuIExvY2FscyBhbHdheXMga25vdyB0aGUgYmVzdCBhbnN3ZXIuIiwi6re87LKY7JeQIO2OuOydmOygkCDsnojslrTsmpQ/IiwiSXMgdGhlcmUgYSBjb252ZW5pZW5jZSBzdG9yZSBuZWFyYnk/Iiwi6re87LKY7JeQIOyii+ydgCDsi53ri7kg7J6I7Ja07JqUPyIsIklzIHRoZXJlIGEgZ29vZCByZXN0YXVyYW50IG5lYXJieT8iXSwKICBbIuuqhyDsi5zsl5Agfu2VtOyalD8iLCJhdCB3aGF0IHRpbWUgfj8iLCJDaGVjay1vdXQsIGJyZWFrZmFzdCwgb3BlbmluZyBob3VycyIsIuuqhyDsi5wgPSB3aGF0IHRpbWUuIOu2gO2EsC/quYzsp4AgPSBmcm9tL3VudGlsLiIsIuyhsOyLneydgCDrqocg7Iuc7JeQIOyLnOyeke2VtOyalD8iLCJXaGF0IHRpbWUgZG9lcyBicmVha2Zhc3Qgc3RhcnQ/Iiwi7LK07YGs7JWE7JuD7J2AIOuqhyDsi5zquYzsp4DsmIjsmpQ/IiwiVW50aWwgd2hhdCB0aW1lIGlzIGNoZWNrLW91dD8iXV19LAoKe246MTIsIGtyOiLrj4Tsm4Ag7JqU7LKtIiwgZW46IldoZW4gWW91IE5lZWQgSGVscCIsIHZpOiJDb25maWRlbmNlIGFueXdoZXJlIiwgZW1vamk6IvCfhpgiLCBib3NzOiLwn5CZIiwgYm9zc05hbWU6IkNvbmZ1c2lvbiBLcmFrZW4iLAogd29yZHM6WwogIFsi64+E7JmA7KO87IS47JqUIiwiZG8td2EtanUtc2UteW8iLCJwbGVhc2UgaGVscCBtZSIsIlRoZSBzZW50ZW5jZSB0byBrbm93IGJlZm9yZSB5b3UgbmVlZCBpdCIsIvCfhpgiLCLsoIAg7KKAIOuPhOyZgOyjvOyEuOyalCEiLCJQbGVhc2UgaGVscCBtZSEiXSwKICBbIuyeg+yWtOuyhOumrOuLpCIsImlsLWVvLWJlby1yaS1kYSIsInRvIGxvc2UgKHNvbWV0aGluZykiLCLsnoPslrTrsoTroLjslrTsmpQgPSBJIGxvc3QgaXQg4oCUIGhvcGVmdWxseSBuZXZlciBuZWVkZWQiLCLwn5ixIiwi7KeA6rCR7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJJIGxvc3QgbXkgd2FsbGV0LiJdLAogIFsi7KeA6rCRIiwiamktZ2FwIiwid2FsbGV0IiwiS29yZWEgaXMgZmFtb3VzbHkgZ29vZCBhdCByZXR1cm5pbmcgbG9zdCB3YWxsZXRzIiwi8J+RmyIsIuyngOqwkeydhCDrqrsg7LC+6rKg7Ja07JqULiIsIkkgY2Fubm90IGZpbmQgbXkgd2FsbGV0LiJdLAogIFsi7Zy064yA7Y+wIiwiaHl1LWRhZS1wb24iLCJjZWxsIHBob25lIiwiQWxzbyDtlbjrk5ztj7Ag4oCUIGJvdGggd29yayBldmVyeXdoZXJlIiwi8J+TsSIsIu2ctOuMgO2PsOydhCDsnoPslrTrsoTroLjslrTsmpQuIiwiSSBsb3N0IG15IHBob25lLiJdLAogIFsi6rK97LCwIiwiZ3llb25nLWNoYWwiLCJwb2xpY2UiLCLqsr3ssLDshJwgPSBwb2xpY2Ugc3RhdGlvbjsg7KeA6rWs64yAID0gbG9jYWwgcG9saWNlIGJveCIsIvCfka4iLCLqsr3ssLDsl5Ag7Iug6rOg7ZaI7Ja07JqULiIsIkkgcmVwb3J0ZWQgaXQgdG8gdGhlIHBvbGljZS4iXSwKICBbIuyynOyynO2eiCIsImNoZW9uLWNoZW9uLWhpIiwic2xvd2x5Iiwi7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQg4oCUIHNhdmVzIGV2ZXJ5IGNvbnZlcnNhdGlvbiIsIvCfkKIiLCLsspzsspztnogg66eQ7ZW0IOyjvOyEuOyalC4iLCJQbGVhc2Ugc3BlYWsgc2xvd2x5LiJdLAogIFsi64uk7IucIiwiZGEtc2kiLCJhZ2FpbiIsIuuLpOyLnCDtlZzrsoggPSBvbmUgbW9yZSB0aW1lIiwi8J+UgSIsIuuLpOyLnCDtlZzrsogg66eQ7ZW0IOyjvOyEuOyalC4iLCJQbGVhc2Ugc2F5IHRoYXQgb25lIG1vcmUgdGltZS4iXSwKICBbIuuqsOudvOyalCIsIm1vbC1sYS15byIsIkkgZG8gbm90IGtub3ciLCJIb25lc3QgYW5kIHVzZWZ1bCDigJQgbm9ib2R5IG1pbmRzIiwi8J+ktyIsIuyjhOyGoe2VtOyalCwg7J6YIOuqsOudvOyalC4iLCJTb3JyeSwgSSBkbyBub3QgcmVhbGx5IGtub3cuIl0sCiAgWyLslYzslYTsmpQiLCJhbC1hLXlvIiwiSSBrbm93Iiwi7JWM6rKg7Ja07JqUID0gdW5kZXJzdG9vZCAvIGdvdCBpdCIsIvCfkqEiLCLrhKQsIOyVjOqyoOyWtOyalCEiLCJZZXMsIGdvdCBpdCEiXSwKICBbIu2VnOq1reyWtCIsImhhbi1ndWctZW8iLCJLb3JlYW4gKGxhbmd1YWdlKSIsIuyhsOq4iCDtlaAg7IiYIOyeiOyWtOyalCA9IEkgY2FuIHNwZWFrIGEgbGl0dGxlIiwi8J+HsPCfh7ciLCLtlZzqta3slrTrpbwg7KGw6riIIO2VoCDsiJgg7J6I7Ja07JqULiIsIkkgY2FuIHNwZWFrIGEgbGl0dGxlIEtvcmVhbi4iXSwKICBbIuyYgeyWtCIsInllb25nLWVvIiwiRW5nbGlzaCIsIuyYgeyWtCDtlaAg7IiYIOyeiOyWtOyalD8g4oCUIHdvcnRoIGFza2luZyBwb2xpdGVseSIsIvCfjJAiLCLsmIHslrQg7ZWgIOyImCDsnojripQg67aEIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBzb21lb25lIHdobyBzcGVha3MgRW5nbGlzaD8iXSwKICBbIuydtO2VtO2VmOuLpCIsImktaGFlLWhhLWRhIiwidG8gdW5kZXJzdGFuZCIsIuydtO2VtO2WiOyWtOyalCA9IHVuZGVyc3Rvb2Q7IOydtO2VtCDrqrsg7ZaI7Ja07JqUID0gSSBkaWRuJ3QgZ2V0IGl0Iiwi8J+noCIsIuyVhCwg7J207KCcIOydtO2VtO2WiOyWtOyalCEiLCJBaCwgbm93IEkgdW5kZXJzdGFuZCEiXSwKICBbIuusuOygnCIsICJtdW4tamUiLCAicHJvYmxlbSIsICLrrLjsoJzqsIAg7J6I7Ja07JqUID0gdGhlcmUgaXMgYSBwcm9ibGVtIiwgIuKaoO+4jyIsICLrrLjsoJzqsIAg7IOd6rK87Ja07JqULiIsICJBIHByb2JsZW0gY2FtZSB1cC4iXSwKICBbIuqzoOyepSDrgpjri6QiLCAiZ28tamFuZyBuYS1kYSIsICJ0byBicmVhayBkb3duIiwgIuqzoOyepSDrgqzslrTsmpQgPSBpdCBpcyBicm9rZW4gKG1hY2hpbmVzKSIsICLwn5SnIiwgIuyXmOumrOuyoOydtO2EsOqwgCDqs6DsnqUg64Ks7Ja07JqULiIsICJUaGUgZWxldmF0b3IgaXMgYnJva2VuLiJdLAogIFsi7Je07IegIiwgInllb2wtc29lIiwgImtleSIsICLrsKkg7Je07IegID0gcm9vbSBrZXkiLCAi8J+UkSIsICLsl7Tsh6Drpbwg67Cp7JeQIOuRkOqzoCDrgpjsmZTslrTsmpQuIiwgIkkgbGVmdCB0aGUga2V5IGluIHRoZSByb29tLiJdLAogIFsi7LC+64ukIiwgImNoYXQtZGEiLCAidG8gZmluZCAvIGxvb2sgZm9yIiwgIuywvuqzoCDsnojslrTsmpQgPSBJIGFtIGxvb2tpbmcgZm9y4oCmIiwgIvCflI0iLCAi7ZmU7J6l7Iuk7J2EIOywvuqzoCDsnojslrTsmpQuIiwgIkkgYW0gbG9va2luZyBmb3IgdGhlIHJlc3Ryb29tLiJdLAogIFsi7J6K7Ja067KE66as64ukIiwgImlqLWVvLWJlby1yaS1kYSIsICJ0byBmb3JnZXQiLCAi7J6K7Ja067KE66C47Ja07JqUID0gSSBmb3Jnb3QgKOyeg+yWtOuyhOumrOuLpCA9IGxvc3QgYSB0aGluZykiLCAi8J+kryIsICLruYTrsIDrsojtmLjrpbwg7J6K7Ja067KE66C47Ja07JqULiIsICJJIGZvcmdvdCB0aGUgcGFzc3dvcmQuIl0sCiAgWyLrtoDtg4HtlZjri6QiLCAiYnUtdGFrLWEtZGEiLCAidG8gYXNrIGEgZmF2b3IiLCAi67aA7YOB7J20IOyeiOyWtOyalCA9IEkgaGF2ZSBhIGZhdm9yIHRvIGFzayIsICLwn5mPIiwgIuu2gO2DgSDtlZjrgpgg7ZW064+EIOuPvOyalD8iLCAiTWF5IEkgYXNrIHlvdSBhIGZhdm9yPyJdLAogIFsi7JyE7ZeY7ZWY64ukIiwgIndpLWhlb20taGEtZGEiLCAiZGFuZ2Vyb3VzIiwgIuychO2XmO2VtOyalCEgPSBpdCBpcyBkYW5nZXJvdXMhIiwgIuKaoO+4jyIsICLrsKTsl5DripQg7KGw6riIIOychO2XmO2VtOyalC4iLCAiSXQgaXMgYSBiaXQgZGFuZ2Vyb3VzIGF0IG5pZ2h0LiJdLAogIFsi7KGw7Ius7ZWY64ukIiwgImpvLXNpbS1oYS1kYSIsICJ0byBiZSBjYXJlZnVsIiwgIuyhsOyLrO2VmOyEuOyalCA9IGJlIGNhcmVmdWwgLyB0YWtlIGNhcmUiLCAi8J+muiIsICLquLjsnbQg66+464GE65+s7JuM7JqULiDsobDsi6ztlZjshLjsmpQhIiwgIlRoZSByb2FkIGlzIHNsaXBwZXJ5LiBCZSBjYXJlZnVsISJdLAogIFsi64yA7IKs6rSAIiwgImRhZS1zYS1nd2FuIiwgImVtYmFzc3kiLCAiTG9zdCBwYXNzcG9ydD8gVGhpcyBpcyB3aGVyZSB5b3UgZ28iLCAi8J+Pm++4jyIsICLrjIDsgqzqtIDsl5Ag7KCE7ZmU7ZW0IOuztOyEuOyalC4iLCAiVHJ5IGNhbGxpbmcgdGhlIGVtYmFzc3kuIl0sCiAgWyLsi6Dqs6DtlZjri6QiLCAic2luLWdvLWhhLWRhIiwgInRvIHJlcG9ydCIsICLqsr3ssLDsl5Ag7Iug6rOg7ZWY64ukID0gcmVwb3J0IHRvIHRoZSBwb2xpY2UiLCAi8J+aqCIsICLrtoTsi6TrrLzsnYQg7Iug6rOg7ZaI7Ja07JqULiIsICJJIHJlcG9ydGVkIHRoZSBsb3N0IGl0ZW0uIl0sCiAgWyLso7zshowiLCAianUtc28iLCAiYWRkcmVzcyIsICJTaG93IGl0IHdyaXR0ZW4gaW4gS29yZWFuIHRvIHRheGkgZHJpdmVycyIsICLwn4+gIiwgIuyjvOyGjOulvCDsl6zquLDsl5Ag7I2oIOyjvOyEuOyalC4iLCAiUGxlYXNlIHdyaXRlIHRoZSBhZGRyZXNzIGhlcmUuIl0sCiAgWyLsoITtmZTrsojtmLgiLCAiamVvbi1od2EtYmVvbi1obyIsICJwaG9uZSBudW1iZXIiLCAiMDEwLVhYWFgtWFhYWCBmb3JtYXQgaW4gS29yZWEiLCAi8J+TniIsICLsoITtmZTrsojtmLjqsIAg7Ja065a76rKMIOuQmOyEuOyalD8iLCAiV2hhdCBpcyB5b3VyIHBob25lIG51bWJlcj8iXV0sCiBncmFtbWFyOlsKICBbIuyynOyynO2eiC/ri6Tsi5wg66eQ7ZW0IOyjvOyEuOyalCIsInNwZWFrIHNsb3dseSAvIHNheSBpdCBhZ2FpbiIsIlJlc2N1aW5nIGFueSBjb252ZXJzYXRpb24gdGhhdCBtb3ZlcyB0b28gZmFzdCIsIk5vYm9keSBpcyBhbm5veWVkIGJ5IHRoaXMg4oCUIEtvcmVhbnMgYXBwcmVjaWF0ZSB0aGUgZWZmb3J0LiIsIuyjhOyGoe2VmOyngOunjCwg7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQuIiwiU29ycnksIGJ1dCBwbGVhc2Ugc3BlYWsgc2xvd2x5LiIsIuuLpOyLnCDtlZzrsogg66eQ7ZW0IOyjvOyLnOqyoOyWtOyalD8iLCJDb3VsZCB5b3Ugc2F5IHRoYXQgb25jZSBtb3JlPyJdLAogIFsiTuydhC/rpbwg7J6D7Ja067KE66C47Ja07JqUIiwiSSBsb3N0IG15IE4iLCJSZXBvcnRpbmcgbG9zdCBpdGVtcyBhdCBwb2xpY2UgYm94ZXMgYW5kIGNvdW50ZXJzIiwiRm9sbG93IHdpdGgg7Ja065SU7JeQ7IScIOywvuydhCDsiJgg7J6I7Ja07JqUPyA9IHdoZXJlIGNhbiBJIGZpbmQgaXQ/Iiwi7Jes6raM7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJJIGxvc3QgbXkgcGFzc3BvcnQuIiwi7KeA7ZWY7LKg7JeQ7IScIOqwgOuwqeydhCDsnoPslrTrsoTroLjslrTsmpQuIiwiSSBsb3N0IG15IGJhZyBvbiB0aGUgc3Vid2F5LiJdLAogIFsifijsnLwp44S5IOyImCDsnojslrTsmpQv7JeG7Ja07JqUIiwiSSBjYW4gLyBjYW5ub3QgfiIsIlN0YXRpbmcgeW91ciBhYmlsaXRpZXMgaG9uZXN0bHkiLCLtlZzqta3slrTrpbwg7KGw6riIIO2VoCDsiJgg7J6I7Ja07JqUIG9wZW5zIGV2ZXJ5IGRvb3Igd2l0aCBhIHNtaWxlLiIsIu2VnOq1reyWtOulvCDsobDquIgg7ZWgIOyImCDsnojslrTsmpQuIiwiSSBjYW4gc3BlYWsgYSBsaXR0bGUgS29yZWFuLiIsIuyngOq4iOydgCDqsIgg7IiYIOyXhuyWtOyalC4iLCJJIGNhbm5vdCBnbyByaWdodCBub3cuIl1dfQpdOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBTVE9SSUVTIOKAlCBvbmUgaWxsdXN0cmF0ZWQgc2NlbmFyaW8gcGVyIHF1ZXN0IChhbGwgb3JpZ2luYWwpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmNvbnN0IFNUT1JJRVMgPSB7CjE6e3Q6IvCfkYsgVGhlIE5ldyBOZWlnaGJvciIsIHN0ZXBzOlsKIHtiZzoiZGF5IixzYzoi8J+TpvCfj6Dwn5mCIixuYXI6Ik1vdmluZyBkYXkhIFlvdSBhcmUgY2FycnlpbmcgYm94ZXMgaW50byB5b3VyIG5ldyBwbGFjZSB3aGVuIHRoZSBuZWlnaGJvcidzIGRvb3Igb3BlbnMuIix3aG86IvCfmYIg7J207JuDIixrcjoi7JWI64WV7ZWY7IS47JqUISDsg4jroZwg7J207IKsIOyYpOyFqOyWtOyalD8iLGVuOiJIZWxsbyEgRGlkIHlvdSBqdXN0IG1vdmUgaW4/IixjaDpbWyLrhKQsIOyViOuFle2VmOyEuOyalCEg66eM64KY7IScIOuwmOqwkeyKteuLiOuLpC4iLCJZZXMsIGhlbGxvISBHbGFkIHRvIG1lZXQgeW91LiIsMV0sWyLqs4TsgrDshJwg7KO87IS47JqULiIsIlRoZSBiaWxsLCBwbGVhc2UuIiwwXSxbIuyggCDtjrjsnZjsoJAg7JWe7JeQ7IScIOyEuOybjCDso7zshLjsmpQuIiwiUGxlYXNlIHN0b3AgaW4gZnJvbnQgb2YgdGhhdCBjb252ZW5pZW5jZSBzdG9yZS4iLDBdXX0sCiB7Ymc6ImRheSIsc2M6IvCfpJ3wn5mC8J+YiiIsbmFyOiJTaGUgc21pbGVzIHdhcm1seS4gVGltZSB0byBpbnRyb2R1Y2UgeW91cnNlbGYgcHJvcGVybHkuIix3aG86IvCfmYIg7J207JuDIixrcjoi7KCA64qUIOq5gO2VmOuCmOyYiOyalC4g7J2066aE7J20IOutkOyYiOyalD8iLGVuOiJJIGFtIEtpbSBIYW5hLiBXaGF0IGlzIHlvdXIgbmFtZT8iLGNoOltbIuyggOuKlCDthrDsnbTsl5DsmpQuIOyemCDrtoDtg4Hrk5zrpr3ri4jri6QhIiwiSSBhbSBUb20uIFBsZWFzZSB0YWtlIGNhcmUgb2YgbWUhIiwxXSxbIu2ZmOu2iCDrj7zsmpQ/IiwiQ2FuIEkgZ2V0IGEgcmVmdW5kPyIsMF0sWyLri6TsnYwg7Jet7JeQ7IScIOuCtOumrOyEuOyalC4iLCJHZXQgb2ZmIGF0IHRoZSBuZXh0IHN0YXRpb24uIiwwXV19LAoge2JnOiJkYXkiLHNjOiLwn4yN4pyI77iP8J+ZgiIsbmFyOiJTaGUgaXMgY3VyaW91cyBhYm91dCB0aGUgbmV3IGZhY2UgaW4gdGhlIGJ1aWxkaW5nLiIsd2hvOiLwn5mCIO2VmOuCmCIsa3I6IuyWtOuKkCDrgpjrnbzsl5DshJwg7JmU7Ja07JqUPyIsZW46IldoaWNoIGNvdW50cnkgYXJlIHlvdSBmcm9tPyIsY2g6W1si7LqQ64KY64uk7JeQ7IScIOyZlOyWtOyalC4g7LqQ64KY64ukIOyCrOuejOydtOyXkOyalC4iLCJJIGNhbWUgZnJvbSBDYW5hZGEuIEkgYW0gQ2FuYWRpYW4uIiwxXSxbIuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7KO87IS47JqULiIsIkFuIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIiwwXSxbIuyXtOydtCDsooAg7J6I7Ja07JqULiIsIkkgaGF2ZSBhIHNsaWdodCBmZXZlci4iLDBdXX0sCiB7Ymc6ImRhd24iLHNjOiLwn4+g8J+Ri/CfmIoiLG5hcjoiVGhlIGJveGVzIHdpbGwgbm90IGNhcnJ5IHRoZW1zZWx2ZXMuIFdyYXAgaXQgdXAgbGlrZSBhIHBybyDigJQgYW5kIGtlZXAgdGhlIGRvb3Igb3BlbiBmb3IgbmV4dCB0aW1lLiIsd2hvOiLwn5mCIO2VmOuCmCIsa3I6Iu2VhOyalO2VnCDqsbAg7J6I7Jy866m0IOyWuOygnOuToOyngCDrp5DtlbTsmpQhIixlbjoiSWYgeW91IG5lZWQgYW55dGhpbmcsIGp1c3Qgc2F5IHNvIGFueXRpbWUhIixjaDpbWyLqsJDsgqztlanri4jri6QhIOuLpOydjOyXkCDrmJAg66eM64KY7JqUISIsIlRoYW5rIHlvdSEgU2VlIHlvdSBhZ2FpbiBuZXh0IHRpbWUhIiwxXSxbIuyjhOyGoe2VmOyngOunjCwg7J206rGwIOuEiOustCDruYTsi7jsmpQuIiwiU29ycnksIGJ1dCB0aGlzIGlzIHRvbyBleHBlbnNpdmUuIiwwXSxbIuyZgOydtO2MjOydtCDruYTrsIDrsojtmLjqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/IiwwXV19XX0sCjI6e3Q6IuKYlSBSdXNoIEhvdXIgYXQgdGhlIENhZsOpIiwgc3RlcHM6Wwoge2JnOiJpbmRvb3IiLHNjOiLimJXwn6eR4oCN8J+Ns/Cfk4siLG5hcjoiTW9ybmluZyBydXNoLiBUaGUgbGluZSBmaW5hbGx5IG1vdmVzIOKAlCB5b3UgYXJlIHVwLiBUaGUgYmFyaXN0YSBsb29rcyBhdCB5b3UgZXhwZWN0YW50bHkuIix3aG86IvCfp5HigI3wn42zIOuwlOumrOyKpO2DgCIsa3I6IuyWtOyEnCDsmKTshLjsmpQhIOyjvOusuO2VmOyLnOqyoOyWtOyalD8iLGVuOiJXZWxjb21lISBXb3VsZCB5b3UgbGlrZSB0byBvcmRlcj8iLGNoOltbIuuEpCEg7JWE7J207IqkIOyVhOuplOumrOy5tOuFuCDtlZwg7J6UIOyjvOyEuOyalC4iLCJZZXMhIE9uZSBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsMV0sWyLsp4DqsJHsnYQg7J6D7Ja067KE66C47Ja07JqULiIsIkkgbG9zdCBteSB3YWxsZXQuIiwwXSxbIuu5qOumrCDrgpjsnLzshLjsmpQhIiwiR2V0IHdlbGwgc29vbiEiLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfjbDwn5GA8J+YiyIsbmFyOiJUaGUgY2FrZSBkaXNwbGF5IGlzIHJpZ2h0IHRoZXJlLiBHbGlzdGVuaW5nLiBDYWxsaW5nIHlvdXIgbmFtZS4iLHdobzoi8J+nkeKAjfCfjbMg67CU66as7Iqk7YOAIixrcjoi64uk66W4IOqxtCDtlYTsmpQg7JeG7Jy87IS47JqUPyIsZW46IkFueXRoaW5nIGVsc2U/IixjaDpbWyLsuZjspogg7LyA7J207YGs64+EIO2VmOuCmCDso7zshLjsmpQuIiwiT25lIGNoZWVzZWNha2UgdG9vLCBwbGVhc2UuIiwxXSxbIuyZvOyqveycvOuhnCDqsIDshLjsmpQuIiwiR28gdG8gdGhlIGxlZnQuIiwwXSxbIuqyveywsOyXkCDsi6Dqs6DtlojslrTsmpQuIiwiSSByZXBvcnRlZCBpdCB0byB0aGUgcG9saWNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+loeKdk/CfmYIiLG5hcjoiVGhlIGNhZsOpIGlzIHBhY2tlZCDigJQgbm90IGEgc2luZ2xlIGZyZWUgdGFibGUgaW4gc2lnaHQuIix3aG86IvCfp5HigI3wn42zIOuwlOumrOyKpO2DgCIsa3I6IuuTnOyLnOqzoCDqsIDshLjsmpQsIOyVhOuLiOuptCDtj6zsnqXsnbTshLjsmpQ/IixlbjoiRm9yIGhlcmUsIG9yIHRvIGdvPyIsY2g6W1si7J6Q66as6rCAIOyXhuycvOuLiOq5jCDtj6zsnqXtlbQg7KO87IS47JqULiIsIlRoZXJlIGFyZSBubyBzZWF0cywgc28gbWFrZSBpdCB0byBnbywgcGxlYXNlLiIsMV0sWyLrqLjrpqzqsIAg7JWE7YyM7JqULiIsIk15IGhlYWQgaHVydHMuIiwwXSxbIuq1kO2Gtey5tOuTnOulvCDstqnsoITtlbQg7KO87IS47JqULiIsIlBsZWFzZSByZWNoYXJnZSBteSB0cmFuc2l0IGNhcmQuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn5Kz8J+nvuKchSIsbmFyOiJUb3RhbDogMTEsMDAwIHdvbi4gVGltZSB0byBwYXkgYW5kIGNsYWltIHlvdXIgYnJlYWtmYXN0LiIsd2hvOiLwn6eR4oCN8J+NsyDrsJTrpqzsiqTtg4AiLGtyOiLrp4zsspwg7JuQ7J6F64uI64ukLiDslrTrlrvqsowg6rOE7IKw7ZWY7Iuc6rKg7Ja07JqUPyIsZW46IlRoYXQgaXMgMTEsMDAwIHdvbi4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIHBheT8iLGNoOltbIuy5tOuTnOuhnCDtlaDqsozsmpQuIOqwkOyCrO2VqeuLiOuLpCEiLCJCeSBjYXJkLCBwbGVhc2UuIFRoYW5rIHlvdSEiLDFdLFsi7Iug7Zi465Ox7JeQ7IScIOqxtOuEiOyEuOyalC4iLCJDcm9zcyBhdCB0aGUgdHJhZmZpYyBsaWdodC4iLDBdLFsi7ZG5IOyJrOyEuOyalC4iLCJSZXN0IHdlbGwuIiwwXV19XX0sCjM6e3Q6IvCfjZwgVGhlIExlZ2VuZGFyeSBOb29kbGUgSG91c2UiLCBzdGVwczpbCiB7Ymc6ImluZG9vciIsc2M6IvCfjZzwn5mL8J+loiIsbmFyOiJBIHRpbnkgcmVzdGF1cmFudCB3aXRoIGEgbG9uZyBsaW5lIOKAlCBhbHdheXMgYSBnb29kIHNpZ24uIFlvdSBmaW5hbGx5IGdldCBhIHRhYmxlLiIsd2hvOiLwn5mLIOyCrOyepeuLmCIsa3I6IuyWtOyEnCDsmKTshLjsmpQhIOutkCDrk5zrprTquYzsmpQ/IixlbjoiV2VsY29tZSEgV2hhdCBjYW4gSSBnZXQgeW91PyIsY2g6W1si66mU64m0IOyigCDso7zshLjsmpQuIOq3uOumrOqzoCDstpTsspztlbQg7KO87IS47JqUISIsIlRoZSBtZW51LCBwbGVhc2UuIEFuZCBwbGVhc2UgcmVjb21tZW5kIHNvbWV0aGluZyEiLDFdLFsi67Cp7J20IOuqhyDtmLjsmIjsmpQ/IiwiV2hhdCBpcyBteSByb29tIG51bWJlcj8iLDBdLFsi67C065OcIOyigCDso7zshLjsmpQuIiwiQSBiYW5kLWFpZCwgcGxlYXNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+Mtu+4j/CfmLDinZMiLG5hcjoiU2hlIHBvaW50cyBhdCB0aGUgaG91c2Ugc3BlY2lhbC4gSXQgaXMgR0xPV0lORyByZWQuIFlvdSBoYXZl4oCmIHF1ZXN0aW9ucy4iLHdobzoi8J+ZiyDsgqzsnqXri5giLGtyOiLsnbTqsowg7KCc7J28IOunm+yeiOyWtOyalC4g66ek7Jq0IOq1reyImOyYiOyalCEiLGVuOiJUaGlzIGlzIHRoZSBiZXN0IOKAlCBzcGljeSBub29kbGVzISIsY2g6W1si66eO7J20IOunpOybjOyalD8g7JWIIOunteqyjCDtlaAg7IiYIOyeiOyWtOyalD8iLCJJcyBpdCB2ZXJ5IHNwaWN5PyBDYW4geW91IG1ha2UgaXQgbm90IHNwaWN5PyIsMV0sWyLqtZDthrXsubTrk5wg7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIGEgdHJhbnNpdCBjYXJkPyIsMF0sWyLssrTtgazsnbjtlZjqs6Ag7Iu27Ja07JqULiIsIkkgd291bGQgbGlrZSB0byBjaGVjayBpbi4iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfpaLwn5iL8J+NnCIsbmFyOiJUaGUgbm9vZGxlcyBhcnJpdmUg4oCUIG1pbGQgdmVyc2lvbiwgaW5jcmVkaWJsZSBzbWVsbC4gVGhlIHNpZGUgZGlzaGVzIHZhbmlzaCBmYXN0LiIsd2hvOiLwn5mLIOyCrOyepeuLmCIsa3I6Iuunm+ydtCDslrTrlYzsmpQ/IixlbjoiSG93IGlzIHRoZSB0YXN0ZT8iLGNoOltbIuygleunkCDrp5vsnojslrTsmpQhIOuwmOywrCDrjZQg7KO87IS47JqULiIsIlJlYWxseSBkZWxpY2lvdXMhIE1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLDFdLFsi66qHIO2YuOyEoOydhCDtg4Dslbwg7ZW07JqUPyIsIldoaWNoIGxpbmUgc2hvdWxkIEkgdGFrZT8iLDBdLFsi7Ius7Ius7ZW07JqULiIsIkkgYW0gYm9yZWQuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn6e+8J+SsPCfmIoiLG5hcjoiQm93bHMgZW1wdHksIHN0b21hY2ggZnVsbCwgaGVhcnQgaGFwcHkuIFRpbWUgdG8gc2V0dGxlIHVwIGF0IHRoZSBjb3VudGVyLiIsd2hvOiLwn5mLIOyCrOyepeuLmCIsa3I6Iu2MlOyynCDsm5DsnoXri4jri6QhIixlbjoiVGhhdCB3aWxsIGJlIDgsMDAwIHdvbiEiLGNoOltbIuyXrOq4sOyalC4g7J6YIOuoueyXiOyKteuLiOuLpCEg65iQIOyYrOqyjOyalC4iLCJIZXJlIHlvdSBnby4gVGhhbmsgeW91IGZvciB0aGUgbWVhbCEgSSB3aWxsIGNvbWUgYWdhaW4uIiwxXSxbIuyynOyynO2eiCDrp5DtlbQg7KO87IS47JqULiIsIlBsZWFzZSBzcGVhayBzbG93bHkuIiwwXSxbIuuLpOuluCDsg4nquZTrj4Qg7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIG90aGVyIGNvbG9ycz8iLDBdXX1dfSwKNDp7dDoi8J+Xuu+4jyBUaGUgSGlkZGVuIEJvb2tzaG9wIiwgc3RlcHM6Wwoge2JnOiJjaXR5IixzYzoi8J+TsfCfmJXwn4+Z77iPIixuYXI6IkEgZnJpZW5kIHRvbGQgeW91IGFib3V0IGEgbWFnaWNhbCBsaXR0bGUgYm9va3Nob3AuIFlvdXIgbWFwIGFwcCBzYXlzIHlvdSBoYXZlIGFycml2ZWQuIFlvdSBjbGVhcmx5IGhhdmUgbm90LiIsd2hvOiLwn5q2IO2WieyduCIsa3I6IuutkCDssL7snLzshLjsmpQ/IOuPhOyZgOuTnOumtOq5jOyalD8iLGVuOiJMb29raW5nIGZvciBzb21ldGhpbmc/IENhbiBJIGhlbHA/IixjaDpbWyLrhKQhIO2VnOu5myDshJzsoJDsnbQg7Ja065SU7JiI7JqUPyIsIlllcyEgV2hlcmUgaXMgSGFuYml0IEJvb2tzaG9wPyIsMV0sWyLshKTtg5Ug67m8IOyjvOyEuOyalC4iLCJObyBzdWdhciwgcGxlYXNlLiIsMF0sWyLtlZjro7vrsKTsl5Ag7Ja866eI7JiI7JqUPyIsIkhvdyBtdWNoIGZvciBvbmUgbmlnaHQ/IiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+apvCfkYninpUiLG5hcjoiSGUgcG9pbnRzIGRvd24gdGhlIHN0cmVldCB3aXRoIGNvbmZpZGVuY2UuIix3aG86IvCfmrYg7ZaJ7J24Iixrcjoi7J20IOq4uOuhnCDsrYkg6rCA7IS47JqULiDqt7jrpqzqs6Ag7IKs6rGw66as7JeQ7IScIOyZvOyqveycvOuhnCDrj4TshLjsmpQuIixlbjoiR28gc3RyYWlnaHQgYWxvbmcgdGhpcyByb2FkLCB0aGVuIHR1cm4gbGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uLiIsY2g6W1si7IKs6rGw66as7JeQ7IScIOyZvOyqveydtOyalD8g7Jes6riw7IScIOqwgOq5jOybjOyalD8iLCJMZWZ0IGF0IHRoZSBpbnRlcnNlY3Rpb24/IElzIGl0IGNsb3NlIHRvIGhlcmU/IiwxXSxbIuqwkOq4sOyXkCDqsbjrprAg6rKDIOqwmeyVhOyalC4iLCJJIHRoaW5rIEkgY2F1Z2h0IGEgY29sZC4iLDBdLFsi7ISg66y8IO2PrOyepSDrj7zsmpQ/IiwiQ2FuIHlvdSBnaWZ0LXdyYXAgaXQ/IiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+atuKshe+4j/Cfj6IiLG5hcjoiRml2ZSBtaW51dGVzIG9uIGZvb3QsIGhlIHNheXMuIFlvdSBmb2xsb3cgdGhlIHJvYWQsIHR1cm4gbGVmdOKApiBhbmQgc2VlIGEgc21hbGwgYmFuayBvbiB0aGUgY29ybmVyLiIsd2hvOiLwn5q2IO2WieyduCIsa3I6IuydgO2WiSDrs7TsnbTso6A/IOyEnOygkOydgCDqt7gg7J2A7ZaJIOuwlOuhnCDsmIbsl5Ag7J6I7Ja07JqULiIsZW46IlNlZSB0aGUgYmFuaz8gVGhlIGJvb2tzaG9wIGlzIHJpZ2h0IG5leHQgdG8gaXQuIixjaDpbWyLslYQsIOydgO2WiSDsmIbsnbTsmpQhIOqwkOyCrO2VqeuLiOuLpCEiLCJBaCwgbmV4dCB0byB0aGUgYmFuayEgVGhhbmsgeW91ISIsMV0sWyLtlZjrgpgg642UIOyjvOyEuOyalC4iLCJPbmUgbW9yZSwgcGxlYXNlLiIsMF0sWyLrrLjsnpDroZwg67O064K0IOyjvOyEuOyalC4iLCJQbGVhc2Ugc2VuZCBpdCBieSB0ZXh0LiIsMF1dfSwKIHtiZzoiZGF3biIsc2M6IvCfk5rinKjwn5iKIixuYXI6IlRoZXJlIGl0IGlzIOKAlCB3YXJtIGxpZ2h0LCB3b29kZW4gc2hlbHZlcywgYSBzbGVlcGluZyBjYXQgaW4gdGhlIHdpbmRvdy4gV29ydGggZXZlcnkgd3JvbmcgdHVybi4iLHdobzoi8J+TmiDso7zsnbgiLGtyOiLslrTshJwg7Jik7IS47JqULiDsnpgg7LC+7JWE7Jik7IWo64Sk7JqUISIsZW46IldlbGNvbWUuIFlvdSBmb3VuZCB1cyB3ZWxsISIsY2g6W1si64SkLCDquLjsnYQg66y87Ja067SQ7IScIOyZlOyWtOyalC4g7Jes6riwIOygleunkCDsoovrhKTsmpQhIiwiWWVzLCBJIGFza2VkIGZvciBkaXJlY3Rpb25zLiBUaGlzIHBsYWNlIGlzIHdvbmRlcmZ1bCEiLDFdLFsi65Sw66GcIOqzhOyCsO2VtCDso7zshLjsmpQuIiwiU2VwYXJhdGUgYmlsbHMsIHBsZWFzZS4iLDBdLFsi7JW97IaNIOyLnOqwhOydhCDrsJTqv4Ag7IiYIOyeiOyWtOyalD8iLCJDYW4gd2UgY2hhbmdlIHRoZSBtZWV0aW5nIHRpbWU/IiwwXV19XX0sCjU6e3Q6IvCfmocgQ29uY2VydCBBY3Jvc3MgVG93biIsIHN0ZXBzOlsKIHtiZzoiY2l0eSIsc2M6IvCfjqvwn5WW8J+ahyIsbmFyOiJZb3Ugc2NvcmVkIGEgdGlja2V0IHRvIHRvbmlnaHQncyBjb25jZXJ0IOKAlCBidXQgdGhlIHZlbnVlIGlzIGFjcm9zcyB0aGUgY2l0eSBhbmQgZG9vcnMgb3BlbiBpbiBvbmUgaG91ci4gQSBzdGF0aW9uIGF0dGVuZGFudCBpcyBuZWFyYnkuIix3aG86IvCfp5HigI3inIjvuI8g7Jet66y07JuQIixrcjoi64SkLCDrrZgg64+E7JmA65Oc66a06rmM7JqUPyIsZW46IlllcywgaG93IGNhbiBJIGhlbHAgeW91PyIsY2g6W1si7Jis66a87ZS9IOqzteybkOq5jOyngCDslrTrlrvqsowg6rCA7JqUPyDrqocg7Zi47ISg7J207JeQ7JqUPyIsIkhvdyBkbyBJIGdldCB0byBPbHltcGljIFBhcms/IFdoaWNoIGxpbmUgaXMgaXQ/IiwxXSxbIuy5mOymiCDsvIDsnbTtgawg7ZWY64KYIOyjvOyEuOyalC4iLCJPbmUgY2hlZXNlY2FrZSwgcGxlYXNlLiIsMF0sWyLruajrpqwg64KY7Jy87IS47JqUISIsIkdldCB3ZWxsIHNvb24hIiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+UgPCfmonwn5e677iPIixuYXI6IkhlIGNoZWNrcyB0aGUgbWFwIGFuZCB0cmFjZXMgdGhlIHJvdXRlIHdpdGggaGlzIGZpbmdlci4iLHdobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AiLGtyOiIy7Zi47ISg7J2EIO2DgOyEuOyalC4g6re466as6rOgIOyeoOyLpOyXreyXkOyEnCA47Zi47ISg7Jy866GcIOqwiOyVhO2DgOyEuOyalC4iLGVuOiJUYWtlIGxpbmUgMiwgdGhlbiB0cmFuc2ZlciB0byBsaW5lIDggYXQgSmFtc2lsIFN0YXRpb24uIixjaDpbWyLsnqDsi6Tsl63sl5DshJwg6rCI7JWE7YOA7JqUPyDslrzrp4jrgpgg6rG466Ck7JqUPyIsIlRyYW5zZmVyIGF0IEphbXNpbD8gSG93IGxvbmcgZG9lcyBpdCB0YWtlPyIsMV0sWyLsnoXslrQg67SQ64+EIOuPvOyalD8iLCJNYXkgSSB0cnkgaXQgb24/IiwwXSxbIuuVhey9qSDslYzroIjrpbTquLDqsIAg7J6I7Ja07JqULiIsIkkgaGF2ZSBhIHBlYW51dCBhbGxlcmd5LiIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLwn5qH8J+YheKPsCIsbmFyOiI0MCBtaW51dGVzLCBoZSBzYXlzLiBUaWdodCBidXQgZG9hYmxlLiBPbiB0aGUgdHJhaW4sIGFuIGFubm91bmNlbWVudCBjcmFja2xlcyDigJQgeW91IGNhdGNoIHRoZSB3b3JkIOyeoOyLpCEiLHdobzoi8J+ToiDslYjrgrTrsKnshqEiLGtyOiLsnbTrsogg7Jet7J2AIOyeoOyLpCwg7J6g7Iuk7Jet7J6F64uI64ukLiIsZW46IlRoaXMgc3RvcCBpcyBKYW1zaWwsIEphbXNpbCBTdGF0aW9uLiIsY2g6W1si7Jes6riw7IScIOuCtOugpOyEnCA47Zi47ISg7Jy866GcIOqwiOyVhO2DgOyVvCDtlbTsmpQhIiwiSSBuZWVkIHRvIGdldCBvZmYgaGVyZSBhbmQgdHJhbnNmZXIgdG8gbGluZSA4ISIsMV0sWyLrsJjssKwg642UIOyjvOyEuOyalC4iLCJNb3JlIHNpZGUgZGlzaGVzLCBwbGVhc2UuIiwwXSxbIuyZgOydtO2MjOydtCDruYTrsIDrsojtmLjqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/IiwwXV19LAoge2JnOiJuaWdodCIsc2M6IvCfmpXwn4628J+Pn++4jyIsbmFyOiJMaW5lIDggaXMgZGVsYXllZCEgRW1lcmdlbmN5IHBsYW46IHRheGkgZm9yIHRoZSBsYXN0IHN0cmV0Y2guIFRoZSBkcml2ZXIgbm9kcyBhcyB0aGUgYXJlbmEgbGlnaHRzIGFwcGVhci4iLHdobzoi8J+alSDquLDsgqzri5giLGtyOiLqs7Xsl7DsnqUg7KCV66y4IOyVnuyXkCDshLjsm4wg65Oc66a06rmM7JqUPyIsZW46IlNoYWxsIEkgc3RvcCBpbiBmcm9udCBvZiB0aGUgbWFpbiBnYXRlPyIsY2g6W1si64SkISDsoIDquLAg7J6F6rWsIOyVnuyXkOyEnCDshLjsm4wg7KO87IS47JqUISIsIlllcyEgUGxlYXNlIHN0b3AgaW4gZnJvbnQgb2YgdGhhdCBlbnRyYW5jZSEiLDFdLFsi66qw65287JqULiIsIkkgZG8gbm90IGtub3cuIiwwXSxbIuyEpO2DlSDrubwg7KO87IS47JqULiIsIk5vIHN1Z2FyLCBwbGVhc2UuIiwwXV19XX0sCjY6e3Q6IvCfm43vuI8gR2lmdCBIdW50IGF0IHRoZSBNYXJrZXQiLCBzdGVwczpbCiB7Ymc6InNob3AiLHNjOiLwn46B8J+klPCfj6oiLG5hcjoiWW91ciBiZXN0IGZyaWVuZCdzIGJpcnRoZGF5IGlzIHRvbW9ycm93LiBUaGUgdHJhZGl0aW9uYWwgbWFya2V0IGlzIGJ1enppbmcg4oCUIGFuZCBvbmUgc2NhcmYgc3RhbGwgY2F0Y2hlcyB5b3VyIGV5ZS4iLHdobzoi8J+nkyDsgqzsnqXri5giLGtyOiLslrTshJwg7Jik7IS47JqUISDqtazqsr3tlZjqs6Ag6rCA7IS47JqUISIsZW46IldlbGNvbWUhIENvbWUgdGFrZSBhIGxvb2shIixjaDpbWyLsnbQg7Iqk7Lm07ZSEIOyYiOyBmOuEpOyalC4g7Ja866eI7JiI7JqUPyIsIlRoaXMgc2NhcmYgaXMgcHJldHR5LiBIb3cgbXVjaCBpcyBpdD8iLDFdLFsi7Je07J20IOyigCDsnojslrTsmpQuIiwiSSBoYXZlIGEgc2xpZ2h0IGZldmVyLiIsMF0sWyLssrTtgazsnbjtlZjqs6Ag7Iu27Ja07JqULiIsIkkgd291bGQgbGlrZSB0byBjaGVjayBpbi4iLDBdXX0sCiB7Ymc6InNob3AiLHNjOiLwn5Kw8J+YsuKcgu+4jyIsbmFyOiIzNSwwMDAgd29uPyEgRm9yIHRoYXQgcHJpY2UgaXQgc2hvdWxkIGNvbWUgd2l0aCBhIGZyZWUgbHVuY2guIFRpbWUgdG8gbmVnb3RpYXRlLCBtYXJrZXQtc3R5bGUuIix3aG86IvCfp5Mg7IKs7J6l64uYIixrcjoi7IK866eMIOyYpOyynCDsm5DsnbTsl5DsmpQuIO2SiOyniOydtCDslYTso7wg7KKL7JWE7JqUISIsZW46Ikl0IGlzIDM1LDAwMCB3b24uIFRoZSBxdWFsaXR5IGlzIGV4Y2VsbGVudCEiLGNoOltbIuuEiOustCDruYTsi7jsmpQhIOyhsOq4iOunjCDquY7slYQg7KO87IS47JqULiIsIlRoYXQgaXMgdG9vIGV4cGVuc2l2ZSEgUGxlYXNlIGdpdmUgbWUgYSBzbWFsbCBkaXNjb3VudC4iLDFdLFsi64uk7IucIO2VnOuyiCDrp5DtlbQg7KO87IS47JqULiIsIlBsZWFzZSBzYXkgdGhhdCBhZ2Fpbi4iLDBdLFsi7ZG5IOyJrOyEuOyalC4iLCJSZXN0IHdlbGwuIiwwXV19LAoge2JnOiJzaG9wIixzYzoi8J+OqOKdk/Cfp6MiLG5hcjoiU2hlIGxhdWdocyBhbmQgZHJvcHMgaXQgdG8gMjgsMDAwLiBQcm9ncmVzcyEgQnV0IHlvdXIgZnJpZW5kJ3MgZmF2b3JpdGUgY29sb3IgaXMgYmx1ZeKApiIsd2hvOiLwn6eTIOyCrOyepeuLmCIsa3I6Iuyii+yVhOyalCwg7J2066eMIO2MlOyynCDsm5AhIOydtCDruajqsITsg4kg7Ja065WM7JqUPyIsZW46IkZpbmUsIDI4LDAwMCEgSG93IGFib3V0IHRoaXMgcmVkIG9uZT8iLGNoOltbIu2YueyLnCDtjIzrnoDsg4nrj4Qg7J6I7Ja07JqUPyDshKDrrLzsnbTsl5DsmpQuIiwiRG8geW91IGhhdmUgaXQgaW4gYmx1ZT8gSXQgaXMgYSBnaWZ0LiIsMV0sWyLrsLDqsIAg64SI66y0IOyVhO2MjOyalC4iLCJNeSBzdG9tYWNoIHJlYWxseSBodXJ0cy4iLDBdLFsi64uk7J2MIOygleulmOyepeyXkOyEnCDrgrTrpqzshLjsmpQuIiwiR2V0IG9mZiBhdCB0aGUgbmV4dCBzdG9wLiIsMF1dfSwKIHtiZzoic2hvcCIsc2M6IvCfjoHwn5KZ8J+YiiIsbmFyOiJTaGUgZGlncyBvdXQgYSBiZWF1dGlmdWwgYmx1ZSBvbmUgQU5EIHdyYXBzIGl0IGFzIGEgZ2lmdC4gTWFya2V0IGdyYW5kbW90aGVycyBhcmUgdGhlIGJlc3QuIix3aG86IvCfp5Mg7IKs7J6l64uYIixrcjoi7ISg66y8IO2PrOyepSDtlbQg65Oc66a06rKM7JqULiDsuZzqtazqsIAg7KKL7JWE7ZWgIOqxsOyYiOyalCEiLGVuOiJJIHdpbGwgZ2lmdC13cmFwIGl0IGZvciB5b3UuIFlvdXIgZnJpZW5kIHdpbGwgbG92ZSBpdCEiLGNoOltbIuqwkOyCrO2VqeuLiOuLpCEg7Lm065OcIOuPvOyalD8iLCJUaGFuayB5b3UhIERvIHlvdSB0YWtlIGNhcmRzPyIsMV0sWyLsoIDripQg7Ius7Ius7ZW07JqULiIsIkkgYW0gYm9yZWQuIiwwXSxbIuuzkeybkOyXkCDqsIAg67O07IS47JqULiIsIllvdSBzaG91bGQgZ28gc2VlIGEgZG9jdG9yLiIsMF1dfV19LAo3Ont0OiLwn5KsIFRoZSBIaWtpbmcgQ2x1YiBOZXdiaWUiLCBzdGVwczpbCiB7Ymc6Im5hdHVyZSIsc2M6IuKbsO+4j/CfmYLwn5GfIixuYXI6IllvdSBqb2luZWQgYSBsb2NhbCBoaWtpbmcgY2x1YiB0byBtZWV0IHBlb3BsZS4gQXQgdGhlIHRyYWlsaGVhZCwgYW5vdGhlciBtZW1iZXIgZmFsbHMgaW4gc3RlcCBiZXNpZGUgeW91LiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuyViOuFle2VmOyEuOyalCEg7LKY7J2MIOyYpOyFqOyjoD8g7Jik64qYIOuCoOyUqCDsp4Tsp5wg7KKL64Sk7JqUISIsZW46IkhpISBGaXJzdCB0aW1lIGhlcmUsIHJpZ2h0PyBUaGUgd2VhdGhlciBpcyBhbWF6aW5nIHRvZGF5ISIsY2g6W1si64SkLCDsspjsnYzsnbTsl5DsmpQhIOuCoOyUqOqwgCDsoJXrp5Ag7KKL7JWE7JqULiIsIlllcywgaXQgaXMgbXkgZmlyc3QgdGltZSEgVGhlIHdlYXRoZXIgaXMgcmVhbGx5IG5pY2UuIiwxXSxbIuqzhOyCsOyEnCDso7zshLjsmpQuIiwiVGhlIGJpbGwsIHBsZWFzZS4iLDBdLFsi7ZmY67aIIOuPvOyalD8iLCJDYW4gSSBnZXQgYSByZWZ1bmQ/IiwwXV19LAoge2JnOiJuYXR1cmUiLHNjOiLwn46o8J+OtfCfpJQiLG5hcjoiVGhlIHRyYWlsIHdpbmRzIHVwIGdlbnRseS4gVGltZSBmb3IgdGhlIGNsYXNzaWMgZ2V0dGluZy10by1rbm93LXlvdSBxdWVzdGlvbi4iLHdobzoi8J+ZgiDsp4DsiJgiLGtyOiLrk7HsgrAg66eQ6rOgIOy3qOuvuOqwgCDrrZDsmIjsmpQ/IixlbjoiQmVzaWRlcyBoaWtpbmcsIHdoYXQgYXJlIHlvdXIgaG9iYmllcz8iLGNoOltbIuyggOuKlCDsmpTrpqztlZjripQg6rKD7J2EIOyii+yVhO2VtOyalC4g7KeA7IiYIOyUqOuKlOyalD8iLCJJIGxpa2UgY29va2luZy4gSG93IGFib3V0IHlvdSwgSmlzdT8iLDFdLFsi7J2067KIIOyXreydgCDsnqDsi6TsnoXri4jri6QuIiwiVGhpcyBzdG9wIGlzIEphbXNpbC4iLDBdLFsi67SJ7YisIO2VhOyalCDsl4bslrTsmpQuIiwiSSBkbyBub3QgbmVlZCBhIGJhZy4iLDBdXX0sCiB7Ymc6Im5hdHVyZSIsc2M6IvCfmLLwn42c8J+SrCIsbmFyOiJIZXIgZXllcyBsaWdodCB1cCDigJQgc2hlIGlzIGEgY2VydGlmaWVkIGZvb2RpZS4gWW91IG1lbnRpb24gdGhlIGxlZ2VuZGFyeSBub29kbGUgaG91c2UgeW91IGZvdW5kLiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuynhOynnOyalD8g7KCA64+EIOq1reyImCDsmYTsoIQg7KKL7JWE7ZW07JqUISDqsbDquLAg7Ja065SU7JiI7JqUPyIsZW46IlJlYWxseT8gSSBMT1ZFIG5vb2RsZXMgdG9vISBXaGVyZSBpcyB0aGF0IHBsYWNlPyIsY2g6W1si7Iuc7J6lIOq3vOyymOyXkCDsnojslrTsmpQuIOuLpOydjOyXkCDqsJnsnbQg6rCI656Y7JqUPyIsIkl0IGlzIG5lYXIgdGhlIG1hcmtldC4gU2hhbGwgd2UgZ28gdG9nZXRoZXIgc29tZXRpbWU/IiwxXSxbIuyXtOydtCDrgpjsmpQuIiwiSSBoYXZlIGEgZmV2ZXIuIiwwXSxbIuq1kO2Gtey5tOuTnOulvCDstqnsoITtlbQg7KO87IS47JqULiIsIlBsZWFzZSByZWNoYXJnZSBteSB0cmFuc2l0IGNhcmQuIiwwXV19LAoge2JnOiJkYXduIixzYzoi8J+MhPCfpJ3wn5OxIixuYXI6IlN1bW1pdCByZWFjaGVkISBDaXR5IHZpZXcsIHZpY3Rvcnkgc25hY2tzLCBhbmQg4oCUIGV2ZW4gYmV0dGVyIOKAlCBhIG5ldyBmcmllbmQuIix3aG86IvCfmYIg7KeA7IiYIixrcjoi7KKL7JWE7JqUISDsl7Drnb3sspgg7JWM66CkIOyjvOyEuOyalC4g7KO866eQ7J2AIOyWtOuVjOyalD8iLGVuOiJEZWFsISBHaXZlIG1lIHlvdXIgbnVtYmVyLiBIb3cgYWJvdXQgdGhpcyB3ZWVrZW5kPyIsY2g6W1si7KO866eQIOyii+yVhOyalCEg7Yag7JqU7J287JeQIOunjOuCmOq4sOuhnCDtlbTsmpQuIiwiVGhlIHdlZWtlbmQgd29ya3MhIExldCB1cyBtZWV0IG9uIFNhdHVyZGF5LiIsMV0sWyLso4TshqHtlZjsp4Drp4wg7J6YIOuqsOudvOyalC4iLCJTb3JyeSwgSSBkbyBub3QgcmVhbGx5IGtub3cuIiwwXSxbIuyVveq1reydtCDslrTrlJTsl5Ag7J6I7Ja07JqUPyIsIldoZXJlIGlzIGEgcGhhcm1hY3k/IiwwXV19XX0sCjg6e3Q6IvCfk7EgVGhlIER5aW5nIFBob25lIENyaXNpcyIsIHN0ZXBzOlsKIHtiZzoibmlnaHQiLHNjOiLwn5Ox8J+Ui/CfmLEiLG5hcjoiWW91IGFyZSBtZWV0aW5nIEppc3UgYXQgNy4gSXQgaXMgNjo0MCwgeW91IGFyZSBvbiB0aGUgYnVzLCBhbmQgeW91ciBwaG9uZSBzaG93cyAyJSBiYXR0ZXJ5LiBJdCByaW5ncyDigJQgSmlzdSEiLHdobzoi8J+TsSDsp4DsiJgiLGtyOiLsl6zrs7TshLjsmpQhIOyngOq4iCDslrTrlJTsmIjsmpQ/IixlbjoiSGVsbG8hIFdoZXJlIGFyZSB5b3Ugbm93PyIsY2g6W1si67KE7Iqk7JeQ7IScIOqwgOqzoCDsnojslrTsmpQhIOyhsOq4iCDriqbslrTsmpQsIOuvuOyViO2VtOyalCEiLCJJIGFtIG9uIHRoZSBidXMgb24gbXkgd2F5ISBJIGFtIGEgbGl0dGxlIGxhdGUsIHNvcnJ5ISIsMV0sWyLsnbTqsbAg7J6F7Ja0IOu0kOuPhCDrj7zsmpQ/IiwiTWF5IEkgdHJ5IHRoaXMgb24/IiwwXSxbIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLDBdXX0sCiB7Ymc6Im5pZ2h0IixzYzoi8J+Ui+KaofCfmLAiLG5hcjoiMSUuIFlvdSB0YWxrIGZhc3Qg4oCUIHRoZXJlIGlzIG9uZSBjcnVjaWFsIHRoaW5nIHRvIHNheSBiZWZvcmUgdGhlIHNjcmVlbiBnb2VzIGRhcmsuIix3aG86IvCfk7Eg7KeA7IiYIixrcjoi6rSc7LCu7JWE7JqULCDsspzsspztnogg7Jik7IS47JqUISDqt7zrjbAg66qp7IaM66as6rCAIOyZnCDqt7jrnpjsmpQ/IixlbjoiTm8gcHJvYmxlbSwgdGFrZSB5b3VyIHRpbWUhIEJ1dCB3aHkgZG8geW91IHNvdW5kIHN0cmVzc2VkPyIsY2g6W1si7Zy064yA7Y+wIOuwsO2EsOumrOqwgCDsl4bslrTsmpQhIOy5tO2OmCDslZ7sl5DshJwg6riw64uk66CkIOyjvOyEuOyalCEiLCJNeSBwaG9uZSBiYXR0ZXJ5IGlzIGR5aW5nISBQbGVhc2Ugd2FpdCBpbiBmcm9udCBvZiB0aGUgY2Fmw6khIiwxXSxbIuyVveq1reydtCDslrTrlJTsl5Ag7J6I7Ja07JqUPyIsIldoZXJlIGlzIHRoZSBwaGFybWFjeT8iLDBdLFsi7J206rKMIOuNlCDsi7jsmpQuIiwiVGhpcyBvbmUgaXMgY2hlYXBlci4iLDBdXX0sCiB7Ymc6Im5pZ2h0IixzYzoi8J+TtfCfmozwn6SeIixuYXI6IkJsYWNrIHNjcmVlbi4gTm8gbWFwLCBubyBtZXNzYWdlcyDigJQgb2xkIHNjaG9vbCBuYXZpZ2F0aW9uIG9ubHkuIFlvdSBzcG90IGEgbGFuZG1hcms6IHRoZSBiaWcgYmFuayBmcm9tIGxhc3Qgd2VlayEiLHdobzoi8J+noCAo7IOd6rCBKSIsa3I6IijsnYDtlonigKYg6re4IOyYhuyXkCDshJzsoJDigKYg7Lm07Y6Y64qUIOq3uCDslZ7snbTslbwhKSIsZW46IihUaGUgYmFua+KApiB0aGUgYm9va3Nob3AgbmV4dCB0byBpdOKApiB0aGUgY2Fmw6kgaXMgcmlnaHQgaW4gZnJvbnQhKSIsY2g6W1si7Jes6riw7IScIOuCtOugpOyEnCDqsbjslrTqsIDslbzqsqDslrTsmpQhIiwiSSBzaG91bGQgZ2V0IG9mZiBoZXJlIGFuZCB3YWxrISIsMV0sWyLtlZjro6jsl5Ag7IS4IOuyiCDrk5zshLjsmpQuIiwiVGFrZSBpdCB0aHJlZSB0aW1lcyBhIGRheS4iLDBdLFsi66qHIOyLnOyXkCDssrTtgazsnbjtlbTsmpQ/IiwiV2hhdCB0aW1lIGlzIGNoZWNrLWluPyIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLimJXwn5iF8J+ZjCIsbmFyOiI3OjA0IHBtLiBZb3Ugam9nIGFyb3VuZCB0aGUgY29ybmVyIOKAlCBKaXN1IGlzIHRoZXJlLCB0d28gd2FybSBkcmlua3MgaW4gaGFuZCwgbGF1Z2hpbmcgYXQgeW91ciBkcmFtYXRpYyBhcnJpdmFsLiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuyZlOuEpOyalCEgNOu2hCDriqbsl4jslrTsmpQuIO2VmO2VmCEiLGVuOiJZb3UgbWFkZSBpdCEgRm91ciBtaW51dGVzIGxhdGUuIEhhaGEhIixjaDpbWyLriqbslrTshJwg66+47JWI7ZW07JqUISDri6TsnYzsl5DripQg7JWIIOuKpuydhOqyjOyalCwg7JW97IaN7ZW07JqUISIsIlNvcnJ5IGZvciBiZWluZyBsYXRlISBOZXh0IHRpbWUgSSB3aWxsIG5vdCBiZSBsYXRlLCBJIHByb21pc2UhIiwxXSxbIuydtOqxsCDslrzrp4jsmIjsmpQ/IiwiSG93IG11Y2ggaXMgdGhpcz8iLDBdLFsi7ZGcIOuRkCDsnqUg7KO87IS47JqULiIsIlR3byB0aWNrZXRzLCBwbGVhc2UuIiwwXV19XX0sCjk6e3Q6IvCfjq0gVGhlIFJhaW55IERheSBSZXNjdWUiLCBzdGVwczpbCiB7Ymc6ImRhd24iLHNjOiLwn4yn77iP8J+YlPCfk7EiLG5hcjoiU3VuZGF5IGV2ZW5pbmcuIEppc3UgdGV4dHMg4oCUIGhlciBiaWcgY29va2luZyBjb250ZXN0IGRpZCBub3QgZ28gd2VsbC4gU2hlIHNvdW5kcyBkb3duLiBZb3UgY2FsbCBoZXIgcmlnaHQgYXdheS4iLHdobzoi8J+TsSDsp4DsiJgiLGtyOiLsl6zrs7TshLjsmpTigKYg7JWELCDslYjrhZXtlZjshLjsmpQuIixlbjoiSGVsbG/igKYgb2gsIGhpLiIsY2g6W1si66qp7IaM66as6rCAIOyViCDsoovslYQg67O07Jes7JqULiDqtJzssK7slYTsmpQ/IiwiWW91IGRvIG5vdCBzb3VuZCBnb29kLiBBcmUgeW91IG9rYXk/IiwxXSxbIuuMgOuwlSEg7LaV7ZWY7ZW07JqUISIsIk5vIHdheSEgQ29uZ3JhdHVsYXRpb25zISIsMF0sWyLrtIntiKwg7ZWE7JqU7ZWY7IS47JqUPyIsIkRvIHlvdSBuZWVkIGEgYmFnPyIsMF1dfSwKIHtiZzoiZGF3biIsc2M6IvCfmJTwn6WI8J+SrCIsbmFyOiJTaGUgZ290IHNlY29uZCBwbGFjZSDigJQgb25lIHBvaW50IGJlaGluZCB0aGUgd2lubmVyLiBTbyBjbG9zZSBpdCBodXJ0cy4iLHdobzoi8J+TsSDsp4DsiJgiLGtyOiIx7KCQIOywqOydtOuhnCAy65OxIO2WiOyWtOyalOKApiDrhIjrrLQg7JWE7Ims7JuM7JqULiIsZW46IkkgZ290IHNlY29uZCBwbGFjZSBieSBvbmUgcG9pbnTigKYgaXQgaXMgc3VjaCBhIHBpdHkuIixjaDpbWyLsl5DsnbQsIDLrk7Hrj4Qg64yA64uo7ZW07JqUISDsoJXrp5Ag7J6Y7ZaI7Ja07JqUISIsIkhleSwgc2Vjb25kIHBsYWNlIGlzIGFtYXppbmchIFlvdSBkaWQgcmVhbGx5IHdlbGwhIiwxXSxbIuuqhyDtmLjshKDsnbTsl5DsmpQ/IiwiV2hpY2ggbGluZSBpcyBpdD8iLDBdLFsi7Y+s7J6l7ZW0IOyjvOyEuOyalC4iLCJUbyBnbywgcGxlYXNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+NnPCfkqrwn5mCIixuYXI6IllvdSBrbm93IGV4YWN0bHkgd2hhdCBmaXhlcyBhIGhhcmQgZGF5LiBZb3UgbmFtZSB0aGUgcGxhY2U7IHNoZSBjYW5ub3QgcmVzaXN0LiIsd2hvOiLwn5OxIOyngOyImCIsa3I6Iu2VmO2VmCwg6rOg66eI7JuM7JqULiDquLDrtoTsnbQg7KKAIOuCmOyVhOyhjOyWtOyalC4iLGVuOiJIYWhhLCB0aGFuayB5b3UuIEkgZmVlbCBhIGJpdCBiZXR0ZXIgbm93LiIsY2g6W1si67Cw6rOg7ZSE7KOgPyDqta3siJgg66i57Jy865+sIOqwgOyalCEg7KCc6rCAIOyCtOqyjOyalC4iLCJZb3UgYXJlIGh1bmdyeSwgcmlnaHQ/IExldCB1cyBnZXQgbm9vZGxlcyEgTXkgdHJlYXQuIiwxXSxbIuyYpOuluOyqveycvOuhnCDrj4TshLjsmpQuIiwiVHVybiByaWdodC4iLDBdLFsi67CpIO2CpOulvCDsnoPslrTrsoTroLjslrTsmpQuIiwiSSBsb3N0IHRoZSByb29tIGtleS4iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfjZzwn5iE8J+lgiIsbmFyOiJPdmVyIHN0ZWFtaW5nIGJvd2xzLCB0aGUgY29udGVzdCBiZWNvbWVzIGEgZnVubnkgc3RvcnkgaW5zdGVhZCBvZiBhIHNhZCBvbmUuIE5leHQgeWVhciwgZ29sZC4iLHdobzoi8J+ZgiDsp4DsiJgiLGtyOiLrgrTrhYTsl5DripQg6rytIDHrk7Eg7ZWgIOqxsOyYiOyalCEiLGVuOiJOZXh0IHllYXIgSSB3aWxsIGRlZmluaXRlbHkgd2luIGZpcnN0IHBsYWNlISIsY2g6W1si64u57Jew7ZWY7KOgISDtmZTsnbTtjIUhIOyggOuKlCDsnZHsm5DtlaDqsozsmpQuIiwiT2YgY291cnNlISBGaWdodGluZyEgSSB3aWxsIGJlIGNoZWVyaW5nIGZvciB5b3UuIiwxXSxbIu2YhOq4iOunjCDrj7zsmpQ/IiwiSXMgaXQgY2FzaCBvbmx5PyIsMF0sWyLsp4DtlZjssqDsl63snbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSBzdWJ3YXkgc3RhdGlvbj8iLDBdXX1dfSwKMTA6e3Q6IvCfpJIgVGhlIENvbnZlbmllbmNlIFN0b3JlIERvY3RvciIsIHN0ZXBzOlsKIHtiZzoiZGF3biIsc2M6IvCfpKfwn5uP77iP8J+Moe+4jyIsbmFyOiJZb3Ugd2FrZSB1cCB3aXRoIGEgYnVybmluZyB0aHJvYXQgYW5kIGEgaGVhdnkgaGVhZC4gVGhlIGhpa2luZyB0cmlwIGlzIE9GRi4gVGltZSB0byBmaW5kIG1lZGljaW5lIOKAlCB0aGUgcGhhcm1hY3kgZmlyc3QuIix3aG86IuKale+4jyDslb3sgqwiLGtyOiLslrTshJwg7Jik7IS47JqULiDslrTrlJTqsIAg67aI7Y647ZWY7IS47JqUPyIsZW46IldlbGNvbWUuIFdoYXQgc2VlbXMgdG8gYmUgdGhlIHByb2JsZW0/IixjaDpbWyLslrTsoJzrtoDthLAg66qp7J20IOyVhO2UhOqzoCDsl7TsnbQg64KY7JqULiIsIlNpbmNlIHllc3RlcmRheSBteSB0aHJvYXQgaHVydHMgYW5kIEkgaGF2ZSBhIGZldmVyLiIsMV0sWyLsgqzqsbDrpqzsl5DshJwg7Jm87Kq97Jy866GcIOuPhOyEuOyalC4iLCJUdXJuIGxlZnQgYXQgdGhlIGludGVyc2VjdGlvbi4iLDBdLFsi7ISg66y8IO2PrOyepSDrj7zsmpQ/IiwiQ2FuIHlvdSBnaWZ0LXdyYXAgaXQ/IiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLimpXvuI/wn5KK4p2TIixuYXI6IlRoZSBwaGFybWFjaXN0IG5vZHMga25vd2luZ2x5IGFuZCByZWFjaGVzIGZvciBhIGJveC4gQnV0IHlvdSByZW1lbWJlciBzb21ldGhpbmcgaW1wb3J0YW50LiIsd2hvOiLimpXvuI8g7JW97IKsIixrcjoi6rCQ6riw64Sk7JqULiDsnbQg7JW97J2EIOuTnOyEuOyalC4iLGVuOiJJdCBpcyBhIGNvbGQuIFRha2UgdGhpcyBtZWRpY2luZS4iLGNoOltbIuqwkOyCrO2VqeuLiOuLpC4g6re465+w642wIOyggOuKlCDrlYXsvakg7JWM66CI66W06riw6rCAIOyeiOyWtOyalC4g6rSc7LCu7JWE7JqUPyIsIlRoYW5rIHlvdS4gQnV0IEkgaGF2ZSBhIHBlYW51dCBhbGxlcmd5LiBJcyBpdCBva2F5PyIsMV0sWyLrtIntiKwg7ZWE7JqUIOyXhuyWtOyalC4iLCJJIGRvIG5vdCBuZWVkIGEgYmFnLiIsMF0sWyLqsJnsnbQg65Ox7IKwIOqwiOuemOyalD8iLCJXYW50IHRvIGdvIGhpa2luZyB0b2dldGhlcj8iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfkorwn5Od8J+VkCIsbmFyOiJTYWZlIHRvIHRha2UuIE5vdyDigJQgdGhlIGNydWNpYWwgcXVlc3Rpb24gZXZlcnkgcGhhcm1hY2lzdCBleHBlY3RzLiIsd2hvOiLimpXvuI8g7JW97IKsIixrcjoi64SkLCDqtJzssK7slYTsmpQuIOyLneyCrCDtm4Tsl5Ag65Oc7IS47JqULiIsZW46IlllcywgaXQgaXMgZmluZS4gVGFrZSBpdCBhZnRlciBtZWFscy4iLGNoOltbIu2VmOujqOyXkCDrqocg67KIIOuoueyWtOyVvCDtlbTsmpQ/IiwiSG93IG1hbnkgdGltZXMgYSBkYXkgc2hvdWxkIEkgdGFrZSBpdD8iLDFdLFsi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IiwiV2hpY2ggY291bnRyeSBhcmUgeW91IGZyb20/IiwwXSxbIuydtOqxsCDrhIjrrLQg7JiI67uQ7JqULiIsIlRoaXMgaXMgc28gcHJldHR5LiIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLwn5uP77iP8J+NtfCfmLQiLG5hcjoiVGhyZWUgdGltZXMgYSBkYXksIGFmdGVyIG1lYWxzLCBhbmQg4oCUIHRoZSBwaGFybWFjaXN0IGluc2lzdHMg4oCUIFJFU1QuIEppc3UgdGV4dHM6ICdHZXQgYmV0dGVyIG9yIGVsc2UhIPCfmKQnIix3aG86IvCfk7Eg7KeA7IiYIixrcjoi7JW9IOuoueyXiOyWtOyalD8g7Jik64qY7J2AIO2RuSDsiazshLjsmpQhIixlbjoiRGlkIHlvdSB0YWtlIHRoZSBtZWRpY2luZT8gUmVzdCB3ZWxsIHRvZGF5ISIsY2g6W1si64SkLCDrqLnsl4jslrTsmpQuIOqxseygle2VmOyngCDrp4jshLjsmpQuIO2RuSDsibTqsozsmpQhIiwiWWVzLCBJIHRvb2sgaXQuIERvIG5vdCB3b3JyeS4gSSB3aWxsIHJlc3Qgd2VsbCEiLDFdLFsi65iQIOunjOuCmOyalCEiLCJTZWUgeW91IGFnYWluISIsMF0sWyLsnbQg67KE7Iqk6rCAIOyLnOyyreyXkCDqsIDsmpQ/IiwiRG9lcyB0aGlzIGJ1cyBnbyB0byBDaXR5IEhhbGw/IiwwXV19XX0sCjExOnt0OiLwn6ezIFRoZSBTZWFzaWRlIEd1ZXN0aG91c2UiLCBzdGVwczpbCiB7Ymc6Im5hdHVyZSIsc2M6IvCfjIrwn5qJ8J+nsyIsbmFyOiJSZWNvdmVyZWQgYW5kIHJlc3RsZXNzLCB5b3UgYm9vayBhIHdlZWtlbmQgYnkgdGhlIHNlYS4gVGhlIGd1ZXN0aG91c2Ugc2l0cyBvbiBhIGhpbGwg4oCUIHRoZSBvd25lciB3YXZlcyBmcm9tIHRoZSBwb3JjaC4iLHdobzoi8J+ZgiDsgqzsnqXri5giLGtyOiLslrTshJwg7Jik7IS47JqUISDsmIjslb3tlZjshajslrTsmpQ/IixlbjoiV2VsY29tZSEgRG8geW91IGhhdmUgYSByZXNlcnZhdGlvbj8iLGNoOltbIuuEpCwg7Jio65287J247Jy866GcIOyYiOyVve2WiOyWtOyalC4g7LK07YGs7J247ZWY6rOgIOyLtuyWtOyalC4iLCJZZXMsIEkgcmVzZXJ2ZWQgb25saW5lLiBJIHdvdWxkIGxpa2UgdG8gY2hlY2sgaW4uIiwxXSxbIuuNnCDrp7Xqsowg7ZWgIOyImCDsnojslrTsmpQ/IiwiQ2FuIHlvdSBtYWtlIGl0IGxlc3Mgc3BpY3k/IiwwXSxbIuqyveywsOyXkCDsi6Dqs6DtlojslrTsmpQuIiwiSSByZXBvcnRlZCBpdCB0byB0aGUgcG9saWNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+UkfCfk7bwn5mCIixuYXI6IlJvb20gMjAzLCBvY2VhbiBzaWRlLiBCZWZvcmUgc2hlIGRpc2FwcGVhcnMsIGdyYWIgdGhlIHR3byBmYWN0cyBldmVyeSB0cmF2ZWxlciBuZWVkcy4iLHdobzoi8J+ZgiDsgqzsnqXri5giLGtyOiLrsKnsnYAgMjAz7Zi47JiI7JqULiDtlYTsmpTtlZwg6rGwIOyeiOycvOyEuOyalD8iLGVuOiJZb3VyIHJvb20gaXMgMjAzLiBEbyB5b3UgbmVlZCBhbnl0aGluZz8iLGNoOltbIuuEpCEg7JmA7J207YyM7J20IOu5hOuwgOuyiO2YuOqwgCDrrZDsmIjsmpQ/IOq3uOumrOqzoCDsobDsi53snYAg66qHIOyLnOyXkCDsi5zsnpHtlbTsmpQ/IiwiWWVzISBXaGF0IGlzIHRoZSB3aWZpIHBhc3N3b3JkPyBBbmQgd2hhdCB0aW1lIGRvZXMgYnJlYWtmYXN0IHN0YXJ0PyIsMV0sWyLrlLDroZwg6rOE7IKw7ZW0IOyjvOyEuOyalC4iLCJTZXBhcmF0ZSBiaWxscywgcGxlYXNlLiIsMF0sWyLsoIAg7KKAIOuPhOyZgOyjvOyEuOyalCEiLCJQbGVhc2UgaGVscCBtZSEiLDBdXX0sCiB7Ymc6Im5hdHVyZSIsc2M6IvCfjIXwn5O48J+ksyIsbmFyOiJUaGUgc3Vuc2V0IG92ZXIgdGhlIHdhdGVyIGlzIHVucmVhbC4gQSBjb3VwbGUgd2Fsa3MgYnkg4oCUIHBlcmZlY3QgcGhvdG8gb3Bwb3J0dW5pdHkgKGZvciB5b3UsIGJ5IHRoZW0pLiIsd2hvOiLwn5q2IOyXrO2WieqwnSIsa3I6IuuEpD8g662Q65286rOgIO2VmOyFqOyWtOyalD8iLGVuOiJZZXM/IFdoYXQgZGlkIHlvdSBzYXk/IixjaDpbWyLsgqzsp4Qg7KKAIOywjeyWtCDso7zsi5zqsqDslrTsmpQ/IOqyvey5mOqwgCDrhIjrrLQg7KKL7JWE7ISc7JqUISIsIkNvdWxkIHlvdSB0YWtlIGEgcGhvdG8gZm9yIG1lPyBUaGUgdmlldyBpcyBzbyBiZWF1dGlmdWwhIiwxXSxbIuyVveyGjeydhCDst6jshoztlbTslbwg7ZW07JqULiIsIkkgaGF2ZSB0byBjYW5jZWwgdGhlIHBsYW5zLiIsMF0sWyLsubTrk5zroZwg7ZWg6rKM7JqULiIsIkkgd2lsbCBwYXkgYnkgY2FyZC4iLDBdXX0sCiB7Ymc6Im5pZ2h0IixzYzoi8J+mkfCfjb3vuI/irZAiLG5hcjoiQmFjayBhdCB0aGUgZ3Vlc3Rob3VzZSwgdGhlIG93bmVyIGlzIGdyaWxsaW5nIHNvbWV0aGluZyB0aGF0IHNtZWxscyBpbmNyZWRpYmxlLiBPbmUgbGFzdCBxdWVzdGlvbiBiZWZvcmUgZGlubmVy4oCmIix3aG86IvCfmYIg7IKs7J6l64uYIixrcjoi64K07J287J2AIOutkCDtlaAg6rGw7JiI7JqUPyIsZW46IldoYXQgd2lsbCB5b3UgZG8gdG9tb3Jyb3c/IixjaDpbWyLqt7zsspjsl5Ag7Jyg66qF7ZWcIOq0gOq0keyngCDsnojslrTsmpQ/IOy2lOyynO2VtCDso7zshLjsmpQhIiwiQXJlIHRoZXJlIGZhbW91cyBzaWdodHMgbmVhcmJ5PyBQbGVhc2UgcmVjb21tZW5kIHNvbWUhIiwxXSxbIuygk+qwgOudvSDtlZjrgpgg642UIOyjvOyEuOyalC4iLCJPbmUgbW9yZSBwYWlyIG9mIGNob3BzdGlja3MsIHBsZWFzZS4iLDBdLFsi66y47J6Q66GcIOuztOuCtCDso7zshLjsmpQuIiwiU2VuZCBpdCBieSB0ZXh0LCBwbGVhc2UuIiwwXV19XX0sCjEyOnt0OiLwn4aYIFRoZSBMb3N0IFdhbGxldCBNaXJhY2xlIiwgc3RlcHM6Wwoge2JnOiJjaXR5IixzYzoi8J+Rm/CfmLHwn5qHIixuYXI6IkJhY2sgaW4gdGhlIGNpdHksIHlvdSByZWFjaCBmb3IgeW91ciB3YWxsZXQgYXQgdGhlIHR1cm5zdGlsZSDigJQgR09ORS4gQ2FyZHMsIGNhc2gsIGV2ZXJ5dGhpbmcuIERlZXAgYnJlYXRoLiBZb3UgYXBwcm9hY2ggYSBzdGF0aW9uIHdvcmtlci4iLHdobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AiLGtyOiLrrLTsiqgg7J287J207IS47JqUPyIsZW46IldoYXQgaXMgdGhlIG1hdHRlcj8iLGNoOltbIuyggCDsooAg64+E7JmA7KO87IS47JqUISDsp4DtlZjssqDsl5DshJwg7KeA6rCR7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJQbGVhc2UgaGVscCBtZSEgSSBsb3N0IG15IHdhbGxldCBvbiB0aGUgc3Vid2F5LiIsMV0sWyLslYTsnbTsiqQg7JWE66mU66as7Lm064W4IOyjvOyEuOyalC4iLCJBbiBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsMF0sWyLrgrTrhYTsl5DripQg6rytIDHrk7Eg7ZWgIOqxsOyYiOyalC4iLCJOZXh0IHllYXIgSSB3aWxsIHdpbiBmaXJzdCBwbGFjZS4iLDBdXX0sCiB7Ymc6ImNpdHkiLHNjOiLwn5ej77iP8J+SqPCfmLUiLG5hcjoiSGUgcmF0dGxlcyBvZmYgaW5zdHJ1Y3Rpb25zIGF0IG5hdGl2ZSBzcGVlZC4gWW91IGNhdGNoIG1heWJlIHRocmVlIHdvcmRzLiBEbyBub3QgcGFuaWMg4oCUIHlvdSBrbm93IHRoZSByZXNjdWUgcGhyYXNlLiIsd2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCIsa3I6IuycoOyLpOusvOyEvO2EsOqwgOyggOyqveyXkOyeiOuKlOuNsOyngOq4iOydgOKApiIsZW46IihWZXJ5IGZhc3QpIFRoZSBsb3N0LWFuZC1mb3VuZCBpcyBvdmVyIHRoZXJlIGJ1dCByaWdodCBub3figKYiLGNoOltbIuyjhOyGoe2VmOyngOunjCwg7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQuIO2VnOq1reyWtOulvCDsobDquIgg7ZWgIOyImCDsnojslrTsmpQuIiwiU29ycnksIGJ1dCBwbGVhc2Ugc3BlYWsgc2xvd2x5LiBJIHNwZWFrIGEgbGl0dGxlIEtvcmVhbi4iLDFdLFsi64yA67CVISDsp4Tsp5zsmpQ/IiwiTm8gd2F5ISBSZWFsbHk/IiwwXSxbIuyEpO2DlSDrubwg7KO87IS47JqULiIsIk5vIHN1Z2FyLCBwbGVhc2UuIiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+QovCfmYLwn5OdIixuYXI6IkhlIHNtaWxlcywgc2xvd3Mgd2F5IGRvd24sIGFuZCB3cml0ZXMgdGhlIGxvc3QtYW5kLWZvdW5kIG51bWJlciBvbiBhIHNsaXAgb2YgcGFwZXIuIFRoaXMgdGltZSwgZXZlcnkgd29yZCBsYW5kcy4iLHdobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AiLGtyOiLsnKDsi6TrrLzshLzthLDsl5Ag7KCE7ZmU7ZW0IOuztOyEuOyalC4g66qHIO2YuOyEoOyXkOyEnCDsnoPslrTrsoTroLjslrTsmpQ/IixlbjoiQ2FsbCB0aGUgbG9zdC1hbmQtZm91bmQgY2VudGVyLiBPbiB3aGljaCBsaW5lIGRpZCB5b3UgbG9zZSBpdD8iLGNoOltbIjLtmLjshKDsnbTsl5DsmpQuIDMw67aEIOyghOyXkOyalC4g7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEiLCJMaW5lIDIsIGFib3V0IDMwIG1pbnV0ZXMgYWdvLiBUaGFuayB5b3Ugc28gbXVjaCEiLDFdLFsi66ek7Jq0IOq1reyImCDso7zshLjsmpQuIiwiU3BpY3kgbm9vZGxlcywgcGxlYXNlLiIsMF0sWyLsgqzsp4Qg7KKAIOywjeyWtCDso7zshLjsmpQuIiwiUGxlYXNlIHRha2UgYSBwaG90byBmb3IgbWUuIiwwXV19LAoge2JnOiJkYXduIixzYzoi8J+Rm+KcqPCfmYwiLG5hcjoiVHdlbnR5IG1pbnV0ZXMgbGF0ZXIsIHRoZSBwaG9uZSBjYWxsOiBGT1VORC4gQ2FzaCB1bnRvdWNoZWQg4oCUIHNvbWVvbmUgdHVybmVkIGl0IGluIHdpdGhpbiBtaW51dGVzLiBLb3JlYSwgeW91IGJlYXV0eS4iLHdobzoi8J+TniDsnKDsi6TrrLzshLzthLAiLGtyOiLsp4DqsJEg7LC+7JWY7Iq164uI64ukISDsi6DrtoTspp0g6rCA7KeA6rOgIOyYpOyEuOyalC4iLGVuOiJXZSBmb3VuZCB5b3VyIHdhbGxldCEgQnJpbmcgeW91ciBJRCB0byBwaWNrIGl0IHVwLiIsY2g6W1si7KCV66eQ7JqUPyDqsJDsgqztlanri4jri6QhIOyngOq4iCDrsJTroZwg6rCI6rKM7JqUISIsIlJlYWxseT8gVGhhbmsgeW91ISBJIHdpbGwgY29tZSByaWdodCBub3chIiwxXSxbIuyViCDrp7Xqsowg7ZW0IOyjvOyEuOyalC4iLCJOb3Qgc3BpY3ksIHBsZWFzZS4iLDBdLFsi7KO866eQ7JeQIOuztO2GtSDrrZAg7ZW07JqUPyIsIldoYXQgZG8geW91IHVzdWFsbHkgZG8gb24gd2Vla2VuZHM/IiwwXV19XX0KfTsKTEVTU09OUy5mb3JFYWNoKEwgPT4gTC5zdG9yeSA9IFNUT1JJRVNbTC5uXSk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFRBTEtTIOKAlCBzcG9rZW4gY29udmVyc2F0aW9uIHBlciBxdWVzdCAoYWxsIG9yaWdpbmFsKS4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCBUQUxLUyA9IHsKMTp7d2hvOiLwn5mCIO2VmOuCmCAoeW91ciBuZWlnaGJvcikiLCB0OiJNZWV0aW5nIHlvdXIgbmV3IG5laWdoYm9yIiwgdHVybnM6Wwoge3E6IuyViOuFle2VmOyEuOyalCEg7LKY7J2MIOu1meuKlCDrtoTsnbTrhKTsmpQuIixxRW46IkhlbGxvISBJIGhhdmUgbm90IHNlZW4geW91IGJlZm9yZS4iLHRhc2s6IlNheSBoZWxsbyBhbmQgdGhhdCB5b3UgYXJlIGdsYWQgdG8gbWVldCBoZXIuIixhOiLslYjrhZXtlZjshLjsmpQhIOunjOuCmOyEnCDrsJjqsJHsirXri4jri6QuIixhRW46IkhlbGxvISBHbGFkIHRvIG1lZXQgeW91LiIsYWx0Olsi7JWI64WV7ZWY7IS47JqULCDrsJjqsJHsirXri4jri6QuIl19LAoge3E6IuydtOumhOydtCDrrZDsmIjsmpQ/IixxRW46IldoYXQgaXMgeW91ciBuYW1lPyIsdGFzazoiU2F5ICdJIGFtIOKApicg4oCUIHVzZSB5b3VyIG93biBuYW1lISIsYToi7KCA64qUIO2GsOydtOyXkOyalC4iLGFFbjoiSSBhbSBUb20uICh1c2UgWU9VUiBuYW1lKSIsYWx0Olsi7KCcIOydtOumhOydgCDthrDsnbTsl5DsmpQuIl19LAoge3E6IuyWtOuKkCDrgpjrnbzsl5DshJwg7JmU7Ja07JqUPyIscUVuOiJXaGljaCBjb3VudHJ5IGFyZSB5b3UgZnJvbT8iLHRhc2s6IlNheSB3aGljaCBjb3VudHJ5IHlvdSBjYW1lIGZyb20uIixhOiLsupDrgpjri6Tsl5DshJwg7JmU7Ja07JqULiIsYUVuOiJJIGNhbWUgZnJvbSBDYW5hZGEuICh1c2UgWU9VUiBjb3VudHJ5KSIsYWx0Olsi7KCA64qUIOy6kOuCmOuLpCDsgqzrnozsnbTsl5DsmpQuIiwi67Kg7Yq464Ko7JeQ7IScIOyZlOyWtOyalC4iXX0sCiB7cToi7Jqw7JmALCDrsJjqsIDsm4zsmpQhIO2VnOq1reydgCDsspjsnYzsnbTsl5DsmpQ/IixxRW46IldvdywgbmljZSEgSXMgdGhpcyB5b3VyIGZpcnN0IHRpbWUgaW4gS29yZWE/Iix0YXNrOiJTYXkgeWVzLCBhbmQgYXNrIGhlciB0byB0YWtlIGNhcmUgb2YgeW91LiIsYToi64SkLCDsspjsnYzsnbTsl5DsmpQuIOyemCDrtoDtg4Hrk5zrpr3ri4jri6QhIixhRW46IlllcywgaXQgaXMgbXkgZmlyc3QgdGltZS4gUGxlYXNlIHRha2UgY2FyZSBvZiBtZSEiLGFsdDpbIuuEpCwg7J6YIOu2gO2DgeuTnOumveuLiOuLpC4iXX0sCiB7cToi7ZWE7JqU7ZWcIOqxsCDsnojsnLzrqbQg66eQ7ZW07JqULiDqt7jrn7wg65iQIOu0kOyalCEiLHFFbjoiVGVsbCBtZSBpZiB5b3UgbmVlZCBhbnl0aGluZy4gU2VlIHlvdSBhcm91bmQhIix0YXNrOiJUaGFuayBoZXIgYW5kIHNheSBzZWUgeW91IGFnYWluLiIsYToi6rCQ7IKs7ZWp64uI64ukLiDrmJAg66eM64KY7JqUISIsYUVuOiJUaGFuayB5b3UuIFNlZSB5b3UgYWdhaW4hIixhbHQ6WyLqsJDsgqztlanri4jri6QuIOyViOuFle2eiCDqsIDshLjsmpQhIl19XX0sCjI6e3dobzoi8J+nkeKAjfCfjbMg67CU66as7Iqk7YOAIChiYXJpc3RhKSIsIHQ6Ik9yZGVyaW5nIHlvdXIgbW9ybmluZyBjb2ZmZWUiLCB0dXJuczpbCiB7cToi7Ja07IScIOyYpOyEuOyalCEg7KO866y47ZWY7Iuc6rKg7Ja07JqUPyIscUVuOiJXZWxjb21lISBXb3VsZCB5b3UgbGlrZSB0byBvcmRlcj8iLHRhc2s6Ik9yZGVyIG9uZSBpY2VkIGFtZXJpY2Fuby4iLGE6IuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7ZWcIOyelCDso7zshLjsmpQuIixhRW46Ik9uZSBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsYWx0Olsi7JWE7J207IqkIOyVhOuplOumrOy5tOuFuCDso7zshLjsmpQuIl19LAoge3E6IuyCrOydtOymiOuKlCDslrTrlrvqsowg65Oc66a06rmM7JqUPyIscUVuOiJXaGF0IHNpemUgd291bGQgeW91IGxpa2U/Iix0YXNrOiJTYXkgeW91IHdpbGwgdGFrZSB0aGUgbGFyZ2Ugc2l6ZS4iLGE6Iu2BsCDsgqzsnbTspojroZwg7ZWg6rKM7JqULiIsYUVuOiJJIHdpbGwgdGFrZSB0aGUgbGFyZ2Ugc2l6ZS4iLGFsdDpbIu2BsCDqsbDroZwg7KO87IS47JqULiJdfSwKIHtxOiLri6Trpbgg6rG0IO2VhOyalCDsl4bsnLzshLjsmpQ/IixxRW46IkFueXRoaW5nIGVsc2U/Iix0YXNrOiJPcmRlciBvbmUgY2hlZXNlY2FrZSB0b28uIixhOiLsuZjspogg7LyA7J207YGs64+EIO2VmOuCmCDso7zshLjsmpQuIixhRW46Ik9uZSBjaGVlc2VjYWtlIHRvbywgcGxlYXNlLiIsYWx0Olsi7LyA7J207YGsIO2VmOuCmCDso7zshLjsmpQuIl19LAoge3E6IuuTnOyLnOqzoCDqsIDshLjsmpQsIOyVhOuLiOuptCDtj6zsnqXsnbTshLjsmpQ/IixxRW46IkZvciBoZXJlIG9yIHRvIGdvPyIsdGFzazoiU2F5IHRvIGdvLCBwbGVhc2UuIixhOiLtj6zsnqXtlbQg7KO87IS47JqULiIsYUVuOiJUbyBnbywgcGxlYXNlLiIsYWx0Olsi7Y+s7J6l7J207JqULiJdfSwKIHtxOiLrp4zsspwg7JuQ7J6F64uI64ukLiIscUVuOiJUaGF0IGlzIDExLDAwMCB3b24uIix0YXNrOiJTYXkgeW91IHdpbGwgcGF5IGJ5IGNhcmQuIixhOiLsubTrk5zroZwg7ZWg6rKM7JqULiIsYUVuOiJJIHdpbGwgcGF5IGJ5IGNhcmQuIixhbHQ6WyLsubTrk5zroZwg6rOE7IKw7ZWg6rKM7JqULiJdfV19LAozOnt3aG86IvCfmYsg7IKs7J6l64uYIChyZXN0YXVyYW50IG93bmVyKSIsIHQ6IkRpbm5lciBhdCBhIGxvY2FsIHJlc3RhdXJhbnQiLCB0dXJuczpbCiB7cToi7Ja07IScIOyYpOyEuOyalCEg66qHIOu2hOydtOyEuOyalD8iLHFFbjoiV2VsY29tZSEgSG93IG1hbnkgcGVvcGxlPyIsdGFzazoiU2F5IHR3byBwZW9wbGUuIixhOiLrkZAg66qF7J207JeQ7JqULiIsYUVuOiJUd28gcGVvcGxlLiIsYWx0Olsi65GQIOuqheydtOyalC4iXX0sCiB7cToi66mU64m0IOyXrOq4sCDsnojslrTsmpQuIOutkCDrk5zrprTquYzsmpQ/IixxRW46IkhlcmUgaXMgdGhlIG1lbnUuIFdoYXQgY2FuIEkgZ2V0IHlvdT8iLHRhc2s6IkFzayBoZXIgdG8gcmVjb21tZW5kIHNvbWV0aGluZy4iLGE6Iuy2lOyynO2VtCDso7zshLjsmpQuIOutkOqwgCDsoJzsnbwg66eb7J6I7Ja07JqUPyIsYUVuOiJQbGVhc2UgcmVjb21tZW5kIHNvbWV0aGluZy4gV2hhdCBpcyB0aGUgYmVzdD8iLGFsdDpbIuy2lOyynO2VtCDso7zshLjsmpQuIl19LAoge3E6IuunpOyatCDqta3siJjqsIAg7KCc7J28IOyduOq4sCDsnojslrTsmpQhIixxRW46IlRoZSBzcGljeSBub29kbGVzIGFyZSB0aGUgbW9zdCBwb3B1bGFyISIsdGFzazoiQXNrIGlmIGl0IGlzIHZlcnkgc3BpY3kuIixhOiLrp47snbQg66ek7JuM7JqUPyIsYUVuOiJJcyBpdCB2ZXJ5IHNwaWN5PyIsYWx0Olsi6re46rGwIOunpOybjOyalD8iXX0sCiB7cToi7KGw6riIIOunpOybjOyalC4g642cIOunteqyjCDtlbQg65Oc66a06rmM7JqUPyIscUVuOiJJdCBpcyBhIGxpdHRsZSBzcGljeS4gU2hhbGwgSSBtYWtlIGl0IG1pbGRlcj8iLHRhc2s6IlNheSB5ZXMgcGxlYXNlLCBhbmQgYXNrIGZvciB3YXRlciB0b28uIixhOiLrhKQsIOq3uOumrOqzoCDrrLwg7KKAIOyjvOyEuOyalC4iLGFFbjoiWWVzLCBhbmQgc29tZSB3YXRlciBwbGVhc2UuIixhbHQ6WyLrhKQsIOusvOuPhCDso7zshLjsmpQuIl19LAoge3E6Iuunm+yeiOqyjCDrk5zshajslrTsmpQ/IixxRW46IkRpZCB5b3UgZW5qb3kgdGhlIG1lYWw/Iix0YXNrOiJTYXkgaXQgd2FzIHJlYWxseSBkZWxpY2lvdXMgYW5kIGFzayBmb3IgdGhlIGJpbGwuIixhOiLsoJXrp5Ag66eb7J6I7JeI7Ja07JqUISDqs4TsgrDshJwg7KO87IS47JqULiIsYUVuOiJJdCB3YXMgcmVhbGx5IGRlbGljaW91cyEgVGhlIGJpbGwsIHBsZWFzZS4iLGFsdDpbIuunm+yeiOyXiOyWtOyalC4g6rOE7IKw7ZWg6rKM7JqULiJdfV19LAo0Ont3aG86IvCfmrYg7ZaJ7J24IChwYXNzZXJieSkiLCB0OiJGaW5kaW5nIHRoZSBib29rc2hvcCIsIHR1cm5zOlsKIHtxOiLrhKQ/IOustOyKqCDsnbzsnbTshLjsmpQ/IixxRW46Illlcz8gV2hhdCBpcyBpdD8iLHRhc2s6IkFzayB3aGVyZSBIYW5iaXQgQm9va3Nob3AgaXMuIixhOiLtlZzruZsg7ISc7KCQ7J20IOyWtOuUlOyYiOyalD8iLGFFbjoiV2hlcmUgaXMgSGFuYml0IEJvb2tzaG9wPyIsYWx0Olsi7ISc7KCQ7J20IOyWtOuUlOyXkCDsnojslrTsmpQ/Il19LAoge3E6IuydtCDquLjroZwg7K2JIOqwgOyEuOyalC4gNeu2hOyvpCDqsbjroKTsmpQuIixxRW46IkdvIHN0cmFpZ2h0IGFsb25nIHRoaXMgcm9hZC4gSXQgdGFrZXMgYWJvdXQgNSBtaW51dGVzLiIsdGFzazoiQXNrIGlmIGl0IGlzIGNsb3NlIHRvIGhlcmUuIixhOiLsl6zquLDshJwg6rCA6rmM7JuM7JqUPyIsYUVuOiJJcyBpdCBjbG9zZSB0byBoZXJlPyIsYWx0Olsi6rCA6rmM7JuM7JqUPyJdfSwKIHtxOiLrhKQsIOqwgOq5jOybjOyalC4g7IKs6rGw66as7JeQ7IScIOyZvOyqveycvOuhnCDrj4TshLjsmpQuIixxRW46IlllcywgaXQgaXMgY2xvc2UuIFR1cm4gbGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uLiIsdGFzazoiQ29uZmlybTogbGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uPyIsYToi7IKs6rGw66as7JeQ7IScIOyZvOyqveydtOyalD8iLGFFbjoiTGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uPyIsYWx0Olsi7Jm87Kq97Jy866GcIOqwgOyalD8iXX0sCiB7cToi66ee7JWE7JqULiDsnYDtlokg7JiG7JeQIOyeiOyWtOyalC4iLHFFbjoiUmlnaHQuIEl0IGlzIG5leHQgdG8gdGhlIGJhbmsuIix0YXNrOiJTYXkgYWgsIG5leHQgdG8gdGhlIGJhbmsg4oCUIGdvdCBpdC4iLGE6IuyVhCwg7J2A7ZaJIOyYhuydtOyalC4g7JWM6rKg7Ja07JqUISIsYUVuOiJBaCwgbmV4dCB0byB0aGUgYmFuay4gR290IGl0ISIsYWx0Olsi64SkLCDslYzqsqDslrTsmpQuIl19LAoge3E6Iuq4iOuwqSDssL7snYQg6rGw7JiI7JqUISIscUVuOiJZb3Ugd2lsbCBmaW5kIGl0IGluIG5vIHRpbWUhIix0YXNrOiJUaGFuayB0aGVtIGFuZCB3aXNoIHRoZW0gYSBnb29kIGRheS4iLGE6IuqwkOyCrO2VqeuLiOuLpCEg7KKL7J2AIO2VmOujqCDrkJjshLjsmpQhIixhRW46IlRoYW5rIHlvdSEgSGF2ZSBhIGdvb2QgZGF5ISIsYWx0Olsi7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEiXX1dfSwKNTp7d2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCAoc3RhdGlvbiBhdHRlbmRhbnQpIiwgdDoiR2V0dGluZyB0byB0aGUgY29uY2VydCIsIHR1cm5zOlsKIHtxOiLrhKQsIOutmCDrj4TsmYDrk5zrprTquYzsmpQ/IixxRW46IlllcywgaG93IGNhbiBJIGhlbHAgeW91PyIsdGFzazoiQXNrIGhvdyB0byBnZXQgdG8gT2x5bXBpYyBQYXJrLiIsYToi7Jis66a87ZS9IOqzteybkOq5jOyngCDslrTrlrvqsowg6rCA7JqUPyIsYUVuOiJIb3cgZG8gSSBnZXQgdG8gT2x5bXBpYyBQYXJrPyIsYWx0Olsi7Jis66a87ZS9IOqzteybkOyXkCDslrTrlrvqsowg6rCA7JqUPyJdfSwKIHtxOiIy7Zi47ISg7J2EIO2DgOqzoCDsnqDsi6Tsl63snLzroZwg6rCA7IS47JqULiIscUVuOiJUYWtlIGxpbmUgMiB0byBKYW1zaWwgU3RhdGlvbi4iLHRhc2s6IkFzayB3aGVyZSB5b3Ugc2hvdWxkIHRyYW5zZmVyLiIsYToi7Ja065SU7JeQ7IScIOqwiOyVhO2DgOyVvCDtlbTsmpQ/IixhRW46IldoZXJlIHNob3VsZCBJIHRyYW5zZmVyPyIsYWx0Olsi7Ja065SU7IScIOqwiOyVhO2DgOyalD8iXX0sCiB7cToi7J6g7Iuk7Jet7JeQ7IScIDjtmLjshKDsnLzroZwg6rCI7JWE7YOA7IS47JqULiIscUVuOiJUcmFuc2ZlciB0byBsaW5lIDggYXQgSmFtc2lsLiIsdGFzazoiQXNrIGhvdyBsb25nIGl0IHRha2VzLiIsYToi7Ja866eI64KYIOqxuOugpOyalD8iLGFFbjoiSG93IGxvbmcgZG9lcyBpdCB0YWtlPyIsYWx0Olsi7Iuc6rCE7J20IOyWvOuniOuCmCDqsbjroKTsmpQ/Il19LAoge3E6IjQw67aE7K+kIOqxuOugpOyalC4iLHFFbjoiQWJvdXQgNDAgbWludXRlcy4iLHRhc2s6IkFzayB3aGVyZSB5b3UgZ2V0IG9mZi4iLGE6IuyWtOuKkCDsl63sl5DshJwg64K066Ck7JqUPyIsYUVuOiJXaGljaCBzdGF0aW9uIGRvIEkgZ2V0IG9mZiBhdD8iLGFsdDpbIuyWtOuUlOyXkOyEnCDrgrTroKTsmpQ/Il19LAoge3E6Iuuqvey0jO2GoOyEseyXreyXkOyEnCDrgrTrpqzshLjsmpQuIixxRW46IkdldCBvZmYgYXQgTW9uZ2Nob250b3Nlb25nIFN0YXRpb24uIix0YXNrOiJUaGFuayBoaW0gYW5kIHNheSBnb3QgaXQuIixhOiLrhKQsIOyVjOqyoOyWtOyalC4g6rCQ7IKs7ZWp64uI64ukISIsYUVuOiJHb3QgaXQuIFRoYW5rIHlvdSEiLGFsdDpbIuqwkOyCrO2VqeuLiOuLpCEiXX1dfSwKNjp7d2hvOiLwn6eTIOyCrOyepeuLmCAobWFya2V0IHZlbmRvcikiLCB0OiJCdXlpbmcgdGhlIHBlcmZlY3QgZ2lmdCIsIHR1cm5zOlsKIHtxOiLslrTshJwg7Jik7IS47JqUISDrrZAg7LC+7Jy87IS47JqUPyIscUVuOiJXZWxjb21lISBXaGF0IGFyZSB5b3UgbG9va2luZyBmb3I/Iix0YXNrOiJTYXkgeW91IGFyZSBsb29raW5nIGZvciBhIGdpZnQgZm9yIGEgZnJpZW5kLiIsYToi7Lmc6rWsIOyEoOusvOydhCDssL7qs6Ag7J6I7Ja07JqULiIsYUVuOiJJIGFtIGxvb2tpbmcgZm9yIGEgZ2lmdCBmb3IgYSBmcmllbmQuIixhbHQ6WyLshKDrrLzsnYQg7LC+6rOgIOyeiOyWtOyalC4iXX0sCiB7cToi7J20IOyKpOy5tO2UhCDslrTrlYzsmpQ/IOyCvOunjCDsmKTsspwg7JuQ7J207JeQ7JqULiIscUVuOiJIb3cgYWJvdXQgdGhpcyBzY2FyZj8gSXQgaXMgMzUsMDAwIHdvbi4iLHRhc2s6IlNheSBpdCBpcyB0b28gZXhwZW5zaXZlIOKAlCBhc2sgZm9yIGEgZGlzY291bnQuIixhOiLrhIjrrLQg67mE7Iu47JqULiDquY7slYQg7KO87IS47JqUISIsYUVuOiJUb28gZXhwZW5zaXZlLiBQbGVhc2UgZ2l2ZSBtZSBhIGRpc2NvdW50ISIsYWx0Olsi7KGw6riI66eMIOq5juyVhCDso7zshLjsmpQuIl19LAoge3E6Iuq3uOufvCDsnbTrp4wg7YyU7LKcIOybkOyXkCDrk5zrprTqsozsmpQuIixxRW46IlRoZW4gSSB3aWxsIGdpdmUgaXQgdG8geW91IGZvciAyOCwwMDAuIix0YXNrOiJBc2sgaWYgdGhlcmUgYXJlIG90aGVyIGNvbG9ycy4iLGE6IuuLpOuluCDsg4nquZTrj4Qg7J6I7Ja07JqUPyIsYUVuOiJEbyB5b3UgaGF2ZSBvdGhlciBjb2xvcnM/IixhbHQ6WyLtjIzrnoDsg4kg7J6I7Ja07JqUPyJdfSwKIHtxOiLtjIzrnoDsg4nrj4Qg7J6I7Ja07JqULiDsmIjsgZjso6A/IixxRW46IlRoZXJlIGlzIGEgYmx1ZSBvbmUgdG9vLiBQcmV0dHksIHJpZ2h0PyIsdGFzazoiU2F5IHlvdSB3aWxsIHRha2UgdGhpcyBvbmUg4oCUIGFzayBpZiB0aGV5IGNhbiBnaWZ0LXdyYXAuIixhOiLsnbTqsbAg7KO87IS47JqULiDshKDrrLwg7Y+s7J6lIOuPvOyalD8iLGFFbjoiSSB3aWxsIHRha2UgdGhpcyBvbmUuIENhbiB5b3UgZ2lmdC13cmFwIGl0PyIsYWx0Olsi7J206rGw66GcIO2VoOqyjOyalC4g7Y+s7J6lIOuPvOyalD8iXX0sCiB7cToi6re465+87JqUISDsmIjsgZjqsowg7Y+s7J6l7ZW0IOuTnOumtOqyjOyalC4iLHFFbjoiT2YgY291cnNlISBJIHdpbGwgd3JhcCBpdCBiZWF1dGlmdWxseS4iLHRhc2s6IlRoYW5rIGhlciBhbmQgYXNrIGlmIHRoZXkgdGFrZSBjYXJkcy4iLGE6IuqwkOyCrO2VqeuLiOuLpCEg7Lm065OcIOuPvOyalD8iLGFFbjoiVGhhbmsgeW91ISBEbyB5b3UgdGFrZSBjYXJkcz8iLGFsdDpbIuy5tOuTnOuhnCDqs4TsgrDtlaAg7IiYIOyeiOyWtOyalD8iXX1dfSwKNzp7d2hvOiLwn5mCIOyngOyImCAoaGlraW5nIGNsdWIgbWVtYmVyKSIsIHQ6IlNtYWxsIHRhbGsgb24gdGhlIHRyYWlsIiwgdHVybnM6Wwoge3E6IuyYpOuKmCDrgqDslKgg7KeE7KecIOyii+uEpOyalCEiLHFFbjoiVGhlIHdlYXRoZXIgaXMgcmVhbGx5IG5pY2UgdG9kYXkhIix0YXNrOiJBZ3JlZSDigJQgc2F5IHRoZSB3ZWF0aGVyIGlzIHJlYWxseSBuaWNlLiIsYToi64SkLCDrgqDslKjqsIAg7KCV66eQIOyii+yVhOyalCEiLGFFbjoiWWVzLCB0aGUgd2VhdGhlciBpcyByZWFsbHkgbmljZSEiLGFsdDpbIuunnuyVhOyalCwg7KeE7KecIOyii+uEpOyalC4iXX0sCiB7cToi7Leo66+46rCAIOutkOyYiOyalD8iLHFFbjoiV2hhdCBhcmUgeW91ciBob2JiaWVzPyIsdGFzazoiU2F5IHlvdSBsaWtlIGNvb2tpbmcuIixhOiLsoIDripQg7JqU66as7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQuIixhRW46IkkgbGlrZSBjb29raW5nLiIsYWx0Olsi7JqU66as66W8IOyii+yVhO2VtOyalC4iXX0sCiB7cToi7Jqw7JmAISDrrLTsiqgg7JqU66as66W8IOyemO2VtOyalD8iLHFFbjoiV293ISBXaGF0IGRvIHlvdSBjb29rIHdlbGw/Iix0YXNrOiJTYXkgeW91IGNvb2sgS29yZWFuIGZvb2Qgb2Z0ZW4gdGhlc2UgZGF5cy4iLGE6IuyalOymmCDtlZzqta0g7J2M7Iud7J2EIOyekOyjvCDtlbTsmpQuIixhRW46IlRoZXNlIGRheXMgSSBvZnRlbiBjb29rIEtvcmVhbiBmb29kLiIsYWx0Olsi7ZWc6rWtIOydjOyLneydhCDsnpDso7wg66eM65Ok7Ja07JqULiJdfSwKIHtxOiLrjIDrsJUhIOyggOuPhCDtlZzqta0g7J2M7IudIOyZhOyghCDsoovslYTtlbTsmpQuIixxRW46Ik5vIHdheSEgSSB0b3RhbGx5IGxvdmUgS29yZWFuIGZvb2QgdG9vLiIsdGFzazoiSW52aXRlIGhlcjogc2hhbGwgd2UgZWF0IHRvZ2V0aGVyIHNvbWV0aW1lPyIsYToi64uk7J2M7JeQIOqwmeydtCDrqLnsnLzrn6wg6rCI656Y7JqUPyIsYUVuOiJTaGFsbCB3ZSBnbyBlYXQgdG9nZXRoZXIgc29tZXRpbWU/IixhbHQ6WyLqsJnsnbQg66i57Jy865+sIOqwgOyalCEiXX0sCiB7cToi7KKL7JWE7JqUISDso7zrp5DsnYAg7Ja065WM7JqUPyIscUVuOiJTdXJlISBIb3cgYWJvdXQgdGhlIHdlZWtlbmQ/Iix0YXNrOiJTYXkgdGhlIHdlZWtlbmQgaXMgZ29vZCDigJQgbGV0IHVzIG1lZXQgU2F0dXJkYXkuIixhOiLso7zrp5Ag7KKL7JWE7JqUISDthqDsmpTsnbzsl5Ag66eM64KY7JqULiIsYUVuOiJUaGUgd2Vla2VuZCB3b3JrcyEgTGV0IHVzIG1lZXQgU2F0dXJkYXkuIixhbHQ6WyLthqDsmpTsnbzsl5Ag66eM64KY6riw66GcIO2VtOyalC4iXX1dfSwKODp7d2hvOiLwn5OxIOyngOyImCAob24gdGhlIHBob25lKSIsIHQ6IlJ1bm5pbmcgbGF0ZSDigJQgdGhlIHBob25lIGNhbGwiLCB0dXJuczpbCiB7cToi7Jes67O07IS47JqUISDsp4DquIgg7Ja065SU7JiI7JqUPyIscUVuOiJIZWxsbyEgV2hlcmUgYXJlIHlvdSBub3c/Iix0YXNrOiJTYXkgeW91IGFyZSBvbiB0aGUgYnVzLCBvbiB5b3VyIHdheS4iLGE6IuuyhOyKpOyXkOyEnCDqsIDqs6Ag7J6I7Ja07JqUISIsYUVuOiJJIGFtIG9uIHRoZSBidXMsIG9uIG15IHdheSEiLGFsdDpbIuyngOq4iCDqsIDqs6Ag7J6I7Ja07JqULiJdfSwKIHtxOiLrqocg67aE7K+kIOqxuOugpOyalD8iLHFFbjoiQWJvdXQgaG93IG1hbnkgbWludXRlcyB3aWxsIGl0IHRha2U/Iix0YXNrOiJTYXkgc29ycnksIHlvdSB3aWxsIGJlIGFib3V0IDEwIG1pbnV0ZXMgbGF0ZS4iLGE6IuuvuOyViO2VtOyalCwgMTDrtoTsr6Qg64qm7Ja07JqULiIsYUVuOiJTb3JyeSwgSSB3aWxsIGJlIGFib3V0IDEwIG1pbnV0ZXMgbGF0ZS4iLGFsdDpbIuyhsOq4iCDriqbslrTsmpQuIOuvuOyViO2VtOyalC4iXX0sCiB7cToi6rSc7LCu7JWE7JqUISDslrTrlJTsl5DshJwg66eM64Kg6rmM7JqUPyIscUVuOiJObyBwcm9ibGVtISBXaGVyZSBzaGFsbCB3ZSBtZWV0PyIsdGFzazoiU2F5OiB3YWl0IGluIGZyb250IG9mIHRoZSBjYWbDqSwgcGxlYXNlLiIsYToi7Lm07Y6YIOyVnuyXkOyEnCDquLDri6TroKQg7KO87IS47JqULiIsYUVuOiJQbGVhc2Ugd2FpdCBpbiBmcm9udCBvZiB0aGUgY2Fmw6kuIixhbHQ6WyLsubTtjpgg7JWe7JeQ7IScIOunjOuCmOyalC4iXX0sCiB7cToi64SkISDrsLDthLDrpqzripQg6rSc7LCu7JWE7JqUPyIscUVuOiJPa2F5ISBJcyB5b3VyIGJhdHRlcnkgaG9sZGluZyB1cD8iLHRhc2s6IlNheSB5b3VyIGJhdHRlcnkgaXMgYWxtb3N0IGRlYWQsIHNvIHlvdSB3aWxsIGhhbmcgdXAuIixhOiLrsLDthLDrpqzqsIAg7JeG7Ja07IScIOuBiuydhOqyjOyalCEiLGFFbjoiTXkgYmF0dGVyeSBpcyBkeWluZywgc28gSSB3aWxsIGhhbmcgdXAhIixhbHQ6WyLrsLDthLDrpqzqsIAg7JeG7Ja07JqULiDsnbTrlLDqsIAg67SQ7JqUISJdfSwKIHtxOiLslYzqsqDslrTsmpQsIOyhsOyLrO2eiCDsmYDsmpQhIixxRW46IkdvdCBpdCwgY29tZSBzYWZlbHkhIix0YXNrOiJTYXkgeW91IGhhdmUgYWxtb3N0IGFycml2ZWQg4oCUIHNlZSB5b3Ugc29vbiEiLGE6IuqxsOydmCDrj4TssKntlojslrTsmpQuIOydtOuUsOqwgCDrtJDsmpQhIixhRW46IkkgaGF2ZSBhbG1vc3QgYXJyaXZlZC4gU2VlIHlvdSBzb29uISIsYWx0Olsi6riI67CpIOqwgOyalCEiXX1dfSwKOTp7d2hvOiLwn5mCIOyngOyImCAoeW91ciBmcmllbmQpIiwgdDoiQ2hlZXJpbmcgdXAgYSBmcmllbmQiLCB0dXJuczpbCiB7cToi7JWE4oCmIOyalOumrCDrjIDtmozsl5DshJwgMuuTsSDtlojslrTsmpQuIixxRW46IkFo4oCmIEkgZ290IHNlY29uZCBwbGFjZSBpbiB0aGUgY29va2luZyBjb250ZXN0LiIsdGFzazoiU2F5IHNlY29uZCBwbGFjZSBpcyBhbWF6aW5nIOKAlCB3ZWxsIGRvbmUhIixhOiIy65Ox64+EIOuMgOuLqO2VtOyalCEg7KCV66eQIOyemO2WiOyWtOyalCEiLGFFbjoiU2Vjb25kIHBsYWNlIGlzIGFtYXppbmchIFlvdSBkaWQgcmVhbGx5IHdlbGwhIixhbHQ6WyLsmYAsIOyemO2WiOyWtOyalCEiXX0sCiB7cToi6rOg66eI7JuM7JqULiDqt7jrnpjrj4Qg64SI66y0IOyVhOyJrOybjOyalC4iLHFFbjoiVGhhbmtzLiBTdGlsbCwgaXQgaXMgc3VjaCBhIHBpdHkuIix0YXNrOiJUZWxsIGhlciBub3QgdG8gd29ycnkg4oCUIG5leHQgdGltZSBzaGUgd2lsbCB3aW4uIixhOiLqsbHsoJXtlZjsp4Ag66eI7IS47JqULiDri6TsnYzsl5DripQg6rytIDHrk7Eg7ZWgIOqxsOyYiOyalCEiLGFFbjoiRG8gbm90IHdvcnJ5LiBOZXh0IHRpbWUgeW91IHdpbGwgZGVmaW5pdGVseSB3aW4hIixhbHQ6WyLri6TsnYzsl5Ag7J6YIOuQoCDqsbDsmIjsmpQuIl19LAoge3E6Iu2VmO2VmCwg6riw67aE7J20IOyigCDrgpjslYTsoYzslrTsmpQuIixxRW46IkhhaGEsIEkgZmVlbCBhIGJpdCBiZXR0ZXIuIix0YXNrOiJBc2sgaWYgc2hlIGlzIGh1bmdyeSDigJQgc3VnZ2VzdCBlYXRpbmcgdG9nZXRoZXIuIixhOiLrsLDqs6DtlITso6A/IOqwmeydtCDrsKUg66i57Jy865+sIOqwgOyalCEiLGFFbjoiWW91IGFyZSBodW5ncnksIHJpZ2h0PyBMZXQgdXMgZ28gZWF0IHRvZ2V0aGVyISIsYWx0Olsi6rCZ7J20IOuoueycvOufrCDqsIjrnpjsmpQ/Il19LAoge3E6Iuyii+yVhOyalCEg662QIOuoueydhOq5jOyalD8iLHFFbjoiU3VyZSEgV2hhdCBzaGFsbCB3ZSBlYXQ/Iix0YXNrOiJTdWdnZXN0IHRoZSBub29kbGVzIOKAlCBzYXkgdGhleSBhcmUgcmVhbGx5IGRlbGljaW91cy4iLGE6Iuq1reyImCDslrTrlYzsmpQ/IOygleunkCDrp5vsnojslrTsmpQhIixhRW46IkhvdyBhYm91dCBub29kbGVzPyBUaGV5IGFyZSByZWFsbHkgZGVsaWNpb3VzISIsYWx0Olsi6rWt7IiYIOuoueycvOufrCDqsIDsmpQuIl19LAoge3E6IuyZhOyghCDsoovslYTsmpQuIOuLpOydjCDrjIDtmozrj4Qg64KY6rCIIOqxsOyYiOyalCEiLHFFbjoiUGVyZmVjdC4gSSB3aWxsIGVudGVyIHRoZSBuZXh0IGNvbnRlc3QgdG9vISIsdGFzazoiQ2hlZXIgaGVyIG9uIOKAlCBmaWdodGluZyEgWW91IHdpbGwgYmUgY2hlZXJpbmcgZm9yIGhlci4iLGE6Iu2ZlOydtO2MhSEg7KCc6rCAIOydkeybkO2VoOqyjOyalCEiLGFFbjoiRmlnaHRpbmchIEkgd2lsbCBjaGVlciBmb3IgeW91ISIsYWx0Olsi7ZmU7J207YyFISJdfV19LAoxMDp7d2hvOiLimpXvuI8g7JW97IKsIChwaGFybWFjaXN0KSIsIHQ6IkF0IHRoZSBwaGFybWFjeSIsIHR1cm5zOlsKIHtxOiLslrTshJwg7Jik7IS47JqULiDslrTrlJTqsIAg67aI7Y647ZWY7IS47JqUPyIscUVuOiJXZWxjb21lLiBXaGF0IHNlZW1zIHRvIGJlIHRoZSBwcm9ibGVtPyIsdGFzazoiU2F5IHlvdXIgdGhyb2F0IGh1cnRzIGFuZCB5b3UgaGF2ZSBhIGZldmVyLiIsYToi66qp7J20IOyVhO2UhOqzoCDsl7TsnbQg64KY7JqULiIsYUVuOiJNeSB0aHJvYXQgaHVydHMgYW5kIEkgaGF2ZSBhIGZldmVyLiIsYWx0Olsi66qp7J20IOyVhO2MjOyalC4g7Je064+EIOyeiOyWtOyalC4iXX0sCiB7cToi7Ja47KCc67aA7YSwIOyVhO2MoOyWtOyalD8iLHFFbjoiU2luY2Ugd2hlbiBoYXZlIHlvdSBiZWVuIHNpY2s/Iix0YXNrOiJTYXkgc2luY2UgeWVzdGVyZGF5LiIsYToi7Ja07KCc67aA7YSw7JqULiIsYUVuOiJTaW5jZSB5ZXN0ZXJkYXkuIixhbHQ6WyLslrTsoJzrtoDthLAg7JWE7Yyg7Ja07JqULiJdfSwKIHtxOiLqsJDquLDrhKTsmpQuIOydtCDslb3snbQg7J6YIOuTpOyWtOyalC4iLHFFbjoiSXQgaXMgYSBjb2xkLiBUaGlzIG1lZGljaW5lIHdvcmtzIHdlbGwuIix0YXNrOiJBc2sgaG93IG1hbnkgdGltZXMgYSBkYXkgdG8gdGFrZSBpdC4iLGE6Iu2VmOujqOyXkCDrqocg67KIIOuoueyWtOyVvCDtlbTsmpQ/IixhRW46IkhvdyBtYW55IHRpbWVzIGEgZGF5IHNob3VsZCBJIHRha2UgaXQ/IixhbHQ6WyLrqocg67KIIOuoueyWtOyalD8iXX0sCiB7cToi7ZWY66Oo7JeQIOyEuCDrsogsIOyLneyCrCDtm4Tsl5Ag65Oc7IS47JqULiIscUVuOiJUaHJlZSB0aW1lcyBhIGRheSwgYWZ0ZXIgbWVhbHMuIix0YXNrOiJTYXkgeW91IGhhdmUgYSBwZWFudXQgYWxsZXJneSDigJQgaXMgaXQgb2theT8iLGE6IuyggOuKlCDrlYXsvakg7JWM66CI66W06riw6rCAIOyeiOyWtOyalC4g6rSc7LCu7JWE7JqUPyIsYUVuOiJJIGhhdmUgYSBwZWFudXQgYWxsZXJneS4gSXMgaXQgb2theT8iLGFsdDpbIuyVjOugiOultOq4sOqwgCDsnojslrTsmpQuIOq0nOywruyVhOyalD8iXX0sCiB7cToi64SkLCDqtJzssK7slYTsmpQuIO2RuSDsiazshLjsmpQhIixxRW46IlllcywgaXQgaXMgZmluZS4gUmVzdCB3ZWxsISIsdGFzazoiVGhhbmsgdGhlbSBhbmQgc2F5IHlvdSB3aWxsIHJlc3Qgd2VsbC4iLGE6IuqwkOyCrO2VqeuLiOuLpC4g7ZG5IOyJtOqyjOyalCEiLGFFbjoiVGhhbmsgeW91LiBJIHdpbGwgcmVzdCB3ZWxsISIsYWx0Olsi64SkLCDqsJDsgqztlanri4jri6QuIl19XX0sCjExOnt3aG86IvCfmYIg7IKs7J6l64uYIChndWVzdGhvdXNlIG93bmVyKSIsIHQ6IkNoZWNraW5nIGluIGJ5IHRoZSBzZWEiLCB0dXJuczpbCiB7cToi7Ja07IScIOyYpOyEuOyalCEg7JiI7JW97ZWY7IWo7Ja07JqUPyIscUVuOiJXZWxjb21lISBEbyB5b3UgaGF2ZSBhIHJlc2VydmF0aW9uPyIsdGFzazoiU2F5IHllcywgeW91IHJlc2VydmVkIG9ubGluZS4iLGE6IuuEpCwg7Jio65287J247Jy866GcIOyYiOyVve2WiOyWtOyalC4iLGFFbjoiWWVzLCBJIHJlc2VydmVkIG9ubGluZS4iLGFsdDpbIuyYiOyVve2WiOyWtOyalC4iXX0sCiB7cToi64SkLCDtmZXsnbjrkJDslrTsmpQuIOuwqeydgCAyMDPtmLjsmIjsmpQuIixxRW46IkNvbmZpcm1lZC4gWW91ciByb29tIGlzIDIwMy4iLHRhc2s6IkFzayB3aGF0IHRoZSB3aWZpIHBhc3N3b3JkIGlzLiIsYToi7JmA7J207YyM7J20IOu5hOuwgOuyiO2YuOqwgCDrrZDsmIjsmpQ/IixhRW46IldoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/IixhbHQ6WyLsmYDsnbTtjIzsnbQg67mE67CA67KI7Zi4IOyigCDslYzroKQg7KO87IS47JqULiJdfSwKIHtxOiLruYTrsIDrsojtmLjripQg66y47JeQIOu2meyWtCDsnojslrTsmpQuIixxRW46IlRoZSBwYXNzd29yZCBpcyBwb3N0ZWQgb24gdGhlIGRvb3IuIix0YXNrOiJBc2sgd2hhdCB0aW1lIGJyZWFrZmFzdCBzdGFydHMuIixhOiLsobDsi53snYAg66qHIOyLnOyXkCDsi5zsnpHtlbTsmpQ/IixhRW46IldoYXQgdGltZSBkb2VzIGJyZWFrZmFzdCBzdGFydD8iLGFsdDpbIuyVhOy5qOydgCDrqocg7Iuc7JiI7JqUPyJdfSwKIHtxOiLslYTsuaggOOyLnOu2gO2EsCAxMOyLnOq5jOyngOyYiOyalC4iLHFFbjoiRnJvbSA4IHRvIDEwIGluIHRoZSBtb3JuaW5nLiIsdGFzazoiQXNrIGlmIHRoZXJlIGFyZSBmYW1vdXMgc2lnaHRzIG5lYXJieS4iLGE6Iuq3vOyymOyXkCDsnKDrqoXtlZwg6rSA6rSR7KeAIOyeiOyWtOyalD8iLGFFbjoiQXJlIHRoZXJlIGZhbW91cyBzaWdodHMgbmVhcmJ5PyIsYWx0Olsi6re87LKY7JeQIOutkOqwgCDsnKDrqoXtlbTsmpQ/Il19LAoge3E6IuuwlOuLpCDsgrDssYXquLjsnbQg7KCV66eQIOyVhOumhOuLpOybjOyalCEiLHFFbjoiVGhlIHNlYXNpZGUgd2Fsa2luZyBwYXRoIGlzIHJlYWxseSBiZWF1dGlmdWwhIix0YXNrOiJTYXkgdGhlIHNjZW5lcnkgaXMgYW1hemluZyDigJQgdGhhbmsgaGVyLiIsYToi6rK97LmY6rCAIOygleunkCDsoovrhKTsmpQhIOqwkOyCrO2VqeuLiOuLpCEiLGFFbjoiVGhlIHNjZW5lcnkgaXMgYW1hemluZyEgVGhhbmsgeW91ISIsYWx0Olsi7JmALCDsoovrhKTsmpQuIOqwkOyCrO2VqeuLiOuLpCEiXX1dfSwKMTI6e3dobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AgKHN0YXRpb24gYXR0ZW5kYW50KSIsIHQ6IlRoZSBsb3N0IHdhbGxldCIsIHR1cm5zOlsKIHtxOiLrrLTsiqgg7J287J207IS47JqUPyIscUVuOiJXaGF0IGlzIHRoZSBtYXR0ZXI/Iix0YXNrOiJBc2sgZm9yIGhlbHAg4oCUIHlvdSBsb3N0IHlvdXIgd2FsbGV0LiIsYToi64+E7JmA7KO87IS47JqUISDsp4DqsJHsnYQg7J6D7Ja067KE66C47Ja07JqULiIsYUVuOiJQbGVhc2UgaGVscCBtZSEgSSBsb3N0IG15IHdhbGxldC4iLGFsdDpbIuyngOqwkeydhCDsnoPslrTrsoTroLjslrTsmpQuIl19LAoge3E6IuyVhOydtOqzoCEg7Ja065SU7JeQ7IScIOyeg+yWtOuyhOuguOyWtOyalD8iLHFFbjoiT2ggbm8hIFdoZXJlIGRpZCB5b3UgbG9zZSBpdD8iLHRhc2s6IlNheSBvbiB0aGUgc3Vid2F5LCBvbiBsaW5lIDIuIixhOiLsp4DtlZjssqAgMu2YuOyEoOyXkOyEnCDsnoPslrTrsoTroLjslrTsmpQuIixhRW46IkkgbG9zdCBpdCBvbiBzdWJ3YXkgbGluZSAyLiIsYWx0OlsiMu2YuOyEoOyXkOyEnOyalC4iXX0sCiB7cToi7Jyg7Iuk66y87IS87YSw7JeQ7KCE7ZmU7ZWY66m065CY64qU642w7KeA6riI67CU66Gc4oCmIixxRW46Iih2ZXJ5IGZhc3QpIFlvdSBjYW4gY2FsbCB0aGUgbG9zdC1hbmQtZm91bmQgYW5kIHJpZ2h0IG5vd+KApiIsdGFzazoiQXNrIHRoZW0gdG8gc3BlYWsgc2xvd2x5LCBwbGVhc2UuIixhOiLso4TshqHtlZjsp4Drp4wsIOyynOyynO2eiCDrp5DtlbQg7KO87IS47JqULiIsYUVuOiJTb3JyeSwgYnV0IHBsZWFzZSBzcGVhayBzbG93bHkuIixhbHQ6WyLsspzsspztnogg66eQ7ZW0IOyjvOyEuOyalC4iXX0sCiB7cToi7JWELCDrhKQhIOycoOyLpOusvOyEvO2EsOyXkCDsoITtmZTtlbQg67O07IS47JqULiIscUVuOiJBaCwgc3VyZSEgVHJ5IGNhbGxpbmcgdGhlIGxvc3QtYW5kLWZvdW5kIGNlbnRlci4iLHRhc2s6IlNheSB5b3UgdW5kZXJzdGFuZCDigJQgYXNrIHRoZW0gdG8gc2F5IHRoZSBudW1iZXIgYWdhaW4uIixhOiLslYzqsqDslrTsmpQuIOuyiO2YuOulvCDri6Tsi5wg7ZWc67KIIOunkO2VtCDso7zshLjsmpQuIixhRW46IlVuZGVyc3Rvb2QuIFBsZWFzZSBzYXkgdGhlIG51bWJlciBvbmUgbW9yZSB0aW1lLiIsYWx0Olsi64uk7IucIO2VnOuyiCDrp5DtlbQg7KO87IS47JqULiJdfSwKIHtxOiIwMi02MTEwLTExMjLsmIjsmpQuIOq8rSDssL7snYQg6rGw7JiI7JqUISIscUVuOiJJdCBpcyAwMi02MTEwLTExMjIuIFlvdSB3aWxsIHN1cmVseSBmaW5kIGl0ISIsdGFzazoiVGhhbmsgdGhlbSBzaW5jZXJlbHkgZm9yIHRoZSBoZWxwLiIsYToi7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEg7YGwIOuPhOybgOydtCDrkJDslrTsmpQhIixhRW46IlRoYW5rIHlvdSBzbyBtdWNoISBZb3Ugd2VyZSBhIGJpZyBoZWxwISIsYWx0Olsi7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEiXX1dfQp9OwoKLyogPT09PT09PT09PT09PT09IFNUQVRFID09PT09PT09PT09PT09PSAqLwpjb25zdCBTQVZFX0tFWSA9ICJ0b21zS29yZWFuUXVlc3RWMSI7CmxldCBzYXZlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTQVZFX0tFWSkgfHwgIm51bGwiKSB8fCB7IHhwOjAsIGxldmVsOjEsIGJlc3RDb21ibzowLCBsZXNzb25zOnt9IH07CmZ1bmN0aW9uIGxzdGF0ZShuKSB7CiAgaWYgKCFzYXZlLmxlc3NvbnNbbl0pIHNhdmUubGVzc29uc1tuXSA9IHsga25vd246W10sIHNwb2tlbjpbXSwgc3RhcnM6e2xlYXJuOmZhbHNlLCBib3NzOmZhbHNlLCBzcGVhazpmYWxzZSwgc3Rvcnk6ZmFsc2UsIHRhbGs6ZmFsc2V9IH07CiAgcmV0dXJuIHNhdmUubGVzc29uc1tuXTsKfQpsZXQgY3VyID0gbnVsbDsgICAgICAvLyBjdXJyZW50IGxlc3NvbiBvYmplY3QKbGV0IGxlYXJuSWR4ID0gMCwgc3BlYWtJZHggPSAwOwpjb25zdCBSQU5LUyA9IFsiSGFuZ2V1bCBIYXRjaGxpbmciLCJLaW1jaGkgQ2FkZXQiLCJTZW91bCBTY2hvbGFyIiwiSGFuYm9rIEhlcm8iLCJCaWJpbWJhcCBCb3NzIiwiSy1Qb3AgUHJvZGlneSIsIlRPUElLIFRpdGFuIiwiSy1EcmFtYSBMZWdlbmQiXTsKZnVuY3Rpb24geHBGb3JMZXZlbChsdikgeyByZXR1cm4gbHYgKiAxMDA7IH0KZnVuY3Rpb24gcGVyc2lzdCgpIHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU0FWRV9LRVksIEpTT04uc3RyaW5naWZ5KHNhdmUpKTsgfQoKZnVuY3Rpb24gcmVuZGVySHVkKCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodWRMZXZlbCIpLnRleHRDb250ZW50ID0gc2F2ZS5sZXZlbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHVkUmFuayIpLnRleHRDb250ZW50ID0gUkFOS1NbTWF0aC5taW4oc2F2ZS5sZXZlbCAtIDEsIFJBTktTLmxlbmd0aCAtIDEpXTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHVkWHAiKS50ZXh0Q29udGVudCA9IHNhdmUueHA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh1ZE5leHQiKS50ZXh0Q29udGVudCA9IHhwRm9yTGV2ZWwoc2F2ZS5sZXZlbCkgLSBzYXZlLnhwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cEZpbGwiKS5zdHlsZS53aWR0aCA9IE1hdGgubWluKDEwMCwgc2F2ZS54cCAvIHhwRm9yTGV2ZWwoc2F2ZS5sZXZlbCkgKiAxMDApICsgIiUiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodWRTdHJlYWsiKS50ZXh0Q29udGVudCA9IHNhdmUuc3RyZWFrID8gc2F2ZS5zdHJlYWsuY291bnQgOiAwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodWRXb3JkcyIpLnRleHRDb250ZW50ID0KICAgIE9iamVjdC52YWx1ZXMoc2F2ZS5sZXNzb25zKS5yZWR1Y2UoKGEsIGwpID0+IGEgKyAobC5rbm93biA/IGwua25vd24ubGVuZ3RoIDogMCksIDApOwp9CmZ1bmN0aW9uIGdhaW5YcChuKSB7CiAgbiArPSBzdHJlYWtUaWNrKCk7IC8vIGZpcnN0IGFjdGlvbiBvZiB0aGUgZGF5IGV4dGVuZHMgdGhlIHN0cmVhayAoK2JvbnVzKQogIHNhdmUueHAgKz0gbjsKICB3aGlsZSAoc2F2ZS54cCA+PSB4cEZvckxldmVsKHNhdmUubGV2ZWwpKSB7IHNhdmUueHAgLT0geHBGb3JMZXZlbChzYXZlLmxldmVsKTsgc2F2ZS5sZXZlbCsrOyBsZXZlbFVwRngoKTsgfQogIHBlcnNpc3QoKTsgcmVuZGVySHVkKCk7CiAgaWYgKCFpbkFjaCkgeyBpbkFjaCA9IHRydWU7IHRyeSB7IGNoZWNrQWNoKCk7IH0gZmluYWxseSB7IGluQWNoID0gZmFsc2U7IH0gfQp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIE1PVElWQVRJT04gTEFZRVIg4oCUIGRhaWx5IHN0cmVhaywgZGFpbHkgZ29hbHMsIGFjaGlldmVtZW50cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIHRvZGF5U3RyKG9mZnNldERheXMgPSAwKSB7CiAgY29uc3QgZCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBvZmZzZXREYXlzICogODY0MDAwMDApOwogIHJldHVybiBkLmdldEZ1bGxZZWFyKCkgKyAiLSIgKyBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgIjAiKSArICItIiArIFN0cmluZyhkLmdldERhdGUoKSkucGFkU3RhcnQoMiwgIjAiKTsKfQpmdW5jdGlvbiBzdHJlYWtUaWNrKCkgewogIGlmICghc2F2ZS5zdHJlYWspIHNhdmUuc3RyZWFrID0geyBjb3VudDogMCwgbGFzdDogIiIsIGJlc3Q6IDAgfTsKICBjb25zdCB0ID0gdG9kYXlTdHIoKTsKICBpZiAoc2F2ZS5zdHJlYWsubGFzdCA9PT0gdCkgcmV0dXJuIDA7CiAgc2F2ZS5zdHJlYWsuY291bnQgPSBzYXZlLnN0cmVhay5sYXN0ID09PSB0b2RheVN0cigtMSkgPyBzYXZlLnN0cmVhay5jb3VudCArIDEgOiAxOwogIHNhdmUuc3RyZWFrLmxhc3QgPSB0OwogIHNhdmUuc3RyZWFrLmJlc3QgPSBNYXRoLm1heChzYXZlLnN0cmVhay5iZXN0LCBzYXZlLnN0cmVhay5jb3VudCk7CiAgY29uc3QgYm9udXMgPSA1ICogTWF0aC5taW4oc2F2ZS5zdHJlYWsuY291bnQsIDUpOyAvLyBkYXkgMTogKzUg4oCmIGRheSA1KzogKzI1CiAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGIuY2xhc3NOYW1lID0gImxldmVsdXAtYmFubmVyIjsKICBiLnRleHRDb250ZW50ID0gIvCflKUgRGF5ICIgKyBzYXZlLnN0cmVhay5jb3VudCArICIgc3RyZWFrISArIiArIGJvbnVzICsgIiBYUCI7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiKTsgc2V0VGltZW91dCgoKSA9PiBiLnJlbW92ZSgpLCAyMTAwKTsKICBzZngud2luKCk7CiAgcmV0dXJuIGJvbnVzOwp9Ci8qIC0tLSBkYWlseSBnb2FscyAtLS0gKi8KZnVuY3Rpb24gZGFpbHkoKSB7CiAgY29uc3QgdCA9IHRvZGF5U3RyKCk7CiAgaWYgKCFzYXZlLmRhaWx5IHx8IHNhdmUuZGFpbHkuZGF0ZSAhPT0gdCkgc2F2ZS5kYWlseSA9IHsgZGF0ZTogdCwgd29yZHM6IDAsIHByb246IDAsIGNvbnZvOiAwLCBjbGFpbWVkOiBmYWxzZSB9OwogIHJldHVybiBzYXZlLmRhaWx5Owp9CmZ1bmN0aW9uIGRhaWx5QnVtcChrKSB7CiAgY29uc3QgZCA9IGRhaWx5KCk7CiAgZFtrXSsrOwogIHBlcnNpc3QoKTsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcCIpLmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIikpIHJlbmRlckRhaWx5KCk7Cn0KZnVuY3Rpb24gZGFpbHlDbGFpbSgpIHsKICBjb25zdCBkID0gZGFpbHkoKTsKICBpZiAoZC5jbGFpbWVkIHx8ICEoZC53b3JkcyA+PSA1ICYmIGQucHJvbiA+PSAzICYmIGQuY29udm8gPj0gMSkpIHJldHVybjsKICBkLmNsYWltZWQgPSB0cnVlOyBwZXJzaXN0KCk7CiAgZ2FpblhwKDMwKTsgY29uZmV0dGkoKTsgc2Z4LndpbigpOwogIHJlbmRlckRhaWx5KCk7Cn0KZnVuY3Rpb24gcmVuZGVyRGFpbHkoKSB7CiAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhaWx5Qm94Iik7CiAgaWYgKCFib3gpIHJldHVybjsKICBjb25zdCBkID0gZGFpbHkoKTsKICBjb25zdCBzdCA9IHNhdmUuc3RyZWFrIHx8IHsgY291bnQ6IDAsIGJlc3Q6IDAgfTsKICBjb25zdCBnb2FscyA9IFsKICAgIHsgbGFiZWw6ICJMZWFybiA1IG5ldyB3b3JkcyIsIGN1cjogTWF0aC5taW4oZC53b3JkcywgNSksIG1heDogNSB9LAogICAgeyBsYWJlbDogIjMgZ29vZCBwcm9udW5jaWF0aW9ucyDwn46kIiwgY3VyOiBNYXRoLm1pbihkLnByb24sIDMpLCBtYXg6IDMgfSwKICAgIHsgbGFiZWw6ICJGaW5pc2ggMSBzdG9yeSBvciBjb252ZXJzYXRpb24iLCBjdXI6IE1hdGgubWluKGQuY29udm8sIDEpLCBtYXg6IDEgfSwKICBdOwogIGNvbnN0IGFsbERvbmUgPSBnb2Fscy5ldmVyeShnID0+IGcuY3VyID49IGcubWF4KTsKICBjb25zdCB0b3RXID0gTEVTU09OUy5yZWR1Y2UoKGEsIEwpID0+IGEgKyBMLndvcmRzLmxlbmd0aCwgMCk7CiAgY29uc3Qgc3RhcnNFYXJuZWQgPSBPYmplY3QuZW50cmllcyhzYXZlLmxlc3NvbnMpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAiUiIpCiAgICAucmVkdWNlKChhLCBbLCBsXSkgPT4gYSArIE9iamVjdC52YWx1ZXMobC5zdGFycyB8fCB7fSkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCwgMCk7CiAgc2F2ZS5hY2ggPSBzYXZlLmFjaCB8fCBbXTsKICBjb25zdCBhY2hFbW9qaXMgPSBBQ0guZmlsdGVyKGEgPT4gc2F2ZS5hY2guaW5jbHVkZXMoYS5pZCkpLm1hcChhID0+IGA8c3BhbiB0aXRsZT0iJHthLnR9Ij4ke2EuZX08L3NwYW4+YCkuam9pbigiICIpOwogIGJveC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0iZGFpbHkiPgogICAgPGgzPjxzcGFuPvCfjq8gVG9kYXkncyBnb2Fsczwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyZWFrbGJsIj7wn5SlICR7c3QuY291bnR9LWRheSBzdHJlYWsgwrcgYmVzdCAke3N0LmJlc3R9PC9zcGFuPjwvaDM+CiAgICAke2dvYWxzLm1hcChnID0+IGA8ZGl2IGNsYXNzPSJnb2FsICR7Zy5jdXIgPj0gZy5tYXggPyAiZG9uZSIgOiAiIn0iPgogICAgICA8c3Bhbj4ke2cuY3VyID49IGcubWF4ID8gIuKchSIgOiAi4qycIn08L3NwYW4+PHNwYW4gY2xhc3M9ImdsYWJlbCI+JHtnLmxhYmVsfTwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYmFyIj48aSBzdHlsZT0id2lkdGg6JHtnLmN1ciAvIGcubWF4ICogMTAwfSUiPjwvaT48L2Rpdj48c3Bhbj4ke2cuY3VyfS8ke2cubWF4fTwvc3Bhbj48L2Rpdj5gKS5qb2luKCIiKX0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBjbGFpbWJ0biIgJHtkLmNsYWltZWQgfHwgIWFsbERvbmUgPyAnZGlzYWJsZWQgc3R5bGU9Im9wYWNpdHk6LjU1IicgOiAiIn0gb25jbGljaz0iZGFpbHlDbGFpbSgpIj4KICAgICAgJHtkLmNsYWltZWQgPyAi4pyFIENsYWltZWQg4oCUIGNvbWUgYmFjayB0b21vcnJvdyBmb3IgZGF5ICIgKyAoc3QuY291bnQgKyAxKSArICIhIiA6IGFsbERvbmUgPyAi8J+OgSBDbGFpbSArMzAgWFAiIDogIvCfjoEgKzMwIFhQIHdoZW4gYWxsIHRocmVlIGFyZSBkb25lIn08L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9ImFjaHJvdyI+PHNwYW4gY2xhc3M9ImFjaGNvdW50Ij7wn4+FICR7c2F2ZS5hY2gubGVuZ3RofS8ke0FDSC5sZW5ndGh9PC9zcGFuPiR7YWNoRW1vamlzfTwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJvZ2xpbmUiPvCfk5ogJHt0b3RhbExlYXJuZWQoKX0vJHt0b3RXfSB3b3JkcyDCtyDirZAgJHtzdGFyc0Vhcm5lZH0vJHtMRVNTT05TLmxlbmd0aCAqIDV9IHN0YXJzIMK3IPCfjpYgJHt0b3RhbFByb24oKX0gcHJvbm91bmNlZDwvZGl2PgogIDwvZGl2PmA7Cn0KLyogLS0tIGFjaGlldmVtZW50cyAtLS0gKi8KY29uc3QgdG90YWxMZWFybmVkID0gKCkgPT4gT2JqZWN0LnZhbHVlcyhzYXZlLmxlc3NvbnMpLnJlZHVjZSgoYSwgbCkgPT4gYSArIChsLmtub3duID8gbC5rbm93bi5sZW5ndGggOiAwKSwgMCk7CmNvbnN0IHRvdGFsUHJvbiA9ICgpID0+IE9iamVjdC52YWx1ZXMoc2F2ZS5sZXNzb25zKS5yZWR1Y2UoKGEsIGwpID0+IGEgKyAobC5wcm9uID8gbC5wcm9uLmxlbmd0aCA6IDApLCAwKTsKY29uc3QgYW55U3RhciA9IGsgPT4gT2JqZWN0LmVudHJpZXMoc2F2ZS5sZXNzb25zKS5zb21lKChba2V5LCBsXSkgPT4ga2V5ICE9PSAiUiIgJiYgbC5zdGFycyAmJiBsLnN0YXJzW2tdKTsKY29uc3QgQUNIID0gWwogIHsgaWQ6ICJ3MSIsICAgZTogIvCfkKMiLCB0OiAiRmlyc3Qgd29yZCBsZWFybmVkIiwgICAgICAgICAgICBjb25kOiAoKSA9PiB0b3RhbExlYXJuZWQoKSA+PSAxIH0sCiAgeyBpZDogIncyNSIsICBlOiAi8J+MsSIsIHQ6ICIyNSB3b3JkcyBsZWFybmVkIiwgICAgICAgICAgICAgIGNvbmQ6ICgpID0+IHRvdGFsTGVhcm5lZCgpID49IDI1IH0sCiAgeyBpZDogInc1MCIsICBlOiAi8J+TmiIsIHQ6ICI1MCB3b3JkcyBsZWFybmVkIiwgICAgICAgICAgICAgIGNvbmQ6ICgpID0+IHRvdGFsTGVhcm5lZCgpID49IDUwIH0sCiAgeyBpZDogIncxMDAiLCBlOiAi8J+TliIsIHQ6ICIxMDAgd29yZHMgbGVhcm5lZCIsICAgICAgICAgICAgIGNvbmQ6ICgpID0+IHRvdGFsTGVhcm5lZCgpID49IDEwMCB9LAogIHsgaWQ6ICJ3MjAwIiwgZTogIvCfj4YiLCB0OiAiMjAwIHdvcmRzIGxlYXJuZWQiLCAgICAgICAgICAgICBjb25kOiAoKSA9PiB0b3RhbExlYXJuZWQoKSA+PSAyMDAgfSwKICB7IGlkOiAicDEwIiwgIGU6ICLwn46WIiwgdDogIjEwIHdvcmRzIHByb25vdW5jZWQgcmlnaHQiLCAgICAgY29uZDogKCkgPT4gdG90YWxQcm9uKCkgPj0gMTAgfSwKICB7IGlkOiAicDUwIiwgIGU6ICLwn46ZIiwgdDogIjUwIHdvcmRzIHByb25vdW5jZWQgcmlnaHQiLCAgICAgY29uZDogKCkgPT4gdG90YWxQcm9uKCkgPj0gNTAgfSwKICB7IGlkOiAiYzEiLCAgIGU6ICLwn5KsIiwgdDogIkZpcnN0IGNvbnZlcnNhdGlvbiBmaW5pc2hlZCIsICAgY29uZDogKCkgPT4gYW55U3RhcigidGFsayIpIH0sCiAgeyBpZDogImIxIiwgICBlOiAi4pqU77iPIiwgdDogIkZpcnN0IGJvc3MgZGVmZWF0ZWQiLCAgICAgICAgICAgY29uZDogKCkgPT4gYW55U3RhcigiYm9zcyIpIH0sCiAgeyBpZDogInE1IiwgICBlOiAi8J+MnyIsIHQ6ICJBIHF1ZXN0IGZ1bGx5IHN0YXJyZWQiLCAgICAgICAgIGNvbmQ6ICgpID0+IE9iamVjdC5lbnRyaWVzKHNhdmUubGVzc29ucykuc29tZSgoW2ssIGxdKSA9PiBrICE9PSAiUiIgJiYgbC5zdGFycyAmJiBsLnN0YXJzLmxlYXJuICYmIGwuc3RhcnMuc3RvcnkgJiYgbC5zdGFycy50YWxrICYmIGwuc3RhcnMuc3BlYWsgJiYgbC5zdGFycy5ib3NzKSB9LAogIHsgaWQ6ICJzMyIsICAgZTogIvCflKUiLCB0OiAiMy1kYXkgc3RyZWFrIiwgICAgICAgICAgICAgICAgICBjb25kOiAoKSA9PiAoc2F2ZS5zdHJlYWsgPyBzYXZlLnN0cmVhay5iZXN0IDogMCkgPj0gMyB9LAogIHsgaWQ6ICJzNyIsICAgZTogIvCfjIsiLCB0OiAiNy1kYXkgc3RyZWFrIiwgICAgICAgICAgICAgICAgICBjb25kOiAoKSA9PiAoc2F2ZS5zdHJlYWsgPyBzYXZlLnN0cmVhay5iZXN0IDogMCkgPj0gNyB9LApdOwpsZXQgaW5BY2ggPSBmYWxzZTsKZnVuY3Rpb24gY2hlY2tBY2goKSB7CiAgc2F2ZS5hY2ggPSBzYXZlLmFjaCB8fCBbXTsKICBmb3IgKGNvbnN0IGEgb2YgQUNIKSB7CiAgICBpZiAoIXNhdmUuYWNoLmluY2x1ZGVzKGEuaWQpICYmIGEuY29uZCgpKSB7CiAgICAgIHNhdmUuYWNoLnB1c2goYS5pZCk7IHBlcnNpc3QoKTsKICAgICAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBiLmNsYXNzTmFtZSA9ICJsZXZlbHVwLWJhbm5lciI7CiAgICAgIGIudGV4dENvbnRlbnQgPSAi8J+PhSAiICsgYS5lICsgIiAiICsgYS50ICsgIiEgKzE1IFhQIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiKTsgc2V0VGltZW91dCgoKSA9PiBiLnJlbW92ZSgpLCAyMTAwKTsKICAgICAgY29uZmV0dGkoKTsgc2Z4LndpbigpOwogICAgICBnYWluWHAoMTUpOyAvLyBpbkFjaCBndWFyZCBwcmV2ZW50cyByZS1lbnRyeQogICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcCIpLmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIikpIHJlbmRlckRhaWx5KCk7CiAgICB9CiAgfQp9CgovKiA9PT09PT09PT09PT09PT0gU09VTkQgJiBGWCA9PT09PT09PT09PT09PT0gKi8KbGV0IGF1ZGlvQ3R4OwpmdW5jdGlvbiBiZWVwKGZyZXEsIGR1ciwgdHlwZSA9ICJzaW5lIiwgdm9sID0gMC4xNSkgewogIHRyeSB7CiAgICBhdWRpb0N0eCA9IGF1ZGlvQ3R4IHx8IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgY29uc3QgbyA9IGF1ZGlvQ3R4LmNyZWF0ZU9zY2lsbGF0b3IoKSwgZyA9IGF1ZGlvQ3R4LmNyZWF0ZUdhaW4oKTsKICAgIG8udHlwZSA9IHR5cGU7IG8uZnJlcXVlbmN5LnZhbHVlID0gZnJlcTsKICAgIGcuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2b2wsIGF1ZGlvQ3R4LmN1cnJlbnRUaW1lKTsKICAgIGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAxLCBhdWRpb0N0eC5jdXJyZW50VGltZSArIGR1cik7CiAgICBvLmNvbm5lY3QoZyk7IGcuY29ubmVjdChhdWRpb0N0eC5kZXN0aW5hdGlvbik7CiAgICBvLnN0YXJ0KCk7IG8uc3RvcChhdWRpb0N0eC5jdXJyZW50VGltZSArIGR1cik7CiAgfSBjYXRjaChlKSB7fQp9CmNvbnN0IHNmeCA9IHsKICBnb29kKCkgeyBiZWVwKDY2MCwuMTIpOyBzZXRUaW1lb3V0KCgpPT5iZWVwKDg4MCwuMTUpLDkwKTsgfSwKICBiYWQoKSB7IGJlZXAoMTgwLC4yNSwic2F3dG9vdGgiLC4xKTsgfSwKICB3aW4oKSB7IFs1MjMsNjU5LDc4NCwxMDQ3XS5mb3JFYWNoKChmLGkpPT5zZXRUaW1lb3V0KCgpPT5iZWVwKGYsLjIpLGkqMTMwKSk7IH0sCiAgaGl0KCkgeyBiZWVwKDEyMCwuMTUsInNxdWFyZSIsLjEyKTsgYmVlcCg0MDAsLjA4LCJzYXd0b290aCIsLjA4KTsgfQp9OwpmdW5jdGlvbiBmbG9hdEZ4KHRleHQsIGNvbG9yLCB4LCB5KSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBlbC5jbGFzc05hbWUgPSAiZngtZmxvYXQiOyBlbC50ZXh0Q29udGVudCA9IHRleHQ7IGVsLnN0eWxlLmNvbG9yID0gY29sb3I7CiAgZWwuc3R5bGUubGVmdCA9ICh4ID8/IHdpbmRvdy5pbm5lcldpZHRoLzIgLSAyMCkgKyAicHgiOwogIGVsLnN0eWxlLnRvcCA9ICh5ID8/IHdpbmRvdy5pbm5lckhlaWdodC8yKSArICJweCI7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7IHNldFRpbWVvdXQoKCk9PmVsLnJlbW92ZSgpLCAxMDAwKTsKfQpmdW5jdGlvbiBsZXZlbFVwRngoKSB7CiAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGIuY2xhc3NOYW1lID0gImxldmVsdXAtYmFubmVyIjsgYi50ZXh0Q29udGVudCA9ICLirIbvuI8gTEVWRUwgVVAhIEx2ICIgKyBzYXZlLmxldmVsOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7IHNldFRpbWVvdXQoKCk9PmIucmVtb3ZlKCksIDIxMDApOwogIGNvbmZldHRpKCk7IHNmeC53aW4oKTsKfQpmdW5jdGlvbiBjb25mZXR0aSgpIHsKICBjb25zdCBjb2xvcnMgPSBbIiNDNjhGM0UiLCIjNTAzQUE4IiwiI0IwN0QyOCIsIiMyRjdENEYiXTsKICBmb3IgKGxldCBpID0gMDsgaSA8IDUwOyBpKyspIHsKICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGMuY2xhc3NOYW1lID0gImNvbmZldHRpIjsKICAgIGMuc3R5bGUubGVmdCA9IE1hdGgucmFuZG9tKCkqMTAwICsgInZ3IjsgYy5zdHlsZS50b3AgPSAiLTEwcHgiOwogICAgYy5zdHlsZS5iYWNrZ3JvdW5kID0gY29sb3JzW2kgJSA0XTsKICAgIGMuc3R5bGUuYW5pbWF0aW9uRHVyYXRpb24gPSAoMC45ICsgTWF0aC5yYW5kb20oKSoxLjQpICsgInMiOwogICAgYy5zdHlsZS5ib3JkZXJSYWRpdXMgPSBNYXRoLnJhbmRvbSgpID4gLjUgPyAiNTAlIiA6ICIycHgiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKTsgc2V0VGltZW91dCgoKT0+Yy5yZW1vdmUoKSwgMjUwMCk7CiAgfQp9CgovKiA9PT09PT09PT09PT09PT0gVFRTIChzcGVha2luZyB2b2ljZSkgPT09PT09PT09PT09PT09ICovCmxldCBrb1ZvaWNlID0gbnVsbDsKZnVuY3Rpb24gcGlja1ZvaWNlKCkgewogIGNvbnN0IHZzID0gc3BlZWNoU3ludGhlc2lzLmdldFZvaWNlcygpLmZpbHRlcih2ID0+IHYubGFuZyAmJiB2Lmxhbmcuc3RhcnRzV2l0aCgia28iKSk7CiAgY29uc3Qgd2FudCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJrcVZvaWNlTmFtZSIpOwogIGtvVm9pY2UgPSAod2FudCAmJiB2cy5maW5kKHYgPT4gdi5uYW1lID09PSB3YW50KSkgfHwgdnMuZmluZCh2ID0+IC9ZdW5hfFNvcmF8R29vZ2xlL2kudGVzdCh2Lm5hbWUpKSB8fCB2c1swXSB8fCBudWxsOwp9CmlmICgic3BlZWNoU3ludGhlc2lzIiBpbiB3aW5kb3cpIHsKICBwaWNrVm9pY2UoKTsKICBzcGVlY2hTeW50aGVzaXMub252b2ljZXNjaGFuZ2VkID0gcGlja1ZvaWNlOwp9CmxldCBzYXlUb2tlbiA9IDAsIHNheUtpY2sgPSBudWxsLCB0dHNXYXJuZWQgPSBmYWxzZTsKZnVuY3Rpb24ga3FUdHNXYXJuKCkgewogIGlmICh0dHNXYXJuZWQpIHJldHVybjsKICB0dHNXYXJuZWQgPSB0cnVlOwogIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBiLmNsYXNzTmFtZSA9ICJsZXZlbHVwLWJhbm5lciI7CiAgYi5zdHlsZS5jc3NUZXh0ID0gImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjNTU1LCMzMzMpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjE0cHg7d2hpdGUtc3BhY2U6bm9ybWFsO21heC13aWR0aDozNDBweDthbmltYXRpb246YmFubmVyIDVzIGVhc2UgZm9yd2FyZHM7IjsKICBiLnRleHRDb250ZW50ID0gIvCflIcgVGhpcyBicm93c2VyJ3Mgc3BlZWNoIGVuZ2luZSBpcyBzdHVjay4gUmVzdGFydGluZyB0aGUgYnJvd3NlciB1c3VhbGx5IGJyaW5ncyB0aGUgdm9pY2UgYmFjay4iOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7CiAgc2V0VGltZW91dCgoKSA9PiBiLnJlbW92ZSgpLCA1MTAwKTsKfQovKiB2b2ljZSBzcGVlZDogbGVhcm5lci1jb250cm9sbGVkLCBwZXJzaXN0cyBhY3Jvc3MgdmlzaXRzIChzaGFyZWQgbG9jYWxTdG9yYWdlIGtleSkgKi8KY29uc3QgS1FfSU9TID0gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgKG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gIk1hY0ludGVsIiAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAxKTsKY29uc3QgU1BEX1NURVBTID0gW1sic2xvdyIsIDAuNywgIvCfkKIgU2xvdyJdLCBbIm5vcm1hbCIsIDAuODUsICLilrYgTm9ybWFsIl0sIFsiZmFzdCIsIDEsICLwn5CHIEZhc3QiXV07CmZ1bmN0aW9uIHZvaWNlU3BkKCkgeyBjb25zdCBrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImtxVm9pY2VTcGQiKTsgcmV0dXJuIFNQRF9TVEVQUy5maW5kKHggPT4geFswXSA9PT0gaykgfHwgU1BEX1NURVBTWzFdOyB9CmZ1bmN0aW9uIHJlbmRlclNwZCgpIHsgY29uc3QgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGRCdG4iKTsgaWYgKGIpIGIudGV4dENvbnRlbnQgPSAi8J+OmSBWb2ljZSDCtyAiICsgdm9pY2VTcGQoKVsyXTsgfQpmdW5jdGlvbiBzZXRTcGQoaykgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgia3FWb2ljZVNwZCIsIGspOyByZW5kZXJTcGQoKTsgb3BlblZvaWNlU2V0KCk7IHNheSgi7JWI64WV7ZWY7IS47JqULiDrsJjqsJHsirXri4jri6QuIik7IH0KZnVuY3Rpb24gc2V0Vm9pY2UobmFtZSkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgia3FWb2ljZU5hbWUiLCBuYW1lKTsgcGlja1ZvaWNlKCk7IG9wZW5Wb2ljZVNldCgpOyBzYXkoIuyViOuFle2VmOyEuOyalC4g66eM64KY7IScIOuwmOqwkeyKteuLiOuLpC4iKTsgfQpmdW5jdGlvbiBvcGVuVm9pY2VTZXQoKSB7CiAgY29uc3Qgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxVm9pY2VXcmFwIik7IGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKICBjb25zdCB2cyA9ICgic3BlZWNoU3ludGhlc2lzIiBpbiB3aW5kb3cpID8gc3BlZWNoU3ludGhlc2lzLmdldFZvaWNlcygpLmZpbHRlcih2ID0+IHYubGFuZyAmJiB2Lmxhbmcuc3RhcnRzV2l0aCgia28iKSkgOiBbXTsKICBjb25zdCBjdXIgPSBrb1ZvaWNlID8ga29Wb2ljZS5uYW1lIDogIiI7CiAgY29uc3Qgc3BkID0gdm9pY2VTcGQoKVswXTsKICBjb25zdCB3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgdy5pZCA9ICJrcVZvaWNlV3JhcCI7CiAgdy5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDojMDAwMDAwNzA7ei1pbmRleDo5OTk5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjE2cHg7IjsKICB3LmlubmVySFRNTCA9IGA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWNhcmQpO2JvcmRlci1yYWRpdXM6MTZweDttYXgtd2lkdGg6NDIwcHg7d2lkdGg6MTAwJTttYXgtaGVpZ2h0Ojgwdmg7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE4cHg7Ym94LXNoYWRvdzowIDEwcHggNDBweCByZ2JhKDAsMCwwLC4xMCk7Ij4KICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTdweDttYXJnaW4tYm90dG9tOjEycHg7Y29sb3I6dmFyKC0tdGV4dCk7Ij7wn46ZIFZvaWNlIHNldHRpbmdzPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLWJvdHRvbTo2cHg7Ij5TcGVha2luZyBzcGVlZDwvZGl2PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxNnB4OyI+JHtTUERfU1RFUFMubWFwKHMgPT4KICAgICAgYDxidXR0b24gb25jbGljaz0ic2V0U3BkKCcke3NbMF19JykiIHN0eWxlPSJmbGV4OjE7cGFkZGluZzo5cHggNHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXI6MS41cHggc29saWQgdmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOiR7c1swXSA9PT0gc3BkID8gInZhcigtLWFjY2VudCkiIDogInRyYW5zcGFyZW50In07Y29sb3I6JHtzWzBdID09PSBzcGQgPyAiI2ZmZiIgOiAidmFyKC0tYWNjZW50KSJ9O2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxM3B4OyI+JHtzWzJdfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206NnB4OyI+S29yZWFuIHZvaWNlcyBvbiB0aGlzIGRldmljZSDigJQgdGFwIG9uZSB0byBoZWFyIGl0PC9kaXY+CiAgICAke3ZzLmxlbmd0aCA/IHZzLm1hcCh2ID0+CiAgICAgIGA8YnV0dG9uIG9uY2xpY2s9InNldFZvaWNlKCcke3YubmFtZS5yZXBsYWNlKC8nL2csICJcXCciKX0nKSIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZzo5cHggMTJweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyOjEuNXB4IHNvbGlkICR7di5uYW1lID09PSBjdXIgPyAidmFyKC0tYWNjZW50KSIgOiAidmFyKC0tY2FyZDIpIn07YmFja2dyb3VuZDoke3YubmFtZSA9PT0gY3VyID8gInZhcigtLWNhcmQyKSIgOiAidHJhbnNwYXJlbnQifTtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLXRleHQpOyI+JHt2Lm5hbWUgPT09IGN1ciA/ICLinIUiIDogIvCflIgifSAke3YubmFtZX08L2J1dHRvbj5gKS5qb2luKCIiKQogICAgICA6IGA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLWJvdHRvbTo2cHg7Ij5ObyBLb3JlYW4gdm9pY2UgZm91bmQgb24gdGhpcyBkZXZpY2UgeWV0LjwvZGl2PmB9CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLXRvcDoxMHB4O2xpbmUtaGVpZ2h0OjEuNTU7Ij5Nb3N0IGRldmljZXMgY29tZSB3aXRoIG9uZSBLb3JlYW4gdm9pY2UsIHVzdWFsbHkgYSB3b21hbidzLiBUbyBhZGQgYSBtYW4ncyB2b2ljZTogPGI+aVBob25lIC8gaVBhZCAvIE1hYzwvYj4g4oCUIFNldHRpbmdzIOKGkiBBY2Nlc3NpYmlsaXR5IOKGkiBTcG9rZW4gQ29udGVudCDihpIgVm9pY2VzIOKGkiBLb3JlYW4g4oaSIGRvd25sb2FkIDxiPk1pbnN1PC9iPiwgdGhlbiByZXN0YXJ0IHRoZSBicm93c2VyIGFuZCBpdCBhcHBlYXJzIGluIHRoaXMgbGlzdC4gPGI+V2luZG93czwvYj4g4oCUIHRoZSBFZGdlIGJyb3dzZXIgaW5jbHVkZXMgSW5Kb29uLCBhIEtvcmVhbiBtYW4ncyB2b2ljZS4gPGI+QW5kcm9pZDwvYj4g4oCUIFNldHRpbmdzIOKGkiBUZXh0LXRvLXNwZWVjaCBvdXRwdXQg4oaSIGluc3RhbGwgS29yZWFuIHZvaWNlIGRhdGEuPC9kaXY+CiAgICA8YnV0dG9uIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrcVZvaWNlV3JhcCcpLnJlbW92ZSgpIiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7cGFkZGluZzoxMXB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXI6MDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTVweDsiPkRvbmU8L2J1dHRvbj4KICA8L2Rpdj5gOwogIHcub25jbGljayA9IGUgPT4geyBpZiAoZS50YXJnZXQgPT09IHcpIHcucmVtb3ZlKCk7IH07CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh3KTsKfQpmdW5jdGlvbiBzYXkodGV4dCwgcmF0ZSA9IDAuOSwgb25lbmQpIHsKICBpZiAoISgic3BlZWNoU3ludGhlc2lzIiBpbiB3aW5kb3cpKSB7IGlmIChvbmVuZCkgc2V0VGltZW91dChvbmVuZCwgNjAwKTsgcmV0dXJuOyB9CiAgY29uc3QgbXkgPSArK3NheVRva2VuOwogIHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKTsgfSBjYXRjaCAoZSkge30KICBsZXQgZW5kZWQgPSBmYWxzZSwgc3RhcnRlZCA9IGZhbHNlOwogIGNvbnN0IGZpbmlzaCA9ICgpID0+IHsgaWYgKGVuZGVkKSByZXR1cm47IGVuZGVkID0gdHJ1ZTsgY2xlYXJJbnRlcnZhbChzYXlLaWNrKTsgaWYgKG9uZW5kKSBvbmVuZCgpOyB9OwogIGNvbnN0IG1rID0gKCkgPT4gewogICAgY29uc3QgdSA9IG5ldyBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UodGV4dCk7CiAgICB1LmxhbmcgPSAia28tS1IiOyBpZiAoa29Wb2ljZSkgdS52b2ljZSA9IGtvVm9pY2U7CiAgICAvLyBsZWFybmVyIHNwZWVkIHNldHRpbmcgc2NhbGVzIGV2ZXJ5IHV0dGVyYW5jZTsgaU9TIHZvaWNlcyBydW4gaG90LCBzbyBkYW1wIHRoZW0gZnVydGhlcgogICAgdS5yYXRlID0gTWF0aC5tYXgoMC4zNSwgcmF0ZSAqIHZvaWNlU3BkKClbMV0gKiAoS1FfSU9TID8gMC44NSA6IDEpKTsKICAgIHUub25zdGFydCA9ICgpID0+IHsgc3RhcnRlZCA9IHRydWU7IH07CiAgICB1Lm9uZW5kID0gZmluaXNoOwogICAgdS5vbmVycm9yID0gZmluaXNoOyAvLyBuZXZlciBsZWF2ZSBzdG9yeS9za2lwIGZsb3dzIGhhbmdpbmcgb24gYSBkZWFkIHV0dGVyYW5jZQogICAgd2luZG93Ll9fa3FVID0gdTsgICAvLyBndWFyZCBhZ2FpbnN0IENocm9tZSBnYXJiYWdlLWNvbGxlY3RpbmcgYSBtaWQtc3BlZWNoIHV0dGVyYW5jZQogICAgcmV0dXJuIHU7CiAgfTsKICAvLyBDaHJvbWUgcXVpcmsgMTogc3BlYWsoKSBpbiB0aGUgc2FtZSB0aWNrIGFzIGNhbmNlbCgpIGlzIHNpbGVudGx5IGRyb3BwZWQg4oCUIGRlbGF5IGl0CiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBpZiAobXkgIT09IHNheVRva2VuKSB7IGZpbmlzaCgpOyByZXR1cm47IH0gLy8gYSBuZXdlciBzYXkoKSBzdXBlcnNlZGVkIHRoaXMgb25lCiAgICB0cnkgeyBzcGVlY2hTeW50aGVzaXMuc3BlYWsobWsoKSk7IH0gY2F0Y2ggKGUpIHsgZmluaXNoKCk7IHJldHVybjsgfQogICAgLy8gQ2hyb21lIHF1aXJrIDIgKHRoZSBiaWcgb25lKTogdGhlIGVuZ2luZSBjYW4gaGFuZyB3aXRoIHNwZWFraW5nPXRydWUgYnV0IG5ldmVyCiAgICAvLyBhY3R1YWxseSBzdGFydC4gVGhlIHBhdXNl4oaScmVzdW1lICJkYW5jZSIgdW4td2VkZ2VzIGl0IOKAlCBtZWFzdXJlZCBvbiByZWFsIENocm9tZS4KICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAoc3RhcnRlZCB8fCBlbmRlZCB8fCBteSAhPT0gc2F5VG9rZW4pIHJldHVybjsKICAgICAgdHJ5IHsgc3BlZWNoU3ludGhlc2lzLnBhdXNlKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0cnkgeyBzcGVlY2hTeW50aGVzaXMucmVzdW1lKCk7IH0gY2F0Y2ggKGUpIHt9IH0sIDEyMCk7CiAgICB9LCAzMDApOwogICAgLy8gc3RpbGwgZGVhZCDihpIgaGFyZCByZXRyeSBvbmNlOiBjYW5jZWwsIGZyZXNoIHV0dGVyYW5jZSwgc3BlYWsrZGFuY2UKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAoc3RhcnRlZCB8fCBlbmRlZCB8fCBteSAhPT0gc2F5VG9rZW4pIHJldHVybjsKICAgICAgdHJ5IHsgc3BlZWNoU3ludGhlc2lzLmNhbmNlbCgpOyB9IGNhdGNoIChlKSB7fQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAoc3RhcnRlZCB8fCBlbmRlZCB8fCBteSAhPT0gc2F5VG9rZW4pIHJldHVybjsKICAgICAgICB0cnkgeyBzcGVlY2hTeW50aGVzaXMuc3BlYWsobWsoKSk7IHNwZWVjaFN5bnRoZXNpcy5wYXVzZSgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0cnkgeyBzcGVlY2hTeW50aGVzaXMucmVzdW1lKCk7IH0gY2F0Y2ggKGUpIHt9IH0sIDEyMCk7CiAgICAgIH0sIDE2MCk7CiAgICB9LCAxNTAwKTsKICAgIC8vIHRydWx5IHVucmVjb3ZlcmFibGUg4oaSIHJlc29sdmUgdGhlIGZsb3cgYW5kIHRlbGwgdGhlIHVzZXIgaG9uZXN0bHkKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAoc3RhcnRlZCB8fCBlbmRlZCB8fCBteSAhPT0gc2F5VG9rZW4pIHJldHVybjsKICAgICAga3FUdHNXYXJuKCk7CiAgICAgIGZpbmlzaCgpOwogICAgfSwgMzIwMCk7CiAgfSwgNTApOwogIC8vIENocm9tZSBxdWlyayAzOiBsb25nIHV0dGVyYW5jZXMgc3RhbGwgdW5sZXNzIHRoZSBlbmdpbmUgZ2V0cyBwZXJpb2RpYyByZXN1bWUoKSBwaW5ncwogIGNsZWFySW50ZXJ2YWwoc2F5S2ljayk7CiAgc2F5S2ljayA9IHNldEludGVydmFsKCgpID0+IHsKICAgIGlmICghc3BlZWNoU3ludGhlc2lzLnNwZWFraW5nICYmICFzcGVlY2hTeW50aGVzaXMucGVuZGluZykgY2xlYXJJbnRlcnZhbChzYXlLaWNrKTsKICAgIGVsc2UgeyB0cnkgeyBzcGVlY2hTeW50aGVzaXMucmVzdW1lKCk7IH0gY2F0Y2ggKGUpIHt9IH0KICB9LCAzMDAwKTsKfQovLyBDaHJvbWUgcXVpcmsgMzogdGhlIGVuZ2luZSBjYW4gd2VkZ2UgaW4gYSBwYXVzZWQgc3RhdGUgYWZ0ZXIgY2FuY2VsKCkg4oCUCi8vIGFueSB1c2VyIHRhcCBxdWlldGx5IHVud2VkZ2VzIGl0IHNvIHRoZSBuZXh0IPCflIogYWx3YXlzIHdvcmtzCmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgKCkgPT4geyB0cnkgeyBzcGVlY2hTeW50aGVzaXMucmVzdW1lKCk7IH0gY2F0Y2ggKGUpIHt9IH0sIHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9KTsKCi8qID09PT09PT09PT09PT09PSBOQVYgPT09PT09PT09PT09PT09ICovCmxldCBhY3RpdmVUaW1lciA9IG51bGw7CmZ1bmN0aW9uIHNob3coaWQpIHsKICBjb25zdCBwcmV2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnNjcmVlbi5hY3RpdmUiKTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuc2NyZWVuIikuZm9yRWFjaChzID0+IHMuY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIikpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc0xpc3QuYWRkKCJhY3RpdmUiKTsKICBpZiAocHJldiAmJiBwcmV2LmlkID09PSBpZCkgcmV0dXJuOyAvLyByZS1yZW5kZXIgb2YgdGhlIGN1cnJlbnQgc2NyZWVuOiBzdGF5IHdoZXJlIHRoZSBsZWFybmVyIGlzCiAgLy8gc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIGdhbWUsIG5vdCB0aGUgdG9wIG9mIHRoZSBwYWdlIGl0IGlzIGVtYmVkZGVkIGluCiAgY29uc3QgYXBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxLWFwcCIpOwogIHdpbmRvdy5zY3JvbGxUbygwLCBhcHAgPyBNYXRoLm1heCgwLCBhcHAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gOCkgOiAwKTsKfQpmdW5jdGlvbiBnb01hcCgpIHsgY2xlYXJJbnRlcnZhbChhY3RpdmVUaW1lcik7IGFjdGl2ZVRpbWVyID0gbnVsbDsgaGFyZFN0b3BBdWRpbygpOyByZW5kZXJNYXAoKTsgcmVuZGVySHVkKCk7IHNob3coIm1hcCIpOyB9CmZ1bmN0aW9uIGJhY2tUb0xlc3NvbigpIHsgY2xlYXJJbnRlcnZhbChhY3RpdmVUaW1lcik7IGFjdGl2ZVRpbWVyID0gbnVsbDsgb3Blbkxlc3NvbihjdXIubiwgY3VycmVudFRhYik7IH0KZnVuY3Rpb24gc2h1ZmZsZShhKSB7IGE9Wy4uLmFdOyBmb3IgKGxldCBpPWEubGVuZ3RoLTE7aT4wO2ktLSl7Y29uc3Qgaj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGkrMSkpO1thW2ldLGFbal1dPVthW2pdLGFbaV1dO30gcmV0dXJuIGE7IH0KCi8qID09PT09PT09PT09PT09PSBNQVAgPT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIHN0YXJzT2YobikgewogIGNvbnN0IHMgPSBsc3RhdGUobikuc3RhcnM7CiAgcmV0dXJuIChzLmxlYXJuPyLirZAiOiLimIYiKSArIChzLnN0b3J5PyLirZAiOiLimIYiKSArIChzLnRhbGs/IuKtkCI6IuKYhiIpICsgKHMuc3BlYWs/IuKtkCI6IuKYhiIpICsgKHMuYm9zcz8i4q2QIjoi4piGIik7Cn0KZnVuY3Rpb24gcmVuZGVyTWFwKCkgewogIGNvbnN0IGcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFwR3JpZCIpOwogIGcuaW5uZXJIVE1MID0gIiI7CiAgTEVTU09OUy5mb3JFYWNoKEwgPT4gewogICAgY29uc3Qgc3QgPSBsc3RhdGUoTC5uKTsKICAgIGNvbnN0IHBjdCA9IE1hdGgucm91bmQoc3Qua25vd24ubGVuZ3RoIC8gTC53b3Jkcy5sZW5ndGggKiAxMDApOwogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZC5jbGFzc05hbWUgPSAibGNhcmQiOwogICAgZC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0ibG51bSI+UVVFU1QgJHtTdHJpbmcoTC5uKS5wYWRTdGFydCgyLCIwIil9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlbW9qaSI+JHtMLmVtb2ppfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsa3IiPiR7TC5rcn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGVuIj4ke0wuZW59IMK3ICR7TC52aX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibHN0YXJzIj4ke3N0YXJzT2YoTC5uKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibHByb2ciPjxpIHN0eWxlPSJ3aWR0aDoke3BjdH0lIj48L2k+PC9kaXY+YDsKICAgIGQub25jbGljayA9ICgpID0+IG9wZW5MZXNzb24oTC5uKTsKICAgIGcuYXBwZW5kQ2hpbGQoZCk7CiAgfSk7CiAgLy8gUHJlbWl1bSBjYXJkIChwdWJsaWMgYnVpbGQgb25seSDigJQgUFJFTUlVTV9VUkwgaXMgc2V0IGJ5IHRoZSBwdWJsaXNoIHBpcGVsaW5lKQogIGlmICh0eXBlb2YgUFJFTUlVTV9VUkwgIT09ICJ1bmRlZmluZWQiICYmIFBSRU1JVU1fVVJMKSB7CiAgICBjb25zdCBwbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgcG0uY2xhc3NOYW1lID0gImxjYXJkIjsKICAgIHBtLnN0eWxlLmdyaWRDb2x1bW4gPSAiMSAvIC0xIjsKICAgIHBtLnN0eWxlLmJvcmRlciA9ICIycHggc29saWQgI0IwN0QyOGFhIjsKICAgIHBtLmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJsbnVtIiBzdHlsZT0iY29sb3I6dmFyKC0tZ29sZCkiPkdPIEZVUlRIRVI8L2Rpdj4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDsiPgogICAgICAgIDxkaXYgY2xhc3M9ImxlbW9qaSIgc3R5bGU9Im1hcmdpbjowOyI+8J+PlO+4jzwvZGl2PgogICAgICAgIDxkaXY+PGRpdiBjbGFzcz0ibGtyIj5UaGUgMzAtRGF5IFNwZWFraW5nIFBhdGg8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZW4iPkEgZ3VpZGVkIGRhaWx5IHBsYW4gYW5kIGFuIHVubGltaXRlZCBBSSBzcGVha2luZyBwYXJ0bmVyIHRoYXQgY29ycmVjdHMgZXZlcnkgc2VudGVuY2UuIFNlZSB3aGF0IGl0IGlzIOKGkjwvZGl2PjwvZGl2PgogICAgICA8L2Rpdj5gOwogICAgcG0ub25jbGljayA9ICgpID0+IHsgd2luZG93Lm9wZW4oUFJFTUlVTV9VUkwsICJfYmxhbmsiKTsgfTsKICAgIGcucHJlcGVuZChwbSk7IC8vIHByZXBlbmRlZCBiZWZvcmUgUmV2aWV3L0ZyZWUtVGFsayBwcmVwZW5kcyDihpIgbGFuZHMgdGhpcmQgb24gdGhlIG1hcAogIH0KICAvLyBSZXZpZXcgd29ya291dCBjYXJkIOKAlCByYW5kb20gY29udmVyc2F0aW9uIGFjcm9zcyBzdGFycmVkIGxlc3NvbnMKICBjb25zdCBzdGFycmVkID0gTEVTU09OUy5maWx0ZXIoTCA9PiBsc3RhdGUoTC5uKS5zdGFycy50YWxrKS5sZW5ndGg7CiAgY29uc3QgcnYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBydi5jbGFzc05hbWUgPSAibGNhcmQiOwogIHJ2LnN0eWxlLmdyaWRDb2x1bW4gPSAiMSAvIC0xIjsKICBydi5zdHlsZS5ib3JkZXIgPSAiMnB4IGRhc2hlZCAjQjA3RDI4NjYiOwogIHJ2LmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJsbnVtIj5SRVZJRVcgV09SS09VVDwvZGl2PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDsiPgogICAgICA8ZGl2IGNsYXNzPSJsZW1vamkiIHN0eWxlPSJtYXJnaW46MDsiPvCfjrI8L2Rpdj4KICAgICAgPGRpdj48ZGl2IGNsYXNzPSJsa3IiPlJhbmRvbSBDb252ZXJzYXRpb248L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGVuIj4ke3N0YXJyZWQKICAgICAgICA/IGBNaXhlcyBxdWVzdGlvbnMgZnJvbSB5b3VyICR7c3RhcnJlZH0g4q2QIGNvbnZlcnNhdGlvbiR7c3RhcnJlZCA+IDEgPyAicyIgOiAiIn0g4oCUIGFuc3dlciBieSB2b2ljZSFgCiAgICAgICAgOiAiTm8gVGFsayDirZAgeWV0IOKAlCBtaXhlcyBBTEwgbGVzc29ucyBmb3Igbm93LiBGaW5pc2ggbGVzc29uIHRhbGtzIHRvIGZvY3VzIHRoZSBtaXghIn08L2Rpdj48L2Rpdj4KICAgIDwvZGl2PmA7CiAgcnYub25jbGljayA9IG9wZW5SZXZpZXc7CiAgZy5wcmVwZW5kKHJ2KTsKICAvLyBGcmVlIFRhbGsgY2FyZAogIGNvbnN0IGZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgZnQuY2xhc3NOYW1lID0gImxjYXJkIjsKICBmdC5zdHlsZS5ncmlkQ29sdW1uID0gIjEgLyAtMSI7CiAgZnQuc3R5bGUuYm9yZGVyID0gIjJweCBkYXNoZWQgIzUwM0FBODY2IjsKICBmdC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0ibG51bSI+RlJFRSBUQUxLPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4OyI+CiAgICAgIDxkaXYgY2xhc3M9ImxlbW9qaSIgc3R5bGU9Im1hcmdpbjowOyI+8J+OmTwvZGl2PgogICAgICA8ZGl2PjxkaXYgY2xhc3M9ImxrciI+U3BlYWsgYWJvdXQgYW55dGhpbmc8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGVuIj5PcGVuIGNvbnZlcnNhdGlvbiDigJQgeW91IHRhbGssIHRoZSBnYW1lIGxpc3RlbnMgYW5kIGFuc3dlcnMuIE9wdGlvbmFsIENsYXVkZSBBSSBtb2RlIGZvciB1bmxpbWl0ZWQgdG9waWNzLjwvZGl2PjwvZGl2PgogICAgPC9kaXY+YDsKICBmdC5vbmNsaWNrID0gb3BlbkZyZWU7CiAgZy5wcmVwZW5kKGZ0KTsKICByZW5kZXJEYWlseSgpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEZSRUUgVEFMSyDigJQgb3BlbiB2b2ljZSBjb252ZXJzYXRpb24uCiAgIEVuZ2luZSAxIChidWlsdC1pbiwgZnJlZSk6IHRvcGljLWF3YXJlIEtvcmVhbiBjaGF0Ym90IHVzaW5nIHRleHRib29rIHRoZW1lcy4KICAgRW5naW5lIDIgKG9wdGlvbmFsKTogQ2xhdWRlIEFQSSB3aXRoIHRoZSB1c2VyJ3Mgb3duIGtleSAoc3RvcmVkIGxvY2FsbHkpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmNvbnN0IEZUX1RPUElDUyA9IHsKICB3ZWF0aGVyOiB7IG1hdGNoOiAv64Kg7JSofOu5hOqwgHzruYQg7JmAfOuIiOydtHzrjaV87LaU7JuMfOy2lOyatHzrp5F87Z2Q66asfOuwlOuejC8sIG5hbWU6ICLrgqDslKgiLAogICAgcTogW1si7Jik64qYIOuCoOyUqOqwgCDslrTrlYzsmpQ/IiwiSG93IGlzIHRoZSB3ZWF0aGVyIHRvZGF5PyJdLFsi7Ja065akIOuCoOyUqOulvCDsoovslYTtlbTsmpQ/IiwiV2hhdCB3ZWF0aGVyIGRvIHlvdSBsaWtlPyJdLFsi67mE6rCAIOyYrCDrlYwg67O07Ya1IOutkCDtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgdXN1YWxseSBkbyB3aGVuIGl0IHJhaW5zPyJdXSB9LAogIGZvb2Q6IHsgbWF0Y2g6IC/rqLl87J2M7IudfOuwpXzrp5vsnoh866eb7JeGfOyalOumrHzrsLDqs6B86rmA7LmYfOu2iOqzoOq4sHzrnbzrqbQvLCBuYW1lOiAi7J2M7IudIiwKICAgIHE6IFtbIuustOyKqCDsnYzsi53snYQg7KCc7J28IOyii+yVhO2VtOyalD8iLCJXaGF0IGZvb2QgZG8geW91IGxpa2UgbW9zdD8iXSxbIu2VnOq1rSDsnYzsi50g7KSR7JeQ7IScIOutkOqwgCDsoJzsnbwg66eb7J6I7Ja07JqUPyIsIldoaWNoIEtvcmVhbiBmb29kIGlzIHRoZSB0YXN0aWVzdD8iXSxbIuyalOumrOulvCDsnpDso7wg7ZW07JqUPyIsIkRvIHlvdSBjb29rIG9mdGVuPyJdLFsi7Jik64qYIOutkCDrqLnsl4jslrTsmpQ/IiwiV2hhdCBkaWQgeW91IGVhdCB0b2RheT8iXV0gfSwKICBmYW1pbHk6IHsgbWF0Y2g6IC/qsIDsobF87JeE66eIfOyVhOu5oHzslrTrqLjri4h87JWE67KE7KeAfOuPmeyDnXzriITrgph87Ja464uIfO2YlXzsmKTruaB87JWE64K0fOuCqO2OuHzrtoDrqqgvLCBuYW1lOiAi6rCA7KGxIiwKICAgIHE6IFtbIuqwgOyhseydtCDrqocg66qF7J207JeQ7JqUPyIsIkhvdyBtYW55IHBlb3BsZSBhcmUgaW4geW91ciBmYW1pbHk/Il0sWyLqsIDsobHtlZjqs6Ag662QIO2VmOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqUPyIsIldoYXQgZG8geW91IGxpa2UgdG8gZG8gd2l0aCB5b3VyIGZhbWlseT8iXSxbIuqwgOyhsSDspJHsl5DshJwg64iE6rWs66W8IOygnOydvCDri67slZjslrTsmpQ/IiwiV2hvIGluIHlvdXIgZmFtaWx5IGRvIHlvdSByZXNlbWJsZSBtb3N0PyJdXSB9LAogIHRyYXZlbDogeyBtYXRjaDogL+yXrO2WiXzsoJzso7x867CU64ukfOyCsHzqtIDqtJF867mE7ZaJ6riwfO2YuO2FlHztnLTqsIB867Cp7ZWZLywgbmFtZTogIuyXrO2WiSIsCiAgICBxOiBbWyLslrTrlJTroZwg7Jes7ZaJIOqwgOqzoCDsi7bslrTsmpQ/IiwiV2hlcmUgZG8geW91IHdhbnQgdG8gdHJhdmVsPyJdLFsi7KCc7KO864+E7JeQIOqwgCDrs7gg7KCB7J20IOyeiOyWtOyalD8iLCJIYXZlIHlvdSBiZWVuIHRvIEplanUgSXNsYW5kPyJdLFsi7Jes7ZaJ7ZWgIOuVjCDrrZAg7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgbGlrZSBkb2luZyB3aGVuIHlvdSB0cmF2ZWw/Il1dIH0sCiAgbW92aWVzOiB7IG1hdGNoOiAv7JiB7ZmUfOuTnOudvOuniHzrsLDsmrB867O064uk6rCAfOyerOuvuOyeiHzrrLTshJx87Iqs7ZSEfOy9lOuvuOuUlC8sIG5hbWU6ICLsmIHtmZQiLAogICAgcTogW1si66y07IqoIOyYge2ZlOulvCDsoovslYTtlbTsmpQ/IiwiV2hhdCBtb3ZpZXMgZG8geW91IGxpa2U/Il0sWyLstZzqt7zsl5Ag662QIOu0pOyWtOyalD8iLCJXaGF0IGRpZCB5b3Ugd2F0Y2ggcmVjZW50bHk/Il0sWyLsoovslYTtlZjripQg67Cw7Jqw6rCAIOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSBhIGZhdm9yaXRlIGFjdG9yPyJdXSB9LAogIHN0dWR5OiB7IG1hdGNoOiAv6rO167aAfO2VnOq1reyWtHzsi5ztl5h87Yag7ZS9fOuLqOyWtHzrsLDsmrB87ZWZ6rWQfOyImOyXhXzssYUvLCBuYW1lOiAi6rO167aAIiwKICAgIHE6IFtbIu2VnOq1reyWtOulvCDsmZwg6rO167aA7ZW07JqUPyIsIldoeSBkbyB5b3Ugc3R1ZHkgS29yZWFuPyJdLFsi7ZWc6rWt7Ja0IOqzteu2gO2VnCDsp4Ag7Ja866eI64KYIOuQkOyWtOyalD8iLCJIb3cgbG9uZyBoYXZlIHlvdSBzdHVkaWVkIEtvcmVhbj8iXSxbIuutkOqwgCDsoJzsnbwg7Ja066Ck7JuM7JqUPyIsIldoYXQgaXMgdGhlIG1vc3QgZGlmZmljdWx0IHBhcnQ/Il1dIH0sCiAgd29yazogeyBtYXRjaDogL+ydvHztmozsgqx867CU7IGYfOyngeyepXzstpzqt7x87IKs7J6lfOyblOq4iXzst6jsp4EvLCBuYW1lOiAi7J28IiwKICAgIHE6IFtbIuustOyKqCDsnbzsnYQg7ZW07JqUPyIsIldoYXQgd29yayBkbyB5b3UgZG8/Il0sWyLsmpTsppgg66eO7J20IOuwlOu5oOyalD8iLCJBcmUgeW91IHZlcnkgYnVzeSB0aGVzZSBkYXlzPyJdLFsi7Ja065akIOyngeyXheydhCDqsJbqs6Ag7Iu27Ja07JqUPyIsIldoYXQgam9iIGRvIHlvdSB3YW50IHRvIGhhdmU/Il1dIH0sCiAgd2Vla2VuZDogeyBtYXRjaDogL+yjvOunkHzthqDsmpTsnbx87J287JqU7J28fOyVveyGjXzsuZzqtax866eM64KYfOyJrC8sIG5hbWU6ICLso7zrp5AiLAogICAgcTogW1si7KO866eQ7JeQIOuztO2GtSDrrZAg7ZW07JqUPyIsIldoYXQgZG8geW91IHVzdWFsbHkgZG8gb24gd2Vla2VuZHM/Il0sWyLsnbTrsogg7KO866eQ7JeQIOyVveyGjeydtCDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgcGxhbnMgdGhpcyB3ZWVrZW5kPyJdLFsi7KO866eQ7JeQIOyWtOuUlOyXkCDqsIDqs6Ag7Iu27Ja07JqUPyIsIldoZXJlIGRvIHlvdSB3YW50IHRvIGdvIHRoaXMgd2Vla2VuZD8iXV0gfSwKICBob21lOiB7IG1hdGNoOiAv7KeRfOyCtHzsm5Dro7h86riw7IiZ7IKsfOyblOyEuHzsnbTsgqx864+Z64SkfOqzoO2WpS8sIG5hbWU6ICLsp5EiLAogICAgcTogW1si7Ja065SU7JeQIOyCtOyVhOyalD8iLCJXaGVyZSBkbyB5b3UgbGl2ZT8iXSxbIuqzoO2WpeydtCDslrTrlJTsmIjsmpQ/IiwiV2hlcmUgaXMgeW91ciBob21ldG93bj8iXSxbIuqzoO2WpeydtCDqt7jrpqzsm4zsmpQ/IiwiRG8geW91IG1pc3MgeW91ciBob21ldG93bj8iXV0gfSwKICBob2JieTogeyBtYXRjaDogL+y3qOuvuHzsmrTrj5l87J2M7JWFfOuFuOuemHzqsozsnoR87LGFfOuPheyEnHzqt7jrprx87IKs7KeELywgbmFtZTogIuy3qOuvuCIsCiAgICBxOiBbWyLst6jrr7jqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgeW91ciBob2JieT8iXSxbIuyatOuPmeydhCDsnpDso7wg7ZW07JqUPyIsIkRvIHlvdSBleGVyY2lzZSBvZnRlbj8iXSxbIuustOyKqCDsnYzslYXsnYQg7KKL7JWE7ZW07JqUPyIsIldoYXQgbXVzaWMgZG8geW91IGxpa2U/Il1dIH0sCiAga29yZWE6IHsgbWF0Y2g6IC/tlZzqta187ISc7Jq4fOu2gOyCsHzsvIDsnbTtjJ187ZWc6riAfOq5gOy5mHzrrLjtmZQvLCBuYW1lOiAi7ZWc6rWtIiwKICAgIHE6IFtbIu2VnOq1reyXkOyEnCDslrTrlJTsl5Ag6rCAIOuztOqzoCDsi7bslrTsmpQ/IiwiV2hlcmUgaW4gS29yZWEgZG8geW91IHdhbnQgdG8gdmlzaXQ/Il0sWyLtlZzqta0g66y47ZmUIOykkeyXkOyEnCDrrZDqsIAg7KCc7J28IOyerOuvuOyeiOyWtOyalD8iLCJXaGF0IHBhcnQgb2YgS29yZWFuIGN1bHR1cmUgaXMgbW9zdCBpbnRlcmVzdGluZz8iXSxbIuy8gOydtO2MneydhCDsoovslYTtlbTsmpQ/IiwiRG8geW91IGxpa2UgSy1wb3A/Il1dIH0sCiAgZmVlbGluZ3M6IHsgbWF0Y2g6IC/quLDrtoR87ZS86rOkfO2WieuztXzsiqztjbx87KKL7JWE7JqUfO2emOuTpHzsiqTtirjroIjsiqR87KG466CkLywgbmFtZTogIuq4sOu2hCIsCiAgICBxOiBbWyLsmKTripgg6riw67aE7J20IOyWtOuVjOyalD8iLCJIb3cgZG8geW91IGZlZWwgdG9kYXk/Il0sWyLtlLzqs6TtlaAg65WMIOutkCDtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgZG8gd2hlbiB5b3UgYXJlIHRpcmVkPyJdLFsi662QIO2VoCDrlYwg7KCc7J28IO2Wieuzte2VtOyalD8iLCJXaGVuIGFyZSB5b3UgaGFwcGllc3Q/Il1dIH0KfTsKY29uc3QgRlRfUkVBQ1QgPSBbWyLslYQsIOq3uOuemOyalD8iLCJPaCwgcmVhbGx5PyJdLFsi7J6s66+47J6I64Sk7JqUISIsIlRoYXQgaXMgaW50ZXJlc3RpbmchIl0sWyLsmYAsIOyii+uEpOyalCEiLCJXb3csIG5pY2UhIl0sWyLqt7jroIfqtbDsmpQuIiwiSSBzZWUuIl0sWyLsoJXrp5DsmpQ/IiwiUmVhbGx5PyJdLFsi7ZWY7ZWYLCDsoovslYTsmpQhIiwiSGFoYSwgZ3JlYXQhIl1dOwpjb25zdCBGVF9TRUxGID0gWwogIC8vIFNvbWVib2R5IHNheWluZyB0aGV5IGFyZSBsb3N0IGdldHMgaGVscCwgbm90IGFub3RoZXIgcXVlc3Rpb24uIFRoaXMgc2l0cwogIC8vIGZpcnN0IG9uIHB1cnBvc2U6IHRoZSBzY3JpcHQgdXNlZCB0byBhbnN3ZXIgIkkgZG8gbm90IHVuZGVyc3RhbmQiIHdpdGggYQogIC8vIGZyZXNoIEtvcmVhbiBxdWVzdGlvbiwgd2hpY2ggaXMgdGhlIG9uZSByZXBseSB0aGF0IG1ha2VzIGEgYmVnaW5uZXIgcXVpdC4KICBbL+ydtO2VtOqwgD9ccyrslYh866qo66W06rKgfOuqsOudvOyalHzrrLTsiqgg66eQfOutkOudvOqzoHzslrTroKTsm4x87J6YIOuquyDslYzslYR8aSBkbyA/bltvJ110IHVuZGVyc3RhbmR8ZG9uJ3QgdW5kZXJzdGFuZHx3aGF0XD98bm8gaWRlYXx0b28gaGFyZC9pLAogICAgWyLqtJzssK7slYTsmpQhIOyWtOugteyngCDslYrslYTsmpQuIOq3uOuDpSAn64SkJyDrmJDripQgJ+yVhOuLiOyalCfrnbzqs6Ag66eQ7ZW064+EIOuPvOyalC4iLAogICAgICJUaGF0IGlzIGZpbmUg4oCUIHRoaXMgaXMgbm90IGEgdGVzdC4gWW91IGNhbiBhbnN3ZXIgd2l0aCBqdXN0IOuEpCAoeWVzKSBvciDslYTri4jsmpQgKG5vKS4gVGFwIPCfl6MgSW4gRW5nbGlzaCB0byBoZWFyIHRoaW5ncyBpbiBFbmdsaXNoLCBvciDwn4aYIFN0dWNrPyBmb3IgYSBsaW5lIHlvdSBjYW4gY29weS4iXV0sCiAgWy/snbTrpoTsnbQg662QfOydtOumhOydgC8sIFsi7KCcIOydtOumhOydgCDtlZzqta0g7YCY7Iqk7Yq47JiI7JqUISIsIk15IG5hbWUgaXMgS29yZWFuIFF1ZXN0ISJdXSwKICBbL+uqhyDsgrR864KY7J206rCALywgWyLsoIDripQg7ZWcIOyCtOydtOyXkOyalC4g7JWE6riwIOqyjOyehOydtOyXkOyalCEg7ZWY7ZWYLiIsIkkgYW0gb25lIHllYXIgb2xkLiBBIGJhYnkgZ2FtZSEgSGFoYS4iXV0sCiAgWy/slrTrlJTsl5Ag7IK0fOyWtOuUlCDsgrR87Ja065SU7JeQIOyeiC8sIFsi7KCA64qUIOy7tO2TqO2EsCDslYjsl5Ag7IK07JWE7JqUISIsIkkgbGl2ZSBpbnNpZGUgdGhlIGNvbXB1dGVyISJdXSwKICBbL+utkCDtlbTsmpR8662QIO2VmOqzoC8sIFsi7KCA64qUIOyngOq4iCDri7nsi6DtlZjqs6Ag7J207JW86riw7ZW07JqULiDsnqzrr7jsnojslrTsmpQhIiwiSSBhbSB0YWxraW5nIHdpdGggeW91IHJpZ2h0IG5vdy4gSXQgaXMgZnVuISJdXSwKICBbL+yii+yVhO2VtOyalFw/fOyii+yVhO2VmOyEuOyalFw/LywgWyLrhKQsIOygleunkCDsoovslYTtlbTsmpQhIOuLueyLoOydgOyalD8iLCJZZXMsIEkgcmVhbGx5IGxpa2UgaXQhIEhvdyBhYm91dCB5b3U/Il1dCl07CmxldCBGID0geyBsb2c6IFtdLCB0b3BpYzogbnVsbCwgcWk6IHt9LCB1c2VkOiBbXSwgaGlzdDogW10sIGF1dG86IGZhbHNlLCBidXN5OiBmYWxzZSB9OwpmdW5jdGlvbiBvcGVuRnJlZSgpIHsKICBGID0geyBsb2c6IFtdLCB0b3BpYzogbnVsbCwgcWk6IHt9LCB1c2VkOiBbXSwgaGlzdDogW10sIGF1dG86IEYuYXV0bywgYnVzeTogZmFsc2UgfTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRDaGF0IikuaW5uZXJIVE1MID0gIiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikudGV4dENvbnRlbnQgPSAiIjsKICByZW5kZXJGdEVuZ2luZSgpOwogIHNob3coImZyZWUiKTsKICBmdEJvdCgi7JWI64WV7ZWY7IS47JqUISDsoIDripQg7ZWc6rWt7Ja0IOy5nOq1rOyYiOyalC4g7Jik64qYIOutkCDtlZjqs6Ag7Iu27Ja07JqUPyDslYTrrLTqsbDrgpgg7J207JW86riw7ZW07JqUISIsICJIZWxsbyEgSSBhbSB5b3VyIEtvcmVhbiBmcmllbmQuIFdoYXQgZG8geW91IHdhbnQgdG8gZG8gdG9kYXk/IExldCB1cyB0YWxrIGFib3V0IGFueXRoaW5nISIpOwogIGNvbnN0IGlucCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFRleHQiKTsKICBpbnAub25rZXlkb3duID0gZSA9PiB7IGlmIChlLmtleSA9PT0gIkVudGVyIikgZnRTZW5kVGV4dCgpOyB9Owp9CmZ1bmN0aW9uIGZ0QnViYmxlKHdobywga3IsIGVuLCBleHRyYSkgewogIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBkLmNsYXNzTmFtZSA9ICJtc2cgIiArIHdobzsKICBpZiAod2hvID09PSAibnBjIikgewogICAgZC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0id2hvIj4ke2Z0QXBpS2V5KCkgPyAi4pyoIO2VnOq1reyWtCDsuZzqtawiIDogIvCfpJYg7ZWc6rWt7Ja0IOy5nOq1rCJ9PC9kaXY+JHtrcn0gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWFjY2VudDIpO2ZvbnQtc2l6ZToxMnB4Ij7wn5SKPC9zcGFuPmAgKyAoZW4gPyBgPGRpdiBjbGFzcz0ibWVuIj4ke2VufTwvZGl2PmAgOiAiIik7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiBzYXkoa3IpOwogIH0gZWxzZSB7CiAgICBkLmlubmVySFRNTCA9IGtyICsgKGV4dHJhID8gYDxkaXYgY2xhc3M9InNjb3JlIj4ke2V4dHJhfTwvZGl2PmAgOiAiIik7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiBzYXkoa3IpOwogIH0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRDaGF0IikuYXBwZW5kQ2hpbGQoZCk7CiAgZC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAic21vb3RoIiwgYmxvY2s6ICJuZWFyZXN0IiB9KTsKfQpmdW5jdGlvbiBmdEJvdChrciwgZW4sIGZpeCkgewogIEYubG9nLnB1c2goeyB3aG86ICJucGMiLCBrciwgZW4gfSk7CiAgRi5oaXN0LnB1c2goeyByb2xlOiAiYXNzaXN0YW50IiwgY29udGVudDoga3IgfSk7CiAgZnRCdWJibGUoIm5wYyIsIGtyLCBlbik7CiAgaWYgKGZpeCkgewogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZC5jbGFzc05hbWUgPSAiZml4bGluZSI7CiAgICBkLmlubmVySFRNTCA9IGDwn5KhICR7Zml4fWA7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRDaGF0IikuYXBwZW5kQ2hpbGQoZCk7CiAgfQogIHNheShrciwgMC45MiwgKCkgPT4geyBpZiAoRi5hdXRvKSBzZXRUaW1lb3V0KGZ0TGlzdGVuLCAzMDApOyB9KTsKfQphc3luYyBmdW5jdGlvbiBmdFVzZXIodGV4dCkgewogIGlmICghdGV4dCB8fCBGLmJ1c3kpIHJldHVybjsKICBGLmJ1c3kgPSB0cnVlOwogIEYuaGlzdC5wdXNoKHsgcm9sZTogInVzZXIiLCBjb250ZW50OiB0ZXh0IH0pOwogIGZ0QnViYmxlKCJtZSIsIHRleHQpOwogIGdhaW5YcCgzKTsgZmxvYXRGeCgiKzMgWFAiLCAiIzJGN0Q0RiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpLnRleHRDb250ZW50ID0gIuKApiI7CiAgdHJ5IHsKICAgIGNvbnN0IHIgPSBmdEFwaUtleSgpID8gYXdhaXQgZnRDbGF1ZGVSZXBseSh0ZXh0KSA6IGZ0QnVpbHRpblJlcGx5KHRleHQpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikudGV4dENvbnRlbnQgPSAiIjsKICAgIGZ0Qm90KHIua3IsIHIuZW4sIHIuZml4KTsKICAgIGlmICghZnRBcGlLZXkoKSAmJiBhaU9wdEluKCkpIHsKICAgICAgRi5iY291bnQgPSAoRi5iY291bnQgfHwgMCkgKyAxOwogICAgICBpZiAoRi5iY291bnQgPT09IDQpIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpLmlubmVySFRNTCA9CiAgICAgICAgICBg8J+SoSBUaXA6IEkgYW0gYSBzaW1wbGUgcHJhY3RpY2UgcGFydG5lci4gRm9yIGEgdHJ1bHkgaHVtYW4tbGlrZSBjaGF0IG9uIGFueSB0b3BpYywgdGFwIDxiPvCfpJYgQnVpbHQtaW48L2I+IGFib3ZlIGFuZCBjb25uZWN0IENsYXVkZSBBSS5gOwogICAgICB9LCAxMjAwKTsKICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRTdGF0dXMiKS50ZXh0Q29udGVudCA9ICLimqDvuI8gQUkgZXJyb3IgKCIgKyAoZS5tZXNzYWdlIHx8IGUpLnRvU3RyaW5nKCkuc2xpY2UoMCwgNjApICsgIikg4oCUIHVzaW5nIGJ1aWx0LWluIGJyYWluLiI7CiAgICBjb25zdCByID0gZnRCdWlsdGluUmVwbHkodGV4dCk7CiAgICBmdEJvdChyLmtyLCByLmVuKTsKICB9CiAgRi5idXN5ID0gZmFsc2U7Cn0KLyogLS0tIEVuZ2luZSAxOiBidWlsdC1pbiBicmFpbiAtLS0gKi8KLyogQ29udGV4dCBoZWxwZXJzOiBlY2hvIHdoYXQgdGhlIHNwZWFrZXIgYWN0dWFsbHkgc2FpZCwgd2l0aCB0aGUgcmlnaHQgcGFydGljbGUgKi8KZnVuY3Rpb24gaGFzQmF0Y2hpbShjaCkgeyBjb25zdCBkID0gZGVjSmFtbyhjaCk7IHJldHVybiAhIWQgJiYgZC5mID4gMDsgfQpmdW5jdGlvbiBrb0VjaG8oeCkgeyBjb25zdCBsYXN0ID0geFt4Lmxlbmd0aCAtIDFdOyByZXR1cm4geCArIChoYXNCYXRjaGltKGxhc3QpID8gIuydtOyalCIgOiAi7JqUIik7IH0gLy8g67Kg7Yq464Ko4oaS67Kg7Yq464Ko7J207JqUPywg7Luk7ZS84oaS7Luk7ZS87JqUPwpmdW5jdGlvbiBjbGVhblNhaWQoeCkgewogIHJldHVybiAoeCB8fCAiIikucmVwbGFjZSgvXig/Oig/OuyggOuKlHzrgpjripR87KCA64+EfOuCmOuPhHzqt7jrpqzqs6B86re4656Y7IScfOq3vOuNsHzqt7jrn7DrjbB87J2067KI7JeQfOyasOumrHzsoJx87JWEfOydjHzslrTsoJx87Jik64qYfOuCtOydvHzslYTquYx867Cp6riIfOyngOq4iClccyspKy8sICIiKS50cmltKCk7Cn0KLyogVW5kZXJzdGFuZGluZyBydWxlcyDigJQgcmVhY3QgdG8gdGhlIENPTlRFTlQgb2YgdGhlIHNlbnRlbmNlLCBub3QganVzdCBpdHMgdG9waWMuCiAgIEVhY2ggcmV0dXJucyB7a3IsZW59IGVjaG9pbmcgdGhlIHRoaW5nIHRoZSBzcGVha2VyIG1lbnRpb25lZC4gKi8KY29uc3QgRlRfUlVMRVMgPSBbCiAgLy8gQSBvbmUtd29yZCBhbnN3ZXIgaXMgc3RpbGwgYW4gYW5zd2VyLiBSZWFjdGluZyB0byB0aGUgYWN0dWFsIHdvcmQgYW5kCiAgLy8gc3RheWluZyBvbiB0aGUgc2FtZSBzdWJqZWN0IGlzIHdoYXQgYSBsaXN0ZW5lciBkb2VzLiBUaGUgc2NyaXB0IHVzZWQgdG8KICAvLyBmaW5kIG5vIG1hdGNoLCBzYXkgIlRoYXQgaXMgaW50ZXJlc3RpbmchIiwgYW5kIGp1bXAgdG8gYSBSQU5ET00gbmV3IHRvcGljCiAgLy8gLS0gd2hpY2ggaXMgd2hhdCBtYWtlcyBpdCBmZWVsIGxpa2Ugbm9ib2R5IGlzIHRoZXJlLgogIHsgcmU6IC9eXHMqKOuEpHzsmIh87J2RfOyii+yVhOyalHzsoovslYR86rSc7LCu7JWE7JqUfOunnuyVhOyalHzqt7jrnpjsmpR87JWE64uI7JqUfOyVhOuLiOyXkOyalHzslYTrh6h87JWE64uIfOyLq+yWtOyalHzrs4TroZzsmpQpXHMqWy4hXT9ccyokLywKICAgIGdlbjogKG0sIHYpID0+IHsKICAgICAgY29uc3QgeWVzID0gL+uEpHzsmIh87J2RfOyii+yVhHzqtJzssK5866ee7JWEfOq3uOuemC8udGVzdChtWzFdKTsKICAgICAgY29uc3QgSyA9IHllcyA/IFsi7KKL7JWE7JqUISDsoIDrj4Qg6re4656Y7JqULiIsICLqt7jroIfqtbDsmpQsIOyii+uEpOyalCEiXQogICAgICAgICAgICAgICAgICAgIDogWyLslYQsIOq3uOuemOyalD8g7JWM6rKg7Ja07JqULiIsICLqt7jroIfqtbDsmpQuIOq0nOywruyVhOyalCEiXTsKICAgICAgY29uc3QgRSA9IHllcyA/IFsiR29vZCEgTWUgdG9vLiIsICJJIHNlZSwgdGhhdCBpcyBuaWNlISJdCiAgICAgICAgICAgICAgICAgICAgOiBbIk9oIHJlYWxseT8gSSB1bmRlcnN0YW5kLiIsICJJIHNlZS4gVGhhdCBpcyBmaW5lISJdOwogICAgICBjb25zdCBpID0gdiAlIDI7CiAgICAgIGNvbnN0IHEgPSBGLnRvcGljID8gZnRQaWNrUShGLnRvcGljLCAiIikgOiBudWxsOwogICAgICByZXR1cm4gcSA/IHsga3I6IGAke0tbaV19ICR7cVswXX1gLCBlbjogYCR7RVtpXX0gJHtxWzFdfWAgfQogICAgICAgICAgICAgICA6IHsga3I6IGAke0tbaV19IOuNlCDsnbTslbzquLDtlbQg7KO87IS47JqULmAsIGVuOiBgJHtFW2ldfSBUZWxsIG1lIG1vcmUuYCB9OwogICAgfSB9LAogIC8vICLsoIDripQg7Yaw7J207JeQ7JqUIiBpbiB0aGUgZmlyc3QgYnJlYXRoIGlzIGFsbW9zdCBhbHdheXMgYSBuYW1lLiBMaW1pdGVkIHRvIHRoZQogIC8vIG9wZW5pbmcgdHVybnMgc28gIuyggOuKlCDtlZnsg53snbTsl5DsmpQiIGxhdGVyIGRvZXMgbm90IGdldCBncmVldGVkIGFzIE1yIFN0dWRlbnQuCiAgeyByZTogLyg/OuyggOuKlHzsoJwg7J2066aE7J2AfOuCmOuKlClccyooW+qwgC3tnqNhLXpBLVpdezEsMTB9KVxzKig/OuydtOyXkOyalHzsmIjsmpR87J6F64uI64ukfOydtOudvOqzoCDtlbTsmpR865286rOgIO2VtOyalCkvLAogICAgZ2VuOiAobSwgdikgPT4gewogICAgICBpZiAoRi5sb2cubGVuZ3RoID4gMykgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IHggPSBjbGVhblNhaWQobVsxXSk7CiAgICAgIGlmICgheCB8fCAv7ZWZ7IOdfOyEoOyDneuLmHzsgqzrnox87ZWc6rWt7J24fOuvuOq1reyduHzsuZzqtax864Ko7J6QfOyXrOyekC8udGVzdCh4KSkgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IEsgPSBbYCR7eH0g7JSoLCDrsJjqsIDsm4zsmpQhIOyggOuKlCDtlZzqta3slrQg7Lmc6rWs7JiI7JqULiDsmKTripgg662QIO2WiOyWtOyalD9gLAogICAgICAgICAgICAgICAgIGDslYjrhZXtlZjshLjsmpQsICR7eH0g7JSoISDrp4zrgpjshJwg67CY6rCA7JuM7JqULiDslrTrlJTsl5Ag7IK07JWE7JqUP2BdOwogICAgICBjb25zdCBFID0gW2BOaWNlIHRvIG1lZXQgeW91LCAke3h9ISBJIGFtIHlvdXIgS29yZWFuIGZyaWVuZC4gV2hhdCBkaWQgeW91IGRvIHRvZGF5P2AsCiAgICAgICAgICAgICAgICAgYEhlbGxvLCAke3h9ISBHb29kIHRvIG1lZXQgeW91LiBXaGVyZSBkbyB5b3UgbGl2ZT9gXTsKICAgICAgcmV0dXJuIHsga3I6IEtbdiAlIDJdLCBlbjogRVt2ICUgMl0gfTsgfSB9LAogIHsgcmU6IC8oW+qwgC3tnqNhLXpBLVogXXsxLDE0fT8pKD867JeQfOycvOuhnHzroZwpP1xzKig/OuyXrO2WiVxzKik/KD866rytXHMqKT/qsIDqs6Ag7Iu2fChb6rCALe2eo2EtekEtWiBdezEsMTR9PykoPzrsl5B87Jy866GcfOuhnClccyrqsIAg67O06rOgIOyLti8sCiAgICBnZW46IChtLCB2KSA9PiB7IGNvbnN0IHggPSBjbGVhblNhaWQobVsxXSB8fCBtWzJdKTsgaWYgKCF4KSByZXR1cm4gbnVsbDsKICAgICAgY29uc3QgSyA9IFtgJHtrb0VjaG8oeCl9PyDsoovqsqDrhKTsmpQhICR7eH3sl5DshJwg662QIO2VmOqzoCDsi7bslrTsmpQ/YCwgYOyZgCwgJHt4fSEg7Ja47KCcIOqwgOqzoCDsi7bslrTsmpQ/YCwgYCR7a29FY2hvKHgpfT8g7KCA64+EIOqwgCDrs7Tqs6Ag7Iu27Ja07JqUISDriITqtaztlZjqs6Ag6rCZ7J20IOqwiCDqsbDsmIjsmpQ/YF07CiAgICAgIGNvbnN0IEUgPSBbYCR7eH0/IFNvdW5kcyB3b25kZXJmdWwhIFdoYXQgZG8geW91IHdhbnQgdG8gZG8gaW4gJHt4fT9gLCBgV293LCAke3h9ISBXaGVuIGRvIHlvdSB3YW50IHRvIGdvP2AsIGAke3h9PyBJIHdhbnQgdG8gdmlzaXQgdG9vISBXaG8gd2lsbCB5b3UgZ28gd2l0aD9gXTsKICAgICAgcmV0dXJuIHsga3I6IEtbdiAlIDNdLCBlbjogRVt2ICUgM10gfTsgfSB9LAogIHsgcmU6IC8oW+qwgC3tnqNhLXpBLVogXXsxLDE0fT8pKD867J2EfOulvCk/XHMq66i56rOgIOyLti8sCiAgICBnZW46IG0gPT4geyBjb25zdCB4ID0gY2xlYW5TYWlkKG1bMV0pOyBpZiAoIXgpIHJldHVybiBudWxsOwogICAgICByZXR1cm4geyBrcjogYCR7a29FY2hvKHgpfT8g66eb7J6I6rKg64Sk7JqUISDsnpDso7wg66i57Ja07JqUP2AsIGVuOiBgJHt4fT8gU291bmRzIGRlbGljaW91cyEgRG8geW91IGVhdCBpdCBvZnRlbj9gIH07IH0gfSwKICB7IHJlOiAvKFvqsIAt7Z6jYS16QS1aIF17MSwxNH0/KSg/OuydhHzrpbx87J20fOqwgCk/XHMqKD867KCV66eQXHMqfOynhOynnFxzKnzrhIjrrLRccyp866eO7J20XHMqKT8oPzrsoovslYTtlbR87KKL7JWE7JqUfOyCrOueke2VtCkvLAogICAgZ2VuOiAobSwgdikgPT4geyBjb25zdCB4ID0gY2xlYW5TYWlkKG1bMV0pOyBpZiAoIXgpIHJldHVybiBudWxsOwogICAgICBjb25zdCBLID0gW2DsoIDrj4QgJHt4fSDsoovslYTtlbTsmpQhIOyZnCDsoovslYTtlbTsmpQ/YCwgYCR7a29FY2hvKHgpfT8g66mL7KeA64Sk7JqUISDslrjsoJzrtoDthLAg7KKL7JWE7ZaI7Ja07JqUP2BdOwogICAgICBjb25zdCBFID0gW2BJIGxpa2UgJHt4fSB0b28hIFdoeSBkbyB5b3UgbGlrZSBpdD9gLCBgJHt4fT8gTmljZSEgU2luY2Ugd2hlbiBoYXZlIHlvdSBsaWtlZCBpdD9gXTsKICAgICAgcmV0dXJuIHsga3I6IEtbdiAlIDJdLCBlbjogRVt2ICUgMl0gfTsgfSB9LAogIHsgcmU6IC8oW+qwgC3tnqNhLXpBLVogXXsxLDE0fT8pKD867J2EfOulvHzsnbR86rCAKT9ccyooPzrrs4TroZx87Iur7Ja0fOyViCDsoovslYQpLywKICAgIGdlbjogbSA9PiB7IGNvbnN0IHggPSBjbGVhblNhaWQobVsxXSk7CiAgICAgIHJldHVybiB7IGtyOiB4ID8gYOyVhCwgJHt4feuKlCDrs4TroZzsmIjsmpQ/IOq3uOufvCDrrZDqsIAg642UIOyii+yVhOyalD9gIDogIuyVhCwg67OE66Gc7JiI7JqUPyDqt7jrn7wg662Q6rCAIOuNlCDsoovslYTsmpQ/IiwgZW46ICJPaCwgbm90IGEgZmFuPyBUaGVuIHdoYXQgZG8geW91IGxpa2UgYmV0dGVyPyIgfTsgfSB9LAogIHsgcmU6IC8oW+qwgC3tnqNhLXpBLVogXXsxLDE0fT8pKD867J2EfOulvHzsl5ApP1xzKig/Ouu0pOyWtHzrqLnsl4jslrR86rCU7Ja0fOyDgOyWtHzrp4zrgqzslrR87ZaI7Ja0fOqwlOuLpCDsmZQpLywKICAgIGdlbjogbSA9PiB7IGNvbnN0IHggPSBjbGVhblNhaWQobVsxXSk7IGlmICgheCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiB7IGtyOiBg7JikLCAke3h9ISDslrTrlaDslrTsmpQ/IOyii+yVmOyWtOyalD9gLCBlbjogYE9oLCAke3h9ISBIb3cgd2FzIGl0PyBXYXMgaXQgZ29vZD9gIH07IH0gfSwKICB7IHJlOiAv7Ja066Ck7JuMfO2emOuTpOyWtHztnpjrk6Tsl4gvLAogICAgZ2VuOiAoKSA9PiAoeyBrcjogIuq0nOywruyVhOyalCwg7LKc7LKc7Z6IIO2VmOuptCDrj7zsmpQhIOutkOqwgCDsoJzsnbwg7Ja066Ck7JuM7JqUPyIsIGVuOiAiSXQgaXMgb2theSDigJQgc2xvdyBhbmQgc3RlYWR5ISBXaGF0IGlzIHRoZSBoYXJkZXN0IHBhcnQ/IiB9KSB9LAogIHsgcmU6IC/tlLzqs6TtlbR87KG466CkLywKICAgIGdlbjogKCkgPT4gKHsga3I6ICLslYTsnbTqs6AsIO2UvOqzpO2VmOq1sOyalC4g7Jik64qY7J2AIO2RuSDsiazshLjsmpQhIOuztO2GtSDrqocg7Iuc7JeQIOyekOyalD8iLCBlbjogIk9oIG5vLCB5b3UgYXJlIHRpcmVkLiBSZXN0IHdlbGwgdG9kYXkhIFdoYXQgdGltZSBkbyB5b3UgdXN1YWxseSBzbGVlcD8iIH0pIH0sCiAgeyByZTogL+yWtOuVjOyalFw/P1xzKiR87Ja065a76rKMIOyDneqwgS8sCiAgICBnZW46ICgpID0+ICh7IGtyOiAi7J2MLCDsoIDripQg7KCV66eQIOyii+uLpOqzoCDsg53qsIHtlbTsmpQhIOq3uOufsOuNsCDsmZwg66y87Ja067SQ7JqUPyDqtoHquIjtlbTsmpQhIiwgZW46ICJIbW0sIEkgdGhpbmsgaXQgaXMgcmVhbGx5IGdvb2QhIEJ1dCB3aHkgZG8geW91IGFzaz8gSSBhbSBjdXJpb3VzISIgfSkgfSwKXTsKZnVuY3Rpb24gZnRQaWNrUShrZXksIHVzZXJUZXh0KSB7CiAgY29uc3QgdCA9IEZUX1RPUElDU1trZXldOwogIGxldCBpID0gRi5xaVtrZXldIHx8IDA7CiAgd2hpbGUgKGkgPCB0LnEubGVuZ3RoKSB7CiAgICBjb25zdCBxID0gdC5xW2ldOyBpKys7CiAgICBGLnFpW2tleV0gPSBpOwogICAgaWYgKHVzZXJUZXh0ICYmIHNoYXJlc1dvcmQocVswXSwgdXNlclRleHQpKSBjb250aW51ZTsgLy8gZG8gbm90IGFzayB3aGF0IHRoZXkganVzdCB0b2xkIHVzCiAgICByZXR1cm4gcTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gc2hhcmVzV29yZChxdWVzdGlvbiwgdGV4dCkgewogIGNvbnN0IHdvcmRzID0gKHRleHQgfHwgIiIpLnNwbGl0KC9ccysvKQogICAgLm1hcCh3ID0+IHcucmVwbGFjZSgvKOydhHzrpbx87J20fOqwgHzsnYB864qUfOyXkHzsl5DshJx87Jy866GcfOuhnHzrj4R866eMfOyalHzsmIjsmpR87J207JeQ7JqUKSQvLCAiIikpCiAgICAuZmlsdGVyKHcgPT4gdy5sZW5ndGggPj0gMik7CiAgcmV0dXJuIHdvcmRzLnNvbWUodyA9PiBxdWVzdGlvbi5pbmNsdWRlcyh3KSk7Cn0KZnVuY3Rpb24gZnRCdWlsdGluUmVwbHkodGV4dCkgewogIC8vIHBlcnNvbmFsIHF1ZXN0aW9ucyB0byB0aGUgYm90CiAgZm9yIChjb25zdCBbcmUsIGFuc10gb2YgRlRfU0VMRikgaWYgKHJlLnRlc3QodGV4dCkpIHJldHVybiB7IGtyOiBhbnNbMF0sIGVuOiBhbnNbMV0gfTsKICAvLyBnb29kYnllCiAgaWYgKC/slYjrhZXtnoh87J6YIOqwgHzsnpjqsIB864GdfOq3uOunjC8udGVzdCh0ZXh0KSkgcmV0dXJuIHsga3I6ICLsmKTripgg7J207JW86riwIOygleunkCDsnqzrr7jsnojsl4jslrTsmpQhIOuYkCDsnbTslbzquLDtlbTsmpQuIOyViOuFle2eiCDqsIDshLjsmpQhIiwgZW46ICJUb2RheSdzIHRhbGsgd2FzIHJlYWxseSBmdW4hIExldCB1cyB0YWxrIGFnYWluLiBHb29kYnllISIgfTsKICAvLyAxKSB1bmRlcnN0YW5kIHRoZSBzZW50ZW5jZSBpdHNlbGYgYW5kIGJ1aWxkIG9uIGl0CiAgRi5ydWxlViA9IChGLnJ1bGVWIHx8IDApICsgMTsKICBmb3IgKGNvbnN0IHJ1bGUgb2YgRlRfUlVMRVMpIHsKICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKHJ1bGUucmUpOwogICAgaWYgKG0pIHsKICAgICAgY29uc3QgciA9IHJ1bGUuZ2VuKG0sIEYucnVsZVYpOwogICAgICBpZiAocikgewogICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhGVF9UT1BJQ1MpKSBpZiAoRlRfVE9QSUNTW2tdLm1hdGNoLnRlc3QodGV4dCkpIHsgRi50b3BpYyA9IGs7IGJyZWFrOyB9CiAgICAgICAgcmV0dXJuIHI7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgcmVhY3QgPSBGVF9SRUFDVFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBGVF9SRUFDVC5sZW5ndGgpXTsKICAvLyAyKSBkaWQgdGhleSBtZW50aW9uIGEgbmV3IHRvcGljPwogIGxldCBuZXdUb3BpYyA9IG51bGw7CiAgZm9yIChjb25zdCBrIG9mIHNodWZmbGUoT2JqZWN0LmtleXMoRlRfVE9QSUNTKSkpIHsKICAgIGlmIChrICE9PSBGLnRvcGljICYmIEZUX1RPUElDU1trXS5tYXRjaC50ZXN0KHRleHQpICYmIChGLnFpW2tdIHx8IDApIDwgRlRfVE9QSUNTW2tdLnEubGVuZ3RoKSB7IG5ld1RvcGljID0gazsgYnJlYWs7IH0KICB9CiAgaWYgKG5ld1RvcGljKSB7CiAgICBGLnRvcGljID0gbmV3VG9waWM7CiAgICBjb25zdCBxID0gZnRQaWNrUShuZXdUb3BpYywgdGV4dCk7CiAgICBpZiAocSkgcmV0dXJuIHsga3I6IGAke3JlYWN0WzBdfSAke3FbMF19YCwgZW46IGAke3JlYWN0WzFdfSAke3FbMV19YCB9OwogIH0KICAvLyAzKSBjb250aW51ZSBjdXJyZW50IHRvcGljCiAgaWYgKEYudG9waWMpIHsKICAgIGNvbnN0IHEgPSBmdFBpY2tRKEYudG9waWMsIHRleHQpOwogICAgaWYgKHEpIHJldHVybiB7IGtyOiBgJHtyZWFjdFswXX0g6re465+8LCAke3FbMF19YCwgZW46IGAke3JlYWN0WzFdfSBUaGVuLCAke3FbMV19YCB9OwogIH0KICAvLyA0KSBmcmVzaCB0b3BpYwogIGNvbnN0IGZyZXNoID0gT2JqZWN0LmtleXMoRlRfVE9QSUNTKS5maWx0ZXIoayA9PiAoRi5xaVtrXSB8fCAwKSA8IEZUX1RPUElDU1trXS5xLmxlbmd0aCk7CiAgaWYgKCFmcmVzaC5sZW5ndGgpIHJldHVybiB7IGtyOiAi7Jqw7JmALCDsmrDrpqwg7KCV66eQIOunjuydtCDsnbTslbzquLDtlojrhKTsmpQhIOyYpOuKmCDstZzqs6DsmIjsmpQhIiwgZW46ICJXb3csIHdlIHRhbGtlZCBzbyBtdWNoISBZb3UgZGlkIGdyZWF0IHRvZGF5ISIgfTsKICBGLnRvcGljID0gZnJlc2hbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZnJlc2gubGVuZ3RoKV07CiAgY29uc3QgcSA9IGZ0UGlja1EoRi50b3BpYywgdGV4dCk7CiAgcmV0dXJuIHEgPyB7IGtyOiBgJHtyZWFjdFswXX0gJHtxWzBdfWAsIGVuOiBgJHtyZWFjdFsxXX0gJHtxWzFdfWAgfQogICAgICAgICAgIDogeyBrcjogIuyerOuvuOyeiOuEpOyalCEg642UIOydtOyVvOq4sO2VtCDso7zshLjsmpQuIiwgZW46ICJJbnRlcmVzdGluZyEgVGVsbCBtZSBtb3JlLiIgfTsKfQpmdW5jdGlvbiBmdE51ZGdlKCkgewogIGlmIChGLmJ1c3kpIHJldHVybjsKICBjb25zdCByID0gKCgpID0+IHsgRi50b3BpYyA9IG51bGw7IHJldHVybiBmdEJ1aWx0aW5SZXBseSgiIik7IH0pKCk7CiAgZnRCb3Qoci5rciwgci5lbik7Cn0KLyogLS0tIEVuZ2luZSAyOiBDbGF1ZGUgQVBJICh1c2VyJ3Mgb3duIGtleSwgc3RvcmVkIG9ubHkgaW4gdGhpcyBicm93c2VyKSAtLS0gKi8KY29uc3QgQUlfT1BFTiA9IGZhbHNlOyAvLyBwdWJsaWMgYnVpbGQgc2V0cyB0aGlzIGZhbHNlOiBBSSBtb2RlIGhpZGRlbiB1bmxlc3MgVVJMIGVuZHMgd2l0aCAjYWkKY29uc3QgUFJFTUlVTV9VUkwgPSAiaHR0cHM6Ly90b21waGFtLmNhL3NwZWFraW5nLXBhdGgtY291cnNlLyI7IC8vIHB1YmxpYyBidWlsZCBzZXRzIHRoZSBwcmVtaXVtIHNhbGVzIHBhZ2UgVVJMOyBlbXB0eSA9IG5vIHByZW1pdW0gY2FyZApmdW5jdGlvbiBmdEFwaUtleSgpIHsgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJrcUFwaUtleSIpIHx8ICIiOyB9CmZ1bmN0aW9uIGFpT3B0SW4oKSB7IHJldHVybiBBSV9PUEVOIHx8ICEhZnRBcGlLZXkoKSB8fCBsb2NhdGlvbi5oYXNoLmluY2x1ZGVzKCJhaSIpOyB9CmZ1bmN0aW9uIHJlbmRlckZ0RW5naW5lKCkgewogIGNvbnN0IGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRFbmdpbmUiKTsKICBpZiAoIWFpT3B0SW4oKSkgeyBiLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IHJldHVybjsgfQogIGIuc3R5bGUuZGlzcGxheSA9ICIiOwogIGIudGV4dENvbnRlbnQgPSBmdEFwaUtleSgpID8gIuKcqCBDbGF1ZGUgQUkiIDogIvCfpJYgQnVpbHQtaW4iOwp9CmZ1bmN0aW9uIGZ0RW5naW5lVGFwKCkgewogIGlmIChmdEFwaUtleSgpKSB7CiAgICBpZiAoY29uZmlybSgiQ2xhdWRlIEFJIG1vZGUgaXMgT04gKHlvdXIgQVBJIGtleSBpcyBzdG9yZWQgb25seSBpbiB0aGlzIGJyb3dzZXIpLiBSZW1vdmUgdGhlIGtleSBhbmQgc3dpdGNoIGJhY2sgdG8gdGhlIGJ1aWx0LWluIHBhcnRuZXI/IikpIHsKICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImtxQXBpS2V5Iik7CiAgICB9CiAgfSBlbHNlIHsKICAgIGNvbnN0IGsgPSBwcm9tcHQoIlBhc3RlIHlvdXIgQW50aHJvcGljIEFQSSBrZXkgKHNrLWFudC3igKYpIGZvciBvcGVuLXRvcGljIEFJIGNvbnZlcnNhdGlvbi5cblxuSXQgaXMgc2F2ZWQgT05MWSBpbiB0aGlzIGJyb3dzZXIgKGxvY2FsU3RvcmFnZSkgYW5kIHNlbnQgb25seSB0byBhcGkuYW50aHJvcGljLmNvbS4gQVBJIHVzYWdlIGlzIGJpbGxlZCB0byB5b3VyIGtleS5cbkxlYXZlIGVtcHR5IHRvIGtlZXAgdGhlIGZyZWUgYnVpbHQtaW4gcGFydG5lci4iKTsKICAgIGlmIChrICYmIGsudHJpbSgpLnN0YXJ0c1dpdGgoInNrLWFudCIpKSBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgia3FBcGlLZXkiLCBrLnRyaW0oKSk7CiAgICBlbHNlIGlmIChrKSBhbGVydCgiVGhhdCBkb2VzIG5vdCBsb29rIGxpa2UgYW4gQW50aHJvcGljIGtleSAoc2stYW50LeKApikuIE5vdCBzYXZlZC4iKTsKICB9CiAgcmVuZGVyRnRFbmdpbmUoKTsKfQphc3luYyBmdW5jdGlvbiBmdENsYXVkZVJlcGx5KHRleHQpIHsKICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS92MS9tZXNzYWdlcyIsIHsKICAgIG1ldGhvZDogIlBPU1QiLAogICAgaGVhZGVyczogewogICAgICAiY29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAieC1hcGkta2V5IjogZnRBcGlLZXkoKSwKICAgICAgImFudGhyb3BpYy12ZXJzaW9uIjogIjIwMjMtMDYtMDEiLAogICAgICAiYW50aHJvcGljLWRhbmdlcm91cy1kaXJlY3QtYnJvd3Nlci1hY2Nlc3MiOiAidHJ1ZSIKICAgIH0sCiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7CiAgICAgIG1vZGVsOiAiY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMSIsCiAgICAgIG1heF90b2tlbnM6IDMwMCwKICAgICAgc3lzdGVtOiAiWW91IGFyZSDtlZzqta3slrQg7Lmc6rWsLCBhIHdhcm0gS29yZWFuIGNvbnZlcnNhdGlvbiBwYXJ0bmVyIGZvciBhIGJlZ2lubmVyIGxlYXJuZXIgKGFyb3VuZCBUT1BJSyAxIGxldmVsKS4gUmVwbHkgaW4gc2ltcGxlIHBvbGl0ZSBLb3JlYW4gKO2VtOyalOyytCksIDEtMiBzaG9ydCBzZW50ZW5jZXMsIHRoZW4gYXNrIE9ORSBzaW1wbGUgZm9sbG93LXVwIHF1ZXN0aW9uLiBBbnkgdG9waWMgaXMgZmluZS4gSWYgdGhlIHVzZXIncyBLb3JlYW4gaGFzIGEgY2xlYXIgbWlzdGFrZSwgYWRkIGEgZ2VudGxlIGZpeC4gUmVzcG9uZCB3aXRoIE9OTFkgdGhpcyBKU09OOiB7XCJrclwiOlwieW91ciBLb3JlYW4gcmVwbHlcIixcImVuXCI6XCJFbmdsaXNoIHRyYW5zbGF0aW9uXCIsXCJmaXhcIjpudWxsIG9yIFwid2hhdCB0aGV5IHNhaWQg4oaSIG1vcmUgbmF0dXJhbCB2ZXJzaW9uIChzaG9ydCByZWFzb24pXCJ9IiwKICAgICAgbWVzc2FnZXM6IEYuaGlzdC5zbGljZSgtMTIpCiAgICB9KQogIH0pOwogIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoIkFQSSAiICsgcmVzLnN0YXR1cyk7CiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7CiAgY29uc3QgcmF3ID0gZGF0YS5jb250ZW50WzBdLnRleHQ7CiAgY29uc3QgbSA9IHJhdy5tYXRjaCgvXHtbXHNcU10qXH0vKTsKICBjb25zdCBqID0gSlNPTi5wYXJzZShtID8gbVswXSA6IHJhdyk7CiAgcmV0dXJuIHsga3I6IGoua3IsIGVuOiBqLmVuLCBmaXg6IGouZml4IH07Cn0KLyogLS0tIFZvaWNlIGxvb3AgLS0tICovCmZ1bmN0aW9uIGZ0TGlzdGVuKCkgewogIGlmICghU1IgfHwgc3JCbG9ja2VkIHx8IHJlY29nbml6aW5nIHx8IEYuYnVzeSB8fCBkb2N1bWVudC5oaWRkZW4pIHJldHVybjsKICBjb25zdCBtaWMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRNaWMiKTsKICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRTdGF0dXMiKTsKICByZWNvZ25pemluZyA9IHRydWU7CiAgbWljLmNsYXNzTGlzdC5hZGQoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi4o+5IjsKICAvLyBBIGJlZ2lubmVyIHBhdXNlcyBtaWQtc2VudGVuY2UgdG8gdGhpbmsuIEN1dHRpbmcgdGhlbSBvZmYgdGhlcmUgaXMgdGhlIGZhc3Rlc3QKICAvLyB3YXkgdG8gbWFrZSBzb21lb25lIGZlZWwgc3R1cGlkLCBzbyB3YWl0aW5nIGZvciB0aGUgdGFwIGlzIHRoZSBkZWZhdWx0LgogIHZhciBob2xkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImtxTWljSG9sZCIpICE9PSAiMCI7CiAgc3RhdHVzLnRleHRDb250ZW50ID0gaG9sZAogICAgPyAi8J+OmSBTcGVhayDigJQgdGFrZSB5b3VyIHRpbWUuIFRhcCDij7kgd2hlbiB5b3UgYXJlIGRvbmUuIgogICAgOiAi8J+OmSBTcGVhayDigJQgSSB3aWxsIGFuc3dlciB3aGVuIHlvdSBwYXVzZSAob3IgdGFwIOKPuSkuIjsKICBjb25zdCByZWMgPSBuZXcgU1IoKTsKICBhY3RpdmVSZWMgPSByZWM7CiAgcmVjLmxhbmcgPSAia28tS1IiOyByZWMubWF4QWx0ZXJuYXRpdmVzID0gMTsKICByZWMub25lcnJvciA9IGV2ID0+IHsKICAgIHJlYy5lcnJDb2RlID0gZXYuZXJyb3I7CiAgICBpZiAoZXYuZXJyb3IgPT09ICJub3QtYWxsb3dlZCIpIHsgc3RhdHVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7IEYuYXV0byA9IGZhbHNlOyBmdFRvZ2dsZUF1dG8odHJ1ZSk7IH0KICB9OwogIHN0YXJ0TGlzdGVuaW5nKHJlYywgewogICAgaWRsZU1zOiBob2xkID8gMCA6IDI4MDAsIGNhcE1zOiBob2xkID8gMTgwMDAwIDogNjAwMDAsCiAgICBvbkxpdmU6IHQgPT4geyBpZiAodCkgc3RhdHVzLnRleHRDb250ZW50ID0gIvCfjqcg4oCc4oCmIiArIHQuc2xpY2UoLTcwKSArICLigJ0g4oCUIHRhcCDij7kgd2hlbiBkb25lIjsgfSwKICAgIG9uRmluaXNoOiB0ZXh0ID0+IHsKICAgICAgcmVjb2duaXppbmcgPSBmYWxzZTsgaWYgKGFjdGl2ZVJlYyA9PT0gcmVjKSBhY3RpdmVSZWMgPSBudWxsOwogICAgICBtaWMuY2xhc3NMaXN0LnJlbW92ZSgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLwn46kIjsKICAgICAgaWYgKHRleHQpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gIiI7IGZ0VXNlcih0ZXh0KTsgfQogICAgICBlbHNlIGlmIChyZWMuZXJyQ29kZSA9PT0gIm5vdC1hbGxvd2VkIikgeyAvKiBtaWMgaGVscCBhbHJlYWR5IHNob3duIGJ5IG9uZXJyb3IgKi8gfQogICAgICBlbHNlIGlmIChyZWMuZXJyQ29kZSAmJiByZWMuZXJyQ29kZSAhPT0gIm5vLXNwZWVjaCIgJiYgcmVjLmVyckNvZGUgIT09ICJhYm9ydGVkIikKICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAiTWljIGlzc3VlICgiICsgcmVjLmVyckNvZGUgKyAiKSDigJQgeW91IGNhbiBhbHNvIHR5cGUgYmVsb3cuIjsKICAgICAgZWxzZSBzdGF0dXMudGV4dENvbnRlbnQgPSAiSSBkaWQgbm90IGhlYXIgYW55dGhpbmcg4oCUIHRhcCDwn46kIHRvIHRyeSBhZ2Fpbi4iOwogICAgfQogIH0pOwp9CmFzeW5jIGZ1bmN0aW9uIGZ0TWljVGFwKCkgewogIC8vIHNlY29uZCB0YXAgPSAiSSBmaW5pc2hlZCBzcGVha2luZyIg4oaSIHN0b3AgY2FwdHVyZSwgdHJhbnNjcmliZSBpbW1lZGlhdGVseQogIGlmIChyZWNvZ25pemluZyAmJiBhY3RpdmVSZWMpIHsgZm9yY2VFbmRMaXN0ZW4oYWN0aXZlUmVjKTsgcmV0dXJuOyB9CiAgaWYgKCFTUiB8fCBzckJsb2NrZWQpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpLmlubmVySFRNTCA9ICI8c3BhbiBjbGFzcz0naGVhcmQnPlZvaWNlIGlucHV0IG5lZWRzIENocm9tZSBvciBTYWZhcmkgMTcrLiBZb3UgY2FuIHR5cGUgeW91ciBLb3JlYW4gYmVsb3cgaW5zdGVhZCE8L3NwYW4+IjsKICAgIHJldHVybjsKICB9CiAgaWYgKCEoYXdhaXQgZW5zdXJlTWljKCkpKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRTdGF0dXMiKS5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgcmV0dXJuOwogIH0KICBmdExpc3RlbigpOwp9CmZ1bmN0aW9uIGZ0VG9nZ2xlQXV0byhzaWxlbnQpIHsKICBpZiAoIXNpbGVudCkgRi5hdXRvID0gIUYuYXV0bzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRBdXRvIikudGV4dENvbnRlbnQgPSAi8J+UgSBBdXRvOiAiICsgKEYuYXV0byA/ICJvbiIgOiAib2ZmIik7CiAgaWYgKEYuYXV0byAmJiAhc2lsZW50KSBmdE1pY1RhcCgpOwp9CmZ1bmN0aW9uIGZ0U2VuZFRleHQoKSB7CiAgY29uc3QgaW5wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0VGV4dCIpOwogIGNvbnN0IHQgPSBpbnAudmFsdWUudHJpbSgpOwogIGlmICghdCkgcmV0dXJuOwogIGlucC52YWx1ZSA9ICIiOwogIGZ0VXNlcih0KTsKfQpmdW5jdGlvbiBvcGVuUmV2aWV3KCkgewogIGNvbnN0IHNyYyA9IExFU1NPTlMuZmlsdGVyKEwgPT4gbHN0YXRlKEwubikuc3RhcnMudGFsayk7CiAgY29uc3QgcG9vbEwgPSBzcmMubGVuZ3RoID8gc3JjIDogTEVTU09OUzsKICBjb25zdCB0dXJucyA9IHNodWZmbGUocG9vbEwuZmxhdE1hcChMID0+IFRBTEtTW0wubl0udHVybnMubWFwKHQgPT4gKHsgLi4udCwgbnBjV2hvOiBUQUxLU1tMLm5dLndobyB9KSkpKS5zbGljZSgwLCA4KTsKICBUQUxLUy5SID0geyB3aG86ICLwn46yIE1peGVkIHBhcnRuZXJzIiwgdDogIlJldmlldyB3b3Jrb3V0IOKAlCAiICsgcG9vbEwubGVuZ3RoICsgIiBsZXNzb25zIGluIHRoZSBtaXgiLCB0dXJucyB9OwogIGRlbGV0ZSBUSy5SOwogIGN1ciA9IHsgbjogIlIiLCBrcjogIuuzteyKtSIsIGVuOiAiUmV2aWV3Iiwgdmk6ICLDlG4gdOG6rXAiLCBlbW9qaTogIvCfjrIiLCB3b3JkczogcG9vbEwuZmxhdE1hcChMID0+IEwud29yZHMpLCBncmFtbWFyOiBbXSB9OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsVGl0bGUiKS50ZXh0Q29udGVudCA9ICLwn46yIOuzteyKtSDigJQgUmFuZG9tIENvbnZlcnNhdGlvbiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdWIiKS50ZXh0Q29udGVudCA9IChzcmMubGVuZ3RoID8gIkZyb20geW91ciDirZAgY29udmVyc2F0aW9ucyIgOiAiRnJvbSBhbGwgbGVzc29ucyIpICsgIiDCtyAiICsgdHVybnMubGVuZ3RoICsgIiBzdXJwcmlzZSBxdWVzdGlvbnMiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9ICLwn46yIjsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudGFiIikuZm9yRWFjaChlbCA9PiBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuZGF0YXNldC50YWIgPT09ICJ0YWxrIiA/ICIiIDogIm5vbmUiKTsKICBzZXRUYWIoInRhbGsiKTsKICBzaG93KCJsZXNzb24iKTsKfQoKLyogPT09PT09PT09PT09PT09IExFU1NPTiA9PT09PT09PT09PT09PT0gKi8KbGV0IGN1cnJlbnRUYWIgPSAibGVhcm4iOwpmdW5jdGlvbiBvcGVuTGVzc29uKG4sIHRhYiA9ICJsZWFybiIpIHsKICBjdXIgPSBMRVNTT05TLmZpbmQoTCA9PiBMLm4gPT09IG4pOwogIGxlYXJuSWR4ID0gMDsgc3BlYWtJZHggPSAwOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi50YWIiKS5mb3JFYWNoKGVsID0+IGVsLnN0eWxlLmRpc3BsYXkgPSAiIik7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxUaXRsZSIpLnRleHRDb250ZW50ID0gYCR7Y3VyLmVtb2ppfSAke2N1ci5rcn0g4oCUICR7Y3VyLmVufWA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdWIiKS50ZXh0Q29udGVudCA9IGBRdWVzdCAke2N1ci5ufSDCtyAke2N1ci52aX0gwrcgJHtjdXIud29yZHMubGVuZ3RofSB3b3JkcyDCtyAke2N1ci5ncmFtbWFyLmxlbmd0aH0gcGF0dGVybnNgOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2Yobik7CiAgcmVuZGVyR3JhbW1hcigpOwogIHNldFRhYih0YWIpOwogIHNob3coImxlc3NvbiIpOwp9CmZ1bmN0aW9uIHNldFRhYih0KSB7CiAgY3VycmVudFRhYiA9IHQ7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnRhYiIpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnRvZ2dsZSgib24iLCBlbC5kYXRhc2V0LnRhYiA9PT0gdCkpOwogIFsibGVhcm4iLCJzdG9yeSIsInRhbGsiLCJncmFtbWFyIiwic3BlYWsiLCJwbGF5Il0uZm9yRWFjaCh4ID0+IHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItIiArIHgpLnN0eWxlLmRpc3BsYXkgPSB4ID09PSB0ID8gIiIgOiAibm9uZSI7CiAgfSk7CiAgaWYgKHQgPT09ICJsZWFybiIpIHJlbmRlckxlYXJuKCk7CiAgaWYgKHQgPT09ICJzdG9yeSIpIHsgc3RvcnlJZHggPSAwOyByZW5kZXJTdG9yeSgpOyB9CiAgaWYgKHQgPT09ICJ0YWxrIikgcmVuZGVyVGFsaygpOwogIGlmICh0ID09PSAic3BlYWsiKSByZW5kZXJTcGVhaygpOwp9CgovKiAtLS0gU3RvcnkgdGFiIC0tLSAqLwpsZXQgc3RvcnlJZHggPSAwOwpmdW5jdGlvbiBzZWdtZW50RW1vamkocykgewogIGlmICh0eXBlb2YgSW50bCAhPT0gInVuZGVmaW5lZCIgJiYgSW50bC5TZWdtZW50ZXIpIHsKICAgIHJldHVybiBbLi4ubmV3IEludGwuU2VnbWVudGVyKCJlbiIsIHtncmFudWxhcml0eToiZ3JhcGhlbWUifSkuc2VnbWVudChzKV0ubWFwKHggPT4geC5zZWdtZW50KTsKICB9CiAgcmV0dXJuIFsuLi5zXTsgLy8gZmFsbGJhY2s6IG1heSBzcGxpdCBaV0ogZW1vamkgb24gdmVyeSBvbGQgYnJvd3NlcnMKfQpmdW5jdGlvbiByZW5kZXJTdG9yeSgpIHsKICBjb25zdCBzdCA9IGN1ci5zdG9yeSwgc3RlcCA9IHN0LnN0ZXBzW3N0b3J5SWR4XTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RUaXRsZSIpLnRleHRDb250ZW50ID0gc3QudDsKICBjb25zdCBzdGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFN0YWdlIik7CiAgc3RhZ2UuY2xhc3NOYW1lID0gInN0YWdlIGJnLSIgKyBzdGVwLmJnICsgKHN0ZXAuZnggPyAiIGZ4LSIgKyBzdGVwLmZ4IDogIiIpOwogIHN0YWdlLmlubmVySFRNTCA9IHNlZ21lbnRFbW9qaShzdGVwLnNjKS5tYXAoZSA9PiBgPHNwYW4gY2xhc3M9ImFjdG9yIj4ke2V9PC9zcGFuPmApLmpvaW4oIiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdE5hciIpLnRleHRDb250ZW50ID0gc3RlcC5uYXI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0V2hvIikudGV4dENvbnRlbnQgPSBzdGVwLndobzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RLciIpLnRleHRDb250ZW50ID0gc3RlcC5rciArICIg8J+UiiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0RW4iKS50ZXh0Q29udGVudCA9IHN0ZXAuZW47CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0UHJvbXB0IikudGV4dENvbnRlbnQgPSAiV2hhdCBkbyB5b3Ugc2F5PyI7CiAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0Q2hvaWNlcyIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBzaHVmZmxlKHN0ZXAuY2gpLmZvckVhY2goYyA9PiB7CiAgICBjb25zdCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICBiLmNsYXNzTmFtZSA9ICJhbnMiOwogICAgYi5pbm5lckhUTUwgPSBgPGRpdj4ke2NbMF19PC9kaXY+PGRpdiBjbGFzcz0iYWVuIj4ke2NbMV19PC9kaXY+YDsKICAgIGIub25jbGljayA9IGV2ID0+IHN0b3J5Q2hvaWNlKGIsIGMsIGV2KTsKICAgIGJveC5hcHBlbmRDaGlsZChiKTsKICB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3REb3RzIikudGV4dENvbnRlbnQgPQogICAgc3Quc3RlcHMubWFwKChfLCBpKSA9PiBpIDwgc3RvcnlJZHggPyAi4pePIiA6IGkgPT09IHN0b3J5SWR4ID8gIuKXiSIgOiAi4peLIikuam9pbigiICIpOwogIHNheShzdGVwLmtyLnJlcGxhY2UoL1woLio/XCkvZywgIiIpKTsKfQpmdW5jdGlvbiBzYXlTdG9yeSgpIHsgc2F5KGN1ci5zdG9yeS5zdGVwc1tzdG9yeUlkeF0ua3IucmVwbGFjZSgvXCguKj9cKS9nLCAiIikpOyB9CmZ1bmN0aW9uIHN0b3J5Q2hvaWNlKGJ0biwgYywgZXYpIHsKICBpZiAoY1syXSkgewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3N0Q2hvaWNlcyAuYW5zIikuZm9yRWFjaChiID0+IGIub25jbGljayA9IG51bGwpOwogICAgYnRuLmNsYXNzTGlzdC5hZGQoImNvcnJlY3QiKTsKICAgIHNmeC5nb29kKCk7CiAgICBnYWluWHAoNCk7IGZsb2F0RngoIis0IFhQIiwgIiMyRjdENEYiLCBldi5jbGllbnRYLCBldi5jbGllbnRZKTsKICAgIHN0b3J5SWR4Kys7CiAgICAvLyBzcGVhayB0aGUgY2hvc2VuIHNlbnRlbmNlIGluIGZ1bGwsIFRIRU4gYWR2YW5jZSAoZmFsbGJhY2sgdGltZXIgaWYgVFRTIGlzIHNpbGVudCkKICAgIGxldCBhZHZhbmNlZCA9IGZhbHNlOwogICAgY29uc3QgYWR2YW5jZSA9ICgpID0+IHsKICAgICAgaWYgKGFkdmFuY2VkKSByZXR1cm47CiAgICAgIGFkdmFuY2VkID0gdHJ1ZTsKICAgICAgc3RvcnlBZHZhbmNlKCk7CiAgICB9OwogICAgc2F5KGNbMF0sIDAuOSwgKCkgPT4gc2V0VGltZW91dChhZHZhbmNlLCAyNTApKTsKICAgIHNldFRpbWVvdXQoYWR2YW5jZSwgTWF0aC5tYXgoMzUwMCwgY1swXS5sZW5ndGggKiAyMjApKTsKICB9IGVsc2UgewogICAgYnRuLmNsYXNzTGlzdC5hZGQoIndyb25nIik7IHNmeC5iYWQoKTsKICAgIGZsb2F0RngoIvCfmKwg4oCmYXdrd2FyZCBzaWxlbmNl4oCmIiwgIiNCMDdEMjgiLCBldi5jbGllbnRYLCBldi5jbGllbnRZIC0gMzApOwogICAgc2V0VGltZW91dCgoKSA9PiBidG4uY2xhc3NMaXN0LnJlbW92ZSgid3JvbmciKSwgNjAwKTsKICB9Cn0KZnVuY3Rpb24gc3RvcnlBZHZhbmNlKCkgewogIGlmIChzdG9yeUlkeCA+PSBjdXIuc3Rvcnkuc3RlcHMubGVuZ3RoKSB7CiAgICBjb25zdCBscyA9IGxzdGF0ZShjdXIubik7CiAgICBjb25zdCBmaXJzdCA9ICFscy5zdGFycy5zdG9yeTsKICAgIGxzLnN0YXJzLnN0b3J5ID0gdHJ1ZTsgcGVyc2lzdCgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdGFycyIpLnRleHRDb250ZW50ID0gc3RhcnNPZihjdXIubik7CiAgICBnYWluWHAoMTUpOyBjb25mZXR0aSgpOyBzZngud2luKCk7CiAgICBkYWlseUJ1bXAoImNvbnZvIik7CiAgICBjb25zdCBzdGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFN0YWdlIik7CiAgICBzdGFnZS5jbGFzc05hbWUgPSAic3RhZ2UgYmctZmVzdGl2ZSI7CiAgICBzdGFnZS5pbm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J2FjdG9yJz7wn46JPC9zcGFuPjxzcGFuIGNsYXNzPSdhY3Rvcic+8J+Phjwvc3Bhbj48c3BhbiBjbGFzcz0nYWN0b3InPvCfjoo8L3NwYW4+IjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdE5hciIpLnRleHRDb250ZW50ID0gIlNjZW5hcmlvIGNvbXBsZXRlISBZb3Ugc3Vydml2ZWQgdGhlIHNpdHVhdGlvbiBpbiBLb3JlYW4uICsxNSBYUCIgKyAoZmlyc3QgPyAiIGFuZCBhIOKtkCBTdG9yeSBzdGFyISIgOiAiIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RXaG8iKS50ZXh0Q29udGVudCA9ICLwn46tIFRoZSBFbmQiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0S3IiKS50ZXh0Q29udGVudCA9ICLsoJXrp5Ag7J6Y7ZaI7Ja07JqUISI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RFbiIpLnRleHRDb250ZW50ID0gIllvdSBkaWQgcmVhbGx5IHdlbGwhIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFByb21wdCIpLnRleHRDb250ZW50ID0gIiI7CiAgICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RDaG9pY2VzIik7CiAgICBib3guaW5uZXJIVE1MID0gIiI7CiAgICBjb25zdCBhZ2FpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYWdhaW4uY2xhc3NOYW1lID0gImJ0biI7IGFnYWluLnRleHRDb250ZW50ID0gIlJlcGxheSBzdG9yeSDwn5SBIjsKICAgIGFnYWluLm9uY2xpY2sgPSAoKSA9PiB7IHN0b3J5SWR4ID0gMDsgcmVuZGVyU3RvcnkoKTsgfTsKICAgIGJveC5hcHBlbmRDaGlsZChhZ2Fpbik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3REb3RzIikudGV4dENvbnRlbnQgPSBjdXIuc3Rvcnkuc3RlcHMubWFwKCgpID0+ICLil48iKS5qb2luKCIgIik7CiAgICBzYXkoIuygleunkCDsnpjtlojslrTsmpQhIik7CiAgfSBlbHNlIHsKICAgIHJlbmRlclN0b3J5KCk7CiAgfQp9CgovKiAtLS0gTGVhcm4gdGFiIC0tLSAqLwpmdW5jdGlvbiByZW5kZXJMZWFybigpIHsKICBjb25zdCB3ID0gY3VyLndvcmRzW2xlYXJuSWR4XTsKICBjb25zdCBzdCA9IGxzdGF0ZShjdXIubik7CiAgY29uc3Qga25vd24gPSBzdC5rbm93bi5pbmNsdWRlcyh3WzBdKTsKICBjb25zdCBzYWlkID0gKHN0LnByb24gfHwgW10pLmluY2x1ZGVzKHdbMF0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3Y2FyZCIpLmlubmVySFRNTCA9IGAKICAgIDxkaXYgY2xhc3M9IndlbW9qaSI+JHt3WzRdfTwvZGl2PgogICAgPGRpdiBjbGFzcz0id2tyIiBvbmNsaWNrPSJzYXkoJyR7d1swXS5yZXBsYWNlKC8nL2csIlxcJyIpfScpIj4ke3dbMF19PHNwYW4gaWQ9IndCYWRnZSI+JHtzYWlkID8gIiDwn46WIiA6ICIifTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2NvbG9yOnZhcigtLWFjY2VudDIpIj7wn5SKPC9zcGFuPjwvZGl2PgogICAgPGRpdiBjbGFzcz0id3JvIj4ke3dbMV19PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ3bWVhbiI+JHt3WzJdfTwvZGl2PgogICAgPGRpdiBjbGFzcz0id3ZpIj7wn5KhICR7d1szXX08L2Rpdj4KICAgIDxkaXYgY2xhc3M9IndleCIgb25jbGljaz0ic2F5KCcke3dbNV0ucmVwbGFjZSgvJy9nLCJcXCciKX0nKSI+CiAgICAgICR7d1s1XX0gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWFjY2VudDIpO2ZvbnQtc2l6ZToxMnB4Ij7wn5SKPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJleGVuIj4ke3dbNl19PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNheXJvdyI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzYXlidG4iIGlkPSJ3TWljIiBvbmNsaWNrPSJ3b3JkTWljVGFwKCkiPvCfjqQgU2F5IGl0PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBvbmNsaWNrPSJzYXkoJyR7d1swXS5yZXBsYWNlKC8nL2csIlxcJyIpfScsMC41NSkiPvCfkKIgU2xvdzwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0id1Byb25SZXMiIHN0eWxlPSJtaW4taGVpZ2h0OjA7Zm9udC1zaXplOjEzLjVweDsiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ic3BrLWRpZmYiIGlkPSJ3UHJvbkRpZmYiIHN0eWxlPSJmb250LXNpemU6MjJweDsiPjwvZGl2PmA7CiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtub3dCdG4iKTsKICBidG4udGV4dENvbnRlbnQgPSBrbm93biA/ICLinJMgTGVhcm5lZCEiIDogIuKckyBHb3QgaXQhICgrMyBYUCkiOwogIGJ0bi5zdHlsZS5vcGFjaXR5ID0ga25vd24gPyAuNTUgOiAxOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZWFybkNvdW50IikudGV4dENvbnRlbnQgPQogICAgYCR7bGVhcm5JZHggKyAxfSAvICR7Y3VyLndvcmRzLmxlbmd0aH0gwrcgbGVhcm5lZCAke3N0Lmtub3duLmxlbmd0aH0vJHtjdXIud29yZHMubGVuZ3RofWA7CiAgc2F5KHdbMF0pOwp9CmZ1bmN0aW9uIGxlYXJuTW92ZShkKSB7CiAgbGVhcm5JZHggPSAobGVhcm5JZHggKyBkICsgY3VyLndvcmRzLmxlbmd0aCkgJSBjdXIud29yZHMubGVuZ3RoOwogIHJlbmRlckxlYXJuKCk7Cn0KZnVuY3Rpb24gbGVhcm5Lbm93KCkgewogIGNvbnN0IHcgPSBjdXIud29yZHNbbGVhcm5JZHhdOwogIGNvbnN0IHN0ID0gbHN0YXRlKGN1ci5uKTsKICBpZiAoIXN0Lmtub3duLmluY2x1ZGVzKHdbMF0pKSB7CiAgICBzdC5rbm93bi5wdXNoKHdbMF0pOwogICAgZ2FpblhwKDMpOyBzZnguZ29vZCgpOyBmbG9hdEZ4KCIrMyBYUCIsICIjMkY3RDRGIik7CiAgICBkYWlseUJ1bXAoIndvcmRzIik7CiAgICAvLyBtaWxlc3RvbmUgcmV3YXJkOiBldmVyeSAxMHRoIHdvcmQgbGVhcm5lZCBhY3Jvc3MgYWxsIGxlc3NvbnMKICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhzYXZlLmxlc3NvbnMpLnJlZHVjZSgoYSwgbCkgPT4gYSArIChsLmtub3duID8gbC5rbm93bi5sZW5ndGggOiAwKSwgMCk7CiAgICBpZiAodG90YWwgPiAwICYmIHRvdGFsICUgMTAgPT09IDApIHsKICAgICAgZ2FpblhwKDEwKTsgY29uZmV0dGkoKTsgc2Z4LndpbigpOwogICAgICBmbG9hdEZ4KCLwn5OaICIgKyB0b3RhbCArICIgd29yZHMhICsxMCBib251cyIsICIjQjA3RDI4IiwgbnVsbCwgd2luZG93LmlubmVySGVpZ2h0IC8gMiAtIDYwKTsKICAgIH0KICAgIGlmIChzdC5rbm93bi5sZW5ndGggPT09IGN1ci53b3Jkcy5sZW5ndGggJiYgIXN0LnN0YXJzLmxlYXJuKSB7CiAgICAgIHN0LnN0YXJzLmxlYXJuID0gdHJ1ZTsgcGVyc2lzdCgpOyBjb25mZXR0aSgpOyBzZngud2luKCk7CiAgICAgIGZsb2F0RngoIuKtkCBWb2NhYnVsYXJ5IHN0YXIhIiwgIiNCMDdEMjgiKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdGFycyIpLnRleHRDb250ZW50ID0gc3RhcnNPZihjdXIubik7CiAgICB9CiAgICBwZXJzaXN0KCk7CiAgfQogIGxlYXJuTW92ZSgxKTsKfQoKLyogLS0tIEdyYW1tYXIgdGFiIC0tLSAqLwpmdW5jdGlvbiByZW5kZXJHcmFtbWFyKCkgewogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItZ3JhbW1hciIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBjdXIuZ3JhbW1hci5mb3JFYWNoKGcgPT4gewogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZC5jbGFzc05hbWUgPSAiZ2NhcmQiOwogICAgZC5pbm5lckhUTUwgPSBgCiAgICAgIDxkaXYgY2xhc3M9ImdwYXQiPiR7Z1swXX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ21lYW4iPiR7Z1sxXX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ3ZpIj7wn5ejIFdoZW4gdG8gdXNlOiAke2dbMl19PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Imdub3RlIj7wn5KhICR7Z1szXX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ2V4IiBvbmNsaWNrPSJzYXkoJyR7Z1s0XS5yZXBsYWNlKC8nL2csIlxcJyIpfScpIj48ZGl2IGNsYXNzPSJrIj4ke2dbNF19IDxzcGFuIGNsYXNzPSJzcGsiPvCflIo8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZSI+JHtnWzVdfTwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJnZXgiIG9uY2xpY2s9InNheSgnJHtnWzZdLnJlcGxhY2UoLycvZywiXFwnIil9JykiPjxkaXYgY2xhc3M9ImsiPiR7Z1s2XX0gPHNwYW4gY2xhc3M9InNwayI+8J+Uijwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJlIj4ke2dbN119PC9kaXY+PC9kaXY+YDsKICAgIGJveC5hcHBlbmRDaGlsZChkKTsKICB9KTsKfQoKLyogLS0tIFNwZWFrIHRhYiAtLS0gKi8KZnVuY3Rpb24gc3BlYWtTZW50ZW5jZXMoKSB7CiAgcmV0dXJuIGN1ci53b3Jkcy5maWx0ZXIodyA9PiB3WzVdLnNwbGl0KCIgIikubGVuZ3RoID49IDIpLnNsaWNlKDAsIDgpLm1hcCh3ID0+IFt3WzVdLCB3WzZdXSk7Cn0KZnVuY3Rpb24gcmVuZGVyU3BlYWsoKSB7CiAgY29uc3Qgc3MgPSBzcGVha1NlbnRlbmNlcygpOwogIGNvbnN0IHMgPSBzc1tzcGVha0lkeCAlIHNzLmxlbmd0aF07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0tyIikudGV4dENvbnRlbnQgPSBzWzBdOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGtFbiIpLnRleHRDb250ZW50ID0gc1sxXTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrUmVzdWx0IikuaW5uZXJIVE1MID0gIiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0RpZmYiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrRml4ZXMiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrUGxheWJhY2siKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGNvbnN0IG1pYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtaWNCdG4iKTsKICBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7IG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsKICByZWNvcmRpbmcgPSBmYWxzZTsgc3RvcFJlY29yZGluZygpOwogIGNvbnN0IHN0ID0gbHN0YXRlKGN1ci5uKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BlYWtDb3VudCIpLnRleHRDb250ZW50ID0KICAgIGAkeyhzcGVha0lkeCAlIHNzLmxlbmd0aCkgKyAxfSAvICR7c3MubGVuZ3RofSDCtyBzcG9rZW4gJHtzdC5zcG9rZW4ubGVuZ3RofS81IGZvciDirZBgOwp9CmZ1bmN0aW9uIHNheUN1cihyYXRlID0gMC45KSB7IHNheShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrS3IiKS50ZXh0Q29udGVudCwgcmF0ZSk7IH0KZnVuY3Rpb24gc3BlYWtNb3ZlKGQpIHsKICBjb25zdCBzcyA9IHNwZWFrU2VudGVuY2VzKCk7CiAgc3BlYWtJZHggPSAoc3BlYWtJZHggKyBkICsgc3MubGVuZ3RoKSAlIHNzLmxlbmd0aDsKICByZW5kZXJTcGVhaygpOwp9Ci8qIC0tLSBUYWxrIHRhYjogc3Bva2VuIGNvbnZlcnNhdGlvbiB3aXRoIHRoZSBnYW1lIC0tLSAqLwpsZXQgVEsgPSB7fTsgICAgICAgIC8vIHBlci1sZXNzb24gaW4tc2Vzc2lvbiBjb252ZXJzYXRpb24gc3RhdGUKbGV0IGVhck1vZGUgPSBmYWxzZTsKZnVuY3Rpb24gdGFsa1N0YXRlKCkgewogIGlmICghVEtbY3VyLm5dKSBUS1tjdXIubl0gPSB7IGk6IDAsIGxvZzogW10sIGRvbmU6IGZhbHNlLCBoaW50VXNlZDogZmFsc2UgfTsKICByZXR1cm4gVEtbY3VyLm5dOwp9CmZ1bmN0aW9uIHRhbGsoKSB7IHJldHVybiBUQUxLU1tjdXIubl07IH0KZnVuY3Rpb24gcmVuZGVyVGFsaygpIHsKICBjb25zdCBUID0gdGFsaygpLCBzdCA9IHRhbGtTdGF0ZSgpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1RpdGxlIikudGV4dENvbnRlbnQgPSAi8J+SrCAiICsgVC50OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1Jlc3VsdCIpLmlubmVySFRNTCA9ICIiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgcmVidWlsZENoYXQoKTsKICBpZiAoc3QubG9nLmxlbmd0aCA9PT0gMCAmJiAhc3QuZG9uZSkgbnBjVHVybih0cnVlKTsKICBlbHNlIGlmICghc3QuZG9uZSkgc2hvd1Rhc2soKTsKICBlbHNlIHNob3dUYXNrKCk7IC8vIGRvbmU6IHRhc2sgYm94IHNob3dzIGNvbXBsZXRpb24gbm90ZSBmcm9tIGxvZwp9CmZ1bmN0aW9uIHJlYnVpbGRDaGF0KCkgewogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0NoYXQiKTsKICBib3guaW5uZXJIVE1MID0gIiI7CiAgdGFsa1N0YXRlKCkubG9nLmZvckVhY2gobSA9PiBib3guYXBwZW5kQ2hpbGQobWFrZUJ1YmJsZShtKSkpOwogIHNjcm9sbENoYXQoKTsKfQpmdW5jdGlvbiBtYWtlQnViYmxlKG0pIHsKICBjb25zdCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgZC5jbGFzc05hbWUgPSAibXNnICIgKyBtLndobzsKICBpZiAobS53aG8gPT09ICJucGMiKSB7CiAgICBjb25zdCBtYXNrZWQgPSBlYXJNb2RlICYmICFtLnJldmVhbGVkOwogICAgZC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0id2hvIj4ke20ubnBjV2hvIHx8IHRhbGsoKS53aG99PC9kaXY+YCArCiAgICAgIChtYXNrZWQgPyBgPHNwYW4gY2xhc3M9Im1hc2tlZCI+8J+OpyB0YXAgdG8gcmV2ZWFsPC9zcGFuPmAKICAgICAgICAgICAgICA6IGAke20ua3J9IDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1hY2NlbnQyKTtmb250LXNpemU6MTJweCI+8J+Uijwvc3Bhbj48ZGl2IGNsYXNzPSJtZW4iPiR7bS5lbn08L2Rpdj5gKTsKICAgIGQub25jbGljayA9ICgpID0+IHsgbS5yZXZlYWxlZCA9IHRydWU7IHJlYnVpbGRDaGF0KCk7IHNheShtLmtyKTsgfTsKICB9IGVsc2UgaWYgKG0ud2hvID09PSAibWUiKSB7CiAgICBkLmlubmVySFRNTCA9IGAke20ua3J9JHttLnNjb3JlID8gYDxkaXYgY2xhc3M9InNjb3JlIj4ke20uc2NvcmV9PC9kaXY+YCA6ICIifWA7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiBzYXkobS5rcik7CiAgfSBlbHNlIHsKICAgIGQudGV4dENvbnRlbnQgPSBtLmtyOwogIH0KICByZXR1cm4gZDsKfQpmdW5jdGlvbiBzY3JvbGxDaGF0KCkgewogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0NoYXQiKTsKICBpZiAoYm94Lmxhc3RDaGlsZCkgYm94Lmxhc3RDaGlsZC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAic21vb3RoIiwgYmxvY2s6ICJuZWFyZXN0IiB9KTsKfQpmdW5jdGlvbiBucGNUdXJuKGZpcnN0KSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKSwgVCA9IHRhbGsoKTsKICBjb25zdCB0dXJuID0gVC50dXJuc1tzdC5pXTsKICBjb25zdCB0eXBpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICB0eXBpbmcuY2xhc3NOYW1lID0gIm1zZyBucGMgdHlwaW5nIjsKICB0eXBpbmcuaW5uZXJIVE1MID0gIjxzcGFuPuKXjzwvc3Bhbj48c3Bhbj7il488L3NwYW4+PHNwYW4+4pePPC9zcGFuPiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrQ2hhdCIpLmFwcGVuZENoaWxkKHR5cGluZyk7CiAgc2Nyb2xsQ2hhdCgpOwogIHNldFRpbWVvdXQoKCkgPT4gewogICAgdHlwaW5nLnJlbW92ZSgpOwogICAgc3QubG9nLnB1c2goeyB3aG86ICJucGMiLCBrcjogdHVybi5xLCBlbjogdHVybi5xRW4sIG5wY1dobzogdHVybi5ucGNXaG8gfSk7CiAgICByZWJ1aWxkQ2hhdCgpOwogICAgc2F5KHR1cm4ucSk7CiAgICBzaG93VGFzaygpOwogIH0sIGZpcnN0ID8gNTAwIDogMTAwMCk7Cn0KZnVuY3Rpb24gc2hvd1Rhc2soKSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKSwgVCA9IHRhbGsoKTsKICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtUYXNrIik7CiAgaWYgKHN0LmRvbmUpIHsKICAgIGJveC5pbm5lckhUTUwgPSAi8J+PgSBDb252ZXJzYXRpb24gY29tcGxldGUhIFJlcGxheSBpdCB3aXRoIOKGuiwgb3IgdHJ5IPCfjqcgTGlzdGVuaW5nIG1vZGUgZm9yIGV4dHJhIGVhciB0cmFpbmluZy4iICsKICAgICAgJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTJweDt0ZXh0LWFsaWduOmNlbnRlcjsiPjxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9InBhZGRpbmc6MTFweCAyNnB4O2ZvbnQtc2l6ZToxNXB4OyIgb25jbGljaz0iKHdpbmRvdy5rcUFmdGVyVGFsaz93aW5kb3cua3FBZnRlclRhbGsoKTpiYWNrVG9MZXNzb24oKSkiPk5leHQg4oaSPC9idXR0b24+PC9kaXY+JzsKICAgIGNvbnN0IGN0cmxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3RhYi10YWxrIC50ay1jb250cm9scyIpOwogICAgaWYgKGN0cmxzKSBjdHJscy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgcmV0dXJuOwogIH0KICBjb25zdCBjdHJscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN0YWItdGFsayAudGstY29udHJvbHMiKTsKICBpZiAoY3RybHMpIGN0cmxzLnN0eWxlLmRpc3BsYXkgPSAiIjsKICBjb25zdCB0dXJuID0gVC50dXJuc1tzdC5pXTsKICBib3guaW5uZXJIVE1MID0gYPCfjq8gPGI+WW91ciB0dXJuICgke3N0LmkgKyAxfS8ke1QudHVybnMubGVuZ3RofSk6PC9iPiAke3R1cm4udGFza308ZGl2IGlkPSJ0a0hpbnRCb3giPjwvZGl2PmA7CiAgc3QuaGludFVzZWQgPSBmYWxzZTsKICBjb25zdCB0ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0RpZmYiKSwgdGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtGaXhlcyIpOwogIGlmICh0ZCkgdGQuaW5uZXJIVE1MID0gIiI7CiAgaWYgKHRmKSB0Zi5pbm5lckhUTUwgPSAiIjsKfQpmdW5jdGlvbiB0a0hpbnQoKSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKTsKICBpZiAoc3QuZG9uZSkgcmV0dXJuOwogIGNvbnN0IHR1cm4gPSB0YWxrKCkudHVybnNbc3QuaV07CiAgc3QuaGludFVzZWQgPSB0cnVlOwogIGNvbnN0IGhiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrSGludEJveCIpOwogIGlmIChoYikgaGIuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImhpbnRsaW5lIj7wn5KhICR7dHVybi5hfSA8c3BhbiBjbGFzcz0ic25kYnRuIiBzdHlsZT0icGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMnB4OyIgb25jbGljaz0ic2F5KCcke3R1cm4uYS5yZXBsYWNlKC8nL2csIlxcJyIpfScsMC43KSI+8J+Qojwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjEycHg7Ij4ke3R1cm4uYUVufTwvZGl2PmA7Cn0KZnVuY3Rpb24gdGtTa2lwKCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCk7CiAgaWYgKHN0LmRvbmUpIHJldHVybjsKICBjb25zdCB0dXJuID0gdGFsaygpLnR1cm5zW3N0LmldOwogIHN0LmxvZy5wdXNoKHsgd2hvOiAibWUiLCBrcjogdHVybi5hLCBzY29yZTogIuKPrSBza2lwcGVkIOKAlCByZXBlYXQgaXQgYWZ0ZXIgdGhlIHZvaWNlISIgfSk7CiAgcmVidWlsZENoYXQoKTsKICBsZXQgYWR2YW5jZWQgPSBmYWxzZTsKICBjb25zdCBnbyA9ICgpID0+IHsgaWYgKGFkdmFuY2VkKSByZXR1cm47IGFkdmFuY2VkID0gdHJ1ZTsgdGtOZXh0KCk7IH07CiAgc2F5KHR1cm4uYSwgMC44LCAoKSA9PiBzZXRUaW1lb3V0KGdvLCAyMDApKTsKICBzZXRUaW1lb3V0KGdvLCBNYXRoLm1heCgzNTAwLCB0dXJuLmEubGVuZ3RoICogMjIwKSk7Cn0KZnVuY3Rpb24gdGtOZXh0KCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCksIFQgPSB0YWxrKCk7CiAgaWYgKHN0LmkgKyAxID49IFQudHVybnMubGVuZ3RoKSB7CiAgICBzdC5kb25lID0gdHJ1ZTsKICAgIHN0LmxvZy5wdXNoKHsgd2hvOiAibnBjIiwga3I6ICLsmKTripgg64yA7ZmUIOygleunkCDsoovslZjslrTsmpQhIOuLpOydjOyXkCDrmJAg7J207JW86riw7ZW07JqUISDwn46JIiwgZW46ICJUb2RheSdzIGNvbnZlcnNhdGlvbiB3YXMgZ3JlYXQhIExldCdzIHRhbGsgYWdhaW4gbmV4dCB0aW1lISIsIHJldmVhbGVkOiB0cnVlIH0pOwogICAgcmVidWlsZENoYXQoKTsKICAgIHNheSgi7Jik64qYIOuMgO2ZlCDsoJXrp5Ag7KKL7JWY7Ja07JqUISDri6TsnYzsl5Ag65iQIOydtOyVvOq4sO2VtOyalCEiKTsKICAgIGdhaW5YcCgyMCk7IGNvbmZldHRpKCk7IHNmeC53aW4oKTsKICAgIGRhaWx5QnVtcCgiY29udm8iKTsKICAgIGlmIChjdXIubiA9PT0gIlIiKSB7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1Jlc3VsdCIpLmlubmVySFRNTCA9CiAgICAgICAgYPCfj4YgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdvbGQpIj5SZXZpZXcgd29ya291dCBjb21wbGV0ZSEgKzIwIFhQIOKAlCB0YXAg4oa6IGZvciBhIGZyZXNoIHJhbmRvbSBtaXguPC9zcGFuPmA7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBscyA9IGxzdGF0ZShjdXIubik7CiAgICAgIGNvbnN0IGZpcnN0V2luID0gIWxzLnN0YXJzLnRhbGs7CiAgICAgIGxzLnN0YXJzLnRhbGsgPSB0cnVlOyBwZXJzaXN0KCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2YoY3VyLm4pOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPQogICAgICAgIGDwn4+GIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1nb2xkKSI+Q29udmVyc2F0aW9uIGNvbXBsZXRlISArMjAgWFAke2ZpcnN0V2luID8gIiBhbmQgYSDirZAgVGFsayBzdGFyISIgOiAiIn08L3NwYW4+YDsKICAgIH0KICAgIHNob3dUYXNrKCk7CiAgfSBlbHNlIHsKICAgIHN0LmkrKzsKICAgIG5wY1R1cm4oZmFsc2UpOwogIH0KfQpmdW5jdGlvbiB0a0dyYWRlKG9rKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrU2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICBjb25zdCBzdCA9IHRhbGtTdGF0ZSgpOwogIGNvbnN0IHR1cm4gPSB0YWxrKCkudHVybnNbc3QuaV07CiAgaWYgKG9rKSB7CiAgICBzdC5sb2cucHVzaCh7IHdobzogIm1lIiwga3I6IHR1cm4uYSwgc2NvcmU6ICLwn46ZIHNlbGYtY2hlY2tlZCDinJMiIH0pOwogICAgcmVidWlsZENoYXQoKTsKICAgIGdhaW5YcChzdC5oaW50VXNlZCA/IDQgOiA4KTsKICAgIGZsb2F0RngoIisiICsgKHN0LmhpbnRVc2VkID8gNCA6IDgpICsgIiBYUCIsICIjMkY3RDRGIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPSAiIjsKICAgIHNldFRpbWVvdXQodGtOZXh0LCA2MDApOwogIH0gZWxzZSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5MaXN0ZW4g8J+QoiB3aXRoIHRoZSBoaW50LCB0aGVuIHRyeSBvbmNlIG1vcmUhPC9zcGFuPmA7CiAgICB0a0hpbnQoKTsKICB9Cn0KYXN5bmMgZnVuY3Rpb24gdGtNaWNUYXAoKSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKTsKICBpZiAoc3QuZG9uZSkgcmV0dXJuOwogIGNvbnN0IHR1cm4gPSB0YWxrKCkudHVybnNbc3QuaV07CiAgY29uc3QgcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrUmVzdWx0Iik7CiAgY29uc3QgbWljID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrTWljIik7CiAgaWYgKFNSICYmICFzckJsb2NrZWQpIHsKICAgIGlmIChyZWNvZ25pemluZyAmJiBhY3RpdmVSZWMpIHsgZm9yY2VFbmRMaXN0ZW4oYWN0aXZlUmVjKTsgcmV0dXJuOyB9IC8vIHRhcCDij7kgPSBkb25lIHNwZWFraW5nCiAgICBpZiAocmVjb2duaXppbmcpIHJldHVybjsKICAgIGlmICghKGF3YWl0IGVuc3VyZU1pYygpKSkgewogICAgICByZXMuaW5uZXJIVE1MID0gbWljSGVscEh0bWwoKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrU2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgdGtIaW50KCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJlY29nbml6aW5nID0gdHJ1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBjb25zdCByZWMgPSBuZXcgU1IoKTsKICAgIGFjdGl2ZVJlYyA9IHJlYzsKICAgIHJlYy5sYW5nID0gImtvLUtSIjsgcmVjLm1heEFsdGVybmF0aXZlcyA9IDU7CiAgICBtaWMuY2xhc3NMaXN0LmFkZCgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLij7kiOwogICAgcmVzLnRleHRDb250ZW50ID0gIvCfjpkgU3BlYWsgeW91ciBhbnN3ZXIg4oCUIGl0IGNoZWNrcyB3aGVuIHlvdSBwYXVzZSAob3IgdGFwIOKPuSkuIjsKICAgIHJlYy5vbmVycm9yID0gZXYgPT4gewogICAgICByZWMuZXJyQ29kZSA9IGV2LmVycm9yOwogICAgICAvLyBtaWMgaXRzZWxmIGlzIGZpbmUgKHByZWZsaWdodCBwYXNzZWQpIGJ1dCB0aGUgcmVjb2duaXRpb24gc2VydmljZSBpcyBibG9ja2VkCiAgICAgIC8vIGluIHRoaXMgYnJvd3NlciDihpIgcGVybWFuZW50bHkgc3dpdGNoIHRvIHJlY29yZCAmIHNlbGYtY2hlY2sgbW9kZQogICAgICBpZiAoZXYuZXJyb3IgPT09ICJub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJzZXJ2aWNlLW5vdC1hbGxvd2VkIiB8fCBldi5lcnJvciA9PT0gIm5ldHdvcmsiKSBzckJsb2NrZWQgPSB0cnVlOwogICAgfTsKICAgIHN0YXJ0TGlzdGVuaW5nKHJlYywgewogICAgICBpZGxlTXM6IDIyMDAsIGNhcE1zOiAzMDAwMCwKICAgICAgb25MaXZlOiB0ID0+IHsgaWYgKHQpIHJlcy50ZXh0Q29udGVudCA9ICLwn46nIOKAnOKApiIgKyB0LnNsaWNlKC01MCkgKyAi4oCdIjsgfSwKICAgICAgb25GaW5pc2g6ICh0ZXh0LCBhbHRzKSA9PiB7CiAgICAgICAgcmVjb2duaXppbmcgPSBmYWxzZTsgaWYgKGFjdGl2ZVJlYyA9PT0gcmVjKSBhY3RpdmVSZWMgPSBudWxsOwogICAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICAgIGlmICghdGV4dCkgewogICAgICAgICAgaWYgKHNyQmxvY2tlZCkgewogICAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJoZWFyZCI+Vm9pY2UgcmVjb2duaXRpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGJyb3dzZXIg4oCUIHN3aXRjaGluZyB0byDwn46ZIHJlY29yZCAmYW1wOyBzZWxmLWNoZWNrIG1vZGUuIFRhcCB0aGUgbWljIGFnYWluITwvc3Bhbj5gOwogICAgICAgICAgfSBlbHNlIGlmICghcmVjLmVyckNvZGUgfHwgcmVjLmVyckNvZGUgPT09ICJuby1zcGVlY2giIHx8IHJlYy5lcnJDb2RlID09PSAiYWJvcnRlZCIpIHsKICAgICAgICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPkkgZGlkIG5vdCBoZWFyIGFueXRoaW5nIOKAlCB0YXAgdGhlIG1pYyBhbmQgdHJ5IGFnYWluLjwvc3Bhbj5gOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPlNwZWVjaCBjaGVjayBmYWlsZWQgKCR7cmVjLmVyckNvZGV9KS4gVXNlIPCfkqEgaGludCwgc2F5IGl0IGFsb3VkLCB0aGVuIGdyYWRlIHlvdXJzZWxmOjwvc3Bhbj5gOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtTZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICAgICAgICB0a0hpbnQoKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IFt0dXJuLmEsIC4uLih0dXJuLmFsdCB8fCBbXSldOwogICAgICAgIGxldCBiZXN0ID0geyBwY3Q6IC0xLCBoZWFyZDogIiIsIHRhcmdldDogdHVybi5hLCBkaWZmSHRtbDogIiIsIGZpeGVzSHRtbDogIiIgfTsKICAgICAgICB0YXJnZXRzLmZvckVhY2godCA9PiB7CiAgICAgICAgICBhbHRzLmZvckVhY2goYSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGZiID0gcHJvbkZlZWRiYWNrKHQsIGEpOwogICAgICAgICAgICBpZiAoZmIucGN0ID4gYmVzdC5wY3QpIGJlc3QgPSB7IC4uLmZiLCBoZWFyZDogYS50cmltKCksIHRhcmdldDogdCB9OwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgZGlmZkJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0RpZmYiKTsKICAgICAgICBjb25zdCBmaXhCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtGaXhlcyIpOwogICAgICAgIGlmIChiZXN0LnBjdCA+PSA2MCkgewogICAgICAgICAgc3QubG9nLnB1c2goeyB3aG86ICJtZSIsIGtyOiBiZXN0LmhlYXJkLCBzY29yZTogYOKckyAke2Jlc3QucGN0fSUgbWF0Y2hgIH0pOwogICAgICAgICAgcmVidWlsZENoYXQoKTsKICAgICAgICAgIHNmeC5nb29kKCk7CiAgICAgICAgICBkYWlseUJ1bXAoInByb24iKTsKICAgICAgICAgIGdhaW5YcChzdC5oaW50VXNlZCA/IDQgOiA4KTsKICAgICAgICAgIGZsb2F0RngoIisiICsgKHN0LmhpbnRVc2VkID8gNCA6IDgpICsgIiBYUCIsICIjMkY3RDRGIik7CiAgICAgICAgICBpZiAoYmVzdC5wY3QgPj0gOTApIHsKICAgICAgICAgICAgcmVzLmlubmVySFRNTCA9IGDinIUgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdyZWVuKSI+JHtiZXN0LnBjdH0lIOKAlCBwZXJmZWN0IHJlcGx5ITwvc3Bhbj5gOwogICAgICAgICAgICBkaWZmQm94LmlubmVySFRNTCA9ICIiOyBmaXhCb3guaW5uZXJIVE1MID0gIiI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4ke2Jlc3QucGN0fSUg4oCUIHVuZGVyc3Rvb2QhIFBvbGlzaCBmb3IgbmV4dCB0aW1lOjwvc3Bhbj5gOwogICAgICAgICAgICBkaWZmQm94LmlubmVySFRNTCA9IGJlc3QuZGlmZkh0bWw7CiAgICAgICAgICAgIGZpeEJveC5pbm5lckhUTUwgPSBiZXN0LmZpeGVzSHRtbDsKICAgICAgICAgIH0KICAgICAgICAgIHNldFRpbWVvdXQodGtOZXh0LCBiZXN0LnBjdCA+PSA5MCA/IDkwMCA6IDI2MDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZnguYmFkKCk7CiAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYPCfmYkgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdvbGQpIj4ke2Jlc3QucGN0fSUg4oCUIG5vdCBxdWl0ZS4gSGVyZSBpcyB3aGF0IHRvIGZpeCwgdGhlbiB0YXAg8J+OpCBhbmQgdHJ5IGFnYWluOjwvc3Bhbj48ZGl2IGNsYXNzPSJoZWFyZCI+SGVhcmQ6IOKAnCR7YmVzdC5oZWFyZH3igJ08L2Rpdj5gOwogICAgICAgICAgZGlmZkJveC5pbm5lckhUTUwgPSBiZXN0LmRpZmZIdG1sOwogICAgICAgICAgZml4Qm94LmlubmVySFRNTCA9IGJlc3QuZml4ZXNIdG1sOwogICAgICAgICAgdGtIaW50KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9IGVsc2UgewogICAgLy8gTm8gcmVjb2duaXRpb24gc2VydmljZSAob2xkZXIgaVBob25lcywgYXBwIHByZXZpZXdzKTogcmVjb3JkIHdpdGggYXV0by1zdG9wLAogICAgLy8gdGhlbiBjb21wYXJlIHlvdXIgdm9pY2UgdG8gdGhlIGhpbnQgYW5kIHNlbGYtZ3JhZGUuCiAgICBpZiAocmVjb3JkaW5nKSB7IC8vIG1hbnVhbCBzdG9wIHN0aWxsIHBvc3NpYmxlCiAgICAgIHJlY29yZGluZyA9IGZhbHNlOyBzdG9wUmVjb3JkaW5nKCk7CiAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBvayA9IGF3YWl0IHN0YXJ0UmVjb3JkaW5nKHRydWUsICgpID0+IHsKICAgICAgcmVjb3JkaW5nID0gZmFsc2U7CiAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICByZXMuaW5uZXJIVE1MID0gYDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0icGxheU15UmVjKCkiIHN0eWxlPSJtYXJnaW46MCA2cHggMCAwOyI+4pa277iPIE15IGFuc3dlcjwvYnV0dG9uPjxzcGFuIGNsYXNzPSJoZWFyZCI+Q29tcGFyZSB3aXRoIHRoZSDwn5KhIGhpbnQsIHRoZW4gZ3JhZGUgeW91cnNlbGY6PC9zcGFuPmA7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICAgIHRrSGludCgpOwogICAgfSk7CiAgICBpZiAoIW9rKSB7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtTZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICB0a0hpbnQoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmVjb3JkaW5nID0gdHJ1ZTsgbWljLmNsYXNzTGlzdC5hZGQoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi4o+5IjsKICAgIHJlcy50ZXh0Q29udGVudCA9ICLwn5S0IFJlY29yZGluZ+KApiBzcGVhayB5b3VyIGFuc3dlciwgdGhlbiBwYXVzZSDigJQgaXQgc3RvcHMgYnkgaXRzZWxmLiI7CiAgfQp9CmZ1bmN0aW9uIHRvZ2dsZUVhcigpIHsKICBlYXJNb2RlID0gIWVhck1vZGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrRWFyIikudGV4dENvbnRlbnQgPSBlYXJNb2RlID8gIvCfkYAgU2hvdyB0ZXh0IiA6ICLwn46nIExpc3RlbmluZyBtb2RlIjsKICByZWJ1aWxkQ2hhdCgpOwp9CmZ1bmN0aW9uIHRrUmVzdGFydCgpIHsKICBpZiAoY3VyLm4gPT09ICJSIikgeyBvcGVuUmV2aWV3KCk7IHJldHVybjsgfSAvLyBmcmVzaCByYW5kb20gbWl4CiAgZGVsZXRlIFRLW2N1ci5uXTsKICByZW5kZXJUYWxrKCk7Cn0KCi8qIC0tLSBQcm9udW5jaWF0aW9uIGNvYWNoIC0tLSAqLwovLyBLUVNSOiBuYXRpdmUtYXBwIHNoaW0gc2xvdCDigJQgdGhlIGlPUyBhcHAgaW5qZWN0cyBhIHJlY29nbml6ZXIgd2l0aCB0aGUgc2FtZSBpbnRlcmZhY2UKY29uc3QgU1IgPSB3aW5kb3cuS1FTUiB8fCB3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHwgd2luZG93LndlYmtpdFNwZWVjaFJlY29nbml0aW9uOwpsZXQgcmVjb2duaXppbmcgPSBmYWxzZSwgbWVkaWFSZWMgPSBudWxsLCByZWNDaHVua3MgPSBbXSwgbXlSZWNVcmwgPSBudWxsLCByZWNvcmRpbmcgPSBmYWxzZTsKbGV0IG1pY1Blcm0gPSBudWxsLCBzckJsb2NrZWQgPSBmYWxzZSwgdmFkQ2FuY2VsID0gbnVsbCwgYWN0aXZlUmVjID0gbnVsbDsKCi8qIFJlbGVhc2UgdGhlIG1pY3JvcGhvbmUgQ09NUExFVEVMWSDigJQgY2FsbGVkIHdoZW4gbGVhdmluZyB0aGUgcGFnZS9zY3JlZW4gc28gdGhlCiAgIE9TIG1pYyBpbmRpY2F0b3IgbmV2ZXIgbGluZ2VycyBhZnRlciB0aGUgYnJvd3NlciBpcyBjbG9zZWQgb3IgYmFja2dyb3VuZGVkLiAqLwpsZXQgbWljU3RyZWFtID0gbnVsbCwgbGlzdGVuVGltZW91dCA9IG51bGw7CmZ1bmN0aW9uIGtpbGxNaWNTdHJlYW0oKSB7CiAgdHJ5IHsgaWYgKG1pY1N0cmVhbSkgbWljU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godCA9PiB0LnN0b3AoKSk7IH0gY2F0Y2ggKGUpIHt9CiAgbWljU3RyZWFtID0gbnVsbDsKfQpmdW5jdGlvbiBhcm1MaXN0ZW4ocmVjLCBtcyA9IDE1MDAwKSB7CiAgY2xlYXJUaW1lb3V0KGxpc3RlblRpbWVvdXQpOwogIC8vIGhhcmQgY2FwOiBuZXZlciBob2xkIHRoZSBtaWMgbG9uZ2VyIHRoYW4gdGhpcyB3aXRob3V0IGZpbmlzaGluZyAoaU9TIHJhcmVseSBhdXRvLWVuZHMpCiAgbGlzdGVuVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4geyBpZiAoYWN0aXZlUmVjID09PSByZWMpIGZvcmNlRW5kTGlzdGVuKHJlYyk7IH0sIG1zKTsKfQovKiBpT1MgV2ViS2l0IHNvbWV0aW1lcyBpZ25vcmVzIHN0b3AoKSBhbmQgbmV2ZXIgZmlyZXMgb25lbmQg4oCUIGVzY2FsYXRlOgogICBzdG9wIOKGkiBhYm9ydCAoMC44cykg4oaSIGZvcmNlIHRoZSBmaW5pc2ggaGFuZGxlciBvdXJzZWx2ZXMgKDEuNnMpIHNvIHRoZQogICDij7kgYnV0dG9uIEFMV0FZUyByZXNvbHZlcyBpbnRvIGEgcmVzdWx0IG9yIGEgY2xlYXIgImRpZCBub3QgaGVhciIgbWVzc2FnZS4gKi8KZnVuY3Rpb24gZm9yY2VFbmRMaXN0ZW4ocmVjKSB7CiAgdHJ5IHsgcmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30KICBzZXRUaW1lb3V0KCgpID0+IHsgaWYgKGFjdGl2ZVJlYyA9PT0gcmVjKSB7IHRyeSB7IHJlYy5hYm9ydCgpOyB9IGNhdGNoIChlKSB7fSB9IH0sIDgwMCk7CiAgc2V0VGltZW91dCgoKSA9PiB7IGlmIChhY3RpdmVSZWMgPT09IHJlYyAmJiByZWMub25lbmQpIHsgdHJ5IHsgcmVjLm9uZW5kKCk7IH0gY2F0Y2ggKGUpIHt9IH0gfSwgMTYwMCk7Cn0KLyogQ29udGludW91cyBsaXN0ZW5pbmcgc2Vzc2lvbjogY29sbGVjdHMgRVZFUlkgc2VudGVuY2UgKGZpbmFsIHNlZ21lbnRzICsgdGhlCiAgIHRyYWlsaW5nIG5vdC15ZXQtZmluYWwgdGV4dCkgdW50aWwgdGhlIHNwZWFrZXIgcGF1c2VzIGZvciBpZGxlTXMsIHRhcHMg4o+5LAogICBvciBjYXBNcyBwYXNzZXMuIEZpeGVzIG9uZS1zaG90IHJlY29nbml0aW9uIG9ubHkga2VlcGluZyB0aGUgZmlyc3Qgc2VudGVuY2UuICovCmZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nKHJlYywgeyBpZGxlTXMsIGNhcE1zLCBvbkxpdmUsIG9uRmluaXNoIH0pIHsKICByZWMuY29udGludW91cyA9IHRydWU7CiAgcmVjLmludGVyaW1SZXN1bHRzID0gdHJ1ZTsKICBsZXQgZmluYWxzID0gW10sIGludGVyaW0gPSAiIiwgc2VnQWx0cyA9IG51bGwsIHNlZ0NvdW50ID0gMDsKICBsZXQgbGFzdEFjdGl2aXR5ID0gRGF0ZS5ub3coKSwgZ290U3BlZWNoID0gZmFsc2UsIGZpbmlzaGVkID0gZmFsc2U7CiAgcmVjLm9ucmVzdWx0ID0gZSA9PiB7CiAgICBpbnRlcmltID0gIiI7CiAgICBmb3IgKGxldCBpID0gZS5yZXN1bHRJbmRleDsgaSA8IGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBzZWcgPSBlLnJlc3VsdHNbaV07CiAgICAgIGlmIChzZWcuaXNGaW5hbCkgewogICAgICAgIGZpbmFscy5wdXNoKHNlZ1swXS50cmFuc2NyaXB0LnRyaW0oKSk7CiAgICAgICAgc2VnQ291bnQrKzsKICAgICAgICAvLyBrZWVwIHJlY29nbml6ZXIgYWx0ZXJuYXRpdmVzIG9ubHkgaW4gdGhlIHNpbXBsZSBvbmUtc2VudGVuY2UgY2FzZQogICAgICAgIHNlZ0FsdHMgPSBzZWdDb3VudCA9PT0gMSA/IFsuLi5zZWddLm1hcChyID0+IHIudHJhbnNjcmlwdCkgOiBudWxsOwogICAgICB9IGVsc2UgaW50ZXJpbSArPSBzZWdbMF0udHJhbnNjcmlwdDsKICAgIH0KICAgIGdvdFNwZWVjaCA9IHRydWU7IGxhc3RBY3Rpdml0eSA9IERhdGUubm93KCk7CiAgICBpZiAob25MaXZlKSBvbkxpdmUoKGZpbmFscy5qb2luKCIgIikgKyAiICIgKyBpbnRlcmltKS50cmltKCkpOwogIH07CiAgY29uc3QgaWRsZSA9IHNldEludGVydmFsKCgpID0+IHsKICAgIGlmIChmaW5pc2hlZCB8fCBhY3RpdmVSZWMgIT09IHJlYykgeyBjbGVhckludGVydmFsKGlkbGUpOyByZXR1cm47IH0KICAgIC8vIGlkbGVNcyBvZiAwIG1lYW5zICJuZXZlciBzdG9wIG9uIHlvdXIgb3duIiAtLSB0aGUgbGVhcm5lciB0YXBzIHRvIGZpbmlzaAogICAgaWYgKGlkbGVNcyAmJiBnb3RTcGVlY2ggJiYgRGF0ZS5ub3coKSAtIGxhc3RBY3Rpdml0eSA+IGlkbGVNcykgeyB0cnkgeyByZWMuc3RvcCgpOyB9IGNhdGNoIChlKSB7fSB9CiAgfSwgMzAwKTsKICByZWMub25lbmQgPSAoKSA9PiB7CiAgICBpZiAoZmluaXNoZWQpIHJldHVybjsKICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgIGNsZWFySW50ZXJ2YWwoaWRsZSk7CiAgICBjb25zdCB0ZXh0ID0gKGZpbmFscy5qb2luKCIgIikgKyAiICIgKyBpbnRlcmltKS50cmltKCk7CiAgICBjb25zdCBhbHRzID0gKHNlZ0NvdW50ID09PSAxICYmICFpbnRlcmltLnRyaW0oKSAmJiBzZWdBbHRzKSA/IHNlZ0FsdHMgOiAodGV4dCA/IFt0ZXh0XSA6IFtdKTsKICAgIG9uRmluaXNoKHRleHQsIGFsdHMpOwogIH07CiAgYXJtTGlzdGVuKHJlYywgY2FwTXMpOwogIHJlYy5zdGFydCgpOwp9CmZ1bmN0aW9uIGhhcmRTdG9wQXVkaW8oKSB7CiAgY2xlYXJUaW1lb3V0KGxpc3RlblRpbWVvdXQpOwogIHRyeSB7CiAgICBpZiAoYWN0aXZlUmVjKSB7CiAgICAgIGFjdGl2ZVJlYy5vbnJlc3VsdCA9IG51bGw7IGFjdGl2ZVJlYy5vbmVycm9yID0gbnVsbDsgYWN0aXZlUmVjLm9uZW5kID0gbnVsbDsKICAgICAgdHJ5IHsgYWN0aXZlUmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30KICAgICAgdHJ5IHsgYWN0aXZlUmVjLmFib3J0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgfSBjYXRjaCAoZSkge30KICBhY3RpdmVSZWMgPSBudWxsOyByZWNvZ25pemluZyA9IGZhbHNlOwogIHN0b3BSZWNvcmRpbmcoKTsgcmVjb3JkaW5nID0gZmFsc2U7CiAga2lsbE1pY1N0cmVhbSgpOwogIHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKTsgfSBjYXRjaCAoZSkge30KICB0cnkgeyBGLmF1dG8gPSBmYWxzZTsgfSBjYXRjaCAoZSkge30KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWljIikuZm9yRWFjaChtID0+IHsgbS5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbS50ZXh0Q29udGVudCA9ICLwn46kIjsgfSk7CiAgY29uc3Qgd20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid01pYyIpOyBpZiAod20pIHsgd20udGV4dENvbnRlbnQgPSAi8J+OpCBTYXkgaXQiOyB3bS5jbGFzc0xpc3QucmVtb3ZlKCJzdG9wbW9kZSIpOyB9CiAgdHJ5IHsgbGVhcm5OYXZMb2NrKGZhbHNlKTsgfSBjYXRjaCAoZSkge30KICBjb25zdCBmYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdEF1dG8iKTsgaWYgKGZhKSBmYS50ZXh0Q29udGVudCA9ICLwn5SBIEF1dG86IG9mZiI7Cn0KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsICgpID0+IHsgaWYgKGRvY3VtZW50LmhpZGRlbikgaGFyZFN0b3BBdWRpbygpOyB9KTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIiwgaGFyZFN0b3BBdWRpbyk7CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLCBoYXJkU3RvcEF1ZGlvKTsKCi8qIEFzayBmb3IgdGhlIG1pYyB0aHJvdWdoIGdldFVzZXJNZWRpYSBmaXJzdCDigJQgdGhpcyByZWxpYWJseSBzaG93cyB0aGUgYnJvd3NlcidzCiAgIHBlcm1pc3Npb24gcHJvbXB0LiBTcGVlY2hSZWNvZ25pdGlvbiBhbG9uZSBjYW4gZmFpbCB3aXRoICJub3QtYWxsb3dlZCIgd2l0aG91dCBhc2tpbmcuICovCmFzeW5jIGZ1bmN0aW9uIGVuc3VyZU1pYygpIHsKICBpZiAobWljUGVybSA9PT0gImdyYW50ZWQiKSByZXR1cm4gdHJ1ZTsKICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKSB7IG1pY1Blcm0gPSAiZGVuaWVkIjsgcmV0dXJuIGZhbHNlOyB9CiAgdHJ5IHsKICAgIGNvbnN0IHMgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pOwogICAgcy5nZXRUcmFja3MoKS5mb3JFYWNoKHQgPT4gdC5zdG9wKCkpOwogICAgbWljUGVybSA9ICJncmFudGVkIjsgcmV0dXJuIHRydWU7CiAgfSBjYXRjaCAoZSkgeyBtaWNQZXJtID0gImRlbmllZCI7IHJldHVybiBmYWxzZTsgfQp9CmZ1bmN0aW9uIG1pY0hlbHBIdG1sKCkgewogIHJldHVybiBgPHNwYW4gY2xhc3M9ImhlYXJkIj7wn46Z77iPIFRoZSBtaWNyb3Bob25lIGlzIGJsb2NrZWQgaGVyZS48YnI+CiAg4oCiIENsaWNrIHRoZSDwn5SSIC8gbWljIGljb24gaW4gdGhlIGFkZHJlc3MgYmFyIOKGkiA8Yj5BbGxvdyBtaWNyb3Bob25lPC9iPiwgdGhlbiByZWxvYWQuPGJyPgogIOKAoiBWaWV3aW5nIHRoaXMgaW5zaWRlIGFuIGFwcCBwcmV2aWV3PyA8YSBocmVmPSIjIiBvbmNsaWNrPSJ3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2UiIHN0eWxlPSJjb2xvcjp2YXIoLS1hY2NlbnQyKSI+T3BlbiBpbiB5b3VyIGJyb3dzZXI8L2E+IOKAlCB2b2ljZSB3b3JrcyBiZXN0IGluIENocm9tZS48L3NwYW4+YDsKfQovKiBWb2ljZS1hY3Rpdml0eSBkZXRlY3Rpb246IGF1dG8tc3RvcCByZWNvcmRpbmcgfjEuNHMgYWZ0ZXIgeW91IHN0b3Agc3BlYWtpbmcgKi8KZnVuY3Rpb24gYXR0YWNoVkFEKHN0cmVhbSwgb25TaWxlbmNlKSB7CiAgbGV0IGN0eDsKICB0cnkgeyBjdHggPSBuZXcgKHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkoKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQogIGNvbnN0IGFuID0gY3R4LmNyZWF0ZUFuYWx5c2VyKCk7IGFuLmZmdFNpemUgPSA1MTI7CiAgY3R4LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSkuY29ubmVjdChhbik7CiAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KGFuLmZyZXF1ZW5jeUJpbkNvdW50KTsKICBsZXQgc3Bva2UgPSBmYWxzZSwgcXVpZXRTaW5jZSA9IDAsIHN0b3BwZWQgPSBmYWxzZTsKICBmdW5jdGlvbiBsb29wKHRzKSB7CiAgICBpZiAoc3RvcHBlZCkgcmV0dXJuOwogICAgYW4uZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKGRhdGEpOwogICAgbGV0IHN1bSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsgY29uc3QgdiA9IChkYXRhW2ldIC0gMTI4KSAvIDEyODsgc3VtICs9IHYgKiB2OyB9CiAgICBjb25zdCBybXMgPSBNYXRoLnNxcnQoc3VtIC8gZGF0YS5sZW5ndGgpOwogICAgaWYgKHJtcyA+IDAuMDQ1KSB7IHNwb2tlID0gdHJ1ZTsgcXVpZXRTaW5jZSA9IDA7IH0KICAgIGVsc2UgaWYgKHNwb2tlKSB7CiAgICAgIGlmICghcXVpZXRTaW5jZSkgcXVpZXRTaW5jZSA9IHRzOwogICAgICBlbHNlIGlmICh0cyAtIHF1aWV0U2luY2UgPiAxNDAwKSB7IHN0b3BwZWQgPSB0cnVlOyB0cnkgeyBjdHguY2xvc2UoKTsgfSBjYXRjaCAoZSkge30gb25TaWxlbmNlKCk7IHJldHVybjsgfQogICAgfQogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApOwogIH0KICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7CiAgcmV0dXJuICgpID0+IHsgc3RvcHBlZCA9IHRydWU7IHRyeSB7IGN0eC5jbG9zZSgpOyB9IGNhdGNoIChlKSB7fSB9Owp9Cgphc3luYyBmdW5jdGlvbiBzdGFydFJlY29yZGluZyhhdXRvU3RvcCA9IGZhbHNlLCBvbkF1dG9TdG9wID0gbnVsbCkgewogIGxldCBzdHJlYW07CiAgdHJ5IHsKICAgIHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7CiAgICBtaWNQZXJtID0gImdyYW50ZWQiOwogIH0gY2F0Y2ggKGUpIHsgbWljUGVybSA9ICJkZW5pZWQiOyByZXR1cm4gZmFsc2U7IH0KICBtaWNTdHJlYW0gPSBzdHJlYW07IC8vIGtlZXAgYSBoYW5kbGUgc28gaGFyZFN0b3BBdWRpbyBjYW4gZm9yY2UtcmVsZWFzZSB0aGUgbWljCiAgdHJ5IHsKICAgIG1lZGlhUmVjID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtKTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBlLmcuIGlPUyBTYWZhcmkgd2l0aG91dCBNZWRpYVJlY29yZGVyIOKAlCByZWxlYXNlIHRoZSBtaWMgd2UganVzdCBvcGVuZWQsIG5ldmVyIGxlYWsgaXQKICAgIGtpbGxNaWNTdHJlYW0oKTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmVjQ2h1bmtzID0gW107CiAgbWVkaWFSZWMub25kYXRhYXZhaWxhYmxlID0gZSA9PiB7IGlmIChlLmRhdGEuc2l6ZSkgcmVjQ2h1bmtzLnB1c2goZS5kYXRhKTsgfTsKICBtZWRpYVJlYy5vbnN0b3AgPSAoKSA9PiB7CiAgICB0cnkgewogICAgICBpZiAobXlSZWNVcmwpIFVSTC5yZXZva2VPYmplY3RVUkwobXlSZWNVcmwpOwogICAgICBteVJlY1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IocmVjQ2h1bmtzLCB7IHR5cGU6IG1lZGlhUmVjLm1pbWVUeXBlIHx8ICJhdWRpby93ZWJtIiB9KSk7CiAgICAgIGNvbnN0IHBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa1BsYXliYWNrIik7IGlmIChwYikgcGIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICB9IGNhdGNoIChlKSB7fQogICAga2lsbE1pY1N0cmVhbSgpOwogICAgaWYgKHZhZENhbmNlbCkgeyB2YWRDYW5jZWwoKTsgdmFkQ2FuY2VsID0gbnVsbDsgfQogIH07CiAgbWVkaWFSZWMuc3RhcnQoKTsKICBpZiAoYXV0b1N0b3AgJiYgb25BdXRvU3RvcCkgdmFkQ2FuY2VsID0gYXR0YWNoVkFEKHN0cmVhbSwgKCkgPT4geyBzdG9wUmVjb3JkaW5nKCk7IHNldFRpbWVvdXQob25BdXRvU3RvcCwgMzUwKTsgfSk7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gc3RvcFJlY29yZGluZygpIHsKICB0cnkgeyBpZiAobWVkaWFSZWMgJiYgbWVkaWFSZWMuc3RhdGUgIT09ICJpbmFjdGl2ZSIpIG1lZGlhUmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30KfQpmdW5jdGlvbiBwbGF5TXlSZWMoKSB7CiAgaWYgKCFteVJlY1VybCkgcmV0dXJuOwogIHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKTsKICBuZXcgQXVkaW8obXlSZWNVcmwpLnBsYXkoKTsKfQoKLyogLS0tIFdvcmQgcHJvbnVuY2lhdGlvbiBjaGVjayBvbiB0aGUgTGVhcm4gY2FyZDogc2F5IHRoZSB3b3JkLCBnZXQgYSB2ZXJkaWN0IC0tLSAqLwpmdW5jdGlvbiBsZWFybk5hdkxvY2sob24pIHsKICAvLyB3aGlsZSB0aGUgbWljIGlzIGxpdmUsIGZyZWV6ZSB0aGUgYmlnIG5hdiBidXR0b25zIHNvIGEgc3RyYXkgdGFwCiAgLy8gY2Fubm90IGhpdCAiTGVhcm5lZCEiIGluc3RlYWQgb2Ygc3RvcAogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5sZWFybi1uYXYgLmJ0biIpLmZvckVhY2goYiA9PiB7CiAgICBiLmRpc2FibGVkID0gb247CiAgICBiLnN0eWxlLm9wYWNpdHkgPSBvbiA/ICIuMzUiIDogIiI7CiAgICBiLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBvbiA/ICJub25lIiA6ICIiOwogIH0pOwp9CmFzeW5jIGZ1bmN0aW9uIHdvcmRNaWNUYXAoKSB7CiAgY29uc3QgdyA9IGN1ci53b3Jkc1tsZWFybklkeF07CiAgY29uc3QgdGFyZ2V0ID0gd1swXS5yZXBsYWNlKC9cKC4qP1wpL2csICIiKS50cmltKCk7CiAgLy8gcmVjb2duaXplcnMgc3RydWdnbGUgd2l0aCBpc29sYXRlZCBzaG9ydCBzeWxsYWJsZXMg4oCUIGFzayBmb3IgcmVwZWF0cyBhbmQKICAvLyBhbHNvIGFjY2VwdCB0aGUgZXhhbXBsZSBzZW50ZW5jZSBhcyBhIHZhbGlkIHdheSB0byBwcm92ZSB0aGUgd29yZAogIGNvbnN0IHNob3J0V29yZCA9IGNsZWFuS3IodGFyZ2V0KS5sZW5ndGggPD0gMjsKICBjb25zdCByZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid1Byb25SZXMiKTsKICBjb25zdCBkaWZmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndQcm9uRGlmZiIpOwogIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3TWljIik7CiAgY29uc3QgZmluaXNoVUkgPSAoKSA9PiB7IGJ0bi50ZXh0Q29udGVudCA9ICLwn46kIFNheSBpdCI7IGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJzdG9wbW9kZSIpOyBsZWFybk5hdkxvY2soZmFsc2UpOyB9OwogIGlmIChTUiAmJiAhc3JCbG9ja2VkKSB7CiAgICBpZiAocmVjb2duaXppbmcgJiYgYWN0aXZlUmVjKSB7IGZvcmNlRW5kTGlzdGVuKGFjdGl2ZVJlYyk7IHJldHVybjsgfQogICAgaWYgKCEoYXdhaXQgZW5zdXJlTWljKCkpKSB7IHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOyByZXR1cm47IH0KICAgIHJlY29nbml6aW5nID0gdHJ1ZTsKICAgIGJ0bi50ZXh0Q29udGVudCA9ICLij7kgVGFwIHdoZW4geW91IGZpbmlzaCI7CiAgICBidG4uY2xhc3NMaXN0LmFkZCgic3RvcG1vZGUiKTsKICAgIGxlYXJuTmF2TG9jayh0cnVlKTsKICAgIGRpZmYuaW5uZXJIVE1MID0gIiI7CiAgICByZXMudGV4dENvbnRlbnQgPSBzaG9ydFdvcmQKICAgICAgPyBg8J+OpyBTaG9ydCB3b3JkIOKAlCBzYXkgaXQgdHdvIG9yIHRocmVlIHRpbWVzOiAke3RhcmdldH0sICR7dGFyZ2V0fSwgJHt0YXJnZXR9YAogICAgICA6ICLwn46nIFNheSB0aGUgd29yZDogIiArIHRhcmdldDsKICAgIGF3YWl0IHN0YXJ0UmVjb3JkaW5nKCk7IC8vIGtlZXAgeW91ciB2b2ljZSBmb3Ig4pa277iPIHBsYXliYWNrCiAgICBjb25zdCByZWMgPSBuZXcgU1IoKTsKICAgIGFjdGl2ZVJlYyA9IHJlYzsKICAgIHJlYy5sYW5nID0gImtvLUtSIjsgcmVjLm1heEFsdGVybmF0aXZlcyA9IDU7CiAgICByZWMub25lcnJvciA9IGV2ID0+IHsKICAgICAgcmVjLmVyckNvZGUgPSBldi5lcnJvcjsKICAgICAgaWYgKGV2LmVycm9yID09PSAibm90LWFsbG93ZWQiIHx8IGV2LmVycm9yID09PSAic2VydmljZS1ub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJuZXR3b3JrIikgc3JCbG9ja2VkID0gdHJ1ZTsKICAgIH07CiAgICBzdGFydExpc3RlbmluZyhyZWMsIHsKICAgICAgaWRsZU1zOiAxNTAwLCBjYXBNczogc2hvcnRXb3JkID8gMTAwMDAgOiA4MDAwLAogICAgICBvbkZpbmlzaDogKHRleHQsIGFsdHMpID0+IHsKICAgICAgICByZWNvZ25pemluZyA9IGZhbHNlOyBpZiAoYWN0aXZlUmVjID09PSByZWMpIGFjdGl2ZVJlYyA9IG51bGw7CiAgICAgICAgZmluaXNoVUkoKTsgc3RvcFJlY29yZGluZygpOwogICAgICAgIGlmICghdGV4dCkgewogICAgICAgICAgcmVzLmlubmVySFRNTCA9IHNyQmxvY2tlZAogICAgICAgICAgICA/IGA8c3BhbiBjbGFzcz0iaGVhcmQiPlZvaWNlIGNoZWNrIGlzIG5vdCBhdmFpbGFibGUgaGVyZSDigJQgbmV4dCB0YXAgcmVjb3JkcyB5b3UgZm9yIHNlbGYtY29tcGFyZS48L3NwYW4+YAogICAgICAgICAgICA6IHNob3J0V29yZAogICAgICAgICAgICAgID8gYDxzcGFuIGNsYXNzPSJoZWFyZCI+SSBjb3VsZCBub3QgY2F0Y2ggaXQg4oCUIG1pY3Mgc3RydWdnbGUgd2l0aCBzaW5nbGUgc3lsbGFibGVzISBUcnkgc2F5aW5nIGl0IHRocmVlIHRpbWVzIGluIGEgcm93LCBvciBzYXkgdGhlIGV4YW1wbGUgc2VudGVuY2Ug4oCcJHt3WzVdfeKAnS48L3NwYW4+YAogICAgICAgICAgICAgIDogYDxzcGFuIGNsYXNzPSJoZWFyZCI+SSBkaWQgbm90IGhlYXIgaXQg4oCUIHRhcCDwn46kIGFuZCBzYXkg4oCcJHt0YXJnZXR94oCdLjwvc3Bhbj5gOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBzaG9ydCB3b3JkcyBhbHNvIGFjY2VwdCB0aGUgZXhhbXBsZSBzZW50ZW5jZSDigJQgY29udGV4dCBtYWtlcyByZWNvZ25pdGlvbiByZWxpYWJsZQogICAgICAgIGNvbnN0IHRhcmdldHMgPSBzaG9ydFdvcmQgJiYgd1s1XSA/IFt0YXJnZXQsIHdbNV1dIDogW3RhcmdldF07CiAgICAgICAgbGV0IGJlc3QgPSB7IHBjdDogLTEsIGhlYXJkOiAiIiwgdGd0OiB0YXJnZXQgfTsKICAgICAgICB0YXJnZXRzLmZvckVhY2godCA9PiBhbHRzLmZvckVhY2goYSA9PiB7IGNvbnN0IGZiID0gcHJvbkZlZWRiYWNrKHQsIGEpOyBpZiAoZmIucGN0ID4gYmVzdC5wY3QpIGJlc3QgPSB7IC4uLmZiLCBoZWFyZDogYS50cmltKCksIHRndDogdCB9OyB9KSk7CiAgICAgICAgY29uc3QgdmlhID0gYmVzdC50Z3QgIT09IHRhcmdldCA/IGAgPHNwYW4gY2xhc3M9ImhlYXJkIj4odmlhIHRoZSBleGFtcGxlIHNlbnRlbmNlKTwvc3Bhbj5gIDogIiI7CiAgICAgICAgLy8gbm90ZWJvb2sgaG9vazogdGhlIHByZW1pdW0gdHV0b3IgbGF5ZXIgcmVjb3JkcyB3aW5zIGFuZCBtaXNzZXMgKG5vLW9wIGluIHRoZSBmcmVlIGdhbWUpCiAgICAgICAgaWYgKHdpbmRvdy5rcU5vdGUpIHsgaWYgKGJlc3QucGN0ID49IDg1KSB3aW5kb3cua3FOb3RlKCJ3b3JkLW9rIiwgd1swXSk7IGVsc2Ugd2luZG93LmtxTm90ZSgid29yZCIsIHdbMF0sICJoZWFyZCAiICsgKGJlc3QuaGVhcmQgfHwgIm5vdGhpbmcgY2xlYXIiKSk7IH0KICAgICAgICBkaWZmLmlubmVySFRNTCA9IGJlc3QuZGlmZkh0bWw7CiAgICAgICAgY29uc3QgbWUgPSBteVJlY1VybCA/IGAgPGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBvbmNsaWNrPSJwbGF5TXlSZWMoKSIgc3R5bGU9InBhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTJweDttYXJnaW46MDsiPuKWtu+4jyBNZTwvYnV0dG9uPmAgOiAiIjsKICAgICAgICBpZiAoYmVzdC5wY3QgPj0gODUpIHsKICAgICAgICAgIHNmeC5nb29kKCk7CiAgICAgICAgICBsZXQgYm9udXMgPSAiIjsKICAgICAgICAgIGNvbnN0IHN0ID0gbHN0YXRlKGN1ci5uKTsgc3QucHJvbiA9IHN0LnByb24gfHwgW107CiAgICAgICAgICBpZiAoIXN0LnByb24uaW5jbHVkZXMod1swXSkpIHsgc3QucHJvbi5wdXNoKHdbMF0pOyBwZXJzaXN0KCk7IGdhaW5YcCgyKTsgYm9udXMgPSAiICsyIFhQIPCfjpYiOyB9CiAgICAgICAgICBjb25zdCBiYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3QmFkZ2UiKTsgaWYgKGJhZGdlKSBiYWRnZS50ZXh0Q29udGVudCA9ICIg8J+OliI7CiAgICAgICAgICBkYWlseUJ1bXAoInByb24iKTsKICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBg4pyFIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1ncmVlbikiPiR7YmVzdC5wY3R9JSDigJQgY29ycmVjdCBwcm9udW5jaWF0aW9uISR7Ym9udXN9PC9zcGFuPiR7dmlhfSR7bWV9YDsKICAgICAgICB9IGVsc2UgaWYgKGJlc3QucGN0ID49IDUwKSB7CiAgICAgICAgICBzZnguYmFkKCk7CiAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYPCfn6EgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdvbGQpIj4ke2Jlc3QucGN0fSUg4oCUIG5lZWRzIGEgbGl0dGxlIHdvcmsuIFRhcCB0aGUgcmVkIHN5bGxhYmxlcywgbGlzdGVuIPCfkKIsIGFuZCB0cnkgYWdhaW4uPC9zcGFuPiR7dmlhfSR7bWV9PGRpdiBjbGFzcz0iaGVhcmQiPkhlYXJkOiDigJwke2Jlc3QuaGVhcmR94oCdPC9kaXY+YDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2Z4LmJhZCgpOwogICAgICAgICAgcmVzLmlubmVySFRNTCA9IGDwn5mJIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1yZWQpIj4ke2Jlc3QucGN0fSUg4oCUIGxpc3RlbiDwn5CiIHNsb3cgZmlyc3QsIHRoZW4gdHJ5IGFnYWluJHtzaG9ydFdvcmQgPyAiLCBvciBzYXkgdGhlIGV4YW1wbGUgc2VudGVuY2UiIDogIiJ9Ljwvc3Bhbj4ke21lfTxkaXYgY2xhc3M9ImhlYXJkIj5IZWFyZDog4oCcJHtiZXN0LmhlYXJkfeKAnTwvZGl2PmA7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9IGVsc2UgewogICAgLy8gbm8gcmVjb2duaXRpb24gc2VydmljZTogcmVjb3JkIOKGlCBjb21wYXJlIOKGlCBzZWxmLWNoZWNrCiAgICBpZiAocmVjb3JkaW5nKSB7IHJlY29yZGluZyA9IGZhbHNlOyBzdG9wUmVjb3JkaW5nKCk7IGZpbmlzaFVJKCk7IHJldHVybjsgfQogICAgY29uc3Qgb2sgPSBhd2FpdCBzdGFydFJlY29yZGluZyh0cnVlLCAoKSA9PiB7CiAgICAgIHJlY29yZGluZyA9IGZhbHNlOyBmaW5pc2hVSSgpOwogICAgICByZXMuaW5uZXJIVE1MID0gYDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0icGxheU15UmVjKCkiIHN0eWxlPSJtYXJnaW46MCA0cHggMCAwOyI+4pa277iPIE15IHZvaWNlPC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBvbmNsaWNrPSJzYXkoJyR7dGFyZ2V0LnJlcGxhY2UoLycvZywgIlxcJyIpfScsMC43KSIgc3R5bGU9Im1hcmdpbjowIDRweCAwIDA7Ij7wn5SKIFdvcmQ8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9IndvcmRTZWxmUGFzcygpIiBzdHlsZT0ibWFyZ2luOjA7Ij7wn5iOIFNvdW5kZWQgcmlnaHQ8L2J1dHRvbj5gOwogICAgfSk7CiAgICBpZiAoIW9rKSB7IHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOyByZXR1cm47IH0KICAgIHJlY29yZGluZyA9IHRydWU7CiAgICBidG4udGV4dENvbnRlbnQgPSAi4o+5IFRhcCB3aGVuIHlvdSBmaW5pc2giOwogICAgYnRuLmNsYXNzTGlzdC5hZGQoInN0b3Btb2RlIik7CiAgICBsZWFybk5hdkxvY2sodHJ1ZSk7CiAgICByZXMudGV4dENvbnRlbnQgPSAi8J+UtCBTYXkg4oCcIiArIHRhcmdldCArICLigJ0g4oCUIGl0IHN0b3BzIGJ5IGl0c2VsZi4iOwogIH0KfQpmdW5jdGlvbiB3b3JkU2VsZlBhc3MoKSB7CiAgY29uc3QgdyA9IGN1ci53b3Jkc1tsZWFybklkeF07CiAgY29uc3Qgc3QgPSBsc3RhdGUoY3VyLm4pOyBzdC5wcm9uID0gc3QucHJvbiB8fCBbXTsKICBpZiAoIXN0LnByb24uaW5jbHVkZXMod1swXSkpIHsgc3QucHJvbi5wdXNoKHdbMF0pOyBwZXJzaXN0KCk7IGdhaW5YcCgyKTsgZmxvYXRGeCgiKzIgWFAiLCAiIzJGN0Q0RiIpOyB9CiAgY29uc3QgYmFkZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid0JhZGdlIik7IGlmIChiYWRnZSkgYmFkZ2UudGV4dENvbnRlbnQgPSAiIPCfjpYiOwogIGRhaWx5QnVtcCgicHJvbiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3UHJvblJlcyIpLmlubmVySFRNTCA9IGDinIUgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdyZWVuKSI+TWFya2VkIGFzIHByb25vdW5jZWQhIPCfjpY8L3NwYW4+YDsKICBzZnguZ29vZCgpOwp9Cgphc3luYyBmdW5jdGlvbiBtaWNUYXAoKSB7CiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0tyIikudGV4dENvbnRlbnQ7CiAgY29uc3QgcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa1Jlc3VsdCIpOwogIGNvbnN0IG1pYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtaWNCdG4iKTsKCiAgaWYgKFNSICYmICFzckJsb2NrZWQpIHsKICAgIC8vIEZ1bGwgY29hY2g6IHJlY29nbml6ZSBzcGVlY2ggKyByZWNvcmQgYXVkaW8gYXQgdGhlIHNhbWUgdGltZQogICAgaWYgKHJlY29nbml6aW5nICYmIGFjdGl2ZVJlYykgeyBmb3JjZUVuZExpc3RlbihhY3RpdmVSZWMpOyByZXR1cm47IH0gLy8gdGFwIOKPuSA9IGRvbmUKICAgIGlmIChyZWNvZ25pemluZykgcmV0dXJuOwogICAgaWYgKCEoYXdhaXQgZW5zdXJlTWljKCkpKSB7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmVjb2duaXppbmcgPSB0cnVlOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0RpZmYiKS5pbm5lckhUTUwgPSAiIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgYXdhaXQgc3RhcnRSZWNvcmRpbmcoKTsgLy8gYmVzdCBlZmZvcnQ7IHJlY29nbml0aW9uIHdvcmtzIGV2ZW4gaWYgdGhpcyBmYWlscwogICAgY29uc3QgcmVjID0gbmV3IFNSKCk7CiAgICBhY3RpdmVSZWMgPSByZWM7CiAgICByZWMubGFuZyA9ICJrby1LUiI7IHJlYy5tYXhBbHRlcm5hdGl2ZXMgPSA1OwogICAgbWljLmNsYXNzTGlzdC5hZGQoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi4o+5IjsKICAgIHJlcy50ZXh0Q29udGVudCA9ICLwn46ZIFJlYWQgdGhlIHNlbnRlbmNlIOKAlCBpdCBjaGVja3Mgd2hlbiB5b3UgcGF1c2UgKG9yIHRhcCDij7kpLiI7CiAgICByZWMub25lcnJvciA9IGV2ID0+IHsKICAgICAgcmVjLmVyckNvZGUgPSBldi5lcnJvcjsKICAgICAgaWYgKGV2LmVycm9yID09PSAibm90LWFsbG93ZWQiIHx8IGV2LmVycm9yID09PSAic2VydmljZS1ub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJuZXR3b3JrIikgc3JCbG9ja2VkID0gdHJ1ZTsKICAgIH07CiAgICBzdGFydExpc3RlbmluZyhyZWMsIHsKICAgICAgaWRsZU1zOiAyMjAwLCBjYXBNczogMzAwMDAsCiAgICAgIG9uTGl2ZTogdCA9PiB7IGlmICh0KSByZXMudGV4dENvbnRlbnQgPSAi8J+OpyDigJzigKYiICsgdC5zbGljZSgtNTApICsgIuKAnSI7IH0sCiAgICAgIG9uRmluaXNoOiAodGV4dCwgYWx0cykgPT4gewogICAgICAgIHJlY29nbml6aW5nID0gZmFsc2U7IGlmIChhY3RpdmVSZWMgPT09IHJlYykgYWN0aXZlUmVjID0gbnVsbDsKICAgICAgICBtaWMuY2xhc3NMaXN0LnJlbW92ZSgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLwn46kIjsKICAgICAgICBzdG9wUmVjb3JkaW5nKCk7CiAgICAgICAgaWYgKHRleHQpIHsgYW5hbHl6ZVByb24odGFyZ2V0LCBhbHRzKTsgcmV0dXJuOyB9CiAgICAgICAgaWYgKHNyQmxvY2tlZCkgewogICAgICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPlZvaWNlIHJlY29nbml0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBicm93c2VyIOKAlCBzd2l0Y2hpbmcgdG8g8J+OmSByZWNvcmQgJmFtcDsgY29tcGFyZSBtb2RlLiBUYXAgdGhlIG1pYyBhZ2FpbiE8L3NwYW4+YDsKICAgICAgICB9IGVsc2UgaWYgKCFyZWMuZXJyQ29kZSB8fCByZWMuZXJyQ29kZSA9PT0gIm5vLXNwZWVjaCIgfHwgcmVjLmVyckNvZGUgPT09ICJhYm9ydGVkIikgewogICAgICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPkkgZGlkIG5vdCBoZWFyIGFueXRoaW5nIOKAlCB0YXAgdGhlIG1pYyBhbmQgdHJ5IGFnYWluLjwvc3Bhbj5gOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJoZWFyZCI+U3BlZWNoIGNoZWNrIGZhaWxlZCAoJHtyZWMuZXJyQ29kZX0pLiBSZWNvcmQsIGNvbXBhcmUsIGFuZCBncmFkZSB5b3Vyc2VsZjo8L3NwYW4+YDsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSBlbHNlIHsKICAgIC8vIE5vIHJlY29nbml0aW9uIHNlcnZpY2U6IHJlY29yZCB3aXRoIGF1dG8tc3RvcCDihpQgY29tcGFyZSDihpQgc2VsZi1ncmFkZQogICAgaWYgKHJlY29yZGluZykgeyAvLyBtYW51YWwgc3RvcCBzdGlsbCBwb3NzaWJsZQogICAgICByZWNvcmRpbmcgPSBmYWxzZTsgc3RvcFJlY29yZGluZygpOwogICAgICBtaWMuY2xhc3NMaXN0LnJlbW92ZSgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLwn46kIjsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgb2sgPSBhd2FpdCBzdGFydFJlY29yZGluZyh0cnVlLCAoKSA9PiB7CiAgICAgIHJlY29yZGluZyA9IGZhbHNlOwogICAgICBtaWMuY2xhc3NMaXN0LnJlbW92ZSgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLwn46kIjsKICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPk5vdyBjb21wYXJlOiDilrbvuI8geW91ciB2b2ljZSB2cyDwn5SKIG5hdGl2ZS4gSG93IGNsb3NlIHdlcmUgeW91Pzwvc3Bhbj5gOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgIH0pOwogICAgaWYgKCFvaykgewogICAgICBzYXkodGFyZ2V0KTsKICAgICAgcmVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICByZXR1cm47CiAgICB9CiAgICByZWNvcmRpbmcgPSB0cnVlOyBtaWMuY2xhc3NMaXN0LmFkZCgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLij7kiOwogICAgcmVzLnRleHRDb250ZW50ID0gIvCflLQgUmVjb3JkaW5n4oCmIHJlYWQgdGhlIHNlbnRlbmNlLCB0aGVuIHBhdXNlIOKAlCBpdCBzdG9wcyBieSBpdHNlbGYuIjsKICB9Cn0KCmZ1bmN0aW9uIGNsZWFuS3IocykgeyByZXR1cm4gcy5yZXBsYWNlKC9bXHMuLCE/4oCmflwt4oCT4oCUIicoKVwvXS9nLCAiIik7IH0KLyogTGV2ZW5zaHRlaW4gYWxpZ25tZW50IHdpdGggYmFja3RyYWNlOiBmb3IgZWFjaCB0YXJnZXQgc3lsbGFibGUsIHdhcyBpdCBtYXRjaGVkCiAgIGFuZCBXSEFUIHdhcyBoZWFyZCBpbnN0ZWFkIChzdWJzdGl0dXRpb24pIG9yIG5vdGhpbmcgKHNraXBwZWQpLiAqLwpmdW5jdGlvbiBhbGlnblBhaXJzKHQsIGgpIHsKICBjb25zdCBtID0gdC5sZW5ndGgsIG4gPSBoLmxlbmd0aDsKICBjb25zdCBkID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogbSArIDEgfSwgKCkgPT4gQXJyYXkobiArIDEpLmZpbGwoMCkpOwogIGZvciAobGV0IGkgPSAwOyBpIDw9IG07IGkrKykgZFtpXVswXSA9IGk7CiAgZm9yIChsZXQgaiA9IDA7IGogPD0gbjsgaisrKSBkWzBdW2pdID0gajsKICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspCiAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspCiAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihkW2ktMV1bai0xXSArICh0W2ktMV0gPT09IGhbai0xXSA/IDAgOiAxKSwgZFtpLTFdW2pdICsgMSwgZFtpXVtqLTFdICsgMSk7CiAgY29uc3Qgb3V0ID0gQXJyYXkobSkuZmlsbChudWxsKTsKICBsZXQgaSA9IG0sIGogPSBuOwogIHdoaWxlIChpID4gMCB8fCBqID4gMCkgewogICAgaWYgKGkgPiAwICYmIGogPiAwICYmIGRbaV1bal0gPT09IGRbaS0xXVtqLTFdICsgKHRbaS0xXSA9PT0gaFtqLTFdID8gMCA6IDEpKSB7CiAgICAgIG91dFtpLTFdID0geyBvazogdFtpLTFdID09PSBoW2otMV0sIGhlYXJkOiBoW2otMV0gfTsgaS0tOyBqLS07CiAgICB9IGVsc2UgaWYgKGkgPiAwICYmIChqID09PSAwIHx8IGRbaV1bal0gPT09IGRbaS0xXVtqXSArIDEpKSB7CiAgICAgIG91dFtpLTFdID0geyBvazogZmFsc2UsIGhlYXJkOiBudWxsIH07IGktLTsKICAgIH0gZWxzZSBqLS07CiAgfQogIHJldHVybiBvdXQ7Cn0KZnVuY3Rpb24gc2NvcmVPZihwYWlycykgeyByZXR1cm4gcGFpcnMuZmlsdGVyKHAgPT4gcCAmJiBwLm9rKS5sZW5ndGggLyBNYXRoLm1heCgxLCBwYWlycy5sZW5ndGgpOyB9CgovKiAtLS0gSGFuZ3VsIGphbW8gZGVjb21wb3NpdGlvbjogZXhwbGFpbiBIT1cgYSBzeWxsYWJsZSB3YXMgbWlzcHJvbm91bmNlZCAtLS0gKi8KY29uc3QgSkFNT19JID0gWy4uLiLjhLHjhLLjhLTjhLfjhLjjhLnjhYHjhYLjhYPjhYXjhYbjhYfjhYjjhYnjhYrjhYvjhYzjhY3jhY4iXTsKY29uc3QgSkFNT19NID0gWyLjhY8iLCLjhZAiLCLjhZEiLCLjhZIiLCLjhZMiLCLjhZQiLCLjhZUiLCLjhZYiLCLjhZciLCLjhZgiLCLjhZkiLCLjhZoiLCLjhZsiLCLjhZwiLCLjhZ0iLCLjhZ4iLCLjhZ8iLCLjhaAiLCLjhaEiLCLjhaIiLCLjhaMiXTsKY29uc3QgSkFNT19GID0gWyIiLCLjhLEiLCLjhLIiLCLjhLMiLCLjhLQiLCLjhLUiLCLjhLYiLCLjhLciLCLjhLkiLCLjhLoiLCLjhLsiLCLjhLwiLCLjhL0iLCLjhL4iLCLjhL8iLCLjhYAiLCLjhYEiLCLjhYIiLCLjhYQiLCLjhYUiLCLjhYYiLCLjhYciLCLjhYgiLCLjhYoiLCLjhYsiLCLjhYwiLCLjhY0iLCLjhY4iXTsKY29uc3QgUk9NID0geyLjhLEiOiJnL2siLCLjhLIiOiJrayIsIuOEtCI6Im4iLCLjhLciOiJkL3QiLCLjhLgiOiJ0dCIsIuOEuSI6InIvbCIsIuOFgSI6Im0iLCLjhYIiOiJiL3AiLCLjhYMiOiJwcCIsIuOFhSI6InMiLCLjhYYiOiJzcyIsIuOFhyI6Im5nIiwi44WIIjoiaiIsIuOFiSI6ImpqIiwi44WKIjoiY2giLCLjhYsiOiJrIiwi44WMIjoidCIsIuOFjSI6InAiLCLjhY4iOiJoIiwKICLjhY8iOiJhIiwi44WQIjoiYWUiLCLjhZEiOiJ5YSIsIuOFkiI6InlhZSIsIuOFkyI6ImVvIiwi44WUIjoiZSIsIuOFlSI6InllbyIsIuOFliI6InllIiwi44WXIjoibyIsIuOFmCI6IndhIiwi44WZIjoid2FlIiwi44WaIjoib2UiLCLjhZsiOiJ5byIsIuOFnCI6InUiLCLjhZ0iOiJ3byIsIuOFniI6IndlIiwi44WfIjoid2kiLCLjhaAiOiJ5dSIsIuOFoSI6ImV1Iiwi44WiIjoidWkiLCLjhaMiOiJpIiwKICLjhLMiOiJrcyIsIuOEtSI6Im5qIiwi44S2IjoibmgiLCLjhLoiOiJsZyIsIuOEuyI6ImxtIiwi44S8IjoibGIiLCLjhL0iOiJscyIsIuOEviI6Imx0Iiwi44S/IjoibHAiLCLjhYAiOiJsaCIsIuOFhCI6InBzIn07CmZ1bmN0aW9uIGRlY0phbW8oY2gpIHsKICBjb25zdCBjID0gY2guY2hhckNvZGVBdCgwKSAtIDB4QUMwMDsKICBpZiAoYyA8IDAgfHwgYyA+IDExMTcxKSByZXR1cm4gbnVsbDsKICByZXR1cm4geyBpOiBNYXRoLmZsb29yKGMgLyA1ODgpLCBtOiBNYXRoLmZsb29yKChjICUgNTg4KSAvIDI4KSwgZjogYyAlIDI4IH07Cn0KZnVuY3Rpb24gZml4VGlwKHRDaCwgcCkgewogIGlmICghcCB8fCBwLmhlYXJkID09PSBudWxsKSByZXR1cm4gInlvdSBza2lwcGVkIHRoaXMgc3lsbGFibGUg4oCUIHNheSBpdCBjbGVhcmx5IjsKICBjb25zdCBhID0gZGVjSmFtbyh0Q2gpLCBiID0gZGVjSmFtbyhwLmhlYXJkKTsKICBpZiAoIWEgfHwgIWIpIHJldHVybiBgSSBoZWFyZCDigJwke3AuaGVhcmR94oCdIOKAlCBzYXkg4oCcJHt0Q2h94oCdYDsKICBjb25zdCB0aXBzID0gW107CiAgaWYgKGEuaSAhPT0gYi5pKSB0aXBzLnB1c2goYHN0YXJ0IHdpdGggPGI+JHtKQU1PX0lbYS5pXX08L2I+ICgke1JPTVtKQU1PX0lbYS5pXV0gfHwgIiJ9KSDigJQgSSBoZWFyZCAke0pBTU9fSVtiLmldfSAoJHtST01bSkFNT19JW2IuaV1dIHx8ICIifSlgKTsKICBpZiAoVk5PUk1bYS5tXSAhPT0gVk5PUk1bYi5tXSkgdGlwcy5wdXNoKGB0aGUgdm93ZWwgaXMgPGI+JHtKQU1PX01bYS5tXX08L2I+ICgke1JPTVtKQU1PX01bYS5tXV19KSDigJQgSSBoZWFyZCAke0pBTU9fTVtiLm1dfSAoJHtST01bSkFNT19NW2IubV1dfSlgKTsKICBpZiAoRk5PUk1bYS5mXSAhPT0gRk5PUk1bYi5mXSkgewogICAgaWYgKGEuZiA9PT0gMCkgdGlwcy5wdXNoKGBubyBmaW5hbCBzb3VuZCDigJQgSSBoZWFyZCBhbiBleHRyYSA8Yj4ke0pBTU9fRltiLmZdfTwvYj5gKTsKICAgIGVsc2UgaWYgKGIuZiA9PT0gMCkgdGlwcy5wdXNoKGBmaW5pc2ggd2l0aCB0aGUgZmluYWwgPGI+JHtKQU1PX0ZbYS5mXX08L2I+ICgke1JPTVtKQU1PX0ZbYS5mXV0gfHwgIiJ9KSDigJQgaXQgd2FzIG1pc3NpbmdgKTsKICAgIGVsc2UgdGlwcy5wdXNoKGB0aGUgZmluYWwgaXMgPGI+JHtKQU1PX0ZbYS5mXX08L2I+ICgke1JPTVtKQU1PX0ZbYS5mXV0gfHwgIiJ9KSDigJQgSSBoZWFyZCAke0pBTU9fRltiLmZdfSAoJHtST01bSkFNT19GW2IuZl1dIHx8ICIifSlgKTsKICB9CiAgcmV0dXJuIHRpcHMuam9pbigiOyAiKSB8fCBgc291bmRzIHJpZ2h0IOKAlCBzYXkgaXQgYSB0b3VjaCBtb3JlIGNsZWFybHlgOwp9Ci8qIFNvdW5kLWxldmVsIG5vcm1hbGl6YXRpb246IHN5bGxhYmxlcyB0aGF0IFNPVU5EIGlkZW50aWNhbCBjb3VudCBhcyBjb3JyZWN0LgogICBGaW5hbC1jb25zb25hbnQgbmV1dHJhbGl6YXRpb24gKOyYhj3sl70gYm90aCBlbmQgaW4gW3BdKTsgdm93ZWwgbWVyZ2VycyDjhZA944WULCDjhZI944WWLCDjhZk944WaPeOFni4KICAgUmVjb2duaXplcnMgb2Z0ZW4gcGljayBhIGhvbW9waG9uZSBzcGVsbGluZyDigJQgdGhlIGxlYXJuZXIgc2hvdWxkIG5vdCBiZSBwdW5pc2hlZCBmb3IgdGhhdC4gKi8KY29uc3QgRk5PUk0gPSBbMCwxLDEsMSwyLDIsMiwzLDQsMSw1LDQsNCw0LDYsNCw1LDYsNiwzLDMsNywzLDMsMSwzLDYsM107CmNvbnN0IFZOT1JNID0gWzAsMSwyLDMsNCwxLDYsMyw4LDksMTAsMTAsMTIsMTMsMTQsMTAsMTYsMTcsMTgsMTksMjBdOwpmdW5jdGlvbiBzeWxTY29yZSh0Q2gsIHApIHsKICBpZiAoIXApIHJldHVybiAwOwogIGlmIChwLm9rKSByZXR1cm4gMTsKICBpZiAocC5oZWFyZCA9PT0gbnVsbCkgcmV0dXJuIDA7CiAgY29uc3QgYSA9IGRlY0phbW8odENoKSwgYiA9IGRlY0phbW8ocC5oZWFyZCk7CiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gMDsKICBsZXQgcHRzID0gMDsKICBpZiAoYS5pID09PSBiLmkpIHB0cysrOwogIGlmIChWTk9STVthLm1dID09PSBWTk9STVtiLm1dKSBwdHMrKzsKICBpZiAoRk5PUk1bYS5mXSA9PT0gRk5PUk1bYi5mXSkgcHRzKys7CiAgcmV0dXJuIHB0cyAvIDM7Cn0KLyogRnVsbCBmZWVkYmFjazogY29sb3JlZCBzeWxsYWJsZXMgKyBjb25jcmV0ZSBmaXggaW5zdHJ1Y3Rpb25zICovCmZ1bmN0aW9uIHByb25GZWVkYmFjayh0YXJnZXQsIGhlYXJkUmF3KSB7CiAgY29uc3QgY3QgPSBjbGVhbktyKHRhcmdldCk7CiAgY29uc3QgcGFpcnMgPSBhbGlnblBhaXJzKGN0LCBjbGVhbktyKGhlYXJkUmF3KSk7CiAgY29uc3Qgc2NvcmVzID0gWy4uLmN0XS5tYXAoKGMsIGkpID0+IHN5bFNjb3JlKGMsIHBhaXJzW2ldKSk7CiAgbGV0IGsgPSAwOwogIGNvbnN0IGRpZmZIdG1sID0gWy4uLnRhcmdldF0ubWFwKGMgPT4gewogICAgaWYgKGNsZWFuS3IoYykgPT09ICIiKSByZXR1cm4gYzsKICAgIGNvbnN0IGdvb2QgPSBzY29yZXNba10gPT09IDE7IGsrKzsKICAgIHJldHVybiBgPHNwYW4gY2xhc3M9IiR7Z29vZCA/ICJzeWwtb2siIDogInN5bC1iYWQifSIgb25jbGljaz0ic2F5KCcke2N9JywwLjQ1KSI+JHtjfTwvc3Bhbj5gOwogIH0pLmpvaW4oIiIpOwogIGNvbnN0IGZpeGVzID0gW107CiAgbGV0IGsyID0gMDsKICBmb3IgKGNvbnN0IGMgb2YgY3QpIHsKICAgIGNvbnN0IHAgPSBwYWlyc1trMl0sIHMgPSBzY29yZXNbazJdOyBrMisrOwogICAgaWYgKHMgPCAxICYmIGZpeGVzLmxlbmd0aCA8IDQpCiAgICAgIGZpeGVzLnB1c2goYDxkaXYgY2xhc3M9ImZpeGxpbmUiIG9uY2xpY2s9InNheSgnJHtjfScsMC40KSI+PGI+JHtjfTwvYj4g4oCUICR7Zml4VGlwKGMsIHApfSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tYWNjZW50Mik7d2hpdGUtc3BhY2U6bm93cmFwOyI+8J+UiiB0YXAgPSBzbG93PC9zcGFuPjwvZGl2PmApOwogIH0KICBjb25zdCBwY3QgPSBzY29yZXMubGVuZ3RoID8gTWF0aC5yb3VuZChzY29yZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyBzY29yZXMubGVuZ3RoICogMTAwKSA6IDA7CiAgcmV0dXJuIHsgcGN0LCBkaWZmSHRtbCwgZml4ZXNIdG1sOiBmaXhlcy5qb2luKCIiKSB9Owp9CgpmdW5jdGlvbiBhbmFseXplUHJvbih0YXJnZXQsIGFsdHMpIHsKICBsZXQgYmVzdCA9IHsgcGN0OiAtMSwgaGVhcmQ6ICIiIH07CiAgYWx0cy5mb3JFYWNoKGEgPT4gewogICAgY29uc3QgZmIgPSBwcm9uRmVlZGJhY2sodGFyZ2V0LCBhKTsKICAgIGlmIChmYi5wY3QgPiBiZXN0LnBjdCkgYmVzdCA9IHsgLi4uZmIsIGhlYXJkOiBhLnRyaW0oKSB9OwogIH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGtEaWZmIikuaW5uZXJIVE1MID0gYmVzdC5kaWZmSHRtbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrRml4ZXMiKS5pbm5lckhUTUwgPSBiZXN0LmZpeGVzSHRtbDsKICBjb25zdCByZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrUmVzdWx0Iik7CiAgY29uc3QgaGVhcmQgPSBgPGRpdiBjbGFzcz0iaGVhcmQiPkhlYXJkOiDigJwke2Jlc3QuaGVhcmR94oCdPC9kaXY+YDsKICBpZiAoYmVzdC5wY3QgPj0gOTUpIHsKICAgIHJlcy5pbm5lckhUTUwgPSBg4pyFIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1ncmVlbikiPiR7YmVzdC5wY3R9JSDigJQgcGVyZmVjdCBwcm9udW5jaWF0aW9uITwvc3Bhbj4ke2hlYXJkfWA7CiAgICBzcGVha0dyYWRlKHRydWUsIHRydWUpOwogIH0gZWxzZSBpZiAoYmVzdC5wY3QgPj0gODApIHsKICAgIHJlcy5pbm5lckhUTUwgPSBg4pyFIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1ncmVlbikiPiR7YmVzdC5wY3R9JSDigJQgZ3JlYXQhIFNtYWxsIHBvbGlzaCBiZWxvdzo8L3NwYW4+JHtoZWFyZH1gOwogICAgc3BlYWtHcmFkZSh0cnVlLCB0cnVlKTsKICB9IGVsc2UgaWYgKGJlc3QucGN0ID49IDUwKSB7CiAgICByZXMuaW5uZXJIVE1MID0gYPCfn6EgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdvbGQpIj4ke2Jlc3QucGN0fSUg4oCUIGNsb3NlISBGaXggdGhlIHJlZCBzeWxsYWJsZXMgYmVsb3csIHRoZW4gdHJ5IGFnYWluLjwvc3Bhbj4ke2hlYXJkfWA7CiAgICBzZnguYmFkKCk7CiAgfSBlbHNlIHsKICAgIHJlcy5pbm5lckhUTUwgPSBg8J+ZiSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKSI+JHtiZXN0LnBjdH0lIOKAlCBsaXN0ZW4g8J+QoiBzbG93IGZpcnN0LCB0aGVuIHJlcGVhdCBvbmUgd29yZCBhdCBhIHRpbWUuPC9zcGFuPiR7aGVhcmR9YDsKICAgIHNmeC5iYWQoKTsKICB9Cn0KZnVuY3Rpb24gc3BlYWtHcmFkZShvaywgc2lsZW50KSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgaWYgKG9rKSB7CiAgICBjb25zdCBzdCA9IGxzdGF0ZShjdXIubik7CiAgICBjb25zdCBrZXkgPSBzcGVha0lkeCAlIHNwZWFrU2VudGVuY2VzKCkubGVuZ3RoOwogICAgaWYgKCFzdC5zcG9rZW4uaW5jbHVkZXMoa2V5KSkgc3Quc3Bva2VuLnB1c2goa2V5KTsKICAgIGdhaW5YcCg1KTsgZGFpbHlCdW1wKCJwcm9uIik7IGlmICghc2lsZW50KSB7IHNmeC5nb29kKCk7IGZsb2F0RngoIis1IFhQIiwgIiMyRjdENEYiKTsgfQogICAgaWYgKHN0LnNwb2tlbi5sZW5ndGggPj0gNSAmJiAhc3Quc3RhcnMuc3BlYWspIHsKICAgICAgc3Quc3RhcnMuc3BlYWsgPSB0cnVlOyBjb25mZXR0aSgpOyBzZngud2luKCk7IGZsb2F0RngoIuKtkCBTcGVha2luZyBzdGFyISIsICIjQjA3RDI4Iik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2YoY3VyLm4pOwogICAgfQogICAgcGVyc2lzdCgpOwogICAgc2V0VGltZW91dCgoKSA9PiBzcGVha01vdmUoMSksIDE4MDApOyAvLyBnaXZlIHRpbWUgdG8gc2VlIHRoZSBzY29yZS9kaWZmIGJlZm9yZSBhZHZhbmNpbmcKICB9IGVsc2UgewogICAgZ2FpblhwKDEpOyBmbG9hdEZ4KCIrMSBYUCBmb3IgdHJ5aW5nIiwgIiM3NTY2NEQiKTsKICB9Cn0KCi8qID09PT09PT09PT09PT09PSBHQU1FIEhFTFBFUlMgPT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIGdhbWVQb29sKCkgeyByZXR1cm4gY3VyLndvcmRzOyB9CmZ1bmN0aW9uIHNob3dSZXN1bHQoe2Vtb2ppLCB0aXRsZSwgc3ViLCBzY29yZSwgeHAsIGNvbWJvLCByZXBsYXl9KSB7CiAgY2xlYXJJbnRlcnZhbChhY3RpdmVUaW1lcik7IGFjdGl2ZVRpbWVyID0gbnVsbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzRW1vamkiKS50ZXh0Q29udGVudCA9IGVtb2ppOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNUaXRsZSIpLnRleHRDb250ZW50ID0gdGl0bGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc1N1YiIpLnRleHRDb250ZW50ID0gc3ViIHx8ICIiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNTY29yZSIpLnRleHRDb250ZW50ID0gc2NvcmU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc1hwIikudGV4dENvbnRlbnQgPSAiKyIgKyB4cDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzQ29tYm8iKS50ZXh0Q29udGVudCA9IGNvbWJvOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNSZXBsYXkiKS5vbmNsaWNrID0gcmVwbGF5OwogIGlmIChjb21ibyA+IHNhdmUuYmVzdENvbWJvKSBzYXZlLmJlc3RDb21ibyA9IGNvbWJvOwogIGdhaW5YcCh4cCk7IHBlcnNpc3QoKTsgcmVuZGVySHVkKCk7IHNob3coInJlc3VsdCIpOwogIGlmICh4cCA+IDApIHsgY29uZmV0dGkoKTsgc2Z4LndpbigpOyB9Cn0KCi8qID09PT09PT09PT09PT09PSBTUEVFRCBRVUlaID09PT09PT09PT09PT09PSAqLwpsZXQgUSA9IHt9OwpmdW5jdGlvbiBzdGFydFF1aXooKSB7CiAgUSA9IHsgc2NvcmU6MCwgY29tYm86MCwgbWF4Q29tYm86MCwgdGltZTo2MCwgeHA6MCB9OwogIHNob3coInF1aXoiKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpelNjb3JlIikudGV4dENvbnRlbnQgPSAwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6Q29tYm8iKS50ZXh0Q29udGVudCA9ICIiOwogIHF1aXpOZXh0KCk7IHF1aXpUaWNrKCk7CiAgYWN0aXZlVGltZXIgPSBzZXRJbnRlcnZhbChxdWl6VGljaywgMTAwMCk7Cn0KZnVuY3Rpb24gcXVpelRpY2soKSB7CiAgY29uc3QgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6VGltZXIiKTsKICB0LnRleHRDb250ZW50ID0gUS50aW1lOyB0LmNsYXNzTGlzdC50b2dnbGUoImxvdyIsIFEudGltZSA8PSAxMCk7CiAgaWYgKFEudGltZSA8PSAwKSB7CiAgICBzaG93UmVzdWx0KHsgZW1vamk6IFEuc2NvcmUgPj0gMTAwID8gIvCfj4YiIDogIvCfkqoiLCB0aXRsZTogIlRpbWUncyB1cCEiLAogICAgICBzdWI6ICJNYXggY29tYm8gw5ciICsgUS5tYXhDb21ibywgc2NvcmU6IFEuc2NvcmUsIHhwOiBRLnhwLCBjb21ibzogUS5tYXhDb21ibywgcmVwbGF5OiBzdGFydFF1aXogfSk7CiAgICByZXR1cm47CiAgfQogIFEudGltZS0tOwp9CmZ1bmN0aW9uIHF1aXpOZXh0KCkgewogIGNvbnN0IGNhcmRzID0gc2h1ZmZsZShnYW1lUG9vbCgpKTsKICBjb25zdCBjYXJkID0gY2FyZHNbMF07CiAgY29uc3QgcmV2ZXJzZSA9IE1hdGgucmFuZG9tKCkgPiAwLjU7CiAgUS5hbnN3ZXIgPSByZXZlcnNlID8gY2FyZFswXSA6IGNhcmRbMl07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpMYWJlbCIpLnRleHRDb250ZW50ID0gcmV2ZXJzZSA/ICJXaGljaCBpcyBLb3JlYW4gZm9y4oCmIiA6ICJXaGF0IGRvZXMgdGhpcyBtZWFuPyI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpXb3JkIikudGV4dENvbnRlbnQgPSAocmV2ZXJzZSA/ICIiIDogY2FyZFs0XSArICIgIikgKyAocmV2ZXJzZSA/IGNhcmRbMl0gOiBjYXJkWzBdKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpekhpbnQiKS50ZXh0Q29udGVudCA9IHJldmVyc2UgPyAiIiA6IGNhcmRbMV07CiAgaWYgKCFyZXZlcnNlKSBzYXkoY2FyZFswXSk7CiAgY29uc3Qgb3B0aW9ucyA9IHNodWZmbGUoY2FyZHMuc2xpY2UoMCwgNCkpOwogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6QW5zd2VycyIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBvcHRpb25zLmZvckVhY2gobyA9PiB7CiAgICBjb25zdCBsYWJlbCA9IHJldmVyc2UgPyBvWzBdIDogb1syXTsKICAgIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIGIuY2xhc3NOYW1lID0gImFucyI7IGIudGV4dENvbnRlbnQgPSBsYWJlbDsKICAgIGIub25jbGljayA9IGV2ID0+IHF1aXpBbnN3ZXIoYiwgbGFiZWwgPT09IFEuYW5zd2VyLCBldik7CiAgICBib3guYXBwZW5kQ2hpbGQoYik7CiAgfSk7Cn0KZnVuY3Rpb24gcXVpekFuc3dlcihidG4sIG9rLCBldikgewogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNxdWl6QW5zd2VycyAuYW5zIikuZm9yRWFjaChiID0+IGIub25jbGljayA9IG51bGwpOwogIGlmIChvaykgewogICAgYnRuLmNsYXNzTGlzdC5hZGQoImNvcnJlY3QiKTsKICAgIFEuY29tYm8rKzsgUS5tYXhDb21ibyA9IE1hdGgubWF4KFEubWF4Q29tYm8sIFEuY29tYm8pOwogICAgY29uc3QgbXVsdCA9IDEgKyBNYXRoLmZsb29yKFEuY29tYm8gLyAzKTsKICAgIGNvbnN0IHB0cyA9IDEwICogbXVsdDsKICAgIFEuc2NvcmUgKz0gcHRzOyBRLnhwICs9IDIgKiBtdWx0OwogICAgc2Z4Lmdvb2QoKTsKICAgIGZsb2F0RngoIisiICsgcHRzICsgKG11bHQgPiAxID8gIiDDlyIgKyBtdWx0IDogIiIpLCAiIzJGN0Q0RiIsIGV2LmNsaWVudFgsIGV2LmNsaWVudFkpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpTY29yZSIpLnRleHRDb250ZW50ID0gUS5zY29yZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6Q29tYm8iKS50ZXh0Q29udGVudCA9IFEuY29tYm8gPj0gMyA/ICLwn5Slw5ciICsgbXVsdCA6ICIiOwogICAgc2V0VGltZW91dChxdWl6TmV4dCwgMzUwKTsKICB9IGVsc2UgewogICAgYnRuLmNsYXNzTGlzdC5hZGQoIndyb25nIik7CiAgICBRLmNvbWJvID0gMDsgc2Z4LmJhZCgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpDb21ibyIpLnRleHRDb250ZW50ID0gIiI7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjcXVpekFuc3dlcnMgLmFucyIpLmZvckVhY2goYiA9PiB7CiAgICAgIGlmIChiLnRleHRDb250ZW50ID09PSBRLmFuc3dlcikgYi5jbGFzc0xpc3QuYWRkKCJjb3JyZWN0Iik7CiAgICB9KTsKICAgIHNldFRpbWVvdXQocXVpek5leHQsIDkwMCk7CiAgfQp9CgovKiA9PT09PT09PT09PT09PT0gV09SRCBNQVRDSCA9PT09PT09PT09PT09PT0gKi8KbGV0IE0gPSB7fTsKZnVuY3Rpb24gc3RhcnRNYXRjaCgpIHsKICBjb25zdCBjYXJkcyA9IHNodWZmbGUoZ2FtZVBvb2woKSkuc2xpY2UoMCwgOCk7CiAgTSA9IHsgdGltZTo5MCwgbGVmdDpjYXJkcy5sZW5ndGgsIHNlbDpudWxsLCBzdGFydDpEYXRlLm5vdygpLCB4cDowIH07CiAgc2hvdygibWF0Y2giKTsKICBjb25zdCB0aWxlcyA9IHNodWZmbGUoWwogICAgLi4uY2FyZHMubWFwKGMgPT4gKHtpZDpjWzBdLCBsYWJlbDpjWzBdLCBzaWRlOiJrciJ9KSksCiAgICAuLi5jYXJkcy5tYXAoYyA9PiAoe2lkOmNbMF0sIGxhYmVsOmNbNF0gKyAiICIgKyBjWzJdLCBzaWRlOiJlbiJ9KSkKICBdKTsKICBjb25zdCBncmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoR3JpZCIpOwogIGdyaWQuaW5uZXJIVE1MID0gIiI7CiAgdGlsZXMuZm9yRWFjaCh0ID0+IHsKICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGQuY2xhc3NOYW1lID0gInRpbGUiOyBkLnRleHRDb250ZW50ID0gdC5sYWJlbDsKICAgIGQuZGF0YXNldC5pZCA9IHQuaWQ7IGQuZGF0YXNldC5zaWRlID0gdC5zaWRlOwogICAgZC5vbmNsaWNrID0gKCkgPT4gbWF0Y2hQaWNrKGQpOwogICAgZ3JpZC5hcHBlbmRDaGlsZChkKTsKICB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWF0Y2hMZWZ0IikudGV4dENvbnRlbnQgPSBNLmxlZnQ7CiAgbWF0Y2hUaWNrKCk7CiAgYWN0aXZlVGltZXIgPSBzZXRJbnRlcnZhbChtYXRjaFRpY2ssIDEwMDApOwp9CmZ1bmN0aW9uIG1hdGNoVGljaygpIHsKICBjb25zdCB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoVGltZXIiKTsKICB0LnRleHRDb250ZW50ID0gTS50aW1lOyB0LmNsYXNzTGlzdC50b2dnbGUoImxvdyIsIE0udGltZSA8PSAxNSk7CiAgaWYgKE0udGltZSA8PSAwKSB7CiAgICBzaG93UmVzdWx0KHsgZW1vamk6IuKPsCIsIHRpdGxlOiJPdXQgb2YgdGltZSEiLCBzdWI6TS5sZWZ0ICsgIiBwYWlycyBsZWZ0IOKAlCB0cnkgYWdhaW4hIiwKICAgICAgc2NvcmU6KDggLSBNLmxlZnQpICsgIi84IiwgeHA6TS54cCwgY29tYm86MCwgcmVwbGF5OnN0YXJ0TWF0Y2ggfSk7CiAgICByZXR1cm47CiAgfQogIE0udGltZS0tOwp9CmZ1bmN0aW9uIG1hdGNoUGljayh0aWxlKSB7CiAgaWYgKHRpbGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJkb25lIikpIHJldHVybjsKICBpZiAoTS5zZWwgPT09IHRpbGUpIHsgdGlsZS5jbGFzc0xpc3QucmVtb3ZlKCJzZWwiKTsgTS5zZWwgPSBudWxsOyByZXR1cm47IH0KICBpZiAodGlsZS5kYXRhc2V0LnNpZGUgPT09ICJrciIpIHNheSh0aWxlLmRhdGFzZXQuaWQsIDEpOwogIGlmICghTS5zZWwpIHsgTS5zZWwgPSB0aWxlOyB0aWxlLmNsYXNzTGlzdC5hZGQoInNlbCIpOyByZXR1cm47IH0KICBjb25zdCBhID0gTS5zZWwsIGIgPSB0aWxlOwogIE0uc2VsID0gbnVsbDsgYS5jbGFzc0xpc3QucmVtb3ZlKCJzZWwiKTsKICBpZiAoYS5kYXRhc2V0LmlkID09PSBiLmRhdGFzZXQuaWQgJiYgYS5kYXRhc2V0LnNpZGUgIT09IGIuZGF0YXNldC5zaWRlKSB7CiAgICBhLmNsYXNzTGlzdC5hZGQoImRvbmUiKTsgYi5jbGFzc0xpc3QuYWRkKCJkb25lIik7CiAgICBNLmxlZnQtLTsgTS54cCArPSA1OyBzZnguZ29vZCgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoTGVmdCIpLnRleHRDb250ZW50ID0gTS5sZWZ0OwogICAgaWYgKE0ubGVmdCA9PT0gMCkgewogICAgICBjb25zdCBzZWNzID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIE0uc3RhcnQpIC8gMTAwMCk7CiAgICAgIE0ueHAgKz0gTWF0aC5mbG9vcihNYXRoLm1heCgwLCA5MCAtIHNlY3MpIC8gMyk7CiAgICAgIHNob3dSZXN1bHQoeyBlbW9qaToi8J+nqSIsIHRpdGxlOiJBbGwgbWF0Y2hlZCBpbiAiICsgc2VjcyArICJzISIsCiAgICAgICAgc3ViOiJTcGVlZCBib251cyBpbmNsdWRlZCIsIHNjb3JlOnNlY3MgKyAicyIsIHhwOk0ueHAsIGNvbWJvOjAsIHJlcGxheTpzdGFydE1hdGNoIH0pOwogICAgfQogIH0gZWxzZSB7CiAgICBhLmNsYXNzTGlzdC5hZGQoImJhZCIpOyBiLmNsYXNzTGlzdC5hZGQoImJhZCIpOyBzZnguYmFkKCk7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsgYS5jbGFzc0xpc3QucmVtb3ZlKCJiYWQiKTsgYi5jbGFzc0xpc3QucmVtb3ZlKCJiYWQiKTsgfSwgNDAwKTsKICB9Cn0KCi8qID09PT09PT09PT09PT09PSBTRU5URU5DRSBCVUlMREVSID09PT09PT09PT09PT09PSAqLwpsZXQgQiA9IHt9OwpmdW5jdGlvbiBzdGFydEJ1aWxkZXIoKSB7CiAgY29uc3QgdXNhYmxlID0gZ2FtZVBvb2woKS5maWx0ZXIoYyA9PiBjWzVdLnNwbGl0KCIgIikubGVuZ3RoID49IDMpOwogIEIgPSB7IHJvdW5kczogc2h1ZmZsZSh1c2FibGUpLnNsaWNlKDAsIDUpLCBpOjAsIHNjb3JlOjAsIHhwOjAsIHRyaWVzOjAgfTsKICBpZiAoIUIucm91bmRzLmxlbmd0aCkgeyBhbGVydCgiVGhpcyBsZXNzb24gaGFzIG5vIGxvbmcgc2VudGVuY2VzIHlldCDigJQgdHJ5IGFub3RoZXIgbW9kZSEiKTsgcmV0dXJuOyB9CiAgc2hvdygiYnVpbGRlciIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNjb3JlIikudGV4dENvbnRlbnQgPSAwOwogIGJ1aWxkZXJSb3VuZCgpOwp9CmZ1bmN0aW9uIGJ1aWxkZXJSb3VuZCgpIHsKICBjb25zdCBjYXJkID0gQi5yb3VuZHNbQi5pXTsKICBCLndvcmRzID0gY2FyZFs1XS5zcGxpdCgiICIpOwogIEIucGxhY2VkID0gW107IEIudHJpZXMgPSAwOyBCLnNlbnRlbmNlID0gY2FyZFs1XTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVpbGRQcm9ncmVzcyIpLnRleHRDb250ZW50ID0gKEIuaSArIDEpICsgIiAvICIgKyBCLnJvdW5kcy5sZW5ndGg7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkRW4iKS50ZXh0Q29udGVudCA9IGNhcmRbNl07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2xvdCIpLmlubmVySFRNTCA9ICIiOwogIGNvbnN0IHBvb2xCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVpbGRQb29sIik7CiAgcG9vbEJveC5pbm5lckhUTUwgPSAiIjsKICBzaHVmZmxlKEIud29yZHMubWFwKCh3LCBpZHgpID0+ICh7dywgaWR4fSkpKS5mb3JFYWNoKGl0ZW0gPT4gewogICAgY29uc3QgY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgY2hpcC5jbGFzc05hbWUgPSAid29yZGNoaXAiOyBjaGlwLnRleHRDb250ZW50ID0gaXRlbS53OwogICAgY2hpcC5vbmNsaWNrID0gKCkgPT4gewogICAgICBpZiAoY2hpcC5jbGFzc0xpc3QuY29udGFpbnMoInBsYWNlZCIpKSByZXR1cm47CiAgICAgIGNoaXAuY2xhc3NMaXN0LmFkZCgicGxhY2VkIik7CiAgICAgIEIucGxhY2VkLnB1c2goeyB3OiBpdGVtLncsIGNoaXAgfSk7CiAgICAgIGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgcy5jbGFzc05hbWUgPSAid29yZGNoaXAiOyBzLnRleHRDb250ZW50ID0gaXRlbS53OwogICAgICBzLm9uY2xpY2sgPSAoKSA9PiB7IEIucGxhY2VkID0gQi5wbGFjZWQuZmlsdGVyKHAgPT4gcC5jaGlwICE9PSBjaGlwKTsgY2hpcC5jbGFzc0xpc3QucmVtb3ZlKCJwbGFjZWQiKTsgcy5yZW1vdmUoKTsgfTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2xvdCIpLmFwcGVuZENoaWxkKHMpOwogICAgfTsKICAgIHBvb2xCb3guYXBwZW5kQ2hpbGQoY2hpcCk7CiAgfSk7Cn0KZnVuY3Rpb24gYnVpbGRlclJlc2V0KCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNsb3QiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjYnVpbGRQb29sIC53b3JkY2hpcCIpLmZvckVhY2goYyA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoInBsYWNlZCIpKTsKICBCLnBsYWNlZCA9IFtdOwp9CmZ1bmN0aW9uIGJ1aWxkZXJDaGVjaygpIHsKICBjb25zdCBhdHRlbXB0ID0gQi5wbGFjZWQubWFwKHAgPT4gcC53KS5qb2luKCIgIik7CiAgaWYgKGF0dGVtcHQgPT09IEIud29yZHMuam9pbigiICIpKSB7CiAgICBjb25zdCBwdHMgPSBCLnRyaWVzID09PSAwID8gMjAgOiAxMDsKICAgIEIuc2NvcmUgKz0gcHRzOyBCLnhwICs9IEIudHJpZXMgPT09IDAgPyA4IDogNDsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNjb3JlIikudGV4dENvbnRlbnQgPSBCLnNjb3JlOwogICAgc2Z4Lmdvb2QoKTsgZmxvYXRGeCgiKyIgKyBwdHMsICIjMkY3RDRGIik7CiAgICBzYXkoQi5zZW50ZW5jZSk7CiAgICBCLmkrKzsKICAgIGlmIChCLmkgPj0gQi5yb3VuZHMubGVuZ3RoKSB7CiAgICAgIHNob3dSZXN1bHQoeyBlbW9qaTogQi5zY29yZSA9PT0gMTAwID8gIvCfkq8iIDogIvCflKgiLAogICAgICAgIHRpdGxlOiBCLnNjb3JlID09PSAxMDAgPyAiUEVSRkVDVCBydW4hIiA6ICJTZW50ZW5jZXMgYnVpbHQhIiwKICAgICAgICBzdWI6ICJSZWFsIHNlbnRlbmNlcyBmcm9tIFF1ZXN0ICIgKyBjdXIubiwgc2NvcmU6IEIuc2NvcmUsIHhwOiBCLnhwLCBjb21ibzogMCwgcmVwbGF5OiBzdGFydEJ1aWxkZXIgfSk7CiAgICB9IGVsc2Ugc2V0VGltZW91dChidWlsZGVyUm91bmQsIDkwMCk7CiAgfSBlbHNlIHsKICAgIEIudHJpZXMrKzsgc2Z4LmJhZCgpOwogICAgY29uc3Qgc2xvdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFNsb3QiKTsKICAgIHNsb3Quc3R5bGUuYW5pbWF0aW9uID0gInNoYWtlIC4zcyI7CiAgICBzZXRUaW1lb3V0KCgpID0+IHNsb3Quc3R5bGUuYW5pbWF0aW9uID0gIiIsIDM1MCk7CiAgICBpZiAoQi50cmllcyA+PSAyKSBmbG9hdEZ4KCJIaW50OiAiICsgQi53b3Jkc1swXSArICIg4oCmIiwgIiNCMDdEMjgiKTsKICB9Cn0KCi8qID09PT09PT09PT09PT09PSBCT1NTIEJBVFRMRSA9PT09PT09PT09PT09PT0gKi8KbGV0IFggPSB7fTsKZnVuY3Rpb24gc3RhcnRCb3NzKCkgewogIFggPSB7IGhwOjEwMCwgaGVhcnRzOjMsIGRtZzowLCB4cDowLCBjb21ibzowLCBtYXhDb21ibzowIH07CiAgc2hvdygiYm9zcyIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzVGl0bGUiKS50ZXh0Q29udGVudCA9IGN1ci5ib3NzICsgIiAiICsgY3VyLmJvc3NOYW1lOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzU3ByaXRlIikudGV4dENvbnRlbnQgPSBjdXIuYm9zczsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc0hwIikuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NIZWFydHMiKS50ZXh0Q29udGVudCA9ICLinaTvuI/inaTvuI/inaTvuI8iOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzRG1nIikudGV4dENvbnRlbnQgPSAwOwogIGJvc3NOZXh0KCk7Cn0KZnVuY3Rpb24gYm9zc05leHQoKSB7CiAgY29uc3QgY2FyZHMgPSBzaHVmZmxlKGdhbWVQb29sKCkpOwogIGNvbnN0IGNhcmQgPSBjYXJkc1swXTsKICBjb25zdCBtb2RlID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyk7CiAgbGV0IGxhYmVsLCB3b3JkLCBhbnN3ZXIsIG9wdHM7CiAgaWYgKG1vZGUgPT09IDApIHsgbGFiZWwgPSAiVHJhbnNsYXRlIHRvIEVuZ2xpc2giOyB3b3JkID0gY2FyZFs0XSArICIgIiArIGNhcmRbMF07IGFuc3dlciA9IGNhcmRbMl07IG9wdHMgPSBjYXJkcy5zbGljZSgxLDQpLm1hcChjID0+IGNbMl0pOyBzYXkoY2FyZFswXSk7IH0KICBlbHNlIGlmIChtb2RlID09PSAxKSB7IGxhYmVsID0gIldoaWNoIGlzIEtvcmVhbiBmb3LigKYiOyB3b3JkID0gY2FyZFs0XSArICIgIiArIGNhcmRbMl07IGFuc3dlciA9IGNhcmRbMF07IG9wdHMgPSBjYXJkcy5zbGljZSgxLDQpLm1hcChjID0+IGNbMF0pOyB9CiAgZWxzZSB7CiAgICBjb25zdCBmaXJzdCA9IGNhcmRbMF0uc3BsaXQoIiAiKVswXTsKICAgIGxhYmVsID0gIkNvbXBsZXRlOiAiICsgY2FyZFs2XTsKICAgIHdvcmQgPSBjYXJkWzVdLnJlcGxhY2UoZmlyc3QsICJfX19fIik7CiAgICBhbnN3ZXIgPSBmaXJzdDsgb3B0cyA9IGNhcmRzLnNsaWNlKDEsNCkubWFwKGMgPT4gY1swXS5zcGxpdCgiICIpWzBdKTsKICB9CiAgWC5hbnN3ZXIgPSBhbnN3ZXI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NMYWJlbCIpLnRleHRDb250ZW50ID0gbGFiZWw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NXb3JkIikudGV4dENvbnRlbnQgPSB3b3JkOwogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzQW5zd2VycyIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBzaHVmZmxlKFthbnN3ZXIsIC4uLm9wdHNdKS5mb3JFYWNoKG8gPT4gewogICAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYi5jbGFzc05hbWUgPSAiYW5zIjsgYi50ZXh0Q29udGVudCA9IG87CiAgICBiLm9uY2xpY2sgPSBldiA9PiBib3NzQW5zd2VyKGIsIG8gPT09IGFuc3dlciwgZXYpOwogICAgYm94LmFwcGVuZENoaWxkKGIpOwogIH0pOwp9CmZ1bmN0aW9uIGJvc3NBbnN3ZXIoYnRuLCBvaywgZXYpIHsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjYm9zc0Fuc3dlcnMgLmFucyIpLmZvckVhY2goYiA9PiBiLm9uY2xpY2sgPSBudWxsKTsKICBjb25zdCBzcHJpdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc1Nwcml0ZSIpOwogIGlmIChvaykgewogICAgWC5jb21ibysrOyBYLm1heENvbWJvID0gTWF0aC5tYXgoWC5tYXhDb21ibywgWC5jb21ibyk7CiAgICBjb25zdCBkbWcgPSAxMCArIChYLmNvbWJvID49IDMgPyA1IDogMCk7CiAgICBYLmhwID0gTWF0aC5tYXgoMCwgWC5ocCAtIGRtZyk7CiAgICBYLmRtZyArPSBkbWc7IFgueHAgKz0gNDsKICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCJjb3JyZWN0Iik7IHNmeC5oaXQoKTsKICAgIHNwcml0ZS5jbGFzc0xpc3QuYWRkKCJoaXQiKTsgc2V0VGltZW91dCgoKSA9PiBzcHJpdGUuY2xhc3NMaXN0LnJlbW92ZSgiaGl0IiksIDQwMCk7CiAgICBmbG9hdEZ4KCItIiArIGRtZyArICIgSFAiLCAiI0NGMkUyRSIsIGV2LmNsaWVudFgsIGV2LmNsaWVudFkpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NIcCIpLnN0eWxlLndpZHRoID0gWC5ocCArICIlIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzRG1nIikudGV4dENvbnRlbnQgPSBYLmRtZzsKICAgIGlmIChYLmhwIDw9IDApIHsKICAgICAgc3ByaXRlLnRleHRDb250ZW50ID0gIvCfkoAiOyBYLnhwICs9IDMwOwogICAgICBkYWlseUJ1bXAoImNvbnZvIik7CiAgICAgIGNvbnN0IHN0ID0gbHN0YXRlKGN1ci5uKTsKICAgICAgY29uc3QgZmlyc3RXaW4gPSAhc3Quc3RhcnMuYm9zczsKICAgICAgc3Quc3RhcnMuYm9zcyA9IHRydWU7IHBlcnNpc3QoKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgc2hvd1Jlc3VsdCh7IGVtb2ppOiLimpTvuI8iLCB0aXRsZTogY3VyLmJvc3NOYW1lICsgIiBkZWZlYXRlZCEiLAogICAgICAgICAgc3ViOiBmaXJzdFdpbiA/ICLirZAgQm9zcyBzdGFyIGVhcm5lZCEgKzMwIFhQIGJvbnVzIiA6ICIrMzAgWFAgdmljdG9yeSBib251cyIsCiAgICAgICAgICBzY29yZTogWC5kbWcsIHhwOiBYLnhwLCBjb21ibzogWC5tYXhDb21ibywgcmVwbGF5OiBzdGFydEJvc3MgfSk7CiAgICAgIH0sIDgwMCk7CiAgICAgIHJldHVybjsKICAgIH0KICB9IGVsc2UgewogICAgWC5jb21ibyA9IDA7IFguaGVhcnRzLS07CiAgICBidG4uY2xhc3NMaXN0LmFkZCgid3JvbmciKTsgc2Z4LmJhZCgpOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2Jvc3NBbnN3ZXJzIC5hbnMiKS5mb3JFYWNoKGIgPT4gewogICAgICBpZiAoYi50ZXh0Q29udGVudCA9PT0gWC5hbnN3ZXIpIGIuY2xhc3NMaXN0LmFkZCgiY29ycmVjdCIpOwogICAgfSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc0hlYXJ0cyIpLnRleHRDb250ZW50ID0gIuKdpO+4jyIucmVwZWF0KFguaGVhcnRzKSArICLwn5akIi5yZXBlYXQoMyAtIFguaGVhcnRzKTsKICAgIGlmIChYLmhlYXJ0cyA8PSAwKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHNob3dSZXN1bHQoeyBlbW9qaToi8J+YtSIsIHRpdGxlOiJEZWZlYXRlZOKApiIsCiAgICAgICAgICBzdWI6IGN1ci5ib3NzTmFtZSArICIgaGFkICIgKyBYLmhwICsgIiBIUCBsZWZ0LiBSZXZpZXcgdGhlIGxlc3NvbiBhbmQgcmV0dXJuISIsCiAgICAgICAgICBzY29yZTogWC5kbWcsIHhwOiBNYXRoLmZsb29yKFgueHAgLyAyKSwgY29tYm86IFgubWF4Q29tYm8sIHJlcGxheTogc3RhcnRCb3NzIH0pOwogICAgICB9LCA5MDApOwogICAgICByZXR1cm47CiAgICB9CiAgfQogIHNldFRpbWVvdXQoYm9zc05leHQsIG9rID8gNTAwIDogMTAwMCk7Cn0KCnJlbmRlck1hcCgpOyByZW5kZXJIdWQoKTsgcmVuZGVyU3BkKCk7Cjwvc2NyaXB0Pgo8L2Rpdj4=
