{"js":"PHN0eWxlPgo6cm9vdCB7CiAgLS1pbms6ICMxODE0MGY7CiAgLS1wYXBlcjogI2Y2ZjFlYTsKICAtLXBhcGVyMjogI2VkZTdkYzsKICAtLWNyZWFtOiAjZmFmN2YyOwogIC0tcnVzdDogI2I4NGMyYTsKICAtLXJ1c3Qtc29mdDogcmdiYSgxODQsNzYsNDIsMC4wOCk7CiAgLS1nb2xkOiAjYzk5MzNhOwogIC0tZ29sZC1zb2Z0OiByZ2JhKDIwMSwxNDcsNTgsMC4xMik7CiAgLS1zYWdlOiAjNWU3NTU1OwogIC0tc2FnZS1zb2Z0OiByZ2JhKDk0LDExNyw4NSwwLjEpOwogIC0td2luZTogIzdiMmQ0MjsKICAtLXdpbmUtc29mdDogcmdiYSgxMjMsNDUsNjYsMC4xKTsKICAtLW11dGVkOiAjOGE3ZjcyOwogIC0tYm9yZGVyOiAjZDhkMGM1OwogIC0tc2hhZG93OiByZ2JhKDI0LDIwLDE1LDAuMDgpOwogIC0tc2hhZG93LW1kOiByZ2JhKDI0LDIwLDE1LDAuMTQpOwp9CgoqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9Cmh0bWwsIGJvZHkgeyBoZWlnaHQ6IDEwMCU7IH0KCmJvZHkgewogIGZvbnQtZmFtaWx5OiAnRE0gU2FucycsIHNhbnMtc2VyaWY7CiAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXIpOwogIGNvbG9yOiB2YXIoLS1pbmspOwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBoZWlnaHQ6IDEwMHZoOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIOKUgOKUgCBIRUFERVIg4pSA4pSAICovCmhlYWRlciB7CiAgYmFja2dyb3VuZDogdmFyKC0taW5rKTsKICBjb2xvcjogdmFyKC0tcGFwZXIpOwogIHBhZGRpbmc6IDAgMjhweDsKICBoZWlnaHQ6IDU4cHg7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBmbGV4LXNocmluazogMDsKICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcnVzdCk7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHotaW5kZXg6IDEwOwp9Ci5sb2dvIHsKICBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOwogIGZvbnQtc2l6ZTogMS41NXJlbTsKICBmb250LXdlaWdodDogNjAwOwogIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgZ2FwOiA2cHg7Cn0KLmxvZ28tdGhlIHsgY29sb3I6IHJnYmEoMjQ2LDI0MSwyMzQsMC40NSk7IGZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC13ZWlnaHQ6IDQwMDsgZm9udC1zaXplOiAxLjFyZW07IH0KLmxvZ28ta2l0Y2hlbiB7IGNvbG9yOiB2YXIoLS1wYXBlcik7IH0KLmxvZ28tZG90IHsgY29sb3I6IHZhcigtLXJ1c3QpOyB9CgouaGVhZGVyLW5hdiB7IGRpc3BsYXk6IGZsZXg7IGdhcDogNHB4OyB9Ci5uYXYtYnRuIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IG5vbmU7CiAgY29sb3I6IHJnYmEoMjQ2LDI0MSwyMzQsMC41KTsKICBwYWRkaW5nOiA2cHggMTRweDsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOwogIGZvbnQtc2l6ZTogMC42OHJlbTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYWxsIDAuMThzOwogIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoubmF2LWJ0bjpob3ZlciB7IGNvbG9yOiB2YXIoLS1wYXBlcik7IGJhY2tncm91bmQ6IHJnYmEoMjQ2LDI0MSwyMzQsMC4wOCk7IH0KLm5hdi1idG4uYWN0aXZlIHsgY29sb3I6IHZhcigtLXBhcGVyKTsgYmFja2dyb3VuZDogdmFyKC0tcnVzdCk7IH0KCi8qIOKUgOKUgCBMQVlPVVQg4pSA4pSAICovCi5hcHAgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleDogMTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiDilIDilIAgU0lERUJBUiDilIDilIAgKi8KLnNpZGViYXIgewogIHdpZHRoOiAyNjBweDsKICBtaW4td2lkdGg6IDI2MHB4OwogIGJhY2tncm91bmQ6IHZhcigtLWluayk7CiAgY29sb3I6IHZhcigtLXBhcGVyKTsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgb3ZlcmZsb3cteTogYXV0bzsKICBmbGV4LXNocmluazogMDsKfQouc2lkZWJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogM3B4OyB9Ci5zaWRlYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6IHJnYmEoMjQ2LDI0MSwyMzQsMC4xKTsgfQoKLnNiLXNlY3Rpb24gewogIHBhZGRpbmc6IDE2cHggMThweDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNDYsMjQxLDIzNCwwLjA2KTsKfQouc2ItbGFiZWwgewogIGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsKICBmb250LXNpemU6IDAuNThyZW07CiAgbGV0dGVyLXNwYWNpbmc6IDAuMTZlbTsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIGNvbG9yOiB2YXIoLS1nb2xkKTsKICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9Ci5zYi10YWdzIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDRweDsgfQouc2ItdGFnIHsKICBwYWRkaW5nOiAycHggN3B4OwogIGJvcmRlci1yYWRpdXM6IDJweDsKICBmb250LXNpemU6IDAuN3JlbTsKICBib3JkZXI6IDFweCBzb2xpZDsKICBmb250LWZhbWlseTogJ0RNIE1vbm8nLCBtb25vc3BhY2U7Cn0KLnNiLXRhZy5yIHsgYm9yZGVyLWNvbG9yOiByZ2JhKDE4NCw3Niw0MiwwLjUpOyBjb2xvcjogI2UwODk2YTsgYmFja2dyb3VuZDogcmdiYSgxODQsNzYsNDIsMC4wOCk7IH0KLnNiLXRhZy5jIHsgYm9yZGVyLWNvbG9yOiByZ2JhKDk0LDExNyw4NSwwLjQpOyBjb2xvcjogIzkyYjA4NzsgYmFja2dyb3VuZDogcmdiYSg5NCwxMTcsODUsMC4wOCk7IH0KLnNiLXRhZy5lIHsgYm9yZGVyLWNvbG9yOiByZ2JhKDI0NiwyNDEsMjM0LDAuMTUpOyBjb2xvcjogcmdiYSgyNDYsMjQxLDIzNCwwLjUpOyBiYWNrZ3JvdW5kOiByZ2JhKDI0NiwyNDEsMjM0LDAuMDQpOyB9CgouaW52LXJvdyB7CiAgZGlzcGxheTogZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBwYWRkaW5nOiAzcHggMDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNDYsMjQxLDIzNCwwLjA1KTsKICBmb250LXNpemU6IDAuNzZyZW07CiAgY29sb3I6IHJnYmEoMjQ2LDI0MSwyMzQsMC42NSk7Cn0KLmludi1yb3cgLmludi1jYXQtYmFkZ2UgewogIGZvbnQtc2l6ZTogMC42cmVtOwogIGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsKICBjb2xvcjogdmFyKC0tc2FnZSk7CiAgYmFja2dyb3VuZDogcmdiYSg5NCwxMTcsODUsMC4xNSk7CiAgcGFkZGluZzogMXB4IDVweDsKICBib3JkZXItcmFkaXVzOiAycHg7Cn0KLmludi1yZW1vdmUgeyBiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IG5vbmU7IGNvbG9yOiByZ2JhKDI0NiwyNDEsMjM0LDAuMTgpOyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMC43NXJlbTsgcGFkZGluZzogMnB4IDRweDsgfQouaW52LXJlbW92ZTpob3ZlciB7IGNvbG9yOiB2YXIoLS1ydXN0KTsgfQouYWRkLWludiB7IGRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyBtYXJnaW4tdG9wOiA4cHg7IH0KLmFkZC1pbnYgaW5wdXQsIC5hZGQtaW52IHNlbGVjdCB7CiAgYmFja2dyb3VuZDogcmdiYSgyNDYsMjQxLDIzNCwwLjA2KTsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI0NiwyNDEsMjM0LDAuMTIpOwogIGNvbG9yOiB2YXIoLS1wYXBlcik7CiAgcGFkZGluZzogNHB4IDdweDsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgZm9udC1mYW1pbHk6ICdETSBTYW5zJywgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDAuNzNyZW07CiAgZmxleDogMTsKfQouYWRkLWludiBpbnB1dDo6cGxhY2Vob2xkZXIgeyBjb2xvcjogcmdiYSgyNDYsMjQxLDIzNCwwLjI1KTsgfQouYWRkLWludiBzZWxlY3Qgb3B0aW9uIHsgYmFja2dyb3VuZDogIzE4MTQwZjsgfQouYWRkLWludi1idG4geyBiYWNrZ3JvdW5kOiB2YXIoLS1ydXN0KTsgYm9yZGVyOiBub25lOyBjb2xvcjogd2hpdGU7IHBhZGRpbmc6IDRweCA5cHg7IGJvcmRlci1yYWRpdXM6IDNweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDAuOHJlbTsgZmxleC1zaHJpbms6IDA7IH0KCi5wYXN0LWVudHJ5IHsKICBmb250LXNpemU6IDAuNzJyZW07CiAgY29sb3I6IHJnYmEoMjQ2LDI0MSwyMzQsMC40KTsKICBwYWRkaW5nOiA0cHggMDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNDYsMjQxLDIzNCwwLjA1KTsKICBsaW5lLWhlaWdodDogMS40Owp9Ci5wYXN0LWVudHJ5IC5wYXN0LWRhdGUgeyBjb2xvcjogdmFyKC0tZ29sZCk7IGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjZyZW07IH0KCi8qIOKUgOKUgCBNQUlOIOKUgOKUgCAqLwoubWFpbiB7CiAgZmxleDogMTsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBtaW4td2lkdGg6IDA7Cn0KCi5wYW5lbCB7IGRpc3BsYXk6IG5vbmU7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGZsZXg6IDE7IG92ZXJmbG93OiBoaWRkZW47IH0KLnBhbmVsLmFjdGl2ZSB7IGRpc3BsYXk6IGZsZXg7IH0KCi8qIOKUgOKUgCBDSEFUIOKUgOKUgCAqLwouY2hhdC1tc2dzIHsKICBmbGV4OiAxOwogIG92ZXJmbG93LXk6IGF1dG87CiAgcGFkZGluZzogMjRweCAyOHB4OwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBnYXA6IDE4cHg7Cn0KLmNoYXQtbXNnczo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogNHB4OyB9Ci5jaGF0LW1zZ3M6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogMnB4OyB9CgoubXNnIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxMnB4OyBhbmltYXRpb246IG1zZ0luIDAuMjVzIGVhc2U7IH0KLm1zZy51IHsgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOyBhbGlnbi1zZWxmOiBmbGV4LWVuZDsgbWF4LXdpZHRoOiA3MiU7IH0KQGtleWZyYW1lcyBtc2dJbiB7IGZyb20geyBvcGFjaXR5OjA7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDZweCk7IH0gdG8geyBvcGFjaXR5OjE7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDApOyB9IH0KCi5hdmF0YXIgewogIHdpZHRoOiAzNHB4OyBoZWlnaHQ6IDM0cHg7IGJvcmRlci1yYWRpdXM6IDUwJTsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBmbGV4LXNocmluazogMDsgZm9udC13ZWlnaHQ6IDYwMDsKfQouYXZhdGFyLmJvdCB7IGJhY2tncm91bmQ6IHZhcigtLXJ1c3QpOyBjb2xvcjogd2hpdGU7IGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7IGZvbnQtc2l6ZTogMXJlbTsgZm9udC1zdHlsZTogaXRhbGljOyB9Ci5hdmF0YXIudXNyIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgY29sb3I6IHZhcigtLWdvbGQpOyBmb250LWZhbWlseTogJ0RNIE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMC43cmVtOyB9CgouYnViYmxlIHsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogIGJvcmRlci1yYWRpdXM6IDNweCAxMnB4IDEycHggMTJweDsKICBwYWRkaW5nOiAxM3B4IDE3cHg7CiAgZm9udC1zaXplOiAwLjg2cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjY1OwogIGJveC1zaGFkb3c6IDAgMnB4IDhweCB2YXIoLS1zaGFkb3cpOwogIG1heC13aWR0aDogNzIwcHg7Cn0KLm1zZy51IC5idWJibGUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1pbmspOyBjb2xvcjogdmFyKC0tcGFwZXIpOyBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXItcmFkaXVzOiAxMnB4IDNweCAxMnB4IDEycHg7IH0KCi5idWJibGUgaDIgeyBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOyBmb250LXNpemU6IDEuMTVyZW07IGNvbG9yOiB2YXIoLS1ydXN0KTsgbWFyZ2luLWJvdHRvbTogMTBweDsgZm9udC13ZWlnaHQ6IDYwMDsgfQouYnViYmxlIGgzIHsgZm9udC1mYW1pbHk6ICdDb3Jtb3JhbnQgR2FyYW1vbmQnLCBzZXJpZjsgZm9udC1zaXplOiAwLjk4cmVtOyBtYXJnaW46IDEwcHggMCAzcHg7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNjAwOyB9Ci5idWJibGUgc3Ryb25nIHsgY29sb3I6IHZhcigtLXJ1c3QpOyB9Ci5idWJibGUgZW0geyBjb2xvcjogdmFyKC0tc2FnZSk7IH0KLmJ1YmJsZSBwIHsgbWFyZ2luLWJvdHRvbTogNnB4OyB9Ci5idWJibGUgdWwgeyBwYWRkaW5nLWxlZnQ6IDE2cHg7IG1hcmdpbjogNHB4IDA7IH0KLmJ1YmJsZSBsaSB7IG1hcmdpbi1ib3R0b206IDJweDsgfQouYnViYmxlIGhyIHsgYm9yZGVyOiBub25lOyBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgbWFyZ2luOiAxMHB4IDA7IH0KCi5kYXktY2FyZCB7CiAgYmFja2dyb3VuZDogdmFyKC0tY3JlYW0pOwogIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tcnVzdCk7CiAgcGFkZGluZzogOXB4IDEzcHg7CiAgbWFyZ2luOiA2cHggMDsKICBib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKfQouZGF5LWNhcmQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlcjIpOyB9Ci5kYXktY2FyZCAuZGMtZGF5IHsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDAuNnJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMWVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9Ci5kYXktY2FyZCAuZGMtbWVhbCB7IGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7IGZvbnQtc2l6ZTogMS4wNXJlbTsgbWFyZ2luOiAycHggMDsgfQouZGF5LWNhcmQgLmRjLW5vdGUgeyBmb250LXNpemU6IDAuNzVyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KLmRheS1jYXJkIC5kYy13aW5lIHsgZm9udC1zaXplOiAwLjcycmVtOyBjb2xvcjogdmFyKC0td2luZSk7IG1hcmdpbi10b3A6IDRweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA0cHg7IH0KCi53aW5lLW1hdGNoIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1nb2xkLXNvZnQpOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjAxLDE0Nyw1OCwwLjI1KTsKICBib3JkZXItcmFkaXVzOiA0cHg7CiAgcGFkZGluZzogOHB4IDEycHg7CiAgbWFyZ2luOiA2cHggMDsKICBmb250LXNpemU6IDAuOHJlbTsKfQoud2luZS1tYXRjaCAud20tYm90dGxlIHsgZm9udC1mYW1pbHk6ICdDb3Jtb3JhbnQgR2FyYW1vbmQnLCBzZXJpZjsgZm9udC1zaXplOiAwLjk1cmVtOyBjb2xvcjogdmFyKC0tZ29sZCk7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KLndpbmUtbWF0Y2ggLndtLXdoeSB7IGZvbnQtc2l6ZTogMC43NnJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDogM3B4OyB9CgouY2hpcHMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDdweDsgZmxleC13cmFwOiB3cmFwOyBtYXJnaW4tdG9wOiAxMHB4OyB9Ci5jaGlwIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogIHBhZGRpbmc6IDRweCAxMXB4OwogIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgZm9udC1zaXplOiAwLjczcmVtOwogIGN1cnNvcjogcG9pbnRlcjsKICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBmb250LWZhbWlseTogJ0RNIFNhbnMnLCBzYW5zLXNlcmlmOwp9Ci5jaGlwOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1ydXN0KTsgY29sb3I6IHZhcigtLXJ1c3QpOyBiYWNrZ3JvdW5kOiB2YXIoLS1ydXN0LXNvZnQpOyB9CgoudHlwaW5nIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxMnB4OyBhbGlnbi1pdGVtczogY2VudGVyOyB9Ci50eXBpbmctZG90cyB7IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiAzcHggMTJweCAxMnB4IDEycHg7IHBhZGRpbmc6IDEzcHggMTdweDsgZGlzcGxheTogZmxleDsgZ2FwOiA0cHg7IH0KLnR5cGluZy1kb3RzIHNwYW4geyB3aWR0aDogNXB4OyBoZWlnaHQ6IDVweDsgYm9yZGVyLXJhZGl1czogNTAlOyBiYWNrZ3JvdW5kOiB2YXIoLS1tdXRlZCk7IGFuaW1hdGlvbjogdGRvdCAxLjJzIGluZmluaXRlOyB9Ci50eXBpbmctZG90cyBzcGFuOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTogMC4yczsgfQoudHlwaW5nLWRvdHMgc3BhbjpudGgtY2hpbGQoMykgeyBhbmltYXRpb24tZGVsYXk6IDAuNHM7IH0KQGtleWZyYW1lcyB0ZG90IHsgMCUsNjAlLDEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCk7b3BhY2l0eTouNX0gMzAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01cHgpO29wYWNpdHk6MX0gfQoKLyogQ0hBVCBJTlBVVCAqLwouY2hhdC1mb290ZXIgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogIGJhY2tncm91bmQ6IHZhcigtLWNyZWFtKTsKICBwYWRkaW5nOiAxMnB4IDI4cHggMTZweDsKICBmbGV4LXNocmluazogMDsKfQoucXVpY2stcm93IHsgZGlzcGxheTogZmxleDsgZ2FwOiA2cHg7IGZsZXgtd3JhcDogd3JhcDsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQoucXAgewogIGJhY2tncm91bmQ6IHdoaXRlOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgcGFkZGluZzogNHB4IDExcHg7CiAgYm9yZGVyLXJhZGl1czogMjBweDsKICBmb250LXNpemU6IDAuNzJyZW07CiAgY3Vyc29yOiBwb2ludGVyOwogIGNvbG9yOiB2YXIoLS1tdXRlZCk7CiAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwp9Ci5xcDpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tcnVzdCk7IGNvbG9yOiB2YXIoLS1ydXN0KTsgfQouaW5wdXQtcm93IHsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfQouY2hhdC1pbnB1dCB7CiAgZmxleDogMTsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgYm9yZGVyLXJhZGl1czogNnB4OwogIHBhZGRpbmc6IDEwcHggMTRweDsKICBmb250LWZhbWlseTogJ0RNIFNhbnMnLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMC44NnJlbTsKICBjb2xvcjogdmFyKC0taW5rKTsKICByZXNpemU6IG5vbmU7CiAgbWluLWhlaWdodDogNDJweDsKICBtYXgtaGVpZ2h0OiAxMTBweDsKICBsaW5lLWhlaWdodDogMS41OwogIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE4czsKfQouY2hhdC1pbnB1dDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogdmFyKC0tcnVzdCk7IH0KLnNlbmQtYnRuIHsKICB3aWR0aDogNDJweDsgaGVpZ2h0OiA0MnB4OwogIGJhY2tncm91bmQ6IHZhcigtLXJ1c3QpOwogIGJvcmRlcjogbm9uZTsgY29sb3I6IHdoaXRlOwogIGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOwogIGZvbnQtc2l6ZTogMXJlbTsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE4czsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBmbGV4LXNocmluazogMDsKfQouc2VuZC1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAjOWEzZDIwOyB9Ci5zZW5kLWJ0bjpkaXNhYmxlZCB7IGJhY2tncm91bmQ6IHZhcigtLWJvcmRlcik7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH0KCi8qIOKUgOKUgCBXRUVLIFBBTkVMIOKUgOKUgCAqLwoud2Vlay1pbm5lciB7IGZsZXg6IDE7IG92ZXJmbG93LXk6IGF1dG87IHBhZGRpbmc6IDI0cHggMjhweDsgfQoud2Vlay1pbm5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogNHB4OyB9Ci53ZWVrLWlubmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6IHZhcigtLWJvcmRlcik7IH0KCi53ZWVrLXRvcGJhciB7CiAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIG1hcmdpbi1ib3R0b206IDIwcHg7Cn0KLndlZWstdG9wYmFyIGgyIHsgZm9udC1mYW1pbHk6ICdDb3Jtb3JhbnQgR2FyYW1vbmQnLCBzZXJpZjsgZm9udC1zaXplOiAxLjU1cmVtOyBmb250LXdlaWdodDogNjAwOyB9Ci53ZWVrLXRvcGJhciBoMiBlbSB7IGNvbG9yOiB2YXIoLS1ydXN0KTsgZm9udC1zdHlsZTogbm9ybWFsOyB9Ci53ZWVrLWFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgfQoud2Vlay1idG4gewogIGJhY2tncm91bmQ6IHZhcigtLWluayk7IGNvbG9yOiB2YXIoLS1wYXBlcik7CiAgYm9yZGVyOiBub25lOyBwYWRkaW5nOiA3cHggMTZweDsgYm9yZGVyLXJhZGl1czogM3B4OwogIGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjY4cmVtOwogIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE4czsKfQoud2Vlay1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ydXN0KTsgfQoud2Vlay1idG4uc2Vjb25kYXJ5IHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KLndlZWstYnRuLnNlY29uZGFyeTpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tcnVzdCk7IGNvbG9yOiB2YXIoLS1ydXN0KTsgYmFja2dyb3VuZDogdmFyKC0tcnVzdC1zb2Z0KTsgfQoKLndlZWstZ3JpZCB7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogIGdhcDogOHB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7Cn0KLnRpbGUgewogIGJhY2tncm91bmQ6IHdoaXRlOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIHBhZGRpbmc6IDEycHggMTFweDsKICBtaW4taGVpZ2h0OiAxNDhweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE4cywgdHJhbnNmb3JtIDAuMThzOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci50aWxlOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBoZWlnaHQ6IDNweDsgfQoudGlsZS53ZWVrZGF5OjpiZWZvcmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXIpOyB9Ci50aWxlLmZyaWRheTo6YmVmb3JlIHsgYmFja2dyb3VuZDogdmFyKC0tc2FnZSk7IH0KLnRpbGUud2Vla2VuZDo6YmVmb3JlIHsgYmFja2dyb3VuZDogdmFyKC0tZ29sZCk7IH0KLnRpbGU6aG92ZXIgeyBib3gtc2hhZG93OiAwIDRweCAxOHB4IHZhcigtLXNoYWRvdy1tZCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfQoudGlsZS5lbXB0eTpob3ZlciB7IGJveC1zaGFkb3c6IG5vbmU7IHRyYW5zZm9ybTogbm9uZTsgfQoKLnQtZGF5IHsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDAuNThyZW07IGxldHRlci1zcGFjaW5nOiAwLjEyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1hcmdpbi1ib3R0b206IDdweDsgfQoudC1tZWFsIHsgZm9udC1mYW1pbHk6ICdDb3Jtb3JhbnQgR2FyYW1vbmQnLCBzZXJpZjsgZm9udC1zaXplOiAwLjk1cmVtOyBsaW5lLWhlaWdodDogMS4zOyBtYXJnaW4tYm90dG9tOiA1cHg7IH0KLnQtbm90ZSB7IGZvbnQtc2l6ZTogMC43cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBsaW5lLWhlaWdodDogMS40OyB9Ci50LXdpbmUgeyBmb250LXNpemU6IDAuNjdyZW07IGNvbG9yOiB2YXIoLS13aW5lKTsgbWFyZ2luLXRvcDogN3B4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDNweDsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyB9Ci50LXJlY2lwZS1oaW50IHsgcG9zaXRpb246IGFic29sdXRlOyBib3R0b206IDdweDsgcmlnaHQ6IDlweDsgZm9udC1zaXplOiAwLjYycmVtOyBjb2xvcjogdmFyKC0tYm9yZGVyKTsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogMC4wNWVtOyB0cmFuc2l0aW9uOiBjb2xvciAwLjE1czsgfQoudGlsZTpob3ZlciAudC1yZWNpcGUtaGludCB7IGNvbG9yOiB2YXIoLS1ydXN0KTsgfQoudC1lbXB0eSB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBoZWlnaHQ6IDEwMHB4OyBjb2xvcjogdmFyKC0tYm9yZGVyKTsgZm9udC1zaXplOiAxLjRyZW07IH0KCi8qIFNIT1BQSU5HICovCi5zaG9wLWNhcmQgewogIGJhY2tncm91bmQ6IHdoaXRlOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIHBhZGRpbmc6IDE4cHggMjJweDsKICBtYXJnaW4tdG9wOiAxNnB4Owp9Ci5zaG9wLWNhcmQgaDMgeyBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOyBmb250LXNpemU6IDEuMTVyZW07IG1hcmdpbi1ib3R0b206IDE0cHg7IH0KLnNob3AtY29scyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE4MHB4LCAxZnIpKTsgZ2FwOiAxNnB4OyB9Ci5zaG9wLWNvbCBoNCB7IGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjZyZW07IGxldHRlci1zcGFjaW5nOiAwLjEyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1ydXN0KTsgbWFyZ2luLWJvdHRvbTogOHB4OyB9Ci5zaG9wLWNvbCB1bCB7IGxpc3Qtc3R5bGU6IG5vbmU7IH0KLnNob3AtY29sIGxpIHsKICBwYWRkaW5nOiA0cHggMDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcGFwZXIyKTsKICBmb250LXNpemU6IDAuOHJlbTsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsKfQouc2hvcC1jb2wgbGk6OmJlZm9yZSB7IGNvbnRlbnQ6Jyc7IHdpZHRoOjExcHg7IGhlaWdodDoxMXB4OyBib3JkZXI6MS41cHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czoycHg7IGZsZXgtc2hyaW5rOjA7IH0KCi8qIOKUgOKUgCBJTlRMIFRIVVJTREFZUyDilIDilIAgKi8KLmludGwtaW5uZXIgeyBmbGV4OiAxOyBvdmVyZmxvdy15OiBhdXRvOyBwYWRkaW5nOiAyOHB4IDMycHg7IH0KLmludGwtaGVybyB7CiAgYmFja2dyb3VuZDogdmFyKC0taW5rKTsKICBib3JkZXItcmFkaXVzOiA4cHg7CiAgcGFkZGluZzogMzJweCAzNnB4OwogIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiBoaWRkZW47CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGNvbG9yOiB2YXIoLS1wYXBlcik7Cn0KLmludGwtaGVybzo6YmVmb3JlIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogYWJzb2x1dGU7IGluc2V0OiAwOwogIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IGNlbnRlciwgcmdiYSgyMDEsMTQ3LDU4LDAuMTUpIDAlLCB0cmFuc3BhcmVudCA3MCUpOwp9Ci5pbnRsLWhlcm8gaDIgewogIGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7CiAgZm9udC1zaXplOiAycmVtOyBmb250LXdlaWdodDogNjAwOwogIG1hcmdpbi1ib3R0b206IDZweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLmludGwtaGVybyBwIHsgY29sb3I6IHJnYmEoMjQ2LDI0MSwyMzQsMC42KTsgZm9udC1zaXplOiAwLjlyZW07IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQouZ2xvYmUtYnRuIHsKICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7CiAgYmFja2dyb3VuZDogdmFyKC0tcnVzdCk7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiBub25lOwogIHBhZGRpbmc6IDEycHggMjhweDsgYm9yZGVyLXJhZGl1czogNHB4OwogIGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7CiAgZm9udC1zaXplOiAxLjFyZW07IGN1cnNvcjogcG9pbnRlcjsKICBtYXJnaW4tdG9wOiAyMHB4OyBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdHJhbnNpdGlvbjogYWxsIDAuMnM7Cn0KLmdsb2JlLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6ICM5YTNkMjA7IHRyYW5zZm9ybTogc2NhbGUoMS4wMik7IH0KLmdsb2JlLWJ0bi5zcGlubmluZyB7IGFuaW1hdGlvbjogc3Bpbi1idG4gMC42cyBlYXNlOyB9CkBrZXlmcmFtZXMgc3Bpbi1idG4geyAwJXt0cmFuc2Zvcm06c2NhbGUoMSl9IDUwJXt0cmFuc2Zvcm06c2NhbGUoMC45NSkgcm90YXRlKDNkZWcpfSAxMDAle3RyYW5zZm9ybTpzY2FsZSgxKX0gfQoKLmNvdW50cnktcmV2ZWFsIHsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogIGJvcmRlci1yYWRpdXM6IDZweDsKICBwYWRkaW5nOiAyNHB4IDI4cHg7CiAgbWFyZ2luLWJvdHRvbTogMTZweDsKICBhbmltYXRpb246IHJldmVhbEluIDAuNHMgZWFzZTsKfQpAa2V5ZnJhbWVzIHJldmVhbEluIHsgZnJvbXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDAuOTcpfSB0b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfSB9Ci5jb3VudHJ5LXJldmVhbCAuY3ItZmxhZyB7IGZvbnQtc2l6ZTogM3JlbTsgbWFyZ2luLWJvdHRvbTogOHB4OyB9Ci5jb3VudHJ5LXJldmVhbCAuY3ItbmFtZSB7IGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7IGZvbnQtc2l6ZTogMS44cmVtOyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiA0cHg7IH0KLmNvdW50cnktcmV2ZWFsIC5jci1yZWdpb24geyBmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogMC4wNmVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9Ci5pbnRsLWluZm8gewogIGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiAxNHB4OwogIG1hcmdpbi10b3A6IDE2cHg7Cn0KLmludGwtY2FyZCB7CiAgYmFja2dyb3VuZDogdmFyKC0tY3JlYW0pOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIHBhZGRpbmc6IDE0cHggMTZweDsKfQouaW50bC1jYXJkIGg0IHsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDAuNnJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMWVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xvcjogdmFyKC0tcnVzdCk7IG1hcmdpbi1ib3R0b206IDhweDsgfQouaW50bC1jYXJkIHAgeyBmb250LXNpemU6IDAuODJyZW07IGxpbmUtaGVpZ2h0OiAxLjU1OyBjb2xvcjogdmFyKC0taW5rKTsgfQoKLnVzZS1mb3ItdGh1cnNkYXktYnRuIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1zYWdlKTsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7CiAgcGFkZGluZzogOXB4IDIwcHg7IGJvcmRlci1yYWRpdXM6IDRweDsKICBmb250LWZhbWlseTogJ0RNIE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMC43MnJlbTsKICBsZXR0ZXItc3BhY2luZzogMC4wNmVtOyBjdXJzb3I6IHBvaW50ZXI7CiAgbWFyZ2luLXRvcDogMTRweDsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE4czsKfQoudXNlLWZvci10aHVyc2RheS1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAjNGE2MDQyOyB9CgouaW50bC1oaXN0b3J5IHsgbWFyZ2luLXRvcDogMjRweDsgfQouaW50bC1oaXN0b3J5IGgzIHsgZm9udC1mYW1pbHk6ICdDb3Jtb3JhbnQgR2FyYW1vbmQnLCBzZXJpZjsgZm9udC1zaXplOiAxLjFyZW07IG1hcmdpbi1ib3R0b206IDEycHg7IH0KLmNvdW50cnktbG9nIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDdweDsgfQouY291bnRyeS1waWxsIHsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICBwYWRkaW5nOiA0cHggMTJweDsgYm9yZGVyLXJhZGl1czogMjBweDsKICBmb250LXNpemU6IDAuNzhyZW07IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNXB4Owp9Ci5jb3VudHJ5LXBpbGwgLmNwLWRhdGUgeyBmb250LXNpemU6IDAuNjVyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsgfQoKLyog4pSA4pSAIFZJVklOTyDilIDilIAgKi8KLnZpdmluby1pbm5lciB7IGZsZXg6IDE7IG92ZXJmbG93LXk6IGF1dG87IHBhZGRpbmc6IDI0cHggMjhweDsgfQoudml2aW5vLXRvcGJhciB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgbWFyZ2luLWJvdHRvbTogMjBweDsgfQoudml2aW5vLXRvcGJhciBoMiB7IGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7IGZvbnQtc2l6ZTogMS41NXJlbTsgZm9udC13ZWlnaHQ6IDYwMDsgfQoKLnZpdmluby11cGxvYWQgewogIGJhY2tncm91bmQ6IHdoaXRlOwogIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXIpOwogIGJvcmRlci1yYWRpdXM6IDZweDsKICBwYWRkaW5nOiAyOHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE4czsKfQoudml2aW5vLXVwbG9hZDpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tcnVzdCk7IH0KCi52aXZpbm8tdXBsb2FkIC52dS1pY29uIHsgZm9udC1zaXplOiAyLjVyZW07IG1hcmdpbi1ib3R0b206IDEwcHg7IH0KLnZpdmluby11cGxvYWQgaDMgeyBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOyBmb250LXNpemU6IDEuMXJlbTsgbWFyZ2luLWJvdHRvbTogNnB4OyB9Ci52aXZpbm8tdXBsb2FkIHAgeyBmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWJvdHRvbTogMTRweDsgfQoKLnZpdmluby1wYXN0ZS1hcmVhIHsKICB3aWR0aDogMTAwJTsgbWluLWhlaWdodDogMTAwcHg7CiAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXIpOwogIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0tYm9yZGVyKTsKICBib3JkZXItcmFkaXVzOiA0cHg7CiAgcGFkZGluZzogMTBweCAxNHB4OwogIGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsKICBmb250LXNpemU6IDAuNzVyZW07CiAgcmVzaXplOiB2ZXJ0aWNhbDsKICBjb2xvcjogdmFyKC0taW5rKTsKICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9Ci52aXZpbm8tcGFzdGUtYXJlYTpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogdmFyKC0tcnVzdCk7IH0KCi5wYXJzZS1idG4gewogIGJhY2tncm91bmQ6IHZhcigtLXJ1c3QpOyBjb2xvcjogd2hpdGU7IGJvcmRlcjogbm9uZTsKICBwYWRkaW5nOiA4cHggMjBweDsgYm9yZGVyLXJhZGl1czogNHB4OwogIGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjdyZW07CiAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMThzOwp9Ci5wYXJzZS1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAjOWEzZDIwOyB9CgouY2VsbGFyLXN0YXRzIHsKICBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpOyBnYXA6IDEwcHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQouc3RhdC1jYXJkIHsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDE0cHggMTZweDsgdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5zdGF0LWNhcmQgLnNjLXZhbCB7IGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7IGZvbnQtc2l6ZTogMnJlbTsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6IHZhcigtLXJ1c3QpOyB9Ci5zdGF0LWNhcmQgLnNjLWxibCB7IGZvbnQtc2l6ZTogMC43cmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LWZhbWlseTogJ0RNIE1vbm8nLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiAwLjA2ZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KCi5ib3R0bGUtZ3JpZCB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIyMHB4LCAxZnIpKTsgZ2FwOiAxMHB4OyB9Ci5ib3R0bGUtY2FyZCB7CiAgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE4czsKfQouYm90dGxlLWNhcmQ6aG92ZXIgeyBib3gtc2hhZG93OiAwIDRweCAxNHB4IHZhcigtLXNoYWRvdy1tZCk7IH0KLmJjLW5hbWUgeyBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOyBmb250LXNpemU6IDAuOTVyZW07IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbi1ib3R0b206IDJweDsgbGluZS1oZWlnaHQ6IDEuMzsgfQouYmMtbWV0YSB7IGZvbnQtc2l6ZTogMC43MnJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyBtYXJnaW4tYm90dG9tOiA2cHg7IH0KLmJjLXJhdGluZyB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNHB4OyB9Ci5iYy1yYXRpbmcgLnN0YXJzIHsgY29sb3I6IHZhcigtLWdvbGQpOyBmb250LXNpemU6IDAuN3JlbTsgfQouYmMtcmF0aW5nIC5zY29yZSB7IGZvbnQtc2l6ZTogMC43MnJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQouYmMtcXR5IHsgZm9udC1zaXplOiAwLjdyZW07IGNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgcGFkZGluZzogMXB4IDZweDsgYm9yZGVyLXJhZGl1czogMnB4OyBmb250LWZhbWlseTogJ0RNIE1vbm8nLCBtb25vc3BhY2U7IH0KLmJjLXBhaXJpbmcgeyBmb250LXNpemU6IDAuNzJyZW07IGNvbG9yOiB2YXIoLS1zYWdlKTsgbWFyZ2luLXRvcDogNnB4OyBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcGFwZXIyKTsgcGFkZGluZy10b3A6IDZweDsgfQoKLnZpdmluby1maWx0ZXIgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDdweDsgZmxleC13cmFwOiB3cmFwOyBtYXJnaW4tYm90dG9tOiAxNHB4OyB9Ci52Zi1idG4gewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogIHBhZGRpbmc6IDRweCAxMnB4OyBib3JkZXItcmFkaXVzOiAyMHB4OwogIGZvbnQtc2l6ZTogMC43MnJlbTsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogdmFyKC0tbXV0ZWQpOwogIHRyYW5zaXRpb246IGFsbCAwLjE1czsKfQoudmYtYnRuOmhvdmVyLCAudmYtYnRuLmFjdGl2ZSB7IGJvcmRlci1jb2xvcjogdmFyKC0td2luZSk7IGNvbG9yOiB2YXIoLS13aW5lKTsgYmFja2dyb3VuZDogdmFyKC0td2luZS1zb2Z0KTsgfQoKLyog4pSA4pSAIFJFQ0lQRSBNT0RBTCDilIDilIAgKi8KLm1vZGFsLW92ZXJsYXkgewogIHBvc2l0aW9uOiBmaXhlZDsgaW5zZXQ6IDA7CiAgYmFja2dyb3VuZDogcmdiYSgyNCwyMCwxNSwwLjY1KTsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICB6LWluZGV4OiAxMDA7CiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7CiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlOwp9CkBrZXlmcmFtZXMgZmFkZUluIHsgZnJvbXtvcGFjaXR5OjB9IHRve29wYWNpdHk6MX0gfQoubW9kYWwtb3ZlcmxheS5oaWRkZW4geyBkaXNwbGF5OiBub25lOyB9Ci5tb2RhbCB7CiAgYmFja2dyb3VuZDogdmFyKC0tY3JlYW0pOwogIGJvcmRlci1yYWRpdXM6IDZweDsKICB3aWR0aDogOTAlOyBtYXgtd2lkdGg6IDY4MHB4OyBtYXgtaGVpZ2h0OiA4OHZoOwogIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBib3gtc2hhZG93OiAwIDIwcHggNjBweCByZ2JhKDI0LDIwLDE1LDAuMyk7CiAgYW5pbWF0aW9uOiBzbGlkZVVwIDAuMjVzIGVhc2U7Cn0KQGtleWZyYW1lcyBzbGlkZVVwIHsgZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMnB4KTtvcGFjaXR5OjB9IHRve3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApO29wYWNpdHk6MX0gfQoubW9kYWwtaGVhZGVyIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1pbmspOyBjb2xvcjogdmFyKC0tcGFwZXIpOwogIHBhZGRpbmc6IDE4cHggMjRweDsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGZsZXgtc2hyaW5rOiAwOwp9Ci5tb2RhbC1oZWFkZXIgaDIgeyBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOyBmb250LXNpemU6IDEuM3JlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDEuMzsgfQoubW9kYWwtaGVhZGVyIHAgeyBmb250LXNpemU6IDAuNzhyZW07IGNvbG9yOiByZ2JhKDI0NiwyNDEsMjM0LDAuNSk7IG1hcmdpbi10b3A6IDNweDsgfQoubW9kYWwtY2xvc2UgeyBiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IG5vbmU7IGNvbG9yOiByZ2JhKDI0NiwyNDEsMjM0LDAuNCk7IGZvbnQtc2l6ZTogMS4zcmVtOyBjdXJzb3I6IHBvaW50ZXI7IHBhZGRpbmc6IDAgNHB4OyBsaW5lLWhlaWdodDogMTsgfQoubW9kYWwtY2xvc2U6aG92ZXIgeyBjb2xvcjogdmFyKC0tcGFwZXIpOyB9Ci5tb2RhbC1ib2R5IHsgZmxleDogMTsgb3ZlcmZsb3cteTogYXV0bzsgcGFkZGluZzogMjJweCAyNHB4OyB9Ci5tb2RhbC1ib2R5Ojotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiA0cHg7IH0KLm1vZGFsLWJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyKTsgfQoKLnJlY2lwZS1zZWN0aW9uIHsgbWFyZ2luLWJvdHRvbTogMjBweDsgfQoucmVjaXBlLXNlY3Rpb24gaDMgeyBmb250LWZhbWlseTogJ0RNIE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMC42MnJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29sb3I6IHZhcigtLXJ1c3QpOyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9Ci5yZWNpcGUtc2VjdGlvbiB1bCwgLnJlY2lwZS1zZWN0aW9uIG9sIHsgcGFkZGluZy1sZWZ0OiAxOHB4OyB9Ci5yZWNpcGUtc2VjdGlvbiBsaSB7IG1hcmdpbi1ib3R0b206IDVweDsgZm9udC1zaXplOiAwLjg0cmVtOyBsaW5lLWhlaWdodDogMS41NTsgfQoucmVjaXBlLXNlY3Rpb24gcCB7IGZvbnQtc2l6ZTogMC44NHJlbTsgbGluZS1oZWlnaHQ6IDEuNjsgfQoKLndpbmUtcGFpcmluZy1ib3ggewogIGJhY2tncm91bmQ6IHZhcigtLWdvbGQtc29mdCk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjAxLDE0Nyw1OCwwLjI1KTsKICBib3JkZXItcmFkaXVzOiA0cHg7IHBhZGRpbmc6IDEycHggMTZweDsKfQoud2luZS1wYWlyaW5nLWJveCBoNCB7IGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7IGZvbnQtc2l6ZTogMXJlbTsgY29sb3I6IHZhcigtLWdvbGQpOyBtYXJnaW4tYm90dG9tOiA1cHg7IH0KLndpbmUtcGFpcmluZy1ib3ggcCB7IGZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0taW5rKTsgfQoKLnJlY2lwZS1sb2FkaW5nIHsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiA0MHB4IDIwcHg7IH0KLnJlY2lwZS1sb2FkaW5nIC5ybC1pY29uIHsgZm9udC1zaXplOiAycmVtOyBtYXJnaW4tYm90dG9tOiAxMHB4OyBhbmltYXRpb246IHB1bHNlIDEuNXMgaW5maW5pdGU7IH0KQGtleWZyYW1lcyBwdWxzZSB7IDAlLDEwMCV7b3BhY2l0eTowLjR9IDUwJXtvcGFjaXR5OjF9IH0KLnJlY2lwZS1sb2FkaW5nIHAgeyBmb250LXNpemU6IDAuODRyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KCi5zZXR0aW5ncy1pbm5lciB7IGZsZXg6IDE7IG92ZXJmbG93LXk6IGF1dG87IHBhZGRpbmc6IDI0cHggMjhweDsgbWF4LXdpZHRoOiA2ODBweDsgfQouc2V0dGluZ3MtaW5uZXIgaDIgeyBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOyBmb250LXNpemU6IDEuNXJlbTsgbWFyZ2luLWJvdHRvbTogMjBweDsgfQouc2cgeyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAxOHB4IDIycHg7IG1hcmdpbi1ib3R0b206IDE0cHg7IH0KLnNnIGgzIHsgZm9udC1mYW1pbHk6ICdETSBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDAuNjJyZW07IGxldHRlci1zcGFjaW5nOiAwLjEyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1ydXN0KTsgbWFyZ2luLWJvdHRvbTogMTJweDsgfQouc2ctcm93IHsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IG1hcmdpbi1ib3R0b206IDhweDsgfQouc2ctaW5wdXQgewogIGZsZXg6IDE7CiAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXIpOyBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgYm9yZGVyLXJhZGl1czogNHB4OyBwYWRkaW5nOiA3cHggMTFweDsKICBmb250LWZhbWlseTogJ0RNIFNhbnMnLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDAuODJyZW07IGNvbG9yOiB2YXIoLS1pbmspOwp9Ci5zZy1pbnB1dDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogdmFyKC0tcnVzdCk7IH0KLnNnLWFkZCB7IGJhY2tncm91bmQ6IHZhcigtLXJ1c3QpOyBjb2xvcjogd2hpdGU7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogN3B4IDE0cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDAuOHJlbTsgfQoudGFnLWdyb3VwIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDVweDsgbWFyZ2luLXRvcDogNnB4OyB9Ci5yZW1vdmFibGUtdGFnIHsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDRweDsKICBwYWRkaW5nOiAzcHggOXB4OyBib3JkZXItcmFkaXVzOiAyMHB4OwogIGZvbnQtc2l6ZTogMC43NnJlbTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYmFja2dyb3VuZDogdmFyKC0tcGFwZXIyKTsKfQoucmVtb3ZhYmxlLXRhZyBidXR0b24geyBiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjc4cmVtOyBwYWRkaW5nOiAwIDJweDsgfQoucmVtb3ZhYmxlLXRhZyBidXR0b246aG92ZXIgeyBjb2xvcjogdmFyKC0tcnVzdCk7IH0KLnNhdmUtYnRuIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgY29sb3I6IHZhcigtLXBhcGVyKTsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiA5cHggMjJweDsgYm9yZGVyLXJhZGl1czogNHB4OyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtZmFtaWx5OiAnRE0gTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjdyZW07IGxldHRlci1zcGFjaW5nOiAwLjA2ZW07IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xOHM7IG1hcmdpbi10b3A6IDZweDsgfQouc2F2ZS1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ydXN0KTsgfQoKLmVtcHR5LXN0YXRlIHsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiA2MHB4IDIwcHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KLmVtcHR5LXN0YXRlIC5lcy1pY29uIHsgZm9udC1zaXplOiAzcmVtOyBtYXJnaW4tYm90dG9tOiAxNHB4OyB9Ci5lbXB0eS1zdGF0ZSBoMyB7IGZvbnQtZmFtaWx5OiAnQ29ybW9yYW50IEdhcmFtb25kJywgc2VyaWY7IGZvbnQtc2l6ZTogMS4ycmVtOyBjb2xvcjogdmFyKC0taW5rKTsgbWFyZ2luLWJvdHRvbTogNnB4OyB9Ci5lbXB0eS1zdGF0ZSBwIHsgZm9udC1zaXplOiAwLjg0cmVtOyB9CgpAbWVkaWEgcHJpbnQgewogIGhlYWRlciwgLnNpZGViYXIsIC5jaGF0LWZvb3RlciwgLnF1aWNrLXJvdywgLndlZWstYnRuLCAubmF2LWJ0biwgLmhlYWRlci1uYXYgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICBib2R5IHsgaGVpZ2h0OiBhdXRvOyBvdmVyZmxvdzogdmlzaWJsZTsgfQogIC5hcHAgeyBoZWlnaHQ6IGF1dG87IG92ZXJmbG93OiB2aXNpYmxlOyB9CiAgLnBhbmVsIHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyB9CiAgI2NoYXQtcGFuZWwsICNpbnRsLXBhbmVsLCAjdml2aW5vLXBhbmVsLCAjc2V0dGluZ3MtcGFuZWwgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAud2Vlay1pbm5lciB7IG92ZXJmbG93OiB2aXNpYmxlOyB9CiAgLndlZWstZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsMWZyKTsgfQogIC50aWxlIHsgYnJlYWstaW5zaWRlOiBhdm9pZDsgfQp9Cjwvc3R5bGU+Cgo8IS0tIE9wdGlvbmFsOiBsb2FkIHlvdXIgZm9udHMgKEZ1bm5lbFBhZ2VzIHNvbWV0aW1lcyBibG9ja3MgZXh0ZXJuYWwgZm9udHM7IGlmIGl0IGRvZXMsIHJlbW92ZSB0aGlzKSAtLT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Db3Jtb3JhbnQrR2FyYW1vbmQ6aXRhbCx3Z2h0QDAsNDAwOzAsNjAwOzAsNzAwOzEsNDAwOzEsNjAwJmZhbWlseT1ETStTYW5zOndnaHRAMzAwOzQwMDs1MDAmZmFtaWx5PURNK01vbm86d2dodEA0MDA7NTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KCjxoZWFkZXI+CiAgPGRpdiBjbGFzcz0ibG9nbyI+CiAgICA8c3BhbiBjbGFzcz0ibG9nby10aGUiPnRoZTwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJsb2dvLWtpdGNoZW4iPktpdGNoZW48L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0ibG9nby1kb3QiPsK3PC9zcGFuPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImhlYWRlci1uYXYiPgogICAgPGJ1dHRvbiBjbGFzcz0ibmF2LWJ0biBhY3RpdmUiIG9uY2xpY2s9Im5hdignY2hhdCcsdGhpcykiPkNoYXQ8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4iIG9uY2xpY2s9Im5hdignd2VlaycsdGhpcykiPlRoaXMgV2VlazwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmF2LWJ0biIgb25jbGljaz0ibmF2KCdpbnRsJyx0aGlzKSI+SW50J2wgVGh1cnNkYXlzPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuYXYtYnRuIiBvbmNsaWNrPSJuYXYoJ3ZpdmlubycsdGhpcykiPkNlbGxhcjwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmF2LWJ0biIgb25jbGljaz0ibmF2KCdzZXR0aW5ncycsdGhpcykiPlByb2ZpbGU8L2J1dHRvbj4KICA8L2Rpdj4KPC9oZWFkZXI+Cgo8ZGl2IGNsYXNzPSJhcHAiPgogIDxkaXYgY2xhc3M9InNpZGViYXIiPgogICAgPGRpdiBjbGFzcz0ic2Itc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNiLWxhYmVsIj5SZXN0cmljdGlvbnM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2ItdGFncyIgaWQ9InNiLXJlc3RyaWN0aW9ucyI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNiLXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzYi1sYWJlbCI+Q3Vpc2luZXM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2ItdGFncyIgaWQ9InNiLWN1aXNpbmVzIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ic2Itc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNiLWxhYmVsIj5GcmVlemVyICYgUGFudHJ5PC9kaXY+CiAgICAgIDxkaXYgaWQ9InNiLWludmVudG9yeSIgc3R5bGU9Im1heC1oZWlnaHQ6MjAwcHg7b3ZlcmZsb3cteTphdXRvO21hcmdpbi1ib3R0b206OHB4OyI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFkZC1pbnYiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW52LWlucHV0IiBwbGFjZWhvbGRlcj0iQWRkIGl0ZW0uLi4iIG9ua2V5ZG93bj0iaWYoZXZlbnQua2V5PT09J0VudGVyJylhZGRJbnYoKSI+CiAgICAgICAgPHNlbGVjdCBpZD0iaW52LWNhdCI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJiZWVmIj7wn6WpPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwb3JrIj7wn5C3PC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjaGlja2VuIj7wn42XPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsYW1iIj7wn5CRPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmaXNoIj7wn5CfPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwYW50cnkiPvCfq5k8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImZyZXNoIj7wn6WsPC9vcHRpb24+CiAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRkLWludi1idG4iIG9uY2xpY2s9ImFkZEludigpIj4rPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzYi1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2ItbGFiZWwiPlBhc3QgTWVudXM8L2Rpdj4KICAgICAgPGRpdiBpZD0ic2ItcGFzdCI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNiLXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzYi1sYWJlbCI+SW50J2wgVGh1cnNkYXlzIExvZzwvZGl2PgogICAgICA8ZGl2IGlkPSJzYi1pbnRsLWxvZyI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ibWFpbiI+CiAgICA8ZGl2IGlkPSJjaGF0LXBhbmVsIiBjbGFzcz0icGFuZWwgYWN0aXZlIj4KICAgICAgPGRpdiBjbGFzcz0iY2hhdC1tc2dzIiBpZD0iY2hhdC1tc2dzIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2hhdC1mb290ZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLXJvdyI+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJxcCIgb25jbGljaz0icXAoJ1BsYW4gbXkgZnVsbCB3ZWVrJykiPvCfk4UgUGxhbiBteSB3ZWVrPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJxcCIgb25jbGljaz0icXAoJ1NhdHVyZGF5IHRpbmtlcmluZyBtZWFsIHdpdGggd2luZSBwYWlyaW5nIGZyb20gbXkgY2VsbGFyJykiPvCfjbcgU2F0dXJkYXkgKyBjZWxsYXIgcGFpcmluZzwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icXAiIG9uY2xpY2s9InFwKCdXaGF0IGNhbiBJIG1ha2UgdG9uaWdodCBmcm9tIG15IGZyZWV6ZXI/JykiPvCfp4ogVXNlIG15IGZyZWV6ZXI8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InFwIiBvbmNsaWNrPSJxcCgnRnJpZGF5IHdpbmcgbmlnaHQg4oCUIHR3byBjcmVhdGl2ZSBmbGF2b3VyIGNvbWJvcycpIj7wn42XIFdpbmcgZmxhdm91cnM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InFwIiBvbmNsaWNrPSJxcCgnU3VnZ2VzdCBhIGdsdXRlbi1mcmVlIHdlZWtuaWdodCBtZWFsIHVuZGVyIDMwIG1pbnV0ZXMnKSI+4pqhIFF1aWNrIHdlZWtuaWdodDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXJvdyI+CiAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImNoYXQtaW5wdXQiIGlkPSJjaGF0LWlucHV0IiBwbGFjZWhvbGRlcj0iUGxhbiBteSB3ZWVrLCBwYWlyIGEgd2luZSwgYnVpbGQgYSByZWNpcGUuLi4iIHJvd3M9IjEiCiAgICAgICAgICAgIG9ua2V5ZG93bj0iaWYoZXZlbnQua2V5PT09J0VudGVyJyYmIWV2ZW50LnNoaWZ0S2V5KXtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3NlbmQoKX0iCiAgICAgICAgICAgIG9uaW5wdXQ9InRoaXMuc3R5bGUuaGVpZ2h0PSdhdXRvJzt0aGlzLnN0eWxlLmhlaWdodD10aGlzLnNjcm9sbEhlaWdodCsncHgnIj48L3RleHRhcmVhPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2VuZC1idG4iIGlkPSJzZW5kLWJ0biIgb25jbGljaz0ic2VuZCgpIj7ihpE8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJ3ZWVrLXBhbmVsIiBjbGFzcz0icGFuZWwiPgogICAgICA8ZGl2IGNsYXNzPSJ3ZWVrLWlubmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWVrLXRvcGJhciI+CiAgICAgICAgICA8aDI+V2VlayBvZiA8ZW0gaWQ9IndlZWstbGFiZWwiPuKAlDwvZW0+PC9oMj4KICAgICAgICAgIDxkaXYgY2xhc3M9IndlZWstYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IndlZWstYnRuIHNlY29uZGFyeSIgb25jbGljaz0ibmF2KCdjaGF0Jyxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmF2LWJ0bicpWzBdKTtxcCgnUGxhbiBteSB3ZWVrJykiPuKGuyBSZWdlbmVyYXRlPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IndlZWstYnRuIiBvbmNsaWNrPSJ3aW5kb3cucHJpbnQoKSI+4oqeIFByaW50PC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJ3ZWVrLWdyaWQiIGNsYXNzPSJ3ZWVrLWdyaWQiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InNob3AtY2FyZCIgY2xhc3M9InNob3AtY2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgogICAgICAgICAgPGgzPvCfm5IgU2hvcHBpbmcgTGlzdDwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9wLWNvbHMiIGlkPSJzaG9wLWNvbHMiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IndlZWstZW1wdHkiIGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlcy1pY29uIj7wn42977iPPC9kaXY+CiAgICAgICAgICA8aDM+Tm8gbWVudSBwbGFubmVkIHlldDwvaDM+CiAgICAgICAgICA8cD5IZWFkIHRvIENoYXQgYW5kIHNheSAiUGxhbiBteSB3ZWVrIjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJpbnRsLXBhbmVsIiBjbGFzcz0icGFuZWwiPgogICAgICA8ZGl2IGNsYXNzPSJpbnRsLWlubmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnRsLWhlcm8iPgogICAgICAgICAgPGgyPvCfjI0gSW50ZXJuYXRpb25hbCBUaHVyc2RheXM8L2gyPgogICAgICAgICAgPHA+U3BpbiB0aGUgZ2xvYmUuIENvb2sgdGhlIHdvcmxkLiBPbmUgY291bnRyeSBhdCBhIHRpbWUuPC9wPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ2xvYmUtYnRuIiBpZD0iZ2xvYmUtYnRuIiBvbmNsaWNrPSJzcGluR2xvYmUoKSI+CiAgICAgICAgICAgIDxzcGFuIGlkPSJnbG9iZS1pY29uIj7wn4yQPC9zcGFuPiBTcGluIHRoZSBHbG9iZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iY291bnRyeS1yZXN1bHQiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImludGwtaGlzdG9yeSIgaWQ9ImludGwtaGlzdG9yeS1zZWN0aW9uIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgICAgICA8aDM+Q291bnRyaWVzIFZpc2l0ZWQ8L2gzPgogICAgICAgICAgPGRpdiBjbGFzcz0iY291bnRyeS1sb2ciIGlkPSJjb3VudHJ5LWxvZyI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0idml2aW5vLXBhbmVsIiBjbGFzcz0icGFuZWwiPgogICAgICA8ZGl2IGNsYXNzPSJ2aXZpbm8taW5uZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InZpdmluby10b3BiYXIiPgogICAgICAgICAgPGgyPldpbmUgQ2VsbGFyIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjAuOXJlbTtmb250LXdlaWdodDo0MDA7IiBpZD0iY2VsbGFyLWNvdW50Ij48L3NwYW4+PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJjZWxsYXItbG9hZGVkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjZWxsYXItc3RhdHMiIGlkPSJjZWxsYXItc3RhdHMiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idml2aW5vLWZpbHRlciIgaWQ9InZpdmluby1maWx0ZXIiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYm90dGxlLWdyaWQiIGlkPSJib3R0bGUtZ3JpZCI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iY2VsbGFyLWVtcHR5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InZpdmluby11cGxvYWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2dS1pY29uIj7wn423PC9kaXY+CiAgICAgICAgICAgIDxoMz5JbXBvcnQgWW91ciBDZWxsYXI8L2gzPgogICAgICAgICAgICA8cD5QYXN0ZSB5b3VyIFZpdmlubyBDU1YgZXhwb3J0IGJlbG93LiBHbyB0byBWaXZpbm8g4oaSIE15IFdpbmVzIOKGkiBFeHBvcnQgdG8gQ1NWLjwvcD4KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJ2aXZpbm8tcGFzdGUtYXJlYSIgaWQ9InZpdmluby1jc3YiIHBsYWNlaG9sZGVyPSJQYXN0ZSBDU1YgZGF0YSBoZXJlLi4uJiMxMDtXaW5lIE5hbWUsV2luZXJ5LFJhdGluZyxRdWFudGl0eSxWaW50YWdlLi4uIj48L3RleHRhcmVhPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwYXJzZS1idG4iIG9uY2xpY2s9InBhcnNlQ2VsbGFyKCkiPkltcG9ydCBDZWxsYXI8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiIHN0eWxlPSJwYWRkaW5nOjIwcHggMDsiPgogICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjAuOHJlbTsiPk9yIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImxvYWRTYW1wbGVDZWxsYXIoKTtyZXR1cm4gZmFsc2U7IiBzdHlsZT0iY29sb3I6dmFyKC0tcnVzdCk7Ij5sb2FkIGEgc2FtcGxlIGNlbGxhcjwvYT4gdG8gdHJ5IGl0IG91dC48L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzZXR0aW5ncy1wYW5lbCIgY2xhc3M9InBhbmVsIj4KICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtaW5uZXIiPgogICAgICAgIDxoMj5Ib3VzZWhvbGQgUHJvZmlsZTwvaDI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2ciPgogICAgICAgICAgPGgzPkRpZXRhcnkgUmVzdHJpY3Rpb25zPC9oMz4KICAgICAgICAgIDxkaXYgY2xhc3M9InNnLXJvdyI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0ic2ctaW5wdXQiIGlkPSJuZXctciIgcGxhY2Vob2xkZXI9ImUuZy4gbnV0LWZyZWUuLi4iIG9ua2V5ZG93bj0iaWYoZXZlbnQua2V5PT09J0VudGVyJylhZGRUYWcoJ3InKSI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InNnLWFkZCIgb25jbGljaz0iYWRkVGFnKCdyJykiPkFkZDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctZ3JvdXAiIGlkPSJyLXRhZ3MiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNnIj4KICAgICAgICAgIDxoMz5GYXZvdXJpdGUgQ3Vpc2luZXM8L2gzPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2ctcm93Ij4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJzZy1pbnB1dCIgaWQ9Im5ldy1mYyIgcGxhY2Vob2xkZXI9ImUuZy4gS29yZWFuLCBJdGFsaWFuLi4uIiBvbmtleWRvd249ImlmKGV2ZW50LmtleT09PSdFbnRlcicpYWRkVGFnKCdmYycpIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2ctYWRkIiBvbmNsaWNrPSJhZGRUYWcoJ2ZjJykiPkFkZDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctZ3JvdXAiIGlkPSJmYy10YWdzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZyI+CiAgICAgICAgICA8aDM+Q3Vpc2luZXMgdG8gRXhwbG9yZTwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZy1yb3ciPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9InNnLWlucHV0IiBpZD0ibmV3LWVjIiBwbGFjZWhvbGRlcj0iZS5nLiBHZW9yZ2lhbiwgQmFzcXVlLi4uIiBvbmtleWRvd249ImlmKGV2ZW50LmtleT09PSdFbnRlcicpYWRkVGFnKCdlYycpIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2ctYWRkIiBvbmNsaWNrPSJhZGRUYWcoJ2VjJykiPkFkZDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctZ3JvdXAiIGlkPSJlYy10YWdzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZyI+CiAgICAgICAgICA8aDM+V2luZSBQcmVmZXJlbmNlczwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZy1yb3ciPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9InNnLWlucHV0IiBpZD0ibmV3LXdwIiBwbGFjZWhvbGRlcj0iZS5nLiBDw7R0ZXMgZHUgUmjDtG5lLi4uIiBvbmtleWRvd249ImlmKGV2ZW50LmtleT09PSdFbnRlcicpYWRkVGFnKCd3cCcpIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2ctYWRkIiBvbmNsaWNrPSJhZGRUYWcoJ3dwJykiPkFkZDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctZ3JvdXAiIGlkPSJ3cC10YWdzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJzYXZlLWJ0biIgb25jbGljaz0ic2F2ZVNldHRpbmdzKCkiPlNhdmUgUHJvZmlsZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9Im1vZGFsLW92ZXJsYXkgaGlkZGVuIiBpZD0ibW9kYWwtb3ZlcmxheSIgb25jbGljaz0iaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbG9zZU1vZGFsKCkiPgogIDxkaXYgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgyIGlkPSJtb2RhbC10aXRsZSI+UmVjaXBlPC9oMj4KICAgICAgICA8cCBpZD0ibW9kYWwtc3VidGl0bGUiPjwvcD4KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLWNsb3NlIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCkiPuKclTwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5IiBpZD0ibW9kYWwtYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9InJlY2lwZS1sb2FkaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJybC1pY29uIj7wn5Go4oCN8J+NszwvZGl2PgogICAgICAgIDxwPkJ1aWxkaW5nIHlvdXIgcmVjaXBlLi4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxzY3JpcHQ+Ci8qIFN0b3JhZ2U6IEZ1bm5lbFBhZ2VzLXNhZmUgKi8KY29uc3QgU1RPUkFHRV9LRVkgPSAna2l0Y2hlbi12Mic7CmFzeW5jIGZ1bmN0aW9uIGxvYWRTKCl7IHRyeXsgY29uc3QgcmF3PWxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTsgaWYocmF3KSBPYmplY3QuYXNzaWduKFMsIEpTT04ucGFyc2UocmF3KSk7IH1jYXRjaChlKXt9IH0KYXN5bmMgZnVuY3Rpb24gc2F2ZVMoKXsgdHJ5eyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoUykpOyB9Y2F0Y2goZSl7fSB9CgovLyDilIDilIDilIAgU1RBVEUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmNvbnN0IFMgPSB7CiAgcmVzdHJpY3Rpb25zOiBbJ2dsdXRlbi1mcmVlJywnbGVndW1lLWZyZWUnLCdlZ2ctZnJlZSddLAogIGZhdkN1aXNpbmVzOiBbJ0l0YWxpYW4nLCdGcmVuY2gnLCdLb3JlYW4nLCdNZXhpY2FuJ10sCiAgZXhwbG9yZUN1aXNpbmVzOiBbJ01vcm9jY2FuJywnR2VvcmdpYW4nLCdCYXNxdWUnXSwKICB3aW5lUHJlZnM6IFsnQ8O0dGVzIGR1IFJow7RuZScsJ1Jpb2phIFJlc2VydmEnLCdBcmdlbnRpbmUgTWFsYmVjJywnTmFwYSBDYWJlcm5ldCddLAogIGludmVudG9yeTogWwogICAge25hbWU6J2dyb3VuZCBiZWVmJyxjYXQ6J2JlZWYnfSx7bmFtZTonYmVlZiByb2FzdCcsY2F0OidiZWVmJ30sCiAgICB7bmFtZTonZ3JvdW5kIHBvcmsnLGNhdDoncG9yayd9LHtuYW1lOidwb3JrIHNob3VsZGVyJyxjYXQ6J3BvcmsnfSwKICAgIHtuYW1lOidjaGlja2VuIHRoaWdocycsY2F0OidjaGlja2VuJ30se25hbWU6J3dob2xlIGNoaWNrZW4nLGNhdDonY2hpY2tlbid9LAogICAge25hbWU6J2dyb3VuZCBsYW1iJyxjYXQ6J2xhbWInfSx7bmFtZTonbGFtYiBzaG91bGRlcicsY2F0OidsYW1iJ30sCiAgICB7bmFtZTonc2FsbW9uJyxjYXQ6J2Zpc2gnfSx7bmFtZTondGFtYXJpJyxjYXQ6J3BhbnRyeSd9LAogICAge25hbWU6J3JpY2UnLGNhdDoncGFudHJ5J30se25hbWU6J2Nvcm4gdG9ydGlsbGFzJyxjYXQ6J3BhbnRyeSd9LAogIF0sCiAgcGFzdE1lbnVzOiBbXSwKICBpbnRsSGlzdG9yeTogW10sCiAgY2VsbGFyOiBbXSwKICBjdXJyZW50TWVudTogbnVsbCwKICBjdXJyZW50U2hvcDogbnVsbCwKICBjaGF0SGlzdG9yeTogW10KfTsKCi8vIOKUgOKUgOKUgCBJTklUIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphc3luYyBmdW5jdGlvbiBpbml0KCkgewogIGF3YWl0IGxvYWRTKCk7CiAgcmVuZGVyU2lkZWJhcigpOwogIHJlbmRlclNldHRpbmdzKCk7CiAgcmVuZGVyV2Vla0dyaWQoKTsKICByZW5kZXJDZWxsYXIoKTsKICByZW5kZXJJbnRsSGlzdG9yeSgpOwogIHNldFdlZWtMYWJlbCgpOwoKICBpZiAoIVMuY2hhdEhpc3RvcnkubGVuZ3RoKSB7CiAgICBib3RNc2coYDxoMj5XZWxjb21lIHRvIFRoZSBLaXRjaGVuIPCfkajigI3wn42zPC9oMj4KPHA+WW91ciBwZXJzb25hbCBtZW51IHBsYW5uaW5nIGFnZW50IOKAlCB1cGdyYWRlZC4gSSBrbm93IHlvdXIgaG91c2Vob2xkLCB5b3VyIHJlc3RyaWN0aW9ucywgeW91ciBmcmVlemVyLCBhbmQgbm93IHlvdXIgY2VsbGFyLjwvcD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6OHB4OyI+PHN0cm9uZz5XaGF0J3MgbmV3Ojwvc3Ryb25nPiBjbGljayBhbnkgbWVhbCB0aWxlIHRvIGdldCB0aGUgZnVsbCByZWNpcGUsIHNwaW4gdGhlIGdsb2JlIGZvciBJbnRlcm5hdGlvbmFsIFRodXJzZGF5cywgaW1wb3J0IHlvdXIgVml2aW5vIGNlbGxhciBmb3IgcmVhbC1ib3R0bGUgcGFpcmluZ3MsIGFuZCBJIHRyYWNrIHBhc3QgbWVudXMgdG8ga2VlcCB0aGluZ3MgZnJlc2ggd2VlayB0byB3ZWVrLjwvcD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6OHB4OyI+UmVhZHkgdG8gcGxhbj88L3A+YCwKICAgIFsnUGxhbiBteSB3ZWVrJywnU2F0dXJkYXkgbWVhbCArIGNlbGxhciBwYWlyaW5nJywnU3BpbiBJbnRcJ2wgVGh1cnNkYXlzJywnV2luZyBmbGF2b3VycyBGcmlkYXknXSk7CiAgfSBlbHNlIHsKICAgIFMuY2hhdEhpc3RvcnkuZm9yRWFjaChtID0+IG0ucm9sZT09PSd1c2VyJyA/IHVzZXJCdWJibGUobS5jb250ZW50KSA6IGJvdEJ1YmJsZShtLmNvbnRlbnQpKTsKICB9Cn0KCmZ1bmN0aW9uIHNldFdlZWtMYWJlbCgpIHsKICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLCBkYXkgPSBub3cuZ2V0RGF5KCk7CiAgY29uc3QgbW9uID0gbmV3IERhdGUobm93KTsKICBtb24uc2V0RGF0ZShub3cuZ2V0RGF0ZSgpIC0gKGRheSA9PT0gMCA/IDYgOiBkYXkgLSAxKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlZWstbGFiZWwnKS50ZXh0Q29udGVudCA9IG1vbi50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUNBJyx7bW9udGg6J2xvbmcnLGRheTonbnVtZXJpYyd9KTsKfQoKLy8g4pSA4pSA4pSAIE5BViDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gbmF2KGlkLCBidG4pIHsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucGFuZWwnKS5mb3JFYWNoKHAgPT4gcC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5hdi1idG4nKS5mb3JFYWNoKGIgPT4gYi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrJy1wYW5lbCcpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogIGlmIChidG4pIGJ0bi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKfQoKLy8g4pSA4pSA4pSAIFNJREVCQVIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlclNpZGViYXIoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NiLXJlc3RyaWN0aW9ucycpLmlubmVySFRNTCA9IFMucmVzdHJpY3Rpb25zLm1hcChyPT5gPHNwYW4gY2xhc3M9InNiLXRhZyByIj4ke3J9PC9zcGFuPmApLmpvaW4oJycpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYi1jdWlzaW5lcycpLmlubmVySFRNTCA9IFsKICAgIC4uLlMuZmF2Q3Vpc2luZXMubWFwKGM9PmA8c3BhbiBjbGFzcz0ic2ItdGFnIGMiPiR7Y308L3NwYW4+YCksCiAgICAuLi5TLmV4cGxvcmVDdWlzaW5lcy5tYXAoYz0+YDxzcGFuIGNsYXNzPSJzYi10YWcgZSI+4oaXJHtjfTwvc3Bhbj5gKQogIF0uam9pbignJyk7CgogIGNvbnN0IGludiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYi1pbnZlbnRvcnknKTsKICBpbnYuaW5uZXJIVE1MID0gUy5pbnZlbnRvcnkubWFwKChpdCxpKT0+YAogICAgPGRpdiBjbGFzcz0iaW52LXJvdyI+CiAgICAgIDxzcGFuPiR7aXQubmFtZX08L3NwYW4+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDsiPgogICAgICAgIDxzcGFuIGNsYXNzPSJpbnYtY2F0LWJhZGdlIj4ke2l0LmNhdH08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW52LXJlbW92ZSIgb25jbGljaz0icmVtb3ZlSW52KCR7aX0pIj7DlzwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmApLmpvaW4oJycpOwoKICBjb25zdCBwYXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NiLXBhc3QnKTsKICBwYXN0LmlubmVySFRNTCA9IFMucGFzdE1lbnVzLmxlbmd0aCA/IFMucGFzdE1lbnVzLnNsaWNlKC01KS5yZXZlcnNlKCkubWFwKG09PgogICAgYDxkaXYgY2xhc3M9InBhc3QtZW50cnkiPjxkaXYgY2xhc3M9InBhc3QtZGF0ZSI+JHttLmRhdGV9PC9kaXY+JHttLnN1bW1hcnl9PC9kaXY+YCkuam9pbignJykgOgogICAgYDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTowLjcycmVtO2NvbG9yOnJnYmEoMjQ2LDI0MSwyMzQsMC4zKTsiPk5vbmUgeWV0LjwvZGl2PmA7CgogIGNvbnN0IGludGxMb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2ItaW50bC1sb2cnKTsKICBpbnRsTG9nLmlubmVySFRNTCA9IFMuaW50bEhpc3RvcnkubGVuZ3RoID8gUy5pbnRsSGlzdG9yeS5zbGljZSgtNSkucmV2ZXJzZSgpLm1hcChjPT4KICAgIGA8ZGl2IGNsYXNzPSJwYXN0LWVudHJ5Ij48ZGl2IGNsYXNzPSJwYXN0LWRhdGUiPiR7Yy5kYXRlfTwvZGl2PiR7Yy5mbGFnfSAke2MubmFtZX08L2Rpdj5gKS5qb2luKCcnKSA6CiAgICBgPGRpdiBzdHlsZT0iZm9udC1zaXplOjAuNzJyZW07Y29sb3I6cmdiYSgyNDYsMjQxLDIzNCwwLjMpOyI+Tm8gY291bnRyaWVzIHlldC48L2Rpdj5gOwp9CgpmdW5jdGlvbiBhZGRJbnYoKSB7CiAgY29uc3QgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnYtaW5wdXQnKS52YWx1ZS50cmltKCk7CiAgY29uc3QgY2F0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludi1jYXQnKS52YWx1ZTsKICBpZiAoIXYpIHJldHVybjsKICBTLmludmVudG9yeS5wdXNoKHtuYW1lOnYsY2F0fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludi1pbnB1dCcpLnZhbHVlID0gJyc7CiAgcmVuZGVyU2lkZWJhcigpOyBzYXZlUygpOwp9CmZ1bmN0aW9uIHJlbW92ZUludihpKSB7IFMuaW52ZW50b3J5LnNwbGljZShpLDEpOyByZW5kZXJTaWRlYmFyKCk7IHNhdmVTKCk7IH0KCi8vIOKUgOKUgOKUgCBTRVRUSU5HUyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY29uc3QgdGFnTWFwID0gewogIHI6IHthcnI6J3Jlc3RyaWN0aW9ucycsIGlucHV0SWQ6J25ldy1yJywgdGFnSWQ6J3ItdGFncyd9LAogIGZjOiB7YXJyOidmYXZDdWlzaW5lcycsIGlucHV0SWQ6J25ldy1mYycsIHRhZ0lkOidmYy10YWdzJ30sCiAgZWM6IHthcnI6J2V4cGxvcmVDdWlzaW5lcycsIGlucHV0SWQ6J25ldy1lYycsIHRhZ0lkOidlYy10YWdzJ30sCiAgd3A6IHthcnI6J3dpbmVQcmVmcycsIGlucHV0SWQ6J25ldy13cCcsIHRhZ0lkOid3cC10YWdzJ30sCn07CgpmdW5jdGlvbiByZW5kZXJTZXR0aW5ncygpIHsKICBPYmplY3QuZW50cmllcyh0YWdNYXApLmZvckVhY2goKFtrZXksIGNmZ10pID0+IHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNmZy50YWdJZCkuaW5uZXJIVE1MID0gU1tjZmcuYXJyXS5tYXAodj0+YAogICAgICA8ZGl2IGNsYXNzPSJyZW1vdmFibGUtdGFnIj4ke3Z9CiAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJyZW1vdmVUYWcoJyR7a2V5fScsJyR7di5yZXBsYWNlKC8nL2csIlxcJyIpfScpIj7DlzwvYnV0dG9uPgogICAgICA8L2Rpdj5gKS5qb2luKCcnKTsKICB9KTsKfQpmdW5jdGlvbiBhZGRUYWcoa2V5KSB7CiAgY29uc3QgY2ZnID0gdGFnTWFwW2tleV07CiAgY29uc3QgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNmZy5pbnB1dElkKS52YWx1ZS50cmltKCk7CiAgaWYgKHYgJiYgIVNbY2ZnLmFycl0uaW5jbHVkZXModikpIHsgU1tjZmcuYXJyXS5wdXNoKHYpOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjZmcuaW5wdXRJZCkudmFsdWU9Jyc7IHJlbmRlclNldHRpbmdzKCk7IHJlbmRlclNpZGViYXIoKTsgc2F2ZVMoKTsgfQp9CmZ1bmN0aW9uIHJlbW92ZVRhZyhrZXksIHYpIHsgY29uc3QgY2ZnPXRhZ01hcFtrZXldOyBTW2NmZy5hcnJdPVNbY2ZnLmFycl0uZmlsdGVyKHg9PnghPT12KTsgcmVuZGVyU2V0dGluZ3MoKTsgcmVuZGVyU2lkZWJhcigpOyBzYXZlUygpOyB9CmZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKICBzYXZlUygpOwogIGNvbnN0IGIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2F2ZS1idG4nKTsKICBiLnRleHRDb250ZW50ID0gJ+KckyBTYXZlZCc7IHNldFRpbWVvdXQoKCk9PmIudGV4dENvbnRlbnQ9J1NhdmUgUHJvZmlsZScsMTUwMCk7Cn0KCi8vIOKUgOKUgOKUgCBDSEFUIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB1c2VyQnViYmxlKHQpIHsKICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGVsLmNsYXNzTmFtZSA9ICdtc2cgdSc7CiAgZWwuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImF2YXRhciB1c3IiPkc8L2Rpdj48ZGl2IGNsYXNzPSJidWJibGUiPiR7dH08L2Rpdj5gOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LW1zZ3MnKS5hcHBlbmRDaGlsZChlbCk7CiAgc2Nyb2xsQ2hhdCgpOwp9CmZ1bmN0aW9uIGJvdEJ1YmJsZShodG1sKSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBlbC5jbGFzc05hbWUgPSAnbXNnJzsKICBlbC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0iYXZhdGFyIGJvdCI+SzwvZGl2PjxkaXYgY2xhc3M9ImJ1YmJsZSI+JHtodG1sfTwvZGl2PmA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtbXNncycpLmFwcGVuZENoaWxkKGVsKTsKICBzY3JvbGxDaGF0KCk7Cn0KZnVuY3Rpb24gYm90TXNnKGh0bWwsIGNoaXBzPVtdKSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBlbC5jbGFzc05hbWUgPSAnbXNnJzsKICBjb25zdCBjaGlwc0h0bWwgPSBjaGlwcy5sZW5ndGggPyBgPGRpdiBjbGFzcz0iY2hpcHMiPiR7Y2hpcHMubWFwKGM9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiBvbmNsaWNrPSJxcCgke0pTT04uc3RyaW5naWZ5KGMpfSkiPiR7Y308L2J1dHRvbj5gKS5qb2luKCcnKX08L2Rpdj5gIDogJyc7CiAgZWwuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImF2YXRhciBib3QiPks8L2Rpdj48ZGl2IGNsYXNzPSJidWJibGUiPiR7aHRtbH0ke2NoaXBzSHRtbH08L2Rpdj5gOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LW1zZ3MnKS5hcHBlbmRDaGlsZChlbCk7CiAgc2Nyb2xsQ2hhdCgpOwp9CmZ1bmN0aW9uIHNob3dUeXBpbmcoKSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBlbC5jbGFzc05hbWUgPSAnbXNnIHR5cGluZyc7IGVsLmlkID0gJ3R5cGluZyc7CiAgZWwuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImF2YXRhciBib3QiPks8L2Rpdj48ZGl2IGNsYXNzPSJ0eXBpbmctZG90cyI+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PC9kaXY+YDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdC1tc2dzJykuYXBwZW5kQ2hpbGQoZWwpOwogIHNjcm9sbENoYXQoKTsKfQpmdW5jdGlvbiBoaWRlVHlwaW5nKCkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwaW5nJyk/LnJlbW92ZSgpOyB9CmZ1bmN0aW9uIHNjcm9sbENoYXQoKSB7IGNvbnN0IG09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtbXNncycpOyBtLnNjcm9sbFRvcD1tLnNjcm9sbEhlaWdodDsgfQpmdW5jdGlvbiBxcCh0KSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWlucHV0JykudmFsdWU9dDsgc2VuZCgpOyB9Cgphc3luYyBmdW5jdGlvbiBzZW5kKCkgewogIGNvbnN0IGlucCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWlucHV0Jyk7CiAgY29uc3QgdCA9IGlucC52YWx1ZS50cmltKCk7CiAgaWYgKCF0KSByZXR1cm47CiAgaW5wLnZhbHVlPScnOyBpbnAuc3R5bGUuaGVpZ2h0PSdhdXRvJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZC1idG4nKS5kaXNhYmxlZCA9IHRydWU7CgogIHVzZXJCdWJibGUodCk7CiAgUy5jaGF0SGlzdG9yeS5wdXNoKHtyb2xlOid1c2VyJyxjb250ZW50OnR9KTsKICBzaG93VHlwaW5nKCk7CgogIC8qIE5PVEU6IFRoZSBBSSBjYWxscyB3aWxsIE5PVCB3b3JrIGZyb20gRnVubmVsUGFnZXMgd2l0aG91dCBhIHNlcnZlci1zaWRlIHByb3h5ICsgQVBJIGtleS4KICAgICBLZWVwaW5nIHRoZSBVSSBydW5uaW5nOyBzaG93IGEgZnJpZW5kbHkgbWVzc2FnZSBpbnN0ZWFkIG9mIGZhaWxpbmcgc2lsZW50bHkuICovCiAgaGlkZVR5cGluZygpOwogIGJvdEJ1YmJsZSgnPHA+Q2hhdCBpcyBkaXNhYmxlZCBpbiB0aGlzIEZ1bm5lbFBhZ2VzIGVtYmVkIChBUEkga2V5cyBjYW7igJl0IGJlIHNhZmVseSB1c2VkIGluLWJyb3dzZXIpLiBPbmNlIHRoaXMgaXMgaG9zdGVkIGRpcmVjdGx5IG9uIEhvc3RHYXRvciB3aXRoIGEgc21hbGwgcHJveHksIGNoYXQgd2lsbCB3b3JrLjwvcD4nKTsKICBTLmNoYXRIaXN0b3J5LnB1c2goe3JvbGU6J2Fzc2lzdGFudCcsY29udGVudDonPHA+Q2hhdCBpcyBkaXNhYmxlZCBpbiB0aGlzIEZ1bm5lbFBhZ2VzIGVtYmVkIChBUEkga2V5cyBjYW7igJl0IGJlIHNhZmVseSB1c2VkIGluLWJyb3dzZXIpLiBPbmNlIHRoaXMgaXMgaG9zdGVkIGRpcmVjdGx5IG9uIEhvc3RHYXRvciB3aXRoIGEgc21hbGwgcHJveHksIGNoYXQgd2lsbCB3b3JrLjwvcD4nfSk7CiAgc2F2ZVMoKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZC1idG4nKS5kaXNhYmxlZCA9IGZhbHNlOwp9CgpmdW5jdGlvbiByZW5kZXJNZW51UmVzcG9uc2UocCl7IHJldHVybiAnPHA+KE1lbnUgcmVuZGVyaW5nIGlzIGF2YWlsYWJsZSBvbmNlIGNoYXQgaXMgZW5hYmxlZC4pPC9wPic7IH0KZnVuY3Rpb24gYXBwbHlNZW51KHApe30KCi8qIFdlZWsvSW50bC9DZWxsYXIgZnVuY3Rpb25zIGJlbG93IHN0aWxsIHdvcmsgb2ZmbGluZSAoZXhjZXB0IEFJIHBhcnRzKSAqLwpmdW5jdGlvbiByZW5kZXJXZWVrR3JpZCgpIHsKICBjb25zdCBncmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlZWstZ3JpZCcpOwogIGNvbnN0IGVtcHR5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlZWstZW1wdHknKTsKICBjb25zdCBzaG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3AtY2FyZCcpOwoKICBpZiAoIVMuY3VycmVudE1lbnUpIHsKICAgIGdyaWQuaW5uZXJIVE1MPScnOyBncmlkLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogICAgZW1wdHkuc3R5bGUuZGlzcGxheT0nYmxvY2snOyBzaG9wLnN0eWxlLmRpc3BsYXk9J25vbmUnOyByZXR1cm47CiAgfQogIGVtcHR5LnN0eWxlLmRpc3BsYXk9J25vbmUnOyBncmlkLnN0eWxlLmRpc3BsYXk9J2dyaWQnOwp9CgpmdW5jdGlvbiBvcGVuUmVjaXBlRnJvbUNoYXQoKXsgYm90QnViYmxlKCc8cD5SZWNpcGUgZ2VuZXJhdGlvbiBuZWVkcyB0aGUgQUkgcHJveHkgKGhvc3RlZCB2ZXJzaW9uKS48L3A+Jyk7IH0KYXN5bmMgZnVuY3Rpb24gb3BlblJlY2lwZSgpeyBib3RCdWJibGUoJzxwPlJlY2lwZSBnZW5lcmF0aW9uIG5lZWRzIHRoZSBBSSBwcm94eSAoaG9zdGVkIHZlcnNpb24pLjwvcD4nKTsgfQoKZnVuY3Rpb24gY2xvc2VNb2RhbCgpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLW92ZXJsYXknKS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsgfQpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7IGlmIChlLmtleT09PSdFc2NhcGUnKSBjbG9zZU1vZGFsKCk7IH0pOwoKY29uc3QgQ09VTlRSSUVTID0gWwogIHtuYW1lOidKYXBhbicsZmxhZzon8J+Hr/Cfh7UnLHJlZ2lvbjonRWFzdCBBc2lhJ30sCiAge25hbWU6J01vcm9jY28nLGZsYWc6J/Cfh7Lwn4emJyxyZWdpb246J05vcnRoIEFmcmljYSd9LAogIHtuYW1lOidQZXJ1JyxmbGFnOifwn4e18J+HqicscmVnaW9uOidTb3V0aCBBbWVyaWNhJ30sCiAge25hbWU6J0dlb3JnaWEnLGZsYWc6J/Cfh6zwn4eqJyxyZWdpb246J0NhdWNhc3VzJ30sCiAge25hbWU6J0xlYmFub24nLGZsYWc6J/Cfh7Hwn4enJyxyZWdpb246J01pZGRsZSBFYXN0J30sCiAge25hbWU6J1RoYWlsYW5kJyxmbGFnOifwn4e58J+HrScscmVnaW9uOidTb3V0aGVhc3QgQXNpYSd9LAogIHtuYW1lOidQb3J0dWdhbCcsZmxhZzon8J+HtfCfh7knLHJlZ2lvbjonU291dGhlcm4gRXVyb3BlJ30sCiAge25hbWU6J0V0aGlvcGlhJyxmbGFnOifwn4eq8J+HuScscmVnaW9uOidFYXN0IEFmcmljYSd9LAogIHtuYW1lOidBcmdlbnRpbmEnLGZsYWc6J/Cfh6bwn4e3JyxyZWdpb246J1NvdXRoIEFtZXJpY2EnfSwKICB7bmFtZTonVmlldG5hbScsZmxhZzon8J+Hu/Cfh7MnLHJlZ2lvbjonU291dGhlYXN0IEFzaWEnfSwKICB7bmFtZTonVHVya2V5JyxmbGFnOifwn4e58J+HtycscmVnaW9uOidNaWRkbGUgRWFzdCAvIEV1cm9wZSd9LAogIHtuYW1lOidJbmRpYScsZmxhZzon8J+HrvCfh7MnLHJlZ2lvbjonU291dGggQXNpYSd9LAogIHtuYW1lOidTcGFpbicsZmxhZzon8J+HqvCfh7gnLHJlZ2lvbjonU291dGhlcm4gRXVyb3BlJ30sCiAge25hbWU6J0VneXB0JyxmbGFnOifwn4eq8J+HrCcscmVnaW9uOidOb3J0aCBBZnJpY2EnfSwKICB7bmFtZTonQ29sb21iaWEnLGZsYWc6J/Cfh6jwn4e0JyxyZWdpb246J1NvdXRoIEFtZXJpY2EnfSwKICB7bmFtZTonSHVuZ2FyeScsZmxhZzon8J+HrfCfh7onLHJlZ2lvbjonQ2VudHJhbCBFdXJvcGUnfSwKICB7bmFtZTonUGhpbGlwcGluZXMnLGZsYWc6J/Cfh7Xwn4etJyxyZWdpb246J1NvdXRoZWFzdCBBc2lhJ30sCiAge25hbWU6J05pZ2VyaWEnLGZsYWc6J/Cfh7Pwn4esJyxyZWdpb246J1dlc3QgQWZyaWNhJ30sCiAge25hbWU6J0dyZWVjZScsZmxhZzon8J+HrPCfh7cnLHJlZ2lvbjonU291dGhlcm4gRXVyb3BlJ30sCiAge25hbWU6J0JyYXppbCcsZmxhZzon8J+Hp/Cfh7cnLHJlZ2lvbjonU291dGggQW1lcmljYSd9LAogIHtuYW1lOidTb3V0aCBLb3JlYScsZmxhZzon8J+HsPCfh7cnLHJlZ2lvbjonRWFzdCBBc2lhJ30sCiAge25hbWU6J0lyYW4nLGZsYWc6J/Cfh67wn4e3JyxyZWdpb246J01pZGRsZSBFYXN0J30sCiAge25hbWU6J01leGljbycsZmxhZzon8J+HsvCfh70nLHJlZ2lvbjonTm9ydGggQW1lcmljYSd9LAogIHtuYW1lOidGcmFuY2UnLGZsYWc6J/Cfh6vwn4e3JyxyZWdpb246J1dlc3Rlcm4gRXVyb3BlJ30sCiAge25hbWU6J0phbWFpY2EnLGZsYWc6J/Cfh6/wn4eyJyxyZWdpb246J0NhcmliYmVhbid9LAogIHtuYW1lOidTcmkgTGFua2EnLGZsYWc6J/Cfh7Hwn4ewJyxyZWdpb246J1NvdXRoIEFzaWEnfSwKICB7bmFtZTonVXpiZWtpc3RhbicsZmxhZzon8J+HuvCfh78nLHJlZ2lvbjonQ2VudHJhbCBBc2lhJ30sCiAge25hbWU6J0N1YmEnLGZsYWc6J/Cfh6jwn4e6JyxyZWdpb246J0NhcmliYmVhbid9LAogIHtuYW1lOidJc3JhZWwnLGZsYWc6J/Cfh67wn4exJyxyZWdpb246J01pZGRsZSBFYXN0J30sCl07Cgphc3luYyBmdW5jdGlvbiBzcGluR2xvYmUoKSB7CiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JlLWJ0bicpOwogIGJ0bi5jbGFzc0xpc3QuYWRkKCdzcGlubmluZycpOwogIHNldFRpbWVvdXQoKCk9PmJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdzcGlubmluZycpLDYwMCk7CgogIGNvbnN0IHBhc3QgPSBTLmludGxIaXN0b3J5Lm1hcChjPT5jLm5hbWUpOwogIGNvbnN0IGF2YWlsYWJsZSA9IENPVU5UUklFUy5maWx0ZXIoYz0+IXBhc3QuaW5jbHVkZXMoYy5uYW1lKSk7CiAgY29uc3QgcG9vbCA9IGF2YWlsYWJsZS5sZW5ndGggPiAwID8gYXZhaWxhYmxlIDogQ09VTlRSSUVTOwogIGNvbnN0IGNvdW50cnkgPSBwb29sW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpwb29sLmxlbmd0aCldOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY291bnRyeS1yZXN1bHQnKS5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJjb3VudHJ5LXJldmVhbCI+CiAgICAgIDxkaXYgY2xhc3M9ImNyLWZsYWciPiR7Y291bnRyeS5mbGFnfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjci1uYW1lIj4ke2NvdW50cnkubmFtZX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3ItcmVnaW9uIj4ke2NvdW50cnkucmVnaW9ufTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpbnRsLWluZm8iIGlkPSJpbnRsLWluZm8iPgogICAgICAgIDxkaXYgY2xhc3M9ImludGwtY2FyZCI+PGg0Pk5vdGU8L2g0PjxwPkZvciBmdWxsIGN1bGluYXJ5IGNvbnRleHQgKyByZWNpcGUgKyB3aW5lIHBhaXJpbmcsIHVzZSB0aGUgaG9zdGVkIHZlcnNpb24gKEhvc3RHYXRvcikgd2l0aCBBSSBlbmFibGVkLjwvcD48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9InVzZS1mb3ItdGh1cnNkYXktYnRuIiBvbmNsaWNrPSJ1c2VGb3JUaHVyc2RheSgnJHtjb3VudHJ5Lm5hbWV9JywnJHtjb3VudHJ5LmZsYWd9JykiPgogICAgICAgIFVzZSBmb3IgVGhpcyBUaHVyc2RheSDihpIKICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj5gOwp9CgpmdW5jdGlvbiB1c2VGb3JUaHVyc2RheShuYW1lLCBmbGFnKSB7CiAgUy5pbnRsSGlzdG9yeS5wdXNoKHtuYW1lLCBmbGFnLCBkYXRlOiBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQ0EnLHttb250aDonc2hvcnQnLGRheTonbnVtZXJpYyd9KX0pOwogIHJlbmRlckludGxIaXN0b3J5KCk7IHJlbmRlclNpZGViYXIoKTsgc2F2ZVMoKTsKICBuYXYoJ2NoYXQnLCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmF2LWJ0bicpWzBdKTsKICBzZXRUaW1lb3V0KCgpPT5xcChgUGxhbiBhIGNvbXBsZXRlICR7bmFtZX0gVGh1cnNkYXkgZGlubmVyIGZvciA0IOKAlCBnbHV0ZW4tZnJlZSwgbGVndW1lLWZyZWUsIGVnZy1mcmVlLiBJbmNsdWRlIGEgZnVsbCByZWNpcGUgYW5kIHdpbmUgcGFpcmluZy5gKSwzMDApOwp9CgpmdW5jdGlvbiByZW5kZXJJbnRsSGlzdG9yeSgpIHsKICBjb25zdCBzZWMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW50bC1oaXN0b3J5LXNlY3Rpb24nKTsKICBjb25zdCBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY291bnRyeS1sb2cnKTsKICBpZiAoIVMuaW50bEhpc3RvcnkubGVuZ3RoKSB7IHNlYy5zdHlsZS5kaXNwbGF5PSdub25lJzsgcmV0dXJuOyB9CiAgc2VjLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKICBsb2cuaW5uZXJIVE1MID0gUy5pbnRsSGlzdG9yeS5zbGljZSgpLnJldmVyc2UoKS5tYXAoYz0+YAogICAgPGRpdiBjbGFzcz0iY291bnRyeS1waWxsIj4KICAgICAgJHtjLmZsYWd9ICR7Yy5uYW1lfQogICAgICA8c3BhbiBjbGFzcz0iY3AtZGF0ZSI+JHtjLmRhdGV9PC9zcGFuPgogICAgPC9kaXY+YCkuam9pbignJyk7Cn0KCmZ1bmN0aW9uIHBhcnNlQ2VsbGFyKCkgewogIGNvbnN0IHJhdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXZpbm8tY3N2JykudmFsdWUudHJpbSgpOwogIGlmICghcmF3KSByZXR1cm47CiAgY29uc3QgbGluZXMgPSByYXcuc3BsaXQoJ1xuJykuZmlsdGVyKGw9PmwudHJpbSgpKTsKICBjb25zdCBoZWFkZXJzID0gbGluZXNbMF0uc3BsaXQoJywnKS5tYXAoaD0+aC50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bJyJdL2csJycpKTsKCiAgY29uc3QgbmFtZUlkeCA9IGhlYWRlcnMuZmluZEluZGV4KGg9PmguaW5jbHVkZXMoJ3dpbmUnKXx8aC5pbmNsdWRlcygnbmFtZScpKTsKICBjb25zdCB3aW5lcnlJZHggPSBoZWFkZXJzLmZpbmRJbmRleChoPT5oLmluY2x1ZGVzKCd3aW5lcnknKXx8aC5pbmNsdWRlcygncHJvZHVjZXInKSk7CiAgY29uc3QgcmF0aW5nSWR4ID0gaGVhZGVycy5maW5kSW5kZXgoaD0+aC5pbmNsdWRlcygncmF0aW5nJyl8fGguaW5jbHVkZXMoJ3Njb3JlJykpOwogIGNvbnN0IHF0eUlkeCA9IGhlYWRlcnMuZmluZEluZGV4KGg9PmguaW5jbHVkZXMoJ3F0eScpfHxoLmluY2x1ZGVzKCdxdWFudGl0eScpfHxoLmluY2x1ZGVzKCdib3R0bGVzJykpOwogIGNvbnN0IHZpbnRhZ2VJZHggPSBoZWFkZXJzLmZpbmRJbmRleChoPT5oLmluY2x1ZGVzKCd2aW50YWdlJyl8fGguaW5jbHVkZXMoJ3llYXInKSk7CiAgY29uc3QgdHlwZUlkeCA9IGhlYWRlcnMuZmluZEluZGV4KGg9PmguaW5jbHVkZXMoJ3R5cGUnKXx8aC5pbmNsdWRlcygndmFyaWV0YWwnKSk7CgogIFMuY2VsbGFyID0gbGluZXMuc2xpY2UoMSkubWFwKGxpbmUgPT4gewogICAgY29uc3QgY29scyA9IGxpbmUuc3BsaXQoJywnKS5tYXAoYz0+Yy50cmltKCkucmVwbGFjZSgvXlsiJ118WyInXSQvZywnJykpOwogICAgcmV0dXJuIHsKICAgICAgbmFtZTogY29sc1tuYW1lSWR4XXx8J1Vua25vd24nLAogICAgICB3aW5lcnk6IGNvbHNbd2luZXJ5SWR4XXx8JycsCiAgICAgIHJhdGluZzogcGFyc2VGbG9hdChjb2xzW3JhdGluZ0lkeF0pfHwwLAogICAgICBxdHk6IHBhcnNlSW50KGNvbHNbcXR5SWR4XSl8fDEsCiAgICAgIHZpbnRhZ2U6IGNvbHNbdmludGFnZUlkeF18fCcnLAogICAgICB0eXBlOiBjb2xzW3R5cGVJZHhdfHwncmVkJywKICAgIH07CiAgfSkuZmlsdGVyKGI9PmIubmFtZSAmJiBiLm5hbWUhPT0nVW5rbm93bicpOwoKICBzYXZlUygpOwogIHJlbmRlckNlbGxhcigpOwp9CgpmdW5jdGlvbiBsb2FkU2FtcGxlQ2VsbGFyKCkgewogIFMuY2VsbGFyID0gWwogICAge25hbWU6J1ByaW1pdGl2byBkaSBNYW5kdXJpYScsd2luZXJ5OidGZXVkaSBkaSBHdWFnbmFubycscmF0aW5nOjQuMSxxdHk6Nix2aW50YWdlOicyMDE5Jyx0eXBlOidyZWQnfSwKICAgIHtuYW1lOidBbWFyb25lIGRlbGxhIFZhbHBvbGljZWxsYScsd2luZXJ5OidBbGxlZ3JpbmknLHJhdGluZzo0LjUscXR5OjIsdmludGFnZTonMjAxNycsdHlwZToncmVkJ30sCiAgICB7bmFtZTonQ8O0dGVzIGR1IFJow7RuZScsd2luZXJ5OidDaGFwb3V0aWVyJyxyYXRpbmc6My45LHF0eTo4LHZpbnRhZ2U6JzIwMjEnLHR5cGU6J3JlZCd9LAogICAge25hbWU6J1Jpb2phIFJlc2VydmEnLHdpbmVyeTonTGEgUmlvamEgQWx0YScscmF0aW5nOjQuMixxdHk6NCx2aW50YWdlOicyMDE2Jyx0eXBlOidyZWQnfSwKICAgIHtuYW1lOidNYWxiZWMgUmVzZXJ2YScsd2luZXJ5OidDbG9zIGRlIGxvcyBTaWV0ZScscmF0aW5nOjQuMCxxdHk6NSx2aW50YWdlOicyMDIwJyx0eXBlOidyZWQnfSwKICAgIHtuYW1lOidDYWJlcm5ldCBTYXV2aWdub24nLHdpbmVyeTonSm9yZGFuIFdpbmVyeScscmF0aW5nOjQuMyxxdHk6Myx2aW50YWdlOicyMDE4Jyx0eXBlOidyZWQnfSwKICAgIHtuYW1lOidCYXJvbG8nLHdpbmVyeTonQm9yZ29nbm8nLHJhdGluZzo0LjQscXR5OjIsdmludGFnZTonMjAxNScsdHlwZToncmVkJ30sCiAgICB7bmFtZTonTXVzY2FkZXQnLHdpbmVyeTonQnLDqWdlb24nLHJhdGluZzozLjgscXR5OjYsdmludGFnZTonMjAyMicsdHlwZTond2hpdGUnfSwKICAgIHtuYW1lOidDaGFibGlzIFByZW1pZXIgQ3J1Jyx3aW5lcnk6J01vcmVhdScscmF0aW5nOjQuMSxxdHk6Myx2aW50YWdlOicyMDIxJyx0eXBlOid3aGl0ZSd9LAogICAge25hbWU6J1Jvc8OpIFByb3NlY2NvJyx3aW5lcnk6J0tpcmtsYW5kJyxyYXRpbmc6My43LHF0eToxMix2aW50YWdlOidOVicsdHlwZTonc3BhcmtsaW5nJ30sCiAgICB7bmFtZTonUmlwYXNzbyBWYWxwb2xpY2VsbGEnLHdpbmVyeTonTWFzaScscmF0aW5nOjQuMCxxdHk6NCx2aW50YWdlOicyMDE5Jyx0eXBlOidyZWQnfSwKICAgIHtuYW1lOidDaMOidGVhdW5ldWYtZHUtUGFwZScsd2luZXJ5OidDaMOidGVhdSBSYXlhcycscmF0aW5nOjQuNixxdHk6MSx2aW50YWdlOicyMDE0Jyx0eXBlOidyZWQnfSwKICBdOwogIHNhdmVTKCk7CiAgcmVuZGVyQ2VsbGFyKCk7Cn0KCmxldCBhY3RpdmVGaWx0ZXIgPSAnYWxsJzsKZnVuY3Rpb24gcmVuZGVyQ2VsbGFyKCkgewogIGNvbnN0IGVtcHR5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlbGxhci1lbXB0eScpOwogIGNvbnN0IGxvYWRlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZWxsYXItbG9hZGVkJyk7CiAgY29uc3QgY291bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VsbGFyLWNvdW50Jyk7CgogIGlmICghUy5jZWxsYXIubGVuZ3RoKSB7IGVtcHR5LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsgbG9hZGVkLnN0eWxlLmRpc3BsYXk9J25vbmUnOyBjb3VudC50ZXh0Q29udGVudD0nJzsgcmV0dXJuOyB9CgogIGVtcHR5LnN0eWxlLmRpc3BsYXk9J25vbmUnOyBsb2FkZWQuc3R5bGUuZGlzcGxheT0nYmxvY2snOwogIGNvbnN0IHRvdGFsID0gUy5jZWxsYXIucmVkdWNlKChhLGIpPT5hKyhiLnF0eXx8MSksMCk7CiAgY291bnQudGV4dENvbnRlbnQgPSBgwrcgJHt0b3RhbH0gYm90dGxlc2A7CgogIGNvbnN0IHJlZHMgPSBTLmNlbGxhci5maWx0ZXIoYj0+Yi50eXBlPT09J3JlZCcpOwogIGNvbnN0IHdoaXRlcyA9IFMuY2VsbGFyLmZpbHRlcihiPT5iLnR5cGU9PT0nd2hpdGUnKTsKICBjb25zdCBzcGFya2xpbmcgPSBTLmNlbGxhci5maWx0ZXIoYj0+Yi50eXBlPT09J3NwYXJrbGluZycpOwogIGNvbnN0IGF2Z1JhdGluZyA9IChTLmNlbGxhci5yZWR1Y2UoKGEsYik9PmErKGIucmF0aW5nfHwwKSwwKS9TLmNlbGxhci5sZW5ndGgpLnRvRml4ZWQoMSk7CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZWxsYXItc3RhdHMnKS5pbm5lckhUTUwgPSBbCiAgICB7dmFsOnRvdGFsLCBsYmw6J0JvdHRsZXMnfSwKICAgIHt2YWw6cmVkcy5sZW5ndGgsIGxibDonUmVkcyd9LAogICAge3ZhbDp3aGl0ZXMubGVuZ3RoK3NwYXJrbGluZy5sZW5ndGgsIGxibDonV2hpdGUvU3BhcmtsaW5nJ30sCiAgICB7dmFsOmF2Z1JhdGluZysn4piFJywgbGJsOidBdmcgUmF0aW5nJ30sCiAgXS5tYXAocz0+YDxkaXYgY2xhc3M9InN0YXQtY2FyZCI+PGRpdiBjbGFzcz0ic2MtdmFsIj4ke3MudmFsfTwvZGl2PjxkaXYgY2xhc3M9InNjLWxibCI+JHtzLmxibH08L2Rpdj48L2Rpdj5gKS5qb2luKCcnKTsKCiAgY29uc3QgdHlwZXMgPSBbJ2FsbCcsLi4ubmV3IFNldChTLmNlbGxhci5tYXAoYj0+Yi50eXBlKSldOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXZpbm8tZmlsdGVyJykuaW5uZXJIVE1MID0gdHlwZXMubWFwKHQ9PgogICAgYDxidXR0b24gY2xhc3M9InZmLWJ0biAke2FjdGl2ZUZpbHRlcj09PXQ/J2FjdGl2ZSc6Jyd9IiBvbmNsaWNrPSJmaWx0ZXJDZWxsYXIoJyR7dH0nKSI+JHt0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSl9PC9idXR0b24+YAogICkuam9pbignJyk7CgogIGNvbnN0IGZpbHRlcmVkID0gYWN0aXZlRmlsdGVyPT09J2FsbCcgPyBTLmNlbGxhciA6IFMuY2VsbGFyLmZpbHRlcihiPT5iLnR5cGU9PT1hY3RpdmVGaWx0ZXIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3R0bGUtZ3JpZCcpLmlubmVySFRNTCA9IGZpbHRlcmVkLm1hcChiPT5gCiAgICA8ZGl2IGNsYXNzPSJib3R0bGUtY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImJjLW5hbWUiPiR7Yi5uYW1lfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJiYy1tZXRhIj4ke2Iud2luZXJ5fSR7Yi52aW50YWdlPycgwrcgJytiLnZpbnRhZ2U6Jyd9PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJiYy1yYXRpbmciPgogICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXJzIj4keyfimIUnLnJlcGVhdChNYXRoLnJvdW5kKGIucmF0aW5nfHwwKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InNjb3JlIj4ke2IucmF0aW5nfHwn4oCUJ308L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNwYW4gY2xhc3M9ImJjLXF0eSI+w5cke2IucXR5fHwxfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImJjLXBhaXJpbmciPgogICAgICAgIDxzcGFuIG9uY2xpY2s9ImdldFBhaXJpbmcoJyR7Yi5uYW1lLnJlcGxhY2UoLycvZywiXFwnIil9JywnJHtiLnR5cGV8fCdyZWQnfScpIiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Ij7wn42977iPIEdldCBwYWlyaW5nIHN1Z2dlc3Rpb24g4oaSPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmApLmpvaW4oJycpOwp9CgpmdW5jdGlvbiBmaWx0ZXJDZWxsYXIodHlwZSkgeyBhY3RpdmVGaWx0ZXIgPSB0eXBlOyByZW5kZXJDZWxsYXIoKTsgfQoKYXN5bmMgZnVuY3Rpb24gZ2V0UGFpcmluZyhuYW1lLCB0eXBlKSB7CiAgbmF2KCdjaGF0JywgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5hdi1idG4nKVswXSk7CiAgc2V0VGltZW91dCgoKT0+cXAoYEkgaGF2ZSBhIGJvdHRsZSBvZiAke25hbWV9ICgke3R5cGV9KS4gV2hhdCBzaG91bGQgSSBjb29rIHRoaXMgd2Vla2VuZCB0byBwYWlyIHdpdGggaXQ/IEtlZXAgcmVzdHJpY3Rpb25zIGluIG1pbmQ6ICR7Uy5yZXN0cmljdGlvbnMuam9pbignLCAnKX0uYCksMzAwKTsKfQoKaW5pdCgpOwo8L3NjcmlwdD4=","embed":""}
the
Kitchen
·
Restrictions
Cuisines
Freezer & Pantry
Past Menus
Int'l Thursdays Log
Week of —
🛒 Shopping List
🍽️
No menu planned yet
Head to Chat and say "Plan my week"
🌍 International Thursdays
Spin the globe. Cook the world. One country at a time.
Countries Visited
Wine Cellar
🍷
Import Your Cellar
Paste your Vivino CSV export below. Go to Vivino → My Wines → Export to CSV.
Or load a sample cellar to try it out.
Household Profile
Dietary Restrictions
Favourite Cuisines
Cuisines to Explore
Wine Preferences
Recipe
👨🍳
Building your recipe...