Coast Paid Activities V2 Assets Data LIVE (do not delete – used by the live activities page)

eyJjc3MiOiAiLypcbiAgQ29hc3QgUGFpZCBBY3Rpdml0aWVzIC0gdjIgc3R5bGVzaGVldC5cblxuICBUaGlzIGZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIHdpZGdldCdzIENTUy4gSXQgaXMgTk9UIHBhc3RlZFxuICBpbnRvIENvcm5lcnN0b25lIC0gaXQncyBwdWJsaXNoZWQgKGJhc2U2NC1lbmNvZGVkKSB0byBpdHMgb3duIHVubGlzdGVkXG4gIFdvcmRQcmVzcyBkYXRhIHBhZ2UgdmlhIGNvYXN0X3BhaWRfYWN0aXZpdGllc192Ml9wdWJsaXNoLnB5LCBhbmQgZmV0Y2hlZC9cbiAgaW5qZWN0ZWQgYnkgdGhlIHRpbnkgc3R1YiAoY29hc3QtcGFpZC1hY3Rpdml0aWVzLXYyLXN0dWIuaHRtbCkgdGhhdCBJU1xuICBwYXN0ZWQgaW50byBDb3JuZXJzdG9uZS4gRWRpdCB0aGlzIGZpbGUsIHRoZW4gcmUtcnVuIHRoZSBwdWJsaXNoIHNjcmlwdCAtXG4gIG5vIENvcm5lcnN0b25lIHNhdmUgcmVxdWlyZWQsIHNvIHRoZSByZWN1cnJpbmcgW2NzX2NvbnRlbnRfc2VvXSBsZWFrIGJ1Z1xuICAoc2VlIHByb2plY3RzL2NhbXBzL3RoZS1jb2FzdC9vcHMvY29hc3QtcGFpZC1hY3Rpdml0aWVzLXdlYnNpdGUubWQpIG5ldmVyXG4gIGdldHMgdHJpZ2dlcmVkIGJ5IHJvdXRpbmUgd2lkZ2V0IHVwZGF0ZXMgYWdhaW4uXG5cbiAgSWRlbnRpY2FsIHRvIHRoZSB2MSBzdHlsZXMgaW4gY29hc3QtcGFpZC1hY3Rpdml0aWVzLmh0bWwgYXMgb2YgMjAyNi0wNy0xNCAtXG4gIHRoaXMgaXMgYSBsaWZ0LWFuZC1zaGlmdCwgbm90IGEgcmVkZXNpZ24uXG5cbiAgUGFzc2NvZGUgZ2F0ZSBzdHlsZXMgKGFkZGVkIDIwMjYtMDctMTcpIGFyZSBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZmlsZS5cbiovXG4jY3BhLWFwcCB7XG4gIGJhY2tncm91bmQ6ICMyZmI5YWM7XG4gIHBhZGRpbmc6IDI4cHggMTZweDtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4jY3BhLWFwcCAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuXG4jY3BhLWNhcmQge1xuICBtYXgtd2lkdGg6IDQ4MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYm94LXNoYWRvdzogMCAycHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBwYWRkaW5nOiAyNHB4IDIwcHg7XG59XG5cbiNjcGEtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMjZweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuI2NwYS11cGRhdGVkIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzc2NzY3NjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBtYXJnaW46IDRweCAwIDIwcHggMDtcbn1cblxuI2NwYS1zdGF0dXMge1xuICBkaXNwbGF5OiBub25lO1xuICBiYWNrZ3JvdW5kOiAjZmZmOGUxO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjBkODc4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4uY3BhLXRhYnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbn1cbi5jcGEtdGFiIHtcbiAgZmxleDogMTtcbiAgcGFkZGluZzogMTJweCA4cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDQ0cHg7XG59XG4uY3BhLXRhYi5hY3RpdmUge1xuICBiYWNrZ3JvdW5kOiAjMmZiOWFjO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjMmZiOWFjO1xufVxuXG4jY3BhLXNlYXJjaCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAxMnB4O1xuICBmb250LXNpemU6IDE2cHg7IC8qIDE2cHgrIHByZXZlbnRzIGlPUyBhdXRvLXpvb20gb24gZm9jdXMgKi9cbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4jY3BhLWxpc3Qge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4uY3BhLWxpc3Qtcm93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG59XG4uY3BhLXN0YXIge1xuICBmbGV4OiAwIDAgYXV0bztcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICNjY2M7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogMDtcbn1cbi5jcGEtc3Rhci5pcy1mYXZvcml0ZWQgeyBjb2xvcjogIzJmYjlhYzsgfVxuLmNwYS1saXN0LWl0ZW0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxleDogMSAxIGF1dG87XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBwYWRkaW5nOiAxNHB4IDEycHggMTRweCA0cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgYm9yZGVyOiBub25lO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY3BhLWxpc3QtaXRlbTphY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZjBmMGYwOyB9XG4uY3BhLXNlY3Rpb24tbGFiZWwge1xuICBwYWRkaW5nOiAxMnB4IDEycHggNHB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgY29sb3I6ICM4ODg7XG59XG4uY3BhLWVtcHR5IHsgcGFkZGluZzogMTRweCAxMnB4OyBjb2xvcjogIzg4ODsgZm9udC1zaXplOiAxNHB4OyB9XG5cbiNjcGEtY29taW5nLXNvb24ge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDMycHggMTJweDtcbiAgY29sb3I6ICM0NDQ7XG59XG4jY3BhLWNvbWluZy1zb29uIC5jcGEtY29taW5nLXNvb24tdGl0bGUge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cbiNjcGEtY29taW5nLXNvb24gLmNwYS1jb21pbmctc29vbi1ib2R5IHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzc2NzY3Njtcbn1cblxuI2NwYS1kZXRhaWwgeyBwYWRkaW5nLXRvcDogNHB4OyB9XG4jY3BhLWJhY2sge1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiAjMDA0ZjY4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHBhZGRpbmc6IDhweCAwO1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWluLWhlaWdodDogNDRweDtcbn1cbiNjcGEtZGV0YWlsLXRpdGxlIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBtYXJnaW46IDAgMCAxMnB4IDA7XG59XG4uY3BhLWRheS1jYXJkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNwYS1kYXktaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGdhcDogOHB4O1xuICBwYWRkaW5nOiAxNHB4IDEycHg7XG4gIGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLmNwYS1kYXktaGVhZGVyOmFjdGl2ZSB7IGJhY2tncm91bmQ6ICNlZWU7IH1cbi5jcGEtZGF5LW5hbWUge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIGNvbG9yOiAjMWExYTFhO1xuICBmbGV4OiAxIDEgYXV0bztcbn1cbi5jcGEtZGF5LWhlYWRlci5pcy10b2RheSAuY3BhLWRheS1uYW1lIHsgY29sb3I6ICMwMDRmNjg7IH1cbi5jcGEtZGF5LWhlYWRlci5pcy10b2RheSAuY3BhLWRheS1uYW1lOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiVG9kYXlcIjtcbiAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wM2VtO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZDogIzJmYjlhYztcbiAgcGFkZGluZzogMnB4IDZweDtcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uY3BhLWRheS1jb3VudCB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICM4ODg7XG4gIGZsZXg6IDAgMCBhdXRvO1xufVxuLmNwYS1kYXktY2hldnJvbiB7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogIzY2NjtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2U7XG59XG4uY3BhLWRheS1oZWFkZXJbYXJpYS1leHBhbmRlZD1cInRydWVcIl0gLmNwYS1kYXktY2hldnJvbiB7IHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbi5jcGEtZGF5LWJvZHlbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmU7IH1cbi5jcGEtZW50cnktbGlzdCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMCA0cHg7XG59XG4uY3BhLWVudHJ5LWxpc3QgbGkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxMHB4IDRweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cbi5jcGEtdGltZSB7XG4gIGZsZXg6IDAgMCA1MnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiAjMDA0ZjY4O1xufVxuLmNwYS1hY3Rpdml0eSB7XG4gIGZsZXg6IDAgMCA5MnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHBhZGRpbmc6IDAgNHB4O1xufVxuLmNwYS1uYW1lIHtcbiAgZmxleDogMSAxIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM1NTU7XG4gIHBhZGRpbmc6IDAgNHB4O1xufVxuLmNwYS1uYW1lLWV4dHJhIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIzg4ODtcbiAgbWFyZ2luLXRvcDogMnB4O1xufVxuXG4uY3BhLXRvZ2dsZS1yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzQ0NDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNwYS10b2dnbGUtcm93IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBhY2NlbnQtY29sb3I6ICMyZmI5YWM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmNwYS1kZXRhaWwtaGVhZGVyLXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZ2FwOiAxMnB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG4uY3BhLWRldGFpbC1oZWFkZXItcm93ICNjcGEtYmFjayB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uY3BhLWRldGFpbC1oZWFkZXItcm93IC5jcGEtdG9nZ2xlLXJvdyB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi8qIC0tLS0gUGFzc2NvZGUgZ2F0ZSAoYWRkZWQgMjAyNi0wNy0xNykgLS0tLSAqL1xuI2NwYS1nYXRlLWFwcCB7XG4gIGJhY2tncm91bmQ6ICMyZmI5YWM7XG4gIHBhZGRpbmc6IDI4cHggMTZweDtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbiNjcGEtZ2F0ZS1hcHAgKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbi5jcGEtZ2F0ZS1jYXJkIHtcbiAgbWF4LXdpZHRoOiA0MDBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgcGFkZGluZzogMzJweCAyNHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uY3BhLWdhdGUtY2FyZCBoMSB7XG4gIG1hcmdpbjogMCAwIDhweCAwO1xuICBmb250LXNpemU6IDIycHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xufVxuLmNwYS1nYXRlLXN1YiB7XG4gIG1hcmdpbjogMCAwIDI0cHggMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzc2NzY3NjtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbiNjcGEtZ2F0ZS1pbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAxNHB4O1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxldHRlci1zcGFjaW5nOiAwLjE1ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuI2NwYS1nYXRlLWlucHV0OmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiAjMmZiOWFjO1xuICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSg0NywgMTg1LCAxNzIsIDAuMjUpO1xufVxuI2NwYS1nYXRlLWlucHV0LmNwYS1nYXRlLWVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiAjYzAzOTJiO1xuICBhbmltYXRpb246IGNwYS1nYXRlLXNoYWtlIDAuM3M7XG59XG5Aa2V5ZnJhbWVzIGNwYS1nYXRlLXNoYWtlIHtcbiAgMjUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpOyB9XG4gIDc1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0cHgpOyB9XG59XG4jY3BhLWdhdGUtc3VibWl0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDEycHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQ6ICMyZmI5YWM7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDQ0cHg7XG59XG4jY3BhLWdhdGUtc3VibWl0OmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMyNzllOTM7IH1cbiNjcGEtZ2F0ZS1lcnJvci1tc2cge1xuICBtYXJnaW4tdG9wOiAxMnB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbG9yOiAjYzAzOTJiO1xufVxuI2NwYS1nYXRlLWVycm9yLW1zZ1toaWRkZW5dIHsgZGlzcGxheTogbm9uZTsgfVxuIiwgImpzIjogIi8qXG4gIENvYXN0IFBhaWQgQWN0aXZpdGllcyAtIHYyIGFwcGxpY2F0aW9uIGxvZ2ljLlxuXG4gIFNvdXJjZSBvZiB0cnV0aCBsaXZlcyBoZXJlLCBOT1QgaW4gQ29ybmVyc3RvbmUuIFB1Ymxpc2hlZCAoYmFzZTY0LWVuY29kZWQpXG4gIHRvIGl0cyBvd24gdW5saXN0ZWQgV29yZFByZXNzIGRhdGEgcGFnZSB2aWEgY29hc3RfcGFpZF9hY3Rpdml0aWVzX3YyX3B1Ymxpc2gucHksXG4gIGFuZCBmZXRjaGVkL2luamVjdGVkIGF0IHJ1bnRpbWUgYnkgdGhlIHRpbnkgc3R1YlxuICAoY29hc3QtcGFpZC1hY3Rpdml0aWVzLXYyLXN0dWIuaHRtbCkgdGhhdCdzIHRoZSBvbmx5IHRoaW5nIGFjdHVhbGx5IHBhc3RlZFxuICBpbnRvIENvcm5lcnN0b25lLiBFZGl0IHRoaXMgZmlsZSArIHJlLXJ1biB0aGUgcHVibGlzaCBzY3JpcHQgdG8gc2hpcFxuICBjaGFuZ2VzIC0gbm8gQ29ybmVyc3RvbmUgc2F2ZSByZXF1aXJlZCwgc28gdGhlIHJlY3VycmluZyBbY3NfY29udGVudF9zZW9dXG4gIGxlYWsgYnVnIChzZWUgdGhlIG9wcyBkb2MpIG5ldmVyIGdldHMgdHJpZ2dlcmVkIGJ5IHJvdXRpbmUgd2lkZ2V0IHVwZGF0ZXMuXG5cbiAgQnVpbGRzIGl0cyBvd24gRE9NIGludG8gI2NwYS1yb290IChwcm92aWRlZCBieSB0aGUgc3R1YikgaW5zdGVhZCBvZlxuICBleHBlY3Rpbmcgc3RhdGljIG1hcmt1cCB0byBhbHJlYWR5IGV4aXN0IG9uIHRoZSBwYWdlIC0gdGhpcyBpcyB3aGF0IGxldHNcbiAgdGhlIHN0dWIgc3RheSBwZXJtYW5lbnQgZXZlbiBhcyB0aGUgd2lkZ2V0J3Mgc3RydWN0dXJlIGV2b2x2ZXMuIExvZ2ljIGlzXG4gIG90aGVyd2lzZSBhIHN0cmFpZ2h0IHBvcnQgb2YgdGhlIHYxIHdpZGdldCAoY29hc3QtcGFpZC1hY3Rpdml0aWVzLmh0bWwpIGFzXG4gIG9mIDIwMjYtMDctMTQgLSB0aGlzIGlzIGEgbGlmdC1hbmQtc2hpZnQsIG5vdCBhIHJlZGVzaWduLlxuXG4gIFBBU1NDT0RFIEdBVEUgKGFkZGVkIDIwMjYtMDctMTcpOiBhIHBhc3Njb2RlIHNjcmVlbiByZW5kZXJzIGludG8gI2NwYS1yb290XG4gIGJlZm9yZSB0aGUgcmVhbCB3aWRnZXQgZG9lcywgYW5kIG9ubHkgY2FsbHMgYm9vdFdpZGdldCgpIGFmdGVyIGEgdmFsaWRcbiAgY29kZS4gVGhpcyBpcyBUSEUgZXN0YWJsaXNoZWQgcGF0dGVybiBnb2luZyBmb3J3YXJkIGZvciBzaGlwcGluZyB0aGUgZ2F0ZVxuICAoYW5kIGFueSBmdXR1cmUgZ2F0ZSBjaGFuZ2VzKSB0byBlaXRoZXIgY2FtcHMud29sLm9yZyB3aWRnZXQgLSBpdCBsaXZlc1xuICBlbnRpcmVseSBpbiB0aGlzIFJFU1QtcHVibGlzaGVkIEpTL0NTUywgbm90IGluIHRoZSBDb3JuZXJzdG9uZS1wYXN0ZWRcbiAgc3R1Yiwgc28gaXQgc2hpcHMgdGhlIHNhbWUgd2F5IGFzIGV2ZXJ5IG90aGVyIHVwZGF0ZTogZWRpdCB0aGlzIGZpbGUsIHJ1blxuICBjb2FzdF9wYWlkX2FjdGl2aXRpZXNfdjJfcHVibGlzaC5weSAtLXB1Ymxpc2ggPHRlc3R8bGl2ZT4uIE5vIENvcm5lcnN0b25lXG4gIHBhc3RlIG5lZWRlZC4gUHJvdmVuIGZpcnN0IGFzIGEgc2VwYXJhdGUgc3R1Yi1sZXZlbCBnYXRlIGluIHRoZSB2M1xuICB0ZXN0YmVkIChjb2FzdC1wYWlkLWFjdGl2aXRpZXMtdjMtcGFzc2NvZGUtc3R1Yi5odG1sKSBiZWZvcmUgYmVpbmcgZm9sZGVkXG4gIGluIGhlcmUgLSBzZWUgcHJvamVjdHMvY2FtcHMvdGhlLWNvYXN0L29wcy9jb2FzdC1wYWlkLWFjdGl2aXRpZXMtd2Vic2l0ZS5tZCdzXG4gIFwidjMgcGFzc2NvZGUtZ2F0ZSB0ZXN0YmVkXCIgLyBcIlBhc3Njb2RlIGdhdGUgd2VudCBsaXZlXCIgc2VjdGlvbnMgZm9yIHRoZVxuICBmdWxsIGhpc3RvcnkgYW5kIHRoZSBvbmUgaG9uZXN0IGNhdmVhdCAoY2xpZW50LXNpZGUgZ2F0ZSA9IG5vdCByZWFsXG4gIHNlY3VyaXR5LCBzZWUgdGhhdCBkb2MpLlxuKi9cbihmdW5jdGlvbiAoKSB7XG4gIC8vIC0tLS0gRWFzeS10by1lZGl0IGNvbmZpZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBvaW50cyBhdCB0aGUgTElWRSBzY2hlZHVsZS1kYXRhIHBhZ2UgLSBhIHJlYWQtb25seSBwdWJsaWMgZmV0Y2gsIHNhbWVcbiAgLy8gb25lIHRoZSB2MSB3aWRnZXQgYWxyZWFkeSB1c2VzIHNhZmVseS4gTm8gd3JpdGUgYWNjZXNzLCBzbyByZXVzaW5nIGl0XG4gIC8vIGhlcmUgKGV2ZW4gd2hpbGUgdjIgaXRzZWxmIGlzIHN0aWxsIGluIGEgc2FuZGJveCB0ZXN0IHBhZ2UpIGlzIHNhZmUuXG4gIHZhciBEQVRBX1VSTCA9IFwiaHR0cHM6Ly9jYW1wcy53b2wub3JnL3dwLWpzb24vd3AvdjIvcGFnZXMvMTAwMzJcIjtcbiAgdmFyIFJFRlJFU0hfTVMgPSAxMCAqIDYwICogMTAwMDsgLy8gMTAgbWludXRlc1xuICB2YXIgREFZX09SREVSID0gW1wiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCJdO1xuICB2YXIgU1RPUkFHRV9LRVkgPSBcImNwYV9sYXN0X2dvb2RfZGF0YVwiO1xuICB2YXIgRkFWT1JJVEVTX0tFWSA9IFwiY3BhX2Zhdm9yaXRlc1wiO1xuICB2YXIgU0hPV19FWFRSQV9LRVkgPSBcImNwYV9zaG93X2V4dHJhXCI7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyAtLS0tIFBhc3Njb2RlIGdhdGUgY29uZmlnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNIQS0yNTYgaGFzaGVzIG9mIHRoZSBhY2NlcHRlZCBjb2RlcyAoY2FzZS1pbnNlbnNpdGl2ZSAtIHVwcGVyY2FzZWRcbiAgLy8gYmVmb3JlIGhhc2hpbmcpLiBTYW1lIGNhdmVhdCBhcyBhbHdheXM6IHRoaXMgaXMgYSBzb2Z0IFwia2VlcCBjYXN1YWxcbiAgLy8gdmlzaXRvcnMgb3V0XCIgZ2F0ZSwgbm90IHJlYWwgc2VjdXJpdHkgLSBzZWUgdGhlIG9wcyBkb2MuXG4gIHZhciBHQVRFX1VOTE9DS19LRVkgPSBcImNwYV9nYXRlX3VubG9ja2VkXCI7XG4gIHZhciBHQVRFX0hBU0hFUyA9IFtcbiAgICBcIjRlNDYyZTJmYTY4YWZiNTU3ODQ5NmU5NjRiZmVkM2FkM2M0N2FmZmYxZDg0MjQ4Yzc4YWY4Y2M5YzMxOGRkYjNcIiwgLy8gV0VFSzdcbiAgICBcIjdlYmVkMTc0ZGU0M2YxYTEyNGZjMzM2MTgxMjk0ZjFlZGE4Nzk4Zjg2ZTY5MzA0ZDhmYzdkZjc5YjcyMjRkN2FcIiAgLy8gV0VFSzhcbiAgXTtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHZhciBTVEFSX0ZJTExFRCA9ICc8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PHBhdGggZD1cIk0xMiAybDIuOSA2LjkgNy4xLjYtNS40IDQuNyAxLjYgNy4xTDEyIDE3LjMgNS44IDIxLjNsMS42LTcuMUwyIDkuNWw3LjEtLjZ6XCIvPjwvc3ZnPic7XG4gIHZhciBTVEFSX09VVExJTkUgPSAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIj48cGF0aCBkPVwiTTEyIDJsMi45IDYuOSA3LjEuNi01LjQgNC43IDEuNiA3LjFMMTIgMTcuMyA1LjggMjEuM2wxLjYtNy4xTDIgOS41bDcuMS0uNnpcIi8+PC9zdmc+JztcbiAgdmFyIENIRVZST05fSUNPTiA9ICc8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj48cGF0aCBkPVwiTTYgOWw2IDYgNi02XCIvPjwvc3ZnPic7XG4gIHZhciBXRUVLREFZX05BTUVTID0gW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl07XG5cbiAgdmFyIHN0YXRlID0geyBkYXRhOiBudWxsLCBtb2RlOiBcImNhYmluc1wiLCBzZWFyY2g6IFwiXCIsIHNob3dFeHRyYTogZ2V0U2hvd0V4dHJhKCksIGN1cnJlbnROYW1lOiBudWxsIH07XG5cbiAgLy8gLS0tLSBCdWlsZCB0aGUgd2lkZ2V0J3MgRE9NIGludG8gI2NwYS1yb290IChtb3VudCBwb2ludCBmcm9tIHRoZSBzdHViKSAtLVxuICBmdW5jdGlvbiBidWlsZFNrZWxldG9uKHJvb3QpIHtcbiAgICByb290LmlubmVySFRNTCA9XG4gICAgICAnPGRpdiBpZD1cImNwYS1hcHBcIj4nICtcbiAgICAgICAgJzxkaXYgaWQ9XCJjcGEtY2FyZFwiPicgK1xuICAgICAgICAgICc8aDEgaWQ9XCJjcGEtdGl0bGVcIj5Db2FzdCBQYWlkIEFjdGl2aXRpZXM8L2gxPicgK1xuICAgICAgICAgICc8ZGl2IGlkPVwiY3BhLXVwZGF0ZWRcIj48L2Rpdj4nICtcbiAgICAgICAgICAnPGRpdiBpZD1cImNwYS1zdGF0dXNcIj48L2Rpdj4nICtcbiAgICAgICAgICAnPGRpdiBpZD1cImNwYS1jb21pbmctc29vblwiIGhpZGRlbj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY3BhLWNvbWluZy1zb29uLXRpdGxlXCI+Q29taW5nIFNvb248L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY3BhLWNvbWluZy1zb29uLWJvZHlcIj5UaGUgcGFpZCBhY3Rpdml0eSBzY2hlZHVsZSBpc24mIzM5O3QgcG9zdGVkIHlldC4gQ2hlY2sgYmFjayBzaG9ydGx5LjwvZGl2PicgK1xuICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAnPGRpdiBpZD1cImNwYS1waWNrZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY3BhLXRhYnNcIj4nICtcbiAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtbW9kZT1cImNhYmluc1wiIGNsYXNzPVwiY3BhLXRhYiBhY3RpdmVcIj5CeSBDYWJpbjwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1tb2RlPVwiZ3JvdXBzXCIgY2xhc3M9XCJjcGEtdGFiXCI+QnkgR3JvdXA8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJjcGEtdG9nZ2xlLXJvd1wiPicgK1xuICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3BhLWV4dHJhLXRvZ2dsZVwiPicgK1xuICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJjcGEtZXh0cmEtdG9nZ2xlLWxhYmVsXCI+PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJzZWFyY2hcIiBpZD1cImNwYS1zZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPicgK1xuICAgICAgICAgICAgJzx1bCBpZD1cImNwYS1saXN0XCI+PC91bD4nICtcbiAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgJzxkaXYgaWQ9XCJjcGEtZGV0YWlsXCIgaGlkZGVuPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjcGEtZGV0YWlsLWhlYWRlci1yb3dcIj4nICtcbiAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiY3BhLWJhY2tcIj4mbGFycjsgQmFjazwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwiY3BhLXRvZ2dsZS1yb3dcIj4nICtcbiAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3BhLWV4dHJhLXRvZ2dsZVwiPicgK1xuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImNwYS1leHRyYS10b2dnbGUtbGFiZWxcIj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzxoMiBpZD1cImNwYS1kZXRhaWwtdGl0bGVcIj48L2gyPicgK1xuICAgICAgICAgICAgJzxkaXYgaWQ9XCJjcGEtZGV0YWlsLWNvbnRlbnRcIj48L2Rpdj4nICtcbiAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICc8L2Rpdj4nICtcbiAgICAgICc8L2Rpdj4nO1xuICB9XG5cbiAgLy8gLS0tLSBcIlNob3cgY2h1cmNoL2NhYmluXCIgdG9nZ2xlIChsb2NhbFN0b3JhZ2UsIG9uZSBnbG9iYWwgc2V0dGluZykgLS0tLS1cbiAgZnVuY3Rpb24gZ2V0U2hvd0V4dHJhKCkge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTSE9XX0VYVFJBX0tFWSkgPT09IFwiMVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0U2hvd0V4dHJhKHZhbHVlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU0hPV19FWFRSQV9LRVksIHZhbHVlID8gXCIxXCIgOiBcIjBcIik7XG4gICAgc3RhdGUuc2hvd0V4dHJhID0gdmFsdWU7XG4gICAgc3luY0V4dHJhVG9nZ2xlVUkoKTtcbiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3BhLWRldGFpbFwiKS5oaWRkZW4gJiYgc3RhdGUuY3VycmVudE5hbWUpIHtcbiAgICAgIHNob3dEZXRhaWwoc3RhdGUuY3VycmVudE5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dHJhTGFiZWxUZXh0KCkge1xuICAgIHJldHVybiBzdGF0ZS5tb2RlID09PSBcImNhYmluc1wiID8gXCJTaG93IGdyb3VwIG5hbWVcIiA6IFwiU2hvdyBjYWJpblwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc3luY0V4dHJhVG9nZ2xlVUkoKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNwYS1leHRyYS10b2dnbGVcIiksIGZ1bmN0aW9uIChjYikge1xuICAgICAgY2IuY2hlY2tlZCA9IHN0YXRlLnNob3dFeHRyYTtcbiAgICB9KTtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY3BhLWV4dHJhLXRvZ2dsZS1sYWJlbFwiKSwgZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgICBsYWJlbC50ZXh0Q29udGVudCA9IGV4dHJhTGFiZWxUZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tIEZhdm9yaXRlcyAobG9jYWxTdG9yYWdlLCBwZXItYnJvd3Nlci9wZXItZGV2aWNlLCBub3Qgc3luY2VkKSAtLS0tLS1cbiAgZnVuY3Rpb24gZ2V0RmF2b3JpdGVzKCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgcGFyc2VkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShGQVZPUklURVNfS0VZKSB8fCBcInt9XCIpO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZC5jYWJpbnMpKSBwYXJzZWQuY2FiaW5zID0gW107XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkLmdyb3VwcykpIHBhcnNlZC5ncm91cHMgPSBbXTtcbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHsgY2FiaW5zOiBbXSwgZ3JvdXBzOiBbXSB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRmF2b3JpdGVkKG1vZGUsIG5hbWUpIHtcbiAgICByZXR1cm4gZ2V0RmF2b3JpdGVzKClbbW9kZV0uaW5kZXhPZihuYW1lKSAhPT0gLTE7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVGYXZvcml0ZShtb2RlLCBuYW1lKSB7XG4gICAgdmFyIGZhdnMgPSBnZXRGYXZvcml0ZXMoKTtcbiAgICB2YXIgaWR4ID0gZmF2c1ttb2RlXS5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpZHggPT09IC0xKSBmYXZzW21vZGVdLnB1c2gobmFtZSk7XG4gICAgZWxzZSBmYXZzW21vZGVdLnNwbGljZShpZHgsIDEpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKEZBVk9SSVRFU19LRVksIEpTT04uc3RyaW5naWZ5KGZhdnMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVBheWxvYWQoYm9keSkge1xuICAgIHZhciByYXcgPSAoYm9keS5jb250ZW50ICYmIGJvZHkuY29udGVudC5yZW5kZXJlZCkgfHwgXCJcIjtcbiAgICB2YXIgc3RyaXBwZWQgPSByYXcucmVwbGFjZSgvPFtePl0rPi9nLCBcIlwiKS50cmltKCk7XG4gICAgdmFyIHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICAgIHRhLmlubmVySFRNTCA9IHN0cmlwcGVkO1xuICAgIHZhciBiNjQgPSB0YS52YWx1ZS50cmltKCk7XG4gICAgdmFyIGJpbmFyeSA9IGF0b2IoYjY0KTtcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbmFyeS5sZW5ndGg7IGkrKykgYnl0ZXNbaV0gPSBiaW5hcnkuY2hhckNvZGVBdChpKTtcbiAgICB2YXIganNvblRleHQgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKS5kZWNvZGUoYnl0ZXMpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25UZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcbiAgICB2YXIgdXJsID0gREFUQV9VUkwgKyBcIj9fPVwiICsgRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gZmV0Y2godXJsKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKCFyLm9rKSB0aHJvdyBuZXcgRXJyb3IoXCJIVFRQIFwiICsgci5zdGF0dXMpO1xuICAgICAgICByZXR1cm4gci5qc29uKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oZGVjb2RlUGF5bG9hZCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTdGF0dXMobXNnKSB7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcGEtc3RhdHVzXCIpO1xuICAgIGVsLnRleHRDb250ZW50ID0gbXNnO1xuICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBtc2cgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVwZGF0ZWQoaXNvKSB7XG4gICAgaWYgKCFpc28pIHJldHVybiBcIlwiO1xuICAgIHZhciBkID0gbmV3IERhdGUoaXNvKTtcbiAgICByZXR1cm4gXCJMYXN0IHVwZGF0ZWQgXCIgKyBkLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgICAgbW9udGg6IFwic2hvcnRcIiwgZGF5OiBcIm51bWVyaWNcIiwgaG91cjogXCJudW1lcmljXCIsIG1pbnV0ZTogXCIyLWRpZ2l0XCJcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWREYXRhKGlzSW5pdGlhbCkge1xuICAgIGlmIChpc0luaXRpYWwpIHtcbiAgICAgIHZhciBjYWNoZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhdGUuZGF0YSA9IEpTT04ucGFyc2UoY2FjaGVkKTtcbiAgICAgICAgICByZW5kZXJDb21pbmdTb29uT3JMaXN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlIGNvcnJ1cHQgY2FjaGUgKi8gfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoRGF0YSgpXG4gICAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBzdGF0ZS5kYXRhID0gZGF0YTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgc2V0U3RhdHVzKFwiXCIpO1xuICAgICAgICByZW5kZXJDb21pbmdTb29uT3JMaXN0KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkNvYXN0IFBhaWQgQWN0aXZpdGllczogZmV0Y2ggZmFpbGVkXCIsIGVycik7XG4gICAgICAgIGlmIChzdGF0ZS5kYXRhKSB7XG4gICAgICAgICAgc2V0U3RhdHVzKFwiQ291bGRuJ3QgcmVmcmVzaCBqdXN0IG5vdyAtIHNob3dpbmcgdGhlIGxhc3Qgc2F2ZWQgc2NoZWR1bGUuXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFN0YXR1cyhcIlVuYWJsZSB0byBsb2FkIHRoZSBzY2hlZHVsZSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gc2hvcnRseS5cIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kU2VjdGlvbkxhYmVsKGxpc3RFbCwgdGV4dCkge1xuICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICBsaS5jbGFzc05hbWUgPSBcImNwYS1zZWN0aW9uLWxhYmVsXCI7XG4gICAgbGkudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIGxpc3RFbC5hcHBlbmRDaGlsZChsaSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRMaXN0Um93KGxpc3RFbCwgbmFtZSkge1xuICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICBsaS5jbGFzc05hbWUgPSBcImNwYS1saXN0LXJvd1wiO1xuXG4gICAgdmFyIGZhdm9yaXRlZCA9IGlzRmF2b3JpdGVkKHN0YXRlLm1vZGUsIG5hbWUpO1xuICAgIHZhciBzdGFyQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICBzdGFyQnRuLnR5cGUgPSBcImJ1dHRvblwiO1xuICAgIHN0YXJCdG4uY2xhc3NOYW1lID0gXCJjcGEtc3RhclwiICsgKGZhdm9yaXRlZCA/IFwiIGlzLWZhdm9yaXRlZFwiIDogXCJcIik7XG4gICAgc3RhckJ0bi5pbm5lckhUTUwgPSBmYXZvcml0ZWQgPyBTVEFSX0ZJTExFRCA6IFNUQVJfT1VUTElORTtcbiAgICBzdGFyQnRuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgZmF2b3JpdGVkID8gXCJSZW1vdmUgXCIgKyBuYW1lICsgXCIgZnJvbSBmYXZvcml0ZXNcIiA6IFwiQWRkIFwiICsgbmFtZSArIFwiIHRvIGZhdm9yaXRlc1wiKTtcbiAgICBzdGFyQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRvZ2dsZUZhdm9yaXRlKHN0YXRlLm1vZGUsIG5hbWUpO1xuICAgICAgcmVuZGVyTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgdmFyIG5hbWVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgIG5hbWVCdG4udHlwZSA9IFwiYnV0dG9uXCI7XG4gICAgbmFtZUJ0bi5jbGFzc05hbWUgPSBcImNwYS1saXN0LWl0ZW1cIjtcbiAgICBuYW1lQnRuLnRleHRDb250ZW50ID0gbmFtZTtcbiAgICBuYW1lQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7IHNob3dEZXRhaWwobmFtZSk7IH0pO1xuXG4gICAgbGkuYXBwZW5kQ2hpbGQoc3RhckJ0bik7XG4gICAgbGkuYXBwZW5kQ2hpbGQobmFtZUJ0bik7XG4gICAgbGlzdEVsLmFwcGVuZENoaWxkKGxpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckNvbWluZ1Nvb25Pckxpc3QoKSB7XG4gICAgdmFyIGNvbWluZ1Nvb25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3BhLWNvbWluZy1zb29uXCIpO1xuICAgIHZhciBwaWNrZXJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3BhLXBpY2tlclwiKTtcbiAgICB2YXIgZGV0YWlsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS1kZXRhaWxcIik7XG4gICAgdmFyIGlzRW1wdHkgPSAhIShzdGF0ZS5kYXRhICYmIHN0YXRlLmRhdGEucmVjb3JkX2NvdW50ID09PSAwKTtcblxuICAgIGNvbWluZ1Nvb25FbC5oaWRkZW4gPSAhaXNFbXB0eTtcbiAgICBwaWNrZXJFbC5oaWRkZW4gPSBpc0VtcHR5O1xuICAgIGlmIChpc0VtcHR5KSBkZXRhaWxFbC5oaWRkZW4gPSB0cnVlO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcGEtdXBkYXRlZFwiKS50ZXh0Q29udGVudCA9IGZvcm1hdFVwZGF0ZWQoc3RhdGUuZGF0YSAmJiBzdGF0ZS5kYXRhLmdlbmVyYXRlZF9hdCk7XG5cbiAgICBpZiAoIWlzRW1wdHkpIHJlbmRlckxpc3QoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckxpc3QoKSB7XG4gICAgdmFyIGxpc3RFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3BhLWxpc3RcIik7XG4gICAgbGlzdEVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgaWYgKCFzdGF0ZS5kYXRhKSByZXR1cm47XG5cbiAgICB2YXIgc291cmNlID0gc3RhdGUubW9kZSA9PT0gXCJjYWJpbnNcIiA/IHN0YXRlLmRhdGEuY2FiaW5zIDogc3RhdGUuZGF0YS5ncm91cHM7XG4gICAgdmFyIG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKS5zb3J0KCk7XG4gICAgdmFyIHEgPSBzdGF0ZS5zZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHEpIG5hbWVzID0gbmFtZXMuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihxKSAhPT0gLTE7IH0pO1xuXG4gICAgaWYgKCFuYW1lcy5sZW5ndGgpIHtcbiAgICAgIHZhciBlbXB0eSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICAgIGVtcHR5LmNsYXNzTmFtZSA9IFwiY3BhLWVtcHR5XCI7XG4gICAgICBlbXB0eS50ZXh0Q29udGVudCA9IFwiTm8gbWF0Y2hlcy5cIjtcbiAgICAgIGxpc3RFbC5hcHBlbmRDaGlsZChlbXB0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmYXZTZXQgPSBnZXRGYXZvcml0ZXMoKVtzdGF0ZS5tb2RlXTtcbiAgICAgIHZhciBmYXZvcml0ZU5hbWVzID0gbmFtZXMuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBmYXZTZXQuaW5kZXhPZihuKSAhPT0gLTE7IH0pO1xuICAgICAgdmFyIG90aGVyTmFtZXMgPSBuYW1lcy5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIGZhdlNldC5pbmRleE9mKG4pID09PSAtMTsgfSk7XG5cbiAgICAgIGlmIChmYXZvcml0ZU5hbWVzLmxlbmd0aCkge1xuICAgICAgICBhcHBlbmRTZWN0aW9uTGFiZWwobGlzdEVsLCBcIkZhdm9yaXRlc1wiKTtcbiAgICAgICAgZmF2b3JpdGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7IGFwcGVuZExpc3RSb3cobGlzdEVsLCBuYW1lKTsgfSk7XG4gICAgICAgIGlmIChvdGhlck5hbWVzLmxlbmd0aCkgYXBwZW5kU2VjdGlvbkxhYmVsKGxpc3RFbCwgXCJBbGxcIik7XG4gICAgICB9XG4gICAgICBvdGhlck5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsgYXBwZW5kTGlzdFJvdyhsaXN0RWwsIG5hbWUpOyB9KTtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS11cGRhdGVkXCIpLnRleHRDb250ZW50ID0gZm9ybWF0VXBkYXRlZChzdGF0ZS5kYXRhLmdlbmVyYXRlZF9hdCk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93RGV0YWlsKG5hbWUpIHtcbiAgICBzdGF0ZS5jdXJyZW50TmFtZSA9IG5hbWU7XG4gICAgdmFyIHNvdXJjZSA9IHN0YXRlLm1vZGUgPT09IFwiY2FiaW5zXCIgPyBzdGF0ZS5kYXRhLmNhYmlucyA6IHN0YXRlLmRhdGEuZ3JvdXBzO1xuICAgIHZhciBlbnRyaWVzID0gc291cmNlW25hbWVdIHx8IFtdO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcGEtZGV0YWlsLXRpdGxlXCIpLnRleHRDb250ZW50ID0gbmFtZTtcbiAgICBzeW5jRXh0cmFUb2dnbGVVSSgpO1xuICAgIHZhciBjb250ZW50RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS1kZXRhaWwtY29udGVudFwiKTtcbiAgICBjb250ZW50RWwuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgIHZhciBieURheSA9IHt9O1xuICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgKGJ5RGF5W2UuZGF5XSA9IGJ5RGF5W2UuZGF5XSB8fCBbXSkucHVzaChlKTtcbiAgICB9KTtcblxuICAgIHZhciB0b2RheU5hbWUgPSBXRUVLREFZX05BTUVTW25ldyBEYXRlKCkuZ2V0RGF5KCldO1xuICAgIHZhciBkZWZhdWx0RXhwYW5kRGF5ID0gYnlEYXlbdG9kYXlOYW1lXSA/IHRvZGF5TmFtZSA6IG51bGw7XG4gICAgaWYgKCFkZWZhdWx0RXhwYW5kRGF5KSB7XG4gICAgICBkZWZhdWx0RXhwYW5kRGF5ID0gREFZX09SREVSLmZpbHRlcihmdW5jdGlvbiAoZCkgeyByZXR1cm4gYnlEYXlbZF07IH0pWzBdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGFueVJlbmRlcmVkID0gZmFsc2U7XG4gICAgREFZX09SREVSLmZvckVhY2goZnVuY3Rpb24gKGRheSkge1xuICAgICAgaWYgKCFieURheVtkYXldKSByZXR1cm47XG4gICAgICBhbnlSZW5kZXJlZCA9IHRydWU7XG4gICAgICB2YXIgaXNFeHBhbmRlZCA9IGRheSA9PT0gZGVmYXVsdEV4cGFuZERheTtcblxuICAgICAgdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY2FyZC5jbGFzc05hbWUgPSBcImNwYS1kYXktY2FyZFwiO1xuXG4gICAgICB2YXIgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgIGhlYWRlci50eXBlID0gXCJidXR0b25cIjtcbiAgICAgIGhlYWRlci5jbGFzc05hbWUgPSBcImNwYS1kYXktaGVhZGVyXCIgKyAoZGF5ID09PSB0b2RheU5hbWUgPyBcIiBpcy10b2RheVwiIDogXCJcIik7XG4gICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBpc0V4cGFuZGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpO1xuXG4gICAgICB2YXIgbmFtZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIG5hbWVTcGFuLmNsYXNzTmFtZSA9IFwiY3BhLWRheS1uYW1lXCI7XG4gICAgICBuYW1lU3Bhbi50ZXh0Q29udGVudCA9IGRheTtcblxuICAgICAgdmFyIGNvdW50U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgY291bnRTcGFuLmNsYXNzTmFtZSA9IFwiY3BhLWRheS1jb3VudFwiO1xuICAgICAgY291bnRTcGFuLnRleHRDb250ZW50ID0gYnlEYXlbZGF5XS5sZW5ndGggKyAoYnlEYXlbZGF5XS5sZW5ndGggPT09IDEgPyBcIiBhY3Rpdml0eVwiIDogXCIgYWN0aXZpdGllc1wiKTtcblxuICAgICAgdmFyIGNoZXZyb25TcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBjaGV2cm9uU3Bhbi5jbGFzc05hbWUgPSBcImNwYS1kYXktY2hldnJvblwiO1xuICAgICAgY2hldnJvblNwYW4uaW5uZXJIVE1MID0gQ0hFVlJPTl9JQ09OO1xuXG4gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQobmFtZVNwYW4pO1xuICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNvdW50U3Bhbik7XG4gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoY2hldnJvblNwYW4pO1xuXG4gICAgICB2YXIgdWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XG4gICAgICB1bC5jbGFzc05hbWUgPSBcImNwYS1lbnRyeS1saXN0IGNwYS1kYXktYm9keVwiO1xuICAgICAgdWwuaGlkZGVuID0gIWlzRXhwYW5kZWQ7XG5cbiAgICAgIGJ5RGF5W2RheV0uZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgZXh0cmEgPSBzdGF0ZS5tb2RlID09PSBcImNhYmluc1wiID8gZS5ncm91cF9uYW1lIDogZS5ob3VzaW5nO1xuICAgICAgICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG5cbiAgICAgICAgdmFyIHRpbWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIHRpbWVTcGFuLmNsYXNzTmFtZSA9IFwiY3BhLXRpbWVcIjtcbiAgICAgICAgdGltZVNwYW4udGV4dENvbnRlbnQgPSBlLnRpbWVfc2xvdCB8fCBcIlwiO1xuXG4gICAgICAgIHZhciBhY3Rpdml0eVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgICAgYWN0aXZpdHlTcGFuLmNsYXNzTmFtZSA9IFwiY3BhLWFjdGl2aXR5XCI7XG4gICAgICAgIGFjdGl2aXR5U3Bhbi50ZXh0Q29udGVudCA9IGUuYWN0aXZpdHkgfHwgXCJcIjtcblxuICAgICAgICB2YXIgbmFtZVNwYW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIG5hbWVTcGFuMi5jbGFzc05hbWUgPSBcImNwYS1uYW1lXCI7XG4gICAgICAgIHZhciBuYW1lTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICBuYW1lTGluZS50ZXh0Q29udGVudCA9IGUubmFtZTtcbiAgICAgICAgbmFtZVNwYW4yLmFwcGVuZENoaWxkKG5hbWVMaW5lKTtcbiAgICAgICAgaWYgKGV4dHJhICYmIHN0YXRlLnNob3dFeHRyYSkge1xuICAgICAgICAgIHZhciBleHRyYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgICAgICBleHRyYUxpbmUuY2xhc3NOYW1lID0gXCJjcGEtbmFtZS1leHRyYVwiO1xuICAgICAgICAgIGV4dHJhTGluZS50ZXh0Q29udGVudCA9IGV4dHJhO1xuICAgICAgICAgIG5hbWVTcGFuMi5hcHBlbmRDaGlsZChleHRyYUxpbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGkuYXBwZW5kQ2hpbGQodGltZVNwYW4pO1xuICAgICAgICBsaS5hcHBlbmRDaGlsZChhY3Rpdml0eVNwYW4pO1xuICAgICAgICBsaS5hcHBlbmRDaGlsZChuYW1lU3BhbjIpO1xuICAgICAgICB1bC5hcHBlbmRDaGlsZChsaSk7XG4gICAgICB9KTtcblxuICAgICAgaGVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBleHBhbmRlZCA9IGhlYWRlci5nZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIpID09PSBcInRydWVcIjtcbiAgICAgICAgaGVhZGVyLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgZXhwYW5kZWQgPyBcImZhbHNlXCIgOiBcInRydWVcIik7XG4gICAgICAgIHVsLmhpZGRlbiA9IGV4cGFuZGVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoaGVhZGVyKTtcbiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQodWwpO1xuICAgICAgY29udGVudEVsLmFwcGVuZENoaWxkKGNhcmQpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFhbnlSZW5kZXJlZCkge1xuICAgICAgdmFyIG5vbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICAgIG5vbmUudGV4dENvbnRlbnQgPSBcIk5vIGFjdGl2aXRpZXMgZm91bmQgZm9yIHRoaXMgXCIgKyAoc3RhdGUubW9kZSA9PT0gXCJjYWJpbnNcIiA/IFwiY2FiaW5cIiA6IFwiZ3JvdXBcIikgKyBcIi5cIjtcbiAgICAgIGNvbnRlbnRFbC5hcHBlbmRDaGlsZChub25lKTtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS1waWNrZXJcIikuaGlkZGVuID0gdHJ1ZTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS1kZXRhaWxcIikuaGlkZGVuID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB3aXJlQ29udHJvbHMoKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNwYS10YWJcIiksIGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgIHRhYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY3BhLXRhYlwiKSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgICAgIH0pO1xuICAgICAgICB0YWIuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IHRhYi5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vZGVcIik7XG4gICAgICAgIHN0YXRlLnNlYXJjaCA9IFwiXCI7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3BhLXNlYXJjaFwiKS52YWx1ZSA9IFwiXCI7XG4gICAgICAgIHN5bmNFeHRyYVRvZ2dsZVVJKCk7XG4gICAgICAgIHJlbmRlckxpc3QoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcGEtc2VhcmNoXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgc3RhdGUuc2VhcmNoID0gZS50YXJnZXQudmFsdWU7XG4gICAgICByZW5kZXJMaXN0KCk7XG4gICAgfSk7XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS1iYWNrXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS1kZXRhaWxcIikuaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3BhLXBpY2tlclwiKS5oaWRkZW4gPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5jcGEtZXh0cmEtdG9nZ2xlXCIpLCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgIGNiLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHsgc2V0U2hvd0V4dHJhKGUudGFyZ2V0LmNoZWNrZWQpOyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0gUGFzc2NvZGUgZ2F0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBmdW5jdGlvbiBzaGEyNTZIZXgodGV4dCkge1xuICAgIHZhciBlbmMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodGV4dCk7XG4gICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLCBlbmMpLnRoZW4oZnVuY3Rpb24gKGhhc2hCdWZmZXIpIHtcbiAgICAgIHZhciBieXRlcyA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xuICAgICAgcmV0dXJuIGJ5dGVzLm1hcChmdW5jdGlvbiAoYikgeyByZXR1cm4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpOyB9KS5qb2luKFwiXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYm9vdFdpZGdldCgpIHtcbiAgICBidWlsZFNrZWxldG9uKHJvb3QpO1xuICAgIHdpcmVDb250cm9scygpO1xuICAgIHN5bmNFeHRyYVRvZ2dsZVVJKCk7XG4gICAgbG9hZERhdGEodHJ1ZSk7XG4gICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyBsb2FkRGF0YShmYWxzZSk7IH0sIFJFRlJFU0hfTVMpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvd0dhdGUoKSB7XG4gICAgcm9vdC5pbm5lckhUTUwgPVxuICAgICAgJzxkaXYgaWQ9XCJjcGEtZ2F0ZS1hcHBcIj4nICtcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJjcGEtZ2F0ZS1jYXJkXCI+JyArXG4gICAgICAgICAgJzxoMT5Db2FzdCBQYWlkIEFjdGl2aXRpZXM8L2gxPicgK1xuICAgICAgICAgICc8cCBjbGFzcz1cImNwYS1nYXRlLXN1YlwiPkVudGVyIHBhc3Njb2RlIHRvIGFjY2VzcyB0aGlzIHNpdGU8L3A+JyArXG4gICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiY3BhLWdhdGUtaW5wdXRcIiBtYXhsZW5ndGg9XCI1XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NhcGl0YWxpemU9XCJjaGFyYWN0ZXJzXCIgcGxhY2Vob2xkZXI9XCJDT0RFXCI+JyArXG4gICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiY3BhLWdhdGUtc3VibWl0XCI+VW5sb2NrPC9idXR0b24+JyArXG4gICAgICAgICAgJzxkaXYgaWQ9XCJjcGEtZ2F0ZS1lcnJvci1tc2dcIiBoaWRkZW4+SW5jb3JyZWN0IGNvZGUuIFBsZWFzZSB0cnkgYWdhaW4uPC9kaXY+JyArXG4gICAgICAgICc8L2Rpdj4nICtcbiAgICAgICc8L2Rpdj4nO1xuXG4gICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcGEtZ2F0ZS1pbnB1dFwiKTtcbiAgICB2YXIgZXJyb3JNc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNwYS1nYXRlLWVycm9yLW1zZ1wiKTtcblxuICAgIGZ1bmN0aW9uIHNob3dFcnJvcigpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoXCJjcGEtZ2F0ZS1lcnJvclwiKTtcbiAgICAgIGVycm9yTXNnLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJjcGEtZ2F0ZS1lcnJvclwiKTtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgfSwgMzUwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cnlVbmxvY2soKSB7XG4gICAgICB2YXIgY29kZSA9IGlucHV0LnZhbHVlLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgaWYgKGNvZGUubGVuZ3RoICE9PSA1KSB7IHNob3dFcnJvcigpOyByZXR1cm47IH1cbiAgICAgIHNoYTI1NkhleChjb2RlKS50aGVuKGZ1bmN0aW9uIChoYXNoKSB7XG4gICAgICAgIGlmIChHQVRFX0hBU0hFUy5pbmRleE9mKGhhc2gpICE9PSAtMSkge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKEdBVEVfVU5MT0NLX0tFWSwgXCIxXCIpO1xuICAgICAgICAgIGJvb3RXaWRnZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG93RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGZ1bmN0aW9uICgpIHsgaW5wdXQudmFsdWUgPSBpbnB1dC52YWx1ZS50b1VwcGVyQ2FzZSgpOyB9KTtcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZSkgeyBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgdHJ5VW5sb2NrKCk7IH0pO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3BhLWdhdGUtc3VibWl0XCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0cnlVbmxvY2spO1xuICAgIGlucHV0LmZvY3VzKCk7XG4gIH1cblxuICAvLyAtLS0tIEluaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcGEtcm9vdFwiKTtcbiAgaWYgKCFyb290KSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNvYXN0IFBhaWQgQWN0aXZpdGllcyB2MjogI2NwYS1yb290IG1vdW50IHBvaW50IG5vdCBmb3VuZCAtIHN0dWIgbm90IGluc3RhbGxlZCBjb3JyZWN0bHkuXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oR0FURV9VTkxPQ0tfS0VZKSA9PT0gXCIxXCIpIHtcbiAgICBib290V2lkZ2V0KCk7XG4gIH0gZWxzZSB7XG4gICAgc2hvd0dhdGUoKTtcbiAgfVxufSkoKTtcbiJ9