{"data":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InB0LUJSIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIj4KPHRpdGxlPkZGIERpYWdub3N0aWMg4oCUIE1hcmNlbG8gZGUgTGFyYTwvdGl0bGU+CjxzdHlsZT4KICBAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDMwMDs0MDA7NTAwOzYwMDs3MDA7ODAwOzkwMCZkaXNwbGF5PXN3YXAnKTsKCiAgOnJvb3QgewogICAgLS1wcmltYXJ5OiAjM0I4MkY2OwogICAgLS1wcmltYXJ5LWxpZ2h0OiAjNjBBNUZBOwogICAgLS1hY2NlbnQ6ICM4QjVDRjY7CiAgICAtLWFjY2VudC1saWdodDogI0E3OEJGQTsKICAgIC0tZGFyazogIzBGMTcyQTsKICAgIC0tZGFyay13YXJtOiAjMUUyOTNCOwogICAgLS1jcmVhbTogI0Y4RkFGQzsKICAgIC0tY3JlYW0tZGFyazogI0UyRThGMDsKICAgIC0tdGV4dDogIzFFMjkzQjsKICAgIC0tdGV4dC1saWdodDogIzY0NzQ4QjsKICAgIC0tdGV4dC1tdXRlZDogIzk0QTNCODsKICAgIC0td2hpdGU6ICNGRkZGRkY7CiAgICAtLWdyZWVuOiAjMDU5NjY5OwogICAgLS1vcmFuZ2U6ICNEOTc3MDY7CiAgICAtLXllbGxvdzogI0VBQjMwODsKICAgIC0tcmVkOiAjREMyNjI2OwogIH0KCiAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQoKICBib2R5IHsKICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kYXJrKTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgbWluLWhlaWdodDogMTAwZHZoOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDE2cHg7CiAgfQoKICAvKiDilIDilIDilIAgUGhvbmUgQ29udGFpbmVyIOKUgOKUgOKUgCAqLwogIC5waG9uZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogNDIwcHg7CiAgICBoZWlnaHQ6IDkwdmg7CiAgICBoZWlnaHQ6IDkwZHZoOwogICAgbWF4LWhlaWdodDogODYwcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jcmVhbSk7CiAgICBib3JkZXItcmFkaXVzOiA0MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYm94LXNoYWRvdzoKICAgICAgMCAwIDAgMnB4IHJnYmEoNTksMTMwLDI0NiwwLjE1KSwKICAgICAgMCAyNXB4IDgwcHggcmdiYSgwLDAsMCwwLjUpLAogICAgICAwIDAgMTIwcHggcmdiYSgxMzksOTIsMjQ2LDAuMDgpOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgICBib2R5IHsgcGFkZGluZzogMDsgfQogICAgLnBob25lIHsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICBoZWlnaHQ6IDEwMGR2aDsKICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgIH0KICB9CgogIC8qIOKUgOKUgOKUgCBIZWFkZXIg4pSA4pSA4pSAICovCiAgLmhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kYXJrLXdhcm0pOwogICAgcGFkZGluZzogNTJweCAyMHB4IDE2cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgZmxleC1zaHJpbms6IDA7CiAgfQoKICAuaGVhZGVyLWluZm8gewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmhlYWRlci1pbmZvIGgxIHsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBjb2xvcjogdmFyKC0td2hpdGUpOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQoKICAuaGVhZGVyLWluZm8gc3BhbiB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjUpOwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICB9CgogIC8qIOKUgOKUgOKUgCBDaGF0IEFyZWEg4pSA4pSA4pSAICovCiAgLmNoYXQgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiAxNnB4IDE0cHggOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDZweDsKICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogIH0KCiAgLmNoYXQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDNweDsgfQogIC5jaGF0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xMik7IGJvcmRlci1yYWRpdXM6IDNweDsgfQoKICAvKiDilIDilIDilIAgQnViYmxlcyDilIDilIDilIAgKi8KICAuYnViYmxlIHsKICAgIG1heC13aWR0aDogODUlOwogICAgcGFkZGluZzogMTBweCAxNHB4OwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjU1OwogICAgYW5pbWF0aW9uOiBidWJibGVJbiAwLjNzIGN1YmljLWJlemllcigwLjM0LCAxLjU2LCAwLjY0LCAxKTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICB9CgogIEBrZXlmcmFtZXMgYnViYmxlSW4gewogICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMnB4KSBzY2FsZSgwLjk1KTsgfQogICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7IH0KICB9CgogIC5idWJibGUuYm90IHsKICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSk7CiAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLDAsMCwwLjA2KTsKICB9CgogIC5idWJibGUudXNlciB7CiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWRhcmstd2FybSk7CiAgICBjb2xvcjogdmFyKC0td2hpdGUpOwogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDsKICB9CgogIC5idWJibGUgc3Ryb25nIHsKICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5KTsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuYnViYmxlLmJvdCBzdHJvbmcgeyBjb2xvcjogdmFyKC0tcHJpbWFyeSk7IH0KICAuYnViYmxlLnVzZXIgc3Ryb25nIHsgY29sb3I6IHZhcigtLXByaW1hcnktbGlnaHQpOyB9CgogIC5idWJibGUgLmRpbSB7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7CiAgICBmb250LXNpemU6IDEyLjVweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgfQoKICAuYnViYmxlLnVzZXIgLmRpbSB7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjU1KTsKICB9CgogIC8qIOKUgOKUgOKUgCBUeXBpbmcgSW5kaWNhdG9yIOKUgOKUgOKUgCAqLwogIC50eXBpbmcgewogICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdoaXRlKTsKICAgIHBhZGRpbmc6IDEycHggMThweDsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA1cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNik7CiAgfQoKICAudHlwaW5nIHNwYW4gewogICAgd2lkdGg6IDdweDsKICAgIGhlaWdodDogN3B4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tdGV4dC1tdXRlZCk7CiAgICBhbmltYXRpb246IHR5cGluZ0RvdCAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogIH0KCiAgLnR5cGluZyBzcGFuOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTogMC4yczsgfQogIC50eXBpbmcgc3BhbjpudGgtY2hpbGQoMykgeyBhbmltYXRpb24tZGVsYXk6IDAuNHM7IH0KCiAgQGtleWZyYW1lcyB0eXBpbmdEb3QgewogICAgMCUsIDYwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgb3BhY2l0eTogMC40OyB9CiAgICAzMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7IG9wYWNpdHk6IDE7IH0KICB9CgogIC8qIOKUgOKUgOKUgCBTZWN0aW9uIERpdmlkZXIg4pSA4pSA4pSAICovCiAgLnNlY3Rpb24tZGl2aWRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxNHB4IDAgNnB4OwogICAgYW5pbWF0aW9uOiBidWJibGVJbiAwLjNzIGVhc2U7CiAgfQoKICAuc2VjdGlvbi1kaXZpZGVyIC5waWxsIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGJhY2tncm91bmQ6IHZhcigtLWRhcmstd2FybSk7CiAgICBjb2xvcjogdmFyKC0td2hpdGUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgcGFkZGluZzogNXB4IDE2cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMDBweDsKICB9CgogIC8qIOKUgOKUgOKUgCBJbnB1dCBBcmVhIOKUgOKUgOKUgCAqLwogIC5pbnB1dC1hcmVhIHsKICAgIHBhZGRpbmc6IDEwcHggMTRweCAyOHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tY3JlYW0pOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjA1KTsKICB9CgogIC8qIENvbnRleHQgYnV0dG9ucyAqLwogIC5jb250ZXh0LWJ1dHRvbnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICB9CgogIC5jdHgtYnRuIHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogMTRweCAxNnB4OwogICAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1jcmVhbS1kYXJrKTsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICB9CgogIC5jdHgtYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LDEzMCwyNDYsMC4wMyk7CiAgfQoKICAuY3R4LWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICB9CgogIC5jdHgtYnRuIC5lbW9qaSB7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmbGV4LXNocmluazogMDsKICB9CgogIC8qIFNjYWxlIHNsaWRlciAqLwogIC5zY2FsZS1pbnB1dCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKICB9CgogIC5zY2FsZS1sYWJlbHMgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsKICAgIHBhZGRpbmc6IDAgMnB4OwogIH0KCiAgLnNjYWxlLWxhYmVscyBzcGFuIHsKICAgIG1heC13aWR0aDogNDIlOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICB9CgogIC5zY2FsZS10cmFjayB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nOiA4cHggMDsKICB9CgogIC5zY2FsZS10cmFjayBpbnB1dFt0eXBlPSJyYW5nZSJdIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LAogICAgICB2YXIoLS1yZWQpIDAlLAogICAgICB2YXIoLS15ZWxsb3cpIDQ1JSwKICAgICAgdmFyKC0tb3JhbmdlKSA3MCUsCiAgICAgIHZhcigtLWdyZWVuKSAxMDAlCiAgICApOwogICAgb3V0bGluZTogbm9uZTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5zY2FsZS10cmFjayBpbnB1dFt0eXBlPSJyYW5nZSJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGJhY2tncm91bmQ6IHZhcigtLXdoaXRlKTsKICAgIGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWRhcmstd2FybSk7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjE4KTsKICAgIGN1cnNvcjogZ3JhYjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB9CgogIC5zY2FsZS10cmFjayBpbnB1dFt0eXBlPSJyYW5nZSJdOjotbW96LXJhbmdlLXRodW1iIHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAzMnB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogdmFyKC0td2hpdGUpOwogICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tZGFyay13YXJtKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsMCwwLDAuMTgpOwogICAgY3Vyc29yOiBncmFiOwogIH0KCiAgLnNjYWxlLXZhbHVlIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMzZweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBjb2xvcjogdmFyKC0tZGFyay13YXJtKTsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07CiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzOwogIH0KCiAgLnNjYWxlLXNlbmQgewogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiAxNHB4OwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogMTRweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWRhcmstd2FybSk7CiAgICBjb2xvcjogdmFyKC0td2hpdGUpOwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBmb250LXNpemU6IDE1cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgfQoKICAuc2NhbGUtc2VuZDpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnkpOyB9CiAgLnNjYWxlLXNlbmQ6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsgfQoKICAvKiBGaWVsZCBpbnB1dCAqLwogIC5maWVsZC1pbnB1dC13cmFwIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQoKICAuZmllbGQtaW5wdXQtd3JhcCBpbnB1dCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1jcmVhbS1kYXJrKTsKICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBoZWlnaHQ6IDQ0cHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnM7CiAgfQoKICAuZmllbGQtaW5wdXQtd3JhcCBpbnB1dDpmb2N1cyB7IGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeSk7IH0KICAuZmllbGQtaW5wdXQtd3JhcCBpbnB1dDo6cGxhY2Vob2xkZXIgeyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH0KCiAgLmZpZWxkLWVycm9yIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1yZWQpOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgcGFkZGluZy1sZWZ0OiAxNnB4OwogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIFRleHQgaW5wdXQgKi8KICAudGV4dC1pbnB1dC13cmFwIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICB9CgogIC50ZXh0LWlucHV0LXdyYXAgdGV4dGFyZWEgewogICAgZmxleDogMTsKICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0tY3JlYW0tZGFyayk7CiAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0td2hpdGUpOwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICByZXNpemU6IG5vbmU7CiAgICBvdXRsaW5lOiBub25lOwogICAgbWluLWhlaWdodDogNDRweDsKICAgIG1heC1oZWlnaHQ6IDEwMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzOwogIH0KCiAgLnRleHQtaW5wdXQtd3JhcCB0ZXh0YXJlYTpmb2N1cyB7IGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeSk7IH0KICAudGV4dC1pbnB1dC13cmFwIHRleHRhcmVhOjpwbGFjZWhvbGRlciB7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgfQoKICAudGV4dC1zZW5kLWJ0biwgLmZpZWxkLXNlbmQtYnRuIHsKICAgIHdpZHRoOiA0NHB4OwogICAgaGVpZ2h0OiA0NHB4OwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tZGFyay13YXJtKTsKICAgIGNvbG9yOiB2YXIoLS13aGl0ZSk7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmbGV4LXNocmluazogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzOwogIH0KCiAgLnRleHQtc2VuZC1idG46aG92ZXIsIC5maWVsZC1zZW5kLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnkpOyB9CgogIC8qIENUQSBidXR0b25zICovCiAgLmN0YS1idXR0b25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgfQoKICAuY3RhLWJ0biB7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDE1cHggMTZweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICB9CgogIC5jdGEtYnRuOmFjdGl2ZSB7IHRyYW5zZm9ybTogc2NhbGUoMC45OCk7IH0KCiAgLmN0YS1idG4ucHJpbWFyeSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5KTsKICAgIGNvbG9yOiB2YXIoLS13aGl0ZSk7CiAgfQogIC5jdGEtYnRuLnByaW1hcnk6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWxpZ2h0KTsgfQoKICAuY3RhLWJ0bi5zZWNvbmRhcnkgewogICAgYmFja2dyb3VuZDogdmFyKC0td2hpdGUpOwogICAgY29sb3I6IHZhcigtLWRhcmstd2FybSk7CiAgICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWNyZWFtLWRhcmspOwogIH0KICAuY3RhLWJ0bi5zZWNvbmRhcnk6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7IH0KCiAgLyog4pSA4pSA4pSAIFJlc3VsdHMgRGFzaGJvYXJkIOKUgOKUgOKUgCAqLwogIC5yZXN1bHQtY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSk7CiAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgcGFkZGluZzogMjBweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBhbmltYXRpb246IGJ1YmJsZUluIDAuNHMgZWFzZTsKICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICBtYXgtd2lkdGg6IDkyJTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLDAsMCwwLjA2KTsKICB9CgogIC5yZXN1bHQtY2FyZCBoMyB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogIH0KCiAgLnNjb3JlLWJpZyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxNnB4IDA7CiAgfQoKICAuc2NvcmUtYmlnIC5udW1iZXIgewogICAgZm9udC1zaXplOiA1NnB4OwogICAgZm9udC13ZWlnaHQ6IDkwMDsKICAgIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgfQoKICAuc2NvcmUtYmlnIC5sYWJlbCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7CiAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogIH0KCiAgLnNjb3JlLWJpZyAuYmFkZ2UgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogNHB4IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMDBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICB9CgogIC5kaW1lbnNpb24tYmFycyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTRweDsKICB9CgogIC5kaW0tYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA1cHg7CiAgfQoKICAuZGltLWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICB9CgogIC5kaW0tYmFyLWhlYWRlciAuZGltLW5hbWUgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICB9CgogIC5kaW0tYmFyLWhlYWRlciAuZGltLXNjb3JlIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBjb2xvcjogdmFyKC0tZGFyay13YXJtKTsKICB9CgogIC5kaW0tdHJhY2sgewogICAgaGVpZ2h0OiA4cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jcmVhbS1kYXJrKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgfQoKICAuZGltLWZpbGwgewogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgdHJhbnNpdGlvbjogd2lkdGggMXMgY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpOwogICAgd2lkdGg6IDA7CiAgfQoKICAvKiDilIDilIDilIAgUHJvZ3Jlc3MgQmFyIOKUgOKUgOKUgCAqLwogIC5wcm9ncmVzcy13cmFwIHsKICAgIHBhZGRpbmc6IDAgMTRweCA2cHg7CiAgICBmbGV4LXNocmluazogMDsKICB9CgogIC5wcm9ncmVzcy1iYXIgewogICAgaGVpZ2h0OiAzcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jcmVhbS1kYXJrKTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgfQoKICAucHJvZ3Jlc3MtZmlsbCB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLXByaW1hcnkpLCB2YXIoLS1hY2NlbnQpKTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZTsKICAgIHdpZHRoOiAwJTsKICB9CgogIC5oaWRkZW4geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjxkaXYgY2xhc3M9InBob25lIj4KICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgPGRpdiBjbGFzcz0iaGVhZGVyLWluZm8iPgogICAgICA8aDE+RlVUVVJFRk9VTkRBVElPTjwvaDE+CiAgICAgIDxzcGFuPk1hcmNlbG8gZGUgTGFyYSDigJQgRGlhZ25vc3RpYzwvc3Bhbj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy13cmFwIj4KICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciI+CiAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWZpbGwiIGlkPSJwcm9ncmVzc0ZpbGwiPjwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9ImNoYXQiIGlkPSJjaGF0Ij48L2Rpdj4KICA8ZGl2IGNsYXNzPSJpbnB1dC1hcmVhIiBpZD0iaW5wdXRBcmVhIj48L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0PgovLyDilIDilIDilIAgU3VwYWJhc2UgQ29uZmlnIOKUgOKUgOKUgApjb25zdCBTVVBBQkFTRV9VUkwgPSAnaHR0cHM6Ly93cWRrdnVrbnhhdWRmdmZvdnhwaC5zdXBhYmFzZS5jbyc7CmNvbnN0IFNVUEFCQVNFX0FQSV9LRVkgPSAnc2JfcHVibGlzaGFibGVfb01rV3E5dEZjYU5PM0ZPY0o1ZWdBZ19Zc0FaZGo5byc7CmNvbnN0IFNVUEFCQVNFX1JFU1QgPSBgJHtTVVBBQkFTRV9VUkx9L3Jlc3QvdjFgOwoKY29uc3QgQ0xJRU5UX1NMVUcgPSAnRlVUVVJFRk9VTkRBVElPTic7CmNvbnN0IFBST0pFQ1RfU0xVRyA9ICcyMDI2MDQwMl9tYXJjZWxvLWRlLWxhcmEnOwoKLy8g4pSA4pSA4pSAIFdoYXRzQXBwIENUQSDilIDilIDilIAKY29uc3QgV0hBVFNBUFBfTlVNQkVSID0gJzU1MTE5NzUzMTUxMTEnOwoKYXN5bmMgZnVuY3Rpb24gc3VwYWJhc2VJbnNlcnQodGFibGUsIGRhdGEsIHJldHVybkRhdGEgPSBmYWxzZSkgewogIGNvbnN0IGhlYWRlcnMgPSB7CiAgICAnYXBpa2V5JzogU1VQQUJBU0VfQVBJX0tFWSwKICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke1NVUEFCQVNFX0FQSV9LRVl9YCwKICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicKICB9OwogIGlmIChyZXR1cm5EYXRhKSBoZWFkZXJzWydQcmVmZXInXSA9ICdyZXR1cm49cmVwcmVzZW50YXRpb24nOwogIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke1NVUEFCQVNFX1JFU1R9LyR7dGFibGV9YCwgewogICAgbWV0aG9kOiAnUE9TVCcsCiAgICBoZWFkZXJzLAogICAgYm9keTogSlNPTi5zdHJpbmdpZnkoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV0pCiAgfSk7CiAgaWYgKCFyZXMub2spIHsKICAgIGNvbnN0IGVyciA9IGF3YWl0IHJlcy50ZXh0KCk7CiAgICB0aHJvdyBuZXcgRXJyb3IoYFN1cGFiYXNlICR7dGFibGV9IGluc2VydCBmYWlsZWQgKCR7cmVzLnN0YXR1c30pOiAke2Vycn1gKTsKICB9CiAgaWYgKHJldHVybkRhdGEpIHsKICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpOwogICAgcmV0dXJuIGpzb25bMF07CiAgfQogIHJldHVybiBudWxsOwp9CgovLyDilIDilIDilIAgUmVnaXN0cmF0aW9uIFN0ZXBzIOKUgOKUgOKUgApjb25zdCBSRUdJU1RSQVRJT04gPSBbCiAgewogICAgaWQ6ICdub21lJywKICAgIG1lc3NhZ2VzOiBbCiAgICAgICdPaSEg8J+Ri1xuXG5Fc3RvdSBzdXBlciBlbXBvbGdhZG8gY29tIG5vc3NvIGVuY29udHJvIG5hIDVhIGZlaXJhLi4uIFBhcmEgbm9zIHByZXBhcmFybW9zLCBnb3N0YXJpYSBkZSB0ZSBwZWRpciA8c3Ryb25nPjUgbWluczwvc3Ryb25nPiBwYXJhIGV1IHRlIGNvbmhlY2VyIG1lbGhvci4uLlxuXG5Kw6EgYWRpYW50byBhbGd1bnMgZG9zIHRlbWFzIGRhIG5vc3NhIGNvbnZlcnNhOiA8c3Ryb25nPk5lZ8OzY2lvLCBJQSBFc3RyYXTDqWdpY2EgZSBQb3NpY2lvbmFtZW50bzwvc3Ryb25nPi4gQm9yYSBuZXNzYT8nLAogICAgICAnQW50ZXMgZGUgY29tZcOnYXIsIHByZWNpc28gdGUgY29uaGVjZXIuXG5cblF1YWwgbyBzZXUgPHN0cm9uZz5ub21lIGNvbXBsZXRvPC9zdHJvbmc+PycKICAgIF0sCiAgICBwbGFjZWhvbGRlcjogJ1NldSBub21lIGNvbXBsZXRvJywKICAgIGlucHV0VHlwZTogJ3RleHQnLAogICAgdmFsaWRhdGU6IHYgPT4gdi50cmltKCkubGVuZ3RoID49IDMgPyBudWxsIDogJ1BvciBmYXZvciwgZGlnaXRlIHNldSBub21lIGNvbXBsZXRvLicKICB9LAogIHsKICAgIGlkOiAnZW1haWwnLAogICAgbWVzc2FnZXM6IFsKICAgICAgJ3tub21lfSwgcHJhemVyISDwn5mMXG5cbkFnb3JhLCBxdWFsIG8gc2V1IDxzdHJvbmc+bWVsaG9yIGUtbWFpbDwvc3Ryb25nPj8nCiAgICBdLAogICAgcGxhY2Vob2xkZXI6ICdzZXVAZW1haWwuY29tJywKICAgIGlucHV0VHlwZTogJ2VtYWlsJywKICAgIHZhbGlkYXRlOiB2ID0+IC9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF0rJC8udGVzdCh2KSA/IG51bGwgOiAnUG9yIGZhdm9yLCBkaWdpdGUgdW0gZS1tYWlsIHbDoWxpZG8uJwogIH0sCiAgewogICAgaWQ6ICd3aGF0c2FwcCcsCiAgICBtZXNzYWdlczogWwogICAgICAnUGVyZmVpdG8uIEUgbyBzZXUgPHN0cm9uZz5XaGF0c0FwcDwvc3Ryb25nPj8gQ29tIERERCwgcG9yIGZhdm9yLicKICAgIF0sCiAgICBwbGFjZWhvbGRlcjogJygxMSkgOTk5OTktOTk5OScsCiAgICBpbnB1dFR5cGU6ICd0ZWwnLAogICAgdmFsaWRhdGU6IHYgPT4gdi5yZXBsYWNlKC9cRC9nLCAnJykubGVuZ3RoID49IDEwID8gbnVsbCA6ICdQb3IgZmF2b3IsIGRpZ2l0ZSB1bSBuw7ptZXJvIHbDoWxpZG8gY29tIERERC4nCiAgfQpdOwoKLy8g4pSA4pSA4pSAIFF1ZXN0aW9ucyDilIDilIDilIAKY29uc3QgUVVFU1RJT05TID0gWwogIC8vIFAwIOKAlCBDb250ZXh0CiAgewogICAgaWQ6ICdjb250ZXh0JywKICAgIHR5cGU6ICdjb250ZXh0JywKICAgIG1lc3NhZ2VzOiBbCiAgICAgICdTw6NvIDxzdHJvbmc+MTIgcGVyZ3VudGFzPC9zdHJvbmc+LiBMZXZhIHVucyA4IG1pbnV0b3MuXG5cbk7Do28gdGVtIHJlc3Bvc3RhIGNlcnRhIG91IGVycmFkYSDigJQgdGVtIHJlc3Bvc3RhIDxzdHJvbmc+aG9uZXN0YTwvc3Ryb25nPi4gUXVhbnRvIG1haXMgcmVhbCwgbWFpcyBvIFJvZHJpZ28gY29uc2VndWUgcHJlcGFyYXIgdW1hIGF1bGEgcmVsZXZhbnRlIHByYSB2b2PDqi4nLAogICAgICAnQW50ZXMgZGUgY29tZcOnYXIsIG1lIGNvbnRhOiBlbSBxdWUgZXN0w6FnaW8gZXN0w6EgbyBzZXUgbmVnw7NjaW8/JwogICAgXSwKICAgIG9wdGlvbnM6IFsKICAgICAgeyBlbW9qaTogJ/CfjLEnLCBsYWJlbDogJ0NvbWXDp2FuZG8gLyB2YWxpZGFuZG8gaWRlaWEnLCB2YWx1ZTogJ3N0YXJ0aW5nJyB9LAogICAgICB7IGVtb2ppOiAn8J+agCcsIGxhYmVsOiAnRW0gY3Jlc2NpbWVudG8gKDEtNSBhbm9zKScsIHZhbHVlOiAnZ3Jvd2luZycgfSwKICAgICAgeyBlbW9qaTogJ/Cfj6InLCBsYWJlbDogJ0VzdGFiZWxlY2lkbyAoNSsgYW5vcyknLCB2YWx1ZTogJ2VzdGFibGlzaGVkJyB9LAogICAgICB7IGVtb2ppOiAn8J+SvCcsIGxhYmVsOiAnUHJvZmlzc2lvbmFsIGxpYmVyYWwgLyBjb25zdWx0b3InLCB2YWx1ZTogJ2ZyZWVsYW5jZXInIH0KICAgIF0KICB9LAoKICAvLyDilIDilIDilIAgTkVHw5NDSU8g4pSA4pSA4pSACiAgewogICAgaWQ6ICdwMScsIGRpbWVuc2lvbjogJ25lZ29jaW8nLCB0eXBlOiAnc2NhbGUnLAogICAgc2VjdGlvbjogeyBlbW9qaTogJ/CfkrAnLCBsYWJlbDogJ05FR8OTQ0lPJywgc3ViOiAnIkVzdHJ1dHVyYSBlIENsYXJlemEiJyB9LAogICAgbWVzc2FnZXM6IFsKICAgICAgJ/CfkrAgPHN0cm9uZz5ORUfDk0NJTyDigJQgUGVyZ3VudGEgMSBkZSAzPC9zdHJvbmc+XG5cblF1w6NvIGNsYXJvIMOpIG8gc2V1IDxzdHJvbmc+bW9kZWxvIGRlIG5lZ8OzY2lvPC9zdHJvbmc+IGhvamU/IFZvY8OqIHNhYmUgZXhhdGFtZW50ZSBxdWVtIMOpIHNldSBjbGllbnRlIGlkZWFsLCBjb21vIGdlcmEgcmVjZWl0YSwgZSBxdWFpcyBzw6NvIHN1YXMgbWFyZ2Vucz9cblxuRGUgMSBhIDEwLCBxdWFsIGEgc3VhIDxzdHJvbmc+Y2xhcmV6YSBzb2JyZSBvIG5lZ8OzY2lvPC9zdHJvbmc+PycKICAgIF0sCiAgICBsb3c6ICdDb25mdXNvLCBzZW0gY2xhcmV6YScsCiAgICBoaWdoOiAnVG90YWxtZW50ZSBjbGFybycKICB9LAogIHsKICAgIGlkOiAncDInLCBkaW1lbnNpb246ICduZWdvY2lvJywgdHlwZTogJ3NjYWxlJywKICAgIG1lc3NhZ2VzOiBbCiAgICAgICfwn5KwIDxzdHJvbmc+TkVHw5NDSU8g4oCUIFBlcmd1bnRhIDIgZGUgMzwvc3Ryb25nPlxuXG5RdWFuZG8gdm9jw6ogb2xoYSBwcm9zIHByw7N4aW1vcyAzIG1lc2VzLCBjb25zZWd1ZSA8c3Ryb25nPnByZXZlciBzdWEgcmVjZWl0YTwvc3Ryb25nPiBjb20gYWxndW1hIHNlZ3VyYW7Dp2Eg4oCUIG91IMOpIHR1ZG8gaW5jZXJ0bywgZGVwZW5kZW5kbyBkbyBxdWUgYXBhcmVjZXI/XG5cbkRlIDEgYSAxMCwgcXVhbCBhIDxzdHJvbmc+cHJldmlzaWJpbGlkYWRlIGRhIHN1YSByZWNlaXRhPC9zdHJvbmc+PycKICAgIF0sCiAgICBsb3c6ICdUb3RhbG1lbnRlIGluY2VydG8nLAogICAgaGlnaDogJ1JlY2VpdGEgcHJldmlzw612ZWwnCiAgfSwKICB7CiAgICBpZDogJ3AzJywgZGltZW5zaW9uOiAnbmVnb2NpbycsIHR5cGU6ICdzY2FsZScsCiAgICBtZXNzYWdlczogWwogICAgICAn8J+SsCA8c3Ryb25nPk5FR8OTQ0lPIOKAlCBQZXJndW50YSAzIGRlIDM8L3N0cm9uZz5cblxuU2V1IG5lZ8OzY2lvIHRlbSA8c3Ryb25nPnByb2Nlc3NvcyBlIHNpc3RlbWFzPC9zdHJvbmc+IGRvY3VtZW50YWRvcyDigJQgb3UgdHVkbyBkZXBlbmRlIGRlIHZvY8OqLCBlc3TDoSBuYSBzdWEgY2FiZcOnYSwgZSBzZSB2b2PDqiBwYXJhciB0dWRvIHBhcmE/XG5cbkRlIDEgYSAxMCwgcXXDo28gPHN0cm9uZz5zaXN0ZW1hdGl6YWRvPC9zdHJvbmc+IMOpIG8gc2V1IG5lZ8OzY2lvPycKICAgIF0sCiAgICBsb3c6ICdUdWRvIG5hIG1pbmhhIGNhYmXDp2EnLAogICAgaGlnaDogJ1Byb2Nlc3NvcyBkb2N1bWVudGFkb3MnLAogICAgdHJhbnNpdGlvbjogJ0JvYSwge25vbWV9LiBWb2PDqiBtYXBlb3UgYSBlc3RydXR1cmEgZG8gc2V1IG5lZ8OzY2lvLlxuXG5BZ29yYSB2YW1vcyBvbGhhciBwcmEgY29tbyB2b2PDqiBlc3TDoSB1c2FuZG8gPHN0cm9uZz5JQSBkZSBmb3JtYSBlc3RyYXTDqWdpY2E8L3N0cm9uZz4g4oCUIHBvcnF1ZSBxdWVtIG7Do28gdXNhLCB2YWkgZmljYXIgcHJhIHRyw6FzLiDwn5GHJwogIH0sCgogIC8vIOKUgOKUgOKUgCBJQSBFU1RSQVTDiUdJQ0Eg4pSA4pSA4pSACiAgewogICAgaWQ6ICdwNCcsIGRpbWVuc2lvbjogJ2lhJywgdHlwZTogJ3NjYWxlJywKICAgIHNlY3Rpb246IHsgZW1vamk6ICfwn6SWJywgbGFiZWw6ICdJQSBFU1RSQVTDiUdJQ0EnLCBzdWI6ICciSW50ZWxpZ8OqbmNpYSBBcnRpZmljaWFsIG5vIE5lZ8OzY2lvIicgfSwKICAgIG1lc3NhZ2VzOiBbCiAgICAgICfwn6SWIDxzdHJvbmc+SUEgRVNUUkFUw4lHSUNBIOKAlCBQZXJndW50YSAxIGRlIDM8L3N0cm9uZz5cblxuTm8gc2V1IGRpYSBhIGRpYSBkZSB0cmFiYWxobywgbyBxdWFudG8gdm9jw6ogasOhIHVzYSA8c3Ryb25nPmZlcnJhbWVudGFzIGRlIElBPC9zdHJvbmc+IChDaGF0R1BULCBDbGF1ZGUsIENvcGlsb3QsIGF1dG9tYcOnw7VlcykgcHJhIGdhbmhhciBwcm9kdXRpdmlkYWRlLCBjcmlhciBjb250ZcO6ZG8sIG91IHRvbWFyIGRlY2lzw7Vlcz9cblxuRGUgMSBhIDEwLCBxdWFsIG8gc2V1IDxzdHJvbmc+bsOtdmVsIGRlIHVzbyBkZSBJQTwvc3Ryb25nPiBob2plPycKICAgIF0sCiAgICBsb3c6ICdOw6NvIHVzbyBuYWRhJywKICAgIGhpZ2g6ICdVc28gZGlhcmlhbWVudGUnCiAgfSwKICB7CiAgICBpZDogJ3A1JywgZGltZW5zaW9uOiAnaWEnLCB0eXBlOiAnc2NhbGUnLAogICAgbWVzc2FnZXM6IFsKICAgICAgJ/CfpJYgPHN0cm9uZz5JQSBFU1RSQVTDiUdJQ0Eg4oCUIFBlcmd1bnRhIDIgZGUgMzwvc3Ryb25nPlxuXG5Wb2PDqiB0ZW0gdW1hIDxzdHJvbmc+dmlzw6NvIGNsYXJhPC9zdHJvbmc+IGRlIGNvbW8gYSBJQSBwb2RlIHRyYW5zZm9ybWFyIG8gc2V1IG5lZ8OzY2lvIG5vcyBwcsOzeGltb3MgMTIgbWVzZXM/IFNhYmUgcXVhaXMgcHJvY2Vzc29zIGF1dG9tYXRpemFyLCBvbmRlIGdlcmFyIG1haXMgdmFsb3IsIG9uZGUgY29ydGFyIGN1c3Rvcz9cblxuRGUgMSBhIDEwLCBxdcOjbyBjbGFyYSDDqSBzdWEgPHN0cm9uZz5lc3RyYXTDqWdpYSBkZSBJQTwvc3Ryb25nPj8nCiAgICBdLAogICAgbG93OiAnTmVuaHVtYSB2aXPDo28nLAogICAgaGlnaDogJ0VzdHJhdMOpZ2lhIGRlZmluaWRhJwogIH0sCiAgewogICAgaWQ6ICdwNicsIGRpbWVuc2lvbjogJ2lhJywgdHlwZTogJ3NjYWxlJywKICAgIG1lc3NhZ2VzOiBbCiAgICAgICfwn6SWIDxzdHJvbmc+SUEgRVNUUkFUw4lHSUNBIOKAlCBQZXJndW50YSAzIGRlIDM8L3N0cm9uZz5cblxuQWzDqW0gZGUgdXNhciBJQSBwb250dWFsbWVudGUsIHZvY8OqIGrDoSA8c3Ryb25nPmltcGxlbWVudG91IGFsZ3VtYSBhdXRvbWHDp8OjbyBvdSBmbHV4bzwvc3Ryb25nPiBjb20gSUEgbm8gc2V1IG5lZ8OzY2lvPyBBbGdvIHF1ZSByb2RhIHNlbSB2b2PDqiBwcmVjaXNhciBmYXplciBtYW51YWxtZW50ZSB0b2RhIHZlej9cblxuRGUgMSBhIDEwLCBxdWFsIG8gbsOtdmVsIGRlIDxzdHJvbmc+aW1wbGVtZW50YcOnw6NvIGRlIElBPC9zdHJvbmc+IG5vIHNldSBuZWfDs2Npbz8nCiAgICBdLAogICAgbG93OiAnWmVybyBhdXRvbWHDp8OjbycsCiAgICBoaWdoOiAnRmx1eG9zIGF1dG9tYXRpemFkb3MnLAogICAgdHJhbnNpdGlvbjogJ1BlcmZlaXRvLiBBZ29yYSB2b2PDqiB0ZW0gdW0gcmV0cmF0byBkbyBzZXUgdXNvIGRlIElBLlxuXG5GYWx0YSBhIHBhcnRlIG1haXMgdmlzw612ZWw6IGNvbW8gbyBtZXJjYWRvIHRlIGVueGVyZ2Eg4oCUIHNldSA8c3Ryb25nPnBvc2ljaW9uYW1lbnRvPC9zdHJvbmc+LiDwn5GHJwogIH0sCgogIC8vIOKUgOKUgOKUgCBQT1NJQ0lPTkFNRU5UTyDilIDilIDilIAKICB7CiAgICBpZDogJ3A3JywgZGltZW5zaW9uOiAncG9zaWNpb25hbWVudG8nLCB0eXBlOiAnc2NhbGUnLAogICAgc2VjdGlvbjogeyBlbW9qaTogJ/Cfjq8nLCBsYWJlbDogJ1BPU0lDSU9OQU1FTlRPJywgc3ViOiAnIkNvbW8gbyBtZXJjYWRvIHRlIGVueGVyZ2EiJyB9LAogICAgbWVzc2FnZXM6IFsKICAgICAgJ/Cfjq8gPHN0cm9uZz5QT1NJQ0lPTkFNRU5UTyDigJQgUGVyZ3VudGEgMSBkZSAzPC9zdHJvbmc+XG5cblNlIGFsZ3XDqW0gdGUgcGVyZ3VudGFyIDxzdHJvbmc+Im8gcXVlIHRlIGRpZmVyZW5jaWEgZG9zIGNvbmNvcnJlbnRlcz8iPC9zdHJvbmc+LCB2b2PDqiBjb25zZWd1ZSByZXNwb25kZXIgY29tIGNsYXJlemEgZSBjb25maWFuw6dhIGVtIDMwIHNlZ3VuZG9zIOKAlCBvdSB0cmF2YT9cblxuRGUgMSBhIDEwLCBxdcOjbyBjbGFyYSDDqSBhIHN1YSA8c3Ryb25nPmRpZmVyZW5jaWHDp8Ojbzwvc3Ryb25nPj8nCiAgICBdLAogICAgbG93OiAnTsOjbyBzZWkgbWUgZGlmZXJlbmNpYXInLAogICAgaGlnaDogJ0RpZmVyZW5jaWFsIGNsYXJvJwogIH0sCiAgewogICAgaWQ6ICdwOCcsIGRpbWVuc2lvbjogJ3Bvc2ljaW9uYW1lbnRvJywgdHlwZTogJ3NjYWxlJywKICAgIG1lc3NhZ2VzOiBbCiAgICAgICfwn46vIDxzdHJvbmc+UE9TSUNJT05BTUVOVE8g4oCUIFBlcmd1bnRhIDIgZGUgMzwvc3Ryb25nPlxuXG5RdWFuZG8gdm9jw6ogZmFsYSBubyBzZXUgbWVyY2FkbyDigJQgZW0gZXZlbnRvcywgcmVkZXMgc29jaWFpcywgY29udmVyc2FzIGNvbSBjbGllbnRlcyDigJQgYXMgcGVzc29hcyB0ZSB2ZWVtIGNvbW8gPHN0cm9uZz5yZWZlcsOqbmNpYTwvc3Ryb25nPj8gT3Ugdm9jw6ogc2VudGUgcXVlIGFpbmRhIMOpICJtYWlzIHVtIj9cblxuRGUgMSBhIDEwLCBxdWFsIG8gc2V1IG7DrXZlbCBkZSA8c3Ryb25nPmF1dG9yaWRhZGUgcGVyY2ViaWRhPC9zdHJvbmc+PycKICAgIF0sCiAgICBsb3c6ICdTb3UgaW52aXPDrXZlbCcsCiAgICBoaWdoOiAnU291IHJlZmVyw6puY2lhJwogIH0sCiAgewogICAgaWQ6ICdwOScsIGRpbWVuc2lvbjogJ3Bvc2ljaW9uYW1lbnRvJywgdHlwZTogJ3NjYWxlJywKICAgIG1lc3NhZ2VzOiBbCiAgICAgICfwn46vIDxzdHJvbmc+UE9TSUNJT05BTUVOVE8g4oCUIFBlcmd1bnRhIDMgZGUgMzwvc3Ryb25nPlxuXG5TdWEgPHN0cm9uZz5wcmVzZW7Dp2EgZGlnaXRhbDwvc3Ryb25nPiAoTGlua2VkSW4sIEluc3RhZ3JhbSwgc2l0ZSwgY29udGXDumRvKSByZWZsZXRlIG8gcHJvZmlzc2lvbmFsIHF1ZSB2b2PDqiByZWFsbWVudGUgw6kg4oCUIG91IGVzdMOhIGRlc2F0dWFsaXphZGEsIGluY29uc2lzdGVudGUsIG91IHNpbXBsZXNtZW50ZSBuw6NvIGV4aXN0ZT9cblxuRGUgMSBhIDEwLCBxdcOjbyBmb3J0ZSDDqSBhIHN1YSA8c3Ryb25nPnByZXNlbsOnYSBkaWdpdGFsPC9zdHJvbmc+PycKICAgIF0sCiAgICBsb3c6ICdJbmV4aXN0ZW50ZScsCiAgICBoaWdoOiAnUHJlc2Vuw6dhIGZvcnRlJywKICAgIHRyYW5zaXRpb246ICdRdWFzZSBsw6EsIHtub21lfS4gVm9jw6ogbWFwZW91IG5lZ8OzY2lvLCBJQSBlIHBvc2ljaW9uYW1lbnRvLlxuXG5BZ29yYSwgYSBwZXJndW50YSBmaW5hbDogdHVkbyBpc3NvIGVzdMOhIGdlcmFuZG8gPHN0cm9uZz5yZXN1bHRhZG8gY29uY3JldG88L3N0cm9uZz4/IPCfkYcnCiAgfSwKCiAgLy8g4pSA4pSA4pSAIFJFU1VMVEFETyDilIDilIDilIAKICB7CiAgICBpZDogJ3AxMCcsIGRpbWVuc2lvbjogJ3Jlc3VsdGFkbycsIHR5cGU6ICdzY2FsZScsCiAgICBzZWN0aW9uOiB7IGVtb2ppOiAn8J+PhicsIGxhYmVsOiAnUkVTVUxUQURPJywgc3ViOiAnIlJlc3VsdGFkbyBjb25jcmV0byInIH0sCiAgICBtZXNzYWdlczogWwogICAgICAn8J+PhiA8c3Ryb25nPlJFU1VMVEFETzwvc3Ryb25nPlxuXG5Ob3Mgw7psdGltb3MgMTIgbWVzZXMsIHNldSBuZWfDs2NpbyA8c3Ryb25nPmNyZXNjZXUgZGUgdmVyZGFkZTwvc3Ryb25nPj8gTWFpcyBjbGllbnRlcywgbWFpcyByZWNlaXRhLCBtYWlzIHJlY29uaGVjaW1lbnRvIOKAlCBvdSB2b2PDqiBzZW50ZSBxdWUgdHJhYmFsaGEgbXVpdG8gZSBvIHJlc3VsdGFkbyBuw6NvIGFjb21wYW5oYT9cblxuRGUgMSBhIDEwLCBjb21vIGVzdMOhIG8gPHN0cm9uZz5jcmVzY2ltZW50byByZWFsPC9zdHJvbmc+IGRvIHNldSBuZWfDs2Npbz8nCiAgICBdLAogICAgbG93OiAnRXN0YWduYWRvJywKICAgIGhpZ2g6ICdDcmVzY2ltZW50byByZWFsJwogIH0sCgogIC8vIOKUgOKUgOKUgCBBQkVSVEFTIOKUgOKUgOKUgAogIHsKICAgIGlkOiAncDExJywgdHlwZTogJ3RleHQnLAogICAgbWVzc2FnZXM6IFsKICAgICAgJ0Fnb3JhIGR1YXMgcGVyZ3VudGFzIGFiZXJ0YXMg4oCUIGUgZXNzYXMgc8OjbyBhcyBtYWlzIHZhbGlvc2FzLiDwn5KsXG5cbntub21lfSwgcXVhbCDDqSBvIHNldSA8c3Ryb25nPm1haW9yIGRlc2FmaW88L3N0cm9uZz4gaG9qZSBubyBzZXUgbmVnw7NjaW8/IE8gcXVlIG1haXMgdGUgdHJhdmEgb3UgdGUgZnJ1c3RyYT8nCiAgICBdLAogICAgcGxhY2Vob2xkZXI6ICdNZSBjb250YSBjb20gc3VhcyBwYWxhdnJhcy4uLicKICB9LAogIHsKICAgIGlkOiAncDEyJywgdHlwZTogJ3RleHQnLAogICAgbWVzc2FnZXM6IFsKICAgICAgJ0UgcHJhIGZlY2hhcjogbyBxdWUgdm9jw6ogZXNwZXJhIDxzdHJvbmc+bGV2YXIgZGUgcHLDoXRpY288L3N0cm9uZz4gZGEgYXVsYSBkZSBob2plPyBRdWUgdGlwbyBkZSByZXNwb3N0YSBvdSBkaXJlw6fDo28gZmFyaWEgYSBkaWZlcmVuw6dhIHByYSB2b2PDqiBhZ29yYT8nCiAgICBdLAogICAgcGxhY2Vob2xkZXI6ICdPIHF1ZSBlc3BlcmEgZGEgYXVsYSBkZSBob2plLi4uJwogIH0KXTsKCi8vIOKUgOKUgOKUgCBTdGF0ZSDilIDilIDilIAKbGV0IGN1cnJlbnRTdGVwID0gMDsKbGV0IHJlZ2lzdHJhdGlvblN0ZXAgPSAwOwpsZXQgYW5zd2VycyA9IHt9OwpsZXQgdXNlclByb2ZpbGUgPSB7IG5vbWU6ICcnLCBlbWFpbDogJycsIHdoYXRzYXBwOiAnJywgcHJpbWVpcm9Ob21lOiAnJyB9OwpsZXQgdXNlckNvbnRleHQgPSAnJzsKbGV0IHN0YXJ0VGltZSA9IG51bGw7Cgpjb25zdCBjaGF0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQnKTsKY29uc3QgaW5wdXRBcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0QXJlYScpOwpjb25zdCBwcm9ncmVzc0ZpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3NGaWxsJyk7CgovLyDilIDilIDilIAgSGVscGVycyDilIDilIDilIAKZnVuY3Rpb24gc2xlZXAobXMpIHsgcmV0dXJuIG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCBtcykpOyB9CgpmdW5jdGlvbiBzY3JvbGxUb0JvdHRvbSgpIHsKICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgY2hhdC5zY3JvbGxUb3AgPSBjaGF0LnNjcm9sbEhlaWdodDsKICAgIH0pOwogIH0pOwp9CgpmdW5jdGlvbiBnZXRGaXJzdE5hbWUoKSB7CiAgcmV0dXJuIHVzZXJQcm9maWxlLnByaW1laXJvTm9tZSB8fCAndm9jw6onOwp9CgpmdW5jdGlvbiBwZXJzb25hbGl6ZSh0ZXh0KSB7CiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXHtub21lXH0vZywgZ2V0Rmlyc3ROYW1lKCkpOwp9CgpmdW5jdGlvbiB1cGRhdGVQcm9ncmVzcygpIHsKICBjb25zdCB0b3RhbFN0ZXBzID0gUVVFU1RJT05TLmxlbmd0aCArIFJFR0lTVFJBVElPTi5sZW5ndGg7CiAgY29uc3QgY29tcGxldGVkID0gUkVHSVNUUkFUSU9OLmxlbmd0aCArIGN1cnJlbnRTdGVwOwogIGNvbnN0IHBjdCA9IE1hdGgucm91bmQoKGNvbXBsZXRlZCAvIHRvdGFsU3RlcHMpICogMTAwKTsKICBwcm9ncmVzc0ZpbGwuc3R5bGUud2lkdGggPSBwY3QgKyAnJSc7Cn0KCmZ1bmN0aW9uIGFkZEJ1YmJsZShodG1sLCB0eXBlID0gJ2JvdCcpIHsKICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBkaXYuY2xhc3NOYW1lID0gJ2J1YmJsZSAnICsgdHlwZTsKICBkaXYuaW5uZXJIVE1MID0gcGVyc29uYWxpemUoaHRtbCkucmVwbGFjZSgvXG4vZywgJzxicj4nKTsKICBjaGF0LmFwcGVuZENoaWxkKGRpdik7CiAgc2Nyb2xsVG9Cb3R0b20oKTsKICByZXR1cm4gZGl2Owp9CgpmdW5jdGlvbiBhZGRTZWN0aW9uKGVtb2ppLCBsYWJlbCkgewogIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGRpdi5jbGFzc05hbWUgPSAnc2VjdGlvbi1kaXZpZGVyJzsKICBkaXYuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJwaWxsIj4ke2Vtb2ppfSAke2xhYmVsfTwvc3Bhbj5gOwogIGNoYXQuYXBwZW5kQ2hpbGQoZGl2KTsKICBzY3JvbGxUb0JvdHRvbSgpOwp9CgpmdW5jdGlvbiBzaG93VHlwaW5nKCkgewogIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGRpdi5jbGFzc05hbWUgPSAndHlwaW5nJzsKICBkaXYuaWQgPSAndHlwaW5nSW5kaWNhdG9yJzsKICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPic7CiAgY2hhdC5hcHBlbmRDaGlsZChkaXYpOwogIHNjcm9sbFRvQm90dG9tKCk7Cn0KCmZ1bmN0aW9uIGhpZGVUeXBpbmcoKSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwaW5nSW5kaWNhdG9yJyk7CiAgaWYgKGVsKSBlbC5yZW1vdmUoKTsKfQoKYXN5bmMgZnVuY3Rpb24gc2VuZEJvdE1lc3NhZ2VzKG1lc3NhZ2VzKSB7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykgewogICAgc2hvd1R5cGluZygpOwogICAgY29uc3QgcGxhaW5UZXh0ID0gcGVyc29uYWxpemUobWVzc2FnZXNbaV0pLnJlcGxhY2UoLzxbXj5dKj4vZywgJycpOwogICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbig4MDAgKyBwbGFpblRleHQubGVuZ3RoICogMTIsIDIyMDApOwogICAgYXdhaXQgc2xlZXAoZGVsYXkpOwogICAgaGlkZVR5cGluZygpOwogICAgYWRkQnViYmxlKG1lc3NhZ2VzW2ldLCAnYm90Jyk7CiAgICBpZiAoaSA8IG1lc3NhZ2VzLmxlbmd0aCAtIDEpIGF3YWl0IHNsZWVwKDMwMCk7CiAgfQp9CgovLyDilIDilIDilIAgRmllbGQgSW5wdXQg4pSA4pSA4pSACmZ1bmN0aW9uIHNob3dGaWVsZElucHV0KHBsYWNlaG9sZGVyLCBpbnB1dFR5cGUsIHZhbGlkYXRlRm4pIHsKICBpbnB1dEFyZWEuaW5uZXJIVE1MID0gJyc7CiAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHdyYXAuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKICB3cmFwLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJzsKICB3cmFwLnN0eWxlLmdhcCA9ICc0cHgnOwoKICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb3cuY2xhc3NOYW1lID0gJ2ZpZWxkLWlucHV0LXdyYXAnOwoKICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgaW5wdXQudHlwZSA9IGlucHV0VHlwZSB8fCAndGV4dCc7CiAgaW5wdXQuaWQgPSAnZmllbGRJbnB1dCc7CiAgaW5wdXQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjsKICBpbnB1dC5hdXRvY29tcGxldGUgPSBpbnB1dFR5cGUgPT09ICdlbWFpbCcgPyAnZW1haWwnIDogaW5wdXRUeXBlID09PSAndGVsJyA/ICd0ZWwnIDogJ25hbWUnOwoKICBjb25zdCBzZW5kQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgc2VuZEJ0bi5jbGFzc05hbWUgPSAnZmllbGQtc2VuZC1idG4nOwogIHNlbmRCdG4uaW5uZXJIVE1MID0gJ+KepCc7CgogIGNvbnN0IGVycm9yRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBlcnJvckVsLmNsYXNzTmFtZSA9ICdmaWVsZC1lcnJvcic7CiAgZXJyb3JFbC5pZCA9ICdmaWVsZEVycm9yJzsKCiAgcm93LmFwcGVuZENoaWxkKGlucHV0KTsKICByb3cuYXBwZW5kQ2hpbGQoc2VuZEJ0bik7CiAgd3JhcC5hcHBlbmRDaGlsZChyb3cpOwogIHdyYXAuYXBwZW5kQ2hpbGQoZXJyb3JFbCk7CiAgaW5wdXRBcmVhLmFwcGVuZENoaWxkKHdyYXApOwoKICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7CiAgICBjb25zdCB2YWwgPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICBjb25zdCBlcnIgPSB2YWxpZGF0ZUZuID8gdmFsaWRhdGVGbih2YWwpIDogbnVsbDsKICAgIGlmIChlcnIpIHsKICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9IGVycjsKICAgICAgZXJyb3JFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZXJyb3JFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgaGFuZGxlUmVnaXN0cmF0aW9uQW5zd2VyKHZhbCk7CiAgfTsKCiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7CiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBzdWJtaXQoKTsgfQogIH0pOwogIHNlbmRCdG4ub25jbGljayA9IHN1Ym1pdDsKICBzY3JvbGxUb0JvdHRvbSgpOwogIGlucHV0LmZvY3VzKCk7Cn0KCi8vIOKUgOKUgOKUgCBJbnB1dCBSZW5kZXJlcnMg4pSA4pSA4pSACmZ1bmN0aW9uIHNob3dDb250ZXh0SW5wdXQob3B0aW9ucykgewogIGlucHV0QXJlYS5pbm5lckhUTUwgPSAnJzsKICBjb25zdCB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgd3JhcC5jbGFzc05hbWUgPSAnY29udGV4dC1idXR0b25zJzsKICBvcHRpb25zLmZvckVhY2gob3B0ID0+IHsKICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgYnRuLmNsYXNzTmFtZSA9ICdjdHgtYnRuJzsKICAgIGJ0bi5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImVtb2ppIj4ke29wdC5lbW9qaX08L3NwYW4+ICR7b3B0LmxhYmVsfWA7CiAgICBidG4ub25jbGljayA9ICgpID0+IGhhbmRsZUNvbnRleHRBbnN3ZXIob3B0KTsKICAgIHdyYXAuYXBwZW5kQ2hpbGQoYnRuKTsKICB9KTsKICBpbnB1dEFyZWEuYXBwZW5kQ2hpbGQod3JhcCk7CiAgc2Nyb2xsVG9Cb3R0b20oKTsKfQoKZnVuY3Rpb24gc2hvd1NjYWxlSW5wdXQobG93LCBoaWdoKSB7CiAgaW5wdXRBcmVhLmlubmVySFRNTCA9ICcnOwogIGNvbnN0IHdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICB3cmFwLmNsYXNzTmFtZSA9ICdzY2FsZS1pbnB1dCc7CiAgd3JhcC5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJzY2FsZS12YWx1ZSIgaWQ9InNjYWxlRGlzcGxheSI+NTwvZGl2PgogICAgPGRpdiBjbGFzcz0ic2NhbGUtdHJhY2siPgogICAgICA8aW5wdXQgdHlwZT0icmFuZ2UiIGlkPSJzY2FsZVNsaWRlciIgbWluPSIxIiBtYXg9IjEwIiB2YWx1ZT0iNSIgc3RlcD0iMSI+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNjYWxlLWxhYmVscyI+CiAgICAgIDxzcGFuPiR7bG93fTwvc3Bhbj4KICAgICAgPHNwYW4gc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPiR7aGlnaH08L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9InNjYWxlLXNlbmQiIGlkPSJzY2FsZVNlbmQiPkVudmlhcjwvYnV0dG9uPgogIGA7CiAgaW5wdXRBcmVhLmFwcGVuZENoaWxkKHdyYXApOwogIHNjcm9sbFRvQm90dG9tKCk7CgogIGNvbnN0IHNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY2FsZVNsaWRlcicpOwogIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NhbGVEaXNwbGF5Jyk7CiAgY29uc3Qgc2VuZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY2FsZVNlbmQnKTsKCiAgc2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gewogICAgY29uc3QgdiA9IHBhcnNlSW50KHNsaWRlci52YWx1ZSk7CiAgICBkaXNwbGF5LnRleHRDb250ZW50ID0gdjsKICAgIGlmICh2IDw9IDMpIGRpc3BsYXkuc3R5bGUuY29sb3IgPSAndmFyKC0tcmVkKSc7CiAgICBlbHNlIGlmICh2IDw9IDUpIGRpc3BsYXkuc3R5bGUuY29sb3IgPSAndmFyKC0teWVsbG93KSc7CiAgICBlbHNlIGlmICh2IDw9IDcpIGRpc3BsYXkuc3R5bGUuY29sb3IgPSAndmFyKC0tb3JhbmdlKSc7CiAgICBlbHNlIGRpc3BsYXkuc3R5bGUuY29sb3IgPSAndmFyKC0tZ3JlZW4pJzsKICB9KTsKCiAgc2VuZEJ0bi5vbmNsaWNrID0gKCkgPT4gaGFuZGxlU2NhbGVBbnN3ZXIocGFyc2VJbnQoc2xpZGVyLnZhbHVlKSk7Cn0KCmZ1bmN0aW9uIHNob3dUZXh0SW5wdXQocGxhY2Vob2xkZXIpIHsKICBpbnB1dEFyZWEuaW5uZXJIVE1MID0gJyc7CiAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHdyYXAuY2xhc3NOYW1lID0gJ3RleHQtaW5wdXQtd3JhcCc7CiAgd3JhcC5pbm5lckhUTUwgPSBgCiAgICA8dGV4dGFyZWEgaWQ9InRleHRJbnB1dCIgcm93cz0iMSIgcGxhY2Vob2xkZXI9IiR7cGVyc29uYWxpemUocGxhY2Vob2xkZXIpfSI+PC90ZXh0YXJlYT4KICAgIDxidXR0b24gY2xhc3M9InRleHQtc2VuZC1idG4iIGlkPSJ0ZXh0U2VuZCI+4p6kPC9idXR0b24+CiAgYDsKICBpbnB1dEFyZWEuYXBwZW5kQ2hpbGQod3JhcCk7CgogIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRJbnB1dCcpOwogIGNvbnN0IHNlbmRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dFNlbmQnKTsKCiAgdGV4dGFyZWEuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7CiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7CiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBNYXRoLm1pbih0ZXh0YXJlYS5zY3JvbGxIZWlnaHQsIDEwMCkgKyAncHgnOwogIH0pOwoKICB0ZXh0YXJlYS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHsKICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGhhbmRsZVRleHRBbnN3ZXIodGV4dGFyZWEudmFsdWUudHJpbSgpKTsKICAgIH0KICB9KTsKCiAgc2VuZEJ0bi5vbmNsaWNrID0gKCkgPT4gaGFuZGxlVGV4dEFuc3dlcih0ZXh0YXJlYS52YWx1ZS50cmltKCkpOwogIHNjcm9sbFRvQm90dG9tKCk7CiAgdGV4dGFyZWEuZm9jdXMoKTsKfQoKZnVuY3Rpb24gc2hvd0NUQSgpIHsKICBpbnB1dEFyZWEuaW5uZXJIVE1MID0gJyc7CiAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHdyYXAuY2xhc3NOYW1lID0gJ2N0YS1idXR0b25zJzsKICB3cmFwLmlubmVySFRNTCA9IGAKICAgIDxidXR0b24gY2xhc3M9ImN0YS1idG4gcHJpbWFyeSIgb25jbGljaz0id2luZG93Lm9wZW4oJ2h0dHBzOi8vd2EubWUvJHtXSEFUU0FQUF9OVU1CRVJ9JywnX2JsYW5rJykiPkZhbGFyIGNvbSBvIFJvZHJpZ288L2J1dHRvbj4KICBgOwogIGlucHV0QXJlYS5hcHBlbmRDaGlsZCh3cmFwKTsKfQoKLy8g4pSA4pSA4pSAIFJlZ2lzdHJhdGlvbiBIYW5kbGVycyDilIDilIDilIAKYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVnaXN0cmF0aW9uQW5zd2VyKHZhbHVlKSB7CiAgY29uc3Qgc3RlcCA9IFJFR0lTVFJBVElPTltyZWdpc3RyYXRpb25TdGVwXTsKICBhZGRCdWJibGUodmFsdWUsICd1c2VyJyk7CiAgaW5wdXRBcmVhLmlubmVySFRNTCA9ICcnOwoKICBpZiAoc3RlcC5pZCA9PT0gJ25vbWUnKSB7CiAgICB1c2VyUHJvZmlsZS5ub21lID0gdmFsdWU7CiAgICB1c2VyUHJvZmlsZS5wcmltZWlyb05vbWUgPSB2YWx1ZS5zcGxpdCgnICcpWzBdOwogIH0gZWxzZSBpZiAoc3RlcC5pZCA9PT0gJ2VtYWlsJykgewogICAgdXNlclByb2ZpbGUuZW1haWwgPSB2YWx1ZTsKICB9IGVsc2UgaWYgKHN0ZXAuaWQgPT09ICd3aGF0c2FwcCcpIHsKICAgIHVzZXJQcm9maWxlLndoYXRzYXBwID0gdmFsdWU7CiAgfQoKICByZWdpc3RyYXRpb25TdGVwKys7CgogIGlmIChyZWdpc3RyYXRpb25TdGVwIDwgUkVHSVNUUkFUSU9OLmxlbmd0aCkgewogICAgYXdhaXQgc2xlZXAoNDAwKTsKICAgIGF3YWl0IHByZXNlbnRSZWdpc3RyYXRpb25TdGVwKHJlZ2lzdHJhdGlvblN0ZXApOwogIH0gZWxzZSB7CiAgICBhd2FpdCBzbGVlcCg0MDApOwogICAgc2hvd1R5cGluZygpOwogICAgYXdhaXQgc2xlZXAoMTAwMCk7CiAgICBoaWRlVHlwaW5nKCk7CiAgICBhZGRCdWJibGUoYMOTdGltbywgJHtnZXRGaXJzdE5hbWUoKX0hIEFnb3JhIHZhbW9zIGFvIGRpYWduw7NzdGljby4g8J+Or2AsICdib3QnKTsKICAgIGF3YWl0IHNsZWVwKDQwMCk7CiAgICBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgYXdhaXQgcHJlc2VudFF1ZXN0aW9uKDApOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gcHJlc2VudFJlZ2lzdHJhdGlvblN0ZXAoc3RlcCkgewogIGNvbnN0IHJlZyA9IFJFR0lTVFJBVElPTltzdGVwXTsKICBhd2FpdCBzZW5kQm90TWVzc2FnZXMocmVnLm1lc3NhZ2VzKTsKICBhd2FpdCBzbGVlcCgyMDApOwogIHNob3dGaWVsZElucHV0KHJlZy5wbGFjZWhvbGRlciwgcmVnLmlucHV0VHlwZSwgcmVnLnZhbGlkYXRlKTsKfQoKLy8g4pSA4pSA4pSAIEFuc3dlciBIYW5kbGVycyDilIDilIDilIAKYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ29udGV4dEFuc3dlcihvcHQpIHsKICB1c2VyQ29udGV4dCA9IG9wdC52YWx1ZTsKICBhbnN3ZXJzWydjb250ZXh0J10gPSBvcHQudmFsdWU7CiAgYWRkQnViYmxlKGAke29wdC5lbW9qaX0gJHtvcHQubGFiZWx9YCwgJ3VzZXInKTsKICBpbnB1dEFyZWEuaW5uZXJIVE1MID0gJyc7CiAgY3VycmVudFN0ZXArKzsKICB1cGRhdGVQcm9ncmVzcygpOwogIGF3YWl0IHNsZWVwKDQwMCk7CiAgYXdhaXQgcHJlc2VudFF1ZXN0aW9uKGN1cnJlbnRTdGVwKTsKfQoKYXN5bmMgZnVuY3Rpb24gaGFuZGxlU2NhbGVBbnN3ZXIodmFsdWUpIHsKICBjb25zdCBxID0gUVVFU1RJT05TW2N1cnJlbnRTdGVwXTsKICBhbnN3ZXJzW3EuaWRdID0gdmFsdWU7CiAgYWRkQnViYmxlKGA8c3Ryb25nPiR7dmFsdWV9PC9zdHJvbmc+LzEwYCwgJ3VzZXInKTsKICBpbnB1dEFyZWEuaW5uZXJIVE1MID0gJyc7CgogIGlmIChxLnRyYW5zaXRpb24pIHsKICAgIGF3YWl0IHNsZWVwKDUwMCk7CiAgICBzaG93VHlwaW5nKCk7CiAgICBhd2FpdCBzbGVlcCgxMjAwKTsKICAgIGhpZGVUeXBpbmcoKTsKICAgIGFkZEJ1YmJsZShxLnRyYW5zaXRpb24sICdib3QnKTsKICB9CgogIGN1cnJlbnRTdGVwKys7CiAgdXBkYXRlUHJvZ3Jlc3MoKTsKICBhd2FpdCBzbGVlcCg1MDApOwoKICBpZiAoY3VycmVudFN0ZXAgPCBRVUVTVElPTlMubGVuZ3RoKSB7CiAgICBhd2FpdCBwcmVzZW50UXVlc3Rpb24oY3VycmVudFN0ZXApOwogIH0gZWxzZSB7CiAgICBhd2FpdCBzaG93UmVzdWx0cygpOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gaGFuZGxlVGV4dEFuc3dlcih0ZXh0KSB7CiAgaWYgKCF0ZXh0KSByZXR1cm47CiAgY29uc3QgcSA9IFFVRVNUSU9OU1tjdXJyZW50U3RlcF07CiAgYW5zd2Vyc1txLmlkXSA9IHRleHQ7CiAgYWRkQnViYmxlKHRleHQsICd1c2VyJyk7CiAgaW5wdXRBcmVhLmlubmVySFRNTCA9ICcnOwoKICBjdXJyZW50U3RlcCsrOwogIHVwZGF0ZVByb2dyZXNzKCk7CiAgYXdhaXQgc2xlZXAoNTAwKTsKCiAgaWYgKGN1cnJlbnRTdGVwIDwgUVVFU1RJT05TLmxlbmd0aCkgewogICAgYXdhaXQgcHJlc2VudFF1ZXN0aW9uKGN1cnJlbnRTdGVwKTsKICB9IGVsc2UgewogICAgYXdhaXQgc2hvd1Jlc3VsdHMoKTsKICB9Cn0KCi8vIOKUgOKUgOKUgCBQcmVzZW50IFF1ZXN0aW9uIOKUgOKUgOKUgAphc3luYyBmdW5jdGlvbiBwcmVzZW50UXVlc3Rpb24oc3RlcCkgewogIGNvbnN0IHEgPSBRVUVTVElPTlNbc3RlcF07CgogIGlmIChxLnNlY3Rpb24pIHsKICAgIGFkZFNlY3Rpb24ocS5zZWN0aW9uLmVtb2ppLCBxLnNlY3Rpb24ubGFiZWwpOwogICAgYXdhaXQgc2xlZXAoMzAwKTsKICB9CgogIGF3YWl0IHNlbmRCb3RNZXNzYWdlcyhxLm1lc3NhZ2VzKTsKICBhd2FpdCBzbGVlcCgyMDApOwoKICBpZiAocS50eXBlID09PSAnY29udGV4dCcpIHNob3dDb250ZXh0SW5wdXQocS5vcHRpb25zKTsKICBlbHNlIGlmIChxLnR5cGUgPT09ICdzY2FsZScpIHNob3dTY2FsZUlucHV0KHEubG93LCBxLmhpZ2gpOwogIGVsc2UgaWYgKHEudHlwZSA9PT0gJ3RleHQnKSBzaG93VGV4dElucHV0KHEucGxhY2Vob2xkZXIpOwp9CgovLyDilIDilIDilIAgU2F2ZSB0byBTdXBhYmFzZSDilIDilIDilIAKYXN5bmMgZnVuY3Rpb24gc2F2ZVRvU3VwYWJhc2Uoc2NvcmVzKSB7CiAgY29uc3QgdGVtcG9TZWd1bmRvcyA9IHN0YXJ0VGltZSA/IE1hdGgucm91bmQoKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMCkgOiBudWxsOwoKICB0cnkgewogICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHN1cGFiYXNlSW5zZXJ0KCdzdXJ2ZXlfc2Vzc2lvbnMnLCB7CiAgICAgIGNsaWVudF9zbHVnOiBDTElFTlRfU0xVRywKICAgICAgcHJvamVjdF9zbHVnOiBQUk9KRUNUX1NMVUcsCiAgICAgIHJlc3BvbmRlbnRfbmFtZTogdXNlclByb2ZpbGUubm9tZSwKICAgICAgcmVzcG9uZGVudF9maXJzdF9uYW1lOiB1c2VyUHJvZmlsZS5wcmltZWlyb05vbWUsCiAgICAgIHJlc3BvbmRlbnRfZW1haWw6IHVzZXJQcm9maWxlLmVtYWlsLAogICAgICByZXNwb25kZW50X3doYXRzYXBwOiB1c2VyUHJvZmlsZS53aGF0c2FwcCwKICAgICAgc2NvcmVzOiBzY29yZXMsCiAgICAgIGR1cmF0aW9uX3NlY29uZHM6IHRlbXBvU2VndW5kb3MsCiAgICAgIGNvbXBsZXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50CiAgICB9LCB0cnVlKTsKCiAgICBjb25zb2xlLmxvZygnU2Vzc8OjbyBjcmlhZGE6Jywgc2Vzc2lvbi5pZCk7CgogICAgY29uc3QgcmVzcG9uc2VzID0gW107CiAgICBsZXQgb3JkZXIgPSAxOwoKICAgIGZvciAoY29uc3QgcSBvZiBRVUVTVElPTlMpIHsKICAgICAgaWYgKGFuc3dlcnNbcS5pZF0gPT09IHVuZGVmaW5lZCkgY29udGludWU7CiAgICAgIGNvbnN0IGlzU2NhbGUgPSBxLnR5cGUgPT09ICdzY2FsZSc7CiAgICAgIGNvbnN0IGlzVGV4dCA9IHEudHlwZSA9PT0gJ3RleHQnOwogICAgICBjb25zdCBwbGFpblF1ZXN0aW9uID0gKHEubWVzc2FnZXNbcS5tZXNzYWdlcy5sZW5ndGggLSAxXSB8fCAnJykKICAgICAgICAucmVwbGFjZSgvPFtePl0qPi9nLCAnJykKICAgICAgICAucmVwbGFjZSgvXHtub21lXH0vZywgdXNlclByb2ZpbGUucHJpbWVpcm9Ob21lKTsKCiAgICAgIHJlc3BvbnNlcy5wdXNoKHsKICAgICAgICBzZXNzaW9uX2lkOiBzZXNzaW9uLmlkLAogICAgICAgIHF1ZXN0aW9uX2lkOiBxLmlkLAogICAgICAgIHF1ZXN0aW9uX29yZGVyOiBvcmRlcisrLAogICAgICAgIHF1ZXN0aW9uX3RleHQ6IHBsYWluUXVlc3Rpb24uc3Vic3RyaW5nKDAsIDEwMDApLAogICAgICAgIHF1ZXN0aW9uX3R5cGU6IHEudHlwZSwKICAgICAgICBkaW1lbnNpb246IHEuZGltZW5zaW9uIHx8IG51bGwsCiAgICAgICAgYW5zd2VyX3ZhbHVlOiBpc1NjYWxlID8gYW5zd2Vyc1txLmlkXSA6IG51bGwsCiAgICAgICAgYW5zd2VyX3RleHQ6IGlzVGV4dCB8fCBxLnR5cGUgPT09ICdjb250ZXh0JyA/IFN0cmluZyhhbnN3ZXJzW3EuaWRdKSA6IG51bGwKICAgICAgfSk7CiAgICB9CgogICAgaWYgKHJlc3BvbnNlcy5sZW5ndGggPiAwKSB7CiAgICAgIGF3YWl0IHN1cGFiYXNlSW5zZXJ0KCdzdXJ2ZXlfcmVzcG9uc2VzJywgcmVzcG9uc2VzKTsKICAgICAgY29uc29sZS5sb2coYCR7cmVzcG9uc2VzLmxlbmd0aH0gcmVzcG9zdGFzIHNhbHZhcy5gKTsKICAgIH0KICB9IGNhdGNoIChlcnIpIHsKICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gc2FsdmFyIG5vIFN1cGFiYXNlOicsIGVyci5tZXNzYWdlKTsKICB9Cn0KCi8vIOKUgOKUgOKUgCBSZXN1bHRzIOKUgOKUgOKUgAphc3luYyBmdW5jdGlvbiBzaG93UmVzdWx0cygpIHsKICBjb25zdCBuID0gKGFuc3dlcnMucDEgKyBhbnN3ZXJzLnAyICsgYW5zd2Vycy5wMykgLyAzOwogIGNvbnN0IGlhID0gKGFuc3dlcnMucDQgKyBhbnN3ZXJzLnA1ICsgYW5zd2Vycy5wNikgLyAzOwogIGNvbnN0IHBvcyA9IChhbnN3ZXJzLnA3ICsgYW5zd2Vycy5wOCArIGFuc3dlcnMucDkpIC8gMzsKICBjb25zdCByID0gYW5zd2Vycy5wMTA7CiAgY29uc3QgZ2xvYmFsID0gbiAqIDAuMzAgKyBpYSAqIDAuMjUgKyBwb3MgKiAwLjI1ICsgciAqIDAuMjA7CgogIGNvbnN0IGRpbXMgPSBbCiAgICB7IGtleTogJ25lZ29jaW8nLCBsYWJlbDogJ/CfkrAgTmVnw7NjaW8nLCBzY29yZTogbiwgY29sb3I6ICd2YXIoLS1wcmltYXJ5KScgfSwKICAgIHsga2V5OiAnaWEnLCBsYWJlbDogJ/CfpJYgSUEgRXN0cmF0w6lnaWNhJywgc2NvcmU6IGlhLCBjb2xvcjogJ3ZhcigtLWFjY2VudCknIH0sCiAgICB7IGtleTogJ3Bvc2ljaW9uYW1lbnRvJywgbGFiZWw6ICfwn46vIFBvc2ljaW9uYW1lbnRvJywgc2NvcmU6IHBvcywgY29sb3I6ICd2YXIoLS1vcmFuZ2UpJyB9LAogICAgeyBrZXk6ICdyZXN1bHRhZG8nLCBsYWJlbDogJ/Cfj4YgUmVzdWx0YWRvJywgc2NvcmU6IHIsIGNvbG9yOiAndmFyKC0tZ3JlZW4pJyB9CiAgXTsKCiAgY29uc3QgbG93ZXN0ID0gZGltcy5yZWR1Y2UoKG1pbiwgZCkgPT4gZC5zY29yZSA8IG1pbi5zY29yZSA/IGQgOiBtaW4sIGRpbXNbMF0pOwoKICBsZXQgZmFpeGEsIGZhaXhhQ29sb3IsIGZhaXhhQmc7CiAgaWYgKGdsb2JhbCA8IDQpIHsgZmFpeGEgPSAnQUxFUlRBJzsgZmFpeGFDb2xvciA9ICcjZmZmJzsgZmFpeGFCZyA9ICd2YXIoLS1yZWQpJzsgfQogIGVsc2UgaWYgKGdsb2JhbCA8IDYpIHsgZmFpeGEgPSAnQVRFTsOHw4NPJzsgZmFpeGFDb2xvciA9ICd2YXIoLS1kYXJrKSc7IGZhaXhhQmcgPSAndmFyKC0teWVsbG93KSc7IH0KICBlbHNlIGlmIChnbG9iYWwgPCA4KSB7IGZhaXhhID0gJ1BPVEVOQ0lBTCc7IGZhaXhhQ29sb3IgPSAnI2ZmZic7IGZhaXhhQmcgPSAndmFyKC0tb3JhbmdlKSc7IH0KICBlbHNlIHsgZmFpeGEgPSAnQUxUQSBQRVJGT1JNQU5DRSc7IGZhaXhhQ29sb3IgPSAnI2ZmZic7IGZhaXhhQmcgPSAndmFyKC0tZ3JlZW4pJzsgfQoKICBjb25zdCBpbnNpZ2h0cyA9IHsKICAgIG5lZ29jaW86ICdTZXUgbmVnw7NjaW8gcHJlY2lzYSBkZSBtYWlzIDxzdHJvbmc+ZXN0cnV0dXJhIGUgY2xhcmV6YTwvc3Ryb25nPi4gU2VtIHVtIG1vZGVsbyBjbGFybywgcHJldmlzaWJpbGlkYWRlIGRlIHJlY2VpdGEgZSBwcm9jZXNzb3MsIHZvY8OqIGVzdMOhIGNvbnN0cnVpbmRvIGVtIGFyZWlhIG1vdmVkacOnYS4gTyBwcmltZWlybyBwYXNzbyDDqSA8c3Ryb25nPnNvbGlkaWZpY2FyIGEgYmFzZTwvc3Ryb25nPi4nLAogICAgaWE6ICdWb2PDqiBlc3TDoSBkZWl4YW5kbyBkaW5oZWlybyBuYSBtZXNhIHBvciBuw6NvIHVzYXIgPHN0cm9uZz5JQSBlc3RyYXRlZ2ljYW1lbnRlPC9zdHJvbmc+LiBBIG1haW9yaWEgZG9zIHNldXMgY29uY29ycmVudGVzIGrDoSBlc3TDoSBhdXRvbWF0aXphbmRvIHByb2Nlc3NvcyBlIGdhbmhhbmRvIHZlbG9jaWRhZGUuIMOJIGhvcmEgZGUgPHN0cm9uZz5pbXBsZW1lbnRhciBJQSBubyBzZXUgbmVnw7NjaW88L3N0cm9uZz4uJywKICAgIHBvc2ljaW9uYW1lbnRvOiAnVm9jw6ogcG9kZSB0ZXIgdW0gw7N0aW1vIG5lZ8OzY2lvIGUgdXNhciBJQSwgbWFzIHNlIG8gbWVyY2FkbyBuw6NvIHRlIGVueGVyZ2EgY29tbyByZWZlcsOqbmNpYSwgZXN0w6EgPHN0cm9uZz5wZXJkZW5kbyBvcG9ydHVuaWRhZGVzPC9zdHJvbmc+LiBTZXUgZGlmZXJlbmNpYWwgcHJlY2lzYSBzZXIgY2xhcm8gZSBzdWEgcHJlc2Vuw6dhIGRpZ2l0YWwgcHJlY2lzYSByZWZsZXRpciBxdWVtIHZvY8OqIMOpLicsCiAgICByZXN1bHRhZG86ICdWb2PDqiB0ZW0gZXN0cnV0dXJhLCB1c2EgSUEgZSBzZSBwb3NpY2lvbmEg4oCUIG1hcyBvIHJlc3VsdGFkbyBuw6NvIGFjb21wYW5oYS4gUG9kZSBpbmRpY2FyIHVtIDxzdHJvbmc+ZGVzYWxpbmhhbWVudG8gZW50cmUgZXN0cmF0w6lnaWEgZSBleGVjdcOnw6NvPC9zdHJvbmc+LiDDiSBob3JhIGRlIHJldmlzYXIgb25kZSBlc3TDoSBpbnZlc3RpbmRvIHN1YSBlbmVyZ2lhLicKICB9OwoKICBhd2FpdCBzYXZlVG9TdXBhYmFzZSh7CiAgICBuZWdvY2lvOiBwYXJzZUZsb2F0KG4udG9GaXhlZCgxKSksCiAgICBpYTogcGFyc2VGbG9hdChpYS50b0ZpeGVkKDEpKSwKICAgIHBvc2ljaW9uYW1lbnRvOiBwYXJzZUZsb2F0KHBvcy50b0ZpeGVkKDEpKSwKICAgIHJlc3VsdGFkbzogcGFyc2VGbG9hdChyLnRvRml4ZWQoMSkpLAogICAgZ2xvYmFsOiBwYXJzZUZsb2F0KGdsb2JhbC50b0ZpeGVkKDEpKSwKICAgIGZhaXhhOiBmYWl4YSwKICAgIGRpbWVuc2FvX2NyaXRpY2E6IGxvd2VzdC5rZXkKICB9KTsKCiAgYWRkU2VjdGlvbign8J+TiicsICdTRVUgRElBR07Dk1NUSUNPJyk7CiAgYXdhaXQgc2xlZXAoMzAwKTsKCiAgc2hvd1R5cGluZygpOwogIGF3YWl0IHNsZWVwKDE1MDApOwogIGhpZGVUeXBpbmcoKTsKCiAgLy8gR2xvYmFsIFNjb3JlIENhcmQKICBjb25zdCBzY29yZUNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBzY29yZUNhcmQuY2xhc3NOYW1lID0gJ3Jlc3VsdC1jYXJkJzsKICBzY29yZUNhcmQuaW5uZXJIVE1MID0gYAogICAgPGgzPkJ1c2luZXNzIFJlYWRpbmVzcyBTY29yZTwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzY29yZS1iaWciPgogICAgICA8ZGl2IGNsYXNzPSJudW1iZXIiIHN0eWxlPSJjb2xvcjoke2ZhaXhhQmd9Ij4ke2dsb2JhbC50b0ZpeGVkKDEpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+ZGUgMTA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYmFkZ2UiIHN0eWxlPSJiYWNrZ3JvdW5kOiR7ZmFpeGFCZ307Y29sb3I6JHtmYWl4YUNvbG9yfSI+JHtmYWl4YX08L2Rpdj4KICAgIDwvZGl2PgogIGA7CiAgY2hhdC5hcHBlbmRDaGlsZChzY29yZUNhcmQpOwogIHNjcm9sbFRvQm90dG9tKCk7CiAgYXdhaXQgc2xlZXAoNjAwKTsKCiAgLy8gRGltZW5zaW9uIEJhcnMgQ2FyZAogIGNvbnN0IGJhcnNDYXJkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgYmFyc0NhcmQuY2xhc3NOYW1lID0gJ3Jlc3VsdC1jYXJkJzsKICBsZXQgYmFyc0hUTUwgPSAnPGgzPlNldSBtYXBhIHBvciBkaW1lbnPDo288L2gzPjxkaXYgY2xhc3M9ImRpbWVuc2lvbi1iYXJzIj4nOwogIGRpbXMuZm9yRWFjaChkID0+IHsKICAgIGNvbnN0IHBjdCA9IChkLnNjb3JlIC8gMTApICogMTAwOwogICAgYmFyc0hUTUwgKz0gYAogICAgICA8ZGl2IGNsYXNzPSJkaW0tYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkaW0tYmFyLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZGltLW5hbWUiPiR7ZC5sYWJlbH08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZGltLXNjb3JlIj4ke2Quc2NvcmUudG9GaXhlZCgxKX08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGltLXRyYWNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpbS1maWxsIiBzdHlsZT0iYmFja2dyb3VuZDoke2QuY29sb3J9IiBkYXRhLXdpZHRoPSIke3BjdH0lIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0pOwogIGJhcnNIVE1MICs9ICc8L2Rpdj4nOwogIGJhcnNDYXJkLmlubmVySFRNTCA9IGJhcnNIVE1MOwogIGNoYXQuYXBwZW5kQ2hpbGQoYmFyc0NhcmQpOwogIHNjcm9sbFRvQm90dG9tKCk7CgogIGF3YWl0IHNsZWVwKDEwMCk7CiAgYmFyc0NhcmQucXVlcnlTZWxlY3RvckFsbCgnLmRpbS1maWxsJykuZm9yRWFjaChiYXIgPT4gewogICAgYmFyLnN0eWxlLndpZHRoID0gYmFyLmRhdGFzZXQud2lkdGg7CiAgfSk7CgogIGF3YWl0IHNsZWVwKDgwMCk7CgogIHNob3dUeXBpbmcoKTsKICBhd2FpdCBzbGVlcCgxMjAwKTsKICBoaWRlVHlwaW5nKCk7CiAgYWRkQnViYmxlKGA8c3Ryb25nPiR7Z2V0Rmlyc3ROYW1lKCl9LCBzZXUgcG9udG8gbWFpcyBjcsOtdGljbzogJHtsb3dlc3QubGFiZWx9PC9zdHJvbmc+XG5cbiR7aW5zaWdodHNbbG93ZXN0LmtleV19YCwgJ2JvdCcpOwogIGF3YWl0IHNsZWVwKDYwMCk7CgogIHNob3dUeXBpbmcoKTsKICBhd2FpdCBzbGVlcCgxMDAwKTsKICBoaWRlVHlwaW5nKCk7CiAgYWRkQnViYmxlKGBBIGJvYSBub3TDrWNpYT8gTmEgYXVsYSBkZSBob2plIG5hIDxzdHJvbmc+Q29uZnJhcmlhIGRvcyBQYWxjb3M8L3N0cm9uZz4gdmFtb3MgYWJvcmRhciBleGF0YW1lbnRlIGVzc2VzIHBvbnRvcyDigJQgPHN0cm9uZz5OZWfDs2NpbywgSUEgRXN0cmF0w6lnaWNhIGUgUG9zaWNpb25hbWVudG88L3N0cm9uZz4uXG5cbvCflKUgRXNzZSBkaWFnbsOzc3RpY28gw6kgbyBzZXUgcG9udG8gZGUgcGFydGlkYS4gU2UgcXVpc2VyIGlyIG1haXMgZnVuZG8sIGZhbGEgY29tIG8gUm9kcmlnby4g8J+Rh2AsICdib3QnKTsKCiAgYXdhaXQgc2xlZXAoMzAwKTsKICBzaG93Q1RBKCk7CiAgdXBkYXRlUHJvZ3Jlc3MoKTsKfQoKLy8g4pSA4pSA4pSAIEluaXQg4pSA4pSA4pSACihhc3luYyBmdW5jdGlvbiBpbml0KCkgewogIGF3YWl0IHNsZWVwKDYwMCk7CiAgYXdhaXQgcHJlc2VudFJlZ2lzdHJhdGlvblN0ZXAoMCk7Cn0pKCk7Cjwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+Cg=="}