[fusion_code]PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVzIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+UHLDoWN0aWNhIGRlIFRpZW1wb3MgVmVyYmFsZXMgZW4gSW5nbMOpczwvdGl0bGU+CgkgICAgPCEtLSBFbCBzY3JpcHQgc2UgY2FyZ2Fyw6EgZXh0ZXJuYW1lbnRlIC0tPgogCiAgICA8c3R5bGU+CiAgICAgICAgOnJvb3QgewogICAgICAgICAgICAtLXByaW1hcnktY29sb3I6ICMzNDk4ZGI7CiAgICAgICAgICAgIC0tc2Vjb25kYXJ5LWNvbG9yOiAjMmVjYzcxOwogICAgICAgICAgICAtLWFjY2VudC1jb2xvcjogI2U3NGMzYzsKICAgICAgICAgICAgLS10ZXh0LWNvbG9yOiAjMzMzOwogICAgICAgICAgICAtLWxpZ2h0LWJnOiAjZjVmNWY1OwogICAgICAgICAgICAtLWRhcmstYmc6ICMyYzNlNTA7CiAgICAgICAgICAgIC0tY29ycmVjdC1jb2xvcjogIzI3YWU2MDsKICAgICAgICAgICAgLS1pbmNvcnJlY3QtY29sb3I6ICNlNzRjM2M7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICogewogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBUYWhvbWEsIEdlbmV2YSwgVmVyZGFuYSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LWJnKTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udGFpbmVyIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGhlYWRlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRhcmstYmcpOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgcGFkZGluZzogMjBweCAwOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4IDEwcHggMCAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBoMSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi4ycmVtOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwoJCQljb2xvcjogI2ZmZmZmZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaDIgewogICAgICAgICAgICBmb250LXNpemU6IDEuOHJlbTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpOwogICAgICAgICAgICBtYXJnaW46IDIwcHggMCAxNXB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBoMyB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS40cmVtOwogICAgICAgICAgICBtYXJnaW46IDE1cHggMCAxMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm5hdi10YWJzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGFyay1iZyk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm5hdi10YWIgewogICAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5uYXYtdGFiOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubmF2LXRhYi5hY3RpdmUgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRhYi1jb250ZW50IHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRhYi1jb250ZW50LmFjdGl2ZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZXhlcmNpc2UgewogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsKICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDIwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5leGVyY2lzZTpsYXN0LWNoaWxkIHsKICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnF1ZXN0aW9uIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm9wdGlvbnMgewogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3B0aW9uIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtYW5zd2VyIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYnRuIHsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5idG46aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjk4MGI5OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYnRuOmRpc2FibGVkIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk1YTVhNjsKICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ0bi1jaGVjayB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5mZWVkYmFjayB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlZWRiYWNrLmNvcnJlY3QgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDQ2LCAyMDQsIDExMywgMC4yKTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWNvcnJlY3QtY29sb3IpOwogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlZWRiYWNrLmluY29ycmVjdCB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjMxLCA3NiwgNjAsIDAuMik7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1pbmNvcnJlY3QtY29sb3IpOwogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNjb3JlLWNvbnRhaW5lciB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wcm9ncmVzcy1iYXIgewogICAgICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucHJvZ3Jlc3MgewogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlY29uZGFyeS1jb2xvcik7CiAgICAgICAgICAgIHdpZHRoOiAwJTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC41czsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluc3RydWN0aW9ucyB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LWJnKTsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGVuc2UtZXhwbGFuYXRpb24gewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDUyLCAxNTIsIDIxOSwgMC4xKTsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubmF2aWdhdGlvbi1idXR0b25zIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubmF2LWJ0biB7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgICAgICAgICAgbWluLXdpZHRoOiAxMjBweDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5uYXYtYnRuLnByZXYgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTVhNWE2OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubmF2LWJ0bi5wcmV2OmhvdmVyOm5vdChbZGlzYWJsZWRdKSB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM3ZjhjOGQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5uYXYtYnRuLm5leHQgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktY29sb3IpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubmF2LWJ0bi5uZXh0OmhvdmVyOm5vdChbZGlzYWJsZWRdKSB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2FlNjA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEVzdGlsb3MgcGFyYSB0YWJsYSBkZSByZWZlcmVuY2lhICovCiAgICAgICAgdGFibGUgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoLCB0ZCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdHI6bnRoLWNoaWxkKGV2ZW4pIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmRvd25sb2FkLWNvbnRhaW5lciB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ0bi1kb3dubG9hZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMjVweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5idG4tZG93bmxvYWQ6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzAzOTJiOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBSZXNwb25zaXZlICovCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAgIC5jb250YWluZXIgewogICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaDEgewogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjhyZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGgyIHsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAubmF2LXRhYnMgewogICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLm5hdi10YWIgewogICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLnRhYi1jb250ZW50IHsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHRhYmxlIHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLm5hdmlnYXRpb24tYnV0dG9ucyB7CiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAubmF2LWJ0biB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgIDxoZWFkZXI+CiAgICAgICAgICAgIDxoMT5QcsOhY3RpY2EgZGUgVGllbXBvcyBWZXJiYWxlcyBlbiBJbmdsw6lzPC9oMT4KICAgICAgICAgICAgPHA+VW5hIGhlcnJhbWllbnRhIGludGVyYWN0aXZhIHBhcmEgZG9taW5hciBsb3MgdGllbXBvcyB2ZXJiYWxlczwvcD4KICAgICAgICA8L2hlYWRlcj4KICAgICAgICAKICAgICAgICA8IS0tIFB1bnR1YWNpw7NuIEdsb2JhbCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1jb250YWluZXIiPgogICAgICAgICAgICA8aDM+VHUgUHJvZ3Jlc288L2gzPgogICAgICAgICAgICA8cD48c3BhbiBpZD0iY29ycmVjdC1hbnN3ZXJzIj4wPC9zcGFuPiBjb3JyZWN0YXMgZGUgPHNwYW4gaWQ9InRvdGFsLXF1ZXN0aW9ucyI+MDwvc3Bhbj4gaW50ZW50YWRhczwvcD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIiBpZD0icHJvZ3Jlc3MtYmFyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPCEtLSBOYXZlZ2FjacOzbiBwb3IgcGVzdGHDsWFzIC0tPgogICAgICAgIDxkaXYgY2xhc3M9Im5hdi10YWJzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2LXRhYiBhY3RpdmUiIGRhdGEtdGFiPSJpbnRybyI+SW50cm9kdWNjacOzbjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXYtdGFiIiBkYXRhLXRhYj0icHJlc2VudCI+UHJlc2VudGU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2LXRhYiIgZGF0YS10YWI9InBhc3QiPlBhc2FkbzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXYtdGFiIiBkYXRhLXRhYj0iZnV0dXJlIj5GdXR1cm88L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2LXRhYiIgZGF0YS10YWI9InBlcmZlY3QiPlBlcmZlY3Q8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2LXRhYiIgZGF0YS10YWI9Im1peGVkIj5NaXh0bzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDwhLS0gQ29udGVuaWRvIGRlIGxhcyBwZXN0YcOxYXMgLS0+CiAgICAgICAgPGRpdiBpZD0iaW50cm8iIGNsYXNzPSJ0YWItY29udGVudCBhY3RpdmUiPgogICAgICAgICAgICA8aDI+QmllbnZlbmlkbyBhIGxhIFByw6FjdGljYSBkZSBUaWVtcG9zIFZlcmJhbGVzIGVuIEluZ2zDqXM8L2gyPgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zIj4KICAgICAgICAgICAgICAgIDxoMz5JbnN0cnVjY2lvbmVzOjwvaDM+CiAgICAgICAgICAgICAgICA8cD5Fc3RhIGFwbGljYWNpw7NuIHRlIGF5dWRhcsOhIGEgcHJhY3RpY2FyIGxvcyBkaWZlcmVudGVzIHRpZW1wb3MgdmVyYmFsZXMgZW4gaW5nbMOpcyBhIHRyYXbDqXMgZGUgZWplcmNpY2lvcyBpbnRlcmFjdGl2b3MuPC9wPgogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgIDxsaT5OYXZlZ2EgcG9yIGxhcyBwZXN0YcOxYXMgcGFyYSBwcmFjdGljYXIgZGlmZXJlbnRlcyBncnVwb3MgZGUgdGllbXBvcyB2ZXJiYWxlcy48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT5DYWRhIHNlY2Npw7NuIGNvbnRpZW5lIGVqZXJjaWNpb3MgZGUgc2VsZWNjacOzbiBtw7psdGlwbGUgeSByZWxsZW5hciBlc3BhY2lvcy48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT5SZWNpYmlyw6FzIHJldHJvYWxpbWVudGFjacOzbiBpbm1lZGlhdGEgc29icmUgdHVzIHJlc3B1ZXN0YXMuPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+VHUgcHVudHVhY2nDs24gc2UgZ3VhcmRhIG1pZW50cmFzIHV0aWxpemFzIGxhIGFwbGljYWNpw7NuLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPlVzYSBsb3MgYm90b25lcyAiQW50ZXJpb3IiIHkgIlNpZ3VpZW50ZSIgcGFyYSBtb3ZlcnRlIGVudHJlIHNlY2Npb25lcy48L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8aDM+VGFibGEgZGUgUmVmZXJlbmNpYSBkZSBUaWVtcG9zIFZlcmJhbGVzPC9oMz4KICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0aD5UaWVtcG8gVmVyYmFsPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+VXNvPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+RWplbXBsbzwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZD5QcmVzZW50IFNpbXBsZTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPkjDoWJpdG9zLCBydXRpbmFzLCBoZWNob3MgZ2VuZXJhbGVzPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+SSB3b3JrIGV2ZXJ5IGRheS48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQ+UHJlc2VudCBDb250aW51b3VzPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+QWNjaW9uZXMgZW4gcHJvZ3Jlc28gYWhvcmE8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD5JIGFtIHdvcmtpbmcgcmlnaHQgbm93LjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZD5QYXN0IFNpbXBsZTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPkFjY2lvbmVzIGNvbXBsZXRhZGFzIGVuIGVsIHBhc2FkbzwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPkkgd29ya2VkIHllc3RlcmRheS48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQ+UGFzdCBDb250aW51b3VzPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+QWNjaW9uZXMgZW4gcHJvZ3Jlc28gZW4gZWwgcGFzYWRvPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+SSB3YXMgd29ya2luZyBhdCA2cG0geWVzdGVyZGF5LjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZD5GdXR1cmUgU2ltcGxlICh3aWxsKTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPlByZWRpY2Npb25lcywgcHJvbWVzYXMsIGRlY2lzaW9uZXMgZXNwb250w6FuZWFzPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+SSB3aWxsIHdvcmsgdG9tb3Jyb3cuPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPkdvaW5nIHRvPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+UGxhbmVzIGUgaW50ZW5jaW9uZXMgZnV0dXJhczwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPkkgYW0gZ29pbmcgdG8gd29yayBuZXh0IHdlZWsuPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPlByZXNlbnQgUGVyZmVjdDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPkV4cGVyaWVuY2lhcyBwYXNhZGFzLCBhY2Npb25lcyBjb24gcmVsZXZhbmNpYSBwcmVzZW50ZTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPkkgaGF2ZSB3b3JrZWQgaGVyZSBmb3IgNSB5ZWFycy48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQ+UHJlc2VudCBQZXJmZWN0IENvbnRpbnVvdXM8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD5BY2Npb25lcyBjb250aW51YXMgZGVzZGUgZWwgcGFzYWRvIGhhc3RhIGFob3JhPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+SSBoYXZlIGJlZW4gd29ya2luZyBzaW5jZSBtb3JuaW5nLjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2aWdhdGlvbi1idXR0b25zIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBuYXYtYnRuIHByZXYiIGRpc2FibGVkPkFudGVyaW9yPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gbmF2LWJ0biBuZXh0IiBkYXRhLW5leHQ9InByZXNlbnQiPlNpZ3VpZW50ZTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8IS0tIFByZXNlbnRlIC0tPgogICAgICAgIDxkaXYgaWQ9InByZXNlbnQiIGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgICAgICAgIDxoMj5UaWVtcG9zIFZlcmJhbGVzIGRlIFByZXNlbnRlPC9oMj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlbnNlLWV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgIDxoMz5QcmVzZW50IFNpbXBsZTwvaDM+CiAgICAgICAgICAgICAgICA8cD5TZSB1c2EgcGFyYSBoYWJsYXIgZGUgaGVjaG9zLCBydXRpbmFzIHkgaMOhYml0b3MuPC9wPgogICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Fc3RydWN0dXJhOjwvc3Ryb25nPiBTdWpldG8gKyB2ZXJibyAoKyBzL2VzIGVuIHRlcmNlcmEgcGVyc29uYSkgKyBjb21wbGVtZW50bzwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RWplbXBsbzo8L3N0cm9uZz4gU2hlIHdvcmtzIGluIGEgaG9zcGl0YWwuPC9wPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8aDM+UHJlc2VudCBDb250aW51b3VzPC9oMz4KICAgICAgICAgICAgICAgIDxwPlNlIHVzYSBwYXJhIGhhYmxhciBkZSBhY2Npb25lcyBxdWUgZXN0w6FuIG9jdXJyaWVuZG8gZW4gZXN0ZSBtb21lbnRvLjwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RXN0cnVjdHVyYTo8L3N0cm9uZz4gU3VqZXRvICsgYW0vaXMvYXJlICsgdmVyYm8taW5nICsgY29tcGxlbWVudG88L3A+CiAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkVqZW1wbG86PC9zdHJvbmc+IFRoZXkgYXJlIHN0dWR5aW5nIGZvciB0aGVpciBleGFtLjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8IS0tIENvbnRlbmVkb3IgZGUgZWplcmNpY2lvcyBxdWUgc2UgZ2VuZXJhcsOhbiBkaW7DoW1pY2FtZW50ZSAtLT4KICAgICAgICAgICAgPGRpdiBpZD0icHJlc2VudC1leGVyY2lzZXMtY29udGFpbmVyIiBjbGFzcz0iZXhlcmNpc2VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8IS0tIExvcyBlamVyY2ljaW9zIHNlIGdlbmVyYXLDoW4gZGluw6FtaWNhbWVudGUgYXF1w60gLS0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2aWdhdGlvbi1idXR0b25zIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBuYXYtYnRuIHByZXYiIGRhdGEtcHJldj0iaW50cm8iPkFudGVyaW9yPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gbmF2LWJ0biBuZXh0IiBkYXRhLW5leHQ9InBhc3QiPlNpZ3VpZW50ZTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8IS0tIFBhc2FkbyAtLT4KICAgICAgICA8ZGl2IGlkPSJwYXN0IiBjbGFzcz0idGFiLWNvbnRlbnQiPgogICAgICAgICAgICA8aDI+VGllbXBvcyBWZXJiYWxlcyBkZSBQYXNhZG88L2gyPgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVuc2UtZXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgPGgzPlBhc3QgU2ltcGxlPC9oMz4KICAgICAgICAgICAgICAgIDxwPlNlIHVzYSBwYXJhIGhhYmxhciBkZSBhY2Npb25lcyBjb21wbGV0YWRhcyBlbiBlbCBwYXNhZG8uPC9wPgogICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Fc3RydWN0dXJhOjwvc3Ryb25nPiBTdWpldG8gKyB2ZXJibyBlbiBwYXNhZG8gKyBjb21wbGVtZW50bzwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RWplbXBsbzo8L3N0cm9uZz4gSSB2aXNpdGVkIFBhcmlzIGxhc3Qgc3VtbWVyLjwvcD4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGgzPlBhc3QgQ29udGludW91czwvaDM+CiAgICAgICAgICAgICAgICA8cD5TZSB1c2EgcGFyYSBoYWJsYXIgZGUgYWNjaW9uZXMgcXVlIGVzdGFiYW4gZW4gcHJvZ3Jlc28gZW4gdW4gbW9tZW50byBlc3BlY8OtZmljbyBkZWwgcGFzYWRvLjwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RXN0cnVjdHVyYTo8L3N0cm9uZz4gU3VqZXRvICsgd2FzL3dlcmUgKyB2ZXJiby1pbmcgKyBjb21wbGVtZW50bzwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RWplbXBsbzo8L3N0cm9uZz4gU2hlIHdhcyBjb29raW5nIHdoZW4gSSBjYWxsZWQuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ29udGVuZWRvciBkZSBlamVyY2ljaW9zIHF1ZSBzZSBnZW5lcmFyw6FuIGRpbsOhbWljYW1lbnRlIC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJwYXN0LWV4ZXJjaXNlcy1jb250YWluZXIiIGNsYXNzPSJleGVyY2lzZXMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDwhLS0gTG9zIGVqZXJjaWNpb3Mgc2UgZ2VuZXJhcsOhbiBkaW7DoW1pY2FtZW50ZSBhcXXDrSAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXZpZ2F0aW9uLWJ1dHRvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIG5hdi1idG4gcHJldiIgZGF0YS1wcmV2PSJwcmVzZW50Ij5BbnRlcmlvcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIG5hdi1idG4gbmV4dCIgZGF0YS1uZXh0PSJmdXR1cmUiPlNpZ3VpZW50ZTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8IS0tIEZ1dHVybyAtLT4KICAgICAgICA8ZGl2IGlkPSJmdXR1cmUiIGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgICAgICAgIDxoMj5UaWVtcG9zIFZlcmJhbGVzIGRlIEZ1dHVybzwvaDI+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zZS1leHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICA8aDM+RnV0dXJlIFNpbXBsZSAod2lsbCk8L2gzPgogICAgICAgICAgICAgICAgPHA+U2UgdXNhIHBhcmEgcHJlZGljY2lvbmVzLCBwcm9tZXNhcyBvIGRlY2lzaW9uZXMgZXNwb250w6FuZWFzLjwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RXN0cnVjdHVyYTo8L3N0cm9uZz4gU3VqZXRvICsgd2lsbCArIHZlcmJvICsgY29tcGxlbWVudG88L3A+CiAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkVqZW1wbG86PC9zdHJvbmc+IEkgd2lsbCBjYWxsIHlvdSB0b21vcnJvdy48L3A+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxoMz5Hb2luZyB0bzwvaDM+CiAgICAgICAgICAgICAgICA8cD5TZSB1c2EgcGFyYSBwbGFuZXMgZSBpbnRlbmNpb25lcyBmdXR1cmFzLjwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RXN0cnVjdHVyYTo8L3N0cm9uZz4gU3VqZXRvICsgYW0vaXMvYXJlICsgZ29pbmcgdG8gKyB2ZXJibyArIGNvbXBsZW1lbnRvPC9wPgogICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5FamVtcGxvOjwvc3Ryb25nPiBXZSBhcmUgZ29pbmcgdG8gdmlzaXQgZ3JhbmRtYSBuZXh0IHdlZWtlbmQuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ29udGVuZWRvciBkZSBlamVyY2ljaW9zIHF1ZSBzZSBnZW5lcmFyw6FuIGRpbsOhbWljYW1lbnRlIC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJmdXR1cmUtZXhlcmNpc2VzLWNvbnRhaW5lciIgY2xhc3M9ImV4ZXJjaXNlcy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPCEtLSBMb3MgZWplcmNpY2lvcyBzZSBnZW5lcmFyw6FuIGRpbsOhbWljYW1lbnRlIGFxdcOtIC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdmlnYXRpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gbmF2LWJ0biBwcmV2IiBkYXRhLXByZXY9InBhc3QiPkFudGVyaW9yPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gbmF2LWJ0biBuZXh0IiBkYXRhLW5leHQ9InBlcmZlY3QiPlNpZ3VpZW50ZTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8IS0tIFBlcmZlY3QgLS0+CiAgICAgICAgPGRpdiBpZD0icGVyZmVjdCIgY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgICAgICAgPGgyPlRpZW1wb3MgVmVyYmFsZXMgUGVyZmVjdDwvaDI+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zZS1leHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICA8aDM+UHJlc2VudCBQZXJmZWN0PC9oMz4KICAgICAgICAgICAgICAgIDxwPlNlIHVzYSBwYXJhIGNvbmVjdGFyIGVsIHBhc2FkbyBjb24gZWwgcHJlc2VudGUsIHBhcmEgZXhwZXJpZW5jaWFzIHkgYWNjaW9uZXMgcmVjaWVudGVzLjwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RXN0cnVjdHVyYTo8L3N0cm9uZz4gU3VqZXRvICsgaGF2ZS9oYXMgKyBwYXJ0aWNpcGlvIHBhc2FkbyArIGNvbXBsZW1lbnRvPC9wPgogICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5FamVtcGxvOjwvc3Ryb25nPiBJIGhhdmUgbGl2ZWQgaW4gdGhpcyBjaXR5IGZvciAxMCB5ZWFycy48L3A+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxoMz5QcmVzZW50IFBlcmZlY3QgQ29udGludW91czwvaDM+CiAgICAgICAgICAgICAgICA8cD5TZSB1c2EgcGFyYSBhY2Npb25lcyBxdWUgY29tZW56YXJvbiBlbiBlbCBwYXNhZG8geSBjb250aW7DumFuIGhhc3RhIGVsIHByZXNlbnRlLjwvcD4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RXN0cnVjdHVyYTo8L3N0cm9uZz4gU3VqZXRvICsgaGF2ZS9oYXMgKyBiZWVuICsgdmVyYm8taW5nICsgY29tcGxlbWVudG88L3A+CiAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkVqZW1wbG86PC9zdHJvbmc+IFNoZSBoYXMgYmVlbiB3b3JraW5nIGhlcmUgc2luY2UgMjAxMC48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBDb250ZW5lZG9yIGRlIGVqZXJjaWNpb3MgcXVlIHNlIGdlbmVyYXLDoW4gZGluw6FtaWNhbWVudGUgLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InBlcmZlY3QtZXhlcmNpc2VzLWNvbnRhaW5lciIgY2xhc3M9ImV4ZXJjaXNlcy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPCEtLSBMb3MgZWplcmNpY2lvcyBzZSBnZW5lcmFyw6FuIGRpbsOhbWljYW1lbnRlIGFxdcOtIC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdmlnYXRpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gbmF2LWJ0biBwcmV2IiBkYXRhLXByZXY9ImZ1dHVyZSI+QW50ZXJpb3I8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBuYXYtYnRuIG5leHQiIGRhdGEtbmV4dD0ibWl4ZWQiPlNpZ3VpZW50ZTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8IS0tIE1peHRvIC0tPgogICAgICAgIDxkaXYgaWQ9Im1peGVkIiBjbGFzcz0idGFiLWNvbnRlbnQiPgogICAgICAgICAgICA8aDI+RWplcmNpY2lvcyBNaXh0b3MgZGUgVGllbXBvcyBWZXJiYWxlczwvaDI+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zZS1leHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICA8cD5Fc3RhIHNlY2Npw7NuIGNvbWJpbmEgdG9kb3MgbG9zIHRpZW1wb3MgdmVyYmFsZXMgcXVlIGhhcyBwcmFjdGljYWRvLiDCoVBvbiBhIHBydWViYSB0dXMgY29ub2NpbWllbnRvcyE8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBDb250ZW5lZG9yIGRlIGVqZXJjaWNpb3MgcXVlIHNlIGdlbmVyYXLDoW4gZGluw6FtaWNhbWVudGUgLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9Im1peGVkLWV4ZXJjaXNlcy1jb250YWluZXIiIGNsYXNzPSJleGVyY2lzZXMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDwhLS0gTG9zIGVqZXJjaWNpb3Mgc2UgZ2VuZXJhcsOhbiBkaW7DoW1pY2FtZW50ZSBhcXXDrSAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXZpZ2F0aW9uLWJ1dHRvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIG5hdi1idG4gcHJldiIgZGF0YS1wcmV2PSJwZXJmZWN0Ij5BbnRlcmlvcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIG5hdi1idG4gbmV4dCIgZGlzYWJsZWQ+U2lndWllbnRlPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIAogICAgPC9kaXY+CiAgIAo8L2JvZHk+CjwvaHRtbD4=[/fusion_code]
[fusion_code]PHNjcmlwdD4KLy8gVmFyaWFibGVzIHBhcmEgc2VndWltaWVudG8gZGUgcHVudHVhY2nDs24KbGV0IGNvcnJlY3RBbnN3ZXJzID0gMDsKbGV0IHRvdGFsUXVlc3Rpb25zID0gMDsKbGV0IHF1ZXN0aW9uQXR0ZW1wdHMgPSBuZXcgU2V0KCk7IC8vIENvbmp1bnRvIHBhcmEgcmFzdHJlYXIgcHJlZ3VudGFzIHlhIGludGVudGFkYXMKCi8qKgoqIEZ1bmNpw7NuIHBhcmEgY2FtYmlhciBlbnRyZSBwZXN0YcOxYXMKKiBAcGFyYW0ge3N0cmluZ30gdGFiSWQgLSBJRCBkZSBsYSBwZXN0YcOxYSBhIG1vc3RyYXIKKi8KZnVuY3Rpb24gc3dpdGNoVGFiKHRhYklkKSB7CmNvbnNvbGUubG9nKGBDYW1iaWFuZG8gYSBwZXN0YcOxYTogJHt0YWJJZH1gKTsKCi8vIERlc2FjdGl2YXIgdG9kYXMgbGFzIHBlc3Rhw7Fhcwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmF2LXRhYicpLmZvckVhY2godGFiID0+IHRhYi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7CmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWItY29udGVudCcpLmZvckVhY2goY29udGVudCA9PiBjb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTsKCi8vIEFjdGl2YXIgbGEgcGVzdGHDsWEgc2VsZWNjaW9uYWRhCmNvbnN0IHNlbGVjdGVkVGFiID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLm5hdi10YWJbZGF0YS10YWI9IiR7dGFiSWR9Il1gKTsKY29uc3Qgc2VsZWN0ZWRDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFiSWQpOwoKaWYgKHNlbGVjdGVkVGFiKSBzZWxlY3RlZFRhYi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKaWYgKHNlbGVjdGVkQ29udGVudCkgc2VsZWN0ZWRDb250ZW50LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwoKY29uc29sZS5sb2coYFBlc3Rhw7FhIGNhbWJpYWRhIGE6ICR7dGFiSWR9YCk7Cn0KCi8vIEJhbmNvIGRlIHByZWd1bnRhcyBwYXJhIGNhZGEgdGllbXBvIHZlcmJhbApjb25zdCBxdWVzdGlvbkJhbmsgPSB7CnByZXNlbnQ6IFsKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ1ByZXNlbnQgU2ltcGxlJywKcXVlc3Rpb246ICdTYXJhaCBfX19fX19fXyAod29yaykgYXQgYSBiYW5rLicsCm9wdGlvbnM6IFsnd29yaycsICd3b3JrcycsICdpcyB3b3JraW5nJ10sCmFuc3dlcjogJ3dvcmtzJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgIndvcmtzIiBwb3JxdWUgZXMgdGVyY2VyYSBwZXJzb25hIHNpbmd1bGFyIGVuIFByZXNlbnQgU2ltcGxlLicKfSwKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ1ByZXNlbnQgU2ltcGxlJywKcXVlc3Rpb246ICdUaGV5IF9fX19fX19fIChwbGF5KSBmb290YmFsbCBldmVyeSB3ZWVrZW5kLicsCm9wdGlvbnM6IFsncGxheScsICdwbGF5cycsICdhcmUgcGxheWluZyddLAphbnN3ZXI6ICdwbGF5JywKZXhwbGFuYXRpb246ICdVc2Ftb3MgInBsYXkiIHBhcmEgc3VqZXRvcyBwbHVyYWxlcyBlbiBQcmVzZW50IFNpbXBsZSBwYXJhIGhhYmxhciBkZSBow6FiaXRvcy4nCn0sCnsKdHlwZTogJ211bHRpcGxlJywKdGl0bGU6ICdQcmVzZW50IFNpbXBsZScsCnF1ZXN0aW9uOiAnVGhlIGVhcnRoIF9fX19fX19fIChyb3RhdGUpIGFyb3VuZCB0aGUgc3VuLicsCm9wdGlvbnM6IFsncm90YXRlJywgJ3JvdGF0ZXMnLCAnaXMgcm90YXRpbmcnXSwKYW5zd2VyOiAncm90YXRlcycsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJyb3RhdGVzIiBwYXJhIGhhYmxhciBkZSBoZWNob3MgY2llbnTDrWZpY29zIGVuIFByZXNlbnQgU2ltcGxlLicKfSwKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ1ByZXNlbnQgU2ltcGxlJywKcXVlc3Rpb246ICdNeSBzaXN0ZXIgX19fX19fX18gKHRlYWNoKSBFbmdsaXNoIGF0IGEgdW5pdmVyc2l0eS4nLApvcHRpb25zOiBbJ3RlYWNoJywgJ3RlYWNocycsICd0ZWFjaGVzJ10sCmFuc3dlcjogJ3RlYWNoZXMnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAidGVhY2hlcyIgcGFyYSB0ZXJjZXJhIHBlcnNvbmEgc2luZ3VsYXIgZW4gUHJlc2VudCBTaW1wbGUuIENvbiB2ZXJib3MgcXVlIHRlcm1pbmFuIGVuIC1jaCwgLXNoLCAtc3MsIC14IHUgLW8sIGHDsWFkaW1vcyAtZXMuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUHJlc2VudCBDb250aW51b3VzJywKcXVlc3Rpb246ICdMb29rISBUaGUgY2hpbGRyZW4gX19fX19fX18gKHBsYXkpIGluIHRoZSBwYXJrLicsCm9wdGlvbnM6IFsncGxheScsICdwbGF5cycsICdhcmUgcGxheWluZyddLAphbnN3ZXI6ICdhcmUgcGxheWluZycsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJhcmUgcGxheWluZyIgcG9ycXVlIGxhIGFjY2nDs24gZXN0w6Egb2N1cnJpZW5kbyBlbiBlc3RlIG1vbWVudG8gKFByZXNlbnQgQ29udGludW91cykuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUHJlc2VudCBDb250aW51b3VzJywKcXVlc3Rpb246ICdTaGUgX19fX19fX18gKHN0dWR5KSBmb3IgaGVyIGZpbmFsIGV4YW0gdGhpcyB3ZWVrLicsCm9wdGlvbnM6IFsnc3R1ZHknLCAnc3R1ZGllcycsICdpcyBzdHVkeWluZyddLAphbnN3ZXI6ICdpcyBzdHVkeWluZycsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJpcyBzdHVkeWluZyIgcGFyYSB1bmEgYWNjacOzbiB0ZW1wb3JhbCBxdWUgb2N1cnJlIGVuIGVzdGUgcGVyw61vZG8gKFByZXNlbnQgQ29udGludW91cykuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUHJlc2VudCBDb250aW51b3VzJywKcXVlc3Rpb246ICdJIF9fX19fX19fIChub3Qgd29yaykgdG9kYXkgYmVjYXVzZSBJXCdtIG9uIHZhY2F0aW9uLicsCm9wdGlvbnM6IFsnbm90IHdvcmsnLCAnZG9uXCd0IHdvcmsnLCAnYW0gbm90IHdvcmtpbmcnXSwKYW5zd2VyOiAnYW0gbm90IHdvcmtpbmcnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAiYW0gbm90IHdvcmtpbmciIHBhcmEgZXhwcmVzYXIgcXVlIG5vIGVzdG95IHJlYWxpemFuZG8gZXNhIGFjY2nDs24gdGVtcG9yYWxtZW50ZSAoUHJlc2VudCBDb250aW51b3VzIG5lZ2F0aXZvKS4nCn0sCnsKdHlwZTogJ2ZpbGwnLAp0aXRsZTogJ1ByZXNlbnQgU2ltcGxlJywKcXVlc3Rpb246ICdNeSBtb3RoZXIgX19fX19fX18gKGNvb2spIGRpbm5lciBldmVyeSBTdW5kYXkuJywKYW5zd2VyOiAnY29va3MnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAiY29va3MiIHBvcnF1ZSBlcyB1biBow6FiaXRvIG8gcnV0aW5hIChQcmVzZW50IFNpbXBsZSkgZW4gdGVyY2VyYSBwZXJzb25hIHNpbmd1bGFyLicKfSwKewp0eXBlOiAnZmlsbCcsCnRpdGxlOiAnUHJlc2VudCBDb250aW51b3VzJywKcXVlc3Rpb246ICdCZSBxdWlldCEgVGhlIGJhYnkgX19fX19fX18gKHNsZWVwKSByaWdodCBub3cuJywKYW5zd2VyOiAnaXMgc2xlZXBpbmcnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAiaXMgc2xlZXBpbmciIHBvcnF1ZSBlcyB1bmEgYWNjacOzbiBlbiBwcm9ncmVzbyBlbiBlc3RlIG1vbWVudG8gKFByZXNlbnQgQ29udGludW91cykuJwp9LAp7CnR5cGU6ICdkb3VibGUnLAp0aXRsZTogJ1ByZXNlbnQgU2ltcGxlIHZzIFByZXNlbnQgQ29udGludW91cycsCnF1ZXN0aW9uOiAnUmlnaHQgbm93LCBoZSBfX19fX19fXyAod2F0Y2gpIGEgbW92aWUsIGJ1dCB1c3VhbGx5IGhlIF9fX19fX19fIChyZWFkKSBib29rcyBpbiB0aGUgZXZlbmluZy4nLApvcHRpb25zMTogWyd3YXRjaGVzJywgJ2lzIHdhdGNoaW5nJ10sCm9wdGlvbnMyOiBbJ3JlYWRzJywgJ2lzIHJlYWRpbmcnXSwKYW5zd2VyMTogJ2lzIHdhdGNoaW5nJywKYW5zd2VyMjogJ3JlYWRzJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgImlzIHdhdGNoaW5nIiBwYXJhIHVuYSBhY2Npw7NuIGVuIHByb2dyZXNvIGFob3JhIHkgInJlYWRzIiBwYXJhIHVuIGjDoWJpdG8gaGFiaXR1YWwuJwp9LAp7CnR5cGU6ICdkb3VibGUnLAp0aXRsZTogJ1ByZXNlbnQgU2ltcGxlIHZzIFByZXNlbnQgQ29udGludW91cycsCnF1ZXN0aW9uOiAnTXkgcGFyZW50cyBub3JtYWxseSBfX19fX19fXyAobGl2ZSkgaW4gTWFkcmlkLCBidXQgdGhleSBfX19fX19fXyAoc3RheSkgd2l0aCBtZSB0aGlzIG1vbnRoLicsCm9wdGlvbnMxOiBbJ2xpdmUnLCAnYXJlIGxpdmluZyddLApvcHRpb25zMjogWydzdGF5JywgJ2FyZSBzdGF5aW5nJ10sCmFuc3dlcjE6ICdsaXZlJywKYW5zd2VyMjogJ2FyZSBzdGF5aW5nJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgImxpdmUiIHBhcmEgdW4gZXN0YWRvIHBlcm1hbmVudGUgeSAiYXJlIHN0YXlpbmciIHBhcmEgdW5hIHNpdHVhY2nDs24gdGVtcG9yYWwuJwp9Cl0sCnBhc3Q6IFsKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ1Bhc3QgU2ltcGxlJywKcXVlc3Rpb246ICdMYXN0IHdlZWtlbmQsIHdlIF9fX19fX19fIChnbykgdG8gdGhlIGJlYWNoLicsCm9wdGlvbnM6IFsnZ28nLCAnd2VudCcsICd3ZXJlIGdvaW5nJ10sCmFuc3dlcjogJ3dlbnQnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAid2VudCIgcXVlIGVzIGVsIFBhc3QgU2ltcGxlIGRlbCB2ZXJibyAiZ28iLicKfSwKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ1Bhc3QgU2ltcGxlJywKcXVlc3Rpb246ICdJIF9fX19fX19fIChidXkpIGEgbmV3IGNhciBsYXN0IG1vbnRoLicsCm9wdGlvbnM6IFsnYnV5JywgJ2J1eWVkJywgJ2JvdWdodCddLAphbnN3ZXI6ICdib3VnaHQnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAiYm91Z2h0IiBxdWUgZXMgZWwgcGFzYWRvIGlycmVndWxhciBkZWwgdmVyYm8gImJ1eSIuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUGFzdCBTaW1wbGUnLApxdWVzdGlvbjogJ1NoZSBfX19fX19fXyAobm90IGF0dGVuZCkgdGhlIG1lZXRpbmcgeWVzdGVyZGF5LicsCm9wdGlvbnM6IFsnbm90IGF0dGVuZGVkJywgJ2RpZG5cJ3QgYXR0ZW5kJywgJ3dhc25cJ3QgYXR0ZW5kaW5nJ10sCmFuc3dlcjogJ2RpZG5cJ3QgYXR0ZW5kJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgImRpZG5cJ3QgYXR0ZW5kIiBwYXJhIGV4cHJlc2FyIG5lZ2FjacOzbiBlbiBQYXN0IFNpbXBsZS4nCn0sCnsKdHlwZTogJ211bHRpcGxlJywKdGl0bGU6ICdQYXN0IENvbnRpbnVvdXMnLApxdWVzdGlvbjogJ1doZW4gdGhlIHBob25lIHJhbmcsIEkgX19fX19fX18gKHRha2UpIGEgc2hvd2VyLicsCm9wdGlvbnM6IFsndG9vaycsICd3YXMgdGFraW5nJywgJ2FtIHRha2luZyddLAphbnN3ZXI6ICd3YXMgdGFraW5nJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgIndhcyB0YWtpbmciIHBvcnF1ZSBsYSBhY2Npw7NuIGVzdGFiYSBlbiBwcm9ncmVzbyBjdWFuZG8gb3RyYSBhY2Npw7NuIG9jdXJyacOzIChQYXN0IENvbnRpbnVvdXMpLicKfSwKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ1Bhc3QgQ29udGludW91cycsCnF1ZXN0aW9uOiAnVGhlIGNoaWxkcmVuIF9fX19fX19fIChwbGF5KSBpbiB0aGUgZ2FyZGVuIGFsbCBhZnRlcm5vb24uJywKb3B0aW9uczogWydwbGF5ZWQnLCAnd2VyZSBwbGF5aW5nJywgJ3dhcyBwbGF5aW5nJ10sCmFuc3dlcjogJ3dlcmUgcGxheWluZycsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJ3ZXJlIHBsYXlpbmciIHBhcmEgdW5hIGFjY2nDs24gcXVlIGVzdGFiYSBlbiBwcm9ncmVzbyBkdXJhbnRlIHVuIHBlcsOtb2RvIGVuIGVsIHBhc2FkbyAoUGFzdCBDb250aW51b3VzKS4nCn0sCnsKdHlwZTogJ211bHRpcGxlJywKdGl0bGU6ICdQYXN0IENvbnRpbnVvdXMnLApxdWVzdGlvbjogJ0F0IDggUE0gbGFzdCBuaWdodCwgdGhleSBfX19fX19fXyAod2F0Y2gpIHRoZSBuZXdzIG9uIFRWLicsCm9wdGlvbnM6IFsnd2F0Y2hlZCcsICd3ZXJlIHdhdGNoaW5nJywgJ3dhdGNoaW5nJ10sCmFuc3dlcjogJ3dlcmUgd2F0Y2hpbmcnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAid2VyZSB3YXRjaGluZyIgcGFyYSB1bmEgYWNjacOzbiBlbiBwcm9ncmVzbyBlbiB1biBtb21lbnRvIGVzcGVjw61maWNvIGRlbCBwYXNhZG8gKFBhc3QgQ29udGludW91cykuJwp9LAp7CnR5cGU6ICdkb3VibGUnLAp0aXRsZTogJ1Bhc3QgU2ltcGxlIHZzIFBhc3QgQ29udGludW91cycsCnF1ZXN0aW9uOiAnV2hpbGUgSSBfX19fX19fXyAoc3R1ZHkpLCBteSBicm90aGVyIF9fX19fX19fIChhcnJpdmUpIGhvbWUuJywKb3B0aW9uczE6IFsnc3R1ZGllZCcsICd3YXMgc3R1ZHlpbmcnXSwKb3B0aW9uczI6IFsnYXJyaXZlZCcsICd3YXMgYXJyaXZpbmcnXSwKYW5zd2VyMTogJ3dhcyBzdHVkeWluZycsCmFuc3dlcjI6ICdhcnJpdmVkJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgIndhcyBzdHVkeWluZyIgKFBhc3QgQ29udGludW91cykgcGFyYSBsYSBhY2Npw7NuIGVuIHByb2dyZXNvIHkgImFycml2ZWQiIChQYXN0IFNpbXBsZSkgcGFyYSBsYSBhY2Npw7NuIHF1ZSBpbnRlcnJ1bXBlLicKfSwKewp0eXBlOiAnZG91YmxlJywKdGl0bGU6ICdQYXN0IFNpbXBsZSB2cyBQYXN0IENvbnRpbnVvdXMnLApxdWVzdGlvbjogJ1doZW4gdGhlIHN0b3JtIF9fX19fX19fIChzdGFydCksIHdlIF9fX19fX19fIChkcml2ZSkgdG8gQm9zdG9uLicsCm9wdGlvbnMxOiBbJ3N0YXJ0ZWQnLCAnd2FzIHN0YXJ0aW5nJ10sCm9wdGlvbnMyOiBbJ2Ryb3ZlJywgJ3dlcmUgZHJpdmluZyddLAphbnN3ZXIxOiAnc3RhcnRlZCcsCmFuc3dlcjI6ICd3ZXJlIGRyaXZpbmcnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAic3RhcnRlZCIgKFBhc3QgU2ltcGxlKSBwYXJhIHVuYSBhY2Npw7NuIHB1bnR1YWwgeSAid2VyZSBkcml2aW5nIiAoUGFzdCBDb250aW51b3VzKSBwYXJhIHVuYSBhY2Npw7NuIHF1ZSBlc3RhYmEgZW4gcHJvZ3Jlc28uJwp9Cl0sCmZ1dHVyZTogWwp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnRnV0dXJlIFNpbXBsZSAod2lsbCknLApxdWVzdGlvbjogJ0kgdGhpbmsgaXQgX19fX19fX18gKHJhaW4pIHRvbW9ycm93LicsCm9wdGlvbnM6IFsncmFpbnMnLCAnd2lsbCByYWluJywgJ2lzIGdvaW5nIHRvIHJhaW4nXSwKYW5zd2VyOiAnd2lsbCByYWluJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgIndpbGwgcmFpbiIgcGFyYSBleHByZXNhciB1bmEgcHJlZGljY2nDs24gc29icmUgZWwgZnV0dXJvLicKfSwKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ0Z1dHVyZSBTaW1wbGUgKHdpbGwpJywKcXVlc3Rpb246ICdJXCdtIHN1cmUgdGhleSBfX19fX19fXyAod2luKSB0aGUgY29tcGV0aXRpb24uJywKb3B0aW9uczogWyd3aW4nLCAnd2lsbCB3aW4nLCAnYXJlIGdvaW5nIHRvIHdpbiddLAphbnN3ZXI6ICd3aWxsIHdpbicsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJ3aWxsIHdpbiIgcGFyYSBleHByZXNhciB1bmEgcHJlZGljY2nDs24gYmFzYWRhIGVuIGxhIG9waW5pw7NuIGRlbCBoYWJsYW50ZS4nCn0sCnsKdHlwZTogJ211bHRpcGxlJywKdGl0bGU6ICdGdXR1cmUgU2ltcGxlICh3aWxsKScsCnF1ZXN0aW9uOiAnSVwnbSBob3QuIEkgX19fX19fX18gKG9wZW4pIHRoZSB3aW5kb3cuJywKb3B0aW9uczogWydvcGVuJywgJ3dpbGwgb3BlbicsICdhbSBnb2luZyB0byBvcGVuJ10sCmFuc3dlcjogJ3dpbGwgb3BlbicsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJ3aWxsIG9wZW4iIHBhcmEgdW5hIGRlY2lzacOzbiBlc3BvbnTDoW5lYSB0b21hZGEgZW4gZWwgbW9tZW50byBkZSBoYWJsYXIuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnR29pbmcgdG8nLApxdWVzdGlvbjogJ1dlIGhhdmUgYWxyZWFkeSBib3VnaHQgdGlja2V0cy4gV2UgX19fX19fX18gKHRyYXZlbCkgdG8gU3BhaW4gbmV4dCBtb250aC4nLApvcHRpb25zOiBbJ3RyYXZlbCcsICd3aWxsIHRyYXZlbCcsICdhcmUgZ29pbmcgdG8gdHJhdmVsJ10sCmFuc3dlcjogJ2FyZSBnb2luZyB0byB0cmF2ZWwnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAiYXJlIGdvaW5nIHRvIHRyYXZlbCIgcG9ycXVlIGhheSB1biBwbGFuIG8gaW50ZW5jacOzbiB5YSBkZWNpZGlkYSAoZXZpZGVuY2lhIHByZXNlbnRlKS4nCn0sCnsKdHlwZTogJ211bHRpcGxlJywKdGl0bGU6ICdHb2luZyB0bycsCnF1ZXN0aW9uOiAnTG9vayBhdCB0aG9zZSBkYXJrIGNsb3VkcyEgSXQgX19fX19fX18gKHJhaW4pIHNvb24uJywKb3B0aW9uczogWydyYWlucycsICd3aWxsIHJhaW4nLCAnaXMgZ29pbmcgdG8gcmFpbiddLAphbnN3ZXI6ICdpcyBnb2luZyB0byByYWluJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgImlzIGdvaW5nIHRvIHJhaW4iIGN1YW5kbyBoYXkgc2lnbm9zIHZpc2libGVzIGRlIHF1ZSBhbGdvIHZhIGEgc3VjZWRlciAocHJlZGljY2nDs24gY29uIGV2aWRlbmNpYSkuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnR29pbmcgdG8nLApxdWVzdGlvbjogJ1NoZSBfX19fX19fXyAoc3R1ZHkpIG1lZGljaW5lIGF0IHVuaXZlcnNpdHkgbmV4dCB5ZWFyLicsCm9wdGlvbnM6IFsnc3R1ZGllcycsICd3aWxsIHN0dWR5JywgJ2lzIGdvaW5nIHRvIHN0dWR5J10sCmFuc3dlcjogJ2lzIGdvaW5nIHRvIHN0dWR5JywKZXhwbGFuYXRpb246ICdVc2Ftb3MgImlzIGdvaW5nIHRvIHN0dWR5IiBwYXJhIHVuIHBsYW4gbyBpbnRlbmNpw7NuIHBhcmEgZWwgZnV0dXJvLicKfSwKewp0eXBlOiAnZG91YmxlJywKdGl0bGU6ICdXaWxsIHZzIEdvaW5nIHRvJywKcXVlc3Rpb246ICdMb29rIGF0IHRob3NlIGRhcmsgY2xvdWRzLiBJdCBfX19fX19fXyAocmFpbikuIE9oLCBJIGZvcmdvdCBteSB1bWJyZWxsYS4gSSBfX19fX19fXyAoZ2V0KSB3ZXQhJywKb3B0aW9uczE6IFsnd2lsbCByYWluJywgJ2lzIGdvaW5nIHRvIHJhaW4nXSwKb3B0aW9uczI6IFsnd2lsbCBnZXQnLCAnYW0gZ29pbmcgdG8gZ2V0J10sCmFuc3dlcjE6ICdpcyBnb2luZyB0byByYWluJywKYW5zd2VyMjogJ3dpbGwgZ2V0JywKZXhwbGFuYXRpb246ICdVc2Ftb3MgImlzIGdvaW5nIHRvIHJhaW4iIHBvcnF1ZSBoYXkgZXZpZGVuY2lhIHByZXNlbnRlIChudWJlcyBvc2N1cmFzKSB5ICJ3aWxsIGdldCIgcGFyYSB1bmEgY29uY2x1c2nDs24gbMOzZ2ljYSBleHByZXNhZGEgZW4gZWwgbW9tZW50by4nCn0KXSwKcGVyZmVjdDogWwp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUHJlc2VudCBQZXJmZWN0JywKcXVlc3Rpb246ICdTaGUgX19fX19fX18gKHZpc2l0KSBQYXJpcyB0aHJlZSB0aW1lcy4nLApvcHRpb25zOiBbJ3Zpc2l0ZWQnLCAnaGFzIHZpc2l0ZWQnLCAnaXMgdmlzaXRpbmcnXSwKYW5zd2VyOiAnaGFzIHZpc2l0ZWQnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAiaGFzIHZpc2l0ZWQiIHBvcnF1ZSBlcyB1bmEgZXhwZXJpZW5jaWEgc2luIHRpZW1wbyBlc3BlY8OtZmljbyAoUHJlc2VudCBQZXJmZWN0KS4nCn0sCnsKdHlwZTogJ211bHRpcGxlJywKdGl0bGU6ICdQcmVzZW50IFBlcmZlY3QnLApxdWVzdGlvbjogJ0kgX19fX19fX18gKG5vdCBzZWUpIEpvaG4gc2luY2UgbGFzdCB3ZWVrLicsCm9wdGlvbnM6IFsnZGlkblwndCBzZWUnLCAnaGF2ZW5cJ3Qgc2VlbicsICdhbSBub3Qgc2VlaW5nJ10sCmFuc3dlcjogJ2hhdmVuXCd0IHNlZW4nLApleHBsYW5hdGlvbjogJ1VzYW1vcyAiaGF2ZW5cJ3Qgc2VlbiIgcGFyYSB1bmEgYWNjacOzbiBxdWUgY29tZW56w7MgZW4gZWwgcGFzYWRvIHkgY29udGluw7phIGhhc3RhIGVsIHByZXNlbnRlLicKfSwKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ1ByZXNlbnQgUGVyZmVjdCcsCnF1ZXN0aW9uOiAnX19fX19fX18gKHlvdS9ldmVyL2JlKSB0byBKYXBhbj8nLApvcHRpb25zOiBbJ0RpZCB5b3UgZXZlciBiZScsICdIYXZlIHlvdSBldmVyIGJlZW4nLCAnQXJlIHlvdSBldmVyJ10sCmFuc3dlcjogJ0hhdmUgeW91IGV2ZXIgYmVlbicsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJIYXZlIHlvdSBldmVyIGJlZW4iIHBhcmEgcHJlZ3VudGFyIHNvYnJlIGV4cGVyaWVuY2lhcyBlbiBsYSB2aWRhIGhhc3RhIGVsIG1vbWVudG8gcHJlc2VudGUuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUHJlc2VudCBQZXJmZWN0IENvbnRpbnVvdXMnLApxdWVzdGlvbjogJ0kgX19fX19fX18gKHdhaXQpIGZvciB0aGUgYnVzIGZvciAzMCBtaW51dGVzLicsCm9wdGlvbnM6IFsnd2FpdCcsICdoYXZlIHdhaXRlZCcsICdoYXZlIGJlZW4gd2FpdGluZyddLAphbnN3ZXI6ICdoYXZlIGJlZW4gd2FpdGluZycsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJoYXZlIGJlZW4gd2FpdGluZyIgcGFyYSB1bmEgYWNjacOzbiBxdWUgY29tZW56w7MgZW4gZWwgcGFzYWRvIHkgY29udGluw7phIGhhc3RhIGVsIHByZXNlbnRlLCBlbmZhdGl6YW5kbyBsYSBkdXJhY2nDs24uJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUHJlc2VudCBQZXJmZWN0IENvbnRpbnVvdXMnLApxdWVzdGlvbjogJ1NoZSBfX19fX19fXyAobGVhcm4pIEVuZ2xpc2ggc2luY2UgSmFudWFyeS4nLApvcHRpb25zOiBbJ2xlYXJucycsICdoYXMgbGVhcm5lZCcsICdoYXMgYmVlbiBsZWFybmluZyddLAphbnN3ZXI6ICdoYXMgYmVlbiBsZWFybmluZycsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJoYXMgYmVlbiBsZWFybmluZyIgcGFyYSB1bmEgYWNjacOzbiBjb250aW51YSBkZXNkZSB1biBwdW50byBlbiBlbCBwYXNhZG8gaGFzdGEgZWwgcHJlc2VudGUuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnUHJlc2VudCBQZXJmZWN0IENvbnRpbnVvdXMnLApxdWVzdGlvbjogJ015IGhhbmRzIGFyZSBkaXJ0eSBiZWNhdXNlIEkgX19fX19fX18gKGZpeCkgbXkgYmlrZS4nLApvcHRpb25zOiBbJ2ZpeGVkJywgJ2hhdmUgZml4ZWQnLCAnaGF2ZSBiZWVuIGZpeGluZyddLAphbnN3ZXI6ICdoYXZlIGJlZW4gZml4aW5nJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgImhhdmUgYmVlbiBmaXhpbmciIHBhcmEgdW5hIGFjdGl2aWRhZCByZWNpZW50ZSBjb24gdW4gcmVzdWx0YWRvIHZpc2libGUgZW4gZWwgcHJlc2VudGUuJwp9LAp7CnR5cGU6ICdkb3VibGUnLAp0aXRsZTogJ1ByZXNlbnQgUGVyZmVjdCB2cyBQYXN0IFNpbXBsZScsCnF1ZXN0aW9uOiAnSSBfX19fX19fXyAoc2VlKSB0aGF0IG1vdmllIGxhc3Qgd2VlaywgYnV0IEkgX19fX19fX18gKG5ldmVyL3NlZSkgYSByZWFsIGxpb24uJywKb3B0aW9uczE6IFsnc2F3JywgJ2hhdmUgc2VlbiddLApvcHRpb25zMjogWyduZXZlciBzYXcnLCAnaGF2ZSBuZXZlciBzZWVuJ10sCmFuc3dlcjE6ICdzYXcnLAphbnN3ZXIyOiAnaGF2ZSBuZXZlciBzZWVuJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgInNhdyIgcGFyYSB1bmEgYWNjacOzbiBlbiB1biB0aWVtcG8gZXNwZWPDrWZpY28gZGVsIHBhc2FkbyAobGFzdCB3ZWVrKSB5ICJoYXZlIG5ldmVyIHNlZW4iIHBhcmEgdW5hIGV4cGVyaWVuY2lhIGhhc3RhIGVsIHByZXNlbnRlLicKfQpdLAptaXhlZDogWwp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnTWl4ZWQgVGVuc2VzJywKcXVlc3Rpb246ICdCeSB0aGUgdGltZSB5b3UgYXJyaXZlLCBJIF9fX19fX19fIChmaW5pc2gpIHRoZSBwcm9qZWN0LicsCm9wdGlvbnM6IFsnd2lsbCBmaW5pc2gnLCAnd2lsbCBoYXZlIGZpbmlzaGVkJywgJ2hhdmUgZmluaXNoZWQnXSwKYW5zd2VyOiAnd2lsbCBoYXZlIGZpbmlzaGVkJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgIndpbGwgaGF2ZSBmaW5pc2hlZCIgKEZ1dHVyZSBQZXJmZWN0KSBwb3JxdWUgbGEgYWNjacOzbiBlc3RhcsOhIGNvbXBsZXRhZGEgYW50ZXMgZGUgb3RybyBtb21lbnRvIGZ1dHVyby4nCn0sCnsKdHlwZTogJ211bHRpcGxlJywKdGl0bGU6ICdNaXhlZCBUZW5zZXMnLApxdWVzdGlvbjogJ0lmIGl0IF9fX19fX19fIChyYWluKSB0b21vcnJvdywgd2Ugd2lsbCBjYW5jZWwgdGhlIHBpY25pYy4nLApvcHRpb25zOiBbJ3JhaW5zJywgJ3dpbGwgcmFpbicsICdpcyByYWluaW5nJ10sCmFuc3dlcjogJ3JhaW5zJywKZXhwbGFuYXRpb246ICdVc2Ftb3MgInJhaW5zIiAoUHJlc2VudCBTaW1wbGUpIGVuIGxhIGNsw6F1c3VsYSBpZiBwYXJhIGhhYmxhciBkZSB1bmEgY29uZGljacOzbiBmdXR1cmEuJwp9LAp7CnR5cGU6ICdtdWx0aXBsZScsCnRpdGxlOiAnTWl4ZWQgVGVuc2VzJywKcXVlc3Rpb246ICdTaGUgX19fX19fX18gKGFscmVhZHkvbGVhdmUpIHdoZW4gSSBhcnJpdmVkIGF0IHRoZSBwYXJ0eS4nLApvcHRpb25zOiBbJ2FscmVhZHkgbGVmdCcsICdoYXMgYWxyZWFkeSBsZWZ0JywgJ2hhZCBhbHJlYWR5IGxlZnQnXSwKYW5zd2VyOiAnaGFkIGFscmVhZHkgbGVmdCcsCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJoYWQgYWxyZWFkeSBsZWZ0IiAoUGFzdCBQZXJmZWN0KSBwYXJhIHVuYSBhY2Npw7NuIHF1ZSBvY3VycmnDsyBhbnRlcyBkZSBvdHJhIGFjY2nDs24gZW4gZWwgcGFzYWRvLicKfSwKewp0eXBlOiAnbXVsdGlwbGUnLAp0aXRsZTogJ01peGVkIFRlbnNlcycsCnF1ZXN0aW9uOiAnVGhpcyB0aW1lIG5leHQgd2Vlaywgd2UgX19fX19fX18gKHNpdCkgb24gdGhlIGJlYWNoLicsCm9wdGlvbnM6IFsnc2l0JywgJ3dpbGwgc2l0JywgJ3dpbGwgYmUgc2l0dGluZyddLAphbnN3ZXI6ICd3aWxsIGJlIHNpdHRpbmcnLApleHBsYW5hdGlvbjogJ1VzYW1vcyAid2lsbCBiZSBzaXR0aW5nIiAoRnV0dXJlIENvbnRpbnVvdXMpIHBhcmEgdW5hIGFjY2nDs24gcXVlIGVzdGFyw6EgZW4gcHJvZ3Jlc28gZW4gdW4gbW9tZW50byBlc3BlY8OtZmljbyBkZWwgZnV0dXJvLicKfSwKewp0eXBlOiAnbXVsdGlmaWxsJywKdGl0bGU6ICdNaXhlZCBUZW5zZXMgLSBDb21wbGV0ZSBUZXh0JywKcXVlc3Rpb246ICdMYXN0IHN1bW1lciwgSSBfX19fX19fXyAodmlzaXQpIEl0YWx5LiBXaGlsZSBJIF9fX19fX19fICh3YWxrKSBhcm91bmQgUm9tZSwgSSBfX19fX19fXyAobWVldCkgYW4gb2xkIGZyaWVuZC4gV2UgX19fX19fX18gKG5vdCBzZWUpIGVhY2ggb3RoZXIgZm9yIDEwIHllYXJzLicsCmFuc3dlcnM6IFsndmlzaXRlZCcsICd3YXMgd2Fsa2luZycsICdtZXQnLCAnaGFkIG5vdCBzZWVuJ10sCmV4cGxhbmF0aW9uOiAnVXNhbW9zICJ2aXNpdGVkIiAoUGFzdCBTaW1wbGUpLCAid2FzIHdhbGtpbmciIChQYXN0IENvbnRpbnVvdXMpLCAibWV0IiAoUGFzdCBTaW1wbGUpIHkgImhhZCBub3Qgc2VlbiIgKFBhc3QgUGVyZmVjdCkgc2lndWllbmRvIGxhIHNlY3VlbmNpYSBsw7NnaWNhIGRlIGV2ZW50b3MuJwp9LAp7CnR5cGU6ICdkb3VibGUnLAp0aXRsZTogJ1NlbnRlbmNlIFRyYW5zZm9ybWF0aW9uJywKcXVlc3Rpb246ICdSZWVzY3JpYmU6IDEuICJJIHN0dWR5IEVuZ2xpc2guIiAoUHJlc2VudCBDb250aW51b3VzKSAyLiAiU2hlIHZpc2l0ZWQgaGVyIGdyYW5kbW90aGVyLiIgKFByZXNlbnQgUGVyZmVjdCknLAphbnN3ZXIxOiAnSSBhbSBzdHVkeWluZyBFbmdsaXNoJywKYW5zd2VyMjogJ1NoZSBoYXMgdmlzaXRlZCBoZXIgZ3JhbmRtb3RoZXInLApleHBsYW5hdGlvbjogJ1RyYW5zZm9ybWFtb3MgbGFzIG9yYWNpb25lcyBhbCB0aWVtcG8gdmVyYmFsIGluZGljYWRvIG1hbnRlbmllbmRvIGVsIHNpZ25pZmljYWRvLicKfQpdCn07CgovLyBGdW5jacOzbiBwYXJhIGdlbmVyYXIgdW4gbsO6bWVybyBhbGVhdG9yaW8gZW50cmUgbWluIHkgbWF4IChpbmNsdXNpdmUpCmZ1bmN0aW9uIGdldFJhbmRvbUludChtaW4sIG1heCkgewpyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjsKfQoKLy8gRnVuY2nDs24gcGFyYSBzZWxlY2Npb25hciBwcmVndW50YXMgYWxlYXRvcmlhcyBkZSB1biBhcnJheQpmdW5jdGlvbiBnZXRSYW5kb21RdWVzdGlvbnMoYXJyYXksIGNvdW50KSB7CmNvbnN0IHNodWZmbGVkID0gWy4uLmFycmF5XS5zb3J0KCgpID0+IDAuNSAtIE1hdGgucmFuZG9tKCkpOwpyZXR1cm4gc2h1ZmZsZWQuc2xpY2UoMCwgY291bnQpOwp9CgovLyBGdW5jacOzbiBwYXJhIGdlbmVyYXIgdW4gSUQgw7puaWNvCmZ1bmN0aW9uIGdlbmVyYXRlVW5pcXVlSWQocHJlZml4KSB7CnJldHVybiBwcmVmaXggKyAnLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7Cn0KCi8vIEZ1bmNpw7NuIHBhcmEgZ2VuZXJhciBlamVyY2ljaW9zIGRlIG9wY2nDs24gbcO6bHRpcGxlCmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlwbGVDaG9pY2VFeGVyY2lzZShxdWVzdGlvbiwgaW5kZXgsIGNhdGVnb3J5KSB7CmNvbnN0IGV4ZXJjaXNlSWQgPSBnZW5lcmF0ZVVuaXF1ZUlkKGNhdGVnb3J5KTsKY29uc3QgcXVlc3Rpb25OYW1lID0gY2F0ZWdvcnkgKyAnLXEnICsgaW5kZXg7CgpsZXQgaHRtbCA9IGAKPGRpdiBjbGFzcz0iZXhlcmNpc2UiIGRhdGEtdHlwZT0iJHtjYXRlZ29yeX0iIGlkPSIke2V4ZXJjaXNlSWR9Ij4KPGgzPkVqZXJjaWNpbyAke2luZGV4fTogJHtxdWVzdGlvbi50aXRsZX08L2gzPgo8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+CjxwPiR7cXVlc3Rpb24ucXVlc3Rpb259PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ib3B0aW9ucyI+YDsKCnF1ZXN0aW9uLm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uLCBpKSA9PiB7CmNvbnN0IG9wdGlvbklkID0gcXVlc3Rpb25OYW1lICsgJy0nICsgU3RyaW5nLmZyb21DaGFyQ29kZSg5NyArIGkpOyAvLyBhLCBiLCBjLi4uCmh0bWwgKz0gYAo8ZGl2IGNsYXNzPSJvcHRpb24iPgo8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IiR7cXVlc3Rpb25OYW1lfSIgaWQ9IiR7b3B0aW9uSWR9IiB2YWx1ZT0iJHtvcHRpb259Ij4KPGxhYmVsIGZvcj0iJHtvcHRpb25JZH0iPiR7b3B0aW9ufTwvbGFiZWw+CjwvZGl2PmA7Cn0pOwoKY29uc3Qgc2FmZUFuc3dlciA9IHF1ZXN0aW9uLmFuc3dlci5yZXBsYWNlKC8nL2csICJcXCciKTsKCmh0bWwgKz0gYAo8L2Rpdj4KPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1jaGVjayIgb25jbGljaz0iY2hlY2tBbnN3ZXIoJyR7ZXhlcmNpc2VJZH0nLCAnJHtzYWZlQW5zd2VyfScpIj5Db21wcm9iYXI8L2J1dHRvbj4KPGRpdiBjbGFzcz0iZmVlZGJhY2siPjwvZGl2Pgo8L2Rpdj5gOwoKcmV0dXJuIGh0bWw7Cn0KCi8vIEZ1bmNpw7NuIHBhcmEgZ2VuZXJhciBlamVyY2ljaW9zIGRlIGNvbXBsZXRhcgpmdW5jdGlvbiBnZW5lcmF0ZUZpbGxFeGVyY2lzZShxdWVzdGlvbiwgaW5kZXgsIGNhdGVnb3J5KSB7CmNvbnN0IGV4ZXJjaXNlSWQgPSBnZW5lcmF0ZVVuaXF1ZUlkKGNhdGVnb3J5KTsKCmNvbnN0IHNhZmVBbnN3ZXIgPSBxdWVzdGlvbi5hbnN3ZXIucmVwbGFjZSgvJy9nLCAiXFwnIik7CgpsZXQgaHRtbCA9IGAKPGRpdiBjbGFzcz0iZXhlcmNpc2UiIGRhdGEtdHlwZT0iJHtjYXRlZ29yeX0iIGlkPSIke2V4ZXJjaXNlSWR9Ij4KPGgzPkVqZXJjaWNpbyAke2luZGV4fTogJHtxdWVzdGlvbi50aXRsZX08L2gzPgo8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+CjxwPkNvbXBsZXRlIGxhIG9yYWNpw7NuIGNvbiBsYSBmb3JtYSBjb3JyZWN0YSBkZWwgdmVyYm8gZW50cmUgcGFyw6ludGVzaXMuPC9wPgo8cD4ke3F1ZXN0aW9uLnF1ZXN0aW9ufTwvcD4KPC9kaXY+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQtYW5zd2VyIiBpZD0iJHtleGVyY2lzZUlkfS1pbnB1dCIgcGxhY2Vob2xkZXI9IkVzY3JpYmUgdHUgcmVzcHVlc3RhIj4KPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1jaGVjayIgb25jbGljaz0iY2hlY2tGaWxsQW5zd2VyKCcke2V4ZXJjaXNlSWR9JywgJyR7c2FmZUFuc3dlcn0nKSI+Q29tcHJvYmFyPC9idXR0b24+CjxkaXYgY2xhc3M9ImZlZWRiYWNrIj48L2Rpdj4KPC9kaXY+YDsKCnJldHVybiBodG1sOwp9CgovLyBGdW5jacOzbiBwYXJhIGdlbmVyYXIgZWplcmNpY2lvcyBkZSBkb2JsZSBvcGNpw7NuCmZ1bmN0aW9uIGdlbmVyYXRlRG91YmxlRXhlcmNpc2UocXVlc3Rpb24sIGluZGV4LCBjYXRlZ29yeSkgewovLyBWZXJpZmljYXIgcXVlIGxhIHByZWd1bnRhIHRlbmdhIHRvZGFzIGxhcyBwcm9waWVkYWRlcyBuZWNlc2FyaWFzCmlmICghcXVlc3Rpb24ub3B0aW9uczEgfHwgIXF1ZXN0aW9uLm9wdGlvbnMyIHx8ICFxdWVzdGlvbi5hbnN3ZXIxIHx8ICFxdWVzdGlvbi5hbnN3ZXIyKSB7CmNvbnNvbGUuZXJyb3IoIlByZWd1bnRhIGRlIHRpcG8gZG91YmxlIGluY29tcGxldGE6IiwgcXVlc3Rpb24pOwpyZXR1cm4gIiI7Cn0KCmNvbnN0IGV4ZXJjaXNlSWQgPSBnZW5lcmF0ZVVuaXF1ZUlkKGNhdGVnb3J5KTsKY29uc3QgcXVlc3Rpb25OYW1lMSA9IGNhdGVnb3J5ICsgJy1xJyArIGluZGV4ICsgJy0xJzsKY29uc3QgcXVlc3Rpb25OYW1lMiA9IGNhdGVnb3J5ICsgJy1xJyArIGluZGV4ICsgJy0yJzsKCmxldCBodG1sID0gYAo8ZGl2IGNsYXNzPSJleGVyY2lzZSIgZGF0YS10eXBlPSIke2NhdGVnb3J5fSIgaWQ9IiR7ZXhlcmNpc2VJZH0iPgo8aDM+RWplcmNpY2lvICR7aW5kZXh9OiAke3F1ZXN0aW9uLnRpdGxlfTwvaDM+CjxkaXYgY2xhc3M9InF1ZXN0aW9uIj4KPHA+JHtxdWVzdGlvbi5xdWVzdGlvbn08L3A+CjwvZGl2Pgo8cD5QcmltZXJhIHBhcnRlOjwvcD4KPGRpdiBjbGFzcz0ib3B0aW9ucyI+YDsKCnF1ZXN0aW9uLm9wdGlvbnMxLmZvckVhY2goKG9wdGlvbiwgaSkgPT4gewpjb25zdCBvcHRpb25JZCA9IHF1ZXN0aW9uTmFtZTEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3ICsgaSk7IC8vIGEsIGIuLi4KaHRtbCArPSBgCjxkaXYgY2xhc3M9Im9wdGlvbiI+CjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJHtxdWVzdGlvbk5hbWUxfSIgaWQ9IiR7b3B0aW9uSWR9IiB2YWx1ZT0iJHtvcHRpb259Ij4KPGxhYmVsIGZvcj0iJHtvcHRpb25JZH0iPiR7b3B0aW9ufTwvbGFiZWw+CjwvZGl2PmA7Cn0pOwoKaHRtbCArPSBgCjwvZGl2Pgo8cD5TZWd1bmRhIHBhcnRlOjwvcD4KPGRpdiBjbGFzcz0ib3B0aW9ucyI+YDsKCnF1ZXN0aW9uLm9wdGlvbnMyLmZvckVhY2goKG9wdGlvbiwgaSkgPT4gewpjb25zdCBvcHRpb25JZCA9IHF1ZXN0aW9uTmFtZTIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3ICsgaSk7IC8vIGEsIGIuLi4KaHRtbCArPSBgCjxkaXYgY2xhc3M9Im9wdGlvbiI+CjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJHtxdWVzdGlvbk5hbWUyfSIgaWQ9IiR7b3B0aW9uSWR9IiB2YWx1ZT0iJHtvcHRpb259Ij4KPGxhYmVsIGZvcj0iJHtvcHRpb25JZH0iPiR7b3B0aW9ufTwvbGFiZWw+CjwvZGl2PmA7Cn0pOwoKY29uc3Qgc2FmZUFuc3dlcjEgPSBxdWVzdGlvbi5hbnN3ZXIxLnJlcGxhY2UoLycvZywgIlxcJyIpOwpjb25zdCBzYWZlQW5zd2VyMiA9IHF1ZXN0aW9uLmFuc3dlcjIucmVwbGFjZSgvJy9nLCAiXFwnIik7CgpodG1sICs9IGAKPC9kaXY+CjxidXR0b24gY2xhc3M9ImJ0biBidG4tY2hlY2siIG9uY2xpY2s9ImNoZWNrRG91YmxlQW5zd2VyKCcke2V4ZXJjaXNlSWR9JywgJyR7c2FmZUFuc3dlcjF9JywgJyR7c2FmZUFuc3dlcjJ9JykiPkNvbXByb2JhcjwvYnV0dG9uPgo8ZGl2IGNsYXNzPSJmZWVkYmFjayI+PC9kaXY+CjwvZGl2PmA7CgpyZXR1cm4gaHRtbDsKfQoKLy8gRnVuY2nDs24gcGFyYSBnZW5lcmFyIGVqZXJjaWNpb3MgZGUgbcO6bHRpcGxlcyBlc3BhY2lvcwpmdW5jdGlvbiBnZW5lcmF0ZU11bHRpRmlsbEV4ZXJjaXNlKHF1ZXN0aW9uLCBpbmRleCwgY2F0ZWdvcnkpIHsKLy8gVmVyaWZpY2FyIHF1ZSBsYSBwcmVndW50YSB0ZW5nYSBhbnN3ZXJzIHkgc2VhIHVuIGFycmF5CmlmICghcXVlc3Rpb24uYW5zd2VycyB8fCAhQXJyYXkuaXNBcnJheShxdWVzdGlvbi5hbnN3ZXJzKSB8fCBxdWVzdGlvbi5hbnN3ZXJzLmxlbmd0aCA9PT0gMCkgewpjb25zb2xlLmVycm9yKCJQcmVndW50YSBtdWx0aWZpbGwgbWFsZm9ybWFkYToiLCBxdWVzdGlvbik7CnJldHVybiAnJzsKfQoKY29uc3QgZXhlcmNpc2VJZCA9IGdlbmVyYXRlVW5pcXVlSWQoY2F0ZWdvcnkpOwoKLy8gQ3JlYW1vcyB1biBjb250ZW5lZG9yIHBhcmEgZXN0ZSBlamVyY2ljaW8gZXNwZWPDrWZpY28KbGV0IGh0bWwgPSBgCjxkaXYgY2xhc3M9ImV4ZXJjaXNlIG11bHRpZmlsbC1leGVyY2lzZSIgZGF0YS10eXBlPSIke2NhdGVnb3J5fSIgaWQ9IiR7ZXhlcmNpc2VJZH0iIGRhdGEtYW5zd2Vycz0nJHtKU09OLnN0cmluZ2lmeShxdWVzdGlvbi5hbnN3ZXJzKX0nPgo8aDM+RWplcmNpY2lvICR7aW5kZXh9OiAke3F1ZXN0aW9uLnRpdGxlfTwvaDM+CjxkaXYgY2xhc3M9InF1ZXN0aW9uIj4KPHA+Q29tcGxldGUgZWwgdGV4dG8gY29uIGxhIGZvcm1hIGNvcnJlY3RhIGRlIGxvcyB2ZXJib3MgZW50cmUgcGFyw6ludGVzaXM6PC9wPgo8cD4ke3F1ZXN0aW9uLnF1ZXN0aW9ufTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9Im11bHRpZmlsbC1hbnN3ZXJzIj5gOwoKLy8gR2VuZXJhbW9zIGxvcyBjYW1wb3MgZGUgZW50cmFkYSBudW1lcmFkb3MKZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVzdGlvbi5hbnN3ZXJzLmxlbmd0aDsgaSsrKSB7Cmh0bWwgKz0gYAo8ZGl2IGNsYXNzPSJtdWx0aWZpbGwtaXRlbSI+CjxsYWJlbD4ke2krMX06PC9sYWJlbD4KPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJpbnB1dC1hbnN3ZXIiIGRhdGEtaW5kZXg9IiR7aX0iPgo8L2Rpdj5gOwp9CgpodG1sICs9IGAKPC9kaXY+CjxidXR0b24gY2xhc3M9ImJ0biBidG4tY2hlY2siIG9uY2xpY2s9ImNoZWNrTXVsdGlGaWxsRXhlcmNpc2UoJyR7ZXhlcmNpc2VJZH0nKSI+Q29tcHJvYmFyPC9idXR0b24+CjxkaXYgY2xhc3M9ImZlZWRiYWNrIj48L2Rpdj4KPC9kaXY+YDsKCnJldHVybiBodG1sOwp9CgovLyBGdW5jacOzbiBwYXJhIGdlbmVyYXIgbG9zIGVqZXJjaWNpb3MgcGFyYSB1bmEgY2F0ZWdvcsOtYQpmdW5jdGlvbiBnZW5lcmF0ZUV4ZXJjaXNlc0ZvckNhdGVnb3J5KGNhdGVnb3J5LCBjb3VudCkgewpjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtjYXRlZ29yeX0tZXhlcmNpc2VzLWNvbnRhaW5lcmApOwppZiAoIWNvbnRhaW5lcikgewpjb25zb2xlLmVycm9yKGBDb250ZW5lZG9yIG5vIGVuY29udHJhZG8gcGFyYSBsYSBjYXRlZ29yw61hICR7Y2F0ZWdvcnl9YCk7CnJldHVybjsKfQoKLy8gVmVyaWZpY2FyIHF1ZSBsYSBjYXRlZ29yw61hIGV4aXN0ZSBlbiBlbCBiYW5jbyBkZSBwcmVndW50YXMKaWYgKCFxdWVzdGlvbkJhbmtbY2F0ZWdvcnldIHx8ICFBcnJheS5pc0FycmF5KHF1ZXN0aW9uQmFua1tjYXRlZ29yeV0pKSB7CmNvbnNvbGUuZXJyb3IoYE5vIGhheSBwcmVndW50YXMgZGlzcG9uaWJsZXMgcGFyYSBsYSBjYXRlZ29yw61hICR7Y2F0ZWdvcnl9YCk7CmNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHA+Tm8gaGF5IGVqZXJjaWNpb3MgZGlzcG9uaWJsZXMgcGFyYSBlc3RhIGNhdGVnb3LDrWEuPC9wPic7CnJldHVybjsKfQoKLy8gTGltaXRhciBjb3VudCBhbCBuw7ptZXJvIGRlIHByZWd1bnRhcyBkaXNwb25pYmxlcwpjb3VudCA9IE1hdGgubWluKGNvdW50LCBxdWVzdGlvbkJhbmtbY2F0ZWdvcnldLmxlbmd0aCk7Cgpjb25zdCBxdWVzdGlvbnMgPSBnZXRSYW5kb21RdWVzdGlvbnMocXVlc3Rpb25CYW5rW2NhdGVnb3J5XSwgY291bnQpOwoKbGV0IGh0bWwgPSAnJzsKbGV0IGluZGV4ID0gMTsKCnF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXN0aW9uID0+IHsKdHJ5IHsKLy8gVmVyaWZpY2FyIHF1ZSBsYSBwcmVndW50YSB0ZW5nYSBlbCBmb3JtYXRvIGNvcnJlY3RvIHNlZ8O6biBzdSB0aXBvCmlmIChxdWVzdGlvbi50eXBlID09PSAnZG91YmxlJyAmJiAoIXF1ZXN0aW9uLm9wdGlvbnMxIHx8ICFxdWVzdGlvbi5vcHRpb25zMiB8fCAhcXVlc3Rpb24uYW5zd2VyMSB8fCAhcXVlc3Rpb24uYW5zd2VyMikpIHsKY29uc29sZS53YXJuKGBQcmVndW50YSBkZSB0aXBvICdkb3VibGUnIGNvbiBmb3JtYXRvIGluY29ycmVjdG86YCwgcXVlc3Rpb24pOwpyZXR1cm47IC8vIFNhbHRhciBlc3RhIHByZWd1bnRhCn0KCmlmICgocXVlc3Rpb24udHlwZSA9PT0gJ211bHRpcGxlJyB8fCBxdWVzdGlvbi50eXBlID09PSAnZmlsbCcpICYmICFxdWVzdGlvbi5hbnN3ZXIpIHsKY29uc29sZS53YXJuKGBQcmVndW50YSBzaW4gcmVzcHVlc3RhIGRlZmluaWRhOmAsIHF1ZXN0aW9uKTsKcmV0dXJuOyAvLyBTYWx0YXIgZXN0YSBwcmVndW50YQp9CgppZiAocXVlc3Rpb24udHlwZSA9PT0gJ211bHRpZmlsbCcgJiYgKCFxdWVzdGlvbi5hbnN3ZXJzIHx8ICFBcnJheS5pc0FycmF5KHF1ZXN0aW9uLmFuc3dlcnMpKSkgewpjb25zb2xlLndhcm4oYFByZWd1bnRhIGRlIHRpcG8gJ211bHRpZmlsbCcgc2luIHJlc3B1ZXN0YXMgZGVmaW5pZGFzOmAsIHF1ZXN0aW9uKTsKcmV0dXJuOyAvLyBTYWx0YXIgZXN0YSBwcmVndW50YQp9Cgpzd2l0Y2ggKHF1ZXN0aW9uLnR5cGUpIHsKY2FzZSAnbXVsdGlwbGUnOgpodG1sICs9IGdlbmVyYXRlTXVsdGlwbGVDaG9pY2VFeGVyY2lzZShxdWVzdGlvbiwgaW5kZXgsIGNhdGVnb3J5KTsKYnJlYWs7CmNhc2UgJ2ZpbGwnOgpodG1sICs9IGdlbmVyYXRlRmlsbEV4ZXJjaXNlKHF1ZXN0aW9uLCBpbmRleCwgY2F0ZWdvcnkpOwpicmVhazsKY2FzZSAnZG91YmxlJzoKaHRtbCArPSBnZW5lcmF0ZURvdWJsZUV4ZXJjaXNlKHF1ZXN0aW9uLCBpbmRleCwgY2F0ZWdvcnkpOwpicmVhazsKY2FzZSAnbXVsdGlmaWxsJzoKaHRtbCArPSBnZW5lcmF0ZU11bHRpRmlsbEV4ZXJjaXNlKHF1ZXN0aW9uLCBpbmRleCwgY2F0ZWdvcnkpOwpicmVhazsKZGVmYXVsdDoKY29uc29sZS53YXJuKGBUaXBvIGRlIHByZWd1bnRhIGRlc2Nvbm9jaWRvOiAke3F1ZXN0aW9uLnR5cGV9YCk7CnJldHVybjsgLy8gU2FsdGFyIGVzdGEgcHJlZ3VudGEKfQppbmRleCsrOwp9IGNhdGNoIChlcnJvcikgewpjb25zb2xlLmVycm9yKGBFcnJvciBhbCBnZW5lcmFyIGVqZXJjaWNpbzogJHtlcnJvci5tZXNzYWdlfWAsIHF1ZXN0aW9uKTsKfQp9KTsKCmlmIChodG1sID09PSAnJykgewpodG1sID0gJzxwPk5vIHNlIHB1ZGllcm9uIGdlbmVyYXIgZWplcmNpY2lvcyBwYXJhIGVzdGEgY2F0ZWdvcsOtYS48L3A+JzsKfQoKY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7Cn0KCi8vIEZ1bmNpw7NuIHBhcmEgdmVyaWZpY2FyIHJlc3B1ZXN0YXMgZGUgb3BjacOzbiBtw7psdGlwbGUKZnVuY3Rpb24gY2hlY2tBbnN3ZXIoZXhlcmNpc2VJZCwgY29ycmVjdE9wdGlvbikgewp0cnkgewpjb25zdCBleGVyY2lzZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4ZXJjaXNlSWQpOwppZiAoIWV4ZXJjaXNlKSB7CmNvbnNvbGUuZXJyb3IoYEVqZXJjaWNpbyBjb24gSUQgJHtleGVyY2lzZUlkfSBubyBlbmNvbnRyYWRvYCk7CnJldHVybjsKfQoKLy8gRW5jb250cmFyIHRvZG9zIGxvcyByYWRpbyBidXR0b25zIGVuIGVzdGUgZWplcmNpY2lvCmNvbnN0IHJhZGlvQnV0dG9ucyA9IGV4ZXJjaXNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9InJhZGlvIl0nKTsKaWYgKCFyYWRpb0J1dHRvbnMgfHwgcmFkaW9CdXR0b25zLmxlbmd0aCA9PT0gMCkgewpjb25zb2xlLmVycm9yKGBObyBzZSBlbmNvbnRyYXJvbiByYWRpbyBidXR0b25zIGVuIGVsIGVqZXJjaWNpbyAke2V4ZXJjaXNlSWR9YCk7CnJldHVybjsKfQoKLy8gRW5jb250cmFyIGVsIHNlbGVjY2lvbmFkbwpsZXQgc2VsZWN0ZWRPcHRpb24gPSBudWxsOwpmb3IgKGxldCByYWRpbyBvZiByYWRpb0J1dHRvbnMpIHsKaWYgKHJhZGlvLmNoZWNrZWQpIHsKc2VsZWN0ZWRPcHRpb24gPSByYWRpby52YWx1ZTsKYnJlYWs7Cn0KfQoKY29uc3QgZmVlZGJhY2sgPSBleGVyY2lzZS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKTsKaWYgKCFmZWVkYmFjaykgewpjb25zb2xlLmVycm9yKGBObyBzZSBlbmNvbnRyw7MgZWwgZWxlbWVudG8gZmVlZGJhY2sgZW4gZWwgZWplcmNpY2lvICR7ZXhlcmNpc2VJZH1gKTsKcmV0dXJuOwp9CgovLyBTb2xvIGluY3JlbWVudGFyIGVsIGNvbnRhZG9yIHNpIGVzIGxhIHByaW1lcmEgdmV6IHF1ZSBzZSByZXNwb25kZQppZiAoIXF1ZXN0aW9uQXR0ZW1wdHMuaGFzKGV4ZXJjaXNlSWQpKSB7CnRvdGFsUXVlc3Rpb25zKys7CnF1ZXN0aW9uQXR0ZW1wdHMuYWRkKGV4ZXJjaXNlSWQpOwp9CgppZiAoc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24gPT09IGNvcnJlY3RPcHRpb24pIHsKZmVlZGJhY2sudGV4dENvbnRlbnQgPSAnwqFDb3JyZWN0byEgJyArIGdldEV4cGxhbmF0aW9uKGV4ZXJjaXNlSWQsIGNvcnJlY3RPcHRpb24pOwpmZWVkYmFjay5jbGFzc05hbWUgPSAnZmVlZGJhY2sgY29ycmVjdCc7CgovLyBTb2xvIGluY3JlbWVudGFyIGVsIGNvbnRhZG9yIHNpIGHDum4gbm8gaGEgc2lkbyBtYXJjYWRvIGNvbW8gY29ycmVjdG8KaWYgKCFleGVyY2lzZS5kYXRhc2V0LmNvcnJlY3QpIHsKY29ycmVjdEFuc3dlcnMrKzsKZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID0gJ3RydWUnOwp9Cn0gZWxzZSB7CmZlZWRiYWNrLnRleHRDb250ZW50ID0gJ0luY29ycmVjdG8uIExhIHJlc3B1ZXN0YSBjb3JyZWN0YSBlczogJyArIGNvcnJlY3RPcHRpb24gKyAnLiAnICsgZ2V0RXhwbGFuYXRpb24oZXhlcmNpc2VJZCwgY29ycmVjdE9wdGlvbik7CmZlZWRiYWNrLmNsYXNzTmFtZSA9ICdmZWVkYmFjayBpbmNvcnJlY3QnOwoKLy8gU2kgYW50ZXMgZXJhIGNvcnJlY3RvLCBkZWNyZW1lbnRhciBlbCBjb250YWRvcgppZiAoZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID09PSAndHJ1ZScpIHsKY29ycmVjdEFuc3dlcnMtLTsKZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID0gJ2ZhbHNlJzsKfQp9Cgp1cGRhdGVTY29yZURpc3BsYXkoKTsKfSBjYXRjaCAoZXJyb3IpIHsKY29uc29sZS5lcnJvcihgRXJyb3IgYWwgdmVyaWZpY2FyIHJlc3B1ZXN0YTogJHtlcnJvci5tZXNzYWdlfWApOwp9Cn0KCi8vIEZ1bmNpw7NuIHBhcmEgdmVyaWZpY2FyIHJlc3B1ZXN0YXMgZGUgdGV4dG8KZnVuY3Rpb24gY2hlY2tGaWxsQW5zd2VyKGV4ZXJjaXNlSWQsIGNvcnJlY3RBbnN3ZXIpIHsKdHJ5IHsKY29uc3QgZXhlcmNpc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChleGVyY2lzZUlkKTsKaWYgKCFleGVyY2lzZSkgewpjb25zb2xlLmVycm9yKGBFamVyY2ljaW8gY29uIElEICR7ZXhlcmNpc2VJZH0gbm8gZW5jb250cmFkb2ApOwpyZXR1cm47Cn0KCmNvbnN0IGlucHV0RWxlbWVudCA9IGV4ZXJjaXNlLnF1ZXJ5U2VsZWN0b3IoJy5pbnB1dC1hbnN3ZXInKTsKaWYgKCFpbnB1dEVsZW1lbnQpIHsKY29uc29sZS5lcnJvcihgTm8gc2UgZW5jb250csOzIGVsIGNhbXBvIGRlIGVudHJhZGEgZW4gZWwgZWplcmNpY2lvICR7ZXhlcmNpc2VJZH1gKTsKcmV0dXJuOwp9Cgpjb25zdCBpbnB1dEFuc3dlciA9IGlucHV0RWxlbWVudC52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTsKY29uc3QgZmVlZGJhY2sgPSBleGVyY2lzZS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKTsKCmlmICghZmVlZGJhY2spIHsKY29uc29sZS5lcnJvcihgTm8gc2UgZW5jb250csOzIGVsIGVsZW1lbnRvIGZlZWRiYWNrIGVuIGVsIGVqZXJjaWNpbyAke2V4ZXJjaXNlSWR9YCk7CnJldHVybjsKfQoKLy8gU29sbyBpbmNyZW1lbnRhciBlbCBjb250YWRvciBzaSBlcyBsYSBwcmltZXJhIHZleiBxdWUgc2UgcmVzcG9uZGUKaWYgKCFxdWVzdGlvbkF0dGVtcHRzLmhhcyhleGVyY2lzZUlkKSkgewp0b3RhbFF1ZXN0aW9ucysrOwpxdWVzdGlvbkF0dGVtcHRzLmFkZChleGVyY2lzZUlkKTsKfQoKaWYgKGlucHV0QW5zd2VyID09PSBjb3JyZWN0QW5zd2VyLnRvTG93ZXJDYXNlKCkpIHsKZmVlZGJhY2sudGV4dENvbnRlbnQgPSAnwqFDb3JyZWN0byEgJyArIGdldEV4cGxhbmF0aW9uKGV4ZXJjaXNlSWQsIGNvcnJlY3RBbnN3ZXIpOwpmZWVkYmFjay5jbGFzc05hbWUgPSAnZmVlZGJhY2sgY29ycmVjdCc7CgovLyBTb2xvIGluY3JlbWVudGFyIGVsIGNvbnRhZG9yIHNpIGHDum4gbm8gaGEgc2lkbyBtYXJjYWRvIGNvbW8gY29ycmVjdG8KaWYgKCFleGVyY2lzZS5kYXRhc2V0LmNvcnJlY3QpIHsKY29ycmVjdEFuc3dlcnMrKzsKZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID0gJ3RydWUnOwp9Cn0gZWxzZSB7CmZlZWRiYWNrLnRleHRDb250ZW50ID0gJ0luY29ycmVjdG8uIExhIHJlc3B1ZXN0YSBjb3JyZWN0YSBlczogJyArIGNvcnJlY3RBbnN3ZXIgKyAnLiAnICsgZ2V0RXhwbGFuYXRpb24oZXhlcmNpc2VJZCwgY29ycmVjdEFuc3dlcik7CmZlZWRiYWNrLmNsYXNzTmFtZSA9ICdmZWVkYmFjayBpbmNvcnJlY3QnOwoKLy8gU2kgYW50ZXMgZXJhIGNvcnJlY3RvLCBkZWNyZW1lbnRhciBlbCBjb250YWRvcgppZiAoZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID09PSAndHJ1ZScpIHsKY29ycmVjdEFuc3dlcnMtLTsKZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID0gJ2ZhbHNlJzsKfQp9Cgp1cGRhdGVTY29yZURpc3BsYXkoKTsKfSBjYXRjaCAoZXJyb3IpIHsKY29uc29sZS5lcnJvcihgRXJyb3IgYWwgdmVyaWZpY2FyIHJlc3B1ZXN0YSBkZSB0ZXh0bzogJHtlcnJvci5tZXNzYWdlfWApOwp9Cn0KCi8vIEZ1bmNpw7NuIHBhcmEgdmVyaWZpY2FyIGRvcyByZXNwdWVzdGFzCmZ1bmN0aW9uIGNoZWNrRG91YmxlQW5zd2VyKGV4ZXJjaXNlSWQsIGNvcnJlY3RPcHRpb24xLCBjb3JyZWN0T3B0aW9uMikgewp0cnkgewpjb25zdCBleGVyY2lzZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4ZXJjaXNlSWQpOwppZiAoIWV4ZXJjaXNlKSB7CmNvbnNvbGUuZXJyb3IoYEVqZXJjaWNpbyBjb24gSUQgJHtleGVyY2lzZUlkfSBubyBlbmNvbnRyYWRvYCk7CnJldHVybjsKfQoKLy8gRW5jb250cmFyIHRvZG9zIGxvcyBncnVwb3MgZGUgb3BjaW9uZXMKY29uc3Qgb3B0aW9uc0dyb3VwcyA9IGV4ZXJjaXNlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5vcHRpb25zJyk7CmlmICghb3B0aW9uc0dyb3VwcyB8fCBvcHRpb25zR3JvdXBzLmxlbmd0aCA8IDIpIHsKY29uc29sZS5lcnJvcihgTm8gc2UgZW5jb250cmFyb24gc3VmaWNpZW50ZXMgZ3J1cG9zIGRlIG9wY2lvbmVzIGVuIGVsIGVqZXJjaWNpbyAke2V4ZXJjaXNlSWR9YCk7CnJldHVybjsKfQoKLy8gT2J0ZW5lciBsYXMgb3BjaW9uZXMgc2VsZWNjaW9uYWRhcwpsZXQgc2VsZWN0ZWRPcHRpb24xID0gbnVsbDsKbGV0IHNlbGVjdGVkT3B0aW9uMiA9IG51bGw7CgovLyBQcmltZXJhIHBhcnRlCmNvbnN0IHJhZGlvczEgPSBvcHRpb25zR3JvdXBzWzBdLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9InJhZGlvIl0nKTsKZm9yIChsZXQgcmFkaW8gb2YgcmFkaW9zMSkgewppZiAocmFkaW8uY2hlY2tlZCkgewpzZWxlY3RlZE9wdGlvbjEgPSByYWRpby52YWx1ZTsKYnJlYWs7Cn0KfQoKLy8gU2VndW5kYSBwYXJ0ZQpjb25zdCByYWRpb3MyID0gb3B0aW9uc0dyb3Vwc1sxXS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPSJyYWRpbyJdJyk7CmZvciAobGV0IHJhZGlvIG9mIHJhZGlvczIpIHsKaWYgKHJhZGlvLmNoZWNrZWQpIHsKc2VsZWN0ZWRPcHRpb24yID0gcmFkaW8udmFsdWU7CmJyZWFrOwp9Cn0KCmNvbnN0IGZlZWRiYWNrID0gZXhlcmNpc2UucXVlcnlTZWxlY3RvcignLmZlZWRiYWNrJyk7CmlmICghZmVlZGJhY2spIHsKY29uc29sZS5lcnJvcihgTm8gc2UgZW5jb250csOzIGVsIGVsZW1lbnRvIGZlZWRiYWNrIGVuIGVsIGVqZXJjaWNpbyAke2V4ZXJjaXNlSWR9YCk7CnJldHVybjsKfQoKLy8gU29sbyBpbmNyZW1lbnRhciBlbCBjb250YWRvciBzaSBlcyBsYSBwcmltZXJhIHZleiBxdWUgc2UgcmVzcG9uZGUKaWYgKCFxdWVzdGlvbkF0dGVtcHRzLmhhcyhleGVyY2lzZUlkKSkgewp0b3RhbFF1ZXN0aW9ucysrOwpxdWVzdGlvbkF0dGVtcHRzLmFkZChleGVyY2lzZUlkKTsKfQoKY29uc3QgY29tYmluZWRBbnN3ZXJzID0gYCR7Y29ycmVjdE9wdGlvbjF9LCAke2NvcnJlY3RPcHRpb24yfWA7CgppZiAoc2VsZWN0ZWRPcHRpb24xICYmIHNlbGVjdGVkT3B0aW9uMiAmJgpzZWxlY3RlZE9wdGlvbjEgPT09IGNvcnJlY3RPcHRpb24xICYmCnNlbGVjdGVkT3B0aW9uMiA9PT0gY29ycmVjdE9wdGlvbjIpIHsKZmVlZGJhY2sudGV4dENvbnRlbnQgPSAnwqFDb3JyZWN0byEgJyArIGdldEV4cGxhbmF0aW9uKGV4ZXJjaXNlSWQsIGNvbWJpbmVkQW5zd2Vycyk7CmZlZWRiYWNrLmNsYXNzTmFtZSA9ICdmZWVkYmFjayBjb3JyZWN0JzsKCi8vIFNvbG8gaW5jcmVtZW50YXIgZWwgY29udGFkb3Igc2kgYcO6biBubyBoYSBzaWRvIG1hcmNhZG8gY29tbyBjb3JyZWN0bwppZiAoIWV4ZXJjaXNlLmRhdGFzZXQuY29ycmVjdCkgewpjb3JyZWN0QW5zd2VycysrOwpleGVyY2lzZS5kYXRhc2V0LmNvcnJlY3QgPSAndHJ1ZSc7Cn0KfSBlbHNlIHsKZmVlZGJhY2sudGV4dENvbnRlbnQgPSAnSW5jb3JyZWN0by4gTGFzIHJlc3B1ZXN0YXMgY29ycmVjdGFzIHNvbjogJyArIGNvcnJlY3RPcHRpb24xICsgJyB5ICcgKyBjb3JyZWN0T3B0aW9uMiArICcuICcgKyBnZXRFeHBsYW5hdGlvbihleGVyY2lzZUlkLCBjb21iaW5lZEFuc3dlcnMpOwpmZWVkYmFjay5jbGFzc05hbWUgPSAnZmVlZGJhY2sgaW5jb3JyZWN0JzsKCi8vIFNpIGFudGVzIGVyYSBjb3JyZWN0bywgZGVjcmVtZW50YXIgZWwgY29udGFkb3IKaWYgKGV4ZXJjaXNlLmRhdGFzZXQuY29ycmVjdCA9PT0gJ3RydWUnKSB7CmNvcnJlY3RBbnN3ZXJzLS07CmV4ZXJjaXNlLmRhdGFzZXQuY29ycmVjdCA9ICdmYWxzZSc7Cn0KfQoKdXBkYXRlU2NvcmVEaXNwbGF5KCk7Cn0gY2F0Y2ggKGVycm9yKSB7CmNvbnNvbGUuZXJyb3IoYEVycm9yIGFsIHZlcmlmaWNhciByZXNwdWVzdGFzIGRvYmxlczogJHtlcnJvci5tZXNzYWdlfWApOwp9Cn0KCi8qKgoqIE51ZXZhIGZ1bmNpw7NuIHBhcmEgY29tcHJvYmFyIGVqZXJjaWNpb3MgbXVsdGlmaWxsCiogRXN0YSBmdW5jacOzbiB1dGlsaXphIGxvcyBkYXRvcyBhbG1hY2VuYWRvcyBlbiBlbCBlbGVtZW50byBwYXJhIHZhbGlkYXIgbGFzIHJlc3B1ZXN0YXMKKi8KZnVuY3Rpb24gY2hlY2tNdWx0aUZpbGxFeGVyY2lzZShleGVyY2lzZUlkKSB7CnRyeSB7CmNvbnNvbGUubG9nKGBWZXJpZmljYW5kbyBlamVyY2ljaW8gbXVsdGlmaWxsOiAke2V4ZXJjaXNlSWR9YCk7CgovLyBPYnRlbmVyIGVsIGVsZW1lbnRvIGRlbCBlamVyY2ljaW8KY29uc3QgZXhlcmNpc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChleGVyY2lzZUlkKTsKaWYgKCFleGVyY2lzZSkgewpjb25zb2xlLmVycm9yKGBFamVyY2ljaW8gY29uIElEICR7ZXhlcmNpc2VJZH0gbm8gZW5jb250cmFkb2ApOwpyZXR1cm47Cn0KCi8vIE9idGVuZXIgbGFzIHJlc3B1ZXN0YXMgY29ycmVjdGFzIGRlc2RlIGVsIGF0cmlidXRvIGRhdGEtYW5zd2VycwpsZXQgY29ycmVjdEFuc3dlcnM7CnRyeSB7CmNvcnJlY3RBbnN3ZXJzID0gSlNPTi5wYXJzZShleGVyY2lzZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtYW5zd2VycycpKTsKY29uc29sZS5sb2coIlJlc3B1ZXN0YXMgY29ycmVjdGFzOiIsIGNvcnJlY3RBbnN3ZXJzKTsKfSBjYXRjaCAoZSkgewpjb25zb2xlLmVycm9yKCJFcnJvciBhbCBwYXJzZWFyIHJlc3B1ZXN0YXMgY29ycmVjdGFzOiIsIGUpOwpyZXR1cm47Cn0KCi8vIE9idGVuZXIgdG9kb3MgbG9zIGNhbXBvcyBkZSBlbnRyYWRhCmNvbnN0IGlucHV0cyA9IGV4ZXJjaXNlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbnB1dC1hbnN3ZXInKTsKY29uc29sZS5sb2coYEVuY29udHJhZG9zICR7aW5wdXRzLmxlbmd0aH0gY2FtcG9zIGRlIGVudHJhZGFgKTsKCmlmIChpbnB1dHMubGVuZ3RoICE9PSBjb3JyZWN0QW5zd2Vycy5sZW5ndGgpIHsKY29uc29sZS53YXJuKGBOw7ptZXJvIGRlIGNhbXBvcyAoJHtpbnB1dHMubGVuZ3RofSkgbm8gY29pbmNpZGUgY29uIHJlc3B1ZXN0YXMgKCR7Y29ycmVjdEFuc3dlcnMubGVuZ3RofSlgKTsKfQoKLy8gRWxlbWVudG8gZGUgZmVlZGJhY2sKY29uc3QgZmVlZGJhY2sgPSBleGVyY2lzZS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKTsKaWYgKCFmZWVkYmFjaykgewpjb25zb2xlLmVycm9yKCJFbGVtZW50byBkZSBmZWVkYmFjayBubyBlbmNvbnRyYWRvIik7CnJldHVybjsKfQoKLy8gU29sbyBpbmNyZW1lbnRhciBlbCBjb250YWRvciBzaSBlcyBsYSBwcmltZXJhIHZleiBxdWUgc2UgcmVzcG9uZGUKaWYgKCFxdWVzdGlvbkF0dGVtcHRzLmhhcyhleGVyY2lzZUlkKSkgewp0b3RhbFF1ZXN0aW9ucysrOwpxdWVzdGlvbkF0dGVtcHRzLmFkZChleGVyY2lzZUlkKTsKfQoKLy8gVmVyaWZpY2FyIGNhZGEgcmVzcHVlc3RhCmxldCBhbGxDb3JyZWN0ID0gdHJ1ZTsKY29uc3QgdXNlckFuc3dlcnMgPSBbXTsKCmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHsKaWYgKGluZGV4ID49IGNvcnJlY3RBbnN3ZXJzLmxlbmd0aCkgcmV0dXJuOwoKY29uc3QgdXNlckFuc3dlciA9IGlucHV0LnZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwpjb25zdCBleHBlY3RlZEFuc3dlciA9IGNvcnJlY3RBbnN3ZXJzW2luZGV4XS50b0xvd2VyQ2FzZSgpOwoKdXNlckFuc3dlcnMucHVzaCh1c2VyQW5zd2VyKTsKY29uc29sZS5sb2coYFJlc3B1ZXN0YSAke2luZGV4KzF9OiBVc3VhcmlvPSIke3VzZXJBbnN3ZXJ9IiwgQ29ycmVjdGE9IiR7ZXhwZWN0ZWRBbnN3ZXJ9ImApOwoKaWYgKHVzZXJBbnN3ZXIgIT09IGV4cGVjdGVkQW5zd2VyKSB7CmFsbENvcnJlY3QgPSBmYWxzZTsKfQp9KTsKCi8vIEFjdHVhbGl6YXIgZWwgZmVlZGJhY2sgeSBsYSBwdW50dWFjacOzbgppZiAoYWxsQ29ycmVjdCAmJiB1c2VyQW5zd2Vycy5sZW5ndGggPT09IGNvcnJlY3RBbnN3ZXJzLmxlbmd0aCkgewpmZWVkYmFjay50ZXh0Q29udGVudCA9ICfCoUNvcnJlY3RvISAnICsgZ2V0RXhwbGFuYXRpb24oZXhlcmNpc2VJZCwgY29ycmVjdEFuc3dlcnMuam9pbignLCAnKSk7CmZlZWRiYWNrLmNsYXNzTmFtZSA9ICdmZWVkYmFjayBjb3JyZWN0JzsKCi8vIFNvbG8gaW5jcmVtZW50YXIgZWwgY29udGFkb3Igc2kgYcO6biBubyBoYSBzaWRvIG1hcmNhZG8gY29tbyBjb3JyZWN0bwppZiAoIWV4ZXJjaXNlLmRhdGFzZXQuY29ycmVjdCkgewpjb3JyZWN0QW5zd2VycysrOwpleGVyY2lzZS5kYXRhc2V0LmNvcnJlY3QgPSAndHJ1ZSc7Cn0KfSBlbHNlIHsKZmVlZGJhY2sudGV4dENvbnRlbnQgPSAnSW5jb3JyZWN0by4gTGFzIHJlc3B1ZXN0YXMgY29ycmVjdGFzIHNvbjogJyArIGNvcnJlY3RBbnN3ZXJzLmpvaW4oJywgJyk7CmZlZWRiYWNrLmNsYXNzTmFtZSA9ICdmZWVkYmFjayBpbmNvcnJlY3QnOwoKLy8gU2kgYW50ZXMgZXJhIGNvcnJlY3RvLCBkZWNyZW1lbnRhciBlbCBjb250YWRvcgppZiAoZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID09PSAndHJ1ZScpIHsKY29ycmVjdEFuc3dlcnMtLTsKZXhlcmNpc2UuZGF0YXNldC5jb3JyZWN0ID0gJ2ZhbHNlJzsKfQp9Cgp1cGRhdGVTY29yZURpc3BsYXkoKTsKCn0gY2F0Y2ggKGVycm9yKSB7CmNvbnNvbGUuZXJyb3IoIkVycm9yIGFsIGNvbXByb2JhciBlamVyY2ljaW8gbXVsdGlmaWxsOiIsIGVycm9yKTsKfQp9CgovLyBGdW5jacOzbiBwYXJhIGFjdHVhbGl6YXIgbGEgdmlzdWFsaXphY2nDs24gZGUgbGEgcHVudHVhY2nDs24KZnVuY3Rpb24gdXBkYXRlU2NvcmVEaXNwbGF5KCkgewpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29ycmVjdC1hbnN3ZXJzJykudGV4dENvbnRlbnQgPSBjb3JyZWN0QW5zd2VyczsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdGFsLXF1ZXN0aW9ucycpLnRleHRDb250ZW50ID0gdG90YWxRdWVzdGlvbnM7CgovLyBBY3R1YWxpemFyIGJhcnJhIGRlIHByb2dyZXNvCmNvbnN0IHByb2dyZXNzUGVyY2VudGFnZSA9IHRvdGFsUXVlc3Rpb25zID09PSAwID8gMCA6IChjb3JyZWN0QW5zd2VycyAvIHRvdGFsUXVlc3Rpb25zKSAqIDEwMDsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzLWJhcicpLnN0eWxlLndpZHRoID0gcHJvZ3Jlc3NQZXJjZW50YWdlICsgJyUnOwoKY29uc29sZS5sb2coYFB1bnR1YWNpw7NuIGFjdHVhbGl6YWRhOiAke2NvcnJlY3RBbnN3ZXJzfSBjb3JyZWN0YXMgZGUgJHt0b3RhbFF1ZXN0aW9uc30gaW50ZW50YWRhc2ApOwp9CgovLyBGdW5jacOzbiBwYXJhIG9idGVuZXIgZXhwbGljYWNpb25lcyBkZSBsYXMgcmVzcHVlc3RhcwpmdW5jdGlvbiBnZXRFeHBsYW5hdGlvbihleGVyY2lzZUlkLCBjb3JyZWN0QW5zd2VyKSB7CnRyeSB7Ci8vIEV4dHJhZXIgaW5mb3JtYWNpw7NuIGRlbCBlamVyY2ljaW8KY29uc3QgZXhlcmNpc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChleGVyY2lzZUlkKTsKaWYgKCFleGVyY2lzZSkgcmV0dXJuICcnOwoKLy8gQsO6c3F1ZWRhIGRlIGV4cGxpY2FjacOzbiBlc3BlY8OtZmljYSBlbiBlbCBiYW5jbyBkZSBwcmVndW50YXMKZm9yIChjb25zdCBjYXRlZ29yeSBpbiBxdWVzdGlvbkJhbmspIHsKZm9yIChjb25zdCBxdWVzdGlvbiBvZiBxdWVzdGlvbkJhbmtbY2F0ZWdvcnldKSB7Ci8vIFBhcmEgZWplcmNpY2lvcyBkZSBvcGNpw7NuIG3Dumx0aXBsZSB5IHJlbGxlbm8KaWYgKHF1ZXN0aW9uLmFuc3dlciAmJiBxdWVzdGlvbi5hbnN3ZXIgPT09IGNvcnJlY3RBbnN3ZXIpIHsKcmV0dXJuIHF1ZXN0aW9uLmV4cGxhbmF0aW9uIHx8ICcnOwp9CgovLyBQYXJhIGVqZXJjaWNpb3MgZGUgZG9ibGUgb3BjacOzbgppZiAocXVlc3Rpb24uYW5zd2VyMSAmJiBxdWVzdGlvbi5hbnN3ZXIyKSB7CmNvbnN0IGFuc3dlcjFNYXRjaCA9IGNvcnJlY3RBbnN3ZXIuaW5jbHVkZXMocXVlc3Rpb24uYW5zd2VyMSk7CmNvbnN0IGFuc3dlcjJNYXRjaCA9IGNvcnJlY3RBbnN3ZXIuaW5jbHVkZXMocXVlc3Rpb24uYW5zd2VyMik7CmlmIChhbnN3ZXIxTWF0Y2ggJiYgYW5zd2VyMk1hdGNoKSB7CnJldHVybiBxdWVzdGlvbi5leHBsYW5hdGlvbiB8fCAnJzsKfQp9CgovLyBQYXJhIGVqZXJjaWNpb3MgZGUgbcO6bHRpcGxlcyByZXNwdWVzdGFzCmlmIChxdWVzdGlvbi5hbnN3ZXJzICYmIEFycmF5LmlzQXJyYXkocXVlc3Rpb24uYW5zd2VycykgJiYgcXVlc3Rpb24uYW5zd2Vycy5sZW5ndGggPiAwKSB7CmlmIChjb3JyZWN0QW5zd2VyLmluY2x1ZGVzKHF1ZXN0aW9uLmFuc3dlcnNbMF0pKSB7CnJldHVybiBxdWVzdGlvbi5leHBsYW5hdGlvbiB8fCAnJzsKfQp9Cn0KfQoKLy8gSW50ZW50YXIgb2J0ZW5lciBsYSBleHBsaWNhY2nDs24gZGVsIHTDrXR1bG8gZGVsIGVqZXJjaWNpbwpjb25zdCB0aXRsZSA9IGV4ZXJjaXNlLnF1ZXJ5U2VsZWN0b3IoJ2gzJyk/LnRleHRDb250ZW50IHx8ICcnOwoKLy8gTWFwZW8gZGUgZXhwbGljYWNpb25lcyBnZW7DqXJpY2FzIGJhc2FkYXMgZW4gdMOtdHVsbwpjb25zdCBnZW5lcmljRXhwbGFuYXRpb25zID0gewonUHJlc2VudCBTaW1wbGUnOiAnVXNhbW9zIFByZXNlbnQgU2ltcGxlIHBhcmEgaMOhYml0b3MsIHJ1dGluYXMgbyBoZWNob3MgZ2VuZXJhbGVzLicsCidQcmVzZW50IENvbnRpbnVvdXMnOiAnVXNhbW9zIFByZXNlbnQgQ29udGludW91cyBwYXJhIGFjY2lvbmVzIHF1ZSBlc3TDoW4gZW4gcHJvZ3Jlc28gZW4gZXN0ZSBtb21lbnRvLicsCidQYXN0IFNpbXBsZSc6ICdVc2Ftb3MgUGFzdCBTaW1wbGUgcGFyYSBhY2Npb25lcyBjb21wbGV0YWRhcyBlbiB1biB0aWVtcG8gZXNwZWPDrWZpY28gZGVsIHBhc2Fkby4nLAonUGFzdCBDb250aW51b3VzJzogJ1VzYW1vcyBQYXN0IENvbnRpbnVvdXMgcGFyYSBhY2Npb25lcyBxdWUgZXN0YWJhbiBlbiBwcm9ncmVzbyBlbiB1biBtb21lbnRvIGRlbCBwYXNhZG8uJywKJ0Z1dHVyZSBTaW1wbGUnOiAnVXNhbW9zIEZ1dHVyZSBTaW1wbGUgKHdpbGwpIHBhcmEgcHJlZGljY2lvbmVzLCBwcm9tZXNhcyBvIGRlY2lzaW9uZXMgZXNwb250w6FuZWFzLicsCidHb2luZyB0byc6ICdVc2Ftb3MgImdvaW5nIHRvIiBwYXJhIHBsYW5lcyBlIGludGVuY2lvbmVzIGZ1dHVyYXMgbyBwcmVkaWNjaW9uZXMgY29uIGV2aWRlbmNpYS4nLAonUHJlc2VudCBQZXJmZWN0JzogJ1VzYW1vcyBQcmVzZW50IFBlcmZlY3QgcGFyYSBleHBlcmllbmNpYXMgcGFzYWRhcyBvIGFjY2lvbmVzIGNvbiByZWxldmFuY2lhIGVuIGVsIHByZXNlbnRlLicsCidQcmVzZW50IFBlcmZlY3QgQ29udGludW91cyc6ICdVc2Ftb3MgUHJlc2VudCBQZXJmZWN0IENvbnRpbnVvdXMgcGFyYSBhY2Npb25lcyBxdWUgY29tZW56YXJvbiBlbiBlbCBwYXNhZG8geSBjb250aW7DumFuIGhhc3RhIGFob3JhLicKfTsKCi8vIEJ1c2NhciBzaSBlbCB0w610dWxvIGNvbnRpZW5lIGFsZ3VuYSBkZSBsYXMgY2xhdmVzIGRlIGV4cGxpY2FjacOzbgpmb3IgKGNvbnN0IGtleSBpbiBnZW5lcmljRXhwbGFuYXRpb25zKSB7CmlmICh0aXRsZS5pbmNsdWRlcyhrZXkpKSB7CnJldHVybiBnZW5lcmljRXhwbGFuYXRpb25zW2tleV07Cn0KfQoKLy8gU2kgc2UgdHJhdGEgZGUgdW4gY29udHJhc3RlIGVudHJlIHRpZW1wb3MgdmVyYmFsZXMKaWYgKHRpdGxlLmluY2x1ZGVzKCd2cycpKSB7CnJldHVybiAnUmVjdWVyZGEgZGlzdGluZ3VpciBlbnRyZSBsb3MgZGlmZXJlbnRlcyB0aWVtcG9zIHZlcmJhbGVzIHNlZ8O6biBlbCBjb250ZXh0by4nOwp9CgovLyBTaSBubyBzZSBlbmN1ZW50cmEgbmluZ3VuYSBleHBsaWNhY2nDs24gZXNwZWPDrWZpY2EKcmV0dXJuICdBc2Vnw7pyYXRlIGRlIGVsZWdpciBlbCB0aWVtcG8gdmVyYmFsIGFwcm9waWFkbyBzZWfDum4gZWwgY29udGV4dG8uJzsKfSBjYXRjaCAoZXJyb3IpIHsKY29uc29sZS5lcnJvcigiRXJyb3IgYWwgb2J0ZW5lciBleHBsaWNhY2nDs246IiwgZXJyb3IpOwpyZXR1cm4gJ1NlbGVjY2lvbmEgbGEgb3BjacOzbiBxdWUgbWVqb3Igc2UgYWp1c3RlIGFsIGNvbnRleHRvLic7Cn0KfQoKLy8gRnVuY2nDs24gcGFyYSBndWFyZGFyIGxhIGFwbGljYWNpw7NuCmZ1bmN0aW9uIHNhdmVBcHBsaWNhdGlvbigpIHsKdHJ5IHsKLy8gQ3JlYXIgdW4gQmxvYiBjb24gZWwgY29udGVuaWRvIEhUTUwgY29tcGxldG8KY29uc3QgaHRtbENvbnRlbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MOwpjb25zdCBibG9iID0gbmV3IEJsb2IoW2h0bWxDb250ZW50XSwge3R5cGU6ICd0ZXh0L2h0bWwnfSk7CgovLyBDcmVhciBVUkwgeSBlbmxhY2UgcGFyYSBkZXNjYXJnYQpjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwpjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwphLmhyZWYgPSB1cmw7CmEuZG93bmxvYWQgPSAncHJhY3RpY2FfdGllbXBvc192ZXJiYWxlc19pbmdsZXMuaHRtbCc7CmEuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsKCmEuY2xpY2soKTsKCi8vIExpbXBpYXIKc2V0VGltZW91dChmdW5jdGlvbigpIHsKZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTsKd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKfSwgMTAwKTsKCmNvbnNvbGUubG9nKCJBcGxpY2FjacOzbiBndWFyZGFkYSBjb3JyZWN0YW1lbnRlIik7Cn0gY2F0Y2ggKGVycm9yKSB7CmNvbnNvbGUuZXJyb3IoIkVycm9yIGFsIGd1YXJkYXIgbGEgYXBsaWNhY2nDs246IiwgZXJyb3IpOwphbGVydCgiSHVibyB1biBwcm9ibGVtYSBhbCBndWFyZGFyIGxhIGFwbGljYWNpw7NuOiAiICsgZXJyb3IubWVzc2FnZSk7Cn0KfQoKLy8gQcOxYWRpbW9zIENTUyBhZGljaW9uYWwgcGFyYSBsb3MgZWplcmNpY2lvcyBtdWx0aWZpbGwKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewovLyBDcmVhciBlc3RpbG9zIHBhcmEgbXVsdGlmaWxsCmNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CnN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGAKLm11bHRpZmlsbC1hbnN3ZXJzIHsKbWFyZ2luLWJvdHRvbTogMTVweDsKfQoubXVsdGlmaWxsLWl0ZW0gewpkaXNwbGF5OiBmbGV4OwphbGlnbi1pdGVtczogY2VudGVyOwptYXJnaW4tYm90dG9tOiA4cHg7Cn0KLm11bHRpZmlsbC1pdGVtIGxhYmVsIHsKbWluLXdpZHRoOiAzMHB4Owpmb250LXdlaWdodDogYm9sZDsKfQoubXVsdGlmaWxsLWl0ZW0gaW5wdXQgewpmbGV4OiAxOwpwYWRkaW5nOiA4cHg7CmJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CmJvcmRlci1yYWRpdXM6IDVweDsKfQpgOwpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7Cgpjb25zb2xlLmxvZygiRE9NIGNhcmdhZG8gLSBJbmljaWFuZG8gY29uZmlndXJhY2nDs24iKTsKCnRyeSB7Ci8vIENvbmZpZ3VyYXIgbmF2ZWdhY2nDs24gcG9yIHBlc3Rhw7Fhcwpjb25zdCB0YWJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5hdi10YWInKTsKY29uc29sZS5sb2coIlBlc3Rhw7FhcyBlbmNvbnRyYWRhczogIiwgdGFicy5sZW5ndGgpOwoKdGFicy5mb3JFYWNoKGZ1bmN0aW9uKHRhYikgewp0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKdHJ5IHsKY29uc3QgdGFiSWQgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS10YWInKTsKY29uc29sZS5sb2coIkNsaWMgZW4gcGVzdGHDsWE6ICIsIHRhYklkKTsKaWYgKHRhYklkKSB7CnN3aXRjaFRhYih0YWJJZCk7Cn0KfSBjYXRjaCAoZXJyb3IpIHsKY29uc29sZS5lcnJvcigiRXJyb3IgYWwgY2FtYmlhciBkZSBwZXN0YcOxYToiLCBlcnJvcik7Cn0KfSk7Cn0pOwoKLy8gQ29uZmlndXJhciBib3RvbmVzIGRlIG5hdmVnYWNpw7NuCmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXYtYnRuJykuZm9yRWFjaChmdW5jdGlvbihidXR0b24pIHsKY29uc29sZS5sb2coIkNvbmZpZ3VyYW5kbyBib3TDs246ICIsIGJ1dHRvbi5jbGFzc05hbWUsCmJ1dHRvbi5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgPyAiZGVzaGFiaWxpdGFkbyIgOiAiaGFiaWxpdGFkbyIpOwoKYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewp0cnkgewplLnByZXZlbnREZWZhdWx0KCk7CmNvbnNvbGUubG9nKCJDbGljIGVuIGJvdMOzbjogIiwgdGhpcy5jbGFzc05hbWUpOwoKbGV0IHRhcmdldFRhYklkID0gbnVsbDsKCi8vIERldGVybWluYXIgbGEgcGVzdGHDsWEgb2JqZXRpdm8KaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmV2JykgJiYgdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtcHJldicpKSB7CnRhcmdldFRhYklkID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJldicpOwpjb25zb2xlLmxvZygiTmF2ZWdhbmRvIGEgcGVzdGHDsWEgYW50ZXJpb3I6ICIsIHRhcmdldFRhYklkKTsKfSBlbHNlIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygnbmV4dCcpICYmIHRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW5leHQnKSkgewp0YXJnZXRUYWJJZCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLW5leHQnKTsKY29uc29sZS5sb2coIk5hdmVnYW5kbyBhIHBlc3Rhw7FhIHNpZ3VpZW50ZTogIiwgdGFyZ2V0VGFiSWQpOwp9CgppZiAodGFyZ2V0VGFiSWQpIHsKc3dpdGNoVGFiKHRhcmdldFRhYklkKTsKfQp9IGNhdGNoIChlcnJvcikgewpjb25zb2xlLmVycm9yKCJFcnJvciBhbCBuYXZlZ2FyOiIsIGVycm9yKTsKfQp9KTsKfSk7CgovLyBBw7FhZGlyIGZ1bmNpb25hbGlkYWQgcGFyYSBkZXNjYXJnYXIgbGEgYXBsaWNhY2nDs24KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKLy8gQ3RybCtTIChvIENtZCtTIGVuIE1hYykKaWYgKChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiBlLmtleSA9PT0gJ3MnKSB7CmUucHJldmVudERlZmF1bHQoKTsKc2F2ZUFwcGxpY2F0aW9uKCk7Cn0KfSk7CgovLyBCb3TDs24gZGUgZGVzY2FyZ2EKY29uc3QgZG93bmxvYWRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWRvd25sb2FkJyk7CmlmIChkb3dubG9hZEJ0bikgewpkb3dubG9hZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewpzYXZlQXBwbGljYXRpb24oKTsKfSk7Cn0KCi8vIEdlbmVyYXIgZWplcmNpY2lvcyBhbGVhdG9yaW9zIHBhcmEgY2FkYSBjYXRlZ29yw61hCmdlbmVyYXRlRXhlcmNpc2VzRm9yQ2F0ZWdvcnkoJ3ByZXNlbnQnLCA0KTsKZ2VuZXJhdGVFeGVyY2lzZXNGb3JDYXRlZ29yeSgncGFzdCcsIDQpOwpnZW5lcmF0ZUV4ZXJjaXNlc0ZvckNhdGVnb3J5KCdmdXR1cmUnLCA0KTsKZ2VuZXJhdGVFeGVyY2lzZXNGb3JDYXRlZ29yeSgncGVyZmVjdCcsIDQpOwpnZW5lcmF0ZUV4ZXJjaXNlc0ZvckNhdGVnb3J5KCdtaXhlZCcsIDQpOwoKLy8gQ29udGFyIGVsIG7Dum1lcm8gdG90YWwgZGUgZWplcmNpY2lvcyBnZW5lcmFkb3MKY29uc3QgdG90YWxFeGVyY2lzZXNHZW5lcmF0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXhlcmNpc2UnKS5sZW5ndGg7CmNvbnNvbGUubG9nKGBUb3RhbCBkZSBlamVyY2ljaW9zIGdlbmVyYWRvczogJHt0b3RhbEV4ZXJjaXNlc0dlbmVyYXRlZH1gKTsKCi8vIEFjdHVhbGl6YXIgY29udGFkb3JlcyBpbmljaWFsZXMKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdGFsLXF1ZXN0aW9ucycpLnRleHRDb250ZW50ID0gIjAiOwpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29ycmVjdC1hbnN3ZXJzJykudGV4dENvbnRlbnQgPSAiMCI7Cgp9IGNhdGNoIChlcnJvcikgewpjb25zb2xlLmVycm9yKCJFcnJvciBkdXJhbnRlIGxhIGluaWNpYWxpemFjacOzbjoiLCBlcnJvcik7Cn0KfSk7Cjwvc2NyaXB0Pg==[/fusion_code]

Tabla de contenidos